From 36d60fabe4cbf1303224759ad59f351e063b7960 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 8 Jun 2020 13:27:08 -0400 Subject: [PATCH] make sure auth token header is set before any authenticated sdk calls are made --- lbrytv/dist/index.html | 80 - lbrytv/dist/public/favicon.png | Bin 1349 -> 0 bytes lbrytv/dist/public/font/v1/300.woff | Bin 144456 -> 0 bytes lbrytv/dist/public/font/v1/300i.woff | Bin 150916 -> 0 bytes lbrytv/dist/public/font/v1/400.woff | Bin 198852 -> 0 bytes lbrytv/dist/public/font/v1/400i.woff | Bin 208024 -> 0 bytes lbrytv/dist/public/font/v1/700.woff | Bin 142836 -> 0 bytes lbrytv/dist/public/font/v1/700i.woff | Bin 149184 -> 0 bytes lbrytv/dist/public/img/busy.gif | Bin 1262 -> 0 bytes lbrytv/dist/public/img/gerbil-happy.png | Bin 83351 -> 0 bytes lbrytv/dist/public/img/gerbil-sad.png | Bin 86285 -> 0 bytes lbrytv/dist/public/img/gerbil.png | Bin 4697 -> 0 bytes lbrytv/dist/public/img/placeholder.png | Bin 28818 -> 0 bytes lbrytv/dist/public/img/thumbnail-broken.png | Bin 6680 -> 0 bytes lbrytv/dist/public/img/thumbnail-missing.png | Bin 2791 -> 0 bytes lbrytv/dist/public/img/unlocklbry.svg | 210 - lbrytv/dist/public/ui.js | 18472 ----------------- lbrytv/dist/public/v1-og.png | Bin 184016 -> 0 bytes ui/component/app/view.jsx | 1 - ui/redux/actions/app.js | 5 +- ui/store.js | 28 +- 21 files changed, 25 insertions(+), 18771 deletions(-) delete mode 100644 lbrytv/dist/index.html delete mode 100644 lbrytv/dist/public/favicon.png delete mode 100644 lbrytv/dist/public/font/v1/300.woff delete mode 100644 lbrytv/dist/public/font/v1/300i.woff delete mode 100644 lbrytv/dist/public/font/v1/400.woff delete mode 100644 lbrytv/dist/public/font/v1/400i.woff delete mode 100644 lbrytv/dist/public/font/v1/700.woff delete mode 100644 lbrytv/dist/public/font/v1/700i.woff delete mode 100644 lbrytv/dist/public/img/busy.gif delete mode 100644 lbrytv/dist/public/img/gerbil-happy.png delete mode 100644 lbrytv/dist/public/img/gerbil-sad.png delete mode 100644 lbrytv/dist/public/img/gerbil.png delete mode 100644 lbrytv/dist/public/img/placeholder.png delete mode 100644 lbrytv/dist/public/img/thumbnail-broken.png delete mode 100644 lbrytv/dist/public/img/thumbnail-missing.png delete mode 100644 lbrytv/dist/public/img/unlocklbry.svg delete mode 100644 lbrytv/dist/public/ui.js delete mode 100644 lbrytv/dist/public/v1-og.png diff --git a/lbrytv/dist/index.html b/lbrytv/dist/index.html deleted file mode 100644 index 92d10b7b2..000000000 --- a/lbrytv/dist/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - lbry.tv - - - - - - - - - - -
- - diff --git a/lbrytv/dist/public/favicon.png b/lbrytv/dist/public/favicon.png deleted file mode 100644 index 4570d22484629120b2e5e96a43145ecd78a4c7e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 zcmV-L1-kl)P)2o>J5A-I_{SCaJT$iftQ>K3!_@o=42^af;o$q5C{Z9fk3by@Sga9ggHgW z?Pw2oLMQOFPFmmR_xr|ApF!M=SxB5CC&jDR;HzXQ$y%%=vlcGG?ePTsfxtlE3-KZQ z?|lgX9u|`*@cLbQ_bFgazDt>ghV44wa=9^V+P;I*wd(L~iqvE;QHq%o5)~ce)qi>c zUy6_4O9>tj-_@x*goTIu`wkz8ojP;T;;i1VksD#Ngp{jWpYKzrBWJ0yOrO61l`1G9 zR+?`ti+3vEc`6F_ADkq zCTn!~*zt(LW5cjp zS07HEKEv+`8CfQrj~O{l{(^KJFo>}52!u%SS%=m4?Vsb&XV`EI$4{MN_x=O?9@x5b zmrB}}JJ+zTS3qZu%A zG#LvQBZua}n5omP4VgG=7M=R_r&*^i^cXw@bsLui%w4h+!ycW!LEHAE%3HvO2{wRE zoIcH+V#%u2l&n#k6uI-!vTJwt9Jrj#f|aW9j3ICb_cExL9inbK|Jdg1aFcrOgC)B3J+{{bY( znw>9_B)5rbpCQC^1Z2YW1&a_rb2gfF?rIsh%0M=Dn<`~iN85bnmB^?luEc~Hv&dS! zl*Hy^(3r8DkdH1xdqHI=b7`gw89Uy7gND&^;8APCA-neNw=b<`B+ZeV<`Q!7$WbmL zIyRQ|TejNg+JL$AyQ1_PF_H~iw^FfwBjRMpOsy8J*tUDOr4_^BQL(Yu`SKRH?=<=`+znA`cusVq<(1@Pqisovz~-#3T|j z`|z=2O7$o!i!CKO^zLgd#zm-(7?eu2*8pw5jO0|kSFBr){(lh2B|d#Gw`5N788M~T z>sxkQW#~D0s2P>G7uK@N?MAR*W?~C2gN`67IyxwH16~&&xZit1yTIdOdhPO!r_P*J z@B#dyV3v_mHS5^zn6({NHl=$LkjVb`d*77W1s@bsscqMqAKLZmZAN42oVn;Tzq+Z8 ziPdy-ijF&_J=`^cj0(8fYOm)xzz3q^UT6=$KmQl-PZIDOp0oZ0!X4`600000NkvXX Hu0mjfZEdl* diff --git a/lbrytv/dist/public/font/v1/300.woff b/lbrytv/dist/public/font/v1/300.woff deleted file mode 100644 index b8f1a1f5dd1c8557d3e6cbad3b4e6552c7ea4326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144456 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%0DR!Sex3j^dM*+C3Q7P=RkiRJY2(r6@DKBcQ5^ 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 O!Ej2;tuoL@MD#xsN19y# diff --git a/lbrytv/dist/public/font/v1/300i.woff b/lbrytv/dist/public/font/v1/300i.woff deleted file mode 100644 index 5c40757aff2d08c5aa46b087e2feee0d21ffeb9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150916 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
    v0S$ofq_qGtQ>0 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 diff --git a/lbrytv/dist/public/font/v1/400.woff b/lbrytv/dist/public/font/v1/400.woff deleted file mode 100644 index 913c72a567578e0a17d30b97caa2a4b1e610195c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198852 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ⅇnGZ$5O2^BG~2 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͙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 diff --git a/lbrytv/dist/public/font/v1/400i.woff b/lbrytv/dist/public/font/v1/400i.woff deleted file mode 100644 index 51524eabd1abf0ddc0ae134ce67e933ef5b224c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208024 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%0DjfvodxxM{!}6eF^i!SI-ui#3h*8G2cJ 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

    p|#QgB271 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 diff --git a/lbrytv/dist/public/font/v1/700.woff b/lbrytv/dist/public/font/v1/700.woff deleted file mode 100644 index 495faef7ff39b0f4c40548e92b06fcd3ab8f5f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142836 zcmcG$1y~$wvn>oEL4vz`aJK-#f(K`CcXxM5(7_?WHMl#2ySuwP!QJgn_NRNF@8191 z|G9_fZRqJ|+Ul*YT5DA`u5w~x5RecM5N{Z+AP~WS-552na}K@UjL0 z0reKy8M#|rUQQ9bjsgK8><K+(ce8_l+`$3wNAP?9_mB|#Hu~1a;BD++Lx8UvTBNxA z1mDiq(Fp=_uOECbv=9)W##fTBeQt{s-B96ani!uqTE-SGUvHaLmw;5Wh`nrr)=Rb4 zY$Yo}An*#NjCDzlB}GO75F^@`8<#FpnN^JPzf1>c#{o1!tiWo_R(?N`p?+wc-sDbS2*d@KimYF);U^& zY_A!7Cgrlq!s+}mwcbg)?kDbDRFoBm9c%Fr9QJM)apLYZHq8P60bGZ-Ho=OUx!O%bX#RaTzh+4Z7u2Pu3`7xvD7a!_09NjlwBU$Rj-9p zJxet2mTxfl!k^xI-i@|(*}mYvoC%yqy^>pu5{O~xlhTFvl;FgJ9Mn2!^)QS5_TwXy z;zK~CA6+ULxhBOn-==)MwC1;|WT@|QS!Y~|@U&(ksuFgaj@-28i8MW;*Qp(H>#|vA zXbQYN=5MV?$fB{A40lyH0g6#%e^+BE0*++I&wsLru+FZX=eLMj$tK#&)&UR`U?5@< zBZmY7doQ={>)CZe@i!5(LY_qUTcw)OGw!1ANchd<>51?Rr^XR9gKFnVuR06$DM#Tn z?Of+0JiGWO>_`aOw>G%a5%SNZx%}li6(`ynB!QCfkQ&lwqcK^yLVNWzb@BOc-{Z5QyocCO))UmLb zmC|E@`qIQ@Eu=vf&mi>0LovSWbeCy03;H=9&f0#n%G3wd`D~WtZfR^wuCo-OIK{I;NE5WLvA&g?p3y?hNr;Ye|n*%y-H8IoSQwT-oE5 z1vE7K6Lbd4H2Z;%X|8eFiRFiLK7b9DSlg z9Wz*F=KF?$4dj#2Z#PvtFCB|qoA`EbbS;LBhzwI>oc0n-hfgdp%bkyeXh9LaeaU09t4d8P_to_`Ig2R= zZx=IC*eYeUpjysZJ;U9xGjLse44*Dm>1e(ix&g`*r&3hSbiTEuZAMtQO9_kZ^P|n{4q^VyYe&R8tuqwdd==w{v@_LF7{)r?9QNb6g4Rdt@E9 zzrEXrC!}z`*lJRwni5C@@d%X4WJe-YyI4!NIb~m>c8Cd7YfhN-px6-NL%jjvRfCTyy1hiCfv1edb#B z9(7H7h?bQN-L{f|Av7d#eE6IJUnmQuIE7n<{CbeV^z1ZHLK9*xQTRgwL+&7vJq1{| z@1-OsbNrEJzbPksERa{VaVcfxdy~w;$EKz4HiwPY`z(!pIoKJ;3%Pq$>6!|Po_W_# zpuPRe6{!cQ2AxeWFB!VuzWi}r;-$9bUVgQhJ>Ud=bU63!fp~x0T1-} z#gkkoLHaE}B=QYd3GI)BaL*7QzZ!qZAk9piRr}xJMY`V(>%DBH@F#htzS&s-&;h<$>Ift6>cmFhNTiT3=>|xiWcL_=z}3Hs2UI1U$6Hb9vg{71 z?hqJOKWUZ4$uZSItF{xvp%f4r>#R(ptkGLsRa9bCFj(ktfusyjj*U<jH zJ!8iq*qTLI7`6SGLwV%;X#uxIq?fL>JpML}MgAg9aM6lI9YNkrA^UyiCoAZo7?T2A zM(m__BYqA^xW-}wJ0{`kl4Z<8DKk5i)vfBfCm&Cl@dx-!*s7D3Eh!V>95T2&3CM3# z*oGG_JRLy|fEP0&=C&W=BVD`t?!&{(asykD*aVF3lM_7?qUjFJM{errF7<>q?!D*f zTYUGyU0Y}U0)*&<=sW6t^nLX1qvyF>Qv1&Ij`Tm`4a>KFqD2xD2+#y?x%QpX&f71? zWC{`F6PhX|Zk24MhT2)k%7}hK%+I{wj$`}0;|k5~uT;Y}j9X@q>YnyasiZoZO(V{( z_fuHmYy{a;YJBt@duOiJ4MlG zwNZ7DP<;>W#$dit2KJ2 zWs`SGA_TOVtVKU*i!wjq!MVy_=3#%7+Yby>EWrrT*ci_JsF!Vr>n)nq6*x);2nd7B zN_zbSqRmROZE=(s>v}`qX+YnhU}U2>hBCrhXIYM@K8N*^0g6cvey0}Dqvn@;H@4XM zs*!?4xv6dn#okS57SLOd?z-Vq(+TBo@C$5w&4o(}DgIU2c=6MwEv);>Hbn zEDP#W7W(%yg7iLkyG*vmpLC6xJRa+!S0YT!kv?uvwwnxBeV^T;{glG{-b#0W@Cq2X z!^v1zl#N?;vDoD$m))o&SAlqi6d0JT5t%eJr&#%DncA&e|k|4yJNDuyTvhB#cT2u-XQ zZfuV=b?`;O*HEA^g_4-ElCbk~Bwj&?MnS}w%|Weh zgwJQttKFKvqV!`|7Yo8X3ZmTD+x42mjGBW<-H3_xxWx26i0QNU>e2Uh_>WZ}3{}3N ztNeYDmX$;|xREmR;idCI$MfIP<^ydj@IB8MZVZTTwjf%&1ihk&qa%g6!ift_!PctP zqjTB(z-ouJw~iU2;4cE<7Y$F^AHfSNt|Q{-@Y9JM+IW$`52O}+J^wX=1UXWDKFoVQ zik;x|C!{S{*)S1PwrEwHb&fc~bFRd!gc-9R{wDty(qTv;j1p`w77Ax$$V3 zi=6S|Oa8W%357C=OC6!6`)@fC=UEn0N)&J|kT_->&^?#CiR##99C-RPZBQLUI1m(M zCf?s9vp1xN19I4CKBBC zKFna0>Xm=f_eE%5!Wm{2#zpF~3-2_$D@}WnW$o+m|2@OAAJ$aD%rqAkKU(!69d$E$ z`LDcick&;J;~|j{2Gd7PvkB~>TQv}VYCpYv@n-rYt3f0lw9^1+(3?jhjHbX2&tDf} zb{>e$WP)Dk-D~imu*DW z3B)hYWYQ5AX#U1|j`d&&0ljJ6>@SED?iv$*%l!6q3kso!*$cRV^DPD^a017F=tQuj zo3^AEuLOM6eb83jlvcI8bDqdL_w#Et+-;XxhQ8HAx4w3HPg^aHg@(y?`-X#8G>M_+ z6^;YVacVoNbfy2;QC`Yk8hu-1%Ci5$X0>6>$J92jvZf_~ZiymiZ3ZSI;iFo~ zZpC*Fsy8S=l8eE;Iec=++iVV^t}Qn-@3Rn&g;h4l=`YTO$_CybNuhWiotA+iI_bkh znXSuuCap{6G)to3K1qysAc)g&%T+S#Dmt5xF-iEj5Qw*A{TEt2@!AQCRj>9<8{Brf zjz~urY3f91^?RsHT3L{In@H?JhRY#Mb^;n3ki5X)GiD+|OWx4FGp@yTxDT5Wyn(f5 z!TA$JW9#ZppT(Vo(9*ju-5{N^{-*ZXaQnI7+O6fGJuU3roek;1Y|GsBFE8wa z4ezE7@5Kr4;c~N+QH@?tJpA{_j9-D8Qh}@aM-t(wgkRI+yjj;g>ft}?gY*jazatU= zhaWo}0R=~U4$BWLUPzi1m^}7=^X}jEp+`3fnmZ{tzPu%YZ9wr`?)SIb7X9$vpUyZJ z-5byUvgcnxTHr518a|;K_xsVsv#wLd%dGc<=I#EoWg))X*s8bUO11AV*4yJkeVYT% zTZ*G(!>{Y=WW8`Vt-31$=~v)1DQf@KT#*@5eG_tvZG#wnmz5v+QesM{Vyo*-(BD!c zF7|-}z@LD^LisGy&a#W;4LQsEY!+xk79^q^66N~pT_TqgCiI@8WnGMs?*rZjv&)7= zN6THKd|3J{@p?3@M-J=XCF_kz{7@13W86QVJrTp$3)PE4aE}bX%X{dVOv0A@@m{|W z_E~R6_hVD-P~IG^(&h@ zC~IVdxvPB@RSTz33q=4d>NGZMOYx6#ub_*_pR;ro8vG!XC}t@MTy%qP?GIIw?iBw6 zMcnZdckL%aK3=k<1}-E*>9Y5L;X`?8x0LAA@YtRLY4W<6En3`5{Gmvj7L^Xm+zo1{ zh}Hx82c1oHwMpLOWbJ~D{Dc0PwvwT*Th@@GWD^lt{c#DH0$*k$gX*P4C7gxxIYK|a4~63 z+;(c#P&G0WLG5~iuX7@4Gyr1it8X=xoOLkSn@$)C8v-mG4NV|Y-@j1sTXH+yM{;pD z|0+;zkjK(b=o#97NdCu z9u3tzn>*-ul%1<-5iC489?esr^ z@K)?aF{E@!u1}ZgpKo5wZ=TG(8F%#||L#!T=BS%>rQO5U6c4qa^G#c(`&JG@yO7gQ z4KJ-VD%ZXj`-mJ*BM)!;T$QT$2PB@#y}t`%JacC3YMtzlfCL%@X$!a+i%zR%9TTkM z9yPXOq1vc@$snmIYw zDO&{+Kw^)lZE~tRzL!kwPwApfRlZnhBcP$3GR?AAZ-I2hE#l?dp^^zL&RwR@6;r1# zYl(-x$nu`@zozw}KVV36t&2dsK@HG?6@zsk$8bjpvJ)X;B8x%32SB_7zyg3`2=B?U zMCCDhdmM9RoRIH~%p(i?Uul?x_lqEHui+a?12q0lBd>6|Gnza-+C2SFChKg&-Soq~ z1j9YNUXe`9#JZbw^zA}k5r2EGjL&8kf5U;_=)w@c))2<0o%G~jSBP0C8b7n&pE-d1 zjXP?HSAWzSYM>BMh}}RQr;^$)i#lkN`rCKvz)5QVs(Qp7c_K`CRQrN}!GchWg2*KR z6bAqv1b}g#KwO!CV#=b@5n^f%R~`Q^h$y^i0R+IlmM1Z5ce8$h;{!c`t z7VZyoql_OPqZ5g#7NV>c!J!uR8~x4)jLe5x&qor@hiKnHH&w!{88F@G3m~oY5Om+( zLGE(}blm}BTgO$5?g-+6Ziet(rSl;_`rFl0{Z(V*@jkpk0Z*u)&9)%d1sPf_Ty8cC z<8(>x2&r0_vsx75JnY3*VqnXB@bi~0$ebfhmvysfqDJK zK%*5#>p!7?j2wd$V_(n0;`6t!+pYa80=6-=$rx=G%u`6nc*#DPIphz@-%;g*Fa z!yslzP5g<)xhOx^FX!p${{y! zytnzuQz>>zR-^Cexke}(hCxh-5t@F?<~@_xPTU2U+xH&D>E?7fbZsUh(>DQoFtZ9YcIJ4;{)?F; zQ?C>95A?PT_VpMTeW0LzcNT1D7EWmPTgfa8hZj26glBIO)U&zMg=g>bL;UB~v>3Xf z(-CW1Wwu}!&j%L&2Pp|N0-X@;!FvE)4Yiukmi5Is$u&hr42XkdeM!-akPQro6{p3HeH z*@hs#_c$$cajU9rzk}7gdEh{KbvE|*+-~~nofzXkyS@ha!NH`$ekK76A02y2Go&g)FBEumLTT8%LXd& zlEQxDA2_n9Ed;t)xeoGnD!0yggDkliQ%Xb@(QMoY`6&mALT>9VLREetS_tik>0X(7 zK|m{Pu9=v<`jP!1VAP-SkjBcN+B*{PCi*ud?(vO|av2IRYyzu6`Ra{)W`eLQT-Lq` z20^d`6Q|2s2X)p2KDPnhV+FATO`X)QK`X1*D^2V!mB>0q!?qSCvM!pLlOwEnG<87c zUqio-kls=K>ucn%fDgREd*^SoeuXps3jM7yVQHd-9W`acbr-xPt+q+C{umA7rtH>K zpG&6rPY%nZem;GX`dFh8R5hcYBk(W5;CFhY`O@Pi-7W$~zlq^d=WzTz7}6Abl$9S5 zeA?_1rq(=~m&+Fx`r55ei{Ht% zjMgz^w-8?1Gq}PW&pOc+=g$~`LIapL9ocPW(I)1T zab|9y=~+*`27Z>Zk8wUq{Wl!iQ|Gfk5)|5dN&-7Fh;Oh$jBo#dS$`&s8x}q?T8n#7 z#t-Fu9}pf1ykjb(hcDTcFe=O4_%Txcnp-8T|O2ih3v?-w(LbSLx6s z!E{pwEcaCG7)vi@i6T59QcLZEDP3 zV~O=`Bo|tTE4Yty?>fuo%Cp}a_d#Lr37R@VdWxGhk5PPhBpK4Zg7>E|EgbzNq`jec z*S9+VHs~8`ZH7OEkQ!&_|1z!rVD0~|p2qP0-<-da)aSN9>4Cxn8R&8^|$m-JO z`?g%~zo7)lY=pthkFmn;N}ol$Gtp?X-xvK;$PoOyEb&jhX8f&;J!f*}{|VHO!+W36 zuJ*y;1R=A4lRFw%zcggV+FBQUufRft&WsAyC@HrLz5L`@-YK%IEK<&~E{imIv(@Sm zGXSBaACZDXngGJ0Jm7FRwZ;@sN4O$;7WQOnQ^J;y;6qMpC_eR`QK|F4f z)T(apNy{Dm_2zZW;kfI<#*Sk!&V<*xmi9pWDInteD{zX- zU*L@DxBO92LYwy$n()sA>9_9l7gr6!5tb(0TCeB2Bzr&cJCOTh;fO4Wo9^4iBVmWm zCI!1J(uz(STd3#7V+Oq{>EFFRc7D zaSta&B_U4*dea%Aiy?ArkIqq-PtFF!qcsY`XbXQo|FFvmpYkCs58sV{x`%k0jqve zyqSZ!*I%)js^!XaNh)BWMUA=0eHrT_+ifqs1^O%S&t2Zr4ceI>y!)5tJr9=Su^%gl z&AGlh5maqPtgJUcJTmFfz9qu}NQdRUTkKucCHis8waf)X=L$if(_zQ>qxZURsRD2lmULQ_bZC@R z-{5zD?()Zw?nCejN=gJvJ>V1`Ja+zWcT37E@SPg4yb?C7a_PlITOmH*5fCnJx{941 z?y95ZOSxCBIN0* z?{J#jYaKK`NR8rNv?~|{X&LreA2x}>J?O@y%@e#r8~P-PN1 zGMXhUr_I7zviNmffq0_MYRe2rA@7(V_SvTbVn5G)C!vc-td0bY<`YJjNow{fbK3?j zEFOM*)G+tbiDH{MbcwuewC&djbW{E{9s55t&DHt!F4KR&Ej!Q}k@g_>?^#H{wQU!( z>NK(HPzh@@Xm>ekmp$s_oR8qU!}6>|evAo%`qD=_noZ&I)<*v|8E0;=H)EEBEQD^T zP9^(@YORvs{$9Pc<-z}1mAp~}ErA@$6ld>YaR5{^&NhZ=ko){082AB$CdPe_HyzYK zE$%`O!b-|75jB9NFiH3eDf|B?K=>6E1Rc~9a>%2DYF{1+rQdfLy z8H!@Bx<+)%Ls#bjZPWFitv>WTr%vU3x7d2*58HcO9eJJ|zlV0Lz?reYK%g#=zjOYY zDn!0B*%(SG68W3vj1w@}A)ko8IT4mZ7#Hf{L4eU`UKM3s?LujeLT1M3nuk}ekuN3c zdH{<5tGb&Bm%M4iF6>y-&R35OSC7nK|9@3wV0040b`rJKvWCMQ^Q6=xqud~u?(MsK z``?fzzy;@Nq@jxC&>8Xoo<7&w>LL&+L zkD(iZ_1Rmr^AG7lnpZ-$U{UN0?_tyVstex@-8NGIT90J4mj@@{?^+mh#28E3qBZpX z7&ChHId^Njmsd!61;ig!a00ptwBiapa2exw4Wr`+PDAj94!CSOd0eph-E=+yOszDQ zLRB~(HQq5B`4*D|b^HxmUUuP%`8^+a)(&8{NOruPRKy+KK7n*K9_Fa9v^+~996C$u z0lnK2$0h26n>1}0We!~0|BX+D5-|^lgP(xL&9Gp3#6qpIlO*5fv59h77p3&2&Dv0R zr;av)Vm{vAR@K5K<=Wn0*Jc94H5)fM``t-L%a?X)u{pGjU9g zXAk}pKmRw!U5-+5gFxOS3;e2_6S5wy&R zuK6CoUMfNGtWIz}OU9|`B=vIfx$#&R++OJ3%1rlL9tk=9s%)b6he9&(1$K6jBVc?# zfo-c)LP)!&R?;uGUm{gL=@z)jv`lU=|Lt-vMw>_ZSI+Wx4Pjs4rB~AbP-G;2nhZ1h z8dMJzF^=Q9$;e*W81|RIvCJeSO1FCXzwzLjt|_x9(=+-{KgmCl!i{aXH$z~5%7$;u z!Uq>+bwuQ@I{#U+185-_-66RX|HHL^%e?Xk{=wB$fwwsZy#LpsLM;y)s~D%O7w>mL zx%W4adip9%)+WaLw~Q7Y)>PIp3@>OCK!)6j5(x_~&<*VxCjLpv>gJK68?5-d-Y1zI zJ|j*yboTFH{&!!EjX2`82*b1(;j}1Uag)mLX!0+62`Vl}n3zRk)x+G9LEdIkoQTu$ zeuX(lA?hVJix5A@Ark+OT;fZoqZ<)ZdmvavDf`K5`A>=b%H(ATL06Et`8}tOug3Pj-a^A|T@2%Zk_(CRxsP|-z&?}Gd zNBfI3Nn1CvBW$n5`7W0mGmIk(a&hU&E?$Xo(jT=4Ak=d9RwCCjStm;vIH3PQZCa}v zd5~CNVGc{k)6ToN{IaD5BGHF=%o&`F*4d}VDwfsrGO9;EA+n?2rxBcLmKK8tL0#Eu z!%So2e;p2ok|K7L?lu3apFFqe`~9PpXhANFFY-r!1+R$qiX_JW5cIrsn%GFo%)u5%&m-ylWD{1@M)M&c-!xe6L15~ z-}|oKiuqCHCiyljYy3Aman|)_gtpNAN|~9RM8rf9Mm>jINhQs(-vp z2@16ZR5b_hxYEQMw}c2)w`r@$XKQKqyso)wU%Z}HgXmt?ywfJ*t!%45M-JM`4l(-L zXXKWc#Pg9p-=HZT*;>FX8fI=Y=zLj=>3^ExCp~U+zkGfCnB?x|-6mm49N10pEEIBB z)h3_CcwN_;@D#;~{p?GC8ok04W#n@>NO8q83rEwP#&@Dly6EWa;#_`l=4;*Ac2lLY z;Qdm25GsXK_sHmR!<<5KFZ%9bV2&m@eRu<}W61O9;t*t_CiTmh^!o6h6dUsqfvu2b4|cGtTp z0Z%tNXdIQMw+79|o6L>v%OE~B;sB=-#OIS@D_g=jl7Iwy1yb1%9{3GfE@hvHqjRRzk>Qw`I9@zCvTq z$a7l+1aZe9OdfsH{U*U)}P_ zUcC%oxvXla(0TcUxaLt{ThCg&+;Uaxg`(4wy@`ThtYe6i+ZE9D?TDJ81)%3n)cXChLX(Cp}$9xVHOFP8m z9e2)jrc0AKfRmJT(=@05&h*4zG=oT~ex}>W5 zWZRtHa<00&P$&1StIC)^$CIVTR&k?XJ$^E5Zah-Q-=g(wk^7iOVdDOZ z=&PRb>RcmnuU)+DwWP8}H#fJ6J7=1q@MiJxD!}^S4$_*`gRp?*7hp)=_dJhzlU2gXuN$W;UeOGZ*XT$z++3ZdUkTScHl!>({haT zJ;Bg(JUK&=(SWnn&8-Ces|Nkj!?Z^1CF^KRW3TFsWj)bh?WYO>afd+No`dLXny}L{ zoYGc;6>>Z67lKQh#?`s0StHLD-si#HhJA;oj4x|*X!lDO!(*%}TaDYLd}12*(~4tS zHFEc*&8fBWz&CIUM^mD$-X7?!B^2P981ZsW_lB!;(J;prSb4y9Y~1S=xNJnSOgffo zC~rygd`|Ch-(u7-{bgLY`$E-_O{CT9vYdk!LSmn#WkR?Z$8DclOds>3=}rgvbnLso zqq)z1Hhn^ny!@rk3ZH{U6z9veuX}IbgSP!kF;iJs*$bxc)U@9T9WfK#ZSJT`qDq96 zPChro+=zTtmB3+%rA>;7ZnoCpOvs#f+KsS*2}7I}VI~vTrtkdN&)1E{(mSj2Y?I{= zI}b~Tjg2M+yPCHdt3TUX$WHX#2V^g_5et zw&=NPF9>v1td7h1c$-sgE4A{0Lt6c5t>prK@4Ahs1;F5Nx{*?mx8Sp&{$5>|b3@lr z&E99Ov2rdp!Oh;Wb@(+D=)B!V-T2~Ctt+nHRK=rd`!w{xmeO|4bt~|yDz0uxG1o(* z6ZUjS`cO7B4XDhjv17gZ4CL}mer&5n^gb|YW^%4>>)(%Pfr%f{C?)Vp8Si`4_ zO@9qtP4%jI2X3(R;*a5?M^K2Fg5P~uaGRUAu;LWMT^oF>E><7idIim|ntkh`-jKZ;WhMcSNDf;uBLoVBQPh z79Rc1;t;t^6E?WwkYPnXwS9YGlf;NT^S%7H3slT3vYqUr zsv_E@!h@nlFR>YUj-BeF+9C#?qQ;`Kqnv}{2UZCVm53e3q7Vz(3{?hYseOe~CAtN5 z5J0Y<@jzlm$3>A)31&g6K?!?7(^+xFhg5{&Mo{1iovfv+{A`UUF7C0&P0dm%Ms$c@%=tLL zG>ruk9#vf{;JdH{$sH$1O+z|=W>gFw(Q8;n;ON>OGtpryf0`LK-Tl$_`;CZ;0$l6( z?`M7ukG$W;)^<74-fW8+9* zPXLG`Xyaj3GVU|)!&UCGpS72raR9&XFk_D=D?H;&Yx=cl55WPtkSA4t)NZCfX-@s~ z%0B&exXMUs<*2~{ktv)h?#!fmm%1?Dw$-jx9+3+r_m64vQNdBcBG5P}pSlnfh~_Nf zy@7I$?IWjDgK^*eya^!fG2FBVe6B&|OIng@7Hw<8>7P86FAEFPcM9yL+Ehd($s6B6 zQ`|?WOm)x|DZ#}5Ws9o0f0{){h6FtQl|O|!L7)*0JMCcZE*g$ih>1l3Qe#kgYwiqc zygD@34w!DV&<+$n%)3U*1+8k><~5gGV+YniF2ZE}{CL$_PGr&b#kU|gRBO@An)fjE zrwj=n;4$>-jWx?Y#Uk3I6lf{GV{FkdNnm_Ha_Yg}0#A_kOkPHO_2KkZcmccg77(x){Kqe9-Kj+LL4 z@p}-*yDOj4*-Yuq>6%(UUkQ?F5SO&cJwQD}&9W&G_r@Y$Bdd4Wt#n;s@F~CD-?|RT zD&d!S1zs6>SHX@8%nDHOiDnF5nLn83m>#f6j7{!+PtW)5V7cV4WPg z24z*W%Ifwda~`HF3}Si1OWDlSeV3h@`tq9dI=rlVrQ1J-`V4!2uPo3TyY*ln&s~^d zl!U&K}cf^W`kxxcM^d-L3Pe_R1NZgbo^4m6(yg^9VFi08|Go929XDq2MK4;xm z4QJ{6d4o?UR6wlwD<5x56xU)v?w7BHG|16xGWwo!a#;uV@9+&*S6 zEudY^xP&qPBnV#pf!g#`3pueBNEDH?n9e{6hHcK_Ywa^5FFW#gA zS(Y_}sKT-=X0QyKt%@umN2A~X*-2Vhpi&kVs$Xz$i{M;%-$U+aIuy8lM*5*B zO2jQAi%vSd&L$G@Bt42oQP8&+s^E~GN|oF{wzIc=057o+eYxWWQ1hW_GeXoI2+V1V z*JX2!(HdT+aDdy-b)eZdcEH`=ap2y^ba;2DMWf1U9H-S2JLABy&*6YLH8%(VBrJ8ytz1j|-;gQo@l6Dz?iLDS(Y1D82}Ni&;q4(QQ4?=b3cHG2p4J@&`wBEglp1T2_K-#mzj<- z19X%NDJm+p7>ac%B2-LQITmduyNIE@2uTj@r?Q|SBYs{j;_ z<5P)1--#8^1uk}vo@b>e|D=SKc$+5jKz@ztm|s*loR-H=&L=g3mK#zCFJcUmXTXS? zo;$ES$2fPcbQ59#NQvNslo&9hii|CAhv-%5M1(;Kr5I5t-gC^xr5a;R9}5t(;>gg# zJVUxQMYKW6)|eyHA3-w9rM1P!(hHd`z&w#(wjz!o&0{QpMbsiW5xK@G`fcH}g@7V( zVN+0a7%NX=I8SaEi$U6;)@}KNNmzXMk=ew2IExfZLO(;6G#RHi8RwLE;t`Bv4Y!yG zTAS(jbmLLVmPIY{90?3;B$#u}FW_a{6{Ss-5xjzfv{^S!*li2w6nw(MJ5Q+&x@(Ct zzTvqE!|8+Ug9I#|r)}}XjMAlc0u)(b=Y&d>v)& zBj^)J-KyW>a+KqeW!}jl7Y_I|%2nWN2AN7But%^b!mD8V6~OnXsXBi13_K3<=%hE@%#^nH8|AF0Je`p?~bip-<< z0F$~89~eT?b37-^H=QRkULYE&S)ygLDOkdddHwjz>hLcnbaaH1XQB2Z4A{&UQF7`+ z2y@IOqVp&OUtvDUjHi=$17)itbuw>aq^uu6d0A7aPQ112!0~Qlo4jhX$oRgEWJl+D%BfTp%(chxi>Y%S|F2C zQq1{tjk)^WStE53`lAFg<$45b8D5bCypc;WhlBi1(z3_b%GC1p0Lnzf6YU z1Dk=bBhL*s<;|G>pq6(!a8h8dP0w8eLOSzZ`*QhJ`4^^fY-ZP(*4P(T4XET5JnEeC zxrJgEOOoi>cAv=_=r6?Mz8_>#zK&hPmqJpNe*2MQ4p|YT7(@bX+3l8wqnp4!k;Y${ z%3rA!uvn=@9^Xd)<~Z@V#?a*}VKvlIBB6EPkr|H(Hkk?fwCNAIH=TwLQ#%Q^|ABh|!Js`?*$Z6DFVL}kKG8ybT zK+QwR6jkOCS~C&nvlTz|2sImt)waN%Nam6W3+0m0dX@F2N;V1^ zK{W}eUkYa@7Zv6aqPi2^d7=a)y`VS($A>HP!~+s(Op5vqM_Kk_UY4Kyt^y01XP2qj z4K5*3tsDXw*ue&|?b}_aujHO#(doYHG4Y@G`pSN;2A&z1rStlq5FT1Mb<;QbR*V~m)VFf{RA4&!V5WmD*D!yLg4P+xAfg{|}B4 zFUVAxInb?!X9j4j#kCj5pQRV)M@T#pR7sfw6;l}#0A9|Olz)Ga5#84GY?*qF4B5VJd1+m{U1)2%eSMi*wJdL$ z)iGV;*{lBwf#M(b38|>rRut1{dR3Pbt4iVsQ~f)#Dlf0O1d_I??u(`|e87 z>>UK`dv>?adhNlmBIkf7okbvC^N9x^75I;+yJKX@Ds zI@9zvv_b~ktswTW@Zm*J{Ej{Da;Z_kVOu16-H-$u2sfTF?+dK48h zaCz*9-FRR7?_vzkH@SSWo6nbZdnhX?XdOEPzRS|49F7)!J!C9e2?*(;Dkwvzj7<62 zIJfY^M%u^mC3QvV_AN8^1%L*Ji{S3Mhm(hiE*< zzT?KZr&hPkrAy%*KKFpx=o>fL{>~&Hj|`!TUnn9}h0| z#I=Xg)oiSsRdw#pmz5)`9BUI#B04@gd-3p>w09h#x@`BLP+gvT=f<7Rc=e})(ejw5 z#aQHfsLTA_u`z*#qMDhIEW#D?m0;J5Rc~i?_xoIaitE9NvG~^N2b?S{M>%ytHu`oAc9%cwYlZ(lUQ z65Jtp@Zb&sg1fuB4^Ci!Flcbs;6Von?heBQcNsi*f(`C&kF(x7=l<_q?|yjwp}VWA zYS&)X`&YVa?=WbO;4RKX@A?Mqt*~)W!e1Icg!Bz9Bx&tZn3SXx$ENX|=5~c{xwuI& z+T2`uQ@d=F#zHyGoNklWLfLhB2(vDQPSk#pPz8H=MZ0NgIhnSACwRa5e70jh@*dk$ z`$?5T3#vCbM>UIjCFiNRUiNOk1DLA1?~pSca=8ks?UKWW(O!LcvS|+kX>!aYCu^%P zkxF~dn72oSPeCqiKtC8}KHuZb!RSEIJ1_xzQMPU6jvU=g#gO+mjzO)ojCT``4qy^Xjwt z3uWN@PXO9XRL*x@$nTf`E+nEr!|CGfRm*wU}- zZVCq|=p70?x1AVc+W(4zQy+Vw*P^I;uIV%=x0F#5(-VAr`Y}~YFt!9q=XbBRf_Jxm zhit9mPmC0RkUu6RxMpVIZv}7mP7kl4>gZob*-YLH`;zQE&dD#1y1xa+(QWy@?AqPM z{ap^w5+h4{5DdWb8+85K5|kPc2*v9Pd7NVKY`4 z5_ih%6p~Z>?z-3FGYaEhjGqxP@K=>I3oIgYGN*)`Ix^ovau&CbSUs@MVIuVe3x9Q2 zA_h+@Ns9-V)l@WQ=2%m!>wTyQ&qSHDw#zkjDhg<7(6>D1ESnUobjao^9I}_nuHisW zaSC0=IYG=NIPg@PvZ{CiPWNd^GVtHMr%?Zu?mf?fSn-UpD;VnbgaR47@&ZxuR)OUhnQ);;BcZh7W)X_nMAJ+bam89$qTb;ve z&wTRCoQ1MYSHMh7Mcyi*H~x+@{g*qGcfdYrLG)@alkuv@F2bjXsIRJxTnpLmlu0Vc zz}cd&@y3pdDpXUzrX0dAH0>ixV?*i%O{q3rO-Y%h2ZZ4Hd4{xN1EUOk@dbUdjNw`j zkL9U};bdh8t6c9YC{CW>}sc66sR7o(c5G*_&vMjn70WfwV=*ttdkUNLH@% zH%q8LEu;TP4Z(}TGu0x@;fxc9N#CR4h^Pee8kFR;C7rdvu^DCvGRZ!0G(wb(W-xyo zy&V}5AJz|jzAb21xY~IF<=vNOb$0;UKq^nlkbdEdANS(mF4OfQR~X_Y1XTGf0MV|Q z;@I;9y~8CrXBweYw92!tCFb^_vOWW4yZx;9k=t?`^AIfYA#d`FSAOf;nJBWHC9)VU zq(!{1SbP}9ZTb~E`U12MU>GlCgxi~TOA6A@P*W)u;5nExvxYX+BF6vr8T-vIp=nTEJy88DL=YCC`x<;5A}0DP9SF=l>A>y_^rx+gX^gv$)s37FJW?ypL%bMGW|@9F%QAI{#1GICS}x{AQ_| zeGd;J;R<7f7}rz?q&fh|*-H2>bD4Nj9^C^g#m3D}TobINL9!m;Bd|YsvyjD7%95|n zrcSEP!+y>lJiYVlNL4t=bXuHG-c^0+vQl6Pd~;VPuM{N(d){=J)+lTzq# z6cK7HM01=$CxY0`NY#)`&UZV#H2P>PVjlJ6!C<%GLHmnHpZDiQ{vQk#ALxg6yuMtF zJB|9qJ7>DGJ5%s(cvX@hlB}q1%?JHki)*EP$5l=B-A^5cm^kqb;np}ILb=*e!b5~8 z%S{BizBTtfQnVcaE&57MqOO^@nkp>3@~=uHXD(7)+cWbwE&r^jo>? z7h%)K&uIsN?~t%fB{^*&eWOxsK@K+0A^GC(Y66}r zQztqus8jKx@_ln7*KhK@Y{!RttxC)cM%rLVRM>P&6TIEfDK^}1o}^s@`_te-k>0yZ zNCVuN1EgeaEC(}kS_sdn^m1Z67!K2-0zZ zol;9&`s|L89wMX<%dHk-WCEQkx^sgdau%nRQz9~f%CsiT#HLkdN2Ncl7G`7u%8RWQ zY6idJ7Tx|}|BYN_xme{e3?I3Duzuup(?kFH$)6!=o%T2y=TQ7nAnCbd@m{CSz5JVh zmi}EUAea5xU&YdaHl1;E6>GpXm>>IV!rhAMhF3G(PqT5njwEJ1F?Et~{6czHOK(Kj zPj`SdnM=tAn>CF~$$HGga`3`Z4htB5{KXdmrN{gO7WnhIC+FQo&EqYayzXC+J>v%U zD=HR{>(*H7C}PC0EISl+&-|mdvHQh16j;rO$jlN6o$<&7B5O>4L_SNit`1#kKUPa` z=|l}VM8OTC;H1@ze{Y;(Pvw#m{$_MBTs&)EI^km0#DrHBWIQVuEwgEHa0F6=1KH<~ z@M64_)&=^#g{!*62RUTgcReo777F)*0QYg1{&Kuey1W#4qgXLE?`)h;OuMthV&b8Z zgKPLICo%Ceg`2U`^~ghhi9v7GF{PfP^hcQDcV%wmDy=w7H$YSYV^;rXP7i7HaO~H z9%ku;$Nh4!R&z|Xf8BLCw67u!iAf!4@+#l?J7ai7u-XziZ+fNXIHx8{S2L8Eb%+0a_m;0r6KB0WzUPFYgVK$l#zds?R zFTt!iK%2I|U9K-&u0I>xpWWM+u-Tvcu0Qwhzi!lj-E}JsvLYV?$a`-k_!K)0?EHTX zNVut%?di2^mI_*Kveq4wS*|YhNB^nZiv&s9`fB=_25xEk%2xDq?--C=bS}0@ANr}v z1_=8Flws2N7*rb3dlfH?61DiwIn+5qZjT=}rPdi8MZn z0@P%G;@&;vd55V}Db%1B-e|!dykQSfu^pd4Vrf?<^-FUG-j**jz8az;$3d%0EgtsS zzF^OitLn7LB|}l010pZA{VyGio=P2zO@8gLJ1>F#@cDx!+dayv$^}mk#{w5i4*QL^9viA7`pnN6bL}%_pIl1MfH8GYhj~*`D9^R}5|2 z6&s18uPeIy^}JI=1x)Xp=AWcN9hKMo26ij=dW_a0Pcj~1`hgMBCum&Lz0!jrtS_mQ z)Izdc&&8B39tP_irld@Uj?(Lhc~+xzB*Gf9BDPjlP*!kBq!^UOii*&Pq2uB%5NNW% z(>KjX*R%eEFVKXB^-mR)A&osTb9eYYuhF1r*ZnCiAo@TG6fga)T>mmwpEvKI?EdT7 zGtJqva@4-$@tu)~QQ<4^3in2M%QcEldDVdo2X_6u3Y zV(Uk58_eXJd*A5?nX^S^SnJXfF8sdh(tx%uGK^2c8;P;U6CgOzRE7#V>>&ie4X{f8jX05nqU}}LM$RL4t6Ol7tk30_W})_ z%3YXi$Wj(WgI**~a#S;1WHmj_i-^7!u9dw^w@9KP>)olhD968BPMyDmQI-F^58O+J zil45x2Sb5AS(jJ$X&W3SGmQ^M>CeAk>K=qqg5UNx4G4l-n}5*-1%HrJL*MUyma29R z6x+Z%MBd60gauuG_@;fCzev-*u-l39&Uqe?=`a4;l~E!y)O{Y{^4pT~;prXBi4vs~q7@ICU)+jI1v z;a4ja)d3dsBVdXOc864WTRE+40?uGB z%o*6P-@sqePHt<0bLExKvH}S{BM)&1AY9i0yT#BB@pGepJ=%RA4|+sc@TDJhcy8cq zuGIVTni($jsF9LJEW|{+%Yt8j3HO7W!w3IO$jg;dn6OO&D$R6kE zX(<8yc_rvPSG<+5_&3)ctjILMkF%8^1n*IW|KVKph$AQ=1xBb(199KKTEfPyL?h0i zdvZUxGD6gF3iSD|xRr~IlKa>?0}kz10!=j_6_ zU6Rm|y!EH`5A0|eai|r+qTY#)0{nZ;wTqonxp^+adIix2lOhU8l#WG7~9b(>Yu!ToW*ZCOGK}(^$-mnE)!*BrXuHIEME#2 zfxPsu6BVcSjOrbbmP31X_E_8w$_yqBY1#IE2+OKf;sc6%`p2RsK3?9tl2j&6y-Z1u zCVS^YzW302 zJ*__?8H=~Gg98rR!?pZk;eyIVr#y*c6}m@g>1P3o$cW@@3C}3y+@@w=P|m|iVNhPj zNnuxp;>?I=e2W~$*=fd^QO}T$946Sg#+i}Nh{j2wSAM~n(a#vcnUT&AmQ>cVKncxo zvN*=z8V@D;VCf#(#?r@2T*BP9g_eTB#THtI#pTmeB&n=qffAPCXK{?hRTWA?ZiyD! z#@J^}KbDB2^=S-3z2jgJ9-cAZvqEfHjccnPX-_-$M7?8Z5gw62V<8)w(cBY@!F3es z^RdsEQCTI@o?|S8x&+J#mQs%5#E!_o>WM|;>hJkNU@3&EMP@04&Lf+V-F0gua2OKe zh7{jhwjqcShCB9~A;aiIAr=Yiw*z@_?^lBOexaYSGj0qM-FL0;)BhNHkb-UC(%w?`?yB z!a;@KzxFEE)?*6~@&hN+O)LKNuhHXXemy&^qE;6KP%97o_1e2gVJEDAM*JtI&e@LN zMh1ers7*m8oh>q*?E}Xi4ggwJo+C;yO*Y35+lxp`uNqDK4k`H8j`UCLxPJ4;G+8b; zZ$vCMRU4eW)Js-demLJyUp3z;4cH>t{CSdUIE*j8#yczK-~7~TOT$SzKjcNL=Omxa>R>COdz^o&-^# zF=9x97|<+B(fGzlH~*4uPM2&MUK<{?PBS(e6#Es26A z38F@0^qPP!iQ@InoaC=hV?>_>QKIopkoF3azIKT^q`>>5f%oSb@6Qiu-7eR_zb!{X zeq;U%Uh9o7%ZyUdr6N})pH+ShhU|*i&IpV(*p~SWS8^GR9qfED<67CxmUV8O2yf#g zrs_xhCVo=FG=-^JMy~UISKC(yEnQnJRbA)2Z|)nP%y?g9)-NKfG{dra%iN`+=CalO zAfa;AGLL<{W*BZx7`>2MOZRcRwD-bxyC(K@uV+SPxMPH<0*!zdhSS&kL8?Yor8^kg?UvI8oxn>xzX#ZfKe*y zgJ(Q@P;a|@`tPr+JFG#OL0r%Sukg?b9Q9ii9L!V{8`oO#(VO;>~l;55ViUr#%k=cpfL99p^&&; z!qN^WkTOse2QpGtomj0nRFq#1L5)}Z23n#u@0i+6`%Qf}mHAqnck zsw}^~7E^Bw$>06MsqFsxnZ$0x*f^BM4b!EsiaZ4JWmDrzl-*bYg6lZC`ba^jltRQm zEFI)eGK5&g;+yGmdHk1lAdA+;iqhzHY;31VSY*fN)^>~?hPUN{Em17&zCY| zm(JbzwI~8?oWZ_V2ENaNCSD&jsQ}&2uapuE57m1L#2xsA3FLEjTIc>d^j}d+xmd`W zuugp%P29$)d_q%RMY7YVAUhKY7QcKs)QV5v^R-Wn9fjvoF9fPl%Bjm`qswcb2nhZf z$q9nb4+%kS`J=KQAVmhuVh!Hhk}2gZxfpx;s$!MKIIo$vLW;lODK_WIWLlQ( z+3s5QD4Bmt=9Rf;#+(|0Ci95LK^NtJEUvSpc3OQV{kB;0pwL_70AXmwdT+u5;uCd1 zoY+L(;pFM=eas`_Gie|gI=8-ka+7e&_|)*+9~osW>rPum+n?l;w3ZYt?`f@X4J=~k z=Hq7J7OSVLXRc?j7pxblXLRRukIkD9rV0bFF41LCu|<2ur^!6XzLS0@Cnq~7OBJV@ zFcHNb%N|o5?-J<}bsT#fLm8hNnHyyq=~EZ0uUg4DFRDv=K%&%FZYgC2w%oKzv6``J zu)45{v0|~TusX2HwpzCAuza{RXtAo(s%xl2w`XQcOG{15*3Fn_uktXwXTqOmmHm})D6B)Ib*LK<09`aeRNNI_;@BgGVfheb~jEld#G zq^BLBiA7JYC`91>>4W3N|0c35<^PkC&T9Lx%_JM7Y#E1Z`o)ALSmz-tN#HIAu*%>07%8)|269WQdn@^#H7Oi zCGH>A|H(+xelrU9f#kYO9{xrz`rmgTD; zIdcPw12?GXA%w+6s`5EVq3;z$llwADX0*)T{0_kwim-%}e2L8{BK~gUO zItby=>Ie~zbVg)&Yw&g^-qEJ2Yq|lIH^=dH!^78D<5}CS#y01O+EX4|bz6vxIUgma zmILc|w?4~c^VX8xB1{~$BztZHrp%s@y(?j4-Sy6J4f zq4ZHR-uisZAL8Dh-rcbAehc=cW)0J+CE^c;h!Kzdo9cWc!uB&i$am?=YOD3t$n%5q zn>s!~9)ArAzXI8i4{)m9*f44Ic07L!dt9w`?UUNLjb!}YSI#t}y#`c*ar_skxgIlI zCI%tTwON1P=j{c)MQhqu+^mWF+<$-a_+pMAN`Hj?%_%FxkKB;nDsjb2xqX=!pl>B= zd9}b9N30XhtZgzE;HjK5mpcLT1cjTH>g{8KB1E^YuFD}BYXq)cEz`?eM`x-y>i73R;YH=u6G|CA9J29UYzKNUM)JQBi?n)VEl<0;?m(n zlpS_C{Mb>B#oMAK6Ru8@+$Y1$oe0EKz@t$>N?u7UlJxpU%#4T`T`Uu%j(~GnnrEdp zCAnuNhi?NUuAA1%w&$~jIShQnC?mGVML=M4|EYlvK>67mX8U57`<;X8T5AvNb+lk^2{bQyL#3i3~Stf&WYckprln4+=c0fO?=zNJ{?|oyIg0D`xWxO<)9mgL7iVz1Pf&n@ zc~vml*v3s*w=brRF*{cZAtz;HihGve`_I9L`Q%8vzrvo(R$u}%;{qYV_Y~Xl&vErE zzuu5e$fM=1eK!>MO~^qjQ~!`?_YWl`CY!`ITmrc@GUIKtc&63RC8uV7&StFrO#;H7 zZZy)3h<#I(o3e!s>Z^7k1mQUif1aPSEpVgSn&aXJbFo!5wO%w46W89%pPSI0Jm0%D zRKMlG>Gg^(l4~qGed*13u`YF9>chi;K#byIOQ0IWc|Hc0g|??sELSi}*E7 zzMFxjO*HXa{v~tkM`NbWujvLm;Gjno|gkTJ%z}mqeGm>s#cum(4GbC{USTa+R7E;c5lZlyp{U z+IiIZ&->=B6Vl=J6Q$=a_PdVM$;^dW{^5U+E=0IH(^!L2OcaY*7jv_$74rp?#~s-abR zckC8~eVOTzt6V{w6E03+#HnWPbd)%cR#xi()(iBo6ME7TZavJAHGJIW7WfAT@5*D6 zkE83%hWG9yzmsXygDZ=SFMn`nzctJiWFhQI0K6)Q(|c0#(ssW&L>}KpFcwd+iJ)k% z56~t1xwRl+zuLalh1KIFZcmTj=Co0dj5Cj*$nt0Ch&g}_30a91tzM&BIpf{?8S>gn0h;6KFb+?8XN={clmZHrFh9{T4gjSW)B;2zmNEv|9!xyv@KRG3?_O4edEMSU7_y;(`sxBH=YuEEIB9bUmATMs)^w}j7fQ`73$otmNv&TP zL*TJiNF38`TpDPptF;DU{DSb!DTba@tX(FCJvAoDh6Zi>$mE5VC6@+|*yss%^}94F zWQeR0+;d4$tl0Sy#ranr4C`L-XzLt(Nyc^B1r&4bc1M3yYz7krWna(K?7evk$C`HC z!+}Ue?3oBjzDUT0HH>uxL-n79g=C?>HmgOtw-YYkq3urzrPZf0?x_KzpOt^@aa>YD z)a>AhLP~+#?(w2U7ncI}k!~%d-(0rd8C|xAFu%)>)11uK53P)B2>G~$PJFP zU)d-Oy}UqYT6P153o5>k+K+)(F~nB^Cz4)Wews}k%l;Q#A&$ssV!+9_#DY->Pk(m3 zoC6OF>eh}8l{l7(d2&-XBS@t(=jZ?;JXDRc_jp!)Zj>A$&wBUt45>F9Pw~@#C!Z*a z-{##YDN@%6zXS(|pDW4!#&yBqiiev5SfDzy5&;#Z8Q>*!#qE}87dj~vmnK-K`?Ucg zd=xeo`np_B9=ZIf$CDH&UgD zjLgrt@#cXK=@qelI(v9{Dwx?;>)z}(cSWF+kRXdfC@m>RZv5w$jpqD$IX4uS)Kl+6 zub>wX>n^$P2VKyesp#WxmQ$BdOw-KtAdxlelZw;oo5q$m0ViyiUD$!A0b5V+MbFkQ z*Fu%nEKWH6_9@QdKYoK=#8ZP9At|M(QPgt9Ov%tGv&ezKi9js>z)UDP?Xzqk?Z9Kz zvl`d<`q9Y%N)kg-Ne1q4Ok>}ee1$yASTupGq1C4Rvb@n){0|wBWy6qj(lRHdFN$YSWGgw?3$^6#3-4aIe~! z($Sfz{jl$5^(dVzU1q1Zp>eYwT7LKLVAi%_AsU{JTA^Zk!t*1mRa^4Ux5FgL#9WZ)=egzLE;T!DAvdX{K}!z;7G=e(|p?3qhkt_rx{oKJ)A?dD)T` zFNoXz>3Oft!Cw7+^%vmwa1y+kS|}qKeuf;6k8`JIm%Z(zuQTPF2)L(jzM|Jn_ z!EYcN*;+^2fe$Sc$?&a))ftAdxq)j%x?o}Rdd`xj)i?34p?~(UJy!74{)_I>qUSea zxs|7<$+5%3iI!GJc?6_S1ZA7Y>}Y)1j@#|OM;jz_p|3q z8upySGjVN8+Wx9si7r>78if*~vEb@5RQl=n*OpuG^^k_Cpl0JX3p)8OcGqfI-1Ja} zLNF5Wb3c7y{o?y+lNO;1Ir9(oO~DNCo_?Z)Z$U&o%C&^#|k#p58$WTO?r-PX1&)G9AMztJf&yv}G ztp%0UPgh&K3~?$cyejv+nbR1mJYUAo8ttd~ReZl3^_CiFRDkE@oa2^An#A_qX3t7H zG}LAkgv3mafmhRfiUPF$!IuitdaCQ3Pl=amGtkitk(4|piIN}dm$xO}JCg><6WO9K z7d@;nJPKMNE#NTR9mWSfkQIn=pu~0>>wP;}Wxtdj>8ukK39VUPPG@BSo;NLGBV+uNog`^3W*9AI zSS@BGEoLv!)#vzHDT`md#}OhJ4>*(pU+lk0e+xf-{M+9<`jWm}gTKb;Cx07#>iPGf zXEMwT^F`oMCsevGZip1dP$(tc5-Ez?OEVxn7TNk}=3?gda4qH{_SKqsC1BuX@47;6 zK8_qmkip$zD|%=yDf@Z!$SkJw$;@T_-}UAbcFQ{FRo{#IgT~ADb;954gA$X77est3L$=&wVyr6SfU@lv(IKYKc516QKhc zUv9w#VUC3@f3Nf8pdA)2*6m48vZgBmNUnJaBB%?kj~Lgbc~QGm9JMrggHKv70Rl-6 zIr%KWaNZlOb+t3MeK0>w0+u9SlCanc;2UGiP}PG#@A2a|5BNB>z`K|gQ;a8>+Z9s| zcW<1V9EPa`qpg6BhpJH@`O8+OAb&gvV?2I#%!F18a_th;N&yWKK7) zRVn?l&#se}2VL_ZDW|Gq%N(v^&?ecfdC82gj^|YxEzv8Afh_;7Lyh!YOuCw|e`UMQ zwd&|>U7u!GxDs_{{*`68qsoPQFJ!OQ!tB74(l3;&Tn@Pn8dj@Gp&P{hF|cp=)@ z=j+|!Hd{J}>EXBL&F#3|l(|67UCo?{Jykj7$X4<@WxA{P-*N|va?-uDmS}10*CVCp zqRPqUOz5OuFb)czqd=MLsz2Mf>LYeyG(~`3Jbk@6_i`I`FE#J;KH4UJk&m%O4M0^5 zExOe>{aSyXf@GMby=? z*xgyj>22Wcv;VgqieA%MA?^sdW99lP=0WBOkH13yj2=fV_VX|seR2G3DoE1|YlK>m z)i;En8O&USRzbrI9kGijLvX0h`n6Mmyk9A3W4K>4%W|c_IHfx{r{Jk!VkR(!>1hH{ z=a`PUa^gsRUbto8ocI7fa@)*&whbZyfHL_^TMd|~DU`Z2Yv{w{*@}T&OjR*TBqow0 z`^o1O&-8$bQ3b?RdD8uXX?cO9f%Y<9*tm5gC9BmX4oOAC$Y&8{+dVPs@6RUj@HTgC zjwCBk8TrEKc4#gkaL(w*jIcH%~*2XDfh6g5~`uh?A@;uEPUpd3yBkIAwV_U`y#P! zUZI_c*IqlDXcp|%Zh86(hzWXkWK()0FPljWlAKbxt_TI?iBeXgp_HCnInK!v^76w8 zD>Y2UCM5#-V2$sEkY_!9M|U?;nfbz znvh60&m5Z%LFo4eJTJXvAM`%%bytZJt6ooNf=o23e%Y9ptpn{Xan+CNP<&K(3( zbgK@tZhKM_R@-I??U-}YEz*b0RhyRrVOQGnuADw9lze>z>I-8IIh+{;%JV)Up6!wB zH7rPh$UMQBrU5lUdP6Lw3kTo3AI*zeSZ__#W;ZXtK|bnJ#?CWdGWm1sS5X~6uV|kX z#jppmoVr`hoom+!F!(bhOOngXqceKCZ_R_tD3nokk!C{5N+9-D_sDV~R<`Y#R$j>X zox~aa<0=2(yt>?U)Ikj#Ix}s}8C=-W_*!Y`b*mxHK7U>fSd!h96gV z{H1KqK2GY`J#J+=&g$52ZXG`^GTP;D#|$umcCG(*{kL#k(WX)z-rvr%=d-J#*AuV)c{;(rHRk6SXiIbLtLi>s&FVtofn0FYLMk&SirrffXIjKAthrq6e1E9p(=c(1oe?%tVVaFh^_#vJvZ{qsfb3>8XhSuy%sbvX}rc|9l$Y3W8@V{q+g8C|yOy28r( z*&gdXq5&vFL(! z%|3%69mf?Lx!zo@CzeRq#$y`=F@#^->p}+ERZm-D$i93%`@&@a`LVXTQ5Hk>g-0w@ zH%vETK6E~OK5Sli(*KA(3?&RDB0MxaJUlEsLbmkhnyeiJy}aRWxbs{W`K1-fl;)(} zXSWLd*%MUM<&H?`zgQrcg|$nB8sMo<6zZ7&(A##qy{M|j`h zB#rnRqsVT~xg;n&eXN6`(`z_bpxY>Y#qXT|-AN}!{nRo?3tb1gfwb7vD=#_nB zoA6)zEIF#iKeX6$X4oMwFPQwZ)X{On*nQ#e@Q=q@Yxr zWSf+aq>t2{4g%tiTKE#rl!FQvkuUvth_>= z&qSyEz+qbQg@MhJVy+4(so%$D&VDZKn#-H@zHcZ8 z;FT#d)ZO>fX+X1z%E80cLYd^{c}!LJ+1w66Ocf|u?hcLiMFSZF4wd$W1DPcbo%SWq z+$OUGGde1KtFyc_CRIF}vmhQ*XHNWCSso2%?vza@Cb}8fWXB|e{kS6S6FOx`y7qoZXhqAkY)eXWJEU=jq6l*Qi2}&DS1PQ;xGE!b zQ0*>Tlhy!=D|bpRV`gY8chD?#U??tk>CwhaQJmxbTb>rB-lS4gZlzh#&Jb5_H(fq% zTfbx(pl38r<&b@+dp+M25=OHI>) zEc*z38>`+{xpB$?Ue)n8sBhr6Kv1BMR%h87uWNgoZFM%lqj!b3Wz5-Qa1=iBjo!qd zrk-WD$#YwUNDoG~$LzziQgfc;$00V9aGvtW`iDM3ufJkn=c3$~uQSV(t)|&2jjdj% zdD!a@wXjXPz|5roJ^H6&s$HLc^GCOf6epr6#3P zr6~d^lxzB~Kieyg%O3W>?-T8l@8j+7u$`rq6YUFlEEsdCNv%pbuK)#l z)9UG+?TrRhJb0X)jRyI>8k`W9r}*6)j(CMv)0zlZIG5L&J*1xA1|UNVoh`GMY@5TJ z?E^hRoH&-3<7&;8om^VUw!>SyUGmvZBK}YvP4YL4Tk^EQyqc;2ENxsaMPvs9ZS*dk z*&7V)3e9cVhXLM!tzxTYF45Wh*p0hKroMw~O*e;_zB82PoA+mrw*ksxX%JVcWxZ<; zw{Fp=T2^#It59{&p8i44%^sll(A&+!FMRr#_2`F^!s}J1O7}L8?g0kS zMl{<68nUDn42; zuf`l_;^jH7hK575j_I}fmLtT6Dbf1CWyb5cr>&Tp$Hjo38`5q}t>g~m4tNfv4%gdH z>*+UvW@|70J})=_e*;f1w@+ru-CFI{r!Odu(eg-lPgC;sBvZ522VnalBI%iAZ|pc4 z=$EW`C(w_+c`2UX3ybRoB*PQZJV_M60aDGFS(#2>dC~tg19a=dU{0qL%`(sksyZpS zS|Xw_QC5o6J6_^HssNYzr>QU2?+Sc|ujMY1o>0cs_!$j@q@^U1AJrp^J`*sMA<4)) zNNFTftH)X+5in-HrI)`JSI~TG`0605k+-Z5K%$uhFwisuZ_97XjHc`d=>|nFuEG?H z!V95^S+UQG4*Z6hvo4KjW&QviO*xoDkt%pjK}6ay@#$@qLh}d1m_s#yb3M1ZKU4= z!(EH03ajK_LYf)CQ~cHe(#y%iVa>ED*v@JtL`&b5SsH0Ga{-LpGgA}Rwgo0btg;=+ z2H(AC8?cX5`GuE4oNyZ%|BwSX>cLYaTQ_oc$>Wg|G$*1$*_{z^^7^o;wk;9y-6Xc? z3C0c-6Y&5QAoU+XI8FWNRKN8@zS5AYM0zsYcXnD~G85GR3Lx^IVz^>G?UYU}=>tuB z_+vTTklP>TX{}dqFzh8KkhuO~RsI^GJ?hXM$n&QQPIMjvHX7!LcAS6@se@MZ7_-Uoarbn^ zQ$awk*`yz`QbjRfv!ovqR*CH22k4k$253z1;#AIANFy#e0LExbg=g~VQkyBf;`oU! zp$v5Pkqk7eA5@g5->XQrqh|dm;>wBzYVisx;PWEy*#Z=kVSo>N-2mofF2LtKY5>x( zK5z1+IxpYwXI{)b3xHv=0f1mnYzjz+K6P0XD94jXE&*i_As&}^Cm5Foq26N-bMf-* z6$6NpHvziSqcA5r#wk~YNl7R;pXFX;j}4A3i4{NxL3~p9MD(Z(63fa7P6c2U&?Tl^ z8t|s8YYwU0lV{0&BH5z%ryQ4)z~&X(;{m)a&{j{p~Y0GLJP|jU`iVr7|UyhDHFSS!yk+Di&V6{UrOKdE$Et z(!{+;eu8^M(xkmm{*rv`rBLN}jb&4k0NE0OC1U_?<42zN&P3JgsFbKK**5?AqYhU zyTGlJpWr8wsDH7iAEv|%?X9Vg5Scm3r;LZ_ZHy50)9@Z(vM?wRxksCOG!Je zT9h2xS>&DMJCYnZi9lf2l(fEh337X4FczE!t)w7kxKTF!y-Gwefs<@H>Uhw$q=z|j zrYKyIdvZ#L;8IEtJ?A^0wQhl9*mIbt^)>i_2_ET^pU=~d%Wp9$Baq?=C#vUyRS`Hz zv}n}6Usdh?`ik2g(U9Yk4TARcBBJ&LASO@@`PC4sB(7WHCFLa!vIwkK(r4p6i9|wj zpL7DMf9NJ1BMiStFP||?@i!AU7i>my^e;x{U${X5ppZrMnx$FEef)Q-tyRzC&{sLCrOm? zYsAr**z#23RA{N8a@Ljw31N!e>(-WFwNLO+(PDG{``Am>ODZ(O*CFt%bY4nzeAma! zpe{NQ1b>-&0)Lfm@yj@MqHjv~BKPrhSogWWFPDf4rkAvPTX4pL`_oM2ACW}Kt)+P9 z;wgPnaq7ya@>zwtrGmF~<5S|L$e)w70P+BOKN)w@IO;|;%Vg%b0UG>waVq5)q!G%- zKWgiOTLCRR{oy+Kk!}{!jSkh`IBKO zy)~T<(YQ1NCXpuVRlLx4me2wIpa{!-$ zQ1!RW(MTy%ijqEmiP7c@plF2ON7Ru=q;$}pB`YL64@m%+rA+^}?be9Xtnc1Ry39R87$W7%$P5&_yD!2x4V~lZV5-3eCxvGJ{`Xjy4ZA877eK(5QWT zq*{Wr6rxPu$e4)+;NX^-TC+w2`{&olb5b73mGCd+1vA0lpy}o#GG)YL6`C^(Whnas z-)Hi})w!RhEI5tnK1auY4O0{4tQcT><$AHq}%%&~=Z0K&@nLI^WVA3`QRrjX?* zbV~w>kYiwfB2p*yqc7>I_%-W)LA*s$ASFh&C9x{T zh2EQDRrdI8d(MjgE5!S{!j6MQ7AvM8Te^i0Lp5Q?j8JM&(2B|B$2KxJwL3Pfcgv+v zZs^teS8_)LC9U^65!GWfQ1A-hC0$zuoXOp2YG#WcY&Vo6J(+A2kxScxE28Ft2>Slm z4wq>SHKBqi2jE|#-8I1~w)CWGl9oeF8TAn37`#a!64!4)DTiM#iT?1wozbfEy@zsM zaV{LPM(d3QQ9EY64_dLmq<)Np5c*5Hu-*Sy0bP>#4XiO)hCULN(m+Ydhg~B`&xP|T z@1O-~D^|0NP(IScbzIM_7D=hC78xiF6rVKYaR;D$z6`GW*c|yl7AF;;#LM3H3-IN9 zIsc4Wa3ZgOY3L-jBvkuzV2rG!!yz_+^xQY!o*J!#I4k}!7XUi%C?pv=2@b$qk8D)~ z*bW6>xBzs~?0L!V{9&$4)>9`#Cm{jY$Zp34$OZ4cJQ_dE4yp$62hA_Oj@!1l3!R6z z#g~&tLz@}X@sHk6)N$nJ$Ztyur;LVq(dr=|VTsgvfFVQI(!MG8XcXcBn81&BaZ?g> zNpSOektu4rRagPtD9nOx7lvCzS_qbx0fWP;dp?|#zIH4$Q(x)&r_MOvs`g4JyTIu* zCt<^Mqf_f)6FpRPyRV%Jz2pncaF{A}Dprmnvw)BaoLrf4?oAFgkkU4JKYD_w{f&qG zxa4kfd;A1``}+%p97*EelC4NF^6dFB3ajGjiNsOt^c)=Rv7Ov-_w%fLmZ5`)YB~-C z6J*CakHQ0U5icenqEp|iGAGRqetTx;1e|Cw`XUeJyyYp;f?ga#QH#H80yC*4?jUYY z=sbf56l}Y_!TRS%1B&b{fm@v4gXKb}do|8c@&|{qV<{PL*gy!Xmc$Zj-6Xf~CXxl- zipW)e0OcB6Tq3l&PQ`4U7o-o_$a18NCYVyEBSRFc-+SS0H5ofit+(#cG!eJ4^tIj*0MB6 zHZ}F}Yx&1(7~nG_kjgfqs>oCmkYZKI!2UUADH5gz{$I&?RNo}i(MXI-%)ze{Nd!Am zd~?w=&fEU_SmN)0d;=(WO9kT^qKiv;>0=9yB7szkRFafH!h3|PNWNir5~f_6#gAcF zz#uNcS@_cNLZomkNh&U**?wST(fcebkVcV(y7Cbsek867sUna`0HrK^3P{3;qE{%Q z{b6=}Hl}o>IDPc-h#knkrN=cnJEkrp?F_6**@)K-{pW&emqZ!5NJ|8?Pj&}6a;?n> z0Y{41ki2L8_IiLPS}xd*A3bnLHC+IX(rn19-$PJ9cy64t<@h4fImxl%d=*{_!vzwzsl13Vr{Hxi<#!Z+=YBMc+J4I(T&Maa z#+l*)N)y=)A?gp{bJF!p&t8x0b8=_cU1ZV2W9W=|sax?tIA8yJH$n;~4>;N6e{l)) z*LXq^6D%IJGt9(ted0$xZm2V;!06A#GoIh24=98TKon5bzTP9i9&T}PisIK-x+bLZ zq{k>#f>ktb`5`$QG{;Z_+Sr*Dpuag57}uk2M(jI78u0S6HpshzZ;&;K^Dy4|?uXzH&q36_@5{W4>z(mxuh}}{^A%lEl5rYDQtXgtFY(9M+ zqNr2~wy2U2l3#))hhM&j+D(YMTbn!^onLea_K}sF`4It{Sg{_s3|OymiQ28oMjlV7 z2*)3G{#!+JW!7kq8YZaRV1O)B?5)r&dy)JI1LSJfr?19#H&j(#M>KA>Gb8u`vTyX6 zgn>Y7{-?AFuN#sq(Iat7ufn&Kl~^%`UwDC%sxz5;#WQ+)_)po!LN}O#@jY~zl!0;w zyicYe-hhvuxG#(zh+@gyM>cLG(hj;;UNN)|l6RHz`c#cZvtKM*i-w92@35LMR@Om+ zjnA`Jme|DvU`kn*RM8OKZ`I2TGo+SkMYmuvDYB%%SiUgXWxx!RWorrd=s9fKiAFjx z=;5uyp~wJNW~A_+&_yvSe!3S|Y*XIh--v~y6=O3t;Re2EZ$K{sY;k)DCTjyz-szO? zmSmT{vy(rR5={xIq{{=`Dxej?9m7}BFhxelX99bvtKx<~zOay{mZFiydRX!BDd_NE z9W#TBQ|v$@b2_sRvFtHZ|6MNDyu_q4`d*m>&*E`ch>psgkrv(#x*D$eHQA{FlU2K+08E;LS zm1s>Ziun?;_bxl@MuZ0)EXKofEC}M$bcKmMfOIbn0ntnT4b=^bCS(Sn0FVu)PA7lK zxewl9(bF>3B(h$d%(57W^S@g3B5PNoiWl%35X@#w)~2pgUgq9tJtO_cU!8G#(jxu)4tJ%u@O_)`-AS15zS+CN?qBC%ulyH(^q8BYU<(ae{ z!fMt8ViS5*JV=iVZ`P@luV@{t4D?T04ZWk~MmUqPV_(ggP;SDmLI9a@UC#uSVimuD zC*)9)gu<|BxydM`|8WR?pMdvxUqu6Bh3K>9r3pm?;7^irNkRz;w7>8vWd2bLWl#8d zU{o<2>2rt6Re%**F7NUrQ$FM=tQP%}$1VD$Fd}i7L@Rrk@)S2kqYyI1@M8vvR$(^0 zl(!>_mZal*lVoNRtz2dbp$CZqnulN&{}EbB+L5B>#f%QE`H`LG#Vjvv)#ZqxCSb;s zcKgUr(|Hz?)^R4jbgd{yeziD9p;fLmsY$9e<@~D?jcuY6!#d8om%Jr7b1FsgLM^Ksyu|DB<6bROP`ysl50tr6UXmN;rX%|G1t~Cg^Vn zs#uQfxpHRtOY4fA!48s}8XOpbYJHM72uK67iTLC|aSaam7v(I7w!9)Mcf4f#XsH zIL;pp`&>A$TV4J zT1$hZHj~?9dl=l2UL+2fo|1vPpO~kVVKQ zJ0_OXtYN9BIWcCZL*YPt4}_iYPZZFPUvdh?`=^&#XHNH!iv&M1O!*hJkH$;5r@oL* zO7W3pXa05J0kms?g50EL;P;SAkieMI=*g^!g!JMVtiU_DCdQS5*)Qtk!rX=-4)jg5 z?Xw`J#+unVb>vQJ!;HVgP2}y#Am7TbqJ%%>olp%?nJp6KYLXlibi-E#3gQ;2fzY}5;!ZemSVOsQ}!~!fP zJCYn2p1|--k|)uJuE=`x)&{*aNx!@kse)q=h5km1$w@C|bvN4@VDFUo{xf5tV~!&eOyrG&l5_^u3qZ zI_eA74${TXy}+fEdrA|O6Pdq24+P)onfN_X8UEyZ;&o*w&W`X}U~9@fe@A?+B>MnC zvO3)jvoRjTtf-aohQ+S{m_BQRUrmk6R45G{tE37Ru>-#m+=AbbFq6gMR3x03vcE%J zLAZ_AGuoxdCEKOQMK~Xrz7Q2wfv4o=lZ?KV)3}pNzR!||MuP~ig5`Q?ND>aHJKwWP z1;OS~`#y;7Dz<0=%pSe?u@}P-wpa+ndNp3$3}%mCr0T^tBzlT%GlXgWghB-K_fyZs z7Nc(n6iTmOJjfsCXCQm*k_<`WfIRtEO%Gh?H&HT^_pv`SVJ{Tj-R6!NmS-l`3B<=eb(NE0(Qw^4}DO?2F)AVQxdd>x{7zjvy!fpXHZn!AQ8tsk6qJN_o%7q#oab5w6N5H`!Q}{63tw1IqW?Wi{CAgr3 zH{?Kh$$;ca5)Smk$XT7e3u(R7ULq5@S0@kA$7hYdM6gv%SR$LiS1b>fNB2UDe}j*7<`UN*27w}Zt) z7ir$eSEHcUM;KSwQKf1UuY5eHk887Idj-;DDZy}O2vX7^h(}s(?l4yP1`}n$LQmOH zq$9Gc3K#$vg!j+{C(93?;s?;AfEnJnNCCK?0a98iiHY|r*o|+6-3r@5T*2it$jP4+ zz(Fir&O+g`F%xgfaOaNZgl_IK#o^HT$_Qd=F4TC`te+P}n-U5*dAO`Heqx5%H(X5^ z$IT#vIkH)|($=E=BKkXmCc-QzOv}j33R#Yoc!IU1Pb9fd&1McPgQSck061jWXXv2~ z?nP3cKi#n(2{cm7LO4)6xrIoqEfQr9lk&o+!hM%nW*&dOdnWAoKxiQ@k@;Kmw0G9Z za^G9hUouhGyvl1cRDhViJbRh1wu*s|)c0Bju@@zflKe+9Mh)Lv}a zn2J$|nJ_+zngAv?u=5j zC=5xX`1mG}Hk|k~5w#aTp_hd>QOx@Kk3`m%_osP*HV5aXgaDtQ-p#i_@r&JG zryCa&dF}@jS=^r1$k89c(S&rYxHySCmG7A29B|<6iB5t8X-$$hFWiFnq_NBg%MM59R5EFOtRzA0CJ;IT$Yt zo3=&dh4w1W307lswY&0SdL!PY;fb$=DfNMHGl?h>gRFgOVy7qosxvc&D;i%ryqa^VX8$X0bE=tYR%DvQz6fQ%eb8}mX+#^$w{MtUC`N3}OQ zu~-F|u%YFGrdw?>;@@O*^J1noA)PZ}ELC$$)i(x@hvn0IbW~HPzA2nNwBc>k*FN;d z_fv;z`41p$LV%f$Yj^>oV9riNOz^gai(JI>YdFIWJ;u^&c;b*1@$2`U4nk(JsSh#L zAE1BD9(<&&zNez(?ek0Nk$`=9Pfc2}YwTmkVGK4Sk~8{w>w&b@ zU8eega;O@Ik{=-+2-is?M-V#qxgpoLH@t26N9YTBffmN1sn_; z%{C>z&30|vwXYhhJ?Yd~lXBhtRF%*9{U0uVCA~oGZ&~YlwXbG`W@5t*-8=)!vicsg z)Mfh+WFq@t!6LpMj{SfP!;_jT?wim@IRmqO`rbn9B~TCH_U09NF4gp4Z+ps>QV&mX z++}U)$jy(IV&{H!HWW2o$VYQyEYC`EmLg~)73cQgqrMKAyY*Q zAET?8xXW{e%jQpeN#>O26ITR@NnRqTERr52TtMlcWpv<;jiHL{`un$BnRDshyR(?> z;2^Qxfw#ymMUqM61#|<~xuoEX1rhG{=eK7PI73^XA6ccIz_QWM*vK4v+i#cFG(P_A zkI}dcZ9<){i@JPHVV-1@v;i9ko5J0Ay++;0UihO3Qe;$a&v50oi9pkS0B=5^_;Wv|-1A35g zp{I$pB)|>{C)b4N6JUobSo?g9k#k+TirX}auAkAFzt=v>KKh9DgSN#Fw_%}711aqH z;($JNLeNH6XnaX*WF&(?WeCd|_9_bLxeE7W+MxvWyJw0nJruxinXRb-u# zll;LBlf65zQhnr$=uJ!{%1j)1gpUkx^0of&aciBSZUMC{qKFTQJKhT<)%s+Ava z=ANU#Y)N@#Rz?#;m2!8Q2zQp^Cui~naTR}7PUJsW?H_h`KP~GUxx%*z(AcwtTn_AS z{MD^Q6yE3=P}$F)q3ox^ckUO4aIrpxzg#Nh#?)9zP<=-Wq(Y`|^ib%YU!Xc(ElGL5 z(zt4^yfUPXqJs-5^-Jg0_lxSN8_^J(gw7lBVwBE+{n#bx18mO#wK?V1Hg2Sdk8mvkhdim!W8~6mOe!V zrO?rQU?P^Xv>1H+m0kb73Wk|xMFQ|Kv77Qx_zAX}H`Az)sz45Bg72TwyuV{bl8qpR zw|8BBOtXs^srDgWwTfuv+(|jtphcJ$6y7*>VR!u5Y z5Q$Un52<-Kv8cU1E9zQ55ECS(Cb$^sKgCv^YIiX>j4Jg0R>Z42p+nw_zQ-TQ8q-&i zW7;K=6`>&#)9tVwB+3EzX%*SCVGD{b`9tQ2xu0NgCLuIIpm(jOH#9Iys?(|gXS#n+ z=riXUv5ldGQuSap@JY31FjEM>^2d(%41rJ8+>hd&M2&Ya;H}CCWtc}#H(Pc7?FS)i z2yYopz9Ii`xv^L$GOK#$+DsShm|n2Bu@jbI#CVp?rHaG!AFcA%bCaV-Q zP7Il-@bHuoQ^Udj2xiegXTk3`3bv?ZMIyFK4(A_UqA+vnwgR{Y@KTsIBDePAeN-Y6 zvusL#T=VSojDZFu%EItTJFtd-GTu!s8_1Go+sLjSV-&cg?6jixXyy!Fo?#TUG1Ws~ zy+xf%c8V%hUvK9@7U#C8sRw)q;g?2ci5FFBd@DqvRk@$rs4HR$H$QRnYN~^9f zZ>TT}E}ZA>A4cqR#t4j=!|9dhRkbunUtjLH>R;%Zd9U0OSHhTvy$nWtj1@22YjZ2) z5o`s?o@LM#{B^TMzI&@B0givH810{v2r9DL?>J|+Zey2fX*yguSJHlo_6`oiK-Apf?-CdA4w_m|e|B8(F`s=pEhRaeqDNvP(ee6K^56YUJR5no-Kl2_>iW zmm#;?=(`l-nHhu`J&t=a&kka5soHMde@`iRv@V(YhsxeE=CCSxem?CESs@soF%up0 z#pB6cK084(2cNvjaM=kTCSxgNd*%;r1PQswxCWNl$p-ef3<(m$RQ?Z-4hf7CiiHYy zX8-aH?k5M`8y_>&_Pvfn(#!eMgF!jh zEv<;QrC)iH>x;LI{GMZrQntsG z%#+p3cdy1V+v-t?o@k`A&->@*Je~BqLv)7f~o$}>^u>yQZ0w6M?^)gQi z&{6RyfC_8foSDAFCY9}vFV{ArW@8vOwgwoMZ7GLh!O8zl*Q2@=WEH$w|!XiM#jz3nn6J^RcejAfE@0wtF=s7Snk9Q3nx`2 zWrA1$x+AZVIvEQmg;Y9*Z)86ppIzS7ovur2^&-8tf)Pxk!|_RLY?3--3u(ph+lqLs z{)-fyR2ssnzO~^@0OKIRD`q`9ZHjlS=2}Q?pqpt6cY||ylOBX57o><1P){zBCL6}R zfm&R+ZlvXBfbMM86OeDVZMZ|8(q?5-*qfbMUC9^;-#B35TjKw~-;)%*FuCju|XgC@d04G~@QE7Xx*h&^L-)M{Pz;krXK5VeeqoUYhwP2coV)10I#Q&-+k z@P8gOM)}n8J6J?W{whG{t$mMJ(kvbna5vY!#KnxDdZ#roM+f(Og>m=~PVPflrlsx+ zla@s6r5r(V`@;%|71KyeqJ|gXYp>nqk%WMp%#yIFj~45@tstCubab~h_@Fu*K>8YC zR0V$SblElHh25b0u~6SYoDUlX!vhbEm_RG*2QTh*(a9an<~5Oj-|%A)42&q%=JHCL_FJr3fnA@!5doF&oR4T;kkO&S z<5;QA5ImKf?twYKnmlpPlJKGUj);?J4?*~}9Vefu!UoZ&dqM$Wx0)hoHAA8 zmy%^d@MKiI`oBR^ivY*Mkn5#%p}ygx68T~h*?_N_4EoSn#5cP^i!>q5`6zoOVu*}l zp1zY}1tCiaRZBh2og!IiohAcuem(S>o!#~qFw{VtnUAME zvPi}@3hkggNc6WlS`bpK%FNT-%7<2BeH~t|e~IMY9^CluvQAa^vE#Q3EQ@7)z5mrP z?I`8bsQr|uoPS3Wdqu^e5u8yUYBS2Y*(`4s-CK2$l{Yax0@#DpuAeGy(($my z@4{gtBHGw;Q4(|s&$-JF!S29&290_T&+l^}B*$ZKer{3Pi@h3J8+-n> zbcJ_G=3A6)L+`BQIhB3aES=IL)L~F2lQl><_wXqfJleP1v&lckn9@_RGwXs{1!-Pa zZaW9C8TRda@b*y8Z$~wQ@mo2z^Uqp<;Ho^WhhajC!Ce*GJ$awTGvd;0bI9BM zFT*$ZbT8c6_*IOJ#cTrU5mA7|TTSlDtsH7CII8%%FC0c}BCC+kd%#iD^!f+lCUox`MlPz%fDV^n3E67R%y^GO+-{KG*8Mplp?*+C?=JIiAd% zL=C6I$-QzI377vL6_F6! zV+K`5gmeb$%r$>le@OHQ@-evQOw8^jtZXw7(F@ZDBykm&J{cL=KPNbs6EM-Ytd;{=x1+H`9YMqiH#pF4l7-MHrN?Oasly`Q6r@$Jm)|tQ=Vt)w(aLaLovu8ra z{^Vr*jdjg7Shv>h@0By0TJp1W&$Cg_D(d~EQGv$8YJTrt+#9}VQR{PNp^h&-w=eV4 zV+0IOLuCHvHTB_hlUMm5D)SHg=P`9oUV1TagxiA+VC2wS>*-3jI+1xJ*2rR%Z#&Kj zJ>AI^dY`_LwQZp-qRO4P_NAXy=QTQbzmWV9{|Kg2cr4mh?S$a$gf#wQvN5~@d0zu3 zeYCZQu&W>3t6~hEXmp@_3ccAe_1X|qO~J6M-~NhyFlu#}qSjSjVGw{$0Fbyc`Wv;$ z^1J5vFZ=|QEwkZ4eu%wc+}^d56PDyV1P%7~?Sh>nuOZHs@M z{IGR_@g{xwZII0`#fL>dVUy$^DgImc#st4S>cH584PhX|`sM1E>=5^7f<#d%*WG{t zE8KGKh)3e?+aThB9um`&MJ98X^)^+s;h*)ir%jxvEa+tRKfjpA<=<6tPK1Q3aHuow zja3wi+|#)#fl@(YIrHD~FmE*|uhh>P5N}^q88&UKd%?f#daE#{M}gzeL-}3>-T*;7 z_|HE`#f#8hzjgNdql_08`Us8;T|iB9^K&uy{JFQe{)7p+Flm`!+qk1VU$(FpKw1K2 zdtn(t9#t$q9-^2%yCh&ILf4NV@Wd>V^iF(w z35}*iPEG75=*WS5Y(f9XB%KRED|;cU$fXH2_{c4AxpU5qpka<|vvg{$;G}?{D^j^f zdevpI-c|N}T%EsNQ2e>{=P|xdUtaxK-L4YYHQ2@2CTI~3l+$RC584^TACw4d**U+9 zs!@?tyz=LB5F;}_^{Uw3XE*eOvD)9)3ShP+{mr>&Fm?!Z3~=KO2+CeV(G8&x>!#VC zFnft{z|fhxA^)=R;E9g=;T5H|AdINjF1yB`s&ybj{<70{<4%y|c88fIv-n^io=yG9 ztV6^7G1US_>X5C!~K7btGo7#^yKld(o%Aa(RUZM2o^C# zeiaMxTT!di`){|+rsgQe9p~?vBXSL*udoCg-I3H5%gUXC&V#yQSr>T9_wv8IU}duH z$v1x3=!GYJ`<>Yqd6uIy#9C7(6|cSNC%p!^Fq-F6w+U6_>$f@2M$9!?R%k1k{zDxr zHIUi}-(F$ZUOJg<^|GX=`Eq>(twvY~G-}R%oIOTYi$}ir3|?ncb(hpZ@(p zjNcNaP;y&r_=6Btg16l~G*Ib##5XKQ-2Q6C^6lvPpYIY)-dpV;x7o=e=YG9=st1DI zYX-Ew=y#W7C_ha=MHD%v4Njo9s53Qsk2Uztn7=Cy%XA$a1V%2kvnBrFfH@gYhP<$_ z5)$ZqbqDfrE_Nh3<9K58^C?Fwvg333P0(PQ0lL?GPmg~(o=wS_tgkp@Z@gkwY;AdgDkx6eP%G?Y_~7T)f>Evmf%2(KZ#117?{(1efJD>$m931SEngwS9-h@2hnuiL3$xja{L$Fh%Y8K<`Ip4|1ihW4z2IiHJ@)RkL&UmJkIi=m#B;?Q(TGho;!DXP&X~3v7 zv9VYxA`*aKG=XN@>9Bkj9b@?#cfRy~w-67U9o_U}$j>%MRYKQ6j-1BvL?s^M@pvG# zfF`gnZp-7BQ0YieK|F8*82K4k8M#kkt^x`3HM&~sJUOET#qyPWJr)8xbnDi=ius;g@Si{31&CW-*7$MiA@Xzha8k_;|-YY_m9|FlRyI7 zFO##aG2U|C4pTtG!67l?9|P{DLY=zGGYo|O^BCt-OS+{{=`?nK|i;d>iX>t4+(M z{-iX-uFQ+5Sa!93J3bm&XrO5F=>LW{V{3nfozj+_V5|b7$?R9!*ECEcVOJ@vL;5Gi zl~KTB5ftNk;Ll1jbw$%~V^3|#Dbo;5>nJN(w1f6n;!%VrVx{FLF6nPYqwh#6d+rbL zPR`+Lc-4Az^%E>9{8>UnW7)*8!@nL3$`ag!CoW;e`T^R0G>YrUVO=D+#g$J9NvOX^yjatI-DAYCZ+kT8yY(Ssn!)GKwVTDKnStOB#FpEPZkvsRk zxnXJWaOY7nB?RjU8y*+*^oc_DKBmE>dU}7$k+^O-A2n{8Z`p9(Bvu>xqYbX%!7YY< z3Zs|tRL)KaF_RdplFHYq_5qW{o}dW~dXJM^f^hgA$4w(3>yl)+e$s1R{9t`qm^EwK zop<*sqT@z-(*c#rxScv_4gl5T$Cj^U3s&DaoT7a1bk(h$_4&oFQBzOrIEQn!R@sT< zM8}p5B@t#B{Nx;1V-!g3L)$Cek&g$!VOc}|%kR*)uZqdykQv)@RjrD4AakwcV(9vn z5AWjf^o&(1V1y_1_wZu)C@fUavbR(_VZ~!=dzew#+XJw#`mNaw?|c@aG@~!5Q`f=9 z5pTN$d?;GF5Z-Z-MiXO9gdH@5i`9=zt}KoM!2vlGgU2oicYhEvbrk=xL3HYK9I^?U ztolB#6ykp>_<`z-h4qVTx?u5agvM~2V|357UjGB%SU}=GZ?%{j2_%bUqupH9pPUn! zT}wtwA>r*z_AAddl}*jn4%9__k*_7SLP-GvWWN5TwN}ohJ~AOntF#dX(qqaWBGYYcxrIwq^TnHdRCn+3dge2@v{#_qX7fDTf5J zU~lFI#rhZ?Hutuh(0=6h!87I3PBnAg4TTyDbXVIJaURcd{QJFIp^0=$D9&PvNbX_z z=G(X67Lug+@PBj88Cd`#8)W2ZDg&+SG?p`|&#}x|+qeU8Ka#adx3dc>iG3MOqP;zN z(Q0Y0fh`%du2ZFJBh!IKg4&hYfx3Tl0_~d;h#9JqG}uf>U8e|xrmV^Z z)r`~eHQL@S8VNG)PBcVRdP_xPq!=DD3^L8VL}I< zkHzQ=L~|vLPQYttx)xJCX*jm-wKZCuD(D2|pa-qtQrAVAigLUcZ~62lV16^j@od0S zogmy)=dno^J6s{H!wRx88`9$rnhJaOmh(K0-H}yH{M)Pd#veM$=FSR-FOZY1p|n*{vydtfmeO0bZ%}gu)$pg64!fRyIp#+p ziwD~L6vdMMOC>wTB5hta1u1IRHyaZMM+64k+=}TAf>JC!8o~~`A45+0b>RYfT2^-qvg z7HN8Y#bs-@!;@CJznhJgT9r6gQ1Pz!jNXDaOR;7ONFZ|?dvEQuAP&~)q^h1WWYQ68L8}DvUYH;7Dm9%mqOk`ilA2 zCcr2K>d(hwAI`Qr4F-)*Wo^T<25I)mOJyXRmQ$(}Mz)Hap?mF}Umd)>)Avry7ffyE zu%>`yYx4g!1&-L5tIF|et`;aLq+vt$6UtIjhK9-^p*ELgH8gw2zwyBuO3KFlG)l~N z%*H-b?GfVHyl`_~xE7Jg3|ol!kQiEjz_i(;iSwUbki}{r=H`MPUiW2uk<_#Xg7C+q zSU_Sl4I8XFk39Lg0#ZE-L4i5DJf}fs9o8koUD#3TQ&!dkl_F zvw^{J1*Xt|U(j+EfnQcyGpy-OD7-=Z-z|n=pYOiW34|T|ys58#)NwFqGaP9yC<=+7T;Dyq|NE6 zMi-;8xS*{W2zGoxMLj6FwkqX=D}MbbG&GYETdndbTy7KcW2HAWGa%<1Km*_tPQP82 zFalFpqCA9D3w_`P-c3mLJtd~;bJ(6 zsa7}89&aXK!M6V0w=|szrMBPz9{{2IMLNQ1jZ7EBLQL3jp6h{=4K9T$L9D}=d*cS_pj}t3Kx{d$oKfNxHJ+$e$>~-=(cw_TMaG>;M1hs%E(-S!QNZ`XJpoBog6U*84@s*PyANf* zyBzfYoq|yGjIe0}<%~Z6`9VIEl^8j}5?3I=^V_|8Nyql=0&shIP_S>rC`?5$cZq(_ zCHG3A_UBYTl;Kw~>9M^&_t?<>{NE<0nQKg|apa#4Kd1t>ozat+F6Q)XadwZ)9zAu+ zlKr3aeBi{NgioGTihWxapBJU4`Pf?aW5cjndyZun)@{5?L2UO)wFV3#ll4!=_4<$#?dbQFTNVa&jFsj3?a~e6ExNhp za8{ZLC%=^w_!7A%5D41-vs1!h@_nIWaJLvCel(MJJiYBB2vJ(rZKzwRz)3f|&ttt# z19+Hake1HBrnMD2u3E7@Oa~DHRoaE-lsxm|wMOL=-cYyOd0^H(251^rMHuE*MAH-aLYw;J~jIJ^zvWzV@L;O-nfJR97hO5kkX17c&zRL4 zuwsC*&JaOPk9Obws4=8uy9lQ@2_3*hmvux4lHRk0wGeh>xJ7h_>WLvt56SxubYgN4 zvK`&BDKHb^E$X=n`qct z61)=%L#YRgHPSv3ziAKBxw@lpkBcWokk1fOZtVJs%TeFjNd=XWQ$Zll&F?gHn`z@N zzkR1NNs0uidu2ma3S{k_{4X8`cb{VJEdhhQ)+n1Bn}HkMk1UkE`xzEa#}@`$FUNRk z1N?D~w|q4t`NMv-IGH7#5!F!^cL$x))0r$*b>G?}&C9l+ViyAbEk^Xni5UF zYFC$LlXFXQ^;a@oKA)YX)a^McT>yS|?HgIqO>k@qJMBzM`c{++ za5}eoVpVSprT#J*7HrnUp~w)S$Zd6t4rZy@oM#?7T{&BSVe!}JvH#38U6eQH5=&>r z@_~}>gG&ofj63BMUX#4oAGnJ?63(_{%-sbA)!lOM@KJ0YA}{i>e8gYP2w1oNuMYU) z@5}^JQzI>TvHJixPh@(hP_F;(#=wm7|E$eyi~o@u3XTC7iAFnTZVL#>D2cfb;jdJu z^ytLv@P(}CLI2OVnX6y^;xIBXe}Q`KwsX>x<6`1$OX|k6P58=8$r?fS*pZ#gV>kV0F`Nkt;*to9ckEvORqqq#7iQ$#=#SJuH{kOV z2rz35gkWYS*_Wh6;@-yp(V-j|9qP~_o*E8GuRFMe6+9|5UxTm5R|9ch#gB<{ETW-+ zn>{>*dVJ;y8F?u>FH^K;YbcQ;Epxx@$1$t`fW>YlCna2e{lN3(*>u5(F#sn;zdAZF zbnK;{_J;SQ26XFrpNoe>_o>&u_USHHcHUljPPner#{SIaMNjd3k(z4u;j6D=VPDn* z-y3`_nFLVP?t0DViiXGIy!z}@{^=biuf*%1RQ$Eu6MK>QrzjLC<_=Bj*1!WKSDG0I#Aiyk~S z|F8cu+UFT$_oOBmcK81`B!rwIXb2KNyPtn$`$)T?H^l~TB~Fpf+eqKL45ft*djFnZ zyg$yL-U_*JFzfgyBrXT2kZI)cV+)EiJ7T$Ba8_fM>ZQ%NwDMhBuruN%9K z+xmTuXChULWRgoZTWqgD^s!>D1#beoQT_2Z(Qj;#B4ja}oe`HxI~1EWw1grHl{kg# zx*x{AnAp1C$4#%VkXib@Uc$1|lz68zqt4qIZ`|$mOyP-Lzp26{!I_VG7!~NPiAge1 zM-Pp&afNV#8Sr^+=K<_wSz&-3J#BijM3c`=d)l%!UxJ#hz%F7Q1_??l+AbI*_huM- zWBj{e5MTiKIN#ITN>-k3YIIfq7hXz|y)C?s)^cZIMnHuIuWTL#1_9QtV}0*7i}tD@ z^H-ZsCPpVD0bd1eZI^XSW6dNyE3wa_eq;aJjcc;aQnL0tU{;7rbNx;05PJ0hSC)}b zAmyw0HFo#Vvh<2qZW>9?<-qw!_$MynA0^dvJ_WA{gg=qiz@K`!5DhI|?%DBnsdTB| zjz%q4$aJ3%2j0(cW*$ilYx0|pZ8GH?qzTl&I?B*cOlkoufTkXQ%qf`!3*HI^sRkR0 zHl<;{9&?EJ;O?TFP6VU*g$WLHn7&#b$O1Ku*d;xl9XWd z3YJZk!)hOnSMs_x6+a&wwMFok)ORe>SY8=z;ou|mCWjcDMTD*8yR+NPBAa%1L2dAua7{tz$t5iqd#x*C>%&$zZDuxMA|~S5PjBTI z2)%U8m_iI$S{#No+BT*x6%gyoCX2|vd2@?|Zw)oUX!xKa8Qc|H-OsTK+S}~XQHGqY z1P^CGt7t6vhHNa=$(zQ60%#mVQVu;I zhnS{~Ic05vu_y*fxb_D6Wuu=+1*i}QeemS8tJ|8Wex=gpuc}3_pe+Zy&_Ttx0Ao^t z0o2eYC(VJ6AiYj0smIGa0weZVDuWa5+{n#5L~*0VsuhtQ%JIk)u@e8k%YZ2J2mO>@ z(pu$vGEZBjd>?Nly~oTp3t!O^blS}dgPwZg>+Th80NuISAp!_A^l8{LGXF}%i8G(& zjecBeMXKG_P5dRm=?(rdt12+C!n0VIZIs2g$&ZKAoUdgg<|3|xqsfh-O!C*Rom8+d z3xB*(0Ai!L8l0>lD*@ z-O(3+JCOEea^_ioSp~U{&$B*yKDmFwR-moAin}8yIp46bK{5{s{%DIMVl3!gn*CZg zSAIn)TL8Mg8=Z{2>@O!!O7=n_Yht9S_%=Ib`QrRVGMvmX^_96ZVsws&iNPzZOxS*u zJQ~>_o&QoafZ=hgRc~pH=cA&r?#61ZXWqN72`c4~vg4vBBL4aSYs|(CwmJ>{$bUU& zpci7s3N+s1SM~$@$0ZL+*CaUqaPxB9OC}-9lV6z?8Df=Qfh_p!hU8=3_NMii5|Q)- zYq-f%Y=IVM|3-eHmrv-tBzVm`8r4lcrq#-4=wzSxGRNXngeuj@3 zF_nS;+6b-cP6&U0Q+@bijs%6gM6Kv$b(zhyMQ)g;3d5zonzUPIOs#h+;~0(BxRnk2 zwhFDsnAM1@d8U+B9qsKJ3$@2=aldDc_{Dcu_sX`wGT>dVN2h=BT5r6!$Vmjy0Y@c> za_quR$!uxCjBfNjU?ejmO&lMhCohY!LD1I`sYVa0uSYX$_x!dM!zMCShCaS8&+Hz- zZSr~7g|Oflen7|MvzJtS{ZaqzUsxMNEh6UxzJVnmB#Yd48^QlVWHwxyprYe)Z_~zr zsYUi#rIEYtVAY?6@V34oCU7bdcFI}H*uW5&zpJ)7c*O<5<6)}Y{CaV#b6hr2kh!Rq z^VcD5Ty`S2tF;&5oB2vy_xvq^ukX#yywdHD_!m#vdPOI{#{|9C96mAaApzC##ONSF zgbedw*MU7(7*IWjuWVv>gvvhqtEyTNC!_wP6xcqlHxEyI#GdrTGYT@}Hy-INf*urI zFG{rUL!#vhyOfdNp-C0O#eY1eU<5!}Mb#d+?kzcjKk8!DURd7v?%5TS|A*KQee{7v zZrTu^A2L(K+KpNxQg^=bok}nMP0@{Rn4Bb-8H71Y&(=3^->pgA6~4!(y3LQS>+VS= zHc^}p*;ZMKCHiZyo z5mG#%2Bk$cCM4Q`VjG0i_nj4E{IdBu&;-j)!Oqw!Y;)=TEYAK21#ES_2HU@N8Le$b z1lpELG+w+U{~t+b6%|+0tYHYQ6Fhi;;O_3hHE8ev!Citg6Wk$qa0u=Wg9mqacefcN z41W0jbK5t2uf2O!S64mnTPg-kqy16se}4AIjAuAbQvPnj5h1s4@eIyCD}SLPKjpWD z&yGA7RrsFEKm1pfWAv^oGR2KQS94#e<>c)pu%2~^t-3h(4bxNP^y=>sg>;!3xR@Wm zH=YGe$(pyzlc@FQZ~xJIYfRF6zT1nB{e<)?`-XW0GJ7KZz7f)WfX=9EzAE%5zs!=E zKVh`c=oLh)8AD_)14FFuHR%Ijt1z3`MkOzgPF)Ou%+82(g!Yif&&yWGISx)A^Q z(B`>|cV|U$G_(JAEDa?n2#_L#Au0w6$hMl?`Cez_cf5R75Pg6B%JLOr_3{+`=}kN! zGngvEV8^vTl={{+an`ApH-4`Mi3x6Auz&rbH%t5}T67;1*TQCOHp}H04LkeW9zLDJ z87Yp+eS1y2@MDCU2)O3mAGEfZeP1JESBo}GT4hgSFg3~Aokmg60hZx3srZr{F+g8Q zK%7$>)OO(CDW%f$idHaUTRkTy>hyU=fPtk%gXRJNNgeBBb~48k)C#tm?Nh(0|N5e32NzLZT1A33G4dz_AoJwVNM>=>PwXB8$Iw zwbY9!TuR5gU~@gGbEmj)r{h~oB(pn4nfvulS9SO}Ax6m37}{_d?nwdJ7t(7J8=q&b8Bsq78Lg?Uepu)O#ah*PtUE129F_50$jeNh=S z>Cf*MnAKNdyYExVAD?Mfhr(;1GdcFn{%B91V6CyTlWWuSE7(cJ%Aaeb0U5oic7m`; zjmwU8O$7{uuXGn<$3~_TkB2w?&Mo$7(oa(bt4{u7CBg;o)pr-QT{IT89|{~x!HTIX zaOb#z7<8@3L5!4hV%Oh_=(*>f-liSPYe32T!}lZelSCi_0?{4^0RV~Ov7JkGXn-~Q zO1#{Yq`IogpvcR&BnLuqg?>3Hs~IkcrN95)`4Rp5I z8>xYINL%5DtMS?wb(;Rgugg?d?2F=dVyQ$sNY2a;&7(OnNxK2^4>>PsE$dG={GVUf zu*1n(m5=yn-J|lZ4&3Jvq@o+T<7c#umYzh|GvY6axxAM%`z)dns@AwdUTzb!GUzh6 zU2r$g(nQ?+X$HbMEbrD*qobUHX;QNUxu&8&vyBaY1fcy=jTF+`jbD|)7kf1zflVZy z&I_-u>M;8txgyf!fg)s1K{w!#8~r)wht7j{Tp#eWzZ%_gE)*&!{Xboi9K_uL`Ev79 z1R>r@b3?ARj~tXuAv*)SGv zZYLrx4-bql`I_G+Ceom{i>TentvMgxT#f%^p*h(>Tt|PzMp;fQsUP&~gm75TljO98 zLWk(pzTtMl^Xdx?wN)dC`(dU`UUY*F#!wuph#A4)1CFn~+>ii82pl@)SM*L0Lg`1-3k^9LaY%?=tVQstrQHYfkA#{|!r92^a9EW6(l7uqd2F3S+30NaA zSC!!KCduKaAEGZz3la){@@<1Md?*;vW29ewt<5aC=fbl}k)ANjl+3VC%KwCPZYhw}rnzq?=E?t#DzA+1 z4alq39zn<`?tO3)iONylF|d6rOJ{<~9ljhRzg6)x{DOw=OPP!;Hmpc`|hWHG;WtXd;~ z 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 diff --git a/lbrytv/dist/public/font/v1/700i.woff b/lbrytv/dist/public/font/v1/700i.woff deleted file mode 100644 index 389c7a2bfe4418acc99f55966e803ad54614077d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149184 zcmcG$1z23mwk?bVhXBFd-66QUySoJl1a~LF8@J#R+}%C6y9W2h-GaVm?{n@sd*A!+ zyZ`&Y$G3{^UaVeURjpZbjxpve+!Q4wz`()4z#t@kf+2xk-%VVDe*c$0l49Z#U|`_P zptcSM2Kf%z1-VyJNl_K_9t8|cWCRTC+#nR33|mrFT?7nFd<6`Q5&#CKQdZz;mZYf4 z#0myx{TXy)ZBR3!!>=ecwK28_o$CbyqaOeRbN22`wUx85_AmznONjsj7eNGrfK`G6 zqfq~BX8Z{Zd^s8PJ&w0V%_z3;8FUhKZW8pF{H+mk;QM{Hadrot1NHv{sDD&Ni+HQ- z)^?_#>rQ9Ez>r}<=gMFYCYx-G-R;4^pF#Zt!v{5DcyKVFt+9<6=-fSMB9g$spp`0s z=koS;PR?KuU@>4|5{zJA^)0V7KnC|EieAWw3|(}g&Gw03SFd+%n#-Y7^GN+{!Zynd zHf&|9!S$dw81gn{d0!~9ibBz2{J3%GqSRTnC_>arYGueYEJtW(w9Pn5M=id8FLO*+ zH>kEMW5Jw+(2|igRxb}LP7RZmH%T<#G$M$|b@@0xiPI#6wSlW2FmR2XIUDaT%(TJY z9&C5R;5)6DQxQQIfT0H^=XQ_`ysWAy4L{N2#Xsub{KSa^Y-w&6voz-id6?x<1W4*m>WVntsaL>}T!Za}F%U*GHWM8`; zLG>)%wpY2y;D>Pb+v|S3v&ZfQ@8w+ZBKnogY8+nz)0l)VqOS})vEEUui`EFE)c+tc zDkTw6U(VrL&B!$^vGp$P>y?dwZ8bwvkLw2Ga-^3H6Jd?0`)t&f18Mq9!uXp+)({r}Rp`$HA6N@7_tx*9y ziOBeUytXZ}h!a+}Mj{*OKiL7B{N@JhP=s=bcPEa+z2~Qetyv1px&_RcCyW-AglmLr z>1d9=U0Ph0b`|)5O_w;Q`m@dF(mPCBzjA~Wfd=KlmKYaPJZ=I@Z#DMtMp6rrxo= zCPIk9+rkp18%fAfU)%d@H~B!=R?s;g>S#9kEZlcbU}mD>XmIW7VBsWAlGT`h8Ve+Z zb2gQfY=~I-AkFFO9Gf4j8#YT_Q#UwWoy&F>Ha}h_o9yPJS?2-q94BbTQ8`zJxJ@=4 zqJY)8`@qP;*Zzv7pCfJ2Pt?rQcA>3Y;nHmPp=U((w$dft)OpuWiWu33cVqb+bkQdHiAZScd+DpA=P?XSoyti zz;FMYy2sj$09yZKtC8G#pP9)R^4SKb^<9Ar{W*S5gnmfnYeqpJDk}ciZXn0y_%h@7w#F?$&=yC7f|&TBJ=0v5Q%tOzEoC_rJKrl5Svj32Sj-S4)nKM zPmM;8A7;kfCa%vsf2UMgkY)kou!RL{D|XnPvvATQPoFIY_<5g~P)|ATn~{IH{o=XH z(!E^?PCIUJv75NaOb}XVCphrvZ4yqXudD3`cwB)cW=AiI#gjaq>tsz&%u7>IL>Mi> zMyaUWt$T^xVJq~eaVHjK#>^HaGbEzXtc7`(fa|T%Q-B?IHPj3ax@Ob#D3g@qgX?8ggJj zSY`XO<=ZA8@&g{yabG%kW!on9U6@-F(CY3Gu&L;!SN5&WVy3=0Vn$!yL&3urH<6j% zc+jy$UbJVxfDl)J-uSa}0XIQD`;k9<~(A&Vc6w`|UQ2^t_%MsWzgXJ5HJ z#P-Ne+i|qjPXMJ9mE(L&UgjQr@9lMTdspui+6~ic9Lc|taW^mygxB_PGnouT5w8Zg zC7Vie*?bHpKCF%+Y-=2=HkzOLS+*!8Iwc5~|vg5-LsWd*;IzWDld{tv?8am8oN$c6Sy!z$qnnr6`;|%ZT z;)i(8w$o{}YXZ-@4%t`r*Cbzq&L7b;Ot>mpM#&QT&t$pZrlb@(QnC53?IN)vup)(W z3t7en%|@BcaUvr;B;ux4v@DL<2|3?m!$h7+ggF3q8SykD1cK!k6c1H!nWR-y`@s&V zL?gek>NT*g#bxZ$^?&$XqW9@IL3Y>tAZ~ewaPOp$jTA_KRZ?uhN#Ukp-WrZ@u)2uq*)y>Sv z)D6BTMXFP%OLHizt6}_7Q&*k)#HKDf7jsvVT2f$LVO7dg6I4=oIHXbX&5BsJG`J+z zIybeb;L_Kn(u#yg$wpoGm%`Lgh??Y0p0^f%e#@|=I_I3ctD5bctU&QYk-(+poZ?M< z#;njy&2brYv2snRr)J+slA3=iqoFd}9E@XAYB}aGs#UBG`MT=zEXVJTrOMk8mct)B z)Z25Y-{}WRRLy_jTR^9fIOc2rq$gfT-ZXF0`+~_TJLF;xRU5ow%)yK|7+`K%3*h_I zz^XgcV;+G+7Oj*(Ih?!4ccuEfym@Mcv6C}8Wqq)AkLD`jX|B!4AO={5#n32M?Wx_q z19fC}WcE94x0>%V=ceMOqV1ChL*>(Is_|HipB6%S&}Gd{^G$P`NqP1BpxRNDi{8?_ z+dT4coo}_TGIyENJQT)f{W`|tm3gzHFn9+`M)_R_97fTg=7bT&T^Fb(2(>1c*PFnt`;ZVa^z;`Fa$3`D)ynIGQ->Q|dG7s_KsQj`b?a6@(RpB{g62zT}mV zBF^F`jczfKfC}E+LYf_5Bi9d;9MGH$(_o{4 zLRd>mO9KC08A@FlX-*kZK9H*Q_cQ`Rk`|LmeYd5ob&u;N2XwgBNMt6dMqsFM&iAv2 zx{@6A2Og|=1Ah!HfVxz-Ri2GvC$Ubx&5Sl4YX!s3`WLeHcXU-BN@D`&?(ddFD$3;% zFsI6DNpQ1SQh(5-ZW{1~y1K(6Z=>>s4NMY7Z^JnYN%Fz*T%c!4P&rFrIrp)-W3Ha# zx8%ZP4j{Or+Fpw>T}u#Miwm{|zF>b{xPV^kMQIDl#(vLKU_@JB%wujuDeyDo9=7(J zMWD-iv`cTa$D97AhyH*f+SwF7zPYLU8*W;fG$6W@; zJ#Jh>u|wa4cElLpk#PE>`YY`SV_%XIUFL$plj5UN2X=>wp`wekpi9Cfh|wfS;3SB1 zCrCo6iBX7UvzGk8Ey;yG6_%eBv6&UtpB4Q_H}A2aH_Y1nh21d-+k(5?3G6oH5xaD; z!`x-;2xdinJ_>!rH9=n!#$W6E+!k^d`&BHW$6fBHm|XWKcNU^ARhUOrgm_h`X;nD7 zo9Ua2-!c{>`4_`|7Na5W;b9zL4Y!%2HmIXE@$d&4@846|e<(cXcacNpi`HL^eCCQq zXo{ed!l+gW2qc1tf#i-wXh!wtgN57`I`|AfT*r-@Rt=?FjkGLGSQf+;LBkNyzG{%e5}msC7=wq=z)E$%qPp&IV4=TsBm1NwYzdH?Yzn zxp*vPc`VBO0GmC`orQ#5LEd29<{#}{4B&M&(e!^eh{RyGvkLD zyW{0*nIrbNlN<3-eyxApaVy})F`(}@p|7?mu&WPkNGm^idyc;NKQ+1b)5!3AfSklfyldCt9&spU}gr5PO*d78#2zD(Y_o)$;H8_^0S@%4W8l3ho=WdR1F$ zwy#lomu!6^`1RIJ1`Z2xGOI)IT243++eAE341!=PjhPJw@Z8Zv&oP5du!Fa4B7RCm zbn}Mxv|>lzoeT666Po_ZWXOn!maF@zk|Vj3?YtsgZn;ePIgH3SjM*BD=o*Z9U5yI) z6&PzwcTKFjGpIKq`a z(VoAf&O5sicAtxK65!67)l&2%?A(#Y&%)-yYtyx-1s?SvnqWXFo;QW$FhS!mMQAX=YcPdzU0PdihpBZqKATVH zY&~6EFCTceOQ-R3JNx7*XUZyAAou#NmIX$EF{P0Z&)X`0Y|+1bG5BN=+=?d3GD0tc zVbN;fQ``~p99sKih)yZf!{&o2uITu-*oF0M3TMVhXBr)q!DKX^95AU5)3C^TM!3=4Vi>Xfu-dRB+t4)wPnck3`Mrod*a)4ANy8+J#~Bh2FYD z5S*h!8z(+z*IGOk#U3h`iWMx-vf!LrA(1mxGTYc&v1Sc8-Qb2C=xu8m@M@q>KB)j# zFEK5npLY}Q%j&H3-|lC9CU5;K;~>!|YMEf-8!*vnBjK#>5~b%k^7AGp(iCju)I0ep z#Jerwx*kz??C1?;zTjJTe8nG-JX_MeTQq!;3i}a^`(YO6^evm*&XOQ!f^|;1FQ#}c zVs|ZUc-y_Pry4QzPo%^h}e-7%RdIM3s#u=k{Hn= z7Wua_7!+z0EV_uXSPpDh4t7}XJDD7GnOwx-9Q@&22-=(vIZ8O{N^cSC?gyn+Hpk%) z#=}31*+9ha2?6q))u4;G4IbH`$EYoe^PDnxg8@;Tugx`q1IjBDCe`U~qt-zrSfkWgk!3z#qNt*8qjXx2Vzo*7xH9 zaPOc1E|4F@mb6D7I7f=w*7XiS;{vGOXQqbJY3IW90ILyNtBGiO$FC5XHdrf&)tmC6 z;RN3i!+^%?NcPSHCAfQoR{KCKt6;;MMbh*iD|Rrt9wo%#on&l;Dc3huu7L3F6RRLX zh2JksEmW@){J;H9haTru+|FOxfE6u*uY*XZQ>r~Hb9V=_T4Oa#+cJ2|b<`w#SF@?Kp4WIF7MURrWvc1FE&S#fzs^iuUct<9+q zF`*9F(QwJ3(#eRR@LF>IX_P;GWt}*TySbAwwJ-K@F`{|k16OlMyjR(uU+3EW$?*ML z%I_U1gg5C`@*Zdz} z2do>yx223zs{C?>1gCa7=~Kn5RI3J}9$zU_KM_iAogPZ%u;SC)770fMO%JGyu(wRsL!X`#=IQsBY<~u44!a`rrPH^iax6+AaR7vaTEHr^uv5_o18C z)jfc`Ih=V3g0`UR!LZ_F0P;Di`KD=}pFpq^3-UP7v=FM#DOxeNW8!f>K7vz{P7EuNEAI0f>!d9Fm6>J&}Jmh-{r^S%J@bT#cn0Q+;uKXj3;uH zq}YwQb;g*N9z1saqQ$(g`zA2acCvltL+_T@+=8|{?ldr>4?t{Im|(FzONpya=jN85 z*uB{;vYy}Ff1lvJ{voRxzhx$xi@WW#NV8oBb2Fh2ZxP*!D07aZ^6bh?zE19QgdxG3!k-?TE8{Y(iSFu6SGdtiR<+DuW6DL9LtjVj5gmN zLZNlhg%8#VbtV>}fu~$w#_ny**6q-60xBCK=`&@t_&uTpy7wc^L3hcf--mL4$yav}9Qm#8VzIs@eFTL)};91?b-oQnjDPMTRp*(f&5n&ua|c}2gJaZ|fb zU!ia7yz2OP_IQzw>$lxus1v!@!RB}J?OEXNm2&OH>+4dFNa1@n;%uXCe+1uiNiauZ z6cGLr9*i^!Bt{3V_qM^1C+e^Mu#)fKvzbYi--#;vH;uk3UikVYngt=c=D4Zl9-Y z2LV(9-YPV&Dy+wI0tH7+P8f(-v}TmR6<7&akysex!Eo=vXb9?1d$AuV@MIsvmC*Z? z@F|o&tPM%@O1HfGd#W*h@9O&cvyPlkEpf1;s3VT1|itr63$vEcg+ zI{aP|@5ml5|6HzMJA3@~E#CB>(&^oIIoERyq&>h`@|;M0L^o5x@ofmkZFm)N%VObf zWbnan>4QNlu)>6a-&nJqKlaU~*8dx#_We7e&ety&$`sE`^Z78k=Jq-_W0XyEN!zW} zs4FW(+HcH9X+%nC%-WXhU%Y6_yPje4Y$9uePYli2;v#LqAIlivgK~^8< zo<6Vn@C;tqCqXC6e(`LB?_9T9f(9K|K#_F8>1h9Kx8pu1mR{pkdUgTn+iRKLrFf5H zae?65$DOyq$GE|%*GusfC1{VM83Vt3Y6Jgy(pX5OD-a6nX(JkJM~L_hwET@AetKOv zw!Kdi>ONbtTX^=UJX-eY$cQEDSqVfudAR2A_H50-Ro1#h@G4pf^tm4=w36@p=v72F zN=S=1kI~a&qDG^$(HzQRokf!#y|7pH{o0PUz~{B^27F0w;u&#rOz_g zb6S6P-S&3fJ8~2Jep3ialMj?V;WWuIkNRD2)42V)b3mIAALhi%xSFGq6cy$AUE6`BB= z99>S!z6<#UR_OgZQrKqHh`&CZZt~Xlf0FBE-cA=2N84Vdu&qxP?u)9s#a+K3Nz)y1 zExh|?dD3ZKYuZO6$5CEkOi&(&A$=D%E4Kx;u8_8k$}Vt$2ZWb1S>;GSkz@no<2gVB zB54=P%T(u|Lhu<>2GI$jM4V4|g<{r9Z^Od3Mqp3)>$qm23bk(k&!cJxqWK{l0uBd- zhWQ7pih=wFD`NXD_pjlGdC1oEpCSWCLNIo=w3USNtVgh!{jB`*QSUYdBBz6%>tb~s z1>YqnFuAvQuNbI?P}d`*ghq=DZA!h}!<_!%l|vM$iH6fp2EOfZ<0e9#T?`xrIWLe` zls@Ek?WX`*qDrQhyBHr-{D2~H-p;ww5Az_kXz&G6)~+{HPoI%J@a3vdp1~J9;VF1= zKCk6FeDyj1U@D+Gc$2h|AR665}h=jCwg{GfO-lT;mXI-Rk? z>CxDhju!t5yFr)h`zSYnINA$yk3wXODFBiXVPX4f7N_!xfNq&NjY<^%UkL)#ai0)2=C0_MX7+jpkr9d^Y`` zxXLMsx*x9O5~`2v7rz7bLv8do3%u{dnB?qD7DaCOeSb!CMY7$)32xK-c2#nPpr;Q& zJq3q11+HJfyaiBd7*p=f|3=l&F zhFO#?W>fq-W{~Srt0vpVKozYB&HKRn7Gz0WxiqCZ2D*VVLwuC3S|G<4wz%ny_EWUI zHQM_(PW(xB3BuVvd}D^}jTn<2|MKb~n-%cM?V%EDFjg1)U?RDxlh|?na1{r*0OfDD zz?2KW+Y8AF6jr>3@RI!8Ho=gW8FRt(5Y!cipsskGQ^Aa*TjH66Rq)GVPA<(*9Rnj} zCP*ibZspb)BwYNwFb**p(@7yG1+;n^THqzv; zHaR}`pJw|%kS%g|4A$=$A}A%4O|gsrBWuT)QzBruN4Cnrw95UfgBAHw*X7eh#NrNS zb3wecNx~N)c}`6z>ctmDH3?2|L2mLtl88ats}Zq5KOJ`9KbU_XGvdH9_P5yN0yrNY z^9_(r0pVQ%CwkQ!m8isQ+yy0gPX@+~5()x##5)qqA}C>eu%ZS#qQ2-t!hvKEK}y)M z)c!ft!CTbd;;4hBsRL@LLoSQHh7|=;t4Uy}iL*Ozq!yE9iqU6w&+G?|@B9D9@+Hqd zWxmZjjoDF@`0r$le@)0?4&h-gc+M0`I>=Q)(`hP7Vf7E<(!|4qv#f`}@@? z$cb&JHds!OnRw>D>37gZCZ;eSH{VV22JIByJ>alwXz@BT8ExZx1=QfPN_qH<1BY>E`PdKbFa7Pk*fvP>CIokI z3;)y(U6;MtK6q6lKRSRJZW6!W{DR+)iZ9L@wfRnANg4Vs6Y0+k!heWZAO+y68Vuor z2Gf`&(TGN%ht)f3SL++oIfaG^#vsuhpJ|@0q*>e9P#tWrQH^5`C#n+KkH3HT)}8umXdfdU2I^t`gLy@t~&)&_)BeWZDkwf zS@j!z069!vosZ}|nn!;P`&5o3Z;>A*ko4acZm7^-pF;M>;UDzF*?hD={*oa2H@Qs! zcacTnLsP&2_ft9SZWH;JzvL~BKixJO`B9D7&pHf$itvmxrV6%vRqi$suvv6&*_;*l~Uw+1i8~bBjmIle{2GnbX+$?^LTnrpr zB-Ic-evK zTHlLCz7m|gJMEqY{!a6dI4TvlfExuh3tJWY9es8TR#O1s#TdS7$n9xDAzlsRv9OL~KN=Lu( zKhrMcK;<|zn`N#}^#1y)ixB>}!OijW$XR<}u`9WxuXeCqfiLh$T#7ul$3`FQtg*@0 z)uEjJy3Q#GGx{na7?vEJCe~GxFSWjzMp9v=PBYAnh5;t<|Ir|CzjZ3J=KNtjTG2?0 zq4FT9Zc#?p;g5`i36|@!$Z|mYV#qVs*GhYokaPC;+ptljI0N<&R2PseK*{ueoTtDn z2h7e5&2-T)G>zCr2$Q@cflWwHB&Dr%hGI{V-RR;y#`?`QO*sru9^vXQV~`&q9YxTBn$qY(C!xuZvC^AirB?SGAO|4{7?ub7MWzl&6+#I_BAa@+j>pOvQiZrrkZ zvKyt%q1%i@L_eZzr~}!U7tOOgO%sf`DqNV97s#VmRKZP)^ggD03}B4^RnyPQPL{TR zL!;-|5PwY+yhYfzWXK;N`F}q!m=n7Iodu9S@!zUpT2H7*Ur^x`93(Re(>BImQpU#E zQH?ARWGwJ!#P82cKJJ}!@2Rwok?|8DoYN$3vC;PcwW2UUS@^Opow6R!x70Q$Ndd}G zKq+eMkOYS~pbv3vilH^O^>#cF_)T_e)aCtJ7>*`+)P-V3{4?d9Le$NSc)W0J@m;UJ zlqOlhlcNV}g#XM&|ED7YkXY&*a_-i=xe2^>MJR!la&bzrOH9~!lIwcfL6 z`$}zvS*Mt?c{?G(hOj7^-dZb?dMg+8A`<24mA#lFd71QXn#^R#g5K@byyoM=JCQ;n zGYPiLAr%qWd77L+nbrX`pBqBt9^3RJ4GkN`?D$J5E68Wm@pbm@uYvw>pxN#s0%?!` zw?zuHCD}Yy8-%lB46_mhv*P@-l91=&^f~{k$oSa!7>4;7pz%49qY3$r3>x_d10lL_ z4#Ann-|IB~VW=5XQ2G~$nc|#$A*cJ_fEN%3fp{Qt-#!K7Glk5QEeO5g@{eS15jA5l z8@}+Gus~m&J8H;n^8a6H&-+1r(7|}saLd(@ywxxuc(=ZpH&}=Y{P?FVw^3n9 zeD&`c#R#)2*3rM{?&L1n8VSb#D(Ucw(MUA@Z>l}9A@5xHTHKy z4)`1ra?VWHmFtdpa>11;1moNrAKIttj+-%wqd$o;v7znUK3v%0lBM zSd{;%$9FP=L8iR2_GmK0R(1z0Fk@G4BeelY+z~`s5PL2-B#g)*W9+dd-LAm5r0-EM<*bPMBmFZ`=kq!&3S^!Be{~X!ydpNnG>@EltHpmq=y<#Uo_7(f7lEsx} zCGuISniCs{WAKyWvBn`~6C*FoTP48OPq?+9G9m9f>~~+pXB=qe(QiW2+&Ft6AXIA& z+w;ce`g=~0Sp9e5*#xkt8~_I(QLMFcT3jICC~Ri+E4!&G<_xi7-a0jiy2Wk3iGPLX8U0@(+(xd{uMvY8!vN zc>Lm~oz)pK^wc@p(RH7O?cc}@L3Z&cst}8SyxX6Cfi7r&AQasAD`eZDgcbnf6kd6c(2 zcqF>e>OaB{TC{#HFMSO5J1Sv)ERB`(<9%*1)WP!Aen$GT#3s-B34iW$^3(6w%+CJ7TlJ19NzVSk)^nUWoZ|N~--AOVO~_i^CZ#9o%>rKKLZ$`P z)Vif&&YAp#<$@rCOD|Q1^}tFs|Hv;l1Un|5)rT!x)3tsx?C?g5Rr{eaoPLE*w=Z>; znRO%+H@1=nC#vTK(c_>k#14bW(PgaheJc9=d zauiuRx4Q0j%N+y<*W!l&dMvz@4)3`-;Z=b>!}t1mcy-(6-kfs|Qgs z>|*(K$g=QP?J<6_cUm$drH`kV*zfts14~Ym<29ZBn<`|xHbqsSzK?}f!=ZY)A!e+= zIHBdMj6d(7rLvW|xmRp?En>{A6*7?EKs9H&p!d_=zEj1@JqALSl$~V!jQ+t)QFbjV zOl8Jhz-vO~B3_c}yxX#2%Bd>y%cYACPJ6zF*aNUuKFXVqBB3F3g6ekBCK)TkbG{>a ztbPi&Q+S2SppeIfHeYvTwQ_m+u-0pRS5okb+vfO|GksyrU`QzMM)F16%YQL=P2q6E z<;r~h@+IHAedr66VxlIM?Xpkdu(}3!{RH>(w!&+xb=k?W%~;xUBS-)rvyxu+dTut6 zwD75S!gKOuWH5f&jid6ONN;_;$r>zfrwV7=J#}C8EWUdp0$#{b&S0)vE1Z)rjezYEw8zG>43TR z=kEEdYQ{hEo|6{7Hde0Pue0K1E} znxtPu>qWl#LERrGC(d7ZUuu#Jc$f0LE7WT`ZM@D67Z!@IY$pWr-#N>7&a}q)HqIiX z)N`qtzI+_Nqn}yRB=gZ1XqI+Sacv?HTX!m5@O4%3q-7WN^4QJztXkcnYn{DF(LDS( z=k_2!|8%@wRza<5H;~dib0BHKl(@KNt@rIZMkQl44IV_Why=f5=Z zA2qaA3l2C08P1(1UeL%s=(Fhf{A!Wh=(ylcY}s}-R9q(FIodtY#GH^{;Ca@1IADks zWSDqDG-bDwU28E(ClKeq8FhJ_H68fW7$kxoI%JYnA-7)WwmG73DcyQ@S$ah;)6~AM z(D8CG@5fvia(c~Hxm=T|IHQ`WYXe*xx3Di(UMOeV57xbU%2-iGt}x~$RH+t=p;i_s ze}6KTPCc%kI5@8Vq{ehM5feZ+BydnmpA|7d30bVup&b_x zHMH;bbITNd9dlWp(l(GBYn2_oS!i@|DOck6S@p{++}kYEkN2%PYixICp*Zs5^eaTN zx@*oqdsP~?t&b?|H)tGR_nBTB9q-f~$~bY|J2oeCEq}shdZKtx19@J8N zR&39y)t)ItKEbOuNLDQ0yU`Z7t(3_;5k}c!{gujFivR4w)2^R*vLMLR`rB_SrR@1c zzfF?Qk8S)_GAm-)!EI=b_r*~4@@~D$rEu+m=XCAt;6=5-_Sx!s+)orJSaoxCFvREQ zMIg8iHNbpy`y@zlaSOb8Y^9`vIV*W~+>ffiE?vety*-n*SWRq^wMwqJ@ATS5t628q z_bk-eDK0$iPBlM6vY`3oz8dK_W-R$z??_@z#UQ6|^*8G)9qD|^YtH_|)v7On8PVXS zb^Ddqel-0{|Mu|flOcgw+4q%&Lih6P@{s*jJ0(f+u<7o;Nd%Idbj!@wC5~%5w{4%| zR^LjG(;fb*vIQ%P?Pa}U3)P92-;YSegcjxY4?oAmmGrO0+Ei~B04yc}Tr`Pa5`DAo zb)vKBDjM_YvKwczCS?y54}sS*4<66{9TJ_N<)#;K3`|om+E{v|SUqu%A~O1U`)y4t zS=R2uY~x~0p3LPq7^mdf81Wid^be<*1riEAMruzhLSqw+2;o?b#(J0;m{!wMAK}V= zg8cRKUdA={IU>OEt9Kt4gJHZ=M6F|{9yP*{xML?hE%Go~O|e|!`f%c9ARon9Qqm4l zP5Jb9Mj{m%?Mvg`!lzwR+CupF=u+B})Z;R%BHT+H(6)iNi4vZYC~t*1)tgUlb3*Jf z{A#LmY66w1rI?pca~k#EZRZr~i00&7;vo}sZ{i@;iRL8Vt30a- z{w~2SGDsw3mujbkDdn7H<`!!&ml#4l)W=}jR`bVY+MXk47mre%nRVut9#bQds(jl# zP;3?SpyHdSQG9cWRB7+rjSBGs7 zF;OtpW0dcbimft5^TisI8DX&2JWyNa#YBVo%ixGPS}lNeOv9YcECsM9w#y1k$tn?Y z%5Bz%N*frpQ}ew_@Q}f%TS?Rn()B6tpzXfYB2*vrT=3MyXlP5+6xU%Z!zl@^pVTP| z)A>@yUXtvx$WsxfyRI!*0KpDL^Bq8~h>bfY)C zTX@(Cp$A@4{kCl&wdu0yvedl7zXEn{7~_Dp;MD26{dZ*>eRh5JIkF0k3XMZ$O=L~v zo8-4016EAVCzdi+1leNxQ$kv#4~J)fum;jfcO^c?Ja-Xil;7f#Q(4WBy}H*SVVm^) z{*L;3y)zi-wY>w~irykgqN4?Dy*k4_sMXrmxt+4d1%6*ELb)hAvi!&Gr1~;T%!`omSkTU?Tt!&DR^2%o#LgAM*Y?7!8PUbtX zgqM(Y!l+9!7DNLJLJqUL^MO-WapQ$p3UR6)8XSmp`tKS%F>{3L%td)lW;@rRc3K2ZW$*APD72SE=e)3VnS zTIMMo5!b*6pqybvB}u!+Iz9Z6?lnW1M`1^N`SG+{^^UC%=fNlblxyUN=u!UiEJ{I( zYqlLA)w5zq-XxM4^+l*LuDX;adkK7!@>mh& zFwR_Li(IkAELN-pWNtR>M_impcRSNu7S&X2c_~izOe0U2+*Vk2Pp(dmd;g1^b2iY< zF*8qGe(5__&+75D{*gRG7E1VlCA+vm>1VE>7d6vVYEcI6@RxypeC6TfFQdEdR}sHQ z^^NF>sSqO7^Wr1Or;j3#NIR>i7JFIKA~W*b@LI*+n?_elI%oT?(w(vw86Om4)8xcC zyd2sQ;C5Cc)|XRD*m#Mfv#MmQ^Umfo`sa}#krX>U2T5e$Q9Gx|?iCQx2c!^^ii%lC zGtl!WBVeH`v+4zh%dm=Inx{x<%kIS0o7v23NY104nCWY4_R3gUZN|;cl4_}_*6w_9 ztYhBsy7ZYg-NC+yiAbsyx8;@`N98W=0s@q{4H?lXiUzR4RU83&q^TqMjx@~=aw;4< ztj%)hiCH5P+C7fHp$?dKlScJvG+8*MDPs*7G~*4(7GezO7UB%37OKZ@9Qjo_29e}` zQFF$vk#n;6)UJ#!H4K(pJEX1jubeo-IJpgjW?^VG?{1Jk?{3&9hZNPk6PCCipY*w& zkKQ?F3^h?YaY&AvG8({liT4{R>$!=K@hMbfJx+i`@f=5SI6emq^#FZDFD^;U;dkqk z=#IJ=C2EN~pk!FB;B!$~X(xQ~lUTx~=1UGvHEp50(ymH#@`pUf+D}#R=0hkL-3dw< z!>k@^gs8dQYRT>iMH=F>YU=9h%Az2jD}}ZxwV=i>y`WMrg$C^9595-|0v)haBIu|J zpTl4!TXGMnaf_(t;&XT$PA!$?T~soXr?p+oWw7Sd#ppD`>#}^0j19tQ=0hM69o7yP{`A z7*)oP5BpRl4stk^{qdQ3l;M}dr3Ilpz2lZS9jO%s2-5E|q#qz}z@02ge~o73?!_Av zVTMij&SK<*J&5>_(3UdIC2d)59noIo$*4%@A_>Qv5$4}^B4 zCD&-%?COKIh)pS=0{WiCw)Ar{m&#qkHLRkS$aG5Dt(a7Ai+ysSP#@@~bO_X7#G82X z-UFyY=Oud~4~uw)(M=lMwNPt=EI-s9pw)`w#V0fHB==fRB_Q&=+Ke+8ImVD=QE3m=mDom)n)ui5VO0CLJ=~MPtciWlR^cr-aW>4P zSBDLMSz)jF?g-$FL83pa9^nk92{%olPodqBP>OyqT``@LP#RH+c$BT)h5K2(iu?pl zIqmixyC4JHZXNl@LJAT~>1!(fuL@|D;n~+AQ$gXI&bSN!_rweM+aEKwgR)*8XqGz2 zd5z&2d6uFvYh<^v1r)-miSM4z_CE@H`Cm)(j9IED!n)bS z2lg3?iX%VX$JS)7#rWpdVg5YIDN;D5;twmTM7_XCERy7|3SivNO(W#>k_W{NO{9eVZ=8U1} z7a=DdNT{1~9B|pF2z(#urK#xD7{9J*p+D8 zN3oPGGgOJ7Bb=Bj@k{SzQcx#at-iwOt&>SZ7FsP?dNRRg@3DWcHE9f5HU_F^;h^a; zYbd^gnk`Ul*R$W(R8Tc^EDtc2^R7At6M*&|0p+`@^l~u6p^Uthh?9v^RNdleIE@S~ zs#N+d*$LCLG|V8rrYXlkIxE%zF-|Y8n4|3kBE^r4-EAUlp_HKWsBGh!)a+3vL-1N^edNY)QdZkIuK%ejFJ`z)XO zdF;C0s{C{AJZh~jYAq+TS?$v3%86C$=RL8beucV&`V|Lyd3wB_bBCnnYyCT zncf?_SZ{aHRvZse00mbzE zsJ0FjdKq@a^aQi0zvPMkiWAf50hB>y43_Z5&P@QyQcELCkyM+ksN@qU9(+%A7`s9B zohrD&p#Nnt<_(@Mzfgat1hK5t;L&I@e%3WgF8&hx&c%}yNS)9jidCuWTi)RnC8`ci2LSk2?QvNBiz z%-U4vSMK|3)z461u<#$Ix>iHbB8*SL$tedrNm z^0cw63 z&(-?qh@w7Kl`I@yhf#OF*TMT((~B)G-`uu~6~jKtDhgVs?!Y(&+O(tblCMXMC98pe z9;%`WG|H&7A1w>NUihg5nO{)nu)xs2_D%+T$%d^6xV?PAjiok6B35I|?|MdK>`T{- z#_PqO+defPpWTLL11@Zz8Z)Xy<8|xR5xOxsReP=|?M)v#+_5AXMC0}A1)#u;_T}4- zxj=@B;4UDUEqvT{=LBjs?r<4W_(aT--^^`g$zT(oeNbtPeNafT{1N1TY7*#Qf=zQU zV|WN(Y#0CF+CM%@T_0x1``e{u zw>we$>2SO<_Gu{r`8VWM;oiiA;IERpIY17%^(9}g?ReYe1Sv&yD(DphpT~l*sqaD0Umhn;IxAi)UIyq8=wLLX%2)J% zuMt2i&3^z765XKCK|t8V(Rw%0ZQ}ku@#j?)dIyqUVEj217nEP{%sG}j@>&SnIe2=CukTnxNGpB0|a-6 zVM1_caEAmN+}$pF-L?1m&RO^Txc#HMtIOV1^*&YA^;XqWELh1_QQ2XdRza%G?*%%j zxtQ%dhC(tcJY*MjH`&QZ>yT+4ZBZj^sG==4leJ#fgK4!v3f)^*EaL20f(KHGGJ z12x%aQc|>47)hjkX3RSxBc{MtHozbBGhZHX=b*H}m|ZBpy(nve9RNo}DRy7L(1Ij~ zzO;OpZ(KRS-o;%7E!8fM>u`+O7JUDG$vhCimra?avO8$ocpvRM*R{KM&-&~SNi*9t zdz&|qcv*Wff29aQ{tTeWLgDz(jflMRcOeN05{@^8>t~MDhPk&%21wk~v4R!6oj%~! zxeU6I3}60r(?jk60e(P&<#iCDPX}C+bLe9&^jZ|x%r&0{=an%?Vt9d0&OW7S3B;8m z==|>0R`BW3@06``{E40l5DdVe0M*Vc{H^54+5N*~s5<)BQ8tSw)4nukpJP(kQTI3h zIGQc5@Sfd${NI&8EiuycM}a_0|3TNkt-)!5K@i;TL#(sYFrufh zC0wKdf8nq0YUJQq6-mhelbVXg%p6NvO@l8b!MP}-)=q_{PGuo=E!wunoMp3OwGQcA zr9;kg`3=m|OPpMnVNL*J8RmJWO;KI40Hgi9EE)9g!Ar3JTK9o_L9ArP*cAkEdqx5e zUV8&6d8$GAP-69_P|?kYJx{_WL1m%++JcY=BF}_Juw*Ap%EheoZIIB|x$kNWk)ixP z4-de4Cf8PfO<{8bXNc}T=y@g|23(;mxX#c`brIdp{3?JgAhn5_V^hyYWkX%#{(-Yx z1v9y9-_}85l8pN`r!n&JhpLV5w+?LO8kq}bQ>=nGcc!VNx>9So=ynNhv(?dngCEzI z!b?;4hpjGPb?3hMX3l~+rmG;v=3*a}u-gE~nf|L?ihIvKX#unvPLuKKr*4Ah$mp-C zO`Hok?i9%?h@P{>UlWWS6;&vwJezX~gsD45mdA$F3!Bqyx|@@;$_@!Y^YirSB?d;B z_Tmfrq?yBY9v&-G6T>OW4pw_`bU>Yg#(IEek<73>9XQIRXd}zhBX@tIEiNJJ%`(*< zEw`!+;U`|bDcCBd`n-bnBP|p+8rM{dAeSRv94h^QiY=lN#A8sJ+n#*h3d5qG!OtT7 z$le52Hk!fsar}N{M0{93?B%YoL*aV&8JPc2k=@hj*$z~BRtEPAUH*6w2X&in6uUy< zufV{n7k;pI?G*dI7w`iP@de`ug`!oybsZ6xFQxT4Fvsm@gRk7S+n9$ysV`Zxe}eLR zzpf;am28p42th5P1I3b~a4yrYSTUEt0|5Pa5d+NLv`12aZib3du@Kk6oQWl@xeh+z zx9`|*J_%jB_m=Nl-(@>$k4pK|_Cb&mBDtwv`muvJ`XFTgS|jdM{>$|WjLIka*BX8& zC-t<8EymIZ!TGmE6{r)%j&e>a>5us(Z~l9T(`C{ZG6jgK<=jan>by`1z0Xr=4xUIU~DWu3_891xvU>8NkN1mHcTA05aB6-m5%D?$jsupenI(vs2eZYiXdY2k00S z0NN^Iwv@8ut+%O{s`s#;vjO|5fCr-?U?1^Wg+h>8x2!`5yFDmchvey$Q6GP6%lFyMpI<* z70KAObz9D%MiTDY+_X;;%ms-q!xxO?U?Kb%z%&-T#DPWl2Uou*tBsKFx9uV-9$fxB zqG;~NJ5SBc8AF%Bx+ja32LH^($D}*Y;=3z}dWWXPK**w~EDIT39ywbcIfJ+8C+~HJ zyyui}-eKP=WQB!HpT49Y27N%lvQ=`;r}=^5tBx$Aj&5S{eN0TvHqg*EP;vJs`^#Nv z+4axJR2#D9FLEWQNM^geSswdX^^NfazwT6pa>?$&vBDyA}y24y6 z?jy3r-!=H$)uv9goDipyMdgQQ&PGdobp+E@;1yA#; z%XRZgqK}nhj^<<+bP^7K<3WcBx0Lv;wFzs>Jn1>=R^BKw?UO))PssKcdWjnb-KF$L ztnHSBjSaeE{Vu6xPJK4VC=U^m$CWkKP#^e^q)jMpE+{lcUm7 zn}r!Ezw%<6g_^;y_(iuRtiMrf%$IBIh7luokJe8dZhB}xKL^l9Z_u2?U>}J;@h87@ zEwXqS^g_$qP#Vf2@ z?Ce2QpdhySW87G8r49amAED}Q@j-T(jy;dd^M#`QV8BECRe&7Nvn~%g?kHxg%?BIj zQ`4SovDgGi)ZjXv%4uxEOwm@HbOYj$e^T&!bquMOX#Ek!ggu#CxhgAm(@h{{;MjF1 zlZoXufApM;E#@Wz*Xysi4c(z@my)&@Ueg9b#__wl3n%n6i!Qljlj<0KC7mBxp(Cv~ z6`3ZDij9uC7)RMU5%IqqtkoRT>_HU`NA}eup|NQr&E6Hee`gG@@z+|T=1s5F9Ou+z zX{+WcYR3@?h?HC(-@;WCFRXb}R!H#aX*a`EV@`euRUhW_nYme3;&8q8&L>t3JZOl} zHqOSd;`Jw{_9dFN1ZvatcgXcc$o1!d`g3~w61V#EKJ@4P{nvx?ucv;sQC8$rAX)F7 z1g~P3fnC6_0SPzN@_oGy%`ySYEtdKdQp>f4{+Okz{V1TMt)Hg9Y0$Q&pKN76*RBEa zW!GZ6^pU@+Y@m>TU^xc0uR)a&op;H?C}FGLoI|}M`0nJjy>Tb%0IZ#dZC(iw2zE8M1r9v%Q(XAHr(Fgh%9oP98D3*S0(y%;d;A8nZxK4$Xd+j@+{*Kt{)UBeTvFC z-77s9%JP~GR|tmOp$wf1y5qQI0;4Jh?X#F)DhKUE#q9ccoU*DZeI&{?M+!Wlv_$5_f{|6wq5GXp<4oaWfRXN|0IP)xj>6 z`4SQvfXv_6rQD6Njwoe8IOt96Bu6>JNm~1-Wf9)b!nLZG@eV;WbfYKj4(a4~>zT7~ zIAz7phoJowi1^t?M+n5zH~Z@PA$^nGWTxrSDC6b#YyG1TQpo%M<^cgAkKa`D18nql!E}{tSO+8SV=eAMF=?Y+DuoD0lH@GG z7b)*T=Rp2uTC$W72P0`$uBT*G{v8^Q<{Pr^VV(kCrjyppvkE zWyH3(71`%FJ1fJdyQl(QFx0hZdVA`g645hvGh|@I79L9rk75B6BYWF;&3M^r;g?vy5Wrfe^@EkTc0;D_4aEE=3>$w9x@UE2wNue!KImKMC*Ngxi+L5V3G zPCFqojfSVYmG*xZqe%jA5GRv@enhJ#tTp;1guWAlr2g64lcVHaSE=arjUK$g<5iN3 z%v97olv%iF(UXVn?MKC_BeP}~sO8X+lQR~-i!_6QO;Wyd5X!t}mGp?@p7E);nU{y> zzBG-ILoZ9xquJiMhSPbhc~@{|y@^|6FA_W=`LOQ&<1$WMIe(YehsI>GQ;9ogq*G3E zU6x&)Ue@eTx%?}k@=~zK!^>|?3Tv~mT6JV$E-4GIb%Qpqk!*Rxb(`Oo;D#RgR{&pY>>HUhI&@cEiZpMv%qUXL1Ipd$A zar~hhO?S+S8^cM@^GyfBh-qxWFYt@_s;S2&n_uqt!kcBd#-nS5-9<-amdo#l$D$#U z8+yj0yzd(W5)Ui=|8-Qmww+jbkR3XiZdvhVe2p15^Z&EUB5HMs53%yV+o-#b5^}=) zXT*1U=A7gBZDb&%o5~bu($y-{)iH45;Q*jfy(0h?acVh zhT}hfLY?h$`%c7SOSRG2TfKCx^@sB<)pg6g(ts_3&C;_}<55D%4eogf-`3||TWa3A z$NcPNm8$_Irc4;aw8mhadt2zxm*c&gG$HZp43q z&^lXkb<&XN=VWr4(jI$%pXJRjLGCI$>eOwc?Q| z7FlW|)?{+(WUv~w(OUr8Wb(H=Q*wYlwGmx1Sc%#%QQA9L`o<;th#YrG19#~Kcj#MOK{$g)Qo5J^*tn zA5PPsQN`NO_&Ngbp1_IqRJU~Q1#@~kXGfOZxZ`+&pVhr?Jg48wzr;3rqSX9DUyEB2 z5W@P$DIC8?P?qUXbfH74Q>CbbHAjS$MHy1$TNQwf9%-0~Fk{Zg5?pddT@|Tk@!=?3 z%8hJ2G*Nw6mHD^#V%n`C*@u7FRXtz75Zi4U8;3EwVYu{FlZAqXw={&K?Zy(}T*uMW zM+(EF6e9m&>L7lWA;2slQ~dJ7^Ye*1$NWG~;SVX4$P~Z?>j-k>!hi5%2r=_&e9K8mJkv!Zn*rq_(Gl+n!>K49W6 zABZ+_{U|c`Xx)w9vckv09_)J);QK6a;_X452GITTmQs@8k@}xPaR*)@eEHnnwz>ay z{g>Br9wwqDv`e2_6Q?P?P*}p&zrSkLl0_`(nN1?g2Oa2<93aSd( zc&*eO_OjSn)Mi;{ZKFB1W;1dPhB*T-4bt3l4=+cPs?PoO4oSU33t&^tjMg=ah#5Py z@=6eF;JV;tf7=g}3u&gI(N+OzWS z`0B~*^M1v=<#Z9)AqfIO<~DXtZxinro*Q5KqoS>4-D#?6`jcIf*OO!9 zy{z@EJ&W16c)6Il#2RQDm>Sp`1R6vd7~DDBLEg$a;TCM7}>Kp6P?3q~8)6>#(bTjAKsyz&E zo7U~4o4(tJ&P4o*S0&Bo6L1DDI|Wj^Xe>`RrP+!g2<-lcl19~*{g09+k&{~2N-;*_ zV$zYv2;s*y>uE=7V$zW*3gY{G{^)r5zo{&9#s7q)wc0r5JaooeAfTg^g{Eh%SM_1H*eGdL9x-awf_K!pqSBr0Hkv8|LXOB z$tyg{Zi5Y0{H(e+J6<~vCn^$ z)x;#>e>W0IaXabHNB>hf|EF00Q$GJyH(r4)|KExHryz({{gbu9EvA^u+Eer)e8f%X z1!*tyjsMx6Yyi0dS`s=M$7!&?@;uiNJ|*8a5RT>E>ax% zd*t;6NxeYGAeddNGgK(b8J_;V!TXs6N1N*I=|&WuT*o(qho7;=i?&;>ZSFCZmpqp0 zjvy&h0a9!oJLc~medfuQ?Pa?~s5nY#&fF$cnJqDAPr}H$`-9;+nOq!YoUZ88_=rJOsLHv#nmMwpiA9bf<>MYpeSD!>}+_^#cp(<|G@ z=c?H1cn)%4dt?zs4|@XVl3w8r;*Cp>=ZU~o%3Zaay+_BV+!u>iCt5gJ`_38k zrPv`(9S(TeVV9#%ofVioty(e>>clC1GF)6qo)`+a)CveGt4YO@-rtCr;4xxKWP;V< zu&>JUt<)UW85&<`0MxR(Ouk3fjcBtR`Q`6Hwi|9cQSz~W%(RiH^ouU@ zq|gW6%`3mbLXyd^$DY2A1!NstoGv}r%OQRReJi*J%}8c8lRJKnVOsN2P*6zrg(DS6 z=8pG{aN>{0UE4{a-zM>M#0zm?!L2W=?|_(Q$AQBBZ1lov9|Dma+lRhap0!UIrA*v+oZZ2`OQXr(!-Z&Hg~X# zGbq6~I8ed7Is|oW^ESN455vZojWd;igQ6+bJzD_zOUO|H83NC*@Mp7CDF4hjf2hy{ z`A))1d;{~ZcO(Kx~W3eBUCTWi@ogp;?f- z6=#2&2)EROO0pSwV2X5GzOYGk-604kG^Y{3{d2YzW>i;uQu1gnwx*`miz;H`+MD%r z3-Tx5?|vP{egKI)<^2y8Nmi^`b0T67{fF@Do_Kx-lD zcKp2u|218{hn~7!H0fKx6;se zS|#C>baq+#MfAnbhnDSAlHrY0rI&8D`_8n?y5AMXjQ>fKLs)~)TesJZyH_Q`YCg@HCIE0YVc~S7t^t?Ml9N&R6 z7EiQ^ByVX5)Fu77y&z$~*0J4<`Nvz_o(`|wX|n+ldmc`ad1>gFDUcNbQHce$L8C`G z^8@k>S<26CuJln*FbC=n88&X5h!NuI!kAI@jGP$I5|KJr)tF^QE(vP;qSLsC{za85ifk&25DzDzXw)Q>MQg##9!Ca1I$&@5NVSTkFEsUnG2v=pvYyd$lFntBKIX` zmYou+Xg_BDq|StFH$@HE384!h>6VgP3T(MtpJme zSBRyle}2EF#(^ie($vL$kkw$?uy+puZ)%`?#+A0u^Q-fP< z^c1V+L%I|qSk?&UwX7&s;(UeV{3{=d`5|pSMN!cDVt;;aIN~>DA+?^^d9Kw({9+_}Ev z`6BOykt%sqR6*vg4>xQ`ubAcY`Qzhr;mnR&&sLAQD;%wa1Zgx}S!o4g(?9H_agMW22%pSgr#m}X@Ji>zCpR-V<|HnqMBJY~J=#tJ$M z+215ed2YMkR6$EO2G$@IyknK;9-O?_kXmGaDEG5E5ER$KBb@+ng*>F7Yn?e}MOCGT~ilNbkA$e)MY8R4sr|ns-IG^nrb4 zh^OC$dez31j?Yc)hyAu{Mrmbfv$}i?ja&3k3wrhjvv&-OP;qtCiWD;vU!GX3+EaeM zA0`gS5&^{4VC)~DA-*2eG;>GzSc{zUmR1T3o)D@@GiG=Ie%tW%i+^Qa2p&CtAgWdO zoo8#!&ylQrh2IIt$bTc*`nF8a&--3d;$86H*Ck(gU9t-T{j))Ce@90mWRD zB17VQ{Rt$kkbEy(B@yoYP*jP_o`q$P>nA+HdeU*~ikwB#xJ4If@)1A&(e>3IeD4(p%CqYjAJ3~@+u=>p z@|TbKlm;_e9^}lIHtst|WZ~GBw*OVR7G0@AF$yCRFRESfUe@?u>0S)aHRth0wa zle4HBr2~nwm>ZO>+lLgBy{I4MFr%Mn+%>jGhMJReXw;;LwH8#?K3{M1(8sH!@~AxUWKE;1atn{2H`!0~srU&W_m&xGRD$N^ zoa2{?o5c>?X3xtyHPmJl1jS5FJg=vD75Qlb-qtEl>#1&VJSSbL%|J#oMN;z_B}#v6 zT-}xW>`oe_Oyr2ZUjAW$;*!${YIzRB+@ZXnLs|Y<7m76opxf0VOaa;m(vx$I@5T$@ ze>lbnpxKJgcinE+c$_;?%MuHCc`}fuwvJ#bzd5jzRrXK)Bb|M!BB3?Q!{MyV&;71d zY-EgYvWqyq)eODW471gYxYg_xvi6ctCuQ-g_assT{SljjU)cVe^tXt!r@#HZqpuk& zwRr0c{_=M*XI_6F|4fFPVZ8D`>4Zu5#Sf7{>5HVKTcbpAdZ`Db$D-Pv%v{Xe9&f~4 z#J*ZHtp*Of?%!0(&Bv2r3(&h;Y{v}ECFi`19-GB>J)5~~{JYtD#%kT*xbAy(f7E#0 zxk>zcb69E;xss35%;aD)TUti0;a7zD+`7{Gx^jHma}0S(TuFQlY6~DI=YGh6X+n2E zjxr0q$E{H(q$0FHPfACrBHIP5~F}Hx(GlJ(G1-+S`(%>y=0 z#s498)fD|%=5E!L-Q5TKHkW=X(P%rc^RfDbzg_Eo;^R+D$nCGq_VydqSfTM+z0S3V zgrM4!W1_oeN}02*8&wMbob#LHl|k2haO#=r*b2L=7^GQtdtNg0tK&trMr+KfVi5Dc zn=m6i7nAO0tY0~3Ydge~e~D4@GQS%9z3mQ7ucO+{%2c!L#)(cN)_z29rxlxOM%ZMyX(vf@J8qnoNFJs z$k)>5?1*OM7(lw1^gJ?9SMTIRIylfw?!>S%iP`Xc%+L1=FwEXxk}{i4#U*JwMDaFr z$W$MrZC2S;5qeMqEGu+q$gcLT40zkgQBAQ->BRY%nrrdvVQx+-SBYrW#*2K-2x|&- zr3}_Nos+wkdQQ~Xl}jDn=5AJIo|#eRZXC00{BzW}?Cm55CwM-EahDqrXTm7@yqYw{!q1Jm;S$panbJkW9LCJGj-D{SJ*$dNB1 z%C`Gr*56-D5@7A_+U&_zz;d#M(Veh70?#?4A2UMQEMPJH@)TGjQ@QA`l>JKytN_`P z=|OG!XW0PIM#b1e?t=tGT}DNofZMG6AAN*_Yqy?=3g_G?z8+Wwg?DULr&mRU_s^^z zjSBpA=YH7>M{bB{X{aFpSSe$hWaxxcNoN~n=nzq1W1G3`x?AC4TP;{ik=1)pFHrQt zCl?wo*ou#0xGyZRVP2`7gxgU!n`9Q^-C=q5%M%0m;n=3^R$exX2q-zFa#I-w%onAo zLPaV&y>^_FCE($M5mafIj7>@e@j{!B1rcVH9eG6-t8B{zN)vqvue9vOn67J=C_T{y zKX`=t&M#&5q?>EF34g)+i7|ort2n&|$5Rgns5Ygw!%59KCnr#@SB6VpYUmPCNnjgh zXfIo#WBbF1<>Esylf7lRCcXC*V`jAvQgumb4IADS zvH=OYw!xKOG-yk~G}m~JUjtXq4_9sQM`=ep&kXDK4^zfp*GxLgeHu2(#&d%|v;$Na zn+M`F9LM!}M|iY@vL_@m%(KSkgOEZ!OU&KsOrEVU<^9R!J=QeSc+a&3@XXTqQM3_L z)lE1Kuk4?vo8}Hf$a_?WS$4dr2x@Gz1$WIkXcy_i=W5K$JfYXx@~#}dDipkZ`05K| z4!Ine_{#IXpz?3|vTZCW7qJAu2PAfhz9NYWNw=`6nG*utgbbdJL?%Z+d z)NyGx+R}Y!eu_A$>HJI4k#myVxp&gWe3IRH(9$-3Qf#!x*MSje0_ooP?fP%wrm|h7 zCZf{`YjNvF*{wg<-ELLDXFk{4XpOIR?byw64G0O}7<1k8IScYge4Y=KgQRWDpKkNt zu5?1y@E|3A2d(EqovkOiey5^siGf&ol`oSK8#3NY9KNcT<_1N>i)oB+K0<0h+a04+GnY z5rH&$_i|6BR)Jq6nU@un?FF{whr30BHf&j=?ha0qKW21k`dk*sNBPDA zE5TQ;E8*!z(?+~{(PS4Ql(%CCJ%)G91ntf8^2dkgBb;;ZX zrmk1{_+@mB0^`sG>{@&WLpx6@H}iZr+fFSJu#Cqx3u6g{-RnaK*;LP3V@ZX-o(ppt zfPbv7ZI;JU3UiBv>4xh@&WFuM%!khlO$HpZg(HO{MMi{0L_~x~M9P-^T$i;2qg6EC z4|iSYBEGgEm{Om1`0iDsy?CMMz`4fW!<==_!OjgsE6hq=0j8Gh%Ss1p=y{#eJ!lzU zzU`+V)EaAg{Si7aI87(|#vrnndm#yo$QbJ+@A4iF;qNiZSoOc)`*7Mt-Y~Vo9t(!= z@yn2u@$I~ZA1=ikZ552(o?*1EJK3l6VGPA$W4VKABIX;nW&G&`HFP4U^~zMt?+VS$ zm*^fFXKywtIeOmu#2vmGqUmm%Nuklth$bmfDfrks^>Jp!=S{j_4`MSazvIWgM9%B16IQ(jRi&ugMnap*8D`AW~~#eA>Qny%Xs-!$)RlX=2`cP*abM6;luQxnCFXc*X*D3(#TB688o?~GihRcEha4`4V8%+MYHzt{y}`P_9?A0I79m&G_109TDCQ{r32hFLtYF% z`AqJ~uwN#m#IPnKcv#~uTbtepjIVG?DQBW@uW-;TbD%G&aQUN+k*YYy^S2^BTD@7N zxWY=avV%Up!fv`^+_quaGEmQGoYEoZUdx$3sGQt3X4$^9Ldh1?;lx+YY}?r3(1Oq# z654aNsm?+D<*4Ll`kOuYGkb2v`sii=YdKwfaoT4EhJCtFe^zGelB$%s2HE)$L4#A? z%WOZ^uJm^AEY0j(<<{Kwf$udKXyUe6asw|a%g!DN6E9Bc6m||Vu^=C)rN%`Z!_XENMvIE?MUDosT3c>?^ zj|F2+HK{cz=T%Ss-t-1KXM3Xo6%TG_XQM$r??xy1l_@^=#$z6#we)6!RgRVQ77wZC z_koCzB4^8-W!si;XZs+J&^N+_mH0Zd6(^TA(w&I59+v{v)5s;t<4L~8aZB!YsCRQU zfVrL1rI_?^pqhnLyh1nzI0dlu>B+RRi(SUX& zDYQ|2ru1O*a}L{^8^$<)hlOoOh#u z)xt{Q3&v|+&_)nU?9AuE?|JRz<+ZMNW9#(d_Bj&og|V|=Z2NUz?Uv|H>)GIi`pqUi z<9IC#9^dAdQSsG+dN<`d6Rpg7H#Q!jc22K1v>wAhPKh=ItuWlgKX1p@J}n0R+>~}> zY$J0ZbHH^Vak$xe-pIHOGFyKQ@O{1g|Lb^uy?ZuO?$PR~IeSHNjFCsUf1Z+WAfB4F zJ_Okh5lYXb_+Z6TLxi&voPa<2=B2oQFDz~p5)V&Eb0?FB1WL7FWM?^jtqjL}wZ;wkR~5Njp_3^dI^JMud+ zqp1hMy1_AvYf#1Fh$2W*cHE1i1D|2mtVq91Qx57-tO}Y_5RrCFdVXK6(DKnR z_DBuj+`v60X#K0mYq&OHp5_|2T1}8>IoMO8iE6(AKr`(%HBjsaQjy0J&q<*O=c5t9 zb5;d1FNa*2Hqq^aV6MfKMb+}Jp)K^FDL(5!>6Mh>@D`d>EN8V+!sYME%uO^|c>o5k znW+hD+d`8e7TL}egYVunjabL3d_v2iPB={rOJo4{2GA7o_N|;<%6QZS^{J>}PFEz1 ztRZ}=eOp9)FPSxFf}s=1L_AQ%lWIu-M%^$v)o=Y+pfsc^k&(jsosC9_)I>Fq+!JxB z1g6+PGo@2U@<`ng@l*jb`)=iiosfDIj)&hQp_Vcd zl^4Rj7(Ufld;!{%-;tV3C66%ur1K7ptXH>Jq^FQ8Q=2RhZptu&8&CgC01TaFzM?Nz zgRxGdOsy2N0wX<*uh{mBVItEq(8n|EPSJ-bPm?Q7;U3c{Q92RQ09jL}E6VBDqEGD7 zaf#iuR#SS`JP+ANZdVw@SOI9K^^YLRp({zT6ob$}YId?`W!sV{+!X8z`9VqEVZAaO zAO?j3`fN%<`~z*tRIn%KZ1N9Tsp43WS@I7Ft0cDX1GJ2>1JowC@hTV0B#~F_0AtkU zqI3BSsjXBVal9m#FnU`1D0=F(k1ER3$SRT@DA_-XIkV$DwRi*+@OTjSZ2^iYP{7Ci z9spAcC*aFI6#!vapC{!?orib$3lGM=1;8-H0D!+QHswi+Hg#1TB*&dZCIO)rAsUx= z#~+slqC8*>bMkQSmjDP;wg9@*qfjSWhACHtNl6H(fcZgWpB08Bi5W->hJRN0O!%Y> z6wA&HNdsUO(k7)|8SrGNYYwSAkY&q#Cf=qCpct2vz~T|x=LWnl)K*Wr;%rJ%r~j<{ zfMF;NBmJ!Sz-p-cnH!(s8IzUq3jPQ6GaM_cHvUKwN})}7jD!G}S>aB2j1(dl=Twa3 zaUpKjDby?s_@~x7rZ6oWC_%v053P^{7m{S*0=x<>)I*g`no6hK%4A9@42=K?vs7A? z)yzD&2g&xq^F$BiBuV>GeE1LWB+2_>e5D0g%VEkNn#!jn0kWn1%f#&cg%OER-h@!0_zpw-b z;&9bZmvFiAKsdqZ5Eqzr$}{X#66G(}^y8G60;Sw*kvV~2c*uL0cHyZ7$^HV&vyhKN zs_fGktrgS&|4PzMs}3obW)^Wb<(@cKP9n&&drDegycDq`DFhQnjaph5JKQ9jfvgf) zg6|}ofifPvBk5s|m?a8RY z%J8Rp!3Y~Tq1E_K60I6_$ZM)SU*B;1M>O=LbQ8ZLqnNNG(G$Z{4DpTdKoZ9->5AeC z8&L$>E9tw5Oe~R@(kGpW5)igU%K*hI)+=BLSNzS$#R;8}9Q}))^%rJPNZ^(*hJ4jE zrPwBJOAFKh5ExT)qk>tQNNSRZ<4x(-(7>{|XkgW4Igo-Sh+jT(Du>p0%BVQCuvI~} z$VVPa@-!t*?lhSqVVx)j152J#oDwxHOwQV}Ffm-QXT#bOr1lvW_I7|M-$UG$>J=rb z;oA^+RysemCZYRNR&Y112wZ?n1Ac%?kN8!*I^j2^2a$&aTFi$$PvI+g1=A~<{cRXS z;lo*$@{cIOl(sV53-Q!Gsd#neGx_Wy-7u$w+1c1}sshHKz9qp?c%s5gC9AZp4~7x}Ep6qb&?{ElvTTSh5)I5eG}7lBo( z^qpb)EN>H8)*QgMFiibDQw&1tl%k~XUn11`LI^6s_Yrl(5h)$i7s*NquOngrMj7M3 z9XZEjJ>+T?Q;DWG;)^n79_#}R4$5k^9{HyCzN1qS_)iIZxY@|@g(z{MrIKg`#E7HN zUHmv%BjnuRbje?v{DrAgF(GpRM*w_cVf7RZfZ+;t8BHV-6F*KyC}lXpyU3huIV)|?2N348%QX^L7R3@bj1G8U{a-HSrsk z|AKg{B!6nGY->_=tP7nF`I_v>`;OezfH#Qub%&pXh%8o4fwy&w9*1hfPZ%Inz~EJr zt55BuFe-N}Xz#X5k=&4oWMWEZBn6Gn2NBg1RA9&|?-gx(C5+MCXliDg4`er#D?OQF z6q!fUiX)=t0uTKD)B%%e3p1evD+l6Tq24z`E4THeYLi#OOd0gx4c zuLzg8Va}*E1wKQ$Z#WkUU8nKE1go8}JOr=WUr{~9g9!p8U05G}tOBoy{Rh?=EyJD& z%cvp56~nHPBo{&j6!(zA^i``_1_&=n(gu##cB`b+cB>488iGd>`m_sBzE}a(e`<+( zB#oB}RN`T4{{;}fSSdKC5}3#@WE?t;D-F~B5)>;d>2QPvAi3}>u%|-pB+5>B$^!r| zI*W*hPD27QHlo_p0JcLRmo5NZRC^xM`v9mbqxID3&}nEO7NXlpAz~r2w@1_G*+JD{ zzTo-Aw{hDxSCRAZj`&LQXjltF2Hx>I@_P1yT=^YIq14fEZyG(sV@#2H4-k0hM%pj+ z0hL@l5X1A+ef*RJZ8FTfL1c=Gb`4rcI|{X+-Gky3lN5pEWk8_tnm->eNZvXY>Zz}^ z{Zr>0?^S!HQ(R!Qnv>9B+R>?v@QFW^w0m!z3Z3LD^>DZ0_LH^$QoL9I1@z2dXJ(*a}jSwPk5)kw*{Tlw|E^{T@x_E#hA-{sPnd$L@QcJ zD0v;;o(a^Xj;NEUBeClo7Ff9B_73x(KQ%C_s}yE&@c@zwo9@-PKq?p<%88?3xMc;x zsag_AsPz!veV9n$e=j0e^AVV5Y;gtG?m88_eNmV(WFyO-I+|!om4OIWta%5FH`cup zY!3nOv^&8t+{35r&ak|{UYSjoK=+D$3fbkGrOi^9qr0hnC<0VYgsw2!HDN|6F)$&` zedz7B;@fcVFgh@7^2@7fAD%ij7xtW_h56^U2%x0G@09G|2kfXJ^4a8=?-85KQD~fD z-65Iy#&TB44=C{}Jz#`7E^Bt!m>&;g zIVIG(I8Zh<_5We&EaRGf-?uLy(p`>}ZjgaAjPCA65EPK^M!LJZK?Frw5a}AZfu!_6 zK)MGEcJKRp{U6+WvOV1Evuo#dypQv^uJi6w&8tgP!RNxDR%*u4RQy6gO<1Rh`sM^x zm;}1ytFm)A0cloavG`{ML!TzoD7NK=XX7DmTR|p-AndQ<461(eVWehwAbDRCBC#<{ z2d#3=G<64w9m*BVfT$Z8E8s@OT@;~QC{PTFUNupM8BHk52sDQd$i50+8wVNa>5f;v^teC0Ljj>@_bKNtMl>!TkRsu|INc+xq`Ek_q zl}vDgFR>a9UG#|@J8nruF?d+{r_LGvvD#m(R+=kHoUd{ZX_t_mogSr!^q)~TvE}f) zNQh09XT@N&@Bp?aB^{?Xno|0|q!hMGGVz#6Ztn&N*GuJo(7wMX4g^Oo{%r-sCr{xo zow%t39YU+Wcb{R0v?44+?b8!$D`rjFU7Qxh3a+5au<{37mq=5VM98vSkPRW2)cYGm zI*&c;hTzJQbT_U3nHv-Z+^2km?=M$_Wntcs};r=a#bl+}^C6Rr_3e z?2vgmWt-%*=r*~Ix5YZo4x_aOUNB?+OW?5gZa+UdcGC2YmdrQ|b+q}0VR15@l?2bOqiUq$G6{!rm#4UCT< z+PC+#*{8sjt}q5y%Qfnr;r!C#qfMq%LlcQQ>C@C(hMMm%p@7O0Rge`c{8ZbNPSfvD z1^El_{U-~jE5U0K#X_D?+Yx%uL#7FdsuVnLzMr%xwmq76a31D^pV5+xpcbV{s&Khg0s}Zm|lrHQ!2tJ{L2zMgxXHK{2DAR zPm>msC>*7!=hQJ3;MsQn9Y=#$;<~Sc-DX5P9-@JSqIz?_L$PTl6>NSJKhA z6+|4Zq#@Y+O?c%Dn}WV#=>~Ec&kUTVZIco@ov&=)ESJju}sG601&3u$HX zf^y92qhRk61$(s>0G0O@)|vFl?^*Iw-!n-OJjU!iE6Bf+6v6{b3vnNaISA`{pkR+d zp_iG0>apaC@d``t9KxW=pcKZGP5YRCg()OaNA5s4O9d^e(yQoHv6l17#Ff8H>q+{{ znoT{We2-I5YCzrk?4Z^`R?iVCS5;abt!l5BnD+FEk~N!vSLvSF3>DdQz?m(DWK{LY ztD|ll&S5ho;gx42G0QPvMJd1`hXB3aGKw)4S?-K`imwW6ocDNjDf^9f&6U}zK63SG z;BX_>d7`gMH9}^^24Sr)@_`PTdKeHhyYY%PRRV>>G|t!s);H8&m1{`MN`Jp>Mav&? zkk@+$RkAB6OIA&mFHCbx$oPEjAP7wRB39Q6p|tBN<5ks^4P&08a8Y#PS}D*FX(gz0 zbT9|5L4B(h%8$WG@)BugslF_N^v4QL7%Tac&s*{8k{yhJWKh>C;qo=GhFnnEO5_cT zAjYwx6aPx#q(&=I9fpH7@DdVQMOg6&o>az46OSTf5u~A0`1e{oZxY=byN(&93h|&e zRVn3zU>;fJH1U)amKJh4#eYoV1(Si^_;u|2CcsgMM^#A$3{0!co)#FR#o~ottPm(J zp07c4KNM%3D-O%Ue`O zW%klol=d?2lct$fBc|EELNHlWq0v=uy5d*>U3smtxoIrQxfzt+099OXu{x1`+>ES! zHN8`aA&bqvlin%x4NKkGsF@xE#D`^TKTyvNO2Fa*Nv`@+UZ}ECQK;IX+>zEQ-;r_h z$(7kL)s=mXWKDJ!ZB4a{tShmKxvS9ogEx^XyEp#<-@bIl^nU29B@~0@10=G_xH48{ zx*}G!Q8qR0OA)i4bQ9Rbzk;Xft(QisxRfW;3|cgv@aeVv39<`C8LcY`(yuPD?$dq?UyrC6sjnZgvkB_-e*j*T~X9=?|%dqLPe^+Rk(qjWjAzR!W+2>c?uG@S7yn-HCtcQnLF_6bwI_dPRe}B;i~ z^FBJzT>PgKvt|FJ89AiX!l;F^zS1RsEc;jn~1W;W0<)vIs?c?XAUgqzkoABA5lyko&nC?|x z><>IT+JCXc!UTX$v6w=5S;SDV@09GyYz$b_DmU6E#J!gB)BDWbg?AI@?*j?>&hS$@ z@EKu(3h0WMc4Yk%J>zmReYKAH)ywFW%2CeWBvNR#3f;c@j-C_{FL(MqIw+pIse)^n zG3Rf>UrObK`#!ina+O;(aU!_C6i=wGgjf3m{I2*`2k8^nW0jfy@!jVch+Mh(Gm-vF zlCIVfxw7_W+~!rV?*Dkix=*9W3+bo|mETD3OzdIz!hDqZ%XyzJw+7WFcVZ@GB$gjy zh#HCZXL1#%E_LPO>C15yiO39s zr<9mqk?zf*9OsD&$1x+BxeS^ZrF56n8sM40)nu6R_cOiyOU58Llc?kN>i%Lu|fdXDSZz?4l z2%lH(M!A(^xfE)vLn|R@7U9g+%F+pS;B2mk&g#7Q$z+zZ`m&X_GuPBC)>qoijnLk= zxHl5sFFNn`H7?f6TgDzfO|u=AdyNIfPqUs1il=sq><3>w$x@}w@5^0Sl_iehcIA1y zc;f_UqlAu>GKx8mQulE^@gUhdkBQ%yPIDEoR)(TVfq5uF8311k6B^ccc_W z(r;g`X}Ah>MK{QGWZa5$B{#_O4^pJ-uwHRlkeyqXcW_*B2bRiZLqCvzVIt)$Q$UP= zW(<>b0wXD|!AMMkbP$@Rj4NkB9>T+cwD}TZQ1zm6tLjBL2{ETFRaqT)T6r$bJiLb4 z3owP9uYibmpu7lE?qvp~{AK!y%_|>@+K)PS9at|C%jd!T@e8kd@y$?|3pwy!OjNXi z`I8qId&$kH?h}8Qp_o6V48sO{`k~_87!rd{{mIsw_HGVxzQZreo(5tlR(aC%CPjox z(O6<9e$Peyp;&J=_MI*mDnE{eC46H=l62t+zuQpKP6J^|DL!dj;ospwKf2SQ9yw~! zhsLZkBXRH35cN!TZ_x9yZs zJp)1|8ad`8w0(s<9@1dmjFGf3y0#sZIR@@UE!Z#&O{{~a)AIbW-b6w+B%62muNT@ZRQsB&U&t0_5cP&(=+|Vl+t)&yb`^` zg8sCdDAxvuF=l9uffCKmn)oX^!JxC(J zUOyu>^;VOp8CmvAbt@DYRs(sF&Z7zrvA~n!XTx=*ky%Z~=5p$noUNQl3 zl5z6CpO$aPsFD7eJYaefMl1Kz(&RoY7{j-HMV zSmK7XZ*xz+ubWB&P5-_LKc z_JnXp82Rhh4tB`+L(j&>Mu{|I=gi6Uf3KBQKD{!D0iAkEBYBdwb6uJS2O}WeNA-4KJE^wc42P;c z-ahxdy-2s_a+ql&2@#w-ZXIm8J9hA`4>tyh7dl1S zAYM(Pr_`kP!6u-H(K9@D) z4AlnY!U0Kiys!y4@#=0PT*o4F`wy}&c54#>|JMbSUNylR9`knrFxWIiRp7c|MRyc} z#@}3!-pMtblM8cX{-$kGn~rlRDqv*8@Gc`ujxBs4(}?l*U6!gS-qn!*X1wU7;3Oz+ zLyeO4tP@Rs7#qtXob%1@=K{gt={B2Sg4CsFTlu)h(UF}!8Z)Ia%bO|I=419XlcOAH z6lQMGxsCMkqXjF<&5E5@Us&F^D~3?g^DQ1)5Ay!&NOSKj**$wpQoGe!f~U&9*zr>9 zP(nc~H+7LOPwU%l1Y+!f*kma*b2k>{CYKKhF8MDMzj z>~!zcpJO|)OMA)upP8wNK3X1>ZA|w5ns84!t2m*#mk=edZ)zpRTp@sq;R9@9Dh8^C zxsk%K)(EA^(V())vn%B5p>yISteOt<@7HhtAedp!h9kxV_J4}N-1StwG zTwHIWWj-kODyvie)xx+Qv6*WOT^9G+e=(4n1!|k3&}i?ZkoVY19Lr52+F5*+0OL@% zn7SC{Jkh3S%kBrsx^;;Y6ygl@pK+E7OY^<{+nbxiNyJ!u z|E8m35c%UlrjJ?pI*d;o`B8QvYk1VX9Q}1}=>it#Oz8|Z#2JRSYo0A~!A!KW`PTB8 z@=G7jPU84Qs|NSVyCnQU={SubbwYm$sxcVH#VDwn1+e)jnD`cL>G9JAz zOYnsuf6@*{6rmqrI+c5F2OoL`IOT%zZpLGlaKH|n$E;x=(%_ywz>r^AjbaQ#Wy?!t z!RpRI&k~50i~4I;JQ7oFEQ_-g5(3Al-hL{X|77}&*w1|fx5c4(1s~b^{z6`qP!0#$g&tZQz=HOkk#ra_`K?@dvm~HLJ*TckC zA)W;~-hdOZ&cjU#2$YD7`Zsx}rCapPcn_U2tj06>>LyU-BZlrh=v03pVnBTIW1 zE~NF`MplJc$p%wl06y$7d~Qg~krcZEAvMb3jRe8I<}Ec!T97jguzTb;zQt-O!)lEQ zjhjV&N(-bfKTQfIo`t-39GCs*RPU+9phELo`h6Rv*p?uRR|qnc^Tzjk*V~$e-NaPt z%gf!~Y1jOWMb&8w9&TQmuX`~yfzo|Duy|m}wCDSuEaP$`SQj=~T7tB!unfyDF;#F! z%%1Y4>g<)7ad#}sIeY*>G0|2+DCKb4GQ_@dxe_kF+{x2#lVu~7Bz z?QxA6=R$GKePs5M#j0uUHiahA0Jn)0nJ^eTMpoEvFIlN$I8pjJPc^6|e74m5Qz%=* zbgkR3p``jhT+~k#GY0s%?pw}i;*WQCYzSkt;FlYNQ8R66ktKi4W#|WT(GOl+VDMga zWSqOIQH`kcS&IR*6+8cW))$yC=WiUo#@@N_=;MEB4dlWx=4<9-hKckOm4MF^!ElV$ z=Y08hS%AzzOx{wyStmZH>HTy= z@`EyT`Y84F&Q&OsW+PU~xpBSpyNd+J#_7kO%}#_g7d`-*Px_3TQH`W>D+`(fA4$Yt zsPBSJ7|nBNj@|SX#UcpO@fxXBU#S3}OWHQLC6ZQdHOsR+F5DZ?Gg&^~b>QeaVNhW~eTSM-hG+KNyB%HK;sZ!6nG(d8ghc$yasvXF@InqU|9< zgKUZZiW#?B`s)GY3<0`BL8RSnPHe-A`oX_r!m@9B+iwGb>$Fo`-Ngk*Q!fT$&6-7; z+qOcLUXFLX6J*A}{7|5oY!hX|(Ptg){KTOOd!Nsy1kOwmFk#T{0{?(ZV{(4_NpIbG zVgv>aiS$72MuQ_Vtx7)_g5WD_laj7w!tWZu?^~<7gGjmwz9O3toO(#6jTRN_+xV+U zw4HvTA)7Q|@z;DM_-NTlqT@JO$|igW-&Bb`ku4Z9DhI>-yEP6UR>*6HepCWH>`fm}2k}>K zEjY$hr0b9MZs*m6dK^pa{%Za*Gkihuz+ksSS=;s!M;y7q(oWHBJ{74~PJoaXQd|Z8 z?b=5cBDz|iD!xB~xu|cDWt+p|HP@=g(+c`w-kIQ0Ltx1ZB|J&pkvUUq9I9ExUuoyQ zlWaqX=ujoJd(;L5urk?H88IKQ91&_~^BplS^5W$AvZDFGkJi%VUqN(4!c^CU_YPKu zZt<+yE;Ek+9yJ=o^ry0MU_1h2=_^{JbJ*60m*$?ASmuXNc!Xd7zcnux8mnApHP6-C z;gRk|kdlVd*kmHv7Hh=6lC08i#5FuusfJ>Agx`4WeeQcbMF=|jq(U~;%P{PlaG@ZJ znD06-Q;*H#xZ?ig{bf|vxHpaq#x<0su>O(tG;;3?v7e0gY{tzn{nNYqzTdlJ(wYr3 zYjm2cC1 z7_|*n39@i%V)SL>o{SRhCMhj+d>cP6ob>(ysdV&e5W6l(&4y2vd)7j2@fOISYf<4i zZ#m$&oC-X$K1)LPe}~dzUs){ROmn#lfC)2*+uM=(88k)^$>?Vp1ll`bcqO?M zQus23v{Ze#7L}5zMtprc*QK&Mk|IRp)oFdM&SK$j@+=Je^CguU>Ux;`&GsnSbmn~i z!*PT{YiAD5qAD3G}k+OSJZOR3H^-Bep7dun*QbqL;-Bu z1lZD}QMa{l$OO}R_~r*qxKaX95X-g~_BW$N3Xi{1!?DH*0$W=DR>+aE=Ooz`*wO@y z^+NH4`uW?;AqwK`*shHQs&`1WbKQWjbi8{;mipR)@nw0lx*ZnrMn65VGLi*~C15?VH?0*@?J&?YImWo1A8! z|KYJDdu_#3HBy(BbUGNYO-qX;4{egZ69pwzUdvsExxKL-DctH$659}_^luiB8~JGN zlYLI9#6S{TgU$KZJX=060x3MT@H=T$=?A0HT|kG>i?LR{uLi)9_YHj8BfbN|x@>Gk zdw;%V9(*VGO1cX_;LxuToR6r*k7v(P*e-47kY{&IqwW1RPYjsR8xo+=5Pj#u3R@%J z@}?ihv$hNUthu+4e^)NbzrB;cPat9J{ICH*TZ|5uFOs{|3R0Hi)AF*6!REu zu|JB4*MSILPC7l!=RoAoPeyMDp+8G!>sFHu>Z{E^TgN;Ox8x<)riz=(FZPMkZw1lCso|w>qr?7+zq|PA&p%t`h^14|Sk-Q?p}fu(TzqW>=$#@+ zhh=tah&HZcrIYd@GCWq=$?Gp+<|rNaeuN|maOx1wUg^LF3N;3}g?j^gM!pm!)iN0a z7#ySRx>;u@{A04!M&@)ZQNTvA*}@C6>HkoXR4dP(KkbYc3bYHw&8g3{{eda1Fwz1C zPQDOy{qGUNIYtsME~}q`FeuC&{(NU9nl>=D>JP1Ru^|7W^zx1~?~Fq4kBO_;*)1NrkexA_D-bSG0 zOap$-U;9n-oJ#M{+e+NrFq>;koE@8pEPgW9wqz_O>8MSQFZr$AL{;rgfAoj~SeepCbkFiPuZ2Xi(wRf*hxX6*z(aKv?=1s5rXqbxFQVK$*jiWse zw|>GQn~gNeTA=3S6~6S8=3k$&%CfF9IH&U5OOkY_egraXJvHDM$06e3r89b^wZU5O z=Jb)%9gJ<{?6c5(tdE~`V=5+fBuTvBs_Ya%h2};4{D8}406h8itetkW5fed1N3vsz zE+JY!r^|SK)CU>57hrfWKs$yUhpLCNOfW5s7upZa`B7l#i9OcaQZ=n8@m~3MTZ7ra z485o3?EXYDm|m{w&09QDe&PA%8u|Cl zs*u3fq>e~Iy#S7>1r#3>WpZu}P>J=hY@FQv$ObH`iyrew0OqXf?8Vy@VO^wpBuc?tU{FzRsU) zb4k>#b4jzoJS#Pr3r{BB^Hk@W-Wegi&mzojG0G5Z$&dy92Q^3Xm(*Q(jY&iX0R?;d zSqx;~LhDvPS~%3mAC_z)kC&^$Y-*m!HK+*%s109oj^ho|)Jlq*Uf8d_>D+#4c+Mg6 zX$e1Um`pCQhT?$}JNuq<3H%CB$`1p(4>zdWS^?KnOye$Ke%a^vV^7@0@5|c$r^5{k z?F~OY$=JWSl-uCYFu9MjoS;wcm=Vp^rc z*V@Ofp8euu@~KeD$Yg0z-ALii2Ep%(H80({y!@7HAd%xB=bZLa}gB{2C7`1k(_CVn1w78vi=cTB69 zr20~_-Lssl*@zUY3i-VUGy_mjns+s}o8*u<*hlqR;I{$0azn}74HZ`#h(fss;NhZ2 z@%2LK=J!vTRo864t8}ssEn7rsc)oX8L576Q%8S^Oh^y$+*&Fv;D9BW-`yIS{7H5lTVn>kKU zGG;zPW{1FZt_)I6O!}yDN6jo!MG-qL`}QS0%2-N{cu+73WRIr%aeMnItL=-Q z)@Iw(uv7?=>jFn4D0OHJ$?7>j76dQdjy$XTg(Q6>T6C6&GgRd6N|cTp&zg&~-BFd` zyYZfV1FoZ=nEy|bzQeO%g*he-plhd{*G%e-Z1GITi#1g>mVJy4u$}L_NPP9Ul$u<$LWc z7L)?gDMo)qubx*b-k%Zv>DCvLIgG zX`v+te2iU7>V<*v5~*Uh-ASD(sBnKY>;%wE9}O6P`==f$CA!mx$$@FV6`az2r=830 zyQNur#s9VVWF%6IJ*7AyQg`eO>p$_F1%Qb%!h_3o zkY9p31du}Kfg*{{-9#@^SZHpq@LQm-fj@oi#M20eKyd=kA9 z_#vtz+?NU6Rs`SRL({O^Cn**%4cc(~wF!w%SuX8TaY$;|rf}t1-YGZ?Uo$GF6!_|- z*`6KXxmT@u~w&l%d#KENB}65%mp9q`bAnw&^n zl4@-+wD<*((xN6$xaaQ;TWD!6lKf0aAatPPak*qQX+H8tKs*s{X)lR^p5F^S7)ovJ ziyiaNX{K$F9r@24IpBHtVft4htvAkYbv)^iwdm$&`QN*mBCP_qo^n{*!jhq5qx2`q zbkJ8DDA_EJ0^RO}UdH#j;DSuG(FX7;xqKC*ALx$RU zQ%qJE_f|NDDIsXxXK9er>^Lgbpug6&fVKF;>C~Fg&gZo2ryfDC%)D5q{>)_#mXCzf zr`=2&!gjMaTd6vsnMqW+23KmlaU8(*YH{^f|ZDAZ_h?O$E+%QP?dHxpkWVp7EXze*CK}NQAs9X>$`+)A==G?u#R?V_~k-kpu$~cpyc##`tjFy{wOtzrpRKE$DN}*BDf`RZ;rqh z3*ALO|07^Dvge8TuX_+!xV^za9QLYL5Y+P~&*R##I_Es?Too8<3YakvnM*%7WEIc3 zQ@I{EvlR{arde_tFWvPzrK6?DOYNaW&5e|j%PEPBbdCO#d@K6pZ83}qP|QdFnf-aA zow*c0&RqGbz6uTNDi(t~{$*H0UQOdubhyp#n`XX$i4Hf_@1jgOg&HB ztYnI^ffM#TW1L-=O`$+$-e86gSO`d`57X)wKh}s=zneE45iDb29@ge2?xlk{lYmgJ z2kH(|xHaw&!x%#i@G-8^&Z1fOmg7lD)cjRw*b`dzCDz5+daIJ6dUf^&olZ|Gag2KO zpmxj3@-obg-t4TaUQSP}R>Vd4c-2o=SWY-QnM}@%)zM6Vr>=4n?(g`aWbNogh^aah zJ|NBh$Nz_X+-nQcKULF)uU$Ru`pH#2<75|`WW_Y57_p#4=JG=tPs2K}At#t=+@j?N zTgr@`qK(hml`>S}v0J)@XPBw=4au?0!tOpxQ*SXda;rY9@8$m}zHrVmjcF|{k)P-u zgsbenx_>wK#_iu{`mwmfPu*nDFF*XB=!c{hY?6Wyi1-feMX8vj2eg@WK1An|VYDaF z+K2=ZeUx|yMYfllWxqAnYW^#zL71TrIWO(dYn5}V<{e{;qVY39^gWxwq29S(B9Gyb zTV0-_LP>yruWyi<$0Se3yWL z34bxMP_Bm7xKtEK9X0p;=RDo=o}~gGMKqEykvN`+njtOGxF6s38yHZ=E55>!HGJm# z&W2Ko_TP@Sv?TNYAi4W1X2~lURrb$3QsDF$TxypP(2@0ly*g5{GX_QDEc0_Y4i}?tY1xCcqkq)-|LSL4{q6rFdKq5V3I1d)TxesWBK>^oO@}^o#>5b1 zM^>{2yj=-jPyUK`eK8Hg{1J=0i@&3s@QtDhUoY6K9ahuq^MQjenB-s#F2lOkL3&H@ zwNU-WfJX%%LKMfZF}O&jn^&~KYyJS+_eDj(^>yNNLChFIypam7zvky~!AL~V_dQGKv?4e&o zyS#JjIC;J>?`5y#`%9Dam94=nx$ym zhTtN{gJskWrb9#SesosE zJ}7#t0+Qb!Wb?+AE%as^L+4E?yIJmH-P%w2FXy@Y5*UkH>0m!4i-YDY8lsK^LG^7b z9Y$(Dtn8gvuxFfnc8!6QEAB7Adj`1x6zqgV=%?8M@C7woj1 zkhN=fOGXj!#LoM>!z(kRK$BH5Yr^PNYKY9=AWBgpy^^gVttgJ(IX`!FCb8ma7D;QZ zBAM@!GcJ>65*}CGWXwT_0mPFW?^Y_ldCL_s556>b|XI(*s zgyJiUR)+#10l&u*scSjWiW{fbyFpMWw9TQx6W*F0Px0-T@YKWQYxvKcR=C%F2I?|} zr*CSb?IAyX1*tj1at$g75wGt^bT`lwN{#C5Bne!y&tYF^1;6z~2*0u#isq+0zZU8- z*i#MD^qa~`+5R^Od?Nm;G|h%+4s1@^kULCk#F^3c$-Wzxsk}Te-{igU*yVkbabThR z0;U~rod^%4MrwzinpXXMJE_1$CgtV>0QAOF(v;?JTkBH&*We02tq$(t+4-Y-t~bI^ z_b(rIIaQnv*i$#z-3ux@bqZ#jQ_VW48nlm^+}$j;UyTTpwpcT+@k(NdB}Z<@?iG^w z+DXqF0gGJ`8au3`3`{Un1Ziu3RIeT*z%72H5WZ~mskFTzGMZMpz+;}KhM|jZ?~hK( z2KDR?oZ+{i{nN~#tx)!Cubry354!l+Zkthd=0x@iL;elV`X#mWv*kge9$;#-rUxg1 zRg(FSZxcR4g1B8NR4OA)#wzA~DO{B+wjT+9A1Z)u`+D0Pn=4pCJ+vBTclfF|JIm0I zX2M75r z#YbuV&&xkqzP)h`nRfwYqw%(w%q0CZn9&Hq3+_o`7o58A&}}FGprZ~G3}s2r=fftrA&qQou9NRp%hzWhm*r*3-A5GE7dX!(oitpe!RnXDFCNQ%Zfk@Fq|QVTzOidQEql9G!#pkkm4v8k#Jx~dRh zPvTr)BViCztPV?zV~&kdq);vniV-v6vQ#P0{?1P=GANUu_uQE8t&Hn zO2V}Ket_$rUwR)GuT*s!+Hy~r|QIQw9KamSx? z@%~QUoA%EDJnKVz@pb$6<|h?ZYbpgbu04O=8L!FcQMjW>$eDyg2$g@__d%k&1O2gO zwfi%=*jTHih`zHHc+W<_SnxF=aAqrP-P5oLs>_^KU3hdtSJ(`D8CS z88NJS#PBKDaW!M;4i08BXs9;YavZ3bo{?(3CNq;S%w-DG`h=;>YC{~BZ=VzCi4ThP zylEUb+oLae^Ae<}{j2_%aJM{2{^Hq|buht6r;a5;7%#@ns&H zD3s{HPX>qNMj>>rmbTAL&cc~pCcf=MM_}jCDADC+^0tu7x(jcI8J&v!8-{C8klJ$^zZ?macct?otH!?(wuAGvi@GpjB!?@UC%B=V4KAtfm{Y{H4cx0BvKr z{4mJ>H_11LRFynJ#d6OuD0UOLkk&Rk5Q3;DFWb?aN?i(j zkFeeeZBU$JrV8mkKUFWhfrkPJ9urI+&Am*r$IDewgKxk7w&zx?c`R41l;rzn>JeyA zNETZr`U7dI&@CYThPTP$;9hNAeSv>o*YKm=LSq=Y$fRhPa`Bi>QG46sTWbFJKz10$ zovvOmDtw~X+hj2i-HO8F{t&Xz_Gjy*Bei#Cjm$vdts~B1F}&{jBx|9quV*2J>w3XT zLycU*dLbVf8`=uA&bB{S_}Azmtj)0M4I?_e2=Ny_I;xX=jOCks<|3xmdY@K-XNv1F zce5;E%P>EB_X`9+N(T?86TNVWS-zumPm0!r6go%fHDP}hQA%$XVfW>UqneSv%51x` z)>pjTN$W)7ZyZomgb{sp&1VaHxMrVD6*Z?WB0U$~Vm^fZ3{`KuBzx47IZQn*UlVh* z%?*mwI$AO`x4xE=@lhSmO#z#$z4Iixh!*Vx-O2}&hbKU#Eq9``{qNLMzol!0)7UH$ zEai#LwlUC%x5ibz-c`;Qf4_hq0zBiKZPcEe)j!dv{`B+pd5?6_>%)6&nxZ!7WH`YF zhJnh`2JvYhNMaM$H_MS>>!lzgomme>VkO$Ub%(r)e?hNcV2I24(d*#*Ec<}J6T6N# zC;Xzv+JDXem%c1`8_tZaTmWtPpFC$M<0F=al#iC=&~W6>0FB*kZm{4^Fy6(o z>iGit|J06J>;I*FG-gs8pPWYKkMC5+rjpDJQ9+3W1G3T&c#wmcRN<{&+|5D%3zuo* zoc}-ZbIb#8M&Ttwa)&jyvB<)$E^;?ef8F@M#Lu&lQebf~BBBXHFMs>vyuBTQ&CDj4 zZIoZhL)>`YGUINt5liYTGVEM^l!_PmGZgAm-irLpu4;D-&b^ht(NJf4chFrNfbFqo z=vW~_$Dvs(FhrG?&Cw|%wH}JM@#8@j30?F#&kW_n=$4SkKFb!u z-OyNYx`TL8#{R$V!+y#CB7bKR4924qR}2DXt%s;C1TN&i&enb$W(vycSW&(1rj!eg z0*l1bgGrdDcZy6ZHf9^ZfxJNvDLp_R+ZZ`G3PTKU9fVeEGK|wFabw)YiDG78&m!zy>y`6A+48*TG_zC(z-0uTLvs)uGh#d-pqf9RmCqXkUuTnw|b8oC10wd-CaTu-v;Dj{|m1`eF7h)h{$L=-@5J1OzySW)?pV1x)f3OE=Tm9H+*$DRX^$B%F!aGg8YD=b8naRJ|1ujVjrJNb=tOBjs zy3|9W6-!7wODIj%Kv}l!{pVrt86ZEFdSbh3Y)`BohX;Cmj|#VqhT@+q9RIAXci{3X zcy~%J5}#f_Ga0;dwO>^Bmh<^L9ze#Qy4BDFYP)wvLv>%j|5NigC?d(ZqbbpS_FwPA zKzSgV9~k1;4WZf{ZDfZ{oeObFD`9REZGK=b^EW_~HVv)OP;M5?Jn+(t$_q0{R_)&X zO<#?C4;InsW=|znzXmv=N4PUHxlpKjehw$D)q7KRz!EynxDdr|!V84`i(IuM*K#+H zpfWbhg4J%LX7vRt!-rowK22!sb>l0KC0(kdxD6zeVXM#Yz!jeS8=H#iXd?|hdx8az zKAGTr2s7UV!?A~bPzL!wJ{a$rQ9>?Lu=p1fRDJdv_wM=JU@u9qLFVz!(58@s-89ri znR)y}Km^F>jZ**QUkk3q#s<^%qG_fLd`@fFN4efQ%+g}fAh8YhFI&Kp;bO%?O*l{6 z*Cam}A+z;LZ?Mf%Q`(+Pii*a7y|g_o+7lBkiAPiDPyk=;qN7FSaE{^^N!qY^*h8sW z^m6Bt@6op{-RW)PUemW_SZi1mbImwee_i!0X$7?eV6DCDu~p5L12FUbSK9vVzj;ec z8NnK&6(%b7suM%BwuJcyBmj23Ku_s7#^#L~Lq>Z~a^uf$(E2MdnuJCdxsG2ZI|Q>H zdTgzr`SH7hUO!?+^?p)ggumVsLdYhkXaA|2Hyjsswq-r)ZL))5Dyp4)v3?41O^rEi z8_)hCRu%zOxm2m~ly;`h^j2u7OX@gSde@=axR4*P+s%81kCQvmH({Sqy4##ew!!|M zuVB1qeO3ByC#+bt-0ow7IiIpr-p4e~=RnDlm_Kf6y5-&Llm6wEHk2(NYtEL6tb&Qg zuowmMDW8e}`z!@TQuMw}(mgo%?_gp`t<#F+>JqPnmK0Ub_X{#q<>&~zzw~|L>pxEr zM>RFFTOk#0gHb$#24*or>Bf3DnKeEPU4OZ<`@hsDeRwIx#_(TRRQiC5a*(5<9NKC7 zn;d{#XG``km$d?VtJ@^aAG9t)XN%(gtpE})>!(o(g_;8dmp~DtY){SQ^Q>`%J|Ot9 zv|&_aPYNn!@oWo5uEp-OhjX;L!tT_e6Cr?W!`PA&t&kx?ZiPP_UC1Xk`V-qWEufFaRO)m|mE5cu7vnh2 zRS2bZ6Xsmxt#`(_^3Qm2?T`YN)Ip`+}$+^?(S|u26rd8yF+ky z3+@)&3GVK$gImx+2N>Yve%|j#*L3y#n40QSd+)P)t*gVn?O~z^qrtD8lP0Aj3HIR> zrhLKU-G@J}N@`tIA04iB)utsvd-mKh9Kro*BMb=qC*;q-L1$&UP;UMgm#*^9Qq(fb?UrgME7_S#I$U(RrEx?_z!~yG2F9_(#C2W40nTK>YFW3# zLRrmn;imfFgzw`kA-BFABQh;L6DNdaYJm4%#Xt1Sq0G*{V?uH4`+7F?>@{U=u9tAk zN5PM~G!w4YX}X~jzGaRrP+f1EgzNS;_`-AEt;y%r^aLw|9iYyng8`N z)ckz29}x>4)`_?BD&IR#>6do}R03@p9`!?QqrN1=#hyISu$AufPCO}fK817CgHxo|GF=ktLIbM* zLTG%cB&zOz1AV+(&gkH`@(C29W~Yqnc`7J0I)fsql!B7>QEDhh&fTEpc+EW^R`;28Hz|1n+Y$8xYQF1Fhy=g%~p0|Lxh8t>ljuV@}#K>c4uvikofwtjo1 zF|vO@?8r+~mb-bC6Ke2&^>KI5wvT6loNIZC+qrtGMehk~u2U~~AK?O8rmG7%yF#efz|M;5|H|KRfT{v$1~+0m zFVDU|zPw|Om2)UVoH7nSMQVAO9(`^7y3m$yKx22;&_vwf6z62_gW0oy@$}-%f`ox( z?w$|<(!7xN*QX?qGj{s=0do6Qwz1wo`p#MA%)ZmY$b_!hodBs7k}BC(r%E_Y!Qa}` z86Pix?nE;K-!xGyj4UzlQr-C8-ngDH-PnzEAaI@$|9n`!_}<_!!hO-*03C9H`Q#u} z`Er8_9wx0vX2eYvpLhMM?LThqEByo^F*v2Gr(!n7(!>Xg$N5fZ z3f)qtEvahUNVap;+ILxpeG3>(zG{2YJ@1~O#4{gzxWH_qdnA*q*BN!_W>_(Yeco$SQ2rVIIBtf#Z>;{jD!>2d z6JW^2cuQ ze+`^?rrB>IjtV-=2TdsJ*}tp2nGpTY8N{UYyqWi;@&sbgIvJDr+Zn%0vS%h>NYP?Jvt&~eRiUx& zl0pH^^Lvp6RR^=z9z z46)_Ry0+NMvKn(sb~LWmw=>gapSC~dpKbobUF>jS`=D(hS_w(dqtTspSwfj7XIb3e zo-R-{y~4TH!D&#(aYlR&A*`XJ!*^UbS z*2ta~RN3DsF&HC?NZZwLCUFx`7oM&P`?x8l@C;9J3C{8Nz5EqFiGofHO;pr*JXd$W zlzkSrkndeP|0T@vl#qRU)gaI zk&*nLu8*xKJCG#tZfLOkL-Uu##U%b;;br5yIJJdafQAao zjCCEKg6Fb*?D(l6TXPAbE)nyQ$1Y!#3<`FTrNpTNBPibLWjM$Nk&p|ak+OY@$9vgx zyjvV&7em0@k^g#XBc<)aTRgYE#b^Se5crU5W)H5_uVb8IS!4cw@y{CYr2`6gU~LN# zVb7m8BfkDi>@k2lPP>AW_C&6qF=p{(*ldK_^WS$#c)q46&gGBP>;}hZUZgKm|K05* za;9Thu~1Mv*yD=fS}fQcVHIlLjN&cD)`zUw2*r1!W%tuuvxi=Qcws?~>{fn>^B`(8 z*Zv0wlcqRJoN9cL@uN5Hb^Ew3m5;usE<>T4UGti_v`TufUhG?#i=M+&s(9-u02H3%wYkfB{p;GT)%s3;s8XYx3KJD zbtBa2QVd=u&D%6DZVh$*K+OSdz2?&A zJ}A~ycpy00)vssRaJ@TX9dlO|8l!zpyKk-_%|<|(>N)%6=5WtlUlw_W7yz$3%2jLF ztvWo&!=wCq$P6=q^65 zzuWu1kDC@H;riaBxb_S(*X}o>$Tk3@PyNig(j&2J?!Q>ITRlhcU2U%x-#X(q^k?0@ z(i{p?7;aowQ7KKwyj9GqLh!QKZEZRBEwlQcIfoIR2r4Yp%QH+1pf z39E@jP_0h$Ian+d-#TP#kJ~YOI!v-V?nf<=%~yI=V{cPtfj2*^n(rYle336zp9SIzR#G*S7B&&*=h~d z?{ZEM%jb2qpQo9eztgClIbjw3vGkB^9?L}`O7e!t^-EDzpM|Qy>B_Wk5>l`W8GKlo zbUD~|`}OK$u+t%mL=zx@?%+(qei=^0Hma2F?0*V?mSxm?i3lXnx8Co>Li5KB#~k*M|Wz^y5(!y!NAF3JqBbJZX=`wmg}3nT3F!4yPja-&{jf809j z;0BZ#h zZ$#}I#vq`c()VMRri3H`z%P``SXYbjp02mK38%TR`{*O~4-Cr}>cf#&?WFB2^&%Zs z1!wPeNMLcF9fRrp*vcEQNV)Cb|L470{z_kG37O&4=qyLMYbG(xzK3)|`@o$*Lswz^ zVDjU~6qWS2=FDUAVgPN&AuZ`ALokbELCsnlX$JU3Uf8Qc)v}{v1W9IDFpB&3#V7yhWexH|OV;U;(mDyVQdey});s5`CXPE9 zo9T-et1!|}V(?WQ0P2SDWcB4iX0*ZkNPgFkO8vAZi@&KY59J35Pc!K%IaM|)hl|SHzQvG{4KFaJ z;&Da!R^c2)d0}=e4*e9)K_7~B!0G(QQOMJE)emhp>w>v}IOt%}-V@Qn=$83WmJp1j zPXlPt1M&-zNRSwYmH$hk#FT;cc5MT}uQ*sgpKq6@%sP3yKfA*#k?oBbL{bkcKj<^G zY2uBbne zwj=Cc@xGQ!=6(SThc!|eXfF}}7@=?oRfPzt*mLvQH(ghyJTho&S|aQ=e(?UcDLgUq zq?BR3v)Y;A?)kB8*>!kI=*;k&-X1RQ3*mF!&$fHAcF6|GztDzrmQvSEa zpmWu3xi!n+euNaDUH*S_JIBiZ&F$Iol|xYbcI>(eXPNa6?DX7i5--UHY^97hhWXvSJ^lH4xZ)ip?=tk^5wJHe-eZ&Su zHw`~11tXvT>k7+&4_(+Kc~Plx+#u1rCN9x z{cM)8kB58zJeiZDR&HdpX1*fGh{*Hq;zw)I8Aie$ngtIcF*Nj^DQBT!0i|5~f=Z)GtkHW4sr z4^^vH;;j0Y|E2nlC?p_cKRcH|zat4czfka)rn(b435J6OjY&fT%*rbbFAFXnG&Q9S{3de;W{anBG1Mfd^t-cibML!?~Mek z=t#pViSRV1O0{8Pi3wK~txDfNwsIplIw&braUD9 zs5BeFIy93QW(4LfnT*Xu?hEN(bD7b@NpT_NJc6{zDM^pZ-RNXdnV+o?WucyoXCTvAJKt%ph~zoqR+|Ha;TM*w|9BH0!82 z(#@5Py6=9146M7{wF&@q{&fl^ZN794>@^tc$o289k&zoMZ8}*Snd`3V{E9g?_On)c z2DnYd`u9hMeL?g1`B@TIxzh#iKHrYAGi>jJR!@O+_It+fWfbX2;yI=9p!Ite8g2U-^cFLkYKQwYSX3 z7-|(g1Dga;4R-p9)LT$1%YHxJU(#YBda-^dwZLa%E5qS@9^brGC2y%3E$i8ltZxMS zA(P>e2QwoAAV~&d!srp0hFS@)OJokuD+p9%mc_Z7$M5L(J`ZW;&7UKhv`KZC+hnb? zdI3f#z;KJQ?L0W!Ji<9;Rg9?)R%2hD`*gP=7mbMtjsqVKBa%UlKt*PejggTvMBw#j zKyBmx@%sVOvt;)>u@UkY4NnYX4D4)mxb1YojI zKiwB8TKE`7ah?lnVpg}j96J5Rj#wyAZlCzZVScZThvrL}sO+1YZq#vj^Gm%Gbhk6J zK-Ft43Q@tymh^7_4vU7X2r3Rt8_H4v?B+0j_+Hm9a;tr*PGCd~yu)hUC&B@lm_Upt zXNtp5=sI(bT$T{iZq$h*G*N-b?q7#~-fhPnC#H8&HE^r35DWf-$3%n)L~YEJ z7L<2G4UAwGDK9|oR_Lx^7JTQIF2UT_qjpvHxx0M3w*6^;ERr^)mtQCu zQb2od5_+@~B5YvRrS(n(E<)d>kdST2rUJ57bc%X%cln&q{e#*Ygys((ij~He@uonD zm!X15BaX)#p>YrE{zd2#6jb-=(Wi2x_09o=dIPV)a;k7rTLJ(9d-G=|hfA3A<&9?H z4r2`=%AKdDrk%W50gsAKFqovm!NvQVwVRaZR^PY;y7NZNiGEbXc#uJ3Mqf&Ju1j65 z78%SSQ%|D@PgzuTB=$Jb81Ukoz@GH%6QCtsmlX4Z$4?SIp)VN*oF8yTbo*lph^fh3 zzeaEqd*C7?SMtKj=4Ds}UFkvw!e4SN_7OHcU<#|1Q*o~d3h!~q7;G>m$iMm3^VjU8 zGTK*Jz%ZDs%)~RmIyrti?9{4-I0>s2X8|d8^#A-sW@ML_gDBGR-#L?YE^zeq%gX|`2 zFP7P-F{>g!b<#gv;X^(-qahN1F;saJfz=_+Mk z8mWOOrm?1i&mI+qGTftJ+$E#MuKJq{g(yfkt6wL%uDz6nnve@ym@^dRt8uV`ajMlS z3-6Y7|AeWVJ}a`ueBJIaER7VZPj!vL0M}d{##e@@Fh&Yvr&6|qjLTp|?m1h!uM>x* zt<{Z;%7HgXV`+zFtd|g4I123)==vEzG5;FQ>o)>)y|lm-ja^6?gAB1YZYd8WkB!3V zXU6Zn6tF5+2tb=lh1lLelwgjhAx7RQ?VW-iKp8*Z#PC?sFspm=DVEyZrR$EAaqh;m zKETY&pt~Bd=qwo6boWnmtn@M(=E4oNHO{CTs|$E?woPHN!W7Z7d!=h?SDQ5X2)~)R z#nEc1?29|H$NUiu?MM;;jyD_sD9F8iQ+PFb+?(QVhD}3>?+X6&KY=_Y-BtBoE>+^-@kKsu|Qej}0%xk?5^z$1hhSWDh$l(SbG{rH3J^M=$9F_l(8Gi$m*hVzFI1 zXp}ERd)Fj5LApT!ajB;a?*9BF+=h6ZfOb4hfn*Ytl2=cM^K#!mVv7OD^_lo4ykk+M zvk1s?k?fP;z@jteYz?NYmk@^@(qC6!518bBS)WUZTCy~FbGiTYPiaTU=?k|@9YAuw zHju#13v~lSF$EUio>tpb6m!boW_cYAjGpROK!n-5S+NT8M1Q?_qUHu&DGa2S?v9AT z8uV%m;uHusz3_;KBJZyO!$v!8Y~coMK?69ZwGqEval3xQ(OSfPeCqJgyWy{OXj1`g zij=ZOxbJ}GL{BvukyN2Qrw_+c=(^YcEO3&T{kcj4jQF4_q<+xN&soVgt?nFuJ7Y&F z2v)){-~HkVkUDSNyDg2_hoTX3soA427((T;yb-Fa;31;JPs6$ykZfY_6@LjSYz73lC0+@ZfEGv=y`F+ZdYVL~rdU z0?BV8LS+kof};q-FcHkA?A%VD1}|IfDR446PoYmSs5jm9E(Ko>nY=nVCC1^rc`ho_E^350`xvstfA29{e zoB6g9-fDJkk78$Cqs?-iYD5WAnqT7z#I8R`{UR1*nHhc*@hCuHZarDH6~pRz^iV1_ z$@KDi{LTuY1cDCG0#q zGkBmyGDFZ^G#IaZM*O%|IRE9F*gh#2JQzch-2v?+1`1vN@W3t&Yqpf`RkbE7p84y+ zFosj;j?XzXe3+6i9`P3&Pl`zTk;Dg-zExd8)$R_Nb}a3}qTTQ?;|>9r_4w~W1^pW= zIQ?QZf(4?dpwD$F8YqRW%!mAe#V>tde;p~IChoXZdU1<+-5-unm>wTOfNV6{L6OUk@|c}ddH|oHZ75XETJcP zQVZWE$L89fN7M{297wJS>78WE!&My#1Qrei zHD2db^)^~a?cw=p?(j=QAW2XhAp&GYL1zIWN0Z}3a?r0R7`{viL7z#E?O2v7m-n`D zB8DF$_h1vRd?uaY!)Q7|nh6z(R_r1if)53!7iL`v@7kQdgRiI|nb5IsVrN_|L3jc) zW$6PEuV^sIY^_|6srh49w9Wa(Q#s#Y!s|;$`qm(EDp2rStE!g_r}vPuN&Rok_=$+8UUK`10}saK`z+ zA4lRlb&Yvv{LsTgC|+(M-p6*(=1X4s!do^v3Jyus&X^nd>kyE}A#qYyxaQL`w!*2h}7)ayz2V~&01$!6r$4`qh+)K!Ad9k7wmrelKIF+~u}ZuEdlAZW`- z{yFxGWK?KZ*kEH~#>vFc&e06%ORvH;w3H9xQwo{7NG`N$}n7xW8|kuUm6 zI637^f4coD_(rPAz($A070fB&8>~D7s^nd*!!#5Os{jxSBmY%g>Ar{eQ!RfGbM)aj#o=>>vsicOV};(9L?ou5hIML8vc@@%r+4^Q z+H^4@=6?hxeOG02Vm~m9j1HtN;Zm)Aj;$^z1A<>f>MsAS!x#d?RIhiU;?hxB0Bf;- z>Zl$KcH|PH=>2eCf}rKwsqh`w^dlv1<3{lM#6bTXp-aud;vx(1O5(`C;BBQ0Zb~=d zxWz6w{X~i)GVg+t!B`EQC?(8jRGnJ{89nHTK!2=g?-SHrG|v^TP2$>`qcY1A_1F6g z{ngpoBAP)qXcU=4jc2`wY-SsEAef&i)NrahOmhcx4bAoQD$tpl{`u3{8XYsa@AAr+ zi>T;*BQ(M7yieMoN4)%_HH!L^Y8DBebgQT5w^^nPw96ZBACtuVXOtq8jUl3zeA1IG za9k_dF83*;%R>~Ny)t3oaO)q*#avlG)odCM*e_NQi;`|!_lg6QAq50h)R`ibO)+tU z3ZR%B_FtWyGuhkzDXw?u34!-Dy1GOMRT&0K1>hvfAm7%kr5e&((0MAfs zn)$-QuiRfU)^s{KsV^@E6G-Sng(AF3|0Ws?%lhL5doBtOlN~X}B6-EN8nguoTYP~5 zLcJDxtx-%1Y1@IWwczapE!FoLbP_%y`!6Lfw0stubB25?CN8N(usPV>JHb7m2EXuv z>FSL^48sciIhr%S+9{%8jw*ky20(0R4|m}6ztMEn>j@%LQe^I~tVFSq3qC%+r?UwH zb+QQqFNXW{?|4RP>f9@1+DS*USBUNSW>{4EE`= zj4v7$9J9b?opkYTbzwg}O_W1dKs>YJ8*Pq2~JxP1t>MJR9a@_M2DJCVEh@dj|R;>TxMNW_(@)7!^d zH=r~aZXNg3{Ek}vij@0>dv3XBXKPkG8m#-XlfONr1@g@wt(d3e$0~@ zpK+me&_~=f+Sg*-GvFlDJgO~$;aE=7eWytB2@$RAkU>C?sTRAt#Hda0vVURW1~1nj z4f?~+M;|_MLnF|cucyYLw_eL{RRH&aLE(V7-B3cXuKEp#rpSI9Vah0ttPi4G-;H`~7y$`2)Pm+jEWTQ@`@s;Enk&S?a*X z0EH_Mz~r-ky(5x;N0Ym5iIUpkUs7y#WU3sM?<=J3?hDxBXLHgzwU(TRd`S?l5Uft_ z_=F$p$EA<$`hhC^86q@h;M_Q};#(RA*cILtRacUPhiFV$!+aGtslY`!9p^oBGeavU zuvts>pyS|B@>6>ljLczCD=YfICyQpKsZ}fOAC`~;cYSJ|O3ZZ8(JT|aUcb(#2R}%S zD%5e;^S#l@+)9)SLJrH%*<5?3Y}NBN#o)*L9YD5!DN-+Q%@ENF-Fk-}o&bK&O?Qw7 z@l2RbdS^OR&y*%kz--;1%fWzh5ozqTt%q0c+3#=_ul*Qi?BfVKdNI<%6wC?S6$F?O zEYcFWE)xjvzi+gXk;Z7cBzf*bWByw=B`;JIJYdA`78^2u?!G0ft-hft;>~!GRRbk) z3|-$;Z4Rdoe&L4GZ5;ayeXQk*vxvqc0e6RoApf7Or$Wg_T?L_y-GSJ&oR=2c`P?{! zZ@J}u^fnC+Ht2u@y|~e}u1s(Y%u~zvQxPIE7Bq??&QzeVYk9@M8BO9Y|HL3y5)B`pS?Mma56~x*K2p z&6Frn(dq`B`N}5A*f!tu-X-A_-;eurOJ?0)FLk~W38X{#J%?yI1;i)hklgipo`Dr_ z4O&WKfm(bQNx)07s2X2chUG8M^7zM{51&_&#peafWr-4Rrec-FK@H5!@KB>3u5T-Gw|O46R(c9Jrh1HyAh-CCQHPEKTX7?7e4 ze_beBvM$u%vfI3v9LxVz&s~~~u<;3pk7AP0Hdt-)_~&ek%E+Qd zF2(;ZJBa@)JDRiqD?23rS9bWqTYg{PeEbs;uZ*}JNl5Mv&B&uFSu)6gMX%H$@-YnN z|4PqjpL(W`Sj57{qw0A?dYzv zmsJ}>Z2v%o8pBhT6$X2? zJl7cw$|$Prm0#4v>7ImMXCsg-kVE`uc`Nh2L`sfyqMH-6@A22S3=GvKRNGK=_|RXS z`jeblh3x6oqm1K|N=S+S%Ae@d{Eox+S9lOt1YlLkaW{7bZ2KZtYYAaQ;BnI_h6jiD zsKLY%%0%mZ;6PrwC*hzp#vNj4H_?FE0xujpoa5PqOU^Vqc*-sCUW=I>Pv7v<4$|1n z>2DD9$_E=Wr5S|;(A*cf$elK8MpXGd)6w7+j0Z4N4IMmIyFUO=InhQ%gQCk@RI;t9 z|46xI-dF@$5E#yLsfG`3n+19dkd-)*_34(kjCy)N@a+;$9Ag>x9$C0>Pn86gDg6Pa zb;O2cLf`khVq7L6b%u=Bz+rhLq5rD?zUBJEybJ`5E>#c6;VbvA7Qs&!Ckd3MWsM|> zKw5ptv~U_6p!D1aQ(NgxyAKVbA{5p+FnrY?e%alYIP3G=0PECimq-iEGm2N8Ad15( z|LD3ip#S|MWq={z960h>dY4dW8rIVaj$!$^mAUn-6SdR!^SGAJM!BDLnp-ue`^LAJsft=~#&X5v6@(=&dNMb_V`C-KeSu-TCL?Ov~cFX;itHPd$d| zcvsJLa76C7uf-Q~is2wqA(?WVHHm(jF95n>f9r2^-#>eYD!?EMm4YJA28Q zUX7GV0qG3A0(ukuAPh3jUB$eq+CuF%dO13x#rAUDd{g5o02hEmvrl+22yYYdj-2=_ z>xl>F*J`&H5?++vcKnQzg8%kLgH0Yz7@Y*;bwgwDxjcQS@utPO%})|?NOItJ58{>V zrql&qLLV7BJpy#FC{p<6_6Ez9J>a|nuUszA!8J_^KLnKYuN?l3h|T@aj3;Fa4bC2H zjJd+{KjftlQGf~F%iI&3Ur41|&?f0rA^y~cTQw(AjB)&U?yVFU0Mos<=`uY#(3PFq zT~=F3%%4z%V(T+q!%^g4SlzBH=ZpVNSGu_M%RA~3EHr)EYIn4dJI8O3Vv603<72U; z&E7S-nwdkN#<05%r4y)m=Vj@soXL*--Tk&?4{<)9{Hqzhxb^rF!^go|3 zMfOOR*@@#FHpatmyCPe+yTgUuf7Q@wZh?1$Tiu-1|H8zQvi;PgK8kxcE6<2^!h$&E zJPKv|K{z;`PKA%2R_kX*z-Zl^zF4)2&e2SVAcWDn`{R5T z`{T*KM6Bbtv6(-%$}bPXAwrorTbga#=tO>OyUDaeCZ9i(Js~+ZBm1U`v4;=xCJIZ5 ztyvc3oMm>8J=H0h36&+y73xFZ+aGB=o!+}3i-iwhoTd_wRYt0uWSs;e-g0q__sxuK z53A;i(4K@Ki5hD@AQQg$n|NWJ@&QcY%v2^ZwqsRmQqaRb*g`&7Vou!6&skqw>6=w zO6!dFBY(_1Nxb%&qk7Tnr~795LYv$wI!$fjc4m2! z`{jE)kAcPAB2)r|{YAlncfeAYcdS%|L z2Rr#d@&ye-SJaOZm0aIfj0r$K4A21k-^jW`l;s12e}7@O1R_Nm z_URAdv~$~!%OB4~p+59AEjJ11pE7!?m=PD%8?ZOgNK&bm~J#ZPJhLoD1$Obi&?sg`()q|H|&ZQ*1$T zO^U_;*QG}##!i3gDOw;(BYV?V9g-yqDF;J}7fd4l$z5RvhIzNv{kH?pXJ*Y#}mQ~yS*=^qi7 z0vNsF=&MFE7xn^V(b!P!27Gr3ZzK7+P5)IUJe4$cd1Zhx@C?tSkQu>Fdjd#IC+S6(0 zQ<9|gO}c$CtgTB(-XqS*iSp8JPAQvRL5C8u{l2W{B}kqW0XicwD0-J9nRYTA+;3{> z-3qyzKgBPt2vXGjrFJYp{I7-JT~EWlkIEv?g8N#IeXd;+6o|Hf%pa5+3MB2m%#_K! zi6^0bHL~wf6W$clCN)I3v>n$}okf^WIbEfEj2aY0{fcB$@Xf$ZqB?q$kuA*}p#_}v zmjO()nmO)*OQHVd&rF16ZAk;`C3h&Cv2A~z*e;CGJ37+mIr`tVbX_(w062^;`>)&@ z#q_wi>5G+;cQ7@-wcJ|k+HL$GTxhFYz5YhaN$Ugs0D;f(MOU3k&qQJq0fTA|?6Dsf zrsO>9z#f$lg7?IO!Ul{p)n%+4SLtQpNz@bB8=p4AlPCB9p8JC78QY&eBY@yYLMBlu%_w(`ClmC(a`6H6 z;{9l+u)h1}Ox~CO5qH#07A(Xba!}7<*#%AcMxoOjQLeH5NIfE-Ltj?u7Ldu&CUsI& zWJw;g!oi5!1z#qAfG*P>ZO^-zCg*y{&ERccP%3Tfbe<~gg#7-Zn2mQvyRnF*Nq+^P zC!>{x{o{KS!yZ&9xK|*>n8S2e@E&SZ(K8{plAQ^oCGM}g=k$Fi3=hOW8a8%f0DjPL zh-<}~9?^YxVtr%CWNAH|8R|-JaUzvt*z)`Zx<769dBC0BZ|4te!J-49E`$7)WUjdd zjt!t`8vMpD=Ik$rG!YhzUs8071UF4I5rubNtwzDu7;Jz6pL1VAX7Jr7W`Wq8)b`Hg zMt{Yu2OoE!Yz@a6b@qb`Zu6J~(4d$>C`n=Y_p>jkO*DGnLhIT{1q56E4BH~6Z@gAg znCiPZvYC@HPrl4LMq$M}0tVX-Au!O^Ii}DulM`?3J`Ea_J^wXM^?pb>Vd5-kbX@sa zblNd+mt$fLjahQr0B;aU-A1PXDW3e$0~h8tz5PXC@Xg)pF&9B;uu@|AN^6|P+%<(A^JoOjvW%wATn zeUua|)_Q#?kX`B)9oDU-P>f@u9z$xdwv(xMK}UxaN0Ku&`Mh+g?O>zf z^OG?kt!AOirV%_gI}`A4@wQ739-x0PTR&-G+*#H$CP;o9hSftCrS(0Zx(zCV7&+%3 z>ehk#!{}EuR-|N^{4^TqDaKnvs^_i9(ZE9(P;zu}Q(KtMm@Zgn97e0z8L``N{}ET@ z%jqVJR5`5At?VHyC1Y5eFqeu@_BTW6Z!;6!aY>a$^vE!1P&p&GkiGobA72G2F`m(c z4|W91XkG|<{CVyVX-El#OpfPB8ovKtS>EOHEY&S_p zGpVLe3u+F{Jp?4@l62@f#T@;W(mT=UqV(RgYadf(LKPes$YeE})JGWR41*{$bfJe( zQPA92QzDZ;*_0wH13eiXOZU10PzWIuGYbtd6G&5lTWSAFF{i1)pr^wfC2>TUlB$%( zeL&~%w2FHaTbwn^!vdjY8n0v%0e+lIeH#PPA;+NeQ~6UgJ0i5#%zmEAGNC zy)0!so2|Qb?)|vK>4dDy8)kNUe!`Q2e{Z#DM!HtspAjdDvPT>dRzjyE1(ODMf2TKD+g1V|&t}G%Sic zAv8%1Ec$nlpn)Uox@b8|hE`1(dp95tWO@{n$6osWJB~(}3|$4n(Mmg}CzA`KW5lUr zwUp=gJFx5nP>rcav^<~+M{6_`!(J%M30h37BqsK`v&clW`JFg)HT_raoJ5z%{m~%@ zIAW{$Ot&X*b5ph1I7TI%w8)Qan=B!|#FG{%i0)+HJMIqA$Yz(;{;=-u=vkv}U+$F~=X4_^I>-?DYY3(zSHkfRe69F( z5m|H}Bykj_^dQB{W$(H~I6<+sm8lx^)mis1=oIKXW?n{*RtuI_Wp( z@b*s@`vY&nO!W^(9gBbOi;ig(#jc}1dsGZKmREfa$Gnqr^On9q@^9m*+3$=YVojQ9 z_LBE=M5on=fnXLMTzY?@Gw1J}PcwX`POq>pS;48T#nafc1!WVp{L4@$l^R@Mtj^+A zU+1?slIYCGy&9tpGLh^_7ZFn>#!_OAX%k@^R(F=Ez=6}V@2*OcMl6w9FE-}`XmI#oy1?Lu#P@|a@!Ph!WF{Yw0v^GYt>(n z{yF(QPS{O~a88w*2Iah|gwQ<42gk^PaVF>Z?x>ka=-znnb1aM2KG1Qo07x-@PEhk{0BUqB%F)x02$KVE#{_)K?qlR$>Ug)OU zEB_KPMF6*x0{n%X2%2dV?sh-nk0}5e>7Xo@0p~7fU z-9jD`cH+-$j5}~wDkGT}2i2P$MWQRg;z+(Sp~$D_Cc*zU>s{JNZK(~<9TJ87()W|c zbr*jyR=hYDt0z6>bu#1s)S1ImH~hfC(YYVS#aiMR^6Q;GcAi{V*1jm2+{^B$?t|!O zoT-SAz3`NfFD3UZ$&%99ybS#XiY2M8(ZtAtGp zs*YtUV5qx1#Yp^g;-T!a5kMW|M*NWNf|VfWvheI#;D_HxwQ-AHW}dlT>TVw8Eos+8)te+w_r2VTHt>{E4e2N~uj6Gau9) z?_*Cra%~!m1lQ+SF)VC=5TUypLlr}muC=ijk3Fj;S1%Aff;nz`XR@>SaBczgDl=;Z z8gQIlQls#-rG0BYn8eI(lu#OghkuI%>>jNw(zOKOmbd3#{&?&CWEG<}d1p^S(h60r zGuAn{&{N7JB~%cU6@3Qojdav&XXsYK%|i*t1cK#xQuO*d{h@{Q{d}2r75cGPy+LGX zGbP84`dmg-(|rs1^fcU`XMoz#hPJ>c!)mCv$->a|Z@g-h{?=WQs1iT?f|BsmC!4Hf zVlgXY<0+m-&PLN+NB^q)`+op;K#0F0_^_dZjkQ{(U=|G*o@zer8~MCR-G2Dae0&;@ zCZml`yLpw$8h5(X82q67)uq6uEUJED#6EnYr6T%LRPmT%S6;r#C~rthhjGyIN)%ZE zz4Q+1Zf~D1)M)eOCE;y2Li{u$A1}HOE?Nu1BE)O`Mdc?<5E&_hTwVBbU2j&vtMLUT zW5wYa!U*5iqi{bQ43TxTgYk>S!mI@b!Ji+Im3L_)`&t>F z+AJkMi=%qt`2^yEA063C$2Ar_2-xJKM%BzM|0sERgEgLR_=>~@HmL`YYb@i+1qyb9iP~%?Q}cuEq9j8_HbQ`e{7g|xTMlEt8vGj z&0S|4s*Wdf+wsTocKQazTnHE7ZP&AB-Ebdx6EV;v2j zR0uzP3N`TF1FgDTJ`i1QP@9HxV@pO}UoiGo|Ay7OsNGxa8O;uVgkQlg!@=YxK1_w$ z71|HZYSg@jOZj5Y7qy+!d3{RCst%&Aap)>SswwoIzW@}1iqcvYH7@;`TX5H8o-)5F{wX! zm)jt+YthP~DytWMPu%YM-3ao$3MKb|C#XX3Eyp_J>eOA((@6&}{IJdyZu;V4YTKA7 z_8!>SWDGA==h%j0V0Q@Yrs69qgvvq{TK6`E=9jwLz?o9jAj?upip2fY~~{r`RXm@=Uz9h2c8>hWCQY65Yq)`~T%(z@Xx0sPs1}8L;dA&RzM*&TbXu=?BdlDu$r&H?UI!76 zAPAg;9aC?HQuG7kH_# zF$|7sfMw10i}~-dTKG59gTnxKsb{hSG~WII$iTH7*M0Gq2AG8O%cQ zLw+*v1!wXh=KdD7~5r{%fXZEQ z#>ves4#jH~lY@_gZW%uAws-viRu!tp7!P?Bd`kZr9~}}M1)ebfi@wPWY}gxE;@YE= zw;(nI2dmL*r|tOBzSWnU1dlgA@bsGwuiklqH5`Koh=LPfO_Z%K!&_pGoyM|sgX|IDbFay<34~FUsMNhb)(0C7&|ZB3-}US zvmAC?3!3r}R|$W|({9%rnb0l0)ySR~4wNhofw1~l-EsB1r8hUI;lU%kH8!X&a~d-( zdNI(fvr>)l@rL-~?KTTzb31sRUw0Z`+Qz?lV-tj5a?rRxe1H^)gA>^P8TV4<2e!Wl zD0;;Z{W|afpHxKTMix;ho&-u`llewO%jAOy07?$ARPeM!%%7r1ERnoowjO*Sm6Sno zb*Uf~p@IRgIUjsm{|`PfB02`#VCF}ClV^BcT>PEuYV_6@&&M}*T-D^N3A0D=tzGu7 zKKO$poPwed2?v33eH2~QNIZI%1|@`Kf>cL;oo@DqPXJptSt3qsB}byFWTbV zBb)H$J7KZA_fH4UQ2XeQ!%Mg4x?_Xdt?%BnpI)cdI9<~wAKK{f!azt*6^2LfQ4zwhnu-%QM%);4W28`msXyYv=$quj6bCE(6IVyHO(Wri zT`5v$IuwVhlTk>fyZ6A#VJeY}n5?auw z@W>eAQ<&SM%Bo=tUd_>I0_z)|wQlnd@b%QeBZd#!*4dSF*Nzz`x*7g%=u;u2LW;Gj zT&V`hR^IJv)^B}v)wXOWN3McHQ9s~H>A>YZ>6UOjewc|bR|G_hGcqmhA}4WqmVzrI{wN zk8t}IzQTBIgkr;((4K=d8=%;R`k3WW-Vfm=ZA~es>?p8V!IQkogW9Wd*v< zinO95xSnLiBUVX%=X+mW$JfJ)&RaVlUzxuPe=Qo0Z-hsDftFX}p;$abLSUtz;0H~j z#VKhFUWcFk{0??7H&+KW@t)#Xi966e2s)k)6yFzzf%LAk7QD3QS&uv{Cb-zE>NHe2 zbsE#zPSVtv%-Ee!ye38|u4Kf=5MxYMCmFpW^J%+?V$nt0KW)}^vDPo~!x`ptc+QkC z(5QPf)fI=7+#*kdB8x>u20bnE=wd9s9#FL@yO`<4D}{-SXDytYO|0ogEC8$N3vF(Z zqO3>)hsPZE7=LVvYvChjz_zC8junLX4WeHj8f&`OWwvk$F{rQc5uZzJm$hgK6#hu^ zsb?7k(TKj_B-&9{jThl-i4EZmq>+Ec8#clo`0Q1PtWaUYg{2kO#idFlXZ?hHMrvZ|g98@?sO-gC?1mG6D%g^T;u=_2{Nv7XoPrCDweYj=2cziSg6+>YPe5w>yz_HdiN zDD&u8M|{igF;v-m7OZ=Dc)wnEY@fgPBfQ>w5?(WAS<>Q8Gxiw{FC4wH=9tvghRMrt z&fE=8!)*QVo8z0Xak6x`8sS+SGg%>faWn~9mj3f%h}lUE;ab3;m*5bNKUKnaD-~Vq zV0Z#ka}~XFXX9L)1yg}%a}BNzl8-LGfY8zXSw<@EAWAnT-@TIg=O89Nf)HV~cSi4X z<6Qhs>}`Ik3VsiMTxPgo!7`ib*LoZPRj&Yl;vVEZ9WNiTp>y_tgFh?AgmEhTOE_M- z?lye>)M^iXpZqYe@vxC zz9^EugH4A$ty4!(?rsW26<9=!zj$1^m;ChWjx z&K|+%cYvbb#X;Tnbs2b}Zq<9~5 zoWyZpOCr~WM0fp2Pf@~juOw+jvBV--+{ohM%aAWlZ#o2k770v>E&gWV9zHkS+hxj? z-qXkW`CNq9{YSuMl$X!D1>IKFarJ(NS06qJN)L~dTLxSm@8o_Enk;+c>A7sd>X#mF ztGwrf)tbS#rZ}sELA`e2mvPgDr5ir$)UI=$j97`M3MUpVKHh3WmpR+meTQdFUA|}5 zw6(N8W)a?xsB}_&5D7U+Fa88eZzCd&GJl&uW2y%8ngmyJqLI`_GPc1>cH^IuSO`_j zn)w{+ly%6!uL$&gpjP`B8lUcaYr3;j)y3WV-<_q=R9~vnLdHux1V0l#2-#DOt41${ z(a=RRY~l_mc_tfTcjDZB7Y29R-+AE0K3xuUm*xb0jgN^9^+DFu`}f~gR1dB|^@njQ z+>*w{8y+-f`X)^j?P>8SZ6Wrw%Gtb%8H!6SsZl*~%6u*a*PfoeBiU4**Tstm1aR%C zVYPSE{@4`KZP%y-8){rz7U_r+vf8+cY0YO$Ab*pe7S#aJu0bq43D?EdY1@U8ib>*V>n)@5#N_m(L^H1UZr z(ZOa7{=H-?{%vMpP=;YL&WDDN<6Wn z2r6a1GdECtO^S|orMsp;I=V-x(du~)z&t-7wmjdwG4n3sPd&Z7fj?fisjJ&cVd3H{ zO?99w=+y!7jVuM~B*I$Kl>ne8q`p~Ok z!)`qj8q&LZ2o1i0I6hT`AW_mGY-uXzAR&i2!`mQx5mDr1o8qdSRo-&k2ohK1ZqXFIyi9oqd~0KO7*6++kU6}owO9iK5_ zvajNr1@lZ@pWSyyl_;?^Yt*9YOLpcA9rt6!x_1e6_pbF3mdYifyc2$`mr*_=Bt8{q z%(&{21s)>d#*e~1?!I`ZC5d@j@iW_8rduSgKbrr_33dt&|I#(EHAI8v$}UL=AbxOpkNMcYdqJ{q0aWfGv?BwP5!-X7yi+xQtMtV zEDA??{UY2ayjl@nixFOb(YuvC;UsR3sxERM4^E;i1Z$=rqIqn@No*rR&t4JDRpwXFJo=M7 zwi8VBr31RctLzVJm}z=E39p47dYq*G_2Jj^50-JQrM)m3n|!lhgYl$!B(BiKlyV+> z@|B^@2a?jzhU7bq- zL7vTKK3SGDuO-+N`@BB)RgCro*w0vc&)Qb=bAffmy5nZYg)hP*@O_+3>h*l_MA!>C zSr4~G1Xj8AquTLv`rt`>*FE#m_>UB>GxM1=7|)c2xSjYE?(l3ezW#MO%SN_MNFJrM zf1g%)U>RWWk{>v1&Tpc3{zjyqt%aLJK>c+%KpAji9oi(o3}6ae%{pY=15|5 zZH*kaOO;1jSTwN-o2lH+89BB)#bV4DnoHtcp;&P_-WC$?6~*G@c-`c9B`o7{b`&cq z$E%BTt%j<;5Udmm20gV+wGmQUnbwDqIA+k%ZAtMH!_p7cP?O{Q(+upN@i_zEih$50 zd^a5Q{h2`F0TcKc?tG@d$mcT-`7AtOo#776yDC}Z z`@tVYIus+VU@7(VeO#w_eY~5rjur1FU2I727w7bUT)NDTp8g}{+N3+hb#CrMS}Z@a zvL~p=PyC$nZrZ1kVeW2ynk>FBs~>*dX$6E__VMlZWyMN-=c2D~))((qNjtaiZzoKg z0er{P+fUVN(yYOS?H4;>VcLYec89j_Nlt&e9{e_K1)p{6@bj&k@YD5@5A|q#f!n7_ zL##9|UQvVcp2s{Hz0omVaG5#2kuLDcAjyo_rQHkoi#IWLEizF z2KGJLec(m$FFpH`q&-a2di|MNZ(#wL)qQs~c6Od~zkmOoNzTsm9wxWh=-}8tv+Wuu zhd$7^_nH3v&-9l59-ZE%-IOWq+DxaswPrSRL)q=J?1qL3wqfjcYyggir$QDtk^77o z@}MD)Gnx62#SX<42(k>l=KU0XkxKMv50Yjk#C&UXEb|aQ!7qvwh2h}G3_JF|^Y6~D zAqHH?znHu%K+IGjOB$PuAT*GfM!ZIv*@&-_=tg8S!@wWBBO~z;{1j*Z?)3XLHx*yR z@5sN4A`P)_@3Diq>D(}+Bz5bF7SsB6VFxRYP^^|ErW``C+LoAgd5YCBV^EW+!97y! zC0ISuZ(N~R4T3$PSbZ5AMe<$F4JTNFj16TfaGMp`1Z!Z%&~ezySLACDEK$Z*5iEdW z4J8Z#`l%Soyi=7zYUyoiddZ>kXMpRzkwa_t(F7=lW)B75<{g?I?{=KVU$3afET(HS z2+S{k$1{t4ZPTVCjjY+*S*t?XjSp-r*CFY6&*LP|jU@h3I^Jz5RwXzn^vqE5OzT~z zVTSho-B*PKJ#&}#?P54LoR0Te(J@dfh7oa*PwtJX6v0y|o(h=agdc7Jjo*^uEkU4d zVJNP~b^{S1)-nfCY&fn4y@AHUcSH;U`k=67o=g0QCr*Dj4l(#4!M+K$ls*Ypu#|pV zO1~}RZ^o568P`*shI19n;p)o&3fI$c8jnw-dftxYCGyWoz6?ye>qQ_&%-?7f!?**K zMn{^aBh8!Q{CyeMQ=EoV+5pMiJ?4Umrnr!jTokI_;qI})hI=$U3Fl_h^j&DWE^v<8 zmuJ`pFt|(OBA(%ux;Sxf0AWR$j?(AebZ+^8+0S(2s!@u4nTu4eA>1hD5HIC_f}2b8 ze?ih6kkT=ttPY|F>~Y0fBrXeTAzmlW@0nlt2fo5E9Q+1r?E8R8Ryi}t!a^~A0}?-3 ziXRUoF4;MT2Jj5O1#2iql3>*XCWC1wtW`M+VLwC(0}-P3x*30#FHU`abFYLcim^+dz)t)bf3w5i$X6HOP3ecr=}ozcn$4%=j*DQogJE3}?oF;ANgu{8 z#dW{|>}ZK-dHmX-f$O#ir(;J6;@Mc~?}nTp{;llA!1db~FRwwxADL@+COTYMGg;3ed9 z6^eoqT7gn(D?iY1zJubNSdt)0N+QhcZz?=1!uU1?yQYkH5#dGC;fycXGCsm{{7ra9 z(}IFo$~R*-nfpw>S&`g3Mc7T^n`)HyIW&%+t=La#i@iUQ6S$FN0l2qtZ!M$8-LJu9 zCY%h3VEj0^gTqh3ZFsm7>)_sL9E9}m@9VajF0|6&R;5;X?)dt)h@gD|bAwFai(40v-q>4OdKcy9YhvS1URo zH*q(E%wfcVEA{V+;Tdt8mHITYh2VRFUL9? z_cNQMmWk*(jM$h!^p$_X-ybS#Loz>!UrMmC1iK~KJGMVRh#Nz&aprjF z12p3I@uLVfo?z!`yfD!7gD8I!F-dpjCaZXGEepA{oDTHg(3424vduhJV(8zGp5$y}f zEGnLx9-8|$3}Z1&Tvz00$@d7z&6_*XmpRD3v9_#VdCE*0si8!K-J28<1{SP)JyWq@VR z1H*8%Y^%96g^ltQot;Q8uEJ_20z$yac*q|2=hE0r!+fT{Fk0MqWQQsiNOxv{MxhT9 z{b*y@AUB2RWy_3ij{DYyS$O3ns1S3vDU3?M9ijOooE^swh1LHYK6>=4%lYZf5 zh|2pYWGm|P6^Oi-8F%6e)SvJvJWy&?-lVKL6irWBBn#(EY;h-Pv&G59nUUs(`r?e_ z4C3s>=`~u@x|&9(*D2*|@i~&`qXz>A-Ur?4RiJw?aL@z%Xw_eo;GS6Z=B-HNYi=XA>K;Lp@D-@$zK<-sn_n~K+1fio%)fUZT7SvV>7L_FIP=hIC;`kS z&%oKlooN+5hw)~gz}ZmluGd)zTsHA;e-0biAzf0o40N!IAJV+j{y^aLdvYf(``pcc zCFo!Xp*92pR<6X4@UZ*$@G$&vC0Gr51iDpsA??bbNBH5YTX@Me)^!=E7x%k5vSqJE zb6Pi{8gZj@hSNUJd43dwEX=CcorA4Rz2W4hgd!EA&mrcCdjRTGy-l6%L zp7w4l$9LEtfDIvsfSI`LQ}_RCq4BT9{jQB@(Wlwm<`a(hP91r*-(vjhPo0fK@rCPb ztVw5G%sML`0QMJsEvR&Bz+w4vs%jsX6K$Q)ADXlu?5x?^Wm#~UiIH{H>ez@W|GTD6 z>ehYo3usq0KCY%X_b#UJR|e91favK`toX73#E>r#-37Hu9m^R8)t}LS`w$4*-hW1Y z{L+w``NWxN==>y8;Scw55c5R%$yf>ga1RGF>4OIgiwRva0`yd>RpN}7v;~lf>R47B zw#SGoezGStDZHyvC)T;>M@_r_;r+J{hH#qUKM4ct3ztU^cbcRsRezSfvPk&`ZBuOQ z)(jmnKr=}lQ)8^HReHj6Ux!T!f0-4+mdFm@uWRwxl;B7!TgR-1=~=+^%!)6PSi`|C zXisKOy7vf?r2N;YUDhBEIyz9w|4agqR>s&x{o%SR&h`dyF(N;x;9@A1@x+yB==vms z-O+z$CX{j!IT*ZYz`??ku1oVxeBF z)K`;8ikSfG$8Db;jE^^C(x7to%3;@6;xng~k9(ZEyFcu8#rORMS0R$A|FjY}sbbsy;5u%R zn~U3xafSl}MGcTEgc&oUZZ|tuyGC_~i@9$YGic0uQQVf|ADmu)SVFqA{&A1!LLC){ zY-rAw`H8yVr1fWYwC?F>iDya_%#96LH{Y*3G=n0VY5eSyVPO}h#7+&`uJHdeOa8!q z=!L&e`jRth$QV(#i*xDRQ9U$$@#VOrw-noP7#O`e08aBMuPd<8b-$824 zviO1FTu7118z#+LU3F`4KT) z>xXm!4454FOk1b!4({{c&v;|CfB57M1UtC2?ALpWi-SwEe!XWZ7IvKSU@-o0 ztK&`l862QO#{tWh4d~c+)he3LS`INY)R&}vH4SMA8jDf++MVBaCdOB@Qnf4@S6OA% zf;PoHny z99uMRF_B*&wBagjPtH8QU5H{ZRh=L7twcT>be%1wCru8tAYU5GeAxIK-@ zWPWq19Hc_)@WZ|P@xwKuJSyT=3ULp$w78lMTJzeZn?gFDP-%Jz1c?qf@zksb>vchq zbQ>_%w6f_0#PS6N^HM_BxH!dX{NAbcu$~j`?E931^rD07dfB&~P?Z_#@39-_P0ht0 zL%`i-(y)w;4%X3)LjW(28dBH8Ejued-ob6PVb0eN_@qOl>UeWd#}r%pWa7K3%WB0t zXU*(YtI>$S>)u_qkElB?-Gv)|ZO*wi;Prj@c&24~l@=8}E_-*~HKO|wKfdy+wj<8> z!uRto)$Sc~-Yqn!xB8k6g zy|9uRl6WLU8q6q6^5T_*fYjHsRvW(6_bKY)5gXhR95yWdHNwteCw{+lnd+0M%#gH#5CY4+|w49X6HC}e2QSxR# z+en7J(c@et>u38qY;D6fys!cg6lqb)HtZ!{b@wj*&>=wOcMi&*AHKVTlhRo~e%P>m zy}X?H@?#VulN*CAR0z`j)Rx8XFoTyT7!hvsIU8zT_9v@`+cEBYqPy?F>%-;(TG+El z_r`Rda0^dVR#M&&SD6(B?$j+6mUGIVeJW(=6feT_4l_*^hJM{KzQW#QuUyB1p+~5p z2LjXrpH z5NjVS&d%NRK~xc?-6b+rp{mMLT@8{(nR;+_4T4}LZHwv2psXD0;kn)j#aB)Km<+09 z{JToLoA(9*Us^uxTQXxaE_bt=op+GoV*GUcn2qkSY@)Eq)w@ckXPE#~R)Wvn{w*6l zZ}+?{##2||r}qc6N@_p$p9ziTl@}@$jlIkqY6URn`Gi%7L9>a>zS8@p)za(>#8=Z` zHgk>q9V3L}+=FoLJubx|4jITlXuxb?HVTbIot((N=enwFNdFTipM4e=7aMEQ{fGvZ zZnTR1fLJ){k#=nIS`W|Mm1BoGENR@^<8di~WnFfry7YMMsfyj?*kOT#CTL_#Y7c95 zHTM02IZMYl*!o7R7S@jS958TFcO9M+hI(R0{n z{}5wxre=^RXEM08aO2tf;%kyxzjR2}`g%TL_@CW_dpp^AHu7lJqsL-b&*puy7H~+> zNcd4@NY7WBj0nFOQfV{8&)>Ii@~r(k5ui1s+zUv#J;YKo(p#iToqPbWxZ=TcOv@KH z^m-`$c;9u$7m(Vh>uL|r_T3VPdA|t7U)lE%^7;el&TUL=vwgwh9T|yhuOg|RV?QW@ zNI9J7+oM!=I&&UwG2%zqZmHdS z&gIbN+P%Rg?>D#&slr$r*3a6#f7axEdud*@9J@(5T#*kgiMjXIno8lu^QNAK$$WcL z@44*rl(YXt*a#)TwR_*%LxLYf8S#2}qUqWuV=XCBz=y>jN8#MOnu_t0DpYXpw~5K> zG+x}Fe8VC3l6t!N%we7M?rog>?ycy9lInkD!q@TB{ifS_-WXXn)uXO!m|Mjv)^;ki z->{#pwm*5%A}8g3g{nfSM9TYkvJ(A)@GhNwm;YX`BrvIeGi~Z~mfQDCK=wuJ7j|js zM9ciFLRSplc{t2#&eg0T{WMlSUpH#;l`cIOdbp+c>@nNbBbDhkyGv-XI&He1snSU> zuKuUbfEs)9z8pKuG+8@)((b)u=C380i(?ZmTir+=Td;qQEl}py7ax*si*4+=aJ668 zubEC{Y%z^b5mpf`%T3Naw?pX0WVY?mpOkAghnNxS$$uZ`tls!_L!*k7S*}ru_ynGB zDm6-OMAL}qM%Aj8u8J7rVP*tLKOWgq?Ifk=^*XaTw4elu-*$LET3^i1N@G>0nl;pn ztIcwa;MlO38nCh51A!t`>}(?xQcKPcD2Oo5t7m~gGhSwKG>k=-(IL25IPHYD{YW>su!)*@1W-`YAh zYuS8~SbrSaZmzyIz37>Y8%UcvOla94cMI!4M2-q$ga`KF$gmyb-DEFGsrnW(rkdxWOv6d#T z-TRMzcEQUBXKxD@E!?mkPF5{u5DV9RiDcoJp^BkagGH%Ky*9gM;~Q^v(fN%UMt2G+kuuXM zL#)rusV#J8oCmZKB)wWkWL}T(O7Gq`4}{$~)78@Pl2A-je8N6g?~%i_20g45an-kg zTd)WIusi!AeBf6%9BO4ha?RxaPVQe1?>f%Ea~xK)Tu{7SVCh%W)-0doG_hK_#@;%g z`R%5ym{0S4$$nw$sJ<6GOWlon7fI&}#31J9oo$w<>94I~vrhRDU2=cMB|0Y6?-Z#&ZfvK9uD}Va%bjMrIjfI&1=Op?xf{N)_IU$( zi~Y_5!bfk34^2FXFZPSCm?#%`F+DkK<H$gTM%%DP)OshDDcFSP|9BP?1NFY=J&TUU+a8VDAEfI#Y~X>Q!1nA*XaGeZ5^CXX z_%6PIH(q*p=h~e+w=X}Xa`qtlK1p>!+LhBO;)7yXxVch|*Xbei)ddpx=-fZo^NLeh zY$j!RMtJe0WssL7b#!zk&h!+dM4P=CZOSR{IZ%!?dv8q z-rcTBt;Wf9IxlN_eMZMV&SZ_D*ODWmytk1ueoA(5BqU zw)==@7c=kg6YPir<*LtKG=Ml4*>0*|9~6pWrPU|PB>-2sRtx$# zX)Jl4F!NqV2d860+IDbqn0$Zus8i_Lg%Ncfd z8LgYou(NH$eok4`y60+VmFv9BmNObPnVHgYrmMgvY_xOek;>OQ`8i(a&CIx~;h?dm?#-JDM1uBqg=s|#kJY{;<{uN%zk>E)p+8~ZAwG#~mE zmK{hT#_Y)A+4vZKle!ZYAwVUVN6Z~ULtNisKo{pE?lLg?7*{7|a|3+*b;J2RJU!KA z<6gBc$Lp{UUfdisP;UNWr~oc4ci{}Nj?XYp*bC}`X5U^NX%c6^9p3A{UjG`vJmD8! z&$GHt;%P~|AXB{f7;&W-v@{O9$FG?u*SVk9b21QsAJ>pOr`##oWNp0J%aW-UhgbMR z%eYIi&_ah-#&Qjz)&@D7_Oh zb__3tC0r!IPMR@%PtXx8j9{no^CfA2(zK^7F_=fOGnRQMzR`To7RdJw#m>ptX;O}R z6gw|tBL#nsqu2!*J4rArie0qKmwCl(BG{$;c!XXD8t<|!7Y0vb+OabUc14c&6whQo zGfN3}RgULP_%l-MnvD6Aa=f9~bvf-|67M3#Zpc_a!O@iVri|?&@upMkmW(~dqqz)r zAi-|SdBl=(tYbS7?2a7o97&65yt^`X2T$cZDRxiBF5;z}Elqo0#$J z2=-9MzLK;ojrT~#F3EX3ma*>yi>7Ix$UGMl1~Zp9H-bHt<24cn!*_~3ld%`VQ06t~ zO|a)OR+eBDDfU99R~mm~Uowpd_K%E}KxNtIU`4Q(G8SdbV&B0ng1wS3#30W2n$vR$ zrgwh}8Lzun2O;+Q3fe`m>C);H6)7^R5B%bjrLhMPxhX+Ese~(po z-k#Aa?fl?l%U;$tt(!I)Y5&w6)JKkFyVx(-{|Xp8zqOEFwNv@($xRa$oIE?d&7Qss z)dvxf@_l9>5xNo7*Y1BCq}VaAZRqJt$JbU}8?~NkZQZ+LJGYiCr`TB6Z`5R(%_I9U z=X;+z>SDjJ&9MHCb`x$pG?C{ytueqN;1rJ1X4OY1u}B(FDIBjkyKO_DQ>Q{oCAsKCC#ms$lBf$$gGE-9Zu z)9Qma`>Bd=YrS@lw-^3!C}X~zO{oXhMYwC)ZfjPQ1Ky;f0;O zlWVo@os`&0EUP<_*9nu}Kr9`nxHF4|wO(v(FCm>BpgwrmFc`7MpM=kMTmtR)C9iyW zj6zlCzYkGh-RLuI95mZ|v`%wy1?Berw_WU~bm%m~$!_Z7tjx*Q*6lJ<=GfR~ZA=`#_%$^LR`}Z zwc<>7x4IKPzjBRC<34$DF+Rp(ctSX~9G)~*8?%+nZIGki4flfMW+6AI{S&qMM_>{JcHMZ7;?qynMCF-!JN&QaX((qPNMN# zWb6W-&#tDJYk_zRX<9cKyGi0LpqRUi-5}UD1{2If#-5P06KOn889Pkk?Vx#h<;Nq~ zewx-><~iKhkR8O7BUrrAH`j!r_Us@CC0Gf9ZJ=0?aUVMx9uTY~!8TJ&jf*ow*`5R| zW%SQINb~4~i^B4hc!OzLHyPVQ;tishyNvB7*bG%8QC2c`jHK;C<9W*1QW9?#&BH4{9>EsUwB8h> z=P+>VxR%P9{~FhMM&Q$4P&VR35s3G~CyH?Ez$F`8@!M?tj;2!_=34TD<#An0FT+_c zesFd+VnC^|=GrME{}|U*@M3K}4g18ue3$HOyy(agac!6F%ciOJ(sTBmAV#_g$W6yU zNM&$)l(kpuY+p9&(LUZCMu1Nio^ot}aK9G#QCnDt?aQnrX>HBpWV%Z!4wFY#!ml57 z+of}HELZeVi?X~g?u(!Ggbo+_=iRG54R4aS}-5^Gh5_V@r;IFH-5I_RTV@WNwFLd5;^BX zUp$R&tpA1^*Gk6*D-~%6ZtJZl25N=xh+Mr4evWOo-{G3Q_{qVTsiSC z{V7VAlSOQhP(P#9Kw+S>ef`$0dpbBf)N9qc zzhUQ}0_k=jt8w+}jk6APqd#lZX#7=Ct`ND58r8T{(#VlX@-IsXDMk6%h7$RNpi-zD zs)L%LcBr?dgbI<<|6N-DC)ssgQl#A4jFDSwN)pVR7Fuanr~j)QncmJ04O_SB?cnT~ zkdZbp_xJxM*7}tz*Efl_ewE4z|2Od#B53Lh+uQisI$pGG;+c~4UVc4Uk)R^`@2l+~ z#?!Lw+cLQPw3kfFci_Oc{ht=#e@&#q!Ly)fGKao>6Zg9CtN*YlZnu5yv0~toQ{AvEOH9PX{U1U0ZA|a#muw7QO07-z1M7{9Z+*sw*19 zXD}n|^`g+;Ue1=rBOUntifO8H^!5oor7!P_1Vl38W?HdRo;OA$wrx?lWU~6W*Nu_Y zlFC($jc>y5=U1PqTqU`p?V2MH8W-9`qBmL@sc4}>=5dOmMS!8UR)wxzBVptDi3&HB zijE&*i2BL%DK6lLH~x6x+*$AMw$(ed@1jzzyMBFL?H=6`mC+=U&Xc6$`7~NJo%j#T z2UQ}nE+`=;ux>|=?OBihl*K_XbhR6@isOoT~vv--MWokv!+bt%JEhR zj7NlR@DZibbKt3brA;!^r0L?|skYYp4lm7EV5eypTFF%r)LYm#c4&|1^;1iYYLxD3 zb=XBOy?-!4NP~XHR8bdLjTU;Hg&_QeU>GxWy>1|X5q%(SL&+!S?Ud$3hU5H2<8rI{ zq;)3e z4Hxgs6jtE(M_!O-*P|Jp*p&V?8uR8WBaPBnv1P8alz-k-{);g|RgYlJb4DYYZ{B`> zzOjbNAHJ>nMAx)+rV}&brD?U0{ob=fOQlth zroqpzX&k2~^7}3*iWZ5BTs5_Sda8|7hAe)sF`Ve5l5deCn96X8V7*n9sg6Rt)=iut z2!Jngz^wiS3J%xf_d-9X2M-+aXpzQVe!uatN}SWB=GHUS%~}2fuBA#OSbAOy6XwU? z!AA8kg0;?lg(AhgaI~T!ic}t_9!hpBef>6)k83fg?z{#WKFZ?(i;wOq)v@c-T_k<( zHes9L2}&jD+va{X@fs=27h(`6mOn_+UEZv_dF$T$*UNHo#Sh#Q`&nD3WN~$D+V>f| zes9T&6{3`co~>|JIAa_tmi_nqUydTZ-1>r1cxW6h)`Oxz{TW^pyYu1vIZ_e!)!Vi2 zHhBHr`)lj<>_f`mLil2MWK0svn)BrsN9o)Uc*7zieGgfo#Y!|(UM%F_P56++gJRKCRic}S=A#z+?o(sywn zKy)fZCbwR_JnSJ)uHw9~6*K}DW}tH(c;Jory)asnr!+jir*qXo(Fad%>0AQwt^Hj_ zJG(eF>6SH)yo1mTHw|Dr1*lN2lj0-ku3zMOvoFE=X5X7&jep$idjo&JGp$eG-jgTy z?%QXYu;%7X(PkGnzOXq%&xzS2mK>2c#}UN|?^{*&GCo$J5OJ|gO0tK{@L(f8i{~}- zAFMtyJW|ncaweH7T0A2V%1Q6YvL)EM;@v{T&$6fDJ@S&yrj<`7Go2Xc%qz95*rf%s z((#W!~L%Nt9;{YJlIcJ_4PsZZi?fB5*dPowrLi4fSQ@KpMShI@YZ~uD^YP$|y!?AU>K-JG ztvQWSt8~*U<%GC}!agkL^QL-y^|0K%P(wxSekF%LzT7#(zvIrVz#`@E8o6ssxs)cT=GVF>GcR-7=()XL1$1khg9xmu%Qfd1gG|yINsN zL-Q1!w6@Pv*cvuRD9FCfWca?9Ya-<4vh?0LW*mt+T0D=6Utx7ag|Z0-mkD-&Vk;$# z*7Y}17F)Tl#bSsV0H+nyT+k|^f$AicV%~is)L*3;)|Q>bPRbT`QGptI5a9}Q5Hitn zs_-9a*;dV`_4PpEv>2*`l8iNyltF1GsSxF@q_WNlgBr(7I?3Or(*EJ8y0y99uh31R z*m3U_Cf%gM?>94brbL_Y`5$Q8sR-@w>+@+_H=(pY&$mt5T<`0;LTLkhK}c<@vJvY^ zD;8cP&6NjEs5X}iVt!r0YHZ*Gg*7|bNroOfnWi}pq;c-UM#joxcr#Lw`Slc}-ENeeFjqvk*jkoR3wSu3t z&bA9{vJQ6dejp3jUHJ0;efZ*TVI4gu#rVy7xs(r>-@S-o<(CvqD#32rhd+$)^?wcZ z_mK=pUe1~Z>$)p`W2-Boddy%BGI%${?As4fyReXTpnLa&SxnRIh8|+Enh<$aKq=}p z1_O3l?$z?9Q#mPTGy#xTu?X?j+s;bV=pQ z52Nqq%Wvi@f$6@7>4fXth8;}D-NFpmbqm+IbdzyrlzW66MsrJeFZ|lgsHFCuX&h=j zg#2d6gO)s6dE`t`pxDqjpB5z9xlf0NTM?GEC83BXA)1p*6||@M<`91H!-e8%~9@tz2bdy ze@Z+WZm<>EO7sqjY?6O6jmwL?=m-ZIt);Vb1^yg+DK{JV;rLF4dc$n(TGXpQ%+@AF zjea3Eg;|xycdeVyxpP9@u2g37JF|a(UzQtrm%RR(5fu0w8p6E0525wfHoCwUcr$L} zzY+pq$bHLKSnuOu_|ZyQrVoT}FG@G)e|!^{9vJ&rESU9LzjSIX*{ieZZ8t}R>2`YHJZ6%<1k zuEg27sU3N%d1)I*qqmSbNLVstFMr5B`QH^PizN z{*EW%dC&<9c!GoU1(ZKwZ*I28udtO}Dt(h@isK_t5z6DE=5N>oC7~id^7}FQCeO$U zY>m#=O4WP1qEzrcq0;~9Y&1HChzFKzLyD6_y5}$c)`Oe)Q5+t)mmI>j@Y&#jdz-pA zFMignHMtzKck5Qm9i4iyzIg6>XqWpD&s_)YturoUH4|@TG$EivtH<93cI@HKBFJ`0*L7CkSD%bt+Ea_R_B$#H0yJxzQKMf6Q0$H~u}9 zgyg8izep{YQ?3QMtbdg9|5`Gp_5T~C!RY@`2s)OnV0>crL={0wp%+JA!3?pdft;Hg z{Y!RKl>l*Z;_Ht*`6d44#dkiv4XfLFjh#FV>Ot}L-4{<6zuRSckC~F!pM8*q@$dUaM8w}`+58?d-gtlyxI;W0Qt`Zhs z7vF+%Rm0=z);gJ8MeM`N6W$)HiXhG3IU`)G%=8*Fc{VT4|7W$JA^$7p8n(khA(LGS+b6S2 z4V&jOcETgJFB8c2HH;M=7{(&TBAq5bB`DY+@ycWc`)?Y;G$>jHCg7w>=Wrt^arsZ0 zY-kS5Gr}U=+KAgC%9{&9WRGUFOHN zHOJOV_f%UZih)|on48O?r?4?U{RQz4bC&MgfD0}r({V(EDu^Vsq+IkHG~}l^%L_>p zCP{SD3`xx0G-xTTH)KN#L1@oqw>LCq?gk5bn8;KVa}kbQU@9`_h1i@qOg~}FnKxoy zJo;w5W>r-cNvuOP)BrU{ZBa*3+ol#oyv8irl2V)Bs&qQm^oz!b*OFgBCf_d6oW#hM zg(Yab^b_)3ro%$%nGgRUQU~@=P@=XaaXsBiS7*l$2=s7fk znaV9^+b!Iyx-WlA#}2TZ^NEL8`4v zP`nMh0Zrev(gi%gdvN!g*YTQn={jI_v!UemB@p^!rKfHtKAroxFLMtcVS=v;_e55g z;FoyPjT?9pez{}`ctVdG*YT>$eXfJc;v0~135Sx{AB4_3nHi$oDPI%S_mDsNW?0w% zz?NQdN%+Cssdomd+-n+8I8)kD_}Os|GhLW2IM8}EeuL*+{3|=>q5gF{GY=gk9<=f( zIbH*x5icN1>&Ip#d?g5pl@^*FZ!m_&4Q9QBo=@TcqpFfpp|MvK4Oh)XV}WERQ4r9 zVPD=3=X^DcR;HfCOR&onc#W5zg*13K6}xkYGYydigwwXd3fy8VEQO_8aVjj|iqlAb zqCVLyl=Blu+G>VoYB6aX3XPO~*@V32IXihfw!bhk=PN`{m2zqY@1|gPAh|D9NiQiQ zmi)`zYRahvtROjwxi1&XN7uUpP2+lvJhCU5%K4E+ZFN_?@z)_`SNwY#H%KhjRCt4z zoih~+Qq3d(TtXG67AO-=ljZ|mAyV~KYn-3wg%vW}E#QR7J&CA(HXUdnQD} zJaZor0Z!B(#)|5o`JlWw;U{w^QPFUSa4L)~c_U{FI8mK)VoCmamg!WcbTJmG))_5Q za8i7Ca8iGf*9OJt8c@0>=4`!z*C`Sc85?kdj|x$aABE{8{v^UurmBLOKIjNv^Mvor z-3ELE{LT0*cQczIWstL3kx0ve=8`mtQW_x9bs*-^zd`P%XBcex1`QZ%HUmE9Zsrqd zCbay=j89aNDn=~70_b_r$|%wSHx+W=W(e^$REehhli7dWpR9pS%q@n;ni5bu81D>%+97y%JtL}z zcZ5KlAiOge>XuMEVY&;G@#gnW-s3R1MZO>r0lI2Drr51=7HKOWpQ1%B%xxhTK9;~c zL!fpL-bHBD15{7UX-5#$3BkKcz{he-cSsaT-ojyG29kfIn_-~+Nb8YE$^T??O@5<& z4cQJs))ff$OTrLi@G%Uu9#7)A(c7^60|};aQi&&{a|k)HjEdocMAS*+#2^t>F)ZVR zIA%3IBHYJG_+3V9Ecn4D#+7LfWuPJx4C}$Ab!>6`6gL#!2&?dMaA(}%0SqxlmRf+v z3ODdt{6=_<1MzSpDq3;@^ku>g15ZF3c*#_UN>GL=MPjFBpTG;Sr?3wn#wUbRB=+*` z+>KBI)cH81^t?WLXystH4DgR7hA2c2J>V4LNP0VX0ijLc_*# zH3|)z$PO$tY$-dX(6AGHNMT{1pz6e{tsbu*t|l+<`&*o_zg@#pIg@%znr_iv5?1@6dNS{+^*jTPv zp-ll0K)Q7t ze@Hiwb0{>7^f`rw&EXsi4O_v^Dm3i)zjUb!3GRRcM&w ze~^n4ms@CU(Q)pNO_p#70(&rQ!M*5sW!=|w33Jsge z*%TT^`kX?;X8nh-*@cJEKBus-xrMhC+UFD&M*5sW!$_Y~Xc*~p3Jp8VTtmr!50m>G zd5%cWu{=um{oLp(3QPX^BUW_tF#CS!v}7rT6Cw;HTEJOo0u>^CZ{yW3a5|hFb!LFQ z+m6#XUWM>a;R@c5KkUJ;7X#OJP0I|^JRUJUMg_JHGDh5^T%2xj}S2`yK&7SE?4K7y|ZFT@5wlrsO+H?5uN5Jq~`q1DjoK-qw|i_KceMaB`J?z+K+>zEqiq^Y$A@jLqFRV!@`N6IRzs zlisICh<{4T&$D;F(L0ocQ%do?(Ex9w;;P`ZllIf!zvfl{{Ju8&#{ z%vulMZo-}|q09#^??i;+hR$%Fdj*jLgF^5ZoFP2MTQ-awaf+d`CqsN5$2ufw!9{i zUJ|ZUZ^p^^5OlrOf$3W8C_ei<7cZMt+=*eM36ZsiAK+6HX5=KZ#ZQCN!CjH9v)miZ z8e+hkV>QYfKR&B=CJ23n4kgBCJc7*--^&q-!RCK@S6`O*+6AA+!&8Epn#>xX(jj;b z-qlS!L(=#{d6e=QDBZXluaz!aQ?g`}$e(j!MYk~ywC3|n+3~nJUR}*kk?39X-R)gC zr=f@6>b!+e6#7ps>Y+P?Kj2+(*ML-RrOzLk^JT3!{D2MFyCHN-ML%F2OBMTx6Y#6q z*YFBFo^2LB>+9sXprEn`!hv#_c(*#tk?su#J7i0EJVhQ}nC%>xO`Npl!I}*nI}*-9 zW2hAACmJ{bAOw3wuwFZR!MTy5rQ3OuJ7u`?ljU-Z!FPxmcNBhO%Hwq^&SQuICjjao8;D{vr9?Oh>(_{cOQmL3^pP>&3ggF zyik1-`gI)DaDK;g6`&kQ04tBu3oTrez~qWZKh- zmTWk*1b0Yuht7}!Rg3w3-49;?&&S1Zhv9e=1JLEz3s=wCm+*AujfoTSIehmd{!}CP zq9gaq@SSr%I&JYmTE?a1oklC=4RMD$h`P<2iYdJ^X7O9xQi`YVt8fjIG2Xb~Y|WrI zQ2C8pSnCQi4#ja+Z=k{(*RVDfrtOc#P!aFMH|!ffpEB#htG*NZg6554VD8Ati_4Gc z8eh)zb3{i)&hLn&O2YP0;k{+SU((N7vDKs%BZVz9-avn{e2{~UCry7ETx;4qwso7H%OQ}A+J2`{vA z_}wlU5@6|-I^YW7Np+-pE+U-Ze~`SLsXv=}6O*X7>B3{hbi5zR2kgo2f44RMh>t)W zsA$*fpTS3<=$t^p_kuG=OUC7lQQl}+to%&;;I3GY<%sUY5t>D)Z-(jO0=>qUQJSnI z(bj_fQamg9N@~Q0M)XX&E}A_S)91`6M@{Q4Vaq;t^YYv|vP-6SU@o3~&yRFa3j)3O zjP2UR(`!FCEeY#6QsdZcPY?f-_?NHm`O|)3yF<73-hdQc@2y>UxpduM z>u=%bQznD=jg2{VOJ82N_Fh+o5qY=o*1mU9{Ndn%{X2FZ+G9FraU^*Y3 zb5nWacZ6tv2avd@CHw11eu690hVtCS_(E|-`GB6F8t+PvtfB)BVqj5_Bgf_+RMlb5 z+&e9OisSD1>zU-@8&Q;DWdJ#X~g0JCakD=}P`Va~4 zp?W+~GNI_&&-n1>%kQPJS3K#1+7RC9`HbRr8PCak>~3IrHU?V?YA`*aYu=(d_|ftS zm(pF_HX9~nHpcxMCXIJ;&P-}H-r1?G@`k~keVx;6>i*Hs$B%n4HkgadiRjv)Q`fGY zI&?*VW*YzD+biDF`(26h$cIgfov~8uq!s&SQ(5Cl+b!Lq=x+S>=pB4*Y(Sv@TS&VK zWx>q>Usd6~y)RGH1p1sgvfx-qAfBaXRl>DmJrdVK_=zXSK~FYH-vHBoclW0o-&FUw z@`dC*&-jn>IbV<79{;bbv<0}KZ~bbc&F9MU>G%@KvCriRnn2$(*$a-+9GMBJMR(yh zmfX#GP@@;9>Q)JIiqNDEbY|aMvQUt}N@btA+-4Qcd(!$ZgAnJcxFX%Bqhsm)r5c@v za}B?~{92gc8+Kv&xiG~Q>E;{h)*G6RC+XrzIt5V^dT%-xAC{N%8>(D18WmUaii&Z_ zIGwM{BTAdTi=(CQjQuNK8|l68NI7`N&Ie$b7Z8IlS)~vNmRQLj*Xv8 zKJcm`p24~L4j@^_E)C2I+PVJJ?1gV%H~E^SlhBlFFt-NePyw|ar+WlIO$<}^Mt zdB%}CBS1Z8-17K4-qj-FGpF?8lw8@G4ql)4?%wO=xME<%q=dL4%@|$r^1RY3DypcG z_u-OGCJuS9X3c{ki6&y#%p z=q!+!p-6@}*O?la+*J`F5ou|NP~=ADMk|u5XFy?0l6{>PVFPzJ@ZfZ}p~2mI;M^sE z^ErlZ9Mm}3w|r8w2MImS2(KO}fcj*~hh=LEa0@0$DVf@{ zua4GVj$b!q_wNWpkaJKrl)AqUT!w_IbkFfJh*M0S)N5X{3*((QqWbd2neVnuxCONj z?Z<0B#$Uwy4zZIroo~A=*`3~9OzLNXs=3%dY73mluZ#hno?9F*S#rn(yAY`MHL6)e zZ1IF{vz_e$e+j|+zZOjii-~T~bEd|gZ}}S(wrXrMxKB#XvR^n?{5_<13Mr#;51B7^ zq4|V~mKcIp^UE*85r~<%L4rx5#FZu`vnV zS7`3xNj0ihOSe{6EZv~34GR@9@jE|uvCEXJE4Ci@P`n{5*;t7zPm8N3_RM7X2p2)Y!KUj1Kq2)(PVsCtU?9dHV!*aSoswRv$jsvX`iCpZ0;AG@ z##{D15E6oH*vGDGCJnt*e{NHVg||W-&OV@j?=}DE74MDcQt83_+i<5`yffEj+FGeg zy~k?~kfHRg#wYvC%uHI*VVl5?3QS(w7To_K{JRP-_~ATacyZ_1{H!AD6{el&40Mr} z%a-WaD4ukuQkz$Tl0!;*O*l0=lCqKZ?q)ih4q~;Sx40GnW^pSA6&iS5_&=&mrz!5i;2 zPMa`o=hVg>Ta#N9F4pcG>rk%rn(J?wQVzKup5=PiES=P%6e&YADZ^O8>lp4I-lgE$ zit!RD2SfU?P+AI82dOk$aFY@B4tn}WL&D$LXi0f! zPV97jWl35uWC9l{w$b<)$?u0At3_vYlB#K?;ToG`n^C>O;3{sOh7dy;s9F|mLhuhy zyXcm2r8}3@xbDS|c3;G}qYIR^sXMmj=+!X2L3+{fuA3$-`T*_moDcIFcdiu>lsvBM z$n!m?|1+Rv*P`uc8`w$Y5us|%1S>a5Yaz%-@F6@_BRn2ZRiO5S73VvqmP|R4<)tSh z;ND3q50>_J54ec8zS{Atn==%%8a8R_&U7btCx!)j&_{~ zofyWbg04Z)Ewe8`;`zyWD+X+t`J~6}&NpY-2t3KBG3lcgE8f$42Z+)axc1MVHVjvm zK?*5IPpm}fVMzV#Vbg44ug!M&uv<3xECpL|3)Bow-w{z>m?HcN{Q{YHeLPCe!m~m7 zA!^F4`3Zxvk|vz({PsL}=OY3Z*RA1zTh@^+{_Go;5Qk;u49@A#RSA83F}EJKyJoYyh;^E z$5=|yUc|((^eiQo5Yj8+gDj4dbmLZpm4z^esHkE=MG_~@4qPha;l(Vk#iN74GoXcS zs3zFEt8UH&Pv!VuF1bI-m%~Q89-El^24BUrVMBkmtOM*fwRNwKB;Pi|3#IrTpg)y| z+1}DMb~T-hh z75q?zFtw(Bc<;BZ_~XLX$>#^2m@iq;Ja202%aFB}&O|5NklwU@s*GX(m}mxxBTh2e zGwY(0vNPU@4};T|U}(__zu5W;e@h8a1zd!Lm(#9Sgt~^fQtgUVhdLGdOx~X6tPCEm zxbo{eKfKW^;c|zG7opL)XmPOFrp~N9H?249fQ!|pKj{_)rx|3g`xdRbAJRua%?SO#9<9bTarR8cuN3dcf511F56Zhd2;%YCL6>s} zE{7r?#$)lW=Y?69MjU$!3Y_=$*oaG63qiSr>T(rgC$>rBat*Nzg zN$;p%?;NtWc97U64e~-du`N4^_f50n8Zv_v;$aO8h$COhdV^CNsL%%3 z&&58UzD2|-Ve2mVB zsa332x5*khPIj>QYBRDA)teQ?zM^=E?v#^X=}>|TYBj&~@Pq)%3s#B-+nedrF> zPC3`vm=Af;>{G+V&WYBdyiO2#oh0MtVDg}&4zCuQDdwv+=t`G)NFT`n*oES6V>Jnt zbd@wAA>C>$->V;Q2+gwtH_s){1~sc15E_v($yssV`h($OR(&fr&(`VEC$`duCe!8} zY3g#@rkQl#*Dm90#Y@E%QGXyvqoW?!ViR(rJ+Ii#f-H{gWh&v<%U%`XZWa;BCr52; zEPM!dUy1ME?|5-ZJ!dHAFnQ?QH5$!;Nu9?sBQ#7=@qiP2)2A4tz+Zn%dpkBRYkg1G z*4<|G>^ZFlV$d_=GyXf#6K^^Kh#>|irW_-`IWLZ!i8M4iHXh>0oLhV&Kx|e_TxIL; z{WJkRca7KwT<6fxXZXnekqhc+yaMrqPu9mhxCue?E}j1ste<&y?8Q;43KfKa$Zib} z;>9^Rc;Vqj-6L-)mV#<>-no}h4BveB9$%dNlj_Z0gjA7aJQ9FnB)y5V=zPV7#EHj1 zX|;qiVr_`Fh&_KWvC8rEG8C;p;|*2HGOlgA?f==?1s}BTHhR=F8@nmf!SSnK0G^CL z3$;2duIfF?h(a;9NU0q-{1+B{9m?JvKk$FeFs<~+$+_VfH|DTq@m8K&D*n;ceU;AAc z@9f^XWB9_C9sPXvj_TIVC-4`ZcF*rFJ~S`TXaBfvoqhZcf@W!0&l&E{Df{{`ey8zg zU*AjOI=BP*=I)i8GIZRG@Ne9x++CYrRIK%D^G*C>(j@S@zU6oAiZ3?r${odh3!gD= z=#-LJII?fwk?aF|4vRLd9a*>AN_0R+WM0{Fg~((t@_Qemngy1LlMyPVA`SO4LIdao_r(RXyWLEAeqKfLeZ^(UJ(oHnmX>M3Y^*ZUbHWjC(J{1Q-N zv!i&u!F$xxah;QdxlMbHe6rGe)Z;Pj8#5ykGe$opWos|)Nh;pUWz+moqIhW+B!5t; zXW@^s{8?6ZN{@z@1|EFZI8YgQ62cD;-&Z;WtZb6+jmmymKS&vvjqe{Ewzo`AL7{Zj zjvCTqMagd3QJn_u>dGgmTmnZA>9(>|7rzlbhHURFoL~;tZg2{k+#zLZoZU2W%ABMY zNAQMcK6miCQ;q8ixaX3czlV@w87ZGT zLK-@DbP_kySUQg|^L@|zFnF(l2psA6^?qG^pyT+(b2N6|ojP`3<;EUfoi_*X zUjeuzGhpZN#*>rQjS$Dv4_GYRfZ0H9D|UoWSOXsjLULmR z5s3E=atBCT)zFn%V$q4bOkI*_@!=jm_~Re_s}fN1anaPU*qFMfD?t%GzNk3=^!h`w z^H?jLA)7#aF?dyH#B*gZy~Bve<$(%`bm=Z8(EC;CB`GoF!#@bdd+|3S30q9QZji5c z!Qi5W2rbq^xK>%}bq;waMf|)zMgF6*?M22i=T+_hw#O6X#)(^pPVyeloSUg+kEbU- z^8n|hYHeyWVQ`@uK8;IPwGUZNH+h!*dz0q`v--fN3Bnhgp83^?vbSD&N6(wTK>BTQ zZ-L%v2pTsixXZ(`mb*OFM)L3sG7PIS@Vg`9F1B)W-DDVFv(l|#vSQ?vnbdTmlOtK3 zHl)^JKjySPerC)wahJ!1YyA6r=MG)EcJ0!k^Z%d5ZGgIwI{b&^NvyW{K1{KUY>bi~ z=|Y#ACD$4XQ+DE`rHgKPUxtm|d^*L(LF=mVuu{eJxV$3FFQI};w=2)^>@ zA^tp8>!?X+R^3Wftd?Kc%6$!NRrWo4Yt+_N=e!)asdlS1wJQ!N8<~|^NpOmbFP0Kp z`}mZ!ldIaaS#>h4|F$vRN)Zz!RLabXOx|&(Ux{JeYf`>D6IpGdYxyY1yi+etg9yVc zQ4)EFo7p^QUqD@l*h=LaLc)gn<9gUQ*N?}8@we?codRb;#aRI(KFq!eXHy$#KDz}C zJlz8a;O+R{P;hxHzEga2HtpZEWPDqZ$7hG3{4;xk}(}=d~p2iQXtLW3E z2%)mRN%BMLU9=^zrtA4knlO;(vvxO9CW91@oM-Up_|2aW&0Dk z(c2yAs;KyO99^u=D(X`{WMqv&V7K>*eW~g7E3o~++18;e^D%G7;>1)$ZNhtDEmwr` zAyW4>-9aD?Oo=tpnpaZeK)S(`slDQ1y1UBf5H^hcb|%D~c?zSuHl0{{bfqs)1xG3z zn|Hs+_)PdbCw!}M929>yE^BZ?i3Rlr3#ksR2O|*ASF%ke{eec>@1llO38p{5_GA2E z6x3$?#J|E22OZ}2jVS^t@1{0tm3@*`5nP=iqp9zSypi>w-g~t=&xcq zrh~Gf`7B$e1F_6|l@0T@arJ2(*uXjFiSn9hJwz0dymJA!!0LeCnH_%BJOdm<9jerG zP+rTMx%Y)q{e)E{rb~5bAUflyd_r$x%=f_~y<`5n={Fb%Jm8SwSkvL`(=_YFqKRQLRLQ8(G^`OjAKnPBovPZ$Lc zMm~d3#KFddr%=2%dH6}w-$v$m3h^0w(&yP^9Q#(~&G4v30ly?3=Fsr3Bz%#TiU~Ho zMU@5#)SpgN#9K7pMOywP#NWnF^83@s{zR5POrtDm7Y>gt(vn*YK4slW&zy#nZRsbz`b34&+u{zhV6b@q5F1>H8f1GPX@-W}C5KFUd$t zWU^R=2#*Ay`d^P}CfF_x@sh^M=#ui}(aSEw-&=gy;E0HLdB*?yR^(Mn?|- zEGWun97xAk(%0f!cqQip5peIb%dSbNAwe6>xkzf&~_@$AJrx3IKQ5r z>LcOV2l>;HloQfYL(Dmu?4wTn)>Ahlf_K2%5=+2hXyS-R@<)UgHz8vkYp8MX`Q@DA!h0Nc+nhUtet|ASrN-T9fWh6`+UcJftbDAPppwYBl4 zIu=B0^zV7oXK|U1*b(N}d~N_9MRHHQ34vnnn-g`5vS&Dr#oH&su01z(iFjLs;4YY* zELJYxL1cwgSt{GR03#lT%Y>0BSH!2MlMHJ}lnzX?SdSlsxqOlx~-iFA|ck64HWOP>c)cAQtYxl(V26>*INI^@e#qzIX86Q#I3DtF22n(@kG= z!Y2R%?pIm=(ADSgh10g+f9~8lSLeCAaX0vI9PGd2Qrq!C<&A-#HqCifrsT)1`*F^M z#BxVu(_3-{H*?Lc&*yE8fP-;8iMCx=KwGa2`vnP2TD%ugw zo3{5(d=9lEvxF0Nk4RfGongvuRrNsB4w&o{wMVqi&O?zT{xBk!HR744CU5ji5F~pe zOrrKC7}bz)X0q{zXm_w<0e{F>>{QB+8{x-;+L`MGo`b=ZA9xzY{BnfFs-G$+!ncQ% zo@;NMB-uOWt(YF2F!O6&OSETfj%3f+YK(}V5*{k=({dPT`j?7p#)Txm8icQxBF^y= zUA{jpM^ycXAn#W|`4Q*1>i+6qD44V3rT8adorRqahKnY71tGOKHV_O-Kjml9 zD=~zL_CEes_xRm*_~o8mK2(zrG|o+ZEa$@p6BJmal=JweI~h z`t0{u1A%KidUx-z$9*mN<$C~sUON0}RO9z!-eLozVLuo&v*ym8BYw}BEq(9H8PvK} ztJdH_^VJ%ks%r4groBBWHwE3}MCLAsu0SBABAB`!^W}quo3M4wh||TvC+a+Ywh`aO zXKnDu_V^|s2=4}VG4G)M83RNz_<_~b>02?5W1GL(cXw#JI?!j4w?EG#azWBWQ`o;enILFSS_pP>NOcw34f_H_6FX=)`3W9F3h?Jts7av za6DN2C?4eouut(s=sDWt2S_U9Jumh%?iTb+#gggr%k$~p#XBoX#h450;1d*uls__o z5qJ=f44v6-mYFdqoa9xN%tt-xj+|DU{)*<_i6x6uW@~TmXtMADeQ{_Cw)nLo3p*IU z7T4p0dfkv^CAl7L8`F7^ewza-xA3b=vxYOE%Z2l zCY2Q|59iJ31HDy7fgFkrQsyuVQo#V!>m%Od6u3u|s zH*O*B4l9p=<9801+=dTuiYsXc#&uj36|uV4x~>^c*Zc z)A8b6LwAB_2y>O!X?`yxx@-l?AF){KX4EF_l57&=N$H#*`ML2d!LOL|+fVb8eN>c7 z5i&okh%FbN5zjaGKo)fC$#k2;U=bH>h@vOO_ek;ATiQk>+s2k?sRdq-;xvAk6hF=Q zl&?U_!?Q*6pT&6OnZ}Eh;#DVW3u|fm2NM2B!cUL~H;P}8a4QoZ*t$S{y@DiKZo-Eu zj>f-jDvzhRoP3ZNpWPtI8#OVCeNcNLS8-JG7Ybtk!>)S_J7XX|&~V*_>V8Vyb*Ou1 z>#r;?eA#)-h#}kBk>w!oVZ&Yu&hXRk29($tE&I@k`7PLukBK7@x1delgm@K7FUrQkFu$-iz(@%*rMKQ?Z_SMG&}wg0tYBNV;M8u2|` z1Ahw?ZZHu6U<>;|4>jO6#yAx31q4YOH{$h1WJGwwh7HhIEZaY1uX~>IGo2S{q&2Xh zU}=p}T65FVl^wd+=%%3eZ*Web2_4ny$db6t7HsSm=1~NkU}4@T2pevXw<}^6FUI(G zQID`4YhnL{neN{BlJEl5T#1s=@y=sQU4=%5`QQi(U+utWPm!aK@dEr}fq;LPUQ}$` zxb3&a@d!fvG1Ho|+^3L#O2wAu_*{u{oYu%Tt zqQ~bo&I*T)Ss`u}y<_}eobX>d7BQ>yO|Y-W$0M)R6HM zYQgl0<=o5Romh>J7Kf5Br-@-}I{PZbJ8xGi*J>=@iu3SlZt-#`_H{D8C|tv%rs2`T zReT9zU_11{m7g(6L$+|_8B+(;Sel<}uu9p9=)WDkT?C{9sKm8AX7i#?%ypP&=*@Hz zT2Fy_Sc^Zk$J?L|X$*BgGA9ia^Oj=OS%_sj{18SF64V9|MdF9kdBZjHx~ejUl-1w7 zmMglqFqUsr(2~=+_h3j=&Uy43B8q!!i|knc>P2b1g^Y2!{QM17hZplMhCkxA!Y6!V z1T#JR5p;r>^~a#tmTSk4L(I0fxCwr;8b8HJZ?{4mlGiZgIR(96p#qyq@Sz01FV0y| z0|{rIQQYLC!tly%)IPlxPVxJAu`I)AS#Fc?zC6`MEsz!;=gGut83c?IJ_+USI?Omd zBFP{0m2nDQ&!fDU{ZImYz;`L`XZVQcNxFCyA%*DM>`Z8w)(++6T6(HdM|@zXOP6Mv zVj68wazyVF8J>a6rZ6FqE88PQ!QN3?H95540Tx7BSd_KtE*5!qFMjjG!=N%2Du2R{ z@fFa1A-}sQZ(sqphdDV#`K!1+GarGtSIPS-u9$eyvIQM};x#Z5AN~!M*0U<8vPBaa z;cf#lO(N%v4M``9_&l4N_o_!dL?C73P zXUyn2>D?p-S83k73c0R`@|7=(BL9mtf-LTQ`X4333{9wIV?|lB$@~vu`X{wAWlZ9$ zhH#uO$~z-Rv6d9UjKbdq}%|8~l2P=#Jt?JH&S(N=~~n z%-y}%l4;Yf4JF^ptV+QmDDn~7oIZ^ge7uVHT=x@hvcA)QOrP;{#>^ix$PY>X8wl?d zhlpH4=*f#xA5&-tZ|Y>2tDy-U)K*nX;61}Hw+ti_u&l6&+lZjt%1vwzE&2{{)8f0r zJK)NciYsT696S}Q9!8&rdgp0vO}N)5YRtwApLY6rGqR6Sen=ZXp*Tz52SK2WA_I8Z z!;qH9JqQcKLKu$TjgOEHW9?%G<0nmxHxRb z9&{(x_c**WRPsE6}}=L-Ux2LwA7b?7}qRTCt ziX#N3ms`En&7w^&gB#9ba&z0#&DH!o{#;OGx+J;<)A$XOBmd8&4t6ecIi$*$WFJ< zV1r*9aUI^CgB?S zJY+Hb0Pn-zTxiyTP7XrsiH}!C1Y9#i`CR6NM#q~paC-!gT?r2T+ ziodmfGwLp$O3v}dryoPs-H~rwfBV+`b)V^ZbC14*()i@tV{>w6_I}e{YzsF?Uz{er z(--q^Rh5{L-&BAbJH`>kj4m3Y>lk)#m!z1FhP!rbuZedH4eSv5Xj@Q4!>8kH^?XgN z#t!{rcr_$lq4;iX1Gcwdl3^o}%PgS>--_C2>Q^LcKcX+Co9vi;7?H{X*T$~c4w zpOoPv^006mYKfg#&Epu~oBtzyZ98e+`9{d*Q^c_w=SOYhHR6Bz%;d96=QyAPI@`I- z42D_1@xe91mPc5?dH5hSg849=E06t82#k5Rk>*^50(@iqkK)dOxLidQjy;Hs;;Q(TPS*Jy>-%5z#0 zp9K@0^U|I!$@e&=Gt7j~Hsid4(vk4K=nSQ^kgONprSWG=@!2pcn;an-S{p|qJLx__ zO$^HuO^qR%daG@3*Qh7OoN71*Sb1nl2+94%LO8zDnwzPV=E>%?46jO}v_6x(b5w|) zav3Liuf+xa#m$YUUdPm<#FrttDXQ7^+4&LY`Z;d~x2*?$baKImtb2?aJ;TOs%yQsz z{ap9sy9bx!rOVtUw;TMsZ_a~SvsS_MCapu_PaN!fVUWqOtzqMU_-luV|9$O@87h=> zA-$bGliH7B2q|7FuOg*s#;ehikNI2SJMwcIp--DHBNfpjKW7MiGQNytwT8z`y0Dnl za$610m{ego>npyy3uoB{%1g+T?m5#f=Yk%U@#5FaqGhWOC%ezK$E_m5JmNH=Q61wZ zH}npQ8&SQoxD)Nuh53}%I=;9S|66UdarKi*wM5md#>a5=R7U!asy<#H?-uVSz7PXP z2YgzyasB(jAJ=VN&&SWccwye<^Rq5ons)`U=q}q%(OBIaIU-NGqG#a)CbfNf%bd7} z&1y{!F3j9XH(Lbz2Ok1v%CuW4-5MXNvO4Yy*CaCG~;qwC7cGDr^<=&SN zJaHnvM}FWN(_fssrBdBH#Z0uhlbwBsh_>J!gnYinMd?fraY2CmeQw58CuCet{=Pso zTyf7FZe1)t9UNyqnfGkz{aZX7w=z9jMT_ysGfl6Q_jYZo$he;1Z6x|u&CKC;M+$^L zL-gA^LW*a7)69p}LJK}FGN;fVd&2bj3W=u@ENho8_fQr*vHZ zwMR|E`~2O-eu6yxwX3P{Jkpd})ck>bE)E zZvMZ*^)#Huv)(21`OJck4H6$lq7}S5j~#2c@?`O3ynW6K=g-#`O|T`M7AN z&zuqE$4K?|i>yB`;+={7D$S>Jec~&8Nz^Z<-cQqdqq-J-f9fsug+D-^4WjP`9pRC& zsDB`%5f_ulFVnQ2Wn<`YkI`y%{&Zo9ct}Kc9|{$D1erI{@7v6rGA5dWLFPNRb<9LzHPm6c zN{nfW;#-*bH*ItS7l?wv@tP99@NIm{{eS^SScT(Rxbvzdr~Iq~M$O)#ykWr_44Mo* zpm7Ii2;FAj^y6;GpGh2yzBGMAArW5|033p{tHB|raa@4X^e2kMeCY}zU z>3w8DX129DrCH7(?NpE-MD!Z5DBNZ9kWg>)uLifMMZJrSBH1t zXLw9$r{X`L%wo4_{2SwNE8l(Kvbqv9cdwKuNJab|1V~(Fs^kMwyc`1A__64;1WQ4jS z#bu^%IP2$6e0d}@=JefN5O;J7#6s^ECr?7`_P4kxezqAu#mTR?LlnvPK6X&fCizOc zLe!g>R*t-4YF;pvrUgpo5I&fe_RqNQ_~1~I7dXH?!$$}mVT+F_7Cy%Ke6){$kzE^? zzp1BZ#^jA-D#ez318c!|Gx)-qw_C~3^5hFV9-rTG6rbDGzV2JG?B@_ti9WM*9!mOE zddD9;Vo)AbHZY&}=jGwMLIgKXXsY;{t70~NFl4Z+5GVHSN?Vie$B3SfF_5oNdP(<* zwu!1EDUpWg6Lt0?TVCddz?$A-DMlJYPjG~83&h577nj0Me}fmq!JHDBQaA@+!&jY; zk>a|gJpwS~?4ACWa@|F{8LMZ2g6{nGj<06Ho@~g8CNH zZa`})oHkx(Dllm_a*35@DZpQf4kU?2oUM>HXFd=_BQ`Jk3s`eJMOmWQ&++K_Vgu8| zVQ^yC5J_cGN!`JvNZ18@317!ON@+@fMqD*?-i6=eC&g`IU<}wFg~raOz?O*4CK?aJ zkM}x*FT@kUI+dn^o#*6sb)zWBNA{Yz2XjKKLpSUe`e^KN^U^AxSJz#fmUcTj#>Ym# z`PAt$4vjn6EA8sGg0W>3X&vp9cJ-S5y-6zVac{h^173~0_Jzt&rY4kv`u+23ps!pj z_?Tr~7~*&^u&K%Bn_idt4(uN=FJN8sb=S$B z^PqtP0_JMhHQjX0{c7L7thlr{k>4=ckEK=b6{9&+I(S;3CGlJd4Jfc}0vx$MjPLTlT!MA5uwg?ujQ8 z>ft6ngTFBz_n|ueanuG+!vmR4!b}($gJ_yrLIZ9R8&7ZXVw5cCftw_p0q*uqykG}c znK>>*2$wp+8C;^LqB{a)o&P#iRJ1OZ zS7`(layL9!{AMljn`;>bp7IX5GTcf*fUd9bR5)+ly-AZqE88ATnl#8OZPm3&(+1YI zSWOze%oxK(JQvNNV3J9^83 z_+BYTOjW!a&#{Z~M?3@z$=e6OGN=dj;nl*d`NAooO~%%&KFx-WY1C)YE3poNCF_{t zTE4<`n+`$3+0S?*J_w=QC18GiS6b0AIu7H$FzZQOEi)$NuBYR=c|sfIZ&gziteQ;v zlj^F;#y5(?6{Nd#7YLXSBTB4SEJO5Mc=A0ZcQB&+h0HPKQ0@WszNY6YMAH729@s)B zsLFuU#&|~evS%)`mZkf7;t8u#Au!db4Rxf$Ad~fla>i-DB$5TlT z3V*7`T9aC{UtuA9%9uL@SH;`$4qSXb(d@FYV(H7peHx7$(!3W@XheBBj(R9=E1FTB zw8Tb;vsAr!!xXU*WRf1_rqC+3;FT9oo+|OF1b#gp{PB_yNIrAoOsNkg!F@b_4arPa z&f2edJJkQSHs}4f)!!f)uO(kpR*#H_x%!GU@&0pe82eHDR(6AnNGX2vRy2;$cvx{l zkwN1um*VipNF4I5dP$y@;xlh2&5cOh5{lL|Za3bR#%U(S*r!Ng}PaD~ZNd!w-bzOezF2(ZVI66ls3ds->q_GktR-tF~%YwR&o5 zb8Nic*`zSw-s|_0oZso69rA6`meW82G7P-@J0wyZib-ac+9V!c&yY$ zN-&Fgo*RiA#eSEzSzf6#ofOOS-@RLJpS9@f$cUe{-a^?Er@($WvzT-m&4!j3^k~9_ zM-q)MMnQRuz9UG_4huG~Maq7HO8S3dW{Kqd$7gz@VhwdB(zhyWV|C%}Z`T7UzUjb9%3qJ4( zj}YaJ$v(<>RT_#!vsp$H;nMlIhHWf-fG^mt0x;t{VL&fk~nG z=Qz8-4%#XXq53Y>r_Ky=o`gSK!8flw3w_c8!drlI8K_uBafQ5doRUG`InFvZfKANv z;hukBiV0W5BRJ@ojM%p3$~I&!QvuaOP0VYNV&^8$Wz5cH;u#1?NycAG~T8AL4~KdoH@N@2bW={ZN01 z0?$x?{LdrrOKxEinW-L^wY5gXl)f}^v0bsDb(;5dh#H$Xq@S<#U}0*jR*~VhP9-bG zHuPb593MKc4(k+Or4hr7nO>>J5a{#gr%ME>(G2 zC#0dcisv5a6?$oVS?Ny%rDTK1=-+$<56i~81-VIw*96JR7Q^-9nXubnH9>FZHv7{3 z=JWCAS=AW#GB?kM;9Gd>P}_gnz<_d_4xIP#2ItE=_QX^wGINdP0w5+gDy5c^zlrAK`n} zy>*;ax!dTkSrwCOlrCG7)^(n-kzx{=BeC>$RXRq6LTtQZQeGCu+!Q?5u1j*WdbU>G znkLs39$AUz+R9cm-O3xkhN_0t^MIi9{?vpxe_igy`5shCn+wn_WZ0sY8 z42}eZUqB*wy7&MJWR`;(^q;SmnTe0!N0~h~onXUyLcp*xO^K5bwO0(T$iGL~qMeMF zT8_3O*j3=#RRHS_IYYBWuTz1Zfx?OB%UE6KuAs`OK1xAt5pp982Q%jPb$CYU8uQ-) zHbBqoOdldnSpyV>{H_+>H@#Afr%T3>g^T9+yLgUio!qx?tBPhs>*6^!y-DwWt;9H) z*^3s<@*{E5llz2!*mC{Thb`AWe%x}M%c$1C$swRbd^LL~M|NV>1o99YU(LbEF{ek> z22SDd|-|LGYE9Xhmc-=PDnt#Q12qi$J^ zyC1J!<5>5`S=}0SKURbOBG@t7CvC+JswDMH+P{D%hHe?rts@QS;jdTDJWJ|0+w(oMnbHdJtO z;;MxUozj{zHP}d)*0~Ez!p7Gwu1}?OJ4iZTlFo{ruMV1^czuutI3u68Kb)DHnk?)N zXOD8vbhs;UPhDMJ1K=KFx{0hGH`&aiUP%wjWG9SN2H{=Uz?6CLmi1%WrKAXR*j8OPyktvj{2 zJOmiySbVj0r9eY(~YM_wC zG`b~*%}0A!H`bHx!H{XVPD$TpiD!mt_Xh6O{-Zq@ctFc~p1O7V^sQ5(j=Y3xEYDRH zOU=dyIXg?6`||N@o&k(6fVQ1OF$Z;#)-j#CMp`qU-gR`+I?S45#lCUTv|d8b-A7H~ zBkbm!kW%&9n3VU6V#NtIjbd+%jYLd(kC2_lJwXbyA0ay}!m#TKR9Xcr7Puz{om9qn z67Lv^r=;Z!cTa=$dJUDhbz^;}yi-71o9x0H^J7nPi((p?Iv zY`cMmG3QCxdK#9DSTT%zcN4=%nKlUP*@wn3dUxTU^HS-=GWV12*G5!Lu3WoBTw|N_ zUN=V8Y1_JbT*@tn`Nx8yf*O=l&p%hLd;@Xb@R6~F393>^ujpo+&iErG`5w<7rS`~^ z4`x@XDo~vg2e~@v$wcY!w)khN3fJ*IX`C;`p*3#0O_FIFk9X)u%y>Q+s$Umlf^ogj z7qD@rNQ)J3!&D|EKZ}EeK%p<=O}wcPlHxEiB#uankRs7y;GS?r2X*3J#DUQFI@H8_ zNW7!MH1>vZq!`bQmG0L39Sy&t|4B5IPaKFZK{U37Z)Uye%TAH<1*I65o#JmuYx++~ zTD!d6{-1*2+199_kSosPZT8a)Fc>61yl6QCBkM#BJfH{u$h;DtmkJEkGP24?J zEAGE3x-=H^Ixg&kd&c>qeHJ}<;of_E6Iy3tKX^)cA4Q^`QWmE@4JedBpo5@z1^vX3 zXKpi|3Y~`Hsrb-Wn1SaGf-LBWr;mY7Q0o(J2U#PzWbE*M>w8>-2_#?e`Ss5CkS*MJ zztMEoDCiZL%1g)@`AfBFaYk=^yx3#27Dx0lAD|`_6E4MT)C$+VBZg0My58PFdQYFa#1_26v5Mx1 zp*BGGs~v53WV?g8rnn-?0>qXX0jmvUeT=jXP#}r1Rc1XUVW;Xhgaa8t#SB6a(dg|W$eA( zN{(xr>7mkZdOGd*{Eav8(_;8AW0SrpY16oaZEA@0ixc{dP4sp0M4rB~t`Un*N4Sd8 zKbh)n#`SUYwzq1MnU;({#x3m|=;bl%*ZR{JRQg)2502ZEv?yKp4wZ_6-_4D)f6sbK z?70HRa`zEK?RaNXJ$dqBOp2;KVkPeqCMETGs;a$klqoOCqXnLzC~j;)(zG<*{?&q} zVHLlaG?f>v6KU~PDb1}IzSm@pOLi~U5>3@s<>M8yRIi5u}!U1%NMs`xdoPJG#VlNJr=JCpV`FZhd!#5ka_{A6QwbyWTxu`#sGkS~t4SZo$*pFidO-L6K5_MPm1c;ole zT2`~Q?ba|k!OFHXKl$#ux;=Z=U3V9nwyIDsrB$`6siF)FV-*eYsy}toFt&*6f#Hkl zWDuQf2<&($LUi)#Ae=*a%?nU86v~q{_Nvc0r)`gCi~OHfG!j0l(g@#=^P;3OVXdMe zDksG=oRZ=R2e8IC&GKaJ&^Lu8+z;TcyFOUQ*86~Eu@^&_!p?P z>NV{z;zeI2!!#|sE%`;fD)^XSfJ$Py1_&JtcZ`$8v14xEUp;79R|pHRpK&_DuI2?8 z_KH~UQ=ya4!Z?&*yK}<~<3xV*UJG0CZj>wTy#)PnE`%@#{K|wF&IhCf>)m2pTK0F& z#dF^LwzB%DU_19mAj}lD8t;>|b_kLBq@GZw6`o(`*N2n=-!dWRU83FeA!)+a-*3eA znOCghqm`8?J3k=_rx|BaeNp_15P8XYDGU^Hj9I2J2KCL#dD)Q7ZulYwt73$K@EzMg zaeP6H`xv|7n#MNboL?cUm5ccYoveyw$@w+Wu2I$GHue+2rgr0MUF;^iUm3l)a`fm1 zBPTDYosv?U=IIAB-(29Cq^go`lH z>Hd93JVJ~gBK#Eg7<(bxd^@9~_Dq=n!@63#&Yi4(dV}M|^XG)0b$j%xy_PJS(z~V?#&yL{xMU`$g?|1 z`qZ3WdA%vkC(IbUfK3wLK+CnoKd4NLFHl-u6;L@ZbC7NId|6H^guu31pV#OH2l$y98K*93hG78*09g_AJr z{d+`tzK<1ntg#_-H_KG16K#bXwHFdl%+O<@UHyhzy%&1ioVC1m=jF5KdPo3PG;Fed z_TCO1_Rc0hsI3^vZ!!>AJ6E;Cfw8{9@hoR!W$mPP*vngOjrMjg?Ip8P$ zB6CtTU$i^8iRtdrd;CSVHpP;$6GF5dcOkZRtZKDo+sW(FjLmNLq9j(A%k!fR-Z zH;8qlHY^p68+nr6Dd&z*jN0+KLXt7sIEUKtm|qdJUEcl`Nom^%HH9=|y5-p45D&f&h{vd6DI+pXKfk-hS5o)`%)iD%UCz*TnjiL&pV8>a=fHJ+6sx#=2{hCXH>a zx+gboFq-^MCfhhYk{czca-HU$3W^SDP~Nr;arrOT0NYj0AZvoDsccA<^fd8@)Yo<4 zHye+sosf$-!Uxmz|Bu<)Us0TU#_8gSls3(36;D>5bv-}4PKS0i;~IvY(OejjlG(IY zT$1{f<{U+fC#jtrde19Xv~0Ax*V1B96|i8_cR^HCg=m`|ONtgPC$^mxf(pkOTT1qb z1=6$VV@Tr-(&p9O{}~eZVP?{veZTP9eE>q1pn^yUee?+5#@C)9+JDU#tc8kX&ZQF5 zYZUPSq@mc)tAJnlL3eQVyCzt}sCzrX6TjSfhuDBQ{1wDlohACRBliWnoVGUuufQ!- zx_^&rFw<|6v(xduE@hgltt*!06*GJFUNS7HT!}_hhNtVPW(s+R_U`;J+^wck6 zSUYsJ{y_}ug$rke2DV)qH)&*RmDRLyf^x4kTDXhHS5Hf;Ub%G|DbrgaOju{!@n`$b zYts47{3Q$S(Z52GaeEJrJG77d9eaqhkr#rU@YA@AlyE#+(!55vQ#Nl=BEUm5NVuG z_s!#F9}vQ!GWXfu8)Yu}4lVxN@m<&MY0HG}XDSS6l!F@#sBoh8wR4Egc_?(mm5r;A zD+-`*Mp*7#93zBIggRzUQ~8Y5;nxm+4Ly>`^_8Y5;i!`0QRR_#FE zE~#3zBi5>`RIl1rt*%_PdOJL_-`WyIi^e${(wFNgw)!yuv7-oX%ed+!i@PWApXZvI)6&rM+uH&yKK)nUf3zuHjUdCn(t zi&fTi&6SK3MF)aleT=IsM_wL|W7qy{LUgqi&LRKCzl!=9kqzFv_d=W zakS5I6SvwTB%2~?pA9QIsVA-t$KQ6G#J<=LS6-H}tmuj;VE2rKjxZNyLCb#aR;l9R zr>)b+=xZew8Mog{ulK5hXqo2nmAFKuLE5Jb77t?LM7^e7F0NeSkFZ1d`GEuY%(K!z zn?Vs+3;+mveBdiZ^=Qq82^TLzt6iVqwq^m zLl=R6J?RC$ju4x>i?3xotg0aIjcBw`*q*nLdI5jJSMXh{Zpq2@tZchCPEKGa*>-Kz zEYa4wTXN$BRRx?5i}B_fY3bFfwrqK^X3JL9t5V~~<{l^cEVal7w1xV`7<{1-^v0zC zh^ZB~UBthJy*Bw<>ilw&O?n-1ue@@rR_Cj?YFV>tY8tJhNP#ot7$>4AgcK4@J67t8 z=?^!h`A9>(>4#W@d6AXoRBe%W5iOK_)y9<=W_`ru&1&+qA`5|@5iQ8( zceAQ27gMx##KFM8gc4yz+#PJyR=kxiEHJ>q#>UmIyLIg{fjWC@Ta}eU?XUL@@p85H z^>vZzIE2qK-dA;}>t1dU6z|rzp)econe|ZBJsTgsls$>W3FnuiW~OyEab`de9TPkX zTH(I@@;j$+Iw|8cez`Hp6o=KiX_bb_0<>GVoNrQ1-w z=_Xh{^!v!WV$^&0aQfS~BF&+M|Nf@n;C<7tTP8t}8^zB@ zxhfBOMxRzx0eKdvy=@p({YJm@7rcMiRO{5SgAEs@tlYTKt#x&J^r%C}fxk)G6H;0r zg9suqdH#sc_1zy~m>9rCSXb@Pp`&%KH~z@aZ`Amfn0VbSX-ssUPg5kSLZq?0QURn| z0Q6iqhtC_P8H(XA95+W5f_L~e2Y>vexejVdb~{DU7*9|!$ewSDYbthRi{)4^a6)lo z2A$VQCQW0AYzJMo-pIr=cPxB@hdzO!B;E`m1#dI1L2lx_gf(~a@s?eG-sTGj`_zlA zU%O~%1CK>sGl$mgpH;SO->So!;w=>-ibR)<>9DhS@d#acu?)xg5Tk?2o}R7{P0wI9 zHzhrxMjb9pQ)#gsU{zfgg|4Do%PAVisomSOuy-!oz)>9=;@-Beqr;rc%oeuRA^h%? z@S5zH;e9j4b;@erFs2AMc2wIo1G^_xk3(Q^=Oc_6RyF7@r}=bL+Pw4@o(9tWGeW(j z8FihUMjURx^IU+(s9k4T1f`r>=;fN8(qx#uQ=`QCW$c18lxr(a>fUZi(`P3a-k+M} zzQ8+m|Ee)#+BRvOtvr;d^rBaj!ZzH`}ke-@Mj@!ENl@4QY$>IurV&Old}i zx+ii*-qMI9UP}qmK^S$0)o7*VJfX_kksh}2URl4nR4Va$k6{_7 zGDfYnq2c}&}RRY#9gDrU2aQl+a>n=+p7iBA)`$m3j{ z(yU5i4gvB&(k++zwm(SZ(YnS`@yjfGF#0}`stgWMCnP$y09UV(6vcaw0 zGKbB#Zf|nfc*7b0gqZ`{I1V^O+@0!579^* z_ET9%9^7&Hip}!8n=V*G+boq*VV(c?px*U+^mcMMy}G~3F>8S1K8F*NN6#kSAiUK{ zWkCNLO?jv8QEl8ytEN)M>(w=)#D@y8#f$S7Ldp(o-(_I2Ud>c(#!ec8 z&qg#aS_FJ6hc$}wWo}25DH9PnbO{P$ zyzZ)1K0fbOty%8l`)YEtwhoS^CG`R?b7#LTv-$r1H#bblaO7! zM}r1EW4fOkJm@T4cX}vP$Hk3nq`9l&|1ftII-Sv69!h7a$;z`X=S{QJ@Ut3eMjO{y zeb(h1LEG1iNos1_cV1Mn3Pr7YE-MyQ78~t*lgIMWYVolGEn_O5Y&>JtfRu52ZaeyZ zD)YO6;DBn9`IU;6GCoM!*HwVH%?~l~yMYfgK-lBWuGRnxf%x{9Ri3d>GDVfTy~ zyD;wMlE)0i{gRVmj4)K1vpMo_j004?#J$kpn|OoxofkvC$)2b%oP3iwzh3Zf&=M)m zuc1<$Ts!I8kR-*$tI4<6zud=tm0EQf_ z?z!VnnhFOY!Egkcf@X`-CTH%N>%F3_om;=S%C~#=wRu?2N55b2?S@S)89H%R&fGqu z%h=nN9z)9RDU>yi#Aj*QcMA!$?4`-KSoR6zThyzS{BGk@tJ75CqSrCmSd(0i$zB_4 z_*o4fY7DjT`?QuZ`pNu(V|P+@m6VkT$_(W zqMs#Q@$%=CTJji#58&pt@Y9wInO;0!FfkA8#kgocAIGgR#f|qzZrb3${lRb!KHK7_ z9(by<#dG{Qcj5wCmkPeJkyV~TN_8vab=6!EGlub*iV)>Xf~6aCL=1t@h1AtxdsNvphh_pUg$>&zR3VNw{7Fkx7LU`GR`Fw`|aT~}?cpE+G#kU%aBHx8udR4dK% z)QA4~74Dc9`=jU;D2+!P9dfQ)bgx9ZhpH8hvD2ma3OcuqCv#e6(T`^MD6WWK`CozL zUn9wE?`UE#I{u9oHW-T;BayvGKmTq&v7@^ZAiQq3uFBr06=&6jI`2|8HpQ=R7q?Qj ztx{poDJvDC`9%qr6h)2okPAsq*7V)XLs9AelSt;Ww(qOvgRZ6Sepz{TeZ1p+>4kHP z7hSd!JKlD3RaseQR;@JjFmI($I5^REBece8sE4s6k!y1@Z_W_0+(euvWKyh!@gEs$ zg&G-45iFHpZD<=YsB*x~dP)A8r+D1q^#DU{EwlpSV~u;M&tJPX11jPpVtgT*#8;c+ zgA`u_YMNjWegfq_7l?1ztJI)fRuu};pF*RzfEo~w2P^-%cI_z4$C-4@IfnmcOjqBR z;txU;w+f0|(J z4EL1nX}s$E9^-p;2*KLq+%~PvW(pC8YsRJYeE`~d$S;fM?SE9pv6h3*%G0iFSi4^C zX?SWn3o{kA{l_AJio84XN~NOn7bP#&eSAFg%F$)Tz*Zx@9aXB{1CEzT@3^ZA`ai}U z&O0y{Og`K3F_P1EFwAuM>FD4UGdwe0Ilgz7W|K;$mpLx&ho|!H+-a4H#J88J6Y}CX zH(txyIXJH!(W-Jodk1DGH|#eDfhtv2-&2(um7kH`4p(u8o!*4T2;PAkO!Kt2%vC{Y zz-*UaB=6$G+h#C%-0)u<=<|6v;|{yLDIWuQ2ZdNb6|%D^r6!(?-hmBt(X1ZSVzAcf z6!#Kz9PXz=w9K7%biqa4VV^gyEz%fGXxPg%L_R1Rlm^Um`RU}BI=oE=4C0=Gp2K}b zHg^ze3k~Whrs0kxp|nYbDh!8(v*4{w&utsZ@BK&5pK% zQrnd%Y2~Q)3~N0rDymv^Q0s-!(N*zqqyj*yexCD_@$0(U z{GXY%ZPTV=&*=KG>k(q16hBi@R&|d0Ly0r7!rq(E=veluRi{P`>s#A&Y1pW)Fx{To!d5L0)1mX0`_`idItua<+ItZs+ly7 zq>yJ7&!HlR`|#O5u*VzMkbDVhDAN^PRWC(bWPF6yQfw?~)7J=nUY*5@&#g&&yFj12 zDSngZQRI0jeeTYP;lu_gc>3If#-B)@UFdU9`rMf4-DI^VdG5s&eC|!3P32*Db$^<_ ziFfimfZDvSWPHC`Rfbwu;<_nbX*FK3@%|Od{BrxQwAlzXX3}^ImB{!^y1NEQjYt!6 zoyql1r^`DSJ?q1@&I{(c+Z^I-s#Qohi$0DK$2Yt_jYtW*y8Q;UV?2`^;`FINaJ zE_B`6w5>$Bp)Z2rFOU7dRd3U3SVn~*cHChbm$$n*Pi>o`+`BirLUg5C?#0I}BR`Pp z*CJepsi?d{=Qg1z9#usRQ7hDy?q=riVe*OsPX)vNKNB-&)iS4@W54$(vry4>i^m-K8_pVw2+XhSx1r3efsq7B^os`^ZJy&GD`{)k2r@H|5Z@@ZdJFFdhMf@YQbH>F~ zq!+tlct6(pM%tN?aH4t6%(0j(kBC5XqBrx&`qgW7Z|Ti|7+L}58W3HG>B2#b)ZvTk zHikP zyw2$Q&4&zGv~4E7$oxhOo&VdA{K)+Of1djbKZ1HEh;#fitNW>(y7hP5?{ISR=vicr zuOM@LZNC~#l}(oAhuD?2`$ z51J7MZ(r`k`M;jKcD%POc2G8KRIOET!|)}KAR4SoCRA?9r;$apeV1>nsF{>jG&HkV z8eFxmlGKEb{~YkT|Q&{kEgxU?EkJVxC~P%*#v%5!(d;6wN< zM))Lc@IS9D2$?IzHH4LGm-~9ZHm@PHb#y3QV5MMihIyp`fuSf_7YHTmIF5f?6TmiP z?%$`U<=mgYTrA#lhK~r1VuU|?!k@GvDT~qUswO+K2ptDZiE`vUukV>V(SEO@WR;|J z^0Ir0q%sX{_qtr?)7o!t>%Q>W>fS}`k8bAPVnmt9&I{;x*o)|7SGuNZS$;QZ{Yp<* zmCGM7d4!km>1jjCRX)CB9n-vO$BM;#v+5HGl;YFxud?5GyADjqJ6faJqE_IZHngpM z<{*)OPqLQfKVu-bvUG+eL=*MPl= zeTV+OX^#&T3RY=sIujUXk7)QubQvE_BRJR|3hR zhOnGCQ}o_3^=cVVPKO5q&*b93N>ctYBz}Jq-%zvF5@?^S1~=`%r#0RHfXm#Dl@(*v?P|URFUvy#1bVFp1t`r#TYRB@gB^`xfM{xr#S0&pz-We8P z6(_oDyC>K0IHGr1Yh=o|KFQYyMbLbS&j}Gh!Mv$o)ZZ9ru`_5<`4Vmgn6L`*UKcSV z?(Dxf@o&<+UP9yNBV}e{8flYi)egnAEjgk*DQX!@s|O=bsuN~M&-i$%77|bKq$A^5 zaj(E!ErN5MRT13+GGh;VtD6m;G}DXodNgTl8IO$vymCsGY3Ng2*EzY9Bj->?QLB9A z0mX|fk8gZ`mBWU+tr`g4Yv#d$uwW=xcW9AOR_5&;+ZcKc>*oUw08?-IpQy9{dH z&fTHQOuQ?&Ap(OPv6XtOgVH_i@zhwdN+s!*3m#`r|vT4hkd7eZ&`W zX{g-zBUgj!?N`!Aw6oel*8@p^DXc!W<}DJ?fQ}U{u8;+FKaD-v5Wk+^qtUUkACM>F z?W_miQ|PSjOZL5{=Pa~;LifG)6MA(CJ-Y8s_Z`GORsmtjr^cSbH=7(Et6ocbIE~=~ zV=eq3bm*RHPi!P1{ETUc}q0y`Aqy--JiB%>fm9iIkH1$ey8+KQL-ucStWpkZ&snX*6DXZv;xw*IN&}Pu2HW9J)g2J4%ne96FUDmvO zB+c_3k-OIF3>|^$3hpopn~#rm+uhr+T_VA zx=jLJ;vvj*hNF0fC)3CoS0g$z8g48efkSEgd`xUMN9ND&DA=-f&_-!K&RkD>7>(Rs z48qLuUaaqx*;Si)dTnWD6>Y~VJWKoa)--QL!j$^3v5t#+!6l+5UBBziY=BVmjZeIySSvax$wbI^>g@}A?+3!&MpdoVda42Pf#FNQh zLY1Ezy@WXtseEfowcSLJiz^grf7Tx9fFLbd9n9y9Q5nBvo4?=5B-5LAle6i5*vVWvXD^ulgriSaye*U>=#j|_6zGbZKdfwTQ}Now zzww#X?!KN|KBuOzSpD#>d4cyk=`Su)ioqX!!ow z7n3!?fCAbkIXH?3S?f{{sdS;w+o{~o7;o{pVxa|fll;hl) z^wl!%qu?baw%K-@(1C!AJa$sdfq>iPfQfWA{hs@m&pft+g6j=jK4y*C^hfomgoh*= z*Kd4GX9CmL!#(a=hY+p!J4}ftZq%X4dUj0?@nSCz#=^$dn38VVg`Aqg?GLFeN)%aL zUO`E9Vpy7(UWZmR~cn_y&m50E?ixgyp$|+0`V|Y|o4k z4>d%)nmdxVE4gR($K!;~ZU)mv1Xh+C65d!2Jk{)nL`O5F`^q2jtZB6;D*E9r z5cxzpi|hroku2jk9uw@JsQIEk8j-;tkF{`j`WAy2;7tdy%Z(kQ8r#h7l`l9t`~9V2 zGD!wB;C@CK#QsTWuZD`{MO2+xQ#kW(UG&8s~+>V1~4b)%LPy6 z63~jlQm%}Zvt5n;br7~k zJZGVBnR?{VQ@^xHpe-F{KbfXodAI~nAEKZ$U1|JyvQeg*{*B8qTP0gu7vW~Ot1Z-_ zs40IcImW}!4MM$9J*Qn~UuEfSVs(zPuk3i{IoLwx``ZV}TZdWJfncD>g+o_5XdmcJ z&0fZMPPFlj2`Gg}KS{qB`+Tni5n+-d3ukwzWCy*HASU~*<3JV$P7Nh#jW7jlC?j47 zE*Zbz>GI$0c~9~)mpL+ERsZwsaT*N$#~$293V}UoVyW?daO6$M(;6pn{ag9?kw(RD z(!9Wh>4-1_@XMmFYgL@m25%N5t5X`dL_<8PH-`n7ZDWtw}Ly4>c{n2LE zCQ6Q|{7T+J_w<{p2;Mft{zWA$w?Nvn44@4;PdBZ0@Fg!PXn!dB5pw_C+4Wj3_wLx6VpF~fFP6EFq}6r9zpmHVUTEsj zZu{Jw4pVzU)bgq2O5ZQdDfc4?F5}FR-h@x=D3CvWNU}d;u+X5UTv6z0(K(NA5nx3p zTH>avx*0zBYY3$5U{LE9K{~k{S;jN)6FU}s6wt%8L&)MxB^mq*pOl@T~CJ&&z3CmT3_iC;xo< z6)bUO60D4i2#!1d-ARwxu|2SnS=(QGa{qOaA?o~@N^1Qk+hO^dAHZF36;HM^XCYX9 z;X9l&;O`guM=swJKS)eD=`9&7HEGM@OHf z!n_CYm9(}GAY(5XID?Y*4|4t5Hjk;7GLp1v_{~tqVp9CUTj-qkS}b)ljVT$o+$>43 z6x}%0*<2F{rc16(9Ba0$8V+8>?7AEVhK{q?!Z&{#9gYm(kbD@}553 zj;Z_12zX&E=qot8@d0=I+>4uh5(e}AYDPu6^IS^g17T_!7eRG5~o->ehQ z{mfRkZ8oWE^_kxHKT`(SUVX~e@7GAk780Tt4tH{9-u3!Cf}BVTPOS?c9nN7lRyve3S2B@rto7t8i%NXG zP?H4Ao2$}Ll0+t*BM=*{j^ocT{*e}I7N78oE}GKk^K@jV4I%1XA-@t{o`gN)>lV_N zTvj@8@_1k6!uzcQpJF4Mw@Wz|`8xZgV2NXTKa3lFQ@(`BJ<6E%1$_{OUexVN=r2WQ zO3ZYuPBH739xMy~y->kPKk*2&HLkbQYfaeV0@e9{CGwXOFP*#&grM}DQQg)aS#7Q>Et?1xGO8DgpeNl%nykJg zAVFac^x8|f)z-uORCs`|oI76)4(%45e$s1D{y3nJ0oWHdKNCbrp~*U?s1?w5Q!piC2N)&4oC-uJ;QPNzvVf6JEr zHOVA~2PGf|d+_kVg9lhx#Ff&uA1nwZ&mT}fzyIOEgL#|FtpDw+QJFV>GzoYQ9z1%0 zegFP<#Djk&Zpp3Tg9o%1 z*{6@q1sSaJv8gFIbN{^8mJQ`xRdTtgs^$2lSRFtsp}iaWY);|8EG@{qGA8Cqs{R9S zhs&}#=F&gQeKdoudBp!H72kGE?ZKyr^ZOuFre?p)kE@RWxY2#iVLRG>-+-4Yb7q^q z9(;dH-j)c(sZMIyeDLDQyAzqSZJ_dTJ={E+1}bsN<2x=xW7yCF`9~j#F8H-qnZnRA zBs9pC7aq5o!A}#EQFdVj%TLz!fV;j-t#CKEw$6%Ehzeg4#qD#`AJ>ynob<^zPtxdB zP4k72oLhYjL7WPLb6?-LoURH(O9xQUm*nXE-kNcqwIAbhR$4o*6I^Gl6jZ8Yy0ZAa z3GafuS>L}h=tbJEZo?Ct+$t=}^Jfj=26sAA%*~<8)AKkWr{PLFj{J*w@6i$(M(%{! zP)o;(7A+y7z^UE5bSn05;-|f&#fEQ7_qGk!=&$Mw&)cgx?#N0u8S=77e|2p7-F5b! zEWaZx2rN4{70jz5mR#y;E)>T)~<4ak^G zD^{OeFz!_Y({h$3x@Iq2UN<9);dAC+$|JE|#=CIiqd#%k`HWFq1A7F7z6!l=rTei0_jtBHNTe`j`AOrJ1oBAV{RkJQ&LvU1$|rUyEq~tjlOBl})&-?3+?x(FY zCvOvw__sH0X$QbT5yRj1s62rfqJfx?K|1JCX>$yc~_vL-Q+TJ72C#Zc}|WhzjL5 zCP7zT8ot~%dbbjQ?MYHFNV~(sn5cH>G9lCzoqJJ{l0>A_n$lqvINOZVg>Uvje=o5p z`s8XS@z@@(68n%@TX>Lk^Fk6J}c`ZjK9ZwsWrJO7vEb!@iA6=`8%Mf zhmN@um>18TzBpZ`qeml1P=R9;Jgf5ah&|^$q0XN>6FJ|dQX6C~svqmx_2pVn>whr zu>NF5cJ!>JyYc>!ZtVU`%wrXyzIFE-zP+~<`u2_i6#iU(ACCPe1tMpHR3}ZM*Bow} z9E)fBStrV`+Rf|^pfRu|`GacN!W^T>2P|bYb#s?O>%#I$>EY(=gxb2+;3p|1NbUae z5T~U!(f;&cwq@MdwJ60l6gAyx5o7-~Zs%=8jl?ApB;Z*KGpnp+%>xk}HgEnC7|U&L z%IU1zh__9oZ{d4{RCsz+8$^CU3QIdt6L|@d(z2jFn0CT5T|fNDJu4cwDA(jxdGqlz zYJ5w`-C3YxH540Pfuy=?hjjaMwe%4RO4|P<`|p;P^Wp)7GwsqVCo}!4=W6JksN|Ph zm+r${J;$8n)<&az+6djniIy?Vem6KBLCf>;-;KNpLhsuEFH_4zxOJbO3yVCt#gLSQ zfkWy^ob&;oL5;Cw>yH{hS9-y3^$EL@1N%;zs9d{xNl(+SytGjF`A@T9=?8rjjv_Nm zii19`LZ)xf)a}^lSWY)~2U+8?_H%M}N>Izy<=gWKYX4%S8CiGXNA`~%M?H^)a6uT3 zkoCaX1;lUEz}ZX@~vw~`etFBIlsOw z>Fg&vinJoHYu(;0(km4zeoeMUiD;TL)r|G&ZjHICKI8g)7Q9?AI@vyw7En~%SlITY zWugAKbruiH^m(b{!x=Y#hpv5ow&MUKJ>1hRfLp7VV%tA>>*zs7e%z;!1-z9Ixa<`5 z7g$FT1!V{9=;O=L@Jz4sUbSUj!P9xmG!Qu~X4m{nSkX*);5{pI8j-vdfiX%z$>2#cdFkHWZwHhe-NVeh0hVdT`V=|{AGVrCidfn7bk)) zk|BNR!{WM~$$5!aJe$ocBbAqNxNbab(c6s$(M*8@5+9pH$D|(89tyY$Ax@{K*8QkK z5-!&EJ2D3aoxgod5W>Pr2i!Ho21dfD-x?~flxC#x$wI`pDUSB1oagSDH? z1{%H2_tyO=CsA|dyz`^7UX;YU8dL^-tdpA`o45(TzSt&lm2{BBRe6XyGIe8dhkJ%= zh0JQPJf5;Nv7ZcER1Z(lRn4jaualQEZJCIyi#dH!j>A&n_NPC!t>Uf&?@Ltl*Qg~~ zCC>+$bu63BSXIXP9C*#ixTJ@}sk@zU2)o<=K4~{r+(3<&a9ZrWH*$Vn5pPwqO2{&`U zY=V9%P3US9sN`YxGd~;ACy3XohEk zgC*%S!!m1chs6dwybUydyt{guRm*rl{g=`Se`rJ9kZS?Agjsgz+YZk{UiF6{N;h)V zLuz>`F&v%&on?f}NuA###4yhF8<66Nz^$X zUE`7ia<5G4P;vQ-rYd2+4E#{ylIVPnUl(i6>b2|PN$R{oa|F}5Exa*+zRDgq*~E2= zUFKOCcY2TMITvc4+0EL(nbi2$le!_;`iyHMD#laJ^z{NSoTY$9);a3&pC^{SSd%th zw-E>7f)a;Xr5)OE7Z&=&Ry7+<^OYBlPPeHCdB8@Io%0bh`gR?h^&X1A`ydUXe*3Oc z8K)iJyWoSuDT6-dF>)o9wK1n1eLku-UXtwhH6wy30)vLT76zUiNWdUob%?-!dw|V~ z{U0ys>#n{ol0T@%S7iGE=_g?rQV*J~VE*F{@!-3K7WVhS9=Y@0(h1T1x7aCww8*R2 zt*JjP!k@{raLHl`D9H8RWw>{q3vUya=pLH#DR?wKD%LXHBt5xlezUm#I-Jj@@MH*wQ=OeAW_y=)F2eSiyT~gIO zeMW|ORr3CEaUBx_j)h{&4e8%^k2(U$>pOX@vl;x}Nmd|>VsMV^OsX1bc|-ZXoO9|? zy^yB+6#nG}g>UpB$HNo0zjnXJL^C1)&rVw96#$K;QmNE#^ zR@3#W#=Z!2kEypN4O`{wixAg;Ons8ytP}a#BUJ#H5XDf{XifI)R^C_^NE&SXYLDDf zuSPS2lqD*X@WQIhf>l*k%#dt|$U`rTRgdYCwU%U$*>iFhi;VKkRb?MWM0;Te^Ae4Q zk}yWy@mSuaM;@CF+!RwVk})oc@9fVgP@}lb=<=(VdkqO!l=PT$oJ4W76Qh18+sofh zw~VR%Y?*8ImFw7@`SE~wp3+j4H{j%B)Ira>sgAkBli|$y{dbb-3Xv})uPOlTS+p3DtX+gwHanT=aniJ za>m_%wUsWSi1WI}MJ+LJwr7+wUV(U4t3oG66B4{ZQMeK@`#GKxc1r4Y>#=lk2^1l; zua))=65DQt@F`%wXv()QpFK`F2-Y|4FCSUj*|a7?{1STzj~aN9_`@U1=Q4d|Sk|6} zFj)-{uMaTIvwN=6*{42(=(&d6E2OAqd+*mvn>+W6UpoP@rWnaaXjx!|2w znUNrgmTQ~F(ljKeAIZRV*LcSZkFOPYw0(>j*)mEIU%W|vQD7aN{eYue|2=QA zN^(EAQrO_MO|><|{FBo$|jNv!%<=e)o6G-&?Js2()EvvpHjMj(7% zN;`vt=jZ90={0UzcN9k-`_r{6{I18~H$Pj&ym6LIrxl)c9TCF`)GUlC;**0_ul$+TPDNqCktPSM$G zOefKNr{5W9zSSX05mdNH%@t_hVuAY!AF(as59}B=JU!Mrmg;_6oa{e-pTXCk_PxaS z>(^sOmD{bFR*g%fURNGxY8oydD;rtQ7{OGiUA!t+fpxF4e(k-;$(43hr^NeJ z;WXLe$#oY)3L>Mn!RBwG+avdtNu66Pp!B_q5$hSG6XuFFF|YqDO{9n~RTU5S7~BUk zw&l6cm;HXnX;dDu{L7{J^W?A5=~H~u zQ)<5z;AiCd!)RzbUQaOp_pqtgd++K-!j99$UyLn$<@V5ZZ6+b=AE;^kNe~u)@WNP^ zC7!hS%_1jBgv*Ck{7tkWVMJl)FT>xzI+tXGwYSVA$o?IdFZx|%qJl(6xr*Pv@_XaV@MU2k z-sw6zmtY;z6ISKJ>1MueeIoo2gjwK^o&X$m+dT#N#n!rrx)3ptor->Z^hIjJX)AJr zLR!m}{*YHJ(DV%j@ZDB6!Gp76-s1bnpwA#M;@EzHegG&1Z`Lo>$?tRSP zQ0Hg%=SrQrz2}Cb-qu#}=rj8mW4oxSM}M0?HpG9mfYy-f`^iaUp7dLSK0m1m>cZNw zGlf%n$>X)(i1ty{S28s|S-_=4&;_DG{MGgtqTP8~!!9r~iC*%uS8vMYKl9EJx#Fy( zKDvr-`CZER(bF-^*GBn__ZT9Pk1N4h#f61rFt*nCi(%z=79E^?3mjKUxuG|iF~zbq|7+fYv3KL;Zlpmr_Ssw}7vPYv*KMIOn{xzPP{s zpq{W$X1~#|_+pYpPOX&4lhZjqV(UNL3Um=dJn@M=S;%~_)Y^<5?@D(6VDBG$xbujT zh`d}rw)gUUWO}MN)5cW-WhIx-9x%3=oQ^&uWl^a?(4R^RTOO#ok@%PuMigI3_RT%Z zD=)=KB?-I5q=mT{QeW6D+!|0WQ12ir)y~pu?M*q0Fu-CvlJN)L^OaLD`01^w=Ko&w@Y+YE z%sz{KrIz|q>LR6f4UbQbNN1yT(&|gfY*Y+`TB^7dGpCqb?ts z-%#Bu+<;F(STAXCx;4qfw$ol+?y@@IPVHcKkG&q$RV0iReB#(ZSvM9yvVr;Yg@!Ec zjM9C8Z+igcu02UwGGR9${ai!)bSy+AE?+iYIxC`2IX+)C;vvaaMoy8%)6n>$H&Md6 zRrmoGk+F(Va6Lsx?Z4*V3&<~9jQ(AO77lac(71-DL51GNiPI{+HLC0G>X8#Pa{nss zU->pcCTYZKc< z&V6&7bDzGpK{*t^F?fharqtO4-oR-Y6u&V;`e@un#O$&ohqt?FN_+l_hC?(2ZfnD@6|%Gao73Z)>j`vir5AJorMYo1<)(MdID}h?0LZR3PIjyI(oB_}?iGPCOHsAqOKC@)R{8{+PO+ zNHY6Nx;yrNrWfB~N$;+QX1*K5hTN)$J~kRU7`KLraU2Y;H2tyfem2TY{=z<;n6c-! z9nU9YbtU9p>=A-o+6G6Gf~ZAy++IT2lkXI{`WY?HU~m`uX+kf?wWiNSZuCx=6?kLOI;EC&zS!; z+?x@To&lW#jfjWVXOQ80(;P=Fsdk==E+o7kw@t>19!FFPkd|6CH508j(R;?WYs*zO zKmRxGXu$`3)`Qrm?U4VUQqMd>C@90Hc6qIai0x}gnAE@G;o1Cu}T(j?C2toybvpOOZP`=tSzBEO-9Am#3G~&LjIN8&c1K@7<3K zA@ZG4lK&a`exQ9^6!|~sabFR+!t4`to!&;?8W&WqDs*rnK*#)8LsB-TIzcqo_7R~h>tUd}&x78ZL@_&Kq+Z-%3Ht!29 z7YC8D~BwzQkf4xyKJl&G1-y z&BS{+6utMrv#SlkCyFVny6l3x0$VZGXKf(+FiFiQzMm4BYUAH2r8~c-Mq1mjPUiHd zh_QGhC@pnJ9VYFE_>O=As!9A?rxmzdXHw7J^UBhWMNeAxJeD}m;I!_zUVH{#*0kEr zBG3ClDkTL}h<>&Vk@;pe;zadhj0aD^rjKuX=UidW-xdEBaQ3Hnw6oxgwE6sx)(+19 zhXUL7MEnU3d{%u_C<{6UnJji%Mei*#p_`j~pDEe>G>{@@hbbe{P5SWSbow3(PZphi zydKofRmtWHp>dDC+je!E+TpkBW;=olj|!8em27+P{TCMR2lf6rA3tg7Z_AzpChDoK z7!*E{=cgH$d%TJ=gX)IyS#jU@S*Q4CD4Uva=+)MXXLSjGazk8pxF`?CO`d01_9^{$ z7WoHVJrI*1JX_<)l-j=A=8$`Ail*$!kMJ$0Q1FbwWU?W>QD*cy2Q{*0h|$S=f7+8A z)wb**Jq2rqVKZhd_&VLon%c?J|8%UHF=0+l9l21LK&6)q!fHLbt`e8+oWU zbMNTx*WjSXl*j~!@uD&AHNX5``u>bulnX%$Z~u8Y)n`M?=oQ@9;vWRt-iQVIH5*o~ zLKVWRs_0Ka+i;Q^_4}#z-<%3qQ5V>F&KhTY`e}OxRZn>2jJ`*)pkeQ= zYwi1~$tIbSV+4&uPpn7DYdeT-fA*8tb#jAMyI4J2ZnPFOtH?HP8SMmA{cRtX1~r(sT2|Q}H6Cm#!gFmJ->16`cHC+_me|(J z$1t;m0=P{-EYTU*CP00qj%)&L%VhPMbAkSDgP!wjXZHc0nsaxbo4eCzj;4=ICUEQD z?US#aogDE9r?@iBp$m!S2m&e%<6c@}+>#(Yw~15&RnMCIh1ApKZs=C*l5K0wot|C9 zqGmZVa++6ONW|v;%D8VrL~f&$@7+iwqp)dTJDiM3A(|gw9540LK)CMN>B2+4$&Jz) zxn!d25wR`2?F2j`7P+tN>fi%@+it4U%gjgWQ|NXk#gtxz2N6(zEoFFT6_sBwpj{*r zLQg_q2lSpUu{q4ft{`w_Oa0xYY7L0!ubZpI5SSxqQuOu?Hd zZtIt!sD9*anETc5N8sCfQ8CBQl=WM<;JZ^?t|V`$glZgn$iNl30-DC15^-yrL31z3 z+MUG{(h~lEUDz1G-YDgLH^N6=f~sbGjUlWM{fW93p|`S0$q#|6YgrOPwi!rwc>8^! z$wi70(pwiOSMf``JNmZ)%>HBB|Hn?Ey?A$g|BrMqHU)y+} zHwJZh_YFgp7kzpu0;LXrW{N>c7w_Bx#6=5oh^o>1T5mntgj7RbQ(+%-N)i{QuSy~*VErK#(~b9u?2l0`-9nd%yu zx+3{XCYs$@k)~#i=5}_?rgYqDAc1jo9K&VxLAPk|3nVEc4`ZS@sAUx*P4e=?IHr=J zfbGA)xdW$TR`@Dzb|GpLb>~9+ug&KgqDol{ddC=NEOcaSzIN{5J$)&;_1x=#q&)(| zmrQG_O`5Shy|za8A$FJKDwli-}XLMuB!TqbtmI4vKp2NgH zt|)B!_Ye90)ptCL$?pW64bk=%Tb;>DeA%Fa5`N2HlvVJ_Rsi#RUYj3}PAn4h2Kh#> zr(K5xi7-MQ=n=#F#CNBxPaGpfzs?R}+VJc!;CiD2t2>t+#y;vzZ{1k#khwtHjF-L@ z$6g1&v>h9E+`lZkJgZd?)Hjh9d*_ta zV?NUGFQM0lL#KpY8o%;^$QT*CYM{)cLkUNpJ#neS2=`RJid5dAp4*69ueeL1?^@ih7hj_ZZ zYk4|8pwSOW>1o@bPSNt;cER>Q+V!VC((%?IW<{KH@9d?i=`|xL-LjNaV)F-6tf#J9 zpQ_X~P}KjZ0A}ZhbXYu{=tF_EzteQ3iP^%^P(6w2QVJ z65Ofj4}V@oz#Yti0eqj+E%u(berNOUuV1g$;P>8`(eDHs^jHSi!Vh@59wNQxqv93f zXk_pdpxwME<#MWLt(eW_0mt050~IxpBdkYaw15s^Uul2&}}Gk;ZjwnX*^ zCY|h$yjLGznO**v`w8X|yx==@79#k>$VweD_xpmfn-bH0!s^)w={sh>bdVg~FF$!q zBTcCp3#ZWZI*HuwAn&Ue-L&A#>bH?VJQ4<6UUk`{iJ8Ezy5E&>z61|TN*2( z(>})66fieP$O#3(mB+fP=~E2~&A&mIKif_{k#-x&D9G}|b;=LDCXx!YVtT7D z7=Jh>kLG`4rphFfCMw(5XJuS%mPsTQo3d$DfTcK*6{tKBw1wGp2G%9W$(qeJ4^W7i z^N_WEsk7=u<~(uIE6u&C3kPWTdUsE!h^6~UfI$w0BKj303a>l%^vFLYfaI3>qK`B4 zyI^I#Ufz)zRw54W4X-23ibnr3muk@dN&9Ig%`vH9o7hISw2O=SZ;&dlYEE6PG+L}RfrasobpxIK`dMKTJBK}sRW6Tf!Y~}5Q zruv-&p2CjV6Vr^pkKi*#`%WV%`0`U>ZPXkyM47f8z_Y{^tFfvFwu?J15mR5mVcD zSdfA0^MK2S-V-MszI6tgxqG(QkG2&bJgNu$c3*|Ni-7t2^kVs^ZOZ?=73*?GJB2In zzg^23gsN}G@UMJ~P{+v*5-+^6(HvwFRd3oy7k}JCn9KciV``Ys`he{YIms>^Vk(R5 zsLn5yE>qltU_n21i~ss<(}yR;k%>toZOlht@P+M8SMTrLKr)`ZqgJ}WIGNNnc2Kj@ zB#RX*I1H<)P8O(8zfU8zHK`>Vj^j{XyNMni8Hwy4`OkKioq08?>gk3F^jr3obMf}{ zti1h(T5thcUSD7`YF0!p7W$z<7BSFoLGY(gvODG*v&)cU%~gvZ@Lk_fq{q@# zekAOQUWJCNzbAk-G>tf9^KyGJ#X-O-@lKbhzK(z0)?0NOt0;(QMp!ne{0b&<;fD$BN-zW38fC% zlau&n_l-)fUhY@!%y>qNLkZW%mt!xRL$^asdY#u=*L>El)}E{duPIpR(~z_DsMIol zBroo9sO3I-Vc+vjltZ{TNtDH0@^j_fO9?B`L6}6Z+1gRAN$*weLa)>s27gKDewl=n z9ExB`ssgpL~Qw-c7j5|Tv)2JfWi+V>`h^N?6@cggw{Ub3GM zpXi+MpSYdio~WL%pE#aSofw~ppMX!WPZUpza=q|7eRrhf5VYWx@#_$2-m~spLVSq# z4x=1^%;lvEkqem%i3>U61%eboe4hf32tkG*L68Gp07wDEfR_Lw02zP;K%V^~n>3p^ z`(-v!Hkk!im!eeOXoaIo z(+__6@FZ|8q=zs9Km=s>e|yt%`RpWqt++=sBAW;(A<5wXQIyBu{3hU1;Y4jMxwjfG zVhz+=9cDoer}x*rNxD2-Wm@ybRFGDXMoLsLF_5i|x#8A#V`J2*9fs^euo*s*E zI5Cv#PVuJlQsM-)2KYuuEB)c}c$KjS7!D=IaNa50lwXRRAl86A&~OYfhU-r0rn(_p z@HM^~qmIT9VK%Sd+Of({7Q$?PzrACJ``eeSQL5HDGQ_X7<6ax-y!N>KtP+2=D)3s) zn1L%XNoBb3wh*fTt1z%&TX`%oi$x0RU4HgxH+V9lAh1xbK(6p-!Oud*0>;Apg8V}3 z0_(!{g7reOpSqI~g?TorNj7SupLE@rG}%>b2a`2oG!iu8G?Fx8H4-)AAF(Acuq6?f zGE^oQsFWA}E)<$H-oo<(wdlZ^7l9G@8_;ysd0f=sejv=`(pX`D8M9 zQb9+b3eaVi7Q%7P2e*msF{b$0o8-F9(z zRd?BU9e2}K2~}rRXH{m^M3hBTMN~x8nw6VXn^l_Cyp+9Ey;Qu^P|7G(lnP3XP?=Db zP=!zprVLYssle1Ul{Hm0RW#Mcl*d%7lgt@A4ZxXa;9dMl>Ov6}m!xHePJM9tnddI; zq(q^Y3L6*N*=108;*zw0zPTj-*^lF-EjF+oS4neF;cq6z_#JClTk02N@8Kf|paI`zzb zmwb|^&?1V4_0||2b!M{bHHjz$Dnk?QUf&v_BhEm(E|V*T&`27#TU~VWnaeJ461sW2 zLGNQo7whh3PM6rf5x_Z+$2nM6F;G@9*!E#SZKDv$@6*}=_xs}aSD6*?8mQ!7bt8Fo zg?zq2KExA8m_!&$m`E5;m<)@7CBWifNw8R0A}k)33>x4`il}2VspFEUlW?m#7-VYY zyhc7lh9OmugGe@HDbm61RfyZ`em4ftMk12^J~vZahoU)0Hhp#c?6Cci{UG&56q4De z-mj@cL0V~<-6ei3aV&l;nJ0!PfhVpU*&<1=In)@-v3ZD0kmQ=(q(w$9#@KHbEyitc zL~J%K#vE-@>ta25aho0nIW$c2sOVMNRd8(hu5`G)SQ6M4OX8V1AwS)s~zH8(_8`N;ka z*l>0XkPYg%alg`Yb8H|x5y%2HzYDlgxKcwVZ&nXjB*K}YW_RCi)UQmC&6|jUl|(oT z)Z*^zjog(I61JH=08E53V@&UYZ`7_p$m-3N0eB*m1!H~}c%yWsiOk-F4?q(!%oww~ zkQ>b_3nY9KGl0>*(EXNRX)8a-=3}czsf!z)6B=GH5S~{OUbGXQ%c-5jKAf;QbT{;H z=NswF(WYrF?})hX9-$i35F_e+pLL;O^dCqr*7NZ z+yiDQ?W~|*QQORJ@vX)meLu2`WR`DxZrCLx4zb%dy0z6Q8kJ|n?z8SEoDZcA84Y3E z=GUqGsmQ4OpgpSH#J-T=o_LyYn)p27d16FD8GqGV)_7I*KUHtpeyf`O$sJ+Ew>5BJ z=d#skHFV&hEi6Av$Q-I#>}zRpJ;t+U(9F~0eACaItcR!nh+yiX~Te{*w)BLTFv9PjIL1ZhQWOUGQlJCYkJ zPf$xxa|aAVBvE0DEbiGu5OGxMqP=_eFhm*^yh!eDF$57qB`$*8EruadsHjB|_mv@t zN$cBI(^lD5omO_#&qbIUaP;;y>i6Q98*uEF0X4i>?FJvcWkxM5A`;3Iof4c9_uZgF zw_+&rP4Fi6rs5{^rrqYt&6!208|D`x88Ae+t%Pj#lLn>%hRKn#<|ArD&O?Vov_qLg zWbvJRa-oh}_HODjt+Yv}rlB%%0}g>8&=jJ?{xJf1LNmc3fn zJX>biaDGc{)U%z{75#(^cW8a8-sB+T0%!NpN9b(dnx6 zV_7liD)-a8>Ox{|h77?H031MV|FWC6SFOnBo5@4f2^Ji1ZU6Ecjr)O!vk4o@P5^R1 zweQOAM^-zMa5H-do&e>*Xy26|6%&;H+zU<9J>4r2FM6pbLv|`ss<>!&O$nURLH< zRz`~hG)~xENnl6W~gswnZ2~vfYJipp|K1E)}qeEyws7zv!}4Nrqg zs`V@i&GXF5%!|ykFlFFia3MGm+z5^WSAsLao!~%lJ~$p+4~_trgVVw7;1F;zI2qgw zhJmZW*)a-w9nJ;z z?5D>{vqA72f9=~iwCy>^9%#C{)B*(0_1C>kLOY*J?0HQiN>@P8oI9=CShV#y%bwAr>l=J$Eb4s}KE%ZeP@?B1(26wdQIw>H5&zj)?&#$3=Gw$7h6Y&-Fc zo0oJdOBhPXOXx|wl`xf%mC%t;l`xi2lrWIckT5slo1ZeTAQRH97c_Af1f4d-8O-<{ zK0cH`e0^whNP4JuD9AM~%Qb1mHNifw>YUhQEMaDnUpYNGKI5?8D9~8nfIqM39N%Ol zVX}~yneRN^FApo{7aE$K5aY|Gooc?#7j%c6 z^Vbb1C&0LL2}Jq2=7Q)jf4={I6pc33_? z+fePaGTv1RQM+!spgnA#M>QavfaCrpx60SG7bJ(p^J5L!PVjO6(p%N*#tZ7h=6OWJ ziW7AFuH;tby8eRvuzG%_0q%quzbm~}yKcS!9KzB5=osk=*p8S~HEhosEJOZTJNdH_ z=(GOpXETvACbSMDwaawH0{8}~bx*va?@Vuf(5L6*J3Lbs1%L`b9-s_R1gHY!0!jge zfJ#609a?)uE|pr8SQLQHT_LjBQ%-14h-&uCKAHfc=(1A})^*u+NB4qF5Ibg_ z#fT}d-S%@I2<#4uRy#}HhCIADOo94saVNdDO)L8sanZh zDP1XCk-EsQ1?;1CP5 zeeb*8_5J?HT6vPpOy+rx?0wFj8PGi@l>CB!$9Z}sw^J)1hL4gY7*x%)iHXvSvE71JoW9 z9xU%)L3J)FcT8qFa{@FTlOG)Kg`n>MGWR}6N{{~C69I3J(F-K?V3C0KegOIgoq<@D z>9hXpa-40kser=Awm1Uj(4mAwGQ&qlNA zuZybctIA!RR@-`RLILQ+L~P8OfORP4h1gEO^keR0JxBSY%46#T_I(z#^E_bhapKW_ z-x`Cow?87D`?SB9(~1D28wYbJ4)fbv%uxttudW#jtD$yNn~Tiq_a3d#uYehX3RXj% zrVbaWRax`2>c!cW*Iln6uLr$jP7K%I_n!f-2o6~nb(%Vl#aFv~q(Z|1u>>zzg|)rg zj-^+JdNle0U}7?ME-XGQPAt~8ieu0^$NF(k2D&p_Tfy;k&jOehOba;TiQ$Uji{Xsn zjp2^r*Ct`-`xs`c8|L^rG?rLY?b>2hBlHcisK&L!s(a`-amU+hvsI-~cH$28Yr9qZ z&`RPCwQH+YgD`t<*&#;q4p+(5@czhth5n&_rv8$CTUlU;tVN%!nI<@?pV_?LwWYdW z*Z#9<8TT}~HJLRjIXJqX-n`beq59kFfmu5T?lImm?lFEg4mKV(uG0P{PE%zvUh`H? zOJ#CT^Kedc9!(-7L@116(nIZ)~$qfJKCbi$#cqk3}4V6GITg<%KqYI)FZa zHUM}PLJW}UCSd6%dfrVaob&Qi^iqGDORh_TOO4A%mr|E>9Ml{fwCXriLeqjOMP1g< zY-PC9=+>xvAs0PqJ$gOJrg>Egvn-!k9dO5R8_*X*+(XYo&O!kpfY7LrQVup{)I>>@ zSvF;~ACgA1)FY^vrrI{>tfs0>v$N)RStoew1^vU|6!JTjBE8f!9cGHQ})(r8j@ zGH8-((rJ3rWa2IE{nlIFTi09KThm+F+t6FmTisjHTi;vOTid(-m~6GaXD?(1;Ec1( z*rwoJdrY)i-m?(W2spx7W@=ONZgdTH&2vq3t#yrZ{d!Ej&bRKhjoqFAL9d})AoparF9c^7-8==VOyQ)aSmBQ@5J|KzmvGmJ7!p4GVgZq%w4jJL0&(YADh>Oq}%b@ zbLVwSC+XG$YmDt@1TV0n=#Uf3*@zb|HZ?tSXUfsKH@wYDjh6H@fk~G_gIu zyMJv_kMpuDV;~4oMQ2=*SZb1MDl$^P_Em`9yRc|bt*neT=D=9E?VeTAvAb!x!Khq` z+DE7eovfahB9B_eOG{1LG@BTX&JJE3d-c(Z>zmi3K%PPbP4I0+U)n3zO+{+iFwi1< zoTr_zv13N>$rs7Ca4XMMl2YMxNCQzK%U(5NElmz*=u7gWp^knZJy}&AES=ddRib8U zI*&dzJ%wK^qssC%(3f+J6qXYxwGtgs49Yc?Xo)OeIEI$-k=wU^CpuLwJy+Tkypa9M z6pXOG@-zz{s7V4j%{7tzL|?K*5p5DgrG1;$o*}}x@TK!KDYM9ougv%Vt(|Z7nY$+ zS7%11rGun)fxlG{(}f~gsRGROL)ntFFU~Ak9q89eAAT8q%gB;Xou6dZe_g++jmtij zpC&kDU}Zb`xy)03cSt{DLDxsNBY~%=&>m1`^^IJiWlD0A!mzK5YdaW@BnX!z7){p{ z49{Uu=8&j&_wR>;?lC{7+L&}J%MU#k%G1*8VAsscmM8~tch>knvDOIglR(+fPE^I!ZiFbiF?VCvr5XKe18TKR7*OCdE644Yw2kO8V^c*vr815S z<;^_I14-l~@!`1Y#`I|cLL3dfcA(3TS)O2rrkYDy`Z_Aoo3FJJ>0#!@N_vTfSeDTr zhbEo1$?!3i++@xy6S5Q}=tI*8EY&|ND9~#)5u|VrjptJ(%KNKNmm$>1ZTuj9qgbSD zo5HMz@@a!N7%)WE5Laf(ki|Pk)=t0R4(6RYv9kshE{|F5rtcba^LElZ=HI37E*g4z zu#T!23+Y1i`MhRM@#>U&;2a#ab342yDiREolA~7Zg=ELGNu#XKiPO2g*>suLR=Gj5 z`oRw9#Bwv7vD28Kx)@N%w|th0J!?g2p5B%YjXk2HroBnB*tjGng9DMWM^`H*TN3b` z8Uy(uV5Z6K!HO`GlAE}TKXwSrbY82NQo zRa(qWp%w50pZO_t*J-Xurg`d2@jFZq%T#CY|9LeN{i{1{4GhmXVYcH<@YGbgTe%#RFqnNU573E#Ztl(=Xa@Q`iN)cDK z_$topCy8I`E1uKdWM@&~s+6O@{_R(8q5gPotmaU2t>S3O2kyci#MFyWkp!gm5IdIL zB$nqWzu@=MehPbw8*^pnWdFY1{u+v_w()SgTN%o!*3@?k9-0$a8MN>hB!-0Z7;85z z9u3sd4=RkceBv9=#cz2#dMZ7TAP;Cw7RJ*d{q4`-jwC}|S}f)CSvjNn#K}H}LrgVm zcHnk+)SGX!pLq1O(DyeG_v1e4%B47Z^ew9NWGNC^m>L={ATkFT}_PwKc zjLZ3Gr=ci)3Js4Nu!l+W3@!FxaL6&tjZRpsbPkPl4n2g4L`q%^$q02HZ+xj%@UrGn zl)oE$GuBvG=$^QdA0Ar46NW4D-HE$T|M9tc@0hkZ16aR7VCvHI@Z54kdR@HRQr+?7 zg%){}aw#k9WvNwmF=IvK$3ec)>U~mjV1H7=D(ZzrQZrctyF1i3){hrN{I(Y|??mc7 zR^tRQ)eSC{zp4w^3%UBxZ#K-NYuuFl%v>bcF}Ae>?w@N6Y6K5tFiqP#aKx%qH?Sz@ z6>K;a1z6Ll9B$w8W)f+n($f|89G{Qf@mzd*SjY}m$#-McYu@>pwbRb#%e>|hFrsos zPlLDF%(K*aj9XM2&-kvesJ6cDEyE63y{cR}`)j!9X;i(@? zZwIo=egs)SUs`L~gj5TLS!QAmgZNnX0N5QD519%Sp5kh1^6t$0AENMxYv#7Dx#Z2! zFZLDRi{gjx3Dr^b4XYLzl=IsNS633%_+G3R z8W5J5VpXFin8@qpAGXZK7cnep-XJ=p%8tpxh>2H};hgU-Izv?=N6y30%&99M%nJ9n3+q*yM0EK6#A2xxg^ndX8%1(aYNM3Z)0jz zH`^{@-`y?|l{DGY4j17Qtj(vUf2-g5$HN<#>X8pI^#Mnizc5FM&|z=&>hhYi_6er32_muy#@gme z{(gE1;y1u|FZXC@XtJv#%3}YvJd!({rwAj>GU?{L8GA<@2>c$zKh}G{IrtKdwcxy| zca$x&aqUoPgom;N;ujY7C|WGzT&XM+b4H7#GNLywf5|)5YUO1{7hd*QHZD=lA2?VB zekx}qD9~Q-TBw0Sp>S}Q&?w?Ev|#KzwD2yXe`GALpQcD& zvq>g+KoG!&!kp*um>`IdLX`;@(5KqDmRYuzDFYk9UV0-VFI5hAC}mpq$)vx0uaJmH zS!%Y+n=j`perHs6z2qT7cA%O+_-8PNV@ePAwg8xHz``lHoUr3X-$!O`Rhquw-kNF`PtNG)qg{U|HZZ zTG-QO2Y8*?Pn!DtO1BfN9J1}~eo!`17+uletPv5CU$#?~n<2 zyy3G8cC6VS@gu2aada!ur(lSZDl#73)Y1Rl4*uRBxnnfNqS$7A#HgonWyE);1r<^E zJh_sWfgrL%kSQQYB2|65l2EQ9H2rK$!E6AC>J%+1`>z2?vfKJjxP*oWVQLv~%TzU4 zMWlqj64H0+yr~iuqU)o1 zyMyi9*(2ok-y`GPNdIxxzye=>BNKPen%CqPfzD($mLWeS>6$yPuCV_7ZQKkl$PiHl z0xwd26y>&bBWij! z(tI{TOE$_WIid9MdW_I2nEzTB{@Zj>>{H07eF?;56tJP#z#j7`1btOEU zkPiIY`4EPO8G05^s87{o+Lvv6P*Hum(xw?Vx3bPcVleXij%njXy=oql1FJNCuXBLi zrDfi<>Js&ycjt_cAE&$N%}>$Bon}9hP!{(|H=mk`JyG)Ao(o*EejWaP67B9rG+{j(lE{?@g| zqx@e>JWF*Pbuv6HbCV7O+r5M+ESt|c>o_J34@#yM$|sy+7gI*7+=3LHlCLFWF`b5L z+lAl%EcZG)ST-zAw%1(n3>1d1Rb|UxL2{@(DvQ6Faw^YG;X^W0th^ejKJ;i!?%*#aU6XlbymC}{4tlE=5rlpXQucoc6Da0FH%JX?wP~8I8yYQaT z&aULbJ=;#qyX-q-;h7`I->GGqpmC-MbTI$YmL^n~eEKTRu{?d5IBEx$f7)g9rju+n z8JU@4G>g^DOZk?mMDyvmjEX?|FEQ|xl!ue-M(e0H4LX4#qnDP+pS}&>i5ILYuhe)z zXlIjIT>$;R0e-<+C1Vqu%5IsCDw|vL7jx-6bGy;}cFOc~;}Y8Jhgu8^A{9j2ofd&= z?|qBq;ge)&)6Q((T5|R6+(t9&iOC4QDv?71;Y%ZDamWc)@+#!RW6}jJQoq8}39+l4 zqFXYmWG23{%XDg=${&EYWTsH9*W=UHv>{=Xgo=hH(it7H*Q2m<023_dtoN z*_myt)96QdK`c_P4a*_LBbQ`Glc;B!iS&Cydx^Z-Z^_yz)hfqE>kV3O=WMmy;s=Z+ za{>hWVnNnnjiZac`mao5cr4qcyr@bv?2pRc{IvRdkQVP0J*xHt3$Xv}&{C2^-(+Hc zv_UR|06EQMXZWz$wnK)%uGW3&eNADEwvNXjwX?@((;(A?oc^jz(~qXW-s5+H~n(1?3pbX*J)sM@wm4qliNvzbc)jpMEB`+ydDSxkU?+f(h%XJ$cn(Tvt ziAxr;dH?5*S&BBdu5}{#?_p1Vaun;RIv60XzrS8xd&zjzwc#Kip8$Xx&0-x&Kjjwjvv9rQ6BZ#Z0dnc@<>goAAicoUt~te8Ro+q zD$D#CGpiAoAQEffvK5-G$dp>K(a>(Lc}-6JlwrmpE_p_*5#NGZ(t&>x5vBPdsst4_ zZXR?$RGnE!toy1^dgviX)4;>B>-dzN(yLxjV2=J4pEPg7W@WT?;km!26}us^aE%fI zy9Of2SrKEMD`}83rY{wLGRoa9IUQAa99afYf+Fl&Qg$u3o#4Rv&OB8| zB&cY}1|39&Wz-JraK^*fUQ;9qU8W|KzWh!{NY{p=XqlHqSK{8O%ZTKUUjYHB#}gFe zaF+mR6l_i7ri`KB=`@>qJ&Iy$RC4>6cbkI(YPQ-#ww}a1e#zcHG73&lYNrm*ZOYTW z_{-YYGWFZ3knw1nt62yNXT$1}J1czHc?ifK`^Nmrz|F?)xeH$lr6R}>69D-;cI~5F zN&{CFP>XlzrFj-3_`#xjO0j~rkJAb(D$_hxvtLwWcJ$j{ar+fc&+0i7mF~M|&q;!g z_kM2LOM(n(rb<=NcSg`B(_fX;C4bH-E@XqSuxgou{PV&JguT1yC-sKZH8_ z3|wY~_GS_;`xY$=HVn;0& zv$I$U@Uo2^X8U=daJ_KQnZ=s@>KYH&_t|>%4cTwSa82-~dT$E)!9}a#+BR=f*U~yL z$>xL~rhVn7z+rU7_XdHRQ1sE6F0;YMO47-A^?5doYz-sz`3f~U>D2&<*tw@++AZ)ZvKDi+dpH0+S=cqgK3etF zeoA7{1Sfl^_(+z%DLuD)MZjB>B*42f4*dwhV#6kb-Sc#V-K8DOshgOwwmtHnJ7ju! zx=ih$loIM_Y0cgHmVtxMh1xl=F^o@x-6%VBd5y>3)AL>eWI^EpPYjVNGHOK z8-XI;#!2Tl()wc+prQtUtZI(N`T4}mXkfnVx=LrN`j2g7tW(WbMfMEhl%C1w|64Ehguc1!)tfEhnMMg4~H?-}5ok>NpemEGIXW1%(nDEG7lg>Ua|y zTonojWEju2!NW^NX-1}7vNrn(;8*A8sG-ZL656w*3HJLWXwgfB5_*%J)Eo4fD+F%A z{m%zIXj=tF5`H09Q-&sU+NjOd8zl#=#9PF~<@I@&XR3Z@L38?={e8azQPgsVu9)VK z1t)1Khzj+JoUti@I7r=v0$!_k`n#uKGm(B(@FlB5ys^#h5!qs$gUi(~SuVi#r|jAf zN^11q(mq+J( zdNNsAkRh?bYLZVr73uAy-m|nZ_`y^p2nV1zNbgzbKZ9&jB5~5sNE{c|a2T*}QLN!u zQjyZ&YJq`Bwa@GVh`Kml1Asj&A3o|mqsu^oZ~~q-=w|saorS~!BoZIBg7X*&k^opq zSaq}LTI`O)rxK0AlMF~+%2D*5G)$xlpK7(5bJh~zwH;F`2>zfQ`mzImBj#6_7}0fv zej?+~(*`~Fg`zxc9?$=9-=WmSt`zd~zTXwT=b&wj+>m>;NI2J6-H&`>yO~+PT278$ zi?0P`#;1Id!pQm+RUaIK*1|NJkM{vL74?-+ZNAw{e!9eM=fbkh^eVo@X;%fqEQ@|j z!vyX~;YDQ40xi(b zU3}z57HTcrTizmVGEj>xe_DP{C<`6yP&=4D$#hQY;2ZtXsWIfK@O5L3zsIOemVB>9 zf_w1*C_fAKB0VRih?=A&5|14r+~&7?>%?`xhvyG&e&H9a-+fc~Vgmi0~HlnDvb(-l-!OD9RLqhVq+h zb0wpgQLrvCkP%vM*Rqlcn>X|gPnFr`yyykeHmnj-3aYp=Dk1DhSJ1HU+<06>y9;~w zS3~{N#zksJUgY)rgx*$q&vodi*DshV4#$6ftIp@m1kq>BrC{rh8sl2eXjMgJSaVrx ztIiO0c$&009#e=oC|El$6t=IEW+)g>c|?vH4zd80-aq`h^7d(8nBFSgFtq>`rjs_P zu-~<^QrqTp-(E-F{C>%h;9EFPI$|ndq)HqBZ24qSJKJEfV20m8ET3EOa?dYZtIg8D z{$TkLRrwQdd2{owq`g2wAvBBB=0ea2c8_IObK62nIa^FDCiBW}(~%?IxXs5c@pO~d zahq2naaPF4lZ##ArAIzgq#8caUqo(6MC$#(Uk*iO-#AxJ{J5pevtD}?0>MBM%P_+w zuQWkRyoIaa?Q;&FOHSbBJ}eYPi8@vs5$4rz%e~BgjLm^jr|T@K$~uRK0POaUT(vWh zS|u5X8F)C4ymcqV!Q3^|4_;xw-rwBQt70ryny_CH4cv`bwqafRa&*=qb~zo3--odm z(Xk3K42Ve6J4<=MVM4zOC>QVeaYe`W`$r|OO1qE>$8mKHmkuRFwnWORLS%_+H6M`N zjgwWHmW|m0jO5((qLgk4SupSCP}|(n*VtH2eQj(%4cJ&NoKG!rvW9)XI#la@J`@;vUL7doFkOpb zuM!!`H<^m3NKL%Ri~HW`Xlz*XGkv4uPMXjw0CFf@k53A`Ycd&npB{6>Pd(;IV%fM| zA>7#4!)t2RY4VwtxEj{+)RJ_&EEbzANpq%o1c98XAMQBRpZK=pQ;7gE8E|a})RteN z^ZXGtT%cK+=;c&2E_VK1^Gj+);Zc>kh6*rNWCMdeF>I(~gt0DS98;aUz-U3$$~Mu@ z4tSg>e<>pySjRbvYJ!9W?Aa!Qk!uMQ4+-r5v<_2?uaDV8Y~t(NyLR1IL(%cmce3cU ztv@}qQsF5yH_hx$dmDL_;&Sst%9Ir7EPok9Cbvh=O(+T(sER4AuOzIV)zNGR(#736 zM)S@}r7Ev%L$H1ITTk$+)a3ycMKiwVk}m1z63~~g7t;61Cs8EKIJgk}uwD}J)}C)h zl*Xl>iyg&J`nGKJCx@`my&Eq{|HjY&?`KTcGiw;EPHm5EJAVFFsm^lew(fiYb8?cw z?p*Pmn*hH$Ht<`oDc)c0&w_ue4ar^qR*!UXLGCu;_dm8UxD4%DhsK0ecEufD(Weii zjOLf5PJO7Sd=rkO1`V5ozT^g$Tv|YvE51*AIliT?r1tEfv6Rzqc?TIljO?hhMB0C| zMd~v&LCfD`+lzmeAhYRF1|iP#CBP3(C)++_(z-af@G8m>6yj9rcP)}V(r)>Ikla1c zTelDANoB$$BGKJ0*`k>5{ua1}qR#!^1;PkGj+&rOnH(Jo#7jAb35+F@745fv`4||B zm)aP10~{TLc&G$Kr!o@THLX=X43z)OekaW7GW*T#Y(HTAF)U1vKJK0u}7g#TKYp#2+J+fAg zLT8Cyl&r#9b9ElVNyaPH$<)sBK(>E6e5oIj5Qr)U9m*_kTK-c8qN{r9)xzAq9|*6l zIj^{1t2B9bo3}N0)y(03bWDurs`;0Pz!^ahlz^}f6%M$IM7ayy99F5q`Au*6Pv<}0 zRhgjs`TuiBrP;pGjw9*?Ol6Pl-a4JK{yrc}YVugY zz_(^?&~ecM9x3sfa#UaGyND)>8e@vTQiFK^T&1YQ;EpeqK4apmM}AekBl69amPY|wZxX?`Xic@zHFTclU!k`*nt&P%w_|DUM+w(t#S~}>c|+>$kCZt5R|yd@S%MOy>(AMX zD;F{X!H$ss%*iv1Zd6!Am42^)%Oe5!+wB7%@Ib+Hs-3Na6@vOcX}V=)l(_cQ3Wh7A zecJSswr`Td;nS4P89+P_8R)4R!$f!VX#8$|E|PY4GsM{d&7utUq-##NBPzE1t=ZQT ztLP%RMM9Zh?h{D4^v9HfJ>#*1Uwu#%;{+~n4>_TE`kPuQ8)#A|$&T11{#K!od;T7x z*8FI1gFkvtd=Eh=i4rwkYqGa~gXxPsPe07(2!%K58+2XPoeh2k!aogl zpW?egPj2Jg|C#MkBB|e+SdTg+t?HTng;5FRV-7;37j}zi`!D*I^qq^ypWOSLJh%@H zMFPn&IBUp8!5?FWNCdJmpQ5FB$|MVs1i*tNFO^f31ix>6JXYSi+T&%@Ac>29HUbDp ziqVCtOwvnZ6NnX2KhIA(to&|-#(cz<+BgCPI$jBS#9hnDe10fagg|37CoLds0@!f~ zNqLKvr+41PMe?DTp)o~dV_kgf1g{U!g&MNN5=1n4Q%rn5DANIi$vR-BOtexbjspAf z;OzpO$fu(ZhU~#`sGYsAjd3HO(lQWuinzvrAg_0%H!qx9z%q%Pn+K5|9cW@M1~vw$ za$+&Ub}8|`0|0EXUWSbq60OIbA`y-86MWgmxcJ`99gGZmGl>+gc6 zs53!3*vh*%`!p~hgLISg;Ex6haTz0#ZW|eY1{M!luo);0I?+HzICm$-_*H~0mV*LT zoj`am^p{F!g5}@J?ti;#A#9ejQnNQL;g|JM*+?`-Z!ON_vtqe9 zJh-ysvarK|U|-=X3}mXwlS++!lJyU_Lq8b6s4{vO>GGQrAq3ZjD}G5z9l>h)24 z+X;7L&l-_Nm@SBC`@;)eWSF=iUX&@w_i_2BR~oM}6sfnkSPzo9j$M13+Bs$C-wHFofu ztduP(6TrsKlYF9I9rs2W806&^N68)@`{v1^r9qV#$Uwy0jshCgM>BGdZoKVa>iGdU zk!#1mr?bPkP_`RNv1K`oc}_@axN-=MS{( z&H^2R_}1PtuE>gV_T2bCf5J3`vaSEShpZ6c0! z+(m%oxG~u~uC-Ph>j%TWonY#S6NFZy?uWh9!4$ES)WI2qcoP9hQNj)UAWqa)+n~12 zZqyqjwg}<_--q{YFQ|244)h^_Z#xL~=Wl#ny7BH@B`R)#sJSn4VD^NO>mQFcpAAUn zz&4bfu^5>?BDpx{=%k5DF_CD!j?gh{2|tNHhV}zPC%7cYPu?0M`Rla>3`6{`iGzr~ zpNQvQ8EpgOKC~_34GvdJRHTUi9KWjSID6RKGQ3XF#L3z^l8WVYmb})Gy?ctpJCbol zQQ5RBsVha-RCiIn9MUZ$TRV7p27w|Ht?z+o7gcJN&rTp&{$Q7m7$VL`hkSN(|6~8~ zM^R_WjjS%Q1w==Pi~!nXUPnx*FMOQ=YCkXpDiC2J{T_}a5bZltAZ#sdtpBU?@(&i; zc0LRkk``fxL>(9PY^PEkrG!+Q(THvWD0LbDLe7ndt4}tyvG+7f69KqajX`cA5TqM- zFxnElV_XV(Fd=Mqz^m4HK{hEg49?*sA&2QyCY@$DtJQy|Pn;5?n?xGghj;^x-Acic zZhdVN@HOOOQkCQe`g=Yi{C#}p@M`REq~{D1%?l_$BbOjG3DxIVCD9mP4#Zc$AaArg z*KWKBk3zKhlJb8`4AuR|CXg*2GIR5=lvjB76pS?&*#|yAXf(WJB&1eFmJ>d(9I=OGsLf*yJ zA$Mj~K`t9Qn+Jg)*fl@&Ho%}3;j&oZw7&enD2+v0M~X<~#Mv2M(N z>`zX>m-6?XTxhjfknf9QmnwBc)@$M}_PUI3S5q{1u+Xpks|anL>P@(R#EnP{rXY}1 z+WReR#Sw2w?)M9jbrvr_#D-*lyg3}9Wf zLG}$0S_?{Y_p_Ujh`$@FlD?E1t1vG-j+zlW#>v`i^W7kpdh@Y3EBM-1j4f!JVHx(& zE7(%QGD2Sz=L>jQeneUhIP?6oF1*PzH`wvFiE+oSrk<@*r*;|tgS_(BPhj$aRh@lF z_F&NnkT(f-1DZb7zG$ORHi{3LpfxE532on%6o(atw?9myD7=Vlw9$K3&LKz?aVJGC zc<1)M4X;PQZ+4h!hL+>mDzP*149a_N40J9{o9Vud%QCV!Nh8YJrNybW0df+$(LlCe9$7ezgVNbD&U*e$OAz1R6^`w7p=Q361d-C66t{ghl%nFi~x5 zWH@NHDp(b<|M=^Fp<0rA8k?S2u86IWxS2dew@z9PWPA=_9jrC1_NEbW2}b=wPJKDV z-{VHyv0_UHEWq70W`{$bRtV?5_o{?TSMs3&JNJ%C+7}WdPPB6RJnj}>YHMA@q6O{I ztj-*%4`gX7GPW6Q@)T14)y* zgcSfw+tHh$7;wxc()5N~p-tH+LRlEpYblUoH1i4A%vW+)MN@Vis<+%pDGwkkf&CHN zF`!@xToAZBQkFRl!WyEJIwscS@xBe+18~kr!7dFV-|_Z_O|!5u+KIz9Dz?<8;7bfY z7{?6}f_1+CT7Y0QXddFJ_md(t&qP}IDGRRBpQD0J2f~YA?2R)HkN;Uh3BbnhmxBW^ zXQQ2kt?V6oPqj^m3{I3;GpgHPCj2)gAW?oBgLHZa&w)t$Uq^Z3i;OF)H*_!&G4uZc zPwtxjuUwV*cdm+%p**l{;X8*VUF_P4D?O@P}3nfNeMaZ3ZdpxE6%*O%Bv5)j5K{8eFFn>QMQTZ~4!pZ>; zt9c;Hhr5+==|0JqVIhD5Vp+!;=e!K;;{S%82O#=KDDcnReIOyGKXN8NCoO;0*YPVQ zhXL##U!&>z3N0Aq*=jJh=|#D(4JBNCvD<0uIDR=4!L* zWW=5+p-~&a`Jjl=&&-W9MT&8PJZTWTlau{1cqg+vZW5S|L=C5G z1UFM4T!CXUX%yc!mp-r=(M&oVj)dk#5ekjJCLDg>I|*`_32t|>tM;~b=Mgx#Ic z#gO8TqdgTw{zG_Rbnky@;6Ie-25rsfUkO7MVohduo#Y=a_$%Kj^qCxLBo z*%d}f`nOsf+GR>is*D`fZRJ8@h#Z^K_txr|6h17D+Dse`O)9j9i7OR@D0uW2M-#>i zsmPp>F8ibpHd;mhm%%Lk54icu6W8dh=FB$OBiCqts8l`Yf!m4+&J6Bv1nC|FsE(jp&z>g_XU^H^qtca7Gm zM0dR<&K|rSi+6{iC{Nsr9XG@M>wxS7_1dbhiNt&AqkxJGNEFo!Ylx8ic;qSGgWGp2 z7B|@{9g^~=(^{j07|H&HYX6WRY0(0j?ZAj51FCZ>7y{nur9l;ex!86PwfS=xQ}G}~ zk$!Kvu|5xOz|OpN4r0@V_v3(N@*rp$)!HpzgogxbKhh&{7BgOS3=T- z_k;ldz79amzvO?{Y0!jB7gl6$K_en9$J?edhCe+g+|J$!gc*+#5Owl8DL=>qZr65= z$12AkEc43kiARTXDv+2HgOEUI=Us?(uy}OSl#LDJfg35mv9`?&4N%#8*o`~TdS3Jc zBfLciFJN5(C|3O&zSBtTPv5r5AcwN&vmA^GY z|7GvupSEDmCEdZc|Dq`Je(X;)jQ@+r!I7b1P#bD+2=sC{P00R+N%v z73AUuwF}6zRmvzSDX`MlFE20GD>v55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3 zCAB!YD6^m>Ge1uOWMX1cerbuV640d(FXR@$jm<081A9j=IX_pwBC$Z|Z5PIEk>IEf*+ybD@E~!PC zWvMA{Mftf3U@u!`;&zKOPV=C8Q*gV*1*cwppkwqw5sMVjFd<;-0Wsmp7RZ4o{M0;P zYA*sNYsUZo{{H#>>*tT}-@bnN{ORL|_wU}mdHw3;i|5atK6(7;;e-44?%uh5>*kH? z*REcZ;0$ z^0LyB;-bQW{Jh+p?5xa;^t9BJ|cQ;oT zXD3GodplbjYb#3&b2C#DVHsuu9gR{*~QGGHgIIu*)D!muOL3DJk1Nt?2!Umk&~J=B=uoyODE2c_4OU JTEG@q0{~VLs!0F< diff --git a/lbrytv/dist/public/img/gerbil-happy.png b/lbrytv/dist/public/img/gerbil-happy.png deleted file mode 100644 index 31b5143eba7c75642435f1618f78b18f8e450f78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83351 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%0AGV#XJWG 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 z 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 z z62Je%MN*-H%M%br$X9( zWshH{1 z$I*9_X0HqHh9`ak1-VVReK*#F>sTzLRQ9s}sOvoZ0jy3gJP*5wXb}E!Do~icak_^x zkA7h^^lbTG02M*%zSScWTS{H-zLN;w{hvs-B?^9-gqR>pcm!{`#0C4QBr;|giPw@O zwRE>1Ixg0HUfbCK3DPx?K%(VP9?7w?xWLT8kl$G_l)$atsHMyKF>67H#F)GeRN{a? zJTu->NaQ!?ff+%$lZgL_Tp<3$L*393Aepj`vhLEV(={+BXi4-D%$35$q5t4Oned-* z{T&=!8%j3{8R~v09sVkbrb8~JP8{u!?z5fY_y$C4-qV}*Mrq^K_HL7-${|56b73!+ zB>L=@{pO}~=a@n)2Vv!vX3uN+v;j;;&b_u|X`i@U$)QtiDy8r1(oZRp3aoF2>P7wr{H5^3eoHaFc>HgPs%gulM;bq#qj+f`d z?sH2x2e-G$L(Grj>@FboZe;sO%6PVepy@v)1Y}4TZ~Skp8~eXdc@O{UZ?6tcs3;P} zkmQEnD&cI#+QeJF_DA{1_daw9OpsNYPBiv?5$`F*BttzDw`505dB~bj5GETwc0$y|iyBaXJ)g-U4o;hCTY`K~E&H?q;GB$|!6er9R5>%)Eq>m{EBi3VTYaX3D)viM}f3uvinl)a|B&@6$8xR*O~AC z`85aYO2gHK!4=IN(T%N<*v-J;0URtMEU0#L3YXdGw60`lzMpBTrSf2;=MQa>_~jtT z$d}%;E01I+Tk$ae?Pjxd<|;!XHBa#|8&dwP(s0wE*@$D?9K{G=3E-``{&<; z_G=iV=WZXyA=#I9G+>xEjNx&=xpK*5Nb?mipinGQ19ytye5E(4D^ew~73q>0kZ`Fh zNpdbV*_~W2ygN9Z{4DuRy*?8JI10j!9P@+P((HKM|MGV8xnDj<$uj^=U2KOKrh?ID zyzgZF@UBXtXHw#__g!hnK%jR)!RT^Im~TSCXvwr{6M>Y&N@yL22uTi$r;d|bw4_7h z?6jiN+pm2m+t1_^VwMk+YZEJTWI4?{&Yv$@u~hP5XT@sSiUJbImRh!!h6H`Q&vSBK zq$;kAV;(vO$vi4)!3~=x#+?m3{dC`Rf4k4*FaIQ5w?Fq*cd1Nx!G(7hr@o&j`_24o zTV7cH+%>m8bJdFJu$x>O_{8@gj)6c;T}kMF?>o_TKJa}f5ZQ%;JVJ@IH{`gL`A*AC z=I8N9q>$x?6($I~v72G?Zt6{E*T+73%?j!$^lp>!Jm+ zOazbAB_Y5@EP1`8#fRkK5+>&@Ngi%{MXI!Zl7dN#OItR$(Kc%X1u$r|*u3Co(S9`=M<1*1=6 zXP3`oliu)8K6XX09%jX8wZ`^n`BgSdwDR-Y=eA%`H}w;I=H5?TYpP&vM=i{poG-}@ zxozwd71ff%$*-l|9j23pBxv*Z`Y&?n@xX3kSuV^>=8M5}N=iA9$P2Lqrw}`raQ714 zBbkzDDXka6iWBFTSr)0q%xeyN%U-6$(YxYQZk|+!b5AZWdS_?|*dFJ1(ZGKiuM|ACVRszEKKPkv@)IGk!Q^nS>*D5> z?T5@|u;Iydgr3Zh@SE)y$sLfBk<2`FICnc^T!9ea&W1MA0mYWS+@9kdhR1Na0_?Uk zxv~JAxv05t;Z*ZZ7-LWF#0=-R(m5=5c-QS5U$(TK+u{X2`_so_+m5uxYKuc3+27PP z5$Ssi4rX3f5otEm(R41msUCNcM$vcwMt;!wAcl4#*!dw~HT;svfD#pl-R}C+E7*T? zqgjG|4gcj`7Y@9!cdDme<2Nh_P|D%x1vQX4G7+H`G47GfXdk!3dqz!f-s939njLKK za^De?fS4EN-l)9K;bDeHa;7z=!zbF!K5UFWn7axJTc5sZm3(_JzuEen^_Y3U-G8_i z`J4B>WbS!kXV-+1Pzdv+f5zjBJ#4aOXjdiCY^@E$lWvhl@#o*L+~orx(ZFM`?~cE9 z&D@haXQ+67SkXCu{$wH1m$9!QrO~xmnxP6t!;=~58VaQxnhT_n`Q(n56e140CMS$P zWFC`enc+-4B>|H-T>_>zchht3P{U^=Tap0Dm~-?bV=m_q633Zl7WrIV{|FF%<`GQ> za%1+ty5=n67W(fewsb+^Xx-iuT^yI^dQ!FxUT)zkgB`_gb&A00BEU9>9kCG1mt;zQ$#_7OLSJI8q_>HhvZXXH@WIw_%vV#AhlT%DJ~nd6jW&Dy z90nr6-uwJEa}dL9^Xke?J&e+`aZL6*@F(@@P!LEaPHMIWp>V^YQVz$Z8rH6a;}Rj` zcIrpph>#OWuq0iPQgNd{a^~|?!=>+3rN&)iMJxkY2fldfc+=9>?tgZB0}V4QZ|REB zDD#szxQ>*4q>Ob+q8XdDqn0rCG%1Z91c6R32|0@%-E<&&+2YAg8Fu#QEse6$aTk#0 zws!Nz-s5J|?!#ss_BEuTb1O}ZTFf)>LzXzf1__N+KyDhaL(8jJM#4Gi3T#mZ3sYkM zHq%L?o1BM6%o$iDMl?y5NU8a}aLPEddGBFoGqyd%(zi=GBJs!Z@ohNRK4dJBDv6G0 z5zDH;Nv5wB<@i6;hPlzg9DjUieYKAbINI}sqZGs?2;)l&&99!>3M)JjQ&XB}=3_s| zWWr6npcjK8kRVP>L2*-VF&hZnk6}Br^}7ypV`cN{pFU;&`0`G({ctme-omn*PNoy+ zpunkzVL`wp(wKCF7fl`S``MG5V<1o`$M3rW%J+BSBW*aSXv8)m6k`K{)Qzk1gE8oTGby6Y%)aKyc3#ZA z5_K`rzh{mB%M#~EIm)qQYL)Z*7k7lm6$XnitUC*#{|twc=$XT;A!IlLUNdc;4;bJ3 zum@p5M@MJuoY{500G77&blj-fmzW%6$)i9f$iGmQ_L-E=bAe%Uu@Pb znrfz1m+CSOEl|UbfDkD<$aS#kjP$Q^r#9_1AN$^;a{KRZILlmn_DoqD znB>*Il9gxanRsF(t?^Lfl-M~K=zZ^%T@(f3_6&;Raq3qhh>LeL#g5(9@NPhcMJfB*PV^TN)fiHHAs z%Xwza+=*hvCR-YQOPn;iE;d|&54S|)2Fb6ZL3;G{UFP{6-53$9wX>_uxsW*LK{0DW zd65_`U^wntO1BG=E%+r0k6w&90w{t~hQIsgSL6Tn;09BLeG`wgMHVAsui~IC4$T8* zgkyuJP7xSR1jH~k0(=An`WvaxNx26Z3A&~<85lzKC*tdd3M{89+BprtmiM7%(b{;ET90E zb~r-Dp;~UZO-JHX@)Ria&zKOKURQ4>p>A`03+jxS|pFz;6J-%UqY#fH$Qd#a&!5zdeJ(iF>))h zdf{cviNwjY(SGYeYy-A&?@{yA#=YiG>-Y9Z+~?gG-uf}Lk*(uq(^o(OUku`$GOkpN z^mDG59SZI;A~VAzP8{kKfpkNF66x8qCZO=X7;f*32Em-~!#K)cBOMt*qFO7{twg4N zeC;sJorvn!yy%iKYG4Me2u2v>7BqLwjpxobZ&@|l6y*hFTdGVYPY(l8l%neYOWO~c z4}9xEbK8Y;Vclgsj31PlvceoFSvfLHOD$&pBWY>{wdm+?(N|kiQU{RZ!*pX&f94btm}KG_l&zP1B4^;b_~Q<@tysD@hKH zJ(YQZ;)ZsNO+umIj!PGqNig}hVn!_%W&6{+8;S&-sv}7{KF1?XNSyqqHE~cF*})JA zy_ZiN=I#YZivDE&efc-f#O{7^r&F5a-`3a}osFnc;mEcbDH`*Eqs1|4b&9}nB7mx5 zxNz|i9Ceu5dkqV%g+R}nHC{$OXr_(?T8!l`QP!+1b4)T7h1haX0#^bZyZ}%^g$oTi z98Rf*2bWLCjx~5a3yaag zB0*Ba^LR_AdEw0i=J5@C#Ps0-EDxf^tJ1<;F~qN%Y7d6w7(Qo#M?RM1=bATm9gJ-` z)an!je8t!!;lB~9w3bA(t?e4aQj`^+=KKbSXRgD#>fdx>p06twkHCaq;5?Y{{gYr0@%M~CFHqI{fkB1xdZfMZ_XcF=tAzaHxI{r6rp&)mFv zjwyrzioWbK_xY0E9CZY&P2E4d@Miq8zj)S%_2Ut&AD@MYY{!wdnz|~9j(Snb*biC) zeS1lc|L4tJSnnA((QkcVUErLV6QDfgD$P)NhRQ_Cr`MQj>@K1kac69KIOBx5YYYQo zH~9U~W~Q4^l4GFdZSt{DqBz%&BOunD_BAw`vpC02qx(=(QAz)d;UAFzxO6KN4ETQW z^p;4_=L>X1qg7 za@nwnhAOIxwYZaYNNIwHga8Ck4ADAb4)Gs<{)9PrqQjKu1-RbWVB>c=uur9dO;$6t zBG0_M>$nM_HCsBZdPw1`r_o1%b)Sl1++Aqb;bXB)2bvsoxUqCJ{tLt=ZHIJKv1s(m zQl@>89Wm}9Iwv>a+}-RE=ubX&g@4Y(3NdZhd-;kb(@Xhr)3N2@zqr(9+Ok5)VhlEL=%6Y!Vt0D6P!c^o-1IFM z0XrS=Ic&T;59_|V{^>8z4REIs8dp~W9sOb=q>0aRIS7}3@ZdEYuXK~n7-yCvy1@j? z4h-?qaaSO2UZ9F<0!PaJfkrh+G>(;CB{`{;m`YC+-83K*k;p( zZocb$=9V=x%~dOAn8`5o&!Nv$&mP;@POhS$f`Vp~;wI>%zbtoj<4W=c2PM#xAWD%N zuIbBy9O@#PIM$Gx9LJf~>1J?RHX4KU?@|PJjYg^=z;Z(=baqui@Rk!$Ci>VFivts3 z$}f}m0Zp|`u<;>bgs_(KrR|5zO<($*`R>CTMH-_vYk8jE_i6(SqEdSvkX< z3e64rX#Ov4oswwUX5E-ZT*?jp+|k|@W$!V(X8xqK>_v_#io@`6mq7jI%>&2H2fzKG z$q)F1Y$%vfoAp?`yOkOVs3hc=58d^!*|HzYL1?p>;%f>!#*Z7A-+bO2i6s{1_erD` z=qwz=Gdiw6c9oE{I0_&s_{SPum{nUYnUv#qmU+>XwQ(sJDSrQCO{+5GmUT?U5!&5<@&o3*caVGl=xy&T0a?auPuRF_7jlMs%Y`7jar zi;rJr-nMFnffl%Q3J!u$Nvh}09492Zd`68o->V(DzVbg+?lE`BmXpVo@Dg@c;)OV` z#6g#KoTQ3HZpP`~p(7wF9)&^wUmn6d)#{n!d{f4iNbg^jiG~j1aQI|HM3OmjqD_M1 z(C1)|%U$RWpJ+AAHwj~~m&W+HOQaDq5fbU0S1mVxf#KaljcqdjUQv{1YRU^?N-_xP znwrOB99jMR;0Pd-qL}Zl#^}|Y>Z16@gUvMKcsVRl{d(}1Q_qKzXzJxjD#wVeG)Z(y zVUDx51&!9aMN=JW+I7H)ypre`WF1Junot}HfpG6qIx6j?le0s+JhSnwEiaPj(~KOq zmD5cO(kC}r0y%G8lov7=E}G(OJh@l+(}hF4hgzV^C-naKhuo>ni_ApfM`8-Kj{0)TK*}=`pa~XLX%TL0;S{J zJ3DPWD1A~t%05f>uh*%I06RbIbT67J=KrEt2RsR}JtBTQA23 z0TExI*m2|Wj;Oh8QJrr*c4CnYriUU1jZK_0_N$aCDTUTyX%WXUkG4jzoW;tTJ(ErP z31KLgOGTzsZI|71~P1I$Covu8f1%P-~|cXZ-9;K}8A@q;kdlIwSF_Tryb zeR3tybSZUXA5WGQlIX15kh6->Sv_Z>!yOr{wHV%0H+l$=OxS^;RQc)amzyw#$fjUN zlfK5mcyD4^o<#2UOBRd87!q(=wN|4Ct$t~Q5n#E4wIWkekOLzi(}jnMbDgVko8$D< zj!T=OsdJ*pEpC#5HE2)PM=-81 z98`OgibU$h z1OdqubYy7qZ)ttCY*PKu8wU*c+U(wUGiq9~F7%VvE;Bc;o-0dRxOP;tZA`LEKWY(R z0Yo{>gJR-yn|8-`9q(}R0=@vIywhrbQI$k(hU$4B1lU&7ng~`B_|Gv|r?;fO+R260 z8{IKuAlOFdnanR?ST`3&*WbQ&zJc{9vuW>9bLe=h5M?b)=gpc>?#_dPJ*ixz1Ufo- zqhA>S0e0jdgLXnWY}e5?j&5O|)X;hng*&!4(nrKOrJa&!N@q{XM2-cVg?f?C7oUK0 zYzC~2u<_9pNZK%_!Ul)h>8OCiYihMJvy?!`Hm~&S-3YMU#xOVE z0WBlwy*bd@{UM&Rtsyt1#c-~YXm@_DZq5u}HKO<|yefwnYZ&9scx z^tcEVgnSEmh4rDPFgGNN_jNv0ONSz$2%HH5oD=0XifmKp{Qh`>T%^$-l|<7hv&JZ@ zqGk@OH*@*@>9rL;F6`%GeRYa}BA^JI2?Es4<(z0~0XJ{~iTWIOd!921bd=v!5*=m0 z)9iD0#H9)fbki93i4{c-3q5yXP^Sne0*b(yAi!3H``{Mmdy=S=(9TVp21ZHrOiDoJ zziZ3KRB&bqk{idaEtXg_KlPeIML-c4Sp-0pY*4USyxXq$d{(hYNpxh9*U(1^0V&wf zo15Q+t30+XAV31;c680{ zUFOSoKWjerod>bC7q^{D3xR6v@(}o7i$(YQK0^{sD-qr{lw${=emPYUkeZLuytLU< zDuQON4&|n5ZfU&63;{bblNSn@t^1Fei~r%5*k?CpzJ14KCP&s(>)hyInUmDfNV^_~ zZiO~j?q>P({2c#T&Dex{`P2$ilAj|RI;&DqmKO?5egXj*zLhBsWA1x#yZOw|o;LsI zrnAi@OQy*_t`TgOu7YR+u8h1;63xhL9hOANnwDI@v$Pp|r&PV%}?jEAU621na z2&6RvcKG&qYlr#z?_V_czPQu;=p&bzS#=erD;&j8E(tX41go*mle7a&hjYie$fV}? zS&%sfH6EKQh*D8~b(sSNBUO}0&HU0>jUobExx&hk>kZ#t`hR~VU%&q|H<(!yDojUL zM4l^w4mDHah7vm+u%(&Nv>N|bNmQ~<|MWtDohwSB3*s?DTb8j}nERujwCg4^(&`j} zVM2iOpAI^cG=2H-YrD)RfBb~`hnvqa7cZVF!?qpahz#Qn)911y7*J-|BT=+3BvF@9 z(rCp(;*7G$cDsAQe~NkV`m z%ECJtJ?kkro5__WKK8VEQw32XqApty5CVk(g(D|g%~fBx+uXWlmU-``OJq*8GZNL| z+iWQa1Ef<)bO3O&^pWMsdFUOod_>2W75ce|_nP;wn`dshaG}%#YLn{x=RoKU^_knMV4hi|PW+-InpRFpG_A60R3a;-IzQkn zKH45J;|oLavcg<5nmf0I&~PylVf6IVVmxP5vPC~Kng|GiVhPLc!zav*U;3T-_|;3y zjjQHh?k?u(2Dpv?XvQg1zr{N4O^I?GH|?st&WUDf$vpjZNg>V&I!hSDS+ir=J#mQxQ021W2GX;kRYqF(J@TUBBGibnYC~ffzcIVkG^P z!_*fBKmaWc4O7th;t5GKZF(t6q66e@7CvIZrBabE$M2iN^w(FHI(AnI{vIjEAzbbd zbGWh1+QA2|Hq_frpX8T*EyX0hU7&=!V@5<{kfjpZWaTR+;P0o+-uv z*r(GKEGJ_&9CwJVIA21kXgGo$l`wQTcT`|bn~#u0S)6Nqj+w|<*OeEKno<$xn2xnz zO^xTcvqPeC*_(P+1V#t}5@-$x^o2JMnh$>aLGz_s&NFM~O)^vh&EL}M<- zXngFPsBMcz>Z8LJu9E1mL75Q&*&&pAjIQJ(MX}0~{81ULupQAujjaOYoSI@&oR{OS zAJf(=BMMh4CxQe@Gk(u(-fuqqorleT+CwSTAEkk=D1$-%qra&g7P!y!jLjauJ2&E#pSZP77!#Sc;Yer5zMU+BmGVR$d z`{m`u)5e>^yr3vF*@o!UL)AAFfx!{566n*L_L+}-_Yw20_pdWc>&J@?+`-7NH(@$3 z2gqp&mS^_;+~=-YJAOx9F9f{GEsBfoqhv|6m*>>{sU(`3`7)-l%5$9AP2reXI=MVS zWQi{I2*k`TC3tn`VRO$5JLL=K%&av*Sie_Wq$2=$8U!hH1Jbe5++bvOx=FGU=u;c_ znvZ_(QS&_8m1(VKvfTcj`U zlC-{k?L1SI7g8y7G;@BGzr`k#dCzi1Qu1SG6iyki!^XWh+dIPM!0{Gy5JyFEzL`6* zQv45BG)Za!Xnyx4f!cWdfA-!3Fs|b|8$G+|9Rvulg1w7XBGs(kEK9OvJF@-9B~I+b zJ#n1;{+;r_*vTLJr93+CE-GS2$^6HU#InmTPP{;>9^=6qoG*j*~aNu22*A|9$@r zD#C5=>h%EKaKRi5Z7?{0s;*Ub9jlk8cO93f_tr@{_UiB6v`Fs0VyXP$T^pscq(BOB zmKwIEwY)UG!#zI6u0Deat}hQXGF{py$egmzPOZ)-~u$>8>MyxAR38gN=YH@>@>HhSNm^2R@d<$ZRT=f&4#G#a9xvZJ=&m^ zT(h8>Gf+w@obH)`yajW)fE)8di(Fj#|p$fh-B?Uf8@o1C|bz{rGSoq9B-*<=rqS$pb!x^*0_S18n}`t z$NBhKy@(XfGUh0p4h_ma75 z-sLUhpxt~Q?JwWSLc$GjA+{Ib^w_IM zAV!Hr4>&#FIXhG)3zkKiP{yXVPUSW~ddFo_4L4_nc{!RtMa~59ZU8$eq+p49CDTtI zbbls50eFW(N73`RcpH~z@L~3LY-gN6s;PX%foLkJ9f7=ZV)3~>FtRhhv7pPS5&tQP_DvL!QR)6!X5C(CWxiJdoD zRo?-8G6hegciDHLw8d^oGB+YNdDY{+&<6*ip>Lwp7BDv}UeONjV19Lp?niNz_KKx8h@jcp1<09Q2yb+Uy@b;>AhDhQm-Tb>uqHKx&l25NqP@J z(6Fh=0tbPLTG9MuB%<(B0T*D{j~R~NDOxRoNk%Hvj0T_swLo43#7!`vR}7Aq09uxp zH6kz%yn_okKoBnG-mq+jnt!~gypj_b=e4PaTfU8xY?FGN{f>c47Ym|^Sc2erp=@8D z4CfyQqTy_psVfzf6q$LPR#*Zm1;sZ!NPh&PT&tCN=^`iv2bEz!^$1O}pl2)2Rett= zTqSE@q@t{7PzgpgM+t-=;HX;Ku_9e2f#fb~Pn6FxJ?@{*0yp}l z-@i#d@ReT!==-E3H%rdrbF`3`O%N4XfIV{Kh`>&{qrKtoM~(t$QklidK`yCbAR?R9&^kDqwX2s5V zm7G8?n-cQK$US&!%HndJItsAEa;%hM?pnxV%$QajuqAME!PE)y>QPt>q6x+=Sl~ST zs#)aRxN5enm|LmF2zZ2eqHV-7Qmnid=JCG!i96)azVo=8XzWlRJ!iZIY4M1kZP4gt zm^-~>0O0k8`;$@%a7?m~uzxUI%+V%&@FM;&MfOALUeL57)U^Sk@zWiUS|Cicn_WcC z{yySB)L(i=Jv9y$?Y#Nf*?vOj09_1F#?)XpZ!Vf%h=cUSIyjwL#{iiExghPybrQ^S zu#h3QM-G#~NwbSTes-_yKHVa>!f^Vvt7_zTZ(gg`d3f}Nfu|5AJF_uwiguUGDwi+5 z|7Q972cDIekDQZA7+W}pO;Dy^fU>o8_Y2Pr)1)3JZocP2YAL|}LZvWDICxBn-^;Pz z?pI)XoN#Ek;&7ea6HOfREB#cZ<3Kc3l#WI|6z{8u->y9UE;c7a9$u$?R0cXerm=bM zi@15xZ)%(L?0zC83)!%yL90M#aBlQf0Ox-{w@*Rr&JFYA_itM-%jZ-|MM=KygHqI{ z`=e+ZPI!L7m<7@r7*Y82Z(SvS@~uZKOSmF>-T|IXt(oIIHpSGF|t{n{~ehH>ef3Ki$LiBie!>mS|c1idLP zqe!l$1NLf-u{La^4IUG0>@XV7LK^5O3tr?)`3_WyvI+y_OW!j zn1W?0ifjMweK*PeD-vd{k(DbBv zwdW2R&0JL+K}LRpweRJQP=cf*CqRm7A(B^4@+4e$(dE|{9(qM<^67gnlONr130!s= zgBlh%X{(lyiFr*yH|T0}0wq_xXl9xG>j!U@ul(X=*}S(_v;EL5tJU0JH#C7A7aDX+ zjFi67i2mivhvZ{#TqEzfVU22K8~ernEUE06hkH3*Qg5vtpC`T2@LnW>1JOt{Q_2ci zg5ja)nVW;t?mh<{DVR9x;l$Vm+9=Uau9RZ9@}e6sPKZ1TlS<$mUNZtVfpmUVseJOD%ViP7%fH@! zMDB#g6bpGcPUaS)#fwK$1$v_T| zV&16^ECLr&Gq9j~%azMz)3Vv>)Y|QnPfg3{Vhn3&dfT~rX*ERdr2$zIqZ4+K+NL%I zO!NVAp|lBUr;4c|z&LYtAUaNhrRn2#Cas{YRD=XQSa4$VGjP(TCLY~QG4Sv`eK>N3 z8-lsq&#I;*Ew&Fi2Kwlvz1z)j8vVBqya49`1@cF57QJra3RLC$Z zy^)I;s=E$EL)9EpTbR7K%;eDmganT@7!0-3+vLi|wCI|vK_~kYn%Lr5)4&~hF0P!+ z?xG1yP~@Ix0Te$P;cxTFok!(!Fz$ZUl4|+t2XEHJ2@kL<*9py51_Eao!E<<}SudJ| zbYW^JK=CTK0}jEz>aJ7GLgN@}NzCW*Nz_!Zh63B+T64Umr!RV%xojl|qEpjXLzyei z4$kcYh%SXkm28~V(}NBEU?}Qq?B$+rY?U*ul-R&eWL25&iTIXK^5x&ZQN^~jI>e&~))%Ya zqPN#Cp?f0g6j1IElA%_d+x(}WZY#wu|EGT)zq( zl5})(1Ch?1Z`XaQ?`_^Ee|7KWa^u*q_;Ht7EamEWQeR zrC1{x4=%Q|^ZrBw6Xzs<^o&{Ia@9ExYV$^1>_-k0Em<_);|xPl?Tu^Z%Ps2{DlG|~ zyzjs>8f_T%QgVz^$&V)ZzV@4)@~w~F=DPrQC=KWiv0siiv~mHT1?6#aq1JdN7TSBh6rGbjHT-rSGggY;eCd3dR-EsNihRi;BN8DUx$x*i zL!~=-awma%ajYln%|MBU-D2P@JJ3n_j6UK1Oqc?mwBv}k(4{kU^&9Kae!}UF@*+>6 z)A_-n+6D#8?%w|W-lJ5_wobW6c{^OUoj5mK?J*Ul(fJ2GcS$?Wh9Pv77v=Y0x}x=> zNe7M)a-QegyXCpP#-bO`FVZe&P@jd0Gi+#|@9K+9hhz4$9lhH|dphj*9f*d#g@P}i zA}8jqRs9AoPv8)L9@qN#H|cR?6F73FNo%rdcB#xLFVg)GuoS`9&gBpp3RnQ$d9+?W z@y*Ai6`ab&gsX5|>NCH6?Vt(Ci+RaCGe7~$`JcwZrMaU==oCUtE-I7`Jm%Yl&IuU% zo>Ea3To+RWw$sZ%PYU>!Sqc(zAesUqhd2wO7&~xwNnZAfrp{h@@3l+e1ubhn6h~GciI>p583qc_3KNY;Y{L<#4}R^Dfg-*C#+5SP+n=M$ zENUmyD@`qocI>Td)#si)P!Gi`Xp(c%M>+w`{R3r6w+jw&Zn+$)ZImk(SE=J|;|M*N znsU-1a34F@qIil1JBC|_z1(;&Qo(^}q?*h3!fJm;shSW}`Jy!xNow`piEpUoz6YLQj=Hxt|-+M|m!1F+RtNlH}B*%P>`LPX; z)U}Z7jH6AtAKHT$Ii(_2)PX3ekh#HvuC7mwzfakPZZj4m54>RDy{DP7zfHa}WL+IGk+tUJ2L!>r>ik^WyQfFuBD#CZ-kTd)`|n-=8g59`*J^X_I$GSrLwDZ~;2`^wYIbGOAu! zXwgc}GrNz=uXmi#s(%rW-b8=Zg*DoZ z4!;qy^K%t~?D3YtRnbH9T${ormPO^{~m#VDL z1SiptZa=E2(SIntjBwDp;3z-}uq)(%6MgfhrLqK)ig(|zTKCM!A-NDN1-NZv+!J=l zeb4L{E^=w$BFMmH5p#fYmbX4&j`oxs^g>(zU~Q8ECKMR=qBvBuw)0U? z)ebCO2cm(IHuMSGk+K4Pn&$rcXI2!)*|Y5rlc@pIAUCnkbA5K*ikVVfR;UN!eUTMU zrf}}vP*K1zo#cw*(#HjyA004MH4IN-IKJr&o0`ouXhB;4?E^2!H$Hp|02Nxf6r%^! z05MEtb$<#x({KCwgoy{N zom?`%O7$0l0#MBe`NHR!G_-c8BkpPWS<=|q_fpgw$8n-jZ^22HA4)}+b>V#I&6mtp zGiv=XZa&$GjDwY21ZL3-+BM3HkU%)5qj;w62+#*?BqfUg_+6 z-peAAN<}QYQ!MgYFatk^DHT=vrc}h?$Q3QmhuSc!qF5D*oTScD#Ct$OH)hb~2 z^d?@#j|UJrEjSPzpp?6a0tM_Cqf*f#7T78k`JtW1LCjF!+@_x!7goZQ7|x$kR6JQW zS5tI<90eQ&Mx_9T8O5eQeSV+()&0-P*FJbNl!s2pw|=u-9YK8Yp;zRlwF`7nOCuKy zK`(A8PNsCKzPUs0-*TY803LZ7yLun;>Of0Hkqu6q8`-9tRKe|-2}r5PoIR^+G$2|7 z2i&xanu^u#q^ROvb`*#>1vthy)^@;%|35ysRetzC?^44R^I(7YZ|;9u-t@OWmbZfo zU4`RjJvhTnZTwUO<&Lp{-h1*KFLTNZbL8~-?gzZQBg=)d{0>CDR?M&u9XU`c+7N_N z5t&We;yerOKZaS;iuF92b5)gLz06fNr4%4KWkHFk9i|fh^xq$szj^1Cvaq^bnp!)h z0wxka|K1zq_}Lcq(xRHs7^A6yP;;b)n!iu)I!3_E0td{!P>OR|gh+#^73-lME@T=7 zpj5Pxb-r~CED06lfm58kQW4YRSuk3hISo%64772|!L90nddK~76mS&qn*tP>=48j^ zm4kKC1ea#ltg4YNa+?sNlIx@)m6da+OMY&)=jzPw5{#Ul73J1KGWF2bV~J@n^#`ro z`@N?lEy`sb9EgtG?&*G4m5Oq+TQ66PEfmJU9ohUPKrR;*E zfTKV#6yW(!dSChKFSp9)-}MIdZlf;EkR2Dc6!mg(o9b;9j(aKImR9pZSatw&=CeBHw9!q}+kf_oWx@+Z0)Lr|hOc7LEUl!yt#@0^rPpF_eyjA$$f5YMel~p{gH%DC9s`EsMljnxLYH7Z2 zZQ~kgt1!I|T#MLN)NzaIwdi%2riqu)G9_-V@M7L&=4~q}@!voOkS4V~VlpT~+!_*=4f&{`^sAs(sU*Fr5@@*4Xu)H z6cSgj#cW)9$rMan$s*+K9^u;jDf#L^hsS8{bD)vzDJv1fGQu{}5xOHH2NvEg@>(%lA^ox7*tR>?QC(#wKByJFMPk zbEwN_K3Z&ntEF3*m)=Q-mu{d@CGwkZJc}l_N%?Lgz`DqlRck6q70Qf}(CXLro^D;C z2@W0ZQ!O`pc*Mt$JO(#0X!alWhUQ0kcI)TvQQQ4i*8^j z=Bqj#xy*3*H3&tVGAX6m2&ZhnCS@FQ$)quml~YYFN8mZ>jFPewRmG9>Rh01}fB`>V z7bv_x8*0FDgWleZ{$weYb2i{zdb+ugri(yp)2(*@K&QboSs4yElFA_$<(>?l;X{Ho zU}@Q+*`mS31h8xXH3BQw*lR6C8&-So_S+vmN7$V|T#uhXl23&QzT&$q%%dICsaPW+ zMImDGl<}}Ca^d5T>R+?L3}&U)$7iD-4Je*WN=lWS#cSzan`62p@ z!~muQ7$S!?x?}&!wXpBtq!mYQY1R|<818cU`Pmstqvw@K+?9iFORfP`zY7ieul>!2 zKHvdzIS}e&JxWo!qhF){-B0e0&x*|GzSa7?agd0|y{bX804ft&!d=4^SDF^!pVqMq zdmeHdc3+KTs)m=w`PKaUF7Sw(WP@sov_fgz|Ko%A_rKICMSUQf27KFNFqiFMqu7Ou zI`T5$M3p6i(xc4pi)TDc`J2f+H}gFLY97yG&+VdPUXO<(S@G#VZR7tJcdL0{B?U&> zi{$mjtDu6#2->Y|GHjJG_a%FSa?|f#WOJ={tpaCa{cnV+@27a203DrO@}GhGinFDP zRZJ9WA~kH(Oyz{?rP9yzxx8aT6O6^?eK;_$ zJnuQVD}$seP+h#|3+`}^cx0b*j*MXk_E?vfop8bWH>2{_OP1 zl5ic*Vf7VkY}4|ct1fgY?99?RiOm%hKci?pB6!<$(b`wTh9T`HQ(0XWUd3&2g2=!T zVp^o}kulMDC+~Prz}`*u-^cs}%|vcD%C&|YQs;;NdOqCMKq96ATRpEImbiznNQO@W zur{u2+0C9%vwBu0#I>CB;S5vpxQcRh4d)ZY5+) zo==|jR2T^iS+K&tXUUW<1o+}6^3vxD^2@c##v=9{Hhc`uLN)4YPj$VX%aH3l$M?Tu z(ymT?@*vy6SLEm3LGy?oXi{!$FE7qUDHhVE8{IMfC9H4Gm+KpKFy)~y_24OPpsK|q z6=1C*a)=C7Z2Q}6mS=N@V(2u};xw1<>E5h*Myf>f=%f%bG*36)xkTWHnqeAs_K(x# z8VWazp%}1TYQoy1-_|fnNAsD)=lA6fRUhF9KO)eVnuS3l%Yo6rvq!o!6=_3vfu5Vp zciV%QE@j_N(S~gJ>&m`!w&6vVrv&_()cmRI{L^5%RapD? z=ilf{BWjRv!Uf?p4EMZai7EAacO+^D7nX=8d`Ee)Qkg8uzRP6?+53gxyQG7=KEd&S-Ca|lOWE_rRyzFkhT*YHA#N^^a%A=e6Y2T~%Dx@`n zOTQ0s6sEdv3fBIXdVyzNXusj4`qa}JKM2sSZxhw*T6esnMu-c09{-7p_^PW-%U!KU zlggM*>p~|7;fFyr+#n0`T&+FM>dfttZhC#aFMhu{&f+a>iBxKI{fm$N1I2VN!~|U; z%r(6JEw7P|6__HHP<}B*lOhwcoCt;Q(G4mr?cp|Plz87R*4rO=E8gd$;d1RRrv3Va zo&uePPa$j$TU;~-6sPTW>YW*76=z~YD4Hl?x$RC7yv75+)tju0W4G+q4%B{V{Bfwj zoQy5q@K{AsCkoRyl;$?>Gf_tHH2l@h*)gUbKjO=SarP}q!IN6QbfnuGl!~IAS z+xzT`L!8plu`Mj22!UK3d0_Y1nvm=cmx3y-r?a^ACXLK}uKbBbteA z>YiUM5H<$bCV^D2PKw0mJPF&P?-kke60Lkc!Baz3GpTsWdCloGSafJ%YkJ8G*3Xso zXPj4+HkGiKli#a^S@E9LzHA|7J&yP9eyG}g?@^plUH835S;0M(mSu( z?LL|Qk%3)1>63*dvWxq|uGJNfrZbslLjdgT2jluHi|n7{#Z~S#f1Ou$(yv1;*!PB} zF5)-aJb#)W4p@+`Npv*-OtQ3;;(0O zFU!?HqiT;3oTC0tl4=$`=t_O_-uHWn4k`sk012!gb;8rrhF?ds&kjbR+xl_Eyy@%q zO7VBoOmH8t!pZY~Z6*EA4(gBE<_Xl>#z=%#LCFazIgrAH0RI%e7*{qD@YsV+g|ZQ} zFJ?7%LTC219WP^%H@iJhAy_{XV8MD>%+with3hx;84;^4&Re$6N}J9h?dPNDYDZ{khE@HC`Y(j#PgJD*cy6Ojk{UR`@sfG4_FE-5Mgp z1CY`GzSsQTd+3yx!SZJ5aLaGsAKkxR%fh+NtrjLX^4N51wUV6>g<;;T3rGd)zd!Zh zo6pUzIFGdgT4j}d2Zc@{K5nlpv?&W0vf=>rA&;zF1v$;yfP|(@3TSUxR zaKmZeRHw-?l%e-y7TSmcbQEoznngyUfp(b_{5S?A1%QhHy5A{)nyh?S4}JZcDJdC6 zq$!Upab6*=rU<8e{U#tV_LKni5(e6nzZ9_-+jFpu{+P`q4-Igx+mZX-`eLzPp*j+V z%!e=!vS0o@HYnOF+T^WRD9}=@>7LC)-(=Kkji{`^7RhQvz3c`{q_rTQYV>~DbUf+_ zKUs2pX#7?^^GtHfaJst0gj4m(6W2R726DnCpbnM|BeO(XWw@^T0S%D#g1 z(-1)kN#-`lm=1Tg;Mgg1?C-lT8lc};)#3sXNB+1HX=TcB$qm2Ie$UIXNFzEE>5rft zXtnVC;qgeFs+|Aq_u6aXIdxZV!PP8YWl7zZ(2?fs{ENNX`E0ZQ7ec;nkVpJ#tKEUt zh);IAxbI80FPYRYg1Lv_rX)7vV5F;LShCMtJ`Uy4~6Q>!LU{5nJshHIl~leJdwo>ig4BAzl) z6<1a(1}5dsu?tANffb#aVjbgX(dcFUJ~T+F!>`oIK>4)N)X;RVzFW*bj?JoS%!h?3 zNz55{XGui6w?h@+O0shU(gKo5y5<>Rk`0JjG7`<&N&^Q!k zvHKhiz+OXmJ=fna+pvnTA{XY+@QI3;GNK@E8%rVXmRPc2!j>go5TZ9)CDbJQL@lxD z>ZUzE1Hx&`1kXp0qMI^27dI7cHI1@Jc@ndl*^e=3F-GY4!T~P7;AFIh;iSxYSiH!f z=?17JTQ?=6z|!Bzfur|kl6qK1674wg{^?<9M2H2r+o}||pZeWEhnU21frzxoX9f1m z(k^Co>4)Psq9hJv$|mamnY*L+v5-{z8WG+Px~;a`#=A)Mq&_QEEO{Yu_T9bikwEhD zuD|Pq7B^M9Fbbl$LkY5b@4_u=5nD%(&kHxMfhuUbxg!O6k4zX+(1lP4zrIQD1P!7f zdh35wT@@PuUO0RU`*J>I#P``smlqEs^wd~;A8mP18;RbKXSFC&EC$*+NdJsrivwl6 zJ7A7JMQ7{Y&a+BamvZW&I*hlwq6vI?K>@OLL$JeqFAw*pv9q9mmeDr~(himGE*R$G z)yBFYTJt7~e<`rHC{GKP!-pyGmkdR&Fx2SO)r~7&?uAE1$N$v@TDZ=11is*%F$=Z4 z)O#PiOpUCKs^S$pZxz{g$4KZMObDuy&~#b6iLImXd0w=;!oK3Gr*5~GVqKoJd2sRY zMXU3DpHk^IJ^)0Brn&z%$-kGl@wA@j8d(e~-j|vpZS~i82>!zOz}-^FhVl$0c{GLU zv!%ImIkBvSHRLIJJRa@q&x2pKR8cWP4*GB~SPcupmh$NBo7Bs1C$9R91DNqu4_Z6& z?Oy;1OSEIhXK3`z)r+*kcL@edH~zeoicqF;NP>l~55`MFk6}3yNjmT^^w|)8sVpye z;*UMe8vjn>r6KfEb?SO4IWVFIQq)INll>jyqk4f={pa41_QS4(nPj)<+-Tt?jWMl= zV}41>7*|`@$bhw+S1LF-<%NXixC72kfAKNECpP=RULQ!9Iv!}M975pFTyPD1zq_Y| zk0Mi+@Anl9>0@dc)=f#~oYNut#;ZZ58hfAxGOu+dM9$8|=!13;09aB!y(39zz6)b+ zhVgue+lbigiWxRzi6_S$B^)pw8aoq0r3!x6x6k`C`i`ky$fI3KDOYnGw$UsqbR9jU zu9x~jdBdlVl4vRyk%5}iLBk0|x$_w(r8gu{tO`?9%^w1}|Lt5+Hr#?qj1ZNo>9WBM ziW$4#6~_y*OxoK?8y4g27}_-_vJ%i8tp7E_BOy;X`X0qP=sf!R5MdP*Wk zUFYU0TxEZ=xam?Z+d8yI&Y)cZIA+>^L|LOQXYC_C244L}{|Hf+`LhiH4b)MsJ|xIa zn$d5y^0``2eGOd3oobYI)5h{GuN(wgQFL2%xLxa2q(4>G%IIBZ9mLO%(C;72nF7g(A`j!cNHN2hwK2nEZqIsxp3aU`$i|#iP%3RQ9FW| z65M-n`VV~Eu7j-H$3`<`D_W2L&HOCb*M=DeOB-%+IDy~@VK%sc(4|F#bHu*sTPjQZvbUtY*M-uzhdyr< z-RDVT`Xq3{?)>K_4Mp^p^<%v+1}=r>?zp9P^GpwR8@*J(h+4O_R~$M56ap9l3@4JM zCFE44a}O4vo;u?r>)LQKl@8tGanNR0TI>}diOo}H1@$eQEj^gQaK04D|DeOW4aNNd zW28+z8%_=HxDxiJCriaF`WbW$;kOt8M@Mym`-kfwW^%(&9wKR^#y!K4WT8;$=yikt z)(nJ^_tikDz?-O~oAJSk@Kaq8Z`rvB<;JTjs@4`T$P)I@Bw6v*?h146q5^$!w6Vkm zB+W@g)7I`8Qa`NQz_{R7zzd?>Bw}hn^^^C7t6>tFiM5D3BVKj((Yjv+uPM+Cx4LJJ+RTdESF*%rdl z+qR04gWi|eUrbmnpzU2XF&^KD*s&h+^F`ojL?$Czp_I;e=o+HGIxp?Z?c2+>381Q+ zcL~>cNuzBINNl+8t1eq-0r(r{)H8pA3t^}^`Z;MFzrZVn&R^bjI*N8n!WXJ9Rab?- zZM6icf^oXgfumY?Q>TSkp_^~;DvRNjN{#I#SJ5D5GB#4|5d9Lgb}8UK+?3Tfi2~~- zTEYNCA;3B4&k9TQaq@=)|10+LE_DpK1G%pPW!uap4C;m9eu421%#ZbJBFgZ=qMlLko;KsY)y5Rc!tjW9`k7yde zK{{nGTJSOL^4hoT(9=BKU6da<{(6PUKEH*s6-8*i4^nb6HggU!&`e_Xb7yYqCHvuj zb?oQ2r?Ic9Qx)Lz`E3D`wnJnF@B}X#A;AzS2rTKOr7}jdbUXx2gzoCI)_FjQXpJ+( zPj$W_KV2$qMpGE2mYD^~f>(;tQhz}24L47Jrp}PTAw89S77d<|OGu=G(jsSr3sItS z%YIj_AW#S5OH?HYM(7{^1hq?)Ib5(f)Pjn>UQ<(4AJ1vQygi{7vl!^al zR~q>2H&v9%Fl4HI%C}C2&EG6&Xat=m@ zLgG@Qy~jY*l=4?(w%q0Wzd+q?`3vq8?e+)CehU!kLsr8YU1uu`G%~Jfz4PS?>Lb$U zty6ky6Gb2dCS-ts+WTIa52bbXit-PgCX`7m<5`$pZCf;PbjTh&;b*AYwwL0h9R9o> z7piEVMA}j=1_&m<50?(!)c#e^7l;v@HbWzZ9Vo=m1JSsRGp4B&eY+oaVlx0JEOjMo zeuiC9Vq&V&F=Whq$O`b_wsX@;ZK4(snfYS~hn82tTPhm&swZ*q@TouEKZ%I;h3!E` zIJBAQilpCNqDcvvJc`}1Js}J5m=BETK=?`Mp~gIzopnK&OmVzb2wP5s$r9x|m@RhZ^tR=Nm^lKAW|Djz&94J|jEvMKbCR|tD_#^AeS$bT>V$f+%GtT%fE^oZy$}*{7jB8^o z%d2r@z)bs@cC_m;Y-4Fc7W$?Iok&tJP)-r}#z5Yp22<9N&G2AJYMK5x&Ip>nC^Wki z{7*L`!Ci3EgG?KWZwBFJ|J>mzs)BQnP5htL96GSerz>rxUw$iH#KWfL2%&kkv2TS| z*hQc%yy)7bE+;8N-LO*;xD?RG%)R1v>9SCCJ25A0DAN$z1Z@YQ_q%MdOmQ@oGp__S zL_6lNsI$_vke?nZsG*3}cgR2Zx%|@T*=2-N%w&FPLori^`q~eWhxS%DR;yXY_C6rP zmX#4Om9&P1rpN1np$fQl0V#m~Mo7cxDB`8U_P`v7t*yj7a`k6Z=+-!tghx1s(&G9L z+aF4Z8gkkEEaM_gga>Pv#LEHS^4qv%CT>;tzhtlYeer#X#2D%Fd37&&OFg~97aEJ% z3C!;vQ0|5)#v7QWLvJAtG>6Pb3f$who}P{V7~PibkC06zEt(}Pp%k63#0V$fimNAJ zm(hBa*P+YjTf7(ik`HImI*0-H~=rKCz-%ey9a2VRSl_E$I=v8m0uq*5-8x z;VN(zYY-U~=!)_nh}VonjM{^wH%0*cBh8plrE z*l$dqmU%L$(W5G3b!;eI35Lxp6Ys4yJ7Lbea}{L<|LORH2e20oHjI4$5+1fXE`<^_ z9H@iw^%4t;IeU`SZgk5;=NCtvvp8yh!C$3fiuF(lmoC6jfZgSKZYFoNh%ho*$MG@tB2*K=#-Z5HNmVPt!C zpM5W4-^Cn>0aha!ulJ91)}HBQLcCP*d2iG)JE`Ic++;jd;uMvV^2k&3X}F3%N3pcG zyG3aN7d1(?Rng-gc3Cw*UO_!THNp*Y96~!CAc*W`z$p<*Yo{b%uEjjU>?nXHK<&b= z{ac|Zu(-o&wt-bZQ}Hw@VQOkyaaGaXQ&OMAwZFG^*XPs^qZIr~Hm{g#r5(q!1FfWz z!2Qow)Lj9qt&#P4P}Ev5dTdQH{`n6$&fxi!b*I}X2#q)w#s8*C?r;om%yJC-%w&>= z8KyWr|1D(gb0O)O@SeT`dZ;}-(bdxH(&0o$J-HnseIM5#uk^1R2BHE>0c@MX=yoZ2 zM2j?8OiEG2h!kaqp*t%~;mBbT#l$X3gopszd&(oBSPxE9*gRNOOcU*2X4xEOM?(^> z8~ULS%+zu)w0K-Xh+|BUSSf}1{T9IM-Kfxs?pF}y_czN9f}b7|FiH<4hc>ZNYuCp6 ztF4%2$bC1J1PGZ@PO~N^0>IY0284`hY)FY>2=`#8SP_Qt#7Qs9~{=_7%3u)9uO1(?q3peZWFj$ zWqn$UU0EZ~e!sBX_H2LHkv|5Hn))-fVp2!a4Lq?1cTeZGXv^Yrcri-69MSc>0i7jg7ynh-IE z5(KBhm3a(oM$|)u1tm}=mBuOWW%zUJ;crC#vKic@K) zf{N4jI|)C%u;IBIF-Nlf>jk548aH--?;pRJyuP+oX=MfB%$FwQ+y(tI38x=ltkA7=?oF0SrC#G=70|U5Ae`T&0Hl84b;0 zyg$ra?4X&ZVn(69dT*-92jY-s6w=<}|~xL%C;^sUGx|I8!2_v~?~?FE~@ z+Q87~AUc(4vNu@G+Mi>M7{{Uu=tyq4WvHd06HkY~V61dox=wxfp3fgM_MT`}h>fu8 z85Q7*tfQsaE)Fw`bXP*8x?K8V`e$bPTU;QVC~O2=6+_zWu272aY(iY93`$;K*lG0|EbF#dti$LaD}2o& zt@i@Ymn~4@{Z`(cpBdUeBLz$+AtId%OPvxt$Idqm%3bdq@_FIZQ+G$tPEQ`1>`BNd zz{8M3C)7$ir~M6i{0*XTDyTq^TG}KRig+Z-^TAI|Cv>herGpP+RvCAwA;(ZAk0t}R zw|q}Qh--hjE<7B|01{~%ar)YxsmmGTxlLVS8S@{=&NB*hYm$^VQU2q%X(>2!mWo5>n|W#P37&Jiv6p;| zo-0n^-XpWr&mV%hfLsllAlFyha4#q>mmOs==9v!-Dm;a{EZbY(ND@Eda7yN4an>AXCu{7{^17&Nr z?0#b48WBY`#rb{#TEd%hu>A6V=&Bii7D*5( zef@bbFaU@R!i3V>?g{ovapjtDNrw~v!Jf<8u^7YDTxXZ;a!wSpi^6ThrYG5u`D==o z@PGtq-c@!w^6ir3%&*R){jk4&H{UKP`{2mTi@A)6yMw*x!wCek#bm8tvtAZW@(HwW zr`+Oqnhw^!BMki9268f6kMPj^7VX=2&cqZ9lfkMl}H_=xZGy)I?imt|3~6rIz4{c$Deci zj4{ynVLHi_?PsUQ3XY0Ku}2~hfWaOZ=N!6g?Zv)>-cJeXh;_4#5(o&7-F^NI+Bn)% z`h-93O&D3a(xnd);uUq03m4@02?L!JkS9!671tIZh3I+68C`2Jh2)mz{j2k9&L~`{ zx#KdFvH^RSY^?k^ShFBU7u{_4&kuIT+uqd&jcJN!U|QF1G4-ZdIGLf8r;Yn$Qufva zKomowpz`PX4+W!?uTVU6bIPuxJ_Afbuqw6~xPz$p6WamZjgq?ZS|~#p1vd9s6O1sL zI0ET$Z3PS2t%I5?dPDghW?_KjklLJ9`Ih(V9T=jBsi2=L-gq6(f7$Whfh`C>BiXYW zQT3CQ1*B?N{EE|3I4uM#oiSY+&bi%@)~aokpl@-Q^y#O&4ixC6iR{iWk6bIhUY`2_ z$K9xBr6@5mbv6|Hy|6q{L!oRBKkK7=7dJ9h5`4Y8uwY1YeuqH=4(`Q6{nQu|K4lL; zgbTzP%z;*e8nK1ijmVIFsw~$kA!Jb8a`ka5sgmjVApjdvFvn_=pVhGtLa83t|N4xZ%dbCw`UsYl?0xKAgUqD<@IZPf(5_cD zt+s~AYmFxHuN#a8$ofMkdV4IBG#4S_e+~uIoNw($t^00!i5$!4EZ(Eo98CaQnkd1@ zassE)nH77wEz&A+>aH~o8A>q7u#&}VdIe9dKZj2Cx%s0kYdmfDx|Dy#Ex3$vk~&xI zop`JT5mAe-&o2=jZg-Nm=rAH)7f{$bhwZ_%#ElNM!Li6v4J)Y5kJcvMP%TLhkSvCy z0LIAZxg+ao2DUhPjp5ZO)DGgkk`U@WB>bd0DTJ+N9sP&_Jn|(o1_qi129*3HnTINr z^-;?6B1yLp+W=|M600&9Lp0Slbg0oh6eqAa@$>etobIm;bAkx%^>!lpa0>a0S4M*% z0Q3d4X*7R9Mgf4gg6=G=3cloeSstNYR&TWpZx6A;ODQYy{Eui0#?EA&a+W7JqmaTn z6pFZ{?r4biTadA&;$H^B?wdcbLD3Wa<+%bOGSV?&Rx>0`xYI(=f}^keVsa zlSC~(9=J~I`I+2B2S#JDVk;x(w#bR2-Lkfz%gQ!AFwJ(z*ydfQ!4FiR9rEwt)~gZb z7V7?9rb0-#*JVzDpNn)h$LZIgr(p`6LF6<*=>AMC-CZvt#Y&@ffQswlnfe$?e`DlF zc#W{I_u`#$N8*hD3vDxPs^R>ri}2*5@xdiJO=9U@m6{~J#6W%~J*asW0D+A1?Erh zLxJVzEb6vLK_#=ZAQ7=|m|2wbYeXhd#*5KbB_I0)73f|{J}_UXdCSM7WK{RTO2WWN zN2rfzs74{PM}hfmXo6u8ua0DkO8P{_srEu)W+*1hvaDTpR!bE78H(iDHi>>%=Jb8IB)oS%Jl? zC*9sZzucj;)4@}O!IT5U^Nn1{mPW*m*<}g|`JSVfll*yaeP>ZFW>tVVwEnE3rKn9B zDVq3W@9dSTU}B@$6WY3v_|NWtS)wf3(%8_l%R{>ok6qO95%VInars-fm;s2tkb~j+ zOyZ;boQa;>y7nDQd65fH06ZoxdO^?7V~5V%$V05orgFFB1%7$xd6xMO<~!J&9!2v2 zWgt9O0m?s?Y7C4?F_eYnA0A2wiO6ksG<>M^^C+gQBJc#LYh%s7V^k)g$Ie+jR1=dX z66~Pc4@PPsm%K*;qtri;>oaP({$m5*7K?~Y9W1D)&tP6Z_!`%Or zw++cV5#u&u{ACsI%*4}AVX!+=w)sYiv8X1$W&@ z&0yjmlbz}d^oi&P(H2Cqo?UaqxhLudDev@?B2VJ^x6}kd4qNcN5Y4nZyGvSMpO&-sN5~V3oFVj>%1J>}sLlg-Jb5v?YHc z)zNXvN=!ax$;yh1{^34qE@lCb_m9p=1R$4$wr+Ge4KHH0!abB0x5~yfA6mH9{dkHc z$uzOkO@ujrBof=c;th;~Q?f{(#=isGyQeq>rHr;482;}taB`ujJ!B`2^i7xwtWjBX zZ3|+{@ox+u(+r(0-^c= zD``X&ldL4SEo7*f^mQp`x8>)OmiQxpw&9K4hM#?O|5*16K32{eUwRs`?}(qG9u+|Q zKF%_*WC^mxV?*%4s)QJr<1f&=*k9d4uIM9L>`833LBl!>>O`VRqDfwPeL*2eKh&t= zEKQ9OD2QuoYfW3N^mV}a`S|goKg;DmN0!(9&(S#JIRV@uq{v|gCyb^17W)IAWHG?EMRc2W8*n+k`gR$3i20*~bDH~13R;L&hPCrIoE62ZY zSQHAA^=)Y0+!w3m3!X$clG(Y}wY!akGgOb-X^;_@VHafwp4mPx_Vr-asx3o$+!J zz)@M+p=ZVPctBz|nO&><1x-SR1_f~cQI1V{b@R+KkCx(0-3pvatX2maJ5+=OME1Ew zRg{zJsT2E`|NCxKfCNi7CD8<`BLT)()=l}RSje5ZXDzXq!lC3G_^4F8q@;V8);}Nq z)k#!{>mYx5{CI(;itFEn+bxEQZE?Nwjzr1@Pv!Hp>4uiMq4p9`yG|!G&QIkiojd8U z!sg9IT$^z;#DxbB=Wu=3aKn`rNA7nN;vi!*@ENp~_Zts)@v*f)$)oVJsp*>e!xznj z&3`7CU5nwvrfcQlI1?gaVPlB;A#yyod>VfpZ~7l6SEXCo-z)EJ8PQ@m1S4AL_>`?H z_|yTHS4FO;?wOW@k~9QHfx7(g3&SBg@l}8nRuZMQ>>TZ6WgMMFG+ioevUA-9jbRmF z5KWwbmFE&{X1)ozc#`PtEn@KJ%9h|+3NNx_ih1MKUhv)C~jLJksT!cHm!v=W(7?L$RS zN2-1j<%kj6Sq4-YgS8^M``&*%X-8ZT5OCJ7NJ$ZVY=|euSuFWUqJ^3-!8u;aO2?L& z?ay3ob|Z!*5J^Az-(}8|3rKVR;<-ZCqfoz-Ca0)h!a~rBX@U6_p0iS#+p}+_N>$Ti zUh$pL6>ZBUz<%9@(czoJBRE!W^1ssoDkD1*&g1MNpZi-4)UILSlhRh@$rdzi%CV>K z)}p{V=M{qBX5{-40-gs2ctKLs58MCABBWY(Iea~H`fQD)>^iJgc{gV|1}lrQL*~V{ ze_-QMrMg%v`pR!vk>{Ozo$!CgLQM+V%)V#bn3tsu-V9~ZG(L91q{bvO^#JN{-=~S7 z^;GIw3w;g+Pv7NIHv)cSDDwPSF!(>U5dw27GyoMOIlFYIpZm1(O;hIx5nJ$x(jGe4 z=zPaG@!>bH#DjbGHGk+gAchi$a^m!?>=3fOxG%UlJQKST+u^bycA7Ob>T?-@OqzrZ zI{dG9$PNL?MwL8?1g$6@uw<8h@kzxZEz9kylxthJhB4lZFmh7 znM|587aM-ibVQoxQ9A)6ou8Z>(ZsPrBywS<@Pr}m;DqDgUc%>_Paw^Mq|82};VMPI z5#4L!;EUio^uS{E_-{GsX)#1*EaD86rwGpU{d#7*M-zvHE6sN>>A9Bv zhEg)aX#GAb=l9s#{qAce@)X9ZV^(~ZD4U`fx;(lzsSvEChb2{ zSilcR!bjd$PeBLDo~Y)6PNp;q_=zN*e3-}|zI>X^-6*1>cs*C@U-fKjC?^C)l<^nl zVU_HC5?qyOksf_4V83tS3=BRG}TZ1gt#^c1HI~@MCjoEI`wj((yWd zAG9c#0nl8NZOZ{SeH*pImv4J+LH@Vm0#3kIFrkZ|Z%d=}{j2ja1P2xA; zsKzL5f3eKhVDp@M`ZTm=rTklauxpuc89PU?>;Y@N^@UzPO&ngVjIUxN!6it0#=wa} z8k%qW;`lsumFimj*Td4LA6LbKG&g2Vc~aOHG9J8$j}_9~>n9GjhYPYDJ$eyoMr%e= z0ZwZE`l5PPvF)x~^#Z>vVx18e<*u7?T$p)~+tC4MJK2j7t9(%{`qH9ApicDl*XNZ8 zSDOxyKW~Qgk}h-Y)Jw7-&1}z%a;28n_v(mEqL|P;9daGS2uGLNTJy~j_$NpuRidA_ zV>$Snb@Ew78qRrWg(Q-Y4Vkl)WV7R`rlNXmI|@ir2>O%wLhsIliB^7fFU^^fWSO*G$g~E}YV2fTOve@cbX9=u+J{_cLx{ z@~!?Hr&!Y3hb~P-^zow%i^qGBnATGQcz(yUPVcO?+;3>hDC)O*J(vC@9F22_f}#7} zF_rCws}zb6B96G{4z! z-A_4?SySRFA@#7B$_v;}S|lNiCFs=6>-faJ!q=OkP-ZnHK|A`@eE00v z4P$4>zdo%LSvn;V=&~p&4ikQunn%rs(8yx4zp`3joy0OtbPv&nTp<}sQ5NbNuH~nuCG%o47AV<#N1d1 z#)oPrNL0#JwFlv{$Xz=KHOe^%wmq2JLZcGfoCn%Ycs)SMUe%WhO#6o;P!W(aKWKg6 z7zr;j`Q_q%RF+Z&v_*O+q7h0E{qcM3+qG`L5NRuXhH(HvyQF@Urf`YLG0-(I33bFy zAMvi&ek|&m{AqqY)wUGUcPW(ve5rg@^;0B>t_th;e&lQvyTyVtgoj)YBTEyVb2TGJ zRE6R0SoNg8yJK1%o+&lvhGXOyg02tlHHsttf|{!+x`NDl>p<) zR%W_sZ(ci5i{*j<<6LaxS)$7!zu-4lYu5Fqc{Ts@zBpLS{Vw&8wX+J53LQ6*;vneX zZN!htf*2iGwZg|xMEUXa_jyuM9{yce<|W$o<^e+X|GyW&$crGcwTad2O-YVBByD~# zTvxiaFy|wY1he-@qm!nl!*KbdPqlKOx{)M-%bHcUFacOTC@NlMrZM3@G*3OhC&^xgK7~&YyITfl5ZIisSe9zNJL}dVRSS2=ChbMS0 z4cZT1S1_Wt?~~5PsOEYMjHID$mD!cqx$$;?dd9spc>Q9pX=Yn;Cz#!lf5d=Z4feG? zm=#f^5$6k{(MwpP-cM)toL7RE)qBu*j1Jp;{4G-FIVE)^e(Epyr1|09Ue2obEV)2@ zA#a)JJte(zc%=5@kix~Pxddd&o^3VQp63!eT^MKCy3q0+Zg$^g+*3uU31LS7rWxlr z=1ar;T9a4a6R%Ft&?*eU{h5Wm%MV>%&q;f&*}&v%G8?1R2E-DoMCO{VhAeN-SH&J| z-!Vj_8*Z3G4ha}qalUEDGCc2r^sYPla)IRoJsQN9khlWb(Rn+##a%QR*R(otFadK^*fYA-H ze$qfm*X&PZ0>#gnpe@9#zy%bjSCy`doA+Ia?lDqz+64O~4g@!kqXY=>s z6c})Sm9~%+N=?&!d%Jsu5al2SDz*F+)7;h`Q0ZpV?W}@nUY|6xRmcRNg#*PVfTnr& zqZ0i*s_>%qpNR;Ux8Y1T-c6e{CHbAT1olIN!1C!}HO23k`)QV$ixec+CFYQjHnR;v8%3!*WCc+W-_M5%~rX3Fug&b^kdW20s+`Z?C z-kHZ^bg|kjQTGFRRND}|056=0hBhkiInNQ6|J8zbkS1XXZxNPut?rCF| zkd-iZZ6%L;53kL2PMhGxb@@5<9*g|d{#MpcVcMlKf8h8kY*F}`azhW*^el3cA`j4p*t@6(^gc-8$BB??$2 zpXGBZ2E400v-`L)#TW2=qj^JnZPAQ!xny>!l5N|eIB4JvU)sj9B%4R%j5@bs- zZO$pp?MCFv#S_8Xmcb9g_Vo_{v;$E;2M|xjF9gjYoGu$*0Zp;t||5%DnrarOUi;S-()J`NYnn zx{pN;HMpG9py2|mf}whD7C=;Ix!_x&v)hPVmsS^RpHo4f<~@l@;(bapx}hCuQZdK% za6Q?SCsC-;U$var=ubrd7u%B#dsP`;XZw4)foQjP_&!EUCZX(o(eGPRUIVr(MYro0 z&KM}mwnMevxy^xFfn0Flu#at6WJJ0z9X=;V>Y7t>UNw*krAea7iN;dn3auO4MGSK) ziq!}QVQ;c?4JT-tx1@6g2JF9ElYf&<arsF$ZdniU7B$0AUj}=Q1ixQS2Mj-u3A#1 zCEIqmPC-4Cv)wS-rOQ`4p;<33sTk+Xlk-Xwe9AHuz%hXl=T1I%yH!9-SPVV=u?D>e z>7PsjQMyEH^4ejfmNtjpLfTLhC{|-EA?)EXoZ}j)z7t5&y%J6eByW{_5p}dR|rY4kxkFvs3^y>p6@d6nH=$6uCCH8xSqZ&+*0B zhMlMqU};-CfbLK9>q&#a>oma(G6_U^n8`MVZ7Y(^_BbjRF(m(H?nLXaEk6(LX?+_# z5VaMJR&`uyUylNY8|{+?)n)SLOXut3kG*9CEC?Tuoo8fbyzD+fRbzc;dtP822 zfKei{oTy@G3I;oy*XBvXAEwPGSzn~d{>-CVyK(lJ0o|BK6hj*_0YpiBTTgPMqlI(= zQ4XPY?1k2{vh^(;u%FBGTqzh?%+Q6DQ-Gqid>DqmdEEld`zJ3Qk)!o3dfX+*BPS|) z!&$*OaMpeMIp4n+Xf89 zmwNydP%y)!Mqi(6=dvq{JiF%vd@{1D2ix%IXTpQ_SFbRq#J;zAFPwFEIA`733aR-+ zu8=197zk!Twz&2vARW($)-|bNGE}3VPi@Ly>?mOk2bq7cBVJYjdPN-!v{^Dun4|~YxugH_at=6E7&wC*1%~|Fg zjn7r^E4fSq(UHWt+66&So)}LT5Y_(C-IqAbi>-&ws(6Ib7O!vW@9s}}QGgwpqT7w0 z6(QDc`;jx=aTl|)52D7F3#Nwf+b&&+s?K)LaV6y*jsOMNzTBspHLY0Qf8$Cm@q_U0(gJQF=;JQjkK_47>#X~S z&mB}zU(g!D5ongw6cNMP?upWNah+zDq`?u;zT0eKEB6@irIKg z4JF5&OQwOSJ>rr~DBJGYxLM}?VDBYA7o}^9l!uG*)O2vX32w3|=CMCSsWPst7f%6B zKAh05SyiJiy$Ayc`%j$<+yDZ1;W&veon0|d*gw{) z(v$*RC{f{K@yv3$b&XNulO-*H8u0tt6=gbAUIda>EMf$@JAX+_f_I%(@v&o6l zS@*`J#%{^aw;fYw-A<%Cw0(m5W;C&((VAt%xporpJ3pq&3DO!`$cNV;HF)n+hD^J? zOFf^(JS8b((ZTPE_>^9zg6MGa+2*%(nKFVRWPFSf|=CCW>t#!QU;zd?N?+zL;~6cDv-V>hTrt9QDHbJ@eR zJ9qZ*Ci8B)mq9e`OK~!;EX=WOTQnqe%vPULUI)SKm zIIQOmmF61_-4-~|bsD-OH+;I?e3V{4bo_P z$^yEN73Wr$6?&2ee{!c-xE+f<23&IPvWlO2FKmA@jT2>qSaI%1ZDF(_M*1as_v|cr z4m%ZUsi~p0L+=H;N{t?!(ze9p3Tb>{DHMIKT|PtW`NWQ+de75(45aR+lf`7s0+Z+V z@TP{mov@u=EBVbDH1TO)9-i<3y7|bR@#16Ns{Y=9o)= z;t;=_IE!O0nA|YOxsV|gFvm_3vKIb6ON{j@c@eJ4g6;$T9(Z4SNsUta!58+cA__G} z$u+s)Ck1GU36OitJm)n0->mg(`6V7{i6X&}lK z%~;~x9ABwB^@(YZ?Ck45z@qFw*`WI-PPu668zxmH;Dp)>(O6|^fqdZRHJa@MTlPpJ zL~%4!9w?w8aqF!6RCAXc!hWpT7j-D=SNoHa9OP_A>mWNwQ9ZC4`NhQTkvyg4NQcG5kB$8*cRZeWwE7j}3b}1XVsNiqYI7L!clEsN|j~ zm6*=8o2k@#jUkx(6?*#yrfF+sF0@z`+JgDj7+yMdrr_s5>x__x|HAzdGD+brtv8&+ zADou2RilQkH^?kWQdk<7)s#>`6^vl5s%Cnry!}dJ1mTfwhjk*P$B&=__qFKR1i2@wMMt0EwvY`)c{$*O{h3eL9l0Rr9?+7~BQDG;xQ=Qo zGQrPG0Z~gHw)Dk_bN%TNHrJ{9wDmX<}%M!^QLQ_%x8aXlMy5PCj3h!6+@aA;Dt1|;#}@K z2N{^URbpa3g#=N}(4Tx+7rP)x^oQG*D65@mAj&$Ag&+R(0_GBqVCzahs_IMitar>M z9K~~`NEHRFcy-yF3fZ))p4lz=rs5a{;??w4`3kFs*Do{-&6NYqKEoi0OpHV5m z_U;8>mKNm6U6(Hv`WgM!W4q)|9DSKxQLIN6#tWvL@Te8aNjrz0Jn%`=lKW4!$jdm= z^6+b?WZy9upic_dyyY(G#(S~Oc8TX=eq_P?nt_w@$+Sz7(C&#+x)5}LO>WI%$&3=; zjL#1#v**nX3o~m)Zlw8o$SYIzC6ho@hbss@k~r65O72uOL_qnn zd1}uod1B}BAxXUVE!WDOH(xFrE?FeAswJNr*^z5t+l5myTJ28Xpz7sP=Sjl&L6OTrdd#QPYHy7 z&1NJURWK#UfV8;}KyH+l9ds_kXQ+Y$(NHx-gg@ zx1E&7D?%K9PVSB26d=v7SUyKVbjOKi*?r=iT!rtwuy~W)9_$|!*HVL5CuV$7yPGEb zXt3euJ5S0+cTu94ck`=#!+S0yV4f*`s~o63%9D-*#_f*S*+1Azr3&3szWo(x5>k(}ITCY!J2 zVv2HeyhkR~_r9f(erxbFSQQJ}LoafB&sJ918sHss~xsjW@SX;Tuog5_ZBagM@M zN`FpxTtqE^mzBFOTObdn@dbs}@RiWw~nK5;!}tKg#~awDfGUeF@*$?fUQxf19&m`_L zDi(47;TYoNGe9DKhfL%|#~Pi%$wB;Xx$&l#h^hVDb8X$2pzL~YyovbpJoA5K`(bs{ zwPJ3iZv)Vu(xrbYT)gCC5p&Br1EN2D>4-Y-UN*Zzm5*|=vh^HbU1J-#)U&dA?z7H*tSTvh)tX)`hzOqW{eB^EjzCsB>Gt;YNX6Val2dSl z9De2*>Fb8}Zngu`5lD97EpI5(|1#kQl(chaBe zpM}N>Qa`q#I42te%#%(ym;^EjM0I5YGLEEJWT|T{7ELY6*wXm=**D;m&xn02Ieg7z z%*5>EP0h`}_^&Pc><|9*E}36ds%PAMABSAwWn- zLP9xbt-@-xIj7l~otgjps=HRB)rQ##yFD}Yq}uN3P+j#ZeDz+vdgb;db@%oOoY#Pu z-Qm~~*<4UH$j^VoJ_gpqIm$( z^-43q+VECogKRpWlotJY{_BDT63aBxtWpeK^Q+0P6rOBmFLQyx=zVXNiN~mYfhy^0?}Z~07V#gq+3ySHcZh0 zqRGmCE&z=;#wx>9;c~8qMk%ZI)ycQscPUKcQ{_ibu2*XcFF9>;zjOS!D**>)h~>^Q zId}FXoMC<%bL78Yy1hT8?|;X|a?`aJ$$1O0j`CIr2c<~jS{4E=-> zDS-v0Re;W3gZ(^fZtEn^yC-v`bcM(jmIplALPax&z=dEIUO!$H~B{ z9ew-Meu4dkwY15FI#AVQZG%RzBk{dc-%+&ajd z4|i{{=VRfT&J(S3se{R`ZSM4+KDC7PbWDkzBsYcr&}H+a5K<7W2!HnBE946gE|=H7 zd%N1)cerI1W184F{}{`HqkB4tzhhypJhHt>E>v*IY#E`T(@tW>6+f1w;%vs%)!bIdx@Vd^8*xr8@O++2VLd+9I?(;H@|!T2Ww zgVuB$q4rS*V>Ae2An|STUY*!IhJsm~>kfn-k+{Uk<@QR4tvcp!{k}R0^AFR(?@?=& znPI_Ga#AwPwv8kjCTk=5`ia_hYP7@MJN4<=`#j{eEu1OJn%c* z>7k{|CBJ`Vhy3|-*DEQ8i}Wv;J4qHy%9qyxt~XyaSNdQHsv7ecq$}Y+0ciwo)#Q_3 z{G{BOnjwo$n=VBK)}VhNa7J3{9FF%2NHIq`Vfr-bYHpFHeY@2A_A=n)u8>X;$A0_ZR@s+EyjpD5LVekwi~ss|K8tug3N-jg?Ih zJSvfu;(8bbaIw6#&>;GmVIN9qCvC=fK=@a7WOrIAeiyHPnf_ zqeGHlXmmm!Iq;3d`>o2br$;jKa;5CF)8&HmswKtami5~z1H86Ff^)m1u8!fvn%>~K z1rW~2kcowvQjwo2MF3iEgEkdyxT*p3m5^?&PBXH@akhU-(xjwhKO|A-QX+zAWJ}w* zWgD0>nu%j2fo~^{=kKm+a`*Om(*SHKoF|DkL)alx>U?z7Zn^84vy_U74N+Z(s_?Wa zC0MgKU7lONUp{ip*|3rbOu9LbI0sN3J}gDaEG(9ZbLWT~Mk3k~J-d<&V)ZNo7O|2c$39V2c>Of~Vz_p=OTG~2L4?OC)X=`QwPS{F~+S?YR|5T7tO~ z@FRLXCmR?I9V)Q}*1F0@`OXI}hoos4D5z$D`&1Ww=&FVCzMnm>)-H12OK$6Aq|xYf z6y$54yH_TkcfO=$W^!}|snZ(uN9T*7#maQj(5RriObVvWl(wUX0IHc$=(Iyi-?+TR zriwPx=jxG(XDyP6^XEZQgGv`hUs)MY$HGTJVSbLKWx}KE^vFlP#$RlYRxC zN*NTDKwV2ye5+Ag4V;Z-Iy~rn;_YY1-?04Up4%4lMx=RQ;v)yZS1(k4*(GICG`XVR zYmlRvgEW`Tne)t?h3 zd~(yWHWEmMM9CJHm61UrSY8_pgjtW=Juca|;tg@NwMudtrY(tl5h7|F^q!(f zgQGz-7(j^-TO1S3aFf*5;wQ%>HDU?TwR;P!UposY-*u-! z`3|c9>jB#vmoa%Dg;E{Nz&UbCrgWx3RWQ$cdEJF_fWgwV3onFmT6EU(GHtOyi3p;@ zm5Z}`l;Ki7{5{%-v#e`e9{*-Oy5Yd_6pz>6nF94LwLH8QX=1~q|J6Nka83v2v&swA zvWkK8Zfq>v3$e5?TmI{|3*~>GT#Gr>KIQm4(rHTU_^i3mjQm0=m^jgLW)K5C6)PuI zmPOO1qPGW-#6X%OTF;PQ3qX@(_7zv6?8>2z_w<8jB)@esz*EUA)tWlN=e^`>)_$vo#^1|v31x)Zy4;dI$k(=KoAJFezZjWjwKw?ez7yaHh^ zv~cP)Nzby@fQA;+*uKTO!8yO2;vz}Q$y4Azwka6LuOaVBRD`Bx=B1ZOUdaR{fs!ZV zO{zXYOE3Y0oBS!$q^}n%=p2x)vF3{b(Xr8pV#S%E)VO_e*3Yj<*R>P2`ASsER7l8E!)PqxFY&_mPs;} zi4;^!a=aRMV8)eJ1D3k9DE9S5M+zJGO{e_!Vu{Msi!O!)TILu4)x2T3Py(HJ`su*W z#DtT?%(booiFMQ>;AVH9Ld{}$Hi0W!Kbb zT5A(&WOUA~iE{l}Q{>4td(<)*iprW)qeT=-IzjySZzvcJfbRsK%%TbKPn#bzs$88l z-C1Yk<*D_fi6HS1ocemYVTF6HOqe<)YARgK<4}%lhuqRG7g~aX88gKTtKmq2>Cinz zC@GEJJCW}^qnB0_b9fxkAiBNFGr6(1FF+J*}!%+k0boq{<;W@z0js`_}W#!oXI!1R# zL8VGT`A4{_4$ru8x~l*bfW)Oe6X(y32`lQ-*|U{Hj8hE`}rt=xq@6g|plNrP;#-$}UVFwP)vb1soO`}<^$7* zDxiG#PAtk%ofI@>lkNLjn-=)^xStyk9rq#_(*)>c*z4hjZwtPh^yZ#p1+a?kVFSxaK^gM9Dtw`A$&O8LzT8|2&Xy-*gPHboXpEsTh0HW!+d6Jr$Vb3WJ^4vIH>S*WkWw>d@Vt;s}v{GVMNY>3v zr2FuJ!_oskx{+SkZ+*-me=&gc!h$+yVuch>og5QtTyl<}NwCi=DVFqtBIQ;RS3_ee z22IpFl@?^H2r#IafrzL@BZ!6=Dc+0{84!&UV;vl=Qt7t$`d;8tmuEH{&S>rG?dH5F zXBVB4ZZ;ySf#+2e%l)6aMp^4lfjht}&zuei*jxl|?e=o#)eGf|?>JlDec!VJYhyKn zH9&fDDbiyUmx$26ssgAWi#f>0PX5>^e^JUz#T;$@@j7|o(dT5(t^?8zK&3>QjQMVM z&Th9`HgDV^`&O-z{CrAgjuc2nne)LP*I-mOZ$2!kqv4l!@b5Cqe^OztiU7lVN}?5ZT%ko8NCnmT>5)NbA&+g^G} z`qH6xE-aFaoNSfuj>aZQcX!E*$z>2lSfo=D8aAuL-P9#qVo9PLGiBoWSqMiF9M`CgBsyGa#^*gfj9=f|=R1rnrffJ+ zo8ZnFj=Bk(bp_=bE2$?>C?OoQ`>DYIwEyy+8VenpX#Cb=Z5 ztzL3En`CBDhRm5Z$%-P53yk&I*XLHwFh=8&(J3rp-D17TDJYPXOb&qb?9q^=Kg12I zT^C|gc#yBn)ra-sGRJ;6xC%T(%+a`PKr|X$b#|QW5~+c3cl7#~FsTnM-<{Xm+3TZo z1gA7erb|;lSmMIK7Q}m;KPAY1_usCN$JQQ{$FSuZ^MYGL$}EZrc!q8X6N9iA82KHE zI3P)b;ZEK0dO5UfpITB9sU-_TeVg%f-ZP`9SbE`;mFKyTLW_&?rKm6uOPSJ?Tgai_ zkDKdkd?{&?Goe@w3`fcr%Zg-K*N^n{7~E%jLtEs4C?mhXnipjw94+A$YCyQ*_vw@J zr59e$GE$PKjW(LGdVb_qHC8Ec#&;4$y{%fG$LD)wQl9e1pSAZ`Q>K#MhJ+nw6wqL) zV7e)-7UgEh)A!sgzkG2E_9i``mcB4MR#$W4O?E!q@RyG6-`ssn0j}L2op>nj&M2{u zoGHaitS8;OZi8g>S$j}&pb~9jna~M@-k*{Z4K1`8crW@Xh;|M~j-LQT3+nW&ECoix z@tt$VoZsd%?XB&OnYv(EFGnId%JbC=9?~)%pu}+p_2~1}C zAdBT> zRd(E?p;0}KawBl2q^1Ex?Ik#)`B*$Wi~J{}j9gt^*oeUz<5H!mK~wXes&-0xhYuc= zmmhsbI*(M!q{-OT1rmF(^W9^?uCz=@)8TxGbr%0DZ)!MCO4b5SII%|M-9!RW-FFP< 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 diff --git a/lbrytv/dist/public/img/gerbil.png b/lbrytv/dist/public/img/gerbil.png deleted file mode 100644 index c19e658d2432ce63e8f550d1a64410f65e2b3b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4697 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 bGR*%0KPS-t(jqfO00000NkvXXu0mjf5mEHC diff --git a/lbrytv/dist/public/img/placeholder.png b/lbrytv/dist/public/img/placeholder.png deleted file mode 100644 index cd0466f30db19c7e8b5699573e6784d9d04d7bfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28818 zcmb8Yc_38#8$W)AP$_P!R_>=R3Z<)yq$sVFblZj&qeUu8x3Yzq>6W@JawS9|l~k%x zLe`nvjw~fxVpR5}u`e@b=KH+QIkV_?zrXMApU=lN%{lM)^Sqwd^Ln25IghjJ*R2{o za>_^y!$w=LUcLdtl;B5&qTvege@nD%C>VCw!Fu`9P2QB&vH;tcPUD%sr##bn_4#vQ zRZI5hG27k6e%hf|uW1()IC|c?eEg5MtL=uzpPK(>;OeO(OP~I--T$XGZH&?x+m{`p zkI$(Z`|anx4WA7)N4Brtw?>KG@>BZX(Idnm7CW)Y3YlYe8XWuk`KizAM$CUU?XmaQ zN!zTpoaza3OB=ms8`iQa?3(T2pC5kc)zJLs%rKVP(TYrsNFUY24fi$)0-OZ?&v~hu zltcfsNu@Er^>GzGome7JQuuV{gBx30Ez$hJ4yJ}5b4>Z+@mlv7J5wX!FFRhYKm$ut3b%9(R7RPz2XNH~#t*7;(?D5r*YL(xmNVJZ4wr53NV z4E7h=p!p-ZR!NJ7_zTxhIE7Qt)@3LX`qe(`$;e^%Yl!Lpu=`V;gcmz_ri14hd8Ir| zENYy_DR5vb4hlxVm(KQ_XLJ~fdip1eE$YkQs4kz#lHV4f-mj^}h5vo5#T(@h!k7B|hkS#mG!xkFr&=r3*|3x6MOq zAeT(j+K()S-iGRYn(A5Dwuqe{42oSjY1pj=dDS8i16ZPQ! z_(%oI%FI8RGrz&l|CIF3Bw%o_H-IC0dV=LG3)gqWcrnk}*%qCW8<01wa-~g13kZsl zU`1xcDV&WB@(3Y}n+sSXz$J62)bVgFzVttg@xUP=F};DNSZ+oF7_D6f<1#G!u$si9 z{{FXQ$k^Nh$XA|6fEeE-H(i1pK*Y%JourIA$(@3X3hMy-qSYq&mjF0O*y2mak|9j6dP48Z`NGRRnHkXOWzMb@{k-WcOjc9 zC$?D1Nz9?uLhylS>soG>oq-ENUL}HE>IxD_85gCVnjp`8quaq#IOt!p zaTy_ZX>dG_F?s5M)qg`s$8RK;A>lR|#o6ysVwJEU`V=lX8mWLDK!-eLutja;uY&8hDAM1488NphI-y+67RKlS!LCq#GbQ znT-(fkWpTmA}32sA!A5=@rC;cQm&l*=n~LETuoMm1F2E(<%5Dq-U zc#Y>&@@i9~CHWGpfnP5R8aZvqY~fmlC$rypko$GMfZSBrxl7)42N!n$u+dlH)5J zW{c=1%qj~B-ADubBNZZsn}f?PNlwYOzzu1Gmcm^F`3KHeybP&=Gvco>W1zPqxLBNx*i}eEo$6pe2+A9$!)+?Dfz;P9A$G$H>A; zL%dEZp3o<R;hyU80L?2R&WcUwp*ddhNO_)*g!6PAGNO%zbWQa(Zj0i=Z z1)fvMyw6n}5;H&1E zIaMb1mE_WZ|9`s*F+6Tqg1aGI0Uk|hbVmpBtwP7;r|Z6AVfk7&l|n)L4#SGzlrXr^$4E=YAs?t^%imxg34 zOI=+5pQ5lAXLN3<#Mw|y-j{e&F2PFTjN4CUT--N(wq%Zz(Un&s(tgAaWcgej|Aj2Z zhD0AMn)^E$WHJXyHiFn;I;sGMW~mO|N+3)GtK*QDq}+ylj~jNh(~xMy6C8@aJ|wO2 zoZSgEAfh7`5}C;K;W9eh46G`ZB6YBS@`}7!_#ORag`yl#zi>qoLlRv3x<3_Et;C^H z_9IIwG3F^xZCjCc(_9GapE?b8{eUQ7d!>7l?h+Y)vqTf>)3oGd6$&TZ08+^**d3S&|q|Q!$2@;>^U1VE)pYT_yBz8gm`7So`%z)PS@2a>YdkU&fzAKCI zQW7OdGSH+pLP8r64G`i~4(>k*BoJTX+H5k%A8I=?tvvuMOD$xE+Cl#xoQU5kl_3{2 z?*D+!FH@1wjB=~So zO{bBANPzXKpa1^#@%HyzO;RlT#qCAEYEa=(|^V z5v}F>mJ`7yx@i3*tp*T$Cvix|LT1#zbOj>GWDrMCa7k@=Lq=Rs#UOOc6%KgLm^vNe z@g5K*ayUsiLlZ8_X45ob)8LIN+n5wv9~hh{>c_$6XQl-`*ST1X61VOG=z)ZUJr>$`;77 zct|=Ai8^PDpdob{-W4Qh zQW1Pdb~J}B=zaEaRU9lsSNWMFxv8ZriW^x+;)z*?=$4KoSf|uT0z@U`x?oLZm<4^P zh1+>2NI3}|BY@HOObWkqR%0ue?;ap4L7Azi*K zoJqfBWxuw>Lm9yAjD1(8>3}WC?z()PmVm2xt~)?hq8;#(U+Q!r)Fr*&^-b|`L|AnL zG)U<|uKxkOxz}t->(X?=P*C)HF&R8u;D7HssE-nX5ul@n=o8QWI8YGMQAq3Yk{*?0e?kJ7Ygz6wov*BS z$5cFab}Mxob{mf22Z-978OK&$6eT}Ox%)vUu&g2}`S{jz($znHg{q90gIU< zU8de!&vYF#|nzvH%B;rFm~AZ z<$(73ISciDHqI7g&f>n&wp$&0a75pwzkE`}b?f_XGTOYZGgKDD9IjR0dCldw66)-% zS$iJtJ@s|hF_#&MdaaT5K4p2mPqsC4e=SHIS!`Bfpyr+E-;<_$YJ9v#;G+?0D(keC zic4v3G~*GRS@@DB1;vaz5Miph-1+$Rt(nob-)xT8D|36jEPi?Hze0-{Jn@xPNoUrz zW2^tVKQbdejob6YqD7O<2paM0I^$}a0n6v^w7@6Z64DEr>aNYQ67Ld>ZuVv`JOxobL|Bcxl$4NR*{FBWl)@~ZN`QG9=tkDS!-36^vc3*S!eEkK# z+W1N;R+BOpnZO@=)jI*Za{S&}#-_i+Rv3uQzj=hV>2JVBO)?4Zto(Xn=SAv{y6$)4 z((n@pA~xpN?|YLNA9QH%`)iJ0&b`mub6WHgxfgpnbENQm@hZ#-?eNTs(#s(myf5{c z`3qGsok>xTr~$2~@9>hw-DdFj?JRnEcjcxMi&9hN5A6Bd*S(s(ck{ec#jDD*@BNOp z*jR>DQjM`m*eGG;#BPBLCVElrdpOl2YFh?dUuW|t)g8MSe|R0|ot+kM_Igf!Q`V=a zw=h=FM6q|IUhQh?fNxhw}|4g_^X3& zcKG}k+zOv3KShsV8*CJhRB^U-c;76a z5h;}g?+y7HLj6m0iW3E5oL}aL?G=o~Ow1$b0?S|RMPNt+;{ZA@;br&c*sk~8tZ!4l z{_|*TS#v8AAaA9g9yMgQg9_iWb(w=ac{GdFjm`9Sv(ESqP@4{y_dj!lA} zeGR4xdsXIJJmPC$VKLR-gOytcQX0?A!m_n9KTcOI;Z${a&uzUrRw#J4X+!;Pk@@p6 z=E56{ckD*mYswY$12(UcI+k)J^XbOy|9QR|4%a*%kj@KDTJ@*u*hXsK-6M|H`K*M{ z{pHz_9S>faPuDgqJa{OUVdnp$H*^VhyOGw-Qm(PZ%9Y@oA#Lw!-dWi{7KN&FekpFD zFPQ#^k05s)JDsW&o}#Sy=;$u5<-+JPwz|uE8%NJoH(L~!uG6Z>>z%+a`vbdu&B98o zz-gp4VQUMFU5|Do3DD}yD(+Ni?l7|#CJ55D+gRtX>A9EM!@JLzQ`s`xXJAY0o8Hi@ zM%p?pYs?8KwVM|ps@RRa?G5$AbhbSgnZMV6)?bGzFxp^R^t6N`@8Ps2cBhaWP8x*k5~v__!MQ7)!Js z`0Cklxb_z;Gv@DOtfO|Hyw-Oo_prp5#!=xx$|C*>@eM}SO$MdL z+8Out)TLko2Up(q35&J=1_YjbKRHMoJ%eDZqti40};;j5;706WG4xIFnv%!+K}*7Qd12%$OVW}^`G%2=Gk z(bcB3XU@1?7u1tKxvYovt6t_3@Qr(UGGYzbKx{x9w(uXH!_1(;vtzaSDJ` zto<@w-EY?5IgDSjSP7dNsnL8j>02|c>gI{K_t#m=bxPU_j{iw_S5*;&Ef7{t3Vf(O z3^_HHVHg75e8;|Kab!Gmx1%!Jpxbsj%}{}}M?BEt>0#nsZ3`G%ZF2Wk{n_mw6|uqi zt($Z5Oh+oM(|Y9Z3><)+rpNmTY#xe?r!md^YnNg=b`!sjZPdU_78f22{RG&WFX{?j zx905HyIjk$_P<8bc^6N=?kr8|$`b925gWZjJd)QNngsAbkq3*=v{dAr-n-9%XT$my z1Mcly?OBCZ5xr-*bv{+qVOc8cSdhEBzR$p>o zXY;kLi+Yr?kZ<0Dx0iEP@Jn_qs<^X87-IZX@9BX%BLAa{4$S_eBX#S;BEw25gsdT8 z+gXrH5wa51baM#sO~9V&>=`ja7Wd)>L$QT=Xfz<9Bhh1$*pMFO+YWXc#s`(-{MSg^jr<$bLc_`jH=Pl>&T#3qLkK-I+k7%}`Yl@3RI7xH zo55ovVh)7`7PC)yt{IWXdHikoss+G5KpRQ`Ff;#CxNAciy%tigB&=Tdjzy(h2|D2( z^f3K4!-MVcRxh|I@OA1bp>h*9C@#dtk^U$x2YuUdofd^tWXPv36iyiqo3I^&jazfq z>(-VXH)-mM^L*ld_p%i?YmP9e6D-y?VkaDmv|`WCF6lY6YQ&n|3)1KQv>b3*k$q$- zm{0($T)YYai`9o+G5D?JVv!-XR`b(eJ4)O1eJw*BG<@A!M+aXYgAK0UyDTTKtP7-A zCAIekgW_~zg}Af7;uyGM-ApVbHGa#dGN27zjab&GIgZt@3sd-8ZMBUUl@D{`xz9z$ zCnhc~Ynk3VfZrJ*Ne!FVjkD-;#C)*%YX?iG#X{6B%5XRgJIMB5>^A%CWc{8c1_pkD z<~0M?UYy`}E5`>Fv3qf*FaTt_F2uU}eU3va&`xXpQ`EBv3n}nE=I>o$41nxwiyRwK z95_9P-qfnH=?8vxZcb zPVdFPSnh$LZ!-1AOh{m`w;2q-R_E)x=rf|p08!L>x@2i&Uh4| z;gm^2b8T$xjVc|ib@l4oWl?Ew!BzCQzki=GuH}i#DN6hHSw+)>LK6q?Kh9~oIRcTj z{&Z$6uvHQJHf3IX5azVvn*;4wAU$g|r#3e5sVkq_x8A8q!5gH2_e^aYvFNz##u0f1 zhrJK}+^C210i+&KkBB5(Ex;8OKVyz=CE4sWk^9z&qFM_<_ZGfg<;(f`2cBePn6(BP ztckd$h4p=E~H&*S;HN>WlB3LPDwK6-d8ctNTa9zI_08qptrtaUb@MX)<{uSd1&dwu@Qw0MpoUtH9e7I z!`xV2E!-S`?yCd$$~N4%X_mMk3L89gyux3Y5w1CUu3y~WdOg0mPr4s;l>DQO zmYwpKo!vCmPd@27iJnYsFlG7L5$EGRRDSsb<(dGI#|g*<>$LEIU@3O%k7llDqWQYa zG-R+YJ-OWI*8TAikju0y>|2^6qkR{JukKrzd&f^F>6;POVzF_yUhu&0Y2Hk}*Q2zA zQ+4h=2UA!e36AiGLk4@twrau^Y_2P2uwMMpcjpY(`^z`BZ+EL!;!haPQRra__jl_W zJ<4B7n|$f3xv^Ih)vKww#^&IH^_}mh1RfgBS3gC!{Cn*i-dSKSL4b#;=#nGzbRE1Xb zWoO?Sn(C`4aAG~TjmWdpzY01GA!g(-r*opZj-&y|RXrwHp6{R=@AYHRi4W%1v^ftl zmavT|_7=isO|@u&ZSwuKZ>9$uhl7x~&zN1&_Ga)me#&8vGheuTVcaQa-vyZ_KaF1k zq8G?Q1LS+|QdlBR`4rCFBGxz4ycU~1^v(Jh=b5HurSCVZm^TmlUdCLdFG%{9Eh-Tn z)_b_TJ}CL#RcukqHd~Jjh^tG5NBM6Y5u_Ceh(TNh#Xz(xgFFm(d1fg1Xl~UmjE^e9LIe^SL0z>iy zPtp5J$@e+VssaTI1AGjbYWUIX&iBqMy+B(KD`emcx}szu#zpm8BQ zt7iTap!)ahfhq05oG(c0T7F2moM~^9Wv2PZQZd~)X5+KR@7+G80@ERNHVO}g^P*5y zj&(Q7h2nj5ET#&HyW&kw{!+UUdHIiysui&YFasLoA&d0K^QY+D_1QM#*w5Vw<{G`p zuV-o-c4Y+S*|Mohe#xKLPZ?kvPh181ReK3=#`IxMuv%c`SOfwiEbsW>;60Jk{J2wf z1ute`evh63#*zkZU5b4D*xFRfvQqH;$kMZKeM`TFPhc|E>*?(raLp=cnu!ByiVCnR zZUDfI0%t6MCGgSw_v>b4%})C=UI>UC3s>-6@HEk^Q9pQKrx{~Ckalj(xwkRX7zrK& zjeY#XsQ@PRE5tly*B)eH(lFhP&4xio&-eHP}dNESn`1{OJb(JwBbO zeTY^e_+BnpcgFCddt#?@W1zdde08=z4z!rtu~i8y_2ULj)N()Od&ZC6%}PZP z1o8#HFd`0c43s7VTOH5lEUPH`pqS{xr`qlGc)eTO(DV#dJ&f+byQmZw99s}FaQ`GW znA(;;HY_Oa{WS|{!wB^+(xX(Iuq#l6vHY<5?%;4r|5FESFv8Ei$Rq4Yp$|V<@o?=m zd(0%5?hzh2IwGE_jkO1e(zpKJ`Pg{U_R01~PtmphTJg$eOW0Lgl+1f2v{_#aWhBz* z!QBah>_B5}oj#VKxgEQcQhpeu$tLai+B#v*U&HuWMN_R@-(OU0@{6}WJd9~)I>ly# zL0t8;^8{6nK+;YT4{npI*v`~{d^5VENg zO4A0b6J=}JTGkKFFXJD1dHHoAz*z$&`&2{~FBCu+WvX%NAs`ZN#9zMP7Ni^kMaM*d zbmiCJ%+Rk-MggVe{o}bNCy$k4LYpcq=-;wC>f)u#9}jycTQVWqY;XYMQes^*ec!? zeT>4rn4~hhKAAzKYXXKGn2(LW2oo zeZkoqw5qS>9@>V6rLN&N>?Be0T2}lo+Er}@d}t#;-HNm@`eC3O`ZdVoZu}DA>QckH zF?%1(ivSco;#0liO4dK?JQi2;n{Xk<5$jHwWFIy*?2&WT)WGdyF$Odyo^?9u1;VCB z3SCdbKBvz@jh`HByDczdn`NzH;^6DTbi1%!HY+vrSM4Zb*DEG2=a&R}zL;FY3q68b zQHCkGHjeAQwYEmlQJdoAiA$H`_J$O%a-&t8hbxZ0jVo4^7qG;W0PM1;bC-fM#+}FA zBItLZ)&#~FYM9&tkF{922EJRLlUF(R(PD*mQ&k@a5xx~6($_sxpSOCV^Ht+wRk?KA!o#+S~=4{Ra-ab?BDD8B|URkDUmjg7QyRmu^QT;LweSCN1vez6r)S< z918tYLQP%}8EY|D6!FYA>f5X|h&vP*rO3>O#)2w$wsUCar^!8eK7(%YTvdP9MZ0GI zVeOHTBvuqwPgLuj@X;N4iL>xdcmSH;#WTe>=*#At-FZ0peJuk`*Jza^m z{~PoO7Gz~SsCAy3splYW7R5ON9eA5`xl{T<=q%dOmjv;UjEe?vhB0D31m>&D*r~4z z14GAmbqDP7Lv68VJ-oF}JE^t5$J{*OoCDOKlE^mI)ZaO~R{#Y)>jpRD#^+$|JbSG* zw+Y4Y7CPjKil|5B{0k7^^y@TG2T+!tE6P)~o&El1jo6gXGUO_n5pH!fZ3m3EGU;Hd((;87HR`Z7^7% zk|Kl$;MorgyU*a!XycQ2b~%|e-bM&5W1so6Va>_tOX08lj;F@G*yH=#mC-SgYr!msg@VAAaAmraPA+1z(po@yklP zo<&b~E#n7l-(qd!G4E-v7E*5qK^%pU%`WH?fcD6{$u*4&JMcVvLDG}ZtHg$V7kFEI z+CMvZ^48MNoJ;M{Ea6U44GMi~Z?h%)@BCQ2HjiY1Xvx7LgZLjBLjakEj;_&<=CdC* ztcd#dp(=vmaMEpz_K%4M|{rC>!vN zx|0yg&{YWz;p(wWS3!G#J4+jeg~=Lu|Dc-kxxu~*p~ruoGET;Nqi{Z;&LhI?cg!!vL3m_#FWdN= z8+)^(*vDA#ew|P3=JQ@xOLj8$IOP6qkdneWEQH>7>t&ID%ke~`M*WJ(_NB@HOjrh_ z=#n%QZZep*rK^;n83_MI+BRrqDmZneLJQ{0l9bcJsW-a{-m_j)>@SJ@4N|M828H%t zb2s@EPlMv1G<7WR*!Y2P*R`pqp8cEsdNfh%Crh`@H);nU_e&4Y?eORDZQ9POvoCY! zb#!zk@K5Zq3Kr*XjC+hLM-*77p4-yRYQV~W6{^CDPS=~)T^4jhSsqZ#bF2CEyyC_2 z)CZ%^#(kLc*?49T>w(J@^K-M3LGIP5Ck`Pwl$bRweWx&UnyMm&#b9eAOl#y^Ka-fZ z-RZe^PJNuC4pPGx_{{n4-NJ?>v%+SmD2b9nLf}1Pv5+syVx3sUff4~|7 zQWcI~&Kp=>vmH#?vJNW!+E3F}y_bobtH*byuAFK7a$vpD>i%c5+vNvPA*w+XcaQK>J~pTx`p?r`edK8LZu?*PhIFDfpCrt3~@2TNt~9E0xe z&lPXf^QFP=0$`5_(8RYfw_~0wPpTv>waq*PUb%9u{I0L9_#?lwASLpmo0>9pKoRAh zT;w`83s`O4BG_2~I;DtKae7=@{Vs$W(nQ5D!&zU_GR?+xCW=b3=8v6X9~Swi-`uMn zF}Tany)-Sa#zX6559<0&#!QT&IvNF`-D_7{`g)?YwukQZIt1E}7O9(mceJ}v9JQm% zhX&h(r>=m&P#!>9a~$PLRTa17d~cS1FeKp%(1gzPUHrudG)+?vNn zY7&X770tNxi&jLf27|@AUI|{h6LoK}9{$XSC>%#iFw=(1Oby5kcc$+yyGiuZ0F5^p zx=3FjA6A^th$#p#=4u*%Su>Y*QUQsT|n&;MtAOd73M+v?KC<`Lq`Rg=Wqno z8RIqH`{LZE% zQlFz{ZoTh&i_eu*=mo;Dui)!HO~velboVtc4C?LE=smPAhfz6q(M^Rl3^$(cF zjQw!J#Zz_}XvdvZ8`jnLhN@!sp(CE&X=9>tQeQ|x|2TX*{96>kD0M=EWx03+mbdnC zS-QKwHJr^%!a|m0n6=QZZ3Tb$F8Gl8DtDaEjH?q?g8n0WQZ`5oEmna7gu;0h?;gnB zzV@#hG#+K1q8psVZ1mv2QRAdrKDZn@aMo*K(lrZy%sEsVfH{d{I;3(3uYG(_^;47z z^X%70mya7eO&~X9DHL)HrPB7O&A5>Q2`b;nE{kj@Z!>M z5L&i{WvY_{p90w#HXO~Zy>{@oYd3MYG}6*=i9n>zP75rAf4Kd2?YWKc+mQHNrTo-J z?)j)5)h`R6m@P$FSHJ^#55mz!uHxUf0DkF(K#zB9jf@YUHs6k0tXZhE z3`OLDBXG%i-TDmF5U>)T8wR!PG*se!I&(3oe)m|oqT4RV>br%?VMXk5{M+`&?vKh- zKc}rBY3Sr(Z{Z{v4yk@oY`<(tS7zqe-woRHClq?vya;ZU*^Q>~wuH0(v0FCQ-!huC zy-6LlZ$gOjI}f#o@%EitZy(1?Hw=z)>J{c`1koQmT+12`<~f^XJgxO&;5$x`%j0K_ z_<1qF+r$AUAn3q?H=4?}V>%V|hL4Szf^OGoSV-x!^9MMq? zaZv{Bg9jzrGD;f_kv$PbO(T#yHl-e=8aS=mp2E`UyT@cLoHVP$M|^y&uw|4Gni_Zv zBQ%^##75!5BYP+>okWBG9{d#>M?4g5}5H|XMa?sBnWy?t2^n)$f+G%sh@;PTxG zzfRHX@cBi{e*(C0&prp5;U1l&xqPo9F8&E;53TC_d2n&?EFc?hmZbE61ICe@MRd=< z>Dr2ks@(|`Zz~roU2f#o0lM}Co=ND3)(gsID;i+2yC_%gr+9L&4d0>1N9WULF16Sk zpl57G4Gq*$R^a&Jk4``;YSBhL*|x=DBZe&;jgIy-+PcjHu(h4SYF*RPwmkqIo1d|k z0-nhpwX0R*N1-&9UP~NepmJyoI-KlgEk}A!w_7+hJGu8FCy(Q9^DzA`R2Pa&?J@6C z&pA{^(7JhaUz&kYih;HPS3m3&eh7^Cmps8mI$IwrcjlL5%{bPX5&FU2!DfR(+p7uR z-t#74iC5g0GPXVVG|4e}{+#%rX-!)9HfztW6V=>tH!4Oae`KElA_d%E=7xFF1qWjM z-H$&oY1Oy(nV}V9f|P`~dIa@idG?VTM`M@xF50rI(_RPl+fX9#(8M!HN52EgUVY0U z7&r3Es?*BNelLu5eg2PeuuoYdRRIe*;hY~(b`1&+R#wNlRcCXeKL520uc-k#*MN=j zGX@1t5vz}aI{kg22{T7Ov2%IBZoaUM^1t;p`2i>*R?MvoRmqmx#=&jKmJ zV2RkV^=gQIRmbX_H?NI8?^kr{d^xDhry_9(&rm_gj}qo`0R!hs+0d_V(^o;gRMj%J zhG4bDy*;&W59LqihbnS@scLy!{$`@EWqa8oC5|WlJO(NeP_C`(4tB!Up+lMd-3e2h zTlFZDx0OD4)K#p^skL8NK#C+d$aREGs)8UulqZhc84Hh}bR=c*tOd6Q*KRSITf~}$ z>7373=Jy%BW0m3JhIdMGJ_bUm+zA+X2UPtoo~|}a^iD=cKRXglS5j<0kkAp}*U2@m zbAuMt>|mdtHJ9Uh1rkV^8(#lG1&0k@S_Suab+?CJ@lA#YZyRlc(Gjn3p6EO)Buf;>h zw^c#dO#d}zLnoxrwDym#@sPeyh7O8B41`XU5yg*!;I;y37L@wfW{FkQ4y^puql=XG z&9N`*_d!!6!e$I^VHJq$mH5FFJfi|?4IZh=qQLJ`ObxV{`NhzNUj1NX@QGDcE>ZE^ z{ljVk7?lkP&;h^^VFZVX?@`Xh4>tjUL?@XKC%y)ObPu4O4`&p$f994%cZc1wn1-R6JuB%%!29d*wa$+! zoZ!HU56@H)y$)63It6^Qiy$@OvQZT}_HdYa`9kLZvTGL!b5)$E&_nmFyFWHU<;zmS zL3}SBdZq~%Q>ZYBg(n>Fjb`nSxfFcHXeZYHSfM@ebKME&**-q8*>&ULP^B*8rdd7n;fJbmzQLI~EhY7G<|qT#xtZws!V98MTf#(0 zYaHMy!A&vyXpq4migMnh<~7Y$tU3BkvE96Mna!T)yW^)LHpoG1L_k7a$xf7+F3?A- zIGH!Xnb0(5ekq`W+pa%(AZJT~55LC(Gu(dQW>nav@Tkx2`G7Ijoif^ z`A2axd*M2S1ex0`2#HG&5{387v}fi$nBLG>R-J^kzZ4xwxV60Ae&Hj#?iJ#7DsX=p zt3$(CPmRbl4OsuJVHn*x_1>Oe-W{ZH!mq+X$b|?0MNy&@JfrI zSUCUCrGUK`PqQeQ9CZ1@CgrTWRqSX$v%e?ZYt`AeiXA_JW&nnKUFZuBiy@7TYNnqc zIUQM#j&Q$p^UlntXzR3f497f2Gqpbb1+)|ExI+Bx4Bb`{3KxXuVd%LL*y}Y5qtV1- zD=>q#&{9m_vVPb5Nuv$5gvV8x8ok^Kjukp|K+KWIyYvph3S|R$s1l$8Pn$kjOz%Zm zXtc7EPj|w$X~#mZTvlF;l~2G*7mK4dY&rXOe&~&^?iPRatVL8jDM;ZOAicU-=xSGTa$rA-t*2%6&Mi`@tg;Brh+5vb{+u_rd8M@fKd)KsHCmPcxdl zbdKqjxawPv@boksC;Uj6gq8X~%8pxJe|{h^>n7ydjo-87BdqmjK*?eXM>ha#*Esiw zwn4+yN-WV8TIwl1e~*ng#xg(J1i~S7v^0p}x~Mx76oZcXBh=y0kO#*#$vbHy^6~=j z!8T`Oj)%uGJ%kO<+rq|1>~4Ay2TyK5IfELr9yd^dLp)gFteCj58%zL)Mt_U^cV^tL zg{SI_u-4n65^Qk!T>KfqCE{;U^gu)#@j*Hg!xO4{%1F+P9$xX)$ z&^9vskkH7@>301Y7W@*9UcIzUcjj|I3 zE^+aW`~6?`IyoHOsTCizXcz~IED(v3R2;Q^otCWzTnEV7o)7r$@teaM=He9SV&y_{ z>VsBQMAboUqry$+KvmqPxuei%(_g2B3gr}5dA8AbpnBlgwOE+Af8gPZU73}e9)~n1 z!|tK6$fSE%MqZp9TrpWKNO?;UdnIZBH_~*^;j#^#Gn!{%2GNjme&zQ?zNz4C*#N@h zY@wxR3gk%4yAWIS)iQ?HclnLquk4+WA$d<=0g?t0dJ<#xJWTAPD-H`B5I3h~nJi9I z-QX*t`3B%QL#c^d_F5x4p}un0yD~Mi01vGHI?(yHmq6!$qvyRPdr&e!`Pvp9+`^R< zs7Xy`PUxd>-C~dw(El#^B(S&O2fezjnPD_5^>r95>?l?aj`U@zKj?n7J682`(=bW! z180DH@nqKeD`s)X0?UYJ1f8r6RlER;@(20m)jDq+6L%%BX6W3)^&cR5z0SjJBO$8+P^x2iqOj!>!T zt21{O6w69P^k_C5B@X9YEN1Cat{i)PGvQeS>>B)ef$pJ|rxWLRE~WmN1^$e}1fU(% z>p_Ut9S^Bnk>faGU}IJ*CR{j-gP|uMdJo@OULRo-+?KHTLxUL@S-xhnRj8S>Vh@)1 zwY$X{({Z=uV^05rP!Gw!F*X9vLlaP+3l9FEM=ve5@n^S{YVg`@Uwo6AaHNtG1*K6< zhpB58-|X3AaZ(gzALEDh!ZYOn7gb?8u|m)g3<}d$vF2;>C{C>^0K)#VsAO?T`IZ?; z?^+5D^Y_gVMj}c=&?fANYS2QgeHf@hYu8&1tWWqM%W`oueb$7{8;%-8&5H#15>Fe& zDIf}k=LSJ2xJ|*dV)kM>Ttk=Nx)tDoUudr}eywale*SiYp6xPcoCNOG5h#ttsI@u4~ru5t}~1~ASb1;yg_k#WRs}}EHNA`u@%$F z>gcb2aqqMvX8#miJl6i+Xce11CdaELLyo{Wg6pVTg!miI8xR3dI9TGN|Izexs^V#o zb+?L}Ew;_pyK5F^lSp=4kVr&|!nO&$d4RT(jI9+t&e{)5W&aU+ps6eT;JKk0N#&oQ z*-Di2jkJZ6;Y&!ID{vf@YQAn%G0rUhY#)=dAaj-$QwbjK4s@iReam@VZv_vGz$qLHujZ}T?+HLa*ef&bt|)PS zDRC`aQJ8^_JCnLyc~sTO+Qx;K&!aaA+$14ogStVeNWtv&z~WYzj%t3J>$8u-kys5U z6E2R*_t6iJy#fH5KmYu@Sg(?LgvivD)b9826QQl(j+2IQYSnulJ7z(3MsY$9vGeX- z1u(sJegWrZAYxI{Xf}c@1v(#{VLMZRFkFYBXN=v$i>Dle2kU{I4#J~1aEhjFJT>dv zC_dEy&+jY5@3TVKpJpEC1qdS{>23|LKH>D4+X5 zhtze?!95N(dz8bBH9DuFwi~IU@%J(ae`A~ttGvwBou9E(qdnntx<(NmIz!K7fXmlF z5xy=7L6JpA|efqfTk}`5!izy=RkkK0J;4fnD#< zH=fEo2@hryLR?a!g2&%boQzWLQ#})Sb}GO1rP~3}M!`9{jRzd{f!nj#c+3&4Cd9_x zgQGBCRi@o=iW5BdCUVnf__}q_-chqr%)nDWI>(yw0xs0_4OB(UE@eMP>jarZI0Q*r z4Aa5p-Bnj%+zGeH9CNLN6*W4Z_MFn6IZNmpOI4w6{Th5Ja`#;ic&--@BjULoc-9ks zsM)VrGfqW`v&XeuZ2O=;`=IGOyWZo09svk3fu4dF?`!)RF=5`lH zocaS^vxypQAofcd9Ne;EFE{kBv~}zmSpT+wFI`u+6(py}RR1&_gfHsRRuG3usM$=_ z<)>zu7{xN!ql9Oc2^$=zMi+fu*L`Z4|A4VcH*0azdfFd1;-}r2?z}jj5!GmRCcS34 z^Feqgsm{8mElYph2Y7;p#XYOs`*Ab=Oydnklq4ASW9Zrxc+RC|5vF>bwu4v1n%kX` znj6a%=T%RS9`@6)Unkj$wJVsG2XhpLeRkq(_nT*XD%G#@HCx3rn{KCkxP_mkMNGCx zt3fZlda%)KoCo+@*I&3Ni9ugz^1~Dk@zOE(bdT>mCK|}p-v`q=Vc;q8uB+>0VqU@* zE*iAbfWHd+g=+{u!z;n?MmYI;FT8HMW#}8sz6{CB)cEWC+!ONCOUU>5VRDn)8^Gkt z;d9Z;?KG`_&mn+07--5K`oL@Go6_*+GkWz`G6_NQmM?xm!C=b`+0Z9)N&q=NK>B() zdWTvz!Ve!Avgoz!yva72WZ$VF*{(c>@DN-41sha2D~<0A|!l>UP>lk&qi--6A|}ypWt@HFOLBR{(P;CF2b6e}W87#SOj{-sH!xMh@*l zlOIycB>#BsOBjS8|9(5MS>%_849V7$S&>5~HNZA*;FFJt@lxdb+4xQ1?SD;j-lW{i z=HO%msB|3G$W!?H=d#z?;Y+pB!4oVTbV1}89#>&@s~i?&Z?juiqN#O~Sp!4H&ghq+ zSv_;*@g|TTMCZ$pa~uj8vD{>chx;X?C*&qk$1&A_0nAbbn$P2O3&H&MrV> zJ4wHiLFo(&k!(C6^1JDJ6R#2DF}87JaYA^{P~_qBj+iz;P8J|0Yr&LG_(+}=L_-D{ z?$G&u^2b#)He(sA_yJ7=4;*rCkz~>VnwnukP>>N*IuxK}0YnG>&tY5zGM{wrM=uN! zA?6T4EV?3t5Z1*9S{0LXSr6364|9+k@~3Gzm7|;}Ph&ElnID#pCXqPK_b~afnQT@K z&aW`Dj@{1l^7V3>^82V4>(>jZQ4_GF9dK8D6w9-kU#> zJy_DoRD*&&Bs7m=WsWi~L%8d!B8Mn*x-^(K*L@dyTLqL>`C%`}`Q*^BC zWQ!?8vMK9nAw~?N@sK2c@cd!PRB&;w#HieQnP>2u15Awy(ay?b0ppLx?IOxHW3FLI z7wLggqu>Z>ga`l?pZ^B#McP7|@zmY|?uX28l=#h6%?WoC_1`;(^~vL%w-djO8sGyK zfdl?KtRY+G%LbZA=noB|RDt*HBsqd47~HWab6q9o_To3IlAHerzt}4Nk++`U`8QIr zpN_Uqn1xK#2sDs&i~$?c&Exm;okaYiugUZ@h0se(Ng>EawvFjmU_|qf@r@G7 zE}KT^$%oseF-vYf^gHh2ekG&$8G9UxJ8&^EP)7=GG@}%e(Dw$!yE!f%@|tZiiskZyXV4u;mddbHX&3%5tD*5=c?AizPvRAr{d7|G->`&#`hWFSa`Vgoa29bNa(~1$M&!zLn6O2L zJgvlUiTokWHxu+GF|d|~D=C8HV1#_A1No17r1?bsG;AM* zlS6fv8~}Uqi;{HY8us{mKV1P+XQ_i9QKS-e4hagJw1~y)Ka}#coYby9!^p?es=N5R zTw!sg7d*wzlgySHD$yemZQ))RGMtg%XwdReHUGXF;`|@Y(uAZnjYHt;oBXzMuz^E{ z-kBs&+#lpd%3$fbz&iLerT9`;@nIQFBfoLakeVj9H3iuSX>2@F$O%|zFZq=1 zhh-5eRaYn^uQ)_jQf25T83AFEwRhrRMgcc9Z3#;_+J4L>JZ!^mxSv7YknF*w>Uolxqv5#KVBfEK)IdtlhLKy zFX4QI1UyLm=M!<~{<_C?B7{{k>j%yfln&9rsUqALc{z;C>l*`@thX85Vu;@3KiA?zdu^EaMlM*{2@;mm!B@ht{(x`{AZ}RhtTlh#Tkvh5;F9t}9?qKgF zbvgdmIG`t^EYXPW?~tC9$1Cz5l79jhJWJup^CD5JOHwdOdO#SU{fQZyQpX`VsUi_& zh)d-YOFb6Nkgu;Kfe#e%r=;qlJtfL4$>`v{@3Q5>TLLP-Kgk7rV{p!aUwB<) z?7;Os=6T@K?LRjs^uC=%TTaAfqw^bHJv@dQj-Dy zlF*S;tvG8$ABi4z4`y4(v#2uBfv!V6!Sv|J@p zFN#}aHL@SGSuWG|Zk`GYpDzn;*`Ryy)`KX?+VDSJKoke~|EeUKF;~fV>7=0Z5Jn=+ z2%|pn{m2*&xdnKPI|o$t_w|ID6Aml6JetiR(gAS!_YFnjZ;~v;V@}eNlJ6Bbn>@xv z6|qohi3g$wt(wdhL)#ArkK=^&@6V8BNIOGYf%{yFHRt(+ZpSw%l0+`b6MKJrsf1TQ zc8#WG2Ba&*lQGbDl--Mvg$JGFuZDb2Ru@i)g!o2mHjPt{Y2p)m3HOuI4lVQ{Ey*wTUj&b)K7(^m zo+bXAle}+w0wP}Ge=_YmeG6k^=S#VbBrG2GKIv?k;|dFeAA? zNdahY5}?NqO&=er!uhJw1S$QK7^v+~`2jDd`(P$HVM7^4%1#eyR-g&Ac%XK`{qbI! xBwX=^C|7_KSpGDQx~vB)XUqPwR-p*HQIRC9Ub{*a{?;I7y<*++hgMF1{vZ21+ui^G diff --git a/lbrytv/dist/public/img/thumbnail-broken.png b/lbrytv/dist/public/img/thumbnail-broken.png deleted file mode 100644 index f41613f8e40f564e96c1fc2a45b161508f0a80c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6680 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 aRY?kut$qEAwvSKZL9B^SimQpqD)=`6pH_ST diff --git a/lbrytv/dist/public/img/unlocklbry.svg b/lbrytv/dist/public/img/unlocklbry.svg deleted file mode 100644 index 36489f02c..000000000 --- a/lbrytv/dist/public/img/unlocklbry.svg +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - image/svg+xml - - unlock - - - - - - - - unlock - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lbrytv/dist/public/ui.js b/lbrytv/dist/public/ui.js deleted file mode 100644 index 53c686842..000000000 --- a/lbrytv/dist/public/ui.js +++ /dev/null @@ -1,18472 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/public/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "../ui/index.jsx"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "../config.js": -/*!********************!*\ - !*** ../config.js ***! - \********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var config = {\n WEBPACK_WEB_PORT: 9090,\n WEBPACK_ELECTRON_PORT: 9091,\n WEB_SERVER_PORT: 1337,\n DOMAIN: 'lbry.tv',\n URL: 'https://lbry.tv',\n SITE_TITLE: 'lbry.tv',\n LBRY_TV_API: 'https://api.lbry.tv',\n LBRY_TV_STREAMING_API: 'https://lbryplayer.xyz',\n WELCOME_VERSION: 1.0\n};\nconfig.URL_LOCAL = \"http://localhost:\".concat(config.WEB_SERVER_PORT);\nconfig.URL_DEV = \"http://localhost:\".concat(config.WEBPACK_WEB_PORT);\nmodule.exports = config;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vY29uZmlnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy5qcz9iMDVjIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbmZpZyA9IHtcbiAgV0VCUEFDS19XRUJfUE9SVDogOTA5MCxcbiAgV0VCUEFDS19FTEVDVFJPTl9QT1JUOiA5MDkxLFxuICBXRUJfU0VSVkVSX1BPUlQ6IDEzMzcsXG4gIERPTUFJTjogJ2xicnkudHYnLFxuICBVUkw6ICdodHRwczovL2xicnkudHYnLFxuICBTSVRFX1RJVExFOiAnbGJyeS50dicsXG4gIExCUllfVFZfQVBJOiAnaHR0cHM6Ly9hcGkubGJyeS50dicsXG4gIExCUllfVFZfU1RSRUFNSU5HX0FQSTogJ2h0dHBzOi8vbGJyeXBsYXllci54eXonLFxuICBXRUxDT01FX1ZFUlNJT046IDEuMCxcbn07XG5cbmNvbmZpZy5VUkxfTE9DQUwgPSBgaHR0cDovL2xvY2FsaG9zdDoke2NvbmZpZy5XRUJfU0VSVkVSX1BPUlR9YDtcbmNvbmZpZy5VUkxfREVWID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtjb25maWcuV0VCUEFDS19XRUJfUE9SVH1gO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbmZpZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../config.js\n"); - -/***/ }), - -/***/ "../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js": -/*!***************************************************************************!*\ - !*** ../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzP2QzZGUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\n"); - -/***/ }), - -/***/ "../node_modules/@babel/runtime/helpers/esm/extends.js": -/*!*************************************************************!*\ - !*** ../node_modules/@babel/runtime/helpers/esm/extends.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _extends; });\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanM/MTVjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQWFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@babel/runtime/helpers/esm/extends.js\n"); - -/***/ }), - -/***/ "../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": -/*!*******************************************************************!*\ - !*** ../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! - \*******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _inheritsLoose; });\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanM/ZWNiZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n"); - -/***/ }), - -/***/ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js": -/*!**********************************************************************************!*\ - !*** ../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***! - \**********************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutPropertiesLoose; });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/Zjg4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\n"); - -/***/ }), - -/***/ "../node_modules/@babel/runtime/helpers/inheritsLoose.js": -/*!***************************************************************!*\ - !*** ../node_modules/@babel/runtime/helpers/inheritsLoose.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c0xvb3NlLmpzPzQwYTAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0c0xvb3NlOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@babel/runtime/helpers/inheritsLoose.js\n"); - -/***/ }), - -/***/ "../node_modules/@hot-loader/react-dom/cjs/react-dom-server.browser.development.js": -/*!*****************************************************************************************!*\ - !*** ../node_modules/@hot-loader/react-dom/cjs/react-dom-server.browser.development.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.12.0\n * react-dom-server.browser.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nif (undefined !== \"production\") {\n (function () {\n 'use strict';\n\n var _assign = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\");\n\n var React = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\n var checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"../node_modules/prop-types/checkPropTypes.js\"); // Do not require this module directly! Use normal `invariant` calls with\n // template literal strings. The messages will be replaced with error codes\n // during build.\n // TODO: this is special because it gets imported during build.\n\n\n var ReactVersion = '16.12.0';\n /**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\n /**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n var warningWithoutStack = function warningWithoutStack() {};\n\n {\n warningWithoutStack = function warningWithoutStack(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n\n if (condition) {\n return;\n }\n\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n }\n var warningWithoutStack$1 = warningWithoutStack; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n\n var hasSymbol = typeof Symbol === 'function' && Symbol[\"for\"];\n var REACT_PORTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.portal') : 0xeaca;\n var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol[\"for\"]('react.fragment') : 0xeacb;\n var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.strict_mode') : 0xeacc;\n var REACT_PROFILER_TYPE = hasSymbol ? Symbol[\"for\"]('react.profiler') : 0xead2;\n var REACT_PROVIDER_TYPE = hasSymbol ? Symbol[\"for\"]('react.provider') : 0xeacd;\n var REACT_CONTEXT_TYPE = hasSymbol ? Symbol[\"for\"]('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n // (unstable) APIs that have been removed. Can we remove the symbols?\n\n var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.concurrent_mode') : 0xeacf;\n var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol[\"for\"]('react.forward_ref') : 0xead0;\n var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense') : 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense_list') : 0xead8;\n var REACT_MEMO_TYPE = hasSymbol ? Symbol[\"for\"]('react.memo') : 0xead3;\n var REACT_LAZY_TYPE = hasSymbol ? Symbol[\"for\"]('react.lazy') : 0xead4;\n var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.fundamental') : 0xead5;\n var REACT_SCOPE_TYPE = hasSymbol ? Symbol[\"for\"]('react.scope') : 0xead7;\n var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n // Current owner and dispatcher used to share the same ref,\n // but PR #14548 split them out to better support the react-debug-tools package.\n\n if (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n }\n\n if (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n }\n /**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\n var warning = warningWithoutStack$1;\n {\n warning = function warning(condition, format) {\n if (condition) {\n return;\n }\n\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum(); // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(void 0, [false, format + '%s'].concat(args, [stack]));\n };\n }\n var warning$1 = warning;\n var Uninitialized = -1;\n var Pending = 0;\n var Resolved = 1;\n var Rejected = 2;\n\n function refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n }\n\n function initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject[\"default\"];\n {\n if (defaultExport === undefined) {\n warning$1(false, 'lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n }\n\n function getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n }\n\n function getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (_typeof(type) === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n }\n /**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\n var lowPriorityWarningWithoutStack = function lowPriorityWarningWithoutStack() {};\n\n {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarningWithoutStack = function lowPriorityWarningWithoutStack(condition, format) {\n if (format === undefined) {\n throw new Error('`lowPriorityWarningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(void 0, [format].concat(args));\n }\n };\n }\n var lowPriorityWarningWithoutStack$1 = lowPriorityWarningWithoutStack;\n var BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\n var describeComponentFrame = function describeComponentFrame(name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n }; // Helps identify side effects in render-phase lifecycle hooks and setState\n // reducers by double invoking them in Strict Mode.\n // To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n // replay the begin phase of a failed component inside invokeGuardedCallback.\n // Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\n\n var warnAboutDeprecatedLifecycles = true; // Gather advanced timing metrics for Profiler subtrees.\n // Trace which interactions trigger each commit.\n // SSR experiments\n\n var enableSuspenseServerRenderer = false; // Only used in www builds.\n // Only used in www builds.\n // Disable javascript: URL strings in href for XSS protection.\n\n var disableJavaScriptURLs = false; // React Fire: prevent the value and checked attributes from syncing\n // with their related DOM properties\n // These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n // Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\n // Experimental React Flare event system and event components support.\n\n var enableFlareAPI = false; // Experimental Host Component support.\n\n var enableFundamentalAPI = false; // Experimental Scope support.\n\n var enableScopeAPI = false; // New API for JSX transforms to target - https://github.com/reactjs/rfcs/pull/107\n // We will enforce mocking scheduler with scheduler/unstable_mock at some point. (v17?)\n // Till then, we warn about the missing mock, but still fallback to a legacy mode compatible version\n // For tests, we flush suspense fallbacks in an act scope;\n // *except* in some of our own tests, where we test incremental loading states.\n // Add a callback property to suspense to notify which promises are currently\n // in the update queue. This allows reporting and tracing of what is causing\n // the user to see a loading state.\n // Also allows hydration callbacks to fire when a dehydrated boundary gets\n // hydrated or deleted.\n // Part of the simplification of React.createElement so we can eventually move\n // from React.createElement to React.jsx\n // https://github.com/reactjs/rfcs/blob/createlement-rfc/text/0000-create-element-changes.md\n\n var disableLegacyContext = false; // Flag to turn event.target and event.currentTarget in ReactNative from a reactTag to a component instance\n\n var ReactDebugCurrentFrame$1;\n var didWarnAboutInvalidateContextType;\n {\n ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n didWarnAboutInvalidateContextType = new Set();\n }\n var emptyObject = {};\n {\n Object.freeze(emptyObject);\n }\n\n function maskContext(type, context) {\n var contextTypes = type.contextTypes;\n\n if (!contextTypes) {\n return emptyObject;\n }\n\n var maskedContext = {};\n\n for (var contextName in contextTypes) {\n maskedContext[contextName] = context[contextName];\n }\n\n return maskedContext;\n }\n\n function checkContextTypes(typeSpecs, values, location) {\n {\n checkPropTypes(typeSpecs, values, location, 'Component', ReactDebugCurrentFrame$1.getCurrentStack);\n }\n }\n\n function validateContextBounds(context, threadID) {\n // If we don't have enough slots in this context to store this threadID,\n // fill it in without leaving any holes to ensure that the VM optimizes\n // this as non-holey index properties.\n // (Note: If `react` package is < 16.6, _threadCount is undefined.)\n for (var i = context._threadCount | 0; i <= threadID; i++) {\n // We assume that this is the same as the defaultValue which might not be\n // true if we're rendering inside a secondary renderer but they are\n // secondary because these use cases are very rare.\n context[i] = context._currentValue2;\n context._threadCount = i + 1;\n }\n }\n\n function processContext(type, context, threadID, isClass) {\n if (isClass) {\n var contextType = type.contextType;\n {\n if ('contextType' in type) {\n var isValid = // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a \n\n if (!isValid && !didWarnAboutInvalidateContextType.has(type)) {\n didWarnAboutInvalidateContextType.add(type);\n var addendum = '';\n\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (_typeof(contextType) !== 'object') {\n addendum = ' However, it is set to a ' + _typeof(contextType) + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // \n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n\n warningWithoutStack$1(false, '%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(type) || 'Component', addendum);\n }\n }\n }\n\n if (_typeof(contextType) === 'object' && contextType !== null) {\n validateContextBounds(contextType, threadID);\n return contextType[threadID];\n }\n\n if (disableLegacyContext) {\n {\n if (type.contextTypes) {\n warningWithoutStack$1(false, '%s uses the legacy contextTypes API which is no longer supported. ' + 'Use React.createContext() with static contextType instead.', getComponentName(type) || 'Unknown');\n }\n }\n return emptyObject;\n } else {\n var maskedContext = maskContext(type, context);\n {\n if (type.contextTypes) {\n checkContextTypes(type.contextTypes, maskedContext, 'context');\n }\n }\n return maskedContext;\n }\n } else {\n if (disableLegacyContext) {\n {\n if (type.contextTypes) {\n warningWithoutStack$1(false, '%s uses the legacy contextTypes API which is no longer supported. ' + 'Use React.createContext() with React.useContext() instead.', getComponentName(type) || 'Unknown');\n }\n }\n return undefined;\n } else {\n var _maskedContext = maskContext(type, context);\n\n {\n if (type.contextTypes) {\n checkContextTypes(type.contextTypes, _maskedContext, 'context');\n }\n }\n return _maskedContext;\n }\n }\n } // Allocates a new index for each request. Tries to stay as compact as possible so that these\n // indices can be used to reference a tightly packed array. As opposed to being used in a Map.\n // The first allocated index is 1.\n\n\n var nextAvailableThreadIDs = new Uint16Array(16);\n\n for (var i = 0; i < 15; i++) {\n nextAvailableThreadIDs[i] = i + 1;\n }\n\n nextAvailableThreadIDs[15] = 0;\n\n function growThreadCountAndReturnNextAvailable() {\n var oldArray = nextAvailableThreadIDs;\n var oldSize = oldArray.length;\n var newSize = oldSize * 2;\n\n if (!(newSize <= 0x10000)) {\n {\n throw Error(\"Maximum number of concurrent React renderers exceeded. This can happen if you are not properly destroying the Readable provided by React. Ensure that you call .destroy() on it if you no longer want to read from it, and did not read to the end. If you use .pipe() this should be automatic.\");\n }\n }\n\n var newArray = new Uint16Array(newSize);\n newArray.set(oldArray);\n nextAvailableThreadIDs = newArray;\n nextAvailableThreadIDs[0] = oldSize + 1;\n\n for (var _i = oldSize; _i < newSize - 1; _i++) {\n nextAvailableThreadIDs[_i] = _i + 1;\n }\n\n nextAvailableThreadIDs[newSize - 1] = 0;\n return oldSize;\n }\n\n function allocThreadID() {\n var nextID = nextAvailableThreadIDs[0];\n\n if (nextID === 0) {\n return growThreadCountAndReturnNextAvailable();\n }\n\n nextAvailableThreadIDs[0] = nextAvailableThreadIDs[nextID];\n return nextID;\n }\n\n function freeThreadID(id) {\n nextAvailableThreadIDs[id] = nextAvailableThreadIDs[0];\n nextAvailableThreadIDs[0] = id;\n } // A reserved attribute.\n // It is handled by React separately and shouldn't be written to the DOM.\n\n\n var RESERVED = 0; // A simple string attribute.\n // Attributes that aren't in the whitelist are presumed to have this type.\n\n var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n // \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n // When true, it should be set to a \"true\" string.\n // When false, it should be set to a \"false\" string.\n\n var BOOLEANISH_STRING = 2; // A real boolean attribute.\n // When true, it should be present (set either to an empty string or its name).\n // When false, it should be omitted.\n\n var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n // When true, it should be present (set either to an empty string or its name).\n // When false, it should be omitted.\n // For any other value, should be present with that value.\n\n var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n // When falsy, it should be removed.\n\n var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n // When falsy, it should be removed.\n\n var POSITIVE_NUMERIC = 6;\n /* eslint-disable max-len */\n\n var ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n /* eslint-enable max-len */\n\n var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var ROOT_ATTRIBUTE_NAME = 'data-reactroot';\n var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\n var hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n var illegalAttributeNameCache = {};\n var validatedAttributeNameCache = {};\n\n function isAttributeNameSafe(attributeName) {\n if (hasOwnProperty$1.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty$1.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n {\n warning$1(false, 'Invalid attribute name: `%s`', attributeName);\n }\n return false;\n }\n\n function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n }\n\n function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (_typeof(value)) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n }\n\n function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n }\n\n function getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n }\n\n function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n } // When adding attributes to this list, be sure to also add them to\n // the `possibleStandardNames` module to ensure casing and incorrect\n // name warnings.\n\n\n var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\n ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n // elements (not just inputs). Now that ReactDOMInput assigns to the\n // defaultValue property -- do we need this?\n 'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n }); // A few React string attributes have a different name.\n // This is a mapping from React prop names to the attribute names.\n\n [['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n }); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n // In React, we let users pass `true` and `false` even though technically\n // these aren't boolean attributes (they are coerced to strings).\n\n ['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n }); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n // In React, we let users pass `true` and `false` even though technically\n // these aren't boolean attributes (they are coerced to strings).\n // Since these are SVG attributes, their attribute names are case-sensitive.\n\n ['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n }); // These are HTML boolean attributes.\n\n ['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n // on the client side because the browsers are inconsistent. Instead we call focus().\n 'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n 'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n }); // These are the few React props that we set as DOM properties\n // rather than attributes. These are all booleans.\n\n ['checked', // Note: `option.selected` is not updated if `select.multiple` is\n // disabled with `removeAttribute`. We have special logic for handling this.\n 'multiple', 'muted', 'selected'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n }); // These are HTML attributes that are \"overloaded booleans\": they behave like\n // booleans, but can also accept a string value.\n\n ['capture', 'download'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n }); // These are HTML attributes that must be positive numbers.\n\n ['cols', 'rows', 'size', 'span'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n }); // These are HTML attributes that must be numbers.\n\n ['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n });\n var CAMELIZE = /[\\-\\:]([a-z])/g;\n\n var capitalize = function capitalize(token) {\n return token[1].toUpperCase();\n }; // This is a list of all SVG attributes that need special casing, namespacing,\n // or boolean value assignment. Regular attributes that just accept strings\n // and have the same names are omitted, just like in the HTML whitelist.\n // Some of these attributes can be hard to find. This list was created by\n // scrapping the MDN documentation.\n\n\n ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n }); // String SVG attributes with the xlink namespace.\n\n ['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n }); // String SVG attributes with the xml namespace.\n\n ['xml:base', 'xml:lang', 'xml:space'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n }); // These attribute exists both in HTML and SVG.\n // The attribute name is case-sensitive in SVG so we can't just use\n // the React name like we do for attributes that exist only in HTML.\n\n ['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n }); // These attributes accept URLs. These must not allow javascript: URLS.\n // These will also need to accept Trusted Types object in the future.\n\n var xlinkHref = 'xlinkHref';\n properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n 'xlink:href', 'http://www.w3.org/1999/xlink', true);\n ['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n });\n var ReactDebugCurrentFrame$2 = null;\n {\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n } // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n // and any newline or tab are filtered out as if they're not part of the URL.\n // https://url.spec.whatwg.org/#url-parsing\n // Tab or newline are defined as \\r\\n\\t:\n // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n // A C0 control is a code point in the range \\u0000 NULL to \\u001F\n // INFORMATION SEPARATOR ONE, inclusive:\n // https://infra.spec.whatwg.org/#c0-control-or-space\n\n /* eslint-disable max-len */\n\n var isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\n var didWarn = false;\n\n function sanitizeURL(url) {\n if (disableJavaScriptURLs) {\n if (!!isJavaScriptProtocol.test(url)) {\n {\n throw Error(\"React has blocked a javascript: URL as a security precaution.\" + ReactDebugCurrentFrame$2.getStackAddendum());\n }\n }\n } else if ( true && !didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n warning$1(false, 'A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n } // code copied and modified from escape-html\n\n /**\n * Module variables.\n * @private\n */\n\n\n var matchHtmlRegExp = /[\"'&<>]/;\n /**\n * Escapes special characters and HTML entities in a given html string.\n *\n * @param {string} string HTML string to escape for later insertion\n * @return {string}\n * @public\n */\n\n function escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n // \"\n escape = '"';\n break;\n\n case 38:\n // &\n escape = '&';\n break;\n\n case 39:\n // '\n escape = '''; // modified from escape-html; used to be '''\n\n break;\n\n case 60:\n // <\n escape = '<';\n break;\n\n case 62:\n // >\n escape = '>';\n break;\n\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n } // end code copied and modified from escape-html\n\n /**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\n\n\n function escapeTextForBrowser(text) {\n if (typeof text === 'boolean' || typeof text === 'number') {\n // this shortcircuit helps perf for types that we know will never have\n // special characters, especially given that this function is used often\n // for numeric dom ids.\n return '' + text;\n }\n\n return escapeHtml(text);\n }\n /**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\n\n\n function quoteAttributeValueForBrowser(value) {\n return '\"' + escapeTextForBrowser(value) + '\"';\n }\n /**\n * Operations for dealing with DOM properties.\n */\n\n /**\n * Creates markup for the ID property.\n *\n * @param {string} id Unescaped ID.\n * @return {string} Markup string.\n */\n\n\n function createMarkupForRoot() {\n return ROOT_ATTRIBUTE_NAME + '=\"\"';\n }\n /**\n * Creates markup for a property.\n *\n * @param {string} name\n * @param {*} value\n * @return {?string} Markup string, or null if the property was invalid.\n */\n\n\n function createMarkupForProperty(name, value) {\n var propertyInfo = getPropertyInfo(name);\n\n if (name !== 'style' && shouldIgnoreAttribute(name, propertyInfo, false)) {\n return '';\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, false)) {\n return '';\n }\n\n if (propertyInfo !== null) {\n var attributeName = propertyInfo.attributeName;\n var type = propertyInfo.type;\n\n if (type === BOOLEAN || type === OVERLOADED_BOOLEAN && value === true) {\n return attributeName + '=\"\"';\n } else {\n if (propertyInfo.sanitizeURL) {\n value = '' + value;\n sanitizeURL(value);\n }\n\n return attributeName + '=' + quoteAttributeValueForBrowser(value);\n }\n } else if (isAttributeNameSafe(name)) {\n return name + '=' + quoteAttributeValueForBrowser(value);\n }\n\n return '';\n }\n /**\n * Creates markup for a custom property.\n *\n * @param {string} name\n * @param {*} value\n * @return {string} Markup string, or empty string if the property was invalid.\n */\n\n\n function createMarkupForCustomAttribute(name, value) {\n if (!isAttributeNameSafe(name) || value == null) {\n return '';\n }\n\n return name + '=' + quoteAttributeValueForBrowser(value);\n }\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n\n\n function is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n }\n\n var is$1 = typeof Object.is === 'function' ? Object.is : is;\n var currentlyRenderingComponent = null;\n var firstWorkInProgressHook = null;\n var workInProgressHook = null; // Whether the work-in-progress hook is a re-rendered hook\n\n var isReRender = false; // Whether an update was scheduled during the currently executing render pass.\n\n var didScheduleRenderPhaseUpdate = false; // Lazily created map of render-phase updates\n\n var renderPhaseUpdates = null; // Counter to prevent infinite loops.\n\n var numberOfReRenders = 0;\n var RE_RENDER_LIMIT = 25;\n var isInHookUserCodeInDev = false; // In DEV, this is the name of the currently executing primitive hook\n\n var currentHookNameInDev;\n\n function resolveCurrentlyRenderingComponent() {\n if (!(currentlyRenderingComponent !== null)) {\n {\n throw Error(\"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\");\n }\n }\n\n {\n !!isInHookUserCodeInDev ? warning$1(false, 'Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks') : void 0;\n }\n return currentlyRenderingComponent;\n }\n\n function areHookInputsEqual(nextDeps, prevDeps) {\n if (prevDeps === null) {\n {\n warning$1(false, '%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n warning$1(false, 'The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + nextDeps.join(', ') + \"]\", \"[\" + prevDeps.join(', ') + \"]\");\n }\n }\n\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n if (is$1(nextDeps[i], prevDeps[i])) {\n continue;\n }\n\n return false;\n }\n\n return true;\n }\n\n function createHook() {\n if (numberOfReRenders > 0) {\n {\n {\n throw Error(\"Rendered more hooks than during the previous render\");\n }\n }\n }\n\n return {\n memoizedState: null,\n queue: null,\n next: null\n };\n }\n\n function createWorkInProgressHook() {\n if (workInProgressHook === null) {\n // This is the first hook in the list\n if (firstWorkInProgressHook === null) {\n isReRender = false;\n firstWorkInProgressHook = workInProgressHook = createHook();\n } else {\n // There's already a work-in-progress. Reuse it.\n isReRender = true;\n workInProgressHook = firstWorkInProgressHook;\n }\n } else {\n if (workInProgressHook.next === null) {\n isReRender = false; // Append to the end of the list\n\n workInProgressHook = workInProgressHook.next = createHook();\n } else {\n // There's already a work-in-progress. Reuse it.\n isReRender = true;\n workInProgressHook = workInProgressHook.next;\n }\n }\n\n return workInProgressHook;\n }\n\n function prepareToUseHooks(componentIdentity) {\n currentlyRenderingComponent = componentIdentity;\n {\n isInHookUserCodeInDev = false;\n } // The following should have already been reset\n // didScheduleRenderPhaseUpdate = false;\n // firstWorkInProgressHook = null;\n // numberOfReRenders = 0;\n // renderPhaseUpdates = null;\n // workInProgressHook = null;\n }\n\n function finishHooks(Component, props, children, refOrContext) {\n // This must be called after every function component to prevent hooks from\n // being used in classes.\n while (didScheduleRenderPhaseUpdate) {\n // Updates were scheduled during the render phase. They are stored in\n // the `renderPhaseUpdates` map. Call the component again, reusing the\n // work-in-progress hooks and applying the additional updates on top. Keep\n // restarting until no more updates are scheduled.\n didScheduleRenderPhaseUpdate = false;\n numberOfReRenders += 1; // Start over from the beginning of the list\n\n workInProgressHook = null;\n children = Component(props, refOrContext);\n }\n\n currentlyRenderingComponent = null;\n firstWorkInProgressHook = null;\n numberOfReRenders = 0;\n renderPhaseUpdates = null;\n workInProgressHook = null;\n {\n isInHookUserCodeInDev = false;\n } // These were reset above\n // currentlyRenderingComponent = null;\n // didScheduleRenderPhaseUpdate = false;\n // firstWorkInProgressHook = null;\n // numberOfReRenders = 0;\n // renderPhaseUpdates = null;\n // workInProgressHook = null;\n\n return children;\n }\n\n function readContext(context, observedBits) {\n var threadID = currentThreadID;\n validateContextBounds(context, threadID);\n {\n !!isInHookUserCodeInDev ? warning$1(false, 'Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().') : void 0;\n }\n return context[threadID];\n }\n\n function useContext(context, observedBits) {\n {\n currentHookNameInDev = 'useContext';\n }\n resolveCurrentlyRenderingComponent();\n var threadID = currentThreadID;\n validateContextBounds(context, threadID);\n return context[threadID];\n }\n\n function basicStateReducer(state, action) {\n return typeof action === 'function' ? action(state) : action;\n }\n\n function useState(initialState) {\n {\n currentHookNameInDev = 'useState';\n }\n return useReducer(basicStateReducer, // useReducer has a special case to support lazy useState initializers\n initialState);\n }\n\n function useReducer(reducer, initialArg, init) {\n {\n if (reducer !== basicStateReducer) {\n currentHookNameInDev = 'useReducer';\n }\n }\n currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n workInProgressHook = createWorkInProgressHook();\n\n if (isReRender) {\n // This is a re-render. Apply the new render phase updates to the previous\n // current hook.\n var queue = workInProgressHook.queue;\n var dispatch = queue.dispatch;\n\n if (renderPhaseUpdates !== null) {\n // Render phase updates are stored in a map of queue -> linked list\n var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n if (firstRenderPhaseUpdate !== undefined) {\n renderPhaseUpdates[\"delete\"](queue);\n var newState = workInProgressHook.memoizedState;\n var update = firstRenderPhaseUpdate;\n\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var action = update.action;\n {\n isInHookUserCodeInDev = true;\n }\n newState = reducer(newState, action);\n {\n isInHookUserCodeInDev = false;\n }\n update = update.next;\n } while (update !== null);\n\n workInProgressHook.memoizedState = newState;\n return [newState, dispatch];\n }\n }\n\n return [workInProgressHook.memoizedState, dispatch];\n } else {\n {\n isInHookUserCodeInDev = true;\n }\n var initialState;\n\n if (reducer === basicStateReducer) {\n // Special case for `useState`.\n initialState = typeof initialArg === 'function' ? initialArg() : initialArg;\n } else {\n initialState = init !== undefined ? init(initialArg) : initialArg;\n }\n\n {\n isInHookUserCodeInDev = false;\n }\n workInProgressHook.memoizedState = initialState;\n\n var _queue = workInProgressHook.queue = {\n last: null,\n dispatch: null\n };\n\n var _dispatch = _queue.dispatch = dispatchAction.bind(null, currentlyRenderingComponent, _queue);\n\n return [workInProgressHook.memoizedState, _dispatch];\n }\n }\n\n function useMemo(nextCreate, deps) {\n currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n workInProgressHook = createWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n\n if (workInProgressHook !== null) {\n var prevState = workInProgressHook.memoizedState;\n\n if (prevState !== null) {\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n }\n\n {\n isInHookUserCodeInDev = true;\n }\n var nextValue = nextCreate();\n {\n isInHookUserCodeInDev = false;\n }\n workInProgressHook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n }\n\n function useRef(initialValue) {\n currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n workInProgressHook = createWorkInProgressHook();\n var previousRef = workInProgressHook.memoizedState;\n\n if (previousRef === null) {\n var ref = {\n current: initialValue\n };\n {\n Object.seal(ref);\n }\n workInProgressHook.memoizedState = ref;\n return ref;\n } else {\n return previousRef;\n }\n }\n\n function useLayoutEffect(create, inputs) {\n {\n currentHookNameInDev = 'useLayoutEffect';\n }\n warning$1(false, 'useLayoutEffect does nothing on the server, because its effect cannot ' + \"be encoded into the server renderer's output format. This will lead \" + 'to a mismatch between the initial, non-hydrated UI and the intended ' + 'UI. To avoid this, useLayoutEffect should only be used in ' + 'components that render exclusively on the client. ' + 'See https://fb.me/react-uselayouteffect-ssr for common fixes.');\n }\n\n function dispatchAction(componentIdentity, queue, action) {\n if (!(numberOfReRenders < RE_RENDER_LIMIT)) {\n {\n throw Error(\"Too many re-renders. React limits the number of renders to prevent an infinite loop.\");\n }\n }\n\n if (componentIdentity === currentlyRenderingComponent) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdate = true;\n var update = {\n action: action,\n next: null\n };\n\n if (renderPhaseUpdates === null) {\n renderPhaseUpdates = new Map();\n }\n\n var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n if (firstRenderPhaseUpdate === undefined) {\n renderPhaseUpdates.set(queue, update);\n } else {\n // Append the update to the end of the list.\n var lastRenderPhaseUpdate = firstRenderPhaseUpdate;\n\n while (lastRenderPhaseUpdate.next !== null) {\n lastRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n }\n\n lastRenderPhaseUpdate.next = update;\n }\n } else {// This means an update has happened after the function component has\n // returned. On the server this is a no-op. In React Fiber, the update\n // would be scheduled for a future render.\n }\n }\n\n function useCallback(callback, deps) {\n // Callbacks are passed as they are in the server environment.\n return callback;\n }\n\n function useResponder(responder, props) {\n return {\n props: props,\n responder: responder\n };\n }\n\n function useDeferredValue(value, config) {\n resolveCurrentlyRenderingComponent();\n return value;\n }\n\n function useTransition(config) {\n resolveCurrentlyRenderingComponent();\n\n var startTransition = function startTransition(callback) {\n callback();\n };\n\n return [startTransition, false];\n }\n\n function noop() {}\n\n var currentThreadID = 0;\n\n function setCurrentThreadID(threadID) {\n currentThreadID = threadID;\n }\n\n var Dispatcher = {\n readContext: readContext,\n useContext: useContext,\n useMemo: useMemo,\n useReducer: useReducer,\n useRef: useRef,\n useState: useState,\n useLayoutEffect: useLayoutEffect,\n useCallback: useCallback,\n // useImperativeHandle is not run in the server environment\n useImperativeHandle: noop,\n // Effects are not run in the server environment.\n useEffect: noop,\n // Debugging effect\n useDebugValue: noop,\n useResponder: useResponder,\n useDeferredValue: useDeferredValue,\n useTransition: useTransition\n };\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var Namespaces = {\n html: HTML_NAMESPACE,\n mathml: MATH_NAMESPACE,\n svg: SVG_NAMESPACE\n }; // Assumes there is no parent namespace.\n\n function getIntrinsicNamespace(type) {\n switch (type) {\n case 'svg':\n return SVG_NAMESPACE;\n\n case 'math':\n return MATH_NAMESPACE;\n\n default:\n return HTML_NAMESPACE;\n }\n }\n\n function getChildNamespace(parentNamespace, type) {\n if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n // No (or default) parent namespace: potential entry point.\n return getIntrinsicNamespace(type);\n }\n\n if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n // We're leaving SVG.\n return HTML_NAMESPACE;\n } // By default, pass namespace below.\n\n\n return parentNamespace;\n }\n\n var ReactDebugCurrentFrame$3 = null;\n var ReactControlledValuePropTypes = {\n checkPropTypes: null\n };\n {\n ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function value(props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableFlareAPI && props.listeners) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function checked(props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableFlareAPI && props.listeners) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$3.getStackAddendum);\n };\n } // For HTML, certain tags should omit their close tag. We keep a whitelist for\n // those special-case tags.\n\n var omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n }; // `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\n var voidElementTags = _assign({\n menuitem: true\n }, omittedCloseTags); // or add stack by default to invariants where possible.\n\n\n var HTML = '__html';\n var ReactDebugCurrentFrame$4 = null;\n {\n ReactDebugCurrentFrame$4 = ReactSharedInternals.ReactDebugCurrentFrame;\n }\n\n function assertValidProps(tag, props) {\n if (!props) {\n return;\n } // Note the use of `==` which checks for null or undefined.\n\n\n if (voidElementTags[tag]) {\n if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {\n {\n throw Error(tag + \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\" + ReactDebugCurrentFrame$4.getStackAddendum());\n }\n }\n }\n\n if (props.dangerouslySetInnerHTML != null) {\n if (!(props.children == null)) {\n {\n throw Error(\"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\");\n }\n }\n\n if (!(_typeof(props.dangerouslySetInnerHTML) === 'object' && HTML in props.dangerouslySetInnerHTML)) {\n {\n throw Error(\"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.\");\n }\n }\n }\n\n {\n !(props.suppressContentEditableWarning || !props.contentEditable || props.children == null) ? warning$1(false, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\n }\n\n if (!(props.style == null || _typeof(props.style) === 'object')) {\n {\n throw Error(\"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\" + ReactDebugCurrentFrame$4.getStackAddendum());\n }\n }\n }\n /**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\n\n var isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridArea: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n };\n /**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\n function prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n }\n /**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\n var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n // infinite loop, because it iterates over the newly added props too.\n\n Object.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n });\n /**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\n function dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n if (isEmpty) {\n return '';\n }\n\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n }\n\n var uppercasePattern = /([A-Z])/g;\n var msPattern = /^ms-/;\n /**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\n function hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n }\n\n function isCustomComponent(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return typeof props.is === 'string';\n }\n\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this whitelist too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n\n default:\n return true;\n }\n }\n\n var warnValidStyle = function warnValidStyle() {};\n\n {\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n var msPattern$1 = /^-ms-/;\n var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n var warnedForInfinityValue = false;\n\n var camelize = function camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n };\n\n var warnHyphenatedStyleName = function warnHyphenatedStyleName(name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n warning$1(false, 'Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern$1, 'ms-')));\n };\n\n var warnBadVendoredStyleName = function warnBadVendoredStyleName(name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n warning$1(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n };\n\n var warnStyleValueWithSemicolon = function warnStyleValueWithSemicolon(name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n warning$1(false, \"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n };\n\n var warnStyleValueIsNaN = function warnStyleValueIsNaN(name, value) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n warning$1(false, '`NaN` is an invalid value for the `%s` css style property.', name);\n };\n\n var warnStyleValueIsInfinity = function warnStyleValueIsInfinity(name, value) {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n warning$1(false, '`Infinity` is an invalid value for the `%s` css style property.', name);\n };\n\n warnValidStyle = function warnValidStyle(name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name, value);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name, value);\n }\n }\n };\n }\n var warnValidStyle$1 = warnValidStyle;\n var ariaProperties = {\n 'aria-current': 0,\n // state\n 'aria-details': 0,\n 'aria-disabled': 0,\n // state\n 'aria-hidden': 0,\n // state\n 'aria-invalid': 0,\n // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n };\n var warnedProperties = {};\n var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\n function validateProperty(tagName, name) {\n if (hasOwnProperty$2.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n if (rARIACamel.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (correctName == null) {\n warning$1(false, 'Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n warnedProperties[name] = true;\n return true;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== correctName) {\n warning$1(false, 'Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n warnedProperties[name] = true;\n return true;\n }\n }\n\n if (rARIA.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (standardName == null) {\n warnedProperties[name] = true;\n return false;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== standardName) {\n warning$1(false, 'Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n warnedProperties[name] = true;\n return true;\n }\n }\n\n return true;\n }\n\n function warnInvalidARIAProps(type, props) {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key);\n\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n warning$1(false, 'Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n warning$1(false, 'Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n }\n }\n\n function validateProperties(type, props) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnInvalidARIAProps(type, props);\n }\n\n var didWarnValueNull = false;\n\n function validateProperties$1(type, props) {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n\n if (type === 'select' && props.multiple) {\n warning$1(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n warning$1(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n }\n /**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\n\n /**\n * Ordered list of injected plugins.\n */\n\n /**\n * Mapping from event name to dispatch config\n */\n\n /**\n * Mapping from registration name to plugin module\n */\n\n\n var registrationNameModules = {};\n /**\n * Mapping from registration name to event name\n */\n\n /**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\n var possibleRegistrationNames = {}; // Trust the developer to only use possibleRegistrationNames in true\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n // When adding attributes to the HTML or SVG whitelist, be sure to\n // also add them to this module to ensure casing and incorrect name\n // warnings.\n\n var possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n \"class\": 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n \"default\": 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n disablepictureinpicture: 'disablePictureInPicture',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n \"for\": 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n \"in\": 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n \"typeof\": 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n };\n\n var validateProperty$1 = function validateProperty$1() {};\n\n {\n var warnedProperties$1 = {};\n var _hasOwnProperty = Object.prototype.hasOwnProperty;\n var EVENT_NAME_REGEX = /^on./;\n var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n validateProperty$1 = function validateProperty$1(tagName, name, value, canUseEventSystem) {\n if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n warning$1(false, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n warnedProperties$1[name] = true;\n return true;\n } // We can't rely on the event system being injected on the server.\n\n\n if (canUseEventSystem) {\n if (registrationNameModules.hasOwnProperty(name)) {\n return true;\n }\n\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n if (registrationName != null) {\n warning$1(false, 'Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (EVENT_NAME_REGEX.test(name)) {\n warning$1(false, 'Unknown event handler property `%s`. It will be ignored.', name);\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n warning$1(false, 'Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Let the ARIA attribute hook validate ARIA attributes\n\n\n if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n warning$1(false, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n warning$1(false, 'The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n warning$1(false, 'Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', _typeof(value));\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n warning$1(false, 'Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n warnedProperties$1[name] = true;\n return true;\n }\n\n var propertyInfo = getPropertyInfo(name);\n var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n\n if (standardName !== name) {\n warning$1(false, 'Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (!isReserved && name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n warning$1(false, 'React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n if (value) {\n warning$1(false, 'Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n warning$1(false, 'Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Now that we've validated casing, do not validate\n // data types for reserved props\n\n\n if (isReserved) {\n return true;\n } // Warn when a known attribute is a bad type\n\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n warnedProperties$1[name] = true;\n return false;\n } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n warning$1(false, 'Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n warnedProperties$1[name] = true;\n return true;\n }\n\n return true;\n };\n }\n\n var warnUnknownProperties = function warnUnknownProperties(type, props, canUseEventSystem) {\n var unknownProps = [];\n\n for (var key in props) {\n var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (unknownProps.length === 1) {\n warning$1(false, 'Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n warning$1(false, 'Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n }\n };\n\n function validateProperties$2(type, props, canUseEventSystem) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnUnknownProperties(type, props, canUseEventSystem);\n }\n\n var toArray = React.Children.toArray; // This is only used in DEV.\n // Each entry is `this.stack` from a currently executing renderer instance.\n // (There may be more than one because ReactDOMServer is reentrant).\n // Each stack is an array of frames which may contain nested stacks of elements.\n\n var currentDebugStacks = [];\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n var ReactDebugCurrentFrame;\n var prevGetCurrentStackImpl = null;\n\n var getCurrentServerStackImpl = function getCurrentServerStackImpl() {\n return '';\n };\n\n var describeStackFrame = function describeStackFrame(element) {\n return '';\n };\n\n var validatePropertiesInDevelopment = function validatePropertiesInDevelopment(type, props) {};\n\n var pushCurrentDebugStack = function pushCurrentDebugStack(stack) {};\n\n var pushElementToDebugStack = function pushElementToDebugStack(element) {};\n\n var popCurrentDebugStack = function popCurrentDebugStack() {};\n\n var hasWarnedAboutUsingContextAsConsumer = false;\n {\n ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\n validatePropertiesInDevelopment = function validatePropertiesInDevelopment(type, props) {\n validateProperties(type, props);\n validateProperties$1(type, props);\n validateProperties$2(type, props,\n /* canUseEventSystem */\n false);\n };\n\n describeStackFrame = function describeStackFrame(element) {\n var source = element._source;\n var type = element.type;\n var name = getComponentName(type);\n var ownerName = null;\n return describeComponentFrame(name, source, ownerName);\n };\n\n pushCurrentDebugStack = function pushCurrentDebugStack(stack) {\n currentDebugStacks.push(stack);\n\n if (currentDebugStacks.length === 1) {\n // We are entering a server renderer.\n // Remember the previous (e.g. client) global stack implementation.\n prevGetCurrentStackImpl = ReactDebugCurrentFrame.getCurrentStack;\n ReactDebugCurrentFrame.getCurrentStack = getCurrentServerStackImpl;\n }\n };\n\n pushElementToDebugStack = function pushElementToDebugStack(element) {\n // For the innermost executing ReactDOMServer call,\n var stack = currentDebugStacks[currentDebugStacks.length - 1]; // Take the innermost executing frame (e.g. ),\n\n var frame = stack[stack.length - 1]; // and record that it has one more element associated with it.\n\n frame.debugElementStack.push(element); // We only need this because we tail-optimize single-element\n // children and directly handle them in an inner loop instead of\n // creating separate frames for them.\n };\n\n popCurrentDebugStack = function popCurrentDebugStack() {\n currentDebugStacks.pop();\n\n if (currentDebugStacks.length === 0) {\n // We are exiting the server renderer.\n // Restore the previous (e.g. client) global stack implementation.\n ReactDebugCurrentFrame.getCurrentStack = prevGetCurrentStackImpl;\n prevGetCurrentStackImpl = null;\n }\n };\n\n getCurrentServerStackImpl = function getCurrentServerStackImpl() {\n if (currentDebugStacks.length === 0) {\n // Nothing is currently rendering.\n return '';\n } // ReactDOMServer is reentrant so there may be multiple calls at the same time.\n // Take the frames from the innermost call which is the last in the array.\n\n\n var frames = currentDebugStacks[currentDebugStacks.length - 1];\n var stack = ''; // Go through every frame in the stack from the innermost one.\n\n for (var i = frames.length - 1; i >= 0; i--) {\n var frame = frames[i]; // Every frame might have more than one debug element stack entry associated with it.\n // This is because single-child nesting doesn't create materialized frames.\n // Instead it would push them through `pushElementToDebugStack()`.\n\n var debugElementStack = frame.debugElementStack;\n\n for (var ii = debugElementStack.length - 1; ii >= 0; ii--) {\n stack += describeStackFrame(debugElementStack[ii]);\n }\n }\n\n return stack;\n };\n }\n var didWarnDefaultInputValue = false;\n var didWarnDefaultChecked = false;\n var didWarnDefaultSelectValue = false;\n var didWarnDefaultTextareaValue = false;\n var didWarnInvalidOptionChildren = false;\n var didWarnAboutNoopUpdateForComponent = {};\n var didWarnAboutBadClass = {};\n var didWarnAboutModulePatternComponent = {};\n var didWarnAboutDeprecatedWillMount = {};\n var didWarnAboutUndefinedDerivedState = {};\n var didWarnAboutUninitializedState = {};\n var valuePropNames = ['value', 'defaultValue'];\n var newlineEatingTags = {\n listing: true,\n pre: true,\n textarea: true\n }; // We accept any tag to be rendered but since this gets injected into arbitrary\n // HTML, we want to make sure that it's a safe tag.\n // http://www.w3.org/TR/REC-xml/#NT-Name\n\n var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\n\n var validatedTagCache = {};\n\n function validateDangerousTag(tag) {\n if (!validatedTagCache.hasOwnProperty(tag)) {\n if (!VALID_TAG_REGEX.test(tag)) {\n {\n throw Error(\"Invalid tag: \" + tag);\n }\n }\n\n validatedTagCache[tag] = true;\n }\n }\n\n var styleNameCache = {};\n\n var processStyleName = function processStyleName(styleName) {\n if (styleNameCache.hasOwnProperty(styleName)) {\n return styleNameCache[styleName];\n }\n\n var result = hyphenateStyleName(styleName);\n styleNameCache[styleName] = result;\n return result;\n };\n\n function createMarkupForStyles(styles) {\n var serialized = '';\n var delimiter = '';\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var isCustomProperty = styleName.indexOf('--') === 0;\n var styleValue = styles[styleName];\n {\n if (!isCustomProperty) {\n warnValidStyle$1(styleName, styleValue);\n }\n }\n\n if (styleValue != null) {\n serialized += delimiter + (isCustomProperty ? styleName : processStyleName(styleName)) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n delimiter = ';';\n }\n }\n\n return serialized || null;\n }\n\n function warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && getComponentName(_constructor) || 'ReactClass';\n var warningKey = componentName + '.' + callerName;\n\n if (didWarnAboutNoopUpdateForComponent[warningKey]) {\n return;\n }\n\n warningWithoutStack$1(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\\n\\nPlease check the code for the %s component.', callerName, callerName, componentName);\n didWarnAboutNoopUpdateForComponent[warningKey] = true;\n }\n }\n\n function shouldConstruct(Component) {\n return Component.prototype && Component.prototype.isReactComponent;\n }\n\n function getNonChildrenInnerMarkup(props) {\n var innerHTML = props.dangerouslySetInnerHTML;\n\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n return innerHTML.__html;\n }\n } else {\n var content = props.children;\n\n if (typeof content === 'string' || typeof content === 'number') {\n return escapeTextForBrowser(content);\n }\n }\n\n return null;\n }\n\n function flattenTopLevelChildren(children) {\n if (!React.isValidElement(children)) {\n return toArray(children);\n }\n\n var element = children;\n\n if (element.type !== REACT_FRAGMENT_TYPE) {\n return [element];\n }\n\n var fragmentChildren = element.props.children;\n\n if (!React.isValidElement(fragmentChildren)) {\n return toArray(fragmentChildren);\n }\n\n var fragmentChildElement = fragmentChildren;\n return [fragmentChildElement];\n }\n\n function flattenOptionChildren(children) {\n if (children === undefined || children === null) {\n return children;\n }\n\n var content = ''; // Flatten children and warn if they aren't strings or numbers;\n // invalid types are ignored.\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child;\n {\n if (!didWarnInvalidOptionChildren && typeof child !== 'string' && typeof child !== 'number') {\n didWarnInvalidOptionChildren = true;\n warning$1(false, 'Only strings and numbers are supported as

    is invalid but we don't warn\n// because it still parses correctly; we do warn for other cases like nested\n//

    tags where the beginning of the second element implicitly closes the\n// first, causing a confusing mess.\n// https://html.spec.whatwg.org/multipage/syntax.html#special\nvar specialTags=['address','applet','area','article','aside','base','basefont','bgsound','blockquote','body','br','button','caption','center','col','colgroup','dd','details','dir','div','dl','dt','embed','fieldset','figcaption','figure','footer','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','iframe','img','input','isindex','li','link','listing','main','marquee','menu','menuitem','meta','nav','noembed','noframes','noscript','object','ol','p','param','plaintext','pre','script','section','select','source','style','summary','table','tbody','td','template','textarea','tfoot','th','thead','title','tr','track','ul','wbr','xmp'];// https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\nvar inScopeTags=['applet','caption','html','table','td','th','marquee','object','template',// https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n// TODO: Distinguish by namespace here -- for , including it here\n// errs on the side of fewer warnings\n'foreignObject','desc','title'];// https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\nvar buttonScopeTags=inScopeTags.concat(['button']);// https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\nvar impliedEndTags=['dd','dt','li','option','optgroup','p','rp','rt'];var emptyAncestorInfo={current:null,formTag:null,aTagInScope:null,buttonTagInScope:null,nobrTagInScope:null,pTagInButtonScope:null,listItemTagAutoclosing:null,dlItemTagAutoclosing:null};updatedAncestorInfo=function updatedAncestorInfo(oldInfo,tag){var ancestorInfo=_assign({},oldInfo||emptyAncestorInfo);var info={tag:tag};if(inScopeTags.indexOf(tag)!==-1){ancestorInfo.aTagInScope=null;ancestorInfo.buttonTagInScope=null;ancestorInfo.nobrTagInScope=null;}if(buttonScopeTags.indexOf(tag)!==-1){ancestorInfo.pTagInButtonScope=null;}// See rules for 'li', 'dd', 'dt' start tags in\n// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\nif(specialTags.indexOf(tag)!==-1&&tag!=='address'&&tag!=='div'&&tag!=='p'){ancestorInfo.listItemTagAutoclosing=null;ancestorInfo.dlItemTagAutoclosing=null;}ancestorInfo.current=info;if(tag==='form'){ancestorInfo.formTag=info;}if(tag==='a'){ancestorInfo.aTagInScope=info;}if(tag==='button'){ancestorInfo.buttonTagInScope=info;}if(tag==='nobr'){ancestorInfo.nobrTagInScope=info;}if(tag==='p'){ancestorInfo.pTagInButtonScope=info;}if(tag==='li'){ancestorInfo.listItemTagAutoclosing=info;}if(tag==='dd'||tag==='dt'){ancestorInfo.dlItemTagAutoclosing=info;}return ancestorInfo;};/**\n * Returns whether\n */var isTagValidWithParent=function isTagValidWithParent(tag,parentTag){// First, let's check if we're in an unusual parsing mode...\nswitch(parentTag){// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\ncase'select':return tag==='option'||tag==='optgroup'||tag==='#text';case'optgroup':return tag==='option'||tag==='#text';// Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n// but\ncase'option':return tag==='#text';// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n// No special behavior since these rules fall back to \"in body\" mode for\n// all except special table nodes which cause bad parsing behavior anyway.\n// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\ncase'tr':return tag==='th'||tag==='td'||tag==='style'||tag==='script'||tag==='template';// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\ncase'tbody':case'thead':case'tfoot':return tag==='tr'||tag==='style'||tag==='script'||tag==='template';// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\ncase'colgroup':return tag==='col'||tag==='template';// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\ncase'table':return tag==='caption'||tag==='colgroup'||tag==='tbody'||tag==='tfoot'||tag==='thead'||tag==='style'||tag==='script'||tag==='template';// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\ncase'head':return tag==='base'||tag==='basefont'||tag==='bgsound'||tag==='link'||tag==='meta'||tag==='title'||tag==='noscript'||tag==='noframes'||tag==='style'||tag==='script'||tag==='template';// https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\ncase'html':return tag==='head'||tag==='body'||tag==='frameset';case'frameset':return tag==='frame';case'#document':return tag==='html';}// Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n// where the parsing rules cause implicit opens or closes to be added.\n// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\nswitch(tag){case'h1':case'h2':case'h3':case'h4':case'h5':case'h6':return parentTag!=='h1'&&parentTag!=='h2'&&parentTag!=='h3'&&parentTag!=='h4'&&parentTag!=='h5'&&parentTag!=='h6';case'rp':case'rt':return impliedEndTags.indexOf(parentTag)===-1;case'body':case'caption':case'col':case'colgroup':case'frameset':case'frame':case'head':case'html':case'tbody':case'td':case'tfoot':case'th':case'thead':case'tr':// These tags are only valid with a few parents that have special child\n// parsing rules -- if we're down here, then none of those matched and\n// so we allow it only if we don't know what the parent is, as all other\n// cases are invalid.\nreturn parentTag==null;}return true;};/**\n * Returns whether\n */var findInvalidAncestorForTag=function findInvalidAncestorForTag(tag,ancestorInfo){switch(tag){case'address':case'article':case'aside':case'blockquote':case'center':case'details':case'dialog':case'dir':case'div':case'dl':case'fieldset':case'figcaption':case'figure':case'footer':case'header':case'hgroup':case'main':case'menu':case'nav':case'ol':case'p':case'section':case'summary':case'ul':case'pre':case'listing':case'table':case'hr':case'xmp':case'h1':case'h2':case'h3':case'h4':case'h5':case'h6':return ancestorInfo.pTagInButtonScope;case'form':return ancestorInfo.formTag||ancestorInfo.pTagInButtonScope;case'li':return ancestorInfo.listItemTagAutoclosing;case'dd':case'dt':return ancestorInfo.dlItemTagAutoclosing;case'button':return ancestorInfo.buttonTagInScope;case'a':// Spec says something about storing a list of markers, but it sounds\n// equivalent to this check.\nreturn ancestorInfo.aTagInScope;case'nobr':return ancestorInfo.nobrTagInScope;}return null;};var didWarn$1={};validateDOMNesting=function validateDOMNesting(childTag,childText,ancestorInfo){ancestorInfo=ancestorInfo||emptyAncestorInfo;var parentInfo=ancestorInfo.current;var parentTag=parentInfo&&parentInfo.tag;if(childText!=null){!(childTag==null)?warningWithoutStack$1(false,'validateDOMNesting: when childText is passed, childTag should be null'):void 0;childTag='#text';}var invalidParent=isTagValidWithParent(childTag,parentTag)?null:parentInfo;var invalidAncestor=invalidParent?null:findInvalidAncestorForTag(childTag,ancestorInfo);var invalidParentOrAncestor=invalidParent||invalidAncestor;if(!invalidParentOrAncestor){return;}var ancestorTag=invalidParentOrAncestor.tag;var addendum=getCurrentFiberStackInDev();var warnKey=!!invalidParent+'|'+childTag+'|'+ancestorTag+'|'+addendum;if(didWarn$1[warnKey]){return;}didWarn$1[warnKey]=true;var tagDisplayName=childTag;var whitespaceInfo='';if(childTag==='#text'){if(/\\S/.test(childText)){tagDisplayName='Text nodes';}else{tagDisplayName='Whitespace text nodes';whitespaceInfo=\" Make sure you don't have any extra whitespace between tags on \"+'each line of your source code.';}}else{tagDisplayName='<'+childTag+'>';}if(invalidParent){var info='';if(ancestorTag==='table'&&childTag==='tr'){info+=' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by '+'the browser.';}warningWithoutStack$1(false,'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s%s',tagDisplayName,ancestorTag,whitespaceInfo,info,addendum);}else{warningWithoutStack$1(false,'validateDOMNesting(...): %s cannot appear as a descendant of '+'<%s>.%s',tagDisplayName,ancestorTag,addendum);}};}// can re-export everything from this module.\nfunction shim(){{{throw Error(\"The current renderer does not support persistence. This error is likely caused by a bug in React. Please file an issue.\");}}}// Persistence (when unsupported)\nvar supportsPersistence=false;var cloneInstance=shim;var cloneFundamentalInstance=shim;var createContainerChildSet=shim;var appendChildToContainerChildSet=shim;var finalizeContainerChildren=shim;var replaceContainerChildren=shim;var cloneHiddenInstance=shim;var cloneHiddenTextInstance=shim;var SUPPRESS_HYDRATION_WARNING;{SUPPRESS_HYDRATION_WARNING='suppressHydrationWarning';}var SUSPENSE_START_DATA='$';var SUSPENSE_END_DATA='/$';var SUSPENSE_PENDING_START_DATA='$?';var SUSPENSE_FALLBACK_START_DATA='$!';var STYLE='style';var eventsEnabled=null;var selectionInformation=null;function shouldAutoFocusHostComponent(type,props){switch(type){case'button':case'input':case'select':case'textarea':return!!props.autoFocus;}return false;}function getRootHostContext(rootContainerInstance){var type;var namespace;var nodeType=rootContainerInstance.nodeType;switch(nodeType){case DOCUMENT_NODE:case DOCUMENT_FRAGMENT_NODE:{type=nodeType===DOCUMENT_NODE?'#document':'#fragment';var root=rootContainerInstance.documentElement;namespace=root?root.namespaceURI:getChildNamespace(null,'');break;}default:{var container=nodeType===COMMENT_NODE?rootContainerInstance.parentNode:rootContainerInstance;var ownNamespace=container.namespaceURI||null;type=container.tagName;namespace=getChildNamespace(ownNamespace,type);break;}}{var validatedTag=type.toLowerCase();var ancestorInfo=updatedAncestorInfo(null,validatedTag);return{namespace:namespace,ancestorInfo:ancestorInfo};}return namespace;}function getChildHostContext(parentHostContext,type,rootContainerInstance){{var parentHostContextDev=parentHostContext;var namespace=getChildNamespace(parentHostContextDev.namespace,type);var ancestorInfo=updatedAncestorInfo(parentHostContextDev.ancestorInfo,type);return{namespace:namespace,ancestorInfo:ancestorInfo};}var parentNamespace=parentHostContext;return getChildNamespace(parentNamespace,type);}function getPublicInstance(instance){return instance;}function prepareForCommit(containerInfo){eventsEnabled=isEnabled();selectionInformation=getSelectionInformation();setEnabled(false);}function resetAfterCommit(containerInfo){restoreSelection(selectionInformation);selectionInformation=null;setEnabled(eventsEnabled);eventsEnabled=null;}function createInstance(type,props,rootContainerInstance,hostContext,internalInstanceHandle){var parentNamespace;{// TODO: take namespace into account when validating.\nvar hostContextDev=hostContext;validateDOMNesting(type,null,hostContextDev.ancestorInfo);if(typeof props.children==='string'||typeof props.children==='number'){var string=''+props.children;var ownAncestorInfo=updatedAncestorInfo(hostContextDev.ancestorInfo,type);validateDOMNesting(null,string,ownAncestorInfo);}parentNamespace=hostContextDev.namespace;}var domElement=createElement(type,props,rootContainerInstance,parentNamespace);precacheFiberNode(internalInstanceHandle,domElement);updateFiberProps(domElement,props);return domElement;}function appendInitialChild(parentInstance,child){parentInstance.appendChild(child);}function finalizeInitialChildren(domElement,type,props,rootContainerInstance,hostContext){setInitialProperties(domElement,type,props,rootContainerInstance);return shouldAutoFocusHostComponent(type,props);}function prepareUpdate(domElement,type,oldProps,newProps,rootContainerInstance,hostContext){{var hostContextDev=hostContext;if(_typeof(newProps.children)!==_typeof(oldProps.children)&&(typeof newProps.children==='string'||typeof newProps.children==='number')){var string=''+newProps.children;var ownAncestorInfo=updatedAncestorInfo(hostContextDev.ancestorInfo,type);validateDOMNesting(null,string,ownAncestorInfo);}}return diffProperties(domElement,type,oldProps,newProps,rootContainerInstance);}function shouldSetTextContent(type,props){return type==='textarea'||type==='option'||type==='noscript'||typeof props.children==='string'||typeof props.children==='number'||_typeof(props.dangerouslySetInnerHTML)==='object'&&props.dangerouslySetInnerHTML!==null&&props.dangerouslySetInnerHTML.__html!=null;}function shouldDeprioritizeSubtree(type,props){return!!props.hidden;}function createTextInstance(text,rootContainerInstance,hostContext,internalInstanceHandle){{var hostContextDev=hostContext;validateDOMNesting(null,text,hostContextDev.ancestorInfo);}var textNode=createTextNode(text,rootContainerInstance);precacheFiberNode(internalInstanceHandle,textNode);return textNode;}var isPrimaryRenderer=true;var warnsIfNotActing=true;// This initialization code may run even on server environments\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\nvar scheduleTimeout=typeof setTimeout==='function'?setTimeout:undefined;var cancelTimeout=typeof clearTimeout==='function'?clearTimeout:undefined;var noTimeout=-1;// -------------------\n// Mutation\n// -------------------\nvar supportsMutation=true;function commitMount(domElement,type,newProps,internalInstanceHandle){// Despite the naming that might imply otherwise, this method only\n// fires if there is an `Update` effect scheduled during mounting.\n// This happens if `finalizeInitialChildren` returns `true` (which it\n// does to implement the `autoFocus` attribute on the client). But\n// there are also other cases when this might happen (such as patching\n// up text content during hydration mismatch). So we'll check this again.\nif(shouldAutoFocusHostComponent(type,newProps)){domElement.focus();}}function commitUpdate(domElement,updatePayload,type,oldProps,newProps,internalInstanceHandle){// Update the props handle so that we know which props are the ones with\n// with current event handlers.\nupdateFiberProps(domElement,newProps);// Apply the diff to the DOM node.\nupdateProperties(domElement,updatePayload,type,oldProps,newProps);}function resetTextContent(domElement){setTextContent(domElement,'');}function commitTextUpdate(textInstance,oldText,newText){textInstance.nodeValue=newText;}function appendChild(parentInstance,child){parentInstance.appendChild(child);}function appendChildToContainer(container,child){var parentNode;if(container.nodeType===COMMENT_NODE){parentNode=container.parentNode;parentNode.insertBefore(child,container);}else{parentNode=container;parentNode.appendChild(child);}// This container might be used for a portal.\n// If something inside a portal is clicked, that click should bubble\n// through the React tree. However, on Mobile Safari the click would\n// never bubble through the *DOM* tree unless an ancestor with onclick\n// event exists. So we wouldn't see it and dispatch it.\n// This is why we ensure that non React root containers have inline onclick\n// defined.\n// https://github.com/facebook/react/issues/11918\nvar reactRootContainer=container._reactRootContainer;if((reactRootContainer===null||reactRootContainer===undefined)&&parentNode.onclick===null){// TODO: This cast may not be sound for SVG, MathML or custom elements.\ntrapClickOnNonInteractiveElement(parentNode);}}function insertBefore(parentInstance,child,beforeChild){parentInstance.insertBefore(child,beforeChild);}function insertInContainerBefore(container,child,beforeChild){if(container.nodeType===COMMENT_NODE){container.parentNode.insertBefore(child,beforeChild);}else{container.insertBefore(child,beforeChild);}}// This is a specific event for the React Flare\n// event system, so event responders can act\n// accordingly to a DOM node being unmounted that\n// previously had active document focus.\nfunction dispatchDetachedVisibleNodeEvent(child){if(enableFlareAPI&&selectionInformation&&child===selectionInformation.focusedElem){var targetFiber=getClosestInstanceFromNode(child);// Simlulate a blur event to the React Flare responder system.\ndispatchEventForResponderEventSystem('detachedvisiblenode',targetFiber,{target:child,timeStamp:Date.now()},child,RESPONDER_EVENT_SYSTEM|IS_PASSIVE);}}function removeChild(parentInstance,child){dispatchDetachedVisibleNodeEvent(child);parentInstance.removeChild(child);}function removeChildFromContainer(container,child){if(container.nodeType===COMMENT_NODE){container.parentNode.removeChild(child);}else{dispatchDetachedVisibleNodeEvent(child);container.removeChild(child);}}function clearSuspenseBoundary(parentInstance,suspenseInstance){var node=suspenseInstance;// Delete all nodes within this suspense boundary.\n// There might be nested nodes so we need to keep track of how\n// deep we are and only break out when we're back on top.\nvar depth=0;do{var nextNode=node.nextSibling;parentInstance.removeChild(node);if(nextNode&&nextNode.nodeType===COMMENT_NODE){var data=nextNode.data;if(data===SUSPENSE_END_DATA){if(depth===0){parentInstance.removeChild(nextNode);// Retry if any event replaying was blocked on this.\nretryIfBlockedOn(suspenseInstance);return;}else{depth--;}}else if(data===SUSPENSE_START_DATA||data===SUSPENSE_PENDING_START_DATA||data===SUSPENSE_FALLBACK_START_DATA){depth++;}}node=nextNode;}while(node);// TODO: Warn, we didn't find the end comment boundary.\n// Retry if any event replaying was blocked on this.\nretryIfBlockedOn(suspenseInstance);}function clearSuspenseBoundaryFromContainer(container,suspenseInstance){if(container.nodeType===COMMENT_NODE){clearSuspenseBoundary(container.parentNode,suspenseInstance);}else if(container.nodeType===ELEMENT_NODE){clearSuspenseBoundary(container,suspenseInstance);}else{}// Document nodes should never contain suspense boundaries.\n// Retry if any event replaying was blocked on this.\nretryIfBlockedOn(container);}function hideInstance(instance){// TODO: Does this work for all element types? What about MathML? Should we\n// pass host context to this method?\ninstance=instance;var style=instance.style;if(typeof style.setProperty==='function'){style.setProperty('display','none','important');}else{style.display='none';}}function hideTextInstance(textInstance){textInstance.nodeValue='';}function unhideInstance(instance,props){instance=instance;var styleProp=props[STYLE];var display=styleProp!==undefined&&styleProp!==null&&styleProp.hasOwnProperty('display')?styleProp.display:null;instance.style.display=dangerousStyleValue('display',display);}function unhideTextInstance(textInstance,text){textInstance.nodeValue=text;}// -------------------\n// Hydration\n// -------------------\nvar supportsHydration=true;function canHydrateInstance(instance,type,props){if(instance.nodeType!==ELEMENT_NODE||type.toLowerCase()!==instance.nodeName.toLowerCase()){return null;}// This has now been refined to an element node.\nreturn instance;}function canHydrateTextInstance(instance,text){if(text===''||instance.nodeType!==TEXT_NODE){// Empty strings are not parsed by HTML so there won't be a correct match here.\nreturn null;}// This has now been refined to a text node.\nreturn instance;}function canHydrateSuspenseInstance(instance){if(instance.nodeType!==COMMENT_NODE){// Empty strings are not parsed by HTML so there won't be a correct match here.\nreturn null;}// This has now been refined to a suspense node.\nreturn instance;}function isSuspenseInstancePending(instance){return instance.data===SUSPENSE_PENDING_START_DATA;}function isSuspenseInstanceFallback(instance){return instance.data===SUSPENSE_FALLBACK_START_DATA;}function registerSuspenseInstanceRetry(instance,callback){instance._reactRetry=callback;}function getNextHydratable(node){// Skip non-hydratable nodes.\nfor(;node!=null;node=node.nextSibling){var nodeType=node.nodeType;if(nodeType===ELEMENT_NODE||nodeType===TEXT_NODE){break;}if(enableSuspenseServerRenderer){if(nodeType===COMMENT_NODE){var nodeData=node.data;if(nodeData===SUSPENSE_START_DATA||nodeData===SUSPENSE_FALLBACK_START_DATA||nodeData===SUSPENSE_PENDING_START_DATA){break;}}}}return node;}function getNextHydratableSibling(instance){return getNextHydratable(instance.nextSibling);}function getFirstHydratableChild(parentInstance){return getNextHydratable(parentInstance.firstChild);}function hydrateInstance(instance,type,props,rootContainerInstance,hostContext,internalInstanceHandle){precacheFiberNode(internalInstanceHandle,instance);// TODO: Possibly defer this until the commit phase where all the events\n// get attached.\nupdateFiberProps(instance,props);var parentNamespace;{var hostContextDev=hostContext;parentNamespace=hostContextDev.namespace;}return diffHydratedProperties(instance,type,props,parentNamespace,rootContainerInstance);}function hydrateTextInstance(textInstance,text,internalInstanceHandle){precacheFiberNode(internalInstanceHandle,textInstance);return diffHydratedText(textInstance,text);}function hydrateSuspenseInstance(suspenseInstance,internalInstanceHandle){precacheFiberNode(internalInstanceHandle,suspenseInstance);}function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance){var node=suspenseInstance.nextSibling;// Skip past all nodes within this suspense boundary.\n// There might be nested nodes so we need to keep track of how\n// deep we are and only break out when we're back on top.\nvar depth=0;while(node){if(node.nodeType===COMMENT_NODE){var data=node.data;if(data===SUSPENSE_END_DATA){if(depth===0){return getNextHydratableSibling(node);}else{depth--;}}else if(data===SUSPENSE_START_DATA||data===SUSPENSE_FALLBACK_START_DATA||data===SUSPENSE_PENDING_START_DATA){depth++;}}node=node.nextSibling;}// TODO: Warn, we didn't find the end comment boundary.\nreturn null;}// Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\nfunction getParentSuspenseInstance(targetInstance){var node=targetInstance.previousSibling;// Skip past all nodes within this suspense boundary.\n// There might be nested nodes so we need to keep track of how\n// deep we are and only break out when we're back on top.\nvar depth=0;while(node){if(node.nodeType===COMMENT_NODE){var data=node.data;if(data===SUSPENSE_START_DATA||data===SUSPENSE_FALLBACK_START_DATA||data===SUSPENSE_PENDING_START_DATA){if(depth===0){return node;}else{depth--;}}else if(data===SUSPENSE_END_DATA){depth++;}}node=node.previousSibling;}return null;}function commitHydratedContainer(container){// Retry if any event replaying was blocked on this.\nretryIfBlockedOn(container);}function commitHydratedSuspenseInstance(suspenseInstance){// Retry if any event replaying was blocked on this.\nretryIfBlockedOn(suspenseInstance);}function didNotMatchHydratedContainerTextInstance(parentContainer,textInstance,text){{warnForUnmatchedText(textInstance,text);}}function didNotMatchHydratedTextInstance(parentType,parentProps,parentInstance,textInstance,text){if( true&&parentProps[SUPPRESS_HYDRATION_WARNING]!==true){warnForUnmatchedText(textInstance,text);}}function didNotHydrateContainerInstance(parentContainer,instance){{if(instance.nodeType===ELEMENT_NODE){warnForDeletedHydratableElement(parentContainer,instance);}else if(instance.nodeType===COMMENT_NODE){// TODO: warnForDeletedHydratableSuspenseBoundary\n}else{warnForDeletedHydratableText(parentContainer,instance);}}}function didNotHydrateInstance(parentType,parentProps,parentInstance,instance){if( true&&parentProps[SUPPRESS_HYDRATION_WARNING]!==true){if(instance.nodeType===ELEMENT_NODE){warnForDeletedHydratableElement(parentInstance,instance);}else if(instance.nodeType===COMMENT_NODE){// TODO: warnForDeletedHydratableSuspenseBoundary\n}else{warnForDeletedHydratableText(parentInstance,instance);}}}function didNotFindHydratableContainerInstance(parentContainer,type,props){{warnForInsertedHydratedElement(parentContainer,type,props);}}function didNotFindHydratableContainerTextInstance(parentContainer,text){{warnForInsertedHydratedText(parentContainer,text);}}function didNotFindHydratableInstance(parentType,parentProps,parentInstance,type,props){if( true&&parentProps[SUPPRESS_HYDRATION_WARNING]!==true){warnForInsertedHydratedElement(parentInstance,type,props);}}function didNotFindHydratableTextInstance(parentType,parentProps,parentInstance,text){if( true&&parentProps[SUPPRESS_HYDRATION_WARNING]!==true){warnForInsertedHydratedText(parentInstance,text);}}function didNotFindHydratableSuspenseInstance(parentType,parentProps,parentInstance){if( true&&parentProps[SUPPRESS_HYDRATION_WARNING]!==true){// TODO: warnForInsertedHydratedSuspense(parentInstance);\n}}function mountResponderInstance(responder,responderInstance,responderProps,responderState,instance){// Listen to events\nvar doc=instance.ownerDocument;var _ref=responder,rootEventTypes=_ref.rootEventTypes,targetEventTypes=_ref.targetEventTypes;if(targetEventTypes!==null){listenToEventResponderEventTypes(targetEventTypes,doc);}if(rootEventTypes!==null){addRootEventTypesForResponderInstance(responderInstance,rootEventTypes);listenToEventResponderEventTypes(rootEventTypes,doc);}mountEventResponder(responder,responderInstance,responderProps,responderState);return responderInstance;}function unmountResponderInstance(responderInstance){if(enableFlareAPI){// TODO stop listening to targetEventTypes\nunmountEventResponder(responderInstance);}}function getFundamentalComponentInstance(fundamentalInstance){if(enableFundamentalAPI){var currentFiber=fundamentalInstance.currentFiber,impl=fundamentalInstance.impl,props=fundamentalInstance.props,state=fundamentalInstance.state;var instance=impl.getInstance(null,props,state);precacheFiberNode(currentFiber,instance);return instance;}// Because of the flag above, this gets around the Flow error;\nreturn null;}function mountFundamentalComponent(fundamentalInstance){if(enableFundamentalAPI){var impl=fundamentalInstance.impl,instance=fundamentalInstance.instance,props=fundamentalInstance.props,state=fundamentalInstance.state;var onMount=impl.onMount;if(onMount!==undefined){onMount(null,instance,props,state);}}}function shouldUpdateFundamentalComponent(fundamentalInstance){if(enableFundamentalAPI){var impl=fundamentalInstance.impl,prevProps=fundamentalInstance.prevProps,props=fundamentalInstance.props,state=fundamentalInstance.state;var shouldUpdate=impl.shouldUpdate;if(shouldUpdate!==undefined){return shouldUpdate(null,prevProps,props,state);}}return true;}function updateFundamentalComponent(fundamentalInstance){if(enableFundamentalAPI){var impl=fundamentalInstance.impl,instance=fundamentalInstance.instance,prevProps=fundamentalInstance.prevProps,props=fundamentalInstance.props,state=fundamentalInstance.state;var onUpdate=impl.onUpdate;if(onUpdate!==undefined){onUpdate(null,instance,prevProps,props,state);}}}function unmountFundamentalComponent(fundamentalInstance){if(enableFundamentalAPI){var impl=fundamentalInstance.impl,instance=fundamentalInstance.instance,props=fundamentalInstance.props,state=fundamentalInstance.state;var onUnmount=impl.onUnmount;if(onUnmount!==undefined){onUnmount(null,instance,props,state);}}}function getInstanceFromNode$2(node){return getClosestInstanceFromNode(node)||null;}var randomKey=Math.random().toString(36).slice(2);var internalInstanceKey='__reactInternalInstance$'+randomKey;var internalEventHandlersKey='__reactEventHandlers$'+randomKey;var internalContainerInstanceKey='__reactContainere$'+randomKey;function precacheFiberNode(hostInst,node){node[internalInstanceKey]=hostInst;}function markContainerAsRoot(hostRoot,node){node[internalContainerInstanceKey]=hostRoot;}function unmarkContainerAsRoot(node){node[internalContainerInstanceKey]=null;}function isContainerMarkedAsRoot(node){return!!node[internalContainerInstanceKey];}// Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\nfunction getClosestInstanceFromNode(targetNode){var targetInst=targetNode[internalInstanceKey];if(targetInst){// Don't return HostRoot or SuspenseComponent here.\nreturn targetInst;}// If the direct event target isn't a React owned DOM node, we need to look\n// to see if one of its parents is a React owned DOM node.\nvar parentNode=targetNode.parentNode;while(parentNode){// We'll check if this is a container root that could include\n// React nodes in the future. We need to check this first because\n// if we're a child of a dehydrated container, we need to first\n// find that inner container before moving on to finding the parent\n// instance. Note that we don't check this field on the targetNode\n// itself because the fibers are conceptually between the container\n// node and the first child. It isn't surrounding the container node.\n// If it's not a container, we check if it's an instance.\ntargetInst=parentNode[internalContainerInstanceKey]||parentNode[internalInstanceKey];if(targetInst){// Since this wasn't the direct target of the event, we might have\n// stepped past dehydrated DOM nodes to get here. However they could\n// also have been non-React nodes. We need to answer which one.\n// If we the instance doesn't have any children, then there can't be\n// a nested suspense boundary within it. So we can use this as a fast\n// bailout. Most of the time, when people add non-React children to\n// the tree, it is using a ref to a child-less DOM node.\n// Normally we'd only need to check one of the fibers because if it\n// has ever gone from having children to deleting them or vice versa\n// it would have deleted the dehydrated boundary nested inside already.\n// However, since the HostRoot starts out with an alternate it might\n// have one on the alternate so we need to check in case this was a\n// root.\nvar alternate=targetInst.alternate;if(targetInst.child!==null||alternate!==null&&alternate.child!==null){// Next we need to figure out if the node that skipped past is\n// nested within a dehydrated boundary and if so, which one.\nvar suspenseInstance=getParentSuspenseInstance(targetNode);while(suspenseInstance!==null){// We found a suspense instance. That means that we haven't\n// hydrated it yet. Even though we leave the comments in the\n// DOM after hydrating, and there are boundaries in the DOM\n// that could already be hydrated, we wouldn't have found them\n// through this pass since if the target is hydrated it would\n// have had an internalInstanceKey on it.\n// Let's get the fiber associated with the SuspenseComponent\n// as the deepest instance.\nvar targetSuspenseInst=suspenseInstance[internalInstanceKey];if(targetSuspenseInst){return targetSuspenseInst;}// If we don't find a Fiber on the comment, it might be because\n// we haven't gotten to hydrate it yet. There might still be a\n// parent boundary that hasn't above this one so we need to find\n// the outer most that is known.\nsuspenseInstance=getParentSuspenseInstance(suspenseInstance);// If we don't find one, then that should mean that the parent\n// host component also hasn't hydrated yet. We can return it\n// below since it will bail out on the isMounted check later.\n}}return targetInst;}targetNode=parentNode;parentNode=targetNode.parentNode;}return null;}/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */function getInstanceFromNode$1(node){var inst=node[internalInstanceKey]||node[internalContainerInstanceKey];if(inst){if(inst.tag===HostComponent||inst.tag===HostText||inst.tag===SuspenseComponent||inst.tag===HostRoot){return inst;}else{return null;}}return null;}/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */function getNodeFromInstance$1(inst){if(inst.tag===HostComponent||inst.tag===HostText){// In Fiber this, is just the state node right now. We assume it will be\n// a host component or host text.\nreturn inst.stateNode;}// Without this first invariant, passing a non-DOM-component triggers the next\n// invariant for a missing parent, which is super confusing.\n{{throw Error(\"getNodeFromInstance: Invalid argument.\");}}}function getFiberCurrentPropsFromNode$1(node){return node[internalEventHandlersKey]||null;}function updateFiberProps(node,props){node[internalEventHandlersKey]=props;}/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */var root=null;var startText=null;var fallbackText=null;function initialize(nativeEventTarget){root=nativeEventTarget;startText=getText();return true;}function reset(){root=null;startText=null;fallbackText=null;}function getData(){if(fallbackText){return fallbackText;}var start;var startValue=startText;var startLength=startValue.length;var end;var endValue=getText();var endLength=endValue.length;for(start=0;start<startLength;start++){if(startValue[start]!==endValue[start]){break;}}var minEnd=startLength-start;for(end=1;end<=minEnd;end++){if(startValue[startLength-end]!==endValue[endLength-end]){break;}}var sliceTail=end>1?1-end:undefined;fallbackText=endValue.slice(start,sliceTail);return fallbackText;}function getText(){if('value'in root){return root.value;}return root.textContent;}/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */var SyntheticCompositionEvent=SyntheticEvent.extend({data:null});/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */var SyntheticInputEvent=SyntheticEvent.extend({data:null});var END_KEYCODES=[9,13,27,32];// Tab, Return, Esc, Space\nvar START_KEYCODE=229;var canUseCompositionEvent=canUseDOM&&'CompositionEvent'in window;var documentMode=null;if(canUseDOM&&'documentMode'in document){documentMode=document.documentMode;}// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent=canUseDOM&&'TextEvent'in window&&!documentMode;// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData=canUseDOM&&(!canUseCompositionEvent||documentMode&&documentMode>8&&documentMode<=11);var SPACEBAR_CODE=32;var SPACEBAR_CHAR=String.fromCharCode(SPACEBAR_CODE);// Events and their corresponding property names.\nvar eventTypes$1={beforeInput:{phasedRegistrationNames:{bubbled:'onBeforeInput',captured:'onBeforeInputCapture'},dependencies:[TOP_COMPOSITION_END,TOP_KEY_PRESS,TOP_TEXT_INPUT,TOP_PASTE]},compositionEnd:{phasedRegistrationNames:{bubbled:'onCompositionEnd',captured:'onCompositionEndCapture'},dependencies:[TOP_BLUR,TOP_COMPOSITION_END,TOP_KEY_DOWN,TOP_KEY_PRESS,TOP_KEY_UP,TOP_MOUSE_DOWN]},compositionStart:{phasedRegistrationNames:{bubbled:'onCompositionStart',captured:'onCompositionStartCapture'},dependencies:[TOP_BLUR,TOP_COMPOSITION_START,TOP_KEY_DOWN,TOP_KEY_PRESS,TOP_KEY_UP,TOP_MOUSE_DOWN]},compositionUpdate:{phasedRegistrationNames:{bubbled:'onCompositionUpdate',captured:'onCompositionUpdateCapture'},dependencies:[TOP_BLUR,TOP_COMPOSITION_UPDATE,TOP_KEY_DOWN,TOP_KEY_PRESS,TOP_KEY_UP,TOP_MOUSE_DOWN]}};// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress=false;/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */function isKeypressCommand(nativeEvent){return(nativeEvent.ctrlKey||nativeEvent.altKey||nativeEvent.metaKey)&&// ctrlKey && altKey is equivalent to AltGr, and is not a command.\n!(nativeEvent.ctrlKey&&nativeEvent.altKey);}/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */function getCompositionEventType(topLevelType){switch(topLevelType){case TOP_COMPOSITION_START:return eventTypes$1.compositionStart;case TOP_COMPOSITION_END:return eventTypes$1.compositionEnd;case TOP_COMPOSITION_UPDATE:return eventTypes$1.compositionUpdate;}}/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */function isFallbackCompositionStart(topLevelType,nativeEvent){return topLevelType===TOP_KEY_DOWN&&nativeEvent.keyCode===START_KEYCODE;}/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */function isFallbackCompositionEnd(topLevelType,nativeEvent){switch(topLevelType){case TOP_KEY_UP:// Command keys insert or clear IME input.\nreturn END_KEYCODES.indexOf(nativeEvent.keyCode)!==-1;case TOP_KEY_DOWN:// Expect IME keyCode on each keydown. If we get any other\n// code we must have exited earlier.\nreturn nativeEvent.keyCode!==START_KEYCODE;case TOP_KEY_PRESS:case TOP_MOUSE_DOWN:case TOP_BLUR:// Events are not possible without cancelling IME.\nreturn true;default:return false;}}/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */function getDataFromCustomEvent(nativeEvent){var detail=nativeEvent.detail;if(_typeof(detail)==='object'&&'data'in detail){return detail.data;}return null;}/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */function isUsingKoreanIME(nativeEvent){return nativeEvent.locale==='ko';}// Track the current IME composition status, if any.\nvar isComposing=false;/**\n * @return {?object} A SyntheticCompositionEvent.\n */function extractCompositionEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget){var eventType;var fallbackData;if(canUseCompositionEvent){eventType=getCompositionEventType(topLevelType);}else if(!isComposing){if(isFallbackCompositionStart(topLevelType,nativeEvent)){eventType=eventTypes$1.compositionStart;}}else if(isFallbackCompositionEnd(topLevelType,nativeEvent)){eventType=eventTypes$1.compositionEnd;}if(!eventType){return null;}if(useFallbackCompositionData&&!isUsingKoreanIME(nativeEvent)){// The current composition is stored statically and must not be\n// overwritten while composition continues.\nif(!isComposing&&eventType===eventTypes$1.compositionStart){isComposing=initialize(nativeEventTarget);}else if(eventType===eventTypes$1.compositionEnd){if(isComposing){fallbackData=getData();}}}var event=SyntheticCompositionEvent.getPooled(eventType,targetInst,nativeEvent,nativeEventTarget);if(fallbackData){// Inject data generated from fallback path into the synthetic event.\n// This matches the property of native CompositionEventInterface.\nevent.data=fallbackData;}else{var customData=getDataFromCustomEvent(nativeEvent);if(customData!==null){event.data=customData;}}accumulateTwoPhaseDispatches(event);return event;}/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */function getNativeBeforeInputChars(topLevelType,nativeEvent){switch(topLevelType){case TOP_COMPOSITION_END:return getDataFromCustomEvent(nativeEvent);case TOP_KEY_PRESS:/**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */var which=nativeEvent.which;if(which!==SPACEBAR_CODE){return null;}hasSpaceKeypress=true;return SPACEBAR_CHAR;case TOP_TEXT_INPUT:// Record the characters to be added to the DOM.\nvar chars=nativeEvent.data;// If it's a spacebar character, assume that we have already handled\n// it at the keypress level and bail immediately. Android Chrome\n// doesn't give us keycodes, so we need to ignore it.\nif(chars===SPACEBAR_CHAR&&hasSpaceKeypress){return null;}return chars;default:// For other native event types, do nothing.\nreturn null;}}/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */function getFallbackBeforeInputChars(topLevelType,nativeEvent){// If we are currently composing (IME) and using a fallback to do so,\n// try to extract the composed characters from the fallback object.\n// If composition event is available, we extract a string only at\n// compositionevent, otherwise extract it at fallback events.\nif(isComposing){if(topLevelType===TOP_COMPOSITION_END||!canUseCompositionEvent&&isFallbackCompositionEnd(topLevelType,nativeEvent)){var chars=getData();reset();isComposing=false;return chars;}return null;}switch(topLevelType){case TOP_PASTE:// If a paste event occurs after a keypress, throw out the input\n// chars. Paste events should not lead to BeforeInput events.\nreturn null;case TOP_KEY_PRESS:/**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */if(!isKeypressCommand(nativeEvent)){// IE fires the `keypress` event when a user types an emoji via\n// Touch keyboard of Windows. In such a case, the `char` property\n// holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n// is 2, the property `which` does not represent an emoji correctly.\n// In such a case, we directly return the `char` property instead of\n// using `which`.\nif(nativeEvent[\"char\"]&&nativeEvent[\"char\"].length>1){return nativeEvent[\"char\"];}else if(nativeEvent.which){return String.fromCharCode(nativeEvent.which);}}return null;case TOP_COMPOSITION_END:return useFallbackCompositionData&&!isUsingKoreanIME(nativeEvent)?null:nativeEvent.data;default:return null;}}/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */function extractBeforeInputEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget){var chars;if(canUseTextInputEvent){chars=getNativeBeforeInputChars(topLevelType,nativeEvent);}else{chars=getFallbackBeforeInputChars(topLevelType,nativeEvent);}// If no characters are being inserted, no BeforeInput event should\n// be fired.\nif(!chars){return null;}var event=SyntheticInputEvent.getPooled(eventTypes$1.beforeInput,targetInst,nativeEvent,nativeEventTarget);event.data=chars;accumulateTwoPhaseDispatches(event);return event;}/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */var BeforeInputEventPlugin={eventTypes:eventTypes$1,extractEvents:function extractEvents(topLevelType,targetInst,nativeEvent,nativeEventTarget,eventSystemFlags){var composition=extractCompositionEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget);var beforeInput=extractBeforeInputEvent(topLevelType,targetInst,nativeEvent,nativeEventTarget);if(composition===null){return beforeInput;}if(beforeInput===null){return composition;}return[composition,beforeInput];}};/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */var supportedInputTypes={color:true,date:true,datetime:true,'datetime-local':true,email:true,month:true,number:true,password:true,range:true,search:true,tel:true,text:true,time:true,url:true,week:true};function isTextInputElement(elem){var nodeName=elem&&elem.nodeName&&elem.nodeName.toLowerCase();if(nodeName==='input'){return!!supportedInputTypes[elem.type];}if(nodeName==='textarea'){return true;}return false;}var eventTypes$2={change:{phasedRegistrationNames:{bubbled:'onChange',captured:'onChangeCapture'},dependencies:[TOP_BLUR,TOP_CHANGE,TOP_CLICK,TOP_FOCUS,TOP_INPUT,TOP_KEY_DOWN,TOP_KEY_UP,TOP_SELECTION_CHANGE]}};function createAndAccumulateChangeEvent(inst,nativeEvent,target){var event=SyntheticEvent.getPooled(eventTypes$2.change,inst,nativeEvent,target);event.type='change';// Flag this event loop as needing state restore.\nenqueueStateRestore(target);accumulateTwoPhaseDispatches(event);return event;}/**\n * For IE shims\n */var activeElement=null;var activeElementInst=null;/**\n * SECTION: handle `change` event\n */function shouldUseChangeEvent(elem){var nodeName=elem.nodeName&&elem.nodeName.toLowerCase();return nodeName==='select'||nodeName==='input'&&elem.type==='file';}function manualDispatchChangeEvent(nativeEvent){var event=createAndAccumulateChangeEvent(activeElementInst,nativeEvent,getEventTarget(nativeEvent));// If change and propertychange bubbled, we'd just bind to it like all the\n// other events and have it go through ReactBrowserEventEmitter. Since it\n// doesn't, we manually listen for the events and so we have to enqueue and\n// process the abstract event manually.\n//\n// Batching is necessary here in order to ensure that all event handlers run\n// before the next rerender (including event handlers attached to ancestor\n// elements instead of directly on the input). Without this, controlled\n// components don't work properly in conjunction with event bubbling because\n// the component is rerendered and the value reverted before all the event\n// handlers can run. See https://github.com/facebook/react/issues/708.\nbatchedUpdates(runEventInBatch,event);}function runEventInBatch(event){runEventsInBatch(event);}function getInstIfValueChanged(targetInst){var targetNode=getNodeFromInstance$1(targetInst);if(updateValueIfChanged(targetNode)){return targetInst;}}function getTargetInstForChangeEvent(topLevelType,targetInst){if(topLevelType===TOP_CHANGE){return targetInst;}}/**\n * SECTION: handle `input` event\n */var isInputEventSupported=false;if(canUseDOM){// IE9 claims to support the input event but fails to trigger it when\n// deleting text, so we ignore its input events.\nisInputEventSupported=isEventSupported('input')&&(!document.documentMode||document.documentMode>9);}/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */function startWatchingForValueChange(target,targetInst){activeElement=target;activeElementInst=targetInst;activeElement.attachEvent('onpropertychange',handlePropertyChange);}/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */function stopWatchingForValueChange(){if(!activeElement){return;}activeElement.detachEvent('onpropertychange',handlePropertyChange);activeElement=null;activeElementInst=null;}/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */function handlePropertyChange(nativeEvent){if(nativeEvent.propertyName!=='value'){return;}if(getInstIfValueChanged(activeElementInst)){manualDispatchChangeEvent(nativeEvent);}}function handleEventsForInputEventPolyfill(topLevelType,target,targetInst){if(topLevelType===TOP_FOCUS){// In IE9, propertychange fires for most input events but is buggy and\n// doesn't fire when text is deleted, but conveniently, selectionchange\n// appears to fire in all of the remaining cases so we catch those and\n// forward the event if the value has changed\n// In either case, we don't want to call the event handler if the value\n// is changed from JS so we redefine a setter for `.value` that updates\n// our activeElementValue variable, allowing us to ignore those changes\n//\n// stopWatching() should be a noop here but we call it just in case we\n// missed a blur event somehow.\nstopWatchingForValueChange();startWatchingForValueChange(target,targetInst);}else if(topLevelType===TOP_BLUR){stopWatchingForValueChange();}}// For IE8 and IE9.\nfunction getTargetInstForInputEventPolyfill(topLevelType,targetInst){if(topLevelType===TOP_SELECTION_CHANGE||topLevelType===TOP_KEY_UP||topLevelType===TOP_KEY_DOWN){// On the selectionchange event, the target is just document which isn't\n// helpful for us so just check activeElement instead.\n//\n// 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n// propertychange on the first input event after setting `value` from a\n// script and fires only keydown, keypress, keyup. Catching keyup usually\n// gets it and catching keydown lets us fire an event for the first\n// keystroke if user does a key repeat (it'll be a little delayed: right\n// before the second keystroke). Other input methods (e.g., paste) seem to\n// fire selectionchange normally.\nreturn getInstIfValueChanged(activeElementInst);}}/**\n * SECTION: handle `click` event\n */function shouldUseClickEvent(elem){// Use the `click` event to detect changes to checkbox and radio inputs.\n// This approach works across all browsers, whereas `change` does not fire\n// until `blur` in IE8.\nvar nodeName=elem.nodeName;return nodeName&&nodeName.toLowerCase()==='input'&&(elem.type==='checkbox'||elem.type==='radio');}function getTargetInstForClickEvent(topLevelType,targetInst){if(topLevelType===TOP_CLICK){return getInstIfValueChanged(targetInst);}}function getTargetInstForInputOrChangeEvent(topLevelType,targetInst){if(topLevelType===TOP_INPUT||topLevelType===TOP_CHANGE){return getInstIfValueChanged(targetInst);}}function handleControlledInputBlur(node){var state=node._wrapperState;if(!state||!state.controlled||node.type!=='number'){return;}if(!disableInputAttributeSyncing){// If controlled, assign the value attribute to the current value on blur\nsetDefaultValue(node,'number',node.value);}}/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */var ChangeEventPlugin={eventTypes:eventTypes$2,_isInputEventSupported:isInputEventSupported,extractEvents:function extractEvents(topLevelType,targetInst,nativeEvent,nativeEventTarget,eventSystemFlags){var targetNode=targetInst?getNodeFromInstance$1(targetInst):window;var getTargetInstFunc,handleEventFunc;if(shouldUseChangeEvent(targetNode)){getTargetInstFunc=getTargetInstForChangeEvent;}else if(isTextInputElement(targetNode)){if(isInputEventSupported){getTargetInstFunc=getTargetInstForInputOrChangeEvent;}else{getTargetInstFunc=getTargetInstForInputEventPolyfill;handleEventFunc=handleEventsForInputEventPolyfill;}}else if(shouldUseClickEvent(targetNode)){getTargetInstFunc=getTargetInstForClickEvent;}if(getTargetInstFunc){var inst=getTargetInstFunc(topLevelType,targetInst);if(inst){var event=createAndAccumulateChangeEvent(inst,nativeEvent,nativeEventTarget);return event;}}if(handleEventFunc){handleEventFunc(topLevelType,targetNode,targetInst);}// When blurring, set the value attribute for number inputs\nif(topLevelType===TOP_BLUR){handleControlledInputBlur(targetNode);}}};/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */var DOMEventPluginOrder=['ResponderEventPlugin','SimpleEventPlugin','EnterLeaveEventPlugin','ChangeEventPlugin','SelectEventPlugin','BeforeInputEventPlugin'];var eventTypes$3={mouseEnter:{registrationName:'onMouseEnter',dependencies:[TOP_MOUSE_OUT,TOP_MOUSE_OVER]},mouseLeave:{registrationName:'onMouseLeave',dependencies:[TOP_MOUSE_OUT,TOP_MOUSE_OVER]},pointerEnter:{registrationName:'onPointerEnter',dependencies:[TOP_POINTER_OUT,TOP_POINTER_OVER]},pointerLeave:{registrationName:'onPointerLeave',dependencies:[TOP_POINTER_OUT,TOP_POINTER_OVER]}};// We track the lastNativeEvent to ensure that when we encounter\n// cases where we process the same nativeEvent multiple times,\n// which can happen when have multiple ancestors, that we don't\n// duplicate enter\nvar lastNativeEvent;var EnterLeaveEventPlugin={eventTypes:eventTypes$3,/**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */extractEvents:function extractEvents(topLevelType,targetInst,nativeEvent,nativeEventTarget,eventSystemFlags){var isOverEvent=topLevelType===TOP_MOUSE_OVER||topLevelType===TOP_POINTER_OVER;var isOutEvent=topLevelType===TOP_MOUSE_OUT||topLevelType===TOP_POINTER_OUT;if(isOverEvent&&(eventSystemFlags&IS_REPLAYED)===0&&(nativeEvent.relatedTarget||nativeEvent.fromElement)){// If this is an over event with a target, then we've already dispatched\n// the event in the out event of the other target. If this is replayed,\n// then it's because we couldn't dispatch against this target previously\n// so we have to do it now instead.\nreturn null;}if(!isOutEvent&&!isOverEvent){// Must not be a mouse or pointer in or out - ignoring.\nreturn null;}var win;if(nativeEventTarget.window===nativeEventTarget){// `nativeEventTarget` is probably a window object.\nwin=nativeEventTarget;}else{// TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\nvar doc=nativeEventTarget.ownerDocument;if(doc){win=doc.defaultView||doc.parentWindow;}else{win=window;}}var from;var to;if(isOutEvent){from=targetInst;var related=nativeEvent.relatedTarget||nativeEvent.toElement;to=related?getClosestInstanceFromNode(related):null;if(to!==null){var nearestMounted=getNearestMountedFiber(to);if(to!==nearestMounted||to.tag!==HostComponent&&to.tag!==HostText){to=null;}}}else{// Moving to a node from outside the window.\nfrom=null;to=targetInst;}if(from===to){// Nothing pertains to our managed components.\nreturn null;}var eventInterface,leaveEventType,enterEventType,eventTypePrefix;if(topLevelType===TOP_MOUSE_OUT||topLevelType===TOP_MOUSE_OVER){eventInterface=SyntheticMouseEvent;leaveEventType=eventTypes$3.mouseLeave;enterEventType=eventTypes$3.mouseEnter;eventTypePrefix='mouse';}else if(topLevelType===TOP_POINTER_OUT||topLevelType===TOP_POINTER_OVER){eventInterface=SyntheticPointerEvent;leaveEventType=eventTypes$3.pointerLeave;enterEventType=eventTypes$3.pointerEnter;eventTypePrefix='pointer';}var fromNode=from==null?win:getNodeFromInstance$1(from);var toNode=to==null?win:getNodeFromInstance$1(to);var leave=eventInterface.getPooled(leaveEventType,from,nativeEvent,nativeEventTarget);leave.type=eventTypePrefix+'leave';leave.target=fromNode;leave.relatedTarget=toNode;var enter=eventInterface.getPooled(enterEventType,to,nativeEvent,nativeEventTarget);enter.type=eventTypePrefix+'enter';enter.target=toNode;enter.relatedTarget=fromNode;accumulateEnterLeaveDispatches(leave,enter,from,to);if(nativeEvent===lastNativeEvent){lastNativeEvent=null;return[leave];}lastNativeEvent=nativeEvent;return[leave,enter];}};/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */function is(x,y){return x===y&&(x!==0||1/x===1/y)||x!==x&&y!==y// eslint-disable-line no-self-compare\n;}var is$1=typeof Object.is==='function'?Object.is:is;var hasOwnProperty$2=Object.prototype.hasOwnProperty;/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */function shallowEqual(objA,objB){if(is$1(objA,objB)){return true;}if(_typeof(objA)!=='object'||objA===null||_typeof(objB)!=='object'||objB===null){return false;}var keysA=Object.keys(objA);var keysB=Object.keys(objB);if(keysA.length!==keysB.length){return false;}// Test for A's keys different from B.\nfor(var i=0;i<keysA.length;i++){if(!hasOwnProperty$2.call(objB,keysA[i])||!is$1(objA[keysA[i]],objB[keysA[i]])){return false;}}return true;}var skipSelectionChangeEvent=canUseDOM&&'documentMode'in document&&document.documentMode<=11;var eventTypes$4={select:{phasedRegistrationNames:{bubbled:'onSelect',captured:'onSelectCapture'},dependencies:[TOP_BLUR,TOP_CONTEXT_MENU,TOP_DRAG_END,TOP_FOCUS,TOP_KEY_DOWN,TOP_KEY_UP,TOP_MOUSE_DOWN,TOP_MOUSE_UP,TOP_SELECTION_CHANGE]}};var activeElement$1=null;var activeElementInst$1=null;var lastSelection=null;var mouseDown=false;/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */function getSelection$1(node){if('selectionStart'in node&&hasSelectionCapabilities(node)){return{start:node.selectionStart,end:node.selectionEnd};}else{var win=node.ownerDocument&&node.ownerDocument.defaultView||window;var selection=win.getSelection();return{anchorNode:selection.anchorNode,anchorOffset:selection.anchorOffset,focusNode:selection.focusNode,focusOffset:selection.focusOffset};}}/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */function getEventTargetDocument(eventTarget){return eventTarget.window===eventTarget?eventTarget.document:eventTarget.nodeType===DOCUMENT_NODE?eventTarget:eventTarget.ownerDocument;}/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */function constructSelectEvent(nativeEvent,nativeEventTarget){// Ensure we have the right element, and that the user is not dragging a\n// selection (this matches native `select` event behavior). In HTML5, select\n// fires only on input and textarea thus if there's no focused element we\n// won't dispatch.\nvar doc=getEventTargetDocument(nativeEventTarget);if(mouseDown||activeElement$1==null||activeElement$1!==getActiveElement(doc)){return null;}// Only fire when selection has actually changed.\nvar currentSelection=getSelection$1(activeElement$1);if(!lastSelection||!shallowEqual(lastSelection,currentSelection)){lastSelection=currentSelection;var syntheticEvent=SyntheticEvent.getPooled(eventTypes$4.select,activeElementInst$1,nativeEvent,nativeEventTarget);syntheticEvent.type='select';syntheticEvent.target=activeElement$1;accumulateTwoPhaseDispatches(syntheticEvent);return syntheticEvent;}return null;}/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */var SelectEventPlugin={eventTypes:eventTypes$4,extractEvents:function extractEvents(topLevelType,targetInst,nativeEvent,nativeEventTarget,eventSystemFlags){var doc=getEventTargetDocument(nativeEventTarget);// Track whether all listeners exists for this plugin. If none exist, we do\n// not extract events. See #3639.\nif(!doc||!isListeningToAllDependencies('onSelect',doc)){return null;}var targetNode=targetInst?getNodeFromInstance$1(targetInst):window;switch(topLevelType){// Track the input node that has focus.\ncase TOP_FOCUS:if(isTextInputElement(targetNode)||targetNode.contentEditable==='true'){activeElement$1=targetNode;activeElementInst$1=targetInst;lastSelection=null;}break;case TOP_BLUR:activeElement$1=null;activeElementInst$1=null;lastSelection=null;break;// Don't fire the event while the user is dragging. This matches the\n// semantics of the native select event.\ncase TOP_MOUSE_DOWN:mouseDown=true;break;case TOP_CONTEXT_MENU:case TOP_MOUSE_UP:case TOP_DRAG_END:mouseDown=false;return constructSelectEvent(nativeEvent,nativeEventTarget);// Chrome and IE fire non-standard event when selection is changed (and\n// sometimes when it hasn't). IE's event fires out of order with respect\n// to key and input events on deletion, so we discard it.\n//\n// Firefox doesn't support selectionchange, so check selection status\n// after each key entry. The selection changes after keydown and before\n// keyup, but we check on keydown as well in the case of holding down a\n// key, when multiple keydown events are fired but only one keyup is.\n// This is also our approach for IE handling, for the reason above.\ncase TOP_SELECTION_CHANGE:if(skipSelectionChangeEvent){break;}// falls through\ncase TOP_KEY_DOWN:case TOP_KEY_UP:return constructSelectEvent(nativeEvent,nativeEventTarget);}return null;}};/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */injection.injectEventPluginOrder(DOMEventPluginOrder);setComponentTree(getFiberCurrentPropsFromNode$1,getInstanceFromNode$1,getNodeFromInstance$1);/**\n * Some important event plugins included by default (without having to require\n * them).\n */injection.injectEventPluginsByName({SimpleEventPlugin:SimpleEventPlugin,EnterLeaveEventPlugin:EnterLeaveEventPlugin,ChangeEventPlugin:ChangeEventPlugin,SelectEventPlugin:SelectEventPlugin,BeforeInputEventPlugin:BeforeInputEventPlugin});// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji=\"\\u269B\";var warningEmoji=\"\\u26D4\";var supportsUserTiming=typeof performance!=='undefined'&&typeof performance.mark==='function'&&typeof performance.clearMarks==='function'&&typeof performance.measure==='function'&&typeof performance.clearMeasures==='function';// Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\nvar currentFiber=null;// If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\nvar currentPhase=null;var currentPhaseFiber=null;// Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\nvar isCommitting=false;var hasScheduledUpdateInCurrentCommit=false;var hasScheduledUpdateInCurrentPhase=false;var commitCountInCurrentWorkLoop=0;var effectCountInCurrentCommit=0;// to avoid stretch the commit phase with measurement overhead.\nvar labelsInCurrentCommit=new Set();var formatMarkName=function formatMarkName(markName){return reactEmoji+\" \"+markName;};var formatLabel=function formatLabel(label,warning){var prefix=warning?warningEmoji+\" \":reactEmoji+\" \";var suffix=warning?\" Warning: \"+warning:'';return\"\"+prefix+label+suffix;};var beginMark=function beginMark(markName){performance.mark(formatMarkName(markName));};var clearMark=function clearMark(markName){performance.clearMarks(formatMarkName(markName));};var endMark=function endMark(label,markName,warning){var formattedMarkName=formatMarkName(markName);var formattedLabel=formatLabel(label,warning);try{performance.measure(formattedLabel,formattedMarkName);}catch(err){}// If previous mark was missing for some reason, this will throw.\n// This could only happen if React crashed in an unexpected place earlier.\n// Don't pile on with more errors.\n// Clear marks immediately to avoid growing buffer.\nperformance.clearMarks(formattedMarkName);performance.clearMeasures(formattedLabel);};var getFiberMarkName=function getFiberMarkName(label,debugID){return label+\" (#\"+debugID+\")\";};var getFiberLabel=function getFiberLabel(componentName,isMounted,phase){if(phase===null){// These are composite component total time measurements.\nreturn componentName+\" [\"+(isMounted?'update':'mount')+\"]\";}else{// Composite component methods.\nreturn componentName+\".\"+phase;}};var beginFiberMark=function beginFiberMark(fiber,phase){var componentName=getComponentName(fiber.type)||'Unknown';var debugID=fiber._debugID;var isMounted=fiber.alternate!==null;var label=getFiberLabel(componentName,isMounted,phase);if(isCommitting&&labelsInCurrentCommit.has(label)){// During the commit phase, we don't show duplicate labels because\n// there is a fixed overhead for every measurement, and we don't\n// want to stretch the commit phase beyond necessary.\nreturn false;}labelsInCurrentCommit.add(label);var markName=getFiberMarkName(label,debugID);beginMark(markName);return true;};var clearFiberMark=function clearFiberMark(fiber,phase){var componentName=getComponentName(fiber.type)||'Unknown';var debugID=fiber._debugID;var isMounted=fiber.alternate!==null;var label=getFiberLabel(componentName,isMounted,phase);var markName=getFiberMarkName(label,debugID);clearMark(markName);};var endFiberMark=function endFiberMark(fiber,phase,warning){var componentName=getComponentName(fiber.type)||'Unknown';var debugID=fiber._debugID;var isMounted=fiber.alternate!==null;var label=getFiberLabel(componentName,isMounted,phase);var markName=getFiberMarkName(label,debugID);endMark(label,markName,warning);};var shouldIgnoreFiber=function shouldIgnoreFiber(fiber){// Host components should be skipped in the timeline.\n// We could check typeof fiber.type, but does this work with RN?\nswitch(fiber.tag){case HostRoot:case HostComponent:case HostText:case HostPortal:case Fragment:case ContextProvider:case ContextConsumer:case Mode:return true;default:return false;}};var clearPendingPhaseMeasurement=function clearPendingPhaseMeasurement(){if(currentPhase!==null&¤tPhaseFiber!==null){clearFiberMark(currentPhaseFiber,currentPhase);}currentPhaseFiber=null;currentPhase=null;hasScheduledUpdateInCurrentPhase=false;};var pauseTimers=function pauseTimers(){// Stops all currently active measurements so that they can be resumed\n// if we continue in a later deferred loop from the same unit of work.\nvar fiber=currentFiber;while(fiber){if(fiber._debugIsCurrentlyTiming){endFiberMark(fiber,null,null);}fiber=fiber[\"return\"];}};var resumeTimersRecursively=function resumeTimersRecursively(fiber){if(fiber[\"return\"]!==null){resumeTimersRecursively(fiber[\"return\"]);}if(fiber._debugIsCurrentlyTiming){beginFiberMark(fiber,null);}};var resumeTimers=function resumeTimers(){// Resumes all measurements that were active during the last deferred loop.\nif(currentFiber!==null){resumeTimersRecursively(currentFiber);}};function recordEffect(){if(enableUserTimingAPI){effectCountInCurrentCommit++;}}function recordScheduleUpdate(){if(enableUserTimingAPI){if(isCommitting){hasScheduledUpdateInCurrentCommit=true;}if(currentPhase!==null&¤tPhase!=='componentWillMount'&¤tPhase!=='componentWillReceiveProps'){hasScheduledUpdateInCurrentPhase=true;}}}function startWorkTimer(fiber){if(enableUserTimingAPI){if(!supportsUserTiming||shouldIgnoreFiber(fiber)){return;}// If we pause, this is the fiber to unwind from.\ncurrentFiber=fiber;if(!beginFiberMark(fiber,null)){return;}fiber._debugIsCurrentlyTiming=true;}}function cancelWorkTimer(fiber){if(enableUserTimingAPI){if(!supportsUserTiming||shouldIgnoreFiber(fiber)){return;}// Remember we shouldn't complete measurement for this fiber.\n// Otherwise flamechart will be deep even for small updates.\nfiber._debugIsCurrentlyTiming=false;clearFiberMark(fiber,null);}}function stopWorkTimer(fiber){if(enableUserTimingAPI){if(!supportsUserTiming||shouldIgnoreFiber(fiber)){return;}// If we pause, its parent is the fiber to unwind from.\ncurrentFiber=fiber[\"return\"];if(!fiber._debugIsCurrentlyTiming){return;}fiber._debugIsCurrentlyTiming=false;endFiberMark(fiber,null,null);}}function stopFailedWorkTimer(fiber){if(enableUserTimingAPI){if(!supportsUserTiming||shouldIgnoreFiber(fiber)){return;}// If we pause, its parent is the fiber to unwind from.\ncurrentFiber=fiber[\"return\"];if(!fiber._debugIsCurrentlyTiming){return;}fiber._debugIsCurrentlyTiming=false;var warning=fiber.tag===SuspenseComponent?'Rendering was suspended':'An error was thrown inside this error boundary';endFiberMark(fiber,null,warning);}}function startPhaseTimer(fiber,phase){if(enableUserTimingAPI){if(!supportsUserTiming){return;}clearPendingPhaseMeasurement();if(!beginFiberMark(fiber,phase)){return;}currentPhaseFiber=fiber;currentPhase=phase;}}function stopPhaseTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}if(currentPhase!==null&¤tPhaseFiber!==null){var warning=hasScheduledUpdateInCurrentPhase?'Scheduled a cascading update':null;endFiberMark(currentPhaseFiber,currentPhase,warning);}currentPhase=null;currentPhaseFiber=null;}}function startWorkLoopTimer(nextUnitOfWork){if(enableUserTimingAPI){currentFiber=nextUnitOfWork;if(!supportsUserTiming){return;}commitCountInCurrentWorkLoop=0;// This is top level call.\n// Any other measurements are performed within.\nbeginMark('(React Tree Reconciliation)');// Resume any measurements that were in progress during the last loop.\nresumeTimers();}}function stopWorkLoopTimer(interruptedBy,didCompleteRoot){if(enableUserTimingAPI){if(!supportsUserTiming){return;}var warning=null;if(interruptedBy!==null){if(interruptedBy.tag===HostRoot){warning='A top-level update interrupted the previous render';}else{var componentName=getComponentName(interruptedBy.type)||'Unknown';warning=\"An update to \"+componentName+\" interrupted the previous render\";}}else if(commitCountInCurrentWorkLoop>1){warning='There were cascading updates';}commitCountInCurrentWorkLoop=0;var label=didCompleteRoot?'(React Tree Reconciliation: Completed Root)':'(React Tree Reconciliation: Yielded)';// Pause any measurements until the next loop.\npauseTimers();endMark(label,'(React Tree Reconciliation)',warning);}}function startCommitTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}isCommitting=true;hasScheduledUpdateInCurrentCommit=false;labelsInCurrentCommit.clear();beginMark('(Committing Changes)');}}function stopCommitTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}var warning=null;if(hasScheduledUpdateInCurrentCommit){warning='Lifecycle hook scheduled a cascading update';}else if(commitCountInCurrentWorkLoop>0){warning='Caused by a cascading update in earlier commit';}hasScheduledUpdateInCurrentCommit=false;commitCountInCurrentWorkLoop++;isCommitting=false;labelsInCurrentCommit.clear();endMark('(Committing Changes)','(Committing Changes)',warning);}}function startCommitSnapshotEffectsTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}effectCountInCurrentCommit=0;beginMark('(Committing Snapshot Effects)');}}function stopCommitSnapshotEffectsTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}var count=effectCountInCurrentCommit;effectCountInCurrentCommit=0;endMark(\"(Committing Snapshot Effects: \"+count+\" Total)\",'(Committing Snapshot Effects)',null);}}function startCommitHostEffectsTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}effectCountInCurrentCommit=0;beginMark('(Committing Host Effects)');}}function stopCommitHostEffectsTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}var count=effectCountInCurrentCommit;effectCountInCurrentCommit=0;endMark(\"(Committing Host Effects: \"+count+\" Total)\",'(Committing Host Effects)',null);}}function startCommitLifeCyclesTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}effectCountInCurrentCommit=0;beginMark('(Calling Lifecycle Methods)');}}function stopCommitLifeCyclesTimer(){if(enableUserTimingAPI){if(!supportsUserTiming){return;}var count=effectCountInCurrentCommit;effectCountInCurrentCommit=0;endMark(\"(Calling Lifecycle Methods: \"+count+\" Total)\",'(Calling Lifecycle Methods)',null);}}var valueStack=[];var fiberStack;{fiberStack=[];}var index=-1;function createCursor(defaultValue){return{current:defaultValue};}function pop(cursor,fiber){if(index<0){{warningWithoutStack$1(false,'Unexpected pop.');}return;}{if(fiber!==fiberStack[index]){warningWithoutStack$1(false,'Unexpected Fiber popped.');}}cursor.current=valueStack[index];valueStack[index]=null;{fiberStack[index]=null;}index--;}function push(cursor,value,fiber){index++;valueStack[index]=cursor.current;{fiberStack[index]=fiber;}cursor.current=value;}var warnedAboutMissingGetChildContext;{warnedAboutMissingGetChildContext={};}var emptyContextObject={};{Object.freeze(emptyContextObject);}// A cursor to the current merged context object on the stack.\nvar contextStackCursor=createCursor(emptyContextObject);// A cursor to a boolean indicating whether the context has changed.\nvar didPerformWorkStackCursor=createCursor(false);// Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\nvar previousContext=emptyContextObject;function getUnmaskedContext(workInProgress,Component,didPushOwnContextIfProvider){if(disableLegacyContext){return emptyContextObject;}else{if(didPushOwnContextIfProvider&&isContextProvider(Component)){// If the fiber is a context provider itself, when we read its context\n// we may have already pushed its own child context on the stack. A context\n// provider should not \"see\" its own child context. Therefore we read the\n// previous (parent) context instead for a context provider.\nreturn previousContext;}return contextStackCursor.current;}}function cacheContext(workInProgress,unmaskedContext,maskedContext){if(disableLegacyContext){return;}else{var instance=workInProgress.stateNode;instance.__reactInternalMemoizedUnmaskedChildContext=unmaskedContext;instance.__reactInternalMemoizedMaskedChildContext=maskedContext;}}function getMaskedContext(workInProgress,unmaskedContext){if(disableLegacyContext){return emptyContextObject;}else{var type=workInProgress.type;var contextTypes=type.contextTypes;if(!contextTypes){return emptyContextObject;}// Avoid recreating masked context unless unmasked context has changed.\n// Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n// This may trigger infinite loops if componentWillReceiveProps calls setState.\nvar instance=workInProgress.stateNode;if(instance&&instance.__reactInternalMemoizedUnmaskedChildContext===unmaskedContext){return instance.__reactInternalMemoizedMaskedChildContext;}var context={};for(var key in contextTypes){context[key]=unmaskedContext[key];}{var name=getComponentName(type)||'Unknown';checkPropTypes(contextTypes,context,'context',name,getCurrentFiberStackInDev);}// Cache unmasked context so we can avoid recreating masked context unless necessary.\n// Context is created before the class component is instantiated so check for instance.\nif(instance){cacheContext(workInProgress,unmaskedContext,context);}return context;}}function hasContextChanged(){if(disableLegacyContext){return false;}else{return didPerformWorkStackCursor.current;}}function isContextProvider(type){if(disableLegacyContext){return false;}else{var childContextTypes=type.childContextTypes;return childContextTypes!==null&&childContextTypes!==undefined;}}function popContext(fiber){if(disableLegacyContext){return;}else{pop(didPerformWorkStackCursor,fiber);pop(contextStackCursor,fiber);}}function popTopLevelContextObject(fiber){if(disableLegacyContext){return;}else{pop(didPerformWorkStackCursor,fiber);pop(contextStackCursor,fiber);}}function pushTopLevelContextObject(fiber,context,didChange){if(disableLegacyContext){return;}else{if(!(contextStackCursor.current===emptyContextObject)){{throw Error(\"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\");}}push(contextStackCursor,context,fiber);push(didPerformWorkStackCursor,didChange,fiber);}}function processChildContext(fiber,type,parentContext){if(disableLegacyContext){return parentContext;}else{var instance=fiber.stateNode;var childContextTypes=type.childContextTypes;// TODO (bvaughn) Replace this behavior with an invariant() in the future.\n// It has only been added in Fiber to match the (unintentional) behavior in Stack.\nif(typeof instance.getChildContext!=='function'){{var componentName=getComponentName(type)||'Unknown';if(!warnedAboutMissingGetChildContext[componentName]){warnedAboutMissingGetChildContext[componentName]=true;warningWithoutStack$1(false,'%s.childContextTypes is specified but there is no getChildContext() method '+'on the instance. You can either define getChildContext() on %s or remove '+'childContextTypes from it.',componentName,componentName);}}return parentContext;}var childContext;{setCurrentPhase('getChildContext');}startPhaseTimer(fiber,'getChildContext');childContext=instance.getChildContext();stopPhaseTimer();{setCurrentPhase(null);}for(var contextKey in childContext){if(!(contextKey in childContextTypes)){{throw Error((getComponentName(type)||'Unknown')+\".getChildContext(): key \\\"\"+contextKey+\"\\\" is not defined in childContextTypes.\");}}}{var name=getComponentName(type)||'Unknown';checkPropTypes(childContextTypes,childContext,'child context',name,// In practice, there is one case in which we won't get a stack. It's when\n// somebody calls unstable_renderSubtreeIntoContainer() and we process\n// context from the parent component instance. The stack will be missing\n// because it's outside of the reconciliation, and so the pointer has not\n// been set. This is rare and doesn't matter. We'll also remove that API.\ngetCurrentFiberStackInDev);}return _assign({},parentContext,{},childContext);}}function pushContextProvider(workInProgress){if(disableLegacyContext){return false;}else{var instance=workInProgress.stateNode;// We push the context as early as possible to ensure stack integrity.\n// If the instance does not exist yet, we will push null at first,\n// and replace it on the stack later when invalidating the context.\nvar memoizedMergedChildContext=instance&&instance.__reactInternalMemoizedMergedChildContext||emptyContextObject;// Remember the parent context so we can merge with it later.\n// Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\npreviousContext=contextStackCursor.current;push(contextStackCursor,memoizedMergedChildContext,workInProgress);push(didPerformWorkStackCursor,didPerformWorkStackCursor.current,workInProgress);return true;}}function invalidateContextProvider(workInProgress,type,didChange){if(disableLegacyContext){return;}else{var instance=workInProgress.stateNode;if(!instance){{throw Error(\"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\");}}if(didChange){// Merge parent and own context.\n// Skip this if we're not updating due to sCU.\n// This avoids unnecessarily recomputing memoized values.\nvar mergedContext=processChildContext(workInProgress,type,previousContext);instance.__reactInternalMemoizedMergedChildContext=mergedContext;// Replace the old (or empty) context with the new one.\n// It is important to unwind the context in the reverse order.\npop(didPerformWorkStackCursor,workInProgress);pop(contextStackCursor,workInProgress);// Now push the new context and mark that it has changed.\npush(contextStackCursor,mergedContext,workInProgress);push(didPerformWorkStackCursor,didChange,workInProgress);}else{pop(didPerformWorkStackCursor,workInProgress);push(didPerformWorkStackCursor,didChange,workInProgress);}}}function findCurrentUnmaskedContext(fiber){if(disableLegacyContext){return emptyContextObject;}else{// Currently this is only used with renderSubtreeIntoContainer; not sure if it\n// makes sense elsewhere\nif(!(isFiberMounted(fiber)&&fiber.tag===ClassComponent)){{throw Error(\"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\");}}var node=fiber;do{switch(node.tag){case HostRoot:return node.stateNode.context;case ClassComponent:{var Component=node.type;if(isContextProvider(Component)){return node.stateNode.__reactInternalMemoizedMergedChildContext;}break;}}node=node[\"return\"];}while(node!==null);{{throw Error(\"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\");}}}}var LegacyRoot=0;var BlockingRoot=1;var ConcurrentRoot=2;// Intentionally not named imports because Rollup would use dynamic dispatch for\n// CommonJS interop named imports.\nvar Scheduler_runWithPriority=Scheduler.unstable_runWithPriority;var Scheduler_scheduleCallback=Scheduler.unstable_scheduleCallback;var Scheduler_cancelCallback=Scheduler.unstable_cancelCallback;var Scheduler_shouldYield=Scheduler.unstable_shouldYield;var Scheduler_requestPaint=Scheduler.unstable_requestPaint;var Scheduler_now=Scheduler.unstable_now;var Scheduler_getCurrentPriorityLevel=Scheduler.unstable_getCurrentPriorityLevel;var Scheduler_ImmediatePriority=Scheduler.unstable_ImmediatePriority;var Scheduler_UserBlockingPriority=Scheduler.unstable_UserBlockingPriority;var Scheduler_NormalPriority=Scheduler.unstable_NormalPriority;var Scheduler_LowPriority=Scheduler.unstable_LowPriority;var Scheduler_IdlePriority=Scheduler.unstable_IdlePriority;if(enableSchedulerTracing){// Provide explicit error message when production+profiling bundle of e.g.\n// react-dom is used with production (non-profiling) bundle of\n// scheduler/tracing\nif(!(tracing.__interactionsRef!=null&&tracing.__interactionsRef.current!=null)){{throw Error(\"It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling\");}}}var fakeCallbackNode={};// Except for NoPriority, these correspond to Scheduler priorities. We use\n// ascending numbers so we can compare them like numbers. They start at 90 to\n// avoid clashing with Scheduler's priorities.\nvar ImmediatePriority=99;var UserBlockingPriority$2=98;var NormalPriority=97;var LowPriority=96;var IdlePriority=95;// NoPriority is the absence of priority. Also React-only.\nvar NoPriority=90;var shouldYield=Scheduler_shouldYield;var requestPaint=// Fall back gracefully if we're running an older version of Scheduler.\nScheduler_requestPaint!==undefined?Scheduler_requestPaint:function(){};var syncQueue=null;var immediateQueueCallbackNode=null;var isFlushingSyncQueue=false;var initialTimeMs=Scheduler_now();// If the initial timestamp is reasonably small, use Scheduler's `now` directly.\n// This will be the case for modern browsers that support `performance.now`. In\n// older browsers, Scheduler falls back to `Date.now`, which returns a Unix\n// timestamp. In that case, subtract the module initialization time to simulate\n// the behavior of performance.now and keep our times small enough to fit\n// within 32 bits.\n// TODO: Consider lifting this into Scheduler.\nvar now=initialTimeMs<10000?Scheduler_now:function(){return Scheduler_now()-initialTimeMs;};function getCurrentPriorityLevel(){switch(Scheduler_getCurrentPriorityLevel()){case Scheduler_ImmediatePriority:return ImmediatePriority;case Scheduler_UserBlockingPriority:return UserBlockingPriority$2;case Scheduler_NormalPriority:return NormalPriority;case Scheduler_LowPriority:return LowPriority;case Scheduler_IdlePriority:return IdlePriority;default:{{throw Error(\"Unknown priority level.\");}}}}function reactPriorityToSchedulerPriority(reactPriorityLevel){switch(reactPriorityLevel){case ImmediatePriority:return Scheduler_ImmediatePriority;case UserBlockingPriority$2:return Scheduler_UserBlockingPriority;case NormalPriority:return Scheduler_NormalPriority;case LowPriority:return Scheduler_LowPriority;case IdlePriority:return Scheduler_IdlePriority;default:{{throw Error(\"Unknown priority level.\");}}}}function runWithPriority$2(reactPriorityLevel,fn){var priorityLevel=reactPriorityToSchedulerPriority(reactPriorityLevel);return Scheduler_runWithPriority(priorityLevel,fn);}function scheduleCallback(reactPriorityLevel,callback,options){var priorityLevel=reactPriorityToSchedulerPriority(reactPriorityLevel);return Scheduler_scheduleCallback(priorityLevel,callback,options);}function scheduleSyncCallback(callback){// Push this callback into an internal queue. We'll flush these either in\n// the next tick, or earlier if something calls `flushSyncCallbackQueue`.\nif(syncQueue===null){syncQueue=[callback];// Flush the queue in the next tick, at the earliest.\nimmediateQueueCallbackNode=Scheduler_scheduleCallback(Scheduler_ImmediatePriority,flushSyncCallbackQueueImpl);}else{// Push onto existing queue. Don't need to schedule a callback because\n// we already scheduled one when we created the queue.\nsyncQueue.push(callback);}return fakeCallbackNode;}function cancelCallback(callbackNode){if(callbackNode!==fakeCallbackNode){Scheduler_cancelCallback(callbackNode);}}function flushSyncCallbackQueue(){if(immediateQueueCallbackNode!==null){var node=immediateQueueCallbackNode;immediateQueueCallbackNode=null;Scheduler_cancelCallback(node);}flushSyncCallbackQueueImpl();}function flushSyncCallbackQueueImpl(){if(!isFlushingSyncQueue&&syncQueue!==null){// Prevent re-entrancy.\nisFlushingSyncQueue=true;var i=0;try{var _isSync=true;var queue=syncQueue;runWithPriority$2(ImmediatePriority,function(){for(;i<queue.length;i++){var callback=queue[i];do{callback=callback(_isSync);}while(callback!==null);}});syncQueue=null;}catch(error){// If something throws, leave the remaining callbacks on the queue.\nif(syncQueue!==null){syncQueue=syncQueue.slice(i+1);}// Resume flushing in the next tick\nScheduler_scheduleCallback(Scheduler_ImmediatePriority,flushSyncCallbackQueue);throw error;}finally{isFlushingSyncQueue=false;}}}var NoMode=0;var StrictMode=1;// TODO: Remove BlockingMode and ConcurrentMode by reading from the root\n// tag instead\nvar BlockingMode=2;var ConcurrentMode=4;var ProfileMode=8;// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar MAX_SIGNED_31_BIT_INT=1073741823;var NoWork=0;// TODO: Think of a better name for Never. The key difference with Idle is that\n// Never work can be committed in an inconsistent state without tearing the UI.\n// The main example is offscreen content, like a hidden subtree. So one possible\n// name is Offscreen. However, it also includes dehydrated Suspense boundaries,\n// which are inconsistent in the sense that they haven't finished yet, but\n// aren't visibly inconsistent because the server rendered HTML matches what the\n// hydrated tree would look like.\nvar Never=1;// Idle is slightly higher priority than Never. It must completely finish in\n// order to be consistent.\nvar Idle=2;// Continuous Hydration is a moving priority. It is slightly higher than Idle\n// and is used to increase priority of hover targets. It is increasing with\n// each usage so that last always wins.\nvar ContinuousHydration=3;var Sync=MAX_SIGNED_31_BIT_INT;var Batched=Sync-1;var UNIT_SIZE=10;var MAGIC_NUMBER_OFFSET=Batched-1;// 1 unit of expiration time represents 10ms.\nfunction msToExpirationTime(ms){// Always add an offset so that we don't clash with the magic number for NoWork.\nreturn MAGIC_NUMBER_OFFSET-(ms/UNIT_SIZE|0);}function expirationTimeToMs(expirationTime){return(MAGIC_NUMBER_OFFSET-expirationTime)*UNIT_SIZE;}function ceiling(num,precision){return((num/precision|0)+1)*precision;}function computeExpirationBucket(currentTime,expirationInMs,bucketSizeMs){return MAGIC_NUMBER_OFFSET-ceiling(MAGIC_NUMBER_OFFSET-currentTime+expirationInMs/UNIT_SIZE,bucketSizeMs/UNIT_SIZE);}// TODO: This corresponds to Scheduler's NormalPriority, not LowPriority. Update\n// the names to reflect.\nvar LOW_PRIORITY_EXPIRATION=5000;var LOW_PRIORITY_BATCH_SIZE=250;function computeAsyncExpiration(currentTime){return computeExpirationBucket(currentTime,LOW_PRIORITY_EXPIRATION,LOW_PRIORITY_BATCH_SIZE);}function computeSuspenseExpiration(currentTime,timeoutMs){// TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?\nreturn computeExpirationBucket(currentTime,timeoutMs,LOW_PRIORITY_BATCH_SIZE);}// We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\nvar HIGH_PRIORITY_EXPIRATION=500;var HIGH_PRIORITY_BATCH_SIZE=100;function computeInteractiveExpiration(currentTime){return computeExpirationBucket(currentTime,HIGH_PRIORITY_EXPIRATION,HIGH_PRIORITY_BATCH_SIZE);}function computeContinuousHydrationExpiration(currentTime){// Each time we ask for a new one of these we increase the priority.\n// This ensures that the last one always wins since we can't deprioritize\n// once we've scheduled work already.\nreturn ContinuousHydration++;}function inferPriorityFromExpirationTime(currentTime,expirationTime){if(expirationTime===Sync){return ImmediatePriority;}if(expirationTime===Never||expirationTime===Idle){return IdlePriority;}var msUntil=expirationTimeToMs(expirationTime)-expirationTimeToMs(currentTime);if(msUntil<=0){return ImmediatePriority;}if(msUntil<=HIGH_PRIORITY_EXPIRATION+HIGH_PRIORITY_BATCH_SIZE){return UserBlockingPriority$2;}if(msUntil<=LOW_PRIORITY_EXPIRATION+LOW_PRIORITY_BATCH_SIZE){return NormalPriority;}// TODO: Handle LowPriority\n// Assume anything lower has idle priority\nreturn IdlePriority;}/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */var lowPriorityWarningWithoutStack=function lowPriorityWarningWithoutStack(){};{var printWarning=function printWarning(format){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}var argIndex=0;var message='Warning: '+format.replace(/%s/g,function(){return args[argIndex++];});if(typeof console!=='undefined'){console.warn(message);}try{// --- Welcome to debugging React ---\n// This error was thrown as a convenience so that you can use this stack\n// to find the callsite that caused this warning to fire.\nthrow new Error(message);}catch(x){}};lowPriorityWarningWithoutStack=function lowPriorityWarningWithoutStack(condition,format){if(format===undefined){throw new Error('`lowPriorityWarningWithoutStack(condition, format, ...args)` requires a warning '+'message argument');}if(!condition){for(var _len2=arguments.length,args=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++){args[_key2-2]=arguments[_key2];}printWarning.apply(void 0,[format].concat(args));}};}var lowPriorityWarningWithoutStack$1=lowPriorityWarningWithoutStack;var ReactStrictModeWarnings={recordUnsafeLifecycleWarnings:function recordUnsafeLifecycleWarnings(fiber,instance){},flushPendingUnsafeLifecycleWarnings:function flushPendingUnsafeLifecycleWarnings(){},recordLegacyContextWarning:function recordLegacyContextWarning(fiber,instance){},flushLegacyContextWarning:function flushLegacyContextWarning(){},discardPendingWarnings:function discardPendingWarnings(){}};{var findStrictRoot=function findStrictRoot(fiber){var maybeStrictRoot=null;var node=fiber;while(node!==null){if(node.mode&StrictMode){maybeStrictRoot=node;}node=node[\"return\"];}return maybeStrictRoot;};var setToSortedString=function setToSortedString(set){var array=[];set.forEach(function(value){array.push(value);});return array.sort().join(', ');};var pendingComponentWillMountWarnings=[];var pendingUNSAFE_ComponentWillMountWarnings=[];var pendingComponentWillReceivePropsWarnings=[];var pendingUNSAFE_ComponentWillReceivePropsWarnings=[];var pendingComponentWillUpdateWarnings=[];var pendingUNSAFE_ComponentWillUpdateWarnings=[];// Tracks components we have already warned about.\nvar didWarnAboutUnsafeLifecycles=new Set();ReactStrictModeWarnings.recordUnsafeLifecycleWarnings=function(fiber,instance){// Dedup strategy: Warn once per component.\nif(didWarnAboutUnsafeLifecycles.has(fiber.type)){return;}if(typeof instance.componentWillMount==='function'&&// Don't warn about react-lifecycles-compat polyfilled components.\ninstance.componentWillMount.__suppressDeprecationWarning!==true){pendingComponentWillMountWarnings.push(fiber);}if(fiber.mode&StrictMode&&typeof instance.UNSAFE_componentWillMount==='function'){pendingUNSAFE_ComponentWillMountWarnings.push(fiber);}if(typeof instance.componentWillReceiveProps==='function'&&instance.componentWillReceiveProps.__suppressDeprecationWarning!==true){pendingComponentWillReceivePropsWarnings.push(fiber);}if(fiber.mode&StrictMode&&typeof instance.UNSAFE_componentWillReceiveProps==='function'){pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);}if(typeof instance.componentWillUpdate==='function'&&instance.componentWillUpdate.__suppressDeprecationWarning!==true){pendingComponentWillUpdateWarnings.push(fiber);}if(fiber.mode&StrictMode&&typeof instance.UNSAFE_componentWillUpdate==='function'){pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);}};ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings=function(){// We do an initial pass to gather component names\nvar componentWillMountUniqueNames=new Set();if(pendingComponentWillMountWarnings.length>0){pendingComponentWillMountWarnings.forEach(function(fiber){componentWillMountUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingComponentWillMountWarnings=[];}var UNSAFE_componentWillMountUniqueNames=new Set();if(pendingUNSAFE_ComponentWillMountWarnings.length>0){pendingUNSAFE_ComponentWillMountWarnings.forEach(function(fiber){UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingUNSAFE_ComponentWillMountWarnings=[];}var componentWillReceivePropsUniqueNames=new Set();if(pendingComponentWillReceivePropsWarnings.length>0){pendingComponentWillReceivePropsWarnings.forEach(function(fiber){componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingComponentWillReceivePropsWarnings=[];}var UNSAFE_componentWillReceivePropsUniqueNames=new Set();if(pendingUNSAFE_ComponentWillReceivePropsWarnings.length>0){pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function(fiber){UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingUNSAFE_ComponentWillReceivePropsWarnings=[];}var componentWillUpdateUniqueNames=new Set();if(pendingComponentWillUpdateWarnings.length>0){pendingComponentWillUpdateWarnings.forEach(function(fiber){componentWillUpdateUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingComponentWillUpdateWarnings=[];}var UNSAFE_componentWillUpdateUniqueNames=new Set();if(pendingUNSAFE_ComponentWillUpdateWarnings.length>0){pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function(fiber){UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutUnsafeLifecycles.add(fiber.type);});pendingUNSAFE_ComponentWillUpdateWarnings=[];}// Finally, we flush all the warnings\n// UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\nif(UNSAFE_componentWillMountUniqueNames.size>0){var sortedNames=setToSortedString(UNSAFE_componentWillMountUniqueNames);warningWithoutStack$1(false,'Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n'+'\\nPlease update the following components: %s',sortedNames);}if(UNSAFE_componentWillReceivePropsUniqueNames.size>0){var _sortedNames=setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);warningWithoutStack$1(false,'Using UNSAFE_componentWillReceiveProps in strict mode is not recommended '+'and may indicate bugs in your code. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move data fetching code or side effects to componentDidUpdate.\\n'+\"* If you're updating state whenever props change, \"+'refactor your code to use memoization techniques or move it to '+'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n'+'\\nPlease update the following components: %s',_sortedNames);}if(UNSAFE_componentWillUpdateUniqueNames.size>0){var _sortedNames2=setToSortedString(UNSAFE_componentWillUpdateUniqueNames);warningWithoutStack$1(false,'Using UNSAFE_componentWillUpdate in strict mode is not recommended '+'and may indicate bugs in your code. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move data fetching code or side effects to componentDidUpdate.\\n'+'\\nPlease update the following components: %s',_sortedNames2);}if(componentWillMountUniqueNames.size>0){var _sortedNames3=setToSortedString(componentWillMountUniqueNames);lowPriorityWarningWithoutStack$1(false,'componentWillMount has been renamed, and is not recommended for use. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n'+'* Rename componentWillMount to UNSAFE_componentWillMount to suppress '+'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. '+'To rename all deprecated lifecycles to their new names, you can run '+'`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n'+'\\nPlease update the following components: %s',_sortedNames3);}if(componentWillReceivePropsUniqueNames.size>0){var _sortedNames4=setToSortedString(componentWillReceivePropsUniqueNames);lowPriorityWarningWithoutStack$1(false,'componentWillReceiveProps has been renamed, and is not recommended for use. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move data fetching code or side effects to componentDidUpdate.\\n'+\"* If you're updating state whenever props change, refactor your \"+'code to use memoization techniques or move it to '+'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n'+'* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress '+'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. '+'To rename all deprecated lifecycles to their new names, you can run '+'`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n'+'\\nPlease update the following components: %s',_sortedNames4);}if(componentWillUpdateUniqueNames.size>0){var _sortedNames5=setToSortedString(componentWillUpdateUniqueNames);lowPriorityWarningWithoutStack$1(false,'componentWillUpdate has been renamed, and is not recommended for use. '+'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n'+'* Move data fetching code or side effects to componentDidUpdate.\\n'+'* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress '+'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. '+'To rename all deprecated lifecycles to their new names, you can run '+'`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n'+'\\nPlease update the following components: %s',_sortedNames5);}};var pendingLegacyContextWarning=new Map();// Tracks components we have already warned about.\nvar didWarnAboutLegacyContext=new Set();ReactStrictModeWarnings.recordLegacyContextWarning=function(fiber,instance){var strictRoot=findStrictRoot(fiber);if(strictRoot===null){warningWithoutStack$1(false,'Expected to find a StrictMode component in a strict mode tree. '+'This error is likely caused by a bug in React. Please file an issue.');return;}// Dedup strategy: Warn once per component.\nif(didWarnAboutLegacyContext.has(fiber.type)){return;}var warningsForRoot=pendingLegacyContextWarning.get(strictRoot);if(fiber.type.contextTypes!=null||fiber.type.childContextTypes!=null||instance!==null&&typeof instance.getChildContext==='function'){if(warningsForRoot===undefined){warningsForRoot=[];pendingLegacyContextWarning.set(strictRoot,warningsForRoot);}warningsForRoot.push(fiber);}};ReactStrictModeWarnings.flushLegacyContextWarning=function(){pendingLegacyContextWarning.forEach(function(fiberArray,strictRoot){var uniqueNames=new Set();fiberArray.forEach(function(fiber){uniqueNames.add(getComponentName(fiber.type)||'Component');didWarnAboutLegacyContext.add(fiber.type);});var sortedNames=setToSortedString(uniqueNames);var strictRootComponentStack=getStackByFiberInDevAndProd(strictRoot);warningWithoutStack$1(false,'Legacy context API has been detected within a strict-mode tree.'+'\\n\\nThe old API will be supported in all 16.x releases, but applications '+'using it should migrate to the new version.'+'\\n\\nPlease update the following components: %s'+'\\n\\nLearn more about this warning here: https://fb.me/react-legacy-context'+'%s',sortedNames,strictRootComponentStack);});};ReactStrictModeWarnings.discardPendingWarnings=function(){pendingComponentWillMountWarnings=[];pendingUNSAFE_ComponentWillMountWarnings=[];pendingComponentWillReceivePropsWarnings=[];pendingUNSAFE_ComponentWillReceivePropsWarnings=[];pendingComponentWillUpdateWarnings=[];pendingUNSAFE_ComponentWillUpdateWarnings=[];pendingLegacyContextWarning=new Map();};}var resolveFamily=null;// $FlowFixMe Flow gets confused by a WeakSet feature check below.\nvar failedBoundaries=null;var setRefreshHandler=function setRefreshHandler(handler){{resolveFamily=handler;}};function resolveFunctionForHotReloading(type){{if(resolveFamily===null){// Hot reloading is disabled.\nreturn type;}var family=resolveFamily(type);if(family===undefined){return type;}// Use the latest known implementation.\nreturn family.current;}}function resolveClassForHotReloading(type){// No implementation differences.\nreturn resolveFunctionForHotReloading(type);}function resolveForwardRefForHotReloading(type){{if(resolveFamily===null){// Hot reloading is disabled.\nreturn type;}var family=resolveFamily(type);if(family===undefined){// Check if we're dealing with a real forwardRef. Don't want to crash early.\nif(type!==null&&type!==undefined&&typeof type.render==='function'){// ForwardRef is special because its resolved .type is an object,\n// but it's possible that we only have its inner render function in the map.\n// If that inner render function is different, we'll build a new forwardRef type.\nvar currentRender=resolveFunctionForHotReloading(type.render);if(type.render!==currentRender){var syntheticType={$$typeof:REACT_FORWARD_REF_TYPE,render:currentRender};if(type.displayName!==undefined){syntheticType.displayName=type.displayName;}return syntheticType;}}return type;}// Use the latest known implementation.\nreturn family.current;}}function isCompatibleFamilyForHotReloading(fiber,element){{if(resolveFamily===null){// Hot reloading is disabled.\nreturn false;}var prevType=fiber.elementType;var nextType=element.type;// If we got here, we know types aren't === equal.\nvar needsCompareFamilies=false;var $$typeofNextType=_typeof(nextType)==='object'&&nextType!==null?nextType.$$typeof:null;switch(fiber.tag){case ClassComponent:{if(typeof nextType==='function'){needsCompareFamilies=true;}break;}case FunctionComponent:{if(typeof nextType==='function'){needsCompareFamilies=true;}else if($$typeofNextType===REACT_LAZY_TYPE){// We don't know the inner type yet.\n// We're going to assume that the lazy inner type is stable,\n// and so it is sufficient to avoid reconciling it away.\n// We're not going to unwrap or actually use the new lazy type.\nneedsCompareFamilies=true;}break;}case ForwardRef:{if($$typeofNextType===REACT_FORWARD_REF_TYPE){needsCompareFamilies=true;}else if($$typeofNextType===REACT_LAZY_TYPE){needsCompareFamilies=true;}break;}case MemoComponent:case SimpleMemoComponent:{if($$typeofNextType===REACT_MEMO_TYPE){// TODO: if it was but can no longer be simple,\n// we shouldn't set this.\nneedsCompareFamilies=true;}else if($$typeofNextType===REACT_LAZY_TYPE){needsCompareFamilies=true;}break;}default:return false;}// Check if both types have a family and it's the same one.\nif(needsCompareFamilies){// Note: memo() and forwardRef() we'll compare outer rather than inner type.\n// This means both of them need to be registered to preserve state.\n// If we unwrapped and compared the inner types for wrappers instead,\n// then we would risk falsely saying two separate memo(Foo)\n// calls are equivalent because they wrap the same Foo function.\nvar prevFamily=resolveFamily(prevType);if(prevFamily!==undefined&&prevFamily===resolveFamily(nextType)){return true;}}return false;}}function markFailedErrorBoundaryForHotReloading(fiber){{if(resolveFamily===null){// Hot reloading is disabled.\nreturn;}if(typeof WeakSet!=='function'){return;}if(failedBoundaries===null){failedBoundaries=new WeakSet();}failedBoundaries.add(fiber);}}var scheduleRefresh=function scheduleRefresh(root,update){{if(resolveFamily===null){// Hot reloading is disabled.\nreturn;}var staleFamilies=update.staleFamilies,updatedFamilies=update.updatedFamilies;flushPassiveEffects();flushSync(function(){scheduleFibersWithFamiliesRecursively(root.current,updatedFamilies,staleFamilies);});}};var scheduleRoot=function scheduleRoot(root,element){{if(root.context!==emptyContextObject){// Super edge case: root has a legacy _renderSubtree context\n// but we don't know the parentComponent so we can't pass it.\n// Just ignore. We'll delete this with _renderSubtree code path later.\nreturn;}flushPassiveEffects();syncUpdates(function(){updateContainer(element,root,null,null);});}};function scheduleFibersWithFamiliesRecursively(fiber,updatedFamilies,staleFamilies){{var alternate=fiber.alternate,child=fiber.child,sibling=fiber.sibling,tag=fiber.tag,type=fiber.type;var candidateType=null;switch(tag){case FunctionComponent:case SimpleMemoComponent:case ClassComponent:candidateType=type;break;case ForwardRef:candidateType=type.render;break;default:break;}if(resolveFamily===null){throw new Error('Expected resolveFamily to be set during hot reload.');}var needsRender=false;var needsRemount=false;if(candidateType!==null){var family=resolveFamily(candidateType);if(family!==undefined){if(staleFamilies.has(family)){needsRemount=true;}else if(updatedFamilies.has(family)){if(tag===ClassComponent){needsRemount=true;}else{needsRender=true;}}}}if(failedBoundaries!==null){if(failedBoundaries.has(fiber)||alternate!==null&&failedBoundaries.has(alternate)){needsRemount=true;}}if(needsRemount){fiber._debugNeedsRemount=true;}if(needsRemount||needsRender){scheduleWork(fiber,Sync);}if(child!==null&&!needsRemount){scheduleFibersWithFamiliesRecursively(child,updatedFamilies,staleFamilies);}if(sibling!==null){scheduleFibersWithFamiliesRecursively(sibling,updatedFamilies,staleFamilies);}}}var findHostInstancesForRefresh=function findHostInstancesForRefresh(root,families){{var hostInstances=new Set();var types=new Set(families.map(function(family){return family.current;}));findHostInstancesForMatchingFibersRecursively(root.current,types,hostInstances);return hostInstances;}};function findHostInstancesForMatchingFibersRecursively(fiber,types,hostInstances){{var child=fiber.child,sibling=fiber.sibling,tag=fiber.tag,type=fiber.type;var candidateType=null;switch(tag){case FunctionComponent:case SimpleMemoComponent:case ClassComponent:candidateType=type;break;case ForwardRef:candidateType=type.render;break;default:break;}var didMatch=false;if(candidateType!==null){if(types.has(candidateType)){didMatch=true;}}if(didMatch){// We have a match. This only drills down to the closest host components.\n// There's no need to search deeper because for the purpose of giving\n// visual feedback, \"flashing\" outermost parent rectangles is sufficient.\nfindHostInstancesForFiberShallowly(fiber,hostInstances);}else{// If there's no match, maybe there will be one further down in the child tree.\nif(child!==null){findHostInstancesForMatchingFibersRecursively(child,types,hostInstances);}}if(sibling!==null){findHostInstancesForMatchingFibersRecursively(sibling,types,hostInstances);}}}function findHostInstancesForFiberShallowly(fiber,hostInstances){{var foundHostInstances=findChildHostInstancesForFiberShallowly(fiber,hostInstances);if(foundHostInstances){return;}// If we didn't find any host children, fallback to closest host parent.\nvar node=fiber;while(true){switch(node.tag){case HostComponent:hostInstances.add(node.stateNode);return;case HostPortal:hostInstances.add(node.stateNode.containerInfo);return;case HostRoot:hostInstances.add(node.stateNode.containerInfo);return;}if(node[\"return\"]===null){throw new Error('Expected to reach root first.');}node=node[\"return\"];}}}function findChildHostInstancesForFiberShallowly(fiber,hostInstances){{var node=fiber;var foundHostInstances=false;while(true){if(node.tag===HostComponent){// We got a match.\nfoundHostInstances=true;hostInstances.add(node.stateNode);// There may still be more, so keep searching.\n}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===fiber){return foundHostInstances;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===fiber){return foundHostInstances;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}return false;}function resolveDefaultProps(Component,baseProps){if(Component&&Component.defaultProps){// Resolve default props. Taken from ReactElement\nvar props=_assign({},baseProps);var defaultProps=Component.defaultProps;for(var propName in defaultProps){if(props[propName]===undefined){props[propName]=defaultProps[propName];}}return props;}return baseProps;}function readLazyComponentType(lazyComponent){initializeLazyComponentType(lazyComponent);if(lazyComponent._status!==Resolved){throw lazyComponent._result;}return lazyComponent._result;}var valueCursor=createCursor(null);var rendererSigil;{// Use this to detect multiple renderers using the same context\nrendererSigil={};}var currentlyRenderingFiber=null;var lastContextDependency=null;var lastContextWithAllBitsObserved=null;var isDisallowedContextReadInDEV=false;function resetContextDependencies(){// This is called right before React yields execution, to ensure `readContext`\n// cannot be called outside the render phase.\ncurrentlyRenderingFiber=null;lastContextDependency=null;lastContextWithAllBitsObserved=null;{isDisallowedContextReadInDEV=false;}}function enterDisallowedContextReadInDEV(){{isDisallowedContextReadInDEV=true;}}function exitDisallowedContextReadInDEV(){{isDisallowedContextReadInDEV=false;}}function pushProvider(providerFiber,nextValue){var context=providerFiber.type._context;if(isPrimaryRenderer){push(valueCursor,context._currentValue,providerFiber);context._currentValue=nextValue;{!(context._currentRenderer===undefined||context._currentRenderer===null||context._currentRenderer===rendererSigil)?warningWithoutStack$1(false,'Detected multiple renderers concurrently rendering the '+'same context provider. This is currently unsupported.'):void 0;context._currentRenderer=rendererSigil;}}else{push(valueCursor,context._currentValue2,providerFiber);context._currentValue2=nextValue;{!(context._currentRenderer2===undefined||context._currentRenderer2===null||context._currentRenderer2===rendererSigil)?warningWithoutStack$1(false,'Detected multiple renderers concurrently rendering the '+'same context provider. This is currently unsupported.'):void 0;context._currentRenderer2=rendererSigil;}}}function popProvider(providerFiber){var currentValue=valueCursor.current;pop(valueCursor,providerFiber);var context=providerFiber.type._context;if(isPrimaryRenderer){context._currentValue=currentValue;}else{context._currentValue2=currentValue;}}function calculateChangedBits(context,newValue,oldValue){if(is$1(oldValue,newValue)){// No change\nreturn 0;}else{var changedBits=typeof context._calculateChangedBits==='function'?context._calculateChangedBits(oldValue,newValue):MAX_SIGNED_31_BIT_INT;{!((changedBits&MAX_SIGNED_31_BIT_INT)===changedBits)?warning$1(false,'calculateChangedBits: Expected the return value to be a '+'31-bit integer. Instead received: %s',changedBits):void 0;}return changedBits|0;}}function scheduleWorkOnParentPath(parent,renderExpirationTime){// Update the child expiration time of all the ancestors, including\n// the alternates.\nvar node=parent;while(node!==null){var alternate=node.alternate;if(node.childExpirationTime<renderExpirationTime){node.childExpirationTime=renderExpirationTime;if(alternate!==null&&alternate.childExpirationTime<renderExpirationTime){alternate.childExpirationTime=renderExpirationTime;}}else if(alternate!==null&&alternate.childExpirationTime<renderExpirationTime){alternate.childExpirationTime=renderExpirationTime;}else{// Neither alternate was updated, which means the rest of the\n// ancestor path already has sufficient priority.\nbreak;}node=node[\"return\"];}}function propagateContextChange(workInProgress,context,changedBits,renderExpirationTime){var fiber=workInProgress.child;if(fiber!==null){// Set the return pointer of the child to the work-in-progress fiber.\nfiber[\"return\"]=workInProgress;}while(fiber!==null){var nextFiber=void 0;// Visit this fiber.\nvar list=fiber.dependencies;if(list!==null){nextFiber=fiber.child;var dependency=list.firstContext;while(dependency!==null){// Check if the context matches.\nif(dependency.context===context&&(dependency.observedBits&changedBits)!==0){// Match! Schedule an update on this fiber.\nif(fiber.tag===ClassComponent){// Schedule a force update on the work-in-progress.\nvar update=createUpdate(renderExpirationTime,null);update.tag=ForceUpdate;// TODO: Because we don't have a work-in-progress, this will add the\n// update to the current fiber, too, which means it will persist even if\n// this render is thrown away. Since it's a race condition, not sure it's\n// worth fixing.\nenqueueUpdate(fiber,update);}if(fiber.expirationTime<renderExpirationTime){fiber.expirationTime=renderExpirationTime;}var alternate=fiber.alternate;if(alternate!==null&&alternate.expirationTime<renderExpirationTime){alternate.expirationTime=renderExpirationTime;}scheduleWorkOnParentPath(fiber[\"return\"],renderExpirationTime);// Mark the expiration time on the list, too.\nif(list.expirationTime<renderExpirationTime){list.expirationTime=renderExpirationTime;}// Since we already found a match, we can stop traversing the\n// dependency list.\nbreak;}dependency=dependency.next;}}else if(fiber.tag===ContextProvider){// Don't scan deeper if this is a matching provider\nnextFiber=fiber.type===workInProgress.type?null:fiber.child;}else if(enableSuspenseServerRenderer&&fiber.tag===DehydratedFragment){// If a dehydrated suspense bounudary is in this subtree, we don't know\n// if it will have any context consumers in it. The best we can do is\n// mark it as having updates.\nvar parentSuspense=fiber[\"return\"];if(!(parentSuspense!==null)){{throw Error(\"We just came from a parent so we must have had a parent. This is a bug in React.\");}}if(parentSuspense.expirationTime<renderExpirationTime){parentSuspense.expirationTime=renderExpirationTime;}var _alternate=parentSuspense.alternate;if(_alternate!==null&&_alternate.expirationTime<renderExpirationTime){_alternate.expirationTime=renderExpirationTime;}// This is intentionally passing this fiber as the parent\n// because we want to schedule this fiber as having work\n// on its children. We'll use the childExpirationTime on\n// this fiber to indicate that a context has changed.\nscheduleWorkOnParentPath(parentSuspense,renderExpirationTime);nextFiber=fiber.sibling;}else{// Traverse down.\nnextFiber=fiber.child;}if(nextFiber!==null){// Set the return pointer of the child to the work-in-progress fiber.\nnextFiber[\"return\"]=fiber;}else{// No child. Traverse to next sibling.\nnextFiber=fiber;while(nextFiber!==null){if(nextFiber===workInProgress){// We're back to the root of this subtree. Exit.\nnextFiber=null;break;}var sibling=nextFiber.sibling;if(sibling!==null){// Set the return pointer of the sibling to the work-in-progress fiber.\nsibling[\"return\"]=nextFiber[\"return\"];nextFiber=sibling;break;}// No more siblings. Traverse up.\nnextFiber=nextFiber[\"return\"];}}fiber=nextFiber;}}function prepareToReadContext(workInProgress,renderExpirationTime){currentlyRenderingFiber=workInProgress;lastContextDependency=null;lastContextWithAllBitsObserved=null;var dependencies=workInProgress.dependencies;if(dependencies!==null){var firstContext=dependencies.firstContext;if(firstContext!==null){if(dependencies.expirationTime>=renderExpirationTime){// Context list has a pending update. Mark that this fiber performed work.\nmarkWorkInProgressReceivedUpdate();}// Reset the work-in-progress list\ndependencies.firstContext=null;}}}function _readContext(context,observedBits){{// This warning would fire if you read context inside a Hook like useMemo.\n// Unlike the class check below, it's not enforced in production for perf.\n!!isDisallowedContextReadInDEV?warning$1(false,'Context can only be read while React is rendering. '+'In classes, you can read it in the render method or getDerivedStateFromProps. '+'In function components, you can read it directly in the function body, but not '+'inside Hooks like useReducer() or useMemo().'):void 0;}if(lastContextWithAllBitsObserved===context){// Nothing to do. We already observe everything in this context.\n}else if(observedBits===false||observedBits===0){// Do not observe any updates.\n}else{var resolvedObservedBits;// Avoid deopting on observable arguments or heterogeneous types.\nif(typeof observedBits!=='number'||observedBits===MAX_SIGNED_31_BIT_INT){// Observe all updates.\nlastContextWithAllBitsObserved=context;resolvedObservedBits=MAX_SIGNED_31_BIT_INT;}else{resolvedObservedBits=observedBits;}var contextItem={context:context,observedBits:resolvedObservedBits,next:null};if(lastContextDependency===null){if(!(currentlyRenderingFiber!==null)){{throw Error(\"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\");}}// This is the first dependency for this component. Create a new list.\nlastContextDependency=contextItem;currentlyRenderingFiber.dependencies={expirationTime:NoWork,firstContext:contextItem,responders:null};}else{// Append a new context item.\nlastContextDependency=lastContextDependency.next=contextItem;}}return isPrimaryRenderer?context._currentValue:context._currentValue2;}// UpdateQueue is a linked list of prioritized updates.\n//\n// Like fibers, update queues come in pairs: a current queue, which represents\n// the visible state of the screen, and a work-in-progress queue, which can be\n// mutated and processed asynchronously before it is committed — a form of\n// double buffering. If a work-in-progress render is discarded before finishing,\n// we create a new work-in-progress by cloning the current queue.\n//\n// Both queues share a persistent, singly-linked list structure. To schedule an\n// update, we append it to the end of both queues. Each queue maintains a\n// pointer to first update in the persistent list that hasn't been processed.\n// The work-in-progress pointer always has a position equal to or greater than\n// the current queue, since we always work on that one. The current queue's\n// pointer is only updated during the commit phase, when we swap in the\n// work-in-progress.\n//\n// For example:\n//\n// Current pointer: A - B - C - D - E - F\n// Work-in-progress pointer: D - E - F\n// ^\n// The work-in-progress queue has\n// processed more updates than current.\n//\n// The reason we append to both queues is because otherwise we might drop\n// updates without ever processing them. For example, if we only add updates to\n// the work-in-progress queue, some updates could be lost whenever a work-in\n// -progress render restarts by cloning from current. Similarly, if we only add\n// updates to the current queue, the updates will be lost whenever an already\n// in-progress queue commits and swaps with the current queue. However, by\n// adding to both queues, we guarantee that the update will be part of the next\n// work-in-progress. (And because the work-in-progress queue becomes the\n// current queue once it commits, there's no danger of applying the same\n// update twice.)\n//\n// Prioritization\n// --------------\n//\n// Updates are not sorted by priority, but by insertion; new updates are always\n// appended to the end of the list.\n//\n// The priority is still important, though. When processing the update queue\n// during the render phase, only the updates with sufficient priority are\n// included in the result. If we skip an update because it has insufficient\n// priority, it remains in the queue to be processed later, during a lower\n// priority render. Crucially, all updates subsequent to a skipped update also\n// remain in the queue *regardless of their priority*. That means high priority\n// updates are sometimes processed twice, at two separate priorities. We also\n// keep track of a base state, that represents the state before the first\n// update in the queue is applied.\n//\n// For example:\n//\n// Given a base state of '', and the following queue of updates\n//\n// A1 - B2 - C1 - D2\n//\n// where the number indicates the priority, and the update is applied to the\n// previous state by appending a letter, React will process these updates as\n// two separate renders, one per distinct priority level:\n//\n// First render, at priority 1:\n// Base state: ''\n// Updates: [A1, C1]\n// Result state: 'AC'\n//\n// Second render, at priority 2:\n// Base state: 'A' <- The base state does not include C1,\n// because B2 was skipped.\n// Updates: [B2, C1, D2] <- C1 was rebased on top of B2\n// Result state: 'ABCD'\n//\n// Because we process updates in insertion order, and rebase high priority\n// updates when preceding updates are skipped, the final result is deterministic\n// regardless of priority. Intermediate state may vary according to system\n// resources, but the final state is always the same.\nvar UpdateState=0;var ReplaceState=1;var ForceUpdate=2;var CaptureUpdate=3;// Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\nvar hasForceUpdate=false;var didWarnUpdateInsideUpdate;var currentlyProcessingQueue;{didWarnUpdateInsideUpdate=false;currentlyProcessingQueue=null;}function createUpdateQueue(baseState){var queue={baseState:baseState,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return queue;}function cloneUpdateQueue(currentQueue){var queue={baseState:currentQueue.baseState,firstUpdate:currentQueue.firstUpdate,lastUpdate:currentQueue.lastUpdate,// TODO: With resuming, if we bail out and resuse the child tree, we should\n// keep these effects.\nfirstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return queue;}function createUpdate(expirationTime,suspenseConfig){var update={expirationTime:expirationTime,suspenseConfig:suspenseConfig,tag:UpdateState,payload:null,callback:null,next:null,nextEffect:null};{update.priority=getCurrentPriorityLevel();}return update;}function appendUpdateToQueue(queue,update){// Append the update to the end of the list.\nif(queue.lastUpdate===null){// Queue is empty\nqueue.firstUpdate=queue.lastUpdate=update;}else{queue.lastUpdate.next=update;queue.lastUpdate=update;}}function enqueueUpdate(fiber,update){// Update queues are created lazily.\nvar alternate=fiber.alternate;var queue1;var queue2;if(alternate===null){// There's only one fiber.\nqueue1=fiber.updateQueue;queue2=null;if(queue1===null){queue1=fiber.updateQueue=createUpdateQueue(fiber.memoizedState);}}else{// There are two owners.\nqueue1=fiber.updateQueue;queue2=alternate.updateQueue;if(queue1===null){if(queue2===null){// Neither fiber has an update queue. Create new ones.\nqueue1=fiber.updateQueue=createUpdateQueue(fiber.memoizedState);queue2=alternate.updateQueue=createUpdateQueue(alternate.memoizedState);}else{// Only one fiber has an update queue. Clone to create a new one.\nqueue1=fiber.updateQueue=cloneUpdateQueue(queue2);}}else{if(queue2===null){// Only one fiber has an update queue. Clone to create a new one.\nqueue2=alternate.updateQueue=cloneUpdateQueue(queue1);}else{// Both owners have an update queue.\n}}}if(queue2===null||queue1===queue2){// There's only a single queue.\nappendUpdateToQueue(queue1,update);}else{// There are two queues. We need to append the update to both queues,\n// while accounting for the persistent structure of the list — we don't\n// want the same update to be added multiple times.\nif(queue1.lastUpdate===null||queue2.lastUpdate===null){// One of the queues is not empty. We must add the update to both queues.\nappendUpdateToQueue(queue1,update);appendUpdateToQueue(queue2,update);}else{// Both queues are non-empty. The last update is the same in both lists,\n// because of structural sharing. So, only append to one of the lists.\nappendUpdateToQueue(queue1,update);// But we still need to update the `lastUpdate` pointer of queue2.\nqueue2.lastUpdate=update;}}{if(fiber.tag===ClassComponent&&(currentlyProcessingQueue===queue1||queue2!==null&¤tlyProcessingQueue===queue2)&&!didWarnUpdateInsideUpdate){warningWithoutStack$1(false,'An update (setState, replaceState, or forceUpdate) was scheduled '+'from inside an update function. Update functions should be pure, '+'with zero side-effects. Consider using componentDidUpdate or a '+'callback.');didWarnUpdateInsideUpdate=true;}}}function enqueueCapturedUpdate(workInProgress,update){// Captured updates go into a separate list, and only on the work-in-\n// progress queue.\nvar workInProgressQueue=workInProgress.updateQueue;if(workInProgressQueue===null){workInProgressQueue=workInProgress.updateQueue=createUpdateQueue(workInProgress.memoizedState);}else{// TODO: I put this here rather than createWorkInProgress so that we don't\n// clone the queue unnecessarily. There's probably a better way to\n// structure this.\nworkInProgressQueue=ensureWorkInProgressQueueIsAClone(workInProgress,workInProgressQueue);}// Append the update to the end of the list.\nif(workInProgressQueue.lastCapturedUpdate===null){// This is the first render phase update\nworkInProgressQueue.firstCapturedUpdate=workInProgressQueue.lastCapturedUpdate=update;}else{workInProgressQueue.lastCapturedUpdate.next=update;workInProgressQueue.lastCapturedUpdate=update;}}function ensureWorkInProgressQueueIsAClone(workInProgress,queue){var current=workInProgress.alternate;if(current!==null){// If the work-in-progress queue is equal to the current queue,\n// we need to clone it first.\nif(queue===current.updateQueue){queue=workInProgress.updateQueue=cloneUpdateQueue(queue);}}return queue;}function getStateFromUpdate(workInProgress,queue,update,prevState,nextProps,instance){switch(update.tag){case ReplaceState:{var payload=update.payload;if(typeof payload==='function'){// Updater function\n{enterDisallowedContextReadInDEV();if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){payload.call(instance,prevState,nextProps);}}var nextState=payload.call(instance,prevState,nextProps);{exitDisallowedContextReadInDEV();}return nextState;}// State object\nreturn payload;}case CaptureUpdate:{workInProgress.effectTag=workInProgress.effectTag&~ShouldCapture|DidCapture;}// Intentional fallthrough\ncase UpdateState:{var _payload=update.payload;var partialState;if(typeof _payload==='function'){// Updater function\n{enterDisallowedContextReadInDEV();if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){_payload.call(instance,prevState,nextProps);}}partialState=_payload.call(instance,prevState,nextProps);{exitDisallowedContextReadInDEV();}}else{// Partial state object\npartialState=_payload;}if(partialState===null||partialState===undefined){// Null and undefined are treated as no-ops.\nreturn prevState;}// Merge the partial state and the previous state.\nreturn _assign({},prevState,partialState);}case ForceUpdate:{hasForceUpdate=true;return prevState;}}return prevState;}function processUpdateQueue(workInProgress,queue,props,instance,renderExpirationTime){hasForceUpdate=false;queue=ensureWorkInProgressQueueIsAClone(workInProgress,queue);{currentlyProcessingQueue=queue;}// These values may change as we process the queue.\nvar newBaseState=queue.baseState;var newFirstUpdate=null;var newExpirationTime=NoWork;// Iterate through the list of updates to compute the result.\nvar update=queue.firstUpdate;var resultState=newBaseState;while(update!==null){var updateExpirationTime=update.expirationTime;if(updateExpirationTime<renderExpirationTime){// This update does not have sufficient priority. Skip it.\nif(newFirstUpdate===null){// This is the first skipped update. It will be the first update in\n// the new list.\nnewFirstUpdate=update;// Since this is the first update that was skipped, the current result\n// is the new base state.\nnewBaseState=resultState;}// Since this update will remain in the list, update the remaining\n// expiration time.\nif(newExpirationTime<updateExpirationTime){newExpirationTime=updateExpirationTime;}}else{// This update does have sufficient priority.\n// Mark the event time of this update as relevant to this render pass.\n// TODO: This should ideally use the true event time of this update rather than\n// its priority which is a derived and not reverseable value.\n// TODO: We should skip this update if it was already committed but currently\n// we have no way of detecting the difference between a committed and suspended\n// update here.\nmarkRenderEventTimeAndConfig(updateExpirationTime,update.suspenseConfig);// Process it and compute a new result.\nresultState=getStateFromUpdate(workInProgress,queue,update,resultState,props,instance);var callback=update.callback;if(callback!==null){workInProgress.effectTag|=Callback;// Set this to null, in case it was mutated during an aborted render.\nupdate.nextEffect=null;if(queue.lastEffect===null){queue.firstEffect=queue.lastEffect=update;}else{queue.lastEffect.nextEffect=update;queue.lastEffect=update;}}}// Continue to the next update.\nupdate=update.next;}// Separately, iterate though the list of captured updates.\nvar newFirstCapturedUpdate=null;update=queue.firstCapturedUpdate;while(update!==null){var _updateExpirationTime=update.expirationTime;if(_updateExpirationTime<renderExpirationTime){// This update does not have sufficient priority. Skip it.\nif(newFirstCapturedUpdate===null){// This is the first skipped captured update. It will be the first\n// update in the new list.\nnewFirstCapturedUpdate=update;// If this is the first update that was skipped, the current result is\n// the new base state.\nif(newFirstUpdate===null){newBaseState=resultState;}}// Since this update will remain in the list, update the remaining\n// expiration time.\nif(newExpirationTime<_updateExpirationTime){newExpirationTime=_updateExpirationTime;}}else{// This update does have sufficient priority. Process it and compute\n// a new result.\nresultState=getStateFromUpdate(workInProgress,queue,update,resultState,props,instance);var _callback=update.callback;if(_callback!==null){workInProgress.effectTag|=Callback;// Set this to null, in case it was mutated during an aborted render.\nupdate.nextEffect=null;if(queue.lastCapturedEffect===null){queue.firstCapturedEffect=queue.lastCapturedEffect=update;}else{queue.lastCapturedEffect.nextEffect=update;queue.lastCapturedEffect=update;}}}update=update.next;}if(newFirstUpdate===null){queue.lastUpdate=null;}if(newFirstCapturedUpdate===null){queue.lastCapturedUpdate=null;}else{workInProgress.effectTag|=Callback;}if(newFirstUpdate===null&&newFirstCapturedUpdate===null){// We processed every update, without skipping. That means the new base\n// state is the same as the result state.\nnewBaseState=resultState;}queue.baseState=newBaseState;queue.firstUpdate=newFirstUpdate;queue.firstCapturedUpdate=newFirstCapturedUpdate;// Set the remaining expiration time to be whatever is remaining in the queue.\n// This should be fine because the only two other things that contribute to\n// expiration time are props and context. We're already in the middle of the\n// begin phase by the time we start processing the queue, so we've already\n// dealt with the props. Context in components that specify\n// shouldComponentUpdate is tricky; but we'll have to account for\n// that regardless.\nmarkUnprocessedUpdateTime(newExpirationTime);workInProgress.expirationTime=newExpirationTime;workInProgress.memoizedState=resultState;{currentlyProcessingQueue=null;}}function callCallback(callback,context){if(!(typeof callback==='function')){{throw Error(\"Invalid argument passed as callback. Expected a function. Instead received: \"+callback);}}callback.call(context);}function resetHasForceUpdateBeforeProcessing(){hasForceUpdate=false;}function checkHasForceUpdateAfterProcessing(){return hasForceUpdate;}function commitUpdateQueue(finishedWork,finishedQueue,instance,renderExpirationTime){// If the finished render included captured updates, and there are still\n// lower priority updates left over, we need to keep the captured updates\n// in the queue so that they are rebased and not dropped once we process the\n// queue again at the lower priority.\nif(finishedQueue.firstCapturedUpdate!==null){// Join the captured update list to the end of the normal list.\nif(finishedQueue.lastUpdate!==null){finishedQueue.lastUpdate.next=finishedQueue.firstCapturedUpdate;finishedQueue.lastUpdate=finishedQueue.lastCapturedUpdate;}// Clear the list of captured updates.\nfinishedQueue.firstCapturedUpdate=finishedQueue.lastCapturedUpdate=null;}// Commit the effects\ncommitUpdateEffects(finishedQueue.firstEffect,instance);finishedQueue.firstEffect=finishedQueue.lastEffect=null;commitUpdateEffects(finishedQueue.firstCapturedEffect,instance);finishedQueue.firstCapturedEffect=finishedQueue.lastCapturedEffect=null;}function commitUpdateEffects(effect,instance){while(effect!==null){var callback=effect.callback;if(callback!==null){effect.callback=null;callCallback(callback,instance);}effect=effect.nextEffect;}}var ReactCurrentBatchConfig=ReactSharedInternals.ReactCurrentBatchConfig;function requestCurrentSuspenseConfig(){return ReactCurrentBatchConfig.suspense;}var fakeInternalInstance={};var isArray$1=Array.isArray;// React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\nvar emptyRefsObject=new React.Component().refs;var didWarnAboutStateAssignmentForComponent;var didWarnAboutUninitializedState;var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;var didWarnAboutLegacyLifecyclesAndDerivedState;var didWarnAboutUndefinedDerivedState;var warnOnUndefinedDerivedState;var warnOnInvalidCallback$1;var didWarnAboutDirectlyAssigningPropsToState;var didWarnAboutContextTypeAndContextTypes;var didWarnAboutInvalidateContextType;{didWarnAboutStateAssignmentForComponent=new Set();didWarnAboutUninitializedState=new Set();didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate=new Set();didWarnAboutLegacyLifecyclesAndDerivedState=new Set();didWarnAboutDirectlyAssigningPropsToState=new Set();didWarnAboutUndefinedDerivedState=new Set();didWarnAboutContextTypeAndContextTypes=new Set();didWarnAboutInvalidateContextType=new Set();var didWarnOnInvalidCallback=new Set();warnOnInvalidCallback$1=function warnOnInvalidCallback$1(callback,callerName){if(callback===null||typeof callback==='function'){return;}var key=callerName+\"_\"+callback;if(!didWarnOnInvalidCallback.has(key)){didWarnOnInvalidCallback.add(key);warningWithoutStack$1(false,'%s(...): Expected the last optional `callback` argument to be a '+'function. Instead received: %s.',callerName,callback);}};warnOnUndefinedDerivedState=function warnOnUndefinedDerivedState(type,partialState){if(partialState===undefined){var componentName=getComponentName(type)||'Component';if(!didWarnAboutUndefinedDerivedState.has(componentName)){didWarnAboutUndefinedDerivedState.add(componentName);warningWithoutStack$1(false,'%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. '+'You have returned undefined.',componentName);}}};// This is so gross but it's at least non-critical and can be removed if\n// it causes problems. This is meant to give a nicer error message for\n// ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n// ...)) which otherwise throws a \"_processChildContext is not a function\"\n// exception.\nObject.defineProperty(fakeInternalInstance,'_processChildContext',{enumerable:false,value:function value(){{{throw Error(\"_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).\");}}}});Object.freeze(fakeInternalInstance);}function applyDerivedStateFromProps(workInProgress,ctor,getDerivedStateFromProps,nextProps){var prevState=workInProgress.memoizedState;{if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){// Invoke the function an extra time to help detect side-effects.\ngetDerivedStateFromProps(nextProps,prevState);}}var partialState=getDerivedStateFromProps(nextProps,prevState);{warnOnUndefinedDerivedState(ctor,partialState);}// Merge the partial state and the previous state.\nvar memoizedState=partialState===null||partialState===undefined?prevState:_assign({},prevState,partialState);workInProgress.memoizedState=memoizedState;// Once the update queue is empty, persist the derived state onto the\n// base state.\nvar updateQueue=workInProgress.updateQueue;if(updateQueue!==null&&workInProgress.expirationTime===NoWork){updateQueue.baseState=memoizedState;}}var classComponentUpdater={isMounted:isMounted,enqueueSetState:function enqueueSetState(inst,payload,callback){var fiber=get(inst);var currentTime=requestCurrentTimeForUpdate();var suspenseConfig=requestCurrentSuspenseConfig();var expirationTime=computeExpirationForFiber(currentTime,fiber,suspenseConfig);var update=createUpdate(expirationTime,suspenseConfig);update.payload=payload;if(callback!==undefined&&callback!==null){{warnOnInvalidCallback$1(callback,'setState');}update.callback=callback;}enqueueUpdate(fiber,update);scheduleWork(fiber,expirationTime);},enqueueReplaceState:function enqueueReplaceState(inst,payload,callback){var fiber=get(inst);var currentTime=requestCurrentTimeForUpdate();var suspenseConfig=requestCurrentSuspenseConfig();var expirationTime=computeExpirationForFiber(currentTime,fiber,suspenseConfig);var update=createUpdate(expirationTime,suspenseConfig);update.tag=ReplaceState;update.payload=payload;if(callback!==undefined&&callback!==null){{warnOnInvalidCallback$1(callback,'replaceState');}update.callback=callback;}enqueueUpdate(fiber,update);scheduleWork(fiber,expirationTime);},enqueueForceUpdate:function enqueueForceUpdate(inst,callback){var fiber=get(inst);var currentTime=requestCurrentTimeForUpdate();var suspenseConfig=requestCurrentSuspenseConfig();var expirationTime=computeExpirationForFiber(currentTime,fiber,suspenseConfig);var update=createUpdate(expirationTime,suspenseConfig);update.tag=ForceUpdate;if(callback!==undefined&&callback!==null){{warnOnInvalidCallback$1(callback,'forceUpdate');}update.callback=callback;}enqueueUpdate(fiber,update);scheduleWork(fiber,expirationTime);}};function checkShouldComponentUpdate(workInProgress,ctor,oldProps,newProps,oldState,newState,nextContext){var instance=workInProgress.stateNode;if(typeof instance.shouldComponentUpdate==='function'){startPhaseTimer(workInProgress,'shouldComponentUpdate');var shouldUpdate=instance.shouldComponentUpdate(newProps,newState,nextContext);stopPhaseTimer();{!(shouldUpdate!==undefined)?warningWithoutStack$1(false,'%s.shouldComponentUpdate(): Returned undefined instead of a '+'boolean value. Make sure to return true or false.',getComponentName(ctor)||'Component'):void 0;}return shouldUpdate;}if(ctor.prototype&&ctor.prototype.isPureReactComponent){return!shallowEqual(oldProps,newProps)||!shallowEqual(oldState,newState);}return true;}function checkClassInstance(workInProgress,ctor,newProps){var instance=workInProgress.stateNode;{var name=getComponentName(ctor)||'Component';var renderPresent=instance.render;if(!renderPresent){if(ctor.prototype&&typeof ctor.prototype.render==='function'){warningWithoutStack$1(false,'%s(...): No `render` method found on the returned component '+'instance: did you accidentally return an object from the constructor?',name);}else{warningWithoutStack$1(false,'%s(...): No `render` method found on the returned component '+'instance: you may have forgotten to define `render`.',name);}}var noGetInitialStateOnES6=!instance.getInitialState||instance.getInitialState.isReactClassApproved||instance.state;!noGetInitialStateOnES6?warningWithoutStack$1(false,'getInitialState was defined on %s, a plain JavaScript class. '+'This is only supported for classes created using React.createClass. '+'Did you mean to define a state property instead?',name):void 0;var noGetDefaultPropsOnES6=!instance.getDefaultProps||instance.getDefaultProps.isReactClassApproved;!noGetDefaultPropsOnES6?warningWithoutStack$1(false,'getDefaultProps was defined on %s, a plain JavaScript class. '+'This is only supported for classes created using React.createClass. '+'Use a static property to define defaultProps instead.',name):void 0;var noInstancePropTypes=!instance.propTypes;!noInstancePropTypes?warningWithoutStack$1(false,'propTypes was defined as an instance property on %s. Use a static '+'property to define propTypes instead.',name):void 0;var noInstanceContextType=!instance.contextType;!noInstanceContextType?warningWithoutStack$1(false,'contextType was defined as an instance property on %s. Use a static '+'property to define contextType instead.',name):void 0;if(disableLegacyContext){if(ctor.childContextTypes){warningWithoutStack$1(false,'%s uses the legacy childContextTypes API which is no longer supported. '+'Use React.createContext() instead.',name);}if(ctor.contextTypes){warningWithoutStack$1(false,'%s uses the legacy contextTypes API which is no longer supported. '+'Use React.createContext() with static contextType instead.',name);}}else{var noInstanceContextTypes=!instance.contextTypes;!noInstanceContextTypes?warningWithoutStack$1(false,'contextTypes was defined as an instance property on %s. Use a static '+'property to define contextTypes instead.',name):void 0;if(ctor.contextType&&ctor.contextTypes&&!didWarnAboutContextTypeAndContextTypes.has(ctor)){didWarnAboutContextTypeAndContextTypes.add(ctor);warningWithoutStack$1(false,'%s declares both contextTypes and contextType static properties. '+'The legacy contextTypes property will be ignored.',name);}}var noComponentShouldUpdate=typeof instance.componentShouldUpdate!=='function';!noComponentShouldUpdate?warningWithoutStack$1(false,'%s has a method called '+'componentShouldUpdate(). Did you mean shouldComponentUpdate()? '+'The name is phrased as a question because the function is '+'expected to return a value.',name):void 0;if(ctor.prototype&&ctor.prototype.isPureReactComponent&&typeof instance.shouldComponentUpdate!=='undefined'){warningWithoutStack$1(false,'%s has a method called shouldComponentUpdate(). '+'shouldComponentUpdate should not be used when extending React.PureComponent. '+'Please extend React.Component if shouldComponentUpdate is used.',getComponentName(ctor)||'A pure component');}var noComponentDidUnmount=typeof instance.componentDidUnmount!=='function';!noComponentDidUnmount?warningWithoutStack$1(false,'%s has a method called '+'componentDidUnmount(). But there is no such lifecycle method. '+'Did you mean componentWillUnmount()?',name):void 0;var noComponentDidReceiveProps=typeof instance.componentDidReceiveProps!=='function';!noComponentDidReceiveProps?warningWithoutStack$1(false,'%s has a method called '+'componentDidReceiveProps(). But there is no such lifecycle method. '+'If you meant to update the state in response to changing props, '+'use componentWillReceiveProps(). If you meant to fetch data or '+'run side-effects or mutations after React has updated the UI, use componentDidUpdate().',name):void 0;var noComponentWillRecieveProps=typeof instance.componentWillRecieveProps!=='function';!noComponentWillRecieveProps?warningWithoutStack$1(false,'%s has a method called '+'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',name):void 0;var noUnsafeComponentWillRecieveProps=typeof instance.UNSAFE_componentWillRecieveProps!=='function';!noUnsafeComponentWillRecieveProps?warningWithoutStack$1(false,'%s has a method called '+'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?',name):void 0;var hasMutatedProps=instance.props!==newProps;!(instance.props===undefined||!hasMutatedProps)?warningWithoutStack$1(false,'%s(...): When calling super() in `%s`, make sure to pass '+\"up the same props that your component's constructor was passed.\",name,name):void 0;var noInstanceDefaultProps=!instance.defaultProps;!noInstanceDefaultProps?warningWithoutStack$1(false,'Setting defaultProps as an instance property on %s is not supported and will be ignored.'+' Instead, define defaultProps as a static property on %s.',name,name):void 0;if(typeof instance.getSnapshotBeforeUpdate==='function'&&typeof instance.componentDidUpdate!=='function'&&!didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)){didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);warningWithoutStack$1(false,'%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). '+'This component defines getSnapshotBeforeUpdate() only.',getComponentName(ctor));}var noInstanceGetDerivedStateFromProps=typeof instance.getDerivedStateFromProps!=='function';!noInstanceGetDerivedStateFromProps?warningWithoutStack$1(false,'%s: getDerivedStateFromProps() is defined as an instance method '+'and will be ignored. Instead, declare it as a static method.',name):void 0;var noInstanceGetDerivedStateFromCatch=typeof instance.getDerivedStateFromError!=='function';!noInstanceGetDerivedStateFromCatch?warningWithoutStack$1(false,'%s: getDerivedStateFromError() is defined as an instance method '+'and will be ignored. Instead, declare it as a static method.',name):void 0;var noStaticGetSnapshotBeforeUpdate=typeof ctor.getSnapshotBeforeUpdate!=='function';!noStaticGetSnapshotBeforeUpdate?warningWithoutStack$1(false,'%s: getSnapshotBeforeUpdate() is defined as a static method '+'and will be ignored. Instead, declare it as an instance method.',name):void 0;var _state=instance.state;if(_state&&(_typeof(_state)!=='object'||isArray$1(_state))){warningWithoutStack$1(false,'%s.state: must be set to an object or null',name);}if(typeof instance.getChildContext==='function'){!(_typeof(ctor.childContextTypes)==='object')?warningWithoutStack$1(false,'%s.getChildContext(): childContextTypes must be defined in order to '+'use getChildContext().',name):void 0;}}}function adoptClassInstance(workInProgress,instance){instance.updater=classComponentUpdater;workInProgress.stateNode=instance;// The instance needs access to the fiber so that it can schedule updates\nset(instance,workInProgress);{instance._reactInternalInstance=fakeInternalInstance;}}function constructClassInstance(workInProgress,ctor,props,renderExpirationTime){var isLegacyContextConsumer=false;var unmaskedContext=emptyContextObject;var context=emptyContextObject;var contextType=ctor.contextType;{if('contextType'in ctor){var isValid=// Allow null for conditional declaration\ncontextType===null||contextType!==undefined&&contextType.$$typeof===REACT_CONTEXT_TYPE&&contextType._context===undefined;// Not a <Context.Consumer>\nif(!isValid&&!didWarnAboutInvalidateContextType.has(ctor)){didWarnAboutInvalidateContextType.add(ctor);var addendum='';if(contextType===undefined){addendum=' However, it is set to undefined. '+'This can be caused by a typo or by mixing up named and default imports. '+'This can also happen due to a circular dependency, so '+'try moving the createContext() call to a separate file.';}else if(_typeof(contextType)!=='object'){addendum=' However, it is set to a '+_typeof(contextType)+'.';}else if(contextType.$$typeof===REACT_PROVIDER_TYPE){addendum=' Did you accidentally pass the Context.Provider instead?';}else if(contextType._context!==undefined){// <Context.Consumer>\naddendum=' Did you accidentally pass the Context.Consumer instead?';}else{addendum=' However, it is set to an object with keys {'+Object.keys(contextType).join(', ')+'}.';}warningWithoutStack$1(false,'%s defines an invalid contextType. '+'contextType should point to the Context object returned by React.createContext().%s',getComponentName(ctor)||'Component',addendum);}}}if(_typeof(contextType)==='object'&&contextType!==null){context=_readContext(contextType);}else if(!disableLegacyContext){unmaskedContext=getUnmaskedContext(workInProgress,ctor,true);var contextTypes=ctor.contextTypes;isLegacyContextConsumer=contextTypes!==null&&contextTypes!==undefined;context=isLegacyContextConsumer?getMaskedContext(workInProgress,unmaskedContext):emptyContextObject;}// Instantiate twice to help detect side-effects.\n{if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){new ctor(props,context);// eslint-disable-line no-new\n}}var instance=new ctor(props,context);var state=workInProgress.memoizedState=instance.state!==null&&instance.state!==undefined?instance.state:null;adoptClassInstance(workInProgress,instance);{if(typeof ctor.getDerivedStateFromProps==='function'&&state===null){var componentName=getComponentName(ctor)||'Component';if(!didWarnAboutUninitializedState.has(componentName)){didWarnAboutUninitializedState.add(componentName);warningWithoutStack$1(false,'`%s` uses `getDerivedStateFromProps` but its initial state is '+'%s. This is not recommended. Instead, define the initial state by '+'assigning an object to `this.state` in the constructor of `%s`. '+'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.',componentName,instance.state===null?'null':'undefined',componentName);}}// If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n// Warn about these lifecycles if they are present.\n// Don't warn about react-lifecycles-compat polyfilled methods though.\nif(typeof ctor.getDerivedStateFromProps==='function'||typeof instance.getSnapshotBeforeUpdate==='function'){var foundWillMountName=null;var foundWillReceivePropsName=null;var foundWillUpdateName=null;if(typeof instance.componentWillMount==='function'&&instance.componentWillMount.__suppressDeprecationWarning!==true){foundWillMountName='componentWillMount';}else if(typeof instance.UNSAFE_componentWillMount==='function'){foundWillMountName='UNSAFE_componentWillMount';}if(typeof instance.componentWillReceiveProps==='function'&&instance.componentWillReceiveProps.__suppressDeprecationWarning!==true){foundWillReceivePropsName='componentWillReceiveProps';}else if(typeof instance.UNSAFE_componentWillReceiveProps==='function'){foundWillReceivePropsName='UNSAFE_componentWillReceiveProps';}if(typeof instance.componentWillUpdate==='function'&&instance.componentWillUpdate.__suppressDeprecationWarning!==true){foundWillUpdateName='componentWillUpdate';}else if(typeof instance.UNSAFE_componentWillUpdate==='function'){foundWillUpdateName='UNSAFE_componentWillUpdate';}if(foundWillMountName!==null||foundWillReceivePropsName!==null||foundWillUpdateName!==null){var _componentName=getComponentName(ctor)||'Component';var newApiName=typeof ctor.getDerivedStateFromProps==='function'?'getDerivedStateFromProps()':'getSnapshotBeforeUpdate()';if(!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)){didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);warningWithoutStack$1(false,'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n'+'%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n'+'The above lifecycles should be removed. Learn more about this warning here:\\n'+'https://fb.me/react-unsafe-component-lifecycles',_componentName,newApiName,foundWillMountName!==null?\"\\n \"+foundWillMountName:'',foundWillReceivePropsName!==null?\"\\n \"+foundWillReceivePropsName:'',foundWillUpdateName!==null?\"\\n \"+foundWillUpdateName:'');}}}}// Cache unmasked context so we can avoid recreating masked context unless necessary.\n// ReactFiberContext usually updates this cache but can't for newly-created instances.\nif(isLegacyContextConsumer){cacheContext(workInProgress,unmaskedContext,context);}return instance;}function callComponentWillMount(workInProgress,instance){startPhaseTimer(workInProgress,'componentWillMount');var oldState=instance.state;if(typeof instance.componentWillMount==='function'){instance.componentWillMount();}if(typeof instance.UNSAFE_componentWillMount==='function'){instance.UNSAFE_componentWillMount();}stopPhaseTimer();if(oldState!==instance.state){{warningWithoutStack$1(false,'%s.componentWillMount(): Assigning directly to this.state is '+\"deprecated (except inside a component's \"+'constructor). Use setState instead.',getComponentName(workInProgress.type)||'Component');}classComponentUpdater.enqueueReplaceState(instance,instance.state,null);}}function callComponentWillReceiveProps(workInProgress,instance,newProps,nextContext){var oldState=instance.state;startPhaseTimer(workInProgress,'componentWillReceiveProps');if(typeof instance.componentWillReceiveProps==='function'){instance.componentWillReceiveProps(newProps,nextContext);}if(typeof instance.UNSAFE_componentWillReceiveProps==='function'){instance.UNSAFE_componentWillReceiveProps(newProps,nextContext);}stopPhaseTimer();if(instance.state!==oldState){{var componentName=getComponentName(workInProgress.type)||'Component';if(!didWarnAboutStateAssignmentForComponent.has(componentName)){didWarnAboutStateAssignmentForComponent.add(componentName);warningWithoutStack$1(false,'%s.componentWillReceiveProps(): Assigning directly to '+\"this.state is deprecated (except inside a component's \"+'constructor). Use setState instead.',componentName);}}classComponentUpdater.enqueueReplaceState(instance,instance.state,null);}}// Invokes the mount life-cycles on a previously never rendered instance.\nfunction mountClassInstance(workInProgress,ctor,newProps,renderExpirationTime){{checkClassInstance(workInProgress,ctor,newProps);}var instance=workInProgress.stateNode;instance.props=newProps;instance.state=workInProgress.memoizedState;instance.refs=emptyRefsObject;var contextType=ctor.contextType;if(_typeof(contextType)==='object'&&contextType!==null){instance.context=_readContext(contextType);}else if(disableLegacyContext){instance.context=emptyContextObject;}else{var unmaskedContext=getUnmaskedContext(workInProgress,ctor,true);instance.context=getMaskedContext(workInProgress,unmaskedContext);}{if(instance.state===newProps){var componentName=getComponentName(ctor)||'Component';if(!didWarnAboutDirectlyAssigningPropsToState.has(componentName)){didWarnAboutDirectlyAssigningPropsToState.add(componentName);warningWithoutStack$1(false,'%s: It is not recommended to assign props directly to state '+\"because updates to props won't be reflected in state. \"+'In most cases, it is better to use props directly.',componentName);}}if(workInProgress.mode&StrictMode){ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress,instance);}if(warnAboutDeprecatedLifecycles){ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress,instance);}}var updateQueue=workInProgress.updateQueue;if(updateQueue!==null){processUpdateQueue(workInProgress,updateQueue,newProps,instance,renderExpirationTime);instance.state=workInProgress.memoizedState;}var getDerivedStateFromProps=ctor.getDerivedStateFromProps;if(typeof getDerivedStateFromProps==='function'){applyDerivedStateFromProps(workInProgress,ctor,getDerivedStateFromProps,newProps);instance.state=workInProgress.memoizedState;}// In order to support react-lifecycles-compat polyfilled components,\n// Unsafe lifecycles should not be invoked for components using the new APIs.\nif(typeof ctor.getDerivedStateFromProps!=='function'&&typeof instance.getSnapshotBeforeUpdate!=='function'&&(typeof instance.UNSAFE_componentWillMount==='function'||typeof instance.componentWillMount==='function')){callComponentWillMount(workInProgress,instance);// If we had additional state updates during this life-cycle, let's\n// process them now.\nupdateQueue=workInProgress.updateQueue;if(updateQueue!==null){processUpdateQueue(workInProgress,updateQueue,newProps,instance,renderExpirationTime);instance.state=workInProgress.memoizedState;}}if(typeof instance.componentDidMount==='function'){workInProgress.effectTag|=Update;}}function resumeMountClassInstance(workInProgress,ctor,newProps,renderExpirationTime){var instance=workInProgress.stateNode;var oldProps=workInProgress.memoizedProps;instance.props=oldProps;var oldContext=instance.context;var contextType=ctor.contextType;var nextContext=emptyContextObject;if(_typeof(contextType)==='object'&&contextType!==null){nextContext=_readContext(contextType);}else if(!disableLegacyContext){var nextLegacyUnmaskedContext=getUnmaskedContext(workInProgress,ctor,true);nextContext=getMaskedContext(workInProgress,nextLegacyUnmaskedContext);}var getDerivedStateFromProps=ctor.getDerivedStateFromProps;var hasNewLifecycles=typeof getDerivedStateFromProps==='function'||typeof instance.getSnapshotBeforeUpdate==='function';// Note: During these life-cycles, instance.props/instance.state are what\n// ever the previously attempted to render - not the \"current\". However,\n// during componentDidUpdate we pass the \"current\" props.\n// In order to support react-lifecycles-compat polyfilled components,\n// Unsafe lifecycles should not be invoked for components using the new APIs.\nif(!hasNewLifecycles&&(typeof instance.UNSAFE_componentWillReceiveProps==='function'||typeof instance.componentWillReceiveProps==='function')){if(oldProps!==newProps||oldContext!==nextContext){callComponentWillReceiveProps(workInProgress,instance,newProps,nextContext);}}resetHasForceUpdateBeforeProcessing();var oldState=workInProgress.memoizedState;var newState=instance.state=oldState;var updateQueue=workInProgress.updateQueue;if(updateQueue!==null){processUpdateQueue(workInProgress,updateQueue,newProps,instance,renderExpirationTime);newState=workInProgress.memoizedState;}if(oldProps===newProps&&oldState===newState&&!hasContextChanged()&&!checkHasForceUpdateAfterProcessing()){// If an update was already in progress, we should schedule an Update\n// effect even though we're bailing out, so that cWU/cDU are called.\nif(typeof instance.componentDidMount==='function'){workInProgress.effectTag|=Update;}return false;}if(typeof getDerivedStateFromProps==='function'){applyDerivedStateFromProps(workInProgress,ctor,getDerivedStateFromProps,newProps);newState=workInProgress.memoizedState;}var shouldUpdate=checkHasForceUpdateAfterProcessing()||checkShouldComponentUpdate(workInProgress,ctor,oldProps,newProps,oldState,newState,nextContext);if(shouldUpdate){// In order to support react-lifecycles-compat polyfilled components,\n// Unsafe lifecycles should not be invoked for components using the new APIs.\nif(!hasNewLifecycles&&(typeof instance.UNSAFE_componentWillMount==='function'||typeof instance.componentWillMount==='function')){startPhaseTimer(workInProgress,'componentWillMount');if(typeof instance.componentWillMount==='function'){instance.componentWillMount();}if(typeof instance.UNSAFE_componentWillMount==='function'){instance.UNSAFE_componentWillMount();}stopPhaseTimer();}if(typeof instance.componentDidMount==='function'){workInProgress.effectTag|=Update;}}else{// If an update was already in progress, we should schedule an Update\n// effect even though we're bailing out, so that cWU/cDU are called.\nif(typeof instance.componentDidMount==='function'){workInProgress.effectTag|=Update;}// If shouldComponentUpdate returned false, we should still update the\n// memoized state to indicate that this work can be reused.\nworkInProgress.memoizedProps=newProps;workInProgress.memoizedState=newState;}// Update the existing instance's state, props, and context pointers even\n// if shouldComponentUpdate returns false.\ninstance.props=newProps;instance.state=newState;instance.context=nextContext;return shouldUpdate;}// Invokes the update life-cycles and returns false if it shouldn't rerender.\nfunction updateClassInstance(current,workInProgress,ctor,newProps,renderExpirationTime){var instance=workInProgress.stateNode;var oldProps=workInProgress.memoizedProps;instance.props=workInProgress.type===workInProgress.elementType?oldProps:resolveDefaultProps(workInProgress.type,oldProps);var oldContext=instance.context;var contextType=ctor.contextType;var nextContext=emptyContextObject;if(_typeof(contextType)==='object'&&contextType!==null){nextContext=_readContext(contextType);}else if(!disableLegacyContext){var nextUnmaskedContext=getUnmaskedContext(workInProgress,ctor,true);nextContext=getMaskedContext(workInProgress,nextUnmaskedContext);}var getDerivedStateFromProps=ctor.getDerivedStateFromProps;var hasNewLifecycles=typeof getDerivedStateFromProps==='function'||typeof instance.getSnapshotBeforeUpdate==='function';// Note: During these life-cycles, instance.props/instance.state are what\n// ever the previously attempted to render - not the \"current\". However,\n// during componentDidUpdate we pass the \"current\" props.\n// In order to support react-lifecycles-compat polyfilled components,\n// Unsafe lifecycles should not be invoked for components using the new APIs.\nif(!hasNewLifecycles&&(typeof instance.UNSAFE_componentWillReceiveProps==='function'||typeof instance.componentWillReceiveProps==='function')){if(oldProps!==newProps||oldContext!==nextContext){callComponentWillReceiveProps(workInProgress,instance,newProps,nextContext);}}resetHasForceUpdateBeforeProcessing();var oldState=workInProgress.memoizedState;var newState=instance.state=oldState;var updateQueue=workInProgress.updateQueue;if(updateQueue!==null){processUpdateQueue(workInProgress,updateQueue,newProps,instance,renderExpirationTime);newState=workInProgress.memoizedState;}if(oldProps===newProps&&oldState===newState&&!hasContextChanged()&&!checkHasForceUpdateAfterProcessing()){// If an update was already in progress, we should schedule an Update\n// effect even though we're bailing out, so that cWU/cDU are called.\nif(typeof instance.componentDidUpdate==='function'){if(oldProps!==current.memoizedProps||oldState!==current.memoizedState){workInProgress.effectTag|=Update;}}if(typeof instance.getSnapshotBeforeUpdate==='function'){if(oldProps!==current.memoizedProps||oldState!==current.memoizedState){workInProgress.effectTag|=Snapshot;}}return false;}if(typeof getDerivedStateFromProps==='function'){applyDerivedStateFromProps(workInProgress,ctor,getDerivedStateFromProps,newProps);newState=workInProgress.memoizedState;}var shouldUpdate=checkHasForceUpdateAfterProcessing()||checkShouldComponentUpdate(workInProgress,ctor,oldProps,newProps,oldState,newState,nextContext);if(shouldUpdate){// In order to support react-lifecycles-compat polyfilled components,\n// Unsafe lifecycles should not be invoked for components using the new APIs.\nif(!hasNewLifecycles&&(typeof instance.UNSAFE_componentWillUpdate==='function'||typeof instance.componentWillUpdate==='function')){startPhaseTimer(workInProgress,'componentWillUpdate');if(typeof instance.componentWillUpdate==='function'){instance.componentWillUpdate(newProps,newState,nextContext);}if(typeof instance.UNSAFE_componentWillUpdate==='function'){instance.UNSAFE_componentWillUpdate(newProps,newState,nextContext);}stopPhaseTimer();}if(typeof instance.componentDidUpdate==='function'){workInProgress.effectTag|=Update;}if(typeof instance.getSnapshotBeforeUpdate==='function'){workInProgress.effectTag|=Snapshot;}}else{// If an update was already in progress, we should schedule an Update\n// effect even though we're bailing out, so that cWU/cDU are called.\nif(typeof instance.componentDidUpdate==='function'){if(oldProps!==current.memoizedProps||oldState!==current.memoizedState){workInProgress.effectTag|=Update;}}if(typeof instance.getSnapshotBeforeUpdate==='function'){if(oldProps!==current.memoizedProps||oldState!==current.memoizedState){workInProgress.effectTag|=Snapshot;}}// If shouldComponentUpdate returned false, we should still update the\n// memoized props/state to indicate that this work can be reused.\nworkInProgress.memoizedProps=newProps;workInProgress.memoizedState=newState;}// Update the existing instance's state, props, and context pointers even\n// if shouldComponentUpdate returns false.\ninstance.props=newProps;instance.state=newState;instance.context=nextContext;return shouldUpdate;}var didWarnAboutMaps;var didWarnAboutGenerators;var didWarnAboutStringRefs;var ownerHasKeyUseWarning;var ownerHasFunctionTypeWarning;var warnForMissingKey=function warnForMissingKey(child){};{didWarnAboutMaps=false;didWarnAboutGenerators=false;didWarnAboutStringRefs={};/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */ownerHasKeyUseWarning={};ownerHasFunctionTypeWarning={};warnForMissingKey=function warnForMissingKey(child){if(child===null||_typeof(child)!=='object'){return;}if(!child._store||child._store.validated||child.key!=null){return;}if(!(_typeof(child._store)==='object')){{throw Error(\"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\");}}child._store.validated=true;var currentComponentErrorInfo='Each child in a list should have a unique '+'\"key\" prop. See https://fb.me/react-warning-keys for '+'more information.'+getCurrentFiberStackInDev();if(ownerHasKeyUseWarning[currentComponentErrorInfo]){return;}ownerHasKeyUseWarning[currentComponentErrorInfo]=true;warning$1(false,'Each child in a list should have a unique '+'\"key\" prop. See https://fb.me/react-warning-keys for '+'more information.');};}var isArray=Array.isArray;function coerceRef(returnFiber,current$$1,element){var mixedRef=element.ref;if(mixedRef!==null&&typeof mixedRef!=='function'&&_typeof(mixedRef)!=='object'){{// TODO: Clean this up once we turn on the string ref warning for\n// everyone, because the strict mode case will no longer be relevant\nif(returnFiber.mode&StrictMode||warnAboutStringRefs){var componentName=getComponentName(returnFiber.type)||'Component';if(!didWarnAboutStringRefs[componentName]){if(warnAboutStringRefs){warningWithoutStack$1(false,'Component \"%s\" contains the string ref \"%s\". Support for string refs '+'will be removed in a future major release. We recommend using '+'useRef() or createRef() instead. '+'Learn more about using refs safely here: '+'https://fb.me/react-strict-mode-string-ref%s',componentName,mixedRef,getStackByFiberInDevAndProd(returnFiber));}else{warningWithoutStack$1(false,'A string ref, \"%s\", has been found within a strict mode tree. '+'String refs are a source of potential bugs and should be avoided. '+'We recommend using useRef() or createRef() instead. '+'Learn more about using refs safely here: '+'https://fb.me/react-strict-mode-string-ref%s',mixedRef,getStackByFiberInDevAndProd(returnFiber));}didWarnAboutStringRefs[componentName]=true;}}}if(element._owner){var owner=element._owner;var inst;if(owner){var ownerFiber=owner;if(!(ownerFiber.tag===ClassComponent)){{throw Error(\"Function components cannot have refs. Did you mean to use React.forwardRef()?\");}}inst=ownerFiber.stateNode;}if(!inst){{throw Error(\"Missing owner for string ref \"+mixedRef+\". This error is likely caused by a bug in React. Please file an issue.\");}}var stringRef=''+mixedRef;// Check if previous string ref matches new string ref\nif(current$$1!==null&¤t$$1.ref!==null&&typeof current$$1.ref==='function'&¤t$$1.ref._stringRef===stringRef){return current$$1.ref;}var ref=function ref(value){var refs=inst.refs;if(refs===emptyRefsObject){// This is a lazy pooled frozen object, so we need to initialize.\nrefs=inst.refs={};}if(value===null){delete refs[stringRef];}else{refs[stringRef]=value;}};ref._stringRef=stringRef;return ref;}else{if(!(typeof mixedRef==='string')){{throw Error(\"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\");}}if(!element._owner){{throw Error(\"Element ref was specified as a string (\"+mixedRef+\") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.\");}}}}return mixedRef;}function throwOnInvalidObjectType(returnFiber,newChild){if(returnFiber.type!=='textarea'){var addendum='';{addendum=' If you meant to render a collection of children, use an array '+'instead.'+getCurrentFiberStackInDev();}{{throw Error(\"Objects are not valid as a React child (found: \"+(Object.prototype.toString.call(newChild)==='[object Object]'?'object with keys {'+Object.keys(newChild).join(', ')+'}':newChild)+\").\"+addendum);}}}}function warnOnFunctionType(){var currentComponentErrorInfo='Functions are not valid as a React child. This may happen if '+'you return a Component instead of <Component /> from render. '+'Or maybe you meant to call this function rather than return it.'+getCurrentFiberStackInDev();if(ownerHasFunctionTypeWarning[currentComponentErrorInfo]){return;}ownerHasFunctionTypeWarning[currentComponentErrorInfo]=true;warning$1(false,'Functions are not valid as a React child. This may happen if '+'you return a Component instead of <Component /> from render. '+'Or maybe you meant to call this function rather than return it.');}// This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\nfunction ChildReconciler(shouldTrackSideEffects){function deleteChild(returnFiber,childToDelete){if(!shouldTrackSideEffects){// Noop.\nreturn;}// Deletions are added in reversed order so we add it to the front.\n// At this point, the return fiber's effect list is empty except for\n// deletions, so we can just append the deletion to the list. The remaining\n// effects aren't added until the complete phase. Once we implement\n// resuming, this may not be true.\nvar last=returnFiber.lastEffect;if(last!==null){last.nextEffect=childToDelete;returnFiber.lastEffect=childToDelete;}else{returnFiber.firstEffect=returnFiber.lastEffect=childToDelete;}childToDelete.nextEffect=null;childToDelete.effectTag=Deletion;}function deleteRemainingChildren(returnFiber,currentFirstChild){if(!shouldTrackSideEffects){// Noop.\nreturn null;}// TODO: For the shouldClone case, this could be micro-optimized a bit by\n// assuming that after the first child we've already added everything.\nvar childToDelete=currentFirstChild;while(childToDelete!==null){deleteChild(returnFiber,childToDelete);childToDelete=childToDelete.sibling;}return null;}function mapRemainingChildren(returnFiber,currentFirstChild){// Add the remaining children to a temporary map so that we can find them by\n// keys quickly. Implicit (null) keys get added to this set with their index\n// instead.\nvar existingChildren=new Map();var existingChild=currentFirstChild;while(existingChild!==null){if(existingChild.key!==null){existingChildren.set(existingChild.key,existingChild);}else{existingChildren.set(existingChild.index,existingChild);}existingChild=existingChild.sibling;}return existingChildren;}function useFiber(fiber,pendingProps,expirationTime){// We currently set sibling to null and index to 0 here because it is easy\n// to forget to do before returning it. E.g. for the single child case.\nvar clone=createWorkInProgress(fiber,pendingProps,expirationTime);clone.index=0;clone.sibling=null;return clone;}function placeChild(newFiber,lastPlacedIndex,newIndex){newFiber.index=newIndex;if(!shouldTrackSideEffects){// Noop.\nreturn lastPlacedIndex;}var current$$1=newFiber.alternate;if(current$$1!==null){var oldIndex=current$$1.index;if(oldIndex<lastPlacedIndex){// This is a move.\nnewFiber.effectTag=Placement;return lastPlacedIndex;}else{// This item can stay in place.\nreturn oldIndex;}}else{// This is an insertion.\nnewFiber.effectTag=Placement;return lastPlacedIndex;}}function placeSingleChild(newFiber){// This is simpler for the single child case. We only need to do a\n// placement for inserting new children.\nif(shouldTrackSideEffects&&newFiber.alternate===null){newFiber.effectTag=Placement;}return newFiber;}function updateTextNode(returnFiber,current$$1,textContent,expirationTime){if(current$$1===null||current$$1.tag!==HostText){// Insert\nvar created=createFiberFromText(textContent,returnFiber.mode,expirationTime);created[\"return\"]=returnFiber;return created;}else{// Update\nvar existing=useFiber(current$$1,textContent,expirationTime);existing[\"return\"]=returnFiber;return existing;}}function updateElement(returnFiber,current$$1,element,expirationTime){if(current$$1!==null&&hotCompareElements(current$$1.elementType,element.type,hotUpdateChild(current$$1),current$$1.type)){// Move based on index\nvar existing=useFiber(current$$1,element.props,expirationTime);existing.ref=coerceRef(returnFiber,current$$1,element);existing[\"return\"]=returnFiber;{existing._debugSource=element._source;existing._debugOwner=element._owner;}return existing;}else{// Insert\nvar created=createFiberFromElement(element,returnFiber.mode,expirationTime);created.ref=coerceRef(returnFiber,current$$1,element);created[\"return\"]=returnFiber;return created;}}function updatePortal(returnFiber,current$$1,portal,expirationTime){if(current$$1===null||current$$1.tag!==HostPortal||current$$1.stateNode.containerInfo!==portal.containerInfo||current$$1.stateNode.implementation!==portal.implementation){// Insert\nvar created=createFiberFromPortal(portal,returnFiber.mode,expirationTime);created[\"return\"]=returnFiber;return created;}else{// Update\nvar existing=useFiber(current$$1,portal.children||[],expirationTime);existing[\"return\"]=returnFiber;return existing;}}function updateFragment(returnFiber,current$$1,fragment,expirationTime,key){if(current$$1===null||current$$1.tag!==Fragment){// Insert\nvar created=createFiberFromFragment(fragment,returnFiber.mode,expirationTime,key);created[\"return\"]=returnFiber;return created;}else{// Update\nvar existing=useFiber(current$$1,fragment,expirationTime);existing[\"return\"]=returnFiber;return existing;}}function createChild(returnFiber,newChild,expirationTime){if(typeof newChild==='string'||typeof newChild==='number'){// Text nodes don't have keys. If the previous node is implicitly keyed\n// we can continue to replace it without aborting even if it is not a text\n// node.\nvar created=createFiberFromText(''+newChild,returnFiber.mode,expirationTime);created[\"return\"]=returnFiber;return created;}if(_typeof(newChild)==='object'&&newChild!==null){switch(newChild.$$typeof){case REACT_ELEMENT_TYPE:{var _created=createFiberFromElement(newChild,returnFiber.mode,expirationTime);_created.ref=coerceRef(returnFiber,null,newChild);_created[\"return\"]=returnFiber;return _created;}case REACT_PORTAL_TYPE:{var _created2=createFiberFromPortal(newChild,returnFiber.mode,expirationTime);_created2[\"return\"]=returnFiber;return _created2;}}if(isArray(newChild)||getIteratorFn(newChild)){var _created3=createFiberFromFragment(newChild,returnFiber.mode,expirationTime,null);_created3[\"return\"]=returnFiber;return _created3;}throwOnInvalidObjectType(returnFiber,newChild);}{if(typeof newChild==='function'){warnOnFunctionType();}}return null;}function updateSlot(returnFiber,oldFiber,newChild,expirationTime){// Update the fiber if the keys match, otherwise return null.\nvar key=oldFiber!==null?oldFiber.key:null;if(typeof newChild==='string'||typeof newChild==='number'){// Text nodes don't have keys. If the previous node is implicitly keyed\n// we can continue to replace it without aborting even if it is not a text\n// node.\nif(key!==null){return null;}return updateTextNode(returnFiber,oldFiber,''+newChild,expirationTime);}if(_typeof(newChild)==='object'&&newChild!==null){switch(newChild.$$typeof){case REACT_ELEMENT_TYPE:{if(newChild.key===key){if(newChild.type===REACT_FRAGMENT_TYPE){return updateFragment(returnFiber,oldFiber,newChild.props.children,expirationTime,key);}return updateElement(returnFiber,oldFiber,newChild,expirationTime);}else{return null;}}case REACT_PORTAL_TYPE:{if(newChild.key===key){return updatePortal(returnFiber,oldFiber,newChild,expirationTime);}else{return null;}}}if(isArray(newChild)||getIteratorFn(newChild)){if(key!==null){return null;}return updateFragment(returnFiber,oldFiber,newChild,expirationTime,null);}throwOnInvalidObjectType(returnFiber,newChild);}{if(typeof newChild==='function'){warnOnFunctionType();}}return null;}function updateFromMap(existingChildren,returnFiber,newIdx,newChild,expirationTime){if(typeof newChild==='string'||typeof newChild==='number'){// Text nodes don't have keys, so we neither have to check the old nor\n// new node for the key. If both are text nodes, they match.\nvar matchedFiber=existingChildren.get(newIdx)||null;return updateTextNode(returnFiber,matchedFiber,''+newChild,expirationTime);}if(_typeof(newChild)==='object'&&newChild!==null){switch(newChild.$$typeof){case REACT_ELEMENT_TYPE:{var _matchedFiber=existingChildren.get(newChild.key===null?newIdx:newChild.key)||null;if(newChild.type===REACT_FRAGMENT_TYPE){return updateFragment(returnFiber,_matchedFiber,newChild.props.children,expirationTime,newChild.key);}return updateElement(returnFiber,_matchedFiber,newChild,expirationTime);}case REACT_PORTAL_TYPE:{var _matchedFiber2=existingChildren.get(newChild.key===null?newIdx:newChild.key)||null;return updatePortal(returnFiber,_matchedFiber2,newChild,expirationTime);}}if(isArray(newChild)||getIteratorFn(newChild)){var _matchedFiber3=existingChildren.get(newIdx)||null;return updateFragment(returnFiber,_matchedFiber3,newChild,expirationTime,null);}throwOnInvalidObjectType(returnFiber,newChild);}{if(typeof newChild==='function'){warnOnFunctionType();}}return null;}/**\n * Warns if there is a duplicate or missing key\n */function warnOnInvalidKey(child,knownKeys){{if(_typeof(child)!=='object'||child===null){return knownKeys;}switch(child.$$typeof){case REACT_ELEMENT_TYPE:case REACT_PORTAL_TYPE:warnForMissingKey(child);var key=child.key;if(typeof key!=='string'){break;}if(knownKeys===null){knownKeys=new Set();knownKeys.add(key);break;}if(!knownKeys.has(key)){knownKeys.add(key);break;}warning$1(false,'Encountered two children with the same key, `%s`. '+'Keys should be unique so that components maintain their identity '+'across updates. Non-unique keys may cause children to be '+'duplicated and/or omitted — the behavior is unsupported and '+'could change in a future version.',key);break;default:break;}}return knownKeys;}function reconcileChildrenArray(returnFiber,currentFirstChild,newChildren,expirationTime){// This algorithm can't optimize by searching from both ends since we\n// don't have backpointers on fibers. I'm trying to see how far we can get\n// with that model. If it ends up not being worth the tradeoffs, we can\n// add it later.\n// Even with a two ended optimization, we'd want to optimize for the case\n// where there are few changes and brute force the comparison instead of\n// going for the Map. It'd like to explore hitting that path first in\n// forward-only mode and only go for the Map once we notice that we need\n// lots of look ahead. This doesn't handle reversal as well as two ended\n// search but that's unusual. Besides, for the two ended optimization to\n// work on Iterables, we'd need to copy the whole set.\n// In this first iteration, we'll just live with hitting the bad case\n// (adding everything to a Map) in for every insert/move.\n// If you change this code, also update reconcileChildrenIterator() which\n// uses the same algorithm.\n{// First, validate keys.\nvar knownKeys=null;for(var i=0;i<newChildren.length;i++){var child=newChildren[i];knownKeys=warnOnInvalidKey(child,knownKeys);}}var resultingFirstChild=null;var previousNewFiber=null;var oldFiber=currentFirstChild;var lastPlacedIndex=0;var newIdx=0;var nextOldFiber=null;for(;oldFiber!==null&&newIdx<newChildren.length;newIdx++){if(oldFiber.index>newIdx){nextOldFiber=oldFiber;oldFiber=null;}else{nextOldFiber=oldFiber.sibling;}var newFiber=updateSlot(returnFiber,oldFiber,newChildren[newIdx],expirationTime);if(newFiber===null){// TODO: This breaks on empty slots like null children. That's\n// unfortunate because it triggers the slow path all the time. We need\n// a better way to communicate whether this was a miss or null,\n// boolean, undefined, etc.\nif(oldFiber===null){oldFiber=nextOldFiber;}break;}if(shouldTrackSideEffects){if(oldFiber&&newFiber.alternate===null){// We matched the slot, but we didn't reuse the existing fiber, so we\n// need to delete the existing child.\ndeleteChild(returnFiber,oldFiber);}}lastPlacedIndex=placeChild(newFiber,lastPlacedIndex,newIdx);if(previousNewFiber===null){// TODO: Move out of the loop. This only happens for the first run.\nresultingFirstChild=newFiber;}else{// TODO: Defer siblings if we're not at the right index for this slot.\n// I.e. if we had null values before, then we want to defer this\n// for each null value. However, we also don't want to call updateSlot\n// with the previous one.\npreviousNewFiber.sibling=newFiber;}previousNewFiber=newFiber;oldFiber=nextOldFiber;}if(newIdx===newChildren.length){// We've reached the end of the new children. We can delete the rest.\ndeleteRemainingChildren(returnFiber,oldFiber);return resultingFirstChild;}if(oldFiber===null){// If we don't have any more existing children we can choose a fast path\n// since the rest will all be insertions.\nfor(;newIdx<newChildren.length;newIdx++){var _newFiber=createChild(returnFiber,newChildren[newIdx],expirationTime);if(_newFiber===null){continue;}lastPlacedIndex=placeChild(_newFiber,lastPlacedIndex,newIdx);if(previousNewFiber===null){// TODO: Move out of the loop. This only happens for the first run.\nresultingFirstChild=_newFiber;}else{previousNewFiber.sibling=_newFiber;}previousNewFiber=_newFiber;}return resultingFirstChild;}// Add all children to a key map for quick lookups.\nvar existingChildren=mapRemainingChildren(returnFiber,oldFiber);// Keep scanning and use the map to restore deleted items as moves.\nfor(;newIdx<newChildren.length;newIdx++){var _newFiber2=updateFromMap(existingChildren,returnFiber,newIdx,newChildren[newIdx],expirationTime);if(_newFiber2!==null){if(shouldTrackSideEffects){if(_newFiber2.alternate!==null){// The new fiber is a work in progress, but if there exists a\n// current, that means that we reused the fiber. We need to delete\n// it from the child list so that we don't add it to the deletion\n// list.\nexistingChildren[\"delete\"](_newFiber2.key===null?newIdx:_newFiber2.key);}}lastPlacedIndex=placeChild(_newFiber2,lastPlacedIndex,newIdx);if(previousNewFiber===null){resultingFirstChild=_newFiber2;}else{previousNewFiber.sibling=_newFiber2;}previousNewFiber=_newFiber2;}}if(shouldTrackSideEffects){// Any existing children that weren't consumed above were deleted. We need\n// to add them to the deletion list.\nexistingChildren.forEach(function(child){return deleteChild(returnFiber,child);});}return resultingFirstChild;}function reconcileChildrenIterator(returnFiber,currentFirstChild,newChildrenIterable,expirationTime){// This is the same implementation as reconcileChildrenArray(),\n// but using the iterator instead.\nvar iteratorFn=getIteratorFn(newChildrenIterable);if(!(typeof iteratorFn==='function')){{throw Error(\"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\");}}{// We don't support rendering Generators because it's a mutation.\n// See https://github.com/facebook/react/issues/12995\nif(typeof Symbol==='function'&&// $FlowFixMe Flow doesn't know about toStringTag\nnewChildrenIterable[Symbol.toStringTag]==='Generator'){!didWarnAboutGenerators?warning$1(false,'Using Generators as children is unsupported and will likely yield '+'unexpected results because enumerating a generator mutates it. '+'You may convert it to an array with `Array.from()` or the '+'`[...spread]` operator before rendering. Keep in mind '+'you might need to polyfill these features for older browsers.'):void 0;didWarnAboutGenerators=true;}// Warn about using Maps as children\nif(newChildrenIterable.entries===iteratorFn){!didWarnAboutMaps?warning$1(false,'Using Maps as children is unsupported and will likely yield '+'unexpected results. Convert it to a sequence/iterable of keyed '+'ReactElements instead.'):void 0;didWarnAboutMaps=true;}// First, validate keys.\n// We'll get a different iterator later for the main pass.\nvar _newChildren=iteratorFn.call(newChildrenIterable);if(_newChildren){var knownKeys=null;var _step=_newChildren.next();for(;!_step.done;_step=_newChildren.next()){var child=_step.value;knownKeys=warnOnInvalidKey(child,knownKeys);}}}var newChildren=iteratorFn.call(newChildrenIterable);if(!(newChildren!=null)){{throw Error(\"An iterable object provided no iterator.\");}}var resultingFirstChild=null;var previousNewFiber=null;var oldFiber=currentFirstChild;var lastPlacedIndex=0;var newIdx=0;var nextOldFiber=null;var step=newChildren.next();for(;oldFiber!==null&&!step.done;newIdx++,step=newChildren.next()){if(oldFiber.index>newIdx){nextOldFiber=oldFiber;oldFiber=null;}else{nextOldFiber=oldFiber.sibling;}var newFiber=updateSlot(returnFiber,oldFiber,step.value,expirationTime);if(newFiber===null){// TODO: This breaks on empty slots like null children. That's\n// unfortunate because it triggers the slow path all the time. We need\n// a better way to communicate whether this was a miss or null,\n// boolean, undefined, etc.\nif(oldFiber===null){oldFiber=nextOldFiber;}break;}if(shouldTrackSideEffects){if(oldFiber&&newFiber.alternate===null){// We matched the slot, but we didn't reuse the existing fiber, so we\n// need to delete the existing child.\ndeleteChild(returnFiber,oldFiber);}}lastPlacedIndex=placeChild(newFiber,lastPlacedIndex,newIdx);if(previousNewFiber===null){// TODO: Move out of the loop. This only happens for the first run.\nresultingFirstChild=newFiber;}else{// TODO: Defer siblings if we're not at the right index for this slot.\n// I.e. if we had null values before, then we want to defer this\n// for each null value. However, we also don't want to call updateSlot\n// with the previous one.\npreviousNewFiber.sibling=newFiber;}previousNewFiber=newFiber;oldFiber=nextOldFiber;}if(step.done){// We've reached the end of the new children. We can delete the rest.\ndeleteRemainingChildren(returnFiber,oldFiber);return resultingFirstChild;}if(oldFiber===null){// If we don't have any more existing children we can choose a fast path\n// since the rest will all be insertions.\nfor(;!step.done;newIdx++,step=newChildren.next()){var _newFiber3=createChild(returnFiber,step.value,expirationTime);if(_newFiber3===null){continue;}lastPlacedIndex=placeChild(_newFiber3,lastPlacedIndex,newIdx);if(previousNewFiber===null){// TODO: Move out of the loop. This only happens for the first run.\nresultingFirstChild=_newFiber3;}else{previousNewFiber.sibling=_newFiber3;}previousNewFiber=_newFiber3;}return resultingFirstChild;}// Add all children to a key map for quick lookups.\nvar existingChildren=mapRemainingChildren(returnFiber,oldFiber);// Keep scanning and use the map to restore deleted items as moves.\nfor(;!step.done;newIdx++,step=newChildren.next()){var _newFiber4=updateFromMap(existingChildren,returnFiber,newIdx,step.value,expirationTime);if(_newFiber4!==null){if(shouldTrackSideEffects){if(_newFiber4.alternate!==null){// The new fiber is a work in progress, but if there exists a\n// current, that means that we reused the fiber. We need to delete\n// it from the child list so that we don't add it to the deletion\n// list.\nexistingChildren[\"delete\"](_newFiber4.key===null?newIdx:_newFiber4.key);}}lastPlacedIndex=placeChild(_newFiber4,lastPlacedIndex,newIdx);if(previousNewFiber===null){resultingFirstChild=_newFiber4;}else{previousNewFiber.sibling=_newFiber4;}previousNewFiber=_newFiber4;}}if(shouldTrackSideEffects){// Any existing children that weren't consumed above were deleted. We need\n// to add them to the deletion list.\nexistingChildren.forEach(function(child){return deleteChild(returnFiber,child);});}return resultingFirstChild;}function reconcileSingleTextNode(returnFiber,currentFirstChild,textContent,expirationTime){// There's no need to check for keys on text nodes since we don't have a\n// way to define them.\nif(currentFirstChild!==null&¤tFirstChild.tag===HostText){// We already have an existing node so let's just update it and delete\n// the rest.\ndeleteRemainingChildren(returnFiber,currentFirstChild.sibling);var existing=useFiber(currentFirstChild,textContent,expirationTime);existing[\"return\"]=returnFiber;return existing;}// The existing first child is not a text node so we need to create one\n// and delete the existing ones.\ndeleteRemainingChildren(returnFiber,currentFirstChild);var created=createFiberFromText(textContent,returnFiber.mode,expirationTime);created[\"return\"]=returnFiber;return created;}function reconcileSingleElement(returnFiber,currentFirstChild,element,expirationTime){var key=element.key;var child=currentFirstChild;while(child!==null){// TODO: If key === null and child.key === null, then this only applies to\n// the first item in the list.\nif(child.key===key){if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:hotCompareElements(child.elementType,element.type,hotUpdateChild(child),child.type)){deleteRemainingChildren(returnFiber,child.sibling);var existing=useFiber(child,element.type===REACT_FRAGMENT_TYPE?element.props.children:element.props,expirationTime);existing.ref=coerceRef(returnFiber,child,element);existing[\"return\"]=returnFiber;{existing._debugSource=element._source;existing._debugOwner=element._owner;}return existing;}else{deleteRemainingChildren(returnFiber,child);break;}}else{deleteChild(returnFiber,child);}child=child.sibling;}if(element.type===REACT_FRAGMENT_TYPE){var created=createFiberFromFragment(element.props.children,returnFiber.mode,expirationTime,element.key);created[\"return\"]=returnFiber;return created;}else{var _created4=createFiberFromElement(element,returnFiber.mode,expirationTime);_created4.ref=coerceRef(returnFiber,currentFirstChild,element);_created4[\"return\"]=returnFiber;return _created4;}}function reconcileSinglePortal(returnFiber,currentFirstChild,portal,expirationTime){var key=portal.key;var child=currentFirstChild;while(child!==null){// TODO: If key === null and child.key === null, then this only applies to\n// the first item in the list.\nif(child.key===key){if(child.tag===HostPortal&&child.stateNode.containerInfo===portal.containerInfo&&child.stateNode.implementation===portal.implementation){deleteRemainingChildren(returnFiber,child.sibling);var existing=useFiber(child,portal.children||[],expirationTime);existing[\"return\"]=returnFiber;return existing;}else{deleteRemainingChildren(returnFiber,child);break;}}else{deleteChild(returnFiber,child);}child=child.sibling;}var created=createFiberFromPortal(portal,returnFiber.mode,expirationTime);created[\"return\"]=returnFiber;return created;}// This API will tag the children with the side-effect of the reconciliation\n// itself. They will be added to the side-effect list as we pass through the\n// children and the parent.\nfunction reconcileChildFibers(returnFiber,currentFirstChild,newChild,expirationTime){// This function is not recursive.\n// If the top level item is an array, we treat it as a set of children,\n// not as a fragment. Nested arrays on the other hand will be treated as\n// fragment nodes. Recursion happens at the normal flow.\n// Handle top level unkeyed fragments as if they were arrays.\n// This leads to an ambiguity between <>{[...]}</> and <>...</>.\n// We treat the ambiguous cases above the same.\nvar isUnkeyedTopLevelFragment=_typeof(newChild)==='object'&&newChild!==null&&newChild.type===REACT_FRAGMENT_TYPE&&newChild.key===null;if(isUnkeyedTopLevelFragment){newChild=newChild.props.children;}// Handle object types\nvar isObject=_typeof(newChild)==='object'&&newChild!==null;if(isObject){switch(newChild.$$typeof){case REACT_ELEMENT_TYPE:return placeSingleChild(reconcileSingleElement(returnFiber,currentFirstChild,newChild,expirationTime));case REACT_PORTAL_TYPE:return placeSingleChild(reconcileSinglePortal(returnFiber,currentFirstChild,newChild,expirationTime));}}if(typeof newChild==='string'||typeof newChild==='number'){return placeSingleChild(reconcileSingleTextNode(returnFiber,currentFirstChild,''+newChild,expirationTime));}if(isArray(newChild)){return reconcileChildrenArray(returnFiber,currentFirstChild,newChild,expirationTime);}if(getIteratorFn(newChild)){return reconcileChildrenIterator(returnFiber,currentFirstChild,newChild,expirationTime);}if(isObject){throwOnInvalidObjectType(returnFiber,newChild);}{if(typeof newChild==='function'){warnOnFunctionType();}}if(typeof newChild==='undefined'&&!isUnkeyedTopLevelFragment){// If the new child is undefined, and the return fiber is a composite\n// component, throw an error. If Fiber return types are disabled,\n// we already threw above.\nswitch(returnFiber.tag){case ClassComponent:{{var instance=returnFiber.stateNode;if(instance.render._isMockFunction){// We allow auto-mocks to proceed as if they're returning null.\nbreak;}}}// Intentionally fall through to the next case, which handles both\n// functions and classes\n// eslint-disable-next-lined no-fallthrough\ncase FunctionComponent:{var Component=returnFiber.type;{{throw Error((Component.displayName||Component.name||'Component')+\"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\");}}}}}// Remaining cases are all treated as empty.\nreturn deleteRemainingChildren(returnFiber,currentFirstChild);}return reconcileChildFibers;}var reconcileChildFibers=ChildReconciler(true);var mountChildFibers=ChildReconciler(false);function cloneChildFibers(current$$1,workInProgress){if(!(current$$1===null||workInProgress.child===current$$1.child)){{throw Error(\"Resuming work not yet implemented.\");}}if(workInProgress.child===null){return;}var currentChild=workInProgress.child;var newChild=createWorkInProgress(currentChild,currentChild.pendingProps,currentChild.expirationTime);workInProgress.child=newChild;newChild[\"return\"]=workInProgress;while(currentChild.sibling!==null){currentChild=currentChild.sibling;newChild=newChild.sibling=createWorkInProgress(currentChild,currentChild.pendingProps,currentChild.expirationTime);newChild[\"return\"]=workInProgress;}newChild.sibling=null;}// Reset a workInProgress child set to prepare it for a second pass.\nfunction resetChildFibers(workInProgress,renderExpirationTime){var child=workInProgress.child;while(child!==null){resetWorkInProgress(child,renderExpirationTime);child=child.sibling;}}var NO_CONTEXT={};var contextStackCursor$1=createCursor(NO_CONTEXT);var contextFiberStackCursor=createCursor(NO_CONTEXT);var rootInstanceStackCursor=createCursor(NO_CONTEXT);function requiredContext(c){if(!(c!==NO_CONTEXT)){{throw Error(\"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\");}}return c;}function getRootHostContainer(){var rootInstance=requiredContext(rootInstanceStackCursor.current);return rootInstance;}function pushHostContainer(fiber,nextRootInstance){// Push current root instance onto the stack;\n// This allows us to reset root when portals are popped.\npush(rootInstanceStackCursor,nextRootInstance,fiber);// Track the context and the Fiber that provided it.\n// This enables us to pop only Fibers that provide unique contexts.\npush(contextFiberStackCursor,fiber,fiber);// Finally, we need to push the host context to the stack.\n// However, we can't just call getRootHostContext() and push it because\n// we'd have a different number of entries on the stack depending on\n// whether getRootHostContext() throws somewhere in renderer code or not.\n// So we push an empty value first. This lets us safely unwind on errors.\npush(contextStackCursor$1,NO_CONTEXT,fiber);var nextRootContext=getRootHostContext(nextRootInstance);// Now that we know this function doesn't throw, replace it.\npop(contextStackCursor$1,fiber);push(contextStackCursor$1,nextRootContext,fiber);}function popHostContainer(fiber){pop(contextStackCursor$1,fiber);pop(contextFiberStackCursor,fiber);pop(rootInstanceStackCursor,fiber);}function getHostContext(){var context=requiredContext(contextStackCursor$1.current);return context;}function pushHostContext(fiber){var rootInstance=requiredContext(rootInstanceStackCursor.current);var context=requiredContext(contextStackCursor$1.current);var nextContext=getChildHostContext(context,fiber.type,rootInstance);// Don't push this Fiber's context unless it's unique.\nif(context===nextContext){return;}// Track the context and the Fiber that provided it.\n// This enables us to pop only Fibers that provide unique contexts.\npush(contextFiberStackCursor,fiber,fiber);push(contextStackCursor$1,nextContext,fiber);}function popHostContext(fiber){// Do not pop unless this Fiber provided the current context.\n// pushHostContext() only pushes Fibers that provide unique contexts.\nif(contextFiberStackCursor.current!==fiber){return;}pop(contextStackCursor$1,fiber);pop(contextFiberStackCursor,fiber);}var DefaultSuspenseContext=0;// The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\nvar SubtreeSuspenseContextMask=1;// Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\nvar InvisibleParentSuspenseContext=1;// Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\nvar ForceSuspenseFallback=2;var suspenseStackCursor=createCursor(DefaultSuspenseContext);function hasSuspenseContext(parentContext,flag){return(parentContext&flag)!==0;}function setDefaultShallowSuspenseContext(parentContext){return parentContext&SubtreeSuspenseContextMask;}function setShallowSuspenseContext(parentContext,shallowContext){return parentContext&SubtreeSuspenseContextMask|shallowContext;}function addSubtreeSuspenseContext(parentContext,subtreeContext){return parentContext|subtreeContext;}function pushSuspenseContext(fiber,newContext){push(suspenseStackCursor,newContext,fiber);}function popSuspenseContext(fiber){pop(suspenseStackCursor,fiber);}function shouldCaptureSuspense(workInProgress,hasInvisibleParent){// If it was the primary children that just suspended, capture and render the\n// fallback. Otherwise, don't capture and bubble to the next boundary.\nvar nextState=workInProgress.memoizedState;if(nextState!==null){if(nextState.dehydrated!==null){// A dehydrated boundary always captures.\nreturn true;}return false;}var props=workInProgress.memoizedProps;// In order to capture, the Suspense component must have a fallback prop.\nif(props.fallback===undefined){return false;}// Regular boundaries always capture.\nif(props.unstable_avoidThisFallback!==true){return true;}// If it's a boundary we should avoid, then we prefer to bubble up to the\n// parent boundary if it is currently invisible.\nif(hasInvisibleParent){return false;}// If the parent is not able to handle it, we must handle it.\nreturn true;}function findFirstSuspended(row){var node=row;while(node!==null){if(node.tag===SuspenseComponent){var state=node.memoizedState;if(state!==null){var dehydrated=state.dehydrated;if(dehydrated===null||isSuspenseInstancePending(dehydrated)||isSuspenseInstanceFallback(dehydrated)){return node;}}}else if(node.tag===SuspenseListComponent&&// revealOrder undefined can't be trusted because it don't\n// keep track of whether it suspended or not.\nnode.memoizedProps.revealOrder!==undefined){var didSuspend=(node.effectTag&DidCapture)!==NoEffect;if(didSuspend){return node;}}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===row){return null;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===row){return null;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}return null;}var emptyObject={};var isArray$2=Array.isArray;function createResponderInstance(responder,responderProps,responderState,fiber){return{fiber:fiber,props:responderProps,responder:responder,rootEventTypes:null,state:responderState};}function mountEventResponder$1(responder,responderProps,fiber,respondersMap,rootContainerInstance){var responderState=emptyObject;var getInitialState=responder.getInitialState;if(getInitialState!==null){responderState=getInitialState(responderProps);}var responderInstance=createResponderInstance(responder,responderProps,responderState,fiber);if(!rootContainerInstance){var node=fiber;while(node!==null){var tag=node.tag;if(tag===HostComponent){rootContainerInstance=node.stateNode;break;}else if(tag===HostRoot){rootContainerInstance=node.stateNode.containerInfo;break;}node=node[\"return\"];}}mountResponderInstance(responder,responderInstance,responderProps,responderState,rootContainerInstance);respondersMap.set(responder,responderInstance);}function updateEventListener(listener,fiber,visistedResponders,respondersMap,rootContainerInstance){var responder;var props;if(listener){responder=listener.responder;props=listener.props;}if(!(responder&&responder.$$typeof===REACT_RESPONDER_TYPE)){{throw Error(\"An invalid value was used as an event listener. Expect one or many event listeners created via React.unstable_useResponder().\");}}var listenerProps=props;if(visistedResponders.has(responder)){// show warning\n{warning$1(false,'Duplicate event responder \"%s\" found in event listeners. '+'Event listeners passed to elements cannot use the same event responder more than once.',responder.displayName);}return;}visistedResponders.add(responder);var responderInstance=respondersMap.get(responder);if(responderInstance===undefined){// Mount (happens in either complete or commit phase)\nmountEventResponder$1(responder,listenerProps,fiber,respondersMap,rootContainerInstance);}else{// Update (happens during commit phase only)\nresponderInstance.props=listenerProps;responderInstance.fiber=fiber;}}function updateEventListeners(listeners,fiber,rootContainerInstance){var visistedResponders=new Set();var dependencies=fiber.dependencies;if(listeners!=null){if(dependencies===null){dependencies=fiber.dependencies={expirationTime:NoWork,firstContext:null,responders:new Map()};}var respondersMap=dependencies.responders;if(respondersMap===null){respondersMap=new Map();}if(isArray$2(listeners)){for(var i=0,length=listeners.length;i<length;i++){var listener=listeners[i];updateEventListener(listener,fiber,visistedResponders,respondersMap,rootContainerInstance);}}else{updateEventListener(listeners,fiber,visistedResponders,respondersMap,rootContainerInstance);}}if(dependencies!==null){var _respondersMap=dependencies.responders;if(_respondersMap!==null){// Unmount\nvar mountedResponders=Array.from(_respondersMap.keys());for(var _i=0,_length=mountedResponders.length;_i<_length;_i++){var mountedResponder=mountedResponders[_i];if(!visistedResponders.has(mountedResponder)){var responderInstance=_respondersMap.get(mountedResponder);unmountResponderInstance(responderInstance);_respondersMap[\"delete\"](mountedResponder);}}}}}function createResponderListener(responder,props){var eventResponderListener={responder:responder,props:props};{Object.freeze(eventResponderListener);}return eventResponderListener;}var NoEffect$1=/* */0;var UnmountSnapshot=/* */2;var UnmountMutation=/* */4;var MountMutation=/* */8;var UnmountLayout=/* */16;var MountLayout=/* */32;var MountPassive=/* */64;var UnmountPassive=/* */128;var ReactCurrentDispatcher$1=ReactSharedInternals.ReactCurrentDispatcher;var ReactCurrentBatchConfig$1=ReactSharedInternals.ReactCurrentBatchConfig;var didWarnAboutMismatchedHooksForComponent;{didWarnAboutMismatchedHooksForComponent=new Set();}// These are set right before calling the component.\nvar renderExpirationTime$1=NoWork;// The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\nvar currentlyRenderingFiber$1=null;// Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\nvar currentHook=null;var nextCurrentHook=null;var firstWorkInProgressHook=null;var workInProgressHook=null;var nextWorkInProgressHook=null;var remainingExpirationTime=NoWork;var componentUpdateQueue=null;var sideEffectTag=0;// Updates scheduled during render will trigger an immediate re-render at the\n// end of the current pass. We can't store these updates on the normal queue,\n// because if the work is aborted, they should be discarded. Because this is\n// a relatively rare case, we also don't want to add an additional field to\n// either the hook or queue object types. So we store them in a lazily create\n// map of queue -> render-phase updates, which are discarded once the component\n// completes without re-rendering.\n// Whether an update was scheduled during the currently executing render pass.\nvar didScheduleRenderPhaseUpdate=false;// Lazily created map of render-phase updates\nvar renderPhaseUpdates=null;// Counter to prevent infinite loops.\nvar numberOfReRenders=0;var RE_RENDER_LIMIT=25;// In DEV, this is the name of the currently executing primitive hook\nvar currentHookNameInDev=null;// In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\nvar hookTypesDev=null;var hookTypesUpdateIndexDev=-1;// In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\nvar ignorePreviousDependencies=false;function mountHookTypesDev(){{var hookName=currentHookNameInDev;if(hookTypesDev===null){hookTypesDev=[hookName];}else{hookTypesDev.push(hookName);}}}function updateHookTypesDev(){{var hookName=currentHookNameInDev;if(hookTypesDev!==null){hookTypesUpdateIndexDev++;if(hookTypesDev[hookTypesUpdateIndexDev]!==hookName){warnOnHookMismatchInDev(hookName);}}}}function checkDepsAreArrayDev(deps){{if(deps!==undefined&&deps!==null&&!Array.isArray(deps)){// Verify deps, but only on mount to avoid extra checks.\n// It's unlikely their type would change as usually you define them inline.\nwarning$1(false,'%s received a final argument that is not an array (instead, received `%s`). When '+'specified, the final argument must be an array.',currentHookNameInDev,_typeof(deps));}}}function warnOnHookMismatchInDev(currentHookName){{var componentName=getComponentName(currentlyRenderingFiber$1.type);if(!didWarnAboutMismatchedHooksForComponent.has(componentName)){didWarnAboutMismatchedHooksForComponent.add(componentName);if(hookTypesDev!==null){var table='';var secondColumnStart=30;for(var i=0;i<=hookTypesUpdateIndexDev;i++){var oldHookName=hookTypesDev[i];var newHookName=i===hookTypesUpdateIndexDev?currentHookName:oldHookName;var row=i+1+\". \"+oldHookName;// Extra space so second column lines up\n// lol @ IE not supporting String#repeat\nwhile(row.length<secondColumnStart){row+=' ';}row+=newHookName+'\\n';table+=row;}warning$1(false,'React has detected a change in the order of Hooks called by %s. '+'This will lead to bugs and errors if not fixed. '+'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n'+' Previous render Next render\\n'+' ------------------------------------------------------\\n'+'%s'+' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n',componentName,table);}}}}function throwInvalidHookError(){{{throw Error(\"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\");}}}function areHookInputsEqual(nextDeps,prevDeps){{if(ignorePreviousDependencies){// Only true when this component is being hot reloaded.\nreturn false;}}if(prevDeps===null){{warning$1(false,'%s received a final argument during this render, but not during '+'the previous render. Even though the final argument is optional, '+'its type cannot change between renders.',currentHookNameInDev);}return false;}{// Don't bother comparing lengths in prod because these arrays should be\n// passed inline.\nif(nextDeps.length!==prevDeps.length){warning$1(false,'The final argument passed to %s changed size between renders. The '+'order and size of this array must remain constant.\\n\\n'+'Previous: %s\\n'+'Incoming: %s',currentHookNameInDev,\"[\"+prevDeps.join(', ')+\"]\",\"[\"+nextDeps.join(', ')+\"]\");}}for(var i=0;i<prevDeps.length&&i<nextDeps.length;i++){if(is$1(nextDeps[i],prevDeps[i])){continue;}return false;}return true;}function renderWithHooks(current,workInProgress,Component,props,refOrContext,nextRenderExpirationTime){renderExpirationTime$1=nextRenderExpirationTime;currentlyRenderingFiber$1=workInProgress;nextCurrentHook=current!==null?current.memoizedState:null;{hookTypesDev=current!==null?current._debugHookTypes:null;hookTypesUpdateIndexDev=-1;// Used for hot reloading:\nignorePreviousDependencies=current!==null&¤t.type!==workInProgress.type;}// The following should have already been reset\n// currentHook = null;\n// workInProgressHook = null;\n// remainingExpirationTime = NoWork;\n// componentUpdateQueue = null;\n// didScheduleRenderPhaseUpdate = false;\n// renderPhaseUpdates = null;\n// numberOfReRenders = 0;\n// sideEffectTag = 0;\n// TODO Warn if no hooks are used at all during mount, then some are used during update.\n// Currently we will identify the update render as a mount because nextCurrentHook === null.\n// This is tricky because it's valid for certain types of components (e.g. React.lazy)\n// Using nextCurrentHook to differentiate between mount/update only works if at least one stateful hook is used.\n// Non-stateful hooks (e.g. context) don't get added to memoizedState,\n// so nextCurrentHook would be null during updates and mounts.\n{if(nextCurrentHook!==null){ReactCurrentDispatcher$1.current=HooksDispatcherOnUpdateInDEV;}else if(hookTypesDev!==null){// This dispatcher handles an edge case where a component is updating,\n// but no stateful hooks have been used.\n// We want to match the production code behavior (which will use HooksDispatcherOnMount),\n// but with the extra DEV validation to ensure hooks ordering hasn't changed.\n// This dispatcher does that.\nReactCurrentDispatcher$1.current=HooksDispatcherOnMountWithHookTypesInDEV;}else{ReactCurrentDispatcher$1.current=HooksDispatcherOnMountInDEV;}}var children=Component(props,refOrContext);if(didScheduleRenderPhaseUpdate){do{didScheduleRenderPhaseUpdate=false;numberOfReRenders+=1;{// Even when hot reloading, allow dependencies to stabilize\n// after first render to prevent infinite render phase updates.\nignorePreviousDependencies=false;}// Start over from the beginning of the list\nnextCurrentHook=current!==null?current.memoizedState:null;nextWorkInProgressHook=firstWorkInProgressHook;currentHook=null;workInProgressHook=null;componentUpdateQueue=null;{// Also validate hook order for cascading updates.\nhookTypesUpdateIndexDev=-1;}ReactCurrentDispatcher$1.current=HooksDispatcherOnUpdateInDEV;children=Component(props,refOrContext);}while(didScheduleRenderPhaseUpdate);renderPhaseUpdates=null;numberOfReRenders=0;}// We can assume the previous dispatcher is always this one, since we set it\n// at the beginning of the render phase and there's no re-entrancy.\nReactCurrentDispatcher$1.current=ContextOnlyDispatcher;var renderedWork=currentlyRenderingFiber$1;renderedWork.memoizedState=firstWorkInProgressHook;renderedWork.expirationTime=remainingExpirationTime;renderedWork.updateQueue=componentUpdateQueue;renderedWork.effectTag|=sideEffectTag;{renderedWork._debugHookTypes=hookTypesDev;}// This check uses currentHook so that it works the same in DEV and prod bundles.\n// hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\nvar didRenderTooFewHooks=currentHook!==null&¤tHook.next!==null;renderExpirationTime$1=NoWork;currentlyRenderingFiber$1=null;currentHook=null;nextCurrentHook=null;firstWorkInProgressHook=null;workInProgressHook=null;nextWorkInProgressHook=null;{currentHookNameInDev=null;hookTypesDev=null;hookTypesUpdateIndexDev=-1;}remainingExpirationTime=NoWork;componentUpdateQueue=null;sideEffectTag=0;// These were reset above\n// didScheduleRenderPhaseUpdate = false;\n// renderPhaseUpdates = null;\n// numberOfReRenders = 0;\nif(!!didRenderTooFewHooks){{throw Error(\"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\");}}return children;}function bailoutHooks(current,workInProgress,expirationTime){workInProgress.updateQueue=current.updateQueue;workInProgress.effectTag&=~(Passive|Update);if(current.expirationTime<=expirationTime){current.expirationTime=NoWork;}}function resetHooks(){// We can assume the previous dispatcher is always this one, since we set it\n// at the beginning of the render phase and there's no re-entrancy.\nReactCurrentDispatcher$1.current=ContextOnlyDispatcher;// This is used to reset the state of this module when a component throws.\n// It's also called inside mountIndeterminateComponent if we determine the\n// component is a module-style component.\nrenderExpirationTime$1=NoWork;currentlyRenderingFiber$1=null;currentHook=null;nextCurrentHook=null;firstWorkInProgressHook=null;workInProgressHook=null;nextWorkInProgressHook=null;{hookTypesDev=null;hookTypesUpdateIndexDev=-1;currentHookNameInDev=null;}remainingExpirationTime=NoWork;componentUpdateQueue=null;sideEffectTag=0;didScheduleRenderPhaseUpdate=false;renderPhaseUpdates=null;numberOfReRenders=0;}function mountWorkInProgressHook(){var hook={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};if(workInProgressHook===null){// This is the first hook in the list\nfirstWorkInProgressHook=workInProgressHook=hook;}else{// Append to the end of the list\nworkInProgressHook=workInProgressHook.next=hook;}return workInProgressHook;}function updateWorkInProgressHook(){// This function is used both for updates and for re-renders triggered by a\n// render phase update. It assumes there is either a current hook we can\n// clone, or a work-in-progress hook from a previous render pass that we can\n// use as a base. When we reach the end of the base list, we must switch to\n// the dispatcher used for mounts.\nif(nextWorkInProgressHook!==null){// There's already a work-in-progress. Reuse it.\nworkInProgressHook=nextWorkInProgressHook;nextWorkInProgressHook=workInProgressHook.next;currentHook=nextCurrentHook;nextCurrentHook=currentHook!==null?currentHook.next:null;}else{// Clone from the current hook.\nif(!(nextCurrentHook!==null)){{throw Error(\"Rendered more hooks than during the previous render.\");}}currentHook=nextCurrentHook;var newHook={memoizedState:currentHook.memoizedState,baseState:currentHook.baseState,queue:currentHook.queue,baseUpdate:currentHook.baseUpdate,next:null};if(workInProgressHook===null){// This is the first hook in the list.\nworkInProgressHook=firstWorkInProgressHook=newHook;}else{// Append to the end of the list.\nworkInProgressHook=workInProgressHook.next=newHook;}nextCurrentHook=currentHook.next;}return workInProgressHook;}function createFunctionComponentUpdateQueue(){return{lastEffect:null};}function basicStateReducer(state,action){return typeof action==='function'?action(state):action;}function mountReducer(reducer,initialArg,init){var hook=mountWorkInProgressHook();var initialState;if(init!==undefined){initialState=init(initialArg);}else{initialState=initialArg;}hook.memoizedState=hook.baseState=initialState;var queue=hook.queue={last:null,dispatch:null,lastRenderedReducer:reducer,lastRenderedState:initialState};var dispatch=queue.dispatch=dispatchAction.bind(null,// Flow doesn't know this is non-null, but we do.\ncurrentlyRenderingFiber$1,queue);return[hook.memoizedState,dispatch];}function updateReducer(reducer,initialArg,init){var hook=updateWorkInProgressHook();var queue=hook.queue;if(!(queue!==null)){{throw Error(\"Should have a queue. This is likely a bug in React. Please file an issue.\");}}queue.lastRenderedReducer=reducer;if(numberOfReRenders>0){// This is a re-render. Apply the new render phase updates to the previous\n// work-in-progress hook.\nvar _dispatch=queue.dispatch;if(renderPhaseUpdates!==null){// Render phase updates are stored in a map of queue -> linked list\nvar firstRenderPhaseUpdate=renderPhaseUpdates.get(queue);if(firstRenderPhaseUpdate!==undefined){renderPhaseUpdates[\"delete\"](queue);var newState=hook.memoizedState;var update=firstRenderPhaseUpdate;do{// Process this render phase update. We don't have to check the\n// priority because it will always be the same as the current\n// render's.\nvar action=update.action;newState=reducer(newState,action);update=update.next;}while(update!==null);// Mark that the fiber performed work, but only if the new state is\n// different from the current state.\nif(!is$1(newState,hook.memoizedState)){markWorkInProgressReceivedUpdate();}hook.memoizedState=newState;// Don't persist the state accumulated from the render phase updates to\n// the base state unless the queue is empty.\n// TODO: Not sure if this is the desired semantics, but it's what we\n// do for gDSFP. I can't remember why.\nif(hook.baseUpdate===queue.last){hook.baseState=newState;}queue.lastRenderedState=newState;return[newState,_dispatch];}}return[hook.memoizedState,_dispatch];}// The last update in the entire queue\nvar last=queue.last;// The last update that is part of the base state.\nvar baseUpdate=hook.baseUpdate;var baseState=hook.baseState;// Find the first unprocessed update.\nvar first;if(baseUpdate!==null){if(last!==null){// For the first update, the queue is a circular linked list where\n// `queue.last.next = queue.first`. Once the first update commits, and\n// the `baseUpdate` is no longer empty, we can unravel the list.\nlast.next=null;}first=baseUpdate.next;}else{first=last!==null?last.next:null;}if(first!==null){var _newState=baseState;var newBaseState=null;var newBaseUpdate=null;var prevUpdate=baseUpdate;var _update=first;var didSkip=false;do{var updateExpirationTime=_update.expirationTime;if(updateExpirationTime<renderExpirationTime$1){// Priority is insufficient. Skip this update. If this is the first\n// skipped update, the previous update/state is the new base\n// update/state.\nif(!didSkip){didSkip=true;newBaseUpdate=prevUpdate;newBaseState=_newState;}// Update the remaining priority in the queue.\nif(updateExpirationTime>remainingExpirationTime){remainingExpirationTime=updateExpirationTime;markUnprocessedUpdateTime(remainingExpirationTime);}}else{// This update does have sufficient priority.\n// Mark the event time of this update as relevant to this render pass.\n// TODO: This should ideally use the true event time of this update rather than\n// its priority which is a derived and not reverseable value.\n// TODO: We should skip this update if it was already committed but currently\n// we have no way of detecting the difference between a committed and suspended\n// update here.\nmarkRenderEventTimeAndConfig(updateExpirationTime,_update.suspenseConfig);// Process this update.\nif(_update.eagerReducer===reducer){// If this update was processed eagerly, and its reducer matches the\n// current reducer, we can use the eagerly computed state.\n_newState=_update.eagerState;}else{var _action=_update.action;_newState=reducer(_newState,_action);}}prevUpdate=_update;_update=_update.next;}while(_update!==null&&_update!==first);if(!didSkip){newBaseUpdate=prevUpdate;newBaseState=_newState;}// Mark that the fiber performed work, but only if the new state is\n// different from the current state.\nif(!is$1(_newState,hook.memoizedState)){markWorkInProgressReceivedUpdate();}hook.memoizedState=_newState;hook.baseUpdate=newBaseUpdate;hook.baseState=newBaseState;queue.lastRenderedState=_newState;}var dispatch=queue.dispatch;return[hook.memoizedState,dispatch];}function mountState(initialState){var hook=mountWorkInProgressHook();if(typeof initialState==='function'){initialState=initialState();}hook.memoizedState=hook.baseState=initialState;var queue=hook.queue={last:null,dispatch:null,lastRenderedReducer:basicStateReducer,lastRenderedState:initialState};var dispatch=queue.dispatch=dispatchAction.bind(null,// Flow doesn't know this is non-null, but we do.\ncurrentlyRenderingFiber$1,queue);return[hook.memoizedState,dispatch];}function updateState(initialState){return updateReducer(basicStateReducer,initialState);}function pushEffect(tag,create,destroy,deps){var effect={tag:tag,create:create,destroy:destroy,deps:deps,// Circular\nnext:null};if(componentUpdateQueue===null){componentUpdateQueue=createFunctionComponentUpdateQueue();componentUpdateQueue.lastEffect=effect.next=effect;}else{var lastEffect=componentUpdateQueue.lastEffect;if(lastEffect===null){componentUpdateQueue.lastEffect=effect.next=effect;}else{var firstEffect=lastEffect.next;lastEffect.next=effect;effect.next=firstEffect;componentUpdateQueue.lastEffect=effect;}}return effect;}function mountRef(initialValue){var hook=mountWorkInProgressHook();var ref={current:initialValue};{Object.seal(ref);}hook.memoizedState=ref;return ref;}function updateRef(initialValue){var hook=updateWorkInProgressHook();return hook.memoizedState;}function mountEffectImpl(fiberEffectTag,hookEffectTag,create,deps){var hook=mountWorkInProgressHook();var nextDeps=deps===undefined?null:deps;sideEffectTag|=fiberEffectTag;hook.memoizedState=pushEffect(hookEffectTag,create,undefined,nextDeps);}function updateEffectImpl(fiberEffectTag,hookEffectTag,create,deps){var hook=updateWorkInProgressHook();var nextDeps=deps===undefined?null:deps;var destroy=undefined;if(currentHook!==null){var prevEffect=currentHook.memoizedState;destroy=prevEffect.destroy;if(nextDeps!==null){var prevDeps=prevEffect.deps;if(areHookInputsEqual(nextDeps,prevDeps)){pushEffect(NoEffect$1,create,destroy,nextDeps);return;}}}sideEffectTag|=fiberEffectTag;hook.memoizedState=pushEffect(hookEffectTag,create,destroy,nextDeps);}function mountEffect(create,deps){{// $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\nif('undefined'!==typeof jest){warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);}}return mountEffectImpl(Update|Passive,UnmountPassive|MountPassive,create,deps);}function updateEffect(create,deps){{// $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\nif('undefined'!==typeof jest){warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);}}return updateEffectImpl(Update|Passive,UnmountPassive|MountPassive,create,deps);}function mountLayoutEffect(create,deps){return mountEffectImpl(Update,UnmountMutation|MountLayout,create,deps);}function updateLayoutEffect(create,deps){return updateEffectImpl(Update,UnmountMutation|MountLayout,create,deps);}function imperativeHandleEffect(create,ref){if(typeof ref==='function'){var refCallback=ref;var _inst=create();refCallback(_inst);return function(){refCallback(null);};}else if(ref!==null&&ref!==undefined){var refObject=ref;{!refObject.hasOwnProperty('current')?warning$1(false,'Expected useImperativeHandle() first argument to either be a '+'ref callback or React.createRef() object. Instead received: %s.','an object with keys {'+Object.keys(refObject).join(', ')+'}'):void 0;}var _inst2=create();refObject.current=_inst2;return function(){refObject.current=null;};}}function mountImperativeHandle(ref,create,deps){{!(typeof create==='function')?warning$1(false,'Expected useImperativeHandle() second argument to be a function '+'that creates a handle. Instead received: %s.',create!==null?_typeof(create):'null'):void 0;}// TODO: If deps are provided, should we skip comparing the ref itself?\nvar effectDeps=deps!==null&&deps!==undefined?deps.concat([ref]):null;return mountEffectImpl(Update,UnmountMutation|MountLayout,imperativeHandleEffect.bind(null,create,ref),effectDeps);}function updateImperativeHandle(ref,create,deps){{!(typeof create==='function')?warning$1(false,'Expected useImperativeHandle() second argument to be a function '+'that creates a handle. Instead received: %s.',create!==null?_typeof(create):'null'):void 0;}// TODO: If deps are provided, should we skip comparing the ref itself?\nvar effectDeps=deps!==null&&deps!==undefined?deps.concat([ref]):null;return updateEffectImpl(Update,UnmountMutation|MountLayout,imperativeHandleEffect.bind(null,create,ref),effectDeps);}function mountDebugValue(value,formatterFn){// This hook is normally a no-op.\n// The react-debug-hooks package injects its own implementation\n// so that e.g. DevTools can display custom hook values.\n}var updateDebugValue=mountDebugValue;function mountCallback(callback,deps){var hook=mountWorkInProgressHook();var nextDeps=deps===undefined?null:deps;hook.memoizedState=[callback,nextDeps];return callback;}function updateCallback(callback,deps){var hook=updateWorkInProgressHook();var nextDeps=deps===undefined?null:deps;var prevState=hook.memoizedState;if(prevState!==null){if(nextDeps!==null){var prevDeps=prevState[1];if(areHookInputsEqual(nextDeps,prevDeps)){return prevState[0];}}}hook.memoizedState=[callback,nextDeps];return callback;}function mountMemo(nextCreate,deps){var hook=mountWorkInProgressHook();var nextDeps=deps===undefined?null:deps;var nextValue=nextCreate();hook.memoizedState=[nextValue,nextDeps];return nextValue;}function updateMemo(nextCreate,deps){var hook=updateWorkInProgressHook();var nextDeps=deps===undefined?null:deps;var prevState=hook.memoizedState;if(prevState!==null){// Assume these are defined. If they're not, areHookInputsEqual will warn.\nif(nextDeps!==null){var prevDeps=prevState[1];if(areHookInputsEqual(nextDeps,prevDeps)){return prevState[0];}}}var nextValue=nextCreate();hook.memoizedState=[nextValue,nextDeps];return nextValue;}function mountDeferredValue(value,config){var _mountState=mountState(value),prevValue=_mountState[0],setValue=_mountState[1];mountEffect(function(){Scheduler.unstable_next(function(){var previousConfig=ReactCurrentBatchConfig$1.suspense;ReactCurrentBatchConfig$1.suspense=config===undefined?null:config;try{setValue(value);}finally{ReactCurrentBatchConfig$1.suspense=previousConfig;}});},[value,config]);return prevValue;}function updateDeferredValue(value,config){var _updateState=updateState(value),prevValue=_updateState[0],setValue=_updateState[1];updateEffect(function(){Scheduler.unstable_next(function(){var previousConfig=ReactCurrentBatchConfig$1.suspense;ReactCurrentBatchConfig$1.suspense=config===undefined?null:config;try{setValue(value);}finally{ReactCurrentBatchConfig$1.suspense=previousConfig;}});},[value,config]);return prevValue;}function mountTransition(config){var _mountState2=mountState(false),isPending=_mountState2[0],setPending=_mountState2[1];var startTransition=mountCallback(function(callback){setPending(true);Scheduler.unstable_next(function(){var previousConfig=ReactCurrentBatchConfig$1.suspense;ReactCurrentBatchConfig$1.suspense=config===undefined?null:config;try{setPending(false);callback();}finally{ReactCurrentBatchConfig$1.suspense=previousConfig;}});},[config,isPending]);return[startTransition,isPending];}function updateTransition(config){var _updateState2=updateState(false),isPending=_updateState2[0],setPending=_updateState2[1];var startTransition=updateCallback(function(callback){setPending(true);Scheduler.unstable_next(function(){var previousConfig=ReactCurrentBatchConfig$1.suspense;ReactCurrentBatchConfig$1.suspense=config===undefined?null:config;try{setPending(false);callback();}finally{ReactCurrentBatchConfig$1.suspense=previousConfig;}});},[config,isPending]);return[startTransition,isPending];}function dispatchAction(fiber,queue,action){if(!(numberOfReRenders<RE_RENDER_LIMIT)){{throw Error(\"Too many re-renders. React limits the number of renders to prevent an infinite loop.\");}}{!(typeof arguments[3]!=='function')?warning$1(false,\"State updates from the useState() and useReducer() Hooks don't support the \"+'second callback argument. To execute a side effect after '+'rendering, declare it in the component body with useEffect().'):void 0;}var alternate=fiber.alternate;if(fiber===currentlyRenderingFiber$1||alternate!==null&&alternate===currentlyRenderingFiber$1){// This is a render phase update. Stash it in a lazily-created map of\n// queue -> linked list of updates. After this render pass, we'll restart\n// and apply the stashed updates on top of the work-in-progress hook.\ndidScheduleRenderPhaseUpdate=true;var update={expirationTime:renderExpirationTime$1,suspenseConfig:null,action:action,eagerReducer:null,eagerState:null,next:null};{update.priority=getCurrentPriorityLevel();}if(renderPhaseUpdates===null){renderPhaseUpdates=new Map();}var firstRenderPhaseUpdate=renderPhaseUpdates.get(queue);if(firstRenderPhaseUpdate===undefined){renderPhaseUpdates.set(queue,update);}else{// Append the update to the end of the list.\nvar lastRenderPhaseUpdate=firstRenderPhaseUpdate;while(lastRenderPhaseUpdate.next!==null){lastRenderPhaseUpdate=lastRenderPhaseUpdate.next;}lastRenderPhaseUpdate.next=update;}}else{var currentTime=requestCurrentTimeForUpdate();var suspenseConfig=requestCurrentSuspenseConfig();var expirationTime=computeExpirationForFiber(currentTime,fiber,suspenseConfig);var _update2={expirationTime:expirationTime,suspenseConfig:suspenseConfig,action:action,eagerReducer:null,eagerState:null,next:null};{_update2.priority=getCurrentPriorityLevel();}// Append the update to the end of the list.\nvar last=queue.last;if(last===null){// This is the first update. Create a circular list.\n_update2.next=_update2;}else{var first=last.next;if(first!==null){// Still circular.\n_update2.next=first;}last.next=_update2;}queue.last=_update2;if(fiber.expirationTime===NoWork&&(alternate===null||alternate.expirationTime===NoWork)){// The queue is currently empty, which means we can eagerly compute the\n// next state before entering the render phase. If the new state is the\n// same as the current state, we may be able to bail out entirely.\nvar lastRenderedReducer=queue.lastRenderedReducer;if(lastRenderedReducer!==null){var prevDispatcher;{prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;}try{var currentState=queue.lastRenderedState;var eagerState=lastRenderedReducer(currentState,action);// Stash the eagerly computed state, and the reducer used to compute\n// it, on the update object. If the reducer hasn't changed by the\n// time we enter the render phase, then the eager state can be used\n// without calling the reducer again.\n_update2.eagerReducer=lastRenderedReducer;_update2.eagerState=eagerState;if(is$1(eagerState,currentState)){// Fast path. We can bail out without scheduling React to re-render.\n// It's still possible that we'll need to rebase this update later,\n// if the component re-renders for a different reason and by that\n// time the reducer has changed.\nreturn;}}catch(error){// Suppress the error. It will throw again in the render phase.\n}finally{{ReactCurrentDispatcher$1.current=prevDispatcher;}}}}{// $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\nif('undefined'!==typeof jest){warnIfNotScopedWithMatchingAct(fiber);warnIfNotCurrentlyActingUpdatesInDev(fiber);}}scheduleWork(fiber,expirationTime);}}var ContextOnlyDispatcher={readContext:_readContext,useCallback:throwInvalidHookError,useContext:throwInvalidHookError,useEffect:throwInvalidHookError,useImperativeHandle:throwInvalidHookError,useLayoutEffect:throwInvalidHookError,useMemo:throwInvalidHookError,useReducer:throwInvalidHookError,useRef:throwInvalidHookError,useState:throwInvalidHookError,useDebugValue:throwInvalidHookError,useResponder:throwInvalidHookError,useDeferredValue:throwInvalidHookError,useTransition:throwInvalidHookError};var HooksDispatcherOnMountInDEV=null;var HooksDispatcherOnMountWithHookTypesInDEV=null;var HooksDispatcherOnUpdateInDEV=null;var InvalidNestedHooksDispatcherOnMountInDEV=null;var InvalidNestedHooksDispatcherOnUpdateInDEV=null;{var warnInvalidContextAccess=function warnInvalidContextAccess(){warning$1(false,'Context can only be read while React is rendering. '+'In classes, you can read it in the render method or getDerivedStateFromProps. '+'In function components, you can read it directly in the function body, but not '+'inside Hooks like useReducer() or useMemo().');};var warnInvalidHookAccess=function warnInvalidHookAccess(){warning$1(false,'Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. '+'You can only call Hooks at the top level of your React function. '+'For more information, see '+'https://fb.me/rules-of-hooks');};HooksDispatcherOnMountInDEV={readContext:function readContext(context,observedBits){return _readContext(context,observedBits);},useCallback:function useCallback(callback,deps){currentHookNameInDev='useCallback';mountHookTypesDev();checkDepsAreArrayDev(deps);return mountCallback(callback,deps);},useContext:function useContext(context,observedBits){currentHookNameInDev='useContext';mountHookTypesDev();return _readContext(context,observedBits);},useEffect:function useEffect(create,deps){currentHookNameInDev='useEffect';mountHookTypesDev();checkDepsAreArrayDev(deps);return mountEffect(create,deps);},useImperativeHandle:function useImperativeHandle(ref,create,deps){currentHookNameInDev='useImperativeHandle';mountHookTypesDev();checkDepsAreArrayDev(deps);return mountImperativeHandle(ref,create,deps);},useLayoutEffect:function useLayoutEffect(create,deps){currentHookNameInDev='useLayoutEffect';mountHookTypesDev();checkDepsAreArrayDev(deps);return mountLayoutEffect(create,deps);},useMemo:function useMemo(create,deps){currentHookNameInDev='useMemo';mountHookTypesDev();checkDepsAreArrayDev(deps);var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountMemo(create,deps);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useReducer:function useReducer(reducer,initialArg,init){currentHookNameInDev='useReducer';mountHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountReducer(reducer,initialArg,init);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useRef:function useRef(initialValue){currentHookNameInDev='useRef';mountHookTypesDev();return mountRef(initialValue);},useState:function useState(initialState){currentHookNameInDev='useState';mountHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountState(initialState);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useDebugValue:function useDebugValue(value,formatterFn){currentHookNameInDev='useDebugValue';mountHookTypesDev();return mountDebugValue(value,formatterFn);},useResponder:function useResponder(responder,props){currentHookNameInDev='useResponder';mountHookTypesDev();return createResponderListener(responder,props);},useDeferredValue:function useDeferredValue(value,config){currentHookNameInDev='useDeferredValue';mountHookTypesDev();return mountDeferredValue(value,config);},useTransition:function useTransition(config){currentHookNameInDev='useTransition';mountHookTypesDev();return mountTransition(config);}};HooksDispatcherOnMountWithHookTypesInDEV={readContext:function readContext(context,observedBits){return _readContext(context,observedBits);},useCallback:function useCallback(callback,deps){currentHookNameInDev='useCallback';updateHookTypesDev();return mountCallback(callback,deps);},useContext:function useContext(context,observedBits){currentHookNameInDev='useContext';updateHookTypesDev();return _readContext(context,observedBits);},useEffect:function useEffect(create,deps){currentHookNameInDev='useEffect';updateHookTypesDev();return mountEffect(create,deps);},useImperativeHandle:function useImperativeHandle(ref,create,deps){currentHookNameInDev='useImperativeHandle';updateHookTypesDev();return mountImperativeHandle(ref,create,deps);},useLayoutEffect:function useLayoutEffect(create,deps){currentHookNameInDev='useLayoutEffect';updateHookTypesDev();return mountLayoutEffect(create,deps);},useMemo:function useMemo(create,deps){currentHookNameInDev='useMemo';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountMemo(create,deps);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useReducer:function useReducer(reducer,initialArg,init){currentHookNameInDev='useReducer';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountReducer(reducer,initialArg,init);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useRef:function useRef(initialValue){currentHookNameInDev='useRef';updateHookTypesDev();return mountRef(initialValue);},useState:function useState(initialState){currentHookNameInDev='useState';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountState(initialState);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useDebugValue:function useDebugValue(value,formatterFn){currentHookNameInDev='useDebugValue';updateHookTypesDev();return mountDebugValue(value,formatterFn);},useResponder:function useResponder(responder,props){currentHookNameInDev='useResponder';updateHookTypesDev();return createResponderListener(responder,props);},useDeferredValue:function useDeferredValue(value,config){currentHookNameInDev='useDeferredValue';updateHookTypesDev();return mountDeferredValue(value,config);},useTransition:function useTransition(config){currentHookNameInDev='useTransition';updateHookTypesDev();return mountTransition(config);}};HooksDispatcherOnUpdateInDEV={readContext:function readContext(context,observedBits){return _readContext(context,observedBits);},useCallback:function useCallback(callback,deps){currentHookNameInDev='useCallback';updateHookTypesDev();return updateCallback(callback,deps);},useContext:function useContext(context,observedBits){currentHookNameInDev='useContext';updateHookTypesDev();return _readContext(context,observedBits);},useEffect:function useEffect(create,deps){currentHookNameInDev='useEffect';updateHookTypesDev();return updateEffect(create,deps);},useImperativeHandle:function useImperativeHandle(ref,create,deps){currentHookNameInDev='useImperativeHandle';updateHookTypesDev();return updateImperativeHandle(ref,create,deps);},useLayoutEffect:function useLayoutEffect(create,deps){currentHookNameInDev='useLayoutEffect';updateHookTypesDev();return updateLayoutEffect(create,deps);},useMemo:function useMemo(create,deps){currentHookNameInDev='useMemo';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateMemo(create,deps);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useReducer:function useReducer(reducer,initialArg,init){currentHookNameInDev='useReducer';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateReducer(reducer,initialArg,init);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useRef:function useRef(initialValue){currentHookNameInDev='useRef';updateHookTypesDev();return updateRef(initialValue);},useState:function useState(initialState){currentHookNameInDev='useState';updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateState(initialState);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useDebugValue:function useDebugValue(value,formatterFn){currentHookNameInDev='useDebugValue';updateHookTypesDev();return updateDebugValue(value,formatterFn);},useResponder:function useResponder(responder,props){currentHookNameInDev='useResponder';updateHookTypesDev();return createResponderListener(responder,props);},useDeferredValue:function useDeferredValue(value,config){currentHookNameInDev='useDeferredValue';updateHookTypesDev();return updateDeferredValue(value,config);},useTransition:function useTransition(config){currentHookNameInDev='useTransition';updateHookTypesDev();return updateTransition(config);}};InvalidNestedHooksDispatcherOnMountInDEV={readContext:function readContext(context,observedBits){warnInvalidContextAccess();return _readContext(context,observedBits);},useCallback:function useCallback(callback,deps){currentHookNameInDev='useCallback';warnInvalidHookAccess();mountHookTypesDev();return mountCallback(callback,deps);},useContext:function useContext(context,observedBits){currentHookNameInDev='useContext';warnInvalidHookAccess();mountHookTypesDev();return _readContext(context,observedBits);},useEffect:function useEffect(create,deps){currentHookNameInDev='useEffect';warnInvalidHookAccess();mountHookTypesDev();return mountEffect(create,deps);},useImperativeHandle:function useImperativeHandle(ref,create,deps){currentHookNameInDev='useImperativeHandle';warnInvalidHookAccess();mountHookTypesDev();return mountImperativeHandle(ref,create,deps);},useLayoutEffect:function useLayoutEffect(create,deps){currentHookNameInDev='useLayoutEffect';warnInvalidHookAccess();mountHookTypesDev();return mountLayoutEffect(create,deps);},useMemo:function useMemo(create,deps){currentHookNameInDev='useMemo';warnInvalidHookAccess();mountHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountMemo(create,deps);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useReducer:function useReducer(reducer,initialArg,init){currentHookNameInDev='useReducer';warnInvalidHookAccess();mountHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountReducer(reducer,initialArg,init);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useRef:function useRef(initialValue){currentHookNameInDev='useRef';warnInvalidHookAccess();mountHookTypesDev();return mountRef(initialValue);},useState:function useState(initialState){currentHookNameInDev='useState';warnInvalidHookAccess();mountHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnMountInDEV;try{return mountState(initialState);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useDebugValue:function useDebugValue(value,formatterFn){currentHookNameInDev='useDebugValue';warnInvalidHookAccess();mountHookTypesDev();return mountDebugValue(value,formatterFn);},useResponder:function useResponder(responder,props){currentHookNameInDev='useResponder';warnInvalidHookAccess();mountHookTypesDev();return createResponderListener(responder,props);},useDeferredValue:function useDeferredValue(value,config){currentHookNameInDev='useDeferredValue';warnInvalidHookAccess();mountHookTypesDev();return mountDeferredValue(value,config);},useTransition:function useTransition(config){currentHookNameInDev='useTransition';warnInvalidHookAccess();mountHookTypesDev();return mountTransition(config);}};InvalidNestedHooksDispatcherOnUpdateInDEV={readContext:function readContext(context,observedBits){warnInvalidContextAccess();return _readContext(context,observedBits);},useCallback:function useCallback(callback,deps){currentHookNameInDev='useCallback';warnInvalidHookAccess();updateHookTypesDev();return updateCallback(callback,deps);},useContext:function useContext(context,observedBits){currentHookNameInDev='useContext';warnInvalidHookAccess();updateHookTypesDev();return _readContext(context,observedBits);},useEffect:function useEffect(create,deps){currentHookNameInDev='useEffect';warnInvalidHookAccess();updateHookTypesDev();return updateEffect(create,deps);},useImperativeHandle:function useImperativeHandle(ref,create,deps){currentHookNameInDev='useImperativeHandle';warnInvalidHookAccess();updateHookTypesDev();return updateImperativeHandle(ref,create,deps);},useLayoutEffect:function useLayoutEffect(create,deps){currentHookNameInDev='useLayoutEffect';warnInvalidHookAccess();updateHookTypesDev();return updateLayoutEffect(create,deps);},useMemo:function useMemo(create,deps){currentHookNameInDev='useMemo';warnInvalidHookAccess();updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateMemo(create,deps);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useReducer:function useReducer(reducer,initialArg,init){currentHookNameInDev='useReducer';warnInvalidHookAccess();updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateReducer(reducer,initialArg,init);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useRef:function useRef(initialValue){currentHookNameInDev='useRef';warnInvalidHookAccess();updateHookTypesDev();return updateRef(initialValue);},useState:function useState(initialState){currentHookNameInDev='useState';warnInvalidHookAccess();updateHookTypesDev();var prevDispatcher=ReactCurrentDispatcher$1.current;ReactCurrentDispatcher$1.current=InvalidNestedHooksDispatcherOnUpdateInDEV;try{return updateState(initialState);}finally{ReactCurrentDispatcher$1.current=prevDispatcher;}},useDebugValue:function useDebugValue(value,formatterFn){currentHookNameInDev='useDebugValue';warnInvalidHookAccess();updateHookTypesDev();return updateDebugValue(value,formatterFn);},useResponder:function useResponder(responder,props){currentHookNameInDev='useResponder';warnInvalidHookAccess();updateHookTypesDev();return createResponderListener(responder,props);},useDeferredValue:function useDeferredValue(value,config){currentHookNameInDev='useDeferredValue';warnInvalidHookAccess();updateHookTypesDev();return updateDeferredValue(value,config);},useTransition:function useTransition(config){currentHookNameInDev='useTransition';warnInvalidHookAccess();updateHookTypesDev();return updateTransition(config);}};}// CommonJS interop named imports.\nvar now$1=Scheduler.unstable_now;var commitTime=0;var profilerStartTime=-1;function getCommitTime(){return commitTime;}function recordCommitTime(){if(!enableProfilerTimer){return;}commitTime=now$1();}function startProfilerTimer(fiber){if(!enableProfilerTimer){return;}profilerStartTime=now$1();if(fiber.actualStartTime<0){fiber.actualStartTime=now$1();}}function stopProfilerTimerIfRunning(fiber){if(!enableProfilerTimer){return;}profilerStartTime=-1;}function stopProfilerTimerIfRunningAndRecordDelta(fiber,overrideBaseTime){if(!enableProfilerTimer){return;}if(profilerStartTime>=0){var elapsedTime=now$1()-profilerStartTime;fiber.actualDuration+=elapsedTime;if(overrideBaseTime){fiber.selfBaseDuration=elapsedTime;}profilerStartTime=-1;}}// This may have been an insertion or a hydration.\nvar hydrationParentFiber=null;var nextHydratableInstance=null;var isHydrating=false;function warnIfHydrating(){{!!isHydrating?warning$1(false,'We should not be hydrating here. This is a bug in React. Please file a bug.'):void 0;}}function enterHydrationState(fiber){if(!supportsHydration){return false;}var parentInstance=fiber.stateNode.containerInfo;nextHydratableInstance=getFirstHydratableChild(parentInstance);hydrationParentFiber=fiber;isHydrating=true;return true;}function reenterHydrationStateFromDehydratedSuspenseInstance(fiber,suspenseInstance){if(!supportsHydration){return false;}nextHydratableInstance=getNextHydratableSibling(suspenseInstance);popToNextHostParent(fiber);isHydrating=true;return true;}function deleteHydratableInstance(returnFiber,instance){{switch(returnFiber.tag){case HostRoot:didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo,instance);break;case HostComponent:didNotHydrateInstance(returnFiber.type,returnFiber.memoizedProps,returnFiber.stateNode,instance);break;}}var childToDelete=createFiberFromHostInstanceForDeletion();childToDelete.stateNode=instance;childToDelete[\"return\"]=returnFiber;childToDelete.effectTag=Deletion;// This might seem like it belongs on progressedFirstDeletion. However,\n// these children are not part of the reconciliation list of children.\n// Even if we abort and rereconcile the children, that will try to hydrate\n// again and the nodes are still in the host tree so these will be\n// recreated.\nif(returnFiber.lastEffect!==null){returnFiber.lastEffect.nextEffect=childToDelete;returnFiber.lastEffect=childToDelete;}else{returnFiber.firstEffect=returnFiber.lastEffect=childToDelete;}}function insertNonHydratedInstance(returnFiber,fiber){fiber.effectTag=fiber.effectTag&~Hydrating|Placement;{switch(returnFiber.tag){case HostRoot:{var parentContainer=returnFiber.stateNode.containerInfo;switch(fiber.tag){case HostComponent:var type=fiber.type;var props=fiber.pendingProps;didNotFindHydratableContainerInstance(parentContainer,type,props);break;case HostText:var text=fiber.pendingProps;didNotFindHydratableContainerTextInstance(parentContainer,text);break;case SuspenseComponent:break;}break;}case HostComponent:{var parentType=returnFiber.type;var parentProps=returnFiber.memoizedProps;var parentInstance=returnFiber.stateNode;switch(fiber.tag){case HostComponent:var _type=fiber.type;var _props=fiber.pendingProps;didNotFindHydratableInstance(parentType,parentProps,parentInstance,_type,_props);break;case HostText:var _text=fiber.pendingProps;didNotFindHydratableTextInstance(parentType,parentProps,parentInstance,_text);break;case SuspenseComponent:didNotFindHydratableSuspenseInstance(parentType,parentProps,parentInstance);break;}break;}default:return;}}}function tryHydrate(fiber,nextInstance){switch(fiber.tag){case HostComponent:{var type=fiber.type;var props=fiber.pendingProps;var instance=canHydrateInstance(nextInstance,type,props);if(instance!==null){fiber.stateNode=instance;return true;}return false;}case HostText:{var text=fiber.pendingProps;var textInstance=canHydrateTextInstance(nextInstance,text);if(textInstance!==null){fiber.stateNode=textInstance;return true;}return false;}case SuspenseComponent:{if(enableSuspenseServerRenderer){var suspenseInstance=canHydrateSuspenseInstance(nextInstance);if(suspenseInstance!==null){var suspenseState={dehydrated:suspenseInstance,retryTime:Never};fiber.memoizedState=suspenseState;// Store the dehydrated fragment as a child fiber.\n// This simplifies the code for getHostSibling and deleting nodes,\n// since it doesn't have to consider all Suspense boundaries and\n// check if they're dehydrated ones or not.\nvar dehydratedFragment=createFiberFromDehydratedFragment(suspenseInstance);dehydratedFragment[\"return\"]=fiber;fiber.child=dehydratedFragment;return true;}}return false;}default:return false;}}function tryToClaimNextHydratableInstance(fiber){if(!isHydrating){return;}var nextInstance=nextHydratableInstance;if(!nextInstance){// Nothing to hydrate. Make it an insertion.\ninsertNonHydratedInstance(hydrationParentFiber,fiber);isHydrating=false;hydrationParentFiber=fiber;return;}var firstAttemptedInstance=nextInstance;if(!tryHydrate(fiber,nextInstance)){// If we can't hydrate this instance let's try the next one.\n// We use this as a heuristic. It's based on intuition and not data so it\n// might be flawed or unnecessary.\nnextInstance=getNextHydratableSibling(firstAttemptedInstance);if(!nextInstance||!tryHydrate(fiber,nextInstance)){// Nothing to hydrate. Make it an insertion.\ninsertNonHydratedInstance(hydrationParentFiber,fiber);isHydrating=false;hydrationParentFiber=fiber;return;}// We matched the next one, we'll now assume that the first one was\n// superfluous and we'll delete it. Since we can't eagerly delete it\n// we'll have to schedule a deletion. To do that, this node needs a dummy\n// fiber associated with it.\ndeleteHydratableInstance(hydrationParentFiber,firstAttemptedInstance);}hydrationParentFiber=fiber;nextHydratableInstance=getFirstHydratableChild(nextInstance);}function prepareToHydrateHostInstance(fiber,rootContainerInstance,hostContext){if(!supportsHydration){{{throw Error(\"Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");}}}var instance=fiber.stateNode;var updatePayload=hydrateInstance(instance,fiber.type,fiber.memoizedProps,rootContainerInstance,hostContext,fiber);// TODO: Type this specific to this type of component.\nfiber.updateQueue=updatePayload;// If the update payload indicates that there is a change or if there\n// is a new ref we mark this as an update.\nif(updatePayload!==null){return true;}return false;}function prepareToHydrateHostTextInstance(fiber){if(!supportsHydration){{{throw Error(\"Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");}}}var textInstance=fiber.stateNode;var textContent=fiber.memoizedProps;var shouldUpdate=hydrateTextInstance(textInstance,textContent,fiber);{if(shouldUpdate){// We assume that prepareToHydrateHostTextInstance is called in a context where the\n// hydration parent is the parent host component of this host text.\nvar returnFiber=hydrationParentFiber;if(returnFiber!==null){switch(returnFiber.tag){case HostRoot:{var parentContainer=returnFiber.stateNode.containerInfo;didNotMatchHydratedContainerTextInstance(parentContainer,textInstance,textContent);break;}case HostComponent:{var parentType=returnFiber.type;var parentProps=returnFiber.memoizedProps;var parentInstance=returnFiber.stateNode;didNotMatchHydratedTextInstance(parentType,parentProps,parentInstance,textInstance,textContent);break;}}}}}return shouldUpdate;}function prepareToHydrateHostSuspenseInstance(fiber){if(!supportsHydration){{{throw Error(\"Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");}}}var suspenseState=fiber.memoizedState;var suspenseInstance=suspenseState!==null?suspenseState.dehydrated:null;if(!suspenseInstance){{throw Error(\"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\");}}hydrateSuspenseInstance(suspenseInstance,fiber);}function skipPastDehydratedSuspenseInstance(fiber){if(!supportsHydration){{{throw Error(\"Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");}}}var suspenseState=fiber.memoizedState;var suspenseInstance=suspenseState!==null?suspenseState.dehydrated:null;if(!suspenseInstance){{throw Error(\"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\");}}return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);}function popToNextHostParent(fiber){var parent=fiber[\"return\"];while(parent!==null&&parent.tag!==HostComponent&&parent.tag!==HostRoot&&parent.tag!==SuspenseComponent){parent=parent[\"return\"];}hydrationParentFiber=parent;}function popHydrationState(fiber){if(!supportsHydration){return false;}if(fiber!==hydrationParentFiber){// We're deeper than the current hydration context, inside an inserted\n// tree.\nreturn false;}if(!isHydrating){// If we're not currently hydrating but we're in a hydration context, then\n// we were an insertion and now need to pop up reenter hydration of our\n// siblings.\npopToNextHostParent(fiber);isHydrating=true;return false;}var type=fiber.type;// If we have any remaining hydratable nodes, we need to delete them now.\n// We only do this deeper than head and body since they tend to have random\n// other nodes in them. We also ignore components with pure text content in\n// side of them.\n// TODO: Better heuristic.\nif(fiber.tag!==HostComponent||type!=='head'&&type!=='body'&&!shouldSetTextContent(type,fiber.memoizedProps)){var nextInstance=nextHydratableInstance;while(nextInstance){deleteHydratableInstance(fiber,nextInstance);nextInstance=getNextHydratableSibling(nextInstance);}}popToNextHostParent(fiber);if(fiber.tag===SuspenseComponent){nextHydratableInstance=skipPastDehydratedSuspenseInstance(fiber);}else{nextHydratableInstance=hydrationParentFiber?getNextHydratableSibling(fiber.stateNode):null;}return true;}function resetHydrationState(){if(!supportsHydration){return;}hydrationParentFiber=null;nextHydratableInstance=null;isHydrating=false;}var ReactCurrentOwner$3=ReactSharedInternals.ReactCurrentOwner;var didReceiveUpdate=false;var didWarnAboutBadClass;var didWarnAboutModulePatternComponent;var didWarnAboutContextTypeOnFunctionComponent;var didWarnAboutGetDerivedStateOnFunctionComponent;var didWarnAboutFunctionRefs;var didWarnAboutReassigningProps;var didWarnAboutMaxDuration;var didWarnAboutRevealOrder;var didWarnAboutTailOptions;var didWarnAboutDefaultPropsOnFunctionComponent;{didWarnAboutBadClass={};didWarnAboutModulePatternComponent={};didWarnAboutContextTypeOnFunctionComponent={};didWarnAboutGetDerivedStateOnFunctionComponent={};didWarnAboutFunctionRefs={};didWarnAboutReassigningProps=false;didWarnAboutMaxDuration=false;didWarnAboutRevealOrder={};didWarnAboutTailOptions={};didWarnAboutDefaultPropsOnFunctionComponent={};}function reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime){if(current$$1===null){// If this is a fresh new component that hasn't been rendered yet, we\n// won't update its child set by applying minimal side-effects. Instead,\n// we will add them all to the child before it gets rendered. That means\n// we can optimize this reconciliation pass by not tracking side-effects.\nworkInProgress.child=mountChildFibers(workInProgress,null,nextChildren,renderExpirationTime);}else{// If the current child is the same as the work in progress, it means that\n// we haven't yet started any work on these children. Therefore, we use\n// the clone algorithm to create a copy of all the current children.\n// If we had any progressed work already, that is invalid at this point so\n// let's throw it out.\nworkInProgress.child=reconcileChildFibers(workInProgress,current$$1.child,nextChildren,renderExpirationTime);}}function forceUnmountCurrentAndReconcile(current$$1,workInProgress,nextChildren,renderExpirationTime){// This function is fork of reconcileChildren. It's used in cases where we\n// want to reconcile without matching against the existing set. This has the\n// effect of all current children being unmounted; even if the type and key\n// are the same, the old child is unmounted and a new child is created.\n//\n// To do this, we're going to go through the reconcile algorithm twice. In\n// the first pass, we schedule a deletion for all the current children by\n// passing null.\nworkInProgress.child=reconcileChildFibers(workInProgress,current$$1.child,null,renderExpirationTime);// In the second pass, we mount the new children. The trick here is that we\n// pass null in place of where we usually pass the current child set. This has\n// the effect of remounting all children regardless of whether their their\n// identity matches.\nworkInProgress.child=reconcileChildFibers(workInProgress,null,nextChildren,renderExpirationTime);}function updateForwardRef(current$$1,workInProgress,Component,nextProps,renderExpirationTime){// TODO: current can be non-null here even if the component\n// hasn't yet mounted. This happens after the first render suspends.\n// We'll need to figure out if this is fine or can cause issues.\n{if(workInProgress.type!==workInProgress.elementType){// Lazy component props can't be validated in createElement\n// because they're only guaranteed to be resolved here.\nvar innerPropTypes=Component.propTypes;if(innerPropTypes){checkPropTypes(innerPropTypes,nextProps,// Resolved props\n'prop',getComponentName(Component),getCurrentFiberStackInDev);}}}var render=Component.render;var ref=workInProgress.ref;// The rest is a fork of updateFunctionComponent\nvar nextChildren;prepareToReadContext(workInProgress,renderExpirationTime);{ReactCurrentOwner$3.current=workInProgress;setCurrentPhase('render');nextChildren=renderWithHooks(current$$1,workInProgress,render,nextProps,ref,renderExpirationTime);if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){// Only double-render components with Hooks\nif(workInProgress.memoizedState!==null){nextChildren=renderWithHooks(current$$1,workInProgress,render,nextProps,ref,renderExpirationTime);}}setCurrentPhase(null);}if(current$$1!==null&&!didReceiveUpdate){bailoutHooks(current$$1,workInProgress,renderExpirationTime);return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateMemoComponent(current$$1,workInProgress,Component,nextProps,updateExpirationTime,renderExpirationTime){if(current$$1===null){var type=Component.type;if(isSimpleFunctionComponent(type)&&Component.compare===null&&// SimpleMemoComponent codepath doesn't resolve outer props either.\nComponent.defaultProps===undefined){var resolvedType=type;{resolvedType=resolveFunctionForHotReloading(type);}// If this is a plain function component without default props,\n// and with only the default shallow comparison, we upgrade it\n// to a SimpleMemoComponent to allow fast path updates.\nworkInProgress.tag=SimpleMemoComponent;workInProgress.type=resolvedType;{validateFunctionComponentInDev(workInProgress,type);}return updateSimpleMemoComponent(current$$1,workInProgress,resolvedType,nextProps,updateExpirationTime,renderExpirationTime);}{var innerPropTypes=type.propTypes;if(innerPropTypes){// Inner memo component props aren't currently validated in createElement.\n// We could move it there, but we'd still need this for lazy code path.\ncheckPropTypes(innerPropTypes,nextProps,// Resolved props\n'prop',getComponentName(type),getCurrentFiberStackInDev);}}var child=createFiberFromTypeAndProps(Component.type,null,nextProps,null,workInProgress.mode,renderExpirationTime);child.ref=workInProgress.ref;child[\"return\"]=workInProgress;workInProgress.child=child;return child;}{var _type=Component.type;var _innerPropTypes=_type.propTypes;if(_innerPropTypes){// Inner memo component props aren't currently validated in createElement.\n// We could move it there, but we'd still need this for lazy code path.\ncheckPropTypes(_innerPropTypes,nextProps,// Resolved props\n'prop',getComponentName(_type),getCurrentFiberStackInDev);}}var currentChild=current$$1.child;// This is always exactly one child\nif(updateExpirationTime<renderExpirationTime){// This will be the props with resolved defaultProps,\n// unlike current.memoizedProps which will be the unresolved ones.\nvar prevProps=currentChild.memoizedProps;// Default to shallow comparison\nvar compare=Component.compare;compare=compare!==null?compare:shallowEqual;if(compare(prevProps,nextProps)&¤t$$1.ref===workInProgress.ref){return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;var newChild=createWorkInProgress(currentChild,nextProps,renderExpirationTime);newChild.ref=workInProgress.ref;newChild[\"return\"]=workInProgress;workInProgress.child=newChild;return newChild;}function updateSimpleMemoComponent(current$$1,workInProgress,Component,nextProps,updateExpirationTime,renderExpirationTime){// TODO: current can be non-null here even if the component\n// hasn't yet mounted. This happens when the inner render suspends.\n// We'll need to figure out if this is fine or can cause issues.\n{if(workInProgress.type!==workInProgress.elementType){// Lazy component props can't be validated in createElement\n// because they're only guaranteed to be resolved here.\nvar outerMemoType=workInProgress.elementType;if(outerMemoType.$$typeof===REACT_LAZY_TYPE){// We warn when you define propTypes on lazy()\n// so let's just skip over it to find memo() outer wrapper.\n// Inner props for memo are validated later.\nouterMemoType=refineResolvedLazyComponent(outerMemoType);}var outerPropTypes=outerMemoType&&outerMemoType.propTypes;if(outerPropTypes){checkPropTypes(outerPropTypes,nextProps,// Resolved (SimpleMemoComponent has no defaultProps)\n'prop',getComponentName(outerMemoType),getCurrentFiberStackInDev);}// Inner propTypes will be validated in the function component path.\n}}if(current$$1!==null){var prevProps=current$$1.memoizedProps;if(shallowEqual(prevProps,nextProps)&¤t$$1.ref===workInProgress.ref&&// Prevent bailout if the implementation changed due to hot reload:\nworkInProgress.type===current$$1.type){didReceiveUpdate=false;if(updateExpirationTime<renderExpirationTime){return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}}}return updateFunctionComponent(current$$1,workInProgress,Component,nextProps,renderExpirationTime);}function updateFragment(current$$1,workInProgress,renderExpirationTime){var nextChildren=workInProgress.pendingProps;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateMode(current$$1,workInProgress,renderExpirationTime){var nextChildren=workInProgress.pendingProps.children;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateProfiler(current$$1,workInProgress,renderExpirationTime){if(enableProfilerTimer){workInProgress.effectTag|=Update;}var nextProps=workInProgress.pendingProps;var nextChildren=nextProps.children;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function markRef(current$$1,workInProgress){var ref=workInProgress.ref;if(current$$1===null&&ref!==null||current$$1!==null&¤t$$1.ref!==ref){// Schedule a Ref effect\nworkInProgress.effectTag|=Ref;}}function updateFunctionComponent(current$$1,workInProgress,Component,nextProps,renderExpirationTime){{if(workInProgress.type!==workInProgress.elementType){// Lazy component props can't be validated in createElement\n// because they're only guaranteed to be resolved here.\nvar innerPropTypes=Component.propTypes;if(innerPropTypes){checkPropTypes(innerPropTypes,nextProps,// Resolved props\n'prop',getComponentName(Component),getCurrentFiberStackInDev);}}}var context;if(!disableLegacyContext){var unmaskedContext=getUnmaskedContext(workInProgress,Component,true);context=getMaskedContext(workInProgress,unmaskedContext);}var nextChildren;prepareToReadContext(workInProgress,renderExpirationTime);{ReactCurrentOwner$3.current=workInProgress;setCurrentPhase('render');nextChildren=renderWithHooks(current$$1,workInProgress,Component,nextProps,context,renderExpirationTime);if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){// Only double-render components with Hooks\nif(workInProgress.memoizedState!==null){nextChildren=renderWithHooks(current$$1,workInProgress,Component,nextProps,context,renderExpirationTime);}}setCurrentPhase(null);}if(current$$1!==null&&!didReceiveUpdate){bailoutHooks(current$$1,workInProgress,renderExpirationTime);return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateClassComponent(current$$1,workInProgress,Component,nextProps,renderExpirationTime){{if(workInProgress.type!==workInProgress.elementType){// Lazy component props can't be validated in createElement\n// because they're only guaranteed to be resolved here.\nvar innerPropTypes=Component.propTypes;if(innerPropTypes){checkPropTypes(innerPropTypes,nextProps,// Resolved props\n'prop',getComponentName(Component),getCurrentFiberStackInDev);}}}// Push context providers early to prevent context stack mismatches.\n// During mounting we don't know the child context yet as the instance doesn't exist.\n// We will invalidate the child context in finishClassComponent() right after rendering.\nvar hasContext;if(isContextProvider(Component)){hasContext=true;pushContextProvider(workInProgress);}else{hasContext=false;}prepareToReadContext(workInProgress,renderExpirationTime);var instance=workInProgress.stateNode;var shouldUpdate;if(instance===null){if(current$$1!==null){// An class component without an instance only mounts if it suspended\n// inside a non- concurrent tree, in an inconsistent state. We want to\n// tree it like a new mount, even though an empty version of it already\n// committed. Disconnect the alternate pointers.\ncurrent$$1.alternate=null;workInProgress.alternate=null;// Since this is conceptually a new fiber, schedule a Placement effect\nworkInProgress.effectTag|=Placement;}// In the initial pass we might need to construct the instance.\nconstructClassInstance(workInProgress,Component,nextProps,renderExpirationTime);mountClassInstance(workInProgress,Component,nextProps,renderExpirationTime);shouldUpdate=true;}else if(current$$1===null){// In a resume, we'll already have an instance we can reuse.\nshouldUpdate=resumeMountClassInstance(workInProgress,Component,nextProps,renderExpirationTime);}else{shouldUpdate=updateClassInstance(current$$1,workInProgress,Component,nextProps,renderExpirationTime);}var nextUnitOfWork=finishClassComponent(current$$1,workInProgress,Component,shouldUpdate,hasContext,renderExpirationTime);{var inst=workInProgress.stateNode;if(inst.props!==nextProps){!didWarnAboutReassigningProps?warning$1(false,'It looks like %s is reassigning its own `this.props` while rendering. '+'This is not supported and can lead to confusing bugs.',getComponentName(workInProgress.type)||'a component'):void 0;didWarnAboutReassigningProps=true;}}return nextUnitOfWork;}function finishClassComponent(current$$1,workInProgress,Component,shouldUpdate,hasContext,renderExpirationTime){// Refs should update even if shouldComponentUpdate returns false\nmarkRef(current$$1,workInProgress);var didCaptureError=(workInProgress.effectTag&DidCapture)!==NoEffect;if(!shouldUpdate&&!didCaptureError){// Context providers should defer to sCU for rendering\nif(hasContext){invalidateContextProvider(workInProgress,Component,false);}return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}var instance=workInProgress.stateNode;// Rerender\nReactCurrentOwner$3.current=workInProgress;var nextChildren;if(didCaptureError&&typeof Component.getDerivedStateFromError!=='function'){// If we captured an error, but getDerivedStateFrom catch is not defined,\n// unmount all the children. componentDidCatch will schedule an update to\n// re-render a fallback. This is temporary until we migrate everyone to\n// the new API.\n// TODO: Warn in a future release.\nnextChildren=null;if(enableProfilerTimer){stopProfilerTimerIfRunning(workInProgress);}}else{{setCurrentPhase('render');nextChildren=instance.render();if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){instance.render();}setCurrentPhase(null);}}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;if(current$$1!==null&&didCaptureError){// If we're recovering from an error, reconcile without reusing any of\n// the existing children. Conceptually, the normal children and the children\n// that are shown on error are two different sets, so we shouldn't reuse\n// normal children even if their identities match.\nforceUnmountCurrentAndReconcile(current$$1,workInProgress,nextChildren,renderExpirationTime);}else{reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);}// Memoize state using the values we just used to render.\n// TODO: Restructure so we never read values from the instance.\nworkInProgress.memoizedState=instance.state;// The context might have changed so we need to recalculate it.\nif(hasContext){invalidateContextProvider(workInProgress,Component,true);}return workInProgress.child;}function pushHostRootContext(workInProgress){var root=workInProgress.stateNode;if(root.pendingContext){pushTopLevelContextObject(workInProgress,root.pendingContext,root.pendingContext!==root.context);}else if(root.context){// Should always be set\npushTopLevelContextObject(workInProgress,root.context,false);}pushHostContainer(workInProgress,root.containerInfo);}function updateHostRoot(current$$1,workInProgress,renderExpirationTime){pushHostRootContext(workInProgress);var updateQueue=workInProgress.updateQueue;if(!(updateQueue!==null)){{throw Error(\"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\");}}var nextProps=workInProgress.pendingProps;var prevState=workInProgress.memoizedState;var prevChildren=prevState!==null?prevState.element:null;processUpdateQueue(workInProgress,updateQueue,nextProps,null,renderExpirationTime);var nextState=workInProgress.memoizedState;// Caution: React DevTools currently depends on this property\n// being called \"element\".\nvar nextChildren=nextState.element;if(nextChildren===prevChildren){// If the state is the same as before, that's a bailout because we had\n// no work that expires at this time.\nresetHydrationState();return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}var root=workInProgress.stateNode;if(root.hydrate&&enterHydrationState(workInProgress)){// If we don't have any current children this might be the first pass.\n// We always try to hydrate. If this isn't a hydration pass there won't\n// be any children to hydrate which is effectively the same thing as\n// not hydrating.\nvar child=mountChildFibers(workInProgress,null,nextChildren,renderExpirationTime);workInProgress.child=child;var node=child;while(node){// Mark each child as hydrating. This is a fast path to know whether this\n// tree is part of a hydrating tree. This is used to determine if a child\n// node has fully mounted yet, and for scheduling event replaying.\n// Conceptually this is similar to Placement in that a new subtree is\n// inserted into the React tree here. It just happens to not need DOM\n// mutations because it already exists.\nnode.effectTag=node.effectTag&~Placement|Hydrating;node=node.sibling;}}else{// Otherwise reset hydration state in case we aborted and resumed another\n// root.\nreconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);resetHydrationState();}return workInProgress.child;}function updateHostComponent(current$$1,workInProgress,renderExpirationTime){pushHostContext(workInProgress);if(current$$1===null){tryToClaimNextHydratableInstance(workInProgress);}var type=workInProgress.type;var nextProps=workInProgress.pendingProps;var prevProps=current$$1!==null?current$$1.memoizedProps:null;var nextChildren=nextProps.children;var isDirectTextChild=shouldSetTextContent(type,nextProps);if(isDirectTextChild){// We special case a direct text child of a host node. This is a common\n// case. We won't handle it as a reified child. We will instead handle\n// this in the host environment that also have access to this prop. That\n// avoids allocating another HostText fiber and traversing it.\nnextChildren=null;}else if(prevProps!==null&&shouldSetTextContent(type,prevProps)){// If we're switching from a direct text child to a normal child, or to\n// empty, we need to schedule the text content to be reset.\nworkInProgress.effectTag|=ContentReset;}markRef(current$$1,workInProgress);// Check the host config to see if the children are offscreen/hidden.\nif(workInProgress.mode&ConcurrentMode&&renderExpirationTime!==Never&&shouldDeprioritizeSubtree(type,nextProps)){if(enableSchedulerTracing){markSpawnedWork(Never);}// Schedule this fiber to re-render at offscreen priority. Then bailout.\nworkInProgress.expirationTime=workInProgress.childExpirationTime=Never;return null;}reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateHostText(current$$1,workInProgress){if(current$$1===null){tryToClaimNextHydratableInstance(workInProgress);}// Nothing to do here. This is terminal. We'll do the completion step\n// immediately after.\nreturn null;}function mountLazyComponent(_current,workInProgress,elementType,updateExpirationTime,renderExpirationTime){if(_current!==null){// An lazy component only mounts if it suspended inside a non-\n// concurrent tree, in an inconsistent state. We want to treat it like\n// a new mount, even though an empty version of it already committed.\n// Disconnect the alternate pointers.\n_current.alternate=null;workInProgress.alternate=null;// Since this is conceptually a new fiber, schedule a Placement effect\nworkInProgress.effectTag|=Placement;}var props=workInProgress.pendingProps;// We can't start a User Timing measurement with correct label yet.\n// Cancel and resume right after we know the tag.\ncancelWorkTimer(workInProgress);var Component=readLazyComponentType(elementType);// Store the unwrapped component in the type.\nworkInProgress.type=Component;var resolvedTag=workInProgress.tag=resolveLazyComponentTag(Component);startWorkTimer(workInProgress);var resolvedProps=resolveDefaultProps(Component,props);var child;switch(resolvedTag){case FunctionComponent:{{validateFunctionComponentInDev(workInProgress,Component);workInProgress.type=Component=resolveFunctionForHotReloading(Component);}child=updateFunctionComponent(null,workInProgress,Component,resolvedProps,renderExpirationTime);break;}case ClassComponent:{{workInProgress.type=Component=resolveClassForHotReloading(Component);}child=updateClassComponent(null,workInProgress,Component,resolvedProps,renderExpirationTime);break;}case ForwardRef:{{workInProgress.type=Component=resolveForwardRefForHotReloading(Component);}child=updateForwardRef(null,workInProgress,Component,resolvedProps,renderExpirationTime);break;}case MemoComponent:{{if(workInProgress.type!==workInProgress.elementType){var outerPropTypes=Component.propTypes;if(outerPropTypes){checkPropTypes(outerPropTypes,resolvedProps,// Resolved for outer only\n'prop',getComponentName(Component),getCurrentFiberStackInDev);}}}child=updateMemoComponent(null,workInProgress,Component,resolveDefaultProps(Component.type,resolvedProps),// The inner type can have defaults too\nupdateExpirationTime,renderExpirationTime);break;}default:{var hint='';{if(Component!==null&&_typeof(Component)==='object'&&Component.$$typeof===REACT_LAZY_TYPE){hint=' Did you wrap a component in React.lazy() more than once?';}}// This message intentionally doesn't mention ForwardRef or MemoComponent\n// because the fact that it's a separate type of work is an\n// implementation detail.\n{{throw Error(\"Element type is invalid. Received a promise that resolves to: \"+Component+\". Lazy element type must resolve to a class or function.\"+hint);}}}}return child;}function mountIncompleteClassComponent(_current,workInProgress,Component,nextProps,renderExpirationTime){if(_current!==null){// An incomplete component only mounts if it suspended inside a non-\n// concurrent tree, in an inconsistent state. We want to treat it like\n// a new mount, even though an empty version of it already committed.\n// Disconnect the alternate pointers.\n_current.alternate=null;workInProgress.alternate=null;// Since this is conceptually a new fiber, schedule a Placement effect\nworkInProgress.effectTag|=Placement;}// Promote the fiber to a class and try rendering again.\nworkInProgress.tag=ClassComponent;// The rest of this function is a fork of `updateClassComponent`\n// Push context providers early to prevent context stack mismatches.\n// During mounting we don't know the child context yet as the instance doesn't exist.\n// We will invalidate the child context in finishClassComponent() right after rendering.\nvar hasContext;if(isContextProvider(Component)){hasContext=true;pushContextProvider(workInProgress);}else{hasContext=false;}prepareToReadContext(workInProgress,renderExpirationTime);constructClassInstance(workInProgress,Component,nextProps,renderExpirationTime);mountClassInstance(workInProgress,Component,nextProps,renderExpirationTime);return finishClassComponent(null,workInProgress,Component,true,hasContext,renderExpirationTime);}function mountIndeterminateComponent(_current,workInProgress,Component,renderExpirationTime){if(_current!==null){// An indeterminate component only mounts if it suspended inside a non-\n// concurrent tree, in an inconsistent state. We want to treat it like\n// a new mount, even though an empty version of it already committed.\n// Disconnect the alternate pointers.\n_current.alternate=null;workInProgress.alternate=null;// Since this is conceptually a new fiber, schedule a Placement effect\nworkInProgress.effectTag|=Placement;}var props=workInProgress.pendingProps;var context;if(!disableLegacyContext){var unmaskedContext=getUnmaskedContext(workInProgress,Component,false);context=getMaskedContext(workInProgress,unmaskedContext);}prepareToReadContext(workInProgress,renderExpirationTime);var value;{if(Component.prototype&&typeof Component.prototype.render==='function'){var componentName=getComponentName(Component)||'Unknown';if(!didWarnAboutBadClass[componentName]){warningWithoutStack$1(false,\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \"+'This is likely to cause errors. Change %s to extend React.Component instead.',componentName,componentName);didWarnAboutBadClass[componentName]=true;}}if(workInProgress.mode&StrictMode){ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress,null);}ReactCurrentOwner$3.current=workInProgress;value=renderWithHooks(null,workInProgress,Component,props,context,renderExpirationTime);}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;if(_typeof(value)==='object'&&value!==null&&typeof value.render==='function'&&value.$$typeof===undefined){{var _componentName=getComponentName(Component)||'Unknown';if(!didWarnAboutModulePatternComponent[_componentName]){warningWithoutStack$1(false,'The <%s /> component appears to be a function component that returns a class instance. '+'Change %s to a class that extends React.Component instead. '+\"If you can't use a class try assigning the prototype on the function as a workaround. \"+\"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \"+'cannot be called with `new` by React.',_componentName,_componentName,_componentName);didWarnAboutModulePatternComponent[_componentName]=true;}}// Proceed under the assumption that this is a class instance\nworkInProgress.tag=ClassComponent;// Throw out any hooks that were used.\nresetHooks();// Push context providers early to prevent context stack mismatches.\n// During mounting we don't know the child context yet as the instance doesn't exist.\n// We will invalidate the child context in finishClassComponent() right after rendering.\nvar hasContext=false;if(isContextProvider(Component)){hasContext=true;pushContextProvider(workInProgress);}else{hasContext=false;}workInProgress.memoizedState=value.state!==null&&value.state!==undefined?value.state:null;var getDerivedStateFromProps=Component.getDerivedStateFromProps;if(typeof getDerivedStateFromProps==='function'){applyDerivedStateFromProps(workInProgress,Component,getDerivedStateFromProps,props);}adoptClassInstance(workInProgress,value);mountClassInstance(workInProgress,Component,props,renderExpirationTime);return finishClassComponent(null,workInProgress,Component,true,hasContext,renderExpirationTime);}else{// Proceed under the assumption that this is a function component\nworkInProgress.tag=FunctionComponent;{if(disableLegacyContext&&Component.contextTypes){warningWithoutStack$1(false,'%s uses the legacy contextTypes API which is no longer supported. '+'Use React.createContext() with React.useContext() instead.',getComponentName(Component)||'Unknown');}if(debugRenderPhaseSideEffectsForStrictMode&&workInProgress.mode&StrictMode){// Only double-render components with Hooks\nif(workInProgress.memoizedState!==null){value=renderWithHooks(null,workInProgress,Component,props,context,renderExpirationTime);}}}reconcileChildren(null,workInProgress,value,renderExpirationTime);{validateFunctionComponentInDev(workInProgress,Component);}return workInProgress.child;}}function validateFunctionComponentInDev(workInProgress,Component){if(Component){!!Component.childContextTypes?warningWithoutStack$1(false,'%s(...): childContextTypes cannot be defined on a function component.',Component.displayName||Component.name||'Component'):void 0;}if(workInProgress.ref!==null){var info='';var ownerName=getCurrentFiberOwnerNameInDevOrNull();if(ownerName){info+='\\n\\nCheck the render method of `'+ownerName+'`.';}var warningKey=ownerName||workInProgress._debugID||'';var debugSource=workInProgress._debugSource;if(debugSource){warningKey=debugSource.fileName+':'+debugSource.lineNumber;}if(!didWarnAboutFunctionRefs[warningKey]){didWarnAboutFunctionRefs[warningKey]=true;warning$1(false,'Function components cannot be given refs. '+'Attempts to access this ref will fail. '+'Did you mean to use React.forwardRef()?%s',info);}}if(warnAboutDefaultPropsOnFunctionComponents&&Component.defaultProps!==undefined){var componentName=getComponentName(Component)||'Unknown';if(!didWarnAboutDefaultPropsOnFunctionComponent[componentName]){warningWithoutStack$1(false,'%s: Support for defaultProps will be removed from function components '+'in a future major release. Use JavaScript default parameters instead.',componentName);didWarnAboutDefaultPropsOnFunctionComponent[componentName]=true;}}if(typeof Component.getDerivedStateFromProps==='function'){var _componentName2=getComponentName(Component)||'Unknown';if(!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]){warningWithoutStack$1(false,'%s: Function components do not support getDerivedStateFromProps.',_componentName2);didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]=true;}}if(_typeof(Component.contextType)==='object'&&Component.contextType!==null){var _componentName3=getComponentName(Component)||'Unknown';if(!didWarnAboutContextTypeOnFunctionComponent[_componentName3]){warningWithoutStack$1(false,'%s: Function components do not support contextType.',_componentName3);didWarnAboutContextTypeOnFunctionComponent[_componentName3]=true;}}}var SUSPENDED_MARKER={dehydrated:null,retryTime:NoWork};function shouldRemainOnFallback(suspenseContext,current$$1,workInProgress){// If the context is telling us that we should show a fallback, and we're not\n// already showing content, then we should show the fallback instead.\nreturn hasSuspenseContext(suspenseContext,ForceSuspenseFallback)&&(current$$1===null||current$$1.memoizedState!==null);}function updateSuspenseComponent(current$$1,workInProgress,renderExpirationTime){var mode=workInProgress.mode;var nextProps=workInProgress.pendingProps;// This is used by DevTools to force a boundary to suspend.\n{if(shouldSuspend(workInProgress)){workInProgress.effectTag|=DidCapture;}}var suspenseContext=suspenseStackCursor.current;var nextDidTimeout=false;var didSuspend=(workInProgress.effectTag&DidCapture)!==NoEffect;if(didSuspend||shouldRemainOnFallback(suspenseContext,current$$1,workInProgress)){// Something in this boundary's subtree already suspended. Switch to\n// rendering the fallback children.\nnextDidTimeout=true;workInProgress.effectTag&=~DidCapture;}else{// Attempting the main content\nif(current$$1===null||current$$1.memoizedState!==null){// This is a new mount or this boundary is already showing a fallback state.\n// Mark this subtree context as having at least one invisible parent that could\n// handle the fallback state.\n// Boundaries without fallbacks or should be avoided are not considered since\n// they cannot handle preferred fallback states.\nif(nextProps.fallback!==undefined&&nextProps.unstable_avoidThisFallback!==true){suspenseContext=addSubtreeSuspenseContext(suspenseContext,InvisibleParentSuspenseContext);}}}suspenseContext=setDefaultShallowSuspenseContext(suspenseContext);pushSuspenseContext(workInProgress,suspenseContext);{if('maxDuration'in nextProps){if(!didWarnAboutMaxDuration){didWarnAboutMaxDuration=true;warning$1(false,'maxDuration has been removed from React. '+'Remove the maxDuration prop.');}}}// This next part is a bit confusing. If the children timeout, we switch to\n// showing the fallback children in place of the \"primary\" children.\n// However, we don't want to delete the primary children because then their\n// state will be lost (both the React state and the host state, e.g.\n// uncontrolled form inputs). Instead we keep them mounted and hide them.\n// Both the fallback children AND the primary children are rendered at the\n// same time. Once the primary children are un-suspended, we can delete\n// the fallback children — don't need to preserve their state.\n//\n// The two sets of children are siblings in the host environment, but\n// semantically, for purposes of reconciliation, they are two separate sets.\n// So we store them using two fragment fibers.\n//\n// However, we want to avoid allocating extra fibers for every placeholder.\n// They're only necessary when the children time out, because that's the\n// only time when both sets are mounted.\n//\n// So, the extra fragment fibers are only used if the children time out.\n// Otherwise, we render the primary children directly. This requires some\n// custom reconciliation logic to preserve the state of the primary\n// children. It's essentially a very basic form of re-parenting.\nif(current$$1===null){// If we're currently hydrating, try to hydrate this boundary.\n// But only if this has a fallback.\nif(nextProps.fallback!==undefined){tryToClaimNextHydratableInstance(workInProgress);// This could've been a dehydrated suspense component.\nif(enableSuspenseServerRenderer){var suspenseState=workInProgress.memoizedState;if(suspenseState!==null){var dehydrated=suspenseState.dehydrated;if(dehydrated!==null){return mountDehydratedSuspenseComponent(workInProgress,dehydrated,renderExpirationTime);}}}}// This is the initial mount. This branch is pretty simple because there's\n// no previous state that needs to be preserved.\nif(nextDidTimeout){// Mount separate fragments for primary and fallback children.\nvar nextFallbackChildren=nextProps.fallback;var primaryChildFragment=createFiberFromFragment(null,mode,NoWork,null);primaryChildFragment[\"return\"]=workInProgress;if((workInProgress.mode&BlockingMode)===NoMode){// Outside of blocking mode, we commit the effects from the\n// partially completed, timed-out tree, too.\nvar progressedState=workInProgress.memoizedState;var progressedPrimaryChild=progressedState!==null?workInProgress.child.child:workInProgress.child;primaryChildFragment.child=progressedPrimaryChild;var progressedChild=progressedPrimaryChild;while(progressedChild!==null){progressedChild[\"return\"]=primaryChildFragment;progressedChild=progressedChild.sibling;}}var fallbackChildFragment=createFiberFromFragment(nextFallbackChildren,mode,renderExpirationTime,null);fallbackChildFragment[\"return\"]=workInProgress;primaryChildFragment.sibling=fallbackChildFragment;// Skip the primary children, and continue working on the\n// fallback children.\nworkInProgress.memoizedState=SUSPENDED_MARKER;workInProgress.child=primaryChildFragment;return fallbackChildFragment;}else{// Mount the primary children without an intermediate fragment fiber.\nvar nextPrimaryChildren=nextProps.children;workInProgress.memoizedState=null;return workInProgress.child=mountChildFibers(workInProgress,null,nextPrimaryChildren,renderExpirationTime);}}else{// This is an update. This branch is more complicated because we need to\n// ensure the state of the primary children is preserved.\nvar prevState=current$$1.memoizedState;if(prevState!==null){if(enableSuspenseServerRenderer){var _dehydrated=prevState.dehydrated;if(_dehydrated!==null){if(!didSuspend){return updateDehydratedSuspenseComponent(current$$1,workInProgress,_dehydrated,prevState,renderExpirationTime);}else if(workInProgress.memoizedState!==null){// Something suspended and we should still be in dehydrated mode.\n// Leave the existing child in place.\nworkInProgress.child=current$$1.child;// The dehydrated completion pass expects this flag to be there\n// but the normal suspense pass doesn't.\nworkInProgress.effectTag|=DidCapture;return null;}else{// Suspended but we should no longer be in dehydrated mode.\n// Therefore we now have to render the fallback. Wrap the children\n// in a fragment fiber to keep them separate from the fallback\n// children.\nvar _nextFallbackChildren=nextProps.fallback;var _primaryChildFragment=createFiberFromFragment(// It shouldn't matter what the pending props are because we aren't\n// going to render this fragment.\nnull,mode,NoWork,null);_primaryChildFragment[\"return\"]=workInProgress;// This is always null since we never want the previous child\n// that we're not going to hydrate.\n_primaryChildFragment.child=null;if((workInProgress.mode&BlockingMode)===NoMode){// Outside of blocking mode, we commit the effects from the\n// partially completed, timed-out tree, too.\nvar _progressedChild=_primaryChildFragment.child=workInProgress.child;while(_progressedChild!==null){_progressedChild[\"return\"]=_primaryChildFragment;_progressedChild=_progressedChild.sibling;}}else{// We will have dropped the effect list which contains the deletion.\n// We need to reconcile to delete the current child.\nreconcileChildFibers(workInProgress,current$$1.child,null,renderExpirationTime);}// Because primaryChildFragment is a new fiber that we're inserting as the\n// parent of a new tree, we need to set its treeBaseDuration.\nif(enableProfilerTimer&&workInProgress.mode&ProfileMode){// treeBaseDuration is the sum of all the child tree base durations.\nvar treeBaseDuration=0;var hiddenChild=_primaryChildFragment.child;while(hiddenChild!==null){treeBaseDuration+=hiddenChild.treeBaseDuration;hiddenChild=hiddenChild.sibling;}_primaryChildFragment.treeBaseDuration=treeBaseDuration;}// Create a fragment from the fallback children, too.\nvar _fallbackChildFragment=createFiberFromFragment(_nextFallbackChildren,mode,renderExpirationTime,null);_fallbackChildFragment[\"return\"]=workInProgress;_primaryChildFragment.sibling=_fallbackChildFragment;_fallbackChildFragment.effectTag|=Placement;_primaryChildFragment.childExpirationTime=NoWork;workInProgress.memoizedState=SUSPENDED_MARKER;workInProgress.child=_primaryChildFragment;// Skip the primary children, and continue working on the\n// fallback children.\nreturn _fallbackChildFragment;}}}// The current tree already timed out. That means each child set is\n// wrapped in a fragment fiber.\nvar currentPrimaryChildFragment=current$$1.child;var currentFallbackChildFragment=currentPrimaryChildFragment.sibling;if(nextDidTimeout){// Still timed out. Reuse the current primary children by cloning\n// its fragment. We're going to skip over these entirely.\nvar _nextFallbackChildren2=nextProps.fallback;var _primaryChildFragment2=createWorkInProgress(currentPrimaryChildFragment,currentPrimaryChildFragment.pendingProps,NoWork);_primaryChildFragment2[\"return\"]=workInProgress;if((workInProgress.mode&BlockingMode)===NoMode){// Outside of blocking mode, we commit the effects from the\n// partially completed, timed-out tree, too.\nvar _progressedState=workInProgress.memoizedState;var _progressedPrimaryChild=_progressedState!==null?workInProgress.child.child:workInProgress.child;if(_progressedPrimaryChild!==currentPrimaryChildFragment.child){_primaryChildFragment2.child=_progressedPrimaryChild;var _progressedChild2=_progressedPrimaryChild;while(_progressedChild2!==null){_progressedChild2[\"return\"]=_primaryChildFragment2;_progressedChild2=_progressedChild2.sibling;}}}// Because primaryChildFragment is a new fiber that we're inserting as the\n// parent of a new tree, we need to set its treeBaseDuration.\nif(enableProfilerTimer&&workInProgress.mode&ProfileMode){// treeBaseDuration is the sum of all the child tree base durations.\nvar _treeBaseDuration=0;var _hiddenChild=_primaryChildFragment2.child;while(_hiddenChild!==null){_treeBaseDuration+=_hiddenChild.treeBaseDuration;_hiddenChild=_hiddenChild.sibling;}_primaryChildFragment2.treeBaseDuration=_treeBaseDuration;}// Clone the fallback child fragment, too. These we'll continue\n// working on.\nvar _fallbackChildFragment2=createWorkInProgress(currentFallbackChildFragment,_nextFallbackChildren2,currentFallbackChildFragment.expirationTime);_fallbackChildFragment2[\"return\"]=workInProgress;_primaryChildFragment2.sibling=_fallbackChildFragment2;_primaryChildFragment2.childExpirationTime=NoWork;// Skip the primary children, and continue working on the\n// fallback children.\nworkInProgress.memoizedState=SUSPENDED_MARKER;workInProgress.child=_primaryChildFragment2;return _fallbackChildFragment2;}else{// No longer suspended. Switch back to showing the primary children,\n// and remove the intermediate fragment fiber.\nvar _nextPrimaryChildren=nextProps.children;var currentPrimaryChild=currentPrimaryChildFragment.child;var primaryChild=reconcileChildFibers(workInProgress,currentPrimaryChild,_nextPrimaryChildren,renderExpirationTime);// If this render doesn't suspend, we need to delete the fallback\n// children. Wait until the complete phase, after we've confirmed the\n// fallback is no longer needed.\n// TODO: Would it be better to store the fallback fragment on\n// the stateNode?\n// Continue rendering the children, like we normally do.\nworkInProgress.memoizedState=null;return workInProgress.child=primaryChild;}}else{// The current tree has not already timed out. That means the primary\n// children are not wrapped in a fragment fiber.\nvar _currentPrimaryChild=current$$1.child;if(nextDidTimeout){// Timed out. Wrap the children in a fragment fiber to keep them\n// separate from the fallback children.\nvar _nextFallbackChildren3=nextProps.fallback;var _primaryChildFragment3=createFiberFromFragment(// It shouldn't matter what the pending props are because we aren't\n// going to render this fragment.\nnull,mode,NoWork,null);_primaryChildFragment3[\"return\"]=workInProgress;_primaryChildFragment3.child=_currentPrimaryChild;if(_currentPrimaryChild!==null){_currentPrimaryChild[\"return\"]=_primaryChildFragment3;}// Even though we're creating a new fiber, there are no new children,\n// because we're reusing an already mounted tree. So we don't need to\n// schedule a placement.\n// primaryChildFragment.effectTag |= Placement;\nif((workInProgress.mode&BlockingMode)===NoMode){// Outside of blocking mode, we commit the effects from the\n// partially completed, timed-out tree, too.\nvar _progressedState2=workInProgress.memoizedState;var _progressedPrimaryChild2=_progressedState2!==null?workInProgress.child.child:workInProgress.child;_primaryChildFragment3.child=_progressedPrimaryChild2;var _progressedChild3=_progressedPrimaryChild2;while(_progressedChild3!==null){_progressedChild3[\"return\"]=_primaryChildFragment3;_progressedChild3=_progressedChild3.sibling;}}// Because primaryChildFragment is a new fiber that we're inserting as the\n// parent of a new tree, we need to set its treeBaseDuration.\nif(enableProfilerTimer&&workInProgress.mode&ProfileMode){// treeBaseDuration is the sum of all the child tree base durations.\nvar _treeBaseDuration2=0;var _hiddenChild2=_primaryChildFragment3.child;while(_hiddenChild2!==null){_treeBaseDuration2+=_hiddenChild2.treeBaseDuration;_hiddenChild2=_hiddenChild2.sibling;}_primaryChildFragment3.treeBaseDuration=_treeBaseDuration2;}// Create a fragment from the fallback children, too.\nvar _fallbackChildFragment3=createFiberFromFragment(_nextFallbackChildren3,mode,renderExpirationTime,null);_fallbackChildFragment3[\"return\"]=workInProgress;_primaryChildFragment3.sibling=_fallbackChildFragment3;_fallbackChildFragment3.effectTag|=Placement;_primaryChildFragment3.childExpirationTime=NoWork;// Skip the primary children, and continue working on the\n// fallback children.\nworkInProgress.memoizedState=SUSPENDED_MARKER;workInProgress.child=_primaryChildFragment3;return _fallbackChildFragment3;}else{// Still haven't timed out. Continue rendering the children, like we\n// normally do.\nworkInProgress.memoizedState=null;var _nextPrimaryChildren2=nextProps.children;return workInProgress.child=reconcileChildFibers(workInProgress,_currentPrimaryChild,_nextPrimaryChildren2,renderExpirationTime);}}}}function retrySuspenseComponentWithoutHydrating(current$$1,workInProgress,renderExpirationTime){// We're now not suspended nor dehydrated.\nworkInProgress.memoizedState=null;// Retry with the full children.\nvar nextProps=workInProgress.pendingProps;var nextChildren=nextProps.children;// This will ensure that the children get Placement effects and\n// that the old child gets a Deletion effect.\n// We could also call forceUnmountCurrentAndReconcile.\nreconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function mountDehydratedSuspenseComponent(workInProgress,suspenseInstance,renderExpirationTime){// During the first pass, we'll bail out and not drill into the children.\n// Instead, we'll leave the content in place and try to hydrate it later.\nif((workInProgress.mode&BlockingMode)===NoMode){{warning$1(false,'Cannot hydrate Suspense in legacy mode. Switch from '+'ReactDOM.hydrate(element, container) to '+'ReactDOM.createBlockingRoot(container, { hydrate: true })'+'.render(element) or remove the Suspense components from '+'the server rendered components.');}workInProgress.expirationTime=Sync;}else if(isSuspenseInstanceFallback(suspenseInstance)){// This is a client-only boundary. Since we won't get any content from the server\n// for this, we need to schedule that at a higher priority based on when it would\n// have timed out. In theory we could render it in this pass but it would have the\n// wrong priority associated with it and will prevent hydration of parent path.\n// Instead, we'll leave work left on it to render it in a separate commit.\n// TODO This time should be the time at which the server rendered response that is\n// a parent to this boundary was displayed. However, since we currently don't have\n// a protocol to transfer that time, we'll just estimate it by using the current\n// time. This will mean that Suspense timeouts are slightly shifted to later than\n// they should be.\nvar serverDisplayTime=requestCurrentTimeForUpdate();// Schedule a normal pri update to render this content.\nvar newExpirationTime=computeAsyncExpiration(serverDisplayTime);if(enableSchedulerTracing){markSpawnedWork(newExpirationTime);}workInProgress.expirationTime=newExpirationTime;}else{// We'll continue hydrating the rest at offscreen priority since we'll already\n// be showing the right content coming from the server, it is no rush.\nworkInProgress.expirationTime=Never;if(enableSchedulerTracing){markSpawnedWork(Never);}}return null;}function updateDehydratedSuspenseComponent(current$$1,workInProgress,suspenseInstance,suspenseState,renderExpirationTime){// We should never be hydrating at this point because it is the first pass,\n// but after we've already committed once.\nwarnIfHydrating();if((workInProgress.mode&BlockingMode)===NoMode){return retrySuspenseComponentWithoutHydrating(current$$1,workInProgress,renderExpirationTime);}if(isSuspenseInstanceFallback(suspenseInstance)){// This boundary is in a permanent fallback state. In this case, we'll never\n// get an update and we'll never be able to hydrate the final content. Let's just try the\n// client side render instead.\nreturn retrySuspenseComponentWithoutHydrating(current$$1,workInProgress,renderExpirationTime);}// We use childExpirationTime to indicate that a child might depend on context, so if\n// any context has changed, we need to treat is as if the input might have changed.\nvar hasContextChanged$$1=current$$1.childExpirationTime>=renderExpirationTime;if(didReceiveUpdate||hasContextChanged$$1){// This boundary has changed since the first render. This means that we are now unable to\n// hydrate it. We might still be able to hydrate it using an earlier expiration time, if\n// we are rendering at lower expiration than sync.\nif(renderExpirationTime<Sync){if(suspenseState.retryTime<=renderExpirationTime){// This render is even higher pri than we've seen before, let's try again\n// at even higher pri.\nvar attemptHydrationAtExpirationTime=renderExpirationTime+1;suspenseState.retryTime=attemptHydrationAtExpirationTime;scheduleWork(current$$1,attemptHydrationAtExpirationTime);// TODO: Early abort this render.\n}else{// We have already tried to ping at a higher priority than we're rendering with\n// so if we got here, we must have failed to hydrate at those levels. We must\n// now give up. Instead, we're going to delete the whole subtree and instead inject\n// a new real Suspense boundary to take its place, which may render content\n// or fallback. This might suspend for a while and if it does we might still have\n// an opportunity to hydrate before this pass commits.\n}}// If we have scheduled higher pri work above, this will probably just abort the render\n// since we now have higher priority work, but in case it doesn't, we need to prepare to\n// render something, if we time out. Even if that requires us to delete everything and\n// skip hydration.\n// Delay having to do this as long as the suspense timeout allows us.\nrenderDidSuspendDelayIfPossible();return retrySuspenseComponentWithoutHydrating(current$$1,workInProgress,renderExpirationTime);}else if(isSuspenseInstancePending(suspenseInstance)){// This component is still pending more data from the server, so we can't hydrate its\n// content. We treat it as if this component suspended itself. It might seem as if\n// we could just try to render it client-side instead. However, this will perform a\n// lot of unnecessary work and is unlikely to complete since it often will suspend\n// on missing data anyway. Additionally, the server might be able to render more\n// than we can on the client yet. In that case we'd end up with more fallback states\n// on the client than if we just leave it alone. If the server times out or errors\n// these should update this boundary to the permanent Fallback state instead.\n// Mark it as having captured (i.e. suspended).\nworkInProgress.effectTag|=DidCapture;// Leave the child in place. I.e. the dehydrated fragment.\nworkInProgress.child=current$$1.child;// Register a callback to retry this boundary once the server has sent the result.\nregisterSuspenseInstanceRetry(suspenseInstance,retryDehydratedSuspenseBoundary.bind(null,current$$1));return null;}else{// This is the first attempt.\nreenterHydrationStateFromDehydratedSuspenseInstance(workInProgress,suspenseInstance);var nextProps=workInProgress.pendingProps;var nextChildren=nextProps.children;var child=mountChildFibers(workInProgress,null,nextChildren,renderExpirationTime);var node=child;while(node){// Mark each child as hydrating. This is a fast path to know whether this\n// tree is part of a hydrating tree. This is used to determine if a child\n// node has fully mounted yet, and for scheduling event replaying.\n// Conceptually this is similar to Placement in that a new subtree is\n// inserted into the React tree here. It just happens to not need DOM\n// mutations because it already exists.\nnode.effectTag|=Hydrating;node=node.sibling;}workInProgress.child=child;return workInProgress.child;}}function scheduleWorkOnFiber(fiber,renderExpirationTime){if(fiber.expirationTime<renderExpirationTime){fiber.expirationTime=renderExpirationTime;}var alternate=fiber.alternate;if(alternate!==null&&alternate.expirationTime<renderExpirationTime){alternate.expirationTime=renderExpirationTime;}scheduleWorkOnParentPath(fiber[\"return\"],renderExpirationTime);}function propagateSuspenseContextChange(workInProgress,firstChild,renderExpirationTime){// Mark any Suspense boundaries with fallbacks as having work to do.\n// If they were previously forced into fallbacks, they may now be able\n// to unblock.\nvar node=firstChild;while(node!==null){if(node.tag===SuspenseComponent){var state=node.memoizedState;if(state!==null){scheduleWorkOnFiber(node,renderExpirationTime);}}else if(node.tag===SuspenseListComponent){// If the tail is hidden there might not be an Suspense boundaries\n// to schedule work on. In this case we have to schedule it on the\n// list itself.\n// We don't have to traverse to the children of the list since\n// the list will propagate the change when it rerenders.\nscheduleWorkOnFiber(node,renderExpirationTime);}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===workInProgress){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===workInProgress){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}function findLastContentRow(firstChild){// This is going to find the last row among these children that is already\n// showing content on the screen, as opposed to being in fallback state or\n// new. If a row has multiple Suspense boundaries, any of them being in the\n// fallback state, counts as the whole row being in a fallback state.\n// Note that the \"rows\" will be workInProgress, but any nested children\n// will still be current since we haven't rendered them yet. The mounted\n// order may not be the same as the new order. We use the new order.\nvar row=firstChild;var lastContentRow=null;while(row!==null){var currentRow=row.alternate;// New rows can't be content rows.\nif(currentRow!==null&&findFirstSuspended(currentRow)===null){lastContentRow=row;}row=row.sibling;}return lastContentRow;}function validateRevealOrder(revealOrder){{if(revealOrder!==undefined&&revealOrder!=='forwards'&&revealOrder!=='backwards'&&revealOrder!=='together'&&!didWarnAboutRevealOrder[revealOrder]){didWarnAboutRevealOrder[revealOrder]=true;if(typeof revealOrder==='string'){switch(revealOrder.toLowerCase()){case'together':case'forwards':case'backwards':{warning$1(false,'\"%s\" is not a valid value for revealOrder on <SuspenseList />. '+'Use lowercase \"%s\" instead.',revealOrder,revealOrder.toLowerCase());break;}case'forward':case'backward':{warning$1(false,'\"%s\" is not a valid value for revealOrder on <SuspenseList />. '+'React uses the -s suffix in the spelling. Use \"%ss\" instead.',revealOrder,revealOrder.toLowerCase());break;}default:warning$1(false,'\"%s\" is not a supported revealOrder on <SuspenseList />. '+'Did you mean \"together\", \"forwards\" or \"backwards\"?',revealOrder);break;}}else{warning$1(false,'%s is not a supported value for revealOrder on <SuspenseList />. '+'Did you mean \"together\", \"forwards\" or \"backwards\"?',revealOrder);}}}}function validateTailOptions(tailMode,revealOrder){{if(tailMode!==undefined&&!didWarnAboutTailOptions[tailMode]){if(tailMode!=='collapsed'&&tailMode!=='hidden'){didWarnAboutTailOptions[tailMode]=true;warning$1(false,'\"%s\" is not a supported value for tail on <SuspenseList />. '+'Did you mean \"collapsed\" or \"hidden\"?',tailMode);}else if(revealOrder!=='forwards'&&revealOrder!=='backwards'){didWarnAboutTailOptions[tailMode]=true;warning$1(false,'<SuspenseList tail=\"%s\" /> is only valid if revealOrder is '+'\"forwards\" or \"backwards\". '+'Did you mean to specify revealOrder=\"forwards\"?',tailMode);}}}}function validateSuspenseListNestedChild(childSlot,index){{var isArray=Array.isArray(childSlot);var isIterable=!isArray&&typeof getIteratorFn(childSlot)==='function';if(isArray||isIterable){var type=isArray?'array':'iterable';warning$1(false,'A nested %s was passed to row #%s in <SuspenseList />. Wrap it in '+'an additional SuspenseList to configure its revealOrder: '+'<SuspenseList revealOrder=...> ... '+'<SuspenseList revealOrder=...>{%s}</SuspenseList> ... '+'</SuspenseList>',type,index,type);return false;}}return true;}function validateSuspenseListChildren(children,revealOrder){{if((revealOrder==='forwards'||revealOrder==='backwards')&&children!==undefined&&children!==null&&children!==false){if(Array.isArray(children)){for(var i=0;i<children.length;i++){if(!validateSuspenseListNestedChild(children[i],i)){return;}}}else{var iteratorFn=getIteratorFn(children);if(typeof iteratorFn==='function'){var childrenIterator=iteratorFn.call(children);if(childrenIterator){var step=childrenIterator.next();var _i=0;for(;!step.done;step=childrenIterator.next()){if(!validateSuspenseListNestedChild(step.value,_i)){return;}_i++;}}}else{warning$1(false,'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. '+'This is not useful since it needs multiple rows. '+'Did you mean to pass multiple children or an array?',revealOrder);}}}}}function initSuspenseListRenderState(workInProgress,isBackwards,tail,lastContentRow,tailMode,lastEffectBeforeRendering){var renderState=workInProgress.memoizedState;if(renderState===null){workInProgress.memoizedState={isBackwards:isBackwards,rendering:null,last:lastContentRow,tail:tail,tailExpiration:0,tailMode:tailMode,lastEffect:lastEffectBeforeRendering};}else{// We can reuse the existing object from previous renders.\nrenderState.isBackwards=isBackwards;renderState.rendering=null;renderState.last=lastContentRow;renderState.tail=tail;renderState.tailExpiration=0;renderState.tailMode=tailMode;renderState.lastEffect=lastEffectBeforeRendering;}}// This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\nfunction updateSuspenseListComponent(current$$1,workInProgress,renderExpirationTime){var nextProps=workInProgress.pendingProps;var revealOrder=nextProps.revealOrder;var tailMode=nextProps.tail;var newChildren=nextProps.children;validateRevealOrder(revealOrder);validateTailOptions(tailMode,revealOrder);validateSuspenseListChildren(newChildren,revealOrder);reconcileChildren(current$$1,workInProgress,newChildren,renderExpirationTime);var suspenseContext=suspenseStackCursor.current;var shouldForceFallback=hasSuspenseContext(suspenseContext,ForceSuspenseFallback);if(shouldForceFallback){suspenseContext=setShallowSuspenseContext(suspenseContext,ForceSuspenseFallback);workInProgress.effectTag|=DidCapture;}else{var didSuspendBefore=current$$1!==null&&(current$$1.effectTag&DidCapture)!==NoEffect;if(didSuspendBefore){// If we previously forced a fallback, we need to schedule work\n// on any nested boundaries to let them know to try to render\n// again. This is the same as context updating.\npropagateSuspenseContextChange(workInProgress,workInProgress.child,renderExpirationTime);}suspenseContext=setDefaultShallowSuspenseContext(suspenseContext);}pushSuspenseContext(workInProgress,suspenseContext);if((workInProgress.mode&BlockingMode)===NoMode){// Outside of blocking mode, SuspenseList doesn't work so we just\n// use make it a noop by treating it as the default revealOrder.\nworkInProgress.memoizedState=null;}else{switch(revealOrder){case'forwards':{var lastContentRow=findLastContentRow(workInProgress.child);var tail;if(lastContentRow===null){// The whole list is part of the tail.\n// TODO: We could fast path by just rendering the tail now.\ntail=workInProgress.child;workInProgress.child=null;}else{// Disconnect the tail rows after the content row.\n// We're going to render them separately later.\ntail=lastContentRow.sibling;lastContentRow.sibling=null;}initSuspenseListRenderState(workInProgress,false,// isBackwards\ntail,lastContentRow,tailMode,workInProgress.lastEffect);break;}case'backwards':{// We're going to find the first row that has existing content.\n// At the same time we're going to reverse the list of everything\n// we pass in the meantime. That's going to be our tail in reverse\n// order.\nvar _tail=null;var row=workInProgress.child;workInProgress.child=null;while(row!==null){var currentRow=row.alternate;// New rows can't be content rows.\nif(currentRow!==null&&findFirstSuspended(currentRow)===null){// This is the beginning of the main content.\nworkInProgress.child=row;break;}var nextRow=row.sibling;row.sibling=_tail;_tail=row;row=nextRow;}// TODO: If workInProgress.child is null, we can continue on the tail immediately.\ninitSuspenseListRenderState(workInProgress,true,// isBackwards\n_tail,null,// last\ntailMode,workInProgress.lastEffect);break;}case'together':{initSuspenseListRenderState(workInProgress,false,// isBackwards\nnull,// tail\nnull,// last\nundefined,workInProgress.lastEffect);break;}default:{// The default reveal order is the same as not having\n// a boundary.\nworkInProgress.memoizedState=null;}}}return workInProgress.child;}function updatePortalComponent(current$$1,workInProgress,renderExpirationTime){pushHostContainer(workInProgress,workInProgress.stateNode.containerInfo);var nextChildren=workInProgress.pendingProps;if(current$$1===null){// Portals are special because we don't append the children during mount\n// but at commit. Therefore we need to track insertions which the normal\n// flow doesn't do during mount. This doesn't happen at the root because\n// the root always starts with a \"current\" with a null child.\n// TODO: Consider unifying this with how the root works.\nworkInProgress.child=reconcileChildFibers(workInProgress,null,nextChildren,renderExpirationTime);}else{reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);}return workInProgress.child;}function updateContextProvider(current$$1,workInProgress,renderExpirationTime){var providerType=workInProgress.type;var context=providerType._context;var newProps=workInProgress.pendingProps;var oldProps=workInProgress.memoizedProps;var newValue=newProps.value;{var providerPropTypes=workInProgress.type.propTypes;if(providerPropTypes){checkPropTypes(providerPropTypes,newProps,'prop','Context.Provider',getCurrentFiberStackInDev);}}pushProvider(workInProgress,newValue);if(oldProps!==null){var oldValue=oldProps.value;var changedBits=calculateChangedBits(context,newValue,oldValue);if(changedBits===0){// No change. Bailout early if children are the same.\nif(oldProps.children===newProps.children&&!hasContextChanged()){return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}}else{// The context value changed. Search for matching consumers and schedule\n// them to update.\npropagateContextChange(workInProgress,context,changedBits,renderExpirationTime);}}var newChildren=newProps.children;reconcileChildren(current$$1,workInProgress,newChildren,renderExpirationTime);return workInProgress.child;}var hasWarnedAboutUsingContextAsConsumer=false;function updateContextConsumer(current$$1,workInProgress,renderExpirationTime){var context=workInProgress.type;// The logic below for Context differs depending on PROD or DEV mode. In\n// DEV mode, we create a separate object for Context.Consumer that acts\n// like a proxy to Context. This proxy object adds unnecessary code in PROD\n// so we use the old behaviour (Context.Consumer references Context) to\n// reduce size and overhead. The separate object references context via\n// a property called \"_context\", which also gives us the ability to check\n// in DEV mode if this property exists or not and warn if it does not.\n{if(context._context===undefined){// This may be because it's a Context (rather than a Consumer).\n// Or it may be because it's older React where they're the same thing.\n// We only want to warn if we're sure it's a new React.\nif(context!==context.Consumer){if(!hasWarnedAboutUsingContextAsConsumer){hasWarnedAboutUsingContextAsConsumer=true;warning$1(false,'Rendering <Context> directly is not supported and will be removed in '+'a future major release. Did you mean to render <Context.Consumer> instead?');}}}else{context=context._context;}}var newProps=workInProgress.pendingProps;var render=newProps.children;{!(typeof render==='function')?warningWithoutStack$1(false,'A context consumer was rendered with multiple children, or a child '+\"that isn't a function. A context consumer expects a single child \"+'that is a function. If you did pass a function, make sure there '+'is no trailing or leading whitespace around it.'):void 0;}prepareToReadContext(workInProgress,renderExpirationTime);var newValue=_readContext(context,newProps.unstable_observedBits);var newChildren;{ReactCurrentOwner$3.current=workInProgress;setCurrentPhase('render');newChildren=render(newValue);setCurrentPhase(null);}// React DevTools reads this flag.\nworkInProgress.effectTag|=PerformedWork;reconcileChildren(current$$1,workInProgress,newChildren,renderExpirationTime);return workInProgress.child;}function updateFundamentalComponent$1(current$$1,workInProgress,renderExpirationTime){var fundamentalImpl=workInProgress.type.impl;if(fundamentalImpl.reconcileChildren===false){return null;}var nextProps=workInProgress.pendingProps;var nextChildren=nextProps.children;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function updateScopeComponent(current$$1,workInProgress,renderExpirationTime){var nextProps=workInProgress.pendingProps;var nextChildren=nextProps.children;reconcileChildren(current$$1,workInProgress,nextChildren,renderExpirationTime);return workInProgress.child;}function markWorkInProgressReceivedUpdate(){didReceiveUpdate=true;}function bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime){cancelWorkTimer(workInProgress);if(current$$1!==null){// Reuse previous dependencies\nworkInProgress.dependencies=current$$1.dependencies;}if(enableProfilerTimer){// Don't update \"base\" render times for bailouts.\nstopProfilerTimerIfRunning(workInProgress);}var updateExpirationTime=workInProgress.expirationTime;if(updateExpirationTime!==NoWork){markUnprocessedUpdateTime(updateExpirationTime);}// Check if the children have any pending work.\nvar childExpirationTime=workInProgress.childExpirationTime;if(childExpirationTime<renderExpirationTime){// The children don't have any work either. We can skip them.\n// TODO: Once we add back resuming, we should check if the children are\n// a work-in-progress set. If so, we need to transfer their effects.\nreturn null;}else{// This fiber doesn't have work, but its subtree does. Clone the child\n// fibers and continue.\ncloneChildFibers(current$$1,workInProgress);return workInProgress.child;}}function remountFiber(current$$1,oldWorkInProgress,newWorkInProgress){{var returnFiber=oldWorkInProgress[\"return\"];if(returnFiber===null){throw new Error('Cannot swap the root fiber.');}// Disconnect from the old current.\n// It will get deleted.\ncurrent$$1.alternate=null;oldWorkInProgress.alternate=null;// Connect to the new tree.\nnewWorkInProgress.index=oldWorkInProgress.index;newWorkInProgress.sibling=oldWorkInProgress.sibling;newWorkInProgress[\"return\"]=oldWorkInProgress[\"return\"];newWorkInProgress.ref=oldWorkInProgress.ref;// Replace the child/sibling pointers above it.\nif(oldWorkInProgress===returnFiber.child){returnFiber.child=newWorkInProgress;}else{var prevSibling=returnFiber.child;if(prevSibling===null){throw new Error('Expected parent to have a child.');}while(prevSibling.sibling!==oldWorkInProgress){prevSibling=prevSibling.sibling;if(prevSibling===null){throw new Error('Expected to find the previous sibling.');}}prevSibling.sibling=newWorkInProgress;}// Delete the old fiber and place the new one.\n// Since the old fiber is disconnected, we have to schedule it manually.\nvar last=returnFiber.lastEffect;if(last!==null){last.nextEffect=current$$1;returnFiber.lastEffect=current$$1;}else{returnFiber.firstEffect=returnFiber.lastEffect=current$$1;}current$$1.nextEffect=null;current$$1.effectTag=Deletion;newWorkInProgress.effectTag|=Placement;// Restart work from the new fiber.\nreturn newWorkInProgress;}}function beginWork$1(current$$1,workInProgress,renderExpirationTime){var updateExpirationTime=workInProgress.expirationTime;{if(workInProgress._debugNeedsRemount&¤t$$1!==null){// This will restart the begin phase with a new fiber.\nreturn remountFiber(current$$1,workInProgress,createFiberFromTypeAndProps(workInProgress.type,workInProgress.key,workInProgress.pendingProps,workInProgress._debugOwner||null,workInProgress.mode,workInProgress.expirationTime));}}if(current$$1!==null){var oldProps=current$$1.memoizedProps;var newProps=workInProgress.pendingProps;if(oldProps!==newProps||hasContextChanged()||// Force a re-render if the implementation changed due to hot reload:\nworkInProgress.type!==current$$1.type){// If props or context changed, mark the fiber as having performed work.\n// This may be unset if the props are determined to be equal later (memo).\ndidReceiveUpdate=true;}else if(updateExpirationTime<renderExpirationTime){didReceiveUpdate=false;// This fiber does not have any pending work. Bailout without entering\n// the begin phase. There's still some bookkeeping we that needs to be done\n// in this optimized path, mostly pushing stuff onto the stack.\nswitch(workInProgress.tag){case HostRoot:pushHostRootContext(workInProgress);resetHydrationState();break;case HostComponent:pushHostContext(workInProgress);if(workInProgress.mode&ConcurrentMode&&renderExpirationTime!==Never&&shouldDeprioritizeSubtree(workInProgress.type,newProps)){if(enableSchedulerTracing){markSpawnedWork(Never);}// Schedule this fiber to re-render at offscreen priority. Then bailout.\nworkInProgress.expirationTime=workInProgress.childExpirationTime=Never;return null;}break;case ClassComponent:{var Component=workInProgress.type;if(isContextProvider(Component)){pushContextProvider(workInProgress);}break;}case HostPortal:pushHostContainer(workInProgress,workInProgress.stateNode.containerInfo);break;case ContextProvider:{var newValue=workInProgress.memoizedProps.value;pushProvider(workInProgress,newValue);break;}case Profiler:if(enableProfilerTimer){// Profiler should only call onRender when one of its descendants actually rendered.\nvar hasChildWork=workInProgress.childExpirationTime>=renderExpirationTime;if(hasChildWork){workInProgress.effectTag|=Update;}}break;case SuspenseComponent:{var state=workInProgress.memoizedState;if(state!==null){if(enableSuspenseServerRenderer){if(state.dehydrated!==null){pushSuspenseContext(workInProgress,setDefaultShallowSuspenseContext(suspenseStackCursor.current));// We know that this component will suspend again because if it has\n// been unsuspended it has committed as a resolved Suspense component.\n// If it needs to be retried, it should have work scheduled on it.\nworkInProgress.effectTag|=DidCapture;break;}}// If this boundary is currently timed out, we need to decide\n// whether to retry the primary children, or to skip over it and\n// go straight to the fallback. Check the priority of the primary\n// child fragment.\nvar primaryChildFragment=workInProgress.child;var primaryChildExpirationTime=primaryChildFragment.childExpirationTime;if(primaryChildExpirationTime!==NoWork&&primaryChildExpirationTime>=renderExpirationTime){// The primary children have pending work. Use the normal path\n// to attempt to render the primary children again.\nreturn updateSuspenseComponent(current$$1,workInProgress,renderExpirationTime);}else{pushSuspenseContext(workInProgress,setDefaultShallowSuspenseContext(suspenseStackCursor.current));// The primary children do not have pending work with sufficient\n// priority. Bailout.\nvar child=bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);if(child!==null){// The fallback children have pending work. Skip over the\n// primary children and work on the fallback.\nreturn child.sibling;}else{return null;}}}else{pushSuspenseContext(workInProgress,setDefaultShallowSuspenseContext(suspenseStackCursor.current));}break;}case SuspenseListComponent:{var didSuspendBefore=(current$$1.effectTag&DidCapture)!==NoEffect;var _hasChildWork=workInProgress.childExpirationTime>=renderExpirationTime;if(didSuspendBefore){if(_hasChildWork){// If something was in fallback state last time, and we have all the\n// same children then we're still in progressive loading state.\n// Something might get unblocked by state updates or retries in the\n// tree which will affect the tail. So we need to use the normal\n// path to compute the correct tail.\nreturn updateSuspenseListComponent(current$$1,workInProgress,renderExpirationTime);}// If none of the children had any work, that means that none of\n// them got retried so they'll still be blocked in the same way\n// as before. We can fast bail out.\nworkInProgress.effectTag|=DidCapture;}// If nothing suspended before and we're rendering the same children,\n// then the tail doesn't matter. Anything new that suspends will work\n// in the \"together\" mode, so we can continue from the state we had.\nvar renderState=workInProgress.memoizedState;if(renderState!==null){// Reset to the \"together\" mode in case we've started a different\n// update in the past but didn't complete it.\nrenderState.rendering=null;renderState.tail=null;}pushSuspenseContext(workInProgress,suspenseStackCursor.current);if(_hasChildWork){break;}else{// If none of the children had any work, that means that none of\n// them got retried so they'll still be blocked in the same way\n// as before. We can fast bail out.\nreturn null;}}}return bailoutOnAlreadyFinishedWork(current$$1,workInProgress,renderExpirationTime);}else{// An update was scheduled on this fiber, but there are no new props\n// nor legacy context. Set this to false. If an update queue or context\n// consumer produces a changed value, it will set this to true. Otherwise,\n// the component will assume the children have not changed and bail out.\ndidReceiveUpdate=false;}}else{didReceiveUpdate=false;}// Before entering the begin phase, clear the expiration time.\nworkInProgress.expirationTime=NoWork;switch(workInProgress.tag){case IndeterminateComponent:{return mountIndeterminateComponent(current$$1,workInProgress,workInProgress.type,renderExpirationTime);}case LazyComponent:{var elementType=workInProgress.elementType;return mountLazyComponent(current$$1,workInProgress,elementType,updateExpirationTime,renderExpirationTime);}case FunctionComponent:{var _Component=workInProgress.type;var unresolvedProps=workInProgress.pendingProps;var resolvedProps=workInProgress.elementType===_Component?unresolvedProps:resolveDefaultProps(_Component,unresolvedProps);return updateFunctionComponent(current$$1,workInProgress,_Component,resolvedProps,renderExpirationTime);}case ClassComponent:{var _Component2=workInProgress.type;var _unresolvedProps=workInProgress.pendingProps;var _resolvedProps=workInProgress.elementType===_Component2?_unresolvedProps:resolveDefaultProps(_Component2,_unresolvedProps);return updateClassComponent(current$$1,workInProgress,_Component2,_resolvedProps,renderExpirationTime);}case HostRoot:return updateHostRoot(current$$1,workInProgress,renderExpirationTime);case HostComponent:return updateHostComponent(current$$1,workInProgress,renderExpirationTime);case HostText:return updateHostText(current$$1,workInProgress);case SuspenseComponent:return updateSuspenseComponent(current$$1,workInProgress,renderExpirationTime);case HostPortal:return updatePortalComponent(current$$1,workInProgress,renderExpirationTime);case ForwardRef:{var type=workInProgress.type;var _unresolvedProps2=workInProgress.pendingProps;var _resolvedProps2=workInProgress.elementType===type?_unresolvedProps2:resolveDefaultProps(type,_unresolvedProps2);return updateForwardRef(current$$1,workInProgress,type,_resolvedProps2,renderExpirationTime);}case Fragment:return updateFragment(current$$1,workInProgress,renderExpirationTime);case Mode:return updateMode(current$$1,workInProgress,renderExpirationTime);case Profiler:return updateProfiler(current$$1,workInProgress,renderExpirationTime);case ContextProvider:return updateContextProvider(current$$1,workInProgress,renderExpirationTime);case ContextConsumer:return updateContextConsumer(current$$1,workInProgress,renderExpirationTime);case MemoComponent:{var _type2=workInProgress.type;var _unresolvedProps3=workInProgress.pendingProps;// Resolve outer props first, then resolve inner props.\nvar _resolvedProps3=resolveDefaultProps(_type2,_unresolvedProps3);{if(workInProgress.type!==workInProgress.elementType){var outerPropTypes=_type2.propTypes;if(outerPropTypes){checkPropTypes(outerPropTypes,_resolvedProps3,// Resolved for outer only\n'prop',getComponentName(_type2),getCurrentFiberStackInDev);}}}_resolvedProps3=resolveDefaultProps(_type2.type,_resolvedProps3);return updateMemoComponent(current$$1,workInProgress,_type2,_resolvedProps3,updateExpirationTime,renderExpirationTime);}case SimpleMemoComponent:{return updateSimpleMemoComponent(current$$1,workInProgress,workInProgress.type,workInProgress.pendingProps,updateExpirationTime,renderExpirationTime);}case IncompleteClassComponent:{var _Component3=workInProgress.type;var _unresolvedProps4=workInProgress.pendingProps;var _resolvedProps4=workInProgress.elementType===_Component3?_unresolvedProps4:resolveDefaultProps(_Component3,_unresolvedProps4);return mountIncompleteClassComponent(current$$1,workInProgress,_Component3,_resolvedProps4,renderExpirationTime);}case SuspenseListComponent:{return updateSuspenseListComponent(current$$1,workInProgress,renderExpirationTime);}case FundamentalComponent:{if(enableFundamentalAPI){return updateFundamentalComponent$1(current$$1,workInProgress,renderExpirationTime);}break;}case ScopeComponent:{if(enableScopeAPI){return updateScopeComponent(current$$1,workInProgress,renderExpirationTime);}break;}}{{throw Error(\"Unknown unit of work tag (\"+workInProgress.tag+\"). This error is likely caused by a bug in React. Please file an issue.\");}}}function createFundamentalStateInstance(currentFiber,props,impl,state){return{currentFiber:currentFiber,impl:impl,instance:null,prevProps:null,props:props,state:state};}function isFiberSuspenseAndTimedOut(fiber){return fiber.tag===SuspenseComponent&&fiber.memoizedState!==null;}function getSuspenseFallbackChild(fiber){return fiber.child.sibling.child;}var emptyObject$1={};function collectScopedNodes(node,fn,scopedNodes){if(enableScopeAPI){if(node.tag===HostComponent){var _type=node.type,memoizedProps=node.memoizedProps,stateNode=node.stateNode;var _instance=getPublicInstance(stateNode);if(_instance!==null&&fn(_type,memoizedProps||emptyObject$1,_instance)===true){scopedNodes.push(_instance);}}var child=node.child;if(isFiberSuspenseAndTimedOut(node)){child=getSuspenseFallbackChild(node);}if(child!==null){collectScopedNodesFromChildren(child,fn,scopedNodes);}}}function collectFirstScopedNode(node,fn){if(enableScopeAPI){if(node.tag===HostComponent){var _type2=node.type,memoizedProps=node.memoizedProps,stateNode=node.stateNode;var _instance2=getPublicInstance(stateNode);if(_instance2!==null&&fn(_type2,memoizedProps,_instance2)===true){return _instance2;}}var child=node.child;if(isFiberSuspenseAndTimedOut(node)){child=getSuspenseFallbackChild(node);}if(child!==null){return collectFirstScopedNodeFromChildren(child,fn);}}return null;}function collectScopedNodesFromChildren(startingChild,fn,scopedNodes){var child=startingChild;while(child!==null){collectScopedNodes(child,fn,scopedNodes);child=child.sibling;}}function collectFirstScopedNodeFromChildren(startingChild,fn){var child=startingChild;while(child!==null){var scopedNode=collectFirstScopedNode(child,fn);if(scopedNode!==null){return scopedNode;}child=child.sibling;}return null;}function collectNearestScopeMethods(node,scope,childrenScopes){if(isValidScopeNode(node,scope)){childrenScopes.push(node.stateNode.methods);}else{var child=node.child;if(isFiberSuspenseAndTimedOut(node)){child=getSuspenseFallbackChild(node);}if(child!==null){collectNearestChildScopeMethods(child,scope,childrenScopes);}}}function collectNearestChildScopeMethods(startingChild,scope,childrenScopes){var child=startingChild;while(child!==null){collectNearestScopeMethods(child,scope,childrenScopes);child=child.sibling;}}function isValidScopeNode(node,scope){return node.tag===ScopeComponent&&node.type===scope&&node.stateNode!==null;}function createScopeMethods(scope,instance){return{getChildren:function getChildren(){var currentFiber=instance.fiber;var child=currentFiber.child;var childrenScopes=[];if(child!==null){collectNearestChildScopeMethods(child,scope,childrenScopes);}return childrenScopes.length===0?null:childrenScopes;},getChildrenFromRoot:function getChildrenFromRoot(){var currentFiber=instance.fiber;var node=currentFiber;while(node!==null){var parent=node[\"return\"];if(parent===null){break;}node=parent;if(node.tag===ScopeComponent&&node.type===scope){break;}}var childrenScopes=[];collectNearestChildScopeMethods(node.child,scope,childrenScopes);return childrenScopes.length===0?null:childrenScopes;},getParent:function getParent(){var node=instance.fiber[\"return\"];while(node!==null){if(node.tag===ScopeComponent&&node.type===scope){return node.stateNode.methods;}node=node[\"return\"];}return null;},getProps:function getProps(){var currentFiber=instance.fiber;return currentFiber.memoizedProps;},queryAllNodes:function queryAllNodes(fn){var currentFiber=instance.fiber;var child=currentFiber.child;var scopedNodes=[];if(child!==null){collectScopedNodesFromChildren(child,fn,scopedNodes);}return scopedNodes.length===0?null:scopedNodes;},queryFirstNode:function queryFirstNode(fn){var currentFiber=instance.fiber;var child=currentFiber.child;if(child!==null){return collectFirstScopedNodeFromChildren(child,fn);}return null;},containsNode:function containsNode(node){var fiber=getInstanceFromNode$2(node);while(fiber!==null){if(fiber.tag===ScopeComponent&&fiber.type===scope&&fiber.stateNode===instance){return true;}fiber=fiber[\"return\"];}return false;}};}function markUpdate(workInProgress){// Tag the fiber with an update effect. This turns a Placement into\n// a PlacementAndUpdate.\nworkInProgress.effectTag|=Update;}function markRef$1(workInProgress){workInProgress.effectTag|=Ref;}var _appendAllChildren;var updateHostContainer;var updateHostComponent$1;var updateHostText$1;if(supportsMutation){// Mutation mode\n_appendAllChildren=function appendAllChildren(parent,workInProgress,needsVisibilityToggle,isHidden){// We only have the top Fiber that was created but we need recurse down its\n// children to find all the terminal nodes.\nvar node=workInProgress.child;while(node!==null){if(node.tag===HostComponent||node.tag===HostText){appendInitialChild(parent,node.stateNode);}else if(enableFundamentalAPI&&node.tag===FundamentalComponent){appendInitialChild(parent,node.stateNode.instance);}else if(node.tag===HostPortal){// If we have a portal child, then we don't want to traverse\n// down its children. Instead, we'll get insertions from each child in\n// the portal directly.\n}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===workInProgress){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===workInProgress){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}};updateHostContainer=function updateHostContainer(workInProgress){// Noop\n};updateHostComponent$1=function updateHostComponent$1(current,workInProgress,type,newProps,rootContainerInstance){// If we have an alternate, that means this is an update and we need to\n// schedule a side-effect to do the updates.\nvar oldProps=current.memoizedProps;if(oldProps===newProps){// In mutation mode, this is sufficient for a bailout because\n// we won't touch this node even if children changed.\nreturn;}// If we get updated because one of our children updated, we don't\n// have newProps so we'll have to reuse them.\n// TODO: Split the update API as separate for the props vs. children.\n// Even better would be if children weren't special cased at all tho.\nvar instance=workInProgress.stateNode;var currentHostContext=getHostContext();// TODO: Experiencing an error where oldProps is null. Suggests a host\n// component is hitting the resume path. Figure out why. Possibly\n// related to `hidden`.\nvar updatePayload=prepareUpdate(instance,type,oldProps,newProps,rootContainerInstance,currentHostContext);// TODO: Type this specific to this type of component.\nworkInProgress.updateQueue=updatePayload;// If the update payload indicates that there is a change or if there\n// is a new ref we mark this as an update. All the work is done in commitWork.\nif(updatePayload){markUpdate(workInProgress);}};updateHostText$1=function updateHostText$1(current,workInProgress,oldText,newText){// If the text differs, mark it as an update. All the work in done in commitWork.\nif(oldText!==newText){markUpdate(workInProgress);}};}else if(supportsPersistence){// Persistent host tree mode\n_appendAllChildren=function appendAllChildren(parent,workInProgress,needsVisibilityToggle,isHidden){// We only have the top Fiber that was created but we need recurse down its\n// children to find all the terminal nodes.\nvar node=workInProgress.child;while(node!==null){// eslint-disable-next-line no-labels\nbranches:if(node.tag===HostComponent){var instance=node.stateNode;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar props=node.memoizedProps;var type=node.type;instance=cloneHiddenInstance(instance,type,props,node);}appendInitialChild(parent,instance);}else if(node.tag===HostText){var _instance=node.stateNode;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar text=node.memoizedProps;_instance=cloneHiddenTextInstance(_instance,text,node);}appendInitialChild(parent,_instance);}else if(enableFundamentalAPI&&node.tag===FundamentalComponent){var _instance2=node.stateNode.instance;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar _props=node.memoizedProps;var _type=node.type;_instance2=cloneHiddenInstance(_instance2,_type,_props,node);}appendInitialChild(parent,_instance2);}else if(node.tag===HostPortal){// If we have a portal child, then we don't want to traverse\n// down its children. Instead, we'll get insertions from each child in\n// the portal directly.\n}else if(node.tag===SuspenseComponent){if((node.effectTag&Update)!==NoEffect){// Need to toggle the visibility of the primary children.\nvar newIsHidden=node.memoizedState!==null;if(newIsHidden){var primaryChildParent=node.child;if(primaryChildParent!==null){if(primaryChildParent.child!==null){primaryChildParent.child[\"return\"]=primaryChildParent;_appendAllChildren(parent,primaryChildParent,true,newIsHidden);}var fallbackChildParent=primaryChildParent.sibling;if(fallbackChildParent!==null){fallbackChildParent[\"return\"]=node;node=fallbackChildParent;continue;}}}}if(node.child!==null){// Continue traversing like normal\nnode.child[\"return\"]=node;node=node.child;continue;}}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}// $FlowFixMe This is correct but Flow is confused by the labeled break.\nnode=node;if(node===workInProgress){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===workInProgress){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}};// An unfortunate fork of appendAllChildren because we have two different parent types.\nvar appendAllChildrenToContainer=function appendAllChildrenToContainer(containerChildSet,workInProgress,needsVisibilityToggle,isHidden){// We only have the top Fiber that was created but we need recurse down its\n// children to find all the terminal nodes.\nvar node=workInProgress.child;while(node!==null){// eslint-disable-next-line no-labels\nbranches:if(node.tag===HostComponent){var instance=node.stateNode;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar props=node.memoizedProps;var type=node.type;instance=cloneHiddenInstance(instance,type,props,node);}appendChildToContainerChildSet(containerChildSet,instance);}else if(node.tag===HostText){var _instance3=node.stateNode;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar text=node.memoizedProps;_instance3=cloneHiddenTextInstance(_instance3,text,node);}appendChildToContainerChildSet(containerChildSet,_instance3);}else if(enableFundamentalAPI&&node.tag===FundamentalComponent){var _instance4=node.stateNode.instance;if(needsVisibilityToggle&&isHidden){// This child is inside a timed out tree. Hide it.\nvar _props2=node.memoizedProps;var _type2=node.type;_instance4=cloneHiddenInstance(_instance4,_type2,_props2,node);}appendChildToContainerChildSet(containerChildSet,_instance4);}else if(node.tag===HostPortal){// If we have a portal child, then we don't want to traverse\n// down its children. Instead, we'll get insertions from each child in\n// the portal directly.\n}else if(node.tag===SuspenseComponent){if((node.effectTag&Update)!==NoEffect){// Need to toggle the visibility of the primary children.\nvar newIsHidden=node.memoizedState!==null;if(newIsHidden){var primaryChildParent=node.child;if(primaryChildParent!==null){if(primaryChildParent.child!==null){primaryChildParent.child[\"return\"]=primaryChildParent;appendAllChildrenToContainer(containerChildSet,primaryChildParent,true,newIsHidden);}var fallbackChildParent=primaryChildParent.sibling;if(fallbackChildParent!==null){fallbackChildParent[\"return\"]=node;node=fallbackChildParent;continue;}}}}if(node.child!==null){// Continue traversing like normal\nnode.child[\"return\"]=node;node=node.child;continue;}}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}// $FlowFixMe This is correct but Flow is confused by the labeled break.\nnode=node;if(node===workInProgress){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===workInProgress){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}};updateHostContainer=function updateHostContainer(workInProgress){var portalOrRoot=workInProgress.stateNode;var childrenUnchanged=workInProgress.firstEffect===null;if(childrenUnchanged){// No changes, just reuse the existing instance.\n}else{var container=portalOrRoot.containerInfo;var newChildSet=createContainerChildSet(container);// If children might have changed, we have to add them all to the set.\nappendAllChildrenToContainer(newChildSet,workInProgress,false,false);portalOrRoot.pendingChildren=newChildSet;// Schedule an update on the container to swap out the container.\nmarkUpdate(workInProgress);finalizeContainerChildren(container,newChildSet);}};updateHostComponent$1=function updateHostComponent$1(current,workInProgress,type,newProps,rootContainerInstance){var currentInstance=current.stateNode;var oldProps=current.memoizedProps;// If there are no effects associated with this node, then none of our children had any updates.\n// This guarantees that we can reuse all of them.\nvar childrenUnchanged=workInProgress.firstEffect===null;if(childrenUnchanged&&oldProps===newProps){// No changes, just reuse the existing instance.\n// Note that this might release a previous clone.\nworkInProgress.stateNode=currentInstance;return;}var recyclableInstance=workInProgress.stateNode;var currentHostContext=getHostContext();var updatePayload=null;if(oldProps!==newProps){updatePayload=prepareUpdate(recyclableInstance,type,oldProps,newProps,rootContainerInstance,currentHostContext);}if(childrenUnchanged&&updatePayload===null){// No changes, just reuse the existing instance.\n// Note that this might release a previous clone.\nworkInProgress.stateNode=currentInstance;return;}var newInstance=cloneInstance(currentInstance,updatePayload,type,oldProps,newProps,workInProgress,childrenUnchanged,recyclableInstance);if(finalizeInitialChildren(newInstance,type,newProps,rootContainerInstance,currentHostContext)){markUpdate(workInProgress);}workInProgress.stateNode=newInstance;if(childrenUnchanged){// If there are no other effects in this tree, we need to flag this node as having one.\n// Even though we're not going to use it for anything.\n// Otherwise parents won't know that there are new children to propagate upwards.\nmarkUpdate(workInProgress);}else{// If children might have changed, we have to add them all to the set.\n_appendAllChildren(newInstance,workInProgress,false,false);}};updateHostText$1=function updateHostText$1(current,workInProgress,oldText,newText){if(oldText!==newText){// If the text content differs, we'll create a new text instance for it.\nvar rootContainerInstance=getRootHostContainer();var currentHostContext=getHostContext();workInProgress.stateNode=createTextInstance(newText,rootContainerInstance,currentHostContext,workInProgress);// We'll have to mark it as having an effect, even though we won't use the effect for anything.\n// This lets the parents know that at least one of their children has changed.\nmarkUpdate(workInProgress);}};}else{// No host operations\nupdateHostContainer=function updateHostContainer(workInProgress){// Noop\n};updateHostComponent$1=function updateHostComponent$1(current,workInProgress,type,newProps,rootContainerInstance){// Noop\n};updateHostText$1=function updateHostText$1(current,workInProgress,oldText,newText){// Noop\n};}function cutOffTailIfNeeded(renderState,hasRenderedATailFallback){switch(renderState.tailMode){case'hidden':{// Any insertions at the end of the tail list after this point\n// should be invisible. If there are already mounted boundaries\n// anything before them are not considered for collapsing.\n// Therefore we need to go through the whole tail to find if\n// there are any.\nvar tailNode=renderState.tail;var lastTailNode=null;while(tailNode!==null){if(tailNode.alternate!==null){lastTailNode=tailNode;}tailNode=tailNode.sibling;}// Next we're simply going to delete all insertions after the\n// last rendered item.\nif(lastTailNode===null){// All remaining items in the tail are insertions.\nrenderState.tail=null;}else{// Detach the insertion after the last node that was already\n// inserted.\nlastTailNode.sibling=null;}break;}case'collapsed':{// Any insertions at the end of the tail list after this point\n// should be invisible. If there are already mounted boundaries\n// anything before them are not considered for collapsing.\n// Therefore we need to go through the whole tail to find if\n// there are any.\nvar _tailNode=renderState.tail;var _lastTailNode=null;while(_tailNode!==null){if(_tailNode.alternate!==null){_lastTailNode=_tailNode;}_tailNode=_tailNode.sibling;}// Next we're simply going to delete all insertions after the\n// last rendered item.\nif(_lastTailNode===null){// All remaining items in the tail are insertions.\nif(!hasRenderedATailFallback&&renderState.tail!==null){// We suspended during the head. We want to show at least one\n// row at the tail. So we'll keep on and cut off the rest.\nrenderState.tail.sibling=null;}else{renderState.tail=null;}}else{// Detach the insertion after the last node that was already\n// inserted.\n_lastTailNode.sibling=null;}break;}}}function completeWork(current,workInProgress,renderExpirationTime){var newProps=workInProgress.pendingProps;switch(workInProgress.tag){case IndeterminateComponent:break;case LazyComponent:break;case SimpleMemoComponent:case FunctionComponent:break;case ClassComponent:{var Component=workInProgress.type;if(isContextProvider(Component)){popContext(workInProgress);}break;}case HostRoot:{popHostContainer(workInProgress);popTopLevelContextObject(workInProgress);var fiberRoot=workInProgress.stateNode;if(fiberRoot.pendingContext){fiberRoot.context=fiberRoot.pendingContext;fiberRoot.pendingContext=null;}if(current===null||current.child===null){// If we hydrated, pop so that we can delete any remaining children\n// that weren't hydrated.\nvar wasHydrated=popHydrationState(workInProgress);if(wasHydrated){// If we hydrated, then we'll need to schedule an update for\n// the commit side-effects on the root.\nmarkUpdate(workInProgress);}}updateHostContainer(workInProgress);break;}case HostComponent:{popHostContext(workInProgress);var rootContainerInstance=getRootHostContainer();var type=workInProgress.type;if(current!==null&&workInProgress.stateNode!=null){updateHostComponent$1(current,workInProgress,type,newProps,rootContainerInstance);if(enableFlareAPI){var prevListeners=current.memoizedProps.listeners;var nextListeners=newProps.listeners;if(prevListeners!==nextListeners){markUpdate(workInProgress);}}if(current.ref!==workInProgress.ref){markRef$1(workInProgress);}}else{if(!newProps){if(!(workInProgress.stateNode!==null)){{throw Error(\"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\");}}// This can happen when we abort work.\nbreak;}var currentHostContext=getHostContext();// TODO: Move createInstance to beginWork and keep it on a context\n// \"stack\" as the parent. Then append children as we go in beginWork\n// or completeWork depending on we want to add then top->down or\n// bottom->up. Top->down is faster in IE11.\nvar _wasHydrated=popHydrationState(workInProgress);if(_wasHydrated){// TODO: Move this and createInstance step into the beginPhase\n// to consolidate.\nif(prepareToHydrateHostInstance(workInProgress,rootContainerInstance,currentHostContext)){// If changes to the hydrated node needs to be applied at the\n// commit-phase we mark this as such.\nmarkUpdate(workInProgress);}if(enableFlareAPI){var listeners=newProps.listeners;if(listeners!=null){updateEventListeners(listeners,workInProgress,rootContainerInstance);}}}else{var instance=createInstance(type,newProps,rootContainerInstance,currentHostContext,workInProgress);_appendAllChildren(instance,workInProgress,false,false);// This needs to be set before we mount Flare event listeners\nworkInProgress.stateNode=instance;if(enableFlareAPI){var _listeners=newProps.listeners;if(_listeners!=null){updateEventListeners(_listeners,workInProgress,rootContainerInstance);}}// Certain renderers require commit-time effects for initial mount.\n// (eg DOM renderer supports auto-focus for certain elements).\n// Make sure such renderers get scheduled for later work.\nif(finalizeInitialChildren(instance,type,newProps,rootContainerInstance,currentHostContext)){markUpdate(workInProgress);}}if(workInProgress.ref!==null){// If there is a ref on a host node we need to schedule a callback\nmarkRef$1(workInProgress);}}break;}case HostText:{var newText=newProps;if(current&&workInProgress.stateNode!=null){var oldText=current.memoizedProps;// If we have an alternate, that means this is an update and we need\n// to schedule a side-effect to do the updates.\nupdateHostText$1(current,workInProgress,oldText,newText);}else{if(typeof newText!=='string'){if(!(workInProgress.stateNode!==null)){{throw Error(\"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\");}}// This can happen when we abort work.\n}var _rootContainerInstance=getRootHostContainer();var _currentHostContext=getHostContext();var _wasHydrated2=popHydrationState(workInProgress);if(_wasHydrated2){if(prepareToHydrateHostTextInstance(workInProgress)){markUpdate(workInProgress);}}else{workInProgress.stateNode=createTextInstance(newText,_rootContainerInstance,_currentHostContext,workInProgress);}}break;}case ForwardRef:break;case SuspenseComponent:{popSuspenseContext(workInProgress);var nextState=workInProgress.memoizedState;if(enableSuspenseServerRenderer){if(nextState!==null&&nextState.dehydrated!==null){if(current===null){var _wasHydrated3=popHydrationState(workInProgress);if(!_wasHydrated3){{throw Error(\"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\");}}prepareToHydrateHostSuspenseInstance(workInProgress);if(enableSchedulerTracing){markSpawnedWork(Never);}return null;}else{// We should never have been in a hydration state if we didn't have a current.\n// However, in some of those paths, we might have reentered a hydration state\n// and then we might be inside a hydration state. In that case, we'll need to\n// exit out of it.\nresetHydrationState();if((workInProgress.effectTag&DidCapture)===NoEffect){// This boundary did not suspend so it's now hydrated and unsuspended.\nworkInProgress.memoizedState=null;}// If nothing suspended, we need to schedule an effect to mark this boundary\n// as having hydrated so events know that they're free be invoked.\n// It's also a signal to replay events and the suspense callback.\n// If something suspended, schedule an effect to attach retry listeners.\n// So we might as well always mark this.\nworkInProgress.effectTag|=Update;return null;}}}if((workInProgress.effectTag&DidCapture)!==NoEffect){// Something suspended. Re-render with the fallback children.\nworkInProgress.expirationTime=renderExpirationTime;// Do not reset the effect list.\nreturn workInProgress;}var nextDidTimeout=nextState!==null;var prevDidTimeout=false;if(current===null){if(workInProgress.memoizedProps.fallback!==undefined){popHydrationState(workInProgress);}}else{var prevState=current.memoizedState;prevDidTimeout=prevState!==null;if(!nextDidTimeout&&prevState!==null){// We just switched from the fallback to the normal children.\n// Delete the fallback.\n// TODO: Would it be better to store the fallback fragment on\n// the stateNode during the begin phase?\nvar currentFallbackChild=current.child.sibling;if(currentFallbackChild!==null){// Deletions go at the beginning of the return fiber's effect list\nvar first=workInProgress.firstEffect;if(first!==null){workInProgress.firstEffect=currentFallbackChild;currentFallbackChild.nextEffect=first;}else{workInProgress.firstEffect=workInProgress.lastEffect=currentFallbackChild;currentFallbackChild.nextEffect=null;}currentFallbackChild.effectTag=Deletion;}}}if(nextDidTimeout&&!prevDidTimeout){// If this subtreee is running in blocking mode we can suspend,\n// otherwise we won't suspend.\n// TODO: This will still suspend a synchronous tree if anything\n// in the concurrent tree already suspended during this render.\n// This is a known bug.\nif((workInProgress.mode&BlockingMode)!==NoMode){// TODO: Move this back to throwException because this is too late\n// if this is a large tree which is common for initial loads. We\n// don't know if we should restart a render or not until we get\n// this marker, and this is too late.\n// If this render already had a ping or lower pri updates,\n// and this is the first time we know we're going to suspend we\n// should be able to immediately restart from within throwException.\nvar hasInvisibleChildContext=current===null&&workInProgress.memoizedProps.unstable_avoidThisFallback!==true;if(hasInvisibleChildContext||hasSuspenseContext(suspenseStackCursor.current,InvisibleParentSuspenseContext)){// If this was in an invisible tree or a new render, then showing\n// this boundary is ok.\nrenderDidSuspend();}else{// Otherwise, we're going to have to hide content so we should\n// suspend for longer if possible.\nrenderDidSuspendDelayIfPossible();}}}if(supportsPersistence){// TODO: Only schedule updates if not prevDidTimeout.\nif(nextDidTimeout){// If this boundary just timed out, schedule an effect to attach a\n// retry listener to the proimse. This flag is also used to hide the\n// primary children.\nworkInProgress.effectTag|=Update;}}if(supportsMutation){// TODO: Only schedule updates if these values are non equal, i.e. it changed.\nif(nextDidTimeout||prevDidTimeout){// If this boundary just timed out, schedule an effect to attach a\n// retry listener to the proimse. This flag is also used to hide the\n// primary children. In mutation mode, we also need the flag to\n// *unhide* children that were previously hidden, so check if the\n// is currently timed out, too.\nworkInProgress.effectTag|=Update;}}if(enableSuspenseCallback&&workInProgress.updateQueue!==null&&workInProgress.memoizedProps.suspenseCallback!=null){// Always notify the callback\nworkInProgress.effectTag|=Update;}break;}case Fragment:break;case Mode:break;case Profiler:break;case HostPortal:popHostContainer(workInProgress);updateHostContainer(workInProgress);break;case ContextProvider:// Pop provider fiber\npopProvider(workInProgress);break;case ContextConsumer:break;case MemoComponent:break;case IncompleteClassComponent:{// Same as class component case. I put it down here so that the tags are\n// sequential to ensure this switch is compiled to a jump table.\nvar _Component=workInProgress.type;if(isContextProvider(_Component)){popContext(workInProgress);}break;}case SuspenseListComponent:{popSuspenseContext(workInProgress);var renderState=workInProgress.memoizedState;if(renderState===null){// We're running in the default, \"independent\" mode. We don't do anything\n// in this mode.\nbreak;}var didSuspendAlready=(workInProgress.effectTag&DidCapture)!==NoEffect;var renderedTail=renderState.rendering;if(renderedTail===null){// We just rendered the head.\nif(!didSuspendAlready){// This is the first pass. We need to figure out if anything is still\n// suspended in the rendered set.\n// If new content unsuspended, but there's still some content that\n// didn't. Then we need to do a second pass that forces everything\n// to keep showing their fallbacks.\n// We might be suspended if something in this render pass suspended, or\n// something in the previous committed pass suspended. Otherwise,\n// there's no chance so we can skip the expensive call to\n// findFirstSuspended.\nvar cannotBeSuspended=renderHasNotSuspendedYet()&&(current===null||(current.effectTag&DidCapture)===NoEffect);if(!cannotBeSuspended){var row=workInProgress.child;while(row!==null){var suspended=findFirstSuspended(row);if(suspended!==null){didSuspendAlready=true;workInProgress.effectTag|=DidCapture;cutOffTailIfNeeded(renderState,false);// If this is a newly suspended tree, it might not get committed as\n// part of the second pass. In that case nothing will subscribe to\n// its thennables. Instead, we'll transfer its thennables to the\n// SuspenseList so that it can retry if they resolve.\n// There might be multiple of these in the list but since we're\n// going to wait for all of them anyway, it doesn't really matter\n// which ones gets to ping. In theory we could get clever and keep\n// track of how many dependencies remain but it gets tricky because\n// in the meantime, we can add/remove/change items and dependencies.\n// We might bail out of the loop before finding any but that\n// doesn't matter since that means that the other boundaries that\n// we did find already has their listeners attached.\nvar newThennables=suspended.updateQueue;if(newThennables!==null){workInProgress.updateQueue=newThennables;workInProgress.effectTag|=Update;}// Rerender the whole list, but this time, we'll force fallbacks\n// to stay in place.\n// Reset the effect list before doing the second pass since that's now invalid.\nif(renderState.lastEffect===null){workInProgress.firstEffect=null;}workInProgress.lastEffect=renderState.lastEffect;// Reset the child fibers to their original state.\nresetChildFibers(workInProgress,renderExpirationTime);// Set up the Suspense Context to force suspense and immediately\n// rerender the children.\npushSuspenseContext(workInProgress,setShallowSuspenseContext(suspenseStackCursor.current,ForceSuspenseFallback));return workInProgress.child;}row=row.sibling;}}}else{cutOffTailIfNeeded(renderState,false);}// Next we're going to render the tail.\n}else{// Append the rendered row to the child list.\nif(!didSuspendAlready){var _suspended=findFirstSuspended(renderedTail);if(_suspended!==null){workInProgress.effectTag|=DidCapture;didSuspendAlready=true;// Ensure we transfer the update queue to the parent so that it doesn't\n// get lost if this row ends up dropped during a second pass.\nvar _newThennables=_suspended.updateQueue;if(_newThennables!==null){workInProgress.updateQueue=_newThennables;workInProgress.effectTag|=Update;}cutOffTailIfNeeded(renderState,true);// This might have been modified.\nif(renderState.tail===null&&renderState.tailMode==='hidden'&&!renderedTail.alternate){// We need to delete the row we just rendered.\n// Reset the effect list to what it was before we rendered this\n// child. The nested children have already appended themselves.\nvar lastEffect=workInProgress.lastEffect=renderState.lastEffect;// Remove any effects that were appended after this point.\nif(lastEffect!==null){lastEffect.nextEffect=null;}// We're done.\nreturn null;}}else if(now()>renderState.tailExpiration&&renderExpirationTime>Never){// We have now passed our CPU deadline and we'll just give up further\n// attempts to render the main content and only render fallbacks.\n// The assumption is that this is usually faster.\nworkInProgress.effectTag|=DidCapture;didSuspendAlready=true;cutOffTailIfNeeded(renderState,false);// Since nothing actually suspended, there will nothing to ping this\n// to get it started back up to attempt the next item. If we can show\n// them, then they really have the same priority as this render.\n// So we'll pick it back up the very next render pass once we've had\n// an opportunity to yield for paint.\nvar nextPriority=renderExpirationTime-1;workInProgress.expirationTime=workInProgress.childExpirationTime=nextPriority;if(enableSchedulerTracing){markSpawnedWork(nextPriority);}}}if(renderState.isBackwards){// The effect list of the backwards tail will have been added\n// to the end. This breaks the guarantee that life-cycles fire in\n// sibling order but that isn't a strong guarantee promised by React.\n// Especially since these might also just pop in during future commits.\n// Append to the beginning of the list.\nrenderedTail.sibling=workInProgress.child;workInProgress.child=renderedTail;}else{var previousSibling=renderState.last;if(previousSibling!==null){previousSibling.sibling=renderedTail;}else{workInProgress.child=renderedTail;}renderState.last=renderedTail;}}if(renderState.tail!==null){// We still have tail rows to render.\nif(renderState.tailExpiration===0){// Heuristic for how long we're willing to spend rendering rows\n// until we just give up and show what we have so far.\nvar TAIL_EXPIRATION_TIMEOUT_MS=500;renderState.tailExpiration=now()+TAIL_EXPIRATION_TIMEOUT_MS;}// Pop a row.\nvar next=renderState.tail;renderState.rendering=next;renderState.tail=next.sibling;renderState.lastEffect=workInProgress.lastEffect;next.sibling=null;// Restore the context.\n// TODO: We can probably just avoid popping it instead and only\n// setting it the first time we go from not suspended to suspended.\nvar suspenseContext=suspenseStackCursor.current;if(didSuspendAlready){suspenseContext=setShallowSuspenseContext(suspenseContext,ForceSuspenseFallback);}else{suspenseContext=setDefaultShallowSuspenseContext(suspenseContext);}pushSuspenseContext(workInProgress,suspenseContext);// Do a pass over the next row.\nreturn next;}break;}case FundamentalComponent:{if(enableFundamentalAPI){var fundamentalImpl=workInProgress.type.impl;var fundamentalInstance=workInProgress.stateNode;if(fundamentalInstance===null){var getInitialState=fundamentalImpl.getInitialState;var fundamentalState;if(getInitialState!==undefined){fundamentalState=getInitialState(newProps);}fundamentalInstance=workInProgress.stateNode=createFundamentalStateInstance(workInProgress,newProps,fundamentalImpl,fundamentalState||{});var _instance5=getFundamentalComponentInstance(fundamentalInstance);fundamentalInstance.instance=_instance5;if(fundamentalImpl.reconcileChildren===false){return null;}_appendAllChildren(_instance5,workInProgress,false,false);mountFundamentalComponent(fundamentalInstance);}else{// We fire update in commit phase\nvar prevProps=fundamentalInstance.props;fundamentalInstance.prevProps=prevProps;fundamentalInstance.props=newProps;fundamentalInstance.currentFiber=workInProgress;if(supportsPersistence){var _instance6=cloneFundamentalInstance(fundamentalInstance);fundamentalInstance.instance=_instance6;_appendAllChildren(_instance6,workInProgress,false,false);}var shouldUpdate=shouldUpdateFundamentalComponent(fundamentalInstance);if(shouldUpdate){markUpdate(workInProgress);}}}break;}case ScopeComponent:{if(enableScopeAPI){if(current===null){var _type3=workInProgress.type;var scopeInstance={fiber:workInProgress,methods:null};workInProgress.stateNode=scopeInstance;scopeInstance.methods=createScopeMethods(_type3,scopeInstance);if(enableFlareAPI){var _listeners2=newProps.listeners;if(_listeners2!=null){var _rootContainerInstance2=getRootHostContainer();updateEventListeners(_listeners2,workInProgress,_rootContainerInstance2);}}if(workInProgress.ref!==null){markRef$1(workInProgress);markUpdate(workInProgress);}}else{if(enableFlareAPI){var _prevListeners=current.memoizedProps.listeners;var _nextListeners=newProps.listeners;if(_prevListeners!==_nextListeners||workInProgress.ref!==null){markUpdate(workInProgress);}}else{if(workInProgress.ref!==null){markUpdate(workInProgress);}}if(current.ref!==workInProgress.ref){markRef$1(workInProgress);}}}break;}default:{{throw Error(\"Unknown unit of work tag (\"+workInProgress.tag+\"). This error is likely caused by a bug in React. Please file an issue.\");}}}return null;}function unwindWork(workInProgress,renderExpirationTime){switch(workInProgress.tag){case ClassComponent:{var Component=workInProgress.type;if(isContextProvider(Component)){popContext(workInProgress);}var effectTag=workInProgress.effectTag;if(effectTag&ShouldCapture){workInProgress.effectTag=effectTag&~ShouldCapture|DidCapture;return workInProgress;}return null;}case HostRoot:{popHostContainer(workInProgress);popTopLevelContextObject(workInProgress);var _effectTag=workInProgress.effectTag;if(!((_effectTag&DidCapture)===NoEffect)){{throw Error(\"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\");}}workInProgress.effectTag=_effectTag&~ShouldCapture|DidCapture;return workInProgress;}case HostComponent:{// TODO: popHydrationState\npopHostContext(workInProgress);return null;}case SuspenseComponent:{popSuspenseContext(workInProgress);if(enableSuspenseServerRenderer){var suspenseState=workInProgress.memoizedState;if(suspenseState!==null&&suspenseState.dehydrated!==null){if(!(workInProgress.alternate!==null)){{throw Error(\"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\");}}resetHydrationState();}}var _effectTag2=workInProgress.effectTag;if(_effectTag2&ShouldCapture){workInProgress.effectTag=_effectTag2&~ShouldCapture|DidCapture;// Captured a suspense effect. Re-render the boundary.\nreturn workInProgress;}return null;}case SuspenseListComponent:{popSuspenseContext(workInProgress);// SuspenseList doesn't actually catch anything. It should've been\n// caught by a nested boundary. If not, it should bubble through.\nreturn null;}case HostPortal:popHostContainer(workInProgress);return null;case ContextProvider:popProvider(workInProgress);return null;default:return null;}}function unwindInterruptedWork(interruptedWork){switch(interruptedWork.tag){case ClassComponent:{var childContextTypes=interruptedWork.type.childContextTypes;if(childContextTypes!==null&&childContextTypes!==undefined){popContext(interruptedWork);}break;}case HostRoot:{popHostContainer(interruptedWork);popTopLevelContextObject(interruptedWork);break;}case HostComponent:{popHostContext(interruptedWork);break;}case HostPortal:popHostContainer(interruptedWork);break;case SuspenseComponent:popSuspenseContext(interruptedWork);break;case SuspenseListComponent:popSuspenseContext(interruptedWork);break;case ContextProvider:popProvider(interruptedWork);break;default:break;}}function createCapturedValue(value,source){// If the value is an error, call this function immediately after it is thrown\n// so the stack is accurate.\nreturn{value:value,source:source,stack:getStackByFiberInDevAndProd(source)};}// This module is forked in different environments.\n// By default, return `true` to log errors to the console.\n// Forks can return `false` if this isn't desirable.\nfunction showErrorDialog(capturedError){return true;}function logCapturedError(capturedError){var logError=showErrorDialog(capturedError);// Allow injected showErrorDialog() to prevent default console.error logging.\n// This enables renderers like ReactNative to better manage redbox behavior.\nif(logError===false){return;}var error=capturedError.error;{var componentName=capturedError.componentName,componentStack=capturedError.componentStack,errorBoundaryName=capturedError.errorBoundaryName,errorBoundaryFound=capturedError.errorBoundaryFound,willRetry=capturedError.willRetry;// Browsers support silencing uncaught errors by calling\n// `preventDefault()` in window `error` handler.\n// We record this information as an expando on the error.\nif(error!=null&&error._suppressLogging){if(errorBoundaryFound&&willRetry){// The error is recoverable and was silenced.\n// Ignore it and don't print the stack addendum.\n// This is handy for testing error boundaries without noise.\nreturn;}// The error is fatal. Since the silencing might have\n// been accidental, we'll surface it anyway.\n// However, the browser would have silenced the original error\n// so we'll print it first, and then print the stack addendum.\nconsole.error(error);// For a more detailed description of this block, see:\n// https://github.com/facebook/react/pull/13384\n}var componentNameMessage=componentName?\"The above error occurred in the <\"+componentName+\"> component:\":'The above error occurred in one of your React components:';var errorBoundaryMessage;// errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\nif(errorBoundaryFound&&errorBoundaryName){if(willRetry){errorBoundaryMessage=\"React will try to recreate this component tree from scratch \"+(\"using the error boundary you provided, \"+errorBoundaryName+\".\");}else{errorBoundaryMessage=\"This error was initially handled by the error boundary \"+errorBoundaryName+\".\\n\"+\"Recreating the tree from scratch failed so React will unmount the tree.\";}}else{errorBoundaryMessage='Consider adding an error boundary to your tree to customize error handling behavior.\\n'+'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';}var combinedMessage=\"\"+componentNameMessage+componentStack+\"\\n\\n\"+(\"\"+errorBoundaryMessage);// In development, we provide our own message with just the component stack.\n// We don't include the original error message and JS stack because the browser\n// has already printed it. Even if the application swallows the error, it is still\n// displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\nconsole.error(combinedMessage);}}var didWarnAboutUndefinedSnapshotBeforeUpdate=null;{didWarnAboutUndefinedSnapshotBeforeUpdate=new Set();}var PossiblyWeakSet=typeof WeakSet==='function'?WeakSet:Set;function logError(boundary,errorInfo){var source=errorInfo.source;var stack=errorInfo.stack;if(stack===null&&source!==null){stack=getStackByFiberInDevAndProd(source);}var capturedError={componentName:source!==null?getComponentName(source.type):null,componentStack:stack!==null?stack:'',error:errorInfo.value,errorBoundary:null,errorBoundaryName:null,errorBoundaryFound:false,willRetry:false};if(boundary!==null&&boundary.tag===ClassComponent){capturedError.errorBoundary=boundary.stateNode;capturedError.errorBoundaryName=getComponentName(boundary.type);capturedError.errorBoundaryFound=true;capturedError.willRetry=true;}try{logCapturedError(capturedError);}catch(e){// This method must not throw, or React internal state will get messed up.\n// If console.error is overridden, or logCapturedError() shows a dialog that throws,\n// we want to report this error outside of the normal stack as a last resort.\n// https://github.com/facebook/react/issues/13188\nsetTimeout(function(){throw e;});}}var callComponentWillUnmountWithTimer=function callComponentWillUnmountWithTimer(current$$1,instance){startPhaseTimer(current$$1,'componentWillUnmount');instance.props=current$$1.memoizedProps;instance.state=current$$1.memoizedState;instance.componentWillUnmount();stopPhaseTimer();};// Capture errors so they don't interrupt unmounting.\nfunction safelyCallComponentWillUnmount(current$$1,instance){{invokeGuardedCallback(null,callComponentWillUnmountWithTimer,null,current$$1,instance);if(hasCaughtError()){var unmountError=clearCaughtError();captureCommitPhaseError(current$$1,unmountError);}}}function safelyDetachRef(current$$1){var ref=current$$1.ref;if(ref!==null){if(typeof ref==='function'){{invokeGuardedCallback(null,ref,null,null);if(hasCaughtError()){var refError=clearCaughtError();captureCommitPhaseError(current$$1,refError);}}}else{ref.current=null;}}}function safelyCallDestroy(current$$1,destroy){{invokeGuardedCallback(null,destroy,null);if(hasCaughtError()){var error=clearCaughtError();captureCommitPhaseError(current$$1,error);}}}function commitBeforeMutationLifeCycles(current$$1,finishedWork){switch(finishedWork.tag){case FunctionComponent:case ForwardRef:case SimpleMemoComponent:{commitHookEffectList(UnmountSnapshot,NoEffect$1,finishedWork);return;}case ClassComponent:{if(finishedWork.effectTag&Snapshot){if(current$$1!==null){var prevProps=current$$1.memoizedProps;var prevState=current$$1.memoizedState;startPhaseTimer(finishedWork,'getSnapshotBeforeUpdate');var instance=finishedWork.stateNode;// We could update instance props and state here,\n// but instead we rely on them being set during last render.\n// TODO: revisit this when we implement resuming.\n{if(finishedWork.type===finishedWork.elementType&&!didWarnAboutReassigningProps){!(instance.props===finishedWork.memoizedProps)?warning$1(false,'Expected %s props to match memoized props before '+'getSnapshotBeforeUpdate. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;!(instance.state===finishedWork.memoizedState)?warning$1(false,'Expected %s state to match memoized state before '+'getSnapshotBeforeUpdate. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;}}var snapshot=instance.getSnapshotBeforeUpdate(finishedWork.elementType===finishedWork.type?prevProps:resolveDefaultProps(finishedWork.type,prevProps),prevState);{var didWarnSet=didWarnAboutUndefinedSnapshotBeforeUpdate;if(snapshot===undefined&&!didWarnSet.has(finishedWork.type)){didWarnSet.add(finishedWork.type);warningWithoutStack$1(false,'%s.getSnapshotBeforeUpdate(): A snapshot value (or null) '+'must be returned. You have returned undefined.',getComponentName(finishedWork.type));}}instance.__reactInternalSnapshotBeforeUpdate=snapshot;stopPhaseTimer();}}return;}case HostRoot:case HostComponent:case HostText:case HostPortal:case IncompleteClassComponent:// Nothing to do for these component types\nreturn;default:{{{throw Error(\"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\");}}}}}function commitHookEffectList(unmountTag,mountTag,finishedWork){var updateQueue=finishedWork.updateQueue;var lastEffect=updateQueue!==null?updateQueue.lastEffect:null;if(lastEffect!==null){var firstEffect=lastEffect.next;var effect=firstEffect;do{if((effect.tag&unmountTag)!==NoEffect$1){// Unmount\nvar destroy=effect.destroy;effect.destroy=undefined;if(destroy!==undefined){destroy();}}if((effect.tag&mountTag)!==NoEffect$1){// Mount\nvar create=effect.create;effect.destroy=create();{var _destroy=effect.destroy;if(_destroy!==undefined&&typeof _destroy!=='function'){var addendum=void 0;if(_destroy===null){addendum=' You returned null. If your effect does not require clean '+'up, return undefined (or nothing).';}else if(typeof _destroy.then==='function'){addendum='\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. '+'Instead, write the async function inside your effect '+'and call it immediately:\\n\\n'+'useEffect(() => {\\n'+' async function fetchData() {\\n'+' // You can await here\\n'+' const response = await MyAPI.getData(someId);\\n'+' // ...\\n'+' }\\n'+' fetchData();\\n'+\"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\"+'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';}else{addendum=' You returned: '+_destroy;}warningWithoutStack$1(false,'An effect function must not return anything besides a function, '+'which is used for clean-up.%s%s',addendum,getStackByFiberInDevAndProd(finishedWork));}}}effect=effect.next;}while(effect!==firstEffect);}}function commitPassiveHookEffects(finishedWork){if((finishedWork.effectTag&Passive)!==NoEffect){switch(finishedWork.tag){case FunctionComponent:case ForwardRef:case SimpleMemoComponent:{commitHookEffectList(UnmountPassive,NoEffect$1,finishedWork);commitHookEffectList(NoEffect$1,MountPassive,finishedWork);break;}default:break;}}}function commitLifeCycles(finishedRoot,current$$1,finishedWork,committedExpirationTime){switch(finishedWork.tag){case FunctionComponent:case ForwardRef:case SimpleMemoComponent:{commitHookEffectList(UnmountLayout,MountLayout,finishedWork);break;}case ClassComponent:{var instance=finishedWork.stateNode;if(finishedWork.effectTag&Update){if(current$$1===null){startPhaseTimer(finishedWork,'componentDidMount');// We could update instance props and state here,\n// but instead we rely on them being set during last render.\n// TODO: revisit this when we implement resuming.\n{if(finishedWork.type===finishedWork.elementType&&!didWarnAboutReassigningProps){!(instance.props===finishedWork.memoizedProps)?warning$1(false,'Expected %s props to match memoized props before '+'componentDidMount. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;!(instance.state===finishedWork.memoizedState)?warning$1(false,'Expected %s state to match memoized state before '+'componentDidMount. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;}}instance.componentDidMount();stopPhaseTimer();}else{var prevProps=finishedWork.elementType===finishedWork.type?current$$1.memoizedProps:resolveDefaultProps(finishedWork.type,current$$1.memoizedProps);var prevState=current$$1.memoizedState;startPhaseTimer(finishedWork,'componentDidUpdate');// We could update instance props and state here,\n// but instead we rely on them being set during last render.\n// TODO: revisit this when we implement resuming.\n{if(finishedWork.type===finishedWork.elementType&&!didWarnAboutReassigningProps){!(instance.props===finishedWork.memoizedProps)?warning$1(false,'Expected %s props to match memoized props before '+'componentDidUpdate. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;!(instance.state===finishedWork.memoizedState)?warning$1(false,'Expected %s state to match memoized state before '+'componentDidUpdate. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;}}instance.componentDidUpdate(prevProps,prevState,instance.__reactInternalSnapshotBeforeUpdate);stopPhaseTimer();}}var updateQueue=finishedWork.updateQueue;if(updateQueue!==null){{if(finishedWork.type===finishedWork.elementType&&!didWarnAboutReassigningProps){!(instance.props===finishedWork.memoizedProps)?warning$1(false,'Expected %s props to match memoized props before '+'processing the update queue. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;!(instance.state===finishedWork.memoizedState)?warning$1(false,'Expected %s state to match memoized state before '+'processing the update queue. '+'This might either be because of a bug in React, or because '+'a component reassigns its own `this.props`. '+'Please file an issue.',getComponentName(finishedWork.type)||'instance'):void 0;}}// We could update instance props and state here,\n// but instead we rely on them being set during last render.\n// TODO: revisit this when we implement resuming.\ncommitUpdateQueue(finishedWork,updateQueue,instance,committedExpirationTime);}return;}case HostRoot:{var _updateQueue=finishedWork.updateQueue;if(_updateQueue!==null){var _instance=null;if(finishedWork.child!==null){switch(finishedWork.child.tag){case HostComponent:_instance=getPublicInstance(finishedWork.child.stateNode);break;case ClassComponent:_instance=finishedWork.child.stateNode;break;}}commitUpdateQueue(finishedWork,_updateQueue,_instance,committedExpirationTime);}return;}case HostComponent:{var _instance2=finishedWork.stateNode;// Renderers may schedule work to be done after host components are mounted\n// (eg DOM renderer may schedule auto-focus for inputs and form controls).\n// These effects should only be committed when components are first mounted,\n// aka when there is no current/alternate.\nif(current$$1===null&&finishedWork.effectTag&Update){var type=finishedWork.type;var props=finishedWork.memoizedProps;commitMount(_instance2,type,props,finishedWork);}return;}case HostText:{// We have no life-cycles associated with text.\nreturn;}case HostPortal:{// We have no life-cycles associated with portals.\nreturn;}case Profiler:{if(enableProfilerTimer){var onRender=finishedWork.memoizedProps.onRender;if(typeof onRender==='function'){if(enableSchedulerTracing){onRender(finishedWork.memoizedProps.id,current$$1===null?'mount':'update',finishedWork.actualDuration,finishedWork.treeBaseDuration,finishedWork.actualStartTime,getCommitTime(),finishedRoot.memoizedInteractions);}else{onRender(finishedWork.memoizedProps.id,current$$1===null?'mount':'update',finishedWork.actualDuration,finishedWork.treeBaseDuration,finishedWork.actualStartTime,getCommitTime());}}}return;}case SuspenseComponent:{commitSuspenseHydrationCallbacks(finishedRoot,finishedWork);return;}case SuspenseListComponent:case IncompleteClassComponent:case FundamentalComponent:case ScopeComponent:return;default:{{{throw Error(\"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\");}}}}}function hideOrUnhideAllChildren(finishedWork,isHidden){if(supportsMutation){// We only have the top Fiber that was inserted but we need to recurse down its\n// children to find all the terminal nodes.\nvar node=finishedWork;while(true){if(node.tag===HostComponent){var instance=node.stateNode;if(isHidden){hideInstance(instance);}else{unhideInstance(node.stateNode,node.memoizedProps);}}else if(node.tag===HostText){var _instance3=node.stateNode;if(isHidden){hideTextInstance(_instance3);}else{unhideTextInstance(_instance3,node.memoizedProps);}}else if(node.tag===SuspenseComponent&&node.memoizedState!==null&&node.memoizedState.dehydrated===null){// Found a nested Suspense component that timed out. Skip over the\n// primary child fragment, which should remain hidden.\nvar fallbackChildFragment=node.child.sibling;fallbackChildFragment[\"return\"]=node;node=fallbackChildFragment;continue;}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===finishedWork){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===finishedWork){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}}function commitAttachRef(finishedWork){var ref=finishedWork.ref;if(ref!==null){var instance=finishedWork.stateNode;var instanceToUse;switch(finishedWork.tag){case HostComponent:instanceToUse=getPublicInstance(instance);break;default:instanceToUse=instance;}// Moved outside to ensure DCE works with this flag\nif(enableScopeAPI&&finishedWork.tag===ScopeComponent){instanceToUse=instance.methods;}if(typeof ref==='function'){ref(instanceToUse);}else{{if(!ref.hasOwnProperty('current')){warningWithoutStack$1(false,'Unexpected ref object provided for %s. '+'Use either a ref-setter function or React.createRef().%s',getComponentName(finishedWork.type),getStackByFiberInDevAndProd(finishedWork));}}ref.current=instanceToUse;}}}function commitDetachRef(current$$1){var currentRef=current$$1.ref;if(currentRef!==null){if(typeof currentRef==='function'){currentRef(null);}else{currentRef.current=null;}}}// User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\nfunction commitUnmount(finishedRoot,current$$1,renderPriorityLevel){onCommitUnmount(current$$1);switch(current$$1.tag){case FunctionComponent:case ForwardRef:case MemoComponent:case SimpleMemoComponent:{var updateQueue=current$$1.updateQueue;if(updateQueue!==null){var lastEffect=updateQueue.lastEffect;if(lastEffect!==null){var firstEffect=lastEffect.next;// When the owner fiber is deleted, the destroy function of a passive\n// effect hook is called during the synchronous commit phase. This is\n// a concession to implementation complexity. Calling it in the\n// passive effect phase (like they usually are, when dependencies\n// change during an update) would require either traversing the\n// children of the deleted fiber again, or including unmount effects\n// as part of the fiber effect list.\n//\n// Because this is during the sync commit phase, we need to change\n// the priority.\n//\n// TODO: Reconsider this implementation trade off.\nvar priorityLevel=renderPriorityLevel>NormalPriority?NormalPriority:renderPriorityLevel;runWithPriority$2(priorityLevel,function(){var effect=firstEffect;do{var destroy=effect.destroy;if(destroy!==undefined){safelyCallDestroy(current$$1,destroy);}effect=effect.next;}while(effect!==firstEffect);});}}break;}case ClassComponent:{safelyDetachRef(current$$1);var instance=current$$1.stateNode;if(typeof instance.componentWillUnmount==='function'){safelyCallComponentWillUnmount(current$$1,instance);}return;}case HostComponent:{if(enableFlareAPI){var dependencies=current$$1.dependencies;if(dependencies!==null){var respondersMap=dependencies.responders;if(respondersMap!==null){var responderInstances=Array.from(respondersMap.values());for(var i=0,length=responderInstances.length;i<length;i++){var responderInstance=responderInstances[i];unmountResponderInstance(responderInstance);}dependencies.responders=null;}}}safelyDetachRef(current$$1);return;}case HostPortal:{// TODO: this is recursive.\n// We are also not using this parent because\n// the portal will get pushed immediately.\nif(supportsMutation){unmountHostComponents(finishedRoot,current$$1,renderPriorityLevel);}else if(supportsPersistence){emptyPortalContainer(current$$1);}return;}case FundamentalComponent:{if(enableFundamentalAPI){var fundamentalInstance=current$$1.stateNode;if(fundamentalInstance!==null){unmountFundamentalComponent(fundamentalInstance);current$$1.stateNode=null;}}return;}case DehydratedFragment:{if(enableSuspenseCallback){var hydrationCallbacks=finishedRoot.hydrationCallbacks;if(hydrationCallbacks!==null){var onDeleted=hydrationCallbacks.onDeleted;if(onDeleted){onDeleted(current$$1.stateNode);}}}return;}case ScopeComponent:{if(enableScopeAPI){safelyDetachRef(current$$1);}}}}function commitNestedUnmounts(finishedRoot,root,renderPriorityLevel){// While we're inside a removed host node we don't want to call\n// removeChild on the inner nodes because they're removed by the top\n// call anyway. We also want to call componentWillUnmount on all\n// composites before this host node is removed from the tree. Therefore\n// we do an inner loop while we're still inside the host node.\nvar node=root;while(true){commitUnmount(finishedRoot,node,renderPriorityLevel);// Visit children because they may contain more composite or host nodes.\n// Skip portals because commitUnmount() currently visits them recursively.\nif(node.child!==null&&(// If we use mutation we drill down into portals using commitUnmount above.\n// If we don't use mutation we drill down into portals here instead.\n!supportsMutation||node.tag!==HostPortal)){node.child[\"return\"]=node;node=node.child;continue;}if(node===root){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===root){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}function detachFiber(current$$1){var alternate=current$$1.alternate;// Cut off the return pointers to disconnect it from the tree. Ideally, we\n// should clear the child pointer of the parent alternate to let this\n// get GC:ed but we don't know which for sure which parent is the current\n// one so we'll settle for GC:ing the subtree of this child. This child\n// itself will be GC:ed when the parent updates the next time.\ncurrent$$1[\"return\"]=null;current$$1.child=null;current$$1.memoizedState=null;current$$1.updateQueue=null;current$$1.dependencies=null;current$$1.alternate=null;current$$1.firstEffect=null;current$$1.lastEffect=null;current$$1.pendingProps=null;current$$1.memoizedProps=null;if(alternate!==null){detachFiber(alternate);}}function emptyPortalContainer(current$$1){if(!supportsPersistence){return;}var portal=current$$1.stateNode;var containerInfo=portal.containerInfo;var emptyChildSet=createContainerChildSet(containerInfo);replaceContainerChildren(containerInfo,emptyChildSet);}function commitContainer(finishedWork){if(!supportsPersistence){return;}switch(finishedWork.tag){case ClassComponent:case HostComponent:case HostText:case FundamentalComponent:{return;}case HostRoot:case HostPortal:{var portalOrRoot=finishedWork.stateNode;var containerInfo=portalOrRoot.containerInfo,pendingChildren=portalOrRoot.pendingChildren;replaceContainerChildren(containerInfo,pendingChildren);return;}default:{{{throw Error(\"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\");}}}}}function getHostParentFiber(fiber){var parent=fiber[\"return\"];while(parent!==null){if(isHostParent(parent)){return parent;}parent=parent[\"return\"];}{{throw Error(\"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\");}}}function isHostParent(fiber){return fiber.tag===HostComponent||fiber.tag===HostRoot||fiber.tag===HostPortal;}function getHostSibling(fiber){// We're going to search forward into the tree until we find a sibling host\n// node. Unfortunately, if multiple insertions are done in a row we have to\n// search past them. This leads to exponential search for the next sibling.\n// TODO: Find a more efficient way to do this.\nvar node=fiber;siblings:while(true){// If we didn't find anything, let's try the next sibling.\nwhile(node.sibling===null){if(node[\"return\"]===null||isHostParent(node[\"return\"])){// If we pop out of the root or hit the parent the fiber we are the\n// last sibling.\nreturn null;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;while(node.tag!==HostComponent&&node.tag!==HostText&&node.tag!==DehydratedFragment){// If it is not host node and, we might have a host node inside it.\n// Try to search down until we find one.\nif(node.effectTag&Placement){// If we don't have a child, try the siblings instead.\ncontinue siblings;}// If we don't have a child, try the siblings instead.\n// We also skip portals because they are not part of this host tree.\nif(node.child===null||node.tag===HostPortal){continue siblings;}else{node.child[\"return\"]=node;node=node.child;}}// Check if this host node is stable or about to be placed.\nif(!(node.effectTag&Placement)){// Found it!\nreturn node.stateNode;}}}function commitPlacement(finishedWork){if(!supportsMutation){return;}// Recursively insert all host nodes into the parent.\nvar parentFiber=getHostParentFiber(finishedWork);// Note: these two variables *must* always be updated together.\nvar parent;var isContainer;var parentStateNode=parentFiber.stateNode;switch(parentFiber.tag){case HostComponent:parent=parentStateNode;isContainer=false;break;case HostRoot:parent=parentStateNode.containerInfo;isContainer=true;break;case HostPortal:parent=parentStateNode.containerInfo;isContainer=true;break;case FundamentalComponent:if(enableFundamentalAPI){parent=parentStateNode.instance;isContainer=false;}// eslint-disable-next-line-no-fallthrough\ndefault:{{throw Error(\"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\");}}}if(parentFiber.effectTag&ContentReset){// Reset the text content of the parent before doing any insertions\nresetTextContent(parent);// Clear ContentReset from the effect tag\nparentFiber.effectTag&=~ContentReset;}var before=getHostSibling(finishedWork);// We only have the top Fiber that was inserted but we need to recurse down its\n// children to find all the terminal nodes.\nvar node=finishedWork;while(true){var isHost=node.tag===HostComponent||node.tag===HostText;if(isHost||enableFundamentalAPI&&node.tag===FundamentalComponent){var stateNode=isHost?node.stateNode:node.stateNode.instance;if(before){if(isContainer){insertInContainerBefore(parent,stateNode,before);}else{insertBefore(parent,stateNode,before);}}else{if(isContainer){appendChildToContainer(parent,stateNode);}else{appendChild(parent,stateNode);}}}else if(node.tag===HostPortal){// If the insertion itself is a portal, then we don't want to traverse\n// down its children. Instead, we'll get insertions from each child in\n// the portal directly.\n}else if(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}if(node===finishedWork){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===finishedWork){return;}node=node[\"return\"];}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}function unmountHostComponents(finishedRoot,current$$1,renderPriorityLevel){// We only have the top Fiber that was deleted but we need to recurse down its\n// children to find all the terminal nodes.\nvar node=current$$1;// Each iteration, currentParent is populated with node's host parent if not\n// currentParentIsValid.\nvar currentParentIsValid=false;// Note: these two variables *must* always be updated together.\nvar currentParent;var currentParentIsContainer;while(true){if(!currentParentIsValid){var parent=node[\"return\"];findParent:while(true){if(!(parent!==null)){{throw Error(\"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\");}}var parentStateNode=parent.stateNode;switch(parent.tag){case HostComponent:currentParent=parentStateNode;currentParentIsContainer=false;break findParent;case HostRoot:currentParent=parentStateNode.containerInfo;currentParentIsContainer=true;break findParent;case HostPortal:currentParent=parentStateNode.containerInfo;currentParentIsContainer=true;break findParent;case FundamentalComponent:if(enableFundamentalAPI){currentParent=parentStateNode.instance;currentParentIsContainer=false;}}parent=parent[\"return\"];}currentParentIsValid=true;}if(node.tag===HostComponent||node.tag===HostText){commitNestedUnmounts(finishedRoot,node,renderPriorityLevel);// After all the children have unmounted, it is now safe to remove the\n// node from the tree.\nif(currentParentIsContainer){removeChildFromContainer(currentParent,node.stateNode);}else{removeChild(currentParent,node.stateNode);}// Don't visit children because we already visited them.\n}else if(enableFundamentalAPI&&node.tag===FundamentalComponent){var fundamentalNode=node.stateNode.instance;commitNestedUnmounts(finishedRoot,node,renderPriorityLevel);// After all the children have unmounted, it is now safe to remove the\n// node from the tree.\nif(currentParentIsContainer){removeChildFromContainer(currentParent,fundamentalNode);}else{removeChild(currentParent,fundamentalNode);}}else if(enableSuspenseServerRenderer&&node.tag===DehydratedFragment){if(enableSuspenseCallback){var hydrationCallbacks=finishedRoot.hydrationCallbacks;if(hydrationCallbacks!==null){var onDeleted=hydrationCallbacks.onDeleted;if(onDeleted){onDeleted(node.stateNode);}}}// Delete the dehydrated suspense boundary and all of its content.\nif(currentParentIsContainer){clearSuspenseBoundaryFromContainer(currentParent,node.stateNode);}else{clearSuspenseBoundary(currentParent,node.stateNode);}}else if(node.tag===HostPortal){if(node.child!==null){// When we go into a portal, it becomes the parent to remove from.\n// We will reassign it back when we pop the portal on the way up.\ncurrentParent=node.stateNode.containerInfo;currentParentIsContainer=true;// Visit children because portals might contain host components.\nnode.child[\"return\"]=node;node=node.child;continue;}}else{commitUnmount(finishedRoot,node,renderPriorityLevel);// Visit children because we may find more host components below.\nif(node.child!==null){node.child[\"return\"]=node;node=node.child;continue;}}if(node===current$$1){return;}while(node.sibling===null){if(node[\"return\"]===null||node[\"return\"]===current$$1){return;}node=node[\"return\"];if(node.tag===HostPortal){// When we go out of the portal, we need to restore the parent.\n// Since we don't keep a stack of them, we will search for it.\ncurrentParentIsValid=false;}}node.sibling[\"return\"]=node[\"return\"];node=node.sibling;}}function commitDeletion(finishedRoot,current$$1,renderPriorityLevel){if(supportsMutation){// Recursively delete all host nodes from the parent.\n// Detach refs and call componentWillUnmount() on the whole subtree.\nunmountHostComponents(finishedRoot,current$$1,renderPriorityLevel);}else{// Detach refs and call componentWillUnmount() on the whole subtree.\ncommitNestedUnmounts(finishedRoot,current$$1,renderPriorityLevel);}detachFiber(current$$1);}function commitWork(current$$1,finishedWork){if(!supportsMutation){switch(finishedWork.tag){case FunctionComponent:case ForwardRef:case MemoComponent:case SimpleMemoComponent:{// Note: We currently never use MountMutation, but useLayout uses\n// UnmountMutation.\ncommitHookEffectList(UnmountMutation,MountMutation,finishedWork);return;}case Profiler:{return;}case SuspenseComponent:{commitSuspenseComponent(finishedWork);attachSuspenseRetryListeners(finishedWork);return;}case SuspenseListComponent:{attachSuspenseRetryListeners(finishedWork);return;}case HostRoot:{if(supportsHydration){var root=finishedWork.stateNode;if(root.hydrate){// We've just hydrated. No need to hydrate again.\nroot.hydrate=false;commitHydratedContainer(root.containerInfo);}}break;}}commitContainer(finishedWork);return;}switch(finishedWork.tag){case FunctionComponent:case ForwardRef:case MemoComponent:case SimpleMemoComponent:{// Note: We currently never use MountMutation, but useLayout uses\n// UnmountMutation.\ncommitHookEffectList(UnmountMutation,MountMutation,finishedWork);return;}case ClassComponent:{return;}case HostComponent:{var instance=finishedWork.stateNode;if(instance!=null){// Commit the work prepared earlier.\nvar newProps=finishedWork.memoizedProps;// For hydration we reuse the update path but we treat the oldProps\n// as the newProps. The updatePayload will contain the real change in\n// this case.\nvar oldProps=current$$1!==null?current$$1.memoizedProps:newProps;var type=finishedWork.type;// TODO: Type the updateQueue to be specific to host components.\nvar updatePayload=finishedWork.updateQueue;finishedWork.updateQueue=null;if(updatePayload!==null){commitUpdate(instance,updatePayload,type,oldProps,newProps,finishedWork);}if(enableFlareAPI){var prevListeners=oldProps.listeners;var nextListeners=newProps.listeners;if(prevListeners!==nextListeners){updateEventListeners(nextListeners,finishedWork,null);}}}return;}case HostText:{if(!(finishedWork.stateNode!==null)){{throw Error(\"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\");}}var textInstance=finishedWork.stateNode;var newText=finishedWork.memoizedProps;// For hydration we reuse the update path but we treat the oldProps\n// as the newProps. The updatePayload will contain the real change in\n// this case.\nvar oldText=current$$1!==null?current$$1.memoizedProps:newText;commitTextUpdate(textInstance,oldText,newText);return;}case HostRoot:{if(supportsHydration){var _root=finishedWork.stateNode;if(_root.hydrate){// We've just hydrated. No need to hydrate again.\n_root.hydrate=false;commitHydratedContainer(_root.containerInfo);}}return;}case Profiler:{return;}case SuspenseComponent:{commitSuspenseComponent(finishedWork);attachSuspenseRetryListeners(finishedWork);return;}case SuspenseListComponent:{attachSuspenseRetryListeners(finishedWork);return;}case IncompleteClassComponent:{return;}case FundamentalComponent:{if(enableFundamentalAPI){var fundamentalInstance=finishedWork.stateNode;updateFundamentalComponent(fundamentalInstance);}return;}case ScopeComponent:{if(enableScopeAPI){var scopeInstance=finishedWork.stateNode;scopeInstance.fiber=finishedWork;if(enableFlareAPI){var _newProps=finishedWork.memoizedProps;var _oldProps=current$$1!==null?current$$1.memoizedProps:_newProps;var _prevListeners=_oldProps.listeners;var _nextListeners=_newProps.listeners;if(_prevListeners!==_nextListeners){updateEventListeners(_nextListeners,finishedWork,null);}}}return;}default:{{{throw Error(\"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\");}}}}}function commitSuspenseComponent(finishedWork){var newState=finishedWork.memoizedState;var newDidTimeout;var primaryChildParent=finishedWork;if(newState===null){newDidTimeout=false;}else{newDidTimeout=true;primaryChildParent=finishedWork.child;markCommitTimeOfFallback();}if(supportsMutation&&primaryChildParent!==null){hideOrUnhideAllChildren(primaryChildParent,newDidTimeout);}if(enableSuspenseCallback&&newState!==null){var suspenseCallback=finishedWork.memoizedProps.suspenseCallback;if(typeof suspenseCallback==='function'){var thenables=finishedWork.updateQueue;if(thenables!==null){suspenseCallback(new Set(thenables));}}else{if(suspenseCallback!==undefined){warning$1(false,'Unexpected type for suspenseCallback.');}}}}function commitSuspenseHydrationCallbacks(finishedRoot,finishedWork){if(!supportsHydration){return;}var newState=finishedWork.memoizedState;if(newState===null){var current$$1=finishedWork.alternate;if(current$$1!==null){var prevState=current$$1.memoizedState;if(prevState!==null){var suspenseInstance=prevState.dehydrated;if(suspenseInstance!==null){commitHydratedSuspenseInstance(suspenseInstance);if(enableSuspenseCallback){var hydrationCallbacks=finishedRoot.hydrationCallbacks;if(hydrationCallbacks!==null){var onHydrated=hydrationCallbacks.onHydrated;if(onHydrated){onHydrated(suspenseInstance);}}}}}}}}function attachSuspenseRetryListeners(finishedWork){// If this boundary just timed out, then it will have a set of thenables.\n// For each thenable, attach a listener so that when it resolves, React\n// attempts to re-render the boundary in the primary (pre-timeout) state.\nvar thenables=finishedWork.updateQueue;if(thenables!==null){finishedWork.updateQueue=null;var retryCache=finishedWork.stateNode;if(retryCache===null){retryCache=finishedWork.stateNode=new PossiblyWeakSet();}thenables.forEach(function(thenable){// Memoize using the boundary fiber to prevent redundant listeners.\nvar retry=resolveRetryThenable.bind(null,finishedWork,thenable);if(!retryCache.has(thenable)){if(enableSchedulerTracing){if(thenable.__reactDoNotTraceInteractions!==true){retry=tracing.unstable_wrap(retry);}}retryCache.add(thenable);thenable.then(retry,retry);}});}}function commitResetTextContent(current$$1){if(!supportsMutation){return;}resetTextContent(current$$1.stateNode);}var PossiblyWeakMap$1=typeof WeakMap==='function'?WeakMap:Map;function createRootErrorUpdate(fiber,errorInfo,expirationTime){var update=createUpdate(expirationTime,null);// Unmount the root by rendering null.\nupdate.tag=CaptureUpdate;// Caution: React DevTools currently depends on this property\n// being called \"element\".\nupdate.payload={element:null};var error=errorInfo.value;update.callback=function(){onUncaughtError(error);logError(fiber,errorInfo);};return update;}function createClassErrorUpdate(fiber,errorInfo,expirationTime){var update=createUpdate(expirationTime,null);update.tag=CaptureUpdate;var getDerivedStateFromError=fiber.type.getDerivedStateFromError;if(typeof getDerivedStateFromError==='function'){var error=errorInfo.value;update.payload=function(){logError(fiber,errorInfo);return getDerivedStateFromError(error);};}var inst=fiber.stateNode;if(inst!==null&&typeof inst.componentDidCatch==='function'){update.callback=function callback(){{markFailedErrorBoundaryForHotReloading(fiber);}if(typeof getDerivedStateFromError!=='function'){// To preserve the preexisting retry behavior of error boundaries,\n// we keep track of which ones already failed during this batch.\n// This gets reset before we yield back to the browser.\n// TODO: Warn in strict mode if getDerivedStateFromError is\n// not defined.\nmarkLegacyErrorBoundaryAsFailed(this);// Only log here if componentDidCatch is the only error boundary method defined\nlogError(fiber,errorInfo);}var error=errorInfo.value;var stack=errorInfo.stack;this.componentDidCatch(error,{componentStack:stack!==null?stack:''});{if(typeof getDerivedStateFromError!=='function'){// If componentDidCatch is the only error boundary method defined,\n// then it needs to call setState to recover from errors.\n// If no state update is scheduled then the boundary will swallow the error.\n!(fiber.expirationTime===Sync)?warningWithoutStack$1(false,'%s: Error boundaries should implement getDerivedStateFromError(). '+'In that method, return a state update to display an error message or fallback UI.',getComponentName(fiber.type)||'Unknown'):void 0;}}};}else{update.callback=function(){markFailedErrorBoundaryForHotReloading(fiber);};}return update;}function attachPingListener(root,renderExpirationTime,thenable){// Attach a listener to the promise to \"ping\" the root and retry. But\n// only if one does not already exist for the current render expiration\n// time (which acts like a \"thread ID\" here).\nvar pingCache=root.pingCache;var threadIDs;if(pingCache===null){pingCache=root.pingCache=new PossiblyWeakMap$1();threadIDs=new Set();pingCache.set(thenable,threadIDs);}else{threadIDs=pingCache.get(thenable);if(threadIDs===undefined){threadIDs=new Set();pingCache.set(thenable,threadIDs);}}if(!threadIDs.has(renderExpirationTime)){// Memoize using the thread ID to prevent redundant listeners.\nthreadIDs.add(renderExpirationTime);var ping=pingSuspendedRoot.bind(null,root,thenable,renderExpirationTime);thenable.then(ping,ping);}}function throwException(root,returnFiber,sourceFiber,value,renderExpirationTime){// The source fiber did not complete.\nsourceFiber.effectTag|=Incomplete;// Its effect list is no longer valid.\nsourceFiber.firstEffect=sourceFiber.lastEffect=null;if(value!==null&&_typeof(value)==='object'&&typeof value.then==='function'){// This is a thenable.\nvar thenable=value;checkForWrongSuspensePriorityInDEV(sourceFiber);var hasInvisibleParentBoundary=hasSuspenseContext(suspenseStackCursor.current,InvisibleParentSuspenseContext);// Schedule the nearest Suspense to re-render the timed out view.\nvar _workInProgress=returnFiber;do{if(_workInProgress.tag===SuspenseComponent&&shouldCaptureSuspense(_workInProgress,hasInvisibleParentBoundary)){// Found the nearest boundary.\n// Stash the promise on the boundary fiber. If the boundary times out, we'll\n// attach another listener to flip the boundary back to its normal state.\nvar thenables=_workInProgress.updateQueue;if(thenables===null){var updateQueue=new Set();updateQueue.add(thenable);_workInProgress.updateQueue=updateQueue;}else{thenables.add(thenable);}// If the boundary is outside of blocking mode, we should *not*\n// suspend the commit. Pretend as if the suspended component rendered\n// null and keep rendering. In the commit phase, we'll schedule a\n// subsequent synchronous update to re-render the Suspense.\n//\n// Note: It doesn't matter whether the component that suspended was\n// inside a blocking mode tree. If the Suspense is outside of it, we\n// should *not* suspend the commit.\nif((_workInProgress.mode&BlockingMode)===NoMode){_workInProgress.effectTag|=DidCapture;// We're going to commit this fiber even though it didn't complete.\n// But we shouldn't call any lifecycle methods or callbacks. Remove\n// all lifecycle effect tags.\nsourceFiber.effectTag&=~(LifecycleEffectMask|Incomplete);if(sourceFiber.tag===ClassComponent){var currentSourceFiber=sourceFiber.alternate;if(currentSourceFiber===null){// This is a new mount. Change the tag so it's not mistaken for a\n// completed class component. For example, we should not call\n// componentWillUnmount if it is deleted.\nsourceFiber.tag=IncompleteClassComponent;}else{// When we try rendering again, we should not reuse the current fiber,\n// since it's known to be in an inconsistent state. Use a force update to\n// prevent a bail out.\nvar update=createUpdate(Sync,null);update.tag=ForceUpdate;enqueueUpdate(sourceFiber,update);}}// The source fiber did not complete. Mark it with Sync priority to\n// indicate that it still has pending work.\nsourceFiber.expirationTime=Sync;// Exit without suspending.\nreturn;}// Confirmed that the boundary is in a concurrent mode tree. Continue\n// with the normal suspend path.\n//\n// After this we'll use a set of heuristics to determine whether this\n// render pass will run to completion or restart or \"suspend\" the commit.\n// The actual logic for this is spread out in different places.\n//\n// This first principle is that if we're going to suspend when we complete\n// a root, then we should also restart if we get an update or ping that\n// might unsuspend it, and vice versa. The only reason to suspend is\n// because you think you might want to restart before committing. However,\n// it doesn't make sense to restart only while in the period we're suspended.\n//\n// Restarting too aggressively is also not good because it starves out any\n// intermediate loading state. So we use heuristics to determine when.\n// Suspense Heuristics\n//\n// If nothing threw a Promise or all the same fallbacks are already showing,\n// then don't suspend/restart.\n//\n// If this is an initial render of a new tree of Suspense boundaries and\n// those trigger a fallback, then don't suspend/restart. We want to ensure\n// that we can show the initial loading state as quickly as possible.\n//\n// If we hit a \"Delayed\" case, such as when we'd switch from content back into\n// a fallback, then we should always suspend/restart. SuspenseConfig applies to\n// this case. If none is defined, JND is used instead.\n//\n// If we're already showing a fallback and it gets \"retried\", allowing us to show\n// another level, but there's still an inner boundary that would show a fallback,\n// then we suspend/restart for 500ms since the last time we showed a fallback\n// anywhere in the tree. This effectively throttles progressive loading into a\n// consistent train of commits. This also gives us an opportunity to restart to\n// get to the completed state slightly earlier.\n//\n// If there's ambiguity due to batching it's resolved in preference of:\n// 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n//\n// We want to ensure that a \"busy\" state doesn't get force committed. We want to\n// ensure that new initial loading states can commit as soon as possible.\nattachPingListener(root,renderExpirationTime,thenable);_workInProgress.effectTag|=ShouldCapture;_workInProgress.expirationTime=renderExpirationTime;return;}// This boundary already captured during this render. Continue to the next\n// boundary.\n_workInProgress=_workInProgress[\"return\"];}while(_workInProgress!==null);// No boundary was found. Fallthrough to error mode.\n// TODO: Use invariant so the message is stripped in prod?\nvalue=new Error((getComponentName(sourceFiber.type)||'A React component')+' suspended while rendering, but no fallback UI was specified.\\n'+'\\n'+'Add a <Suspense fallback=...> component higher in the tree to '+'provide a loading indicator or placeholder to display.'+getStackByFiberInDevAndProd(sourceFiber));}// We didn't find a boundary that could handle this type of exception. Start\n// over and traverse parent path again, this time treating the exception\n// as an error.\nrenderDidError();value=createCapturedValue(value,sourceFiber);var workInProgress=returnFiber;do{switch(workInProgress.tag){case HostRoot:{var _errorInfo=value;workInProgress.effectTag|=ShouldCapture;workInProgress.expirationTime=renderExpirationTime;var _update=createRootErrorUpdate(workInProgress,_errorInfo,renderExpirationTime);enqueueCapturedUpdate(workInProgress,_update);return;}case ClassComponent:// Capture and retry\nvar errorInfo=value;var ctor=workInProgress.type;var instance=workInProgress.stateNode;if((workInProgress.effectTag&DidCapture)===NoEffect&&(typeof ctor.getDerivedStateFromError==='function'||instance!==null&&typeof instance.componentDidCatch==='function'&&!isAlreadyFailedLegacyErrorBoundary(instance))){workInProgress.effectTag|=ShouldCapture;workInProgress.expirationTime=renderExpirationTime;// Schedule the error boundary to re-render using updated state\nvar _update2=createClassErrorUpdate(workInProgress,errorInfo,renderExpirationTime);enqueueCapturedUpdate(workInProgress,_update2);return;}break;default:break;}workInProgress=workInProgress[\"return\"];}while(workInProgress!==null);}var ceil=Math.ceil;var ReactCurrentDispatcher=ReactSharedInternals.ReactCurrentDispatcher;var ReactCurrentOwner$2=ReactSharedInternals.ReactCurrentOwner;var IsSomeRendererActing=ReactSharedInternals.IsSomeRendererActing;var NoContext=/* */0;var BatchedContext=/* */1;var EventContext=/* */2;var DiscreteEventContext=/* */4;var LegacyUnbatchedContext=/* */8;var RenderContext=/* */16;var CommitContext=/* */32;var RootIncomplete=0;var RootFatalErrored=1;var RootErrored=2;var RootSuspended=3;var RootSuspendedWithDelay=4;var RootCompleted=5;// Describes where we are in the React execution stack\nvar executionContext=NoContext;// The root we're working on\nvar workInProgressRoot=null;// The fiber we're working on\nvar workInProgress=null;// The expiration time we're rendering\nvar renderExpirationTime=NoWork;// Whether to root completed, errored, suspended, etc.\nvar workInProgressRootExitStatus=RootIncomplete;// A fatal error, if one is thrown\nvar workInProgressRootFatalError=null;// Most recent event time among processed updates during this render.\n// This is conceptually a time stamp but expressed in terms of an ExpirationTime\n// because we deal mostly with expiration times in the hot path, so this avoids\n// the conversion happening in the hot path.\nvar workInProgressRootLatestProcessedExpirationTime=Sync;var workInProgressRootLatestSuspenseTimeout=Sync;var workInProgressRootCanSuspendUsingConfig=null;// The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\nvar workInProgressRootNextUnprocessedUpdateTime=NoWork;// If we're pinged while rendering we don't always restart immediately.\n// This flag determines if it might be worthwhile to restart if an opportunity\n// happens latere.\nvar workInProgressRootHasPendingPing=false;// The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\nvar globalMostRecentFallbackTime=0;var FALLBACK_THROTTLE_MS=500;var nextEffect=null;var hasUncaughtError=false;var firstUncaughtError=null;var legacyErrorBoundariesThatAlreadyFailed=null;var rootDoesHavePassiveEffects=false;var rootWithPendingPassiveEffects=null;var pendingPassiveEffectsRenderPriority=NoPriority;var pendingPassiveEffectsExpirationTime=NoWork;var rootsWithPendingDiscreteUpdates=null;// Use these to prevent an infinite loop of nested updates\nvar NESTED_UPDATE_LIMIT=50;var nestedUpdateCount=0;var rootWithNestedUpdates=null;var NESTED_PASSIVE_UPDATE_LIMIT=50;var nestedPassiveUpdateCount=0;var interruptedBy=null;// Marks the need to reschedule pending interactions at these expiration times\n// during the commit phase. This enables them to be traced across components\n// that spawn new work during render. E.g. hidden boundaries, suspended SSR\n// hydration or SuspenseList.\nvar spawnedWorkDuringRender=null;// Expiration times are computed by adding to the current time (the start\n// time). However, if two updates are scheduled within the same event, we\n// should treat their start times as simultaneous, even if the actual clock\n// time has advanced between the first and second call.\n// In other words, because expiration times determine how updates are batched,\n// we want all updates of like priority that occur within the same event to\n// receive the same expiration time. Otherwise we get tearing.\nvar currentEventTime=NoWork;function requestCurrentTimeForUpdate(){if((executionContext&(RenderContext|CommitContext))!==NoContext){// We're inside React, so it's fine to read the actual time.\nreturn msToExpirationTime(now());}// We're not inside React, so we may be in the middle of a browser event.\nif(currentEventTime!==NoWork){// Use the same start time for all updates until we enter React again.\nreturn currentEventTime;}// This is the first update since React yielded. Compute a new start time.\ncurrentEventTime=msToExpirationTime(now());return currentEventTime;}function getCurrentTime(){return msToExpirationTime(now());}function computeExpirationForFiber(currentTime,fiber,suspenseConfig){var mode=fiber.mode;if((mode&BlockingMode)===NoMode){return Sync;}var priorityLevel=getCurrentPriorityLevel();if((mode&ConcurrentMode)===NoMode){return priorityLevel===ImmediatePriority?Sync:Batched;}if((executionContext&RenderContext)!==NoContext){// Use whatever time we're already rendering\n// TODO: Should there be a way to opt out, like with `runWithPriority`?\nreturn renderExpirationTime;}var expirationTime;if(suspenseConfig!==null){// Compute an expiration time based on the Suspense timeout.\nexpirationTime=computeSuspenseExpiration(currentTime,suspenseConfig.timeoutMs|0||LOW_PRIORITY_EXPIRATION);}else{// Compute an expiration time based on the Scheduler priority.\nswitch(priorityLevel){case ImmediatePriority:expirationTime=Sync;break;case UserBlockingPriority$2:// TODO: Rename this to computeUserBlockingExpiration\nexpirationTime=computeInteractiveExpiration(currentTime);break;case NormalPriority:case LowPriority:// TODO: Handle LowPriority\n// TODO: Rename this to... something better.\nexpirationTime=computeAsyncExpiration(currentTime);break;case IdlePriority:expirationTime=Idle;break;default:{{throw Error(\"Expected a valid priority level\");}}}}// If we're in the middle of rendering a tree, do not update at the same\n// expiration time that is already rendering.\n// TODO: We shouldn't have to do this if the update is on a different root.\n// Refactor computeExpirationForFiber + scheduleUpdate so we have access to\n// the root when we check for this condition.\nif(workInProgressRoot!==null&&expirationTime===renderExpirationTime){// This is a trick to move this update into a separate batch\nexpirationTime-=1;}return expirationTime;}function scheduleUpdateOnFiber(fiber,expirationTime){checkForNestedUpdates();warnAboutInvalidUpdatesOnClassComponentsInDEV(fiber);var root=markUpdateTimeFromFiberToRoot(fiber,expirationTime);if(root===null){warnAboutUpdateOnUnmountedFiberInDEV(fiber);return;}checkForInterruption(fiber,expirationTime);recordScheduleUpdate();// TODO: computeExpirationForFiber also reads the priority. Pass the\n// priority as an argument to that function and this one.\nvar priorityLevel=getCurrentPriorityLevel();if(expirationTime===Sync){if(// Check if we're inside unbatchedUpdates\n(executionContext&LegacyUnbatchedContext)!==NoContext&&// Check if we're not already rendering\n(executionContext&(RenderContext|CommitContext))===NoContext){// Register pending interactions on the root to avoid losing traced interaction data.\nschedulePendingInteractions(root,expirationTime);// This is a legacy edge case. The initial mount of a ReactDOM.render-ed\n// root inside of batchedUpdates should be synchronous, but layout updates\n// should be deferred until the end of the batch.\nperformSyncWorkOnRoot(root);}else{ensureRootIsScheduled(root);schedulePendingInteractions(root,expirationTime);if(executionContext===NoContext){// Flush the synchronous work now, unless we're already working or inside\n// a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n// scheduleCallbackForFiber to preserve the ability to schedule a callback\n// without immediately flushing it. We only do this for user-initiated\n// updates, to preserve historical behavior of legacy mode.\nflushSyncCallbackQueue();}}}else{ensureRootIsScheduled(root);schedulePendingInteractions(root,expirationTime);}if((executionContext&DiscreteEventContext)!==NoContext&&(// Only updates at user-blocking priority or greater are considered\n// discrete, even inside a discrete event.\npriorityLevel===UserBlockingPriority$2||priorityLevel===ImmediatePriority)){// This is the result of a discrete event. Track the lowest priority\n// discrete update per root so we can flush them early, if needed.\nif(rootsWithPendingDiscreteUpdates===null){rootsWithPendingDiscreteUpdates=new Map([[root,expirationTime]]);}else{var lastDiscreteTime=rootsWithPendingDiscreteUpdates.get(root);if(lastDiscreteTime===undefined||lastDiscreteTime>expirationTime){rootsWithPendingDiscreteUpdates.set(root,expirationTime);}}}}var scheduleWork=scheduleUpdateOnFiber;// This is split into a separate function so we can mark a fiber with pending\n// work without treating it as a typical update that originates from an event;\n// e.g. retrying a Suspense boundary isn't an update, but it does schedule work\n// on a fiber.\nfunction markUpdateTimeFromFiberToRoot(fiber,expirationTime){// Update the source fiber's expiration time\nif(fiber.expirationTime<expirationTime){fiber.expirationTime=expirationTime;}var alternate=fiber.alternate;if(alternate!==null&&alternate.expirationTime<expirationTime){alternate.expirationTime=expirationTime;}// Walk the parent path to the root and update the child expiration time.\nvar node=fiber[\"return\"];var root=null;if(node===null&&fiber.tag===HostRoot){root=fiber.stateNode;}else{while(node!==null){alternate=node.alternate;if(node.childExpirationTime<expirationTime){node.childExpirationTime=expirationTime;if(alternate!==null&&alternate.childExpirationTime<expirationTime){alternate.childExpirationTime=expirationTime;}}else if(alternate!==null&&alternate.childExpirationTime<expirationTime){alternate.childExpirationTime=expirationTime;}if(node[\"return\"]===null&&node.tag===HostRoot){root=node.stateNode;break;}node=node[\"return\"];}}if(root!==null){if(workInProgressRoot===root){// Received an update to a tree that's in the middle of rendering. Mark\n// that's unprocessed work on this root.\nmarkUnprocessedUpdateTime(expirationTime);if(workInProgressRootExitStatus===RootSuspendedWithDelay){// The root already suspended with a delay, which means this render\n// definitely won't finish. Since we have a new update, let's mark it as\n// suspended now, right before marking the incoming update. This has the\n// effect of interrupting the current render and switching to the update.\n// TODO: This happens to work when receiving an update during the render\n// phase, because of the trick inside computeExpirationForFiber to\n// subtract 1 from `renderExpirationTime` to move it into a\n// separate bucket. But we should probably model it with an exception,\n// using the same mechanism we use to force hydration of a subtree.\n// TODO: This does not account for low pri updates that were already\n// scheduled before the root started rendering. Need to track the next\n// pending expiration time (perhaps by backtracking the return path) and\n// then trigger a restart in the `renderDidSuspendDelayIfPossible` path.\nmarkRootSuspendedAtTime(root,renderExpirationTime);}}// Mark that the root has a pending update.\nmarkRootUpdatedAtTime(root,expirationTime);}return root;}function getNextRootExpirationTimeToWorkOn(root){// Determines the next expiration time that the root should render, taking\n// into account levels that may be suspended, or levels that may have\n// received a ping.\nvar lastExpiredTime=root.lastExpiredTime;if(lastExpiredTime!==NoWork){return lastExpiredTime;}// \"Pending\" refers to any update that hasn't committed yet, including if it\n// suspended. The \"suspended\" range is therefore a subset.\nvar firstPendingTime=root.firstPendingTime;if(!isRootSuspendedAtTime(root,firstPendingTime)){// The highest priority pending time is not suspended. Let's work on that.\nreturn firstPendingTime;}// If the first pending time is suspended, check if there's a lower priority\n// pending level that we know about. Or check if we received a ping. Work\n// on whichever is higher priority.\nvar lastPingedTime=root.lastPingedTime;var nextKnownPendingLevel=root.nextKnownPendingLevel;return lastPingedTime>nextKnownPendingLevel?lastPingedTime:nextKnownPendingLevel;}// Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the\n// expiration time of the existing task is the same as the expiration time of\n// the next level that the root has work on. This function is called on every\n// update, and right before exiting a task.\nfunction ensureRootIsScheduled(root){var lastExpiredTime=root.lastExpiredTime;if(lastExpiredTime!==NoWork){// Special case: Expired work should flush synchronously.\nroot.callbackExpirationTime=Sync;root.callbackPriority=ImmediatePriority;root.callbackNode=scheduleSyncCallback(performSyncWorkOnRoot.bind(null,root));return;}var expirationTime=getNextRootExpirationTimeToWorkOn(root);var existingCallbackNode=root.callbackNode;if(expirationTime===NoWork){// There's nothing to work on.\nif(existingCallbackNode!==null){root.callbackNode=null;root.callbackExpirationTime=NoWork;root.callbackPriority=NoPriority;}return;}// TODO: If this is an update, we already read the current time. Pass the\n// time as an argument.\nvar currentTime=requestCurrentTimeForUpdate();var priorityLevel=inferPriorityFromExpirationTime(currentTime,expirationTime);// If there's an existing render task, confirm it has the correct priority and\n// expiration time. Otherwise, we'll cancel it and schedule a new one.\nif(existingCallbackNode!==null){var existingCallbackPriority=root.callbackPriority;var existingCallbackExpirationTime=root.callbackExpirationTime;if(// Callback must have the exact same expiration time.\nexistingCallbackExpirationTime===expirationTime&&// Callback must have greater or equal priority.\nexistingCallbackPriority>=priorityLevel){// Existing callback is sufficient.\nreturn;}// Need to schedule a new task.\n// TODO: Instead of scheduling a new task, we should be able to change the\n// priority of the existing one.\ncancelCallback(existingCallbackNode);}root.callbackExpirationTime=expirationTime;root.callbackPriority=priorityLevel;var callbackNode;if(expirationTime===Sync){// Sync React callbacks are scheduled on a special internal queue\ncallbackNode=scheduleSyncCallback(performSyncWorkOnRoot.bind(null,root));}else if(disableSchedulerTimeoutBasedOnReactExpirationTime){callbackNode=scheduleCallback(priorityLevel,performConcurrentWorkOnRoot.bind(null,root));}else{callbackNode=scheduleCallback(priorityLevel,performConcurrentWorkOnRoot.bind(null,root),// Compute a task timeout based on the expiration time. This also affects\n// ordering because tasks are processed in timeout order.\n{timeout:expirationTimeToMs(expirationTime)-now()});}root.callbackNode=callbackNode;}// This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\nfunction performConcurrentWorkOnRoot(root,didTimeout){// Since we know we're in a React event, we can clear the current\n// event time. The next update will compute a new event time.\ncurrentEventTime=NoWork;if(didTimeout){// The render task took too long to complete. Mark the current time as\n// expired to synchronously render all expired work in a single batch.\nvar currentTime=requestCurrentTimeForUpdate();markRootExpiredAtTime(root,currentTime);// This will schedule a synchronous callback.\nensureRootIsScheduled(root);return null;}// Determine the next expiration time to work on, using the fields stored\n// on the root.\nvar expirationTime=getNextRootExpirationTimeToWorkOn(root);if(expirationTime!==NoWork){var originalCallbackNode=root.callbackNode;if(!((executionContext&(RenderContext|CommitContext))===NoContext)){{throw Error(\"Should not already be working.\");}}flushPassiveEffects();// If the root or expiration time have changed, throw out the existing stack\n// and prepare a fresh one. Otherwise we'll continue where we left off.\nif(root!==workInProgressRoot||expirationTime!==renderExpirationTime){prepareFreshStack(root,expirationTime);startWorkOnPendingInteractions(root,expirationTime);}// If we have a work-in-progress fiber, it means there's still work to do\n// in this root.\nif(workInProgress!==null){var prevExecutionContext=executionContext;executionContext|=RenderContext;var prevDispatcher=pushDispatcher(root);var prevInteractions=pushInteractions(root);startWorkLoopTimer(workInProgress);do{try{workLoopConcurrent();break;}catch(thrownValue){handleError(root,thrownValue);}}while(true);resetContextDependencies();executionContext=prevExecutionContext;popDispatcher(prevDispatcher);if(enableSchedulerTracing){popInteractions(prevInteractions);}if(workInProgressRootExitStatus===RootFatalErrored){var fatalError=workInProgressRootFatalError;stopInterruptedWorkLoopTimer();prepareFreshStack(root,expirationTime);markRootSuspendedAtTime(root,expirationTime);ensureRootIsScheduled(root);throw fatalError;}if(workInProgress!==null){// There's still work left over. Exit without committing.\nstopInterruptedWorkLoopTimer();}else{// We now have a consistent tree. The next step is either to commit it,\n// or, if something suspended, wait to commit it after a timeout.\nstopFinishedWorkLoopTimer();var finishedWork=root.finishedWork=root.current.alternate;root.finishedExpirationTime=expirationTime;finishConcurrentRender(root,finishedWork,workInProgressRootExitStatus,expirationTime);}ensureRootIsScheduled(root);if(root.callbackNode===originalCallbackNode){// The task node scheduled for this root is the same one that's\n// currently executed. Need to return a continuation.\nreturn performConcurrentWorkOnRoot.bind(null,root);}}}return null;}function finishConcurrentRender(root,finishedWork,exitStatus,expirationTime){// Set this to null to indicate there's no in-progress render.\nworkInProgressRoot=null;switch(exitStatus){case RootIncomplete:case RootFatalErrored:{{{throw Error(\"Root did not complete. This is a bug in React.\");}}}// Flow knows about invariant, so it complains if I add a break\n// statement, but eslint doesn't know about invariant, so it complains\n// if I do. eslint-disable-next-line no-fallthrough\ncase RootErrored:{// If this was an async render, the error may have happened due to\n// a mutation in a concurrent event. Try rendering one more time,\n// synchronously, to see if the error goes away. If there are\n// lower priority updates, let's include those, too, in case they\n// fix the inconsistency. Render at Idle to include all updates.\n// If it was Idle or Never or some not-yet-invented time, render\n// at that time.\nmarkRootExpiredAtTime(root,expirationTime>Idle?Idle:expirationTime);// We assume that this second render pass will be synchronous\n// and therefore not hit this path again.\nbreak;}case RootSuspended:{markRootSuspendedAtTime(root,expirationTime);var lastSuspendedTime=root.lastSuspendedTime;if(expirationTime===lastSuspendedTime){root.nextKnownPendingLevel=getRemainingExpirationTime(finishedWork);}flushSuspensePriorityWarningInDEV();// We have an acceptable loading state. We need to figure out if we\n// should immediately commit it or wait a bit.\n// If we have processed new updates during this render, we may now\n// have a new loading state ready. We want to ensure that we commit\n// that as soon as possible.\nvar hasNotProcessedNewUpdates=workInProgressRootLatestProcessedExpirationTime===Sync;if(hasNotProcessedNewUpdates&&// do not delay if we're inside an act() scope\n!( true&&flushSuspenseFallbacksInTests&&IsThisRendererActing.current)){// If we have not processed any new updates during this pass, then\n// this is either a retry of an existing fallback state or a\n// hidden tree. Hidden trees shouldn't be batched with other work\n// and after that's fixed it can only be a retry. We're going to\n// throttle committing retries so that we don't show too many\n// loading states too quickly.\nvar msUntilTimeout=globalMostRecentFallbackTime+FALLBACK_THROTTLE_MS-now();// Don't bother with a very short suspense time.\nif(msUntilTimeout>10){if(workInProgressRootHasPendingPing){var lastPingedTime=root.lastPingedTime;if(lastPingedTime===NoWork||lastPingedTime>=expirationTime){// This render was pinged but we didn't get to restart\n// earlier so try restarting now instead.\nroot.lastPingedTime=expirationTime;prepareFreshStack(root,expirationTime);break;}}var nextTime=getNextRootExpirationTimeToWorkOn(root);if(nextTime!==NoWork&&nextTime!==expirationTime){// There's additional work on this root.\nbreak;}if(lastSuspendedTime!==NoWork&&lastSuspendedTime!==expirationTime){// We should prefer to render the fallback of at the last\n// suspended level. Ping the last suspended level to try\n// rendering it again.\nroot.lastPingedTime=lastSuspendedTime;break;}// The render is suspended, it hasn't timed out, and there's no\n// lower priority work to do. Instead of committing the fallback\n// immediately, wait for more data to arrive.\nroot.timeoutHandle=scheduleTimeout(commitRoot.bind(null,root),msUntilTimeout);break;}}// The work expired. Commit immediately.\ncommitRoot(root);break;}case RootSuspendedWithDelay:{markRootSuspendedAtTime(root,expirationTime);var _lastSuspendedTime=root.lastSuspendedTime;if(expirationTime===_lastSuspendedTime){root.nextKnownPendingLevel=getRemainingExpirationTime(finishedWork);}flushSuspensePriorityWarningInDEV();if(// do not delay if we're inside an act() scope\n!( true&&flushSuspenseFallbacksInTests&&IsThisRendererActing.current)){// We're suspended in a state that should be avoided. We'll try to\n// avoid committing it for as long as the timeouts let us.\nif(workInProgressRootHasPendingPing){var _lastPingedTime=root.lastPingedTime;if(_lastPingedTime===NoWork||_lastPingedTime>=expirationTime){// This render was pinged but we didn't get to restart earlier\n// so try restarting now instead.\nroot.lastPingedTime=expirationTime;prepareFreshStack(root,expirationTime);break;}}var _nextTime=getNextRootExpirationTimeToWorkOn(root);if(_nextTime!==NoWork&&_nextTime!==expirationTime){// There's additional work on this root.\nbreak;}if(_lastSuspendedTime!==NoWork&&_lastSuspendedTime!==expirationTime){// We should prefer to render the fallback of at the last\n// suspended level. Ping the last suspended level to try\n// rendering it again.\nroot.lastPingedTime=_lastSuspendedTime;break;}var _msUntilTimeout;if(workInProgressRootLatestSuspenseTimeout!==Sync){// We have processed a suspense config whose expiration time we\n// can use as the timeout.\n_msUntilTimeout=expirationTimeToMs(workInProgressRootLatestSuspenseTimeout)-now();}else if(workInProgressRootLatestProcessedExpirationTime===Sync){// This should never normally happen because only new updates\n// cause delayed states, so we should have processed something.\n// However, this could also happen in an offscreen tree.\n_msUntilTimeout=0;}else{// If we don't have a suspense config, we're going to use a\n// heuristic to determine how long we can suspend.\nvar eventTimeMs=inferTimeFromExpirationTime(workInProgressRootLatestProcessedExpirationTime);var currentTimeMs=now();var timeUntilExpirationMs=expirationTimeToMs(expirationTime)-currentTimeMs;var timeElapsed=currentTimeMs-eventTimeMs;if(timeElapsed<0){// We get this wrong some time since we estimate the time.\ntimeElapsed=0;}_msUntilTimeout=jnd(timeElapsed)-timeElapsed;// Clamp the timeout to the expiration time. TODO: Once the\n// event time is exact instead of inferred from expiration time\n// we don't need this.\nif(timeUntilExpirationMs<_msUntilTimeout){_msUntilTimeout=timeUntilExpirationMs;}}// Don't bother with a very short suspense time.\nif(_msUntilTimeout>10){// The render is suspended, it hasn't timed out, and there's no\n// lower priority work to do. Instead of committing the fallback\n// immediately, wait for more data to arrive.\nroot.timeoutHandle=scheduleTimeout(commitRoot.bind(null,root),_msUntilTimeout);break;}}// The work expired. Commit immediately.\ncommitRoot(root);break;}case RootCompleted:{// The work completed. Ready to commit.\nif(// do not delay if we're inside an act() scope\n!( true&&flushSuspenseFallbacksInTests&&IsThisRendererActing.current)&&workInProgressRootLatestProcessedExpirationTime!==Sync&&workInProgressRootCanSuspendUsingConfig!==null){// If we have exceeded the minimum loading delay, which probably\n// means we have shown a spinner already, we might have to suspend\n// a bit longer to ensure that the spinner is shown for\n// enough time.\nvar _msUntilTimeout2=computeMsUntilSuspenseLoadingDelay(workInProgressRootLatestProcessedExpirationTime,expirationTime,workInProgressRootCanSuspendUsingConfig);if(_msUntilTimeout2>10){markRootSuspendedAtTime(root,expirationTime);root.timeoutHandle=scheduleTimeout(commitRoot.bind(null,root),_msUntilTimeout2);break;}}commitRoot(root);break;}default:{{{throw Error(\"Unknown root exit status.\");}}}}}// This is the entry point for synchronous tasks that don't go\n// through Scheduler\nfunction performSyncWorkOnRoot(root){// Check if there's expired work on this root. Otherwise, render at Sync.\nvar lastExpiredTime=root.lastExpiredTime;var expirationTime=lastExpiredTime!==NoWork?lastExpiredTime:Sync;if(root.finishedExpirationTime===expirationTime){// There's already a pending commit at this expiration time.\n// TODO: This is poorly factored. This case only exists for the\n// batch.commit() API.\ncommitRoot(root);}else{if(!((executionContext&(RenderContext|CommitContext))===NoContext)){{throw Error(\"Should not already be working.\");}}flushPassiveEffects();// If the root or expiration time have changed, throw out the existing stack\n// and prepare a fresh one. Otherwise we'll continue where we left off.\nif(root!==workInProgressRoot||expirationTime!==renderExpirationTime){prepareFreshStack(root,expirationTime);startWorkOnPendingInteractions(root,expirationTime);}// If we have a work-in-progress fiber, it means there's still work to do\n// in this root.\nif(workInProgress!==null){var prevExecutionContext=executionContext;executionContext|=RenderContext;var prevDispatcher=pushDispatcher(root);var prevInteractions=pushInteractions(root);startWorkLoopTimer(workInProgress);do{try{workLoopSync();break;}catch(thrownValue){handleError(root,thrownValue);}}while(true);resetContextDependencies();executionContext=prevExecutionContext;popDispatcher(prevDispatcher);if(enableSchedulerTracing){popInteractions(prevInteractions);}if(workInProgressRootExitStatus===RootFatalErrored){var fatalError=workInProgressRootFatalError;stopInterruptedWorkLoopTimer();prepareFreshStack(root,expirationTime);markRootSuspendedAtTime(root,expirationTime);ensureRootIsScheduled(root);throw fatalError;}if(workInProgress!==null){// This is a sync render, so we should have finished the whole tree.\n{{throw Error(\"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\");}}}else{// We now have a consistent tree. Because this is a sync render, we\n// will commit it even if something suspended.\nstopFinishedWorkLoopTimer();root.finishedWork=root.current.alternate;root.finishedExpirationTime=expirationTime;finishSyncRender(root,workInProgressRootExitStatus,expirationTime);}// Before exiting, make sure there's a callback scheduled for the next\n// pending level.\nensureRootIsScheduled(root);}}return null;}function finishSyncRender(root,exitStatus,expirationTime){// Set this to null to indicate there's no in-progress render.\nworkInProgressRoot=null;{if(exitStatus===RootSuspended||exitStatus===RootSuspendedWithDelay){flushSuspensePriorityWarningInDEV();}}commitRoot(root);}function flushRoot(root,expirationTime){markRootExpiredAtTime(root,expirationTime);ensureRootIsScheduled(root);if((executionContext&(RenderContext|CommitContext))===NoContext){flushSyncCallbackQueue();}}function flushDiscreteUpdates(){// TODO: Should be able to flush inside batchedUpdates, but not inside `act`.\n// However, `act` uses `batchedUpdates`, so there's no way to distinguish\n// those two cases. Need to fix this before exposing flushDiscreteUpdates\n// as a public API.\nif((executionContext&(BatchedContext|RenderContext|CommitContext))!==NoContext){if( true&&(executionContext&RenderContext)!==NoContext){warning$1(false,'unstable_flushDiscreteUpdates: Cannot flush updates when React is '+'already rendering.');}// We're already rendering, so we can't synchronously flush pending work.\n// This is probably a nested event dispatch triggered by a lifecycle/effect,\n// like `el.focus()`. Exit.\nreturn;}flushPendingDiscreteUpdates();// If the discrete updates scheduled passive effects, flush them now so that\n// they fire before the next serial event.\nflushPassiveEffects();}function syncUpdates(fn,a,b,c){return runWithPriority$2(ImmediatePriority,fn.bind(null,a,b,c));}function flushPendingDiscreteUpdates(){if(rootsWithPendingDiscreteUpdates!==null){// For each root with pending discrete updates, schedule a callback to\n// immediately flush them.\nvar roots=rootsWithPendingDiscreteUpdates;rootsWithPendingDiscreteUpdates=null;roots.forEach(function(expirationTime,root){markRootExpiredAtTime(root,expirationTime);ensureRootIsScheduled(root);});// Now flush the immediate queue.\nflushSyncCallbackQueue();}}function batchedUpdates$1(fn,a){var prevExecutionContext=executionContext;executionContext|=BatchedContext;try{return fn(a);}finally{executionContext=prevExecutionContext;if(executionContext===NoContext){// Flush the immediate callbacks that were scheduled during this batch\nflushSyncCallbackQueue();}}}function batchedEventUpdates$1(fn,a){var prevExecutionContext=executionContext;executionContext|=EventContext;try{return fn(a);}finally{executionContext=prevExecutionContext;if(executionContext===NoContext){// Flush the immediate callbacks that were scheduled during this batch\nflushSyncCallbackQueue();}}}function discreteUpdates$1(fn,a,b,c){var prevExecutionContext=executionContext;executionContext|=DiscreteEventContext;try{// Should this\nreturn runWithPriority$2(UserBlockingPriority$2,fn.bind(null,a,b,c));}finally{executionContext=prevExecutionContext;if(executionContext===NoContext){// Flush the immediate callbacks that were scheduled during this batch\nflushSyncCallbackQueue();}}}function unbatchedUpdates(fn,a){var prevExecutionContext=executionContext;executionContext&=~BatchedContext;executionContext|=LegacyUnbatchedContext;try{return fn(a);}finally{executionContext=prevExecutionContext;if(executionContext===NoContext){// Flush the immediate callbacks that were scheduled during this batch\nflushSyncCallbackQueue();}}}function flushSync(fn,a){if((executionContext&(RenderContext|CommitContext))!==NoContext){{{throw Error(\"flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.\");}}}var prevExecutionContext=executionContext;executionContext|=BatchedContext;try{return runWithPriority$2(ImmediatePriority,fn.bind(null,a));}finally{executionContext=prevExecutionContext;// Flush the immediate callbacks that were scheduled during this batch.\n// Note that this will happen even if batchedUpdates is higher up\n// the stack.\nflushSyncCallbackQueue();}}function flushControlled(fn){var prevExecutionContext=executionContext;executionContext|=BatchedContext;try{runWithPriority$2(ImmediatePriority,fn);}finally{executionContext=prevExecutionContext;if(executionContext===NoContext){// Flush the immediate callbacks that were scheduled during this batch\nflushSyncCallbackQueue();}}}function prepareFreshStack(root,expirationTime){root.finishedWork=null;root.finishedExpirationTime=NoWork;var timeoutHandle=root.timeoutHandle;if(timeoutHandle!==noTimeout){// The root previous suspended and scheduled a timeout to commit a fallback\n// state. Now that we have additional work, cancel the timeout.\nroot.timeoutHandle=noTimeout;// $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\ncancelTimeout(timeoutHandle);}if(workInProgress!==null){var interruptedWork=workInProgress[\"return\"];while(interruptedWork!==null){unwindInterruptedWork(interruptedWork);interruptedWork=interruptedWork[\"return\"];}}workInProgressRoot=root;workInProgress=createWorkInProgress(root.current,null,expirationTime);renderExpirationTime=expirationTime;workInProgressRootExitStatus=RootIncomplete;workInProgressRootFatalError=null;workInProgressRootLatestProcessedExpirationTime=Sync;workInProgressRootLatestSuspenseTimeout=Sync;workInProgressRootCanSuspendUsingConfig=null;workInProgressRootNextUnprocessedUpdateTime=NoWork;workInProgressRootHasPendingPing=false;if(enableSchedulerTracing){spawnedWorkDuringRender=null;}{ReactStrictModeWarnings.discardPendingWarnings();componentsThatTriggeredHighPriSuspend=null;}}function handleError(root,thrownValue){do{try{// Reset module-level state that was set during the render phase.\nresetContextDependencies();resetHooks();resetCurrentFiber();if(workInProgress===null||workInProgress[\"return\"]===null){// Expected to be working on a non-root fiber. This is a fatal error\n// because there's no ancestor that can handle it; the root is\n// supposed to capture all errors that weren't caught by an error\n// boundary.\nworkInProgressRootExitStatus=RootFatalErrored;workInProgressRootFatalError=thrownValue;return null;}if(enableProfilerTimer&&workInProgress.mode&ProfileMode){// Record the time spent rendering before an error was thrown. This\n// avoids inaccurate Profiler durations in the case of a\n// suspended render.\nstopProfilerTimerIfRunningAndRecordDelta(workInProgress,true);}throwException(root,workInProgress[\"return\"],workInProgress,thrownValue,renderExpirationTime);workInProgress=completeUnitOfWork(workInProgress);}catch(yetAnotherThrownValue){// Something in the return path also threw.\nthrownValue=yetAnotherThrownValue;continue;}// Return to the normal work loop.\nreturn;}while(true);}function pushDispatcher(root){var prevDispatcher=ReactCurrentDispatcher.current;ReactCurrentDispatcher.current=ContextOnlyDispatcher;if(prevDispatcher===null){// The React isomorphic package does not include a default dispatcher.\n// Instead the first renderer will lazily attach one, in order to give\n// nicer error messages.\nreturn ContextOnlyDispatcher;}else{return prevDispatcher;}}function popDispatcher(prevDispatcher){ReactCurrentDispatcher.current=prevDispatcher;}function pushInteractions(root){if(enableSchedulerTracing){var prevInteractions=tracing.__interactionsRef.current;tracing.__interactionsRef.current=root.memoizedInteractions;return prevInteractions;}return null;}function popInteractions(prevInteractions){if(enableSchedulerTracing){tracing.__interactionsRef.current=prevInteractions;}}function markCommitTimeOfFallback(){globalMostRecentFallbackTime=now();}function markRenderEventTimeAndConfig(expirationTime,suspenseConfig){if(expirationTime<workInProgressRootLatestProcessedExpirationTime&&expirationTime>Idle){workInProgressRootLatestProcessedExpirationTime=expirationTime;}if(suspenseConfig!==null){if(expirationTime<workInProgressRootLatestSuspenseTimeout&&expirationTime>Idle){workInProgressRootLatestSuspenseTimeout=expirationTime;// Most of the time we only have one config and getting wrong is not bad.\nworkInProgressRootCanSuspendUsingConfig=suspenseConfig;}}}function markUnprocessedUpdateTime(expirationTime){if(expirationTime>workInProgressRootNextUnprocessedUpdateTime){workInProgressRootNextUnprocessedUpdateTime=expirationTime;}}function renderDidSuspend(){if(workInProgressRootExitStatus===RootIncomplete){workInProgressRootExitStatus=RootSuspended;}}function renderDidSuspendDelayIfPossible(){if(workInProgressRootExitStatus===RootIncomplete||workInProgressRootExitStatus===RootSuspended){workInProgressRootExitStatus=RootSuspendedWithDelay;}// Check if there's a lower priority update somewhere else in the tree.\nif(workInProgressRootNextUnprocessedUpdateTime!==NoWork&&workInProgressRoot!==null){// Mark the current render as suspended, and then mark that there's a\n// pending update.\n// TODO: This should immediately interrupt the current render, instead\n// of waiting until the next time we yield.\nmarkRootSuspendedAtTime(workInProgressRoot,renderExpirationTime);markRootUpdatedAtTime(workInProgressRoot,workInProgressRootNextUnprocessedUpdateTime);}}function renderDidError(){if(workInProgressRootExitStatus!==RootCompleted){workInProgressRootExitStatus=RootErrored;}}// Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\nfunction renderHasNotSuspendedYet(){// If something errored or completed, we can't really be sure,\n// so those are false.\nreturn workInProgressRootExitStatus===RootIncomplete;}function inferTimeFromExpirationTime(expirationTime){// We don't know exactly when the update was scheduled, but we can infer an\n// approximate start time from the expiration time.\nvar earliestExpirationTimeMs=expirationTimeToMs(expirationTime);return earliestExpirationTimeMs-LOW_PRIORITY_EXPIRATION;}function inferTimeFromExpirationTimeWithSuspenseConfig(expirationTime,suspenseConfig){// We don't know exactly when the update was scheduled, but we can infer an\n// approximate start time from the expiration time by subtracting the timeout\n// that was added to the event time.\nvar earliestExpirationTimeMs=expirationTimeToMs(expirationTime);return earliestExpirationTimeMs-(suspenseConfig.timeoutMs|0||LOW_PRIORITY_EXPIRATION);}// The work loop is an extremely hot path. Tell Closure not to inline it.\n/** @noinline */function workLoopSync(){// Already timed out, so perform work without checking if we need to yield.\nwhile(workInProgress!==null){workInProgress=performUnitOfWork(workInProgress);}}/** @noinline */function workLoopConcurrent(){// Perform work until Scheduler asks us to yield\nwhile(workInProgress!==null&&!shouldYield()){workInProgress=performUnitOfWork(workInProgress);}}function performUnitOfWork(unitOfWork){// The current, flushed, state of this fiber is the alternate. Ideally\n// nothing should rely on this, but relying on it here means that we don't\n// need an additional field on the work in progress.\nvar current$$1=unitOfWork.alternate;startWorkTimer(unitOfWork);setCurrentFiber(unitOfWork);var next;if(enableProfilerTimer&&(unitOfWork.mode&ProfileMode)!==NoMode){startProfilerTimer(unitOfWork);next=beginWork$$1(current$$1,unitOfWork,renderExpirationTime);stopProfilerTimerIfRunningAndRecordDelta(unitOfWork,true);}else{next=beginWork$$1(current$$1,unitOfWork,renderExpirationTime);}resetCurrentFiber();unitOfWork.memoizedProps=unitOfWork.pendingProps;if(next===null){// If this doesn't spawn new work, complete the current work.\nnext=completeUnitOfWork(unitOfWork);}ReactCurrentOwner$2.current=null;return next;}function completeUnitOfWork(unitOfWork){// Attempt to complete the current unit of work, then move to the next\n// sibling. If there are no more siblings, return to the parent fiber.\nworkInProgress=unitOfWork;do{// The current, flushed, state of this fiber is the alternate. Ideally\n// nothing should rely on this, but relying on it here means that we don't\n// need an additional field on the work in progress.\nvar current$$1=workInProgress.alternate;var returnFiber=workInProgress[\"return\"];// Check if the work completed or if something threw.\nif((workInProgress.effectTag&Incomplete)===NoEffect){setCurrentFiber(workInProgress);var next=void 0;if(!enableProfilerTimer||(workInProgress.mode&ProfileMode)===NoMode){next=completeWork(current$$1,workInProgress,renderExpirationTime);}else{startProfilerTimer(workInProgress);next=completeWork(current$$1,workInProgress,renderExpirationTime);// Update render duration assuming we didn't error.\nstopProfilerTimerIfRunningAndRecordDelta(workInProgress,false);}stopWorkTimer(workInProgress);resetCurrentFiber();resetChildExpirationTime(workInProgress);if(next!==null){// Completing this fiber spawned new work. Work on that next.\nreturn next;}if(returnFiber!==null&&// Do not append effects to parents if a sibling failed to complete\n(returnFiber.effectTag&Incomplete)===NoEffect){// Append all the effects of the subtree and this fiber onto the effect\n// list of the parent. The completion order of the children affects the\n// side-effect order.\nif(returnFiber.firstEffect===null){returnFiber.firstEffect=workInProgress.firstEffect;}if(workInProgress.lastEffect!==null){if(returnFiber.lastEffect!==null){returnFiber.lastEffect.nextEffect=workInProgress.firstEffect;}returnFiber.lastEffect=workInProgress.lastEffect;}// If this fiber had side-effects, we append it AFTER the children's\n// side-effects. We can perform certain side-effects earlier if needed,\n// by doing multiple passes over the effect list. We don't want to\n// schedule our own side-effect on our own list because if end up\n// reusing children we'll schedule this effect onto itself since we're\n// at the end.\nvar effectTag=workInProgress.effectTag;// Skip both NoWork and PerformedWork tags when creating the effect\n// list. PerformedWork effect is read by React DevTools but shouldn't be\n// committed.\nif(effectTag>PerformedWork){if(returnFiber.lastEffect!==null){returnFiber.lastEffect.nextEffect=workInProgress;}else{returnFiber.firstEffect=workInProgress;}returnFiber.lastEffect=workInProgress;}}}else{// This fiber did not complete because something threw. Pop values off\n// the stack without entering the complete phase. If this is a boundary,\n// capture values if possible.\nvar _next=unwindWork(workInProgress,renderExpirationTime);// Because this fiber did not complete, don't reset its expiration time.\nif(enableProfilerTimer&&(workInProgress.mode&ProfileMode)!==NoMode){// Record the render duration for the fiber that errored.\nstopProfilerTimerIfRunningAndRecordDelta(workInProgress,false);// Include the time spent working on failed children before continuing.\nvar actualDuration=workInProgress.actualDuration;var child=workInProgress.child;while(child!==null){actualDuration+=child.actualDuration;child=child.sibling;}workInProgress.actualDuration=actualDuration;}if(_next!==null){// If completing this work spawned new work, do that next. We'll come\n// back here again.\n// Since we're restarting, remove anything that is not a host effect\n// from the effect tag.\n// TODO: The name stopFailedWorkTimer is misleading because Suspense\n// also captures and restarts.\nstopFailedWorkTimer(workInProgress);_next.effectTag&=HostEffectMask;return _next;}stopWorkTimer(workInProgress);if(returnFiber!==null){// Mark the parent fiber as incomplete and clear its effect list.\nreturnFiber.firstEffect=returnFiber.lastEffect=null;returnFiber.effectTag|=Incomplete;}}var siblingFiber=workInProgress.sibling;if(siblingFiber!==null){// If there is more work to do in this returnFiber, do that next.\nreturn siblingFiber;}// Otherwise, return to the parent\nworkInProgress=returnFiber;}while(workInProgress!==null);// We've reached the root.\nif(workInProgressRootExitStatus===RootIncomplete){workInProgressRootExitStatus=RootCompleted;}return null;}function getRemainingExpirationTime(fiber){var updateExpirationTime=fiber.expirationTime;var childExpirationTime=fiber.childExpirationTime;return updateExpirationTime>childExpirationTime?updateExpirationTime:childExpirationTime;}function resetChildExpirationTime(completedWork){if(renderExpirationTime!==Never&&completedWork.childExpirationTime===Never){// The children of this component are hidden. Don't bubble their\n// expiration times.\nreturn;}var newChildExpirationTime=NoWork;// Bubble up the earliest expiration time.\nif(enableProfilerTimer&&(completedWork.mode&ProfileMode)!==NoMode){// In profiling mode, resetChildExpirationTime is also used to reset\n// profiler durations.\nvar actualDuration=completedWork.actualDuration;var treeBaseDuration=completedWork.selfBaseDuration;// When a fiber is cloned, its actualDuration is reset to 0. This value will\n// only be updated if work is done on the fiber (i.e. it doesn't bailout).\n// When work is done, it should bubble to the parent's actualDuration. If\n// the fiber has not been cloned though, (meaning no work was done), then\n// this value will reflect the amount of time spent working on a previous\n// render. In that case it should not bubble. We determine whether it was\n// cloned by comparing the child pointer.\nvar shouldBubbleActualDurations=completedWork.alternate===null||completedWork.child!==completedWork.alternate.child;var child=completedWork.child;while(child!==null){var childUpdateExpirationTime=child.expirationTime;var childChildExpirationTime=child.childExpirationTime;if(childUpdateExpirationTime>newChildExpirationTime){newChildExpirationTime=childUpdateExpirationTime;}if(childChildExpirationTime>newChildExpirationTime){newChildExpirationTime=childChildExpirationTime;}if(shouldBubbleActualDurations){actualDuration+=child.actualDuration;}treeBaseDuration+=child.treeBaseDuration;child=child.sibling;}completedWork.actualDuration=actualDuration;completedWork.treeBaseDuration=treeBaseDuration;}else{var _child=completedWork.child;while(_child!==null){var _childUpdateExpirationTime=_child.expirationTime;var _childChildExpirationTime=_child.childExpirationTime;if(_childUpdateExpirationTime>newChildExpirationTime){newChildExpirationTime=_childUpdateExpirationTime;}if(_childChildExpirationTime>newChildExpirationTime){newChildExpirationTime=_childChildExpirationTime;}_child=_child.sibling;}}completedWork.childExpirationTime=newChildExpirationTime;}function commitRoot(root){var renderPriorityLevel=getCurrentPriorityLevel();runWithPriority$2(ImmediatePriority,commitRootImpl.bind(null,root,renderPriorityLevel));return null;}function commitRootImpl(root,renderPriorityLevel){do{// `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n// means `flushPassiveEffects` will sometimes result in additional\n// passive effects. So we need to keep flushing in a loop until there are\n// no more pending effects.\n// TODO: Might be better if `flushPassiveEffects` did not automatically\n// flush synchronous work at the end, to avoid factoring hazards like this.\nflushPassiveEffects();}while(rootWithPendingPassiveEffects!==null);flushRenderPhaseStrictModeWarningsInDEV();if(!((executionContext&(RenderContext|CommitContext))===NoContext)){{throw Error(\"Should not already be working.\");}}var finishedWork=root.finishedWork;var expirationTime=root.finishedExpirationTime;if(finishedWork===null){return null;}root.finishedWork=null;root.finishedExpirationTime=NoWork;if(!(finishedWork!==root.current)){{throw Error(\"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\");}}// commitRoot never returns a continuation; it always finishes synchronously.\n// So we can clear these now to allow a new callback to be scheduled.\nroot.callbackNode=null;root.callbackExpirationTime=NoWork;root.callbackPriority=NoPriority;root.nextKnownPendingLevel=NoWork;startCommitTimer();// Update the first and last pending times on this root. The new first\n// pending time is whatever is left on the root fiber.\nvar remainingExpirationTimeBeforeCommit=getRemainingExpirationTime(finishedWork);markRootFinishedAtTime(root,expirationTime,remainingExpirationTimeBeforeCommit);if(root===workInProgressRoot){// We can reset these now that they are finished.\nworkInProgressRoot=null;workInProgress=null;renderExpirationTime=NoWork;}else{}// This indicates that the last root we worked on is not the same one that\n// we're committing now. This most commonly happens when a suspended root\n// times out.\n// Get the list of effects.\nvar firstEffect;if(finishedWork.effectTag>PerformedWork){// A fiber's effect list consists only of its children, not itself. So if\n// the root has an effect, we need to add it to the end of the list. The\n// resulting list is the set that would belong to the root's parent, if it\n// had one; that is, all the effects in the tree including the root.\nif(finishedWork.lastEffect!==null){finishedWork.lastEffect.nextEffect=finishedWork;firstEffect=finishedWork.firstEffect;}else{firstEffect=finishedWork;}}else{// There is no effect on the root.\nfirstEffect=finishedWork.firstEffect;}if(firstEffect!==null){var prevExecutionContext=executionContext;executionContext|=CommitContext;var prevInteractions=pushInteractions(root);// Reset this to null before calling lifecycles\nReactCurrentOwner$2.current=null;// The commit phase is broken into several sub-phases. We do a separate pass\n// of the effect list for each phase: all mutation effects come before all\n// layout effects, and so on.\n// The first phase a \"before mutation\" phase. We use this phase to read the\n// state of the host tree right before we mutate it. This is where\n// getSnapshotBeforeUpdate is called.\nstartCommitSnapshotEffectsTimer();prepareForCommit(root.containerInfo);nextEffect=firstEffect;do{{invokeGuardedCallback(null,commitBeforeMutationEffects,null);if(hasCaughtError()){if(!(nextEffect!==null)){{throw Error(\"Should be working on an effect.\");}}var error=clearCaughtError();captureCommitPhaseError(nextEffect,error);nextEffect=nextEffect.nextEffect;}}}while(nextEffect!==null);stopCommitSnapshotEffectsTimer();if(enableProfilerTimer){// Mark the current commit time to be shared by all Profilers in this\n// batch. This enables them to be grouped later.\nrecordCommitTime();}// The next phase is the mutation phase, where we mutate the host tree.\nstartCommitHostEffectsTimer();nextEffect=firstEffect;do{{invokeGuardedCallback(null,commitMutationEffects,null,root,renderPriorityLevel);if(hasCaughtError()){if(!(nextEffect!==null)){{throw Error(\"Should be working on an effect.\");}}var _error=clearCaughtError();captureCommitPhaseError(nextEffect,_error);nextEffect=nextEffect.nextEffect;}}}while(nextEffect!==null);stopCommitHostEffectsTimer();resetAfterCommit(root.containerInfo);// The work-in-progress tree is now the current tree. This must come after\n// the mutation phase, so that the previous tree is still current during\n// componentWillUnmount, but before the layout phase, so that the finished\n// work is current during componentDidMount/Update.\nroot.current=finishedWork;// The next phase is the layout phase, where we call effects that read\n// the host tree after it's been mutated. The idiomatic use case for this is\n// layout, but class component lifecycles also fire here for legacy reasons.\nstartCommitLifeCyclesTimer();nextEffect=firstEffect;do{{invokeGuardedCallback(null,commitLayoutEffects,null,root,expirationTime);if(hasCaughtError()){if(!(nextEffect!==null)){{throw Error(\"Should be working on an effect.\");}}var _error2=clearCaughtError();captureCommitPhaseError(nextEffect,_error2);nextEffect=nextEffect.nextEffect;}}}while(nextEffect!==null);stopCommitLifeCyclesTimer();nextEffect=null;// Tell Scheduler to yield at the end of the frame, so the browser has an\n// opportunity to paint.\nrequestPaint();if(enableSchedulerTracing){popInteractions(prevInteractions);}executionContext=prevExecutionContext;}else{// No effects.\nroot.current=finishedWork;// Measure these anyway so the flamegraph explicitly shows that there were\n// no effects.\n// TODO: Maybe there's a better way to report this.\nstartCommitSnapshotEffectsTimer();stopCommitSnapshotEffectsTimer();if(enableProfilerTimer){recordCommitTime();}startCommitHostEffectsTimer();stopCommitHostEffectsTimer();startCommitLifeCyclesTimer();stopCommitLifeCyclesTimer();}stopCommitTimer();var rootDidHavePassiveEffects=rootDoesHavePassiveEffects;if(rootDoesHavePassiveEffects){// This commit has passive effects. Stash a reference to them. But don't\n// schedule a callback until after flushing layout work.\nrootDoesHavePassiveEffects=false;rootWithPendingPassiveEffects=root;pendingPassiveEffectsExpirationTime=expirationTime;pendingPassiveEffectsRenderPriority=renderPriorityLevel;}else{// We are done with the effect chain at this point so let's clear the\n// nextEffect pointers to assist with GC. If we have passive effects, we'll\n// clear this in flushPassiveEffects.\nnextEffect=firstEffect;while(nextEffect!==null){var nextNextEffect=nextEffect.nextEffect;nextEffect.nextEffect=null;nextEffect=nextNextEffect;}}// Check if there's remaining work on this root\nvar remainingExpirationTime=root.firstPendingTime;if(remainingExpirationTime!==NoWork){if(enableSchedulerTracing){if(spawnedWorkDuringRender!==null){var expirationTimes=spawnedWorkDuringRender;spawnedWorkDuringRender=null;for(var i=0;i<expirationTimes.length;i++){scheduleInteractions(root,expirationTimes[i],root.memoizedInteractions);}}schedulePendingInteractions(root,remainingExpirationTime);}}else{// If there's no remaining work, we can clear the set of already failed\n// error boundaries.\nlegacyErrorBoundariesThatAlreadyFailed=null;}if(enableSchedulerTracing){if(!rootDidHavePassiveEffects){// If there are no passive effects, then we can complete the pending interactions.\n// Otherwise, we'll wait until after the passive effects are flushed.\n// Wait to do this until after remaining work has been scheduled,\n// so that we don't prematurely signal complete for interactions when there's e.g. hidden work.\nfinishPendingInteractions(root,expirationTime);}}if(remainingExpirationTime===Sync){// Count the number of times the root synchronously re-renders without\n// finishing. If there are too many, it indicates an infinite update loop.\nif(root===rootWithNestedUpdates){nestedUpdateCount++;}else{nestedUpdateCount=0;rootWithNestedUpdates=root;}}else{nestedUpdateCount=0;}onCommitRoot(finishedWork.stateNode,expirationTime);// Always call this before exiting `commitRoot`, to ensure that any\n// additional work on this root is scheduled.\nensureRootIsScheduled(root);if(hasUncaughtError){hasUncaughtError=false;var _error3=firstUncaughtError;firstUncaughtError=null;throw _error3;}if((executionContext&LegacyUnbatchedContext)!==NoContext){// This is a legacy edge case. We just committed the initial mount of\n// a ReactDOM.render-ed root inside of batchedUpdates. The commit fired\n// synchronously, but layout updates should be deferred until the end\n// of the batch.\nreturn null;}// If layout work was scheduled, flush it now.\nflushSyncCallbackQueue();return null;}function commitBeforeMutationEffects(){while(nextEffect!==null){var effectTag=nextEffect.effectTag;if((effectTag&Snapshot)!==NoEffect){setCurrentFiber(nextEffect);recordEffect();var current$$1=nextEffect.alternate;commitBeforeMutationLifeCycles(current$$1,nextEffect);resetCurrentFiber();}if((effectTag&Passive)!==NoEffect){// If there are passive effects, schedule a callback to flush at\n// the earliest opportunity.\nif(!rootDoesHavePassiveEffects){rootDoesHavePassiveEffects=true;scheduleCallback(NormalPriority,function(){flushPassiveEffects();return null;});}}nextEffect=nextEffect.nextEffect;}}function commitMutationEffects(root,renderPriorityLevel){// TODO: Should probably move the bulk of this function to commitWork.\nwhile(nextEffect!==null){setCurrentFiber(nextEffect);var effectTag=nextEffect.effectTag;if(effectTag&ContentReset){commitResetTextContent(nextEffect);}if(effectTag&Ref){var current$$1=nextEffect.alternate;if(current$$1!==null){commitDetachRef(current$$1);}}// The following switch statement is only concerned about placement,\n// updates, and deletions. To avoid needing to add a case for every possible\n// bitmap value, we remove the secondary effects from the effect tag and\n// switch on that value.\nvar primaryEffectTag=effectTag&(Placement|Update|Deletion|Hydrating);switch(primaryEffectTag){case Placement:{commitPlacement(nextEffect);// Clear the \"placement\" from effect tag so that we know that this is\n// inserted, before any life-cycles like componentDidMount gets called.\n// TODO: findDOMNode doesn't rely on this any more but isMounted does\n// and isMounted is deprecated anyway so we should be able to kill this.\nnextEffect.effectTag&=~Placement;break;}case PlacementAndUpdate:{// Placement\ncommitPlacement(nextEffect);// Clear the \"placement\" from effect tag so that we know that this is\n// inserted, before any life-cycles like componentDidMount gets called.\nnextEffect.effectTag&=~Placement;// Update\nvar _current=nextEffect.alternate;commitWork(_current,nextEffect);break;}case Hydrating:{nextEffect.effectTag&=~Hydrating;break;}case HydratingAndUpdate:{nextEffect.effectTag&=~Hydrating;// Update\nvar _current2=nextEffect.alternate;commitWork(_current2,nextEffect);break;}case Update:{var _current3=nextEffect.alternate;commitWork(_current3,nextEffect);break;}case Deletion:{commitDeletion(root,nextEffect,renderPriorityLevel);break;}}// TODO: Only record a mutation effect if primaryEffectTag is non-zero.\nrecordEffect();resetCurrentFiber();nextEffect=nextEffect.nextEffect;}}function commitLayoutEffects(root,committedExpirationTime){// TODO: Should probably move the bulk of this function to commitWork.\nwhile(nextEffect!==null){setCurrentFiber(nextEffect);var effectTag=nextEffect.effectTag;if(effectTag&(Update|Callback)){recordEffect();var current$$1=nextEffect.alternate;commitLifeCycles(root,current$$1,nextEffect,committedExpirationTime);}if(effectTag&Ref){recordEffect();commitAttachRef(nextEffect);}resetCurrentFiber();nextEffect=nextEffect.nextEffect;}}function flushPassiveEffects(){if(pendingPassiveEffectsRenderPriority!==NoPriority){var priorityLevel=pendingPassiveEffectsRenderPriority>NormalPriority?NormalPriority:pendingPassiveEffectsRenderPriority;pendingPassiveEffectsRenderPriority=NoPriority;return runWithPriority$2(priorityLevel,flushPassiveEffectsImpl);}}function flushPassiveEffectsImpl(){if(rootWithPendingPassiveEffects===null){return false;}var root=rootWithPendingPassiveEffects;var expirationTime=pendingPassiveEffectsExpirationTime;rootWithPendingPassiveEffects=null;pendingPassiveEffectsExpirationTime=NoWork;if(!((executionContext&(RenderContext|CommitContext))===NoContext)){{throw Error(\"Cannot flush passive effects while already rendering.\");}}var prevExecutionContext=executionContext;executionContext|=CommitContext;var prevInteractions=pushInteractions(root);// Note: This currently assumes there are no passive effects on the root\n// fiber, because the root is not part of its own effect list. This could\n// change in the future.\nvar effect=root.current.firstEffect;while(effect!==null){{setCurrentFiber(effect);invokeGuardedCallback(null,commitPassiveHookEffects,null,effect);if(hasCaughtError()){if(!(effect!==null)){{throw Error(\"Should be working on an effect.\");}}var error=clearCaughtError();captureCommitPhaseError(effect,error);}resetCurrentFiber();}var nextNextEffect=effect.nextEffect;// Remove nextEffect pointer to assist GC\neffect.nextEffect=null;effect=nextNextEffect;}if(enableSchedulerTracing){popInteractions(prevInteractions);finishPendingInteractions(root,expirationTime);}executionContext=prevExecutionContext;flushSyncCallbackQueue();// If additional passive effects were scheduled, increment a counter. If this\n// exceeds the limit, we'll fire a warning.\nnestedPassiveUpdateCount=rootWithPendingPassiveEffects===null?0:nestedPassiveUpdateCount+1;return true;}function isAlreadyFailedLegacyErrorBoundary(instance){return legacyErrorBoundariesThatAlreadyFailed!==null&&legacyErrorBoundariesThatAlreadyFailed.has(instance);}function markLegacyErrorBoundaryAsFailed(instance){if(legacyErrorBoundariesThatAlreadyFailed===null){legacyErrorBoundariesThatAlreadyFailed=new Set([instance]);}else{legacyErrorBoundariesThatAlreadyFailed.add(instance);}}function prepareToThrowUncaughtError(error){if(!hasUncaughtError){hasUncaughtError=true;firstUncaughtError=error;}}var onUncaughtError=prepareToThrowUncaughtError;function captureCommitPhaseErrorOnRoot(rootFiber,sourceFiber,error){var errorInfo=createCapturedValue(error,sourceFiber);var update=createRootErrorUpdate(rootFiber,errorInfo,Sync);enqueueUpdate(rootFiber,update);var root=markUpdateTimeFromFiberToRoot(rootFiber,Sync);if(root!==null){ensureRootIsScheduled(root);schedulePendingInteractions(root,Sync);}}function captureCommitPhaseError(sourceFiber,error){if(sourceFiber.tag===HostRoot){// Error was thrown at the root. There is no parent, so the root\n// itself should capture it.\ncaptureCommitPhaseErrorOnRoot(sourceFiber,sourceFiber,error);return;}var fiber=sourceFiber[\"return\"];while(fiber!==null){if(fiber.tag===HostRoot){captureCommitPhaseErrorOnRoot(fiber,sourceFiber,error);return;}else if(fiber.tag===ClassComponent){var ctor=fiber.type;var instance=fiber.stateNode;if(typeof ctor.getDerivedStateFromError==='function'||typeof instance.componentDidCatch==='function'&&!isAlreadyFailedLegacyErrorBoundary(instance)){var errorInfo=createCapturedValue(error,sourceFiber);var update=createClassErrorUpdate(fiber,errorInfo,// TODO: This is always sync\nSync);enqueueUpdate(fiber,update);var root=markUpdateTimeFromFiberToRoot(fiber,Sync);if(root!==null){ensureRootIsScheduled(root);schedulePendingInteractions(root,Sync);}return;}}fiber=fiber[\"return\"];}}function pingSuspendedRoot(root,thenable,suspendedTime){var pingCache=root.pingCache;if(pingCache!==null){// The thenable resolved, so we no longer need to memoize, because it will\n// never be thrown again.\npingCache[\"delete\"](thenable);}if(workInProgressRoot===root&&renderExpirationTime===suspendedTime){// Received a ping at the same priority level at which we're currently\n// rendering. We might want to restart this render. This should mirror\n// the logic of whether or not a root suspends once it completes.\n// TODO: If we're rendering sync either due to Sync, Batched or expired,\n// we should probably never restart.\n// If we're suspended with delay, we'll always suspend so we can always\n// restart. If we're suspended without any updates, it might be a retry.\n// If it's early in the retry we can restart. We can't know for sure\n// whether we'll eventually process an update during this render pass,\n// but it's somewhat unlikely that we get to a ping before that, since\n// getting to the root most update is usually very fast.\nif(workInProgressRootExitStatus===RootSuspendedWithDelay||workInProgressRootExitStatus===RootSuspended&&workInProgressRootLatestProcessedExpirationTime===Sync&&now()-globalMostRecentFallbackTime<FALLBACK_THROTTLE_MS){// Restart from the root. Don't need to schedule a ping because\n// we're already working on this tree.\nprepareFreshStack(root,renderExpirationTime);}else{// Even though we can't restart right now, we might get an\n// opportunity later. So we mark this render as having a ping.\nworkInProgressRootHasPendingPing=true;}return;}if(!isRootSuspendedAtTime(root,suspendedTime)){// The root is no longer suspended at this time.\nreturn;}var lastPingedTime=root.lastPingedTime;if(lastPingedTime!==NoWork&&lastPingedTime<suspendedTime){// There's already a lower priority ping scheduled.\nreturn;}// Mark the time at which this ping was scheduled.\nroot.lastPingedTime=suspendedTime;if(root.finishedExpirationTime===suspendedTime){// If there's a pending fallback waiting to commit, throw it away.\nroot.finishedExpirationTime=NoWork;root.finishedWork=null;}ensureRootIsScheduled(root);schedulePendingInteractions(root,suspendedTime);}function retryTimedOutBoundary(boundaryFiber,retryTime){// The boundary fiber (a Suspense component or SuspenseList component)\n// previously was rendered in its fallback state. One of the promises that\n// suspended it has resolved, which means at least part of the tree was\n// likely unblocked. Try rendering again, at a new expiration time.\nif(retryTime===NoWork){var suspenseConfig=null;// Retries don't carry over the already committed update.\nvar currentTime=requestCurrentTimeForUpdate();retryTime=computeExpirationForFiber(currentTime,boundaryFiber,suspenseConfig);}// TODO: Special case idle priority?\nvar root=markUpdateTimeFromFiberToRoot(boundaryFiber,retryTime);if(root!==null){ensureRootIsScheduled(root);schedulePendingInteractions(root,retryTime);}}function retryDehydratedSuspenseBoundary(boundaryFiber){var suspenseState=boundaryFiber.memoizedState;var retryTime=NoWork;if(suspenseState!==null){retryTime=suspenseState.retryTime;}retryTimedOutBoundary(boundaryFiber,retryTime);}function resolveRetryThenable(boundaryFiber,thenable){var retryTime=NoWork;// Default\nvar retryCache;if(enableSuspenseServerRenderer){switch(boundaryFiber.tag){case SuspenseComponent:retryCache=boundaryFiber.stateNode;var suspenseState=boundaryFiber.memoizedState;if(suspenseState!==null){retryTime=suspenseState.retryTime;}break;case SuspenseListComponent:retryCache=boundaryFiber.stateNode;break;default:{{throw Error(\"Pinged unknown suspense boundary type. This is probably a bug in React.\");}}}}else{retryCache=boundaryFiber.stateNode;}if(retryCache!==null){// The thenable resolved, so we no longer need to memoize, because it will\n// never be thrown again.\nretryCache[\"delete\"](thenable);}retryTimedOutBoundary(boundaryFiber,retryTime);}// Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\nfunction jnd(timeElapsed){return timeElapsed<120?120:timeElapsed<480?480:timeElapsed<1080?1080:timeElapsed<1920?1920:timeElapsed<3000?3000:timeElapsed<4320?4320:ceil(timeElapsed/1960)*1960;}function computeMsUntilSuspenseLoadingDelay(mostRecentEventTime,committedExpirationTime,suspenseConfig){var busyMinDurationMs=suspenseConfig.busyMinDurationMs|0;if(busyMinDurationMs<=0){return 0;}var busyDelayMs=suspenseConfig.busyDelayMs|0;// Compute the time until this render pass would expire.\nvar currentTimeMs=now();var eventTimeMs=inferTimeFromExpirationTimeWithSuspenseConfig(mostRecentEventTime,suspenseConfig);var timeElapsed=currentTimeMs-eventTimeMs;if(timeElapsed<=busyDelayMs){// If we haven't yet waited longer than the initial delay, we don't\n// have to wait any additional time.\nreturn 0;}var msUntilTimeout=busyDelayMs+busyMinDurationMs-timeElapsed;// This is the value that is passed to `setTimeout`.\nreturn msUntilTimeout;}function checkForNestedUpdates(){if(nestedUpdateCount>NESTED_UPDATE_LIMIT){nestedUpdateCount=0;rootWithNestedUpdates=null;{{throw Error(\"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\");}}}{if(nestedPassiveUpdateCount>NESTED_PASSIVE_UPDATE_LIMIT){nestedPassiveUpdateCount=0;warning$1(false,'Maximum update depth exceeded. This can happen when a component '+\"calls setState inside useEffect, but useEffect either doesn't \"+'have a dependency array, or one of the dependencies changes on '+'every render.');}}}function flushRenderPhaseStrictModeWarningsInDEV(){{ReactStrictModeWarnings.flushLegacyContextWarning();if(warnAboutDeprecatedLifecycles){ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();}}}function stopFinishedWorkLoopTimer(){var didCompleteRoot=true;stopWorkLoopTimer(interruptedBy,didCompleteRoot);interruptedBy=null;}function stopInterruptedWorkLoopTimer(){// TODO: Track which fiber caused the interruption.\nvar didCompleteRoot=false;stopWorkLoopTimer(interruptedBy,didCompleteRoot);interruptedBy=null;}function checkForInterruption(fiberThatReceivedUpdate,updateExpirationTime){if(enableUserTimingAPI&&workInProgressRoot!==null&&updateExpirationTime>renderExpirationTime){interruptedBy=fiberThatReceivedUpdate;}}var didWarnStateUpdateForUnmountedComponent=null;function warnAboutUpdateOnUnmountedFiberInDEV(fiber){{var tag=fiber.tag;if(tag!==HostRoot&&tag!==ClassComponent&&tag!==FunctionComponent&&tag!==ForwardRef&&tag!==MemoComponent&&tag!==SimpleMemoComponent){// Only warn for user-defined components, not internal ones like Suspense.\nreturn;}// We show the whole stack but dedupe on the top component's name because\n// the problematic code almost always lies inside that component.\nvar componentName=getComponentName(fiber.type)||'ReactComponent';if(didWarnStateUpdateForUnmountedComponent!==null){if(didWarnStateUpdateForUnmountedComponent.has(componentName)){return;}didWarnStateUpdateForUnmountedComponent.add(componentName);}else{didWarnStateUpdateForUnmountedComponent=new Set([componentName]);}warningWithoutStack$1(false,\"Can't perform a React state update on an unmounted component. This \"+'is a no-op, but it indicates a memory leak in your application. To '+'fix, cancel all subscriptions and asynchronous tasks in %s.%s',tag===ClassComponent?'the componentWillUnmount method':'a useEffect cleanup function',getStackByFiberInDevAndProd(fiber));}}var beginWork$$1;if( true&&replayFailedUnitOfWorkWithInvokeGuardedCallback){var dummyFiber=null;beginWork$$1=function beginWork$$1(current$$1,unitOfWork,expirationTime){// If a component throws an error, we replay it again in a synchronously\n// dispatched event, so that the debugger will treat it as an uncaught\n// error See ReactErrorUtils for more information.\n// Before entering the begin phase, copy the work-in-progress onto a dummy\n// fiber. If beginWork throws, we'll use this to reset the state.\nvar originalWorkInProgressCopy=assignFiberPropertiesInDEV(dummyFiber,unitOfWork);try{return beginWork$1(current$$1,unitOfWork,expirationTime);}catch(originalError){if(originalError!==null&&_typeof(originalError)==='object'&&typeof originalError.then==='function'){// Don't replay promises. Treat everything else like an error.\nthrow originalError;}// Keep this code in sync with handleError; any changes here must have\n// corresponding changes there.\nresetContextDependencies();resetHooks();// Don't reset current debug fiber, since we're about to work on the\n// same fiber again.\n// Unwind the failed stack frame\nunwindInterruptedWork(unitOfWork);// Restore the original properties of the fiber.\nassignFiberPropertiesInDEV(unitOfWork,originalWorkInProgressCopy);if(enableProfilerTimer&&unitOfWork.mode&ProfileMode){// Reset the profiler timer.\nstartProfilerTimer(unitOfWork);}// Run beginWork again.\ninvokeGuardedCallback(null,beginWork$1,null,current$$1,unitOfWork,expirationTime);if(hasCaughtError()){var replayError=clearCaughtError();// `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.\n// Rethrow this error instead of the original one.\nthrow replayError;}else{// This branch is reachable if the render phase is impure.\nthrow originalError;}}};}else{beginWork$$1=beginWork$1;}var didWarnAboutUpdateInRender=false;var didWarnAboutUpdateInGetChildContext=false;function warnAboutInvalidUpdatesOnClassComponentsInDEV(fiber){{if(fiber.tag===ClassComponent){switch(phase){case'getChildContext':if(didWarnAboutUpdateInGetChildContext){return;}warningWithoutStack$1(false,'setState(...): Cannot call setState() inside getChildContext()');didWarnAboutUpdateInGetChildContext=true;break;case'render':if(didWarnAboutUpdateInRender){return;}warningWithoutStack$1(false,'Cannot update during an existing state transition (such as '+'within `render`). Render methods should be a pure function of '+'props and state.');didWarnAboutUpdateInRender=true;break;}}}}// a 'shared' variable that changes when act() opens/closes in tests.\nvar IsThisRendererActing={current:false};function warnIfNotScopedWithMatchingAct(fiber){{if(warnsIfNotActing===true&&IsSomeRendererActing.current===true&&IsThisRendererActing.current!==true){warningWithoutStack$1(false,\"It looks like you're using the wrong act() around your test interactions.\\n\"+'Be sure to use the matching version of act() corresponding to your renderer:\\n\\n'+'// for react-dom:\\n'+\"import {act} from 'react-dom/test-utils';\\n\"+'// ...\\n'+'act(() => ...);\\n\\n'+'// for react-test-renderer:\\n'+\"import TestRenderer from 'react-test-renderer';\\n\"+'const {act} = TestRenderer;\\n'+'// ...\\n'+'act(() => ...);'+'%s',getStackByFiberInDevAndProd(fiber));}}}function warnIfNotCurrentlyActingEffectsInDEV(fiber){{if(warnsIfNotActing===true&&(fiber.mode&StrictMode)!==NoMode&&IsSomeRendererActing.current===false&&IsThisRendererActing.current===false){warningWithoutStack$1(false,'An update to %s ran an effect, but was not wrapped in act(...).\\n\\n'+'When testing, code that causes React state updates should be '+'wrapped into act(...):\\n\\n'+'act(() => {\\n'+' /* fire events that update state */\\n'+'});\\n'+'/* assert on the output */\\n\\n'+\"This ensures that you're testing the behavior the user would see \"+'in the browser.'+' Learn more at https://fb.me/react-wrap-tests-with-act'+'%s',getComponentName(fiber.type),getStackByFiberInDevAndProd(fiber));}}}function warnIfNotCurrentlyActingUpdatesInDEV(fiber){{if(warnsIfNotActing===true&&executionContext===NoContext&&IsSomeRendererActing.current===false&&IsThisRendererActing.current===false){warningWithoutStack$1(false,'An update to %s inside a test was not wrapped in act(...).\\n\\n'+'When testing, code that causes React state updates should be '+'wrapped into act(...):\\n\\n'+'act(() => {\\n'+' /* fire events that update state */\\n'+'});\\n'+'/* assert on the output */\\n\\n'+\"This ensures that you're testing the behavior the user would see \"+'in the browser.'+' Learn more at https://fb.me/react-wrap-tests-with-act'+'%s',getComponentName(fiber.type),getStackByFiberInDevAndProd(fiber));}}}var warnIfNotCurrentlyActingUpdatesInDev=warnIfNotCurrentlyActingUpdatesInDEV;// In tests, we want to enforce a mocked scheduler.\nvar didWarnAboutUnmockedScheduler=false;// TODO Before we release concurrent mode, revisit this and decide whether a mocked\n// scheduler is the actual recommendation. The alternative could be a testing build,\n// a new lib, or whatever; we dunno just yet. This message is for early adopters\n// to get their tests right.\nfunction warnIfUnmockedScheduler(fiber){{if(didWarnAboutUnmockedScheduler===false&&Scheduler.unstable_flushAllWithoutAsserting===undefined){if(fiber.mode&BlockingMode||fiber.mode&ConcurrentMode){didWarnAboutUnmockedScheduler=true;warningWithoutStack$1(false,'In Concurrent or Sync modes, the \"scheduler\" module needs to be mocked '+'to guarantee consistent behaviour across tests and browsers. '+'For example, with jest: \\n'+\"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\"+'For more info, visit https://fb.me/react-mock-scheduler');}else if(warnAboutUnmockedScheduler===true){didWarnAboutUnmockedScheduler=true;warningWithoutStack$1(false,'Starting from React v17, the \"scheduler\" module will need to be mocked '+'to guarantee consistent behaviour across tests and browsers. '+'For example, with jest: \\n'+\"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\"+'For more info, visit https://fb.me/react-mock-scheduler');}}}}var componentsThatTriggeredHighPriSuspend=null;function checkForWrongSuspensePriorityInDEV(sourceFiber){{var currentPriorityLevel=getCurrentPriorityLevel();if((sourceFiber.mode&ConcurrentMode)!==NoEffect&&(currentPriorityLevel===UserBlockingPriority$2||currentPriorityLevel===ImmediatePriority)){var workInProgressNode=sourceFiber;while(workInProgressNode!==null){// Add the component that triggered the suspense\nvar current$$1=workInProgressNode.alternate;if(current$$1!==null){// TODO: warn component that triggers the high priority\n// suspend is the HostRoot\nswitch(workInProgressNode.tag){case ClassComponent:// Loop through the component's update queue and see whether the component\n// has triggered any high priority updates\nvar updateQueue=current$$1.updateQueue;if(updateQueue!==null){var update=updateQueue.firstUpdate;while(update!==null){var priorityLevel=update.priority;if(priorityLevel===UserBlockingPriority$2||priorityLevel===ImmediatePriority){if(componentsThatTriggeredHighPriSuspend===null){componentsThatTriggeredHighPriSuspend=new Set([getComponentName(workInProgressNode.type)]);}else{componentsThatTriggeredHighPriSuspend.add(getComponentName(workInProgressNode.type));}break;}update=update.next;}}break;case FunctionComponent:case ForwardRef:case SimpleMemoComponent:if(workInProgressNode.memoizedState!==null&&workInProgressNode.memoizedState.baseUpdate!==null){var _update=workInProgressNode.memoizedState.baseUpdate;// Loop through the functional component's memoized state to see whether\n// the component has triggered any high pri updates\nwhile(_update!==null){var priority=_update.priority;if(priority===UserBlockingPriority$2||priority===ImmediatePriority){if(componentsThatTriggeredHighPriSuspend===null){componentsThatTriggeredHighPriSuspend=new Set([getComponentName(workInProgressNode.type)]);}else{componentsThatTriggeredHighPriSuspend.add(getComponentName(workInProgressNode.type));}break;}if(_update.next===workInProgressNode.memoizedState.baseUpdate){break;}_update=_update.next;}}break;default:break;}}workInProgressNode=workInProgressNode[\"return\"];}}}}function flushSuspensePriorityWarningInDEV(){{if(componentsThatTriggeredHighPriSuspend!==null){var componentNames=[];componentsThatTriggeredHighPriSuspend.forEach(function(name){return componentNames.push(name);});componentsThatTriggeredHighPriSuspend=null;if(componentNames.length>0){warningWithoutStack$1(false,'%s triggered a user-blocking update that suspended.'+'\\n\\n'+'The fix is to split the update into multiple parts: a user-blocking '+'update to provide immediate feedback, and another update that '+'triggers the bulk of the changes.'+'\\n\\n'+'Refer to the documentation for useTransition to learn how '+'to implement this pattern.',// TODO: Add link to React docs with more information, once it exists\ncomponentNames.sort().join(', '));}}}}function computeThreadID(root,expirationTime){// Interaction threads are unique per root and expiration time.\nreturn expirationTime*1000+root.interactionThreadID;}function markSpawnedWork(expirationTime){if(!enableSchedulerTracing){return;}if(spawnedWorkDuringRender===null){spawnedWorkDuringRender=[expirationTime];}else{spawnedWorkDuringRender.push(expirationTime);}}function scheduleInteractions(root,expirationTime,interactions){if(!enableSchedulerTracing){return;}if(interactions.size>0){var pendingInteractionMap=root.pendingInteractionMap;var pendingInteractions=pendingInteractionMap.get(expirationTime);if(pendingInteractions!=null){interactions.forEach(function(interaction){if(!pendingInteractions.has(interaction)){// Update the pending async work count for previously unscheduled interaction.\ninteraction.__count++;}pendingInteractions.add(interaction);});}else{pendingInteractionMap.set(expirationTime,new Set(interactions));// Update the pending async work count for the current interactions.\ninteractions.forEach(function(interaction){interaction.__count++;});}var subscriber=tracing.__subscriberRef.current;if(subscriber!==null){var threadID=computeThreadID(root,expirationTime);subscriber.onWorkScheduled(interactions,threadID);}}}function schedulePendingInteractions(root,expirationTime){// This is called when work is scheduled on a root.\n// It associates the current interactions with the newly-scheduled expiration.\n// They will be restored when that expiration is later committed.\nif(!enableSchedulerTracing){return;}scheduleInteractions(root,expirationTime,tracing.__interactionsRef.current);}function startWorkOnPendingInteractions(root,expirationTime){// This is called when new work is started on a root.\nif(!enableSchedulerTracing){return;}// Determine which interactions this batch of work currently includes, So that\n// we can accurately attribute time spent working on it, And so that cascading\n// work triggered during the render phase will be associated with it.\nvar interactions=new Set();root.pendingInteractionMap.forEach(function(scheduledInteractions,scheduledExpirationTime){if(scheduledExpirationTime>=expirationTime){scheduledInteractions.forEach(function(interaction){return interactions.add(interaction);});}});// Store the current set of interactions on the FiberRoot for a few reasons:\n// We can re-use it in hot functions like performConcurrentWorkOnRoot()\n// without having to recalculate it. We will also use it in commitWork() to\n// pass to any Profiler onRender() hooks. This also provides DevTools with a\n// way to access it when the onCommitRoot() hook is called.\nroot.memoizedInteractions=interactions;if(interactions.size>0){var subscriber=tracing.__subscriberRef.current;if(subscriber!==null){var threadID=computeThreadID(root,expirationTime);try{subscriber.onWorkStarted(interactions,threadID);}catch(error){// If the subscriber throws, rethrow it in a separate task\nscheduleCallback(ImmediatePriority,function(){throw error;});}}}}function finishPendingInteractions(root,committedExpirationTime){if(!enableSchedulerTracing){return;}var earliestRemainingTimeAfterCommit=root.firstPendingTime;var subscriber;try{subscriber=tracing.__subscriberRef.current;if(subscriber!==null&&root.memoizedInteractions.size>0){var threadID=computeThreadID(root,committedExpirationTime);subscriber.onWorkStopped(root.memoizedInteractions,threadID);}}catch(error){// If the subscriber throws, rethrow it in a separate task\nscheduleCallback(ImmediatePriority,function(){throw error;});}finally{// Clear completed interactions from the pending Map.\n// Unless the render was suspended or cascading work was scheduled,\n// In which case– leave pending interactions until the subsequent render.\nvar pendingInteractionMap=root.pendingInteractionMap;pendingInteractionMap.forEach(function(scheduledInteractions,scheduledExpirationTime){// Only decrement the pending interaction count if we're done.\n// If there's still work at the current priority,\n// That indicates that we are waiting for suspense data.\nif(scheduledExpirationTime>earliestRemainingTimeAfterCommit){pendingInteractionMap[\"delete\"](scheduledExpirationTime);scheduledInteractions.forEach(function(interaction){interaction.__count--;if(subscriber!==null&&interaction.__count===0){try{subscriber.onInteractionScheduledWorkCompleted(interaction);}catch(error){// If the subscriber throws, rethrow it in a separate task\nscheduleCallback(ImmediatePriority,function(){throw error;});}}});}});}}var onCommitFiberRoot=null;var onCommitFiberUnmount=null;var hasLoggedError=false;var isDevToolsPresent=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=='undefined';function injectInternals(internals){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__==='undefined'){// No DevTools\nreturn false;}var hook=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(hook.isDisabled){// This isn't a real property on the hook, but it can be set to opt out\n// of DevTools integration and associated warnings and logs.\n// https://github.com/facebook/react/issues/3877\nreturn true;}if(!hook.supportsFiber){{warningWithoutStack$1(false,'The installed version of React DevTools is too old and will not work '+'with the current version of React. Please update React DevTools. '+'https://fb.me/react-devtools');}// DevTools exists, even though it doesn't support Fiber.\nreturn true;}try{var rendererID=hook.inject(internals);// We have successfully injected, so now it is safe to set up hooks.\nonCommitFiberRoot=function onCommitFiberRoot(root,expirationTime){try{var didError=(root.current.effectTag&DidCapture)===DidCapture;if(enableProfilerTimer){var currentTime=getCurrentTime();var priorityLevel=inferPriorityFromExpirationTime(currentTime,expirationTime);hook.onCommitFiberRoot(rendererID,root,priorityLevel,didError);}else{hook.onCommitFiberRoot(rendererID,root,undefined,didError);}}catch(err){if( true&&!hasLoggedError){hasLoggedError=true;warningWithoutStack$1(false,'React DevTools encountered an error: %s',err);}}};onCommitFiberUnmount=function onCommitFiberUnmount(fiber){try{hook.onCommitFiberUnmount(rendererID,fiber);}catch(err){if( true&&!hasLoggedError){hasLoggedError=true;warningWithoutStack$1(false,'React DevTools encountered an error: %s',err);}}};}catch(err){// Catch all errors because it is unsafe to throw during initialization.\n{warningWithoutStack$1(false,'React DevTools encountered an error: %s.',err);}}// DevTools exists\nreturn true;}function onCommitRoot(root,expirationTime){if(typeof onCommitFiberRoot==='function'){onCommitFiberRoot(root,expirationTime);}}function onCommitUnmount(fiber){if(typeof onCommitFiberUnmount==='function'){onCommitFiberUnmount(fiber);}}var hasBadMapPolyfill;{hasBadMapPolyfill=false;try{var nonExtensibleObject=Object.preventExtensions({});var testMap=new Map([[nonExtensibleObject,null]]);var testSet=new Set([nonExtensibleObject]);// This is necessary for Rollup to not consider these unused.\n// https://github.com/rollup/rollup/issues/1771\n// TODO: we can remove these if Rollup fixes the bug.\ntestMap.set(0,0);testSet.add(0);}catch(e){// TODO: Consider warning about bad polyfills\nhasBadMapPolyfill=true;}}var debugCounter=1;function FiberNode(tag,pendingProps,key,mode){// Instance\nthis.tag=tag;this.key=key;this.elementType=null;this.type=null;this.stateNode=null;// Fiber\nthis[\"return\"]=null;this.child=null;this.sibling=null;this.index=0;this.ref=null;this.pendingProps=pendingProps;this.memoizedProps=null;this.updateQueue=null;this.memoizedState=null;this.dependencies=null;this.mode=mode;// Effects\nthis.effectTag=NoEffect;this.nextEffect=null;this.firstEffect=null;this.lastEffect=null;this.expirationTime=NoWork;this.childExpirationTime=NoWork;this.alternate=null;if(enableProfilerTimer){// Note: The following is done to avoid a v8 performance cliff.\n//\n// Initializing the fields below to smis and later updating them with\n// double values will cause Fibers to end up having separate shapes.\n// This behavior/bug has something to do with Object.preventExtension().\n// Fortunately this only impacts DEV builds.\n// Unfortunately it makes React unusably slow for some applications.\n// To work around this, initialize the fields below with doubles.\n//\n// Learn more about this here:\n// https://github.com/facebook/react/issues/14365\n// https://bugs.chromium.org/p/v8/issues/detail?id=8538\nthis.actualDuration=Number.NaN;this.actualStartTime=Number.NaN;this.selfBaseDuration=Number.NaN;this.treeBaseDuration=Number.NaN;// It's okay to replace the initial doubles with smis after initialization.\n// This won't trigger the performance cliff mentioned above,\n// and it simplifies other profiler code (including DevTools).\nthis.actualDuration=0;this.actualStartTime=-1;this.selfBaseDuration=0;this.treeBaseDuration=0;}// This is normally DEV-only except www when it adds listeners.\n// TODO: remove the User Timing integration in favor of Root Events.\nif(enableUserTimingAPI){this._debugID=debugCounter++;this._debugIsCurrentlyTiming=false;}{this._debugSource=null;this._debugOwner=null;this._debugNeedsRemount=false;this._debugHookTypes=null;if(!hasBadMapPolyfill&&typeof Object.preventExtensions==='function'){Object.preventExtensions(this);}}}// This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\nvar createFiber=function createFiber(tag,pendingProps,key,mode){// $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\nreturn new FiberNode(tag,pendingProps,key,mode);};function shouldConstruct(Component){var prototype=Component.prototype;return!!(prototype&&prototype.isReactComponent);}function isSimpleFunctionComponent(type){return typeof type==='function'&&!shouldConstruct(type)&&type.defaultProps===undefined;}function resolveLazyComponentTag(Component){if(typeof Component==='function'){return shouldConstruct(Component)?ClassComponent:FunctionComponent;}else if(Component!==undefined&&Component!==null){var $$typeof=Component.$$typeof;if($$typeof===REACT_FORWARD_REF_TYPE){return ForwardRef;}if($$typeof===REACT_MEMO_TYPE){return MemoComponent;}}return IndeterminateComponent;}// This is used to create an alternate fiber to do work on.\nfunction createWorkInProgress(current,pendingProps,expirationTime){var workInProgress=current.alternate;if(workInProgress===null){// We use a double buffering pooling technique because we know that we'll\n// only ever need at most two versions of a tree. We pool the \"other\" unused\n// node that we're free to reuse. This is lazily created to avoid allocating\n// extra objects for things that are never updated. It also allow us to\n// reclaim the extra memory if needed.\nworkInProgress=createFiber(current.tag,pendingProps,current.key,current.mode);workInProgress.elementType=current.elementType;workInProgress.type=current.type;workInProgress.stateNode=current.stateNode;{// DEV-only fields\nworkInProgress._debugID=current._debugID;workInProgress._debugSource=current._debugSource;workInProgress._debugOwner=current._debugOwner;workInProgress._debugHookTypes=current._debugHookTypes;}workInProgress.alternate=current;current.alternate=workInProgress;}else{workInProgress.pendingProps=pendingProps;// We already have an alternate.\n// Reset the effect tag.\nworkInProgress.effectTag=NoEffect;// The effect list is no longer valid.\nworkInProgress.nextEffect=null;workInProgress.firstEffect=null;workInProgress.lastEffect=null;if(enableProfilerTimer){// We intentionally reset, rather than copy, actualDuration & actualStartTime.\n// This prevents time from endlessly accumulating in new commits.\n// This has the downside of resetting values for different priority renders,\n// But works for yielding (the common case) and should support resuming.\nworkInProgress.actualDuration=0;workInProgress.actualStartTime=-1;}}workInProgress.childExpirationTime=current.childExpirationTime;workInProgress.expirationTime=current.expirationTime;workInProgress.child=current.child;workInProgress.memoizedProps=current.memoizedProps;workInProgress.memoizedState=current.memoizedState;workInProgress.updateQueue=current.updateQueue;// Clone the dependencies object. This is mutated during the render phase, so\n// it cannot be shared with the current fiber.\nvar currentDependencies=current.dependencies;workInProgress.dependencies=currentDependencies===null?null:{expirationTime:currentDependencies.expirationTime,firstContext:currentDependencies.firstContext,responders:currentDependencies.responders};// These will be overridden during the parent's reconciliation\nworkInProgress.sibling=current.sibling;workInProgress.index=current.index;workInProgress.ref=current.ref;if(enableProfilerTimer){workInProgress.selfBaseDuration=current.selfBaseDuration;workInProgress.treeBaseDuration=current.treeBaseDuration;}{workInProgress._debugNeedsRemount=current._debugNeedsRemount;switch(workInProgress.tag){case IndeterminateComponent:case FunctionComponent:case SimpleMemoComponent:workInProgress.type=resolveFunctionForHotReloading(current.type);break;case ClassComponent:workInProgress.type=resolveClassForHotReloading(current.type);break;case ForwardRef:workInProgress.type=resolveForwardRefForHotReloading(current.type);break;default:break;}}return workInProgress;}// Used to reuse a Fiber for a second pass.\nfunction resetWorkInProgress(workInProgress,renderExpirationTime){// This resets the Fiber to what createFiber or createWorkInProgress would\n// have set the values to before during the first pass. Ideally this wouldn't\n// be necessary but unfortunately many code paths reads from the workInProgress\n// when they should be reading from current and writing to workInProgress.\n// We assume pendingProps, index, key, ref, return are still untouched to\n// avoid doing another reconciliation.\n// Reset the effect tag but keep any Placement tags, since that's something\n// that child fiber is setting, not the reconciliation.\nworkInProgress.effectTag&=Placement;// The effect list is no longer valid.\nworkInProgress.nextEffect=null;workInProgress.firstEffect=null;workInProgress.lastEffect=null;var current=workInProgress.alternate;if(current===null){// Reset to createFiber's initial values.\nworkInProgress.childExpirationTime=NoWork;workInProgress.expirationTime=renderExpirationTime;workInProgress.child=null;workInProgress.memoizedProps=null;workInProgress.memoizedState=null;workInProgress.updateQueue=null;workInProgress.dependencies=null;if(enableProfilerTimer){// Note: We don't reset the actualTime counts. It's useful to accumulate\n// actual time across multiple render passes.\nworkInProgress.selfBaseDuration=0;workInProgress.treeBaseDuration=0;}}else{// Reset to the cloned values that createWorkInProgress would've.\nworkInProgress.childExpirationTime=current.childExpirationTime;workInProgress.expirationTime=current.expirationTime;workInProgress.child=current.child;workInProgress.memoizedProps=current.memoizedProps;workInProgress.memoizedState=current.memoizedState;workInProgress.updateQueue=current.updateQueue;// Clone the dependencies object. This is mutated during the render phase, so\n// it cannot be shared with the current fiber.\nvar currentDependencies=current.dependencies;workInProgress.dependencies=currentDependencies===null?null:{expirationTime:currentDependencies.expirationTime,firstContext:currentDependencies.firstContext,responders:currentDependencies.responders};if(enableProfilerTimer){// Note: We don't reset the actualTime counts. It's useful to accumulate\n// actual time across multiple render passes.\nworkInProgress.selfBaseDuration=current.selfBaseDuration;workInProgress.treeBaseDuration=current.treeBaseDuration;}}return workInProgress;}function createHostRootFiber(tag){var mode;if(tag===ConcurrentRoot){mode=ConcurrentMode|BlockingMode|StrictMode;}else if(tag===BlockingRoot){mode=BlockingMode|StrictMode;}else{mode=NoMode;}if(enableProfilerTimer&&isDevToolsPresent){// Always collect profile timings when DevTools are present.\n// This enables DevTools to start capturing timing at any point–\n// Without some nodes in the tree having empty base times.\nmode|=ProfileMode;}return createFiber(HostRoot,null,null,mode);}function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,expirationTime){type=hotResolveType(type);var fiber;var fiberTag=IndeterminateComponent;// The resolved type is set if we know what the final type will be. I.e. it's not lazy.\nvar resolvedType=type;if(typeof type==='function'){if(shouldConstruct(type)){fiberTag=ClassComponent;{resolvedType=resolveClassForHotReloading(resolvedType);}}else{{resolvedType=resolveFunctionForHotReloading(resolvedType);}}}else if(typeof type==='string'){fiberTag=HostComponent;}else{getTag:switch(type){case REACT_FRAGMENT_TYPE:return createFiberFromFragment(pendingProps.children,mode,expirationTime,key);case REACT_CONCURRENT_MODE_TYPE:fiberTag=Mode;mode|=ConcurrentMode|BlockingMode|StrictMode;break;case REACT_STRICT_MODE_TYPE:fiberTag=Mode;mode|=StrictMode;break;case REACT_PROFILER_TYPE:return createFiberFromProfiler(pendingProps,mode,expirationTime,key);case REACT_SUSPENSE_TYPE:return createFiberFromSuspense(pendingProps,mode,expirationTime,key);case REACT_SUSPENSE_LIST_TYPE:return createFiberFromSuspenseList(pendingProps,mode,expirationTime,key);default:{if(_typeof(type)==='object'&&type!==null){switch(type.$$typeof){case REACT_PROVIDER_TYPE:fiberTag=ContextProvider;break getTag;case REACT_CONTEXT_TYPE:// This is a consumer\nfiberTag=ContextConsumer;break getTag;case REACT_FORWARD_REF_TYPE:fiberTag=ForwardRef;{resolvedType=resolveForwardRefForHotReloading(resolvedType);}break getTag;case REACT_MEMO_TYPE:fiberTag=MemoComponent;break getTag;case REACT_LAZY_TYPE:fiberTag=LazyComponent;resolvedType=null;break getTag;case REACT_FUNDAMENTAL_TYPE:if(enableFundamentalAPI){return createFiberFromFundamental(type,pendingProps,mode,expirationTime,key);}break;case REACT_SCOPE_TYPE:if(enableScopeAPI){return createFiberFromScope(type,pendingProps,mode,expirationTime,key);}}}var info='';{if(type===undefined||_typeof(type)==='object'&&type!==null&&Object.keys(type).length===0){info+=' You likely forgot to export your component from the file '+\"it's defined in, or you might have mixed up default and \"+'named imports.';}var ownerName=owner?getComponentName(owner.type):null;if(ownerName){info+='\\n\\nCheck the render method of `'+ownerName+'`.';}}{{throw Error(\"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \"+(type==null?type:_typeof(type))+\".\"+info);}}}}}fiber=createFiber(fiberTag,pendingProps,key,mode);fiber.elementType=type;fiber.type=resolvedType;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromElement(element,mode,expirationTime){var owner=null;{owner=element._owner;}var type=element.type;var key=element.key;var pendingProps=element.props;var fiber=createFiberFromTypeAndProps(type,key,pendingProps,owner,mode,expirationTime);{fiber._debugSource=element._source;fiber._debugOwner=element._owner;}return fiber;}function createFiberFromFragment(elements,mode,expirationTime,key){var fiber=createFiber(Fragment,elements,key,mode);fiber.expirationTime=expirationTime;return fiber;}function createFiberFromFundamental(fundamentalComponent,pendingProps,mode,expirationTime,key){var fiber=createFiber(FundamentalComponent,pendingProps,key,mode);fiber.elementType=fundamentalComponent;fiber.type=fundamentalComponent;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromScope(scope,pendingProps,mode,expirationTime,key){var fiber=createFiber(ScopeComponent,pendingProps,key,mode);fiber.type=scope;fiber.elementType=scope;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromProfiler(pendingProps,mode,expirationTime,key){{if(typeof pendingProps.id!=='string'||typeof pendingProps.onRender!=='function'){warningWithoutStack$1(false,'Profiler must specify an \"id\" string and \"onRender\" function as props');}}var fiber=createFiber(Profiler,pendingProps,key,mode|ProfileMode);// TODO: The Profiler fiber shouldn't have a type. It has a tag.\nfiber.elementType=REACT_PROFILER_TYPE;fiber.type=REACT_PROFILER_TYPE;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromSuspense(pendingProps,mode,expirationTime,key){var fiber=createFiber(SuspenseComponent,pendingProps,key,mode);// TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n// This needs to be fixed in getComponentName so that it relies on the tag\n// instead.\nfiber.type=REACT_SUSPENSE_TYPE;fiber.elementType=REACT_SUSPENSE_TYPE;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromSuspenseList(pendingProps,mode,expirationTime,key){var fiber=createFiber(SuspenseListComponent,pendingProps,key,mode);{// TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.\n// This needs to be fixed in getComponentName so that it relies on the tag\n// instead.\nfiber.type=REACT_SUSPENSE_LIST_TYPE;}fiber.elementType=REACT_SUSPENSE_LIST_TYPE;fiber.expirationTime=expirationTime;return fiber;}function createFiberFromText(content,mode,expirationTime){var fiber=createFiber(HostText,content,null,mode);fiber.expirationTime=expirationTime;return fiber;}function createFiberFromHostInstanceForDeletion(){var fiber=createFiber(HostComponent,null,null,NoMode);// TODO: These should not need a type.\nfiber.elementType='DELETED';fiber.type='DELETED';return fiber;}function createFiberFromDehydratedFragment(dehydratedNode){var fiber=createFiber(DehydratedFragment,null,null,NoMode);fiber.stateNode=dehydratedNode;return fiber;}function createFiberFromPortal(portal,mode,expirationTime){var pendingProps=portal.children!==null?portal.children:[];var fiber=createFiber(HostPortal,pendingProps,portal.key,mode);fiber.expirationTime=expirationTime;fiber.stateNode={containerInfo:portal.containerInfo,pendingChildren:null,// Used by persistent updates\nimplementation:portal.implementation};return fiber;}// Used for stashing WIP properties to replay failed work in DEV.\nfunction assignFiberPropertiesInDEV(target,source){if(target===null){// This Fiber's initial properties will always be overwritten.\n// We only use a Fiber to ensure the same hidden class so DEV isn't slow.\ntarget=createFiber(IndeterminateComponent,null,null,NoMode);}// This is intentionally written as a list of all properties.\n// We tried to use Object.assign() instead but this is called in\n// the hottest path, and Object.assign() was too slow:\n// https://github.com/facebook/react/issues/12502\n// This code is DEV-only so size is not a concern.\ntarget.tag=source.tag;target.key=source.key;target.elementType=source.elementType;target.type=source.type;target.stateNode=source.stateNode;target[\"return\"]=source[\"return\"];target.child=source.child;target.sibling=source.sibling;target.index=source.index;target.ref=source.ref;target.pendingProps=source.pendingProps;target.memoizedProps=source.memoizedProps;target.updateQueue=source.updateQueue;target.memoizedState=source.memoizedState;target.dependencies=source.dependencies;target.mode=source.mode;target.effectTag=source.effectTag;target.nextEffect=source.nextEffect;target.firstEffect=source.firstEffect;target.lastEffect=source.lastEffect;target.expirationTime=source.expirationTime;target.childExpirationTime=source.childExpirationTime;target.alternate=source.alternate;if(enableProfilerTimer){target.actualDuration=source.actualDuration;target.actualStartTime=source.actualStartTime;target.selfBaseDuration=source.selfBaseDuration;target.treeBaseDuration=source.treeBaseDuration;}target._debugID=source._debugID;target._debugSource=source._debugSource;target._debugOwner=source._debugOwner;target._debugIsCurrentlyTiming=source._debugIsCurrentlyTiming;target._debugNeedsRemount=source._debugNeedsRemount;target._debugHookTypes=source._debugHookTypes;return target;}function FiberRootNode(containerInfo,tag,hydrate){this.tag=tag;this.current=null;this.containerInfo=containerInfo;this.pendingChildren=null;this.pingCache=null;this.finishedExpirationTime=NoWork;this.finishedWork=null;this.timeoutHandle=noTimeout;this.context=null;this.pendingContext=null;this.hydrate=hydrate;this.callbackNode=null;this.callbackPriority=NoPriority;this.firstPendingTime=NoWork;this.firstSuspendedTime=NoWork;this.lastSuspendedTime=NoWork;this.nextKnownPendingLevel=NoWork;this.lastPingedTime=NoWork;this.lastExpiredTime=NoWork;if(enableSchedulerTracing){this.interactionThreadID=tracing.unstable_getThreadID();this.memoizedInteractions=new Set();this.pendingInteractionMap=new Map();}if(enableSuspenseCallback){this.hydrationCallbacks=null;}}function createFiberRoot(containerInfo,tag,hydrate,hydrationCallbacks){var root=new FiberRootNode(containerInfo,tag,hydrate);if(enableSuspenseCallback){root.hydrationCallbacks=hydrationCallbacks;}// Cyclic construction. This cheats the type system right now because\n// stateNode is any.\nvar uninitializedFiber=createHostRootFiber(tag);root.current=uninitializedFiber;uninitializedFiber.stateNode=root;return root;}function isRootSuspendedAtTime(root,expirationTime){var firstSuspendedTime=root.firstSuspendedTime;var lastSuspendedTime=root.lastSuspendedTime;return firstSuspendedTime!==NoWork&&firstSuspendedTime>=expirationTime&&lastSuspendedTime<=expirationTime;}function markRootSuspendedAtTime(root,expirationTime){var firstSuspendedTime=root.firstSuspendedTime;var lastSuspendedTime=root.lastSuspendedTime;if(firstSuspendedTime<expirationTime){root.firstSuspendedTime=expirationTime;}if(lastSuspendedTime>expirationTime||firstSuspendedTime===NoWork){root.lastSuspendedTime=expirationTime;}if(expirationTime<=root.lastPingedTime){root.lastPingedTime=NoWork;}if(expirationTime<=root.lastExpiredTime){root.lastExpiredTime=NoWork;}}function markRootUpdatedAtTime(root,expirationTime){// Update the range of pending times\nvar firstPendingTime=root.firstPendingTime;if(expirationTime>firstPendingTime){root.firstPendingTime=expirationTime;}// Update the range of suspended times. Treat everything lower priority or\n// equal to this update as unsuspended.\nvar firstSuspendedTime=root.firstSuspendedTime;if(firstSuspendedTime!==NoWork){if(expirationTime>=firstSuspendedTime){// The entire suspended range is now unsuspended.\nroot.firstSuspendedTime=root.lastSuspendedTime=root.nextKnownPendingLevel=NoWork;}else if(expirationTime>=root.lastSuspendedTime){root.lastSuspendedTime=expirationTime+1;}// This is a pending level. Check if it's higher priority than the next\n// known pending level.\nif(expirationTime>root.nextKnownPendingLevel){root.nextKnownPendingLevel=expirationTime;}}}function markRootFinishedAtTime(root,finishedExpirationTime,remainingExpirationTime){// Update the range of pending times\nroot.firstPendingTime=remainingExpirationTime;// Update the range of suspended times. Treat everything higher priority or\n// equal to this update as unsuspended.\nif(finishedExpirationTime<=root.lastSuspendedTime){// The entire suspended range is now unsuspended.\nroot.firstSuspendedTime=root.lastSuspendedTime=root.nextKnownPendingLevel=NoWork;}else if(finishedExpirationTime<=root.firstSuspendedTime){// Part of the suspended range is now unsuspended. Narrow the range to\n// include everything between the unsuspended time (non-inclusive) and the\n// last suspended time.\nroot.firstSuspendedTime=finishedExpirationTime-1;}if(finishedExpirationTime<=root.lastPingedTime){// Clear the pinged time\nroot.lastPingedTime=NoWork;}if(finishedExpirationTime<=root.lastExpiredTime){// Clear the expired time\nroot.lastExpiredTime=NoWork;}}function markRootExpiredAtTime(root,expirationTime){var lastExpiredTime=root.lastExpiredTime;if(lastExpiredTime===NoWork||lastExpiredTime>expirationTime){root.lastExpiredTime=expirationTime;}}// This lets us hook into Fiber to debug what it's doing.\n// See https://github.com/facebook/react/pull/8033.\n// This is not part of the public API, not even for React DevTools.\n// You may only inject a debugTool if you work on React Fiber itself.\nvar ReactFiberInstrumentation={debugTool:null};var ReactFiberInstrumentation_1=ReactFiberInstrumentation;var didWarnAboutNestedUpdates;var didWarnAboutFindNodeInStrictMode;{didWarnAboutNestedUpdates=false;didWarnAboutFindNodeInStrictMode={};}function getContextForSubtree(parentComponent){if(!parentComponent){return emptyContextObject;}var fiber=get(parentComponent);var parentContext=findCurrentUnmaskedContext(fiber);if(fiber.tag===ClassComponent){var Component=fiber.type;if(isContextProvider(Component)){return processChildContext(fiber,Component,parentContext);}}return parentContext;}function findHostInstance(component){var fiber=get(component);if(fiber===undefined){if(typeof component.render==='function'){{{throw Error(\"Unable to find node on an unmounted component.\");}}}else{{{throw Error(\"Argument appears to not be a ReactComponent. Keys: \"+Object.keys(component));}}}}var hostFiber=findCurrentHostFiber(fiber);if(hostFiber===null){return null;}return hostFiber.stateNode;}function findHostInstanceWithWarning(component,methodName){{var fiber=get(component);if(fiber===undefined){if(typeof component.render==='function'){{{throw Error(\"Unable to find node on an unmounted component.\");}}}else{{{throw Error(\"Argument appears to not be a ReactComponent. Keys: \"+Object.keys(component));}}}}var hostFiber=findCurrentHostFiber(fiber);if(hostFiber===null){return null;}if(hostFiber.mode&StrictMode){var componentName=getComponentName(fiber.type)||'Component';if(!didWarnAboutFindNodeInStrictMode[componentName]){didWarnAboutFindNodeInStrictMode[componentName]=true;if(fiber.mode&StrictMode){warningWithoutStack$1(false,'%s is deprecated in StrictMode. '+'%s was passed an instance of %s which is inside StrictMode. '+'Instead, add a ref directly to the element you want to reference. '+'Learn more about using refs safely here: '+'https://fb.me/react-strict-mode-find-node%s',methodName,methodName,componentName,getStackByFiberInDevAndProd(hostFiber));}else{warningWithoutStack$1(false,'%s is deprecated in StrictMode. '+'%s was passed an instance of %s which renders StrictMode children. '+'Instead, add a ref directly to the element you want to reference. '+'Learn more about using refs safely here: '+'https://fb.me/react-strict-mode-find-node%s',methodName,methodName,componentName,getStackByFiberInDevAndProd(hostFiber));}}}return hostFiber.stateNode;}return findHostInstance(component);}function createContainer(containerInfo,tag,hydrate,hydrationCallbacks){return createFiberRoot(containerInfo,tag,hydrate,hydrationCallbacks);}function updateContainer(element,container,parentComponent,callback){var current$$1=container.current;var currentTime=requestCurrentTimeForUpdate();{// $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\nif('undefined'!==typeof jest){warnIfUnmockedScheduler(current$$1);warnIfNotScopedWithMatchingAct(current$$1);}}var suspenseConfig=requestCurrentSuspenseConfig();var expirationTime=computeExpirationForFiber(currentTime,current$$1,suspenseConfig);{if(ReactFiberInstrumentation_1.debugTool){if(current$$1.alternate===null){ReactFiberInstrumentation_1.debugTool.onMountContainer(container);}else if(element===null){ReactFiberInstrumentation_1.debugTool.onUnmountContainer(container);}else{ReactFiberInstrumentation_1.debugTool.onUpdateContainer(container);}}}var context=getContextForSubtree(parentComponent);if(container.context===null){container.context=context;}else{container.pendingContext=context;}{if(phase==='render'&¤t!==null&&!didWarnAboutNestedUpdates){didWarnAboutNestedUpdates=true;warningWithoutStack$1(false,'Render methods should be a pure function of props and state; '+'triggering nested component updates from render is not allowed. '+'If necessary, trigger nested updates in componentDidUpdate.\\n\\n'+'Check the render method of %s.',getComponentName(current.type)||'Unknown');}}var update=createUpdate(expirationTime,suspenseConfig);// Caution: React DevTools currently depends on this property\n// being called \"element\".\nupdate.payload={element:element};callback=callback===undefined?null:callback;if(callback!==null){!(typeof callback==='function')?warningWithoutStack$1(false,'render(...): Expected the last optional `callback` argument to be a '+'function. Instead received: %s.',callback):void 0;update.callback=callback;}enqueueUpdate(current$$1,update);scheduleWork(current$$1,expirationTime);return expirationTime;}function getPublicRootInstance(container){var containerFiber=container.current;if(!containerFiber.child){return null;}switch(containerFiber.child.tag){case HostComponent:return getPublicInstance(containerFiber.child.stateNode);default:return containerFiber.child.stateNode;}}function attemptSynchronousHydration$1(fiber){switch(fiber.tag){case HostRoot:var root=fiber.stateNode;if(root.hydrate){// Flush the first scheduled \"update\".\nflushRoot(root,root.firstPendingTime);}break;case SuspenseComponent:flushSync(function(){return scheduleWork(fiber,Sync);});// If we're still blocked after this, we need to increase\n// the priority of any promises resolving within this\n// boundary so that they next attempt also has higher pri.\nvar retryExpTime=computeInteractiveExpiration(requestCurrentTimeForUpdate());markRetryTimeIfNotHydrated(fiber,retryExpTime);break;}}function markRetryTimeImpl(fiber,retryTime){var suspenseState=fiber.memoizedState;if(suspenseState!==null&&suspenseState.dehydrated!==null){if(suspenseState.retryTime<retryTime){suspenseState.retryTime=retryTime;}}}// Increases the priority of thennables when they resolve within this boundary.\nfunction markRetryTimeIfNotHydrated(fiber,retryTime){markRetryTimeImpl(fiber,retryTime);var alternate=fiber.alternate;if(alternate){markRetryTimeImpl(alternate,retryTime);}}function attemptUserBlockingHydration$1(fiber){if(fiber.tag!==SuspenseComponent){// We ignore HostRoots here because we can't increase\n// their priority and they should not suspend on I/O,\n// since you have to wrap anything that might suspend in\n// Suspense.\nreturn;}var expTime=computeInteractiveExpiration(requestCurrentTimeForUpdate());scheduleWork(fiber,expTime);markRetryTimeIfNotHydrated(fiber,expTime);}function attemptContinuousHydration$1(fiber){if(fiber.tag!==SuspenseComponent){// We ignore HostRoots here because we can't increase\n// their priority and they should not suspend on I/O,\n// since you have to wrap anything that might suspend in\n// Suspense.\nreturn;}var expTime=computeContinuousHydrationExpiration(requestCurrentTimeForUpdate());scheduleWork(fiber,expTime);markRetryTimeIfNotHydrated(fiber,expTime);}function attemptHydrationAtCurrentPriority$1(fiber){if(fiber.tag!==SuspenseComponent){// We ignore HostRoots here because we can't increase\n// their priority other than synchronously flush it.\nreturn;}var currentTime=requestCurrentTimeForUpdate();var expTime=computeExpirationForFiber(currentTime,fiber,null);scheduleWork(fiber,expTime);markRetryTimeIfNotHydrated(fiber,expTime);}function findHostInstanceWithNoPortals(fiber){var hostFiber=findCurrentHostFiberWithNoPortals(fiber);if(hostFiber===null){return null;}if(hostFiber.tag===FundamentalComponent){return hostFiber.stateNode.instance;}return hostFiber.stateNode;}var shouldSuspendImpl=function shouldSuspendImpl(fiber){return false;};function shouldSuspend(fiber){return shouldSuspendImpl(fiber);}var overrideHookState=null;var overrideProps=null;var scheduleUpdate=null;var setSuspenseHandler=null;{var copyWithSetImpl=function copyWithSetImpl(obj,path,idx,value){if(idx>=path.length){return value;}var key=path[idx];var updated=Array.isArray(obj)?obj.slice():_assign({},obj);// $FlowFixMe number or string is fine here\nupdated[key]=copyWithSetImpl(obj[key],path,idx+1,value);return updated;};var copyWithSet=function copyWithSet(obj,path,value){return copyWithSetImpl(obj,path,0,value);};// Support DevTools editable values for useState and useReducer.\noverrideHookState=function overrideHookState(fiber,id,path,value){// For now, the \"id\" of stateful hooks is just the stateful hook index.\n// This may change in the future with e.g. nested hooks.\nvar currentHook=fiber.memoizedState;while(currentHook!==null&&id>0){currentHook=currentHook.next;id--;}if(currentHook!==null){var newState=copyWithSet(currentHook.memoizedState,path,value);currentHook.memoizedState=newState;currentHook.baseState=newState;// We aren't actually adding an update to the queue,\n// because there is no update we can add for useReducer hooks that won't trigger an error.\n// (There's no appropriate action type for DevTools overrides.)\n// As a result though, React will see the scheduled update as a noop and bailout.\n// Shallow cloning props works as a workaround for now to bypass the bailout check.\nfiber.memoizedProps=_assign({},fiber.memoizedProps);scheduleWork(fiber,Sync);}};// Support DevTools props for function components, forwardRef, memo, host components, etc.\noverrideProps=function overrideProps(fiber,path,value){fiber.pendingProps=copyWithSet(fiber.memoizedProps,path,value);if(fiber.alternate){fiber.alternate.pendingProps=fiber.pendingProps;}scheduleWork(fiber,Sync);};scheduleUpdate=function scheduleUpdate(fiber){scheduleWork(fiber,Sync);};setSuspenseHandler=function setSuspenseHandler(newShouldSuspendImpl){shouldSuspendImpl=newShouldSuspendImpl;};}function injectIntoDevTools(devToolsConfig){var _findFiberByHostInstance=devToolsConfig.findFiberByHostInstance;var ReactCurrentDispatcher=ReactSharedInternals.ReactCurrentDispatcher;return injectInternals(_assign({},devToolsConfig,{overrideHookState:overrideHookState,overrideProps:overrideProps,setSuspenseHandler:setSuspenseHandler,scheduleUpdate:scheduleUpdate,currentDispatcherRef:ReactCurrentDispatcher,findHostInstanceByFiber:function findHostInstanceByFiber(fiber){var hostFiber=findCurrentHostFiber(fiber);if(hostFiber===null){return null;}return hostFiber.stateNode;},findFiberByHostInstance:function findFiberByHostInstance(instance){if(!_findFiberByHostInstance){// Might not be implemented by the renderer.\nreturn null;}return _findFiberByHostInstance(instance);},// React Refresh\nfindHostInstancesForRefresh:findHostInstancesForRefresh,scheduleRefresh:scheduleRefresh,scheduleRoot:scheduleRoot,setRefreshHandler:setRefreshHandler,// Enables DevTools to append owner stacks to error messages in DEV mode.\ngetCurrentFiber:function getCurrentFiber(){return current;}}));}// This file intentionally does *not* have the Flow annotation.\n// Don't add it. See `./inline-typed.js` for an explanation.\n// TODO: This type is shared between the reconciler and ReactDOM, but will\n// eventually be lifted out to the renderer.\nfunction ReactDOMRoot(container,options){this._internalRoot=createRootImpl(container,ConcurrentRoot,options);}function ReactDOMBlockingRoot(container,tag,options){this._internalRoot=createRootImpl(container,tag,options);}ReactDOMRoot.prototype.render=ReactDOMBlockingRoot.prototype.render=function(children,callback){var root=this._internalRoot;var cb=callback===undefined?null:callback;{warnOnInvalidCallback(cb,'render');}updateContainer(children,root,null,cb);};ReactDOMRoot.prototype.unmount=ReactDOMBlockingRoot.prototype.unmount=function(callback){var root=this._internalRoot;var cb=callback===undefined?null:callback;{warnOnInvalidCallback(cb,'render');}var container=root.containerInfo;updateContainer(null,root,null,function(){unmarkContainerAsRoot(container);if(cb!==null){cb();}});};function createRootImpl(container,tag,options){// Tag is either LegacyRoot or Concurrent Root\nvar hydrate=options!=null&&options.hydrate===true;var hydrationCallbacks=options!=null&&options.hydrationOptions||null;var root=createContainer(container,tag,hydrate,hydrationCallbacks);markContainerAsRoot(root.current,container);if(hydrate&&tag!==LegacyRoot){var doc=container.nodeType===DOCUMENT_NODE?container:container.ownerDocument;eagerlyTrapReplayableEvents(doc);}return root;}function createRoot(container,options){if(!isValidContainer(container)){{throw Error(\"createRoot(...): Target container is not a DOM element.\");}}warnIfReactDOMContainerInDEV(container);return new ReactDOMRoot(container,options);}function createBlockingRoot(container,options){if(!isValidContainer(container)){{throw Error(\"createRoot(...): Target container is not a DOM element.\");}}warnIfReactDOMContainerInDEV(container);return new ReactDOMBlockingRoot(container,BlockingRoot,options);}function createLegacyRoot(container,options){return new ReactDOMBlockingRoot(container,LegacyRoot,options);}function isValidContainer(node){return!!(node&&(node.nodeType===ELEMENT_NODE||node.nodeType===DOCUMENT_NODE||node.nodeType===DOCUMENT_FRAGMENT_NODE||node.nodeType===COMMENT_NODE&&node.nodeValue===' react-mount-point-unstable '));}function warnOnInvalidCallback(callback,callerName){{!(callback===null||typeof callback==='function')?warningWithoutStack$1(false,'%s(...): Expected the last optional `callback` argument to be a '+'function. Instead received: %s.',callerName,callback):void 0;}}function warnIfReactDOMContainerInDEV(container){{if(isContainerMarkedAsRoot(container)){if(container._reactRootContainer){warningWithoutStack$1(false,'You are calling ReactDOM.createRoot() on a container that was previously '+'passed to ReactDOM.render(). This is not supported.');}else{warningWithoutStack$1(false,'You are calling ReactDOM.createRoot() on a container that '+'has already been passed to createRoot() before. Instead, call '+'root.render() on the existing root instead if you want to update it.');}}}}var ReactCurrentOwner$1=ReactSharedInternals.ReactCurrentOwner;var topLevelUpdateWarnings;var warnedAboutHydrateAPI=false;{topLevelUpdateWarnings=function topLevelUpdateWarnings(container){if(container._reactRootContainer&&container.nodeType!==COMMENT_NODE){var hostInstance=findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);if(hostInstance){!(hostInstance.parentNode===container)?warningWithoutStack$1(false,'render(...): It looks like the React-rendered content of this '+'container was removed without using React. This is not '+'supported and will cause errors. Instead, call '+'ReactDOM.unmountComponentAtNode to empty a container.'):void 0;}}var isRootRenderedBySomeReact=!!container._reactRootContainer;var rootEl=getReactRootElementInContainer(container);var hasNonRootReactChild=!!(rootEl&&getInstanceFromNode$1(rootEl));!(!hasNonRootReactChild||isRootRenderedBySomeReact)?warningWithoutStack$1(false,'render(...): Replacing React-rendered children with a new root '+'component. If you intended to update the children of this node, '+'you should instead have the existing children update their state '+'and render the new components instead of calling ReactDOM.render.'):void 0;!(container.nodeType!==ELEMENT_NODE||!container.tagName||container.tagName.toUpperCase()!=='BODY')?warningWithoutStack$1(false,'render(): Rendering components directly into document.body is '+'discouraged, since its children are often manipulated by third-party '+'scripts and browser extensions. This may lead to subtle '+'reconciliation issues. Try rendering into a container element created '+'for your app.'):void 0;};}function getReactRootElementInContainer(container){if(!container){return null;}if(container.nodeType===DOCUMENT_NODE){return container.documentElement;}else{return container.firstChild;}}function shouldHydrateDueToLegacyHeuristic(container){var rootElement=getReactRootElementInContainer(container);return!!(rootElement&&rootElement.nodeType===ELEMENT_NODE&&rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));}function legacyCreateRootFromDOMContainer(container,forceHydrate){var shouldHydrate=forceHydrate||shouldHydrateDueToLegacyHeuristic(container);// First clear any existing content.\nif(!shouldHydrate){var warned=false;var rootSibling;while(rootSibling=container.lastChild){{if(!warned&&rootSibling.nodeType===ELEMENT_NODE&&rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)){warned=true;warningWithoutStack$1(false,'render(): Target node has markup rendered by React, but there '+'are unrelated nodes as well. This is most commonly caused by '+'white-space inserted around server-rendered markup.');}}container.removeChild(rootSibling);}}{if(shouldHydrate&&!forceHydrate&&!warnedAboutHydrateAPI){warnedAboutHydrateAPI=true;lowPriorityWarningWithoutStack$1(false,'render(): Calling ReactDOM.render() to hydrate server-rendered markup '+'will stop working in React v17. Replace the ReactDOM.render() call '+'with ReactDOM.hydrate() if you want React to attach to the server HTML.');}}return createLegacyRoot(container,shouldHydrate?{hydrate:true}:undefined);}function legacyRenderSubtreeIntoContainer(parentComponent,children,container,forceHydrate,callback){{topLevelUpdateWarnings(container);warnOnInvalidCallback(callback===undefined?null:callback,'render');}// TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n// member of intersection type.\" Whyyyyyy.\nvar root=container._reactRootContainer;var fiberRoot;if(!root){// Initial mount\nroot=container._reactRootContainer=legacyCreateRootFromDOMContainer(container,forceHydrate);fiberRoot=root._internalRoot;if(typeof callback==='function'){var originalCallback=callback;callback=function callback(){var instance=getPublicRootInstance(fiberRoot);originalCallback.call(instance);};}// Initial mount should not be batched.\nunbatchedUpdates(function(){updateContainer(children,fiberRoot,parentComponent,callback);});}else{fiberRoot=root._internalRoot;if(typeof callback==='function'){var _originalCallback=callback;callback=function callback(){var instance=getPublicRootInstance(fiberRoot);_originalCallback.call(instance);};}// Update\nupdateContainer(children,fiberRoot,parentComponent,callback);}return getPublicRootInstance(fiberRoot);}function findDOMNode(componentOrElement){{var owner=ReactCurrentOwner$1.current;if(owner!==null&&owner.stateNode!==null){var warnedAboutRefsInRender=owner.stateNode._warnedAboutRefsInRender;!warnedAboutRefsInRender?warningWithoutStack$1(false,'%s is accessing findDOMNode inside its render(). '+'render() should be a pure function of props and state. It should '+'never access something that requires stale data from the previous '+'render, such as refs. Move this logic to componentDidMount and '+'componentDidUpdate instead.',getComponentName(owner.type)||'A component'):void 0;owner.stateNode._warnedAboutRefsInRender=true;}}if(componentOrElement==null){return null;}if(componentOrElement.nodeType===ELEMENT_NODE){return componentOrElement;}{return findHostInstanceWithWarning(componentOrElement,'findDOMNode');}return findHostInstance(componentOrElement);}function hydrate(element,container,callback){if(!isValidContainer(container)){{throw Error(\"Target container is not a DOM element.\");}}{var isModernRoot=isContainerMarkedAsRoot(container)&&container._reactRootContainer===undefined;if(isModernRoot){warningWithoutStack$1(false,'You are calling ReactDOM.hydrate() on a container that was previously '+'passed to ReactDOM.createRoot(). This is not supported. '+'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');}}// TODO: throw or warn if we couldn't hydrate?\nreturn legacyRenderSubtreeIntoContainer(null,element,container,true,callback);}function render(element,container,callback){if(!isValidContainer(container)){{throw Error(\"Target container is not a DOM element.\");}}{var isModernRoot=isContainerMarkedAsRoot(container)&&container._reactRootContainer===undefined;if(isModernRoot){warningWithoutStack$1(false,'You are calling ReactDOM.render() on a container that was previously '+'passed to ReactDOM.createRoot(). This is not supported. '+'Did you mean to call root.render(element)?');}}return legacyRenderSubtreeIntoContainer(null,element,container,false,callback);}function unstable_renderSubtreeIntoContainer(parentComponent,element,containerNode,callback){if(!isValidContainer(containerNode)){{throw Error(\"Target container is not a DOM element.\");}}if(!(parentComponent!=null&&has(parentComponent))){{throw Error(\"parentComponent must be a valid React Component\");}}return legacyRenderSubtreeIntoContainer(parentComponent,element,containerNode,false,callback);}function unmountComponentAtNode(container){if(!isValidContainer(container)){{throw Error(\"unmountComponentAtNode(...): Target container is not a DOM element.\");}}{var isModernRoot=isContainerMarkedAsRoot(container)&&container._reactRootContainer===undefined;if(isModernRoot){warningWithoutStack$1(false,'You are calling ReactDOM.unmountComponentAtNode() on a container that was previously '+'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');}}if(container._reactRootContainer){{var rootEl=getReactRootElementInContainer(container);var renderedByDifferentReact=rootEl&&!getInstanceFromNode$1(rootEl);!!renderedByDifferentReact?warningWithoutStack$1(false,\"unmountComponentAtNode(): The node you're attempting to unmount \"+'was rendered by another copy of React.'):void 0;}// Unmount should not be batched.\nunbatchedUpdates(function(){legacyRenderSubtreeIntoContainer(null,null,container,false,function(){container._reactRootContainer=null;unmarkContainerAsRoot(container);});});// If you call unmountComponentAtNode twice in quick succession, you'll\n// get `true` twice. That's probably fine?\nreturn true;}else{{var _rootEl=getReactRootElementInContainer(container);var hasNonRootReactChild=!!(_rootEl&&getInstanceFromNode$1(_rootEl));// Check if the container itself is a React root node.\nvar isContainerReactRoot=container.nodeType===ELEMENT_NODE&&isValidContainer(container.parentNode)&&!!container.parentNode._reactRootContainer;!!hasNonRootReactChild?warningWithoutStack$1(false,\"unmountComponentAtNode(): The node you're attempting to unmount \"+'was rendered by React and is not a top-level container. %s',isContainerReactRoot?'You may have accidentally passed in a React root node instead '+'of its container.':'Instead, have the parent component update its state and '+'rerender in order to remove this component.'):void 0;}return false;}}function createPortal$1(children,containerInfo,// TODO: figure out the API for cross-renderer implementation.\nimplementation){var key=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;return{// This tag allow us to uniquely identify this as a React Portal\n$$typeof:REACT_PORTAL_TYPE,key:key==null?null:''+key,children:children,containerInfo:containerInfo,implementation:implementation};}// TODO: this is special because it gets imported during build.\nvar ReactVersion='16.12.0';setAttemptSynchronousHydration(attemptSynchronousHydration$1);setAttemptUserBlockingHydration(attemptUserBlockingHydration$1);setAttemptContinuousHydration(attemptContinuousHydration$1);setAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);var didWarnAboutUnstableCreatePortal=false;{if(typeof Map!=='function'||// $FlowIssue Flow incorrectly thinks Map has no prototype\nMap.prototype==null||typeof Map.prototype.forEach!=='function'||typeof Set!=='function'||// $FlowIssue Flow incorrectly thinks Set has no prototype\nSet.prototype==null||typeof Set.prototype.clear!=='function'||typeof Set.prototype.forEach!=='function'){warningWithoutStack$1(false,'React depends on Map and Set built-in types. Make sure that you load a '+'polyfill in older browsers. https://fb.me/react-polyfills');}}setRestoreImplementation(restoreControlledState$$1);setBatchingImplementation(batchedUpdates$1,discreteUpdates$1,flushDiscreteUpdates,batchedEventUpdates$1);function createPortal$$1(children,container){var key=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(!isValidContainer(container)){{throw Error(\"Target container is not a DOM element.\");}}// TODO: pass ReactDOM portal implementation as third argument\nreturn createPortal$1(children,container,null,key);}var hotUpdateChild=function hotUpdateChild(child){return function(newType){child.type=newType;if(child.alternate){child.alternate.type=newType;}};};var hotResolveType=function hotResolveType(type){return type;};var hotCompareElements=function hotCompareElements(oldType,newType){return oldType===newType;};var hotCleanupHooks=function hotCleanupHooks(){if(typeof resetHooks!=='undefined'){resetHooks();}};var ReactDOM={evalInReactContext:function evalInReactContext(injection){return eval(injection);},hotCleanup:hotCleanupHooks,hotRenderWithHooks:function hotRenderWithHooks(current,render){hotCleanupHooks();if(typeof nextCurrentHook!=='undefined'&&typeof ReactCurrentDispatcher$1!=='undefined'){nextCurrentHook=current!==null?current.memoizedState:null;if(typeof firstCurrentHook!=='undefined'){firstCurrentHook=nextCurrentHook;}ReactCurrentDispatcher$1.current=nextCurrentHook===null?HooksDispatcherOnMountInDEV:HooksDispatcherOnUpdateInDEV;}var rendered=render();hotCleanupHooks();return rendered;},setHotElementComparator:function setHotElementComparator(newComparator){hotCompareElements=newComparator;},setHotTypeResolver:function setHotTypeResolver(newResolver){hotResolveType=newResolver;},createPortal:createPortal$$1,// Legacy\nfindDOMNode:findDOMNode,hydrate:hydrate,render:render,unstable_renderSubtreeIntoContainer:unstable_renderSubtreeIntoContainer,unmountComponentAtNode:unmountComponentAtNode,// Temporary alias since we already shipped React 16 RC with it.\n// TODO: remove in React 17.\nunstable_createPortal:function unstable_createPortal(){if(!didWarnAboutUnstableCreatePortal){didWarnAboutUnstableCreatePortal=true;lowPriorityWarningWithoutStack$1(false,'The ReactDOM.unstable_createPortal() alias has been deprecated, '+'and will be removed in React 17+. Update your code to use '+'ReactDOM.createPortal() instead. It has the exact same API, '+'but without the \"unstable_\" prefix.');}return createPortal$$1.apply(void 0,arguments);},unstable_batchedUpdates:batchedUpdates$1,flushSync:flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{// Keep in sync with ReactDOMUnstableNativeDependencies.js\n// ReactTestUtils.js, and ReactTestUtilsAct.js. This is an array for better minification.\nEvents:[getInstanceFromNode$1,getNodeFromInstance$1,getFiberCurrentPropsFromNode$1,injection.injectEventPluginsByName,eventNameDispatchConfigs,accumulateTwoPhaseDispatches,accumulateDirectDispatches,enqueueStateRestore,restoreStateIfNeeded,dispatchEvent,runEventsInBatch,flushPassiveEffects,IsThisRendererActing]}};if(exposeConcurrentModeAPIs){ReactDOM.createRoot=createRoot;ReactDOM.createBlockingRoot=createBlockingRoot;ReactDOM.unstable_discreteUpdates=discreteUpdates$1;ReactDOM.unstable_flushDiscreteUpdates=flushDiscreteUpdates;ReactDOM.unstable_flushControlled=flushControlled;ReactDOM.unstable_scheduleHydration=function(target){if(target){queueExplicitHydrationTarget(target);}};}var foundDevTools=injectIntoDevTools({findFiberByHostInstance:getClosestInstanceFromNode,bundleType:1,version:ReactVersion,rendererPackageName:'react-dom'});{if(!foundDevTools&&canUseDOM&&window.top===window.self){// If we're in Chrome or Firefox, provide a download link if not installed.\nif(navigator.userAgent.indexOf('Chrome')>-1&&navigator.userAgent.indexOf('Edge')===-1||navigator.userAgent.indexOf('Firefox')>-1){var protocol=window.location.protocol;// Don't warn in exotic cases like chrome-extension://.\nif(/^(https?|file):$/.test(protocol)){console.info('%cDownload the React DevTools '+'for a better development experience: '+'https://fb.me/react-devtools'+(protocol==='file:'?'\\nYou might need to use a local HTTP server (instead of file://): '+'https://fb.me/react-devtools-faq':''),'font-weight:bold');}}}}var ReactDOM$2=Object.freeze({\"default\":ReactDOM});var ReactDOM$3=ReactDOM$2&&ReactDOM||ReactDOM$2;// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar reactDom=ReactDOM$3[\"default\"]||ReactDOM$3;module.exports=reactDom;})();}/* 🔥 this is hot-loader/react-dom 4.12.19 🔥 *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0Bob3QtbG9hZGVyL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AaG90LWxvYWRlci9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcz80YjRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIPCflKUgdGhpcyBpcyBob3QtbG9hZGVyL3JlYWN0LWRvbSA0LjEyLjE5IPCflKUgKi9cbi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMFxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBTY2hlZHVsZXIgPSByZXF1aXJlKCdzY2hlZHVsZXInKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMnKTtcbnZhciB0cmFjaW5nID0gcmVxdWlyZSgnc2NoZWR1bGVyL3RyYWNpbmcnKTtcblxuLy8gRG8gbm90IHJlcXVpcmUgdGhpcyBtb2R1bGUgZGlyZWN0bHkhIFVzZSBub3JtYWwgYGludmFyaWFudGAgY2FsbHMgd2l0aFxuLy8gdGVtcGxhdGUgbGl0ZXJhbCBzdHJpbmdzLiBUaGUgbWVzc2FnZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGVycm9yIGNvZGVzXG4vLyBkdXJpbmcgYnVpbGQuXG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKFwiUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS5cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmplY3RhYmxlIG9yZGVyaW5nIG9mIGV2ZW50IHBsdWdpbnMuXG4gKi9cbnZhciBldmVudFBsdWdpbk9yZGVyID0gbnVsbDtcbi8qKlxuICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cblxudmFyIG5hbWVzVG9QbHVnaW5zID0ge307XG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5nIHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpIHtcbiAgaWYgKCFldmVudFBsdWdpbk9yZGVyKSB7XG4gICAgLy8gV2FpdCB1bnRpbCBhbiBgZXZlbnRQbHVnaW5PcmRlcmAgaXMgaW5qZWN0ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykge1xuICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICB2YXIgcGx1Z2luSW5kZXggPSBldmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG5cbiAgICBpZiAoIShwbHVnaW5JbmRleCA+IC0xKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgcGx1Z2luIG9yZGVyaW5nLCBgXCIgKyBwbHVnaW5OYW1lICsgXCJgLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJFdmVudFBsdWdpblJlZ2lzdHJ5OiBFdmVudCBwbHVnaW5zIG11c3QgaW1wbGVtZW50IGFuIGBleHRyYWN0RXZlbnRzYCBtZXRob2QsIGJ1dCBgXCIgKyBwbHVnaW5OYW1lICsgXCJgIGRvZXMgbm90LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwbHVnaW5zW3BsdWdpbkluZGV4XSA9IHBsdWdpbk1vZHVsZTtcbiAgICB2YXIgcHVibGlzaGVkRXZlbnRzID0gcGx1Z2luTW9kdWxlLmV2ZW50VHlwZXM7XG5cbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7XG4gICAgICBpZiAoIXB1Ymxpc2hFdmVudEZvclBsdWdpbihwdWJsaXNoZWRFdmVudHNbZXZlbnROYW1lXSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGBcIiArIGV2ZW50TmFtZSArIFwiYCBmb3IgcGx1Z2luIGBcIiArIHBsdWdpbk5hbWUgKyBcImAuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFB1Ymxpc2hlcyBhbiBldmVudCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGJ5IHRoZSBzdXBwbGllZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICBpZiAoISFldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIGV2ZW50IG5hbWUsIGBcIiArIGV2ZW50TmFtZSArIFwiYC5cIik7XG4gICAgfVxuICB9XG5cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcbiAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2VOYW1lKSkge1xuICAgICAgICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSA9IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlTmFtZV07XG4gICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBQdWJsaXNoZXMgYSByZWdpc3RyYXRpb24gbmFtZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgZGlzcGF0Y2hlZCBldmVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgUmVnaXN0cmF0aW9uIG5hbWUgdG8gYWRkLlxuICogQHBhcmFtIHtvYmplY3R9IFBsdWdpbk1vZHVsZSBQbHVnaW4gcHVibGlzaGluZyB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocmVnaXN0cmF0aW9uTmFtZSwgcGx1Z2luTW9kdWxlLCBldmVudE5hbWUpIHtcbiAgaWYgKCEhcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIkV2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSByZWdpc3RyYXRpb24gbmFtZSwgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYC5cIik7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGUuZXZlbnRUeXBlc1tldmVudE5hbWVdLmRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW5zIHNvIHRoYXQgdGhleSBjYW4gZXh0cmFjdCBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICpcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHVifVxuICovXG5cbi8qKlxuICogT3JkZXJlZCBsaXN0IG9mIGluamVjdGVkIHBsdWdpbnMuXG4gKi9cblxuXG52YXIgcGx1Z2lucyA9IFtdO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gZXZlbnQgbmFtZSB0byBkaXNwYXRjaCBjb25maWdcbiAqL1xuXG52YXIgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBwbHVnaW4gbW9kdWxlXG4gKi9cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0ge307IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbi8qKlxuICogSW5qZWN0cyBhbiBvcmRlcmluZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSkuIFRoaXMgYWxsb3dzIHRoZSBvcmRlcmluZ1xuICogdG8gYmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0IG9yZGVyaW5nIGlzXG4gKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAqIEBpbnRlcm5hbFxuICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXJ9XG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgaWYgKCEhZXZlbnRQbHVnaW5PcmRlcikge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuIG9uY2UuIFlvdSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC5cIik7XG4gICAgfVxuICB9IC8vIENsb25lIHRoZSBvcmRlcmluZyBzbyBpdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgbXV0YXRlZC5cblxuXG4gIGV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpO1xuICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xufVxuLyoqXG4gKiBJbmplY3RzIHBsdWdpbnMgdG8gYmUgdXNlZCBieSBgRXZlbnRQbHVnaW5IdWJgLiBUaGUgcGx1Z2luIG5hbWVzIG11c3QgYmVcbiAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcmAuXG4gKlxuICogUGx1Z2lucyBjYW4gYmUgaW5qZWN0ZWQgYXMgcGFydCBvZiBwYWdlIGluaXRpYWxpemF0aW9uIG9yIG9uLXRoZS1mbHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gKiBAaW50ZXJuYWxcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9XG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgIGlmICghaW5qZWN0ZWROYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG5cbiAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdICE9PSBwbHVnaW5Nb2R1bGUpIHtcbiAgICAgIGlmICghIW5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkV2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zIHVzaW5nIHRoZSBzYW1lIG5hbWUsIGBcIiArIHBsdWdpbk5hbWUgKyBcImAuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID0gcGx1Z2luTW9kdWxlO1xuICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59O1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICB2YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2ID0gZnVuY3Rpb24gKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlRoZSBgZG9jdW1lbnRgIGdsb2JhbCB3YXMgZGVmaW5lZCB3aGVuIFJlYWN0IHdhcyBpbml0aWFsaXplZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiBpbiBhIHRlc3QgZW52aXJvbm1lbnQgaWYgYSBjb21wb25lbnQgc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIHJ1bm5pbmcuIFRvIHNvbHZlIHRoaXMsIHlvdSBjYW4gZWl0aGVyIHVubW91bnQgdGhlIGNvbXBvbmVudCBhdCB0aGUgZW5kIG9mIHlvdXIgdGVzdCAoYW5kIGVuc3VyZSB0aGF0IGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBnZXQgY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBhc3luY2hyb25vdXMuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTsgLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgIGlmICghZGlkU2V0RXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZXJyb3JlZCwgYnV0IHRoZSBlcnJvciBldmVudCBuZXZlciBmaXJlZC5cbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgKyAndGhlIGFjdHVhbCBlcnJvciBvYmplY3QgaW4gZGV2ZWxvcG1lbnQuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtY3Jvc3NvcmlnaW4tZXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICB9O1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGludm9rZUd1YXJkZWRDYWxsYmFja0RldjtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxID0gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbDtcblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBTYW1lIGFzIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCBzdG9yZXNcbiAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAqIFRPRE86IFNlZSBpZiBjYXVnaHRFcnJvciBhbmQgcmV0aHJvd0Vycm9yIGNhbiBiZSB1bmlmaWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICBpZiAoIWhhc1JldGhyb3dFcnJvcikge1xuICAgICAgaGFzUmV0aHJvd0Vycm9yID0gdHJ1ZTtcbiAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAqL1xuXG5mdW5jdGlvbiByZXRocm93Q2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSByZXRocm93RXJyb3I7XG4gICAgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG4gICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ2F1Z2h0RXJyb3IoKSB7XG4gIHJldHVybiBoYXNFcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiY2xlYXJDYXVnaHRFcnJvciB3YXMgY2FsbGVkIGJ1dCBubyBlcnJvciB3YXMgY2FwdHVyZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xudmFyIHdhcm5pbmdXaXRob3V0U3RhY2sgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB3YXJuaW5nV2l0aG91dFN0YWNrID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nV2l0aG91dFN0YWNrKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDgpIHtcbiAgICAgIC8vIENoZWNrIGJlZm9yZSB0aGUgY29uZGl0aW9uIHRvIGNhdGNoIHZpb2xhdGlvbnMgZWFybHkuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhcm5pbmdXaXRob3V0U3RhY2soKSBjdXJyZW50bHkgc3VwcG9ydHMgYXQgbW9zdCA4IGFyZ3VtZW50cy4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICAgIH0pO1xuICAgICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG5cbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUuZXJyb3IsIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG52YXIgd2FybmluZ1dpdGhvdXRTdGFjayQxID0gd2FybmluZ1dpdGhvdXRTdGFjaztcblxudmFyIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUgPSBudWxsO1xudmFyIGdldEluc3RhbmNlRnJvbU5vZGUgPSBudWxsO1xudmFyIGdldE5vZGVGcm9tSW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gc2V0Q29tcG9uZW50VHJlZShnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlSW1wbCwgZ2V0SW5zdGFuY2VGcm9tTm9kZUltcGwsIGdldE5vZGVGcm9tSW5zdGFuY2VJbXBsKSB7XG4gIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlSW1wbDtcbiAgZ2V0SW5zdGFuY2VGcm9tTm9kZSA9IGdldEluc3RhbmNlRnJvbU5vZGVJbXBsO1xuICBnZXROb2RlRnJvbUluc3RhbmNlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZUltcGw7XG5cbiAge1xuICAgICEoZ2V0Tm9kZUZyb21JbnN0YW5jZSAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0V2ZW50UGx1Z2luVXRpbHMuc2V0Q29tcG9uZW50VHJlZSguLi4pOiBJbmplY3RlZCAnICsgJ21vZHVsZSBpcyBtaXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS4nKSA6IHZvaWQgMDtcbiAgfVxufVxudmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzO1xuXG57XG4gIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgICB2YXIgbGlzdGVuZXJzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKTtcbiAgICB2YXIgbGlzdGVuZXJzTGVuID0gbGlzdGVuZXJzSXNBcnIgPyBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggOiBkaXNwYXRjaExpc3RlbmVycyA/IDEgOiAwO1xuICAgIHZhciBpbnN0YW5jZXNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJbnN0YW5jZXMpO1xuICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyciA/IGRpc3BhdGNoSW5zdGFuY2VzLmxlbmd0aCA6IGRpc3BhdGNoSW5zdGFuY2VzID8gMSA6IDA7XG4gICAgIShpbnN0YW5jZXNJc0FyciA9PT0gbGlzdGVuZXJzSXNBcnIgJiYgaW5zdGFuY2VzTGVuID09PSBsaXN0ZW5lcnNMZW4pID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRXZlbnRQbHVnaW5VdGlsczogSW52YWxpZCBgZXZlbnRgLicpIDogdm9pZCAwO1xuICB9O1xufVxuLyoqXG4gKiBEaXNwYXRjaCB0aGUgZXZlbnQgdG8gdGhlIGxpc3RlbmVyLlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgU3ludGhldGljRXZlbnQgdG8gaGFuZGxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBsaXN0ZW5lciBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFja1xuICogQHBhcmFtIHsqfSBpbnN0IEludGVybmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICovXG5cblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgaW5zdCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG4vKipcbiAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBldmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLlxuICovXG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcblxuICB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuXG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sIGRpc3BhdGNoSW5zdGFuY2VzW2ldKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaEluc3RhbmNlcyk7XG4gIH1cblxuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBudWxsO1xufVxuLyoqXG4gKiBAc2VlIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsXG4gKi9cblxuXG5cbi8qKlxuICogRXhlY3V0aW9uIG9mIGEgXCJkaXJlY3RcIiBkaXNwYXRjaCAtIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2hcbiAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZVxuICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtlIHNlbnNlIHdoZW5cbiAqIGRlYWxpbmcgd2l0aCBcImRpcmVjdFwiIGRpc3BhdGNoZXMuXG4gKlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuXG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5cbi8qKlxuICogQWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRvIHRoZSBmaXJzdCBvbmUuIFRoaXNcbiAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gKiBBUEkgY2xlYW5uZXNzLiBTaW5jZSBgY3VycmVudGAgY2FuIGJlIG51bGwgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbiBhbmQgbm90XG4gKiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3NpZ24gaXQgYmFjayB0byBgY3VycmVudGA6XG4gKlxuICogYGEgPSBhY2N1bXVsYXRlSW50byhhLCBiKTtgXG4gKlxuICogVGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3VtdWxhdGVgIGZvciBzb21ldGhpbmcgY2xlYW5lci5cbiAqXG4gKiBAcmV0dXJuIHsqfGFycmF5PCo+fSBBbiBhY2N1bXVsYXRpb24gb2YgaXRlbXMuXG4gKi9cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUludG8oY3VycmVudCwgbmV4dCkge1xuICBpZiAoIShuZXh0ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5cIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBuZXh0O1xuICB9IC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG5cblxuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuZXh0KSkge1xuICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0YC5cbiAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBbY3VycmVudCwgbmV4dF07XG59XG5cbi8qKlxuICogQHBhcmFtIHthcnJheX0gYXJyIGFuIFwiYWNjdW11bGF0aW9uXCIgb2YgaXRlbXMgd2hpY2ggaXMgZWl0aGVyIGFuIEFycmF5IG9yXG4gKiBhIHNpbmdsZSBpdGVtLiBVc2VmdWwgd2hlbiBwYWlyZWQgd2l0aCB0aGUgYGFjY3VtdWxhdGVgIG1vZHVsZS4gVGhpcyBpcyBhXG4gKiBzaW1wbGUgdXRpbGl0eSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gYWJvdXQgYSBjb2xsZWN0aW9uIG9mIGl0ZW1zLCBidXRcbiAqIGhhbmRsaW5nIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgZXhhY3RseSBvbmUgaXRlbSAoYW5kIHdlIGRvIG5vdCBuZWVkIHRvXG4gKiBhbGxvY2F0ZSBhbiBhcnJheSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayBpbnZva2VkIHdpdGggZWFjaCBlbGVtZW50IG9yIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7P30gW3Njb3BlXSBTY29wZSB1c2VkIGFzIGB0aGlzYCBpbiBhIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoQWNjdW11bGF0ZWQoYXJyLCBjYiwgc2NvcGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGFyci5mb3JFYWNoKGNiLCBzY29wZSk7XG4gIH0gZWxzZSBpZiAoYXJyKSB7XG4gICAgY2IuY2FsbChzY29wZSwgYXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlXG4gKiB3YWl0aW5nIHRvIGhhdmUgdGhlaXIgZGlzcGF0Y2hlcyBleGVjdXRlZC5cbiAqL1xuXG52YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwgdW5sZXNzIHBlcnNpc3RlbnQuXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBldmVudCBTeW50aGV0aWMgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoZXZlbnQpIHtcbiAgICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQpO1xuXG4gICAgaWYgKCFldmVudC5pc1BlcnNpc3RlbnQoKSkge1xuICAgICAgZXZlbnQuY29uc3RydWN0b3IucmVsZWFzZShldmVudCk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwgPSBmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUpO1xufTtcblxuZnVuY3Rpb24gcnVuRXZlbnRzSW5CYXRjaChldmVudHMpIHtcbiAgaWYgKGV2ZW50cyAhPT0gbnVsbCkge1xuICAgIGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudHMpO1xuICB9IC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgLy8gZXZlbnRzIGdldCBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nLlxuXG5cbiAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbiAgaWYgKCFwcm9jZXNzaW5nRXZlbnRRdWV1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwpO1xuXG4gIGlmICghIWV2ZW50UXVldWUpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcInByb2Nlc3NFdmVudFF1ZXVlKCk6IEFkZGl0aW9uYWwgZXZlbnRzIHdlcmUgZW5xdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZyBhbiBldmVudCBxdWV1ZS4gU3VwcG9ydCBmb3IgdGhpcyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgZXZlbnQgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuXG4gKlxuICogRXZlbnQgcGx1Z2lucyBjYW4gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIGBleHRyYWN0RXZlbnRzYCB7ZnVuY3Rpb24oc3RyaW5nLCBET01FdmVudFRhcmdldCwgc3RyaW5nLCBvYmplY3QpOiAqfVxuICogICAgIFJlcXVpcmVkLiBXaGVuIGEgdG9wLWxldmVsIGV2ZW50IGlzIGZpcmVkLCB0aGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0b1xuICogICAgIGV4dHJhY3Qgc3ludGhldGljIGV2ZW50cyB0aGF0IHdpbGwgaW4gdHVybiBiZSBxdWV1ZWQgYW5kIGRpc3BhdGNoZWQuXG4gKlxuICogICBgZXZlbnRUeXBlc2Age29iamVjdH1cbiAqICAgICBPcHRpb25hbCwgcGx1Z2lucyB0aGF0IGZpcmUgZXZlbnRzIG11c3QgcHVibGlzaCBhIG1hcHBpbmcgb2YgcmVnaXN0cmF0aW9uXG4gKiAgICAgbmFtZXMgdGhhdCBhcmUgdXNlZCB0byByZWdpc3RlciBsaXN0ZW5lcnMuIFZhbHVlcyBvZiB0aGlzIG1hcHBpbmcgbXVzdFxuICogICAgIGJlIG9iamVjdHMgdGhhdCBjb250YWluIGByZWdpc3RyYXRpb25OYW1lYCBvciBgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNgLlxuICpcbiAqICAgYGV4ZWN1dGVEaXNwYXRjaGAge2Z1bmN0aW9uKG9iamVjdCwgZnVuY3Rpb24sIHN0cmluZyl9XG4gKiAgICAgT3B0aW9uYWwsIGFsbG93cyBwbHVnaW5zIHRvIG92ZXJyaWRlIGhvdyBhbiBldmVudCBnZXRzIGRpc3BhdGNoZWQuIEJ5XG4gKiAgICAgZGVmYXVsdCwgdGhlIGxpc3RlbmVyIGlzIHNpbXBseSBpbnZva2VkLlxuICpcbiAqIEVhY2ggcGx1Z2luIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBgRXZlbnRzUGx1Z2luSHViYCBpcyBpbW1lZGlhdGVseSBvcGVyYWJsZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cblxuLyoqXG4gKiBNZXRob2RzIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzLlxuICovXG5cblxudmFyIGluamVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgKiBAcHVibGljXG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBpbmplY3RFdmVudFBsdWdpbk9yZGVyLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTogaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG59O1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIGxpc3RlbmVyOyAvLyBUT0RPOiBzaG91bGRQcmV2ZW50TW91c2VFdmVudCBpcyBET00tc3BlY2lmaWMgYW5kIGRlZmluaXRlbHkgc2hvdWxkIG5vdFxuICAvLyBsaXZlIGhlcmU7IG5lZWRzIHRvIGJlIG1vdmVkIHRvIGEgYmV0dGVyIHBsYWNlIHNvb25cblxuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKCFzdGF0ZU5vZGUpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAoIXByb3BzKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArIHR5cGVvZiBsaXN0ZW5lciArIFwiYCB0eXBlLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXI7XG59XG4vKipcbiAqIEFsbG93cyByZWdpc3RlcmVkIHBsdWdpbnMgYW4gb3Bwb3J0dW5pdHkgdG8gZXh0cmFjdCBldmVudHMgZnJvbSB0b3AtbGV2ZWxcbiAqIG5hdGl2ZSBicm93c2VyIGV2ZW50cy5cbiAqXG4gKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAqIEBpbnRlcm5hbFxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RQbHVnaW5FdmVudHModG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50cyA9IG51bGw7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgIHZhciBwb3NzaWJsZVBsdWdpbiA9IHBsdWdpbnNbaV07XG5cbiAgICBpZiAocG9zc2libGVQbHVnaW4pIHtcbiAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcblxuICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICBldmVudHMgPSBhY2N1bXVsYXRlSW50byhldmVudHMsIGV4dHJhY3RlZEV2ZW50cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50cztcbn1cblxuZnVuY3Rpb24gcnVuRXh0cmFjdGVkUGx1Z2luRXZlbnRzSW5CYXRjaCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRzID0gZXh0cmFjdFBsdWdpbkV2ZW50cyh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHJ1bkV2ZW50c0luQmF0Y2goZXZlbnRzKTtcbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxudmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbnZhciBIb3N0UG9ydGFsID0gNDsgLy8gQSBzdWJ0cmVlLiBDb3VsZCBiZSBhbiBlbnRyeSBwb2ludCB0byBhIGRpZmZlcmVudCByZW5kZXJlci5cblxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xudmFyIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IDE5O1xudmFyIEZ1bmRhbWVudGFsQ29tcG9uZW50ID0gMjA7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7IC8vIFByZXZlbnQgbmV3ZXIgcmVuZGVyZXJzIGZyb20gUlRFIHdoZW4gdXNlZCB3aXRoIG9sZGVyIHJlYWN0IHBhY2thZ2UgdmVyc2lvbnMuXG4vLyBDdXJyZW50IG93bmVyIGFuZCBkaXNwYXRjaGVyIHVzZWQgdG8gc2hhcmUgdGhlIHNhbWUgcmVmLFxuLy8gYnV0IFBSICMxNDU0OCBzcGxpdCB0aGVtIG91dCB0byBiZXR0ZXIgc3VwcG9ydCB0aGUgcmVhY3QtZGVidWctdG9vbHMgcGFja2FnZS5cblxuaWYgKCFSZWFjdFNoYXJlZEludGVybmFscy5oYXNPd25Qcm9wZXJ0eSgnUmVhY3RDdXJyZW50RGlzcGF0Y2hlcicpKSB7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuXG5pZiAoIVJlYWN0U2hhcmVkSW50ZXJuYWxzLmhhc093blByb3BlcnR5KCdSZWFjdEN1cnJlbnRCYXRjaENvbmZpZycpKSB7XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICAgIHN1c3BlbnNlOiBudWxsXG4gIH07XG59XG5cbnZhciBCRUZPUkVfU0xBU0hfUkUgPSAvXiguKilbXFxcXFxcL10vO1xudmFyIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUgPSBmdW5jdGlvbiAobmFtZSwgc291cmNlLCBvd25lck5hbWUpIHtcbiAgdmFyIHNvdXJjZUluZm8gPSAnJztcblxuICBpZiAoc291cmNlKSB7XG4gICAgdmFyIHBhdGggPSBzb3VyY2UuZmlsZU5hbWU7XG4gICAgdmFyIGZpbGVOYW1lID0gcGF0aC5yZXBsYWNlKEJFRk9SRV9TTEFTSF9SRSwgJycpO1xuXG4gICAge1xuICAgICAgLy8gSW4gREVWLCBpbmNsdWRlIGNvZGUgZm9yIGEgY29tbW9uIHNwZWNpYWwgY2FzZTpcbiAgICAgIC8vIHByZWZlciBcImZvbGRlci9pbmRleC5qc1wiIGluc3RlYWQgb2YganVzdCBcImluZGV4LmpzXCIuXG4gICAgICBpZiAoL15pbmRleFxcLi8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcGF0aC5tYXRjaChCRUZPUkVfU0xBU0hfUkUpO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHZhciBwYXRoQmVmb3JlU2xhc2ggPSBtYXRjaFsxXTtcblxuICAgICAgICAgIGlmIChwYXRoQmVmb3JlU2xhc2gpIHtcbiAgICAgICAgICAgIHZhciBmb2xkZXJOYW1lID0gcGF0aEJlZm9yZVNsYXNoLnJlcGxhY2UoQkVGT1JFX1NMQVNIX1JFLCAnJyk7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZvbGRlck5hbWUgKyAnLycgKyBmaWxlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3VyY2VJbmZvID0gJyAoYXQgJyArIGZpbGVOYW1lICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKSc7XG4gIH0gZWxzZSBpZiAob3duZXJOYW1lKSB7XG4gICAgc291cmNlSW5mbyA9ICcgKGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSArICcpJztcbiAgfVxuXG4gIHJldHVybiAnXFxuICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93bicpICsgc291cmNlSW5mbztcbn07XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxuXG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gd2FybmluZ1dpdGhvdXRTdGFjayQxO1xuXG57XG4gIHdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvd2FybmluZy1hbmQtaW52YXJpYW50LWFyZ3NcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMS5hcHBseSh2b2lkIDAsIFtmYWxzZSwgZm9ybWF0ICsgJyVzJ10uY29uY2F0KGFyZ3MsIFtzdGFja10pKTtcbiAgfTtcbn1cblxudmFyIHdhcm5pbmckMSA9IHdhcm5pbmc7XG5cbnZhciBVbmluaXRpYWxpemVkID0gLTE7XG52YXIgUGVuZGluZyA9IDA7XG52YXIgUmVzb2x2ZWQgPSAxO1xudmFyIFJlamVjdGVkID0gMjtcbmZ1bmN0aW9uIHJlZmluZVJlc29sdmVkTGF6eUNvbXBvbmVudChsYXp5Q29tcG9uZW50KSB7XG4gIHJldHVybiBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPT09IFJlc29sdmVkID8gbGF6eUNvbXBvbmVudC5fcmVzdWx0IDogbnVsbDtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVMYXp5Q29tcG9uZW50VHlwZShsYXp5Q29tcG9uZW50KSB7XG4gIGlmIChsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPSBQZW5kaW5nO1xuICAgIHZhciBjdG9yID0gbGF6eUNvbXBvbmVudC5fY3RvcjtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7XG4gICAgbGF6eUNvbXBvbmVudC5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAobGF6eUNvbXBvbmVudC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgXCJjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wb3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGF6eUNvbXBvbmVudC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIGxhenlDb21wb25lbnQuX3Jlc3VsdCA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAobGF6eUNvbXBvbmVudC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIGxhenlDb21wb25lbnQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICBsYXp5Q29tcG9uZW50Ll9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICByZXR1cm4gJ0NvbnRleHQuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHJldHVybiAnQ29udGV4dC5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgdGhlbmFibGUgPSB0eXBlO1xuICAgICAgICAgIHZhciByZXNvbHZlZFRoZW5hYmxlID0gcmVmaW5lUmVzb2x2ZWRMYXp5Q29tcG9uZW50KHRoZW5hYmxlKTtcblxuICAgICAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShyZXNvbHZlZFRoZW5hYmxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RSb290OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG93bmVyID0gZmliZXIuX2RlYnVnT3duZXI7XG4gICAgICB2YXIgc291cmNlID0gZmliZXIuX2RlYnVnU291cmNlO1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICBvd25lck5hbWUgPSBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciBpbmZvID0gJyc7XG4gIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgZG8ge1xuICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH0gd2hpbGUgKG5vZGUpO1xuXG4gIHJldHVybiBpbmZvO1xufVxudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIHBoYXNlID0gbnVsbDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICBjdXJyZW50ID0gbnVsbDtcbiAgICBwaGFzZSA9IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBwaGFzZSA9IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRQaGFzZShsaWZlQ3ljbGVQaGFzZSkge1xuICB7XG4gICAgcGhhc2UgPSBsaWZlQ3ljbGVQaGFzZTtcbiAgfVxufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIGVuZHNXaXRoKHN1YmplY3QsIHNlYXJjaCkge1xuICB2YXIgbGVuZ3RoID0gc3ViamVjdC5sZW5ndGg7XG4gIHJldHVybiBzdWJqZWN0LnN1YnN0cmluZyhsZW5ndGggLSBzZWFyY2gubGVuZ3RoLCBsZW5ndGgpID09PSBzZWFyY2g7XG59XG5cbnZhciBQTFVHSU5fRVZFTlRfU1lTVEVNID0gMTtcbnZhciBSRVNQT05ERVJfRVZFTlRfU1lTVEVNID0gMSA8PCAxO1xudmFyIElTX1BBU1NJVkUgPSAxIDw8IDI7XG52YXIgSVNfQUNUSVZFID0gMSA8PCAzO1xudmFyIFBBU1NJVkVfTk9UX1NVUFBPUlRFRCA9IDEgPDwgNDtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNTtcblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiByZXN0b3JlSW1wbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlKTtcbiAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZW5hYmxlVXNlclRpbWluZ0FQSSA9IHRydWU7IC8vIEhlbHBzIGlkZW50aWZ5IHNpZGUgZWZmZWN0cyBpbiByZW5kZXItcGhhc2UgbGlmZWN5Y2xlIGhvb2tzIGFuZCBzZXRTdGF0ZVxuLy8gcmVkdWNlcnMgYnkgZG91YmxlIGludm9raW5nIHRoZW0gaW4gU3RyaWN0IE1vZGUuXG5cbnZhciBkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlID0gdHJ1ZTsgLy8gVG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgZGVidWdnZXIsIHdlXG4vLyByZXBsYXkgdGhlIGJlZ2luIHBoYXNlIG9mIGEgZmFpbGVkIGNvbXBvbmVudCBpbnNpZGUgaW52b2tlR3VhcmRlZENhbGxiYWNrLlxuXG52YXIgcmVwbGF5RmFpbGVkVW5pdE9mV29ya1dpdGhJbnZva2VHdWFyZGVkQ2FsbGJhY2sgPSB0cnVlOyAvLyBXYXJuIGFib3V0IGRlcHJlY2F0ZWQsIGFzeW5jLXVuc2FmZSBsaWZlY3ljbGVzOyByZWxhdGVzIHRvIFJGQyAjNjpcblxudmFyIHdhcm5BYm91dERlcHJlY2F0ZWRMaWZlY3ljbGVzID0gdHJ1ZTsgLy8gR2F0aGVyIGFkdmFuY2VkIHRpbWluZyBtZXRyaWNzIGZvciBQcm9maWxlciBzdWJ0cmVlcy5cblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBUcmFjZSB3aGljaCBpbnRlcmFjdGlvbnMgdHJpZ2dlciBlYWNoIGNvbW1pdC5cblxudmFyIGVuYWJsZVNjaGVkdWxlclRyYWNpbmcgPSB0cnVlOyAvLyBTU1IgZXhwZXJpbWVudHNcblxudmFyIGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIgPSBmYWxzZTtcbnZhciBlbmFibGVTZWxlY3RpdmVIeWRyYXRpb24gPSBmYWxzZTsgLy8gT25seSB1c2VkIGluIHd3dyBidWlsZHMuXG5cbiAvLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuIC8vIERpc2FibGUgamF2YXNjcmlwdDogVVJMIHN0cmluZ3MgaW4gaHJlZiBmb3IgWFNTIHByb3RlY3Rpb24uXG5cbnZhciBkaXNhYmxlSmF2YVNjcmlwdFVSTHMgPSBmYWxzZTsgLy8gUmVhY3QgRmlyZTogcHJldmVudCB0aGUgdmFsdWUgYW5kIGNoZWNrZWQgYXR0cmlidXRlcyBmcm9tIHN5bmNpbmdcbi8vIHdpdGggdGhlaXIgcmVsYXRlZCBET00gcHJvcGVydGllc1xuXG52YXIgZGlzYWJsZUlucHV0QXR0cmlidXRlU3luY2luZyA9IGZhbHNlOyAvLyBUaGVzZSBBUElzIHdpbGwgbm8gbG9uZ2VyIGJlIFwidW5zdGFibGVcIiBpbiB0aGUgdXBjb21pbmcgMTYuNyByZWxlYXNlLFxuLy8gQ29udHJvbCB0aGlzIGJlaGF2aW9yIHdpdGggYSBmbGFnIHRvIHN1cHBvcnQgMTYuNiBtaW5vciByZWxlYXNlcyBpbiB0aGUgbWVhbndoaWxlLlxuXG52YXIgZXhwb3NlQ29uY3VycmVudE1vZGVBUElzID0gZmFsc2U7XG52YXIgd2FybkFib3V0U2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb24gPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFJlYWN0IEZsYXJlIGV2ZW50IHN5c3RlbSBhbmQgZXZlbnQgY29tcG9uZW50cyBzdXBwb3J0LlxuXG52YXIgZW5hYmxlRmxhcmVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIEhvc3QgQ29tcG9uZW50IHN1cHBvcnQuXG5cbnZhciBlbmFibGVGdW5kYW1lbnRhbEFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgU2NvcGUgc3VwcG9ydC5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIE5ldyBBUEkgZm9yIEpTWCB0cmFuc2Zvcm1zIHRvIHRhcmdldCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8xMDdcblxuIC8vIFdlIHdpbGwgZW5mb3JjZSBtb2NraW5nIHNjaGVkdWxlciB3aXRoIHNjaGVkdWxlci91bnN0YWJsZV9tb2NrIGF0IHNvbWUgcG9pbnQuICh2MTc/KVxuLy8gVGlsbCB0aGVuLCB3ZSB3YXJuIGFib3V0IHRoZSBtaXNzaW5nIG1vY2ssIGJ1dCBzdGlsbCBmYWxsYmFjayB0byBhIGxlZ2FjeSBtb2RlIGNvbXBhdGlibGUgdmVyc2lvblxuXG52YXIgd2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSBmYWxzZTsgLy8gRm9yIHRlc3RzLCB3ZSBmbHVzaCBzdXNwZW5zZSBmYWxsYmFja3MgaW4gYW4gYWN0IHNjb3BlO1xuLy8gKmV4Y2VwdCogaW4gc29tZSBvZiBvdXIgb3duIHRlc3RzLCB3aGVyZSB3ZSB0ZXN0IGluY3JlbWVudGFsIGxvYWRpbmcgc3RhdGVzLlxuXG52YXIgZmx1c2hTdXNwZW5zZUZhbGxiYWNrc0luVGVzdHMgPSB0cnVlOyAvLyBBZGQgYSBjYWxsYmFjayBwcm9wZXJ0eSB0byBzdXNwZW5zZSB0byBub3RpZnkgd2hpY2ggcHJvbWlzZXMgYXJlIGN1cnJlbnRseVxuLy8gaW4gdGhlIHVwZGF0ZSBxdWV1ZS4gVGhpcyBhbGxvd3MgcmVwb3J0aW5nIGFuZCB0cmFjaW5nIG9mIHdoYXQgaXMgY2F1c2luZ1xuLy8gdGhlIHVzZXIgdG8gc2VlIGEgbG9hZGluZyBzdGF0ZS5cbi8vIEFsc28gYWxsb3dzIGh5ZHJhdGlvbiBjYWxsYmFja3MgdG8gZmlyZSB3aGVuIGEgZGVoeWRyYXRlZCBib3VuZGFyeSBnZXRzXG4vLyBoeWRyYXRlZCBvciBkZWxldGVkLlxuXG52YXIgZW5hYmxlU3VzcGVuc2VDYWxsYmFjayA9IGZhbHNlOyAvLyBQYXJ0IG9mIHRoZSBzaW1wbGlmaWNhdGlvbiBvZiBSZWFjdC5jcmVhdGVFbGVtZW50IHNvIHdlIGNhbiBldmVudHVhbGx5IG1vdmVcbi8vIGZyb20gUmVhY3QuY3JlYXRlRWxlbWVudCB0byBSZWFjdC5qc3hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvYmxvYi9jcmVhdGVsZW1lbnQtcmZjL3RleHQvMDAwMC1jcmVhdGUtZWxlbWVudC1jaGFuZ2VzLm1kXG5cbnZhciB3YXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50cyA9IGZhbHNlO1xudmFyIHdhcm5BYm91dFN0cmluZ1JlZnMgPSBmYWxzZTtcbnZhciBkaXNhYmxlTGVnYWN5Q29udGV4dCA9IGZhbHNlO1xudmFyIGRpc2FibGVTY2hlZHVsZXJUaW1lb3V0QmFzZWRPblJlYWN0RXhwaXJhdGlvblRpbWUgPSBmYWxzZTtcbnZhciBlbmFibGVUcnVzdGVkVHlwZXNJbnRlZ3JhdGlvbiA9IGZhbHNlOyAvLyBGbGFnIHRvIHR1cm4gZXZlbnQudGFyZ2V0IGFuZCBldmVudC5jdXJyZW50VGFyZ2V0IGluIFJlYWN0TmF0aXZlIGZyb20gYSByZWFjdFRhZyB0byBhIGNvbXBvbmVudCBpbnN0YW5jZVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYiwgYykge1xuICByZXR1cm4gZm4oYSwgYiwgYyk7XG59O1xuXG52YXIgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IGJhdGNoZWRVcGRhdGVzSW1wbDtcbnZhciBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xudmFyIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYSwgYik7XG4gIH1cblxuICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbChmbiwgYSwgYik7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59IC8vIFRoaXMgaXMgZm9yIHRoZSBSZWFjdCBGbGFyZSBldmVudCBzeXN0ZW1cblxuZnVuY3Rpb24gZXhlY3V0ZVVzZXJFdmVudEhhbmRsZXIoZm4sIHZhbHVlKSB7XG4gIHZhciBwcmV2aW91c2x5SW5FdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcblxuICB0cnkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgPyB2YWx1ZS50eXBlIDogJyc7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGZuLCB1bmRlZmluZWQsIHZhbHVlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHByZXZpb3VzbHlJbkV2ZW50SGFuZGxlcjtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG52YXIgbGFzdEZsdXNoZWRFdmVudFRpbWVTdGFtcCA9IDA7XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICAvLyBldmVudC50aW1lU3RhbXAgaXNuJ3Qgb3Zlcmx5IHJlbGlhYmxlIGR1ZSB0byBpbmNvbnNpc3RlbmNpZXMgaW5cbiAgLy8gaG93IGRpZmZlcmVudCBicm93c2VycyBoYXZlIGhpc3RvcmljYWxseSBwcm92aWRlZCB0aGUgdGltZSBzdGFtcC5cbiAgLy8gU29tZSBicm93c2VycyBwcm92aWRlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyBmb3IgYWxsIGV2ZW50cyxcbiAgLy8gc29tZSBwcm92aWRlIGxvdy1yZXNvbHV0aW9uIHRpbWUgc3RhbXBzIGZvciBhbGwgZXZlbnRzLiBGRiA8IDUyXG4gIC8vIGV2ZW4gbWl4ZXMgYm90aCB0aW1lIHN0YW1wcyB0b2dldGhlci4gU29tZSBicm93c2VycyBldmVuIHJlcG9ydFxuICAvLyBuZWdhdGl2ZSB0aW1lIHN0YW1wcyBvciB0aW1lIHN0YW1wcyB0aGF0IGFyZSAwIChpT1M5KSBpbiBzb21lIGNhc2VzLlxuICAvLyBHaXZlbiB3ZSBhcmUgb25seSBjb21wYXJpbmcgdHdvIHRpbWUgc3RhbXBzIHdpdGggZXF1YWxpdHkgKCE9PSksXG4gIC8vIHdlIGFyZSBzYWZlIGZyb20gdGhlIHJlc29sdXRpb24gZGlmZmVyZW5jZXMuIElmIHRoZSB0aW1lIHN0YW1wIGlzIDBcbiAgLy8gd2UgYmFpbC1vdXQgb2YgcHJldmVudGluZyB0aGUgZmx1c2gsIHdoaWNoIGNhbiBhZmZlY3Qgc2VtYW50aWNzLFxuICAvLyBzdWNoIGFzIGlmIGFuIGVhcmxpZXIgZmx1c2ggcmVtb3ZlcyBvciBhZGRzIGV2ZW50IGxpc3RlbmVycyB0aGF0XG4gIC8vIGFyZSBmaXJlZCBpbiB0aGUgc3Vic2VxdWVudCBmbHVzaC4gSG93ZXZlciwgdGhpcyBpcyB0aGUgc2FtZVxuICAvLyBiZWhhdmlvdXIgYXMgd2UgaGFkIGJlZm9yZSB0aGlzIGNoYW5nZSwgc28gdGhlIHJpc2tzIGFyZSBsb3cuXG4gIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIgJiYgKCFlbmFibGVGbGFyZUFQSSB8fCB0aW1lU3RhbXAgPT09IDAgfHwgbGFzdEZsdXNoZWRFdmVudFRpbWVTdGFtcCAhPT0gdGltZVN0YW1wKSkge1xuICAgIGxhc3RGbHVzaGVkRXZlbnRUaW1lU3RhbXAgPSB0aW1lU3RhbXA7XG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oX2JhdGNoZWRVcGRhdGVzSW1wbCwgX2Rpc2NyZXRlVXBkYXRlc0ltcGwsIF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwsIF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCkge1xuICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2Rpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsO1xufVxuXG52YXIgRGlzY3JldGVFdmVudCA9IDA7XG52YXIgVXNlckJsb2NraW5nRXZlbnQgPSAxO1xudmFyIENvbnRpbnVvdXNFdmVudCA9IDI7XG5cbi8vIENvbW1vbkpTIGludGVyb3AgbmFtZWQgaW1wb3J0cy5cblxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xudmFyIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG52YXIgbGlzdGVuVG9SZXNwb25kZXJFdmVudFR5cGVzSW1wbDtcbmZ1bmN0aW9uIHNldExpc3RlblRvUmVzcG9uZGVyRXZlbnRUeXBlcyhfbGlzdGVuVG9SZXNwb25kZXJFdmVudFR5cGVzSW1wbCkge1xuICBsaXN0ZW5Ub1Jlc3BvbmRlckV2ZW50VHlwZXNJbXBsID0gX2xpc3RlblRvUmVzcG9uZGVyRXZlbnRUeXBlc0ltcGw7XG59XG52YXIgcm9vdEV2ZW50VHlwZXNUb0V2ZW50UmVzcG9uZGVySW5zdGFuY2VzID0gbmV3IE1hcCgpO1xudmFyIERvTm90UHJvcGFnYXRlVG9OZXh0UmVzcG9uZGVyID0gMDtcbnZhciBQcm9wYWdhdGVUb05leHRSZXNwb25kZXIgPSAxO1xudmFyIGN1cnJlbnRUaW1lU3RhbXAgPSAwO1xudmFyIGN1cnJlbnRJbnN0YW5jZSA9IG51bGw7XG52YXIgY3VycmVudERvY3VtZW50ID0gbnVsbDtcbnZhciBjdXJyZW50UHJvcGFnYXRpb25CZWhhdmlvciA9IERvTm90UHJvcGFnYXRlVG9OZXh0UmVzcG9uZGVyO1xudmFyIGV2ZW50UmVzcG9uZGVyQ29udGV4dCA9IHtcbiAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKGV2ZW50VmFsdWUsIGV2ZW50TGlzdGVuZXIsIGV2ZW50UHJpb3JpdHkpIHtcbiAgICB2YWxpZGF0ZVJlc3BvbmRlckNvbnRleHQoKTtcbiAgICB2YWxpZGF0ZUV2ZW50VmFsdWUoZXZlbnRWYWx1ZSk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICAgIGNhc2UgRGlzY3JldGVFdmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQoY3VycmVudFRpbWVTdGFtcCk7XG4gICAgICAgICAgZGlzY3JldGVVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBleGVjdXRlVXNlckV2ZW50SGFuZGxlcihldmVudExpc3RlbmVyLCBldmVudFZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgICB7XG4gICAgICAgICAgcnVuV2l0aFByaW9yaXR5KFVzZXJCbG9ja2luZ1ByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhlY3V0ZVVzZXJFdmVudEhhbmRsZXIoZXZlbnRMaXN0ZW5lciwgZXZlbnRWYWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBleGVjdXRlVXNlckV2ZW50SGFuZGxlcihldmVudExpc3RlbmVyLCBldmVudFZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNUYXJnZXRXaXRoaW5SZXNwb25kZXI6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB2YWxpZGF0ZVJlc3BvbmRlckNvbnRleHQoKTtcblxuICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgdmFyIGZpYmVyID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcbiAgICAgIHZhciByZXNwb25kZXJGaWJlciA9IGN1cnJlbnRJbnN0YW5jZS5maWJlcjtcblxuICAgICAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChmaWJlciA9PT0gcmVzcG9uZGVyRmliZXIgfHwgZmliZXIuYWx0ZXJuYXRlID09PSByZXNwb25kZXJGaWJlcikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc1RhcmdldFdpdGhpblJlc3BvbmRlclNjb3BlOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdmFsaWRhdGVSZXNwb25kZXJDb250ZXh0KCk7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgIHZhciByZXNwb25kZXIgPSBjb21wb25lbnRJbnN0YW5jZS5yZXNwb25kZXI7XG5cbiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgIHZhciBmaWJlciA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG4gICAgICB2YXIgcmVzcG9uZGVyRmliZXIgPSBjdXJyZW50SW5zdGFuY2UuZmliZXI7XG5cbiAgICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZmliZXIgPT09IHJlc3BvbmRlckZpYmVyIHx8IGZpYmVyLmFsdGVybmF0ZSA9PT0gcmVzcG9uZGVyRmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb2VzRmliZXJIYXZlUmVzcG9uZGVyKGZpYmVyLCByZXNwb25kZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc1RhcmdldFdpdGhpbk5vZGU6IGZ1bmN0aW9uIChjaGlsZFRhcmdldCwgcGFyZW50VGFyZ2V0KSB7XG4gICAgdmFsaWRhdGVSZXNwb25kZXJDb250ZXh0KCk7XG4gICAgdmFyIGNoaWxkRmliZXIgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjaGlsZFRhcmdldCk7XG4gICAgdmFyIHBhcmVudEZpYmVyID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocGFyZW50VGFyZ2V0KTtcblxuICAgIGlmIChjaGlsZEZpYmVyICE9IG51bGwgJiYgcGFyZW50RmliZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIHBhcmVudEFsdGVybmF0ZUZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuICAgICAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuXG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50QWx0ZXJuYXRlRmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gRmFsbGJhY2sgdG8gRE9NIEFQSXNcblxuXG4gICAgcmV0dXJuIHBhcmVudFRhcmdldC5jb250YWlucyhjaGlsZFRhcmdldCk7XG4gIH0sXG4gIGFkZFJvb3RFdmVudFR5cGVzOiBmdW5jdGlvbiAocm9vdEV2ZW50VHlwZXMpIHtcbiAgICB2YWxpZGF0ZVJlc3BvbmRlckNvbnRleHQoKTtcbiAgICBsaXN0ZW5Ub1Jlc3BvbmRlckV2ZW50VHlwZXNJbXBsKHJvb3RFdmVudFR5cGVzLCBjdXJyZW50RG9jdW1lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvb3RFdmVudFR5cGUgPSByb290RXZlbnRUeXBlc1tpXTtcbiAgICAgIHZhciBldmVudFJlc3BvbmRlckluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgcmVnaXN0ZXJSb290RXZlbnRUeXBlKHJvb3RFdmVudFR5cGUsIGV2ZW50UmVzcG9uZGVySW5zdGFuY2UpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlUm9vdEV2ZW50VHlwZXM6IGZ1bmN0aW9uIChyb290RXZlbnRUeXBlcykge1xuICAgIHZhbGlkYXRlUmVzcG9uZGVyQ29udGV4dCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvb3RFdmVudFR5cGUgPSByb290RXZlbnRUeXBlc1tpXTtcbiAgICAgIHZhciByb290RXZlbnRSZXNwb25kZXJzID0gcm9vdEV2ZW50VHlwZXNUb0V2ZW50UmVzcG9uZGVySW5zdGFuY2VzLmdldChyb290RXZlbnRUeXBlKTtcbiAgICAgIHZhciByb290RXZlbnRUeXBlc1NldCA9IGN1cnJlbnRJbnN0YW5jZS5yb290RXZlbnRUeXBlcztcblxuICAgICAgaWYgKHJvb3RFdmVudFR5cGVzU2V0ICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFdmVudFR5cGVzU2V0LmRlbGV0ZShyb290RXZlbnRUeXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvb3RFdmVudFJlc3BvbmRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb290RXZlbnRSZXNwb25kZXJzLmRlbGV0ZShjdXJyZW50SW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZ2V0QWN0aXZlRG9jdW1lbnQ6IGdldEFjdGl2ZURvY3VtZW50LFxuICBvYmplY3RBc3NpZ246IF9hc3NpZ24sXG4gIGdldFRpbWVTdGFtcDogZnVuY3Rpb24gKCkge1xuICAgIHZhbGlkYXRlUmVzcG9uZGVyQ29udGV4dCgpO1xuICAgIHJldHVybiBjdXJyZW50VGltZVN0YW1wO1xuICB9LFxuICBpc1RhcmdldFdpdGhpbkhvc3RDb21wb25lbnQ6IGZ1bmN0aW9uICh0YXJnZXQsIGVsZW1lbnRUeXBlKSB7XG4gICAgdmFsaWRhdGVSZXNwb25kZXJDb250ZXh0KCk7XG4gICAgdmFyIGZpYmVyID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcblxuICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBmaWJlci50eXBlID09PSBlbGVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjb250aW51ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgY3VycmVudFByb3BhZ2F0aW9uQmVoYXZpb3IgPSBQcm9wYWdhdGVUb05leHRSZXNwb25kZXI7XG4gIH0sXG4gIGVucXVldWVTdGF0ZVJlc3RvcmU6IGVucXVldWVTdGF0ZVJlc3RvcmUsXG4gIGdldFJlc3BvbmRlck5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YWxpZGF0ZVJlc3BvbmRlckNvbnRleHQoKTtcbiAgICB2YXIgcmVzcG9uZGVyRmliZXIgPSBjdXJyZW50SW5zdGFuY2UuZmliZXI7XG5cbiAgICBpZiAocmVzcG9uZGVyRmliZXIudGFnID09PSBTY29wZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbmRlckZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVFdmVudFZhbHVlKGV2ZW50VmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBldmVudFZhbHVlID09PSAnb2JqZWN0JyAmJiBldmVudFZhbHVlICE9PSBudWxsKSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50VmFsdWUudGFyZ2V0LFxuICAgICAgICB0eXBlID0gZXZlbnRWYWx1ZS50eXBlLFxuICAgICAgICB0aW1lU3RhbXAgPSBldmVudFZhbHVlLnRpbWVTdGFtcDtcblxuICAgIGlmICh0YXJnZXQgPT0gbnVsbCB8fCB0eXBlID09IG51bGwgfHwgdGltZVN0YW1wID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29udGV4dC5kaXNwYXRjaEV2ZW50OiBcInRhcmdldFwiLCBcInRpbWVTdGFtcFwiLCBhbmQgXCJ0eXBlXCIgZmllbGRzIG9uIGV2ZW50IG9iamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIHNob3dXYXJuaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnJXMgaXMgbm90IGF2YWlsYWJsZSBvbiBldmVudCBvYmplY3RzIGNyZWF0ZWQgZnJvbSBldmVudCByZXNwb25kZXIgbW9kdWxlcyAoUmVhY3QgRmxhcmUpLiAnICsgJ1RyeSB3cmFwcGluZyBpbiBhIGNvbmRpdGlvbmFsLCBpLmUuIGBpZiAoZXZlbnQudHlwZSAhPT0gXCJwcmVzc1wiKSB7IGV2ZW50LiVzIH1gJywgbmFtZSwgbmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGV2ZW50VmFsdWUuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICBzaG93V2FybmluZygnaXNEZWZhdWx0UHJldmVudGVkKCknKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZXZlbnRWYWx1ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHtcbiAgICAgICAgc2hvd1dhcm5pbmcoJ2lzUHJvcGFnYXRpb25TdG9wcGVkKCknKTtcbiAgICAgIH1cbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiB3ZSBkb24ndCBuZWVkIHZhbHVlLCBGbG93IHRoaW5rcyB3ZSBkb1xuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnRWYWx1ZSwgJ25hdGl2ZUV2ZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBzaG93V2FybmluZygnbmF0aXZlRXZlbnQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvZXNGaWJlckhhdmVSZXNwb25kZXIoZmliZXIsIHJlc3BvbmRlcikge1xuICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBTY29wZUNvbXBvbmVudCkge1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcmVzcG9uZGVyc01hcCA9IGRlcGVuZGVuY2llcy5yZXNwb25kZXJzO1xuXG4gICAgICBpZiAocmVzcG9uZGVyc01hcCAhPT0gbnVsbCAmJiByZXNwb25kZXJzTWFwLmhhcyhyZXNwb25kZXIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRG9jdW1lbnQoKSB7XG4gIHJldHVybiBjdXJyZW50RG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURPTVJlc3BvbmRlckV2ZW50KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBwYXNzaXZlLCBwYXNzaXZlU3VwcG9ydGVkKSB7XG4gIHZhciBfcmVmID0gbmF0aXZlRXZlbnQsXG4gICAgICBidXR0b25zID0gX3JlZi5idXR0b25zLFxuICAgICAgcG9pbnRlclR5cGUgPSBfcmVmLnBvaW50ZXJUeXBlO1xuICB2YXIgZXZlbnRQb2ludGVyVHlwZSA9ICcnO1xuXG4gIGlmIChwb2ludGVyVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRQb2ludGVyVHlwZSA9IHBvaW50ZXJUeXBlO1xuICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRQb2ludGVyVHlwZSA9ICdrZXlib2FyZCc7XG4gIH0gZWxzZSBpZiAoYnV0dG9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRQb2ludGVyVHlwZSA9ICdtb3VzZSc7XG4gIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQuY2hhbmdlZFRvdWNoZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50UG9pbnRlclR5cGUgPSAndG91Y2gnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZSxcbiAgICBwYXNzaXZlU3VwcG9ydGVkOiBwYXNzaXZlU3VwcG9ydGVkLFxuICAgIHBvaW50ZXJUeXBlOiBldmVudFBvaW50ZXJUeXBlLFxuICAgIHRhcmdldDogbmF0aXZlRXZlbnRUYXJnZXQsXG4gICAgdHlwZTogdG9wTGV2ZWxUeXBlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc3BvbmRlckV2ZW50VHlwZXNDb250YWluVHlwZShldmVudFR5cGVzLCB0eXBlKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBldmVudFR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV2ZW50VHlwZXNbaV0gPT09IHR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25kZXJUYXJnZXRFdmVudFR5cGVzKGV2ZW50VHlwZSwgcmVzcG9uZGVyKSB7XG4gIHZhciB0YXJnZXRFdmVudFR5cGVzID0gcmVzcG9uZGVyLnRhcmdldEV2ZW50VHlwZXM7IC8vIFZhbGlkYXRlIHRoZSB0YXJnZXQgZXZlbnQgdHlwZSBleGlzdHMgb24gdGhlIHJlc3BvbmRlclxuXG4gIGlmICh0YXJnZXRFdmVudFR5cGVzICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3BvbmRlckV2ZW50VHlwZXNDb250YWluVHlwZSh0YXJnZXRFdmVudFR5cGVzLCBldmVudFR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0cmF2ZXJzZUFuZEhhbmRsZUV2ZW50UmVzcG9uZGVySW5zdGFuY2VzKHRvcExldmVsVHlwZSwgdGFyZ2V0RmliZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaXNQYXNzaXZlRXZlbnQgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1BBU1NJVkUpICE9PSAwO1xuICB2YXIgaXNQYXNzaXZlU3VwcG9ydGVkID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBQQVNTSVZFX05PVF9TVVBQT1JURUQpID09PSAwO1xuICB2YXIgaXNQYXNzaXZlID0gaXNQYXNzaXZlRXZlbnQgfHwgIWlzUGFzc2l2ZVN1cHBvcnRlZDtcbiAgdmFyIGV2ZW50VHlwZSA9IGlzUGFzc2l2ZSA/IHRvcExldmVsVHlwZSA6IHRvcExldmVsVHlwZSArICdfYWN0aXZlJzsgLy8gVHJpZ2dlciBldmVudCByZXNwb25kZXJzIGluIHRoaXMgb3JkZXI6XG4gIC8vIC0gQnViYmxlIHRhcmdldCByZXNwb25kZXIgcGhhc2VcbiAgLy8gLSBSb290IHJlc3BvbmRlciBwaGFzZVxuXG4gIHZhciB2aXNpdGVkUmVzcG9uZGVycyA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3BvbmRlckV2ZW50ID0gY3JlYXRlRE9NUmVzcG9uZGVyRXZlbnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGlzUGFzc2l2ZUV2ZW50LCBpc1Bhc3NpdmVTdXBwb3J0ZWQpO1xuICB2YXIgbm9kZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgaW5zaWRlUG9ydGFsID0gZmFsc2U7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgX25vZGUgPSBub2RlLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSBfbm9kZS5kZXBlbmRlbmNpZXMsXG4gICAgICAgIHRhZyA9IF9ub2RlLnRhZztcblxuICAgIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGluc2lkZVBvcnRhbCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICgodGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gU2NvcGVDb21wb25lbnQpICYmIGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHJlc3BvbmRlcnNNYXAgPSBkZXBlbmRlbmNpZXMucmVzcG9uZGVycztcblxuICAgICAgaWYgKHJlc3BvbmRlcnNNYXAgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHJlc3BvbmRlckluc3RhbmNlcyA9IEFycmF5LmZyb20ocmVzcG9uZGVyc01hcC52YWx1ZXMoKSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3BvbmRlckluc3RhbmNlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByZXNwb25kZXJJbnN0YW5jZSA9IHJlc3BvbmRlckluc3RhbmNlc1tpXTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSByZXNwb25kZXJJbnN0YW5jZS5wcm9wcyxcbiAgICAgICAgICAgICAgcmVzcG9uZGVyID0gcmVzcG9uZGVySW5zdGFuY2UucmVzcG9uZGVyLFxuICAgICAgICAgICAgICBzdGF0ZSA9IHJlc3BvbmRlckluc3RhbmNlLnN0YXRlO1xuXG4gICAgICAgICAgaWYgKCF2aXNpdGVkUmVzcG9uZGVycy5oYXMocmVzcG9uZGVyKSAmJiB2YWxpZGF0ZVJlc3BvbmRlclRhcmdldEV2ZW50VHlwZXMoZXZlbnRUeXBlLCByZXNwb25kZXIpICYmICghaW5zaWRlUG9ydGFsIHx8IHJlc3BvbmRlci50YXJnZXRQb3J0YWxQcm9wYWdhdGlvbikpIHtcbiAgICAgICAgICAgIHZpc2l0ZWRSZXNwb25kZXJzLmFkZChyZXNwb25kZXIpO1xuICAgICAgICAgICAgdmFyIG9uRXZlbnQgPSByZXNwb25kZXIub25FdmVudDtcblxuICAgICAgICAgICAgaWYgKG9uRXZlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY3VycmVudEluc3RhbmNlID0gcmVzcG9uZGVySW5zdGFuY2U7XG4gICAgICAgICAgICAgIG9uRXZlbnQocmVzcG9uZGVyRXZlbnQsIGV2ZW50UmVzcG9uZGVyQ29udGV4dCwgcHJvcHMsIHN0YXRlKTtcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudFByb3BhZ2F0aW9uQmVoYXZpb3IgPT09IFByb3BhZ2F0ZVRvTmV4dFJlc3BvbmRlcikge1xuICAgICAgICAgICAgICAgIHZpc2l0ZWRSZXNwb25kZXJzLmRlbGV0ZShyZXNwb25kZXIpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wYWdhdGlvbkJlaGF2aW9yID0gRG9Ob3RQcm9wYWdhdGVUb05leHRSZXNwb25kZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH0gLy8gUm9vdCBwaGFzZVxuXG5cbiAgdmFyIHJvb3RFdmVudFJlc3BvbmRlckluc3RhbmNlcyA9IHJvb3RFdmVudFR5cGVzVG9FdmVudFJlc3BvbmRlckluc3RhbmNlcy5nZXQoZXZlbnRUeXBlKTtcblxuICBpZiAocm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgX3Jlc3BvbmRlckluc3RhbmNlcyA9IEFycmF5LmZyb20ocm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBfcmVzcG9uZGVySW5zdGFuY2VzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9yZXNwb25kZXJJbnN0YW5jZSA9IF9yZXNwb25kZXJJbnN0YW5jZXNbX2ldO1xuICAgICAgdmFyIHByb3BzID0gX3Jlc3BvbmRlckluc3RhbmNlLnByb3BzLFxuICAgICAgICAgIHJlc3BvbmRlciA9IF9yZXNwb25kZXJJbnN0YW5jZS5yZXNwb25kZXIsXG4gICAgICAgICAgc3RhdGUgPSBfcmVzcG9uZGVySW5zdGFuY2Uuc3RhdGU7XG4gICAgICB2YXIgb25Sb290RXZlbnQgPSByZXNwb25kZXIub25Sb290RXZlbnQ7XG5cbiAgICAgIGlmIChvblJvb3RFdmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50SW5zdGFuY2UgPSBfcmVzcG9uZGVySW5zdGFuY2U7XG4gICAgICAgIG9uUm9vdEV2ZW50KHJlc3BvbmRlckV2ZW50LCBldmVudFJlc3BvbmRlckNvbnRleHQsIHByb3BzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50RXZlbnRSZXNwb25kZXIocmVzcG9uZGVyLCByZXNwb25kZXJJbnN0YW5jZSwgcHJvcHMsIHN0YXRlKSB7XG4gIHZhciBvbk1vdW50ID0gcmVzcG9uZGVyLm9uTW91bnQ7XG5cbiAgaWYgKG9uTW91bnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldmlvdXNJbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICBjdXJyZW50SW5zdGFuY2UgPSByZXNwb25kZXJJbnN0YW5jZTtcblxuICAgIHRyeSB7XG4gICAgICBiYXRjaGVkRXZlbnRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25Nb3VudChldmVudFJlc3BvbmRlckNvbnRleHQsIHByb3BzLCBzdGF0ZSk7XG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudEluc3RhbmNlID0gcHJldmlvdXNJbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVubW91bnRFdmVudFJlc3BvbmRlcihyZXNwb25kZXJJbnN0YW5jZSkge1xuICB2YXIgcmVzcG9uZGVyID0gcmVzcG9uZGVySW5zdGFuY2UucmVzcG9uZGVyO1xuICB2YXIgb25Vbm1vdW50ID0gcmVzcG9uZGVyLm9uVW5tb3VudDtcblxuICBpZiAob25Vbm1vdW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByb3BzID0gcmVzcG9uZGVySW5zdGFuY2UucHJvcHMsXG4gICAgICAgIHN0YXRlID0gcmVzcG9uZGVySW5zdGFuY2Uuc3RhdGU7XG4gICAgdmFyIHByZXZpb3VzSW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgY3VycmVudEluc3RhbmNlID0gcmVzcG9uZGVySW5zdGFuY2U7XG5cbiAgICB0cnkge1xuICAgICAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uVW5tb3VudChldmVudFJlc3BvbmRlckNvbnRleHQsIHByb3BzLCBzdGF0ZSk7XG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudEluc3RhbmNlID0gcHJldmlvdXNJbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdEV2ZW50VHlwZXNTZXQgPSByZXNwb25kZXJJbnN0YW5jZS5yb290RXZlbnRUeXBlcztcblxuICBpZiAocm9vdEV2ZW50VHlwZXNTZXQgIT09IG51bGwpIHtcbiAgICB2YXIgcm9vdEV2ZW50VHlwZXMgPSBBcnJheS5mcm9tKHJvb3RFdmVudFR5cGVzU2V0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdEV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b3BMZXZlbEV2ZW50VHlwZSA9IHJvb3RFdmVudFR5cGVzW2ldO1xuICAgICAgdmFyIHJvb3RFdmVudFJlc3BvbmRlckluc3RhbmNlcyA9IHJvb3RFdmVudFR5cGVzVG9FdmVudFJlc3BvbmRlckluc3RhbmNlcy5nZXQodG9wTGV2ZWxFdmVudFR5cGUpO1xuXG4gICAgICBpZiAocm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzLmRlbGV0ZShyZXNwb25kZXJJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVzcG9uZGVyQ29udGV4dCgpIHtcbiAgaWYgKCEoY3VycmVudEluc3RhbmNlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiQW4gZXZlbnQgcmVzcG9uZGVyIGNvbnRleHQgd2FzIHVzZWQgb3V0c2lkZSBvZiBhbiBldmVudCBjeWNsZS5cIik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JSZXNwb25kZXJFdmVudFN5c3RlbSh0b3BMZXZlbFR5cGUsIHRhcmdldEZpYmVyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgdmFyIHByZXZpb3VzSW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgdmFyIHByZXZpb3VzVGltZVN0YW1wID0gY3VycmVudFRpbWVTdGFtcDtcbiAgICB2YXIgcHJldmlvdXNEb2N1bWVudCA9IGN1cnJlbnREb2N1bWVudDtcbiAgICB2YXIgcHJldmlvdXNQcm9wYWdhdGlvbkJlaGF2aW9yID0gY3VycmVudFByb3BhZ2F0aW9uQmVoYXZpb3I7XG4gICAgY3VycmVudFByb3BhZ2F0aW9uQmVoYXZpb3IgPSBEb05vdFByb3BhZ2F0ZVRvTmV4dFJlc3BvbmRlcjsgLy8gbm9kZVR5cGUgOSBpcyBET0NVTUVOVF9OT0RFXG5cbiAgICBjdXJyZW50RG9jdW1lbnQgPSBuYXRpdmVFdmVudFRhcmdldC5ub2RlVHlwZSA9PT0gOSA/IG5hdGl2ZUV2ZW50VGFyZ2V0IDogbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDsgLy8gV2UgbWlnaHQgd2FudCB0byBjb250cm9sIHRpbWVTdGFtcCBhbm90aGVyIHdheSBoZXJlXG5cbiAgICBjdXJyZW50VGltZVN0YW1wID0gbmF0aXZlRXZlbnQudGltZVN0YW1wO1xuXG4gICAgdHJ5IHtcbiAgICAgIGJhdGNoZWRFdmVudFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICB0cmF2ZXJzZUFuZEhhbmRsZUV2ZW50UmVzcG9uZGVySW5zdGFuY2VzKHRvcExldmVsVHlwZSwgdGFyZ2V0RmliZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudEluc3RhbmNlID0gcHJldmlvdXNJbnN0YW5jZTtcbiAgICAgIGN1cnJlbnRUaW1lU3RhbXAgPSBwcmV2aW91c1RpbWVTdGFtcDtcbiAgICAgIGN1cnJlbnREb2N1bWVudCA9IHByZXZpb3VzRG9jdW1lbnQ7XG4gICAgICBjdXJyZW50UHJvcGFnYXRpb25CZWhhdmlvciA9IHByZXZpb3VzUHJvcGFnYXRpb25CZWhhdmlvcjtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFkZFJvb3RFdmVudFR5cGVzRm9yUmVzcG9uZGVySW5zdGFuY2UocmVzcG9uZGVySW5zdGFuY2UsIHJvb3RFdmVudFR5cGVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdEV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcm9vdEV2ZW50VHlwZSA9IHJvb3RFdmVudFR5cGVzW2ldO1xuICAgIHJlZ2lzdGVyUm9vdEV2ZW50VHlwZShyb290RXZlbnRUeXBlLCByZXNwb25kZXJJbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJSb290RXZlbnRUeXBlKHJvb3RFdmVudFR5cGUsIGV2ZW50UmVzcG9uZGVySW5zdGFuY2UpIHtcbiAgdmFyIHJvb3RFdmVudFJlc3BvbmRlckluc3RhbmNlcyA9IHJvb3RFdmVudFR5cGVzVG9FdmVudFJlc3BvbmRlckluc3RhbmNlcy5nZXQocm9vdEV2ZW50VHlwZSk7XG5cbiAgaWYgKHJvb3RFdmVudFJlc3BvbmRlckluc3RhbmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHJvb3RFdmVudFR5cGVzVG9FdmVudFJlc3BvbmRlckluc3RhbmNlcy5zZXQocm9vdEV2ZW50VHlwZSwgcm9vdEV2ZW50UmVzcG9uZGVySW5zdGFuY2VzKTtcbiAgfVxuXG4gIHZhciByb290RXZlbnRUeXBlc1NldCA9IGV2ZW50UmVzcG9uZGVySW5zdGFuY2Uucm9vdEV2ZW50VHlwZXM7XG5cbiAgaWYgKHJvb3RFdmVudFR5cGVzU2V0ID09PSBudWxsKSB7XG4gICAgcm9vdEV2ZW50VHlwZXNTZXQgPSBldmVudFJlc3BvbmRlckluc3RhbmNlLnJvb3RFdmVudFR5cGVzID0gbmV3IFNldCgpO1xuICB9XG5cbiAgaWYgKCEhcm9vdEV2ZW50VHlwZXNTZXQuaGFzKHJvb3RFdmVudFR5cGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJhZGRSb290RXZlbnRUeXBlcygpIGZvdW5kIGEgZHVwbGljYXRlIHJvb3QgZXZlbnQgdHlwZSBvZiBcXFwiXCIgKyByb290RXZlbnRUeXBlICsgXCJcXFwiLiBUaGlzIG1pZ2h0IGJlIGJlY2F1c2UgdGhlIGV2ZW50IHR5cGUgZXhpc3RzIGluIHRoZSBldmVudCByZXNwb25kZXIgXFxcInJvb3RFdmVudFR5cGVzXFxcIiBhcnJheSBvciBiZWNhdXNlIG9mIGEgcHJldmlvdXMgYWRkUm9vdEV2ZW50VHlwZXMoKSB1c2luZyB0aGlzIHJvb3QgZXZlbnQgdHlwZS5cIik7XG4gICAgfVxuICB9XG5cbiAgcm9vdEV2ZW50VHlwZXNTZXQuYWRkKHJvb3RFdmVudFR5cGUpO1xuICByb290RXZlbnRSZXNwb25kZXJJbnN0YW5jZXMuYWRkKGV2ZW50UmVzcG9uZGVySW5zdGFuY2UpO1xufVxuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSB3aGl0ZWxpc3QgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcblxudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIEJPT0xFQU46XG4gICAgICAgIHJldHVybiAhdmFsdWU7XG5cbiAgICAgIGNhc2UgT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG5cbiAgICAgIGNhc2UgUE9TSVRJVkVfTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvKG5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBwcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIHR5cGUsIG11c3RVc2VQcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBzYW5pdGl6ZVVSTCkge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zYW5pdGl6ZVVSTCA9IHNhbml0aXplVVJMO1xufSAvLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoaXMgbGlzdCwgYmUgc3VyZSB0byBhbHNvIGFkZCB0aGVtIHRvXG4vLyB0aGUgYHBvc3NpYmxlU3RhbmRhcmROYW1lc2AgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdFxuLy8gbmFtZSB3YXJuaW5ncy5cblxuXG52YXIgcHJvcGVydGllcyA9IHt9OyAvLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblxuWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7IC8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuXG5bWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnY2xhc3NOYW1lJywgJ2NsYXNzJ10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZlswXSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUgPSBfcmVmWzFdO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcy5cblxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLCAvLyBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgd3JpdHRlbiB0byB0aGUgRE9NXG4vLyBvbiB0aGUgY2xpZW50IHNpZGUgYmVjYXVzZSB0aGUgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudC4gSW5zdGVhZCB3ZSBjYWxsIGZvY3VzKCkuXG4nYXV0b0ZvY3VzJywgJ2F1dG9QbGF5JywgJ2NvbnRyb2xzJywgJ2RlZmF1bHQnLCAnZGVmZXInLCAnZGlzYWJsZWQnLCAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblxuWydjYXB0dXJlJywgJ2Rvd25sb2FkJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBPVkVSTE9BREVEX0JPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbiddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7XG52YXIgQ0FNRUxJWkUgPSAvW1xcLVxcOl0oW2Etel0pL2c7XG5cbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTsgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgd2hpdGVsaXN0LlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblxuXG5bJ2FjY2VudC1oZWlnaHQnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FyYWJpYy1mb3JtJywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2NhcC1oZWlnaHQnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdkb21pbmFudC1iYXNlbGluZScsICdlbmFibGUtYmFja2dyb3VuZCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2dseXBoLW5hbWUnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdob3Jpei1hZHYteCcsICdob3Jpei1vcmlnaW4teCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnbGV0dGVyLXNwYWNpbmcnLCAnbGlnaHRpbmctY29sb3InLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFpbnQtb3JkZXInLCAncGFub3NlLTEnLCAncG9pbnRlci1ldmVudHMnLCAncmVuZGVyaW5nLWludGVudCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2Utd2lkdGgnLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtYmlkaScsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAndmVjdG9yLWVmZmVjdCcsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3b3JkLXNwYWNpbmcnLCAnd3JpdGluZy1tb2RlJywgJ3htbG5zOnhsaW5rJywgJ3gtaGVpZ2h0J10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlIGV4aXN0cyBib3RoIGluIEhUTUwgYW5kIFNWRy5cbi8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZSBpbiBTVkcgc28gd2UgY2FuJ3QganVzdCB1c2Vcbi8vIHRoZSBSZWFjdCBuYW1lIGxpa2Ugd2UgZG8gZm9yIGF0dHJpYnV0ZXMgdGhhdCBleGlzdCBvbmx5IGluIEhUTUwuXG5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUpO1xuWydzcmMnLCAnaHJlZicsICdhY3Rpb24nLCAnZm9ybUFjdGlvbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgdHJ1ZSk7XG59KTtcblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IG51bGw7XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn0gLy8gQSBqYXZhc2NyaXB0OiBVUkwgY2FuIGNvbnRhaW4gbGVhZGluZyBDMCBjb250cm9sIG9yIFxcdTAwMjAgU1BBQ0UsXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICBpZiAoZGlzYWJsZUphdmFTY3JpcHRVUkxzKSB7XG4gICAgaWYgKCEhaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdCh1cmwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLlwiICsgKFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5nZXRTdGFja0FkZGVuZHVtKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHJ1ZSAmJiAhZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICBkaWRXYXJuID0gdHJ1ZTtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgfVxufVxuXG4vLyBGbG93IGRvZXMgbm90IGFsbG93IHN0cmluZyBjb25jYXRlbmF0aW9uIG9mIG1vc3Qgbm9uLXN0cmluZyB0eXBlcy4gVG8gd29ya1xuLy8gYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgd2UgdXNlIGFuIG9wYXF1ZSB0eXBlIHRoYXQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYnlcbi8vIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggZ2V0VG9TdHJpbmdWYWx1ZSBmaXJzdC5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG4vKiogVHJ1c3RlZCB2YWx1ZSBpcyBhIHdyYXBwZXIgZm9yIFwic2FmZVwiIHZhbHVlcyB3aGljaCBjYW4gYmUgYXNzaWduZWQgdG8gRE9NIGV4ZWN1dGlvbiBzaW5rcy4gKi9cblxuLyoqXG4gKiBXZSBhbGxvdyBwYXNzaW5nIG9iamVjdHMgd2l0aCB0b1N0cmluZyBtZXRob2QgYXMgZWxlbWVudCBhdHRyaWJ1dGVzIG9yIGluIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXG4gKiBhbmQgd2UgZG8gdmFsaWRhdGlvbnMgdGhhdCB0aGUgdmFsdWUgaXMgc2FmZS4gT25jZSB3ZSBkbyB2YWxpZGF0aW9uIHdlIHdhbnQgdG8gdXNlIHRoZSB2YWxpZGF0ZWRcbiAqIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdCAoYmVjYXVzZSBvYmplY3QudG9TdHJpbmcgbWF5IHJldHVybiBzb21ldGhpbmcgZWxzZSBvbiBuZXh0IGNhbGwpLlxuICpcbiAqIElmIGFwcGxpY2F0aW9uIHVzZXMgVHJ1c3RlZCBUeXBlcyB3ZSBkb24ndCBzdHJpbmdpZnkgdHJ1c3RlZCB2YWx1ZXMsIGJ1dCBwcmVzZXJ2ZSB0aGVtIGFzIG9iamVjdHMuXG4gKi9cbnZhciB0b1N0cmluZ09yVHJ1c3RlZFR5cGUgPSB0b1N0cmluZztcblxuaWYgKGVuYWJsZVRydXN0ZWRUeXBlc0ludGVncmF0aW9uICYmIHR5cGVvZiB0cnVzdGVkVHlwZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gIHRvU3RyaW5nT3JUcnVzdGVkVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh0cnVzdGVkVHlwZXMuaXNIVE1MKHZhbHVlKSB8fCB0cnVzdGVkVHlwZXMuaXNTY3JpcHQodmFsdWUpIHx8IHRydXN0ZWRUeXBlcy5pc1NjcmlwdFVSTCh2YWx1ZSkgfHxcbiAgICAvKiBUcnVzdGVkVVJMcyBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb246IGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3RydXN0ZWQtdHlwZXMvcHVsbC8yMDQgKi9cbiAgICB0cnVzdGVkVHlwZXMuaXNVUkwgJiYgdHJ1c3RlZFR5cGVzLmlzVVJMKHZhbHVlKSkpIHtcbiAgICAgIC8vIFBhc3MgVHJ1c3RlZCBUeXBlcyB0aHJvdWdoLlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSk7XG4gIH07XG59XG5cbi8qKlxuICogU2V0IGF0dHJpYnV0ZSBmb3IgYSBub2RlLiBUaGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBlaXRoZXIgc3RyaW5nIG9yXG4gKiBUcnVzdGVkIHZhbHVlIChpZiBhcHBsaWNhdGlvbiB1c2VzIFRydXN0ZWQgVHlwZXMpLlxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUobm9kZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xufVxuLyoqXG4gKiBTZXQgYXR0cmlidXRlIHdpdGggbmFtZXNwYWNlIGZvciBhIG5vZGUuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIGVpdGhlciBzdHJpbmcgb3JcbiAqIFRydXN0ZWQgdmFsdWUgKGlmIGFwcGxpY2F0aW9uIHVzZXMgVHJ1c3RlZCBUeXBlcykuXG4gKi9cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlTlMobm9kZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSBcImV4cGVjdGVkXCIgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuXG4gKiBTb21lIHByb3BlcnRpZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvKSB7XG4gIHtcbiAgICBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWRpc2FibGVKYXZhU2NyaXB0VVJMcyAmJiBwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmdWxseSBkaXNhYmxlZCBqYXZhc2NyaXB0OiBVUkxzLCBhbmQgaWZcbiAgICAgICAgLy8gdGhlIGh5ZHJhdGlvbiBpcyBzdWNjZXNzZnVsIG9mIGEgamF2YXNjcmlwdDogVVJMLCB3ZVxuICAgICAgICAvLyBzdGlsbCB3YW50IHRvIHdhcm4gb24gdGhlIGNsaWVudC5cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmdWYWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICB7XG4gICAgaWYgKCFpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcblxuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gLy8gSWYgdGhlIHByb3AgaXNuJ3QgaW4gdGhlIHNwZWNpYWwgbGlzdCwgdHJlYXQgaXQgYXMgYSBzaW1wbGUgYXR0cmlidXRlLlxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0QXR0cmlidXRlKG5vZGUsIF9hdHRyaWJ1dGVOYW1lLCB0b1N0cmluZ09yVHJ1c3RlZFR5cGUodmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSB0b1N0cmluZ09yVHJ1c3RlZFR5cGUodmFsdWUpO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIHNldEF0dHJpYnV0ZU5TKG5vZGUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRBdHRyaWJ1dGUobm9kZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQyID0gbnVsbDtcbnZhciBSZWFjdENvbnRyb2xsZWRWYWx1ZVByb3BUeXBlcyA9IHtcbiAgY2hlY2tQcm9wVHlwZXM6IG51bGxcbn07XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgdmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gICAgYnV0dG9uOiB0cnVlLFxuICAgIGNoZWNrYm94OiB0cnVlLFxuICAgIGltYWdlOiB0cnVlLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICByYWRpbzogdHJ1ZSxcbiAgICByZXNldDogdHJ1ZSxcbiAgICBzdWJtaXQ6IHRydWVcbiAgfTtcbiAgdmFyIHByb3BUeXBlcyA9IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgaWYgKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHNbcHJvcE5hbWVdID09IG51bGwgfHwgZW5hYmxlRmxhcmVBUEkgJiYgcHJvcHMubGlzdGVuZXJzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH0sXG4gICAgY2hlY2tlZDogZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgaWYgKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzW3Byb3BOYW1lXSA9PSBudWxsIHx8IGVuYWJsZUZsYXJlQVBJICYmIHByb3BzLmxpc3RlbmVycykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUHJvdmlkZSBhIGxpbmtlZCBgdmFsdWVgIGF0dHJpYnV0ZSBmb3IgY29udHJvbGxlZCBmb3Jtcy4gWW91IHNob3VsZCBub3QgdXNlXG4gICAqIHRoaXMgb3V0c2lkZSBvZiB0aGUgUmVhY3RET00gY29udHJvbGxlZCBmb3JtIGNvbXBvbmVudHMuXG4gICAqL1xuXG4gIFJlYWN0Q29udHJvbGxlZFZhbHVlUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZnVuY3Rpb24gKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBwcm9wcywgJ3Byb3AnLCB0YWdOYW1lLCBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDIuZ2V0U3RhY2tBZGRlbmR1bSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gVE9ETzogZGlyZWN0IGltcG9ydHMgbGlrZSBzb21lLXBhY2thZ2Uvc3JjLyogYXJlIGJhZC4gRml4IG1lLlxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBSZWFjdENvbnRyb2xsZWRWYWx1ZVByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygnaW5wdXQnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgb2YgdHlwZSAlcyB0byBiZSBjb250cm9sbGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIHByb3BzLnR5cGUpO1xuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgb2YgdHlwZSAlcyB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnSW5wdXQgZWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgcHJvcHMudHlwZSk7XG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGlzYWJsZUlucHV0QXR0cmlidXRlU3luY2luZykge1xuICAgIC8vIFdoZW4gbm90IHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgUmVhY3Qgb25seSBhc3NpZ25zIGEgbmV3IHZhbHVlXG4gICAgLy8gd2hlbmV2ZXIgdGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wIGhhcyBjaGFuZ2VkLiBXaGVuIG5vdCBwcmVzZW50LFxuICAgIC8vIFJlYWN0IGRvZXMgbm90aGluZ1xuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGNvbWVzIGZyb20gYSBjYXNjYWRlIG9mXG4gICAgLy8gcHJvcGVydGllczpcbiAgICAvLyAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMy4gT3RoZXJ3aXNlIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nKSB7XG4gICAgLy8gV2hlbiBub3Qgc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIHRoZSBhdHRyaWJ1dGUgaXMgZGlyZWN0bHlcbiAgICAvLyBjb250cm9sbGFibGUgZnJvbSB0aGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5LiBJdCBuZWVkcyB0byBiZVxuICAgIC8vIHVwZGF0ZWQgYXMgbmV3IHByb3BzIGNvbWUgaW4uXG4gICAgaWYgKHByb3BzLmRlZmF1bHRDaGVja2VkID09IG51bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAocHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlcihlbGVtZW50LCBwcm9wcywgaXNIeWRyYXRpbmcpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpIHx8IHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaXNCdXR0b24gPSB0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnOyAvLyBBdm9pZCBzZXR0aW5nIHZhbHVlIGF0dHJpYnV0ZSBvbiBzdWJtaXQvcmVzZXQgaW5wdXRzIGFzIGl0IG92ZXJyaWRlcyB0aGVcbiAgICAvLyBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6ICMxMjg3MlxuXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICBpZiAoZGlzYWJsZUlucHV0QXR0cmlidXRlU3luY2luZykge1xuICAgICAgICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTsgLy8gV2hlbiBub3Qgc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgcHJvcGVydHkgcG9pbnRzXG4gICAgICAgIC8vIGRpcmVjdGx5IHRvIHRoZSBSZWFjdCBwcm9wLiBPbmx5IGFzc2lnbiBpdCBpZiBpdCBleGlzdHMuXG5cbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBBbHdheXMgYXNzaWduIG9uIGJ1dHRvbnMgc28gdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gYW5cbiAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgYnV0dG9uIHRleHQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIGRvIG5vdCByZS1hc3NpZ24gdGhlIHZhbHVlIHByb3BlcnR5IGlmIGlzIGVtcHR5LiBUaGlzXG4gICAgICAgICAgLy8gcG90ZW50aWFsbHkgYXZvaWRzIGEgRE9NIHdyaXRlIGFuZCBwcmV2ZW50cyBGaXJlZm94ICh+NjAuMC4xKSBmcm9tXG4gICAgICAgICAgLy8gcHJlbWF0dXJlbHkgbWFya2luZyByZXF1aXJlZCBpbnB1dHMgYXMgaW52YWxpZC4gRXF1YWxpdHkgaXMgY29tcGFyZWRcbiAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCB2YWx1ZSBpbiBjYXNlIHRoZSBicm93c2VyIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhblxuICAgICAgICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICBpZiAoaXNCdXR0b24gfHwgdmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVJbnB1dEF0dHJpYnV0ZVN5bmNpbmcpIHtcbiAgICAgIC8vIFdoZW4gbm90IHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGVcbiAgICAgIC8vIGRpcmVjdGx5IGZyb20gdGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eSAod2hlbiBwcmVzZW50KVxuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAgaWYgKGRpc2FibGVJbnB1dEF0dHJpYnV0ZVN5bmNpbmcpIHtcbiAgICAvLyBXaGVuIG5vdCBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgdGhlIGNoZWNrZWQgcHJvcGVydHlcbiAgICAvLyBuZXZlciBnZXRzIGFzc2lnbmVkLiBJdCBtdXN0IGJlIG1hbnVhbGx5IHNldC4gV2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGRvIHRoaXMgd2hlbiBoeWRyYXRpbmcgc28gdGhhdCBleGlzdGluZyB1c2VyIGlucHV0IGlzbid0XG4gICAgLy8gbW9kaWZpZWRcbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgICB9IC8vIE9ubHkgYXNzaWduIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSBpZiBpdCBpcyBkZWZpbmVkLiBUaGlzIHNhdmVzXG4gICAgLy8gYSBET00gd3JpdGUgd2hlbiBjb250cm9sbGluZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgaXNuJ3QgbmVlZGVkXG4gICAgLy8gKHRleHQgaW5wdXRzLCBzdWJtaXQvcmVzZXQpXG5cblxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdENoZWNrZWQnKSkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgaWYgKHByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgdmFyIHF1ZXJ5Um9vdCA9IHJvb3ROb2RlO1xuXG4gICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICB9IC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0uIEl0IG1pZ2h0IG5vdCBldmVuIGJlIGluIHRoZVxuICAgIC8vIGRvY3VtZW50LiBMZXQncyBqdXN0IHVzZSB0aGUgbG9jYWwgYHF1ZXJ5U2VsZWN0b3JBbGxgIHRvIGVuc3VyZSB3ZSBkb24ndFxuICAgIC8vIG1pc3MgYW55dGhpbmcuXG5cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPScgKyBKU09OLnN0cmluZ2lmeSgnJyArIG5hbWUpICsgJ11bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlIG5lZWQgdXBkYXRlIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBuYW1lZCBjb3VzaW4gc2luY2UgdGhlIHZhbHVlXG4gICAgICAvLyB3YXMgY2hhbmdlZCBidXQgdGhlIGlucHV0IHNhdyBubyBldmVudCBvciB2YWx1ZSBzZXRcblxuXG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpOyAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cblxuICAgICAgdXBkYXRlV3JhcHBlcihvdGhlck5vZGUsIG90aGVyUHJvcHMpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgbm9kZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZENoaWxkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnOyAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cblxuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gY2hpbGQ7IC8vIE5vdGU6IHdlIGRvbid0IHdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlLlxuICAgIC8vIEluc3RlYWQsIHRoaXMgaXMgZG9uZSBzZXBhcmF0ZWx5IGJlbG93IHNvIHRoYXRcbiAgICAvLyBpdCBoYXBwZW5zIGR1cmluZyB0aGUgaHlkcmF0aW9uIGNvZGVwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZXBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4gIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSkpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe1xuICAgIGNoaWxkcmVuOiB1bmRlZmluZWRcbiAgfSwgcHJvcHMpO1xuXG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIFJlYWN0Q29udHJvbGxlZFZhbHVlUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuXG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgJyArICd2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyhub2RlLCBtdWx0aXBsZSwgcHJvcFZhbHVlLCBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgdmFyIG9wdGlvbnMgPSBub2RlLm9wdGlvbnM7XG5cbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gcHJvcFZhbHVlO1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG9wdGlvbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KCckJyArIG9wdGlvbnNbX2ldLnZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbnNbX2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuXG4gICAgdmFyIGRlZmF1bHRTZWxlY3RlZCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvcHRpb25zLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChvcHRpb25zW19pMl0udmFsdWUgPT09IF9zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbX2kyXS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFNlbGVjdGVkID09PSBudWxsICYmICFvcHRpb25zW19pMl0uZGlzYWJsZWQpIHtcbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gb3B0aW9uc1tfaTJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBvcHRpb25hbGx5IHNldHRpbmcgdGhlXG4gKiBwcm9wcyBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4gSWYgYG11bHRpcGxlYCBpcyBmYWxzZSwgdGhlIHByb3AgbXVzdCBiZSBhXG4gKiBzdHJpbmdhYmxlLiBJZiBgbXVsdGlwbGVgIGlzIHRydWUsIHRoZSBwcm9wIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nYWJsZXMuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZVxuICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICpcbiAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBub3RcbiAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuXG4gKlxuICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlXG4gKiBzZWxlY3RlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgbm9kZS5tdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0VXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB3YXNNdWx0aXBsZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAod2FzTXVsdGlwbGUgIT09ICEhcHJvcHMubXVsdGlwbGUpIHtcbiAgICAvLyBGb3Igc2ltcGxpY2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRzIGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbERlZmF1bHRWYWwgPSBmYWxzZTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAoIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCIpO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBSZWFjdENvbnRyb2xsZWRWYWx1ZVByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygndGV4dGFyZWEnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7IC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBjaGlsZHJlbiBjb250ZW50IGluIDx0ZXh0YXJlYT4uXG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgaWYgKCEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UkMSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSQxLFxuICBtYXRobWw6IE1BVEhfTkFNRVNQQUNFLFxuICBzdmc6IFNWR19OQU1FU1BBQ0Vcbn07IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFJDE7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0UkMTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2Zykge1xuICAgIHtcbiAgICAgIGlmIChlbmFibGVUcnVzdGVkVHlwZXNJbnRlZ3JhdGlvbikge1xuICAgICAgICAvLyBUT0RPOiByZWNvbnNpZGVyIHRoZSB0ZXh0IG9mIHRoaXMgd2FybmluZyBhbmQgd2hlbiBpdCBzaG91bGQgc2hvd1xuICAgICAgICAvLyBiZWZvcmUgZW5hYmxpbmcgdGhlIGZlYXR1cmUgZmxhZy5cbiAgICAgICAgISh0eXBlb2YgdHJ1c3RlZFR5cGVzID09PSAndW5kZWZpbmVkJykgPyB3YXJuaW5nJDEoZmFsc2UsIFwiVXNpbmcgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyBpbiBhbiBzdmcgZWxlbWVudCB3aXRoIFwiICsgJ1RydXN0ZWQgVHlwZXMgZW5hYmxlZCBpbiBhbiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGNhdXNlICcgKyAndGhlIHRydXN0ZWQgdmFsdWUgdG8gYmUgY29udmVydGVkIHRvIHN0cmluZy4gQXNzaWduaW5nIHN0cmluZyAnICsgXCJ0byAnaW5uZXJIVE1MJyB3aWxsIHRocm93IGFuIGVycm9yIGlmIFRydXN0ZWQgVHlwZXMgYXJlIGVuZm9yY2VkLiBcIiArIFwiWW91IGNhbiB0cnkgdG8gd3JhcCB5b3VyIHN2ZyBlbGVtZW50IGluc2lkZSBhIGRpdiBhbmQgdXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCcgXCIgKyAnb24gdGhlIGVuY2xvc2luZyBkaXYgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIERvIG5vdCB1c2UgdGhlIGJlbG93IHR3byBtZXRob2RzIGRpcmVjdGx5IVxuLy8gSW5zdGVhZCB1c2UgY29uc3RhbnRzIGV4cG9ydGVkIGZyb20gRE9NVG9wTGV2ZWxFdmVudFR5cGVzIGluIFJlYWN0RE9NLlxuLy8gKEl0IGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZXNlIG1ldGhvZHMuKVxuZnVuY3Rpb24gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlO1xufVxuZnVuY3Rpb24gdW5zYWZlQ2FzdERPTVRvcExldmVsVHlwZVRvU3RyaW5nKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxuLyoqXG4gKiBUbyBpZGVudGlmeSB0b3AgbGV2ZWwgZXZlbnRzIGluIFJlYWN0RE9NLCB3ZSB1c2UgY29uc3RhbnRzIGRlZmluZWQgYnkgdGhpc1xuICogbW9kdWxlLiBUaGlzIGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IHVzZXMgdGhlIHVuc2FmZSogbWV0aG9kcyB0byBleHByZXNzXG4gKiB0aGF0IHRoZSBjb25zdGFudHMgYWN0dWFsbHkgY29ycmVzcG9uZCB0byB0aGUgYnJvd3NlciBldmVudCBuYW1lcy4gVGhpcyBsZXRzXG4gKiB1cyBzYXZlIHNvbWUgYnVuZGxlIHNpemUgYnkgYXZvaWRpbmcgYSB0b3AgbGV2ZWwgdHlwZSAtPiBldmVudCBuYW1lIG1hcC5cbiAqIFRoZSByZXN0IG9mIFJlYWN0RE9NIGNvZGUgc2hvdWxkIGltcG9ydCB0b3AgbGV2ZWwgdHlwZXMgZnJvbSB0aGlzIGZpbGUuXG4gKi9cblxudmFyIFRPUF9BQk9SVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnYWJvcnQnKTtcbnZhciBUT1BfQU5JTUFUSU9OX0VORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJykpO1xudmFyIFRPUF9BTklNQVRJT05fSVRFUkFUSU9OID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKSk7XG52YXIgVE9QX0FOSU1BVElPTl9TVEFSVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKSk7XG52YXIgVE9QX0JMVVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2JsdXInKTtcbnZhciBUT1BfQ0FOX1BMQVkgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NhbnBsYXknKTtcbnZhciBUT1BfQ0FOX1BMQVlfVEhST1VHSCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY2FucGxheXRocm91Z2gnKTtcbnZhciBUT1BfQ0FOQ0VMID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjYW5jZWwnKTtcbnZhciBUT1BfQ0hBTkdFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjaGFuZ2UnKTtcbnZhciBUT1BfQ0xJQ0sgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NsaWNrJyk7XG52YXIgVE9QX0NMT1NFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjbG9zZScpO1xudmFyIFRPUF9DT01QT1NJVElPTl9FTkQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2NvbXBvc2l0aW9uZW5kJyk7XG52YXIgVE9QX0NPTVBPU0lUSU9OX1NUQVJUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb21wb3NpdGlvbnN0YXJ0Jyk7XG52YXIgVE9QX0NPTVBPU0lUSU9OX1VQREFURSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY29tcG9zaXRpb251cGRhdGUnKTtcbnZhciBUT1BfQ09OVEVYVF9NRU5VID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb250ZXh0bWVudScpO1xudmFyIFRPUF9DT1BZID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdjb3B5Jyk7XG52YXIgVE9QX0NVVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnY3V0Jyk7XG52YXIgVE9QX0RPVUJMRV9DTElDSyA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZGJsY2xpY2snKTtcbnZhciBUT1BfQVVYX0NMSUNLID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdhdXhjbGljaycpO1xudmFyIFRPUF9EUkFHID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcmFnJyk7XG52YXIgVE9QX0RSQUdfRU5EID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcmFnZW5kJyk7XG52YXIgVE9QX0RSQUdfRU5URVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdlbnRlcicpO1xudmFyIFRPUF9EUkFHX0VYSVQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdleGl0Jyk7XG52YXIgVE9QX0RSQUdfTEVBVkUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdsZWF2ZScpO1xudmFyIFRPUF9EUkFHX09WRVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdvdmVyJyk7XG52YXIgVE9QX0RSQUdfU1RBUlQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2RyYWdzdGFydCcpO1xudmFyIFRPUF9EUk9QID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdkcm9wJyk7XG52YXIgVE9QX0RVUkFUSU9OX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZHVyYXRpb25jaGFuZ2UnKTtcbnZhciBUT1BfRU1QVElFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZW1wdGllZCcpO1xudmFyIFRPUF9FTkNSWVBURUQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2VuY3J5cHRlZCcpO1xudmFyIFRPUF9FTkRFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnZW5kZWQnKTtcbnZhciBUT1BfRVJST1IgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2Vycm9yJyk7XG52YXIgVE9QX0ZPQ1VTID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdmb2N1cycpO1xudmFyIFRPUF9HT1RfUE9JTlRFUl9DQVBUVVJFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdnb3Rwb2ludGVyY2FwdHVyZScpO1xudmFyIFRPUF9JTlBVVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnaW5wdXQnKTtcbnZhciBUT1BfSU5WQUxJRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnaW52YWxpZCcpO1xudmFyIFRPUF9LRVlfRE9XTiA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgna2V5ZG93bicpO1xudmFyIFRPUF9LRVlfUFJFU1MgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2tleXByZXNzJyk7XG52YXIgVE9QX0tFWV9VUCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgna2V5dXAnKTtcbnZhciBUT1BfTE9BRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnbG9hZCcpO1xudmFyIFRPUF9MT0FEX1NUQVJUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdsb2Fkc3RhcnQnKTtcbnZhciBUT1BfTE9BREVEX0RBVEEgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ2xvYWRlZGRhdGEnKTtcbnZhciBUT1BfTE9BREVEX01FVEFEQVRBID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdsb2FkZWRtZXRhZGF0YScpO1xudmFyIFRPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnbG9zdHBvaW50ZXJjYXB0dXJlJyk7XG52YXIgVE9QX01PVVNFX0RPV04gPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ21vdXNlZG93bicpO1xudmFyIFRPUF9NT1VTRV9NT1ZFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW1vdmUnKTtcbnZhciBUT1BfTU9VU0VfT1VUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW91dCcpO1xudmFyIFRPUF9NT1VTRV9PVkVSID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdtb3VzZW92ZXInKTtcbnZhciBUT1BfTU9VU0VfVVAgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ21vdXNldXAnKTtcbnZhciBUT1BfUEFTVEUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3Bhc3RlJyk7XG52YXIgVE9QX1BBVVNFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwYXVzZScpO1xudmFyIFRPUF9QTEFZID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwbGF5Jyk7XG52YXIgVE9QX1BMQVlJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BsYXlpbmcnKTtcbnZhciBUT1BfUE9JTlRFUl9DQU5DRUwgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJjYW5jZWwnKTtcbnZhciBUT1BfUE9JTlRFUl9ET1dOID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwb2ludGVyZG93bicpO1xuXG5cbnZhciBUT1BfUE9JTlRFUl9NT1ZFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdwb2ludGVybW92ZScpO1xudmFyIFRPUF9QT0lOVEVSX09VVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgncG9pbnRlcm91dCcpO1xudmFyIFRPUF9QT0lOVEVSX09WRVIgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJvdmVyJyk7XG52YXIgVE9QX1BPSU5URVJfVVAgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3BvaW50ZXJ1cCcpO1xudmFyIFRPUF9QUk9HUkVTUyA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgncHJvZ3Jlc3MnKTtcbnZhciBUT1BfUkFURV9DSEFOR0UgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3JhdGVjaGFuZ2UnKTtcbnZhciBUT1BfUkVTRVQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3Jlc2V0Jyk7XG52YXIgVE9QX1NDUk9MTCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2Nyb2xsJyk7XG52YXIgVE9QX1NFRUtFRCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2Vla2VkJyk7XG52YXIgVE9QX1NFRUtJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3NlZWtpbmcnKTtcbnZhciBUT1BfU0VMRUNUSU9OX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc2VsZWN0aW9uY2hhbmdlJyk7XG52YXIgVE9QX1NUQUxMRUQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3N0YWxsZWQnKTtcbnZhciBUT1BfU1VCTUlUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCdzdWJtaXQnKTtcbnZhciBUT1BfU1VTUEVORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgnc3VzcGVuZCcpO1xudmFyIFRPUF9URVhUX0lOUFVUID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0ZXh0SW5wdXQnKTtcbnZhciBUT1BfVElNRV9VUERBVEUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RpbWV1cGRhdGUnKTtcbnZhciBUT1BfVE9HR0xFID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0b2dnbGUnKTtcbnZhciBUT1BfVE9VQ0hfQ0FOQ0VMID0gdW5zYWZlQ2FzdFN0cmluZ1RvRE9NVG9wTGV2ZWxUeXBlKCd0b3VjaGNhbmNlbCcpO1xudmFyIFRPUF9UT1VDSF9FTkQgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RvdWNoZW5kJyk7XG52YXIgVE9QX1RPVUNIX01PVkUgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3RvdWNobW92ZScpO1xudmFyIFRPUF9UT1VDSF9TVEFSVCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgndG91Y2hzdGFydCcpO1xudmFyIFRPUF9UUkFOU0lUSU9OX0VORCA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZShnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpKTtcbnZhciBUT1BfVk9MVU1FX0NIQU5HRSA9IHVuc2FmZUNhc3RTdHJpbmdUb0RPTVRvcExldmVsVHlwZSgndm9sdW1lY2hhbmdlJyk7XG52YXIgVE9QX1dBSVRJTkcgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3dhaXRpbmcnKTtcbnZhciBUT1BfV0hFRUwgPSB1bnNhZmVDYXN0U3RyaW5nVG9ET01Ub3BMZXZlbFR5cGUoJ3doZWVsJyk7IC8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG4vLyBOb3RlIHRoYXQgZXZlbnRzIGluIHRoaXMgbGlzdCB3aWxsICpub3QqIGJlIGxpc3RlbmVkIHRvIGF0IHRoZSB0b3AgbGV2ZWxcbi8vIHVubGVzcyB0aGV5J3JlIGV4cGxpY2l0bHkgd2hpdGVsaXN0ZWQgaW4gYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5Ub2AuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbVE9QX0FCT1JULCBUT1BfQ0FOX1BMQVksIFRPUF9DQU5fUExBWV9USFJPVUdILCBUT1BfRFVSQVRJT05fQ0hBTkdFLCBUT1BfRU1QVElFRCwgVE9QX0VOQ1JZUFRFRCwgVE9QX0VOREVELCBUT1BfRVJST1IsIFRPUF9MT0FERURfREFUQSwgVE9QX0xPQURFRF9NRVRBREFUQSwgVE9QX0xPQURfU1RBUlQsIFRPUF9QQVVTRSwgVE9QX1BMQVksIFRPUF9QTEFZSU5HLCBUT1BfUFJPR1JFU1MsIFRPUF9SQVRFX0NIQU5HRSwgVE9QX1NFRUtFRCwgVE9QX1NFRUtJTkcsIFRPUF9TVEFMTEVELCBUT1BfU1VTUEVORCwgVE9QX1RJTUVfVVBEQVRFLCBUT1BfVk9MVU1FX0NIQU5HRSwgVE9QX1dBSVRJTkddO1xuZnVuY3Rpb24gZ2V0UmF3RXZlbnROYW1lKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdW5zYWZlQ2FzdERPTVRvcExldmVsVHlwZVRvU3RyaW5nKHRvcExldmVsVHlwZSk7XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuXG4vKipcbiAqIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYGRlbGV0ZWAgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gYWx3YXlzXG4gKiB0cmFuc2Zvcm0gdGhlc2UgdG8gc3RyaW5ncyBmb3IgSUUgc3VwcG9ydC4gV2hlbiB0aGlzIHRyYW5zZm9ybSBpcyBmdWxseVxuICogc3VwcG9ydGVkIHdlIGNhbiByZW5hbWUgaXQuXG4gKi9cblxuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFsRmliZXI7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxGaWJlciAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAga2V5Ll9yZWFjdEludGVybmFsRmliZXIgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9FZmZlY3QgPVxuLyogICAgICAgICAgICAgICovXG4wO1xudmFyIFBlcmZvcm1lZFdvcmsgPVxuLyogICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICovXG40O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9XG4vKiAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgKi9cbjg7XG52YXIgQ29udGVudFJlc2V0ID1cbi8qICAgICAgICAgICovXG4xNjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAqL1xuNjQ7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgU25hcHNob3QgPVxuLyogICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICovXG41MTI7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIEh5ZHJhdGluZ0FuZFVwZGF0ZSA9XG4vKiAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAqL1xuOTMyOyAvLyBVbmlvbiBvZiBhbGwgaG9zdCBlZmZlY3RzXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgKi9cbjIwNDc7XG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAqL1xuNDA5NjtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5lZmZlY3RUYWcgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRWZmZWN0KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmICghZmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgaWYgKCEoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmICghKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhLmFsdGVybmF0ZSA9PT0gYikpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICByZXR1cm4gYWx0ZXJuYXRlO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgJiYgbm9kZS50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgJiYgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBhdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFN5bmNocm9ub3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5ID0gZm47XG59IC8vIFRPRE86IFVwZ3JhZGUgdGhpcyBkZWZpbml0aW9uIG9uY2Ugd2UncmUgb24gYSBuZXdlciB2ZXJzaW9uIG9mIEZsb3cgdGhhdFxuLy8gaGFzIHRoaXMgZGVmaW5pdGlvbiBidWlsdC1pbi5cblxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gVGhlIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cyB0byBiZSByZXBsYXllZC5cblxudmFyIHF1ZXVlZERpc2NyZXRlRXZlbnRzID0gW107IC8vIEluZGljYXRlcyBpZiBhbnkgY29udGludW91cyBldmVudCB0YXJnZXRzIGFyZSBub24tbnVsbCBmb3IgZWFybHkgYmFpbG91dC5cblxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG5cbnZhciBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPSBbVE9QX01PVVNFX0RPV04sIFRPUF9NT1VTRV9VUCwgVE9QX1RPVUNIX0NBTkNFTCwgVE9QX1RPVUNIX0VORCwgVE9QX1RPVUNIX1NUQVJULCBUT1BfQVVYX0NMSUNLLCBUT1BfRE9VQkxFX0NMSUNLLCBUT1BfUE9JTlRFUl9DQU5DRUwsIFRPUF9QT0lOVEVSX0RPV04sIFRPUF9QT0lOVEVSX1VQLCBUT1BfRFJBR19FTkQsIFRPUF9EUkFHX1NUQVJULCBUT1BfRFJPUCwgVE9QX0NPTVBPU0lUSU9OX0VORCwgVE9QX0NPTVBPU0lUSU9OX1NUQVJULCBUT1BfS0VZX0RPV04sIFRPUF9LRVlfUFJFU1MsIFRPUF9LRVlfVVAsIFRPUF9JTlBVVCwgVE9QX1RFWFRfSU5QVVQsIFRPUF9DTE9TRSwgVE9QX0NBTkNFTCwgVE9QX0NPUFksIFRPUF9DVVQsIFRPUF9QQVNURSwgVE9QX0NMSUNLLCBUT1BfQ0hBTkdFLCBUT1BfQ09OVEVYVF9NRU5VLCBUT1BfUkVTRVQsIFRPUF9TVUJNSVRdO1xudmFyIGNvbnRpbnVvdXNSZXBsYXlhYmxlRXZlbnRzID0gW1RPUF9GT0NVUywgVE9QX0JMVVIsIFRPUF9EUkFHX0VOVEVSLCBUT1BfRFJBR19MRUFWRSwgVE9QX01PVVNFX09WRVIsIFRPUF9NT1VTRV9PVVQsIFRPUF9QT0lOVEVSX09WRVIsIFRPUF9QT0lOVEVSX09VVCwgVE9QX0dPVF9QT0lOVEVSX0NBUFRVUkUsIFRPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRV07XG5mdW5jdGlvbiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiB0cmFwUmVwbGF5YWJsZUV2ZW50KHRvcExldmVsVHlwZSwgZG9jdW1lbnQsIGxpc3RlbmluZ1NldCkge1xuICBsaXN0ZW5Ub1RvcExldmVsKHRvcExldmVsVHlwZSwgZG9jdW1lbnQsIGxpc3RlbmluZ1NldCk7XG5cbiAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgLy8gVHJhcCBldmVudHMgZm9yIHRoZSByZXNwb25kZXIgc3lzdGVtLlxuICAgIHZhciBwYXNzaXZlRXZlbnRLZXkgPSB1bnNhZmVDYXN0RE9NVG9wTGV2ZWxUeXBlVG9TdHJpbmcodG9wTGV2ZWxUeXBlKSArICdfcGFzc2l2ZSc7XG5cbiAgICBpZiAoIWxpc3RlbmluZ1NldC5oYXMocGFzc2l2ZUV2ZW50S2V5KSkge1xuICAgICAgdHJhcEV2ZW50Rm9yUmVzcG9uZGVyRXZlbnRTeXN0ZW0oZG9jdW1lbnQsIHRvcExldmVsVHlwZSwgdHJ1ZSk7XG4gICAgICBsaXN0ZW5pbmdTZXQuYWRkKHBhc3NpdmVFdmVudEtleSk7XG4gICAgfSAvLyBUT0RPOiBUaGlzIGxpc3RlbnMgdG8gYWxsIGV2ZW50cyBhcyBhY3RpdmUgd2hpY2ggbWlnaHQgaGF2ZVxuICAgIC8vIHVuZGVzaXJhYmxlIGVmZmVjdHMuIEl0J3MgYWxzbyB1bm5lY2Vzc2FyeSB0byBoYXZlIGJvdGhcbiAgICAvLyBwYXNzaXZlIGFuZCBhY3RpdmUgbGlzdGVuZXJzLiBJbnN0ZWFkLCB3ZSBjb3VsZCBzdGFydCB3aXRoXG4gICAgLy8gYSBwYXNzaXZlIGFuZCB1cGdyYWRlIGl0IHRvIGFuIGFjdGl2ZSBvbmUgaWYgbmVlZGVkLlxuICAgIC8vIEZvciByZXBsYXlpbmcgcHVycG9zZXMgdGhlIGFjdGl2ZSBpcyBuZXZlciBuZWVkZWQgc2luY2Ugd2VcbiAgICAvLyBjdXJyZW50bHkgZG9uJ3QgcHJldmVudERlZmF1bHQuXG5cblxuICAgIHZhciBhY3RpdmVFdmVudEtleSA9IHVuc2FmZUNhc3RET01Ub3BMZXZlbFR5cGVUb1N0cmluZyh0b3BMZXZlbFR5cGUpICsgJ19hY3RpdmUnO1xuXG4gICAgaWYgKCFsaXN0ZW5pbmdTZXQuaGFzKGFjdGl2ZUV2ZW50S2V5KSkge1xuICAgICAgdHJhcEV2ZW50Rm9yUmVzcG9uZGVyRXZlbnRTeXN0ZW0oZG9jdW1lbnQsIHRvcExldmVsVHlwZSwgZmFsc2UpO1xuICAgICAgbGlzdGVuaW5nU2V0LmFkZChhY3RpdmVFdmVudEtleSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVhZ2VybHlUcmFwUmVwbGF5YWJsZUV2ZW50cyhkb2N1bWVudCkge1xuICB2YXIgbGlzdGVuaW5nU2V0ID0gZ2V0TGlzdGVuaW5nU2V0Rm9yRWxlbWVudChkb2N1bWVudCk7IC8vIERpc2NyZXRlXG5cbiAgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRvcExldmVsVHlwZSkge1xuICAgIHRyYXBSZXBsYXlhYmxlRXZlbnQodG9wTGV2ZWxUeXBlLCBkb2N1bWVudCwgbGlzdGVuaW5nU2V0KTtcbiAgfSk7IC8vIENvbnRpbnVvdXNcblxuICBjb250aW51b3VzUmVwbGF5YWJsZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUpIHtcbiAgICB0cmFwUmVwbGF5YWJsZUV2ZW50KHRvcExldmVsVHlwZSwgZG9jdW1lbnQsIGxpc3RlbmluZ1NldCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgdG9wTGV2ZWxUeXBlOiB0b3BMZXZlbFR5cGUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudFxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQpO1xuICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5wdXNoKHF1ZXVlZEV2ZW50KTtcblxuICBpZiAoZW5hYmxlU2VsZWN0aXZlSHlkcmF0aW9uKSB7XG4gICAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGZpcnN0IGRpc2NyZXRlIGV2ZW50LCB3ZSBtaWdodCBiZSBhYmxlIHRvXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHVuYmxvY2sgaXQgc28gdGhhdCBwcmV2ZW50RGVmYXVsdCBzdGlsbCB3b3Jrcy5cbiAgICAgIHdoaWxlIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgICAgdmFyIF9maWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUkMShxdWV1ZWRFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICAgIGlmIChfZmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGF0dGVtcHRTeW5jaHJvbm91c0h5ZHJhdGlvbihfZmliZXIpO1xuXG4gICAgICAgIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBnb3QgdW5ibG9ja2VkIGJ5IGh5ZHJhdGlvbi4gTGV0J3MgdHJ5IGFnYWluLlxuICAgICAgICAgIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpOyAvLyBJZiB3ZSdyZSByZWJsb2NrZWQsIG9uIGFuIGlubmVyIGJvdW5kYXJ5LCB3ZSBtaWdodCBuZWVkXG4gICAgICAgICAgLy8gdG8gYXR0ZW1wdCBoeWRyYXRpbmcgdGhhdCBvbmUuXG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkIGZyb20gaHlkYXRpb24sIHdlIGhhdmUgdG8gZ2l2ZSB1cFxuICAgICAgICAgIC8vIGFuZCByZXBsYXkgbGF0ZXIuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gUmVzZXRzIHRoZSByZXBsYXlpbmcgZm9yIHRoaXMgdHlwZSBvZiBjb250aW51b3VzIGV2ZW50IHRvIG5vIGV2ZW50LlxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIFRPUF9GT0NVUzpcbiAgICBjYXNlIFRPUF9CTFVSOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFRPUF9EUkFHX0VOVEVSOlxuICAgIGNhc2UgVE9QX0RSQUdfTEVBVkU6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUT1BfTU9VU0VfT1ZFUjpcbiAgICBjYXNlIFRPUF9NT1VTRV9PVVQ6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVE9QX1BPSU5URVJfT1ZFUjpcbiAgICBjYXNlIFRPUF9QT0lOVEVSX09VVDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBUT1BfR09UX1BPSU5URVJfQ0FQVFVSRTpcbiAgICBjYXNlIFRPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgdG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2ZpYmVyMiA9IGdldEluc3RhbmNlRnJvbU5vZGUkMShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncyBhbmQgc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmVcbiAgLy8gcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIFRPUF9GT0NVUzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgZm9jdXNFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSBUT1BfRFJBR19FTlRFUjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRyYWdFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWREcmFnLCBibG9ja2VkT24sIHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlIFRPUF9NT1VTRV9PVkVSOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgdG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlIFRPUF9QT0lOVEVSX09WRVI6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIHBvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgVE9QX0dPVF9QT0lOVEVSX0NBUFRVUkU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgdG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTsgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mXG4gICAgICAgICAgLy8gYSByb290IG90aGVyIHRoYW4gc3luYy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBxdWV1ZUV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHRhcmdldCkge1xuICBpZiAoZW5hYmxlU2VsZWN0aXZlSHlkcmF0aW9uKSB7XG4gICAgdmFyIHByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHtcbiAgICAgIGJsb2NrZWRPbjogbnVsbCxcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcHJpb3JpdHk6IHByaW9yaXR5XG4gICAgfTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICBmb3IgKDsgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByaW9yaXR5IDw9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tpXS5wcmlvcml0eSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc3BsaWNlKGksIDAsIHF1ZXVlZFRhcmdldCk7XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC50b3BMZXZlbFR5cGUsIHF1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUkMShuZXh0QmxvY2tlZE9uKTtcblxuICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIzKTtcbiAgICB9XG5cbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gIGlmIChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSkge1xuICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gRmlyc3QgcmVwbGF5IGRpc2NyZXRlIGV2ZW50cy5cblxuICB3aGlsZSAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RGlzY3JldGVFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdO1xuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIGJvdW5kYXJ5IHRvIHVuYmxvY2tcbiAgICAgIC8vIHRoZSBuZXh0IGRpc2NyZXRlIGV2ZW50LlxuICAgICAgdmFyIF9maWJlcjQgPSBnZXRJbnN0YW5jZUZyb21Ob2RlJDEobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihfZmliZXI0KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KG5leHREaXNjcmV0ZUV2ZW50LnRvcExldmVsVHlwZSwgbmV4dERpc2NyZXRlRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIoZWxlbWVudCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIoZWxlbWVudCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyhlbGVtZW50LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IGluc3RBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IGluc3RCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBpbnN0QSA9IGdldFBhcmVudChpbnN0QSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBpbnN0QiA9IGdldFBhcmVudChpbnN0Qik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAoaW5zdEEgPT09IGluc3RCIHx8IGluc3RBID09PSBpbnN0Qi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBpbnN0QTtcbiAgICB9XG5cbiAgICBpbnN0QSA9IGdldFBhcmVudChpbnN0QSk7XG4gICAgaW5zdEIgPSBnZXRQYXJlbnQoaW5zdEIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiBpZiBBIGlzIGFuIGFuY2VzdG9yIG9mIEIuXG4gKi9cblxuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyZW50IGluc3RhbmNlIG9mIHRoZSBwYXNzZWQtaW4gaW5zdGFuY2UuXG4gKi9cblxuXG4vKipcbiAqIFNpbXVsYXRlcyB0aGUgdHJhdmVyc2FsIG9mIGEgdHdvLXBoYXNlLCBjYXB0dXJlL2J1YmJsZSBldmVudCBkaXNwYXRjaC5cbiAqL1xuXG5mdW5jdGlvbiB0cmF2ZXJzZVR3b1BoYXNlKGluc3QsIGZuLCBhcmcpIHtcbiAgdmFyIHBhdGggPSBbXTtcblxuICB3aGlsZSAoaW5zdCkge1xuICAgIHBhdGgucHVzaChpbnN0KTtcbiAgICBpbnN0ID0gZ2V0UGFyZW50KGluc3QpO1xuICB9XG5cbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gcGF0aC5sZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgZm4ocGF0aFtpXSwgJ2NhcHR1cmVkJywgYXJnKTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4ocGF0aFtpXSwgJ2J1YmJsZWQnLCBhcmcpO1xuICB9XG59XG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgSUQgaGllcmFyY2h5IGFuZCBpbnZva2VzIHRoZSBzdXBwbGllZCBgY2JgIG9uIGFueSBJRHMgdGhhdFxuICogc2hvdWxkIHdvdWxkIHJlY2VpdmUgYSBgbW91c2VFbnRlcmAgb3IgYG1vdXNlTGVhdmVgIGV2ZW50LlxuICpcbiAqIERvZXMgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIG5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIGJlY2F1c2Ugbm90aGluZ1xuICogXCJlbnRlcmVkXCIgb3IgXCJsZWZ0XCIgdGhhdCBlbGVtZW50LlxuICovXG5cbmZ1bmN0aW9uIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgZm4sIGFyZ0Zyb20sIGFyZ1RvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcbiAgdmFyIHBhdGhGcm9tID0gW107XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWZyb20pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChmcm9tID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBhbHRlcm5hdGUgPSBmcm9tLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBhdGhGcm9tLnB1c2goZnJvbSk7XG4gICAgZnJvbSA9IGdldFBhcmVudChmcm9tKTtcbiAgfVxuXG4gIHZhciBwYXRoVG8gPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghdG8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0byA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2FsdGVybmF0ZSA9IHRvLmFsdGVybmF0ZTtcblxuICAgIGlmIChfYWx0ZXJuYXRlICE9PSBudWxsICYmIF9hbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcGF0aFRvLnB1c2godG8pO1xuICAgIHRvID0gZ2V0UGFyZW50KHRvKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aEZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoRnJvbVtpXSwgJ2J1YmJsZWQnLCBhcmdGcm9tKTtcbiAgfVxuXG4gIGZvciAodmFyIF9pID0gcGF0aFRvLmxlbmd0aDsgX2ktLSA+IDA7KSB7XG4gICAgZm4ocGF0aFRvW19pXSwgJ2NhcHR1cmVkJywgYXJnVG8pO1xuICB9XG59XG5cbi8qKlxuICogU29tZSBldmVudCB0eXBlcyBoYXZlIGEgbm90aW9uIG9mIGRpZmZlcmVudCByZWdpc3RyYXRpb24gbmFtZXMgZm9yIGRpZmZlcmVudFxuICogXCJwaGFzZXNcIiBvZiBwcm9wYWdhdGlvbi4gVGhpcyBmaW5kcyBsaXN0ZW5lcnMgYnkgYSBnaXZlbiBwaGFzZS5cbiAqL1xuZnVuY3Rpb24gbGlzdGVuZXJBdFBoYXNlKGluc3QsIGV2ZW50LCBwcm9wYWdhdGlvblBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07XG4gIHJldHVybiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbn1cbi8qKlxuICogQSBzbWFsbCBzZXQgb2YgcHJvcGFnYXRpb24gcGF0dGVybnMsIGVhY2ggb2Ygd2hpY2ggd2lsbCBhY2NlcHQgYSBzbWFsbCBhbW91bnRcbiAqIG9mIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhdGUgYSBzZXQgb2YgXCJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzXCIgLSB3aGljaFxuICogYXJlIHNldHMgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3RhdGVkIHdpdGggYSBzZXQgb2YgZGlzcGF0Y2hlZFxuICogbGlzdGVuZXIgZnVuY3Rpb25zL2lkcy4gVGhlIEFQSSBpcyBkZXNpZ25lZCB0aGlzIHdheSB0byBkaXNjb3VyYWdlIHRoZXNlXG4gKiBwcm9wYWdhdGlvbiBzdHJhdGVnaWVzIGZyb20gYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwYXRjaGVzLCBzaW5jZSB3ZVxuICogYWx3YXlzIHdhbnQgdG8gY29sbGVjdCB0aGUgZW50aXJlIHNldCBvZiBkaXNwYXRjaGVzIGJlZm9yZSBleGVjdXRpbmcgZXZlbiBhXG4gKiBzaW5nbGUgb25lLlxuICovXG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5cbiAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhlIGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhpbnN0LCBwaGFzZSwgZXZlbnQpIHtcbiAge1xuICAgICFpbnN0ID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGlzcGF0Y2hpbmcgaW5zdCBtdXN0IG5vdCBiZSBudWxsJykgOiB2b2lkIDA7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcblxuICBpZiAobGlzdGVuZXIpIHtcbiAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICB9XG59XG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2Fubm90IHBlcmZvcm0gYVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgdHJhdmVyc2VUd29QaGFzZShldmVudC5fdGFyZ2V0SW5zdCwgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcywgZXZlbnQpO1xuICB9XG59XG4vKipcbiAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICogcmVxdWlyaW5nIHRoYXQgdGhlIGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gKi9cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhpbnN0LCBpZ25vcmVkRGlyZWN0aW9uLCBldmVudCkge1xuICBpZiAoaW5zdCAmJiBldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcywgaW5zdCk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGV2ZW50Ll90YXJnZXRJbnN0LCBudWxsLCBldmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKSB7XG4gIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgYWNjdW11bGF0ZURpc3BhdGNoZXMsIGxlYXZlLCBlbnRlcik7XG59XG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG4vKiBlc2xpbnQgdmFsaWQtdHlwZW9mOiAwICovXG52YXIgRVZFTlRfUE9PTF9TSVpFID0gMTA7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgdHlwZTogbnVsbCxcbiAgdGFyZ2V0OiBudWxsLFxuICAvLyBjdXJyZW50VGFyZ2V0IGlzIHNldCB3aGVuIGRpc3BhdGNoaW5nOyBubyB1c2UgaW4gY29weWluZyBpdCBoZXJlXG4gIGN1cnJlbnRUYXJnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IG51bGwsXG4gIGlzVHJ1c3RlZDogbnVsbFxufTtcblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAqXG4gKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICpcbiAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHsqfSB0YXJnZXRJbnN0IE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gbmF0aXZlRXZlbnRUYXJnZXQgVGFyZ2V0IG5vZGUuXG4gKi9cblxuXG5mdW5jdGlvbiBTeW50aGV0aWNFdmVudChkaXNwYXRjaENvbmZpZywgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHtcbiAgICAvLyB0aGVzZSBoYXZlIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICBkZWxldGUgdGhpcy5uYXRpdmVFdmVudDtcbiAgICBkZWxldGUgdGhpcy5wcmV2ZW50RGVmYXVsdDtcbiAgICBkZWxldGUgdGhpcy5zdG9wUHJvcGFnYXRpb247XG4gICAgZGVsZXRlIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkO1xuICAgIGRlbGV0ZSB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkO1xuICB9XG5cbiAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IGRpc3BhdGNoQ29uZmlnO1xuICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG5cbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBkZWxldGUgdGhpc1twcm9wTmFtZV07IC8vIHRoaXMgaGFzIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW3Byb3BOYW1lXTtcblxuICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BOYW1lID09PSAndGFyZ2V0Jykge1xuICAgICAgICB0aGlzLnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1twcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtwcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgfVxuXG4gIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gIHJldHVybiB0aGlzO1xufVxuXG5fYXNzaWduKFN5bnRoZXRpY0V2ZW50LnByb3RvdHlwZSwge1xuICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICB9LFxuICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICovXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcE5hbWUsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIEludGVyZmFjZVtwcm9wTmFtZV0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gbnVsbDtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHRoaXMuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgICB0aGlzLl9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG5cbiAgICB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hdGl2ZUV2ZW50JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignbmF0aXZlRXZlbnQnLCBudWxsKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lzRGVmYXVsdFByZXZlbnRlZCcsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ2lzRGVmYXVsdFByZXZlbnRlZCcsIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSkpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdpc1Byb3BhZ2F0aW9uU3RvcHBlZCcsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ2lzUHJvcGFnYXRpb25TdG9wcGVkJywgZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3ByZXZlbnREZWZhdWx0JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbigncHJldmVudERlZmF1bHQnLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdG9wUHJvcGFnYXRpb24nLCBnZXRQb29sZWRXYXJuaW5nUHJvcGVydHlEZWZpbml0aW9uKCdzdG9wUHJvcGFnYXRpb24nLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIH1cbiAgfVxufSk7XG5cblN5bnRoZXRpY0V2ZW50LkludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlO1xuLyoqXG4gKiBIZWxwZXIgdG8gcmVkdWNlIGJvaWxlcnBsYXRlIHdoZW4gY3JlYXRpbmcgc3ViY2xhc3Nlcy5cbiAqL1xuXG5TeW50aGV0aWNFdmVudC5leHRlbmQgPSBmdW5jdGlvbiAoSW50ZXJmYWNlKSB7XG4gIHZhciBTdXBlciA9IHRoaXM7XG5cbiAgdmFyIEUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICBFLnByb3RvdHlwZSA9IFN1cGVyLnByb3RvdHlwZTtcbiAgdmFyIHByb3RvdHlwZSA9IG5ldyBFKCk7XG5cbiAgZnVuY3Rpb24gQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTtcblxuICBDbGFzcy5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuICBDbGFzcy5JbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBTdXBlci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gIENsYXNzLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgYWRkRXZlbnRQb29saW5nVG8oQ2xhc3MpO1xuICByZXR1cm4gQ2xhc3M7XG59O1xuXG5hZGRFdmVudFBvb2xpbmdUbyhTeW50aGV0aWNFdmVudCk7XG4vKipcbiAqIEhlbHBlciB0byBudWxsaWZ5IHN5bnRoZXRpY0V2ZW50IGluc3RhbmNlIHByb3BlcnRpZXMgd2hlbiBkZXN0cnVjdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wTmFtZVxuICogQHBhcmFtIHs/b2JqZWN0fSBnZXRWYWxcbiAqIEByZXR1cm4ge29iamVjdH0gZGVmaW5lUHJvcGVydHkgb2JqZWN0XG4gKi9cblxuZnVuY3Rpb24gZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgZ2V0VmFsKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIGdldFZhbCA9PT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgc2V0OiBzZXQsXG4gICAgZ2V0OiBnZXRcbiAgfTtcblxuICBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgdmFyIGFjdGlvbiA9IGlzRnVuY3Rpb24gPyAnc2V0dGluZyB0aGUgbWV0aG9kJyA6ICdzZXR0aW5nIHRoZSBwcm9wZXJ0eSc7XG4gICAgd2FybihhY3Rpb24sICdUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AnKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0KCkge1xuICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uID8gJ2FjY2Vzc2luZyB0aGUgbWV0aG9kJyA6ICdhY2Nlc3NpbmcgdGhlIHByb3BlcnR5JztcbiAgICB2YXIgcmVzdWx0ID0gaXNGdW5jdGlvbiA/ICdUaGlzIGlzIGEgbm8tb3AgZnVuY3Rpb24nIDogJ1RoaXMgaXMgc2V0IHRvIG51bGwnO1xuICAgIHdhcm4oYWN0aW9uLCByZXN1bHQpO1xuICAgIHJldHVybiBnZXRWYWw7XG4gIH1cblxuICBmdW5jdGlvbiB3YXJuKGFjdGlvbiwgcmVzdWx0KSB7XG4gICAgdmFyIHdhcm5pbmdDb25kaXRpb24gPSBmYWxzZTtcbiAgICAhd2FybmluZ0NvbmRpdGlvbiA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgXCJUaGlzIHN5bnRoZXRpYyBldmVudCBpcyByZXVzZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgXCIgKyBcInlvdSdyZSAlcyBgJXNgIG9uIGEgcmVsZWFzZWQvbnVsbGlmaWVkIHN5bnRoZXRpYyBldmVudC4gJXMuIFwiICsgJ0lmIHlvdSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIHN5bnRoZXRpYyBldmVudCBhcm91bmQsIHVzZSBldmVudC5wZXJzaXN0KCkuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBhY3Rpb24sIHByb3BOYW1lLCByZXN1bHQpIDogdm9pZCAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvb2xlZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlSW5zdCkge1xuICB2YXIgRXZlbnRDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLnBvcCgpO1xuICAgIEV2ZW50Q29uc3RydWN0b3IuY2FsbChpbnN0YW5jZSwgZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVJbnN0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IEV2ZW50Q29uc3RydWN0b3IoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVJbnN0KTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZVBvb2xlZEV2ZW50KGV2ZW50KSB7XG4gIHZhciBFdmVudENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIShldmVudCBpbnN0YW5jZW9mIEV2ZW50Q29uc3RydWN0b3IpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUcnlpbmcgdG8gcmVsZWFzZSBhbiBldmVudCBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLlwiKTtcbiAgICB9XG4gIH1cblxuICBldmVudC5kZXN0cnVjdG9yKCk7XG5cbiAgaWYgKEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLmxlbmd0aCA8IEVWRU5UX1BPT0xfU0laRSkge1xuICAgIEV2ZW50Q29uc3RydWN0b3IuZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50UG9vbGluZ1RvKEV2ZW50Q29uc3RydWN0b3IpIHtcbiAgRXZlbnRDb25zdHJ1Y3Rvci5ldmVudFBvb2wgPSBbXTtcbiAgRXZlbnRDb25zdHJ1Y3Rvci5nZXRQb29sZWQgPSBnZXRQb29sZWRFdmVudDtcbiAgRXZlbnRDb25zdHJ1Y3Rvci5yZWxlYXNlID0gcmVsZWFzZVBvb2xlZEV2ZW50O1xufVxuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgYW5pbWF0aW9uTmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgdmlldzogbnVsbCxcbiAgZGV0YWlsOiBudWxsXG59KTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gU3ludGhldGljVUlFdmVudC5leHRlbmQoe1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59KTtcblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07IC8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG5cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuXG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBTeW50aGV0aWNVSUV2ZW50LmV4dGVuZCh7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGxvY2F0aW9uOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICByZXBlYXQ6IG51bGwsXG4gIGxvY2FsZTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cbn0pO1xuXG52YXIgcHJldmlvdXNTY3JlZW5YID0gMDtcbnZhciBwcmV2aW91c1NjcmVlblkgPSAwOyAvLyBVc2UgZmxhZ3MgdG8gc2lnbmFsIG1vdmVtZW50WC9ZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG5cbnZhciBpc01vdmVtZW50WFNldCA9IGZhbHNlO1xudmFyIGlzTW92ZW1lbnRZU2V0ID0gZmFsc2U7XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBTeW50aGV0aWNVSUV2ZW50LmV4dGVuZCh7XG4gIHNjcmVlblg6IG51bGwsXG4gIHNjcmVlblk6IG51bGwsXG4gIGNsaWVudFg6IG51bGwsXG4gIGNsaWVudFk6IG51bGwsXG4gIHBhZ2VYOiBudWxsLFxuICBwYWdlWTogbnVsbCxcbiAgY3RybEtleTogbnVsbCxcbiAgc2hpZnRLZXk6IG51bGwsXG4gIGFsdEtleTogbnVsbCxcbiAgbWV0YUtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IG51bGwsXG4gIGJ1dHRvbnM6IG51bGwsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IChldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50KTtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdmFyIHNjcmVlblggPSBwcmV2aW91c1NjcmVlblg7XG4gICAgcHJldmlvdXNTY3JlZW5YID0gZXZlbnQuc2NyZWVuWDtcblxuICAgIGlmICghaXNNb3ZlbWVudFhTZXQpIHtcbiAgICAgIGlzTW92ZW1lbnRYU2V0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJyA/IGV2ZW50LnNjcmVlblggLSBzY3JlZW5YIDogMDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfVxuXG4gICAgdmFyIHNjcmVlblkgPSBwcmV2aW91c1NjcmVlblk7XG4gICAgcHJldmlvdXNTY3JlZW5ZID0gZXZlbnQuc2NyZWVuWTtcblxuICAgIGlmICghaXNNb3ZlbWVudFlTZXQpIHtcbiAgICAgIGlzTW92ZW1lbnRZU2V0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJyA/IGV2ZW50LnNjcmVlblkgLSBzY3JlZW5ZIDogMDtcbiAgfVxufSk7XG5cbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgU3ludGhldGljUG9pbnRlckV2ZW50ID0gU3ludGhldGljTW91c2VFdmVudC5leHRlbmQoe1xuICBwb2ludGVySWQ6IG51bGwsXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIHByZXNzdXJlOiBudWxsLFxuICB0YW5nZW50aWFsUHJlc3N1cmU6IG51bGwsXG4gIHRpbHRYOiBudWxsLFxuICB0aWx0WTogbnVsbCxcbiAgdHdpc3Q6IG51bGwsXG4gIHBvaW50ZXJUeXBlOiBudWxsLFxuICBpc1ByaW1hcnk6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gU3ludGhldGljTW91c2VFdmVudC5leHRlbmQoe1xuICBkYXRhVHJhbnNmZXI6IG51bGxcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBTeW50aGV0aWNVSUV2ZW50LmV4dGVuZCh7XG4gIHRvdWNoZXM6IG51bGwsXG4gIHRhcmdldFRvdWNoZXM6IG51bGwsXG4gIGNoYW5nZWRUb3VjaGVzOiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLXRyYW5zaXRpb25zLTIwMDkwMzIwLyN0cmFuc2l0aW9uLWV2ZW50cy1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RyYW5zaXRpb25FdmVudFxuICovXG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBTeW50aGV0aWNFdmVudC5leHRlbmQoe1xuICBwcm9wZXJ0eU5hbWU6IG51bGwsXG4gIGVsYXBzZWRUaW1lOiBudWxsLFxuICBwc2V1ZG9FbGVtZW50OiBudWxsXG59KTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gU3ludGhldGljTW91c2VFdmVudC5leHRlbmQoe1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IG51bGwsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59KTtcblxuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqIGludG9cbiAqIGV2ZW50VHlwZXMgPSB7XG4gKiAgICdhYm9ydCc6IHtcbiAqICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICogICAgICAgYnViYmxlZDogJ29uQWJvcnQnLFxuICogICAgICAgY2FwdHVyZWQ6ICdvbkFib3J0Q2FwdHVyZScsXG4gKiAgICAgfSxcbiAqICAgICBkZXBlbmRlbmNpZXM6IFtUT1BfQUJPUlRdLFxuICogICB9LFxuICogICAuLi5cbiAqIH07XG4gKiB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSBuZXcgTWFwKFtcbiAqICAgW1RPUF9BQk9SVCwgeyBzYW1lQ29uZmlnIH1dLFxuICogXSk7XG4gKi9cblxudmFyIGV2ZW50VHVwbGVzID0gWy8vIERpc2NyZXRlIGV2ZW50c1xuW1RPUF9CTFVSLCAnYmx1cicsIERpc2NyZXRlRXZlbnRdLCBbVE9QX0NBTkNFTCwgJ2NhbmNlbCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX0NMSUNLLCAnY2xpY2snLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9DTE9TRSwgJ2Nsb3NlJywgRGlzY3JldGVFdmVudF0sIFtUT1BfQ09OVEVYVF9NRU5VLCAnY29udGV4dE1lbnUnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9DT1BZLCAnY29weScsIERpc2NyZXRlRXZlbnRdLCBbVE9QX0NVVCwgJ2N1dCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX0FVWF9DTElDSywgJ2F1eENsaWNrJywgRGlzY3JldGVFdmVudF0sIFtUT1BfRE9VQkxFX0NMSUNLLCAnZG91YmxlQ2xpY2snLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9EUkFHX0VORCwgJ2RyYWdFbmQnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9EUkFHX1NUQVJULCAnZHJhZ1N0YXJ0JywgRGlzY3JldGVFdmVudF0sIFtUT1BfRFJPUCwgJ2Ryb3AnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9GT0NVUywgJ2ZvY3VzJywgRGlzY3JldGVFdmVudF0sIFtUT1BfSU5QVVQsICdpbnB1dCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX0lOVkFMSUQsICdpbnZhbGlkJywgRGlzY3JldGVFdmVudF0sIFtUT1BfS0VZX0RPV04sICdrZXlEb3duJywgRGlzY3JldGVFdmVudF0sIFtUT1BfS0VZX1BSRVNTLCAna2V5UHJlc3MnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9LRVlfVVAsICdrZXlVcCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX01PVVNFX0RPV04sICdtb3VzZURvd24nLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9NT1VTRV9VUCwgJ21vdXNlVXAnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9QQVNURSwgJ3Bhc3RlJywgRGlzY3JldGVFdmVudF0sIFtUT1BfUEFVU0UsICdwYXVzZScsIERpc2NyZXRlRXZlbnRdLCBbVE9QX1BMQVksICdwbGF5JywgRGlzY3JldGVFdmVudF0sIFtUT1BfUE9JTlRFUl9DQU5DRUwsICdwb2ludGVyQ2FuY2VsJywgRGlzY3JldGVFdmVudF0sIFtUT1BfUE9JTlRFUl9ET1dOLCAncG9pbnRlckRvd24nLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9QT0lOVEVSX1VQLCAncG9pbnRlclVwJywgRGlzY3JldGVFdmVudF0sIFtUT1BfUkFURV9DSEFOR0UsICdyYXRlQ2hhbmdlJywgRGlzY3JldGVFdmVudF0sIFtUT1BfUkVTRVQsICdyZXNldCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX1NFRUtFRCwgJ3NlZWtlZCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX1NVQk1JVCwgJ3N1Ym1pdCcsIERpc2NyZXRlRXZlbnRdLCBbVE9QX1RPVUNIX0NBTkNFTCwgJ3RvdWNoQ2FuY2VsJywgRGlzY3JldGVFdmVudF0sIFtUT1BfVE9VQ0hfRU5ELCAndG91Y2hFbmQnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9UT1VDSF9TVEFSVCwgJ3RvdWNoU3RhcnQnLCBEaXNjcmV0ZUV2ZW50XSwgW1RPUF9WT0xVTUVfQ0hBTkdFLCAndm9sdW1lQ2hhbmdlJywgRGlzY3JldGVFdmVudF0sIC8vIFVzZXItYmxvY2tpbmcgZXZlbnRzXG5bVE9QX0RSQUcsICdkcmFnJywgVXNlckJsb2NraW5nRXZlbnRdLCBbVE9QX0RSQUdfRU5URVIsICdkcmFnRW50ZXInLCBVc2VyQmxvY2tpbmdFdmVudF0sIFtUT1BfRFJBR19FWElULCAnZHJhZ0V4aXQnLCBVc2VyQmxvY2tpbmdFdmVudF0sIFtUT1BfRFJBR19MRUFWRSwgJ2RyYWdMZWF2ZScsIFVzZXJCbG9ja2luZ0V2ZW50XSwgW1RPUF9EUkFHX09WRVIsICdkcmFnT3ZlcicsIFVzZXJCbG9ja2luZ0V2ZW50XSwgW1RPUF9NT1VTRV9NT1ZFLCAnbW91c2VNb3ZlJywgVXNlckJsb2NraW5nRXZlbnRdLCBbVE9QX01PVVNFX09VVCwgJ21vdXNlT3V0JywgVXNlckJsb2NraW5nRXZlbnRdLCBbVE9QX01PVVNFX09WRVIsICdtb3VzZU92ZXInLCBVc2VyQmxvY2tpbmdFdmVudF0sIFtUT1BfUE9JTlRFUl9NT1ZFLCAncG9pbnRlck1vdmUnLCBVc2VyQmxvY2tpbmdFdmVudF0sIFtUT1BfUE9JTlRFUl9PVVQsICdwb2ludGVyT3V0JywgVXNlckJsb2NraW5nRXZlbnRdLCBbVE9QX1BPSU5URVJfT1ZFUiwgJ3BvaW50ZXJPdmVyJywgVXNlckJsb2NraW5nRXZlbnRdLCBbVE9QX1NDUk9MTCwgJ3Njcm9sbCcsIFVzZXJCbG9ja2luZ0V2ZW50XSwgW1RPUF9UT0dHTEUsICd0b2dnbGUnLCBVc2VyQmxvY2tpbmdFdmVudF0sIFtUT1BfVE9VQ0hfTU9WRSwgJ3RvdWNoTW92ZScsIFVzZXJCbG9ja2luZ0V2ZW50XSwgW1RPUF9XSEVFTCwgJ3doZWVsJywgVXNlckJsb2NraW5nRXZlbnRdLCAvLyBDb250aW51b3VzIGV2ZW50c1xuW1RPUF9BQk9SVCwgJ2Fib3J0JywgQ29udGludW91c0V2ZW50XSwgW1RPUF9BTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9BTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9BTklNQVRJT05fU1RBUlQsICdhbmltYXRpb25TdGFydCcsIENvbnRpbnVvdXNFdmVudF0sIFtUT1BfQ0FOX1BMQVksICdjYW5QbGF5JywgQ29udGludW91c0V2ZW50XSwgW1RPUF9DQU5fUExBWV9USFJPVUdILCAnY2FuUGxheVRocm91Z2gnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX0RVUkFUSU9OX0NIQU5HRSwgJ2R1cmF0aW9uQ2hhbmdlJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9FTVBUSUVELCAnZW1wdGllZCcsIENvbnRpbnVvdXNFdmVudF0sIFtUT1BfRU5DUllQVEVELCAnZW5jcnlwdGVkJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9FTkRFRCwgJ2VuZGVkJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9FUlJPUiwgJ2Vycm9yJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9HT1RfUE9JTlRFUl9DQVBUVVJFLCAnZ290UG9pbnRlckNhcHR1cmUnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX0xPQUQsICdsb2FkJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9MT0FERURfREFUQSwgJ2xvYWRlZERhdGEnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX0xPQURFRF9NRVRBREFUQSwgJ2xvYWRlZE1ldGFkYXRhJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9MT0FEX1NUQVJULCAnbG9hZFN0YXJ0JywgQ29udGludW91c0V2ZW50XSwgW1RPUF9MT1NUX1BPSU5URVJfQ0FQVFVSRSwgJ2xvc3RQb2ludGVyQ2FwdHVyZScsIENvbnRpbnVvdXNFdmVudF0sIFtUT1BfUExBWUlORywgJ3BsYXlpbmcnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX1BST0dSRVNTLCAncHJvZ3Jlc3MnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX1NFRUtJTkcsICdzZWVraW5nJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9TVEFMTEVELCAnc3RhbGxlZCcsIENvbnRpbnVvdXNFdmVudF0sIFtUT1BfU1VTUEVORCwgJ3N1c3BlbmQnLCBDb250aW51b3VzRXZlbnRdLCBbVE9QX1RJTUVfVVBEQVRFLCAndGltZVVwZGF0ZScsIENvbnRpbnVvdXNFdmVudF0sIFtUT1BfVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgQ29udGludW91c0V2ZW50XSwgW1RPUF9XQUlUSU5HLCAnd2FpdGluZycsIENvbnRpbnVvdXNFdmVudF1dO1xudmFyIGV2ZW50VHlwZXMgPSB7fTtcbnZhciB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSB7fTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR1cGxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgZXZlbnRUdXBsZSA9IGV2ZW50VHVwbGVzW2ldO1xuICB2YXIgdG9wRXZlbnQgPSBldmVudFR1cGxlWzBdO1xuICB2YXIgZXZlbnQgPSBldmVudFR1cGxlWzFdO1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGV2ZW50VHVwbGVbMl07XG4gIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICB2YXIgb25FdmVudCA9ICdvbicgKyBjYXBpdGFsaXplZEV2ZW50O1xuICB2YXIgY29uZmlnID0ge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBvbkV2ZW50LFxuICAgICAgY2FwdHVyZWQ6IG9uRXZlbnQgKyAnQ2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW3RvcEV2ZW50XSxcbiAgICBldmVudFByaW9yaXR5OiBldmVudFByaW9yaXR5XG4gIH07XG4gIGV2ZW50VHlwZXNbZXZlbnRdID0gY29uZmlnO1xuICB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wRXZlbnRdID0gY29uZmlnO1xufSAvLyBPbmx5IHVzZWQgaW4gREVWIGZvciBleGhhdXN0aXZlbmVzcyB2YWxpZGF0aW9uLlxuXG5cbnZhciBrbm93bkhUTUxUb3BMZXZlbFR5cGVzID0gW1RPUF9BQk9SVCwgVE9QX0NBTkNFTCwgVE9QX0NBTl9QTEFZLCBUT1BfQ0FOX1BMQVlfVEhST1VHSCwgVE9QX0NMT1NFLCBUT1BfRFVSQVRJT05fQ0hBTkdFLCBUT1BfRU1QVElFRCwgVE9QX0VOQ1JZUFRFRCwgVE9QX0VOREVELCBUT1BfRVJST1IsIFRPUF9JTlBVVCwgVE9QX0lOVkFMSUQsIFRPUF9MT0FELCBUT1BfTE9BREVEX0RBVEEsIFRPUF9MT0FERURfTUVUQURBVEEsIFRPUF9MT0FEX1NUQVJULCBUT1BfUEFVU0UsIFRPUF9QTEFZLCBUT1BfUExBWUlORywgVE9QX1BST0dSRVNTLCBUT1BfUkFURV9DSEFOR0UsIFRPUF9SRVNFVCwgVE9QX1NFRUtFRCwgVE9QX1NFRUtJTkcsIFRPUF9TVEFMTEVELCBUT1BfU1VCTUlULCBUT1BfU1VTUEVORCwgVE9QX1RJTUVfVVBEQVRFLCBUT1BfVE9HR0xFLCBUT1BfVk9MVU1FX0NIQU5HRSwgVE9QX1dBSVRJTkddO1xudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuICBnZXRFdmVudFByaW9yaXR5OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlKSB7XG4gICAgdmFyIGNvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIHJldHVybiBjb25maWcgIT09IHVuZGVmaW5lZCA/IGNvbmZpZy5ldmVudFByaW9yaXR5IDogQ29udGludW91c0V2ZW50O1xuICB9LFxuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICB2YXIgZGlzcGF0Y2hDb25maWcgPSB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wTGV2ZWxUeXBlXTtcblxuICAgIGlmICghZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBFdmVudENvbnN0cnVjdG9yO1xuXG4gICAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgVE9QX0tFWV9QUkVTUzpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlIFRPUF9LRVlfRE9XTjpcbiAgICAgIGNhc2UgVE9QX0tFWV9VUDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFRPUF9CTFVSOlxuICAgICAgY2FzZSBUT1BfRk9DVVM6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfQ0xJQ0s6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgVE9QX0FVWF9DTElDSzpcbiAgICAgIGNhc2UgVE9QX0RPVUJMRV9DTElDSzpcbiAgICAgIGNhc2UgVE9QX01PVVNFX0RPV046XG4gICAgICBjYXNlIFRPUF9NT1VTRV9NT1ZFOlxuICAgICAgY2FzZSBUT1BfTU9VU0VfVVA6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlIFRPUF9NT1VTRV9PVVQ6XG4gICAgICBjYXNlIFRPUF9NT1VTRV9PVkVSOlxuICAgICAgY2FzZSBUT1BfQ09OVEVYVF9NRU5VOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVE9QX0RSQUc6XG4gICAgICBjYXNlIFRPUF9EUkFHX0VORDpcbiAgICAgIGNhc2UgVE9QX0RSQUdfRU5URVI6XG4gICAgICBjYXNlIFRPUF9EUkFHX0VYSVQ6XG4gICAgICBjYXNlIFRPUF9EUkFHX0xFQVZFOlxuICAgICAgY2FzZSBUT1BfRFJBR19PVkVSOlxuICAgICAgY2FzZSBUT1BfRFJBR19TVEFSVDpcbiAgICAgIGNhc2UgVE9QX0RST1A6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFRPUF9UT1VDSF9DQU5DRUw6XG4gICAgICBjYXNlIFRPUF9UT1VDSF9FTkQ6XG4gICAgICBjYXNlIFRPUF9UT1VDSF9NT1ZFOlxuICAgICAgY2FzZSBUT1BfVE9VQ0hfU1RBUlQ6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfQU5JTUFUSU9OX0VORDpcbiAgICAgIGNhc2UgVE9QX0FOSU1BVElPTl9JVEVSQVRJT046XG4gICAgICBjYXNlIFRPUF9BTklNQVRJT05fU1RBUlQ6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVE9QX1RSQU5TSVRJT05fRU5EOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfU0NST0xMOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVE9QX1dIRUVMOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVE9QX0NPUFk6XG4gICAgICBjYXNlIFRPUF9DVVQ6XG4gICAgICBjYXNlIFRPUF9QQVNURTpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfR09UX1BPSU5URVJfQ0FQVFVSRTpcbiAgICAgIGNhc2UgVE9QX0xPU1RfUE9JTlRFUl9DQVBUVVJFOlxuICAgICAgY2FzZSBUT1BfUE9JTlRFUl9DQU5DRUw6XG4gICAgICBjYXNlIFRPUF9QT0lOVEVSX0RPV046XG4gICAgICBjYXNlIFRPUF9QT0lOVEVSX01PVkU6XG4gICAgICBjYXNlIFRPUF9QT0lOVEVSX09VVDpcbiAgICAgIGNhc2UgVE9QX1BPSU5URVJfT1ZFUjpcbiAgICAgIGNhc2UgVE9QX1BPSU5URVJfVVA6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGtub3duSFRNTFRvcExldmVsVHlwZXMuaW5kZXhPZih0b3BMZXZlbFR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLiBUaGlzIHdhcm5pbmcgJyArICdpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCB0b3BMZXZlbFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBIVE1MIEV2ZW50c1xuICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2luZGV4Lmh0bWwjZXZlbnRzLTBcblxuXG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50ID0gRXZlbnRDb25zdHJ1Y3Rvci5nZXRQb29sZWQoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG59O1xuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChlbmFibGVGbGFyZUFQSSAmJiBjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHdvdWxkIHVzZSBkeW5hbWljIGRpc3BhdGNoIGZvclxuLy8gQ29tbW9uSlMgaW50ZXJvcCBuYW1lZCBpbXBvcnRzLlxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk7XG52YXIgcnVuV2l0aFByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xudmFyIGdldEV2ZW50UHJpb3JpdHkgPSBTaW1wbGVFdmVudFBsdWdpbi5nZXRFdmVudFByaW9yaXR5O1xudmFyIENBTExCQUNLX0JPT0tLRUVQSU5HX1BPT0xfU0laRSA9IDEwO1xudmFyIGNhbGxiYWNrQm9va2tlZXBpbmdQb29sID0gW107XG5cbi8qKlxuICogRmluZCB0aGUgZGVlcGVzdCBSZWFjdCBjb21wb25lbnQgY29tcGxldGVseSBjb250YWluaW5nIHRoZSByb290IG9mIHRoZVxuICogcGFzc2VkLWluIGluc3RhbmNlIChmb3IgdXNlIHdoZW4gZW50aXJlIFJlYWN0IHRyZWVzIGFyZSBuZXN0ZWQgd2l0aGluIGVhY2hcbiAqIG90aGVyKS4gSWYgUmVhY3QgdHJlZXMgYXJlIG5vdCBuZXN0ZWQsIHJldHVybnMgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZmluZFJvb3RDb250YWluZXJOb2RlKGluc3QpIHtcbiAgaWYgKGluc3QudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICB9IC8vIFRPRE86IEl0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBjYWNoZSB0aGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgRE9NXG4gIC8vIHRyYXZlcnNhbCwgYnV0IGNhY2hpbmcgaXMgZGlmZmljdWx0IHRvIGRvIGNvcnJlY3RseSB3aXRob3V0IHVzaW5nIGFcbiAgLy8gbXV0YXRpb24gb2JzZXJ2ZXIgdG8gbGlzdGVuIGZvciBhbGwgRE9NIGNoYW5nZXMuXG5cblxuICB3aGlsZSAoaW5zdC5yZXR1cm4pIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47XG4gIH1cblxuICBpZiAoaW5zdC50YWcgIT09IEhvc3RSb290KSB7XG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGluIGEgZGV0YWNoZWQgdHJlZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBpbnN0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xufSAvLyBVc2VkIHRvIHN0b3JlIGFuY2VzdG9yIGhpZXJhcmNoeSBpbiB0b3AgbGV2ZWwgY2FsbGJhY2tcblxuXG5mdW5jdGlvbiBnZXRUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgZXZlbnRTeXN0ZW1GbGFncykge1xuICBpZiAoY2FsbGJhY2tCb29ra2VlcGluZ1Bvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gY2FsbGJhY2tCb29ra2VlcGluZ1Bvb2wucG9wKCk7XG4gICAgaW5zdGFuY2UudG9wTGV2ZWxUeXBlID0gdG9wTGV2ZWxUeXBlO1xuICAgIGluc3RhbmNlLmV2ZW50U3lzdGVtRmxhZ3MgPSBldmVudFN5c3RlbUZsYWdzO1xuICAgIGluc3RhbmNlLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgaW5zdGFuY2UudGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3BMZXZlbFR5cGU6IHRvcExldmVsVHlwZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzLFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRJbnN0OiB0YXJnZXRJbnN0LFxuICAgIGFuY2VzdG9yczogW11cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZVRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyhpbnN0YW5jZSkge1xuICBpbnN0YW5jZS50b3BMZXZlbFR5cGUgPSBudWxsO1xuICBpbnN0YW5jZS5uYXRpdmVFdmVudCA9IG51bGw7XG4gIGluc3RhbmNlLnRhcmdldEluc3QgPSBudWxsO1xuICBpbnN0YW5jZS5hbmNlc3RvcnMubGVuZ3RoID0gMDtcblxuICBpZiAoY2FsbGJhY2tCb29ra2VlcGluZ1Bvb2wubGVuZ3RoIDwgQ0FMTEJBQ0tfQk9PS0tFRVBJTkdfUE9PTF9TSVpFKSB7XG4gICAgY2FsbGJhY2tCb29ra2VlcGluZ1Bvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9wTGV2ZWwoYm9va0tlZXBpbmcpIHtcbiAgdmFyIHRhcmdldEluc3QgPSBib29rS2VlcGluZy50YXJnZXRJbnN0OyAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVyZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBidWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVudCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxlYWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2FjaGUuIFNlZSAjMTEwNS5cblxuICB2YXIgYW5jZXN0b3IgPSB0YXJnZXRJbnN0O1xuXG4gIGRvIHtcbiAgICBpZiAoIWFuY2VzdG9yKSB7XG4gICAgICB2YXIgYW5jZXN0b3JzID0gYm9va0tlZXBpbmcuYW5jZXN0b3JzO1xuICAgICAgYW5jZXN0b3JzLnB1c2goYW5jZXN0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHJvb3QgPSBmaW5kUm9vdENvbnRhaW5lck5vZGUoYW5jZXN0b3IpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gYW5jZXN0b3IudGFnO1xuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBib29rS2VlcGluZy5hbmNlc3RvcnMucHVzaChhbmNlc3Rvcik7XG4gICAgfVxuXG4gICAgYW5jZXN0b3IgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyb290KTtcbiAgfSB3aGlsZSAoYW5jZXN0b3IpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYm9va0tlZXBpbmcuYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGFyZ2V0SW5zdCA9IGJvb2tLZWVwaW5nLmFuY2VzdG9yc1tpXTtcbiAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChib29rS2VlcGluZy5uYXRpdmVFdmVudCk7XG4gICAgdmFyIHRvcExldmVsVHlwZSA9IGJvb2tLZWVwaW5nLnRvcExldmVsVHlwZTtcbiAgICB2YXIgbmF0aXZlRXZlbnQgPSBib29rS2VlcGluZy5uYXRpdmVFdmVudDtcbiAgICBydW5FeHRyYWN0ZWRQbHVnaW5FdmVudHNJbkJhdGNoKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIGV2ZW50VGFyZ2V0LCBib29rS2VlcGluZy5ldmVudFN5c3RlbUZsYWdzKTtcbiAgfVxufSAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cblxudmFyIF9lbmFibGVkID0gdHJ1ZTtcbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGUsIGVsZW1lbnQpIHtcbiAgdHJhcEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZWxlbWVudCwgdG9wTGV2ZWxUeXBlLCBmYWxzZSk7XG59XG5mdW5jdGlvbiB0cmFwQ2FwdHVyZWRFdmVudCh0b3BMZXZlbFR5cGUsIGVsZW1lbnQpIHtcbiAgdHJhcEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZWxlbWVudCwgdG9wTGV2ZWxUeXBlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIHRyYXBFdmVudEZvclJlc3BvbmRlckV2ZW50U3lzdGVtKGVsZW1lbnQsIHRvcExldmVsVHlwZSwgcGFzc2l2ZSkge1xuICBpZiAoZW5hYmxlRmxhcmVBUEkpIHtcbiAgICB2YXIgcmF3RXZlbnROYW1lID0gZ2V0UmF3RXZlbnROYW1lKHRvcExldmVsVHlwZSk7XG4gICAgdmFyIGV2ZW50RmxhZ3MgPSBSRVNQT05ERVJfRVZFTlRfU1lTVEVNOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gICAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZSwgYnV0IHdlIGZsYWcgaXQgYXMgdXNpbmcgbm90IGJlaW5nXG4gICAgLy8gc3VwcG9ydGVkIHRvby4gVGhpcyB3YXkgdGhlIHJlc3BvbmRlciBldmVudCBwbHVnaW5zIGtub3csXG4gICAgLy8gYW5kIGNhbiBwcm92aWRlIHBvbHlmaWxscyBpZiBuZWVkZWQuXG5cbiAgICBpZiAocGFzc2l2ZSkge1xuICAgICAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgICAgIGV2ZW50RmxhZ3MgfD0gSVNfUEFTU0lWRTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50RmxhZ3MgfD0gSVNfQUNUSVZFO1xuICAgICAgICBldmVudEZsYWdzIHw9IFBBU1NJVkVfTk9UX1NVUFBPUlRFRDtcbiAgICAgICAgcGFzc2l2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmVudEZsYWdzIHw9IElTX0FDVElWRTtcbiAgICB9IC8vIENoZWNrIGlmIGludGVyYWN0aXZlIGFuZCB3cmFwIGluIGRpc2NyZXRlVXBkYXRlc1xuXG5cbiAgICB2YXIgbGlzdGVuZXIgPSBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgdG9wTGV2ZWxUeXBlLCBldmVudEZsYWdzKTtcblxuICAgIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgICAgYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcoZWxlbWVudCwgcmF3RXZlbnROYW1lLCBsaXN0ZW5lciwgcGFzc2l2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKGVsZW1lbnQsIHJhd0V2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFwRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShlbGVtZW50LCB0b3BMZXZlbFR5cGUsIGNhcHR1cmUpIHtcbiAgdmFyIGxpc3RlbmVyO1xuXG4gIHN3aXRjaCAoZ2V0RXZlbnRQcmlvcml0eSh0b3BMZXZlbFR5cGUpKSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50OlxuICAgICAgbGlzdGVuZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUsIFBMVUdJTl9FVkVOVF9TWVNURU0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgbGlzdGVuZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZS5iaW5kKG51bGwsIHRvcExldmVsVHlwZSwgUExVR0lOX0VWRU5UX1NZU1RFTSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50OlxuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lciA9IGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUsIFBMVUdJTl9FVkVOVF9TWVNURU0pO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcmF3RXZlbnROYW1lID0gZ2V0UmF3RXZlbnROYW1lKHRvcExldmVsVHlwZSk7XG5cbiAgaWYgKGNhcHR1cmUpIHtcbiAgICBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcihlbGVtZW50LCByYXdFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKGVsZW1lbnQsIHJhd0V2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudCh0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgZGlzY3JldGVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZSh0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEsIGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbSh0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0KSB7XG4gIHZhciBib29rS2VlcGluZyA9IGdldFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCBldmVudFN5c3RlbUZsYWdzKTtcblxuICB0cnkge1xuICAgIC8vIEV2ZW50IHF1ZXVlIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSBjeWNsZSBhbGxvd3NcbiAgICAvLyBgcHJldmVudERlZmF1bHRgLlxuICAgIGJhdGNoZWRFdmVudFVwZGF0ZXMoaGFuZGxlVG9wTGV2ZWwsIGJvb2tLZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICByZWxlYXNlVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nKGJvb2tLZWVwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpICYmIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQodG9wTGV2ZWxUeXBlKSkge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cywgYW5kIHRoaXMgaXMgYW5vdGhlciBkaXNjcmV0ZVxuICAgIC8vIGV2ZW50LCB0aGVuIHdlIGNhbid0IGRpc3BhdGNoIGl0IHJlZ2FyZGxlc3Mgb2YgaXRzIHRhcmdldCwgc2luY2UgdGhleVxuICAgIC8vIG5lZWQgdG8gZGlzcGF0Y2ggaW4gb3JkZXIuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KG51bGwsIC8vIEZsYWdzIHRoYXQgd2UncmUgbm90IGFjdHVhbGx5IGJsb2NrZWQgb24gYW55dGhpbmcgYXMgZmFyIGFzIHdlIGtub3cuXG4gICAgdG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQodG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudCh0b3BMZXZlbFR5cGUpKSB7XG4gICAgLy8gVGhpcyB0aGlzIHRvIGJlIHJlcGxheWVkIGxhdGVyIG9uY2UgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgdG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCB0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBXZSBuZWVkIHRvIGNsZWFyIG9ubHkgaWYgd2UgZGlkbid0IHF1ZXVlIGJlY2F1c2VcbiAgLy8gcXVldWVpbmcgaXMgYWNjdW1tdWxhdGl2ZS5cblxuXG4gIGNsZWFySWZDb250aW51b3VzRXZlbnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cbiAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgaWYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBQTFVHSU5fRVZFTlRfU1lTVEVNKSB7XG4gICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0odG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBSRVNQT05ERVJfRVZFTlRfU1lTVEVNKSB7XG4gICAgICAvLyBSZWFjdCBGbGFyZSBldmVudCBzeXN0ZW1cbiAgICAgIGRpc3BhdGNoRXZlbnRGb3JSZXNwb25kZXJFdmVudFN5c3RlbSh0b3BMZXZlbFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCksIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0odG9wTGV2ZWxUeXBlLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCk7XG4gIH1cbn0gLy8gQXR0ZW1wdCBkaXNwYXRjaGluZyBhbiBldmVudC4gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudCh0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRPRE86IFdhcm4gaWYgX2VuYWJsZWQgaXMgZmFsc2UuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMgZHVyaW5nIGEgcmVwbGF5IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBpdCBtaWdodCBibG9ja1xuICAgICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0uXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgICAgICAvLyBjb21wb25lbnQncyBtb3VudCwgaWdub3JlIGl0IGZvciBub3cgKHRoYXQgaXMsIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyBhblxuICAgICAgICAvLyBldmVudCBvbiBhIG5vbi1SZWFjdCB0cmVlKS4gV2UgbWlnaHQgYWxzbyBjb25zaWRlciBxdWV1ZWluZyBldmVudHMgYW5kXG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlRmxhcmVBUEkpIHtcbiAgICBpZiAoZXZlbnRTeXN0ZW1GbGFncyAmIFBMVUdJTl9FVkVOVF9TWVNURU0pIHtcbiAgICAgIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbSh0b3BMZXZlbFR5cGUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRTeXN0ZW1GbGFncyAmIFJFU1BPTkRFUl9FVkVOVF9TWVNURU0pIHtcbiAgICAgIC8vIFJlYWN0IEZsYXJlIGV2ZW50IHN5c3RlbVxuICAgICAgZGlzcGF0Y2hFdmVudEZvclJlc3BvbmRlckV2ZW50U3lzdGVtKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKHRvcExldmVsVHlwZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QpO1xuICB9IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2N1bWVudDtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG4vKipcbiAqIFN1bW1hcnkgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgZXZlbnQgaGFuZGxpbmc6XG4gKlxuICogIC0gVG9wLWxldmVsIGRlbGVnYXRpb24gaXMgdXNlZCB0byB0cmFwIG1vc3QgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBUaGlzXG4gKiAgICBtYXkgb25seSBvY2N1ciBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuICogICAgUmVhY3RET01FdmVudExpc3RlbmVyLCB3aGljaCBpcyBpbmplY3RlZCBhbmQgY2FuIHRoZXJlZm9yZSBzdXBwb3J0XG4gKiAgICBwbHVnZ2FibGUgZXZlbnQgc291cmNlcy4gVGhpcyBpcyB0aGUgb25seSB3b3JrIHRoYXQgb2NjdXJzIGluIHRoZSBtYWluXG4gKiAgICB0aHJlYWQuXG4gKlxuICogIC0gV2Ugbm9ybWFsaXplIGFuZCBkZS1kdXBsaWNhdGUgZXZlbnRzIHRvIGFjY291bnQgZm9yIGJyb3dzZXIgcXVpcmtzLiBUaGlzXG4gKiAgICBtYXkgYmUgZG9uZSBpbiB0aGUgd29ya2VyIHRocmVhZC5cbiAqXG4gKiAgLSBGb3J3YXJkIHRoZXNlIG5hdGl2ZSBldmVudHMgKHdpdGggdGhlIGFzc29jaWF0ZWQgdG9wLWxldmVsIHR5cGUgdXNlZCB0b1xuICogICAgdHJhcCBpdCkgdG8gYEV2ZW50UGx1Z2luSHViYCwgd2hpY2ggaW4gdHVybiB3aWxsIGFzayBwbHVnaW5zIGlmIHRoZXkgd2FudFxuICogICAgdG8gZXh0cmFjdCBhbnkgc3ludGhldGljIGV2ZW50cy5cbiAqXG4gKiAgLSBUaGUgYEV2ZW50UGx1Z2luSHViYCB3aWxsIHRoZW4gcHJvY2VzcyBlYWNoIGV2ZW50IGJ5IGFubm90YXRpbmcgdGhlbSB3aXRoXG4gKiAgICBcImRpc3BhdGNoZXNcIiwgYSBzZXF1ZW5jZSBvZiBsaXN0ZW5lcnMgYW5kIElEcyB0aGF0IGNhcmUgYWJvdXQgdGhhdCBldmVudC5cbiAqXG4gKiAgLSBUaGUgYEV2ZW50UGx1Z2luSHViYCB0aGVuIGRpc3BhdGNoZXMgdGhlIGV2ZW50cy5cbiAqXG4gKiBPdmVydmlldyBvZiBSZWFjdCBhbmQgdGhlIGV2ZW50IHN5c3RlbTpcbiAqXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiB8ICAgIERPTSAgICAgfCAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiAgICAgICB8ICAgICAgICAgICAuXG4gKiAgICAgICB2ICAgICAgICAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuXG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuXG4gKiB8ICBMaXN0ZW5lciAgfCAgICAuXG4gKiArLS0tLS0tLS0tLS0tKyAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICArLS0tLS0tLS0rfFNpbXBsZUV2ZW50fFxuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgIHwgICAgICAgICB8UGx1Z2luICAgICB8XG4gKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgdiAgICAgICAgICstLS0tLS0tLS0tLStcbiAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fEV2ZW50UGx1Z2luSHVifCAgICAgICAgICAgICAgICAgICAgfCAgICBFdmVudCAgIHxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCBQcm9wYWdhdG9yc3xcbiAqIHwgUmVhY3RFdmVudCB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgfFRhcEV2ZW50ICAgfCAgfC0tLS0tLS0tLS0tLXxcbiAqIHwgIEVtaXR0ZXIgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfDwtLS0rfFBsdWdpbiAgICAgfCAgfG90aGVyIHBsdWdpbnxcbiAqIHwgICAgICAgICAgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCAgdXRpbGl0aWVzIHxcbiAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLStcbiAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tK1xuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICBeICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgIHwgICAgICAgIHxFbnRlci9MZWF2ZXxcbiAqICAgICAgICsgICAgICAgICAgIC4gICAgICAgICAgICAgICAgKy0tLS0tLS0rfFBsdWdpbiAgICAgfFxuICogKy0tLS0tLS0tLS0tLS0rICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8IGFwcGxpY2F0aW9uIHwgICAuXG4gKiB8LS0tLS0tLS0tLS0tLXwgICAuXG4gKiB8ICAgICAgICAgICAgIHwgICAuXG4gKiB8ICAgICAgICAgICAgIHwgICAuXG4gKiArLS0tLS0tLS0tLS0tLSsgICAuXG4gKiAgICAgICAgICAgICAgICAgICAuXG4gKiAgICBSZWFjdCBDb3JlICAgICAuICBHZW5lcmFsIFB1cnBvc2UgRXZlbnQgUGx1Z2luIFN5c3RlbVxuICovXG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG52YXIgZWxlbWVudExpc3RlbmluZ1NldHMgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRMaXN0ZW5pbmdTZXRGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGxpc3RlbmluZ1NldCA9IGVsZW1lbnRMaXN0ZW5pbmdTZXRzLmdldChlbGVtZW50KTtcblxuICBpZiAobGlzdGVuaW5nU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBsaXN0ZW5pbmdTZXQgPSBuZXcgU2V0KCk7XG4gICAgZWxlbWVudExpc3RlbmluZ1NldHMuc2V0KGVsZW1lbnQsIGxpc3RlbmluZ1NldCk7XG4gIH1cblxuICByZXR1cm4gbGlzdGVuaW5nU2V0O1xufVxuLyoqXG4gKiBXZSBsaXN0ZW4gZm9yIGJ1YmJsZWQgdG91Y2ggZXZlbnRzIG9uIHRoZSBkb2N1bWVudCBvYmplY3QuXG4gKlxuICogRmlyZWZveCB2OC4wMSAoYW5kIHBvc3NpYmx5IG90aGVycykgZXhoaWJpdGVkIHN0cmFuZ2UgYmVoYXZpb3Igd2hlblxuICogbW91bnRpbmcgYG9ubW91c2Vtb3ZlYCBldmVudHMgYXQgc29tZSBub2RlIHRoYXQgd2FzIG5vdCB0aGUgZG9jdW1lbnRcbiAqIGVsZW1lbnQuIFRoZSBzeW1wdG9tcyB3ZXJlIHRoYXQgaWYgeW91ciBtb3VzZSBpcyBub3QgbW92aW5nIG92ZXIgc29tZXRoaW5nXG4gKiBjb250YWluZWQgd2l0aGluIHRoYXQgbW91bnQgcG9pbnQgKGZvciBleGFtcGxlIG9uIHRoZSBiYWNrZ3JvdW5kKSB0aGVcbiAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgZm9yIGBvbm1vdXNlbW92ZWAgd29uJ3QgYmUgY2FsbGVkLiBIb3dldmVyLCBpZiB5b3VcbiAqIHJlZ2lzdGVyIHRoZSBgbW91c2Vtb3ZlYCBvbiB0aGUgZG9jdW1lbnQgb2JqZWN0LCB0aGVuIGl0IHdpbGwgb2YgY291cnNlXG4gKiBjYXRjaCBhbGwgYG1vdXNlbW92ZWBzLiBUaGlzIGFsb25nIHdpdGggaU9TIHF1aXJrcywganVzdGlmaWVzIHJlc3RyaWN0aW5nXG4gKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudCBvYmplY3Qgb25seSwgYXQgbGVhc3QgZm9yIHRoZXNlXG4gKiBtb3ZlbWVudCB0eXBlcyBvZiBldmVudHMgYW5kIHBvc3NpYmx5IGFsbCBldmVudHMuXG4gKlxuICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICpcbiAqIEFsc28sIGBrZXl1cGAvYGtleXByZXNzYC9ga2V5ZG93bmAgZG8gbm90IGJ1YmJsZSB0byB0aGUgd2luZG93IG9uIElFLCBidXRcbiAqIHRoZXkgYnViYmxlIHRvIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb3VudEF0IENvbnRhaW5lciB3aGVyZSB0byBtb3VudCB0aGUgbGlzdGVuZXJcbiAqL1xuXG5mdW5jdGlvbiBsaXN0ZW5UbyhyZWdpc3RyYXRpb25OYW1lLCBtb3VudEF0KSB7XG4gIHZhciBsaXN0ZW5pbmdTZXQgPSBnZXRMaXN0ZW5pbmdTZXRGb3JFbGVtZW50KG1vdW50QXQpO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jaWVzW2ldO1xuICAgIGxpc3RlblRvVG9wTGV2ZWwoZGVwZW5kZW5jeSwgbW91bnRBdCwgbGlzdGVuaW5nU2V0KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9Ub3BMZXZlbCh0b3BMZXZlbFR5cGUsIG1vdW50QXQsIGxpc3RlbmluZ1NldCkge1xuICBpZiAoIWxpc3RlbmluZ1NldC5oYXModG9wTGV2ZWxUeXBlKSkge1xuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlIFRPUF9TQ1JPTEw6XG4gICAgICAgIHRyYXBDYXB0dXJlZEV2ZW50KFRPUF9TQ1JPTEwsIG1vdW50QXQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfRk9DVVM6XG4gICAgICBjYXNlIFRPUF9CTFVSOlxuICAgICAgICB0cmFwQ2FwdHVyZWRFdmVudChUT1BfRk9DVVMsIG1vdW50QXQpO1xuICAgICAgICB0cmFwQ2FwdHVyZWRFdmVudChUT1BfQkxVUiwgbW91bnRBdCk7IC8vIFdlIHNldCB0aGUgZmxhZyBmb3IgYSBzaW5nbGUgZGVwZW5kZW5jeSBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLFxuICAgICAgICAvLyBidXQgdGhpcyBlbnN1cmVzIHdlIG1hcmsgYm90aCBhcyBhdHRhY2hlZCByYXRoZXIgdGhhbiBqdXN0IG9uZS5cblxuICAgICAgICBsaXN0ZW5pbmdTZXQuYWRkKFRPUF9CTFVSKTtcbiAgICAgICAgbGlzdGVuaW5nU2V0LmFkZChUT1BfRk9DVVMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfQ0FOQ0VMOlxuICAgICAgY2FzZSBUT1BfQ0xPU0U6XG4gICAgICAgIGlmIChpc0V2ZW50U3VwcG9ydGVkKGdldFJhd0V2ZW50TmFtZSh0b3BMZXZlbFR5cGUpKSkge1xuICAgICAgICAgIHRyYXBDYXB0dXJlZEV2ZW50KHRvcExldmVsVHlwZSwgbW91bnRBdCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUT1BfSU5WQUxJRDpcbiAgICAgIGNhc2UgVE9QX1NVQk1JVDpcbiAgICAgIGNhc2UgVE9QX1JFU0VUOlxuICAgICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlbSBvbiB0aGUgdGFyZ2V0IERPTSBlbGVtZW50cy5cbiAgICAgICAgLy8gU29tZSBvZiB0aGVtIGJ1YmJsZSBzbyB3ZSBkb24ndCB3YW50IHRoZW0gdG8gZmlyZSB0d2ljZS5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIGxpc3RlbiBvbiB0aGUgdG9wIGxldmVsIHRvIGFsbCBub24tbWVkaWEgZXZlbnRzLlxuICAgICAgICAvLyBNZWRpYSBldmVudHMgZG9uJ3QgYnViYmxlIHNvIGFkZGluZyB0aGUgbGlzdGVuZXIgd291bGRuJ3QgZG8gYW55dGhpbmcuXG4gICAgICAgIHZhciBpc01lZGlhRXZlbnQgPSBtZWRpYUV2ZW50VHlwZXMuaW5kZXhPZih0b3BMZXZlbFR5cGUpICE9PSAtMTtcblxuICAgICAgICBpZiAoIWlzTWVkaWFFdmVudCkge1xuICAgICAgICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlLCBtb3VudEF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxpc3RlbmluZ1NldC5hZGQodG9wTGV2ZWxUeXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNMaXN0ZW5pbmdUb0FsbERlcGVuZGVuY2llcyhyZWdpc3RyYXRpb25OYW1lLCBtb3VudEF0KSB7XG4gIHZhciBsaXN0ZW5pbmdTZXQgPSBnZXRMaXN0ZW5pbmdTZXRGb3JFbGVtZW50KG1vdW50QXQpO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jaWVzW2ldO1xuXG4gICAgaWYgKCFsaXN0ZW5pbmdTZXQuaGFzKGRlcGVuZGVuY3kpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTsgLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcblxuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICghaXNDdXN0b21Qcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEoaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIGlmICghd2FybkFib3V0U2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1trZXldO1xuICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICB2YXIgd2FybmluZ0tleSA9IG9yaWdpbmFsS2V5ICsgJywnICsgY29ycmVjdE9yaWdpbmFsS2V5O1xuXG4gICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgd2hpdGVsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxuLy8gb3IgYWRkIHN0YWNrIGJ5IGRlZmF1bHQgdG8gaW52YXJpYW50cyB3aGVyZSBwb3NzaWJsZS5cblxudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMyA9IG51bGw7XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IodGFnICsgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiArIChSZWFjdERlYnVnQ3VycmVudEZyYW1lJDMuZ2V0U3RhY2tBZGRlbmR1bSgpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIEhUTUwkMSBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC1pbnZhcmlhbnQtZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAhKHByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyB8fCAhcHJvcHMuY29udGVudEVkaXRhYmxlIHx8IHByb3BzLmNoaWxkcmVuID09IG51bGwpID8gd2FybmluZyQxKGZhbHNlLCAnQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYgKCEocHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiICsgKFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMy5nZXRTdGFja0FkZGVuZHVtKCkpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyB3aGl0ZWxpc3QgdG9vIG11Y2ggYmVjYXVzZSB3ZSBleHBlY3QgaXQgdG8gbmV2ZXIgZ3Jvdy5cbiAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdHJhY2sgdGhlIG5hbWVzcGFjZSBpbiBhIGZldyBwbGFjZXMgd2hpY2ggaXMgY29udm9sdXRlZC5cbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3VzdG9tLWVsZW1lbnRzLWNvcmUtY29uY2VwdHNcbiAgICBjYXNlICdhbm5vdGF0aW9uLXhtbCc6XG4gICAgY2FzZSAnY29sb3ItcHJvZmlsZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlJzpcbiAgICBjYXNlICdmb250LWZhY2Utc3JjJzpcbiAgICBjYXNlICdmb250LWZhY2UtdXJpJzpcbiAgICBjYXNlICdmb250LWZhY2UtZm9ybWF0JzpcbiAgICBjYXNlICdmb250LWZhY2UtbmFtZSc6XG4gICAgY2FzZSAnbWlzc2luZy1nbHlwaCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgd2hpdGVsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGV0YWlscyc6IDAsXG4gICdhcmlhLWRpc2FibGVkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaGlkZGVuJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaW52YWxpZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICdhcmlhLWxhYmVsJzogMCxcbiAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogMCxcbiAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgJ2FyaWEtY2hlY2tlZCc6IDAsXG4gICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAnYXJpYS1sZXZlbCc6IDAsXG4gICdhcmlhLW1vZGFsJzogMCxcbiAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogMCxcbiAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICdhcmlhLXByZXNzZWQnOiAwLFxuICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgJ2FyaWEtc2VsZWN0ZWQnOiAwLFxuICAnYXJpYS1zb3J0JzogMCxcbiAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAnYXJpYS12YWx1ZW1pbic6IDAsXG4gICdhcmlhLXZhbHVlbm93JzogMCxcbiAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgLy8gTGl2ZSBSZWdpb24gQXR0cmlidXRlc1xuICAnYXJpYS1hdG9taWMnOiAwLFxuICAnYXJpYS1idXN5JzogMCxcbiAgJ2FyaWEtbGl2ZSc6IDAsXG4gICdhcmlhLXJlbGV2YW50JzogMCxcbiAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWRyb3BlZmZlY3QnOiAwLFxuICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IDAsXG4gICdhcmlhLWNvbGNvdW50JzogMCxcbiAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAnYXJpYS1jb2xzcGFuJzogMCxcbiAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICdhcmlhLWVycm9ybWVzc2FnZSc6IDAsXG4gICdhcmlhLWZsb3d0byc6IDAsXG4gICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAnYXJpYS1vd25zJzogMCxcbiAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICdhcmlhLXJvd2luZGV4JzogMCxcbiAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICdhcmlhLXNldHNpemUnOiAwXG59O1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgfSkuam9pbignLCAnKTtcblxuICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9pbnZhbGlkLWFyaWEtcHJvcCcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvaW52YWxpZC1hcmlhLXByb3AnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcyk7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vO1xuICB2YXIgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS87XG4gIHZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG4gIHZhciByQVJJQUNhbWVsJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBjYW5Vc2VFdmVudFN5c3RlbSkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChjYW5Vc2VFdmVudFN5c3RlbSkge1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIExldCB0aGUgQVJJQSBhdHRyaWJ1dGUgaG9vayB2YWxpZGF0ZSBBUklBIGF0dHJpYnV0ZXNcblxuXG4gICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2FyaWEnKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaXMnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcbiAgICB2YXIgaXNSZXNlcnZlZCA9IHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7IC8vIEtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIG1hdGNoIHRoZSBjYXNpbmcgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXJ0eSBjb25maWcuXG5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZCAmJiBuYW1lICE9PSBsb3dlckNhc2VkTmFtZSkge1xuICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGxvd2VyY2FzZSBjYXNpbmcgc2luY2UgdGhhdCdzIGhvdyB0aGV5XG4gICAgICAvLyB3aWxsIGJlIGNhc2VkIGFueXdheSB3aXRoIHNlcnZlciByZW5kZXJpbmcuXG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBjYW5Vc2VFdmVudFN5c3RlbSkge1xuICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBjYW5Vc2VFdmVudFN5c3RlbSk7XG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICB9KS5qb2luKCcsICcpO1xuXG4gIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtYXR0cmlidXRlLWJlaGF2aW9yJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtYXR0cmlidXRlLWJlaGF2aW9yJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywgY2FuVXNlRXZlbnRTeXN0ZW0pIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgY2FuVXNlRXZlbnRTeXN0ZW0pO1xufVxuXG4vLyBUT0RPOiBkaXJlY3QgaW1wb3J0cyBsaWtlIHNvbWUtcGFja2FnZS9zcmMvKiBhcmUgYmFkLiBGaXggbWUuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuU2hhZHlET00gPSBmYWxzZTtcbnZhciBkaWRXYXJuU2NyaXB0VGFncyA9IGZhbHNlO1xudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIEhUTUwgPSAnX19odG1sJztcbnZhciBMSVNURU5FUlMgPSAnbGlzdGVuZXJzJztcbnZhciBIVE1MX05BTUVTUEFDRSA9IE5hbWVzcGFjZXMuaHRtbDtcbnZhciB3YXJuZWRVbmtub3duVGFncztcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc7XG52YXIgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudDtcbnZhciB3YXJuRm9yVGV4dERpZmZlcmVuY2U7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlO1xudmFyIG5vcm1hbGl6ZUhUTUw7XG5cbntcbiAgd2FybmVkVW5rbm93blRhZ3MgPSB7XG4gICAgLy8gQ2hyb21lIGlzIHRoZSBvbmx5IG1ham9yIGJyb3dzZXIgbm90IHNoaXBwaW5nIDx0aW1lPi4gQnV0IGFzIG9mIEp1bHlcbiAgICAvLyAyMDE3IGl0IGludGVuZHMgdG8gc2hpcCBpdCBkdWUgdG8gd2lkZXNwcmVhZCB1c2FnZS4gV2UgaW50ZW50aW9uYWxseVxuICAgIC8vICpkb24ndCogd2FybiBmb3IgPHRpbWU+IGV2ZW4gaWYgaXQncyB1bnJlY29nbml6ZWQgYnkgQ2hyb21lIGJlY2F1c2VcbiAgICAvLyBpdCBzb29uIHdpbGwgYmUsIGFuZCBtYW55IGFwcHMgaGF2ZSBiZWVuIHVzaW5nIGl0IGFueXdheS5cbiAgICB0aW1lOiB0cnVlLFxuICAgIC8vIFRoZXJlIGFyZSB3b3JraW5nIHBvbHlmaWxscyBmb3IgPGRpYWxvZz4uIExldCBwZW9wbGUgdXNlIGl0LlxuICAgIGRpYWxvZzogdHJ1ZSxcbiAgICAvLyBFbGVjdHJvbiBzaGlwcyBhIGN1c3RvbSA8d2Vidmlldz4gdGFnIHRvIGRpc3BsYXkgZXh0ZXJuYWwgd2ViIGNvbnRlbnQgaW5cbiAgICAvLyBhbiBpc29sYXRlZCBmcmFtZSBhbmQgcHJvY2Vzcy5cbiAgICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgICAvLyBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIC8vIEBzZWUgaHR0cHM6Ly9lbGVjdHJvbmpzLm9yZy9kb2NzL2FwaS93ZWJ2aWV3LXRhZ1xuICAgIHdlYnZpZXc6IHRydWVcbiAgfTtcblxuICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzKSB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsXG4gICAgLyogY2FuVXNlRXZlbnRTeXN0ZW0gKi9cbiAgICB0cnVlKTtcbiAgfTsgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcblxuXG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTsgLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4gIC8vIEl0IGFsc28gY2FuIHR1cm4gXFx1MDAwMCBpbnRvIFxcdUZGRkQgaW5zaWRlIGF0dHJpYnV0ZXMuXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zaW5nbGUtcGFnZS5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbVxuICAvLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuICAvLyBXZSB3aWxsIHN0aWxsIHBhdGNoIHVwIGluIHRoaXMgY2FzZSBidXQgbm90IGZpcmUgdGhlIHdhcm5pbmcuXG5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVGV4dCA9PT0gbm9ybWFsaXplZENsaWVudFRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0V4dHJhIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2VydmVyOiAlcycsIG5hbWVzKTtcbiAgfTtcblxuICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAobGlzdGVuZXIgPT09IGZhbHNlKSB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfTsgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuICBub3JtYWxpemVIVE1MID0gZnVuY3Rpb24gKHBhcmVudCwgaHRtbCkge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgaXNEb2N1bWVudE9yRnJhZ21lbnQgPSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbiAgdmFyIGRvYyA9IGlzRG9jdW1lbnRPckZyYWdtZW50ID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICBsaXN0ZW5UbyhyZWdpc3RyYXRpb25OYW1lLCBkb2MpO1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUkMSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG5cblxuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmFibGVGbGFyZUFQSSAmJiBwcm9wS2V5ID09PSBMSVNURU5FUlMgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEpIHsvLyBOb29wXG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIHsvLyBXZSBwb2x5ZmlsbCBpdCBzZXBhcmF0ZWx5IG9uIHRoZSBjbGllbnQgZHVyaW5nIGNvbW1pdC5cbiAgICAgIC8vIFdlIGNvdWxkIGhhdmUgZXhjbHVkZWQgaXQgaW4gdGhlIHByb3BlcnR5IGxpc3QgaW5zdGVhZCBvZlxuICAgICAgLy8gYWRkaW5nIGEgc3BlY2lhbCBjYXNlIGhlcmUsIGJ1dCB0aGVuIGl0IHdvdWxkbid0IGJlIGVtaXR0ZWRcbiAgICAgIC8vIG9uIHNlcnZlciByZW5kZXJpbmcgKGJ1dCB3ZSAqZG8qIHdhbnQgdG8gZW1pdCBpdCBpbiBTU1IpLlxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0cnVlICYmIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgcHJvcEtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUkMSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgIShpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCB0eXBlID09PSB0eXBlLnRvTG93ZXJDYXNlKCkpID8gd2FybmluZyQxKGZhbHNlLCAnPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChlbmFibGVUcnVzdGVkVHlwZXNJbnRlZ3JhdGlvbiAmJiAhZGlkV2FyblNjcmlwdFRhZ3MpIHtcbiAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdFbmNvdW50ZXJlZCBhIHNjcmlwdCB0YWcgd2hpbGUgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudC4gJyArICdTY3JpcHRzIGluc2lkZSBSZWFjdCBjb21wb25lbnRzIGFyZSBuZXZlciBleGVjdXRlZCB3aGVuIHJlbmRlcmluZyAnICsgJ29uIHRoZSBjbGllbnQuIENvbnNpZGVyIHVzaW5nIHRlbXBsYXRlIHRhZyBpbnN0ZWFkICcgKyAnKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSkuJyk7XG4gICAgICAgICAgZGlkV2FyblNjcmlwdFRhZ3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNjcmlwdD48JyArICcvc2NyaXB0Pic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byB5aWVsZCBhIHNjcmlwdCBlbGVtZW50LlxuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgIGlzOiBwcm9wcy5pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjYXVzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBkb21FbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAgIG5vZGUubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGEgc2l6ZSBncmVhdGVyIHRoYW4gMSBjYXVzZXMgYSBzZWxlY3QgdG8gYmVoYXZlIGxpa2UgYG11bHRpcGxlPXRydWVgLCB3aGVyZVxuICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGEgc2VsZWN0IGluIFwic2luZ2xlIHNlbGVjdGlvbiBtb2RlXCIuXG4gICAgICAgICAgbm9kZS5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0eXBlKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnICYmICFkaWRXYXJuU2hhZHlET00gJiYgZG9tRWxlbWVudC5zaGFkeVJvb3QpIHtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJyVzIGlzIHVzaW5nIHNoYWR5IERPTS4gVXNpbmcgc2hhZHkgRE9NIHdpdGggUmVhY3QgY2FuICcgKyAnY2F1c2UgdGhpbmdzIHRvIGJyZWFrIHN1YnRseS4nLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgZGlkV2FyblNoYWR5RE9NID0gdHJ1ZTtcbiAgICB9XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHZhciBwcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9MT0FELCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBDcmVhdGUgbGlzdGVuZXIgZm9yIGVhY2ggbWVkaWEgZXZlbnRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRyYXBCdWJibGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0VSUk9SLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfRVJST1IsIGRvbUVsZW1lbnQpO1xuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfTE9BRCwgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb3JtJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1JFU0VULCBkb21FbGVtZW50KTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1NVQk1JVCwgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1RPR0dMRSwgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0lOVkFMSUQsIGRvbUVsZW1lbnQpOyAvLyBGb3IgY29udHJvbGxlZCBjb21wb25lbnRzIHdlIGFsd2F5cyBuZWVkIHRvIGVuc3VyZSB3ZSdyZSBsaXN0ZW5pbmdcbiAgICAgIC8vIHRvIG9uQ2hhbmdlLiBFdmVuIGlmIHRoZXJlIGlzIG5vIGxpc3RlbmVyLlxuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfSU5WQUxJRCwgZG9tRWxlbWVudCk7IC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG5cbiAgICAgIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCAnb25DaGFuZ2UnKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfSU5WQUxJRCwgZG9tRWxlbWVudCk7IC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG5cbiAgICAgIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCAnb25DaGFuZ2UnKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpO1xuICBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgZmFsc2UpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbGFzdFByb3BzID0gbGFzdFJhd1Byb3BzO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFJhd1Byb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgbmV4dFByb3BzKTtcbiAgdmFyIHByb3BLZXk7XG4gIHZhciBzdHlsZU5hbWU7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuXG4gIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSQxKSB7XG4gICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MIHx8IHByb3BLZXkgPT09IENISUxEUkVOKSB7Ly8gTm9vcC4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBjbGVhciB0ZXh0IG1lY2hhbmlzbS5cbiAgICB9IGVsc2UgaWYgKGVuYWJsZUZsYXJlQVBJICYmIHByb3BLZXkgPT09IExJU1RFTkVSUyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSkgey8vIE5vb3BcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgey8vIE5vb3AuIEl0IGRvZXNuJ3Qgd29yayBvbiB1cGRhdGVzIGFueXdheS5cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIHdoaXRlbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSQxKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGFzdFByb3ApIHtcbiAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cblxuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgdG9TdHJpbmdPclRydXN0ZWRUeXBlKG5leHRIdG1sKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7Ly8gVE9ETzogSXQgbWlnaHQgYmUgdG9vIGxhdGUgdG8gY2xlYXIgdGhpcyBpZiB3ZSBoYXZlIGNoaWxkcmVuXG4gICAgICAgIC8vIGluc2VydGVkIGFscmVhZHkuXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKGxhc3RQcm9wICE9PSBuZXh0UHJvcCAmJiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSkge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmFibGVGbGFyZUFQSSAmJiBwcm9wS2V5ID09PSBMSVNURU5FUlMgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEpIHsvLyBOb29wXG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2UgZWFnZXJseSBsaXN0ZW4gdG8gdGhpcyBldmVuIHRob3VnaCB3ZSBoYXZlbid0IGNvbW1pdHRlZCB5ZXQuXG4gICAgICAgIGlmICh0cnVlICYmIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgcHJvcEtleSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIHdoaXRlbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRSQxXSk7XG4gICAgfVxuXG4gICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKFNUWUxFJDEsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSByYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG5cbiAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgJiYgIWRpZFdhcm5TaGFkeURPTSAmJiBkb21FbGVtZW50LnNoYWR5Um9vdCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnJXMgaXMgdXNpbmcgc2hhZHkgRE9NLiBVc2luZyBzaGFkeSBET00gd2l0aCBSZWFjdCBjYW4gJyArICdjYXVzZSB0aGluZ3MgdG8gYnJlYWsgc3VidGx5LicsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICBkaWRXYXJuU2hhZHlET00gPSB0cnVlO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfTE9BRCwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBDcmVhdGUgbGlzdGVuZXIgZm9yIGVhY2ggbWVkaWEgZXZlbnRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRyYXBCdWJibGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfRVJST1IsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0VSUk9SLCBkb21FbGVtZW50KTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0xPQUQsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb3JtJzpcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1JFU0VULCBkb21FbGVtZW50KTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX1NVQk1JVCwgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfVE9HR0xFLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICB0cmFwQnViYmxlZEV2ZW50KFRPUF9JTlZBTElELCBkb21FbGVtZW50KTsgLy8gRm9yIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3ZSBhbHdheXMgbmVlZCB0byBlbnN1cmUgd2UncmUgbGlzdGVuaW5nXG4gICAgICAvLyB0byBvbkNoYW5nZS4gRXZlbiBpZiB0aGVyZSBpcyBubyBsaXN0ZW5lci5cblxuICAgICAgZW5zdXJlTGlzdGVuaW5nVG8ocm9vdENvbnRhaW5lckVsZW1lbnQsICdvbkNoYW5nZScpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgdHJhcEJ1YmJsZWRFdmVudChUT1BfSU5WQUxJRCwgZG9tRWxlbWVudCk7IC8vIEZvciBjb250cm9sbGVkIGNvbXBvbmVudHMgd2UgYWx3YXlzIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIGxpc3RlbmluZ1xuICAgICAgLy8gdG8gb25DaGFuZ2UuIEV2ZW4gaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXIuXG5cbiAgICAgIGVuc3VyZUxpc3RlbmluZ1RvKHJvb3RDb250YWluZXJFbGVtZW50LCAnb25DaGFuZ2UnKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHRyYXBCdWJibGVkRXZlbnQoVE9QX0lOVkFMSUQsIGRvbUVsZW1lbnQpOyAvLyBGb3IgY29udHJvbGxlZCBjb21wb25lbnRzIHdlIGFsd2F5cyBuZWVkIHRvIGVuc3VyZSB3ZSdyZSBsaXN0ZW5pbmdcbiAgICAgIC8vIHRvIG9uQ2hhbmdlLiBFdmVuIGlmIHRoZXJlIGlzIG5vIGxpc3RlbmVyLlxuXG4gICAgICBlbnN1cmVMaXN0ZW5pbmdUbyhyb290Q29udGFpbmVyRWxlbWVudCwgJ29uQ2hhbmdlJyk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXR0cmlidXRlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlc1tfaV0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgLy8gQnVpbHQtaW4gU1NSIGF0dHJpYnV0ZSBpcyB3aGl0ZWxpc3RlZFxuICAgICAgICBjYXNlICdkYXRhLXJlYWN0cm9vdCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cblxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuXG4gIGZvciAodmFyIHByb3BLZXkgaW4gcmF3UHJvcHMpIHtcbiAgICBpZiAoIXJhd1Byb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSByYXdQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKHRydWUgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICh0cnVlICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgJycgKyBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHJ1ZSAmJiB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5zdXJlTGlzdGVuaW5nVG8ocm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BLZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHJ1ZSAmJiAvLyBDb252aW5jZSBGbG93IHdlJ3ZlIGNhbGN1bGF0ZWQgaXQgKGl0J3MgREVWLW9ubHkgaW4gdGhpcyBtZXRob2QuKVxuICAgIHR5cGVvZiBpc0N1c3RvbUNvbXBvbmVudFRhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmQgdG8gdGhlaXIgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgdmFyIHNlcnZlclZhbHVlID0gdm9pZCAwO1xuICAgICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhwcm9wS2V5KTtcblxuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgey8vIERvbid0IGJvdGhlciBjb21wYXJpbmcuIFdlJ3JlIGlnbm9yaW5nIGFsbCB0aGVzZSB3YXJuaW5ncy5cbiAgICAgIH0gZWxzZSBpZiAoZW5hYmxlRmxhcmVBUEkgJiYgcHJvcEtleSA9PT0gTElTVEVORVJTIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSB7Ly8gTm9vcFxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUxdIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCAhPSBudWxsID8gbmV4dEh0bWwgOiAnJyk7XG5cbiAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFJDEpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgaWYgKGV4dHJhQXR0cmlidXRlTmFtZXMuc2l6ZSA+IDAgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhleHRyYUF0dHJpYnV0ZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIHRydWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkJDEoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvRXZlbnRSZXNwb25kZXJFdmVudFR5cGVzKGV2ZW50VHlwZXMsIGVsZW1lbnQpIHtcbiAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgLy8gR2V0IHRoZSBsaXN0ZW5pbmcgU2V0IGZvciB0aGlzIGVsZW1lbnQuIFdlIHVzZSB0aGlzIHRvIHRyYWNrXG4gICAgLy8gd2hhdCBldmVudHMgd2UncmUgbGlzdGVuaW5nIHRvLlxuICAgIHZhciBsaXN0ZW5pbmdTZXQgPSBnZXRMaXN0ZW5pbmdTZXRGb3JFbGVtZW50KGVsZW1lbnQpOyAvLyBHbyB0aHJvdWdoIGVhY2ggdGFyZ2V0IGV2ZW50IHR5cGUgb2YgdGhlIGV2ZW50IHJlc3BvbmRlclxuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGV2ZW50VHlwZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBldmVudFR5cGUgPSBldmVudFR5cGVzW2ldO1xuICAgICAgdmFyIGlzUGFzc2l2ZSA9ICFlbmRzV2l0aChldmVudFR5cGUsICdfYWN0aXZlJyk7XG4gICAgICB2YXIgZXZlbnRLZXkgPSBpc1Bhc3NpdmUgPyBldmVudFR5cGUgKyAnX3Bhc3NpdmUnIDogZXZlbnRUeXBlO1xuICAgICAgdmFyIHRhcmdldEV2ZW50VHlwZSA9IGlzUGFzc2l2ZSA/IGV2ZW50VHlwZSA6IGV2ZW50VHlwZS5zdWJzdHJpbmcoMCwgZXZlbnRUeXBlLmxlbmd0aCAtIDcpO1xuXG4gICAgICBpZiAoIWxpc3RlbmluZ1NldC5oYXMoZXZlbnRLZXkpKSB7XG4gICAgICAgIHRyYXBFdmVudEZvclJlc3BvbmRlckV2ZW50U3lzdGVtKGVsZW1lbnQsIHRhcmdldEV2ZW50VHlwZSwgaXNQYXNzaXZlKTtcbiAgICAgICAgbGlzdGVuaW5nU2V0LmFkZChldmVudEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIHRoZSBldmVudCBBUEkgaXMgc3RhYmxlIGFuZCBvdXQgb2YgYSBmbGFnXG5cbmlmIChlbmFibGVGbGFyZUFQSSkge1xuICBzZXRMaXN0ZW5Ub1Jlc3BvbmRlckV2ZW50VHlwZXMobGlzdGVuVG9FdmVudFJlc3BvbmRlckV2ZW50VHlwZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGFuY2hvck5vZGUubm9kZVR5cGU7XG4gICAgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG59XG4vKipcbiAqIFJldHVybnMge3N0YXJ0LCBlbmR9IHdoZXJlIGBzdGFydGAgaXMgdGhlIGNoYXJhY3Rlci9jb2RlcG9pbnQgaW5kZXggb2ZcbiAqIChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpIHdpdGhpbiB0aGUgdGV4dENvbnRlbnQgb2YgYG91dGVyTm9kZWAsIGFuZFxuICogYGVuZGAgaXMgdGhlIGluZGV4IG9mIChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgaWYgeW91IHBhc3MgaW4gZ2FyYmFnZSBpbnB1dCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY3Jhc2guXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIGluZGV4V2l0aGluQW5jaG9yID0gMDtcbiAgdmFyIGluZGV4V2l0aGluRm9jdXMgPSAwO1xuICB2YXIgbm9kZSA9IG91dGVyTm9kZTtcbiAgdmFyIHBhcmVudE5vZGUgPSBudWxsO1xuXG4gIG91dGVyOiB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0ID0gbnVsbDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gYW5jaG9yTm9kZSAmJiAoYW5jaG9yT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBmaXJzdCBjaGlsZCBgbmV4dGAuXG5cblxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gYW5jaG9yTm9kZSAmJiArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiYgKytpbmRleFdpdGhpbkZvY3VzID09PSBmb2N1c09mZnNldCkge1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIG5leHQgc2libGluZyBgbmV4dGAuXG5cblxuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAoV291bGQgaGFwcGVuIGlmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYXJlbid0XG4gICAgLy8gYWN0dWFsbHkgaW5zaWRlIHRoZSBwYXNzZWQtaW4gbm9kZS4pXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZFxuICB9O1xufVxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cblxuZnVuY3Rpb24gc2V0T2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBkb2MgJiYgZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuXG4gIGlmICghd2luLmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpOyAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDEgJiYgc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IHN0YXJ0TWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc3RhcnRNYXJrZXIub2Zmc2V0ICYmIHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IGVuZE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gZW5kTWFya2VyLm9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50ICYmIGNvbnRhaW5zTm9kZShub2RlLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luRnJhbWUoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXNzaW5nIHRoZSBjb250ZW50RG9jdW1lbnQgb2YgYSBIVE1MSWZyYW1lRWxlbWVudCBjYW4gY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAvLyB0byB0aHJvdywgZS5nLiBpZiBpdCBoYXMgYSBjcm9zcy1vcmlnaW4gc3JjIGF0dHJpYnV0ZS5cbiAgICAvLyBTYWZhcmkgd2lsbCBzaG93IGFuIGVycm9yIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIGFjY2VzcyByZXN1bHRzIGluIFwiQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCIuIGUuZzpcbiAgICAvLyBpZnJhbWUuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIC8vIEEgc2FmZXR5IHdheSBpcyB0byBhY2Nlc3Mgb25lIG9mIHRoZSBjcm9zcyBvcmlnaW4gcHJvcGVydGllczogV2luZG93IG9yIExvY2F0aW9uXG4gICAgLy8gV2hpY2ggbWlnaHQgcmVzdWx0IGluIFwiU2VjdXJpdHlFcnJvclwiIERPTSBFeGNlcHRpb24gYW5kIGl0IGlzIGNvbXBhdGlibGUgdG8gU2FmYXJpLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjaW50ZWdyYXRpb24td2l0aC1pZGxcbiAgICByZXR1cm4gdHlwZW9mIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPT09ICdzdHJpbmcnO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoKSB7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG4gIHdoaWxlIChlbGVtZW50IGluc3RhbmNlb2Ygd2luLkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgaWYgKGlzU2FtZU9yaWdpbkZyYW1lKGVsZW1lbnQpKSB7XG4gICAgICB3aW4gPSBlbGVtZW50LmNvbnRlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5cblxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAndGV4dCcgfHwgZWxlbS50eXBlID09PSAnc2VhcmNoJyB8fCBlbGVtLnR5cGUgPT09ICd0ZWwnIHx8IGVsZW0udHlwZSA9PT0gJ3VybCcgfHwgZWxlbS50eXBlID09PSAncGFzc3dvcmQnKSB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCkge1xuICB2YXIgZm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICByZXR1cm4ge1xuICAgIGZvY3VzZWRFbGVtOiBmb2N1c2VkRWxlbSxcbiAgICBzZWxlY3Rpb25SYW5nZTogaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IGdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvbjtcblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0ge1xuICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IGdldE9mZnNldHMoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbiB8fCB7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiAwXG4gIH07XG59XG4vKipcbiAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICogdGhlIGlucHV0LlxuICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZyb20gZ2V0KlxuICovXG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0LFxuICAgICAgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgICBjYXNlICdvcHRncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAgIC8vIGJ1dFxuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludHJcblxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuXG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcblxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZVxuXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG5cbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdmcmFtZSc7XG5cbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9IC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuJDEgPSB7fTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgICEoY2hpbGRUYWcgPT0gbnVsbCkgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcgc2hvdWxkIGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAgICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIGFkZGVuZHVtID0gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZyArICd8JyArIGFkZGVuZHVtO1xuXG4gICAgaWYgKGRpZFdhcm4kMVt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm4kMVt3YXJuS2V5XSA9IHRydWU7XG4gICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgdmFyIHdoaXRlc3BhY2VJbmZvID0gJyc7XG5cbiAgICBpZiAoY2hpbGRUYWcgPT09ICcjdGV4dCcpIHtcbiAgICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMlcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbywgYWRkZW5kdW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LiVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCBhZGRlbmR1bSk7XG4gICAgfVxuICB9O1xufVxuXG4vLyBjYW4gcmUtZXhwb3J0IGV2ZXJ5dGhpbmcgZnJvbSB0aGlzIG1vZHVsZS5cblxuZnVuY3Rpb24gc2hpbSgpIHtcbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiVGhlIGN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBwZXJzaXN0ZW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfVxuICB9XG59IC8vIFBlcnNpc3RlbmNlICh3aGVuIHVuc3VwcG9ydGVkKVxuXG5cbnZhciBzdXBwb3J0c1BlcnNpc3RlbmNlID0gZmFsc2U7XG52YXIgY2xvbmVJbnN0YW5jZSA9IHNoaW07XG52YXIgY2xvbmVGdW5kYW1lbnRhbEluc3RhbmNlID0gc2hpbTtcbnZhciBjcmVhdGVDb250YWluZXJDaGlsZFNldCA9IHNoaW07XG52YXIgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lckNoaWxkU2V0ID0gc2hpbTtcbnZhciBmaW5hbGl6ZUNvbnRhaW5lckNoaWxkcmVuID0gc2hpbTtcbnZhciByZXBsYWNlQ29udGFpbmVyQ2hpbGRyZW4gPSBzaGltO1xudmFyIGNsb25lSGlkZGVuSW5zdGFuY2UgPSBzaGltO1xudmFyIGNsb25lSGlkZGVuVGV4dEluc3RhbmNlID0gc2hpbTtcblxudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HO1xuXG57XG4gIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBldmVudHNFbmFibGVkID0gbnVsbDtcbnZhciBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYnV0dG9uJzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXR1cm4gISFwcm9wcy5hdXRvRm9jdXM7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cblxuICB2YXIgcGFyZW50TmFtZXNwYWNlID0gcGFyZW50SG9zdENvbnRleHQ7XG4gIHJldHVybiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUZvckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIGV2ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQoKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpO1xuICBzZXRFbmFibGVkKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gdHlwZSA9PT0gJ3RleHRhcmVhJyB8fCB0eXBlID09PSAnb3B0aW9uJyB8fCB0eXBlID09PSAnbm9zY3JpcHQnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCAhPSBudWxsO1xufVxuZnVuY3Rpb24gc2hvdWxkRGVwcmlvcml0aXplU3VidHJlZSh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gISFwcm9wcy5oaWRkZW47XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHRleHQsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbnZhciBpc1ByaW1hcnlSZW5kZXJlciA9IHRydWU7XG52YXIgd2FybnNJZk5vdEFjdGluZyA9IHRydWU7IC8vIFRoaXMgaW5pdGlhbGl6YXRpb24gY29kZSBtYXkgcnVuIGV2ZW4gb24gc2VydmVyIGVudmlyb25tZW50c1xuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gICAgIE11dGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBzdXBwb3J0c011dGF0aW9uID0gdHJ1ZTtcbmZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIERlc3BpdGUgdGhlIG5hbWluZyB0aGF0IG1pZ2h0IGltcGx5IG90aGVyd2lzZSwgdGhpcyBtZXRob2Qgb25seVxuICAvLyBmaXJlcyBpZiB0aGVyZSBpcyBhbiBgVXBkYXRlYCBlZmZlY3Qgc2NoZWR1bGVkIGR1cmluZyBtb3VudGluZy5cbiAgLy8gVGhpcyBoYXBwZW5zIGlmIGBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbmAgcmV0dXJucyBgdHJ1ZWAgKHdoaWNoIGl0XG4gIC8vIGRvZXMgdG8gaW1wbGVtZW50IHRoZSBgYXV0b0ZvY3VzYCBhdHRyaWJ1dGUgb24gdGhlIGNsaWVudCkuIEJ1dFxuICAvLyB0aGVyZSBhcmUgYWxzbyBvdGhlciBjYXNlcyB3aGVuIHRoaXMgbWlnaHQgaGFwcGVuIChzdWNoIGFzIHBhdGNoaW5nXG4gIC8vIHVwIHRleHQgY29udGVudCBkdXJpbmcgaHlkcmF0aW9uIG1pc21hdGNoKS4gU28gd2UnbGwgY2hlY2sgdGhpcyBhZ2Fpbi5cbiAgaWYgKHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgbmV3UHJvcHMpKSB7XG4gICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG5cbiAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGNvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lcjtcbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSAvLyBUaGlzIGNvbnRhaW5lciBtaWdodCBiZSB1c2VkIGZvciBhIHBvcnRhbC5cbiAgLy8gSWYgc29tZXRoaW5nIGluc2lkZSBhIHBvcnRhbCBpcyBjbGlja2VkLCB0aGF0IGNsaWNrIHNob3VsZCBidWJibGVcbiAgLy8gdGhyb3VnaCB0aGUgUmVhY3QgdHJlZS4gSG93ZXZlciwgb24gTW9iaWxlIFNhZmFyaSB0aGUgY2xpY2sgd291bGRcbiAgLy8gbmV2ZXIgYnViYmxlIHRocm91Z2ggdGhlICpET00qIHRyZWUgdW5sZXNzIGFuIGFuY2VzdG9yIHdpdGggb25jbGlja1xuICAvLyBldmVudCBleGlzdHMuIFNvIHdlIHdvdWxkbid0IHNlZSBpdCBhbmQgZGlzcGF0Y2ggaXQuXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGVuc3VyZSB0aGF0IG5vbiBSZWFjdCByb290IGNvbnRhaW5lcnMgaGF2ZSBpbmxpbmUgb25jbGlja1xuICAvLyBkZWZpbmVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExOTE4XG5cblxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgaWYgKChyZWFjdFJvb3RDb250YWluZXIgPT09IG51bGwgfHwgcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQpICYmIHBhcmVudE5vZGUub25jbGljayA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0SW5Db250YWluZXJCZWZvcmUoY29udGFpbmVyLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9XG59IC8vIFRoaXMgaXMgYSBzcGVjaWZpYyBldmVudCBmb3IgdGhlIFJlYWN0IEZsYXJlXG4vLyBldmVudCBzeXN0ZW0sIHNvIGV2ZW50IHJlc3BvbmRlcnMgY2FuIGFjdFxuLy8gYWNjb3JkaW5nbHkgdG8gYSBET00gbm9kZSBiZWluZyB1bm1vdW50ZWQgdGhhdFxuLy8gcHJldmlvdXNseSBoYWQgYWN0aXZlIGRvY3VtZW50IGZvY3VzLlxuXG5mdW5jdGlvbiBkaXNwYXRjaERldGFjaGVkVmlzaWJsZU5vZGVFdmVudChjaGlsZCkge1xuICBpZiAoZW5hYmxlRmxhcmVBUEkgJiYgc2VsZWN0aW9uSW5mb3JtYXRpb24gJiYgY2hpbGQgPT09IHNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtKSB7XG4gICAgdmFyIHRhcmdldEZpYmVyID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY2hpbGQpOyAvLyBTaW1sdWxhdGUgYSBibHVyIGV2ZW50IHRvIHRoZSBSZWFjdCBGbGFyZSByZXNwb25kZXIgc3lzdGVtLlxuXG4gICAgZGlzcGF0Y2hFdmVudEZvclJlc3BvbmRlckV2ZW50U3lzdGVtKCdkZXRhY2hlZHZpc2libGVub2RlJywgdGFyZ2V0RmliZXIsIHtcbiAgICAgIHRhcmdldDogY2hpbGQsXG4gICAgICB0aW1lU3RhbXA6IERhdGUubm93KClcbiAgICB9LCBjaGlsZCwgUkVTUE9OREVSX0VWRU5UX1NZU1RFTSB8IElTX1BBU1NJVkUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBkaXNwYXRjaERldGFjaGVkVmlzaWJsZU5vZGVFdmVudChjaGlsZCk7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwYXRjaERldGFjaGVkVmlzaWJsZU5vZGVFdmVudChjaGlsZCk7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KHBhcmVudEluc3RhbmNlLCBzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZTsgLy8gRGVsZXRlIGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICBkbyB7XG4gICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChub2RlKTtcblxuICAgIGlmIChuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5leHROb2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChuZXh0Tm9kZSk7IC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cblxuICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfSB3aGlsZSAobm9kZSk7IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuXG5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGNsZWFyU3VzcGVuc2VCb3VuZGFyeUZyb21Db250YWluZXIoY29udGFpbmVyLCBzdXNwZW5zZUluc3RhbmNlKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShjb250YWluZXIucGFyZW50Tm9kZSwgc3VzcGVuc2VJbnN0YW5jZSk7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjbGVhclN1c3BlbnNlQm91bmRhcnkoY29udGFpbmVyLCBzdXNwZW5zZUluc3RhbmNlKTtcbiAgfSBlbHNlIHt9IC8vIERvY3VtZW50IG5vZGVzIHNob3VsZCBuZXZlciBjb250YWluIHN1c3BlbnNlIGJvdW5kYXJpZXMuXG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cblxuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEVdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICAgICBIeWRyYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHN1cHBvcnRzSHlkcmF0aW9uID0gdHJ1ZTtcbmZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgfHwgdHlwZS50b0xvd2VyQ2FzZSgpICE9PSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhbiBlbGVtZW50IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0ID09PSAnJyB8fCBpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShpbnN0YW5jZSkge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgc3VzcGVuc2Ugbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoaW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgIHZhciBub2RlRGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgICBpZiAobm9kZURhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgbm9kZURhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgbm9kZURhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7IC8vIFRPRE86IFBvc3NpYmx5IGRlZmVyIHRoaXMgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSB3aGVyZSBhbGwgdGhlIGV2ZW50c1xuICAvLyBnZXQgYXR0YWNoZWQuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICByZXR1cm4gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHRJbnN0YW5jZSk7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodHJ1ZSAmJiBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gIT09IHRydWUpIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7Ly8gVE9ETzogd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlU3VzcGVuc2VCb3VuZGFyeVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKHRydWUgJiYgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHsvLyBUT0RPOiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVTdXNwZW5zZUJvdW5kYXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSwgcHJvcHMpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAodHJ1ZSAmJiBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0cnVlICYmIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKHRydWUgJiYgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7Ly8gVE9ETzogd2FybkZvckluc2VydGVkSHlkcmF0ZWRTdXNwZW5zZShwYXJlbnRJbnN0YW5jZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1vdW50UmVzcG9uZGVySW5zdGFuY2UocmVzcG9uZGVyLCByZXNwb25kZXJJbnN0YW5jZSwgcmVzcG9uZGVyUHJvcHMsIHJlc3BvbmRlclN0YXRlLCBpbnN0YW5jZSkge1xuICAvLyBMaXN0ZW4gdG8gZXZlbnRzXG4gIHZhciBkb2MgPSBpbnN0YW5jZS5vd25lckRvY3VtZW50O1xuICB2YXIgX3JlZiA9IHJlc3BvbmRlcixcbiAgICAgIHJvb3RFdmVudFR5cGVzID0gX3JlZi5yb290RXZlbnRUeXBlcyxcbiAgICAgIHRhcmdldEV2ZW50VHlwZXMgPSBfcmVmLnRhcmdldEV2ZW50VHlwZXM7XG5cbiAgaWYgKHRhcmdldEV2ZW50VHlwZXMgIT09IG51bGwpIHtcbiAgICBsaXN0ZW5Ub0V2ZW50UmVzcG9uZGVyRXZlbnRUeXBlcyh0YXJnZXRFdmVudFR5cGVzLCBkb2MpO1xuICB9XG5cbiAgaWYgKHJvb3RFdmVudFR5cGVzICE9PSBudWxsKSB7XG4gICAgYWRkUm9vdEV2ZW50VHlwZXNGb3JSZXNwb25kZXJJbnN0YW5jZShyZXNwb25kZXJJbnN0YW5jZSwgcm9vdEV2ZW50VHlwZXMpO1xuICAgIGxpc3RlblRvRXZlbnRSZXNwb25kZXJFdmVudFR5cGVzKHJvb3RFdmVudFR5cGVzLCBkb2MpO1xuICB9XG5cbiAgbW91bnRFdmVudFJlc3BvbmRlcihyZXNwb25kZXIsIHJlc3BvbmRlckluc3RhbmNlLCByZXNwb25kZXJQcm9wcywgcmVzcG9uZGVyU3RhdGUpO1xuICByZXR1cm4gcmVzcG9uZGVySW5zdGFuY2U7XG59XG5mdW5jdGlvbiB1bm1vdW50UmVzcG9uZGVySW5zdGFuY2UocmVzcG9uZGVySW5zdGFuY2UpIHtcbiAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgLy8gVE9ETyBzdG9wIGxpc3RlbmluZyB0byB0YXJnZXRFdmVudFR5cGVzXG4gICAgdW5tb3VudEV2ZW50UmVzcG9uZGVyKHJlc3BvbmRlckluc3RhbmNlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnVuZGFtZW50YWxDb21wb25lbnRJbnN0YW5jZShmdW5kYW1lbnRhbEluc3RhbmNlKSB7XG4gIGlmIChlbmFibGVGdW5kYW1lbnRhbEFQSSkge1xuICAgIHZhciBjdXJyZW50RmliZXIgPSBmdW5kYW1lbnRhbEluc3RhbmNlLmN1cnJlbnRGaWJlcixcbiAgICAgICAgaW1wbCA9IGZ1bmRhbWVudGFsSW5zdGFuY2UuaW1wbCxcbiAgICAgICAgcHJvcHMgPSBmdW5kYW1lbnRhbEluc3RhbmNlLnByb3BzLFxuICAgICAgICBzdGF0ZSA9IGZ1bmRhbWVudGFsSW5zdGFuY2Uuc3RhdGU7XG4gICAgdmFyIGluc3RhbmNlID0gaW1wbC5nZXRJbnN0YW5jZShudWxsLCBwcm9wcywgc3RhdGUpO1xuICAgIHByZWNhY2hlRmliZXJOb2RlKGN1cnJlbnRGaWJlciwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSAvLyBCZWNhdXNlIG9mIHRoZSBmbGFnIGFib3ZlLCB0aGlzIGdldHMgYXJvdW5kIHRoZSBGbG93IGVycm9yO1xuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBtb3VudEZ1bmRhbWVudGFsQ29tcG9uZW50KGZ1bmRhbWVudGFsSW5zdGFuY2UpIHtcbiAgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJKSB7XG4gICAgdmFyIGltcGwgPSBmdW5kYW1lbnRhbEluc3RhbmNlLmltcGwsXG4gICAgICAgIGluc3RhbmNlID0gZnVuZGFtZW50YWxJbnN0YW5jZS5pbnN0YW5jZSxcbiAgICAgICAgcHJvcHMgPSBmdW5kYW1lbnRhbEluc3RhbmNlLnByb3BzLFxuICAgICAgICBzdGF0ZSA9IGZ1bmRhbWVudGFsSW5zdGFuY2Uuc3RhdGU7XG4gICAgdmFyIG9uTW91bnQgPSBpbXBsLm9uTW91bnQ7XG5cbiAgICBpZiAob25Nb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbk1vdW50KG51bGwsIGluc3RhbmNlLCBwcm9wcywgc3RhdGUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlRnVuZGFtZW50YWxDb21wb25lbnQoZnVuZGFtZW50YWxJbnN0YW5jZSkge1xuICBpZiAoZW5hYmxlRnVuZGFtZW50YWxBUEkpIHtcbiAgICB2YXIgaW1wbCA9IGZ1bmRhbWVudGFsSW5zdGFuY2UuaW1wbCxcbiAgICAgICAgcHJldlByb3BzID0gZnVuZGFtZW50YWxJbnN0YW5jZS5wcmV2UHJvcHMsXG4gICAgICAgIHByb3BzID0gZnVuZGFtZW50YWxJbnN0YW5jZS5wcm9wcyxcbiAgICAgICAgc3RhdGUgPSBmdW5kYW1lbnRhbEluc3RhbmNlLnN0YXRlO1xuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbXBsLnNob3VsZFVwZGF0ZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZShudWxsLCBwcmV2UHJvcHMsIHByb3BzLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB1cGRhdGVGdW5kYW1lbnRhbENvbXBvbmVudChmdW5kYW1lbnRhbEluc3RhbmNlKSB7XG4gIGlmIChlbmFibGVGdW5kYW1lbnRhbEFQSSkge1xuICAgIHZhciBpbXBsID0gZnVuZGFtZW50YWxJbnN0YW5jZS5pbXBsLFxuICAgICAgICBpbnN0YW5jZSA9IGZ1bmRhbWVudGFsSW5zdGFuY2UuaW5zdGFuY2UsXG4gICAgICAgIHByZXZQcm9wcyA9IGZ1bmRhbWVudGFsSW5zdGFuY2UucHJldlByb3BzLFxuICAgICAgICBwcm9wcyA9IGZ1bmRhbWVudGFsSW5zdGFuY2UucHJvcHMsXG4gICAgICAgIHN0YXRlID0gZnVuZGFtZW50YWxJbnN0YW5jZS5zdGF0ZTtcbiAgICB2YXIgb25VcGRhdGUgPSBpbXBsLm9uVXBkYXRlO1xuXG4gICAgaWYgKG9uVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uVXBkYXRlKG51bGwsIGluc3RhbmNlLCBwcmV2UHJvcHMsIHByb3BzLCBzdGF0ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bm1vdW50RnVuZGFtZW50YWxDb21wb25lbnQoZnVuZGFtZW50YWxJbnN0YW5jZSkge1xuICBpZiAoZW5hYmxlRnVuZGFtZW50YWxBUEkpIHtcbiAgICB2YXIgaW1wbCA9IGZ1bmRhbWVudGFsSW5zdGFuY2UuaW1wbCxcbiAgICAgICAgaW5zdGFuY2UgPSBmdW5kYW1lbnRhbEluc3RhbmNlLmluc3RhbmNlLFxuICAgICAgICBwcm9wcyA9IGZ1bmRhbWVudGFsSW5zdGFuY2UucHJvcHMsXG4gICAgICAgIHN0YXRlID0gZnVuZGFtZW50YWxJbnN0YW5jZS5zdGF0ZTtcbiAgICB2YXIgb25Vbm1vdW50ID0gaW1wbC5vblVubW91bnQ7XG5cbiAgICBpZiAob25Vbm1vdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uVW5tb3VudChudWxsLCBpbnN0YW5jZSwgcHJvcHMsIHN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUkMihub2RlKSB7XG4gIHJldHVybiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB8fCBudWxsO1xufVxuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRIYW5kbGVycyQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSAnX19yZWFjdENvbnRhaW5lcmUkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGhvc3RSb290O1xufVxuZnVuY3Rpb24gdW5tYXJrQ29udGFpbmVyQXNSb290KG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChub2RlKSB7XG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUkMShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UkMShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH0gLy8gV2l0aG91dCB0aGlzIGZpcnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBuZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIgY29uZnVzaW5nLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlJDEobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldIHx8IG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVGaWJlclByb3BzKG5vZGUsIHByb3BzKSB7XG4gIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IHByb3BzO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgZGF0YTogbnVsbFxufSk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljRXZlbnQuZXh0ZW5kKHtcbiAgZGF0YTogbnVsbFxufSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7IC8vIEV2ZW50cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBuYW1lcy5cblxudmFyIGV2ZW50VHlwZXMkMSA9IHtcbiAgYmVmb3JlSW5wdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQmVmb3JlSW5wdXQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkJlZm9yZUlucHV0Q2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9DT01QT1NJVElPTl9FTkQsIFRPUF9LRVlfUFJFU1MsIFRPUF9URVhUX0lOUFVULCBUT1BfUEFTVEVdXG4gIH0sXG4gIGNvbXBvc2l0aW9uRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uRW5kJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvbkVuZENhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfQkxVUiwgVE9QX0NPTVBPU0lUSU9OX0VORCwgVE9QX0tFWV9ET1dOLCBUT1BfS0VZX1BSRVNTLCBUT1BfS0VZX1VQLCBUT1BfTU9VU0VfRE9XTl1cbiAgfSxcbiAgY29tcG9zaXRpb25TdGFydDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25Db21wb3NpdGlvblN0YXJ0JyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9CTFVSLCBUT1BfQ09NUE9TSVRJT05fU1RBUlQsIFRPUF9LRVlfRE9XTiwgVE9QX0tFWV9QUkVTUywgVE9QX0tFWV9VUCwgVE9QX01PVVNFX0RPV05dXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uVXBkYXRlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfQkxVUiwgVE9QX0NPTVBPU0lUSU9OX1VQREFURSwgVE9QX0tFWV9ET1dOLCBUT1BfS0VZX1BSRVNTLCBUT1BfS0VZX1VQLCBUT1BfTU9VU0VfRE9XTl1cbiAgfVxufTsgLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSBUT1BfQ09NUE9TSVRJT05fU1RBUlQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcyQxLmNvbXBvc2l0aW9uU3RhcnQ7XG5cbiAgICBjYXNlIFRPUF9DT01QT1NJVElPTl9FTkQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcyQxLmNvbXBvc2l0aW9uRW5kO1xuXG4gICAgY2FzZSBUT1BfQ09NUE9TSVRJT05fVVBEQVRFOlxuICAgICAgcmV0dXJuIGV2ZW50VHlwZXMkMS5jb21wb3NpdGlvblVwZGF0ZTtcbiAgfVxufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IFRPUF9LRVlfRE9XTiAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSBUT1BfS0VZX1VQOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSBUT1BfS0VZX0RPV046XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSBUT1BfS0VZX1BSRVNTOlxuICAgIGNhc2UgVE9QX01PVVNFX0RPV046XG4gICAgY2FzZSBUT1BfQkxVUjpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG5cbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBjb21wb3NpdGlvbiBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEtvcmVhbiBJTUUuXG4gKiBPdXIgZmFsbGJhY2sgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBJRSdzIEtvcmVhbiBJTUUsXG4gKiBzbyBqdXN0IHVzZSBuYXRpdmUgY29tcG9zaXRpb24gZXZlbnRzIHdoZW4gS29yZWFuIElNRSBpcyB1c2VkLlxuICogQWx0aG91Z2ggQ29tcG9zaXRpb25FdmVudC5sb2NhbGUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCxcbiAqIGl0IGlzIGF2YWlsYWJsZSBpbiBJRSwgd2hlcmUgb3VyIGZhbGxiYWNrIG1vZGUgaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59IC8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cblxuXG52YXIgaXNDb21wb3NpbmcgPSBmYWxzZTtcbi8qKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BMZXZlbFR5cGUpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2luZykge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcyQxLmNvbXBvc2l0aW9uU3RhcnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMkMS5jb21wb3NpdGlvbkVuZDtcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghaXNDb21wb3NpbmcgJiYgZXZlbnRUeXBlID09PSBldmVudFR5cGVzJDEuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgaXNDb21wb3NpbmcgPSBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcyQxLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgfVxuICB9XG5cbiAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogQHBhcmFtIHtUb3BMZXZlbFR5cGV9IHRvcExldmVsVHlwZSBOdW1iZXIgZnJvbSBgVG9wTGV2ZWxUeXBlYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIFRPUF9DT01QT1NJVElPTl9FTkQ6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlIFRPUF9LRVlfUFJFU1M6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSBUT1BfVEVYVF9JTlBVVDpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRvcExldmVsVHlwZSBOdW1iZXIgZnJvbSBgVG9wTGV2ZWxFdmVudFR5cGVzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmYWxsYmFjayBzdHJpbmcgZm9yIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0NPTVBPU0lUSU9OX0VORCB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIFRPUF9QQVNURTpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBUT1BfS0VZX1BSRVNTOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBUT1BfQ09NUE9TSVRJT05fRU5EOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNJbnB1dEV2ZW50LmdldFBvb2xlZChldmVudFR5cGVzJDEuYmVmb3JlSW5wdXQsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzJDEsXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncykge1xuICAgIHZhciBjb21wb3NpdGlvbiA9IGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB2YXIgYmVmb3JlSW5wdXQgPSBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICBpZiAoY29tcG9zaXRpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiZWZvcmVJbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoYmVmb3JlSW5wdXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb21wb3NpdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gW2NvbXBvc2l0aW9uLCBiZWZvcmVJbnB1dF07XG4gIH1cbn07XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBldmVudFR5cGVzJDIgPSB7XG4gIGNoYW5nZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25DaGFuZ2UnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNoYW5nZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfQkxVUiwgVE9QX0NIQU5HRSwgVE9QX0NMSUNLLCBUT1BfRk9DVVMsIFRPUF9JTlBVVCwgVE9QX0tFWV9ET1dOLCBUT1BfS0VZX1VQLCBUT1BfU0VMRUNUSU9OX0NIQU5HRV1cbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgdmFyIGV2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKGV2ZW50VHlwZXMkMi5jaGFuZ2UsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICBldmVudC50eXBlID0gJ2NoYW5nZSc7IC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cblxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZXZlbnQgPSBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGV2ZW50KSB7XG4gIHJ1bkV2ZW50c0luQmF0Y2goZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UkMSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9DSEFOR0UpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwodG9wTGV2ZWxUeXBlLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0ZPQ1VTKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gVE9QX0JMVVIpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSBUT1BfU0VMRUNUSU9OX0NIQU5HRSB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9LRVlfVVAgfHwgdG9wTGV2ZWxUeXBlID09PSBUT1BfS0VZX0RPV04pIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSBUT1BfQ0xJQ0spIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9JTlBVVCB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9DSEFOR0UpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nKSB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cblxuXG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMkMixcbiAgX2lzSW5wdXRFdmVudFN1cHBvcnRlZDogaXNJbnB1dEV2ZW50U3VwcG9ydGVkLFxuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlJDEodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gICAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0YXJnZXROb2RlKSkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtcbiAgICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0KTtcblxuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgICB9IC8vIFdoZW4gYmx1cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG5cblxuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9CTFVSKSB7XG4gICAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBNb2R1bGUgdGhhdCBpcyBpbmplY3RhYmxlIGludG8gYEV2ZW50UGx1Z2luSHViYCwgdGhhdCBzcGVjaWZpZXMgYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyBvZiBgRXZlbnRQbHVnaW5gcy4gQSBjb252ZW5pZW50IHdheSB0byByZWFzb24gYWJvdXRcbiAqIHBsdWdpbnMsIHdpdGhvdXQgaGF2aW5nIHRvIHBhY2thZ2UgZXZlcnkgb25lIG9mIHRoZW0uIFRoaXMgaXMgYmV0dGVyIHRoYW5cbiAqIGhhdmluZyBwbHVnaW5zIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFyZSBpbmplY3RlZCBiZWNhdXNlXG4gKiB0aGF0IG9yZGVyaW5nIHdvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBhY2thZ2luZyBvcmRlci5cbiAqIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgbXVzdCBvY2N1ciBiZWZvcmUgYFNpbXBsZUV2ZW50UGx1Z2luYCBzbyB0aGF0XG4gKiBwcmV2ZW50aW5nIGRlZmF1bHQgb24gZXZlbnRzIGlzIGNvbnZlbmllbnQgaW4gYFNpbXBsZUV2ZW50UGx1Z2luYCBoYW5kbGVycy5cbiAqL1xudmFyIERPTUV2ZW50UGx1Z2luT3JkZXIgPSBbJ1Jlc3BvbmRlckV2ZW50UGx1Z2luJywgJ1NpbXBsZUV2ZW50UGx1Z2luJywgJ0VudGVyTGVhdmVFdmVudFBsdWdpbicsICdDaGFuZ2VFdmVudFBsdWdpbicsICdTZWxlY3RFdmVudFBsdWdpbicsICdCZWZvcmVJbnB1dEV2ZW50UGx1Z2luJ107XG5cbnZhciBldmVudFR5cGVzJDMgPSB7XG4gIG1vdXNlRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Nb3VzZUVudGVyJyxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfTU9VU0VfT1VULCBUT1BfTU9VU0VfT1ZFUl1cbiAgfSxcbiAgbW91c2VMZWF2ZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1vdXNlTGVhdmUnLFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9NT1VTRV9PVVQsIFRPUF9NT1VTRV9PVkVSXVxuICB9LFxuICBwb2ludGVyRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiAnb25Qb2ludGVyRW50ZXInLFxuICAgIGRlcGVuZGVuY2llczogW1RPUF9QT0lOVEVSX09VVCwgVE9QX1BPSU5URVJfT1ZFUl1cbiAgfSxcbiAgcG9pbnRlckxlYXZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uUG9pbnRlckxlYXZlJyxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfUE9JTlRFUl9PVVQsIFRPUF9QT0lOVEVSX09WRVJdXG4gIH1cbn07IC8vIFdlIHRyYWNrIHRoZSBsYXN0TmF0aXZlRXZlbnQgdG8gZW5zdXJlIHRoYXQgd2hlbiB3ZSBlbmNvdW50ZXJcbi8vIGNhc2VzIHdoZXJlIHdlIHByb2Nlc3MgdGhlIHNhbWUgbmF0aXZlRXZlbnQgbXVsdGlwbGUgdGltZXMsXG4vLyB3aGljaCBjYW4gaGFwcGVuIHdoZW4gaGF2ZSBtdWx0aXBsZSBhbmNlc3RvcnMsIHRoYXQgd2UgZG9uJ3Rcbi8vIGR1cGxpY2F0ZSBlbnRlclxuXG52YXIgbGFzdE5hdGl2ZUV2ZW50O1xudmFyIEVudGVyTGVhdmVFdmVudFBsdWdpbiA9IHtcbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyQzLFxuXG4gIC8qKlxuICAgKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICAgKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gICAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAgICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gICAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICB2YXIgaXNPdmVyRXZlbnQgPSB0b3BMZXZlbFR5cGUgPT09IFRPUF9NT1VTRV9PVkVSIHx8IHRvcExldmVsVHlwZSA9PT0gVE9QX1BPSU5URVJfT1ZFUjtcbiAgICB2YXIgaXNPdXRFdmVudCA9IHRvcExldmVsVHlwZSA9PT0gVE9QX01PVVNFX09VVCB8fCB0b3BMZXZlbFR5cGUgPT09IFRPUF9QT0lOVEVSX09VVDtcblxuICAgIGlmIChpc092ZXJFdmVudCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1JFUExBWUVEKSA9PT0gMCAmJiAobmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgYW4gb3ZlciBldmVudCB3aXRoIGEgdGFyZ2V0LCB0aGVuIHdlJ3ZlIGFscmVhZHkgZGlzcGF0Y2hlZFxuICAgICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgICAgLy8gc28gd2UgaGF2ZSB0byBkbyBpdCBub3cgaW5zdGVhZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB3aW47XG5cbiAgICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgICAgLy8gYG5hdGl2ZUV2ZW50VGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4gPSB3aW5kb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb207XG4gICAgdmFyIHRvO1xuXG4gICAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcbiAgICAgIHRvID0gcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIDogbnVsbDtcblxuICAgICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICAgIGlmICh0byAhPT0gbmVhcmVzdE1vdW50ZWQgfHwgdG8udGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHRvLnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgICB0byA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICAgIGZyb20gPSBudWxsO1xuICAgICAgdG8gPSB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50SW50ZXJmYWNlLCBsZWF2ZUV2ZW50VHlwZSwgZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeDtcblxuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IFRPUF9NT1VTRV9PVVQgfHwgdG9wTGV2ZWxUeXBlID09PSBUT1BfTU9VU0VfT1ZFUikge1xuICAgICAgZXZlbnRJbnRlcmZhY2UgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgbGVhdmVFdmVudFR5cGUgPSBldmVudFR5cGVzJDMubW91c2VMZWF2ZTtcbiAgICAgIGVudGVyRXZlbnRUeXBlID0gZXZlbnRUeXBlcyQzLm1vdXNlRW50ZXI7XG4gICAgICBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuICAgIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSBUT1BfUE9JTlRFUl9PVVQgfHwgdG9wTGV2ZWxUeXBlID09PSBUT1BfUE9JTlRFUl9PVkVSKSB7XG4gICAgICBldmVudEludGVyZmFjZSA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgIGxlYXZlRXZlbnRUeXBlID0gZXZlbnRUeXBlcyQzLnBvaW50ZXJMZWF2ZTtcbiAgICAgIGVudGVyRXZlbnRUeXBlID0gZXZlbnRUeXBlcyQzLnBvaW50ZXJFbnRlcjtcbiAgICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgICB9XG5cbiAgICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlJDEoZnJvbSk7XG4gICAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlJDEodG8pO1xuICAgIHZhciBsZWF2ZSA9IGV2ZW50SW50ZXJmYWNlLmdldFBvb2xlZChsZWF2ZUV2ZW50VHlwZSwgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBsZWF2ZS50eXBlID0gZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICAgIHZhciBlbnRlciA9IGV2ZW50SW50ZXJmYWNlLmdldFBvb2xlZChlbnRlckV2ZW50VHlwZSwgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXIudHlwZSA9IGV2ZW50VHlwZVByZWZpeCArICdlbnRlcic7XG4gICAgZW50ZXIudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyLnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG5cbiAgICBpZiAobmF0aXZlRXZlbnQgPT09IGxhc3ROYXRpdmVFdmVudCkge1xuICAgICAgbGFzdE5hdGl2ZUV2ZW50ID0gbnVsbDtcbiAgICAgIHJldHVybiBbbGVhdmVdO1xuICAgIH1cblxuICAgIGxhc3ROYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHJldHVybiBbbGVhdmUsIGVudGVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBpcyQxID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzJDEob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzJDEob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcbnZhciBldmVudFR5cGVzJDQgPSB7XG4gIHNlbGVjdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25TZWxlY3QnLFxuICAgICAgY2FwdHVyZWQ6ICdvblNlbGVjdENhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtUT1BfQkxVUiwgVE9QX0NPTlRFWFRfTUVOVSwgVE9QX0RSQUdfRU5ELCBUT1BfRk9DVVMsIFRPUF9LRVlfRE9XTiwgVE9QX0tFWV9VUCwgVE9QX01PVVNFX0RPV04sIFRPUF9NT1VTRV9VUCwgVE9QX1NFTEVDVElPTl9DSEFOR0VdXG4gIH1cbn07XG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7RG9jdW1lbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgc3ludGhldGljRXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcyQ0LnNlbGVjdCwgYWN0aXZlRWxlbWVudEluc3QkMSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBzeW50aGV0aWNFdmVudC50eXBlID0gJ3NlbGVjdCc7XG4gICAgc3ludGhldGljRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoc3ludGhldGljRXZlbnQpO1xuICAgIHJldHVybiBzeW50aGV0aWNFdmVudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxudmFyIFNlbGVjdEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzJDQsXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncykge1xuICAgIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTsgLy8gVHJhY2sgd2hldGhlciBhbGwgbGlzdGVuZXJzIGV4aXN0cyBmb3IgdGhpcyBwbHVnaW4uIElmIG5vbmUgZXhpc3QsIHdlIGRvXG4gICAgLy8gbm90IGV4dHJhY3QgZXZlbnRzLiBTZWUgIzM2MzkuXG5cbiAgICBpZiAoIWRvYyB8fCAhaXNMaXN0ZW5pbmdUb0FsbERlcGVuZGVuY2llcygnb25TZWxlY3QnLCBkb2MpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlJDEodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgICBjYXNlIFRPUF9GT0NVUzpcbiAgICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFRPUF9CTFVSOlxuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgICAgY2FzZSBUT1BfTU9VU0VfRE9XTjpcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVE9QX0NPTlRFWFRfTUVOVTpcbiAgICAgIGNhc2UgVE9QX01PVVNFX1VQOlxuICAgICAgY2FzZSBUT1BfRFJBR19FTkQ6XG4gICAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgICAgLy9cbiAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgICAgY2FzZSBUT1BfU0VMRUNUSU9OX0NIQU5HRTpcbiAgICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgICAgY2FzZSBUT1BfS0VZX0RPV046XG4gICAgICBjYXNlIFRPUF9LRVlfVVA6XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEluamVjdCBtb2R1bGVzIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICovXG5cbmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKERPTUV2ZW50UGx1Z2luT3JkZXIpO1xuc2V0Q29tcG9uZW50VHJlZShnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlJDEsIGdldEluc3RhbmNlRnJvbU5vZGUkMSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSQxKTtcbi8qKlxuICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gKiB0aGVtKS5cbiAqL1xuXG5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgU2ltcGxlRXZlbnRQbHVnaW46IFNpbXBsZUV2ZW50UGx1Z2luLFxuICBFbnRlckxlYXZlRXZlbnRQbHVnaW46IEVudGVyTGVhdmVFdmVudFBsdWdpbixcbiAgQ2hhbmdlRXZlbnRQbHVnaW46IENoYW5nZUV2ZW50UGx1Z2luLFxuICBTZWxlY3RFdmVudFBsdWdpbjogU2VsZWN0RXZlbnRQbHVnaW4sXG4gIEJlZm9yZUlucHV0RXZlbnRQbHVnaW46IEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbn0pO1xuXG4vLyBQcmVmaXggbWVhc3VyZW1lbnRzIHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0byBmaWx0ZXIgdGhlbS5cbi8vIExvbmdlciBwcmVmaXhlcyBhcmUgaGFyZCB0byByZWFkIGluIERldlRvb2xzLlxudmFyIHJlYWN0RW1vamkgPSBcIlxcdTI2OUJcIjtcbnZhciB3YXJuaW5nRW1vamkgPSBcIlxcdTI2RDRcIjtcbnZhciBzdXBwb3J0c1VzZXJUaW1pbmcgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5tYXJrID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5jbGVhck1hcmtzID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5tZWFzdXJlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzID09PSAnZnVuY3Rpb24nOyAvLyBLZWVwIHRyYWNrIG9mIGN1cnJlbnQgZmliZXIgc28gdGhhdCB3ZSBrbm93IHRoZSBwYXRoIHRvIHVud2luZCBvbiBwYXVzZS5cbi8vIFRPRE86IHRoaXMgbG9va3MgdGhlIHNhbWUgYXMgbmV4dFVuaXRPZldvcmsgaW4gc2NoZWR1bGVyLiBDYW4gd2UgdW5pZnkgdGhlbT9cblxudmFyIGN1cnJlbnRGaWJlciA9IG51bGw7IC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdXNlciBjb2RlLCB3aGljaCBmaWJlciBhbmQgbWV0aG9kIGlzIGl0P1xuLy8gUmV1c2luZyBgY3VycmVudEZpYmVyYCB3b3VsZCBiZSBjb25mdXNpbmcgZm9yIHRoaXMgYmVjYXVzZSB1c2VyIGNvZGUgZmliZXJcbi8vIGNhbiBjaGFuZ2UgZHVyaW5nIGNvbW1pdCBwaGFzZSB0b28sIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHVud2luZCBpdCAoc2luY2Vcbi8vIGxpZmVjeWNsZXMgaW4gdGhlIGNvbW1pdCBwaGFzZSBkb24ndCByZXNlbWJsZSBhIHRyZWUpLlxuXG52YXIgY3VycmVudFBoYXNlID0gbnVsbDtcbnZhciBjdXJyZW50UGhhc2VGaWJlciA9IG51bGw7IC8vIERpZCBsaWZlY3ljbGUgaG9vayBzY2hlZHVsZSBhbiB1cGRhdGU/IFRoaXMgaXMgb2Z0ZW4gYSBwZXJmb3JtYW5jZSBwcm9ibGVtLFxuLy8gc28gd2Ugd2lsbCBrZWVwIHRyYWNrIG9mIGl0LCBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgcmVwb3J0LlxuLy8gVHJhY2sgY29tbWl0cyBjYXVzZWQgYnkgY2FzY2FkaW5nIHVwZGF0ZXMuXG5cbnZhciBpc0NvbW1pdHRpbmcgPSBmYWxzZTtcbnZhciBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRDb21taXQgPSBmYWxzZTtcbnZhciBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRQaGFzZSA9IGZhbHNlO1xudmFyIGNvbW1pdENvdW50SW5DdXJyZW50V29ya0xvb3AgPSAwO1xudmFyIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbi8vIHRvIGF2b2lkIHN0cmV0Y2ggdGhlIGNvbW1pdCBwaGFzZSB3aXRoIG1lYXN1cmVtZW50IG92ZXJoZWFkLlxuXG52YXIgbGFiZWxzSW5DdXJyZW50Q29tbWl0ID0gbmV3IFNldCgpO1xuXG52YXIgZm9ybWF0TWFya05hbWUgPSBmdW5jdGlvbiAobWFya05hbWUpIHtcbiAgcmV0dXJuIHJlYWN0RW1vamkgKyBcIiBcIiArIG1hcmtOYW1lO1xufTtcblxudmFyIGZvcm1hdExhYmVsID0gZnVuY3Rpb24gKGxhYmVsLCB3YXJuaW5nKSB7XG4gIHZhciBwcmVmaXggPSB3YXJuaW5nID8gd2FybmluZ0Vtb2ppICsgXCIgXCIgOiByZWFjdEVtb2ppICsgXCIgXCI7XG4gIHZhciBzdWZmaXggPSB3YXJuaW5nID8gXCIgV2FybmluZzogXCIgKyB3YXJuaW5nIDogJyc7XG4gIHJldHVybiBcIlwiICsgcHJlZml4ICsgbGFiZWwgKyBzdWZmaXg7XG59O1xuXG52YXIgYmVnaW5NYXJrID0gZnVuY3Rpb24gKG1hcmtOYW1lKSB7XG4gIHBlcmZvcm1hbmNlLm1hcmsoZm9ybWF0TWFya05hbWUobWFya05hbWUpKTtcbn07XG5cbnZhciBjbGVhck1hcmsgPSBmdW5jdGlvbiAobWFya05hbWUpIHtcbiAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhmb3JtYXRNYXJrTmFtZShtYXJrTmFtZSkpO1xufTtcblxudmFyIGVuZE1hcmsgPSBmdW5jdGlvbiAobGFiZWwsIG1hcmtOYW1lLCB3YXJuaW5nKSB7XG4gIHZhciBmb3JtYXR0ZWRNYXJrTmFtZSA9IGZvcm1hdE1hcmtOYW1lKG1hcmtOYW1lKTtcbiAgdmFyIGZvcm1hdHRlZExhYmVsID0gZm9ybWF0TGFiZWwobGFiZWwsIHdhcm5pbmcpO1xuXG4gIHRyeSB7XG4gICAgcGVyZm9ybWFuY2UubWVhc3VyZShmb3JtYXR0ZWRMYWJlbCwgZm9ybWF0dGVkTWFya05hbWUpO1xuICB9IGNhdGNoIChlcnIpIHt9IC8vIElmIHByZXZpb3VzIG1hcmsgd2FzIG1pc3NpbmcgZm9yIHNvbWUgcmVhc29uLCB0aGlzIHdpbGwgdGhyb3cuXG4gIC8vIFRoaXMgY291bGQgb25seSBoYXBwZW4gaWYgUmVhY3QgY3Jhc2hlZCBpbiBhbiB1bmV4cGVjdGVkIHBsYWNlIGVhcmxpZXIuXG4gIC8vIERvbid0IHBpbGUgb24gd2l0aCBtb3JlIGVycm9ycy5cbiAgLy8gQ2xlYXIgbWFya3MgaW1tZWRpYXRlbHkgdG8gYXZvaWQgZ3Jvd2luZyBidWZmZXIuXG5cblxuICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKGZvcm1hdHRlZE1hcmtOYW1lKTtcbiAgcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcyhmb3JtYXR0ZWRMYWJlbCk7XG59O1xuXG52YXIgZ2V0RmliZXJNYXJrTmFtZSA9IGZ1bmN0aW9uIChsYWJlbCwgZGVidWdJRCkge1xuICByZXR1cm4gbGFiZWwgKyBcIiAoI1wiICsgZGVidWdJRCArIFwiKVwiO1xufTtcblxudmFyIGdldEZpYmVyTGFiZWwgPSBmdW5jdGlvbiAoY29tcG9uZW50TmFtZSwgaXNNb3VudGVkLCBwaGFzZSkge1xuICBpZiAocGhhc2UgPT09IG51bGwpIHtcbiAgICAvLyBUaGVzZSBhcmUgY29tcG9zaXRlIGNvbXBvbmVudCB0b3RhbCB0aW1lIG1lYXN1cmVtZW50cy5cbiAgICByZXR1cm4gY29tcG9uZW50TmFtZSArIFwiIFtcIiArIChpc01vdW50ZWQgPyAndXBkYXRlJyA6ICdtb3VudCcpICsgXCJdXCI7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29tcG9zaXRlIGNvbXBvbmVudCBtZXRob2RzLlxuICAgIHJldHVybiBjb21wb25lbnROYW1lICsgXCIuXCIgKyBwaGFzZTtcbiAgfVxufTtcblxudmFyIGJlZ2luRmliZXJNYXJrID0gZnVuY3Rpb24gKGZpYmVyLCBwaGFzZSkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuICB2YXIgZGVidWdJRCA9IGZpYmVyLl9kZWJ1Z0lEO1xuICB2YXIgaXNNb3VudGVkID0gZmliZXIuYWx0ZXJuYXRlICE9PSBudWxsO1xuICB2YXIgbGFiZWwgPSBnZXRGaWJlckxhYmVsKGNvbXBvbmVudE5hbWUsIGlzTW91bnRlZCwgcGhhc2UpO1xuXG4gIGlmIChpc0NvbW1pdHRpbmcgJiYgbGFiZWxzSW5DdXJyZW50Q29tbWl0LmhhcyhsYWJlbCkpIHtcbiAgICAvLyBEdXJpbmcgdGhlIGNvbW1pdCBwaGFzZSwgd2UgZG9uJ3Qgc2hvdyBkdXBsaWNhdGUgbGFiZWxzIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBhIGZpeGVkIG92ZXJoZWFkIGZvciBldmVyeSBtZWFzdXJlbWVudCwgYW5kIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byBzdHJldGNoIHRoZSBjb21taXQgcGhhc2UgYmV5b25kIG5lY2Vzc2FyeS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsYWJlbHNJbkN1cnJlbnRDb21taXQuYWRkKGxhYmVsKTtcbiAgdmFyIG1hcmtOYW1lID0gZ2V0RmliZXJNYXJrTmFtZShsYWJlbCwgZGVidWdJRCk7XG4gIGJlZ2luTWFyayhtYXJrTmFtZSk7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGNsZWFyRmliZXJNYXJrID0gZnVuY3Rpb24gKGZpYmVyLCBwaGFzZSkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuICB2YXIgZGVidWdJRCA9IGZpYmVyLl9kZWJ1Z0lEO1xuICB2YXIgaXNNb3VudGVkID0gZmliZXIuYWx0ZXJuYXRlICE9PSBudWxsO1xuICB2YXIgbGFiZWwgPSBnZXRGaWJlckxhYmVsKGNvbXBvbmVudE5hbWUsIGlzTW91bnRlZCwgcGhhc2UpO1xuICB2YXIgbWFya05hbWUgPSBnZXRGaWJlck1hcmtOYW1lKGxhYmVsLCBkZWJ1Z0lEKTtcbiAgY2xlYXJNYXJrKG1hcmtOYW1lKTtcbn07XG5cbnZhciBlbmRGaWJlck1hcmsgPSBmdW5jdGlvbiAoZmliZXIsIHBoYXNlLCB3YXJuaW5nKSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG4gIHZhciBkZWJ1Z0lEID0gZmliZXIuX2RlYnVnSUQ7XG4gIHZhciBpc01vdW50ZWQgPSBmaWJlci5hbHRlcm5hdGUgIT09IG51bGw7XG4gIHZhciBsYWJlbCA9IGdldEZpYmVyTGFiZWwoY29tcG9uZW50TmFtZSwgaXNNb3VudGVkLCBwaGFzZSk7XG4gIHZhciBtYXJrTmFtZSA9IGdldEZpYmVyTWFya05hbWUobGFiZWwsIGRlYnVnSUQpO1xuICBlbmRNYXJrKGxhYmVsLCBtYXJrTmFtZSwgd2FybmluZyk7XG59O1xuXG52YXIgc2hvdWxkSWdub3JlRmliZXIgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgLy8gSG9zdCBjb21wb25lbnRzIHNob3VsZCBiZSBza2lwcGVkIGluIHRoZSB0aW1lbGluZS5cbiAgLy8gV2UgY291bGQgY2hlY2sgdHlwZW9mIGZpYmVyLnR5cGUsIGJ1dCBkb2VzIHRoaXMgd29yayB3aXRoIFJOP1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgY2xlYXJQZW5kaW5nUGhhc2VNZWFzdXJlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGN1cnJlbnRQaGFzZSAhPT0gbnVsbCAmJiBjdXJyZW50UGhhc2VGaWJlciAhPT0gbnVsbCkge1xuICAgIGNsZWFyRmliZXJNYXJrKGN1cnJlbnRQaGFzZUZpYmVyLCBjdXJyZW50UGhhc2UpO1xuICB9XG5cbiAgY3VycmVudFBoYXNlRmliZXIgPSBudWxsO1xuICBjdXJyZW50UGhhc2UgPSBudWxsO1xuICBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRQaGFzZSA9IGZhbHNlO1xufTtcblxudmFyIHBhdXNlVGltZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyBTdG9wcyBhbGwgY3VycmVudGx5IGFjdGl2ZSBtZWFzdXJlbWVudHMgc28gdGhhdCB0aGV5IGNhbiBiZSByZXN1bWVkXG4gIC8vIGlmIHdlIGNvbnRpbnVlIGluIGEgbGF0ZXIgZGVmZXJyZWQgbG9vcCBmcm9tIHRoZSBzYW1lIHVuaXQgb2Ygd29yay5cbiAgdmFyIGZpYmVyID0gY3VycmVudEZpYmVyO1xuXG4gIHdoaWxlIChmaWJlcikge1xuICAgIGlmIChmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZykge1xuICAgICAgZW5kRmliZXJNYXJrKGZpYmVyLCBudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxufTtcblxudmFyIHJlc3VtZVRpbWVyc1JlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIGlmIChmaWJlci5yZXR1cm4gIT09IG51bGwpIHtcbiAgICByZXN1bWVUaW1lcnNSZWN1cnNpdmVseShmaWJlci5yZXR1cm4pO1xuICB9XG5cbiAgaWYgKGZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nKSB7XG4gICAgYmVnaW5GaWJlck1hcmsoZmliZXIsIG51bGwpO1xuICB9XG59O1xuXG52YXIgcmVzdW1lVGltZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyBSZXN1bWVzIGFsbCBtZWFzdXJlbWVudHMgdGhhdCB3ZXJlIGFjdGl2ZSBkdXJpbmcgdGhlIGxhc3QgZGVmZXJyZWQgbG9vcC5cbiAgaWYgKGN1cnJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgIHJlc3VtZVRpbWVyc1JlY3Vyc2l2ZWx5KGN1cnJlbnRGaWJlcik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlY29yZEVmZmVjdCgpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWNvcmRTY2hlZHVsZVVwZGF0ZSgpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoaXNDb21taXR0aW5nKSB7XG4gICAgICBoYXNTY2hlZHVsZWRVcGRhdGVJbkN1cnJlbnRDb21taXQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UGhhc2UgIT09IG51bGwgJiYgY3VycmVudFBoYXNlICE9PSAnY29tcG9uZW50V2lsbE1vdW50JyAmJiBjdXJyZW50UGhhc2UgIT09ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJykge1xuICAgICAgaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50UGhhc2UgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0YXJ0V29ya1RpbWVyKGZpYmVyKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcgfHwgc2hvdWxkSWdub3JlRmliZXIoZmliZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBwYXVzZSwgdGhpcyBpcyB0aGUgZmliZXIgdG8gdW53aW5kIGZyb20uXG5cblxuICAgIGN1cnJlbnRGaWJlciA9IGZpYmVyO1xuXG4gICAgaWYgKCFiZWdpbkZpYmVyTWFyayhmaWJlciwgbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZyA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbmNlbFdvcmtUaW1lcihmaWJlcikge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nIHx8IHNob3VsZElnbm9yZUZpYmVyKGZpYmVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUmVtZW1iZXIgd2Ugc2hvdWxkbid0IGNvbXBsZXRlIG1lYXN1cmVtZW50IGZvciB0aGlzIGZpYmVyLlxuICAgIC8vIE90aGVyd2lzZSBmbGFtZWNoYXJ0IHdpbGwgYmUgZGVlcCBldmVuIGZvciBzbWFsbCB1cGRhdGVzLlxuXG5cbiAgICBmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZyA9IGZhbHNlO1xuICAgIGNsZWFyRmliZXJNYXJrKGZpYmVyLCBudWxsKTtcbiAgfVxufVxuZnVuY3Rpb24gc3RvcFdvcmtUaW1lcihmaWJlcikge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nIHx8IHNob3VsZElnbm9yZUZpYmVyKGZpYmVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgcGF1c2UsIGl0cyBwYXJlbnQgaXMgdGhlIGZpYmVyIHRvIHVud2luZCBmcm9tLlxuXG5cbiAgICBjdXJyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XG5cbiAgICBpZiAoIWZpYmVyLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmliZXIuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmcgPSBmYWxzZTtcbiAgICBlbmRGaWJlck1hcmsoZmliZXIsIG51bGwsIG51bGwpO1xuICB9XG59XG5mdW5jdGlvbiBzdG9wRmFpbGVkV29ya1RpbWVyKGZpYmVyKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcgfHwgc2hvdWxkSWdub3JlRmliZXIoZmliZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBwYXVzZSwgaXRzIHBhcmVudCBpcyB0aGUgZmliZXIgdG8gdW53aW5kIGZyb20uXG5cblxuICAgIGN1cnJlbnRGaWJlciA9IGZpYmVyLnJldHVybjtcblxuICAgIGlmICghZmliZXIuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWJlci5fZGVidWdJc0N1cnJlbnRseVRpbWluZyA9IGZhbHNlO1xuICAgIHZhciB3YXJuaW5nID0gZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCA/ICdSZW5kZXJpbmcgd2FzIHN1c3BlbmRlZCcgOiAnQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgdGhpcyBlcnJvciBib3VuZGFyeSc7XG4gICAgZW5kRmliZXJNYXJrKGZpYmVyLCBudWxsLCB3YXJuaW5nKTtcbiAgfVxufVxuZnVuY3Rpb24gc3RhcnRQaGFzZVRpbWVyKGZpYmVyLCBwaGFzZSkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJQZW5kaW5nUGhhc2VNZWFzdXJlbWVudCgpO1xuXG4gICAgaWYgKCFiZWdpbkZpYmVyTWFyayhmaWJlciwgcGhhc2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VycmVudFBoYXNlRmliZXIgPSBmaWJlcjtcbiAgICBjdXJyZW50UGhhc2UgPSBwaGFzZTtcbiAgfVxufVxuZnVuY3Rpb24gc3RvcFBoYXNlVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFBoYXNlICE9PSBudWxsICYmIGN1cnJlbnRQaGFzZUZpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgd2FybmluZyA9IGhhc1NjaGVkdWxlZFVwZGF0ZUluQ3VycmVudFBoYXNlID8gJ1NjaGVkdWxlZCBhIGNhc2NhZGluZyB1cGRhdGUnIDogbnVsbDtcbiAgICAgIGVuZEZpYmVyTWFyayhjdXJyZW50UGhhc2VGaWJlciwgY3VycmVudFBoYXNlLCB3YXJuaW5nKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UGhhc2UgPSBudWxsO1xuICAgIGN1cnJlbnRQaGFzZUZpYmVyID0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gc3RhcnRXb3JrTG9vcFRpbWVyKG5leHRVbml0T2ZXb3JrKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgY3VycmVudEZpYmVyID0gbmV4dFVuaXRPZldvcms7XG5cbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbW1pdENvdW50SW5DdXJyZW50V29ya0xvb3AgPSAwOyAvLyBUaGlzIGlzIHRvcCBsZXZlbCBjYWxsLlxuICAgIC8vIEFueSBvdGhlciBtZWFzdXJlbWVudHMgYXJlIHBlcmZvcm1lZCB3aXRoaW4uXG5cbiAgICBiZWdpbk1hcmsoJyhSZWFjdCBUcmVlIFJlY29uY2lsaWF0aW9uKScpOyAvLyBSZXN1bWUgYW55IG1lYXN1cmVtZW50cyB0aGF0IHdlcmUgaW4gcHJvZ3Jlc3MgZHVyaW5nIHRoZSBsYXN0IGxvb3AuXG5cbiAgICByZXN1bWVUaW1lcnMoKTtcbiAgfVxufVxuZnVuY3Rpb24gc3RvcFdvcmtMb29wVGltZXIoaW50ZXJydXB0ZWRCeSwgZGlkQ29tcGxldGVSb290KSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZyA9IG51bGw7XG5cbiAgICBpZiAoaW50ZXJydXB0ZWRCeSAhPT0gbnVsbCkge1xuICAgICAgaWYgKGludGVycnVwdGVkQnkudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB3YXJuaW5nID0gJ0EgdG9wLWxldmVsIHVwZGF0ZSBpbnRlcnJ1cHRlZCB0aGUgcHJldmlvdXMgcmVuZGVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShpbnRlcnJ1cHRlZEJ5LnR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgICAgd2FybmluZyA9IFwiQW4gdXBkYXRlIHRvIFwiICsgY29tcG9uZW50TmFtZSArIFwiIGludGVycnVwdGVkIHRoZSBwcmV2aW91cyByZW5kZXJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbW1pdENvdW50SW5DdXJyZW50V29ya0xvb3AgPiAxKSB7XG4gICAgICB3YXJuaW5nID0gJ1RoZXJlIHdlcmUgY2FzY2FkaW5nIHVwZGF0ZXMnO1xuICAgIH1cblxuICAgIGNvbW1pdENvdW50SW5DdXJyZW50V29ya0xvb3AgPSAwO1xuICAgIHZhciBsYWJlbCA9IGRpZENvbXBsZXRlUm9vdCA/ICcoUmVhY3QgVHJlZSBSZWNvbmNpbGlhdGlvbjogQ29tcGxldGVkIFJvb3QpJyA6ICcoUmVhY3QgVHJlZSBSZWNvbmNpbGlhdGlvbjogWWllbGRlZCknOyAvLyBQYXVzZSBhbnkgbWVhc3VyZW1lbnRzIHVudGlsIHRoZSBuZXh0IGxvb3AuXG5cbiAgICBwYXVzZVRpbWVycygpO1xuICAgIGVuZE1hcmsobGFiZWwsICcoUmVhY3QgVHJlZSBSZWNvbmNpbGlhdGlvbiknLCB3YXJuaW5nKTtcbiAgfVxufVxuZnVuY3Rpb24gc3RhcnRDb21taXRUaW1lcigpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzQ29tbWl0dGluZyA9IHRydWU7XG4gICAgaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50Q29tbWl0ID0gZmFsc2U7XG4gICAgbGFiZWxzSW5DdXJyZW50Q29tbWl0LmNsZWFyKCk7XG4gICAgYmVnaW5NYXJrKCcoQ29tbWl0dGluZyBDaGFuZ2VzKScpO1xuICB9XG59XG5mdW5jdGlvbiBzdG9wQ29tbWl0VGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZyA9IG51bGw7XG5cbiAgICBpZiAoaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50Q29tbWl0KSB7XG4gICAgICB3YXJuaW5nID0gJ0xpZmVjeWNsZSBob29rIHNjaGVkdWxlZCBhIGNhc2NhZGluZyB1cGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoY29tbWl0Q291bnRJbkN1cnJlbnRXb3JrTG9vcCA+IDApIHtcbiAgICAgIHdhcm5pbmcgPSAnQ2F1c2VkIGJ5IGEgY2FzY2FkaW5nIHVwZGF0ZSBpbiBlYXJsaWVyIGNvbW1pdCc7XG4gICAgfVxuXG4gICAgaGFzU2NoZWR1bGVkVXBkYXRlSW5DdXJyZW50Q29tbWl0ID0gZmFsc2U7XG4gICAgY29tbWl0Q291bnRJbkN1cnJlbnRXb3JrTG9vcCsrO1xuICAgIGlzQ29tbWl0dGluZyA9IGZhbHNlO1xuICAgIGxhYmVsc0luQ3VycmVudENvbW1pdC5jbGVhcigpO1xuICAgIGVuZE1hcmsoJyhDb21taXR0aW5nIENoYW5nZXMpJywgJyhDb21taXR0aW5nIENoYW5nZXMpJywgd2FybmluZyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHN0YXJ0Q29tbWl0U25hcHNob3RFZmZlY3RzVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCA9IDA7XG4gICAgYmVnaW5NYXJrKCcoQ29tbWl0dGluZyBTbmFwc2hvdCBFZmZlY3RzKScpO1xuICB9XG59XG5mdW5jdGlvbiBzdG9wQ29tbWl0U25hcHNob3RFZmZlY3RzVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY291bnQgPSBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdDtcbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCA9IDA7XG4gICAgZW5kTWFyayhcIihDb21taXR0aW5nIFNuYXBzaG90IEVmZmVjdHM6IFwiICsgY291bnQgKyBcIiBUb3RhbClcIiwgJyhDb21taXR0aW5nIFNuYXBzaG90IEVmZmVjdHMpJywgbnVsbCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHN0YXJ0Q29tbWl0SG9zdEVmZmVjdHNUaW1lcigpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbiAgICBiZWdpbk1hcmsoJyhDb21taXR0aW5nIEhvc3QgRWZmZWN0cyknKTtcbiAgfVxufVxuZnVuY3Rpb24gc3RvcENvbW1pdEhvc3RFZmZlY3RzVGltZXIoKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJKSB7XG4gICAgaWYgKCFzdXBwb3J0c1VzZXJUaW1pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY291bnQgPSBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdDtcbiAgICBlZmZlY3RDb3VudEluQ3VycmVudENvbW1pdCA9IDA7XG4gICAgZW5kTWFyayhcIihDb21taXR0aW5nIEhvc3QgRWZmZWN0czogXCIgKyBjb3VudCArIFwiIFRvdGFsKVwiLCAnKENvbW1pdHRpbmcgSG9zdCBFZmZlY3RzKScsIG51bGwpO1xuICB9XG59XG5mdW5jdGlvbiBzdGFydENvbW1pdExpZmVDeWNsZXNUaW1lcigpIHtcbiAgaWYgKGVuYWJsZVVzZXJUaW1pbmdBUEkpIHtcbiAgICBpZiAoIXN1cHBvcnRzVXNlclRpbWluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVmZmVjdENvdW50SW5DdXJyZW50Q29tbWl0ID0gMDtcbiAgICBiZWdpbk1hcmsoJyhDYWxsaW5nIExpZmVjeWNsZSBNZXRob2RzKScpO1xuICB9XG59XG5mdW5jdGlvbiBzdG9wQ29tbWl0TGlmZUN5Y2xlc1RpbWVyKCkge1xuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIGlmICghc3VwcG9ydHNVc2VyVGltaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvdW50ID0gZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQ7XG4gICAgZWZmZWN0Q291bnRJbkN1cnJlbnRDb21taXQgPSAwO1xuICAgIGVuZE1hcmsoXCIoQ2FsbGluZyBMaWZlY3ljbGUgTWV0aG9kczogXCIgKyBjb3VudCArIFwiIFRvdGFsKVwiLCAnKENhbGxpbmcgTGlmZWN5Y2xlIE1ldGhvZHMpJywgbnVsbCk7XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgICAgLy8gd2UgbWF5IGhhdmUgYWxyZWFkeSBwdXNoZWQgaXRzIG93biBjaGlsZCBjb250ZXh0IG9uIHRoZSBzdGFjay4gQSBjb250ZXh0XG4gICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAgaWYgKGRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIHtcbiAgaWYgKGRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUsIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAgaWYgKGRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIGlmIChkaXNhYmxlTGVnYWN5Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAgaWYgKGRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIGlmIChkaXNhYmxlTGVnYWN5Q29udGV4dCkge1xuICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0O1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudFBoYXNlKCdnZXRDaGlsZENvbnRleHQnKTtcbiAgICB9XG5cbiAgICBzdGFydFBoYXNlVGltZXIoZmliZXIsICdnZXRDaGlsZENvbnRleHQnKTtcbiAgICBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcbiAgICBzdG9wUGhhc2VUaW1lcigpO1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudFBoYXNlKG51bGwpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoKGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nKSArIFwiLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXFxcIlwiICsgY29udGV4dEtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lLCAvLyBJbiBwcmFjdGljZSwgdGhlcmUgaXMgb25lIGNhc2UgaW4gd2hpY2ggd2Ugd29uJ3QgZ2V0IGEgc3RhY2suIEl0J3Mgd2hlblxuICAgICAgLy8gc29tZWJvZHkgY2FsbHMgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoKSBhbmQgd2UgcHJvY2Vzc1xuICAgICAgLy8gY29udGV4dCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50IGluc3RhbmNlLiBUaGUgc3RhY2sgd2lsbCBiZSBtaXNzaW5nXG4gICAgICAvLyBiZWNhdXNlIGl0J3Mgb3V0c2lkZSBvZiB0aGUgcmVjb25jaWxpYXRpb24sIGFuZCBzbyB0aGUgcG9pbnRlciBoYXMgbm90XG4gICAgICAvLyBiZWVuIHNldC4gVGhpcyBpcyByYXJlIGFuZCBkb2Vzbid0IG1hdHRlci4gV2UnbGwgYWxzbyByZW1vdmUgdGhhdCBBUEkuXG4gICAgICBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwge30sIGNoaWxkQ29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gICAgLy8gYW5kIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGxhdGVyIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjb250ZXh0LlxuXG4gICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHN1YnRyZWUgcGFyZW50IHRvIGJlIGEgbW91bnRlZCBjbGFzcyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQmxvY2tpbmdSb290ID0gMTtcbnZhciBDb25jdXJyZW50Um9vdCA9IDI7XG5cbi8vIEludGVudGlvbmFsbHkgbm90IG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgd291bGQgdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yXG4vLyBDb21tb25KUyBpbnRlcm9wIG5hbWVkIGltcG9ydHMuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG52YXIgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbnZhciBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG52YXIgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkO1xudmFyIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50O1xudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbnZhciBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk7XG52YXIgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xudmFyIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eTtcbnZhciBTY2hlZHVsZXJfTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHk7XG52YXIgU2NoZWR1bGVyX0lkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5cbmlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwOi8vZmIubWUvcmVhY3QtcHJvZmlsaW5nXCIpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyX3Nob3VsZFlpZWxkO1xudmFyIHJlcXVlc3RQYWludCA9IC8vIEZhbGwgYmFjayBncmFjZWZ1bGx5IGlmIHdlJ3JlIHJ1bm5pbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBTY2hlZHVsZXIuXG5TY2hlZHVsZXJfcmVxdWVzdFBhaW50ICE9PSB1bmRlZmluZWQgPyBTY2hlZHVsZXJfcmVxdWVzdFBhaW50IDogZnVuY3Rpb24gKCkge307XG52YXIgc3luY1F1ZXVlID0gbnVsbDtcbnZhciBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG4vLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIG1vZGVybiBicm93c2VycyB0aGF0IHN1cHBvcnQgYHBlcmZvcm1hbmNlLm5vd2AuIEluXG4vLyBvbGRlciBicm93c2VycywgU2NoZWR1bGVyIGZhbGxzIGJhY2sgdG8gYERhdGUubm93YCwgd2hpY2ggcmV0dXJucyBhIFVuaXhcbi8vIHRpbWVzdGFtcC4gSW4gdGhhdCBjYXNlLCBzdWJ0cmFjdCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdG8gc2ltdWxhdGVcbi8vIHRoZSBiZWhhdmlvciBvZiBwZXJmb3JtYW5jZS5ub3cgYW5kIGtlZXAgb3VyIHRpbWVzIHNtYWxsIGVub3VnaCB0byBmaXRcbi8vIHdpdGhpbiAzMiBiaXRzLlxuLy8gVE9ETzogQ29uc2lkZXIgbGlmdGluZyB0aGlzIGludG8gU2NoZWR1bGVyLlxuXG52YXIgbm93ID0gaW5pdGlhbFRpbWVNcyA8IDEwMDAwID8gU2NoZWR1bGVyX25vdyA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3coKSAtIGluaXRpYWxUaW1lTXM7XG59O1xuZnVuY3Rpb24gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHN3aXRjaCAoU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICBjYXNlIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0xvd1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIExvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHkkMjpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0xvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0lkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgX2lzU3luYyA9IHRydWU7XG4gICAgICB2YXIgcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICBydW5XaXRoUHJpb3JpdHkkMihJbW1lZGlhdGVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKF9pc1N5bmMpO1xuICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzeW5jUXVldWUgPSBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgTm9Xb3JrID0gMDsgLy8gVE9ETzogVGhpbmsgb2YgYSBiZXR0ZXIgbmFtZSBmb3IgTmV2ZXIuIFRoZSBrZXkgZGlmZmVyZW5jZSB3aXRoIElkbGUgaXMgdGhhdFxuLy8gTmV2ZXIgd29yayBjYW4gYmUgY29tbWl0dGVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSB3aXRob3V0IHRlYXJpbmcgdGhlIFVJLlxuLy8gVGhlIG1haW4gZXhhbXBsZSBpcyBvZmZzY3JlZW4gY29udGVudCwgbGlrZSBhIGhpZGRlbiBzdWJ0cmVlLiBTbyBvbmUgcG9zc2libGVcbi8vIG5hbWUgaXMgT2Zmc2NyZWVuLiBIb3dldmVyLCBpdCBhbHNvIGluY2x1ZGVzIGRlaHlkcmF0ZWQgU3VzcGVuc2UgYm91bmRhcmllcyxcbi8vIHdoaWNoIGFyZSBpbmNvbnNpc3RlbnQgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBoYXZlbid0IGZpbmlzaGVkIHlldCwgYnV0XG4vLyBhcmVuJ3QgdmlzaWJseSBpbmNvbnNpc3RlbnQgYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgbWF0Y2hlcyB3aGF0IHRoZVxuLy8gaHlkcmF0ZWQgdHJlZSB3b3VsZCBsb29rIGxpa2UuXG5cbnZhciBOZXZlciA9IDE7IC8vIElkbGUgaXMgc2xpZ2h0bHkgaGlnaGVyIHByaW9yaXR5IHRoYW4gTmV2ZXIuIEl0IG11c3QgY29tcGxldGVseSBmaW5pc2ggaW5cbi8vIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQuXG5cbnZhciBJZGxlID0gMjsgLy8gQ29udGludW91cyBIeWRyYXRpb24gaXMgYSBtb3ZpbmcgcHJpb3JpdHkuIEl0IGlzIHNsaWdodGx5IGhpZ2hlciB0aGFuIElkbGVcbi8vIGFuZCBpcyB1c2VkIHRvIGluY3JlYXNlIHByaW9yaXR5IG9mIGhvdmVyIHRhcmdldHMuIEl0IGlzIGluY3JlYXNpbmcgd2l0aFxuLy8gZWFjaCB1c2FnZSBzbyB0aGF0IGxhc3QgYWx3YXlzIHdpbnMuXG5cbnZhciBDb250aW51b3VzSHlkcmF0aW9uID0gMztcbnZhciBTeW5jID0gTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xudmFyIEJhdGNoZWQgPSBTeW5jIC0gMTtcbnZhciBVTklUX1NJWkUgPSAxMDtcbnZhciBNQUdJQ19OVU1CRVJfT0ZGU0VUID0gQmF0Y2hlZCAtIDE7IC8vIDEgdW5pdCBvZiBleHBpcmF0aW9uIHRpbWUgcmVwcmVzZW50cyAxMG1zLlxuXG5mdW5jdGlvbiBtc1RvRXhwaXJhdGlvblRpbWUobXMpIHtcbiAgLy8gQWx3YXlzIGFkZCBhbiBvZmZzZXQgc28gdGhhdCB3ZSBkb24ndCBjbGFzaCB3aXRoIHRoZSBtYWdpYyBudW1iZXIgZm9yIE5vV29yay5cbiAgcmV0dXJuIE1BR0lDX05VTUJFUl9PRkZTRVQgLSAobXMgLyBVTklUX1NJWkUgfCAwKTtcbn1cbmZ1bmN0aW9uIGV4cGlyYXRpb25UaW1lVG9NcyhleHBpcmF0aW9uVGltZSkge1xuICByZXR1cm4gKE1BR0lDX05VTUJFUl9PRkZTRVQgLSBleHBpcmF0aW9uVGltZSkgKiBVTklUX1NJWkU7XG59XG5cbmZ1bmN0aW9uIGNlaWxpbmcobnVtLCBwcmVjaXNpb24pIHtcbiAgcmV0dXJuICgobnVtIC8gcHJlY2lzaW9uIHwgMCkgKyAxKSAqIHByZWNpc2lvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25CdWNrZXQoY3VycmVudFRpbWUsIGV4cGlyYXRpb25Jbk1zLCBidWNrZXRTaXplTXMpIHtcbiAgcmV0dXJuIE1BR0lDX05VTUJFUl9PRkZTRVQgLSBjZWlsaW5nKE1BR0lDX05VTUJFUl9PRkZTRVQgLSBjdXJyZW50VGltZSArIGV4cGlyYXRpb25Jbk1zIC8gVU5JVF9TSVpFLCBidWNrZXRTaXplTXMgLyBVTklUX1NJWkUpO1xufSAvLyBUT0RPOiBUaGlzIGNvcnJlc3BvbmRzIHRvIFNjaGVkdWxlcidzIE5vcm1hbFByaW9yaXR5LCBub3QgTG93UHJpb3JpdHkuIFVwZGF0ZVxuLy8gdGhlIG5hbWVzIHRvIHJlZmxlY3QuXG5cblxudmFyIExPV19QUklPUklUWV9FWFBJUkFUSU9OID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfQkFUQ0hfU0laRSA9IDI1MDtcbmZ1bmN0aW9uIGNvbXB1dGVBc3luY0V4cGlyYXRpb24oY3VycmVudFRpbWUpIHtcbiAgcmV0dXJuIGNvbXB1dGVFeHBpcmF0aW9uQnVja2V0KGN1cnJlbnRUaW1lLCBMT1dfUFJJT1JJVFlfRVhQSVJBVElPTiwgTE9XX1BSSU9SSVRZX0JBVENIX1NJWkUpO1xufVxuZnVuY3Rpb24gY29tcHV0ZVN1c3BlbnNlRXhwaXJhdGlvbihjdXJyZW50VGltZSwgdGltZW91dE1zKSB7XG4gIC8vIFRPRE86IFNob3VsZCB3ZSB3YXJuIGlmIHRpbWVvdXRNcyBpcyBsb3dlciB0aGFuIHRoZSBub3JtYWwgcHJpIGV4cGlyYXRpb24gdGltZT9cbiAgcmV0dXJuIGNvbXB1dGVFeHBpcmF0aW9uQnVja2V0KGN1cnJlbnRUaW1lLCB0aW1lb3V0TXMsIExPV19QUklPUklUWV9CQVRDSF9TSVpFKTtcbn0gLy8gV2UgaW50ZW50aW9uYWxseSBzZXQgYSBoaWdoZXIgZXhwaXJhdGlvbiB0aW1lIGZvciBpbnRlcmFjdGl2ZSB1cGRhdGVzIGluXG4vLyBkZXYgdGhhbiBpbiBwcm9kdWN0aW9uLlxuLy9cbi8vIElmIHRoZSBtYWluIHRocmVhZCBpcyBiZWluZyBibG9ja2VkIHNvIGxvbmcgdGhhdCB5b3UgaGl0IHRoZSBleHBpcmF0aW9uLFxuLy8gaXQncyBhIHByb2JsZW0gdGhhdCBjb3VsZCBiZSBzb2x2ZWQgd2l0aCBiZXR0ZXIgc2NoZWR1bGluZy5cbi8vXG4vLyBQZW9wbGUgd2lsbCBiZSBtb3JlIGxpa2VseSB0byBub3RpY2UgdGhpcyBhbmQgZml4IGl0IHdpdGggdGhlIGxvbmdcbi8vIGV4cGlyYXRpb24gdGltZSBpbiBkZXZlbG9wbWVudC5cbi8vXG4vLyBJbiBwcm9kdWN0aW9uIHdlIG9wdCBmb3IgYmV0dGVyIFVYIGF0IHRoZSByaXNrIG9mIG1hc2tpbmcgc2NoZWR1bGluZ1xuLy8gcHJvYmxlbXMsIGJ5IGV4cGlyaW5nIGZhc3QuXG5cbnZhciBISUdIX1BSSU9SSVRZX0VYUElSQVRJT04gPSA1MDA7XG52YXIgSElHSF9QUklPUklUWV9CQVRDSF9TSVpFID0gMTAwO1xuZnVuY3Rpb24gY29tcHV0ZUludGVyYWN0aXZlRXhwaXJhdGlvbihjdXJyZW50VGltZSkge1xuICByZXR1cm4gY29tcHV0ZUV4cGlyYXRpb25CdWNrZXQoY3VycmVudFRpbWUsIEhJR0hfUFJJT1JJVFlfRVhQSVJBVElPTiwgSElHSF9QUklPUklUWV9CQVRDSF9TSVpFKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVDb250aW51b3VzSHlkcmF0aW9uRXhwaXJhdGlvbihjdXJyZW50VGltZSkge1xuICAvLyBFYWNoIHRpbWUgd2UgYXNrIGZvciBhIG5ldyBvbmUgb2YgdGhlc2Ugd2UgaW5jcmVhc2UgdGhlIHByaW9yaXR5LlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbGFzdCBvbmUgYWx3YXlzIHdpbnMgc2luY2Ugd2UgY2FuJ3QgZGVwcmlvcml0aXplXG4gIC8vIG9uY2Ugd2UndmUgc2NoZWR1bGVkIHdvcmsgYWxyZWFkeS5cbiAgcmV0dXJuIENvbnRpbnVvdXNIeWRyYXRpb24rKztcbn1cbmZ1bmN0aW9uIGluZmVyUHJpb3JpdHlGcm9tRXhwaXJhdGlvblRpbWUoY3VycmVudFRpbWUsIGV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChleHBpcmF0aW9uVGltZSA9PT0gU3luYykge1xuICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcbiAgfVxuXG4gIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTmV2ZXIgfHwgZXhwaXJhdGlvblRpbWUgPT09IElkbGUpIHtcbiAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuICB9XG5cbiAgdmFyIG1zVW50aWwgPSBleHBpcmF0aW9uVGltZVRvTXMoZXhwaXJhdGlvblRpbWUpIC0gZXhwaXJhdGlvblRpbWVUb01zKGN1cnJlbnRUaW1lKTtcblxuICBpZiAobXNVbnRpbCA8PSAwKSB7XG4gICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuICB9XG5cbiAgaWYgKG1zVW50aWwgPD0gSElHSF9QUklPUklUWV9FWFBJUkFUSU9OICsgSElHSF9QUklPUklUWV9CQVRDSF9TSVpFKSB7XG4gICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG4gIH1cblxuICBpZiAobXNVbnRpbCA8PSBMT1dfUFJJT1JJVFlfRVhQSVJBVElPTiArIExPV19QUklPUklUWV9CQVRDSF9TSVpFKSB7XG4gICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5O1xuICB9IC8vIFRPRE86IEhhbmRsZSBMb3dQcmlvcml0eVxuICAvLyBBc3N1bWUgYW55dGhpbmcgbG93ZXIgaGFzIGlkbGUgcHJpb3JpdHlcblxuXG4gIHJldHVybiBJZGxlUHJpb3JpdHk7XG59XG5cbi8qKlxuICogRm9ya2VkIGZyb20gZmJqcy93YXJuaW5nOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9lNjZiYTIwYWQ1YmU0MzNlYjU0NDIzZjJiMDk3ZDgyOTMyNGQ5ZGU2L3BhY2thZ2VzL2ZianMvc3JjL19fZm9ya3NfXy93YXJuaW5nLmpzXG4gKlxuICogT25seSBjaGFuZ2UgaXMgd2UgdXNlIGNvbnNvbGUud2FybiBpbnN0ZWFkIG9mIGNvbnNvbGUuZXJyb3IsXG4gKiBhbmQgZG8gbm90aGluZyB3aGVuICdjb25zb2xlJyBpcyBub3Qgc3VwcG9ydGVkLlxuICogVGhpcyByZWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZS5cbiAqIC0tLVxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG52YXIgbG93UHJpb3JpdHlXYXJuaW5nV2l0aG91dFN0YWNrID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmdXaXRob3V0U3RhY2sgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGxvd1ByaW9yaXR5V2FybmluZ1dpdGhvdXRTdGFjayhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHZvaWQgMCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBsb3dQcmlvcml0eVdhcm5pbmdXaXRob3V0U3RhY2skMSA9IGxvd1ByaW9yaXR5V2FybmluZ1dpdGhvdXRTdGFjaztcblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC11bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LXVuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXJpdmVkLXN0YXRlXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LXVuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczIpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC11bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTcueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMzKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGxvd1ByaW9yaXR5V2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBcIiArICdjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL2ZiLm1lL3JlYWN0LWRlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxNy54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC11bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTcueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuICAgICAgdmFyIHN0cmljdFJvb3RDb21wb25lbnRTdGFjayA9IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzdHJpY3RSb290KTtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5LWNvbnRleHQnICsgJyVzJywgc29ydGVkTmFtZXMsIHN0cmljdFJvb3RDb21wb25lbnRTdGFjayk7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgc3luY1VwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICBzY2hlZHVsZVdvcmsoZmliZXIsIFN5bmMpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiAhbmVlZHNSZW1vdW50KSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGNoaWxkLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBob3N0SW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICB9KSk7XG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIHJldHVybiBob3N0SW5zdGFuY2VzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoZmliZXIsIHR5cGVzLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGJhc2VQcm9wcyk7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cbmZ1bmN0aW9uIHJlYWRMYXp5Q29tcG9uZW50VHlwZShsYXp5Q29tcG9uZW50KSB7XG4gIGluaXRpYWxpemVMYXp5Q29tcG9uZW50VHlwZShsYXp5Q29tcG9uZW50KTtcblxuICBpZiAobGF6eUNvbXBvbmVudC5fc3RhdHVzICE9PSBSZXNvbHZlZCkge1xuICAgIHRocm93IGxhenlDb21wb25lbnQuX3Jlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBsYXp5Q29tcG9uZW50Ll9yZXN1bHQ7XG59XG5cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBuZXh0VmFsdWUpIHtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAgaWYgKGlzUHJpbWFyeVJlbmRlcmVyKSB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICAhKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9PT0gdW5kZWZpbmVkIHx8IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9PT0gbnVsbCB8fCBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPT09IHJlbmRlcmVyU2lnaWwpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKSA6IHZvaWQgMDtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICAhKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPT09IHVuZGVmaW5lZCB8fCBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID09PSBudWxsIHx8IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPT09IHJlbmRlcmVyU2lnaWwpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKSA6IHZvaWQgMDtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAgaWYgKGlzUHJpbWFyeVJlbmRlcmVyKSB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICBpZiAoaXMkMShvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgICEoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSA9PT0gY2hhbmdlZEJpdHMpID8gd2FybmluZyQxKGZhbHNlLCAnY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZSBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nXG4gIC8vIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmIChub2RlLmNoaWxkRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgbm9kZS5jaGlsZEV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZEV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZEV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgYWx0ZXJuYXRlIHdhcyB1cGRhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzdCBvZiB0aGVcbiAgICAgIC8vIGFuY2VzdG9yIHBhdGggYWxyZWFkeSBoYXMgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgIHZhciBsaXN0ID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGxpc3QgIT09IG51bGwpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0Q29udGV4dDtcblxuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShyZW5kZXJFeHBpcmF0aW9uVGltZSwgbnVsbCk7XG4gICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7IC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cblxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmliZXIuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpOyAvLyBNYXJrIHRoZSBleHBpcmF0aW9uIHRpbWUgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGlmIChsaXN0LmV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGxpc3QuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgICB9IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyICYmIGZpYmVyLnRhZyA9PT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgYm91bnVkYXJ5IGlzIGluIHRoaXMgc3VidHJlZSwgd2UgZG9uJ3Qga25vd1xuICAgICAgLy8gaWYgaXQgd2lsbCBoYXZlIGFueSBjb250ZXh0IGNvbnN1bWVycyBpbiBpdC4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzXG4gICAgICAvLyBtYXJrIGl0IGFzIGhhdmluZyB1cGRhdGVzLlxuICAgICAgdmFyIHBhcmVudFN1c3BlbnNlID0gZmliZXIucmV0dXJuO1xuXG4gICAgICBpZiAoIShwYXJlbnRTdXNwZW5zZSAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiV2UganVzdCBjYW1lIGZyb20gYSBwYXJlbnQgc28gd2UgbXVzdCBoYXZlIGhhZCBhIHBhcmVudC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFN1c3BlbnNlLmV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgcGFyZW50U3VzcGVuc2UuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hbHRlcm5hdGUgPSBwYXJlbnRTdXNwZW5zZS5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChfYWx0ZXJuYXRlICE9PSBudWxsICYmIF9hbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBfYWx0ZXJuYXRlLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzaW5nIHRoaXMgZmliZXIgYXMgdGhlIHBhcmVudFxuICAgICAgLy8gYmVjYXVzZSB3ZSB3YW50IHRvIHNjaGVkdWxlIHRoaXMgZmliZXIgYXMgaGF2aW5nIHdvcmtcbiAgICAgIC8vIG9uIGl0cyBjaGlsZHJlbi4gV2UnbGwgdXNlIHRoZSBjaGlsZEV4cGlyYXRpb25UaW1lIG9uXG4gICAgICAvLyB0aGlzIGZpYmVyIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG5cbiAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChwYXJlbnRTdXNwZW5zZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuc2libGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICBpZiAoZmlyc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzLmV4cGlyYXRpb25UaW1lID49IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgICEhaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA/IHdhcm5pbmckMShmYWxzZSwgJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgey8vIE5vdGhpbmcgdG8gZG8uIFdlIGFscmVhZHkgb2JzZXJ2ZSBldmVyeXRoaW5nIGluIHRoaXMgY29udGV4dC5cbiAgfSBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgey8vIERvIG5vdCBvYnNlcnZlIGFueSB1cGRhdGVzLlxuICB9IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0czsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cblxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZWRCaXRzICE9PSAnbnVtYmVyJyB8fCBvYnNlcnZlZEJpdHMgPT09IE1BWF9TSUdORURfMzFfQklUX0lOVCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHM7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG9ic2VydmVkQml0czogcmVzb2x2ZWRPYnNlcnZlZEJpdHMsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0Q29udGV4dERlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgIGlmICghKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIik7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBleHBpcmF0aW9uVGltZTogTm9Xb3JrLFxuICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtLFxuICAgICAgICByZXNwb25kZXJzOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNQcmltYXJ5UmVuZGVyZXIgPyBjb250ZXh0Ll9jdXJyZW50VmFsdWUgOiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xufVxuXG4vLyBVcGRhdGVRdWV1ZSBpcyBhIGxpbmtlZCBsaXN0IG9mIHByaW9yaXRpemVkIHVwZGF0ZXMuXG4vL1xuLy8gTGlrZSBmaWJlcnMsIHVwZGF0ZSBxdWV1ZXMgY29tZSBpbiBwYWlyczogYSBjdXJyZW50IHF1ZXVlLCB3aGljaCByZXByZXNlbnRzXG4vLyB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgc2NyZWVuLCBhbmQgYSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCB3aGljaCBjYW4gYmVcbi8vIG11dGF0ZWQgYW5kIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseSBiZWZvcmUgaXQgaXMgY29tbWl0dGVkIOKAlCBhIGZvcm0gb2Zcbi8vIGRvdWJsZSBidWZmZXJpbmcuIElmIGEgd29yay1pbi1wcm9ncmVzcyByZW5kZXIgaXMgZGlzY2FyZGVkIGJlZm9yZSBmaW5pc2hpbmcsXG4vLyB3ZSBjcmVhdGUgYSBuZXcgd29yay1pbi1wcm9ncmVzcyBieSBjbG9uaW5nIHRoZSBjdXJyZW50IHF1ZXVlLlxuLy9cbi8vIEJvdGggcXVldWVzIHNoYXJlIGEgcGVyc2lzdGVudCwgc2luZ2x5LWxpbmtlZCBsaXN0IHN0cnVjdHVyZS4gVG8gc2NoZWR1bGUgYW5cbi8vIHVwZGF0ZSwgd2UgYXBwZW5kIGl0IHRvIHRoZSBlbmQgb2YgYm90aCBxdWV1ZXMuIEVhY2ggcXVldWUgbWFpbnRhaW5zIGFcbi8vIHBvaW50ZXIgdG8gZmlyc3QgdXBkYXRlIGluIHRoZSBwZXJzaXN0ZW50IGxpc3QgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQuXG4vLyBUaGUgd29yay1pbi1wcm9ncmVzcyBwb2ludGVyIGFsd2F5cyBoYXMgYSBwb3NpdGlvbiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW5cbi8vIHRoZSBjdXJyZW50IHF1ZXVlLCBzaW5jZSB3ZSBhbHdheXMgd29yayBvbiB0aGF0IG9uZS4gVGhlIGN1cnJlbnQgcXVldWUnc1xuLy8gcG9pbnRlciBpcyBvbmx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UsIHdoZW4gd2Ugc3dhcCBpbiB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MuXG4vL1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICBDdXJyZW50IHBvaW50ZXI6ICAgICAgICAgICBBIC0gQiAtIEMgLSBEIC0gRSAtIEZcbi8vICAgV29yay1pbi1wcm9ncmVzcyBwb2ludGVyOiAgICAgICAgICAgICAgRCAtIEUgLSBGXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaGFzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCBtb3JlIHVwZGF0ZXMgdGhhbiBjdXJyZW50LlxuLy9cbi8vIFRoZSByZWFzb24gd2UgYXBwZW5kIHRvIGJvdGggcXVldWVzIGlzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IGRyb3Bcbi8vIHVwZGF0ZXMgd2l0aG91dCBldmVyIHByb2Nlc3NpbmcgdGhlbS4gRm9yIGV4YW1wbGUsIGlmIHdlIG9ubHkgYWRkIHVwZGF0ZXMgdG9cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBzb21lIHVwZGF0ZXMgY291bGQgYmUgbG9zdCB3aGVuZXZlciBhIHdvcmstaW5cbi8vIC1wcm9ncmVzcyByZW5kZXIgcmVzdGFydHMgYnkgY2xvbmluZyBmcm9tIGN1cnJlbnQuIFNpbWlsYXJseSwgaWYgd2Ugb25seSBhZGRcbi8vIHVwZGF0ZXMgdG8gdGhlIGN1cnJlbnQgcXVldWUsIHRoZSB1cGRhdGVzIHdpbGwgYmUgbG9zdCB3aGVuZXZlciBhbiBhbHJlYWR5XG4vLyBpbi1wcm9ncmVzcyBxdWV1ZSBjb21taXRzIGFuZCBzd2FwcyB3aXRoIHRoZSBjdXJyZW50IHF1ZXVlLiBIb3dldmVyLCBieVxuLy8gYWRkaW5nIHRvIGJvdGggcXVldWVzLCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgdXBkYXRlIHdpbGwgYmUgcGFydCBvZiB0aGUgbmV4dFxuLy8gd29yay1pbi1wcm9ncmVzcy4gKEFuZCBiZWNhdXNlIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGJlY29tZXMgdGhlXG4vLyBjdXJyZW50IHF1ZXVlIG9uY2UgaXQgY29tbWl0cywgdGhlcmUncyBubyBkYW5nZXIgb2YgYXBwbHlpbmcgdGhlIHNhbWVcbi8vIHVwZGF0ZSB0d2ljZS4pXG4vL1xuLy8gUHJpb3JpdGl6YXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gVXBkYXRlcyBhcmUgbm90IHNvcnRlZCBieSBwcmlvcml0eSwgYnV0IGJ5IGluc2VydGlvbjsgbmV3IHVwZGF0ZXMgYXJlIGFsd2F5c1xuLy8gYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbi8vXG4vLyBUaGUgcHJpb3JpdHkgaXMgc3RpbGwgaW1wb3J0YW50LCB0aG91Z2guIFdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlXG4vLyBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgb25seSB0aGUgdXBkYXRlcyB3aXRoIHN1ZmZpY2llbnQgcHJpb3JpdHkgYXJlXG4vLyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LiBJZiB3ZSBza2lwIGFuIHVwZGF0ZSBiZWNhdXNlIGl0IGhhcyBpbnN1ZmZpY2llbnRcbi8vIHByaW9yaXR5LCBpdCByZW1haW5zIGluIHRoZSBxdWV1ZSB0byBiZSBwcm9jZXNzZWQgbGF0ZXIsIGR1cmluZyBhIGxvd2VyXG4vLyBwcmlvcml0eSByZW5kZXIuIENydWNpYWxseSwgYWxsIHVwZGF0ZXMgc3Vic2VxdWVudCB0byBhIHNraXBwZWQgdXBkYXRlIGFsc29cbi8vIHJlbWFpbiBpbiB0aGUgcXVldWUgKnJlZ2FyZGxlc3Mgb2YgdGhlaXIgcHJpb3JpdHkqLiBUaGF0IG1lYW5zIGhpZ2ggcHJpb3JpdHlcbi8vIHVwZGF0ZXMgYXJlIHNvbWV0aW1lcyBwcm9jZXNzZWQgdHdpY2UsIGF0IHR3byBzZXBhcmF0ZSBwcmlvcml0aWVzLiBXZSBhbHNvXG4vLyBrZWVwIHRyYWNrIG9mIGEgYmFzZSBzdGF0ZSwgdGhhdCByZXByZXNlbnRzIHRoZSBzdGF0ZSBiZWZvcmUgdGhlIGZpcnN0XG4vLyB1cGRhdGUgaW4gdGhlIHF1ZXVlIGlzIGFwcGxpZWQuXG4vL1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICBHaXZlbiBhIGJhc2Ugc3RhdGUgb2YgJycsIGFuZCB0aGUgZm9sbG93aW5nIHF1ZXVlIG9mIHVwZGF0ZXNcbi8vXG4vLyAgICAgQTEgLSBCMiAtIEMxIC0gRDJcbi8vXG4vLyAgIHdoZXJlIHRoZSBudW1iZXIgaW5kaWNhdGVzIHRoZSBwcmlvcml0eSwgYW5kIHRoZSB1cGRhdGUgaXMgYXBwbGllZCB0byB0aGVcbi8vICAgcHJldmlvdXMgc3RhdGUgYnkgYXBwZW5kaW5nIGEgbGV0dGVyLCBSZWFjdCB3aWxsIHByb2Nlc3MgdGhlc2UgdXBkYXRlcyBhc1xuLy8gICB0d28gc2VwYXJhdGUgcmVuZGVycywgb25lIHBlciBkaXN0aW5jdCBwcmlvcml0eSBsZXZlbDpcbi8vXG4vLyAgIEZpcnN0IHJlbmRlciwgYXQgcHJpb3JpdHkgMTpcbi8vICAgICBCYXNlIHN0YXRlOiAnJ1xuLy8gICAgIFVwZGF0ZXM6IFtBMSwgQzFdXG4vLyAgICAgUmVzdWx0IHN0YXRlOiAnQUMnXG4vL1xuLy8gICBTZWNvbmQgcmVuZGVyLCBhdCBwcmlvcml0eSAyOlxuLy8gICAgIEJhc2Ugc3RhdGU6ICdBJyAgICAgICAgICAgIDwtICBUaGUgYmFzZSBzdGF0ZSBkb2VzIG5vdCBpbmNsdWRlIEMxLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIEIyIHdhcyBza2lwcGVkLlxuLy8gICAgIFVwZGF0ZXM6IFtCMiwgQzEsIEQyXSAgICAgIDwtICBDMSB3YXMgcmViYXNlZCBvbiB0b3Agb2YgQjJcbi8vICAgICBSZXN1bHQgc3RhdGU6ICdBQkNEJ1xuLy9cbi8vIEJlY2F1c2Ugd2UgcHJvY2VzcyB1cGRhdGVzIGluIGluc2VydGlvbiBvcmRlciwgYW5kIHJlYmFzZSBoaWdoIHByaW9yaXR5XG4vLyB1cGRhdGVzIHdoZW4gcHJlY2VkaW5nIHVwZGF0ZXMgYXJlIHNraXBwZWQsIHRoZSBmaW5hbCByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpY1xuLy8gcmVnYXJkbGVzcyBvZiBwcmlvcml0eS4gSW50ZXJtZWRpYXRlIHN0YXRlIG1heSB2YXJ5IGFjY29yZGluZyB0byBzeXN0ZW1cbi8vIHJlc291cmNlcywgYnV0IHRoZSBmaW5hbCBzdGF0ZSBpcyBhbHdheXMgdGhlIHNhbWUuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcblxuICBcbn1cblxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlUXVldWUoYmFzZVN0YXRlKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGJhc2VTdGF0ZSxcbiAgICBmaXJzdFVwZGF0ZTogbnVsbCxcbiAgICBsYXN0VXBkYXRlOiBudWxsLFxuICAgIGZpcnN0Q2FwdHVyZWRVcGRhdGU6IG51bGwsXG4gICAgbGFzdENhcHR1cmVkVXBkYXRlOiBudWxsLFxuICAgIGZpcnN0RWZmZWN0OiBudWxsLFxuICAgIGxhc3RFZmZlY3Q6IG51bGwsXG4gICAgZmlyc3RDYXB0dXJlZEVmZmVjdDogbnVsbCxcbiAgICBsYXN0Q2FwdHVyZWRFZmZlY3Q6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHF1ZXVlO1xufVxuXG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnRRdWV1ZSkge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgIGZpcnN0VXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RVcGRhdGUsXG4gICAgbGFzdFVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RVcGRhdGUsXG4gICAgLy8gVE9ETzogV2l0aCByZXN1bWluZywgaWYgd2UgYmFpbCBvdXQgYW5kIHJlc3VzZSB0aGUgY2hpbGQgdHJlZSwgd2Ugc2hvdWxkXG4gICAgLy8ga2VlcCB0aGVzZSBlZmZlY3RzLlxuICAgIGZpcnN0Q2FwdHVyZWRVcGRhdGU6IG51bGwsXG4gICAgbGFzdENhcHR1cmVkVXBkYXRlOiBudWxsLFxuICAgIGZpcnN0RWZmZWN0OiBudWxsLFxuICAgIGxhc3RFZmZlY3Q6IG51bGwsXG4gICAgZmlyc3RDYXB0dXJlZEVmZmVjdDogbnVsbCxcbiAgICBsYXN0Q2FwdHVyZWRFZmZlY3Q6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHF1ZXVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUsIHN1c3BlbnNlQ29uZmlnKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHN1c3BlbnNlQ29uZmlnOiBzdXNwZW5zZUNvbmZpZyxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbCxcbiAgICBuZXh0RWZmZWN0OiBudWxsXG4gIH07XG5cbiAge1xuICAgIHVwZGF0ZS5wcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRVcGRhdGVUb1F1ZXVlKHF1ZXVlLCB1cGRhdGUpIHtcbiAgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgaWYgKHF1ZXVlLmxhc3RVcGRhdGUgPT09IG51bGwpIHtcbiAgICAvLyBRdWV1ZSBpcyBlbXB0eVxuICAgIHF1ZXVlLmZpcnN0VXBkYXRlID0gcXVldWUubGFzdFVwZGF0ZSA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBxdWV1ZS5sYXN0VXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gICAgcXVldWUubGFzdFVwZGF0ZSA9IHVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpIHtcbiAgLy8gVXBkYXRlIHF1ZXVlcyBhcmUgY3JlYXRlZCBsYXppbHkuXG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gIHZhciBxdWV1ZTE7XG4gIHZhciBxdWV1ZTI7XG5cbiAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3Mgb25seSBvbmUgZmliZXIuXG4gICAgcXVldWUxID0gZmliZXIudXBkYXRlUXVldWU7XG4gICAgcXVldWUyID0gbnVsbDtcblxuICAgIGlmIChxdWV1ZTEgPT09IG51bGwpIHtcbiAgICAgIHF1ZXVlMSA9IGZpYmVyLnVwZGF0ZVF1ZXVlID0gY3JlYXRlVXBkYXRlUXVldWUoZmliZXIubWVtb2l6ZWRTdGF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGFyZSB0d28gb3duZXJzLlxuICAgIHF1ZXVlMSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgIHF1ZXVlMiA9IGFsdGVybmF0ZS51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZTEgPT09IG51bGwpIHtcbiAgICAgIGlmIChxdWV1ZTIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gTmVpdGhlciBmaWJlciBoYXMgYW4gdXBkYXRlIHF1ZXVlLiBDcmVhdGUgbmV3IG9uZXMuXG4gICAgICAgIHF1ZXVlMSA9IGZpYmVyLnVwZGF0ZVF1ZXVlID0gY3JlYXRlVXBkYXRlUXVldWUoZmliZXIubWVtb2l6ZWRTdGF0ZSk7XG4gICAgICAgIHF1ZXVlMiA9IGFsdGVybmF0ZS51cGRhdGVRdWV1ZSA9IGNyZWF0ZVVwZGF0ZVF1ZXVlKGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgb25lIGZpYmVyIGhhcyBhbiB1cGRhdGUgcXVldWUuIENsb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHF1ZXVlMSA9IGZpYmVyLnVwZGF0ZVF1ZXVlID0gY2xvbmVVcGRhdGVRdWV1ZShxdWV1ZTIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocXVldWUyID09PSBudWxsKSB7XG4gICAgICAgIC8vIE9ubHkgb25lIGZpYmVyIGhhcyBhbiB1cGRhdGUgcXVldWUuIENsb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHF1ZXVlMiA9IGFsdGVybmF0ZS51cGRhdGVRdWV1ZSA9IGNsb25lVXBkYXRlUXVldWUocXVldWUxKTtcbiAgICAgIH0gZWxzZSB7Ly8gQm90aCBvd25lcnMgaGF2ZSBhbiB1cGRhdGUgcXVldWUuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXVlMiA9PT0gbnVsbCB8fCBxdWV1ZTEgPT09IHF1ZXVlMikge1xuICAgIC8vIFRoZXJlJ3Mgb25seSBhIHNpbmdsZSBxdWV1ZS5cbiAgICBhcHBlbmRVcGRhdGVUb1F1ZXVlKHF1ZXVlMSwgdXBkYXRlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBhcmUgdHdvIHF1ZXVlcy4gV2UgbmVlZCB0byBhcHBlbmQgdGhlIHVwZGF0ZSB0byBib3RoIHF1ZXVlcyxcbiAgICAvLyB3aGlsZSBhY2NvdW50aW5nIGZvciB0aGUgcGVyc2lzdGVudCBzdHJ1Y3R1cmUgb2YgdGhlIGxpc3Qg4oCUIHdlIGRvbid0XG4gICAgLy8gd2FudCB0aGUgc2FtZSB1cGRhdGUgdG8gYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgaWYgKHF1ZXVlMS5sYXN0VXBkYXRlID09PSBudWxsIHx8IHF1ZXVlMi5sYXN0VXBkYXRlID09PSBudWxsKSB7XG4gICAgICAvLyBPbmUgb2YgdGhlIHF1ZXVlcyBpcyBub3QgZW1wdHkuIFdlIG11c3QgYWRkIHRoZSB1cGRhdGUgdG8gYm90aCBxdWV1ZXMuXG4gICAgICBhcHBlbmRVcGRhdGVUb1F1ZXVlKHF1ZXVlMSwgdXBkYXRlKTtcbiAgICAgIGFwcGVuZFVwZGF0ZVRvUXVldWUocXVldWUyLCB1cGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCb3RoIHF1ZXVlcyBhcmUgbm9uLWVtcHR5LiBUaGUgbGFzdCB1cGRhdGUgaXMgdGhlIHNhbWUgaW4gYm90aCBsaXN0cyxcbiAgICAgIC8vIGJlY2F1c2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLiBTbywgb25seSBhcHBlbmQgdG8gb25lIG9mIHRoZSBsaXN0cy5cbiAgICAgIGFwcGVuZFVwZGF0ZVRvUXVldWUocXVldWUxLCB1cGRhdGUpOyAvLyBCdXQgd2Ugc3RpbGwgbmVlZCB0byB1cGRhdGUgdGhlIGBsYXN0VXBkYXRlYCBwb2ludGVyIG9mIHF1ZXVlMi5cblxuICAgICAgcXVldWUyLmxhc3RVcGRhdGUgPSB1cGRhdGU7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50ICYmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHF1ZXVlMSB8fCBxdWV1ZTIgIT09IG51bGwgJiYgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBxdWV1ZTIpICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgZ28gaW50byBhIHNlcGFyYXRlIGxpc3QsIGFuZCBvbmx5IG9uIHRoZSB3b3JrLWluLVxuICAvLyBwcm9ncmVzcyBxdWV1ZS5cbiAgdmFyIHdvcmtJblByb2dyZXNzUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNyZWF0ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEkgcHV0IHRoaXMgaGVyZSByYXRoZXIgdGhhbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyBzbyB0aGF0IHdlIGRvbid0XG4gICAgLy8gY2xvbmUgdGhlIHF1ZXVlIHVubmVjZXNzYXJpbHkuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvXG4gICAgLy8gc3RydWN0dXJlIHRoaXMuXG4gICAgd29ya0luUHJvZ3Jlc3NRdWV1ZSA9IGVuc3VyZVdvcmtJblByb2dyZXNzUXVldWVJc0FDbG9uZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3NRdWV1ZSk7XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1F1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHJlbmRlciBwaGFzZSB1cGRhdGVcbiAgICB3b3JrSW5Qcm9ncmVzc1F1ZXVlLmZpcnN0Q2FwdHVyZWRVcGRhdGUgPSB3b3JrSW5Qcm9ncmVzc1F1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZSA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1F1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICAgIHdvcmtJblByb2dyZXNzUXVldWUubGFzdENhcHR1cmVkVXBkYXRlID0gdXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVdvcmtJblByb2dyZXNzUXVldWVJc0FDbG9uZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUpIHtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBlcXVhbCB0byB0aGUgY3VycmVudCBxdWV1ZSxcbiAgICAvLyB3ZSBuZWVkIHRvIGNsb25lIGl0IGZpcnN0LlxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudC51cGRhdGVRdWV1ZSkge1xuICAgICAgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lVXBkYXRlUXVldWUocXVldWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWV1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcblxuICAgICAgICAgICAgaWYgKGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0c0ZvclN0cmljdE1vZGUgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuXG4gICAgICAgICAgICBpZiAoZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICBxdWV1ZSA9IGVuc3VyZVdvcmtJblByb2dyZXNzUXVldWVJc0FDbG9uZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUpO1xuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZTtcbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIHZhciBuZXdCYXNlU3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7XG4gIHZhciBuZXdGaXJzdFVwZGF0ZSA9IG51bGw7XG4gIHZhciBuZXdFeHBpcmF0aW9uVGltZSA9IE5vV29yazsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuXG4gIHZhciB1cGRhdGUgPSBxdWV1ZS5maXJzdFVwZGF0ZTtcbiAgdmFyIHJlc3VsdFN0YXRlID0gbmV3QmFzZVN0YXRlO1xuXG4gIHdoaWxlICh1cGRhdGUgIT09IG51bGwpIHtcbiAgICB2YXIgdXBkYXRlRXhwaXJhdGlvblRpbWUgPSB1cGRhdGUuZXhwaXJhdGlvblRpbWU7XG5cbiAgICBpZiAodXBkYXRlRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LiBTa2lwIGl0LlxuICAgICAgaWYgKG5ld0ZpcnN0VXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHNraXBwZWQgdXBkYXRlLiBJdCB3aWxsIGJlIHRoZSBmaXJzdCB1cGRhdGUgaW5cbiAgICAgICAgLy8gdGhlIG5ldyBsaXN0LlxuICAgICAgICBuZXdGaXJzdFVwZGF0ZSA9IHVwZGF0ZTsgLy8gU2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHRoYXQgd2FzIHNraXBwZWQsIHRoZSBjdXJyZW50IHJlc3VsdFxuICAgICAgICAvLyBpcyB0aGUgbmV3IGJhc2Ugc3RhdGUuXG5cbiAgICAgICAgbmV3QmFzZVN0YXRlID0gcmVzdWx0U3RhdGU7XG4gICAgICB9IC8vIFNpbmNlIHRoaXMgdXBkYXRlIHdpbGwgcmVtYWluIGluIHRoZSBsaXN0LCB1cGRhdGUgdGhlIHJlbWFpbmluZ1xuICAgICAgLy8gZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChuZXdFeHBpcmF0aW9uVGltZSA8IHVwZGF0ZUV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0V4cGlyYXRpb25UaW1lID0gdXBkYXRlRXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgLy8gTWFyayB0aGUgZXZlbnQgdGltZSBvZiB0aGlzIHVwZGF0ZSBhcyByZWxldmFudCB0byB0aGlzIHJlbmRlciBwYXNzLlxuICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgaWRlYWxseSB1c2UgdGhlIHRydWUgZXZlbnQgdGltZSBvZiB0aGlzIHVwZGF0ZSByYXRoZXIgdGhhblxuICAgICAgLy8gaXRzIHByaW9yaXR5IHdoaWNoIGlzIGEgZGVyaXZlZCBhbmQgbm90IHJldmVyc2VhYmxlIHZhbHVlLlxuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHNraXAgdGhpcyB1cGRhdGUgaWYgaXQgd2FzIGFscmVhZHkgY29tbWl0dGVkIGJ1dCBjdXJyZW50bHlcbiAgICAgIC8vIHdlIGhhdmUgbm8gd2F5IG9mIGRldGVjdGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29tbWl0dGVkIGFuZCBzdXNwZW5kZWRcbiAgICAgIC8vIHVwZGF0ZSBoZXJlLlxuICAgICAgbWFya1JlbmRlckV2ZW50VGltZUFuZENvbmZpZyh1cGRhdGVFeHBpcmF0aW9uVGltZSwgdXBkYXRlLnN1c3BlbnNlQ29uZmlnKTsgLy8gUHJvY2VzcyBpdCBhbmQgY29tcHV0ZSBhIG5ldyByZXN1bHQuXG5cbiAgICAgIHJlc3VsdFN0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCByZXN1bHRTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBDYWxsYmFjazsgLy8gU2V0IHRoaXMgdG8gbnVsbCwgaW4gY2FzZSBpdCB3YXMgbXV0YXRlZCBkdXJpbmcgYW4gYWJvcnRlZCByZW5kZXIuXG5cbiAgICAgICAgdXBkYXRlLm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICAgIGlmIChxdWV1ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcXVldWUuZmlyc3RFZmZlY3QgPSBxdWV1ZS5sYXN0RWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXVlLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IHVwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0RWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBDb250aW51ZSB0byB0aGUgbmV4dCB1cGRhdGUuXG5cblxuICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICB9IC8vIFNlcGFyYXRlbHksIGl0ZXJhdGUgdGhvdWdoIHRoZSBsaXN0IG9mIGNhcHR1cmVkIHVwZGF0ZXMuXG5cblxuICB2YXIgbmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZSA9IG51bGw7XG4gIHVwZGF0ZSA9IHF1ZXVlLmZpcnN0Q2FwdHVyZWRVcGRhdGU7XG5cbiAgd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIHZhciBfdXBkYXRlRXhwaXJhdGlvblRpbWUgPSB1cGRhdGUuZXhwaXJhdGlvblRpbWU7XG5cbiAgICBpZiAoX3VwZGF0ZUV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS4gU2tpcCBpdC5cbiAgICAgIGlmIChuZXdGaXJzdENhcHR1cmVkVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHNraXBwZWQgY2FwdHVyZWQgdXBkYXRlLiBJdCB3aWxsIGJlIHRoZSBmaXJzdFxuICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIG5ldyBsaXN0LlxuICAgICAgICBuZXdGaXJzdENhcHR1cmVkVXBkYXRlID0gdXBkYXRlOyAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgdGhhdCB3YXMgc2tpcHBlZCwgdGhlIGN1cnJlbnQgcmVzdWx0IGlzXG4gICAgICAgIC8vIHRoZSBuZXcgYmFzZSBzdGF0ZS5cblxuICAgICAgICBpZiAobmV3Rmlyc3RVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSByZXN1bHRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBTaW5jZSB0aGlzIHVwZGF0ZSB3aWxsIHJlbWFpbiBpbiB0aGUgbGlzdCwgdXBkYXRlIHRoZSByZW1haW5pbmdcbiAgICAgIC8vIGV4cGlyYXRpb24gdGltZS5cblxuXG4gICAgICBpZiAobmV3RXhwaXJhdGlvblRpbWUgPCBfdXBkYXRlRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgbmV3RXhwaXJhdGlvblRpbWUgPSBfdXBkYXRlRXhwaXJhdGlvblRpbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LiBQcm9jZXNzIGl0IGFuZCBjb21wdXRlXG4gICAgICAvLyBhIG5ldyByZXN1bHQuXG4gICAgICByZXN1bHRTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcmVzdWx0U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICB2YXIgX2NhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBDYWxsYmFjazsgLy8gU2V0IHRoaXMgdG8gbnVsbCwgaW4gY2FzZSBpdCB3YXMgbXV0YXRlZCBkdXJpbmcgYW4gYWJvcnRlZCByZW5kZXIuXG5cbiAgICAgICAgdXBkYXRlLm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICAgIGlmIChxdWV1ZS5sYXN0Q2FwdHVyZWRFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICBxdWV1ZS5maXJzdENhcHR1cmVkRWZmZWN0ID0gcXVldWUubGFzdENhcHR1cmVkRWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXVlLmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0ID0gdXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RDYXB0dXJlZEVmZmVjdCA9IHVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICB9XG5cbiAgaWYgKG5ld0ZpcnN0VXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUubGFzdFVwZGF0ZSA9IG51bGw7XG4gIH1cblxuICBpZiAobmV3Rmlyc3RDYXB0dXJlZFVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IENhbGxiYWNrO1xuICB9XG5cbiAgaWYgKG5ld0ZpcnN0VXBkYXRlID09PSBudWxsICYmIG5ld0ZpcnN0Q2FwdHVyZWRVcGRhdGUgPT09IG51bGwpIHtcbiAgICAvLyBXZSBwcm9jZXNzZWQgZXZlcnkgdXBkYXRlLCB3aXRob3V0IHNraXBwaW5nLiBUaGF0IG1lYW5zIHRoZSBuZXcgYmFzZVxuICAgIC8vIHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSByZXN1bHQgc3RhdGUuXG4gICAgbmV3QmFzZVN0YXRlID0gcmVzdWx0U3RhdGU7XG4gIH1cblxuICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gIHF1ZXVlLmZpcnN0VXBkYXRlID0gbmV3Rmlyc3RVcGRhdGU7XG4gIHF1ZXVlLmZpcnN0Q2FwdHVyZWRVcGRhdGUgPSBuZXdGaXJzdENhcHR1cmVkVXBkYXRlOyAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG4gIG1hcmtVbnByb2Nlc3NlZFVwZGF0ZVRpbWUobmV3RXhwaXJhdGlvblRpbWUpO1xuICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IG5ld0V4cGlyYXRpb25UaW1lO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcmVzdWx0U3RhdGU7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIElmIHRoZSBmaW5pc2hlZCByZW5kZXIgaW5jbHVkZWQgY2FwdHVyZWQgdXBkYXRlcywgYW5kIHRoZXJlIGFyZSBzdGlsbFxuICAvLyBsb3dlciBwcmlvcml0eSB1cGRhdGVzIGxlZnQgb3Zlciwgd2UgbmVlZCB0byBrZWVwIHRoZSBjYXB0dXJlZCB1cGRhdGVzXG4gIC8vIGluIHRoZSBxdWV1ZSBzbyB0aGF0IHRoZXkgYXJlIHJlYmFzZWQgYW5kIG5vdCBkcm9wcGVkIG9uY2Ugd2UgcHJvY2VzcyB0aGVcbiAgLy8gcXVldWUgYWdhaW4gYXQgdGhlIGxvd2VyIHByaW9yaXR5LlxuICBpZiAoZmluaXNoZWRRdWV1ZS5maXJzdENhcHR1cmVkVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gSm9pbiB0aGUgY2FwdHVyZWQgdXBkYXRlIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgbm9ybWFsIGxpc3QuXG4gICAgaWYgKGZpbmlzaGVkUXVldWUubGFzdFVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRRdWV1ZS5sYXN0VXBkYXRlLm5leHQgPSBmaW5pc2hlZFF1ZXVlLmZpcnN0Q2FwdHVyZWRVcGRhdGU7XG4gICAgICBmaW5pc2hlZFF1ZXVlLmxhc3RVcGRhdGUgPSBmaW5pc2hlZFF1ZXVlLmxhc3RDYXB0dXJlZFVwZGF0ZTtcbiAgICB9IC8vIENsZWFyIHRoZSBsaXN0IG9mIGNhcHR1cmVkIHVwZGF0ZXMuXG5cblxuICAgIGZpbmlzaGVkUXVldWUuZmlyc3RDYXB0dXJlZFVwZGF0ZSA9IGZpbmlzaGVkUXVldWUubGFzdENhcHR1cmVkVXBkYXRlID0gbnVsbDtcbiAgfSAvLyBDb21taXQgdGhlIGVmZmVjdHNcblxuXG4gIGNvbW1pdFVwZGF0ZUVmZmVjdHMoZmluaXNoZWRRdWV1ZS5maXJzdEVmZmVjdCwgaW5zdGFuY2UpO1xuICBmaW5pc2hlZFF1ZXVlLmZpcnN0RWZmZWN0ID0gZmluaXNoZWRRdWV1ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgY29tbWl0VXBkYXRlRWZmZWN0cyhmaW5pc2hlZFF1ZXVlLmZpcnN0Q2FwdHVyZWRFZmZlY3QsIGluc3RhbmNlKTtcbiAgZmluaXNoZWRRdWV1ZS5maXJzdENhcHR1cmVkRWZmZWN0ID0gZmluaXNoZWRRdWV1ZS5sYXN0Q2FwdHVyZWRFZmZlY3QgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRVcGRhdGVFZmZlY3RzKGVmZmVjdCwgaW5zdGFuY2UpIHtcbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRTdXNwZW5zZUNvbmZpZygpIHtcbiAgcmV0dXJuIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnN1c3BlbnNlO1xufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjayQxO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZTtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuXG4gIHdhcm5PbkludmFsaWRDYWxsYmFjayQxID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgXCJfXCIgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gIC8vIGl0IGNhdXNlcyBwcm9ibGVtcy4gVGhpcyBpcyBtZWFudCB0byBnaXZlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3JcbiAgLy8gUmVhY3RET00xNS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihyZWFjdERPTTE2Q29tcG9uZW50LFxuICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gIC8vIGV4Y2VwdGlvbi5cblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgJ19wcm9jZXNzQ2hpbGRDb250ZXh0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhdmFpbGFibGUgaW4gUmVhY3QgMTYrLiBUaGlzIGxpa2VseSBtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIHRvIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0c0ZvclN0cmljdE1vZGUgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPT09IE5vV29yaykge1xuICAgIHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IG1lbW9pemVkU3RhdGU7XG4gIH1cbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgY3VycmVudFRpbWUgPSByZXF1ZXN0Q3VycmVudFRpbWVGb3JVcGRhdGUoKTtcbiAgICB2YXIgc3VzcGVuc2VDb25maWcgPSByZXF1ZXN0Q3VycmVudFN1c3BlbnNlQ29uZmlnKCk7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIsIHN1c3BlbnNlQ29uZmlnKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV4cGlyYXRpb25UaW1lLCBzdXNwZW5zZUNvbmZpZyk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlV29yayhmaWJlciwgZXhwaXJhdGlvblRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7XG4gICAgdmFyIHN1c3BlbnNlQ29uZmlnID0gcmVxdWVzdEN1cnJlbnRTdXNwZW5zZUNvbmZpZygpO1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGZpYmVyLCBzdXNwZW5zZUNvbmZpZyk7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShleHBpcmF0aW9uVGltZSwgc3VzcGVuc2VDb25maWcpO1xuICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7XG4gICAgdmFyIHN1c3BlbnNlQ29uZmlnID0gcmVxdWVzdEN1cnJlbnRTdXNwZW5zZUNvbmZpZygpO1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGZpYmVyLCBzdXNwZW5zZUNvbmZpZyk7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShleHBpcmF0aW9uVGltZSwgc3VzcGVuc2VDb25maWcpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdGFydFBoYXNlVGltZXIod29ya0luUHJvZ3Jlc3MsICdzaG91bGRDb21wb25lbnRVcGRhdGUnKTtcbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgIHN0b3BQaGFzZVRpbWVyKCk7XG5cbiAgICB7XG4gICAgICAhKHNob3VsZFVwZGF0ZSAhPT0gdW5kZWZpbmVkKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgaWYgKCFyZW5kZXJQcmVzZW50KSB7XG4gICAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgdHlwZW9mIGN0b3IucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vR2V0SW5pdGlhbFN0YXRlT25FUzYgPSAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlIHx8IGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCB8fCBpbnN0YW5jZS5zdGF0ZTtcbiAgICAhbm9HZXRJbml0aWFsU3RhdGVPbkVTNiA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9HZXREZWZhdWx0UHJvcHNPbkVTNiA9ICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgfHwgaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkO1xuICAgICFub0dldERlZmF1bHRQcm9wc09uRVM2ID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vSW5zdGFuY2VQcm9wVHlwZXMgPSAhaW5zdGFuY2UucHJvcFR5cGVzO1xuICAgICFub0luc3RhbmNlUHJvcFR5cGVzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vSW5zdGFuY2VDb250ZXh0VHlwZSA9ICFpbnN0YW5jZS5jb250ZXh0VHlwZTtcbiAgICAhbm9JbnN0YW5jZUNvbnRleHRUeXBlID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpIDogdm9pZCAwO1xuXG4gICAgaWYgKGRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgICBpZiAoY3Rvci5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyB1c2VzIHRoZSBsZWdhY3kgY2hpbGRDb250ZXh0VHlwZXMgQVBJIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICcgKyAnVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgdXNlcyB0aGUgbGVnYWN5IGNvbnRleHRUeXBlcyBBUEkgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gJyArICdVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIHdpdGggc3RhdGljIGNvbnRleHRUeXBlIGluc3RlYWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub0luc3RhbmNlQ29udGV4dFR5cGVzID0gIWluc3RhbmNlLmNvbnRleHRUeXBlcztcbiAgICAgICFub0luc3RhbmNlQ29udGV4dFR5cGVzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGVzIGluc3RlYWQuJywgbmFtZSkgOiB2b2lkIDA7XG5cbiAgICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuYWRkKGN0b3IpO1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBkZWNsYXJlcyBib3RoIGNvbnRleHRUeXBlcyBhbmQgY29udGV4dFR5cGUgc3RhdGljIHByb3BlcnRpZXMuICcgKyAnVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub0NvbXBvbmVudFNob3VsZFVwZGF0ZSA9IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vQ29tcG9uZW50U2hvdWxkVXBkYXRlID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgbmFtZSkgOiB2b2lkIDA7XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICB2YXIgbm9Db21wb25lbnREaWRVbm1vdW50ID0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vQ29tcG9uZW50RGlkVW5tb3VudCA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vQ29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyAhPT0gJ2Z1bmN0aW9uJztcbiAgICAhbm9Db21wb25lbnREaWRSZWNlaXZlUHJvcHMgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9Db21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vQ29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSkgOiB2b2lkIDA7XG4gICAgdmFyIG5vVW5zYWZlQ29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyAhPT0gJ2Z1bmN0aW9uJztcbiAgICAhbm9VbnNhZmVDb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG4gICAgIShpbnN0YW5jZS5wcm9wcyA9PT0gdW5kZWZpbmVkIHx8ICFoYXNNdXRhdGVkUHJvcHMpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsIG5hbWUsIG5hbWUpIDogdm9pZCAwO1xuICAgIHZhciBub0luc3RhbmNlRGVmYXVsdFByb3BzID0gIWluc3RhbmNlLmRlZmF1bHRQcm9wcztcbiAgICAhbm9JbnN0YW5jZURlZmF1bHRQcm9wcyA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpIDogdm9pZCAwO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpKTtcbiAgICB9XG5cbiAgICB2YXIgbm9JbnN0YW5jZUdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vSW5zdGFuY2VHZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9JbnN0YW5jZUdldERlcml2ZWRTdGF0ZUZyb21DYXRjaCA9IHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbic7XG4gICAgIW5vSW5zdGFuY2VHZXREZXJpdmVkU3RhdGVGcm9tQ2F0Y2ggPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgbm9TdGF0aWNHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nO1xuICAgICFub1N0YXRpY0dldFNuYXBzaG90QmVmb3JlVXBkYXRlID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKSA6IHZvaWQgMDtcbiAgICB2YXIgX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgICBpZiAoX3N0YXRlICYmICh0eXBlb2YgX3N0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5JDEoX3N0YXRlKSkpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAhKHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JykgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gZmFsc2U7XG4gIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IC8vIEFsbG93IG51bGwgZm9yIGNvbmRpdGlvbmFsIGRlY2xhcmF0aW9uXG4gICAgICBjb250ZXh0VHlwZSA9PT0gbnVsbCB8fCBjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiYgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZDsgLy8gTm90IGEgPENvbnRleHQuQ29uc3VtZXI+XG5cbiAgICAgIGlmICghaXNWYWxpZCAmJiAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAgICBpZiAoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiAnICsgJ1RoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuICcgKyAnVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gJyArICd0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhICcgKyB0eXBlb2YgY29udGV4dFR5cGUgKyAnLic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Qcm92aWRlciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjb250ZXh0VHlwZSkuam9pbignLCAnKSArICd9Lic7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnLCBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2UgaWYgKCFkaXNhYmxlTGVnYWN5Q29udGV4dCkge1xuICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IGN0b3IuY29udGV4dFR5cGVzO1xuICAgIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY29udGV4dFR5cGVzICE9PSBudWxsICYmIGNvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnRleHQgPSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH0gLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG5cbiAge1xuICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC11bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgc3RhcnRQaGFzZVRpbWVyKHdvcmtJblByb2dyZXNzLCAnY29tcG9uZW50V2lsbE1vdW50Jyk7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBzdG9wUGhhc2VUaW1lcigpO1xuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcbiAgc3RhcnRQaGFzZVRpbWVyKHdvcmtJblByb2dyZXNzLCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgc3RvcFBoYXNlVGltZXIoKTtcblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSAnICsgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArICdJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAod2FybkFib3V0RGVwcmVjYXRlZExpZmVjeWNsZXMpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCB1cGRhdGVRdWV1ZSwgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTsgLy8gSWYgd2UgaGFkIGFkZGl0aW9uYWwgc3RhdGUgdXBkYXRlcyBkdXJpbmcgdGhpcyBsaWZlLWN5Y2xlLCBsZXQnc1xuICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHVwZGF0ZVF1ZXVlLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSBpZiAoIWRpc2FibGVMZWdhY3lDb250ZXh0KSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlUXVldWUsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBzdGFydFBoYXNlVGltZXIod29ya0luUHJvZ3Jlc3MsICdjb21wb25lbnRXaWxsTW91bnQnKTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIHN0b3BQaGFzZVRpbWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gb2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIG9sZFByb3BzKTtcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIGlmICghZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCB1cGRhdGVRdWV1ZSwgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChvbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAob2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgc3RhcnRQaGFzZVRpbWVyKHdvcmtJblByb2dyZXNzLCAnY29tcG9uZW50V2lsbFVwZGF0ZScpO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgc3RvcFBoYXNlVGltZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChvbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAob2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBwcm9wcy9zdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzO1xudmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmc7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG52YXIgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgY2hpbGQuX3N0b3JlID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yICcgKyAnbW9yZSBpbmZvcm1hdGlvbi4nICsgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7XG4gICAgd2FybmluZyQxKGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIG9uY2Ugd2UgdHVybiBvbiB0aGUgc3RyaW5nIHJlZiB3YXJuaW5nIGZvclxuICAgICAgLy8gZXZlcnlvbmUsIGJlY2F1c2UgdGhlIHN0cmljdCBtb2RlIGNhc2Ugd2lsbCBubyBsb25nZXIgYmUgcmVsZXZhbnRcbiAgICAgIGlmIChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICBpZiAod2FybkFib3V0U3RyaW5nUmVmcykge1xuICAgICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuIFN1cHBvcnQgZm9yIHN0cmluZyByZWZzICcgKyAnd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCB1c2luZyAnICsgJ3VzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3Qtc3RyaWN0LW1vZGUtc3RyaW5nLXJlZiVzJywgY29tcG9uZW50TmFtZSwgbWl4ZWRSZWYsIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChyZXR1cm5GaWJlcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LXN0cmljdC1tb2RlLXN0cmluZy1yZWYlcycsIG1peGVkUmVmLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QocmV0dXJuRmliZXIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKCEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSByZWZzLiBEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArIG1peGVkUmVmICsgXCIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwgJiYgY3VycmVudCQkMS5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQkJDEucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQkJDEucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudCQkMS5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSBpbnN0LnJlZnM7XG5cbiAgICAgICAgaWYgKHJlZnMgPT09IGVtcHR5UmVmc09iamVjdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IHBvb2xlZCBmcm96ZW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgcmVmcyA9IGluc3QucmVmcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVmLl9zdHJpbmdSZWYgPSBzdHJpbmdSZWY7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChyZXR1cm5GaWJlci50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICB7XG4gICAgICBhZGRlbmR1bSA9ICcgSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQuJyArIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oJywgJykgKyAnfScgOiBuZXdDaGlsZCkgKyBcIikuXCIgKyBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZSgpIHtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSAnRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyArIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKTtcblxuICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTtcbiAgd2FybmluZyQxKGZhbHNlLCAnRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG59IC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBleGlzdHMgYmVjYXVzZSBJIGV4cGVjdCB0byBjbG9uZSB0aGUgY29kZSBpbiBlYWNoIHBhdGhcbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cblxuICAgIGNoaWxkVG9EZWxldGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY2hpbGRUb0RlbGV0ZS5lZmZlY3RUYWcgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcywgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcywgZXhwaXJhdGlvblRpbWUpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQkJDEgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudCQkMS5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5lZmZlY3RUYWcgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5lZmZlY3RUYWcgPSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5lZmZlY3RUYWcgPSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQkJDEsIHRleHRDb250ZW50LCBleHBpcmF0aW9uVGltZSkge1xuICAgIGlmIChjdXJyZW50JCQxID09PSBudWxsIHx8IGN1cnJlbnQkJDEudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50JCQxLCB0ZXh0Q29udGVudCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgZWxlbWVudCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCAmJiAoKGhvdENvbXBhcmVFbGVtZW50cyhjdXJyZW50JCQxLmVsZW1lbnRUeXBlLCBlbGVtZW50LnR5cGUsIGhvdFVwZGF0ZUNoaWxkKGN1cnJlbnQkJDEpLCBjdXJyZW50JCQxLnR5cGUpKSkpIHtcbiAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQkJDEsIGVsZW1lbnQucHJvcHMsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgZWxlbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAge1xuICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQkJDEsIGVsZW1lbnQpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgcG9ydGFsLCBleHBpcmF0aW9uVGltZSkge1xuICAgIGlmIChjdXJyZW50JCQxID09PSBudWxsIHx8IGN1cnJlbnQkJDEudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQkJDEuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQkJDEuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCQkMSwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCQkMSwgZnJhZ21lbnQsIGV4cGlyYXRpb25UaW1lLCBrZXkpIHtcbiAgICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCB8fCBjdXJyZW50JCQxLnRhZyAhPT0gRnJhZ21lbnQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmcmFnbWVudCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCQkMSwgZnJhZ21lbnQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBleHBpcmF0aW9uVGltZSwgbnVsbCk7XG5cbiAgICAgICAgX2NyZWF0ZWQzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZWQzO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBleHBpcmF0aW9uVGltZSwga2V5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSkge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLCBzbyB3ZSBuZWl0aGVyIGhhdmUgdG8gY2hlY2sgdGhlIG9sZCBub3JcbiAgICAgIC8vIG5ldyBub2RlIGZvciB0aGUga2V5LiBJZiBib3RoIGFyZSB0ZXh0IG5vZGVzLCB0aGV5IG1hdGNoLlxuICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgbWF0Y2hlZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGV4cGlyYXRpb25UaW1lLCBuZXdDaGlsZC5rZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIyLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQpO1xuICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrbm93bktleXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25LZXlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuLCBleHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNhbid0IG9wdGltaXplIGJ5IHNlYXJjaGluZyBmcm9tIGJvdGggZW5kcyBzaW5jZSB3ZVxuICAgIC8vIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIG9uIGZpYmVycy4gSSdtIHRyeWluZyB0byBzZWUgaG93IGZhciB3ZSBjYW4gZ2V0XG4gICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAvLyBhZGQgaXQgbGF0ZXIuXG4gICAgLy8gRXZlbiB3aXRoIGEgdHdvIGVuZGVkIG9wdGltaXphdGlvbiwgd2UnZCB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgY2FzZVxuICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgIC8vIGdvaW5nIGZvciB0aGUgTWFwLiBJdCdkIGxpa2UgdG8gZXhwbG9yZSBoaXR0aW5nIHRoYXQgcGF0aCBmaXJzdCBpblxuICAgIC8vIGZvcndhcmQtb25seSBtb2RlIGFuZCBvbmx5IGdvIGZvciB0aGUgTWFwIG9uY2Ugd2Ugbm90aWNlIHRoYXQgd2UgbmVlZFxuICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgIC8vIHNlYXJjaCBidXQgdGhhdCdzIHVudXN1YWwuIEJlc2lkZXMsIGZvciB0aGUgdHdvIGVuZGVkIG9wdGltaXphdGlvbiB0b1xuICAgIC8vIHdvcmsgb24gSXRlcmFibGVzLCB3ZSdkIG5lZWQgdG8gY29weSB0aGUgd2hvbGUgc2V0LlxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIHVwZGF0ZSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKCkgd2hpY2hcbiAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICB7XG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IHRvU3RyaW5nVGFnXG4gICAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdHZW5lcmF0b3InKSB7XG4gICAgICAgICFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID8gd2FybmluZyQxKGZhbHNlLCAnVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICAhZGlkV2FybkFib3V0TWFwcyA/IHdhcm5pbmckMShmYWxzZSwgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzLiBDb252ZXJ0IGl0IHRvIGEgc2VxdWVuY2UvaXRlcmFibGUgb2Yga2V5ZWQgJyArICdSZWFjdEVsZW1lbnRzIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEobmV3Q2hpbGRyZW4gIT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IC8vIFRoZSBleGlzdGluZyBmaXJzdCBjaGlsZCBpcyBub3QgYSB0ZXh0IG5vZGUgc28gd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgLy8gYW5kIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lcy5cblxuXG4gICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gRnJhZ21lbnQgPyBlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgOiBob3RDb21wYXJlRWxlbWVudHMoY2hpbGQuZWxlbWVudFR5cGUsIGVsZW1lbnQudHlwZSwgaG90VXBkYXRlQ2hpbGQoY2hpbGQpLCBjaGlsZC50eXBlKSkge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFID8gZWxlbWVudC5wcm9wcy5jaGlsZHJlbiA6IGVsZW1lbnQucHJvcHMsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGV4cGlyYXRpb25UaW1lKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVjdXJzaXZlLlxuICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgLy8gbm90IGFzIGEgZnJhZ21lbnQuIE5lc3RlZCBhcnJheXMgb24gdGhlIG90aGVyIGhhbmQgd2lsbCBiZSB0cmVhdGVkIGFzXG4gICAgLy8gZnJhZ21lbnQgbm9kZXMuIFJlY3Vyc2lvbiBoYXBwZW5zIGF0IHRoZSBub3JtYWwgZmxvdy5cbiAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgLy8gVGhpcyBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYmV0d2VlbiA8PntbLi4uXX08Lz4gYW5kIDw+Li4uPC8+LlxuICAgIC8vIFdlIHRyZWF0IHRoZSBhbWJpZ3VvdXMgY2FzZXMgYWJvdmUgdGhlIHNhbWUuXG4gICAgdmFyIGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsICYmIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiYgbmV3Q2hpbGQua2V5ID09PSBudWxsO1xuXG4gICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgfSAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG5cblxuICAgIHZhciBpc09iamVjdCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSkpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGV4cGlyYXRpb25UaW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBleHBpcmF0aW9uVGltZSkpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgZXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAndW5kZWZpbmVkJyAmJiAhaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBjaGlsZCBpcyB1bmRlZmluZWQsIGFuZCB0aGUgcmV0dXJuIGZpYmVyIGlzIGEgY29tcG9zaXRlXG4gICAgICAvLyBjb21wb25lbnQsIHRocm93IGFuIGVycm9yLiBJZiBGaWJlciByZXR1cm4gdHlwZXMgYXJlIGRpc2FibGVkLFxuICAgICAgLy8gd2UgYWxyZWFkeSB0aHJldyBhYm92ZS5cbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSwgd2hpY2ggaGFuZGxlcyBib3RoXG4gICAgICAgIC8vIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gcmV0dXJuRmliZXIudHlwZTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgYWxsIHRyZWF0ZWQgYXMgZW1wdHkuXG5cblxuICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmICghKGN1cnJlbnQkJDEgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IGN1cnJlbnQkJDEuY2hpbGQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzLCBjdXJyZW50Q2hpbGQuZXhwaXJhdGlvblRpbWUpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcblxuICB3aGlsZSAoY3VycmVudENoaWxkLnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMsIGN1cnJlbnRDaGlsZC5leHBpcmF0aW9uVGltZSk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgTk9fQ09OVEVYVCA9IHt9O1xudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICBpZiAoIShjICE9PSBOT19DT05URVhUKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG5cbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgTk9fQ09OVEVYVCwgZmliZXIpO1xuICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gZ2V0Um9vdEhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUsIHJvb3RJbnN0YW5jZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gSW4gb3JkZXIgdG8gY2FwdHVyZSwgdGhlIFN1c3BlbnNlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBmYWxsYmFjayBwcm9wLlxuXG4gIGlmIChwcm9wcy5mYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFJlZ3VsYXIgYm91bmRhcmllcyBhbHdheXMgY2FwdHVyZS5cblxuXG4gIGlmIChwcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGl0J3MgYSBib3VuZGFyeSB3ZSBzaG91bGQgYXZvaWQsIHRoZW4gd2UgcHJlZmVyIHRvIGJ1YmJsZSB1cCB0byB0aGVcbiAgLy8gcGFyZW50IGJvdW5kYXJ5IGlmIGl0IGlzIGN1cnJlbnRseSBpbnZpc2libGUuXG5cblxuICBpZiAoaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGFibGUgdG8gaGFuZGxlIGl0LCB3ZSBtdXN0IGhhbmRsZSBpdC5cblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICB2YXIgbm9kZSA9IHJvdztcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoZGVoeWRyYXRlZCA9PT0gbnVsbCB8fCBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGRlaHlkcmF0ZWQpIHx8IGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGRlaHlkcmF0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IChub2RlLmVmZmVjdFRhZyAmIERpZENhcHR1cmUpICE9PSBOb0VmZmVjdDtcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG52YXIgaXNBcnJheSQyID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbmRlckluc3RhbmNlKHJlc3BvbmRlciwgcmVzcG9uZGVyUHJvcHMsIHJlc3BvbmRlclN0YXRlLCBmaWJlcikge1xuICByZXR1cm4ge1xuICAgIGZpYmVyOiBmaWJlcixcbiAgICBwcm9wczogcmVzcG9uZGVyUHJvcHMsXG4gICAgcmVzcG9uZGVyOiByZXNwb25kZXIsXG4gICAgcm9vdEV2ZW50VHlwZXM6IG51bGwsXG4gICAgc3RhdGU6IHJlc3BvbmRlclN0YXRlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50RXZlbnRSZXNwb25kZXIkMShyZXNwb25kZXIsIHJlc3BvbmRlclByb3BzLCBmaWJlciwgcmVzcG9uZGVyc01hcCwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciByZXNwb25kZXJTdGF0ZSA9IGVtcHR5T2JqZWN0O1xuICB2YXIgZ2V0SW5pdGlhbFN0YXRlID0gcmVzcG9uZGVyLmdldEluaXRpYWxTdGF0ZTtcblxuICBpZiAoZ2V0SW5pdGlhbFN0YXRlICE9PSBudWxsKSB7XG4gICAgcmVzcG9uZGVyU3RhdGUgPSBnZXRJbml0aWFsU3RhdGUocmVzcG9uZGVyUHJvcHMpO1xuICB9XG5cbiAgdmFyIHJlc3BvbmRlckluc3RhbmNlID0gY3JlYXRlUmVzcG9uZGVySW5zdGFuY2UocmVzcG9uZGVyLCByZXNwb25kZXJQcm9wcywgcmVzcG9uZGVyU3RhdGUsIGZpYmVyKTtcblxuICBpZiAoIXJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICByb290Q29udGFpbmVySW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50UmVzcG9uZGVySW5zdGFuY2UocmVzcG9uZGVyLCByZXNwb25kZXJJbnN0YW5jZSwgcmVzcG9uZGVyUHJvcHMsIHJlc3BvbmRlclN0YXRlLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICByZXNwb25kZXJzTWFwLnNldChyZXNwb25kZXIsIHJlc3BvbmRlckluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgZmliZXIsIHZpc2lzdGVkUmVzcG9uZGVycywgcmVzcG9uZGVyc01hcCwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciByZXNwb25kZXI7XG4gIHZhciBwcm9wcztcblxuICBpZiAobGlzdGVuZXIpIHtcbiAgICByZXNwb25kZXIgPSBsaXN0ZW5lci5yZXNwb25kZXI7XG4gICAgcHJvcHMgPSBsaXN0ZW5lci5wcm9wcztcbiAgfVxuXG4gIGlmICghKHJlc3BvbmRlciAmJiByZXNwb25kZXIuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiQW4gaW52YWxpZCB2YWx1ZSB3YXMgdXNlZCBhcyBhbiBldmVudCBsaXN0ZW5lci4gRXhwZWN0IG9uZSBvciBtYW55IGV2ZW50IGxpc3RlbmVycyBjcmVhdGVkIHZpYSBSZWFjdC51bnN0YWJsZV91c2VSZXNwb25kZXIoKS5cIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVyUHJvcHMgPSBwcm9wcztcblxuICBpZiAodmlzaXN0ZWRSZXNwb25kZXJzLmhhcyhyZXNwb25kZXIpKSB7XG4gICAgLy8gc2hvdyB3YXJuaW5nXG4gICAge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnRHVwbGljYXRlIGV2ZW50IHJlc3BvbmRlciBcIiVzXCIgZm91bmQgaW4gZXZlbnQgbGlzdGVuZXJzLiAnICsgJ0V2ZW50IGxpc3RlbmVycyBwYXNzZWQgdG8gZWxlbWVudHMgY2Fubm90IHVzZSB0aGUgc2FtZSBldmVudCByZXNwb25kZXIgbW9yZSB0aGFuIG9uY2UuJywgcmVzcG9uZGVyLmRpc3BsYXlOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2aXNpc3RlZFJlc3BvbmRlcnMuYWRkKHJlc3BvbmRlcik7XG4gIHZhciByZXNwb25kZXJJbnN0YW5jZSA9IHJlc3BvbmRlcnNNYXAuZ2V0KHJlc3BvbmRlcik7XG5cbiAgaWYgKHJlc3BvbmRlckluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNb3VudCAoaGFwcGVucyBpbiBlaXRoZXIgY29tcGxldGUgb3IgY29tbWl0IHBoYXNlKVxuICAgIG1vdW50RXZlbnRSZXNwb25kZXIkMShyZXNwb25kZXIsIGxpc3RlbmVyUHJvcHMsIGZpYmVyLCByZXNwb25kZXJzTWFwLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICB9IGVsc2Uge1xuICAgIC8vIFVwZGF0ZSAoaGFwcGVucyBkdXJpbmcgY29tbWl0IHBoYXNlIG9ubHkpXG4gICAgcmVzcG9uZGVySW5zdGFuY2UucHJvcHMgPSBsaXN0ZW5lclByb3BzO1xuICAgIHJlc3BvbmRlckluc3RhbmNlLmZpYmVyID0gZmliZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRXZlbnRMaXN0ZW5lcnMobGlzdGVuZXJzLCBmaWJlciwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB2aXNpc3RlZFJlc3BvbmRlcnMgPSBuZXcgU2V0KCk7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgaWYgKGxpc3RlbmVycyAhPSBudWxsKSB7XG4gICAgaWYgKGRlcGVuZGVuY2llcyA9PT0gbnVsbCkge1xuICAgICAgZGVwZW5kZW5jaWVzID0gZmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBleHBpcmF0aW9uVGltZTogTm9Xb3JrLFxuICAgICAgICBmaXJzdENvbnRleHQ6IG51bGwsXG4gICAgICAgIHJlc3BvbmRlcnM6IG5ldyBNYXAoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgcmVzcG9uZGVyc01hcCA9IGRlcGVuZGVuY2llcy5yZXNwb25kZXJzO1xuXG4gICAgaWYgKHJlc3BvbmRlcnNNYXAgPT09IG51bGwpIHtcbiAgICAgIHJlc3BvbmRlcnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkkMihsaXN0ZW5lcnMpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgICAgdXBkYXRlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgZmliZXIsIHZpc2lzdGVkUmVzcG9uZGVycywgcmVzcG9uZGVyc01hcCwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcnMsIGZpYmVyLCB2aXNpc3RlZFJlc3BvbmRlcnMsIHJlc3BvbmRlcnNNYXAsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgIHZhciBfcmVzcG9uZGVyc01hcCA9IGRlcGVuZGVuY2llcy5yZXNwb25kZXJzO1xuXG4gICAgaWYgKF9yZXNwb25kZXJzTWFwICE9PSBudWxsKSB7XG4gICAgICAvLyBVbm1vdW50XG4gICAgICB2YXIgbW91bnRlZFJlc3BvbmRlcnMgPSBBcnJheS5mcm9tKF9yZXNwb25kZXJzTWFwLmtleXMoKSk7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbmd0aCA9IG1vdW50ZWRSZXNwb25kZXJzLmxlbmd0aDsgX2kgPCBfbGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBtb3VudGVkUmVzcG9uZGVyID0gbW91bnRlZFJlc3BvbmRlcnNbX2ldO1xuXG4gICAgICAgIGlmICghdmlzaXN0ZWRSZXNwb25kZXJzLmhhcyhtb3VudGVkUmVzcG9uZGVyKSkge1xuICAgICAgICAgIHZhciByZXNwb25kZXJJbnN0YW5jZSA9IF9yZXNwb25kZXJzTWFwLmdldChtb3VudGVkUmVzcG9uZGVyKTtcblxuICAgICAgICAgIHVubW91bnRSZXNwb25kZXJJbnN0YW5jZShyZXNwb25kZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBfcmVzcG9uZGVyc01hcC5kZWxldGUobW91bnRlZFJlc3BvbmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbmRlckxpc3RlbmVyKHJlc3BvbmRlciwgcHJvcHMpIHtcbiAgdmFyIGV2ZW50UmVzcG9uZGVyTGlzdGVuZXIgPSB7XG4gICAgcmVzcG9uZGVyOiByZXNwb25kZXIsXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5mcmVlemUoZXZlbnRSZXNwb25kZXJMaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gZXZlbnRSZXNwb25kZXJMaXN0ZW5lcjtcbn1cblxudmFyIE5vRWZmZWN0JDEgPVxuLyogICAgICAgICAgICAgKi9cbjA7XG52YXIgVW5tb3VudFNuYXBzaG90ID1cbi8qICAgICAgKi9cbjI7XG52YXIgVW5tb3VudE11dGF0aW9uID1cbi8qICAgICAgKi9cbjQ7XG52YXIgTW91bnRNdXRhdGlvbiA9XG4vKiAgICAgICAgKi9cbjg7XG52YXIgVW5tb3VudExheW91dCA9XG4vKiAgICAgICAgKi9cbjE2O1xudmFyIE1vdW50TGF5b3V0ID1cbi8qICAgICAgICAgICovXG4zMjtcbnZhciBNb3VudFBhc3NpdmUgPVxuLyogICAgICAgICAqL1xuNjQ7XG52YXIgVW5tb3VudFBhc3NpdmUgPVxuLyogICAgICAgKi9cbjEyODtcblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJFeHBpcmF0aW9uVGltZSQxID0gTm9Xb3JrOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbnZhciBmaXJzdFdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbnZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbnZhciByZW1haW5pbmdFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbnZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IG51bGw7XG52YXIgc2lkZUVmZmVjdFRhZyA9IDA7IC8vIFVwZGF0ZXMgc2NoZWR1bGVkIGR1cmluZyByZW5kZXIgd2lsbCB0cmlnZ2VyIGFuIGltbWVkaWF0ZSByZS1yZW5kZXIgYXQgdGhlXG4vLyBlbmQgb2YgdGhlIGN1cnJlbnQgcGFzcy4gV2UgY2FuJ3Qgc3RvcmUgdGhlc2UgdXBkYXRlcyBvbiB0aGUgbm9ybWFsIHF1ZXVlLFxuLy8gYmVjYXVzZSBpZiB0aGUgd29yayBpcyBhYm9ydGVkLCB0aGV5IHNob3VsZCBiZSBkaXNjYXJkZWQuIEJlY2F1c2UgdGhpcyBpc1xuLy8gYSByZWxhdGl2ZWx5IHJhcmUgY2FzZSwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGFkZCBhbiBhZGRpdGlvbmFsIGZpZWxkIHRvXG4vLyBlaXRoZXIgdGhlIGhvb2sgb3IgcXVldWUgb2JqZWN0IHR5cGVzLiBTbyB3ZSBzdG9yZSB0aGVtIGluIGEgbGF6aWx5IGNyZWF0ZVxuLy8gbWFwIG9mIHF1ZXVlIC0+IHJlbmRlci1waGFzZSB1cGRhdGVzLCB3aGljaCBhcmUgZGlzY2FyZGVkIG9uY2UgdGhlIGNvbXBvbmVudFxuLy8gY29tcGxldGVzIHdpdGhvdXQgcmUtcmVuZGVyaW5nLlxuLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBkdXJpbmcgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcmVuZGVyIHBhc3MuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIExhemlseSBjcmVhdGVkIG1hcCBvZiByZW5kZXItcGhhc2UgdXBkYXRlc1xuXG52YXIgcmVuZGVyUGhhc2VVcGRhdGVzID0gbnVsbDsgLy8gQ291bnRlciB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuXG52YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9mYi5tZS9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICB3YXJuaW5nJDEoZmFsc2UsICclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nIGxlbmd0aHMgaW4gcHJvZCBiZWNhdXNlIHRoZXNlIGFycmF5cyBzaG91bGQgYmVcbiAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgIGlmIChuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXMkMShuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZWZPckNvbnRleHQsIG5leHRSZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICByZW5kZXJFeHBpcmF0aW9uVGltZSQxID0gbmV4dFJlbmRlckV4cGlyYXRpb25UaW1lO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG4gIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gIC8vIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgLy8gd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgLy8gcmVtYWluaW5nRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIC8vIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyByZW5kZXJQaGFzZVVwZGF0ZXMgPSBudWxsO1xuICAvLyBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG4gIC8vIHNpZGVFZmZlY3RUYWcgPSAwO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBuZXh0Q3VycmVudEhvb2sgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG5leHRDdXJyZW50SG9vayB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBuZXh0Q3VycmVudEhvb2sgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG5cbiAge1xuICAgIGlmIChuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHJlZk9yQ29udGV4dCk7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICAgICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBBbHNvIHZhbGlkYXRlIGhvb2sgb3JkZXIgZm9yIGNhc2NhZGluZyB1cGRhdGVzLlxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgcmVmT3JDb250ZXh0KTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKTtcblxuICAgIHJlbmRlclBoYXNlVXBkYXRlcyA9IG51bGw7XG4gICAgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gIHZhciByZW5kZXJlZFdvcmsgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICByZW5kZXJlZFdvcmsubWVtb2l6ZWRTdGF0ZSA9IGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rO1xuICByZW5kZXJlZFdvcmsuZXhwaXJhdGlvblRpbWUgPSByZW1haW5pbmdFeHBpcmF0aW9uVGltZTtcbiAgcmVuZGVyZWRXb3JrLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gIHJlbmRlcmVkV29yay5lZmZlY3RUYWcgfD0gc2lkZUVmZmVjdFRhZztcblxuICB7XG4gICAgcmVuZGVyZWRXb3JrLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJFeHBpcmF0aW9uVGltZSQxID0gTm9Xb3JrO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICBmaXJzdFdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgcmVtYWluaW5nRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgc2lkZUVmZmVjdFRhZyA9IDA7IC8vIFRoZXNlIHdlcmUgcmVzZXQgYWJvdmVcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyByZW5kZXJQaGFzZVVwZGF0ZXMgPSBudWxsO1xuICAvLyBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG5cbiAgaWYgKCEhZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZXhwaXJhdGlvblRpbWUpIHtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcblxuICBpZiAoY3VycmVudC5leHBpcmF0aW9uVGltZSA8PSBleHBpcmF0aW9uVGltZSkge1xuICAgIGN1cnJlbnQuZXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3MoKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjsgLy8gVGhpcyBpcyB1c2VkIHRvIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGlzIG1vZHVsZSB3aGVuIGEgY29tcG9uZW50IHRocm93cy5cbiAgLy8gSXQncyBhbHNvIGNhbGxlZCBpbnNpZGUgbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50IGlmIHdlIGRldGVybWluZSB0aGVcbiAgLy8gY29tcG9uZW50IGlzIGEgbW9kdWxlLXN0eWxlIGNvbXBvbmVudC5cblxuICByZW5kZXJFeHBpcmF0aW9uVGltZSQxID0gTm9Xb3JrO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICBmaXJzdFdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICB9XG5cbiAgcmVtYWluaW5nRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgc2lkZUVmZmVjdFRhZyA9IDA7XG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgcmVuZGVyUGhhc2VVcGRhdGVzID0gbnVsbDtcbiAgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgYmFzZVVwZGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBmaXJzdFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rICE9PSBudWxsID8gY3VycmVudEhvb2submV4dCA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmICghKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgYmFzZVVwZGF0ZTogY3VycmVudEhvb2suYmFzZVVwZGF0ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IGZpcnN0V29ya0luUHJvZ3Jlc3NIb29rID0gbmV3SG9vaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgfVxuXG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBsYXN0OiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgLy8gRmxvdyBkb2Vzbid0IGtub3cgdGhpcyBpcyBub24tbnVsbCwgYnV0IHdlIGRvLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcblxuICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPiAwKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgdmFyIF9kaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuXG4gICAgaWYgKHJlbmRlclBoYXNlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgICAgLy8gUmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXJlIHN0b3JlZCBpbiBhIG1hcCBvZiBxdWV1ZSAtPiBsaW5rZWQgbGlzdFxuICAgICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSByZW5kZXJQaGFzZVVwZGF0ZXMuZ2V0KHF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZW5kZXJQaGFzZVVwZGF0ZXMuZGVsZXRlKHF1ZXVlKTtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgICAgIGlmICghaXMkMShuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAgICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAgICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAgICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgICAgICBpZiAoaG9vay5iYXNlVXBkYXRlID09PSBxdWV1ZS5sYXN0KSB7XG4gICAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIHJldHVybiBbbmV3U3RhdGUsIF9kaXNwYXRjaF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIF9kaXNwYXRjaF07XG4gIH0gLy8gVGhlIGxhc3QgdXBkYXRlIGluIHRoZSBlbnRpcmUgcXVldWVcblxuXG4gIHZhciBsYXN0ID0gcXVldWUubGFzdDsgLy8gVGhlIGxhc3QgdXBkYXRlIHRoYXQgaXMgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVVwZGF0ZSA9IGhvb2suYmFzZVVwZGF0ZTtcbiAgdmFyIGJhc2VTdGF0ZSA9IGhvb2suYmFzZVN0YXRlOyAvLyBGaW5kIHRoZSBmaXJzdCB1bnByb2Nlc3NlZCB1cGRhdGUuXG5cbiAgdmFyIGZpcnN0O1xuXG4gIGlmIChiYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIEZvciB0aGUgZmlyc3QgdXBkYXRlLCB0aGUgcXVldWUgaXMgYSBjaXJjdWxhciBsaW5rZWQgbGlzdCB3aGVyZVxuICAgICAgLy8gYHF1ZXVlLmxhc3QubmV4dCA9IHF1ZXVlLmZpcnN0YC4gT25jZSB0aGUgZmlyc3QgdXBkYXRlIGNvbW1pdHMsIGFuZFxuICAgICAgLy8gdGhlIGBiYXNlVXBkYXRlYCBpcyBubyBsb25nZXIgZW1wdHksIHdlIGNhbiB1bnJhdmVsIHRoZSBsaXN0LlxuICAgICAgbGFzdC5uZXh0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmaXJzdCA9IGJhc2VVcGRhdGUubmV4dDtcbiAgfSBlbHNlIHtcbiAgICBmaXJzdCA9IGxhc3QgIT09IG51bGwgPyBsYXN0Lm5leHQgOiBudWxsO1xuICB9XG5cbiAgaWYgKGZpcnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIF9uZXdTdGF0ZSA9IGJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHByZXZVcGRhdGUgPSBiYXNlVXBkYXRlO1xuICAgIHZhciBfdXBkYXRlID0gZmlyc3Q7XG4gICAgdmFyIGRpZFNraXAgPSBmYWxzZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVFeHBpcmF0aW9uVGltZSA9IF91cGRhdGUuZXhwaXJhdGlvblRpbWU7XG5cbiAgICAgIGlmICh1cGRhdGVFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lJDEpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICBpZiAoIWRpZFNraXApIHtcbiAgICAgICAgICBkaWRTa2lwID0gdHJ1ZTtcbiAgICAgICAgICBuZXdCYXNlVXBkYXRlID0gcHJldlVwZGF0ZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBfbmV3U3RhdGU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZUV4cGlyYXRpb25UaW1lID4gcmVtYWluaW5nRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICByZW1haW5pbmdFeHBpcmF0aW9uVGltZSA9IHVwZGF0ZUV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgIG1hcmtVbnByb2Nlc3NlZFVwZGF0ZVRpbWUocmVtYWluaW5nRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgLy8gTWFyayB0aGUgZXZlbnQgdGltZSBvZiB0aGlzIHVwZGF0ZSBhcyByZWxldmFudCB0byB0aGlzIHJlbmRlciBwYXNzLlxuICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBpZGVhbGx5IHVzZSB0aGUgdHJ1ZSBldmVudCB0aW1lIG9mIHRoaXMgdXBkYXRlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vIGl0cyBwcmlvcml0eSB3aGljaCBpcyBhIGRlcml2ZWQgYW5kIG5vdCByZXZlcnNlYWJsZSB2YWx1ZS5cbiAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHNraXAgdGhpcyB1cGRhdGUgaWYgaXQgd2FzIGFscmVhZHkgY29tbWl0dGVkIGJ1dCBjdXJyZW50bHlcbiAgICAgICAgLy8gd2UgaGF2ZSBubyB3YXkgb2YgZGV0ZWN0aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb21taXR0ZWQgYW5kIHN1c3BlbmRlZFxuICAgICAgICAvLyB1cGRhdGUgaGVyZS5cbiAgICAgICAgbWFya1JlbmRlckV2ZW50VGltZUFuZENvbmZpZyh1cGRhdGVFeHBpcmF0aW9uVGltZSwgX3VwZGF0ZS5zdXNwZW5zZUNvbmZpZyk7IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cbiAgICAgICAgaWYgKF91cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgX25ld1N0YXRlID0gX3VwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfYWN0aW9uID0gX3VwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgX25ld1N0YXRlID0gcmVkdWNlcihfbmV3U3RhdGUsIF9hY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZVcGRhdGUgPSBfdXBkYXRlO1xuICAgICAgX3VwZGF0ZSA9IF91cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlIChfdXBkYXRlICE9PSBudWxsICYmIF91cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmICghZGlkU2tpcCkge1xuICAgICAgbmV3QmFzZVVwZGF0ZSA9IHByZXZVcGRhdGU7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBfbmV3U3RhdGU7XG4gICAgfSAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghaXMkMShfbmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gX25ld1N0YXRlO1xuICAgIGhvb2suYmFzZVVwZGF0ZSA9IG5ld0Jhc2VVcGRhdGU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBfbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBsYXN0OiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIC8vIEZsb3cgZG9lc24ndCBrbm93IHRoaXMgaXMgbm9uLW51bGwsIGJ1dCB3ZSBkby5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFZhbHVlXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZik7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRWZmZWN0VGFnLCBob29rRWZmZWN0VGFnLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgc2lkZUVmZmVjdFRhZyB8PSBmaWJlckVmZmVjdFRhZztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChob29rRWZmZWN0VGFnLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRWZmZWN0VGFnLCBob29rRWZmZWN0VGFnLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBwdXNoRWZmZWN0KE5vRWZmZWN0JDEsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2lkZUVmZmVjdFRhZyB8PSBmaWJlckVmZmVjdFRhZztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChob29rRWZmZWN0VGFnLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgVW5tb3VudFBhc3NpdmUgfCBNb3VudFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgVW5tb3VudFBhc3NpdmUgfCBNb3VudFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgVW5tb3VudE11dGF0aW9uIHwgTW91bnRMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBVbm1vdW50TXV0YXRpb24gfCBNb3VudExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICAhcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9JykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgISh0eXBlb2YgY3JlYXRlID09PSAnZnVuY3Rpb24nKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJykgOiB2b2lkIDA7XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgVW5tb3VudE11dGF0aW9uIHwgTW91bnRMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAhKHR5cGVvZiBjcmVhdGUgPT09ICdmdW5jdGlvbicpID8gd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKSA6IHZvaWQgMDtcbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgVW5tb3VudE11dGF0aW9uIHwgTW91bnRMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7Ly8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gIC8vIFRoZSByZWFjdC1kZWJ1Zy1ob29rcyBwYWNrYWdlIGluamVjdHMgaXRzIG93biBpbXBsZW1lbnRhdGlvblxuICAvLyBzbyB0aGF0IGUuZy4gRGV2VG9vbHMgY2FuIGRpc3BsYXkgY3VzdG9tIGhvb2sgdmFsdWVzLlxufVxuXG52YXIgdXBkYXRlRGVidWdWYWx1ZSA9IG1vdW50RGVidWdWYWx1ZTtcblxuZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgY29uZmlnKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBTY2hlZHVsZXIudW5zdGFibGVfbmV4dChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldmlvdXNDb25maWcgPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnN1c3BlbnNlO1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS5zdXNwZW5zZSA9IGNvbmZpZyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS5zdXNwZW5zZSA9IHByZXZpb3VzQ29uZmlnO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbdmFsdWUsIGNvbmZpZ10pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBjb25maWcpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKHZhbHVlKSxcbiAgICAgIHByZXZWYWx1ZSA9IF91cGRhdGVTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3VwZGF0ZVN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgU2NoZWR1bGVyLnVuc3RhYmxlX25leHQoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZpb3VzQ29uZmlnID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS5zdXNwZW5zZTtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEuc3VzcGVuc2UgPSBjb25maWcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWc7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEuc3VzcGVuc2UgPSBwcmV2aW91c0NvbmZpZztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW3ZhbHVlLCBjb25maWddKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKGNvbmZpZykge1xuICB2YXIgX21vdW50U3RhdGUyID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMF0sXG4gICAgICBzZXRQZW5kaW5nID0gX21vdW50U3RhdGUyWzFdO1xuXG4gIHZhciBzdGFydFRyYW5zaXRpb24gPSBtb3VudENhbGxiYWNrKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNldFBlbmRpbmcodHJ1ZSk7XG4gICAgU2NoZWR1bGVyLnVuc3RhYmxlX25leHQoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZpb3VzQ29uZmlnID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS5zdXNwZW5zZTtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEuc3VzcGVuc2UgPSBjb25maWcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWc7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS5zdXNwZW5zZSA9IHByZXZpb3VzQ29uZmlnO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbY29uZmlnLCBpc1BlbmRpbmddKTtcbiAgcmV0dXJuIFtzdGFydFRyYW5zaXRpb24sIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oY29uZmlnKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUyID0gdXBkYXRlU3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfdXBkYXRlU3RhdGUyWzFdO1xuXG4gIHZhciBzdGFydFRyYW5zaXRpb24gPSB1cGRhdGVDYWxsYmFjayhmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzZXRQZW5kaW5nKHRydWUpO1xuICAgIFNjaGVkdWxlci51bnN0YWJsZV9uZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcmV2aW91c0NvbmZpZyA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEuc3VzcGVuc2U7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnN1c3BlbnNlID0gY29uZmlnID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEuc3VzcGVuc2UgPSBwcmV2aW91c0NvbmZpZztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW2NvbmZpZywgaXNQZW5kaW5nXSk7XG4gIHJldHVybiBbc3RhcnRUcmFuc2l0aW9uLCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICBpZiAoIShudW1iZXJPZlJlUmVuZGVycyA8IFJFX1JFTkRFUl9MSU1JVCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgISh0eXBlb2YgYXJndW1lbnRzWzNdICE9PSAnZnVuY3Rpb24nKSA/IHdhcm5pbmckMShmYWxzZSwgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKSA6IHZvaWQgMDtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gU3Rhc2ggaXQgaW4gYSBsYXppbHktY3JlYXRlZCBtYXAgb2ZcbiAgICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHRydWU7XG4gICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgIGV4cGlyYXRpb25UaW1lOiByZW5kZXJFeHBpcmF0aW9uVGltZSQxLFxuICAgICAgc3VzcGVuc2VDb25maWc6IG51bGwsXG4gICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgIGVhZ2VyUmVkdWNlcjogbnVsbCxcbiAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIHtcbiAgICAgIHVwZGF0ZS5wcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlclBoYXNlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgcmVuZGVyUGhhc2VVcGRhdGVzID0gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gcmVuZGVyUGhhc2VVcGRhdGVzLmdldChxdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZW5kZXJQaGFzZVVwZGF0ZXMuc2V0KHF1ZXVlLCB1cGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICAgIHdoaWxlIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICAgIH1cblxuICAgICAgbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50VGltZSA9IHJlcXVlc3RDdXJyZW50VGltZUZvclVwZGF0ZSgpO1xuICAgIHZhciBzdXNwZW5zZUNvbmZpZyA9IHJlcXVlc3RDdXJyZW50U3VzcGVuc2VDb25maWcoKTtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBjb21wdXRlRXhwaXJhdGlvbkZvckZpYmVyKGN1cnJlbnRUaW1lLCBmaWJlciwgc3VzcGVuc2VDb25maWcpO1xuICAgIHZhciBfdXBkYXRlMiA9IHtcbiAgICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICAgIHN1c3BlbnNlQ29uZmlnOiBzdXNwZW5zZUNvbmZpZyxcbiAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAge1xuICAgICAgX3VwZGF0ZTIucHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICAgIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gICAgdmFyIGxhc3QgPSBxdWV1ZS5sYXN0O1xuXG4gICAgaWYgKGxhc3QgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICAgIF91cGRhdGUyLm5leHQgPSBfdXBkYXRlMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0ID0gbGFzdC5uZXh0O1xuXG4gICAgICBpZiAoZmlyc3QgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU3RpbGwgY2lyY3VsYXIuXG4gICAgICAgIF91cGRhdGUyLm5leHQgPSBmaXJzdDtcbiAgICAgIH1cblxuICAgICAgbGFzdC5uZXh0ID0gX3VwZGF0ZTI7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdCA9IF91cGRhdGUyO1xuXG4gICAgaWYgKGZpYmVyLmV4cGlyYXRpb25UaW1lID09PSBOb1dvcmsgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPT09IE5vV29yaykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICBfdXBkYXRlMi5lYWdlclJlZHVjZXIgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIF91cGRhdGUyLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKGlzJDEoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cGlyYXRpb25UaW1lKTtcbiAgfVxufVxuXG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZXNwb25kZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3Jcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB3YXJuaW5nJDEoZmFsc2UsICdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIHdhcm5pbmckMShmYWxzZSwgJ0RvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gJyArICdZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnICsgJ2h0dHBzOi8vZmIubWUvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgICB9LFxuICAgIHVzZVJlc3BvbmRlcjogZnVuY3Rpb24gKHJlc3BvbmRlciwgcHJvcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlc3BvbmRlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbmRlckxpc3RlbmVyKHJlc3BvbmRlciwgcHJvcHMpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBjb25maWcpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGNvbmZpZyk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKGNvbmZpZyk7XG4gICAgfVxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gICAgfSxcbiAgICB1c2VSZXNwb25kZXI6IGZ1bmN0aW9uIChyZXNwb25kZXIsIHByb3BzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZXNwb25kZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gY3JlYXRlUmVzcG9uZGVyTGlzdGVuZXIocmVzcG9uZGVyLCBwcm9wcyk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGNvbmZpZykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGNvbmZpZyk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbihjb25maWcpO1xuICAgIH1cbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH0sXG4gICAgdXNlUmVzcG9uZGVyOiBmdW5jdGlvbiAocmVzcG9uZGVyLCBwcm9wcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVzcG9uZGVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbmRlckxpc3RlbmVyKHJlc3BvbmRlciwgcHJvcHMpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBjb25maWcpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgY29uZmlnKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbihjb25maWcpO1xuICAgIH1cbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH0sXG4gICAgdXNlUmVzcG9uZGVyOiBmdW5jdGlvbiAocmVzcG9uZGVyLCBwcm9wcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVzcG9uZGVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBjcmVhdGVSZXNwb25kZXJMaXN0ZW5lcihyZXNwb25kZXIsIHByb3BzKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgY29uZmlnKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGNvbmZpZyk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oY29uZmlnKTtcbiAgICB9XG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH0sXG4gICAgdXNlUmVzcG9uZGVyOiBmdW5jdGlvbiAocmVzcG9uZGVyLCBwcm9wcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVzcG9uZGVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gY3JlYXRlUmVzcG9uZGVyTGlzdGVuZXIocmVzcG9uZGVyLCBwcm9wcyk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGNvbmZpZykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGNvbmZpZyk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbihjb25maWcpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gQ29tbW9uSlMgaW50ZXJvcCBuYW1lZCBpbXBvcnRzLlxuXG52YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGNvbW1pdFRpbWUgPSAwO1xudmFyIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuICBpZiAoIWVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG4gIGlmICghZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcbiAgaWYgKCFlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuICBpZiAoIWVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHdhcm5JZkh5ZHJhdGluZygpIHtcbiAge1xuICAgICEhaXNIeWRyYXRpbmcgPyB3YXJuaW5nJDEoZmFsc2UsICdXZSBzaG91bGQgbm90IGJlIGh5ZHJhdGluZyBoZXJlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhIGJ1Zy4nKSA6IHZvaWQgMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVlbnRlckh5ZHJhdGlvblN0YXRlRnJvbURlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyLCBzdXNwZW5zZUluc3RhbmNlKSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKHN1c3BlbnNlSW5zdGFuY2UpO1xuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5lZmZlY3RUYWcgPSBEZWxldGlvbjsgLy8gVGhpcyBtaWdodCBzZWVtIGxpa2UgaXQgYmVsb25ncyBvbiBwcm9ncmVzc2VkRmlyc3REZWxldGlvbi4gSG93ZXZlcixcbiAgLy8gdGhlc2UgY2hpbGRyZW4gYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWNvbmNpbGlhdGlvbiBsaXN0IG9mIGNoaWxkcmVuLlxuICAvLyBFdmVuIGlmIHdlIGFib3J0IGFuZCByZXJlY29uY2lsZSB0aGUgY2hpbGRyZW4sIHRoYXQgd2lsbCB0cnkgdG8gaHlkcmF0ZVxuICAvLyBhZ2FpbiBhbmQgdGhlIG5vZGVzIGFyZSBzdGlsbCBpbiB0aGUgaG9zdCB0cmVlIHNvIHRoZXNlIHdpbGwgYmVcbiAgLy8gcmVjcmVhdGVkLlxuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmVmZmVjdFRhZyA9IGZpYmVyLmVmZmVjdFRhZyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUsIF9wcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyKSB7XG4gICAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBjYW5IeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShuZXh0SW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0ge1xuICAgICAgICAgICAgICBkZWh5ZHJhdGVkOiBzdXNwZW5zZUluc3RhbmNlLFxuICAgICAgICAgICAgICByZXRyeVRpbWU6IE5ldmVyXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IHN1c3BlbnNlU3RhdGU7IC8vIFN0b3JlIHRoZSBkZWh5ZHJhdGVkIGZyYWdtZW50IGFzIGEgY2hpbGQgZmliZXIuXG4gICAgICAgICAgICAvLyBUaGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgZm9yIGdldEhvc3RTaWJsaW5nIGFuZCBkZWxldGluZyBub2RlcyxcbiAgICAgICAgICAgIC8vIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSB0byBjb25zaWRlciBhbGwgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXkncmUgZGVoeWRyYXRlZCBvbmVzIG9yIG5vdC5cblxuICAgICAgICAgICAgdmFyIGRlaHlkcmF0ZWRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgICAgIGRlaHlkcmF0ZWRGcmFnbWVudC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgICAgICAgIGZpYmVyLmNoaWxkID0gZGVoeWRyYXRlZEZyYWdtZW50O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG5cbiAgICBpZiAoIW5leHRJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIGlmICghc3VwcG9ydHNIeWRyYXRpb24pIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSgpIHRvIG5ldmVyIGJlIGNhbGxlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG5cbiAge1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlIGlzIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlXG4gICAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0U3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHByZXBhcmVUb0h5ZHJhdGVIb3N0U3VzcGVuc2VJbnN0YW5jZSgpIHRvIG5ldmVyIGJlIGNhbGxlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9XG4gIH1cblxuICBoeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFzdXBwb3J0c0h5ZHJhdGlvbikge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKCkgdG8gbmV2ZXIgYmUgY2FsbGVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICBpZiAoIXN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZmliZXIudHlwZTsgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cblxuICBpZiAoZmliZXIudGFnICE9PSBIb3N0Q29tcG9uZW50IHx8IHR5cGUgIT09ICdoZWFkJyAmJiB0eXBlICE9PSAnYm9keScgJiYgIXNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSk7XG4gICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcbiAgaWYgKCFzdXBwb3J0c0h5ZHJhdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0TWF4RHVyYXRpb247XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG52YXIgZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dE1heER1cmF0aW9uID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50JCQxLmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50JCQxLmNoaWxkLCBudWxsLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXIgdGhlaXJcbiAgLy8gaWRlbnRpdHkgbWF0Y2hlcy5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlbmRlciA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldEN1cnJlbnRQaGFzZSgncmVuZGVyJyk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICBpZiAoZGVidWdSZW5kZXJQaGFzZVNpZGVFZmZlY3RzRm9yU3RyaWN0TW9kZSAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgLy8gT25seSBkb3VibGUtcmVuZGVyIGNvbXBvbmVudHMgd2l0aCBIb29rc1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFBoYXNlKG51bGwpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSksIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhDb21wb25lbnQudHlwZSwgbnVsbCwgbmV4dFByb3BzLCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQkJDEuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKHVwZGF0ZUV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQkJDEucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICByZXR1cm4gbmV3Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVFeHBpcmF0aW9uVGltZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IHJlZmluZVJlc29sdmVkTGF6eUNvbXBvbmVudChvdXRlck1lbW9UeXBlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShvdXRlck1lbW9UeXBlKSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50JCQxLnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQkJDEudHlwZSkpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgaWYgKHVwZGF0ZUV4cGlyYXRpb25UaW1lIDwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50JCQxID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50JCQxICE9PSBudWxsICYmIGN1cnJlbnQkJDEucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gUmVmO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSwgZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAgaWYgKCFkaXNhYmxlTGVnYWN5Q29udGV4dCkge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRDdXJyZW50UGhhc2UoJ3JlbmRlcicpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAvLyBPbmx5IGRvdWJsZS1yZW5kZXIgY29tcG9uZW50cyB3aXRoIEhvb2tzXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFBoYXNlKG51bGwpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpLCBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZTtcblxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgLy8gQW4gY2xhc3MgY29tcG9uZW50IHdpdGhvdXQgYW4gaW5zdGFuY2Ugb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkXG4gICAgICAvLyBpbnNpZGUgYSBub24tIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVlIGl0IGxpa2UgYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICBjdXJyZW50JCQxLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50JCQxID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA/IHdhcm5pbmckMShmYWxzZSwgJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSAhPT0gTm9FZmZlY3Q7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb20gY2F0Y2ggaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBzZXRDdXJyZW50UGhhc2UoJ3JlbmRlcicpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmIChkZWJ1Z1JlbmRlclBoYXNlU2lkZUVmZmVjdHNGb3JTdHJpY3RNb2RlICYmIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgfVxuXG4gICAgICBzZXRDdXJyZW50UGhhc2UobnVsbCk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmIChjdXJyZW50JCQxICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIElmIHdlJ3JlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVjb25jaWxlIHdpdGhvdXQgcmV1c2luZyBhbnkgb2ZcbiAgICAvLyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uIENvbmNlcHR1YWxseSwgdGhlIG5vcm1hbCBjaGlsZHJlbiBhbmQgdGhlIGNoaWxkcmVuXG4gICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgLy8gbm9ybWFsIGNoaWxkcmVuIGV2ZW4gaWYgdGhlaXIgaWRlbnRpdGllcyBtYXRjaC5cbiAgICBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICBpZiAoaGFzQ29udGV4dCkge1xuICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cblxuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAoISh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIklmIHRoZSByb290IGRvZXMgbm90IGhhdmUgYW4gdXBkYXRlUXVldWUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmFpbGVkIG91dC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuZWxlbWVudCA6IG51bGw7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlUXVldWUsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUsIHRoYXQncyBhIGJhaWxvdXQgYmVjYXVzZSB3ZSBoYWRcbiAgICAvLyBubyB3b3JrIHRoYXQgZXhwaXJlcyBhdCB0aGlzIHRpbWUuXG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZWZmZWN0VGFnID0gbm9kZS5lZmZlY3RUYWcgJiB+UGxhY2VtZW50IHwgSHlkcmF0aW5nO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGh5ZHJhdGlvbiBzdGF0ZSBpbiBjYXNlIHdlIGFib3J0ZWQgYW5kIHJlc3VtZWQgYW5vdGhlclxuICAgIC8vIHJvb3QuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhdmUgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAgbWFya1JlZihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIENoZWNrIHRoZSBob3N0IGNvbmZpZyB0byBzZWUgaWYgdGhlIGNoaWxkcmVuIGFyZSBvZmZzY3JlZW4vaGlkZGVuLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUgJiYgcmVuZGVyRXhwaXJhdGlvblRpbWUgIT09IE5ldmVyICYmIHNob3VsZERlcHJpb3JpdGl6ZVN1YnRyZWUodHlwZSwgbmV4dFByb3BzKSkge1xuICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICBtYXJrU3Bhd25lZFdvcmsoTmV2ZXIpO1xuICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZSA9IE5ldmVyO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50JCQxID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlRXhwaXJhdGlvblRpbWUsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFdlIGNhbid0IHN0YXJ0IGEgVXNlciBUaW1pbmcgbWVhc3VyZW1lbnQgd2l0aCBjb3JyZWN0IGxhYmVsIHlldC5cbiAgLy8gQ2FuY2VsIGFuZCByZXN1bWUgcmlnaHQgYWZ0ZXIgd2Uga25vdyB0aGUgdGFnLlxuXG4gIGNhbmNlbFdvcmtUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBDb21wb25lbnQgPSByZWFkTGF6eUNvbXBvbmVudFR5cGUoZWxlbWVudFR5cGUpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICBzdGFydFdvcmtUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpLCBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVFeHBpcmF0aW9uVGltZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBoaW50ID0gJyc7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICsgaGludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gIH0gLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuXG4gIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluZGV0ZXJtaW5hdGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIGlmICghZGlzYWJsZUxlZ2FjeUNvbnRleHQpIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICsgJ1RoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUpO1xuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgcmVzZXRIb29rcygpOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG5cbiAgICB7XG4gICAgICBpZiAoZGlzYWJsZUxlZ2FjeUNvbnRleHQgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlcykge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICclcyB1c2VzIHRoZSBsZWdhY3kgY29udGV4dFR5cGVzIEFQSSB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAnICsgJ1VzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgd2l0aCBSZWFjdC51c2VDb250ZXh0KCkgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnUmVuZGVyUGhhc2VTaWRlRWZmZWN0c0ZvclN0cmljdE1vZGUgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgLy8gT25seSBkb3VibGUtcmVuZGVyIGNvbXBvbmVudHMgd2l0aCBIb29rc1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAgaWYgKENvbXBvbmVudCkge1xuICAgICEhQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmckMShmYWxzZSwgJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3YXJuQWJvdXREZWZhdWx0UHJvcHNPbkZ1bmN0aW9uQ29tcG9uZW50cyAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gZnVuY3Rpb24gY29tcG9uZW50cyAnICsgJ2luIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFVzZSBKYXZhU2NyaXB0IGRlZmF1bHQgcGFyYW1ldGVycyBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudFtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLicsIF9jb21wb25lbnROYW1lMik7XG4gICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lMyk7XG4gICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICByZXRyeVRpbWU6IE5vV29ya1xufTtcblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIElmIHRoZSBjb250ZXh0IGlzIHRlbGxpbmcgdXMgdGhhdCB3ZSBzaG91bGQgc2hvdyBhIGZhbGxiYWNrLCBhbmQgd2UncmUgbm90XG4gIC8vIGFscmVhZHkgc2hvd2luZyBjb250ZW50LCB0aGVuIHdlIHNob3VsZCBzaG93IHRoZSBmYWxsYmFjayBpbnN0ZWFkLlxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSAmJiAoY3VycmVudCQkMSA9PT0gbnVsbCB8fCBjdXJyZW50JCQxLm1lbW9pemVkU3RhdGUgIT09IG51bGwpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBuZXh0RGlkVGltZW91dCA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSAhPT0gTm9FZmZlY3Q7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzKSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBuZXh0RGlkVGltZW91dCA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50JCQxID09PSBudWxsIHx8IGN1cnJlbnQkJDEubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTtcblxuICB7XG4gICAgaWYgKCdtYXhEdXJhdGlvbicgaW4gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1heER1cmF0aW9uKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dE1heER1cmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnbWF4RHVyYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFJlYWN0LiAnICsgJ1JlbW92ZSB0aGUgbWF4RHVyYXRpb24gcHJvcC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhpcyBuZXh0IHBhcnQgaXMgYSBiaXQgY29uZnVzaW5nLiBJZiB0aGUgY2hpbGRyZW4gdGltZW91dCwgd2Ugc3dpdGNoIHRvXG4gIC8vIHNob3dpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuIGluIHBsYWNlIG9mIHRoZSBcInByaW1hcnlcIiBjaGlsZHJlbi5cbiAgLy8gSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBkZWxldGUgdGhlIHByaW1hcnkgY2hpbGRyZW4gYmVjYXVzZSB0aGVuIHRoZWlyXG4gIC8vIHN0YXRlIHdpbGwgYmUgbG9zdCAoYm90aCB0aGUgUmVhY3Qgc3RhdGUgYW5kIHRoZSBob3N0IHN0YXRlLCBlLmcuXG4gIC8vIHVuY29udHJvbGxlZCBmb3JtIGlucHV0cykuIEluc3RlYWQgd2Uga2VlcCB0aGVtIG1vdW50ZWQgYW5kIGhpZGUgdGhlbS5cbiAgLy8gQm90aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4gQU5EIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFyZSByZW5kZXJlZCBhdCB0aGVcbiAgLy8gc2FtZSB0aW1lLiBPbmNlIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFyZSB1bi1zdXNwZW5kZWQsIHdlIGNhbiBkZWxldGVcbiAgLy8gdGhlIGZhbGxiYWNrIGNoaWxkcmVuIOKAlCBkb24ndCBuZWVkIHRvIHByZXNlcnZlIHRoZWlyIHN0YXRlLlxuICAvL1xuICAvLyBUaGUgdHdvIHNldHMgb2YgY2hpbGRyZW4gYXJlIHNpYmxpbmdzIGluIHRoZSBob3N0IGVudmlyb25tZW50LCBidXRcbiAgLy8gc2VtYW50aWNhbGx5LCBmb3IgcHVycG9zZXMgb2YgcmVjb25jaWxpYXRpb24sIHRoZXkgYXJlIHR3byBzZXBhcmF0ZSBzZXRzLlxuICAvLyBTbyB3ZSBzdG9yZSB0aGVtIHVzaW5nIHR3byBmcmFnbWVudCBmaWJlcnMuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHdlIHdhbnQgdG8gYXZvaWQgYWxsb2NhdGluZyBleHRyYSBmaWJlcnMgZm9yIGV2ZXJ5IHBsYWNlaG9sZGVyLlxuICAvLyBUaGV5J3JlIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdGhlIGNoaWxkcmVuIHRpbWUgb3V0LCBiZWNhdXNlIHRoYXQncyB0aGVcbiAgLy8gb25seSB0aW1lIHdoZW4gYm90aCBzZXRzIGFyZSBtb3VudGVkLlxuICAvL1xuICAvLyBTbywgdGhlIGV4dHJhIGZyYWdtZW50IGZpYmVycyBhcmUgb25seSB1c2VkIGlmIHRoZSBjaGlsZHJlbiB0aW1lIG91dC5cbiAgLy8gT3RoZXJ3aXNlLCB3ZSByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gZGlyZWN0bHkuIFRoaXMgcmVxdWlyZXMgc29tZVxuICAvLyBjdXN0b20gcmVjb25jaWxpYXRpb24gbG9naWMgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSBwcmltYXJ5XG4gIC8vIGNoaWxkcmVuLiBJdCdzIGVzc2VudGlhbGx5IGEgdmVyeSBiYXNpYyBmb3JtIG9mIHJlLXBhcmVudGluZy5cblxuXG4gIGlmIChjdXJyZW50JCQxID09PSBudWxsKSB7XG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgdHJ5IHRvIGh5ZHJhdGUgdGhpcyBib3VuZGFyeS5cbiAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cblxuICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgICBpZiAoZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG1vdW50RGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KHdvcmtJblByb2dyZXNzLCBkZWh5ZHJhdGVkLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBUaGlzIGlzIHRoZSBpbml0aWFsIG1vdW50LiBUaGlzIGJyYW5jaCBpcyBwcmV0dHkgc2ltcGxlIGJlY2F1c2UgdGhlcmUnc1xuICAgIC8vIG5vIHByZXZpb3VzIHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgcHJlc2VydmVkLlxuXG5cbiAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgIC8vIE1vdW50IHNlcGFyYXRlIGZyYWdtZW50cyBmb3IgcHJpbWFyeSBhbmQgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChudWxsLCBtb2RlLCBOb1dvcmssIG51bGwpO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAvLyBPdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIGNvbW1pdCB0aGUgZWZmZWN0cyBmcm9tIHRoZVxuICAgICAgICAvLyBwYXJ0aWFsbHkgY29tcGxldGVkLCB0aW1lZC1vdXQgdHJlZSwgdG9vLlxuICAgICAgICB2YXIgcHJvZ3Jlc3NlZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5Q2hpbGQgPSBwcm9ncmVzc2VkU3RhdGUgIT09IG51bGwgPyB3b3JrSW5Qcm9ncmVzcy5jaGlsZC5jaGlsZCA6IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZCA9IHByb2dyZXNzZWRQcmltYXJ5Q2hpbGQ7XG4gICAgICAgIHZhciBwcm9ncmVzc2VkQ2hpbGQgPSBwcm9ncmVzc2VkUHJpbWFyeUNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChwcm9ncmVzc2VkQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBwcm9ncmVzc2VkQ2hpbGQucmV0dXJuID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgICAgICAgcHJvZ3Jlc3NlZENoaWxkID0gcHJvZ3Jlc3NlZENoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5leHRGYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSwgbnVsbCk7XG4gICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50OyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNb3VudCB0aGUgcHJpbWFyeSBjaGlsZHJlbiB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBmcmFnbWVudCBmaWJlci5cbiAgICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLiBUaGlzIGJyYW5jaCBpcyBtb3JlIGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2UgbmVlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGUgc3RhdGUgb2YgdGhlIHByaW1hcnkgY2hpbGRyZW4gaXMgcHJlc2VydmVkLlxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50JCQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICBpZiAoZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlcikge1xuICAgICAgICB2YXIgX2RlaHlkcmF0ZWQgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoX2RlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9kZWh5ZHJhdGVkLCBwcmV2U3RhdGUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQgYW5kIHdlIHNob3VsZCBzdGlsbCBiZSBpbiBkZWh5ZHJhdGVkIG1vZGUuXG4gICAgICAgICAgICAvLyBMZWF2ZSB0aGUgZXhpc3RpbmcgY2hpbGQgaW4gcGxhY2UuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQkJDEuY2hpbGQ7IC8vIFRoZSBkZWh5ZHJhdGVkIGNvbXBsZXRpb24gcGFzcyBleHBlY3RzIHRoaXMgZmxhZyB0byBiZSB0aGVyZVxuICAgICAgICAgICAgLy8gYnV0IHRoZSBub3JtYWwgc3VzcGVuc2UgcGFzcyBkb2Vzbid0LlxuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTdXNwZW5kZWQgYnV0IHdlIHNob3VsZCBubyBsb25nZXIgYmUgaW4gZGVoeWRyYXRlZCBtb2RlLlxuICAgICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5vdyBoYXZlIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suIFdyYXAgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAvLyBpbiBhIGZyYWdtZW50IGZpYmVyIHRvIGtlZXAgdGhlbSBzZXBhcmF0ZSBmcm9tIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gY2hpbGRyZW4uXG4gICAgICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoIC8vIEl0IHNob3VsZG4ndCBtYXR0ZXIgd2hhdCB0aGUgcGVuZGluZyBwcm9wcyBhcmUgYmVjYXVzZSB3ZSBhcmVuJ3RcbiAgICAgICAgICAgIC8vIGdvaW5nIHRvIHJlbmRlciB0aGlzIGZyYWdtZW50LlxuICAgICAgICAgICAgbnVsbCwgbW9kZSwgTm9Xb3JrLCBudWxsKTtcblxuICAgICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzOyAvLyBUaGlzIGlzIGFsd2F5cyBudWxsIHNpbmNlIHdlIG5ldmVyIHdhbnQgdGhlIHByZXZpb3VzIGNoaWxkXG4gICAgICAgICAgICAvLyB0aGF0IHdlJ3JlIG5vdCBnb2luZyB0byBoeWRyYXRlLlxuXG4gICAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgLy8gT3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBjb21taXQgdGhlIGVmZmVjdHMgZnJvbSB0aGVcbiAgICAgICAgICAgICAgLy8gcGFydGlhbGx5IGNvbXBsZXRlZCwgdGltZWQtb3V0IHRyZWUsIHRvby5cbiAgICAgICAgICAgICAgdmFyIF9wcm9ncmVzc2VkQ2hpbGQgPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAoX3Byb2dyZXNzZWRDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9wcm9ncmVzc2VkQ2hpbGQucmV0dXJuID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgICAgICAgICAgICAgIF9wcm9ncmVzc2VkQ2hpbGQgPSBfcHJvZ3Jlc3NlZENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBkcm9wcGVkIHRoZSBlZmZlY3QgbGlzdCB3aGljaCBjb250YWlucyB0aGUgZGVsZXRpb24uXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVjb25jaWxlIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBjaGlsZC5cbiAgICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQkJDEuY2hpbGQsIG51bGwsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIH0gLy8gQmVjYXVzZSBwcmltYXJ5Q2hpbGRGcmFnbWVudCBpcyBhIG5ldyBmaWJlciB0aGF0IHdlJ3JlIGluc2VydGluZyBhcyB0aGVcbiAgICAgICAgICAgIC8vIHBhcmVudCBvZiBhIG5ldyB0cmVlLCB3ZSBuZWVkIHRvIHNldCBpdHMgdHJlZUJhc2VEdXJhdGlvbi5cblxuXG4gICAgICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAgICAgLy8gdHJlZUJhc2VEdXJhdGlvbiBpcyB0aGUgc3VtIG9mIGFsbCB0aGUgY2hpbGQgdHJlZSBiYXNlIGR1cmF0aW9ucy5cbiAgICAgICAgICAgICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgICB2YXIgaGlkZGVuQ2hpbGQgPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKGhpZGRlbkNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBoaWRkZW5DaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICAgICAgICAgIGhpZGRlbkNoaWxkID0gaGlkZGVuQ2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIH0gLy8gQ3JlYXRlIGEgZnJhZ21lbnQgZnJvbSB0aGUgZmFsbGJhY2sgY2hpbGRyZW4sIHRvby5cblxuXG4gICAgICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KF9uZXh0RmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUsIG51bGwpO1xuXG4gICAgICAgICAgICBfZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgICAgICAgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudC5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICAgICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50OyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlIGN1cnJlbnQgdHJlZSBhbHJlYWR5IHRpbWVkIG91dC4gVGhhdCBtZWFucyBlYWNoIGNoaWxkIHNldCBpc1xuICAgICAgLy8gd3JhcHBlZCBpbiBhIGZyYWdtZW50IGZpYmVyLlxuXG5cbiAgICAgIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50JCQxLmNoaWxkO1xuICAgICAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcblxuICAgICAgaWYgKG5leHREaWRUaW1lb3V0KSB7XG4gICAgICAgIC8vIFN0aWxsIHRpbWVkIG91dC4gUmV1c2UgdGhlIGN1cnJlbnQgcHJpbWFyeSBjaGlsZHJlbiBieSBjbG9uaW5nXG4gICAgICAgIC8vIGl0cyBmcmFnbWVudC4gV2UncmUgZ29pbmcgdG8gc2tpcCBvdmVyIHRoZXNlIGVudGlyZWx5LlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MiA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcywgTm9Xb3JrKTtcblxuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIE91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2UgY29tbWl0IHRoZSBlZmZlY3RzIGZyb20gdGhlXG4gICAgICAgICAgLy8gcGFydGlhbGx5IGNvbXBsZXRlZCwgdGltZWQtb3V0IHRyZWUsIHRvby5cbiAgICAgICAgICB2YXIgX3Byb2dyZXNzZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICB2YXIgX3Byb2dyZXNzZWRQcmltYXJ5Q2hpbGQgPSBfcHJvZ3Jlc3NlZFN0YXRlICE9PSBudWxsID8gd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGQgOiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgIGlmIChfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkKSB7XG4gICAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkID0gX3Byb2dyZXNzZWRQcmltYXJ5Q2hpbGQ7XG4gICAgICAgICAgICB2YXIgX3Byb2dyZXNzZWRDaGlsZDIgPSBfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZDtcblxuICAgICAgICAgICAgd2hpbGUgKF9wcm9ncmVzc2VkQ2hpbGQyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIF9wcm9ncmVzc2VkQ2hpbGQyLnJldHVybiA9IF9wcmltYXJ5Q2hpbGRGcmFnbWVudDI7XG4gICAgICAgICAgICAgIF9wcm9ncmVzc2VkQ2hpbGQyID0gX3Byb2dyZXNzZWRDaGlsZDIuc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQmVjYXVzZSBwcmltYXJ5Q2hpbGRGcmFnbWVudCBpcyBhIG5ldyBmaWJlciB0aGF0IHdlJ3JlIGluc2VydGluZyBhcyB0aGVcbiAgICAgICAgLy8gcGFyZW50IG9mIGEgbmV3IHRyZWUsIHdlIG5lZWQgdG8gc2V0IGl0cyB0cmVlQmFzZUR1cmF0aW9uLlxuXG5cbiAgICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgLy8gdHJlZUJhc2VEdXJhdGlvbiBpcyB0aGUgc3VtIG9mIGFsbCB0aGUgY2hpbGQgdHJlZSBiYXNlIGR1cmF0aW9ucy5cbiAgICAgICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgICAgIHZhciBfaGlkZGVuQ2hpbGQgPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkO1xuXG4gICAgICAgICAgd2hpbGUgKF9oaWRkZW5DaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gKz0gX2hpZGRlbkNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgICAgICBfaGlkZGVuQ2hpbGQgPSBfaGlkZGVuQ2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLnRyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgfSAvLyBDbG9uZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnQsIHRvby4gVGhlc2Ugd2UnbGwgY29udGludWVcbiAgICAgICAgLy8gd29ya2luZyBvbi5cblxuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIsIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICAgIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLnNpYmxpbmcgPSBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Mi5jaGlsZEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrOyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50MjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gbG9uZ2VyIHN1c3BlbmRlZC4gU3dpdGNoIGJhY2sgdG8gc2hvd2luZyB0aGUgcHJpbWFyeSBjaGlsZHJlbixcbiAgICAgICAgLy8gYW5kIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGZyYWdtZW50IGZpYmVyLlxuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICAgIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkO1xuICAgICAgICB2YXIgcHJpbWFyeUNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnRQcmltYXJ5Q2hpbGQsIF9uZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7IC8vIElmIHRoaXMgcmVuZGVyIGRvZXNuJ3Qgc3VzcGVuZCwgd2UgbmVlZCB0byBkZWxldGUgdGhlIGZhbGxiYWNrXG4gICAgICAgIC8vIGNoaWxkcmVuLiBXYWl0IHVudGlsIHRoZSBjb21wbGV0ZSBwaGFzZSwgYWZ0ZXIgd2UndmUgY29uZmlybWVkIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBpcyBubyBsb25nZXIgbmVlZGVkLlxuICAgICAgICAvLyBUT0RPOiBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gc3RvcmUgdGhlIGZhbGxiYWNrIGZyYWdtZW50IG9uXG4gICAgICAgIC8vIHRoZSBzdGF0ZU5vZGU/XG4gICAgICAgIC8vIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2Ugbm9ybWFsbHkgZG8uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBoYXMgbm90IGFscmVhZHkgdGltZWQgb3V0LiBUaGF0IG1lYW5zIHRoZSBwcmltYXJ5XG4gICAgICAvLyBjaGlsZHJlbiBhcmUgbm90IHdyYXBwZWQgaW4gYSBmcmFnbWVudCBmaWJlci5cbiAgICAgIHZhciBfY3VycmVudFByaW1hcnlDaGlsZCA9IGN1cnJlbnQkJDEuY2hpbGQ7XG5cbiAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAvLyBUaW1lZCBvdXQuIFdyYXAgdGhlIGNoaWxkcmVuIGluIGEgZnJhZ21lbnQgZmliZXIgdG8ga2VlcCB0aGVtXG4gICAgICAgIC8vIHNlcGFyYXRlIGZyb20gdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMyA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KCAvLyBJdCBzaG91bGRuJ3QgbWF0dGVyIHdoYXQgdGhlIHBlbmRpbmcgcHJvcHMgYXJlIGJlY2F1c2Ugd2UgYXJlbid0XG4gICAgICAgIC8vIGdvaW5nIHRvIHJlbmRlciB0aGlzIGZyYWdtZW50LlxuICAgICAgICBudWxsLCBtb2RlLCBOb1dvcmssIG51bGwpO1xuXG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGQgPSBfY3VycmVudFByaW1hcnlDaGlsZDtcblxuICAgICAgICBpZiAoX2N1cnJlbnRQcmltYXJ5Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBfY3VycmVudFByaW1hcnlDaGlsZC5yZXR1cm4gPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzO1xuICAgICAgICB9IC8vIEV2ZW4gdGhvdWdoIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpYmVyLCB0aGVyZSBhcmUgbm8gbmV3IGNoaWxkcmVuLFxuICAgICAgICAvLyBiZWNhdXNlIHdlJ3JlIHJldXNpbmcgYW4gYWxyZWFkeSBtb3VudGVkIHRyZWUuIFNvIHdlIGRvbid0IG5lZWQgdG9cbiAgICAgICAgLy8gc2NoZWR1bGUgYSBwbGFjZW1lbnQuXG4gICAgICAgIC8vIHByaW1hcnlDaGlsZEZyYWdtZW50LmVmZmVjdFRhZyB8PSBQbGFjZW1lbnQ7XG5cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICAvLyBPdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIGNvbW1pdCB0aGUgZWZmZWN0cyBmcm9tIHRoZVxuICAgICAgICAgIC8vIHBhcnRpYWxseSBjb21wbGV0ZWQsIHRpbWVkLW91dCB0cmVlLCB0b28uXG4gICAgICAgICAgdmFyIF9wcm9ncmVzc2VkU3RhdGUyID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIHZhciBfcHJvZ3Jlc3NlZFByaW1hcnlDaGlsZDIgPSBfcHJvZ3Jlc3NlZFN0YXRlMiAhPT0gbnVsbCA/IHdvcmtJblByb2dyZXNzLmNoaWxkLmNoaWxkIDogd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkID0gX3Byb2dyZXNzZWRQcmltYXJ5Q2hpbGQyO1xuICAgICAgICAgIHZhciBfcHJvZ3Jlc3NlZENoaWxkMyA9IF9wcm9ncmVzc2VkUHJpbWFyeUNoaWxkMjtcblxuICAgICAgICAgIHdoaWxlIChfcHJvZ3Jlc3NlZENoaWxkMyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3Byb2dyZXNzZWRDaGlsZDMucmV0dXJuID0gX3ByaW1hcnlDaGlsZEZyYWdtZW50MztcbiAgICAgICAgICAgIF9wcm9ncmVzc2VkQ2hpbGQzID0gX3Byb2dyZXNzZWRDaGlsZDMuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQmVjYXVzZSBwcmltYXJ5Q2hpbGRGcmFnbWVudCBpcyBhIG5ldyBmaWJlciB0aGF0IHdlJ3JlIGluc2VydGluZyBhcyB0aGVcbiAgICAgICAgLy8gcGFyZW50IG9mIGEgbmV3IHRyZWUsIHdlIG5lZWQgdG8gc2V0IGl0cyB0cmVlQmFzZUR1cmF0aW9uLlxuXG5cbiAgICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgLy8gdHJlZUJhc2VEdXJhdGlvbiBpcyB0aGUgc3VtIG9mIGFsbCB0aGUgY2hpbGQgdHJlZSBiYXNlIGR1cmF0aW9ucy5cbiAgICAgICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24yID0gMDtcbiAgICAgICAgICB2YXIgX2hpZGRlbkNoaWxkMiA9IF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGQ7XG5cbiAgICAgICAgICB3aGlsZSAoX2hpZGRlbkNoaWxkMiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24yICs9IF9oaWRkZW5DaGlsZDIudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIF9oaWRkZW5DaGlsZDIgPSBfaGlkZGVuQ2hpbGQyLnNpYmxpbmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb24yO1xuICAgICAgICB9IC8vIENyZWF0ZSBhIGZyYWdtZW50IGZyb20gdGhlIGZhbGxiYWNrIGNoaWxkcmVuLCB0b28uXG5cblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCBtb2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSwgbnVsbCk7XG5cbiAgICAgICAgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuc2libGluZyA9IF9mYWxsYmFja0NoaWxkRnJhZ21lbnQzO1xuICAgICAgICBfZmFsbGJhY2tDaGlsZEZyYWdtZW50My5lZmZlY3RUYWcgfD0gUGxhY2VtZW50O1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7IC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2VcbiAgICAgICAgLy8gbm9ybWFsbHkgZG8uXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgX2N1cnJlbnRQcmltYXJ5Q2hpbGQsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gV2UncmUgbm93IG5vdCBzdXNwZW5kZWQgbm9yIGRlaHlkcmF0ZWQuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsOyAvLyBSZXRyeSB3aXRoIHRoZSBmdWxsIGNoaWxkcmVuLlxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47IC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gZ2V0IFBsYWNlbWVudCBlZmZlY3RzIGFuZFxuICAvLyB0aGF0IHRoZSBvbGQgY2hpbGQgZ2V0cyBhIERlbGV0aW9uIGVmZmVjdC5cbiAgLy8gV2UgY291bGQgYWxzbyBjYWxsIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUuXG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUluc3RhbmNlLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAvLyBEdXJpbmcgdGhlIGZpcnN0IHBhc3MsIHdlJ2xsIGJhaWwgb3V0IGFuZCBub3QgZHJpbGwgaW50byB0aGUgY2hpbGRyZW4uXG4gIC8vIEluc3RlYWQsIHdlJ2xsIGxlYXZlIHRoZSBjb250ZW50IGluIHBsYWNlIGFuZCB0cnkgdG8gaHlkcmF0ZSBpdCBsYXRlci5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnQ2Fubm90IGh5ZHJhdGUgU3VzcGVuc2UgaW4gbGVnYWN5IG1vZGUuIFN3aXRjaCBmcm9tICcgKyAnUmVhY3RET00uaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIpIHRvICcgKyAnUmVhY3RET00uY3JlYXRlQmxvY2tpbmdSb290KGNvbnRhaW5lciwgeyBoeWRyYXRlOiB0cnVlIH0pJyArICcucmVuZGVyKGVsZW1lbnQpIG9yIHJlbW92ZSB0aGUgU3VzcGVuc2UgY29tcG9uZW50cyBmcm9tICcgKyAndGhlIHNlcnZlciByZW5kZXJlZCBjb21wb25lbnRzLicpO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gU3luYztcbiAgfSBlbHNlIGlmIChpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhzdXNwZW5zZUluc3RhbmNlKSkge1xuICAgIC8vIFRoaXMgaXMgYSBjbGllbnQtb25seSBib3VuZGFyeS4gU2luY2Ugd2Ugd29uJ3QgZ2V0IGFueSBjb250ZW50IGZyb20gdGhlIHNlcnZlclxuICAgIC8vIGZvciB0aGlzLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoYXQgYXQgYSBoaWdoZXIgcHJpb3JpdHkgYmFzZWQgb24gd2hlbiBpdCB3b3VsZFxuICAgIC8vIGhhdmUgdGltZWQgb3V0LiBJbiB0aGVvcnkgd2UgY291bGQgcmVuZGVyIGl0IGluIHRoaXMgcGFzcyBidXQgaXQgd291bGQgaGF2ZSB0aGVcbiAgICAvLyB3cm9uZyBwcmlvcml0eSBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIHdpbGwgcHJldmVudCBoeWRyYXRpb24gb2YgcGFyZW50IHBhdGguXG4gICAgLy8gSW5zdGVhZCwgd2UnbGwgbGVhdmUgd29yayBsZWZ0IG9uIGl0IHRvIHJlbmRlciBpdCBpbiBhIHNlcGFyYXRlIGNvbW1pdC5cbiAgICAvLyBUT0RPIFRoaXMgdGltZSBzaG91bGQgYmUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNlcnZlciByZW5kZXJlZCByZXNwb25zZSB0aGF0IGlzXG4gICAgLy8gYSBwYXJlbnQgdG8gdGhpcyBib3VuZGFyeSB3YXMgZGlzcGxheWVkLiBIb3dldmVyLCBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZVxuICAgIC8vIGEgcHJvdG9jb2wgdG8gdHJhbnNmZXIgdGhhdCB0aW1lLCB3ZSdsbCBqdXN0IGVzdGltYXRlIGl0IGJ5IHVzaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gdGltZS4gVGhpcyB3aWxsIG1lYW4gdGhhdCBTdXNwZW5zZSB0aW1lb3V0cyBhcmUgc2xpZ2h0bHkgc2hpZnRlZCB0byBsYXRlciB0aGFuXG4gICAgLy8gdGhleSBzaG91bGQgYmUuXG4gICAgdmFyIHNlcnZlckRpc3BsYXlUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7IC8vIFNjaGVkdWxlIGEgbm9ybWFsIHByaSB1cGRhdGUgdG8gcmVuZGVyIHRoaXMgY29udGVudC5cblxuICAgIHZhciBuZXdFeHBpcmF0aW9uVGltZSA9IGNvbXB1dGVBc3luY0V4cGlyYXRpb24oc2VydmVyRGlzcGxheVRpbWUpO1xuXG4gICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgIG1hcmtTcGF3bmVkV29yayhuZXdFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBuZXdFeHBpcmF0aW9uVGltZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSdsbCBjb250aW51ZSBoeWRyYXRpbmcgdGhlIHJlc3QgYXQgb2Zmc2NyZWVuIHByaW9yaXR5IHNpbmNlIHdlJ2xsIGFscmVhZHlcbiAgICAvLyBiZSBzaG93aW5nIHRoZSByaWdodCBjb250ZW50IGNvbWluZyBmcm9tIHRoZSBzZXJ2ZXIsIGl0IGlzIG5vIHJ1c2guXG4gICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBOZXZlcjtcblxuICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICBtYXJrU3Bhd25lZFdvcmsoTmV2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlSW5zdGFuY2UsIHN1c3BlbnNlU3RhdGUsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFdlIHNob3VsZCBuZXZlciBiZSBoeWRyYXRpbmcgYXQgdGhpcyBwb2ludCBiZWNhdXNlIGl0IGlzIHRoZSBmaXJzdCBwYXNzLFxuICAvLyBidXQgYWZ0ZXIgd2UndmUgYWxyZWFkeSBjb21taXR0ZWQgb25jZS5cbiAgd2FybklmSHlkcmF0aW5nKCk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICBpZiAoaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soc3VzcGVuc2VJbnN0YW5jZSkpIHtcbiAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIGluIGEgcGVybWFuZW50IGZhbGxiYWNrIHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIG5ldmVyXG4gICAgLy8gZ2V0IGFuIHVwZGF0ZSBhbmQgd2UnbGwgbmV2ZXIgYmUgYWJsZSB0byBoeWRyYXRlIHRoZSBmaW5hbCBjb250ZW50LiBMZXQncyBqdXN0IHRyeSB0aGVcbiAgICAvLyBjbGllbnQgc2lkZSByZW5kZXIgaW5zdGVhZC5cbiAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSAvLyBXZSB1c2UgY2hpbGRFeHBpcmF0aW9uVGltZSB0byBpbmRpY2F0ZSB0aGF0IGEgY2hpbGQgbWlnaHQgZGVwZW5kIG9uIGNvbnRleHQsIHNvIGlmXG4gIC8vIGFueSBjb250ZXh0IGhhcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHRyZWF0IGlzIGFzIGlmIHRoZSBpbnB1dCBtaWdodCBoYXZlIGNoYW5nZWQuXG5cblxuICB2YXIgaGFzQ29udGV4dENoYW5nZWQkJDEgPSBjdXJyZW50JCQxLmNoaWxkRXhwaXJhdGlvblRpbWUgPj0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG5cbiAgaWYgKGRpZFJlY2VpdmVVcGRhdGUgfHwgaGFzQ29udGV4dENoYW5nZWQkJDEpIHtcbiAgICAvLyBUaGlzIGJvdW5kYXJ5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgbm93IHVuYWJsZSB0b1xuICAgIC8vIGh5ZHJhdGUgaXQuIFdlIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaHlkcmF0ZSBpdCB1c2luZyBhbiBlYXJsaWVyIGV4cGlyYXRpb24gdGltZSwgaWZcbiAgICAvLyB3ZSBhcmUgcmVuZGVyaW5nIGF0IGxvd2VyIGV4cGlyYXRpb24gdGhhbiBzeW5jLlxuICAgIGlmIChyZW5kZXJFeHBpcmF0aW9uVGltZSA8IFN5bmMpIHtcbiAgICAgIGlmIChzdXNwZW5zZVN0YXRlLnJldHJ5VGltZSA8PSByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICAvLyBUaGlzIHJlbmRlciBpcyBldmVuIGhpZ2hlciBwcmkgdGhhbiB3ZSd2ZSBzZWVuIGJlZm9yZSwgbGV0J3MgdHJ5IGFnYWluXG4gICAgICAgIC8vIGF0IGV2ZW4gaGlnaGVyIHByaS5cbiAgICAgICAgdmFyIGF0dGVtcHRIeWRyYXRpb25BdEV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWUgKyAxO1xuICAgICAgICBzdXNwZW5zZVN0YXRlLnJldHJ5VGltZSA9IGF0dGVtcHRIeWRyYXRpb25BdEV4cGlyYXRpb25UaW1lO1xuICAgICAgICBzY2hlZHVsZVdvcmsoY3VycmVudCQkMSwgYXR0ZW1wdEh5ZHJhdGlvbkF0RXhwaXJhdGlvblRpbWUpOyAvLyBUT0RPOiBFYXJseSBhYm9ydCB0aGlzIHJlbmRlci5cbiAgICAgIH0gZWxzZSB7Ly8gV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRvIHBpbmcgYXQgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB3ZSdyZSByZW5kZXJpbmcgd2l0aFxuICAgICAgICAgIC8vIHNvIGlmIHdlIGdvdCBoZXJlLCB3ZSBtdXN0IGhhdmUgZmFpbGVkIHRvIGh5ZHJhdGUgYXQgdGhvc2UgbGV2ZWxzLiBXZSBtdXN0XG4gICAgICAgICAgLy8gbm93IGdpdmUgdXAuIEluc3RlYWQsIHdlJ3JlIGdvaW5nIHRvIGRlbGV0ZSB0aGUgd2hvbGUgc3VidHJlZSBhbmQgaW5zdGVhZCBpbmplY3RcbiAgICAgICAgICAvLyBhIG5ldyByZWFsIFN1c3BlbnNlIGJvdW5kYXJ5IHRvIHRha2UgaXRzIHBsYWNlLCB3aGljaCBtYXkgcmVuZGVyIGNvbnRlbnRcbiAgICAgICAgICAvLyBvciBmYWxsYmFjay4gVGhpcyBtaWdodCBzdXNwZW5kIGZvciBhIHdoaWxlIGFuZCBpZiBpdCBkb2VzIHdlIG1pZ2h0IHN0aWxsIGhhdmVcbiAgICAgICAgICAvLyBhbiBvcHBvcnR1bml0eSB0byBoeWRyYXRlIGJlZm9yZSB0aGlzIHBhc3MgY29tbWl0cy5cbiAgICAgICAgfVxuICAgIH0gLy8gSWYgd2UgaGF2ZSBzY2hlZHVsZWQgaGlnaGVyIHByaSB3b3JrIGFib3ZlLCB0aGlzIHdpbGwgcHJvYmFibHkganVzdCBhYm9ydCB0aGUgcmVuZGVyXG4gICAgLy8gc2luY2Ugd2Ugbm93IGhhdmUgaGlnaGVyIHByaW9yaXR5IHdvcmssIGJ1dCBpbiBjYXNlIGl0IGRvZXNuJ3QsIHdlIG5lZWQgdG8gcHJlcGFyZSB0b1xuICAgIC8vIHJlbmRlciBzb21ldGhpbmcsIGlmIHdlIHRpbWUgb3V0LiBFdmVuIGlmIHRoYXQgcmVxdWlyZXMgdXMgdG8gZGVsZXRlIGV2ZXJ5dGhpbmcgYW5kXG4gICAgLy8gc2tpcCBoeWRyYXRpb24uXG4gICAgLy8gRGVsYXkgaGF2aW5nIHRvIGRvIHRoaXMgYXMgbG9uZyBhcyB0aGUgc3VzcGVuc2UgdGltZW91dCBhbGxvd3MgdXMuXG5cblxuICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfSBlbHNlIGlmIChpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKHN1c3BlbnNlSW5zdGFuY2UpKSB7XG4gICAgLy8gVGhpcyBjb21wb25lbnQgaXMgc3RpbGwgcGVuZGluZyBtb3JlIGRhdGEgZnJvbSB0aGUgc2VydmVyLCBzbyB3ZSBjYW4ndCBoeWRyYXRlIGl0c1xuICAgIC8vIGNvbnRlbnQuIFdlIHRyZWF0IGl0IGFzIGlmIHRoaXMgY29tcG9uZW50IHN1c3BlbmRlZCBpdHNlbGYuIEl0IG1pZ2h0IHNlZW0gYXMgaWZcbiAgICAvLyB3ZSBjb3VsZCBqdXN0IHRyeSB0byByZW5kZXIgaXQgY2xpZW50LXNpZGUgaW5zdGVhZC4gSG93ZXZlciwgdGhpcyB3aWxsIHBlcmZvcm0gYVxuICAgIC8vIGxvdCBvZiB1bm5lY2Vzc2FyeSB3b3JrIGFuZCBpcyB1bmxpa2VseSB0byBjb21wbGV0ZSBzaW5jZSBpdCBvZnRlbiB3aWxsIHN1c3BlbmRcbiAgICAvLyBvbiBtaXNzaW5nIGRhdGEgYW55d2F5LiBBZGRpdGlvbmFsbHksIHRoZSBzZXJ2ZXIgbWlnaHQgYmUgYWJsZSB0byByZW5kZXIgbW9yZVxuICAgIC8vIHRoYW4gd2UgY2FuIG9uIHRoZSBjbGllbnQgeWV0LiBJbiB0aGF0IGNhc2Ugd2UnZCBlbmQgdXAgd2l0aCBtb3JlIGZhbGxiYWNrIHN0YXRlc1xuICAgIC8vIG9uIHRoZSBjbGllbnQgdGhhbiBpZiB3ZSBqdXN0IGxlYXZlIGl0IGFsb25lLiBJZiB0aGUgc2VydmVyIHRpbWVzIG91dCBvciBlcnJvcnNcbiAgICAvLyB0aGVzZSBzaG91bGQgdXBkYXRlIHRoaXMgYm91bmRhcnkgdG8gdGhlIHBlcm1hbmVudCBGYWxsYmFjayBzdGF0ZSBpbnN0ZWFkLlxuICAgIC8vIE1hcmsgaXQgYXMgaGF2aW5nIGNhcHR1cmVkIChpLmUuIHN1c3BlbmRlZCkuXG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IERpZENhcHR1cmU7IC8vIExlYXZlIHRoZSBjaGlsZCBpbiBwbGFjZS4gSS5lLiB0aGUgZGVoeWRyYXRlZCBmcmFnbWVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCQkMS5jaGlsZDsgLy8gUmVnaXN0ZXIgYSBjYWxsYmFjayB0byByZXRyeSB0aGlzIGJvdW5kYXJ5IG9uY2UgdGhlIHNlcnZlciBoYXMgc2VudCB0aGUgcmVzdWx0LlxuXG4gICAgcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoc3VzcGVuc2VJbnN0YW5jZSwgcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKG51bGwsIGN1cnJlbnQkJDEpKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgIHJlZW50ZXJIeWRyYXRpb25TdGF0ZUZyb21EZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHZhciBub2RlID0gY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgLy8gdHJlZSBpcyBwYXJ0IG9mIGEgaHlkcmF0aW5nIHRyZWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZFxuICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgIC8vIGluc2VydGVkIGludG8gdGhlIFJlYWN0IHRyZWUgaGVyZS4gSXQganVzdCBoYXBwZW5zIHRvIG5vdCBuZWVkIERPTVxuICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICBub2RlLmVmZmVjdFRhZyB8PSBIeWRyYXRpbmc7XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChmaWJlci5leHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIGFsdGVybmF0ZS5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjaGlsZFNsb3QpO1xuICAgIHZhciBpc0l0ZXJhYmxlID0gIWlzQXJyYXkgJiYgdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChpc0FycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBcnJheSA/ICdhcnJheScgOiAnaXRlcmFibGUnO1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gJyArICdhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiAnICsgJzwvU3VzcGVuc2VMaXN0PicsIHR5cGUsIGluZGV4LCB0eXBlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZyQxKGZhbHNlLCAnQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gJyArICdUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gJyArICdEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT8nLCByZXZlYWxPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBpc0JhY2t3YXJkcywgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbDogdGFpbCxcbiAgICAgIHRhaWxFeHBpcmF0aW9uOiAwLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlLFxuICAgICAgbGFzdEVmZmVjdDogbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZnJvbSBwcmV2aW91cyByZW5kZXJzLlxuICAgIHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHM7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICByZW5kZXJTdGF0ZS5sYXN0ID0gbGFzdENvbnRlbnRSb3c7XG4gICAgcmVuZGVyU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgcmVuZGVyU3RhdGUudGFpbEV4cGlyYXRpb24gPSAwO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBEaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gY3VycmVudCQkMSAhPT0gbnVsbCAmJiAoY3VycmVudCQkMS5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSAhPT0gTm9FZmZlY3Q7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIE91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgLy8gdXNlIG1ha2UgaXQgYSBub29wIGJ5IHRyZWF0aW5nIGl0IGFzIHRoZSBkZWZhdWx0IHJldmVhbE9yZGVyLlxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgdmFyIHRhaWw7XG5cbiAgICAgICAgICBpZiAobGFzdENvbnRlbnRSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBmYXN0IHBhdGggYnkganVzdCByZW5kZXJpbmcgdGhlIHRhaWwgbm93LlxuICAgICAgICAgICAgdGFpbCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSB0YWlsIHJvd3MgYWZ0ZXIgdGhlIGNvbnRlbnQgcm93LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgIHRhaWwgPSBsYXN0Q29udGVudFJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgbGFzdENvbnRlbnRSb3cuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlJ3JlIGdvaW5nIHRvIHJldmVyc2UgdGhlIGxpc3Qgb2YgZXZlcnl0aGluZ1xuICAgICAgICAgIC8vIHdlIHBhc3MgaW4gdGhlIG1lYW50aW1lLiBUaGF0J3MgZ29pbmcgdG8gYmUgb3VyIHRhaWwgaW4gcmV2ZXJzZVxuICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgIHZhciBfdGFpbCA9IG51bGw7XG4gICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIGNvbnRlbnQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcm93O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRSb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICBfdGFpbCA9IHJvdztcbiAgICAgICAgICAgIHJvdyA9IG5leHRSb3c7XG4gICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBfdGFpbCwgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIG51bGwsIC8vIHRhaWxcbiAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdW5kZWZpbmVkLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAvLyBhIGJvdW5kYXJ5LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwpIHtcbiAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAvLyBidXQgYXQgY29tbWl0LiBUaGVyZWZvcmUgd2UgbmVlZCB0byB0cmFjayBpbnNlcnRpb25zIHdoaWNoIHRoZSBub3JtYWxcbiAgICAvLyBmbG93IGRvZXNuJ3QgZG8gZHVyaW5nIG1vdW50LiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF0IHRoZSByb290IGJlY2F1c2VcbiAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInLCBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuaW5nJDEoZmFsc2UsICdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgICEodHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgJyArIFwidGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCBcIiArICd0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgJyArICdpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LicpIDogdm9pZCAwO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCwgbmV3UHJvcHMudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRDdXJyZW50UGhhc2UoJ3JlbmRlcicpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRDdXJyZW50UGhhc2UobnVsbCk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmRhbWVudGFsQ29tcG9uZW50JDEoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBmdW5kYW1lbnRhbEltcGwgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLmltcGw7XG5cbiAgaWYgKGZ1bmRhbWVudGFsSW1wbC5yZWNvbmNpbGVDaGlsZHJlbiA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTY29wZUNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgY2FuY2VsV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQkJDEuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAvLyBEb24ndCB1cGRhdGUgXCJiYXNlXCIgcmVuZGVyIHRpbWVzIGZvciBiYWlsb3V0cy5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdXBkYXRlRXhwaXJhdGlvblRpbWUgPSB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZTtcblxuICBpZiAodXBkYXRlRXhwaXJhdGlvblRpbWUgIT09IE5vV29yaykge1xuICAgIG1hcmtVbnByb2Nlc3NlZFVwZGF0ZVRpbWUodXBkYXRlRXhwaXJhdGlvblRpbWUpO1xuICB9IC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG5cblxuICB2YXIgY2hpbGRFeHBpcmF0aW9uVGltZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkRXhwaXJhdGlvblRpbWU7XG5cbiAgaWYgKGNoaWxkRXhwaXJhdGlvblRpbWUgPCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW91bnRGaWJlcihjdXJyZW50JCQxLCBvbGRXb3JrSW5Qcm9ncmVzcywgbmV3V29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudCQkMS5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQkJDE7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudCQkMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudCQkMTtcbiAgICB9XG5cbiAgICBjdXJyZW50JCQxLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnQkJDEuZWZmZWN0VGFnID0gRGVsZXRpb247XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmskMShjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIHVwZGF0ZUV4cGlyYXRpb25UaW1lID0gd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWU7XG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsIHdvcmtJblByb2dyZXNzLm1vZGUsIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpIHx8ICggLy8gRm9yY2UgYSByZS1yZW5kZXIgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQ6XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudCQkMS50eXBlKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh1cGRhdGVFeHBpcmF0aW9uVGltZSA8IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSAmJiByZW5kZXJFeHBpcmF0aW9uVGltZSAhPT0gTmV2ZXIgJiYgc2hvdWxkRGVwcmlvcml0aXplU3VidHJlZSh3b3JrSW5Qcm9ncmVzcy50eXBlLCBuZXdQcm9wcykpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhOZXZlcik7XG4gICAgICAgICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZSA9IE5ldmVyO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRFeHBpcmF0aW9uVGltZSA+PSByZW5kZXJFeHBpcmF0aW9uVGltZTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChlbmFibGVTdXNwZW5zZVNlcnZlclJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBXZSBrbm93IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCBzdXNwZW5kIGFnYWluIGJlY2F1c2UgaWYgaXQgaGFzXG4gICAgICAgICAgICAgICAgICAvLyBiZWVuIHVuc3VzcGVuZGVkIGl0IGhhcyBjb21taXR0ZWQgYXMgYSByZXNvbHZlZCBTdXNwZW5zZSBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAvLyBJZiBpdCBuZWVkcyB0byBiZSByZXRyaWVkLCBpdCBzaG91bGQgaGF2ZSB3b3JrIHNjaGVkdWxlZCBvbiBpdC5cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gLy8gSWYgdGhpcyBib3VuZGFyeSBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB3ZSBuZWVkIHRvIGRlY2lkZVxuICAgICAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRFeHBpcmF0aW9uVGltZSA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkRXhwaXJhdGlvblRpbWU7XG5cbiAgICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZEV4cGlyYXRpb25UaW1lICE9PSBOb1dvcmsgJiYgcHJpbWFyeUNoaWxkRXhwaXJhdGlvblRpbWUgPj0gcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbiBhbmQgd29yayBvbiB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQkJDEuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgIT09IE5vRWZmZWN0O1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IHdvcmtJblByb2dyZXNzLmNoaWxkRXhwaXJhdGlvblRpbWUgPj0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdhcyBpbiBmYWxsYmFjayBzdGF0ZSBsYXN0IHRpbWUsIGFuZCB3ZSBoYXZlIGFsbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHJlZSB3aGljaCB3aWxsIGFmZmVjdCB0aGUgdGFpbC4gU28gd2UgbmVlZCB0byB1c2UgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgICAgfSAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciB0aGUgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVFeHBpcmF0aW9uVGltZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50ID8gdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQyLCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZTIpLCBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMi50eXBlLCBfcmVzb2x2ZWRQcm9wczMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBfcmVzb2x2ZWRQcm9wczMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUV4cGlyYXRpb25UaW1lLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDMgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDMsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQkJDEsIHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlRnVuZGFtZW50YWxBUEkpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnVuZGFtZW50YWxDb21wb25lbnQkMShjdXJyZW50JCQxLCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlU2NvcGVBUEkpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU2NvcGVDb21wb25lbnQoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmRhbWVudGFsU3RhdGVJbnN0YW5jZShjdXJyZW50RmliZXIsIHByb3BzLCBpbXBsLCBzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRGaWJlcjogY3VycmVudEZpYmVyLFxuICAgIGltcGw6IGltcGwsXG4gICAgaW5zdGFuY2U6IG51bGwsXG4gICAgcHJldlByb3BzOiBudWxsLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBzdGF0ZTogc3RhdGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGaWJlclN1c3BlbnNlQW5kVGltZWRPdXQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VGYWxsYmFja0NoaWxkKGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci5jaGlsZC5zaWJsaW5nLmNoaWxkO1xufVxuXG52YXIgZW1wdHlPYmplY3QkMSA9IHt9O1xuXG5mdW5jdGlvbiBjb2xsZWN0U2NvcGVkTm9kZXMobm9kZSwgZm4sIHNjb3BlZE5vZGVzKSB7XG4gIGlmIChlbmFibGVTY29wZUFQSSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgdmFyIF90eXBlID0gbm9kZS50eXBlLFxuICAgICAgICAgIG1lbW9pemVkUHJvcHMgPSBub2RlLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgc3RhdGVOb2RlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgIHZhciBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShzdGF0ZU5vZGUpO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBudWxsICYmIGZuKF90eXBlLCBtZW1vaXplZFByb3BzIHx8IGVtcHR5T2JqZWN0JDEsIF9pbnN0YW5jZSkgPT09IHRydWUpIHtcbiAgICAgICAgc2NvcGVkTm9kZXMucHVzaChfaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoaXNGaWJlclN1c3BlbnNlQW5kVGltZWRPdXQobm9kZSkpIHtcbiAgICAgIGNoaWxkID0gZ2V0U3VzcGVuc2VGYWxsYmFja0NoaWxkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgY29sbGVjdFNjb3BlZE5vZGVzRnJvbUNoaWxkcmVuKGNoaWxkLCBmbiwgc2NvcGVkTm9kZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0Rmlyc3RTY29wZWROb2RlKG5vZGUsIGZuKSB7XG4gIGlmIChlbmFibGVTY29wZUFQSSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgdmFyIF90eXBlMiA9IG5vZGUudHlwZSxcbiAgICAgICAgICBtZW1vaXplZFByb3BzID0gbm9kZS5tZW1vaXplZFByb3BzLFxuICAgICAgICAgIHN0YXRlTm9kZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICB2YXIgX2luc3RhbmNlMiA9IGdldFB1YmxpY0luc3RhbmNlKHN0YXRlTm9kZSk7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UyICE9PSBudWxsICYmIGZuKF90eXBlMiwgbWVtb2l6ZWRQcm9wcywgX2luc3RhbmNlMikgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIF9pbnN0YW5jZTI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChpc0ZpYmVyU3VzcGVuc2VBbmRUaW1lZE91dChub2RlKSkge1xuICAgICAgY2hpbGQgPSBnZXRTdXNwZW5zZUZhbGxiYWNrQ2hpbGQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdEZpcnN0U2NvcGVkTm9kZUZyb21DaGlsZHJlbihjaGlsZCwgZm4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0U2NvcGVkTm9kZXNGcm9tQ2hpbGRyZW4oc3RhcnRpbmdDaGlsZCwgZm4sIHNjb3BlZE5vZGVzKSB7XG4gIHZhciBjaGlsZCA9IHN0YXJ0aW5nQ2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgY29sbGVjdFNjb3BlZE5vZGVzKGNoaWxkLCBmbiwgc2NvcGVkTm9kZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0Rmlyc3RTY29wZWROb2RlRnJvbUNoaWxkcmVuKHN0YXJ0aW5nQ2hpbGQsIGZuKSB7XG4gIHZhciBjaGlsZCA9IHN0YXJ0aW5nQ2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgdmFyIHNjb3BlZE5vZGUgPSBjb2xsZWN0Rmlyc3RTY29wZWROb2RlKGNoaWxkLCBmbik7XG5cbiAgICBpZiAoc2NvcGVkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNjb3BlZE5vZGU7XG4gICAgfVxuXG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3ROZWFyZXN0U2NvcGVNZXRob2RzKG5vZGUsIHNjb3BlLCBjaGlsZHJlblNjb3Blcykge1xuICBpZiAoaXNWYWxpZFNjb3BlTm9kZShub2RlLCBzY29wZSkpIHtcbiAgICBjaGlsZHJlblNjb3Blcy5wdXNoKG5vZGUuc3RhdGVOb2RlLm1ldGhvZHMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoaXNGaWJlclN1c3BlbnNlQW5kVGltZWRPdXQobm9kZSkpIHtcbiAgICAgIGNoaWxkID0gZ2V0U3VzcGVuc2VGYWxsYmFja0NoaWxkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgY29sbGVjdE5lYXJlc3RDaGlsZFNjb3BlTWV0aG9kcyhjaGlsZCwgc2NvcGUsIGNoaWxkcmVuU2NvcGVzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdE5lYXJlc3RDaGlsZFNjb3BlTWV0aG9kcyhzdGFydGluZ0NoaWxkLCBzY29wZSwgY2hpbGRyZW5TY29wZXMpIHtcbiAgdmFyIGNoaWxkID0gc3RhcnRpbmdDaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICBjb2xsZWN0TmVhcmVzdFNjb3BlTWV0aG9kcyhjaGlsZCwgc2NvcGUsIGNoaWxkcmVuU2NvcGVzKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFNjb3BlTm9kZShub2RlLCBzY29wZSkge1xuICByZXR1cm4gbm9kZS50YWcgPT09IFNjb3BlQ29tcG9uZW50ICYmIG5vZGUudHlwZSA9PT0gc2NvcGUgJiYgbm9kZS5zdGF0ZU5vZGUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNjb3BlTWV0aG9kcyhzY29wZSwgaW5zdGFuY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBnZXRDaGlsZHJlbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnRGaWJlciA9IGluc3RhbmNlLmZpYmVyO1xuICAgICAgdmFyIGNoaWxkID0gY3VycmVudEZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGNoaWxkcmVuU2NvcGVzID0gW107XG5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBjb2xsZWN0TmVhcmVzdENoaWxkU2NvcGVNZXRob2RzKGNoaWxkLCBzY29wZSwgY2hpbGRyZW5TY29wZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hpbGRyZW5TY29wZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IGNoaWxkcmVuU2NvcGVzO1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRyZW5Gcm9tUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnRGaWJlciA9IGluc3RhbmNlLmZpYmVyO1xuICAgICAgdmFyIG5vZGUgPSBjdXJyZW50RmliZXI7XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcGFyZW50O1xuXG4gICAgICAgIGlmIChub2RlLnRhZyA9PT0gU2NvcGVDb21wb25lbnQgJiYgbm9kZS50eXBlID09PSBzY29wZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZHJlblNjb3BlcyA9IFtdO1xuICAgICAgY29sbGVjdE5lYXJlc3RDaGlsZFNjb3BlTWV0aG9kcyhub2RlLmNoaWxkLCBzY29wZSwgY2hpbGRyZW5TY29wZXMpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuU2NvcGVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBjaGlsZHJlblNjb3BlcztcbiAgICB9LFxuICAgIGdldFBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5vZGUgPSBpbnN0YW5jZS5maWJlci5yZXR1cm47XG5cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnRhZyA9PT0gU2NvcGVDb21wb25lbnQgJiYgbm9kZS50eXBlID09PSBzY29wZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5tZXRob2RzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGdldFByb3BzOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY3VycmVudEZpYmVyID0gaW5zdGFuY2UuZmliZXI7XG4gICAgICByZXR1cm4gY3VycmVudEZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgfSxcbiAgICBxdWVyeUFsbE5vZGVzOiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHZhciBjdXJyZW50RmliZXIgPSBpbnN0YW5jZS5maWJlcjtcbiAgICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaWJlci5jaGlsZDtcbiAgICAgIHZhciBzY29wZWROb2RlcyA9IFtdO1xuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgY29sbGVjdFNjb3BlZE5vZGVzRnJvbUNoaWxkcmVuKGNoaWxkLCBmbiwgc2NvcGVkTm9kZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2NvcGVkTm9kZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHNjb3BlZE5vZGVzO1xuICAgIH0sXG4gICAgcXVlcnlGaXJzdE5vZGU6IGZ1bmN0aW9uIChmbikge1xuICAgICAgdmFyIGN1cnJlbnRGaWJlciA9IGluc3RhbmNlLmZpYmVyO1xuICAgICAgdmFyIGNoaWxkID0gY3VycmVudEZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3RGaXJzdFNjb3BlZE5vZGVGcm9tQ2hpbGRyZW4oY2hpbGQsIGZuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBjb250YWluc05vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgZmliZXIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlJDIobm9kZSk7XG5cbiAgICAgIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZmliZXIudGFnID09PSBTY29wZUNvbXBvbmVudCAmJiBmaWJlci50eXBlID09PSBzY29wZSAmJiBmaWJlci5zdGF0ZU5vZGUgPT09IGluc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFJlZjtcbn1cblxudmFyIGFwcGVuZEFsbENoaWxkcmVuO1xudmFyIHVwZGF0ZUhvc3RDb250YWluZXI7XG52YXIgdXBkYXRlSG9zdENvbXBvbmVudCQxO1xudmFyIHVwZGF0ZUhvc3RUZXh0JDE7XG5cbmlmIChzdXBwb3J0c011dGF0aW9uKSB7XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVGdW5kYW1lbnRhbEFQSSAmJiBub2RlLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgey8vIElmIHdlIGhhdmUgYSBwb3J0YWwgY2hpbGQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZVxuICAgICAgICAvLyBkb3duIGl0cyBjaGlsZHJlbi4gSW5zdGVhZCwgd2UnbGwgZ2V0IGluc2VydGlvbnMgZnJvbSBlYWNoIGNoaWxkIGluXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgZGlyZWN0bHkuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykgey8vIE5vb3BcbiAgfTtcblxuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgLy8gSW4gbXV0YXRpb24gbW9kZSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhIGJhaWxvdXQgYmVjYXVzZVxuICAgICAgLy8gd2Ugd29uJ3QgdG91Y2ggdGhpcyBub2RlIGV2ZW4gaWYgY2hpbGRyZW4gY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGdldCB1cGRhdGVkIGJlY2F1c2Ugb25lIG9mIG91ciBjaGlsZHJlbiB1cGRhdGVkLCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgbmV3UHJvcHMgc28gd2UnbGwgaGF2ZSB0byByZXVzZSB0aGVtLlxuICAgIC8vIFRPRE86IFNwbGl0IHRoZSB1cGRhdGUgQVBJIGFzIHNlcGFyYXRlIGZvciB0aGUgcHJvcHMgdnMuIGNoaWxkcmVuLlxuICAgIC8vIEV2ZW4gYmV0dGVyIHdvdWxkIGJlIGlmIGNoaWxkcmVuIHdlcmVuJ3Qgc3BlY2lhbCBjYXNlZCBhdCBhbGwgdGhvLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG5cbiAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IHByZXBhcmVVcGRhdGUoaW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAvLyBJZiB0aGUgdGV4dCBkaWZmZXJzLCBtYXJrIGl0IGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGluIGRvbmUgaW4gY29tbWl0V29yay5cbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufSBlbHNlIGlmIChzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gIC8vIFBlcnNpc3RlbnQgaG9zdCB0cmVlIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgIGJyYW5jaGVzOiBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSAmJiBpc0hpZGRlbikge1xuICAgICAgICAgIC8vIFRoaXMgY2hpbGQgaXMgaW5zaWRlIGEgdGltZWQgb3V0IHRyZWUuIEhpZGUgaXQuXG4gICAgICAgICAgdmFyIHByb3BzID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gbm9kZS50eXBlO1xuICAgICAgICAgIGluc3RhbmNlID0gY2xvbmVIaWRkZW5JbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAvLyBUaGlzIGNoaWxkIGlzIGluc2lkZSBhIHRpbWVkIG91dCB0cmVlLiBIaWRlIGl0LlxuICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIF9pbnN0YW5jZSA9IGNsb25lSGlkZGVuVGV4dEluc3RhbmNlKF9pbnN0YW5jZSwgdGV4dCwgbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBfaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVGdW5kYW1lbnRhbEFQSSAmJiBub2RlLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgICAgICBpZiAobmVlZHNWaXNpYmlsaXR5VG9nZ2xlICYmIGlzSGlkZGVuKSB7XG4gICAgICAgICAgLy8gVGhpcyBjaGlsZCBpcyBpbnNpZGUgYSB0aW1lZCBvdXQgdHJlZS4gSGlkZSBpdC5cbiAgICAgICAgICB2YXIgX3Byb3BzID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBfdHlwZSA9IG5vZGUudHlwZTtcbiAgICAgICAgICBfaW5zdGFuY2UyID0gY2xvbmVIaWRkZW5JbnN0YW5jZShfaW5zdGFuY2UyLCBfdHlwZSwgX3Byb3BzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIF9pbnN0YW5jZTIpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgey8vIElmIHdlIGhhdmUgYSBwb3J0YWwgY2hpbGQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZVxuICAgICAgICAvLyBkb3duIGl0cyBjaGlsZHJlbi4gSW5zdGVhZCwgd2UnbGwgZ2V0IGluc2VydGlvbnMgZnJvbSBlYWNoIGNoaWxkIGluXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgZGlyZWN0bHkuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICBpZiAoKG5vZGUuZWZmZWN0VGFnICYgVXBkYXRlKSAhPT0gTm9FZmZlY3QpIHtcbiAgICAgICAgICAvLyBOZWVkIHRvIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcHJpbWFyeSBjaGlsZHJlbi5cbiAgICAgICAgICB2YXIgbmV3SXNIaWRkZW4gPSBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAobmV3SXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBub2RlLmNoaWxkO1xuXG4gICAgICAgICAgICBpZiAocHJpbWFyeUNoaWxkUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRQYXJlbnQuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5Q2hpbGRQYXJlbnQuY2hpbGQucmV0dXJuID0gcHJpbWFyeUNoaWxkUGFyZW50O1xuICAgICAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKHBhcmVudCwgcHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlLCBuZXdJc0hpZGRlbik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZmFsbGJhY2tDaGlsZFBhcmVudCA9IHByaW1hcnlDaGlsZFBhcmVudC5zaWJsaW5nO1xuXG4gICAgICAgICAgICAgIGlmIChmYWxsYmFja0NoaWxkUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZmFsbGJhY2tDaGlsZFBhcmVudC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBmYWxsYmFja0NoaWxkUGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBDb250aW51ZSB0cmF2ZXJzaW5nIGxpa2Ugbm9ybWFsXG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vICRGbG93Rml4TWUgVGhpcyBpcyBjb3JyZWN0IGJ1dCBGbG93IGlzIGNvbmZ1c2VkIGJ5IHRoZSBsYWJlbGVkIGJyZWFrLlxuXG5cbiAgICAgIG5vZGUgPSBub2RlO1xuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9OyAvLyBBbiB1bmZvcnR1bmF0ZSBmb3JrIG9mIGFwcGVuZEFsbENoaWxkcmVuIGJlY2F1c2Ugd2UgaGF2ZSB0d28gZGlmZmVyZW50IHBhcmVudCB0eXBlcy5cblxuXG4gIHZhciBhcHBlbmRBbGxDaGlsZHJlblRvQ29udGFpbmVyID0gZnVuY3Rpb24gKGNvbnRhaW5lckNoaWxkU2V0LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgIGJyYW5jaGVzOiBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSAmJiBpc0hpZGRlbikge1xuICAgICAgICAgIC8vIFRoaXMgY2hpbGQgaXMgaW5zaWRlIGEgdGltZWQgb3V0IHRyZWUuIEhpZGUgaXQuXG4gICAgICAgICAgdmFyIHByb3BzID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gbm9kZS50eXBlO1xuICAgICAgICAgIGluc3RhbmNlID0gY2xvbmVIaWRkZW5JbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lckNoaWxkU2V0KGNvbnRhaW5lckNoaWxkU2V0LCBpbnN0YW5jZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAvLyBUaGlzIGNoaWxkIGlzIGluc2lkZSBhIHRpbWVkIG91dCB0cmVlLiBIaWRlIGl0LlxuICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIF9pbnN0YW5jZTMgPSBjbG9uZUhpZGRlblRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCB0ZXh0LCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXJDaGlsZFNldChjb250YWluZXJDaGlsZFNldCwgX2luc3RhbmNlMyk7XG4gICAgICB9IGVsc2UgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJICYmIG5vZGUudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlNCA9IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgICAgIGlmIChuZWVkc1Zpc2liaWxpdHlUb2dnbGUgJiYgaXNIaWRkZW4pIHtcbiAgICAgICAgICAvLyBUaGlzIGNoaWxkIGlzIGluc2lkZSBhIHRpbWVkIG91dCB0cmVlLiBIaWRlIGl0LlxuICAgICAgICAgIHZhciBfcHJvcHMyID0gbm9kZS5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBfdHlwZTIgPSBub2RlLnR5cGU7XG4gICAgICAgICAgX2luc3RhbmNlNCA9IGNsb25lSGlkZGVuSW5zdGFuY2UoX2luc3RhbmNlNCwgX3R5cGUyLCBfcHJvcHMyLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXJDaGlsZFNldChjb250YWluZXJDaGlsZFNldCwgX2luc3RhbmNlNCk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7Ly8gSWYgd2UgaGF2ZSBhIHBvcnRhbCBjaGlsZCwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIHRyYXZlcnNlXG4gICAgICAgIC8vIGRvd24gaXRzIGNoaWxkcmVuLiBJbnN0ZWFkLCB3ZSdsbCBnZXQgaW5zZXJ0aW9ucyBmcm9tIGVhY2ggY2hpbGQgaW5cbiAgICAgICAgLy8gdGhlIHBvcnRhbCBkaXJlY3RseS5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICgobm9kZS5lZmZlY3RUYWcgJiBVcGRhdGUpICE9PSBOb0VmZmVjdCkge1xuICAgICAgICAgIC8vIE5lZWQgdG8gdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwcmltYXJ5IGNoaWxkcmVuLlxuICAgICAgICAgIHZhciBuZXdJc0hpZGRlbiA9IG5vZGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChuZXdJc0hpZGRlbikge1xuICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IG5vZGUuY2hpbGQ7XG5cbiAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZFBhcmVudC5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHByaW1hcnlDaGlsZFBhcmVudC5jaGlsZC5yZXR1cm4gPSBwcmltYXJ5Q2hpbGRQYXJlbnQ7XG4gICAgICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihjb250YWluZXJDaGlsZFNldCwgcHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlLCBuZXdJc0hpZGRlbik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZmFsbGJhY2tDaGlsZFBhcmVudCA9IHByaW1hcnlDaGlsZFBhcmVudC5zaWJsaW5nO1xuXG4gICAgICAgICAgICAgIGlmIChmYWxsYmFja0NoaWxkUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZmFsbGJhY2tDaGlsZFBhcmVudC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBmYWxsYmFja0NoaWxkUGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBDb250aW51ZSB0cmF2ZXJzaW5nIGxpa2Ugbm9ybWFsXG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vICRGbG93Rml4TWUgVGhpcyBpcyBjb3JyZWN0IGJ1dCBGbG93IGlzIGNvbmZ1c2VkIGJ5IHRoZSBsYWJlbGVkIGJyZWFrLlxuXG5cbiAgICAgIG5vZGUgPSBub2RlO1xuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHtcbiAgICB2YXIgcG9ydGFsT3JSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZHJlblVuY2hhbmdlZCA9IHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID09PSBudWxsO1xuXG4gICAgaWYgKGNoaWxkcmVuVW5jaGFuZ2VkKSB7Ly8gTm8gY2hhbmdlcywganVzdCByZXVzZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250YWluZXIgPSBwb3J0YWxPclJvb3QuY29udGFpbmVySW5mbztcbiAgICAgIHZhciBuZXdDaGlsZFNldCA9IGNyZWF0ZUNvbnRhaW5lckNoaWxkU2V0KGNvbnRhaW5lcik7IC8vIElmIGNoaWxkcmVuIG1pZ2h0IGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byBhZGQgdGhlbSBhbGwgdG8gdGhlIHNldC5cblxuICAgICAgYXBwZW5kQWxsQ2hpbGRyZW5Ub0NvbnRhaW5lcihuZXdDaGlsZFNldCwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBwb3J0YWxPclJvb3QucGVuZGluZ0NoaWxkcmVuID0gbmV3Q2hpbGRTZXQ7IC8vIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGUgY29udGFpbmVyIHRvIHN3YXAgb3V0IHRoZSBjb250YWluZXIuXG5cbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgZmluYWxpemVDb250YWluZXJDaGlsZHJlbihjb250YWluZXIsIG5ld0NoaWxkU2V0KTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgdmFyIGN1cnJlbnRJbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgdGhlcmUgYXJlIG5vIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZSwgdGhlbiBub25lIG9mIG91ciBjaGlsZHJlbiBoYWQgYW55IHVwZGF0ZXMuXG4gICAgLy8gVGhpcyBndWFyYW50ZWVzIHRoYXQgd2UgY2FuIHJldXNlIGFsbCBvZiB0aGVtLlxuXG4gICAgdmFyIGNoaWxkcmVuVW5jaGFuZ2VkID0gd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPT09IG51bGw7XG5cbiAgICBpZiAoY2hpbGRyZW5VbmNoYW5nZWQgJiYgb2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzLCBqdXN0IHJldXNlIHRoZSBleGlzdGluZyBpbnN0YW5jZS5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IHJlbGVhc2UgYSBwcmV2aW91cyBjbG9uZS5cbiAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmVjeWNsYWJsZUluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMpIHtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKHJlY3ljbGFibGVJbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuVW5jaGFuZ2VkICYmIHVwZGF0ZVBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgIC8vIE5vIGNoYW5nZXMsIGp1c3QgcmV1c2UgdGhlIGV4aXN0aW5nIGluc3RhbmNlLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWlnaHQgcmVsZWFzZSBhIHByZXZpb3VzIGNsb25lLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXdJbnN0YW5jZSA9IGNsb25lSW5zdGFuY2UoY3VycmVudEluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHdvcmtJblByb2dyZXNzLCBjaGlsZHJlblVuY2hhbmdlZCwgcmVjeWNsYWJsZUluc3RhbmNlKTtcblxuICAgIGlmIChmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihuZXdJbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KSkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV3SW5zdGFuY2U7XG5cbiAgICBpZiAoY2hpbGRyZW5VbmNoYW5nZWQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvdGhlciBlZmZlY3RzIGluIHRoaXMgdHJlZSwgd2UgbmVlZCB0byBmbGFnIHRoaXMgbm9kZSBhcyBoYXZpbmcgb25lLlxuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdCBmb3IgYW55dGhpbmcuXG4gICAgICAvLyBPdGhlcndpc2UgcGFyZW50cyB3b24ndCBrbm93IHRoYXQgdGhlcmUgYXJlIG5ldyBjaGlsZHJlbiB0byBwcm9wYWdhdGUgdXB3YXJkcy5cbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBjaGlsZHJlbiBtaWdodCBoYXZlIGNoYW5nZWQsIHdlIGhhdmUgdG8gYWRkIHRoZW0gYWxsIHRvIHRoZSBzZXQuXG4gICAgICBhcHBlbmRBbGxDaGlsZHJlbihuZXdJbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgLy8gSWYgdGhlIHRleHQgY29udGVudCBkaWZmZXJzLCB3ZSdsbCBjcmVhdGUgYSBuZXcgdGV4dCBpbnN0YW5jZSBmb3IgaXQuXG4gICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIFdlJ2xsIGhhdmUgdG8gbWFyayBpdCBhcyBoYXZpbmcgYW4gZWZmZWN0LCBldmVuIHRob3VnaCB3ZSB3b24ndCB1c2UgdGhlIGVmZmVjdCBmb3IgYW55dGhpbmcuXG4gICAgICAvLyBUaGlzIGxldHMgdGhlIHBhcmVudHMga25vdyB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGVpciBjaGlsZHJlbiBoYXMgY2hhbmdlZC5cblxuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gTm8gaG9zdCBvcGVyYXRpb25zXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHsvLyBOb29wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIHRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIF90YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKF90YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUgPSBfdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RhaWxOb2RlID0gX3RhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgaWYgKCFoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgJiYgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgLy8gcm93IGF0IHRoZSB0YWlsLiBTbyB3ZSdsbCBrZWVwIG9uIGFuZCBjdXQgb2ZmIHRoZSByZXN0LlxuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgIGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCB0aGVuIHdlJ2xsIG5lZWQgdG8gc2NoZWR1bGUgYW4gdXBkYXRlIGZvclxuICAgICAgICAgICAgLy8gdGhlIGNvbW1pdCBzaWRlLWVmZmVjdHMgb24gdGhlIHJvb3QuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoZW5hYmxlRmxhcmVBUEkpIHtcbiAgICAgICAgICAgIHZhciBwcmV2TGlzdGVuZXJzID0gY3VycmVudC5tZW1vaXplZFByb3BzLmxpc3RlbmVycztcbiAgICAgICAgICAgIHZhciBuZXh0TGlzdGVuZXJzID0gbmV3UHJvcHMubGlzdGVuZXJzO1xuXG4gICAgICAgICAgICBpZiAocHJldkxpc3RlbmVycyAhPT0gbmV4dExpc3RlbmVycykge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3ZSB3YW50IHRvIGFkZCB0aGVuIHRvcC0+ZG93biBvclxuICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgLy8gdG8gY29uc29saWRhdGUuXG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNoYW5nZXMgdG8gdGhlIGh5ZHJhdGVkIG5vZGUgbmVlZHMgdG8gYmUgYXBwbGllZCBhdCB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0LXBoYXNlIHdlIG1hcmsgdGhpcyBhcyBzdWNoLlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBuZXdQcm9wcy5saXN0ZW5lcnM7XG5cbiAgICAgICAgICAgICAgaWYgKGxpc3RlbmVycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRXZlbnRMaXN0ZW5lcnMobGlzdGVuZXJzLCB3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIGZhbHNlKTsgLy8gVGhpcyBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHdlIG1vdW50IEZsYXJlIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgICAgICAgICAgIHZhciBfbGlzdGVuZXJzID0gbmV3UHJvcHMubGlzdGVuZXJzO1xuXG4gICAgICAgICAgICAgIGlmIChfbGlzdGVuZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVFdmVudExpc3RlbmVycyhfbGlzdGVuZXJzLCB3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuXG4gICAgICAgICAgdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICAgICAgICBpZiAobmV4dFN0YXRlICE9PSBudWxsICYmIG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMyA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgICAgICBpZiAoIV93YXNIeWRyYXRlZDMpIHtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RTdXNwZW5zZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgICAgICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhOZXZlcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGJlZW4gaW4gYSBoeWRyYXRpb24gc3RhdGUgaWYgd2UgZGlkbid0IGhhdmUgYSBjdXJyZW50LlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCBpbiBzb21lIG9mIHRob3NlIHBhdGhzLCB3ZSBtaWdodCBoYXZlIHJlZW50ZXJlZCBhIGh5ZHJhdGlvbiBzdGF0ZVxuICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB3ZSBtaWdodCBiZSBpbnNpZGUgYSBoeWRyYXRpb24gc3RhdGUuIEluIHRoYXQgY2FzZSwgd2UnbGwgbmVlZCB0b1xuICAgICAgICAgICAgICAvLyBleGl0IG91dCBvZiBpdC5cbiAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgPT09IE5vRWZmZWN0KSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBib3VuZGFyeSBkaWQgbm90IHN1c3BlbmQgc28gaXQncyBub3cgaHlkcmF0ZWQgYW5kIHVuc3VzcGVuZGVkLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBtYXJrIHRoaXMgYm91bmRhcnlcbiAgICAgICAgICAgICAgLy8gYXMgaGF2aW5nIGh5ZHJhdGVkIHNvIGV2ZW50cyBrbm93IHRoYXQgdGhleSdyZSBmcmVlIGJlIGludm9rZWQuXG4gICAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBhIHNpZ25hbCB0byByZXBsYXkgZXZlbnRzIGFuZCB0aGUgc3VzcGVuc2UgY2FsbGJhY2suXG4gICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggcmV0cnkgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSBtaWdodCBhcyB3ZWxsIGFsd2F5cyBtYXJrIHRoaXMuXG5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyAmIERpZENhcHR1cmUpICE9PSBOb0VmZmVjdCkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBwcmV2RGlkVGltZW91dCA9IHByZXZTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmICghbmV4dERpZFRpbWVvdXQgJiYgcHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBqdXN0IHN3aXRjaGVkIGZyb20gdGhlIGZhbGxiYWNrIHRvIHRoZSBub3JtYWwgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrLlxuICAgICAgICAgICAgLy8gVE9ETzogV291bGQgaXQgYmUgYmV0dGVyIHRvIHN0b3JlIHRoZSBmYWxsYmFjayBmcmFnbWVudCBvblxuICAgICAgICAgICAgLy8gdGhlIHN0YXRlTm9kZSBkdXJpbmcgdGhlIGJlZ2luIHBoYXNlP1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkID0gY3VycmVudC5jaGlsZC5zaWJsaW5nO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gRGVsZXRpb25zIGdvIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0XG4gICAgICAgICAgICAgIHZhciBmaXJzdCA9IHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICAgIGlmIChmaXJzdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGQ7XG4gICAgICAgICAgICAgICAgY3VycmVudEZhbGxiYWNrQ2hpbGQubmV4dEVmZmVjdCA9IGZpcnN0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkLm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3VycmVudEZhbGxiYWNrQ2hpbGQuZWZmZWN0VGFnID0gRGVsZXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIG5vdCBwcmV2RGlkVGltZW91dC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb2ltc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0c011dGF0aW9uKSB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIHRoZXNlIHZhbHVlcyBhcmUgbm9uIGVxdWFsLCBpLmUuIGl0IGNoYW5nZWQuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0IHx8IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIGFcbiAgICAgICAgICAgIC8vIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9pbXNlLiBUaGlzIGZsYWcgaXMgYWxzbyB1c2VkIHRvIGhpZGUgdGhlXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuLiBJbiBtdXRhdGlvbiBtb2RlLCB3ZSBhbHNvIG5lZWQgdGhlIGZsYWcgdG9cbiAgICAgICAgICAgIC8vICp1bmhpZGUqIGNoaWxkcmVuIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhpZGRlbiwgc28gY2hlY2sgaWYgdGhlXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVTdXNwZW5zZUNhbGxiYWNrICYmIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuc3VzcGVuc2VDYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQWx3YXlzIG5vdGlmeSB0aGUgY2FsbGJhY2tcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE1vZGU6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLiBXZSBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSAhPT0gTm9FZmZlY3Q7XG4gICAgICAgIHZhciByZW5kZXJlZFRhaWwgPSByZW5kZXJTdGF0ZS5yZW5kZXJpbmc7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgIC8vIElmIG5ldyBjb250ZW50IHVuc3VzcGVuZGVkLCBidXQgdGhlcmUncyBzdGlsbCBzb21lIGNvbnRlbnQgdGhhdFxuICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmUgc3VzcGVuZGVkIGlmIHNvbWV0aGluZyBpbiB0aGlzIHJlbmRlciBwYXNzIHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgIC8vIGZpbmRGaXJzdFN1c3BlbmRlZC5cbiAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9IHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmIChjdXJyZW50ID09PSBudWxsIHx8IChjdXJyZW50LmVmZmVjdFRhZyAmIERpZENhcHR1cmUpID09PSBOb0VmZmVjdCk7XG5cbiAgICAgICAgICAgIGlmICghY2Fubm90QmVTdXNwZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVubmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbm5hYmxlcyB0byB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGFueXdheSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtZWFudGltZSwgd2UgY2FuIGFkZC9yZW1vdmUvY2hhbmdlIGl0ZW1zIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyB3ZSBkaWQgZmluZCBhbHJlYWR5IGhhcyB0aGVpciBsaXN0ZW5lcnMgYXR0YWNoZWQuXG5cbiAgICAgICAgICAgICAgICAgIHZhciBuZXdUaGVubmFibGVzID0gc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZSB0YWlsLlxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgdmFyIF9zdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmVuZGVyZWRUYWlsKTtcblxuICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgdGhlIHJvdyB3ZSBqdXN0IHJlbmRlcmVkLlxuICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgcmVuZGVyZWQgdGhpc1xuICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlbW92ZSBhbnkgZWZmZWN0cyB0aGF0IHdlcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludC5cblxuICAgICAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gLy8gV2UncmUgZG9uZS5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm93KCkgPiByZW5kZXJTdGF0ZS50YWlsRXhwaXJhdGlvbiAmJiByZW5kZXJFeHBpcmF0aW9uVGltZSA+IE5ldmVyKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gSWYgd2UgY2FuIHNob3dcbiAgICAgICAgICAgICAgLy8gdGhlbSwgdGhlbiB0aGV5IHJlYWxseSBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgcmVuZGVyLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBwaWNrIGl0IGJhY2sgdXAgdGhlIHZlcnkgbmV4dCByZW5kZXIgcGFzcyBvbmNlIHdlJ3ZlIGhhZFxuICAgICAgICAgICAgICAvLyBhbiBvcHBvcnR1bml0eSB0byB5aWVsZCBmb3IgcGFpbnQuXG5cbiAgICAgICAgICAgICAgdmFyIG5leHRQcmlvcml0eSA9IHJlbmRlckV4cGlyYXRpb25UaW1lIC0gMTtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZEV4cGlyYXRpb25UaW1lID0gbmV4dFByaW9yaXR5O1xuXG4gICAgICAgICAgICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKG5leHRQcmlvcml0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbEV4cGlyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIC8vIEhldXJpc3RpYyBmb3IgaG93IGxvbmcgd2UncmUgd2lsbGluZyB0byBzcGVuZCByZW5kZXJpbmcgcm93c1xuICAgICAgICAgICAgLy8gdW50aWwgd2UganVzdCBnaXZlIHVwIGFuZCBzaG93IHdoYXQgd2UgaGF2ZSBzbyBmYXIuXG4gICAgICAgICAgICB2YXIgVEFJTF9FWFBJUkFUSU9OX1RJTUVPVVRfTVMgPSA1MDA7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsRXhwaXJhdGlvbiA9IG5vdygpICsgVEFJTF9FWFBJUkFUSU9OX1RJTUVPVVRfTVM7XG4gICAgICAgICAgfSAvLyBQb3AgYSByb3cuXG5cblxuICAgICAgICAgIHZhciBuZXh0ID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkganVzdCBhdm9pZCBwb3BwaW5nIGl0IGluc3RlYWQgYW5kIG9ubHlcbiAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBEbyBhIHBhc3Mgb3ZlciB0aGUgbmV4dCByb3cuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJKSB7XG4gICAgICAgICAgdmFyIGZ1bmRhbWVudGFsSW1wbCA9IHdvcmtJblByb2dyZXNzLnR5cGUuaW1wbDtcbiAgICAgICAgICB2YXIgZnVuZGFtZW50YWxJbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChmdW5kYW1lbnRhbEluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZ2V0SW5pdGlhbFN0YXRlID0gZnVuZGFtZW50YWxJbXBsLmdldEluaXRpYWxTdGF0ZTtcbiAgICAgICAgICAgIHZhciBmdW5kYW1lbnRhbFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoZ2V0SW5pdGlhbFN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZnVuZGFtZW50YWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZShuZXdQcm9wcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmRhbWVudGFsSW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVGdW5kYW1lbnRhbFN0YXRlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBmdW5kYW1lbnRhbEltcGwsIGZ1bmRhbWVudGFsU3RhdGUgfHwge30pO1xuXG4gICAgICAgICAgICB2YXIgX2luc3RhbmNlNSA9IGdldEZ1bmRhbWVudGFsQ29tcG9uZW50SW5zdGFuY2UoZnVuZGFtZW50YWxJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGZ1bmRhbWVudGFsSW5zdGFuY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2U1O1xuXG4gICAgICAgICAgICBpZiAoZnVuZGFtZW50YWxJbXBsLnJlY29uY2lsZUNoaWxkcmVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oX2luc3RhbmNlNSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICBtb3VudEZ1bmRhbWVudGFsQ29tcG9uZW50KGZ1bmRhbWVudGFsSW5zdGFuY2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXZSBmaXJlIHVwZGF0ZSBpbiBjb21taXQgcGhhc2VcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBmdW5kYW1lbnRhbEluc3RhbmNlLnByb3BzO1xuICAgICAgICAgICAgZnVuZGFtZW50YWxJbnN0YW5jZS5wcmV2UHJvcHMgPSBwcmV2UHJvcHM7XG4gICAgICAgICAgICBmdW5kYW1lbnRhbEluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gICAgICAgICAgICBmdW5kYW1lbnRhbEluc3RhbmNlLmN1cnJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNQZXJzaXN0ZW5jZSkge1xuICAgICAgICAgICAgICB2YXIgX2luc3RhbmNlNiA9IGNsb25lRnVuZGFtZW50YWxJbnN0YW5jZShmdW5kYW1lbnRhbEluc3RhbmNlKTtcblxuICAgICAgICAgICAgICBmdW5kYW1lbnRhbEluc3RhbmNlLmluc3RhbmNlID0gX2luc3RhbmNlNjtcbiAgICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oX2luc3RhbmNlNiwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzaG91bGRVcGRhdGUgPSBzaG91bGRVcGRhdGVGdW5kYW1lbnRhbENvbXBvbmVudChmdW5kYW1lbnRhbEluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChlbmFibGVTY29wZUFQSSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgX3R5cGUzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICAgIHZhciBzY29wZUluc3RhbmNlID0ge1xuICAgICAgICAgICAgICBmaWJlcjogd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIG1ldGhvZHM6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBzY29wZUluc3RhbmNlO1xuICAgICAgICAgICAgc2NvcGVJbnN0YW5jZS5tZXRob2RzID0gY3JlYXRlU2NvcGVNZXRob2RzKF90eXBlMywgc2NvcGVJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGlmIChlbmFibGVGbGFyZUFQSSkge1xuICAgICAgICAgICAgICB2YXIgX2xpc3RlbmVyczIgPSBuZXdQcm9wcy5saXN0ZW5lcnM7XG5cbiAgICAgICAgICAgICAgaWYgKF9saXN0ZW5lcnMyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZTIgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlRXZlbnRMaXN0ZW5lcnMoX2xpc3RlbmVyczIsIHdvcmtJblByb2dyZXNzLCBfcm9vdENvbnRhaW5lckluc3RhbmNlMik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVuYWJsZUZsYXJlQVBJKSB7XG4gICAgICAgICAgICAgIHZhciBfcHJldkxpc3RlbmVycyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcy5saXN0ZW5lcnM7XG4gICAgICAgICAgICAgIHZhciBfbmV4dExpc3RlbmVycyA9IG5ld1Byb3BzLmxpc3RlbmVycztcblxuICAgICAgICAgICAgICBpZiAoX3ByZXZMaXN0ZW5lcnMgIT09IF9uZXh0TGlzdGVuZXJzIHx8IHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWZmZWN0VGFnID0gd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnO1xuXG4gICAgICAgIGlmIChlZmZlY3RUYWcgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gZWZmZWN0VGFnICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBfZWZmZWN0VGFnID0gd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnO1xuXG4gICAgICAgIGlmICghKChfZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgPT09IE5vRWZmZWN0KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gX2VmZmVjdFRhZyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoZW5hYmxlU3VzcGVuc2VTZXJ2ZXJSZW5kZXJlcikge1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2VmZmVjdFRhZzIgPSB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWc7XG5cbiAgICAgICAgaWYgKF9lZmZlY3RUYWcyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyA9IF9lZmZlY3RUYWcyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZSkge1xuICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgLy8gc28gdGhlIHN0YWNrIGlzIGFjY3VyYXRlLlxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coY2FwdHVyZWRFcnJvcikge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihjYXB0dXJlZEVycm9yKSB7XG4gIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhjYXB0dXJlZEVycm9yKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXJyb3IgPSBjYXB0dXJlZEVycm9yLmVycm9yO1xuXG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNhcHR1cmVkRXJyb3IuY29tcG9uZW50TmFtZSxcbiAgICAgICAgY29tcG9uZW50U3RhY2sgPSBjYXB0dXJlZEVycm9yLmNvbXBvbmVudFN0YWNrLFxuICAgICAgICBlcnJvckJvdW5kYXJ5TmFtZSA9IGNhcHR1cmVkRXJyb3IuZXJyb3JCb3VuZGFyeU5hbWUsXG4gICAgICAgIGVycm9yQm91bmRhcnlGb3VuZCA9IGNhcHR1cmVkRXJyb3IuZXJyb3JCb3VuZGFyeUZvdW5kLFxuICAgICAgICB3aWxsUmV0cnkgPSBjYXB0dXJlZEVycm9yLndpbGxSZXRyeTsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgIGlmIChlcnJvckJvdW5kYXJ5Rm91bmQgJiYgd2lsbFJldHJ5KSB7XG4gICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgIH1cblxuICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQ6XCIgOiAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHM6JztcbiAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7IC8vIGVycm9yQm91bmRhcnlGb3VuZCBjaGVjayBpcyBzdWZmaWNpZW50OyBlcnJvckJvdW5kYXJ5TmFtZSBjaGVjayBpcyB0byBzYXRpc2Z5IEZsb3cuXG5cbiAgICBpZiAoZXJyb3JCb3VuZGFyeUZvdW5kICYmIGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICBpZiAod2lsbFJldHJ5KSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IFwiVGhpcyBlcnJvciB3YXMgaW5pdGlhbGx5IGhhbmRsZWQgYnkgdGhlIGVycm9yIGJvdW5kYXJ5IFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cXG5cIiArIFwiUmVjcmVhdGluZyB0aGUgdHJlZSBmcm9tIHNjcmF0Y2ggZmFpbGVkIHNvIFJlYWN0IHdpbGwgdW5tb3VudCB0aGUgdHJlZS5cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuJyArICdWaXNpdCBodHRwczovL2ZiLm1lL3JlYWN0LWVycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgfVxuXG4gICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IFwiXCIgKyBjb21wb25lbnROYW1lTWVzc2FnZSArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgIGNvbnNvbGUuZXJyb3IoY29tYmluZWRNZXNzYWdlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuXG57XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xufVxuXG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xuZnVuY3Rpb24gbG9nRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuXG4gIGlmIChzdGFjayA9PT0gbnVsbCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICBzdGFjayA9IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVkRXJyb3IgPSB7XG4gICAgY29tcG9uZW50TmFtZTogc291cmNlICE9PSBudWxsID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsLFxuICAgIGNvbXBvbmVudFN0YWNrOiBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJycsXG4gICAgZXJyb3I6IGVycm9ySW5mby52YWx1ZSxcbiAgICBlcnJvckJvdW5kYXJ5OiBudWxsLFxuICAgIGVycm9yQm91bmRhcnlOYW1lOiBudWxsLFxuICAgIGVycm9yQm91bmRhcnlGb3VuZDogZmFsc2UsXG4gICAgd2lsbFJldHJ5OiBmYWxzZVxuICB9O1xuXG4gIGlmIChib3VuZGFyeSAhPT0gbnVsbCAmJiBib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgY2FwdHVyZWRFcnJvci5lcnJvckJvdW5kYXJ5ID0gYm91bmRhcnkuc3RhdGVOb2RlO1xuICAgIGNhcHR1cmVkRXJyb3IuZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lKGJvdW5kYXJ5LnR5cGUpO1xuICAgIGNhcHR1cmVkRXJyb3IuZXJyb3JCb3VuZGFyeUZvdW5kID0gdHJ1ZTtcbiAgICBjYXB0dXJlZEVycm9yLndpbGxSZXRyeSA9IHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoY2FwdHVyZWRFcnJvcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQkJDEsIGluc3RhbmNlKSB7XG4gIHN0YXJ0UGhhc2VUaW1lcihjdXJyZW50JCQxLCAnY29tcG9uZW50V2lsbFVubW91bnQnKTtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudCQkMS5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICBzdG9wUGhhc2VUaW1lcigpO1xufTsgLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCQkMSwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQkJDEsIGluc3RhbmNlKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgdW5tb3VudEVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCQkMSwgdW5tb3VudEVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQkJDEpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQkJDEucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgcmVmLCBudWxsLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50JCQxLCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50JCQxLCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCQkMSwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCQkMSwgZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3QoVW5tb3VudFNuYXBzaG90LCBOb0VmZmVjdCQxLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmVmZmVjdFRhZyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudCQkMS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgc3RhcnRQaGFzZVRpbWVyKGZpbmlzaGVkV29yaywgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlJyk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgICEoaW5zdGFuY2UucHJvcHMgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJykgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgIShpbnN0YW5jZS5zdGF0ZSA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpID8gd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gcHJldlByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSwgcHJldlN0YXRlKTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgIGlmIChzbmFwc2hvdCA9PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuU2V0LmFkZChmaW5pc2hlZFdvcmsudHlwZSk7XG4gICAgICAgICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgJyArICdtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICAgICAgICBzdG9wUGhhc2VUaW1lcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3QodW5tb3VudFRhZywgbW91bnRUYWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB1bm1vdW50VGFnKSAhPT0gTm9FZmZlY3QkMSkge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKChlZmZlY3QudGFnICYgbW91bnRUYWcpICE9PSBOb0VmZmVjdCQxKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Rlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcblxuICAgICAgICAgIGlmIChfZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBfZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoX2Rlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfZGVzdHJveS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJ1xcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIHVzZUVmZmVjdChhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArICd1c2VFZmZlY3QoKCkgPT4ge1xcbicgKyAnICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuJyArICcgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuJyArICcgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuJyArICcgICAgLy8gLi4uXFxuJyArICcgIH1cXG4nICsgJyAgZmV0Y2hEYXRhKCk7XFxuJyArIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgKyAnTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vZmIubWUvcmVhY3QtaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgX2Rlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJXMnLCBhZGRlbmR1bSwgZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGZpbmlzaGVkV29yaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlSG9va0VmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIGlmICgoZmluaXNoZWRXb3JrLmVmZmVjdFRhZyAmIFBhc3NpdmUpICE9PSBOb0VmZmVjdCkge1xuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0KFVubW91bnRQYXNzaXZlLCBOb0VmZmVjdCQxLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0KE5vRWZmZWN0JDEsIE1vdW50UGFzc2l2ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQkJDEsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkRXhwaXJhdGlvblRpbWUpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdChVbm1vdW50TGF5b3V0LCBNb3VudExheW91dCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZWZmZWN0VGFnICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQkJDEgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0UGhhc2VUaW1lcihmaW5pc2hlZFdvcmssICdjb21wb25lbnREaWRNb3VudCcpOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgICEoaW5zdGFuY2UucHJvcHMgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJykgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgIShpbnN0YW5jZS5zdGF0ZSA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpID8gd2FybmluZyQxKGZhbHNlLCAnRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgc3RvcFBoYXNlVGltZXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQkJDEubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHN0YXJ0UGhhc2VUaW1lcihmaW5pc2hlZFdvcmssICdjb21wb25lbnREaWRVcGRhdGUnKTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAhKGluc3RhbmNlLnByb3BzID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAhKGluc3RhbmNlLnN0YXRlID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIHN0b3BQaGFzZVRpbWVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICEoaW5zdGFuY2UucHJvcHMgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSA/IHdhcm5pbmckMShmYWxzZSwgJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpIDogdm9pZCAwO1xuICAgICAgICAgICAgICAhKGluc3RhbmNlLnN0YXRlID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgPyB3YXJuaW5nJDEoZmFsc2UsICdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlLCBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCQkMSA9PT0gbnVsbCAmJiBmaW5pc2hlZFdvcmsuZWZmZWN0VGFnICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcywgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggcG9ydGFscy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgICB2YXIgb25SZW5kZXIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5vblJlbmRlcjtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50JCQxID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBnZXRDb21taXRUaW1lKCksIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCQkMSA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgZ2V0Q29tbWl0VGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIGlmIChzdXBwb3J0c011dGF0aW9uKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgU3VzcGVuc2UgY29tcG9uZW50IHRoYXQgdGltZWQgb3V0LiBTa2lwIG92ZXIgdGhlXG4gICAgICAgIC8vIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQsIHdoaWNoIHNob3VsZCByZW1haW4gaGlkZGVuLlxuICAgICAgICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gbm9kZS5jaGlsZC5zaWJsaW5nO1xuICAgICAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuXG4gICAgaWYgKGVuYWJsZVNjb3BlQVBJICYmIGZpbmlzaGVkV29yay50YWcgPT09IFNjb3BlQ29tcG9uZW50KSB7XG4gICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2UubWV0aG9kcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLiVzJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSksIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChmaW5pc2hlZFdvcmspKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERldGFjaFJlZihjdXJyZW50JCQxKSB7XG4gIHZhciBjdXJyZW50UmVmID0gY3VycmVudCQkMS5yZWY7XG5cbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59IC8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5cblxuZnVuY3Rpb24gY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIGN1cnJlbnQkJDEsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQkJDEpO1xuXG4gIHN3aXRjaCAoY3VycmVudCQkMS50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50JCQxLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7IC8vIFdoZW4gdGhlIG93bmVyIGZpYmVyIGlzIGRlbGV0ZWQsIHRoZSBkZXN0cm95IGZ1bmN0aW9uIG9mIGEgcGFzc2l2ZVxuICAgICAgICAgICAgLy8gZWZmZWN0IGhvb2sgaXMgY2FsbGVkIGR1cmluZyB0aGUgc3luY2hyb25vdXMgY29tbWl0IHBoYXNlLiBUaGlzIGlzXG4gICAgICAgICAgICAvLyBhIGNvbmNlc3Npb24gdG8gaW1wbGVtZW50YXRpb24gY29tcGxleGl0eS4gQ2FsbGluZyBpdCBpbiB0aGVcbiAgICAgICAgICAgIC8vIHBhc3NpdmUgZWZmZWN0IHBoYXNlIChsaWtlIHRoZXkgdXN1YWxseSBhcmUsIHdoZW4gZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAvLyBjaGFuZ2UgZHVyaW5nIGFuIHVwZGF0ZSkgd291bGQgcmVxdWlyZSBlaXRoZXIgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAgIC8vIGNoaWxkcmVuIG9mIHRoZSBkZWxldGVkIGZpYmVyIGFnYWluLCBvciBpbmNsdWRpbmcgdW5tb3VudCBlZmZlY3RzXG4gICAgICAgICAgICAvLyBhcyBwYXJ0IG9mIHRoZSBmaWJlciBlZmZlY3QgbGlzdC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHRoaXMgaXMgZHVyaW5nIHRoZSBzeW5jIGNvbW1pdCBwaGFzZSwgd2UgbmVlZCB0byBjaGFuZ2VcbiAgICAgICAgICAgIC8vIHRoZSBwcmlvcml0eS5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUT0RPOiBSZWNvbnNpZGVyIHRoaXMgaW1wbGVtZW50YXRpb24gdHJhZGUgb2ZmLlxuXG4gICAgICAgICAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlbmRlclByaW9yaXR5TGV2ZWwgPiBOb3JtYWxQcmlvcml0eSA/IE5vcm1hbFByaW9yaXR5IDogcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgIHJ1bldpdGhQcmlvcml0eSQyKHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCQkMSwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCQkMSk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQkJDEuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCQkMSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlRmxhcmVBUEkpIHtcbiAgICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gY3VycmVudCQkMS5kZXBlbmRlbmNpZXM7XG5cbiAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uZGVyc01hcCA9IGRlcGVuZGVuY2llcy5yZXNwb25kZXJzO1xuXG4gICAgICAgICAgICBpZiAocmVzcG9uZGVyc01hcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uZGVySW5zdGFuY2VzID0gQXJyYXkuZnJvbShyZXNwb25kZXJzTWFwLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzcG9uZGVySW5zdGFuY2VzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbmRlckluc3RhbmNlID0gcmVzcG9uZGVySW5zdGFuY2VzW2ldO1xuICAgICAgICAgICAgICAgIHVubW91bnRSZXNwb25kZXJJbnN0YW5jZShyZXNwb25kZXJJbnN0YW5jZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucmVzcG9uZGVycyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQkJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAgaWYgKHN1cHBvcnRzTXV0YXRpb24pIHtcbiAgICAgICAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50JCQxLCByZW5kZXJQcmlvcml0eUxldmVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gICAgICAgICAgZW1wdHlQb3J0YWxDb250YWluZXIoY3VycmVudCQkMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZW5hYmxlRnVuZGFtZW50YWxBUEkpIHtcbiAgICAgICAgICB2YXIgZnVuZGFtZW50YWxJbnN0YW5jZSA9IGN1cnJlbnQkJDEuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKGZ1bmRhbWVudGFsSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHVubW91bnRGdW5kYW1lbnRhbENvbXBvbmVudChmdW5kYW1lbnRhbEluc3RhbmNlKTtcbiAgICAgICAgICAgIGN1cnJlbnQkJDEuc3RhdGVOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlQ2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgaHlkcmF0aW9uQ2FsbGJhY2tzID0gZmluaXNoZWRSb290Lmh5ZHJhdGlvbkNhbGxiYWNrcztcblxuICAgICAgICAgIGlmIChoeWRyYXRpb25DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBvbkRlbGV0ZWQgPSBoeWRyYXRpb25DYWxsYmFja3Mub25EZWxldGVkO1xuXG4gICAgICAgICAgICBpZiAob25EZWxldGVkKSB7XG4gICAgICAgICAgICAgIG9uRGVsZXRlZChjdXJyZW50JCQxLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVNjb3BlQVBJKSB7XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQkJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdoaWxlIHdlJ3JlIGluc2lkZSBhIHJlbW92ZWQgaG9zdCBub2RlIHdlIGRvbid0IHdhbnQgdG8gY2FsbFxuICAvLyByZW1vdmVDaGlsZCBvbiB0aGUgaW5uZXIgbm9kZXMgYmVjYXVzZSB0aGV5J3JlIHJlbW92ZWQgYnkgdGhlIHRvcFxuICAvLyBjYWxsIGFueXdheS4gV2UgYWxzbyB3YW50IHRvIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQgb24gYWxsXG4gIC8vIGNvbXBvc2l0ZXMgYmVmb3JlIHRoaXMgaG9zdCBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4gVGhlcmVmb3JlXG4gIC8vIHdlIGRvIGFuIGlubmVyIGxvb3Agd2hpbGUgd2UncmUgc3RpbGwgaW5zaWRlIHRoZSBob3N0IG5vZGUuXG4gIHZhciBub2RlID0gcm9vdDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cblxuICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsICYmICggLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAhc3VwcG9ydHNNdXRhdGlvbiB8fCBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXIoY3VycmVudCQkMSkge1xuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudCQkMS5hbHRlcm5hdGU7IC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVycyB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuIElkZWFsbHksIHdlXG4gIC8vIHNob3VsZCBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLiBUaGlzIGNoaWxkXG4gIC8vIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG5cbiAgY3VycmVudCQkMS5yZXR1cm4gPSBudWxsO1xuICBjdXJyZW50JCQxLmNoaWxkID0gbnVsbDtcbiAgY3VycmVudCQkMS5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgY3VycmVudCQkMS51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIGN1cnJlbnQkJDEuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgY3VycmVudCQkMS5hbHRlcm5hdGUgPSBudWxsO1xuICBjdXJyZW50JCQxLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgY3VycmVudCQkMS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgY3VycmVudCQkMS5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBkZXRhY2hGaWJlcihhbHRlcm5hdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5UG9ydGFsQ29udGFpbmVyKGN1cnJlbnQkJDEpIHtcbiAgaWYgKCFzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBvcnRhbCA9IGN1cnJlbnQkJDEuc3RhdGVOb2RlO1xuICB2YXIgY29udGFpbmVySW5mbyA9IHBvcnRhbC5jb250YWluZXJJbmZvO1xuICB2YXIgZW1wdHlDaGlsZFNldCA9IGNyZWF0ZUNvbnRhaW5lckNoaWxkU2V0KGNvbnRhaW5lckluZm8pO1xuICByZXBsYWNlQ29udGFpbmVyQ2hpbGRyZW4oY29udGFpbmVySW5mbywgZW1wdHlDaGlsZFNldCk7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdENvbnRhaW5lcihmaW5pc2hlZFdvcmspIHtcbiAgaWYgKCFzdXBwb3J0c1BlcnNpc3RlbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvcnRhbE9yUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBjb250YWluZXJJbmZvID0gcG9ydGFsT3JSb290LmNvbnRhaW5lckluZm8sXG4gICAgICAgICAgICBwZW5kaW5nQ2hpbGRyZW4gPSBwb3J0YWxPclJvb3QucGVuZGluZ0NoaWxkcmVuO1xuICAgICAgICByZXBsYWNlQ29udGFpbmVyQ2hpbGRyZW4oY29udGFpbmVySW5mbywgcGVuZGluZ0NoaWxkcmVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgfHwgZmliZXIudGFnID09PSBIb3N0UG9ydGFsO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAvLyBXZSdyZSBnb2luZyB0byBzZWFyY2ggZm9yd2FyZCBpbnRvIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBzaWJsaW5nIGhvc3RcbiAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gIC8vIHNlYXJjaCBwYXN0IHRoZW0uIFRoaXMgbGVhZHMgdG8gZXhwb25lbnRpYWwgc2VhcmNoIGZvciB0aGUgbmV4dCBzaWJsaW5nLlxuICAvLyBUT0RPOiBGaW5kIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuXG4gIHZhciBub2RlID0gZmliZXI7XG5cbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuXG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5lZmZlY3RUYWcgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5lZmZlY3RUYWcgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuICBpZiAoIXN1cHBvcnRzTXV0YXRpb24pIHtcbiAgICByZXR1cm47XG4gIH0gLy8gUmVjdXJzaXZlbHkgaW5zZXJ0IGFsbCBob3N0IG5vZGVzIGludG8gdGhlIHBhcmVudC5cblxuXG4gIHZhciBwYXJlbnRGaWJlciA9IGdldEhvc3RQYXJlbnRGaWJlcihmaW5pc2hlZFdvcmspOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgcGFyZW50O1xuICB2YXIgaXNDb250YWluZXI7XG4gIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICBpc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgICAgICAgaXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmVmZmVjdFRhZyAmIENvbnRlbnRSZXNldCkge1xuICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICByZXNldFRleHRDb250ZW50KHBhcmVudCk7IC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG5cbiAgICBwYXJlbnRGaWJlci5lZmZlY3RUYWcgJj0gfkNvbnRlbnRSZXNldDtcbiAgfVxuXG4gIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cblxuICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBpc0hvc3QgPSBub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICYmIG5vZGUudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNDb250YWluZXIpIHtcbiAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7Ly8gSWYgdGhlIGluc2VydGlvbiBpdHNlbGYgaXMgYSBwb3J0YWwsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZVxuICAgICAgLy8gZG93biBpdHMgY2hpbGRyZW4uIEluc3RlYWQsIHdlJ2xsIGdldCBpbnNlcnRpb25zIGZyb20gZWFjaCBjaGlsZCBpblxuICAgICAgLy8gdGhlIHBvcnRhbCBkaXJlY3RseS5cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQkJDEsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgdmFyIG5vZGUgPSBjdXJyZW50JCQxOyAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuXG4gIHZhciBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghY3VycmVudFBhcmVudElzVmFsaWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgZmluZFBhcmVudDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEocGFyZW50ICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAgICAgICAgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuaW5zdGFuY2U7XG4gICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IC8vIERvbid0IHZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgYWxyZWFkeSB2aXNpdGVkIHRoZW0uXG5cbiAgICB9IGVsc2UgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJICYmIG5vZGUudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgICAgdmFyIGZ1bmRhbWVudGFsTm9kZSA9IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBmdW5kYW1lbnRhbE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudFBhcmVudCwgZnVuZGFtZW50YWxOb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIgJiYgbm9kZS50YWcgPT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgaWYgKGVuYWJsZVN1c3BlbnNlQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IGZpbmlzaGVkUm9vdC5oeWRyYXRpb25DYWxsYmFja3M7XG5cbiAgICAgICAgaWYgKGh5ZHJhdGlvbkNhbGxiYWNrcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbkRlbGV0ZWQgPSBoeWRyYXRpb25DYWxsYmFja3Mub25EZWxldGVkO1xuXG4gICAgICAgICAgaWYgKG9uRGVsZXRlZCkge1xuICAgICAgICAgICAgb25EZWxldGVkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRGVsZXRlIHRoZSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnQuXG5cblxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICBjbGVhclN1c3BlbnNlQm91bmRhcnlGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBpbnRvIGEgcG9ydGFsLCBpdCBiZWNvbWVzIHRoZSBwYXJlbnQgdG8gcmVtb3ZlIGZyb20uXG4gICAgICAgIC8vIFdlIHdpbGwgcmVhc3NpZ24gaXQgYmFjayB3aGVuIHdlIHBvcCB0aGUgcG9ydGFsIG9uIHRoZSB3YXkgdXAuXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHBvcnRhbHMgbWlnaHQgY29udGFpbiBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBtYXkgZmluZCBtb3JlIGhvc3QgY29tcG9uZW50cyBiZWxvdy5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQkJDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnQkJDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbihmaW5pc2hlZFJvb3QsIGN1cnJlbnQkJDEsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgaWYgKHN1cHBvcnRzTXV0YXRpb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCQkMSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQkJDEsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuICB9XG5cbiAgZGV0YWNoRmliZXIoY3VycmVudCQkMSk7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFdvcmsoY3VycmVudCQkMSwgZmluaXNoZWRXb3JrKSB7XG4gIGlmICghc3VwcG9ydHNNdXRhdGlvbikge1xuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5vdGU6IFdlIGN1cnJlbnRseSBuZXZlciB1c2UgTW91bnRNdXRhdGlvbiwgYnV0IHVzZUxheW91dCB1c2VzXG4gICAgICAgICAgLy8gVW5tb3VudE11dGF0aW9uLlxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0KFVubW91bnRNdXRhdGlvbiwgTW91bnRNdXRhdGlvbiwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHN1cHBvcnRzSHlkcmF0aW9uKSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbW1pdENvbnRhaW5lcihmaW5pc2hlZFdvcmspO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGN1cnJlbnRseSBuZXZlciB1c2UgTW91bnRNdXRhdGlvbiwgYnV0IHVzZUxheW91dCB1c2VzXG4gICAgICAgIC8vIFVubW91bnRNdXRhdGlvbi5cbiAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3QoVW5tb3VudE11dGF0aW9uLCBNb3VudE11dGF0aW9uLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlOyAvLyBUT0RPOiBUeXBlIHRoZSB1cGRhdGVRdWV1ZSB0byBiZSBzcGVjaWZpYyB0byBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShpbnN0YW5jZSwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbmFibGVGbGFyZUFQSSkge1xuICAgICAgICAgICAgdmFyIHByZXZMaXN0ZW5lcnMgPSBvbGRQcm9wcy5saXN0ZW5lcnM7XG4gICAgICAgICAgICB2YXIgbmV4dExpc3RlbmVycyA9IG5ld1Byb3BzLmxpc3RlbmVycztcblxuICAgICAgICAgICAgaWYgKHByZXZMaXN0ZW5lcnMgIT09IG5leHRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgdXBkYXRlRXZlbnRMaXN0ZW5lcnMobmV4dExpc3RlbmVycywgZmluaXNoZWRXb3JrLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICBpZiAoIShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIGlmIChzdXBwb3J0c0h5ZHJhdGlvbikge1xuICAgICAgICAgIHZhciBfcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoX3Jvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgX3Jvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIoX3Jvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZUZ1bmRhbWVudGFsQVBJKSB7XG4gICAgICAgICAgdmFyIGZ1bmRhbWVudGFsSW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHVwZGF0ZUZ1bmRhbWVudGFsQ29tcG9uZW50KGZ1bmRhbWVudGFsSW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGVuYWJsZVNjb3BlQVBJKSB7XG4gICAgICAgICAgdmFyIHNjb3BlSW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHNjb3BlSW5zdGFuY2UuZmliZXIgPSBmaW5pc2hlZFdvcms7XG5cbiAgICAgICAgICBpZiAoZW5hYmxlRmxhcmVBUEkpIHtcbiAgICAgICAgICAgIHZhciBfbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcblxuICAgICAgICAgICAgdmFyIF9vbGRQcm9wcyA9IGN1cnJlbnQkJDEgIT09IG51bGwgPyBjdXJyZW50JCQxLm1lbW9pemVkUHJvcHMgOiBfbmV3UHJvcHM7XG5cbiAgICAgICAgICAgIHZhciBfcHJldkxpc3RlbmVycyA9IF9vbGRQcm9wcy5saXN0ZW5lcnM7XG4gICAgICAgICAgICB2YXIgX25leHRMaXN0ZW5lcnMgPSBfbmV3UHJvcHMubGlzdGVuZXJzO1xuXG4gICAgICAgICAgICBpZiAoX3ByZXZMaXN0ZW5lcnMgIT09IF9uZXh0TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUV2ZW50TGlzdGVuZXJzKF9uZXh0TGlzdGVuZXJzLCBmaW5pc2hlZFdvcmssIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspIHtcbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdEaWRUaW1lb3V0O1xuICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIG5ld0RpZFRpbWVvdXQgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBuZXdEaWRUaW1lb3V0ID0gdHJ1ZTtcbiAgICBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG4gICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG4gIH1cblxuICBpZiAoc3VwcG9ydHNNdXRhdGlvbiAmJiBwcmltYXJ5Q2hpbGRQYXJlbnQgIT09IG51bGwpIHtcbiAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIG5ld0RpZFRpbWVvdXQpO1xuICB9XG5cbiAgaWYgKGVuYWJsZVN1c3BlbnNlQ2FsbGJhY2sgJiYgbmV3U3RhdGUgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VDYWxsYmFjayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLnN1c3BlbnNlQ2FsbGJhY2s7XG5cbiAgICBpZiAodHlwZW9mIHN1c3BlbnNlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0aGVuYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgIGlmICh0aGVuYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VDYWxsYmFjayhuZXcgU2V0KHRoZW5hYmxlcykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3VzcGVuc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhcm5pbmckMShmYWxzZSwgJ1VuZXhwZWN0ZWQgdHlwZSBmb3Igc3VzcGVuc2VDYWxsYmFjay4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKCFzdXBwb3J0c0h5ZHJhdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50JCQxID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50JCQxICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudCQkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoZW5hYmxlU3VzcGVuc2VDYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IGZpbmlzaGVkUm9vdC5oeWRyYXRpb25DYWxsYmFja3M7XG5cbiAgICAgICAgICAgIGlmIChoeWRyYXRpb25DYWxsYmFja3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIG9uSHlkcmF0ZWQgPSBoeWRyYXRpb25DYWxsYmFja3Mub25IeWRyYXRlZDtcblxuICAgICAgICAgICAgICBpZiAob25IeWRyYXRlZCkge1xuICAgICAgICAgICAgICAgIG9uSHlkcmF0ZWQoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2YgdGhlbmFibGVzLlxuICAvLyBGb3IgZWFjaCB0aGVuYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB0aGVuYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHRoZW5hYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHRoZW5hYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh0aGVuYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5VGhlbmFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHRoZW5hYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh0aGVuYWJsZSkpIHtcbiAgICAgICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgICAgICBpZiAodGhlbmFibGUuX19yZWFjdERvTm90VHJhY2VJbnRlcmFjdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUNhY2hlLmFkZCh0aGVuYWJsZSk7XG4gICAgICAgIHRoZW5hYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRSZXNldFRleHRDb250ZW50KGN1cnJlbnQkJDEpIHtcbiAgaWYgKCFzdXBwb3J0c011dGF0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50JCQxLnN0YXRlTm9kZSk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUsIG51bGwpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUsIG51bGwpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChlcnJvciwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICAhKGZpYmVyLmV4cGlyYXRpb25UaW1lID09PSBTeW5jKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCByZW5kZXJFeHBpcmF0aW9uVGltZSwgdGhlbmFibGUpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXRcbiAgLy8gb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGN1cnJlbnQgcmVuZGVyIGV4cGlyYXRpb25cbiAgLy8gdGltZSAod2hpY2ggYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzO1xuXG4gIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHRoZW5hYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2Uge1xuICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQodGhlbmFibGUpO1xuXG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHRoZW5hYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhyZWFkSURzLmhhcyhyZW5kZXJFeHBpcmF0aW9uVGltZSkpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSB0aHJlYWQgSUQgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgIHRocmVhZElEcy5hZGQocmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB0aGVuYWJsZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIHRoZW5hYmxlLnRoZW4ocGluZywgcGluZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB2YWx1ZSwgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5lZmZlY3RUYWcgfD0gSW5jb21wbGV0ZTsgLy8gSXRzIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHRoZW5hYmxlLlxuICAgIHZhciB0aGVuYWJsZSA9IHZhbHVlO1xuICAgIGNoZWNrRm9yV3JvbmdTdXNwZW5zZVByaW9yaXR5SW5ERVYoc291cmNlRmliZXIpO1xuICAgIHZhciBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7IC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG5cbiAgICB2YXIgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKF93b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICAvLyBTdGFzaCB0aGUgcHJvbWlzZSBvbiB0aGUgYm91bmRhcnkgZmliZXIuIElmIHRoZSBib3VuZGFyeSB0aW1lcyBvdXQsIHdlJ2xsXG4gICAgICAgIC8vIGF0dGFjaCBhbm90aGVyIGxpc3RlbmVyIHRvIGZsaXAgdGhlIGJvdW5kYXJ5IGJhY2sgdG8gaXRzIG5vcm1hbCBzdGF0ZS5cbiAgICAgICAgdmFyIHRoZW5hYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodGhlbmFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbmV3IFNldCgpO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmFkZCh0aGVuYWJsZSk7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhlbmFibGVzLmFkZCh0aGVuYWJsZSk7XG4gICAgICAgIH0gLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gSW4gdGhlIGNvbW1pdCBwaGFzZSwgd2UnbGwgc2NoZWR1bGUgYVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHN5bmNocm9ub3VzIHVwZGF0ZSB0byByZS1yZW5kZXIgdGhlIFN1c3BlbnNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBOb3RlOiBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBjb21wb25lbnQgdGhhdCBzdXNwZW5kZWQgd2FzXG4gICAgICAgIC8vIGluc2lkZSBhIGJsb2NraW5nIG1vZGUgdHJlZS4gSWYgdGhlIFN1c3BlbnNlIGlzIG91dHNpZGUgb2YgaXQsIHdlXG4gICAgICAgIC8vIHNob3VsZCAqbm90KiBzdXNwZW5kIHRoZSBjb21taXQuXG5cblxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLmVmZmVjdFRhZyB8PSBEaWRDYXB0dXJlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5lZmZlY3RUYWcgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50LiBDaGFuZ2UgdGhlIHRhZyBzbyBpdCdzIG5vdCBtaXN0YWtlbiBmb3IgYVxuICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQgY2xhc3MgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgd2Ugc2hvdWxkIG5vdCBjYWxsXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyA9IEluY29tcGxldGVDbGFzc0NvbXBvbmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBrbm93biB0byBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFVzZSBhIGZvcmNlIHVwZGF0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoU3luYywgbnVsbCk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmV4cGlyYXRpb25UaW1lID0gU3luYzsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFN1c3BlbnNlQ29uZmlnIGFwcGxpZXMgdG9cbiAgICAgICAgLy8gdGhpcyBjYXNlLiBJZiBub25lIGlzIGRlZmluZWQsIEpORCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIGFuZCBpdCBnZXRzIFwicmV0cmllZFwiLCBhbGxvd2luZyB1cyB0byBzaG93XG4gICAgICAgIC8vIGFub3RoZXIgbGV2ZWwsIGJ1dCB0aGVyZSdzIHN0aWxsIGFuIGlubmVyIGJvdW5kYXJ5IHRoYXQgd291bGQgc2hvdyBhIGZhbGxiYWNrLFxuICAgICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgICAvLyBhbnl3aGVyZSBpbiB0aGUgdHJlZS4gVGhpcyBlZmZlY3RpdmVseSB0aHJvdHRsZXMgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpbnRvIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmFpbiBvZiBjb21taXRzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVzdGFydCB0b1xuICAgICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGVyZSdzIGFtYmlndWl0eSBkdWUgdG8gYmF0Y2hpbmcgaXQncyByZXNvbHZlZCBpbiBwcmVmZXJlbmNlIG9mOlxuICAgICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBcImJ1c3lcIiBzdGF0ZSBkb2Vzbid0IGdldCBmb3JjZSBjb21taXR0ZWQuIFdlIHdhbnQgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG5cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHJlbmRlckV4cGlyYXRpb25UaW1lLCB0aGVuYWJsZSk7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuXG5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTsgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBGYWxsdGhyb3VnaCB0byBlcnJvciBtb2RlLlxuICAgIC8vIFRPRE86IFVzZSBpbnZhcmlhbnQgc28gdGhlIG1lc3NhZ2UgaXMgc3RyaXBwZWQgaW4gcHJvZD9cblxuXG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyArIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2VGaWJlcikpO1xuICB9IC8vIFdlIGRpZG4ndCBmaW5kIGEgYm91bmRhcnkgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyB0eXBlIG9mIGV4Y2VwdGlvbi4gU3RhcnRcbiAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gIC8vIGFzIGFuIGVycm9yLlxuXG5cbiAgcmVuZGVyRGlkRXJyb3IoKTtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSByZW5kZXJFeHBpcmF0aW9uVGltZTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgRGlkQ2FwdHVyZSkgPT09IE5vRWZmZWN0ICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5lZmZlY3RUYWcgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IHJlbmRlckV4cGlyYXRpb25UaW1lOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgQmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAqL1xuMTtcbnZhciBFdmVudENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpc2NyZXRlRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgKi9cbjQ7XG52YXIgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAqL1xuODtcbnZhciBSZW5kZXJDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBSb290SW5jb21wbGV0ZSA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1O1xuLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGV4cGlyYXRpb24gdGltZSB3ZSdyZSByZW5kZXJpbmdcblxudmFyIHJlbmRlckV4cGlyYXRpb25UaW1lID0gTm9Xb3JrOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIE1vc3QgcmVjZW50IGV2ZW50IHRpbWUgYW1vbmcgcHJvY2Vzc2VkIHVwZGF0ZXMgZHVyaW5nIHRoaXMgcmVuZGVyLlxuLy8gVGhpcyBpcyBjb25jZXB0dWFsbHkgYSB0aW1lIHN0YW1wIGJ1dCBleHByZXNzZWQgaW4gdGVybXMgb2YgYW4gRXhwaXJhdGlvblRpbWVcbi8vIGJlY2F1c2Ugd2UgZGVhbCBtb3N0bHkgd2l0aCBleHBpcmF0aW9uIHRpbWVzIGluIHRoZSBob3QgcGF0aCwgc28gdGhpcyBhdm9pZHNcbi8vIHRoZSBjb252ZXJzaW9uIGhhcHBlbmluZyBpbiB0aGUgaG90IHBhdGguXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSA9IFN5bmM7XG52YXIgd29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0ID0gU3luYztcbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RDYW5TdXNwZW5kVXNpbmdDb25maWcgPSBudWxsOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbi8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3ROZXh0VW5wcm9jZXNzZWRVcGRhdGVUaW1lID0gTm9Xb3JrOyAvLyBJZiB3ZSdyZSBwaW5nZWQgd2hpbGUgcmVuZGVyaW5nIHdlIGRvbid0IGFsd2F5cyByZXN0YXJ0IGltbWVkaWF0ZWx5LlxuLy8gVGhpcyBmbGFnIGRldGVybWluZXMgaWYgaXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXN0YXJ0IGlmIGFuIG9wcG9ydHVuaXR5XG4vLyBoYXBwZW5zIGxhdGVyZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEhhc1BlbmRpbmdQaW5nID0gZmFsc2U7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDtcbnZhciBuZXh0RWZmZWN0ID0gbnVsbDtcbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG52YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5O1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0V4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xudmFyIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbnZhciBpbnRlcnJ1cHRlZEJ5ID0gbnVsbDsgLy8gTWFya3MgdGhlIG5lZWQgdG8gcmVzY2hlZHVsZSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGVzZSBleHBpcmF0aW9uIHRpbWVzXG4vLyBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZS4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgdHJhY2VkIGFjcm9zcyBjb21wb25lbnRzXG4vLyB0aGF0IHNwYXduIG5ldyB3b3JrIGR1cmluZyByZW5kZXIuIEUuZy4gaGlkZGVuIGJvdW5kYXJpZXMsIHN1c3BlbmRlZCBTU1Jcbi8vIGh5ZHJhdGlvbiBvciBTdXNwZW5zZUxpc3QuXG5cbnZhciBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7IC8vIEV4cGlyYXRpb24gdGltZXMgYXJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0byB0aGUgY3VycmVudCB0aW1lICh0aGUgc3RhcnRcbi8vIHRpbWUpLiBIb3dldmVyLCBpZiB0d28gdXBkYXRlcyBhcmUgc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2FtZSBldmVudCwgd2Vcbi8vIHNob3VsZCB0cmVhdCB0aGVpciBzdGFydCB0aW1lcyBhcyBzaW11bHRhbmVvdXMsIGV2ZW4gaWYgdGhlIGFjdHVhbCBjbG9ja1xuLy8gdGltZSBoYXMgYWR2YW5jZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuLy8gSW4gb3RoZXIgd29yZHMsIGJlY2F1c2UgZXhwaXJhdGlvbiB0aW1lcyBkZXRlcm1pbmUgaG93IHVwZGF0ZXMgYXJlIGJhdGNoZWQsXG4vLyB3ZSB3YW50IGFsbCB1cGRhdGVzIG9mIGxpa2UgcHJpb3JpdHkgdGhhdCBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZXZlbnQgdG9cbi8vIHJlY2VpdmUgdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLiBPdGhlcndpc2Ugd2UgZ2V0IHRlYXJpbmcuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9Xb3JrO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCkge1xuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gV2UncmUgaW5zaWRlIFJlYWN0LCBzbyBpdCdzIGZpbmUgdG8gcmVhZCB0aGUgYWN0dWFsIHRpbWUuXG4gICAgcmV0dXJuIG1zVG9FeHBpcmF0aW9uVGltZShub3coKSk7XG4gIH0gLy8gV2UncmUgbm90IGluc2lkZSBSZWFjdCwgc28gd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBicm93c2VyIGV2ZW50LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFRpbWUgIT09IE5vV29yaykge1xuICAgIC8vIFVzZSB0aGUgc2FtZSBzdGFydCB0aW1lIGZvciBhbGwgdXBkYXRlcyB1bnRpbCB3ZSBlbnRlciBSZWFjdCBhZ2Fpbi5cbiAgICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbiAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgc2luY2UgUmVhY3QgeWllbGRlZC4gQ29tcHV0ZSBhIG5ldyBzdGFydCB0aW1lLlxuXG5cbiAgY3VycmVudEV2ZW50VGltZSA9IG1zVG9FeHBpcmF0aW9uVGltZShub3coKSk7XG4gIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWUoKSB7XG4gIHJldHVybiBtc1RvRXhwaXJhdGlvblRpbWUobm93KCkpO1xufVxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgZmliZXIsIHN1c3BlbnNlQ29uZmlnKSB7XG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luYztcbiAgfVxuXG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSA/IFN5bmMgOiBCYXRjaGVkO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFVzZSB3aGF0ZXZlciB0aW1lIHdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoZXJlIGJlIGEgd2F5IHRvIG9wdCBvdXQsIGxpa2Ugd2l0aCBgcnVuV2l0aFByaW9yaXR5YD9cbiAgICByZXR1cm4gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWU7XG5cbiAgaWYgKHN1c3BlbnNlQ29uZmlnICE9PSBudWxsKSB7XG4gICAgLy8gQ29tcHV0ZSBhbiBleHBpcmF0aW9uIHRpbWUgYmFzZWQgb24gdGhlIFN1c3BlbnNlIHRpbWVvdXQuXG4gICAgZXhwaXJhdGlvblRpbWUgPSBjb21wdXRlU3VzcGVuc2VFeHBpcmF0aW9uKGN1cnJlbnRUaW1lLCBzdXNwZW5zZUNvbmZpZy50aW1lb3V0TXMgfCAwIHx8IExPV19QUklPUklUWV9FWFBJUkFUSU9OKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb21wdXRlIGFuIGV4cGlyYXRpb24gdGltZSBiYXNlZCBvbiB0aGUgU2NoZWR1bGVyIHByaW9yaXR5LlxuICAgIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgZXhwaXJhdGlvblRpbWUgPSBTeW5jO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyOlxuICAgICAgICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBjb21wdXRlVXNlckJsb2NraW5nRXhwaXJhdGlvblxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVJbnRlcmFjdGl2ZUV4cGlyYXRpb24oY3VycmVudFRpbWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dQcmlvcml0eVxuICAgICAgICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0by4uLiBzb21ldGhpbmcgYmV0dGVyLlxuICAgICAgICBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVBc3luY0V4cGlyYXRpb24oY3VycmVudFRpbWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICAgIGV4cGlyYXRpb25UaW1lID0gSWRsZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIGEgdmFsaWQgcHJpb3JpdHkgbGV2ZWxcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gIH0gLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcgYSB0cmVlLCBkbyBub3QgdXBkYXRlIGF0IHRoZSBzYW1lXG4gIC8vIGV4cGlyYXRpb24gdGltZSB0aGF0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlxuICAvLyBUT0RPOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzIGlmIHRoZSB1cGRhdGUgaXMgb24gYSBkaWZmZXJlbnQgcm9vdC5cbiAgLy8gUmVmYWN0b3IgY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlciArIHNjaGVkdWxlVXBkYXRlIHNvIHdlIGhhdmUgYWNjZXNzIHRvXG4gIC8vIHRoZSByb290IHdoZW4gd2UgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiBleHBpcmF0aW9uVGltZSA9PT0gcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgdHJpY2sgdG8gbW92ZSB0aGlzIHVwZGF0ZSBpbnRvIGEgc2VwYXJhdGUgYmF0Y2hcbiAgICBleHBpcmF0aW9uVGltZSAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIGV4cGlyYXRpb25UaW1lO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBleHBpcmF0aW9uVGltZSkge1xuICBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKTtcbiAgd2FybkFib3V0SW52YWxpZFVwZGF0ZXNPbkNsYXNzQ29tcG9uZW50c0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlVGltZUZyb21GaWJlclRvUm9vdChmaWJlciwgZXhwaXJhdGlvblRpbWUpO1xuXG4gIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjaGVja0ZvckludGVycnVwdGlvbihmaWJlciwgZXhwaXJhdGlvblRpbWUpO1xuICByZWNvcmRTY2hlZHVsZVVwZGF0ZSgpOyAvLyBUT0RPOiBjb21wdXRlRXhwaXJhdGlvbkZvckZpYmVyIGFsc28gcmVhZHMgdGhlIHByaW9yaXR5LiBQYXNzIHRoZVxuICAvLyBwcmlvcml0eSBhcyBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzIG9uZS5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBTeW5jKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZSk7IC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBUaGUgaW5pdGlhbCBtb3VudCBvZiBhIFJlYWN0RE9NLnJlbmRlci1lZFxuICAgICAgLy8gcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMgc2hvdWxkIGJlIHN5bmNocm9ub3VzLCBidXQgbGF5b3V0IHVwZGF0ZXNcbiAgICAgIC8vIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cblxuICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZSk7XG4gIH1cblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAoIC8vIE9ubHkgdXBkYXRlcyBhdCB1c2VyLWJsb2NraW5nIHByaW9yaXR5IG9yIGdyZWF0ZXIgYXJlIGNvbnNpZGVyZWRcbiAgLy8gZGlzY3JldGUsIGV2ZW4gaW5zaWRlIGEgZGlzY3JldGUgZXZlbnQuXG4gIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkpKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgZXZlbnQuIFRyYWNrIHRoZSBsb3dlc3QgcHJpb3JpdHlcbiAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG5ldyBNYXAoW1tyb290LCBleHBpcmF0aW9uVGltZV1dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxhc3REaXNjcmV0ZVRpbWUgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmdldChyb290KTtcblxuICAgICAgaWYgKGxhc3REaXNjcmV0ZVRpbWUgPT09IHVuZGVmaW5lZCB8fCBsYXN0RGlzY3JldGVUaW1lID4gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5zZXQocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxudmFyIHNjaGVkdWxlV29yayA9IHNjaGVkdWxlVXBkYXRlT25GaWJlcjsgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gd2UgY2FuIG1hcmsgYSBmaWJlciB3aXRoIHBlbmRpbmdcbi8vIHdvcmsgd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHR5cGljYWwgdXBkYXRlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGV2ZW50O1xuLy8gZS5nLiByZXRyeWluZyBhIFN1c3BlbnNlIGJvdW5kYXJ5IGlzbid0IGFuIHVwZGF0ZSwgYnV0IGl0IGRvZXMgc2NoZWR1bGUgd29ya1xuLy8gb24gYSBmaWJlci5cblxuZnVuY3Rpb24gbWFya1VwZGF0ZVRpbWVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgZXhwaXJhdGlvbiB0aW1lXG4gIGlmIChmaWJlci5leHBpcmF0aW9uVGltZSA8IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuZXhwaXJhdGlvblRpbWUgPCBleHBpcmF0aW9uVGltZSkge1xuICAgIGFsdGVybmF0ZS5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gZmliZXIucmV0dXJuO1xuICB2YXIgcm9vdCA9IG51bGw7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgJiYgZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHJvb3QgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZEV4cGlyYXRpb25UaW1lIDwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgbm9kZS5jaGlsZEV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG5cbiAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA8IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgYWx0ZXJuYXRlLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkRXhwaXJhdGlvblRpbWUgPCBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgJiYgbm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QpIHtcbiAgICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgICAvLyB0aGF0J3MgdW5wcm9jZXNzZWQgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICBtYXJrVW5wcm9jZXNzZWRVcGRhdGVUaW1lKGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgICAgLy8gVE9ETzogVGhpcyBoYXBwZW5zIHRvIHdvcmsgd2hlbiByZWNlaXZpbmcgYW4gdXBkYXRlIGR1cmluZyB0aGUgcmVuZGVyXG4gICAgICAgIC8vIHBoYXNlLCBiZWNhdXNlIG9mIHRoZSB0cmljayBpbnNpZGUgY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlciB0b1xuICAgICAgICAvLyBzdWJ0cmFjdCAxIGZyb20gYHJlbmRlckV4cGlyYXRpb25UaW1lYCB0byBtb3ZlIGl0IGludG8gYVxuICAgICAgICAvLyBzZXBhcmF0ZSBidWNrZXQuIEJ1dCB3ZSBzaG91bGQgcHJvYmFibHkgbW9kZWwgaXQgd2l0aCBhbiBleGNlcHRpb24sXG4gICAgICAgIC8vIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSB3ZSB1c2UgdG8gZm9yY2UgaHlkcmF0aW9uIG9mIGEgc3VidHJlZS5cbiAgICAgICAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciBsb3cgcHJpIHVwZGF0ZXMgdGhhdCB3ZXJlIGFscmVhZHlcbiAgICAgICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB0aGUgcm9vdCBzdGFydGVkIHJlbmRlcmluZy4gTmVlZCB0byB0cmFjayB0aGUgbmV4dFxuICAgICAgICAvLyBwZW5kaW5nIGV4cGlyYXRpb24gdGltZSAocGVyaGFwcyBieSBiYWNrdHJhY2tpbmcgdGhlIHJldHVybiBwYXRoKSBhbmRcbiAgICAgICAgLy8gdGhlbiB0cmlnZ2VyIGEgcmVzdGFydCBpbiB0aGUgYHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGVgIHBhdGguXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gICAgbWFya1Jvb3RVcGRhdGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiBnZXROZXh0Um9vdEV4cGlyYXRpb25UaW1lVG9Xb3JrT24ocm9vdCkge1xuICAvLyBEZXRlcm1pbmVzIHRoZSBuZXh0IGV4cGlyYXRpb24gdGltZSB0aGF0IHRoZSByb290IHNob3VsZCByZW5kZXIsIHRha2luZ1xuICAvLyBpbnRvIGFjY291bnQgbGV2ZWxzIHRoYXQgbWF5IGJlIHN1c3BlbmRlZCwgb3IgbGV2ZWxzIHRoYXQgbWF5IGhhdmVcbiAgLy8gcmVjZWl2ZWQgYSBwaW5nLlxuICB2YXIgbGFzdEV4cGlyZWRUaW1lID0gcm9vdC5sYXN0RXhwaXJlZFRpbWU7XG5cbiAgaWYgKGxhc3RFeHBpcmVkVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgcmV0dXJuIGxhc3RFeHBpcmVkVGltZTtcbiAgfSAvLyBcIlBlbmRpbmdcIiByZWZlcnMgdG8gYW55IHVwZGF0ZSB0aGF0IGhhc24ndCBjb21taXR0ZWQgeWV0LCBpbmNsdWRpbmcgaWYgaXRcbiAgLy8gc3VzcGVuZGVkLiBUaGUgXCJzdXNwZW5kZWRcIiByYW5nZSBpcyB0aGVyZWZvcmUgYSBzdWJzZXQuXG5cblxuICB2YXIgZmlyc3RQZW5kaW5nVGltZSA9IHJvb3QuZmlyc3RQZW5kaW5nVGltZTtcblxuICBpZiAoIWlzUm9vdFN1c3BlbmRlZEF0VGltZShyb290LCBmaXJzdFBlbmRpbmdUaW1lKSkge1xuICAgIC8vIFRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgdGltZSBpcyBub3Qgc3VzcGVuZGVkLiBMZXQncyB3b3JrIG9uIHRoYXQuXG4gICAgcmV0dXJuIGZpcnN0UGVuZGluZ1RpbWU7XG4gIH0gLy8gSWYgdGhlIGZpcnN0IHBlbmRpbmcgdGltZSBpcyBzdXNwZW5kZWQsIGNoZWNrIGlmIHRoZXJlJ3MgYSBsb3dlciBwcmlvcml0eVxuICAvLyBwZW5kaW5nIGxldmVsIHRoYXQgd2Uga25vdyBhYm91dC4gT3IgY2hlY2sgaWYgd2UgcmVjZWl2ZWQgYSBwaW5nLiBXb3JrXG4gIC8vIG9uIHdoaWNoZXZlciBpcyBoaWdoZXIgcHJpb3JpdHkuXG5cblxuICB2YXIgbGFzdFBpbmdlZFRpbWUgPSByb290Lmxhc3RQaW5nZWRUaW1lO1xuICB2YXIgbmV4dEtub3duUGVuZGluZ0xldmVsID0gcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWw7XG4gIHJldHVybiBsYXN0UGluZ2VkVGltZSA+IG5leHRLbm93blBlbmRpbmdMZXZlbCA/IGxhc3RQaW5nZWRUaW1lIDogbmV4dEtub3duUGVuZGluZ0xldmVsO1xufSAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIHRhc2sgZm9yIGEgcm9vdC4gVGhlcmUncyBvbmx5IG9uZSB0YXNrIHBlclxuLy8gcm9vdDsgaWYgYSB0YXNrIHdhcyBhbHJlYWR5IHNjaGVkdWxlZCwgd2UnbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZVxuLy8gZXhwaXJhdGlvbiB0aW1lIG9mIHRoZSBleGlzdGluZyB0YXNrIGlzIHRoZSBzYW1lIGFzIHRoZSBleHBpcmF0aW9uIHRpbWUgb2Zcbi8vIHRoZSBuZXh0IGxldmVsIHRoYXQgdGhlIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5XG4vLyB1cGRhdGUsIGFuZCByaWdodCBiZWZvcmUgZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpIHtcbiAgdmFyIGxhc3RFeHBpcmVkVGltZSA9IHJvb3QubGFzdEV4cGlyZWRUaW1lO1xuXG4gIGlmIChsYXN0RXhwaXJlZFRpbWUgIT09IE5vV29yaykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogRXhwaXJlZCB3b3JrIHNob3VsZCBmbHVzaCBzeW5jaHJvbm91c2x5LlxuICAgIHJvb3QuY2FsbGJhY2tFeHBpcmF0aW9uVGltZSA9IFN5bmM7XG4gICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgcm9vdC5jYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gZ2V0TmV4dFJvb3RFeHBpcmF0aW9uVGltZVRvV29ya09uKHJvb3QpO1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcblxuICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vV29yaykge1xuICAgIC8vIFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja0V4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9Qcmlvcml0eTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVE9ETzogSWYgdGhpcyBpcyBhbiB1cGRhdGUsIHdlIGFscmVhZHkgcmVhZCB0aGUgY3VycmVudCB0aW1lLiBQYXNzIHRoZVxuICAvLyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXG5cbiAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7XG4gIHZhciBwcmlvcml0eUxldmVsID0gaW5mZXJQcmlvcml0eUZyb21FeHBpcmF0aW9uVGltZShjdXJyZW50VGltZSwgZXhwaXJhdGlvblRpbWUpOyAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHJlbmRlciB0YXNrLCBjb25maXJtIGl0IGhhcyB0aGUgY29ycmVjdCBwcmlvcml0eSBhbmRcbiAgLy8gZXhwaXJhdGlvbiB0aW1lLiBPdGhlcndpc2UsIHdlJ2xsIGNhbmNlbCBpdCBhbmQgc2NoZWR1bGUgYSBuZXcgb25lLlxuXG4gIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tFeHBpcmF0aW9uVGltZSA9IHJvb3QuY2FsbGJhY2tFeHBpcmF0aW9uVGltZTtcblxuICAgIGlmICggLy8gQ2FsbGJhY2sgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIGV4cGlyYXRpb24gdGltZS5cbiAgICBleGlzdGluZ0NhbGxiYWNrRXhwaXJhdGlvblRpbWUgPT09IGV4cGlyYXRpb25UaW1lICYmIC8vIENhbGxiYWNrIG11c3QgaGF2ZSBncmVhdGVyIG9yIGVxdWFsIHByaW9yaXR5LlxuICAgIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA+PSBwcmlvcml0eUxldmVsKSB7XG4gICAgICAvLyBFeGlzdGluZyBjYWxsYmFjayBpcyBzdWZmaWNpZW50LlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gTmVlZCB0byBzY2hlZHVsZSBhIG5ldyB0YXNrLlxuICAgIC8vIFRPRE86IEluc3RlYWQgb2Ygc2NoZWR1bGluZyBhIG5ldyB0YXNrLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBjaGFuZ2UgdGhlXG4gICAgLy8gcHJpb3JpdHkgb2YgdGhlIGV4aXN0aW5nIG9uZS5cblxuXG4gICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICB9XG5cbiAgcm9vdC5jYWxsYmFja0V4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IHByaW9yaXR5TGV2ZWw7XG4gIHZhciBjYWxsYmFja05vZGU7XG5cbiAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBTeW5jKSB7XG4gICAgLy8gU3luYyBSZWFjdCBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBvbiBhIHNwZWNpYWwgaW50ZXJuYWwgcXVldWVcbiAgICBjYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAoZGlzYWJsZVNjaGVkdWxlclRpbWVvdXRCYXNlZE9uUmVhY3RFeHBpcmF0aW9uVGltZSkge1xuICAgIGNhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCksIC8vIENvbXB1dGUgYSB0YXNrIHRpbWVvdXQgYmFzZWQgb24gdGhlIGV4cGlyYXRpb24gdGltZS4gVGhpcyBhbHNvIGFmZmVjdHNcbiAgICAvLyBvcmRlcmluZyBiZWNhdXNlIHRhc2tzIGFyZSBwcm9jZXNzZWQgaW4gdGltZW91dCBvcmRlci5cbiAgICB7XG4gICAgICB0aW1lb3V0OiBleHBpcmF0aW9uVGltZVRvTXMoZXhwaXJhdGlvblRpbWUpIC0gbm93KClcbiAgICB9KTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gY2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgLy8gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBhIFJlYWN0IGV2ZW50LCB3ZSBjYW4gY2xlYXIgdGhlIGN1cnJlbnRcbiAgLy8gZXZlbnQgdGltZS4gVGhlIG5leHQgdXBkYXRlIHdpbGwgY29tcHV0ZSBhIG5ldyBldmVudCB0aW1lLlxuICBjdXJyZW50RXZlbnRUaW1lID0gTm9Xb3JrO1xuXG4gIGlmIChkaWRUaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJlbmRlciB0YXNrIHRvb2sgdG9vIGxvbmcgdG8gY29tcGxldGUuIE1hcmsgdGhlIGN1cnJlbnQgdGltZSBhc1xuICAgIC8vIGV4cGlyZWQgdG8gc3luY2hyb25vdXNseSByZW5kZXIgYWxsIGV4cGlyZWQgd29yayBpbiBhIHNpbmdsZSBiYXRjaC5cbiAgICB2YXIgY3VycmVudFRpbWUgPSByZXF1ZXN0Q3VycmVudFRpbWVGb3JVcGRhdGUoKTtcbiAgICBtYXJrUm9vdEV4cGlyZWRBdFRpbWUocm9vdCwgY3VycmVudFRpbWUpOyAvLyBUaGlzIHdpbGwgc2NoZWR1bGUgYSBzeW5jaHJvbm91cyBjYWxsYmFjay5cblxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBEZXRlcm1pbmUgdGhlIG5leHQgZXhwaXJhdGlvbiB0aW1lIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gIC8vIG9uIHRoZSByb290LlxuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gZ2V0TmV4dFJvb3RFeHBpcmF0aW9uVGltZVRvV29ya09uKHJvb3QpO1xuXG4gIGlmIChleHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG5cbiAgICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgZXhwaXJhdGlvbiB0aW1lIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAgIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgICBpZiAocm9vdCAhPT0gd29ya0luUHJvZ3Jlc3NSb290IHx8IGV4cGlyYXRpb25UaW1lICE9PSByZW5kZXJFeHBpcmF0aW9uVGltZSkge1xuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICB9IC8vIElmIHdlIGhhdmUgYSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLCBpdCBtZWFucyB0aGVyZSdzIHN0aWxsIHdvcmsgdG8gZG9cbiAgICAvLyBpbiB0aGlzIHJvb3QuXG5cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKHJvb3QpO1xuICAgICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuICAgICAgc3RhcnRXb3JrTG9vcFRpbWVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgZG8ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHdvcmtMb29wQ29uY3VycmVudCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgICAgIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgICBzdG9wSW50ZXJydXB0ZWRXb3JrTG9vcFRpbWVyKCk7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWRBdFRpbWUocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGVyZSdzIHN0aWxsIHdvcmsgbGVmdCBvdmVyLiBFeGl0IHdpdGhvdXQgY29tbWl0dGluZy5cbiAgICAgICAgc3RvcEludGVycnVwdGVkV29ya0xvb3BUaW1lcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAgICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cbiAgICAgICAgc3RvcEZpbmlzaGVkV29ya0xvb3BUaW1lcigpO1xuICAgICAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICByb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICAgICAgZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBmaW5pc2hlZFdvcmssIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuXG4gICAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgICAgICAvLyBjdXJyZW50bHkgZXhlY3V0ZWQuIE5lZWQgdG8gcmV0dXJuIGEgY29udGludWF0aW9uLlxuICAgICAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZmluaXNoZWRXb3JrLCBleGl0U3RhdHVzLCBleHBpcmF0aW9uVGltZSkge1xuICAvLyBTZXQgdGhpcyB0byBudWxsIHRvIGluZGljYXRlIHRoZXJlJ3Mgbm8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuXG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluY29tcGxldGU6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIGFzeW5jIHJlbmRlciwgdGhlIGVycm9yIG1heSBoYXZlIGhhcHBlbmVkIGR1ZSB0b1xuICAgICAgICAvLyBhIG11dGF0aW9uIGluIGEgY29uY3VycmVudCBldmVudC4gVHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLFxuICAgICAgICAvLyBzeW5jaHJvbm91c2x5LCB0byBzZWUgaWYgdGhlIGVycm9yIGdvZXMgYXdheS4gSWYgdGhlcmUgYXJlXG4gICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMsIGxldCdzIGluY2x1ZGUgdGhvc2UsIHRvbywgaW4gY2FzZSB0aGV5XG4gICAgICAgIC8vIGZpeCB0aGUgaW5jb25zaXN0ZW5jeS4gUmVuZGVyIGF0IElkbGUgdG8gaW5jbHVkZSBhbGwgdXBkYXRlcy5cbiAgICAgICAgLy8gSWYgaXQgd2FzIElkbGUgb3IgTmV2ZXIgb3Igc29tZSBub3QteWV0LWludmVudGVkIHRpbWUsIHJlbmRlclxuICAgICAgICAvLyBhdCB0aGF0IHRpbWUuXG4gICAgICAgIG1hcmtSb290RXhwaXJlZEF0VGltZShyb290LCBleHBpcmF0aW9uVGltZSA+IElkbGUgPyBJZGxlIDogZXhwaXJhdGlvblRpbWUpOyAvLyBXZSBhc3N1bWUgdGhhdCB0aGlzIHNlY29uZCByZW5kZXIgcGFzcyB3aWxsIGJlIHN5bmNocm9ub3VzXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgbm90IGhpdCB0aGlzIHBhdGggYWdhaW4uXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgdmFyIGxhc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5sYXN0U3VzcGVuZGVkVGltZTtcblxuICAgICAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IGxhc3RTdXNwZW5kZWRUaW1lKSB7XG4gICAgICAgICAgcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWwgPSBnZXRSZW1haW5pbmdFeHBpcmF0aW9uVGltZShmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgZmx1c2hTdXNwZW5zZVByaW9yaXR5V2FybmluZ0luREVWKCk7IC8vIFdlIGhhdmUgYW4gYWNjZXB0YWJsZSBsb2FkaW5nIHN0YXRlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltbWVkaWF0ZWx5IGNvbW1pdCBpdCBvciB3YWl0IGEgYml0LlxuICAgICAgICAvLyBJZiB3ZSBoYXZlIHByb2Nlc3NlZCBuZXcgdXBkYXRlcyBkdXJpbmcgdGhpcyByZW5kZXIsIHdlIG1heSBub3dcbiAgICAgICAgLy8gaGF2ZSBhIG5ldyBsb2FkaW5nIHN0YXRlIHJlYWR5LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHdlIGNvbW1pdFxuICAgICAgICAvLyB0aGF0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cbiAgICAgICAgdmFyIGhhc05vdFByb2Nlc3NlZE5ld1VwZGF0ZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSA9PT0gU3luYztcblxuICAgICAgICBpZiAoaGFzTm90UHJvY2Vzc2VkTmV3VXBkYXRlcyAmJiAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICEodHJ1ZSAmJiBmbHVzaFN1c3BlbnNlRmFsbGJhY2tzSW5UZXN0cyAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50KSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbm90IHByb2Nlc3NlZCBhbnkgbmV3IHVwZGF0ZXMgZHVyaW5nIHRoaXMgcGFzcywgdGhlblxuICAgICAgICAgIC8vIHRoaXMgaXMgZWl0aGVyIGEgcmV0cnkgb2YgYW4gZXhpc3RpbmcgZmFsbGJhY2sgc3RhdGUgb3IgYVxuICAgICAgICAgIC8vIGhpZGRlbiB0cmVlLiBIaWRkZW4gdHJlZXMgc2hvdWxkbid0IGJlIGJhdGNoZWQgd2l0aCBvdGhlciB3b3JrXG4gICAgICAgICAgLy8gYW5kIGFmdGVyIHRoYXQncyBmaXhlZCBpdCBjYW4gb25seSBiZSBhIHJldHJ5LiBXZSdyZSBnb2luZyB0b1xuICAgICAgICAgIC8vIHRocm90dGxlIGNvbW1pdHRpbmcgcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnlcbiAgICAgICAgICAvLyBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3coKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEhhc1BlbmRpbmdQaW5nKSB7XG4gICAgICAgICAgICAgIHZhciBsYXN0UGluZ2VkVGltZSA9IHJvb3QubGFzdFBpbmdlZFRpbWU7XG5cbiAgICAgICAgICAgICAgaWYgKGxhc3RQaW5nZWRUaW1lID09PSBOb1dvcmsgfHwgbGFzdFBpbmdlZFRpbWUgPj0gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJlbmRlciB3YXMgcGluZ2VkIGJ1dCB3ZSBkaWRuJ3QgZ2V0IHRvIHJlc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBlYXJsaWVyIHNvIHRyeSByZXN0YXJ0aW5nIG5vdyBpbnN0ZWFkLlxuICAgICAgICAgICAgICAgIHJvb3QubGFzdFBpbmdlZFRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICAgICAgICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRUaW1lID0gZ2V0TmV4dFJvb3RFeHBpcmF0aW9uVGltZVRvV29ya09uKHJvb3QpO1xuXG4gICAgICAgICAgICBpZiAobmV4dFRpbWUgIT09IE5vV29yayAmJiBuZXh0VGltZSAhPT0gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxhc3RTdXNwZW5kZWRUaW1lICE9PSBOb1dvcmsgJiYgbGFzdFN1c3BlbmRlZFRpbWUgIT09IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBwcmVmZXIgdG8gcmVuZGVyIHRoZSBmYWxsYmFjayBvZiBhdCB0aGUgbGFzdFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgaXQgYWdhaW4uXG4gICAgICAgICAgICAgIHJvb3QubGFzdFBpbmdlZFRpbWUgPSBsYXN0U3VzcGVuZGVkVGltZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZEF0VGltZShyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgIHZhciBfbGFzdFN1c3BlbmRlZFRpbWUgPSByb290Lmxhc3RTdXNwZW5kZWRUaW1lO1xuXG4gICAgICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gX2xhc3RTdXNwZW5kZWRUaW1lKSB7XG4gICAgICAgICAgcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWwgPSBnZXRSZW1haW5pbmdFeHBpcmF0aW9uVGltZShmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgZmx1c2hTdXNwZW5zZVByaW9yaXR5V2FybmluZ0luREVWKCk7XG5cbiAgICAgICAgaWYgKCAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICEodHJ1ZSAmJiBmbHVzaFN1c3BlbnNlRmFsbGJhY2tzSW5UZXN0cyAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50KSkge1xuICAgICAgICAgIC8vIFdlJ3JlIHN1c3BlbmRlZCBpbiBhIHN0YXRlIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQuIFdlJ2xsIHRyeSB0b1xuICAgICAgICAgIC8vIGF2b2lkIGNvbW1pdHRpbmcgaXQgZm9yIGFzIGxvbmcgYXMgdGhlIHRpbWVvdXRzIGxldCB1cy5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290SGFzUGVuZGluZ1BpbmcpIHtcbiAgICAgICAgICAgIHZhciBfbGFzdFBpbmdlZFRpbWUgPSByb290Lmxhc3RQaW5nZWRUaW1lO1xuXG4gICAgICAgICAgICBpZiAoX2xhc3RQaW5nZWRUaW1lID09PSBOb1dvcmsgfHwgX2xhc3RQaW5nZWRUaW1lID49IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIHdhcyBwaW5nZWQgYnV0IHdlIGRpZG4ndCBnZXQgdG8gcmVzdGFydCBlYXJsaWVyXG4gICAgICAgICAgICAgIC8vIHNvIHRyeSByZXN0YXJ0aW5nIG5vdyBpbnN0ZWFkLlxuICAgICAgICAgICAgICByb290Lmxhc3RQaW5nZWRUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gICAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9uZXh0VGltZSA9IGdldE5leHRSb290RXhwaXJhdGlvblRpbWVUb1dvcmtPbihyb290KTtcblxuICAgICAgICAgIGlmIChfbmV4dFRpbWUgIT09IE5vV29yayAmJiBfbmV4dFRpbWUgIT09IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2xhc3RTdXNwZW5kZWRUaW1lICE9PSBOb1dvcmsgJiYgX2xhc3RTdXNwZW5kZWRUaW1lICE9PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHByZWZlciB0byByZW5kZXIgdGhlIGZhbGxiYWNrIG9mIGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgcm9vdC5sYXN0UGluZ2VkVGltZSA9IF9sYXN0U3VzcGVuZGVkVGltZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQ7XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0ICE9PSBTeW5jKSB7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIHByb2Nlc3NlZCBhIHN1c3BlbnNlIGNvbmZpZyB3aG9zZSBleHBpcmF0aW9uIHRpbWUgd2VcbiAgICAgICAgICAgIC8vIGNhbiB1c2UgYXMgdGhlIHRpbWVvdXQuXG4gICAgICAgICAgICBfbXNVbnRpbFRpbWVvdXQgPSBleHBpcmF0aW9uVGltZVRvTXMod29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0KSAtIG5vdygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAod29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0UHJvY2Vzc2VkRXhwaXJhdGlvblRpbWUgPT09IFN5bmMpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG5vcm1hbGx5IGhhcHBlbiBiZWNhdXNlIG9ubHkgbmV3IHVwZGF0ZXNcbiAgICAgICAgICAgIC8vIGNhdXNlIGRlbGF5ZWQgc3RhdGVzLCBzbyB3ZSBzaG91bGQgaGF2ZSBwcm9jZXNzZWQgc29tZXRoaW5nLlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgdGhpcyBjb3VsZCBhbHNvIGhhcHBlbiBpbiBhbiBvZmZzY3JlZW4gdHJlZS5cbiAgICAgICAgICAgIF9tc1VudGlsVGltZW91dCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzdXNwZW5zZSBjb25maWcsIHdlJ3JlIGdvaW5nIHRvIHVzZSBhXG4gICAgICAgICAgICAvLyBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIGhvdyBsb25nIHdlIGNhbiBzdXNwZW5kLlxuICAgICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gaW5mZXJUaW1lRnJvbUV4cGlyYXRpb25UaW1lKHdvcmtJblByb2dyZXNzUm9vdExhdGVzdFByb2Nlc3NlZEV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGltZU1zID0gbm93KCk7XG4gICAgICAgICAgICB2YXIgdGltZVVudGlsRXhwaXJhdGlvbk1zID0gZXhwaXJhdGlvblRpbWVUb01zKGV4cGlyYXRpb25UaW1lKSAtIGN1cnJlbnRUaW1lTXM7XG4gICAgICAgICAgICB2YXIgdGltZUVsYXBzZWQgPSBjdXJyZW50VGltZU1zIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICAgIGlmICh0aW1lRWxhcHNlZCA8IDApIHtcbiAgICAgICAgICAgICAgLy8gV2UgZ2V0IHRoaXMgd3Jvbmcgc29tZSB0aW1lIHNpbmNlIHdlIGVzdGltYXRlIHRoZSB0aW1lLlxuICAgICAgICAgICAgICB0aW1lRWxhcHNlZCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZCkgLSB0aW1lRWxhcHNlZDsgLy8gQ2xhbXAgdGhlIHRpbWVvdXQgdG8gdGhlIGV4cGlyYXRpb24gdGltZS4gVE9ETzogT25jZSB0aGVcbiAgICAgICAgICAgIC8vIGV2ZW50IHRpbWUgaXMgZXhhY3QgaW5zdGVhZCBvZiBpbmZlcnJlZCBmcm9tIGV4cGlyYXRpb24gdGltZVxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0aGlzLlxuXG4gICAgICAgICAgICBpZiAodGltZVVudGlsRXhwaXJhdGlvbk1zIDwgX21zVW50aWxUaW1lb3V0KSB7XG4gICAgICAgICAgICAgIF9tc1VudGlsVGltZW91dCA9IHRpbWVVbnRpbEV4cGlyYXRpb25NcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgaWYgKCAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICEodHJ1ZSAmJiBmbHVzaFN1c3BlbnNlRmFsbGJhY2tzSW5UZXN0cyAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50KSAmJiB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSAhPT0gU3luYyAmJiB3b3JrSW5Qcm9ncmVzc1Jvb3RDYW5TdXNwZW5kVXNpbmdDb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGV4Y2VlZGVkIHRoZSBtaW5pbXVtIGxvYWRpbmcgZGVsYXksIHdoaWNoIHByb2JhYmx5XG4gICAgICAgICAgLy8gbWVhbnMgd2UgaGF2ZSBzaG93biBhIHNwaW5uZXIgYWxyZWFkeSwgd2UgbWlnaHQgaGF2ZSB0byBzdXNwZW5kXG4gICAgICAgICAgLy8gYSBiaXQgbG9uZ2VyIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGlubmVyIGlzIHNob3duIGZvclxuICAgICAgICAgIC8vIGVub3VnaCB0aW1lLlxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQyID0gY29tcHV0ZU1zVW50aWxTdXNwZW5zZUxvYWRpbmdEZWxheSh3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSwgZXhwaXJhdGlvblRpbWUsIHdvcmtJblByb2dyZXNzUm9vdENhblN1c3BlbmRVc2luZ0NvbmZpZyk7XG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0MiA+IDEwKSB7XG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZEF0VGltZShyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCkge1xuICAvLyBDaGVjayBpZiB0aGVyZSdzIGV4cGlyZWQgd29yayBvbiB0aGlzIHJvb3QuIE90aGVyd2lzZSwgcmVuZGVyIGF0IFN5bmMuXG4gIHZhciBsYXN0RXhwaXJlZFRpbWUgPSByb290Lmxhc3RFeHBpcmVkVGltZTtcbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gbGFzdEV4cGlyZWRUaW1lICE9PSBOb1dvcmsgPyBsYXN0RXhwaXJlZFRpbWUgOiBTeW5jO1xuXG4gIGlmIChyb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPT09IGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgcGVuZGluZyBjb21taXQgYXQgdGhpcyBleHBpcmF0aW9uIHRpbWUuXG4gICAgLy8gVE9ETzogVGhpcyBpcyBwb29ybHkgZmFjdG9yZWQuIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyBmb3IgdGhlXG4gICAgLy8gYmF0Y2guY29tbWl0KCkgQVBJLlxuICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7IC8vIElmIHRoZSByb290IG9yIGV4cGlyYXRpb24gdGltZSBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gICAgaWYgKHJvb3QgIT09IHdvcmtJblByb2dyZXNzUm9vdCB8fCBleHBpcmF0aW9uVGltZSAhPT0gcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgfSAvLyBJZiB3ZSBoYXZlIGEgd29yay1pbi1wcm9ncmVzcyBmaWJlciwgaXQgbWVhbnMgdGhlcmUncyBzdGlsbCB3b3JrIHRvIGRvXG4gICAgLy8gaW4gdGhpcyByb290LlxuXG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcihyb290KTtcbiAgICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcbiAgICAgIHN0YXJ0V29ya0xvb3BUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuXG4gICAgICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgICAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgICAgc3RvcEludGVycnVwdGVkV29ya0xvb3BUaW1lcigpO1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAgICAgICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG4gICAgICAgIHN0b3BGaW5pc2hlZFdvcmtMb29wVGltZXIoKTtcbiAgICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICByb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICAgICAgZmluaXNoU3luY1JlbmRlcihyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICB9IC8vIEJlZm9yZSBleGl0aW5nLCBtYWtlIHN1cmUgdGhlcmUncyBhIGNhbGxiYWNrIHNjaGVkdWxlZCBmb3IgdGhlIG5leHRcbiAgICAgIC8vIHBlbmRpbmcgbGV2ZWwuXG5cblxuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hTeW5jUmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFNldCB0aGlzIHRvIG51bGwgdG8gaW5kaWNhdGUgdGhlcmUncyBubyBpbi1wcm9ncmVzcyByZW5kZXIuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG5cbiAge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkIHx8IGV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgIGZsdXNoU3VzcGVuc2VQcmlvcml0eVdhcm5pbmdJbkRFVigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbW1pdFJvb3Qocm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUm9vdChyb290LCBleHBpcmF0aW9uVGltZSkge1xuICBtYXJrUm9vdEV4cGlyZWRBdFRpbWUocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIGlmICh0cnVlICYmIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAndW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgJyArICdhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgICB9IC8vIFdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nLCBzbyB3ZSBjYW4ndCBzeW5jaHJvbm91c2x5IGZsdXNoIHBlbmRpbmcgd29yay5cbiAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGEgbmVzdGVkIGV2ZW50IGRpc3BhdGNoIHRyaWdnZXJlZCBieSBhIGxpZmVjeWNsZS9lZmZlY3QsXG4gICAgLy8gbGlrZSBgZWwuZm9jdXMoKWAuIEV4aXQuXG5cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpOyAvLyBJZiB0aGUgZGlzY3JldGUgdXBkYXRlcyBzY2hlZHVsZWQgcGFzc2l2ZSBlZmZlY3RzLCBmbHVzaCB0aGVtIG5vdyBzbyB0aGF0XG4gIC8vIHRoZXkgZmlyZSBiZWZvcmUgdGhlIG5leHQgc2VyaWFsIGV2ZW50LlxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbn1cblxuZnVuY3Rpb24gc3luY1VwZGF0ZXMoZm4sIGEsIGIsIGMpIHtcbiAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQyKEltbWVkaWF0ZVByaW9yaXR5LCBmbi5iaW5kKG51bGwsIGEsIGIsIGMpKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCkge1xuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIC8vIEZvciBlYWNoIHJvb3Qgd2l0aCBwZW5kaW5nIGRpc2NyZXRlIHVwZGF0ZXMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG9cbiAgICAvLyBpbW1lZGlhdGVseSBmbHVzaCB0aGVtLlxuICAgIHZhciByb290cyA9IHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXM7XG4gICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdHMuZm9yRWFjaChmdW5jdGlvbiAoZXhwaXJhdGlvblRpbWUsIHJvb3QpIHtcbiAgICAgIG1hcmtSb290RXhwaXJlZEF0VGltZShyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfSk7IC8vIE5vdyBmbHVzaCB0aGUgaW1tZWRpYXRlIHF1ZXVlLlxuXG4gICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBFdmVudENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzJDEoZm4sIGEsIGIsIGMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBEaXNjcmV0ZUV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIC8vIFNob3VsZCB0aGlzXG4gICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQyKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYykpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIEl0IGNhbm5vdCBiZSBjYWxsZWQgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMihJbW1lZGlhdGVQcmlvcml0eSwgZm4uYmluZChudWxsLCBhKSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICB9XG59XG5mdW5jdGlvbiBmbHVzaENvbnRyb2xsZWQoZm4pIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJ1bldpdGhQcmlvcml0eSQyKEltbWVkaWF0ZVByaW9yaXR5LCBmbik7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBleHBpcmF0aW9uVGltZSkge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG5cbiAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgIC8vIHN0YXRlLiBOb3cgdGhhdCB3ZSBoYXZlIGFkZGl0aW9uYWwgd29yaywgY2FuY2VsIHRoZSB0aW1lb3V0LlxuICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yayk7XG4gICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsLCBleHBpcmF0aW9uVGltZSk7XG4gIHJlbmRlckV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdExhdGVzdFByb2Nlc3NlZEV4cGlyYXRpb25UaW1lID0gU3luYztcbiAgd29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0ID0gU3luYztcbiAgd29ya0luUHJvZ3Jlc3NSb290Q2FuU3VzcGVuZFVzaW5nQ29uZmlnID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290TmV4dFVucHJvY2Vzc2VkVXBkYXRlVGltZSA9IE5vV29yaztcbiAgd29ya0luUHJvZ3Jlc3NSb290SGFzUGVuZGluZ1BpbmcgPSBmYWxzZTtcblxuICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gICAgY29tcG9uZW50c1RoYXRUcmlnZ2VyZWRIaWdoUHJpU3VzcGVuZCA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzKCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHRvIGJlIHdvcmtpbmcgb24gYSBub24tcm9vdCBmaWJlci4gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgICAgIC8vIHN1cHBvc2VkIHRvIGNhcHR1cmUgYWxsIGVycm9ycyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IGFuIGVycm9yXG4gICAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIHdvcmtJblByb2dyZXNzLnJldHVybiwgd29ya0luUHJvZ3Jlc3MsIHRocm93blZhbHVlLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBjYXRjaCAoeWV0QW5vdGhlclRocm93blZhbHVlKSB7XG4gICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHJldHVybiBwYXRoIGFsc28gdGhyZXcuXG4gICAgICB0aHJvd25WYWx1ZSA9IHlldEFub3RoZXJUaHJvd25WYWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcihyb290KSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaEludGVyYWN0aW9ucyhyb290KSB7XG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93KCk7XG59XG5mdW5jdGlvbiBtYXJrUmVuZGVyRXZlbnRUaW1lQW5kQ29uZmlnKGV4cGlyYXRpb25UaW1lLCBzdXNwZW5zZUNvbmZpZykge1xuICBpZiAoZXhwaXJhdGlvblRpbWUgPCB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSAmJiBleHBpcmF0aW9uVGltZSA+IElkbGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgaWYgKHN1c3BlbnNlQ29uZmlnICE9PSBudWxsKSB7XG4gICAgaWYgKGV4cGlyYXRpb25UaW1lIDwgd29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0ICYmIGV4cGlyYXRpb25UaW1lID4gSWRsZSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290TGF0ZXN0U3VzcGVuc2VUaW1lb3V0ID0gZXhwaXJhdGlvblRpbWU7IC8vIE1vc3Qgb2YgdGhlIHRpbWUgd2Ugb25seSBoYXZlIG9uZSBjb25maWcgYW5kIGdldHRpbmcgd3JvbmcgaXMgbm90IGJhZC5cblxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290Q2FuU3VzcGVuZFVzaW5nQ29uZmlnID0gc3VzcGVuc2VDb25maWc7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrVW5wcm9jZXNzZWRVcGRhdGVUaW1lKGV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChleHBpcmF0aW9uVGltZSA+IHdvcmtJblByb2dyZXNzUm9vdE5leHRVbnByb2Nlc3NlZFVwZGF0ZVRpbWUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3ROZXh0VW5wcm9jZXNzZWRVcGRhdGVUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBsb3dlciBwcmlvcml0eSB1cGRhdGUgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290TmV4dFVucHJvY2Vzc2VkVXBkYXRlVGltZSAhPT0gTm9Xb3JrICYmIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCwgYW5kIHRoZW4gbWFyayB0aGF0IHRoZXJlJ3MgYVxuICAgIC8vIHBlbmRpbmcgdXBkYXRlLlxuICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIGltbWVkaWF0ZWx5IGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIsIGluc3RlYWRcbiAgICAvLyBvZiB3YWl0aW5nIHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG4gICAgbWFya1Jvb3RTdXNwZW5kZWRBdFRpbWUod29ya0luUHJvZ3Jlc3NSb290LCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgbWFya1Jvb3RVcGRhdGVkQXRUaW1lKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290TmV4dFVucHJvY2Vzc2VkVXBkYXRlVGltZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdENvbXBsZXRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgfVxufSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbi8vIFJldHVybnMgZmFsc2UgaWYgd2UncmUgbm90IHN1cmUuXG5cbmZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgLy8gc28gdGhvc2UgYXJlIGZhbHNlLlxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGU7XG59XG5cbmZ1bmN0aW9uIGluZmVyVGltZUZyb21FeHBpcmF0aW9uVGltZShleHBpcmF0aW9uVGltZSkge1xuICAvLyBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hlbiB0aGUgdXBkYXRlIHdhcyBzY2hlZHVsZWQsIGJ1dCB3ZSBjYW4gaW5mZXIgYW5cbiAgLy8gYXBwcm94aW1hdGUgc3RhcnQgdGltZSBmcm9tIHRoZSBleHBpcmF0aW9uIHRpbWUuXG4gIHZhciBlYXJsaWVzdEV4cGlyYXRpb25UaW1lTXMgPSBleHBpcmF0aW9uVGltZVRvTXMoZXhwaXJhdGlvblRpbWUpO1xuICByZXR1cm4gZWFybGllc3RFeHBpcmF0aW9uVGltZU1zIC0gTE9XX1BSSU9SSVRZX0VYUElSQVRJT047XG59XG5cbmZ1bmN0aW9uIGluZmVyVGltZUZyb21FeHBpcmF0aW9uVGltZVdpdGhTdXNwZW5zZUNvbmZpZyhleHBpcmF0aW9uVGltZSwgc3VzcGVuc2VDb25maWcpIHtcbiAgLy8gV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoZW4gdGhlIHVwZGF0ZSB3YXMgc2NoZWR1bGVkLCBidXQgd2UgY2FuIGluZmVyIGFuXG4gIC8vIGFwcHJveGltYXRlIHN0YXJ0IHRpbWUgZnJvbSB0aGUgZXhwaXJhdGlvbiB0aW1lIGJ5IHN1YnRyYWN0aW5nIHRoZSB0aW1lb3V0XG4gIC8vIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBldmVudCB0aW1lLlxuICB2YXIgZWFybGllc3RFeHBpcmF0aW9uVGltZU1zID0gZXhwaXJhdGlvblRpbWVUb01zKGV4cGlyYXRpb25UaW1lKTtcbiAgcmV0dXJuIGVhcmxpZXN0RXhwaXJhdGlvblRpbWVNcyAtIChzdXNwZW5zZUNvbmZpZy50aW1lb3V0TXMgfCAwIHx8IExPV19QUklPUklUWV9FWFBJUkFUSU9OKTtcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkKCkpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCQkMSA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzdGFydFdvcmtUaW1lcih1bml0T2ZXb3JrKTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgbmV4dCA9IGJlZ2luV29yayQkMShjdXJyZW50JCQxLCB1bml0T2ZXb3JrLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7XG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJCQxKGN1cnJlbnQkJDEsIHVuaXRPZldvcmssIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIG5leHQgPSBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH1cblxuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50JCQxID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgIHZhciByZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnJldHVybjsgLy8gQ2hlY2sgaWYgdGhlIHdvcmsgY29tcGxldGVkIG9yIGlmIHNvbWV0aGluZyB0aHJldy5cblxuICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnICYgSW5jb21wbGV0ZSkgPT09IE5vRWZmZWN0KSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICghZW5hYmxlUHJvZmlsZXJUaW1lciB8fCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCQkMSwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckV4cGlyYXRpb25UaW1lKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBzdG9wV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICByZXNldENoaWxkRXhwaXJhdGlvblRpbWUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmVmZmVjdFRhZyAmIEluY29tcGxldGUpID09PSBOb0VmZmVjdCkge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZWZmZWN0VGFnID0gd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGVmZmVjdFRhZyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgX25leHQgPSB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJFeHBpcmF0aW9uVGltZSk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEod29ya0luUHJvZ3Jlc3MsIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIC8vIFRPRE86IFRoZSBuYW1lIHN0b3BGYWlsZWRXb3JrVGltZXIgaXMgbWlzbGVhZGluZyBiZWNhdXNlIFN1c3BlbnNlXG4gICAgICAgIC8vIGFsc28gY2FwdHVyZXMgYW5kIHJlc3RhcnRzLlxuICAgICAgICBzdG9wRmFpbGVkV29ya1RpbWVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgX25leHQuZWZmZWN0VGFnICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICByZXR1cm4gX25leHQ7XG4gICAgICB9XG5cbiAgICAgIHN0b3BXb3JrVGltZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZWZmZWN0VGFnIHw9IEluY29tcGxldGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgcmV0dXJuIHNpYmxpbmdGaWJlcjtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nRXhwaXJhdGlvblRpbWUoZmliZXIpIHtcbiAgdmFyIHVwZGF0ZUV4cGlyYXRpb25UaW1lID0gZmliZXIuZXhwaXJhdGlvblRpbWU7XG4gIHZhciBjaGlsZEV4cGlyYXRpb25UaW1lID0gZmliZXIuY2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgcmV0dXJuIHVwZGF0ZUV4cGlyYXRpb25UaW1lID4gY2hpbGRFeHBpcmF0aW9uVGltZSA/IHVwZGF0ZUV4cGlyYXRpb25UaW1lIDogY2hpbGRFeHBpcmF0aW9uVGltZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lKGNvbXBsZXRlZFdvcmspIHtcbiAgaWYgKHJlbmRlckV4cGlyYXRpb25UaW1lICE9PSBOZXZlciAmJiBjb21wbGV0ZWRXb3JrLmNoaWxkRXhwaXJhdGlvblRpbWUgPT09IE5ldmVyKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9uZW50IGFyZSBoaWRkZW4uIERvbid0IGJ1YmJsZSB0aGVpclxuICAgIC8vIGV4cGlyYXRpb24gdGltZXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAvLyBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgLy8gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91c1xuICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuXG4gICAgdmFyIHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucyA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsIHx8IGNvbXBsZXRlZFdvcmsuY2hpbGQgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkO1xuICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHZhciBjaGlsZFVwZGF0ZUV4cGlyYXRpb25UaW1lID0gY2hpbGQuZXhwaXJhdGlvblRpbWU7XG4gICAgICB2YXIgY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lID0gY2hpbGQuY2hpbGRFeHBpcmF0aW9uVGltZTtcblxuICAgICAgaWYgKGNoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPiBuZXdDaGlsZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBjaGlsZFVwZGF0ZUV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lID4gbmV3Q2hpbGRFeHBpcmF0aW9uVGltZSkge1xuICAgICAgICBuZXdDaGlsZEV4cGlyYXRpb25UaW1lID0gY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2NoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPSBfY2hpbGQuZXhwaXJhdGlvblRpbWU7XG4gICAgICB2YXIgX2NoaWxkQ2hpbGRFeHBpcmF0aW9uVGltZSA9IF9jaGlsZC5jaGlsZEV4cGlyYXRpb25UaW1lO1xuXG4gICAgICBpZiAoX2NoaWxkVXBkYXRlRXhwaXJhdGlvblRpbWUgPiBuZXdDaGlsZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBfY2hpbGRVcGRhdGVFeHBpcmF0aW9uVGltZTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZENoaWxkRXhwaXJhdGlvblRpbWUgPiBuZXdDaGlsZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgIG5ld0NoaWxkRXhwaXJhdGlvblRpbWUgPSBfY2hpbGRDaGlsZEV4cGlyYXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZWRXb3JrLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBuZXdDaGlsZEV4cGlyYXRpb25UaW1lO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QpIHtcbiAgdmFyIHJlbmRlclByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICBydW5XaXRoUHJpb3JpdHkkMihJbW1lZGlhdGVQcmlvcml0eSwgY29tbWl0Um9vdEltcGwuYmluZChudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290SW1wbChyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIGRvIHtcbiAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzaXZlIGVmZmVjdHMuIFNvIHdlIG5lZWQgdG8ga2VlcCBmbHVzaGluZyBpbiBhIGxvb3AgdW50aWwgdGhlcmUgYXJlXG4gICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAvLyBmbHVzaCBzeW5jaHJvbm91cyB3b3JrIGF0IHRoZSBlbmQsIHRvIGF2b2lkIGZhY3RvcmluZyBoYXphcmRzIGxpa2UgdGhpcy5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKTtcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgZXhwaXJhdGlvblRpbWUgPSByb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWU7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICB9XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJvb3QuY2FsbGJhY2tFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9Qcmlvcml0eTtcbiAgcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWwgPSBOb1dvcms7XG4gIHN0YXJ0Q29tbWl0VGltZXIoKTsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nRXhwaXJhdGlvblRpbWVCZWZvcmVDb21taXQgPSBnZXRSZW1haW5pbmdFeHBpcmF0aW9uVGltZShmaW5pc2hlZFdvcmspO1xuICBtYXJrUm9vdEZpbmlzaGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lLCByZW1haW5pbmdFeHBpcmF0aW9uVGltZUJlZm9yZUNvbW1pdCk7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICByZW5kZXJFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgfSBlbHNlIHt9IC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGxhc3Qgcm9vdCB3ZSB3b3JrZWQgb24gaXMgbm90IHRoZSBzYW1lIG9uZSB0aGF0XG4gIC8vIHdlJ3JlIGNvbW1pdHRpbmcgbm93LiBUaGlzIG1vc3QgY29tbW9ubHkgaGFwcGVucyB3aGVuIGEgc3VzcGVuZGVkIHJvb3RcbiAgLy8gdGltZXMgb3V0LlxuICAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmVmZmVjdFRhZyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAvLyBBIGZpYmVyJ3MgZWZmZWN0IGxpc3QgY29uc2lzdHMgb25seSBvZiBpdHMgY2hpbGRyZW4sIG5vdCBpdHNlbGYuIFNvIGlmXG4gICAgLy8gdGhlIHJvb3QgaGFzIGFuIGVmZmVjdCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhlXG4gICAgLy8gcmVzdWx0aW5nIGxpc3QgaXMgdGhlIHNldCB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgcm9vdCdzIHBhcmVudCwgaWYgaXRcbiAgICAvLyBoYWQgb25lOyB0aGF0IGlzLCBhbGwgdGhlIGVmZmVjdHMgaW4gdGhlIHRyZWUgaW5jbHVkaW5nIHRoZSByb290LlxuICAgIGlmIChmaW5pc2hlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gZWZmZWN0IG9uIHRoZSByb290LlxuICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICB9XG5cbiAgaWYgKGZpcnN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIHN0YXJ0Q29tbWl0U25hcHNob3RFZmZlY3RzVGltZXIoKTtcbiAgICBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHN0b3BDb21taXRTbmFwc2hvdEVmZmVjdHNUaW1lcigpO1xuXG4gICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfSAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbXV0YXRpb24gcGhhc2UsIHdoZXJlIHdlIG11dGF0ZSB0aGUgaG9zdCB0cmVlLlxuXG5cbiAgICBzdGFydENvbW1pdEhvc3RFZmZlY3RzVGltZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRNdXRhdGlvbkVmZmVjdHMsIG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHN0b3BDb21taXRIb3N0RWZmZWN0c1RpbWVyKCk7XG4gICAgcmVzZXRBZnRlckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcbiAgICAvLyB0aGUgaG9zdCB0cmVlIGFmdGVyIGl0J3MgYmVlbiBtdXRhdGVkLiBUaGUgaWRpb21hdGljIHVzZSBjYXNlIGZvciB0aGlzIGlzXG4gICAgLy8gbGF5b3V0LCBidXQgY2xhc3MgY29tcG9uZW50IGxpZmVjeWNsZXMgYWxzbyBmaXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zLlxuXG4gICAgc3RhcnRDb21taXRMaWZlQ3ljbGVzVGltZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRMYXlvdXRFZmZlY3RzLCBudWxsLCByb290LCBleHBpcmF0aW9uVGltZSk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvcjIgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IyKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICBzdG9wQ29tbWl0TGlmZUN5Y2xlc1RpbWVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHN0YXJ0Q29tbWl0U25hcHNob3RFZmZlY3RzVGltZXIoKTtcbiAgICBzdG9wQ29tbWl0U25hcHNob3RFZmZlY3RzVGltZXIoKTtcblxuICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuXG4gICAgc3RhcnRDb21taXRIb3N0RWZmZWN0c1RpbWVyKCk7XG4gICAgc3RvcENvbW1pdEhvc3RFZmZlY3RzVGltZXIoKTtcbiAgICBzdGFydENvbW1pdExpZmVDeWNsZXNUaW1lcigpO1xuICAgIHN0b3BDb21taXRMaWZlQ3ljbGVzVGltZXIoKTtcbiAgfVxuXG4gIHN0b3BDb21taXRUaW1lcigpO1xuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzRXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5TGV2ZWw7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgZWZmZWN0IGNoYWluIGF0IHRoaXMgcG9pbnQgc28gbGV0J3MgY2xlYXIgdGhlXG4gICAgLy8gbmV4dEVmZmVjdCBwb2ludGVycyB0byBhc3Npc3Qgd2l0aCBHQy4gSWYgd2UgaGF2ZSBwYXNzaXZlIGVmZmVjdHMsIHdlJ2xsXG4gICAgLy8gY2xlYXIgdGhpcyBpbiBmbHVzaFBhc3NpdmVFZmZlY3RzLlxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICBuZXh0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgbmV4dEVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICAgIH1cbiAgfSAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG5cbiAgdmFyIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID0gcm9vdC5maXJzdFBlbmRpbmdUaW1lO1xuXG4gIGlmIChyZW1haW5pbmdFeHBpcmF0aW9uVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzLCB0aGVuIHdlIGNhbiBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgZmx1c2hlZC5cbiAgICAgIC8vIFdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciByZW1haW5pbmcgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQsXG4gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHByZW1hdHVyZWx5IHNpZ25hbCBjb21wbGV0ZSBmb3IgaW50ZXJhY3Rpb25zIHdoZW4gdGhlcmUncyBlLmcuIGhpZGRlbiB3b3JrLlxuICAgICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lID09PSBTeW5jKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIGV4cGlyYXRpb25UaW1lKTsgLy8gQWx3YXlzIGNhbGwgdGhpcyBiZWZvcmUgZXhpdGluZyBgY29tbWl0Um9vdGAsIHRvIGVuc3VyZSB0aGF0IGFueVxuICAvLyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290IGlzIHNjaGVkdWxlZC5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjMgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBfZXJyb3IzO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBXZSBqdXN0IGNvbW1pdHRlZCB0aGUgaW5pdGlhbCBtb3VudCBvZlxuICAgIC8vIGEgUmVhY3RET00ucmVuZGVyLWVkIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzLiBUaGUgY29tbWl0IGZpcmVkXG4gICAgLy8gc3luY2hyb25vdXNseSwgYnV0IGxheW91dCB1cGRhdGVzIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGJhdGNoLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZWZmZWN0VGFnID0gbmV4dEVmZmVjdC5lZmZlY3RUYWc7XG5cbiAgICBpZiAoKGVmZmVjdFRhZyAmIFNuYXBzaG90KSAhPT0gTm9FZmZlY3QpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICAgIHJlY29yZEVmZmVjdCgpO1xuICAgICAgdmFyIGN1cnJlbnQkJDEgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50JCQxLCBuZXh0RWZmZWN0KTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKChlZmZlY3RUYWcgJiBQYXNzaXZlKSAhPT0gTm9FZmZlY3QpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBidWxrIG9mIHRoaXMgZnVuY3Rpb24gdG8gY29tbWl0V29yay5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGVmZmVjdFRhZyA9IG5leHRFZmZlY3QuZWZmZWN0VGFnO1xuXG4gICAgaWYgKGVmZmVjdFRhZyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZWZmZWN0VGFnICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCQkMSA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCQkMSAhPT0gbnVsbCkge1xuICAgICAgICBjb21taXREZXRhY2hSZWYoY3VycmVudCQkMSk7XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzdGF0ZW1lbnQgaXMgb25seSBjb25jZXJuZWQgYWJvdXQgcGxhY2VtZW50LFxuICAgIC8vIHVwZGF0ZXMsIGFuZCBkZWxldGlvbnMuIFRvIGF2b2lkIG5lZWRpbmcgdG8gYWRkIGEgY2FzZSBmb3IgZXZlcnkgcG9zc2libGVcbiAgICAvLyBiaXRtYXAgdmFsdWUsIHdlIHJlbW92ZSB0aGUgc2Vjb25kYXJ5IGVmZmVjdHMgZnJvbSB0aGUgZWZmZWN0IHRhZyBhbmRcbiAgICAvLyBzd2l0Y2ggb24gdGhhdCB2YWx1ZS5cblxuXG4gICAgdmFyIHByaW1hcnlFZmZlY3RUYWcgPSBlZmZlY3RUYWcgJiAoUGxhY2VtZW50IHwgVXBkYXRlIHwgRGVsZXRpb24gfCBIeWRyYXRpbmcpO1xuXG4gICAgc3dpdGNoIChwcmltYXJ5RWZmZWN0VGFnKSB7XG4gICAgICBjYXNlIFBsYWNlbWVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAgIC8vIFRPRE86IGZpbmRET01Ob2RlIGRvZXNuJ3QgcmVseSBvbiB0aGlzIGFueSBtb3JlIGJ1dCBpc01vdW50ZWQgZG9lc1xuICAgICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5lZmZlY3RUYWcgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5lZmZlY3RUYWcgJj0gflBsYWNlbWVudDsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZzpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZWZmZWN0VGFnICY9IH5IeWRyYXRpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmdBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmVmZmVjdFRhZyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0LCByZW5kZXJQcmlvcml0eUxldmVsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0gLy8gVE9ETzogT25seSByZWNvcmQgYSBtdXRhdGlvbiBlZmZlY3QgaWYgcHJpbWFyeUVmZmVjdFRhZyBpcyBub24temVyby5cblxuXG4gICAgcmVjb3JkRWZmZWN0KCk7XG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMocm9vdCwgY29tbWl0dGVkRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZWZmZWN0VGFnID0gbmV4dEVmZmVjdC5lZmZlY3RUYWc7XG5cbiAgICBpZiAoZWZmZWN0VGFnICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgcmVjb3JkRWZmZWN0KCk7XG4gICAgICB2YXIgY3VycmVudCQkMSA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGlmZUN5Y2xlcyhyb290LCBjdXJyZW50JCQxLCBuZXh0RWZmZWN0LCBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSk7XG4gICAgfVxuXG4gICAgaWYgKGVmZmVjdFRhZyAmIFJlZikge1xuICAgICAgcmVjb3JkRWZmZWN0KCk7XG4gICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSkge1xuICAgIHZhciBwcmlvcml0eUxldmVsID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPiBOb3JtYWxQcmlvcml0eSA/IE5vcm1hbFByaW9yaXR5IDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5O1xuICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eUxldmVsLCBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHM7XG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0V4cGlyYXRpb25UaW1lO1xuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0V4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3RcbiAgLy8gZmliZXIsIGJlY2F1c2UgdGhlIHJvb3QgaXMgbm90IHBhcnQgb2YgaXRzIG93biBlZmZlY3QgbGlzdC4gVGhpcyBjb3VsZFxuICAvLyBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuICB2YXIgZWZmZWN0ID0gcm9vdC5jdXJyZW50LmZpcnN0RWZmZWN0O1xuXG4gIHdoaWxlIChlZmZlY3QgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZWZmZWN0KTtcbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRQYXNzaXZlSG9va0VmZmVjdHMsIG51bGwsIGVmZmVjdCk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKGVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihlZmZlY3QsIGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBlZmZlY3QubmV4dEVmZmVjdDsgLy8gUmVtb3ZlIG5leHRFZmZlY3QgcG9pbnRlciB0byBhc3Npc3QgR0NcblxuICAgIGVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBlZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgfVxuXG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWUpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmMpO1xuICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlVGltZUZyb21GaWJlclRvUm9vdChyb290RmliZXIsIFN5bmMpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCAvLyBUT0RPOiBUaGlzIGlzIGFsd2F5cyBzeW5jXG4gICAgICAgIFN5bmMpO1xuICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVUaW1lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBTeW5jKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luYyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHRoZW5hYmxlLCBzdXNwZW5kZWRUaW1lKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHRoZW5hYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh0aGVuYWJsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIHJlbmRlckV4cGlyYXRpb25UaW1lID09PSBzdXNwZW5kZWRUaW1lKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZCBzbyB3ZSBjYW4gYWx3YXlzXG4gICAgLy8gcmVzdGFydC4gSWYgd2UncmUgc3VzcGVuZGVkIHdpdGhvdXQgYW55IHVwZGF0ZXMsIGl0IG1pZ2h0IGJlIGEgcmV0cnkuXG4gICAgLy8gSWYgaXQncyBlYXJseSBpbiB0aGUgcmV0cnkgd2UgY2FuIHJlc3RhcnQuIFdlIGNhbid0IGtub3cgZm9yIHN1cmVcbiAgICAvLyB3aGV0aGVyIHdlJ2xsIGV2ZW50dWFsbHkgcHJvY2VzcyBhbiB1cGRhdGUgZHVyaW5nIHRoaXMgcmVuZGVyIHBhc3MsXG4gICAgLy8gYnV0IGl0J3Mgc29tZXdoYXQgdW5saWtlbHkgdGhhdCB3ZSBnZXQgdG8gYSBwaW5nIGJlZm9yZSB0aGF0LCBzaW5jZVxuICAgIC8vIGdldHRpbmcgdG8gdGhlIHJvb3QgbW9zdCB1cGRhdGUgaXMgdXN1YWxseSB2ZXJ5IGZhc3QuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJiB3b3JrSW5Qcm9ncmVzc1Jvb3RMYXRlc3RQcm9jZXNzZWRFeHBpcmF0aW9uVGltZSA9PT0gU3luYyAmJiBub3coKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUykge1xuICAgICAgLy8gUmVzdGFydCBmcm9tIHRoZSByb290LiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgcGluZyBiZWNhdXNlXG4gICAgICAvLyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb24gdGhpcyB0cmVlLlxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgcmVuZGVyRXhwaXJhdGlvblRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SGFzUGVuZGluZ1BpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaXNSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIHN1c3BlbmRlZFRpbWUpKSB7XG4gICAgLy8gVGhlIHJvb3QgaXMgbm8gbG9uZ2VyIHN1c3BlbmRlZCBhdCB0aGlzIHRpbWUuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGxhc3RQaW5nZWRUaW1lID0gcm9vdC5sYXN0UGluZ2VkVGltZTtcblxuICBpZiAobGFzdFBpbmdlZFRpbWUgIT09IE5vV29yayAmJiBsYXN0UGluZ2VkVGltZSA8IHN1c3BlbmRlZFRpbWUpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBsb3dlciBwcmlvcml0eSBwaW5nIHNjaGVkdWxlZC5cbiAgICByZXR1cm47XG4gIH0gLy8gTWFyayB0aGUgdGltZSBhdCB3aGljaCB0aGlzIHBpbmcgd2FzIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QubGFzdFBpbmdlZFRpbWUgPSBzdXNwZW5kZWRUaW1lO1xuXG4gIGlmIChyb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPT09IHN1c3BlbmRlZFRpbWUpIHtcbiAgICAvLyBJZiB0aGVyZSdzIGEgcGVuZGluZyBmYWxsYmFjayB3YWl0aW5nIHRvIGNvbW1pdCwgdGhyb3cgaXQgYXdheS5cbiAgICByb290LmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gICAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgc3VzcGVuZGVkVGltZSk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeVRpbWUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeVRpbWUgPT09IE5vV29yaykge1xuICAgIHZhciBzdXNwZW5zZUNvbmZpZyA9IG51bGw7IC8vIFJldHJpZXMgZG9uJ3QgY2Fycnkgb3ZlciB0aGUgYWxyZWFkeSBjb21taXR0ZWQgdXBkYXRlLlxuXG4gICAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7XG4gICAgcmV0cnlUaW1lID0gY29tcHV0ZUV4cGlyYXRpb25Gb3JGaWJlcihjdXJyZW50VGltZSwgYm91bmRhcnlGaWJlciwgc3VzcGVuc2VDb25maWcpO1xuICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG5cbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlVGltZUZyb21GaWJlclRvUm9vdChib3VuZGFyeUZpYmVyLCByZXRyeVRpbWUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeVRpbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJldHJ5VGltZSA9IE5vV29yaztcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHJldHJ5VGltZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlUaW1lO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5VGltZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlUaGVuYWJsZShib3VuZGFyeUZpYmVyLCB0aGVuYWJsZSkge1xuICB2YXIgcmV0cnlUaW1lID0gTm9Xb3JrOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAgaWYgKGVuYWJsZVN1c3BlbnNlU2VydmVyUmVuZGVyZXIpIHtcbiAgICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0cnlUaW1lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeVRpbWU7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlBpbmdlZCB1bmtub3duIHN1c3BlbnNlIGJvdW5kYXJ5IHR5cGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHRoZW5hYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUodGhlbmFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5VGltZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTXNVbnRpbFN1c3BlbnNlTG9hZGluZ0RlbGF5KG1vc3RSZWNlbnRFdmVudFRpbWUsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lLCBzdXNwZW5zZUNvbmZpZykge1xuICB2YXIgYnVzeU1pbkR1cmF0aW9uTXMgPSBzdXNwZW5zZUNvbmZpZy5idXN5TWluRHVyYXRpb25NcyB8IDA7XG5cbiAgaWYgKGJ1c3lNaW5EdXJhdGlvbk1zIDw9IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBidXN5RGVsYXlNcyA9IHN1c3BlbnNlQ29uZmlnLmJ1c3lEZWxheU1zIHwgMDsgLy8gQ29tcHV0ZSB0aGUgdGltZSB1bnRpbCB0aGlzIHJlbmRlciBwYXNzIHdvdWxkIGV4cGlyZS5cblxuICB2YXIgY3VycmVudFRpbWVNcyA9IG5vdygpO1xuICB2YXIgZXZlbnRUaW1lTXMgPSBpbmZlclRpbWVGcm9tRXhwaXJhdGlvblRpbWVXaXRoU3VzcGVuc2VDb25maWcobW9zdFJlY2VudEV2ZW50VGltZSwgc3VzcGVuc2VDb25maWcpO1xuICB2YXIgdGltZUVsYXBzZWQgPSBjdXJyZW50VGltZU1zIC0gZXZlbnRUaW1lTXM7XG5cbiAgaWYgKHRpbWVFbGFwc2VkIDw9IGJ1c3lEZWxheU1zKSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgd2FpdGVkIGxvbmdlciB0aGFuIHRoZSBpbml0aWFsIGRlbGF5LCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgdG8gd2FpdCBhbnkgYWRkaXRpb25hbCB0aW1lLlxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIG1zVW50aWxUaW1lb3V0ID0gYnVzeURlbGF5TXMgKyBidXN5TWluRHVyYXRpb25NcyAtIHRpbWVFbGFwc2VkOyAvLyBUaGlzIGlzIHRoZSB2YWx1ZSB0aGF0IGlzIHBhc3NlZCB0byBgc2V0VGltZW91dGAuXG5cbiAgcmV0dXJuIG1zVW50aWxUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgd2FybmluZyQxKGZhbHNlLCAnTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIGlmICh3YXJuQWJvdXREZXByZWNhdGVkTGlmZWN5Y2xlcykge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcEZpbmlzaGVkV29ya0xvb3BUaW1lcigpIHtcbiAgdmFyIGRpZENvbXBsZXRlUm9vdCA9IHRydWU7XG4gIHN0b3BXb3JrTG9vcFRpbWVyKGludGVycnVwdGVkQnksIGRpZENvbXBsZXRlUm9vdCk7XG4gIGludGVycnVwdGVkQnkgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBzdG9wSW50ZXJydXB0ZWRXb3JrTG9vcFRpbWVyKCkge1xuICAvLyBUT0RPOiBUcmFjayB3aGljaCBmaWJlciBjYXVzZWQgdGhlIGludGVycnVwdGlvbi5cbiAgdmFyIGRpZENvbXBsZXRlUm9vdCA9IGZhbHNlO1xuICBzdG9wV29ya0xvb3BUaW1lcihpbnRlcnJ1cHRlZEJ5LCBkaWRDb21wbGV0ZVJvb3QpO1xuICBpbnRlcnJ1cHRlZEJ5ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JJbnRlcnJ1cHRpb24oZmliZXJUaGF0UmVjZWl2ZWRVcGRhdGUsIHVwZGF0ZUV4cGlyYXRpb25UaW1lKSB7XG4gIGlmIChlbmFibGVVc2VyVGltaW5nQVBJICYmIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiB1cGRhdGVFeHBpcmF0aW9uVGltZSA+IHJlbmRlckV4cGlyYXRpb25UaW1lKSB7XG4gICAgaW50ZXJydXB0ZWRCeSA9IGZpYmVyVGhhdFJlY2VpdmVkVXBkYXRlO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQpIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJXMnLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoZmliZXIpKTtcbiAgfVxufVxuXG52YXIgYmVnaW5Xb3JrJCQxO1xuXG5pZiAodHJ1ZSAmJiByZXBsYXlGYWlsZWRVbml0T2ZXb3JrV2l0aEludm9rZUd1YXJkZWRDYWxsYmFjaykge1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJCQxID0gZnVuY3Rpb24gKGN1cnJlbnQkJDEsIHVuaXRPZldvcmssIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmskMShjdXJyZW50JCQxLCB1bml0T2ZXb3JrLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rcygpOyAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayh1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHVuaXRPZldvcmssIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5KTtcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yayQxLCBudWxsLCBjdXJyZW50JCQxLCB1bml0T2ZXb3JrLCBleHBpcmF0aW9uVGltZSk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTsgLy8gYGludm9rZUd1YXJkZWRDYWxsYmFja2Agc29tZXRpbWVzIHNldHMgYW4gZXhwYW5kbyBgX3N1cHByZXNzTG9nZ2luZ2AuXG4gICAgICAgIC8vIFJldGhyb3cgdGhpcyBlcnJvciBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBvbmUuXG5cbiAgICAgICAgdGhyb3cgcmVwbGF5RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGJyYW5jaCBpcyByZWFjaGFibGUgaWYgdGhlIHJlbmRlciBwaGFzZSBpcyBpbXB1cmUuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgYmVnaW5Xb3JrJCQxID0gYmVnaW5Xb3JrJDE7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluR2V0Q2hpbGRDb250ZXh0ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dEludmFsaWRVcGRhdGVzT25DbGFzc0NvbXBvbmVudHNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHN3aXRjaCAocGhhc2UpIHtcbiAgICAgICAgY2FzZSAnZ2V0Q2hpbGRDb250ZXh0JzpcbiAgICAgICAgICBpZiAoZGlkV2FybkFib3V0VXBkYXRlSW5HZXRDaGlsZENvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiBDYW5ub3QgY2FsbCBzZXRTdGF0ZSgpIGluc2lkZSBnZXRDaGlsZENvbnRleHQoKScpO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluR2V0Q2hpbGRDb250ZXh0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyZW5kZXInOlxuICAgICAgICAgIGlmIChkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mICcgKyAncHJvcHMgYW5kIHN0YXRlLicpO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gYSAnc2hhcmVkJyB2YXJpYWJsZSB0aGF0IGNoYW5nZXMgd2hlbiBhY3QoKSBvcGVucy9jbG9zZXMgaW4gdGVzdHMuXG5cblxudmFyIElzVGhpc1JlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcbmZ1bmN0aW9uIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcikge1xuICB7XG4gICAgaWYgKHdhcm5zSWZOb3RBY3RpbmcgPT09IHRydWUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gdHJ1ZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ICE9PSB0cnVlKSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIFwiaW1wb3J0IHthY3R9IGZyb20gJ3JlYWN0LWRvbS90ZXN0LXV0aWxzJztcXG5cIiArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pO1xcblxcbicgKyAnLy8gZm9yIHJlYWN0LXRlc3QtcmVuZGVyZXI6XFxuJyArIFwiaW1wb3J0IFRlc3RSZW5kZXJlciBmcm9tICdyZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7JyArICclcycsIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChmaWJlcikpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAod2FybnNJZk5vdEFjdGluZyA9PT0gdHJ1ZSAmJiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpICE9PSBOb01vZGUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC13cmFwLXRlc3RzLXdpdGgtYWN0JyArICclcycsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSksIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChmaWJlcikpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICh3YXJuc0lmTm90QWN0aW5nID09PSB0cnVlICYmIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC13cmFwLXRlc3RzLXdpdGgtYWN0JyArICclcycsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSksIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChmaWJlcikpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2ID0gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWOyAvLyBJbiB0ZXN0cywgd2Ugd2FudCB0byBlbmZvcmNlIGEgbW9ja2VkIHNjaGVkdWxlci5cblxudmFyIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gZmFsc2U7IC8vIFRPRE8gQmVmb3JlIHdlIHJlbGVhc2UgY29uY3VycmVudCBtb2RlLCByZXZpc2l0IHRoaXMgYW5kIGRlY2lkZSB3aGV0aGVyIGEgbW9ja2VkXG4vLyBzY2hlZHVsZXIgaXMgdGhlIGFjdHVhbCByZWNvbW1lbmRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGNvdWxkIGJlIGEgdGVzdGluZyBidWlsZCxcbi8vIGEgbmV3IGxpYiwgb3Igd2hhdGV2ZXI7IHdlIGR1bm5vIGp1c3QgeWV0LiBUaGlzIG1lc3NhZ2UgaXMgZm9yIGVhcmx5IGFkb3B0ZXJzXG4vLyB0byBnZXQgdGhlaXIgdGVzdHMgcmlnaHQuXG5cbmZ1bmN0aW9uIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPT09IGZhbHNlICYmIFNjaGVkdWxlci51bnN0YWJsZV9mbHVzaEFsbFdpdGhvdXRBc3NlcnRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUgfHwgZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnSW4gQ29uY3VycmVudCBvciBTeW5jIG1vZGVzLCB0aGUgXCJzY2hlZHVsZXJcIiBtb2R1bGUgbmVlZHMgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL2ZiLm1lL3JlYWN0LW1vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9IGVsc2UgaWYgKHdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSB0cnVlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnU3RhcnRpbmcgZnJvbSBSZWFjdCB2MTcsIHRoZSBcInNjaGVkdWxlclwiIG1vZHVsZSB3aWxsIG5lZWQgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL2ZiLm1lL3JlYWN0LW1vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG52YXIgY29tcG9uZW50c1RoYXRUcmlnZ2VyZWRIaWdoUHJpU3VzcGVuZCA9IG51bGw7XG5mdW5jdGlvbiBjaGVja0Zvcldyb25nU3VzcGVuc2VQcmlvcml0eUluREVWKHNvdXJjZUZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gICAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb0VmZmVjdCAmJiAoY3VycmVudFByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgY3VycmVudFByaW9yaXR5TGV2ZWwgPT09IEltbWVkaWF0ZVByaW9yaXR5KSkge1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzTm9kZSA9IHNvdXJjZUZpYmVyO1xuXG4gICAgICB3aGlsZSAod29ya0luUHJvZ3Jlc3NOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEFkZCB0aGUgY29tcG9uZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBzdXNwZW5zZVxuICAgICAgICB2YXIgY3VycmVudCQkMSA9IHdvcmtJblByb2dyZXNzTm9kZS5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQkJDEgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiB3YXJuIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJzIHRoZSBoaWdoIHByaW9yaXR5XG4gICAgICAgICAgLy8gc3VzcGVuZCBpcyB0aGUgSG9zdFJvb3RcbiAgICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzTm9kZS50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgY29tcG9uZW50J3MgdXBkYXRlIHF1ZXVlIGFuZCBzZWUgd2hldGhlciB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgIC8vIGhhcyB0cmlnZ2VyZWQgYW55IGhpZ2ggcHJpb3JpdHkgdXBkYXRlc1xuICAgICAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50JCQxLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVRdWV1ZS5maXJzdFVwZGF0ZTtcblxuICAgICAgICAgICAgICAgIHdoaWxlICh1cGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBwcmlvcml0eUxldmVsID0gdXBkYXRlLnByaW9yaXR5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAocHJpb3JpdHlMZXZlbCA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50c1RoYXRUcmlnZ2VyZWRIaWdoUHJpU3VzcGVuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNUaGF0VHJpZ2dlcmVkSGlnaFByaVN1c3BlbmQgPSBuZXcgU2V0KFtnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzTm9kZS50eXBlKV0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNUaGF0VHJpZ2dlcmVkSGlnaFByaVN1c3BlbmQuYWRkKGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3NOb2RlLnR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzTm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzTm9kZS5tZW1vaXplZFN0YXRlLmJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3VwZGF0ZSA9IHdvcmtJblByb2dyZXNzTm9kZS5tZW1vaXplZFN0YXRlLmJhc2VVcGRhdGU7IC8vIExvb3AgdGhyb3VnaCB0aGUgZnVuY3Rpb25hbCBjb21wb25lbnQncyBtZW1vaXplZCBzdGF0ZSB0byBzZWUgd2hldGhlclxuICAgICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgaGFzIHRyaWdnZXJlZCBhbnkgaGlnaCBwcmkgdXBkYXRlc1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKF91cGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IF91cGRhdGUucHJpb3JpdHk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNUaGF0VHJpZ2dlcmVkSGlnaFByaVN1c3BlbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzVGhhdFRyaWdnZXJlZEhpZ2hQcmlTdXNwZW5kID0gbmV3IFNldChbZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzc05vZGUudHlwZSldKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzVGhhdFRyaWdnZXJlZEhpZ2hQcmlTdXNwZW5kLmFkZChnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzTm9kZS50eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKF91cGRhdGUubmV4dCA9PT0gd29ya0luUHJvZ3Jlc3NOb2RlLm1lbW9pemVkU3RhdGUuYmFzZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgX3VwZGF0ZSA9IF91cGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NOb2RlID0gd29ya0luUHJvZ3Jlc3NOb2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hTdXNwZW5zZVByaW9yaXR5V2FybmluZ0luREVWKCkge1xuICB7XG4gICAgaWYgKGNvbXBvbmVudHNUaGF0VHJpZ2dlcmVkSGlnaFByaVN1c3BlbmQgIT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lcyA9IFtdO1xuICAgICAgY29tcG9uZW50c1RoYXRUcmlnZ2VyZWRIaWdoUHJpU3VzcGVuZC5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnROYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgfSk7XG4gICAgICBjb21wb25lbnRzVGhhdFRyaWdnZXJlZEhpZ2hQcmlTdXNwZW5kID0gbnVsbDtcblxuICAgICAgaWYgKGNvbXBvbmVudE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgdHJpZ2dlcmVkIGEgdXNlci1ibG9ja2luZyB1cGRhdGUgdGhhdCBzdXNwZW5kZWQuJyArICdcXG5cXG4nICsgJ1RoZSBmaXggaXMgdG8gc3BsaXQgdGhlIHVwZGF0ZSBpbnRvIG11bHRpcGxlIHBhcnRzOiBhIHVzZXItYmxvY2tpbmcgJyArICd1cGRhdGUgdG8gcHJvdmlkZSBpbW1lZGlhdGUgZmVlZGJhY2ssIGFuZCBhbm90aGVyIHVwZGF0ZSB0aGF0ICcgKyAndHJpZ2dlcnMgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXMuJyArICdcXG5cXG4nICsgJ1JlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB1c2VUcmFuc2l0aW9uIHRvIGxlYXJuIGhvdyAnICsgJ3RvIGltcGxlbWVudCB0aGlzIHBhdHRlcm4uJywgLy8gVE9ETzogQWRkIGxpbmsgdG8gUmVhY3QgZG9jcyB3aXRoIG1vcmUgaW5mb3JtYXRpb24sIG9uY2UgaXQgZXhpc3RzXG4gICAgICAgIGNvbXBvbmVudE5hbWVzLnNvcnQoKS5qb2luKCcsICcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIEludGVyYWN0aW9uIHRocmVhZHMgYXJlIHVuaXF1ZSBwZXIgcm9vdCBhbmQgZXhwaXJhdGlvbiB0aW1lLlxuICByZXR1cm4gZXhwaXJhdGlvblRpbWUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsoZXhwaXJhdGlvblRpbWUpIHtcbiAgaWYgKCFlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID09PSBudWxsKSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBbZXhwaXJhdGlvblRpbWVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2goZXhwaXJhdGlvblRpbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lLCBpbnRlcmFjdGlvbnMpIHtcbiAgaWYgKCFlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQoZXhwaXJhdGlvblRpbWUpO1xuXG4gICAgaWYgKHBlbmRpbmdJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGlmICghcGVuZGluZ0ludGVyYWN0aW9ucy5oYXMoaW50ZXJhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHByZXZpb3VzbHkgdW5zY2hlZHVsZWQgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5zZXQoZXhwaXJhdGlvblRpbWUsIG5ldyBTZXQoaW50ZXJhY3Rpb25zKSk7IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG5cbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB3b3JrIGlzIHNjaGVkdWxlZCBvbiBhIHJvb3QuXG4gIC8vIEl0IGFzc29jaWF0ZXMgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ld2x5LXNjaGVkdWxlZCBleHBpcmF0aW9uLlxuICAvLyBUaGV5IHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB0aGF0IGV4cGlyYXRpb24gaXMgbGF0ZXIgY29tbWl0dGVkLlxuICBpZiAoIWVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZSwgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbmV3IHdvcmsgaXMgc3RhcnRlZCBvbiBhIHJvb3QuXG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybjtcbiAgfSAvLyBEZXRlcm1pbmUgd2hpY2ggaW50ZXJhY3Rpb25zIHRoaXMgYmF0Y2ggb2Ygd29yayBjdXJyZW50bHkgaW5jbHVkZXMsIFNvIHRoYXRcbiAgLy8gd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCwgQW5kIHNvIHRoYXQgY2FzY2FkaW5nXG4gIC8vIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSkge1xuICAgIGlmIChzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSA+PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IHNldCBvZiBpbnRlcmFjdGlvbnMgb24gdGhlIEZpYmVyUm9vdCBmb3IgYSBmZXcgcmVhc29uczpcbiAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KClcbiAgLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgaXQuIFdlIHdpbGwgYWxzbyB1c2UgaXQgaW4gY29tbWl0V29yaygpIHRvXG4gIC8vIHBhc3MgdG8gYW55IFByb2ZpbGVyIG9uUmVuZGVyKCkgaG9va3MuIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGFcbiAgLy8gd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cblxuICByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zID0gaW50ZXJhY3Rpb25zO1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGV4cGlyYXRpb25UaW1lKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZEV4cGlyYXRpb25UaW1lKSB7XG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBlYXJsaWVzdFJlbWFpbmluZ1RpbWVBZnRlckNvbW1pdCA9IHJvb3QuZmlyc3RQZW5kaW5nVGltZTtcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBjb21taXR0ZWRFeHBpcmF0aW9uVGltZSk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZeKAkyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZEV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgLy8gSWYgdGhlcmUncyBzdGlsbCB3b3JrIGF0IHRoZSBjdXJyZW50IHByaW9yaXR5LFxuICAgICAgLy8gVGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igc3VzcGVuc2UgZGF0YS5cbiAgICAgIGlmIChzY2hlZHVsZWRFeHBpcmF0aW9uVGltZSA+IGVhcmxpZXN0UmVtYWluaW5nVGltZUFmdGVyQ29tbWl0KSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUoc2NoZWR1bGVkRXhwaXJhdGlvblRpbWUpO1xuICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbnZhciBvbkNvbW1pdEZpYmVyUm9vdCA9IG51bGw7XG52YXIgb25Db21taXRGaWJlclVubW91bnQgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBvbkNvbW1pdEZpYmVyUm9vdCA9IGZ1bmN0aW9uIChyb290LCBleHBpcmF0aW9uVGltZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5lZmZlY3RUYWcgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1lKCk7XG4gICAgICAgICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBpbmZlclByaW9yaXR5RnJvbUV4cGlyYXRpb25UaW1lKGN1cnJlbnRUaW1lLCBleHBpcmF0aW9uVGltZSk7XG4gICAgICAgICAgaG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCB1bmRlZmluZWQsIGRpZEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICh0cnVlICYmICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdSZWFjdCBEZXZUb29scyBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIG9uQ29tbWl0RmliZXJVbm1vdW50ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBob29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAodHJ1ZSAmJiAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnUmVhY3QgRGV2VG9vbHMgZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENhdGNoIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyB1bnNhZmUgdG8gdGhyb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1JlYWN0IERldlRvb2xzIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIGlmICh0eXBlb2Ygb25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvbkNvbW1pdEZpYmVyUm9vdChyb290LCBleHBpcmF0aW9uVGltZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAodHlwZW9mIG9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb25Db21taXRGaWJlclVubW91bnQoZmliZXIpO1xuICB9XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIHZhciB0ZXN0TWFwID0gbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgdmFyIHRlc3RTZXQgPSBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7IC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBSb2xsdXAgdG8gbm90IGNvbnNpZGVyIHRoZXNlIHVudXNlZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcm9sbHVwL3JvbGx1cC9pc3N1ZXMvMTc3MVxuICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2UgaWYgUm9sbHVwIGZpeGVzIHRoZSBidWcuXG5cbiAgICB0ZXN0TWFwLnNldCgwLCAwKTtcbiAgICB0ZXN0U2V0LmFkZCgwKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgZGVidWdDb3VudGVyID0gMTtcblxuZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gSW5zdGFuY2VcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLmVsZW1lbnRUeXBlID0gbnVsbDtcbiAgdGhpcy50eXBlID0gbnVsbDtcbiAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gIHRoaXMucmV0dXJuID0gbnVsbDtcbiAgdGhpcy5jaGlsZCA9IG51bGw7XG4gIHRoaXMuc2libGluZyA9IG51bGw7XG4gIHRoaXMuaW5kZXggPSAwO1xuICB0aGlzLnJlZiA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgdGhpcy5lZmZlY3RUYWcgPSBOb0VmZmVjdDtcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIHRoaXMuY2hpbGRFeHBpcmF0aW9uVGltZSA9IE5vV29yaztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH0gLy8gVGhpcyBpcyBub3JtYWxseSBERVYtb25seSBleGNlcHQgd3d3IHdoZW4gaXQgYWRkcyBsaXN0ZW5lcnMuXG4gIC8vIFRPRE86IHJlbW92ZSB0aGUgVXNlciBUaW1pbmcgaW50ZWdyYXRpb24gaW4gZmF2b3Igb2YgUm9vdCBFdmVudHMuXG5cblxuICBpZiAoZW5hYmxlVXNlclRpbWluZ0FQSSkge1xuICAgIHRoaXMuX2RlYnVnSUQgPSBkZWJ1Z0NvdW50ZXIrKztcbiAgICB0aGlzLl9kZWJ1Z0lzQ3VycmVudGx5VGltaW5nID0gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmICFzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcywgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZWZmZWN0VGFnID0gTm9FZmZlY3Q7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZEV4cGlyYXRpb25UaW1lID0gY3VycmVudC5jaGlsZEV4cGlyYXRpb25UaW1lO1xuICB3b3JrSW5Qcm9ncmVzcy5leHBpcmF0aW9uVGltZSA9IGN1cnJlbnQuZXhwaXJhdGlvblRpbWU7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgZXhwaXJhdGlvblRpbWU6IGN1cnJlbnREZXBlbmRlbmNpZXMuZXhwaXJhdGlvblRpbWUsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCxcbiAgICByZXNwb25kZXJzOiBjdXJyZW50RGVwZW5kZW5jaWVzLnJlc3BvbmRlcnNcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmVmZmVjdFRhZyAmPSBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZEV4cGlyYXRpb25UaW1lID0gTm9Xb3JrO1xuICAgIHdvcmtJblByb2dyZXNzLmV4cGlyYXRpb25UaW1lID0gcmVuZGVyRXhwaXJhdGlvblRpbWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuXG4gICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkRXhwaXJhdGlvblRpbWUgPSBjdXJyZW50LmNoaWxkRXhwaXJhdGlvblRpbWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZXhwaXJhdGlvblRpbWUgPSBjdXJyZW50LmV4cGlyYXRpb25UaW1lO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBleHBpcmF0aW9uVGltZTogY3VycmVudERlcGVuZGVuY2llcy5leHBpcmF0aW9uVGltZSxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHQsXG4gICAgICByZXNwb25kZXJzOiBjdXJyZW50RGVwZW5kZW5jaWVzLnJlc3BvbmRlcnNcbiAgICB9O1xuXG4gICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZykge1xuICB2YXIgbW9kZTtcblxuICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgIG1vZGUgPSBDb25jdXJyZW50TW9kZSB8IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSBpZiAodGFnID09PSBCbG9ja2luZ1Jvb3QpIHtcbiAgICBtb2RlID0gQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIHtcbiAgICBtb2RlID0gTm9Nb2RlO1xuICB9XG5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnTigJNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgZXhwaXJhdGlvblRpbWUpIHt0eXBlID0gaG90UmVzb2x2ZVR5cGUodHlwZSk7XG4gIHZhciBmaWJlcjtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGV4cGlyYXRpb25UaW1lLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGlmIChlbmFibGVGdW5kYW1lbnRhbEFQSSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZ1bmRhbWVudGFsKHR5cGUsIHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuICAgICAgICAgICAgICAgIGlmIChlbmFibGVTY29wZUFQSSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVNjb3BlKHR5cGUsIHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBvd25lciA9IG51bGw7XG5cbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIGtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgZXhwaXJhdGlvblRpbWUpO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEZyYWdtZW50LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnVuZGFtZW50YWwoZnVuZGFtZW50YWxDb21wb25lbnQsIHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGdW5kYW1lbnRhbENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IGZ1bmRhbWVudGFsQ29tcG9uZW50O1xuICBmaWJlci50eXBlID0gZnVuZGFtZW50YWxDb21wb25lbnQ7XG4gIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU2NvcGUoc2NvcGUsIHBlbmRpbmdQcm9wcywgbW9kZSwgZXhwaXJhdGlvblRpbWUsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTY29wZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci50eXBlID0gc2NvcGU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gc2NvcGU7XG4gIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHBlbmRpbmdQcm9wcy5vblJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBzdHJpbmcgYW5kIFwib25SZW5kZXJcIiBmdW5jdGlvbiBhcyBwcm9wcycpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBleHBpcmF0aW9uVGltZSwga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgZXhwaXJhdGlvblRpbWUpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5leHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTsgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgZmliZXIudHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRGVoeWRyYXRlZEZyYWdtZW50KGRlaHlkcmF0ZWROb2RlKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKERlaHlkcmF0ZWRGcmFnbWVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgZmliZXIuc3RhdGVOb2RlID0gZGVoeWRyYXRlZE5vZGU7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZTtcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5lZmZlY3RUYWcgPSBzb3VyY2UuZWZmZWN0VGFnO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5leHBpcmF0aW9uVGltZSA9IHNvdXJjZS5leHBpcmF0aW9uVGltZTtcbiAgdGFyZ2V0LmNoaWxkRXhwaXJhdGlvblRpbWUgPSBzb3VyY2UuY2hpbGRFeHBpcmF0aW9uVGltZTtcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z0lEID0gc291cmNlLl9kZWJ1Z0lEO1xuICB0YXJnZXQuX2RlYnVnU291cmNlID0gc291cmNlLl9kZWJ1Z1NvdXJjZTtcbiAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICB0YXJnZXQuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmcgPSBzb3VyY2UuX2RlYnVnSXNDdXJyZW50bHlUaW1pbmc7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY3VycmVudCA9IG51bGw7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPSBOb1dvcms7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb1ByaW9yaXR5O1xuICB0aGlzLmZpcnN0UGVuZGluZ1RpbWUgPSBOb1dvcms7XG4gIHRoaXMuZmlyc3RTdXNwZW5kZWRUaW1lID0gTm9Xb3JrO1xuICB0aGlzLmxhc3RTdXNwZW5kZWRUaW1lID0gTm9Xb3JrO1xuICB0aGlzLm5leHRLbm93blBlbmRpbmdMZXZlbCA9IE5vV29yaztcbiAgdGhpcy5sYXN0UGluZ2VkVGltZSA9IE5vV29yaztcbiAgdGhpcy5sYXN0RXhwaXJlZFRpbWUgPSBOb1dvcms7XG5cbiAgaWYgKGVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICB0aGlzLmludGVyYWN0aW9uVGhyZWFkSUQgPSB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCk7XG4gICAgdGhpcy5tZW1vaXplZEludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIGlmIChlbmFibGVTdXNwZW5zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5oeWRyYXRpb25DYWxsYmFja3MgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG5cbiAgaWYgKGVuYWJsZVN1c3BlbnNlQ2FsbGJhY2spIHtcbiAgICByb290Lmh5ZHJhdGlvbkNhbGxiYWNrcyA9IGh5ZHJhdGlvbkNhbGxiYWNrcztcbiAgfSAvLyBDeWNsaWMgY29uc3RydWN0aW9uLiBUaGlzIGNoZWF0cyB0aGUgdHlwZSBzeXN0ZW0gcmlnaHQgbm93IGJlY2F1c2VcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gaXNSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBmaXJzdFN1c3BlbmRlZFRpbWUgPSByb290LmZpcnN0U3VzcGVuZGVkVGltZTtcbiAgdmFyIGxhc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5sYXN0U3VzcGVuZGVkVGltZTtcbiAgcmV0dXJuIGZpcnN0U3VzcGVuZGVkVGltZSAhPT0gTm9Xb3JrICYmIGZpcnN0U3VzcGVuZGVkVGltZSA+PSBleHBpcmF0aW9uVGltZSAmJiBsYXN0U3VzcGVuZGVkVGltZSA8PSBleHBpcmF0aW9uVGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBmaXJzdFN1c3BlbmRlZFRpbWUgPSByb290LmZpcnN0U3VzcGVuZGVkVGltZTtcbiAgdmFyIGxhc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5sYXN0U3VzcGVuZGVkVGltZTtcblxuICBpZiAoZmlyc3RTdXNwZW5kZWRUaW1lIDwgZXhwaXJhdGlvblRpbWUpIHtcbiAgICByb290LmZpcnN0U3VzcGVuZGVkVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgaWYgKGxhc3RTdXNwZW5kZWRUaW1lID4gZXhwaXJhdGlvblRpbWUgfHwgZmlyc3RTdXNwZW5kZWRUaW1lID09PSBOb1dvcmspIHtcbiAgICByb290Lmxhc3RTdXNwZW5kZWRUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIH1cblxuICBpZiAoZXhwaXJhdGlvblRpbWUgPD0gcm9vdC5sYXN0UGluZ2VkVGltZSkge1xuICAgIHJvb3QubGFzdFBpbmdlZFRpbWUgPSBOb1dvcms7XG4gIH1cblxuICBpZiAoZXhwaXJhdGlvblRpbWUgPD0gcm9vdC5sYXN0RXhwaXJlZFRpbWUpIHtcbiAgICByb290Lmxhc3RFeHBpcmVkVGltZSA9IE5vV29yaztcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcmFuZ2Ugb2YgcGVuZGluZyB0aW1lc1xuICB2YXIgZmlyc3RQZW5kaW5nVGltZSA9IHJvb3QuZmlyc3RQZW5kaW5nVGltZTtcblxuICBpZiAoZXhwaXJhdGlvblRpbWUgPiBmaXJzdFBlbmRpbmdUaW1lKSB7XG4gICAgcm9vdC5maXJzdFBlbmRpbmdUaW1lID0gZXhwaXJhdGlvblRpbWU7XG4gIH0gLy8gVXBkYXRlIHRoZSByYW5nZSBvZiBzdXNwZW5kZWQgdGltZXMuIFRyZWF0IGV2ZXJ5dGhpbmcgbG93ZXIgcHJpb3JpdHkgb3JcbiAgLy8gZXF1YWwgdG8gdGhpcyB1cGRhdGUgYXMgdW5zdXNwZW5kZWQuXG5cblxuICB2YXIgZmlyc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5maXJzdFN1c3BlbmRlZFRpbWU7XG5cbiAgaWYgKGZpcnN0U3VzcGVuZGVkVGltZSAhPT0gTm9Xb3JrKSB7XG4gICAgaWYgKGV4cGlyYXRpb25UaW1lID49IGZpcnN0U3VzcGVuZGVkVGltZSkge1xuICAgICAgLy8gVGhlIGVudGlyZSBzdXNwZW5kZWQgcmFuZ2UgaXMgbm93IHVuc3VzcGVuZGVkLlxuICAgICAgcm9vdC5maXJzdFN1c3BlbmRlZFRpbWUgPSByb290Lmxhc3RTdXNwZW5kZWRUaW1lID0gcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWwgPSBOb1dvcms7XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA+PSByb290Lmxhc3RTdXNwZW5kZWRUaW1lKSB7XG4gICAgICByb290Lmxhc3RTdXNwZW5kZWRUaW1lID0gZXhwaXJhdGlvblRpbWUgKyAxO1xuICAgIH0gLy8gVGhpcyBpcyBhIHBlbmRpbmcgbGV2ZWwuIENoZWNrIGlmIGl0J3MgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIG5leHRcbiAgICAvLyBrbm93biBwZW5kaW5nIGxldmVsLlxuXG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPiByb290Lm5leHRLbm93blBlbmRpbmdMZXZlbCkge1xuICAgICAgcm9vdC5uZXh0S25vd25QZW5kaW5nTGV2ZWwgPSBleHBpcmF0aW9uVGltZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWRBdFRpbWUocm9vdCwgZmluaXNoZWRFeHBpcmF0aW9uVGltZSwgcmVtYWluaW5nRXhwaXJhdGlvblRpbWUpIHtcbiAgLy8gVXBkYXRlIHRoZSByYW5nZSBvZiBwZW5kaW5nIHRpbWVzXG4gIHJvb3QuZmlyc3RQZW5kaW5nVGltZSA9IHJlbWFpbmluZ0V4cGlyYXRpb25UaW1lOyAvLyBVcGRhdGUgdGhlIHJhbmdlIG9mIHN1c3BlbmRlZCB0aW1lcy4gVHJlYXQgZXZlcnl0aGluZyBoaWdoZXIgcHJpb3JpdHkgb3JcbiAgLy8gZXF1YWwgdG8gdGhpcyB1cGRhdGUgYXMgdW5zdXNwZW5kZWQuXG5cbiAgaWYgKGZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPD0gcm9vdC5sYXN0U3VzcGVuZGVkVGltZSkge1xuICAgIC8vIFRoZSBlbnRpcmUgc3VzcGVuZGVkIHJhbmdlIGlzIG5vdyB1bnN1c3BlbmRlZC5cbiAgICByb290LmZpcnN0U3VzcGVuZGVkVGltZSA9IHJvb3QubGFzdFN1c3BlbmRlZFRpbWUgPSByb290Lm5leHRLbm93blBlbmRpbmdMZXZlbCA9IE5vV29yaztcbiAgfSBlbHNlIGlmIChmaW5pc2hlZEV4cGlyYXRpb25UaW1lIDw9IHJvb3QuZmlyc3RTdXNwZW5kZWRUaW1lKSB7XG4gICAgLy8gUGFydCBvZiB0aGUgc3VzcGVuZGVkIHJhbmdlIGlzIG5vdyB1bnN1c3BlbmRlZC4gTmFycm93IHRoZSByYW5nZSB0b1xuICAgIC8vIGluY2x1ZGUgZXZlcnl0aGluZyBiZXR3ZWVuIHRoZSB1bnN1c3BlbmRlZCB0aW1lIChub24taW5jbHVzaXZlKSBhbmQgdGhlXG4gICAgLy8gbGFzdCBzdXNwZW5kZWQgdGltZS5cbiAgICByb290LmZpcnN0U3VzcGVuZGVkVGltZSA9IGZpbmlzaGVkRXhwaXJhdGlvblRpbWUgLSAxO1xuICB9XG5cbiAgaWYgKGZpbmlzaGVkRXhwaXJhdGlvblRpbWUgPD0gcm9vdC5sYXN0UGluZ2VkVGltZSkge1xuICAgIC8vIENsZWFyIHRoZSBwaW5nZWQgdGltZVxuICAgIHJvb3QubGFzdFBpbmdlZFRpbWUgPSBOb1dvcms7XG4gIH1cblxuICBpZiAoZmluaXNoZWRFeHBpcmF0aW9uVGltZSA8PSByb290Lmxhc3RFeHBpcmVkVGltZSkge1xuICAgIC8vIENsZWFyIHRoZSBleHBpcmVkIHRpbWVcbiAgICByb290Lmxhc3RFeHBpcmVkVGltZSA9IE5vV29yaztcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RFeHBpcmVkQXRUaW1lKHJvb3QsIGV4cGlyYXRpb25UaW1lKSB7XG4gIHZhciBsYXN0RXhwaXJlZFRpbWUgPSByb290Lmxhc3RFeHBpcmVkVGltZTtcblxuICBpZiAobGFzdEV4cGlyZWRUaW1lID09PSBOb1dvcmsgfHwgbGFzdEV4cGlyZWRUaW1lID4gZXhwaXJhdGlvblRpbWUpIHtcbiAgICByb290Lmxhc3RFeHBpcmVkVGltZSA9IGV4cGlyYXRpb25UaW1lO1xuICB9XG59XG5cbi8vIFRoaXMgbGV0cyB1cyBob29rIGludG8gRmliZXIgdG8gZGVidWcgd2hhdCBpdCdzIGRvaW5nLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzgwMzMuXG4vLyBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBub3QgZXZlbiBmb3IgUmVhY3QgRGV2VG9vbHMuXG4vLyBZb3UgbWF5IG9ubHkgaW5qZWN0IGEgZGVidWdUb29sIGlmIHlvdSB3b3JrIG9uIFJlYWN0IEZpYmVyIGl0c2VsZi5cbnZhciBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uID0ge1xuICBkZWJ1Z1Rvb2w6IG51bGxcbn07XG52YXIgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xID0gUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbjtcblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2UoY29tcG9uZW50KSB7XG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3Qtc3RyaWN0LW1vZGUtZmluZC1ub2RlJXMnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoaG9zdEZpYmVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3Qtc3RyaWN0LW1vZGUtZmluZC1ub2RlJXMnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lLCBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoaG9zdEZpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIHJldHVybiBmaW5kSG9zdEluc3RhbmNlKGNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAgdmFyIGN1cnJlbnQkJDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGN1cnJlbnRUaW1lID0gcmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCk7XG5cbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihjdXJyZW50JCQxKTtcbiAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChjdXJyZW50JCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb25maWcgPSByZXF1ZXN0Q3VycmVudFN1c3BlbnNlQ29uZmlnKCk7XG4gIHZhciBleHBpcmF0aW9uVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGN1cnJlbnQkJDEsIHN1c3BlbnNlQ29uZmlnKTtcblxuICB7XG4gICAgaWYgKFJlYWN0RmliZXJJbnN0cnVtZW50YXRpb25fMS5kZWJ1Z1Rvb2wpIHtcbiAgICAgIGlmIChjdXJyZW50JCQxLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uTW91bnRDb250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICBSZWFjdEZpYmVySW5zdHJ1bWVudGF0aW9uXzEuZGVidWdUb29sLm9uVW5tb3VudENvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVhY3RGaWJlckluc3RydW1lbnRhdGlvbl8xLmRlYnVnVG9vbC5vblVwZGF0ZUNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAocGhhc2UgPT09ICdyZW5kZXInICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWUoY3VycmVudC50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXhwaXJhdGlvblRpbWUsIHN1c3BlbnNlQ29uZmlnKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudFxuICB9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjaykgOiB2b2lkIDA7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkJDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlV29yayhjdXJyZW50JCQxLCBleHBpcmF0aW9uVGltZSk7XG4gIHJldHVybiBleHBpcmF0aW9uVGltZTtcbn1cbmZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgdmFyIGNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyLmN1cnJlbnQ7XG5cbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5mdW5jdGlvbiBhdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24kMShmaWJlcikge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB2YXIgcm9vdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgZmlyc3Qgc2NoZWR1bGVkIFwidXBkYXRlXCIuXG4gICAgICAgIGZsdXNoUm9vdChyb290LCByb290LmZpcnN0UGVuZGluZ1RpbWUpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVXb3JrKGZpYmVyLCBTeW5jKTtcbiAgICAgIH0pOyAvLyBJZiB3ZSdyZSBzdGlsbCBibG9ja2VkIGFmdGVyIHRoaXMsIHdlIG5lZWQgdG8gaW5jcmVhc2VcbiAgICAgIC8vIHRoZSBwcmlvcml0eSBvZiBhbnkgcHJvbWlzZXMgcmVzb2x2aW5nIHdpdGhpbiB0aGlzXG4gICAgICAvLyBib3VuZGFyeSBzbyB0aGF0IHRoZXkgbmV4dCBhdHRlbXB0IGFsc28gaGFzIGhpZ2hlciBwcmkuXG5cbiAgICAgIHZhciByZXRyeUV4cFRpbWUgPSBjb21wdXRlSW50ZXJhY3RpdmVFeHBpcmF0aW9uKHJlcXVlc3RDdXJyZW50VGltZUZvclVwZGF0ZSgpKTtcbiAgICAgIG1hcmtSZXRyeVRpbWVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUV4cFRpbWUpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5VGltZUltcGwoZmliZXIsIHJldHJ5VGltZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgaWYgKHN1c3BlbnNlU3RhdGUucmV0cnlUaW1lIDwgcmV0cnlUaW1lKSB7XG4gICAgICBzdXNwZW5zZVN0YXRlLnJldHJ5VGltZSA9IHJldHJ5VGltZTtcbiAgICB9XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeVRpbWVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeVRpbWUpIHtcbiAgbWFya1JldHJ5VGltZUltcGwoZmliZXIsIHJldHJ5VGltZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeVRpbWVJbXBsKGFsdGVybmF0ZSwgcmV0cnlUaW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXhwVGltZSA9IGNvbXB1dGVJbnRlcmFjdGl2ZUV4cGlyYXRpb24ocmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCkpO1xuICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cFRpbWUpO1xuICBtYXJrUmV0cnlUaW1lSWZOb3RIeWRyYXRlZChmaWJlciwgZXhwVGltZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV4cFRpbWUgPSBjb21wdXRlQ29udGludW91c0h5ZHJhdGlvbkV4cGlyYXRpb24ocmVxdWVzdEN1cnJlbnRUaW1lRm9yVXBkYXRlKCkpO1xuICBzY2hlZHVsZVdvcmsoZmliZXIsIGV4cFRpbWUpO1xuICBtYXJrUmV0cnlUaW1lSWZOb3RIeWRyYXRlZChmaWJlciwgZXhwVGltZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgb3RoZXIgdGhhbiBzeW5jaHJvbm91c2x5IGZsdXNoIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50VGltZSA9IHJlcXVlc3RDdXJyZW50VGltZUZvclVwZGF0ZSgpO1xuICB2YXIgZXhwVGltZSA9IGNvbXB1dGVFeHBpcmF0aW9uRm9yRmliZXIoY3VycmVudFRpbWUsIGZpYmVyLCBudWxsKTtcbiAgc2NoZWR1bGVXb3JrKGZpYmVyLCBleHBUaW1lKTtcbiAgbWFya1JldHJ5VGltZUlmTm90SHlkcmF0ZWQoZmliZXIsIGV4cFRpbWUpO1xufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhvc3RGaWJlci50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGUuaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbntcbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGlkeCwgdmFsdWUpIHtcbiAgICBpZiAoaWR4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhdGhbaWR4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpZHggKyAxLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgMCwgdmFsdWUpO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBjdXJyZW50SG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVXb3JrKGZpYmVyLCBTeW5jKTtcbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlV29yayhmaWJlciwgU3luYyk7XG4gIH07XG5cbiAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBzY2hlZHVsZVdvcmsoZmliZXIsIFN5bmMpO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKF9hc3NpZ24oe30sIGRldlRvb2xzQ29uZmlnLCB7XG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICAgIH0sXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgaWYgKCFmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSkge1xuICAgICAgICAvLyBNaWdodCBub3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHJlbmRlcmVyLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICB9LFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6IGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCxcbiAgICBzY2hlZHVsZVJlZnJlc2g6IHNjaGVkdWxlUmVmcmVzaCxcbiAgICBzY2hlZHVsZVJvb3Q6IHNjaGVkdWxlUm9vdCxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogc2V0UmVmcmVzaEhhbmRsZXIsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgIGdldEN1cnJlbnRGaWJlcjogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICB9KSk7XG59XG5cbi8vIFRoaXMgZmlsZSBpbnRlbnRpb25hbGx5IGRvZXMgKm5vdCogaGF2ZSB0aGUgRmxvdyBhbm5vdGF0aW9uLlxuLy8gRG9uJ3QgYWRkIGl0LiBTZWUgYC4vaW5saW5lLXR5cGVkLmpzYCBmb3IgYW4gZXhwbGFuYXRpb24uXG5cbi8vIFRPRE86IFRoaXMgdHlwZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgcmVjb25jaWxlciBhbmQgUmVhY3RET00sIGJ1dCB3aWxsXG4vLyBldmVudHVhbGx5IGJlIGxpZnRlZCBvdXQgdG8gdGhlIHJlbmRlcmVyLlxuZnVuY3Rpb24gUmVhY3RET01Sb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpO1xufVxuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICB2YXIgY2IgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIHtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2IsICdyZW5kZXInKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgbnVsbCwgY2IpO1xufTtcblxuUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciBjYiA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAge1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYiwgJ3JlbmRlcicpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcblxuICAgIGlmIChjYiAhPT0gbnVsbCkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgLy8gVGFnIGlzIGVpdGhlciBMZWdhY3lSb290IG9yIENvbmN1cnJlbnQgUm9vdFxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zIHx8IG51bGw7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcblxuICBpZiAoaHlkcmF0ZSAmJiB0YWcgIT09IExlZ2FjeVJvb3QpIHtcbiAgICB2YXIgZG9jID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gY29udGFpbmVyIDogY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7XG4gICAgZWFnZXJseVRyYXBSZXBsYXlhYmxlRXZlbnRzKGRvYyk7XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcImNyZWF0ZVJvb3QoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgfVxuICB9XG5cbiAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICByZXR1cm4gbmV3IFJlYWN0RE9NUm9vdChjb250YWluZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY3JlYXRlQmxvY2tpbmdSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiY3JlYXRlUm9vdCguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICB9XG4gIH1cblxuICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBCbG9ja2luZ1Jvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIExlZ2FjeVJvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgICEoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjaykgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpIHtcbiAge1xuICAgIGlmIChpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpKSB7XG4gICAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICAgICAgd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAnWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLnJlbmRlcigpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uY3JlYXRlUm9vdCgpIG9uIGEgY29udGFpbmVyIHRoYXQgJyArICdoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBjcmVhdGVSb290KCkgYmVmb3JlLiBJbnN0ZWFkLCBjYWxsICcgKyAncm9vdC5yZW5kZXIoKSBvbiB0aGUgZXhpc3Rpbmcgcm9vdCBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIHVwZGF0ZSBpdC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzO1xudmFyIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IGZhbHNlO1xuXG57XG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICAhKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlID09PSBjb250YWluZXIpID8gd2FybmluZ1dpdGhvdXRTdGFjayQxKGZhbHNlLCAncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhpcyAnICsgJ2NvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArICdSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIHRvIGVtcHR5IGEgY29udGFpbmVyLicpIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUkMShyb290RWwpKTtcbiAgICAhKCFoYXNOb25Sb290UmVhY3RDaGlsZCB8fCBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJykgOiB2b2lkIDA7XG4gICAgIShjb250YWluZXIubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCAhY29udGFpbmVyLnRhZ05hbWUgfHwgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJykgOiB2b2lkIDA7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7IC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuXG4gIGlmICghc2hvdWxkSHlkcmF0ZSkge1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFNpYmxpbmc7XG5cbiAgICB3aGlsZSAocm9vdFNpYmxpbmcgPSBjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghd2FybmVkICYmIHJvb3RTaWJsaW5nLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdFNpYmxpbmcuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKSB7XG4gICAgICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgKyAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgKyAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUgJiYgIWZvcmNlSHlkcmF0ZSAmJiAhd2FybmVkQWJvdXRIeWRyYXRlQVBJKSB7XG4gICAgICB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSB0cnVlO1xuICAgICAgbG93UHJpb3JpdHlXYXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdyZW5kZXIoKTogQ2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSB0byBoeWRyYXRlIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAgJyArICd3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCB2MTcuIFJlcGxhY2UgdGhlIFJlYWN0RE9NLnJlbmRlcigpIGNhbGwgJyArICd3aXRoIFJlYWN0RE9NLmh5ZHJhdGUoKSBpZiB5b3Ugd2FudCBSZWFjdCB0byBhdHRhY2ggdG8gdGhlIHNlcnZlciBIVE1MLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgc2hvdWxkSHlkcmF0ZSA/IHtcbiAgICBoeWRyYXRlOiB0cnVlXG4gIH0gOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcbiAgICAgICF3YXJuZWRBYm91dFJlZnNJblJlbmRlciA/IHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cblxuICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZShjb21wb25lbnRPckVsZW1lbnQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBjcmVhdGVSb290KGNvbnRhaW5lciwge2h5ZHJhdGU6IHRydWV9KS5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIHdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgaGFzKHBhcmVudENvbXBvbmVudCkpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoXCJwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudFwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUkMShyb290RWwpO1xuICAgICAgISFyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuJykgOiB2b2lkIDA7XG4gICAgfSAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZSQxKF9yb290RWwpKTsgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG5cbiAgICAgIHZhciBpc0NvbnRhaW5lclJlYWN0Um9vdCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGlzVmFsaWRDb250YWluZXIoY29udGFpbmVyLnBhcmVudE5vZGUpICYmICEhY29udGFpbmVyLnBhcmVudE5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICAgICEhaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPyB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBSZWFjdCBhbmQgaXMgbm90IGEgdG9wLWxldmVsIGNvbnRhaW5lci4gJXMnLCBpc0NvbnRhaW5lclJlYWN0Um9vdCA/ICdZb3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBpbiBhIFJlYWN0IHJvb3Qgbm9kZSBpbnN0ZWFkICcgKyAnb2YgaXRzIGNvbnRhaW5lci4nIDogJ0luc3RlYWQsIGhhdmUgdGhlIHBhcmVudCBjb21wb25lbnQgdXBkYXRlIGl0cyBzdGF0ZSBhbmQgJyArICdyZXJlbmRlciBpbiBvcmRlciB0byByZW1vdmUgdGhpcyBjb21wb25lbnQuJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE2LjEyLjAnO1xuXG5zZXRBdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24oYXR0ZW1wdFN5bmNocm9ub3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB3YXJuaW5nV2l0aG91dFN0YWNrJDEoZmFsc2UsICdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkJDEpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMkMSwgZmx1c2hEaXNjcmV0ZVVwZGF0ZXMsIGJhdGNoZWRFdmVudFVwZGF0ZXMkMSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQkMShjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cblxudmFyIGhvdFVwZGF0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAobmV3VHlwZSkge1xuICAgIGNoaWxkLnR5cGUgPSBuZXdUeXBlO1xuICAgIGlmIChjaGlsZC5hbHRlcm5hdGUpIHtcbiAgICAgIGNoaWxkLmFsdGVybmF0ZS50eXBlID0gbmV3VHlwZTtcbiAgICB9XG4gIH1cbn07XG52YXIgaG90UmVzb2x2ZVR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gdHlwZTtcbn07XG52YXIgaG90Q29tcGFyZUVsZW1lbnRzID0gZnVuY3Rpb24gKG9sZFR5cGUsIG5ld1R5cGUpIHtcbiAgcmV0dXJuIG9sZFR5cGUgPT09IG5ld1R5cGVcbn07XG52YXIgaG90Q2xlYW51cEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIHJlc2V0SG9va3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgIHJlc2V0SG9va3MoKTtcbiAgfVxufVxudmFyIFJlYWN0RE9NID0ge1xuICBldmFsSW5SZWFjdENvbnRleHQ6IGZ1bmN0aW9uIChpbmplY3Rpb24pIHtcbiAgICByZXR1cm4gZXZhbChpbmplY3Rpb24pO1xuICB9LFxuICBob3RDbGVhbnVwOiBob3RDbGVhbnVwSG9va3MsXG4gIGhvdFJlbmRlcldpdGhIb29rczogZnVuY3Rpb24gKGN1cnJlbnQsIHJlbmRlcikgeyAgICAgICBcbiAgICBob3RDbGVhbnVwSG9va3MoKTtcbiAgICBcbiAgICBpZiAodHlwZW9mIG5leHRDdXJyZW50SG9vayAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSAhPT0gJ3VuZGVmaW5lZCcpIHsgICAgXG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIGlmKHR5cGVvZiBmaXJzdEN1cnJlbnRIb29rICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmaXJzdEN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgICAgfVxuICAgICAgXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IG5leHRDdXJyZW50SG9vayA9PT0gbnVsbCA/IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA6IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfVxuICAgIFxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcigpO1xuICAgIFxuICAgIGhvdENsZWFudXBIb29rcygpO1xuICAgIFxuICAgIHJldHVybiByZW5kZXJlZDtcbiAgfSxcbiAgc2V0SG90RWxlbWVudENvbXBhcmF0b3I6IGZ1bmN0aW9uIChuZXdDb21wYXJhdG9yKSB7XG4gICAgaG90Q29tcGFyZUVsZW1lbnRzID0gbmV3Q29tcGFyYXRvclxuICB9LFxuICBzZXRIb3RUeXBlUmVzb2x2ZXI6IGZ1bmN0aW9uIChuZXdSZXNvbHZlcikge1xuICAgIGhvdFJlc29sdmVUeXBlID0gbmV3UmVzb2x2ZXI7XG4gIH0sXG5cbiAgY3JlYXRlUG9ydGFsOiBjcmVhdGVQb3J0YWwkJDEsXG4gIC8vIExlZ2FjeVxuICBmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG4gIGh5ZHJhdGU6IGh5ZHJhdGUsXG4gIHJlbmRlcjogcmVuZGVyLFxuICB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjogdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IHVubW91bnRDb21wb25lbnRBdE5vZGUsXG4gIC8vIFRlbXBvcmFyeSBhbGlhcyBzaW5jZSB3ZSBhbHJlYWR5IHNoaXBwZWQgUmVhY3QgMTYgUkMgd2l0aCBpdC5cbiAgLy8gVE9ETzogcmVtb3ZlIGluIFJlYWN0IDE3LlxuICB1bnN0YWJsZV9jcmVhdGVQb3J0YWw6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG4gICAgICBsb3dQcmlvcml0eVdhcm5pbmdXaXRob3V0U3RhY2skMShmYWxzZSwgJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVQb3J0YWwkJDEuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB9LFxuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczogYmF0Y2hlZFVwZGF0ZXMkMSxcbiAgZmx1c2hTeW5jOiBmbHVzaFN5bmMsXG4gIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOiB7XG4gICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggUmVhY3RET01VbnN0YWJsZU5hdGl2ZURlcGVuZGVuY2llcy5qc1xuICAgIC8vIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gICAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSQxLCBnZXROb2RlRnJvbUluc3RhbmNlJDEsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUkMSwgaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSwgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcywgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGRpc3BhdGNoRXZlbnQsIHJ1bkV2ZW50c0luQmF0Y2gsIGZsdXNoUGFzc2l2ZUVmZmVjdHMsIElzVGhpc1JlbmRlcmVyQWN0aW5nXVxuICB9XG59O1xuXG5pZiAoZXhwb3NlQ29uY3VycmVudE1vZGVBUElzKSB7XG4gIFJlYWN0RE9NLmNyZWF0ZVJvb3QgPSBjcmVhdGVSb290O1xuICBSZWFjdERPTS5jcmVhdGVCbG9ja2luZ1Jvb3QgPSBjcmVhdGVCbG9ja2luZ1Jvb3Q7XG4gIFJlYWN0RE9NLnVuc3RhYmxlX2Rpc2NyZXRlVXBkYXRlcyA9IGRpc2NyZXRlVXBkYXRlcyQxO1xuICBSZWFjdERPTS51bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlcyA9IGZsdXNoRGlzY3JldGVVcGRhdGVzO1xuICBSZWFjdERPTS51bnN0YWJsZV9mbHVzaENvbnRyb2xsZWQgPSBmbHVzaENvbnRyb2xsZWQ7XG5cbiAgUmVhY3RET00udW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcXVldWVFeHBsaWNpdEh5ZHJhdGlvblRhcmdldCh0YXJnZXQpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGZvdW5kRGV2VG9vbHMgPSBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gIGJ1bmRsZVR5cGU6IDEsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxudmFyIFJlYWN0RE9NJDIgPSBPYmplY3QuZnJlZXplKHtcblx0ZGVmYXVsdDogUmVhY3RET01cbn0pO1xuXG52YXIgUmVhY3RET00kMyA9ICggUmVhY3RET00kMiAmJiBSZWFjdERPTSApIHx8IFJlYWN0RE9NJDI7XG5cbi8vIFRPRE86IGRlY2lkZSBvbiB0aGUgdG9wLWxldmVsIGV4cG9ydCBmb3JtLlxuLy8gVGhpcyBpcyBoYWNreSBidXQgbWFrZXMgaXQgd29yayB3aXRoIGJvdGggUm9sbHVwIGFuZCBKZXN0LlxuXG5cbnZhciByZWFjdERvbSA9IFJlYWN0RE9NJDMuZGVmYXVsdCB8fCBSZWFjdERPTSQzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWN0RG9tO1xuICB9KSgpO1xufVxuXG4vKiDwn5SlIHRoaXMgaXMgaG90LWxvYWRlci9yZWFjdC1kb20gNC4xMi4xOSDwn5SlICovIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQVVBO0FBZUE7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFXQTs7QUFTQTs7QUFLQTs7OztBQU9BO0FBR0E7Ozs7Ozs7QUE2Q0E7Ozs7OztBQW1DQTs7OztBQWhJQTs7QUE4SkE7O0FBS0E7O0FBS0E7O0FBS0E7Ozs7O0FBUUE7QUFFQTs7Ozs7Ozs7QUFVQTtBQVFBOzs7Ozs7Ozs7QUFjQTtBQXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQWFBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFFQTtBQUVBO0FBRUE7QUFVQTtBQVNBO0FBWUE7Ozs7Ozs7Ozs7OztBQXNCQTs7Ozs7Ozs7O0FBZ0JBOzs7QUFpQkE7Ozs7O0FBZ0NBO0FBY0E7QUFZQTtBQUVBO0FBS0E7QUFDQTtBQUNBOzs7OztBQTRDQTs7QUFVQTtBQWVBOztBQS9rQkE7Ozs7Ozs7O0FBQUE7OztBQUFBOzs7Ozs7Ozs7OztBQTJuQkE7QUFVQTtBQUdBO0FBWUE7Ozs7Ozs7O0FBZUE7OztBQWFBOzs7OztBQVFBO0FBa0JBO0FBR0E7QUFnQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTd0QkE7O0FBa3hCQTs7O0FBS0E7O0FBS0E7Ozs7QUFRQTtBQUVBO0FBRUE7QUFJQTtBQU9BOzs7Ozs7QUF5QkE7QUFLQTtBQXVCQTtBQUVBO0FBRUE7QUFtQkE7QUFDQTtBQUVBO0FBc0JBO0FBQ0E7QUF1QkE7QUFDQTtBQVFBO0FBR0E7Ozs7O0FBZ0NBO0FBV0E7QUFxREE7QUErSEE7QUFHQTtBQTZDQTtBQUNBO0FBSUE7QUFpREE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBZUE7QUFDQTtBQWFBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWtCQTtBQTBHQTtBQThGQTtBQXVFQTtBQVlBO0FBQ0E7QUFFQTtBQThDQTtBQXVGQTtBQUVBO0FBOENBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBMERBO0FBRUE7QUFnRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFLQTtBQUVBO0FBR0E7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUVBO0FBRUE7QUFEQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBREE7QUFBQTtBQUtBO0FBREE7QUFBQTtBQUtBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBS0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFFQTtBQURBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUtBO0FBRUE7QUFJQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFEQTtBQUFBO0FBS0E7QUFFQTtBQUNBO0FBSUE7QUFEQTtBQUFBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQW9CQTtBQUNBO0FBQ0E7QUFjQTs7Ozs7O0FBWUE7QUFRQTs7O0FBV0E7OztBQVFBOzs7O0FBU0E7QUFRQTtBQUNBO0FBQ0E7QUEyQkE7QUFDQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTs7OztBQW1CQTs7Ozs7O0FBMkJBO0FBWUE7QUF3QkE7QUFDQTtBQU9BO0FBV0E7QUFDQTtBQUdBO0FBQ0E7OztBQW9EQTtBQXVDQTtBQUNBO0FBQ0E7QUFFQTtBQWdCQTtBQUNBO0FBQ0E7QUFFQTtBQXdCQTtBQVFBO0FBRUE7QUFnQkE7Ozs7Ozs7Ozs7Ozs7OztBQTJCQTtBQW9FQTtBQUNBO0FBUUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBT0E7QUFFQTtBQUdBO0FBRUE7QUFLQTtBQUVBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBUUE7QUFDQTtBQUNBO0FBR0E7QUFPQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFQQTs7QUFnQkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQXNCQTtBQVFBO0FBbUJBOztBQXFCQTtBQTZCQTtBQWdCQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQTBDQTtBQTRDQTtBQUlBOzs7Ozs7Ozs7Ozs7OztBQThCQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQXNCQTtBQUdBO0FBNENBO0FBQ0E7QUFFQTtBQWVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVFBO0FBWUE7QUFlQTtBQUtBO0FBSUE7O0FBUUE7Ozs7OztBQXFCQTtBQUtBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7O0FBc0JBOzs7Ozs7OztBQWdCQTtBQWNBO0FBQ0E7QUFDQTs7Ozs7O0FBZUE7O0FBWUE7O0FBVUE7O0FBS0E7O0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU9BOzs7OztBQVlBOzs7Ozs7QUEwQkE7QUFrRkE7QUFDQTtBQUVBOzs7Ozs7OztBQTVrSEE7Ozs7QUFpbUhBO0FBV0E7QUFPQTtBQXFDQTtBQUlBO0FBaUJBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBRUE7QUFHQTtBQTZEQTtBQWNBO0FBQ0E7QUFHQTtBQVFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUVBO0FBQ0E7QUFHQTtBQU1BO0FBTUE7QUFNQTtBQUdBO0FBU0E7QUFD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O0FBRUE7QUFJQTtBQW9CQTtBQUtBO0FBR0E7QUE4QkE7QUFFQTtBQU9BO0FBVUE7QUFFQTtBQU1BO0FBaUZBO0FBb0JBO0FBQ0E7QUFDQTtBQVNBO0FBK0JBO0FBVUE7QUFDQTtBQWVBO0FBR0E7QUFLQTtBQU1BO0FBeUNBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUE0REE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFLQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQW9CQTtBQWtCQTtBQUVBO0FBV0E7QUFFQTtBQUtBO0FBQ0E7QUFVQTtBQUVBO0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFtQ0E7QUFhQTtBQW1DQTtBQUVBO0FBWUE7QUFFQTtBQU9BO0FBRUE7QUFhQTtBQUNBO0FBTUE7QUFDQTtBQWVBO0FBT0E7QUF3Q0E7QUE0QkE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQWdCQTtBQUNBO0FBTUE7QUFXQTtBQVdBO0FBbUJBO0FBRUE7QUFJQTtBQUlBO0FBU0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQWVBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQW1DQTtBQVVBO0FBNkJBO0FBRUE7QUFVQTtBQUVBO0FBTUE7QUFFQTtBQWVBO0FBR0E7QUFFQTtBQVdBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMEJBO0FBRUE7QUFHQTtBQUVBO0FBQ0E7QUFGQTtBQWFBO0FBWUE7QUFXQTtBQVdBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFlQTtBQUVBO0FBT0E7QUFDQTtBQU1BO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFtREE7QUFDQTtBQUNBO0FBQ0E7QUE2QkE7QUFDQTtBQUVBO0FBY0E7Ozs7O0FBeUJBOzs7Ozs7QUFnQkE7Ozs7OztBQWtCQTs7O0FBNEJBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBcUJBO0FBOEJBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFvQkE7QUFLQTtBQUNBOzs7Ozs7Ozs7OztBQXFCQTtBQUdBO0FBQ0E7QUFFQTtBQVFBO0FBRUE7QUF5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBMXFSQTs7OztBQThzUkE7Ozs7QUFpQkE7QUFXQTs7Ozs7QUErQkE7QUFLQTtBQU1BOzs7OztBQWVBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUE0QkE7QUFHQTs7QUEwQ0E7QUFFQTtBQUVBO0FBTUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQU1BO0FBSUE7QUFJQTtBQUlBO0FBU0E7QUFDQTtBQUdBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBOztBQVVBO0FBc0RBO0FBQ0E7QUFvRUE7QUFTQTtBQXlHQTtBQXVEQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBYUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQXFCQTtBQUNBO0FBRUE7QUFhQTtBQVlBO0FBR0E7QUFRQTtBQUdBO0FBSUE7QUFDQTtBQXFCQTtBQUNBO0FBRUE7QUFPQTtBQUtBO0FBSUE7QUFLQTtBQUlBO0FBY0E7QUE2QkE7QUFFQTtBQW1CQTtBQUNBO0FBRUE7QUFxQkE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUF3QkE7QUFJQTtBQWdCQTtBQVVBO0FBOEJBO0FBR0E7QUFvQkE7QUFlQTtBQTZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBRUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7OztBQWdCQTs7O0FBa0JBO0FBR0E7QUFDQTtBQUVBO0FBR0E7Ozs7Ozs7Ozs7QUF3QkE7OztBQXdEQTs7OztBQVVBO0FBTUE7QUFPQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQStCQTs7OztBQU9BO0FBRUE7Ozs7O0FBVUE7Ozs7Ozs7QUFzQkE7Ozs7OztBQVlBO0FBSUE7QUFJQTtBQUNBO0FBTUE7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7QUFxQkE7QUFLQTs7QUFLQTtBQW9CQTtBQUNBO0FBYUE7QUFDQTs7OztBQW1CQTs7Ozs7Ozs7Ozs7OztBQW9CQTtBQVdBO0FBQ0E7QUFDQTtBQUVBO0FBUUE7Ozs7Ozs7QUFhQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBY0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQXdCQTtBQVFBO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBOztBQXFCQTtBQThDQTs7QUFTQTs7QUFNQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBeUJBO0FBSUE7QUFDQTs7OztBQVNBOzs7QUFXQTs7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBaUNBO0FBQ0E7QUE4QkE7QUFFQTtBQVNBO0FBTUE7QUFRQTtBQU1BO0FBSUE7QUFLQTtBQUdBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQWFBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBWUE7QUFDQTtBQWdCQTtBQWtCQTtBQVNBO0FBT0E7QUFlQTtBQUtBO0FBSUE7QUFzQkE7QUFJQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBWUE7QUFJQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUdBO0FBS0E7QUFDQTtBQU1BO0FBMEJBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFJQTtBQTBCQTtBQUVBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFtQkE7QUFXQTtBQUVBO0FBRUE7QUFtTEE7QUFnQkE7QUFFQTtBQVlBO0FBb0JBO0FBSUE7QUFlQTtBQUNBO0FBR0E7QUFtQ0E7QUFHQTtBQTJEQTtBQW9EQTtBQUdBO0FBRUE7QUFFQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBa0JBO0FBQ0E7QUFnQkE7QUFDQTtBQW1CQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBR0E7QUFPQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBa0JBO0FBQ0E7QUF3QkE7QUFDQTtBQXVCQTtBQUNBO0FBV0E7QUFHQTtBQUdBO0FBR0E7Ozs7QUF3QkE7QUFzQ0E7QUFDQTtBQXVDQTtBQVNBO0FBd0RBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBZ0JBO0FBRUE7QUFHQTtBQVlBO0FBQ0E7QUFDQTtBQWtCQTtBQUNBO0FBV0E7QUFVQTtBQUlBO0FBSUE7QUFPQTtBQUNBO0FBVUE7QUFLQTtBQVNBO0FBWUE7QUFVQTtBQUtBO0FBU0E7QUFLQTtBQVNBO0FBQ0E7QUFDQTtBQThDQTtBQUlBO0FBQ0E7QUFDQTtBQXVEQTtBQUNBOztBQStDQTtBQXdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFRQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFNQTtBQUNBO0FBV0E7QUFZQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFrQkE7QUFDQTtBQVVBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFNQTtBQUlBO0FBR0E7QUEwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBUUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBTUE7QUFDQTtBQVdBO0FBWUE7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBR0E7QUFZQTtBQUNBO0FBMkNBO0FBQ0E7QUFxQkE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQW9DQTtBQUNBO0FBQ0E7QUFRQTtBQUtBO0FBQ0E7QUFFQTtBQWNBO0FBaUNBO0FBK0JBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBb0JBO0FBR0E7QUFHQTtBQU1BO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBdUJBO0FBQ0E7QUFLQTtBQVFBO0FBS0E7QUFHQTtBQUdBO0FBS0E7QUFpQkE7QUFDQTtBQThGQTtBQVlBO0FBR0E7QUF1Q0E7QUErREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBZ0NBO0FBQ0E7QUFvQkE7QUFFQTtBQTBCQTtBQWNBO0FBQ0E7QUF5QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUlBO0FBUUE7QUFVQTtBQUdBO0FBVUE7QUFHQTtBQWtCQTtBQUNBO0FBQ0E7QUFFQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBaUNBO0FBR0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQWlCQTtBQUdBO0FBb0NBO0FBbUJBO0FBQ0E7QUFJQTtBQVNBO0FBQ0E7QUFDQTtBQUlBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQWFBO0FBRUE7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFPQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBZUE7QUFHQTtBQTRCQTtBQWdCQTtBQTBFQTtBQVdBO0FBZ0RBO0FBVUE7QUFLQTtBQUNBO0FBR0E7QUEyQ0E7QUFpSEE7QUFDQTtBQUNBO0FBd0JBO0FBMEJBO0FBSUE7QUFNQTtBQVVBO0FBQ0E7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQTRCQTtBQXFoQkE7QUF1REE7QUFrREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTZHQTtBQUNBO0FBQ0E7QUFFQTtBQXdCQTtBQVVBO0FBQ0E7QUFDQTtBQUlBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFtQkE7QUFDQTtBQUVBO0FBdUJBO0FBQ0E7QUFzRkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUEyREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBU0E7QUFVQTtBQWNBO0FBVUE7QUFNQTtBQUNBO0FBR0E7QUFlQTtBQUNBO0FBQUE7QUFrQkE7QUFDQTtBQUFBO0FBT0E7QUFFQTtBQUNBO0FBRUE7QUFTQTtBQVVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFNQTtBQUtBO0FBTUE7QUF3Q0E7QUFRQTtBQUNBO0FBR0E7QUF1QkE7QUFjQTtBQVNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFHQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFLQTtBQXFCQTtBQUtBO0FBU0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBRUE7QUFjQTtBQXFCQTtBQUVBO0FBSUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFLQTtBQU1BO0FBWUE7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUVBO0FBR0E7QUE2Q0E7QUFNQTtBQWNBO0FBQ0E7QUFHQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFpQ0E7QUFhQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBcUJBO0FBU0E7QUE2RUE7QUFDQTtBQU9BO0FBWUE7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBR0E7QUFZQTtBQUdBO0FBRUE7QUFNQTtBQUNBO0FBY0E7QUFFQTtBQUtBO0FBTUE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQURBO0FBS0E7QUFFQTtBQUlBO0FBQ0E7QUFRQTtBQUNBO0FBRUE7QUFHQTtBQUVBO0FBWUE7QUFRQTtBQUVBO0FBSUE7QUFHQTtBQUtBO0FBQ0E7QUFRQTtBQUNBO0FBY0E7QUFHQTtBQUVBO0FBVUE7QUFHQTtBQUtBO0FBRUE7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUlBO0FBQ0E7QUFHQTtBQURBO0FBVUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBWUE7QUFHQTtBQUVBO0FBWUE7QUFNQTtBQUVBO0FBS0E7QUFDQTtBQVVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVNBO0FBQ0E7QUFZQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBSUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBMEhBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFvQkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQVVBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBRUE7QUFXQTtBQUFBO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQStCQTtBQUtBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQThCQTtBQWtDQTtBQUtBO0FBVUE7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBWUE7QUFHQTtBQUdBO0FBS0E7QUFtQkE7QUFHQTtBQWFBO0FBVUE7QUFTQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFlQTtBQStCQTtBQWlCQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFHQTtBQUVBO0FBSUE7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUE2RUE7QUFPQTtBQW9SQTtBQUNBO0FBY0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUZBO0FBMEJBO0FBS0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQU9BO0FBTUE7QUFFQTtBQUNBO0FBSUE7QUFLQTtBQVdBO0FBVUE7QUFPQTtBQUNBO0FBRkE7QUFNQTtBQXdCQTtBQVdBO0FBb0JBO0FBRUE7QUFDQTtBQUlBO0FBS0E7QUFXQTtBQVVBO0FBT0E7QUFDQTtBQUZBO0FBTUE7QUF3QkE7QUFXQTtBQXVCQTtBQUtBO0FBR0E7QUFRQTtBQUVBO0FBSUE7QUFDQTtBQWNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFHQTtBQU9BO0FBR0E7QUFFQTtBQUtBO0FBQUE7QUFHQTtBQUdBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBR0E7QUFFQTtBQUdBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUE4Q0E7QUFDQTtBQUlBO0FBQ0E7QUFzQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBY0E7QUFTQTtBQUNBO0FBR0E7QUFPQTtBQWFBO0FBRUE7QUFXQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVFBO0FBRUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFzQkE7QUFZQTtBQUNBO0FBZ0JBO0FBQ0E7QUFRQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFFQTtBQXZEQTtBQW9FQTtBQU1BO0FBRUE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTtBQUVBO0FBQ0E7QUFLQTtBQUtBO0FBQ0E7QUFFQTtBQVVBO0FBa0NBO0FBMkhBO0FBMkJBO0FBU0E7QUFFQTtBQWlFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQVlBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUdBO0FBV0E7QUFDQTtBQUNBO0FBRUE7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQTJEQTtBQUNBO0FBRUE7QUFnQ0E7QUF3QkE7QUFVQTtBQThEQTtBQUNBO0FBRUE7QUFhQTtBQUNBO0FBRUE7QUFxQkE7QUFDQTtBQUdBO0FBa0NBO0FBQ0E7QUFDQTtBQUVBO0FBWUE7QUFNQTtBQThDQTtBQUNBO0FBcUJBO0FBQ0E7QUE2Q0E7QUE2QkE7QUFDQTtBQUdBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTREQTtBQUNBO0FBQ0E7QUFtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFzRkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFXQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBU0E7QUFFQTtBQVdBO0FBRUE7QUE0QkE7QUFXQTtBQUVBO0FBSUE7QUFFQTtBQXNCQTtBQUNBO0FBRkE7QUE0QkE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQWdEQTtBQUVBO0FBSkE7QUFhQTtBQUVBO0FBbUJBO0FBUUE7QUFDQTtBQUdBO0FBT0E7QUFvQkE7QUFDQTtBQVlBO0FBQ0E7QUFHQTtBQWVBO0FBQ0E7QUE2QkE7QUFvQkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUE4QkE7QUFDQTtBQUVBO0FBWUE7QUFtSkE7QUFDQTtBQUNBO0FBWUE7QUE2QkE7QUFDQTtBQUVBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVlBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQWtCQTtBQVFBO0FBRUE7QUFJQTtBQUlBO0FBS0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFHQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBR0E7QUFvQkE7QUFRQTtBQWdEQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBWUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFJQTtBQUVBO0FBSUE7QUFxQkE7QUFDQTtBQU9BO0FBR0E7QUFPQTtBQU1BO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBaUJBO0FBRUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUVBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBV0E7QUErQkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFRQTtBQUNBO0FBQ0E7QUFLQTtBQUdBO0FBSUE7QUFFQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFXQTtBQVFBO0FBR0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBU0E7QUFLQTtBQUNBO0FBT0E7QUFHQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBR0E7QUFHQTtBQUdBO0FBWUE7QUFFQTtBQUlBO0FBR0E7QUFtQ0E7QUFHQTtBQUNBO0FBVUE7QUFDQTtBQVVBO0FBYUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBVUE7QUFLQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFNQTtBQWdCQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBVUE7QUFLQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBSUE7QUFDQTtBQUVBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXVCQTtBQUdBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFTQTtBQUVBO0FBSUE7QUFHQTtBQW1DQTtBQU9BO0FBQ0E7QUFLQTtBQUdBO0FBU0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBR0E7QUFJQTtBQUVBO0FBVUE7QUFDQTtBQU9BO0FBZUE7QUFlQTtBQVVBO0FBTUE7QUFnQkE7QUFvQkE7QUFDQTtBQUVBO0FBY0E7QUFZQTtBQUNBO0FBRUE7QUFxQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQU9BO0FBS0E7QUFVQTtBQUNBO0FBQ0E7QUFzQ0E7QUFvQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBRUE7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUlBO0FBS0E7QUFTQTtBQU9BO0FBQ0E7QUFDQTtBQWtCQTtBQVNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQVVBO0FBU0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQVlBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBU0E7QUFJQTtBQUlBO0FBZ0JBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEwQkE7QUFHQTtBQUtBO0FBRUE7QUFLQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBMEJBO0FBQ0E7QUFJQTtBQXdCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQXdCQTtBQUVBO0FBU0E7QUFDQTtBQUNBO0FBRUE7QUFrQkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQVVBO0FBaUJBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFXQTtBQUVBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQWtCQTtBQUNBO0FBZUE7QUFlQTtBQUNBO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFDQTtBQUVBO0FBRUE7QUFlQTtBQW9CQTtBQVFBO0FBK0NBO0FBQ0E7QUFFQTtBQXVCQTtBQVdBO0FBRUE7QUF1Q0E7QUFDQTtBQWdCQTtBQXNCQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBUUE7QUFPQTtBQUlBO0FBSUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFxQkE7QUFnQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWFBO0FBTUE7QUFDQTtBQUtBO0FBeUNBO0FBbUJBO0FBRUE7QUFHQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUlBO0FBSUE7QUFFQTtBQUdBO0FBc0NBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUF1QkE7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQTZCQTtBQUVBO0FBNkNBO0FBUUE7QUE0QkE7QUFRQTtBQWdCQTtBQUNBO0FBQ0E7QUFTQTtBQUdBO0FBQ0E7QUFHQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFZQTtBQXlCQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQVVBO0FBa0JBO0FBT0E7QUFDQTtBQUNBO0FBU0E7QUFNQTtBQStCQTtBQU1BO0FBc0JBO0FBQ0E7QUFFQTtBQUlBO0FBUUE7QUFNQTtBQVlBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBS0E7QUFHQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBNkJBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBVUE7QUFFQTtBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUVBO0FBT0E7QUFtQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQVVBO0FBQ0E7QUFLQTtBQU1BO0FBRUE7QUFTQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFrREE7QUFrSEE7QUFRQTtBQUNBO0FBRUE7QUFVQTtBQUNBO0FBQ0E7QUFlQTtBQWlCQTtBQUtBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUE4RUE7QUFHQTtBQWdDQTtBQUtBO0FBR0E7QUFLQTtBQUlBO0FBR0E7QUFPQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQW1IQTtBQXFDQTtBQUVBO0FBb0NBO0FBU0E7QUFDQTtBQUVBO0FBaUJBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUEyQ0E7QUFTQTtBQUVBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUF3Q0E7QUFNQTtBQUtBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUF1Q0E7QUFtR0E7QUFpQ0E7QUFHQTtBQUtBO0FBYUE7QUFpQkE7QUErQ0E7QUF5REE7QUFNQTtBQUVBO0FBT0E7QUFRQTtBQUtBO0FBVUE7QUFVQTtBQUNBO0FBa0JBO0FBdURBO0FBTUE7QUFDQTtBQVlBO0FBQ0E7QUE0QkE7QUFHQTtBQWdCQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@hot-loader/react-dom/cjs/react-dom.development.js\n"); - -/***/ }), - -/***/ "../node_modules/@hot-loader/react-dom/cjs/react-dom.production.min.js": -/*!*****************************************************************************!*\ - !*** ../node_modules/@hot-loader/react-dom/cjs/react-dom.production.min.js ***! - \*****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.12.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar aa = __webpack_require__(/*! react */ \"../node_modules/react/index.js\"),\n n = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\"),\n q = __webpack_require__(/*! scheduler */ \"../node_modules/scheduler/index.js\");\n\nfunction u(a) {\n for (var b = \"https://reactjs.org/docs/error-decoder.html?invariant=\" + a, c = 1; c < arguments.length; c++) {\n b += \"&args[]=\" + encodeURIComponent(arguments[c]);\n }\n\n return \"Minified React error #\" + a + \"; visit \" + b + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";\n}\n\nif (!aa) throw Error(u(227));\nvar ba = null,\n ca = {};\n\nfunction da() {\n if (ba) for (var a in ca) {\n var b = ca[a],\n c = ba.indexOf(a);\n if (!(-1 < c)) throw Error(u(96, a));\n\n if (!ea[c]) {\n if (!b.extractEvents) throw Error(u(97, a));\n ea[c] = b;\n c = b.eventTypes;\n\n for (var d in c) {\n var e = void 0;\n var f = c[d],\n g = b,\n h = d;\n if (fa.hasOwnProperty(h)) throw Error(u(99, h));\n fa[h] = f;\n var k = f.phasedRegistrationNames;\n\n if (k) {\n for (e in k) {\n k.hasOwnProperty(e) && ha(k[e], g, h);\n }\n\n e = !0;\n } else f.registrationName ? (ha(f.registrationName, g, h), e = !0) : e = !1;\n\n if (!e) throw Error(u(98, d, a));\n }\n }\n }\n}\n\nfunction ha(a, b, c) {\n if (ia[a]) throw Error(u(100, a));\n ia[a] = b;\n ja[a] = b.eventTypes[c].dependencies;\n}\n\nvar ea = [],\n fa = {},\n ia = {},\n ja = {};\n\nfunction ka(a, b, c, d, e, f, g, h, k) {\n var l = Array.prototype.slice.call(arguments, 3);\n\n try {\n b.apply(c, l);\n } catch (m) {\n this.onError(m);\n }\n}\n\nvar la = !1,\n ma = null,\n na = !1,\n oa = null,\n pa = {\n onError: function onError(a) {\n la = !0;\n ma = a;\n }\n};\n\nfunction qa(a, b, c, d, e, f, g, h, k) {\n la = !1;\n ma = null;\n ka.apply(pa, arguments);\n}\n\nfunction ra(a, b, c, d, e, f, g, h, k) {\n qa.apply(this, arguments);\n\n if (la) {\n if (la) {\n var l = ma;\n la = !1;\n ma = null;\n } else throw Error(u(198));\n\n na || (na = !0, oa = l);\n }\n}\n\nvar sa = null,\n ua = null,\n va = null;\n\nfunction wa(a, b, c) {\n var d = a.type || \"unknown-event\";\n a.currentTarget = va(c);\n ra(d, b, void 0, a);\n a.currentTarget = null;\n}\n\nfunction xa(a, b) {\n if (null == b) throw Error(u(30));\n if (null == a) return b;\n\n if (Array.isArray(a)) {\n if (Array.isArray(b)) return a.push.apply(a, b), a;\n a.push(b);\n return a;\n }\n\n return Array.isArray(b) ? [a].concat(b) : [a, b];\n}\n\nfunction ya(a, b, c) {\n Array.isArray(a) ? a.forEach(b, c) : a && b.call(c, a);\n}\n\nvar za = null;\n\nfunction Aa(a) {\n if (a) {\n var b = a._dispatchListeners,\n c = a._dispatchInstances;\n if (Array.isArray(b)) for (var d = 0; d < b.length && !a.isPropagationStopped(); d++) {\n wa(a, b[d], c[d]);\n } else b && wa(a, b, c);\n a._dispatchListeners = null;\n a._dispatchInstances = null;\n a.isPersistent() || a.constructor.release(a);\n }\n}\n\nfunction Ba(a) {\n null !== a && (za = xa(za, a));\n a = za;\n za = null;\n\n if (a) {\n ya(a, Aa);\n if (za) throw Error(u(95));\n if (na) throw a = oa, na = !1, oa = null, a;\n }\n}\n\nvar Ca = {\n injectEventPluginOrder: function injectEventPluginOrder(a) {\n if (ba) throw Error(u(101));\n ba = Array.prototype.slice.call(a);\n da();\n },\n injectEventPluginsByName: function injectEventPluginsByName(a) {\n var b = !1,\n c;\n\n for (c in a) {\n if (a.hasOwnProperty(c)) {\n var d = a[c];\n\n if (!ca.hasOwnProperty(c) || ca[c] !== d) {\n if (ca[c]) throw Error(u(102, c));\n ca[c] = d;\n b = !0;\n }\n }\n }\n\n b && da();\n }\n};\n\nfunction Da(a, b) {\n var c = a.stateNode;\n if (!c) return null;\n var d = sa(c);\n if (!d) return null;\n c = d[b];\n\n a: switch (b) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n (d = !d.disabled) || (a = a.type, d = !(\"button\" === a || \"input\" === a || \"select\" === a || \"textarea\" === a));\n a = !d;\n break a;\n\n default:\n a = !1;\n }\n\n if (a) return null;\n if (c && \"function\" !== typeof c) throw Error(u(231, b, _typeof(c)));\n return c;\n}\n\nvar Ea = aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\nEa.hasOwnProperty(\"ReactCurrentDispatcher\") || (Ea.ReactCurrentDispatcher = {\n current: null\n});\nEa.hasOwnProperty(\"ReactCurrentBatchConfig\") || (Ea.ReactCurrentBatchConfig = {\n suspense: null\n});\nvar Fa = /^(.*)[\\\\\\/]/,\n w = \"function\" === typeof Symbol && Symbol[\"for\"],\n Ga = w ? Symbol[\"for\"](\"react.element\") : 60103,\n Ha = w ? Symbol[\"for\"](\"react.portal\") : 60106,\n Ia = w ? Symbol[\"for\"](\"react.fragment\") : 60107,\n Ja = w ? Symbol[\"for\"](\"react.strict_mode\") : 60108,\n Ka = w ? Symbol[\"for\"](\"react.profiler\") : 60114,\n La = w ? Symbol[\"for\"](\"react.provider\") : 60109,\n Ma = w ? Symbol[\"for\"](\"react.context\") : 60110,\n Na = w ? Symbol[\"for\"](\"react.concurrent_mode\") : 60111,\n Oa = w ? Symbol[\"for\"](\"react.forward_ref\") : 60112,\n Pa = w ? Symbol[\"for\"](\"react.suspense\") : 60113,\n Qa = w ? Symbol[\"for\"](\"react.suspense_list\") : 60120,\n Ra = w ? Symbol[\"for\"](\"react.memo\") : 60115,\n Sa = w ? Symbol[\"for\"](\"react.lazy\") : 60116;\nw && Symbol[\"for\"](\"react.fundamental\");\nw && Symbol[\"for\"](\"react.responder\");\nw && Symbol[\"for\"](\"react.scope\");\nvar Ta = \"function\" === typeof Symbol && Symbol.iterator;\n\nfunction Ua(a) {\n if (null === a || \"object\" !== _typeof(a)) return null;\n a = Ta && a[Ta] || a[\"@@iterator\"];\n return \"function\" === typeof a ? a : null;\n}\n\nfunction Va(a) {\n if (-1 === a._status) {\n a._status = 0;\n var b = a._ctor;\n b = b();\n a._result = b;\n b.then(function (b) {\n 0 === a._status && (b = b[\"default\"], a._status = 1, a._result = b);\n }, function (b) {\n 0 === a._status && (a._status = 2, a._result = b);\n });\n }\n}\n\nfunction Wa(a) {\n if (null == a) return null;\n if (\"function\" === typeof a) return a.displayName || a.name || null;\n if (\"string\" === typeof a) return a;\n\n switch (a) {\n case Ia:\n return \"Fragment\";\n\n case Ha:\n return \"Portal\";\n\n case Ka:\n return \"Profiler\";\n\n case Ja:\n return \"StrictMode\";\n\n case Pa:\n return \"Suspense\";\n\n case Qa:\n return \"SuspenseList\";\n }\n\n if (\"object\" === _typeof(a)) switch (a.$$typeof) {\n case Ma:\n return \"Context.Consumer\";\n\n case La:\n return \"Context.Provider\";\n\n case Oa:\n var b = a.render;\n b = b.displayName || b.name || \"\";\n return a.displayName || (\"\" !== b ? \"ForwardRef(\" + b + \")\" : \"ForwardRef\");\n\n case Ra:\n return Wa(a.type);\n\n case Sa:\n if (a = 1 === a._status ? a._result : null) return Wa(a);\n }\n return null;\n}\n\nfunction Xa(a) {\n var b = \"\";\n\n do {\n a: switch (a.tag) {\n case 3:\n case 4:\n case 6:\n case 7:\n case 10:\n case 9:\n var c = \"\";\n break a;\n\n default:\n var d = a._debugOwner,\n e = a._debugSource,\n f = Wa(a.type);\n c = null;\n d && (c = Wa(d.type));\n d = f;\n f = \"\";\n e ? f = \" (at \" + e.fileName.replace(Fa, \"\") + \":\" + e.lineNumber + \")\" : c && (f = \" (created by \" + c + \")\");\n c = \"\\n in \" + (d || \"Unknown\") + f;\n }\n\n b += c;\n a = a[\"return\"];\n } while (a);\n\n return b;\n}\n\nvar Ya = !(\"undefined\" === typeof window || \"undefined\" === typeof window.document || \"undefined\" === typeof window.document.createElement),\n Za = null,\n $a = null,\n ab = null;\n\nfunction bb(a) {\n if (a = ua(a)) {\n if (\"function\" !== typeof Za) throw Error(u(280));\n var b = sa(a.stateNode);\n Za(a.stateNode, a.type, b);\n }\n}\n\nfunction cb(a) {\n $a ? ab ? ab.push(a) : ab = [a] : $a = a;\n}\n\nfunction db() {\n if ($a) {\n var a = $a,\n b = ab;\n ab = $a = null;\n bb(a);\n if (b) for (a = 0; a < b.length; a++) {\n bb(b[a]);\n }\n }\n}\n\nfunction eb(a, b) {\n return a(b);\n}\n\nfunction fb(a, b, c, d) {\n return a(b, c, d);\n}\n\nfunction gb() {}\n\nvar hb = eb,\n ib = !1,\n jb = !1;\n\nfunction kb() {\n if (null !== $a || null !== ab) gb(), db();\n}\n\nnew Map();\nvar lb = /^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,\n mb = Object.prototype.hasOwnProperty,\n nb = {},\n ob = {};\n\nfunction pb(a) {\n if (mb.call(ob, a)) return !0;\n if (mb.call(nb, a)) return !1;\n if (lb.test(a)) return ob[a] = !0;\n nb[a] = !0;\n return !1;\n}\n\nfunction qb(a, b, c, d) {\n if (null !== c && 0 === c.type) return !1;\n\n switch (_typeof(b)) {\n case \"function\":\n case \"symbol\":\n return !0;\n\n case \"boolean\":\n if (d) return !1;\n if (null !== c) return !c.acceptsBooleans;\n a = a.toLowerCase().slice(0, 5);\n return \"data-\" !== a && \"aria-\" !== a;\n\n default:\n return !1;\n }\n}\n\nfunction rb(a, b, c, d) {\n if (null === b || \"undefined\" === typeof b || qb(a, b, c, d)) return !0;\n if (d) return !1;\n if (null !== c) switch (c.type) {\n case 3:\n return !b;\n\n case 4:\n return !1 === b;\n\n case 5:\n return isNaN(b);\n\n case 6:\n return isNaN(b) || 1 > b;\n }\n return !1;\n}\n\nfunction B(a, b, c, d, e, f) {\n this.acceptsBooleans = 2 === b || 3 === b || 4 === b;\n this.attributeName = d;\n this.attributeNamespace = e;\n this.mustUseProperty = c;\n this.propertyName = a;\n this.type = b;\n this.sanitizeURL = f;\n}\n\nvar D = {};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function (a) {\n D[a] = new B(a, 0, !1, a, null, !1);\n});\n[[\"acceptCharset\", \"accept-charset\"], [\"className\", \"class\"], [\"htmlFor\", \"for\"], [\"httpEquiv\", \"http-equiv\"]].forEach(function (a) {\n var b = a[0];\n D[b] = new B(b, 1, !1, a[1], null, !1);\n});\n[\"contentEditable\", \"draggable\", \"spellCheck\", \"value\"].forEach(function (a) {\n D[a] = new B(a, 2, !1, a.toLowerCase(), null, !1);\n});\n[\"autoReverse\", \"externalResourcesRequired\", \"focusable\", \"preserveAlpha\"].forEach(function (a) {\n D[a] = new B(a, 2, !1, a, null, !1);\n});\n\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function (a) {\n D[a] = new B(a, 3, !1, a.toLowerCase(), null, !1);\n});\n[\"checked\", \"multiple\", \"muted\", \"selected\"].forEach(function (a) {\n D[a] = new B(a, 3, !0, a, null, !1);\n});\n[\"capture\", \"download\"].forEach(function (a) {\n D[a] = new B(a, 4, !1, a, null, !1);\n});\n[\"cols\", \"rows\", \"size\", \"span\"].forEach(function (a) {\n D[a] = new B(a, 6, !1, a, null, !1);\n});\n[\"rowSpan\", \"start\"].forEach(function (a) {\n D[a] = new B(a, 5, !1, a.toLowerCase(), null, !1);\n});\nvar sb = /[\\-:]([a-z])/g;\n\nfunction tb(a) {\n return a[1].toUpperCase();\n}\n\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function (a) {\n var b = a.replace(sb, tb);\n D[b] = new B(b, 1, !1, a, null, !1);\n});\n\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function (a) {\n var b = a.replace(sb, tb);\n D[b] = new B(b, 1, !1, a, \"http://www.w3.org/1999/xlink\", !1);\n});\n[\"xml:base\", \"xml:lang\", \"xml:space\"].forEach(function (a) {\n var b = a.replace(sb, tb);\n D[b] = new B(b, 1, !1, a, \"http://www.w3.org/XML/1998/namespace\", !1);\n});\n[\"tabIndex\", \"crossOrigin\"].forEach(function (a) {\n D[a] = new B(a, 1, !1, a.toLowerCase(), null, !1);\n});\nD.xlinkHref = new B(\"xlinkHref\", 1, !1, \"xlink:href\", \"http://www.w3.org/1999/xlink\", !0);\n[\"src\", \"href\", \"action\", \"formAction\"].forEach(function (a) {\n D[a] = new B(a, 1, !1, a.toLowerCase(), null, !0);\n});\n\nfunction ub(a) {\n switch (_typeof(a)) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n case \"string\":\n case \"undefined\":\n return a;\n\n default:\n return \"\";\n }\n}\n\nfunction vb(a, b, c, d) {\n var e = D.hasOwnProperty(b) ? D[b] : null;\n var f = null !== e ? 0 === e.type : d ? !1 : !(2 < b.length) || \"o\" !== b[0] && \"O\" !== b[0] || \"n\" !== b[1] && \"N\" !== b[1] ? !1 : !0;\n f || (rb(b, c, e, d) && (c = null), d || null === e ? pb(b) && (null === c ? a.removeAttribute(b) : a.setAttribute(b, \"\" + c)) : e.mustUseProperty ? a[e.propertyName] = null === c ? 3 === e.type ? !1 : \"\" : c : (b = e.attributeName, d = e.attributeNamespace, null === c ? a.removeAttribute(b) : (e = e.type, c = 3 === e || 4 === e && !0 === c ? \"\" : \"\" + c, d ? a.setAttributeNS(d, b, c) : a.setAttribute(b, c))));\n}\n\nfunction wb(a) {\n var b = a.type;\n return (a = a.nodeName) && \"input\" === a.toLowerCase() && (\"checkbox\" === b || \"radio\" === b);\n}\n\nfunction xb(a) {\n var b = wb(a) ? \"checked\" : \"value\",\n c = Object.getOwnPropertyDescriptor(a.constructor.prototype, b),\n d = \"\" + a[b];\n\n if (!a.hasOwnProperty(b) && \"undefined\" !== typeof c && \"function\" === typeof c.get && \"function\" === typeof c.set) {\n var e = c.get,\n f = c.set;\n Object.defineProperty(a, b, {\n configurable: !0,\n get: function get() {\n return e.call(this);\n },\n set: function set(a) {\n d = \"\" + a;\n f.call(this, a);\n }\n });\n Object.defineProperty(a, b, {\n enumerable: c.enumerable\n });\n return {\n getValue: function getValue() {\n return d;\n },\n setValue: function setValue(a) {\n d = \"\" + a;\n },\n stopTracking: function stopTracking() {\n a._valueTracker = null;\n delete a[b];\n }\n };\n }\n}\n\nfunction yb(a) {\n a._valueTracker || (a._valueTracker = xb(a));\n}\n\nfunction zb(a) {\n if (!a) return !1;\n var b = a._valueTracker;\n if (!b) return !0;\n var c = b.getValue();\n var d = \"\";\n a && (d = wb(a) ? a.checked ? \"true\" : \"false\" : a.value);\n a = d;\n return a !== c ? (b.setValue(a), !0) : !1;\n}\n\nfunction Ab(a, b) {\n var c = b.checked;\n return n({}, b, {\n defaultChecked: void 0,\n defaultValue: void 0,\n value: void 0,\n checked: null != c ? c : a._wrapperState.initialChecked\n });\n}\n\nfunction Bb(a, b) {\n var c = null == b.defaultValue ? \"\" : b.defaultValue,\n d = null != b.checked ? b.checked : b.defaultChecked;\n c = ub(null != b.value ? b.value : c);\n a._wrapperState = {\n initialChecked: d,\n initialValue: c,\n controlled: \"checkbox\" === b.type || \"radio\" === b.type ? null != b.checked : null != b.value\n };\n}\n\nfunction Cb(a, b) {\n b = b.checked;\n null != b && vb(a, \"checked\", b, !1);\n}\n\nfunction Eb(a, b) {\n Cb(a, b);\n var c = ub(b.value),\n d = b.type;\n\n if (null != c) {\n if (\"number\" === d) {\n if (0 === c && \"\" === a.value || a.value != c) a.value = \"\" + c;\n } else a.value !== \"\" + c && (a.value = \"\" + c);\n } else if (\"submit\" === d || \"reset\" === d) {\n a.removeAttribute(\"value\");\n return;\n }\n\n b.hasOwnProperty(\"value\") ? Fb(a, b.type, c) : b.hasOwnProperty(\"defaultValue\") && Fb(a, b.type, ub(b.defaultValue));\n null == b.checked && null != b.defaultChecked && (a.defaultChecked = !!b.defaultChecked);\n}\n\nfunction Gb(a, b, c) {\n if (b.hasOwnProperty(\"value\") || b.hasOwnProperty(\"defaultValue\")) {\n var d = b.type;\n if (!(\"submit\" !== d && \"reset\" !== d || void 0 !== b.value && null !== b.value)) return;\n b = \"\" + a._wrapperState.initialValue;\n c || b === a.value || (a.value = b);\n a.defaultValue = b;\n }\n\n c = a.name;\n \"\" !== c && (a.name = \"\");\n a.defaultChecked = !a.defaultChecked;\n a.defaultChecked = !!a._wrapperState.initialChecked;\n \"\" !== c && (a.name = c);\n}\n\nfunction Fb(a, b, c) {\n if (\"number\" !== b || a.ownerDocument.activeElement !== a) null == c ? a.defaultValue = \"\" + a._wrapperState.initialValue : a.defaultValue !== \"\" + c && (a.defaultValue = \"\" + c);\n}\n\nfunction Hb(a) {\n var b = \"\";\n aa.Children.forEach(a, function (a) {\n null != a && (b += a);\n });\n return b;\n}\n\nfunction Ib(a, b) {\n a = n({\n children: void 0\n }, b);\n if (b = Hb(b.children)) a.children = b;\n return a;\n}\n\nfunction Jb(a, b, c, d) {\n a = a.options;\n\n if (b) {\n b = {};\n\n for (var e = 0; e < c.length; e++) {\n b[\"$\" + c[e]] = !0;\n }\n\n for (c = 0; c < a.length; c++) {\n e = b.hasOwnProperty(\"$\" + a[c].value), a[c].selected !== e && (a[c].selected = e), e && d && (a[c].defaultSelected = !0);\n }\n } else {\n c = \"\" + ub(c);\n b = null;\n\n for (e = 0; e < a.length; e++) {\n if (a[e].value === c) {\n a[e].selected = !0;\n d && (a[e].defaultSelected = !0);\n return;\n }\n\n null !== b || a[e].disabled || (b = a[e]);\n }\n\n null !== b && (b.selected = !0);\n }\n}\n\nfunction Kb(a, b) {\n if (null != b.dangerouslySetInnerHTML) throw Error(u(91));\n return n({}, b, {\n value: void 0,\n defaultValue: void 0,\n children: \"\" + a._wrapperState.initialValue\n });\n}\n\nfunction Lb(a, b) {\n var c = b.value;\n\n if (null == c) {\n c = b.defaultValue;\n b = b.children;\n\n if (null != b) {\n if (null != c) throw Error(u(92));\n\n if (Array.isArray(b)) {\n if (!(1 >= b.length)) throw Error(u(93));\n b = b[0];\n }\n\n c = b;\n }\n\n null == c && (c = \"\");\n }\n\n a._wrapperState = {\n initialValue: ub(c)\n };\n}\n\nfunction Mb(a, b) {\n var c = ub(b.value),\n d = ub(b.defaultValue);\n null != c && (c = \"\" + c, c !== a.value && (a.value = c), null == b.defaultValue && a.defaultValue !== c && (a.defaultValue = c));\n null != d && (a.defaultValue = \"\" + d);\n}\n\nfunction Nb(a) {\n var b = a.textContent;\n b === a._wrapperState.initialValue && \"\" !== b && null !== b && (a.value = b);\n}\n\nvar Ob = {\n html: \"http://www.w3.org/1999/xhtml\",\n mathml: \"http://www.w3.org/1998/Math/MathML\",\n svg: \"http://www.w3.org/2000/svg\"\n};\n\nfunction Pb(a) {\n switch (a) {\n case \"svg\":\n return \"http://www.w3.org/2000/svg\";\n\n case \"math\":\n return \"http://www.w3.org/1998/Math/MathML\";\n\n default:\n return \"http://www.w3.org/1999/xhtml\";\n }\n}\n\nfunction Qb(a, b) {\n return null == a || \"http://www.w3.org/1999/xhtml\" === a ? Pb(b) : \"http://www.w3.org/2000/svg\" === a && \"foreignObject\" === b ? \"http://www.w3.org/1999/xhtml\" : a;\n}\n\nvar Rb,\n Sb = function (a) {\n return \"undefined\" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function (b, c, d, e) {\n MSApp.execUnsafeLocalFunction(function () {\n return a(b, c, d, e);\n });\n } : a;\n}(function (a, b) {\n if (a.namespaceURI !== Ob.svg || \"innerHTML\" in a) a.innerHTML = b;else {\n Rb = Rb || document.createElement(\"div\");\n Rb.innerHTML = \"<svg>\" + b.valueOf().toString() + \"</svg>\";\n\n for (b = Rb.firstChild; a.firstChild;) {\n a.removeChild(a.firstChild);\n }\n\n for (; b.firstChild;) {\n a.appendChild(b.firstChild);\n }\n }\n});\n\nfunction Tb(a, b) {\n if (b) {\n var c = a.firstChild;\n\n if (c && c === a.lastChild && 3 === c.nodeType) {\n c.nodeValue = b;\n return;\n }\n }\n\n a.textContent = b;\n}\n\nfunction Ub(a, b) {\n var c = {};\n c[a.toLowerCase()] = b.toLowerCase();\n c[\"Webkit\" + a] = \"webkit\" + b;\n c[\"Moz\" + a] = \"moz\" + b;\n return c;\n}\n\nvar Vb = {\n animationend: Ub(\"Animation\", \"AnimationEnd\"),\n animationiteration: Ub(\"Animation\", \"AnimationIteration\"),\n animationstart: Ub(\"Animation\", \"AnimationStart\"),\n transitionend: Ub(\"Transition\", \"TransitionEnd\")\n},\n Wb = {},\n Xb = {};\nYa && (Xb = document.createElement(\"div\").style, \"AnimationEvent\" in window || (delete Vb.animationend.animation, delete Vb.animationiteration.animation, delete Vb.animationstart.animation), \"TransitionEvent\" in window || delete Vb.transitionend.transition);\n\nfunction Yb(a) {\n if (Wb[a]) return Wb[a];\n if (!Vb[a]) return a;\n var b = Vb[a],\n c;\n\n for (c in b) {\n if (b.hasOwnProperty(c) && c in Xb) return Wb[a] = b[c];\n }\n\n return a;\n}\n\nvar Zb = Yb(\"animationend\"),\n $b = Yb(\"animationiteration\"),\n ac = Yb(\"animationstart\"),\n bc = Yb(\"transitionend\"),\n cc = \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \");\n\nfunction ec(a) {\n var b = a,\n c = a;\n if (a.alternate) for (; b[\"return\"];) {\n b = b[\"return\"];\n } else {\n a = b;\n\n do {\n b = a, 0 !== (b.effectTag & 1026) && (c = b[\"return\"]), a = b[\"return\"];\n } while (a);\n }\n return 3 === b.tag ? c : null;\n}\n\nfunction fc(a) {\n if (13 === a.tag) {\n var b = a.memoizedState;\n null === b && (a = a.alternate, null !== a && (b = a.memoizedState));\n if (null !== b) return b.dehydrated;\n }\n\n return null;\n}\n\nfunction gc(a) {\n if (ec(a) !== a) throw Error(u(188));\n}\n\nfunction hc(a) {\n var b = a.alternate;\n\n if (!b) {\n b = ec(a);\n if (null === b) throw Error(u(188));\n return b !== a ? null : a;\n }\n\n for (var c = a, d = b;;) {\n var e = c[\"return\"];\n if (null === e) break;\n var f = e.alternate;\n\n if (null === f) {\n d = e[\"return\"];\n\n if (null !== d) {\n c = d;\n continue;\n }\n\n break;\n }\n\n if (e.child === f.child) {\n for (f = e.child; f;) {\n if (f === c) return gc(e), a;\n if (f === d) return gc(e), b;\n f = f.sibling;\n }\n\n throw Error(u(188));\n }\n\n if (c[\"return\"] !== d[\"return\"]) c = e, d = f;else {\n for (var g = !1, h = e.child; h;) {\n if (h === c) {\n g = !0;\n c = e;\n d = f;\n break;\n }\n\n if (h === d) {\n g = !0;\n d = e;\n c = f;\n break;\n }\n\n h = h.sibling;\n }\n\n if (!g) {\n for (h = f.child; h;) {\n if (h === c) {\n g = !0;\n c = f;\n d = e;\n break;\n }\n\n if (h === d) {\n g = !0;\n d = f;\n c = e;\n break;\n }\n\n h = h.sibling;\n }\n\n if (!g) throw Error(u(189));\n }\n }\n if (c.alternate !== d) throw Error(u(190));\n }\n\n if (3 !== c.tag) throw Error(u(188));\n return c.stateNode.current === c ? a : b;\n}\n\nfunction ic(a) {\n a = hc(a);\n if (!a) return null;\n\n for (var b = a;;) {\n if (5 === b.tag || 6 === b.tag) return b;\n if (b.child) b.child[\"return\"] = b, b = b.child;else {\n if (b === a) break;\n\n for (; !b.sibling;) {\n if (!b[\"return\"] || b[\"return\"] === a) return null;\n b = b[\"return\"];\n }\n\n b.sibling[\"return\"] = b[\"return\"];\n b = b.sibling;\n }\n }\n\n return null;\n}\n\nvar jc,\n kc,\n lc,\n mc = !1,\n nc = [],\n oc = null,\n pc = null,\n qc = null,\n rc = new Map(),\n sc = new Map(),\n tc = [],\n uc = \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),\n vc = \"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\n\nfunction wc(a) {\n var b = xc(a);\n uc.forEach(function (c) {\n yc(c, a, b);\n });\n vc.forEach(function (c) {\n yc(c, a, b);\n });\n}\n\nfunction zc(a, b, c, d) {\n return {\n blockedOn: a,\n topLevelType: b,\n eventSystemFlags: c | 32,\n nativeEvent: d\n };\n}\n\nfunction Ac(a, b) {\n switch (a) {\n case \"focus\":\n case \"blur\":\n oc = null;\n break;\n\n case \"dragenter\":\n case \"dragleave\":\n pc = null;\n break;\n\n case \"mouseover\":\n case \"mouseout\":\n qc = null;\n break;\n\n case \"pointerover\":\n case \"pointerout\":\n rc[\"delete\"](b.pointerId);\n break;\n\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n sc[\"delete\"](b.pointerId);\n }\n}\n\nfunction Bc(a, b, c, d, e) {\n if (null === a || a.nativeEvent !== e) return a = zc(b, c, d, e), null !== b && (b = Cc(b), null !== b && kc(b)), a;\n a.eventSystemFlags |= d;\n return a;\n}\n\nfunction Dc(a, b, c, d) {\n switch (b) {\n case \"focus\":\n return oc = Bc(oc, a, b, c, d), !0;\n\n case \"dragenter\":\n return pc = Bc(pc, a, b, c, d), !0;\n\n case \"mouseover\":\n return qc = Bc(qc, a, b, c, d), !0;\n\n case \"pointerover\":\n var e = d.pointerId;\n rc.set(e, Bc(rc.get(e) || null, a, b, c, d));\n return !0;\n\n case \"gotpointercapture\":\n return e = d.pointerId, sc.set(e, Bc(sc.get(e) || null, a, b, c, d)), !0;\n }\n\n return !1;\n}\n\nfunction Ec(a) {\n var b = Fc(a.target);\n\n if (null !== b) {\n var c = ec(b);\n if (null !== c) if (b = c.tag, 13 === b) {\n if (b = fc(c), null !== b) {\n a.blockedOn = b;\n q.unstable_runWithPriority(a.priority, function () {\n lc(c);\n });\n return;\n }\n } else if (3 === b && c.stateNode.hydrate) {\n a.blockedOn = 3 === c.tag ? c.stateNode.containerInfo : null;\n return;\n }\n }\n\n a.blockedOn = null;\n}\n\nfunction Gc(a) {\n if (null !== a.blockedOn) return !1;\n var b = Hc(a.topLevelType, a.eventSystemFlags, a.nativeEvent);\n\n if (null !== b) {\n var c = Cc(b);\n null !== c && kc(c);\n a.blockedOn = b;\n return !1;\n }\n\n return !0;\n}\n\nfunction Ic(a, b, c) {\n Gc(a) && c[\"delete\"](b);\n}\n\nfunction Jc() {\n for (mc = !1; 0 < nc.length;) {\n var a = nc[0];\n\n if (null !== a.blockedOn) {\n a = Cc(a.blockedOn);\n null !== a && jc(a);\n break;\n }\n\n var b = Hc(a.topLevelType, a.eventSystemFlags, a.nativeEvent);\n null !== b ? a.blockedOn = b : nc.shift();\n }\n\n null !== oc && Gc(oc) && (oc = null);\n null !== pc && Gc(pc) && (pc = null);\n null !== qc && Gc(qc) && (qc = null);\n rc.forEach(Ic);\n sc.forEach(Ic);\n}\n\nfunction Kc(a, b) {\n a.blockedOn === b && (a.blockedOn = null, mc || (mc = !0, q.unstable_scheduleCallback(q.unstable_NormalPriority, Jc)));\n}\n\nfunction Lc(a) {\n function b(b) {\n return Kc(b, a);\n }\n\n if (0 < nc.length) {\n Kc(nc[0], a);\n\n for (var c = 1; c < nc.length; c++) {\n var d = nc[c];\n d.blockedOn === a && (d.blockedOn = null);\n }\n }\n\n null !== oc && Kc(oc, a);\n null !== pc && Kc(pc, a);\n null !== qc && Kc(qc, a);\n rc.forEach(b);\n sc.forEach(b);\n\n for (c = 0; c < tc.length; c++) {\n d = tc[c], d.blockedOn === a && (d.blockedOn = null);\n }\n\n for (; 0 < tc.length && (c = tc[0], null === c.blockedOn);) {\n Ec(c), null === c.blockedOn && tc.shift();\n }\n}\n\nfunction Mc(a) {\n a = a.target || a.srcElement || window;\n a.correspondingUseElement && (a = a.correspondingUseElement);\n return 3 === a.nodeType ? a.parentNode : a;\n}\n\nfunction Nc(a) {\n do {\n a = a[\"return\"];\n } while (a && 5 !== a.tag);\n\n return a ? a : null;\n}\n\nfunction Oc(a, b, c) {\n if (b = Da(a, c.dispatchConfig.phasedRegistrationNames[b])) c._dispatchListeners = xa(c._dispatchListeners, b), c._dispatchInstances = xa(c._dispatchInstances, a);\n}\n\nfunction Pc(a) {\n if (a && a.dispatchConfig.phasedRegistrationNames) {\n for (var b = a._targetInst, c = []; b;) {\n c.push(b), b = Nc(b);\n }\n\n for (b = c.length; 0 < b--;) {\n Oc(c[b], \"captured\", a);\n }\n\n for (b = 0; b < c.length; b++) {\n Oc(c[b], \"bubbled\", a);\n }\n }\n}\n\nfunction Qc(a, b, c) {\n a && c && c.dispatchConfig.registrationName && (b = Da(a, c.dispatchConfig.registrationName)) && (c._dispatchListeners = xa(c._dispatchListeners, b), c._dispatchInstances = xa(c._dispatchInstances, a));\n}\n\nfunction Rc(a) {\n a && a.dispatchConfig.registrationName && Qc(a._targetInst, null, a);\n}\n\nfunction Sc(a) {\n ya(a, Pc);\n}\n\nfunction Tc() {\n return !0;\n}\n\nfunction Uc() {\n return !1;\n}\n\nfunction E(a, b, c, d) {\n this.dispatchConfig = a;\n this._targetInst = b;\n this.nativeEvent = c;\n a = this.constructor.Interface;\n\n for (var e in a) {\n a.hasOwnProperty(e) && ((b = a[e]) ? this[e] = b(c) : \"target\" === e ? this.target = d : this[e] = c[e]);\n }\n\n this.isDefaultPrevented = (null != c.defaultPrevented ? c.defaultPrevented : !1 === c.returnValue) ? Tc : Uc;\n this.isPropagationStopped = Uc;\n return this;\n}\n\nn(E.prototype, {\n preventDefault: function preventDefault() {\n this.defaultPrevented = !0;\n var a = this.nativeEvent;\n a && (a.preventDefault ? a.preventDefault() : \"unknown\" !== typeof a.returnValue && (a.returnValue = !1), this.isDefaultPrevented = Tc);\n },\n stopPropagation: function stopPropagation() {\n var a = this.nativeEvent;\n a && (a.stopPropagation ? a.stopPropagation() : \"unknown\" !== typeof a.cancelBubble && (a.cancelBubble = !0), this.isPropagationStopped = Tc);\n },\n persist: function persist() {\n this.isPersistent = Tc;\n },\n isPersistent: Uc,\n destructor: function destructor() {\n var a = this.constructor.Interface,\n b;\n\n for (b in a) {\n this[b] = null;\n }\n\n this.nativeEvent = this._targetInst = this.dispatchConfig = null;\n this.isPropagationStopped = this.isDefaultPrevented = Uc;\n this._dispatchInstances = this._dispatchListeners = null;\n }\n});\nE.Interface = {\n type: null,\n target: null,\n currentTarget: function currentTarget() {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function timeStamp(a) {\n return a.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\nE.extend = function (a) {\n function b() {}\n\n function c() {\n return d.apply(this, arguments);\n }\n\n var d = this;\n b.prototype = d.prototype;\n var e = new b();\n n(e, c.prototype);\n c.prototype = e;\n c.prototype.constructor = c;\n c.Interface = n({}, d.Interface, a);\n c.extend = d.extend;\n Vc(c);\n return c;\n};\n\nVc(E);\n\nfunction Wc(a, b, c, d) {\n if (this.eventPool.length) {\n var e = this.eventPool.pop();\n this.call(e, a, b, c, d);\n return e;\n }\n\n return new this(a, b, c, d);\n}\n\nfunction Xc(a) {\n if (!(a instanceof this)) throw Error(u(279));\n a.destructor();\n 10 > this.eventPool.length && this.eventPool.push(a);\n}\n\nfunction Vc(a) {\n a.eventPool = [];\n a.getPooled = Wc;\n a.release = Xc;\n}\n\nvar Yc = E.extend({\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n}),\n Zc = E.extend({\n clipboardData: function clipboardData(a) {\n return \"clipboardData\" in a ? a.clipboardData : window.clipboardData;\n }\n}),\n $c = E.extend({\n view: null,\n detail: null\n}),\n ad = $c.extend({\n relatedTarget: null\n});\n\nfunction bd(a) {\n var b = a.keyCode;\n \"charCode\" in a ? (a = a.charCode, 0 === a && 13 === b && (a = 13)) : a = b;\n 10 === a && (a = 13);\n return 32 <= a || 13 === a ? a : 0;\n}\n\nvar cd = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n},\n dd = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n},\n ed = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n};\n\nfunction gd(a) {\n var b = this.nativeEvent;\n return b.getModifierState ? b.getModifierState(a) : (a = ed[a]) ? !!b[a] : !1;\n}\n\nfunction hd() {\n return gd;\n}\n\nvar id = $c.extend({\n key: function key(a) {\n if (a.key) {\n var b = cd[a.key] || a.key;\n if (\"Unidentified\" !== b) return b;\n }\n\n return \"keypress\" === a.type ? (a = bd(a), 13 === a ? \"Enter\" : String.fromCharCode(a)) : \"keydown\" === a.type || \"keyup\" === a.type ? dd[a.keyCode] || \"Unidentified\" : \"\";\n },\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: hd,\n charCode: function charCode(a) {\n return \"keypress\" === a.type ? bd(a) : 0;\n },\n keyCode: function keyCode(a) {\n return \"keydown\" === a.type || \"keyup\" === a.type ? a.keyCode : 0;\n },\n which: function which(a) {\n return \"keypress\" === a.type ? bd(a) : \"keydown\" === a.type || \"keyup\" === a.type ? a.keyCode : 0;\n }\n}),\n jd = 0,\n kd = 0,\n ld = !1,\n md = !1,\n nd = $c.extend({\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: hd,\n button: null,\n buttons: null,\n relatedTarget: function relatedTarget(a) {\n return a.relatedTarget || (a.fromElement === a.srcElement ? a.toElement : a.fromElement);\n },\n movementX: function movementX(a) {\n if (\"movementX\" in a) return a.movementX;\n var b = jd;\n jd = a.screenX;\n return ld ? \"mousemove\" === a.type ? a.screenX - b : 0 : (ld = !0, 0);\n },\n movementY: function movementY(a) {\n if (\"movementY\" in a) return a.movementY;\n var b = kd;\n kd = a.screenY;\n return md ? \"mousemove\" === a.type ? a.screenY - b : 0 : (md = !0, 0);\n }\n}),\n od = nd.extend({\n pointerId: null,\n width: null,\n height: null,\n pressure: null,\n tangentialPressure: null,\n tiltX: null,\n tiltY: null,\n twist: null,\n pointerType: null,\n isPrimary: null\n}),\n pd = nd.extend({\n dataTransfer: null\n}),\n qd = $c.extend({\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: hd\n}),\n rd = E.extend({\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n}),\n sd = nd.extend({\n deltaX: function deltaX(a) {\n return \"deltaX\" in a ? a.deltaX : \"wheelDeltaX\" in a ? -a.wheelDeltaX : 0;\n },\n deltaY: function deltaY(a) {\n return \"deltaY\" in a ? a.deltaY : \"wheelDeltaY\" in a ? -a.wheelDeltaY : \"wheelDelta\" in a ? -a.wheelDelta : 0;\n },\n deltaZ: null,\n deltaMode: null\n}),\n td = [[\"blur\", \"blur\", 0], [\"cancel\", \"cancel\", 0], [\"click\", \"click\", 0], [\"close\", \"close\", 0], [\"contextmenu\", \"contextMenu\", 0], [\"copy\", \"copy\", 0], [\"cut\", \"cut\", 0], [\"auxclick\", \"auxClick\", 0], [\"dblclick\", \"doubleClick\", 0], [\"dragend\", \"dragEnd\", 0], [\"dragstart\", \"dragStart\", 0], [\"drop\", \"drop\", 0], [\"focus\", \"focus\", 0], [\"input\", \"input\", 0], [\"invalid\", \"invalid\", 0], [\"keydown\", \"keyDown\", 0], [\"keypress\", \"keyPress\", 0], [\"keyup\", \"keyUp\", 0], [\"mousedown\", \"mouseDown\", 0], [\"mouseup\", \"mouseUp\", 0], [\"paste\", \"paste\", 0], [\"pause\", \"pause\", 0], [\"play\", \"play\", 0], [\"pointercancel\", \"pointerCancel\", 0], [\"pointerdown\", \"pointerDown\", 0], [\"pointerup\", \"pointerUp\", 0], [\"ratechange\", \"rateChange\", 0], [\"reset\", \"reset\", 0], [\"seeked\", \"seeked\", 0], [\"submit\", \"submit\", 0], [\"touchcancel\", \"touchCancel\", 0], [\"touchend\", \"touchEnd\", 0], [\"touchstart\", \"touchStart\", 0], [\"volumechange\", \"volumeChange\", 0], [\"drag\", \"drag\", 1], [\"dragenter\", \"dragEnter\", 1], [\"dragexit\", \"dragExit\", 1], [\"dragleave\", \"dragLeave\", 1], [\"dragover\", \"dragOver\", 1], [\"mousemove\", \"mouseMove\", 1], [\"mouseout\", \"mouseOut\", 1], [\"mouseover\", \"mouseOver\", 1], [\"pointermove\", \"pointerMove\", 1], [\"pointerout\", \"pointerOut\", 1], [\"pointerover\", \"pointerOver\", 1], [\"scroll\", \"scroll\", 1], [\"toggle\", \"toggle\", 1], [\"touchmove\", \"touchMove\", 1], [\"wheel\", \"wheel\", 1], [\"abort\", \"abort\", 2], [Zb, \"animationEnd\", 2], [$b, \"animationIteration\", 2], [ac, \"animationStart\", 2], [\"canplay\", \"canPlay\", 2], [\"canplaythrough\", \"canPlayThrough\", 2], [\"durationchange\", \"durationChange\", 2], [\"emptied\", \"emptied\", 2], [\"encrypted\", \"encrypted\", 2], [\"ended\", \"ended\", 2], [\"error\", \"error\", 2], [\"gotpointercapture\", \"gotPointerCapture\", 2], [\"load\", \"load\", 2], [\"loadeddata\", \"loadedData\", 2], [\"loadedmetadata\", \"loadedMetadata\", 2], [\"loadstart\", \"loadStart\", 2], [\"lostpointercapture\", \"lostPointerCapture\", 2], [\"playing\", \"playing\", 2], [\"progress\", \"progress\", 2], [\"seeking\", \"seeking\", 2], [\"stalled\", \"stalled\", 2], [\"suspend\", \"suspend\", 2], [\"timeupdate\", \"timeUpdate\", 2], [bc, \"transitionEnd\", 2], [\"waiting\", \"waiting\", 2]],\n ud = {},\n vd = {},\n wd = 0;\n\nfor (; wd < td.length; wd++) {\n var yd = td[wd],\n zd = yd[0],\n Ad = yd[1],\n Bd = yd[2],\n Cd = \"on\" + (Ad[0].toUpperCase() + Ad.slice(1)),\n Dd = {\n phasedRegistrationNames: {\n bubbled: Cd,\n captured: Cd + \"Capture\"\n },\n dependencies: [zd],\n eventPriority: Bd\n };\n ud[Ad] = Dd;\n vd[zd] = Dd;\n}\n\nvar Ed = {\n eventTypes: ud,\n getEventPriority: function getEventPriority(a) {\n a = vd[a];\n return void 0 !== a ? a.eventPriority : 2;\n },\n extractEvents: function extractEvents(a, b, c, d) {\n var e = vd[a];\n if (!e) return null;\n\n switch (a) {\n case \"keypress\":\n if (0 === bd(c)) return null;\n\n case \"keydown\":\n case \"keyup\":\n a = id;\n break;\n\n case \"blur\":\n case \"focus\":\n a = ad;\n break;\n\n case \"click\":\n if (2 === c.button) return null;\n\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n a = nd;\n break;\n\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n a = pd;\n break;\n\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n a = qd;\n break;\n\n case Zb:\n case $b:\n case ac:\n a = Yc;\n break;\n\n case bc:\n a = rd;\n break;\n\n case \"scroll\":\n a = $c;\n break;\n\n case \"wheel\":\n a = sd;\n break;\n\n case \"copy\":\n case \"cut\":\n case \"paste\":\n a = Zc;\n break;\n\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n a = od;\n break;\n\n default:\n a = E;\n }\n\n b = a.getPooled(e, b, c, d);\n Sc(b);\n return b;\n }\n},\n Fd = q.unstable_UserBlockingPriority,\n Gd = q.unstable_runWithPriority,\n Hd = Ed.getEventPriority,\n Id = 10,\n Jd = [];\n\nfunction Kd(a) {\n var b = a.targetInst,\n c = b;\n\n do {\n if (!c) {\n a.ancestors.push(c);\n break;\n }\n\n var d = c;\n if (3 === d.tag) d = d.stateNode.containerInfo;else {\n for (; d[\"return\"];) {\n d = d[\"return\"];\n }\n\n d = 3 !== d.tag ? null : d.stateNode.containerInfo;\n }\n if (!d) break;\n b = c.tag;\n 5 !== b && 6 !== b || a.ancestors.push(c);\n c = Fc(d);\n } while (c);\n\n for (c = 0; c < a.ancestors.length; c++) {\n b = a.ancestors[c];\n var e = Mc(a.nativeEvent);\n d = a.topLevelType;\n\n for (var f = a.nativeEvent, g = a.eventSystemFlags, h = null, k = 0; k < ea.length; k++) {\n var l = ea[k];\n l && (l = l.extractEvents(d, b, f, e, g)) && (h = xa(h, l));\n }\n\n Ba(h);\n }\n}\n\nvar Ld = !0;\n\nfunction F(a, b) {\n Md(b, a, !1);\n}\n\nfunction Md(a, b, c) {\n switch (Hd(b)) {\n case 0:\n var d = Nd.bind(null, b, 1);\n break;\n\n case 1:\n d = Od.bind(null, b, 1);\n break;\n\n default:\n d = Pd.bind(null, b, 1);\n }\n\n c ? a.addEventListener(b, d, !0) : a.addEventListener(b, d, !1);\n}\n\nfunction Nd(a, b, c) {\n ib || gb();\n var d = Pd,\n e = ib;\n ib = !0;\n\n try {\n fb(d, a, b, c);\n } finally {\n (ib = e) || kb();\n }\n}\n\nfunction Od(a, b, c) {\n Gd(Fd, Pd.bind(null, a, b, c));\n}\n\nfunction Qd(a, b, c, d) {\n if (Jd.length) {\n var e = Jd.pop();\n e.topLevelType = a;\n e.eventSystemFlags = b;\n e.nativeEvent = c;\n e.targetInst = d;\n a = e;\n } else a = {\n topLevelType: a,\n eventSystemFlags: b,\n nativeEvent: c,\n targetInst: d,\n ancestors: []\n };\n\n try {\n if (b = Kd, c = a, jb) b(c, void 0);else {\n jb = !0;\n\n try {\n hb(b, c, void 0);\n } finally {\n jb = !1, kb();\n }\n }\n } finally {\n a.topLevelType = null, a.nativeEvent = null, a.targetInst = null, a.ancestors.length = 0, Jd.length < Id && Jd.push(a);\n }\n}\n\nfunction Pd(a, b, c) {\n if (Ld) if (0 < nc.length && -1 < uc.indexOf(a)) a = zc(null, a, b, c), nc.push(a);else {\n var d = Hc(a, b, c);\n null === d ? Ac(a, c) : -1 < uc.indexOf(a) ? (a = zc(d, a, b, c), nc.push(a)) : Dc(d, a, b, c) || (Ac(a, c), Qd(a, b, c, null));\n }\n}\n\nfunction Hc(a, b, c) {\n var d = Mc(c);\n d = Fc(d);\n\n if (null !== d) {\n var e = ec(d);\n if (null === e) d = null;else {\n var f = e.tag;\n\n if (13 === f) {\n d = fc(e);\n if (null !== d) return d;\n d = null;\n } else if (3 === f) {\n if (e.stateNode.hydrate) return 3 === e.tag ? e.stateNode.containerInfo : null;\n d = null;\n } else e !== d && (d = null);\n }\n }\n\n Qd(a, b, c, d);\n return null;\n}\n\nfunction Rd(a) {\n if (!Ya) return !1;\n a = \"on\" + a;\n var b = a in document;\n b || (b = document.createElement(\"div\"), b.setAttribute(a, \"return;\"), b = \"function\" === typeof b[a]);\n return b;\n}\n\nvar Sd = new (\"function\" === typeof WeakMap ? WeakMap : Map)();\n\nfunction xc(a) {\n var b = Sd.get(a);\n void 0 === b && (b = new Set(), Sd.set(a, b));\n return b;\n}\n\nfunction yc(a, b, c) {\n if (!c.has(a)) {\n switch (a) {\n case \"scroll\":\n Md(b, \"scroll\", !0);\n break;\n\n case \"focus\":\n case \"blur\":\n Md(b, \"focus\", !0);\n Md(b, \"blur\", !0);\n c.add(\"blur\");\n c.add(\"focus\");\n break;\n\n case \"cancel\":\n case \"close\":\n Rd(a) && Md(b, a, !0);\n break;\n\n case \"invalid\":\n case \"submit\":\n case \"reset\":\n break;\n\n default:\n -1 === cc.indexOf(a) && F(a, b);\n }\n\n c.add(a);\n }\n}\n\nvar Td = {\n animationIterationCount: !0,\n borderImageOutset: !0,\n borderImageSlice: !0,\n borderImageWidth: !0,\n boxFlex: !0,\n boxFlexGroup: !0,\n boxOrdinalGroup: !0,\n columnCount: !0,\n columns: !0,\n flex: !0,\n flexGrow: !0,\n flexPositive: !0,\n flexShrink: !0,\n flexNegative: !0,\n flexOrder: !0,\n gridArea: !0,\n gridRow: !0,\n gridRowEnd: !0,\n gridRowSpan: !0,\n gridRowStart: !0,\n gridColumn: !0,\n gridColumnEnd: !0,\n gridColumnSpan: !0,\n gridColumnStart: !0,\n fontWeight: !0,\n lineClamp: !0,\n lineHeight: !0,\n opacity: !0,\n order: !0,\n orphans: !0,\n tabSize: !0,\n widows: !0,\n zIndex: !0,\n zoom: !0,\n fillOpacity: !0,\n floodOpacity: !0,\n stopOpacity: !0,\n strokeDasharray: !0,\n strokeDashoffset: !0,\n strokeMiterlimit: !0,\n strokeOpacity: !0,\n strokeWidth: !0\n},\n Ud = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\nObject.keys(Td).forEach(function (a) {\n Ud.forEach(function (b) {\n b = b + a.charAt(0).toUpperCase() + a.substring(1);\n Td[b] = Td[a];\n });\n});\n\nfunction Vd(a, b, c) {\n return null == b || \"boolean\" === typeof b || \"\" === b ? \"\" : c || \"number\" !== typeof b || 0 === b || Td.hasOwnProperty(a) && Td[a] ? (\"\" + b).trim() : b + \"px\";\n}\n\nfunction Wd(a, b) {\n a = a.style;\n\n for (var c in b) {\n if (b.hasOwnProperty(c)) {\n var d = 0 === c.indexOf(\"--\"),\n e = Vd(c, b[c], d);\n \"float\" === c && (c = \"cssFloat\");\n d ? a.setProperty(c, e) : a[c] = e;\n }\n }\n}\n\nvar Xd = n({\n menuitem: !0\n}, {\n area: !0,\n base: !0,\n br: !0,\n col: !0,\n embed: !0,\n hr: !0,\n img: !0,\n input: !0,\n keygen: !0,\n link: !0,\n meta: !0,\n param: !0,\n source: !0,\n track: !0,\n wbr: !0\n});\n\nfunction Yd(a, b) {\n if (b) {\n if (Xd[a] && (null != b.children || null != b.dangerouslySetInnerHTML)) throw Error(u(137, a, \"\"));\n\n if (null != b.dangerouslySetInnerHTML) {\n if (null != b.children) throw Error(u(60));\n if (!(\"object\" === _typeof(b.dangerouslySetInnerHTML) && \"__html\" in b.dangerouslySetInnerHTML)) throw Error(u(61));\n }\n\n if (null != b.style && \"object\" !== _typeof(b.style)) throw Error(u(62, \"\"));\n }\n}\n\nfunction Zd(a, b) {\n if (-1 === a.indexOf(\"-\")) return \"string\" === typeof b.is;\n\n switch (a) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n\n default:\n return !0;\n }\n}\n\nfunction $d(a, b) {\n a = 9 === a.nodeType || 11 === a.nodeType ? a : a.ownerDocument;\n var c = xc(a);\n b = ja[b];\n\n for (var d = 0; d < b.length; d++) {\n yc(b[d], a, c);\n }\n}\n\nfunction ae() {}\n\nfunction be(a) {\n a = a || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof a) return null;\n\n try {\n return a.activeElement || a.body;\n } catch (b) {\n return a.body;\n }\n}\n\nfunction ce(a) {\n for (; a && a.firstChild;) {\n a = a.firstChild;\n }\n\n return a;\n}\n\nfunction de(a, b) {\n var c = ce(a);\n a = 0;\n\n for (var d; c;) {\n if (3 === c.nodeType) {\n d = a + c.textContent.length;\n if (a <= b && d >= b) return {\n node: c,\n offset: b - a\n };\n a = d;\n }\n\n a: {\n for (; c;) {\n if (c.nextSibling) {\n c = c.nextSibling;\n break a;\n }\n\n c = c.parentNode;\n }\n\n c = void 0;\n }\n\n c = ce(c);\n }\n}\n\nfunction ee(a, b) {\n return a && b ? a === b ? !0 : a && 3 === a.nodeType ? !1 : b && 3 === b.nodeType ? ee(a, b.parentNode) : \"contains\" in a ? a.contains(b) : a.compareDocumentPosition ? !!(a.compareDocumentPosition(b) & 16) : !1 : !1;\n}\n\nfunction fe() {\n for (var a = window, b = be(); b instanceof a.HTMLIFrameElement;) {\n try {\n var c = \"string\" === typeof b.contentWindow.location.href;\n } catch (d) {\n c = !1;\n }\n\n if (c) a = b.contentWindow;else break;\n b = be(a.document);\n }\n\n return b;\n}\n\nfunction ge(a) {\n var b = a && a.nodeName && a.nodeName.toLowerCase();\n return b && (\"input\" === b && (\"text\" === a.type || \"search\" === a.type || \"tel\" === a.type || \"url\" === a.type || \"password\" === a.type) || \"textarea\" === b || \"true\" === a.contentEditable);\n}\n\nvar he = \"$\",\n ie = \"/$\",\n je = \"$?\",\n ke = \"$!\",\n le = null,\n me = null;\n\nfunction ne(a, b) {\n switch (a) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n return !!b.autoFocus;\n }\n\n return !1;\n}\n\nfunction oe(a, b) {\n return \"textarea\" === a || \"option\" === a || \"noscript\" === a || \"string\" === typeof b.children || \"number\" === typeof b.children || \"object\" === _typeof(b.dangerouslySetInnerHTML) && null !== b.dangerouslySetInnerHTML && null != b.dangerouslySetInnerHTML.__html;\n}\n\nvar pe = \"function\" === typeof setTimeout ? setTimeout : void 0,\n qe = \"function\" === typeof clearTimeout ? clearTimeout : void 0;\n\nfunction re(a) {\n for (; null != a; a = a.nextSibling) {\n var b = a.nodeType;\n if (1 === b || 3 === b) break;\n }\n\n return a;\n}\n\nfunction se(a) {\n a = a.previousSibling;\n\n for (var b = 0; a;) {\n if (8 === a.nodeType) {\n var c = a.data;\n\n if (c === he || c === ke || c === je) {\n if (0 === b) return a;\n b--;\n } else c === ie && b++;\n }\n\n a = a.previousSibling;\n }\n\n return null;\n}\n\nvar te = Math.random().toString(36).slice(2),\n ue = \"__reactInternalInstance$\" + te,\n ve = \"__reactEventHandlers$\" + te,\n we = \"__reactContainere$\" + te;\n\nfunction Fc(a) {\n var b = a[ue];\n if (b) return b;\n\n for (var c = a.parentNode; c;) {\n if (b = c[we] || c[ue]) {\n c = b.alternate;\n if (null !== b.child || null !== c && null !== c.child) for (a = se(a); null !== a;) {\n if (c = a[ue]) return c;\n a = se(a);\n }\n return b;\n }\n\n a = c;\n c = a.parentNode;\n }\n\n return null;\n}\n\nfunction Cc(a) {\n a = a[ue] || a[we];\n return !a || 5 !== a.tag && 6 !== a.tag && 13 !== a.tag && 3 !== a.tag ? null : a;\n}\n\nfunction xe(a) {\n if (5 === a.tag || 6 === a.tag) return a.stateNode;\n throw Error(u(33));\n}\n\nfunction ye(a) {\n return a[ve] || null;\n}\n\nvar ze = null,\n Ae = null,\n Be = null;\n\nfunction Ce() {\n if (Be) return Be;\n var a,\n b = Ae,\n c = b.length,\n d,\n e = \"value\" in ze ? ze.value : ze.textContent,\n f = e.length;\n\n for (a = 0; a < c && b[a] === e[a]; a++) {\n ;\n }\n\n var g = c - a;\n\n for (d = 1; d <= g && b[c - d] === e[f - d]; d++) {\n ;\n }\n\n return Be = e.slice(a, 1 < d ? 1 - d : void 0);\n}\n\nvar De = E.extend({\n data: null\n}),\n Ee = E.extend({\n data: null\n}),\n Fe = [9, 13, 27, 32],\n Ge = Ya && \"CompositionEvent\" in window,\n He = null;\nYa && \"documentMode\" in document && (He = document.documentMode);\nvar Ie = Ya && \"TextEvent\" in window && !He,\n Je = Ya && (!Ge || He && 8 < He && 11 >= He),\n Ke = String.fromCharCode(32),\n Le = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: \"onBeforeInput\",\n captured: \"onBeforeInputCapture\"\n },\n dependencies: [\"compositionend\", \"keypress\", \"textInput\", \"paste\"]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: \"onCompositionEnd\",\n captured: \"onCompositionEndCapture\"\n },\n dependencies: \"blur compositionend keydown keypress keyup mousedown\".split(\" \")\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: \"onCompositionStart\",\n captured: \"onCompositionStartCapture\"\n },\n dependencies: \"blur compositionstart keydown keypress keyup mousedown\".split(\" \")\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: \"onCompositionUpdate\",\n captured: \"onCompositionUpdateCapture\"\n },\n dependencies: \"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")\n }\n},\n Me = !1;\n\nfunction Ne(a, b) {\n switch (a) {\n case \"keyup\":\n return -1 !== Fe.indexOf(b.keyCode);\n\n case \"keydown\":\n return 229 !== b.keyCode;\n\n case \"keypress\":\n case \"mousedown\":\n case \"blur\":\n return !0;\n\n default:\n return !1;\n }\n}\n\nfunction Oe(a) {\n a = a.detail;\n return \"object\" === _typeof(a) && \"data\" in a ? a.data : null;\n}\n\nvar Pe = !1;\n\nfunction Qe(a, b) {\n switch (a) {\n case \"compositionend\":\n return Oe(b);\n\n case \"keypress\":\n if (32 !== b.which) return null;\n Me = !0;\n return Ke;\n\n case \"textInput\":\n return a = b.data, a === Ke && Me ? null : a;\n\n default:\n return null;\n }\n}\n\nfunction Re(a, b) {\n if (Pe) return \"compositionend\" === a || !Ge && Ne(a, b) ? (a = Ce(), Be = Ae = ze = null, Pe = !1, a) : null;\n\n switch (a) {\n case \"paste\":\n return null;\n\n case \"keypress\":\n if (!(b.ctrlKey || b.altKey || b.metaKey) || b.ctrlKey && b.altKey) {\n if (b[\"char\"] && 1 < b[\"char\"].length) return b[\"char\"];\n if (b.which) return String.fromCharCode(b.which);\n }\n\n return null;\n\n case \"compositionend\":\n return Je && \"ko\" !== b.locale ? null : b.data;\n\n default:\n return null;\n }\n}\n\nvar Se = {\n eventTypes: Le,\n extractEvents: function extractEvents(a, b, c, d) {\n var e;\n if (Ge) b: {\n switch (a) {\n case \"compositionstart\":\n var f = Le.compositionStart;\n break b;\n\n case \"compositionend\":\n f = Le.compositionEnd;\n break b;\n\n case \"compositionupdate\":\n f = Le.compositionUpdate;\n break b;\n }\n\n f = void 0;\n } else Pe ? Ne(a, c) && (f = Le.compositionEnd) : \"keydown\" === a && 229 === c.keyCode && (f = Le.compositionStart);\n f ? (Je && \"ko\" !== c.locale && (Pe || f !== Le.compositionStart ? f === Le.compositionEnd && Pe && (e = Ce()) : (ze = d, Ae = \"value\" in ze ? ze.value : ze.textContent, Pe = !0)), f = De.getPooled(f, b, c, d), e ? f.data = e : (e = Oe(c), null !== e && (f.data = e)), Sc(f), e = f) : e = null;\n (a = Ie ? Qe(a, c) : Re(a, c)) ? (b = Ee.getPooled(Le.beforeInput, b, c, d), b.data = a, Sc(b)) : b = null;\n return null === e ? b : null === b ? e : [e, b];\n }\n},\n Te = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\n\nfunction Ue(a) {\n var b = a && a.nodeName && a.nodeName.toLowerCase();\n return \"input\" === b ? !!Te[a.type] : \"textarea\" === b ? !0 : !1;\n}\n\nvar Ve = {\n change: {\n phasedRegistrationNames: {\n bubbled: \"onChange\",\n captured: \"onChangeCapture\"\n },\n dependencies: \"blur change click focus input keydown keyup selectionchange\".split(\" \")\n }\n};\n\nfunction We(a, b, c) {\n a = E.getPooled(Ve.change, a, b, c);\n a.type = \"change\";\n cb(c);\n Sc(a);\n return a;\n}\n\nvar Xe = null,\n Ye = null;\n\nfunction Ze(a) {\n Ba(a);\n}\n\nfunction $e(a) {\n var b = xe(a);\n if (zb(b)) return a;\n}\n\nfunction af(a, b) {\n if (\"change\" === a) return b;\n}\n\nvar bf = !1;\nYa && (bf = Rd(\"input\") && (!document.documentMode || 9 < document.documentMode));\n\nfunction cf() {\n Xe && (Xe.detachEvent(\"onpropertychange\", df), Ye = Xe = null);\n}\n\nfunction df(a) {\n if (\"value\" === a.propertyName && $e(Ye)) if (a = We(Ye, a, Mc(a)), ib) Ba(a);else {\n ib = !0;\n\n try {\n eb(Ze, a);\n } finally {\n ib = !1, kb();\n }\n }\n}\n\nfunction ef(a, b, c) {\n \"focus\" === a ? (cf(), Xe = b, Ye = c, Xe.attachEvent(\"onpropertychange\", df)) : \"blur\" === a && cf();\n}\n\nfunction ff(a) {\n if (\"selectionchange\" === a || \"keyup\" === a || \"keydown\" === a) return $e(Ye);\n}\n\nfunction gf(a, b) {\n if (\"click\" === a) return $e(b);\n}\n\nfunction hf(a, b) {\n if (\"input\" === a || \"change\" === a) return $e(b);\n}\n\nvar jf = {\n eventTypes: Ve,\n _isInputEventSupported: bf,\n extractEvents: function extractEvents(a, b, c, d) {\n var e = b ? xe(b) : window,\n f = e.nodeName && e.nodeName.toLowerCase();\n if (\"select\" === f || \"input\" === f && \"file\" === e.type) var g = af;else if (Ue(e)) {\n if (bf) g = hf;else {\n g = ff;\n var h = ef;\n }\n } else (f = e.nodeName) && \"input\" === f.toLowerCase() && (\"checkbox\" === e.type || \"radio\" === e.type) && (g = gf);\n if (g && (g = g(a, b))) return We(g, c, d);\n h && h(a, e, b);\n \"blur\" === a && (a = e._wrapperState) && a.controlled && \"number\" === e.type && Fb(e, \"number\", e.value);\n }\n},\n kf = {\n mouseEnter: {\n registrationName: \"onMouseEnter\",\n dependencies: [\"mouseout\", \"mouseover\"]\n },\n mouseLeave: {\n registrationName: \"onMouseLeave\",\n dependencies: [\"mouseout\", \"mouseover\"]\n },\n pointerEnter: {\n registrationName: \"onPointerEnter\",\n dependencies: [\"pointerout\", \"pointerover\"]\n },\n pointerLeave: {\n registrationName: \"onPointerLeave\",\n dependencies: [\"pointerout\", \"pointerover\"]\n }\n},\n lf,\n mf = {\n eventTypes: kf,\n extractEvents: function extractEvents(a, b, c, d, e) {\n var f = \"mouseover\" === a || \"pointerover\" === a,\n g = \"mouseout\" === a || \"pointerout\" === a;\n if (f && 0 === (e & 32) && (c.relatedTarget || c.fromElement) || !g && !f) return null;\n e = d.window === d ? d : (e = d.ownerDocument) ? e.defaultView || e.parentWindow : window;\n\n if (g) {\n if (g = b, b = (b = c.relatedTarget || c.toElement) ? Fc(b) : null, null !== b && (f = ec(b), b !== f || 5 !== b.tag && 6 !== b.tag)) b = null;\n } else g = null;\n\n if (g === b) return null;\n\n if (\"mouseout\" === a || \"mouseover\" === a) {\n var h = nd;\n var k = kf.mouseLeave;\n var l = kf.mouseEnter;\n var m = \"mouse\";\n } else if (\"pointerout\" === a || \"pointerover\" === a) h = od, k = kf.pointerLeave, l = kf.pointerEnter, m = \"pointer\";\n\n a = null == g ? e : xe(g);\n e = null == b ? e : xe(b);\n k = h.getPooled(k, g, c, d);\n k.type = m + \"leave\";\n k.target = a;\n k.relatedTarget = e;\n d = h.getPooled(l, b, c, d);\n d.type = m + \"enter\";\n d.target = e;\n d.relatedTarget = a;\n h = g;\n m = b;\n if (h && m) a: {\n l = h;\n a = m;\n g = 0;\n\n for (b = l; b; b = Nc(b)) {\n g++;\n }\n\n b = 0;\n\n for (e = a; e; e = Nc(e)) {\n b++;\n }\n\n for (; 0 < g - b;) {\n l = Nc(l), g--;\n }\n\n for (; 0 < b - g;) {\n a = Nc(a), b--;\n }\n\n for (; g--;) {\n if (l === a || l === a.alternate) break a;\n l = Nc(l);\n a = Nc(a);\n }\n\n l = null;\n } else l = null;\n a = l;\n\n for (l = []; h && h !== a;) {\n g = h.alternate;\n if (null !== g && g === a) break;\n l.push(h);\n h = Nc(h);\n }\n\n for (h = []; m && m !== a;) {\n g = m.alternate;\n if (null !== g && g === a) break;\n h.push(m);\n m = Nc(m);\n }\n\n for (m = 0; m < l.length; m++) {\n Qc(l[m], \"bubbled\", k);\n }\n\n for (m = h.length; 0 < m--;) {\n Qc(h[m], \"captured\", d);\n }\n\n if (c === lf) return lf = null, [k];\n lf = c;\n return [k, d];\n }\n};\n\nfunction nf(a, b) {\n return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b;\n}\n\nvar of = \"function\" === typeof Object.is ? Object.is : nf,\n pf = Object.prototype.hasOwnProperty;\n\nfunction qf(a, b) {\n if (of(a, b)) return !0;\n if (\"object\" !== _typeof(a) || null === a || \"object\" !== _typeof(b) || null === b) return !1;\n var c = Object.keys(a),\n d = Object.keys(b);\n if (c.length !== d.length) return !1;\n\n for (d = 0; d < c.length; d++) {\n if (!pf.call(b, c[d]) || !of(a[c[d]], b[c[d]])) return !1;\n }\n\n return !0;\n}\n\nvar rf = Ya && \"documentMode\" in document && 11 >= document.documentMode,\n sf = {\n select: {\n phasedRegistrationNames: {\n bubbled: \"onSelect\",\n captured: \"onSelectCapture\"\n },\n dependencies: \"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")\n }\n},\n tf = null,\n uf = null,\n vf = null,\n wf = !1;\n\nfunction xf(a, b) {\n var c = b.window === b ? b.document : 9 === b.nodeType ? b : b.ownerDocument;\n if (wf || null == tf || tf !== be(c)) return null;\n c = tf;\n \"selectionStart\" in c && ge(c) ? c = {\n start: c.selectionStart,\n end: c.selectionEnd\n } : (c = (c.ownerDocument && c.ownerDocument.defaultView || window).getSelection(), c = {\n anchorNode: c.anchorNode,\n anchorOffset: c.anchorOffset,\n focusNode: c.focusNode,\n focusOffset: c.focusOffset\n });\n return vf && qf(vf, c) ? null : (vf = c, a = E.getPooled(sf.select, uf, a, b), a.type = \"select\", a.target = tf, Sc(a), a);\n}\n\nvar yf = {\n eventTypes: sf,\n extractEvents: function extractEvents(a, b, c, d) {\n var e = d.window === d ? d.document : 9 === d.nodeType ? d : d.ownerDocument,\n f;\n\n if (!(f = !e)) {\n a: {\n e = xc(e);\n f = ja.onSelect;\n\n for (var g = 0; g < f.length; g++) {\n if (!e.has(f[g])) {\n e = !1;\n break a;\n }\n }\n\n e = !0;\n }\n\n f = !e;\n }\n\n if (f) return null;\n e = b ? xe(b) : window;\n\n switch (a) {\n case \"focus\":\n if (Ue(e) || \"true\" === e.contentEditable) tf = e, uf = b, vf = null;\n break;\n\n case \"blur\":\n vf = uf = tf = null;\n break;\n\n case \"mousedown\":\n wf = !0;\n break;\n\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n return wf = !1, xf(c, d);\n\n case \"selectionchange\":\n if (rf) break;\n\n case \"keydown\":\n case \"keyup\":\n return xf(c, d);\n }\n\n return null;\n }\n};\nCa.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));\nvar zf = Cc;\nsa = ye;\nua = zf;\nva = xe;\nCa.injectEventPluginsByName({\n SimpleEventPlugin: Ed,\n EnterLeaveEventPlugin: mf,\n ChangeEventPlugin: jf,\n SelectEventPlugin: yf,\n BeforeInputEventPlugin: Se\n});\nnew Set();\nvar Af = [],\n Bf = -1;\n\nfunction G(a) {\n 0 > Bf || (a.current = Af[Bf], Af[Bf] = null, Bf--);\n}\n\nfunction I(a, b) {\n Bf++;\n Af[Bf] = a.current;\n a.current = b;\n}\n\nvar Cf = {},\n J = {\n current: Cf\n},\n K = {\n current: !1\n},\n Df = Cf;\n\nfunction Ef(a, b) {\n var c = a.type.contextTypes;\n if (!c) return Cf;\n var d = a.stateNode;\n if (d && d.__reactInternalMemoizedUnmaskedChildContext === b) return d.__reactInternalMemoizedMaskedChildContext;\n var e = {},\n f;\n\n for (f in c) {\n e[f] = b[f];\n }\n\n d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = b, a.__reactInternalMemoizedMaskedChildContext = e);\n return e;\n}\n\nfunction L(a) {\n a = a.childContextTypes;\n return null !== a && void 0 !== a;\n}\n\nfunction Ff(a) {\n G(K, a);\n G(J, a);\n}\n\nfunction Gf(a) {\n G(K, a);\n G(J, a);\n}\n\nfunction Hf(a, b, c) {\n if (J.current !== Cf) throw Error(u(168));\n I(J, b, a);\n I(K, c, a);\n}\n\nfunction If(a, b, c) {\n var d = a.stateNode;\n a = b.childContextTypes;\n if (\"function\" !== typeof d.getChildContext) return c;\n d = d.getChildContext();\n\n for (var e in d) {\n if (!(e in a)) throw Error(u(108, Wa(b) || \"Unknown\", e));\n }\n\n return n({}, c, {}, d);\n}\n\nfunction Jf(a) {\n var b = a.stateNode;\n b = b && b.__reactInternalMemoizedMergedChildContext || Cf;\n Df = J.current;\n I(J, b, a);\n I(K, K.current, a);\n return !0;\n}\n\nfunction Kf(a, b, c) {\n var d = a.stateNode;\n if (!d) throw Error(u(169));\n c ? (b = If(a, b, Df), d.__reactInternalMemoizedMergedChildContext = b, G(K, a), G(J, a), I(J, b, a)) : G(K, a);\n I(K, c, a);\n}\n\nvar Lf = q.unstable_runWithPriority,\n Mf = q.unstable_scheduleCallback,\n Nf = q.unstable_cancelCallback,\n Of = q.unstable_shouldYield,\n Pf = q.unstable_requestPaint,\n Qf = q.unstable_now,\n Rf = q.unstable_getCurrentPriorityLevel,\n Sf = q.unstable_ImmediatePriority,\n Tf = q.unstable_UserBlockingPriority,\n Uf = q.unstable_NormalPriority,\n Vf = q.unstable_LowPriority,\n Wf = q.unstable_IdlePriority,\n Xf = {},\n Yf = void 0 !== Pf ? Pf : function () {},\n Zf = null,\n $f = null,\n ag = !1,\n bg = Qf(),\n cg = 1E4 > bg ? Qf : function () {\n return Qf() - bg;\n};\n\nfunction dg() {\n switch (Rf()) {\n case Sf:\n return 99;\n\n case Tf:\n return 98;\n\n case Uf:\n return 97;\n\n case Vf:\n return 96;\n\n case Wf:\n return 95;\n\n default:\n throw Error(u(332));\n }\n}\n\nfunction eg(a) {\n switch (a) {\n case 99:\n return Sf;\n\n case 98:\n return Tf;\n\n case 97:\n return Uf;\n\n case 96:\n return Vf;\n\n case 95:\n return Wf;\n\n default:\n throw Error(u(332));\n }\n}\n\nfunction fg(a, b) {\n a = eg(a);\n return Lf(a, b);\n}\n\nfunction gg(a, b, c) {\n a = eg(a);\n return Mf(a, b, c);\n}\n\nfunction hg(a) {\n null === Zf ? (Zf = [a], $f = Mf(Sf, ig)) : Zf.push(a);\n return Xf;\n}\n\nfunction jg() {\n if (null !== $f) {\n var a = $f;\n $f = null;\n Nf(a);\n }\n\n ig();\n}\n\nfunction ig() {\n if (!ag && null !== Zf) {\n ag = !0;\n var a = 0;\n\n try {\n var b = Zf;\n fg(99, function () {\n for (; a < b.length; a++) {\n var c = b[a];\n\n do {\n c = c(!0);\n } while (null !== c);\n }\n });\n Zf = null;\n } catch (c) {\n throw null !== Zf && (Zf = Zf.slice(a + 1)), Mf(Sf, jg), c;\n } finally {\n ag = !1;\n }\n }\n}\n\nvar kg = 3;\n\nfunction lg(a, b, c) {\n c /= 10;\n return 1073741821 - (((1073741821 - a + b / 10) / c | 0) + 1) * c;\n}\n\nfunction mg(a, b) {\n if (a && a.defaultProps) {\n b = n({}, b);\n a = a.defaultProps;\n\n for (var c in a) {\n void 0 === b[c] && (b[c] = a[c]);\n }\n }\n\n return b;\n}\n\nvar ng = {\n current: null\n},\n og = null,\n pg = null,\n qg = null;\n\nfunction rg() {\n qg = pg = og = null;\n}\n\nfunction sg(a, b) {\n var c = a.type._context;\n I(ng, c._currentValue, a);\n c._currentValue = b;\n}\n\nfunction tg(a) {\n var b = ng.current;\n G(ng, a);\n a.type._context._currentValue = b;\n}\n\nfunction ug(a, b) {\n for (; null !== a;) {\n var c = a.alternate;\n if (a.childExpirationTime < b) a.childExpirationTime = b, null !== c && c.childExpirationTime < b && (c.childExpirationTime = b);else if (null !== c && c.childExpirationTime < b) c.childExpirationTime = b;else break;\n a = a[\"return\"];\n }\n}\n\nfunction vg(a, b) {\n og = a;\n qg = pg = null;\n a = a.dependencies;\n null !== a && null !== a.firstContext && (a.expirationTime >= b && (wg = !0), a.firstContext = null);\n}\n\nfunction xg(a, b) {\n if (qg !== a && !1 !== b && 0 !== b) {\n if (\"number\" !== typeof b || 1073741823 === b) qg = a, b = 1073741823;\n b = {\n context: a,\n observedBits: b,\n next: null\n };\n\n if (null === pg) {\n if (null === og) throw Error(u(308));\n pg = b;\n og.dependencies = {\n expirationTime: 0,\n firstContext: b,\n responders: null\n };\n } else pg = pg.next = b;\n }\n\n return a._currentValue;\n}\n\nvar yg = !1;\n\nfunction zg(a) {\n return {\n baseState: a,\n firstUpdate: null,\n lastUpdate: null,\n firstCapturedUpdate: null,\n lastCapturedUpdate: null,\n firstEffect: null,\n lastEffect: null,\n firstCapturedEffect: null,\n lastCapturedEffect: null\n };\n}\n\nfunction Ag(a) {\n return {\n baseState: a.baseState,\n firstUpdate: a.firstUpdate,\n lastUpdate: a.lastUpdate,\n firstCapturedUpdate: null,\n lastCapturedUpdate: null,\n firstEffect: null,\n lastEffect: null,\n firstCapturedEffect: null,\n lastCapturedEffect: null\n };\n}\n\nfunction Bg(a, b) {\n return {\n expirationTime: a,\n suspenseConfig: b,\n tag: 0,\n payload: null,\n callback: null,\n next: null,\n nextEffect: null\n };\n}\n\nfunction Cg(a, b) {\n null === a.lastUpdate ? a.firstUpdate = a.lastUpdate = b : (a.lastUpdate.next = b, a.lastUpdate = b);\n}\n\nfunction Dg(a, b) {\n var c = a.alternate;\n\n if (null === c) {\n var d = a.updateQueue;\n var e = null;\n null === d && (d = a.updateQueue = zg(a.memoizedState));\n } else d = a.updateQueue, e = c.updateQueue, null === d ? null === e ? (d = a.updateQueue = zg(a.memoizedState), e = c.updateQueue = zg(c.memoizedState)) : d = a.updateQueue = Ag(e) : null === e && (e = c.updateQueue = Ag(d));\n\n null === e || d === e ? Cg(d, b) : null === d.lastUpdate || null === e.lastUpdate ? (Cg(d, b), Cg(e, b)) : (Cg(d, b), e.lastUpdate = b);\n}\n\nfunction Eg(a, b) {\n var c = a.updateQueue;\n c = null === c ? a.updateQueue = zg(a.memoizedState) : Fg(a, c);\n null === c.lastCapturedUpdate ? c.firstCapturedUpdate = c.lastCapturedUpdate = b : (c.lastCapturedUpdate.next = b, c.lastCapturedUpdate = b);\n}\n\nfunction Fg(a, b) {\n var c = a.alternate;\n null !== c && b === c.updateQueue && (b = a.updateQueue = Ag(b));\n return b;\n}\n\nfunction Gg(a, b, c, d, e, f) {\n switch (c.tag) {\n case 1:\n return a = c.payload, \"function\" === typeof a ? a.call(f, d, e) : a;\n\n case 3:\n a.effectTag = a.effectTag & -4097 | 64;\n\n case 0:\n a = c.payload;\n e = \"function\" === typeof a ? a.call(f, d, e) : a;\n if (null === e || void 0 === e) break;\n return n({}, d, e);\n\n case 2:\n yg = !0;\n }\n\n return d;\n}\n\nfunction Hg(a, b, c, d, e) {\n yg = !1;\n b = Fg(a, b);\n\n for (var f = b.baseState, g = null, h = 0, k = b.firstUpdate, l = f; null !== k;) {\n var m = k.expirationTime;\n m < e ? (null === g && (g = k, f = l), h < m && (h = m)) : (Ig(m, k.suspenseConfig), l = Gg(a, b, k, l, c, d), null !== k.callback && (a.effectTag |= 32, k.nextEffect = null, null === b.lastEffect ? b.firstEffect = b.lastEffect = k : (b.lastEffect.nextEffect = k, b.lastEffect = k)));\n k = k.next;\n }\n\n m = null;\n\n for (k = b.firstCapturedUpdate; null !== k;) {\n var C = k.expirationTime;\n C < e ? (null === m && (m = k, null === g && (f = l)), h < C && (h = C)) : (l = Gg(a, b, k, l, c, d), null !== k.callback && (a.effectTag |= 32, k.nextEffect = null, null === b.lastCapturedEffect ? b.firstCapturedEffect = b.lastCapturedEffect = k : (b.lastCapturedEffect.nextEffect = k, b.lastCapturedEffect = k)));\n k = k.next;\n }\n\n null === g && (b.lastUpdate = null);\n null === m ? b.lastCapturedUpdate = null : a.effectTag |= 32;\n null === g && null === m && (f = l);\n b.baseState = f;\n b.firstUpdate = g;\n b.firstCapturedUpdate = m;\n Jg(h);\n a.expirationTime = h;\n a.memoizedState = l;\n}\n\nfunction Kg(a, b, c) {\n null !== b.firstCapturedUpdate && (null !== b.lastUpdate && (b.lastUpdate.next = b.firstCapturedUpdate, b.lastUpdate = b.lastCapturedUpdate), b.firstCapturedUpdate = b.lastCapturedUpdate = null);\n Lg(b.firstEffect, c);\n b.firstEffect = b.lastEffect = null;\n Lg(b.firstCapturedEffect, c);\n b.firstCapturedEffect = b.lastCapturedEffect = null;\n}\n\nfunction Lg(a, b) {\n for (; null !== a;) {\n var c = a.callback;\n\n if (null !== c) {\n a.callback = null;\n var d = b;\n if (\"function\" !== typeof c) throw Error(u(191, c));\n c.call(d);\n }\n\n a = a.nextEffect;\n }\n}\n\nvar Mg = Ea.ReactCurrentBatchConfig,\n Ng = new aa.Component().refs;\n\nfunction Og(a, b, c, d) {\n b = a.memoizedState;\n c = c(d, b);\n c = null === c || void 0 === c ? b : n({}, b, c);\n a.memoizedState = c;\n d = a.updateQueue;\n null !== d && 0 === a.expirationTime && (d.baseState = c);\n}\n\nvar Sg = {\n isMounted: function isMounted(a) {\n return (a = a._reactInternalFiber) ? ec(a) === a : !1;\n },\n enqueueSetState: function enqueueSetState(a, b, c) {\n a = a._reactInternalFiber;\n var d = Pg(),\n e = Mg.suspense;\n d = Qg(d, a, e);\n e = Bg(d, e);\n e.payload = b;\n void 0 !== c && null !== c && (e.callback = c);\n Dg(a, e);\n Rg(a, d);\n },\n enqueueReplaceState: function enqueueReplaceState(a, b, c) {\n a = a._reactInternalFiber;\n var d = Pg(),\n e = Mg.suspense;\n d = Qg(d, a, e);\n e = Bg(d, e);\n e.tag = 1;\n e.payload = b;\n void 0 !== c && null !== c && (e.callback = c);\n Dg(a, e);\n Rg(a, d);\n },\n enqueueForceUpdate: function enqueueForceUpdate(a, b) {\n a = a._reactInternalFiber;\n var c = Pg(),\n d = Mg.suspense;\n c = Qg(c, a, d);\n d = Bg(c, d);\n d.tag = 2;\n void 0 !== b && null !== b && (d.callback = b);\n Dg(a, d);\n Rg(a, c);\n }\n};\n\nfunction Tg(a, b, c, d, e, f, g) {\n a = a.stateNode;\n return \"function\" === typeof a.shouldComponentUpdate ? a.shouldComponentUpdate(d, f, g) : b.prototype && b.prototype.isPureReactComponent ? !qf(c, d) || !qf(e, f) : !0;\n}\n\nfunction Ug(a, b, c) {\n var d = !1,\n e = Cf;\n var f = b.contextType;\n \"object\" === _typeof(f) && null !== f ? f = xg(f) : (e = L(b) ? Df : J.current, d = b.contextTypes, f = (d = null !== d && void 0 !== d) ? Ef(a, e) : Cf);\n b = new b(c, f);\n a.memoizedState = null !== b.state && void 0 !== b.state ? b.state : null;\n b.updater = Sg;\n a.stateNode = b;\n b._reactInternalFiber = a;\n d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = e, a.__reactInternalMemoizedMaskedChildContext = f);\n return b;\n}\n\nfunction Vg(a, b, c, d) {\n a = b.state;\n \"function\" === typeof b.componentWillReceiveProps && b.componentWillReceiveProps(c, d);\n \"function\" === typeof b.UNSAFE_componentWillReceiveProps && b.UNSAFE_componentWillReceiveProps(c, d);\n b.state !== a && Sg.enqueueReplaceState(b, b.state, null);\n}\n\nfunction Wg(a, b, c, d) {\n var e = a.stateNode;\n e.props = c;\n e.state = a.memoizedState;\n e.refs = Ng;\n var f = b.contextType;\n \"object\" === _typeof(f) && null !== f ? e.context = xg(f) : (f = L(b) ? Df : J.current, e.context = Ef(a, f));\n f = a.updateQueue;\n null !== f && (Hg(a, f, c, e, d), e.state = a.memoizedState);\n f = b.getDerivedStateFromProps;\n \"function\" === typeof f && (Og(a, b, f, c), e.state = a.memoizedState);\n \"function\" === typeof b.getDerivedStateFromProps || \"function\" === typeof e.getSnapshotBeforeUpdate || \"function\" !== typeof e.UNSAFE_componentWillMount && \"function\" !== typeof e.componentWillMount || (b = e.state, \"function\" === typeof e.componentWillMount && e.componentWillMount(), \"function\" === typeof e.UNSAFE_componentWillMount && e.UNSAFE_componentWillMount(), b !== e.state && Sg.enqueueReplaceState(e, e.state, null), f = a.updateQueue, null !== f && (Hg(a, f, c, e, d), e.state = a.memoizedState));\n \"function\" === typeof e.componentDidMount && (a.effectTag |= 4);\n}\n\nvar Xg = Array.isArray;\n\nfunction Yg(a, b, c) {\n a = c.ref;\n\n if (null !== a && \"function\" !== typeof a && \"object\" !== _typeof(a)) {\n if (c._owner) {\n c = c._owner;\n\n if (c) {\n if (1 !== c.tag) throw Error(u(309));\n var d = c.stateNode;\n }\n\n if (!d) throw Error(u(147, a));\n var e = \"\" + a;\n if (null !== b && null !== b.ref && \"function\" === typeof b.ref && b.ref._stringRef === e) return b.ref;\n\n b = function b(a) {\n var b = d.refs;\n b === Ng && (b = d.refs = {});\n null === a ? delete b[e] : b[e] = a;\n };\n\n b._stringRef = e;\n return b;\n }\n\n if (\"string\" !== typeof a) throw Error(u(284));\n if (!c._owner) throw Error(u(290, a));\n }\n\n return a;\n}\n\nfunction Zg(a, b) {\n if (\"textarea\" !== a.type) throw Error(u(31, \"[object Object]\" === Object.prototype.toString.call(b) ? \"object with keys {\" + Object.keys(b).join(\", \") + \"}\" : b, \"\"));\n}\n\nfunction $g(a) {\n function b(b, c) {\n if (a) {\n var d = b.lastEffect;\n null !== d ? (d.nextEffect = c, b.lastEffect = c) : b.firstEffect = b.lastEffect = c;\n c.nextEffect = null;\n c.effectTag = 8;\n }\n }\n\n function c(c, d) {\n if (!a) return null;\n\n for (; null !== d;) {\n b(c, d), d = d.sibling;\n }\n\n return null;\n }\n\n function d(a, b) {\n for (a = new Map(); null !== b;) {\n null !== b.key ? a.set(b.key, b) : a.set(b.index, b), b = b.sibling;\n }\n\n return a;\n }\n\n function e(a, b, c) {\n a = ah(a, b, c);\n a.index = 0;\n a.sibling = null;\n return a;\n }\n\n function f(b, c, d) {\n b.index = d;\n if (!a) return c;\n d = b.alternate;\n if (null !== d) return d = d.index, d < c ? (b.effectTag = 2, c) : d;\n b.effectTag = 2;\n return c;\n }\n\n function g(b) {\n a && null === b.alternate && (b.effectTag = 2);\n return b;\n }\n\n function h(a, b, c, d) {\n if (null === b || 6 !== b.tag) return b = bh(c, a.mode, d), b[\"return\"] = a, b;\n b = e(b, c, d);\n b[\"return\"] = a;\n return b;\n }\n\n function k(a, b, c, d) {\n if (null !== b && b.elementType === c.type) return d = e(b, c.props, d), d.ref = Yg(a, b, c), d[\"return\"] = a, d;\n d = ch(c.type, c.key, c.props, null, a.mode, d);\n d.ref = Yg(a, b, c);\n d[\"return\"] = a;\n return d;\n }\n\n function l(a, b, c, d) {\n if (null === b || 4 !== b.tag || b.stateNode.containerInfo !== c.containerInfo || b.stateNode.implementation !== c.implementation) return b = dh(c, a.mode, d), b[\"return\"] = a, b;\n b = e(b, c.children || [], d);\n b[\"return\"] = a;\n return b;\n }\n\n function m(a, b, c, d, f) {\n if (null === b || 7 !== b.tag) return b = eh(c, a.mode, d, f), b[\"return\"] = a, b;\n b = e(b, c, d);\n b[\"return\"] = a;\n return b;\n }\n\n function C(a, b, c) {\n if (\"string\" === typeof b || \"number\" === typeof b) return b = bh(\"\" + b, a.mode, c), b[\"return\"] = a, b;\n\n if (\"object\" === _typeof(b) && null !== b) {\n switch (b.$$typeof) {\n case Ga:\n return c = ch(b.type, b.key, b.props, null, a.mode, c), c.ref = Yg(a, null, b), c[\"return\"] = a, c;\n\n case Ha:\n return b = dh(b, a.mode, c), b[\"return\"] = a, b;\n }\n\n if (Xg(b) || Ua(b)) return b = eh(b, a.mode, c, null), b[\"return\"] = a, b;\n Zg(a, b);\n }\n\n return null;\n }\n\n function y(a, b, c, d) {\n var e = null !== b ? b.key : null;\n if (\"string\" === typeof c || \"number\" === typeof c) return null !== e ? null : h(a, b, \"\" + c, d);\n\n if (\"object\" === _typeof(c) && null !== c) {\n switch (c.$$typeof) {\n case Ga:\n return c.key === e ? c.type === Ia ? m(a, b, c.props.children, d, e) : k(a, b, c, d) : null;\n\n case Ha:\n return c.key === e ? l(a, b, c, d) : null;\n }\n\n if (Xg(c) || Ua(c)) return null !== e ? null : m(a, b, c, d, null);\n Zg(a, c);\n }\n\n return null;\n }\n\n function H(a, b, c, d, e) {\n if (\"string\" === typeof d || \"number\" === typeof d) return a = a.get(c) || null, h(b, a, \"\" + d, e);\n\n if (\"object\" === _typeof(d) && null !== d) {\n switch (d.$$typeof) {\n case Ga:\n return a = a.get(null === d.key ? c : d.key) || null, d.type === Ia ? m(b, a, d.props.children, e, d.key) : k(b, a, d, e);\n\n case Ha:\n return a = a.get(null === d.key ? c : d.key) || null, l(b, a, d, e);\n }\n\n if (Xg(d) || Ua(d)) return a = a.get(c) || null, m(b, a, d, e, null);\n Zg(b, d);\n }\n\n return null;\n }\n\n function z(e, g, h, k) {\n for (var l = null, m = null, r = g, x = g = 0, A = null; null !== r && x < h.length; x++) {\n r.index > x ? (A = r, r = null) : A = r.sibling;\n var p = y(e, r, h[x], k);\n\n if (null === p) {\n null === r && (r = A);\n break;\n }\n\n a && r && null === p.alternate && b(e, r);\n g = f(p, g, x);\n null === m ? l = p : m.sibling = p;\n m = p;\n r = A;\n }\n\n if (x === h.length) return c(e, r), l;\n\n if (null === r) {\n for (; x < h.length; x++) {\n r = C(e, h[x], k), null !== r && (g = f(r, g, x), null === m ? l = r : m.sibling = r, m = r);\n }\n\n return l;\n }\n\n for (r = d(e, r); x < h.length; x++) {\n A = H(r, e, x, h[x], k), null !== A && (a && null !== A.alternate && r[\"delete\"](null === A.key ? x : A.key), g = f(A, g, x), null === m ? l = A : m.sibling = A, m = A);\n }\n\n a && r.forEach(function (a) {\n return b(e, a);\n });\n return l;\n }\n\n function ta(e, g, h, k) {\n var l = Ua(h);\n if (\"function\" !== typeof l) throw Error(u(150));\n h = l.call(h);\n if (null == h) throw Error(u(151));\n\n for (var m = l = null, r = g, x = g = 0, A = null, p = h.next(); null !== r && !p.done; x++, p = h.next()) {\n r.index > x ? (A = r, r = null) : A = r.sibling;\n var z = y(e, r, p.value, k);\n\n if (null === z) {\n null === r && (r = A);\n break;\n }\n\n a && r && null === z.alternate && b(e, r);\n g = f(z, g, x);\n null === m ? l = z : m.sibling = z;\n m = z;\n r = A;\n }\n\n if (p.done) return c(e, r), l;\n\n if (null === r) {\n for (; !p.done; x++, p = h.next()) {\n p = C(e, p.value, k), null !== p && (g = f(p, g, x), null === m ? l = p : m.sibling = p, m = p);\n }\n\n return l;\n }\n\n for (r = d(e, r); !p.done; x++, p = h.next()) {\n p = H(r, e, x, p.value, k), null !== p && (a && null !== p.alternate && r[\"delete\"](null === p.key ? x : p.key), g = f(p, g, x), null === m ? l = p : m.sibling = p, m = p);\n }\n\n a && r.forEach(function (a) {\n return b(e, a);\n });\n return l;\n }\n\n return function (a, d, f, h) {\n var k = \"object\" === _typeof(f) && null !== f && f.type === Ia && null === f.key;\n k && (f = f.props.children);\n var l = \"object\" === _typeof(f) && null !== f;\n if (l) switch (f.$$typeof) {\n case Ga:\n a: {\n l = f.key;\n\n for (k = d; null !== k;) {\n if (k.key === l) {\n if (7 === k.tag ? f.type === Ia : k.elementType === f.type) {\n c(a, k.sibling);\n d = e(k, f.type === Ia ? f.props.children : f.props, h);\n d.ref = Yg(a, k, f);\n d[\"return\"] = a;\n a = d;\n break a;\n } else {\n c(a, k);\n break;\n }\n } else b(a, k);\n\n k = k.sibling;\n }\n\n f.type === Ia ? (d = eh(f.props.children, a.mode, h, f.key), d[\"return\"] = a, a = d) : (h = ch(f.type, f.key, f.props, null, a.mode, h), h.ref = Yg(a, d, f), h[\"return\"] = a, a = h);\n }\n\n return g(a);\n\n case Ha:\n a: {\n for (k = f.key; null !== d;) {\n if (d.key === k) {\n if (4 === d.tag && d.stateNode.containerInfo === f.containerInfo && d.stateNode.implementation === f.implementation) {\n c(a, d.sibling);\n d = e(d, f.children || [], h);\n d[\"return\"] = a;\n a = d;\n break a;\n } else {\n c(a, d);\n break;\n }\n } else b(a, d);\n\n d = d.sibling;\n }\n\n d = dh(f, a.mode, h);\n d[\"return\"] = a;\n a = d;\n }\n\n return g(a);\n }\n if (\"string\" === typeof f || \"number\" === typeof f) return f = \"\" + f, null !== d && 6 === d.tag ? (c(a, d.sibling), d = e(d, f, h), d[\"return\"] = a, a = d) : (c(a, d), d = bh(f, a.mode, h), d[\"return\"] = a, a = d), g(a);\n if (Xg(f)) return z(a, d, f, h);\n if (Ua(f)) return ta(a, d, f, h);\n l && Zg(a, f);\n if (\"undefined\" === typeof f && !k) switch (a.tag) {\n case 1:\n case 0:\n throw a = a.type, Error(u(152, a.displayName || a.name || \"Component\"));\n }\n return c(a, d);\n };\n}\n\nvar fh = $g(!0),\n gh = $g(!1),\n hh = {},\n ih = {\n current: hh\n},\n jh = {\n current: hh\n},\n kh = {\n current: hh\n};\n\nfunction lh(a) {\n if (a === hh) throw Error(u(174));\n return a;\n}\n\nfunction mh(a, b) {\n I(kh, b, a);\n I(jh, a, a);\n I(ih, hh, a);\n var c = b.nodeType;\n\n switch (c) {\n case 9:\n case 11:\n b = (b = b.documentElement) ? b.namespaceURI : Qb(null, \"\");\n break;\n\n default:\n c = 8 === c ? b.parentNode : b, b = c.namespaceURI || null, c = c.tagName, b = Qb(b, c);\n }\n\n G(ih, a);\n I(ih, b, a);\n}\n\nfunction nh(a) {\n G(ih, a);\n G(jh, a);\n G(kh, a);\n}\n\nfunction oh(a) {\n lh(kh.current);\n var b = lh(ih.current);\n var c = Qb(b, a.type);\n b !== c && (I(jh, a, a), I(ih, c, a));\n}\n\nfunction ph(a) {\n jh.current === a && (G(ih, a), G(jh, a));\n}\n\nvar M = {\n current: 0\n};\n\nfunction qh(a) {\n for (var b = a; null !== b;) {\n if (13 === b.tag) {\n var c = b.memoizedState;\n if (null !== c && (c = c.dehydrated, null === c || c.data === je || c.data === ke)) return b;\n } else if (19 === b.tag && void 0 !== b.memoizedProps.revealOrder) {\n if (0 !== (b.effectTag & 64)) return b;\n } else if (null !== b.child) {\n b.child[\"return\"] = b;\n b = b.child;\n continue;\n }\n\n if (b === a) break;\n\n for (; null === b.sibling;) {\n if (null === b[\"return\"] || b[\"return\"] === a) return null;\n b = b[\"return\"];\n }\n\n b.sibling[\"return\"] = b[\"return\"];\n b = b.sibling;\n }\n\n return null;\n}\n\nfunction rh(a, b) {\n return {\n responder: a,\n props: b\n };\n}\n\nvar sh = Ea.ReactCurrentDispatcher,\n N = Ea.ReactCurrentBatchConfig,\n th = 0,\n uh = null,\n O = null,\n vh = null,\n wh = null,\n P = null,\n xh = null,\n yh = 0,\n zh = null,\n Ah = 0,\n Bh = !1,\n Ch = null,\n Gh = 0;\n\nfunction Q() {\n throw Error(u(321));\n}\n\nfunction Hh(a, b) {\n if (null === b) return !1;\n\n for (var c = 0; c < b.length && c < a.length; c++) {\n if (!of(a[c], b[c])) return !1;\n }\n\n return !0;\n}\n\nfunction Ih(a, b, c, d, e, f) {\n th = f;\n uh = b;\n vh = null !== a ? a.memoizedState : null;\n sh.current = null === vh ? Jh : Kh;\n b = c(d, e);\n\n if (Bh) {\n do {\n Bh = !1, Gh += 1, vh = null !== a ? a.memoizedState : null, xh = wh, zh = P = O = null, sh.current = Kh, b = c(d, e);\n } while (Bh);\n\n Ch = null;\n Gh = 0;\n }\n\n sh.current = Lh;\n a = uh;\n a.memoizedState = wh;\n a.expirationTime = yh;\n a.updateQueue = zh;\n a.effectTag |= Ah;\n a = null !== O && null !== O.next;\n th = 0;\n xh = P = wh = vh = O = uh = null;\n yh = 0;\n zh = null;\n Ah = 0;\n if (a) throw Error(u(300));\n return b;\n}\n\nfunction Mh() {\n sh.current = Lh;\n th = 0;\n xh = P = wh = vh = O = uh = null;\n yh = 0;\n zh = null;\n Ah = 0;\n Bh = !1;\n Ch = null;\n Gh = 0;\n}\n\nfunction Nh() {\n var a = {\n memoizedState: null,\n baseState: null,\n queue: null,\n baseUpdate: null,\n next: null\n };\n null === P ? wh = P = a : P = P.next = a;\n return P;\n}\n\nfunction Oh() {\n if (null !== xh) P = xh, xh = P.next, O = vh, vh = null !== O ? O.next : null;else {\n if (null === vh) throw Error(u(310));\n O = vh;\n var a = {\n memoizedState: O.memoizedState,\n baseState: O.baseState,\n queue: O.queue,\n baseUpdate: O.baseUpdate,\n next: null\n };\n P = null === P ? wh = a : P.next = a;\n vh = O.next;\n }\n return P;\n}\n\nfunction Ph(a, b) {\n return \"function\" === typeof b ? b(a) : b;\n}\n\nfunction Qh(a) {\n var b = Oh(),\n c = b.queue;\n if (null === c) throw Error(u(311));\n c.lastRenderedReducer = a;\n\n if (0 < Gh) {\n var d = c.dispatch;\n\n if (null !== Ch) {\n var e = Ch.get(c);\n\n if (void 0 !== e) {\n Ch[\"delete\"](c);\n var f = b.memoizedState;\n\n do {\n f = a(f, e.action), e = e.next;\n } while (null !== e);\n\n of(f, b.memoizedState) || (wg = !0);\n b.memoizedState = f;\n b.baseUpdate === c.last && (b.baseState = f);\n c.lastRenderedState = f;\n return [f, d];\n }\n }\n\n return [b.memoizedState, d];\n }\n\n d = c.last;\n var g = b.baseUpdate;\n f = b.baseState;\n null !== g ? (null !== d && (d.next = null), d = g.next) : d = null !== d ? d.next : null;\n\n if (null !== d) {\n var h = e = null,\n k = d,\n l = !1;\n\n do {\n var m = k.expirationTime;\n m < th ? (l || (l = !0, h = g, e = f), m > yh && (yh = m, Jg(yh))) : (Ig(m, k.suspenseConfig), f = k.eagerReducer === a ? k.eagerState : a(f, k.action));\n g = k;\n k = k.next;\n } while (null !== k && k !== d);\n\n l || (h = g, e = f);\n of(f, b.memoizedState) || (wg = !0);\n b.memoizedState = f;\n b.baseUpdate = h;\n b.baseState = e;\n c.lastRenderedState = f;\n }\n\n return [b.memoizedState, c.dispatch];\n}\n\nfunction Rh(a) {\n var b = Nh();\n \"function\" === typeof a && (a = a());\n b.memoizedState = b.baseState = a;\n a = b.queue = {\n last: null,\n dispatch: null,\n lastRenderedReducer: Ph,\n lastRenderedState: a\n };\n a = a.dispatch = Sh.bind(null, uh, a);\n return [b.memoizedState, a];\n}\n\nfunction Th(a) {\n return Qh(Ph, a);\n}\n\nfunction Uh(a, b, c, d) {\n a = {\n tag: a,\n create: b,\n destroy: c,\n deps: d,\n next: null\n };\n null === zh ? (zh = {\n lastEffect: null\n }, zh.lastEffect = a.next = a) : (b = zh.lastEffect, null === b ? zh.lastEffect = a.next = a : (c = b.next, b.next = a, a.next = c, zh.lastEffect = a));\n return a;\n}\n\nfunction Vh(a, b, c, d) {\n var e = Nh();\n Ah |= a;\n e.memoizedState = Uh(b, c, void 0, void 0 === d ? null : d);\n}\n\nfunction Wh(a, b, c, d) {\n var e = Oh();\n d = void 0 === d ? null : d;\n var f = void 0;\n\n if (null !== O) {\n var g = O.memoizedState;\n f = g.destroy;\n\n if (null !== d && Hh(d, g.deps)) {\n Uh(0, c, f, d);\n return;\n }\n }\n\n Ah |= a;\n e.memoizedState = Uh(b, c, f, d);\n}\n\nfunction Xh(a, b) {\n return Vh(516, 192, a, b);\n}\n\nfunction Yh(a, b) {\n return Wh(516, 192, a, b);\n}\n\nfunction Zh(a, b) {\n if (\"function\" === typeof b) return a = a(), b(a), function () {\n b(null);\n };\n if (null !== b && void 0 !== b) return a = a(), b.current = a, function () {\n b.current = null;\n };\n}\n\nfunction $h() {}\n\nfunction ai(a, b) {\n Nh().memoizedState = [a, void 0 === b ? null : b];\n return a;\n}\n\nfunction bi(a, b) {\n var c = Oh();\n b = void 0 === b ? null : b;\n var d = c.memoizedState;\n if (null !== d && null !== b && Hh(b, d[1])) return d[0];\n c.memoizedState = [a, b];\n return a;\n}\n\nfunction Sh(a, b, c) {\n if (!(25 > Gh)) throw Error(u(301));\n var d = a.alternate;\n\n if (a === uh || null !== d && d === uh) {\n if (Bh = !0, a = {\n expirationTime: th,\n suspenseConfig: null,\n action: c,\n eagerReducer: null,\n eagerState: null,\n next: null\n }, null === Ch && (Ch = new Map()), c = Ch.get(b), void 0 === c) Ch.set(b, a);else {\n for (b = c; null !== b.next;) {\n b = b.next;\n }\n\n b.next = a;\n }\n } else {\n var e = Pg(),\n f = Mg.suspense;\n e = Qg(e, a, f);\n f = {\n expirationTime: e,\n suspenseConfig: f,\n action: c,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n var g = b.last;\n if (null === g) f.next = f;else {\n var h = g.next;\n null !== h && (f.next = h);\n g.next = f;\n }\n b.last = f;\n if (0 === a.expirationTime && (null === d || 0 === d.expirationTime) && (d = b.lastRenderedReducer, null !== d)) try {\n var k = b.lastRenderedState,\n l = d(k, c);\n f.eagerReducer = d;\n f.eagerState = l;\n if (of(l, k)) return;\n } catch (m) {} finally {}\n Rg(a, e);\n }\n}\n\nvar Lh = {\n readContext: xg,\n useCallback: Q,\n useContext: Q,\n useEffect: Q,\n useImperativeHandle: Q,\n useLayoutEffect: Q,\n useMemo: Q,\n useReducer: Q,\n useRef: Q,\n useState: Q,\n useDebugValue: Q,\n useResponder: Q,\n useDeferredValue: Q,\n useTransition: Q\n},\n Jh = {\n readContext: xg,\n useCallback: ai,\n useContext: xg,\n useEffect: Xh,\n useImperativeHandle: function useImperativeHandle(a, b, c) {\n c = null !== c && void 0 !== c ? c.concat([a]) : null;\n return Vh(4, 36, Zh.bind(null, b, a), c);\n },\n useLayoutEffect: function useLayoutEffect(a, b) {\n return Vh(4, 36, a, b);\n },\n useMemo: function useMemo(a, b) {\n var c = Nh();\n b = void 0 === b ? null : b;\n a = a();\n c.memoizedState = [a, b];\n return a;\n },\n useReducer: function useReducer(a, b, c) {\n var d = Nh();\n b = void 0 !== c ? c(b) : b;\n d.memoizedState = d.baseState = b;\n a = d.queue = {\n last: null,\n dispatch: null,\n lastRenderedReducer: a,\n lastRenderedState: b\n };\n a = a.dispatch = Sh.bind(null, uh, a);\n return [d.memoizedState, a];\n },\n useRef: function useRef(a) {\n var b = Nh();\n a = {\n current: a\n };\n return b.memoizedState = a;\n },\n useState: Rh,\n useDebugValue: $h,\n useResponder: rh,\n useDeferredValue: function useDeferredValue(a, b) {\n var c = Rh(a),\n d = c[0],\n e = c[1];\n Xh(function () {\n q.unstable_next(function () {\n var c = N.suspense;\n N.suspense = void 0 === b ? null : b;\n\n try {\n e(a);\n } finally {\n N.suspense = c;\n }\n });\n }, [a, b]);\n return d;\n },\n useTransition: function useTransition(a) {\n var b = Rh(!1),\n c = b[0],\n d = b[1];\n return [ai(function (b) {\n d(!0);\n q.unstable_next(function () {\n var c = N.suspense;\n N.suspense = void 0 === a ? null : a;\n\n try {\n d(!1), b();\n } finally {\n N.suspense = c;\n }\n });\n }, [a, c]), c];\n }\n},\n Kh = {\n readContext: xg,\n useCallback: bi,\n useContext: xg,\n useEffect: Yh,\n useImperativeHandle: function useImperativeHandle(a, b, c) {\n c = null !== c && void 0 !== c ? c.concat([a]) : null;\n return Wh(4, 36, Zh.bind(null, b, a), c);\n },\n useLayoutEffect: function useLayoutEffect(a, b) {\n return Wh(4, 36, a, b);\n },\n useMemo: function useMemo(a, b) {\n var c = Oh();\n b = void 0 === b ? null : b;\n var d = c.memoizedState;\n if (null !== d && null !== b && Hh(b, d[1])) return d[0];\n a = a();\n c.memoizedState = [a, b];\n return a;\n },\n useReducer: Qh,\n useRef: function useRef() {\n return Oh().memoizedState;\n },\n useState: Th,\n useDebugValue: $h,\n useResponder: rh,\n useDeferredValue: function useDeferredValue(a, b) {\n var c = Th(a),\n d = c[0],\n e = c[1];\n Yh(function () {\n q.unstable_next(function () {\n var c = N.suspense;\n N.suspense = void 0 === b ? null : b;\n\n try {\n e(a);\n } finally {\n N.suspense = c;\n }\n });\n }, [a, b]);\n return d;\n },\n useTransition: function useTransition(a) {\n var b = Th(!1),\n c = b[0],\n d = b[1];\n return [bi(function (b) {\n d(!0);\n q.unstable_next(function () {\n var c = N.suspense;\n N.suspense = void 0 === a ? null : a;\n\n try {\n d(!1), b();\n } finally {\n N.suspense = c;\n }\n });\n }, [a, c]), c];\n }\n},\n ci = null,\n di = null,\n ei = !1;\n\nfunction fi(a, b) {\n var c = gi(5, null, null, 0);\n c.elementType = \"DELETED\";\n c.type = \"DELETED\";\n c.stateNode = b;\n c[\"return\"] = a;\n c.effectTag = 8;\n null !== a.lastEffect ? (a.lastEffect.nextEffect = c, a.lastEffect = c) : a.firstEffect = a.lastEffect = c;\n}\n\nfunction hi(a, b) {\n switch (a.tag) {\n case 5:\n var c = a.type;\n b = 1 !== b.nodeType || c.toLowerCase() !== b.nodeName.toLowerCase() ? null : b;\n return null !== b ? (a.stateNode = b, !0) : !1;\n\n case 6:\n return b = \"\" === a.pendingProps || 3 !== b.nodeType ? null : b, null !== b ? (a.stateNode = b, !0) : !1;\n\n case 13:\n return !1;\n\n default:\n return !1;\n }\n}\n\nfunction ii(a) {\n if (ei) {\n var b = di;\n\n if (b) {\n var c = b;\n\n if (!hi(a, b)) {\n b = re(c.nextSibling);\n\n if (!b || !hi(a, b)) {\n a.effectTag = a.effectTag & -1025 | 2;\n ei = !1;\n ci = a;\n return;\n }\n\n fi(ci, c);\n }\n\n ci = a;\n di = re(b.firstChild);\n } else a.effectTag = a.effectTag & -1025 | 2, ei = !1, ci = a;\n }\n}\n\nfunction ji(a) {\n for (a = a[\"return\"]; null !== a && 5 !== a.tag && 3 !== a.tag && 13 !== a.tag;) {\n a = a[\"return\"];\n }\n\n ci = a;\n}\n\nfunction ki(a) {\n if (a !== ci) return !1;\n if (!ei) return ji(a), ei = !0, !1;\n var b = a.type;\n if (5 !== a.tag || \"head\" !== b && \"body\" !== b && !oe(b, a.memoizedProps)) for (b = di; b;) {\n fi(a, b), b = re(b.nextSibling);\n }\n ji(a);\n\n if (13 === a.tag) {\n a = a.memoizedState;\n a = null !== a ? a.dehydrated : null;\n if (!a) throw Error(u(317));\n\n a: {\n a = a.nextSibling;\n\n for (b = 0; a;) {\n if (8 === a.nodeType) {\n var c = a.data;\n\n if (c === ie) {\n if (0 === b) {\n di = re(a.nextSibling);\n break a;\n }\n\n b--;\n } else c !== he && c !== ke && c !== je || b++;\n }\n\n a = a.nextSibling;\n }\n\n di = null;\n }\n } else di = ci ? re(a.stateNode.nextSibling) : null;\n\n return !0;\n}\n\nfunction li() {\n di = ci = null;\n ei = !1;\n}\n\nvar mi = Ea.ReactCurrentOwner,\n wg = !1;\n\nfunction R(a, b, c, d) {\n b.child = null === a ? gh(b, null, c, d) : fh(b, a.child, c, d);\n}\n\nfunction ni(a, b, c, d, e) {\n c = c.render;\n var f = b.ref;\n vg(b, e);\n d = Ih(a, b, c, d, f, e);\n if (null !== a && !wg) return b.updateQueue = a.updateQueue, b.effectTag &= -517, a.expirationTime <= e && (a.expirationTime = 0), oi(a, b, e);\n b.effectTag |= 1;\n R(a, b, d, e);\n return b.child;\n}\n\nfunction pi(a, b, c, d, e, f) {\n if (null === a) {\n var g = c.type;\n if (\"function\" === typeof g && !qi(g) && void 0 === g.defaultProps && null === c.compare && void 0 === c.defaultProps) return b.tag = 15, b.type = g, ri(a, b, g, d, e, f);\n a = ch(c.type, null, d, null, b.mode, f);\n a.ref = b.ref;\n a[\"return\"] = b;\n return b.child = a;\n }\n\n g = a.child;\n if (e < f && (e = g.memoizedProps, c = c.compare, c = null !== c ? c : qf, c(e, d) && a.ref === b.ref)) return oi(a, b, f);\n b.effectTag |= 1;\n a = ah(g, d, f);\n a.ref = b.ref;\n a[\"return\"] = b;\n return b.child = a;\n}\n\nfunction ri(a, b, c, d, e, f) {\n return null !== a && qf(a.memoizedProps, d) && a.ref === b.ref && (wg = !1, e < f) ? oi(a, b, f) : si(a, b, c, d, f);\n}\n\nfunction ti(a, b) {\n var c = b.ref;\n if (null === a && null !== c || null !== a && a.ref !== c) b.effectTag |= 128;\n}\n\nfunction si(a, b, c, d, e) {\n var f = L(c) ? Df : J.current;\n f = Ef(b, f);\n vg(b, e);\n c = Ih(a, b, c, d, f, e);\n if (null !== a && !wg) return b.updateQueue = a.updateQueue, b.effectTag &= -517, a.expirationTime <= e && (a.expirationTime = 0), oi(a, b, e);\n b.effectTag |= 1;\n R(a, b, c, e);\n return b.child;\n}\n\nfunction ui(a, b, c, d, e) {\n if (L(c)) {\n var f = !0;\n Jf(b);\n } else f = !1;\n\n vg(b, e);\n if (null === b.stateNode) null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2), Ug(b, c, d, e), Wg(b, c, d, e), d = !0;else if (null === a) {\n var g = b.stateNode,\n h = b.memoizedProps;\n g.props = h;\n var k = g.context,\n l = c.contextType;\n \"object\" === _typeof(l) && null !== l ? l = xg(l) : (l = L(c) ? Df : J.current, l = Ef(b, l));\n var m = c.getDerivedStateFromProps,\n C = \"function\" === typeof m || \"function\" === typeof g.getSnapshotBeforeUpdate;\n C || \"function\" !== typeof g.UNSAFE_componentWillReceiveProps && \"function\" !== typeof g.componentWillReceiveProps || (h !== d || k !== l) && Vg(b, g, d, l);\n yg = !1;\n var y = b.memoizedState;\n k = g.state = y;\n var H = b.updateQueue;\n null !== H && (Hg(b, H, d, g, e), k = b.memoizedState);\n h !== d || y !== k || K.current || yg ? (\"function\" === typeof m && (Og(b, c, m, d), k = b.memoizedState), (h = yg || Tg(b, c, h, d, y, k, l)) ? (C || \"function\" !== typeof g.UNSAFE_componentWillMount && \"function\" !== typeof g.componentWillMount || (\"function\" === typeof g.componentWillMount && g.componentWillMount(), \"function\" === typeof g.UNSAFE_componentWillMount && g.UNSAFE_componentWillMount()), \"function\" === typeof g.componentDidMount && (b.effectTag |= 4)) : (\"function\" === typeof g.componentDidMount && (b.effectTag |= 4), b.memoizedProps = d, b.memoizedState = k), g.props = d, g.state = k, g.context = l, d = h) : (\"function\" === typeof g.componentDidMount && (b.effectTag |= 4), d = !1);\n } else g = b.stateNode, h = b.memoizedProps, g.props = b.type === b.elementType ? h : mg(b.type, h), k = g.context, l = c.contextType, \"object\" === _typeof(l) && null !== l ? l = xg(l) : (l = L(c) ? Df : J.current, l = Ef(b, l)), m = c.getDerivedStateFromProps, (C = \"function\" === typeof m || \"function\" === typeof g.getSnapshotBeforeUpdate) || \"function\" !== typeof g.UNSAFE_componentWillReceiveProps && \"function\" !== typeof g.componentWillReceiveProps || (h !== d || k !== l) && Vg(b, g, d, l), yg = !1, k = b.memoizedState, y = g.state = k, H = b.updateQueue, null !== H && (Hg(b, H, d, g, e), y = b.memoizedState), h !== d || k !== y || K.current || yg ? (\"function\" === typeof m && (Og(b, c, m, d), y = b.memoizedState), (m = yg || Tg(b, c, h, d, k, y, l)) ? (C || \"function\" !== typeof g.UNSAFE_componentWillUpdate && \"function\" !== typeof g.componentWillUpdate || (\"function\" === typeof g.componentWillUpdate && g.componentWillUpdate(d, y, l), \"function\" === typeof g.UNSAFE_componentWillUpdate && g.UNSAFE_componentWillUpdate(d, y, l)), \"function\" === typeof g.componentDidUpdate && (b.effectTag |= 4), \"function\" === typeof g.getSnapshotBeforeUpdate && (b.effectTag |= 256)) : (\"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 4), \"function\" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 256), b.memoizedProps = d, b.memoizedState = y), g.props = d, g.state = y, g.context = l, d = m) : (\"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 4), \"function\" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 256), d = !1);\n return vi(a, b, c, d, f, e);\n}\n\nfunction vi(a, b, c, d, e, f) {\n ti(a, b);\n var g = 0 !== (b.effectTag & 64);\n if (!d && !g) return e && Kf(b, c, !1), oi(a, b, f);\n d = b.stateNode;\n mi.current = b;\n var h = g && \"function\" !== typeof c.getDerivedStateFromError ? null : d.render();\n b.effectTag |= 1;\n null !== a && g ? (b.child = fh(b, a.child, null, f), b.child = fh(b, null, h, f)) : R(a, b, h, f);\n b.memoizedState = d.state;\n e && Kf(b, c, !0);\n return b.child;\n}\n\nfunction wi(a) {\n var b = a.stateNode;\n b.pendingContext ? Hf(a, b.pendingContext, b.pendingContext !== b.context) : b.context && Hf(a, b.context, !1);\n mh(a, b.containerInfo);\n}\n\nvar xi = {\n dehydrated: null,\n retryTime: 0\n};\n\nfunction yi(a, b, c) {\n var d = b.mode,\n e = b.pendingProps,\n f = M.current,\n g = !1,\n h;\n (h = 0 !== (b.effectTag & 64)) || (h = 0 !== (f & 2) && (null === a || null !== a.memoizedState));\n h ? (g = !0, b.effectTag &= -65) : null !== a && null === a.memoizedState || void 0 === e.fallback || !0 === e.unstable_avoidThisFallback || (f |= 1);\n I(M, f & 1, b);\n\n if (null === a) {\n void 0 !== e.fallback && ii(b);\n\n if (g) {\n g = e.fallback;\n e = eh(null, d, 0, null);\n e[\"return\"] = b;\n if (0 === (b.mode & 2)) for (a = null !== b.memoizedState ? b.child.child : b.child, e.child = a; null !== a;) {\n a[\"return\"] = e, a = a.sibling;\n }\n c = eh(g, d, c, null);\n c[\"return\"] = b;\n e.sibling = c;\n b.memoizedState = xi;\n b.child = e;\n return c;\n }\n\n d = e.children;\n b.memoizedState = null;\n return b.child = gh(b, null, d, c);\n }\n\n if (null !== a.memoizedState) {\n a = a.child;\n d = a.sibling;\n\n if (g) {\n e = e.fallback;\n c = ah(a, a.pendingProps, 0);\n c[\"return\"] = b;\n if (0 === (b.mode & 2) && (g = null !== b.memoizedState ? b.child.child : b.child, g !== a.child)) for (c.child = g; null !== g;) {\n g[\"return\"] = c, g = g.sibling;\n }\n d = ah(d, e, d.expirationTime);\n d[\"return\"] = b;\n c.sibling = d;\n c.childExpirationTime = 0;\n b.memoizedState = xi;\n b.child = c;\n return d;\n }\n\n c = fh(b, a.child, e.children, c);\n b.memoizedState = null;\n return b.child = c;\n }\n\n a = a.child;\n\n if (g) {\n g = e.fallback;\n e = eh(null, d, 0, null);\n e[\"return\"] = b;\n e.child = a;\n null !== a && (a[\"return\"] = e);\n if (0 === (b.mode & 2)) for (a = null !== b.memoizedState ? b.child.child : b.child, e.child = a; null !== a;) {\n a[\"return\"] = e, a = a.sibling;\n }\n c = eh(g, d, c, null);\n c[\"return\"] = b;\n e.sibling = c;\n c.effectTag |= 2;\n e.childExpirationTime = 0;\n b.memoizedState = xi;\n b.child = e;\n return c;\n }\n\n b.memoizedState = null;\n return b.child = fh(b, a, e.children, c);\n}\n\nfunction zi(a, b) {\n a.expirationTime < b && (a.expirationTime = b);\n var c = a.alternate;\n null !== c && c.expirationTime < b && (c.expirationTime = b);\n ug(a[\"return\"], b);\n}\n\nfunction Ai(a, b, c, d, e, f) {\n var g = a.memoizedState;\n null === g ? a.memoizedState = {\n isBackwards: b,\n rendering: null,\n last: d,\n tail: c,\n tailExpiration: 0,\n tailMode: e,\n lastEffect: f\n } : (g.isBackwards = b, g.rendering = null, g.last = d, g.tail = c, g.tailExpiration = 0, g.tailMode = e, g.lastEffect = f);\n}\n\nfunction Bi(a, b, c) {\n var d = b.pendingProps,\n e = d.revealOrder,\n f = d.tail;\n R(a, b, d.children, c);\n d = M.current;\n if (0 !== (d & 2)) d = d & 1 | 2, b.effectTag |= 64;else {\n if (null !== a && 0 !== (a.effectTag & 64)) a: for (a = b.child; null !== a;) {\n if (13 === a.tag) null !== a.memoizedState && zi(a, c);else if (19 === a.tag) zi(a, c);else if (null !== a.child) {\n a.child[\"return\"] = a;\n a = a.child;\n continue;\n }\n if (a === b) break a;\n\n for (; null === a.sibling;) {\n if (null === a[\"return\"] || a[\"return\"] === b) break a;\n a = a[\"return\"];\n }\n\n a.sibling[\"return\"] = a[\"return\"];\n a = a.sibling;\n }\n d &= 1;\n }\n I(M, d, b);\n if (0 === (b.mode & 2)) b.memoizedState = null;else switch (e) {\n case \"forwards\":\n c = b.child;\n\n for (e = null; null !== c;) {\n a = c.alternate, null !== a && null === qh(a) && (e = c), c = c.sibling;\n }\n\n c = e;\n null === c ? (e = b.child, b.child = null) : (e = c.sibling, c.sibling = null);\n Ai(b, !1, e, c, f, b.lastEffect);\n break;\n\n case \"backwards\":\n c = null;\n e = b.child;\n\n for (b.child = null; null !== e;) {\n a = e.alternate;\n\n if (null !== a && null === qh(a)) {\n b.child = e;\n break;\n }\n\n a = e.sibling;\n e.sibling = c;\n c = e;\n e = a;\n }\n\n Ai(b, !0, c, null, f, b.lastEffect);\n break;\n\n case \"together\":\n Ai(b, !1, null, null, void 0, b.lastEffect);\n break;\n\n default:\n b.memoizedState = null;\n }\n return b.child;\n}\n\nfunction oi(a, b, c) {\n null !== a && (b.dependencies = a.dependencies);\n var d = b.expirationTime;\n 0 !== d && Jg(d);\n if (b.childExpirationTime < c) return null;\n if (null !== a && b.child !== a.child) throw Error(u(153));\n\n if (null !== b.child) {\n a = b.child;\n c = ah(a, a.pendingProps, a.expirationTime);\n b.child = c;\n\n for (c[\"return\"] = b; null !== a.sibling;) {\n a = a.sibling, c = c.sibling = ah(a, a.pendingProps, a.expirationTime), c[\"return\"] = b;\n }\n\n c.sibling = null;\n }\n\n return b.child;\n}\n\nfunction Ci(a) {\n a.effectTag |= 4;\n}\n\nvar Hi, Ii, Ji, Ki;\n\nHi = function Hi(a, b) {\n for (var c = b.child; null !== c;) {\n if (5 === c.tag || 6 === c.tag) a.appendChild(c.stateNode);else if (4 !== c.tag && null !== c.child) {\n c.child[\"return\"] = c;\n c = c.child;\n continue;\n }\n if (c === b) break;\n\n for (; null === c.sibling;) {\n if (null === c[\"return\"] || c[\"return\"] === b) return;\n c = c[\"return\"];\n }\n\n c.sibling[\"return\"] = c[\"return\"];\n c = c.sibling;\n }\n};\n\nIi = function Ii() {};\n\nJi = function Ji(a, b, c, d, e) {\n var f = a.memoizedProps;\n\n if (f !== d) {\n var g = b.stateNode;\n lh(ih.current);\n a = null;\n\n switch (c) {\n case \"input\":\n f = Ab(g, f);\n d = Ab(g, d);\n a = [];\n break;\n\n case \"option\":\n f = Ib(g, f);\n d = Ib(g, d);\n a = [];\n break;\n\n case \"select\":\n f = n({}, f, {\n value: void 0\n });\n d = n({}, d, {\n value: void 0\n });\n a = [];\n break;\n\n case \"textarea\":\n f = Kb(g, f);\n d = Kb(g, d);\n a = [];\n break;\n\n default:\n \"function\" !== typeof f.onClick && \"function\" === typeof d.onClick && (g.onclick = ae);\n }\n\n Yd(c, d);\n var h, k;\n c = null;\n\n for (h in f) {\n if (!d.hasOwnProperty(h) && f.hasOwnProperty(h) && null != f[h]) if (\"style\" === h) for (k in g = f[h], g) {\n g.hasOwnProperty(k) && (c || (c = {}), c[k] = \"\");\n } else \"dangerouslySetInnerHTML\" !== h && \"children\" !== h && \"suppressContentEditableWarning\" !== h && \"suppressHydrationWarning\" !== h && \"autoFocus\" !== h && (ia.hasOwnProperty(h) ? a || (a = []) : (a = a || []).push(h, null));\n }\n\n for (h in d) {\n var l = d[h];\n g = null != f ? f[h] : void 0;\n if (d.hasOwnProperty(h) && l !== g && (null != l || null != g)) if (\"style\" === h) {\n if (g) {\n for (k in g) {\n !g.hasOwnProperty(k) || l && l.hasOwnProperty(k) || (c || (c = {}), c[k] = \"\");\n }\n\n for (k in l) {\n l.hasOwnProperty(k) && g[k] !== l[k] && (c || (c = {}), c[k] = l[k]);\n }\n } else c || (a || (a = []), a.push(h, c)), c = l;\n } else \"dangerouslySetInnerHTML\" === h ? (l = l ? l.__html : void 0, g = g ? g.__html : void 0, null != l && g !== l && (a = a || []).push(h, \"\" + l)) : \"children\" === h ? g === l || \"string\" !== typeof l && \"number\" !== typeof l || (a = a || []).push(h, \"\" + l) : \"suppressContentEditableWarning\" !== h && \"suppressHydrationWarning\" !== h && (ia.hasOwnProperty(h) ? (null != l && $d(e, h), a || g === l || (a = [])) : (a = a || []).push(h, l));\n }\n\n c && (a = a || []).push(\"style\", c);\n e = a;\n (b.updateQueue = e) && Ci(b);\n }\n};\n\nKi = function Ki(a, b, c, d) {\n c !== d && Ci(b);\n};\n\nfunction Li(a, b) {\n switch (a.tailMode) {\n case \"hidden\":\n b = a.tail;\n\n for (var c = null; null !== b;) {\n null !== b.alternate && (c = b), b = b.sibling;\n }\n\n null === c ? a.tail = null : c.sibling = null;\n break;\n\n case \"collapsed\":\n c = a.tail;\n\n for (var d = null; null !== c;) {\n null !== c.alternate && (d = c), c = c.sibling;\n }\n\n null === d ? b || null === a.tail ? a.tail = null : a.tail.sibling = null : d.sibling = null;\n }\n}\n\nfunction Mi(a) {\n switch (a.tag) {\n case 1:\n L(a.type) && Ff(a);\n var b = a.effectTag;\n return b & 4096 ? (a.effectTag = b & -4097 | 64, a) : null;\n\n case 3:\n nh(a);\n Gf(a);\n b = a.effectTag;\n if (0 !== (b & 64)) throw Error(u(285));\n a.effectTag = b & -4097 | 64;\n return a;\n\n case 5:\n return ph(a), null;\n\n case 13:\n return G(M, a), b = a.effectTag, b & 4096 ? (a.effectTag = b & -4097 | 64, a) : null;\n\n case 19:\n return G(M, a), null;\n\n case 4:\n return nh(a), null;\n\n case 10:\n return tg(a), null;\n\n default:\n return null;\n }\n}\n\nfunction Ni(a, b) {\n return {\n value: a,\n source: b,\n stack: Xa(b)\n };\n}\n\nvar Oi = \"function\" === typeof WeakSet ? WeakSet : Set;\n\nfunction Pi(a, b) {\n var c = b.source,\n d = b.stack;\n null === d && null !== c && (d = Xa(c));\n null !== c && Wa(c.type);\n b = b.value;\n null !== a && 1 === a.tag && Wa(a.type);\n\n try {\n console.error(b);\n } catch (e) {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction Qi(a, b) {\n try {\n b.props = a.memoizedProps, b.state = a.memoizedState, b.componentWillUnmount();\n } catch (c) {\n Ri(a, c);\n }\n}\n\nfunction Si(a) {\n var b = a.ref;\n if (null !== b) if (\"function\" === typeof b) try {\n b(null);\n } catch (c) {\n Ri(a, c);\n } else b.current = null;\n}\n\nfunction Ti(a, b) {\n switch (b.tag) {\n case 0:\n case 11:\n case 15:\n Ui(2, 0, b);\n break;\n\n case 1:\n if (b.effectTag & 256 && null !== a) {\n var c = a.memoizedProps,\n d = a.memoizedState;\n a = b.stateNode;\n b = a.getSnapshotBeforeUpdate(b.elementType === b.type ? c : mg(b.type, c), d);\n a.__reactInternalSnapshotBeforeUpdate = b;\n }\n\n break;\n\n case 3:\n case 5:\n case 6:\n case 4:\n case 17:\n break;\n\n default:\n throw Error(u(163));\n }\n}\n\nfunction Ui(a, b, c) {\n c = c.updateQueue;\n c = null !== c ? c.lastEffect : null;\n\n if (null !== c) {\n var d = c = c.next;\n\n do {\n if (0 !== (d.tag & a)) {\n var e = d.destroy;\n d.destroy = void 0;\n void 0 !== e && e();\n }\n\n 0 !== (d.tag & b) && (e = d.create, d.destroy = e());\n d = d.next;\n } while (d !== c);\n }\n}\n\nfunction Vi(a, b, c) {\n \"function\" === typeof Wi && Wi(b);\n\n switch (b.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n a = b.updateQueue;\n\n if (null !== a && (a = a.lastEffect, null !== a)) {\n var d = a.next;\n fg(97 < c ? 97 : c, function () {\n var a = d;\n\n do {\n var c = a.destroy;\n\n if (void 0 !== c) {\n var g = b;\n\n try {\n c();\n } catch (h) {\n Ri(g, h);\n }\n }\n\n a = a.next;\n } while (a !== d);\n });\n }\n\n break;\n\n case 1:\n Si(b);\n c = b.stateNode;\n \"function\" === typeof c.componentWillUnmount && Qi(b, c);\n break;\n\n case 5:\n Si(b);\n break;\n\n case 4:\n Xi(a, b, c);\n }\n}\n\nfunction Yi(a) {\n var b = a.alternate;\n a[\"return\"] = null;\n a.child = null;\n a.memoizedState = null;\n a.updateQueue = null;\n a.dependencies = null;\n a.alternate = null;\n a.firstEffect = null;\n a.lastEffect = null;\n a.pendingProps = null;\n a.memoizedProps = null;\n null !== b && Yi(b);\n}\n\nfunction Zi(a) {\n return 5 === a.tag || 3 === a.tag || 4 === a.tag;\n}\n\nfunction $i(a) {\n a: {\n for (var b = a[\"return\"]; null !== b;) {\n if (Zi(b)) {\n var c = b;\n break a;\n }\n\n b = b[\"return\"];\n }\n\n throw Error(u(160));\n }\n\n b = c.stateNode;\n\n switch (c.tag) {\n case 5:\n var d = !1;\n break;\n\n case 3:\n b = b.containerInfo;\n d = !0;\n break;\n\n case 4:\n b = b.containerInfo;\n d = !0;\n break;\n\n default:\n throw Error(u(161));\n }\n\n c.effectTag & 16 && (Tb(b, \"\"), c.effectTag &= -17);\n\n a: b: for (c = a;;) {\n for (; null === c.sibling;) {\n if (null === c[\"return\"] || Zi(c[\"return\"])) {\n c = null;\n break a;\n }\n\n c = c[\"return\"];\n }\n\n c.sibling[\"return\"] = c[\"return\"];\n\n for (c = c.sibling; 5 !== c.tag && 6 !== c.tag && 18 !== c.tag;) {\n if (c.effectTag & 2) continue b;\n if (null === c.child || 4 === c.tag) continue b;else c.child[\"return\"] = c, c = c.child;\n }\n\n if (!(c.effectTag & 2)) {\n c = c.stateNode;\n break a;\n }\n }\n\n for (var e = a;;) {\n var f = 5 === e.tag || 6 === e.tag;\n\n if (f) {\n var g = f ? e.stateNode : e.stateNode.instance;\n\n if (c) {\n if (d) {\n f = b;\n var h = g;\n g = c;\n 8 === f.nodeType ? f.parentNode.insertBefore(h, g) : f.insertBefore(h, g);\n } else b.insertBefore(g, c);\n } else d ? (h = b, 8 === h.nodeType ? (f = h.parentNode, f.insertBefore(g, h)) : (f = h, f.appendChild(g)), h = h._reactRootContainer, null !== h && void 0 !== h || null !== f.onclick || (f.onclick = ae)) : b.appendChild(g);\n } else if (4 !== e.tag && null !== e.child) {\n e.child[\"return\"] = e;\n e = e.child;\n continue;\n }\n\n if (e === a) break;\n\n for (; null === e.sibling;) {\n if (null === e[\"return\"] || e[\"return\"] === a) return;\n e = e[\"return\"];\n }\n\n e.sibling[\"return\"] = e[\"return\"];\n e = e.sibling;\n }\n}\n\nfunction Xi(a, b, c) {\n for (var d = b, e = !1, f, g;;) {\n if (!e) {\n e = d[\"return\"];\n\n a: for (;;) {\n if (null === e) throw Error(u(160));\n f = e.stateNode;\n\n switch (e.tag) {\n case 5:\n g = !1;\n break a;\n\n case 3:\n f = f.containerInfo;\n g = !0;\n break a;\n\n case 4:\n f = f.containerInfo;\n g = !0;\n break a;\n }\n\n e = e[\"return\"];\n }\n\n e = !0;\n }\n\n if (5 === d.tag || 6 === d.tag) {\n a: for (var h = a, k = d, l = c, m = k;;) {\n if (Vi(h, m, l), null !== m.child && 4 !== m.tag) m.child[\"return\"] = m, m = m.child;else {\n if (m === k) break;\n\n for (; null === m.sibling;) {\n if (null === m[\"return\"] || m[\"return\"] === k) break a;\n m = m[\"return\"];\n }\n\n m.sibling[\"return\"] = m[\"return\"];\n m = m.sibling;\n }\n }\n\n g ? (h = f, k = d.stateNode, 8 === h.nodeType ? h.parentNode.removeChild(k) : h.removeChild(k)) : f.removeChild(d.stateNode);\n } else if (4 === d.tag) {\n if (null !== d.child) {\n f = d.stateNode.containerInfo;\n g = !0;\n d.child[\"return\"] = d;\n d = d.child;\n continue;\n }\n } else if (Vi(a, d, c), null !== d.child) {\n d.child[\"return\"] = d;\n d = d.child;\n continue;\n }\n\n if (d === b) break;\n\n for (; null === d.sibling;) {\n if (null === d[\"return\"] || d[\"return\"] === b) return;\n d = d[\"return\"];\n 4 === d.tag && (e = !1);\n }\n\n d.sibling[\"return\"] = d[\"return\"];\n d = d.sibling;\n }\n}\n\nfunction aj(a, b) {\n switch (b.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n Ui(4, 8, b);\n break;\n\n case 1:\n break;\n\n case 5:\n var c = b.stateNode;\n\n if (null != c) {\n var d = b.memoizedProps,\n e = null !== a ? a.memoizedProps : d;\n a = b.type;\n var f = b.updateQueue;\n b.updateQueue = null;\n\n if (null !== f) {\n c[ve] = d;\n \"input\" === a && \"radio\" === d.type && null != d.name && Cb(c, d);\n Zd(a, e);\n b = Zd(a, d);\n\n for (e = 0; e < f.length; e += 2) {\n var g = f[e],\n h = f[e + 1];\n \"style\" === g ? Wd(c, h) : \"dangerouslySetInnerHTML\" === g ? Sb(c, h) : \"children\" === g ? Tb(c, h) : vb(c, g, h, b);\n }\n\n switch (a) {\n case \"input\":\n Eb(c, d);\n break;\n\n case \"textarea\":\n Mb(c, d);\n break;\n\n case \"select\":\n b = c._wrapperState.wasMultiple, c._wrapperState.wasMultiple = !!d.multiple, a = d.value, null != a ? Jb(c, !!d.multiple, a, !1) : b !== !!d.multiple && (null != d.defaultValue ? Jb(c, !!d.multiple, d.defaultValue, !0) : Jb(c, !!d.multiple, d.multiple ? [] : \"\", !1));\n }\n }\n }\n\n break;\n\n case 6:\n if (null === b.stateNode) throw Error(u(162));\n b.stateNode.nodeValue = b.memoizedProps;\n break;\n\n case 3:\n b = b.stateNode;\n b.hydrate && (b.hydrate = !1, Lc(b.containerInfo));\n break;\n\n case 12:\n break;\n\n case 13:\n c = b;\n null === b.memoizedState ? d = !1 : (d = !0, c = b.child, bj = cg());\n if (null !== c) a: for (a = c;;) {\n if (5 === a.tag) f = a.stateNode, d ? (f = f.style, \"function\" === typeof f.setProperty ? f.setProperty(\"display\", \"none\", \"important\") : f.display = \"none\") : (f = a.stateNode, e = a.memoizedProps.style, e = void 0 !== e && null !== e && e.hasOwnProperty(\"display\") ? e.display : null, f.style.display = Vd(\"display\", e));else if (6 === a.tag) a.stateNode.nodeValue = d ? \"\" : a.memoizedProps;else if (13 === a.tag && null !== a.memoizedState && null === a.memoizedState.dehydrated) {\n f = a.child.sibling;\n f[\"return\"] = a;\n a = f;\n continue;\n } else if (null !== a.child) {\n a.child[\"return\"] = a;\n a = a.child;\n continue;\n }\n if (a === c) break a;\n\n for (; null === a.sibling;) {\n if (null === a[\"return\"] || a[\"return\"] === c) break a;\n a = a[\"return\"];\n }\n\n a.sibling[\"return\"] = a[\"return\"];\n a = a.sibling;\n }\n cj(b);\n break;\n\n case 19:\n cj(b);\n break;\n\n case 17:\n break;\n\n case 20:\n break;\n\n case 21:\n break;\n\n default:\n throw Error(u(163));\n }\n}\n\nfunction cj(a) {\n var b = a.updateQueue;\n\n if (null !== b) {\n a.updateQueue = null;\n var c = a.stateNode;\n null === c && (c = a.stateNode = new Oi());\n b.forEach(function (b) {\n var d = dj.bind(null, a, b);\n c.has(b) || (c.add(b), b.then(d, d));\n });\n }\n}\n\nvar ej = \"function\" === typeof WeakMap ? WeakMap : Map;\n\nfunction fj(a, b, c) {\n c = Bg(c, null);\n c.tag = 3;\n c.payload = {\n element: null\n };\n var d = b.value;\n\n c.callback = function () {\n gj || (gj = !0, hj = d);\n Pi(a, b);\n };\n\n return c;\n}\n\nfunction ij(a, b, c) {\n c = Bg(c, null);\n c.tag = 3;\n var d = a.type.getDerivedStateFromError;\n\n if (\"function\" === typeof d) {\n var e = b.value;\n\n c.payload = function () {\n Pi(a, b);\n return d(e);\n };\n }\n\n var f = a.stateNode;\n null !== f && \"function\" === typeof f.componentDidCatch && (c.callback = function () {\n \"function\" !== typeof d && (null === jj ? jj = new Set([this]) : jj.add(this), Pi(a, b));\n var c = b.stack;\n this.componentDidCatch(b.value, {\n componentStack: null !== c ? c : \"\"\n });\n });\n return c;\n}\n\nvar kj = Math.ceil,\n lj = Ea.ReactCurrentDispatcher,\n mj = Ea.ReactCurrentOwner,\n S = 0,\n nj = 8,\n oj = 16,\n pj = 32,\n qj = 0,\n rj = 1,\n sj = 2,\n tj = 3,\n uj = 4,\n vj = 5,\n T = S,\n U = null,\n V = null,\n W = 0,\n X = qj,\n wj = null,\n xj = 1073741823,\n yj = 1073741823,\n zj = null,\n Aj = 0,\n Bj = !1,\n bj = 0,\n Cj = 500,\n Y = null,\n gj = !1,\n hj = null,\n jj = null,\n Dj = !1,\n Ej = null,\n Fj = 90,\n Gj = null,\n Hj = 0,\n Ij = null,\n Jj = 0;\n\nfunction Pg() {\n return (T & (oj | pj)) !== S ? 1073741821 - (cg() / 10 | 0) : 0 !== Jj ? Jj : Jj = 1073741821 - (cg() / 10 | 0);\n}\n\nfunction Qg(a, b, c) {\n b = b.mode;\n if (0 === (b & 2)) return 1073741823;\n var d = dg();\n if (0 === (b & 4)) return 99 === d ? 1073741823 : 1073741822;\n if ((T & oj) !== S) return W;\n if (null !== c) a = lg(a, c.timeoutMs | 0 || 5E3, 250);else switch (d) {\n case 99:\n a = 1073741823;\n break;\n\n case 98:\n a = lg(a, 150, 100);\n break;\n\n case 97:\n case 96:\n a = lg(a, 5E3, 250);\n break;\n\n case 95:\n a = 2;\n break;\n\n default:\n throw Error(u(326));\n }\n null !== U && a === W && --a;\n return a;\n}\n\nfunction Rg(a, b) {\n if (50 < Hj) throw Hj = 0, Ij = null, Error(u(185));\n a = Kj(a, b);\n\n if (null !== a) {\n var c = dg();\n 1073741823 === b ? (T & nj) !== S && (T & (oj | pj)) === S ? Lj(a) : (Z(a), T === S && jg()) : Z(a);\n (T & 4) === S || 98 !== c && 99 !== c || (null === Gj ? Gj = new Map([[a, b]]) : (c = Gj.get(a), (void 0 === c || c > b) && Gj.set(a, b)));\n }\n}\n\nfunction Kj(a, b) {\n a.expirationTime < b && (a.expirationTime = b);\n var c = a.alternate;\n null !== c && c.expirationTime < b && (c.expirationTime = b);\n var d = a[\"return\"],\n e = null;\n if (null === d && 3 === a.tag) e = a.stateNode;else for (; null !== d;) {\n c = d.alternate;\n d.childExpirationTime < b && (d.childExpirationTime = b);\n null !== c && c.childExpirationTime < b && (c.childExpirationTime = b);\n\n if (null === d[\"return\"] && 3 === d.tag) {\n e = d.stateNode;\n break;\n }\n\n d = d[\"return\"];\n }\n null !== e && (U === e && (Jg(b), X === uj && Mj(e, W)), Nj(e, b));\n return e;\n}\n\nfunction Oj(a) {\n var b = a.lastExpiredTime;\n if (0 !== b) return b;\n b = a.firstPendingTime;\n if (!Pj(a, b)) return b;\n b = a.lastPingedTime;\n a = a.nextKnownPendingLevel;\n return b > a ? b : a;\n}\n\nfunction Z(a) {\n if (0 !== a.lastExpiredTime) a.callbackExpirationTime = 1073741823, a.callbackPriority = 99, a.callbackNode = hg(Lj.bind(null, a));else {\n var b = Oj(a),\n c = a.callbackNode;\n if (0 === b) null !== c && (a.callbackNode = null, a.callbackExpirationTime = 0, a.callbackPriority = 90);else {\n var d = Pg();\n 1073741823 === b ? d = 99 : 1 === b || 2 === b ? d = 95 : (d = 10 * (1073741821 - b) - 10 * (1073741821 - d), d = 0 >= d ? 99 : 250 >= d ? 98 : 5250 >= d ? 97 : 95);\n\n if (null !== c) {\n var e = a.callbackPriority;\n if (a.callbackExpirationTime === b && e >= d) return;\n c !== Xf && Nf(c);\n }\n\n a.callbackExpirationTime = b;\n a.callbackPriority = d;\n b = 1073741823 === b ? hg(Lj.bind(null, a)) : gg(d, Qj.bind(null, a), {\n timeout: 10 * (1073741821 - b) - cg()\n });\n a.callbackNode = b;\n }\n }\n}\n\nfunction Qj(a, b) {\n Jj = 0;\n if (b) return b = Pg(), Rj(a, b), Z(a), null;\n var c = Oj(a);\n\n if (0 !== c) {\n b = a.callbackNode;\n if ((T & (oj | pj)) !== S) throw Error(u(327));\n Sj();\n a === U && c === W || Tj(a, c);\n\n if (null !== V) {\n var d = T;\n T |= oj;\n var e = Uj(a);\n\n do {\n try {\n Vj();\n break;\n } catch (h) {\n Wj(a, h);\n }\n } while (1);\n\n rg();\n T = d;\n lj.current = e;\n if (X === rj) throw b = wj, Tj(a, c), Mj(a, c), Z(a), b;\n if (null === V) switch (e = a.finishedWork = a.current.alternate, a.finishedExpirationTime = c, d = X, U = null, d) {\n case qj:\n case rj:\n throw Error(u(345));\n\n case sj:\n Rj(a, 2 < c ? 2 : c);\n break;\n\n case tj:\n Mj(a, c);\n d = a.lastSuspendedTime;\n c === d && (a.nextKnownPendingLevel = Xj(e));\n\n if (1073741823 === xj && (e = bj + Cj - cg(), 10 < e)) {\n if (Bj) {\n var f = a.lastPingedTime;\n\n if (0 === f || f >= c) {\n a.lastPingedTime = c;\n Tj(a, c);\n break;\n }\n }\n\n f = Oj(a);\n if (0 !== f && f !== c) break;\n\n if (0 !== d && d !== c) {\n a.lastPingedTime = d;\n break;\n }\n\n a.timeoutHandle = pe(Yj.bind(null, a), e);\n break;\n }\n\n Yj(a);\n break;\n\n case uj:\n Mj(a, c);\n d = a.lastSuspendedTime;\n c === d && (a.nextKnownPendingLevel = Xj(e));\n\n if (Bj && (e = a.lastPingedTime, 0 === e || e >= c)) {\n a.lastPingedTime = c;\n Tj(a, c);\n break;\n }\n\n e = Oj(a);\n if (0 !== e && e !== c) break;\n\n if (0 !== d && d !== c) {\n a.lastPingedTime = d;\n break;\n }\n\n 1073741823 !== yj ? d = 10 * (1073741821 - yj) - cg() : 1073741823 === xj ? d = 0 : (d = 10 * (1073741821 - xj) - 5E3, e = cg(), c = 10 * (1073741821 - c) - e, d = e - d, 0 > d && (d = 0), d = (120 > d ? 120 : 480 > d ? 480 : 1080 > d ? 1080 : 1920 > d ? 1920 : 3E3 > d ? 3E3 : 4320 > d ? 4320 : 1960 * kj(d / 1960)) - d, c < d && (d = c));\n\n if (10 < d) {\n a.timeoutHandle = pe(Yj.bind(null, a), d);\n break;\n }\n\n Yj(a);\n break;\n\n case vj:\n if (1073741823 !== xj && null !== zj) {\n f = xj;\n var g = zj;\n d = g.busyMinDurationMs | 0;\n 0 >= d ? d = 0 : (e = g.busyDelayMs | 0, f = cg() - (10 * (1073741821 - f) - (g.timeoutMs | 0 || 5E3)), d = f <= e ? 0 : e + d - f);\n\n if (10 < d) {\n Mj(a, c);\n a.timeoutHandle = pe(Yj.bind(null, a), d);\n break;\n }\n }\n\n Yj(a);\n break;\n\n default:\n throw Error(u(329));\n }\n Z(a);\n if (a.callbackNode === b) return Qj.bind(null, a);\n }\n }\n\n return null;\n}\n\nfunction Lj(a) {\n var b = a.lastExpiredTime;\n b = 0 !== b ? b : 1073741823;\n if (a.finishedExpirationTime === b) Yj(a);else {\n if ((T & (oj | pj)) !== S) throw Error(u(327));\n Sj();\n a === U && b === W || Tj(a, b);\n\n if (null !== V) {\n var c = T;\n T |= oj;\n var d = Uj(a);\n\n do {\n try {\n Zj();\n break;\n } catch (e) {\n Wj(a, e);\n }\n } while (1);\n\n rg();\n T = c;\n lj.current = d;\n if (X === rj) throw c = wj, Tj(a, b), Mj(a, b), Z(a), c;\n if (null !== V) throw Error(u(261));\n a.finishedWork = a.current.alternate;\n a.finishedExpirationTime = b;\n U = null;\n Yj(a);\n Z(a);\n }\n }\n return null;\n}\n\nfunction ak() {\n if (null !== Gj) {\n var a = Gj;\n Gj = null;\n a.forEach(function (a, c) {\n Rj(c, a);\n Z(c);\n });\n jg();\n }\n}\n\nfunction bk(a, b) {\n var c = T;\n T |= 1;\n\n try {\n return a(b);\n } finally {\n T = c, T === S && jg();\n }\n}\n\nfunction ck(a, b) {\n var c = T;\n T &= -2;\n T |= nj;\n\n try {\n return a(b);\n } finally {\n T = c, T === S && jg();\n }\n}\n\nfunction Tj(a, b) {\n a.finishedWork = null;\n a.finishedExpirationTime = 0;\n var c = a.timeoutHandle;\n -1 !== c && (a.timeoutHandle = -1, qe(c));\n if (null !== V) for (c = V[\"return\"]; null !== c;) {\n var d = c;\n\n switch (d.tag) {\n case 1:\n var e = d.type.childContextTypes;\n null !== e && void 0 !== e && Ff(d);\n break;\n\n case 3:\n nh(d);\n Gf(d);\n break;\n\n case 5:\n ph(d);\n break;\n\n case 4:\n nh(d);\n break;\n\n case 13:\n G(M, d);\n break;\n\n case 19:\n G(M, d);\n break;\n\n case 10:\n tg(d);\n }\n\n c = c[\"return\"];\n }\n U = a;\n V = ah(a.current, null, b);\n W = b;\n X = qj;\n wj = null;\n yj = xj = 1073741823;\n zj = null;\n Aj = 0;\n Bj = !1;\n}\n\nfunction Wj(a, b) {\n do {\n try {\n rg();\n Mh();\n if (null === V || null === V[\"return\"]) return X = rj, wj = b, null;\n\n a: {\n var c = a,\n d = V[\"return\"],\n e = V,\n f = b;\n b = W;\n e.effectTag |= 2048;\n e.firstEffect = e.lastEffect = null;\n\n if (null !== f && \"object\" === _typeof(f) && \"function\" === typeof f.then) {\n var g = f,\n h = 0 !== (M.current & 1),\n k = d;\n\n do {\n var l;\n\n if (l = 13 === k.tag) {\n var m = k.memoizedState;\n if (null !== m) l = null !== m.dehydrated ? !0 : !1;else {\n var C = k.memoizedProps;\n l = void 0 === C.fallback ? !1 : !0 !== C.unstable_avoidThisFallback ? !0 : h ? !1 : !0;\n }\n }\n\n if (l) {\n var y = k.updateQueue;\n\n if (null === y) {\n var H = new Set();\n H.add(g);\n k.updateQueue = H;\n } else y.add(g);\n\n if (0 === (k.mode & 2)) {\n k.effectTag |= 64;\n e.effectTag &= -2981;\n if (1 === e.tag) if (null === e.alternate) e.tag = 17;else {\n var z = Bg(1073741823, null);\n z.tag = 2;\n Dg(e, z);\n }\n e.expirationTime = 1073741823;\n break a;\n }\n\n f = void 0;\n e = b;\n var ta = c.pingCache;\n null === ta ? (ta = c.pingCache = new ej(), f = new Set(), ta.set(g, f)) : (f = ta.get(g), void 0 === f && (f = new Set(), ta.set(g, f)));\n\n if (!f.has(e)) {\n f.add(e);\n var r = dk.bind(null, c, g, e);\n g.then(r, r);\n }\n\n k.effectTag |= 4096;\n k.expirationTime = b;\n break a;\n }\n\n k = k[\"return\"];\n } while (null !== k);\n\n f = Error((Wa(e.type) || \"A React component\") + \" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\" + Xa(e));\n }\n\n X !== vj && (X = sj);\n f = Ni(f, e);\n k = d;\n\n do {\n switch (k.tag) {\n case 3:\n g = f;\n k.effectTag |= 4096;\n k.expirationTime = b;\n var x = fj(k, g, b);\n Eg(k, x);\n break a;\n\n case 1:\n g = f;\n var A = k.type,\n p = k.stateNode;\n\n if (0 === (k.effectTag & 64) && (\"function\" === typeof A.getDerivedStateFromError || null !== p && \"function\" === typeof p.componentDidCatch && (null === jj || !jj.has(p)))) {\n k.effectTag |= 4096;\n k.expirationTime = b;\n var t = ij(k, g, b);\n Eg(k, t);\n break a;\n }\n\n }\n\n k = k[\"return\"];\n } while (null !== k);\n }\n\n V = ek(V);\n } catch (v) {\n b = v;\n continue;\n }\n\n break;\n } while (1);\n}\n\nfunction Uj() {\n var a = lj.current;\n lj.current = Lh;\n return null === a ? Lh : a;\n}\n\nfunction Ig(a, b) {\n a < xj && 2 < a && (xj = a);\n null !== b && a < yj && 2 < a && (yj = a, zj = b);\n}\n\nfunction Jg(a) {\n a > Aj && (Aj = a);\n}\n\nfunction Zj() {\n for (; null !== V;) {\n V = fk(V);\n }\n}\n\nfunction Vj() {\n for (; null !== V && !Of();) {\n V = fk(V);\n }\n}\n\nfunction fk(a) {\n var b = gk(a.alternate, a, W);\n a.memoizedProps = a.pendingProps;\n null === b && (b = ek(a));\n mj.current = null;\n return b;\n}\n\nfunction ek(a) {\n V = a;\n\n do {\n var b = V.alternate;\n a = V[\"return\"];\n\n if (0 === (V.effectTag & 2048)) {\n a: {\n var c = b;\n b = V;\n var d = W;\n var e = b.pendingProps;\n\n switch (b.tag) {\n case 2:\n break;\n\n case 16:\n break;\n\n case 15:\n case 0:\n break;\n\n case 1:\n L(b.type) && Ff(b);\n break;\n\n case 3:\n nh(b);\n Gf(b);\n e = b.stateNode;\n e.pendingContext && (e.context = e.pendingContext, e.pendingContext = null);\n (null === c || null === c.child) && ki(b) && Ci(b);\n Ii(b);\n break;\n\n case 5:\n ph(b);\n d = lh(kh.current);\n var f = b.type;\n if (null !== c && null != b.stateNode) Ji(c, b, f, e, d), c.ref !== b.ref && (b.effectTag |= 128);else if (e) {\n var g = lh(ih.current);\n\n if (ki(b)) {\n e = b;\n var h = e.stateNode;\n c = e.type;\n var k = e.memoizedProps,\n l = d;\n h[ue] = e;\n h[ve] = k;\n f = void 0;\n d = h;\n\n switch (c) {\n case \"iframe\":\n case \"object\":\n case \"embed\":\n F(\"load\", d);\n break;\n\n case \"video\":\n case \"audio\":\n for (h = 0; h < cc.length; h++) {\n F(cc[h], d);\n }\n\n break;\n\n case \"source\":\n F(\"error\", d);\n break;\n\n case \"img\":\n case \"image\":\n case \"link\":\n F(\"error\", d);\n F(\"load\", d);\n break;\n\n case \"form\":\n F(\"reset\", d);\n F(\"submit\", d);\n break;\n\n case \"details\":\n F(\"toggle\", d);\n break;\n\n case \"input\":\n Bb(d, k);\n F(\"invalid\", d);\n $d(l, \"onChange\");\n break;\n\n case \"select\":\n d._wrapperState = {\n wasMultiple: !!k.multiple\n };\n F(\"invalid\", d);\n $d(l, \"onChange\");\n break;\n\n case \"textarea\":\n Lb(d, k), F(\"invalid\", d), $d(l, \"onChange\");\n }\n\n Yd(c, k);\n h = null;\n\n for (f in k) {\n k.hasOwnProperty(f) && (g = k[f], \"children\" === f ? \"string\" === typeof g ? d.textContent !== g && (h = [\"children\", g]) : \"number\" === typeof g && d.textContent !== \"\" + g && (h = [\"children\", \"\" + g]) : ia.hasOwnProperty(f) && null != g && $d(l, f));\n }\n\n switch (c) {\n case \"input\":\n yb(d);\n Gb(d, k, !0);\n break;\n\n case \"textarea\":\n yb(d);\n Nb(d, k);\n break;\n\n case \"select\":\n case \"option\":\n break;\n\n default:\n \"function\" === typeof k.onClick && (d.onclick = ae);\n }\n\n f = h;\n e.updateQueue = f;\n e = null !== f ? !0 : !1;\n e && Ci(b);\n } else {\n c = b;\n l = f;\n k = e;\n h = 9 === d.nodeType ? d : d.ownerDocument;\n g === Ob.html && (g = Pb(l));\n g === Ob.html ? \"script\" === l ? (k = h.createElement(\"div\"), k.innerHTML = \"<script>\\x3c/script>\", h = k.removeChild(k.firstChild)) : \"string\" === typeof k.is ? h = h.createElement(l, {\n is: k.is\n }) : (h = h.createElement(l), \"select\" === l && (l = h, k.multiple ? l.multiple = !0 : k.size && (l.size = k.size))) : h = h.createElementNS(g, l);\n k = h;\n k[ue] = c;\n k[ve] = e;\n Hi(k, b, !1, !1);\n b.stateNode = k;\n l = f;\n c = e;\n var m = d,\n C = Zd(l, c);\n\n switch (l) {\n case \"iframe\":\n case \"object\":\n case \"embed\":\n F(\"load\", k);\n d = c;\n break;\n\n case \"video\":\n case \"audio\":\n for (d = 0; d < cc.length; d++) {\n F(cc[d], k);\n }\n\n d = c;\n break;\n\n case \"source\":\n F(\"error\", k);\n d = c;\n break;\n\n case \"img\":\n case \"image\":\n case \"link\":\n F(\"error\", k);\n F(\"load\", k);\n d = c;\n break;\n\n case \"form\":\n F(\"reset\", k);\n F(\"submit\", k);\n d = c;\n break;\n\n case \"details\":\n F(\"toggle\", k);\n d = c;\n break;\n\n case \"input\":\n Bb(k, c);\n d = Ab(k, c);\n F(\"invalid\", k);\n $d(m, \"onChange\");\n break;\n\n case \"option\":\n d = Ib(k, c);\n break;\n\n case \"select\":\n k._wrapperState = {\n wasMultiple: !!c.multiple\n };\n d = n({}, c, {\n value: void 0\n });\n F(\"invalid\", k);\n $d(m, \"onChange\");\n break;\n\n case \"textarea\":\n Lb(k, c);\n d = Kb(k, c);\n F(\"invalid\", k);\n $d(m, \"onChange\");\n break;\n\n default:\n d = c;\n }\n\n Yd(l, d);\n h = void 0;\n g = l;\n var y = k,\n H = d;\n\n for (h in H) {\n if (H.hasOwnProperty(h)) {\n var z = H[h];\n \"style\" === h ? Wd(y, z) : \"dangerouslySetInnerHTML\" === h ? (z = z ? z.__html : void 0, null != z && Sb(y, z)) : \"children\" === h ? \"string\" === typeof z ? (\"textarea\" !== g || \"\" !== z) && Tb(y, z) : \"number\" === typeof z && Tb(y, \"\" + z) : \"suppressContentEditableWarning\" !== h && \"suppressHydrationWarning\" !== h && \"autoFocus\" !== h && (ia.hasOwnProperty(h) ? null != z && $d(m, h) : null != z && vb(y, h, z, C));\n }\n }\n\n switch (l) {\n case \"input\":\n yb(k);\n Gb(k, c, !1);\n break;\n\n case \"textarea\":\n yb(k);\n Nb(k, c);\n break;\n\n case \"option\":\n null != c.value && k.setAttribute(\"value\", \"\" + ub(c.value));\n break;\n\n case \"select\":\n d = k;\n d.multiple = !!c.multiple;\n k = c.value;\n null != k ? Jb(d, !!c.multiple, k, !1) : null != c.defaultValue && Jb(d, !!c.multiple, c.defaultValue, !0);\n break;\n\n default:\n \"function\" === typeof d.onClick && (k.onclick = ae);\n }\n\n (e = ne(f, e)) && Ci(b);\n }\n\n null !== b.ref && (b.effectTag |= 128);\n } else if (null === b.stateNode) throw Error(u(166));\n break;\n\n case 6:\n if (c && null != b.stateNode) Ki(c, b, c.memoizedProps, e);else {\n if (\"string\" !== typeof e && null === b.stateNode) throw Error(u(166));\n d = lh(kh.current);\n lh(ih.current);\n ki(b) ? (e = b, f = e.stateNode, d = e.memoizedProps, f[ue] = e, (e = f.nodeValue !== d) && Ci(b)) : (f = b, e = (9 === d.nodeType ? d : d.ownerDocument).createTextNode(e), e[ue] = f, b.stateNode = e);\n }\n break;\n\n case 11:\n break;\n\n case 13:\n G(M, b);\n e = b.memoizedState;\n\n if (0 !== (b.effectTag & 64)) {\n b.expirationTime = d;\n break a;\n }\n\n e = null !== e;\n f = !1;\n null === c ? void 0 !== b.memoizedProps.fallback && ki(b) : (d = c.memoizedState, f = null !== d, e || null === d || (d = c.child.sibling, null !== d && (k = b.firstEffect, null !== k ? (b.firstEffect = d, d.nextEffect = k) : (b.firstEffect = b.lastEffect = d, d.nextEffect = null), d.effectTag = 8)));\n if (e && !f && 0 !== (b.mode & 2)) if (null === c && !0 !== b.memoizedProps.unstable_avoidThisFallback || 0 !== (M.current & 1)) X === qj && (X = tj);else {\n if (X === qj || X === tj) X = uj;\n 0 !== Aj && null !== U && (Mj(U, W), Nj(U, Aj));\n }\n if (e || f) b.effectTag |= 4;\n break;\n\n case 7:\n break;\n\n case 8:\n break;\n\n case 12:\n break;\n\n case 4:\n nh(b);\n Ii(b);\n break;\n\n case 10:\n tg(b);\n break;\n\n case 9:\n break;\n\n case 14:\n break;\n\n case 17:\n L(b.type) && Ff(b);\n break;\n\n case 19:\n G(M, b);\n e = b.memoizedState;\n if (null === e) break;\n f = 0 !== (b.effectTag & 64);\n k = e.rendering;\n\n if (null === k) {\n if (f) Li(e, !1);else {\n if (X !== qj || null !== c && 0 !== (c.effectTag & 64)) for (c = b.child; null !== c;) {\n k = qh(c);\n\n if (null !== k) {\n b.effectTag |= 64;\n Li(e, !1);\n f = k.updateQueue;\n null !== f && (b.updateQueue = f, b.effectTag |= 4);\n null === e.lastEffect && (b.firstEffect = null);\n b.lastEffect = e.lastEffect;\n e = d;\n\n for (f = b.child; null !== f;) {\n d = f, c = e, d.effectTag &= 2, d.nextEffect = null, d.firstEffect = null, d.lastEffect = null, k = d.alternate, null === k ? (d.childExpirationTime = 0, d.expirationTime = c, d.child = null, d.memoizedProps = null, d.memoizedState = null, d.updateQueue = null, d.dependencies = null) : (d.childExpirationTime = k.childExpirationTime, d.expirationTime = k.expirationTime, d.child = k.child, d.memoizedProps = k.memoizedProps, d.memoizedState = k.memoizedState, d.updateQueue = k.updateQueue, c = k.dependencies, d.dependencies = null === c ? null : {\n expirationTime: c.expirationTime,\n firstContext: c.firstContext,\n responders: c.responders\n }), f = f.sibling;\n }\n\n I(M, M.current & 1 | 2, b);\n b = b.child;\n break a;\n }\n\n c = c.sibling;\n }\n }\n } else {\n if (!f) if (c = qh(k), null !== c) {\n if (b.effectTag |= 64, f = !0, d = c.updateQueue, null !== d && (b.updateQueue = d, b.effectTag |= 4), Li(e, !0), null === e.tail && \"hidden\" === e.tailMode && !k.alternate) {\n b = b.lastEffect = e.lastEffect;\n null !== b && (b.nextEffect = null);\n break;\n }\n } else cg() > e.tailExpiration && 1 < d && (b.effectTag |= 64, f = !0, Li(e, !1), b.expirationTime = b.childExpirationTime = d - 1);\n e.isBackwards ? (k.sibling = b.child, b.child = k) : (d = e.last, null !== d ? d.sibling = k : b.child = k, e.last = k);\n }\n\n if (null !== e.tail) {\n 0 === e.tailExpiration && (e.tailExpiration = cg() + 500);\n d = e.tail;\n e.rendering = d;\n e.tail = d.sibling;\n e.lastEffect = b.lastEffect;\n d.sibling = null;\n e = M.current;\n e = f ? e & 1 | 2 : e & 1;\n I(M, e, b);\n b = d;\n break a;\n }\n\n break;\n\n case 20:\n break;\n\n case 21:\n break;\n\n default:\n throw Error(u(156, b.tag));\n }\n\n b = null;\n }\n\n e = V;\n\n if (1 === W || 1 !== e.childExpirationTime) {\n f = 0;\n\n for (d = e.child; null !== d;) {\n c = d.expirationTime, k = d.childExpirationTime, c > f && (f = c), k > f && (f = k), d = d.sibling;\n }\n\n e.childExpirationTime = f;\n }\n\n if (null !== b) return b;\n null !== a && 0 === (a.effectTag & 2048) && (null === a.firstEffect && (a.firstEffect = V.firstEffect), null !== V.lastEffect && (null !== a.lastEffect && (a.lastEffect.nextEffect = V.firstEffect), a.lastEffect = V.lastEffect), 1 < V.effectTag && (null !== a.lastEffect ? a.lastEffect.nextEffect = V : a.firstEffect = V, a.lastEffect = V));\n } else {\n b = Mi(V, W);\n if (null !== b) return b.effectTag &= 2047, b;\n null !== a && (a.firstEffect = a.lastEffect = null, a.effectTag |= 2048);\n }\n\n b = V.sibling;\n if (null !== b) return b;\n V = a;\n } while (null !== V);\n\n X === qj && (X = vj);\n return null;\n}\n\nfunction Xj(a) {\n var b = a.expirationTime;\n a = a.childExpirationTime;\n return b > a ? b : a;\n}\n\nfunction Yj(a) {\n var b = dg();\n fg(99, ik.bind(null, a, b));\n return null;\n}\n\nfunction ik(a, b) {\n do {\n Sj();\n } while (null !== Ej);\n\n if ((T & (oj | pj)) !== S) throw Error(u(327));\n var c = a.finishedWork,\n d = a.finishedExpirationTime;\n if (null === c) return null;\n a.finishedWork = null;\n a.finishedExpirationTime = 0;\n if (c === a.current) throw Error(u(177));\n a.callbackNode = null;\n a.callbackExpirationTime = 0;\n a.callbackPriority = 90;\n a.nextKnownPendingLevel = 0;\n var e = Xj(c);\n a.firstPendingTime = e;\n d <= a.lastSuspendedTime ? a.firstSuspendedTime = a.lastSuspendedTime = a.nextKnownPendingLevel = 0 : d <= a.firstSuspendedTime && (a.firstSuspendedTime = d - 1);\n d <= a.lastPingedTime && (a.lastPingedTime = 0);\n d <= a.lastExpiredTime && (a.lastExpiredTime = 0);\n a === U && (V = U = null, W = 0);\n 1 < c.effectTag ? null !== c.lastEffect ? (c.lastEffect.nextEffect = c, e = c.firstEffect) : e = c : e = c.firstEffect;\n\n if (null !== e) {\n var f = T;\n T |= pj;\n mj.current = null;\n le = Ld;\n var g = fe();\n\n if (ge(g)) {\n if (\"selectionStart\" in g) var h = {\n start: g.selectionStart,\n end: g.selectionEnd\n };else a: {\n h = (h = g.ownerDocument) && h.defaultView || window;\n var k = h.getSelection && h.getSelection();\n\n if (k && 0 !== k.rangeCount) {\n h = k.anchorNode;\n var l = k.anchorOffset,\n m = k.focusNode;\n k = k.focusOffset;\n\n try {\n h.nodeType, m.nodeType;\n } catch (Db) {\n h = null;\n break a;\n }\n\n var C = 0,\n y = -1,\n H = -1,\n z = 0,\n ta = 0,\n r = g,\n x = null;\n\n b: for (;;) {\n for (var A;;) {\n r !== h || 0 !== l && 3 !== r.nodeType || (y = C + l);\n r !== m || 0 !== k && 3 !== r.nodeType || (H = C + k);\n 3 === r.nodeType && (C += r.nodeValue.length);\n if (null === (A = r.firstChild)) break;\n x = r;\n r = A;\n }\n\n for (;;) {\n if (r === g) break b;\n x === h && ++z === l && (y = C);\n x === m && ++ta === k && (H = C);\n if (null !== (A = r.nextSibling)) break;\n r = x;\n x = r.parentNode;\n }\n\n r = A;\n }\n\n h = -1 === y || -1 === H ? null : {\n start: y,\n end: H\n };\n } else h = null;\n }\n h = h || {\n start: 0,\n end: 0\n };\n } else h = null;\n\n me = {\n focusedElem: g,\n selectionRange: h\n };\n Ld = !1;\n Y = e;\n\n do {\n try {\n jk();\n } catch (Db) {\n if (null === Y) throw Error(u(330));\n Ri(Y, Db);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n Y = e;\n\n do {\n try {\n for (g = a, h = b; null !== Y;) {\n var p = Y.effectTag;\n p & 16 && Tb(Y.stateNode, \"\");\n\n if (p & 128) {\n var t = Y.alternate;\n\n if (null !== t) {\n var v = t.ref;\n null !== v && (\"function\" === typeof v ? v(null) : v.current = null);\n }\n }\n\n switch (p & 1038) {\n case 2:\n $i(Y);\n Y.effectTag &= -3;\n break;\n\n case 6:\n $i(Y);\n Y.effectTag &= -3;\n aj(Y.alternate, Y);\n break;\n\n case 1024:\n Y.effectTag &= -1025;\n break;\n\n case 1028:\n Y.effectTag &= -1025;\n aj(Y.alternate, Y);\n break;\n\n case 4:\n aj(Y.alternate, Y);\n break;\n\n case 8:\n l = Y, Xi(g, l, h), Yi(l);\n }\n\n Y = Y.nextEffect;\n }\n } catch (Db) {\n if (null === Y) throw Error(u(330));\n Ri(Y, Db);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n v = me;\n t = fe();\n p = v.focusedElem;\n h = v.selectionRange;\n\n if (t !== p && p && p.ownerDocument && ee(p.ownerDocument.documentElement, p)) {\n null !== h && ge(p) && (t = h.start, v = h.end, void 0 === v && (v = t), \"selectionStart\" in p ? (p.selectionStart = t, p.selectionEnd = Math.min(v, p.value.length)) : (v = (t = p.ownerDocument || document) && t.defaultView || window, v.getSelection && (v = v.getSelection(), l = p.textContent.length, g = Math.min(h.start, l), h = void 0 === h.end ? g : Math.min(h.end, l), !v.extend && g > h && (l = h, h = g, g = l), l = de(p, g), m = de(p, h), l && m && (1 !== v.rangeCount || v.anchorNode !== l.node || v.anchorOffset !== l.offset || v.focusNode !== m.node || v.focusOffset !== m.offset) && (t = t.createRange(), t.setStart(l.node, l.offset), v.removeAllRanges(), g > h ? (v.addRange(t), v.extend(m.node, m.offset)) : (t.setEnd(m.node, m.offset), v.addRange(t))))));\n t = [];\n\n for (v = p; v = v.parentNode;) {\n 1 === v.nodeType && t.push({\n element: v,\n left: v.scrollLeft,\n top: v.scrollTop\n });\n }\n\n \"function\" === typeof p.focus && p.focus();\n\n for (p = 0; p < t.length; p++) {\n v = t[p], v.element.scrollLeft = v.left, v.element.scrollTop = v.top;\n }\n }\n\n me = null;\n Ld = !!le;\n le = null;\n a.current = c;\n Y = e;\n\n do {\n try {\n for (p = d; null !== Y;) {\n var Dh = Y.effectTag;\n\n if (Dh & 36) {\n var dc = Y.alternate;\n t = Y;\n v = p;\n\n switch (t.tag) {\n case 0:\n case 11:\n case 15:\n Ui(16, 32, t);\n break;\n\n case 1:\n var fd = t.stateNode;\n if (t.effectTag & 4) if (null === dc) fd.componentDidMount();else {\n var hk = t.elementType === t.type ? dc.memoizedProps : mg(t.type, dc.memoizedProps);\n fd.componentDidUpdate(hk, dc.memoizedState, fd.__reactInternalSnapshotBeforeUpdate);\n }\n var Eh = t.updateQueue;\n null !== Eh && Kg(t, Eh, fd, v);\n break;\n\n case 3:\n var Fh = t.updateQueue;\n\n if (null !== Fh) {\n g = null;\n if (null !== t.child) switch (t.child.tag) {\n case 5:\n g = t.child.stateNode;\n break;\n\n case 1:\n g = t.child.stateNode;\n }\n Kg(t, Fh, g, v);\n }\n\n break;\n\n case 5:\n var xk = t.stateNode;\n null === dc && t.effectTag & 4 && ne(t.type, t.memoizedProps) && xk.focus();\n break;\n\n case 6:\n break;\n\n case 4:\n break;\n\n case 12:\n break;\n\n case 13:\n if (null === t.memoizedState) {\n var Di = t.alternate;\n\n if (null !== Di) {\n var Ei = Di.memoizedState;\n\n if (null !== Ei) {\n var Fi = Ei.dehydrated;\n null !== Fi && Lc(Fi);\n }\n }\n }\n\n break;\n\n case 19:\n case 17:\n case 20:\n case 21:\n break;\n\n default:\n throw Error(u(163));\n }\n }\n\n if (Dh & 128) {\n t = void 0;\n var xd = Y.ref;\n\n if (null !== xd) {\n var Gi = Y.stateNode;\n\n switch (Y.tag) {\n case 5:\n t = Gi;\n break;\n\n default:\n t = Gi;\n }\n\n \"function\" === typeof xd ? xd(t) : xd.current = t;\n }\n }\n\n Y = Y.nextEffect;\n }\n } catch (Db) {\n if (null === Y) throw Error(u(330));\n Ri(Y, Db);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n Y = null;\n Yf();\n T = f;\n } else a.current = c;\n\n if (Dj) Dj = !1, Ej = a, Fj = b;else for (Y = e; null !== Y;) {\n b = Y.nextEffect, Y.nextEffect = null, Y = b;\n }\n b = a.firstPendingTime;\n 0 === b && (jj = null);\n 1073741823 === b ? a === Ij ? Hj++ : (Hj = 0, Ij = a) : Hj = 0;\n \"function\" === typeof kk && kk(c.stateNode, d);\n Z(a);\n if (gj) throw gj = !1, a = hj, hj = null, a;\n if ((T & nj) !== S) return null;\n jg();\n return null;\n}\n\nfunction jk() {\n for (; null !== Y;) {\n var a = Y.effectTag;\n 0 !== (a & 256) && Ti(Y.alternate, Y);\n 0 === (a & 512) || Dj || (Dj = !0, gg(97, function () {\n Sj();\n return null;\n }));\n Y = Y.nextEffect;\n }\n}\n\nfunction Sj() {\n if (90 !== Fj) {\n var a = 97 < Fj ? 97 : Fj;\n Fj = 90;\n return fg(a, lk);\n }\n}\n\nfunction lk() {\n if (null === Ej) return !1;\n var a = Ej;\n Ej = null;\n if ((T & (oj | pj)) !== S) throw Error(u(331));\n var b = T;\n T |= pj;\n\n for (a = a.current.firstEffect; null !== a;) {\n try {\n var c = a;\n if (0 !== (c.effectTag & 512)) switch (c.tag) {\n case 0:\n case 11:\n case 15:\n Ui(128, 0, c), Ui(0, 64, c);\n }\n } catch (d) {\n if (null === a) throw Error(u(330));\n Ri(a, d);\n }\n\n c = a.nextEffect;\n a.nextEffect = null;\n a = c;\n }\n\n T = b;\n jg();\n return !0;\n}\n\nfunction mk(a, b, c) {\n b = Ni(c, b);\n b = fj(a, b, 1073741823);\n Dg(a, b);\n a = Kj(a, 1073741823);\n null !== a && Z(a);\n}\n\nfunction Ri(a, b) {\n if (3 === a.tag) mk(a, a, b);else for (var c = a[\"return\"]; null !== c;) {\n if (3 === c.tag) {\n mk(c, a, b);\n break;\n } else if (1 === c.tag) {\n var d = c.stateNode;\n\n if (\"function\" === typeof c.type.getDerivedStateFromError || \"function\" === typeof d.componentDidCatch && (null === jj || !jj.has(d))) {\n a = Ni(b, a);\n a = ij(c, a, 1073741823);\n Dg(c, a);\n c = Kj(c, 1073741823);\n null !== c && Z(c);\n break;\n }\n }\n\n c = c[\"return\"];\n }\n}\n\nfunction dk(a, b, c) {\n var d = a.pingCache;\n null !== d && d[\"delete\"](b);\n U === a && W === c ? X === uj || X === tj && 1073741823 === xj && cg() - bj < Cj ? Tj(a, W) : Bj = !0 : Pj(a, c) && (b = a.lastPingedTime, 0 !== b && b < c || (a.lastPingedTime = c, a.finishedExpirationTime === c && (a.finishedExpirationTime = 0, a.finishedWork = null), Z(a)));\n}\n\nfunction dj(a, b) {\n var c = a.stateNode;\n null !== c && c[\"delete\"](b);\n b = 0;\n 0 === b && (b = Pg(), b = Qg(b, a, null));\n a = Kj(a, b);\n null !== a && Z(a);\n}\n\nvar gk;\n\ngk = function gk(a, b, c) {\n var d = b.expirationTime;\n\n if (null !== a) {\n var e = b.pendingProps;\n if (a.memoizedProps !== e || K.current) wg = !0;else {\n if (d < c) {\n wg = !1;\n\n switch (b.tag) {\n case 3:\n wi(b);\n li();\n break;\n\n case 5:\n oh(b);\n if (b.mode & 4 && 1 !== c && e.hidden) return b.expirationTime = b.childExpirationTime = 1, null;\n break;\n\n case 1:\n L(b.type) && Jf(b);\n break;\n\n case 4:\n mh(b, b.stateNode.containerInfo);\n break;\n\n case 10:\n sg(b, b.memoizedProps.value);\n break;\n\n case 13:\n if (null !== b.memoizedState) {\n d = b.child.childExpirationTime;\n if (0 !== d && d >= c) return yi(a, b, c);\n I(M, M.current & 1, b);\n b = oi(a, b, c);\n return null !== b ? b.sibling : null;\n }\n\n I(M, M.current & 1, b);\n break;\n\n case 19:\n d = b.childExpirationTime >= c;\n\n if (0 !== (a.effectTag & 64)) {\n if (d) return Bi(a, b, c);\n b.effectTag |= 64;\n }\n\n e = b.memoizedState;\n null !== e && (e.rendering = null, e.tail = null);\n I(M, M.current, b);\n if (!d) return null;\n }\n\n return oi(a, b, c);\n }\n\n wg = !1;\n }\n } else wg = !1;\n\n b.expirationTime = 0;\n\n switch (b.tag) {\n case 2:\n d = b.type;\n null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2);\n a = b.pendingProps;\n e = Ef(b, J.current);\n vg(b, c);\n e = Ih(null, b, d, a, e, c);\n b.effectTag |= 1;\n\n if (\"object\" === _typeof(e) && null !== e && \"function\" === typeof e.render && void 0 === e.$$typeof) {\n b.tag = 1;\n Mh();\n\n if (L(d)) {\n var f = !0;\n Jf(b);\n } else f = !1;\n\n b.memoizedState = null !== e.state && void 0 !== e.state ? e.state : null;\n var g = d.getDerivedStateFromProps;\n \"function\" === typeof g && Og(b, d, g, a);\n e.updater = Sg;\n b.stateNode = e;\n e._reactInternalFiber = b;\n Wg(b, d, a, c);\n b = vi(null, b, d, !0, f, c);\n } else b.tag = 0, R(null, b, e, c), b = b.child;\n\n return b;\n\n case 16:\n e = b.elementType;\n null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2);\n a = b.pendingProps;\n Va(e);\n if (1 !== e._status) throw e._result;\n e = e._result;\n b.type = e;\n f = b.tag = nk(e);\n a = mg(e, a);\n\n switch (f) {\n case 0:\n b = si(null, b, e, a, c);\n break;\n\n case 1:\n b = ui(null, b, e, a, c);\n break;\n\n case 11:\n b = ni(null, b, e, a, c);\n break;\n\n case 14:\n b = pi(null, b, e, mg(e.type, a), d, c);\n break;\n\n default:\n throw Error(u(306, e, \"\"));\n }\n\n return b;\n\n case 0:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mg(d, e), si(a, b, d, e, c);\n\n case 1:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mg(d, e), ui(a, b, d, e, c);\n\n case 3:\n wi(b);\n d = b.updateQueue;\n if (null === d) throw Error(u(282));\n e = b.memoizedState;\n e = null !== e ? e.element : null;\n Hg(b, d, b.pendingProps, null, c);\n d = b.memoizedState.element;\n if (d === e) li(), b = oi(a, b, c);else {\n if (e = b.stateNode.hydrate) di = re(b.stateNode.containerInfo.firstChild), ci = b, e = ei = !0;\n if (e) for (c = gh(b, null, d, c), b.child = c; c;) {\n c.effectTag = c.effectTag & -3 | 1024, c = c.sibling;\n } else R(a, b, d, c), li();\n b = b.child;\n }\n return b;\n\n case 5:\n return oh(b), null === a && ii(b), d = b.type, e = b.pendingProps, f = null !== a ? a.memoizedProps : null, g = e.children, oe(d, e) ? g = null : null !== f && oe(d, f) && (b.effectTag |= 16), ti(a, b), b.mode & 4 && 1 !== c && e.hidden ? (b.expirationTime = b.childExpirationTime = 1, b = null) : (R(a, b, g, c), b = b.child), b;\n\n case 6:\n return null === a && ii(b), null;\n\n case 13:\n return yi(a, b, c);\n\n case 4:\n return mh(b, b.stateNode.containerInfo), d = b.pendingProps, null === a ? b.child = fh(b, null, d, c) : R(a, b, d, c), b.child;\n\n case 11:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mg(d, e), ni(a, b, d, e, c);\n\n case 7:\n return R(a, b, b.pendingProps, c), b.child;\n\n case 8:\n return R(a, b, b.pendingProps.children, c), b.child;\n\n case 12:\n return R(a, b, b.pendingProps.children, c), b.child;\n\n case 10:\n a: {\n d = b.type._context;\n e = b.pendingProps;\n g = b.memoizedProps;\n f = e.value;\n sg(b, f);\n\n if (null !== g) {\n var h = g.value;\n f = of(h, f) ? 0 : (\"function\" === typeof d._calculateChangedBits ? d._calculateChangedBits(h, f) : 1073741823) | 0;\n\n if (0 === f) {\n if (g.children === e.children && !K.current) {\n b = oi(a, b, c);\n break a;\n }\n } else for (h = b.child, null !== h && (h[\"return\"] = b); null !== h;) {\n var k = h.dependencies;\n\n if (null !== k) {\n g = h.child;\n\n for (var l = k.firstContext; null !== l;) {\n if (l.context === d && 0 !== (l.observedBits & f)) {\n 1 === h.tag && (l = Bg(c, null), l.tag = 2, Dg(h, l));\n h.expirationTime < c && (h.expirationTime = c);\n l = h.alternate;\n null !== l && l.expirationTime < c && (l.expirationTime = c);\n ug(h[\"return\"], c);\n k.expirationTime < c && (k.expirationTime = c);\n break;\n }\n\n l = l.next;\n }\n } else g = 10 === h.tag ? h.type === b.type ? null : h.child : h.child;\n\n if (null !== g) g[\"return\"] = h;else for (g = h; null !== g;) {\n if (g === b) {\n g = null;\n break;\n }\n\n h = g.sibling;\n\n if (null !== h) {\n h[\"return\"] = g[\"return\"];\n g = h;\n break;\n }\n\n g = g[\"return\"];\n }\n h = g;\n }\n }\n\n R(a, b, e.children, c);\n b = b.child;\n }\n\n return b;\n\n case 9:\n return e = b.type, f = b.pendingProps, d = f.children, vg(b, c), e = xg(e, f.unstable_observedBits), d = d(e), b.effectTag |= 1, R(a, b, d, c), b.child;\n\n case 14:\n return e = b.type, f = mg(e, b.pendingProps), f = mg(e.type, f), pi(a, b, e, f, d, c);\n\n case 15:\n return ri(a, b, b.type, b.pendingProps, d, c);\n\n case 17:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mg(d, e), null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2), b.tag = 1, L(d) ? (a = !0, Jf(b)) : a = !1, vg(b, c), Ug(b, d, e, c), Wg(b, d, e, c), vi(null, b, d, !0, a, c);\n\n case 19:\n return Bi(a, b, c);\n }\n\n throw Error(u(156, b.tag));\n};\n\nvar kk = null,\n Wi = null;\n\nfunction ok(a) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var b = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (b.isDisabled || !b.supportsFiber) return !0;\n\n try {\n var c = b.inject(a);\n\n kk = function kk(a) {\n try {\n b.onCommitFiberRoot(c, a, void 0, 64 === (a.current.effectTag & 64));\n } catch (e) {}\n };\n\n Wi = function Wi(a) {\n try {\n b.onCommitFiberUnmount(c, a);\n } catch (e) {}\n };\n } catch (d) {}\n\n return !0;\n}\n\nfunction pk(a, b, c, d) {\n this.tag = a;\n this.key = c;\n this.sibling = this.child = this[\"return\"] = this.stateNode = this.type = this.elementType = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = b;\n this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null;\n this.mode = d;\n this.effectTag = 0;\n this.lastEffect = this.firstEffect = this.nextEffect = null;\n this.childExpirationTime = this.expirationTime = 0;\n this.alternate = null;\n}\n\nfunction gi(a, b, c, d) {\n return new pk(a, b, c, d);\n}\n\nfunction qi(a) {\n a = a.prototype;\n return !(!a || !a.isReactComponent);\n}\n\nfunction nk(a) {\n if (\"function\" === typeof a) return qi(a) ? 1 : 0;\n\n if (void 0 !== a && null !== a) {\n a = a.$$typeof;\n if (a === Oa) return 11;\n if (a === Ra) return 14;\n }\n\n return 2;\n}\n\nfunction ah(a, b) {\n var c = a.alternate;\n null === c ? (c = gi(a.tag, b, a.key, a.mode), c.elementType = a.elementType, c.type = a.type, c.stateNode = a.stateNode, c.alternate = a, a.alternate = c) : (c.pendingProps = b, c.effectTag = 0, c.nextEffect = null, c.firstEffect = null, c.lastEffect = null);\n c.childExpirationTime = a.childExpirationTime;\n c.expirationTime = a.expirationTime;\n c.child = a.child;\n c.memoizedProps = a.memoizedProps;\n c.memoizedState = a.memoizedState;\n c.updateQueue = a.updateQueue;\n b = a.dependencies;\n c.dependencies = null === b ? null : {\n expirationTime: b.expirationTime,\n firstContext: b.firstContext,\n responders: b.responders\n };\n c.sibling = a.sibling;\n c.index = a.index;\n c.ref = a.ref;\n return c;\n}\n\nfunction ch(a, b, c, d, e, f) {\n var g = 2;\n d = a;\n if (\"function\" === typeof a) qi(a) && (g = 1);else if (\"string\" === typeof a) g = 5;else a: switch (a) {\n case Ia:\n return eh(c.children, e, f, b);\n\n case Na:\n g = 8;\n e |= 7;\n break;\n\n case Ja:\n g = 8;\n e |= 1;\n break;\n\n case Ka:\n return a = gi(12, c, b, e | 8), a.elementType = Ka, a.type = Ka, a.expirationTime = f, a;\n\n case Pa:\n return a = gi(13, c, b, e), a.type = Pa, a.elementType = Pa, a.expirationTime = f, a;\n\n case Qa:\n return a = gi(19, c, b, e), a.elementType = Qa, a.expirationTime = f, a;\n\n default:\n if (\"object\" === _typeof(a) && null !== a) switch (a.$$typeof) {\n case La:\n g = 10;\n break a;\n\n case Ma:\n g = 9;\n break a;\n\n case Oa:\n g = 11;\n break a;\n\n case Ra:\n g = 14;\n break a;\n\n case Sa:\n g = 16;\n d = null;\n break a;\n }\n throw Error(u(130, null == a ? a : _typeof(a), \"\"));\n }\n b = gi(g, c, b, e);\n b.elementType = a;\n b.type = d;\n b.expirationTime = f;\n return b;\n}\n\nfunction eh(a, b, c, d) {\n a = gi(7, a, d, b);\n a.expirationTime = c;\n return a;\n}\n\nfunction bh(a, b, c) {\n a = gi(6, a, null, b);\n a.expirationTime = c;\n return a;\n}\n\nfunction dh(a, b, c) {\n b = gi(4, null !== a.children ? a.children : [], a.key, b);\n b.expirationTime = c;\n b.stateNode = {\n containerInfo: a.containerInfo,\n pendingChildren: null,\n implementation: a.implementation\n };\n return b;\n}\n\nfunction qk(a, b, c) {\n this.tag = b;\n this.current = null;\n this.containerInfo = a;\n this.pingCache = this.pendingChildren = null;\n this.finishedExpirationTime = 0;\n this.finishedWork = null;\n this.timeoutHandle = -1;\n this.pendingContext = this.context = null;\n this.hydrate = c;\n this.callbackNode = null;\n this.callbackPriority = 90;\n this.lastExpiredTime = this.lastPingedTime = this.nextKnownPendingLevel = this.lastSuspendedTime = this.firstSuspendedTime = this.firstPendingTime = 0;\n}\n\nfunction Pj(a, b) {\n var c = a.firstSuspendedTime;\n a = a.lastSuspendedTime;\n return 0 !== c && c >= b && a <= b;\n}\n\nfunction Mj(a, b) {\n var c = a.firstSuspendedTime,\n d = a.lastSuspendedTime;\n c < b && (a.firstSuspendedTime = b);\n if (d > b || 0 === c) a.lastSuspendedTime = b;\n b <= a.lastPingedTime && (a.lastPingedTime = 0);\n b <= a.lastExpiredTime && (a.lastExpiredTime = 0);\n}\n\nfunction Nj(a, b) {\n b > a.firstPendingTime && (a.firstPendingTime = b);\n var c = a.firstSuspendedTime;\n 0 !== c && (b >= c ? a.firstSuspendedTime = a.lastSuspendedTime = a.nextKnownPendingLevel = 0 : b >= a.lastSuspendedTime && (a.lastSuspendedTime = b + 1), b > a.nextKnownPendingLevel && (a.nextKnownPendingLevel = b));\n}\n\nfunction Rj(a, b) {\n var c = a.lastExpiredTime;\n if (0 === c || c > b) a.lastExpiredTime = b;\n}\n\nfunction rk(a, b, c, d) {\n var e = b.current,\n f = Pg(),\n g = Mg.suspense;\n f = Qg(f, e, g);\n\n a: if (c) {\n c = c._reactInternalFiber;\n\n b: {\n if (ec(c) !== c || 1 !== c.tag) throw Error(u(170));\n var h = c;\n\n do {\n switch (h.tag) {\n case 3:\n h = h.stateNode.context;\n break b;\n\n case 1:\n if (L(h.type)) {\n h = h.stateNode.__reactInternalMemoizedMergedChildContext;\n break b;\n }\n\n }\n\n h = h[\"return\"];\n } while (null !== h);\n\n throw Error(u(171));\n }\n\n if (1 === c.tag) {\n var k = c.type;\n\n if (L(k)) {\n c = If(c, k, h);\n break a;\n }\n }\n\n c = h;\n } else c = Cf;\n\n null === b.context ? b.context = c : b.pendingContext = c;\n b = Bg(f, g);\n b.payload = {\n element: a\n };\n d = void 0 === d ? null : d;\n null !== d && (b.callback = d);\n Dg(e, b);\n Rg(e, f);\n return f;\n}\n\nfunction sk(a) {\n a = a.current;\n if (!a.child) return null;\n\n switch (a.child.tag) {\n case 5:\n return a.child.stateNode;\n\n default:\n return a.child.stateNode;\n }\n}\n\nfunction tk(a, b) {\n a = a.memoizedState;\n null !== a && null !== a.dehydrated && a.retryTime < b && (a.retryTime = b);\n}\n\nfunction uk(a, b) {\n tk(a, b);\n (a = a.alternate) && tk(a, b);\n}\n\nfunction vk(a, b, c) {\n c = null != c && !0 === c.hydrate;\n var d = new qk(a, b, c),\n e = gi(3, null, null, 2 === b ? 7 : 1 === b ? 3 : 0);\n d.current = e;\n e.stateNode = d;\n a[we] = d.current;\n c && 0 !== b && wc(9 === a.nodeType ? a : a.ownerDocument);\n this._internalRoot = d;\n}\n\nvk.prototype.render = function (a, b) {\n rk(a, this._internalRoot, null, void 0 === b ? null : b);\n};\n\nvk.prototype.unmount = function (a) {\n var b = this._internalRoot,\n c = void 0 === a ? null : a,\n d = b.containerInfo;\n rk(null, b, null, function () {\n d[we] = null;\n null !== c && c();\n });\n};\n\nfunction wk(a) {\n return !(!a || 1 !== a.nodeType && 9 !== a.nodeType && 11 !== a.nodeType && (8 !== a.nodeType || \" react-mount-point-unstable \" !== a.nodeValue));\n}\n\nfunction yk(a, b) {\n b || (b = a ? 9 === a.nodeType ? a.documentElement : a.firstChild : null, b = !(!b || 1 !== b.nodeType || !b.hasAttribute(\"data-reactroot\")));\n if (!b) for (var c; c = a.lastChild;) {\n a.removeChild(c);\n }\n return new vk(a, 0, b ? {\n hydrate: !0\n } : void 0);\n}\n\nfunction zk(a, b, c, d, e) {\n var f = c._reactRootContainer;\n\n if (f) {\n var g = f._internalRoot;\n\n if (\"function\" === typeof e) {\n var h = e;\n\n e = function e() {\n var a = sk(g);\n h.call(a);\n };\n }\n\n rk(b, g, a, e);\n } else {\n f = c._reactRootContainer = yk(c, d);\n g = f._internalRoot;\n\n if (\"function\" === typeof e) {\n var k = e;\n\n e = function e() {\n var a = sk(g);\n k.call(a);\n };\n }\n\n ck(function () {\n rk(b, g, a, e);\n });\n }\n\n return sk(g);\n}\n\nfunction Ak(a, b, c) {\n var d = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: Ha,\n key: null == d ? null : \"\" + d,\n children: a,\n containerInfo: b,\n implementation: c\n };\n}\n\njc = function jc(a) {\n if (13 === a.tag) {\n var b = lg(Pg(), 150, 100);\n Rg(a, b);\n uk(a, b);\n }\n};\n\nkc = function kc(a) {\n if (13 === a.tag) {\n Pg();\n var b = kg++;\n Rg(a, b);\n uk(a, b);\n }\n};\n\nlc = function lc(a) {\n if (13 === a.tag) {\n var b = Pg();\n b = Qg(b, a, null);\n Rg(a, b);\n uk(a, b);\n }\n};\n\nZa = function Za(a, b, c) {\n switch (b) {\n case \"input\":\n Eb(a, c);\n b = c.name;\n\n if (\"radio\" === c.type && null != b) {\n for (c = a; c.parentNode;) {\n c = c.parentNode;\n }\n\n c = c.querySelectorAll(\"input[name=\" + JSON.stringify(\"\" + b) + '][type=\"radio\"]');\n\n for (b = 0; b < c.length; b++) {\n var d = c[b];\n\n if (d !== a && d.form === a.form) {\n var e = ye(d);\n if (!e) throw Error(u(90));\n zb(d);\n Eb(d, e);\n }\n }\n }\n\n break;\n\n case \"textarea\":\n Mb(a, c);\n break;\n\n case \"select\":\n b = c.value, null != b && Jb(a, !!c.multiple, b, !1);\n }\n};\n\neb = bk;\n\nfb = function fb(a, b, c, d) {\n var e = T;\n T |= 4;\n\n try {\n return fg(98, a.bind(null, b, c, d));\n } finally {\n T = e, T === S && jg();\n }\n};\n\ngb = function gb() {\n (T & (1 | oj | pj)) === S && (ak(), Sj());\n};\n\nhb = function hb(a, b) {\n var c = T;\n T |= 2;\n\n try {\n return a(b);\n } finally {\n T = c, T === S && jg();\n }\n};\n\nfunction Bk(a, b) {\n var c = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (!wk(b)) throw Error(u(200));\n return Ak(a, b, null, c);\n}\n\nvar Ck = {\n createPortal: Bk,\n findDOMNode: function findDOMNode(a) {\n if (null == a) return null;\n if (1 === a.nodeType) return a;\n var b = a._reactInternalFiber;\n\n if (void 0 === b) {\n if (\"function\" === typeof a.render) throw Error(u(188));\n throw Error(u(268, Object.keys(a)));\n }\n\n a = ic(b);\n a = null === a ? null : a.stateNode;\n return a;\n },\n hydrate: function hydrate(a, b, c) {\n if (!wk(b)) throw Error(u(200));\n return zk(null, a, b, !0, c);\n },\n render: function render(a, b, c) {\n if (!wk(b)) throw Error(u(200));\n return zk(null, a, b, !1, c);\n },\n unstable_renderSubtreeIntoContainer: function unstable_renderSubtreeIntoContainer(a, b, c, d) {\n if (!wk(c)) throw Error(u(200));\n if (null == a || void 0 === a._reactInternalFiber) throw Error(u(38));\n return zk(a, b, c, !1, d);\n },\n unmountComponentAtNode: function unmountComponentAtNode(a) {\n if (!wk(a)) throw Error(u(40));\n return a._reactRootContainer ? (ck(function () {\n zk(null, null, a, !1, function () {\n a._reactRootContainer = null;\n a[we] = null;\n });\n }), !0) : !1;\n },\n unstable_createPortal: function unstable_createPortal() {\n return Bk.apply(void 0, arguments);\n },\n unstable_batchedUpdates: bk,\n flushSync: function flushSync(a, b) {\n if ((T & (oj | pj)) !== S) throw Error(u(187));\n var c = T;\n T |= 1;\n\n try {\n return fg(99, a.bind(null, b));\n } finally {\n T = c, jg();\n }\n },\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {\n Events: [Cc, xe, ye, Ca.injectEventPluginsByName, fa, Sc, function (a) {\n ya(a, Rc);\n }, cb, db, Pd, Ba, Sj, {\n current: !1\n }]\n }\n};\n\n(function (a) {\n var b = a.findFiberByHostInstance;\n return ok(n({}, a, {\n overrideHookState: null,\n overrideProps: null,\n setSuspenseHandler: null,\n scheduleUpdate: null,\n currentDispatcherRef: Ea.ReactCurrentDispatcher,\n findHostInstanceByFiber: function findHostInstanceByFiber(a) {\n a = ic(a);\n return null === a ? null : a.stateNode;\n },\n findFiberByHostInstance: function findFiberByHostInstance(a) {\n return b ? b(a) : null;\n },\n findHostInstancesForRefresh: null,\n scheduleRefresh: null,\n scheduleRoot: null,\n setRefreshHandler: null,\n getCurrentFiber: null\n }));\n})({\n findFiberByHostInstance: Fc,\n bundleType: 0,\n version: \"16.12.0\",\n rendererPackageName: \"react-dom\"\n});\n\nvar Dk = {\n \"default\": Ck\n},\n Ek = Dk && Ck || Dk;\nmodule.exports = Ek[\"default\"] || Ek;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0Bob3QtbG9hZGVyL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AaG90LWxvYWRlci9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcz85ZDgwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMFxuICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxuPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLHE9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiB1KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWlmKCFhYSl0aHJvdyBFcnJvcih1KDIyNykpO3ZhciBiYT1udWxsLGNhPXt9O1xuZnVuY3Rpb24gZGEoKXtpZihiYSlmb3IodmFyIGEgaW4gY2Epe3ZhciBiPWNhW2FdLGM9YmEuaW5kZXhPZihhKTtpZighKC0xPGMpKXRocm93IEVycm9yKHUoOTYsYSkpO2lmKCFlYVtjXSl7aWYoIWIuZXh0cmFjdEV2ZW50cyl0aHJvdyBFcnJvcih1KDk3LGEpKTtlYVtjXT1iO2M9Yi5ldmVudFR5cGVzO2Zvcih2YXIgZCBpbiBjKXt2YXIgZT12b2lkIDA7dmFyIGY9Y1tkXSxnPWIsaD1kO2lmKGZhLmhhc093blByb3BlcnR5KGgpKXRocm93IEVycm9yKHUoOTksaCkpO2ZhW2hdPWY7dmFyIGs9Zi5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztpZihrKXtmb3IoZSBpbiBrKWsuaGFzT3duUHJvcGVydHkoZSkmJmhhKGtbZV0sZyxoKTtlPSEwfWVsc2UgZi5yZWdpc3RyYXRpb25OYW1lPyhoYShmLnJlZ2lzdHJhdGlvbk5hbWUsZyxoKSxlPSEwKTplPSExO2lmKCFlKXRocm93IEVycm9yKHUoOTgsZCxhKSk7fX19fVxuZnVuY3Rpb24gaGEoYSxiLGMpe2lmKGlhW2FdKXRocm93IEVycm9yKHUoMTAwLGEpKTtpYVthXT1iO2phW2FdPWIuZXZlbnRUeXBlc1tjXS5kZXBlbmRlbmNpZXN9dmFyIGVhPVtdLGZhPXt9LGlhPXt9LGphPXt9O2Z1bmN0aW9uIGthKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e2IuYXBwbHkoYyxsKX1jYXRjaChtKXt0aGlzLm9uRXJyb3IobSl9fXZhciBsYT0hMSxtYT1udWxsLG5hPSExLG9hPW51bGwscGE9e29uRXJyb3I6ZnVuY3Rpb24oYSl7bGE9ITA7bWE9YX19O2Z1bmN0aW9uIHFhKGEsYixjLGQsZSxmLGcsaCxrKXtsYT0hMTttYT1udWxsO2thLmFwcGx5KHBhLGFyZ3VtZW50cyl9XG5mdW5jdGlvbiByYShhLGIsYyxkLGUsZixnLGgsayl7cWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGxhKXtpZihsYSl7dmFyIGw9bWE7bGE9ITE7bWE9bnVsbH1lbHNlIHRocm93IEVycm9yKHUoMTk4KSk7bmF8fChuYT0hMCxvYT1sKX19dmFyIHNhPW51bGwsdWE9bnVsbCx2YT1udWxsO2Z1bmN0aW9uIHdhKGEsYixjKXt2YXIgZD1hLnR5cGV8fFwidW5rbm93bi1ldmVudFwiO2EuY3VycmVudFRhcmdldD12YShjKTtyYShkLGIsdm9pZCAwLGEpO2EuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIHhhKGEsYil7aWYobnVsbD09Yil0aHJvdyBFcnJvcih1KDMwKSk7aWYobnVsbD09YSlyZXR1cm4gYjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBhLnB1c2guYXBwbHkoYSxiKSxhO2EucHVzaChiKTtyZXR1cm4gYX1yZXR1cm4gQXJyYXkuaXNBcnJheShiKT9bYV0uY29uY2F0KGIpOlthLGJdfVxuZnVuY3Rpb24geWEoYSxiLGMpe0FycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGIsYyk6YSYmYi5jYWxsKGMsYSl9dmFyIHphPW51bGw7ZnVuY3Rpb24gQWEoYSl7aWYoYSl7dmFyIGI9YS5fZGlzcGF0Y2hMaXN0ZW5lcnMsYz1hLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGgmJiFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7ZCsrKXdhKGEsYltkXSxjW2RdKTtlbHNlIGImJndhKGEsYixjKTthLl9kaXNwYXRjaExpc3RlbmVycz1udWxsO2EuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGw7YS5pc1BlcnNpc3RlbnQoKXx8YS5jb25zdHJ1Y3Rvci5yZWxlYXNlKGEpfX1mdW5jdGlvbiBCYShhKXtudWxsIT09YSYmKHphPXhhKHphLGEpKTthPXphO3phPW51bGw7aWYoYSl7eWEoYSxBYSk7aWYoemEpdGhyb3cgRXJyb3IodSg5NSkpO2lmKG5hKXRocm93IGE9b2EsbmE9ITEsb2E9bnVsbCxhO319XG52YXIgQ2E9e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6ZnVuY3Rpb24oYSl7aWYoYmEpdGhyb3cgRXJyb3IodSgxMDEpKTtiYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKTtkYSgpfSxpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6ZnVuY3Rpb24oYSl7dmFyIGI9ITEsYztmb3IoYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107aWYoIWNhLmhhc093blByb3BlcnR5KGMpfHxjYVtjXSE9PWQpe2lmKGNhW2NdKXRocm93IEVycm9yKHUoMTAyLGMpKTtjYVtjXT1kO2I9ITB9fWImJmRhKCl9fTtcbmZ1bmN0aW9uIERhKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYoIWMpcmV0dXJuIG51bGw7dmFyIGQ9c2EoYyk7aWYoIWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOihkPSFkLmRpc2FibGVkKXx8KGE9YS50eXBlLGQ9IShcImJ1dHRvblwiPT09YXx8XCJpbnB1dFwiPT09YXx8XCJzZWxlY3RcIj09PWF8fFwidGV4dGFyZWFcIj09PWEpKTthPSFkO2JyZWFrIGE7ZGVmYXVsdDphPSExfWlmKGEpcmV0dXJuIG51bGw7aWYoYyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGMpdGhyb3cgRXJyb3IodSgyMzEsYix0eXBlb2YgYykpO1xucmV0dXJuIGN9dmFyIEVhPWFhLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO0VhLmhhc093blByb3BlcnR5KFwiUmVhY3RDdXJyZW50RGlzcGF0Y2hlclwiKXx8KEVhLlJlYWN0Q3VycmVudERpc3BhdGNoZXI9e2N1cnJlbnQ6bnVsbH0pO0VhLmhhc093blByb3BlcnR5KFwiUmVhY3RDdXJyZW50QmF0Y2hDb25maWdcIil8fChFYS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZz17c3VzcGVuc2U6bnVsbH0pO1xudmFyIEZhPS9eKC4qKVtcXFxcXFwvXS8sdz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLEdhPXc/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsSGE9dz9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LElhPXc/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LEphPXc/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LEthPXc/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LExhPXc/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LE1hPXc/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsTmE9dz9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLE9hPXc/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLFBhPXc/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLFFhPXc/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6XG42MDEyMCxSYT13P1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LFNhPXc/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTY7dyYmU3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpO3cmJlN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik7dyYmU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO3ZhciBUYT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gVWEoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPVRhJiZhW1RhXXx8YVtcIkBAaXRlcmF0b3JcIl07cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YTpudWxsfVxuZnVuY3Rpb24gVmEoYSl7aWYoLTE9PT1hLl9zdGF0dXMpe2EuX3N0YXR1cz0wO3ZhciBiPWEuX2N0b3I7Yj1iKCk7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX19XG5mdW5jdGlvbiBXYShhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBhLmRpc3BsYXlOYW1lfHxhLm5hbWV8fG51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKXJldHVybiBhO3N3aXRjaChhKXtjYXNlIElhOnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIEhhOnJldHVyblwiUG9ydGFsXCI7Y2FzZSBLYTpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSBKYTpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIFBhOnJldHVyblwiU3VzcGVuc2VcIjtjYXNlIFFhOnJldHVyblwiU3VzcGVuc2VMaXN0XCJ9aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIE1hOnJldHVyblwiQ29udGV4dC5Db25zdW1lclwiO2Nhc2UgTGE6cmV0dXJuXCJDb250ZXh0LlByb3ZpZGVyXCI7Y2FzZSBPYTp2YXIgYj1hLnJlbmRlcjtiPWIuZGlzcGxheU5hbWV8fGIubmFtZXx8XCJcIjtyZXR1cm4gYS5kaXNwbGF5TmFtZXx8KFwiXCIhPT1iP1wiRm9yd2FyZFJlZihcIitiK1wiKVwiOlxuXCJGb3J3YXJkUmVmXCIpO2Nhc2UgUmE6cmV0dXJuIFdhKGEudHlwZSk7Y2FzZSBTYTppZihhPTE9PT1hLl9zdGF0dXM/YS5fcmVzdWx0Om51bGwpcmV0dXJuIFdhKGEpfXJldHVybiBudWxsfWZ1bmN0aW9uIFhhKGEpe3ZhciBiPVwiXCI7ZG97YTpzd2l0Y2goYS50YWcpe2Nhc2UgMzpjYXNlIDQ6Y2FzZSA2OmNhc2UgNzpjYXNlIDEwOmNhc2UgOTp2YXIgYz1cIlwiO2JyZWFrIGE7ZGVmYXVsdDp2YXIgZD1hLl9kZWJ1Z093bmVyLGU9YS5fZGVidWdTb3VyY2UsZj1XYShhLnR5cGUpO2M9bnVsbDtkJiYoYz1XYShkLnR5cGUpKTtkPWY7Zj1cIlwiO2U/Zj1cIiAoYXQgXCIrZS5maWxlTmFtZS5yZXBsYWNlKEZhLFwiXCIpK1wiOlwiK2UubGluZU51bWJlcitcIilcIjpjJiYoZj1cIiAoY3JlYXRlZCBieSBcIitjK1wiKVwiKTtjPVwiXFxuICAgIGluIFwiKyhkfHxcIlVua25vd25cIikrZn1iKz1jO2E9YS5yZXR1cm59d2hpbGUoYSk7cmV0dXJuIGJ9XG52YXIgWWE9IShcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLFphPW51bGwsJGE9bnVsbCxhYj1udWxsO2Z1bmN0aW9uIGJiKGEpe2lmKGE9dWEoYSkpe2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBaYSl0aHJvdyBFcnJvcih1KDI4MCkpO3ZhciBiPXNhKGEuc3RhdGVOb2RlKTtaYShhLnN0YXRlTm9kZSxhLnR5cGUsYil9fWZ1bmN0aW9uIGNiKGEpeyRhP2FiP2FiLnB1c2goYSk6YWI9W2FdOiRhPWF9ZnVuY3Rpb24gZGIoKXtpZigkYSl7dmFyIGE9JGEsYj1hYjthYj0kYT1udWxsO2JiKGEpO2lmKGIpZm9yKGE9MDthPGIubGVuZ3RoO2ErKyliYihiW2FdKX19ZnVuY3Rpb24gZWIoYSxiKXtyZXR1cm4gYShiKX1mdW5jdGlvbiBmYihhLGIsYyxkKXtyZXR1cm4gYShiLGMsZCl9ZnVuY3Rpb24gZ2IoKXt9XG52YXIgaGI9ZWIsaWI9ITEsamI9ITE7ZnVuY3Rpb24ga2IoKXtpZihudWxsIT09JGF8fG51bGwhPT1hYilnYigpLGRiKCl9bmV3IE1hcDt2YXIgbGI9L15bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQvLG1iPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbmI9e30sb2I9e307XG5mdW5jdGlvbiBwYihhKXtpZihtYi5jYWxsKG9iLGEpKXJldHVybiEwO2lmKG1iLmNhbGwobmIsYSkpcmV0dXJuITE7aWYobGIudGVzdChhKSlyZXR1cm4gb2JbYV09ITA7bmJbYV09ITA7cmV0dXJuITF9ZnVuY3Rpb24gcWIoYSxiLGMsZCl7aWYobnVsbCE9PWMmJjA9PT1jLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiBiKXtjYXNlIFwiZnVuY3Rpb25cIjpjYXNlIFwic3ltYm9sXCI6cmV0dXJuITA7Y2FzZSBcImJvb2xlYW5cIjppZihkKXJldHVybiExO2lmKG51bGwhPT1jKXJldHVybiFjLmFjY2VwdHNCb29sZWFuczthPWEudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO3JldHVyblwiZGF0YS1cIiE9PWEmJlwiYXJpYS1cIiE9PWE7ZGVmYXVsdDpyZXR1cm4hMX19XG5mdW5jdGlvbiByYihhLGIsYyxkKXtpZihudWxsPT09Ynx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBifHxxYihhLGIsYyxkKSlyZXR1cm4hMDtpZihkKXJldHVybiExO2lmKG51bGwhPT1jKXN3aXRjaChjLnR5cGUpe2Nhc2UgMzpyZXR1cm4hYjtjYXNlIDQ6cmV0dXJuITE9PT1iO2Nhc2UgNTpyZXR1cm4gaXNOYU4oYik7Y2FzZSA2OnJldHVybiBpc05hTihiKXx8MT5ifXJldHVybiExfWZ1bmN0aW9uIEIoYSxiLGMsZCxlLGYpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT1ifHwzPT09Ynx8ND09PWI7dGhpcy5hdHRyaWJ1dGVOYW1lPWQ7dGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9ZTt0aGlzLm11c3RVc2VQcm9wZXJ0eT1jO3RoaXMucHJvcGVydHlOYW1lPWE7dGhpcy50eXBlPWI7dGhpcy5zYW5pdGl6ZVVSTD1mfXZhciBEPXt9O1xuXCJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMCwhMSxhLG51bGwsITEpfSk7W1tcImFjY2VwdENoYXJzZXRcIixcImFjY2VwdC1jaGFyc2V0XCJdLFtcImNsYXNzTmFtZVwiLFwiY2xhc3NcIl0sW1wiaHRtbEZvclwiLFwiZm9yXCJdLFtcImh0dHBFcXVpdlwiLFwiaHR0cC1lcXVpdlwiXV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hWzBdO0RbYl09bmV3IEIoYiwxLCExLGFbMV0sbnVsbCwhMSl9KTtbXCJjb250ZW50RWRpdGFibGVcIixcImRyYWdnYWJsZVwiLFwic3BlbGxDaGVja1wiLFwidmFsdWVcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMiwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KTtcbltcImF1dG9SZXZlcnNlXCIsXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXCJmb2N1c2FibGVcIixcInByZXNlcnZlQWxwaGFcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMiwhMSxhLG51bGwsITEpfSk7XCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMCxhLG51bGwsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNCwhMSxhLG51bGwsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw2LCExLGEsbnVsbCwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExKX0pO3ZhciBzYj0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHRiKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKHNiLFxudGIpO0RbYl09bmV3IEIoYiwxLCExLGEsbnVsbCwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShzYix0Yik7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShzYix0Yik7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExKX0pO1xuRC54bGlua0hyZWY9bmV3IEIoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwKX0pO2Z1bmN0aW9uIHViKGEpe3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIHZiKGEsYixjLGQpe3ZhciBlPUQuaGFzT3duUHJvcGVydHkoYik/RFtiXTpudWxsO3ZhciBmPW51bGwhPT1lPzA9PT1lLnR5cGU6ZD8hMTohKDI8Yi5sZW5ndGgpfHxcIm9cIiE9PWJbMF0mJlwiT1wiIT09YlswXXx8XCJuXCIhPT1iWzFdJiZcIk5cIiE9PWJbMV0/ITE6ITA7Znx8KHJiKGIsYyxlLGQpJiYoYz1udWxsKSxkfHxudWxsPT09ZT9wYihiKSYmKG51bGw9PT1jP2EucmVtb3ZlQXR0cmlidXRlKGIpOmEuc2V0QXR0cmlidXRlKGIsXCJcIitjKSk6ZS5tdXN0VXNlUHJvcGVydHk/YVtlLnByb3BlcnR5TmFtZV09bnVsbD09PWM/Mz09PWUudHlwZT8hMTpcIlwiOmM6KGI9ZS5hdHRyaWJ1dGVOYW1lLGQ9ZS5hdHRyaWJ1dGVOYW1lc3BhY2UsbnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6KGU9ZS50eXBlLGM9Mz09PWV8fDQ9PT1lJiYhMD09PWM/XCJcIjpcIlwiK2MsZD9hLnNldEF0dHJpYnV0ZU5TKGQsYixjKTphLnNldEF0dHJpYnV0ZShiLGMpKSkpfVxuZnVuY3Rpb24gd2IoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiZcImlucHV0XCI9PT1hLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1ifHxcInJhZGlvXCI9PT1iKX1cbmZ1bmN0aW9uIHhiKGEpe3ZhciBiPXdiKGEpP1wiY2hlY2tlZFwiOlwidmFsdWVcIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD1cIlwiK2FbYl07aWYoIWEuaGFzT3duUHJvcGVydHkoYikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZ2V0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5zZXQpe3ZhciBlPWMuZ2V0LGY9Yy5zZXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihhKXtkPVwiXCIrYTtmLmNhbGwodGhpcyxhKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtlbnVtZXJhYmxlOmMuZW51bWVyYWJsZX0pO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtkPVwiXCIrYX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7YS5fdmFsdWVUcmFja2VyPVxubnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiB5YihhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9eGIoYSkpfWZ1bmN0aW9uIHpiKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9XCJcIjthJiYoZD13YihhKT9hLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIEFiKGEsYil7dmFyIGM9Yi5jaGVja2VkO3JldHVybiBuKHt9LGIse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPWM/YzphLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1cbmZ1bmN0aW9uIEJiKGEsYil7dmFyIGM9bnVsbD09Yi5kZWZhdWx0VmFsdWU/XCJcIjpiLmRlZmF1bHRWYWx1ZSxkPW51bGwhPWIuY2hlY2tlZD9iLmNoZWNrZWQ6Yi5kZWZhdWx0Q2hlY2tlZDtjPXViKG51bGwhPWIudmFsdWU/Yi52YWx1ZTpjKTthLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOmQsaW5pdGlhbFZhbHVlOmMsY29udHJvbGxlZDpcImNoZWNrYm94XCI9PT1iLnR5cGV8fFwicmFkaW9cIj09PWIudHlwZT9udWxsIT1iLmNoZWNrZWQ6bnVsbCE9Yi52YWx1ZX19ZnVuY3Rpb24gQ2IoYSxiKXtiPWIuY2hlY2tlZDtudWxsIT1iJiZ2YihhLFwiY2hlY2tlZFwiLGIsITEpfVxuZnVuY3Rpb24gRWIoYSxiKXtDYihhLGIpO3ZhciBjPXViKGIudmFsdWUpLGQ9Yi50eXBlO2lmKG51bGwhPWMpaWYoXCJudW1iZXJcIj09PWQpe2lmKDA9PT1jJiZcIlwiPT09YS52YWx1ZXx8YS52YWx1ZSE9YylhLnZhbHVlPVwiXCIrY31lbHNlIGEudmFsdWUhPT1cIlwiK2MmJihhLnZhbHVlPVwiXCIrYyk7ZWxzZSBpZihcInN1Ym1pdFwiPT09ZHx8XCJyZXNldFwiPT09ZCl7YS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtyZXR1cm59Yi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP0ZiKGEsYi50eXBlLGMpOmIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikmJkZiKGEsYi50eXBlLHViKGIuZGVmYXVsdFZhbHVlKSk7bnVsbD09Yi5jaGVja2VkJiZudWxsIT1iLmRlZmF1bHRDaGVja2VkJiYoYS5kZWZhdWx0Q2hlY2tlZD0hIWIuZGVmYXVsdENoZWNrZWQpfVxuZnVuY3Rpb24gR2IoYSxiLGMpe2lmKGIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKXx8Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSl7dmFyIGQ9Yi50eXBlO2lmKCEoXCJzdWJtaXRcIiE9PWQmJlwicmVzZXRcIiE9PWR8fHZvaWQgMCE9PWIudmFsdWUmJm51bGwhPT1iLnZhbHVlKSlyZXR1cm47Yj1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU7Y3x8Yj09PWEudmFsdWV8fChhLnZhbHVlPWIpO2EuZGVmYXVsdFZhbHVlPWJ9Yz1hLm5hbWU7XCJcIiE9PWMmJihhLm5hbWU9XCJcIik7YS5kZWZhdWx0Q2hlY2tlZD0hYS5kZWZhdWx0Q2hlY2tlZDthLmRlZmF1bHRDaGVja2VkPSEhYS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1wiXCIhPT1jJiYoYS5uYW1lPWMpfVxuZnVuY3Rpb24gRmIoYSxiLGMpe2lmKFwibnVtYmVyXCIhPT1ifHxhLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEpbnVsbD09Yz9hLmRlZmF1bHRWYWx1ZT1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6YS5kZWZhdWx0VmFsdWUhPT1cIlwiK2MmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2MpfWZ1bmN0aW9uIEhiKGEpe3ZhciBiPVwiXCI7YWEuQ2hpbGRyZW4uZm9yRWFjaChhLGZ1bmN0aW9uKGEpe251bGwhPWEmJihiKz1hKX0pO3JldHVybiBifWZ1bmN0aW9uIEliKGEsYil7YT1uKHtjaGlsZHJlbjp2b2lkIDB9LGIpO2lmKGI9SGIoYi5jaGlsZHJlbikpYS5jaGlsZHJlbj1iO3JldHVybiBhfVxuZnVuY3Rpb24gSmIoYSxiLGMsZCl7YT1hLm9wdGlvbnM7aWYoYil7Yj17fTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW1wiJFwiK2NbZV1dPSEwO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZT1iLmhhc093blByb3BlcnR5KFwiJFwiK2FbY10udmFsdWUpLGFbY10uc2VsZWN0ZWQhPT1lJiYoYVtjXS5zZWxlY3RlZD1lKSxlJiZkJiYoYVtjXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Yz1cIlwiK3ViKGMpO2I9bnVsbDtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtpZihhW2VdLnZhbHVlPT09Yyl7YVtlXS5zZWxlY3RlZD0hMDtkJiYoYVtlXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09Ynx8YVtlXS5kaXNhYmxlZHx8KGI9YVtlXSl9bnVsbCE9PWImJihiLnNlbGVjdGVkPSEwKX19XG5mdW5jdGlvbiBLYihhLGIpe2lmKG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpdGhyb3cgRXJyb3IodSg5MSkpO3JldHVybiBuKHt9LGIse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOlwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIExiKGEsYil7dmFyIGM9Yi52YWx1ZTtpZihudWxsPT1jKXtjPWIuZGVmYXVsdFZhbHVlO2I9Yi5jaGlsZHJlbjtpZihudWxsIT1iKXtpZihudWxsIT1jKXRocm93IEVycm9yKHUoOTIpKTtpZihBcnJheS5pc0FycmF5KGIpKXtpZighKDE+PWIubGVuZ3RoKSl0aHJvdyBFcnJvcih1KDkzKSk7Yj1iWzBdfWM9Yn1udWxsPT1jJiYoYz1cIlwiKX1hLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTp1YihjKX19XG5mdW5jdGlvbiBNYihhLGIpe3ZhciBjPXViKGIudmFsdWUpLGQ9dWIoYi5kZWZhdWx0VmFsdWUpO251bGwhPWMmJihjPVwiXCIrYyxjIT09YS52YWx1ZSYmKGEudmFsdWU9YyksbnVsbD09Yi5kZWZhdWx0VmFsdWUmJmEuZGVmYXVsdFZhbHVlIT09YyYmKGEuZGVmYXVsdFZhbHVlPWMpKTtudWxsIT1kJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitkKX1mdW5jdGlvbiBOYihhKXt2YXIgYj1hLnRleHRDb250ZW50O2I9PT1hLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiZcIlwiIT09YiYmbnVsbCE9PWImJihhLnZhbHVlPWIpfXZhciBPYj17aHRtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixtYXRobWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsc3ZnOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn07XG5mdW5jdGlvbiBQYihhKXtzd2l0Y2goYSl7Y2FzZSBcInN2Z1wiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtjYXNlIFwibWF0aFwiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiO2RlZmF1bHQ6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCJ9fWZ1bmN0aW9uIFFiKGEsYil7cmV0dXJuIG51bGw9PWF8fFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT09YT9QYihiKTpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI9PT1hJiZcImZvcmVpZ25PYmplY3RcIj09PWI/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6YX1cbnZhciBSYixTYj1mdW5jdGlvbihhKXtyZXR1cm5cInVuZGVmaW5lZFwiIT09dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbihiLGMsZCxlKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3JldHVybiBhKGIsYyxkLGUpfSl9OmF9KGZ1bmN0aW9uKGEsYil7aWYoYS5uYW1lc3BhY2VVUkkhPT1PYi5zdmd8fFwiaW5uZXJIVE1MXCJpbiBhKWEuaW5uZXJIVE1MPWI7ZWxzZXtSYj1SYnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtSYi5pbm5lckhUTUw9XCI8c3ZnPlwiK2IudmFsdWVPZigpLnRvU3RyaW5nKCkrXCI8L3N2Zz5cIjtmb3IoYj1SYi5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7Yi5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGIuZmlyc3RDaGlsZCl9fSk7XG5mdW5jdGlvbiBUYihhLGIpe2lmKGIpe3ZhciBjPWEuZmlyc3RDaGlsZDtpZihjJiZjPT09YS5sYXN0Q2hpbGQmJjM9PT1jLm5vZGVUeXBlKXtjLm5vZGVWYWx1ZT1iO3JldHVybn19YS50ZXh0Q29udGVudD1ifWZ1bmN0aW9uIFViKGEsYil7dmFyIGM9e307Y1thLnRvTG93ZXJDYXNlKCldPWIudG9Mb3dlckNhc2UoKTtjW1wiV2Via2l0XCIrYV09XCJ3ZWJraXRcIitiO2NbXCJNb3pcIithXT1cIm1velwiK2I7cmV0dXJuIGN9dmFyIFZiPXthbmltYXRpb25lbmQ6VWIoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkVuZFwiKSxhbmltYXRpb25pdGVyYXRpb246VWIoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxhbmltYXRpb25zdGFydDpVYihcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uU3RhcnRcIiksdHJhbnNpdGlvbmVuZDpVYihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25FbmRcIil9LFdiPXt9LFhiPXt9O1xuWWEmJihYYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiQW5pbWF0aW9uRXZlbnRcImluIHdpbmRvd3x8KGRlbGV0ZSBWYi5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBWYi5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBWYi5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLFwiVHJhbnNpdGlvbkV2ZW50XCJpbiB3aW5kb3d8fGRlbGV0ZSBWYi50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO2Z1bmN0aW9uIFliKGEpe2lmKFdiW2FdKXJldHVybiBXYlthXTtpZighVmJbYV0pcmV0dXJuIGE7dmFyIGI9VmJbYV0sYztmb3IoYyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoYykmJmMgaW4gWGIpcmV0dXJuIFdiW2FdPWJbY107cmV0dXJuIGF9dmFyIFpiPVliKFwiYW5pbWF0aW9uZW5kXCIpLCRiPVliKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLGFjPVliKFwiYW5pbWF0aW9uc3RhcnRcIiksYmM9WWIoXCJ0cmFuc2l0aW9uZW5kXCIpLGNjPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFwiIFwiKTtcbmZ1bmN0aW9uIGVjKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5lZmZlY3RUYWcmMTAyNikmJihjPWIucmV0dXJuKSxhPWIucmV0dXJuO3doaWxlKGEpfXJldHVybiAzPT09Yi50YWc/YzpudWxsfWZ1bmN0aW9uIGZjKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09YiYmKGE9YS5hbHRlcm5hdGUsbnVsbCE9PWEmJihiPWEubWVtb2l6ZWRTdGF0ZSkpO2lmKG51bGwhPT1iKXJldHVybiBiLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZ2MoYSl7aWYoZWMoYSkhPT1hKXRocm93IEVycm9yKHUoMTg4KSk7fVxuZnVuY3Rpb24gaGMoYSl7dmFyIGI9YS5hbHRlcm5hdGU7aWYoIWIpe2I9ZWMoYSk7aWYobnVsbD09PWIpdGhyb3cgRXJyb3IodSgxODgpKTtyZXR1cm4gYiE9PWE/bnVsbDphfWZvcih2YXIgYz1hLGQ9Yjs7KXt2YXIgZT1jLnJldHVybjtpZihudWxsPT09ZSlicmVhazt2YXIgZj1lLmFsdGVybmF0ZTtpZihudWxsPT09Zil7ZD1lLnJldHVybjtpZihudWxsIT09ZCl7Yz1kO2NvbnRpbnVlfWJyZWFrfWlmKGUuY2hpbGQ9PT1mLmNoaWxkKXtmb3IoZj1lLmNoaWxkO2Y7KXtpZihmPT09YylyZXR1cm4gZ2MoZSksYTtpZihmPT09ZClyZXR1cm4gZ2MoZSksYjtmPWYuc2libGluZ310aHJvdyBFcnJvcih1KDE4OCkpO31pZihjLnJldHVybiE9PWQucmV0dXJuKWM9ZSxkPWY7ZWxzZXtmb3IodmFyIGc9ITEsaD1lLmNoaWxkO2g7KXtpZihoPT09Yyl7Zz0hMDtjPWU7ZD1mO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZTtjPWY7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpe2ZvcihoPWYuY2hpbGQ7aDspe2lmKGg9PT1cbmMpe2c9ITA7Yz1mO2Q9ZTticmVha31pZihoPT09ZCl7Zz0hMDtkPWY7Yz1lO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXRocm93IEVycm9yKHUoMTg5KSk7fX1pZihjLmFsdGVybmF0ZSE9PWQpdGhyb3cgRXJyb3IodSgxOTApKTt9aWYoMyE9PWMudGFnKXRocm93IEVycm9yKHUoMTg4KSk7cmV0dXJuIGMuc3RhdGVOb2RlLmN1cnJlbnQ9PT1jP2E6Yn1mdW5jdGlvbiBpYyhhKXthPWhjKGEpO2lmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgYj1hOzspe2lmKDU9PT1iLnRhZ3x8Nj09PWIudGFnKXJldHVybiBiO2lmKGIuY2hpbGQpYi5jaGlsZC5yZXR1cm49YixiPWIuY2hpbGQ7ZWxzZXtpZihiPT09YSlicmVhaztmb3IoOyFiLnNpYmxpbmc7KXtpZighYi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9fXJldHVybiBudWxsfVxudmFyIGpjLGtjLGxjLG1jPSExLG5jPVtdLG9jPW51bGwscGM9bnVsbCxxYz1udWxsLHJjPW5ldyBNYXAsc2M9bmV3IE1hcCx0Yz1bXSx1Yz1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNsb3NlIGNhbmNlbCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpLHZjPVwiZm9jdXMgYmx1ciBkcmFnZW50ZXIgZHJhZ2xlYXZlIG1vdXNlb3ZlciBtb3VzZW91dCBwb2ludGVyb3ZlciBwb2ludGVyb3V0IGdvdHBvaW50ZXJjYXB0dXJlIGxvc3Rwb2ludGVyY2FwdHVyZVwiLnNwbGl0KFwiIFwiKTtcbmZ1bmN0aW9uIHdjKGEpe3ZhciBiPXhjKGEpO3VjLmZvckVhY2goZnVuY3Rpb24oYyl7eWMoYyxhLGIpfSk7dmMuZm9yRWFjaChmdW5jdGlvbihjKXt5YyhjLGEsYil9KX1mdW5jdGlvbiB6YyhhLGIsYyxkKXtyZXR1cm57YmxvY2tlZE9uOmEsdG9wTGV2ZWxUeXBlOmIsZXZlbnRTeXN0ZW1GbGFnczpjfDMyLG5hdGl2ZUV2ZW50OmR9fWZ1bmN0aW9uIEFjKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c1wiOmNhc2UgXCJibHVyXCI6b2M9bnVsbDticmVhaztjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdsZWF2ZVwiOnBjPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJtb3VzZW91dFwiOnFjPW51bGw7YnJlYWs7Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpyYy5kZWxldGUoYi5wb2ludGVySWQpO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpzYy5kZWxldGUoYi5wb2ludGVySWQpfX1cbmZ1bmN0aW9uIEJjKGEsYixjLGQsZSl7aWYobnVsbD09PWF8fGEubmF0aXZlRXZlbnQhPT1lKXJldHVybiBhPXpjKGIsYyxkLGUpLG51bGwhPT1iJiYoYj1DYyhiKSxudWxsIT09YiYma2MoYikpLGE7YS5ldmVudFN5c3RlbUZsYWdzfD1kO3JldHVybiBhfWZ1bmN0aW9uIERjKGEsYixjLGQpe3N3aXRjaChiKXtjYXNlIFwiZm9jdXNcIjpyZXR1cm4gb2M9QmMob2MsYSxiLGMsZCksITA7Y2FzZSBcImRyYWdlbnRlclwiOnJldHVybiBwYz1CYyhwYyxhLGIsYyxkKSwhMDtjYXNlIFwibW91c2VvdmVyXCI6cmV0dXJuIHFjPUJjKHFjLGEsYixjLGQpLCEwO2Nhc2UgXCJwb2ludGVyb3ZlclwiOnZhciBlPWQucG9pbnRlcklkO3JjLnNldChlLEJjKHJjLmdldChlKXx8bnVsbCxhLGIsYyxkKSk7cmV0dXJuITA7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGU9ZC5wb2ludGVySWQsc2Muc2V0KGUsQmMoc2MuZ2V0KGUpfHxudWxsLGEsYixjLGQpKSwhMH1yZXR1cm4hMX1cbmZ1bmN0aW9uIEVjKGEpe3ZhciBiPUZjKGEudGFyZ2V0KTtpZihudWxsIT09Yil7dmFyIGM9ZWMoYik7aWYobnVsbCE9PWMpaWYoYj1jLnRhZywxMz09PWIpe2lmKGI9ZmMoYyksbnVsbCE9PWIpe2EuYmxvY2tlZE9uPWI7cS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoYS5wcmlvcml0eSxmdW5jdGlvbigpe2xjKGMpfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBHYyhhKXtpZihudWxsIT09YS5ibG9ja2VkT24pcmV0dXJuITE7dmFyIGI9SGMoYS50b3BMZXZlbFR5cGUsYS5ldmVudFN5c3RlbUZsYWdzLGEubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1iKXt2YXIgYz1DYyhiKTtudWxsIT09YyYma2MoYyk7YS5ibG9ja2VkT249YjtyZXR1cm4hMX1yZXR1cm4hMH1cbmZ1bmN0aW9uIEljKGEsYixjKXtHYyhhKSYmYy5kZWxldGUoYil9ZnVuY3Rpb24gSmMoKXtmb3IobWM9ITE7MDxuYy5sZW5ndGg7KXt2YXIgYT1uY1swXTtpZihudWxsIT09YS5ibG9ja2VkT24pe2E9Q2MoYS5ibG9ja2VkT24pO251bGwhPT1hJiZqYyhhKTticmVha312YXIgYj1IYyhhLnRvcExldmVsVHlwZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYS5uYXRpdmVFdmVudCk7bnVsbCE9PWI/YS5ibG9ja2VkT249YjpuYy5zaGlmdCgpfW51bGwhPT1vYyYmR2Mob2MpJiYob2M9bnVsbCk7bnVsbCE9PXBjJiZHYyhwYykmJihwYz1udWxsKTtudWxsIT09cWMmJkdjKHFjKSYmKHFjPW51bGwpO3JjLmZvckVhY2goSWMpO3NjLmZvckVhY2goSWMpfWZ1bmN0aW9uIEtjKGEsYil7YS5ibG9ja2VkT249PT1iJiYoYS5ibG9ja2VkT249bnVsbCxtY3x8KG1jPSEwLHEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhxLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEpjKSkpfVxuZnVuY3Rpb24gTGMoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gS2MoYixhKX1pZigwPG5jLmxlbmd0aCl7S2MobmNbMF0sYSk7Zm9yKHZhciBjPTE7YzxuYy5sZW5ndGg7YysrKXt2YXIgZD1uY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PW9jJiZLYyhvYyxhKTtudWxsIT09cGMmJktjKHBjLGEpO251bGwhPT1xYyYmS2MocWMsYSk7cmMuZm9yRWFjaChiKTtzYy5mb3JFYWNoKGIpO2ZvcihjPTA7Yzx0Yy5sZW5ndGg7YysrKWQ9dGNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHRjLmxlbmd0aCYmKGM9dGNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspRWMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZ0Yy5zaGlmdCgpfVxuZnVuY3Rpb24gTWMoYSl7YT1hLnRhcmdldHx8YS5zcmNFbGVtZW50fHx3aW5kb3c7YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGE9YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7cmV0dXJuIDM9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphfWZ1bmN0aW9uIE5jKGEpe2RvIGE9YS5yZXR1cm47d2hpbGUoYSYmNSE9PWEudGFnKTtyZXR1cm4gYT9hOm51bGx9ZnVuY3Rpb24gT2MoYSxiLGMpe2lmKGI9RGEoYSxjLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW2JdKSljLl9kaXNwYXRjaExpc3RlbmVycz14YShjLl9kaXNwYXRjaExpc3RlbmVycyxiKSxjLl9kaXNwYXRjaEluc3RhbmNlcz14YShjLl9kaXNwYXRjaEluc3RhbmNlcyxhKX1cbmZ1bmN0aW9uIFBjKGEpe2lmKGEmJmEuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe2Zvcih2YXIgYj1hLl90YXJnZXRJbnN0LGM9W107YjspYy5wdXNoKGIpLGI9TmMoYik7Zm9yKGI9Yy5sZW5ndGg7MDxiLS07KU9jKGNbYl0sXCJjYXB0dXJlZFwiLGEpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspT2MoY1tiXSxcImJ1YmJsZWRcIixhKX19ZnVuY3Rpb24gUWMoYSxiLGMpe2EmJmMmJmMuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSYmKGI9RGEoYSxjLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpKSYmKGMuX2Rpc3BhdGNoTGlzdGVuZXJzPXhhKGMuX2Rpc3BhdGNoTGlzdGVuZXJzLGIpLGMuX2Rpc3BhdGNoSW5zdGFuY2VzPXhhKGMuX2Rpc3BhdGNoSW5zdGFuY2VzLGEpKX1mdW5jdGlvbiBSYyhhKXthJiZhLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUmJlFjKGEuX3RhcmdldEluc3QsbnVsbCxhKX1cbmZ1bmN0aW9uIFNjKGEpe3lhKGEsUGMpfWZ1bmN0aW9uIFRjKCl7cmV0dXJuITB9ZnVuY3Rpb24gVWMoKXtyZXR1cm4hMX1mdW5jdGlvbiBFKGEsYixjLGQpe3RoaXMuZGlzcGF0Y2hDb25maWc9YTt0aGlzLl90YXJnZXRJbnN0PWI7dGhpcy5uYXRpdmVFdmVudD1jO2E9dGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciBlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmKChiPWFbZV0pP3RoaXNbZV09YihjKTpcInRhcmdldFwiPT09ZT90aGlzLnRhcmdldD1kOnRoaXNbZV09Y1tlXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWMuZGVmYXVsdFByZXZlbnRlZD9jLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1jLnJldHVyblZhbHVlKT9UYzpVYzt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVVjO3JldHVybiB0aGlzfVxubihFLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5yZXR1cm5WYWx1ZSYmKGEucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPVRjKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmKGEuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVRjKX0scGVyc2lzdDpmdW5jdGlvbigpe3RoaXMuaXNQZXJzaXN0ZW50PVRjfSxpc1BlcnNpc3RlbnQ6VWMsZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlLFxuYjtmb3IoYiBpbiBhKXRoaXNbYl09bnVsbDt0aGlzLm5hdGl2ZUV2ZW50PXRoaXMuX3RhcmdldEluc3Q9dGhpcy5kaXNwYXRjaENvbmZpZz1udWxsO3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9VWM7dGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXM9dGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbH19KTtFLkludGVyZmFjZT17dHlwZTpudWxsLHRhcmdldDpudWxsLGN1cnJlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfTtcbkUuZXh0ZW5kPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gYygpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZD10aGlzO2IucHJvdG90eXBlPWQucHJvdG90eXBlO3ZhciBlPW5ldyBiO24oZSxjLnByb3RvdHlwZSk7Yy5wcm90b3R5cGU9ZTtjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jO2MuSW50ZXJmYWNlPW4oe30sZC5JbnRlcmZhY2UsYSk7Yy5leHRlbmQ9ZC5leHRlbmQ7VmMoYyk7cmV0dXJuIGN9O1ZjKEUpO2Z1bmN0aW9uIFdjKGEsYixjLGQpe2lmKHRoaXMuZXZlbnRQb29sLmxlbmd0aCl7dmFyIGU9dGhpcy5ldmVudFBvb2wucG9wKCk7dGhpcy5jYWxsKGUsYSxiLGMsZCk7cmV0dXJuIGV9cmV0dXJuIG5ldyB0aGlzKGEsYixjLGQpfVxuZnVuY3Rpb24gWGMoYSl7aWYoIShhIGluc3RhbmNlb2YgdGhpcykpdGhyb3cgRXJyb3IodSgyNzkpKTthLmRlc3RydWN0b3IoKTsxMD50aGlzLmV2ZW50UG9vbC5sZW5ndGgmJnRoaXMuZXZlbnRQb29sLnB1c2goYSl9ZnVuY3Rpb24gVmMoYSl7YS5ldmVudFBvb2w9W107YS5nZXRQb29sZWQ9V2M7YS5yZWxlYXNlPVhjfXZhciBZYz1FLmV4dGVuZCh7YW5pbWF0aW9uTmFtZTpudWxsLGVsYXBzZWRUaW1lOm51bGwscHNldWRvRWxlbWVudDpudWxsfSksWmM9RS5leHRlbmQoe2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBhP2EuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSwkYz1FLmV4dGVuZCh7dmlldzpudWxsLGRldGFpbDpudWxsfSksYWQ9JGMuZXh0ZW5kKHtyZWxhdGVkVGFyZ2V0Om51bGx9KTtcbmZ1bmN0aW9uIGJkKGEpe3ZhciBiPWEua2V5Q29kZTtcImNoYXJDb2RlXCJpbiBhPyhhPWEuY2hhckNvZGUsMD09PWEmJjEzPT09YiYmKGE9MTMpKTphPWI7MTA9PT1hJiYoYT0xMyk7cmV0dXJuIDMyPD1hfHwxMz09PWE/YTowfVxudmFyIGNkPXtFc2M6XCJFc2NhcGVcIixTcGFjZWJhcjpcIiBcIixMZWZ0OlwiQXJyb3dMZWZ0XCIsVXA6XCJBcnJvd1VwXCIsUmlnaHQ6XCJBcnJvd1JpZ2h0XCIsRG93bjpcIkFycm93RG93blwiLERlbDpcIkRlbGV0ZVwiLFdpbjpcIk9TXCIsTWVudTpcIkNvbnRleHRNZW51XCIsQXBwczpcIkNvbnRleHRNZW51XCIsU2Nyb2xsOlwiU2Nyb2xsTG9ja1wiLE1velByaW50YWJsZUtleTpcIlVuaWRlbnRpZmllZFwifSxkZD17ODpcIkJhY2tzcGFjZVwiLDk6XCJUYWJcIiwxMjpcIkNsZWFyXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkNvbnRyb2xcIiwxODpcIkFsdFwiLDE5OlwiUGF1c2VcIiwyMDpcIkNhcHNMb2NrXCIsMjc6XCJFc2NhcGVcIiwzMjpcIiBcIiwzMzpcIlBhZ2VVcFwiLDM0OlwiUGFnZURvd25cIiwzNTpcIkVuZFwiLDM2OlwiSG9tZVwiLDM3OlwiQXJyb3dMZWZ0XCIsMzg6XCJBcnJvd1VwXCIsMzk6XCJBcnJvd1JpZ2h0XCIsNDA6XCJBcnJvd0Rvd25cIiw0NTpcIkluc2VydFwiLDQ2OlwiRGVsZXRlXCIsMTEyOlwiRjFcIiwxMTM6XCJGMlwiLDExNDpcIkYzXCIsMTE1OlwiRjRcIixcbjExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLDExOTpcIkY4XCIsMTIwOlwiRjlcIiwxMjE6XCJGMTBcIiwxMjI6XCJGMTFcIiwxMjM6XCJGMTJcIiwxNDQ6XCJOdW1Mb2NrXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDIyNDpcIk1ldGFcIn0sZWQ9e0FsdDpcImFsdEtleVwiLENvbnRyb2w6XCJjdHJsS2V5XCIsTWV0YTpcIm1ldGFLZXlcIixTaGlmdDpcInNoaWZ0S2V5XCJ9O2Z1bmN0aW9uIGdkKGEpe3ZhciBiPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIGIuZ2V0TW9kaWZpZXJTdGF0ZT9iLmdldE1vZGlmaWVyU3RhdGUoYSk6KGE9ZWRbYV0pPyEhYlthXTohMX1mdW5jdGlvbiBoZCgpe3JldHVybiBnZH1cbnZhciBpZD0kYy5leHRlbmQoe2tleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9Y2RbYS5rZXldfHxhLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09YilyZXR1cm4gYn1yZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/KGE9YmQoYSksMTM9PT1hP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2RkW2Eua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sbG9jYXRpb246bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwscmVwZWF0Om51bGwsbG9jYWxlOm51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpoZCxjaGFyQ29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/YmQoYSk6MH0sa2V5Q29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1cbmEudHlwZT9iZChhKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfX0pLGpkPTAsa2Q9MCxsZD0hMSxtZD0hMSxuZD0kYy5leHRlbmQoe3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxwYWdlWDpudWxsLHBhZ2VZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6aGQsYnV0dG9uOm51bGwsYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVsYXRlZFRhcmdldHx8KGEuZnJvbUVsZW1lbnQ9PT1hLnNyY0VsZW1lbnQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudCl9LG1vdmVtZW50WDpmdW5jdGlvbihhKXtpZihcIm1vdmVtZW50WFwiaW4gYSlyZXR1cm4gYS5tb3ZlbWVudFg7dmFyIGI9amQ7amQ9YS5zY3JlZW5YO3JldHVybiBsZD9cIm1vdXNlbW92ZVwiPT09YS50eXBlP2Euc2NyZWVuWC1cbmI6MDoobGQ9ITAsMCl9LG1vdmVtZW50WTpmdW5jdGlvbihhKXtpZihcIm1vdmVtZW50WVwiaW4gYSlyZXR1cm4gYS5tb3ZlbWVudFk7dmFyIGI9a2Q7a2Q9YS5zY3JlZW5ZO3JldHVybiBtZD9cIm1vdXNlbW92ZVwiPT09YS50eXBlP2Euc2NyZWVuWS1iOjA6KG1kPSEwLDApfX0pLG9kPW5kLmV4dGVuZCh7cG9pbnRlcklkOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxwcmVzc3VyZTpudWxsLHRhbmdlbnRpYWxQcmVzc3VyZTpudWxsLHRpbHRYOm51bGwsdGlsdFk6bnVsbCx0d2lzdDpudWxsLHBvaW50ZXJUeXBlOm51bGwsaXNQcmltYXJ5Om51bGx9KSxwZD1uZC5leHRlbmQoe2RhdGFUcmFuc2ZlcjpudWxsfSkscWQ9JGMuZXh0ZW5kKHt0b3VjaGVzOm51bGwsdGFyZ2V0VG91Y2hlczpudWxsLGNoYW5nZWRUb3VjaGVzOm51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6aGR9KSxyZD1FLmV4dGVuZCh7cHJvcGVydHlOYW1lOm51bGwsXG5lbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH0pLHNkPW5kLmV4dGVuZCh7ZGVsdGFYOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFYXCJpbiBhP2EuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGE/LWEud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFZXCJpbiBhP2EuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGE/LWEud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBhPy1hLndoZWVsRGVsdGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9KSx0ZD1bW1wiYmx1clwiLFwiYmx1clwiLDBdLFtcImNhbmNlbFwiLFwiY2FuY2VsXCIsMF0sW1wiY2xpY2tcIixcImNsaWNrXCIsMF0sW1wiY2xvc2VcIixcImNsb3NlXCIsMF0sW1wiY29udGV4dG1lbnVcIixcImNvbnRleHRNZW51XCIsMF0sW1wiY29weVwiLFwiY29weVwiLDBdLFtcImN1dFwiLFwiY3V0XCIsMF0sW1wiYXV4Y2xpY2tcIixcImF1eENsaWNrXCIsMF0sW1wiZGJsY2xpY2tcIixcImRvdWJsZUNsaWNrXCIsMF0sW1wiZHJhZ2VuZFwiLFwiZHJhZ0VuZFwiLFxuMF0sW1wiZHJhZ3N0YXJ0XCIsXCJkcmFnU3RhcnRcIiwwXSxbXCJkcm9wXCIsXCJkcm9wXCIsMF0sW1wiZm9jdXNcIixcImZvY3VzXCIsMF0sW1wiaW5wdXRcIixcImlucHV0XCIsMF0sW1wiaW52YWxpZFwiLFwiaW52YWxpZFwiLDBdLFtcImtleWRvd25cIixcImtleURvd25cIiwwXSxbXCJrZXlwcmVzc1wiLFwia2V5UHJlc3NcIiwwXSxbXCJrZXl1cFwiLFwia2V5VXBcIiwwXSxbXCJtb3VzZWRvd25cIixcIm1vdXNlRG93blwiLDBdLFtcIm1vdXNldXBcIixcIm1vdXNlVXBcIiwwXSxbXCJwYXN0ZVwiLFwicGFzdGVcIiwwXSxbXCJwYXVzZVwiLFwicGF1c2VcIiwwXSxbXCJwbGF5XCIsXCJwbGF5XCIsMF0sW1wicG9pbnRlcmNhbmNlbFwiLFwicG9pbnRlckNhbmNlbFwiLDBdLFtcInBvaW50ZXJkb3duXCIsXCJwb2ludGVyRG93blwiLDBdLFtcInBvaW50ZXJ1cFwiLFwicG9pbnRlclVwXCIsMF0sW1wicmF0ZWNoYW5nZVwiLFwicmF0ZUNoYW5nZVwiLDBdLFtcInJlc2V0XCIsXCJyZXNldFwiLDBdLFtcInNlZWtlZFwiLFwic2Vla2VkXCIsMF0sW1wic3VibWl0XCIsXCJzdWJtaXRcIiwwXSxbXCJ0b3VjaGNhbmNlbFwiLFwidG91Y2hDYW5jZWxcIixcbjBdLFtcInRvdWNoZW5kXCIsXCJ0b3VjaEVuZFwiLDBdLFtcInRvdWNoc3RhcnRcIixcInRvdWNoU3RhcnRcIiwwXSxbXCJ2b2x1bWVjaGFuZ2VcIixcInZvbHVtZUNoYW5nZVwiLDBdLFtcImRyYWdcIixcImRyYWdcIiwxXSxbXCJkcmFnZW50ZXJcIixcImRyYWdFbnRlclwiLDFdLFtcImRyYWdleGl0XCIsXCJkcmFnRXhpdFwiLDFdLFtcImRyYWdsZWF2ZVwiLFwiZHJhZ0xlYXZlXCIsMV0sW1wiZHJhZ292ZXJcIixcImRyYWdPdmVyXCIsMV0sW1wibW91c2Vtb3ZlXCIsXCJtb3VzZU1vdmVcIiwxXSxbXCJtb3VzZW91dFwiLFwibW91c2VPdXRcIiwxXSxbXCJtb3VzZW92ZXJcIixcIm1vdXNlT3ZlclwiLDFdLFtcInBvaW50ZXJtb3ZlXCIsXCJwb2ludGVyTW92ZVwiLDFdLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJPdXRcIiwxXSxbXCJwb2ludGVyb3ZlclwiLFwicG9pbnRlck92ZXJcIiwxXSxbXCJzY3JvbGxcIixcInNjcm9sbFwiLDFdLFtcInRvZ2dsZVwiLFwidG9nZ2xlXCIsMV0sW1widG91Y2htb3ZlXCIsXCJ0b3VjaE1vdmVcIiwxXSxbXCJ3aGVlbFwiLFwid2hlZWxcIiwxXSxbXCJhYm9ydFwiLFwiYWJvcnRcIixcbjJdLFtaYixcImFuaW1hdGlvbkVuZFwiLDJdLFskYixcImFuaW1hdGlvbkl0ZXJhdGlvblwiLDJdLFthYyxcImFuaW1hdGlvblN0YXJ0XCIsMl0sW1wiY2FucGxheVwiLFwiY2FuUGxheVwiLDJdLFtcImNhbnBsYXl0aHJvdWdoXCIsXCJjYW5QbGF5VGhyb3VnaFwiLDJdLFtcImR1cmF0aW9uY2hhbmdlXCIsXCJkdXJhdGlvbkNoYW5nZVwiLDJdLFtcImVtcHRpZWRcIixcImVtcHRpZWRcIiwyXSxbXCJlbmNyeXB0ZWRcIixcImVuY3J5cHRlZFwiLDJdLFtcImVuZGVkXCIsXCJlbmRlZFwiLDJdLFtcImVycm9yXCIsXCJlcnJvclwiLDJdLFtcImdvdHBvaW50ZXJjYXB0dXJlXCIsXCJnb3RQb2ludGVyQ2FwdHVyZVwiLDJdLFtcImxvYWRcIixcImxvYWRcIiwyXSxbXCJsb2FkZWRkYXRhXCIsXCJsb2FkZWREYXRhXCIsMl0sW1wibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZE1ldGFkYXRhXCIsMl0sW1wibG9hZHN0YXJ0XCIsXCJsb2FkU3RhcnRcIiwyXSxbXCJsb3N0cG9pbnRlcmNhcHR1cmVcIixcImxvc3RQb2ludGVyQ2FwdHVyZVwiLDJdLFtcInBsYXlpbmdcIixcInBsYXlpbmdcIiwyXSxbXCJwcm9ncmVzc1wiLFxuXCJwcm9ncmVzc1wiLDJdLFtcInNlZWtpbmdcIixcInNlZWtpbmdcIiwyXSxbXCJzdGFsbGVkXCIsXCJzdGFsbGVkXCIsMl0sW1wic3VzcGVuZFwiLFwic3VzcGVuZFwiLDJdLFtcInRpbWV1cGRhdGVcIixcInRpbWVVcGRhdGVcIiwyXSxbYmMsXCJ0cmFuc2l0aW9uRW5kXCIsMl0sW1wid2FpdGluZ1wiLFwid2FpdGluZ1wiLDJdXSx1ZD17fSx2ZD17fSx3ZD0wO2Zvcig7d2Q8dGQubGVuZ3RoO3dkKyspe3ZhciB5ZD10ZFt3ZF0semQ9eWRbMF0sQWQ9eWRbMV0sQmQ9eWRbMl0sQ2Q9XCJvblwiKyhBZFswXS50b1VwcGVyQ2FzZSgpK0FkLnNsaWNlKDEpKSxEZD17cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Q2QsY2FwdHVyZWQ6Q2QrXCJDYXB0dXJlXCJ9LGRlcGVuZGVuY2llczpbemRdLGV2ZW50UHJpb3JpdHk6QmR9O3VkW0FkXT1EZDt2ZFt6ZF09RGR9XG52YXIgRWQ9e2V2ZW50VHlwZXM6dWQsZ2V0RXZlbnRQcmlvcml0eTpmdW5jdGlvbihhKXthPXZkW2FdO3JldHVybiB2b2lkIDAhPT1hP2EuZXZlbnRQcmlvcml0eToyfSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXZkW2FdO2lmKCFlKXJldHVybiBudWxsO3N3aXRjaChhKXtjYXNlIFwia2V5cHJlc3NcIjppZigwPT09YmQoYykpcmV0dXJuIG51bGw7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjphPWlkO2JyZWFrO2Nhc2UgXCJibHVyXCI6Y2FzZSBcImZvY3VzXCI6YT1hZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pcmV0dXJuIG51bGw7Y2FzZSBcImF1eGNsaWNrXCI6Y2FzZSBcImRibGNsaWNrXCI6Y2FzZSBcIm1vdXNlZG93blwiOmNhc2UgXCJtb3VzZW1vdmVcIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJtb3VzZW91dFwiOmNhc2UgXCJtb3VzZW92ZXJcIjpjYXNlIFwiY29udGV4dG1lbnVcIjphPW5kO2JyZWFrO2Nhc2UgXCJkcmFnXCI6Y2FzZSBcImRyYWdlbmRcIjpjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdleGl0XCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmNhc2UgXCJkcmFnb3ZlclwiOmNhc2UgXCJkcmFnc3RhcnRcIjpjYXNlIFwiZHJvcFwiOmE9XG5wZDticmVhaztjYXNlIFwidG91Y2hjYW5jZWxcIjpjYXNlIFwidG91Y2hlbmRcIjpjYXNlIFwidG91Y2htb3ZlXCI6Y2FzZSBcInRvdWNoc3RhcnRcIjphPXFkO2JyZWFrO2Nhc2UgWmI6Y2FzZSAkYjpjYXNlIGFjOmE9WWM7YnJlYWs7Y2FzZSBiYzphPXJkO2JyZWFrO2Nhc2UgXCJzY3JvbGxcIjphPSRjO2JyZWFrO2Nhc2UgXCJ3aGVlbFwiOmE9c2Q7YnJlYWs7Y2FzZSBcImNvcHlcIjpjYXNlIFwiY3V0XCI6Y2FzZSBcInBhc3RlXCI6YT1aYzticmVhaztjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcInBvaW50ZXJjYW5jZWxcIjpjYXNlIFwicG9pbnRlcmRvd25cIjpjYXNlIFwicG9pbnRlcm1vdmVcIjpjYXNlIFwicG9pbnRlcm91dFwiOmNhc2UgXCJwb2ludGVyb3ZlclwiOmNhc2UgXCJwb2ludGVydXBcIjphPW9kO2JyZWFrO2RlZmF1bHQ6YT1FfWI9YS5nZXRQb29sZWQoZSxiLGMsZCk7U2MoYik7cmV0dXJuIGJ9fSxGZD1xLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuR2Q9cS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksSGQ9RWQuZ2V0RXZlbnRQcmlvcml0eSxJZD0xMCxKZD1bXTtcbmZ1bmN0aW9uIEtkKGEpe3ZhciBiPWEudGFyZ2V0SW5zdCxjPWI7ZG97aWYoIWMpe2EuYW5jZXN0b3JzLnB1c2goYyk7YnJlYWt9dmFyIGQ9YztpZigzPT09ZC50YWcpZD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2Vsc2V7Zm9yKDtkLnJldHVybjspZD1kLnJldHVybjtkPTMhPT1kLnRhZz9udWxsOmQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm99aWYoIWQpYnJlYWs7Yj1jLnRhZzs1IT09YiYmNiE9PWJ8fGEuYW5jZXN0b3JzLnB1c2goYyk7Yz1GYyhkKX13aGlsZShjKTtmb3IoYz0wO2M8YS5hbmNlc3RvcnMubGVuZ3RoO2MrKyl7Yj1hLmFuY2VzdG9yc1tjXTt2YXIgZT1NYyhhLm5hdGl2ZUV2ZW50KTtkPWEudG9wTGV2ZWxUeXBlO2Zvcih2YXIgZj1hLm5hdGl2ZUV2ZW50LGc9YS5ldmVudFN5c3RlbUZsYWdzLGg9bnVsbCxrPTA7azxlYS5sZW5ndGg7aysrKXt2YXIgbD1lYVtrXTtsJiYobD1sLmV4dHJhY3RFdmVudHMoZCxiLGYsZSxnKSkmJihoPXhhKGgsbCkpfUJhKGgpfX1cbnZhciBMZD0hMDtmdW5jdGlvbiBGKGEsYil7TWQoYixhLCExKX1mdW5jdGlvbiBNZChhLGIsYyl7c3dpdGNoKEhkKGIpKXtjYXNlIDA6dmFyIGQ9TmQuYmluZChudWxsLGIsMSk7YnJlYWs7Y2FzZSAxOmQ9T2QuYmluZChudWxsLGIsMSk7YnJlYWs7ZGVmYXVsdDpkPVBkLmJpbmQobnVsbCxiLDEpfWM/YS5hZGRFdmVudExpc3RlbmVyKGIsZCwhMCk6YS5hZGRFdmVudExpc3RlbmVyKGIsZCwhMSl9ZnVuY3Rpb24gTmQoYSxiLGMpe2lifHxnYigpO3ZhciBkPVBkLGU9aWI7aWI9ITA7dHJ5e2ZiKGQsYSxiLGMpfWZpbmFsbHl7KGliPWUpfHxrYigpfX1mdW5jdGlvbiBPZChhLGIsYyl7R2QoRmQsUGQuYmluZChudWxsLGEsYixjKSl9XG5mdW5jdGlvbiBRZChhLGIsYyxkKXtpZihKZC5sZW5ndGgpe3ZhciBlPUpkLnBvcCgpO2UudG9wTGV2ZWxUeXBlPWE7ZS5ldmVudFN5c3RlbUZsYWdzPWI7ZS5uYXRpdmVFdmVudD1jO2UudGFyZ2V0SW5zdD1kO2E9ZX1lbHNlIGE9e3RvcExldmVsVHlwZTphLGV2ZW50U3lzdGVtRmxhZ3M6YixuYXRpdmVFdmVudDpjLHRhcmdldEluc3Q6ZCxhbmNlc3RvcnM6W119O3RyeXtpZihiPUtkLGM9YSxqYiliKGMsdm9pZCAwKTtlbHNle2piPSEwO3RyeXtoYihiLGMsdm9pZCAwKX1maW5hbGx5e2piPSExLGtiKCl9fX1maW5hbGx5e2EudG9wTGV2ZWxUeXBlPW51bGwsYS5uYXRpdmVFdmVudD1udWxsLGEudGFyZ2V0SW5zdD1udWxsLGEuYW5jZXN0b3JzLmxlbmd0aD0wLEpkLmxlbmd0aDxJZCYmSmQucHVzaChhKX19XG5mdW5jdGlvbiBQZChhLGIsYyl7aWYoTGQpaWYoMDxuYy5sZW5ndGgmJi0xPHVjLmluZGV4T2YoYSkpYT16YyhudWxsLGEsYixjKSxuYy5wdXNoKGEpO2Vsc2V7dmFyIGQ9SGMoYSxiLGMpO251bGw9PT1kP0FjKGEsYyk6LTE8dWMuaW5kZXhPZihhKT8oYT16YyhkLGEsYixjKSxuYy5wdXNoKGEpKTpEYyhkLGEsYixjKXx8KEFjKGEsYyksUWQoYSxiLGMsbnVsbCkpfX1mdW5jdGlvbiBIYyhhLGIsYyl7dmFyIGQ9TWMoYyk7ZD1GYyhkKTtpZihudWxsIT09ZCl7dmFyIGU9ZWMoZCk7aWYobnVsbD09PWUpZD1udWxsO2Vsc2V7dmFyIGY9ZS50YWc7aWYoMTM9PT1mKXtkPWZjKGUpO2lmKG51bGwhPT1kKXJldHVybiBkO2Q9bnVsbH1lbHNlIGlmKDM9PT1mKXtpZihlLnN0YXRlTm9kZS5oeWRyYXRlKXJldHVybiAzPT09ZS50YWc/ZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2Q9bnVsbH1lbHNlIGUhPT1kJiYoZD1udWxsKX19UWQoYSxiLGMsZCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBSZChhKXtpZighWWEpcmV0dXJuITE7YT1cIm9uXCIrYTt2YXIgYj1hIGluIGRvY3VtZW50O2J8fChiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYi5zZXRBdHRyaWJ1dGUoYSxcInJldHVybjtcIiksYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYlthXSk7cmV0dXJuIGJ9dmFyIFNkPW5ldyAoXCJmdW5jdGlvblwiPT09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXApO2Z1bmN0aW9uIHhjKGEpe3ZhciBiPVNkLmdldChhKTt2b2lkIDA9PT1iJiYoYj1uZXcgU2V0LFNkLnNldChhLGIpKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHljKGEsYixjKXtpZighYy5oYXMoYSkpe3N3aXRjaChhKXtjYXNlIFwic2Nyb2xsXCI6TWQoYixcInNjcm9sbFwiLCEwKTticmVhaztjYXNlIFwiZm9jdXNcIjpjYXNlIFwiYmx1clwiOk1kKGIsXCJmb2N1c1wiLCEwKTtNZChiLFwiYmx1clwiLCEwKTtjLmFkZChcImJsdXJcIik7Yy5hZGQoXCJmb2N1c1wiKTticmVhaztjYXNlIFwiY2FuY2VsXCI6Y2FzZSBcImNsb3NlXCI6UmQoYSkmJk1kKGIsYSwhMCk7YnJlYWs7Y2FzZSBcImludmFsaWRcIjpjYXNlIFwic3VibWl0XCI6Y2FzZSBcInJlc2V0XCI6YnJlYWs7ZGVmYXVsdDotMT09PWNjLmluZGV4T2YoYSkmJkYoYSxiKX1jLmFkZChhKX19XG52YXIgVGQ9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLFxuZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0sVWQ9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKFRkKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe1VkLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7VGRbYl09VGRbYV19KX0pO2Z1bmN0aW9uIFZkKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxUZC5oYXNPd25Qcm9wZXJ0eShhKSYmVGRbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gV2QoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9VmQoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgWGQ9bih7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIFlkKGEsYil7aWYoYil7aWYoWGRbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih1KDEzNyxhLFwiXCIpKTtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXtpZihudWxsIT1iLmNoaWxkcmVuKXRocm93IEVycm9yKHUoNjApKTtpZighKFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmXCJfX2h0bWxcImluIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHUoNjEpKTt9aWYobnVsbCE9Yi5zdHlsZSYmXCJvYmplY3RcIiE9PXR5cGVvZiBiLnN0eWxlKXRocm93IEVycm9yKHUoNjIsXCJcIikpO319XG5mdW5jdGlvbiBaZChhLGIpe2lmKC0xPT09YS5pbmRleE9mKFwiLVwiKSlyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGIuaXM7c3dpdGNoKGEpe2Nhc2UgXCJhbm5vdGF0aW9uLXhtbFwiOmNhc2UgXCJjb2xvci1wcm9maWxlXCI6Y2FzZSBcImZvbnQtZmFjZVwiOmNhc2UgXCJmb250LWZhY2Utc3JjXCI6Y2FzZSBcImZvbnQtZmFjZS11cmlcIjpjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOmNhc2UgXCJmb250LWZhY2UtbmFtZVwiOmNhc2UgXCJtaXNzaW5nLWdseXBoXCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gJGQoYSxiKXthPTk9PT1hLm5vZGVUeXBlfHwxMT09PWEubm9kZVR5cGU/YTphLm93bmVyRG9jdW1lbnQ7dmFyIGM9eGMoYSk7Yj1qYVtiXTtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl5YyhiW2RdLGEsYyl9ZnVuY3Rpb24gYWUoKXt9XG5mdW5jdGlvbiBiZShhKXthPWF8fChcInVuZGVmaW5lZFwiIT09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCk7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtyZXR1cm4gYS5hY3RpdmVFbGVtZW50fHxhLmJvZHl9Y2F0Y2goYil7cmV0dXJuIGEuYm9keX19ZnVuY3Rpb24gY2UoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfWZ1bmN0aW9uIGRlKGEsYil7dmFyIGM9Y2UoYSk7YT0wO2Zvcih2YXIgZDtjOyl7aWYoMz09PWMubm9kZVR5cGUpe2Q9YStjLnRleHRDb250ZW50Lmxlbmd0aDtpZihhPD1iJiZkPj1iKXJldHVybntub2RlOmMsb2Zmc2V0OmItYX07YT1kfWE6e2Zvcig7Yzspe2lmKGMubmV4dFNpYmxpbmcpe2M9Yy5uZXh0U2libGluZzticmVhayBhfWM9Yy5wYXJlbnROb2RlfWM9dm9pZCAwfWM9Y2UoYyl9fVxuZnVuY3Rpb24gZWUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9lZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9ZnVuY3Rpb24gZmUoKXtmb3IodmFyIGE9d2luZG93LGI9YmUoKTtiIGluc3RhbmNlb2YgYS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgYz1cInN0cmluZ1wiPT09dHlwZW9mIGIuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmfWNhdGNoKGQpe2M9ITF9aWYoYylhPWIuY29udGVudFdpbmRvdztlbHNlIGJyZWFrO2I9YmUoYS5kb2N1bWVudCl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBnZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfXZhciBoZT1cIiRcIixpZT1cIi8kXCIsamU9XCIkP1wiLGtlPVwiJCFcIixsZT1udWxsLG1lPW51bGw7ZnVuY3Rpb24gbmUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfVxuZnVuY3Rpb24gb2UoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm9wdGlvblwiPT09YXx8XCJub3NjcmlwdFwiPT09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm51bWJlclwiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBwZT1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxxZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gcmUoYSl7Zm9yKDtudWxsIT1hO2E9YS5uZXh0U2libGluZyl7dmFyIGI9YS5ub2RlVHlwZTtpZigxPT09Ynx8Mz09PWIpYnJlYWt9cmV0dXJuIGF9XG5mdW5jdGlvbiBzZShhKXthPWEucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKGM9PT1oZXx8Yz09PWtlfHxjPT09amUpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlIGM9PT1pZSYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHRlPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLHVlPVwiX19yZWFjdEludGVybmFsSW5zdGFuY2UkXCIrdGUsdmU9XCJfX3JlYWN0RXZlbnRIYW5kbGVycyRcIit0ZSx3ZT1cIl9fcmVhY3RDb250YWluZXJlJFwiK3RlO1xuZnVuY3Rpb24gRmMoYSl7dmFyIGI9YVt1ZV07aWYoYilyZXR1cm4gYjtmb3IodmFyIGM9YS5wYXJlbnROb2RlO2M7KXtpZihiPWNbd2VdfHxjW3VlXSl7Yz1iLmFsdGVybmF0ZTtpZihudWxsIT09Yi5jaGlsZHx8bnVsbCE9PWMmJm51bGwhPT1jLmNoaWxkKWZvcihhPXNlKGEpO251bGwhPT1hOyl7aWYoYz1hW3VlXSlyZXR1cm4gYzthPXNlKGEpfXJldHVybiBifWE9YztjPWEucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDYyhhKXthPWFbdWVdfHxhW3dlXTtyZXR1cm4hYXx8NSE9PWEudGFnJiY2IT09YS50YWcmJjEzIT09YS50YWcmJjMhPT1hLnRhZz9udWxsOmF9ZnVuY3Rpb24geGUoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGEuc3RhdGVOb2RlO3Rocm93IEVycm9yKHUoMzMpKTt9ZnVuY3Rpb24geWUoYSl7cmV0dXJuIGFbdmVdfHxudWxsfXZhciB6ZT1udWxsLEFlPW51bGwsQmU9bnVsbDtcbmZ1bmN0aW9uIENlKCl7aWYoQmUpcmV0dXJuIEJlO3ZhciBhLGI9QWUsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4gemU/emUudmFsdWU6emUudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gQmU9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX12YXIgRGU9RS5leHRlbmQoe2RhdGE6bnVsbH0pLEVlPUUuZXh0ZW5kKHtkYXRhOm51bGx9KSxGZT1bOSwxMywyNywzMl0sR2U9WWEmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LEhlPW51bGw7WWEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKEhlPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgSWU9WWEmJlwiVGV4dEV2ZW50XCJpbiB3aW5kb3cmJiFIZSxKZT1ZYSYmKCFHZXx8SGUmJjg8SGUmJjExPj1IZSksS2U9U3RyaW5nLmZyb21DaGFyQ29kZSgzMiksTGU9e2JlZm9yZUlucHV0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpcIm9uQmVmb3JlSW5wdXRcIixjYXB0dXJlZDpcIm9uQmVmb3JlSW5wdXRDYXB0dXJlXCJ9LGRlcGVuZGVuY2llczpbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl19LGNvbXBvc2l0aW9uRW5kOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpcIm9uQ29tcG9zaXRpb25FbmRcIixjYXB0dXJlZDpcIm9uQ29tcG9zaXRpb25FbmRDYXB0dXJlXCJ9LGRlcGVuZGVuY2llczpcImJsdXIgY29tcG9zaXRpb25lbmQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIil9LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOlwib25Db21wb3NpdGlvblN0YXJ0XCIsXG5jYXB0dXJlZDpcIm9uQ29tcG9zaXRpb25TdGFydENhcHR1cmVcIn0sZGVwZW5kZW5jaWVzOlwiYmx1ciBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpfSxjb21wb3NpdGlvblVwZGF0ZTp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsY2FwdHVyZWQ6XCJvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZVwifSxkZXBlbmRlbmNpZXM6XCJibHVyIGNvbXBvc2l0aW9udXBkYXRlIGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpfX0sTWU9ITE7XG5mdW5jdGlvbiBOZShhLGIpe3N3aXRjaChhKXtjYXNlIFwia2V5dXBcIjpyZXR1cm4tMSE9PUZlLmluZGV4T2YoYi5rZXlDb2RlKTtjYXNlIFwia2V5ZG93blwiOnJldHVybiAyMjkhPT1iLmtleUNvZGU7Y2FzZSBcImtleXByZXNzXCI6Y2FzZSBcIm1vdXNlZG93blwiOmNhc2UgXCJibHVyXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gT2UoYSl7YT1hLmRldGFpbDtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJlwiZGF0YVwiaW4gYT9hLmRhdGE6bnVsbH12YXIgUGU9ITE7ZnVuY3Rpb24gUWUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIE9lKGIpO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDMyIT09Yi53aGljaClyZXR1cm4gbnVsbDtNZT0hMDtyZXR1cm4gS2U7Y2FzZSBcInRleHRJbnB1dFwiOnJldHVybiBhPWIuZGF0YSxhPT09S2UmJk1lP251bGw6YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIFJlKGEsYil7aWYoUGUpcmV0dXJuXCJjb21wb3NpdGlvbmVuZFwiPT09YXx8IUdlJiZOZShhLGIpPyhhPUNlKCksQmU9QWU9emU9bnVsbCxQZT0hMSxhKTpudWxsO3N3aXRjaChhKXtjYXNlIFwicGFzdGVcIjpyZXR1cm4gbnVsbDtjYXNlIFwia2V5cHJlc3NcIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gSmUmJlwia29cIiE9PWIubG9jYWxlP251bGw6Yi5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxudmFyIFNlPXtldmVudFR5cGVzOkxlLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7aWYoR2UpYjp7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIGY9TGUuY29tcG9zaXRpb25TdGFydDticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOmY9TGUuY29tcG9zaXRpb25FbmQ7YnJlYWsgYjtjYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpmPUxlLmNvbXBvc2l0aW9uVXBkYXRlO2JyZWFrIGJ9Zj12b2lkIDB9ZWxzZSBQZT9OZShhLGMpJiYoZj1MZS5jb21wb3NpdGlvbkVuZCk6XCJrZXlkb3duXCI9PT1hJiYyMjk9PT1jLmtleUNvZGUmJihmPUxlLmNvbXBvc2l0aW9uU3RhcnQpO2Y/KEplJiZcImtvXCIhPT1jLmxvY2FsZSYmKFBlfHxmIT09TGUuY29tcG9zaXRpb25TdGFydD9mPT09TGUuY29tcG9zaXRpb25FbmQmJlBlJiYoZT1DZSgpKTooemU9ZCxBZT1cInZhbHVlXCJpbiB6ZT96ZS52YWx1ZTp6ZS50ZXh0Q29udGVudCxQZT0hMCkpLGY9RGUuZ2V0UG9vbGVkKGYsXG5iLGMsZCksZT9mLmRhdGE9ZTooZT1PZShjKSxudWxsIT09ZSYmKGYuZGF0YT1lKSksU2MoZiksZT1mKTplPW51bGw7KGE9SWU/UWUoYSxjKTpSZShhLGMpKT8oYj1FZS5nZXRQb29sZWQoTGUuYmVmb3JlSW5wdXQsYixjLGQpLGIuZGF0YT1hLFNjKGIpKTpiPW51bGw7cmV0dXJuIG51bGw9PT1lP2I6bnVsbD09PWI/ZTpbZSxiXX19LFRlPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIFVlKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iPyEhVGVbYS50eXBlXTpcInRleHRhcmVhXCI9PT1iPyEwOiExfVxudmFyIFZlPXtjaGFuZ2U6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOlwib25DaGFuZ2VcIixjYXB0dXJlZDpcIm9uQ2hhbmdlQ2FwdHVyZVwifSxkZXBlbmRlbmNpZXM6XCJibHVyIGNoYW5nZSBjbGljayBmb2N1cyBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKX19O2Z1bmN0aW9uIFdlKGEsYixjKXthPUUuZ2V0UG9vbGVkKFZlLmNoYW5nZSxhLGIsYyk7YS50eXBlPVwiY2hhbmdlXCI7Y2IoYyk7U2MoYSk7cmV0dXJuIGF9dmFyIFhlPW51bGwsWWU9bnVsbDtmdW5jdGlvbiBaZShhKXtCYShhKX1mdW5jdGlvbiAkZShhKXt2YXIgYj14ZShhKTtpZih6YihiKSlyZXR1cm4gYX1mdW5jdGlvbiBhZihhLGIpe2lmKFwiY2hhbmdlXCI9PT1hKXJldHVybiBifXZhciBiZj0hMTtZYSYmKGJmPVJkKFwiaW5wdXRcIikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO1xuZnVuY3Rpb24gY2YoKXtYZSYmKFhlLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLGRmKSxZZT1YZT1udWxsKX1mdW5jdGlvbiBkZihhKXtpZihcInZhbHVlXCI9PT1hLnByb3BlcnR5TmFtZSYmJGUoWWUpKWlmKGE9V2UoWWUsYSxNYyhhKSksaWIpQmEoYSk7ZWxzZXtpYj0hMDt0cnl7ZWIoWmUsYSl9ZmluYWxseXtpYj0hMSxrYigpfX19ZnVuY3Rpb24gZWYoYSxiLGMpe1wiZm9jdXNcIj09PWE/KGNmKCksWGU9YixZZT1jLFhlLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLGRmKSk6XCJibHVyXCI9PT1hJiZjZigpfWZ1bmN0aW9uIGZmKGEpe2lmKFwic2VsZWN0aW9uY2hhbmdlXCI9PT1hfHxcImtleXVwXCI9PT1hfHxcImtleWRvd25cIj09PWEpcmV0dXJuICRlKFllKX1mdW5jdGlvbiBnZihhLGIpe2lmKFwiY2xpY2tcIj09PWEpcmV0dXJuICRlKGIpfWZ1bmN0aW9uIGhmKGEsYil7aWYoXCJpbnB1dFwiPT09YXx8XCJjaGFuZ2VcIj09PWEpcmV0dXJuICRlKGIpfVxudmFyIGpmPXtldmVudFR5cGVzOlZlLF9pc0lucHV0RXZlbnRTdXBwb3J0ZWQ6YmYsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iP3hlKGIpOndpbmRvdyxmPWUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihcInNlbGVjdFwiPT09Znx8XCJpbnB1dFwiPT09ZiYmXCJmaWxlXCI9PT1lLnR5cGUpdmFyIGc9YWY7ZWxzZSBpZihVZShlKSlpZihiZilnPWhmO2Vsc2V7Zz1mZjt2YXIgaD1lZn1lbHNlKGY9ZS5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWYudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWUudHlwZXx8XCJyYWRpb1wiPT09ZS50eXBlKSYmKGc9Z2YpO2lmKGcmJihnPWcoYSxiKSkpcmV0dXJuIFdlKGcsYyxkKTtoJiZoKGEsZSxiKTtcImJsdXJcIj09PWEmJihhPWUuX3dyYXBwZXJTdGF0ZSkmJmEuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWUudHlwZSYmRmIoZSxcIm51bWJlclwiLGUudmFsdWUpfX0sa2Y9e21vdXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6XCJvbk1vdXNlRW50ZXJcIixcbmRlcGVuZGVuY2llczpbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdfSxtb3VzZUxlYXZlOntyZWdpc3RyYXRpb25OYW1lOlwib25Nb3VzZUxlYXZlXCIsZGVwZW5kZW5jaWVzOltcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl19LHBvaW50ZXJFbnRlcjp7cmVnaXN0cmF0aW9uTmFtZTpcIm9uUG9pbnRlckVudGVyXCIsZGVwZW5kZW5jaWVzOltcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdfSxwb2ludGVyTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6XCJvblBvaW50ZXJMZWF2ZVwiLGRlcGVuZGVuY2llczpbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXX19LGxmLG1mPXtldmVudFR5cGVzOmtmLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1cIm1vdXNlb3ZlclwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YSxnPVwibW91c2VvdXRcIj09PWF8fFwicG9pbnRlcm91dFwiPT09YTtpZihmJiYwPT09KGUmMzIpJiYoYy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KXx8IWcmJiFmKXJldHVybiBudWxsO1xuZT1kLndpbmRvdz09PWQ/ZDooZT1kLm93bmVyRG9jdW1lbnQpP2UuZGVmYXVsdFZpZXd8fGUucGFyZW50V2luZG93OndpbmRvdztpZihnKXtpZihnPWIsYj0oYj1jLnJlbGF0ZWRUYXJnZXR8fGMudG9FbGVtZW50KT9GYyhiKTpudWxsLG51bGwhPT1iJiYoZj1lYyhiKSxiIT09Znx8NSE9PWIudGFnJiY2IT09Yi50YWcpKWI9bnVsbH1lbHNlIGc9bnVsbDtpZihnPT09YilyZXR1cm4gbnVsbDtpZihcIm1vdXNlb3V0XCI9PT1hfHxcIm1vdXNlb3ZlclwiPT09YSl7dmFyIGg9bmQ7dmFyIGs9a2YubW91c2VMZWF2ZTt2YXIgbD1rZi5tb3VzZUVudGVyO3ZhciBtPVwibW91c2VcIn1lbHNlIGlmKFwicG9pbnRlcm91dFwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YSloPW9kLGs9a2YucG9pbnRlckxlYXZlLGw9a2YucG9pbnRlckVudGVyLG09XCJwb2ludGVyXCI7YT1udWxsPT1nP2U6eGUoZyk7ZT1udWxsPT1iP2U6eGUoYik7az1oLmdldFBvb2xlZChrLGcsYyxkKTtrLnR5cGU9bStcImxlYXZlXCI7ay50YXJnZXQ9XG5hO2sucmVsYXRlZFRhcmdldD1lO2Q9aC5nZXRQb29sZWQobCxiLGMsZCk7ZC50eXBlPW0rXCJlbnRlclwiO2QudGFyZ2V0PWU7ZC5yZWxhdGVkVGFyZ2V0PWE7aD1nO209YjtpZihoJiZtKWE6e2w9aDthPW07Zz0wO2ZvcihiPWw7YjtiPU5jKGIpKWcrKztiPTA7Zm9yKGU9YTtlO2U9TmMoZSkpYisrO2Zvcig7MDxnLWI7KWw9TmMobCksZy0tO2Zvcig7MDxiLWc7KWE9TmMoYSksYi0tO2Zvcig7Zy0tOyl7aWYobD09PWF8fGw9PT1hLmFsdGVybmF0ZSlicmVhayBhO2w9TmMobCk7YT1OYyhhKX1sPW51bGx9ZWxzZSBsPW51bGw7YT1sO2ZvcihsPVtdO2gmJmghPT1hOyl7Zz1oLmFsdGVybmF0ZTtpZihudWxsIT09ZyYmZz09PWEpYnJlYWs7bC5wdXNoKGgpO2g9TmMoaCl9Zm9yKGg9W107bSYmbSE9PWE7KXtnPW0uYWx0ZXJuYXRlO2lmKG51bGwhPT1nJiZnPT09YSlicmVhaztoLnB1c2gobSk7bT1OYyhtKX1mb3IobT0wO208bC5sZW5ndGg7bSsrKVFjKGxbbV0sXCJidWJibGVkXCIsayk7Zm9yKG09XG5oLmxlbmd0aDswPG0tLTspUWMoaFttXSxcImNhcHR1cmVkXCIsZCk7aWYoYz09PWxmKXJldHVybiBsZj1udWxsLFtrXTtsZj1jO3JldHVybltrLGRdfX07ZnVuY3Rpb24gbmYoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBvZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpuZixwZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHFmKGEsYil7aWYob2YoYSxiKSlyZXR1cm4hMDtpZihcIm9iamVjdFwiIT09dHlwZW9mIGF8fG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGJ8fG51bGw9PT1iKXJldHVybiExO3ZhciBjPU9iamVjdC5rZXlzKGEpLGQ9T2JqZWN0LmtleXMoYik7aWYoYy5sZW5ndGghPT1kLmxlbmd0aClyZXR1cm4hMTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWlmKCFwZi5jYWxsKGIsY1tkXSl8fCFvZihhW2NbZF1dLGJbY1tkXV0pKXJldHVybiExO3JldHVybiEwfVxudmFyIHJmPVlhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsc2Y9e3NlbGVjdDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6XCJvblNlbGVjdFwiLGNhcHR1cmVkOlwib25TZWxlY3RDYXB0dXJlXCJ9LGRlcGVuZGVuY2llczpcImJsdXIgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKX19LHRmPW51bGwsdWY9bnVsbCx2Zj1udWxsLHdmPSExO1xuZnVuY3Rpb24geGYoYSxiKXt2YXIgYz1iLndpbmRvdz09PWI/Yi5kb2N1bWVudDo5PT09Yi5ub2RlVHlwZT9iOmIub3duZXJEb2N1bWVudDtpZih3Znx8bnVsbD09dGZ8fHRmIT09YmUoYykpcmV0dXJuIG51bGw7Yz10ZjtcInNlbGVjdGlvblN0YXJ0XCJpbiBjJiZnZShjKT9jPXtzdGFydDpjLnNlbGVjdGlvblN0YXJ0LGVuZDpjLnNlbGVjdGlvbkVuZH06KGM9KGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLGM9e2FuY2hvck5vZGU6Yy5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpjLmFuY2hvck9mZnNldCxmb2N1c05vZGU6Yy5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6Yy5mb2N1c09mZnNldH0pO3JldHVybiB2ZiYmcWYodmYsYyk/bnVsbDoodmY9YyxhPUUuZ2V0UG9vbGVkKHNmLnNlbGVjdCx1ZixhLGIpLGEudHlwZT1cInNlbGVjdFwiLGEudGFyZ2V0PXRmLFNjKGEpLGEpfVxudmFyIHlmPXtldmVudFR5cGVzOnNmLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZC53aW5kb3c9PT1kP2QuZG9jdW1lbnQ6OT09PWQubm9kZVR5cGU/ZDpkLm93bmVyRG9jdW1lbnQsZjtpZighKGY9IWUpKXthOntlPXhjKGUpO2Y9amEub25TZWxlY3Q7Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspaWYoIWUuaGFzKGZbZ10pKXtlPSExO2JyZWFrIGF9ZT0hMH1mPSFlfWlmKGYpcmV0dXJuIG51bGw7ZT1iP3hlKGIpOndpbmRvdztzd2l0Y2goYSl7Y2FzZSBcImZvY3VzXCI6aWYoVWUoZSl8fFwidHJ1ZVwiPT09ZS5jb250ZW50RWRpdGFibGUpdGY9ZSx1Zj1iLHZmPW51bGw7YnJlYWs7Y2FzZSBcImJsdXJcIjp2Zj11Zj10Zj1udWxsO2JyZWFrO2Nhc2UgXCJtb3VzZWRvd25cIjp3Zj0hMDticmVhaztjYXNlIFwiY29udGV4dG1lbnVcIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJkcmFnZW5kXCI6cmV0dXJuIHdmPSExLHhmKGMsZCk7Y2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOmlmKHJmKWJyZWFrO1xuY2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpyZXR1cm4geGYoYyxkKX1yZXR1cm4gbnVsbH19O0NhLmluamVjdEV2ZW50UGx1Z2luT3JkZXIoXCJSZXNwb25kZXJFdmVudFBsdWdpbiBTaW1wbGVFdmVudFBsdWdpbiBFbnRlckxlYXZlRXZlbnRQbHVnaW4gQ2hhbmdlRXZlbnRQbHVnaW4gU2VsZWN0RXZlbnRQbHVnaW4gQmVmb3JlSW5wdXRFdmVudFBsdWdpblwiLnNwbGl0KFwiIFwiKSk7dmFyIHpmPUNjO3NhPXllO3VhPXpmO3ZhPXhlO0NhLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7U2ltcGxlRXZlbnRQbHVnaW46RWQsRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOm1mLENoYW5nZUV2ZW50UGx1Z2luOmpmLFNlbGVjdEV2ZW50UGx1Z2luOnlmLEJlZm9yZUlucHV0RXZlbnRQbHVnaW46U2V9KTtuZXcgU2V0O3ZhciBBZj1bXSxCZj0tMTtmdW5jdGlvbiBHKGEpezA+QmZ8fChhLmN1cnJlbnQ9QWZbQmZdLEFmW0JmXT1udWxsLEJmLS0pfVxuZnVuY3Rpb24gSShhLGIpe0JmKys7QWZbQmZdPWEuY3VycmVudDthLmN1cnJlbnQ9Yn12YXIgQ2Y9e30sSj17Y3VycmVudDpDZn0sSz17Y3VycmVudDohMX0sRGY9Q2Y7ZnVuY3Rpb24gRWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBDZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1mdW5jdGlvbiBMKGEpe2E9YS5jaGlsZENvbnRleHRUeXBlcztyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF9XG5mdW5jdGlvbiBGZihhKXtHKEssYSk7RyhKLGEpfWZ1bmN0aW9uIEdmKGEpe0coSyxhKTtHKEosYSl9ZnVuY3Rpb24gSGYoYSxiLGMpe2lmKEouY3VycmVudCE9PUNmKXRocm93IEVycm9yKHUoMTY4KSk7SShKLGIsYSk7SShLLGMsYSl9ZnVuY3Rpb24gSWYoYSxiLGMpe3ZhciBkPWEuc3RhdGVOb2RlO2E9Yi5jaGlsZENvbnRleHRUeXBlcztpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZC5nZXRDaGlsZENvbnRleHQpcmV0dXJuIGM7ZD1kLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgZSBpbiBkKWlmKCEoZSBpbiBhKSl0aHJvdyBFcnJvcih1KDEwOCxXYShiKXx8XCJVbmtub3duXCIsZSkpO3JldHVybiBuKHt9LGMse30sZCl9ZnVuY3Rpb24gSmYoYSl7dmFyIGI9YS5zdGF0ZU5vZGU7Yj1iJiZiLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxDZjtEZj1KLmN1cnJlbnQ7SShKLGIsYSk7SShLLEsuY3VycmVudCxhKTtyZXR1cm4hMH1cbmZ1bmN0aW9uIEtmKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtpZighZCl0aHJvdyBFcnJvcih1KDE2OSkpO2M/KGI9SWYoYSxiLERmKSxkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWIsRyhLLGEpLEcoSixhKSxJKEosYixhKSk6RyhLLGEpO0koSyxjLGEpfVxudmFyIExmPXEudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LE1mPXEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxOZj1xLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLE9mPXEudW5zdGFibGVfc2hvdWxkWWllbGQsUGY9cS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsUWY9cS51bnN0YWJsZV9ub3csUmY9cS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxTZj1xLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFRmPXEudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksVWY9cS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxWZj1xLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFdmPXEudW5zdGFibGVfSWRsZVByaW9yaXR5LFhmPXt9LFlmPXZvaWQgMCE9PVBmP1BmOmZ1bmN0aW9uKCl7fSxaZj1udWxsLCRmPW51bGwsYWc9ITEsYmc9UWYoKSxjZz0xRTQ+Ymc/UWY6ZnVuY3Rpb24oKXtyZXR1cm4gUWYoKS1iZ307XG5mdW5jdGlvbiBkZygpe3N3aXRjaChSZigpKXtjYXNlIFNmOnJldHVybiA5OTtjYXNlIFRmOnJldHVybiA5ODtjYXNlIFVmOnJldHVybiA5NztjYXNlIFZmOnJldHVybiA5NjtjYXNlIFdmOnJldHVybiA5NTtkZWZhdWx0OnRocm93IEVycm9yKHUoMzMyKSk7fX1mdW5jdGlvbiBlZyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gU2Y7Y2FzZSA5ODpyZXR1cm4gVGY7Y2FzZSA5NzpyZXR1cm4gVWY7Y2FzZSA5NjpyZXR1cm4gVmY7Y2FzZSA5NTpyZXR1cm4gV2Y7ZGVmYXVsdDp0aHJvdyBFcnJvcih1KDMzMikpO319ZnVuY3Rpb24gZmcoYSxiKXthPWVnKGEpO3JldHVybiBMZihhLGIpfWZ1bmN0aW9uIGdnKGEsYixjKXthPWVnKGEpO3JldHVybiBNZihhLGIsYyl9ZnVuY3Rpb24gaGcoYSl7bnVsbD09PVpmPyhaZj1bYV0sJGY9TWYoU2YsaWcpKTpaZi5wdXNoKGEpO3JldHVybiBYZn1mdW5jdGlvbiBqZygpe2lmKG51bGwhPT0kZil7dmFyIGE9JGY7JGY9bnVsbDtOZihhKX1pZygpfVxuZnVuY3Rpb24gaWcoKXtpZighYWcmJm51bGwhPT1aZil7YWc9ITA7dmFyIGE9MDt0cnl7dmFyIGI9WmY7ZmcoOTksZnVuY3Rpb24oKXtmb3IoO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1iW2FdO2RvIGM9YyghMCk7d2hpbGUobnVsbCE9PWMpfX0pO1pmPW51bGx9Y2F0Y2goYyl7dGhyb3cgbnVsbCE9PVpmJiYoWmY9WmYuc2xpY2UoYSsxKSksTWYoU2YsamcpLGM7fWZpbmFsbHl7YWc9ITF9fX12YXIga2c9MztmdW5jdGlvbiBsZyhhLGIsYyl7Yy89MTA7cmV0dXJuIDEwNzM3NDE4MjEtKCgoMTA3Mzc0MTgyMS1hK2IvMTApL2N8MCkrMSkqY31mdW5jdGlvbiBtZyhhLGIpe2lmKGEmJmEuZGVmYXVsdFByb3BzKXtiPW4oe30sYik7YT1hLmRlZmF1bHRQcm9wcztmb3IodmFyIGMgaW4gYSl2b2lkIDA9PT1iW2NdJiYoYltjXT1hW2NdKX1yZXR1cm4gYn12YXIgbmc9e2N1cnJlbnQ6bnVsbH0sb2c9bnVsbCxwZz1udWxsLHFnPW51bGw7ZnVuY3Rpb24gcmcoKXtxZz1wZz1vZz1udWxsfVxuZnVuY3Rpb24gc2coYSxiKXt2YXIgYz1hLnR5cGUuX2NvbnRleHQ7SShuZyxjLl9jdXJyZW50VmFsdWUsYSk7Yy5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gdGcoYSl7dmFyIGI9bmcuY3VycmVudDtHKG5nLGEpO2EudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gdWcoYSxiKXtmb3IoO251bGwhPT1hOyl7dmFyIGM9YS5hbHRlcm5hdGU7aWYoYS5jaGlsZEV4cGlyYXRpb25UaW1lPGIpYS5jaGlsZEV4cGlyYXRpb25UaW1lPWIsbnVsbCE9PWMmJmMuY2hpbGRFeHBpcmF0aW9uVGltZTxiJiYoYy5jaGlsZEV4cGlyYXRpb25UaW1lPWIpO2Vsc2UgaWYobnVsbCE9PWMmJmMuY2hpbGRFeHBpcmF0aW9uVGltZTxiKWMuY2hpbGRFeHBpcmF0aW9uVGltZT1iO2Vsc2UgYnJlYWs7YT1hLnJldHVybn19XG5mdW5jdGlvbiB2ZyhhLGIpe29nPWE7cWc9cGc9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJihhLmV4cGlyYXRpb25UaW1lPj1iJiYod2c9ITApLGEuZmlyc3RDb250ZXh0PW51bGwpfWZ1bmN0aW9uIHhnKGEsYil7aWYocWchPT1hJiYhMSE9PWImJjAhPT1iKXtpZihcIm51bWJlclwiIT09dHlwZW9mIGJ8fDEwNzM3NDE4MjM9PT1iKXFnPWEsYj0xMDczNzQxODIzO2I9e2NvbnRleHQ6YSxvYnNlcnZlZEJpdHM6YixuZXh0Om51bGx9O2lmKG51bGw9PT1wZyl7aWYobnVsbD09PW9nKXRocm93IEVycm9yKHUoMzA4KSk7cGc9YjtvZy5kZXBlbmRlbmNpZXM9e2V4cGlyYXRpb25UaW1lOjAsZmlyc3RDb250ZXh0OmIscmVzcG9uZGVyczpudWxsfX1lbHNlIHBnPXBnLm5leHQ9Yn1yZXR1cm4gYS5fY3VycmVudFZhbHVlfXZhciB5Zz0hMTtcbmZ1bmN0aW9uIHpnKGEpe3JldHVybntiYXNlU3RhdGU6YSxmaXJzdFVwZGF0ZTpudWxsLGxhc3RVcGRhdGU6bnVsbCxmaXJzdENhcHR1cmVkVXBkYXRlOm51bGwsbGFzdENhcHR1cmVkVXBkYXRlOm51bGwsZmlyc3RFZmZlY3Q6bnVsbCxsYXN0RWZmZWN0Om51bGwsZmlyc3RDYXB0dXJlZEVmZmVjdDpudWxsLGxhc3RDYXB0dXJlZEVmZmVjdDpudWxsfX1mdW5jdGlvbiBBZyhhKXtyZXR1cm57YmFzZVN0YXRlOmEuYmFzZVN0YXRlLGZpcnN0VXBkYXRlOmEuZmlyc3RVcGRhdGUsbGFzdFVwZGF0ZTphLmxhc3RVcGRhdGUsZmlyc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGxhc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGZpcnN0RWZmZWN0Om51bGwsbGFzdEVmZmVjdDpudWxsLGZpcnN0Q2FwdHVyZWRFZmZlY3Q6bnVsbCxsYXN0Q2FwdHVyZWRFZmZlY3Q6bnVsbH19XG5mdW5jdGlvbiBCZyhhLGIpe3JldHVybntleHBpcmF0aW9uVGltZTphLHN1c3BlbnNlQ29uZmlnOmIsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsLG5leHRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gQ2coYSxiKXtudWxsPT09YS5sYXN0VXBkYXRlP2EuZmlyc3RVcGRhdGU9YS5sYXN0VXBkYXRlPWI6KGEubGFzdFVwZGF0ZS5uZXh0PWIsYS5sYXN0VXBkYXRlPWIpfVxuZnVuY3Rpb24gRGcoYSxiKXt2YXIgYz1hLmFsdGVybmF0ZTtpZihudWxsPT09Yyl7dmFyIGQ9YS51cGRhdGVRdWV1ZTt2YXIgZT1udWxsO251bGw9PT1kJiYoZD1hLnVwZGF0ZVF1ZXVlPXpnKGEubWVtb2l6ZWRTdGF0ZSkpfWVsc2UgZD1hLnVwZGF0ZVF1ZXVlLGU9Yy51cGRhdGVRdWV1ZSxudWxsPT09ZD9udWxsPT09ZT8oZD1hLnVwZGF0ZVF1ZXVlPXpnKGEubWVtb2l6ZWRTdGF0ZSksZT1jLnVwZGF0ZVF1ZXVlPXpnKGMubWVtb2l6ZWRTdGF0ZSkpOmQ9YS51cGRhdGVRdWV1ZT1BZyhlKTpudWxsPT09ZSYmKGU9Yy51cGRhdGVRdWV1ZT1BZyhkKSk7bnVsbD09PWV8fGQ9PT1lP0NnKGQsYik6bnVsbD09PWQubGFzdFVwZGF0ZXx8bnVsbD09PWUubGFzdFVwZGF0ZT8oQ2coZCxiKSxDZyhlLGIpKTooQ2coZCxiKSxlLmxhc3RVcGRhdGU9Yil9XG5mdW5jdGlvbiBFZyhhLGIpe3ZhciBjPWEudXBkYXRlUXVldWU7Yz1udWxsPT09Yz9hLnVwZGF0ZVF1ZXVlPXpnKGEubWVtb2l6ZWRTdGF0ZSk6RmcoYSxjKTtudWxsPT09Yy5sYXN0Q2FwdHVyZWRVcGRhdGU/Yy5maXJzdENhcHR1cmVkVXBkYXRlPWMubGFzdENhcHR1cmVkVXBkYXRlPWI6KGMubGFzdENhcHR1cmVkVXBkYXRlLm5leHQ9YixjLmxhc3RDYXB0dXJlZFVwZGF0ZT1iKX1mdW5jdGlvbiBGZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1jJiZiPT09Yy51cGRhdGVRdWV1ZSYmKGI9YS51cGRhdGVRdWV1ZT1BZyhiKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBHZyhhLGIsYyxkLGUsZil7c3dpdGNoKGMudGFnKXtjYXNlIDE6cmV0dXJuIGE9Yy5wYXlsb2FkLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2EuY2FsbChmLGQsZSk6YTtjYXNlIDM6YS5lZmZlY3RUYWc9YS5lZmZlY3RUYWcmLTQwOTd8NjQ7Y2FzZSAwOmE9Yy5wYXlsb2FkO2U9XCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YS5jYWxsKGYsZCxlKTphO2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKWJyZWFrO3JldHVybiBuKHt9LGQsZSk7Y2FzZSAyOnlnPSEwfXJldHVybiBkfVxuZnVuY3Rpb24gSGcoYSxiLGMsZCxlKXt5Zz0hMTtiPUZnKGEsYik7Zm9yKHZhciBmPWIuYmFzZVN0YXRlLGc9bnVsbCxoPTAsaz1iLmZpcnN0VXBkYXRlLGw9ZjtudWxsIT09azspe3ZhciBtPWsuZXhwaXJhdGlvblRpbWU7bTxlPyhudWxsPT09ZyYmKGc9ayxmPWwpLGg8bSYmKGg9bSkpOihJZyhtLGsuc3VzcGVuc2VDb25maWcpLGw9R2coYSxiLGssbCxjLGQpLG51bGwhPT1rLmNhbGxiYWNrJiYoYS5lZmZlY3RUYWd8PTMyLGsubmV4dEVmZmVjdD1udWxsLG51bGw9PT1iLmxhc3RFZmZlY3Q/Yi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9azooYi5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9ayxiLmxhc3RFZmZlY3Q9aykpKTtrPWsubmV4dH1tPW51bGw7Zm9yKGs9Yi5maXJzdENhcHR1cmVkVXBkYXRlO251bGwhPT1rOyl7dmFyIEM9ay5leHBpcmF0aW9uVGltZTtDPGU/KG51bGw9PT1tJiYobT1rLG51bGw9PT1nJiYoZj1sKSksaDxDJiYoaD1DKSk6KGw9R2coYSxiLGssbCxjLGQpLG51bGwhPT1cbmsuY2FsbGJhY2smJihhLmVmZmVjdFRhZ3w9MzIsay5uZXh0RWZmZWN0PW51bGwsbnVsbD09PWIubGFzdENhcHR1cmVkRWZmZWN0P2IuZmlyc3RDYXB0dXJlZEVmZmVjdD1iLmxhc3RDYXB0dXJlZEVmZmVjdD1rOihiLmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0PWssYi5sYXN0Q2FwdHVyZWRFZmZlY3Q9aykpKTtrPWsubmV4dH1udWxsPT09ZyYmKGIubGFzdFVwZGF0ZT1udWxsKTtudWxsPT09bT9iLmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsOmEuZWZmZWN0VGFnfD0zMjtudWxsPT09ZyYmbnVsbD09PW0mJihmPWwpO2IuYmFzZVN0YXRlPWY7Yi5maXJzdFVwZGF0ZT1nO2IuZmlyc3RDYXB0dXJlZFVwZGF0ZT1tO0pnKGgpO2EuZXhwaXJhdGlvblRpbWU9aDthLm1lbW9pemVkU3RhdGU9bH1cbmZ1bmN0aW9uIEtnKGEsYixjKXtudWxsIT09Yi5maXJzdENhcHR1cmVkVXBkYXRlJiYobnVsbCE9PWIubGFzdFVwZGF0ZSYmKGIubGFzdFVwZGF0ZS5uZXh0PWIuZmlyc3RDYXB0dXJlZFVwZGF0ZSxiLmxhc3RVcGRhdGU9Yi5sYXN0Q2FwdHVyZWRVcGRhdGUpLGIuZmlyc3RDYXB0dXJlZFVwZGF0ZT1iLmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsKTtMZyhiLmZpcnN0RWZmZWN0LGMpO2IuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PW51bGw7TGcoYi5maXJzdENhcHR1cmVkRWZmZWN0LGMpO2IuZmlyc3RDYXB0dXJlZEVmZmVjdD1iLmxhc3RDYXB0dXJlZEVmZmVjdD1udWxsfWZ1bmN0aW9uIExnKGEsYil7Zm9yKDtudWxsIT09YTspe3ZhciBjPWEuY2FsbGJhY2s7aWYobnVsbCE9PWMpe2EuY2FsbGJhY2s9bnVsbDt2YXIgZD1iO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBjKXRocm93IEVycm9yKHUoMTkxLGMpKTtjLmNhbGwoZCl9YT1hLm5leHRFZmZlY3R9fVxudmFyIE1nPUVhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLE5nPShuZXcgYWEuQ29tcG9uZW50KS5yZWZzO2Z1bmN0aW9uIE9nKGEsYixjLGQpe2I9YS5tZW1vaXplZFN0YXRlO2M9YyhkLGIpO2M9bnVsbD09PWN8fHZvaWQgMD09PWM/YjpuKHt9LGIsYyk7YS5tZW1vaXplZFN0YXRlPWM7ZD1hLnVwZGF0ZVF1ZXVlO251bGwhPT1kJiYwPT09YS5leHBpcmF0aW9uVGltZSYmKGQuYmFzZVN0YXRlPWMpfVxudmFyIFNnPXtpc01vdW50ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5fcmVhY3RJbnRlcm5hbEZpYmVyKT9lYyhhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsRmliZXI7dmFyIGQ9UGcoKSxlPU1nLnN1c3BlbnNlO2Q9UWcoZCxhLGUpO2U9QmcoZCxlKTtlLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGUuY2FsbGJhY2s9Yyk7RGcoYSxlKTtSZyhhLGQpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgZD1QZygpLGU9TWcuc3VzcGVuc2U7ZD1RZyhkLGEsZSk7ZT1CZyhkLGUpO2UudGFnPTE7ZS5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihlLmNhbGxiYWNrPWMpO0RnKGEsZSk7UmcoYSxkKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGEsYil7YT1hLl9yZWFjdEludGVybmFsRmliZXI7dmFyIGM9UGcoKSxkPU1nLnN1c3BlbnNlO1xuYz1RZyhjLGEsZCk7ZD1CZyhjLGQpO2QudGFnPTI7dm9pZCAwIT09YiYmbnVsbCE9PWImJihkLmNhbGxiYWNrPWIpO0RnKGEsZCk7UmcoYSxjKX19O2Z1bmN0aW9uIFRnKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKGQsZixnKTpiLnByb3RvdHlwZSYmYi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IXFmKGMsZCl8fCFxZihlLGYpOiEwfVxuZnVuY3Rpb24gVWcoYSxiLGMpe3ZhciBkPSExLGU9Q2Y7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2Y9eGcoZik6KGU9TChiKT9EZjpKLmN1cnJlbnQsZD1iLmNvbnRleHRUeXBlcyxmPShkPW51bGwhPT1kJiZ2b2lkIDAhPT1kKT9FZihhLGUpOkNmKTtiPW5ldyBiKGMsZik7YS5tZW1vaXplZFN0YXRlPW51bGwhPT1iLnN0YXRlJiZ2b2lkIDAhPT1iLnN0YXRlP2Iuc3RhdGU6bnVsbDtiLnVwZGF0ZXI9U2c7YS5zdGF0ZU5vZGU9YjtiLl9yZWFjdEludGVybmFsRmliZXI9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifVxuZnVuY3Rpb24gVmcoYSxiLGMsZCl7YT1iLnN0YXRlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7Yi5zdGF0ZSE9PWEmJlNnLmVucXVldWVSZXBsYWNlU3RhdGUoYixiLnN0YXRlLG51bGwpfVxuZnVuY3Rpb24gV2coYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1OZzt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/ZS5jb250ZXh0PXhnKGYpOihmPUwoYik/RGY6Si5jdXJyZW50LGUuY29udGV4dD1FZihhLGYpKTtmPWEudXBkYXRlUXVldWU7bnVsbCE9PWYmJihIZyhhLGYsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtmPWIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYoT2coYSxiLGYsYyksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGUuY29tcG9uZW50V2lsbE1vdW50fHwoYj1lLnN0YXRlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudCYmZS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxiIT09ZS5zdGF0ZSYmU2cuZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLGUuc3RhdGUsbnVsbCksZj1hLnVwZGF0ZVF1ZXVlLG51bGwhPT1mJiYoSGcoYSxmLGMsZSxkKSxlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSkpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudERpZE1vdW50JiYoYS5lZmZlY3RUYWd8PTQpfXZhciBYZz1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gWWcoYSxiLGMpe2E9Yy5yZWY7aWYobnVsbCE9PWEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZcIm9iamVjdFwiIT09dHlwZW9mIGEpe2lmKGMuX293bmVyKXtjPWMuX293bmVyO2lmKGMpe2lmKDEhPT1jLnRhZyl0aHJvdyBFcnJvcih1KDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKHUoMTQ3LGEpKTt2YXIgZT1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZSlyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1kLnJlZnM7Yj09PU5nJiYoYj1kLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2VdOmJbZV09YX07Yi5fc3RyaW5nUmVmPWU7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHUoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHUoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiBaZyhhLGIpe2lmKFwidGV4dGFyZWFcIiE9PWEudHlwZSl0aHJvdyBFcnJvcih1KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YixcIlwiKSk7fVxuZnVuY3Rpb24gJGcoYSl7ZnVuY3Rpb24gYihiLGMpe2lmKGEpe3ZhciBkPWIubGFzdEVmZmVjdDtudWxsIT09ZD8oZC5uZXh0RWZmZWN0PWMsYi5sYXN0RWZmZWN0PWMpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PWM7Yy5uZXh0RWZmZWN0PW51bGw7Yy5lZmZlY3RUYWc9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIsYyl7YT1haChhLGIsYyk7YS5pbmRleD0wO2Euc2libGluZz1udWxsO3JldHVybiBhfWZ1bmN0aW9uIGYoYixjLGQpe2IuaW5kZXg9ZDtpZighYSlyZXR1cm4gYztkPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1kKXJldHVybiBkPWQuaW5kZXgsZDxjPyhiLmVmZmVjdFRhZz1cbjIsYyk6ZDtiLmVmZmVjdFRhZz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5lZmZlY3RUYWc9Mik7cmV0dXJuIGJ9ZnVuY3Rpb24gaChhLGIsYyxkKXtpZihudWxsPT09Ynx8NiE9PWIudGFnKXJldHVybiBiPWJoKGMsYS5tb2RlLGQpLGIucmV0dXJuPWEsYjtiPWUoYixjLGQpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyxkKSxkLnJlZj1ZZyhhLGIsYyksZC5yZXR1cm49YSxkO2Q9Y2goYy50eXBlLGMua2V5LGMucHJvcHMsbnVsbCxhLm1vZGUsZCk7ZC5yZWY9WWcoYSxiLGMpO2QucmV0dXJuPWE7cmV0dXJuIGR9ZnVuY3Rpb24gbChhLGIsYyxkKXtpZihudWxsPT09Ynx8NCE9PWIudGFnfHxiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Yy5jb250YWluZXJJbmZvfHxiLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PVxuYy5pbXBsZW1lbnRhdGlvbilyZXR1cm4gYj1kaChjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYy5jaGlsZHJlbnx8W10sZCk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBtKGEsYixjLGQsZil7aWYobnVsbD09PWJ8fDchPT1iLnRhZylyZXR1cm4gYj1laChjLGEubW9kZSxkLGYpLGIucmV0dXJuPWEsYjtiPWUoYixjLGQpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gQyhhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9YmgoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2UgR2E6cmV0dXJuIGM9Y2goYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksYy5yZWY9WWcoYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIEhhOnJldHVybiBiPWRoKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYn1pZihYZyhiKXx8XG5VYShiKSlyZXR1cm4gYj1laChiLGEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjtaZyhhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2UgR2E6cmV0dXJuIGMua2V5PT09ZT9jLnR5cGU9PT1JYT9tKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsZSk6ayhhLGIsYyxkKTpudWxsO2Nhc2UgSGE6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGx9aWYoWGcoYyl8fFVhKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm0oYSxiLGMsZCxudWxsKTtaZyhhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIEgoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1cbmEuZ2V0KGMpfHxudWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBHYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09SWE/bShiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgSGE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSl9aWYoWGcoZCl8fFVhKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG0oYixhLGQsZSxudWxsKTtaZyhiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHooZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsbT1udWxsLHI9Zyx4PWc9MCxBPW51bGw7bnVsbCE9PXImJng8aC5sZW5ndGg7eCsrKXtyLmluZGV4Png/KEE9cixyPW51bGwpOkE9ci5zaWJsaW5nO3ZhciBwPXkoZSxyLGhbeF0sayk7aWYobnVsbD09PXApe251bGw9PT1yJiYocj1BKTticmVha31hJiZcbnImJm51bGw9PT1wLmFsdGVybmF0ZSYmYihlLHIpO2c9ZihwLGcseCk7bnVsbD09PW0/bD1wOm0uc2libGluZz1wO209cDtyPUF9aWYoeD09PWgubGVuZ3RoKXJldHVybiBjKGUsciksbDtpZihudWxsPT09cil7Zm9yKDt4PGgubGVuZ3RoO3grKylyPUMoZSxoW3hdLGspLG51bGwhPT1yJiYoZz1mKHIsZyx4KSxudWxsPT09bT9sPXI6bS5zaWJsaW5nPXIsbT1yKTtyZXR1cm4gbH1mb3Iocj1kKGUscik7eDxoLmxlbmd0aDt4KyspQT1IKHIsZSx4LGhbeF0sayksbnVsbCE9PUEmJihhJiZudWxsIT09QS5hbHRlcm5hdGUmJnIuZGVsZXRlKG51bGw9PT1BLmtleT94OkEua2V5KSxnPWYoQSxnLHgpLG51bGw9PT1tP2w9QTptLnNpYmxpbmc9QSxtPUEpO2EmJnIuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9ZnVuY3Rpb24gdGEoZSxnLGgsayl7dmFyIGw9VWEoaCk7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGwpdGhyb3cgRXJyb3IodSgxNTApKTtoPWwuY2FsbChoKTtcbmlmKG51bGw9PWgpdGhyb3cgRXJyb3IodSgxNTEpKTtmb3IodmFyIG09bD1udWxsLHI9Zyx4PWc9MCxBPW51bGwscD1oLm5leHQoKTtudWxsIT09ciYmIXAuZG9uZTt4KysscD1oLm5leHQoKSl7ci5pbmRleD54PyhBPXIscj1udWxsKTpBPXIuc2libGluZzt2YXIgej15KGUscixwLnZhbHVlLGspO2lmKG51bGw9PT16KXtudWxsPT09ciYmKHI9QSk7YnJlYWt9YSYmciYmbnVsbD09PXouYWx0ZXJuYXRlJiZiKGUscik7Zz1mKHosZyx4KTtudWxsPT09bT9sPXo6bS5zaWJsaW5nPXo7bT16O3I9QX1pZihwLmRvbmUpcmV0dXJuIGMoZSxyKSxsO2lmKG51bGw9PT1yKXtmb3IoOyFwLmRvbmU7eCsrLHA9aC5uZXh0KCkpcD1DKGUscC52YWx1ZSxrKSxudWxsIT09cCYmKGc9ZihwLGcseCksbnVsbD09PW0/bD1wOm0uc2libGluZz1wLG09cCk7cmV0dXJuIGx9Zm9yKHI9ZChlLHIpOyFwLmRvbmU7eCsrLHA9aC5uZXh0KCkpcD1IKHIsZSx4LHAudmFsdWUsayksbnVsbCE9PXAmJihhJiZudWxsIT09XG5wLmFsdGVybmF0ZSYmci5kZWxldGUobnVsbD09PXAua2V5P3g6cC5rZXkpLGc9ZihwLGcseCksbnVsbD09PW0/bD1wOm0uc2libGluZz1wLG09cCk7YSYmci5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtyZXR1cm4gbH1yZXR1cm4gZnVuY3Rpb24oYSxkLGYsaCl7dmFyIGs9XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZiYmZi50eXBlPT09SWEmJm51bGw9PT1mLmtleTtrJiYoZj1mLnByb3BzLmNoaWxkcmVuKTt2YXIgbD1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mO2lmKGwpc3dpdGNoKGYuJCR0eXBlb2Ype2Nhc2UgR2E6YTp7bD1mLmtleTtmb3Ioaz1kO251bGwhPT1rOyl7aWYoay5rZXk9PT1sKWlmKDc9PT1rLnRhZz9mLnR5cGU9PT1JYTprLmVsZW1lbnRUeXBlPT09Zi50eXBlKXtjKGEsay5zaWJsaW5nKTtkPWUoayxmLnR5cGU9PT1JYT9mLnByb3BzLmNoaWxkcmVuOmYucHJvcHMsaCk7ZC5yZWY9WWcoYSxrLGYpO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9ZWxzZXtjKGEsXG5rKTticmVha31lbHNlIGIoYSxrKTtrPWsuc2libGluZ31mLnR5cGU9PT1JYT8oZD1laChmLnByb3BzLmNoaWxkcmVuLGEubW9kZSxoLGYua2V5KSxkLnJldHVybj1hLGE9ZCk6KGg9Y2goZi50eXBlLGYua2V5LGYucHJvcHMsbnVsbCxhLm1vZGUsaCksaC5yZWY9WWcoYSxkLGYpLGgucmV0dXJuPWEsYT1oKX1yZXR1cm4gZyhhKTtjYXNlIEhhOmE6e2ZvcihrPWYua2V5O251bGwhPT1kOyl7aWYoZC5rZXk9PT1rKWlmKDQ9PT1kLnRhZyYmZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtjKGEsZC5zaWJsaW5nKTtkPWUoZCxmLmNoaWxkcmVufHxbXSxoKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWVsc2V7YyhhLGQpO2JyZWFrfWVsc2UgYihhLGQpO2Q9ZC5zaWJsaW5nfWQ9ZGgoZixhLm1vZGUsaCk7ZC5yZXR1cm49YTthPWR9cmV0dXJuIGcoYSl9aWYoXCJzdHJpbmdcIj09PVxudHlwZW9mIGZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZilyZXR1cm4gZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZixoKSxkLnJldHVybj1hLGE9ZCk6KGMoYSxkKSxkPWJoKGYsYS5tb2RlLGgpLGQucmV0dXJuPWEsYT1kKSxnKGEpO2lmKFhnKGYpKXJldHVybiB6KGEsZCxmLGgpO2lmKFVhKGYpKXJldHVybiB0YShhLGQsZixoKTtsJiZaZyhhLGYpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZiYmIWspc3dpdGNoKGEudGFnKXtjYXNlIDE6Y2FzZSAwOnRocm93IGE9YS50eXBlLEVycm9yKHUoMTUyLGEuZGlzcGxheU5hbWV8fGEubmFtZXx8XCJDb21wb25lbnRcIikpO31yZXR1cm4gYyhhLGQpfX12YXIgZmg9JGcoITApLGdoPSRnKCExKSxoaD17fSxpaD17Y3VycmVudDpoaH0samg9e2N1cnJlbnQ6aGh9LGtoPXtjdXJyZW50OmhofTtmdW5jdGlvbiBsaChhKXtpZihhPT09aGgpdGhyb3cgRXJyb3IodSgxNzQpKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIG1oKGEsYil7SShraCxiLGEpO0koamgsYSxhKTtJKGloLGhoLGEpO3ZhciBjPWIubm9kZVR5cGU7c3dpdGNoKGMpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOlFiKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDpjPTg9PT1jP2IucGFyZW50Tm9kZTpiLGI9Yy5uYW1lc3BhY2VVUkl8fG51bGwsYz1jLnRhZ05hbWUsYj1RYihiLGMpfUcoaWgsYSk7SShpaCxiLGEpfWZ1bmN0aW9uIG5oKGEpe0coaWgsYSk7RyhqaCxhKTtHKGtoLGEpfWZ1bmN0aW9uIG9oKGEpe2xoKGtoLmN1cnJlbnQpO3ZhciBiPWxoKGloLmN1cnJlbnQpO3ZhciBjPVFiKGIsYS50eXBlKTtiIT09YyYmKEkoamgsYSxhKSxJKGloLGMsYSkpfWZ1bmN0aW9uIHBoKGEpe2poLmN1cnJlbnQ9PT1hJiYoRyhpaCxhKSxHKGpoLGEpKX12YXIgTT17Y3VycmVudDowfTtcbmZ1bmN0aW9uIHFoKGEpe2Zvcih2YXIgYj1hO251bGwhPT1iOyl7aWYoMTM9PT1iLnRhZyl7dmFyIGM9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbD09PWN8fGMuZGF0YT09PWplfHxjLmRhdGE9PT1rZSkpcmV0dXJuIGJ9ZWxzZSBpZigxOT09PWIudGFnJiZ2b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpe2lmKDAhPT0oYi5lZmZlY3RUYWcmNjQpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiByaChhLGIpe3JldHVybntyZXNwb25kZXI6YSxwcm9wczpifX1cbnZhciBzaD1FYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLE49RWEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsdGg9MCx1aD1udWxsLE89bnVsbCx2aD1udWxsLHdoPW51bGwsUD1udWxsLHhoPW51bGwseWg9MCx6aD1udWxsLEFoPTAsQmg9ITEsQ2g9bnVsbCxHaD0wO2Z1bmN0aW9uIFEoKXt0aHJvdyBFcnJvcih1KDMyMSkpO31mdW5jdGlvbiBIaChhLGIpe2lmKG51bGw9PT1iKXJldHVybiExO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGgmJmM8YS5sZW5ndGg7YysrKWlmKCFvZihhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfVxuZnVuY3Rpb24gSWgoYSxiLGMsZCxlLGYpe3RoPWY7dWg9Yjt2aD1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbDtzaC5jdXJyZW50PW51bGw9PT12aD9KaDpLaDtiPWMoZCxlKTtpZihCaCl7ZG8gQmg9ITEsR2grPTEsdmg9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGwseGg9d2gsemg9UD1PPW51bGwsc2guY3VycmVudD1LaCxiPWMoZCxlKTt3aGlsZShCaCk7Q2g9bnVsbDtHaD0wfXNoLmN1cnJlbnQ9TGg7YT11aDthLm1lbW9pemVkU3RhdGU9d2g7YS5leHBpcmF0aW9uVGltZT15aDthLnVwZGF0ZVF1ZXVlPXpoO2EuZWZmZWN0VGFnfD1BaDthPW51bGwhPT1PJiZudWxsIT09Ty5uZXh0O3RoPTA7eGg9UD13aD12aD1PPXVoPW51bGw7eWg9MDt6aD1udWxsO0FoPTA7aWYoYSl0aHJvdyBFcnJvcih1KDMwMCkpO3JldHVybiBifVxuZnVuY3Rpb24gTWgoKXtzaC5jdXJyZW50PUxoO3RoPTA7eGg9UD13aD12aD1PPXVoPW51bGw7eWg9MDt6aD1udWxsO0FoPTA7Qmg9ITE7Q2g9bnVsbDtHaD0wfWZ1bmN0aW9uIE5oKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxxdWV1ZTpudWxsLGJhc2VVcGRhdGU6bnVsbCxuZXh0Om51bGx9O251bGw9PT1QP3doPVA9YTpQPVAubmV4dD1hO3JldHVybiBQfWZ1bmN0aW9uIE9oKCl7aWYobnVsbCE9PXhoKVA9eGgseGg9UC5uZXh0LE89dmgsdmg9bnVsbCE9PU8/Ty5uZXh0Om51bGw7ZWxzZXtpZihudWxsPT09dmgpdGhyb3cgRXJyb3IodSgzMTApKTtPPXZoO3ZhciBhPXttZW1vaXplZFN0YXRlOk8ubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6Ty5iYXNlU3RhdGUscXVldWU6Ty5xdWV1ZSxiYXNlVXBkYXRlOk8uYmFzZVVwZGF0ZSxuZXh0Om51bGx9O1A9bnVsbD09PVA/d2g9YTpQLm5leHQ9YTt2aD1PLm5leHR9cmV0dXJuIFB9XG5mdW5jdGlvbiBQaChhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIFFoKGEpe3ZhciBiPU9oKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHUoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7aWYoMDxHaCl7dmFyIGQ9Yy5kaXNwYXRjaDtpZihudWxsIT09Q2gpe3ZhciBlPUNoLmdldChjKTtpZih2b2lkIDAhPT1lKXtDaC5kZWxldGUoYyk7dmFyIGY9Yi5tZW1vaXplZFN0YXRlO2RvIGY9YShmLGUuYWN0aW9uKSxlPWUubmV4dDt3aGlsZShudWxsIT09ZSk7b2YoZixiLm1lbW9pemVkU3RhdGUpfHwod2c9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO2IuYmFzZVVwZGF0ZT09PWMubGFzdCYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9ZjtyZXR1cm5bZixkXX19cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxkXX1kPWMubGFzdDt2YXIgZz1iLmJhc2VVcGRhdGU7Zj1iLmJhc2VTdGF0ZTtudWxsIT09Zz8obnVsbCE9PWQmJihkLm5leHQ9bnVsbCksZD1nLm5leHQpOmQ9bnVsbCE9PWQ/ZC5uZXh0Om51bGw7aWYobnVsbCE9PVxuZCl7dmFyIGg9ZT1udWxsLGs9ZCxsPSExO2Rve3ZhciBtPWsuZXhwaXJhdGlvblRpbWU7bTx0aD8obHx8KGw9ITAsaD1nLGU9ZiksbT55aCYmKHloPW0sSmcoeWgpKSk6KElnKG0say5zdXNwZW5zZUNvbmZpZyksZj1rLmVhZ2VyUmVkdWNlcj09PWE/ay5lYWdlclN0YXRlOmEoZixrLmFjdGlvbikpO2c9aztrPWsubmV4dH13aGlsZShudWxsIT09ayYmayE9PWQpO2x8fChoPWcsZT1mKTtvZihmLGIubWVtb2l6ZWRTdGF0ZSl8fCh3Zz0hMCk7Yi5tZW1vaXplZFN0YXRlPWY7Yi5iYXNlVXBkYXRlPWg7Yi5iYXNlU3RhdGU9ZTtjLmxhc3RSZW5kZXJlZFN0YXRlPWZ9cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxjLmRpc3BhdGNoXX1cbmZ1bmN0aW9uIFJoKGEpe3ZhciBiPU5oKCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGEmJihhPWEoKSk7Yi5tZW1vaXplZFN0YXRlPWIuYmFzZVN0YXRlPWE7YT1iLnF1ZXVlPXtsYXN0Om51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOlBoLGxhc3RSZW5kZXJlZFN0YXRlOmF9O2E9YS5kaXNwYXRjaD1TaC5iaW5kKG51bGwsdWgsYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1mdW5jdGlvbiBUaChhKXtyZXR1cm4gUWgoUGgsYSl9ZnVuY3Rpb24gVWgoYSxiLGMsZCl7YT17dGFnOmEsY3JlYXRlOmIsZGVzdHJveTpjLGRlcHM6ZCxuZXh0Om51bGx9O251bGw9PT16aD8oemg9e2xhc3RFZmZlY3Q6bnVsbH0semgubGFzdEVmZmVjdD1hLm5leHQ9YSk6KGI9emgubGFzdEVmZmVjdCxudWxsPT09Yj96aC5sYXN0RWZmZWN0PWEubmV4dD1hOihjPWIubmV4dCxiLm5leHQ9YSxhLm5leHQ9Yyx6aC5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFZoKGEsYixjLGQpe3ZhciBlPU5oKCk7QWh8PWE7ZS5tZW1vaXplZFN0YXRlPVVoKGIsYyx2b2lkIDAsdm9pZCAwPT09ZD9udWxsOmQpfWZ1bmN0aW9uIFdoKGEsYixjLGQpe3ZhciBlPU9oKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PU8pe3ZhciBnPU8ubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmSGgoZCxnLmRlcHMpKXtVaCgwLGMsZixkKTtyZXR1cm59fUFofD1hO2UubWVtb2l6ZWRTdGF0ZT1VaChiLGMsZixkKX1mdW5jdGlvbiBYaChhLGIpe3JldHVybiBWaCg1MTYsMTkyLGEsYil9ZnVuY3Rpb24gWWgoYSxiKXtyZXR1cm4gV2goNTE2LDE5MixhLGIpfVxuZnVuY3Rpb24gWmgoYSxiKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYilyZXR1cm4gYT1hKCksYihhKSxmdW5jdGlvbigpe2IobnVsbCl9O2lmKG51bGwhPT1iJiZ2b2lkIDAhPT1iKXJldHVybiBhPWEoKSxiLmN1cnJlbnQ9YSxmdW5jdGlvbigpe2IuY3VycmVudD1udWxsfX1mdW5jdGlvbiAkaCgpe31mdW5jdGlvbiBhaShhLGIpe05oKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9ZnVuY3Rpb24gYmkoYSxiKXt2YXIgYz1PaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmSGgoYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBTaChhLGIsYyl7aWYoISgyNT5HaCkpdGhyb3cgRXJyb3IodSgzMDEpKTt2YXIgZD1hLmFsdGVybmF0ZTtpZihhPT09dWh8fG51bGwhPT1kJiZkPT09dWgpaWYoQmg9ITAsYT17ZXhwaXJhdGlvblRpbWU6dGgsc3VzcGVuc2VDb25maWc6bnVsbCxhY3Rpb246YyxlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxudWxsPT09Q2gmJihDaD1uZXcgTWFwKSxjPUNoLmdldChiKSx2b2lkIDA9PT1jKUNoLnNldChiLGEpO2Vsc2V7Zm9yKGI9YztudWxsIT09Yi5uZXh0OyliPWIubmV4dDtiLm5leHQ9YX1lbHNle3ZhciBlPVBnKCksZj1NZy5zdXNwZW5zZTtlPVFnKGUsYSxmKTtmPXtleHBpcmF0aW9uVGltZTplLHN1c3BlbnNlQ29uZmlnOmYsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07dmFyIGc9Yi5sYXN0O2lmKG51bGw9PT1nKWYubmV4dD1mO2Vsc2V7dmFyIGg9Zy5uZXh0O251bGwhPT1oJiZcbihmLm5leHQ9aCk7Zy5uZXh0PWZ9Yi5sYXN0PWY7aWYoMD09PWEuZXhwaXJhdGlvblRpbWUmJihudWxsPT09ZHx8MD09PWQuZXhwaXJhdGlvblRpbWUpJiYoZD1iLmxhc3RSZW5kZXJlZFJlZHVjZXIsbnVsbCE9PWQpKXRyeXt2YXIgaz1iLmxhc3RSZW5kZXJlZFN0YXRlLGw9ZChrLGMpO2YuZWFnZXJSZWR1Y2VyPWQ7Zi5lYWdlclN0YXRlPWw7aWYob2YobCxrKSlyZXR1cm59Y2F0Y2gobSl7fWZpbmFsbHl7fVJnKGEsZSl9fVxudmFyIExoPXtyZWFkQ29udGV4dDp4Zyx1c2VDYWxsYmFjazpRLHVzZUNvbnRleHQ6USx1c2VFZmZlY3Q6USx1c2VJbXBlcmF0aXZlSGFuZGxlOlEsdXNlTGF5b3V0RWZmZWN0OlEsdXNlTWVtbzpRLHVzZVJlZHVjZXI6USx1c2VSZWY6USx1c2VTdGF0ZTpRLHVzZURlYnVnVmFsdWU6USx1c2VSZXNwb25kZXI6USx1c2VEZWZlcnJlZFZhbHVlOlEsdXNlVHJhbnNpdGlvbjpRfSxKaD17cmVhZENvbnRleHQ6eGcsdXNlQ2FsbGJhY2s6YWksdXNlQ29udGV4dDp4Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFZoKDQsMzYsWmguYmluZChudWxsLGIsYSksYyl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBWaCg0LDM2LGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXt2YXIgYz1OaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVxuW2EsYl07cmV0dXJuIGF9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU5oKCk7Yj12b2lkIDAhPT1jP2MoYik6YjtkLm1lbW9pemVkU3RhdGU9ZC5iYXNlU3RhdGU9YjthPWQucXVldWU9e2xhc3Q6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YSxsYXN0UmVuZGVyZWRTdGF0ZTpifTthPWEuZGlzcGF0Y2g9U2guYmluZChudWxsLHVoLGEpO3JldHVybltkLm1lbW9pemVkU3RhdGUsYV19LHVzZVJlZjpmdW5jdGlvbihhKXt2YXIgYj1OaCgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfSx1c2VTdGF0ZTpSaCx1c2VEZWJ1Z1ZhbHVlOiRoLHVzZVJlc3BvbmRlcjpyaCx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9UmgoYSksZD1jWzBdLGU9Y1sxXTtYaChmdW5jdGlvbigpe3EudW5zdGFibGVfbmV4dChmdW5jdGlvbigpe3ZhciBjPU4uc3VzcGVuc2U7Ti5zdXNwZW5zZT12b2lkIDA9PT1iP251bGw6Yjt0cnl7ZShhKX1maW5hbGx5e04uc3VzcGVuc2U9XG5jfX0pfSxbYSxiXSk7cmV0dXJuIGR9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9UmgoITEpLGM9YlswXSxkPWJbMV07cmV0dXJuW2FpKGZ1bmN0aW9uKGIpe2QoITApO3EudW5zdGFibGVfbmV4dChmdW5jdGlvbigpe3ZhciBjPU4uc3VzcGVuc2U7Ti5zdXNwZW5zZT12b2lkIDA9PT1hP251bGw6YTt0cnl7ZCghMSksYigpfWZpbmFsbHl7Ti5zdXNwZW5zZT1jfX0pfSxbYSxjXSksY119fSxLaD17cmVhZENvbnRleHQ6eGcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp4Zyx1c2VFZmZlY3Q6WWgsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFdoKDQsMzYsWmguYmluZChudWxsLGIsYSksYyl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBXaCg0LDM2LGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXt2YXIgYz1PaCgpO2I9dm9pZCAwPT09Yj9cbm51bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZIaChiLGRbMV0pKXJldHVybiBkWzBdO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpRaCx1c2VSZWY6ZnVuY3Rpb24oKXtyZXR1cm4gT2goKS5tZW1vaXplZFN0YXRlfSx1c2VTdGF0ZTpUaCx1c2VEZWJ1Z1ZhbHVlOiRoLHVzZVJlc3BvbmRlcjpyaCx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9VGgoYSksZD1jWzBdLGU9Y1sxXTtZaChmdW5jdGlvbigpe3EudW5zdGFibGVfbmV4dChmdW5jdGlvbigpe3ZhciBjPU4uc3VzcGVuc2U7Ti5zdXNwZW5zZT12b2lkIDA9PT1iP251bGw6Yjt0cnl7ZShhKX1maW5hbGx5e04uc3VzcGVuc2U9Y319KX0sW2EsYl0pO3JldHVybiBkfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPVRoKCExKSxjPWJbMF0sZD1iWzFdO3JldHVybltiaShmdW5jdGlvbihiKXtkKCEwKTtxLnVuc3RhYmxlX25leHQoZnVuY3Rpb24oKXt2YXIgYz1cbk4uc3VzcGVuc2U7Ti5zdXNwZW5zZT12b2lkIDA9PT1hP251bGw6YTt0cnl7ZCghMSksYigpfWZpbmFsbHl7Ti5zdXNwZW5zZT1jfX0pfSxbYSxjXSksY119fSxjaT1udWxsLGRpPW51bGwsZWk9ITE7ZnVuY3Rpb24gZmkoYSxiKXt2YXIgYz1naSg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2MudHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yy5lZmZlY3RUYWc9ODtudWxsIT09YS5sYXN0RWZmZWN0PyhhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLGEubGFzdEVmZmVjdD1jKTphLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1jfVxuZnVuY3Rpb24gaGkoYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj1cIlwiPT09YS5wZW5kaW5nUHJvcHN8fDMhPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIGlpKGEpe2lmKGVpKXt2YXIgYj1kaTtpZihiKXt2YXIgYz1iO2lmKCFoaShhLGIpKXtiPXJlKGMubmV4dFNpYmxpbmcpO2lmKCFifHwhaGkoYSxiKSl7YS5lZmZlY3RUYWc9YS5lZmZlY3RUYWcmLTEwMjV8MjtlaT0hMTtjaT1hO3JldHVybn1maShjaSxjKX1jaT1hO2RpPXJlKGIuZmlyc3RDaGlsZCl9ZWxzZSBhLmVmZmVjdFRhZz1hLmVmZmVjdFRhZyYtMTAyNXwyLGVpPSExLGNpPWF9fWZ1bmN0aW9uIGppKGEpe2ZvcihhPWEucmV0dXJuO251bGwhPT1hJiY1IT09YS50YWcmJjMhPT1hLnRhZyYmMTMhPT1hLnRhZzspYT1hLnJldHVybjtjaT1hfVxuZnVuY3Rpb24ga2koYSl7aWYoYSE9PWNpKXJldHVybiExO2lmKCFlaSlyZXR1cm4gamkoYSksZWk9ITAsITE7dmFyIGI9YS50eXBlO2lmKDUhPT1hLnRhZ3x8XCJoZWFkXCIhPT1iJiZcImJvZHlcIiE9PWImJiFvZShiLGEubWVtb2l6ZWRQcm9wcykpZm9yKGI9ZGk7YjspZmkoYSxiKSxiPXJlKGIubmV4dFNpYmxpbmcpO2ppKGEpO2lmKDEzPT09YS50YWcpe2E9YS5tZW1vaXplZFN0YXRlO2E9bnVsbCE9PWE/YS5kZWh5ZHJhdGVkOm51bGw7aWYoIWEpdGhyb3cgRXJyb3IodSgzMTcpKTthOnthPWEubmV4dFNpYmxpbmc7Zm9yKGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihjPT09aWUpe2lmKDA9PT1iKXtkaT1yZShhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlIGMhPT1oZSYmYyE9PWtlJiZjIT09amV8fGIrK31hPWEubmV4dFNpYmxpbmd9ZGk9bnVsbH19ZWxzZSBkaT1jaT9yZShhLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1cbmZ1bmN0aW9uIGxpKCl7ZGk9Y2k9bnVsbDtlaT0hMX12YXIgbWk9RWEuUmVhY3RDdXJyZW50T3duZXIsd2c9ITE7ZnVuY3Rpb24gUihhLGIsYyxkKXtiLmNoaWxkPW51bGw9PT1hP2doKGIsbnVsbCxjLGQpOmZoKGIsYS5jaGlsZCxjLGQpfWZ1bmN0aW9uIG5pKGEsYixjLGQsZSl7Yz1jLnJlbmRlcjt2YXIgZj1iLnJlZjt2ZyhiLGUpO2Q9SWgoYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhd2cpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmVmZmVjdFRhZyY9LTUxNyxhLmV4cGlyYXRpb25UaW1lPD1lJiYoYS5leHBpcmF0aW9uVGltZT0wKSxvaShhLGIsZSk7Yi5lZmZlY3RUYWd8PTE7UihhLGIsZCxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIHBpKGEsYixjLGQsZSxmKXtpZihudWxsPT09YSl7dmFyIGc9Yy50eXBlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYhcWkoZykmJnZvaWQgMD09PWcuZGVmYXVsdFByb3BzJiZudWxsPT09Yy5jb21wYXJlJiZ2b2lkIDA9PT1jLmRlZmF1bHRQcm9wcylyZXR1cm4gYi50YWc9MTUsYi50eXBlPWcscmkoYSxiLGcsZCxlLGYpO2E9Y2goYy50eXBlLG51bGwsZCxudWxsLGIubW9kZSxmKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9Zz1hLmNoaWxkO2lmKGU8ZiYmKGU9Zy5tZW1vaXplZFByb3BzLGM9Yy5jb21wYXJlLGM9bnVsbCE9PWM/YzpxZixjKGUsZCkmJmEucmVmPT09Yi5yZWYpKXJldHVybiBvaShhLGIsZik7Yi5lZmZlY3RUYWd8PTE7YT1haChnLGQsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfVxuZnVuY3Rpb24gcmkoYSxiLGMsZCxlLGYpe3JldHVybiBudWxsIT09YSYmcWYoYS5tZW1vaXplZFByb3BzLGQpJiZhLnJlZj09PWIucmVmJiYod2c9ITEsZTxmKT9vaShhLGIsZik6c2koYSxiLGMsZCxmKX1mdW5jdGlvbiB0aShhLGIpe3ZhciBjPWIucmVmO2lmKG51bGw9PT1hJiZudWxsIT09Y3x8bnVsbCE9PWEmJmEucmVmIT09YyliLmVmZmVjdFRhZ3w9MTI4fWZ1bmN0aW9uIHNpKGEsYixjLGQsZSl7dmFyIGY9TChjKT9EZjpKLmN1cnJlbnQ7Zj1FZihiLGYpO3ZnKGIsZSk7Yz1JaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF3ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZWZmZWN0VGFnJj0tNTE3LGEuZXhwaXJhdGlvblRpbWU8PWUmJihhLmV4cGlyYXRpb25UaW1lPTApLG9pKGEsYixlKTtiLmVmZmVjdFRhZ3w9MTtSKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gdWkoYSxiLGMsZCxlKXtpZihMKGMpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7dmcoYixlKTtpZihudWxsPT09Yi5zdGF0ZU5vZGUpbnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5lZmZlY3RUYWd8PTIpLFVnKGIsYyxkLGUpLFdnKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBsJiZudWxsIT09bD9sPXhnKGwpOihsPUwoYyk/RGY6Si5jdXJyZW50LGw9RWYoYixsKSk7dmFyIG09Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsQz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgbXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7Q3x8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlxuXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGghPT1kfHxrIT09bCkmJlZnKGIsZyxkLGwpO3lnPSExO3ZhciB5PWIubWVtb2l6ZWRTdGF0ZTtrPWcuc3RhdGU9eTt2YXIgSD1iLnVwZGF0ZVF1ZXVlO251bGwhPT1IJiYoSGcoYixILGQsZyxlKSxrPWIubWVtb2l6ZWRTdGF0ZSk7aCE9PWR8fHkhPT1rfHxLLmN1cnJlbnR8fHlnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgbSYmKE9nKGIsYyxtLGQpLGs9Yi5tZW1vaXplZFN0YXRlKSwoaD15Z3x8VGcoYixjLGgsZCx5LGssbCkpPyhDfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnQmJmcuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXG5nLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmVmZmVjdFRhZ3w9NCkpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZWZmZWN0VGFnfD00KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZWZmZWN0VGFnfD00KSxkPSExKX1lbHNlIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHMsZy5wcm9wcz1iLnR5cGU9PT1iLmVsZW1lbnRUeXBlP2g6bWcoYi50eXBlLGgpLGs9Zy5jb250ZXh0LGw9Yy5jb250ZXh0VHlwZSxcIm9iamVjdFwiPT09dHlwZW9mIGwmJm51bGwhPT1sP2w9eGcobCk6KGw9TChjKT9EZjpKLmN1cnJlbnQsbD1FZihiLGwpKSxtPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLChDPVxuXCJmdW5jdGlvblwiPT09dHlwZW9mIG18fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09ZHx8ayE9PWwpJiZWZyhiLGcsZCxsKSx5Zz0hMSxrPWIubWVtb2l6ZWRTdGF0ZSx5PWcuc3RhdGU9ayxIPWIudXBkYXRlUXVldWUsbnVsbCE9PUgmJihIZyhiLEgsZCxnLGUpLHk9Yi5tZW1vaXplZFN0YXRlKSxoIT09ZHx8ayE9PXl8fEsuY3VycmVudHx8eWc/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBtJiYoT2coYixjLG0sZCkseT1iLm1lbW9pemVkU3RhdGUpLChtPXlnfHxUZyhiLGMsaCxkLGsseSxsKSk/KEN8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlfHxcbihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCx5LGwpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGQseSxsKSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlJiYoYi5lZmZlY3RUYWd8PTQpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoYi5lZmZlY3RUYWd8PTI1NikpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJms9PT1hLm1lbW9pemVkU3RhdGV8fChiLmVmZmVjdFRhZ3w9NCksXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJms9PT1hLm1lbW9pemVkU3RhdGV8fChiLmVmZmVjdFRhZ3w9MjU2KSxiLm1lbW9pemVkUHJvcHM9XG5kLGIubWVtb2l6ZWRTdGF0ZT15KSxnLnByb3BzPWQsZy5zdGF0ZT15LGcuY29udGV4dD1sLGQ9bSk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmaz09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZWZmZWN0VGFnfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmaz09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZWZmZWN0VGFnfD0yNTYpLGQ9ITEpO3JldHVybiB2aShhLGIsYyxkLGYsZSl9XG5mdW5jdGlvbiB2aShhLGIsYyxkLGUsZil7dGkoYSxiKTt2YXIgZz0wIT09KGIuZWZmZWN0VGFnJjY0KTtpZighZCYmIWcpcmV0dXJuIGUmJktmKGIsYywhMSksb2koYSxiLGYpO2Q9Yi5zdGF0ZU5vZGU7bWkuY3VycmVudD1iO3ZhciBoPWcmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmQucmVuZGVyKCk7Yi5lZmZlY3RUYWd8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9ZmgoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1maChiLG51bGwsaCxmKSk6UihhLGIsaCxmKTtiLm1lbW9pemVkU3RhdGU9ZC5zdGF0ZTtlJiZLZihiLGMsITApO3JldHVybiBiLmNoaWxkfWZ1bmN0aW9uIHdpKGEpe3ZhciBiPWEuc3RhdGVOb2RlO2IucGVuZGluZ0NvbnRleHQ/SGYoYSxiLnBlbmRpbmdDb250ZXh0LGIucGVuZGluZ0NvbnRleHQhPT1iLmNvbnRleHQpOmIuY29udGV4dCYmSGYoYSxiLmNvbnRleHQsITEpO21oKGEsYi5jb250YWluZXJJbmZvKX1cbnZhciB4aT17ZGVoeWRyYXRlZDpudWxsLHJldHJ5VGltZTowfTtcbmZ1bmN0aW9uIHlpKGEsYixjKXt2YXIgZD1iLm1vZGUsZT1iLnBlbmRpbmdQcm9wcyxmPU0uY3VycmVudCxnPSExLGg7KGg9MCE9PShiLmVmZmVjdFRhZyY2NCkpfHwoaD0wIT09KGYmMikmJihudWxsPT09YXx8bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSkpO2g/KGc9ITAsYi5lZmZlY3RUYWcmPS02NSk6bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGV8fHZvaWQgMD09PWUuZmFsbGJhY2t8fCEwPT09ZS51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8KGZ8PTEpO0koTSxmJjEsYik7aWYobnVsbD09PWEpe3ZvaWQgMCE9PWUuZmFsbGJhY2smJmlpKGIpO2lmKGcpe2c9ZS5mYWxsYmFjaztlPWVoKG51bGwsZCwwLG51bGwpO2UucmV0dXJuPWI7aWYoMD09PShiLm1vZGUmMikpZm9yKGE9bnVsbCE9PWIubWVtb2l6ZWRTdGF0ZT9iLmNoaWxkLmNoaWxkOmIuY2hpbGQsZS5jaGlsZD1hO251bGwhPT1hOylhLnJldHVybj1lLGE9YS5zaWJsaW5nO2M9ZWgoZyxkLGMsbnVsbCk7Yy5yZXR1cm49XG5iO2Uuc2libGluZz1jO2IubWVtb2l6ZWRTdGF0ZT14aTtiLmNoaWxkPWU7cmV0dXJuIGN9ZD1lLmNoaWxkcmVuO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBiLmNoaWxkPWdoKGIsbnVsbCxkLGMpfWlmKG51bGwhPT1hLm1lbW9pemVkU3RhdGUpe2E9YS5jaGlsZDtkPWEuc2libGluZztpZihnKXtlPWUuZmFsbGJhY2s7Yz1haChhLGEucGVuZGluZ1Byb3BzLDApO2MucmV0dXJuPWI7aWYoMD09PShiLm1vZGUmMikmJihnPW51bGwhPT1iLm1lbW9pemVkU3RhdGU/Yi5jaGlsZC5jaGlsZDpiLmNoaWxkLGchPT1hLmNoaWxkKSlmb3IoYy5jaGlsZD1nO251bGwhPT1nOylnLnJldHVybj1jLGc9Zy5zaWJsaW5nO2Q9YWgoZCxlLGQuZXhwaXJhdGlvblRpbWUpO2QucmV0dXJuPWI7Yy5zaWJsaW5nPWQ7Yy5jaGlsZEV4cGlyYXRpb25UaW1lPTA7Yi5tZW1vaXplZFN0YXRlPXhpO2IuY2hpbGQ9YztyZXR1cm4gZH1jPWZoKGIsYS5jaGlsZCxlLmNoaWxkcmVuLGMpO2IubWVtb2l6ZWRTdGF0ZT1cbm51bGw7cmV0dXJuIGIuY2hpbGQ9Y31hPWEuY2hpbGQ7aWYoZyl7Zz1lLmZhbGxiYWNrO2U9ZWgobnVsbCxkLDAsbnVsbCk7ZS5yZXR1cm49YjtlLmNoaWxkPWE7bnVsbCE9PWEmJihhLnJldHVybj1lKTtpZigwPT09KGIubW9kZSYyKSlmb3IoYT1udWxsIT09Yi5tZW1vaXplZFN0YXRlP2IuY2hpbGQuY2hpbGQ6Yi5jaGlsZCxlLmNoaWxkPWE7bnVsbCE9PWE7KWEucmV0dXJuPWUsYT1hLnNpYmxpbmc7Yz1laChnLGQsYyxudWxsKTtjLnJldHVybj1iO2Uuc2libGluZz1jO2MuZWZmZWN0VGFnfD0yO2UuY2hpbGRFeHBpcmF0aW9uVGltZT0wO2IubWVtb2l6ZWRTdGF0ZT14aTtiLmNoaWxkPWU7cmV0dXJuIGN9Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGIuY2hpbGQ9ZmgoYixhLGUuY2hpbGRyZW4sYyl9XG5mdW5jdGlvbiB6aShhLGIpe2EuZXhwaXJhdGlvblRpbWU8YiYmKGEuZXhwaXJhdGlvblRpbWU9Yik7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJmMuZXhwaXJhdGlvblRpbWU8YiYmKGMuZXhwaXJhdGlvblRpbWU9Yik7dWcoYS5yZXR1cm4sYil9ZnVuY3Rpb24gQWkoYSxiLGMsZCxlLGYpe3ZhciBnPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09Zz9hLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOmIscmVuZGVyaW5nOm51bGwsbGFzdDpkLHRhaWw6Yyx0YWlsRXhwaXJhdGlvbjowLHRhaWxNb2RlOmUsbGFzdEVmZmVjdDpmfTooZy5pc0JhY2t3YXJkcz1iLGcucmVuZGVyaW5nPW51bGwsZy5sYXN0PWQsZy50YWlsPWMsZy50YWlsRXhwaXJhdGlvbj0wLGcudGFpbE1vZGU9ZSxnLmxhc3RFZmZlY3Q9Zil9XG5mdW5jdGlvbiBCaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLnJldmVhbE9yZGVyLGY9ZC50YWlsO1IoYSxiLGQuY2hpbGRyZW4sYyk7ZD1NLmN1cnJlbnQ7aWYoMCE9PShkJjIpKWQ9ZCYxfDIsYi5lZmZlY3RUYWd8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5lZmZlY3RUYWcmNjQpKWE6Zm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2lmKDEzPT09YS50YWcpbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSYmemkoYSxjKTtlbHNlIGlmKDE5PT09YS50YWcpemkoYSxjKTtlbHNlIGlmKG51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hO2E9YS5jaGlsZDtjb250aW51ZX1pZihhPT09YilicmVhayBhO2Zvcig7bnVsbD09PWEuc2libGluZzspe2lmKG51bGw9PT1hLnJldHVybnx8YS5yZXR1cm49PT1iKWJyZWFrIGE7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2E9YS5zaWJsaW5nfWQmPTF9SShNLGQsYik7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPVxubnVsbDtlbHNlIHN3aXRjaChlKXtjYXNlIFwiZm9yd2FyZHNcIjpjPWIuY2hpbGQ7Zm9yKGU9bnVsbDtudWxsIT09YzspYT1jLmFsdGVybmF0ZSxudWxsIT09YSYmbnVsbD09PXFoKGEpJiYoZT1jKSxjPWMuc2libGluZztjPWU7bnVsbD09PWM/KGU9Yi5jaGlsZCxiLmNoaWxkPW51bGwpOihlPWMuc2libGluZyxjLnNpYmxpbmc9bnVsbCk7QWkoYiwhMSxlLGMsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09cWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfUFpKGIsITAsYyxudWxsLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwidG9nZXRoZXJcIjpBaShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gb2koYSxiLGMpe251bGwhPT1hJiYoYi5kZXBlbmRlbmNpZXM9YS5kZXBlbmRlbmNpZXMpO3ZhciBkPWIuZXhwaXJhdGlvblRpbWU7MCE9PWQmJkpnKGQpO2lmKGIuY2hpbGRFeHBpcmF0aW9uVGltZTxjKXJldHVybiBudWxsO2lmKG51bGwhPT1hJiZiLmNoaWxkIT09YS5jaGlsZCl0aHJvdyBFcnJvcih1KDE1MykpO2lmKG51bGwhPT1iLmNoaWxkKXthPWIuY2hpbGQ7Yz1haChhLGEucGVuZGluZ1Byb3BzLGEuZXhwaXJhdGlvblRpbWUpO2IuY2hpbGQ9Yztmb3IoYy5yZXR1cm49YjtudWxsIT09YS5zaWJsaW5nOylhPWEuc2libGluZyxjPWMuc2libGluZz1haChhLGEucGVuZGluZ1Byb3BzLGEuZXhwaXJhdGlvblRpbWUpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gQ2koYSl7YS5lZmZlY3RUYWd8PTR9dmFyIEhpLElpLEppLEtpO1xuSGk9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0lpPWZ1bmN0aW9uKCl7fTtcbkppPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5tZW1vaXplZFByb3BzO2lmKGYhPT1kKXt2YXIgZz1iLnN0YXRlTm9kZTtsaChpaC5jdXJyZW50KTthPW51bGw7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOmY9QWIoZyxmKTtkPUFiKGcsZCk7YT1bXTticmVhaztjYXNlIFwib3B0aW9uXCI6Zj1JYihnLGYpO2Q9SWIoZyxkKTthPVtdO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpmPW4oe30sZix7dmFsdWU6dm9pZCAwfSk7ZD1uKHt9LGQse3ZhbHVlOnZvaWQgMH0pO2E9W107YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6Zj1LYihnLGYpO2Q9S2IoZyxkKTthPVtdO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiIT09dHlwZW9mIGYub25DbGljayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGQub25DbGljayYmKGcub25jbGljaz1hZSl9WWQoYyxkKTt2YXIgaCxrO2M9bnVsbDtmb3IoaCBpbiBmKWlmKCFkLmhhc093blByb3BlcnR5KGgpJiZmLmhhc093blByb3BlcnR5KGgpJiZudWxsIT1mW2hdKWlmKFwic3R5bGVcIj09PVxuaClmb3IoayBpbiBnPWZbaF0sZylnLmhhc093blByb3BlcnR5KGspJiYoY3x8KGM9e30pLGNba109XCJcIik7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIiE9PWgmJlwiY2hpbGRyZW5cIiE9PWgmJlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1oJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09aCYmXCJhdXRvRm9jdXNcIiE9PWgmJihpYS5oYXNPd25Qcm9wZXJ0eShoKT9hfHwoYT1bXSk6KGE9YXx8W10pLnB1c2goaCxudWxsKSk7Zm9yKGggaW4gZCl7dmFyIGw9ZFtoXTtnPW51bGwhPWY/ZltoXTp2b2lkIDA7aWYoZC5oYXNPd25Qcm9wZXJ0eShoKSYmbCE9PWcmJihudWxsIT1sfHxudWxsIT1nKSlpZihcInN0eWxlXCI9PT1oKWlmKGcpe2ZvcihrIGluIGcpIWcuaGFzT3duUHJvcGVydHkoayl8fGwmJmwuaGFzT3duUHJvcGVydHkoayl8fChjfHwoYz17fSksY1trXT1cIlwiKTtmb3IoayBpbiBsKWwuaGFzT3duUHJvcGVydHkoaykmJmdba10hPT1sW2tdJiYoY3x8KGM9e30pLFxuY1trXT1sW2tdKX1lbHNlIGN8fChhfHwoYT1bXSksYS5wdXNoKGgsYykpLGM9bDtlbHNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09aD8obD1sP2wuX19odG1sOnZvaWQgMCxnPWc/Zy5fX2h0bWw6dm9pZCAwLG51bGwhPWwmJmchPT1sJiYoYT1hfHxbXSkucHVzaChoLFwiXCIrbCkpOlwiY2hpbGRyZW5cIj09PWg/Zz09PWx8fFwic3RyaW5nXCIhPT10eXBlb2YgbCYmXCJudW1iZXJcIiE9PXR5cGVvZiBsfHwoYT1hfHxbXSkucHVzaChoLFwiXCIrbCk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWgmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1oJiYoaWEuaGFzT3duUHJvcGVydHkoaCk/KG51bGwhPWwmJiRkKGUsaCksYXx8Zz09PWx8fChhPVtdKSk6KGE9YXx8W10pLnB1c2goaCxsKSl9YyYmKGE9YXx8W10pLnB1c2goXCJzdHlsZVwiLGMpO2U9YTsoYi51cGRhdGVRdWV1ZT1lKSYmQ2koYil9fTtLaT1mdW5jdGlvbihhLGIsYyxkKXtjIT09ZCYmQ2koYil9O1xuZnVuY3Rpb24gTGkoYSxiKXtzd2l0Y2goYS50YWlsTW9kZSl7Y2FzZSBcImhpZGRlblwiOmI9YS50YWlsO2Zvcih2YXIgYz1udWxsO251bGwhPT1iOyludWxsIT09Yi5hbHRlcm5hdGUmJihjPWIpLGI9Yi5zaWJsaW5nO251bGw9PT1jP2EudGFpbD1udWxsOmMuc2libGluZz1udWxsO2JyZWFrO2Nhc2UgXCJjb2xsYXBzZWRcIjpjPWEudGFpbDtmb3IodmFyIGQ9bnVsbDtudWxsIT09YzspbnVsbCE9PWMuYWx0ZXJuYXRlJiYoZD1jKSxjPWMuc2libGluZztudWxsPT09ZD9ifHxudWxsPT09YS50YWlsP2EudGFpbD1udWxsOmEudGFpbC5zaWJsaW5nPW51bGw6ZC5zaWJsaW5nPW51bGx9fVxuZnVuY3Rpb24gTWkoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDE6TChhLnR5cGUpJiZGZihhKTt2YXIgYj1hLmVmZmVjdFRhZztyZXR1cm4gYiY0MDk2PyhhLmVmZmVjdFRhZz1iJi00MDk3fDY0LGEpOm51bGw7Y2FzZSAzOm5oKGEpO0dmKGEpO2I9YS5lZmZlY3RUYWc7aWYoMCE9PShiJjY0KSl0aHJvdyBFcnJvcih1KDI4NSkpO2EuZWZmZWN0VGFnPWImLTQwOTd8NjQ7cmV0dXJuIGE7Y2FzZSA1OnJldHVybiBwaChhKSxudWxsO2Nhc2UgMTM6cmV0dXJuIEcoTSxhKSxiPWEuZWZmZWN0VGFnLGImNDA5Nj8oYS5lZmZlY3RUYWc9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEcoTSxhKSxudWxsO2Nhc2UgNDpyZXR1cm4gbmgoYSksbnVsbDtjYXNlIDEwOnJldHVybiB0ZyhhKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIE5pKGEsYil7cmV0dXJue3ZhbHVlOmEsc291cmNlOmIsc3RhY2s6WGEoYil9fVxudmFyIE9pPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0O2Z1bmN0aW9uIFBpKGEsYil7dmFyIGM9Yi5zb3VyY2UsZD1iLnN0YWNrO251bGw9PT1kJiZudWxsIT09YyYmKGQ9WGEoYykpO251bGwhPT1jJiZXYShjLnR5cGUpO2I9Yi52YWx1ZTtudWxsIT09YSYmMT09PWEudGFnJiZXYShhLnR5cGUpO3RyeXtjb25zb2xlLmVycm9yKGIpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlO30pfX1mdW5jdGlvbiBRaShhLGIpe3RyeXtiLnByb3BzPWEubWVtb2l6ZWRQcm9wcyxiLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSxiLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goYyl7UmkoYSxjKX19ZnVuY3Rpb24gU2koYSl7dmFyIGI9YS5yZWY7aWYobnVsbCE9PWIpaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpdHJ5e2IobnVsbCl9Y2F0Y2goYyl7UmkoYSxjKX1lbHNlIGIuY3VycmVudD1udWxsfVxuZnVuY3Rpb24gVGkoYSxiKXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6VWkoMiwwLGIpO2JyZWFrO2Nhc2UgMTppZihiLmVmZmVjdFRhZyYyNTYmJm51bGwhPT1hKXt2YXIgYz1hLm1lbW9pemVkUHJvcHMsZD1hLm1lbW9pemVkU3RhdGU7YT1iLnN0YXRlTm9kZTtiPWEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYi5lbGVtZW50VHlwZT09PWIudHlwZT9jOm1nKGIudHlwZSxjKSxkKTthLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWJ9YnJlYWs7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih1KDE2MykpO319XG5mdW5jdGlvbiBVaShhLGIsYyl7Yz1jLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2Rve2lmKDAhPT0oZC50YWcmYSkpe3ZhciBlPWQuZGVzdHJveTtkLmRlc3Ryb3k9dm9pZCAwO3ZvaWQgMCE9PWUmJmUoKX0wIT09KGQudGFnJmIpJiYoZT1kLmNyZWF0ZSxkLmRlc3Ryb3k9ZSgpKTtkPWQubmV4dH13aGlsZShkIT09Yyl9fVxuZnVuY3Rpb24gVmkoYSxiLGMpe1wiZnVuY3Rpb25cIj09PXR5cGVvZiBXaSYmV2koYik7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXt2YXIgZD1hLm5leHQ7ZmcoOTc8Yz85NzpjLGZ1bmN0aW9uKCl7dmFyIGE9ZDtkb3t2YXIgYz1hLmRlc3Ryb3k7aWYodm9pZCAwIT09Yyl7dmFyIGc9Yjt0cnl7YygpfWNhdGNoKGgpe1JpKGcsaCl9fWE9YS5uZXh0fXdoaWxlKGEhPT1kKX0pfWJyZWFrO2Nhc2UgMTpTaShiKTtjPWIuc3RhdGVOb2RlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBjLmNvbXBvbmVudFdpbGxVbm1vdW50JiZRaShiLGMpO2JyZWFrO2Nhc2UgNTpTaShiKTticmVhaztjYXNlIDQ6WGkoYSxiLGMpfX1cbmZ1bmN0aW9uIFlpKGEpe3ZhciBiPWEuYWx0ZXJuYXRlO2EucmV0dXJuPW51bGw7YS5jaGlsZD1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EudXBkYXRlUXVldWU9bnVsbDthLmRlcGVuZGVuY2llcz1udWxsO2EuYWx0ZXJuYXRlPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5tZW1vaXplZFByb3BzPW51bGw7bnVsbCE9PWImJllpKGIpfWZ1bmN0aW9uIFppKGEpe3JldHVybiA1PT09YS50YWd8fDM9PT1hLnRhZ3x8ND09PWEudGFnfVxuZnVuY3Rpb24gJGkoYSl7YTp7Zm9yKHZhciBiPWEucmV0dXJuO251bGwhPT1iOyl7aWYoWmkoYikpe3ZhciBjPWI7YnJlYWsgYX1iPWIucmV0dXJufXRocm93IEVycm9yKHUoMTYwKSk7fWI9Yy5zdGF0ZU5vZGU7c3dpdGNoKGMudGFnKXtjYXNlIDU6dmFyIGQ9ITE7YnJlYWs7Y2FzZSAzOmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7Y2FzZSA0OmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih1KDE2MSkpO31jLmVmZmVjdFRhZyYxNiYmKFRiKGIsXCJcIiksYy5lZmZlY3RUYWcmPS0xNyk7YTpiOmZvcihjPWE7Oyl7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxaaShjLnJldHVybikpe2M9bnVsbDticmVhayBhfWM9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtmb3IoYz1jLnNpYmxpbmc7NSE9PWMudGFnJiY2IT09Yy50YWcmJjE4IT09Yy50YWc7KXtpZihjLmVmZmVjdFRhZyYyKWNvbnRpbnVlIGI7XG5pZihudWxsPT09Yy5jaGlsZHx8ND09PWMudGFnKWNvbnRpbnVlIGI7ZWxzZSBjLmNoaWxkLnJldHVybj1jLGM9Yy5jaGlsZH1pZighKGMuZWZmZWN0VGFnJjIpKXtjPWMuc3RhdGVOb2RlO2JyZWFrIGF9fWZvcih2YXIgZT1hOzspe3ZhciBmPTU9PT1lLnRhZ3x8Nj09PWUudGFnO2lmKGYpe3ZhciBnPWY/ZS5zdGF0ZU5vZGU6ZS5zdGF0ZU5vZGUuaW5zdGFuY2U7aWYoYylpZihkKXtmPWI7dmFyIGg9ZztnPWM7OD09PWYubm9kZVR5cGU/Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShoLGcpOmYuaW5zZXJ0QmVmb3JlKGgsZyl9ZWxzZSBiLmluc2VydEJlZm9yZShnLGMpO2Vsc2UgZD8oaD1iLDg9PT1oLm5vZGVUeXBlPyhmPWgucGFyZW50Tm9kZSxmLmluc2VydEJlZm9yZShnLGgpKTooZj1oLGYuYXBwZW5kQ2hpbGQoZykpLGg9aC5fcmVhY3RSb290Q29udGFpbmVyLG51bGwhPT1oJiZ2b2lkIDAhPT1ofHxudWxsIT09Zi5vbmNsaWNrfHwoZi5vbmNsaWNrPWFlKSk6Yi5hcHBlbmRDaGlsZChnKX1lbHNlIGlmKDQhPT1cbmUudGFnJiZudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZTtlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PWEpYnJlYWs7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PWEpcmV0dXJuO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybjtlPWUuc2libGluZ319XG5mdW5jdGlvbiBYaShhLGIsYyl7Zm9yKHZhciBkPWIsZT0hMSxmLGc7Oyl7aWYoIWUpe2U9ZC5yZXR1cm47YTpmb3IoOzspe2lmKG51bGw9PT1lKXRocm93IEVycm9yKHUoMTYwKSk7Zj1lLnN0YXRlTm9kZTtzd2l0Y2goZS50YWcpe2Nhc2UgNTpnPSExO2JyZWFrIGE7Y2FzZSAzOmY9Zi5jb250YWluZXJJbmZvO2c9ITA7YnJlYWsgYTtjYXNlIDQ6Zj1mLmNvbnRhaW5lckluZm87Zz0hMDticmVhayBhfWU9ZS5yZXR1cm59ZT0hMH1pZig1PT09ZC50YWd8fDY9PT1kLnRhZyl7YTpmb3IodmFyIGg9YSxrPWQsbD1jLG09azs7KWlmKFZpKGgsbSxsKSxudWxsIT09bS5jaGlsZCYmNCE9PW0udGFnKW0uY2hpbGQucmV0dXJuPW0sbT1tLmNoaWxkO2Vsc2V7aWYobT09PWspYnJlYWs7Zm9yKDtudWxsPT09bS5zaWJsaW5nOyl7aWYobnVsbD09PW0ucmV0dXJufHxtLnJldHVybj09PWspYnJlYWsgYTttPW0ucmV0dXJufW0uc2libGluZy5yZXR1cm49bS5yZXR1cm47bT1tLnNpYmxpbmd9Zz8oaD1cbmYsaz1kLnN0YXRlTm9kZSw4PT09aC5ub2RlVHlwZT9oLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayk6aC5yZW1vdmVDaGlsZChrKSk6Zi5yZW1vdmVDaGlsZChkLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09ZC50YWcpe2lmKG51bGwhPT1kLmNoaWxkKXtmPWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zz0hMDtkLmNoaWxkLnJldHVybj1kO2Q9ZC5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihWaShhLGQsYyksbnVsbCE9PWQuY2hpbGQpe2QuY2hpbGQucmV0dXJuPWQ7ZD1kLmNoaWxkO2NvbnRpbnVlfWlmKGQ9PT1iKWJyZWFrO2Zvcig7bnVsbD09PWQuc2libGluZzspe2lmKG51bGw9PT1kLnJldHVybnx8ZC5yZXR1cm49PT1iKXJldHVybjtkPWQucmV0dXJuOzQ9PT1kLnRhZyYmKGU9ITEpfWQuc2libGluZy5yZXR1cm49ZC5yZXR1cm47ZD1kLnNpYmxpbmd9fVxuZnVuY3Rpb24gYWooYSxiKXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpVaSg0LDgsYik7YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgNTp2YXIgYz1iLnN0YXRlTm9kZTtpZihudWxsIT1jKXt2YXIgZD1iLm1lbW9pemVkUHJvcHMsZT1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6ZDthPWIudHlwZTt2YXIgZj1iLnVwZGF0ZVF1ZXVlO2IudXBkYXRlUXVldWU9bnVsbDtpZihudWxsIT09Zil7Y1t2ZV09ZDtcImlucHV0XCI9PT1hJiZcInJhZGlvXCI9PT1kLnR5cGUmJm51bGwhPWQubmFtZSYmQ2IoYyxkKTtaZChhLGUpO2I9WmQoYSxkKTtmb3IoZT0wO2U8Zi5sZW5ndGg7ZSs9Mil7dmFyIGc9ZltlXSxoPWZbZSsxXTtcInN0eWxlXCI9PT1nP1dkKGMsaCk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zz9TYihjLGgpOlwiY2hpbGRyZW5cIj09PWc/VGIoYyxoKTp2YihjLGcsaCxiKX1zd2l0Y2goYSl7Y2FzZSBcImlucHV0XCI6RWIoYyxkKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpNYihjLFxuZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmI9Yy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlLGMuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT0hIWQubXVsdGlwbGUsYT1kLnZhbHVlLG51bGwhPWE/SmIoYywhIWQubXVsdGlwbGUsYSwhMSk6YiE9PSEhZC5tdWx0aXBsZSYmKG51bGwhPWQuZGVmYXVsdFZhbHVlP0piKGMsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTpKYihjLCEhZC5tdWx0aXBsZSxkLm11bHRpcGxlP1tdOlwiXCIsITEpKX19fWJyZWFrO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IodSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9Yi5tZW1vaXplZFByb3BzO2JyZWFrO2Nhc2UgMzpiPWIuc3RhdGVOb2RlO2IuaHlkcmF0ZSYmKGIuaHlkcmF0ZT0hMSxMYyhiLmNvbnRhaW5lckluZm8pKTticmVhaztjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6Yz1iO251bGw9PT1iLm1lbW9pemVkU3RhdGU/ZD0hMTooZD0hMCxjPWIuY2hpbGQsYmo9Y2coKSk7XG5pZihudWxsIT09YylhOmZvcihhPWM7Oyl7aWYoNT09PWEudGFnKWY9YS5zdGF0ZU5vZGUsZD8oZj1mLnN0eWxlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLnNldFByb3BlcnR5P2Yuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6Zi5kaXNwbGF5PVwibm9uZVwiKTooZj1hLnN0YXRlTm9kZSxlPWEubWVtb2l6ZWRQcm9wcy5zdHlsZSxlPXZvaWQgMCE9PWUmJm51bGwhPT1lJiZlLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKT9lLmRpc3BsYXk6bnVsbCxmLnN0eWxlLmRpc3BsYXk9VmQoXCJkaXNwbGF5XCIsZSkpO2Vsc2UgaWYoNj09PWEudGFnKWEuc3RhdGVOb2RlLm5vZGVWYWx1ZT1kP1wiXCI6YS5tZW1vaXplZFByb3BzO2Vsc2UgaWYoMTM9PT1hLnRhZyYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXtmPWEuY2hpbGQuc2libGluZztmLnJldHVybj1hO2E9Zjtjb250aW51ZX1lbHNlIGlmKG51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1cbmE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1jKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWMpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9Y2ooYik7YnJlYWs7Y2FzZSAxOTpjaihiKTticmVhaztjYXNlIDE3OmJyZWFrO2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKHUoMTYzKSk7fX1mdW5jdGlvbiBjaihhKXt2YXIgYj1hLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iKXthLnVwZGF0ZVF1ZXVlPW51bGw7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbD09PWMmJihjPWEuc3RhdGVOb2RlPW5ldyBPaSk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWRqLmJpbmQobnVsbCxhLGIpO2MuaGFzKGIpfHwoYy5hZGQoYiksYi50aGVuKGQsZCkpfSl9fXZhciBlaj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtcbmZ1bmN0aW9uIGZqKGEsYixjKXtjPUJnKGMsbnVsbCk7Yy50YWc9MztjLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIGQ9Yi52YWx1ZTtjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7Z2p8fChnaj0hMCxoaj1kKTtQaShhLGIpfTtyZXR1cm4gY31cbmZ1bmN0aW9uIGlqKGEsYixjKXtjPUJnKGMsbnVsbCk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe1BpKGEsYik7cmV0dXJuIGQoZSl9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1qaj9qaj1uZXcgU2V0KFt0aGlzXSk6amouYWRkKHRoaXMpLFBpKGEsYikpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfVxudmFyIGtqPU1hdGguY2VpbCxsaj1FYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLG1qPUVhLlJlYWN0Q3VycmVudE93bmVyLFM9MCxuaj04LG9qPTE2LHBqPTMyLHFqPTAscmo9MSxzaj0yLHRqPTMsdWo9NCx2aj01LFQ9UyxVPW51bGwsVj1udWxsLFc9MCxYPXFqLHdqPW51bGwseGo9MTA3Mzc0MTgyMyx5aj0xMDczNzQxODIzLHpqPW51bGwsQWo9MCxCaj0hMSxiaj0wLENqPTUwMCxZPW51bGwsZ2o9ITEsaGo9bnVsbCxqaj1udWxsLERqPSExLEVqPW51bGwsRmo9OTAsR2o9bnVsbCxIaj0wLElqPW51bGwsSmo9MDtmdW5jdGlvbiBQZygpe3JldHVybihUJihvanxwaikpIT09Uz8xMDczNzQxODIxLShjZygpLzEwfDApOjAhPT1Kaj9KajpKaj0xMDczNzQxODIxLShjZygpLzEwfDApfVxuZnVuY3Rpb24gUWcoYSxiLGMpe2I9Yi5tb2RlO2lmKDA9PT0oYiYyKSlyZXR1cm4gMTA3Mzc0MTgyMzt2YXIgZD1kZygpO2lmKDA9PT0oYiY0KSlyZXR1cm4gOTk9PT1kPzEwNzM3NDE4MjM6MTA3Mzc0MTgyMjtpZigoVCZvaikhPT1TKXJldHVybiBXO2lmKG51bGwhPT1jKWE9bGcoYSxjLnRpbWVvdXRNc3wwfHw1RTMsMjUwKTtlbHNlIHN3aXRjaChkKXtjYXNlIDk5OmE9MTA3Mzc0MTgyMzticmVhaztjYXNlIDk4OmE9bGcoYSwxNTAsMTAwKTticmVhaztjYXNlIDk3OmNhc2UgOTY6YT1sZyhhLDVFMywyNTApO2JyZWFrO2Nhc2UgOTU6YT0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IodSgzMjYpKTt9bnVsbCE9PVUmJmE9PT1XJiYtLWE7cmV0dXJuIGF9XG5mdW5jdGlvbiBSZyhhLGIpe2lmKDUwPEhqKXRocm93IEhqPTAsSWo9bnVsbCxFcnJvcih1KDE4NSkpO2E9S2ooYSxiKTtpZihudWxsIT09YSl7dmFyIGM9ZGcoKTsxMDczNzQxODIzPT09Yj8oVCZuaikhPT1TJiYoVCYob2p8cGopKT09PVM/TGooYSk6KFooYSksVD09PVMmJmpnKCkpOlooYSk7KFQmNCk9PT1TfHw5OCE9PWMmJjk5IT09Y3x8KG51bGw9PT1Haj9Haj1uZXcgTWFwKFtbYSxiXV0pOihjPUdqLmdldChhKSwodm9pZCAwPT09Y3x8Yz5iKSYmR2ouc2V0KGEsYikpKX19XG5mdW5jdGlvbiBLaihhLGIpe2EuZXhwaXJhdGlvblRpbWU8YiYmKGEuZXhwaXJhdGlvblRpbWU9Yik7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJmMuZXhwaXJhdGlvblRpbWU8YiYmKGMuZXhwaXJhdGlvblRpbWU9Yik7dmFyIGQ9YS5yZXR1cm4sZT1udWxsO2lmKG51bGw9PT1kJiYzPT09YS50YWcpZT1hLnN0YXRlTm9kZTtlbHNlIGZvcig7bnVsbCE9PWQ7KXtjPWQuYWx0ZXJuYXRlO2QuY2hpbGRFeHBpcmF0aW9uVGltZTxiJiYoZC5jaGlsZEV4cGlyYXRpb25UaW1lPWIpO251bGwhPT1jJiZjLmNoaWxkRXhwaXJhdGlvblRpbWU8YiYmKGMuY2hpbGRFeHBpcmF0aW9uVGltZT1iKTtpZihudWxsPT09ZC5yZXR1cm4mJjM9PT1kLnRhZyl7ZT1kLnN0YXRlTm9kZTticmVha31kPWQucmV0dXJufW51bGwhPT1lJiYoVT09PWUmJihKZyhiKSxYPT09dWomJk1qKGUsVykpLE5qKGUsYikpO3JldHVybiBlfVxuZnVuY3Rpb24gT2ooYSl7dmFyIGI9YS5sYXN0RXhwaXJlZFRpbWU7aWYoMCE9PWIpcmV0dXJuIGI7Yj1hLmZpcnN0UGVuZGluZ1RpbWU7aWYoIVBqKGEsYikpcmV0dXJuIGI7Yj1hLmxhc3RQaW5nZWRUaW1lO2E9YS5uZXh0S25vd25QZW5kaW5nTGV2ZWw7cmV0dXJuIGI+YT9iOmF9XG5mdW5jdGlvbiBaKGEpe2lmKDAhPT1hLmxhc3RFeHBpcmVkVGltZSlhLmNhbGxiYWNrRXhwaXJhdGlvblRpbWU9MTA3Mzc0MTgyMyxhLmNhbGxiYWNrUHJpb3JpdHk9OTksYS5jYWxsYmFja05vZGU9aGcoTGouYmluZChudWxsLGEpKTtlbHNle3ZhciBiPU9qKGEpLGM9YS5jYWxsYmFja05vZGU7aWYoMD09PWIpbnVsbCE9PWMmJihhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tFeHBpcmF0aW9uVGltZT0wLGEuY2FsbGJhY2tQcmlvcml0eT05MCk7ZWxzZXt2YXIgZD1QZygpOzEwNzM3NDE4MjM9PT1iP2Q9OTk6MT09PWJ8fDI9PT1iP2Q9OTU6KGQ9MTAqKDEwNzM3NDE4MjEtYiktMTAqKDEwNzM3NDE4MjEtZCksZD0wPj1kPzk5OjI1MD49ZD85ODo1MjUwPj1kPzk3Ojk1KTtpZihudWxsIT09Yyl7dmFyIGU9YS5jYWxsYmFja1ByaW9yaXR5O2lmKGEuY2FsbGJhY2tFeHBpcmF0aW9uVGltZT09PWImJmU+PWQpcmV0dXJuO2MhPT1YZiYmTmYoYyl9YS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPVxuYjthLmNhbGxiYWNrUHJpb3JpdHk9ZDtiPTEwNzM3NDE4MjM9PT1iP2hnKExqLmJpbmQobnVsbCxhKSk6Z2coZCxRai5iaW5kKG51bGwsYSkse3RpbWVvdXQ6MTAqKDEwNzM3NDE4MjEtYiktY2coKX0pO2EuY2FsbGJhY2tOb2RlPWJ9fX1cbmZ1bmN0aW9uIFFqKGEsYil7Smo9MDtpZihiKXJldHVybiBiPVBnKCksUmooYSxiKSxaKGEpLG51bGw7dmFyIGM9T2ooYSk7aWYoMCE9PWMpe2I9YS5jYWxsYmFja05vZGU7aWYoKFQmKG9qfHBqKSkhPT1TKXRocm93IEVycm9yKHUoMzI3KSk7U2ooKTthPT09VSYmYz09PVd8fFRqKGEsYyk7aWYobnVsbCE9PVYpe3ZhciBkPVQ7VHw9b2o7dmFyIGU9VWooYSk7ZG8gdHJ5e1ZqKCk7YnJlYWt9Y2F0Y2goaCl7V2ooYSxoKX13aGlsZSgxKTtyZygpO1Q9ZDtsai5jdXJyZW50PWU7aWYoWD09PXJqKXRocm93IGI9d2osVGooYSxjKSxNaihhLGMpLFooYSksYjtpZihudWxsPT09Vilzd2l0Y2goZT1hLmZpbmlzaGVkV29yaz1hLmN1cnJlbnQuYWx0ZXJuYXRlLGEuZmluaXNoZWRFeHBpcmF0aW9uVGltZT1jLGQ9WCxVPW51bGwsZCl7Y2FzZSBxajpjYXNlIHJqOnRocm93IEVycm9yKHUoMzQ1KSk7Y2FzZSBzajpSaihhLDI8Yz8yOmMpO2JyZWFrO2Nhc2UgdGo6TWooYSxjKTtkPWEubGFzdFN1c3BlbmRlZFRpbWU7XG5jPT09ZCYmKGEubmV4dEtub3duUGVuZGluZ0xldmVsPVhqKGUpKTtpZigxMDczNzQxODIzPT09eGomJihlPWJqK0NqLWNnKCksMTA8ZSkpe2lmKEJqKXt2YXIgZj1hLmxhc3RQaW5nZWRUaW1lO2lmKDA9PT1mfHxmPj1jKXthLmxhc3RQaW5nZWRUaW1lPWM7VGooYSxjKTticmVha319Zj1PaihhKTtpZigwIT09ZiYmZiE9PWMpYnJlYWs7aWYoMCE9PWQmJmQhPT1jKXthLmxhc3RQaW5nZWRUaW1lPWQ7YnJlYWt9YS50aW1lb3V0SGFuZGxlPXBlKFlqLmJpbmQobnVsbCxhKSxlKTticmVha31ZaihhKTticmVhaztjYXNlIHVqOk1qKGEsYyk7ZD1hLmxhc3RTdXNwZW5kZWRUaW1lO2M9PT1kJiYoYS5uZXh0S25vd25QZW5kaW5nTGV2ZWw9WGooZSkpO2lmKEJqJiYoZT1hLmxhc3RQaW5nZWRUaW1lLDA9PT1lfHxlPj1jKSl7YS5sYXN0UGluZ2VkVGltZT1jO1RqKGEsYyk7YnJlYWt9ZT1PaihhKTtpZigwIT09ZSYmZSE9PWMpYnJlYWs7aWYoMCE9PWQmJmQhPT1jKXthLmxhc3RQaW5nZWRUaW1lPVxuZDticmVha30xMDczNzQxODIzIT09eWo/ZD0xMCooMTA3Mzc0MTgyMS15aiktY2coKToxMDczNzQxODIzPT09eGo/ZD0wOihkPTEwKigxMDczNzQxODIxLXhqKS01RTMsZT1jZygpLGM9MTAqKDEwNzM3NDE4MjEtYyktZSxkPWUtZCwwPmQmJihkPTApLGQ9KDEyMD5kPzEyMDo0ODA+ZD80ODA6MTA4MD5kPzEwODA6MTkyMD5kPzE5MjA6M0UzPmQ/M0UzOjQzMjA+ZD80MzIwOjE5NjAqa2ooZC8xOTYwKSktZCxjPGQmJihkPWMpKTtpZigxMDxkKXthLnRpbWVvdXRIYW5kbGU9cGUoWWouYmluZChudWxsLGEpLGQpO2JyZWFrfVlqKGEpO2JyZWFrO2Nhc2Ugdmo6aWYoMTA3Mzc0MTgyMyE9PXhqJiZudWxsIT09emope2Y9eGo7dmFyIGc9emo7ZD1nLmJ1c3lNaW5EdXJhdGlvbk1zfDA7MD49ZD9kPTA6KGU9Zy5idXN5RGVsYXlNc3wwLGY9Y2coKS0oMTAqKDEwNzM3NDE4MjEtZiktKGcudGltZW91dE1zfDB8fDVFMykpLGQ9Zjw9ZT8wOmUrZC1mKTtpZigxMDxkKXtNaihhLGMpO2EudGltZW91dEhhbmRsZT1cbnBlKFlqLmJpbmQobnVsbCxhKSxkKTticmVha319WWooYSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih1KDMyOSkpO31aKGEpO2lmKGEuY2FsbGJhY2tOb2RlPT09YilyZXR1cm4gUWouYmluZChudWxsLGEpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIExqKGEpe3ZhciBiPWEubGFzdEV4cGlyZWRUaW1lO2I9MCE9PWI/YjoxMDczNzQxODIzO2lmKGEuZmluaXNoZWRFeHBpcmF0aW9uVGltZT09PWIpWWooYSk7ZWxzZXtpZigoVCYob2p8cGopKSE9PVMpdGhyb3cgRXJyb3IodSgzMjcpKTtTaigpO2E9PT1VJiZiPT09V3x8VGooYSxiKTtpZihudWxsIT09Vil7dmFyIGM9VDtUfD1vajt2YXIgZD1VaihhKTtkbyB0cnl7WmooKTticmVha31jYXRjaChlKXtXaihhLGUpfXdoaWxlKDEpO3JnKCk7VD1jO2xqLmN1cnJlbnQ9ZDtpZihYPT09cmopdGhyb3cgYz13aixUaihhLGIpLE1qKGEsYiksWihhKSxjO2lmKG51bGwhPT1WKXRocm93IEVycm9yKHUoMjYxKSk7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9YjtVPW51bGw7WWooYSk7WihhKX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBhaygpe2lmKG51bGwhPT1Hail7dmFyIGE9R2o7R2o9bnVsbDthLmZvckVhY2goZnVuY3Rpb24oYSxjKXtSaihjLGEpO1ooYyl9KTtqZygpfX1mdW5jdGlvbiBiayhhLGIpe3ZhciBjPVQ7VHw9MTt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtUPWMsVD09PVMmJmpnKCl9fWZ1bmN0aW9uIGNrKGEsYil7dmFyIGM9VDtUJj0tMjtUfD1uajt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtUPWMsVD09PVMmJmpnKCl9fVxuZnVuY3Rpb24gVGooYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRFeHBpcmF0aW9uVGltZT0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEscWUoYykpO2lmKG51bGwhPT1WKWZvcihjPVYucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTp2YXIgZT1kLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7bnVsbCE9PWUmJnZvaWQgMCE9PWUmJkZmKGQpO2JyZWFrO2Nhc2UgMzpuaChkKTtHZihkKTticmVhaztjYXNlIDU6cGgoZCk7YnJlYWs7Y2FzZSA0Om5oKGQpO2JyZWFrO2Nhc2UgMTM6RyhNLGQpO2JyZWFrO2Nhc2UgMTk6RyhNLGQpO2JyZWFrO2Nhc2UgMTA6dGcoZCl9Yz1jLnJldHVybn1VPWE7Vj1haChhLmN1cnJlbnQsbnVsbCxiKTtXPWI7WD1xajt3aj1udWxsO3lqPXhqPTEwNzM3NDE4MjM7emo9bnVsbDtBaj0wO0JqPSExfVxuZnVuY3Rpb24gV2ooYSxiKXtkb3t0cnl7cmcoKTtNaCgpO2lmKG51bGw9PT1WfHxudWxsPT09Vi5yZXR1cm4pcmV0dXJuIFg9cmosd2o9YixudWxsO2E6e3ZhciBjPWEsZD1WLnJldHVybixlPVYsZj1iO2I9VztlLmVmZmVjdFRhZ3w9MjA0ODtlLmZpcnN0RWZmZWN0PWUubGFzdEVmZmVjdD1udWxsO2lmKG51bGwhPT1mJiZcIm9iamVjdFwiPT09dHlwZW9mIGYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLnRoZW4pe3ZhciBnPWYsaD0wIT09KE0uY3VycmVudCYxKSxrPWQ7ZG97dmFyIGw7aWYobD0xMz09PWsudGFnKXt2YXIgbT1rLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PW0pbD1udWxsIT09bS5kZWh5ZHJhdGVkPyEwOiExO2Vsc2V7dmFyIEM9ay5tZW1vaXplZFByb3BzO2w9dm9pZCAwPT09Qy5mYWxsYmFjaz8hMTohMCE9PUMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2s/ITA6aD8hMTohMH19aWYobCl7dmFyIHk9ay51cGRhdGVRdWV1ZTtpZihudWxsPT09eSl7dmFyIEg9bmV3IFNldDtcbkguYWRkKGcpO2sudXBkYXRlUXVldWU9SH1lbHNlIHkuYWRkKGcpO2lmKDA9PT0oay5tb2RlJjIpKXtrLmVmZmVjdFRhZ3w9NjQ7ZS5lZmZlY3RUYWcmPS0yOTgxO2lmKDE9PT1lLnRhZylpZihudWxsPT09ZS5hbHRlcm5hdGUpZS50YWc9MTc7ZWxzZXt2YXIgej1CZygxMDczNzQxODIzLG51bGwpO3oudGFnPTI7RGcoZSx6KX1lLmV4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjM7YnJlYWsgYX1mPXZvaWQgMDtlPWI7dmFyIHRhPWMucGluZ0NhY2hlO251bGw9PT10YT8odGE9Yy5waW5nQ2FjaGU9bmV3IGVqLGY9bmV3IFNldCx0YS5zZXQoZyxmKSk6KGY9dGEuZ2V0KGcpLHZvaWQgMD09PWYmJihmPW5ldyBTZXQsdGEuc2V0KGcsZikpKTtpZighZi5oYXMoZSkpe2YuYWRkKGUpO3ZhciByPWRrLmJpbmQobnVsbCxjLGcsZSk7Zy50aGVuKHIscil9ay5lZmZlY3RUYWd8PTQwOTY7ay5leHBpcmF0aW9uVGltZT1iO2JyZWFrIGF9az1rLnJldHVybn13aGlsZShudWxsIT09ayk7Zj1FcnJvcigoV2EoZS50eXBlKXx8XG5cIkEgUmVhY3QgY29tcG9uZW50XCIpK1wiIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcblxcbkFkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gcHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuXCIrWGEoZSkpfVghPT12aiYmKFg9c2opO2Y9TmkoZixlKTtrPWQ7ZG97c3dpdGNoKGsudGFnKXtjYXNlIDM6Zz1mO2suZWZmZWN0VGFnfD00MDk2O2suZXhwaXJhdGlvblRpbWU9Yjt2YXIgeD1maihrLGcsYik7RWcoayx4KTticmVhayBhO2Nhc2UgMTpnPWY7dmFyIEE9ay50eXBlLHA9ay5zdGF0ZU5vZGU7aWYoMD09PShrLmVmZmVjdFRhZyY2NCkmJihcImZ1bmN0aW9uXCI9PT10eXBlb2YgQS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1wJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgcC5jb21wb25lbnREaWRDYXRjaCYmXG4obnVsbD09PWpqfHwhamouaGFzKHApKSkpe2suZWZmZWN0VGFnfD00MDk2O2suZXhwaXJhdGlvblRpbWU9Yjt2YXIgdD1paihrLGcsYik7RWcoayx0KTticmVhayBhfX1rPWsucmV0dXJufXdoaWxlKG51bGwhPT1rKX1WPWVrKFYpfWNhdGNoKHYpe2I9djtjb250aW51ZX1icmVha313aGlsZSgxKX1mdW5jdGlvbiBVaigpe3ZhciBhPWxqLmN1cnJlbnQ7bGouY3VycmVudD1MaDtyZXR1cm4gbnVsbD09PWE/TGg6YX1mdW5jdGlvbiBJZyhhLGIpe2E8eGomJjI8YSYmKHhqPWEpO251bGwhPT1iJiZhPHlqJiYyPGEmJih5aj1hLHpqPWIpfWZ1bmN0aW9uIEpnKGEpe2E+QWomJihBaj1hKX1mdW5jdGlvbiBaaigpe2Zvcig7bnVsbCE9PVY7KVY9ZmsoVil9ZnVuY3Rpb24gVmooKXtmb3IoO251bGwhPT1WJiYhT2YoKTspVj1mayhWKX1cbmZ1bmN0aW9uIGZrKGEpe3ZhciBiPWdrKGEuYWx0ZXJuYXRlLGEsVyk7YS5tZW1vaXplZFByb3BzPWEucGVuZGluZ1Byb3BzO251bGw9PT1iJiYoYj1layhhKSk7bWouY3VycmVudD1udWxsO3JldHVybiBifVxuZnVuY3Rpb24gZWsoYSl7Vj1hO2Rve3ZhciBiPVYuYWx0ZXJuYXRlO2E9Vi5yZXR1cm47aWYoMD09PShWLmVmZmVjdFRhZyYyMDQ4KSl7YTp7dmFyIGM9YjtiPVY7dmFyIGQ9Vzt2YXIgZT1iLnBlbmRpbmdQcm9wcztzd2l0Y2goYi50YWcpe2Nhc2UgMjpicmVhaztjYXNlIDE2OmJyZWFrO2Nhc2UgMTU6Y2FzZSAwOmJyZWFrO2Nhc2UgMTpMKGIudHlwZSkmJkZmKGIpO2JyZWFrO2Nhc2UgMzpuaChiKTtHZihiKTtlPWIuc3RhdGVOb2RlO2UucGVuZGluZ0NvbnRleHQmJihlLmNvbnRleHQ9ZS5wZW5kaW5nQ29udGV4dCxlLnBlbmRpbmdDb250ZXh0PW51bGwpOyhudWxsPT09Y3x8bnVsbD09PWMuY2hpbGQpJiZraShiKSYmQ2koYik7SWkoYik7YnJlYWs7Y2FzZSA1OnBoKGIpO2Q9bGgoa2guY3VycmVudCk7dmFyIGY9Yi50eXBlO2lmKG51bGwhPT1jJiZudWxsIT1iLnN0YXRlTm9kZSlKaShjLGIsZixlLGQpLGMucmVmIT09Yi5yZWYmJihiLmVmZmVjdFRhZ3w9MTI4KTtlbHNlIGlmKGUpe3ZhciBnPVxubGgoaWguY3VycmVudCk7aWYoa2koYikpe2U9Yjt2YXIgaD1lLnN0YXRlTm9kZTtjPWUudHlwZTt2YXIgaz1lLm1lbW9pemVkUHJvcHMsbD1kO2hbdWVdPWU7aFt2ZV09aztmPXZvaWQgMDtkPWg7c3dpdGNoKGMpe2Nhc2UgXCJpZnJhbWVcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcImVtYmVkXCI6RihcImxvYWRcIixkKTticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoaD0wO2g8Y2MubGVuZ3RoO2grKylGKGNjW2hdLGQpO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpGKFwiZXJyb3JcIixkKTticmVhaztjYXNlIFwiaW1nXCI6Y2FzZSBcImltYWdlXCI6Y2FzZSBcImxpbmtcIjpGKFwiZXJyb3JcIixkKTtGKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJmb3JtXCI6RihcInJlc2V0XCIsZCk7RihcInN1Ym1pdFwiLGQpO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RihcInRvZ2dsZVwiLGQpO2JyZWFrO2Nhc2UgXCJpbnB1dFwiOkJiKGQsayk7RihcImludmFsaWRcIixkKTskZChsLFwib25DaGFuZ2VcIik7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmQuX3dyYXBwZXJTdGF0ZT1cbnt3YXNNdWx0aXBsZTohIWsubXVsdGlwbGV9O0YoXCJpbnZhbGlkXCIsZCk7JGQobCxcIm9uQ2hhbmdlXCIpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOkxiKGQsayksRihcImludmFsaWRcIixkKSwkZChsLFwib25DaGFuZ2VcIil9WWQoYyxrKTtoPW51bGw7Zm9yKGYgaW4gaylrLmhhc093blByb3BlcnR5KGYpJiYoZz1rW2ZdLFwiY2hpbGRyZW5cIj09PWY/XCJzdHJpbmdcIj09PXR5cGVvZiBnP2QudGV4dENvbnRlbnQhPT1nJiYoaD1bXCJjaGlsZHJlblwiLGddKTpcIm51bWJlclwiPT09dHlwZW9mIGcmJmQudGV4dENvbnRlbnQhPT1cIlwiK2cmJihoPVtcImNoaWxkcmVuXCIsXCJcIitnXSk6aWEuaGFzT3duUHJvcGVydHkoZikmJm51bGwhPWcmJiRkKGwsZikpO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjp5YihkKTtHYihkLGssITApO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOnliKGQpO05iKGQsayk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBrLm9uQ2xpY2smJlxuKGQub25jbGljaz1hZSl9Zj1oO2UudXBkYXRlUXVldWU9ZjtlPW51bGwhPT1mPyEwOiExO2UmJkNpKGIpfWVsc2V7Yz1iO2w9ZjtrPWU7aD05PT09ZC5ub2RlVHlwZT9kOmQub3duZXJEb2N1bWVudDtnPT09T2IuaHRtbCYmKGc9UGIobCkpO2c9PT1PYi5odG1sP1wic2NyaXB0XCI9PT1sPyhrPWguY3JlYXRlRWxlbWVudChcImRpdlwiKSxrLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGg9ay5yZW1vdmVDaGlsZChrLmZpcnN0Q2hpbGQpKTpcInN0cmluZ1wiPT09dHlwZW9mIGsuaXM/aD1oLmNyZWF0ZUVsZW1lbnQobCx7aXM6ay5pc30pOihoPWguY3JlYXRlRWxlbWVudChsKSxcInNlbGVjdFwiPT09bCYmKGw9aCxrLm11bHRpcGxlP2wubXVsdGlwbGU9ITA6ay5zaXplJiYobC5zaXplPWsuc2l6ZSkpKTpoPWguY3JlYXRlRWxlbWVudE5TKGcsbCk7az1oO2tbdWVdPWM7a1t2ZV09ZTtIaShrLGIsITEsITEpO2Iuc3RhdGVOb2RlPWs7bD1mO2M9ZTt2YXIgbT1kLEM9WmQobCxjKTtzd2l0Y2gobCl7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpGKFwibG9hZFwiLFxuayk7ZD1jO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihkPTA7ZDxjYy5sZW5ndGg7ZCsrKUYoY2NbZF0sayk7ZD1jO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpGKFwiZXJyb3JcIixrKTtkPWM7YnJlYWs7Y2FzZSBcImltZ1wiOmNhc2UgXCJpbWFnZVwiOmNhc2UgXCJsaW5rXCI6RihcImVycm9yXCIsayk7RihcImxvYWRcIixrKTtkPWM7YnJlYWs7Y2FzZSBcImZvcm1cIjpGKFwicmVzZXRcIixrKTtGKFwic3VibWl0XCIsayk7ZD1jO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RihcInRvZ2dsZVwiLGspO2Q9YzticmVhaztjYXNlIFwiaW5wdXRcIjpCYihrLGMpO2Q9QWIoayxjKTtGKFwiaW52YWxpZFwiLGspOyRkKG0sXCJvbkNoYW5nZVwiKTticmVhaztjYXNlIFwib3B0aW9uXCI6ZD1JYihrLGMpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjprLl93cmFwcGVyU3RhdGU9e3dhc011bHRpcGxlOiEhYy5tdWx0aXBsZX07ZD1uKHt9LGMse3ZhbHVlOnZvaWQgMH0pO0YoXCJpbnZhbGlkXCIsayk7JGQobSxcIm9uQ2hhbmdlXCIpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOkxiKGssXG5jKTtkPUtiKGssYyk7RihcImludmFsaWRcIixrKTskZChtLFwib25DaGFuZ2VcIik7YnJlYWs7ZGVmYXVsdDpkPWN9WWQobCxkKTtoPXZvaWQgMDtnPWw7dmFyIHk9ayxIPWQ7Zm9yKGggaW4gSClpZihILmhhc093blByb3BlcnR5KGgpKXt2YXIgej1IW2hdO1wic3R5bGVcIj09PWg/V2QoeSx6KTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1oPyh6PXo/ei5fX2h0bWw6dm9pZCAwLG51bGwhPXomJlNiKHkseikpOlwiY2hpbGRyZW5cIj09PWg/XCJzdHJpbmdcIj09PXR5cGVvZiB6PyhcInRleHRhcmVhXCIhPT1nfHxcIlwiIT09eikmJlRiKHkseik6XCJudW1iZXJcIj09PXR5cGVvZiB6JiZUYih5LFwiXCIreik6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWgmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1oJiZcImF1dG9Gb2N1c1wiIT09aCYmKGlhLmhhc093blByb3BlcnR5KGgpP251bGwhPXomJiRkKG0saCk6bnVsbCE9eiYmdmIoeSxoLHosQykpfXN3aXRjaChsKXtjYXNlIFwiaW5wdXRcIjp5YihrKTtcbkdiKGssYywhMSk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6eWIoayk7TmIoayxjKTticmVhaztjYXNlIFwib3B0aW9uXCI6bnVsbCE9Yy52YWx1ZSYmay5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIrdWIoYy52YWx1ZSkpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkPWs7ZC5tdWx0aXBsZT0hIWMubXVsdGlwbGU7az1jLnZhbHVlO251bGwhPWs/SmIoZCwhIWMubXVsdGlwbGUsaywhMSk6bnVsbCE9Yy5kZWZhdWx0VmFsdWUmJkpiKGQsISFjLm11bHRpcGxlLGMuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihrLm9uY2xpY2s9YWUpfShlPW5lKGYsZSkpJiZDaShiKX1udWxsIT09Yi5yZWYmJihiLmVmZmVjdFRhZ3w9MTI4KX1lbHNlIGlmKG51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih1KDE2NikpO2JyZWFrO2Nhc2UgNjppZihjJiZudWxsIT1iLnN0YXRlTm9kZSlLaShjLGIsYy5tZW1vaXplZFByb3BzLGUpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PVxudHlwZW9mIGUmJm51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih1KDE2NikpO2Q9bGgoa2guY3VycmVudCk7bGgoaWguY3VycmVudCk7a2koYik/KGU9YixmPWUuc3RhdGVOb2RlLGQ9ZS5tZW1vaXplZFByb3BzLGZbdWVdPWUsKGU9Zi5ub2RlVmFsdWUhPT1kKSYmQ2koYikpOihmPWIsZT0oOT09PWQubm9kZVR5cGU/ZDpkLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKGUpLGVbdWVdPWYsYi5zdGF0ZU5vZGU9ZSl9YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEzOkcoTSxiKTtlPWIubWVtb2l6ZWRTdGF0ZTtpZigwIT09KGIuZWZmZWN0VGFnJjY0KSl7Yi5leHBpcmF0aW9uVGltZT1kO2JyZWFrIGF9ZT1udWxsIT09ZTtmPSExO251bGw9PT1jP3ZvaWQgMCE9PWIubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayYma2koYik6KGQ9Yy5tZW1vaXplZFN0YXRlLGY9bnVsbCE9PWQsZXx8bnVsbD09PWR8fChkPWMuY2hpbGQuc2libGluZyxudWxsIT09ZCYmKGs9Yi5maXJzdEVmZmVjdCxcbm51bGwhPT1rPyhiLmZpcnN0RWZmZWN0PWQsZC5uZXh0RWZmZWN0PWspOihiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1kLGQubmV4dEVmZmVjdD1udWxsKSxkLmVmZmVjdFRhZz04KSkpO2lmKGUmJiFmJiYwIT09KGIubW9kZSYyKSlpZihudWxsPT09YyYmITAhPT1iLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fDAhPT0oTS5jdXJyZW50JjEpKVg9PT1xaiYmKFg9dGopO2Vsc2V7aWYoWD09PXFqfHxYPT09dGopWD11ajswIT09QWomJm51bGwhPT1VJiYoTWooVSxXKSxOaihVLEFqKSl9aWYoZXx8ZiliLmVmZmVjdFRhZ3w9NDticmVhaztjYXNlIDc6YnJlYWs7Y2FzZSA4OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSA0Om5oKGIpO0lpKGIpO2JyZWFrO2Nhc2UgMTA6dGcoYik7YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNzpMKGIudHlwZSkmJkZmKGIpO2JyZWFrO2Nhc2UgMTk6RyhNLGIpO2U9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1cbmUpYnJlYWs7Zj0wIT09KGIuZWZmZWN0VGFnJjY0KTtrPWUucmVuZGVyaW5nO2lmKG51bGw9PT1rKWlmKGYpTGkoZSwhMSk7ZWxzZXtpZihYIT09cWp8fG51bGwhPT1jJiYwIT09KGMuZWZmZWN0VGFnJjY0KSlmb3IoYz1iLmNoaWxkO251bGwhPT1jOyl7az1xaChjKTtpZihudWxsIT09ayl7Yi5lZmZlY3RUYWd8PTY0O0xpKGUsITEpO2Y9ay51cGRhdGVRdWV1ZTtudWxsIT09ZiYmKGIudXBkYXRlUXVldWU9ZixiLmVmZmVjdFRhZ3w9NCk7bnVsbD09PWUubGFzdEVmZmVjdCYmKGIuZmlyc3RFZmZlY3Q9bnVsbCk7Yi5sYXN0RWZmZWN0PWUubGFzdEVmZmVjdDtlPWQ7Zm9yKGY9Yi5jaGlsZDtudWxsIT09ZjspZD1mLGM9ZSxkLmVmZmVjdFRhZyY9MixkLm5leHRFZmZlY3Q9bnVsbCxkLmZpcnN0RWZmZWN0PW51bGwsZC5sYXN0RWZmZWN0PW51bGwsaz1kLmFsdGVybmF0ZSxudWxsPT09az8oZC5jaGlsZEV4cGlyYXRpb25UaW1lPTAsZC5leHBpcmF0aW9uVGltZT1jLGQuY2hpbGQ9bnVsbCxcbmQubWVtb2l6ZWRQcm9wcz1udWxsLGQubWVtb2l6ZWRTdGF0ZT1udWxsLGQudXBkYXRlUXVldWU9bnVsbCxkLmRlcGVuZGVuY2llcz1udWxsKTooZC5jaGlsZEV4cGlyYXRpb25UaW1lPWsuY2hpbGRFeHBpcmF0aW9uVGltZSxkLmV4cGlyYXRpb25UaW1lPWsuZXhwaXJhdGlvblRpbWUsZC5jaGlsZD1rLmNoaWxkLGQubWVtb2l6ZWRQcm9wcz1rLm1lbW9pemVkUHJvcHMsZC5tZW1vaXplZFN0YXRlPWsubWVtb2l6ZWRTdGF0ZSxkLnVwZGF0ZVF1ZXVlPWsudXBkYXRlUXVldWUsYz1rLmRlcGVuZGVuY2llcyxkLmRlcGVuZGVuY2llcz1udWxsPT09Yz9udWxsOntleHBpcmF0aW9uVGltZTpjLmV4cGlyYXRpb25UaW1lLGZpcnN0Q29udGV4dDpjLmZpcnN0Q29udGV4dCxyZXNwb25kZXJzOmMucmVzcG9uZGVyc30pLGY9Zi5zaWJsaW5nO0koTSxNLmN1cnJlbnQmMXwyLGIpO2I9Yi5jaGlsZDticmVhayBhfWM9Yy5zaWJsaW5nfX1lbHNle2lmKCFmKWlmKGM9cWgoayksbnVsbCE9PWMpe2lmKGIuZWZmZWN0VGFnfD1cbjY0LGY9ITAsZD1jLnVwZGF0ZVF1ZXVlLG51bGwhPT1kJiYoYi51cGRhdGVRdWV1ZT1kLGIuZWZmZWN0VGFnfD00KSxMaShlLCEwKSxudWxsPT09ZS50YWlsJiZcImhpZGRlblwiPT09ZS50YWlsTW9kZSYmIWsuYWx0ZXJuYXRlKXtiPWIubGFzdEVmZmVjdD1lLmxhc3RFZmZlY3Q7bnVsbCE9PWImJihiLm5leHRFZmZlY3Q9bnVsbCk7YnJlYWt9fWVsc2UgY2coKT5lLnRhaWxFeHBpcmF0aW9uJiYxPGQmJihiLmVmZmVjdFRhZ3w9NjQsZj0hMCxMaShlLCExKSxiLmV4cGlyYXRpb25UaW1lPWIuY2hpbGRFeHBpcmF0aW9uVGltZT1kLTEpO2UuaXNCYWNrd2FyZHM/KGsuc2libGluZz1iLmNoaWxkLGIuY2hpbGQ9ayk6KGQ9ZS5sYXN0LG51bGwhPT1kP2Quc2libGluZz1rOmIuY2hpbGQ9ayxlLmxhc3Q9ayl9aWYobnVsbCE9PWUudGFpbCl7MD09PWUudGFpbEV4cGlyYXRpb24mJihlLnRhaWxFeHBpcmF0aW9uPWNnKCkrNTAwKTtkPWUudGFpbDtlLnJlbmRlcmluZz1kO2UudGFpbD1kLnNpYmxpbmc7XG5lLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0O2Quc2libGluZz1udWxsO2U9TS5jdXJyZW50O2U9Zj9lJjF8MjplJjE7SShNLGUsYik7Yj1kO2JyZWFrIGF9YnJlYWs7Y2FzZSAyMDpicmVhaztjYXNlIDIxOmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IodSgxNTYsYi50YWcpKTt9Yj1udWxsfWU9VjtpZigxPT09V3x8MSE9PWUuY2hpbGRFeHBpcmF0aW9uVGltZSl7Zj0wO2ZvcihkPWUuY2hpbGQ7bnVsbCE9PWQ7KWM9ZC5leHBpcmF0aW9uVGltZSxrPWQuY2hpbGRFeHBpcmF0aW9uVGltZSxjPmYmJihmPWMpLGs+ZiYmKGY9ayksZD1kLnNpYmxpbmc7ZS5jaGlsZEV4cGlyYXRpb25UaW1lPWZ9aWYobnVsbCE9PWIpcmV0dXJuIGI7bnVsbCE9PWEmJjA9PT0oYS5lZmZlY3RUYWcmMjA0OCkmJihudWxsPT09YS5maXJzdEVmZmVjdCYmKGEuZmlyc3RFZmZlY3Q9Vi5maXJzdEVmZmVjdCksbnVsbCE9PVYubGFzdEVmZmVjdCYmKG51bGwhPT1hLmxhc3RFZmZlY3QmJihhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1cblYuZmlyc3RFZmZlY3QpLGEubGFzdEVmZmVjdD1WLmxhc3RFZmZlY3QpLDE8Vi5lZmZlY3RUYWcmJihudWxsIT09YS5sYXN0RWZmZWN0P2EubGFzdEVmZmVjdC5uZXh0RWZmZWN0PVY6YS5maXJzdEVmZmVjdD1WLGEubGFzdEVmZmVjdD1WKSl9ZWxzZXtiPU1pKFYsVyk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZWZmZWN0VGFnJj0yMDQ3LGI7bnVsbCE9PWEmJihhLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1udWxsLGEuZWZmZWN0VGFnfD0yMDQ4KX1iPVYuc2libGluZztpZihudWxsIT09YilyZXR1cm4gYjtWPWF9d2hpbGUobnVsbCE9PVYpO1g9PT1xaiYmKFg9dmopO3JldHVybiBudWxsfWZ1bmN0aW9uIFhqKGEpe3ZhciBiPWEuZXhwaXJhdGlvblRpbWU7YT1hLmNoaWxkRXhwaXJhdGlvblRpbWU7cmV0dXJuIGI+YT9iOmF9ZnVuY3Rpb24gWWooYSl7dmFyIGI9ZGcoKTtmZyg5OSxpay5iaW5kKG51bGwsYSxiKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBpayhhLGIpe2RvIFNqKCk7d2hpbGUobnVsbCE9PUVqKTtpZigoVCYob2p8cGopKSE9PVMpdGhyb3cgRXJyb3IodSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yayxkPWEuZmluaXNoZWRFeHBpcmF0aW9uVGltZTtpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRFeHBpcmF0aW9uVGltZT0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IodSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO2EuY2FsbGJhY2tFeHBpcmF0aW9uVGltZT0wO2EuY2FsbGJhY2tQcmlvcml0eT05MDthLm5leHRLbm93blBlbmRpbmdMZXZlbD0wO3ZhciBlPVhqKGMpO2EuZmlyc3RQZW5kaW5nVGltZT1lO2Q8PWEubGFzdFN1c3BlbmRlZFRpbWU/YS5maXJzdFN1c3BlbmRlZFRpbWU9YS5sYXN0U3VzcGVuZGVkVGltZT1hLm5leHRLbm93blBlbmRpbmdMZXZlbD0wOmQ8PWEuZmlyc3RTdXNwZW5kZWRUaW1lJiYoYS5maXJzdFN1c3BlbmRlZFRpbWU9XG5kLTEpO2Q8PWEubGFzdFBpbmdlZFRpbWUmJihhLmxhc3RQaW5nZWRUaW1lPTApO2Q8PWEubGFzdEV4cGlyZWRUaW1lJiYoYS5sYXN0RXhwaXJlZFRpbWU9MCk7YT09PVUmJihWPVU9bnVsbCxXPTApOzE8Yy5lZmZlY3RUYWc/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxlPWMuZmlyc3RFZmZlY3QpOmU9YzplPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWUpe3ZhciBmPVQ7VHw9cGo7bWouY3VycmVudD1udWxsO2xlPUxkO3ZhciBnPWZlKCk7aWYoZ2UoZykpe2lmKFwic2VsZWN0aW9uU3RhcnRcImluIGcpdmFyIGg9e3N0YXJ0Omcuc2VsZWN0aW9uU3RhcnQsZW5kOmcuc2VsZWN0aW9uRW5kfTtlbHNlIGE6e2g9KGg9Zy5vd25lckRvY3VtZW50KSYmaC5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciBrPWguZ2V0U2VsZWN0aW9uJiZoLmdldFNlbGVjdGlvbigpO2lmKGsmJjAhPT1rLnJhbmdlQ291bnQpe2g9ay5hbmNob3JOb2RlO3ZhciBsPWsuYW5jaG9yT2Zmc2V0LFxubT1rLmZvY3VzTm9kZTtrPWsuZm9jdXNPZmZzZXQ7dHJ5e2gubm9kZVR5cGUsbS5ub2RlVHlwZX1jYXRjaChEYil7aD1udWxsO2JyZWFrIGF9dmFyIEM9MCx5PS0xLEg9LTEsej0wLHRhPTAscj1nLHg9bnVsbDtiOmZvcig7Oyl7Zm9yKHZhciBBOzspe3IhPT1ofHwwIT09bCYmMyE9PXIubm9kZVR5cGV8fCh5PUMrbCk7ciE9PW18fDAhPT1rJiYzIT09ci5ub2RlVHlwZXx8KEg9QytrKTszPT09ci5ub2RlVHlwZSYmKEMrPXIubm9kZVZhbHVlLmxlbmd0aCk7aWYobnVsbD09PShBPXIuZmlyc3RDaGlsZCkpYnJlYWs7eD1yO3I9QX1mb3IoOzspe2lmKHI9PT1nKWJyZWFrIGI7eD09PWgmJisrej09PWwmJih5PUMpO3g9PT1tJiYrK3RhPT09ayYmKEg9Qyk7aWYobnVsbCE9PShBPXIubmV4dFNpYmxpbmcpKWJyZWFrO3I9eDt4PXIucGFyZW50Tm9kZX1yPUF9aD0tMT09PXl8fC0xPT09SD9udWxsOntzdGFydDp5LGVuZDpIfX1lbHNlIGg9bnVsbH1oPWh8fHtzdGFydDowLGVuZDowfX1lbHNlIGg9XG5udWxsO21lPXtmb2N1c2VkRWxlbTpnLHNlbGVjdGlvblJhbmdlOmh9O0xkPSExO1k9ZTtkbyB0cnl7amsoKX1jYXRjaChEYil7aWYobnVsbD09PVkpdGhyb3cgRXJyb3IodSgzMzApKTtSaShZLERiKTtZPVkubmV4dEVmZmVjdH13aGlsZShudWxsIT09WSk7WT1lO2RvIHRyeXtmb3IoZz1hLGg9YjtudWxsIT09WTspe3ZhciBwPVkuZWZmZWN0VGFnO3AmMTYmJlRiKFkuc3RhdGVOb2RlLFwiXCIpO2lmKHAmMTI4KXt2YXIgdD1ZLmFsdGVybmF0ZTtpZihudWxsIT09dCl7dmFyIHY9dC5yZWY7bnVsbCE9PXYmJihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdj92KG51bGwpOnYuY3VycmVudD1udWxsKX19c3dpdGNoKHAmMTAzOCl7Y2FzZSAyOiRpKFkpO1kuZWZmZWN0VGFnJj0tMzticmVhaztjYXNlIDY6JGkoWSk7WS5lZmZlY3RUYWcmPS0zO2FqKFkuYWx0ZXJuYXRlLFkpO2JyZWFrO2Nhc2UgMTAyNDpZLmVmZmVjdFRhZyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OlkuZWZmZWN0VGFnJj0tMTAyNTthaihZLmFsdGVybmF0ZSxcblkpO2JyZWFrO2Nhc2UgNDphaihZLmFsdGVybmF0ZSxZKTticmVhaztjYXNlIDg6bD1ZLFhpKGcsbCxoKSxZaShsKX1ZPVkubmV4dEVmZmVjdH19Y2F0Y2goRGIpe2lmKG51bGw9PT1ZKXRocm93IEVycm9yKHUoMzMwKSk7UmkoWSxEYik7WT1ZLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVkpO3Y9bWU7dD1mZSgpO3A9di5mb2N1c2VkRWxlbTtoPXYuc2VsZWN0aW9uUmFuZ2U7aWYodCE9PXAmJnAmJnAub3duZXJEb2N1bWVudCYmZWUocC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxwKSl7bnVsbCE9PWgmJmdlKHApJiYodD1oLnN0YXJ0LHY9aC5lbmQsdm9pZCAwPT09diYmKHY9dCksXCJzZWxlY3Rpb25TdGFydFwiaW4gcD8ocC5zZWxlY3Rpb25TdGFydD10LHAuc2VsZWN0aW9uRW5kPU1hdGgubWluKHYscC52YWx1ZS5sZW5ndGgpKToodj0odD1wLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LHYuZ2V0U2VsZWN0aW9uJiYodj12LmdldFNlbGVjdGlvbigpLFxubD1wLnRleHRDb250ZW50Lmxlbmd0aCxnPU1hdGgubWluKGguc3RhcnQsbCksaD12b2lkIDA9PT1oLmVuZD9nOk1hdGgubWluKGguZW5kLGwpLCF2LmV4dGVuZCYmZz5oJiYobD1oLGg9ZyxnPWwpLGw9ZGUocCxnKSxtPWRlKHAsaCksbCYmbSYmKDEhPT12LnJhbmdlQ291bnR8fHYuYW5jaG9yTm9kZSE9PWwubm9kZXx8di5hbmNob3JPZmZzZXQhPT1sLm9mZnNldHx8di5mb2N1c05vZGUhPT1tLm5vZGV8fHYuZm9jdXNPZmZzZXQhPT1tLm9mZnNldCkmJih0PXQuY3JlYXRlUmFuZ2UoKSx0LnNldFN0YXJ0KGwubm9kZSxsLm9mZnNldCksdi5yZW1vdmVBbGxSYW5nZXMoKSxnPmg/KHYuYWRkUmFuZ2UodCksdi5leHRlbmQobS5ub2RlLG0ub2Zmc2V0KSk6KHQuc2V0RW5kKG0ubm9kZSxtLm9mZnNldCksdi5hZGRSYW5nZSh0KSkpKSkpO3Q9W107Zm9yKHY9cDt2PXYucGFyZW50Tm9kZTspMT09PXYubm9kZVR5cGUmJnQucHVzaCh7ZWxlbWVudDp2LGxlZnQ6di5zY3JvbGxMZWZ0LHRvcDp2LnNjcm9sbFRvcH0pO1xuXCJmdW5jdGlvblwiPT09dHlwZW9mIHAuZm9jdXMmJnAuZm9jdXMoKTtmb3IocD0wO3A8dC5sZW5ndGg7cCsrKXY9dFtwXSx2LmVsZW1lbnQuc2Nyb2xsTGVmdD12LmxlZnQsdi5lbGVtZW50LnNjcm9sbFRvcD12LnRvcH1tZT1udWxsO0xkPSEhbGU7bGU9bnVsbDthLmN1cnJlbnQ9YztZPWU7ZG8gdHJ5e2ZvcihwPWQ7bnVsbCE9PVk7KXt2YXIgRGg9WS5lZmZlY3RUYWc7aWYoRGgmMzYpe3ZhciBkYz1ZLmFsdGVybmF0ZTt0PVk7dj1wO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpVaSgxNiwzMix0KTticmVhaztjYXNlIDE6dmFyIGZkPXQuc3RhdGVOb2RlO2lmKHQuZWZmZWN0VGFnJjQpaWYobnVsbD09PWRjKWZkLmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgaGs9dC5lbGVtZW50VHlwZT09PXQudHlwZT9kYy5tZW1vaXplZFByb3BzOm1nKHQudHlwZSxkYy5tZW1vaXplZFByb3BzKTtmZC5jb21wb25lbnREaWRVcGRhdGUoaGssZGMubWVtb2l6ZWRTdGF0ZSxcbmZkLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgRWg9dC51cGRhdGVRdWV1ZTtudWxsIT09RWgmJktnKHQsRWgsZmQsdik7YnJlYWs7Y2FzZSAzOnZhciBGaD10LnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1GaCl7Zz1udWxsO2lmKG51bGwhPT10LmNoaWxkKXN3aXRjaCh0LmNoaWxkLnRhZyl7Y2FzZSA1Omc9dC5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmc9dC5jaGlsZC5zdGF0ZU5vZGV9S2codCxGaCxnLHYpfWJyZWFrO2Nhc2UgNTp2YXIgeGs9dC5zdGF0ZU5vZGU7bnVsbD09PWRjJiZ0LmVmZmVjdFRhZyY0JiZuZSh0LnR5cGUsdC5tZW1vaXplZFByb3BzKSYmeGsuZm9jdXMoKTticmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihudWxsPT09dC5tZW1vaXplZFN0YXRlKXt2YXIgRGk9dC5hbHRlcm5hdGU7aWYobnVsbCE9PURpKXt2YXIgRWk9RGkubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09RWkpe3ZhciBGaT1cbkVpLmRlaHlkcmF0ZWQ7bnVsbCE9PUZpJiZMYyhGaSl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMDpjYXNlIDIxOmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IodSgxNjMpKTt9fWlmKERoJjEyOCl7dD12b2lkIDA7dmFyIHhkPVkucmVmO2lmKG51bGwhPT14ZCl7dmFyIEdpPVkuc3RhdGVOb2RlO3N3aXRjaChZLnRhZyl7Y2FzZSA1OnQ9R2k7YnJlYWs7ZGVmYXVsdDp0PUdpfVwiZnVuY3Rpb25cIj09PXR5cGVvZiB4ZD94ZCh0KTp4ZC5jdXJyZW50PXR9fVk9WS5uZXh0RWZmZWN0fX1jYXRjaChEYil7aWYobnVsbD09PVkpdGhyb3cgRXJyb3IodSgzMzApKTtSaShZLERiKTtZPVkubmV4dEVmZmVjdH13aGlsZShudWxsIT09WSk7WT1udWxsO1lmKCk7VD1mfWVsc2UgYS5jdXJyZW50PWM7aWYoRGopRGo9ITEsRWo9YSxGaj1iO2Vsc2UgZm9yKFk9ZTtudWxsIT09WTspYj1ZLm5leHRFZmZlY3QsWS5uZXh0RWZmZWN0PW51bGwsWT1iO2I9YS5maXJzdFBlbmRpbmdUaW1lOzA9PT1iJiZcbihqaj1udWxsKTsxMDczNzQxODIzPT09Yj9hPT09SWo/SGorKzooSGo9MCxJaj1hKTpIaj0wO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBrayYma2soYy5zdGF0ZU5vZGUsZCk7WihhKTtpZihnail0aHJvdyBnaj0hMSxhPWhqLGhqPW51bGwsYTtpZigoVCZuaikhPT1TKXJldHVybiBudWxsO2pnKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gamsoKXtmb3IoO251bGwhPT1ZOyl7dmFyIGE9WS5lZmZlY3RUYWc7MCE9PShhJjI1NikmJlRpKFkuYWx0ZXJuYXRlLFkpOzA9PT0oYSY1MTIpfHxEanx8KERqPSEwLGdnKDk3LGZ1bmN0aW9uKCl7U2ooKTtyZXR1cm4gbnVsbH0pKTtZPVkubmV4dEVmZmVjdH19ZnVuY3Rpb24gU2ooKXtpZig5MCE9PUZqKXt2YXIgYT05NzxGaj85NzpGajtGaj05MDtyZXR1cm4gZmcoYSxsayl9fVxuZnVuY3Rpb24gbGsoKXtpZihudWxsPT09RWopcmV0dXJuITE7dmFyIGE9RWo7RWo9bnVsbDtpZigoVCYob2p8cGopKSE9PVMpdGhyb3cgRXJyb3IodSgzMzEpKTt2YXIgYj1UO1R8PXBqO2ZvcihhPWEuY3VycmVudC5maXJzdEVmZmVjdDtudWxsIT09YTspe3RyeXt2YXIgYz1hO2lmKDAhPT0oYy5lZmZlY3RUYWcmNTEyKSlzd2l0Y2goYy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6VWkoMTI4LDAsYyksVWkoMCw2NCxjKX19Y2F0Y2goZCl7aWYobnVsbD09PWEpdGhyb3cgRXJyb3IodSgzMzApKTtSaShhLGQpfWM9YS5uZXh0RWZmZWN0O2EubmV4dEVmZmVjdD1udWxsO2E9Y31UPWI7amcoKTtyZXR1cm4hMH1mdW5jdGlvbiBtayhhLGIsYyl7Yj1OaShjLGIpO2I9ZmooYSxiLDEwNzM3NDE4MjMpO0RnKGEsYik7YT1LaihhLDEwNzM3NDE4MjMpO251bGwhPT1hJiZaKGEpfVxuZnVuY3Rpb24gUmkoYSxiKXtpZigzPT09YS50YWcpbWsoYSxhLGIpO2Vsc2UgZm9yKHZhciBjPWEucmV0dXJuO251bGwhPT1jOyl7aWYoMz09PWMudGFnKXttayhjLGEsYik7YnJlYWt9ZWxzZSBpZigxPT09Yy50YWcpe3ZhciBkPWMuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1qanx8IWpqLmhhcyhkKSkpe2E9TmkoYixhKTthPWlqKGMsYSwxMDczNzQxODIzKTtEZyhjLGEpO2M9S2ooYywxMDczNzQxODIzKTtudWxsIT09YyYmWihjKTticmVha319Yz1jLnJldHVybn19XG5mdW5jdGlvbiBkayhhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO1U9PT1hJiZXPT09Yz9YPT09dWp8fFg9PT10aiYmMTA3Mzc0MTgyMz09PXhqJiZjZygpLWJqPENqP1RqKGEsVyk6Qmo9ITA6UGooYSxjKSYmKGI9YS5sYXN0UGluZ2VkVGltZSwwIT09YiYmYjxjfHwoYS5sYXN0UGluZ2VkVGltZT1jLGEuZmluaXNoZWRFeHBpcmF0aW9uVGltZT09PWMmJihhLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9MCxhLmZpbmlzaGVkV29yaz1udWxsKSxaKGEpKSl9ZnVuY3Rpb24gZGooYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtudWxsIT09YyYmYy5kZWxldGUoYik7Yj0wOzA9PT1iJiYoYj1QZygpLGI9UWcoYixhLG51bGwpKTthPUtqKGEsYik7bnVsbCE9PWEmJlooYSl9dmFyIGdrO1xuZ2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWIuZXhwaXJhdGlvblRpbWU7aWYobnVsbCE9PWEpe3ZhciBlPWIucGVuZGluZ1Byb3BzO2lmKGEubWVtb2l6ZWRQcm9wcyE9PWV8fEsuY3VycmVudCl3Zz0hMDtlbHNle2lmKGQ8Yyl7d2c9ITE7c3dpdGNoKGIudGFnKXtjYXNlIDM6d2koYik7bGkoKTticmVhaztjYXNlIDU6b2goYik7aWYoYi5tb2RlJjQmJjEhPT1jJiZlLmhpZGRlbilyZXR1cm4gYi5leHBpcmF0aW9uVGltZT1iLmNoaWxkRXhwaXJhdGlvblRpbWU9MSxudWxsO2JyZWFrO2Nhc2UgMTpMKGIudHlwZSkmJkpmKGIpO2JyZWFrO2Nhc2UgNDptaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6c2coYixiLm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMTM6aWYobnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSl7ZD1iLmNoaWxkLmNoaWxkRXhwaXJhdGlvblRpbWU7aWYoMCE9PWQmJmQ+PWMpcmV0dXJuIHlpKGEsYixjKTtJKE0sTS5jdXJyZW50JlxuMSxiKTtiPW9pKGEsYixjKTtyZXR1cm4gbnVsbCE9PWI/Yi5zaWJsaW5nOm51bGx9SShNLE0uY3VycmVudCYxLGIpO2JyZWFrO2Nhc2UgMTk6ZD1iLmNoaWxkRXhwaXJhdGlvblRpbWU+PWM7aWYoMCE9PShhLmVmZmVjdFRhZyY2NCkpe2lmKGQpcmV0dXJuIEJpKGEsYixjKTtiLmVmZmVjdFRhZ3w9NjR9ZT1iLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihlLnJlbmRlcmluZz1udWxsLGUudGFpbD1udWxsKTtJKE0sTS5jdXJyZW50LGIpO2lmKCFkKXJldHVybiBudWxsfXJldHVybiBvaShhLGIsYyl9d2c9ITF9fWVsc2Ugd2c9ITE7Yi5leHBpcmF0aW9uVGltZT0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmQ9Yi50eXBlO251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZWZmZWN0VGFnfD0yKTthPWIucGVuZGluZ1Byb3BzO2U9RWYoYixKLmN1cnJlbnQpO3ZnKGIsYyk7ZT1JaChudWxsLGIsZCxhLGUsYyk7Yi5lZmZlY3RUYWd8PTE7aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIGUmJm51bGwhPT1lJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5yZW5kZXImJnZvaWQgMD09PWUuJCR0eXBlb2Ype2IudGFnPTE7TWgoKTtpZihMKGQpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7Yi5tZW1vaXplZFN0YXRlPW51bGwhPT1lLnN0YXRlJiZ2b2lkIDAhPT1lLnN0YXRlP2Uuc3RhdGU6bnVsbDt2YXIgZz1kLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmT2coYixkLGcsYSk7ZS51cGRhdGVyPVNnO2Iuc3RhdGVOb2RlPWU7ZS5fcmVhY3RJbnRlcm5hbEZpYmVyPWI7V2coYixkLGEsYyk7Yj12aShudWxsLGIsZCwhMCxmLGMpfWVsc2UgYi50YWc9MCxSKG51bGwsYixlLGMpLGI9Yi5jaGlsZDtyZXR1cm4gYjtjYXNlIDE2OmU9Yi5lbGVtZW50VHlwZTtudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmVmZmVjdFRhZ3w9Mik7YT1iLnBlbmRpbmdQcm9wcztWYShlKTtpZigxIT09ZS5fc3RhdHVzKXRocm93IGUuX3Jlc3VsdDtcbmU9ZS5fcmVzdWx0O2IudHlwZT1lO2Y9Yi50YWc9bmsoZSk7YT1tZyhlLGEpO3N3aXRjaChmKXtjYXNlIDA6Yj1zaShudWxsLGIsZSxhLGMpO2JyZWFrO2Nhc2UgMTpiPXVpKG51bGwsYixlLGEsYyk7YnJlYWs7Y2FzZSAxMTpiPW5pKG51bGwsYixlLGEsYyk7YnJlYWs7Y2FzZSAxNDpiPXBpKG51bGwsYixlLG1nKGUudHlwZSxhKSxkLGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IodSgzMDYsZSxcIlwiKSk7fXJldHVybiBiO2Nhc2UgMDpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bWcoZCxlKSxzaShhLGIsZCxlLGMpO2Nhc2UgMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bWcoZCxlKSx1aShhLGIsZCxlLGMpO2Nhc2UgMzp3aShiKTtkPWIudXBkYXRlUXVldWU7aWYobnVsbD09PWQpdGhyb3cgRXJyb3IodSgyODIpKTtlPWIubWVtb2l6ZWRTdGF0ZTtlPW51bGwhPT1lP2UuZWxlbWVudDpcbm51bGw7SGcoYixkLGIucGVuZGluZ1Byb3BzLG51bGwsYyk7ZD1iLm1lbW9pemVkU3RhdGUuZWxlbWVudDtpZihkPT09ZSlsaSgpLGI9b2koYSxiLGMpO2Vsc2V7aWYoZT1iLnN0YXRlTm9kZS5oeWRyYXRlKWRpPXJlKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCksY2k9YixlPWVpPSEwO2lmKGUpZm9yKGM9Z2goYixudWxsLGQsYyksYi5jaGlsZD1jO2M7KWMuZWZmZWN0VGFnPWMuZWZmZWN0VGFnJi0zfDEwMjQsYz1jLnNpYmxpbmc7ZWxzZSBSKGEsYixkLGMpLGxpKCk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgNTpyZXR1cm4gb2goYiksbnVsbD09PWEmJmlpKGIpLGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZj1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6bnVsbCxnPWUuY2hpbGRyZW4sb2UoZCxlKT9nPW51bGw6bnVsbCE9PWYmJm9lKGQsZikmJihiLmVmZmVjdFRhZ3w9MTYpLHRpKGEsYiksYi5tb2RlJjQmJjEhPT1jJiZlLmhpZGRlbj8oYi5leHBpcmF0aW9uVGltZT1cbmIuY2hpbGRFeHBpcmF0aW9uVGltZT0xLGI9bnVsbCk6KFIoYSxiLGcsYyksYj1iLmNoaWxkKSxiO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJmlpKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4geWkoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gbWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9ZmgoYixudWxsLGQsYyk6UihhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOm1nKGQsZSksbmkoYSxiLGQsZSxjKTtjYXNlIDc6cmV0dXJuIFIoYSxiLGIucGVuZGluZ1Byb3BzLGMpLGIuY2hpbGQ7Y2FzZSA4OnJldHVybiBSKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixjKSxiLmNoaWxkO2Nhc2UgMTI6cmV0dXJuIFIoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMDphOntkPWIudHlwZS5fY29udGV4dDtcbmU9Yi5wZW5kaW5nUHJvcHM7Zz1iLm1lbW9pemVkUHJvcHM7Zj1lLnZhbHVlO3NnKGIsZik7aWYobnVsbCE9PWcpe3ZhciBoPWcudmFsdWU7Zj1vZihoLGYpPzA6KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9kLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhoLGYpOjEwNzM3NDE4MjMpfDA7aWYoMD09PWYpe2lmKGcuY2hpbGRyZW49PT1lLmNoaWxkcmVuJiYhSy5jdXJyZW50KXtiPW9pKGEsYixjKTticmVhayBhfX1lbHNlIGZvcihoPWIuY2hpbGQsbnVsbCE9PWgmJihoLnJldHVybj1iKTtudWxsIT09aDspe3ZhciBrPWguZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1rKXtnPWguY2hpbGQ7Zm9yKHZhciBsPWsuZmlyc3RDb250ZXh0O251bGwhPT1sOyl7aWYobC5jb250ZXh0PT09ZCYmMCE9PShsLm9ic2VydmVkQml0cyZmKSl7MT09PWgudGFnJiYobD1CZyhjLG51bGwpLGwudGFnPTIsRGcoaCxsKSk7aC5leHBpcmF0aW9uVGltZTxjJiYoaC5leHBpcmF0aW9uVGltZT1cbmMpO2w9aC5hbHRlcm5hdGU7bnVsbCE9PWwmJmwuZXhwaXJhdGlvblRpbWU8YyYmKGwuZXhwaXJhdGlvblRpbWU9Yyk7dWcoaC5yZXR1cm4sYyk7ay5leHBpcmF0aW9uVGltZTxjJiYoay5leHBpcmF0aW9uVGltZT1jKTticmVha31sPWwubmV4dH19ZWxzZSBnPTEwPT09aC50YWc/aC50eXBlPT09Yi50eXBlP251bGw6aC5jaGlsZDpoLmNoaWxkO2lmKG51bGwhPT1nKWcucmV0dXJuPWg7ZWxzZSBmb3IoZz1oO251bGwhPT1nOyl7aWYoZz09PWIpe2c9bnVsbDticmVha31oPWcuc2libGluZztpZihudWxsIT09aCl7aC5yZXR1cm49Zy5yZXR1cm47Zz1oO2JyZWFrfWc9Zy5yZXR1cm59aD1nfX1SKGEsYixlLmNoaWxkcmVuLGMpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDk6cmV0dXJuIGU9Yi50eXBlLGY9Yi5wZW5kaW5nUHJvcHMsZD1mLmNoaWxkcmVuLHZnKGIsYyksZT14ZyhlLGYudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSxkPWQoZSksYi5lZmZlY3RUYWd8PTEsUihhLGIsZCxjKSxiLmNoaWxkO1xuY2FzZSAxNDpyZXR1cm4gZT1iLnR5cGUsZj1tZyhlLGIucGVuZGluZ1Byb3BzKSxmPW1nKGUudHlwZSxmKSxwaShhLGIsZSxmLGQsYyk7Y2FzZSAxNTpyZXR1cm4gcmkoYSxiLGIudHlwZSxiLnBlbmRpbmdQcm9wcyxkLGMpO2Nhc2UgMTc6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOm1nKGQsZSksbnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5lZmZlY3RUYWd8PTIpLGIudGFnPTEsTChkKT8oYT0hMCxKZihiKSk6YT0hMSx2ZyhiLGMpLFVnKGIsZCxlLGMpLFdnKGIsZCxlLGMpLHZpKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gQmkoYSxiLGMpfXRocm93IEVycm9yKHUoMTU2LGIudGFnKSk7fTt2YXIga2s9bnVsbCxXaT1udWxsO1xuZnVuY3Rpb24gb2soYSl7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pcmV0dXJuITE7dmFyIGI9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKGIuaXNEaXNhYmxlZHx8IWIuc3VwcG9ydHNGaWJlcilyZXR1cm4hMDt0cnl7dmFyIGM9Yi5pbmplY3QoYSk7a2s9ZnVuY3Rpb24oYSl7dHJ5e2Iub25Db21taXRGaWJlclJvb3QoYyxhLHZvaWQgMCw2ND09PShhLmN1cnJlbnQuZWZmZWN0VGFnJjY0KSl9Y2F0Y2goZSl7fX07V2k9ZnVuY3Rpb24oYSl7dHJ5e2Iub25Db21taXRGaWJlclVubW91bnQoYyxhKX1jYXRjaChlKXt9fX1jYXRjaChkKXt9cmV0dXJuITB9XG5mdW5jdGlvbiBwayhhLGIsYyxkKXt0aGlzLnRhZz1hO3RoaXMua2V5PWM7dGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbDt0aGlzLmluZGV4PTA7dGhpcy5yZWY9bnVsbDt0aGlzLnBlbmRpbmdQcm9wcz1iO3RoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsO3RoaXMubW9kZT1kO3RoaXMuZWZmZWN0VGFnPTA7dGhpcy5sYXN0RWZmZWN0PXRoaXMuZmlyc3RFZmZlY3Q9dGhpcy5uZXh0RWZmZWN0PW51bGw7dGhpcy5jaGlsZEV4cGlyYXRpb25UaW1lPXRoaXMuZXhwaXJhdGlvblRpbWU9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIGdpKGEsYixjLGQpe3JldHVybiBuZXcgcGsoYSxiLGMsZCl9XG5mdW5jdGlvbiBxaShhKXthPWEucHJvdG90eXBlO3JldHVybiEoIWF8fCFhLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIG5rKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBxaShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09T2EpcmV0dXJuIDExO2lmKGE9PT1SYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBhaChhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPWdpKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMuZWZmZWN0VGFnPTAsYy5uZXh0RWZmZWN0PW51bGwsYy5maXJzdEVmZmVjdD1udWxsLGMubGFzdEVmZmVjdD1udWxsKTtjLmNoaWxkRXhwaXJhdGlvblRpbWU9YS5jaGlsZEV4cGlyYXRpb25UaW1lO2MuZXhwaXJhdGlvblRpbWU9YS5leHBpcmF0aW9uVGltZTtjLmNoaWxkPWEuY2hpbGQ7Yy5tZW1vaXplZFByb3BzPWEubWVtb2l6ZWRQcm9wcztjLm1lbW9pemVkU3RhdGU9YS5tZW1vaXplZFN0YXRlO2MudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZTtiPWEuZGVwZW5kZW5jaWVzO2MuZGVwZW5kZW5jaWVzPW51bGw9PT1iP251bGw6e2V4cGlyYXRpb25UaW1lOmIuZXhwaXJhdGlvblRpbWUsXG5maXJzdENvbnRleHQ6Yi5maXJzdENvbnRleHQscmVzcG9uZGVyczpiLnJlc3BvbmRlcnN9O2Muc2libGluZz1hLnNpYmxpbmc7Yy5pbmRleD1hLmluZGV4O2MucmVmPWEucmVmO3JldHVybiBjfVxuZnVuY3Rpb24gY2goYSxiLGMsZCxlLGYpe3ZhciBnPTI7ZD1hO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXFpKGEpJiYoZz0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlnPTU7ZWxzZSBhOnN3aXRjaChhKXtjYXNlIElhOnJldHVybiBlaChjLmNoaWxkcmVuLGUsZixiKTtjYXNlIE5hOmc9ODtlfD03O2JyZWFrO2Nhc2UgSmE6Zz04O2V8PTE7YnJlYWs7Y2FzZSBLYTpyZXR1cm4gYT1naSgxMixjLGIsZXw4KSxhLmVsZW1lbnRUeXBlPUthLGEudHlwZT1LYSxhLmV4cGlyYXRpb25UaW1lPWYsYTtjYXNlIFBhOnJldHVybiBhPWdpKDEzLGMsYixlKSxhLnR5cGU9UGEsYS5lbGVtZW50VHlwZT1QYSxhLmV4cGlyYXRpb25UaW1lPWYsYTtjYXNlIFFhOnJldHVybiBhPWdpKDE5LGMsYixlKSxhLmVsZW1lbnRUeXBlPVFhLGEuZXhwaXJhdGlvblRpbWU9ZixhO2RlZmF1bHQ6aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBMYTpnPVxuMTA7YnJlYWsgYTtjYXNlIE1hOmc9OTticmVhayBhO2Nhc2UgT2E6Zz0xMTticmVhayBhO2Nhc2UgUmE6Zz0xNDticmVhayBhO2Nhc2UgU2E6Zz0xNjtkPW51bGw7YnJlYWsgYX10aHJvdyBFcnJvcih1KDEzMCxudWxsPT1hP2E6dHlwZW9mIGEsXCJcIikpO31iPWdpKGcsYyxiLGUpO2IuZWxlbWVudFR5cGU9YTtiLnR5cGU9ZDtiLmV4cGlyYXRpb25UaW1lPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gZWgoYSxiLGMsZCl7YT1naSg3LGEsZCxiKTthLmV4cGlyYXRpb25UaW1lPWM7cmV0dXJuIGF9ZnVuY3Rpb24gYmgoYSxiLGMpe2E9Z2koNixhLG51bGwsYik7YS5leHBpcmF0aW9uVGltZT1jO3JldHVybiBhfVxuZnVuY3Rpb24gZGgoYSxiLGMpe2I9Z2koNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IuZXhwaXJhdGlvblRpbWU9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9XG5mdW5jdGlvbiBxayhhLGIsYyl7dGhpcy50YWc9Yjt0aGlzLmN1cnJlbnQ9bnVsbDt0aGlzLmNvbnRhaW5lckluZm89YTt0aGlzLnBpbmdDYWNoZT10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsO3RoaXMuZmluaXNoZWRFeHBpcmF0aW9uVGltZT0wO3RoaXMuZmluaXNoZWRXb3JrPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9bnVsbDt0aGlzLmNhbGxiYWNrUHJpb3JpdHk9OTA7dGhpcy5sYXN0RXhwaXJlZFRpbWU9dGhpcy5sYXN0UGluZ2VkVGltZT10aGlzLm5leHRLbm93blBlbmRpbmdMZXZlbD10aGlzLmxhc3RTdXNwZW5kZWRUaW1lPXRoaXMuZmlyc3RTdXNwZW5kZWRUaW1lPXRoaXMuZmlyc3RQZW5kaW5nVGltZT0wfVxuZnVuY3Rpb24gUGooYSxiKXt2YXIgYz1hLmZpcnN0U3VzcGVuZGVkVGltZTthPWEubGFzdFN1c3BlbmRlZFRpbWU7cmV0dXJuIDAhPT1jJiZjPj1iJiZhPD1ifWZ1bmN0aW9uIE1qKGEsYil7dmFyIGM9YS5maXJzdFN1c3BlbmRlZFRpbWUsZD1hLmxhc3RTdXNwZW5kZWRUaW1lO2M8YiYmKGEuZmlyc3RTdXNwZW5kZWRUaW1lPWIpO2lmKGQ+Ynx8MD09PWMpYS5sYXN0U3VzcGVuZGVkVGltZT1iO2I8PWEubGFzdFBpbmdlZFRpbWUmJihhLmxhc3RQaW5nZWRUaW1lPTApO2I8PWEubGFzdEV4cGlyZWRUaW1lJiYoYS5sYXN0RXhwaXJlZFRpbWU9MCl9XG5mdW5jdGlvbiBOaihhLGIpe2I+YS5maXJzdFBlbmRpbmdUaW1lJiYoYS5maXJzdFBlbmRpbmdUaW1lPWIpO3ZhciBjPWEuZmlyc3RTdXNwZW5kZWRUaW1lOzAhPT1jJiYoYj49Yz9hLmZpcnN0U3VzcGVuZGVkVGltZT1hLmxhc3RTdXNwZW5kZWRUaW1lPWEubmV4dEtub3duUGVuZGluZ0xldmVsPTA6Yj49YS5sYXN0U3VzcGVuZGVkVGltZSYmKGEubGFzdFN1c3BlbmRlZFRpbWU9YisxKSxiPmEubmV4dEtub3duUGVuZGluZ0xldmVsJiYoYS5uZXh0S25vd25QZW5kaW5nTGV2ZWw9YikpfWZ1bmN0aW9uIFJqKGEsYil7dmFyIGM9YS5sYXN0RXhwaXJlZFRpbWU7aWYoMD09PWN8fGM+YilhLmxhc3RFeHBpcmVkVGltZT1ifVxuZnVuY3Rpb24gcmsoYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9UGcoKSxnPU1nLnN1c3BlbnNlO2Y9UWcoZixlLGcpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFsRmliZXI7Yjp7aWYoZWMoYykhPT1jfHwxIT09Yy50YWcpdGhyb3cgRXJyb3IodSgxNzApKTt2YXIgaD1jO2Rve3N3aXRjaChoLnRhZyl7Y2FzZSAzOmg9aC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBiO2Nhc2UgMTppZihMKGgudHlwZSkpe2g9aC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYn19aD1oLnJldHVybn13aGlsZShudWxsIT09aCk7dGhyb3cgRXJyb3IodSgxNzEpKTt9aWYoMT09PWMudGFnKXt2YXIgaz1jLnR5cGU7aWYoTChrKSl7Yz1JZihjLGssaCk7YnJlYWsgYX19Yz1ofWVsc2UgYz1DZjtudWxsPT09Yi5jb250ZXh0P2IuY29udGV4dD1jOmIucGVuZGluZ0NvbnRleHQ9YztiPUJnKGYsZyk7Yi5wYXlsb2FkPXtlbGVtZW50OmF9O2Q9dm9pZCAwPT09XG5kP251bGw6ZDtudWxsIT09ZCYmKGIuY2FsbGJhY2s9ZCk7RGcoZSxiKTtSZyhlLGYpO3JldHVybiBmfWZ1bmN0aW9uIHNrKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gdGsoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCYmYS5yZXRyeVRpbWU8YiYmKGEucmV0cnlUaW1lPWIpfWZ1bmN0aW9uIHVrKGEsYil7dGsoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJnRrKGEsYil9XG5mdW5jdGlvbiB2ayhhLGIsYyl7Yz1udWxsIT1jJiYhMD09PWMuaHlkcmF0ZTt2YXIgZD1uZXcgcWsoYSxiLGMpLGU9Z2koMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2QuY3VycmVudD1lO2Uuc3RhdGVOb2RlPWQ7YVt3ZV09ZC5jdXJyZW50O2MmJjAhPT1iJiZ3Yyg5PT09YS5ub2RlVHlwZT9hOmEub3duZXJEb2N1bWVudCk7dGhpcy5faW50ZXJuYWxSb290PWR9dmsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihhLGIpe3JrKGEsdGhpcy5faW50ZXJuYWxSb290LG51bGwsdm9pZCAwPT09Yj9udWxsOmIpfTt2ay5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pbnRlcm5hbFJvb3QsYz12b2lkIDA9PT1hP251bGw6YSxkPWIuY29udGFpbmVySW5mbztyayhudWxsLGIsbnVsbCxmdW5jdGlvbigpe2Rbd2VdPW51bGw7bnVsbCE9PWMmJmMoKX0pfTtcbmZ1bmN0aW9uIHdrKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1mdW5jdGlvbiB5ayhhLGIpe2J8fChiPWE/OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YS5maXJzdENoaWxkOm51bGwsYj0hKCFifHwxIT09Yi5ub2RlVHlwZXx8IWIuaGFzQXR0cmlidXRlKFwiZGF0YS1yZWFjdHJvb3RcIikpKTtpZighYilmb3IodmFyIGM7Yz1hLmxhc3RDaGlsZDspYS5yZW1vdmVDaGlsZChjKTtyZXR1cm4gbmV3IHZrKGEsMCxiP3toeWRyYXRlOiEwfTp2b2lkIDApfVxuZnVuY3Rpb24gemsoYSxiLGMsZCxlKXt2YXIgZj1jLl9yZWFjdFJvb3RDb250YWluZXI7aWYoZil7dmFyIGc9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaD1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1zayhnKTtoLmNhbGwoYSl9fXJrKGIsZyxhLGUpfWVsc2V7Zj1jLl9yZWFjdFJvb3RDb250YWluZXI9eWsoYyxkKTtnPWYuX2ludGVybmFsUm9vdDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZSl7dmFyIGs9ZTtlPWZ1bmN0aW9uKCl7dmFyIGE9c2soZyk7ay5jYWxsKGEpfX1jayhmdW5jdGlvbigpe3JrKGIsZyxhLGUpfSl9cmV0dXJuIHNrKGcpfWZ1bmN0aW9uIEFrKGEsYixjKXt2YXIgZD0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6SGEsa2V5Om51bGw9PWQ/bnVsbDpcIlwiK2QsY2hpbGRyZW46YSxjb250YWluZXJJbmZvOmIsaW1wbGVtZW50YXRpb246Y319XG5qYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1sZyhQZygpLDE1MCwxMDApO1JnKGEsYik7dWsoYSxiKX19O2tjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe1BnKCk7dmFyIGI9a2crKztSZyhhLGIpO3VrKGEsYil9fTtsYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1QZygpO2I9UWcoYixhLG51bGwpO1JnKGEsYik7dWsoYSxiKX19O1xuWmE9ZnVuY3Rpb24oYSxiLGMpe3N3aXRjaChiKXtjYXNlIFwiaW5wdXRcIjpFYihhLGMpO2I9Yy5uYW1lO2lmKFwicmFkaW9cIj09PWMudHlwZSYmbnVsbCE9Yil7Zm9yKGM9YTtjLnBhcmVudE5vZGU7KWM9Yy5wYXJlbnROb2RlO2M9Yy5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT1cIitKU09OLnN0cmluZ2lmeShcIlwiK2IpKyddW3R5cGU9XCJyYWRpb1wiXScpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07aWYoZCE9PWEmJmQuZm9ybT09PWEuZm9ybSl7dmFyIGU9eWUoZCk7aWYoIWUpdGhyb3cgRXJyb3IodSg5MCkpO3piKGQpO0ViKGQsZSl9fX1icmVhaztjYXNlIFwidGV4dGFyZWFcIjpNYihhLGMpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpiPWMudmFsdWUsbnVsbCE9YiYmSmIoYSwhIWMubXVsdGlwbGUsYiwhMSl9fTtlYj1iaztcbmZiPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPVQ7VHw9NDt0cnl7cmV0dXJuIGZnKDk4LGEuYmluZChudWxsLGIsYyxkKSl9ZmluYWxseXtUPWUsVD09PVMmJmpnKCl9fTtnYj1mdW5jdGlvbigpeyhUJigxfG9qfHBqKSk9PT1TJiYoYWsoKSxTaigpKX07aGI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1UO1R8PTI7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7VD1jLFQ9PT1TJiZqZygpfX07ZnVuY3Rpb24gQmsoYSxiKXt2YXIgYz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighd2soYikpdGhyb3cgRXJyb3IodSgyMDApKTtyZXR1cm4gQWsoYSxiLG51bGwsYyl9XG52YXIgQ2s9e2NyZWF0ZVBvcnRhbDpCayxmaW5kRE9NTm9kZTpmdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxGaWJlcjtpZih2b2lkIDA9PT1iKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5yZW5kZXIpdGhyb3cgRXJyb3IodSgxODgpKTt0aHJvdyBFcnJvcih1KDI2OCxPYmplY3Qua2V5cyhhKSkpO31hPWljKGIpO2E9bnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZTtyZXR1cm4gYX0saHlkcmF0ZTpmdW5jdGlvbihhLGIsYyl7aWYoIXdrKGIpKXRocm93IEVycm9yKHUoMjAwKSk7cmV0dXJuIHprKG51bGwsYSxiLCEwLGMpfSxyZW5kZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKCF3ayhiKSl0aHJvdyBFcnJvcih1KDIwMCkpO3JldHVybiB6ayhudWxsLGEsYiwhMSxjKX0sdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIXdrKGMpKXRocm93IEVycm9yKHUoMjAwKSk7XG5pZihudWxsPT1hfHx2b2lkIDA9PT1hLl9yZWFjdEludGVybmFsRmliZXIpdGhyb3cgRXJyb3IodSgzOCkpO3JldHVybiB6ayhhLGIsYywhMSxkKX0sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpmdW5jdGlvbihhKXtpZighd2soYSkpdGhyb3cgRXJyb3IodSg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KGNrKGZ1bmN0aW9uKCl7emsobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW3dlXT1udWxsfSl9KSwhMCk6ITF9LHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDpmdW5jdGlvbigpe3JldHVybiBCay5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX0sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6YmssZmx1c2hTeW5jOmZ1bmN0aW9uKGEsYil7aWYoKFQmKG9qfHBqKSkhPT1TKXRocm93IEVycm9yKHUoMTg3KSk7dmFyIGM9VDtUfD0xO3RyeXtyZXR1cm4gZmcoOTksYS5iaW5kKG51bGwsYikpfWZpbmFsbHl7VD1jLGpnKCl9fSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7RXZlbnRzOltDYyxcbnhlLHllLENhLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSxmYSxTYyxmdW5jdGlvbihhKXt5YShhLFJjKX0sY2IsZGIsUGQsQmEsU2ose2N1cnJlbnQ6ITF9XX19O1xuKGZ1bmN0aW9uKGEpe3ZhciBiPWEuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7cmV0dXJuIG9rKG4oe30sYSx7b3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpFYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGEpe2E9aWMoYSk7cmV0dXJuIG51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBiP2IoYSk6bnVsbH0sZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH0pKX0pKHtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpGYyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE2LjEyLjBcIixcbnJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn0pO3ZhciBEaz17ZGVmYXVsdDpDa30sRWs9RGsmJkNrfHxEazttb2R1bGUuZXhwb3J0cz1Fay5kZWZhdWx0fHxFaztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztBQVNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUVBO0FBQUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBRUE7QUFDQTtBQUFBO0FBREE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFGQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUhBO0FBR0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFIQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFBQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBSEE7QUFHQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFGQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFOQTtBQU1BO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBWkE7QUFDQTtBQVdBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFaQTtBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFiQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFGQTtBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUEE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBUEE7QUFDQTtBQU1BO0FBUkE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQURBO0FBREE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@hot-loader/react-dom/cjs/react-dom.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/@hot-loader/react-dom/index.js": -/*!******************************************************!*\ - !*** ../node_modules/@hot-loader/react-dom/index.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function') {\n return;\n }\n\n if (undefined !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (undefined === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = __webpack_require__(/*! ./cjs/react-dom.production.min.js */ \"../node_modules/@hot-loader/react-dom/cjs/react-dom.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"../node_modules/@hot-loader/react-dom/cjs/react-dom.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0Bob3QtbG9hZGVyL3JlYWN0LWRvbS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGhvdC1sb2FkZXIvcmVhY3QtZG9tL2luZGV4LmpzPzFmM2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@hot-loader/react-dom/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@hot-loader/react-dom/server.browser.js": -/*!***************************************************************!*\ - !*** ../node_modules/@hot-loader/react-dom/server.browser.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-server.browser.production.min.js */ \"../node_modules/@hot-loader/react-dom/cjs/react-dom-server.browser.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-server.browser.development.js */ \"../node_modules/@hot-loader/react-dom/cjs/react-dom-server.browser.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0Bob3QtbG9hZGVyL3JlYWN0LWRvbS9zZXJ2ZXIuYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGhvdC1sb2FkZXIvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzPzUyMzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS1zZXJ2ZXIuYnJvd3Nlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20tc2VydmVyLmJyb3dzZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@hot-loader/react-dom/server.browser.js\n"); - -/***/ }), - -/***/ "../node_modules/@mapbox/hast-util-table-cell-style/index.js": -/*!*******************************************************************!*\ - !*** ../node_modules/@mapbox/hast-util-table-cell-style/index.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hastCssPropertyMap = {\n align: 'text-align',\n valign: 'vertical-align',\n height: 'height',\n width: 'width'\n};\n\nmodule.exports = function tableCellStyle(node) {\n visit(node, 'element', visitor);\n return node;\n};\n\nfunction visitor(node) {\n if (node.tagName !== 'tr' && node.tagName !== 'td' && node.tagName !== 'th') {\n return;\n }\n\n var hastName;\n var cssName;\n\n for (hastName in hastCssPropertyMap) {\n if (!hasOwnProperty.call(hastCssPropertyMap, hastName) || node.properties[hastName] === undefined) {\n continue;\n }\n\n cssName = hastCssPropertyMap[hastName];\n appendStyle(node, cssName, node.properties[hastName]);\n delete node.properties[hastName];\n }\n}\n\nfunction appendStyle(node, property, value) {\n var prevStyle = (node.properties.style || '').trim();\n\n if (prevStyle && !/;\\s*/.test(prevStyle)) {\n prevStyle += ';';\n }\n\n if (prevStyle) {\n prevStyle += ' ';\n }\n\n var nextStyle = prevStyle + property + ': ' + value + ';';\n node.properties.style = nextStyle;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvaGFzdC11dGlsLXRhYmxlLWNlbGwtc3R5bGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvaGFzdC11dGlsLXRhYmxlLWNlbGwtc3R5bGUvaW5kZXguanM/NDg1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB2aXNpdCA9IHJlcXVpcmUoJ3VuaXN0LXV0aWwtdmlzaXQnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBoYXN0Q3NzUHJvcGVydHlNYXAgPSB7XG4gIGFsaWduOiAndGV4dC1hbGlnbicsXG4gIHZhbGlnbjogJ3ZlcnRpY2FsLWFsaWduJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgd2lkdGg6ICd3aWR0aCdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGFibGVDZWxsU3R5bGUobm9kZSkge1xuICB2aXNpdChub2RlLCAnZWxlbWVudCcsIHZpc2l0b3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmZ1bmN0aW9uIHZpc2l0b3Iobm9kZSkge1xuICBpZiAobm9kZS50YWdOYW1lICE9PSAndHInICYmIG5vZGUudGFnTmFtZSAhPT0gJ3RkJyAmJiBub2RlLnRhZ05hbWUgIT09ICd0aCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGFzdE5hbWU7XG4gIHZhciBjc3NOYW1lO1xuICBmb3IgKGhhc3ROYW1lIGluIGhhc3RDc3NQcm9wZXJ0eU1hcCkge1xuICAgIGlmIChcbiAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKGhhc3RDc3NQcm9wZXJ0eU1hcCwgaGFzdE5hbWUpIHx8XG4gICAgICBub2RlLnByb3BlcnRpZXNbaGFzdE5hbWVdID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjc3NOYW1lID0gaGFzdENzc1Byb3BlcnR5TWFwW2hhc3ROYW1lXTtcbiAgICBhcHBlbmRTdHlsZShub2RlLCBjc3NOYW1lLCBub2RlLnByb3BlcnRpZXNbaGFzdE5hbWVdKTtcbiAgICBkZWxldGUgbm9kZS5wcm9wZXJ0aWVzW2hhc3ROYW1lXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRTdHlsZShub2RlLCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgdmFyIHByZXZTdHlsZSA9IChub2RlLnByb3BlcnRpZXMuc3R5bGUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKHByZXZTdHlsZSAmJiAhLztcXHMqLy50ZXN0KHByZXZTdHlsZSkpIHtcbiAgICBwcmV2U3R5bGUgKz0gJzsnO1xuICB9XG4gIGlmIChwcmV2U3R5bGUpIHtcbiAgICBwcmV2U3R5bGUgKz0gJyAnO1xuICB9XG4gIHZhciBuZXh0U3R5bGUgPSBwcmV2U3R5bGUgKyBwcm9wZXJ0eSArICc6ICcgKyB2YWx1ZSArICc7JztcbiAgbm9kZS5wcm9wZXJ0aWVzLnN0eWxlID0gbmV4dFN0eWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@mapbox/hast-util-table-cell-style/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/auto-id/es/index.js": -/*!**************************************************!*\ - !*** ../node_modules/@reach/auto-id/es/index.js ***! - \**************************************************/ -/*! exports provided: useId */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useId\", function() { return useId; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n // Could use UUID but if we hit 9,007,199,254,740,991 unique components over\n// the lifetime of the app before it gets reloaded, I mean ... come on.\n// I don't even know what xillion that is.\n// /me googles\n// Oh duh, quadrillion. Nine quadrillion components. I think we're okay.\n\nvar id = 0;\n\nvar genId = function genId() {\n return ++id;\n};\n\nvar useId = function useId() {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n id = _useState[0],\n setId = _useState[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return setId(genId());\n }, []);\n return id;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9hdXRvLWlkL2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AcmVhY2gvYXV0by1pZC9lcy9pbmRleC5qcz8xMGE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuLy8gQ291bGQgdXNlIFVVSUQgYnV0IGlmIHdlIGhpdCA5LDAwNywxOTksMjU0LDc0MCw5OTEgdW5pcXVlIGNvbXBvbmVudHMgb3ZlclxuLy8gdGhlIGxpZmV0aW1lIG9mIHRoZSBhcHAgYmVmb3JlIGl0IGdldHMgcmVsb2FkZWQsIEkgbWVhbiAuLi4gY29tZSBvbi5cbi8vIEkgZG9uJ3QgZXZlbiBrbm93IHdoYXQgeGlsbGlvbiB0aGF0IGlzLlxuLy8gL21lIGdvb2dsZXNcbi8vIE9oIGR1aCwgcXVhZHJpbGxpb24uIE5pbmUgcXVhZHJpbGxpb24gY29tcG9uZW50cy4gSSB0aGluayB3ZSdyZSBva2F5LlxudmFyIGlkID0gMDtcbnZhciBnZW5JZCA9IGZ1bmN0aW9uIGdlbklkKCkge1xuICByZXR1cm4gKytpZDtcbn07XG5cbmV4cG9ydCB2YXIgdXNlSWQgPSBmdW5jdGlvbiB1c2VJZCgpIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgaWQgPSBfdXNlU3RhdGVbMF0sXG4gICAgICBzZXRJZCA9IF91c2VTdGF0ZVsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRJZChnZW5JZCgpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gaWQ7XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@reach/auto-id/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/component-component/es/index.js": -/*!**************************************************************!*\ - !*** ../node_modules/@reach/component-component/es/index.js ***! - \**************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\n\n\n\nvar cleanProps = function cleanProps(props) {\n var initialState = props.initialState,\n getInitialState = props.getInitialState,\n refs = props.refs,\n getRefs = props.getRefs,\n didMount = props.didMount,\n didUpdate = props.didUpdate,\n willUnmount = props.willUnmount,\n getSnapshotBeforeUpdate = props.getSnapshotBeforeUpdate,\n shouldUpdate = props.shouldUpdate,\n render = props.render,\n rest = _objectWithoutProperties(props, [\"initialState\", \"getInitialState\", \"refs\", \"getRefs\", \"didMount\", \"didUpdate\", \"willUnmount\", \"getSnapshotBeforeUpdate\", \"shouldUpdate\", \"render\"]);\n\n return rest;\n};\n\nvar Component = function (_React$Component) {\n _inherits(Component, _React$Component);\n\n function Component() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Component);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Component.prototype.getArgs = function getArgs() {\n var state = this.state,\n props = this.props,\n setState = this._setState,\n forceUpdate = this._forceUpdate,\n refs = this._refs;\n return {\n state: state,\n props: cleanProps(props),\n refs: refs,\n setState: setState,\n forceUpdate: forceUpdate\n };\n };\n\n Component.prototype.componentDidMount = function componentDidMount() {\n if (this.props.didMount) this.props.didMount(this.getArgs());\n };\n\n Component.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n if (this.props.shouldUpdate) return this.props.shouldUpdate({\n props: this.props,\n state: this.state,\n nextProps: cleanProps(nextProps),\n nextState: nextState\n });else return true;\n };\n\n Component.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.props.willUnmount) this.props.willUnmount({\n state: this.state,\n props: cleanProps(this.props),\n refs: this._refs\n });\n };\n\n Component.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.didUpdate) this.props.didUpdate(Object.assign(this.getArgs(), {\n prevProps: cleanProps(prevProps),\n prevState: prevState\n }), snapshot);\n };\n\n Component.prototype.getSnapshotBeforeUpdate = function getSnapshotBeforeUpdate(prevProps, prevState) {\n if (this.props.getSnapshotBeforeUpdate) {\n return this.props.getSnapshotBeforeUpdate(Object.assign(this.getArgs(), {\n prevProps: cleanProps(prevProps),\n prevState: prevState\n }));\n } else {\n return null;\n }\n };\n\n Component.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n render = _props.render;\n return render ? render(this.getArgs()) : typeof children === \"function\" ? children(this.getArgs()) : children || null;\n };\n\n return Component;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\nComponent.defaultProps = {\n getInitialState: function getInitialState() {},\n getRefs: function getRefs() {\n return {};\n }\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.state = this.props.initialState || this.props.getInitialState(this.props);\n this._refs = this.props.refs || this.props.getRefs(this.getArgs());\n\n this._setState = function () {\n return _this2.setState.apply(_this2, arguments);\n };\n\n this._forceUpdate = function () {\n return _this2.forceUpdate.apply(_this2, arguments);\n };\n};\n\nundefined !== \"production\" ? Component.propTypes = {\n initialState: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"object\"],\n getInitialState: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n refs: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"object\"],\n getRefs: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n didMount: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n didUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n willUnmount: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n getSnapshotBeforeUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n shouldUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n render: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n children: Object(prop_types__WEBPACK_IMPORTED_MODULE_1__[\"oneOfType\"])([prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"], prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"]])\n} : void 0;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9jb21wb25lbnQtY29tcG9uZW50L2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AcmVhY2gvY29tcG9uZW50LWNvbXBvbmVudC9lcy9pbmRleC5qcz9hMTk3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBvYmplY3QsIGZ1bmMsIG9uZU9mVHlwZSwgbm9kZSB9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbnZhciBjbGVhblByb3BzID0gZnVuY3Rpb24gY2xlYW5Qcm9wcyhwcm9wcykge1xuICB2YXIgaW5pdGlhbFN0YXRlID0gcHJvcHMuaW5pdGlhbFN0YXRlLFxuICAgICAgZ2V0SW5pdGlhbFN0YXRlID0gcHJvcHMuZ2V0SW5pdGlhbFN0YXRlLFxuICAgICAgcmVmcyA9IHByb3BzLnJlZnMsXG4gICAgICBnZXRSZWZzID0gcHJvcHMuZ2V0UmVmcyxcbiAgICAgIGRpZE1vdW50ID0gcHJvcHMuZGlkTW91bnQsXG4gICAgICBkaWRVcGRhdGUgPSBwcm9wcy5kaWRVcGRhdGUsXG4gICAgICB3aWxsVW5tb3VudCA9IHByb3BzLndpbGxVbm1vdW50LFxuICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPSBwcm9wcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSxcbiAgICAgIHNob3VsZFVwZGF0ZSA9IHByb3BzLnNob3VsZFVwZGF0ZSxcbiAgICAgIHJlbmRlciA9IHByb3BzLnJlbmRlcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImluaXRpYWxTdGF0ZVwiLCBcImdldEluaXRpYWxTdGF0ZVwiLCBcInJlZnNcIiwgXCJnZXRSZWZzXCIsIFwiZGlkTW91bnRcIiwgXCJkaWRVcGRhdGVcIiwgXCJ3aWxsVW5tb3VudFwiLCBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlXCIsIFwic2hvdWxkVXBkYXRlXCIsIFwicmVuZGVyXCJdKTtcblxuICByZXR1cm4gcmVzdDtcbn07XG5cbnZhciBDb21wb25lbnQgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ29tcG9uZW50LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDb21wb25lbnQoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF9pbml0aWFsaXNlUHJvcHMuY2FsbChfdGhpcyksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5nZXRBcmdzID0gZnVuY3Rpb24gZ2V0QXJncygpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHNldFN0YXRlID0gdGhpcy5fc2V0U3RhdGUsXG4gICAgICAgIGZvcmNlVXBkYXRlID0gdGhpcy5fZm9yY2VVcGRhdGUsXG4gICAgICAgIHJlZnMgPSB0aGlzLl9yZWZzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHByb3BzOiBjbGVhblByb3BzKHByb3BzKSxcbiAgICAgIHJlZnM6IHJlZnMsXG4gICAgICBzZXRTdGF0ZTogc2V0U3RhdGUsXG4gICAgICBmb3JjZVVwZGF0ZTogZm9yY2VVcGRhdGVcbiAgICB9O1xuICB9O1xuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kaWRNb3VudCkgdGhpcy5wcm9wcy5kaWRNb3VudCh0aGlzLmdldEFyZ3MoKSk7XG4gIH07XG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG91bGRVcGRhdGUpIHJldHVybiB0aGlzLnByb3BzLnNob3VsZFVwZGF0ZSh7XG4gICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgbmV4dFByb3BzOiBjbGVhblByb3BzKG5leHRQcm9wcyksXG4gICAgICBuZXh0U3RhdGU6IG5leHRTdGF0ZVxuICAgIH0pO2Vsc2UgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnByb3BzLndpbGxVbm1vdW50KSB0aGlzLnByb3BzLndpbGxVbm1vdW50KHtcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgcHJvcHM6IGNsZWFuUHJvcHModGhpcy5wcm9wcyksXG4gICAgICByZWZzOiB0aGlzLl9yZWZzXG4gICAgfSk7XG4gIH07XG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZGlkVXBkYXRlKSB0aGlzLnByb3BzLmRpZFVwZGF0ZShPYmplY3QuYXNzaWduKHRoaXMuZ2V0QXJncygpLCB7XG4gICAgICBwcmV2UHJvcHM6IGNsZWFuUHJvcHMocHJldlByb3BzKSxcbiAgICAgIHByZXZTdGF0ZTogcHJldlN0YXRlXG4gICAgfSksIHNuYXBzaG90KTtcbiAgfTtcblxuICBDb21wb25lbnQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID0gZnVuY3Rpb24gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoT2JqZWN0LmFzc2lnbih0aGlzLmdldEFyZ3MoKSwge1xuICAgICAgICBwcmV2UHJvcHM6IGNsZWFuUHJvcHMocHJldlByb3BzKSxcbiAgICAgICAgcHJldlN0YXRlOiBwcmV2U3RhdGVcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgcmVuZGVyID0gX3Byb3BzLnJlbmRlcjtcblxuICAgIHJldHVybiByZW5kZXIgPyByZW5kZXIodGhpcy5nZXRBcmdzKCkpIDogdHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIgPyBjaGlsZHJlbih0aGlzLmdldEFyZ3MoKSkgOiBjaGlsZHJlbiB8fCBudWxsO1xuICB9O1xuXG4gIHJldHVybiBDb21wb25lbnQ7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5kZWZhdWx0UHJvcHMgPSB7XG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKCkge30sXG4gIGdldFJlZnM6IGZ1bmN0aW9uIGdldFJlZnMoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG52YXIgX2luaXRpYWxpc2VQcm9wcyA9IGZ1bmN0aW9uIF9pbml0aWFsaXNlUHJvcHMoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHRoaXMuc3RhdGUgPSB0aGlzLnByb3BzLmluaXRpYWxTdGF0ZSB8fCB0aGlzLnByb3BzLmdldEluaXRpYWxTdGF0ZSh0aGlzLnByb3BzKTtcbiAgdGhpcy5fcmVmcyA9IHRoaXMucHJvcHMucmVmcyB8fCB0aGlzLnByb3BzLmdldFJlZnModGhpcy5nZXRBcmdzKCkpO1xuXG4gIHRoaXMuX3NldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUuYXBwbHkoX3RoaXMyLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHRoaXMuX2ZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczIuZm9yY2VVcGRhdGUuYXBwbHkoX3RoaXMyLCBhcmd1bWVudHMpO1xuICB9O1xufTtcblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgaW5pdGlhbFN0YXRlOiBvYmplY3QsXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuYyxcbiAgcmVmczogb2JqZWN0LFxuICBnZXRSZWZzOiBmdW5jLFxuICBkaWRNb3VudDogZnVuYyxcbiAgZGlkVXBkYXRlOiBmdW5jLFxuICB3aWxsVW5tb3VudDogZnVuYyxcbiAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU6IGZ1bmMsXG4gIHNob3VsZFVwZGF0ZTogZnVuYyxcbiAgcmVuZGVyOiBmdW5jLFxuICBjaGlsZHJlbjogb25lT2ZUeXBlKFtmdW5jLCBub2RlXSlcbn0gOiB2b2lkIDA7XG5cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFXQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVBBO0FBQ0E7QUFlQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBTEE7QUFDQTtBQU9BO0FBOUVBO0FBQ0E7QUFnRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQVZBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/component-component/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/menu-button/dist/menu-button.esm.js": -/*!******************************************************************!*\ - !*** ../node_modules/@reach/menu-button/dist/menu-button.esm.js ***! - \******************************************************************/ -/*! exports provided: Menu, MenuButton, MenuItem, MenuItems, MenuLink, MenuList, MenuPopover */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Menu\", function() { return Menu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuButton\", function() { return MenuButton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuItem\", function() { return MenuItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuItems\", function() { return MenuItems; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuLink\", function() { return MenuLink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuList\", function() { return MenuList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MenuPopover\", function() { return MenuPopover; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _reach_auto_id__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @reach/auto-id */ \"../node_modules/@reach/menu-button/node_modules/@reach/auto-id/dist/auto-id.esm.js\");\n/* harmony import */ var _reach_popover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reach/popover */ \"../node_modules/@reach/popover/dist/popover.esm.js\");\n/* harmony import */ var _reach_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @reach/utils */ \"../node_modules/@reach/utils/dist/utils.esm.js\");\n\n\n\n\n\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n} // Actions\n\n\nvar CLEAR_SELECTION_INDEX = \"CLEAR_SELECTION_INDEX\";\nvar CLICK_MENU_ITEM = \"CLICK_MENU_ITEM\";\nvar CLOSE_MENU = \"CLOSE_MENU\";\nvar OPEN_MENU_AT_FIRST_ITEM = \"OPEN_MENU_AT_FIRST_ITEM\";\nvar SEARCH_FOR_ITEM = \"SEARCH_FOR_ITEM\";\nvar SELECT_ITEM_AT_INDEX = \"SELECT_ITEM_AT_INDEX\";\nvar SET_BUTTON_ID = \"SET_BUTTON_ID\";\nvar MenuDescendantContext = /*#__PURE__*/Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"createDescendantContext\"])(\"MenuDescendantContext\");\nvar MenuContext = /*#__PURE__*/Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"createNamedContext\"])(\"MenuContext\", {});\n\nvar useMenuContext = function useMenuContext() {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(MenuContext);\n};\n\nvar initialState = {\n /*\r\n * The button ID is needed for aria controls and can be set directly and\r\n * updated for top-level use via context. Otherwise a default is set by useId.\r\n * TODO: Consider deprecating direct ID in 1.0 in favor of id at the top level\r\n * for passing deterministic IDs to descendent components.\r\n */\n buttonId: null,\n\n /*\r\n * Whether or not the menu is expanded\r\n */\n isOpen: false,\n\n /*\r\n * When a user begins typing a character string, the selection will change if\r\n * a matching item is found\r\n */\n typeaheadQuery: \"\",\n\n /*\r\n * The index of the current selected item. When the selection is cleared a\r\n * value of -1 is used.\r\n */\n selectionIndex: -1\n}; ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * Menu\r\n *\r\n * The wrapper component for the other components. No DOM element is rendered.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menu\r\n */\n\nvar Menu = function Menu(_ref) {\n var id = _ref.id,\n children = _ref.children;\n var buttonRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var menuRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var popoverRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n\n var _useDescendants = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useDescendants\"])(),\n descendants = _useDescendants[0],\n setDescendants = _useDescendants[1];\n\n var _useReducer = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useReducer\"])(reducer, initialState),\n state = _useReducer[0],\n dispatch = _useReducer[1];\n\n var menuId = Object(_reach_auto_id__WEBPACK_IMPORTED_MODULE_2__[\"useId\"])(id);\n var context = {\n buttonRef: buttonRef,\n dispatch: dispatch,\n menuId: menuId,\n menuRef: menuRef,\n popoverRef: popoverRef,\n state: state\n };\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"checkStyles\"])(\"menu-button\");\n }, []);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"DescendantProvider\"], {\n context: MenuDescendantContext,\n items: descendants,\n set: setDescendants\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MenuContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children({\n isOpen: state.isOpen\n }) : children));\n};\n\nMenu.displayName = \"Menu\";\n\nif (undefined !== \"production\") {\n Menu.propTypes = {\n children: /*#__PURE__*/prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node])\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuButton\r\n *\r\n * Wraps a DOM `button` that toggles the opening and closing of the dropdown\r\n * menu. Must be rendered inside of a `<Menu>`.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menubutton\r\n */\n\n\nvar MenuButton = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function MenuButton(_ref2, forwardedRef) {\n var onKeyDown = _ref2.onKeyDown,\n onMouseDown = _ref2.onMouseDown,\n id = _ref2.id,\n props = _objectWithoutPropertiesLoose(_ref2, [\"onKeyDown\", \"onMouseDown\", \"id\"]);\n\n var _useMenuContext = useMenuContext(),\n buttonRef = _useMenuContext.buttonRef,\n menuId = _useMenuContext.menuId,\n _useMenuContext$state = _useMenuContext.state,\n buttonId = _useMenuContext$state.buttonId,\n isOpen = _useMenuContext$state.isOpen,\n dispatch = _useMenuContext.dispatch;\n\n var ref = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useForkedRef\"])(buttonRef, forwardedRef);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var newButtonId = id != null ? id : menuId ? Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"makeId\"])(\"menu-button\", menuId) : \"menu-button\";\n\n if (buttonId !== newButtonId) {\n dispatch({\n type: SET_BUTTON_ID,\n payload: newButtonId\n });\n }\n }, [buttonId, dispatch, id, menuId]);\n\n function handleKeyDown(event) {\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n event.preventDefault(); // prevent scroll\n\n dispatch({\n type: OPEN_MENU_AT_FIRST_ITEM\n });\n break;\n\n case \"Enter\":\n case \" \":\n dispatch({\n type: OPEN_MENU_AT_FIRST_ITEM\n });\n break;\n }\n }\n\n function handleMouseDown() {\n if (isOpen) {\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n } else {\n dispatch({\n type: OPEN_MENU_AT_FIRST_ITEM\n });\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", Object.assign({}, props, {\n ref: ref,\n \"data-reach-menu-button\": \"\",\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"menu\",\n id: buttonId || undefined,\n onKeyDown: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onKeyDown, handleKeyDown),\n onMouseDown: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseDown, handleMouseDown),\n type: \"button\"\n }));\n});\nMenuButton.displayName = \"MenuButton\";\n\nif (undefined !== \"production\") {\n MenuButton.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItemImpl\r\n *\r\n * MenuItem and MenuLink share most of the same functionality captured here.\r\n */\n\n\nvar MenuItemImpl = /*#__PURE__*/Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"forwardRefWithAs\"])(function MenuItemImpl(_ref3, forwardedRef) {\n var Comp = _ref3.as,\n indexProp = _ref3.index,\n _ref3$isLink = _ref3.isLink,\n isLink = _ref3$isLink === void 0 ? false : _ref3$isLink,\n onClick = _ref3.onClick,\n onDragStart = _ref3.onDragStart,\n onKeyDown = _ref3.onKeyDown,\n onMouseDown = _ref3.onMouseDown,\n onMouseEnter = _ref3.onMouseEnter,\n onMouseLeave = _ref3.onMouseLeave,\n onMouseMove = _ref3.onMouseMove,\n onMouseUp = _ref3.onMouseUp,\n onSelect = _ref3.onSelect,\n valueTextProp = _ref3.valueText,\n props = _objectWithoutPropertiesLoose(_ref3, [\"as\", \"index\", \"isLink\", \"onClick\", \"onDragStart\", \"onKeyDown\", \"onMouseDown\", \"onMouseEnter\", \"onMouseLeave\", \"onMouseMove\", \"onMouseUp\", \"onSelect\", \"valueText\"]);\n\n var _useMenuContext2 = useMenuContext(),\n buttonRef = _useMenuContext2.buttonRef,\n dispatch = _useMenuContext2.dispatch,\n menuRef = _useMenuContext2.menuRef,\n _useMenuContext2$stat = _useMenuContext2.state,\n isOpen = _useMenuContext2$stat.isOpen,\n selectionIndex = _useMenuContext2$stat.selectionIndex;\n\n var ownRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n /*\r\n * After the ref is mounted to the DOM node, we check to see if we have an\r\n * explicit valueText prop before looking for the node's textContent for\r\n * typeahead functionality.\r\n */\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(valueTextProp || \"\"),\n valueText = _useState[0],\n setValueText = _useState[1];\n\n var setValueTextFromDom = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (node) {\n if (node) {\n ownRef.current = node;\n\n if (!valueTextProp || node.textContent && valueText !== node.textContent) {\n setValueText(node.textContent);\n }\n }\n }, [valueText, valueTextProp]);\n var ref = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useForkedRef\"])(forwardedRef, setValueTextFromDom);\n var mouseEventStarted = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(false);\n var index = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useDescendant\"])({\n context: MenuDescendantContext,\n element: ownRef.current,\n key: valueText\n }, indexProp);\n var isSelected = index === selectionIndex;\n\n function select() {\n dispatch({\n type: CLICK_MENU_ITEM,\n payload: {\n buttonRef: buttonRef,\n callback: onSelect\n }\n });\n }\n\n function handleClick(event) {\n if (isLink && !isRightClick(event.nativeEvent)) {\n select();\n }\n }\n\n function handleDragStart(event) {\n /*\r\n * Because we don't preventDefault on mousedown for links (we need the\r\n * native click event), clicking and holding on a link triggers a dragstart\r\n * which we don't want.\r\n */\n if (isLink) {\n event.preventDefault();\n }\n }\n\n function handleKeyDown(event) {\n var key = event.key;\n\n if (key === \"Enter\" || key === \" \") {\n /*\r\n * For links, the Enter key will trigger a click by default, but for\r\n * consistent behavior across menu items we'll trigger a click when the\r\n * spacebar is pressed.\r\n */\n if (isLink) {\n if (key === \" \" && ownRef.current) {\n ownRef.current.click();\n }\n } else {\n event.preventDefault();\n select();\n }\n }\n }\n\n function handleMouseDown(event) {\n if (isRightClick(event.nativeEvent)) return;\n\n if (isLink) {\n /*\r\n * Signal that the mouse is down so we can react call the right function\r\n * if the user is clicking on a link.\r\n */\n mouseEventStarted.current = true;\n } else {\n event.preventDefault();\n }\n }\n\n function handleMouseEnter(event) {\n if (!isSelected && index != null) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: index\n }\n });\n }\n }\n\n function handleMouseLeave(event) {\n // Clear out selection when mouse over a non-menu item child.\n dispatch({\n type: CLEAR_SELECTION_INDEX\n });\n }\n\n function handleMouseMove(event) {\n if (!isSelected && index != null) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: index\n }\n });\n }\n }\n\n function handleMouseUp(event) {\n if (isRightClick(event.nativeEvent)) return;\n\n if (isLink) {\n /*\r\n * If a mousedown event was initiated on a menu link followed by a\r\n * mouseup event on the same link, we do nothing; a click event will\r\n * come next and handle selection. Otherwise, we trigger a click event.\r\n */\n if (mouseEventStarted.current) {\n mouseEventStarted.current = false;\n } else if (ownRef.current) {\n ownRef.current.click();\n }\n } else {\n select();\n }\n }\n /*\r\n * Any time a mouseup event occurs anywhere in the document, we reset the\r\n * mouseEventStarted ref so we can check it again when needed.\r\n */\n\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var listener = function listener() {\n return mouseEventStarted.current = false;\n };\n\n document.addEventListener(\"mouseup\", listener);\n return function () {\n return document.removeEventListener(\"mouseup\", listener);\n };\n }, []);\n /**\r\n * When a new selection is made the item should receive focus. When no item is\r\n * selected, focus is placed on the menu itself so that keyboard navigation is\r\n * still possible.\r\n */\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isOpen) {\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = true;\n window.requestAnimationFrame(function () {\n if (selectionIndex !== -1) {\n /*\r\n * We haven't measured the popover yet, so give it a frame otherwise\r\n * we'll scroll to the bottom of the page >.<\r\n */\n if (ownRef.current && index === selectionIndex) {\n ownRef.current.focus();\n }\n } else {\n /*\r\n * Clear highlight when mousing over non-menu items, but focus the\r\n * menu so the the keyboard will work after a mouseover.\r\n */\n menuRef.current && menuRef.current.focus();\n }\n });\n } else {\n /*\r\n * We want to ignore the immediate focus of a tooltip so it doesn't pop\r\n * up again when the menu closes, only pops up when focus returns again\r\n * to the tooltip (like native OS tooltips).\r\n */\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = false;\n }\n }, [index, isOpen, menuRef, selectionIndex]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, Object.assign({}, props, {\n ref: ref,\n \"data-reach-menu-item\": \"\",\n \"data-selected\": isSelected ? \"\" : undefined,\n \"data-valuetext\": valueText,\n onClick: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onClick, handleClick),\n onDragStart: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onDragStart, handleDragStart),\n onKeyDown: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onKeyDown, handleKeyDown),\n onMouseDown: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseDown, handleMouseDown),\n onMouseEnter: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseEnter, handleMouseEnter),\n onMouseLeave: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseLeave, handleMouseLeave),\n onMouseMove: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseMove, handleMouseMove),\n onMouseUp: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onMouseUp, handleMouseUp),\n role: \"menuitem\",\n tabIndex: -1\n }));\n}); ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItem\r\n *\r\n * Handles menu selection. Must be a direct child of a `<MenuList>`.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menuitem\r\n */\n\nvar MenuItem = /*#__PURE__*/Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"forwardRefWithAs\"])(function MenuItem(_ref4, forwardedRef) {\n var _ref4$as = _ref4.as,\n as = _ref4$as === void 0 ? \"div\" : _ref4$as,\n props = _objectWithoutPropertiesLoose(_ref4, [\"as\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MenuItemImpl, Object.assign({}, props, {\n ref: forwardedRef,\n as: as\n }));\n});\nMenuItem.displayName = \"MenuItem\";\n\nif (undefined !== \"production\") {\n MenuItem.propTypes = {\n as: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItems\r\n *\r\n * A low-level wrapper for menu items. Compose it with `MenuPopover` for more\r\n * control over the nested components and their rendered DOM nodes, or if you\r\n * need to nest arbitrary components between the outer wrapper and your list.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menuitems\r\n */\n\n\nvar MenuItems = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function MenuItems(_ref5, forwardedRef) {\n var children = _ref5.children,\n onKeyDown = _ref5.onKeyDown,\n props = _objectWithoutPropertiesLoose(_ref5, [\"children\", \"onKeyDown\", \"onBlur\"]);\n\n var _useMenuContext3 = useMenuContext(),\n dispatch = _useMenuContext3.dispatch,\n buttonRef = _useMenuContext3.buttonRef,\n menuRef = _useMenuContext3.menuRef,\n _useMenuContext3$stat = _useMenuContext3.state,\n isOpen = _useMenuContext3$stat.isOpen,\n buttonId = _useMenuContext3$stat.buttonId,\n selectionIndex = _useMenuContext3$stat.selectionIndex,\n typeaheadQuery = _useMenuContext3$stat.typeaheadQuery;\n\n var _useContext = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(MenuDescendantContext),\n menuItems = _useContext.descendants;\n\n var ref = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useForkedRef\"])(menuRef, forwardedRef);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // Respond to user char key input with typeahead\n var match = findItemFromTypeahead(menuItems, typeaheadQuery);\n\n if (typeaheadQuery && match != null) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: match\n }\n });\n }\n\n var timeout = window.setTimeout(function () {\n return typeaheadQuery && dispatch({\n type: SEARCH_FOR_ITEM,\n payload: \"\"\n });\n }, 1000);\n return function () {\n return window.clearTimeout(timeout);\n };\n }, [dispatch, menuItems, typeaheadQuery]);\n var prevMenuItemsLength = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"usePrevious\"])(menuItems.length);\n var prevSelected = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"usePrevious\"])(menuItems[selectionIndex]);\n var prevSelectionIndex = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"usePrevious\"])(selectionIndex);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (selectionIndex > menuItems.length - 1) {\n /*\r\n * If for some reason our selection index is larger than our possible\r\n * index range (let's say the last item is selected and the list\r\n * dynamically updates), we need to select the last item in the list.\r\n */\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: menuItems.length - 1\n }\n });\n } else if (\n /*\r\n * Checks if\r\n * - menu length has changed\r\n * - selection index has not changed BUT selected item has changed\r\n *\r\n * This prevents any dynamic adding/removing of menu items from actually\r\n * changing a user's expected selection.\r\n */\n prevMenuItemsLength !== menuItems.length && selectionIndex > -1 && prevSelected && prevSelectionIndex === selectionIndex && menuItems[selectionIndex] !== prevSelected) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: menuItems.findIndex(function (i) {\n return i.key === prevSelected.key;\n })\n }\n });\n }\n }, [dispatch, menuItems, prevMenuItemsLength, prevSelected, prevSelectionIndex, selectionIndex]);\n\n function handleKeyDown(event) {\n var key = event.key;\n\n if (!isOpen) {\n return;\n }\n\n switch (key) {\n case \"Escape\":\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n break;\n\n case \"Home\":\n // prevent window scroll\n event.preventDefault();\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: 0\n }\n });\n break;\n\n case \"End\":\n // prevent window scroll\n event.preventDefault();\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: menuItems.length - 1\n }\n });\n break;\n\n case \"ArrowDown\":\n // prevent window scroll\n event.preventDefault();\n var nextIndex = Math.min(selectionIndex + 1, menuItems.length - 1);\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: nextIndex\n }\n });\n break;\n\n case \"ArrowUp\":\n // prevent window scroll\n event.preventDefault();\n var prevIndex = Math.max(selectionIndex - 1, 0);\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: prevIndex\n }\n });\n break;\n\n case \"Tab\":\n // prevent leaving\n event.preventDefault();\n break;\n\n default:\n /*\r\n * Check if a user is typing some char keys and respond by setting the\r\n * query state.\r\n */\n if (typeof key === \"string\" && key.length === 1) {\n var query = typeaheadQuery + key.toLowerCase();\n dispatch({\n type: SEARCH_FOR_ITEM,\n payload: query\n });\n }\n\n break;\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", Object.assign({}, props, {\n ref: ref,\n \"data-reach-menu-items\": \"\",\n \"aria-labelledby\": buttonId || undefined,\n onKeyDown: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onKeyDown, handleKeyDown),\n role: \"menu\",\n tabIndex: -1\n }), children);\n});\nMenuItems.displayName = \"MenuItems\";\n\nif (undefined !== \"production\") {\n MenuItems.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuLink\r\n *\r\n * Handles linking to a different page in the menu. By default it renders `<a>`,\r\n * but also accepts any other kind of Link as long as the `Link` uses the\r\n * `React.forwardRef` API.\r\n *\r\n * Must be a direct child of a `<MenuList>`.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menulink\r\n */\n\n\nvar MenuLink = /*#__PURE__*/Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"forwardRefWithAs\"])(function MenuLink(_ref6, forwardedRef) {\n var _ref6$as = _ref6.as,\n as = _ref6$as === void 0 ? \"a\" : _ref6$as,\n component = _ref6.component,\n onSelect = _ref6.onSelect,\n props = _objectWithoutPropertiesLoose(_ref6, [\"as\", \"component\", \"onSelect\"]);\n\n if (component) {\n console.warn(\"[@reach/menu-button]: Please use the `as` prop instead of `component`.\");\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n role: \"none\",\n tabIndex: -1\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MenuItemImpl, Object.assign({}, props, {\n ref: forwardedRef,\n \"data-reach-menu-link\": \"\",\n as: as,\n isLink: true,\n onSelect: onSelect || _reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"noop\"]\n })));\n});\nMenuLink.displayName = \"MenuLink\";\n\nif (undefined !== \"production\") {\n MenuLink.propTypes = {\n as: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n component: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuList\r\n *\r\n * Wraps a DOM element that renders the menu items. Must be rendered inside of\r\n * a `<Menu>`.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menulist\r\n */\n\n\nvar MenuList = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function MenuList(props, forwardedRef) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MenuPopover, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MenuItems, Object.assign({}, props, {\n ref: forwardedRef,\n \"data-reach-menu-list\": \"\"\n })));\n});\nMenuList.displayName = \"MenuList\";\n\nif (undefined !== \"production\") {\n MenuList.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuPopover\r\n *\r\n * A low-level wrapper for the popover that appears when a menu button is open.\r\n * You can compose it with `MenuItems` for more control over the nested\r\n * components and their rendered DOM nodes, or if you need to nest arbitrary\r\n * components between the outer wrapper and your list.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/menu-button#menupopover\r\n */\n\n\nvar MenuPopover = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function MenuPopover(_ref7, forwardedRef) {\n var children = _ref7.children,\n onBlur = _ref7.onBlur,\n props = _objectWithoutPropertiesLoose(_ref7, [\"children\", \"onBlur\"]);\n\n var _useMenuContext4 = useMenuContext(),\n buttonRef = _useMenuContext4.buttonRef,\n dispatch = _useMenuContext4.dispatch,\n menuRef = _useMenuContext4.menuRef,\n popoverRef = _useMenuContext4.popoverRef,\n isOpen = _useMenuContext4.state.isOpen;\n\n var ref = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"useForkedRef\"])(popoverRef, forwardedRef);\n\n function handleBlur(event) {\n var relatedTarget = event.relatedTarget;\n requestAnimationFrame(function () {\n // We on want to close only if focus rests outside the menu\n if (document.activeElement !== menuRef.current && document.activeElement !== buttonRef.current && popoverRef.current) {\n if (!popoverRef.current.contains(relatedTarget || document.activeElement)) {\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n }\n }\n });\n }\n\n return isOpen ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_popover__WEBPACK_IMPORTED_MODULE_3__[\"default\"], Object.assign({}, props, {\n ref: ref,\n \"data-reach-menu\": \"\" // deprecate for naming consistency?\n ,\n \"data-reach-menu-popover\": \"\",\n onBlur: Object(_reach_utils__WEBPACK_IMPORTED_MODULE_4__[\"wrapEvent\"])(onBlur, handleBlur),\n // TODO: Fix in @reach/popover\n // @ts-ignore\n targetRef: buttonRef\n }), children) : null;\n});\nMenuPopover.displayName = \"MenuPopover\";\n\nif (undefined !== \"production\") {\n MenuPopover.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * When a user's typed input matches the string displayed in a menu item, it is\r\n * expected that the matching menu item is selected. This is our matching\r\n * function.\r\n */\n\n\nfunction findItemFromTypeahead(items, string) {\n if (string === void 0) {\n string = \"\";\n }\n\n if (!string) {\n return null;\n }\n\n var found = items.find(function (_ref8) {\n var _element$dataset, _element$dataset$valu;\n\n var element = _ref8.element;\n return element === null || element === void 0 ? void 0 : (_element$dataset = element.dataset) === null || _element$dataset === void 0 ? void 0 : (_element$dataset$valu = _element$dataset.valuetext) === null || _element$dataset$valu === void 0 ? void 0 : _element$dataset$valu.toLowerCase().startsWith(string);\n });\n return found ? items.indexOf(found) : null;\n}\n\nfunction isRightClick(nativeEvent) {\n if (\"which\" in nativeEvent) {\n return nativeEvent.which === 3;\n } else if (\"button\" in nativeEvent) {\n return nativeEvent.button === 2;\n }\n\n return false;\n}\n\nfunction reducer(state, action) {\n var _action$payload$butto;\n\n if (action === void 0) {\n action = {};\n }\n\n switch (action.type) {\n case CLICK_MENU_ITEM:\n /*\r\n * Focus the button first by default when an item is selected. We fire the\r\n * onSelect callback next so the app can manage focus if needed.\r\n */\n if (action.payload.buttonRef.current) {\n action.payload.buttonRef.current.focus();\n }\n\n action.payload.callback && action.payload.callback();\n return _extends({}, state, {\n isOpen: false,\n selectionIndex: -1\n });\n\n case CLOSE_MENU:\n (_action$payload$butto = action.payload.buttonRef.current) === null || _action$payload$butto === void 0 ? void 0 : _action$payload$butto.focus();\n return _extends({}, state, {\n isOpen: false,\n selectionIndex: -1\n });\n\n case OPEN_MENU_AT_FIRST_ITEM:\n return _extends({}, state, {\n isOpen: true,\n selectionIndex: 0\n });\n\n case SELECT_ITEM_AT_INDEX:\n if (action.payload.index >= 0) {\n return _extends({}, state, {\n selectionIndex: action.payload.max != null ? Math.min(Math.max(action.payload.index, 0), action.payload.max) : Math.max(action.payload.index, 0)\n });\n }\n\n return state;\n\n case CLEAR_SELECTION_INDEX:\n return _extends({}, state, {\n selectionIndex: -1\n });\n\n case SET_BUTTON_ID:\n return _extends({}, state, {\n buttonId: action.payload\n });\n\n case SEARCH_FOR_ITEM:\n if (typeof action.payload !== \"undefined\") {\n return _extends({}, state, {\n typeaheadQuery: action.payload\n });\n }\n\n return state;\n\n default:\n return state;\n }\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9tZW51LWJ1dHRvbi9kaXN0L21lbnUtYnV0dG9uLmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaW5kZXgudHN4P2RlYjciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWxjb21lIHRvIEByZWFjaC9tZW51LWJ1dHRvbiFcbiAqXG4gKiBBbiBhY2Nlc3NpYmxlIGRyb3Bkb3duIG1lbnUgZm9yIHRoZSBjb21tb24gZHJvcGRvd24gbWVudSBidXR0b24gZGVzaWduXG4gKiBwYXR0ZXJuLlxuICpcbiAqIEBzZWUgRG9jcyAgICAgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvblxuICogQHNlZSBTb3VyY2UgICBodHRwczovL2dpdGh1Yi5jb20vcmVhY2gvcmVhY2gtdWkvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbWVudS1idXR0b25cbiAqIEBzZWUgV0FJLUFSSUEgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI21lbnVidXR0b25cbiAqXG4gKiBUT0RPOiBGaXggZmxhc2ggd2hlbiBvcGVuaW5nIGEgbWVudSBidXR0b24gb24gYSBzY3JlZW4gd2l0aCBhbm90aGVyIG9wZW4gbWVudVxuICovXG5cbmltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiQHJlYWNoL2F1dG8taWRcIjtcbmltcG9ydCBQb3BvdmVyLCB7IFBvc2l0aW9uIH0gZnJvbSBcIkByZWFjaC9wb3BvdmVyXCI7XG5pbXBvcnQge1xuICBjaGVja1N0eWxlcyxcbiAgY3JlYXRlRGVzY2VuZGFudENvbnRleHQsXG4gIGNyZWF0ZU5hbWVkQ29udGV4dCxcbiAgRGVzY2VuZGFudCxcbiAgRGVzY2VuZGFudFByb3ZpZGVyLFxuICBmb3J3YXJkUmVmV2l0aEFzLFxuICBtYWtlSWQsXG4gIG5vb3AsXG4gIHVzZURlc2NlbmRhbnQsXG4gIHVzZURlc2NlbmRhbnRzLFxuICB1c2VGb3JrZWRSZWYsXG4gIHVzZVByZXZpb3VzLFxuICB3cmFwRXZlbnRcbn0gZnJvbSBcIkByZWFjaC91dGlsc1wiO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQWN0aW9uc1xuXG5jb25zdCBDTEVBUl9TRUxFQ1RJT05fSU5ERVggPSBcIkNMRUFSX1NFTEVDVElPTl9JTkRFWFwiO1xuY29uc3QgQ0xJQ0tfTUVOVV9JVEVNID0gXCJDTElDS19NRU5VX0lURU1cIjtcbmNvbnN0IENMT1NFX01FTlUgPSBcIkNMT1NFX01FTlVcIjtcbmNvbnN0IE9QRU5fTUVOVV9BVF9GSVJTVF9JVEVNID0gXCJPUEVOX01FTlVfQVRfRklSU1RfSVRFTVwiO1xuY29uc3QgU0VBUkNIX0ZPUl9JVEVNID0gXCJTRUFSQ0hfRk9SX0lURU1cIjtcbmNvbnN0IFNFTEVDVF9JVEVNX0FUX0lOREVYID0gXCJTRUxFQ1RfSVRFTV9BVF9JTkRFWFwiO1xuY29uc3QgU0VUX0JVVFRPTl9JRCA9IFwiU0VUX0JVVFRPTl9JRFwiO1xuXG5jb25zdCBNZW51RGVzY2VuZGFudENvbnRleHQgPSBjcmVhdGVEZXNjZW5kYW50Q29udGV4dDxcbiAgSFRNTEVsZW1lbnQsXG4gIERlc2NlbmRhbnRQcm9wc1xuPihcIk1lbnVEZXNjZW5kYW50Q29udGV4dFwiKTtcbmNvbnN0IE1lbnVDb250ZXh0ID0gY3JlYXRlTmFtZWRDb250ZXh0PElNZW51Q29udGV4dD4oXG4gIFwiTWVudUNvbnRleHRcIixcbiAge30gYXMgSU1lbnVDb250ZXh0XG4pO1xuY29uc3QgdXNlTWVudUNvbnRleHQgPSAoKSA9PiB1c2VDb250ZXh0KE1lbnVDb250ZXh0KTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBNZW51QnV0dG9uU3RhdGUgPSB7XG4gIC8qXG4gICAqIFRoZSBidXR0b24gSUQgaXMgbmVlZGVkIGZvciBhcmlhIGNvbnRyb2xzIGFuZCBjYW4gYmUgc2V0IGRpcmVjdGx5IGFuZFxuICAgKiB1cGRhdGVkIGZvciB0b3AtbGV2ZWwgdXNlIHZpYSBjb250ZXh0LiBPdGhlcndpc2UgYSBkZWZhdWx0IGlzIHNldCBieSB1c2VJZC5cbiAgICogVE9ETzogQ29uc2lkZXIgZGVwcmVjYXRpbmcgZGlyZWN0IElEIGluIDEuMCBpbiBmYXZvciBvZiBpZCBhdCB0aGUgdG9wIGxldmVsXG4gICAqICAgICAgIGZvciBwYXNzaW5nIGRldGVybWluaXN0aWMgSURzIHRvIGRlc2NlbmRlbnQgY29tcG9uZW50cy5cbiAgICovXG4gIGJ1dHRvbklkOiBudWxsLFxuXG4gIC8qXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBtZW51IGlzIGV4cGFuZGVkXG4gICAqL1xuICBpc09wZW46IGZhbHNlLFxuXG4gIC8qXG4gICAqIFdoZW4gYSB1c2VyIGJlZ2lucyB0eXBpbmcgYSBjaGFyYWN0ZXIgc3RyaW5nLCB0aGUgc2VsZWN0aW9uIHdpbGwgY2hhbmdlIGlmXG4gICAqIGEgbWF0Y2hpbmcgaXRlbSBpcyBmb3VuZFxuICAgKi9cbiAgdHlwZWFoZWFkUXVlcnk6IFwiXCIsXG5cbiAgLypcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHNlbGVjdGVkIGl0ZW0uIFdoZW4gdGhlIHNlbGVjdGlvbiBpcyBjbGVhcmVkIGFcbiAgICogdmFsdWUgb2YgLTEgaXMgdXNlZC5cbiAgICovXG4gIHNlbGVjdGlvbkluZGV4OiAtMVxufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBNZW51XG4gKlxuICogVGhlIHdyYXBwZXIgY29tcG9uZW50IGZvciB0aGUgb3RoZXIgY29tcG9uZW50cy4gTm8gRE9NIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudVxuICovXG5leHBvcnQgY29uc3QgTWVudTogUmVhY3QuRkM8TWVudVByb3BzPiA9ICh7IGlkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGxldCBidXR0b25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIGxldCBtZW51UmVmID0gdXNlUmVmKG51bGwpO1xuICBsZXQgcG9wb3ZlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgbGV0IFtkZXNjZW5kYW50cywgc2V0RGVzY2VuZGFudHNdID0gdXNlRGVzY2VuZGFudHM8XG4gICAgSFRNTEVsZW1lbnQsXG4gICAgRGVzY2VuZGFudFByb3BzXG4gID4oKTtcbiAgbGV0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuICBsZXQgbWVudUlkID0gdXNlSWQoaWQpO1xuXG4gIGxldCBjb250ZXh0OiBJTWVudUNvbnRleHQgPSB7XG4gICAgYnV0dG9uUmVmLFxuICAgIGRpc3BhdGNoLFxuICAgIG1lbnVJZCxcbiAgICBtZW51UmVmLFxuICAgIHBvcG92ZXJSZWYsXG4gICAgc3RhdGVcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4gY2hlY2tTdHlsZXMoXCJtZW51LWJ1dHRvblwiKSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPERlc2NlbmRhbnRQcm92aWRlclxuICAgICAgY29udGV4dD17TWVudURlc2NlbmRhbnRDb250ZXh0fVxuICAgICAgaXRlbXM9e2Rlc2NlbmRhbnRzfVxuICAgICAgc2V0PXtzZXREZXNjZW5kYW50c31cbiAgICA+XG4gICAgICA8TWVudUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAgICB7dHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGNoaWxkcmVuKHsgaXNPcGVuOiBzdGF0ZS5pc09wZW4gfSlcbiAgICAgICAgICA6IGNoaWxkcmVufVxuICAgICAgPC9NZW51Q29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0Rlc2NlbmRhbnRQcm92aWRlcj5cbiAgKTtcbn07XG5cbi8qKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudS1wcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXF1aXJlcyB0d28gY2hpbGRyZW46IGEgYDxNZW51QnV0dG9uPmAgYW5kIGEgYDxNZW51TGlzdD5gLlxuICAgKlxuICAgKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51LWNoaWxkcmVuXG4gICAqL1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBpZD86IHN0cmluZztcbn1cblxuTWVudS5kaXNwbGF5TmFtZSA9IFwiTWVudVwiO1xuaWYgKF9fREVWX18pIHtcbiAgTWVudS5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubm9kZV0pXG4gIH07XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogTWVudUJ1dHRvblxuICpcbiAqIFdyYXBzIGEgRE9NIGBidXR0b25gIHRoYXQgdG9nZ2xlcyB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBvZiB0aGUgZHJvcGRvd25cbiAqIG1lbnUuIE11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIG9mIGEgYDxNZW51PmAuXG4gKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudWJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgTWVudUJ1dHRvbiA9IGZvcndhcmRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQsIE1lbnVCdXR0b25Qcm9wcz4oXG4gIGZ1bmN0aW9uIE1lbnVCdXR0b24oeyBvbktleURvd24sIG9uTW91c2VEb3duLCBpZCwgLi4ucHJvcHMgfSwgZm9yd2FyZGVkUmVmKSB7XG4gICAgbGV0IHtcbiAgICAgIGJ1dHRvblJlZixcbiAgICAgIG1lbnVJZCxcbiAgICAgIHN0YXRlOiB7IGJ1dHRvbklkLCBpc09wZW4gfSxcbiAgICAgIGRpc3BhdGNoXG4gICAgfSA9IHVzZU1lbnVDb250ZXh0KCk7XG4gICAgbGV0IHJlZiA9IHVzZUZvcmtlZFJlZihidXR0b25SZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgbGV0IG5ld0J1dHRvbklkID1cbiAgICAgICAgaWQgIT0gbnVsbFxuICAgICAgICAgID8gaWRcbiAgICAgICAgICA6IG1lbnVJZFxuICAgICAgICAgID8gbWFrZUlkKFwibWVudS1idXR0b25cIiwgbWVudUlkKVxuICAgICAgICAgIDogXCJtZW51LWJ1dHRvblwiO1xuICAgICAgaWYgKGJ1dHRvbklkICE9PSBuZXdCdXR0b25JZCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogU0VUX0JVVFRPTl9JRCxcbiAgICAgICAgICBwYXlsb2FkOiBuZXdCdXR0b25JZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBbYnV0dG9uSWQsIGRpc3BhdGNoLCBpZCwgbWVudUlkXSk7XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudCBzY3JvbGxcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IE9QRU5fTUVOVV9BVF9GSVJTVF9JVEVNIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgY2FzZSBcIiBcIjpcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IE9QRU5fTUVOVV9BVF9GSVJTVF9JVEVNIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bigpIHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBDTE9TRV9NRU5VLCBwYXlsb2FkOiB7IGJ1dHRvblJlZiB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBPUEVOX01FTlVfQVRfRklSU1RfSVRFTSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBkYXRhLXJlYWNoLW1lbnUtYnV0dG9uPVwiXCJcbiAgICAgICAgYXJpYS1leHBhbmRlZD17aXNPcGVufVxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICAgIGlkPXtidXR0b25JZCB8fCB1bmRlZmluZWR9XG4gICAgICAgIG9uS2V5RG93bj17d3JhcEV2ZW50KG9uS2V5RG93biwgaGFuZGxlS2V5RG93bil9XG4gICAgICAgIG9uTW91c2VEb3duPXt3cmFwRXZlbnQob25Nb3VzZURvd24sIGhhbmRsZU1vdXNlRG93bil9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4pO1xuXG4vKipcbiAqIEBzZWUgRG9jcyBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL21lbnUtYnV0dG9uI21lbnVidXR0b24tcHJvcHNcbiAqL1xuZXhwb3J0IHR5cGUgTWVudUJ1dHRvblByb3BzID0gUmVhY3QuQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+ICYge1xuICAvKipcbiAgICogQWNjZXB0cyBhbnkgcmVuZGVyYWJsZSBjb250ZW50LlxuICAgKlxuICAgKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51YnV0dG9uLWNoaWxkcmVuXG4gICAqL1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuTWVudUJ1dHRvbi5kaXNwbGF5TmFtZSA9IFwiTWVudUJ1dHRvblwiO1xuaWYgKF9fREVWX18pIHtcbiAgTWVudUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG4gIH07XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogTWVudUl0ZW1JbXBsXG4gKlxuICogTWVudUl0ZW0gYW5kIE1lbnVMaW5rIHNoYXJlIG1vc3Qgb2YgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYXB0dXJlZCBoZXJlLlxuICovXG5jb25zdCBNZW51SXRlbUltcGwgPSBmb3J3YXJkUmVmV2l0aEFzPE1lbnVJdGVtSW1wbFByb3BzLCBcImRpdlwiPihcbiAgZnVuY3Rpb24gTWVudUl0ZW1JbXBsKFxuICAgIHtcbiAgICAgIGFzOiBDb21wLFxuICAgICAgaW5kZXg6IGluZGV4UHJvcCxcbiAgICAgIGlzTGluayA9IGZhbHNlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRHJhZ1N0YXJ0LFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlRW50ZXIsXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlTW92ZSxcbiAgICAgIG9uTW91c2VVcCxcbiAgICAgIG9uU2VsZWN0LFxuICAgICAgdmFsdWVUZXh0OiB2YWx1ZVRleHRQcm9wLFxuICAgICAgLi4ucHJvcHNcbiAgICB9LFxuICAgIGZvcndhcmRlZFJlZlxuICApIHtcbiAgICBsZXQge1xuICAgICAgYnV0dG9uUmVmLFxuICAgICAgZGlzcGF0Y2gsXG4gICAgICBtZW51UmVmLFxuICAgICAgc3RhdGU6IHsgaXNPcGVuLCBzZWxlY3Rpb25JbmRleCB9XG4gICAgfSA9IHVzZU1lbnVDb250ZXh0KCk7XG5cbiAgICBsZXQgb3duUmVmID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKlxuICAgICAqIEFmdGVyIHRoZSByZWYgaXMgbW91bnRlZCB0byB0aGUgRE9NIG5vZGUsIHdlIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFuXG4gICAgICogZXhwbGljaXQgdmFsdWVUZXh0IHByb3AgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZSBub2RlJ3MgdGV4dENvbnRlbnQgZm9yXG4gICAgICogdHlwZWFoZWFkIGZ1bmN0aW9uYWxpdHkuXG4gICAgICovXG4gICAgbGV0IFt2YWx1ZVRleHQsIHNldFZhbHVlVGV4dF0gPSB1c2VTdGF0ZSh2YWx1ZVRleHRQcm9wIHx8IFwiXCIpO1xuICAgIGxldCBzZXRWYWx1ZVRleHRGcm9tRG9tID0gdXNlQ2FsbGJhY2soXG4gICAgICBub2RlID0+IHtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBvd25SZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXZhbHVlVGV4dFByb3AgfHxcbiAgICAgICAgICAgIChub2RlLnRleHRDb250ZW50ICYmIHZhbHVlVGV4dCAhPT0gbm9kZS50ZXh0Q29udGVudClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNldFZhbHVlVGV4dChub2RlLnRleHRDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdmFsdWVUZXh0LCB2YWx1ZVRleHRQcm9wXVxuICAgICk7XG5cbiAgICBsZXQgcmVmID0gdXNlRm9ya2VkUmVmKGZvcndhcmRlZFJlZiwgc2V0VmFsdWVUZXh0RnJvbURvbSk7XG5cbiAgICBsZXQgbW91c2VFdmVudFN0YXJ0ZWQgPSB1c2VSZWYoZmFsc2UpO1xuXG4gICAgY29uc3QgaW5kZXggPSB1c2VEZXNjZW5kYW50KFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBNZW51RGVzY2VuZGFudENvbnRleHQsXG4gICAgICAgIGVsZW1lbnQ6IG93blJlZi5jdXJyZW50LFxuICAgICAgICBrZXk6IHZhbHVlVGV4dFxuICAgICAgfSxcbiAgICAgIGluZGV4UHJvcFxuICAgICk7XG4gICAgbGV0IGlzU2VsZWN0ZWQgPSBpbmRleCA9PT0gc2VsZWN0aW9uSW5kZXg7XG5cbiAgICBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENMSUNLX01FTlVfSVRFTSxcbiAgICAgICAgcGF5bG9hZDogeyBidXR0b25SZWYsIGNhbGxiYWNrOiBvblNlbGVjdCB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudDogUmVhY3QuTW91c2VFdmVudCkge1xuICAgICAgaWYgKGlzTGluayAmJiAhaXNSaWdodENsaWNrKGV2ZW50Lm5hdGl2ZUV2ZW50KSkge1xuICAgICAgICBzZWxlY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVEcmFnU3RhcnQoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpIHtcbiAgICAgIC8qXG4gICAgICAgKiBCZWNhdXNlIHdlIGRvbid0IHByZXZlbnREZWZhdWx0IG9uIG1vdXNlZG93biBmb3IgbGlua3MgKHdlIG5lZWQgdGhlXG4gICAgICAgKiBuYXRpdmUgY2xpY2sgZXZlbnQpLCBjbGlja2luZyBhbmQgaG9sZGluZyBvbiBhIGxpbmsgdHJpZ2dlcnMgYSBkcmFnc3RhcnRcbiAgICAgICAqIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICAgKi9cbiAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50KSB7XG4gICAgICBsZXQgeyBrZXkgfSA9IGV2ZW50O1xuICAgICAgaWYgKGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogRm9yIGxpbmtzLCB0aGUgRW50ZXIga2V5IHdpbGwgdHJpZ2dlciBhIGNsaWNrIGJ5IGRlZmF1bHQsIGJ1dCBmb3JcbiAgICAgICAgICogY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgbWVudSBpdGVtcyB3ZSdsbCB0cmlnZ2VyIGEgY2xpY2sgd2hlbiB0aGVcbiAgICAgICAgICogc3BhY2ViYXIgaXMgcHJlc3NlZC5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcIiBcIiAmJiBvd25SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgb3duUmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudDogUmVhY3QuTW91c2VFdmVudCkge1xuICAgICAgaWYgKGlzUmlnaHRDbGljayhldmVudC5uYXRpdmVFdmVudCkpIHJldHVybjtcblxuICAgICAgaWYgKGlzTGluaykge1xuICAgICAgICAvKlxuICAgICAgICAgKiBTaWduYWwgdGhhdCB0aGUgbW91c2UgaXMgZG93biBzbyB3ZSBjYW4gcmVhY3QgY2FsbCB0aGUgcmlnaHQgZnVuY3Rpb25cbiAgICAgICAgICogaWYgdGhlIHVzZXIgaXMgY2xpY2tpbmcgb24gYSBsaW5rLlxuICAgICAgICAgKi9cbiAgICAgICAgbW91c2VFdmVudFN0YXJ0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpIHtcbiAgICAgIGlmICghaXNTZWxlY3RlZCAmJiBpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsIHBheWxvYWQ6IHsgaW5kZXggfSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSB7XG4gICAgICAvLyBDbGVhciBvdXQgc2VsZWN0aW9uIHdoZW4gbW91c2Ugb3ZlciBhIG5vbi1tZW51IGl0ZW0gY2hpbGQuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6IENMRUFSX1NFTEVDVElPTl9JTkRFWCB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpIHtcbiAgICAgIGlmICghaXNTZWxlY3RlZCAmJiBpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsIHBheWxvYWQ6IHsgaW5kZXggfSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSB7XG4gICAgICBpZiAoaXNSaWdodENsaWNrKGV2ZW50Lm5hdGl2ZUV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNMaW5rKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIGEgbW91c2Vkb3duIGV2ZW50IHdhcyBpbml0aWF0ZWQgb24gYSBtZW51IGxpbmsgZm9sbG93ZWQgYnkgYVxuICAgICAgICAgKiBtb3VzZXVwIGV2ZW50IG9uIHRoZSBzYW1lIGxpbmssIHdlIGRvIG5vdGhpbmc7IGEgY2xpY2sgZXZlbnQgd2lsbFxuICAgICAgICAgKiBjb21lIG5leHQgYW5kIGhhbmRsZSBzZWxlY3Rpb24uIE90aGVyd2lzZSwgd2UgdHJpZ2dlciBhIGNsaWNrIGV2ZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG1vdXNlRXZlbnRTdGFydGVkLmN1cnJlbnQpIHtcbiAgICAgICAgICBtb3VzZUV2ZW50U3RhcnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAob3duUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvd25SZWYuY3VycmVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEFueSB0aW1lIGEgbW91c2V1cCBldmVudCBvY2N1cnMgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCB3ZSByZXNldCB0aGVcbiAgICAgKiBtb3VzZUV2ZW50U3RhcnRlZCByZWYgc28gd2UgY2FuIGNoZWNrIGl0IGFnYWluIHdoZW4gbmVlZGVkLlxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBsZXQgbGlzdGVuZXIgPSAoKSA9PiAobW91c2VFdmVudFN0YXJ0ZWQuY3VycmVudCA9IGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGxpc3RlbmVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBsaXN0ZW5lcik7XG4gICAgfSwgW10pO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBhIG5ldyBzZWxlY3Rpb24gaXMgbWFkZSB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1cy4gV2hlbiBubyBpdGVtIGlzXG4gICAgICogc2VsZWN0ZWQsIGZvY3VzIGlzIHBsYWNlZCBvbiB0aGUgbWVudSBpdHNlbGYgc28gdGhhdCBrZXlib2FyZCBuYXZpZ2F0aW9uIGlzXG4gICAgICogc3RpbGwgcG9zc2libGUuXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cuX19SRUFDSF9ESVNBQkxFX1RPT0xUSVBTID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIFdlIGhhdmVuJ3QgbWVhc3VyZWQgdGhlIHBvcG92ZXIgeWV0LCBzbyBnaXZlIGl0IGEgZnJhbWUgb3RoZXJ3aXNlXG4gICAgICAgICAgICAgKiB3ZSdsbCBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSA+LjxcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKG93blJlZi5jdXJyZW50ICYmIGluZGV4ID09PSBzZWxlY3Rpb25JbmRleCkge1xuICAgICAgICAgICAgICBvd25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogQ2xlYXIgaGlnaGxpZ2h0IHdoZW4gbW91c2luZyBvdmVyIG5vbi1tZW51IGl0ZW1zLCBidXQgZm9jdXMgdGhlXG4gICAgICAgICAgICAgKiBtZW51IHNvIHRoZSB0aGUga2V5Ym9hcmQgd2lsbCB3b3JrIGFmdGVyIGEgbW91c2VvdmVyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtZW51UmVmLmN1cnJlbnQgJiYgbWVudVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIHdhbnQgdG8gaWdub3JlIHRoZSBpbW1lZGlhdGUgZm9jdXMgb2YgYSB0b29sdGlwIHNvIGl0IGRvZXNuJ3QgcG9wXG4gICAgICAgICAqIHVwIGFnYWluIHdoZW4gdGhlIG1lbnUgY2xvc2VzLCBvbmx5IHBvcHMgdXAgd2hlbiBmb2N1cyByZXR1cm5zIGFnYWluXG4gICAgICAgICAqIHRvIHRoZSB0b29sdGlwIChsaWtlIG5hdGl2ZSBPUyB0b29sdGlwcykuXG4gICAgICAgICAqL1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5fX1JFQUNIX0RJU0FCTEVfVE9PTFRJUFMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCBbaW5kZXgsIGlzT3BlbiwgbWVudVJlZiwgc2VsZWN0aW9uSW5kZXhdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBkYXRhLXJlYWNoLW1lbnUtaXRlbT1cIlwiXG4gICAgICAgIGRhdGEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcIlwiIDogdW5kZWZpbmVkfVxuICAgICAgICBkYXRhLXZhbHVldGV4dD17dmFsdWVUZXh0fVxuICAgICAgICBvbkNsaWNrPXt3cmFwRXZlbnQob25DbGljaywgaGFuZGxlQ2xpY2spfVxuICAgICAgICBvbkRyYWdTdGFydD17d3JhcEV2ZW50KG9uRHJhZ1N0YXJ0LCBoYW5kbGVEcmFnU3RhcnQpfVxuICAgICAgICBvbktleURvd249e3dyYXBFdmVudChvbktleURvd24sIGhhbmRsZUtleURvd24pfVxuICAgICAgICBvbk1vdXNlRG93bj17d3JhcEV2ZW50KG9uTW91c2VEb3duLCBoYW5kbGVNb3VzZURvd24pfVxuICAgICAgICBvbk1vdXNlRW50ZXI9e3dyYXBFdmVudChvbk1vdXNlRW50ZXIsIGhhbmRsZU1vdXNlRW50ZXIpfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e3dyYXBFdmVudChvbk1vdXNlTGVhdmUsIGhhbmRsZU1vdXNlTGVhdmUpfVxuICAgICAgICBvbk1vdXNlTW92ZT17d3JhcEV2ZW50KG9uTW91c2VNb3ZlLCBoYW5kbGVNb3VzZU1vdmUpfVxuICAgICAgICBvbk1vdXNlVXA9e3dyYXBFdmVudChvbk1vdXNlVXAsIGhhbmRsZU1vdXNlVXApfVxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIE1lbnVJdGVtSW1wbFByb3BzID0ge1xuICAvKipcbiAgICogWW91IGNhbiBwdXQgYW55IHR5cGUgb2YgY29udGVudCBpbnNpZGUgb2YgYSBgPE1lbnVJdGVtPmAuXG4gICAqXG4gICAqIEBzZWUgRG9jcyBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL21lbnUtYnV0dG9uI21lbnVpdGVtLWNoaWxkcmVuXG4gICAqL1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICAvKipcbiAgICogQ2FsbGJhY2sgdGhhdCBmaXJlcyB3aGVuIGEgYE1lbnVJdGVtYCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudWl0ZW0tb25zZWxlY3RcbiAgICovXG4gIG9uU2VsZWN0OiAoKSA9PiBhbnk7XG4gIGluZGV4PzogbnVtYmVyO1xuICBpc0xpbms/OiBib29sZWFuO1xuICB2YWx1ZVRleHQ/OiBzdHJpbmc7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIE1lbnVJdGVtXG4gKlxuICogSGFuZGxlcyBtZW51IHNlbGVjdGlvbi4gTXVzdCBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIGA8TWVudUxpc3Q+YC5cbiAqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51aXRlbVxuICovXG5leHBvcnQgY29uc3QgTWVudUl0ZW0gPSBmb3J3YXJkUmVmV2l0aEFzPE1lbnVJdGVtUHJvcHMsIFwiZGl2XCI+KFxuICBmdW5jdGlvbiBNZW51SXRlbSh7IGFzID0gXCJkaXZcIiwgLi4ucHJvcHMgfSwgZm9yd2FyZGVkUmVmKSB7XG4gICAgcmV0dXJuIDxNZW51SXRlbUltcGwgey4uLnByb3BzfSByZWY9e2ZvcndhcmRlZFJlZn0gYXM9e2FzfSAvPjtcbiAgfVxuKTtcblxuLyoqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51aXRlbS1wcm9wc1xuICovXG5leHBvcnQgdHlwZSBNZW51SXRlbVByb3BzID0gT21pdDxNZW51SXRlbUltcGxQcm9wcywgXCJpc0xpbmtcIj47XG5cbk1lbnVJdGVtLmRpc3BsYXlOYW1lID0gXCJNZW51SXRlbVwiO1xuaWYgKF9fREVWX18pIHtcbiAgTWVudUl0ZW0ucHJvcFR5cGVzID0ge1xuICAgIGFzOiBQcm9wVHlwZXMuYW55LFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH07XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogTWVudUl0ZW1zXG4gKlxuICogQSBsb3ctbGV2ZWwgd3JhcHBlciBmb3IgbWVudSBpdGVtcy4gQ29tcG9zZSBpdCB3aXRoIGBNZW51UG9wb3ZlcmAgZm9yIG1vcmVcbiAqIGNvbnRyb2wgb3ZlciB0aGUgbmVzdGVkIGNvbXBvbmVudHMgYW5kIHRoZWlyIHJlbmRlcmVkIERPTSBub2Rlcywgb3IgaWYgeW91XG4gKiBuZWVkIHRvIG5lc3QgYXJiaXRyYXJ5IGNvbXBvbmVudHMgYmV0d2VlbiB0aGUgb3V0ZXIgd3JhcHBlciBhbmQgeW91ciBsaXN0LlxuICpcbiAqIEBzZWUgRG9jcyBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL21lbnUtYnV0dG9uI21lbnVpdGVtc1xuICovXG5leHBvcnQgY29uc3QgTWVudUl0ZW1zID0gZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTWVudUl0ZW1zUHJvcHM+KFxuICBmdW5jdGlvbiBNZW51SXRlbXMoeyBjaGlsZHJlbiwgb25LZXlEb3duLCBvbkJsdXIsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgYnV0dG9uUmVmLFxuICAgICAgbWVudVJlZixcbiAgICAgIHN0YXRlOiB7IGlzT3BlbiwgYnV0dG9uSWQsIHNlbGVjdGlvbkluZGV4LCB0eXBlYWhlYWRRdWVyeSB9XG4gICAgfSA9IHVzZU1lbnVDb250ZXh0KCk7XG4gICAgY29uc3QgeyBkZXNjZW5kYW50czogbWVudUl0ZW1zIH0gPSB1c2VDb250ZXh0KE1lbnVEZXNjZW5kYW50Q29udGV4dCk7XG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKG1lbnVSZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVzcG9uZCB0byB1c2VyIGNoYXIga2V5IGlucHV0IHdpdGggdHlwZWFoZWFkXG4gICAgICBjb25zdCBtYXRjaCA9IGZpbmRJdGVtRnJvbVR5cGVhaGVhZChtZW51SXRlbXMsIHR5cGVhaGVhZFF1ZXJ5KTtcbiAgICAgIGlmICh0eXBlYWhlYWRRdWVyeSAmJiBtYXRjaCAhPSBudWxsKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBTRUxFQ1RfSVRFTV9BVF9JTkRFWCxcbiAgICAgICAgICBwYXlsb2FkOiB7IGluZGV4OiBtYXRjaCB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbGV0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICB0eXBlYWhlYWRRdWVyeSAmJiBkaXNwYXRjaCh7IHR5cGU6IFNFQVJDSF9GT1JfSVRFTSwgcGF5bG9hZDogXCJcIiB9KSxcbiAgICAgICAgMTAwMFxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0sIFtkaXNwYXRjaCwgbWVudUl0ZW1zLCB0eXBlYWhlYWRRdWVyeV0pO1xuXG4gICAgY29uc3QgcHJldk1lbnVJdGVtc0xlbmd0aCA9IHVzZVByZXZpb3VzKG1lbnVJdGVtcy5sZW5ndGgpO1xuICAgIGNvbnN0IHByZXZTZWxlY3RlZCA9IHVzZVByZXZpb3VzKG1lbnVJdGVtc1tzZWxlY3Rpb25JbmRleF0pO1xuICAgIGNvbnN0IHByZXZTZWxlY3Rpb25JbmRleCA9IHVzZVByZXZpb3VzKHNlbGVjdGlvbkluZGV4KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0aW9uSW5kZXggPiBtZW51SXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBmb3Igc29tZSByZWFzb24gb3VyIHNlbGVjdGlvbiBpbmRleCBpcyBsYXJnZXIgdGhhbiBvdXIgcG9zc2libGVcbiAgICAgICAgICogaW5kZXggcmFuZ2UgKGxldCdzIHNheSB0aGUgbGFzdCBpdGVtIGlzIHNlbGVjdGVkIGFuZCB0aGUgbGlzdFxuICAgICAgICAgKiBkeW5hbWljYWxseSB1cGRhdGVzKSwgd2UgbmVlZCB0byBzZWxlY3QgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgICAgICovXG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBTRUxFQ1RfSVRFTV9BVF9JTkRFWCxcbiAgICAgICAgICBwYXlsb2FkOiB7IGluZGV4OiBtZW51SXRlbXMubGVuZ3RoIC0gMSB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2tzIGlmXG4gICAgICAgICAqICAtIG1lbnUgbGVuZ3RoIGhhcyBjaGFuZ2VkXG4gICAgICAgICAqICAtIHNlbGVjdGlvbiBpbmRleCBoYXMgbm90IGNoYW5nZWQgQlVUIHNlbGVjdGVkIGl0ZW0gaGFzIGNoYW5nZWRcbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBwcmV2ZW50cyBhbnkgZHluYW1pYyBhZGRpbmcvcmVtb3Zpbmcgb2YgbWVudSBpdGVtcyBmcm9tIGFjdHVhbGx5XG4gICAgICAgICAqIGNoYW5naW5nIGEgdXNlcidzIGV4cGVjdGVkIHNlbGVjdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHByZXZNZW51SXRlbXNMZW5ndGggIT09IG1lbnVJdGVtcy5sZW5ndGggJiZcbiAgICAgICAgc2VsZWN0aW9uSW5kZXggPiAtMSAmJlxuICAgICAgICBwcmV2U2VsZWN0ZWQgJiZcbiAgICAgICAgcHJldlNlbGVjdGlvbkluZGV4ID09PSBzZWxlY3Rpb25JbmRleCAmJlxuICAgICAgICBtZW51SXRlbXNbc2VsZWN0aW9uSW5kZXhdICE9PSBwcmV2U2VsZWN0ZWRcbiAgICAgICkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsXG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgaW5kZXg6IG1lbnVJdGVtcy5maW5kSW5kZXgoaSA9PiBpLmtleSA9PT0gcHJldlNlbGVjdGVkLmtleSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIFtcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgbWVudUl0ZW1zLFxuICAgICAgcHJldk1lbnVJdGVtc0xlbmd0aCxcbiAgICAgIHByZXZTZWxlY3RlZCxcbiAgICAgIHByZXZTZWxlY3Rpb25JbmRleCxcbiAgICAgIHNlbGVjdGlvbkluZGV4XG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50KSB7XG4gICAgICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG5cbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiOlxuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogQ0xPU0VfTUVOVSwgcGF5bG9hZDogeyBidXR0b25SZWYgfSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAgICAvLyBwcmV2ZW50IHdpbmRvdyBzY3JvbGxcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsIHBheWxvYWQ6IHsgaW5kZXg6IDAgfSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkVuZFwiOlxuICAgICAgICAgIC8vIHByZXZlbnQgd2luZG93IHNjcm9sbFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsXG4gICAgICAgICAgICBwYXlsb2FkOiB7IGluZGV4OiBtZW51SXRlbXMubGVuZ3RoIC0gMSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICAvLyBwcmV2ZW50IHdpbmRvdyBzY3JvbGxcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IE1hdGgubWluKHNlbGVjdGlvbkluZGV4ICsgMSwgbWVudUl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFNFTEVDVF9JVEVNX0FUX0lOREVYLFxuICAgICAgICAgICAgcGF5bG9hZDogeyBpbmRleDogbmV4dEluZGV4IH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICAvLyBwcmV2ZW50IHdpbmRvdyBzY3JvbGxcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IHByZXZJbmRleCA9IE1hdGgubWF4KHNlbGVjdGlvbkluZGV4IC0gMSwgMCk7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogU0VMRUNUX0lURU1fQVRfSU5ERVgsXG4gICAgICAgICAgICBwYXlsb2FkOiB7IGluZGV4OiBwcmV2SW5kZXggfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVGFiXCI6XG4gICAgICAgICAgLy8gcHJldmVudCBsZWF2aW5nXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIENoZWNrIGlmIGEgdXNlciBpcyB0eXBpbmcgc29tZSBjaGFyIGtleXMgYW5kIHJlc3BvbmQgYnkgc2V0dGluZyB0aGVcbiAgICAgICAgICAgKiBxdWVyeSBzdGF0ZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiAmJiBrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IHR5cGVhaGVhZFF1ZXJ5ICsga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgIHR5cGU6IFNFQVJDSF9GT1JfSVRFTSxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcXVlcnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBkYXRhLXJlYWNoLW1lbnUtaXRlbXM9XCJcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2J1dHRvbklkIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgb25LZXlEb3duPXt3cmFwRXZlbnQob25LZXlEb3duLCBoYW5kbGVLZXlEb3duKX1cbiAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG5cbi8qKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudWl0ZW1zLXByb3BzXG4gKi9cbmV4cG9ydCB0eXBlIE1lbnVJdGVtc1Byb3BzID0ge1xuICAvKipcbiAgICogQ2FuIGNvbnRhaW4gb25seSBgTWVudUl0ZW1gIG9yIGEgYE1lbnVMaW5rYC5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudWl0ZW1zLWNoaWxkcmVuXG4gICAqL1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSAmIFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PjtcblxuTWVudUl0ZW1zLmRpc3BsYXlOYW1lID0gXCJNZW51SXRlbXNcIjtcbmlmIChfX0RFVl9fKSB7XG4gIE1lbnVJdGVtcy5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG4gIH07XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogTWVudUxpbmtcbiAqXG4gKiBIYW5kbGVzIGxpbmtpbmcgdG8gYSBkaWZmZXJlbnQgcGFnZSBpbiB0aGUgbWVudS4gQnkgZGVmYXVsdCBpdCByZW5kZXJzIGA8YT5gLFxuICogYnV0IGFsc28gYWNjZXB0cyBhbnkgb3RoZXIga2luZCBvZiBMaW5rIGFzIGxvbmcgYXMgdGhlIGBMaW5rYCB1c2VzIHRoZVxuICogYFJlYWN0LmZvcndhcmRSZWZgIEFQSS5cbiAqXG4gKiBNdXN0IGJlIGEgZGlyZWN0IGNoaWxkIG9mIGEgYDxNZW51TGlzdD5gLlxuICpcbiAqIEBzZWUgRG9jcyBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL21lbnUtYnV0dG9uI21lbnVsaW5rXG4gKi9cbmV4cG9ydCBjb25zdCBNZW51TGluayA9IGZvcndhcmRSZWZXaXRoQXM8XG4gIE1lbnVMaW5rUHJvcHMgJiB7IGNvbXBvbmVudD86IGFueSB9LFxuICBcImFcIlxuPihmdW5jdGlvbiBNZW51TGluayh7IGFzID0gXCJhXCIsIGNvbXBvbmVudCwgb25TZWxlY3QsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikge1xuICBpZiAoY29tcG9uZW50KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbQHJlYWNoL21lbnUtYnV0dG9uXTogUGxlYXNlIHVzZSB0aGUgYGFzYCBwcm9wIGluc3RlYWQgb2YgYGNvbXBvbmVudGAuXCJcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJvbGU9XCJub25lXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxNZW51SXRlbUltcGxcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICByZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgICAgZGF0YS1yZWFjaC1tZW51LWxpbms9XCJcIlxuICAgICAgICBhcz17YXN9XG4gICAgICAgIGlzTGluaz17dHJ1ZX1cbiAgICAgICAgb25TZWxlY3Q9e29uU2VsZWN0IHx8IG5vb3B9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbi8qKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudWxpbmstcHJvcHNcbiAqL1xuZXhwb3J0IHR5cGUgTWVudUxpbmtQcm9wcyA9IE9taXQ8TWVudUl0ZW1JbXBsUHJvcHMsIFwiaXNMaW5rXCIgfCBcIm9uU2VsZWN0XCI+ICYge1xuICB0bz86IHN0cmluZztcbiAgb25TZWxlY3Q/OiAoKSA9PiBhbnk7XG59O1xuXG5NZW51TGluay5kaXNwbGF5TmFtZSA9IFwiTWVudUxpbmtcIjtcbmlmIChfX0RFVl9fKSB7XG4gIE1lbnVMaW5rLnByb3BUeXBlcyA9IHtcbiAgICBhczogUHJvcFR5cGVzLmFueSxcbiAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnlcbiAgfTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBNZW51TGlzdFxuICpcbiAqIFdyYXBzIGEgRE9NIGVsZW1lbnQgdGhhdCByZW5kZXJzIHRoZSBtZW51IGl0ZW1zLiBNdXN0IGJlIHJlbmRlcmVkIGluc2lkZSBvZlxuICogYSBgPE1lbnU+YC5cbiAqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51bGlzdFxuICovXG5leHBvcnQgY29uc3QgTWVudUxpc3QgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBNZW51TGlzdFByb3BzPihcbiAgZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVudVBvcG92ZXI+XG4gICAgICAgIDxNZW51SXRlbXMgey4uLnByb3BzfSByZWY9e2ZvcndhcmRlZFJlZn0gZGF0YS1yZWFjaC1tZW51LWxpc3Q9XCJcIiAvPlxuICAgICAgPC9NZW51UG9wb3Zlcj5cbiAgICApO1xuICB9XG4pO1xuXG4vKipcbiAqIEBzZWUgRG9jcyBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL21lbnUtYnV0dG9uI21lbnVsaXN0LXByb3BzXG4gKi9cbmV4cG9ydCB0eXBlIE1lbnVMaXN0UHJvcHMgPSBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4gJiB7XG4gIC8qKlxuICAgKiBDYW4gY29udGFpbiBvbmx5IGBNZW51SXRlbWAgb3IgYSBgTWVudUxpbmtgLlxuICAgKlxuICAgKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51bGlzdC1jaGlsZHJlblxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbk1lbnVMaXN0LmRpc3BsYXlOYW1lID0gXCJNZW51TGlzdFwiO1xuaWYgKF9fREVWX18pIHtcbiAgTWVudUxpc3QucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG4gIH07XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogTWVudVBvcG92ZXJcbiAqXG4gKiBBIGxvdy1sZXZlbCB3cmFwcGVyIGZvciB0aGUgcG9wb3ZlciB0aGF0IGFwcGVhcnMgd2hlbiBhIG1lbnUgYnV0dG9uIGlzIG9wZW4uXG4gKiBZb3UgY2FuIGNvbXBvc2UgaXQgd2l0aCBgTWVudUl0ZW1zYCBmb3IgbW9yZSBjb250cm9sIG92ZXIgdGhlIG5lc3RlZFxuICogY29tcG9uZW50cyBhbmQgdGhlaXIgcmVuZGVyZWQgRE9NIG5vZGVzLCBvciBpZiB5b3UgbmVlZCB0byBuZXN0IGFyYml0cmFyeVxuICogY29tcG9uZW50cyBiZXR3ZWVuIHRoZSBvdXRlciB3cmFwcGVyIGFuZCB5b3VyIGxpc3QuXG4gKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudXBvcG92ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IE1lbnVQb3BvdmVyID0gZm9yd2FyZFJlZjxhbnksIE1lbnVQb3BvdmVyUHJvcHM+KFxuICBmdW5jdGlvbiBNZW51UG9wb3Zlcih7IGNoaWxkcmVuLCBvbkJsdXIsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikge1xuICAgIGNvbnN0IHtcbiAgICAgIGJ1dHRvblJlZixcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgbWVudVJlZixcbiAgICAgIHBvcG92ZXJSZWYsXG4gICAgICBzdGF0ZTogeyBpc09wZW4gfVxuICAgIH0gPSB1c2VNZW51Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKHBvcG92ZXJSZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50KSB7XG4gICAgICBjb25zdCB7IHJlbGF0ZWRUYXJnZXQgfSA9IGV2ZW50O1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgLy8gV2Ugb24gd2FudCB0byBjbG9zZSBvbmx5IGlmIGZvY3VzIHJlc3RzIG91dHNpZGUgdGhlIG1lbnVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IG1lbnVSZWYuY3VycmVudCAmJlxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGJ1dHRvblJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgcG9wb3ZlclJlZi5jdXJyZW50XG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFwb3BvdmVyUmVmLmN1cnJlbnQuY29udGFpbnMoXG4gICAgICAgICAgICAgIChyZWxhdGVkVGFyZ2V0IGFzIEVsZW1lbnQpIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogQ0xPU0VfTUVOVSwgcGF5bG9hZDogeyBidXR0b25SZWYgfSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNPcGVuID8gKFxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgZGF0YS1yZWFjaC1tZW51PVwiXCIgLy8gZGVwcmVjYXRlIGZvciBuYW1pbmcgY29uc2lzdGVuY3k/XG4gICAgICAgIGRhdGEtcmVhY2gtbWVudS1wb3BvdmVyPVwiXCJcbiAgICAgICAgb25CbHVyPXt3cmFwRXZlbnQob25CbHVyLCBoYW5kbGVCbHVyKX1cbiAgICAgICAgLy8gVE9ETzogRml4IGluIEByZWFjaC9wb3BvdmVyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFyZ2V0UmVmPXtidXR0b25SZWZ9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApIDogbnVsbDtcbiAgfVxuKTtcblxuLyoqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9tZW51LWJ1dHRvbiNtZW51cG9wb3Zlci1wcm9wc1xuICovXG5leHBvcnQgdHlwZSBNZW51UG9wb3ZlclByb3BzID0gUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+ICYge1xuICAvKipcbiAgICogTXVzdCBjb250YWluIGEgYE1lbnVJdGVtc2BcbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvbWVudS1idXR0b24jbWVudXBvcG92ZXItY2hpbGRyZW5cbiAgICovXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5NZW51UG9wb3Zlci5kaXNwbGF5TmFtZSA9IFwiTWVudVBvcG92ZXJcIjtcbmlmIChfX0RFVl9fKSB7XG4gIE1lbnVQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbiAgfTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBXaGVuIGEgdXNlcidzIHR5cGVkIGlucHV0IG1hdGNoZXMgdGhlIHN0cmluZyBkaXNwbGF5ZWQgaW4gYSBtZW51IGl0ZW0sIGl0IGlzXG4gKiBleHBlY3RlZCB0aGF0IHRoZSBtYXRjaGluZyBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuIFRoaXMgaXMgb3VyIG1hdGNoaW5nXG4gKiBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmluZEl0ZW1Gcm9tVHlwZWFoZWFkKFxuICBpdGVtczogRGVzY2VuZGFudDxIVE1MRWxlbWVudD5bXSxcbiAgc3RyaW5nOiBzdHJpbmcgPSBcIlwiXG4pIHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvdW5kID0gaXRlbXMuZmluZCgoeyBlbGVtZW50IH0pID0+XG4gICAgZWxlbWVudD8uZGF0YXNldD8udmFsdWV0ZXh0Py50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc3RyaW5nKVxuICApO1xuICByZXR1cm4gZm91bmQgPyBpdGVtcy5pbmRleE9mKGZvdW5kKSA6IG51bGw7XG59XG5cbmludGVyZmFjZSBNZW51QnV0dG9uU3RhdGUge1xuICBpc09wZW46IGJvb2xlYW47XG4gIHNlbGVjdGlvbkluZGV4OiBudW1iZXI7XG4gIGJ1dHRvbklkOiBudWxsIHwgc3RyaW5nO1xuICB0eXBlYWhlYWRRdWVyeTogc3RyaW5nO1xufVxuXG50eXBlIE1lbnVCdXR0b25BY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IFwiQ0xJQ0tfTUVOVV9JVEVNXCI7XG4gICAgICBwYXlsb2FkOiB7IGJ1dHRvblJlZjogQnV0dG9uUmVmOyBjYWxsYmFjaz86ICgpID0+IGFueSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6IFwiQ0xPU0VfTUVOVVwiOyBwYXlsb2FkOiB7IGJ1dHRvblJlZjogQnV0dG9uUmVmIH0gfVxuICB8IHsgdHlwZTogXCJPUEVOX01FTlVfQVRfRklSU1RfSVRFTVwiIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcIlNFTEVDVF9JVEVNX0FUX0lOREVYXCI7XG4gICAgICBwYXlsb2FkOiB7IG1heD86IG51bWJlcjsgbWluPzogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gICAgfVxuICB8IHsgdHlwZTogXCJDTEVBUl9TRUxFQ1RJT05fSU5ERVhcIiB9XG4gIHwgeyB0eXBlOiBcIlNFVF9CVVRUT05fSURcIjsgcGF5bG9hZDogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiU0VBUkNIX0ZPUl9JVEVNXCI7IHBheWxvYWQ6IHN0cmluZyB9O1xuXG5mdW5jdGlvbiBpc1JpZ2h0Q2xpY2sobmF0aXZlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgaWYgKFwid2hpY2hcIiBpbiBuYXRpdmVFdmVudCkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC53aGljaCA9PT0gMztcbiAgfSBlbHNlIGlmIChcImJ1dHRvblwiIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgcmV0dXJuIChuYXRpdmVFdmVudCBhcyBhbnkpLmJ1dHRvbiA9PT0gMjtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoXG4gIHN0YXRlOiBNZW51QnV0dG9uU3RhdGUsXG4gIGFjdGlvbjogTWVudUJ1dHRvbkFjdGlvbiA9IHt9IGFzIE1lbnVCdXR0b25BY3Rpb25cbik6IE1lbnVCdXR0b25TdGF0ZSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIENMSUNLX01FTlVfSVRFTTpcbiAgICAgIC8qXG4gICAgICAgKiBGb2N1cyB0aGUgYnV0dG9uIGZpcnN0IGJ5IGRlZmF1bHQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkLiBXZSBmaXJlIHRoZVxuICAgICAgICogb25TZWxlY3QgY2FsbGJhY2sgbmV4dCBzbyB0aGUgYXBwIGNhbiBtYW5hZ2UgZm9jdXMgaWYgbmVlZGVkLlxuICAgICAgICovXG4gICAgICBpZiAoYWN0aW9uLnBheWxvYWQuYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYWN0aW9uLnBheWxvYWQuYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbi5wYXlsb2FkLmNhbGxiYWNrICYmIGFjdGlvbi5wYXlsb2FkLmNhbGxiYWNrKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0aW9uSW5kZXg6IC0xXG4gICAgICB9O1xuICAgIGNhc2UgQ0xPU0VfTUVOVTpcbiAgICAgIGFjdGlvbi5wYXlsb2FkLmJ1dHRvblJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiAtMVxuICAgICAgfTtcbiAgICBjYXNlIE9QRU5fTUVOVV9BVF9GSVJTVF9JVEVNOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgc2VsZWN0aW9uSW5kZXg6IDBcbiAgICAgIH07XG4gICAgY2FzZSBTRUxFQ1RfSVRFTV9BVF9JTkRFWDpcbiAgICAgIGlmIChhY3Rpb24ucGF5bG9hZC5pbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uSW5kZXg6XG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5tYXggIT0gbnVsbFxuICAgICAgICAgICAgICA/IE1hdGgubWluKE1hdGgubWF4KGFjdGlvbi5wYXlsb2FkLmluZGV4LCAwKSwgYWN0aW9uLnBheWxvYWQubWF4KVxuICAgICAgICAgICAgICA6IE1hdGgubWF4KGFjdGlvbi5wYXlsb2FkLmluZGV4LCAwKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGNhc2UgQ0xFQVJfU0VMRUNUSU9OX0lOREVYOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiAtMVxuICAgICAgfTtcbiAgICBjYXNlIFNFVF9CVVRUT05fSUQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYnV0dG9uSWQ6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIGNhc2UgU0VBUkNIX0ZPUl9JVEVNOlxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb24ucGF5bG9hZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHR5cGVhaGVhZFF1ZXJ5OiBhY3Rpb24ucGF5bG9hZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFR5cGVzXG5cbnR5cGUgRGVzY2VuZGFudFByb3BzID0geyBrZXk6IHN0cmluZyB9O1xudHlwZSBCdXR0b25SZWYgPSBSZWFjdC5SZWZPYmplY3Q8bnVsbCB8IEhUTUxFbGVtZW50PjtcbnR5cGUgTWVudVJlZiA9IFJlYWN0LlJlZk9iamVjdDxudWxsIHwgSFRNTEVsZW1lbnQ+O1xudHlwZSBQb3BvdmVyUmVmID0gUmVhY3QuUmVmT2JqZWN0PG51bGwgfCBIVE1MRWxlbWVudD47XG5cbmludGVyZmFjZSBJTWVudUNvbnRleHQge1xuICBidXR0b25SZWY6IEJ1dHRvblJlZjtcbiAgZGlzcGF0Y2g6IFJlYWN0LkRpc3BhdGNoPE1lbnVCdXR0b25BY3Rpb24+O1xuICBtZW51SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWVudVJlZjogTWVudVJlZjtcbiAgcG9wb3ZlclJlZjogUG9wb3ZlclJlZjtcbiAgc3RhdGU6IE1lbnVCdXR0b25TdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQXhCQTtBQUNBO0FBNEJBOzs7Ozs7OztBQU9BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUFBO0FBRUE7QUFBQTs7O0FBb0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFHQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBSkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQVpBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBVEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQURBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFuREE7QUE2RUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUdBOzs7Ozs7O0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBSkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBOzs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFWQTtBQWVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQU1BOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7Ozs7QUFJQTtBQUNBO0FBZkE7QUFIQTtBQXFCQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUE3QkE7QUFnQ0E7QUFHQTtBQURBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUE5TUE7QUFDQTtBQXFQQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQVdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUdBOzs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUpBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUFBO0FBQUE7QUFkQTtBQWlCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBTkE7QUFXQTs7Ozs7Ozs7QUFRQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBRkE7QUFNQTtBQWhDQTtBQUNBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBbkRBO0FBcURBO0FBQ0E7QUFDQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBMUlBO0FBb0tBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFHQTs7Ozs7Ozs7Ozs7OztBQVdBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFMQTtBQWJBO0FBZ0NBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUdBOzs7Ozs7Ozs7O0FBUUE7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUpBO0FBc0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFHQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFqQ0E7QUE2REE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUdBOzs7Ozs7O0FBS0E7QUFFQTtBQUFBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBOzs7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFGQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBMURBO0FBNERBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/menu-button/dist/menu-button.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/menu-button/node_modules/@reach/auto-id/dist/auto-id.esm.js": -/*!******************************************************************************************!*\ - !*** ../node_modules/@reach/menu-button/node_modules/@reach/auto-id/dist/auto-id.esm.js ***! - \******************************************************************************************/ -/*! exports provided: useId */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useId\", function() { return useId; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/*\r\n * Welcome to @reach/auto-id!\r\n\n * Let's see if we can make sense of why this hook exists and its\r\n * implementation.\r\n *\r\n * Some background:\r\n * 1. Accessibiliy APIs rely heavily on element IDs\r\n * 2. Requiring developers to put IDs on every element in Reach UI is both\r\n * cumbersome and error-prone\r\n * 3. With a component model, we can generate IDs for them!\r\n *\r\n * Solution 1: Generate random IDs.\r\n *\r\n * This works great as long as you don't server render your app. When React (in\r\n * the client) tries to reuse the markup from the server, the IDs won't match\r\n * and React will then recreate the entire DOM tree.\r\n *\r\n * Solution 2: Increment an integer\r\n *\r\n * This sounds great. Since we're rendering the exact same tree on the server\r\n * and client, we can increment a counter and get a deterministic result between\r\n * client and server. Also, JS integers can go up to nine-quadrillion. I'm\r\n * pretty sure the tab will be closed before an app never needs\r\n * 10 quadrillion IDs!\r\n *\r\n * Problem solved, right?\r\n *\r\n * Ah, but there's a catch! React's concurrent rendering makes this approach\r\n * non-deterministic. While the client and server will end up with the same\r\n * elements in the end, depending on suspense boundaries (and possibly some user\r\n * input during the initial render) the incrementing integers won't always match\r\n * up.\r\n *\r\n * Solution 3: Don't use IDs at all on the server; patch after first render.\r\n *\r\n * What we've done here is solution 2 with some tricks. With this approach, the\r\n * ID returned is an empty string on the first render. This way the server and\r\n * client have the same markup no matter how wild the concurrent rendering may\r\n * have gotten.\r\n *\r\n * After the render, we patch up the components with an incremented ID. This\r\n * causes a double render on any components with `useId`. Shouldn't be a problem\r\n * since the components using this hook should be small, and we're only updating\r\n * the ID attribute on the DOM, nothing big is happening.\r\n *\r\n * It doesn't have to be an incremented number, though--we could do generate\r\n * random strings instead, but incrementing a number is probably the cheapest\r\n * thing we can do.\r\n *\r\n * Additionally, we only do this patchup on the very first client render ever.\r\n * Any calls to `useId` that happen dynamically in the client will be\r\n * populated immediately with a value. So, we only get the double render after\r\n * server hydration and never again, SO BACK OFF ALRIGHT?\r\n */\n\nvar serverHandoffComplete = false;\nvar id = 0;\n\nvar genId = function genId() {\n return ++id;\n};\n/**\r\n * useId\r\n *\r\n * Autogenerate IDs to facilitate WAI-ARIA and server rendering.\r\n *\r\n * Note: The returned ID will initially be `null` and will update after a\r\n * component mounts. Users may need to supply their own ID if they need\r\n * consistent values for SSR.\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/auto-id\r\n */\n\n\nvar useId = function useId(fallback) {\n /*\r\n * If this instance isn't part of the initial render, we don't have to do the\r\n * double render/patch-up dance. We can just generate the ID and return it.\r\n */\n var initialId = fallback || (serverHandoffComplete ? genId() : null);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialId),\n id = _useState[0],\n setId = _useState[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"])(function () {\n if (id === null) {\n /*\r\n * Patch the ID after render. We do this in `useLayoutEffect` to avoid any\r\n * rendering flicker, though it'll make the first render slower (unlikely\r\n * to matter, but you're welcome to measure your app and let us know if\r\n * it's a problem).\r\n */\n setId(genId());\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, []);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (serverHandoffComplete === false) {\n /*\r\n * Flag all future uses of `useId` to skip the update dance. This is in\r\n * `useEffect` because it goes after `useLayoutEffect`, ensuring we don't\r\n * accidentally bail out of the patch-up dance prematurely.\r\n */\n serverHandoffComplete = true;\n }\n }, []);\n return id != null ? String(id) : undefined;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9tZW51LWJ1dHRvbi9ub2RlX21vZHVsZXMvQHJlYWNoL2F1dG8taWQvZGlzdC9hdXRvLWlkLmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogV2VsY29tZSB0byBAcmVhY2gvYXV0by1pZCFcblxuICogTGV0J3Mgc2VlIGlmIHdlIGNhbiBtYWtlIHNlbnNlIG9mIHdoeSB0aGlzIGhvb2sgZXhpc3RzIGFuZCBpdHNcbiAqIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIFNvbWUgYmFja2dyb3VuZDpcbiAqICAgMS4gQWNjZXNzaWJpbGl5IEFQSXMgcmVseSBoZWF2aWx5IG9uIGVsZW1lbnQgSURzXG4gKiAgIDIuIFJlcXVpcmluZyBkZXZlbG9wZXJzIHRvIHB1dCBJRHMgb24gZXZlcnkgZWxlbWVudCBpbiBSZWFjaCBVSSBpcyBib3RoXG4gKiAgICAgIGN1bWJlcnNvbWUgYW5kIGVycm9yLXByb25lXG4gKiAgIDMuIFdpdGggYSBjb21wb25lbnQgbW9kZWwsIHdlIGNhbiBnZW5lcmF0ZSBJRHMgZm9yIHRoZW0hXG4gKlxuICogU29sdXRpb24gMTogR2VuZXJhdGUgcmFuZG9tIElEcy5cbiAqXG4gKiBUaGlzIHdvcmtzIGdyZWF0IGFzIGxvbmcgYXMgeW91IGRvbid0IHNlcnZlciByZW5kZXIgeW91ciBhcHAuIFdoZW4gUmVhY3QgKGluXG4gKiB0aGUgY2xpZW50KSB0cmllcyB0byByZXVzZSB0aGUgbWFya3VwIGZyb20gdGhlIHNlcnZlciwgdGhlIElEcyB3b24ndCBtYXRjaFxuICogYW5kIFJlYWN0IHdpbGwgdGhlbiByZWNyZWF0ZSB0aGUgZW50aXJlIERPTSB0cmVlLlxuICpcbiAqIFNvbHV0aW9uIDI6IEluY3JlbWVudCBhbiBpbnRlZ2VyXG4gKlxuICogVGhpcyBzb3VuZHMgZ3JlYXQuIFNpbmNlIHdlJ3JlIHJlbmRlcmluZyB0aGUgZXhhY3Qgc2FtZSB0cmVlIG9uIHRoZSBzZXJ2ZXJcbiAqIGFuZCBjbGllbnQsIHdlIGNhbiBpbmNyZW1lbnQgYSBjb3VudGVyIGFuZCBnZXQgYSBkZXRlcm1pbmlzdGljIHJlc3VsdCBiZXR3ZWVuXG4gKiBjbGllbnQgYW5kIHNlcnZlci4gQWxzbywgSlMgaW50ZWdlcnMgY2FuIGdvIHVwIHRvIG5pbmUtcXVhZHJpbGxpb24uIEknbVxuICogcHJldHR5IHN1cmUgdGhlIHRhYiB3aWxsIGJlIGNsb3NlZCBiZWZvcmUgYW4gYXBwIG5ldmVyIG5lZWRzXG4gKiAxMCBxdWFkcmlsbGlvbiBJRHMhXG4gKlxuICogUHJvYmxlbSBzb2x2ZWQsIHJpZ2h0P1xuICpcbiAqIEFoLCBidXQgdGhlcmUncyBhIGNhdGNoISBSZWFjdCdzIGNvbmN1cnJlbnQgcmVuZGVyaW5nIG1ha2VzIHRoaXMgYXBwcm9hY2hcbiAqIG5vbi1kZXRlcm1pbmlzdGljLiBXaGlsZSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgd2lsbCBlbmQgdXAgd2l0aCB0aGUgc2FtZVxuICogZWxlbWVudHMgaW4gdGhlIGVuZCwgZGVwZW5kaW5nIG9uIHN1c3BlbnNlIGJvdW5kYXJpZXMgKGFuZCBwb3NzaWJseSBzb21lIHVzZXJcbiAqIGlucHV0IGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIpIHRoZSBpbmNyZW1lbnRpbmcgaW50ZWdlcnMgd29uJ3QgYWx3YXlzIG1hdGNoXG4gKiB1cC5cbiAqXG4gKiBTb2x1dGlvbiAzOiBEb24ndCB1c2UgSURzIGF0IGFsbCBvbiB0aGUgc2VydmVyOyBwYXRjaCBhZnRlciBmaXJzdCByZW5kZXIuXG4gKlxuICogV2hhdCB3ZSd2ZSBkb25lIGhlcmUgaXMgc29sdXRpb24gMiB3aXRoIHNvbWUgdHJpY2tzLiBXaXRoIHRoaXMgYXBwcm9hY2gsIHRoZVxuICogSUQgcmV0dXJuZWQgaXMgYW4gZW1wdHkgc3RyaW5nIG9uIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgd2F5IHRoZSBzZXJ2ZXIgYW5kXG4gKiBjbGllbnQgaGF2ZSB0aGUgc2FtZSBtYXJrdXAgbm8gbWF0dGVyIGhvdyB3aWxkIHRoZSBjb25jdXJyZW50IHJlbmRlcmluZyBtYXlcbiAqIGhhdmUgZ290dGVuLlxuICpcbiAqIEFmdGVyIHRoZSByZW5kZXIsIHdlIHBhdGNoIHVwIHRoZSBjb21wb25lbnRzIHdpdGggYW4gaW5jcmVtZW50ZWQgSUQuIFRoaXNcbiAqIGNhdXNlcyBhIGRvdWJsZSByZW5kZXIgb24gYW55IGNvbXBvbmVudHMgd2l0aCBgdXNlSWRgLiBTaG91bGRuJ3QgYmUgYSBwcm9ibGVtXG4gKiBzaW5jZSB0aGUgY29tcG9uZW50cyB1c2luZyB0aGlzIGhvb2sgc2hvdWxkIGJlIHNtYWxsLCBhbmQgd2UncmUgb25seSB1cGRhdGluZ1xuICogdGhlIElEIGF0dHJpYnV0ZSBvbiB0aGUgRE9NLCBub3RoaW5nIGJpZyBpcyBoYXBwZW5pbmcuXG4gKlxuICogSXQgZG9lc24ndCBoYXZlIHRvIGJlIGFuIGluY3JlbWVudGVkIG51bWJlciwgdGhvdWdoLS13ZSBjb3VsZCBkbyBnZW5lcmF0ZVxuICogcmFuZG9tIHN0cmluZ3MgaW5zdGVhZCwgYnV0IGluY3JlbWVudGluZyBhIG51bWJlciBpcyBwcm9iYWJseSB0aGUgY2hlYXBlc3RcbiAqIHRoaW5nIHdlIGNhbiBkby5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHdlIG9ubHkgZG8gdGhpcyBwYXRjaHVwIG9uIHRoZSB2ZXJ5IGZpcnN0IGNsaWVudCByZW5kZXIgZXZlci5cbiAqIEFueSBjYWxscyB0byBgdXNlSWRgIHRoYXQgaGFwcGVuIGR5bmFtaWNhbGx5IGluIHRoZSBjbGllbnQgd2lsbCBiZVxuICogcG9wdWxhdGVkIGltbWVkaWF0ZWx5IHdpdGggYSB2YWx1ZS4gU28sIHdlIG9ubHkgZ2V0IHRoZSBkb3VibGUgcmVuZGVyIGFmdGVyXG4gKiBzZXJ2ZXIgaHlkcmF0aW9uIGFuZCBuZXZlciBhZ2FpbiwgU08gQkFDSyBPRkYgQUxSSUdIVD9cbiAqL1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcblxubGV0IHNlcnZlckhhbmRvZmZDb21wbGV0ZSA9IGZhbHNlO1xubGV0IGlkID0gMDtcbmNvbnN0IGdlbklkID0gKCkgPT4gKytpZDtcblxuLyoqXG4gKiB1c2VJZFxuICpcbiAqIEF1dG9nZW5lcmF0ZSBJRHMgdG8gZmFjaWxpdGF0ZSBXQUktQVJJQSBhbmQgc2VydmVyIHJlbmRlcmluZy5cbiAqXG4gKiBOb3RlOiBUaGUgcmV0dXJuZWQgSUQgd2lsbCBpbml0aWFsbHkgYmUgYG51bGxgIGFuZCB3aWxsIHVwZGF0ZSBhZnRlciBhXG4gKiBjb21wb25lbnQgbW91bnRzLiBVc2VycyBtYXkgbmVlZCB0byBzdXBwbHkgdGhlaXIgb3duIElEIGlmIHRoZXkgbmVlZFxuICogY29uc2lzdGVudCB2YWx1ZXMgZm9yIFNTUi5cbiAqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9hdXRvLWlkXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VJZCA9IChmYWxsYmFjaz86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgLypcbiAgICogSWYgdGhpcyBpbnN0YW5jZSBpc24ndCBwYXJ0IG9mIHRoZSBpbml0aWFsIHJlbmRlciwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGVcbiAgICogZG91YmxlIHJlbmRlci9wYXRjaC11cCBkYW5jZS4gV2UgY2FuIGp1c3QgZ2VuZXJhdGUgdGhlIElEIGFuZCByZXR1cm4gaXQuXG4gICAqL1xuICBjb25zdCBpbml0aWFsSWQgPSBmYWxsYmFjayB8fCAoc2VydmVySGFuZG9mZkNvbXBsZXRlID8gZ2VuSWQoKSA6IG51bGwpO1xuXG4gIGNvbnN0IFtpZCwgc2V0SWRdID0gdXNlU3RhdGUoaW5pdGlhbElkKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZCA9PT0gbnVsbCkge1xuICAgICAgLypcbiAgICAgICAqIFBhdGNoIHRoZSBJRCBhZnRlciByZW5kZXIuIFdlIGRvIHRoaXMgaW4gYHVzZUxheW91dEVmZmVjdGAgdG8gYXZvaWQgYW55XG4gICAgICAgKiByZW5kZXJpbmcgZmxpY2tlciwgdGhvdWdoIGl0J2xsIG1ha2UgdGhlIGZpcnN0IHJlbmRlciBzbG93ZXIgKHVubGlrZWx5XG4gICAgICAgKiB0byBtYXR0ZXIsIGJ1dCB5b3UncmUgd2VsY29tZSB0byBtZWFzdXJlIHlvdXIgYXBwIGFuZCBsZXQgdXMga25vdyBpZlxuICAgICAgICogaXQncyBhIHByb2JsZW0pLlxuICAgICAgICovXG4gICAgICBzZXRJZChnZW5JZCgpKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VydmVySGFuZG9mZkNvbXBsZXRlID09PSBmYWxzZSkge1xuICAgICAgLypcbiAgICAgICAqIEZsYWcgYWxsIGZ1dHVyZSB1c2VzIG9mIGB1c2VJZGAgdG8gc2tpcCB0aGUgdXBkYXRlIGRhbmNlLiBUaGlzIGlzIGluXG4gICAgICAgKiBgdXNlRWZmZWN0YCBiZWNhdXNlIGl0IGdvZXMgYWZ0ZXIgYHVzZUxheW91dEVmZmVjdGAsIGVuc3VyaW5nIHdlIGRvbid0XG4gICAgICAgKiBhY2NpZGVudGFsbHkgYmFpbCBvdXQgb2YgdGhlIHBhdGNoLXVwIGRhbmNlIHByZW1hdHVyZWx5LlxuICAgICAgICovXG4gICAgICBzZXJ2ZXJIYW5kb2ZmQ29tcGxldGUgPSB0cnVlO1xuICAgIH1cbiAgfSwgW10pO1xuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBUkE7QUFDQTtBQURBO0FBYUE7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFSQTtBQVVBOzs7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/menu-button/node_modules/@reach/auto-id/dist/auto-id.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/observe-rect/dist/observe-rect.esm.js": -/*!********************************************************************!*\ - !*** ../node_modules/@reach/observe-rect/dist/observe-rect.esm.js ***! - \********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar props = ['bottom', 'height', 'left', 'right', 'top', 'width'];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n observedNodes.forEach(function (state) {\n if (state.hasRectChanged) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n state.hasRectChanged = false;\n }\n });\n window.setTimeout(function () {\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.hasRectChanged = true;\n state.rect = newRect;\n }\n });\n }, 0);\n rafId = window.requestAnimationFrame(run);\n};\n\nvar index = function index(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9vYnNlcnZlLXJlY3QvZGlzdC9vYnNlcnZlLXJlY3QuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50cz82ZjM3Il0sInNvdXJjZXNDb250ZW50IjpbImxldCBwcm9wczogKGtleW9mIERPTVJlY3QpW10gPSBbXG4gICdib3R0b20nLFxuICAnaGVpZ2h0JyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ3dpZHRoJ1xuXTtcblxubGV0IHJlY3RDaGFuZ2VkID0gKGE6IERPTVJlY3QgPSB7fSBhcyBET01SZWN0LCBiOiBET01SZWN0ID0ge30gYXMgRE9NUmVjdCkgPT5cbiAgcHJvcHMuc29tZShwcm9wID0+IGFbcHJvcF0gIT09IGJbcHJvcF0pO1xuXG5sZXQgb2JzZXJ2ZWROb2RlcyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIFJlY3RQcm9wcz4oKTtcbmxldCByYWZJZDogbnVtYmVyO1xuXG5sZXQgcnVuID0gKCkgPT4ge1xuICBvYnNlcnZlZE5vZGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgIGlmIChzdGF0ZS5oYXNSZWN0Q2hhbmdlZCkge1xuICAgICAgc3RhdGUuY2FsbGJhY2tzLmZvckVhY2goY2IgPT4gY2Ioc3RhdGUucmVjdCkpO1xuICAgICAgc3RhdGUuaGFzUmVjdENoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICBvYnNlcnZlZE5vZGVzLmZvckVhY2goKHN0YXRlLCBub2RlKSA9PiB7XG4gICAgICBsZXQgbmV3UmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocmVjdENoYW5nZWQobmV3UmVjdCwgc3RhdGUucmVjdCkpIHtcbiAgICAgICAgc3RhdGUuaGFzUmVjdENoYW5nZWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yZWN0ID0gbmV3UmVjdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgMCk7XG5cbiAgcmFmSWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJ1bik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAobm9kZTogSFRNTEVsZW1lbnQsIGNiOiBGdW5jdGlvbikgPT4ge1xuICByZXR1cm4ge1xuICAgIG9ic2VydmUoKSB7XG4gICAgICBsZXQgd2FzRW1wdHkgPSBvYnNlcnZlZE5vZGVzLnNpemUgPT09IDA7XG4gICAgICBpZiAob2JzZXJ2ZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgb2JzZXJ2ZWROb2Rlcy5nZXQobm9kZSkhLmNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ic2VydmVkTm9kZXMuc2V0KG5vZGUsIHtcbiAgICAgICAgICByZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgaGFzUmVjdENoYW5nZWQ6IGZhbHNlLFxuICAgICAgICAgIGNhbGxiYWNrczogW2NiXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh3YXNFbXB0eSkgcnVuKCk7XG4gICAgfSxcblxuICAgIHVub2JzZXJ2ZSgpIHtcbiAgICAgIGxldCBzdGF0ZSA9IG9ic2VydmVkTm9kZXMuZ2V0KG5vZGUpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgY2FsbGJhY2tcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5jYWxsYmFja3MuaW5kZXhPZihjYik7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSBzdGF0ZS5jYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIG5vZGUgcmVmZXJlbmNlXG4gICAgICAgIGlmICghc3RhdGUuY2FsbGJhY2tzLmxlbmd0aCkgb2JzZXJ2ZWROb2Rlcy5kZWxldGUobm9kZSk7XG5cbiAgICAgICAgLy8gU3RvcCB0aGUgbG9vcFxuICAgICAgICBpZiAoIW9ic2VydmVkTm9kZXMuc2l6ZSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxSZWN0ID0gUGFydGlhbDxET01SZWN0PjtcblxuZXhwb3J0IHR5cGUgUmVjdFByb3BzID0ge1xuICByZWN0OiBET01SZWN0IHwgdW5kZWZpbmVkO1xuICBoYXNSZWN0Q2hhbmdlZDogYm9vbGVhbjtcbiAgY2FsbGJhY2tzOiBGdW5jdGlvbltdO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUFBOzs7QUFBQTtBQUFBOzs7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBREE7QUFVQTtBQWxCQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBWkE7QUFlQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTVCQTtBQURBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@reach/observe-rect/dist/observe-rect.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/popover/dist/popover.esm.js": -/*!**********************************************************!*\ - !*** ../node_modules/@reach/popover/dist/popover.esm.js ***! - \**********************************************************/ -/*! exports provided: default, positionDefault, positionMatchWidth */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"positionDefault\", function() { return positionDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"positionMatchWidth\", function() { return positionMatchWidth; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _reach_portal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @reach/portal */ \"../node_modules/@reach/portal/dist/portal.esm.js\");\n/* harmony import */ var _reach_rect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @reach/rect */ \"../node_modules/@reach/popover/node_modules/@reach/rect/dist/rect.esm.js\");\n/* harmony import */ var _reach_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reach/utils */ \"../node_modules/@reach/utils/dist/utils.esm.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tabbable */ \"../node_modules/tabbable/index.js\");\n/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tabbable__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n/**\r\n * Popover\r\n */\n\n\nvar Popover = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function Popover(props, ref) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_portal__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(PopoverImpl, Object.assign({\n ref: ref\n }, props)));\n});\nPopover.displayName = \"Popover\";\n/**\r\n * PopoverImpl\r\n *\r\n * Popover is conditionally rendered so we can't start measuring until it shows\r\n * up, so useRect needs to live down here not up in Popover\r\n */\n\nvar PopoverImpl = /*#__PURE__*/Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function PopoverImpl(_ref, forwardedRef) {\n var targetRef = _ref.targetRef,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? positionDefault : _ref$position,\n style = _ref.style,\n rest = _objectWithoutPropertiesLoose(_ref, [\"targetRef\", \"position\", \"style\"]);\n\n var popoverRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var popoverRect = Object(_reach_rect__WEBPACK_IMPORTED_MODULE_2__[\"useRect\"])(popoverRef);\n var targetRect = Object(_reach_rect__WEBPACK_IMPORTED_MODULE_2__[\"useRect\"])(targetRef);\n var ref = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_3__[\"useForkedRef\"])(popoverRef, forwardedRef);\n useSimulateTabNavigationForReactTree(targetRef, popoverRef);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", Object.assign({\n \"data-reach-popover\": \"\",\n ref: ref,\n style: _extends({}, style, {\n position: \"absolute\"\n }, getStyles(position, targetRect, popoverRect))\n }, rest));\n});\nPopoverImpl.displayName = \"PopoverImpl\"; ////////////////////////////////////////////////////////////////////////////////\n\nfunction getStyles(position, targetRect, popoverRect) {\n var needToMeasurePopup = !popoverRect;\n\n if (needToMeasurePopup) {\n return {\n visibility: \"hidden\"\n };\n }\n\n return position(targetRect, popoverRect);\n}\n\nvar positionDefault = function positionDefault(targetRect, popoverRect) {\n if (!targetRect || !popoverRect) {\n return {};\n }\n\n var _getCollisions = getCollisions(targetRect, popoverRect),\n directionUp = _getCollisions.directionUp,\n directionRight = _getCollisions.directionRight;\n\n return {\n left: directionRight ? targetRect.right - popoverRect.width + window.pageXOffset + \"px\" : targetRect.left + window.pageXOffset + \"px\",\n top: directionUp ? targetRect.top - popoverRect.height + window.pageYOffset + \"px\" : targetRect.top + targetRect.height + window.pageYOffset + \"px\"\n };\n};\n\nvar positionMatchWidth = function positionMatchWidth(targetRect, popoverRect) {\n if (!targetRect || !popoverRect) {\n return {};\n }\n\n var _getCollisions2 = getCollisions(targetRect, popoverRect),\n directionUp = _getCollisions2.directionUp;\n\n return {\n width: targetRect.width,\n left: targetRect.left,\n top: directionUp ? targetRect.top - popoverRect.height + window.pageYOffset + \"px\" : targetRect.top + targetRect.height + window.pageYOffset + \"px\"\n };\n}; // Finish this another time\n// export function positionHorizontalCenter(targetRect, popoverRect) {\n// const targetCenter = targetRect.width / 2 + targetRect.left;\n// const popoverHalf = popoverRect.width / 2;\n// const collisions = {\n// right: window.innerWidth < targetCenter - popoverHalf,\n// left: targetCenter - popoverHalf < 0\n// // top:\n// // bottom:\n// };\n// return {\n// left: collisions.right\n// ? `${targetRect.right - popoverRect.width + window.pageXOffset}px`\n// : collisions.left ? `` : ``\n// };\n// }\n\n\nfunction getCollisions(targetRect, popoverRect, offsetLeft, offsetBottom) {\n if (offsetLeft === void 0) {\n offsetLeft = 0;\n }\n\n if (offsetBottom === void 0) {\n offsetBottom = 0;\n }\n\n var collisions = {\n top: targetRect.top - popoverRect.height < 0,\n right: window.innerWidth < targetRect.left + popoverRect.width - offsetLeft,\n bottom: window.innerHeight < targetRect.bottom + popoverRect.height - offsetBottom,\n left: targetRect.left - popoverRect.width < 0\n };\n var directionRight = collisions.right && !collisions.left;\n var directionUp = collisions.bottom && !collisions.top;\n return {\n directionRight: directionRight,\n directionUp: directionUp\n };\n} // Heads up, my jQuery past haunts this function. This hook scopes the tab\n// order to the React element tree, instead of the DOM tree. This way, when the\n// user navigates with tab from the targetRef, the tab order moves into the\n// popup, and then out of the popup back to the rest of the document.\n// (We call targetRef, triggerRef inside this function to avoid confusion with\n// event.target)\n\n\nfunction useSimulateTabNavigationForReactTree(triggerRef, popoverRef) {\n var doc = triggerRef.current && triggerRef.current.ownerDocument; // maybe in devtools\n\n function handleKeyDown(event) {\n if (event.key === \"Tab\" && popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current).length === 0) {\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n if (shiftTabbedFromElementAfterTrigger(event)) {\n focusLastTabbableInPopover(event);\n } else if (shiftTabbedOutOfPopover(event)) {\n focusTriggerRef(event);\n } else if (shiftTabbedToBrowserChrome(event)) {\n disableTabbablesInPopover();\n }\n } else if (event.key === \"Tab\") {\n if (tabbedFromTriggerToPopover()) {\n focusFirstPopoverTabbable(event);\n } else if (tabbedOutOfPopover()) {\n focusTabbableAfterTrigger(event);\n } else if (tabbedToBrowserChrome(event)) {\n disableTabbablesInPopover();\n }\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n doc && doc.addEventListener(\"keydown\", handleKeyDown);\n return function () {\n doc && doc.removeEventListener(\"keydown\", handleKeyDown);\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function getElementAfterTrigger() {\n var elements = doc && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(doc);\n var targetIndex = elements && triggerRef.current ? elements.indexOf(triggerRef.current) : -1;\n return elements && elements[targetIndex + 1];\n }\n\n function tabbedFromTriggerToPopover() {\n return triggerRef.current === document.activeElement;\n }\n\n function focusFirstPopoverTabbable(event) {\n var elements = popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current);\n\n if (elements && elements[0]) {\n event.preventDefault();\n elements[0].focus();\n }\n }\n\n function tabbedOutOfPopover() {\n var _popoverRef$current;\n\n var inPopover = popoverRef === null || popoverRef === void 0 ? void 0 : (_popoverRef$current = popoverRef.current) === null || _popoverRef$current === void 0 ? void 0 : _popoverRef$current.contains(document.activeElement);\n\n if (inPopover) {\n var elements = popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current);\n return Boolean(elements && elements[elements.length - 1] === document.activeElement);\n }\n\n return false;\n }\n\n function focusTabbableAfterTrigger(event) {\n var elementAfterTrigger = getElementAfterTrigger();\n\n if (elementAfterTrigger) {\n event.preventDefault();\n elementAfterTrigger.focus();\n }\n }\n\n function shiftTabbedFromElementAfterTrigger(event) {\n if (!event.shiftKey) return;\n var elementAfterTrigger = getElementAfterTrigger();\n return event.target === elementAfterTrigger;\n }\n\n function focusLastTabbableInPopover(event) {\n var elements = popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current);\n var last = elements && elements[elements.length - 1];\n\n if (last) {\n event.preventDefault();\n last.focus();\n }\n }\n\n function shiftTabbedOutOfPopover(event) {\n var elements = popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current);\n\n if (elements) {\n return elements.length === 0 ? false : event.target === elements[0];\n }\n\n return false;\n }\n\n function focusTriggerRef(event) {\n var _triggerRef$current;\n\n event.preventDefault();\n (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.focus();\n }\n\n function tabbedToBrowserChrome(event) {\n var elements = doc && popoverRef.current ? tabbable__WEBPACK_IMPORTED_MODULE_4___default()(doc).filter(function (element) {\n return !popoverRef.current.contains(element);\n }) : null;\n return elements ? event.target === elements[elements.length - 1] : false;\n }\n\n function shiftTabbedToBrowserChrome(event) {\n // we're assuming the popover will never contain the first tabbable\n // element, and it better not, because the trigger needs to be tabbable!\n return doc ? event.target === tabbable__WEBPACK_IMPORTED_MODULE_4___default()(doc)[0] : false;\n }\n\n var restoreTabIndexTuplés = [];\n\n function disableTabbablesInPopover() {\n var elements = popoverRef.current && tabbable__WEBPACK_IMPORTED_MODULE_4___default()(popoverRef.current);\n\n if (elements && doc) {\n elements.forEach(function (element) {\n restoreTabIndexTuplés.push([element, element.tabIndex]);\n element.tabIndex = -1;\n });\n doc.addEventListener(\"focusin\", enableTabbablesInPopover);\n }\n }\n\n function enableTabbablesInPopover() {\n if (doc) {\n doc.removeEventListener(\"focusin\", enableTabbablesInPopover);\n restoreTabIndexTuplés.forEach(function (_ref2) {\n var element = _ref2[0],\n tabIndex = _ref2[1];\n element.tabIndex = tabIndex;\n });\n }\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popover);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9wb3BvdmVyL2Rpc3QvcG9wb3Zlci5lc20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luZGV4LnRzeD9kZWI3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2VsY29tZSB0byBAcmVhY2gvcG9wb3ZlciFcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCBmb3J3YXJkUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQb3J0YWwgZnJvbSBcIkByZWFjaC9wb3J0YWxcIjtcbmltcG9ydCB7IHVzZVJlY3QsIFBSZWN0IH0gZnJvbSBcIkByZWFjaC9yZWN0XCI7XG5pbXBvcnQgeyB1c2VGb3JrZWRSZWYgfSBmcm9tIFwiQHJlYWNoL3V0aWxzXCI7XG5pbXBvcnQgdGFiYmFibGUgZnJvbSBcInRhYmJhYmxlXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUG9wb3ZlclxuICovXG5jb25zdCBQb3BvdmVyID0gZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgUG9wb3ZlclByb3BzPihmdW5jdGlvbiBQb3BvdmVyKFxuICBwcm9wcyxcbiAgcmVmXG4pIHtcbiAgcmV0dXJuIChcbiAgICA8UG9ydGFsPlxuICAgICAgPFBvcG92ZXJJbXBsIHJlZj17cmVmfSB7Li4ucHJvcHN9IC8+XG4gICAgPC9Qb3J0YWw+XG4gICk7XG59KTtcblxuZXhwb3J0IHR5cGUgUG9wb3ZlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB0YXJnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG59ICYgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+O1xuXG5Qb3BvdmVyLmRpc3BsYXlOYW1lID0gXCJQb3BvdmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUG9wb3ZlckltcGxcbiAqXG4gKiBQb3BvdmVyIGlzIGNvbmRpdGlvbmFsbHkgcmVuZGVyZWQgc28gd2UgY2FuJ3Qgc3RhcnQgbWVhc3VyaW5nIHVudGlsIGl0IHNob3dzXG4gKiB1cCwgc28gdXNlUmVjdCBuZWVkcyB0byBsaXZlIGRvd24gaGVyZSBub3QgdXAgaW4gUG9wb3ZlclxuICovXG5jb25zdCBQb3BvdmVySW1wbCA9IGZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIFBvcG92ZXJQcm9wcz4oXG4gIGZ1bmN0aW9uIFBvcG92ZXJJbXBsKFxuICAgIHsgdGFyZ2V0UmVmLCBwb3NpdGlvbiA9IHBvc2l0aW9uRGVmYXVsdCwgc3R5bGUsIC4uLnJlc3QgfSxcbiAgICBmb3J3YXJkZWRSZWZcbiAgKSB7XG4gICAgY29uc3QgcG9wb3ZlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gICAgY29uc3QgcG9wb3ZlclJlY3QgPSB1c2VSZWN0KHBvcG92ZXJSZWYpO1xuICAgIGNvbnN0IHRhcmdldFJlY3QgPSB1c2VSZWN0KHRhcmdldFJlZik7XG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKHBvcG92ZXJSZWYsIGZvcndhcmRlZFJlZik7XG5cbiAgICB1c2VTaW11bGF0ZVRhYk5hdmlnYXRpb25Gb3JSZWFjdFRyZWUodGFyZ2V0UmVmLCBwb3BvdmVyUmVmKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtcmVhY2gtcG9wb3Zlcj1cIlwiXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgLi4uZ2V0U3R5bGVzKHBvc2l0aW9uLCB0YXJnZXRSZWN0LCBwb3BvdmVyUmVjdClcbiAgICAgICAgfX1cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbik7XG5cblBvcG92ZXJJbXBsLmRpc3BsYXlOYW1lID0gXCJQb3BvdmVySW1wbFwiO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRTdHlsZXMoXG4gIHBvc2l0aW9uOiBQb3NpdGlvbixcbiAgdGFyZ2V0UmVjdDogUFJlY3QgfCBudWxsLFxuICBwb3BvdmVyUmVjdDogUFJlY3QgfCBudWxsXG4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHtcbiAgY29uc3QgbmVlZFRvTWVhc3VyZVBvcHVwID0gIXBvcG92ZXJSZWN0O1xuICBpZiAobmVlZFRvTWVhc3VyZVBvcHVwKSB7XG4gICAgcmV0dXJuIHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9O1xuICB9XG4gIHJldHVybiBwb3NpdGlvbih0YXJnZXRSZWN0LCBwb3BvdmVyUmVjdCk7XG59XG5cbmV4cG9ydCBjb25zdCBwb3NpdGlvbkRlZmF1bHQ6IFBvc2l0aW9uID0gKHRhcmdldFJlY3QsIHBvcG92ZXJSZWN0KSA9PiB7XG4gIGlmICghdGFyZ2V0UmVjdCB8fCAhcG9wb3ZlclJlY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7IGRpcmVjdGlvblVwLCBkaXJlY3Rpb25SaWdodCB9ID0gZ2V0Q29sbGlzaW9ucyhcbiAgICB0YXJnZXRSZWN0LFxuICAgIHBvcG92ZXJSZWN0XG4gICk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZGlyZWN0aW9uUmlnaHRcbiAgICAgID8gYCR7dGFyZ2V0UmVjdC5yaWdodCAtIHBvcG92ZXJSZWN0LndpZHRoICsgd2luZG93LnBhZ2VYT2Zmc2V0fXB4YFxuICAgICAgOiBgJHt0YXJnZXRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXR9cHhgLFxuICAgIHRvcDogZGlyZWN0aW9uVXBcbiAgICAgID8gYCR7dGFyZ2V0UmVjdC50b3AgLSBwb3BvdmVyUmVjdC5oZWlnaHQgKyB3aW5kb3cucGFnZVlPZmZzZXR9cHhgXG4gICAgICA6IGAke3RhcmdldFJlY3QudG9wICsgdGFyZ2V0UmVjdC5oZWlnaHQgKyB3aW5kb3cucGFnZVlPZmZzZXR9cHhgXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcG9zaXRpb25NYXRjaFdpZHRoOiBQb3NpdGlvbiA9ICh0YXJnZXRSZWN0LCBwb3BvdmVyUmVjdCkgPT4ge1xuICBpZiAoIXRhcmdldFJlY3QgfHwgIXBvcG92ZXJSZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgeyBkaXJlY3Rpb25VcCB9ID0gZ2V0Q29sbGlzaW9ucyh0YXJnZXRSZWN0LCBwb3BvdmVyUmVjdCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHRhcmdldFJlY3Qud2lkdGgsXG4gICAgbGVmdDogdGFyZ2V0UmVjdC5sZWZ0LFxuICAgIHRvcDogZGlyZWN0aW9uVXBcbiAgICAgID8gYCR7dGFyZ2V0UmVjdC50b3AgLSBwb3BvdmVyUmVjdC5oZWlnaHQgKyB3aW5kb3cucGFnZVlPZmZzZXR9cHhgXG4gICAgICA6IGAke3RhcmdldFJlY3QudG9wICsgdGFyZ2V0UmVjdC5oZWlnaHQgKyB3aW5kb3cucGFnZVlPZmZzZXR9cHhgXG4gIH07XG59O1xuXG4vLyBGaW5pc2ggdGhpcyBhbm90aGVyIHRpbWVcbi8vIGV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkhvcml6b250YWxDZW50ZXIodGFyZ2V0UmVjdCwgcG9wb3ZlclJlY3QpIHtcbi8vICAgY29uc3QgdGFyZ2V0Q2VudGVyID0gdGFyZ2V0UmVjdC53aWR0aCAvIDIgKyB0YXJnZXRSZWN0LmxlZnQ7XG4vLyAgIGNvbnN0IHBvcG92ZXJIYWxmID0gcG9wb3ZlclJlY3Qud2lkdGggLyAyO1xuXG4vLyAgIGNvbnN0IGNvbGxpc2lvbnMgPSB7XG4vLyAgICAgcmlnaHQ6IHdpbmRvdy5pbm5lcldpZHRoIDwgdGFyZ2V0Q2VudGVyIC0gcG9wb3ZlckhhbGYsXG4vLyAgICAgbGVmdDogdGFyZ2V0Q2VudGVyIC0gcG9wb3ZlckhhbGYgPCAwXG4vLyAgICAgLy8gdG9wOlxuLy8gICAgIC8vIGJvdHRvbTpcbi8vICAgfTtcblxuLy8gICByZXR1cm4ge1xuLy8gICAgIGxlZnQ6IGNvbGxpc2lvbnMucmlnaHRcbi8vICAgICAgID8gYCR7dGFyZ2V0UmVjdC5yaWdodCAtIHBvcG92ZXJSZWN0LndpZHRoICsgd2luZG93LnBhZ2VYT2Zmc2V0fXB4YFxuLy8gICAgICAgOiBjb2xsaXNpb25zLmxlZnQgPyBgYCA6IGBgXG4vLyAgIH07XG4vLyB9XG5cbmZ1bmN0aW9uIGdldENvbGxpc2lvbnMoXG4gIHRhcmdldFJlY3Q6IFBSZWN0LFxuICBwb3BvdmVyUmVjdDogUFJlY3QsXG4gIG9mZnNldExlZnQ6IG51bWJlciA9IDAsXG4gIG9mZnNldEJvdHRvbTogbnVtYmVyID0gMFxuKSB7XG4gIGNvbnN0IGNvbGxpc2lvbnMgPSB7XG4gICAgdG9wOiB0YXJnZXRSZWN0LnRvcCAtIHBvcG92ZXJSZWN0LmhlaWdodCA8IDAsXG4gICAgcmlnaHQ6IHdpbmRvdy5pbm5lcldpZHRoIDwgdGFyZ2V0UmVjdC5sZWZ0ICsgcG9wb3ZlclJlY3Qud2lkdGggLSBvZmZzZXRMZWZ0LFxuICAgIGJvdHRvbTpcbiAgICAgIHdpbmRvdy5pbm5lckhlaWdodCA8XG4gICAgICB0YXJnZXRSZWN0LmJvdHRvbSArIHBvcG92ZXJSZWN0LmhlaWdodCAtIG9mZnNldEJvdHRvbSxcbiAgICBsZWZ0OiB0YXJnZXRSZWN0LmxlZnQgLSBwb3BvdmVyUmVjdC53aWR0aCA8IDBcbiAgfTtcblxuICBjb25zdCBkaXJlY3Rpb25SaWdodCA9IGNvbGxpc2lvbnMucmlnaHQgJiYgIWNvbGxpc2lvbnMubGVmdDtcbiAgY29uc3QgZGlyZWN0aW9uVXAgPSBjb2xsaXNpb25zLmJvdHRvbSAmJiAhY29sbGlzaW9ucy50b3A7XG5cbiAgcmV0dXJuIHsgZGlyZWN0aW9uUmlnaHQsIGRpcmVjdGlvblVwIH07XG59XG5cbi8vIEhlYWRzIHVwLCBteSBqUXVlcnkgcGFzdCBoYXVudHMgdGhpcyBmdW5jdGlvbi4gVGhpcyBob29rIHNjb3BlcyB0aGUgdGFiXG4vLyBvcmRlciB0byB0aGUgUmVhY3QgZWxlbWVudCB0cmVlLCBpbnN0ZWFkIG9mIHRoZSBET00gdHJlZS4gVGhpcyB3YXksIHdoZW4gdGhlXG4vLyB1c2VyIG5hdmlnYXRlcyB3aXRoIHRhYiBmcm9tIHRoZSB0YXJnZXRSZWYsIHRoZSB0YWIgb3JkZXIgbW92ZXMgaW50byB0aGVcbi8vIHBvcHVwLCBhbmQgdGhlbiBvdXQgb2YgdGhlIHBvcHVwIGJhY2sgdG8gdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50LlxuLy8gKFdlIGNhbGwgdGFyZ2V0UmVmLCB0cmlnZ2VyUmVmIGluc2lkZSB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoXG4vLyBldmVudC50YXJnZXQpXG5mdW5jdGlvbiB1c2VTaW11bGF0ZVRhYk5hdmlnYXRpb25Gb3JSZWFjdFRyZWU8XG4gIFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50LFxuICBQIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudFxuPih0cmlnZ2VyUmVmOiBSZWFjdC5SZWZPYmplY3Q8VD4sIHBvcG92ZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxQPikge1xuICBjb25zdCBkb2MgPSB0cmlnZ2VyUmVmLmN1cnJlbnQgJiYgdHJpZ2dlclJlZi5jdXJyZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG1heWJlIGluIGRldnRvb2xzXG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJlxuICAgICAgcG9wb3ZlclJlZi5jdXJyZW50ICYmXG4gICAgICB0YWJiYWJsZShwb3BvdmVyUmVmLmN1cnJlbnQpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGlmIChzaGlmdFRhYmJlZEZyb21FbGVtZW50QWZ0ZXJUcmlnZ2VyKGV2ZW50KSkge1xuICAgICAgICBmb2N1c0xhc3RUYWJiYWJsZUluUG9wb3ZlcihldmVudCk7XG4gICAgICB9IGVsc2UgaWYgKHNoaWZ0VGFiYmVkT3V0T2ZQb3BvdmVyKGV2ZW50KSkge1xuICAgICAgICBmb2N1c1RyaWdnZXJSZWYoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChzaGlmdFRhYmJlZFRvQnJvd3NlckNocm9tZShldmVudCkpIHtcbiAgICAgICAgZGlzYWJsZVRhYmJhYmxlc0luUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIlRhYlwiKSB7XG4gICAgICBpZiAodGFiYmVkRnJvbVRyaWdnZXJUb1BvcG92ZXIoKSkge1xuICAgICAgICBmb2N1c0ZpcnN0UG9wb3ZlclRhYmJhYmxlKGV2ZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGFiYmVkT3V0T2ZQb3BvdmVyKCkpIHtcbiAgICAgICAgZm9jdXNUYWJiYWJsZUFmdGVyVHJpZ2dlcihldmVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRhYmJlZFRvQnJvd3NlckNocm9tZShldmVudCkpIHtcbiAgICAgICAgZGlzYWJsZVRhYmJhYmxlc0luUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZG9jICYmIGRvYy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jICYmIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIGZ1bmN0aW9uIGdldEVsZW1lbnRBZnRlclRyaWdnZXIoKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2MgJiYgdGFiYmFibGUoZG9jKTtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9XG4gICAgICBlbGVtZW50cyAmJiB0cmlnZ2VyUmVmLmN1cnJlbnRcbiAgICAgICAgPyBlbGVtZW50cy5pbmRleE9mKHRyaWdnZXJSZWYuY3VycmVudClcbiAgICAgICAgOiAtMTtcbiAgICByZXR1cm4gZWxlbWVudHMgJiYgZWxlbWVudHNbdGFyZ2V0SW5kZXggKyAxXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhYmJlZEZyb21UcmlnZ2VyVG9Qb3BvdmVyKCkge1xuICAgIHJldHVybiB0cmlnZ2VyUmVmLmN1cnJlbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb2N1c0ZpcnN0UG9wb3ZlclRhYmJhYmxlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBwb3BvdmVyUmVmLmN1cnJlbnQgJiYgdGFiYmFibGUocG9wb3ZlclJlZi5jdXJyZW50KTtcbiAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHNbMF0pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRhYmJlZE91dE9mUG9wb3ZlcigpIHtcbiAgICBjb25zdCBpblBvcG92ZXIgPSBwb3BvdmVyUmVmPy5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICBpZiAoaW5Qb3BvdmVyKSB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IHBvcG92ZXJSZWYuY3VycmVudCAmJiB0YWJiYWJsZShwb3BvdmVyUmVmLmN1cnJlbnQpO1xuICAgICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmb2N1c1RhYmJhYmxlQWZ0ZXJUcmlnZ2VyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgZWxlbWVudEFmdGVyVHJpZ2dlciA9IGdldEVsZW1lbnRBZnRlclRyaWdnZXIoKTtcbiAgICBpZiAoZWxlbWVudEFmdGVyVHJpZ2dlcikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnRBZnRlclRyaWdnZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaGlmdFRhYmJlZEZyb21FbGVtZW50QWZ0ZXJUcmlnZ2VyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICAgIGNvbnN0IGVsZW1lbnRBZnRlclRyaWdnZXIgPSBnZXRFbGVtZW50QWZ0ZXJUcmlnZ2VyKCk7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldCA9PT0gZWxlbWVudEFmdGVyVHJpZ2dlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvY3VzTGFzdFRhYmJhYmxlSW5Qb3BvdmVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBwb3BvdmVyUmVmLmN1cnJlbnQgJiYgdGFiYmFibGUocG9wb3ZlclJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBsYXN0ID0gZWxlbWVudHMgJiYgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsYXN0LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hpZnRUYWJiZWRPdXRPZlBvcG92ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHBvcG92ZXJSZWYuY3VycmVudCAmJiB0YWJiYWJsZShwb3BvdmVyUmVmLmN1cnJlbnQpO1xuICAgIGlmIChlbGVtZW50cykge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogZXZlbnQudGFyZ2V0ID09PSBlbGVtZW50c1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9jdXNUcmlnZ2VyUmVmKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0cmlnZ2VyUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWJiZWRUb0Jyb3dzZXJDaHJvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9XG4gICAgICBkb2MgJiYgcG9wb3ZlclJlZi5jdXJyZW50XG4gICAgICAgID8gdGFiYmFibGUoZG9jKS5maWx0ZXIoXG4gICAgICAgICAgICBlbGVtZW50ID0+ICFwb3BvdmVyUmVmLmN1cnJlbnQhLmNvbnRhaW5zKGVsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIGVsZW1lbnRzID8gZXZlbnQudGFyZ2V0ID09PSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXSA6IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hpZnRUYWJiZWRUb0Jyb3dzZXJDaHJvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB3ZSdyZSBhc3N1bWluZyB0aGUgcG9wb3ZlciB3aWxsIG5ldmVyIGNvbnRhaW4gdGhlIGZpcnN0IHRhYmJhYmxlXG4gICAgLy8gZWxlbWVudCwgYW5kIGl0IGJldHRlciBub3QsIGJlY2F1c2UgdGhlIHRyaWdnZXIgbmVlZHMgdG8gYmUgdGFiYmFibGUhXG4gICAgcmV0dXJuIGRvYyA/IGV2ZW50LnRhcmdldCA9PT0gdGFiYmFibGUoZG9jKVswXSA6IGZhbHNlO1xuICB9XG5cbiAgbGV0IHJlc3RvcmVUYWJJbmRleFR1cGzDqXM6IFtIVE1MRWxlbWVudCwgbnVtYmVyXVtdID0gW107XG5cbiAgZnVuY3Rpb24gZGlzYWJsZVRhYmJhYmxlc0luUG9wb3ZlcigpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHBvcG92ZXJSZWYuY3VycmVudCAmJiB0YWJiYWJsZShwb3BvdmVyUmVmLmN1cnJlbnQpO1xuICAgIGlmIChlbGVtZW50cyAmJiBkb2MpIHtcbiAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIHJlc3RvcmVUYWJJbmRleFR1cGzDqXMucHVzaChbZWxlbWVudCwgZWxlbWVudC50YWJJbmRleF0pO1xuICAgICAgICBlbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICB9KTtcbiAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLCBlbmFibGVUYWJiYWJsZXNJblBvcG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuYWJsZVRhYmJhYmxlc0luUG9wb3ZlcigpIHtcbiAgICBpZiAoZG9jKSB7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgZW5hYmxlVGFiYmFibGVzSW5Qb3BvdmVyKTtcbiAgICAgIHJlc3RvcmVUYWJJbmRleFR1cGzDqXMuZm9yRWFjaCgoW2VsZW1lbnQsIHRhYkluZGV4XSkgPT4ge1xuICAgICAgICBlbGVtZW50LnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFR5cGVzXG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uID0gKFxuICB0YXJnZXRSZWN0PzogUFJlY3QgfCBudWxsLFxuICBwb3BvdmVyUmVjdD86IFBSZWN0IHwgbnVsbFxuKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTs7Ozs7QUFHQTtBQUlBO0FBRUE7QUFBQTtBQU5BO0FBaUJBO0FBTUE7Ozs7Ozs7QUFNQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRkE7QUFIQTtBQWJBO0FBMkJBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFKQTs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFPQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7OztBQUNBO0FBQUE7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFOQTtBQVNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/popover/dist/popover.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/popover/node_modules/@reach/observe-rect/dist/observe-rect.esm.js": -/*!************************************************************************************************!*\ - !*** ../node_modules/@reach/popover/node_modules/@reach/observe-rect/dist/observe-rect.esm.js ***! - \************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar props = ['bottom', 'height', 'left', 'right', 'top', 'width'];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n var changedStates = [];\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.rect = newRect;\n changedStates.push(state);\n }\n });\n changedStates.forEach(function (state) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n });\n rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (observeRect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9wb3BvdmVyL25vZGVfbW9kdWxlcy9AcmVhY2gvb2JzZXJ2ZS1yZWN0L2Rpc3Qvb2JzZXJ2ZS1yZWN0LmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgcHJvcHM6IChrZXlvZiBET01SZWN0KVtdID0gW1xuICAnYm90dG9tJyxcbiAgJ2hlaWdodCcsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICd3aWR0aCdcbl07XG5cbmxldCByZWN0Q2hhbmdlZCA9IChhOiBET01SZWN0ID0ge30gYXMgRE9NUmVjdCwgYjogRE9NUmVjdCA9IHt9IGFzIERPTVJlY3QpID0+XG4gIHByb3BzLnNvbWUocHJvcCA9PiBhW3Byb3BdICE9PSBiW3Byb3BdKTtcblxubGV0IG9ic2VydmVkTm9kZXMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBSZWN0UHJvcHM+KCk7XG5sZXQgcmFmSWQ6IG51bWJlcjtcblxubGV0IHJ1biA9ICgpID0+IHtcbiAgY29uc3QgY2hhbmdlZFN0YXRlczogUmVjdFByb3BzW10gPSBbXTtcbiAgb2JzZXJ2ZWROb2Rlcy5mb3JFYWNoKChzdGF0ZSwgbm9kZSkgPT4ge1xuICAgIGxldCBuZXdSZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAocmVjdENoYW5nZWQobmV3UmVjdCwgc3RhdGUucmVjdCkpIHtcbiAgICAgIHN0YXRlLnJlY3QgPSBuZXdSZWN0O1xuICAgICAgY2hhbmdlZFN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNoYW5nZWRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgc3RhdGUuY2FsbGJhY2tzLmZvckVhY2goY2IgPT4gY2Ioc3RhdGUucmVjdCkpO1xuICB9KTtcblxuICByYWZJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnVuKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9ic2VydmVSZWN0KFxuICBub2RlOiBIVE1MRWxlbWVudCxcbiAgY2I6IChyZWN0OiBET01SZWN0KSA9PiB2b2lkXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBvYnNlcnZlKCkge1xuICAgICAgbGV0IHdhc0VtcHR5ID0gb2JzZXJ2ZWROb2Rlcy5zaXplID09PSAwO1xuICAgICAgaWYgKG9ic2VydmVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgIG9ic2VydmVkTm9kZXMuZ2V0KG5vZGUpIS5jYWxsYmFja3MucHVzaChjYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnNlcnZlZE5vZGVzLnNldChub2RlLCB7XG4gICAgICAgICAgcmVjdDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhhc1JlY3RDaGFuZ2VkOiBmYWxzZSxcbiAgICAgICAgICBjYWxsYmFja3M6IFtjYl1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAod2FzRW1wdHkpIHJ1bigpO1xuICAgIH0sXG5cbiAgICB1bm9ic2VydmUoKSB7XG4gICAgICBsZXQgc3RhdGUgPSBvYnNlcnZlZE5vZGVzLmdldChub2RlKTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGNhbGxiYWNrXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuY2FsbGJhY2tzLmluZGV4T2YoY2IpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkgc3RhdGUuY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBub2RlIHJlZmVyZW5jZVxuICAgICAgICBpZiAoIXN0YXRlLmNhbGxiYWNrcy5sZW5ndGgpIG9ic2VydmVkTm9kZXMuZGVsZXRlKG5vZGUpO1xuXG4gICAgICAgIC8vIFN0b3AgdGhlIGxvb3BcbiAgICAgICAgaWYgKCFvYnNlcnZlZE5vZGVzLnNpemUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxSZWN0ID0gUGFydGlhbDxET01SZWN0PjtcblxuZXhwb3J0IHR5cGUgUmVjdFByb3BzID0ge1xuICByZWN0OiBET01SZWN0IHwgdW5kZWZpbmVkO1xuICBoYXNSZWN0Q2hhbmdlZDogYm9vbGVhbjtcbiAgY2FsbGJhY2tzOiBGdW5jdGlvbltdO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUFBOzs7QUFBQTtBQUFBOzs7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBSUE7QUFkQTtBQUNBO0FBZ0JBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBWkE7QUFlQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTVCQTtBQThCQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@reach/popover/node_modules/@reach/observe-rect/dist/observe-rect.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/popover/node_modules/@reach/rect/dist/rect.esm.js": -/*!********************************************************************************!*\ - !*** ../node_modules/@reach/popover/node_modules/@reach/rect/dist/rect.esm.js ***! - \********************************************************************************/ -/*! exports provided: default, Rect, useRect */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Rect\", function() { return Rect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useRect\", function() { return useRect; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _reach_observe_rect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @reach/observe-rect */ \"../node_modules/@reach/popover/node_modules/@reach/observe-rect/dist/observe-rect.esm.js\");\n\n\n\n/**\r\n * Welcome to @reach/rect!\r\n *\r\n * Measures DOM elements (aka. bounding client rect).\r\n *\r\n * @see getBoundingClientRect https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\r\n * @see Docs https://reacttraining.com/reach-ui/rect\r\n * @see Source https://github.com/reach/reach-ui/tree/master/packages/rect\r\n */\n\n/**\r\n * Rect\r\n *\r\n * @param props\r\n */\n\nvar Rect = function Rect(_ref) {\n var onChange = _ref.onChange,\n _ref$observe = _ref.observe,\n observe = _ref$observe === void 0 ? true : _ref$observe,\n children = _ref.children;\n var ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var rect = useRect(ref, observe, onChange);\n return children({\n ref: ref,\n rect: rect\n });\n};\n\nRect.displayName = \"Rect\";\n\nif (undefined !== \"production\") {\n Rect.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n observe: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * useRect\r\n *\r\n * @param nodeRef\r\n * @param observe\r\n * @param onChange\r\n */\n\n\nfunction useRect(nodeRef, observe, onChange) {\n if (observe === void 0) {\n observe = true;\n }\n\n var initialRectSet = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(false);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n rect = _useState[0],\n setRect = _useState[1];\n\n var observerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"])(function () {\n var cleanup = function cleanup() {\n observerRef.current && observerRef.current.unobserve();\n };\n\n if (!nodeRef.current) {\n console.warn(\"You need to place the ref\");\n return cleanup;\n }\n\n if (!observerRef.current) {\n observerRef.current = Object(_reach_observe_rect__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nodeRef.current, function (rect) {\n onChange && onChange(rect);\n setRect(rect);\n });\n }\n\n if (!initialRectSet.current) {\n initialRectSet.current = true;\n setRect(nodeRef.current.getBoundingClientRect());\n }\n\n observe && observerRef.current.observe();\n return cleanup; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [observe, onChange]);\n return rect;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rect);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9wb3BvdmVyL25vZGVfbW9kdWxlcy9AcmVhY2gvcmVjdC9kaXN0L3JlY3QuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50c3g/ZGViNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlbGNvbWUgdG8gQHJlYWNoL3JlY3QhXG4gKlxuICogTWVhc3VyZXMgRE9NIGVsZW1lbnRzIChha2EuIGJvdW5kaW5nIGNsaWVudCByZWN0KS5cbiAqXG4gKiBAc2VlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEBzZWUgRG9jcyAgICAgICAgICAgICAgICAgIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcmVjdFxuICogQHNlZSBTb3VyY2UgICAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JlYWNoLXVpL3RyZWUvbWFzdGVyL3BhY2thZ2VzL3JlY3RcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgb2JzZXJ2ZVJlY3QgZnJvbSBcIkByZWFjaC9vYnNlcnZlLXJlY3RcIjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZWN0XG4gKlxuICogQHBhcmFtIHByb3BzXG4gKi9cbmV4cG9ydCBjb25zdCBSZWN0OiBSZWFjdC5GQzxSZWN0UHJvcHM+ID0gKHtcbiAgb25DaGFuZ2UsXG4gIG9ic2VydmUgPSB0cnVlLFxuICBjaGlsZHJlblxufSkgPT4ge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVjdCA9IHVzZVJlY3QocmVmLCBvYnNlcnZlLCBvbkNoYW5nZSk7XG4gIHJldHVybiBjaGlsZHJlbih7IHJlZiwgcmVjdCB9KTtcbn07XG5cbi8qKlxuICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcmVjdCNyZWN0LXByb3BzXG4gKi9cbmV4cG9ydCB0eXBlIFJlY3RQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRlbGxzIGBSZWN0YCB0byBvYnNlcnZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSBvciBub3QuIFdoaWxlIG9ic2VydmluZyxcbiAgICogdGhlIGBjaGlsZHJlbmAgcmVuZGVyIHByb3AgbWF5IGNhbGwgYmFjayB2ZXJ5IHF1aWNrbHkgKGVzcGVjaWFsbHkgd2hpbGVcbiAgICogc2Nyb2xsaW5nKSBzbyBpdCBjYW4gYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSB0byBhdm9pZCBvYnNlcnZpbmcgd2hlblxuICAgKiB5b3UgZG9uJ3QgbmVlZCB0by5cbiAgICpcbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCBwb3Agb3ZlciBvdGhlciBlbGVtZW50cyAobGlrZSBhXG4gICAqIGRyb3Bkb3duIG1lbnUpLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBvYnNlcnZlIGFsbCB0aGUgdGltZSwgb25seSB3aGVuIHRoZVxuICAgKiBwb3B1cCBpcyBhY3RpdmUuXG4gICAqXG4gICAqIFBhc3MgYHRydWVgIHRvIG9ic2VydmUsIGBmYWxzZWAgdG8gaWdub3JlLlxuICAgKlxuICAgKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9yZWN0I3JlY3Qtb2JzZXJ2ZVxuICAgKi9cbiAgb2JzZXJ2ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxscyBiYWNrIHdoZW5ldmVyIHRoZSBgcmVjdGAgb2YgdGhlIGVsZW1lbnQgY2hhbmdlcy5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcmVjdCNyZWN0LW9uY2hhbmdlXG4gICAqL1xuICBvbkNoYW5nZT86IChyZWN0OiBQUmVjdCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBjYWxscyBiYWNrIHRvIHlvdSB3aXRoIGEgYHJlZmAgdG8gcGxhY2Ugb24gYW4gZWxlbWVudCBhbmRcbiAgICogdGhlIGByZWN0YCBtZWFzdXJlbWVudHMgb2YgdGhlIGRvbSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogT24gdGhlIGZpcnN0IHJlbmRlciBgcmVjdGAgd2lsbCBiZSBgdW5kZWZpbmVkYCBiZWNhdXNlIHdlIGNhbid0XG4gICAqIG1lYXN1cmUgYSBub2RlIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiByZW5kZXJlZC4gTWFrZSBzdXJlIHlvdXIgY29kZSBhY2NvdW50c1xuICAgKiBmb3IgdGhpcy5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcmVjdCNyZWN0LW9uY2hhbmdlXG4gICAqL1xuICBjaGlsZHJlbihhcmdzOiB7IHJlY3Q6IFBSZWN0IHwgbnVsbDsgcmVmOiBSZWFjdC5SZWY8YW55PiB9KTogSlNYLkVsZW1lbnQ7XG59O1xuXG5SZWN0LmRpc3BsYXlOYW1lID0gXCJSZWN0XCI7XG5cbmlmIChfX0RFVl9fKSB7XG4gIFJlY3QucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9ic2VydmU6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuY1xuICB9O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIHVzZVJlY3RcbiAqXG4gKiBAcGFyYW0gbm9kZVJlZlxuICogQHBhcmFtIG9ic2VydmVcbiAqIEBwYXJhbSBvbkNoYW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4oXG4gIG5vZGVSZWY6IFJlYWN0LlJlZk9iamVjdDxUPixcbiAgb2JzZXJ2ZTogYm9vbGVhbiA9IHRydWUsXG4gIG9uQ2hhbmdlPzogKHJlY3Q6IERPTVJlY3QpID0+IHZvaWRcbik6IG51bGwgfCBET01SZWN0IHtcbiAgbGV0IGluaXRpYWxSZWN0U2V0ID0gdXNlUmVmKGZhbHNlKTtcbiAgbGV0IFtyZWN0LCBzZXRSZWN0XSA9IHVzZVN0YXRlPERPTVJlY3QgfCBudWxsPihudWxsKTtcbiAgbGV0IG9ic2VydmVyUmVmID0gdXNlUmVmPGFueT4obnVsbCk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIG9ic2VydmVyUmVmLmN1cnJlbnQgJiYgb2JzZXJ2ZXJSZWYuY3VycmVudC51bm9ic2VydmUoKTtcbiAgICB9O1xuXG4gICAgaWYgKCFub2RlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIllvdSBuZWVkIHRvIHBsYWNlIHRoZSByZWZcIik7XG4gICAgICByZXR1cm4gY2xlYW51cDtcbiAgICB9XG5cbiAgICBpZiAoIW9ic2VydmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIG9ic2VydmVyUmVmLmN1cnJlbnQgPSBvYnNlcnZlUmVjdChub2RlUmVmLmN1cnJlbnQsIChyZWN0OiBET01SZWN0KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHJlY3QpO1xuICAgICAgICBzZXRSZWN0KHJlY3QpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpbml0aWFsUmVjdFNldC5jdXJyZW50KSB7XG4gICAgICBpbml0aWFsUmVjdFNldC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHNldFJlY3Qobm9kZVJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9XG5cbiAgICBvYnNlcnZlICYmIG9ic2VydmVyUmVmLmN1cnJlbnQub2JzZXJ2ZSgpO1xuICAgIHJldHVybiBjbGVhbnVwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29ic2VydmUsIG9uQ2hhbmdlXSk7XG5cbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlY3Q7XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxSZWN0ID0gUGFydGlhbDxQUmVjdD47XG5cbmV4cG9ydCB0eXBlIFBSZWN0ID0gUGFydGlhbDxET01SZWN0PiAmIHtcbiAgcmVhZG9ubHkgYm90dG9tOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuICByZWFkb25seSBsZWZ0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHJpZ2h0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvcDogbnVtYmVyO1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTs7O0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBR0E7Ozs7Ozs7OztBQU9BO0FBRUE7QUFBQTs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUEyQkE7QUFDQTtBQUNBOzsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@reach/popover/node_modules/@reach/rect/dist/rect.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/portal/dist/portal.esm.js": -/*!********************************************************!*\ - !*** ../node_modules/@reach/portal/dist/portal.esm.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\r\n * Welcome to @reach/portal!\r\n *\r\n * Creates and appends a DOM node to the end of `document.body` and renders a\r\n * React tree into it. Useful for rendering a natural React element hierarchy\r\n * with a different DOM hierarchy to prevent parent styles from clipping or\r\n * hiding content (for popovers, dropdowns, and modals).\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/portal\r\n * @see Source https://github.com/reach/reach-ui/tree/master/packages/portal\r\n * @see React https://reactjs.org/docs/portals.html\r\n */\n\n/**\r\n * Portal\r\n *\r\n * @see Docs https://reacttraining.com/reach-ui/portal#portal\r\n */\n\nvar Portal = function Portal(_ref) {\n var children = _ref.children,\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? \"reach-portal\" : _ref$type;\n var mountNode = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var portalNode = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n forceUpdate = _useState[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"])(function () {\n // It's possible that the content we are portal has, itself, been portaled.\n // In that case, it's important to append to the correct document element.\n var ownerDocument = mountNode.current.ownerDocument;\n portalNode.current = ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.createElement(type);\n ownerDocument.body.appendChild(portalNode.current);\n forceUpdate({});\n return function () {\n if (portalNode.current && portalNode.current.ownerDocument) {\n portalNode.current.ownerDocument.body.removeChild(portalNode.current);\n }\n };\n }, [type]);\n return portalNode.current ? Object(react_dom__WEBPACK_IMPORTED_MODULE_1__[\"createPortal\"])(children, portalNode.current) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n ref: mountNode\n });\n};\n\nPortal.displayName = \"Portal\";\n/* harmony default export */ __webpack_exports__[\"default\"] = (Portal);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9wb3J0YWwvZGlzdC9wb3J0YWwuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50c3g/ZGViNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlbGNvbWUgdG8gQHJlYWNoL3BvcnRhbCFcbiAqXG4gKiBDcmVhdGVzIGFuZCBhcHBlbmRzIGEgRE9NIG5vZGUgdG8gdGhlIGVuZCBvZiBgZG9jdW1lbnQuYm9keWAgYW5kIHJlbmRlcnMgYVxuICogUmVhY3QgdHJlZSBpbnRvIGl0LiBVc2VmdWwgZm9yIHJlbmRlcmluZyBhIG5hdHVyYWwgUmVhY3QgZWxlbWVudCBoaWVyYXJjaHlcbiAqIHdpdGggYSBkaWZmZXJlbnQgRE9NIGhpZXJhcmNoeSB0byBwcmV2ZW50IHBhcmVudCBzdHlsZXMgZnJvbSBjbGlwcGluZyBvclxuICogaGlkaW5nIGNvbnRlbnQgKGZvciBwb3BvdmVycywgZHJvcGRvd25zLCBhbmQgbW9kYWxzKS5cbiAqXG4gKiBAc2VlIERvY3MgICBodHRwczovL3JlYWN0dHJhaW5pbmcuY29tL3JlYWNoLXVpL3BvcnRhbFxuICogQHNlZSBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JlYWNoLXVpL3RyZWUvbWFzdGVyL3BhY2thZ2VzL3BvcnRhbFxuICogQHNlZSBSZWFjdCAgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3BvcnRhbHMuaHRtbFxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJyZWFjdC1kb21cIjtcblxuLyoqXG4gKiBQb3J0YWxcbiAqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9wb3J0YWwjcG9ydGFsXG4gKi9cbmNvbnN0IFBvcnRhbDogUmVhY3QuRkM8UG9ydGFsUHJvcHM+ID0gKHsgY2hpbGRyZW4sIHR5cGUgPSBcInJlYWNoLXBvcnRhbFwiIH0pID0+IHtcbiAgbGV0IG1vdW50Tm9kZSA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBsZXQgcG9ydGFsTm9kZSA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBsZXQgWywgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY29udGVudCB3ZSBhcmUgcG9ydGFsIGhhcywgaXRzZWxmLCBiZWVuIHBvcnRhbGVkLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgaXQncyBpbXBvcnRhbnQgdG8gYXBwZW5kIHRvIHRoZSBjb3JyZWN0IGRvY3VtZW50IGVsZW1lbnQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IG1vdW50Tm9kZS5jdXJyZW50IS5vd25lckRvY3VtZW50O1xuICAgIHBvcnRhbE5vZGUuY3VycmVudCA9IG93bmVyRG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQodHlwZSkhO1xuICAgIG93bmVyRG9jdW1lbnQhLmJvZHkuYXBwZW5kQ2hpbGQocG9ydGFsTm9kZS5jdXJyZW50KTtcbiAgICBmb3JjZVVwZGF0ZSh7fSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChwb3J0YWxOb2RlLmN1cnJlbnQgJiYgcG9ydGFsTm9kZS5jdXJyZW50Lm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgcG9ydGFsTm9kZS5jdXJyZW50Lm93bmVyRG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3J0YWxOb2RlLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFt0eXBlXSk7XG5cbiAgcmV0dXJuIHBvcnRhbE5vZGUuY3VycmVudCA/IChcbiAgICBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIHBvcnRhbE5vZGUuY3VycmVudClcbiAgKSA6IChcbiAgICA8ZGl2IHJlZj17bW91bnROb2RlfSAvPlxuICApO1xufTtcblxuLyoqXG4gKiBAc2VlIERvY3MgaHR0cHM6Ly9yZWFjdHRyYWluaW5nLmNvbS9yZWFjaC11aS9wb3J0YWwjcG9ydGFsLXByb3BzXG4gKi9cbmV4cG9ydCB0eXBlIFBvcnRhbFByb3BzID0ge1xuICAvKipcbiAgICogUmVndWxhciBSZWFjdCBjaGlsZHJlbi5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcG9ydGFsI3BvcnRhbC1jaGlsZHJlblxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBET00gZWxlbWVudCB0eXBlIHRvIHJlbmRlci5cbiAgICpcbiAgICogQHNlZSBEb2NzIGh0dHBzOi8vcmVhY3R0cmFpbmluZy5jb20vcmVhY2gtdWkvcG9ydGFsI3BvcnRhbC10eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xufTtcblxuUG9ydGFsLmRpc3BsYXlOYW1lID0gXCJQb3J0YWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgUG9ydGFsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7OztBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBUEE7QUFjQTtBQUdBO0FBQUE7QUF0QkE7QUFDQTtBQTJDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/portal/dist/portal.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/rect/es/index.js": -/*!***********************************************!*\ - !*** ../node_modules/@reach/rect/es/index.js ***! - \***********************************************/ -/*! exports provided: useRect, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useRect\", function() { return useRect; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _reach_component_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @reach/component-component */ \"../node_modules/@reach/component-component/es/index.js\");\n/* harmony import */ var _reach_observe_rect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @reach/observe-rect */ \"../node_modules/@reach/observe-rect/dist/observe-rect.esm.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n\n\n\n\nvar render = function render(_ref) {\n var refs = _ref.refs,\n children = _ref.props.children,\n rect = _ref.state.rect;\n return children({\n ref: function ref(node) {\n return refs.node = node;\n },\n rect: rect\n });\n};\n\nvar didMount = function didMount(_ref2) {\n var setState = _ref2.setState,\n refs = _ref2.refs,\n props = _ref2.props;\n\n if (!refs.node) {\n console.warn(\"You need to place the ref\");\n return;\n }\n\n refs.observer = Object(_reach_observe_rect__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(refs.node, function (rect) {\n props.onChange && props.onChange(rect);\n setState({\n rect: rect\n });\n });\n\n if (props.observe) {\n refs.observer.observe();\n }\n};\n\nvar didUpdate = function didUpdate(_ref3) {\n var refs = _ref3.refs,\n props = _ref3.props,\n prevProps = _ref3.prevProps;\n\n if (props.observe && !prevProps.observe) {\n refs.observer.observe();\n } else if (!props.observe && prevProps.observe) {\n refs.observer.unobserve();\n }\n};\n\nvar willUnmount = function willUnmount(_ref4) {\n var refs = _ref4.refs;\n refs.observer.unobserve();\n};\n\nvar Rect = function Rect(props) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_component_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({}, props, {\n refs: {\n node: undefined,\n observer: undefined\n },\n initialState: {\n rect: undefined\n },\n didMount: didMount,\n didUpdate: didUpdate,\n willUnmount: willUnmount,\n render: render\n }));\n};\n\nundefined !== \"production\" ? Rect.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_3__[\"func\"],\n observe: prop_types__WEBPACK_IMPORTED_MODULE_3__[\"bool\"],\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_3__[\"func\"]\n} : void 0;\nRect.defaultProps = {\n observe: true\n};\nfunction useRect(nodeRef) {\n var observe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n rect = _useState[0],\n setRect = _useState[1];\n\n var observerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"])(function () {\n if (!observerRef.current) {\n observerRef.current = Object(_reach_observe_rect__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nodeRef.current, setRect);\n }\n\n if (observe) {\n observerRef.current.observe();\n }\n\n return function () {\n return observerRef.current.unobserve();\n };\n }, [observe]);\n return rect;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC9yZWN0L2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AcmVhY2gvcmVjdC9lcy9pbmRleC5qcz8yZDRiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcIkByZWFjaC9jb21wb25lbnQtY29tcG9uZW50XCI7XG5pbXBvcnQgb2JzZXJ2ZVJlY3QgZnJvbSBcIkByZWFjaC9vYnNlcnZlLXJlY3RcIjtcbmltcG9ydCB7IGZ1bmMsIGJvb2wgfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG52YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKF9yZWYpIHtcbiAgdmFyIHJlZnMgPSBfcmVmLnJlZnMsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYucHJvcHMuY2hpbGRyZW4sXG4gICAgICByZWN0ID0gX3JlZi5zdGF0ZS5yZWN0O1xuICByZXR1cm4gY2hpbGRyZW4oeyByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICByZXR1cm4gcmVmcy5ub2RlID0gbm9kZTtcbiAgICB9LCByZWN0OiByZWN0IH0pO1xufTtcblxudmFyIGRpZE1vdW50ID0gZnVuY3Rpb24gZGlkTW91bnQoX3JlZjIpIHtcbiAgdmFyIHNldFN0YXRlID0gX3JlZjIuc2V0U3RhdGUsXG4gICAgICByZWZzID0gX3JlZjIucmVmcyxcbiAgICAgIHByb3BzID0gX3JlZjIucHJvcHM7XG5cbiAgaWYgKCFyZWZzLm5vZGUpIHtcbiAgICBjb25zb2xlLndhcm4oXCJZb3UgbmVlZCB0byBwbGFjZSB0aGUgcmVmXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICByZWZzLm9ic2VydmVyID0gb2JzZXJ2ZVJlY3QocmVmcy5ub2RlLCBmdW5jdGlvbiAocmVjdCkge1xuICAgIHByb3BzLm9uQ2hhbmdlICYmIHByb3BzLm9uQ2hhbmdlKHJlY3QpO1xuICAgIHNldFN0YXRlKHsgcmVjdDogcmVjdCB9KTtcbiAgfSk7XG4gIGlmIChwcm9wcy5vYnNlcnZlKSB7XG4gICAgcmVmcy5vYnNlcnZlci5vYnNlcnZlKCk7XG4gIH1cbn07XG5cbnZhciBkaWRVcGRhdGUgPSBmdW5jdGlvbiBkaWRVcGRhdGUoX3JlZjMpIHtcbiAgdmFyIHJlZnMgPSBfcmVmMy5yZWZzLFxuICAgICAgcHJvcHMgPSBfcmVmMy5wcm9wcyxcbiAgICAgIHByZXZQcm9wcyA9IF9yZWYzLnByZXZQcm9wcztcblxuICBpZiAocHJvcHMub2JzZXJ2ZSAmJiAhcHJldlByb3BzLm9ic2VydmUpIHtcbiAgICByZWZzLm9ic2VydmVyLm9ic2VydmUoKTtcbiAgfSBlbHNlIGlmICghcHJvcHMub2JzZXJ2ZSAmJiBwcmV2UHJvcHMub2JzZXJ2ZSkge1xuICAgIHJlZnMub2JzZXJ2ZXIudW5vYnNlcnZlKCk7XG4gIH1cbn07XG5cbnZhciB3aWxsVW5tb3VudCA9IGZ1bmN0aW9uIHdpbGxVbm1vdW50KF9yZWY0KSB7XG4gIHZhciByZWZzID0gX3JlZjQucmVmcztcblxuICByZWZzLm9ic2VydmVyLnVub2JzZXJ2ZSgpO1xufTtcblxudmFyIFJlY3QgPSBmdW5jdGlvbiBSZWN0KHByb3BzKSB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcmVmczoge1xuICAgICAgbm9kZTogdW5kZWZpbmVkLFxuICAgICAgb2JzZXJ2ZXI6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICByZWN0OiB1bmRlZmluZWRcbiAgICB9LFxuICAgIGRpZE1vdW50OiBkaWRNb3VudCxcbiAgICBkaWRVcGRhdGU6IGRpZFVwZGF0ZSxcbiAgICB3aWxsVW5tb3VudDogd2lsbFVubW91bnQsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfSkpO1xufTtcblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmVjdC5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBmdW5jLFxuICBvYnNlcnZlOiBib29sLFxuICBvbkNoYW5nZTogZnVuY1xufSA6IHZvaWQgMDtcblxuUmVjdC5kZWZhdWx0UHJvcHMgPSB7XG4gIG9ic2VydmU6IHRydWVcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN0KG5vZGVSZWYpIHtcbiAgdmFyIG9ic2VydmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgcmVjdCA9IF91c2VTdGF0ZVswXSxcbiAgICAgIHNldFJlY3QgPSBfdXNlU3RhdGVbMV07XG5cbiAgdmFyIG9ic2VydmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghb2JzZXJ2ZXJSZWYuY3VycmVudCkge1xuICAgICAgb2JzZXJ2ZXJSZWYuY3VycmVudCA9IG9ic2VydmVSZWN0KG5vZGVSZWYuY3VycmVudCwgc2V0UmVjdCk7XG4gICAgfVxuICAgIGlmIChvYnNlcnZlKSB7XG4gICAgICBvYnNlcnZlclJlZi5jdXJyZW50Lm9ic2VydmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlclJlZi5jdXJyZW50LnVub2JzZXJ2ZSgpO1xuICAgIH07XG4gIH0sIFtvYnNlcnZlXSk7XG4gIHJldHVybiByZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBSZWN0OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBRkE7QUFKQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUVBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFEQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFQQTtBQVdBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@reach/rect/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/tabs/es/index.js": -/*!***********************************************!*\ - !*** ../node_modules/@reach/tabs/es/index.js ***! - \***********************************************/ -/*! exports provided: Tabs, TabList, Tab, TabPanels, TabPanel */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tabs\", function() { return Tabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabList\", function() { return TabList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tab\", function() { return Tab; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabPanels\", function() { return TabPanels; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabPanel\", function() { return TabPanel; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! warning */ \"../node_modules/warning/warning.js\");\n/* harmony import */ var warning__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(warning__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _reach_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reach/utils */ \"../node_modules/@reach/tabs/node_modules/@reach/utils/es/index.js\");\n/* harmony import */ var _reach_auto_id__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @reach/auto-id */ \"../node_modules/@reach/auto-id/es/index.js\");\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\n\n\n\n\n ////////////////////////////////////////////////////////////////////////////////\n\nvar Tabs = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function Tabs(_ref, ref) {\n var children = _ref.children,\n _ref$as = _ref.as,\n Comp = _ref$as === undefined ? \"div\" : _ref$as,\n onChange = _ref.onChange,\n _ref$index = _ref.index,\n controlledIndex = _ref$index === undefined ? undefined : _ref$index,\n _ref$readOnly = _ref.readOnly,\n readOnly = _ref$readOnly === undefined ? false : _ref$readOnly,\n defaultIndex = _ref.defaultIndex,\n props = _objectWithoutProperties(_ref, [\"children\", \"as\", \"onChange\", \"index\", \"readOnly\", \"defaultIndex\"]); // useRef because you shouldn't switch between controlled/uncontrolled\n\n\n var _useRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(controlledIndex != null),\n isControlled = _useRef.current;\n\n undefined !== \"production\" ? warning__WEBPACK_IMPORTED_MODULE_2___default()(!(isControlled && controlledIndex == null), \"Tabs is changing from controlled to uncontrolled. Tabs should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled Tabs for the lifetime of the component. Check the `index` prop being passed in.\") : void 0;\n undefined !== \"production\" ? warning__WEBPACK_IMPORTED_MODULE_2___default()(!(!isControlled && controlledIndex != null), \"Tabs is changing from uncontrolled to controlled. Tabs should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled Tabs for the lifetime of the component. Check the `index` prop being passed in.\") : void 0;\n\n var _id = Object(_reach_auto_id__WEBPACK_IMPORTED_MODULE_4__[\"useId\"])(); // we only manage focus if the user caused the update vs.\n // a new controlled index coming in\n\n\n var _userInteractedRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(false);\n\n var _selectedPanelRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(defaultIndex || 0),\n selectedIndex = _useState[0],\n setSelectedIndex = _useState[1];\n\n var clones = react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(children, function (child) {\n // ignore random <div/>s etc.\n if (typeof child.type === \"string\") return child;\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n selectedIndex: isControlled ? controlledIndex : selectedIndex,\n _id: _id,\n _userInteractedRef: _userInteractedRef,\n _selectedPanelRef: _selectedPanelRef,\n _onFocusPanel: function _onFocusPanel() {\n return _selectedPanelRef.current && _selectedPanelRef.current.focus();\n },\n _onSelectTab: readOnly ? function () {} : function (index) {\n _userInteractedRef.current = true;\n onChange && onChange(index);\n\n if (!isControlled) {\n setSelectedIndex(index);\n }\n }\n });\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, _extends({\n \"data-reach-tabs\": \"\",\n ref: ref\n }, props, {\n children: clones\n }));\n});\n\nundefined !== \"production\" ? Tabs.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"].isRequired,\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"func\"],\n index: function index(props, name, compName) {\n for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n rest[_key - 3] = arguments[_key];\n }\n\n if (props.index > -1 && props.onChange == null && props.readOnly !== true) {\n return new Error(\"You provided a `value` prop to `Tabs` without an `onChange` handler. This will render a read-only tabs element. If the tabs should be mutable use `defaultIndex`. Otherwise, set `onChange`.\");\n } else {\n return prop_types__WEBPACK_IMPORTED_MODULE_1__[\"number\"].apply(undefined, [name, props, compName].concat(rest));\n }\n },\n defaultIndex: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"number\"]\n} : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar TabList = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function TabList(_ref2, ref) {\n var children = _ref2.children,\n _ref2$as = _ref2.as,\n Comp = _ref2$as === undefined ? \"div\" : _ref2$as,\n onKeyDown = _ref2.onKeyDown,\n clonedProps = _objectWithoutProperties(_ref2, [\"children\", \"as\", \"onKeyDown\"]);\n\n var selectedIndex = clonedProps.selectedIndex,\n _onSelectTab = clonedProps._onSelectTab,\n _userInteractedRef = clonedProps._userInteractedRef,\n _onFocusPanel = clonedProps._onFocusPanel,\n _selectedPanelRef = clonedProps._selectedPanelRef,\n _id = clonedProps._id,\n htmlProps = _objectWithoutProperties(clonedProps, [\"selectedIndex\", \"_onSelectTab\", \"_userInteractedRef\", \"_onFocusPanel\", \"_selectedPanelRef\", \"_id\"]);\n\n var clones = react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(children, function (child, index) {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n isSelected: index === selectedIndex,\n _id: makeId(_id, index),\n _userInteractedRef: _userInteractedRef,\n _onSelect: function _onSelect() {\n return _onSelectTab(index);\n }\n });\n });\n var handleKeyDown = Object(_reach_utils__WEBPACK_IMPORTED_MODULE_3__[\"wrapEvent\"])(onKeyDown, function (event) {\n var enabledIndexes = react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(children, function (child, index) {\n return child.props.disabled === true ? null : index;\n }).filter(function (index) {\n return index != null;\n }); // looks something like: [0, 2, 3, 5]\n\n var enabledSelectedIndex = enabledIndexes.indexOf(selectedIndex);\n\n switch (event.key) {\n case \"ArrowRight\":\n {\n var nextEnabledIndex = (enabledSelectedIndex + 1) % enabledIndexes.length;\n var nextIndex = enabledIndexes[nextEnabledIndex];\n\n _onSelectTab(nextIndex);\n\n break;\n }\n\n case \"ArrowLeft\":\n {\n var count = enabledIndexes.length;\n\n var _nextEnabledIndex = (enabledSelectedIndex - 1 + count) % count;\n\n var _nextIndex = enabledIndexes[_nextEnabledIndex];\n\n _onSelectTab(_nextIndex);\n\n break;\n }\n\n case \"ArrowDown\":\n {\n // don't scroll down\n event.preventDefault();\n\n _onFocusPanel();\n\n break;\n }\n\n case \"Home\":\n {\n _onSelectTab(0);\n\n break;\n }\n\n case \"End\":\n {\n _onSelectTab(react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.count(children) - 1);\n\n break;\n }\n\n default:\n {}\n }\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, _extends({\n \"data-reach-tab-list\": \"\",\n ref: ref,\n role: \"tablist\",\n onKeyDown: handleKeyDown,\n children: clones\n }, htmlProps));\n});\n\nundefined !== \"production\" ? TabList.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"]\n} : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Tab = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function Tab(_ref3, forwardedRef) {\n var children = _ref3.children,\n _ref3$as = _ref3.as,\n Comp = _ref3$as === undefined ? \"button\" : _ref3$as,\n rest = _objectWithoutProperties(_ref3, [\"children\", \"as\"]);\n\n var isSelected = rest.isSelected,\n _userInteractedRef = rest._userInteractedRef,\n _onSelect = rest._onSelect,\n _id = rest._id,\n htmlProps = _objectWithoutProperties(rest, [\"isSelected\", \"_userInteractedRef\", \"_onSelect\", \"_id\"]);\n\n var ownRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var ref = forwardedRef || ownRef;\n useUpdateEffect(function () {\n if (isSelected && ref.current && _userInteractedRef.current) {\n _userInteractedRef.current = false;\n ref.current.focus();\n }\n }, [isSelected]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, _extends({\n \"data-reach-tab\": \"\",\n ref: ref,\n role: \"tab\",\n id: \"tab:\" + _id,\n tabIndex: isSelected ? 0 : -1,\n \"aria-selected\": isSelected,\n \"aria-controls\": \"panel:\" + _id,\n \"data-selected\": isSelected ? \"\" : undefined,\n onClick: _onSelect,\n children: children\n }, htmlProps));\n});\n\nundefined !== \"production\" ? Tab.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"]\n} : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar TabPanels = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function TabPanels(_ref4, ref) {\n var children = _ref4.children,\n _ref4$as = _ref4.as,\n Comp = _ref4$as === undefined ? \"div\" : _ref4$as,\n rest = _objectWithoutProperties(_ref4, [\"children\", \"as\"]);\n\n var selectedIndex = rest.selectedIndex,\n _selectedPanelRef = rest._selectedPanelRef,\n _userInteractedRef = rest._userInteractedRef,\n _onFocusPanel = rest._onFocusPanel,\n _onSelectTab = rest._onSelectTab,\n _id = rest._id,\n htmlAttrs = _objectWithoutProperties(rest, [\"selectedIndex\", \"_selectedPanelRef\", \"_userInteractedRef\", \"_onFocusPanel\", \"_onSelectTab\", \"_id\"]);\n\n var clones = react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(children, function (child, index) {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"])(child, {\n isSelected: index === selectedIndex,\n _selectedPanelRef: _selectedPanelRef,\n _id: makeId(_id, index)\n });\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, _extends({\n \"data-reach-tab-panels\": \"\",\n ref: ref\n }, htmlAttrs, {\n children: clones\n }));\n});\n\nundefined !== \"production\" ? TabPanels.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"]\n} : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar TabPanel = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function TabPanel(_ref5, ref) {\n var children = _ref5.children,\n _ref5$as = _ref5.as,\n Comp = _ref5$as === undefined ? \"div\" : _ref5$as,\n rest = _objectWithoutProperties(_ref5, [\"children\", \"as\"]);\n\n var isSelected = rest.isSelected,\n _selectedPanelRef = rest._selectedPanelRef,\n _id = rest._id,\n htmlProps = _objectWithoutProperties(rest, [\"isSelected\", \"_selectedPanelRef\", \"_id\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Comp, _extends({\n \"data-reach-tab-panel\": \"\",\n ref: isSelected ? _selectedPanelRef : undefined,\n role: \"tabpanel\",\n tabIndex: -1,\n \"aria-labelledby\": \"tab:\" + _id,\n hidden: !isSelected,\n id: \"panel:\" + _id,\n children: children\n }, htmlProps));\n});\n\nundefined !== \"production\" ? TabPanel.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1__[\"node\"]\n} : void 0; ////////////////////////////////////////////////////////////////////////////////\n// TODO: move into @reach/utils when something else needs it\n\nfunction useUpdateEffect(effect, deps) {\n var mounted = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(false);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (mounted.current) {\n effect();\n } else {\n mounted.current = true;\n }\n }, deps);\n}\n\nvar makeId = function makeId(id, index) {\n return id + \":\" + index;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC90YWJzL2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AcmVhY2gvdGFicy9lcy9pbmRleC5qcz83NThlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBub2RlLCBmdW5jLCBudW1iZXIgfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcIndhcm5pbmdcIjtcbmltcG9ydCB7IHdyYXBFdmVudCB9IGZyb20gXCJAcmVhY2gvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSBcIkByZWFjaC9hdXRvLWlkXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG52YXIgVGFicyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gVGFicyhfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkYXMgPSBfcmVmLmFzLFxuICAgICAgQ29tcCA9IF9yZWYkYXMgPT09IHVuZGVmaW5lZCA/IFwiZGl2XCIgOiBfcmVmJGFzLFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgX3JlZiRpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICBjb250cm9sbGVkSW5kZXggPSBfcmVmJGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmVmJGluZGV4LFxuICAgICAgX3JlZiRyZWFkT25seSA9IF9yZWYucmVhZE9ubHksXG4gICAgICByZWFkT25seSA9IF9yZWYkcmVhZE9ubHkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRyZWFkT25seSxcbiAgICAgIGRlZmF1bHRJbmRleCA9IF9yZWYuZGVmYXVsdEluZGV4LFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJhc1wiLCBcIm9uQ2hhbmdlXCIsIFwiaW5kZXhcIiwgXCJyZWFkT25seVwiLCBcImRlZmF1bHRJbmRleFwiXSk7XG5cbiAgLy8gdXNlUmVmIGJlY2F1c2UgeW91IHNob3VsZG4ndCBzd2l0Y2ggYmV0d2VlbiBjb250cm9sbGVkL3VuY29udHJvbGxlZFxuICB2YXIgX3VzZVJlZiA9IHVzZVJlZihjb250cm9sbGVkSW5kZXggIT0gbnVsbCksXG4gICAgICBpc0NvbnRyb2xsZWQgPSBfdXNlUmVmLmN1cnJlbnQ7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKGlzQ29udHJvbGxlZCAmJiBjb250cm9sbGVkSW5kZXggPT0gbnVsbCksIFwiVGFicyBpcyBjaGFuZ2luZyBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkLiBUYWJzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIFRhYnMgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBDaGVjayB0aGUgYGluZGV4YCBwcm9wIGJlaW5nIHBhc3NlZCBpbi5cIikgOiB2b2lkIDA7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKCFpc0NvbnRyb2xsZWQgJiYgY29udHJvbGxlZEluZGV4ICE9IG51bGwpLCBcIlRhYnMgaXMgY2hhbmdpbmcgZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZC4gVGFicyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBUYWJzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gQ2hlY2sgdGhlIGBpbmRleGAgcHJvcCBiZWluZyBwYXNzZWQgaW4uXCIpIDogdm9pZCAwO1xuXG4gIHZhciBfaWQgPSB1c2VJZCgpO1xuXG4gIC8vIHdlIG9ubHkgbWFuYWdlIGZvY3VzIGlmIHRoZSB1c2VyIGNhdXNlZCB0aGUgdXBkYXRlIHZzLlxuICAvLyBhIG5ldyBjb250cm9sbGVkIGluZGV4IGNvbWluZyBpblxuICB2YXIgX3VzZXJJbnRlcmFjdGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcblxuICB2YXIgX3NlbGVjdGVkUGFuZWxSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGRlZmF1bHRJbmRleCB8fCAwKSxcbiAgICAgIHNlbGVjdGVkSW5kZXggPSBfdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTZWxlY3RlZEluZGV4ID0gX3VzZVN0YXRlWzFdO1xuXG4gIHZhciBjbG9uZXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIGlnbm9yZSByYW5kb20gPGRpdi8+cyBldGMuXG4gICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2hpbGQ7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgc2VsZWN0ZWRJbmRleDogaXNDb250cm9sbGVkID8gY29udHJvbGxlZEluZGV4IDogc2VsZWN0ZWRJbmRleCxcbiAgICAgIF9pZDogX2lkLFxuICAgICAgX3VzZXJJbnRlcmFjdGVkUmVmOiBfdXNlckludGVyYWN0ZWRSZWYsXG4gICAgICBfc2VsZWN0ZWRQYW5lbFJlZjogX3NlbGVjdGVkUGFuZWxSZWYsXG4gICAgICBfb25Gb2N1c1BhbmVsOiBmdW5jdGlvbiBfb25Gb2N1c1BhbmVsKCkge1xuICAgICAgICByZXR1cm4gX3NlbGVjdGVkUGFuZWxSZWYuY3VycmVudCAmJiBfc2VsZWN0ZWRQYW5lbFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9LFxuICAgICAgX29uU2VsZWN0VGFiOiByZWFkT25seSA/IGZ1bmN0aW9uICgpIHt9IDogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIF91c2VySW50ZXJhY3RlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbXAsIF9leHRlbmRzKHsgXCJkYXRhLXJlYWNoLXRhYnNcIjogXCJcIiwgcmVmOiByZWYgfSwgcHJvcHMsIHsgY2hpbGRyZW46IGNsb25lcyB9KSk7XG59KTtcblxuZXhwb3J0IHsgVGFicyB9O1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGFicy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBub2RlLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBmdW5jLFxuICBpbmRleDogZnVuY3Rpb24gaW5kZXgocHJvcHMsIG5hbWUsIGNvbXBOYW1lKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuaW5kZXggPiAtMSAmJiBwcm9wcy5vbkNoYW5nZSA9PSBudWxsICYmIHByb3BzLnJlYWRPbmx5ICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGBUYWJzYCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSB0YWJzIGVsZW1lbnQuIElmIHRoZSB0YWJzIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdEluZGV4YC4gT3RoZXJ3aXNlLCBzZXQgYG9uQ2hhbmdlYC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudW1iZXIuYXBwbHkodW5kZWZpbmVkLCBbbmFtZSwgcHJvcHMsIGNvbXBOYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH1cbiAgfSxcbiAgZGVmYXVsdEluZGV4OiBudW1iZXJcbn0gOiB2b2lkIDA7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG52YXIgVGFiTGlzdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gVGFiTGlzdChfcmVmMiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgX3JlZjIkYXMgPSBfcmVmMi5hcyxcbiAgICAgIENvbXAgPSBfcmVmMiRhcyA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9yZWYyJGFzLFxuICAgICAgb25LZXlEb3duID0gX3JlZjIub25LZXlEb3duLFxuICAgICAgY2xvbmVkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcImNoaWxkcmVuXCIsIFwiYXNcIiwgXCJvbktleURvd25cIl0pO1xuXG4gIHZhciBzZWxlY3RlZEluZGV4ID0gY2xvbmVkUHJvcHMuc2VsZWN0ZWRJbmRleCxcbiAgICAgIF9vblNlbGVjdFRhYiA9IGNsb25lZFByb3BzLl9vblNlbGVjdFRhYixcbiAgICAgIF91c2VySW50ZXJhY3RlZFJlZiA9IGNsb25lZFByb3BzLl91c2VySW50ZXJhY3RlZFJlZixcbiAgICAgIF9vbkZvY3VzUGFuZWwgPSBjbG9uZWRQcm9wcy5fb25Gb2N1c1BhbmVsLFxuICAgICAgX3NlbGVjdGVkUGFuZWxSZWYgPSBjbG9uZWRQcm9wcy5fc2VsZWN0ZWRQYW5lbFJlZixcbiAgICAgIF9pZCA9IGNsb25lZFByb3BzLl9pZCxcbiAgICAgIGh0bWxQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhjbG9uZWRQcm9wcywgW1wic2VsZWN0ZWRJbmRleFwiLCBcIl9vblNlbGVjdFRhYlwiLCBcIl91c2VySW50ZXJhY3RlZFJlZlwiLCBcIl9vbkZvY3VzUGFuZWxcIiwgXCJfc2VsZWN0ZWRQYW5lbFJlZlwiLCBcIl9pZFwiXSk7XG5cbiAgdmFyIGNsb25lcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIGlzU2VsZWN0ZWQ6IGluZGV4ID09PSBzZWxlY3RlZEluZGV4LFxuICAgICAgX2lkOiBtYWtlSWQoX2lkLCBpbmRleCksXG4gICAgICBfdXNlckludGVyYWN0ZWRSZWY6IF91c2VySW50ZXJhY3RlZFJlZixcbiAgICAgIF9vblNlbGVjdDogZnVuY3Rpb24gX29uU2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gX29uU2VsZWN0VGFiKGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIGhhbmRsZUtleURvd24gPSB3cmFwRXZlbnQob25LZXlEb3duLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgZW5hYmxlZEluZGV4ZXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBjaGlsZC5wcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZSA/IG51bGwgOiBpbmRleDtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggIT0gbnVsbDtcbiAgICB9KTsgLy8gbG9va3Mgc29tZXRoaW5nIGxpa2U6IFswLCAyLCAzLCA1XVxuICAgIHZhciBlbmFibGVkU2VsZWN0ZWRJbmRleCA9IGVuYWJsZWRJbmRleGVzLmluZGV4T2Yoc2VsZWN0ZWRJbmRleCk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBuZXh0RW5hYmxlZEluZGV4ID0gKGVuYWJsZWRTZWxlY3RlZEluZGV4ICsgMSkgJSBlbmFibGVkSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgICAgdmFyIG5leHRJbmRleCA9IGVuYWJsZWRJbmRleGVzW25leHRFbmFibGVkSW5kZXhdO1xuICAgICAgICAgIF9vblNlbGVjdFRhYihuZXh0SW5kZXgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgY291bnQgPSBlbmFibGVkSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgICAgdmFyIF9uZXh0RW5hYmxlZEluZGV4ID0gKGVuYWJsZWRTZWxlY3RlZEluZGV4IC0gMSArIGNvdW50KSAlIGNvdW50O1xuICAgICAgICAgIHZhciBfbmV4dEluZGV4ID0gZW5hYmxlZEluZGV4ZXNbX25leHRFbmFibGVkSW5kZXhdO1xuICAgICAgICAgIF9vblNlbGVjdFRhYihfbmV4dEluZGV4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIkFycm93RG93blwiOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gZG9uJ3Qgc2Nyb2xsIGRvd25cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF9vbkZvY3VzUGFuZWwoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAge1xuICAgICAgICAgIF9vblNlbGVjdFRhYigwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIkVuZFwiOlxuICAgICAgICB7XG4gICAgICAgICAgX29uU2VsZWN0VGFiKFJlYWN0LkNoaWxkcmVuLmNvdW50KGNoaWxkcmVuKSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7fVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1yZWFjaC10YWItbGlzdFwiOiBcIlwiLFxuICAgIHJlZjogcmVmLFxuICAgIHJvbGU6IFwidGFibGlzdFwiLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBjaGlsZHJlbjogY2xvbmVzXG4gIH0sIGh0bWxQcm9wcykpO1xufSk7XG5cbmV4cG9ydCB7IFRhYkxpc3QgfTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRhYkxpc3QucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogbm9kZVxufSA6IHZvaWQgMDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbnZhciBUYWIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIFRhYihfcmVmMywgZm9yd2FyZGVkUmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgX3JlZjMkYXMgPSBfcmVmMy5hcyxcbiAgICAgIENvbXAgPSBfcmVmMyRhcyA9PT0gdW5kZWZpbmVkID8gXCJidXR0b25cIiA6IF9yZWYzJGFzLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgW1wiY2hpbGRyZW5cIiwgXCJhc1wiXSk7XG5cbiAgdmFyIGlzU2VsZWN0ZWQgPSByZXN0LmlzU2VsZWN0ZWQsXG4gICAgICBfdXNlckludGVyYWN0ZWRSZWYgPSByZXN0Ll91c2VySW50ZXJhY3RlZFJlZixcbiAgICAgIF9vblNlbGVjdCA9IHJlc3QuX29uU2VsZWN0LFxuICAgICAgX2lkID0gcmVzdC5faWQsXG4gICAgICBodG1sUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocmVzdCwgW1wiaXNTZWxlY3RlZFwiLCBcIl91c2VySW50ZXJhY3RlZFJlZlwiLCBcIl9vblNlbGVjdFwiLCBcIl9pZFwiXSk7XG5cbiAgdmFyIG93blJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHJlZiA9IGZvcndhcmRlZFJlZiB8fCBvd25SZWY7XG5cbiAgdXNlVXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNTZWxlY3RlZCAmJiByZWYuY3VycmVudCAmJiBfdXNlckludGVyYWN0ZWRSZWYuY3VycmVudCkge1xuICAgICAgX3VzZXJJbnRlcmFjdGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbaXNTZWxlY3RlZF0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbXAsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtcmVhY2gtdGFiXCI6IFwiXCIsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJ0YWJcIixcbiAgICBpZDogXCJ0YWI6XCIgKyBfaWQsXG4gICAgdGFiSW5kZXg6IGlzU2VsZWN0ZWQgPyAwIDogLTEsXG4gICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzU2VsZWN0ZWQsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IFwicGFuZWw6XCIgKyBfaWQsXG4gICAgXCJkYXRhLXNlbGVjdGVkXCI6IGlzU2VsZWN0ZWQgPyBcIlwiIDogdW5kZWZpbmVkLFxuICAgIG9uQ2xpY2s6IF9vblNlbGVjdCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSwgaHRtbFByb3BzKSk7XG59KTtcblxuZXhwb3J0IHsgVGFiIH07XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUYWIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogbm9kZVxufSA6IHZvaWQgMDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbnZhciBUYWJQYW5lbHMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIFRhYlBhbmVscyhfcmVmNCwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgX3JlZjQkYXMgPSBfcmVmNC5hcyxcbiAgICAgIENvbXAgPSBfcmVmNCRhcyA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9yZWY0JGFzLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgW1wiY2hpbGRyZW5cIiwgXCJhc1wiXSk7XG5cbiAgdmFyIHNlbGVjdGVkSW5kZXggPSByZXN0LnNlbGVjdGVkSW5kZXgsXG4gICAgICBfc2VsZWN0ZWRQYW5lbFJlZiA9IHJlc3QuX3NlbGVjdGVkUGFuZWxSZWYsXG4gICAgICBfdXNlckludGVyYWN0ZWRSZWYgPSByZXN0Ll91c2VySW50ZXJhY3RlZFJlZixcbiAgICAgIF9vbkZvY3VzUGFuZWwgPSByZXN0Ll9vbkZvY3VzUGFuZWwsXG4gICAgICBfb25TZWxlY3RUYWIgPSByZXN0Ll9vblNlbGVjdFRhYixcbiAgICAgIF9pZCA9IHJlc3QuX2lkLFxuICAgICAgaHRtbEF0dHJzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJlc3QsIFtcInNlbGVjdGVkSW5kZXhcIiwgXCJfc2VsZWN0ZWRQYW5lbFJlZlwiLCBcIl91c2VySW50ZXJhY3RlZFJlZlwiLCBcIl9vbkZvY3VzUGFuZWxcIiwgXCJfb25TZWxlY3RUYWJcIiwgXCJfaWRcIl0pO1xuXG4gIHZhciBjbG9uZXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBpc1NlbGVjdGVkOiBpbmRleCA9PT0gc2VsZWN0ZWRJbmRleCxcbiAgICAgIF9zZWxlY3RlZFBhbmVsUmVmOiBfc2VsZWN0ZWRQYW5lbFJlZixcbiAgICAgIF9pZDogbWFrZUlkKF9pZCwgaW5kZXgpXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbXAsIF9leHRlbmRzKHsgXCJkYXRhLXJlYWNoLXRhYi1wYW5lbHNcIjogXCJcIiwgcmVmOiByZWYgfSwgaHRtbEF0dHJzLCB7IGNoaWxkcmVuOiBjbG9uZXMgfSkpO1xufSk7XG5cbmV4cG9ydCB7IFRhYlBhbmVscyB9O1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGFiUGFuZWxzLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IG5vZGVcbn0gOiB2b2lkIDA7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG52YXIgVGFiUGFuZWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIFRhYlBhbmVsKF9yZWY1LCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgICBfcmVmNSRhcyA9IF9yZWY1LmFzLFxuICAgICAgQ29tcCA9IF9yZWY1JGFzID09PSB1bmRlZmluZWQgPyBcImRpdlwiIDogX3JlZjUkYXMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY1LCBbXCJjaGlsZHJlblwiLCBcImFzXCJdKTtcblxuICB2YXIgaXNTZWxlY3RlZCA9IHJlc3QuaXNTZWxlY3RlZCxcbiAgICAgIF9zZWxlY3RlZFBhbmVsUmVmID0gcmVzdC5fc2VsZWN0ZWRQYW5lbFJlZixcbiAgICAgIF9pZCA9IHJlc3QuX2lkLFxuICAgICAgaHRtbFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJlc3QsIFtcImlzU2VsZWN0ZWRcIiwgXCJfc2VsZWN0ZWRQYW5lbFJlZlwiLCBcIl9pZFwiXSk7XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1yZWFjaC10YWItcGFuZWxcIjogXCJcIixcbiAgICByZWY6IGlzU2VsZWN0ZWQgPyBfc2VsZWN0ZWRQYW5lbFJlZiA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwidGFiOlwiICsgX2lkLFxuICAgIGhpZGRlbjogIWlzU2VsZWN0ZWQsXG4gICAgaWQ6IFwicGFuZWw6XCIgKyBfaWQsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0sIGh0bWxQcm9wcykpO1xufSk7XG5cbmV4cG9ydCB7IFRhYlBhbmVsIH07XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUYWJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBub2RlXG59IDogdm9pZCAwO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVE9ETzogbW92ZSBpbnRvIEByZWFjaC91dGlscyB3aGVuIHNvbWV0aGluZyBlbHNlIG5lZWRzIGl0XG5mdW5jdGlvbiB1c2VVcGRhdGVFZmZlY3QoZWZmZWN0LCBkZXBzKSB7XG4gIHZhciBtb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobW91bnRlZC5jdXJyZW50KSB7XG4gICAgICBlZmZlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0sIGRlcHMpO1xufVxuXG52YXIgbWFrZUlkID0gZnVuY3Rpb24gbWFrZUlkKGlkLCBpbmRleCkge1xuICByZXR1cm4gaWQgKyBcIjpcIiArIGluZGV4O1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFVQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBSEE7QUFxQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBckRBO0FBd0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFaQTtBQWNBO0FBZEE7QUFDQTtBQWlCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFEQTtBQVdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFKQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFsQ0E7QUFSQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXhFQTtBQWlGQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQXRCQTtBQW9DQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdEJBO0FBeUJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFYQTtBQXVCQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/tabs/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/tabs/node_modules/@reach/utils/es/index.js": -/*!*************************************************************************!*\ - !*** ../node_modules/@reach/tabs/node_modules/@reach/utils/es/index.js ***! - \*************************************************************************/ -/*! exports provided: checkStyles, wrapEvent, assignRef */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkStyles\", function() { return checkStyles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapEvent\", function() { return wrapEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"assignRef\", function() { return assignRef; });\nvar checkedPkgs = {};\n\nvar checkStyles = function checkStyles() {};\n\nif (undefined !== \"production\") {\n checkStyles = function checkStyles(pkg) {\n // only check once per package\n if (checkedPkgs[pkg]) return;\n checkedPkgs[pkg] = true;\n\n if (parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--reach-\" + pkg), 10) !== 1) {\n console.warn(\"@reach/\" + pkg + \" styles not found. If you are using a bundler like webpack or parcel include this in the entry file of your app before any of your own styles:\\n\\n import \\\"@reach/\" + pkg + \"/styles.css\\\";\\n\\n Otherwise you'll need to include them some other way:\\n\\n <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"node_modules/@reach/\" + pkg + \"/styles.css\\\" />\\n\\n For more information visit https://ui.reach.tech/styling.\\n \");\n }\n };\n}\n\n\nvar wrapEvent = function wrapEvent(theirHandler, ourHandler) {\n return function (event) {\n theirHandler && theirHandler(event);\n\n if (!event.defaultPrevented) {\n return ourHandler(event);\n }\n };\n};\nvar assignRef = function assignRef(ref, value) {\n if (ref == null) return;\n\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n try {\n ref.current = value;\n } catch (error) {\n throw new Error(\"Cannot assign value \\\"\" + value + \"\\\" to ref \\\"\" + ref + \"\\\"\");\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC90YWJzL25vZGVfbW9kdWxlcy9AcmVhY2gvdXRpbHMvZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC90YWJzL25vZGVfbW9kdWxlcy9AcmVhY2gvdXRpbHMvZXMvaW5kZXguanM/NGNiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2hlY2tlZFBrZ3MgPSB7fTtcblxudmFyIGNoZWNrU3R5bGVzID0gZnVuY3Rpb24gY2hlY2tTdHlsZXMoKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBjaGVja1N0eWxlcyA9IGZ1bmN0aW9uIGNoZWNrU3R5bGVzKHBrZykge1xuICAgIC8vIG9ubHkgY2hlY2sgb25jZSBwZXIgcGFja2FnZVxuICAgIGlmIChjaGVja2VkUGtnc1twa2ddKSByZXR1cm47XG4gICAgY2hlY2tlZFBrZ3NbcGtnXSA9IHRydWU7XG5cbiAgICBpZiAocGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tcmVhY2gtXCIgKyBwa2cpLCAxMCkgIT09IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkByZWFjaC9cIiArIHBrZyArIFwiIHN0eWxlcyBub3QgZm91bmQuIElmIHlvdSBhcmUgdXNpbmcgYSBidW5kbGVyIGxpa2Ugd2VicGFjayBvciBwYXJjZWwgaW5jbHVkZSB0aGlzIGluIHRoZSBlbnRyeSBmaWxlIG9mIHlvdXIgYXBwIGJlZm9yZSBhbnkgb2YgeW91ciBvd24gc3R5bGVzOlxcblxcbiAgICBpbXBvcnQgXFxcIkByZWFjaC9cIiArIHBrZyArIFwiL3N0eWxlcy5jc3NcXFwiO1xcblxcbiAgT3RoZXJ3aXNlIHlvdSdsbCBuZWVkIHRvIGluY2x1ZGUgdGhlbSBzb21lIG90aGVyIHdheTpcXG5cXG4gICAgPGxpbmsgcmVsPVxcXCJzdHlsZXNoZWV0XFxcIiB0eXBlPVxcXCJ0ZXh0L2Nzc1xcXCIgaHJlZj1cXFwibm9kZV9tb2R1bGVzL0ByZWFjaC9cIiArIHBrZyArIFwiL3N0eWxlcy5jc3NcXFwiIC8+XFxuXFxuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiB2aXNpdCBodHRwczovL3VpLnJlYWNoLnRlY2gvc3R5bGluZy5cXG4gIFwiKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB7IGNoZWNrU3R5bGVzIH07XG5cbmV4cG9ydCB2YXIgd3JhcEV2ZW50ID0gZnVuY3Rpb24gd3JhcEV2ZW50KHRoZWlySGFuZGxlciwgb3VySGFuZGxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhlaXJIYW5kbGVyICYmIHRoZWlySGFuZGxlcihldmVudCk7XG4gICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm4gb3VySGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHZhciBhc3NpZ25SZWYgPSBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICBpZiAocmVmID09IG51bGwpIHJldHVybjtcbiAgaWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhc3NpZ24gdmFsdWUgXFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgdG8gcmVmIFxcXCJcIiArIHJlZiArIFwiXFxcIlwiKTtcbiAgICB9XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFWQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@reach/tabs/node_modules/@reach/utils/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@reach/utils/dist/utils.esm.js": -/*!******************************************************!*\ - !*** ../node_modules/@reach/utils/dist/utils.esm.js ***! - \******************************************************/ -/*! exports provided: DescendantProvider, assignRef, boolOrBoolString, canUseDOM, checkStyles, cloneValidElement, createDescendantContext, createNamedContext, findLastIndex, forwardRefWithAs, getScrollbarOffset, isUndefined, makeId, noop, useDescendant, useDescendants, useForkedRef, useIsomorphicLayoutEffect, usePrevious, useUpdateEffect, wrapEvent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DescendantProvider\", function() { return DescendantProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"assignRef\", function() { return assignRef; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"boolOrBoolString\", function() { return boolOrBoolString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"canUseDOM\", function() { return canUseDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkStyles\", function() { return checkStyles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneValidElement\", function() { return cloneValidElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDescendantContext\", function() { return createDescendantContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createNamedContext\", function() { return createNamedContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findLastIndex\", function() { return findLastIndex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"forwardRefWithAs\", function() { return forwardRefWithAs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getScrollbarOffset\", function() { return getScrollbarOffset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isUndefined\", function() { return isUndefined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeId\", function() { return makeId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"noop\", function() { return noop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useDescendant\", function() { return useDescendant; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useDescendants\", function() { return useDescendants; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useForkedRef\", function() { return useForkedRef; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useIsomorphicLayoutEffect\", function() { return useIsomorphicLayoutEffect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"usePrevious\", function() { return usePrevious; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useUpdateEffect\", function() { return useUpdateEffect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapEvent\", function() { return wrapEvent; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n/**\r\n * React currently throws a warning when using useLayoutEffect on the server.\r\n * To get around it, we can conditionally useEffect on the server (no-op) and\r\n * useLayoutEffect in the browser. We occasionally need useLayoutEffect to\r\n * ensure we don't get a render flash for certain operations, but we may also\r\n * need affected components to render on the server. One example is when setting\r\n * a component's descendants to retrieve their index values.\r\n *\r\n * Important to note that using this hook as an escape hatch will break the\r\n * eslint dependency warnings unless you rename the import to `useLayoutEffect`.\r\n * Use sparingly only when the effect won't effect the rendered HTML to avoid\r\n * any server/client mismatch.\r\n *\r\n * If a useLayoutEffect is needed and the result would create a mismatch, it's\r\n * likely that the component in question shouldn't be rendered on the server at\r\n * all, so a better approach would be to lazily render those in a parent\r\n * component after client-side hydration.\r\n *\r\n * TODO: We are calling useLayoutEffect in a couple of places that will likely\r\n * cause some issues for SSR users, whether the warning shows or not. Audit and\r\n * fix these.\r\n *\r\n * https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\r\n * https://github.com/reduxjs/react-redux/blob/master/src/utils/useIsomorphicLayoutEffect.js\r\n *\r\n * @param effect\r\n * @param deps\r\n */\n\n\nvar useIsomorphicLayoutEffect = /*#__PURE__*/canUseDOM() ? react__WEBPACK_IMPORTED_MODULE_0___default.a.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect;\nvar useLayoutEffect = useIsomorphicLayoutEffect;\nvar checkedPkgs = {};\n/**\r\n * When in dev mode, checks that styles for a given @reach package are loaded.\r\n *\r\n * @param packageName Name of the package to check.\r\n * @example checkStyles(\"dialog\") will check for styles for @reach/dialog\r\n */\n// @ts-ignore\n\nvar checkStyles = function checkStyles(packageName) {};\n\nif (undefined !== \"production\") {\n checkStyles = function checkStyles(pkg) {\n // only check once per package\n if (checkedPkgs[pkg]) return;\n checkedPkgs[pkg] = true;\n\n if (undefined !== \"test\" && parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--reach-\" + pkg), 10) !== 1) {\n console.warn(\"@reach/\" + pkg + \" styles not found. If you are using a bundler like webpack or parcel include this in the entry file of your app before any of your own styles:\\n\\n import \\\"@reach/\" + pkg + \"/styles.css\\\";\\n\\n Otherwise you'll need to include them some other way:\\n\\n <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"node_modules/@reach/\" + pkg + \"/styles.css\\\" />\\n\\n For more information visit https://ui.reach.tech/styling.\\n \");\n }\n };\n}\n/**\r\n * Passes or assigns an arbitrary value to a ref function or object.\r\n *\r\n * @param ref\r\n * @param value\r\n */\n\n\nfunction assignRef(ref, value) {\n if (ref == null) return;\n\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n try {\n // @ts-ignore\n ref.current = value;\n } catch (error) {\n throw new Error(\"Cannot assign value \\\"\" + value + \"\\\" to ref \\\"\" + ref + \"\\\"\");\n }\n }\n}\n\nfunction boolOrBoolString(value) {\n return value === \"false\" ? false : Boolean(value);\n}\n\nfunction canUseDOM() {\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\n}\n\nfunction cloneValidElement(element, props) {\n if (!Object(react__WEBPACK_IMPORTED_MODULE_0__[\"isValidElement\"])(element)) {\n return element;\n }\n\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments[_key];\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"cloneElement\"].apply(void 0, [element, props].concat(children));\n}\n\nfunction createNamedContext(name, defaultValue) {\n var Ctx = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"])(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}\n\nfunction findLastIndex(array, predicate) {\n var length = array.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var n = length - 1;\n\n while (n >= 0) {\n var value = array[n];\n\n if (predicate(value, n, array)) {\n return n;\n }\n\n --n;\n }\n\n return -1;\n}\n/**\r\n * Get the scrollbar offset distance.\r\n */\n\n\nfunction getScrollbarOffset() {\n try {\n if (window.innerWidth > document.documentElement.clientWidth) {\n return window.innerWidth - document.documentElement.clientWidth;\n }\n } catch (err) {}\n\n return 0;\n}\n\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n/**\r\n * Joins strings to format IDs for compound components.\r\n *\r\n * @param args\r\n */\n\n\nfunction makeId() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return args.filter(function (val) {\n return val != null;\n }).join(\"--\");\n}\n/**\r\n * No-op function.\r\n */\n\n\nfunction noop() {}\n/**\r\n * Passes or assigns a value to multiple refs (typically a DOM node). Useful for\r\n * dealing with components that need an explicit ref for DOM calculations but\r\n * also forwards refs assigned by an app.\r\n *\r\n * @param refs Refs to fork\r\n */\n\n\nfunction useForkedRef() {\n for (var _len3 = arguments.length, refs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n refs[_key3] = arguments[_key3];\n }\n\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"])(function () {\n if (refs.every(function (ref) {\n return ref == null;\n })) {\n return null;\n }\n\n return function (node) {\n refs.forEach(function (ref) {\n assignRef(ref, node);\n });\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n/**\r\n * Returns the previous value of a reference after a component update.\r\n *\r\n * @param value\r\n */\n\n\nfunction usePrevious(value) {\n var ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n/**\r\n * Call an effect after a component update, skipping the initial mount.\r\n *\r\n * @param effect Effect to call\r\n * @param deps Effect dependency list\r\n */\n\n\nfunction useUpdateEffect(effect, deps) {\n var mounted = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(false);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (mounted.current) {\n effect();\n } else {\n mounted.current = true;\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, deps);\n}\n/**\r\n * Wraps a lib-defined event handler and a user-defined event handler, returning\r\n * a single handler that allows a user to prevent lib-defined handlers from\r\n * firing.\r\n *\r\n * @param theirHandler User-supplied event handler\r\n * @param ourHandler Library-supplied event handler\r\n */\n\n\nfunction wrapEvent(theirHandler, ourHandler) {\n return function (event) {\n theirHandler && theirHandler(event);\n\n if (!event.defaultPrevented) {\n return ourHandler(event);\n }\n };\n}\n/**\r\n * This is a hack for sure. The thing is, getting a component to intelligently\r\n * infer props based on a component or JSX string passed into an `as` prop is\r\n * kind of a huge pain. Getting it to work and satisfy the contraints of\r\n * `forwardRef` seems dang near impossible. To avoid needing to do this awkward\r\n * type song-and-dance every time we want to forward a ref into a component\r\n * that accepts an `as` prop, we abstract all of that mess to this function for\r\n * the time time being.\r\n *\r\n * TODO: Eventually we should probably just try to get the type defs above\r\n * working across the board, but ain't nobody got time for that mess!\r\n *\r\n * @param Comp\r\n */\n\n\nfunction forwardRefWithAs(comp) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.forwardRef(comp);\n}\n\nfunction createDescendantContext(name, initialValue) {\n if (initialValue === void 0) {\n initialValue = {};\n }\n\n return createNamedContext(name, _extends({\n descendants: [],\n registerDescendant: noop,\n unregisterDescendant: noop\n }, initialValue));\n}\n/**\r\n * This hook registers our descendant by passing it into an array. We can then\r\n * search that array by to find its index when registering it in the component.\r\n * We use this for focus management, keyboard navigation, and typeahead\r\n * functionality for some components.\r\n *\r\n * The hook accepts the element node and (optionally) a key. The key is useful\r\n * if multiple descendants have identical text values and we need to\r\n * differentiate siblings for some reason.\r\n *\r\n * Our main goals with this are:\r\n * 1) maximum composability,\r\n * 2) minimal API friction\r\n * 3) SSR compatibility*\r\n * 4) concurrent safe\r\n * 5) index always up-to-date with the tree despite changes\r\n * 6) works with memoization of any component in the tree (hopefully)\r\n *\r\n * * As for SSR, the good news is that we don't actually need the index on the\r\n * server for most use-cases, as we are only using it to determine the order of\r\n * composed descendants for keyboard navigation. However, in the few cases where\r\n * this is not the case, we can require an explicit index from the app.\r\n */\n\n\nfunction useDescendant(_ref, indexProp) {\n var context = _ref.context,\n element = _ref.element,\n rest = _objectWithoutPropertiesLoose(_ref, [\"context\", \"element\"]);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n forceUpdate = _useState[1];\n\n var _useContext = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(context),\n registerDescendant = _useContext.registerDescendant,\n unregisterDescendant = _useContext.unregisterDescendant,\n descendants = _useContext.descendants; // Prevent any flashing\n\n\n useLayoutEffect(function () {\n if (!element) forceUpdate({}); // @ts-ignore\n\n registerDescendant(_extends({\n element: element\n }, rest));\n return function () {\n return unregisterDescendant(element);\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [element].concat(Object.values(rest)));\n return indexProp !== null && indexProp !== void 0 ? indexProp : descendants.findIndex(function (_ref2) {\n var _el = _ref2.element;\n return _el === element;\n });\n}\n\nfunction useDescendants() {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])([]);\n}\n\nfunction DescendantProvider(_ref3) {\n var Ctx = _ref3.context,\n children = _ref3.children,\n items = _ref3.items,\n set = _ref3.set;\n var registerDescendant = react__WEBPACK_IMPORTED_MODULE_0___default.a.useCallback(function (_ref4) {\n var element = _ref4.element,\n rest = _objectWithoutPropertiesLoose(_ref4, [\"element\"]);\n\n if (!element) {\n return;\n }\n\n set(function (items) {\n if (items.find(function (_ref5) {\n var _el = _ref5.element;\n return _el === element;\n }) == null) {\n /*\r\n * When registering a descendant, we need to make sure we insert in\r\n * into the array in the same order that it appears in the DOM. So as\r\n * new descendants are added or maybe some are removed, we always know\r\n * that the array is up-to-date and correct.\r\n *\r\n * So here we look at our registered descendants and see if the new\r\n * element we are adding appears earlier than an existing descendant's\r\n * DOM node via `node.compareDocumentPosition`. If it does, we insert\r\n * the new element at this index. Because `registerDescendant` will be\r\n * called in an effect every time the descendants state value changes,\r\n * we should be sure that this index is accurate when descendent\r\n * elements come or go from our component.\r\n */\n var index = items.findIndex(function (_ref6) {\n var existingElement = _ref6.element;\n\n if (!existingElement || !element) {\n return false;\n }\n /*\r\n * Does this element's DOM node appear before another item in the\r\n * array in our DOM tree? If so, return true to grab the index at\r\n * this point in the array so we know where to insert the new\r\n * element.\r\n */\n\n\n return Boolean(existingElement.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING);\n });\n\n var newItem = _extends({\n element: element\n }, rest); // If an index is not found we will push the element to the end.\n\n\n if (index === -1) {\n return [].concat(items, [newItem]);\n }\n\n return [].concat(items.slice(0, index), [newItem], items.slice(index));\n }\n\n return items;\n });\n },\n /*\r\n * setDescendants is a state setter initialized by the useDescendants hook.\r\n * We can safely ignore the lint warning here because it will not change\r\n * between renders.\r\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n var unregisterDescendant = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (element) {\n if (!element) {\n return;\n }\n\n set(function (items) {\n return items.filter(function (_ref7) {\n var _el = _ref7.element;\n return element !== _el;\n });\n });\n },\n /*\r\n * setDescendants is a state setter initialized by the useDescendants hook.\r\n * We can safely ignore the lint warning here because it will not change\r\n * between renders.\r\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []); // Not sure about this just yet, may bail on this and let components deal\n\n /* let focusNodes = descendants\r\n .filter(({ disabled }) => !disabled)\r\n .map(({ element }) => element); */\n // @ts-ignore\n\n var value = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"])(function () {\n return {\n descendants: items,\n registerDescendant: registerDescendant,\n unregisterDescendant: unregisterDescendant\n };\n }, [items, registerDescendant, unregisterDescendant]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Ctx.Provider, {\n value: value\n }, children);\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0ByZWFjaC91dGlscy9kaXN0L3V0aWxzLmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaW5kZXgudHN4P2RlYjciXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuaW1wb3J0IFJlYWN0LCB7XG4gIGNsb25lRWxlbWVudCxcbiAgY3JlYXRlQ29udGV4dCxcbiAgaXNWYWxpZEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGVcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBBcyxcbiAgQXNzaWduYWJsZVJlZixcbiAgQ29tcG9uZW50V2l0aEFzLFxuICBDb21wb25lbnRXaXRoRm9yd2FyZGVkUmVmLFxuICBEaXN0cmlidXRpdmVPbWl0LFxuICBQcm9wc0Zyb21BcyxcbiAgUHJvcHNXaXRoQXNcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuICogVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbiAqIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci4gV2Ugb2NjYXNpb25hbGx5IG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvXG4gKiBlbnN1cmUgd2UgZG9uJ3QgZ2V0IGEgcmVuZGVyIGZsYXNoIGZvciBjZXJ0YWluIG9wZXJhdGlvbnMsIGJ1dCB3ZSBtYXkgYWxzb1xuICogbmVlZCBhZmZlY3RlZCBjb21wb25lbnRzIHRvIHJlbmRlciBvbiB0aGUgc2VydmVyLiBPbmUgZXhhbXBsZSBpcyB3aGVuIHNldHRpbmdcbiAqIGEgY29tcG9uZW50J3MgZGVzY2VuZGFudHMgdG8gcmV0cmlldmUgdGhlaXIgaW5kZXggdmFsdWVzLlxuICpcbiAqIEltcG9ydGFudCB0byBub3RlIHRoYXQgdXNpbmcgdGhpcyBob29rIGFzIGFuIGVzY2FwZSBoYXRjaCB3aWxsIGJyZWFrIHRoZVxuICogZXNsaW50IGRlcGVuZGVuY3kgd2FybmluZ3MgdW5sZXNzIHlvdSByZW5hbWUgdGhlIGltcG9ydCB0byBgdXNlTGF5b3V0RWZmZWN0YC5cbiAqIFVzZSBzcGFyaW5nbHkgb25seSB3aGVuIHRoZSBlZmZlY3Qgd29uJ3QgZWZmZWN0IHRoZSByZW5kZXJlZCBIVE1MIHRvIGF2b2lkXG4gKiBhbnkgc2VydmVyL2NsaWVudCBtaXNtYXRjaC5cbiAqXG4gKiBJZiBhIHVzZUxheW91dEVmZmVjdCBpcyBuZWVkZWQgYW5kIHRoZSByZXN1bHQgd291bGQgY3JlYXRlIGEgbWlzbWF0Y2gsIGl0J3NcbiAqIGxpa2VseSB0aGF0IHRoZSBjb21wb25lbnQgaW4gcXVlc3Rpb24gc2hvdWxkbid0IGJlIHJlbmRlcmVkIG9uIHRoZSBzZXJ2ZXIgYXRcbiAqIGFsbCwgc28gYSBiZXR0ZXIgYXBwcm9hY2ggd291bGQgYmUgdG8gbGF6aWx5IHJlbmRlciB0aG9zZSBpbiBhIHBhcmVudFxuICogY29tcG9uZW50IGFmdGVyIGNsaWVudC1zaWRlIGh5ZHJhdGlvbi5cbiAqXG4gKiBUT0RPOiBXZSBhcmUgY2FsbGluZyB1c2VMYXlvdXRFZmZlY3QgaW4gYSBjb3VwbGUgb2YgcGxhY2VzIHRoYXQgd2lsbCBsaWtlbHlcbiAqIGNhdXNlIHNvbWUgaXNzdWVzIGZvciBTU1IgdXNlcnMsIHdoZXRoZXIgdGhlIHdhcm5pbmcgc2hvd3Mgb3Igbm90LiBBdWRpdCBhbmRcbiAqIGZpeCB0aGVzZS5cbiAqXG4gKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9nYWVhcm9uL2U3ZDk3Y2RmMzhhMjkwNzkyNGVhMTJlNGViZGYzYzg1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWFjdC1yZWR1eC9ibG9iL21hc3Rlci9zcmMvdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qc1xuICpcbiAqIEBwYXJhbSBlZmZlY3RcbiAqIEBwYXJhbSBkZXBzXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NKClcbiAgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3RcbiAgOiBSZWFjdC51c2VFZmZlY3Q7XG5cbmNvbnN0IHVzZUxheW91dEVmZmVjdCA9IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q7XG5cbmxldCBjaGVja2VkUGtnczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuLyoqXG4gKiBXaGVuIGluIGRldiBtb2RlLCBjaGVja3MgdGhhdCBzdHlsZXMgZm9yIGEgZ2l2ZW4gQHJlYWNoIHBhY2thZ2UgYXJlIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZU5hbWUgTmFtZSBvZiB0aGUgcGFja2FnZSB0byBjaGVjay5cbiAqIEBleGFtcGxlIGNoZWNrU3R5bGVzKFwiZGlhbG9nXCIpIHdpbGwgY2hlY2sgZm9yIHN0eWxlcyBmb3IgQHJlYWNoL2RpYWxvZ1xuICovXG4vLyBAdHMtaWdub3JlXG5sZXQgY2hlY2tTdHlsZXMgPSAocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge307XG5cbmlmIChfX0RFVl9fKSB7XG4gIGNoZWNrU3R5bGVzID0gKHBrZzogc3RyaW5nKSA9PiB7XG4gICAgLy8gb25seSBjaGVjayBvbmNlIHBlciBwYWNrYWdlXG4gICAgaWYgKGNoZWNrZWRQa2dzW3BrZ10pIHJldHVybjtcbiAgICBjaGVja2VkUGtnc1twa2ddID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInRlc3RcIiAmJlxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIHdpbmRvd1xuICAgICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoYC0tcmVhY2gtJHtwa2d9YCksXG4gICAgICAgIDEwXG4gICAgICApICE9PSAxXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBAcmVhY2gvJHtwa2d9IHN0eWxlcyBub3QgZm91bmQuIElmIHlvdSBhcmUgdXNpbmcgYSBidW5kbGVyIGxpa2Ugd2VicGFjayBvciBwYXJjZWwgaW5jbHVkZSB0aGlzIGluIHRoZSBlbnRyeSBmaWxlIG9mIHlvdXIgYXBwIGJlZm9yZSBhbnkgb2YgeW91ciBvd24gc3R5bGVzOlxuXG4gICAgaW1wb3J0IFwiQHJlYWNoLyR7cGtnfS9zdHlsZXMuY3NzXCI7XG5cbiAgT3RoZXJ3aXNlIHlvdSdsbCBuZWVkIHRvIGluY2x1ZGUgdGhlbSBzb21lIG90aGVyIHdheTpcblxuICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwibm9kZV9tb2R1bGVzL0ByZWFjaC8ke3BrZ30vc3R5bGVzLmNzc1wiIC8+XG5cbiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cHM6Ly91aS5yZWFjaC50ZWNoL3N0eWxpbmcuXG4gIGBcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgeyBjaGVja1N0eWxlcyB9O1xuXG4vKipcbiAqIFBhc3NlcyBvciBhc3NpZ25zIGFuIGFyYml0cmFyeSB2YWx1ZSB0byBhIHJlZiBmdW5jdGlvbiBvciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHJlZlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWY8VCA9IGFueT4ocmVmOiBBc3NpZ25hYmxlUmVmPFQ+LCB2YWx1ZTogYW55KSB7XG4gIGlmIChyZWYgPT0gbnVsbCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlIFwiJHt2YWx1ZX1cIiB0byByZWYgXCIke3JlZn1cImApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9vbE9yQm9vbFN0cmluZyh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhblVzZURPTSgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVWYWxpZEVsZW1lbnQ8UD4oXG4gIGVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDxQPiB8IFJlYWN0LlJlYWN0Tm9kZSxcbiAgcHJvcHM/OiBQYXJ0aWFsPFA+ICYgUmVhY3QuQXR0cmlidXRlcyxcbiAgLi4uY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVtdXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQ8UD4gfCBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGNsb25lRWxlbWVudChlbGVtZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmFtZWRDb250ZXh0PFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRWYWx1ZTogVFxuKTogUmVhY3QuQ29udGV4dDxUPiB7XG4gIGNvbnN0IEN0eCA9IGNyZWF0ZUNvbnRleHQ8VD4oZGVmYXVsdFZhbHVlKTtcbiAgQ3R4LmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgcmV0dXJuIEN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXg8VCA9IGFueT4oXG4gIGFycmF5OiBUW10sXG4gIHByZWRpY2F0ZTogKGVsZW1lbnQ6IFQsIGluZGV4PzogbnVtYmVyLCBhcnI/OiBUW10pID0+IGJvb2xlYW5cbik6IG51bWJlciB7XG4gIGxldCBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGxldCBuID0gbGVuZ3RoIC0gMTtcbiAgd2hpbGUgKG4gPj0gMCkge1xuICAgIGxldCB2YWx1ZSA9IGFycmF5W25dO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIG4sIGFycmF5KSkge1xuICAgICAgcmV0dXJuIG47XG4gICAgfVxuICAgIC0tbjtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzY3JvbGxiYXIgb2Zmc2V0IGRpc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyT2Zmc2V0KCkge1xuICB0cnkge1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7fVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcbn1cblxuLyoqXG4gKiBKb2lucyBzdHJpbmdzIHRvIGZvcm1hdCBJRHMgZm9yIGNvbXBvdW5kIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJZCguLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZClbXSkge1xuICByZXR1cm4gYXJncy5maWx0ZXIodmFsID0+IHZhbCAhPSBudWxsKS5qb2luKFwiLS1cIik7XG59XG5cbi8qKlxuICogTm8tb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge31cblxuLyoqXG4gKiBQYXNzZXMgb3IgYXNzaWducyBhIHZhbHVlIHRvIG11bHRpcGxlIHJlZnMgKHR5cGljYWxseSBhIERPTSBub2RlKS4gVXNlZnVsIGZvclxuICogZGVhbGluZyB3aXRoIGNvbXBvbmVudHMgdGhhdCBuZWVkIGFuIGV4cGxpY2l0IHJlZiBmb3IgRE9NIGNhbGN1bGF0aW9ucyBidXRcbiAqIGFsc28gZm9yd2FyZHMgcmVmcyBhc3NpZ25lZCBieSBhbiBhcHAuXG4gKlxuICogQHBhcmFtIHJlZnMgUmVmcyB0byBmb3JrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JrZWRSZWY8VCA9IGFueT4oLi4ucmVmczogQXNzaWduYWJsZVJlZjxUPltdKSB7XG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmcy5ldmVyeShyZWYgPT4gcmVmID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChub2RlOiBhbnkpID0+IHtcbiAgICAgIHJlZnMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICBhc3NpZ25SZWYocmVmLCBub2RlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCByZWZzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBhIHJlZmVyZW5jZSBhZnRlciBhIGNvbXBvbmVudCB1cGRhdGUuXG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcmV2aW91czxUID0gYW55Pih2YWx1ZTogVCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8VCB8IG51bGw+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbi8qKlxuICogQ2FsbCBhbiBlZmZlY3QgYWZ0ZXIgYSBjb21wb25lbnQgdXBkYXRlLCBza2lwcGluZyB0aGUgaW5pdGlhbCBtb3VudC5cbiAqXG4gKiBAcGFyYW0gZWZmZWN0IEVmZmVjdCB0byBjYWxsXG4gKiBAcGFyYW0gZGVwcyBFZmZlY3QgZGVwZW5kZW5jeSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVFZmZlY3QoZWZmZWN0OiAoKSA9PiBhbnksIGRlcHM/OiBhbnlbXSkge1xuICBjb25zdCBtb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW91bnRlZC5jdXJyZW50KSB7XG4gICAgICBlZmZlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBkZXBzKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIGxpYi1kZWZpbmVkIGV2ZW50IGhhbmRsZXIgYW5kIGEgdXNlci1kZWZpbmVkIGV2ZW50IGhhbmRsZXIsIHJldHVybmluZ1xuICogYSBzaW5nbGUgaGFuZGxlciB0aGF0IGFsbG93cyBhIHVzZXIgdG8gcHJldmVudCBsaWItZGVmaW5lZCBoYW5kbGVycyBmcm9tXG4gKiBmaXJpbmcuXG4gKlxuICogQHBhcmFtIHRoZWlySGFuZGxlciBVc2VyLXN1cHBsaWVkIGV2ZW50IGhhbmRsZXJcbiAqIEBwYXJhbSBvdXJIYW5kbGVyIExpYnJhcnktc3VwcGxpZWQgZXZlbnQgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEV2ZW50PEUgZXh0ZW5kcyBSZWFjdC5TeW50aGV0aWNFdmVudCB8IEV2ZW50PihcbiAgdGhlaXJIYW5kbGVyOiAoKGV2ZW50OiBFKSA9PiBhbnkpIHwgdW5kZWZpbmVkLFxuICBvdXJIYW5kbGVyOiAoZXZlbnQ6IEUpID0+IGFueVxuKTogKGV2ZW50OiBFKSA9PiBhbnkge1xuICByZXR1cm4gZXZlbnQgPT4ge1xuICAgIHRoZWlySGFuZGxlciAmJiB0aGVpckhhbmRsZXIoZXZlbnQpO1xuICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuIG91ckhhbmRsZXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGFjayBmb3Igc3VyZS4gVGhlIHRoaW5nIGlzLCBnZXR0aW5nIGEgY29tcG9uZW50IHRvIGludGVsbGlnZW50bHlcbiAqIGluZmVyIHByb3BzIGJhc2VkIG9uIGEgY29tcG9uZW50IG9yIEpTWCBzdHJpbmcgcGFzc2VkIGludG8gYW4gYGFzYCBwcm9wIGlzXG4gKiBraW5kIG9mIGEgaHVnZSBwYWluLiBHZXR0aW5nIGl0IHRvIHdvcmsgYW5kIHNhdGlzZnkgdGhlIGNvbnRyYWludHMgb2ZcbiAqIGBmb3J3YXJkUmVmYCBzZWVtcyBkYW5nIG5lYXIgaW1wb3NzaWJsZS4gVG8gYXZvaWQgbmVlZGluZyB0byBkbyB0aGlzIGF3a3dhcmRcbiAqIHR5cGUgc29uZy1hbmQtZGFuY2UgZXZlcnkgdGltZSB3ZSB3YW50IHRvIGZvcndhcmQgYSByZWYgaW50byBhIGNvbXBvbmVudFxuICogdGhhdCBhY2NlcHRzIGFuIGBhc2AgcHJvcCwgd2UgYWJzdHJhY3QgYWxsIG9mIHRoYXQgbWVzcyB0byB0aGlzIGZ1bmN0aW9uIGZvclxuICogdGhlIHRpbWUgdGltZSBiZWluZy5cbiAqXG4gKiBUT0RPOiBFdmVudHVhbGx5IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHRyeSB0byBnZXQgdGhlIHR5cGUgZGVmcyBhYm92ZVxuICogd29ya2luZyBhY3Jvc3MgdGhlIGJvYXJkLCBidXQgYWluJ3Qgbm9ib2R5IGdvdCB0aW1lIGZvciB0aGF0IG1lc3MhXG4gKlxuICogQHBhcmFtIENvbXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWZXaXRoQXM8UCwgVCBleHRlbmRzIEFzPihcbiAgY29tcDogKHByb3BzOiBQcm9wc0Zyb21BczxULCBQPiwgcmVmOiBSZWFjdC5SZWZPYmplY3Q8YW55PikgPT4gSlNYLkVsZW1lbnRcbikge1xuICByZXR1cm4gUmVhY3QuZm9yd2FyZFJlZihjb21wIGFzIGFueSkgYXMgQ29tcG9uZW50V2l0aEFzPFQsIFA+O1xufVxuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB7XG4gIEFzLFxuICBBc3NpZ25hYmxlUmVmLFxuICBDb21wb25lbnRXaXRoQXMsXG4gIENvbXBvbmVudFdpdGhGb3J3YXJkZWRSZWYsXG4gIERpc3RyaWJ1dGl2ZU9taXQsXG4gIFByb3BzRnJvbUFzLFxuICBQcm9wc1dpdGhBc1xufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRPRE86IE1vdmUgdG8gQHJlYWNoL2Rlc2NlbmRhbnRzIG9uY2UgZnVsbHkgdGVzdGVkIGFuZCBpbXBsZW1lbnRlZFxuXG5leHBvcnQgdHlwZSBEZXNjZW5kYW50PFQsIFAgPSB7fT4gPSBQICYge1xuICBlbGVtZW50OiAoVCBleHRlbmRzIEhUTUxFbGVtZW50ID8gVCA6IEhUTUxFbGVtZW50KSB8IG51bGw7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElEZXNjZW5kYW50Q29udGV4dDxULCBQPiB7XG4gIGRlc2NlbmRhbnRzOiBEZXNjZW5kYW50PFQsIFA+W107XG4gIHJlZ2lzdGVyRGVzY2VuZGFudChkZXNjZW5kYW50OiBEZXNjZW5kYW50PFQsIFA+KTogdm9pZDtcbiAgdW5yZWdpc3RlckRlc2NlbmRhbnQoXG4gICAgZWxlbWVudDogKFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA/IFQgOiBIVE1MRWxlbWVudCkgfCBudWxsXG4gICk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZXNjZW5kYW50Q29udGV4dDxULCBQID0ge30+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZSA9IHt9XG4pIHtcbiAgcmV0dXJuIGNyZWF0ZU5hbWVkQ29udGV4dChuYW1lLCB7XG4gICAgZGVzY2VuZGFudHM6IFtdLFxuICAgIHJlZ2lzdGVyRGVzY2VuZGFudDogbm9vcCxcbiAgICB1bnJlZ2lzdGVyRGVzY2VuZGFudDogbm9vcCxcbiAgICAuLi5pbml0aWFsVmFsdWVcbiAgfSBhcyBJRGVzY2VuZGFudENvbnRleHQ8VCwgUD4pO1xufVxuXG4vKipcbiAqIFRoaXMgaG9vayByZWdpc3RlcnMgb3VyIGRlc2NlbmRhbnQgYnkgcGFzc2luZyBpdCBpbnRvIGFuIGFycmF5LiBXZSBjYW4gdGhlblxuICogc2VhcmNoIHRoYXQgYXJyYXkgYnkgdG8gZmluZCBpdHMgaW5kZXggd2hlbiByZWdpc3RlcmluZyBpdCBpbiB0aGUgY29tcG9uZW50LlxuICogV2UgdXNlIHRoaXMgZm9yIGZvY3VzIG1hbmFnZW1lbnQsIGtleWJvYXJkIG5hdmlnYXRpb24sIGFuZCB0eXBlYWhlYWRcbiAqIGZ1bmN0aW9uYWxpdHkgZm9yIHNvbWUgY29tcG9uZW50cy5cbiAqXG4gKiBUaGUgaG9vayBhY2NlcHRzIHRoZSBlbGVtZW50IG5vZGUgYW5kIChvcHRpb25hbGx5KSBhIGtleS4gVGhlIGtleSBpcyB1c2VmdWxcbiAqIGlmIG11bHRpcGxlIGRlc2NlbmRhbnRzIGhhdmUgaWRlbnRpY2FsIHRleHQgdmFsdWVzIGFuZCB3ZSBuZWVkIHRvXG4gKiBkaWZmZXJlbnRpYXRlIHNpYmxpbmdzIGZvciBzb21lIHJlYXNvbi5cbiAqXG4gKiBPdXIgbWFpbiBnb2FscyB3aXRoIHRoaXMgYXJlOlxuICogICAxKSBtYXhpbXVtIGNvbXBvc2FiaWxpdHksXG4gKiAgIDIpIG1pbmltYWwgQVBJIGZyaWN0aW9uXG4gKiAgIDMpIFNTUiBjb21wYXRpYmlsaXR5KlxuICogICA0KSBjb25jdXJyZW50IHNhZmVcbiAqICAgNSkgaW5kZXggYWx3YXlzIHVwLXRvLWRhdGUgd2l0aCB0aGUgdHJlZSBkZXNwaXRlIGNoYW5nZXNcbiAqICAgNikgd29ya3Mgd2l0aCBtZW1vaXphdGlvbiBvZiBhbnkgY29tcG9uZW50IGluIHRoZSB0cmVlIChob3BlZnVsbHkpXG4gKlxuICogKiBBcyBmb3IgU1NSLCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaW5kZXggb24gdGhlXG4gKiBzZXJ2ZXIgZm9yIG1vc3QgdXNlLWNhc2VzLCBhcyB3ZSBhcmUgb25seSB1c2luZyBpdCB0byBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mXG4gKiBjb21wb3NlZCBkZXNjZW5kYW50cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbi4gSG93ZXZlciwgaW4gdGhlIGZldyBjYXNlcyB3aGVyZVxuICogdGhpcyBpcyBub3QgdGhlIGNhc2UsIHdlIGNhbiByZXF1aXJlIGFuIGV4cGxpY2l0IGluZGV4IGZyb20gdGhlIGFwcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlc2NlbmRhbnQ8VCwgUD4oXG4gIHtcbiAgICBjb250ZXh0LFxuICAgIGVsZW1lbnQsXG4gICAgLi4ucmVzdFxuICB9OiBEZXNjZW5kYW50PFQsIFA+ICYgeyBjb250ZXh0OiBSZWFjdC5Db250ZXh0PElEZXNjZW5kYW50Q29udGV4dDxULCBQPj4gfSxcbiAgaW5kZXhQcm9wPzogbnVtYmVyXG4pIHtcbiAgbGV0IFssIGZvcmNlVXBkYXRlXSA9IHVzZVN0YXRlKCk7XG4gIGxldCB7IHJlZ2lzdGVyRGVzY2VuZGFudCwgdW5yZWdpc3RlckRlc2NlbmRhbnQsIGRlc2NlbmRhbnRzIH0gPSB1c2VDb250ZXh0KFxuICAgIGNvbnRleHRcbiAgKTtcblxuICAvLyBQcmV2ZW50IGFueSBmbGFzaGluZ1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgZm9yY2VVcGRhdGUoe30pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZWdpc3RlckRlc2NlbmRhbnQoeyBlbGVtZW50LCAuLi5yZXN0IH0pO1xuICAgIHJldHVybiAoKSA9PiB1bnJlZ2lzdGVyRGVzY2VuZGFudChlbGVtZW50KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtlbGVtZW50LCAuLi5PYmplY3QudmFsdWVzKHJlc3QpXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpbmRleFByb3AgPz8gZGVzY2VuZGFudHMuZmluZEluZGV4KCh7IGVsZW1lbnQ6IF9lbCB9KSA9PiBfZWwgPT09IGVsZW1lbnQpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZXNjZW5kYW50czxULCBQID0ge30+KCkge1xuICByZXR1cm4gdXNlU3RhdGU8RGVzY2VuZGFudDxULCBQPltdPihbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZXNjZW5kYW50UHJvdmlkZXI8VCwgUD4oe1xuICBjb250ZXh0OiBDdHgsXG4gIGNoaWxkcmVuLFxuICBpdGVtcyxcbiAgc2V0XG59OiB7XG4gIGNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8SURlc2NlbmRhbnRDb250ZXh0PFQsIFA+PjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXRlbXM6IERlc2NlbmRhbnQ8VCwgUD5bXTtcbiAgc2V0OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxEZXNjZW5kYW50PFQsIFA+W10+Pjtcbn0pIHtcbiAgbGV0IHJlZ2lzdGVyRGVzY2VuZGFudCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh7IGVsZW1lbnQsIC4uLnJlc3QgfTogRGVzY2VuZGFudDxULCBQPikgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0KGl0ZW1zID0+IHtcbiAgICAgICAgaWYgKGl0ZW1zLmZpbmQoKHsgZWxlbWVudDogX2VsIH0pID0+IF9lbCA9PT0gZWxlbWVudCkgPT0gbnVsbCkge1xuICAgICAgICAgIC8qXG4gICAgICAgICAgICogV2hlbiByZWdpc3RlcmluZyBhIGRlc2NlbmRhbnQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGluc2VydCBpblxuICAgICAgICAgICAqIGludG8gdGhlIGFycmF5IGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgaXQgYXBwZWFycyBpbiB0aGUgRE9NLiBTbyBhc1xuICAgICAgICAgICAqIG5ldyBkZXNjZW5kYW50cyBhcmUgYWRkZWQgb3IgbWF5YmUgc29tZSBhcmUgcmVtb3ZlZCwgd2UgYWx3YXlzIGtub3dcbiAgICAgICAgICAgKiB0aGF0IHRoZSBhcnJheSBpcyB1cC10by1kYXRlIGFuZCBjb3JyZWN0LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogU28gaGVyZSB3ZSBsb29rIGF0IG91ciByZWdpc3RlcmVkIGRlc2NlbmRhbnRzIGFuZCBzZWUgaWYgdGhlIG5ld1xuICAgICAgICAgICAqIGVsZW1lbnQgd2UgYXJlIGFkZGluZyBhcHBlYXJzIGVhcmxpZXIgdGhhbiBhbiBleGlzdGluZyBkZXNjZW5kYW50J3NcbiAgICAgICAgICAgKiBET00gbm9kZSB2aWEgYG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25gLiBJZiBpdCBkb2VzLCB3ZSBpbnNlcnRcbiAgICAgICAgICAgKiB0aGUgbmV3IGVsZW1lbnQgYXQgdGhpcyBpbmRleC4gQmVjYXVzZSBgcmVnaXN0ZXJEZXNjZW5kYW50YCB3aWxsIGJlXG4gICAgICAgICAgICogY2FsbGVkIGluIGFuIGVmZmVjdCBldmVyeSB0aW1lIHRoZSBkZXNjZW5kYW50cyBzdGF0ZSB2YWx1ZSBjaGFuZ2VzLFxuICAgICAgICAgICAqIHdlIHNob3VsZCBiZSBzdXJlIHRoYXQgdGhpcyBpbmRleCBpcyBhY2N1cmF0ZSB3aGVuIGRlc2NlbmRlbnRcbiAgICAgICAgICAgKiBlbGVtZW50cyBjb21lIG9yIGdvIGZyb20gb3VyIGNvbXBvbmVudC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKHsgZWxlbWVudDogZXhpc3RpbmdFbGVtZW50IH0pID0+IHtcbiAgICAgICAgICAgIGlmICghZXhpc3RpbmdFbGVtZW50IHx8ICFlbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBEb2VzIHRoaXMgZWxlbWVudCdzIERPTSBub2RlIGFwcGVhciBiZWZvcmUgYW5vdGhlciBpdGVtIGluIHRoZVxuICAgICAgICAgICAgICogYXJyYXkgaW4gb3VyIERPTSB0cmVlPyBJZiBzbywgcmV0dXJuIHRydWUgdG8gZ3JhYiB0aGUgaW5kZXggYXRcbiAgICAgICAgICAgICAqIHRoaXMgcG9pbnQgaW4gdGhlIGFycmF5IHNvIHdlIGtub3cgd2hlcmUgdG8gaW5zZXJ0IHRoZSBuZXdcbiAgICAgICAgICAgICAqIGVsZW1lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgICAgICAgICBleGlzdGluZ0VsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudCkgJlxuICAgICAgICAgICAgICAgIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGV0IG5ld0l0ZW0gPSB7IGVsZW1lbnQsIC4uLnJlc3QgfSBhcyBEZXNjZW5kYW50PFQsIFA+O1xuXG4gICAgICAgICAgLy8gSWYgYW4gaW5kZXggaXMgbm90IGZvdW5kIHdlIHdpbGwgcHVzaCB0aGUgZWxlbWVudCB0byB0aGUgZW5kLlxuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uaXRlbXMsIG5ld0l0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gWy4uLml0ZW1zLnNsaWNlKDAsIGluZGV4KSwgbmV3SXRlbSwgLi4uaXRlbXMuc2xpY2UoaW5kZXgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8qXG4gICAgICogc2V0RGVzY2VuZGFudHMgaXMgYSBzdGF0ZSBzZXR0ZXIgaW5pdGlhbGl6ZWQgYnkgdGhlIHVzZURlc2NlbmRhbnRzIGhvb2suXG4gICAgICogV2UgY2FuIHNhZmVseSBpZ25vcmUgdGhlIGxpbnQgd2FybmluZyBoZXJlIGJlY2F1c2UgaXQgd2lsbCBub3QgY2hhbmdlXG4gICAgICogYmV0d2VlbiByZW5kZXJzLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXVxuICApO1xuXG4gIGxldCB1bnJlZ2lzdGVyRGVzY2VuZGFudCA9IHVzZUNhbGxiYWNrKFxuICAgIChlbGVtZW50OiBEZXNjZW5kYW50PFQ+W1wiZWxlbWVudFwiXSkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0KGl0ZW1zID0+IGl0ZW1zLmZpbHRlcigoeyBlbGVtZW50OiBfZWwgfSkgPT4gZWxlbWVudCAhPT0gX2VsKSk7XG4gICAgfSxcbiAgICAvKlxuICAgICAqIHNldERlc2NlbmRhbnRzIGlzIGEgc3RhdGUgc2V0dGVyIGluaXRpYWxpemVkIGJ5IHRoZSB1c2VEZXNjZW5kYW50cyBob29rLlxuICAgICAqIFdlIGNhbiBzYWZlbHkgaWdub3JlIHRoZSBsaW50IHdhcm5pbmcgaGVyZSBiZWNhdXNlIGl0IHdpbGwgbm90IGNoYW5nZVxuICAgICAqIGJldHdlZW4gcmVuZGVycy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW11cbiAgKTtcblxuICAvLyBOb3Qgc3VyZSBhYm91dCB0aGlzIGp1c3QgeWV0LCBtYXkgYmFpbCBvbiB0aGlzIGFuZCBsZXQgY29tcG9uZW50cyBkZWFsXG4gIC8qIGxldCBmb2N1c05vZGVzID0gZGVzY2VuZGFudHNcbiAgICAuZmlsdGVyKCh7IGRpc2FibGVkIH0pID0+ICFkaXNhYmxlZClcbiAgICAubWFwKCh7IGVsZW1lbnQgfSkgPT4gZWxlbWVudCk7ICovXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCB2YWx1ZTogSURlc2NlbmRhbnRDb250ZXh0PFQsIFA+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NlbmRhbnRzOiBpdGVtcyxcbiAgICAgIHJlZ2lzdGVyRGVzY2VuZGFudCxcbiAgICAgIHVucmVnaXN0ZXJEZXNjZW5kYW50XG4gICAgfTtcbiAgfSwgW2l0ZW1zLCByZWdpc3RlckRlc2NlbmRhbnQsIHVucmVnaXN0ZXJEZXNjZW5kYW50XSk7XG5cbiAgcmV0dXJuIDxDdHguUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9DdHguUHJvdmlkZXI+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkE7QUFJQTtBQUVBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQVlBO0FBMUJBO0FBNEJBO0FBSUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBOzs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFBQTtBQUFBOzs7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQUE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUxBO0FBQUE7QUFXQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUpBO0FBQ0E7QUFEQTtBQVFBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBR0E7QUFDQTtBQUNBO0FBMkJBO0FBRUE7QUFBQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQUFBO0FBUUE7QUFDQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFNQTtBQVZBO0FBQ0E7QUFlQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXhDQTtBQU5BO0FBaURBOzs7OztBQUtBO0FBdERBO0FBMERBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQVFBOzs7OztBQUtBO0FBbEZBO0FBQ0E7QUFzRkE7OztBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@reach/utils/dist/utils.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/backend.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/backend.js ***! - \******************************************************/ -/*! exports provided: BrowserBackend */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserBackend\", function() { return BrowserBackend; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _eventbuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./eventbuilder */ \"../node_modules/@sentry/browser/esm/eventbuilder.js\");\n/* harmony import */ var _transports__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./transports */ \"../node_modules/@sentry/browser/esm/transports/index.js\");\n\n\n\n\n\n\n/**\n * The Sentry Browser SDK Backend.\n * @hidden\n */\n\nvar BrowserBackend =\n/** @class */\nfunction (_super) {\n tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"](BrowserBackend, _super);\n\n function BrowserBackend() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype._setupTransport = function () {\n if (!this._options.dsn) {\n // We return the noop transport here in case there is no Dsn.\n return _super.prototype._setupTransport.call(this);\n }\n\n var transportOptions = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._options.transportOptions, {\n dsn: this._options.dsn\n });\n\n if (this._options.transport) {\n return new this._options.transport(transportOptions);\n }\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"supportsFetch\"])()) {\n return new _transports__WEBPACK_IMPORTED_MODULE_5__[\"FetchTransport\"](transportOptions);\n }\n\n return new _transports__WEBPACK_IMPORTED_MODULE_5__[\"XHRTransport\"](transportOptions);\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype.eventFromException = function (exception, hint) {\n var syntheticException = hint && hint.syntheticException || undefined;\n var event = Object(_eventbuilder__WEBPACK_IMPORTED_MODULE_4__[\"eventFromUnknownInput\"])(exception, syntheticException, {\n attachStacktrace: this._options.attachStacktrace\n });\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addExceptionMechanism\"])(event, {\n handled: true,\n type: 'generic'\n });\n event.level = _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].Error;\n\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"SyncPromise\"].resolve(event);\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype.eventFromMessage = function (message, level, hint) {\n if (level === void 0) {\n level = _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].Info;\n }\n\n var syntheticException = hint && hint.syntheticException || undefined;\n var event = Object(_eventbuilder__WEBPACK_IMPORTED_MODULE_4__[\"eventFromString\"])(message, syntheticException, {\n attachStacktrace: this._options.attachStacktrace\n });\n event.level = level;\n\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"SyncPromise\"].resolve(event);\n };\n\n return BrowserBackend;\n}(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseBackend\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vYmFja2VuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvYmFja2VuZC50cz9jNjQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VCYWNrZW5kIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBFdmVudEhpbnQsIE9wdGlvbnMsIFNldmVyaXR5LCBUcmFuc3BvcnQgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSwgc3VwcG9ydHNGZXRjaCwgU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgZXZlbnRGcm9tU3RyaW5nLCBldmVudEZyb21Vbmtub3duSW5wdXQgfSBmcm9tICcuL2V2ZW50YnVpbGRlcic7XG5pbXBvcnQgeyBGZXRjaFRyYW5zcG9ydCwgWEhSVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTZW50cnkgQnJvd3NlciBTREsuXG4gKiBAc2VlIEJyb3dzZXJDbGllbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlck9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgcGF0dGVybiBmb3IgZXJyb3IgVVJMcyB3aGljaCBzaG91bGQgbm90IGJlIHNlbnQgdG8gU2VudHJ5LlxuICAgKiBUbyB3aGl0ZWxpc3QgY2VydGFpbiBlcnJvcnMgaW5zdGVhZCwgdXNlIHtAbGluayBPcHRpb25zLndoaXRlbGlzdFVybHN9LlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZXJyb3JzIHdpbGwgYmUgc2VudC5cbiAgICovXG4gIGJsYWNrbGlzdFVybHM/OiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuXG4gIC8qKlxuICAgKiBBIHBhdHRlcm4gZm9yIGVycm9yIFVSTHMgd2hpY2ggc2hvdWxkIGV4Y2x1c2l2ZWx5IGJlIHNlbnQgdG8gU2VudHJ5LlxuICAgKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB7QGxpbmsgT3B0aW9ucy5ibGFja2xpc3RVcmxzfS5cbiAgICogQnkgZGVmYXVsdCwgYWxsIGVycm9ycyB3aWxsIGJlIHNlbnQuXG4gICAqL1xuICB3aGl0ZWxpc3RVcmxzPzogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbn1cblxuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIEJhY2tlbmQuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBCcm93c2VyQmFja2VuZCBleHRlbmRzIEJhc2VCYWNrZW5kPEJyb3dzZXJPcHRpb25zPiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJvdGVjdGVkIF9zZXR1cFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucy5kc24pIHtcbiAgICAgIC8vIFdlIHJldHVybiB0aGUgbm9vcCB0cmFuc3BvcnQgaGVyZSBpbiBjYXNlIHRoZXJlIGlzIG5vIERzbi5cbiAgICAgIHJldHVybiBzdXBlci5fc2V0dXBUcmFuc3BvcnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5fb3B0aW9ucy50cmFuc3BvcnRPcHRpb25zLFxuICAgICAgZHNuOiB0aGlzLl9vcHRpb25zLmRzbixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KHRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgICByZXR1cm4gbmV3IEZldGNoVHJhbnNwb3J0KHRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFhIUlRyYW5zcG9ydCh0cmFuc3BvcnRPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGV2ZW50RnJvbUV4Y2VwdGlvbihleGNlcHRpb246IGFueSwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50PiB7XG4gICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gKGhpbnQgJiYgaGludC5zeW50aGV0aWNFeGNlcHRpb24pIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50RnJvbVVua25vd25JbnB1dChleGNlcHRpb24sIHN5bnRoZXRpY0V4Y2VwdGlvbiwge1xuICAgICAgYXR0YWNoU3RhY2t0cmFjZTogdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlLFxuICAgIH0pO1xuICAgIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwge1xuICAgICAgaGFuZGxlZDogdHJ1ZSxcbiAgICAgIHR5cGU6ICdnZW5lcmljJyxcbiAgICB9KTtcbiAgICBldmVudC5sZXZlbCA9IFNldmVyaXR5LkVycm9yO1xuICAgIGlmIChoaW50ICYmIGhpbnQuZXZlbnRfaWQpIHtcbiAgICAgIGV2ZW50LmV2ZW50X2lkID0gaGludC5ldmVudF9pZDtcbiAgICB9XG4gICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoZXZlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGV2ZW50RnJvbU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBsZXZlbDogU2V2ZXJpdHkgPSBTZXZlcml0eS5JbmZvLCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSAoaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRGcm9tU3RyaW5nKG1lc3NhZ2UsIHN5bnRoZXRpY0V4Y2VwdGlvbiwge1xuICAgICAgYXR0YWNoU3RhY2t0cmFjZTogdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlLFxuICAgIH0pO1xuICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7XG4gICAgaWYgKGhpbnQgJiYgaGludC5ldmVudF9pZCkge1xuICAgICAgZXZlbnQuZXZlbnRfaWQgPSBoaW50LmV2ZW50X2lkO1xuICAgIH1cbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZShldmVudCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQXNCQTs7Ozs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7O0FBd0RBO0FBdkRBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBakJBO0FBb0JBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBYkE7QUFlQTs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBQ0E7QUFVQTtBQXhEQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/backend.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/client.js": -/*!*****************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/client.js ***! - \*****************************************************/ -/*! exports provided: BrowserClient */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserClient\", function() { return BrowserClient; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"../node_modules/@sentry/browser/esm/backend.js\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./version */ \"../node_modules/@sentry/browser/esm/version.js\");\n\n\n\n\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\n\nvar BrowserClient =\n/** @class */\nfunction (_super) {\n tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"](BrowserClient, _super);\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n\n\n function BrowserClient(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _super.call(this, _backend__WEBPACK_IMPORTED_MODULE_3__[\"BrowserBackend\"], options) || this;\n }\n /**\n * @inheritDoc\n */\n\n\n BrowserClient.prototype._prepareEvent = function (event, scope, hint) {\n event.platform = event.platform || 'javascript';\n event.sdk = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event.sdk, {\n name: _version__WEBPACK_IMPORTED_MODULE_4__[\"SDK_NAME\"],\n packages: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](event.sdk && event.sdk.packages || [], [{\n name: 'npm:@sentry/browser',\n version: _version__WEBPACK_IMPORTED_MODULE_4__[\"SDK_VERSION\"]\n }]),\n version: _version__WEBPACK_IMPORTED_MODULE_4__[\"SDK_VERSION\"]\n });\n return _super.prototype._prepareEvent.call(this, event, scope, hint);\n };\n /**\n * Show a report dialog to the user to send feedback to a specific event.\n *\n * @param options Set individual options for the dialog\n */\n\n\n BrowserClient.prototype.showReportDialog = function (options) {\n if (options === void 0) {\n options = {};\n } // doesn't work without a document (React Native)\n\n\n var document = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getGlobalObject\"])().document;\n\n if (!document) {\n return;\n }\n\n if (!this._isEnabled()) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error('Trying to call showReportDialog with Sentry Client is disabled');\n return;\n }\n\n var dsn = options.dsn || this.getDsn();\n\n if (!options.eventId) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error('Missing `eventId` option in showReportDialog call');\n return;\n }\n\n if (!dsn) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error('Missing `Dsn` option in showReportDialog call');\n return;\n }\n\n var script = document.createElement('script');\n script.async = true;\n script.src = new _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"API\"](dsn).getReportDialogEndpoint(options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n (document.head || document.body).appendChild(script);\n };\n\n return BrowserClient;\n}(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseClient\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vY2xpZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9jbGllbnQudHM/MWZiMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUEksIEJhc2VDbGllbnQsIFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERzbkxpa2UsIEV2ZW50LCBFdmVudEhpbnQgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IEJyb3dzZXJCYWNrZW5kLCBCcm93c2VyT3B0aW9ucyB9IGZyb20gJy4vYmFja2VuZCc7XG5pbXBvcnQgeyBTREtfTkFNRSwgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG4vKipcbiAqIEFsbCBwcm9wZXJ0aWVzIHRoZSByZXBvcnQgZGlhbG9nIHN1cHBvcnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RGlhbG9nT3B0aW9ucyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgZXZlbnRJZD86IHN0cmluZztcbiAgZHNuPzogRHNuTGlrZTtcbiAgdXNlcj86IHtcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9O1xuICBsYW5nPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgc3VidGl0bGU/OiBzdHJpbmc7XG4gIHN1YnRpdGxlMj86IHN0cmluZztcbiAgbGFiZWxOYW1lPzogc3RyaW5nO1xuICBsYWJlbEVtYWlsPzogc3RyaW5nO1xuICBsYWJlbENvbW1lbnRzPzogc3RyaW5nO1xuICBsYWJlbENsb3NlPzogc3RyaW5nO1xuICBsYWJlbFN1Ym1pdD86IHN0cmluZztcbiAgZXJyb3JHZW5lcmljPzogc3RyaW5nO1xuICBlcnJvckZvcm1FbnRyeT86IHN0cmluZztcbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayBhZnRlciByZXBvcnREaWFsb2cgc2hvd2VkIHVwICovXG4gIG9uTG9hZD8oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIENsaWVudC5cbiAqXG4gKiBAc2VlIEJyb3dzZXJPcHRpb25zIGZvciBkb2N1bWVudGF0aW9uIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzZWUgU2VudHJ5Q2xpZW50IGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlckNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQ8QnJvd3NlckJhY2tlbmQsIEJyb3dzZXJPcHRpb25zPiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJyb3dzZXIgU0RLIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgU0RLLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJyb3dzZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihCcm93c2VyQmFja2VuZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByb3RlY3RlZCBfcHJlcGFyZUV2ZW50KGV2ZW50OiBFdmVudCwgc2NvcGU/OiBTY29wZSwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIGV2ZW50LnBsYXRmb3JtID0gZXZlbnQucGxhdGZvcm0gfHwgJ2phdmFzY3JpcHQnO1xuICAgIGV2ZW50LnNkayA9IHtcbiAgICAgIC4uLmV2ZW50LnNkayxcbiAgICAgIG5hbWU6IFNES19OQU1FLFxuICAgICAgcGFja2FnZXM6IFtcbiAgICAgICAgLi4uKChldmVudC5zZGsgJiYgZXZlbnQuc2RrLnBhY2thZ2VzKSB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnbnBtOkBzZW50cnkvYnJvd3NlcicsXG4gICAgICAgICAgdmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgfTtcblxuICAgIHJldHVybiBzdXBlci5fcHJlcGFyZUV2ZW50KGV2ZW50LCBzY29wZSwgaGludCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhIHJlcG9ydCBkaWFsb2cgdG8gdGhlIHVzZXIgdG8gc2VuZCBmZWVkYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBTZXQgaW5kaXZpZHVhbCBvcHRpb25zIGZvciB0aGUgZGlhbG9nXG4gICAqL1xuICBwdWJsaWMgc2hvd1JlcG9ydERpYWxvZyhvcHRpb25zOiBSZXBvcnREaWFsb2dPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICAvLyBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIGRvY3VtZW50IChSZWFjdCBOYXRpdmUpXG4gICAgY29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpLmRvY3VtZW50O1xuICAgIGlmICghZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCgpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1RyeWluZyB0byBjYWxsIHNob3dSZXBvcnREaWFsb2cgd2l0aCBTZW50cnkgQ2xpZW50IGlzIGRpc2FibGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHNuID0gb3B0aW9ucy5kc24gfHwgdGhpcy5nZXREc24oKTtcblxuICAgIGlmICghb3B0aW9ucy5ldmVudElkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ01pc3NpbmcgYGV2ZW50SWRgIG9wdGlvbiBpbiBzaG93UmVwb3J0RGlhbG9nIGNhbGwnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRzbikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdNaXNzaW5nIGBEc25gIG9wdGlvbiBpbiBzaG93UmVwb3J0RGlhbG9nIGNhbGwnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIHNjcmlwdC5zcmMgPSBuZXcgQVBJKGRzbikuZ2V0UmVwb3J0RGlhbG9nRW5kcG9pbnQob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5vbkxvYWQpIHtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSBvcHRpb25zLm9uTG9hZDtcbiAgICB9XG5cbiAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUE2QkE7Ozs7Ozs7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUZBO0FBS0E7QUFUQTtBQVlBO0FBZkE7QUFrQkE7Ozs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaENBO0FBQ0E7QUFpQ0E7QUF0RUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/client.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/eventbuilder.js": -/*!***********************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/eventbuilder.js ***! - \***********************************************************/ -/*! exports provided: eventFromUnknownInput, eventFromString */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eventFromUnknownInput\", function() { return eventFromUnknownInput; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eventFromString\", function() { return eventFromString; });\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _parsers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parsers */ \"../node_modules/@sentry/browser/esm/parsers.js\");\n/* harmony import */ var _tracekit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tracekit */ \"../node_modules/@sentry/browser/esm/tracekit.js\");\n\n\n\n/** JSDoc */\n\nfunction eventFromUnknownInput(exception, syntheticException, options) {\n if (options === void 0) {\n options = {};\n }\n\n var event;\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isErrorEvent\"])(exception) && exception.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n var errorEvent = exception;\n exception = errorEvent.error; // tslint:disable-line:no-parameter-reassignment\n\n event = Object(_parsers__WEBPACK_IMPORTED_MODULE_1__[\"eventFromStacktrace\"])(Object(_tracekit__WEBPACK_IMPORTED_MODULE_2__[\"computeStackTrace\"])(exception));\n return event;\n }\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isDOMError\"])(exception) || Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isDOMException\"])(exception)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var domException = exception;\n var name_1 = domException.name || (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isDOMError\"])(domException) ? 'DOMError' : 'DOMException');\n var message = domException.message ? name_1 + \": \" + domException.message : name_1;\n event = eventFromString(message, syntheticException, options);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"addExceptionTypeValue\"])(event, message);\n return event;\n }\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isError\"])(exception)) {\n // we have a real Error object, do nothing\n event = Object(_parsers__WEBPACK_IMPORTED_MODULE_1__[\"eventFromStacktrace\"])(Object(_tracekit__WEBPACK_IMPORTED_MODULE_2__[\"computeStackTrace\"])(exception));\n return event;\n }\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(exception) || Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isEvent\"])(exception)) {\n // If it is plain Object or Event, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n var objectException = exception;\n event = Object(_parsers__WEBPACK_IMPORTED_MODULE_1__[\"eventFromPlainObject\"])(objectException, syntheticException, options.rejection);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"addExceptionMechanism\"])(event, {\n synthetic: true\n });\n return event;\n } // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n\n\n event = eventFromString(exception, syntheticException, options);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"addExceptionTypeValue\"])(event, \"\" + exception, undefined);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"addExceptionMechanism\"])(event, {\n synthetic: true\n });\n return event;\n} // this._options.attachStacktrace\n\n/** JSDoc */\n\nfunction eventFromString(input, syntheticException, options) {\n if (options === void 0) {\n options = {};\n }\n\n var event = {\n message: input\n };\n\n if (options.attachStacktrace && syntheticException) {\n var stacktrace = Object(_tracekit__WEBPACK_IMPORTED_MODULE_2__[\"computeStackTrace\"])(syntheticException);\n var frames_1 = Object(_parsers__WEBPACK_IMPORTED_MODULE_1__[\"prepareFramesForEvent\"])(stacktrace.stack);\n event.stacktrace = {\n frames: frames_1\n };\n }\n\n return event;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vZXZlbnRidWlsZGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9ldmVudGJ1aWxkZXIudHM/MGU2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHtcbiAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtLFxuICBhZGRFeGNlcHRpb25UeXBlVmFsdWUsXG4gIGlzRE9NRXJyb3IsXG4gIGlzRE9NRXhjZXB0aW9uLFxuICBpc0Vycm9yLFxuICBpc0Vycm9yRXZlbnQsXG4gIGlzRXZlbnQsXG4gIGlzUGxhaW5PYmplY3QsXG59IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBldmVudEZyb21QbGFpbk9iamVjdCwgZXZlbnRGcm9tU3RhY2t0cmFjZSwgcHJlcGFyZUZyYW1lc0ZvckV2ZW50IH0gZnJvbSAnLi9wYXJzZXJzJztcbmltcG9ydCB7IGNvbXB1dGVTdGFja1RyYWNlIH0gZnJvbSAnLi90cmFjZWtpdCc7XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50RnJvbVVua25vd25JbnB1dChcbiAgZXhjZXB0aW9uOiB1bmtub3duLFxuICBzeW50aGV0aWNFeGNlcHRpb24/OiBFcnJvcixcbiAgb3B0aW9uczoge1xuICAgIHJlamVjdGlvbj86IGJvb2xlYW47XG4gICAgYXR0YWNoU3RhY2t0cmFjZT86IGJvb2xlYW47XG4gIH0gPSB7fSxcbik6IEV2ZW50IHtcbiAgbGV0IGV2ZW50OiBFdmVudDtcblxuICBpZiAoaXNFcnJvckV2ZW50KGV4Y2VwdGlvbiBhcyBFcnJvckV2ZW50KSAmJiAoZXhjZXB0aW9uIGFzIEVycm9yRXZlbnQpLmVycm9yKSB7XG4gICAgLy8gSWYgaXQgaXMgYW4gRXJyb3JFdmVudCB3aXRoIGBlcnJvcmAgcHJvcGVydHksIGV4dHJhY3QgaXQgdG8gZ2V0IGFjdHVhbCBFcnJvclxuICAgIGNvbnN0IGVycm9yRXZlbnQgPSBleGNlcHRpb24gYXMgRXJyb3JFdmVudDtcbiAgICBleGNlcHRpb24gPSBlcnJvckV2ZW50LmVycm9yOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXBhcmFtZXRlci1yZWFzc2lnbm1lbnRcbiAgICBldmVudCA9IGV2ZW50RnJvbVN0YWNrdHJhY2UoY29tcHV0ZVN0YWNrVHJhY2UoZXhjZXB0aW9uIGFzIEVycm9yKSk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG4gIGlmIChpc0RPTUVycm9yKGV4Y2VwdGlvbiBhcyBET01FcnJvcikgfHwgaXNET01FeGNlcHRpb24oZXhjZXB0aW9uIGFzIERPTUV4Y2VwdGlvbikpIHtcbiAgICAvLyBJZiBpdCBpcyBhIERPTUVycm9yIG9yIERPTUV4Y2VwdGlvbiAod2hpY2ggYXJlIGxlZ2FjeSBBUElzLCBidXQgc3RpbGwgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMpXG4gICAgLy8gdGhlbiB3ZSBqdXN0IGV4dHJhY3QgdGhlIG5hbWUgYW5kIG1lc3NhZ2UsIGFzIHRoZXkgZG9uJ3QgcHJvdmlkZSBhbnl0aGluZyBlbHNlXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUVycm9yXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUV4Y2VwdGlvblxuICAgIGNvbnN0IGRvbUV4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBhcyBET01FeGNlcHRpb247XG4gICAgY29uc3QgbmFtZSA9IGRvbUV4Y2VwdGlvbi5uYW1lIHx8IChpc0RPTUVycm9yKGRvbUV4Y2VwdGlvbikgPyAnRE9NRXJyb3InIDogJ0RPTUV4Y2VwdGlvbicpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkb21FeGNlcHRpb24ubWVzc2FnZSA/IGAke25hbWV9OiAke2RvbUV4Y2VwdGlvbi5tZXNzYWdlfWAgOiBuYW1lO1xuXG4gICAgZXZlbnQgPSBldmVudEZyb21TdHJpbmcobWVzc2FnZSwgc3ludGhldGljRXhjZXB0aW9uLCBvcHRpb25zKTtcbiAgICBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQsIG1lc3NhZ2UpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuICBpZiAoaXNFcnJvcihleGNlcHRpb24gYXMgRXJyb3IpKSB7XG4gICAgLy8gd2UgaGF2ZSBhIHJlYWwgRXJyb3Igb2JqZWN0LCBkbyBub3RoaW5nXG4gICAgZXZlbnQgPSBldmVudEZyb21TdGFja3RyYWNlKGNvbXB1dGVTdGFja1RyYWNlKGV4Y2VwdGlvbiBhcyBFcnJvcikpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChleGNlcHRpb24pIHx8IGlzRXZlbnQoZXhjZXB0aW9uKSkge1xuICAgIC8vIElmIGl0IGlzIHBsYWluIE9iamVjdCBvciBFdmVudCwgc2VyaWFsaXplIGl0IG1hbnVhbGx5IGFuZCBleHRyYWN0IG9wdGlvbnNcbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gZ3JvdXAgZXZlbnRzIGJhc2VkIG9uIHRvcC1sZXZlbCBrZXlzXG4gICAgLy8gd2hpY2ggaXMgbXVjaCBiZXR0ZXIgdGhhbiBjcmVhdGluZyBuZXcgZ3JvdXAgd2hlbiBhbnkga2V5L3ZhbHVlIGNoYW5nZVxuICAgIGNvbnN0IG9iamVjdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBhcyB7fTtcbiAgICBldmVudCA9IGV2ZW50RnJvbVBsYWluT2JqZWN0KG9iamVjdEV4Y2VwdGlvbiwgc3ludGhldGljRXhjZXB0aW9uLCBvcHRpb25zLnJlamVjdGlvbik7XG4gICAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCB7XG4gICAgICBzeW50aGV0aWM6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiBwcmV2aW91cyBjaGVja3Mgd2VyZSB2YWxpZCwgdGhlbiBpdCBtZWFucyB0aGF0IGl0J3Mgbm90OlxuICAvLyAtIGFuIGluc3RhbmNlIG9mIERPTUVycm9yXG4gIC8vIC0gYW4gaW5zdGFuY2Ugb2YgRE9NRXhjZXB0aW9uXG4gIC8vIC0gYW4gaW5zdGFuY2Ugb2YgRXZlbnRcbiAgLy8gLSBhbiBpbnN0YW5jZSBvZiBFcnJvclxuICAvLyAtIGEgdmFsaWQgRXJyb3JFdmVudCAob25lIHdpdGggYW4gZXJyb3IgcHJvcGVydHkpXG4gIC8vIC0gYSBwbGFpbiBPYmplY3RcbiAgLy9cbiAgLy8gU28gYmFpbCBvdXQgYW5kIGNhcHR1cmUgaXQgYXMgYSBzaW1wbGUgbWVzc2FnZTpcbiAgZXZlbnQgPSBldmVudEZyb21TdHJpbmcoZXhjZXB0aW9uIGFzIHN0cmluZywgc3ludGhldGljRXhjZXB0aW9uLCBvcHRpb25zKTtcbiAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCBgJHtleGNlcHRpb259YCwgdW5kZWZpbmVkKTtcbiAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCB7XG4gICAgc3ludGhldGljOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8vIHRoaXMuX29wdGlvbnMuYXR0YWNoU3RhY2t0cmFjZVxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRGcm9tU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICBzeW50aGV0aWNFeGNlcHRpb24/OiBFcnJvcixcbiAgb3B0aW9uczoge1xuICAgIGF0dGFjaFN0YWNrdHJhY2U/OiBib29sZWFuO1xuICB9ID0ge30sXG4pOiBFdmVudCB7XG4gIGNvbnN0IGV2ZW50OiBFdmVudCA9IHtcbiAgICBtZXNzYWdlOiBpbnB1dCxcbiAgfTtcblxuICBpZiAob3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlICYmIHN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgIGNvbnN0IHN0YWNrdHJhY2UgPSBjb21wdXRlU3RhY2tUcmFjZShzeW50aGV0aWNFeGNlcHRpb24pO1xuICAgIGNvbnN0IGZyYW1lcyA9IHByZXBhcmVGcmFtZXNGb3JFdmVudChzdGFja3RyYWNlLnN0YWNrKTtcbiAgICBldmVudC5zdGFja3RyYWNlID0ge1xuICAgICAgZnJhbWVzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUF0Q0E7QUEwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/eventbuilder.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/exports.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/exports.js ***! - \******************************************************/ -/*! exports provided: Severity, Status, addGlobalEventProcessor, addBreadcrumb, captureException, captureEvent, captureMessage, configureScope, getHubFromCarrier, getCurrentHub, Hub, Scope, setContext, setExtra, setExtras, setTag, setTags, setUser, withScope, BrowserClient, defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap, SDK_NAME, SDK_VERSION */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Severity\", function() { return _sentry_types__WEBPACK_IMPORTED_MODULE_0__[\"Severity\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _sentry_types__WEBPACK_IMPORTED_MODULE_0__[\"Status\"]; });\n\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addGlobalEventProcessor\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addBreadcrumb\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"addBreadcrumb\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureException\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"captureException\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureEvent\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"captureEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureMessage\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"captureMessage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"configureScope\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"configureScope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getHubFromCarrier\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getHubFromCarrier\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getCurrentHub\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Hub\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"Hub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Scope\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"Scope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setContext\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setContext\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtra\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setExtra\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtras\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setExtras\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTag\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setTag\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTags\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setTags\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setUser\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"setUser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withScope\", function() { return _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"withScope\"]; });\n\n/* harmony import */ var _client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./client */ \"../node_modules/@sentry/browser/esm/client.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BrowserClient\", function() { return _client__WEBPACK_IMPORTED_MODULE_2__[\"BrowserClient\"]; });\n\n/* harmony import */ var _sdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdk */ \"../node_modules/@sentry/browser/esm/sdk.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultIntegrations\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"defaultIntegrations\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"forceLoad\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"forceLoad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"init\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"init\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lastEventId\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"lastEventId\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"onLoad\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"onLoad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showReportDialog\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"showReportDialog\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flush\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"flush\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"close\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"close\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"wrap\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_3__[\"wrap\"]; });\n\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./version */ \"../node_modules/@sentry/browser/esm/version.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SDK_NAME\", function() { return _version__WEBPACK_IMPORTED_MODULE_4__[\"SDK_NAME\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SDK_VERSION\", function() { return _version__WEBPACK_IMPORTED_MODULE_4__[\"SDK_VERSION\"]; });\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vZXhwb3J0cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvZXhwb3J0cy50cz9iY2RlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIFJlcXVlc3QsXG4gIFNka0luZm8sXG4gIEV2ZW50LFxuICBFdmVudEhpbnQsXG4gIEV4Y2VwdGlvbixcbiAgUmVzcG9uc2UsXG4gIFNldmVyaXR5LFxuICBTdGFja0ZyYW1lLFxuICBTdGFja3RyYWNlLFxuICBTdGF0dXMsXG4gIFRocmVhZCxcbiAgVXNlcixcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmV4cG9ydCB7XG4gIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLFxuICBhZGRCcmVhZGNydW1iLFxuICBjYXB0dXJlRXhjZXB0aW9uLFxuICBjYXB0dXJlRXZlbnQsXG4gIGNhcHR1cmVNZXNzYWdlLFxuICBjb25maWd1cmVTY29wZSxcbiAgZ2V0SHViRnJvbUNhcnJpZXIsXG4gIGdldEN1cnJlbnRIdWIsXG4gIEh1YixcbiAgU2NvcGUsXG4gIHNldENvbnRleHQsXG4gIHNldEV4dHJhLFxuICBzZXRFeHRyYXMsXG4gIHNldFRhZyxcbiAgc2V0VGFncyxcbiAgc2V0VXNlcixcbiAgd2l0aFNjb3BlLFxufSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5leHBvcnQgeyBCcm93c2VyT3B0aW9ucyB9IGZyb20gJy4vYmFja2VuZCc7XG5leHBvcnQgeyBCcm93c2VyQ2xpZW50LCBSZXBvcnREaWFsb2dPcHRpb25zIH0gZnJvbSAnLi9jbGllbnQnO1xuZXhwb3J0IHsgZGVmYXVsdEludGVncmF0aW9ucywgZm9yY2VMb2FkLCBpbml0LCBsYXN0RXZlbnRJZCwgb25Mb2FkLCBzaG93UmVwb3J0RGlhbG9nLCBmbHVzaCwgY2xvc2UsIHdyYXAgfSBmcm9tICcuL3Nkayc7XG5leHBvcnQgeyBTREtfTkFNRSwgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFxQkE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/exports.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/helpers.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/helpers.js ***! - \******************************************************/ -/*! exports provided: shouldIgnoreOnError, ignoreNextOnError, wrap */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"shouldIgnoreOnError\", function() { return shouldIgnoreOnError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ignoreNextOnError\", function() { return ignoreNextOnError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrap\", function() { return wrap; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n\nvar ignoreOnError = 0;\n/**\n * @hidden\n */\n\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n/**\n * @hidden\n */\n\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError += 1;\n setTimeout(function () {\n ignoreOnError -= 1;\n });\n}\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap.\n * @returns The wrapped function.\n * @hidden\n */\n\nfunction wrap(fn, options, before) {\n if (options === void 0) {\n options = {};\n } // tslint:disable-next-line:strict-type-predicates\n\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // We don't wanna wrap it twice\n if (fn.__sentry__) {\n return fn;\n } // If this has already been wrapped in the past, return that wrapped function\n\n\n if (fn.__sentry_wrapped__) {\n return fn.__sentry_wrapped__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n var sentryWrapped = function sentryWrapped() {\n var args = Array.prototype.slice.call(arguments); // tslint:disable:no-unsafe-any\n\n try {\n // tslint:disable-next-line:strict-type-predicates\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n var wrappedArguments = args.map(function (arg) {\n return wrap(arg, options);\n });\n\n if (fn.handleEvent) {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.handleEvent.apply(this, wrappedArguments);\n } // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n\n\n return fn.apply(this, wrappedArguments); // tslint:enable:no-unsafe-any\n } catch (ex) {\n ignoreNextOnError();\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"withScope\"])(function (scope) {\n scope.addEventProcessor(function (event) {\n var processedEvent = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event);\n\n if (options.mechanism) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"addExceptionTypeValue\"])(processedEvent, undefined, undefined);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"addExceptionMechanism\"])(processedEvent, options.mechanism);\n }\n\n processedEvent.extra = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, processedEvent.extra, {\n arguments: args\n });\n return processedEvent;\n });\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"captureException\"])(ex);\n });\n throw ex;\n }\n }; // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n\n\n try {\n for (var property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // tslint:disable-line:no-empty\n\n\n fn.prototype = fn.prototype || {};\n sentryWrapped.prototype = fn.prototype;\n Object.defineProperty(fn, '__sentry_wrapped__', {\n enumerable: false,\n value: sentryWrapped\n }); // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n\n Object.defineProperties(sentryWrapped, {\n __sentry__: {\n enumerable: false,\n value: true\n },\n __sentry_original__: {\n enumerable: false,\n value: fn\n }\n }); // Restore original function name (not all browsers allow that)\n\n try {\n var descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get: function get() {\n return fn.name;\n }\n });\n }\n } catch (_oO) {\n /*no-empty*/\n }\n\n return sentryWrapped;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaGVscGVycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaGVscGVycy50cz81YTE2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24sIHdpdGhTY29wZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBFdmVudCBhcyBTZW50cnlFdmVudCwgTWVjaGFuaXNtLCBTY29wZSwgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBhZGRFeGNlcHRpb25NZWNoYW5pc20sIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5sZXQgaWdub3JlT25FcnJvcjogbnVtYmVyID0gMDtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRJZ25vcmVPbkVycm9yKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaWdub3JlT25FcnJvciA+IDA7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTmV4dE9uRXJyb3IoKTogdm9pZCB7XG4gIC8vIG9uZXJyb3Igc2hvdWxkIHRyaWdnZXIgYmVmb3JlIHNldFRpbWVvdXRcbiAgaWdub3JlT25FcnJvciArPSAxO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZ25vcmVPbkVycm9yIC09IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBnaXZlbiBmdW5jdGlvbiBhbmQgc2VuZHMgYW4gZXZlbnQgdG8gU2VudHJ5IGV2ZXJ5IHRpbWUgdGhlXG4gKiBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICpcbiAqIEBwYXJhbSBmbiBBIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcmV0dXJucyBUaGUgd3JhcHBlZCBmdW5jdGlvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAoXG4gIGZuOiBXcmFwcGVkRnVuY3Rpb24sXG4gIG9wdGlvbnM6IHtcbiAgICBtZWNoYW5pc20/OiBNZWNoYW5pc207XG4gIH0gPSB7fSxcbiAgYmVmb3JlPzogV3JhcHBlZEZ1bmN0aW9uLFxuKTogYW55IHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gV2UgZG9uJ3Qgd2FubmEgd3JhcCBpdCB0d2ljZVxuICAgIGlmIChmbi5fX3NlbnRyeV9fKSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIHdyYXBwZWQgaW4gdGhlIHBhc3QsIHJldHVybiB0aGF0IHdyYXBwZWQgZnVuY3Rpb25cbiAgICBpZiAoZm4uX19zZW50cnlfd3JhcHBlZF9fKSB7XG4gICAgICByZXR1cm4gZm4uX19zZW50cnlfd3JhcHBlZF9fO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEp1c3QgYWNjZXNzaW5nIGN1c3RvbSBwcm9wcyBpbiBzb21lIFNlbGVuaXVtIGVudmlyb25tZW50c1xuICAgIC8vIGNhbiBjYXVzZSBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBleGNlcHRpb24gKHNlZSByYXZlbi1qcyM0OTUpLlxuICAgIC8vIEJhaWwgb24gd3JhcHBpbmcgYW5kIHJldHVybiB0aGUgZnVuY3Rpb24gYXMtaXMgKGRlZmVycyB0byB3aW5kb3cub25lcnJvcikuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgY29uc3Qgc2VudHJ5V3JhcHBlZDogV3JhcHBlZEZ1bmN0aW9uID0gZnVuY3Rpb24odGhpczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnNhZmUtYW55XG4gICAgdHJ5IHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gICAgICBpZiAoYmVmb3JlICYmIHR5cGVvZiBiZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYmVmb3JlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZWRBcmd1bWVudHMgPSBhcmdzLm1hcCgoYXJnOiBhbnkpID0+IHdyYXAoYXJnLCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChmbi5oYW5kbGVFdmVudCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGludm9rZSB1c2VyLWxhbmQgZnVuY3Rpb25cbiAgICAgICAgLy8gTk9URTogSWYgeW91IGFyZSBhIFNlbnRyeSB1c2VyLCBhbmQgeW91IGFyZSBzZWVpbmcgdGhpcyBzdGFjayBmcmFtZSwgaXRcbiAgICAgICAgLy8gICAgICAgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzXG4gICAgICAgIC8vICAgICAgIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuICAgICAgICByZXR1cm4gZm4uaGFuZGxlRXZlbnQuYXBwbHkodGhpcywgd3JhcHBlZEFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICAvLyBBdHRlbXB0IHRvIGludm9rZSB1c2VyLWxhbmQgZnVuY3Rpb25cbiAgICAgIC8vIE5PVEU6IElmIHlvdSBhcmUgYSBTZW50cnkgdXNlciwgYW5kIHlvdSBhcmUgc2VlaW5nIHRoaXMgc3RhY2sgZnJhbWUsIGl0XG4gICAgICAvLyAgICAgICBtZWFucyB0aGUgc2VudHJ5LmphdmFzY3JpcHQgU0RLIGNhdWdodCBhbiBlcnJvciBpbnZva2luZyB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuIFRoaXNcbiAgICAgIC8vICAgICAgIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIHdyYXBwZWRBcmd1bWVudHMpO1xuICAgICAgLy8gdHNsaW50OmVuYWJsZTpuby11bnNhZmUtYW55XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlnbm9yZU5leHRPbkVycm9yKCk7XG5cbiAgICAgIHdpdGhTY29wZSgoc2NvcGU6IFNjb3BlKSA9PiB7XG4gICAgICAgIHNjb3BlLmFkZEV2ZW50UHJvY2Vzc29yKChldmVudDogU2VudHJ5RXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzZWRFdmVudCA9IHsgLi4uZXZlbnQgfTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLm1lY2hhbmlzbSkge1xuICAgICAgICAgICAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKHByb2Nlc3NlZEV2ZW50LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20ocHJvY2Vzc2VkRXZlbnQsIG9wdGlvbnMubWVjaGFuaXNtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzZWRFdmVudC5leHRyYSA9IHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NlZEV2ZW50LmV4dHJhLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfTtcblxuICAvLyBBY2Nlc3Npbmcgc29tZSBvYmplY3RzIG1heSB0aHJvd1xuICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzExNjhcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZuKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZuLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgc2VudHJ5V3JhcHBlZFtwcm9wZXJ0eV0gPSBmbltwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfb08pIHt9IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZW1wdHlcblxuICBmbi5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGUgfHwge307XG4gIHNlbnRyeVdyYXBwZWQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ19fc2VudHJ5X3dyYXBwZWRfXycsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogc2VudHJ5V3JhcHBlZCxcbiAgfSk7XG5cbiAgLy8gU2lnbmFsIHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiB3cmFwcGVkL2ZpbGxlZCBhbHJlYWR5XG4gIC8vIGZvciBib3RoIGRlYnVnZ2luZyBhbmQgdG8gcHJldmVudCBpdCB0byBiZWluZyB3cmFwcGVkL2ZpbGxlZCB0d2ljZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzZW50cnlXcmFwcGVkLCB7XG4gICAgX19zZW50cnlfXzoge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogdHJ1ZSxcbiAgICB9LFxuICAgIF9fc2VudHJ5X29yaWdpbmFsX186IHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IGZuLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFJlc3RvcmUgb3JpZ2luYWwgZnVuY3Rpb24gbmFtZSAobm90IGFsbCBicm93c2VycyBhbGxvdyB0aGF0KVxuICB0cnkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbnRyeVdyYXBwZWQsICduYW1lJykgYXMgUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbnRyeVdyYXBwZWQsICduYW1lJywge1xuICAgICAgICBnZXQoKTogc3RyaW5nIHtcbiAgICAgICAgICByZXR1cm4gZm4ubmFtZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgLypuby1lbXB0eSovXG4gIH1cblxuICByZXR1cm4gc2VudHJ5V3JhcHBlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUVBO0FBRUE7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFuQkE7QUFzQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBREE7QUFJQTtBQWJBO0FBZ0JBO0FBakJBO0FBb0JBO0FBQ0E7QUF6RUE7QUE2RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUxBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/helpers.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/index.js": -/*!****************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/index.js ***! - \****************************************************/ -/*! exports provided: Severity, Status, addGlobalEventProcessor, addBreadcrumb, captureException, captureEvent, captureMessage, configureScope, getHubFromCarrier, getCurrentHub, Hub, Scope, setContext, setExtra, setExtras, setTag, setTags, setUser, withScope, BrowserClient, defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap, SDK_NAME, SDK_VERSION, Integrations, Transports */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Integrations\", function() { return INTEGRATIONS; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _exports__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./exports */ \"../node_modules/@sentry/browser/esm/exports.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Severity\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"Severity\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"Status\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addGlobalEventProcessor\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addBreadcrumb\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"addBreadcrumb\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureException\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"captureException\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureEvent\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"captureEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureMessage\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"captureMessage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"configureScope\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"configureScope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getHubFromCarrier\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"getHubFromCarrier\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getCurrentHub\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Hub\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"Hub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Scope\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"Scope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setContext\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setContext\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtra\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setExtra\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtras\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setExtras\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTag\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setTag\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTags\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setTags\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setUser\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"setUser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withScope\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"withScope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BrowserClient\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"BrowserClient\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultIntegrations\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"defaultIntegrations\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"forceLoad\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"forceLoad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"init\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"init\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"lastEventId\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"lastEventId\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"onLoad\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showReportDialog\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"showReportDialog\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flush\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"flush\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"close\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"close\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"wrap\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SDK_NAME\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"SDK_NAME\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SDK_VERSION\", function() { return _exports__WEBPACK_IMPORTED_MODULE_1__[\"SDK_VERSION\"]; });\n\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _integrations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./integrations */ \"../node_modules/@sentry/browser/esm/integrations/index.js\");\n/* harmony import */ var _transports__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./transports */ \"../node_modules/@sentry/browser/esm/transports/index.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Transports\", function() { return _transports__WEBPACK_IMPORTED_MODULE_5__; });\n\n\n\n\n\n\nvar windowIntegrations = {}; // This block is needed to add compatibility with the integrations packages when used with a CDN\n// tslint:disable: no-unsafe-any\n\nvar _window = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"getGlobalObject\"])();\n\nif (_window.Sentry && _window.Sentry.Integrations) {\n windowIntegrations = _window.Sentry.Integrations;\n} // tslint:enable: no-unsafe-any\n\n\nvar INTEGRATIONS = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, windowIntegrations, _sentry_core__WEBPACK_IMPORTED_MODULE_2__[\"Integrations\"], _integrations__WEBPACK_IMPORTED_MODULE_4__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJztcblxuaW1wb3J0IHsgSW50ZWdyYXRpb25zIGFzIENvcmVJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCAqIGFzIEJyb3dzZXJJbnRlZ3JhdGlvbnMgZnJvbSAnLi9pbnRlZ3JhdGlvbnMnO1xuaW1wb3J0ICogYXMgVHJhbnNwb3J0cyBmcm9tICcuL3RyYW5zcG9ydHMnO1xuXG5sZXQgd2luZG93SW50ZWdyYXRpb25zID0ge307XG5cbi8vIFRoaXMgYmxvY2sgaXMgbmVlZGVkIHRvIGFkZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGludGVncmF0aW9ucyBwYWNrYWdlcyB3aGVuIHVzZWQgd2l0aCBhIENETlxuLy8gdHNsaW50OmRpc2FibGU6IG5vLXVuc2FmZS1hbnlcbmNvbnN0IF93aW5kb3cgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuaWYgKF93aW5kb3cuU2VudHJ5ICYmIF93aW5kb3cuU2VudHJ5LkludGVncmF0aW9ucykge1xuICB3aW5kb3dJbnRlZ3JhdGlvbnMgPSBfd2luZG93LlNlbnRyeS5JbnRlZ3JhdGlvbnM7XG59XG4vLyB0c2xpbnQ6ZW5hYmxlOiBuby11bnNhZmUtYW55XG5cbmNvbnN0IElOVEVHUkFUSU9OUyA9IHtcbiAgLi4ud2luZG93SW50ZWdyYXRpb25zLFxuICAuLi5Db3JlSW50ZWdyYXRpb25zLFxuICAuLi5Ccm93c2VySW50ZWdyYXRpb25zLFxufTtcblxuZXhwb3J0IHsgSU5URUdSQVRJT05TIGFzIEludGVncmF0aW9ucywgVHJhbnNwb3J0cyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js": -/*!***********************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js ***! - \***********************************************************************/ -/*! exports provided: Breadcrumbs */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Breadcrumbs\", function() { return Breadcrumbs; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\n\nvar Breadcrumbs =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function Breadcrumbs(options) {\n /**\n * @inheritDoc\n */\n this.name = Breadcrumbs.id;\n this._options = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true\n }, options);\n }\n /**\n * Creates breadcrumbs from console API calls\n */\n\n\n Breadcrumbs.prototype._consoleBreadcrumb = function (handlerData) {\n var breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console'\n },\n level: _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].fromString(handlerData.level),\n message: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"safeJoin\"])(handlerData.args, ' ')\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = \"Assertion failed: \" + (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"safeJoin\"])(handlerData.args.slice(1), ' ') || 'console.assert');\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level\n });\n };\n /**\n * Creates breadcrumbs from DOM API calls\n */\n\n\n Breadcrumbs.prototype._domBreadcrumb = function (handlerData) {\n var target; // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n\n try {\n target = handlerData.event.target ? Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"htmlTreeAsString\"])(handlerData.event.target) : Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"htmlTreeAsString\"])(handlerData.event);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: \"ui.\" + handlerData.name,\n message: target\n }, {\n event: handlerData.event,\n name: handlerData.name\n });\n };\n /**\n * Creates breadcrumbs from XHR API calls\n */\n\n\n Breadcrumbs.prototype._xhrBreadcrumb = function (handlerData) {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: 'xhr',\n data: handlerData.xhr.__sentry_xhr__,\n type: 'http'\n }, {\n xhr: handlerData.xhr\n });\n return;\n } // We only capture issued sentry requests\n\n\n if (handlerData.xhr.__sentry_own_request__) {\n addSentryBreadcrumb(handlerData.args[0]);\n }\n };\n /**\n * Creates breadcrumbs from fetch API calls\n */\n\n\n Breadcrumbs.prototype._fetchBreadcrumb = function (handlerData) {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n var client = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().getClient();\n var dsn = client && client.getDsn();\n\n if (dsn) {\n var filterUrl = new _sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"API\"](dsn).getStoreEndpoint(); // if Sentry key appears in URL, don't capture it as a request\n // but rather as our own 'sentry' type breadcrumb\n\n if (filterUrl && handlerData.fetchData.url.indexOf(filterUrl) !== -1 && handlerData.fetchData.method === 'POST' && handlerData.args[1] && handlerData.args[1].body) {\n addSentryBreadcrumb(handlerData.args[1].body);\n return;\n }\n }\n\n if (handlerData.error) {\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: 'fetch',\n data: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, handlerData.fetchData, {\n status_code: handlerData.response.status\n }),\n level: _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].Error,\n type: 'http'\n }, {\n data: handlerData.error,\n input: handlerData.args\n });\n } else {\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: 'fetch',\n data: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, handlerData.fetchData, {\n status_code: handlerData.response.status\n }),\n type: 'http'\n }, {\n input: handlerData.args,\n response: handlerData.response\n });\n }\n };\n /**\n * Creates breadcrumbs from history API calls\n */\n\n\n Breadcrumbs.prototype._historyBreadcrumb = function (handlerData) {\n var global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"getGlobalObject\"])();\n var from = handlerData.from;\n var to = handlerData.to;\n var parsedLoc = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"parseUrl\"])(global.location.href);\n var parsedFrom = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"parseUrl\"])(from);\n var parsedTo = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"parseUrl\"])(to); // Initial pushState doesn't provide `from` information\n\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n } // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n\n\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n // tslint:disable-next-line:no-parameter-reassignment\n to = parsedTo.relative;\n }\n\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n // tslint:disable-next-line:no-parameter-reassignment\n from = parsedFrom.relative;\n }\n\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: 'navigation',\n data: {\n from: from,\n to: to\n }\n });\n };\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n\n\n Breadcrumbs.prototype.setupOnce = function () {\n var _this = this;\n\n if (this._options.console) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._consoleBreadcrumb.apply(_this, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n },\n type: 'console'\n });\n }\n\n if (this._options.dom) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._domBreadcrumb.apply(_this, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n },\n type: 'dom'\n });\n }\n\n if (this._options.xhr) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._xhrBreadcrumb.apply(_this, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n },\n type: 'xhr'\n });\n }\n\n if (this._options.fetch) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._fetchBreadcrumb.apply(_this, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n },\n type: 'fetch'\n });\n }\n\n if (this._options.history) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._historyBreadcrumb.apply(_this, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n },\n type: 'history'\n });\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Breadcrumbs.id = 'Breadcrumbs';\n return Breadcrumbs;\n}();\n\n\n/**\n * Create a breadcrumb of `sentry` from the events themselves\n */\n\nfunction addSentryBreadcrumb(serializedData) {\n // There's always something that can go wrong with deserialization...\n try {\n var event_1 = JSON.parse(serializedData);\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().addBreadcrumb({\n category: \"sentry.\" + (event_1.type === 'transaction' ? 'transaction' : 'event'),\n event_id: event_1.event_id,\n level: event_1.level || _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].fromString('error'),\n message: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"getEventDescription\"])(event_1)\n }, {\n event: event_1\n });\n } catch (_oO) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].error('Error while adding sentry type breadcrumb');\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL2JyZWFkY3J1bWJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvYnJlYWRjcnVtYnMudHM/MGQzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUEksIGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24sIFNldmVyaXR5IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQge1xuICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyLFxuICBnZXRFdmVudERlc2NyaXB0aW9uLFxuICBnZXRHbG9iYWxPYmplY3QsXG4gIGh0bWxUcmVlQXNTdHJpbmcsXG4gIGxvZ2dlcixcbiAgcGFyc2VVcmwsXG4gIHNhZmVKb2luLFxufSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgQnJvd3NlckNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbnRyeVdyYXBwZWRYTUxIdHRwUmVxdWVzdCBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBfX3NlbnRyeV94aHJfXz86IHtcbiAgICBtZXRob2Q/OiBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIHN0YXR1c19jb2RlPzogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBCcmVhZGNydW1iSW50ZWdyYXRpb25zIHtcbiAgY29uc29sZT86IGJvb2xlYW47XG4gIGRvbT86IGJvb2xlYW47XG4gIGZldGNoPzogYm9vbGVhbjtcbiAgaGlzdG9yeT86IGJvb2xlYW47XG4gIHNlbnRyeT86IGJvb2xlYW47XG4gIHhocj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVmYXVsdCBCcmVhZGNydW1icyBpbnN0cnVtZW50YXRpb25zXG4gKiBUT0RPOiBEZXByZWNhdGVkIC0gd2l0aCB2NiwgdGhpcyB3aWxsIGJlIHJlbmFtZWQgdG8gYEluc3RydW1lbnRgXG4gKi9cbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1icyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gQnJlYWRjcnVtYnMuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnQnJlYWRjcnVtYnMnO1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBCcmVhZGNydW1iSW50ZWdyYXRpb25zO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBCcmVhZGNydW1iSW50ZWdyYXRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIGNvbnNvbGU6IHRydWUsXG4gICAgICBkb206IHRydWUsXG4gICAgICBmZXRjaDogdHJ1ZSxcbiAgICAgIGhpc3Rvcnk6IHRydWUsXG4gICAgICBzZW50cnk6IHRydWUsXG4gICAgICB4aHI6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGNvbnNvbGUgQVBJIGNhbGxzXG4gICAqL1xuICBwcml2YXRlIF9jb25zb2xlQnJlYWRjcnVtYihoYW5kbGVyRGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XG4gICAgICBjYXRlZ29yeTogJ2NvbnNvbGUnLFxuICAgICAgZGF0YToge1xuICAgICAgICBhcmd1bWVudHM6IGhhbmRsZXJEYXRhLmFyZ3MsXG4gICAgICAgIGxvZ2dlcjogJ2NvbnNvbGUnLFxuICAgICAgfSxcbiAgICAgIGxldmVsOiBTZXZlcml0eS5mcm9tU3RyaW5nKGhhbmRsZXJEYXRhLmxldmVsKSxcbiAgICAgIG1lc3NhZ2U6IHNhZmVKb2luKGhhbmRsZXJEYXRhLmFyZ3MsICcgJyksXG4gICAgfTtcblxuICAgIGlmIChoYW5kbGVyRGF0YS5sZXZlbCA9PT0gJ2Fzc2VydCcpIHtcbiAgICAgIGlmIChoYW5kbGVyRGF0YS5hcmdzWzBdID09PSBmYWxzZSkge1xuICAgICAgICBicmVhZGNydW1iLm1lc3NhZ2UgPSBgQXNzZXJ0aW9uIGZhaWxlZDogJHtzYWZlSm9pbihoYW5kbGVyRGF0YS5hcmdzLnNsaWNlKDEpLCAnICcpIHx8ICdjb25zb2xlLmFzc2VydCd9YDtcbiAgICAgICAgYnJlYWRjcnVtYi5kYXRhLmFyZ3VtZW50cyA9IGhhbmRsZXJEYXRhLmFyZ3Muc2xpY2UoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBjYXB0dXJlIGEgYnJlYWRjcnVtYiBmb3IgcGFzc2VkIGFzc2VydGlvbnNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKGJyZWFkY3J1bWIsIHtcbiAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgbGV2ZWw6IGhhbmRsZXJEYXRhLmxldmVsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYnJlYWRjcnVtYnMgZnJvbSBET00gQVBJIGNhbGxzXG4gICAqL1xuICBwcml2YXRlIF9kb21CcmVhZGNydW1iKGhhbmRsZXJEYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XG4gICAgbGV0IHRhcmdldDtcblxuICAgIC8vIEFjY2Vzc2luZyBldmVudC50YXJnZXQgY2FuIHRocm93IChzZWUgZ2V0c2VudHJ5L3JhdmVuLWpzIzgzOCwgIzc2OClcbiAgICB0cnkge1xuICAgICAgdGFyZ2V0ID0gaGFuZGxlckRhdGEuZXZlbnQudGFyZ2V0XG4gICAgICAgID8gaHRtbFRyZWVBc1N0cmluZyhoYW5kbGVyRGF0YS5ldmVudC50YXJnZXQgYXMgTm9kZSlcbiAgICAgICAgOiBodG1sVHJlZUFzU3RyaW5nKChoYW5kbGVyRGF0YS5ldmVudCBhcyB1bmtub3duKSBhcyBOb2RlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0YXJnZXQgPSAnPHVua25vd24+JztcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKFxuICAgICAge1xuICAgICAgICBjYXRlZ29yeTogYHVpLiR7aGFuZGxlckRhdGEubmFtZX1gLFxuICAgICAgICBtZXNzYWdlOiB0YXJnZXQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudDogaGFuZGxlckRhdGEuZXZlbnQsXG4gICAgICAgIG5hbWU6IGhhbmRsZXJEYXRhLm5hbWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIFhIUiBBUEkgY2FsbHNcbiAgICovXG4gIHByaXZhdGUgX3hockJyZWFkY3J1bWIoaGFuZGxlckRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB2b2lkIHtcbiAgICBpZiAoaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wKSB7XG4gICAgICAvLyBXZSBvbmx5IGNhcHR1cmUgY29tcGxldGUsIG5vbi1zZW50cnkgcmVxdWVzdHNcbiAgICAgIGlmIChoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfb3duX3JlcXVlc3RfXykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKFxuICAgICAgICB7XG4gICAgICAgICAgY2F0ZWdvcnk6ICd4aHInLFxuICAgICAgICAgIGRhdGE6IGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfXyxcbiAgICAgICAgICB0eXBlOiAnaHR0cCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB4aHI6IGhhbmRsZXJEYXRhLnhocixcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBvbmx5IGNhcHR1cmUgaXNzdWVkIHNlbnRyeSByZXF1ZXN0c1xuICAgIGlmIChoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfb3duX3JlcXVlc3RfXykge1xuICAgICAgYWRkU2VudHJ5QnJlYWRjcnVtYihoYW5kbGVyRGF0YS5hcmdzWzBdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGZldGNoIEFQSSBjYWxsc1xuICAgKi9cbiAgcHJpdmF0ZSBfZmV0Y2hCcmVhZGNydW1iKGhhbmRsZXJEYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XG4gICAgLy8gV2Ugb25seSBjYXB0dXJlIGNvbXBsZXRlIGZldGNoIHJlcXVlc3RzXG4gICAgaWYgKCFoYW5kbGVyRGF0YS5lbmRUaW1lc3RhbXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDdXJyZW50SHViKCkuZ2V0Q2xpZW50PEJyb3dzZXJDbGllbnQ+KCk7XG4gICAgY29uc3QgZHNuID0gY2xpZW50ICYmIGNsaWVudC5nZXREc24oKTtcblxuICAgIGlmIChkc24pIHtcbiAgICAgIGNvbnN0IGZpbHRlclVybCA9IG5ldyBBUEkoZHNuKS5nZXRTdG9yZUVuZHBvaW50KCk7XG4gICAgICAvLyBpZiBTZW50cnkga2V5IGFwcGVhcnMgaW4gVVJMLCBkb24ndCBjYXB0dXJlIGl0IGFzIGEgcmVxdWVzdFxuICAgICAgLy8gYnV0IHJhdGhlciBhcyBvdXIgb3duICdzZW50cnknIHR5cGUgYnJlYWRjcnVtYlxuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJVcmwgJiZcbiAgICAgICAgaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybC5pbmRleE9mKGZpbHRlclVybCkgIT09IC0xICYmXG4gICAgICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5tZXRob2QgPT09ICdQT1NUJyAmJlxuICAgICAgICBoYW5kbGVyRGF0YS5hcmdzWzFdICYmXG4gICAgICAgIGhhbmRsZXJEYXRhLmFyZ3NbMV0uYm9keVxuICAgICAgKSB7XG4gICAgICAgIGFkZFNlbnRyeUJyZWFkY3J1bWIoaGFuZGxlckRhdGEuYXJnc1sxXS5ib2R5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYW5kbGVyRGF0YS5lcnJvcikge1xuICAgICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoXG4gICAgICAgIHtcbiAgICAgICAgICBjYXRlZ29yeTogJ2ZldGNoJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAuLi5oYW5kbGVyRGF0YS5mZXRjaERhdGEsXG4gICAgICAgICAgICBzdGF0dXNfY29kZTogaGFuZGxlckRhdGEucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGV2ZWw6IFNldmVyaXR5LkVycm9yLFxuICAgICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6IGhhbmRsZXJEYXRhLmVycm9yLFxuICAgICAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoXG4gICAgICAgIHtcbiAgICAgICAgICBjYXRlZ29yeTogJ2ZldGNoJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAuLi5oYW5kbGVyRGF0YS5mZXRjaERhdGEsXG4gICAgICAgICAgICBzdGF0dXNfY29kZTogaGFuZGxlckRhdGEucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQ6IGhhbmRsZXJEYXRhLmFyZ3MsXG4gICAgICAgICAgcmVzcG9uc2U6IGhhbmRsZXJEYXRhLnJlc3BvbnNlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGhpc3RvcnkgQVBJIGNhbGxzXG4gICAqL1xuICBwcml2YXRlIF9oaXN0b3J5QnJlYWRjcnVtYihoYW5kbGVyRGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG4gICAgbGV0IGZyb20gPSBoYW5kbGVyRGF0YS5mcm9tO1xuICAgIGxldCB0byA9IGhhbmRsZXJEYXRhLnRvO1xuICAgIGNvbnN0IHBhcnNlZExvYyA9IHBhcnNlVXJsKGdsb2JhbC5sb2NhdGlvbi5ocmVmKTtcbiAgICBsZXQgcGFyc2VkRnJvbSA9IHBhcnNlVXJsKGZyb20pO1xuICAgIGNvbnN0IHBhcnNlZFRvID0gcGFyc2VVcmwodG8pO1xuXG4gICAgLy8gSW5pdGlhbCBwdXNoU3RhdGUgZG9lc24ndCBwcm92aWRlIGBmcm9tYCBpbmZvcm1hdGlvblxuICAgIGlmICghcGFyc2VkRnJvbS5wYXRoKSB7XG4gICAgICBwYXJzZWRGcm9tID0gcGFyc2VkTG9jO1xuICAgIH1cblxuICAgIC8vIFVzZSBvbmx5IHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJMIGlmIHRoZSBVUkwgbWF0Y2hlcyB0aGUgY3VycmVudFxuICAgIC8vIGRvY3VtZW50IChhbG1vc3QgYWxsIHRoZSB0aW1lIHdoZW4gdXNpbmcgcHVzaFN0YXRlKVxuICAgIGlmIChwYXJzZWRMb2MucHJvdG9jb2wgPT09IHBhcnNlZFRvLnByb3RvY29sICYmIHBhcnNlZExvYy5ob3N0ID09PSBwYXJzZWRUby5ob3N0KSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcGFyYW1ldGVyLXJlYXNzaWdubWVudFxuICAgICAgdG8gPSBwYXJzZWRUby5yZWxhdGl2ZTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZExvYy5wcm90b2NvbCA9PT0gcGFyc2VkRnJvbS5wcm90b2NvbCAmJiBwYXJzZWRMb2MuaG9zdCA9PT0gcGFyc2VkRnJvbS5ob3N0KSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcGFyYW1ldGVyLXJlYXNzaWdubWVudFxuICAgICAgZnJvbSA9IHBhcnNlZEZyb20ucmVsYXRpdmU7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgY2F0ZWdvcnk6ICduYXZpZ2F0aW9uJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbSxcbiAgICAgICAgdG8sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RydW1lbnQgYnJvd3NlciBidWlsdC1pbnMgdy8gYnJlYWRjcnVtYiBjYXB0dXJpbmdcbiAgICogIC0gQ29uc29sZSBBUElcbiAgICogIC0gRE9NIEFQSSAoY2xpY2svdHlwaW5nKVxuICAgKiAgLSBYTUxIdHRwUmVxdWVzdCBBUElcbiAgICogIC0gRmV0Y2ggQVBJXG4gICAqICAtIEhpc3RvcnkgQVBJXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zLmNvbnNvbGUpIHtcbiAgICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgICBjYWxsYmFjazogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLl9jb25zb2xlQnJlYWRjcnVtYiguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ2NvbnNvbGUnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb25zLmRvbSkge1xuICAgICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICAgIGNhbGxiYWNrOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIHRoaXMuX2RvbUJyZWFkY3J1bWIoLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdkb20nLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb25zLnhocikge1xuICAgICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICAgIGNhbGxiYWNrOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIHRoaXMuX3hockJyZWFkY3J1bWIoLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICd4aHInLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb25zLmZldGNoKSB7XG4gICAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgICAgY2FsbGJhY2s6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmV0Y2hCcmVhZGNydW1iKC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAnZmV0Y2gnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb25zLmhpc3RvcnkpIHtcbiAgICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgICBjYWxsYmFjazogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLl9oaXN0b3J5QnJlYWRjcnVtYiguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ2hpc3RvcnknLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYnJlYWRjcnVtYiBvZiBgc2VudHJ5YCBmcm9tIHRoZSBldmVudHMgdGhlbXNlbHZlc1xuICovXG5mdW5jdGlvbiBhZGRTZW50cnlCcmVhZGNydW1iKHNlcmlhbGl6ZWREYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gVGhlcmUncyBhbHdheXMgc29tZXRoaW5nIHRoYXQgY2FuIGdvIHdyb25nIHdpdGggZGVzZXJpYWxpemF0aW9uLi4uXG4gIHRyeSB7XG4gICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKHNlcmlhbGl6ZWREYXRhKTtcbiAgICBnZXRDdXJyZW50SHViKCkuYWRkQnJlYWRjcnVtYihcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcnk6IGBzZW50cnkuJHtldmVudC50eXBlID09PSAndHJhbnNhY3Rpb24nID8gJ3RyYW5zYWN0aW9uJyA6ICdldmVudCd9YCxcbiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkLFxuICAgICAgICBsZXZlbDogZXZlbnQubGV2ZWwgfHwgU2V2ZXJpdHkuZnJvbVN0cmluZygnZXJyb3InKSxcbiAgICAgICAgbWVzc2FnZTogZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBhZGRpbmcgc2VudHJ5IHR5cGUgYnJlYWRjcnVtYicpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFrQ0E7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBY0E7OztBQUdBO0FBaEJBOzs7QUFHQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBckJBO0FBMkJBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFyQkE7QUE0QkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFEQTtBQUtBO0FBbEJBO0FBQ0E7QUFDQTtBQW9CQTtBQUNBO0FBQ0E7QUF4QkE7QUEyQkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBRkE7QUFYQTtBQWlCQTtBQUVBO0FBQ0E7QUFFQTtBQURBO0FBR0E7QUFOQTtBQVNBO0FBQ0E7QUFGQTtBQUtBO0FBeERBO0FBMkRBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBeEJBO0FBaUNBOzs7Ozs7Ozs7O0FBUUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBRkE7QUFJQTtBQUpBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUZBO0FBSUE7QUFKQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFGQTtBQUlBO0FBSkE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBRkE7QUFJQTtBQUpBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUZBO0FBSUE7QUFKQTtBQU1BO0FBeENBO0FBNU5BOzs7OztBQUdBO0FBbVFBO0FBNVFBO0FBQ0E7QUFEQTtBQThRQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFEQTtBQVRBO0FBY0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/globalhandlers.js": -/*!**************************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/globalhandlers.js ***! - \**************************************************************************/ -/*! exports provided: GlobalHandlers */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GlobalHandlers\", function() { return GlobalHandlers; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _eventbuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../eventbuilder */ \"../node_modules/@sentry/browser/esm/eventbuilder.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers */ \"../node_modules/@sentry/browser/esm/helpers.js\");\n\n\n\n\n\n\n/** Global handlers */\n\nvar GlobalHandlers =\n/** @class */\nfunction () {\n /** JSDoc */\n function GlobalHandlers(options) {\n /**\n * @inheritDoc\n */\n this.name = GlobalHandlers.id;\n /** JSDoc */\n\n this._onErrorHandlerInstalled = false;\n /** JSDoc */\n\n this._onUnhandledRejectionHandlerInstalled = false;\n this._options = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({\n onerror: true,\n onunhandledrejection: true\n }, options);\n }\n /**\n * @inheritDoc\n */\n\n\n GlobalHandlers.prototype.setupOnce = function () {\n Error.stackTraceLimit = 50;\n\n if (this._options.onerror) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].log('Global Handler attached: onerror');\n\n this._installGlobalOnErrorHandler();\n }\n\n if (this._options.onunhandledrejection) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].log('Global Handler attached: onunhandledrejection');\n\n this._installGlobalOnUnhandledRejectionHandler();\n }\n };\n /** JSDoc */\n\n\n GlobalHandlers.prototype._installGlobalOnErrorHandler = function () {\n var _this = this;\n\n if (this._onErrorHandlerInstalled) {\n return;\n }\n\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback(data) {\n var error = data.error;\n var currentHub = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])();\n var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n\n if (!hasIntegration || Object(_helpers__WEBPACK_IMPORTED_MODULE_5__[\"shouldIgnoreOnError\"])() || isFailedOwnDelivery) {\n return;\n }\n\n var client = currentHub.getClient();\n var event = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"isPrimitive\"])(error) ? _this._eventFromIncompleteOnError(data.msg, data.url, data.line, data.column) : _this._enhanceEventWithInitialFrame(Object(_eventbuilder__WEBPACK_IMPORTED_MODULE_4__[\"eventFromUnknownInput\"])(error, undefined, {\n attachStacktrace: client && client.getOptions().attachStacktrace,\n rejection: false\n }), data.url, data.line, data.column);\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addExceptionMechanism\"])(event, {\n handled: false,\n type: 'onerror'\n });\n currentHub.captureEvent(event, {\n originalException: error\n });\n },\n type: 'error'\n });\n this._onErrorHandlerInstalled = true;\n };\n /** JSDoc */\n\n\n GlobalHandlers.prototype._installGlobalOnUnhandledRejectionHandler = function () {\n var _this = this;\n\n if (this._onUnhandledRejectionHandlerInstalled) {\n return;\n }\n\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addInstrumentationHandler\"])({\n callback: function callback(e) {\n var error = e; // dig the object of the rejection out of known event types\n\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in e) {\n error = e.reason;\n } // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in e && 'reason' in e.detail) {\n error = e.detail.reason;\n }\n } catch (_oO) {// no-empty\n }\n\n var currentHub = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])();\n var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n\n if (!hasIntegration || Object(_helpers__WEBPACK_IMPORTED_MODULE_5__[\"shouldIgnoreOnError\"])() || isFailedOwnDelivery) {\n return true;\n }\n\n var client = currentHub.getClient();\n var event = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"isPrimitive\"])(error) ? _this._eventFromIncompleteRejection(error) : Object(_eventbuilder__WEBPACK_IMPORTED_MODULE_4__[\"eventFromUnknownInput\"])(error, undefined, {\n attachStacktrace: client && client.getOptions().attachStacktrace,\n rejection: true\n });\n event.level = _sentry_types__WEBPACK_IMPORTED_MODULE_2__[\"Severity\"].Error;\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"addExceptionMechanism\"])(event, {\n handled: false,\n type: 'onunhandledrejection'\n });\n currentHub.captureEvent(event, {\n originalException: error\n });\n return;\n },\n type: 'unhandledrejection'\n });\n this._onUnhandledRejectionHandlerInstalled = true;\n };\n /**\n * This function creates a stack from an old, error-less onerror handler.\n */\n\n\n GlobalHandlers.prototype._eventFromIncompleteOnError = function (msg, url, line, column) {\n var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i; // If 'message' is ErrorEvent, get real message from inside\n\n var message = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"isErrorEvent\"])(msg) ? msg.message : msg;\n var name;\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(message)) {\n var groups = message.match(ERROR_TYPES_RE);\n\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n var event = {\n exception: {\n values: [{\n type: name || 'Error',\n value: message\n }]\n }\n };\n return this._enhanceEventWithInitialFrame(event, url, line, column);\n };\n /**\n * This function creates an Event from an TraceKitStackTrace that has part of it missing.\n */\n\n\n GlobalHandlers.prototype._eventFromIncompleteRejection = function (error) {\n return {\n exception: {\n values: [{\n type: 'UnhandledRejection',\n value: \"Non-Error promise rejection captured with value: \" + error\n }]\n }\n };\n };\n /** JSDoc */\n\n\n GlobalHandlers.prototype._enhanceEventWithInitialFrame = function (event, url, line, column) {\n event.exception = event.exception || {};\n event.exception.values = event.exception.values || [];\n event.exception.values[0] = event.exception.values[0] || {};\n event.exception.values[0].stacktrace = event.exception.values[0].stacktrace || {};\n event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames || [];\n var colno = isNaN(parseInt(column, 10)) ? undefined : column;\n var lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n var filename = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(url) && url.length > 0 ? url : Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_3__[\"getLocationHref\"])();\n\n if (event.exception.values[0].stacktrace.frames.length === 0) {\n event.exception.values[0].stacktrace.frames.push({\n colno: colno,\n filename: filename,\n \"function\": '?',\n in_app: true,\n lineno: lineno\n });\n }\n\n return event;\n };\n /**\n * @inheritDoc\n */\n\n\n GlobalHandlers.id = 'GlobalHandlers';\n return GlobalHandlers;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL2dsb2JhbGhhbmRsZXJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvZ2xvYmFsaGFuZGxlcnMudHM/Y2VkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBJbnRlZ3JhdGlvbiwgU2V2ZXJpdHkgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7XG4gIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSxcbiAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcixcbiAgZ2V0TG9jYXRpb25IcmVmLFxuICBpc0Vycm9yRXZlbnQsXG4gIGlzUHJpbWl0aXZlLFxuICBpc1N0cmluZyxcbiAgbG9nZ2VyLFxufSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgZXZlbnRGcm9tVW5rbm93bklucHV0IH0gZnJvbSAnLi4vZXZlbnRidWlsZGVyJztcbmltcG9ydCB7IHNob3VsZElnbm9yZU9uRXJyb3IgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgR2xvYmFsSGFuZGxlcnNJbnRlZ3JhdGlvbnMge1xuICBvbmVycm9yOiBib29sZWFuO1xuICBvbnVuaGFuZGxlZHJlamVjdGlvbjogYm9vbGVhbjtcbn1cblxuLyoqIEdsb2JhbCBoYW5kbGVycyAqL1xuZXhwb3J0IGNsYXNzIEdsb2JhbEhhbmRsZXJzIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBHbG9iYWxIYW5kbGVycy5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdHbG9iYWxIYW5kbGVycyc7XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IEdsb2JhbEhhbmRsZXJzSW50ZWdyYXRpb25zO1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9vbkVycm9ySGFuZGxlckluc3RhbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9vblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXJJbnN0YWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBHbG9iYWxIYW5kbGVyc0ludGVncmF0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICBvbmVycm9yOiB0cnVlLFxuICAgICAgb251bmhhbmRsZWRyZWplY3Rpb246IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMub25lcnJvcikge1xuICAgICAgbG9nZ2VyLmxvZygnR2xvYmFsIEhhbmRsZXIgYXR0YWNoZWQ6IG9uZXJyb3InKTtcbiAgICAgIHRoaXMuX2luc3RhbGxHbG9iYWxPbkVycm9ySGFuZGxlcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICBsb2dnZXIubG9nKCdHbG9iYWwgSGFuZGxlciBhdHRhY2hlZDogb251bmhhbmRsZWRyZWplY3Rpb24nKTtcbiAgICAgIHRoaXMuX2luc3RhbGxHbG9iYWxPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaW5zdGFsbEdsb2JhbE9uRXJyb3JIYW5kbGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vbkVycm9ySGFuZGxlckluc3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6IChkYXRhOiB7IG1zZzogYW55OyB1cmw6IGFueTsgbGluZTogYW55OyBjb2x1bW46IGFueTsgZXJyb3I6IGFueSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZGF0YS5lcnJvcjtcbiAgICAgICAgY29uc3QgY3VycmVudEh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgICAgICAgY29uc3QgaGFzSW50ZWdyYXRpb24gPSBjdXJyZW50SHViLmdldEludGVncmF0aW9uKEdsb2JhbEhhbmRsZXJzKTtcbiAgICAgICAgY29uc3QgaXNGYWlsZWRPd25EZWxpdmVyeSA9IGVycm9yICYmIGVycm9yLl9fc2VudHJ5X293bl9yZXF1ZXN0X18gPT09IHRydWU7XG5cbiAgICAgICAgaWYgKCFoYXNJbnRlZ3JhdGlvbiB8fCBzaG91bGRJZ25vcmVPbkVycm9yKCkgfHwgaXNGYWlsZWRPd25EZWxpdmVyeSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gaXNQcmltaXRpdmUoZXJyb3IpXG4gICAgICAgICAgPyB0aGlzLl9ldmVudEZyb21JbmNvbXBsZXRlT25FcnJvcihkYXRhLm1zZywgZGF0YS51cmwsIGRhdGEubGluZSwgZGF0YS5jb2x1bW4pXG4gICAgICAgICAgOiB0aGlzLl9lbmhhbmNlRXZlbnRXaXRoSW5pdGlhbEZyYW1lKFxuICAgICAgICAgICAgICBldmVudEZyb21Vbmtub3duSW5wdXQoZXJyb3IsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIGF0dGFjaFN0YWNrdHJhY2U6IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpLmF0dGFjaFN0YWNrdHJhY2UsXG4gICAgICAgICAgICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRhdGEudXJsLFxuICAgICAgICAgICAgICBkYXRhLmxpbmUsXG4gICAgICAgICAgICAgIGRhdGEuY29sdW1uLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnb25lcnJvcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRIdWIuY2FwdHVyZUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fb25FcnJvckhhbmRsZXJJbnN0YWxsZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2luc3RhbGxHbG9iYWxPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlckluc3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6IChlOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGVycm9yID0gZTtcblxuICAgICAgICAvLyBkaWcgdGhlIG9iamVjdCBvZiB0aGUgcmVqZWN0aW9uIG91dCBvZiBrbm93biBldmVudCB0eXBlc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFByb21pc2VSZWplY3Rpb25FdmVudHMgc3RvcmUgdGhlIG9iamVjdCBvZiB0aGUgcmVqZWN0aW9uIHVuZGVyICdyZWFzb24nXG4gICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qcm9taXNlUmVqZWN0aW9uRXZlbnRcbiAgICAgICAgICBpZiAoJ3JlYXNvbicgaW4gZSkge1xuICAgICAgICAgICAgZXJyb3IgPSBlLnJlYXNvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc29tZXRoaW5nLCBzb21ld2hlcmUsIChsaWtlbHkgYSBicm93c2VyIGV4dGVuc2lvbikgZWZmZWN0aXZlbHkgY2FzdHMgUHJvbWlzZVJlamVjdGlvbkV2ZW50c1xuICAgICAgICAgIC8vIHRvIEN1c3RvbUV2ZW50cywgbW92aW5nIHRoZSBgcHJvbWlzZWAgYW5kIGByZWFzb25gIGF0dHJpYnV0ZXMgb2YgdGhlIFBSRSBpbnRvXG4gICAgICAgICAgLy8gdGhlIEN1c3RvbUV2ZW50J3MgYGRldGFpbGAgYXR0cmlidXRlLCBzaW5jZSB0aGV5J3JlIG5vdCBwYXJ0IG9mIEN1c3RvbUV2ZW50J3Mgc3BlY1xuICAgICAgICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQgYW5kXG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjM4MFxuICAgICAgICAgIGVsc2UgaWYgKCdkZXRhaWwnIGluIGUgJiYgJ3JlYXNvbicgaW4gZS5kZXRhaWwpIHtcbiAgICAgICAgICAgIGVycm9yID0gZS5kZXRhaWwucmVhc29uO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgICAgLy8gbm8tZW1wdHlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViKCk7XG4gICAgICAgIGNvbnN0IGhhc0ludGVncmF0aW9uID0gY3VycmVudEh1Yi5nZXRJbnRlZ3JhdGlvbihHbG9iYWxIYW5kbGVycyk7XG4gICAgICAgIGNvbnN0IGlzRmFpbGVkT3duRGVsaXZlcnkgPSBlcnJvciAmJiBlcnJvci5fX3NlbnRyeV9vd25fcmVxdWVzdF9fID09PSB0cnVlO1xuXG4gICAgICAgIGlmICghaGFzSW50ZWdyYXRpb24gfHwgc2hvdWxkSWdub3JlT25FcnJvcigpIHx8IGlzRmFpbGVkT3duRGVsaXZlcnkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gaXNQcmltaXRpdmUoZXJyb3IpXG4gICAgICAgICAgPyB0aGlzLl9ldmVudEZyb21JbmNvbXBsZXRlUmVqZWN0aW9uKGVycm9yKVxuICAgICAgICAgIDogZXZlbnRGcm9tVW5rbm93bklucHV0KGVycm9yLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgYXR0YWNoU3RhY2t0cmFjZTogY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkuYXR0YWNoU3RhY2t0cmFjZSxcbiAgICAgICAgICAgICAgcmVqZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnQubGV2ZWwgPSBTZXZlcml0eS5FcnJvcjtcblxuICAgICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnb251bmhhbmRsZWRyZWplY3Rpb24nLFxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50SHViLmNhcHR1cmVFdmVudChldmVudCwge1xuICAgICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBlcnJvcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSxcbiAgICAgIHR5cGU6ICd1bmhhbmRsZWRyZWplY3Rpb24nLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fb25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzdGFjayBmcm9tIGFuIG9sZCwgZXJyb3ItbGVzcyBvbmVycm9yIGhhbmRsZXIuXG4gICAqL1xuICBwcml2YXRlIF9ldmVudEZyb21JbmNvbXBsZXRlT25FcnJvcihtc2c6IGFueSwgdXJsOiBhbnksIGxpbmU6IGFueSwgY29sdW1uOiBhbnkpOiBFdmVudCB7XG4gICAgY29uc3QgRVJST1JfVFlQRVNfUkUgPSAvXig/OltVdV1uY2F1Z2h0ICg/OmV4Y2VwdGlvbjogKT8pPyg/OigoPzpFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkl8KUVycm9yKTogKT8oLiopJC9pO1xuXG4gICAgLy8gSWYgJ21lc3NhZ2UnIGlzIEVycm9yRXZlbnQsIGdldCByZWFsIG1lc3NhZ2UgZnJvbSBpbnNpZGVcbiAgICBsZXQgbWVzc2FnZSA9IGlzRXJyb3JFdmVudChtc2cpID8gbXNnLm1lc3NhZ2UgOiBtc2c7XG4gICAgbGV0IG5hbWU7XG5cbiAgICBpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG1lc3NhZ2UubWF0Y2goRVJST1JfVFlQRVNfUkUpO1xuICAgICAgaWYgKGdyb3Vwcykge1xuICAgICAgICBuYW1lID0gZ3JvdXBzWzFdO1xuICAgICAgICBtZXNzYWdlID0gZ3JvdXBzWzJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgIHZhbHVlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IG5hbWUgfHwgJ0Vycm9yJyxcbiAgICAgICAgICAgIHZhbHVlOiBtZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fZW5oYW5jZUV2ZW50V2l0aEluaXRpYWxGcmFtZShldmVudCwgdXJsLCBsaW5lLCBjb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBFdmVudCBmcm9tIGFuIFRyYWNlS2l0U3RhY2tUcmFjZSB0aGF0IGhhcyBwYXJ0IG9mIGl0IG1pc3NpbmcuXG4gICAqL1xuICBwcml2YXRlIF9ldmVudEZyb21JbmNvbXBsZXRlUmVqZWN0aW9uKGVycm9yOiBhbnkpOiBFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4Y2VwdGlvbjoge1xuICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnVW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICAgICAgICAgIHZhbHVlOiBgTm9uLUVycm9yIHByb21pc2UgcmVqZWN0aW9uIGNhcHR1cmVkIHdpdGggdmFsdWU6ICR7ZXJyb3J9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2VuaGFuY2VFdmVudFdpdGhJbml0aWFsRnJhbWUoZXZlbnQ6IEV2ZW50LCB1cmw6IGFueSwgbGluZTogYW55LCBjb2x1bW46IGFueSk6IEV2ZW50IHtcbiAgICBldmVudC5leGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gfHwge307XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgfHwgW107XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gfHwge307XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlIHx8IHt9O1xuICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UuZnJhbWVzIHx8IFtdO1xuXG4gICAgY29uc3QgY29sbm8gPSBpc05hTihwYXJzZUludChjb2x1bW4sIDEwKSkgPyB1bmRlZmluZWQgOiBjb2x1bW47XG4gICAgY29uc3QgbGluZW5vID0gaXNOYU4ocGFyc2VJbnQobGluZSwgMTApKSA/IHVuZGVmaW5lZCA6IGxpbmU7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBpc1N0cmluZyh1cmwpICYmIHVybC5sZW5ndGggPiAwID8gdXJsIDogZ2V0TG9jYXRpb25IcmVmKCk7XG5cbiAgICBpZiAoZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXMucHVzaCh7XG4gICAgICAgIGNvbG5vLFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgZnVuY3Rpb246ICc/JyxcbiAgICAgICAgaW5fYXBwOiB0cnVlLFxuICAgICAgICBsaW5lbm8sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFvQkE7QUFDQTtBQXBCQTs7O0FBR0E7QUFVQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFGQTtBQVNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQURBO0FBN0JBO0FBaUNBO0FBakNBO0FBb0NBO0FBekNBO0FBNENBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBREE7QUFJQTtBQWxEQTtBQW9EQTtBQXBEQTtBQXVEQTtBQTVEQTtBQStEQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFGQTtBQURBO0FBV0E7QUExQkE7QUE2QkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFGQTtBQURBO0FBREE7QUFhQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFyQkE7QUFyTUE7Ozs7O0FBR0E7QUF5TkE7QUFsT0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/globalhandlers.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/index.js": -/*!*****************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/index.js ***! - \*****************************************************************/ -/*! exports provided: GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, UserAgent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _globalhandlers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./globalhandlers */ \"../node_modules/@sentry/browser/esm/integrations/globalhandlers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GlobalHandlers\", function() { return _globalhandlers__WEBPACK_IMPORTED_MODULE_0__[\"GlobalHandlers\"]; });\n\n/* harmony import */ var _trycatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./trycatch */ \"../node_modules/@sentry/browser/esm/integrations/trycatch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TryCatch\", function() { return _trycatch__WEBPACK_IMPORTED_MODULE_1__[\"TryCatch\"]; });\n\n/* harmony import */ var _breadcrumbs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breadcrumbs */ \"../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Breadcrumbs\", function() { return _breadcrumbs__WEBPACK_IMPORTED_MODULE_2__[\"Breadcrumbs\"]; });\n\n/* harmony import */ var _linkederrors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./linkederrors */ \"../node_modules/@sentry/browser/esm/integrations/linkederrors.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LinkedErrors\", function() { return _linkederrors__WEBPACK_IMPORTED_MODULE_3__[\"LinkedErrors\"]; });\n\n/* harmony import */ var _useragent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useragent */ \"../node_modules/@sentry/browser/esm/integrations/useragent.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UserAgent\", function() { return _useragent__WEBPACK_IMPORTED_MODULE_4__[\"UserAgent\"]; });\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvaW5kZXgudHM/ZWMyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBHbG9iYWxIYW5kbGVycyB9IGZyb20gJy4vZ2xvYmFsaGFuZGxlcnMnO1xuZXhwb3J0IHsgVHJ5Q2F0Y2ggfSBmcm9tICcuL3RyeWNhdGNoJztcbmV4cG9ydCB7IEJyZWFkY3J1bWJzIH0gZnJvbSAnLi9icmVhZGNydW1icyc7XG5leHBvcnQgeyBMaW5rZWRFcnJvcnMgfSBmcm9tICcuL2xpbmtlZGVycm9ycyc7XG5leHBvcnQgeyBVc2VyQWdlbnQgfSBmcm9tICcuL3VzZXJhZ2VudCc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/linkederrors.js": -/*!************************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/linkederrors.js ***! - \************************************************************************/ -/*! exports provided: LinkedErrors */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LinkedErrors\", function() { return LinkedErrors; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _parsers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../parsers */ \"../node_modules/@sentry/browser/esm/parsers.js\");\n/* harmony import */ var _tracekit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tracekit */ \"../node_modules/@sentry/browser/esm/tracekit.js\");\n\n\n\n\n\nvar DEFAULT_KEY = 'cause';\nvar DEFAULT_LIMIT = 5;\n/** Adds SDK info to an event. */\n\nvar LinkedErrors =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function LinkedErrors(options) {\n if (options === void 0) {\n options = {};\n }\n /**\n * @inheritDoc\n */\n\n\n this.name = LinkedErrors.id;\n this._key = options.key || DEFAULT_KEY;\n this._limit = options.limit || DEFAULT_LIMIT;\n }\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype.setupOnce = function () {\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"])(function (event, hint) {\n var self = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().getIntegration(LinkedErrors);\n\n if (self) {\n return self._handler(event, hint);\n }\n\n return event;\n });\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype._handler = function (event, hint) {\n if (!event.exception || !event.exception.values || !hint || !Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"isInstanceOf\"])(hint.originalException, Error)) {\n return event;\n }\n\n var linkedErrors = this._walkErrorTree(hint.originalException, this._key);\n\n event.exception.values = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](linkedErrors, event.exception.values);\n return event;\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype._walkErrorTree = function (error, key, stack) {\n if (stack === void 0) {\n stack = [];\n }\n\n if (!Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"isInstanceOf\"])(error[key], Error) || stack.length + 1 >= this._limit) {\n return stack;\n }\n\n var stacktrace = Object(_tracekit__WEBPACK_IMPORTED_MODULE_4__[\"computeStackTrace\"])(error[key]);\n var exception = Object(_parsers__WEBPACK_IMPORTED_MODULE_3__[\"exceptionFromStacktrace\"])(stacktrace);\n return this._walkErrorTree(error[key], key, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"]([exception], stack));\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.id = 'LinkedErrors';\n return LinkedErrors;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL2xpbmtlZGVycm9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9zcmMvaW50ZWdyYXRpb25zL2xpbmtlZGVycm9ycy50cz8yODYxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBFdmVudEhpbnQsIEV4Y2VwdGlvbiwgRXh0ZW5kZWRFcnJvciwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGlzSW5zdGFuY2VPZiB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBleGNlcHRpb25Gcm9tU3RhY2t0cmFjZSB9IGZyb20gJy4uL3BhcnNlcnMnO1xuaW1wb3J0IHsgY29tcHV0ZVN0YWNrVHJhY2UgfSBmcm9tICcuLi90cmFjZWtpdCc7XG5cbmNvbnN0IERFRkFVTFRfS0VZID0gJ2NhdXNlJztcbmNvbnN0IERFRkFVTFRfTElNSVQgPSA1O1xuXG4vKiogQWRkcyBTREsgaW5mbyB0byBhbiBldmVudC4gKi9cbmV4cG9ydCBjbGFzcyBMaW5rZWRFcnJvcnMgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9IExpbmtlZEVycm9ycy5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdMaW5rZWRFcnJvcnMnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saW1pdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsga2V5Pzogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9ID0ge30pIHtcbiAgICB0aGlzLl9rZXkgPSBvcHRpb25zLmtleSB8fCBERUZBVUxUX0tFWTtcbiAgICB0aGlzLl9saW1pdCA9IG9wdGlvbnMubGltaXQgfHwgREVGQVVMVF9MSU1JVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKExpbmtlZEVycm9ycyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlcihldmVudCwgaGludCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZXIoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KTogRXZlbnQgfCBudWxsIHtcbiAgICBpZiAoIWV2ZW50LmV4Y2VwdGlvbiB8fCAhZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyB8fCAhaGludCB8fCAhaXNJbnN0YW5jZU9mKGhpbnQub3JpZ2luYWxFeGNlcHRpb24sIEVycm9yKSkge1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgICBjb25zdCBsaW5rZWRFcnJvcnMgPSB0aGlzLl93YWxrRXJyb3JUcmVlKGhpbnQub3JpZ2luYWxFeGNlcHRpb24gYXMgRXh0ZW5kZWRFcnJvciwgdGhpcy5fa2V5KTtcbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gWy4uLmxpbmtlZEVycm9ycywgLi4uZXZlbnQuZXhjZXB0aW9uLnZhbHVlc107XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIF93YWxrRXJyb3JUcmVlKGVycm9yOiBFeHRlbmRlZEVycm9yLCBrZXk6IHN0cmluZywgc3RhY2s6IEV4Y2VwdGlvbltdID0gW10pOiBFeGNlcHRpb25bXSB7XG4gICAgaWYgKCFpc0luc3RhbmNlT2YoZXJyb3Jba2V5XSwgRXJyb3IpIHx8IHN0YWNrLmxlbmd0aCArIDEgPj0gdGhpcy5fbGltaXQpIHtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9XG4gICAgY29uc3Qgc3RhY2t0cmFjZSA9IGNvbXB1dGVTdGFja1RyYWNlKGVycm9yW2tleV0pO1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkZyb21TdGFja3RyYWNlKHN0YWNrdHJhY2UpO1xuICAgIHJldHVybiB0aGlzLl93YWxrRXJyb3JUcmVlKGVycm9yW2tleV0sIGtleSwgW2V4Y2VwdGlvbiwgLi4uc3RhY2tdKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFxQkE7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBdkJBOzs7OztBQUdBO0FBcUJBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBREE7QUFVQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFOQTtBQVNBOzs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQU5BO0FBbkRBOzs7OztBQUdBO0FBd0RBO0FBakVBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/linkederrors.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/trycatch.js": -/*!********************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/trycatch.js ***! - \********************************************************************/ -/*! exports provided: TryCatch */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TryCatch\", function() { return TryCatch; });\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers */ \"../node_modules/@sentry/browser/esm/helpers.js\");\n\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\n\nvar TryCatch =\n/** @class */\nfunction () {\n function TryCatch() {\n /** JSDoc */\n this._ignoreOnError = 0;\n /**\n * @inheritDoc\n */\n\n this.name = TryCatch.id;\n }\n /** JSDoc */\n\n\n TryCatch.prototype._wrapTimeFunction = function (original) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var originalCallback = args[0];\n args[0] = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"])(originalCallback, {\n mechanism: {\n data: {\n \"function\": Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(original)\n },\n handled: true,\n type: 'instrument'\n }\n });\n return original.apply(this, args);\n };\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapRAF = function (original) {\n return function (callback) {\n return original(Object(_helpers__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"])(callback, {\n mechanism: {\n data: {\n \"function\": 'requestAnimationFrame',\n handler: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(original)\n },\n handled: true,\n type: 'instrument'\n }\n }));\n };\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapEventTarget = function (target) {\n var global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getGlobalObject\"])();\n var proto = global[target] && global[target].prototype;\n\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(proto, 'addEventListener', function (original) {\n return function (eventName, fn, options) {\n try {\n // tslint:disable-next-line:no-unbound-method strict-type-predicates\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"])(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n \"function\": 'handleEvent',\n handler: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(fn),\n target: target\n },\n handled: true,\n type: 'instrument'\n }\n });\n }\n } catch (err) {// can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.call(this, eventName, Object(_helpers__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"])(fn, {\n mechanism: {\n data: {\n \"function\": 'addEventListener',\n handler: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(fn),\n target: target\n },\n handled: true,\n type: 'instrument'\n }\n }), options);\n };\n });\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(proto, 'removeEventListener', function (original) {\n return function (eventName, fn, options) {\n var callback = fn;\n\n try {\n callback = callback && (callback.__sentry_wrapped__ || callback);\n } catch (e) {// ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n\n return original.call(this, eventName, callback, options);\n };\n });\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapXHR = function (originalSend) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var xhr = this; // tslint:disable-line:no-this-assignment\n\n var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n xmlHttpRequestProps.forEach(function (prop) {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(xhr, prop, function (original) {\n var wrapOptions = {\n mechanism: {\n data: {\n \"function\": prop,\n handler: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(original)\n },\n handled: true,\n type: 'instrument'\n }\n }; // If Instrument integration has been called before TryCatch, get the name of original function\n\n if (original.__sentry_original__) {\n wrapOptions.mechanism.data.handler = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getFunctionName\"])(original.__sentry_original__);\n } // Otherwise wrap directly\n\n\n return Object(_helpers__WEBPACK_IMPORTED_MODULE_1__[\"wrap\"])(original, wrapOptions);\n });\n }\n });\n return originalSend.apply(this, args);\n };\n };\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n\n\n TryCatch.prototype.setupOnce = function () {\n this._ignoreOnError = this._ignoreOnError;\n var global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"getGlobalObject\"])();\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(global, 'setTimeout', this._wrapTimeFunction.bind(this));\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(global, 'setInterval', this._wrapTimeFunction.bind(this));\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(global, 'requestAnimationFrame', this._wrapRAF.bind(this));\n\n if ('XMLHttpRequest' in global) {\n Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"fill\"])(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this));\n }\n\n ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'].forEach(this._wrapEventTarget.bind(this));\n };\n /**\n * @inheritDoc\n */\n\n\n TryCatch.id = 'TryCatch';\n return TryCatch;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL3RyeWNhdGNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvdHJ5Y2F0Y2gudHM/MzU3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlZ3JhdGlvbiwgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBmaWxsLCBnZXRGdW5jdGlvbk5hbWUsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyB3cmFwIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbnR5cGUgWE1MSHR0cFJlcXVlc3RQcm9wID0gJ29ubG9hZCcgfCAnb25lcnJvcicgfCAnb25wcm9ncmVzcycgfCAnb25yZWFkeXN0YXRlY2hhbmdlJztcblxuLyoqIFdyYXAgdGltZXIgZnVuY3Rpb25zIGFuZCBldmVudCB0YXJnZXRzIHRvIGNhdGNoIGVycm9ycyBhbmQgcHJvdmlkZSBiZXR0ZXIgbWV0YSBkYXRhICovXG5leHBvcnQgY2xhc3MgVHJ5Q2F0Y2ggaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pZ25vcmVPbkVycm9yOiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IFRyeUNhdGNoLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1RyeUNhdGNoJztcblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfd3JhcFRpbWVGdW5jdGlvbihvcmlnaW5hbDogKCkgPT4gdm9pZCk6ICgpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pOiBudW1iZXIge1xuICAgICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICBhcmdzWzBdID0gd3JhcChvcmlnaW5hbENhbGxiYWNrLCB7XG4gICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgIGRhdGE6IHsgZnVuY3Rpb246IGdldEZ1bmN0aW9uTmFtZShvcmlnaW5hbCkgfSxcbiAgICAgICAgICBoYW5kbGVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdpbnN0cnVtZW50JyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfd3JhcFJBRihvcmlnaW5hbDogYW55KTogKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiBhbnkge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBhbnksIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwoXG4gICAgICAgIHdyYXAoY2FsbGJhY2ssIHtcbiAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZnVuY3Rpb246ICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBnZXRGdW5jdGlvbk5hbWUob3JpZ2luYWwpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfd3JhcEV2ZW50VGFyZ2V0KHRhcmdldDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCkgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBjb25zdCBwcm90byA9IGdsb2JhbFt0YXJnZXRdICYmIGdsb2JhbFt0YXJnZXRdLnByb3RvdHlwZTtcblxuICAgIGlmICghcHJvdG8gfHwgIXByb3RvLmhhc093blByb3BlcnR5IHx8ICFwcm90by5oYXNPd25Qcm9wZXJ0eSgnYWRkRXZlbnRMaXN0ZW5lcicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsbChwcm90bywgJ2FkZEV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbihcbiAgICAgIG9yaWdpbmFsOiAoKSA9PiB2b2lkLFxuICAgICk6IChldmVudE5hbWU6IHN0cmluZywgZm46IEV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKFxuICAgICAgICB0aGlzOiBhbnksXG4gICAgICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBmbjogRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICAgICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgICAgICk6IChldmVudE5hbWU6IHN0cmluZywgZm46IEV2ZW50TGlzdGVuZXJPYmplY3QsIGNhcHR1cmU/OiBib29sZWFuLCBzZWN1cmU/OiBib29sZWFuKSA9PiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5ib3VuZC1tZXRob2Qgc3RyaWN0LXR5cGUtcHJlZGljYXRlc1xuICAgICAgICAgIGlmICh0eXBlb2YgZm4uaGFuZGxlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuLmhhbmRsZUV2ZW50ID0gd3JhcChmbi5oYW5kbGVFdmVudC5iaW5kKGZuKSwge1xuICAgICAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbjogJ2hhbmRsZUV2ZW50JyxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGdldEZ1bmN0aW9uTmFtZShmbiksXG4gICAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnN0cnVtZW50JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gY2FuIHNvbWV0aW1lcyBnZXQgJ1Blcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBwcm9wZXJ0eSBcImhhbmRsZSBFdmVudCdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgIHdyYXAoKGZuIGFzIGFueSkgYXMgV3JhcHBlZEZ1bmN0aW9uLCB7XG4gICAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiAnYWRkRXZlbnRMaXN0ZW5lcicsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZ2V0RnVuY3Rpb25OYW1lKGZuKSxcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbnN0cnVtZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWxsKHByb3RvLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsIGZ1bmN0aW9uKFxuICAgICAgb3JpZ2luYWw6ICgpID0+IHZvaWQsXG4gICAgKTogKHRoaXM6IGFueSwgZXZlbnROYW1lOiBzdHJpbmcsIGZuOiBFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiAoKSA9PiB2b2lkIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogYW55LFxuICAgICAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgZm46IEV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgICAgIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICAgICApOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gKGZuIGFzIGFueSkgYXMgV3JhcHBlZEZ1bmN0aW9uO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgJiYgKGNhbGxiYWNrLl9fc2VudHJ5X3dyYXBwZWRfXyB8fCBjYWxsYmFjayk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUsIGFjY2Vzc2luZyBfX3NlbnRyeV93cmFwcGVkX18gd2lsbCB0aHJvdyBpbiBzb21lIFNlbGVuaXVtIGVudmlyb25tZW50c1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF93cmFwWEhSKG9yaWdpbmFsU2VuZDogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBYTUxIdHRwUmVxdWVzdCwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHhociA9IHRoaXM7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tdGhpcy1hc3NpZ25tZW50XG4gICAgICBjb25zdCB4bWxIdHRwUmVxdWVzdFByb3BzOiBYTUxIdHRwUmVxdWVzdFByb3BbXSA9IFsnb25sb2FkJywgJ29uZXJyb3InLCAnb25wcm9ncmVzcycsICdvbnJlYWR5c3RhdGVjaGFuZ2UnXTtcblxuICAgICAgeG1sSHR0cFJlcXVlc3RQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBpZiAocHJvcCBpbiB4aHIgJiYgdHlwZW9mIHhocltwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGZpbGwoeGhyLCBwcm9wLCBmdW5jdGlvbihvcmlnaW5hbDogV3JhcHBlZEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICAgICAgY29uc3Qgd3JhcE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgaGFuZGxlcjogZ2V0RnVuY3Rpb25OYW1lKG9yaWdpbmFsKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gSWYgSW5zdHJ1bWVudCBpbnRlZ3JhdGlvbiBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlIFRyeUNhdGNoLCBnZXQgdGhlIG5hbWUgb2Ygb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgICAgICAgIGlmIChvcmlnaW5hbC5fX3NlbnRyeV9vcmlnaW5hbF9fKSB7XG4gICAgICAgICAgICAgIHdyYXBPcHRpb25zLm1lY2hhbmlzbS5kYXRhLmhhbmRsZXIgPSBnZXRGdW5jdGlvbk5hbWUob3JpZ2luYWwuX19zZW50cnlfb3JpZ2luYWxfXyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3cmFwIGRpcmVjdGx5XG4gICAgICAgICAgICByZXR1cm4gd3JhcChvcmlnaW5hbCwgd3JhcE9wdGlvbnMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9yaWdpbmFsU2VuZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgdGltZXIgZnVuY3Rpb25zIGFuZCBldmVudCB0YXJnZXRzIHRvIGNhdGNoIGVycm9yc1xuICAgKiBhbmQgcHJvdmlkZSBiZXR0ZXIgbWV0YWRhdGEuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lnbm9yZU9uRXJyb3IgPSB0aGlzLl9pZ25vcmVPbkVycm9yO1xuXG4gICAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG5cbiAgICBmaWxsKGdsb2JhbCwgJ3NldFRpbWVvdXQnLCB0aGlzLl93cmFwVGltZUZ1bmN0aW9uLmJpbmQodGhpcykpO1xuICAgIGZpbGwoZ2xvYmFsLCAnc2V0SW50ZXJ2YWwnLCB0aGlzLl93cmFwVGltZUZ1bmN0aW9uLmJpbmQodGhpcykpO1xuICAgIGZpbGwoZ2xvYmFsLCAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywgdGhpcy5fd3JhcFJBRi5iaW5kKHRoaXMpKTtcblxuICAgIGlmICgnWE1MSHR0cFJlcXVlc3QnIGluIGdsb2JhbCkge1xuICAgICAgZmlsbChYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsICdzZW5kJywgdGhpcy5fd3JhcFhIUi5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBbXG4gICAgICAnRXZlbnRUYXJnZXQnLFxuICAgICAgJ1dpbmRvdycsXG4gICAgICAnTm9kZScsXG4gICAgICAnQXBwbGljYXRpb25DYWNoZScsXG4gICAgICAnQXVkaW9UcmFja0xpc3QnLFxuICAgICAgJ0NoYW5uZWxNZXJnZXJOb2RlJyxcbiAgICAgICdDcnlwdG9PcGVyYXRpb24nLFxuICAgICAgJ0V2ZW50U291cmNlJyxcbiAgICAgICdGaWxlUmVhZGVyJyxcbiAgICAgICdIVE1MVW5rbm93bkVsZW1lbnQnLFxuICAgICAgJ0lEQkRhdGFiYXNlJyxcbiAgICAgICdJREJSZXF1ZXN0JyxcbiAgICAgICdJREJUcmFuc2FjdGlvbicsXG4gICAgICAnS2V5T3BlcmF0aW9uJyxcbiAgICAgICdNZWRpYUNvbnRyb2xsZXInLFxuICAgICAgJ01lc3NhZ2VQb3J0JyxcbiAgICAgICdNb2RhbFdpbmRvdycsXG4gICAgICAnTm90aWZpY2F0aW9uJyxcbiAgICAgICdTVkdFbGVtZW50SW5zdGFuY2UnLFxuICAgICAgJ1NjcmVlbicsXG4gICAgICAnVGV4dFRyYWNrJyxcbiAgICAgICdUZXh0VHJhY2tDdWUnLFxuICAgICAgJ1RleHRUcmFja0xpc3QnLFxuICAgICAgJ1dlYlNvY2tldCcsXG4gICAgICAnV2ViU29ja2V0V29ya2VyJyxcbiAgICAgICdXb3JrZXInLFxuICAgICAgJ1hNTEh0dHBSZXF1ZXN0JyxcbiAgICAgICdYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0JyxcbiAgICAgICdYTUxIdHRwUmVxdWVzdFVwbG9hZCcsXG4gICAgXS5mb3JFYWNoKHRoaXMuX3dyYXBFdmVudFRhcmdldC5iaW5kKHRoaXMpKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQXdNQTtBQWpNQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBT0E7QUFUQTtBQURBO0FBY0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFOQTtBQURBO0FBRkE7QUFEQTtBQWlCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQVBBO0FBREE7QUFXQTtBQWRBO0FBaUJBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFQQTtBQURBO0FBNUJBO0FBSEE7QUErQ0E7QUFHQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQUE7QUFaQTtBQUhBO0FBdkRBO0FBMkVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQU5BO0FBREE7QUFDQTtBQVdBO0FBQ0E7QUFkQTtBQUNBO0FBQ0E7QUFnQkE7QUFsQkE7QUFvQkE7QUF0QkE7QUF5QkE7QUE3QkE7QUFEQTtBQWtDQTs7Ozs7O0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUF6SkE7Ozs7O0FBR0E7QUFtTUE7QUEvTUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/trycatch.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/integrations/useragent.js": -/*!*********************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/integrations/useragent.js ***! - \*********************************************************************/ -/*! exports provided: UserAgent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UserAgent\", function() { return UserAgent; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n\nvar global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getGlobalObject\"])();\n/** UserAgent */\n\nvar UserAgent =\n/** @class */\nfunction () {\n function UserAgent() {\n /**\n * @inheritDoc\n */\n this.name = UserAgent.id;\n }\n /**\n * @inheritDoc\n */\n\n\n UserAgent.prototype.setupOnce = function () {\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"])(function (event) {\n if (Object(_sentry_core__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])().getIntegration(UserAgent)) {\n if (!global.navigator || !global.location) {\n return event;\n } // Request Interface: https://docs.sentry.io/development/sdk-dev/event-payloads/request/\n\n\n var request = event.request || {};\n request.url = request.url || global.location.href;\n request.headers = request.headers || {};\n request.headers['User-Agent'] = global.navigator.userAgent;\n return tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event, {\n request: request\n });\n }\n\n return event;\n });\n };\n /**\n * @inheritDoc\n */\n\n\n UserAgent.id = 'UserAgent';\n return UserAgent;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL3VzZXJhZ2VudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9zcmMvaW50ZWdyYXRpb25zL3VzZXJhZ2VudC50cz8yN2NmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbi8qKiBVc2VyQWdlbnQgKi9cbmV4cG9ydCBjbGFzcyBVc2VyQWdlbnQgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IFVzZXJBZ2VudC5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdVc2VyQWdlbnQnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFVzZXJBZ2VudCkpIHtcbiAgICAgICAgaWYgKCFnbG9iYWwubmF2aWdhdG9yIHx8ICFnbG9iYWwubG9jYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXF1ZXN0IEludGVyZmFjZTogaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9kZXZlbG9wbWVudC9zZGstZGV2L2V2ZW50LXBheWxvYWRzL3JlcXVlc3QvXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0IHx8IHt9O1xuICAgICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsIHx8IGdsb2JhbC5sb2NhdGlvbi5ocmVmO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMgfHwge307XG4gICAgICAgIHJlcXVlc3QuaGVhZGVyc1snVXNlci1BZ2VudCddID0gZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUFHQTtBQStCQTtBQXhCQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFqQkE7QUFEQTtBQVJBOzs7OztBQUdBO0FBMEJBO0FBbkNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/integrations/useragent.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/parsers.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/parsers.js ***! - \******************************************************/ -/*! exports provided: exceptionFromStacktrace, eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"exceptionFromStacktrace\", function() { return exceptionFromStacktrace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eventFromPlainObject\", function() { return eventFromPlainObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eventFromStacktrace\", function() { return eventFromStacktrace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prepareFramesForEvent\", function() { return prepareFramesForEvent; });\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _tracekit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tracekit */ \"../node_modules/@sentry/browser/esm/tracekit.js\");\n\n\nvar STACKTRACE_LIMIT = 50;\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\n\nfunction exceptionFromStacktrace(stacktrace) {\n var frames = prepareFramesForEvent(stacktrace.stack);\n var exception = {\n type: stacktrace.name,\n value: stacktrace.message\n };\n\n if (frames && frames.length) {\n exception.stacktrace = {\n frames: frames\n };\n } // tslint:disable-next-line:strict-type-predicates\n\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n/**\n * @hidden\n */\n\nfunction eventFromPlainObject(exception, syntheticException, rejection) {\n var event = {\n exception: {\n values: [{\n type: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"isEvent\"])(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: \"Non-Error \" + (rejection ? 'promise rejection' : 'exception') + \" captured with keys: \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"extractExceptionKeysForMessage\"])(exception)\n }]\n },\n extra: {\n __serialized__: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"normalizeToSize\"])(exception)\n }\n };\n\n if (syntheticException) {\n var stacktrace = Object(_tracekit__WEBPACK_IMPORTED_MODULE_1__[\"computeStackTrace\"])(syntheticException);\n var frames_1 = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames: frames_1\n };\n }\n\n return event;\n}\n/**\n * @hidden\n */\n\nfunction eventFromStacktrace(stacktrace) {\n var exception = exceptionFromStacktrace(stacktrace);\n return {\n exception: {\n values: [exception]\n }\n };\n}\n/**\n * @hidden\n */\n\nfunction prepareFramesForEvent(stack) {\n if (!stack || !stack.length) {\n return [];\n }\n\n var localStack = stack;\n var firstFrameFunction = localStack[0].func || '';\n var lastFrameFunction = localStack[localStack.length - 1].func || ''; // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n } // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n\n\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n } // The frame where the crash happened, should be the last entry in the array\n\n\n return localStack.map(function (frame) {\n return {\n colno: frame.column === null ? undefined : frame.column,\n filename: frame.url || localStack[0].url,\n \"function\": frame.func || '?',\n in_app: true,\n lineno: frame.line === null ? undefined : frame.line\n };\n }).slice(0, STACKTRACE_LIMIT).reverse();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vcGFyc2Vycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvcGFyc2Vycy50cz85MGYxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50LCBFeGNlcHRpb24sIFN0YWNrRnJhbWUgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZSwgaXNFdmVudCwgbm9ybWFsaXplVG9TaXplIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IGNvbXB1dGVTdGFja1RyYWNlLCBTdGFja0ZyYW1lIGFzIFRyYWNlS2l0U3RhY2tGcmFtZSwgU3RhY2tUcmFjZSBhcyBUcmFjZUtpdFN0YWNrVHJhY2UgfSBmcm9tICcuL3RyYWNla2l0JztcblxuY29uc3QgU1RBQ0tUUkFDRV9MSU1JVCA9IDUwO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBleGNlcHRpb24gZnJvbSBhbiBUcmFjZUtpdFN0YWNrVHJhY2VcbiAqIEBwYXJhbSBzdGFja3RyYWNlIFRyYWNlS2l0U3RhY2tUcmFjZSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvblxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZXB0aW9uRnJvbVN0YWNrdHJhY2Uoc3RhY2t0cmFjZTogVHJhY2VLaXRTdGFja1RyYWNlKTogRXhjZXB0aW9uIHtcbiAgY29uc3QgZnJhbWVzID0gcHJlcGFyZUZyYW1lc0ZvckV2ZW50KHN0YWNrdHJhY2Uuc3RhY2spO1xuXG4gIGNvbnN0IGV4Y2VwdGlvbjogRXhjZXB0aW9uID0ge1xuICAgIHR5cGU6IHN0YWNrdHJhY2UubmFtZSxcbiAgICB2YWx1ZTogc3RhY2t0cmFjZS5tZXNzYWdlLFxuICB9O1xuXG4gIGlmIChmcmFtZXMgJiYgZnJhbWVzLmxlbmd0aCkge1xuICAgIGV4Y2VwdGlvbi5zdGFja3RyYWNlID0geyBmcmFtZXMgfTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIGlmIChleGNlcHRpb24udHlwZSA9PT0gdW5kZWZpbmVkICYmIGV4Y2VwdGlvbi52YWx1ZSA9PT0gJycpIHtcbiAgICBleGNlcHRpb24udmFsdWUgPSAnVW5yZWNvdmVyYWJsZSBlcnJvciBjYXVnaHQnO1xuICB9XG5cbiAgcmV0dXJuIGV4Y2VwdGlvbjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudEZyb21QbGFpbk9iamVjdChleGNlcHRpb246IHt9LCBzeW50aGV0aWNFeGNlcHRpb24/OiBFcnJvciwgcmVqZWN0aW9uPzogYm9vbGVhbik6IEV2ZW50IHtcbiAgY29uc3QgZXZlbnQ6IEV2ZW50ID0ge1xuICAgIGV4Y2VwdGlvbjoge1xuICAgICAgdmFsdWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBpc0V2ZW50KGV4Y2VwdGlvbikgPyBleGNlcHRpb24uY29uc3RydWN0b3IubmFtZSA6IHJlamVjdGlvbiA/ICdVbmhhbmRsZWRSZWplY3Rpb24nIDogJ0Vycm9yJyxcbiAgICAgICAgICB2YWx1ZTogYE5vbi1FcnJvciAke1xuICAgICAgICAgICAgcmVqZWN0aW9uID8gJ3Byb21pc2UgcmVqZWN0aW9uJyA6ICdleGNlcHRpb24nXG4gICAgICAgICAgfSBjYXB0dXJlZCB3aXRoIGtleXM6ICR7ZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlKGV4Y2VwdGlvbil9YCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBleHRyYToge1xuICAgICAgX19zZXJpYWxpemVkX186IG5vcm1hbGl6ZVRvU2l6ZShleGNlcHRpb24pLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKHN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgIGNvbnN0IHN0YWNrdHJhY2UgPSBjb21wdXRlU3RhY2tUcmFjZShzeW50aGV0aWNFeGNlcHRpb24pO1xuICAgIGNvbnN0IGZyYW1lcyA9IHByZXBhcmVGcmFtZXNGb3JFdmVudChzdGFja3RyYWNlLnN0YWNrKTtcbiAgICBldmVudC5zdGFja3RyYWNlID0ge1xuICAgICAgZnJhbWVzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRGcm9tU3RhY2t0cmFjZShzdGFja3RyYWNlOiBUcmFjZUtpdFN0YWNrVHJhY2UpOiBFdmVudCB7XG4gIGNvbnN0IGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkZyb21TdGFja3RyYWNlKHN0YWNrdHJhY2UpO1xuXG4gIHJldHVybiB7XG4gICAgZXhjZXB0aW9uOiB7XG4gICAgICB2YWx1ZXM6IFtleGNlcHRpb25dLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUZyYW1lc0ZvckV2ZW50KHN0YWNrOiBUcmFjZUtpdFN0YWNrRnJhbWVbXSk6IFN0YWNrRnJhbWVbXSB7XG4gIGlmICghc3RhY2sgfHwgIXN0YWNrLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGxldCBsb2NhbFN0YWNrID0gc3RhY2s7XG5cbiAgY29uc3QgZmlyc3RGcmFtZUZ1bmN0aW9uID0gbG9jYWxTdGFja1swXS5mdW5jIHx8ICcnO1xuICBjb25zdCBsYXN0RnJhbWVGdW5jdGlvbiA9IGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jIHx8ICcnO1xuXG4gIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbClcbiAgaWYgKGZpcnN0RnJhbWVGdW5jdGlvbi5pbmRleE9mKCdjYXB0dXJlTWVzc2FnZScpICE9PSAtMSB8fCBmaXJzdEZyYW1lRnVuY3Rpb24uaW5kZXhPZignY2FwdHVyZUV4Y2VwdGlvbicpICE9PSAtMSkge1xuICAgIGxvY2FsU3RhY2sgPSBsb2NhbFN0YWNrLnNsaWNlKDEpO1xuICB9XG5cbiAgLy8gSWYgc3RhY2sgZW5kcyB3aXRoIG9uZSBvZiBvdXIgaW50ZXJuYWwgQVBJIGNhbGxzLCByZW1vdmUgaXQgKGVuZHMsIG1lYW5pbmcgaXQncyB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAtIGFrYSB0b3AtbW9zdCBjYWxsKVxuICBpZiAobGFzdEZyYW1lRnVuY3Rpb24uaW5kZXhPZignc2VudHJ5V3JhcHBlZCcpICE9PSAtMSkge1xuICAgIGxvY2FsU3RhY2sgPSBsb2NhbFN0YWNrLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIC8vIFRoZSBmcmFtZSB3aGVyZSB0aGUgY3Jhc2ggaGFwcGVuZWQsIHNob3VsZCBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgYXJyYXlcbiAgcmV0dXJuIGxvY2FsU3RhY2tcbiAgICAubWFwKFxuICAgICAgKGZyYW1lOiBUcmFjZUtpdFN0YWNrRnJhbWUpOiBTdGFja0ZyYW1lID0+ICh7XG4gICAgICAgIGNvbG5vOiBmcmFtZS5jb2x1bW4gPT09IG51bGwgPyB1bmRlZmluZWQgOiBmcmFtZS5jb2x1bW4sXG4gICAgICAgIGZpbGVuYW1lOiBmcmFtZS51cmwgfHwgbG9jYWxTdGFja1swXS51cmwsXG4gICAgICAgIGZ1bmN0aW9uOiBmcmFtZS5mdW5jIHx8ICc/JyxcbiAgICAgICAgaW5fYXBwOiB0cnVlLFxuICAgICAgICBsaW5lbm86IGZyYW1lLmxpbmUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBmcmFtZS5saW5lLFxuICAgICAgfSksXG4gICAgKVxuICAgIC5zbGljZSgwLCBTVEFDS1RSQUNFX0xJTUlUKVxuICAgIC5yZXZlcnNlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBRkE7QUFVQTtBQUNBO0FBREE7QUFYQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFaQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBakJBO0FBQ0E7QUFDQTtBQW1CQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBRkE7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/parsers.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/sdk.js": -/*!**************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/sdk.js ***! - \**************************************************/ -/*! exports provided: defaultIntegrations, init, showReportDialog, lastEventId, forceLoad, onLoad, flush, close, wrap */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultIntegrations\", function() { return defaultIntegrations; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"init\", function() { return init; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"showReportDialog\", function() { return showReportDialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lastEventId\", function() { return lastEventId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"forceLoad\", function() { return forceLoad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"onLoad\", function() { return onLoad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flush\", function() { return flush; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"close\", function() { return close; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrap\", function() { return wrap; });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./client */ \"../node_modules/@sentry/browser/esm/client.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"../node_modules/@sentry/browser/esm/helpers.js\");\n/* harmony import */ var _integrations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./integrations */ \"../node_modules/@sentry/browser/esm/integrations/index.js\");\n\n\n\n\n\nvar defaultIntegrations = [new _sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"Integrations\"].InboundFilters(), new _sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"Integrations\"].FunctionToString(), new _integrations__WEBPACK_IMPORTED_MODULE_4__[\"TryCatch\"](), new _integrations__WEBPACK_IMPORTED_MODULE_4__[\"Breadcrumbs\"](), new _integrations__WEBPACK_IMPORTED_MODULE_4__[\"GlobalHandlers\"](), new _integrations__WEBPACK_IMPORTED_MODULE_4__[\"LinkedErrors\"](), new _integrations__WEBPACK_IMPORTED_MODULE_4__[\"UserAgent\"]()];\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\n\nfunction init(options) {\n if (options === void 0) {\n options = {};\n }\n\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n\n if (options.release === undefined) {\n var window_1 = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])(); // This supports the variable that sentry-webpack-plugin injects\n\n if (window_1.SENTRY_RELEASE && window_1.SENTRY_RELEASE.id) {\n options.release = window_1.SENTRY_RELEASE.id;\n }\n }\n\n Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"initAndBind\"])(_client__WEBPACK_IMPORTED_MODULE_2__[\"BrowserClient\"], options);\n}\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\n\nfunction showReportDialog(options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!options.eventId) {\n options.eventId = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().lastEventId();\n }\n\n var client = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().getClient();\n\n if (client) {\n client.showReportDialog(options);\n }\n}\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\n\nfunction lastEventId() {\n return Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().lastEventId();\n}\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\n\nfunction forceLoad() {} // Noop\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\n\nfunction onLoad(callback) {\n callback();\n}\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\n\nfunction flush(timeout) {\n var client = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().getClient();\n\n if (client) {\n return client.flush(timeout);\n }\n\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].reject(false);\n}\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\n\nfunction close(timeout) {\n var client = Object(_sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().getClient();\n\n if (client) {\n return client.close(timeout);\n }\n\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].reject(false);\n}\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n\nfunction wrap(fn) {\n return Object(_helpers__WEBPACK_IMPORTED_MODULE_3__[\"wrap\"])(fn)(); // tslint:disable-line:no-unsafe-any\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vc2RrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9zZGsudHM/ZDhhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50SHViLCBpbml0QW5kQmluZCwgSW50ZWdyYXRpb25zIGFzIENvcmVJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBCcm93c2VyT3B0aW9ucyB9IGZyb20gJy4vYmFja2VuZCc7XG5pbXBvcnQgeyBCcm93c2VyQ2xpZW50LCBSZXBvcnREaWFsb2dPcHRpb25zIH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgd3JhcCBhcyBpbnRlcm5hbFdyYXAgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnMsIEdsb2JhbEhhbmRsZXJzLCBMaW5rZWRFcnJvcnMsIFRyeUNhdGNoLCBVc2VyQWdlbnQgfSBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZWdyYXRpb25zID0gW1xuICBuZXcgQ29yZUludGVncmF0aW9ucy5JbmJvdW5kRmlsdGVycygpLFxuICBuZXcgQ29yZUludGVncmF0aW9ucy5GdW5jdGlvblRvU3RyaW5nKCksXG4gIG5ldyBUcnlDYXRjaCgpLFxuICBuZXcgQnJlYWRjcnVtYnMoKSxcbiAgbmV3IEdsb2JhbEhhbmRsZXJzKCksXG4gIG5ldyBMaW5rZWRFcnJvcnMoKSxcbiAgbmV3IFVzZXJBZ2VudCgpLFxuXTtcblxuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIENsaWVudC5cbiAqXG4gKiBUbyB1c2UgdGhpcyBTREssIGNhbGwgdGhlIHtAbGluayBpbml0fSBmdW5jdGlvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSB3aGVuXG4gKiBsb2FkaW5nIHRoZSB3ZWIgcGFnZS4gVG8gc2V0IGNvbnRleHQgaW5mb3JtYXRpb24gb3Igc2VuZCBtYW51YWwgZXZlbnRzLCB1c2VcbiAqIHRoZSBwcm92aWRlZCBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgXG4gKlxuICogaW1wb3J0IHsgaW5pdCB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKlxuICogaW5pdCh7XG4gKiAgIGRzbjogJ19fRFNOX18nLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGltcG9ydCB7IGNvbmZpZ3VyZVNjb3BlIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIGNvbmZpZ3VyZVNjb3BlKChzY29wZTogU2NvcGUpID0+IHtcbiAqICAgc2NvcGUuc2V0RXh0cmEoeyBiYXR0ZXJ5OiAwLjcgfSk7XG4gKiAgIHNjb3BlLnNldFRhZyh7IHVzZXJfbW9kZTogJ2FkbWluJyB9KTtcbiAqICAgc2NvcGUuc2V0VXNlcih7IGlkOiAnNDcxMScgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBpbXBvcnQgeyBhZGRCcmVhZGNydW1iIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIGFkZEJyZWFkY3J1bWIoe1xuICogICBtZXNzYWdlOiAnTXkgQnJlYWRjcnVtYicsXG4gKiAgIC8vIC4uLlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYFxuICpcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuICogU2VudHJ5LmNhcHR1cmVNZXNzYWdlKCdIZWxsbywgd29ybGQhJyk7XG4gKiBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoJ0dvb2QgYnllJykpO1xuICogU2VudHJ5LmNhcHR1cmVFdmVudCh7XG4gKiAgIG1lc3NhZ2U6ICdNYW51YWwnLFxuICogICBzdGFja3RyYWNlOiBbXG4gKiAgICAgLy8gLi4uXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIEJyb3dzZXJPcHRpb25zfSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG9wdGlvbnM6IEJyb3dzZXJPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgaWYgKG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zID0gZGVmYXVsdEludGVncmF0aW9ucztcbiAgfVxuICBpZiAob3B0aW9ucy5yZWxlYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB3aW5kb3cgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuICAgIC8vIFRoaXMgc3VwcG9ydHMgdGhlIHZhcmlhYmxlIHRoYXQgc2VudHJ5LXdlYnBhY2stcGx1Z2luIGluamVjdHNcbiAgICBpZiAod2luZG93LlNFTlRSWV9SRUxFQVNFICYmIHdpbmRvdy5TRU5UUllfUkVMRUFTRS5pZCkge1xuICAgICAgb3B0aW9ucy5yZWxlYXNlID0gd2luZG93LlNFTlRSWV9SRUxFQVNFLmlkO1xuICAgIH1cbiAgfVxuICBpbml0QW5kQmluZChCcm93c2VyQ2xpZW50LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBQcmVzZW50IHRoZSB1c2VyIHdpdGggYSByZXBvcnQgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEV2ZXJ5dGhpbmcgaXMgb3B0aW9uYWwsIHdlIHRyeSB0byBmZXRjaCBhbGwgaW5mbyBuZWVkIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dSZXBvcnREaWFsb2cob3B0aW9uczogUmVwb3J0RGlhbG9nT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGlmICghb3B0aW9ucy5ldmVudElkKSB7XG4gICAgb3B0aW9ucy5ldmVudElkID0gZ2V0Q3VycmVudEh1YigpLmxhc3RFdmVudElkKCk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxCcm93c2VyQ2xpZW50PigpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgY2xpZW50LnNob3dSZXBvcnREaWFsb2cob3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBnZXR0ZXIgZm9yIGxhc3RFdmVudElkLlxuICpcbiAqIEByZXR1cm5zIFRoZSBsYXN0IGV2ZW50IGlkIG9mIGEgY2FwdHVyZWQgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0RXZlbnRJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmxhc3RFdmVudElkKCk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIGJlIEFQSSBjb21wYXRpYmxlIHdpdGggdGhlIGxvYWRlci5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmNlTG9hZCgpOiB2b2lkIHtcbiAgLy8gTm9vcFxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIHRoZSBsb2FkZXIuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxvYWQoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgY2FsbGJhY2soKTtcbn1cblxuLyoqXG4gKiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBjdXJyZW50IGV2ZW50cyBoYXZlIGJlZW4gc2VudC5cbiAqIElmIHlvdSBwcm92aWRlIGEgdGltZW91dCBhbmQgdGhlIHF1ZXVlIHRha2VzIGxvbmdlciB0byBkcmFpbiB0aGUgcHJvbWlzZSByZXR1cm5zIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmx1c2godGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxCcm93c2VyQ2xpZW50PigpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgcmV0dXJuIGNsaWVudC5mbHVzaCh0aW1lb3V0KTtcbiAgfVxuICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KGZhbHNlKTtcbn1cblxuLyoqXG4gKiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBjdXJyZW50IGV2ZW50cyBoYXZlIGJlZW4gc2VudC5cbiAqIElmIHlvdSBwcm92aWRlIGEgdGltZW91dCBhbmQgdGhlIHF1ZXVlIHRha2VzIGxvbmdlciB0byBkcmFpbiB0aGUgcHJvbWlzZSByZXR1cm5zIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UodGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxCcm93c2VyQ2xpZW50PigpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgcmV0dXJuIGNsaWVudC5jbG9zZSh0aW1lb3V0KTtcbiAgfVxuICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KGZhbHNlKTtcbn1cblxuLyoqXG4gKiBXcmFwIGNvZGUgd2l0aGluIGEgdHJ5L2NhdGNoIGJsb2NrIHNvIHRoZSBTREsgaXMgYWJsZSB0byBjYXB0dXJlIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0gZm4gQSBmdW5jdGlvbiB0byB3cmFwLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2Ygd3JhcHBlZCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcChmbjogRnVuY3Rpb24pOiBhbnkge1xuICByZXR1cm4gaW50ZXJuYWxXcmFwKGZuKSgpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVuc2FmZS1hbnlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBVUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5REE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFHQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/sdk.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/tracekit.js": -/*!*******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/tracekit.js ***! - \*******************************************************/ -/*! exports provided: computeStackTrace */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"computeStackTrace\", function() { return computeStackTrace; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n// tslint:disable:object-literal-sort-keys\n // global reference to slice\n\nvar UNKNOWN_FUNCTION = '?'; // Chromium based browsers: Chrome, Brave, new Opera, new Edge\n\nvar chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i; // gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\n\nvar gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js))(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nvar geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nvar chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n/** JSDoc */\n\nfunction computeStackTrace(ex) {\n // tslint:disable:no-unsafe-any\n var stack = null;\n var popSize = ex && ex.framesToPop;\n\n try {\n // This must be tried first because Opera 10 *destroys*\n // its stacktrace property if you try to access the stack\n // property first!!\n stack = computeStackTraceFromStacktraceProp(ex);\n\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {// no-empty\n }\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {// no-empty\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: [],\n failed: true\n };\n}\n/** JSDoc */\n// tslint:disable-next-line:cyclomatic-complexity\n\nfunction computeStackTraceFromStackProp(ex) {\n // tslint:disable:no-conditional-assignment\n if (!ex || !ex.stack) {\n return null;\n }\n\n var stack = [];\n var lines = ex.stack.split('\\n');\n var isEval;\n var submatch;\n var parts;\n var element;\n\n for (var i = 0; i < lines.length; ++i) {\n if (parts = chrome.exec(lines[i])) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n\n parts[3] = submatch[2]; // line\n\n parts[4] = submatch[3]; // column\n }\n\n element = {\n // working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `\n // prefix here seems like the quickest solution for now.\n url: parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = winjs.exec(lines[i])) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = gecko.exec(lines[i])) {\n isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || \"eval\";\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = ''; // no column when eval\n } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack: stack\n };\n}\n/** JSDoc */\n\n\nfunction computeStackTraceFromStacktraceProp(ex) {\n if (!ex || !ex.stacktrace) {\n return null;\n } // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n\n\n var stacktrace = ex.stacktrace;\n var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n var opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^\\)]+))\\((.*)\\))? in (.*):\\s*$/i;\n var lines = stacktrace.split('\\n');\n var stack = [];\n var parts;\n\n for (var line = 0; line < lines.length; line += 2) {\n // tslint:disable:no-conditional-assignment\n var element = null;\n\n if (parts = opera10Regex.exec(lines[line])) {\n element = {\n url: parts[2],\n func: parts[3],\n args: [],\n line: +parts[1],\n column: null\n };\n } else if (parts = opera11Regex.exec(lines[line])) {\n element = {\n url: parts[6],\n func: parts[3] || parts[4],\n args: parts[5] ? parts[5].split(',') : [],\n line: +parts[1],\n column: +parts[2]\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack: stack\n };\n}\n/** Remove N number of frames from the stack */\n\n\nfunction popFrames(stacktrace, popSize) {\n try {\n return tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, stacktrace, {\n stack: stacktrace.stack.slice(popSize)\n });\n } catch (e) {\n return stacktrace;\n }\n}\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\n\n\nfunction extractMessage(ex) {\n var message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n return message;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhY2VraXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL3RyYWNla2l0LnRzP2JlYzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG5cbi8qKlxuICogVGhpcyB3YXMgb3JpZ2luYWxseSBmb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vb2NjL1RyYWNlS2l0LCBidXQgaGFzIHNpbmNlIGJlZW5cbiAqIGxhcmdlbHkgbW9kaWZpZWQgYW5kIGlzIG5vdyBtYWludGFpbmVkIGFzIHBhcnQgb2YgU2VudHJ5IEpTIFNESy5cbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc3RhY2sgZnJhbWUuXG4gKiB7T2JqZWN0fSBTdGFja0ZyYW1lXG4gKiB7c3RyaW5nfSB1cmwgVGhlIEphdmFTY3JpcHQgb3IgSFRNTCBmaWxlIFVSTC5cbiAqIHtzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG5hbWUsIG9yIGVtcHR5IGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIChpZiBndWVzc2luZyBkaWQgbm90IHdvcmspLlxuICoge3N0cmluZ1tdP30gYXJncyBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sIGlmIGtub3duLlxuICoge251bWJlcj19IGxpbmUgVGhlIGxpbmUgbnVtYmVyLCBpZiBrbm93bi5cbiAqIHtudW1iZXI9fSBjb2x1bW4gVGhlIGNvbHVtbiBudW1iZXIsIGlmIGtub3duLlxuICoge3N0cmluZ1tdfSBjb250ZXh0IEFuIGFycmF5IG9mIHNvdXJjZSBjb2RlIGxpbmVzOyB0aGUgbWlkZGxlIGVsZW1lbnQgY29ycmVzcG9uZHMgdG8gdGhlIGNvcnJlY3QgbGluZSMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tGcmFtZSB7XG4gIHVybDogc3RyaW5nO1xuICBmdW5jOiBzdHJpbmc7XG4gIGFyZ3M6IHN0cmluZ1tdO1xuICBsaW5lOiBudW1iZXIgfCBudWxsO1xuICBjb2x1bW46IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIEphdmFTY3JpcHQgc3RhY2sgdHJhY2UuXG4gKiB7T2JqZWN0fSBTdGFja1RyYWNlXG4gKiB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLlxuICoge3N0cmluZ30gbWVzc2FnZSBUaGUgZXhjZXB0aW9uIGVycm9yIG1lc3NhZ2UuXG4gKiB7VHJhY2VLaXQuU3RhY2tGcmFtZVtdfSBzdGFjayBBbiBhcnJheSBvZiBzdGFjayBmcmFtZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tUcmFjZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBtZWNoYW5pc20/OiBzdHJpbmc7XG4gIHN0YWNrOiBTdGFja0ZyYW1lW107XG4gIGZhaWxlZD86IGJvb2xlYW47XG59XG5cbi8vIGdsb2JhbCByZWZlcmVuY2UgdG8gc2xpY2VcbmNvbnN0IFVOS05PV05fRlVOQ1RJT04gPSAnPyc7XG5cbi8vIENocm9taXVtIGJhc2VkIGJyb3dzZXJzOiBDaHJvbWUsIEJyYXZlLCBuZXcgT3BlcmEsIG5ldyBFZGdlXG5jb25zdCBjaHJvbWUgPSAvXlxccyphdCAoPzooLio/KSA/XFwoKT8oKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufGFkZHJlc3N8bmF0aXZlfGV2YWx8d2VicGFja3w8YW5vbnltb3VzPnxbLWEtel0rOnwuKmJ1bmRsZXxcXC8pLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuLy8gZ2Vja28gcmVnZXg6IGAoPzpidW5kbGV8XFxkK1xcLmpzKWA6IGBidW5kbGVgIGlzIGZvciByZWFjdCBuYXRpdmUsIGBcXGQrXFwuanNgIGFsc28gYnV0IHNwZWNpZmljYWxseSBmb3IgcmFtIGJ1bmRsZXMgYmVjYXVzZSBpdFxuLy8gZ2VuZXJhdGVzIGZpbGVuYW1lcyB3aXRob3V0IGEgcHJlZml4IGxpa2UgYGZpbGU6Ly9gIHRoZSBmaWxlbmFtZXMgaW4gdGhlIHN0YWNrdHJhY2UgYXJlIGp1c3QgNDIuanNcbi8vIFdlIG5lZWQgdGhpcyBzcGVjaWZpYyBjYXNlIGZvciBub3cgYmVjYXVzZSB3ZSB3YW50IG5vIG90aGVyIHJlZ2V4IHRvIG1hdGNoLlxuY29uc3QgZ2Vja28gPSAvXlxccyooLio/KSg/OlxcKCguKj8pXFwpKT8oPzpefEApPygoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHJlc291cmNlfG1vei1leHRlbnNpb24pLio/OlxcLy4qP3xcXFtuYXRpdmUgY29kZVxcXXxbXkBdKig/OmJ1bmRsZXxcXGQrXFwuanMpKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7XG5jb25zdCB3aW5qcyA9IC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3xibG9iKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuY29uc3QgZ2Vja29FdmFsID0gLyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7XG5jb25zdCBjaHJvbWVFdmFsID0gL1xcKChcXFMqKSg/OjooXFxkKykpKD86OihcXGQrKSlcXCkvO1xuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RhY2tUcmFjZShleDogYW55KTogU3RhY2tUcmFjZSB7XG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLXVuc2FmZS1hbnlcblxuICBsZXQgc3RhY2sgPSBudWxsO1xuICBjb25zdCBwb3BTaXplOiBudW1iZXIgPSBleCAmJiBleC5mcmFtZXNUb1BvcDtcblxuICB0cnkge1xuICAgIC8vIFRoaXMgbXVzdCBiZSB0cmllZCBmaXJzdCBiZWNhdXNlIE9wZXJhIDEwICpkZXN0cm95cypcbiAgICAvLyBpdHMgc3RhY2t0cmFjZSBwcm9wZXJ0eSBpZiB5b3UgdHJ5IHRvIGFjY2VzcyB0aGUgc3RhY2tcbiAgICAvLyBwcm9wZXJ0eSBmaXJzdCEhXG4gICAgc3RhY2sgPSBjb21wdXRlU3RhY2tUcmFjZUZyb21TdGFja3RyYWNlUHJvcChleCk7XG4gICAgaWYgKHN0YWNrKSB7XG4gICAgICByZXR1cm4gcG9wRnJhbWVzKHN0YWNrLCBwb3BTaXplKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBuby1lbXB0eVxuICB9XG5cbiAgdHJ5IHtcbiAgICBzdGFjayA9IGNvbXB1dGVTdGFja1RyYWNlRnJvbVN0YWNrUHJvcChleCk7XG4gICAgaWYgKHN0YWNrKSB7XG4gICAgICByZXR1cm4gcG9wRnJhbWVzKHN0YWNrLCBwb3BTaXplKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBuby1lbXB0eVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBleHRyYWN0TWVzc2FnZShleCksXG4gICAgbmFtZTogZXggJiYgZXgubmFtZSxcbiAgICBzdGFjazogW10sXG4gICAgZmFpbGVkOiB0cnVlLFxuICB9O1xufVxuXG4vKiogSlNEb2MgKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbmZ1bmN0aW9uIGNvbXB1dGVTdGFja1RyYWNlRnJvbVN0YWNrUHJvcChleDogYW55KTogU3RhY2tUcmFjZSB8IG51bGwge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XG4gIGlmICghZXggfHwgIWV4LnN0YWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuICBjb25zdCBsaW5lcyA9IGV4LnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgbGV0IGlzRXZhbDtcbiAgbGV0IHN1Ym1hdGNoO1xuICBsZXQgcGFydHM7XG4gIGxldCBlbGVtZW50O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHBhcnRzID0gY2hyb21lLmV4ZWMobGluZXNbaV0pKSkge1xuICAgICAgY29uc3QgaXNOYXRpdmUgPSBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCduYXRpdmUnKSA9PT0gMDsgLy8gc3RhcnQgb2YgbGluZVxuICAgICAgaXNFdmFsID0gcGFydHNbMl0gJiYgcGFydHNbMl0uaW5kZXhPZignZXZhbCcpID09PSAwOyAvLyBzdGFydCBvZiBsaW5lXG4gICAgICBpZiAoaXNFdmFsICYmIChzdWJtYXRjaCA9IGNocm9tZUV2YWwuZXhlYyhwYXJ0c1syXSkpKSB7XG4gICAgICAgIC8vIHRocm93IG91dCBldmFsIGxpbmUvY29sdW1uIGFuZCB1c2UgdG9wLW1vc3QgbGluZS9jb2x1bW4gbnVtYmVyXG4gICAgICAgIHBhcnRzWzJdID0gc3VibWF0Y2hbMV07IC8vIHVybFxuICAgICAgICBwYXJ0c1szXSA9IHN1Ym1hdGNoWzJdOyAvLyBsaW5lXG4gICAgICAgIHBhcnRzWzRdID0gc3VibWF0Y2hbM107IC8vIGNvbHVtblxuICAgICAgfVxuICAgICAgZWxlbWVudCA9IHtcbiAgICAgICAgLy8gd29ya2luZyB3aXRoIHRoZSByZWdleHAgYWJvdmUgaXMgc3VwZXIgcGFpbmZ1bC4gaXQgaXMgcXVpdGUgYSBoYWNrLCBidXQganVzdCBzdHJpcHBpbmcgdGhlIGBhZGRyZXNzIGF0IGBcbiAgICAgICAgLy8gcHJlZml4IGhlcmUgc2VlbXMgbGlrZSB0aGUgcXVpY2tlc3Qgc29sdXRpb24gZm9yIG5vdy5cbiAgICAgICAgdXJsOiBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCdhZGRyZXNzIGF0ICcpID09PSAwID8gcGFydHNbMl0uc3Vic3RyKCdhZGRyZXNzIGF0ICcubGVuZ3RoKSA6IHBhcnRzWzJdLFxuICAgICAgICBmdW5jOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgICAgICBhcmdzOiBpc05hdGl2ZSA/IFtwYXJ0c1syXV0gOiBbXSxcbiAgICAgICAgbGluZTogcGFydHNbM10gPyArcGFydHNbM10gOiBudWxsLFxuICAgICAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgocGFydHMgPSB3aW5qcy5leGVjKGxpbmVzW2ldKSkpIHtcbiAgICAgIGVsZW1lbnQgPSB7XG4gICAgICAgIHVybDogcGFydHNbMl0sXG4gICAgICAgIGZ1bmM6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICBsaW5lOiArcGFydHNbM10sXG4gICAgICAgIGNvbHVtbjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKChwYXJ0cyA9IGdlY2tvLmV4ZWMobGluZXNbaV0pKSkge1xuICAgICAgaXNFdmFsID0gcGFydHNbM10gJiYgcGFydHNbM10uaW5kZXhPZignID4gZXZhbCcpID4gLTE7XG4gICAgICBpZiAoaXNFdmFsICYmIChzdWJtYXRjaCA9IGdlY2tvRXZhbC5leGVjKHBhcnRzWzNdKSkpIHtcbiAgICAgICAgLy8gdGhyb3cgb3V0IGV2YWwgbGluZS9jb2x1bW4gYW5kIHVzZSB0b3AtbW9zdCBsaW5lIG51bWJlclxuICAgICAgICBwYXJ0c1sxXSA9IHBhcnRzWzFdIHx8IGBldmFsYDtcbiAgICAgICAgcGFydHNbM10gPSBzdWJtYXRjaFsxXTtcbiAgICAgICAgcGFydHNbNF0gPSBzdWJtYXRjaFsyXTtcbiAgICAgICAgcGFydHNbNV0gPSAnJzsgLy8gbm8gY29sdW1uIHdoZW4gZXZhbFxuICAgICAgfSBlbHNlIGlmIChpID09PSAwICYmICFwYXJ0c1s1XSAmJiBleC5jb2x1bW5OdW1iZXIgIT09IHZvaWQgMCkge1xuICAgICAgICAvLyBGaXJlRm94IHVzZXMgdGhpcyBhd2Vzb21lIGNvbHVtbk51bWJlciBwcm9wZXJ0eSBmb3IgaXRzIHRvcCBmcmFtZVxuICAgICAgICAvLyBBbHNvIG5vdGUsIEZpcmVmb3gncyBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBleHBlY3RzIDEtYmFzZWQsXG4gICAgICAgIC8vIHNvIGFkZGluZyAxXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgaGFjayBkb2Vzbid0IHdvcmsgaWYgdG9wLW1vc3QgZnJhbWUgaXMgZXZhbFxuICAgICAgICBzdGFja1swXS5jb2x1bW4gPSAoZXguY29sdW1uTnVtYmVyIGFzIG51bWJlcikgKyAxO1xuICAgICAgfVxuICAgICAgZWxlbWVudCA9IHtcbiAgICAgICAgdXJsOiBwYXJ0c1szXSxcbiAgICAgICAgZnVuYzogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICAgICAgYXJnczogcGFydHNbMl0gPyBwYXJ0c1syXS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgIGxpbmU6IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbCxcbiAgICAgICAgY29sdW1uOiBwYXJ0c1s1XSA/ICtwYXJ0c1s1XSA6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQuZnVuYyAmJiBlbGVtZW50LmxpbmUpIHtcbiAgICAgIGVsZW1lbnQuZnVuYyA9IFVOS05PV05fRlVOQ1RJT047XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChlbGVtZW50KTtcbiAgfVxuXG4gIGlmICghc3RhY2subGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IGV4dHJhY3RNZXNzYWdlKGV4KSxcbiAgICBuYW1lOiBleC5uYW1lLFxuICAgIHN0YWNrLFxuICB9O1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdGFja1RyYWNlRnJvbVN0YWNrdHJhY2VQcm9wKGV4OiBhbnkpOiBTdGFja1RyYWNlIHwgbnVsbCB7XG4gIGlmICghZXggfHwgIWV4LnN0YWNrdHJhY2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBBY2Nlc3MgYW5kIHN0b3JlIHRoZSBzdGFja3RyYWNlIHByb3BlcnR5IGJlZm9yZSBkb2luZyBBTllUSElOR1xuICAvLyBlbHNlIHRvIGl0IGJlY2F1c2UgT3BlcmEgaXMgbm90IHZlcnkgZ29vZCBhdCBwcm92aWRpbmcgaXRcbiAgLy8gcmVsaWFibHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy5cbiAgY29uc3Qgc3RhY2t0cmFjZSA9IGV4LnN0YWNrdHJhY2U7XG4gIGNvbnN0IG9wZXJhMTBSZWdleCA9IC8gbGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogaW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gIGNvbnN0IG9wZXJhMTFSZWdleCA9IC8gbGluZSAoXFxkKyksIGNvbHVtbiAoXFxkKylcXHMqKD86aW4gKD86PGFub255bW91cyBmdW5jdGlvbjogKFtePl0rKT58KFteXFwpXSspKVxcKCguKilcXCkpPyBpbiAoLiopOlxccyokL2k7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHN0YWNrID0gW107XG4gIGxldCBwYXJ0cztcblxuICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IGxpbmVzLmxlbmd0aDsgbGluZSArPSAyKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uZGl0aW9uYWwtYXNzaWdubWVudFxuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgICBpZiAoKHBhcnRzID0gb3BlcmExMFJlZ2V4LmV4ZWMobGluZXNbbGluZV0pKSkge1xuICAgICAgZWxlbWVudCA9IHtcbiAgICAgICAgdXJsOiBwYXJ0c1syXSxcbiAgICAgICAgZnVuYzogcGFydHNbM10sXG4gICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICBsaW5lOiArcGFydHNbMV0sXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgocGFydHMgPSBvcGVyYTExUmVnZXguZXhlYyhsaW5lc1tsaW5lXSkpKSB7XG4gICAgICBlbGVtZW50ID0ge1xuICAgICAgICB1cmw6IHBhcnRzWzZdLFxuICAgICAgICBmdW5jOiBwYXJ0c1szXSB8fCBwYXJ0c1s0XSxcbiAgICAgICAgYXJnczogcGFydHNbNV0gPyBwYXJ0c1s1XS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgIGxpbmU6ICtwYXJ0c1sxXSxcbiAgICAgICAgY29sdW1uOiArcGFydHNbMl0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQuZnVuYyAmJiBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgZWxlbWVudC5mdW5jID0gVU5LTk9XTl9GVU5DVElPTjtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogZXh0cmFjdE1lc3NhZ2UoZXgpLFxuICAgIG5hbWU6IGV4Lm5hbWUsXG4gICAgc3RhY2ssXG4gIH07XG59XG5cbi8qKiBSZW1vdmUgTiBudW1iZXIgb2YgZnJhbWVzIGZyb20gdGhlIHN0YWNrICovXG5mdW5jdGlvbiBwb3BGcmFtZXMoc3RhY2t0cmFjZTogU3RhY2tUcmFjZSwgcG9wU2l6ZTogbnVtYmVyKTogU3RhY2tUcmFjZSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YWNrdHJhY2UsXG4gICAgICBzdGFjazogc3RhY2t0cmFjZS5zdGFjay5zbGljZShwb3BTaXplKSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHN0YWNrdHJhY2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgc3RhY2t0cmFjZS5tZXNzYWdlIGlzIGFuIEV2ZW50IG9iamVjdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMTk0OVxuICogSW4gdGhpcyBzcGVjaWZpYyBjYXNlIHdlIHRyeSB0byBleHRyYWN0IHN0YWNrdHJhY2UubWVzc2FnZS5lcnJvci5tZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RNZXNzYWdlKGV4OiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXggJiYgZXgubWVzc2FnZTtcbiAgaWYgKCFtZXNzYWdlKSB7XG4gICAgcmV0dXJuICdObyBlcnJvciBtZXNzYWdlJztcbiAgfVxuICBpZiAobWVzc2FnZS5lcnJvciAmJiB0eXBlb2YgbWVzc2FnZS5lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtZXNzYWdlLmVycm9yLm1lc3NhZ2U7XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0NBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVRBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBREE7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBZkE7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQURBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/tracekit.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/transports/base.js": -/*!**************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/transports/base.js ***! - \**************************************************************/ -/*! exports provided: BaseTransport */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseTransport\", function() { return BaseTransport; });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"../node_modules/@sentry/core/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n/** Base Transport class implementation */\n\nvar BaseTransport =\n/** @class */\nfunction () {\n function BaseTransport(options) {\n this.options = options;\n /** A simple buffer holding all requests. */\n\n this._buffer = new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"PromiseBuffer\"](30);\n this.url = new _sentry_core__WEBPACK_IMPORTED_MODULE_0__[\"API\"](this.options.dsn).getStoreEndpointWithUrlEncodedAuth();\n }\n /**\n * @inheritDoc\n */\n\n\n BaseTransport.prototype.sendEvent = function (_) {\n throw new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"]('Transport Class has to implement `sendEvent` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseTransport.prototype.close = function (timeout) {\n return this._buffer.drain(timeout);\n };\n\n return BaseTransport;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhbnNwb3J0cy9iYXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy90cmFuc3BvcnRzL2Jhc2UudHM/ZjdhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUEkgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgRXZlbnQsIFJlc3BvbnNlLCBUcmFuc3BvcnQsIFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IFByb21pc2VCdWZmZXIsIFNlbnRyeUVycm9yIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKiBCYXNlIFRyYW5zcG9ydCBjbGFzcyBpbXBsZW1lbnRhdGlvbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VUcmFuc3BvcnQgaW1wbGVtZW50cyBUcmFuc3BvcnQge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB1cmw6IHN0cmluZztcblxuICAvKiogQSBzaW1wbGUgYnVmZmVyIGhvbGRpbmcgYWxsIHJlcXVlc3RzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2J1ZmZlcjogUHJvbWlzZUJ1ZmZlcjxSZXNwb25zZT4gPSBuZXcgUHJvbWlzZUJ1ZmZlcigzMCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBUcmFuc3BvcnRPcHRpb25zKSB7XG4gICAgdGhpcy51cmwgPSBuZXcgQVBJKHRoaXMub3B0aW9ucy5kc24pLmdldFN0b3JlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRFdmVudChfOiBFdmVudCk6IFByb21pc2VMaWtlPFJlc3BvbnNlPiB7XG4gICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKCdUcmFuc3BvcnQgQ2xhc3MgaGFzIHRvIGltcGxlbWVudCBgc2VuZEV2ZW50YCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kcmFpbih0aW1lb3V0KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBU0E7QUFBQTtBQUhBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBMUJBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/transports/base.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/transports/fetch.js": -/*!***************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/transports/fetch.js ***! - \***************************************************************/ -/*! exports provided: FetchTransport */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FetchTransport\", function() { return FetchTransport; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"../node_modules/@sentry/browser/esm/transports/base.js\");\n\n\n\n\nvar global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getGlobalObject\"])();\n/** `fetch` based transport */\n\nvar FetchTransport =\n/** @class */\nfunction (_super) {\n tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"](FetchTransport, _super);\n\n function FetchTransport() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** Locks transport after receiving 429 response */\n\n\n _this._disabledUntil = new Date(Date.now());\n return _this;\n }\n /**\n * @inheritDoc\n */\n\n\n FetchTransport.prototype.sendEvent = function (event) {\n var _this = this;\n\n if (new Date(Date.now()) < this._disabledUntil) {\n return Promise.reject({\n event: event,\n reason: \"Transport locked till \" + this._disabledUntil + \" due to too many requests.\",\n status: 429\n });\n }\n\n var defaultOptions = {\n body: JSON.stringify(event),\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"supportsReferrerPolicy\"])() ? 'origin' : ''\n };\n\n if (this.options.headers !== undefined) {\n defaultOptions.headers = this.options.headers;\n }\n\n return this._buffer.add(new _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"SyncPromise\"](function (resolve, reject) {\n global.fetch(_this.url, defaultOptions).then(function (response) {\n var status = _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].fromHttpCode(response.status);\n\n if (status === _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].Success) {\n resolve({\n status: status\n });\n return;\n }\n\n if (status === _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].RateLimit) {\n var now = Date.now();\n _this._disabledUntil = new Date(now + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"parseRetryAfterHeader\"])(now, response.headers.get('Retry-After')));\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Too many requests, backing off till: \" + _this._disabledUntil);\n }\n\n reject(response);\n })[\"catch\"](reject);\n }));\n };\n\n return FetchTransport;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseTransport\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhbnNwb3J0cy9mZXRjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9zcmMvdHJhbnNwb3J0cy9mZXRjaC50cz83MWJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50LCBSZXNwb25zZSwgU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciwgcGFyc2VSZXRyeUFmdGVySGVhZGVyLCBzdXBwb3J0c1JlZmVycmVyUG9saWN5LCBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcblxuLyoqIGBmZXRjaGAgYmFzZWQgdHJhbnNwb3J0ICovXG5leHBvcnQgY2xhc3MgRmV0Y2hUcmFuc3BvcnQgZXh0ZW5kcyBCYXNlVHJhbnNwb3J0IHtcbiAgLyoqIExvY2tzIHRyYW5zcG9ydCBhZnRlciByZWNlaXZpbmcgNDI5IHJlc3BvbnNlICovXG4gIHByaXZhdGUgX2Rpc2FibGVkVW50aWw6IERhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpKTtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICBpZiAobmV3IERhdGUoRGF0ZS5ub3coKSkgPCB0aGlzLl9kaXNhYmxlZFVudGlsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgcmVhc29uOiBgVHJhbnNwb3J0IGxvY2tlZCB0aWxsICR7dGhpcy5fZGlzYWJsZWRVbnRpbH0gZHVlIHRvIHRvbyBtYW55IHJlcXVlc3RzLmAsXG4gICAgICAgIHN0YXR1czogNDI5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZXZlbnQpLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAvLyBEZXNwaXRlIGFsbCBzdGFycyBpbiB0aGUgc2t5IHNheWluZyB0aGF0IEVkZ2Ugc3VwcG9ydHMgb2xkIGRyYWZ0IHN5bnRheCwgYWthICduZXZlcicsICdhbHdheXMnLCAnb3JpZ2luJyBhbmQgJ2RlZmF1bHRcbiAgICAgIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9cmVmZXJyZXItcG9saWN5XG4gICAgICAvLyBJdCBkb2Vzbid0LiBBbmQgaXQgdGhyb3cgZXhjZXB0aW9uIGluc3RlYWQgb2YgaWdub3JpbmcgdGhpcyBwYXJhbWV0ZXIuLi5cbiAgICAgIC8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1qcy9pc3N1ZXMvMTIzM1xuICAgICAgcmVmZXJyZXJQb2xpY3k6IChzdXBwb3J0c1JlZmVycmVyUG9saWN5KCkgPyAnb3JpZ2luJyA6ICcnKSBhcyBSZWZlcnJlclBvbGljeSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmF1bHRPcHRpb25zLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmFkZChcbiAgICAgIG5ldyBTeW5jUHJvbWlzZTxSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBnbG9iYWxcbiAgICAgICAgICAuZmV0Y2godGhpcy51cmwsIGRlZmF1bHRPcHRpb25zKVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IFN0YXR1cy5mcm9tSHR0cENvZGUocmVzcG9uc2Uuc3RhdHVzKTtcblxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN0YXR1cyB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBTdGF0dXMuUmF0ZUxpbWl0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkVW50aWwgPSBuZXcgRGF0ZShub3cgKyBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIobm93LCByZXNwb25zZS5oZWFkZXJzLmdldCgnUmV0cnktQWZ0ZXInKSkpO1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgVG9vIG1hbnkgcmVxdWVzdHMsIGJhY2tpbmcgb2ZmIHRpbGw6ICR7dGhpcy5fZGlzYWJsZWRVbnRpbH1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTs7QUFvREE7QUFsREE7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFGQTtBQXZCQTtBQUNBO0FBOENBO0FBdERBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/transports/fetch.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/transports/index.js": -/*!***************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/transports/index.js ***! - \***************************************************************/ -/*! exports provided: BaseTransport, FetchTransport, XHRTransport */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"../node_modules/@sentry/browser/esm/transports/base.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BaseTransport\", function() { return _base__WEBPACK_IMPORTED_MODULE_0__[\"BaseTransport\"]; });\n\n/* harmony import */ var _fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fetch */ \"../node_modules/@sentry/browser/esm/transports/fetch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FetchTransport\", function() { return _fetch__WEBPACK_IMPORTED_MODULE_1__[\"FetchTransport\"]; });\n\n/* harmony import */ var _xhr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./xhr */ \"../node_modules/@sentry/browser/esm/transports/xhr.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"XHRTransport\", function() { return _xhr__WEBPACK_IMPORTED_MODULE_2__[\"XHRTransport\"]; });\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhbnNwb3J0cy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9zcmMvdHJhbnNwb3J0cy9pbmRleC50cz85YzNlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEJhc2VUcmFuc3BvcnQgfSBmcm9tICcuL2Jhc2UnO1xuZXhwb3J0IHsgRmV0Y2hUcmFuc3BvcnQgfSBmcm9tICcuL2ZldGNoJztcbmV4cG9ydCB7IFhIUlRyYW5zcG9ydCB9IGZyb20gJy4veGhyJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/transports/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/transports/xhr.js": -/*!*************************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/transports/xhr.js ***! - \*************************************************************/ -/*! exports provided: XHRTransport */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"XHRTransport\", function() { return XHRTransport; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"../node_modules/@sentry/browser/esm/transports/base.js\");\n\n\n\n\n/** `XHR` based transport */\n\nvar XHRTransport =\n/** @class */\nfunction (_super) {\n tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"](XHRTransport, _super);\n\n function XHRTransport() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** Locks transport after receiving 429 response */\n\n\n _this._disabledUntil = new Date(Date.now());\n return _this;\n }\n /**\n * @inheritDoc\n */\n\n\n XHRTransport.prototype.sendEvent = function (event) {\n var _this = this;\n\n if (new Date(Date.now()) < this._disabledUntil) {\n return Promise.reject({\n event: event,\n reason: \"Transport locked till \" + this._disabledUntil + \" due to too many requests.\",\n status: 429\n });\n }\n\n return this._buffer.add(new _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"SyncPromise\"](function (resolve, reject) {\n var request = new XMLHttpRequest();\n\n request.onreadystatechange = function () {\n if (request.readyState !== 4) {\n return;\n }\n\n var status = _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].fromHttpCode(request.status);\n\n if (status === _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].Success) {\n resolve({\n status: status\n });\n return;\n }\n\n if (status === _sentry_types__WEBPACK_IMPORTED_MODULE_1__[\"Status\"].RateLimit) {\n var now = Date.now();\n _this._disabledUntil = new Date(now + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"parseRetryAfterHeader\"])(now, request.getResponseHeader('Retry-After')));\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Too many requests, backing off till: \" + _this._disabledUntil);\n }\n\n reject(request);\n };\n\n request.open('POST', _this.url);\n\n for (var header in _this.options.headers) {\n if (_this.options.headers.hasOwnProperty(header)) {\n request.setRequestHeader(header, _this.options.headers[header]);\n }\n }\n\n request.send(JSON.stringify(event));\n }));\n };\n\n return XHRTransport;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseTransport\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhbnNwb3J0cy94aHIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3RyYW5zcG9ydHMveGhyLnRzP2IwYjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnQsIFJlc3BvbnNlLCBTdGF0dXMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciwgcGFyc2VSZXRyeUFmdGVySGVhZGVyLCBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcblxuLyoqIGBYSFJgIGJhc2VkIHRyYW5zcG9ydCAqL1xuZXhwb3J0IGNsYXNzIFhIUlRyYW5zcG9ydCBleHRlbmRzIEJhc2VUcmFuc3BvcnQge1xuICAvKiogTG9ja3MgdHJhbnNwb3J0IGFmdGVyIHJlY2VpdmluZyA0MjkgcmVzcG9uc2UgKi9cbiAgcHJpdmF0ZSBfZGlzYWJsZWRVbnRpbDogRGF0ZSA9IG5ldyBEYXRlKERhdGUubm93KCkpO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRFdmVudChldmVudDogRXZlbnQpOiBQcm9taXNlTGlrZTxSZXNwb25zZT4ge1xuICAgIGlmIChuZXcgRGF0ZShEYXRlLm5vdygpKSA8IHRoaXMuX2Rpc2FibGVkVW50aWwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICByZWFzb246IGBUcmFuc3BvcnQgbG9ja2VkIHRpbGwgJHt0aGlzLl9kaXNhYmxlZFVudGlsfSBkdWUgdG8gdG9vIG1hbnkgcmVxdWVzdHMuYCxcbiAgICAgICAgc3RhdHVzOiA0MjksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmFkZChcbiAgICAgIG5ldyBTeW5jUHJvbWlzZTxSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IFN0YXR1cy5mcm9tSHR0cENvZGUocmVxdWVzdC5zdGF0dXMpO1xuXG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBzdGF0dXMgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3RhdHVzLlJhdGVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkVW50aWwgPSBuZXcgRGF0ZShub3cgKyBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIobm93LCByZXF1ZXN0LmdldFJlc3BvbnNlSGVhZGVyKCdSZXRyeS1BZnRlcicpKSk7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgVG9vIG1hbnkgcmVxdWVzdHMsIGJhY2tpbmcgb2ZmIHRpbGw6ICR7dGhpcy5fZGlzYWJsZWRVbnRpbH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWplY3QocmVxdWVzdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5vcGVuKCdQT1NUJywgdGhpcy51cmwpO1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiB0aGlzLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB0aGlzLm9wdGlvbnMuaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5zZW5kKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTs7QUFpREE7QUEvQ0E7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQUNBO0FBb0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQS9CQTtBQVRBO0FBQ0E7QUEyQ0E7QUFuREE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/transports/xhr.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/browser/esm/version.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/browser/esm/version.js ***! - \******************************************************/ -/*! exports provided: SDK_NAME, SDK_VERSION */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SDK_NAME\", function() { return SDK_NAME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SDK_VERSION\", function() { return SDK_VERSION; });\nvar SDK_NAME = 'sentry.javascript.browser';\nvar SDK_VERSION = '5.14.1';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdmVyc2lvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvdmVyc2lvbi50cz8wMDAzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTREtfTkFNRSA9ICdzZW50cnkuamF2YXNjcmlwdC5icm93c2VyJztcbmV4cG9ydCBjb25zdCBTREtfVkVSU0lPTiA9ICc1LjE0LjEnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/browser/esm/version.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/api.js": -/*!***********************************************!*\ - !*** ../node_modules/@sentry/core/esm/api.js ***! - \***********************************************/ -/*! exports provided: API */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"API\", function() { return API; });\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\nvar SENTRY_API_VERSION = '7';\n/** Helper class to provide urls to different Sentry endpoints. */\n\nvar API =\n/** @class */\nfunction () {\n /** Create a new instance of API */\n function API(dsn) {\n this.dsn = dsn;\n this._dsnObject = new _sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"Dsn\"](dsn);\n }\n /** Returns the Dsn object. */\n\n\n API.prototype.getDsn = function () {\n return this._dsnObject;\n };\n /** Returns a string with auth headers in the url to the store endpoint. */\n\n\n API.prototype.getStoreEndpoint = function () {\n return \"\" + this._getBaseUrl() + this.getStoreEndpointPath();\n };\n /** Returns the store endpoint with auth added in url encoded. */\n\n\n API.prototype.getStoreEndpointWithUrlEncodedAuth = function () {\n var dsn = this._dsnObject;\n var auth = {\n sentry_key: dsn.user,\n sentry_version: SENTRY_API_VERSION\n }; // Auth is intentionally sent as part of query string (NOT as custom HTTP header)\n // to avoid preflight CORS requests\n\n return this.getStoreEndpoint() + \"?\" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"urlEncode\"])(auth);\n };\n /** Returns the base path of the url including the port. */\n\n\n API.prototype._getBaseUrl = function () {\n var dsn = this._dsnObject;\n var protocol = dsn.protocol ? dsn.protocol + \":\" : '';\n var port = dsn.port ? \":\" + dsn.port : '';\n return protocol + \"//\" + dsn.host + port;\n };\n /** Returns only the path component for the store endpoint. */\n\n\n API.prototype.getStoreEndpointPath = function () {\n var dsn = this._dsnObject;\n return (dsn.path ? \"/\" + dsn.path : '') + \"/api/\" + dsn.projectId + \"/store/\";\n };\n /** Returns an object that can be used in request headers. */\n\n\n API.prototype.getRequestHeaders = function (clientName, clientVersion) {\n var dsn = this._dsnObject;\n var header = [\"Sentry sentry_version=\" + SENTRY_API_VERSION];\n header.push(\"sentry_client=\" + clientName + \"/\" + clientVersion);\n header.push(\"sentry_key=\" + dsn.user);\n\n if (dsn.pass) {\n header.push(\"sentry_secret=\" + dsn.pass);\n }\n\n return {\n 'Content-Type': 'application/json',\n 'X-Sentry-Auth': header.join(', ')\n };\n };\n /** Returns the url to the report dialog endpoint. */\n\n\n API.prototype.getReportDialogEndpoint = function (dialogOptions) {\n if (dialogOptions === void 0) {\n dialogOptions = {};\n }\n\n var dsn = this._dsnObject;\n var endpoint = \"\" + this._getBaseUrl() + (dsn.path ? \"/\" + dsn.path : '') + \"/api/embed/error-page/\";\n var encodedOptions = [];\n encodedOptions.push(\"dsn=\" + dsn.toString());\n\n for (var key in dialogOptions) {\n if (key === 'user') {\n if (!dialogOptions.user) {\n continue;\n }\n\n if (dialogOptions.user.name) {\n encodedOptions.push(\"name=\" + encodeURIComponent(dialogOptions.user.name));\n }\n\n if (dialogOptions.user.email) {\n encodedOptions.push(\"email=\" + encodeURIComponent(dialogOptions.user.email));\n }\n } else {\n encodedOptions.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(dialogOptions[key]));\n }\n }\n\n if (encodedOptions.length) {\n return endpoint + \"?\" + encodedOptions.join('&');\n }\n\n return endpoint;\n };\n\n return API;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vYXBpLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9hcGkudHM/YWQxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEc25MaWtlIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBEc24sIHVybEVuY29kZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5jb25zdCBTRU5UUllfQVBJX1ZFUlNJT04gPSAnNyc7XG5cbi8qKiBIZWxwZXIgY2xhc3MgdG8gcHJvdmlkZSB1cmxzIHRvIGRpZmZlcmVudCBTZW50cnkgZW5kcG9pbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEFQSSB7XG4gIC8qKiBUaGUgaW50ZXJuYWxseSB1c2VkIERzbiBvYmplY3QuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rzbk9iamVjdDogRHNuO1xuICAvKiogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEFQSSAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGRzbjogRHNuTGlrZSkge1xuICAgIHRoaXMuX2Rzbk9iamVjdCA9IG5ldyBEc24oZHNuKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBEc24gb2JqZWN0LiAqL1xuICBwdWJsaWMgZ2V0RHNuKCk6IERzbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rzbk9iamVjdDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgc3RyaW5nIHdpdGggYXV0aCBoZWFkZXJzIGluIHRoZSB1cmwgdG8gdGhlIHN0b3JlIGVuZHBvaW50LiAqL1xuICBwdWJsaWMgZ2V0U3RvcmVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLl9nZXRCYXNlVXJsKCl9JHt0aGlzLmdldFN0b3JlRW5kcG9pbnRQYXRoKCl9YDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdG9yZSBlbmRwb2ludCB3aXRoIGF1dGggYWRkZWQgaW4gdXJsIGVuY29kZWQuICovXG4gIHB1YmxpYyBnZXRTdG9yZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZHNuID0gdGhpcy5fZHNuT2JqZWN0O1xuICAgIGNvbnN0IGF1dGggPSB7XG4gICAgICBzZW50cnlfa2V5OiBkc24udXNlciwgLy8gc2VudHJ5X2tleSBpcyBjdXJyZW50bHkgdXNlZCBpbiB0cmFjaW5nIGludGVncmF0aW9uIHRvIGlkZW50aWZ5IGludGVybmFsIHNlbnRyeSByZXF1ZXN0c1xuICAgICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTixcbiAgICB9O1xuICAgIC8vIEF1dGggaXMgaW50ZW50aW9uYWxseSBzZW50IGFzIHBhcnQgb2YgcXVlcnkgc3RyaW5nIChOT1QgYXMgY3VzdG9tIEhUVFAgaGVhZGVyKVxuICAgIC8vIHRvIGF2b2lkIHByZWZsaWdodCBDT1JTIHJlcXVlc3RzXG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0U3RvcmVFbmRwb2ludCgpfT8ke3VybEVuY29kZShhdXRoKX1gO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGJhc2UgcGF0aCBvZiB0aGUgdXJsIGluY2x1ZGluZyB0aGUgcG9ydC4gKi9cbiAgcHJpdmF0ZSBfZ2V0QmFzZVVybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuX2Rzbk9iamVjdDtcbiAgICBjb25zdCBwcm90b2NvbCA9IGRzbi5wcm90b2NvbCA/IGAke2Rzbi5wcm90b2NvbH06YCA6ICcnO1xuICAgIGNvbnN0IHBvcnQgPSBkc24ucG9ydCA/IGA6JHtkc24ucG9ydH1gIDogJyc7XG4gICAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtkc24uaG9zdH0ke3BvcnR9YDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIG9ubHkgdGhlIHBhdGggY29tcG9uZW50IGZvciB0aGUgc3RvcmUgZW5kcG9pbnQuICovXG4gIHB1YmxpYyBnZXRTdG9yZUVuZHBvaW50UGF0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuX2Rzbk9iamVjdDtcbiAgICByZXR1cm4gYCR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvJHtkc24ucHJvamVjdElkfS9zdG9yZS9gO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgaW4gcmVxdWVzdCBoZWFkZXJzLiAqL1xuICBwdWJsaWMgZ2V0UmVxdWVzdEhlYWRlcnMoY2xpZW50TmFtZTogc3RyaW5nLCBjbGllbnRWZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBkc24gPSB0aGlzLl9kc25PYmplY3Q7XG4gICAgY29uc3QgaGVhZGVyID0gW2BTZW50cnkgc2VudHJ5X3ZlcnNpb249JHtTRU5UUllfQVBJX1ZFUlNJT059YF07XG4gICAgaGVhZGVyLnB1c2goYHNlbnRyeV9jbGllbnQ9JHtjbGllbnROYW1lfS8ke2NsaWVudFZlcnNpb259YCk7XG4gICAgaGVhZGVyLnB1c2goYHNlbnRyeV9rZXk9JHtkc24udXNlcn1gKTtcbiAgICBpZiAoZHNuLnBhc3MpIHtcbiAgICAgIGhlYWRlci5wdXNoKGBzZW50cnlfc2VjcmV0PSR7ZHNuLnBhc3N9YCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ1gtU2VudHJ5LUF1dGgnOiBoZWFkZXIuam9pbignLCAnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHVybCB0byB0aGUgcmVwb3J0IGRpYWxvZyBlbmRwb2ludC4gKi9cbiAgcHVibGljIGdldFJlcG9ydERpYWxvZ0VuZHBvaW50KFxuICAgIGRpYWxvZ09wdGlvbnM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgIHVzZXI/OiB7IG5hbWU/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH07XG4gICAgfSA9IHt9LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuX2Rzbk9iamVjdDtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuX2dldEJhc2VVcmwoKX0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2VtYmVkL2Vycm9yLXBhZ2UvYDtcblxuICAgIGNvbnN0IGVuY29kZWRPcHRpb25zID0gW107XG4gICAgZW5jb2RlZE9wdGlvbnMucHVzaChgZHNuPSR7ZHNuLnRvU3RyaW5nKCl9YCk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlhbG9nT3B0aW9ucykge1xuICAgICAgaWYgKGtleSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGlmICghZGlhbG9nT3B0aW9ucy51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpYWxvZ09wdGlvbnMudXNlci5uYW1lKSB7XG4gICAgICAgICAgZW5jb2RlZE9wdGlvbnMucHVzaChgbmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zLnVzZXIubmFtZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpYWxvZ09wdGlvbnMudXNlci5lbWFpbCkge1xuICAgICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goYGVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpYWxvZ09wdGlvbnMudXNlci5lbWFpbCl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpYWxvZ09wdGlvbnNba2V5XSBhcyBzdHJpbmcpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCR7ZW5kcG9pbnR9PyR7ZW5jb2RlZE9wdGlvbnMuam9pbignJicpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFjQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5QkE7QUFDQTtBQStCQTtBQTVGQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/api.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/basebackend.js": -/*!*******************************************************!*\ - !*** ../node_modules/@sentry/core/esm/basebackend.js ***! - \*******************************************************/ -/*! exports provided: BaseBackend */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseBackend\", function() { return BaseBackend; });\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _transports_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transports/noop */ \"../node_modules/@sentry/core/esm/transports/noop.js\");\n\n\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\n\nvar BaseBackend =\n/** @class */\nfunction () {\n /** Creates a new backend instance. */\n function BaseBackend(options) {\n this._options = options;\n\n if (!this._options.dsn) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].warn('No DSN provided, backend will not do anything.');\n }\n\n this._transport = this._setupTransport();\n }\n /**\n * Sets up the transport so it can be used later to send requests.\n */\n\n\n BaseBackend.prototype._setupTransport = function () {\n return new _transports_noop__WEBPACK_IMPORTED_MODULE_1__[\"NoopTransport\"]();\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.eventFromException = function (_exception, _hint) {\n throw new _sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"SentryError\"]('Backend has to implement `eventFromException` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.eventFromMessage = function (_message, _level, _hint) {\n throw new _sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"SentryError\"]('Backend has to implement `eventFromMessage` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.sendEvent = function (event) {\n this._transport.sendEvent(event).then(null, function (reason) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].error(\"Error while sending event: \" + reason);\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.getTransport = function () {\n return this._transport;\n };\n\n return BaseBackend;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vYmFzZWJhY2tlbmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2Jhc2ViYWNrZW5kLnRzPzZlYWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnQsIEV2ZW50SGludCwgT3B0aW9ucywgU2V2ZXJpdHksIFRyYW5zcG9ydCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBTZW50cnlFcnJvciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBOb29wVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL25vb3AnO1xuXG4vKipcbiAqIEludGVybmFsIHBsYXRmb3JtLWRlcGVuZGVudCBTZW50cnkgU0RLIEJhY2tlbmQuXG4gKlxuICogV2hpbGUge0BsaW5rIENsaWVudH0gY29udGFpbnMgYnVzaW5lc3MgbG9naWMgc3BlY2lmaWMgdG8gYW4gU0RLLCB0aGVcbiAqIEJhY2tlbmQgb2ZmZXJzIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgbG93LWxldmVsIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBhcmUgcGVyc2lzdGluZyBhbmQgbG9hZGluZyBpbmZvcm1hdGlvbiwgc2VuZGluZyBldmVudHMsIGFuZCBob29raW5nXG4gKiBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBCYWNrZW5kcyByZWNlaXZlIGEgaGFuZGxlIHRvIHRoZSBDbGllbnQgaW4gdGhlaXIgY29uc3RydWN0b3IuIFdoZW4gYVxuICogQmFja2VuZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBldmVudHMsIGl0IG11c3QgcGFzcyB0aGVtIHRvXG4gKiB0aGUgQ2xpZW50IGZvciB2YWxpZGF0aW9uIGFuZCBwcm9jZXNzaW5nIGZpcnN0LlxuICpcbiAqIFVzdWFsbHksIHRoZSBDbGllbnQgd2lsbCBiZSBvZiBjb3JyZXNwb25kaW5nIHR5cGUsIGUuZy4gTm9kZUJhY2tlbmRcbiAqIHJlY2VpdmVzIE5vZGVDbGllbnQuIEhvd2V2ZXIsIGhpZ2hlci1sZXZlbCBTREtzIGNhbiBjaG9vc2UgdG8gaW5zdGFuY2lhdGVcbiAqIG11bHRpcGxlIEJhY2tlbmRzIGFuZCBkZWxlZ2F0ZSB0YXNrcyBiZXR3ZWVuIHRoZW0uIEluIHRoaXMgY2FzZSwgYW4gZXZlbnRcbiAqIGdlbmVyYXRlZCBieSBvbmUgYmFja2VuZCBtaWdodCB2ZXJ5IHdlbGwgYmUgc2VudCBieSBhbm90aGVyIG9uZS5cbiAqXG4gKiBUaGUgY2xpZW50IGFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG9wdGlvbnMgdmlhIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZCB7XG4gIC8qKiBDcmVhdGVzIGEge0BsaW5rIEV2ZW50fSBmcm9tIGFuIGV4Y2VwdGlvbi4gKi9cbiAgZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+O1xuXG4gIC8qKiBDcmVhdGVzIGEge0BsaW5rIEV2ZW50fSBmcm9tIGEgcGxhaW4gbWVzc2FnZS4gKi9cbiAgZXZlbnRGcm9tTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGxldmVsPzogU2V2ZXJpdHksIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD47XG5cbiAgLyoqIFN1Ym1pdHMgdGhlIGV2ZW50IHRvIFNlbnRyeSAqL1xuICBzZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHJhbnNwb3J0IHRoYXQgaXMgdXNlZCBieSB0aGUgYmFja2VuZC5cbiAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgdHJhbnNwb3J0IGdldHMgbGF6eSBpbml0aWFsaXplZCBzbyBpdCB3aWxsIG9ubHkgYmUgdGhlcmUgb25jZSB0aGUgZmlyc3QgZXZlbnQgaGFzIGJlZW4gc2VudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHRyYW5zcG9ydC5cbiAgICovXG4gIGdldFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQ7XG59XG5cbi8qKlxuICogQSBjbGFzcyBvYmplY3QgdGhhdCBjYW4gaW5zdGFuY2lhdGUgQmFja2VuZCBvYmplY3RzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgdHlwZSBCYWNrZW5kQ2xhc3M8QiBleHRlbmRzIEJhY2tlbmQsIE8gZXh0ZW5kcyBPcHRpb25zPiA9IG5ldyAob3B0aW9uczogTykgPT4gQjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGltcGxlbWVudGlvbiBvZiBhIEJhY2tlbmQuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQmFja2VuZDxPIGV4dGVuZHMgT3B0aW9ucz4gaW1wbGVtZW50cyBCYWNrZW5kIHtcbiAgLyoqIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBTREsuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogTztcblxuICAvKiogQ2FjaGVkIHRyYW5zcG9ydCB1c2VkIGludGVybmFsbHkuICovXG4gIHByb3RlY3RlZCBfdHJhbnNwb3J0OiBUcmFuc3BvcnQ7XG5cbiAgLyoqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBpbnN0YW5jZS4gKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE8pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuZHNuKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gRFNOIHByb3ZpZGVkLCBiYWNrZW5kIHdpbGwgbm90IGRvIGFueXRoaW5nLicpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc3BvcnQgPSB0aGlzLl9zZXR1cFRyYW5zcG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIHRyYW5zcG9ydCBzbyBpdCBjYW4gYmUgdXNlZCBsYXRlciB0byBzZW5kIHJlcXVlc3RzLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9zZXR1cFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAgIHJldHVybiBuZXcgTm9vcFRyYW5zcG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZXZlbnRGcm9tRXhjZXB0aW9uKF9leGNlcHRpb246IGFueSwgX2hpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21FeGNlcHRpb25gIG1ldGhvZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZXZlbnRGcm9tTWVzc2FnZShfbWVzc2FnZTogc3RyaW5nLCBfbGV2ZWw/OiBTZXZlcml0eSwgX2hpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21NZXNzYWdlYCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc3BvcnQuc2VuZEV2ZW50KGV2ZW50KS50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIHNlbmRpbmcgZXZlbnQ6ICR7cmVhc29ufWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUErQ0E7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBTUE7Ozs7O0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQXBEQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/basebackend.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/baseclient.js": -/*!******************************************************!*\ - !*** ../node_modules/@sentry/core/esm/baseclient.js ***! - \******************************************************/ -/*! exports provided: BaseClient */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseClient\", function() { return BaseClient; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _integration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./integration */ \"../node_modules/@sentry/core/esm/integration.js\");\n\n\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event via the backend, it is passed through\n * {@link BaseClient.prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeBackend, NodeOptions> {\n * public constructor(options: NodeOptions) {\n * super(NodeBackend, options);\n * }\n *\n * // ...\n * }\n */\n\nvar BaseClient =\n/** @class */\nfunction () {\n /**\n * Initializes this client instance.\n *\n * @param backendClass A constructor function to create the backend.\n * @param options Options for the client.\n */\n function BaseClient(backendClass, options) {\n /** Array of used integrations. */\n this._integrations = {};\n /** Is the client still processing a call? */\n\n this._processing = false;\n this._backend = new backendClass(options);\n this._options = options;\n\n if (options.dsn) {\n this._dsn = new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"Dsn\"](options.dsn);\n }\n\n if (this._isEnabled()) {\n this._integrations = Object(_integration__WEBPACK_IMPORTED_MODULE_2__[\"setupIntegrations\"])(this._options);\n }\n }\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureException = function (exception, hint, scope) {\n var _this = this;\n\n var eventId = hint && hint.event_id;\n this._processing = true;\n\n this._getBackend().eventFromException(exception, hint).then(function (event) {\n return _this._processEvent(event, hint, scope);\n }).then(function (finalEvent) {\n // We need to check for finalEvent in case beforeSend returned null\n eventId = finalEvent && finalEvent.event_id;\n _this._processing = false;\n }).then(null, function (reason) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error(reason);\n _this._processing = false;\n });\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureMessage = function (message, level, hint, scope) {\n var _this = this;\n\n var eventId = hint && hint.event_id;\n this._processing = true;\n var promisedEvent = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"isPrimitive\"])(message) ? this._getBackend().eventFromMessage(\"\" + message, level, hint) : this._getBackend().eventFromException(message, hint);\n promisedEvent.then(function (event) {\n return _this._processEvent(event, hint, scope);\n }).then(function (finalEvent) {\n // We need to check for finalEvent in case beforeSend returned null\n eventId = finalEvent && finalEvent.event_id;\n _this._processing = false;\n }).then(null, function (reason) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error(reason);\n _this._processing = false;\n });\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureEvent = function (event, hint, scope) {\n var _this = this;\n\n var eventId = hint && hint.event_id;\n this._processing = true;\n\n this._processEvent(event, hint, scope).then(function (finalEvent) {\n // We need to check for finalEvent in case beforeSend returned null\n eventId = finalEvent && finalEvent.event_id;\n _this._processing = false;\n }).then(null, function (reason) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error(reason);\n _this._processing = false;\n });\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getDsn = function () {\n return this._dsn;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getOptions = function () {\n return this._options;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.flush = function (timeout) {\n var _this = this;\n\n return this._isClientProcessing(timeout).then(function (status) {\n clearInterval(status.interval);\n return _this._getBackend().getTransport().close(timeout).then(function (transportFlushed) {\n return status.ready && transportFlushed;\n });\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.close = function (timeout) {\n var _this = this;\n\n return this.flush(timeout).then(function (result) {\n _this.getOptions().enabled = false;\n return result;\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getIntegrations = function () {\n return this._integrations || {};\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getIntegration = function (integration) {\n try {\n return this._integrations[integration.id] || null;\n } catch (_oO) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].warn(\"Cannot retrieve integration \" + integration.id + \" from the current Client\");\n return null;\n }\n };\n /** Waits for the client to be done with processing. */\n\n\n BaseClient.prototype._isClientProcessing = function (timeout) {\n var _this = this;\n\n return new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"](function (resolve) {\n var ticked = 0;\n var tick = 1;\n var interval = 0;\n clearInterval(interval);\n interval = setInterval(function () {\n if (!_this._processing) {\n resolve({\n interval: interval,\n ready: true\n });\n } else {\n ticked += tick;\n\n if (timeout && ticked >= timeout) {\n resolve({\n interval: interval,\n ready: false\n });\n }\n }\n }, tick);\n });\n };\n /** Returns the current backend. */\n\n\n BaseClient.prototype._getBackend = function () {\n return this._backend;\n };\n /** Determines whether this SDK is enabled and a valid Dsn is present. */\n\n\n BaseClient.prototype._isEnabled = function () {\n return this.getOptions().enabled !== false && this._dsn !== undefined;\n };\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional informartion about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n\n\n BaseClient.prototype._prepareEvent = function (event, scope, hint) {\n var _this = this;\n\n var _a = this.getOptions(),\n environment = _a.environment,\n release = _a.release,\n dist = _a.dist,\n _b = _a.maxValueLength,\n maxValueLength = _b === void 0 ? 250 : _b,\n _c = _a.normalizeDepth,\n normalizeDepth = _c === void 0 ? 3 : _c;\n\n var prepared = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event);\n\n if (prepared.environment === undefined && environment !== undefined) {\n prepared.environment = environment;\n }\n\n if (prepared.release === undefined && release !== undefined) {\n prepared.release = release;\n }\n\n if (prepared.dist === undefined && dist !== undefined) {\n prepared.dist = dist;\n }\n\n if (prepared.message) {\n prepared.message = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"truncate\"])(prepared.message, maxValueLength);\n }\n\n var exception = prepared.exception && prepared.exception.values && prepared.exception.values[0];\n\n if (exception && exception.value) {\n exception.value = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"truncate\"])(exception.value, maxValueLength);\n }\n\n var request = prepared.request;\n\n if (request && request.url) {\n request.url = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"truncate\"])(request.url, maxValueLength);\n }\n\n if (prepared.event_id === undefined) {\n prepared.event_id = hint && hint.event_id ? hint.event_id : Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"uuid4\"])();\n }\n\n this._addIntegrations(prepared.sdk); // We prepare the result here with a resolved Event.\n\n\n var result = _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].resolve(prepared); // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n\n if (scope) {\n // In case we have a hub we reassign it.\n result = scope.applyToEvent(prepared, hint);\n }\n\n return result.then(function (evt) {\n // tslint:disable-next-line:strict-type-predicates\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return _this._normalizeEvent(evt, normalizeDepth);\n }\n\n return evt;\n });\n };\n /**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\n\n\n BaseClient.prototype._normalizeEvent = function (event, depth) {\n if (!event) {\n return null;\n } // tslint:disable:no-unsafe-any\n\n\n return tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event, event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(function (b) {\n return tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, b, b.data && {\n data: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"normalize\"])(b.data, depth)\n });\n })\n }, event.user && {\n user: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"normalize\"])(event.user, depth)\n }, event.contexts && {\n contexts: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"normalize\"])(event.contexts, depth)\n }, event.extra && {\n extra: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"normalize\"])(event.extra, depth)\n });\n };\n /**\n * This function adds all used integrations to the SDK info in the event.\n * @param sdkInfo The sdkInfo of the event that will be filled with all integrations.\n */\n\n\n BaseClient.prototype._addIntegrations = function (sdkInfo) {\n var integrationsArray = Object.keys(this._integrations);\n\n if (sdkInfo && integrationsArray.length > 0) {\n sdkInfo.integrations = integrationsArray;\n }\n };\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional informartion about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n\n\n BaseClient.prototype._processEvent = function (event, hint, scope) {\n var _this = this;\n\n var _a = this.getOptions(),\n beforeSend = _a.beforeSend,\n sampleRate = _a.sampleRate;\n\n if (!this._isEnabled()) {\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].reject('SDK not enabled, will not send event.');\n } // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n\n\n if (typeof sampleRate === 'number' && Math.random() > sampleRate) {\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].reject('This event has been sampled, will not send event.');\n }\n\n return new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"](function (resolve, reject) {\n _this._prepareEvent(event, scope, hint).then(function (prepared) {\n if (prepared === null) {\n reject('An event processor returned null, will not send event.');\n return;\n }\n\n var finalEvent = prepared;\n var isInternalException = hint && hint.data && hint.data.__sentry__ === true;\n\n if (isInternalException || !beforeSend) {\n _this._getBackend().sendEvent(finalEvent);\n\n resolve(finalEvent);\n return;\n }\n\n var beforeSendResult = beforeSend(prepared, hint); // tslint:disable-next-line:strict-type-predicates\n\n if (typeof beforeSendResult === 'undefined') {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error('`beforeSend` method has to return `null` or a valid event.');\n } else if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"isThenable\"])(beforeSendResult)) {\n _this._handleAsyncBeforeSend(beforeSendResult, resolve, reject);\n } else {\n finalEvent = beforeSendResult;\n\n if (finalEvent === null) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].log('`beforeSend` returned `null`, will not send event.');\n resolve(null);\n return;\n } // From here on we are really async\n\n\n _this._getBackend().sendEvent(finalEvent);\n\n resolve(finalEvent);\n }\n }).then(null, function (reason) {\n _this.captureException(reason, {\n data: {\n __sentry__: true\n },\n originalException: reason\n });\n\n reject(\"Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: \" + reason);\n });\n });\n };\n /**\n * Resolves before send Promise and calls resolve/reject on parent SyncPromise.\n */\n\n\n BaseClient.prototype._handleAsyncBeforeSend = function (beforeSend, resolve, reject) {\n var _this = this;\n\n beforeSend.then(function (processedEvent) {\n if (processedEvent === null) {\n reject('`beforeSend` returned `null`, will not send event.');\n return;\n } // From here on we are really async\n\n\n _this._getBackend().sendEvent(processedEvent);\n\n resolve(processedEvent);\n }).then(null, function (e) {\n reject(\"beforeSend rejected with \" + e);\n });\n };\n\n return BaseClient;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vYmFzZWNsaWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvYmFzZWNsaWVudC50cz9lODYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgQ2xpZW50LCBFdmVudCwgRXZlbnRIaW50LCBJbnRlZ3JhdGlvbiwgSW50ZWdyYXRpb25DbGFzcywgT3B0aW9ucywgU2RrSW5mbywgU2V2ZXJpdHkgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IERzbiwgaXNQcmltaXRpdmUsIGlzVGhlbmFibGUsIGxvZ2dlciwgbm9ybWFsaXplLCBTeW5jUHJvbWlzZSwgdHJ1bmNhdGUsIHV1aWQ0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IEJhY2tlbmQsIEJhY2tlbmRDbGFzcyB9IGZyb20gJy4vYmFzZWJhY2tlbmQnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25JbmRleCwgc2V0dXBJbnRlZ3JhdGlvbnMgfSBmcm9tICcuL2ludGVncmF0aW9uJztcblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgSmF2YVNjcmlwdCBTREsgY2xpZW50cy5cbiAqXG4gKiBDYWxsIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgY29uc3RydWN0b3IgYW5kIG9wdGlvbnNcbiAqIHNwZWNpZmljIHRvIHRoZSBjbGllbnQgc3ViY2xhc3MuIFRvIGFjY2VzcyB0aGVzZSBvcHRpb25zIGxhdGVyLCB1c2VcbiAqIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uIEFsc28sIHRoZSBCYWNrZW5kIGluc3RhbmNlIGlzIGF2YWlsYWJsZSB2aWFcbiAqIHtAbGluayBDbGllbnQuZ2V0QmFja2VuZH0uXG4gKlxuICogSWYgYSBEc24gaXMgc3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBpdCB3aWxsIGJlIHBhcnNlZCBhbmQgc3RvcmVkLiBVc2VcbiAqIHtAbGluayBDbGllbnQuZ2V0RHNufSB0byByZXRyaWV2ZSB0aGUgRHNuIGF0IGFueSBtb21lbnQuIEluIGNhc2UgdGhlIERzbiBpc1xuICogaW52YWxpZCwgdGhlIGNvbnN0cnVjdG9yIHdpbGwgdGhyb3cgYSB7QGxpbmsgU2VudHJ5RXhjZXB0aW9ufS4gTm90ZSB0aGF0XG4gKiB3aXRob3V0IGEgdmFsaWQgRHNuLCB0aGUgU0RLIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cyB0byBTZW50cnkuXG4gKlxuICogQmVmb3JlIHNlbmRpbmcgYW4gZXZlbnQgdmlhIHRoZSBiYWNrZW5kLCBpdCBpcyBwYXNzZWQgdGhyb3VnaFxuICoge0BsaW5rIEJhc2VDbGllbnQucHJlcGFyZUV2ZW50fSB0byBhZGQgU0RLIGluZm9ybWF0aW9uIGFuZCBzY29wZSBkYXRhXG4gKiAoYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQpLiBUbyBhZGQgbW9yZSBjdXN0b20gaW5mb3JtYXRpb24sIG92ZXJyaWRlIHRoaXNcbiAqIG1ldGhvZCBhbmQgZXh0ZW5kIHRoZSByZXN1bHRpbmcgcHJlcGFyZWQgZXZlbnQuXG4gKlxuICogVG8gaXNzdWUgYXV0b21hdGljYWxseSBjcmVhdGVkIGV2ZW50cyAoZS5nLiB2aWEgaW5zdHJ1bWVudGF0aW9uKSwgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmNhcHR1cmVFdmVudH0uIEl0IHdpbGwgcHJlcGFyZSB0aGUgZXZlbnQgYW5kIHBhc3MgaXQgdGhyb3VnaFxuICogdGhlIGNhbGxiYWNrIGxpZmVjeWNsZS4gVG8gaXNzdWUgYXV0by1icmVhZGNydW1icywgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmFkZEJyZWFkY3J1bWJ9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjbGFzcyBOb2RlQ2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudDxOb2RlQmFja2VuZCwgTm9kZU9wdGlvbnM+IHtcbiAqICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVPcHRpb25zKSB7XG4gKiAgICAgc3VwZXIoTm9kZUJhY2tlbmQsIG9wdGlvbnMpO1xuICogICB9XG4gKlxuICogICAvLyAuLi5cbiAqIH1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDbGllbnQ8QiBleHRlbmRzIEJhY2tlbmQsIE8gZXh0ZW5kcyBPcHRpb25zPiBpbXBsZW1lbnRzIENsaWVudDxPPiB7XG4gIC8qKlxuICAgKiBUaGUgYmFja2VuZCB1c2VkIHRvIHBoeXNpY2FsbHkgaW50ZXJhY3QgaW4gdGhlIGVudmlvcm5tZW50LiBVc3VhbGx5LCB0aGlzXG4gICAqIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgY2xpZW50LiBXaGVuIGNvbXBvc2luZyBTREtzLCBob3dldmVyLCB0aGUgQmFja2VuZFxuICAgKiBmcm9tIHRoZSByb290IFNESyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2JhY2tlbmQ6IEI7XG5cbiAgLyoqIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBTREsuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogTztcblxuICAvKiogVGhlIGNsaWVudCBEc24sIGlmIHNwZWNpZmllZCBpbiBvcHRpb25zLiBXaXRob3V0IHRoaXMgRHNuLCB0aGUgU0RLIHdpbGwgYmUgZGlzYWJsZWQuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfZHNuPzogRHNuO1xuXG4gIC8qKiBBcnJheSBvZiB1c2VkIGludGVncmF0aW9ucy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnRlZ3JhdGlvbnM6IEludGVncmF0aW9uSW5kZXggPSB7fTtcblxuICAvKiogSXMgdGhlIGNsaWVudCBzdGlsbCBwcm9jZXNzaW5nIGEgY2FsbD8gKi9cbiAgcHJvdGVjdGVkIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoaXMgY2xpZW50IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gYmFja2VuZENsYXNzIEEgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBiYWNrZW5kLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgY2xpZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJhY2tlbmRDbGFzczogQmFja2VuZENsYXNzPEIsIE8+LCBvcHRpb25zOiBPKSB7XG4gICAgdGhpcy5fYmFja2VuZCA9IG5ldyBiYWNrZW5kQ2xhc3Mob3B0aW9ucyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9ucy5kc24pIHtcbiAgICAgIHRoaXMuX2RzbiA9IG5ldyBEc24ob3B0aW9ucy5kc24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0VuYWJsZWQoKSkge1xuICAgICAgdGhpcy5faW50ZWdyYXRpb25zID0gc2V0dXBJbnRlZ3JhdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb246IGFueSwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuX2dldEJhY2tlbmQoKVxuICAgICAgLmV2ZW50RnJvbUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpXG4gICAgICAudGhlbihldmVudCA9PiB0aGlzLl9wcm9jZXNzRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKSlcbiAgICAgIC50aGVuKGZpbmFsRXZlbnQgPT4ge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBmaW5hbEV2ZW50IGluIGNhc2UgYmVmb3JlU2VuZCByZXR1cm5lZCBudWxsXG4gICAgICAgIGV2ZW50SWQgPSBmaW5hbEV2ZW50ICYmIGZpbmFsRXZlbnQuZXZlbnRfaWQ7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IocmVhc29uKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw/OiBTZXZlcml0eSwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgcHJvbWlzZWRFdmVudCA9IGlzUHJpbWl0aXZlKG1lc3NhZ2UpXG4gICAgICA/IHRoaXMuX2dldEJhY2tlbmQoKS5ldmVudEZyb21NZXNzYWdlKGAke21lc3NhZ2V9YCwgbGV2ZWwsIGhpbnQpXG4gICAgICA6IHRoaXMuX2dldEJhY2tlbmQoKS5ldmVudEZyb21FeGNlcHRpb24obWVzc2FnZSwgaGludCk7XG5cbiAgICBwcm9taXNlZEV2ZW50XG4gICAgICAudGhlbihldmVudCA9PiB0aGlzLl9wcm9jZXNzRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKSlcbiAgICAgIC50aGVuKGZpbmFsRXZlbnQgPT4ge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBmaW5hbEV2ZW50IGluIGNhc2UgYmVmb3JlU2VuZCByZXR1cm5lZCBudWxsXG4gICAgICAgIGV2ZW50SWQgPSBmaW5hbEV2ZW50ICYmIGZpbmFsRXZlbnQuZXZlbnRfaWQ7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IocmVhc29uKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVFdmVudChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBldmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQ7XG4gICAgdGhpcy5fcHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgICB0aGlzLl9wcm9jZXNzRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKVxuICAgICAgLnRoZW4oZmluYWxFdmVudCA9PiB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpbmFsRXZlbnQgaW4gY2FzZSBiZWZvcmVTZW5kIHJldHVybmVkIG51bGxcbiAgICAgICAgZXZlbnRJZCA9IGZpbmFsRXZlbnQgJiYgZmluYWxFdmVudC5ldmVudF9pZDtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihyZWFzb24pO1xuICAgICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0RHNuKCk6IERzbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RzbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldE9wdGlvbnMoKTogTyB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBmbHVzaCh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NsaWVudFByb2Nlc3NpbmcodGltZW91dCkudGhlbihzdGF0dXMgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChzdGF0dXMuaW50ZXJ2YWwpO1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEJhY2tlbmQoKVxuICAgICAgICAuZ2V0VHJhbnNwb3J0KClcbiAgICAgICAgLmNsb3NlKHRpbWVvdXQpXG4gICAgICAgIC50aGVuKHRyYW5zcG9ydEZsdXNoZWQgPT4gc3RhdHVzLnJlYWR5ICYmIHRyYW5zcG9ydEZsdXNoZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2xvc2UodGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mbHVzaCh0aW1lb3V0KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLmdldE9wdGlvbnMoKS5lbmFibGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZWdyYXRpb25zKCk6IEludGVncmF0aW9uSW5kZXgge1xuICAgIHJldHVybiB0aGlzLl9pbnRlZ3JhdGlvbnMgfHwge307XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRJbnRlZ3JhdGlvbjxUIGV4dGVuZHMgSW50ZWdyYXRpb24+KGludGVncmF0aW9uOiBJbnRlZ3JhdGlvbkNsYXNzPFQ+KTogVCB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2ludGVncmF0aW9uc1tpbnRlZ3JhdGlvbi5pZF0gYXMgVCkgfHwgbnVsbDtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgcmV0cmlldmUgaW50ZWdyYXRpb24gJHtpbnRlZ3JhdGlvbi5pZH0gZnJvbSB0aGUgY3VycmVudCBDbGllbnRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXYWl0cyBmb3IgdGhlIGNsaWVudCB0byBiZSBkb25lIHdpdGggcHJvY2Vzc2luZy4gKi9cbiAgcHJvdGVjdGVkIF9pc0NsaWVudFByb2Nlc3NpbmcodGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPHsgcmVhZHk6IGJvb2xlYW47IGludGVydmFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8eyByZWFkeTogYm9vbGVhbjsgaW50ZXJ2YWw6IG51bWJlciB9PihyZXNvbHZlID0+IHtcbiAgICAgIGxldCB0aWNrZWQ6IG51bWJlciA9IDA7XG4gICAgICBjb25zdCB0aWNrOiBudW1iZXIgPSAxO1xuXG4gICAgICBsZXQgaW50ZXJ2YWwgPSAwO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgIGludGVydmFsID0gKHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9jZXNzaW5nKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgICAgIHJlYWR5OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpY2tlZCArPSB0aWNrO1xuICAgICAgICAgIGlmICh0aW1lb3V0ICYmIHRpY2tlZCA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgaW50ZXJ2YWwsXG4gICAgICAgICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGljaykgYXMgdW5rbm93bikgYXMgbnVtYmVyO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGN1cnJlbnQgYmFja2VuZC4gKi9cbiAgcHJvdGVjdGVkIF9nZXRCYWNrZW5kKCk6IEIge1xuICAgIHJldHVybiB0aGlzLl9iYWNrZW5kO1xuICB9XG5cbiAgLyoqIERldGVybWluZXMgd2hldGhlciB0aGlzIFNESyBpcyBlbmFibGVkIGFuZCBhIHZhbGlkIERzbiBpcyBwcmVzZW50LiAqL1xuICBwcm90ZWN0ZWQgX2lzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25zKCkuZW5hYmxlZCAhPT0gZmFsc2UgJiYgdGhpcy5fZHNuICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjb21tb24gaW5mb3JtYXRpb24gdG8gZXZlbnRzLlxuICAgKlxuICAgKiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgcmVsZWFzZSBhbmQgZW52aXJvbm1lbnQgZnJvbSBgb3B0aW9uc2AsXG4gICAqIGJyZWFkY3J1bWJzIGFuZCBjb250ZXh0IChleHRyYSwgdGFncyBhbmQgdXNlcikgZnJvbSB0aGUgc2NvcGUuXG4gICAqXG4gICAqIEluZm9ybWF0aW9uIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBldmVudCBpcyBuZXZlciBvdmVyd3JpdHRlbi4gRm9yXG4gICAqIG5lc3RlZCBvYmplY3RzLCBzdWNoIGFzIHRoZSBjb250ZXh0LCBrZXlzIGFyZSBtZXJnZWQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQuXG4gICAqIEBwYXJhbSBoaW50IE1heSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXJ0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBwYXJhbSBzY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgbmV3IGV2ZW50IHdpdGggbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBfcHJlcGFyZUV2ZW50KGV2ZW50OiBFdmVudCwgc2NvcGU/OiBTY29wZSwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnQsIHJlbGVhc2UsIGRpc3QsIG1heFZhbHVlTGVuZ3RoID0gMjUwLCBub3JtYWxpemVEZXB0aCA9IDMgfSA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgY29uc3QgcHJlcGFyZWQ6IEV2ZW50ID0geyAuLi5ldmVudCB9O1xuICAgIGlmIChwcmVwYXJlZC5lbnZpcm9ubWVudCA9PT0gdW5kZWZpbmVkICYmIGVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByZXBhcmVkLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfVxuICAgIGlmIChwcmVwYXJlZC5yZWxlYXNlID09PSB1bmRlZmluZWQgJiYgcmVsZWFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcmVwYXJlZC5yZWxlYXNlID0gcmVsZWFzZTtcbiAgICB9XG5cbiAgICBpZiAocHJlcGFyZWQuZGlzdCA9PT0gdW5kZWZpbmVkICYmIGRpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlcGFyZWQuZGlzdCA9IGRpc3Q7XG4gICAgfVxuXG4gICAgaWYgKHByZXBhcmVkLm1lc3NhZ2UpIHtcbiAgICAgIHByZXBhcmVkLm1lc3NhZ2UgPSB0cnVuY2F0ZShwcmVwYXJlZC5tZXNzYWdlLCBtYXhWYWx1ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhjZXB0aW9uID0gcHJlcGFyZWQuZXhjZXB0aW9uICYmIHByZXBhcmVkLmV4Y2VwdGlvbi52YWx1ZXMgJiYgcHJlcGFyZWQuZXhjZXB0aW9uLnZhbHVlc1swXTtcbiAgICBpZiAoZXhjZXB0aW9uICYmIGV4Y2VwdGlvbi52YWx1ZSkge1xuICAgICAgZXhjZXB0aW9uLnZhbHVlID0gdHJ1bmNhdGUoZXhjZXB0aW9uLnZhbHVlLCBtYXhWYWx1ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHByZXBhcmVkLnJlcXVlc3Q7XG4gICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC51cmwpIHtcbiAgICAgIHJlcXVlc3QudXJsID0gdHJ1bmNhdGUocmVxdWVzdC51cmwsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAocHJlcGFyZWQuZXZlbnRfaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlcGFyZWQuZXZlbnRfaWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRJbnRlZ3JhdGlvbnMocHJlcGFyZWQuc2RrKTtcblxuICAgIC8vIFdlIHByZXBhcmUgdGhlIHJlc3VsdCBoZXJlIHdpdGggYSByZXNvbHZlZCBFdmVudC5cbiAgICBsZXQgcmVzdWx0ID0gU3luY1Byb21pc2UucmVzb2x2ZTxFdmVudCB8IG51bGw+KHByZXBhcmVkKTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IHRoaW5nIGNhbGxlZCwgc2luY2Ugd2Ugd2FudCB0aGF0XG4gICAgLy8ge0BsaW5rIEh1Yi5hZGRFdmVudFByb2Nlc3Nvcn0gZ2V0cyB0aGUgZmluaXNoZWQgcHJlcGFyZWQgZXZlbnQuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICAvLyBJbiBjYXNlIHdlIGhhdmUgYSBodWIgd2UgcmVhc3NpZ24gaXQuXG4gICAgICByZXN1bHQgPSBzY29wZS5hcHBseVRvRXZlbnQocHJlcGFyZWQsIGhpbnQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudGhlbihldnQgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplRGVwdGggPT09ICdudW1iZXInICYmIG5vcm1hbGl6ZURlcHRoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9ybWFsaXplRXZlbnQoZXZ0LCBub3JtYWxpemVEZXB0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZ0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYG5vcm1hbGl6ZWAgZnVuY3Rpb24gb24gbmVjZXNzYXJ5IGBFdmVudGAgYXR0cmlidXRlcyB0byBtYWtlIHRoZW0gc2FmZSBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogTm9ybWFsaXplZCBrZXlzOlxuICAgKiAtIGBicmVhZGNydW1icy5kYXRhYFxuICAgKiAtIGB1c2VyYFxuICAgKiAtIGBjb250ZXh0c2BcbiAgICogLSBgZXh0cmFgXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIGV2ZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX25vcm1hbGl6ZUV2ZW50KGV2ZW50OiBFdmVudCB8IG51bGwsIGRlcHRoOiBudW1iZXIpOiBFdmVudCB8IG51bGwge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLXVuc2FmZS1hbnlcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICAuLi4oZXZlbnQuYnJlYWRjcnVtYnMgJiYge1xuICAgICAgICBicmVhZGNydW1iczogZXZlbnQuYnJlYWRjcnVtYnMubWFwKGIgPT4gKHtcbiAgICAgICAgICAuLi5iLFxuICAgICAgICAgIC4uLihiLmRhdGEgJiYge1xuICAgICAgICAgICAgZGF0YTogbm9ybWFsaXplKGIuZGF0YSwgZGVwdGgpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSksXG4gICAgICB9KSxcbiAgICAgIC4uLihldmVudC51c2VyICYmIHtcbiAgICAgICAgdXNlcjogbm9ybWFsaXplKGV2ZW50LnVzZXIsIGRlcHRoKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKGV2ZW50LmNvbnRleHRzICYmIHtcbiAgICAgICAgY29udGV4dHM6IG5vcm1hbGl6ZShldmVudC5jb250ZXh0cywgZGVwdGgpLFxuICAgICAgfSksXG4gICAgICAuLi4oZXZlbnQuZXh0cmEgJiYge1xuICAgICAgICBleHRyYTogbm9ybWFsaXplKGV2ZW50LmV4dHJhLCBkZXB0aCksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbGwgdXNlZCBpbnRlZ3JhdGlvbnMgdG8gdGhlIFNESyBpbmZvIGluIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHNka0luZm8gVGhlIHNka0luZm8gb2YgdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBhbGwgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9hZGRJbnRlZ3JhdGlvbnMoc2RrSW5mbz86IFNka0luZm8pOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlZ3JhdGlvbnNBcnJheSA9IE9iamVjdC5rZXlzKHRoaXMuX2ludGVncmF0aW9ucyk7XG4gICAgaWYgKHNka0luZm8gJiYgaW50ZWdyYXRpb25zQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgc2RrSW5mby5pbnRlZ3JhdGlvbnMgPSBpbnRlZ3JhdGlvbnNBcnJheTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGV2ZW50IChlaXRoZXIgZXJyb3Igb3IgbWVzc2FnZSkgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAgICpcbiAgICogVGhpcyBhbHNvIGFkZHMgYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gdG8gdGhlIGV2ZW50LiBIb3dldmVyLFxuICAgKiBwbGF0Zm9ybSBzcGVjaWZpYyBtZXRhIGRhdGEgKHN1Y2ggYXMgdGhlIFVzZXIncyBJUCBhZGRyZXNzKSBtdXN0IGJlIGFkZGVkXG4gICAqIGJ5IHRoZSBTREsgaW1wbGVtZW50b3IuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gICAqIEBwYXJhbSBoaW50IE1heSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXJ0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBwYXJhbSBzY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgU3luY1Byb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBldmVudCBvciByZWplY3RzIGluIGNhc2UgZXZlbnQgd2FzL3dpbGwgbm90IGJlIHNlbmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3Byb2Nlc3NFdmVudChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIGNvbnN0IHsgYmVmb3JlU2VuZCwgc2FtcGxlUmF0ZSB9ID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KCdTREsgbm90IGVuYWJsZWQsIHdpbGwgbm90IHNlbmQgZXZlbnQuJyk7XG4gICAgfVxuXG4gICAgLy8gMS4wID09PSAxMDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIDAuMCA9PT0gMCUgZXZlbnRzIGFyZSBzZW50XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVSYXRlID09PSAnbnVtYmVyJyAmJiBNYXRoLnJhbmRvbSgpID4gc2FtcGxlUmF0ZSkge1xuICAgICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlamVjdCgnVGhpcyBldmVudCBoYXMgYmVlbiBzYW1wbGVkLCB3aWxsIG5vdCBzZW5kIGV2ZW50LicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcHJlcGFyZUV2ZW50KGV2ZW50LCBzY29wZSwgaGludClcbiAgICAgICAgLnRoZW4ocHJlcGFyZWQgPT4ge1xuICAgICAgICAgIGlmIChwcmVwYXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVqZWN0KCdBbiBldmVudCBwcm9jZXNzb3IgcmV0dXJuZWQgbnVsbCwgd2lsbCBub3Qgc2VuZCBldmVudC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgZmluYWxFdmVudDogRXZlbnQgfCBudWxsID0gcHJlcGFyZWQ7XG5cbiAgICAgICAgICBjb25zdCBpc0ludGVybmFsRXhjZXB0aW9uID0gaGludCAmJiBoaW50LmRhdGEgJiYgKGhpbnQuZGF0YSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KS5fX3NlbnRyeV9fID09PSB0cnVlO1xuICAgICAgICAgIGlmIChpc0ludGVybmFsRXhjZXB0aW9uIHx8ICFiZWZvcmVTZW5kKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRCYWNrZW5kKCkuc2VuZEV2ZW50KGZpbmFsRXZlbnQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5hbEV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVTZW5kUmVzdWx0ID0gYmVmb3JlU2VuZChwcmVwYXJlZCwgaGludCk7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgICAgICAgICBpZiAodHlwZW9mIGJlZm9yZVNlbmRSZXN1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2BiZWZvcmVTZW5kYCBtZXRob2QgaGFzIHRvIHJldHVybiBgbnVsbGAgb3IgYSB2YWxpZCBldmVudC4nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzVGhlbmFibGUoYmVmb3JlU2VuZFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFzeW5jQmVmb3JlU2VuZChiZWZvcmVTZW5kUmVzdWx0IGFzIFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4sIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmFsRXZlbnQgPSBiZWZvcmVTZW5kUmVzdWx0IGFzIEV2ZW50IHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKGZpbmFsRXZlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmxvZygnYGJlZm9yZVNlbmRgIHJldHVybmVkIGBudWxsYCwgd2lsbCBub3Qgc2VuZCBldmVudC4nKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGcm9tIGhlcmUgb24gd2UgYXJlIHJlYWxseSBhc3luY1xuICAgICAgICAgICAgdGhpcy5fZ2V0QmFja2VuZCgpLnNlbmRFdmVudChmaW5hbEV2ZW50KTtcbiAgICAgICAgICAgIHJlc29sdmUoZmluYWxFdmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgICAgIHRoaXMuY2FwdHVyZUV4Y2VwdGlvbihyZWFzb24sIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgX19zZW50cnlfXzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogcmVhc29uIGFzIEVycm9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgIGBFdmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHRocmV3IGFuIGVycm9yLCBvcmlnaW5hbCBldmVudCB3aWxsIG5vdCBiZSBzZW50LiBEZXRhaWxzIGhhdmUgYmVlbiBzZW50IGFzIGEgbmV3IGV2ZW50LlxcblJlYXNvbjogJHtyZWFzb259YCxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBiZWZvcmUgc2VuZCBQcm9taXNlIGFuZCBjYWxscyByZXNvbHZlL3JlamVjdCBvbiBwYXJlbnQgU3luY1Byb21pc2UuXG4gICAqL1xuICBwcml2YXRlIF9oYW5kbGVBc3luY0JlZm9yZVNlbmQoXG4gICAgYmVmb3JlU2VuZDogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPixcbiAgICByZXNvbHZlOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLFxuICAgIHJlamVjdDogKHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBiZWZvcmVTZW5kXG4gICAgICAudGhlbihwcm9jZXNzZWRFdmVudCA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzZWRFdmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlamVjdCgnYGJlZm9yZVNlbmRgIHJldHVybmVkIGBudWxsYCwgd2lsbCBub3Qgc2VuZCBldmVudC4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRnJvbSBoZXJlIG9uIHdlIGFyZSByZWFsbHkgYXN5bmNcbiAgICAgICAgdGhpcy5fZ2V0QmFja2VuZCgpLnNlbmRFdmVudChwcm9jZXNzZWRFdmVudCk7XG4gICAgICAgIHJlc29sdmUocHJvY2Vzc2VkRXZlbnQpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKG51bGwsIGUgPT4ge1xuICAgICAgICByZWplY3QoYGJlZm9yZVNlbmQgcmVqZWN0ZWQgd2l0aCAke2V9YCk7XG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTtBQUdBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdDQTtBQUFBO0FBQUE7QUFvQkE7Ozs7OztBQU1BO0FBWkE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQ0E7QUFWQTtBQUNBO0FBWUE7QUFqQkE7QUFvQkE7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBVEE7QUFZQTtBQXJCQTtBQXdCQTs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQWZBO0FBa0JBOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUlBOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUlBOzs7OztBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBSEE7QUFGQTtBQURBO0FBVUE7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU9BOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUlBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFkQTtBQVBBO0FBREE7QUEyQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBN0NBO0FBc0RBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBQUE7QUFHQTtBQURBO0FBRkE7QUFEQTtBQVNBO0FBREE7QUFJQTtBQURBO0FBSUE7QUFEQTtBQXRCQTtBQTRCQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFPQTs7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBbENBO0FBcUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFKQTtBQUNBO0FBS0E7QUEzQ0E7QUFEQTtBQWJBO0FBZ0VBOzs7OztBQUdBO0FBQUE7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBUkE7QUFXQTtBQVhBO0FBTEE7QUFDQTtBQWtCQTtBQXBhQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/baseclient.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/index.js": -/*!*************************************************!*\ - !*** ../node_modules/@sentry/core/esm/index.js ***! - \*************************************************/ -/*! exports provided: addBreadcrumb, captureException, captureEvent, captureMessage, configureScope, setContext, setExtra, setExtras, setTag, setTags, setUser, withScope, addGlobalEventProcessor, getCurrentHub, getHubFromCarrier, Hub, Scope, API, BaseClient, BaseBackend, initAndBind, NoopTransport, Integrations */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/minimal */ \"../node_modules/@sentry/minimal/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addBreadcrumb\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"addBreadcrumb\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureException\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"captureException\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureEvent\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"captureEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"captureMessage\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"captureMessage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"configureScope\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"configureScope\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setContext\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setContext\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtra\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setExtra\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setExtras\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setExtras\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTag\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setTag\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setTags\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setTags\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setUser\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"setUser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withScope\", function() { return _sentry_minimal__WEBPACK_IMPORTED_MODULE_0__[\"withScope\"]; });\n\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/hub */ \"../node_modules/@sentry/hub/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addGlobalEventProcessor\", function() { return _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getCurrentHub\", function() { return _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getHubFromCarrier\", function() { return _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"getHubFromCarrier\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Hub\", function() { return _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"Hub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Scope\", function() { return _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"Scope\"]; });\n\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api */ \"../node_modules/@sentry/core/esm/api.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"API\", function() { return _api__WEBPACK_IMPORTED_MODULE_2__[\"API\"]; });\n\n/* harmony import */ var _baseclient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./baseclient */ \"../node_modules/@sentry/core/esm/baseclient.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BaseClient\", function() { return _baseclient__WEBPACK_IMPORTED_MODULE_3__[\"BaseClient\"]; });\n\n/* harmony import */ var _basebackend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./basebackend */ \"../node_modules/@sentry/core/esm/basebackend.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BaseBackend\", function() { return _basebackend__WEBPACK_IMPORTED_MODULE_4__[\"BaseBackend\"]; });\n\n/* harmony import */ var _sdk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdk */ \"../node_modules/@sentry/core/esm/sdk.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"initAndBind\", function() { return _sdk__WEBPACK_IMPORTED_MODULE_5__[\"initAndBind\"]; });\n\n/* harmony import */ var _transports_noop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./transports/noop */ \"../node_modules/@sentry/core/esm/transports/noop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NoopTransport\", function() { return _transports_noop__WEBPACK_IMPORTED_MODULE_6__[\"NoopTransport\"]; });\n\n/* harmony import */ var _integrations__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./integrations */ \"../node_modules/@sentry/core/esm/integrations/index.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Integrations\", function() { return _integrations__WEBPACK_IMPORTED_MODULE_7__; });\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgYWRkQnJlYWRjcnVtYixcbiAgY2FwdHVyZUV4Y2VwdGlvbixcbiAgY2FwdHVyZUV2ZW50LFxuICBjYXB0dXJlTWVzc2FnZSxcbiAgY29uZmlndXJlU2NvcGUsXG4gIHNldENvbnRleHQsXG4gIHNldEV4dHJhLFxuICBzZXRFeHRyYXMsXG4gIHNldFRhZyxcbiAgc2V0VGFncyxcbiAgc2V0VXNlcixcbiAgd2l0aFNjb3BlLFxufSBmcm9tICdAc2VudHJ5L21pbmltYWwnO1xuZXhwb3J0IHsgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsIGdldEN1cnJlbnRIdWIsIGdldEh1YkZyb21DYXJyaWVyLCBIdWIsIFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuZXhwb3J0IHsgQVBJIH0gZnJvbSAnLi9hcGknO1xuZXhwb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gJy4vYmFzZWNsaWVudCc7XG5leHBvcnQgeyBCYWNrZW5kQ2xhc3MsIEJhc2VCYWNrZW5kIH0gZnJvbSAnLi9iYXNlYmFja2VuZCc7XG5leHBvcnQgeyBpbml0QW5kQmluZCwgQ2xpZW50Q2xhc3MgfSBmcm9tICcuL3Nkayc7XG5leHBvcnQgeyBOb29wVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL25vb3AnO1xuXG5pbXBvcnQgKiBhcyBJbnRlZ3JhdGlvbnMgZnJvbSAnLi9pbnRlZ3JhdGlvbnMnO1xuXG5leHBvcnQgeyBJbnRlZ3JhdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/integration.js": -/*!*******************************************************!*\ - !*** ../node_modules/@sentry/core/esm/integration.js ***! - \*******************************************************/ -/*! exports provided: installedIntegrations, getIntegrationsToSetup, setupIntegration, setupIntegrations */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"installedIntegrations\", function() { return installedIntegrations; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getIntegrationsToSetup\", function() { return getIntegrationsToSetup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setupIntegration\", function() { return setupIntegration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setupIntegrations\", function() { return setupIntegrations; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/hub */ \"../node_modules/@sentry/hub/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n\nvar installedIntegrations = [];\n/** Gets integration to install */\n\nfunction getIntegrationsToSetup(options) {\n var defaultIntegrations = options.defaultIntegrations && tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](options.defaultIntegrations) || [];\n var userIntegrations = options.integrations;\n var integrations = [];\n\n if (Array.isArray(userIntegrations)) {\n var userIntegrationsNames_1 = userIntegrations.map(function (i) {\n return i.name;\n });\n var pickedIntegrationsNames_1 = []; // Leave only unique default integrations, that were not overridden with provided user integrations\n\n defaultIntegrations.forEach(function (defaultIntegration) {\n if (userIntegrationsNames_1.indexOf(defaultIntegration.name) === -1 && pickedIntegrationsNames_1.indexOf(defaultIntegration.name) === -1) {\n integrations.push(defaultIntegration);\n pickedIntegrationsNames_1.push(defaultIntegration.name);\n }\n }); // Don't add same user integration twice\n\n userIntegrations.forEach(function (userIntegration) {\n if (pickedIntegrationsNames_1.indexOf(userIntegration.name) === -1) {\n integrations.push(userIntegration);\n pickedIntegrationsNames_1.push(userIntegration.name);\n }\n });\n } else if (typeof userIntegrations === 'function') {\n integrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(integrations) ? integrations : [integrations];\n } else {\n integrations = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](defaultIntegrations);\n } // Make sure that if present, `Debug` integration will always run last\n\n\n var integrationsNames = integrations.map(function (i) {\n return i.name;\n });\n var alwaysLastToRun = 'Debug';\n\n if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n integrations.push.apply(integrations, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1)));\n }\n\n return integrations;\n}\n/** Setup given integration */\n\nfunction setupIntegration(integration) {\n if (installedIntegrations.indexOf(integration.name) !== -1) {\n return;\n }\n\n integration.setupOnce(_sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"], _sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"]);\n installedIntegrations.push(integration.name);\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].log(\"Integration installed: \" + integration.name);\n}\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\n\nfunction setupIntegrations(options) {\n var integrations = {};\n getIntegrationsToSetup(options).forEach(function (integration) {\n integrations[integration.name] = integration;\n setupIntegration(integration);\n });\n return integrations;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2ludGVncmF0aW9uLnRzP2QwOTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsIGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbiwgT3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpbnN0YWxsZWRJbnRlZ3JhdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbi8qKiBNYXAgb2YgaW50ZWdyYXRpb25zIGFzc2lnbmVkIHRvIGEgY2xpZW50ICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uSW5kZXgge1xuICBba2V5OiBzdHJpbmddOiBJbnRlZ3JhdGlvbjtcbn1cblxuLyoqIEdldHMgaW50ZWdyYXRpb24gdG8gaW5zdGFsbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVncmF0aW9uc1RvU2V0dXAob3B0aW9uczogT3B0aW9ucyk6IEludGVncmF0aW9uW10ge1xuICBjb25zdCBkZWZhdWx0SW50ZWdyYXRpb25zID0gKG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyAmJiBbLi4ub3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zXSkgfHwgW107XG4gIGNvbnN0IHVzZXJJbnRlZ3JhdGlvbnMgPSBvcHRpb25zLmludGVncmF0aW9ucztcbiAgbGV0IGludGVncmF0aW9uczogSW50ZWdyYXRpb25bXSA9IFtdO1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VySW50ZWdyYXRpb25zKSkge1xuICAgIGNvbnN0IHVzZXJJbnRlZ3JhdGlvbnNOYW1lcyA9IHVzZXJJbnRlZ3JhdGlvbnMubWFwKGkgPT4gaS5uYW1lKTtcbiAgICBjb25zdCBwaWNrZWRJbnRlZ3JhdGlvbnNOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIExlYXZlIG9ubHkgdW5pcXVlIGRlZmF1bHQgaW50ZWdyYXRpb25zLCB0aGF0IHdlcmUgbm90IG92ZXJyaWRkZW4gd2l0aCBwcm92aWRlZCB1c2VyIGludGVncmF0aW9uc1xuICAgIGRlZmF1bHRJbnRlZ3JhdGlvbnMuZm9yRWFjaChkZWZhdWx0SW50ZWdyYXRpb24gPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB1c2VySW50ZWdyYXRpb25zTmFtZXMuaW5kZXhPZihkZWZhdWx0SW50ZWdyYXRpb24ubmFtZSkgPT09IC0xICYmXG4gICAgICAgIHBpY2tlZEludGVncmF0aW9uc05hbWVzLmluZGV4T2YoZGVmYXVsdEludGVncmF0aW9uLm5hbWUpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGludGVncmF0aW9ucy5wdXNoKGRlZmF1bHRJbnRlZ3JhdGlvbik7XG4gICAgICAgIHBpY2tlZEludGVncmF0aW9uc05hbWVzLnB1c2goZGVmYXVsdEludGVncmF0aW9uLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRG9uJ3QgYWRkIHNhbWUgdXNlciBpbnRlZ3JhdGlvbiB0d2ljZVxuICAgIHVzZXJJbnRlZ3JhdGlvbnMuZm9yRWFjaCh1c2VySW50ZWdyYXRpb24gPT4ge1xuICAgICAgaWYgKHBpY2tlZEludGVncmF0aW9uc05hbWVzLmluZGV4T2YodXNlckludGVncmF0aW9uLm5hbWUpID09PSAtMSkge1xuICAgICAgICBpbnRlZ3JhdGlvbnMucHVzaCh1c2VySW50ZWdyYXRpb24pO1xuICAgICAgICBwaWNrZWRJbnRlZ3JhdGlvbnNOYW1lcy5wdXNoKHVzZXJJbnRlZ3JhdGlvbi5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXNlckludGVncmF0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGludGVncmF0aW9ucyA9IHVzZXJJbnRlZ3JhdGlvbnMoZGVmYXVsdEludGVncmF0aW9ucyk7XG4gICAgaW50ZWdyYXRpb25zID0gQXJyYXkuaXNBcnJheShpbnRlZ3JhdGlvbnMpID8gaW50ZWdyYXRpb25zIDogW2ludGVncmF0aW9uc107XG4gIH0gZWxzZSB7XG4gICAgaW50ZWdyYXRpb25zID0gWy4uLmRlZmF1bHRJbnRlZ3JhdGlvbnNdO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgcHJlc2VudCwgYERlYnVnYCBpbnRlZ3JhdGlvbiB3aWxsIGFsd2F5cyBydW4gbGFzdFxuICBjb25zdCBpbnRlZ3JhdGlvbnNOYW1lcyA9IGludGVncmF0aW9ucy5tYXAoaSA9PiBpLm5hbWUpO1xuICBjb25zdCBhbHdheXNMYXN0VG9SdW4gPSAnRGVidWcnO1xuICBpZiAoaW50ZWdyYXRpb25zTmFtZXMuaW5kZXhPZihhbHdheXNMYXN0VG9SdW4pICE9PSAtMSkge1xuICAgIGludGVncmF0aW9ucy5wdXNoKC4uLmludGVncmF0aW9ucy5zcGxpY2UoaW50ZWdyYXRpb25zTmFtZXMuaW5kZXhPZihhbHdheXNMYXN0VG9SdW4pLCAxKSk7XG4gIH1cblxuICByZXR1cm4gaW50ZWdyYXRpb25zO1xufVxuXG4vKiogU2V0dXAgZ2l2ZW4gaW50ZWdyYXRpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVncmF0aW9uKGludGVncmF0aW9uOiBJbnRlZ3JhdGlvbik6IHZvaWQge1xuICBpZiAoaW5zdGFsbGVkSW50ZWdyYXRpb25zLmluZGV4T2YoaW50ZWdyYXRpb24ubmFtZSkgIT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGludGVncmF0aW9uLnNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1Yik7XG4gIGluc3RhbGxlZEludGVncmF0aW9ucy5wdXNoKGludGVncmF0aW9uLm5hbWUpO1xuICBsb2dnZXIubG9nKGBJbnRlZ3JhdGlvbiBpbnN0YWxsZWQ6ICR7aW50ZWdyYXRpb24ubmFtZX1gKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgaW50ZWdyYXRpb24gaW5zdGFuY2VzIHRoaXMgaW5zdGFsbHMgdGhlbSBhbGwuIFdoZW4gYHdpdGhEZWZhdWx0c2AgaXMgc2V0IHRvIGB0cnVlYCB0aGVuIGFsbCBkZWZhdWx0XG4gKiBpbnRlZ3JhdGlvbnMgYXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgYWxyZWFkeSBwcm92aWRlZCBiZWZvcmUuXG4gKiBAcGFyYW0gaW50ZWdyYXRpb25zIGFycmF5IG9mIGludGVncmF0aW9uIGluc3RhbmNlc1xuICogQHBhcmFtIHdpdGhEZWZhdWx0IHNob3VsZCBlbmFibGUgZGVmYXVsdCBpbnRlZ3JhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwSW50ZWdyYXRpb25zPE8gZXh0ZW5kcyBPcHRpb25zPihvcHRpb25zOiBPKTogSW50ZWdyYXRpb25JbmRleCB7XG4gIGNvbnN0IGludGVncmF0aW9uczogSW50ZWdyYXRpb25JbmRleCA9IHt9O1xuICBnZXRJbnRlZ3JhdGlvbnNUb1NldHVwKG9wdGlvbnMpLmZvckVhY2goaW50ZWdyYXRpb24gPT4ge1xuICAgIGludGVncmF0aW9uc1tpbnRlZ3JhdGlvbi5uYW1lXSA9IGludGVncmF0aW9uO1xuICAgIHNldHVwSW50ZWdyYXRpb24oaW50ZWdyYXRpb24pO1xuICB9KTtcbiAgcmV0dXJuIGludGVncmF0aW9ucztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUVBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQWhCQTtBQXVCQTtBQUNBO0FBRkE7QUFJQTtBQTlCQTtBQUNBO0FBQ0E7QUFnQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/integration.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/integrations/functiontostring.js": -/*!*************************************************************************!*\ - !*** ../node_modules/@sentry/core/esm/integrations/functiontostring.js ***! - \*************************************************************************/ -/*! exports provided: FunctionToString */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionToString\", function() { return FunctionToString; });\nvar originalFunctionToString;\n/** Patch toString calls to return proper name for wrapped functions */\n\nvar FunctionToString =\n/** @class */\nfunction () {\n function FunctionToString() {\n /**\n * @inheritDoc\n */\n this.name = FunctionToString.id;\n }\n /**\n * @inheritDoc\n */\n\n\n FunctionToString.prototype.setupOnce = function () {\n originalFunctionToString = Function.prototype.toString;\n\n Function.prototype.toString = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var context = this.__sentry_original__ || this; // tslint:disable-next-line:no-unsafe-any\n\n return originalFunctionToString.apply(context, args);\n };\n };\n /**\n * @inheritDoc\n */\n\n\n FunctionToString.id = 'FunctionToString';\n return FunctionToString;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb25zL2Z1bmN0aW9udG9zdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2ludGVncmF0aW9ucy9mdW5jdGlvbnRvc3RyaW5nLnRzPzBlMTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZWdyYXRpb24sIFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5sZXQgb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nOiAoKSA9PiB2b2lkO1xuXG4vKiogUGF0Y2ggdG9TdHJpbmcgY2FsbHMgdG8gcmV0dXJuIHByb3BlciBuYW1lIGZvciB3cmFwcGVkIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVG9TdHJpbmcgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEZ1bmN0aW9uVG9TdHJpbmcuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRnVuY3Rpb25Ub1N0cmluZyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHRoaXM6IFdyYXBwZWRGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBzdHJpbmcge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX19zZW50cnlfb3JpZ2luYWxfXyB8fCB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuc2FmZS1hbnlcbiAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uVG9TdHJpbmcuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7O0FBR0E7QUFtQkE7QUFaQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBUkE7Ozs7O0FBR0E7QUFjQTtBQXZCQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/integrations/functiontostring.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/integrations/inboundfilters.js": -/*!***********************************************************************!*\ - !*** ../node_modules/@sentry/core/esm/integrations/inboundfilters.js ***! - \***********************************************************************/ -/*! exports provided: InboundFilters */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InboundFilters\", function() { return InboundFilters; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/hub */ \"../node_modules/@sentry/hub/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\n\nvar DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n/** Inbound filters configurable by the user */\n\nvar InboundFilters =\n/** @class */\nfunction () {\n function InboundFilters(_options) {\n if (_options === void 0) {\n _options = {};\n }\n\n this._options = _options;\n /**\n * @inheritDoc\n */\n\n this.name = InboundFilters.id;\n }\n /**\n * @inheritDoc\n */\n\n\n InboundFilters.prototype.setupOnce = function () {\n Object(_sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"addGlobalEventProcessor\"])(function (event) {\n var hub = Object(_sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])();\n\n if (!hub) {\n return event;\n }\n\n var self = hub.getIntegration(InboundFilters);\n\n if (self) {\n var client = hub.getClient();\n var clientOptions = client ? client.getOptions() : {};\n\n var options = self._mergeOptions(clientOptions);\n\n if (self._shouldDropEvent(event, options)) {\n return null;\n }\n }\n\n return event;\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._shouldDropEvent = function (event, options) {\n if (this._isSentryError(event, options)) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Event dropped due to being internal Sentry Error.\\nEvent: \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event));\n return true;\n }\n\n if (this._isIgnoredError(event, options)) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Event dropped due to being matched by `ignoreErrors` option.\\nEvent: \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event));\n return true;\n }\n\n if (this._isBlacklistedUrl(event, options)) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Event dropped due to being matched by `blacklistUrls` option.\\nEvent: \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n return true;\n }\n\n if (!this._isWhitelistedUrl(event, options)) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn(\"Event dropped due to not being matched by `whitelistUrls` option.\\nEvent: \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n return true;\n }\n\n return false;\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isSentryError = function (event, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!options.ignoreInternal) {\n return false;\n }\n\n try {\n return event && event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].type === 'SentryError' || false;\n } catch (_oO) {\n return false;\n }\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isIgnoredError = function (event, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!options.ignoreErrors || !options.ignoreErrors.length) {\n return false;\n }\n\n return this._getPossibleEventMessages(event).some(function (message) {\n // Not sure why TypeScript complains here...\n return options.ignoreErrors.some(function (pattern) {\n return Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"isMatchingPattern\"])(message, pattern);\n });\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isBlacklistedUrl = function (event, options) {\n if (options === void 0) {\n options = {};\n } // TODO: Use Glob instead?\n\n\n if (!options.blacklistUrls || !options.blacklistUrls.length) {\n return false;\n }\n\n var url = this._getEventFilterUrl(event);\n\n return !url ? false : options.blacklistUrls.some(function (pattern) {\n return Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"isMatchingPattern\"])(url, pattern);\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isWhitelistedUrl = function (event, options) {\n if (options === void 0) {\n options = {};\n } // TODO: Use Glob instead?\n\n\n if (!options.whitelistUrls || !options.whitelistUrls.length) {\n return true;\n }\n\n var url = this._getEventFilterUrl(event);\n\n return !url ? true : options.whitelistUrls.some(function (pattern) {\n return Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"isMatchingPattern\"])(url, pattern);\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._mergeOptions = function (clientOptions) {\n if (clientOptions === void 0) {\n clientOptions = {};\n }\n\n return {\n blacklistUrls: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](this._options.blacklistUrls || [], clientOptions.blacklistUrls || []),\n ignoreErrors: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](this._options.ignoreErrors || [], clientOptions.ignoreErrors || [], DEFAULT_IGNORE_ERRORS),\n ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true,\n whitelistUrls: tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](this._options.whitelistUrls || [], clientOptions.whitelistUrls || [])\n };\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._getPossibleEventMessages = function (event) {\n if (event.message) {\n return [event.message];\n }\n\n if (event.exception) {\n try {\n var _a = event.exception.values && event.exception.values[0] || {},\n _b = _a.type,\n type = _b === void 0 ? '' : _b,\n _c = _a.value,\n value = _c === void 0 ? '' : _c;\n\n return [\"\" + value, type + \": \" + value];\n } catch (oO) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error(\"Cannot extract message for event \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event));\n return [];\n }\n }\n\n return [];\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._getEventFilterUrl = function (event) {\n try {\n if (event.stacktrace) {\n var frames_1 = event.stacktrace.frames;\n return frames_1 && frames_1[frames_1.length - 1].filename || null;\n }\n\n if (event.exception) {\n var frames_2 = event.exception.values && event.exception.values[0].stacktrace && event.exception.values[0].stacktrace.frames;\n return frames_2 && frames_2[frames_2.length - 1].filename || null;\n }\n\n return null;\n } catch (oO) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error(\"Cannot extract url for event \" + Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_2__[\"getEventDescription\"])(event));\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n\n\n InboundFilters.id = 'InboundFilters';\n return InboundFilters;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb25zL2luYm91bmRmaWx0ZXJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvaW5ib3VuZGZpbHRlcnMudHM/ODVjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50LCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RXZlbnREZXNjcmlwdGlvbiwgaXNNYXRjaGluZ1BhdHRlcm4sIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vLyBcIlNjcmlwdCBlcnJvci5cIiBpcyBoYXJkIGNvZGVkIGludG8gYnJvd3NlcnMgZm9yIGVycm9ycyB0aGF0IGl0IGNhbid0IHJlYWQuXG4vLyB0aGlzIGlzIHRoZSByZXN1bHQgb2YgYSBzY3JpcHQgYmVpbmcgcHVsbGVkIGluIGZyb20gYW4gZXh0ZXJuYWwgZG9tYWluIGFuZCBDT1JTLlxuY29uc3QgREVGQVVMVF9JR05PUkVfRVJST1JTID0gWy9eU2NyaXB0IGVycm9yXFwuPyQvLCAvXkphdmFzY3JpcHQgZXJyb3I6IFNjcmlwdCBlcnJvclxcLj8gb24gbGluZSAwJC9dO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBJbmJvdW5kRmlsdGVyc09wdGlvbnMge1xuICBibGFja2xpc3RVcmxzPzogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgaWdub3JlRXJyb3JzPzogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgaWdub3JlSW50ZXJuYWw/OiBib29sZWFuO1xuICB3aGl0ZWxpc3RVcmxzPzogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbn1cblxuLyoqIEluYm91bmQgZmlsdGVycyBjb25maWd1cmFibGUgYnkgdGhlIHVzZXIgKi9cbmV4cG9ydCBjbGFzcyBJbmJvdW5kRmlsdGVycyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gSW5ib3VuZEZpbHRlcnMuaWQ7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0luYm91bmRGaWx0ZXJzJztcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogSW5ib3VuZEZpbHRlcnNPcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgICAgIGlmICghaHViKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGYgPSBodWIuZ2V0SW50ZWdyYXRpb24oSW5ib3VuZEZpbHRlcnMpO1xuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gaHViLmdldENsaWVudCgpO1xuICAgICAgICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50ID8gY2xpZW50LmdldE9wdGlvbnMoKSA6IHt9O1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi5fbWVyZ2VPcHRpb25zKGNsaWVudE9wdGlvbnMpO1xuICAgICAgICBpZiAoc2VsZi5fc2hvdWxkRHJvcEV2ZW50KGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfc2hvdWxkRHJvcEV2ZW50KGV2ZW50OiBFdmVudCwgb3B0aW9uczogSW5ib3VuZEZpbHRlcnNPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2lzU2VudHJ5RXJyb3IoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgaW50ZXJuYWwgU2VudHJ5IEVycm9yLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc0lnbm9yZWRFcnJvcihldmVudCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgbWF0Y2hlZCBieSBcXGBpZ25vcmVFcnJvcnNcXGAgb3B0aW9uLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc0JsYWNrbGlzdGVkVXJsKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBtYXRjaGVkIGJ5IFxcYGJsYWNrbGlzdFVybHNcXGAgb3B0aW9uLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICl9LlxcblVybDogJHt0aGlzLl9nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9pc1doaXRlbGlzdGVkVXJsKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBFdmVudCBkcm9wcGVkIGR1ZSB0byBub3QgYmVpbmcgbWF0Y2hlZCBieSBcXGB3aGl0ZWxpc3RVcmxzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICApfS5cXG5Vcmw6ICR7dGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1NlbnRyeUVycm9yKGV2ZW50OiBFdmVudCwgb3B0aW9uczogSW5ib3VuZEZpbHRlcnNPcHRpb25zID0ge30pOiBib29sZWFuIHtcbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlSW50ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGV2ZW50ICYmXG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uICYmXG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJlxuICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gJiZcbiAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnR5cGUgPT09ICdTZW50cnlFcnJvcicpIHx8XG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc0lnbm9yZWRFcnJvcihldmVudDogRXZlbnQsIG9wdGlvbnM6IEluYm91bmRGaWx0ZXJzT3B0aW9ucyA9IHt9KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvcHRpb25zLmlnbm9yZUVycm9ycyB8fCAhb3B0aW9ucy5pZ25vcmVFcnJvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldFBvc3NpYmxlRXZlbnRNZXNzYWdlcyhldmVudCkuc29tZShtZXNzYWdlID0+XG4gICAgICAvLyBOb3Qgc3VyZSB3aHkgVHlwZVNjcmlwdCBjb21wbGFpbnMgaGVyZS4uLlxuICAgICAgKG9wdGlvbnMuaWdub3JlRXJyb3JzIGFzIEFycmF5PFJlZ0V4cCB8IHN0cmluZz4pLnNvbWUocGF0dGVybiA9PiBpc01hdGNoaW5nUGF0dGVybihtZXNzYWdlLCBwYXR0ZXJuKSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc0JsYWNrbGlzdGVkVXJsKGV2ZW50OiBFdmVudCwgb3B0aW9uczogSW5ib3VuZEZpbHRlcnNPcHRpb25zID0ge30pOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiBVc2UgR2xvYiBpbnN0ZWFkP1xuICAgIGlmICghb3B0aW9ucy5ibGFja2xpc3RVcmxzIHx8ICFvcHRpb25zLmJsYWNrbGlzdFVybHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IHRoaXMuX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcbiAgICByZXR1cm4gIXVybCA/IGZhbHNlIDogb3B0aW9ucy5ibGFja2xpc3RVcmxzLnNvbWUocGF0dGVybiA9PiBpc01hdGNoaW5nUGF0dGVybih1cmwsIHBhdHRlcm4pKTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1doaXRlbGlzdGVkVXJsKGV2ZW50OiBFdmVudCwgb3B0aW9uczogSW5ib3VuZEZpbHRlcnNPcHRpb25zID0ge30pOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiBVc2UgR2xvYiBpbnN0ZWFkP1xuICAgIGlmICghb3B0aW9ucy53aGl0ZWxpc3RVcmxzIHx8ICFvcHRpb25zLndoaXRlbGlzdFVybHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gdGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpO1xuICAgIHJldHVybiAhdXJsID8gdHJ1ZSA6IG9wdGlvbnMud2hpdGVsaXN0VXJscy5zb21lKHBhdHRlcm4gPT4gaXNNYXRjaGluZ1BhdHRlcm4odXJsLCBwYXR0ZXJuKSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfbWVyZ2VPcHRpb25zKGNsaWVudE9wdGlvbnM6IEluYm91bmRGaWx0ZXJzT3B0aW9ucyA9IHt9KTogSW5ib3VuZEZpbHRlcnNPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxhY2tsaXN0VXJsczogWy4uLih0aGlzLl9vcHRpb25zLmJsYWNrbGlzdFVybHMgfHwgW10pLCAuLi4oY2xpZW50T3B0aW9ucy5ibGFja2xpc3RVcmxzIHx8IFtdKV0sXG4gICAgICBpZ25vcmVFcnJvcnM6IFtcbiAgICAgICAgLi4uKHRoaXMuX29wdGlvbnMuaWdub3JlRXJyb3JzIHx8IFtdKSxcbiAgICAgICAgLi4uKGNsaWVudE9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IFtdKSxcbiAgICAgICAgLi4uREVGQVVMVF9JR05PUkVfRVJST1JTLFxuICAgICAgXSxcbiAgICAgIGlnbm9yZUludGVybmFsOiB0eXBlb2YgdGhpcy5fb3B0aW9ucy5pZ25vcmVJbnRlcm5hbCAhPT0gJ3VuZGVmaW5lZCcgPyB0aGlzLl9vcHRpb25zLmlnbm9yZUludGVybmFsIDogdHJ1ZSxcbiAgICAgIHdoaXRlbGlzdFVybHM6IFsuLi4odGhpcy5fb3B0aW9ucy53aGl0ZWxpc3RVcmxzIHx8IFtdKSwgLi4uKGNsaWVudE9wdGlvbnMud2hpdGVsaXN0VXJscyB8fCBbXSldLFxuICAgIH07XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50OiBFdmVudCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIFtldmVudC5tZXNzYWdlXTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmV4Y2VwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyB0eXBlID0gJycsIHZhbHVlID0gJycgfSA9IChldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0pIHx8IHt9O1xuICAgICAgICByZXR1cm4gW2Ake3ZhbHVlfWAsIGAke3R5cGV9OiAke3ZhbHVlfWBdO1xuICAgICAgfSBjYXRjaCAob08pIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBDYW5ub3QgZXh0cmFjdCBtZXNzYWdlIGZvciBldmVudCAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRFdmVudEZpbHRlclVybChldmVudDogRXZlbnQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LnN0YWNrdHJhY2UpIHtcbiAgICAgICAgY29uc3QgZnJhbWVzID0gZXZlbnQuc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgICAgIHJldHVybiAoZnJhbWVzICYmIGZyYW1lc1tmcmFtZXMubGVuZ3RoIC0gMV0uZmlsZW5hbWUpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQuZXhjZXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lcyA9XG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcztcbiAgICAgICAgcmV0dXJuIChmcmFtZXMgJiYgZnJhbWVzW2ZyYW1lcy5sZW5ndGggLSAxXS5maWxlbmFtZSkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKG9PKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCBleHRyYWN0IHVybCBmb3IgZXZlbnQgJHtnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUVBO0FBR0E7QUFDQTtBQUFBO0FBVUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQVRBOzs7O0FBR0E7QUFNQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZEE7QUFEQTtBQW1CQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQTNCQTtBQThCQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFVQTtBQUNBO0FBaEJBO0FBbUJBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUxBO0FBV0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBUkE7QUFEQTtBQWFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFmQTtBQWhKQTs7Ozs7QUFHQTtBQThKQTtBQXRLQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/integrations/inboundfilters.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/integrations/index.js": -/*!**************************************************************!*\ - !*** ../node_modules/@sentry/core/esm/integrations/index.js ***! - \**************************************************************/ -/*! exports provided: FunctionToString, InboundFilters */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _functiontostring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./functiontostring */ \"../node_modules/@sentry/core/esm/integrations/functiontostring.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionToString\", function() { return _functiontostring__WEBPACK_IMPORTED_MODULE_0__[\"FunctionToString\"]; });\n\n/* harmony import */ var _inboundfilters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inboundfilters */ \"../node_modules/@sentry/core/esm/integrations/inboundfilters.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"InboundFilters\", function() { return _inboundfilters__WEBPACK_IMPORTED_MODULE_1__[\"InboundFilters\"]; });\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb25zL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvaW5kZXgudHM/ZWMyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGdW5jdGlvblRvU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbnRvc3RyaW5nJztcbmV4cG9ydCB7IEluYm91bmRGaWx0ZXJzIH0gZnJvbSAnLi9pbmJvdW5kZmlsdGVycyc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/integrations/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/sdk.js": -/*!***********************************************!*\ - !*** ../node_modules/@sentry/core/esm/sdk.js ***! - \***********************************************/ -/*! exports provided: initAndBind */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initAndBind\", function() { return initAndBind; });\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/hub */ \"../node_modules/@sentry/hub/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instanciate.\n * @param options Options to pass to the client.\n */\n\nfunction initAndBind(clientClass, options) {\n if (options.debug === true) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].enable();\n }\n\n Object(_sentry_hub__WEBPACK_IMPORTED_MODULE_0__[\"getCurrentHub\"])().bindClient(new clientClass(options));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vc2RrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9zZGsudHM/ZDhhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgQ2xpZW50LCBPcHRpb25zIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIEEgY2xhc3Mgb2JqZWN0IHRoYXQgY2FuIGluc3RhbmNpYXRlIENsaWVudCBvYmplY3RzLiAqL1xuZXhwb3J0IHR5cGUgQ2xpZW50Q2xhc3M8RiBleHRlbmRzIENsaWVudCwgTyBleHRlbmRzIE9wdGlvbnM+ID0gbmV3IChvcHRpb25zOiBPKSA9PiBGO1xuXG4vKipcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBTREsgY2xpZW50IGluc3RhbmNlLiBUaGUgY2xpZW50IGlzXG4gKiBpbnN0YWxsZWQgYW5kIHRoZW4gYm91bmQgdG8gdGhlIGN1cnJlbnQgc2NvcGUuXG4gKlxuICogQHBhcmFtIGNsaWVudENsYXNzIFRoZSBjbGllbnQgY2xhc3MgdG8gaW5zdGFuY2lhdGUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRBbmRCaW5kPEYgZXh0ZW5kcyBDbGllbnQsIE8gZXh0ZW5kcyBPcHRpb25zPihjbGllbnRDbGFzczogQ2xpZW50Q2xhc3M8RiwgTz4sIG9wdGlvbnM6IE8pOiB2b2lkIHtcbiAgaWYgKG9wdGlvbnMuZGVidWcgPT09IHRydWUpIHtcbiAgICBsb2dnZXIuZW5hYmxlKCk7XG4gIH1cbiAgZ2V0Q3VycmVudEh1YigpLmJpbmRDbGllbnQobmV3IGNsaWVudENsYXNzKG9wdGlvbnMpKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBS0E7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/sdk.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/core/esm/transports/noop.js": -/*!***********************************************************!*\ - !*** ../node_modules/@sentry/core/esm/transports/noop.js ***! - \***********************************************************/ -/*! exports provided: NoopTransport */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NoopTransport\", function() { return NoopTransport; });\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/types */ \"../node_modules/@sentry/types/esm/index.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n/** Noop transport */\n\nvar NoopTransport =\n/** @class */\nfunction () {\n function NoopTransport() {}\n /**\n * @inheritDoc\n */\n\n\n NoopTransport.prototype.sendEvent = function (_) {\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].resolve({\n reason: \"NoopTransport: Event has been skipped because no Dsn is configured.\",\n status: _sentry_types__WEBPACK_IMPORTED_MODULE_0__[\"Status\"].Skipped\n });\n };\n /**\n * @inheritDoc\n */\n\n\n NoopTransport.prototype.close = function (_) {\n return _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].resolve(true);\n };\n\n return NoopTransport;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vdHJhbnNwb3J0cy9ub29wLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy90cmFuc3BvcnRzL25vb3AudHM/OGZmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCwgUmVzcG9uc2UsIFN0YXR1cywgVHJhbnNwb3J0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogTm9vcCB0cmFuc3BvcnQgKi9cbmV4cG9ydCBjbGFzcyBOb29wVHJhbnNwb3J0IGltcGxlbWVudHMgVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZEV2ZW50KF86IEV2ZW50KTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZSh7XG4gICAgICByZWFzb246IGBOb29wVHJhbnNwb3J0OiBFdmVudCBoYXMgYmVlbiBza2lwcGVkIGJlY2F1c2Ugbm8gRHNuIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgIHN0YXR1czogU3RhdHVzLlNraXBwZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjbG9zZShfPzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU9BOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFqQkE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/core/esm/transports/noop.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/hub/esm/hub.js": -/*!**********************************************!*\ - !*** ../node_modules/@sentry/hub/esm/hub.js ***! - \**********************************************/ -/*! exports provided: API_VERSION, Hub, getMainCarrier, makeMain, getCurrentHub, getHubFromCarrier, setHubOnCarrier */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"API_VERSION\", function() { return API_VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Hub\", function() { return Hub; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMainCarrier\", function() { return getMainCarrier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeMain\", function() { return makeMain; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrentHub\", function() { return getCurrentHub; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getHubFromCarrier\", function() { return getHubFromCarrier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setHubOnCarrier\", function() { return setHubOnCarrier; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n/* harmony import */ var _scope__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scope */ \"../node_modules/@sentry/hub/esm/scope.js\");\n\n\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be incresed when the global interface\n * changes a and new methods are introduced.\n *\n * @hidden\n */\n\nvar API_VERSION = 3;\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\n\nvar DEFAULT_BREADCRUMBS = 100;\n/**\n * Absolute maximum number of breadcrumbs added to an event. The\n * `maxBreadcrumbs` option cannot be higher than this value.\n */\n\nvar MAX_BREADCRUMBS = 100;\n/**\n * @inheritDoc\n */\n\nvar Hub =\n/** @class */\nfunction () {\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n function Hub(client, scope, _version) {\n if (scope === void 0) {\n scope = new _scope__WEBPACK_IMPORTED_MODULE_2__[\"Scope\"]();\n }\n\n if (_version === void 0) {\n _version = API_VERSION;\n }\n\n this._version = _version;\n /** Is a {@link Layer}[] containing the client and scope */\n\n this._stack = [];\n\n this._stack.push({\n client: client,\n scope: scope\n });\n }\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n\n\n Hub.prototype._invokeClient = function (method) {\n var _a;\n\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var top = this.getStackTop();\n\n if (top && top.client && top.client[method]) {\n (_a = top.client)[method].apply(_a, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args, [top.scope]));\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.isOlderThan = function (version) {\n return this._version < version;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.bindClient = function (client) {\n var top = this.getStackTop();\n top.client = client;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.pushScope = function () {\n // We want to clone the content of prev scope\n var stack = this.getStack();\n var parentScope = stack.length > 0 ? stack[stack.length - 1].scope : undefined;\n var scope = _scope__WEBPACK_IMPORTED_MODULE_2__[\"Scope\"].clone(parentScope);\n this.getStack().push({\n client: this.getClient(),\n scope: scope\n });\n return scope;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.popScope = function () {\n return this.getStack().pop() !== undefined;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.withScope = function (callback) {\n var scope = this.pushScope();\n\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.getClient = function () {\n return this.getStackTop().client;\n };\n /** Returns the scope of the top stack. */\n\n\n Hub.prototype.getScope = function () {\n return this.getStackTop().scope;\n };\n /** Returns the scope stack for domains or the process. */\n\n\n Hub.prototype.getStack = function () {\n return this._stack;\n };\n /** Returns the topmost scope layer in the order domain > local > process. */\n\n\n Hub.prototype.getStackTop = function () {\n return this._stack[this._stack.length - 1];\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureException = function (exception, hint) {\n var eventId = this._lastEventId = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"uuid4\"])();\n var finalHint = hint; // If there's no explicit hint provided, mimick the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n\n if (!hint) {\n var syntheticException = void 0;\n\n try {\n throw new Error('Sentry syntheticException');\n } catch (exception) {\n syntheticException = exception;\n }\n\n finalHint = {\n originalException: exception,\n syntheticException: syntheticException\n };\n }\n\n this._invokeClient('captureException', exception, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, finalHint, {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureMessage = function (message, level, hint) {\n var eventId = this._lastEventId = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"uuid4\"])();\n var finalHint = hint; // If there's no explicit hint provided, mimick the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n\n if (!hint) {\n var syntheticException = void 0;\n\n try {\n throw new Error(message);\n } catch (exception) {\n syntheticException = exception;\n }\n\n finalHint = {\n originalException: message,\n syntheticException: syntheticException\n };\n }\n\n this._invokeClient('captureMessage', message, level, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, finalHint, {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureEvent = function (event, hint) {\n var eventId = this._lastEventId = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"uuid4\"])();\n\n this._invokeClient('captureEvent', event, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, hint, {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.lastEventId = function () {\n return this._lastEventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n var top = this.getStackTop();\n\n if (!top.scope || !top.client) {\n return;\n }\n\n var _a = top.client.getOptions && top.client.getOptions() || {},\n _b = _a.beforeBreadcrumb,\n beforeBreadcrumb = _b === void 0 ? null : _b,\n _c = _a.maxBreadcrumbs,\n maxBreadcrumbs = _c === void 0 ? DEFAULT_BREADCRUMBS : _c;\n\n if (maxBreadcrumbs <= 0) {\n return;\n }\n\n var timestamp = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"timestampWithMs\"])();\n\n var mergedBreadcrumb = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({\n timestamp: timestamp\n }, breadcrumb);\n\n var finalBreadcrumb = beforeBreadcrumb ? Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"consoleSandbox\"])(function () {\n return beforeBreadcrumb(mergedBreadcrumb, hint);\n }) : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) {\n return;\n }\n\n top.scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setUser = function (user) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setUser(user);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setTags = function (tags) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setTags(tags);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setExtras = function (extras) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setExtras(extras);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setTag = function (key, value) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setTag(key, value);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setExtra = function (key, extra) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setExtra(key, extra);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setContext = function (name, context) {\n var top = this.getStackTop();\n\n if (!top.scope) {\n return;\n }\n\n top.scope.setContext(name, context);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.configureScope = function (callback) {\n var top = this.getStackTop();\n\n if (top.scope && top.client) {\n callback(top.scope);\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.run = function (callback) {\n var oldHub = makeMain(this);\n\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.getIntegration = function (integration) {\n var client = this.getClient();\n\n if (!client) {\n return null;\n }\n\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.startSpan = function (spanOrSpanContext, forceNoChild) {\n if (forceNoChild === void 0) {\n forceNoChild = false;\n }\n\n return this._callExtensionMethod('startSpan', spanOrSpanContext, forceNoChild);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.traceHeaders = function () {\n return this._callExtensionMethod('traceHeaders');\n };\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore\n\n\n Hub.prototype._callExtensionMethod = function (method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var carrier = getMainCarrier();\n var sentry = carrier.__SENTRY__; // tslint:disable-next-line: strict-type-predicates\n\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].warn(\"Extension method \" + method + \" couldn't be found, doing nothing.\");\n };\n\n return Hub;\n}();\n\n\n/** Returns the global shim registry. */\n\nfunction getMainCarrier() {\n var carrier = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined\n };\n return carrier;\n}\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\n\nfunction makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\n\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier(); // If there's no hub, or its an old API, assign a new one\n\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n } // Prefer domains over global if they are there (applicable only to Node environment)\n\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"isNodeEnv\"])()) {\n return getHubFromActiveDomain(registry);\n } // Return hub that lives on a global object\n\n\n return getHubFromCarrier(registry);\n}\n/**\n * Try to read the hub from an active domain, fallback to the registry if one doesnt exist\n * @returns discovered hub\n */\n\nfunction getHubFromActiveDomain(registry) {\n try {\n // We need to use `dynamicRequire` because `require` on it's own will be optimized by webpack.\n // We do not want this to happen, we need to try to `require` the domain node module and fail if we are in browser\n // for example so we do not have to shim it and use `getCurrentHub` universally.\n var domain = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"dynamicRequire\"])(module, 'domain');\n var activeDomain = domain.active; // If there no active domain, just return global hub\n\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n } // If there's no hub on current domain, or its an old API, assign a new one\n\n\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, _scope__WEBPACK_IMPORTED_MODULE_2__[\"Scope\"].clone(registryHubTopStack.scope)));\n } // Return hub that lives on a domain\n\n\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\n\n\nfunction hasHubOnCarrier(carrier) {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n return true;\n }\n\n return false;\n}\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n\n\nfunction getHubFromCarrier(carrier) {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n return carrier.__SENTRY__.hub;\n }\n\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = new Hub();\n return carrier.__SENTRY__.hub;\n}\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n */\n\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) {\n return false;\n }\n\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = hub;\n return true;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/harmony-module.js */ \"../node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL2VzbS9odWIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2h1Yi50cz9kMjQ4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJIaW50LFxuICBDbGllbnQsXG4gIEV2ZW50LFxuICBFdmVudEhpbnQsXG4gIEh1YiBhcyBIdWJJbnRlcmZhY2UsXG4gIEludGVncmF0aW9uLFxuICBJbnRlZ3JhdGlvbkNsYXNzLFxuICBTZXZlcml0eSxcbiAgU3BhbixcbiAgU3BhbkNvbnRleHQsXG4gIFVzZXIsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHtcbiAgY29uc29sZVNhbmRib3gsXG4gIGR5bmFtaWNSZXF1aXJlLFxuICBnZXRHbG9iYWxPYmplY3QsXG4gIGlzTm9kZUVudixcbiAgbG9nZ2VyLFxuICB0aW1lc3RhbXBXaXRoTXMsXG4gIHV1aWQ0LFxufSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgQ2FycmllciwgTGF5ZXIgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcblxuZGVjbGFyZSBtb2R1bGUgJ2RvbWFpbicge1xuICBleHBvcnQgbGV0IGFjdGl2ZTogRG9tYWluO1xuICAvKipcbiAgICogRXh0ZW5zaW9uIGZvciBkb21haW4gaW50ZXJmYWNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIERvbWFpbiB7XG4gICAgX19TRU5UUllfXz86IENhcnJpZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIG9mIHRoaXMgaHViLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3Jlc2VkIHdoZW4gdGhlIGdsb2JhbCBpbnRlcmZhY2VcbiAqIGNoYW5nZXMgYSBhbmQgbmV3IG1ldGhvZHMgYXJlIGludHJvZHVjZWQuXG4gKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgQVBJX1ZFUlNJT04gPSAzO1xuXG4vKipcbiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlblxuICogd2l0aCB7QGxpbmsgT3B0aW9ucy5tYXhCcmVhZGNydW1ic30uXG4gKi9cbmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7XG5cbi8qKlxuICogQWJzb2x1dGUgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIFRoZVxuICogYG1heEJyZWFkY3J1bWJzYCBvcHRpb24gY2Fubm90IGJlIGhpZ2hlciB0aGFuIHRoaXMgdmFsdWUuXG4gKi9cbmNvbnN0IE1BWF9CUkVBRENSVU1CUyA9IDEwMDtcblxuLyoqXG4gKiBAaW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgSHViIGltcGxlbWVudHMgSHViSW50ZXJmYWNlIHtcbiAgLyoqIElzIGEge0BsaW5rIExheWVyfVtdIGNvbnRhaW5pbmcgdGhlIGNsaWVudCBhbmQgc2NvcGUgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhY2s6IExheWVyW10gPSBbXTtcblxuICAvKiogQ29udGFpbnMgdGhlIGxhc3QgZXZlbnQgaWQgb2YgYSBjYXB0dXJlZCBldmVudC4gICovXG4gIHByaXZhdGUgX2xhc3RFdmVudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBodWIsIHdpbGwgcHVzaCBvbmUge0BsaW5rIExheWVyfSBpbnRvIHRoZVxuICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBib3VuZCB0byB0aGUgaHViLlxuICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi5cbiAgICogQHBhcmFtIHZlcnNpb24gbnVtYmVyLCBoaWdoZXIgbnVtYmVyIG1lYW5zIGhpZ2hlciBwcmlvcml0eS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjbGllbnQ/OiBDbGllbnQsIHNjb3BlOiBTY29wZSA9IG5ldyBTY29wZSgpLCBwcml2YXRlIHJlYWRvbmx5IF92ZXJzaW9uOiBudW1iZXIgPSBBUElfVkVSU0lPTikge1xuICAgIHRoaXMuX3N0YWNrLnB1c2goeyBjbGllbnQsIHNjb3BlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBjYWxsIGEgbWV0aG9kIG9uIHRoZSB0b3AgY2xpZW50IGlmIGl0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNhbGwgb24gdGhlIGNsaWVudC5cbiAgICogQHBhcmFtIGFyZ3MgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNsaWVudCBmdW5jdGlvbi5cbiAgICovXG4gIHByaXZhdGUgX2ludm9rZUNsaWVudDxNIGV4dGVuZHMga2V5b2YgQ2xpZW50PihtZXRob2Q6IE0sIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmICh0b3AgJiYgdG9wLmNsaWVudCAmJiB0b3AuY2xpZW50W21ldGhvZF0pIHtcbiAgICAgICh0b3AuY2xpZW50IGFzIGFueSlbbWV0aG9kXSguLi5hcmdzLCB0b3Auc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGlzT2xkZXJUaGFuKHZlcnNpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uIDwgdmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGJpbmRDbGllbnQoY2xpZW50PzogQ2xpZW50KTogdm9pZCB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIHRvcC5jbGllbnQgPSBjbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBwdXNoU2NvcGUoKTogU2NvcGUge1xuICAgIC8vIFdlIHdhbnQgdG8gY2xvbmUgdGhlIGNvbnRlbnQgb2YgcHJldiBzY29wZVxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXRTdGFjaygpO1xuICAgIGNvbnN0IHBhcmVudFNjb3BlID0gc3RhY2subGVuZ3RoID4gMCA/IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdLnNjb3BlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNjb3BlID0gU2NvcGUuY2xvbmUocGFyZW50U2NvcGUpO1xuICAgIHRoaXMuZ2V0U3RhY2soKS5wdXNoKHtcbiAgICAgIGNsaWVudDogdGhpcy5nZXRDbGllbnQoKSxcbiAgICAgIHNjb3BlLFxuICAgIH0pO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHBvcFNjb3BlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKCkucG9wKCkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHdpdGhTY29wZShjYWxsYmFjazogKHNjb3BlOiBTY29wZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wdXNoU2NvcGUoKTtcbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soc2NvcGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2xpZW50PEMgZXh0ZW5kcyBDbGllbnQ+KCk6IEMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuY2xpZW50IGFzIEM7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgc2NvcGUgb2YgdGhlIHRvcCBzdGFjay4gKi9cbiAgcHVibGljIGdldFNjb3BlKCk6IFNjb3BlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNjb3BlIHN0YWNrIGZvciBkb21haW5zIG9yIHRoZSBwcm9jZXNzLiAqL1xuICBwdWJsaWMgZ2V0U3RhY2soKTogTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRvcG1vc3Qgc2NvcGUgbGF5ZXIgaW4gdGhlIG9yZGVyIGRvbWFpbiA+IGxvY2FsID4gcHJvY2Vzcy4gKi9cbiAgcHVibGljIGdldFN0YWNrVG9wKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gdXVpZDQoKSk7XG4gICAgbGV0IGZpbmFsSGludCA9IGhpbnQ7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGV4cGxpY2l0IGhpbnQgcHJvdmlkZWQsIG1pbWljayB0aGUgc2FtZSB0aGluZyB0aGF0IHdvdWxkIGhhcHBlblxuICAgIC8vIGluIHRoZSBtaW5pbWFsIGl0c2VsZiB0byBjcmVhdGUgYSBjb25zaXN0ZW50IGJlaGF2aW9yLlxuICAgIC8vIFdlIGRvbid0IGRvIHRoaXMgaW4gdGhlIGNsaWVudCwgYXMgaXQncyB0aGUgbG93ZXN0IGxldmVsIEFQSSwgYW5kIGRvaW5nIHRoaXMsXG4gICAgLy8gd291bGQgcHJldmVudCB1c2VyIGZyb20gaGF2aW5nIGZ1bGwgY29udHJvbCBvdmVyIGRpcmVjdCBjYWxscy5cbiAgICBpZiAoIWhpbnQpIHtcbiAgICAgIGxldCBzeW50aGV0aWNFeGNlcHRpb246IEVycm9yO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJyk7XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uID0gZXhjZXB0aW9uIGFzIEVycm9yO1xuICAgICAgfVxuICAgICAgZmluYWxIaW50ID0ge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLFxuICAgICAgICBzeW50aGV0aWNFeGNlcHRpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZUNsaWVudCgnY2FwdHVyZUV4Y2VwdGlvbicsIGV4Y2VwdGlvbiwge1xuICAgICAgLi4uZmluYWxIaW50LFxuICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjYXB0dXJlTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGxldmVsPzogU2V2ZXJpdHksIGhpbnQ/OiBFdmVudEhpbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSB1dWlkNCgpKTtcbiAgICBsZXQgZmluYWxIaW50ID0gaGludDtcblxuICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXhwbGljaXQgaGludCBwcm92aWRlZCwgbWltaWNrIHRoZSBzYW1lIHRoaW5nIHRoYXQgd291bGQgaGFwcGVuXG4gICAgLy8gaW4gdGhlIG1pbmltYWwgaXRzZWxmIHRvIGNyZWF0ZSBhIGNvbnNpc3RlbnQgYmVoYXZpb3IuXG4gICAgLy8gV2UgZG9uJ3QgZG8gdGhpcyBpbiB0aGUgY2xpZW50LCBhcyBpdCdzIHRoZSBsb3dlc3QgbGV2ZWwgQVBJLCBhbmQgZG9pbmcgdGhpcyxcbiAgICAvLyB3b3VsZCBwcmV2ZW50IHVzZXIgZnJvbSBoYXZpbmcgZnVsbCBjb250cm9sIG92ZXIgZGlyZWN0IGNhbGxzLlxuICAgIGlmICghaGludCkge1xuICAgICAgbGV0IHN5bnRoZXRpY0V4Y2VwdGlvbjogRXJyb3I7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uID0gZXhjZXB0aW9uIGFzIEVycm9yO1xuICAgICAgfVxuICAgICAgZmluYWxIaW50ID0ge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogbWVzc2FnZSxcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVNZXNzYWdlJywgbWVzc2FnZSwgbGV2ZWwsIHtcbiAgICAgIC4uLmZpbmFsSGludCxcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZUV2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCk6IHN0cmluZyB7XG4gICAgY29uc3QgZXZlbnRJZCA9ICh0aGlzLl9sYXN0RXZlbnRJZCA9IHV1aWQ0KCkpO1xuICAgIHRoaXMuX2ludm9rZUNsaWVudCgnY2FwdHVyZUV2ZW50JywgZXZlbnQsIHtcbiAgICAgIC4uLmhpbnQsXG4gICAgICBldmVudF9pZDogZXZlbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGxhc3RFdmVudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iOiBCcmVhZGNydW1iLCBoaW50PzogQnJlYWRjcnVtYkhpbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG5cbiAgICBpZiAoIXRvcC5zY29wZSB8fCAhdG9wLmNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmVmb3JlQnJlYWRjcnVtYiA9IG51bGwsIG1heEJyZWFkY3J1bWJzID0gREVGQVVMVF9CUkVBRENSVU1CUyB9ID1cbiAgICAgICh0b3AuY2xpZW50LmdldE9wdGlvbnMgJiYgdG9wLmNsaWVudC5nZXRPcHRpb25zKCkpIHx8IHt9O1xuXG4gICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aW1lc3RhbXBXaXRoTXMoKTtcbiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTtcbiAgICBjb25zdCBmaW5hbEJyZWFkY3J1bWIgPSBiZWZvcmVCcmVhZGNydW1iXG4gICAgICA/IChjb25zb2xlU2FuZGJveCgoKSA9PiBiZWZvcmVCcmVhZGNydW1iKG1lcmdlZEJyZWFkY3J1bWIsIGhpbnQpKSBhcyBCcmVhZGNydW1iIHwgbnVsbClcbiAgICAgIDogbWVyZ2VkQnJlYWRjcnVtYjtcblxuICAgIGlmIChmaW5hbEJyZWFkY3J1bWIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b3Auc2NvcGUuYWRkQnJlYWRjcnVtYihmaW5hbEJyZWFkY3J1bWIsIE1hdGgubWluKG1heEJyZWFkY3J1bWJzLCBNQVhfQlJFQURDUlVNQlMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFVzZXIodXNlcjogVXNlciB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKCF0b3Auc2NvcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9wLnNjb3BlLnNldFVzZXIodXNlcik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKCF0b3Auc2NvcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9wLnNjb3BlLnNldFRhZ3ModGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRFeHRyYXMoZXh0cmFzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmICghdG9wLnNjb3BlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvcC5zY29wZS5zZXRFeHRyYXMoZXh0cmFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICBpZiAoIXRvcC5zY29wZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b3Auc2NvcGUuc2V0VGFnKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKCF0b3Auc2NvcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9wLnNjb3BlLnNldEV4dHJhKGtleSwgZXh0cmEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0Q29udGV4dChuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmICghdG9wLnNjb3BlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvcC5zY29wZS5zZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uZmlndXJlU2NvcGUoY2FsbGJhY2s6IChzY29wZTogU2NvcGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKHRvcC5zY29wZSAmJiB0b3AuY2xpZW50KSB7XG4gICAgICBjYWxsYmFjayh0b3Auc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJ1bihjYWxsYmFjazogKGh1YjogSHViKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkSHViID0gbWFrZU1haW4odGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBtYWtlTWFpbihvbGRIdWIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldEludGVncmF0aW9uPFQgZXh0ZW5kcyBJbnRlZ3JhdGlvbj4oaW50ZWdyYXRpb246IEludGVncmF0aW9uQ2xhc3M8VD4pOiBUIHwgbnVsbCB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTtcbiAgICBpZiAoIWNsaWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldEludGVncmF0aW9uKGludGVncmF0aW9uKTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgcmV0cmlldmUgaW50ZWdyYXRpb24gJHtpbnRlZ3JhdGlvbi5pZH0gZnJvbSB0aGUgY3VycmVudCBIdWJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXJ0U3BhbihzcGFuT3JTcGFuQ29udGV4dD86IFNwYW4gfCBTcGFuQ29udGV4dCwgZm9yY2VOb0NoaWxkOiBib29sZWFuID0gZmFsc2UpOiBTcGFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZDxTcGFuPignc3RhcnRTcGFuJywgc3Bhbk9yU3BhbkNvbnRleHQsIGZvcmNlTm9DaGlsZCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0cmFjZUhlYWRlcnMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2Q8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oJ3RyYWNlSGVhZGVycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIGdsb2JhbCBleHRlbnNpb24gbWV0aG9kIGFuZCBiaW5kaW5nIGN1cnJlbnQgaW5zdGFuY2UgdG8gdGhlIGZ1bmN0aW9uIGNhbGxcbiAgICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHJpdmF0ZSBfY2FsbEV4dGVuc2lvbk1ldGhvZDxUPihtZXRob2Q6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgICBjb25zdCBzZW50cnkgPSBjYXJyaWVyLl9fU0VOVFJZX187XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gICAgaWYgKHNlbnRyeSAmJiBzZW50cnkuZXh0ZW5zaW9ucyAmJiB0eXBlb2Ygc2VudHJ5LmV4dGVuc2lvbnNbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGxvZ2dlci53YXJuKGBFeHRlbnNpb24gbWV0aG9kICR7bWV0aG9kfSBjb3VsZG4ndCBiZSBmb3VuZCwgZG9pbmcgbm90aGluZy5gKTtcbiAgfVxufVxuXG4vKiogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpbkNhcnJpZXIoKTogQ2FycmllciB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgY2Fycmllci5fX1NFTlRSWV9fID0gY2Fycmllci5fX1NFTlRSWV9fIHx8IHtcbiAgICBleHRlbnNpb25zOiB7fSxcbiAgICBodWI6IHVuZGVmaW5lZCxcbiAgfTtcbiAgcmV0dXJuIGNhcnJpZXI7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBvbGQgcmVwbGFjZWQgaHViXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTWFpbihodWI6IEh1Yik6IEh1YiB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xuICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIGh1Yik7XG4gIHJldHVybiBvbGRIdWI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuXG4gKlxuICogSWYgYSBodWIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSBnbG9iYWwgY2FycmllciBidXQgdGhpcyBtb2R1bGVcbiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi5cbiAqIE90aGVyd2lzZSwgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGh1YiB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudEh1YigpOiBIdWIge1xuICAvLyBHZXQgbWFpbiBjYXJyaWVyIChnbG9iYWwgZm9yIGV2ZXJ5IGVudmlyb25tZW50KVxuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG5cbiAgLy8gSWYgdGhlcmUncyBubyBodWIsIG9yIGl0cyBhbiBvbGQgQVBJLCBhc3NpZ24gYSBuZXcgb25lXG4gIGlmICghaGFzSHViT25DYXJyaWVyKHJlZ2lzdHJ5KSB8fCBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSkuaXNPbGRlclRoYW4oQVBJX1ZFUlNJT04pKSB7XG4gICAgc2V0SHViT25DYXJyaWVyKHJlZ2lzdHJ5LCBuZXcgSHViKCkpO1xuICB9XG5cbiAgLy8gUHJlZmVyIGRvbWFpbnMgb3ZlciBnbG9iYWwgaWYgdGhleSBhcmUgdGhlcmUgKGFwcGxpY2FibGUgb25seSB0byBOb2RlIGVudmlyb25tZW50KVxuICBpZiAoaXNOb2RlRW52KCkpIHtcbiAgICByZXR1cm4gZ2V0SHViRnJvbUFjdGl2ZURvbWFpbihyZWdpc3RyeSk7XG4gIH1cbiAgLy8gUmV0dXJuIGh1YiB0aGF0IGxpdmVzIG9uIGEgZ2xvYmFsIG9iamVjdFxuICByZXR1cm4gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHRoZSBodWIgZnJvbSBhbiBhY3RpdmUgZG9tYWluLCBmYWxsYmFjayB0byB0aGUgcmVnaXN0cnkgaWYgb25lIGRvZXNudCBleGlzdFxuICogQHJldHVybnMgZGlzY292ZXJlZCBodWJcbiAqL1xuZnVuY3Rpb24gZ2V0SHViRnJvbUFjdGl2ZURvbWFpbihyZWdpc3RyeTogQ2Fycmllcik6IEh1YiB7XG4gIHRyeSB7XG4gICAgLy8gV2UgbmVlZCB0byB1c2UgYGR5bmFtaWNSZXF1aXJlYCBiZWNhdXNlIGByZXF1aXJlYCBvbiBpdCdzIG93biB3aWxsIGJlIG9wdGltaXplZCBieSB3ZWJwYWNrLlxuICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoaXMgdG8gaGFwcGVuLCB3ZSBuZWVkIHRvIHRyeSB0byBgcmVxdWlyZWAgdGhlIGRvbWFpbiBub2RlIG1vZHVsZSBhbmQgZmFpbCBpZiB3ZSBhcmUgaW4gYnJvd3NlclxuICAgIC8vIGZvciBleGFtcGxlIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHNoaW0gaXQgYW5kIHVzZSBgZ2V0Q3VycmVudEh1YmAgdW5pdmVyc2FsbHkuXG4gICAgY29uc3QgZG9tYWluID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnZG9tYWluJyk7XG4gICAgY29uc3QgYWN0aXZlRG9tYWluID0gZG9tYWluLmFjdGl2ZTtcblxuICAgIC8vIElmIHRoZXJlIG5vIGFjdGl2ZSBkb21haW4sIGp1c3QgcmV0dXJuIGdsb2JhbCBodWJcbiAgICBpZiAoIWFjdGl2ZURvbWFpbikge1xuICAgICAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGh1YiBvbiBjdXJyZW50IGRvbWFpbiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmVcbiAgICBpZiAoIWhhc0h1Yk9uQ2FycmllcihhY3RpdmVEb21haW4pIHx8IGdldEh1YkZyb21DYXJyaWVyKGFjdGl2ZURvbWFpbikuaXNPbGRlclRoYW4oQVBJX1ZFUlNJT04pKSB7XG4gICAgICBjb25zdCByZWdpc3RyeUh1YlRvcFN0YWNrID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmdldFN0YWNrVG9wKCk7XG4gICAgICBzZXRIdWJPbkNhcnJpZXIoYWN0aXZlRG9tYWluLCBuZXcgSHViKHJlZ2lzdHJ5SHViVG9wU3RhY2suY2xpZW50LCBTY29wZS5jbG9uZShyZWdpc3RyeUh1YlRvcFN0YWNrLnNjb3BlKSkpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGRvbWFpblxuICAgIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihhY3RpdmVEb21haW4pO1xuICB9IGNhdGNoIChfT28pIHtcbiAgICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0XG4gICAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3RcbiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdFxuICovXG5mdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcjogQ2Fycmllcik6IGJvb2xlYW4ge1xuICBpZiAoY2FycmllciAmJiBjYXJyaWVyLl9fU0VOVFJZX18gJiYgY2Fycmllci5fX1NFTlRSWV9fLmh1Yikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHtAbGluayBIdWJ9IGFuZCBhZGQgdG8gdGhlIHBhc3NlZCBvYmplY3Qgb25cbiAqIF9fU0VOVFJZX18uaHViLlxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyOiBDYXJyaWVyKTogSHViIHtcbiAgaWYgKGNhcnJpZXIgJiYgY2Fycmllci5fX1NFTlRSWV9fICYmIGNhcnJpZXIuX19TRU5UUllfXy5odWIpIHtcbiAgICByZXR1cm4gY2Fycmllci5fX1NFTlRSWV9fLmh1YjtcbiAgfVxuICBjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5odWIgPSBuZXcgSHViKCk7XG4gIHJldHVybiBjYXJyaWVyLl9fU0VOVFJZX18uaHViO1xufVxuXG4vKipcbiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlXG4gKiBAcGFyYW0gY2FycmllciBvYmplY3RcbiAqIEBwYXJhbSBodWIgSHViXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllcjogQ2FycmllciwgaHViOiBIdWIpOiBib29sZWFuIHtcbiAgaWYgKCFjYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNhcnJpZXIuX19TRU5UUllfXyA9IGNhcnJpZXIuX19TRU5UUllfXyB8fCB7fTtcbiAgY2Fycmllci5fX1NFTlRSWV9fLmh1YiA9IGh1YjtcbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQWNBO0FBV0E7QUFZQTs7Ozs7Ozs7O0FBUUE7QUFFQTs7Ozs7QUFJQTtBQUVBOzs7OztBQUlBO0FBRUE7Ozs7QUFHQTtBQUFBO0FBQUE7QUFPQTs7Ozs7Ozs7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQWRBO0FBQ0E7QUFBQTtBQUNBO0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BOzs7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFLQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQVRBO0FBWUE7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBU0E7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBREE7QUFDQTtBQUVBO0FBekJBO0FBNEJBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQURBO0FBQ0E7QUFFQTtBQXpCQTtBQTRCQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBREE7QUFDQTtBQUVBO0FBTkE7QUFTQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBMkJBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVFBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBU0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFWQTtBQWFBOzs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBSUE7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBUUE7QUF6VkE7QUFDQTs7QUEwVkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQVhBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFFQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVRBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFDQTtBQWlCQTtBQW5CQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/hub/esm/hub.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/hub/esm/index.js": -/*!************************************************!*\ - !*** ../node_modules/@sentry/hub/esm/index.js ***! - \************************************************/ -/*! exports provided: addGlobalEventProcessor, Scope, getCurrentHub, getHubFromCarrier, getMainCarrier, Hub, makeMain, setHubOnCarrier */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _scope__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scope */ \"../node_modules/@sentry/hub/esm/scope.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addGlobalEventProcessor\", function() { return _scope__WEBPACK_IMPORTED_MODULE_0__[\"addGlobalEventProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Scope\", function() { return _scope__WEBPACK_IMPORTED_MODULE_0__[\"Scope\"]; });\n\n/* harmony import */ var _hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hub */ \"../node_modules/@sentry/hub/esm/hub.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getCurrentHub\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getHubFromCarrier\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"getHubFromCarrier\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getMainCarrier\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"getMainCarrier\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Hub\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"Hub\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"makeMain\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"makeMain\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"setHubOnCarrier\", function() { return _hub__WEBPACK_IMPORTED_MODULE_1__[\"setHubOnCarrier\"]; });\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL2VzbS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDYXJyaWVyLCBMYXllciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbmV4cG9ydCB7IGdldEN1cnJlbnRIdWIsIGdldEh1YkZyb21DYXJyaWVyLCBnZXRNYWluQ2FycmllciwgSHViLCBtYWtlTWFpbiwgc2V0SHViT25DYXJyaWVyIH0gZnJvbSAnLi9odWInO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/hub/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/hub/esm/scope.js": -/*!************************************************!*\ - !*** ../node_modules/@sentry/hub/esm/scope.js ***! - \************************************************/ -/*! exports provided: Scope, addGlobalEventProcessor */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Scope\", function() { return Scope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addGlobalEventProcessor\", function() { return addGlobalEventProcessor; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/utils */ \"../node_modules/@sentry/utils/esm/index.js\");\n\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope() {\n /** Flag if notifiying is happening. */\n this._notifyingListeners = false;\n /** Callback for client to receive scope changes. */\n\n this._scopeListeners = [];\n /** Callback list that will be called after {@link applyToEvent}. */\n\n this._eventProcessors = [];\n /** Array of breadcrumbs. */\n\n this._breadcrumbs = [];\n /** User */\n\n this._user = {};\n /** Tags */\n\n this._tags = {};\n /** Extra */\n\n this._extra = {};\n /** Contexts */\n\n this._context = {};\n }\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n\n\n Scope.prototype.addScopeListener = function (callback) {\n this._scopeListeners.push(callback);\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.addEventProcessor = function (callback) {\n this._eventProcessors.push(callback);\n\n return this;\n };\n /**\n * This will be called on every set call.\n */\n\n\n Scope.prototype._notifyScopeListeners = function () {\n var _this = this;\n\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n setTimeout(function () {\n _this._scopeListeners.forEach(function (callback) {\n callback(_this);\n });\n\n _this._notifyingListeners = false;\n });\n }\n };\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n\n\n Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) {\n var _this = this;\n\n if (index === void 0) {\n index = 0;\n }\n\n return new _sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"](function (resolve, reject) {\n var processor = processors[index]; // tslint:disable-next-line:strict-type-predicates\n\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n var result = processor(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, event), hint);\n\n if (Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"isThenable\"])(result)) {\n result.then(function (_final) {\n return _this._notifyEventProcessors(processors, _final, hint, index + 1).then(resolve);\n }).then(null, reject);\n } else {\n _this._notifyEventProcessors(processors, result, hint, index + 1).then(resolve).then(null, reject);\n }\n }\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setUser = function (user) {\n this._user = user || {};\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTags = function (tags) {\n this._tags = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._tags, tags);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTag = function (key, value) {\n var _a;\n\n this._tags = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._tags, (_a = {}, _a[key] = value, _a));\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setExtras = function (extras) {\n this._extra = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._extra, extras);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setExtra = function (key, extra) {\n var _a;\n\n this._extra = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._extra, (_a = {}, _a[key] = extra, _a));\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setFingerprint = function (fingerprint) {\n this._fingerprint = fingerprint;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setLevel = function (level) {\n this._level = level;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTransaction = function (transaction) {\n this._transaction = transaction;\n\n if (this._span) {\n this._span.transaction = transaction;\n }\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setContext = function (key, context) {\n var _a;\n\n this._context = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._context, (_a = {}, _a[key] = context, _a));\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setSpan = function (span) {\n this._span = span;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * Internal getter for Span, used in Hub.\n * @hidden\n */\n\n\n Scope.prototype.getSpan = function () {\n return this._span;\n };\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n\n\n Scope.clone = function (scope) {\n var newScope = new Scope();\n\n if (scope) {\n newScope._breadcrumbs = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](scope._breadcrumbs);\n newScope._tags = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, scope._tags);\n newScope._extra = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, scope._extra);\n newScope._context = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, scope._context);\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._transaction = scope._transaction;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](scope._eventProcessors);\n }\n\n return newScope;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.clear = function () {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._context = {};\n this._level = undefined;\n this._transaction = undefined;\n this._fingerprint = undefined;\n this._span = undefined;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) {\n var mergedBreadcrumb = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({\n timestamp: Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"timestampWithMs\"])()\n }, breadcrumb);\n\n this._breadcrumbs = maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0 ? tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](this._breadcrumbs, [mergedBreadcrumb]).slice(-maxBreadcrumbs) : tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](this._breadcrumbs, [mergedBreadcrumb]);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.clearBreadcrumbs = function () {\n this._breadcrumbs = [];\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n\n\n Scope.prototype._applyFingerprint = function (event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : []; // If we have something on the scope, then merge it with event\n\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n } // If we have no data at all, remove empty array default\n\n\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n };\n /**\n * Applies the current context and fingerprint to the event.\n * Note that breadcrumbs will be added by the client.\n * Also if the event has already breadcrumbs on it, we do not merge them.\n * @param event Event\n * @param hint May contain additional informartion about the original exception.\n * @hidden\n */\n\n\n Scope.prototype.applyToEvent = function (event, hint) {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._extra, event.extra);\n }\n\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._tags, event.tags);\n }\n\n if (this._user && Object.keys(this._user).length) {\n event.user = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._user, event.user);\n }\n\n if (this._context && Object.keys(this._context).length) {\n event.contexts = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, this._context, event.contexts);\n }\n\n if (this._level) {\n event.level = this._level;\n }\n\n if (this._transaction) {\n event.transaction = this._transaction;\n }\n\n if (this._span) {\n event.contexts = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({\n trace: this._span.getTraceContext()\n }, event.contexts);\n }\n\n this._applyFingerprint(event);\n\n event.breadcrumbs = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](event.breadcrumbs || [], this._breadcrumbs);\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n return this._notifyEventProcessors(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](getGlobalEventProcessors(), this._eventProcessors), event, hint);\n };\n\n return Scope;\n}();\n\n\n/**\n * Retruns the global event processors.\n */\n\nfunction getGlobalEventProcessors() {\n var global = Object(_sentry_utils__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])();\n global.__SENTRY__ = global.__SENTRY__ || {};\n global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n return global.__SENTRY__.globalEventProcessors;\n}\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\n\n\nfunction addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL2VzbS9zY29wZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvc2NvcGUudHM/MTNiZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCcmVhZGNydW1iLFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBFdmVudFByb2Nlc3NvcixcbiAgU2NvcGUgYXMgU2NvcGVJbnRlcmZhY2UsXG4gIFNldmVyaXR5LFxuICBTcGFuLFxuICBVc2VyLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgaXNUaGVuYWJsZSwgU3luY1Byb21pc2UsIHRpbWVzdGFtcFdpdGhNcyB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKipcbiAqIEhvbGRzIGFkZGl0aW9uYWwgZXZlbnQgaW5mb3JtYXRpb24uIHtAbGluayBTY29wZS5hcHBseVRvRXZlbnR9IHdpbGwgYmVcbiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY29wZSBpbXBsZW1lbnRzIFNjb3BlSW50ZXJmYWNlIHtcbiAgLyoqIEZsYWcgaWYgbm90aWZpeWluZyBpcyBoYXBwZW5pbmcuICovXG4gIHByb3RlY3RlZCBfbm90aWZ5aW5nTGlzdGVuZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIENhbGxiYWNrIGZvciBjbGllbnQgdG8gcmVjZWl2ZSBzY29wZSBjaGFuZ2VzLiAqL1xuICBwcm90ZWN0ZWQgX3Njb3BlTGlzdGVuZXJzOiBBcnJheTwoc2NvcGU6IFNjb3BlKSA9PiB2b2lkPiA9IFtdO1xuXG4gIC8qKiBDYWxsYmFjayBsaXN0IHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0uICovXG4gIHByb3RlY3RlZCBfZXZlbnRQcm9jZXNzb3JzOiBFdmVudFByb2Nlc3NvcltdID0gW107XG5cbiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqL1xuICBwcm90ZWN0ZWQgX2JyZWFkY3J1bWJzOiBCcmVhZGNydW1iW10gPSBbXTtcblxuICAvKiogVXNlciAqL1xuICBwcm90ZWN0ZWQgX3VzZXI6IFVzZXIgPSB7fTtcblxuICAvKiogVGFncyAqL1xuICBwcm90ZWN0ZWQgX3RhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAvKiogRXh0cmEgKi9cbiAgcHJvdGVjdGVkIF9leHRyYTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8qKiBDb250ZXh0cyAqL1xuICBwcm90ZWN0ZWQgX2NvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvKiogRmluZ2VycHJpbnQgKi9cbiAgcHJvdGVjdGVkIF9maW5nZXJwcmludD86IHN0cmluZ1tdO1xuXG4gIC8qKiBTZXZlcml0eSAqL1xuICBwcm90ZWN0ZWQgX2xldmVsPzogU2V2ZXJpdHk7XG5cbiAgLyoqIFRyYW5zYWN0aW9uICovXG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqIFNwYW4gKi9cbiAgcHJvdGVjdGVkIF9zcGFuPzogU3BhbjtcblxuICAvKipcbiAgICogQWRkIGludGVybmFsIG9uIGNoYW5nZSBsaXN0ZW5lci4gVXNlZCBmb3Igc3ViIFNES3MgdGhhdCBuZWVkIHRvIHN0b3JlIHRoZSBzY29wZS5cbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIGFkZFNjb3BlTGlzdGVuZXIoY2FsbGJhY2s6IChzY29wZTogU2NvcGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zY29wZUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFkZEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrOiBFdmVudFByb2Nlc3Nvcik6IHRoaXMge1xuICAgIHRoaXMuX2V2ZW50UHJvY2Vzc29ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHNldCBjYWxsLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9ub3RpZnlTY29wZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX25vdGlmeWluZ0xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zY29wZUxpc3RlbmVycy5mb3JFYWNoKGNhbGxiYWNrID0+IHtcbiAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0gaXMgZmluaXNoZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhcbiAgICBwcm9jZXNzb3JzOiBFdmVudFByb2Nlc3NvcltdLFxuICAgIGV2ZW50OiBFdmVudCB8IG51bGwsXG4gICAgaGludD86IEV2ZW50SGludCxcbiAgICBpbmRleDogbnVtYmVyID0gMCxcbiAgKTogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxFdmVudCB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgICAgIGlmIChldmVudCA9PT0gbnVsbCB8fCB0eXBlb2YgcHJvY2Vzc29yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc29yKHsgLi4uZXZlbnQgfSwgaGludCkgYXMgRXZlbnQgfCBudWxsO1xuICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgKHJlc3VsdCBhcyBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+KVxuICAgICAgICAgICAgLnRoZW4oZmluYWwgPT4gdGhpcy5fbm90aWZ5RXZlbnRQcm9jZXNzb3JzKHByb2Nlc3NvcnMsIGZpbmFsLCBoaW50LCBpbmRleCArIDEpLnRoZW4ocmVzb2x2ZSkpXG4gICAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSlcbiAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRVc2VyKHVzZXI6IFVzZXIgfCBudWxsKTogdGhpcyB7XG4gICAgdGhpcy5fdXNlciA9IHVzZXIgfHwge307XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHRoaXMge1xuICAgIHRoaXMuX3RhZ3MgPSB7XG4gICAgICAuLi50aGlzLl90YWdzLFxuICAgICAgLi4udGFncyxcbiAgICB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmFzKGV4dHJhczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHRoaXMge1xuICAgIHRoaXMuX2V4dHJhID0ge1xuICAgICAgLi4udGhpcy5fZXh0cmEsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBhbnkpOiB0aGlzIHtcbiAgICB0aGlzLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIFtrZXldOiBleHRyYSB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludDogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLl9maW5nZXJwcmludCA9IGZpbmdlcnByaW50O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRMZXZlbChsZXZlbDogU2V2ZXJpdHkpOiB0aGlzIHtcbiAgICB0aGlzLl9sZXZlbCA9IGxldmVsO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gICAgaWYgKHRoaXMuX3NwYW4pIHtcbiAgICAgICh0aGlzLl9zcGFuIGFzIGFueSkudHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldENvbnRleHQoa2V5OiBzdHJpbmcsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsKTogdGhpcyB7XG4gICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgW2tleV06IGNvbnRleHQgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0U3BhbihzcGFuPzogU3Bhbik6IHRoaXMge1xuICAgIHRoaXMuX3NwYW4gPSBzcGFuO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgZ2V0dGVyIGZvciBTcGFuLCB1c2VkIGluIEh1Yi5cbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIGdldFNwYW4oKTogU3BhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NwYW47XG4gIH1cblxuICAvKipcbiAgICogSW5oZXJpdCB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBAcGFyYW0gc2NvcGUgdG8gY2xvbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsb25lKHNjb3BlPzogU2NvcGUpOiBTY29wZSB7XG4gICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi5zY29wZS5fYnJlYWRjcnVtYnNdO1xuICAgICAgbmV3U2NvcGUuX3RhZ3MgPSB7IC4uLnNjb3BlLl90YWdzIH07XG4gICAgICBuZXdTY29wZS5fZXh0cmEgPSB7IC4uLnNjb3BlLl9leHRyYSB9O1xuICAgICAgbmV3U2NvcGUuX2NvbnRleHQgPSB7IC4uLnNjb3BlLl9jb250ZXh0IH07XG4gICAgICBuZXdTY29wZS5fdXNlciA9IHNjb3BlLl91c2VyO1xuICAgICAgbmV3U2NvcGUuX2xldmVsID0gc2NvcGUuX2xldmVsO1xuICAgICAgbmV3U2NvcGUuX3NwYW4gPSBzY29wZS5fc3BhbjtcbiAgICAgIG5ld1Njb3BlLl90cmFuc2FjdGlvbiA9IHNjb3BlLl90cmFuc2FjdGlvbjtcbiAgICAgIG5ld1Njb3BlLl9maW5nZXJwcmludCA9IHNjb3BlLl9maW5nZXJwcmludDtcbiAgICAgIG5ld1Njb3BlLl9ldmVudFByb2Nlc3NvcnMgPSBbLi4uc2NvcGUuX2V2ZW50UHJvY2Vzc29yc107XG4gICAgfVxuICAgIHJldHVybiBuZXdTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsZWFyKCk6IHRoaXMge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fdXNlciA9IHt9O1xuICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgICB0aGlzLl9sZXZlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zcGFuID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWIsIG1heEJyZWFkY3J1bWJzPzogbnVtYmVyKTogdGhpcyB7XG4gICAgY29uc3QgbWVyZ2VkQnJlYWRjcnVtYiA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wV2l0aE1zKCksXG4gICAgICAuLi5icmVhZGNydW1iLFxuICAgIH07XG5cbiAgICB0aGlzLl9icmVhZGNydW1icyA9XG4gICAgICBtYXhCcmVhZGNydW1icyAhPT0gdW5kZWZpbmVkICYmIG1heEJyZWFkY3J1bWJzID49IDBcbiAgICAgICAgPyBbLi4udGhpcy5fYnJlYWRjcnVtYnMsIG1lcmdlZEJyZWFkY3J1bWJdLnNsaWNlKC1tYXhCcmVhZGNydW1icylcbiAgICAgICAgOiBbLi4udGhpcy5fYnJlYWRjcnVtYnMsIG1lcmdlZEJyZWFkY3J1bWJdO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjbGVhckJyZWFkY3J1bWJzKCk6IHRoaXMge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGZpbmdlcnByaW50IGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBpZiB0aGVyZSdzIG9uZSxcbiAgICogdXNlcyBtZXNzYWdlIGlmIHRoZXJlJ3Mgb25lIGluc3RlYWQgb3IgZ2V0IHJpZCBvZiBlbXB0eSBmaW5nZXJwcmludFxuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlGaW5nZXJwcmludChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2VcbiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50XG4gICAgICA/IEFycmF5LmlzQXJyYXkoZXZlbnQuZmluZ2VycHJpbnQpXG4gICAgICAgID8gZXZlbnQuZmluZ2VycHJpbnRcbiAgICAgICAgOiBbZXZlbnQuZmluZ2VycHJpbnRdXG4gICAgICA6IFtdO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBzb21ldGhpbmcgb24gdGhlIHNjb3BlLCB0aGVuIG1lcmdlIGl0IHdpdGggZXZlbnRcbiAgICBpZiAodGhpcy5fZmluZ2VycHJpbnQpIHtcbiAgICAgIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnQuY29uY2F0KHRoaXMuX2ZpbmdlcnByaW50KTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdFxuICAgIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZmluZ2VycHJpbnQgdG8gdGhlIGV2ZW50LlxuICAgKiBOb3RlIHRoYXQgYnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCBieSB0aGUgY2xpZW50LlxuICAgKiBBbHNvIGlmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBicmVhZGNydW1icyBvbiBpdCwgd2UgZG8gbm90IG1lcmdlIHRoZW0uXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWFydGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlUb0V2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLl9leHRyYSAmJiBPYmplY3Qua2V5cyh0aGlzLl9leHRyYSkubGVuZ3RoKSB7XG4gICAgICBldmVudC5leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIC4uLmV2ZW50LmV4dHJhIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl90YWdzICYmIE9iamVjdC5rZXlzKHRoaXMuX3RhZ3MpLmxlbmd0aCkge1xuICAgICAgZXZlbnQudGFncyA9IHsgLi4udGhpcy5fdGFncywgLi4uZXZlbnQudGFncyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fdXNlciAmJiBPYmplY3Qua2V5cyh0aGlzLl91c2VyKS5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LnVzZXIgPSB7IC4uLnRoaXMuX3VzZXIsIC4uLmV2ZW50LnVzZXIgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbnRleHQgJiYgT2JqZWN0LmtleXModGhpcy5fY29udGV4dCkubGVuZ3RoKSB7XG4gICAgICBldmVudC5jb250ZXh0cyA9IHsgLi4udGhpcy5fY29udGV4dCwgLi4uZXZlbnQuY29udGV4dHMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xldmVsKSB7XG4gICAgICBldmVudC5sZXZlbCA9IHRoaXMuX2xldmVsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gdGhpcy5fdHJhbnNhY3Rpb247XG4gICAgfVxuICAgIGlmICh0aGlzLl9zcGFuKSB7XG4gICAgICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHRoaXMuX3NwYW4uZ2V0VHJhY2VDb250ZXh0KCksIC4uLmV2ZW50LmNvbnRleHRzIH07XG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlGaW5nZXJwcmludChldmVudCk7XG5cbiAgICBldmVudC5icmVhZGNydW1icyA9IFsuLi4oZXZlbnQuYnJlYWRjcnVtYnMgfHwgW10pLCAuLi50aGlzLl9icmVhZGNydW1ic107XG4gICAgZXZlbnQuYnJlYWRjcnVtYnMgPSBldmVudC5icmVhZGNydW1icy5sZW5ndGggPiAwID8gZXZlbnQuYnJlYWRjcnVtYnMgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fbm90aWZ5RXZlbnRQcm9jZXNzb3JzKFsuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzXSwgZXZlbnQsIGhpbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0cnVucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpOiBFdmVudFByb2Nlc3NvcltdIHtcbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdyB8IE5vZGVKUy5HbG9iYWw+KCk7XG4gIGdsb2JhbC5fX1NFTlRSWV9fID0gZ2xvYmFsLl9fU0VOVFJZX18gfHwge307XG4gIGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycyA9IGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycyB8fCBbXTtcbiAgcmV0dXJuIGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycztcbn1cblxuLyoqXG4gKiBBZGQgYSBFdmVudFByb2Nlc3NvciB0byBiZSBrZXB0IGdsb2JhbGx5LlxuICogQHBhcmFtIGNhbGxiYWNrIEV2ZW50UHJvY2Vzc29yIHRvIGFkZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKTogdm9pZCB7XG4gIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpLnB1c2goY2FsbGJhY2spO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFVQTtBQUVBOzs7OztBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQWtUQTtBQXBTQTs7Ozs7O0FBSUE7QUFDQTtBQURBO0FBSUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUtBOzs7OztBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFKQTtBQU1BO0FBVEE7QUFZQTs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFHQTtBQUNBO0FBaEJBO0FBTkE7QUEwQkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFNQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFOQTtBQVNBOzs7OztBQUdBOzs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFNQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFOQTtBQVNBOzs7OztBQUdBOzs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFNQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQU1BOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUhBO0FBTUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFOQTtBQVNBOzs7OztBQUdBOzs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFNQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQU1BOzs7Ozs7QUFJQTtBQUNBO0FBREE7QUFJQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWRBO0FBaUJBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFYQTtBQWNBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBWEE7QUFjQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQU1BOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFWQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFoQkE7QUFtQkE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUE1QkE7QUFDQTtBQTZCQTtBQXpVQTtBQUNBOztBQTBVQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/hub/esm/scope.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/minimal/esm/index.js": -/*!****************************************************!*\ - !*** ../node_modules/@sentry/minimal/esm/index.js ***! - \****************************************************/ -/*! exports provided: captureException, captureMessage, captureEvent, configureScope, addBreadcrumb, setContext, setExtras, setTags, setExtra, setTag, setUser, withScope, _callOnClient */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"captureException\", function() { return captureException; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"captureMessage\", function() { return captureMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"captureEvent\", function() { return captureEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"configureScope\", function() { return configureScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addBreadcrumb\", function() { return addBreadcrumb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setContext\", function() { return setContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setExtras\", function() { return setExtras; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setTags\", function() { return setTags; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setExtra\", function() { return setExtra; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setTag\", function() { return setTag; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setUser\", function() { return setUser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withScope\", function() { return withScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_callOnClient\", function() { return _callOnClient; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/hub */ \"../node_modules/@sentry/hub/esm/index.js\");\n\n\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\n\nfunction callOnHub(method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var hub = Object(_sentry_hub__WEBPACK_IMPORTED_MODULE_1__[\"getCurrentHub\"])();\n\n if (hub && hub[method]) {\n // tslint:disable-next-line:no-unsafe-any\n return hub[method].apply(hub, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](args));\n }\n\n throw new Error(\"No hub defined or \" + method + \" was not found on the hub, please open a bug report.\");\n}\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\n\n\nfunction captureException(exception) {\n var syntheticException;\n\n try {\n throw new Error('Sentry syntheticException');\n } catch (exception) {\n syntheticException = exception;\n }\n\n return callOnHub('captureException', exception, {\n originalException: exception,\n syntheticException: syntheticException\n });\n}\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param level Define the level of the message.\n * @returns The generated eventId.\n */\n\nfunction captureMessage(message, level) {\n var syntheticException;\n\n try {\n throw new Error(message);\n } catch (exception) {\n syntheticException = exception;\n }\n\n return callOnHub('captureMessage', message, level, {\n originalException: message,\n syntheticException: syntheticException\n });\n}\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\n\nfunction captureEvent(event) {\n return callOnHub('captureEvent', event);\n}\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\n\nfunction configureScope(callback) {\n callOnHub('configureScope', callback);\n}\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n\nfunction addBreadcrumb(breadcrumb) {\n callOnHub('addBreadcrumb', breadcrumb);\n}\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normailzed.\n */\n\nfunction setContext(name, context) {\n callOnHub('setContext', name, context);\n}\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n\nfunction setExtras(extras) {\n callOnHub('setExtras', extras);\n}\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n\nfunction setTags(tags) {\n callOnHub('setTags', tags);\n}\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normailzed.\n */\n\nfunction setExtra(key, extra) {\n callOnHub('setExtra', key, extra);\n}\n/**\n * Set key:value that will be sent as tags data with the event.\n * @param key String key of tag\n * @param value String value of tag\n */\n\nfunction setTag(key, value) {\n callOnHub('setTag', key, value);\n}\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n\nfunction setUser(user) {\n callOnHub('setUser', user);\n}\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\n\nfunction withScope(callback) {\n callOnHub('withScope', callback);\n}\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n * @hidden\n */\n\nfunction _callOnClient(method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n callOnHub.apply(void 0, tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spread\"](['_invokeClient', method], args));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbWluaW1hbC9lc20vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgSHViLCBTY29wZSB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEJyZWFkY3J1bWIsIEV2ZW50LCBTZXZlcml0eSwgVXNlciB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG4vKipcbiAqIFRoaXMgY2FsbHMgYSBmdW5jdGlvbiBvbiB0aGUgY3VycmVudCBodWIuXG4gKiBAcGFyYW0gbWV0aG9kIGZ1bmN0aW9uIHRvIGNhbGwgb24gaHViLlxuICogQHBhcmFtIGFyZ3MgdG8gcGFzcyB0byBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FsbE9uSHViPFQ+KG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICBjb25zdCBodWIgPSBnZXRDdXJyZW50SHViKCk7XG4gIGlmIChodWIgJiYgaHViW21ldGhvZCBhcyBrZXlvZiBIdWJdKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuc2FmZS1hbnlcbiAgICByZXR1cm4gKGh1YlttZXRob2QgYXMga2V5b2YgSHViXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgTm8gaHViIGRlZmluZWQgb3IgJHttZXRob2R9IHdhcyBub3QgZm91bmQgb24gdGhlIGh1YiwgcGxlYXNlIG9wZW4gYSBidWcgcmVwb3J0LmApO1xufVxuXG4vKipcbiAqIENhcHR1cmVzIGFuIGV4Y2VwdGlvbiBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBleGNlcHRpb24gQW4gZXhjZXB0aW9uLWxpa2Ugb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb246IGFueSk6IHN0cmluZyB7XG4gIGxldCBzeW50aGV0aWNFeGNlcHRpb246IEVycm9yO1xuICB0cnkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb24gYXMgRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZUV4Y2VwdGlvbicsIGV4Y2VwdGlvbiwge1xuICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sXG4gICAgc3ludGhldGljRXhjZXB0aW9uLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIG1lc3NhZ2UgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kIHRvIFNlbnRyeS5cbiAqIEBwYXJhbSBsZXZlbCBEZWZpbmUgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBsZXZlbD86IFNldmVyaXR5KTogc3RyaW5nIHtcbiAgbGV0IHN5bnRoZXRpY0V4Y2VwdGlvbjogRXJyb3I7XG4gIHRyeSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb24gYXMgRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZU1lc3NhZ2UnLCBtZXNzYWdlLCBsZXZlbCwge1xuICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBtZXNzYWdlLFxuICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgfSk7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0byBzZW5kIHRvIFNlbnRyeS5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgZXZlbnRJZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVFdmVudChldmVudDogRXZlbnQpOiBzdHJpbmcge1xuICByZXR1cm4gY2FsbE9uSHViKCdjYXB0dXJlRXZlbnQnLCBldmVudCk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gc2V0IGNvbnRleHQgaW5mb3JtYXRpb24gb250byB0aGUgc2NvcGUuXG4gKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBTY29wZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVNjb3BlKGNhbGxiYWNrOiAoc2NvcGU6IFNjb3BlKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignY29uZmlndXJlU2NvcGUnLCBjYWxsYmFjayk7XG59XG5cbi8qKlxuICogUmVjb3JkcyBhIG5ldyBicmVhZGNydW1iIHdoaWNoIHdpbGwgYmUgYXR0YWNoZWQgdG8gZnV0dXJlIGV2ZW50cy5cbiAqXG4gKiBCcmVhZGNydW1icyB3aWxsIGJlIGFkZGVkIHRvIHN1YnNlcXVlbnQgZXZlbnRzIHRvIHByb3ZpZGUgbW9yZSBjb250ZXh0IG9uXG4gKiB1c2VyJ3MgYWN0aW9ucyBwcmlvciB0byBhbiBlcnJvciBvciBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYnJlYWRjcnVtYiBUaGUgYnJlYWRjcnVtYiB0byByZWNvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWIpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdhZGRCcmVhZGNydW1iJywgYnJlYWRjcnVtYik7XG59XG5cbi8qKlxuICogU2V0cyBjb250ZXh0IGRhdGEgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqIEBwYXJhbSBuYW1lIG9mIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gY29udGV4dCBBbnkga2luZCBvZiBkYXRhLiBUaGlzIGRhdGEgd2lsbCBiZSBub3JtYWlsemVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udGV4dChuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignc2V0Q29udGV4dCcsIG5hbWUsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gZXh0cmFzIEV4dHJhcyBvYmplY3QgdG8gbWVyZ2UgaW50byBjdXJyZW50IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFeHRyYXMoZXh0cmFzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignc2V0RXh0cmFzJywgZXh0cmFzKTtcbn1cblxuLyoqXG4gKiBTZXQgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQgc2VudCBhcyB0YWdzIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gdGFncyBUYWdzIGNvbnRleHQgb2JqZWN0IHRvIG1lcmdlIGludG8gY3VycmVudCBjb250ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignc2V0VGFncycsIHRhZ3MpO1xufVxuXG4vKipcbiAqIFNldCBrZXk6dmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgYXMgZXh0cmEgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqIEBwYXJhbSBrZXkgU3RyaW5nIG9mIGV4dHJhXG4gKiBAcGFyYW0gZXh0cmEgQW55IGtpbmQgb2YgZGF0YS4gVGhpcyBkYXRhIHdpbGwgYmUgbm9ybWFpbHplZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBhbnkpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRFeHRyYScsIGtleSwgZXh0cmEpO1xufVxuXG4vKipcbiAqIFNldCBrZXk6dmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIGtleSBTdHJpbmcga2V5IG9mIHRhZ1xuICogQHBhcmFtIHZhbHVlIFN0cmluZyB2YWx1ZSBvZiB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldFRhZycsIGtleSwgdmFsdWUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdXNlciBjb250ZXh0IGluZm9ybWF0aW9uIGZvciBmdXR1cmUgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSB1c2VyIFVzZXIgY29udGV4dCBvYmplY3QgdG8gYmUgc2V0IGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFBhc3MgYG51bGxgIHRvIHVuc2V0IHRoZSB1c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VXNlcih1c2VyOiBVc2VyIHwgbnVsbCk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldFVzZXInLCB1c2VyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNjb3BlIHdpdGggYW5kIGV4ZWN1dGVzIHRoZSBnaXZlbiBvcGVyYXRpb24gd2l0aGluLlxuICogVGhlIHNjb3BlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBvbmNlIHRoZSBvcGVyYXRpb25cbiAqIGZpbmlzaGVzIG9yIHRocm93cy5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yOlxuICpcbiAqICAgICBwdXNoU2NvcGUoKTtcbiAqICAgICBjYWxsYmFjaygpO1xuICogICAgIHBvcFNjb3BlKCk7XG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBlbmNsb3NlZCBpbnRvIHB1c2gvcG9wU2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2NvcGUoY2FsbGJhY2s6IChzY29wZTogU2NvcGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCd3aXRoU2NvcGUnLCBjYWxsYmFjayk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBvbiB0aGUgbGF0ZXN0IGNsaWVudC4gVXNlIHRoaXMgd2l0aCBjYXV0aW9uLCBpdCdzIG1lYW50IGFzXG4gKiBpbiBcImludGVybmFsXCIgaGVscGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlIGV2ZXJ5IHBvc3NpYmxlIGZ1bmN0aW9uIGluXG4gKiB0aGUgc2hpbS4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdCB0aGUgY2xpZW50IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gY2FsbCBvbiB0aGUgY2xpZW50L2NsaWVudC5cbiAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjbGllbnQvZm9udGVuZC5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jYWxsT25DbGllbnQobWV0aG9kOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignX2ludm9rZUNsaWVudCcsIG1ldGhvZCwgLi4uYXJncyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFHQTs7Ozs7O0FBS0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/minimal/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/types/esm/index.js": -/*!**************************************************!*\ - !*** ../node_modules/@sentry/types/esm/index.js ***! - \**************************************************/ -/*! exports provided: LogLevel, Severity, SpanStatus, Status */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _loglevel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loglevel */ \"../node_modules/@sentry/types/esm/loglevel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LogLevel\", function() { return _loglevel__WEBPACK_IMPORTED_MODULE_0__[\"LogLevel\"]; });\n\n/* harmony import */ var _severity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./severity */ \"../node_modules/@sentry/types/esm/severity.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Severity\", function() { return _severity__WEBPACK_IMPORTED_MODULE_1__[\"Severity\"]; });\n\n/* harmony import */ var _span__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./span */ \"../node_modules/@sentry/types/esm/span.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SpanStatus\", function() { return _span__WEBPACK_IMPORTED_MODULE_2__[\"SpanStatus\"]; });\n\n/* harmony import */ var _status__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./status */ \"../node_modules/@sentry/types/esm/status.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _status__WEBPACK_IMPORTED_MODULE_3__[\"Status\"]; });\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50cz82ZjM3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEJyZWFkY3J1bWIsIEJyZWFkY3J1bWJIaW50IH0gZnJvbSAnLi9icmVhZGNydW1iJztcbmV4cG9ydCB7IENsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCB7IERzbiwgRHNuQ29tcG9uZW50cywgRHNuTGlrZSwgRHNuUHJvdG9jb2wgfSBmcm9tICcuL2Rzbic7XG5leHBvcnQgeyBFeHRlbmRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5leHBvcnQgeyBFdmVudCwgRXZlbnRIaW50IH0gZnJvbSAnLi9ldmVudCc7XG5leHBvcnQgeyBFdmVudFByb2Nlc3NvciB9IGZyb20gJy4vZXZlbnRwcm9jZXNzb3InO1xuZXhwb3J0IHsgRXhjZXB0aW9uIH0gZnJvbSAnLi9leGNlcHRpb24nO1xuZXhwb3J0IHsgSHViIH0gZnJvbSAnLi9odWInO1xuZXhwb3J0IHsgSW50ZWdyYXRpb24sIEludGVncmF0aW9uQ2xhc3MgfSBmcm9tICcuL2ludGVncmF0aW9uJztcbmV4cG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnLi9sb2dsZXZlbCc7XG5leHBvcnQgeyBNZWNoYW5pc20gfSBmcm9tICcuL21lY2hhbmlzbSc7XG5leHBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmV4cG9ydCB7IFBhY2thZ2UgfSBmcm9tICcuL3BhY2thZ2UnO1xuZXhwb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4vcmVxdWVzdCc7XG5leHBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2UnO1xuZXhwb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbmV4cG9ydCB7IFNka0luZm8gfSBmcm9tICcuL3Nka2luZm8nO1xuZXhwb3J0IHsgU2V2ZXJpdHkgfSBmcm9tICcuL3NldmVyaXR5JztcbmV4cG9ydCB7IFNwYW4sIFNwYW5Db250ZXh0LCBTcGFuU3RhdHVzIH0gZnJvbSAnLi9zcGFuJztcbmV4cG9ydCB7IFN0YWNrRnJhbWUgfSBmcm9tICcuL3N0YWNrZnJhbWUnO1xuZXhwb3J0IHsgU3RhY2t0cmFjZSB9IGZyb20gJy4vc3RhY2t0cmFjZSc7XG5leHBvcnQgeyBTdGF0dXMgfSBmcm9tICcuL3N0YXR1cyc7XG5leHBvcnQgeyBUaHJlYWQgfSBmcm9tICcuL3RocmVhZCc7XG5leHBvcnQgeyBUcmFuc3BvcnQsIFRyYW5zcG9ydE9wdGlvbnMsIFRyYW5zcG9ydENsYXNzIH0gZnJvbSAnLi90cmFuc3BvcnQnO1xuZXhwb3J0IHsgVXNlciB9IGZyb20gJy4vdXNlcic7XG5leHBvcnQgeyBXcmFwcGVkRnVuY3Rpb24gfSBmcm9tICcuL3dyYXBwZWRmdW5jdGlvbic7XG4iXSwibWFwcGluZ3MiOiJBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/types/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/types/esm/loglevel.js": -/*!*****************************************************!*\ - !*** ../node_modules/@sentry/types/esm/loglevel.js ***! - \*****************************************************/ -/*! exports provided: LogLevel */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LogLevel\", function() { return LogLevel; });\n/** Console logging verbosity for the SDK. */\nvar LogLevel;\n\n(function (LogLevel) {\n /** No logs will be generated. */\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n /** Only SDK internal errors will be logged. */\n\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n /** Information useful for debugging the SDK will be logged. */\n\n LogLevel[LogLevel[\"Debug\"] = 2] = \"Debug\";\n /** All SDK actions will be logged. */\n\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n})(LogLevel || (LogLevel = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL2xvZ2xldmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9sb2dsZXZlbC50cz9iOGJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb25zb2xlIGxvZ2dpbmcgdmVyYm9zaXR5IGZvciB0aGUgU0RLLiAqL1xuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICAvKiogTm8gbG9ncyB3aWxsIGJlIGdlbmVyYXRlZC4gKi9cbiAgTm9uZSA9IDAsXG4gIC8qKiBPbmx5IFNESyBpbnRlcm5hbCBlcnJvcnMgd2lsbCBiZSBsb2dnZWQuICovXG4gIEVycm9yID0gMSxcbiAgLyoqIEluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBTREsgd2lsbCBiZSBsb2dnZWQuICovXG4gIERlYnVnID0gMixcbiAgLyoqIEFsbCBTREsgYWN0aW9ucyB3aWxsIGJlIGxvZ2dlZC4gKi9cbiAgVmVyYm9zZSA9IDMsXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/types/esm/loglevel.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/types/esm/severity.js": -/*!*****************************************************!*\ - !*** ../node_modules/@sentry/types/esm/severity.js ***! - \*****************************************************/ -/*! exports provided: Severity */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Severity\", function() { return Severity; });\n/** JSDoc */\nvar Severity;\n\n(function (Severity) {\n /** JSDoc */\n Severity[\"Fatal\"] = \"fatal\";\n /** JSDoc */\n\n Severity[\"Error\"] = \"error\";\n /** JSDoc */\n\n Severity[\"Warning\"] = \"warning\";\n /** JSDoc */\n\n Severity[\"Log\"] = \"log\";\n /** JSDoc */\n\n Severity[\"Info\"] = \"info\";\n /** JSDoc */\n\n Severity[\"Debug\"] = \"debug\";\n /** JSDoc */\n\n Severity[\"Critical\"] = \"critical\";\n})(Severity || (Severity = {})); // tslint:disable:completed-docs\n// tslint:disable:no-unnecessary-qualifier no-namespace\n\n\n(function (Severity) {\n /**\n * Converts a string-based level into a {@link Severity}.\n *\n * @param level string representation of Severity\n * @returns Severity\n */\n function fromString(level) {\n switch (level) {\n case 'debug':\n return Severity.Debug;\n\n case 'info':\n return Severity.Info;\n\n case 'warn':\n case 'warning':\n return Severity.Warning;\n\n case 'error':\n return Severity.Error;\n\n case 'fatal':\n return Severity.Fatal;\n\n case 'critical':\n return Severity.Critical;\n\n case 'log':\n default:\n return Severity.Log;\n }\n }\n\n Severity.fromString = fromString;\n})(Severity || (Severity = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL3NldmVyaXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9zZXZlcml0eS50cz83NjNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBKU0RvYyAqL1xuZXhwb3J0IGVudW0gU2V2ZXJpdHkge1xuICAvKiogSlNEb2MgKi9cbiAgRmF0YWwgPSAnZmF0YWwnLFxuICAvKiogSlNEb2MgKi9cbiAgRXJyb3IgPSAnZXJyb3InLFxuICAvKiogSlNEb2MgKi9cbiAgV2FybmluZyA9ICd3YXJuaW5nJyxcbiAgLyoqIEpTRG9jICovXG4gIExvZyA9ICdsb2cnLFxuICAvKiogSlNEb2MgKi9cbiAgSW5mbyA9ICdpbmZvJyxcbiAgLyoqIEpTRG9jICovXG4gIERlYnVnID0gJ2RlYnVnJyxcbiAgLyoqIEpTRG9jICovXG4gIENyaXRpY2FsID0gJ2NyaXRpY2FsJyxcbn1cbi8vIHRzbGludDpkaXNhYmxlOmNvbXBsZXRlZC1kb2NzXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby11bm5lY2Vzc2FyeS1xdWFsaWZpZXIgbm8tbmFtZXNwYWNlXG5leHBvcnQgbmFtZXNwYWNlIFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nLWJhc2VkIGxldmVsIGludG8gYSB7QGxpbmsgU2V2ZXJpdHl9LlxuICAgKlxuICAgKiBAcGFyYW0gbGV2ZWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFNldmVyaXR5XG4gICAqIEByZXR1cm5zIFNldmVyaXR5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZnJvbVN0cmluZyhsZXZlbDogc3RyaW5nKTogU2V2ZXJpdHkge1xuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgIGNhc2UgJ2RlYnVnJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkRlYnVnO1xuICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5JbmZvO1xuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5Lldhcm5pbmc7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkZhdGFsO1xuICAgICAgY2FzZSAnY3JpdGljYWwnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuQ3JpdGljYWw7XG4gICAgICBjYXNlICdsb2cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkxvZztcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQWRBO0FBaUJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWhCQTtBQWtCQTtBQUNBO0FBcEJBO0FBUEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/types/esm/severity.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/types/esm/span.js": -/*!*************************************************!*\ - !*** ../node_modules/@sentry/types/esm/span.js ***! - \*************************************************/ -/*! exports provided: SpanStatus */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SpanStatus\", function() { return SpanStatus; });\n/** The status of an Span. */\nvar SpanStatus;\n\n(function (SpanStatus) {\n /** The operation completed successfully. */\n SpanStatus[\"Ok\"] = \"ok\";\n /** Deadline expired before operation could complete. */\n\n SpanStatus[\"DeadlineExceeded\"] = \"deadline_exceeded\";\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n\n SpanStatus[\"Unauthenticated\"] = \"unauthenticated\";\n /** 403 Forbidden */\n\n SpanStatus[\"PermissionDenied\"] = \"permission_denied\";\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n\n SpanStatus[\"NotFound\"] = \"not_found\";\n /** 429 Too Many Requests */\n\n SpanStatus[\"ResourceExhausted\"] = \"resource_exhausted\";\n /** Client specified an invalid argument. 4xx. */\n\n SpanStatus[\"InvalidArgument\"] = \"invalid_argument\";\n /** 501 Not Implemented */\n\n SpanStatus[\"Unimplemented\"] = \"unimplemented\";\n /** 503 Service Unavailable */\n\n SpanStatus[\"Unavailable\"] = \"unavailable\";\n /** Other/generic 5xx. */\n\n SpanStatus[\"InternalError\"] = \"internal_error\";\n /** Unknown. Any non-standard HTTP status code. */\n\n SpanStatus[\"UnknownError\"] = \"unknown_error\";\n /** The operation was cancelled (typically by the user). */\n\n SpanStatus[\"Cancelled\"] = \"cancelled\";\n /** Already exists (409) */\n\n SpanStatus[\"AlreadyExists\"] = \"already_exists\";\n /** Operation was rejected because the system is not in a state required for the operation's */\n\n SpanStatus[\"FailedPrecondition\"] = \"failed_precondition\";\n /** The operation was aborted, typically due to a concurrency issue. */\n\n SpanStatus[\"Aborted\"] = \"aborted\";\n /** Operation was attempted past the valid range. */\n\n SpanStatus[\"OutOfRange\"] = \"out_of_range\";\n /** Unrecoverable data loss or corruption */\n\n SpanStatus[\"DataLoss\"] = \"data_loss\";\n})(SpanStatus || (SpanStatus = {})); // tslint:disable:no-unnecessary-qualifier no-namespace\n\n\n(function (SpanStatus) {\n /**\n * Converts a HTTP status code into a {@link SpanStatus}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or {@link SpanStatus.UnknownError}.\n */\n // tslint:disable-next-line:completed-docs\n function fromHttpCode(httpStatus) {\n if (httpStatus < 400) {\n return SpanStatus.Ok;\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return SpanStatus.Unauthenticated;\n\n case 403:\n return SpanStatus.PermissionDenied;\n\n case 404:\n return SpanStatus.NotFound;\n\n case 409:\n return SpanStatus.AlreadyExists;\n\n case 413:\n return SpanStatus.FailedPrecondition;\n\n case 429:\n return SpanStatus.ResourceExhausted;\n\n default:\n return SpanStatus.InvalidArgument;\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return SpanStatus.Unimplemented;\n\n case 503:\n return SpanStatus.Unavailable;\n\n case 504:\n return SpanStatus.DeadlineExceeded;\n\n default:\n return SpanStatus.InternalError;\n }\n }\n\n return SpanStatus.UnknownError;\n }\n\n SpanStatus.fromHttpCode = fromHttpCode;\n})(SpanStatus || (SpanStatus = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL3NwYW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL3NwYW4udHM/ZGI0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU3BhbiBob2xkaW5nIHRyYWNlX2lkLCBzcGFuX2lkICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYW4ge1xuICAvKiogU2V0cyB0aGUgZmluaXNoIHRpbWVzdGFtcCBvbiB0aGUgY3VycmVudCBzcGFuIGFuZCBzZW5kcyBpdCBpZiBpdCB3YXMgYSB0cmFuc2FjdGlvbiAqL1xuICBmaW5pc2godXNlTGFzdFNwYW5UaW1lc3RhbXA/OiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJuIGEgdHJhY2VwYXJlbnQgY29tcGF0aWJsZSBoZWFkZXIgc3RyaW5nICovXG4gIHRvVHJhY2VwYXJlbnQoKTogc3RyaW5nO1xuICAvKiogQ29udmVydCB0aGUgb2JqZWN0IHRvIEpTT04gZm9yIHcuIHNwYW5zIGFycmF5IGluZm8gb25seSAqL1xuICBnZXRUcmFjZUNvbnRleHQoKTogb2JqZWN0O1xuICAvKiogQ29udmVydCB0aGUgb2JqZWN0IHRvIEpTT04gKi9cbiAgdG9KU09OKCk6IG9iamVjdDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgdGFnIGF0dHJpYnV0ZSBvbiB0aGUgY3VycmVudCBzcGFuXG4gICAqIEBwYXJhbSBrZXkgVGFnIGtleVxuICAgKiBAcGFyYW0gdmFsdWUgVGFnIHZhbHVlXG4gICAqL1xuICBzZXRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgY3VycmVudCBzcGFuXG4gICAqIEBwYXJhbSBrZXkgRGF0YSBrZXlcbiAgICogQHBhcmFtIHZhbHVlIERhdGEgdmFsdWVcbiAgICovXG4gIHNldERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGF0dXMgYXR0cmlidXRlIG9uIHRoZSBjdXJyZW50IHNwYW5cbiAgICogQHBhcmFtIHN0YXR1cyBodHRwIGNvZGUgdXNlZCB0byBzZXQgdGhlIHN0YXR1c1xuICAgKi9cbiAgc2V0U3RhdHVzKHN0YXR1czogU3BhblN0YXR1cyk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXR1cyBhdHRyaWJ1dGUgb24gdGhlIGN1cnJlbnQgc3BhbiBiYXNlZCBvbiB0aGUgaHR0cCBjb2RlXG4gICAqIEBwYXJhbSBodHRwU3RhdHVzIGh0dHAgY29kZSB1c2VkIHRvIHNldCB0aGUgc3RhdHVzXG4gICAqL1xuICBzZXRIdHRwU3RhdHVzKGh0dHBTdGF0dXM6IG51bWJlcik6IHRoaXM7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBzcGFuIHdhcyBzdWNjZXNzZnVsIChIVFRQMjAwKVxuICAgKi9cbiAgaXNTdWNjZXNzKCk6IGJvb2xlYW47XG59XG5cbi8qKiBJbnRlcmZhY2UgaG9sZGVyIGFsbCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNldCBvbiBhIFNwYW4gb24gY3JlYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5Db250ZXh0IHtcbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSBTcGFuLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcGVyYXRpb24gb2YgdGhlIFNwYW4uXG4gICAqL1xuICBvcD86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbXBsZXRpb24gc3RhdHVzIG9mIHRoZSBTcGFuLlxuICAgKi9cbiAgc3RhdHVzPzogU3BhblN0YXR1cztcbiAgLyoqXG4gICAqIFBhcmVudCBTcGFuIElEXG4gICAqL1xuICBwYXJlbnRTcGFuSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIYXMgdGhlIHNhbXBsaW5nIGRlY2lzaW9uIGJlZW4gbWFkZT9cbiAgICovXG4gIHNhbXBsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU3BhbiBJRFxuICAgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogVHJhY2UgSURcbiAgICovXG4gIHRyYWNlSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBvZiB0aGUgU3Bhbi5cbiAgICovXG4gIHRyYW5zYWN0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGFncyBvZiB0aGUgU3Bhbi5cbiAgICovXG4gIHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEYXRhIG9mIHRoZSBTcGFuLlxuICAgKi9cbiAgZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKiBUaGUgc3RhdHVzIG9mIGFuIFNwYW4uICovXG5leHBvcnQgZW51bSBTcGFuU3RhdHVzIHtcbiAgLyoqIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi9cbiAgT2sgPSAnb2snLFxuICAvKiogRGVhZGxpbmUgZXhwaXJlZCBiZWZvcmUgb3BlcmF0aW9uIGNvdWxkIGNvbXBsZXRlLiAqL1xuICBEZWFkbGluZUV4Y2VlZGVkID0gJ2RlYWRsaW5lX2V4Y2VlZGVkJyxcbiAgLyoqIDQwMSBVbmF1dGhvcml6ZWQgKGFjdHVhbGx5IGRvZXMgbWVhbiB1bmF1dGhlbnRpY2F0ZWQgYWNjb3JkaW5nIHRvIFJGQyA3MjM1KSAqL1xuICBVbmF1dGhlbnRpY2F0ZWQgPSAndW5hdXRoZW50aWNhdGVkJyxcbiAgLyoqIDQwMyBGb3JiaWRkZW4gKi9cbiAgUGVybWlzc2lvbkRlbmllZCA9ICdwZXJtaXNzaW9uX2RlbmllZCcsXG4gIC8qKiA0MDQgTm90IEZvdW5kLiBTb21lIHJlcXVlc3RlZCBlbnRpdHkgKGZpbGUgb3IgZGlyZWN0b3J5KSB3YXMgbm90IGZvdW5kLiAqL1xuICBOb3RGb3VuZCA9ICdub3RfZm91bmQnLFxuICAvKiogNDI5IFRvbyBNYW55IFJlcXVlc3RzICovXG4gIFJlc291cmNlRXhoYXVzdGVkID0gJ3Jlc291cmNlX2V4aGF1c3RlZCcsXG4gIC8qKiBDbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIDR4eC4gKi9cbiAgSW52YWxpZEFyZ3VtZW50ID0gJ2ludmFsaWRfYXJndW1lbnQnLFxuICAvKiogNTAxIE5vdCBJbXBsZW1lbnRlZCAqL1xuICBVbmltcGxlbWVudGVkID0gJ3VuaW1wbGVtZW50ZWQnLFxuICAvKiogNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUgKi9cbiAgVW5hdmFpbGFibGUgPSAndW5hdmFpbGFibGUnLFxuICAvKiogT3RoZXIvZ2VuZXJpYyA1eHguICovXG4gIEludGVybmFsRXJyb3IgPSAnaW50ZXJuYWxfZXJyb3InLFxuICAvKiogVW5rbm93bi4gQW55IG5vbi1zdGFuZGFyZCBIVFRQIHN0YXR1cyBjb2RlLiAqL1xuICBVbmtub3duRXJyb3IgPSAndW5rbm93bl9lcnJvcicsXG4gIC8qKiBUaGUgb3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQgKHR5cGljYWxseSBieSB0aGUgdXNlcikuICovXG4gIENhbmNlbGxlZCA9ICdjYW5jZWxsZWQnLFxuICAvKiogQWxyZWFkeSBleGlzdHMgKDQwOSkgKi9cbiAgQWxyZWFkeUV4aXN0cyA9ICdhbHJlYWR5X2V4aXN0cycsXG4gIC8qKiBPcGVyYXRpb24gd2FzIHJlamVjdGVkIGJlY2F1c2UgdGhlIHN5c3RlbSBpcyBub3QgaW4gYSBzdGF0ZSByZXF1aXJlZCBmb3IgdGhlIG9wZXJhdGlvbidzICovXG4gIEZhaWxlZFByZWNvbmRpdGlvbiA9ICdmYWlsZWRfcHJlY29uZGl0aW9uJyxcbiAgLyoqIFRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQsIHR5cGljYWxseSBkdWUgdG8gYSBjb25jdXJyZW5jeSBpc3N1ZS4gKi9cbiAgQWJvcnRlZCA9ICdhYm9ydGVkJyxcbiAgLyoqIE9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiAqL1xuICBPdXRPZlJhbmdlID0gJ291dF9vZl9yYW5nZScsXG4gIC8qKiBVbnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uICovXG4gIERhdGFMb3NzID0gJ2RhdGFfbG9zcycsXG59XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLXVubmVjZXNzYXJ5LXF1YWxpZmllciBuby1uYW1lc3BhY2VcbmV4cG9ydCBuYW1lc3BhY2UgU3BhblN0YXR1cyB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEhUVFAgc3RhdHVzIGNvZGUgaW50byBhIHtAbGluayBTcGFuU3RhdHVzfS5cbiAgICpcbiAgICogQHBhcmFtIGh0dHBTdGF0dXMgVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSBzcGFuIHN0YXR1cyBvciB7QGxpbmsgU3BhblN0YXR1cy5Vbmtub3duRXJyb3J9LlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBsZXRlZC1kb2NzXG4gIGV4cG9ydCBmdW5jdGlvbiBmcm9tSHR0cENvZGUoaHR0cFN0YXR1czogbnVtYmVyKTogU3BhblN0YXR1cyB7XG4gICAgaWYgKGh0dHBTdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBTcGFuU3RhdHVzLk9rO1xuICAgIH1cblxuICAgIGlmIChodHRwU3RhdHVzID49IDQwMCAmJiBodHRwU3RhdHVzIDwgNTAwKSB7XG4gICAgICBzd2l0Y2ggKGh0dHBTdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuVW5hdXRoZW50aWNhdGVkO1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5QZXJtaXNzaW9uRGVuaWVkO1xuICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5Ob3RGb3VuZDtcbiAgICAgICAgY2FzZSA0MDk6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuQWxyZWFkeUV4aXN0cztcbiAgICAgICAgY2FzZSA0MTM6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuRmFpbGVkUHJlY29uZGl0aW9uO1xuICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5SZXNvdXJjZUV4aGF1c3RlZDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5JbnZhbGlkQXJndW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGh0dHBTdGF0dXMgPj0gNTAwICYmIGh0dHBTdGF0dXMgPCA2MDApIHtcbiAgICAgIHN3aXRjaCAoaHR0cFN0YXR1cykge1xuICAgICAgICBjYXNlIDUwMTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmltcGxlbWVudGVkO1xuICAgICAgICBjYXNlIDUwMzpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmF2YWlsYWJsZTtcbiAgICAgICAgY2FzZSA1MDQ6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5JbnRlcm5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTcGFuU3RhdHVzLlVua25vd25FcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUF3RkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQWxDQTtBQUNBO0FBQ0E7QUFvQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2Q0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/types/esm/span.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/types/esm/status.js": -/*!***************************************************!*\ - !*** ../node_modules/@sentry/types/esm/status.js ***! - \***************************************************/ -/*! exports provided: Status */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return Status; });\n/** The status of an event. */\nvar Status;\n\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent to Sentry successfully. */\n\n Status[\"Success\"] = \"success\";\n /** The client is currently rate limited and will try again later. */\n\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The event could not be processed. */\n\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n\n Status[\"Failed\"] = \"failed\";\n})(Status || (Status = {})); // tslint:disable:completed-docs\n// tslint:disable:no-unnecessary-qualifier no-namespace\n\n\n(function (Status) {\n /**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\n function fromHttpCode(code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n }\n\n Status.fromHttpCode = fromHttpCode;\n})(Status || (Status = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL3N0YXR1cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvc3RhdHVzLnRzPzJmOGYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFRoZSBzdGF0dXMgb2YgYW4gZXZlbnQuICovXG5leHBvcnQgZW51bSBTdGF0dXMge1xuICAvKiogVGhlIHN0YXR1cyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4gKi9cbiAgVW5rbm93biA9ICd1bmtub3duJyxcbiAgLyoqIFRoZSBldmVudCB3YXMgc2tpcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBvciBjYWxsYmFja3MuICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG4gIC8qKiBUaGUgZXZlbnQgd2FzIHNlbnQgdG8gU2VudHJ5IHN1Y2Nlc3NmdWxseS4gKi9cbiAgU3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgLyoqIFRoZSBjbGllbnQgaXMgY3VycmVudGx5IHJhdGUgbGltaXRlZCBhbmQgd2lsbCB0cnkgYWdhaW4gbGF0ZXIuICovXG4gIFJhdGVMaW1pdCA9ICdyYXRlX2xpbWl0JyxcbiAgLyoqIFRoZSBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLiAqL1xuICBJbnZhbGlkID0gJ2ludmFsaWQnLFxuICAvKiogQSBzZXJ2ZXItc2lkZSBlcnJvciBvY3VycmVkIGR1cmluZyBzdWJtaXNzaW9uLiAqL1xuICBGYWlsZWQgPSAnZmFpbGVkJyxcbn1cbi8vIHRzbGludDpkaXNhYmxlOmNvbXBsZXRlZC1kb2NzXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby11bm5lY2Vzc2FyeS1xdWFsaWZpZXIgbm8tbmFtZXNwYWNlXG5leHBvcnQgbmFtZXNwYWNlIFN0YXR1cyB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEhUVFAgc3RhdHVzIGNvZGUgaW50byBhIHtAbGluayBTdGF0dXN9LlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSBUaGUgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZS5cbiAgICogQHJldHVybnMgVGhlIHNlbmQgc3RhdHVzIG9yIHtAbGluayBTdGF0dXMuVW5rbm93bn0uXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZnJvbUh0dHBDb2RlKGNvZGU6IG51bWJlcik6IFN0YXR1cyB7XG4gICAgaWYgKGNvZGUgPj0gMjAwICYmIGNvZGUgPCAzMDApIHtcbiAgICAgIHJldHVybiBTdGF0dXMuU3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gNDI5KSB7XG4gICAgICByZXR1cm4gU3RhdHVzLlJhdGVMaW1pdDtcbiAgICB9XG5cbiAgICBpZiAoY29kZSA+PSA0MDAgJiYgY29kZSA8IDUwMCkge1xuICAgICAgcmV0dXJuIFN0YXR1cy5JbnZhbGlkO1xuICAgIH1cblxuICAgIGlmIChjb2RlID49IDUwMCkge1xuICAgICAgcmV0dXJuIFN0YXR1cy5GYWlsZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YXR1cy5Vbmtub3duO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFaQTtBQWVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFQQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/types/esm/status.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/async.js": -/*!**************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/async.js ***! - \**************************************************/ -/*! exports provided: forget */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"forget\", function() { return forget; });\n/**\n * Consumes the promise and logs the error when it rejects.\n * @param promise A promise to forget.\n */\nfunction forget(promise) {\n promise.then(null, function (e) {\n // TODO: Use a better logging mechanism\n console.error(e);\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2FzeW5jLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9hc3luYy50cz9mODEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc3VtZXMgdGhlIHByb21pc2UgYW5kIGxvZ3MgdGhlIGVycm9yIHdoZW4gaXQgcmVqZWN0cy5cbiAqIEBwYXJhbSBwcm9taXNlIEEgcHJvbWlzZSB0byBmb3JnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JnZXQocHJvbWlzZTogUHJvbWlzZUxpa2U8YW55Pik6IHZvaWQge1xuICBwcm9taXNlLnRoZW4obnVsbCwgZSA9PiB7XG4gICAgLy8gVE9ETzogVXNlIGEgYmV0dGVyIGxvZ2dpbmcgbWVjaGFuaXNtXG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/async.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/dsn.js": -/*!************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/dsn.js ***! - \************************************************/ -/*! exports provided: Dsn */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dsn\", function() { return Dsn; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error */ \"../node_modules/@sentry/utils/esm/error.js\");\n\n\n/** Regular expression used to parse a Dsn. */\n\nvar DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w\\.-]+)(?::(\\d+))?\\/(.+)/;\n/** Error message */\n\nvar ERROR_MESSAGE = 'Invalid Dsn';\n/** The Sentry Dsn, identifying a Sentry instance and project. */\n\nvar Dsn =\n/** @class */\nfunction () {\n /** Creates a new Dsn component */\n function Dsn(from) {\n if (typeof from === 'string') {\n this._fromString(from);\n } else {\n this._fromComponents(from);\n }\n\n this._validate();\n }\n /**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private _representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\n\n\n Dsn.prototype.toString = function (withPassword) {\n if (withPassword === void 0) {\n withPassword = false;\n } // tslint:disable-next-line:no-this-assignment\n\n\n var _a = this,\n host = _a.host,\n path = _a.path,\n pass = _a.pass,\n port = _a.port,\n projectId = _a.projectId,\n protocol = _a.protocol,\n user = _a.user;\n\n return protocol + \"://\" + user + (withPassword && pass ? \":\" + pass : '') + (\"@\" + host + (port ? \":\" + port : '') + \"/\" + (path ? path + \"/\" : path) + projectId);\n };\n /** Parses a string into this Dsn. */\n\n\n Dsn.prototype._fromString = function (str) {\n var match = DSN_REGEX.exec(str);\n\n if (!match) {\n throw new _error__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"](ERROR_MESSAGE);\n }\n\n var _a = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__read\"](match.slice(1), 6),\n protocol = _a[0],\n user = _a[1],\n _b = _a[2],\n pass = _b === void 0 ? '' : _b,\n host = _a[3],\n _c = _a[4],\n port = _c === void 0 ? '' : _c,\n lastPath = _a[5];\n\n var path = '';\n var projectId = lastPath;\n var split = projectId.split('/');\n\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop();\n }\n\n this._fromComponents({\n host: host,\n pass: pass,\n path: path,\n projectId: projectId,\n port: port,\n protocol: protocol,\n user: user\n });\n };\n /** Maps Dsn components into this instance. */\n\n\n Dsn.prototype._fromComponents = function (components) {\n this.protocol = components.protocol;\n this.user = components.user;\n this.pass = components.pass || '';\n this.host = components.host;\n this.port = components.port || '';\n this.path = components.path || '';\n this.projectId = components.projectId;\n };\n /** Validates this Dsn and throws on error. */\n\n\n Dsn.prototype._validate = function () {\n var _this = this;\n\n ['protocol', 'user', 'host', 'projectId'].forEach(function (component) {\n if (!_this[component]) {\n throw new _error__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"](ERROR_MESSAGE);\n }\n });\n\n if (this.protocol !== 'http' && this.protocol !== 'https') {\n throw new _error__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"](ERROR_MESSAGE);\n }\n\n if (this.port && isNaN(parseInt(this.port, 10))) {\n throw new _error__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"](ERROR_MESSAGE);\n }\n };\n\n return Dsn;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2Rzbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvZHNuLnRzPzVkYjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHNuQ29tcG9uZW50cywgRHNuTGlrZSwgRHNuUHJvdG9jb2wgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgU2VudHJ5RXJyb3IgfSBmcm9tICcuL2Vycm9yJztcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIGEgRHNuLiAqL1xuY29uc3QgRFNOX1JFR0VYID0gL14oPzooXFx3Kyk6KVxcL1xcLyg/OihcXHcrKSg/OjooXFx3KykpP0ApKFtcXHdcXC4tXSspKD86OihcXGQrKSk/XFwvKC4rKS87XG5cbi8qKiBFcnJvciBtZXNzYWdlICovXG5jb25zdCBFUlJPUl9NRVNTQUdFID0gJ0ludmFsaWQgRHNuJztcblxuLyoqIFRoZSBTZW50cnkgRHNuLCBpZGVudGlmeWluZyBhIFNlbnRyeSBpbnN0YW5jZSBhbmQgcHJvamVjdC4gKi9cbmV4cG9ydCBjbGFzcyBEc24gaW1wbGVtZW50cyBEc25Db21wb25lbnRzIHtcbiAgLyoqIFByb3RvY29sIHVzZWQgdG8gY29ubmVjdCB0byBTZW50cnkuICovXG4gIHB1YmxpYyBwcm90b2NvbCE6IERzblByb3RvY29sO1xuICAvKiogUHVibGljIGF1dGhvcml6YXRpb24ga2V5LiAqL1xuICBwdWJsaWMgdXNlciE6IHN0cmluZztcbiAgLyoqIHByaXZhdGUgX2F1dGhvcml6YXRpb24ga2V5IChkZXByZWNhdGVkLCBvcHRpb25hbCkuICovXG4gIHB1YmxpYyBwYXNzITogc3RyaW5nO1xuICAvKiogSG9zdG5hbWUgb2YgdGhlIFNlbnRyeSBpbnN0YW5jZS4gKi9cbiAgcHVibGljIGhvc3QhOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG9mIHRoZSBTZW50cnkgaW5zdGFuY2UuICovXG4gIHB1YmxpYyBwb3J0ITogc3RyaW5nO1xuICAvKiogUGF0aCAqL1xuICBwdWJsaWMgcGF0aCE6IHN0cmluZztcbiAgLyoqIFByb2plY3QgSUQgKi9cbiAgcHVibGljIHByb2plY3RJZCE6IHN0cmluZztcblxuICAvKiogQ3JlYXRlcyBhIG5ldyBEc24gY29tcG9uZW50ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihmcm9tOiBEc25MaWtlKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZnJvbVN0cmluZyhmcm9tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZnJvbUNvbXBvbmVudHMoZnJvbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEc24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCByZW5kZXIgdGhlIHB1YmxpYyByZXByZXNlbnRhdGlvbiB3aXRob3V0IHRoZSBwYXNzd29yZFxuICAgKiBjb21wb25lbnQuIFRvIGdldCB0aGUgZGVwcmVjYXRlZCBwcml2YXRlIF9yZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgXG4gICAqIHRvIHRydWUuXG4gICAqXG4gICAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcod2l0aFBhc3N3b3JkOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby10aGlzLWFzc2lnbm1lbnRcbiAgICBjb25zdCB7IGhvc3QsIHBhdGgsIHBhc3MsIHBvcnQsIHByb2plY3RJZCwgcHJvdG9jb2wsIHVzZXIgfSA9IHRoaXM7XG4gICAgcmV0dXJuIChcbiAgICAgIGAke3Byb3RvY29sfTovLyR7dXNlcn0ke3dpdGhQYXNzd29yZCAmJiBwYXNzID8gYDoke3Bhc3N9YCA6ICcnfWAgK1xuICAgICAgYEAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfS8ke3BhdGggPyBgJHtwYXRofS9gIDogcGF0aH0ke3Byb2plY3RJZH1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBQYXJzZXMgYSBzdHJpbmcgaW50byB0aGlzIERzbi4gKi9cbiAgcHJpdmF0ZSBfZnJvbVN0cmluZyhzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1hdGNoID0gRFNOX1JFR0VYLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihFUlJPUl9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICBjb25zdCBbcHJvdG9jb2wsIHVzZXIsIHBhc3MgPSAnJywgaG9zdCwgcG9ydCA9ICcnLCBsYXN0UGF0aF0gPSBtYXRjaC5zbGljZSgxKTtcbiAgICBsZXQgcGF0aCA9ICcnO1xuICAgIGxldCBwcm9qZWN0SWQgPSBsYXN0UGF0aDtcblxuICAgIGNvbnN0IHNwbGl0ID0gcHJvamVjdElkLnNwbGl0KCcvJyk7XG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhdGggPSBzcGxpdC5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgcHJvamVjdElkID0gc3BsaXQucG9wKCkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHRoaXMuX2Zyb21Db21wb25lbnRzKHsgaG9zdCwgcGFzcywgcGF0aCwgcHJvamVjdElkLCBwb3J0LCBwcm90b2NvbDogcHJvdG9jb2wgYXMgRHNuUHJvdG9jb2wsIHVzZXIgfSk7XG4gIH1cblxuICAvKiogTWFwcyBEc24gY29tcG9uZW50cyBpbnRvIHRoaXMgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX2Zyb21Db21wb25lbnRzKGNvbXBvbmVudHM6IERzbkNvbXBvbmVudHMpOiB2b2lkIHtcbiAgICB0aGlzLnByb3RvY29sID0gY29tcG9uZW50cy5wcm90b2NvbDtcbiAgICB0aGlzLnVzZXIgPSBjb21wb25lbnRzLnVzZXI7XG4gICAgdGhpcy5wYXNzID0gY29tcG9uZW50cy5wYXNzIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGNvbXBvbmVudHMuaG9zdDtcbiAgICB0aGlzLnBvcnQgPSBjb21wb25lbnRzLnBvcnQgfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gY29tcG9uZW50cy5wYXRoIHx8ICcnO1xuICAgIHRoaXMucHJvamVjdElkID0gY29tcG9uZW50cy5wcm9qZWN0SWQ7XG4gIH1cblxuICAvKiogVmFsaWRhdGVzIHRoaXMgRHNuIGFuZCB0aHJvd3Mgb24gZXJyb3IuICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlKCk6IHZvaWQge1xuICAgIFsncHJvdG9jb2wnLCAndXNlcicsICdob3N0JywgJ3Byb2plY3RJZCddLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGlmICghdGhpc1tjb21wb25lbnQgYXMga2V5b2YgRHNuQ29tcG9uZW50c10pIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKEVSUk9SX01FU1NBR0UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvdG9jb2wgIT09ICdodHRwJyAmJiB0aGlzLnByb3RvY29sICE9PSAnaHR0cHMnKSB7XG4gICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoRVJST1JfTUVTU0FHRSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9ydCAmJiBpc05hTihwYXJzZUludCh0aGlzLnBvcnQsIDEwKSkpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihFUlJPUl9NRVNTQUdFKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWpCQTtBQW9CQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFjQTtBQTdGQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/dsn.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/error.js": -/*!**************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/error.js ***! - \**************************************************/ -/*! exports provided: SentryError */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SentryError\", function() { return SentryError; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _polyfill__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./polyfill */ \"../node_modules/@sentry/utils/esm/polyfill.js\");\n\n\n/** An error emitted by Sentry SDKs and related utilities. */\n\nvar SentryError =\n/** @class */\nfunction (_super) {\n tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"](SentryError, _super);\n\n function SentryError(message) {\n var _newTarget = this.constructor;\n\n var _this = _super.call(this, message) || this;\n\n _this.message = message; // tslint:disable:no-unsafe-any\n\n _this.name = _newTarget.prototype.constructor.name;\n Object(_polyfill__WEBPACK_IMPORTED_MODULE_1__[\"setPrototypeOf\"])(_this, _newTarget.prototype);\n return _this;\n }\n\n return SentryError;\n}(Error);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2Vycm9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9lcnJvci50cz85MjBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldFByb3RvdHlwZU9mIH0gZnJvbSAnLi9wb2x5ZmlsbCc7XG5cbi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi9cbmV4cG9ydCBjbGFzcyBTZW50cnlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnNhZmUtYW55XG4gICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcbiAgICBzZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7OztBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTs7QUFDQTtBQUNBO0FBQUE7QUFYQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/error.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/index.js": -/*!**************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/index.js ***! - \**************************************************/ -/*! exports provided: forget, SentryError, isError, isErrorEvent, isDOMError, isDOMException, isString, isPrimitive, isPlainObject, isEvent, isElement, isRegExp, isThenable, isSyntheticEvent, isInstanceOf, logger, Memo, dynamicRequire, isNodeEnv, getGlobalObject, uuid4, parseUrl, getEventDescription, consoleSandbox, addExceptionTypeValue, addExceptionMechanism, getLocationHref, htmlTreeAsString, crossPlatformPerformance, timestampWithMs, parseSemver, parseRetryAfterHeader, getFunctionName, addContextToFrame, fill, urlEncode, normalizeToSize, walk, normalize, extractExceptionKeysForMessage, dropUndefinedKeys, resolve, relative, normalizePath, isAbsolute, join, dirname, basename, PromiseBuffer, truncate, snipLine, safeJoin, isMatchingPattern, supportsErrorEvent, supportsDOMError, supportsDOMException, supportsFetch, supportsNativeFetch, supportsReportingObserver, supportsReferrerPolicy, supportsHistory, SyncPromise, addInstrumentationHandler, Dsn */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./async */ \"../node_modules/@sentry/utils/esm/async.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"forget\", function() { return _async__WEBPACK_IMPORTED_MODULE_0__[\"forget\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error */ \"../node_modules/@sentry/utils/esm/error.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SentryError\", function() { return _error__WEBPACK_IMPORTED_MODULE_1__[\"SentryError\"]; });\n\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isError\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isErrorEvent\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isErrorEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isDOMError\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isDOMError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isDOMException\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isDOMException\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isString\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isPrimitive\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isPrimitive\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isPlainObject\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isPlainObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isEvent\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isElement\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isRegExp\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isRegExp\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isThenable\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isThenable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isSyntheticEvent\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isSyntheticEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isInstanceOf\", function() { return _is__WEBPACK_IMPORTED_MODULE_2__[\"isInstanceOf\"]; });\n\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ \"../node_modules/@sentry/utils/esm/logger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"logger\", function() { return _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"]; });\n\n/* harmony import */ var _memo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./memo */ \"../node_modules/@sentry/utils/esm/memo.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Memo\", function() { return _memo__WEBPACK_IMPORTED_MODULE_4__[\"Memo\"]; });\n\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./misc */ \"../node_modules/@sentry/utils/esm/misc.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dynamicRequire\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"dynamicRequire\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isNodeEnv\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"isNodeEnv\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getGlobalObject\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"getGlobalObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"uuid4\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"uuid4\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"parseUrl\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"parseUrl\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getEventDescription\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"getEventDescription\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"consoleSandbox\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"consoleSandbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addExceptionTypeValue\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"addExceptionTypeValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addExceptionMechanism\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"addExceptionMechanism\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getLocationHref\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"getLocationHref\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"htmlTreeAsString\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"htmlTreeAsString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"crossPlatformPerformance\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"crossPlatformPerformance\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"timestampWithMs\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"timestampWithMs\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"parseSemver\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"parseSemver\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"parseRetryAfterHeader\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"parseRetryAfterHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getFunctionName\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"getFunctionName\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addContextToFrame\", function() { return _misc__WEBPACK_IMPORTED_MODULE_5__[\"addContextToFrame\"]; });\n\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./object */ \"../node_modules/@sentry/utils/esm/object.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"fill\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"fill\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"urlEncode\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"urlEncode\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"normalizeToSize\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"normalizeToSize\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"walk\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"walk\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"normalize\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"normalize\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"extractExceptionKeysForMessage\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"extractExceptionKeysForMessage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dropUndefinedKeys\", function() { return _object__WEBPACK_IMPORTED_MODULE_6__[\"dropUndefinedKeys\"]; });\n\n/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./path */ \"../node_modules/@sentry/utils/esm/path.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"resolve\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"resolve\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"relative\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"relative\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"normalizePath\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"normalizePath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isAbsolute\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"isAbsolute\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"join\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"join\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dirname\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"dirname\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"basename\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"basename\"]; });\n\n/* harmony import */ var _promisebuffer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./promisebuffer */ \"../node_modules/@sentry/utils/esm/promisebuffer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PromiseBuffer\", function() { return _promisebuffer__WEBPACK_IMPORTED_MODULE_8__[\"PromiseBuffer\"]; });\n\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./string */ \"../node_modules/@sentry/utils/esm/string.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"truncate\", function() { return _string__WEBPACK_IMPORTED_MODULE_9__[\"truncate\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"snipLine\", function() { return _string__WEBPACK_IMPORTED_MODULE_9__[\"snipLine\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"safeJoin\", function() { return _string__WEBPACK_IMPORTED_MODULE_9__[\"safeJoin\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isMatchingPattern\", function() { return _string__WEBPACK_IMPORTED_MODULE_9__[\"isMatchingPattern\"]; });\n\n/* harmony import */ var _supports__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./supports */ \"../node_modules/@sentry/utils/esm/supports.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsErrorEvent\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsErrorEvent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsDOMError\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsDOMError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsDOMException\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsDOMException\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsFetch\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsFetch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsNativeFetch\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsNativeFetch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsReportingObserver\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsReportingObserver\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsReferrerPolicy\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsReferrerPolicy\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsHistory\", function() { return _supports__WEBPACK_IMPORTED_MODULE_10__[\"supportsHistory\"]; });\n\n/* harmony import */ var _syncpromise__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./syncpromise */ \"../node_modules/@sentry/utils/esm/syncpromise.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SyncPromise\", function() { return _syncpromise__WEBPACK_IMPORTED_MODULE_11__[\"SyncPromise\"]; });\n\n/* harmony import */ var _instrument__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./instrument */ \"../node_modules/@sentry/utils/esm/instrument.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addInstrumentationHandler\", function() { return _instrument__WEBPACK_IMPORTED_MODULE_12__[\"addInstrumentationHandler\"]; });\n\n/* harmony import */ var _dsn__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./dsn */ \"../node_modules/@sentry/utils/esm/dsn.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dsn\", function() { return _dsn__WEBPACK_IMPORTED_MODULE_13__[\"Dsn\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50cz82ZjM3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXN5bmMnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2lzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbWVtbyc7XG5leHBvcnQgKiBmcm9tICcuL21pc2MnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbWlzZWJ1ZmZlcic7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3N1cHBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc3luY3Byb21pc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnN0cnVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHNuJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/instrument.js": -/*!*******************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/instrument.js ***! - \*******************************************************/ -/*! exports provided: addInstrumentationHandler */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addInstrumentationHandler\", function() { return addInstrumentationHandler; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logger */ \"../node_modules/@sentry/utils/esm/logger.js\");\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./misc */ \"../node_modules/@sentry/utils/esm/misc.js\");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ \"../node_modules/@sentry/utils/esm/object.js\");\n/* harmony import */ var _supports__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./supports */ \"../node_modules/@sentry/utils/esm/supports.js\");\n/* tslint:disable:only-arrow-functions no-unsafe-any */\n\n\n\n\n\n\nvar global = Object(_misc__WEBPACK_IMPORTED_MODULE_3__[\"getGlobalObject\"])();\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\n\nvar handlers = {};\nvar instrumented = {};\n/** Instruments given API */\n\nfunction instrument(type) {\n if (instrumented[type]) {\n return;\n }\n\n instrumented[type] = true;\n\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n\n case 'dom':\n instrumentDOM();\n break;\n\n case 'xhr':\n instrumentXHR();\n break;\n\n case 'fetch':\n instrumentFetch();\n break;\n\n case 'history':\n instrumentHistory();\n break;\n\n case 'error':\n instrumentError();\n break;\n\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n\n default:\n _logger__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].warn('unknown instrumentation type:', type);\n }\n}\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\n\n\nfunction addInstrumentationHandler(handler) {\n // tslint:disable-next-line:strict-type-predicates\n if (!handler || typeof handler.type !== 'string' || typeof handler.callback !== 'function') {\n return;\n }\n\n handlers[handler.type] = handlers[handler.type] || [];\n handlers[handler.type].push(handler.callback);\n instrument(handler.type);\n}\n/** JSDoc */\n\nfunction triggerHandlers(type, data) {\n var e_1, _a;\n\n if (!type || !handlers[type]) {\n return;\n }\n\n try {\n for (var _b = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__values\"](handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var handler = _c.value;\n\n try {\n handler(data);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_2__[\"logger\"].error(\"Error while triggering instrumentation handler.\\nType: \" + type + \"\\nName: \" + Object(_misc__WEBPACK_IMPORTED_MODULE_3__[\"getFunctionName\"])(handler) + \"\\nError: \" + e);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b[\"return\"])) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n}\n/** JSDoc */\n\n\nfunction instrumentConsole() {\n if (!('console' in global)) {\n return;\n }\n\n ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function (level) {\n if (!(level in global.console)) {\n return;\n }\n\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(global.console, level, function (originalConsoleLevel) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n triggerHandlers('console', {\n args: args,\n level: level\n }); // this fails for some browsers. :(\n\n if (originalConsoleLevel) {\n Function.prototype.apply.call(originalConsoleLevel, global.console, args);\n }\n };\n });\n });\n}\n/** JSDoc */\n\n\nfunction instrumentFetch() {\n if (!Object(_supports__WEBPACK_IMPORTED_MODULE_5__[\"supportsNativeFetch\"])()) {\n return;\n }\n\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(global, 'fetch', function (originalFetch) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var commonHandlerData = {\n args: args,\n fetchData: {\n method: getFetchMethod(args),\n url: getFetchUrl(args)\n },\n startTimestamp: Date.now()\n };\n triggerHandlers('fetch', tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, commonHandlerData));\n return originalFetch.apply(global, args).then(function (response) {\n triggerHandlers('fetch', tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, commonHandlerData, {\n endTimestamp: Date.now(),\n response: response\n }));\n return response;\n }, function (error) {\n triggerHandlers('fetch', tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, commonHandlerData, {\n endTimestamp: Date.now(),\n error: error\n }));\n throw error;\n });\n };\n });\n}\n/** Extract `method` from fetch call arguments */\n\n\nfunction getFetchMethod(fetchArgs) {\n if (fetchArgs === void 0) {\n fetchArgs = [];\n }\n\n if ('Request' in global && Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isInstanceOf\"])(fetchArgs[0], Request) && fetchArgs[0].method) {\n return String(fetchArgs[0].method).toUpperCase();\n }\n\n if (fetchArgs[1] && fetchArgs[1].method) {\n return String(fetchArgs[1].method).toUpperCase();\n }\n\n return 'GET';\n}\n/** Extract `url` from fetch call arguments */\n\n\nfunction getFetchUrl(fetchArgs) {\n if (fetchArgs === void 0) {\n fetchArgs = [];\n }\n\n if (typeof fetchArgs[0] === 'string') {\n return fetchArgs[0];\n }\n\n if ('Request' in global && Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isInstanceOf\"])(fetchArgs[0], Request)) {\n return fetchArgs[0].url;\n }\n\n return String(fetchArgs[0]);\n}\n/** JSDoc */\n\n\nfunction instrumentXHR() {\n if (!('XMLHttpRequest' in global)) {\n return;\n }\n\n var xhrproto = XMLHttpRequest.prototype;\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(xhrproto, 'open', function (originalOpen) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var url = args[1];\n this.__sentry_xhr__ = {\n method: Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1]\n }; // if Sentry key appears in URL, don't capture it as a request\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(url) && this.__sentry_xhr__.method === 'POST' && url.match(/sentry_key/)) {\n this.__sentry_own_request__ = true;\n }\n\n return originalOpen.apply(this, args);\n };\n });\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(xhrproto, 'send', function (originalSend) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var xhr = this; // tslint:disable-line:no-this-assignment\n\n var commonHandlerData = {\n args: args,\n startTimestamp: Date.now(),\n xhr: xhr\n };\n triggerHandlers('xhr', tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, commonHandlerData));\n xhr.addEventListener('readystatechange', function () {\n if (xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n if (xhr.__sentry_xhr__) {\n xhr.__sentry_xhr__.status_code = xhr.status;\n }\n } catch (e) {\n /* do nothing */\n }\n\n triggerHandlers('xhr', tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"]({}, commonHandlerData, {\n endTimestamp: Date.now()\n }));\n }\n });\n return originalSend.apply(this, args);\n };\n });\n}\n\nvar lastHref;\n/** JSDoc */\n\nfunction instrumentHistory() {\n if (!Object(_supports__WEBPACK_IMPORTED_MODULE_5__[\"supportsHistory\"])()) {\n return;\n }\n\n var oldOnPopState = global.onpopstate;\n\n global.onpopstate = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var to = global.location.href; // keep track of the current URL state, as we always receive only the updated state\n\n var from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to\n });\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, args);\n }\n };\n /** @hidden */\n\n\n function historyReplacementFunction(originalHistoryFunction) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var url = args.length > 2 ? args[2] : undefined;\n\n if (url) {\n // coerce to string (this is what pushState does)\n var from = lastHref;\n var to = String(url); // keep track of the current URL state, as we always receive only the updated state\n\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to\n });\n }\n\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(global.history, 'pushState', historyReplacementFunction);\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(global.history, 'replaceState', historyReplacementFunction);\n}\n/** JSDoc */\n\n\nfunction instrumentDOM() {\n if (!('document' in global)) {\n return;\n } // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n\n\n global.document.addEventListener('click', domEventHandler('click', triggerHandlers.bind(null, 'dom')), false);\n global.document.addEventListener('keypress', keypressEventHandler(triggerHandlers.bind(null, 'dom')), false); // After hooking into document bubbled up click and keypresses events, we also hook into user handled click & keypresses.\n\n ['EventTarget', 'Node'].forEach(function (target) {\n var proto = global[target] && global[target].prototype;\n\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(proto, 'addEventListener', function (original) {\n return function (eventName, fn, options) {\n if (fn && fn.handleEvent) {\n if (eventName === 'click') {\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(fn, 'handleEvent', function (innerOriginal) {\n return function (event) {\n domEventHandler('click', triggerHandlers.bind(null, 'dom'))(event);\n return innerOriginal.call(this, event);\n };\n });\n }\n\n if (eventName === 'keypress') {\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(fn, 'handleEvent', function (innerOriginal) {\n return function (event) {\n keypressEventHandler(triggerHandlers.bind(null, 'dom'))(event);\n return innerOriginal.call(this, event);\n };\n });\n }\n } else {\n if (eventName === 'click') {\n domEventHandler('click', triggerHandlers.bind(null, 'dom'), true)(this);\n }\n\n if (eventName === 'keypress') {\n keypressEventHandler(triggerHandlers.bind(null, 'dom'))(this);\n }\n }\n\n return original.call(this, eventName, fn, options);\n };\n });\n Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"fill\"])(proto, 'removeEventListener', function (original) {\n return function (eventName, fn, options) {\n var callback = fn;\n\n try {\n callback = callback && (callback.__sentry_wrapped__ || callback);\n } catch (e) {// ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n\n return original.call(this, eventName, callback, options);\n };\n });\n });\n}\n\nvar debounceDuration = 1000;\nvar debounceTimer = 0;\nvar keypressTimeout;\nvar lastCapturedEvent;\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param name the event name (e.g. \"click\")\n * @param handler function that will be triggered\n * @param debounce decides whether it should wait till another event loop\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\n\nfunction domEventHandler(name, handler, debounce) {\n if (debounce === void 0) {\n debounce = false;\n }\n\n return function (event) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n keypressTimeout = undefined; // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n\n if (!event || lastCapturedEvent === event) {\n return;\n }\n\n lastCapturedEvent = event;\n\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n if (debounce) {\n debounceTimer = setTimeout(function () {\n handler({\n event: event,\n name: name\n });\n });\n } else {\n handler({\n event: event,\n name: name\n });\n }\n };\n}\n/**\n * Wraps addEventListener to capture keypress UI events\n * @param handler function that will be triggered\n * @returns wrapped keypress events handler\n * @hidden\n */\n\n\nfunction keypressEventHandler(handler) {\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function (event) {\n var target;\n\n try {\n target = event.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n\n var tagName = target && target.tagName; // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n\n if (!tagName || tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) {\n return;\n } // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n\n\n if (!keypressTimeout) {\n domEventHandler('input', handler)(event);\n }\n\n clearTimeout(keypressTimeout);\n keypressTimeout = setTimeout(function () {\n keypressTimeout = undefined;\n }, debounceDuration);\n };\n}\n\nvar _oldOnErrorHandler = null;\n/** JSDoc */\n\nfunction instrumentError() {\n _oldOnErrorHandler = global.onerror;\n\n global.onerror = function (msg, url, line, column, error) {\n triggerHandlers('error', {\n column: column,\n error: error,\n line: line,\n msg: msg,\n url: url\n });\n\n if (_oldOnErrorHandler) {\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n}\n\nvar _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\n\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n\n global.onunhandledrejection = function (e) {\n triggerHandlers('unhandledrejection', e);\n\n if (_oldOnUnhandledRejectionHandler) {\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2luc3RydW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luc3RydW1lbnQudHM/YTIzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiB0c2xpbnQ6ZGlzYWJsZTpvbmx5LWFycm93LWZ1bmN0aW9ucyBuby11bnNhZmUtYW55ICovXG5cbmltcG9ydCB7IFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBpc0luc3RhbmNlT2YsIGlzU3RyaW5nIH0gZnJvbSAnLi9pcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWUsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBmaWxsIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgc3VwcG9ydHNIaXN0b3J5LCBzdXBwb3J0c05hdGl2ZUZldGNoIH0gZnJvbSAnLi9zdXBwb3J0cyc7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbi8qKiBPYmplY3QgZGVzY3JpYmluZyBoYW5kbGVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgZm9yIGEgZ2l2ZW4gYHR5cGVgIG9mIGluc3RydW1lbnRhdGlvbiAqL1xuaW50ZXJmYWNlIEluc3RydW1lbnRIYW5kbGVyIHtcbiAgdHlwZTogSW5zdHJ1bWVudEhhbmRsZXJUeXBlO1xuICBjYWxsYmFjazogSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFjaztcbn1cbnR5cGUgSW5zdHJ1bWVudEhhbmRsZXJUeXBlID1cbiAgfCAnY29uc29sZSdcbiAgfCAnZG9tJ1xuICB8ICdmZXRjaCdcbiAgfCAnaGlzdG9yeSdcbiAgfCAnc2VudHJ5J1xuICB8ICd4aHInXG4gIHwgJ2Vycm9yJ1xuICB8ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudHlwZSBJbnN0cnVtZW50SGFuZGxlckNhbGxiYWNrID0gKGRhdGE6IGFueSkgPT4gdm9pZDtcblxuLyoqXG4gKiBJbnN0cnVtZW50IG5hdGl2ZSBBUElzIHRvIGNhbGwgaGFuZGxlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYnJlYWRjcnVtYnMsIEFQTSBzcGFucyBldGMuXG4gKiAgLSBDb25zb2xlIEFQSVxuICogIC0gRmV0Y2ggQVBJXG4gKiAgLSBYSFIgQVBJXG4gKiAgLSBIaXN0b3J5IEFQSVxuICogIC0gRE9NIEFQSSAoY2xpY2svdHlwaW5nKVxuICogIC0gRXJyb3IgQVBJXG4gKiAgLSBVbmhhbmRsZWRSZWplY3Rpb24gQVBJXG4gKi9cblxuY29uc3QgaGFuZGxlcnM6IHsgW2tleSBpbiBJbnN0cnVtZW50SGFuZGxlclR5cGVdPzogSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFja1tdIH0gPSB7fTtcbmNvbnN0IGluc3RydW1lbnRlZDogeyBba2V5IGluIEluc3RydW1lbnRIYW5kbGVyVHlwZV0/OiBib29sZWFuIH0gPSB7fTtcblxuLyoqIEluc3RydW1lbnRzIGdpdmVuIEFQSSAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudCh0eXBlOiBJbnN0cnVtZW50SGFuZGxlclR5cGUpOiB2b2lkIHtcbiAgaWYgKGluc3RydW1lbnRlZFt0eXBlXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluc3RydW1lbnRlZFt0eXBlXSA9IHRydWU7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnY29uc29sZSc6XG4gICAgICBpbnN0cnVtZW50Q29uc29sZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG9tJzpcbiAgICAgIGluc3RydW1lbnRET00oKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3hocic6XG4gICAgICBpbnN0cnVtZW50WEhSKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmZXRjaCc6XG4gICAgICBpbnN0cnVtZW50RmV0Y2goKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2hpc3RvcnknOlxuICAgICAgaW5zdHJ1bWVudEhpc3RvcnkoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIGluc3RydW1lbnRFcnJvcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndW5oYW5kbGVkcmVqZWN0aW9uJzpcbiAgICAgIGluc3RydW1lbnRVbmhhbmRsZWRSZWplY3Rpb24oKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2dnZXIud2FybigndW5rbm93biBpbnN0cnVtZW50YXRpb24gdHlwZTonLCB0eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBoYW5kbGVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBnaXZlbiB0eXBlIG9mIGluc3RydW1lbnRhdGlvbiB0cmlnZ2Vycy5cbiAqIFVzZSBhdCB5b3VyIG93biByaXNrLCB0aGlzIG1pZ2h0IGJyZWFrIHdpdGhvdXQgY2hhbmdlbG9nIG5vdGljZSwgb25seSB1c2VkIGludGVybmFsbHkuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXI6IEluc3RydW1lbnRIYW5kbGVyKTogdm9pZCB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlci50eXBlICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgaGFuZGxlci5jYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICBoYW5kbGVyc1toYW5kbGVyLnR5cGVdID0gaGFuZGxlcnNbaGFuZGxlci50eXBlXSB8fCBbXTtcbiAgKGhhbmRsZXJzW2hhbmRsZXIudHlwZV0gYXMgSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFja1tdKS5wdXNoKGhhbmRsZXIuY2FsbGJhY2spO1xuICBpbnN0cnVtZW50KGhhbmRsZXIudHlwZSk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gdHJpZ2dlckhhbmRsZXJzKHR5cGU6IEluc3RydW1lbnRIYW5kbGVyVHlwZSwgZGF0YTogYW55KTogdm9pZCB7XG4gIGlmICghdHlwZSB8fCAhaGFuZGxlcnNbdHlwZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnNbdHlwZV0gfHwgW10pIHtcbiAgICB0cnkge1xuICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6ICR7dHlwZX1cXG5OYW1lOiAke2dldEZ1bmN0aW9uTmFtZShcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICApfVxcbkVycm9yOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudENvbnNvbGUoKTogdm9pZCB7XG4gIGlmICghKCdjb25zb2xlJyBpbiBnbG9iYWwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnbG9nJywgJ2Fzc2VydCddLmZvckVhY2goZnVuY3Rpb24obGV2ZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghKGxldmVsIGluIGdsb2JhbC5jb25zb2xlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwoZ2xvYmFsLmNvbnNvbGUsIGxldmVsLCBmdW5jdGlvbihvcmlnaW5hbENvbnNvbGVMZXZlbDogKCkgPT4gYW55KTogRnVuY3Rpb24ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRyaWdnZXJIYW5kbGVycygnY29uc29sZScsIHsgYXJncywgbGV2ZWwgfSk7XG5cbiAgICAgICAgLy8gdGhpcyBmYWlscyBmb3Igc29tZSBicm93c2Vycy4gOihcbiAgICAgICAgaWYgKG9yaWdpbmFsQ29uc29sZUxldmVsKSB7XG4gICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwob3JpZ2luYWxDb25zb2xlTGV2ZWwsIGdsb2JhbC5jb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudEZldGNoKCk6IHZvaWQge1xuICBpZiAoIXN1cHBvcnRzTmF0aXZlRmV0Y2goKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbGwoZ2xvYmFsLCAnZmV0Y2gnLCBmdW5jdGlvbihvcmlnaW5hbEZldGNoOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICBjb25zdCBjb21tb25IYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgYXJncyxcbiAgICAgICAgZmV0Y2hEYXRhOiB7XG4gICAgICAgICAgbWV0aG9kOiBnZXRGZXRjaE1ldGhvZChhcmdzKSxcbiAgICAgICAgICB1cmw6IGdldEZldGNoVXJsKGFyZ3MpLFxuICAgICAgICB9LFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIH07XG5cbiAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgIC4uLmNvbW1vbkhhbmRsZXJEYXRhLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbEZldGNoLmFwcGx5KGdsb2JhbCwgYXJncykudGhlbihcbiAgICAgICAgKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAuLi5jb21tb25IYW5kbGVyRGF0YSxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAuLi5jb21tb25IYW5kbGVyRGF0YSxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgU2VudHJ5V3JhcHBlZFhNTEh0dHBSZXF1ZXN0IGV4dGVuZHMgWE1MSHR0cFJlcXVlc3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIF9fc2VudHJ5X3hocl9fPzoge1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgc3RhdHVzX2NvZGU/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBFeHRyYWN0IGBtZXRob2RgIGZyb20gZmV0Y2ggY2FsbCBhcmd1bWVudHMgKi9cbmZ1bmN0aW9uIGdldEZldGNoTWV0aG9kKGZldGNoQXJnczogYW55W10gPSBbXSk6IHN0cmluZyB7XG4gIGlmICgnUmVxdWVzdCcgaW4gZ2xvYmFsICYmIGlzSW5zdGFuY2VPZihmZXRjaEFyZ3NbMF0sIFJlcXVlc3QpICYmIGZldGNoQXJnc1swXS5tZXRob2QpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1swXS5tZXRob2QpLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgaWYgKGZldGNoQXJnc1sxXSAmJiBmZXRjaEFyZ3NbMV0ubWV0aG9kKSB7XG4gICAgcmV0dXJuIFN0cmluZyhmZXRjaEFyZ3NbMV0ubWV0aG9kKS50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIHJldHVybiAnR0VUJztcbn1cblxuLyoqIEV4dHJhY3QgYHVybGAgZnJvbSBmZXRjaCBjYWxsIGFyZ3VtZW50cyAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hVcmwoZmV0Y2hBcmdzOiBhbnlbXSA9IFtdKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBmZXRjaEFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZldGNoQXJnc1swXTtcbiAgfVxuICBpZiAoJ1JlcXVlc3QnIGluIGdsb2JhbCAmJiBpc0luc3RhbmNlT2YoZmV0Y2hBcmdzWzBdLCBSZXF1ZXN0KSkge1xuICAgIHJldHVybiBmZXRjaEFyZ3NbMF0udXJsO1xuICB9XG4gIHJldHVybiBTdHJpbmcoZmV0Y2hBcmdzWzBdKTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50WEhSKCk6IHZvaWQge1xuICBpZiAoISgnWE1MSHR0cFJlcXVlc3QnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB4aHJwcm90byA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZTtcblxuICBmaWxsKHhocnByb3RvLCAnb3BlbicsIGZ1bmN0aW9uKG9yaWdpbmFsT3BlbjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBTZW50cnlXcmFwcGVkWE1MSHR0cFJlcXVlc3QsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICBjb25zdCB1cmwgPSBhcmdzWzFdO1xuICAgICAgdGhpcy5fX3NlbnRyeV94aHJfXyA9IHtcbiAgICAgICAgbWV0aG9kOiBpc1N0cmluZyhhcmdzWzBdKSA/IGFyZ3NbMF0udG9VcHBlckNhc2UoKSA6IGFyZ3NbMF0sXG4gICAgICAgIHVybDogYXJnc1sxXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIFNlbnRyeSBrZXkgYXBwZWFycyBpbiBVUkwsIGRvbid0IGNhcHR1cmUgaXQgYXMgYSByZXF1ZXN0XG4gICAgICBpZiAoaXNTdHJpbmcodXJsKSAmJiB0aGlzLl9fc2VudHJ5X3hocl9fLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHVybC5tYXRjaCgvc2VudHJ5X2tleS8pKSB7XG4gICAgICAgIHRoaXMuX19zZW50cnlfb3duX3JlcXVlc3RfXyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE9wZW4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgZmlsbCh4aHJwcm90bywgJ3NlbmQnLCBmdW5jdGlvbihvcmlnaW5hbFNlbmQ6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odGhpczogU2VudHJ5V3JhcHBlZFhNTEh0dHBSZXF1ZXN0LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgY29uc3QgeGhyID0gdGhpczsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby10aGlzLWFzc2lnbm1lbnRcbiAgICAgIGNvbnN0IGNvbW1vbkhhbmRsZXJEYXRhID0ge1xuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgeGhyLFxuICAgICAgfTtcblxuICAgICAgdHJpZ2dlckhhbmRsZXJzKCd4aHInLCB7XG4gICAgICAgIC4uLmNvbW1vbkhhbmRsZXJEYXRhLFxuICAgICAgfSk7XG5cbiAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0b3VjaGluZyBzdGF0dXNDb2RlIGluIHNvbWUgcGxhdGZvcm1zIHRocm93c1xuICAgICAgICAgICAgLy8gYW4gZXhjZXB0aW9uXG4gICAgICAgICAgICBpZiAoeGhyLl9fc2VudHJ5X3hocl9fKSB7XG4gICAgICAgICAgICAgIHhoci5fX3NlbnRyeV94aHJfXy5zdGF0dXNfY29kZSA9IHhoci5zdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ3hocicsIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkhhbmRsZXJEYXRhLFxuICAgICAgICAgICAgZW5kVGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9yaWdpbmFsU2VuZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9KTtcbn1cblxubGV0IGxhc3RIcmVmOiBzdHJpbmc7XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudEhpc3RvcnkoKTogdm9pZCB7XG4gIGlmICghc3VwcG9ydHNIaXN0b3J5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGRPblBvcFN0YXRlID0gZ2xvYmFsLm9ucG9wc3RhdGU7XG4gIGdsb2JhbC5vbnBvcHN0YXRlID0gZnVuY3Rpb24odGhpczogV2luZG93RXZlbnRIYW5kbGVycywgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IHRvID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XG4gICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCBmcm9tID0gbGFzdEhyZWY7XG4gICAgbGFzdEhyZWYgPSB0bztcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCB7XG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgfSk7XG4gICAgaWYgKG9sZE9uUG9wU3RhdGUpIHtcbiAgICAgIHJldHVybiBvbGRPblBvcFN0YXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfTtcblxuICAvKiogQGhpZGRlbiAqL1xuICBmdW5jdGlvbiBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbihvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBIaXN0b3J5LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgY29uc3QgdXJsID0gYXJncy5sZW5ndGggPiAyID8gYXJnc1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgLy8gY29lcmNlIHRvIHN0cmluZyAodGhpcyBpcyB3aGF0IHB1c2hTdGF0ZSBkb2VzKVxuICAgICAgICBjb25zdCBmcm9tID0gbGFzdEhyZWY7XG4gICAgICAgIGNvbnN0IHRvID0gU3RyaW5nKHVybCk7XG4gICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgVVJMIHN0YXRlLCBhcyB3ZSBhbHdheXMgcmVjZWl2ZSBvbmx5IHRoZSB1cGRhdGVkIHN0YXRlXG4gICAgICAgIGxhc3RIcmVmID0gdG87XG4gICAgICAgIHRyaWdnZXJIYW5kbGVycygnaGlzdG9yeScsIHtcbiAgICAgICAgICBmcm9tLFxuICAgICAgICAgIHRvLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgZmlsbChnbG9iYWwuaGlzdG9yeSwgJ3B1c2hTdGF0ZScsIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKTtcbiAgZmlsbChnbG9iYWwuaGlzdG9yeSwgJ3JlcGxhY2VTdGF0ZScsIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50RE9NKCk6IHZvaWQge1xuICBpZiAoISgnZG9jdW1lbnQnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDYXB0dXJlIGJyZWFkY3J1bWJzIGZyb20gYW55IGNsaWNrIHRoYXQgaXMgdW5oYW5kbGVkIC8gYnViYmxlZCB1cCBhbGwgdGhlIHdheVxuICAvLyB0byB0aGUgZG9jdW1lbnQuIERvIHRoaXMgYmVmb3JlIHdlIGluc3RydW1lbnQgYWRkRXZlbnRMaXN0ZW5lci5cbiAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG9tRXZlbnRIYW5kbGVyKCdjbGljaycsIHRyaWdnZXJIYW5kbGVycy5iaW5kKG51bGwsICdkb20nKSksIGZhbHNlKTtcbiAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3NFdmVudEhhbmRsZXIodHJpZ2dlckhhbmRsZXJzLmJpbmQobnVsbCwgJ2RvbScpKSwgZmFsc2UpO1xuXG4gIC8vIEFmdGVyIGhvb2tpbmcgaW50byBkb2N1bWVudCBidWJibGVkIHVwIGNsaWNrIGFuZCBrZXlwcmVzc2VzIGV2ZW50cywgd2UgYWxzbyBob29rIGludG8gdXNlciBoYW5kbGVkIGNsaWNrICYga2V5cHJlc3Nlcy5cbiAgWydFdmVudFRhcmdldCcsICdOb2RlJ10uZm9yRWFjaCgodGFyZ2V0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcm90byA9IChnbG9iYWwgYXMgYW55KVt0YXJnZXRdICYmIChnbG9iYWwgYXMgYW55KVt0YXJnZXRdLnByb3RvdHlwZTtcblxuICAgIGlmICghcHJvdG8gfHwgIXByb3RvLmhhc093blByb3BlcnR5IHx8ICFwcm90by5oYXNPd25Qcm9wZXJ0eSgnYWRkRXZlbnRMaXN0ZW5lcicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsbChwcm90bywgJ2FkZEV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbihcbiAgICAgIG9yaWdpbmFsOiAoKSA9PiB2b2lkLFxuICAgICk6IChcbiAgICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgZm46IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgICBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICAgICkgPT4gdm9pZCB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oXG4gICAgICAgIHRoaXM6IGFueSxcbiAgICAgICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIGZuOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgICAgICBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICAgICAgKTogKGV2ZW50TmFtZTogc3RyaW5nLCBmbjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgY2FwdHVyZT86IGJvb2xlYW4sIHNlY3VyZT86IGJvb2xlYW4pID0+IHZvaWQge1xuICAgICAgICBpZiAoZm4gJiYgKGZuIGFzIEV2ZW50TGlzdGVuZXJPYmplY3QpLmhhbmRsZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgZmlsbChmbiwgJ2hhbmRsZUV2ZW50JywgZnVuY3Rpb24oaW5uZXJPcmlnaW5hbDogKCkgPT4gdm9pZCk6IChjYXVnaHRFdmVudDogRXZlbnQpID0+IHZvaWQge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogYW55LCBldmVudDogRXZlbnQpOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIHtcbiAgICAgICAgICAgICAgICBkb21FdmVudEhhbmRsZXIoJ2NsaWNrJywgdHJpZ2dlckhhbmRsZXJzLmJpbmQobnVsbCwgJ2RvbScpKShldmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyT3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgICAgICAgZmlsbChmbiwgJ2hhbmRsZUV2ZW50JywgZnVuY3Rpb24oaW5uZXJPcmlnaW5hbDogKCkgPT4gdm9pZCk6IChjYXVnaHRFdmVudDogRXZlbnQpID0+IHZvaWQge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogYW55LCBldmVudDogRXZlbnQpOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIHtcbiAgICAgICAgICAgICAgICBrZXlwcmVzc0V2ZW50SGFuZGxlcih0cmlnZ2VySGFuZGxlcnMuYmluZChudWxsLCAnZG9tJykpKGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXJPcmlnaW5hbC5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICBkb21FdmVudEhhbmRsZXIoJ2NsaWNrJywgdHJpZ2dlckhhbmRsZXJzLmJpbmQobnVsbCwgJ2RvbScpLCB0cnVlKSh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgICAgICAga2V5cHJlc3NFdmVudEhhbmRsZXIodHJpZ2dlckhhbmRsZXJzLmJpbmQobnVsbCwgJ2RvbScpKSh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudE5hbWUsIGZuLCBvcHRpb25zKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWxsKHByb3RvLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsIGZ1bmN0aW9uKFxuICAgICAgb3JpZ2luYWw6ICgpID0+IHZvaWQsXG4gICAgKTogKFxuICAgICAgdGhpczogYW55LFxuICAgICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICBmbjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICAgIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICAgKSA9PiAoKSA9PiB2b2lkIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogYW55LFxuICAgICAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgZm46IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgICAgIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICAgICApOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gZm4gYXMgV3JhcHBlZEZ1bmN0aW9uO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgJiYgKGNhbGxiYWNrLl9fc2VudHJ5X3dyYXBwZWRfXyB8fCBjYWxsYmFjayk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUsIGFjY2Vzc2luZyBfX3NlbnRyeV93cmFwcGVkX18gd2lsbCB0aHJvdyBpbiBzb21lIFNlbGVuaXVtIGVudmlyb25tZW50c1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlRHVyYXRpb246IG51bWJlciA9IDEwMDA7XG5sZXQgZGVib3VuY2VUaW1lcjogbnVtYmVyID0gMDtcbmxldCBrZXlwcmVzc1RpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbmxldCBsYXN0Q2FwdHVyZWRFdmVudDogRXZlbnQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogV3JhcHMgYWRkRXZlbnRMaXN0ZW5lciB0byBjYXB0dXJlIFVJIGJyZWFkY3J1bWJzXG4gKiBAcGFyYW0gbmFtZSB0aGUgZXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpXG4gKiBAcGFyYW0gaGFuZGxlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkXG4gKiBAcGFyYW0gZGVib3VuY2UgZGVjaWRlcyB3aGV0aGVyIGl0IHNob3VsZCB3YWl0IHRpbGwgYW5vdGhlciBldmVudCBsb29wXG4gKiBAcmV0dXJucyB3cmFwcGVkIGJyZWFkY3J1bWIgZXZlbnRzIGhhbmRsZXJcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZG9tRXZlbnRIYW5kbGVyKG5hbWU6IHN0cmluZywgaGFuZGxlcjogRnVuY3Rpb24sIGRlYm91bmNlOiBib29sZWFuID0gZmFsc2UpOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChldmVudDogRXZlbnQpID0+IHtcbiAgICAvLyByZXNldCBrZXlwcmVzcyB0aW1lb3V0OyBlLmcuIHRyaWdnZXJpbmcgYSAnY2xpY2snIGFmdGVyXG4gICAgLy8gYSAna2V5cHJlc3MnIHdpbGwgcmVzZXQgdGhlIGtleXByZXNzIGRlYm91bmNlIHNvIHRoYXQgYSBuZXdcbiAgICAvLyBzZXQgb2Yga2V5cHJlc3NlcyBjYW4gYmUgcmVjb3JkZWRcbiAgICBrZXlwcmVzc1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGlzIGhhbmRsZXIgbWlnaHQgdHJpZ2dlciBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAvLyBldmVudCAoZS5nLiBldmVudCBwcm9wYWdhdGlvbiB0aHJvdWdoIG5vZGUgYW5jZXN0b3JzKS4gSWdub3JlIGlmIHdlJ3ZlXG4gICAgLy8gYWxyZWFkeSBjYXB0dXJlZCB0aGUgZXZlbnQuXG4gICAgaWYgKCFldmVudCB8fCBsYXN0Q2FwdHVyZWRFdmVudCA9PT0gZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYXN0Q2FwdHVyZWRFdmVudCA9IGV2ZW50O1xuXG4gICAgaWYgKGRlYm91bmNlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcbiAgICB9XG5cbiAgICBpZiAoZGVib3VuY2UpIHtcbiAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlcih7IGV2ZW50LCBuYW1lIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXIoeyBldmVudCwgbmFtZSB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogV3JhcHMgYWRkRXZlbnRMaXN0ZW5lciB0byBjYXB0dXJlIGtleXByZXNzIFVJIGV2ZW50c1xuICogQHBhcmFtIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHRyaWdnZXJlZFxuICogQHJldHVybnMgd3JhcHBlZCBrZXlwcmVzcyBldmVudHMgaGFuZGxlclxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBrZXlwcmVzc0V2ZW50SGFuZGxlcihoYW5kbGVyOiBGdW5jdGlvbik6IChldmVudDogRXZlbnQpID0+IHZvaWQge1xuICAvLyBUT0RPOiBpZiBzb21laG93IHVzZXIgc3dpdGNoZXMga2V5cHJlc3MgdGFyZ2V0IGJlZm9yZVxuICAvLyAgICAgICBkZWJvdW5jZSB0aW1lb3V0IGlzIHRyaWdnZXJlZCwgd2Ugd2lsbCBvbmx5IGNhcHR1cmVcbiAgLy8gICAgICAgYSBzaW5nbGUgYnJlYWRjcnVtYiBmcm9tIHRoZSBGSVJTVCB0YXJnZXQgKGFjY2VwdGFibGU/KVxuICByZXR1cm4gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGxldCB0YXJnZXQ7XG5cbiAgICB0cnkge1xuICAgICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGp1c3QgYWNjZXNzaW5nIGV2ZW50IHByb3BlcnRpZXMgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIHJhcmUgY2lyY3Vtc3RhbmNlc1xuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLWpzL2lzc3Vlcy84MzhcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWdOYW1lID0gdGFyZ2V0ICYmICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU7XG5cbiAgICAvLyBvbmx5IGNvbnNpZGVyIGtleXByZXNzIGV2ZW50cyBvbiBhY3R1YWwgaW5wdXQgZWxlbWVudHNcbiAgICAvLyB0aGlzIHdpbGwgZGlzcmVnYXJkIGtleXByZXNzZXMgdGFyZ2V0aW5nIGJvZHkgKGUuZy4gdGFiYmluZ1xuICAgIC8vIHRocm91Z2ggZWxlbWVudHMsIGhvdGtleXMsIGV0YylcbiAgICBpZiAoIXRhZ05hbWUgfHwgKHRhZ05hbWUgIT09ICdJTlBVVCcgJiYgdGFnTmFtZSAhPT0gJ1RFWFRBUkVBJyAmJiAhKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuaXNDb250ZW50RWRpdGFibGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gcmVjb3JkIGZpcnN0IGtleXByZXNzIGluIGEgc2VyaWVzLCBidXQgaWdub3JlIHN1YnNlcXVlbnRcbiAgICAvLyBrZXlwcmVzc2VzIHVudGlsIGRlYm91bmNlIGNsZWFyc1xuICAgIGlmICgha2V5cHJlc3NUaW1lb3V0KSB7XG4gICAgICBkb21FdmVudEhhbmRsZXIoJ2lucHV0JywgaGFuZGxlcikoZXZlbnQpO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQoa2V5cHJlc3NUaW1lb3V0KTtcblxuICAgIGtleXByZXNzVGltZW91dCA9IChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGtleXByZXNzVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9LCBkZWJvdW5jZUR1cmF0aW9uKSBhcyBhbnkpIGFzIG51bWJlcjtcbiAgfTtcbn1cblxubGV0IF9vbGRPbkVycm9ySGFuZGxlcjogT25FcnJvckV2ZW50SGFuZGxlciA9IG51bGw7XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRFcnJvcigpOiB2b2lkIHtcbiAgX29sZE9uRXJyb3JIYW5kbGVyID0gZ2xvYmFsLm9uZXJyb3I7XG5cbiAgZ2xvYmFsLm9uZXJyb3IgPSBmdW5jdGlvbihtc2c6IGFueSwgdXJsOiBhbnksIGxpbmU6IGFueSwgY29sdW1uOiBhbnksIGVycm9yOiBhbnkpOiBib29sZWFuIHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2Vycm9yJywge1xuICAgICAgY29sdW1uLFxuICAgICAgZXJyb3IsXG4gICAgICBsaW5lLFxuICAgICAgbXNnLFxuICAgICAgdXJsLFxuICAgIH0pO1xuXG4gICAgaWYgKF9vbGRPbkVycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIF9vbGRPbkVycm9ySGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxubGV0IF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXI6ICgoZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50VW5oYW5kbGVkUmVqZWN0aW9uKCk6IHZvaWQge1xuICBfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uO1xuXG4gIGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbiA9IGZ1bmN0aW9uKGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHRyaWdnZXJIYW5kbGVycygndW5oYW5kbGVkcmVqZWN0aW9uJywgZSk7XG5cbiAgICBpZiAoX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWtCQTs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF2QkE7QUF5QkE7QUFFQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUtBO0FBQ0E7Ozs7Ozs7Ozs7OztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFOQTtBQURBO0FBTEE7QUFnQkE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQU5BO0FBU0E7QUFJQTtBQUVBO0FBRUE7QUFDQTtBQUZBO0FBSUE7QUFQQTtBQVVBO0FBRUE7QUFDQTtBQUZBO0FBSUE7QUFmQTtBQWRBO0FBREE7QUFtQ0E7QUFZQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQURBO0FBaUJBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFEQTtBQUdBO0FBZkE7QUFrQkE7QUE5QkE7QUFEQTtBQWtDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7QUFQQTtBQTJDQTtBQVFBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQVpBO0FBUkE7QUFsREE7QUEwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQURBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXhCQTtBQTBCQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWpCQTtBQXFCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBM0JBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/instrument.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/is.js": -/*!***********************************************!*\ - !*** ../node_modules/@sentry/utils/esm/is.js ***! - \***********************************************/ -/*! exports provided: isError, isErrorEvent, isDOMError, isDOMException, isString, isPrimitive, isPlainObject, isEvent, isElement, isRegExp, isThenable, isSyntheticEvent, isInstanceOf */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isError\", function() { return isError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isErrorEvent\", function() { return isErrorEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isDOMError\", function() { return isDOMError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isDOMException\", function() { return isDOMException; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isString\", function() { return isString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPrimitive\", function() { return isPrimitive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlainObject\", function() { return isPlainObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isEvent\", function() { return isEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isElement\", function() { return isElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isRegExp\", function() { return isRegExp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isThenable\", function() { return isThenable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSyntheticEvent\", function() { return isSyntheticEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isInstanceOf\", function() { return isInstanceOf; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\n\nfunction isError(wat) {\n switch (Object.prototype.toString.call(wat)) {\n case '[object Error]':\n return true;\n\n case '[object Exception]':\n return true;\n\n case '[object DOMException]':\n return true;\n\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isErrorEvent(wat) {\n return Object.prototype.toString.call(wat) === '[object ErrorEvent]';\n}\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isDOMError(wat) {\n return Object.prototype.toString.call(wat) === '[object DOMError]';\n}\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isDOMException(wat) {\n return Object.prototype.toString.call(wat) === '[object DOMException]';\n}\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isString(wat) {\n return Object.prototype.toString.call(wat) === '[object String]';\n}\n/**\n * Checks whether given value's is a primitive (undefined, null, number, boolean, string)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isPrimitive(wat) {\n return wat === null || _typeof(wat) !== 'object' && typeof wat !== 'function';\n}\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isPlainObject(wat) {\n return Object.prototype.toString.call(wat) === '[object Object]';\n}\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isEvent(wat) {\n // tslint:disable-next-line:strict-type-predicates\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isElement(wat) {\n // tslint:disable-next-line:strict-type-predicates\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isRegExp(wat) {\n return Object.prototype.toString.call(wat) === '[object RegExp]';\n}\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\n\nfunction isThenable(wat) {\n // tslint:disable:no-unsafe-any\n return Boolean(wat && wat.then && typeof wat.then === 'function'); // tslint:enable:no-unsafe-any\n}\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isSyntheticEvent(wat) {\n // tslint:disable-next-line:no-unsafe-any\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\n\nfunction isInstanceOf(wat, base) {\n try {\n // tslint:disable-next-line:no-unsafe-any\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2lzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pcy50cz9lMTNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlXG4gKiB7QGxpbmsgaXNFcnJvcn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHN3aXRjaCAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkpIHtcbiAgICBjYXNlICdbb2JqZWN0IEVycm9yXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdbb2JqZWN0IEV4Y2VwdGlvbl0nOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnW29iamVjdCBET01FeGNlcHRpb25dJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaXNJbnN0YW5jZU9mKHdhdCwgRXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIEVycm9yRXZlbnRcbiAqIHtAbGluayBpc0Vycm9yRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvckV2ZW50KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgRXJyb3JFdmVudF0nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBET01FcnJvclxuICoge0BsaW5rIGlzRE9NRXJyb3J9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNET01FcnJvcih3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IERPTUVycm9yXSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIERPTUV4Y2VwdGlvblxuICoge0BsaW5rIGlzRE9NRXhjZXB0aW9ufS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRE9NRXhjZXB0aW9uKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGEgc3RyaW5nXG4gKiB7QGxpbmsgaXNTdHJpbmd9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIGlzIGEgcHJpbWl0aXZlICh1bmRlZmluZWQsIG51bGwsIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nKVxuICoge0BsaW5rIGlzUHJpbWl0aXZlfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB3YXQgPT09IG51bGwgfHwgKHR5cGVvZiB3YXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB3YXQgIT09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbFxuICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBFdmVudCBpbnN0YW5jZVxuICoge0BsaW5rIGlzRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3RyaWN0LXR5cGUtcHJlZGljYXRlc1xuICByZXR1cm4gdHlwZW9mIEV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFdmVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2VcbiAqIHtAbGluayBpc0VsZW1lbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIHJldHVybiB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRWxlbWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIHJlZ2V4cFxuICoge0BsaW5rIGlzUmVnRXhwfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaGFzIGEgdGhlbiBmdW5jdGlvbi5cbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnNhZmUtYW55XG4gIHJldHVybiBCb29sZWFuKHdhdCAmJiB3YXQudGhlbiAmJiB0eXBlb2Ygd2F0LnRoZW4gPT09ICdmdW5jdGlvbicpO1xuICAvLyB0c2xpbnQ6ZW5hYmxlOm5vLXVuc2FmZS1hbnlcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudFxuICoge0BsaW5rIGlzU3ludGhldGljRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5zYWZlLWFueVxuICByZXR1cm4gaXNQbGFpbk9iamVjdCh3YXQpICYmICduYXRpdmVFdmVudCcgaW4gd2F0ICYmICdwcmV2ZW50RGVmYXVsdCcgaW4gd2F0ICYmICdzdG9wUHJvcGFnYXRpb24nIGluIHdhdDtcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIGluc3RhbmNlIG9mIHByb3ZpZGVkIGNvbnN0cnVjdG9yLlxuICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VPZih3YXQ6IGFueSwgYmFzZTogYW55KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuc2FmZS1hbnlcbiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTtcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQVVBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/is.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/logger.js": -/*!***************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/logger.js ***! - \***************************************************/ -/*! exports provided: logger */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"logger\", function() { return logger; });\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./misc */ \"../node_modules/@sentry/utils/esm/misc.js\");\n // TODO: Implement different loggers for different environments\n\nvar global = Object(_misc__WEBPACK_IMPORTED_MODULE_0__[\"getGlobalObject\"])();\n/** Prefix for logging strings */\n\nvar PREFIX = 'Sentry Logger ';\n/** JSDoc */\n\nvar Logger =\n/** @class */\nfunction () {\n /** JSDoc */\n function Logger() {\n this._enabled = false;\n }\n /** JSDoc */\n\n\n Logger.prototype.disable = function () {\n this._enabled = false;\n };\n /** JSDoc */\n\n\n Logger.prototype.enable = function () {\n this._enabled = true;\n };\n /** JSDoc */\n\n\n Logger.prototype.log = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n Object(_misc__WEBPACK_IMPORTED_MODULE_0__[\"consoleSandbox\"])(function () {\n global.console.log(PREFIX + \"[Log]: \" + args.join(' ')); // tslint:disable-line:no-console\n });\n };\n /** JSDoc */\n\n\n Logger.prototype.warn = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n Object(_misc__WEBPACK_IMPORTED_MODULE_0__[\"consoleSandbox\"])(function () {\n global.console.warn(PREFIX + \"[Warn]: \" + args.join(' ')); // tslint:disable-line:no-console\n });\n };\n /** JSDoc */\n\n\n Logger.prototype.error = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n Object(_misc__WEBPACK_IMPORTED_MODULE_0__[\"consoleSandbox\"])(function () {\n global.console.error(PREFIX + \"[Error]: \" + args.join(' ')); // tslint:disable-line:no-console\n });\n };\n\n return Logger;\n}(); // Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\n\n\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nvar logger = global.__SENTRY__.logger || (global.__SENTRY__.logger = new Logger());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2xvZ2dlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvbG9nZ2VyLnRzPzExZDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc29sZVNhbmRib3gsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG5cbi8vIFRPRE86IEltcGxlbWVudCBkaWZmZXJlbnQgbG9nZ2VycyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50c1xuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdyB8IE5vZGVKUy5HbG9iYWw+KCk7XG5cbi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqL1xuY29uc3QgUFJFRklYID0gJ1NlbnRyeSBMb2dnZXIgJztcblxuLyoqIEpTRG9jICovXG5jbGFzcyBMb2dnZXIge1xuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZW5hYmxlZDogYm9vbGVhbjtcblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLmxvZyhgJHtQUkVGSVh9W0xvZ106ICR7YXJncy5qb2luKCcgJyl9YCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tY29uc29sZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLndhcm4oYCR7UFJFRklYfVtXYXJuXTogJHthcmdzLmpvaW4oJyAnKX1gKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1jb25zb2xlXG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGVycm9yKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLmVycm9yKGAke1BSRUZJWH1bRXJyb3JdOiAke2FyZ3Muam9pbignICcpfWApOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWNvbnNvbGVcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBFbnN1cmUgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGxvZ2dlciBpbnN0YW5jZSwgZXZlbiBpZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBAc2VudHJ5L3V0aWxzIGFyZSBiZWluZyB1c2VkXG5nbG9iYWwuX19TRU5UUllfXyA9IGdsb2JhbC5fX1NFTlRSWV9fIHx8IHt9O1xuY29uc3QgbG9nZ2VyID0gKGdsb2JhbC5fX1NFTlRSWV9fLmxvZ2dlciBhcyBMb2dnZXIpIHx8IChnbG9iYWwuX19TRU5UUllfXy5sb2dnZXIgPSBuZXcgTG9nZ2VyKCkpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBSkE7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUpBO0FBQ0E7QUFPQTtBQWhEQTtBQUNBO0FBQ0E7QUFpREE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/logger.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/memo.js": -/*!*************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/memo.js ***! - \*************************************************/ -/*! exports provided: Memo */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Memo\", function() { return Memo; });\n// tslint:disable:no-unsafe-any\n\n/**\n * Memo class used for decycle json objects. Uses WeakSet if available otherwise array.\n */\nvar Memo =\n/** @class */\nfunction () {\n function Memo() {\n // tslint:disable-next-line\n this._hasWeakSet = typeof WeakSet === 'function';\n this._inner = this._hasWeakSet ? new WeakSet() : [];\n }\n /**\n * Sets obj to remember.\n * @param obj Object to remember\n */\n\n\n Memo.prototype.memoize = function (obj) {\n if (this._hasWeakSet) {\n if (this._inner.has(obj)) {\n return true;\n }\n\n this._inner.add(obj);\n\n return false;\n } // tslint:disable-next-line:prefer-for-of\n\n\n for (var i = 0; i < this._inner.length; i++) {\n var value = this._inner[i];\n\n if (value === obj) {\n return true;\n }\n }\n\n this._inner.push(obj);\n\n return false;\n };\n /**\n * Removes object from internal storage.\n * @param obj Object to forget\n */\n\n\n Memo.prototype.unmemoize = function (obj) {\n if (this._hasWeakSet) {\n this._inner[\"delete\"](obj);\n } else {\n for (var i = 0; i < this._inner.length; i++) {\n if (this._inner[i] === obj) {\n this._inner.splice(i, 1);\n\n break;\n }\n }\n }\n };\n\n return Memo;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL21lbW8uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL21lbW8udHM/MzJjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnNhZmUtYW55XG4vKipcbiAqIE1lbW8gY2xhc3MgdXNlZCBmb3IgZGVjeWNsZSBqc29uIG9iamVjdHMuIFVzZXMgV2Vha1NldCBpZiBhdmFpbGFibGUgb3RoZXJ3aXNlIGFycmF5LlxuICovXG5leHBvcnQgY2xhc3MgTWVtbyB7XG4gIC8qKiBEZXRlcm1pbmVzIGlmIFdlYWtTZXQgaXMgYXZhaWxhYmxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc1dlYWtTZXQ6IGJvb2xlYW47XG4gIC8qKiBFaXRoZXIgV2Vha1NldCBvciBBcnJheSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbm5lcjogYW55O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB0aGlzLl9oYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbic7XG4gICAgdGhpcy5faW5uZXIgPSB0aGlzLl9oYXNXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgb2JqIHRvIHJlbWVtYmVyLlxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCB0byByZW1lbWJlclxuICAgKi9cbiAgcHVibGljIG1lbW9pemUob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5faGFzV2Vha1NldCkge1xuICAgICAgaWYgKHRoaXMuX2lubmVyLmhhcyhvYmopKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5uZXIuYWRkKG9iaik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9pbm5lcltpXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbm5lci5wdXNoKG9iaik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb2JqZWN0IGZyb20gaW50ZXJuYWwgc3RvcmFnZS5cbiAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gZm9yZ2V0XG4gICAqL1xuICBwdWJsaWMgdW5tZW1vaXplKG9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hhc1dlYWtTZXQpIHtcbiAgICAgIHRoaXMuX2lubmVyLmRlbGV0ZShvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2lubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbm5lcltpXSA9PT0gb2JqKSB7XG4gICAgICAgICAgdGhpcy5faW5uZXIuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7OztBQUdBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBTkE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQWhCQTtBQW1CQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQVdBO0FBbkRBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/memo.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/misc.js": -/*!*************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/misc.js ***! - \*************************************************/ -/*! exports provided: dynamicRequire, isNodeEnv, getGlobalObject, uuid4, parseUrl, getEventDescription, consoleSandbox, addExceptionTypeValue, addExceptionMechanism, getLocationHref, htmlTreeAsString, crossPlatformPerformance, timestampWithMs, parseSemver, parseRetryAfterHeader, getFunctionName, addContextToFrame */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, global, module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dynamicRequire\", function() { return dynamicRequire; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNodeEnv\", function() { return isNodeEnv; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getGlobalObject\", function() { return getGlobalObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"uuid4\", function() { return uuid4; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseUrl\", function() { return parseUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEventDescription\", function() { return getEventDescription; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"consoleSandbox\", function() { return consoleSandbox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addExceptionTypeValue\", function() { return addExceptionTypeValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addExceptionMechanism\", function() { return addExceptionMechanism; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocationHref\", function() { return getLocationHref; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"htmlTreeAsString\", function() { return htmlTreeAsString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"crossPlatformPerformance\", function() { return crossPlatformPerformance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timestampWithMs\", function() { return timestampWithMs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseSemver\", function() { return parseSemver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseRetryAfterHeader\", function() { return parseRetryAfterHeader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getFunctionName\", function() { return getFunctionName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addContextToFrame\", function() { return addContextToFrame; });\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string */ \"../node_modules/@sentry/utils/esm/string.js\");\n\n\n/**\n * Requires a module which is protected _against bundler minification.\n *\n * @param request The module path to resolve\n */\n\nfunction dynamicRequire(mod, request) {\n // tslint:disable-next-line: no-unsafe-any\n return mod.require(request);\n}\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\n\nfunction isNodeEnv() {\n // tslint:disable:strict-type-predicates\n return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n}\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\n\nfunction getGlobalObject() {\n return isNodeEnv() ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : fallbackGlobalObject;\n}\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\n\nfunction uuid4() {\n var global = getGlobalObject();\n var crypto = global.crypto || global.msCrypto;\n\n if (!(crypto === void 0) && crypto.getRandomValues) {\n // Use window.crypto API if available\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr); // set 4 in byte 7\n // tslint:disable-next-line:no-bitwise\n\n arr[3] = arr[3] & 0xfff | 0x4000; // set 2 most significant bits of byte 9 to '10'\n // tslint:disable-next-line:no-bitwise\n\n arr[4] = arr[4] & 0x3fff | 0x8000;\n\n var pad = function pad(num) {\n var v = num.toString(16);\n\n while (v.length < 4) {\n v = \"0\" + v;\n }\n\n return v;\n };\n\n return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]);\n } // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n\n\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n // tslint:disable-next-line:no-bitwise\n var r = Math.random() * 16 | 0; // tslint:disable-next-line:no-bitwise\n\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\n\nfunction parseUrl(url) {\n if (!url) {\n return {};\n }\n\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n } // coerce to undefined values to empty string so we don't get 'undefined'\n\n\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n relative: match[5] + query + fragment\n };\n}\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\n\nfunction getEventDescription(event) {\n if (event.message) {\n return event.message;\n }\n\n if (event.exception && event.exception.values && event.exception.values[0]) {\n var exception = event.exception.values[0];\n\n if (exception.type && exception.value) {\n return exception.type + \": \" + exception.value;\n }\n\n return exception.type || exception.value || event.event_id || '<unknown>';\n }\n\n return event.event_id || '<unknown>';\n}\n/** JSDoc */\n\nfunction consoleSandbox(callback) {\n var global = getGlobalObject();\n var levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n\n if (!('console' in global)) {\n return callback();\n }\n\n var originalConsole = global.console;\n var wrappedLevels = {}; // Restore all wrapped console methods\n\n levels.forEach(function (level) {\n if (level in global.console && originalConsole[level].__sentry_original__) {\n wrappedLevels[level] = originalConsole[level];\n originalConsole[level] = originalConsole[level].__sentry_original__;\n }\n }); // Perform callback manipulations\n\n var result = callback(); // Revert restoration to wrapped state\n\n Object.keys(wrappedLevels).forEach(function (level) {\n originalConsole[level] = wrappedLevels[level];\n });\n return result;\n}\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\n\nfunction addExceptionTypeValue(event, value, type) {\n event.exception = event.exception || {};\n event.exception.values = event.exception.values || [];\n event.exception.values[0] = event.exception.values[0] || {};\n event.exception.values[0].value = event.exception.values[0].value || value || '';\n event.exception.values[0].type = event.exception.values[0].type || type || 'Error';\n}\n/**\n * Adds exception mechanism to a given event.\n * @param event The event to modify.\n * @param mechanism Mechanism of the mechanism.\n * @hidden\n */\n\nfunction addExceptionMechanism(event, mechanism) {\n if (mechanism === void 0) {\n mechanism = {};\n } // TODO: Use real type with `keyof Mechanism` thingy and maybe make it better?\n\n\n try {\n // @ts-ignore\n // tslint:disable:no-non-null-assertion\n event.exception.values[0].mechanism = event.exception.values[0].mechanism || {};\n Object.keys(mechanism).forEach(function (key) {\n // @ts-ignore\n event.exception.values[0].mechanism[key] = mechanism[key];\n });\n } catch (_oO) {// no-empty\n }\n}\n/**\n * A safe form of location.href\n */\n\nfunction getLocationHref() {\n try {\n return document.location.href;\n } catch (oO) {\n return '';\n }\n}\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\n\nfunction htmlTreeAsString(elem) {\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n var currentElem = elem;\n var MAX_TRAVERSE_HEIGHT = 5;\n var MAX_OUTPUT_LEN = 80;\n var out = [];\n var height = 0;\n var len = 0;\n var separator = ' > ';\n var sepLength = separator.length;\n var nextStr = void 0;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem); // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n\n if (nextStr === 'html' || height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) {\n break;\n }\n\n out.push(nextStr);\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\n\nfunction _htmlElementAsString(el) {\n var elem = el;\n var out = [];\n var className;\n var classes;\n var key;\n var attr;\n var i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n\n if (elem.id) {\n out.push(\"#\" + elem.id);\n }\n\n className = elem.className;\n\n if (className && Object(_is__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(className)) {\n classes = className.split(/\\s+/);\n\n for (i = 0; i < classes.length; i++) {\n out.push(\".\" + classes[i]);\n }\n }\n\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n\n if (attr) {\n out.push(\"[\" + key + \"=\\\"\" + attr + \"\\\"]\");\n }\n }\n\n return out.join('');\n}\n\nvar INITIAL_TIME = Date.now();\nvar prevNow = 0;\nvar performanceFallback = {\n now: function now() {\n var now = Date.now() - INITIAL_TIME;\n\n if (now < prevNow) {\n now = prevNow;\n }\n\n prevNow = now;\n return now;\n },\n timeOrigin: INITIAL_TIME\n};\nvar crossPlatformPerformance = function () {\n if (isNodeEnv()) {\n try {\n var perfHooks = dynamicRequire(module, 'perf_hooks');\n return perfHooks.performance;\n } catch (_) {\n return performanceFallback;\n }\n }\n\n if (getGlobalObject().performance) {\n // Polyfill for performance.timeOrigin.\n //\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // tslint:disable-next-line:strict-type-predicates\n if (performance.timeOrigin === undefined) {\n // For webworkers it could mean we don't have performance.timing then we fallback\n // tslint:disable-next-line:deprecation\n if (!performance.timing) {\n return performanceFallback;\n } // tslint:disable-next-line:deprecation\n\n\n if (!performance.timing.navigationStart) {\n return performanceFallback;\n } // @ts-ignore\n // tslint:disable-next-line:deprecation\n\n\n performance.timeOrigin = performance.timing.navigationStart;\n }\n }\n\n return getGlobalObject().performance || performanceFallback;\n}();\n/**\n * Returns a timestamp in seconds with milliseconds precision since the UNIX epoch calculated with the monotonic clock.\n */\n\nfunction timestampWithMs() {\n return (crossPlatformPerformance.timeOrigin + crossPlatformPerformance.now()) / 1000;\n} // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\n\nvar SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\n\nfunction parseSemver(input) {\n var match = input.match(SEMVER_REGEXP) || [];\n var major = parseInt(match[1], 10);\n var minor = parseInt(match[2], 10);\n var patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4]\n };\n}\nvar defaultRetryAfter = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param now current unix timestamp\n * @param header string representation of 'Retry-After' header\n */\n\nfunction parseRetryAfterHeader(now, header) {\n if (!header) {\n return defaultRetryAfter;\n }\n\n var headerDelay = parseInt(\"\" + header, 10);\n\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n var headerDate = Date.parse(\"\" + header);\n\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return defaultRetryAfter;\n}\nvar defaultFunctionName = '<anonymous>';\n/**\n * Safely extract function name from itself\n */\n\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\n\nfunction addContextToFrame(lines, frame, linesOfContext) {\n if (linesOfContext === void 0) {\n linesOfContext = 5;\n }\n\n var lineno = frame.lineno || 0;\n var maxLines = lines.length;\n var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n frame.pre_context = lines.slice(Math.max(0, sourceLine - linesOfContext), sourceLine).map(function (line) {\n return Object(_string__WEBPACK_IMPORTED_MODULE_1__[\"snipLine\"])(line, 0);\n });\n frame.context_line = Object(_string__WEBPACK_IMPORTED_MODULE_1__[\"snipLine\"])(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n frame.post_context = lines.slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext).map(function (line) {\n return Object(_string__WEBPACK_IMPORTED_MODULE_1__[\"snipLine\"])(line, 0);\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../../webpack/buildin/harmony-module.js */ \"../node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL21pc2MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL21pc2MudHM/YmI2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCwgSW50ZWdyYXRpb24sIFN0YWNrRnJhbWUsIFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgc25pcExpbmUgfSBmcm9tICcuL3N0cmluZyc7XG5cbi8qKiBJbnRlcm5hbCAqL1xuaW50ZXJmYWNlIFNlbnRyeUdsb2JhbCB7XG4gIFNlbnRyeT86IHtcbiAgICBJbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbltdO1xuICB9O1xuICBTRU5UUllfRU5WSVJPTk1FTlQ/OiBzdHJpbmc7XG4gIFNFTlRSWV9EU04/OiBzdHJpbmc7XG4gIFNFTlRSWV9SRUxFQVNFPzoge1xuICAgIGlkPzogc3RyaW5nO1xuICB9O1xuICBfX1NFTlRSWV9fOiB7XG4gICAgZ2xvYmFsRXZlbnRQcm9jZXNzb3JzOiBhbnk7XG4gICAgaHViOiBhbnk7XG4gICAgbG9nZ2VyOiBhbnk7XG4gIH07XG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBtb2R1bGUgd2hpY2ggaXMgcHJvdGVjdGVkIF9hZ2FpbnN0IGJ1bmRsZXIgbWluaWZpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IFRoZSBtb2R1bGUgcGF0aCB0byByZXNvbHZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljUmVxdWlyZShtb2Q6IGFueSwgcmVxdWVzdDogc3RyaW5nKTogYW55IHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bnNhZmUtYW55XG4gIHJldHVybiBtb2QucmVxdWlyZShyZXF1ZXN0KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB3ZSdyZSBpbiB0aGUgTm9kZS5qcyBvciBCcm93c2VyIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIGdpdmVuIHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVFbnYoKTogYm9vbGVhbiB7XG4gIC8vIHRzbGludDpkaXNhYmxlOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzIDogMCkgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcbn1cblxuY29uc3QgZmFsbGJhY2tHbG9iYWxPYmplY3QgPSB7fTtcblxuLyoqXG4gKiBTYWZlbHkgZ2V0IGdsb2JhbCBzY29wZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBHbG9iYWwgc2NvcGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxPYmplY3Q8VD4oKTogVCAmIFNlbnRyeUdsb2JhbCB7XG4gIHJldHVybiAoaXNOb2RlRW52KClcbiAgICA/IGdsb2JhbFxuICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHdpbmRvd1xuICAgIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnXG4gICAgPyBzZWxmXG4gICAgOiBmYWxsYmFja0dsb2JhbE9iamVjdCkgYXMgVCAmIFNlbnRyeUdsb2JhbDtcbn1cbi8vIHRzbGludDplbmFibGU6c3RyaWN0LXR5cGUtcHJlZGljYXRlc1xuXG4vKipcbiAqIEV4dGVuZGVkIFdpbmRvdyBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgZm9yIENyeXB0byBBUEkgdXNhZ2UgaW4gSUUgYnJvd3NlcnNcbiAqL1xuaW50ZXJmYWNlIE1zQ3J5cHRvV2luZG93IGV4dGVuZHMgV2luZG93IHtcbiAgbXNDcnlwdG8/OiBDcnlwdG87XG59XG5cbi8qKlxuICogVVVJRDQgZ2VuZXJhdG9yXG4gKlxuICogQHJldHVybnMgc3RyaW5nIEdlbmVyYXRlZCBVVUlENC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQ0KCk6IHN0cmluZyB7XG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpIGFzIE1zQ3J5cHRvV2luZG93O1xuICBjb25zdCBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvIHx8IGdsb2JhbC5tc0NyeXB0bztcblxuICBpZiAoIShjcnlwdG8gPT09IHZvaWQgMCkgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIFVzZSB3aW5kb3cuY3J5cHRvIEFQSSBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuXG4gICAgLy8gc2V0IDQgaW4gYnl0ZSA3XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICBhcnJbM10gPSAoYXJyWzNdICYgMHhmZmYpIHwgMHg0MDAwO1xuICAgIC8vIHNldCAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBieXRlIDkgdG8gJzEwJ1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgYXJyWzRdID0gKGFycls0XSAmIDB4M2ZmZikgfCAweDgwMDA7XG5cbiAgICBjb25zdCBwYWQgPSAobnVtOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgbGV0IHYgPSBudW0udG9TdHJpbmcoMTYpO1xuICAgICAgd2hpbGUgKHYubGVuZ3RoIDwgNCkge1xuICAgICAgICB2ID0gYDAke3Z9YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgcGFkKGFyclswXSkgKyBwYWQoYXJyWzFdKSArIHBhZChhcnJbMl0pICsgcGFkKGFyclszXSkgKyBwYWQoYXJyWzRdKSArIHBhZChhcnJbNV0pICsgcGFkKGFycls2XSkgKyBwYWQoYXJyWzddKVxuICAgICk7XG4gIH1cbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDUwMzQvaG93LXRvLWNyZWF0ZS1hLWd1aWQtdXVpZC1pbi1qYXZhc2NyaXB0LzIxMTc1MjMjMjExNzUyM1xuICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgIGNvbnN0IHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2VzIHN0cmluZyBmb3JtIG9mIFVSTCBpbnRvIGFuIG9iamVjdFxuICogLy8gYm9ycm93ZWQgZnJvbSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1CXG4gKiAvLyBpbnRlbnRpb25hbGx5IHVzaW5nIHJlZ2V4IGFuZCBub3QgPGEvPiBocmVmIHBhcnNpbmcgdHJpY2sgYmVjYXVzZSBSZWFjdCBOYXRpdmUgYW5kIG90aGVyXG4gKiAvLyBlbnZpcm9ubWVudHMgd2hlcmUgRE9NIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHBhcnNlZCBVUkwgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVybChcbiAgdXJsOiBzdHJpbmcsXG4pOiB7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHByb3RvY29sPzogc3RyaW5nO1xuICByZWxhdGl2ZT86IHN0cmluZztcbn0ge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gdXJsLm1hdGNoKC9eKChbXjpcXC8/I10rKTopPyhcXC9cXC8oW15cXC8/I10qKSk/KFtePyNdKikoXFw/KFteI10qKSk/KCMoLiopKT8kLyk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIGNvZXJjZSB0byB1bmRlZmluZWQgdmFsdWVzIHRvIGVtcHR5IHN0cmluZyBzbyB3ZSBkb24ndCBnZXQgJ3VuZGVmaW5lZCdcbiAgY29uc3QgcXVlcnkgPSBtYXRjaFs2XSB8fCAnJztcbiAgY29uc3QgZnJhZ21lbnQgPSBtYXRjaFs4XSB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICBob3N0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XSxcbiAgICBwcm90b2NvbDogbWF0Y2hbMl0sXG4gICAgcmVsYXRpdmU6IG1hdGNoWzVdICsgcXVlcnkgKyBmcmFnbWVudCwgLy8gZXZlcnl0aGluZyBtaW51cyBvcmlnaW5cbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBlaXRoZXIgbWVzc2FnZSBvciB0eXBlK3ZhbHVlIGZyb20gYW4gZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdXNlci1mYWNpbmcgbG9nc1xuICogQHJldHVybnMgZXZlbnQncyBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudDogRXZlbnQpOiBzdHJpbmcge1xuICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgIHJldHVybiBldmVudC5tZXNzYWdlO1xuICB9XG4gIGlmIChldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdKSB7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcblxuICAgIGlmIChleGNlcHRpb24udHlwZSAmJiBleGNlcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBgJHtleGNlcHRpb24udHlwZX06ICR7ZXhjZXB0aW9uLnZhbHVlfWA7XG4gICAgfVxuICAgIHJldHVybiBleGNlcHRpb24udHlwZSB8fCBleGNlcHRpb24udmFsdWUgfHwgZXZlbnQuZXZlbnRfaWQgfHwgJzx1bmtub3duPic7XG4gIH1cbiAgcmV0dXJuIGV2ZW50LmV2ZW50X2lkIHx8ICc8dW5rbm93bj4nO1xufVxuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBFeHRlbnNpYmxlQ29uc29sZSBleHRlbmRzIENvbnNvbGUge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVTYW5kYm94KGNhbGxiYWNrOiAoKSA9PiBhbnkpOiBhbnkge1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuICBjb25zdCBsZXZlbHMgPSBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdsb2cnLCAnYXNzZXJ0J107XG5cbiAgaWYgKCEoJ2NvbnNvbGUnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsQ29uc29sZSA9IGdsb2JhbC5jb25zb2xlIGFzIEV4dGVuc2libGVDb25zb2xlO1xuICBjb25zdCB3cmFwcGVkTGV2ZWxzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHNcbiAgbGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgIGlmIChsZXZlbCBpbiBnbG9iYWwuY29uc29sZSAmJiAob3JpZ2luYWxDb25zb2xlW2xldmVsXSBhcyBXcmFwcGVkRnVuY3Rpb24pLl9fc2VudHJ5X29yaWdpbmFsX18pIHtcbiAgICAgIHdyYXBwZWRMZXZlbHNbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlW2xldmVsXSBhcyBXcmFwcGVkRnVuY3Rpb247XG4gICAgICBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdID0gKG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gYXMgV3JhcHBlZEZ1bmN0aW9uKS5fX3NlbnRyeV9vcmlnaW5hbF9fO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGVyZm9ybSBjYWxsYmFjayBtYW5pcHVsYXRpb25zXG4gIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKCk7XG5cbiAgLy8gUmV2ZXJ0IHJlc3RvcmF0aW9uIHRvIHdyYXBwZWQgc3RhdGVcbiAgT2JqZWN0LmtleXMod3JhcHBlZExldmVscykuZm9yRWFjaChsZXZlbCA9PiB7XG4gICAgb3JpZ2luYWxDb25zb2xlW2xldmVsXSA9IHdyYXBwZWRMZXZlbHNbbGV2ZWxdO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFkZHMgZXhjZXB0aW9uIHZhbHVlcywgdHlwZSBhbmQgdmFsdWUgdG8gYW4gc3ludGhldGljIEV4Y2VwdGlvbi5cbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBleGNlcHRpb24uXG4gKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBleGNlcHRpb24uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQ6IEV2ZW50LCB2YWx1ZT86IHN0cmluZywgdHlwZT86IHN0cmluZyk6IHZvaWQge1xuICBldmVudC5leGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gfHwge307XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzIHx8IFtdO1xuICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSB8fCB7fTtcbiAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS52YWx1ZSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udmFsdWUgfHwgdmFsdWUgfHwgJyc7XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZSB8fCB0eXBlIHx8ICdFcnJvcic7XG59XG5cbi8qKlxuICogQWRkcyBleGNlcHRpb24gbWVjaGFuaXNtIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBtZWNoYW5pc20gTWVjaGFuaXNtIG9mIHRoZSBtZWNoYW5pc20uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeGNlcHRpb25NZWNoYW5pc20oXG4gIGV2ZW50OiBFdmVudCxcbiAgbWVjaGFuaXNtOiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9ID0ge30sXG4pOiB2b2lkIHtcbiAgLy8gVE9ETzogVXNlIHJlYWwgdHlwZSB3aXRoIGBrZXlvZiBNZWNoYW5pc21gIHRoaW5neSBhbmQgbWF5YmUgbWFrZSBpdCBiZXR0ZXI/XG4gIHRyeSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGV2ZW50LmV4Y2VwdGlvbiEudmFsdWVzIVswXS5tZWNoYW5pc20gPSBldmVudC5leGNlcHRpb24hLnZhbHVlcyFbMF0ubWVjaGFuaXNtIHx8IHt9O1xuICAgIE9iamVjdC5rZXlzKG1lY2hhbmlzbSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZXZlbnQuZXhjZXB0aW9uIS52YWx1ZXMhWzBdLm1lY2hhbmlzbVtrZXldID0gbWVjaGFuaXNtW2tleV07XG4gICAgfSk7XG4gIH0gY2F0Y2ggKF9vTykge1xuICAgIC8vIG5vLWVtcHR5XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNhZmUgZm9ybSBvZiBsb2NhdGlvbi5ocmVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbkhyZWYoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcbiAgfSBjYXRjaCAob08pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdFxuICogYW5kIGl0cyBhbmNlc3RvcnNcbiAqIGUuZy4gW0hUTUxFbGVtZW50XSA9PiBib2R5ID4gZGl2ID4gaW5wdXQjZm9vLmJ0bltuYW1lPWJhel1cbiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZyhlbGVtOiB1bmtub3duKTogc3RyaW5nIHtcbiAgdHlwZSBTaW1wbGVOb2RlID0ge1xuICAgIHBhcmVudE5vZGU6IFNpbXBsZU5vZGU7XG4gIH0gfCBudWxsO1xuXG4gIC8vIHRyeS9jYXRjaCBib3RoOlxuICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KVxuICAvLyAtIGBodG1sVHJlZUFzU3RyaW5nYCBiZWNhdXNlIGl0J3MgY29tcGxleCwgYW5kIGp1c3QgYWNjZXNzaW5nIHRoZSBET00gaW5jb3JyZWN0bHlcbiAgLy8gLSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy5cbiAgdHJ5IHtcbiAgICBsZXQgY3VycmVudEVsZW0gPSBlbGVtIGFzIFNpbXBsZU5vZGU7XG4gICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7XG4gICAgY29uc3QgTUFYX09VVFBVVF9MRU4gPSA4MDtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBsZXQgbGVuID0gMDtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJztcbiAgICBjb25zdCBzZXBMZW5ndGggPSBzZXBhcmF0b3IubGVuZ3RoO1xuICAgIGxldCBuZXh0U3RyO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtICYmIGhlaWdodCsrIDwgTUFYX1RSQVZFUlNFX0hFSUdIVCkge1xuICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtKTtcbiAgICAgIC8vIGJhaWwgb3V0IGlmXG4gICAgICAvLyAtIG5leHRTdHIgaXMgdGhlICdodG1sJyBlbGVtZW50XG4gICAgICAvLyAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQgZXhjZWVkcyBNQVhfT1VUUFVUX0xFTlxuICAgICAgLy8gICAoaWdub3JlIHRoaXMgbGltaXQgaWYgd2UgYXJlIG9uIHRoZSBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBNQVhfT1VUUFVUX0xFTikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dC5wdXNoKG5leHRTdHIpO1xuXG4gICAgICBsZW4gKz0gbmV4dFN0ci5sZW5ndGg7XG4gICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpO1xuICB9IGNhdGNoIChfb08pIHtcbiAgICByZXR1cm4gJzx1bmtub3duPic7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2ltcGxlLCBxdWVyeS1zZWxlY3RvciByZXByZXNlbnRhdGlvbiBvZiBhIERPTSBlbGVtZW50XG4gKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gaW5wdXQjZm9vLmJ0bltuYW1lPWJhel1cbiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aFxuICovXG5mdW5jdGlvbiBfaHRtbEVsZW1lbnRBc1N0cmluZyhlbDogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IGVsZW0gPSBlbCBhcyB7XG4gICAgZ2V0QXR0cmlidXRlKGtleTogc3RyaW5nKTogc3RyaW5nOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmNvbXBsZXRlZC1kb2NzXG4gICAgdGFnTmFtZT86IHN0cmluZztcbiAgICBpZD86IHN0cmluZztcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3Qgb3V0ID0gW107XG4gIGxldCBjbGFzc05hbWU7XG4gIGxldCBjbGFzc2VzO1xuICBsZXQga2V5O1xuICBsZXQgYXR0cjtcbiAgbGV0IGk7XG5cbiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvdXQucHVzaChlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG4gIGlmIChlbGVtLmlkKSB7XG4gICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7XG4gIH1cblxuICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZTtcbiAgaWYgKGNsYXNzTmFtZSAmJiBpc1N0cmluZyhjbGFzc05hbWUpKSB7XG4gICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXQucHVzaChgLiR7Y2xhc3Nlc1tpXX1gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgYXR0cldoaXRlbGlzdCA9IFsndHlwZScsICduYW1lJywgJ3RpdGxlJywgJ2FsdCddO1xuICBmb3IgKGkgPSAwOyBpIDwgYXR0cldoaXRlbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGF0dHJXaGl0ZWxpc3RbaV07XG4gICAgYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgaWYgKGF0dHIpIHtcbiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PVwiJHthdHRyfVwiXWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJycpO1xufVxuXG5jb25zdCBJTklUSUFMX1RJTUUgPSBEYXRlLm5vdygpO1xubGV0IHByZXZOb3cgPSAwO1xuXG5jb25zdCBwZXJmb3JtYW5jZUZhbGxiYWNrOiBQaWNrPFBlcmZvcm1hbmNlLCAnbm93JyB8ICd0aW1lT3JpZ2luJz4gPSB7XG4gIG5vdygpOiBudW1iZXIge1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpIC0gSU5JVElBTF9USU1FO1xuICAgIGlmIChub3cgPCBwcmV2Tm93KSB7XG4gICAgICBub3cgPSBwcmV2Tm93O1xuICAgIH1cbiAgICBwcmV2Tm93ID0gbm93O1xuICAgIHJldHVybiBub3c7XG4gIH0sXG4gIHRpbWVPcmlnaW46IElOSVRJQUxfVElNRSxcbn07XG5cbmV4cG9ydCBjb25zdCBjcm9zc1BsYXRmb3JtUGVyZm9ybWFuY2U6IFBpY2s8UGVyZm9ybWFuY2UsICdub3cnIHwgJ3RpbWVPcmlnaW4nPiA9ICgoKSA9PiB7XG4gIGlmIChpc05vZGVFbnYoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJmSG9va3MgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICdwZXJmX2hvb2tzJykgYXMgeyBwZXJmb3JtYW5jZTogUGVyZm9ybWFuY2UgfTtcbiAgICAgIHJldHVybiBwZXJmSG9va3MucGVyZm9ybWFuY2U7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlRmFsbGJhY2s7XG4gICAgfVxuICB9XG5cbiAgaWYgKGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCkucGVyZm9ybWFuY2UpIHtcbiAgICAvLyBQb2x5ZmlsbCBmb3IgcGVyZm9ybWFuY2UudGltZU9yaWdpbi5cbiAgICAvL1xuICAgIC8vIFdoaWxlIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luLCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgLy8gaXMgbm90IGFzIHdpZGVseSBzdXBwb3J0ZWQuIE5hbWVseSwgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBpcyB1bmRlZmluZWQgaW4gU2FmYXJpIGFzIG9mIHdyaXRpbmcuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC10eXBlLXByZWRpY2F0ZXNcbiAgICBpZiAocGVyZm9ybWFuY2UudGltZU9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBGb3Igd2Vid29ya2VycyBpdCBjb3VsZCBtZWFuIHdlIGRvbid0IGhhdmUgcGVyZm9ybWFuY2UudGltaW5nIHRoZW4gd2UgZmFsbGJhY2tcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgaWYgKCFwZXJmb3JtYW5jZS50aW1pbmcpIHtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlRmFsbGJhY2s7XG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICAgIGlmICghcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2VGYWxsYmFjaztcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgICBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID0gcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKS5wZXJmb3JtYW5jZSB8fCBwZXJmb3JtYW5jZUZhbGxiYWNrO1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgd2l0aCBtaWxsaXNlY29uZHMgcHJlY2lzaW9uIHNpbmNlIHRoZSBVTklYIGVwb2NoIGNhbGN1bGF0ZWQgd2l0aCB0aGUgbW9ub3RvbmljIGNsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wV2l0aE1zKCk6IG51bWJlciB7XG4gIHJldHVybiAoY3Jvc3NQbGF0Zm9ybVBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBjcm9zc1BsYXRmb3JtUGVyZm9ybWFuY2Uubm93KCkpIC8gMTAwMDtcbn1cblxuLy8gaHR0cHM6Ly9zZW12ZXIub3JnLyNpcy10aGVyZS1hLXN1Z2dlc3RlZC1yZWd1bGFyLWV4cHJlc3Npb24tcmVnZXgtdG8tY2hlY2stYS1zZW12ZXItc3RyaW5nXG5jb25zdCBTRU1WRVJfUkVHRVhQID0gL14oMHxbMS05XVxcZCopXFwuKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKikoPzotKCg/OjB8WzEtOV1cXGQqfFxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSg/OlxcLig/OjB8WzEtOV1cXGQqfFxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSkqKSk/KD86XFwrKFswLTlhLXpBLVotXSsoPzpcXC5bMC05YS16QS1aLV0rKSopKT8kLztcblxuLyoqXG4gKiBSZXByZXNlbnRzIFNlbWFudGljIFZlcnNpb25pbmcgb2JqZWN0XG4gKi9cbmludGVyZmFjZSBTZW1WZXIge1xuICBtYWpvcj86IG51bWJlcjtcbiAgbWlub3I/OiBudW1iZXI7XG4gIHBhdGNoPzogbnVtYmVyO1xuICBwcmVyZWxlYXNlPzogc3RyaW5nO1xuICBidWlsZG1ldGFkYXRhPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlcyBpbnB1dCBpbnRvIGEgU2VtVmVyIGludGVyZmFjZVxuICogQHBhcmFtIGlucHV0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNlbXZlciB2ZXJzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbXZlcihpbnB1dDogc3RyaW5nKTogU2VtVmVyIHtcbiAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaChTRU1WRVJfUkVHRVhQKSB8fCBbXTtcbiAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gIGNvbnN0IHBhdGNoID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcbiAgcmV0dXJuIHtcbiAgICBidWlsZG1ldGFkYXRhOiBtYXRjaFs1XSxcbiAgICBtYWpvcjogaXNOYU4obWFqb3IpID8gdW5kZWZpbmVkIDogbWFqb3IsXG4gICAgbWlub3I6IGlzTmFOKG1pbm9yKSA/IHVuZGVmaW5lZCA6IG1pbm9yLFxuICAgIHBhdGNoOiBpc05hTihwYXRjaCkgPyB1bmRlZmluZWQgOiBwYXRjaCxcbiAgICBwcmVyZWxlYXNlOiBtYXRjaFs0XSxcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFJldHJ5QWZ0ZXIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHNcblxuLyoqXG4gKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcFxuICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlckhlYWRlcihub3c6IG51bWJlciwgaGVhZGVyPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gIGlmICghaGVhZGVyKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXRyeUFmdGVyO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApO1xuICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkge1xuICAgIHJldHVybiBoZWFkZXJEZWxheSAqIDEwMDA7XG4gIH1cblxuICBjb25zdCBoZWFkZXJEYXRlID0gRGF0ZS5wYXJzZShgJHtoZWFkZXJ9YCk7XG4gIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHtcbiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdztcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0UmV0cnlBZnRlcjtcbn1cblxuY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7XG5cbi8qKlxuICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuOiB1bmtub3duKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZuIHx8IHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5uYW1lIHx8IGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHNcbiAgICAvLyBjYW4gY2F1c2UgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS5cbiAgICByZXR1cm4gZGVmYXVsdEZ1bmN0aW9uTmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBjb250ZXh0IChwcmUvcG9zdC9saW5lKSBsaW5lcyB0byB0aGUgcHJvdmlkZWQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gbGluZXMgc3RyaW5nW10gY29udGFpbmluZyBhbGwgbGluZXNcbiAqIEBwYXJhbSBmcmFtZSBTdGFja0ZyYW1lIHRoYXQgd2lsbCBiZSBtdXRhdGVkXG4gKiBAcGFyYW0gbGluZXNPZkNvbnRleHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgd2Ugd2FudCB0byBhZGQgcHJlL3Bvc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENvbnRleHRUb0ZyYW1lKGxpbmVzOiBzdHJpbmdbXSwgZnJhbWU6IFN0YWNrRnJhbWUsIGxpbmVzT2ZDb250ZXh0OiBudW1iZXIgPSA1KTogdm9pZCB7XG4gIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxpbmVubyB8fCAwO1xuICBjb25zdCBtYXhMaW5lcyA9IGxpbmVzLmxlbmd0aDtcbiAgY29uc3Qgc291cmNlTGluZSA9IE1hdGgubWF4KE1hdGgubWluKG1heExpbmVzLCBsaW5lbm8gLSAxKSwgMCk7XG5cbiAgZnJhbWUucHJlX2NvbnRleHQgPSBsaW5lc1xuICAgIC5zbGljZShNYXRoLm1heCgwLCBzb3VyY2VMaW5lIC0gbGluZXNPZkNvbnRleHQpLCBzb3VyY2VMaW5lKVxuICAgIC5tYXAoKGxpbmU6IHN0cmluZykgPT4gc25pcExpbmUobGluZSwgMCkpO1xuXG4gIGZyYW1lLmNvbnRleHRfbGluZSA9IHNuaXBMaW5lKGxpbmVzW01hdGgubWluKG1heExpbmVzIC0gMSwgc291cmNlTGluZSldLCBmcmFtZS5jb2xubyB8fCAwKTtcblxuICBmcmFtZS5wb3N0X2NvbnRleHQgPSBsaW5lc1xuICAgIC5zbGljZShNYXRoLm1pbihzb3VyY2VMaW5lICsgMSwgbWF4TGluZXMpLCBzb3VyY2VMaW5lICsgMSArIGxpbmVzT2ZDb250ZXh0KVxuICAgIC5tYXAoKGxpbmU6IHN0cmluZykgPT4gc25pcExpbmUobGluZSwgMCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQW1CQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7Ozs7QUFLQTtBQUNBO0FBT0E7QUFVQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBQ0E7QUFPQTtBQXhCQTtBQUNBO0FBQ0E7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUVBOzs7Ozs7OztBQU9BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFFQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBQ0E7QUFtQkE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUpBO0FBVUE7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQkE7QUE2QkE7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUEE7QUFTQTtBQVRBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQVJBO0FBWUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpDQTtBQW9DQTs7OztBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFhQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUZBO0FBSUE7QUFFQTtBQUVBO0FBRkE7QUFHQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/misc.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/object.js": -/*!***************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/object.js ***! - \***************************************************/ -/*! exports provided: fill, urlEncode, normalizeToSize, walk, normalize, extractExceptionKeysForMessage, dropUndefinedKeys */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fill\", function() { return fill; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"urlEncode\", function() { return urlEncode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"normalizeToSize\", function() { return normalizeToSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"walk\", function() { return walk; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"normalize\", function() { return normalize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"extractExceptionKeysForMessage\", function() { return extractExceptionKeysForMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dropUndefinedKeys\", function() { return dropUndefinedKeys; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"../node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n/* harmony import */ var _memo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./memo */ \"../node_modules/@sentry/utils/esm/memo.js\");\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./misc */ \"../node_modules/@sentry/utils/esm/misc.js\");\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./string */ \"../node_modules/@sentry/utils/esm/string.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n/**\n * Wrap a given object method with a higher-order function\n *\n * @param source An object that contains a method to be wrapped.\n * @param name A name of method to be wrapped.\n * @param replacement A function that should be used to wrap a given method.\n * @returns void\n */\n\nfunction fill(source, name, replacement) {\n if (!(name in source)) {\n return;\n }\n\n var original = source[name];\n var wrapped = replacement(original); // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n // tslint:disable-next-line:strict-type-predicates\n\n if (typeof wrapped === 'function') {\n try {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __sentry_original__: {\n enumerable: false,\n value: original\n }\n });\n } catch (_Oo) {// This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n\n source[name] = wrapped;\n}\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\n\nfunction urlEncode(object) {\n return Object.keys(object).map( // tslint:disable-next-line:no-unsafe-any\n function (key) {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(object[key]);\n }).join('&');\n}\n/**\n * Transforms any object into an object literal with all it's attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order to be usable by the serializer\n */\n\nfunction getWalkSource(value) {\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isError\"])(value)) {\n var error = value;\n var err = {\n message: error.message,\n name: error.name,\n stack: error.stack\n };\n\n for (var i in error) {\n if (Object.prototype.hasOwnProperty.call(error, i)) {\n err[i] = error[i];\n }\n }\n\n return err;\n }\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isEvent\"])(value)) {\n var event_1 = value;\n var source = {};\n source.type = event_1.type; // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n\n try {\n source.target = Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isElement\"])(event_1.target) ? Object(_misc__WEBPACK_IMPORTED_MODULE_3__[\"htmlTreeAsString\"])(event_1.target) : Object.prototype.toString.call(event_1.target);\n } catch (_oO) {\n source.target = '<unknown>';\n }\n\n try {\n source.currentTarget = Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isElement\"])(event_1.currentTarget) ? Object(_misc__WEBPACK_IMPORTED_MODULE_3__[\"htmlTreeAsString\"])(event_1.currentTarget) : Object.prototype.toString.call(event_1.currentTarget);\n } catch (_oO) {\n source.currentTarget = '<unknown>';\n } // tslint:disable-next-line:strict-type-predicates\n\n\n if (typeof CustomEvent !== 'undefined' && Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isInstanceOf\"])(value, CustomEvent)) {\n source.detail = event_1.detail;\n }\n\n for (var i in event_1) {\n if (Object.prototype.hasOwnProperty.call(event_1, i)) {\n source[i] = event_1;\n }\n }\n\n return source;\n }\n\n return value;\n}\n/** Calculates bytes size of input string */\n\n\nfunction utf8Length(value) {\n // tslint:disable-next-line:no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n/** Calculates bytes size of input object */\n\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n/** JSDoc */\n\n\nfunction normalizeToSize(object, // Default Node.js REPL depth\ndepth, // 100kB, as 200kB is max payload size, so half sounds reasonable\nmaxSize) {\n if (depth === void 0) {\n depth = 3;\n }\n\n if (maxSize === void 0) {\n maxSize = 100 * 1024;\n }\n\n var serialized = normalize(object, depth);\n\n if (jsonSize(serialized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return serialized;\n}\n/** Transforms any input value into a string form, either primitive value or a type of the input */\n\nfunction serializeValue(value) {\n var type = Object.prototype.toString.call(value); // Node.js REPL notation\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (type === '[object Object]') {\n return '[Object]';\n }\n\n if (type === '[object Array]') {\n return '[Array]';\n }\n\n var normalized = normalizeValue(value);\n return Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isPrimitive\"])(normalized) ? normalized : type;\n}\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\n// tslint:disable-next-line:cyclomatic-complexity\n\n\nfunction normalizeValue(value, key) {\n if (key === 'domain' && value && _typeof(value) === 'object' && value._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n } // React's SyntheticEvent thingy\n\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isSyntheticEvent\"])(value)) {\n return '[SyntheticEvent]';\n } // tslint:disable-next-line:no-tautology-expression\n\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (value === void 0) {\n return '[undefined]';\n }\n\n if (typeof value === 'function') {\n return \"[Function: \" + Object(_misc__WEBPACK_IMPORTED_MODULE_3__[\"getFunctionName\"])(value) + \"]\";\n }\n\n return value;\n}\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\n\n\nfunction walk(key, value, depth, memo) {\n if (depth === void 0) {\n depth = +Infinity;\n }\n\n if (memo === void 0) {\n memo = new _memo__WEBPACK_IMPORTED_MODULE_2__[\"Memo\"]();\n } // If we reach the maximum depth, serialize whatever has left\n\n\n if (depth === 0) {\n return serializeValue(value);\n } // If value implements `toJSON` method, call it and return early\n // tslint:disable:no-unsafe-any\n\n\n if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n return value.toJSON();\n } // tslint:enable:no-unsafe-any\n // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further\n\n\n var normalized = normalizeValue(value, key);\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isPrimitive\"])(normalized)) {\n return normalized;\n } // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself\n\n\n var source = getWalkSource(value); // Create an accumulator that will act as a parent for all future itterations of that branch\n\n var acc = Array.isArray(value) ? [] : {}; // If we already walked that branch, bail out, as it's circular reference\n\n if (memo.memoize(value)) {\n return '[Circular ~]';\n } // Walk all keys of the source\n\n\n for (var innerKey in source) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n continue;\n } // Recursively walk through all the child nodes\n\n\n acc[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n } // Once walked through all the branches, remove the parent from memo storage\n\n\n memo.unmemoize(value); // Return accumulated values\n\n return acc;\n}\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\n\nfunction normalize(input, depth) {\n try {\n // tslint:disable-next-line:no-unsafe-any\n return JSON.parse(JSON.stringify(input, function (key, value) {\n return walk(key, value, depth);\n }));\n } catch (_oO) {\n return '**non-serializable**';\n }\n}\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n\nfunction extractExceptionKeysForMessage(exception, maxLength) {\n if (maxLength === void 0) {\n maxLength = 40;\n } // tslint:disable:strict-type-predicates\n\n\n var keys = Object.keys(getWalkSource(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return Object(_string__WEBPACK_IMPORTED_MODULE_4__[\"truncate\"])(keys[0], maxLength);\n }\n\n for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n var serialized = keys.slice(0, includedKeys).join(', ');\n\n if (serialized.length > maxLength) {\n continue;\n }\n\n if (includedKeys === keys.length) {\n return serialized;\n }\n\n return Object(_string__WEBPACK_IMPORTED_MODULE_4__[\"truncate\"])(serialized, maxLength);\n }\n\n return '';\n}\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\n\nfunction dropUndefinedKeys(val) {\n var e_1, _a;\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(val)) {\n var obj = val;\n var rv = {};\n\n try {\n for (var _b = tslib__WEBPACK_IMPORTED_MODULE_0__[\"__values\"](Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n\n if (typeof obj[key] !== 'undefined') {\n rv[key] = dropUndefinedKeys(obj[key]);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b[\"return\"])) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return rv;\n }\n\n if (Array.isArray(val)) {\n return val.map(dropUndefinedKeys);\n }\n\n return val;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL29iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvb2JqZWN0LnRzP2IyMGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZW5kZWRFcnJvciwgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmltcG9ydCB7IGlzRWxlbWVudCwgaXNFcnJvciwgaXNFdmVudCwgaXNJbnN0YW5jZU9mLCBpc1BsYWluT2JqZWN0LCBpc1ByaW1pdGl2ZSwgaXNTeW50aGV0aWNFdmVudCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgTWVtbyB9IGZyb20gJy4vbWVtbyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWUsIGh0bWxUcmVlQXNTdHJpbmcgfSBmcm9tICcuL21pc2MnO1xuaW1wb3J0IHsgdHJ1bmNhdGUgfSBmcm9tICcuL3N0cmluZyc7XG5cbi8qKlxuICogV3JhcCBhIGdpdmVuIG9iamVjdCBtZXRob2Qgd2l0aCBhIGhpZ2hlci1vcmRlciBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBzb3VyY2UgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBtZXRob2QgdG8gYmUgd3JhcHBlZC5cbiAqIEBwYXJhbSBuYW1lIEEgbmFtZSBvZiBtZXRob2QgdG8gYmUgd3JhcHBlZC5cbiAqIEBwYXJhbSByZXBsYWNlbWVudCBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gd3JhcCBhIGdpdmVuIG1ldGhvZC5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGwoc291cmNlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBuYW1lOiBzdHJpbmcsIHJlcGxhY2VtZW50OiAoLi4uYXJnczogYW55W10pID0+IGFueSk6IHZvaWQge1xuICBpZiAoIShuYW1lIGluIHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbCA9IHNvdXJjZVtuYW1lXSBhcyAoKSA9PiBhbnk7XG4gIGNvbnN0IHdyYXBwZWQgPSByZXBsYWNlbWVudChvcmlnaW5hbCkgYXMgV3JhcHBlZEZ1bmN0aW9uO1xuXG4gIC8vIE1ha2Ugc3VyZSBpdCdzIGEgZnVuY3Rpb24gZmlyc3QsIGFzIHdlIG5lZWQgdG8gYXR0YWNoIGFuIGVtcHR5IHByb3RvdHlwZSBmb3IgYGRlZmluZVByb3BlcnRpZXNgIHRvIHdvcmtcbiAgLy8gb3RoZXJ3aXNlIGl0J2xsIHRocm93IFwiVHlwZUVycm9yOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyBjYWxsZWQgb24gbm9uLW9iamVjdFwiXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIGlmICh0eXBlb2Ygd3JhcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IHdyYXBwZWQucHJvdG90eXBlIHx8IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZCwge1xuICAgICAgICBfX3NlbnRyeV9vcmlnaW5hbF9fOiB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG9yaWdpbmFsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX09vKSB7XG4gICAgICAvLyBUaGlzIGNhbiB0aHJvdyBpZiBtdWx0aXBsZSBmaWxsIGhhcHBlbnMgb24gYSBnbG9iYWwgb2JqZWN0IGxpa2UgWE1MSHR0cFJlcXVlc3RcbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIwNDNcbiAgICB9XG4gIH1cblxuICBzb3VyY2VbbmFtZV0gPSB3cmFwcGVkO1xufVxuXG4vKipcbiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdFxuICpcbiAqIEBwYXJhbSBvYmplY3QgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEVuY29kZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIC5tYXAoXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5zYWZlLWFueVxuICAgICAga2V5ID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3Rba2V5XSl9YCxcbiAgICApXG4gICAgLmpvaW4oJyYnKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFueSBvYmplY3QgaW50byBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGFsbCBpdCdzIGF0dHJpYnV0ZXNcbiAqIGF0dGFjaGVkIHRvIGl0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBJbml0aWFsIHNvdXJjZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmb3JtIGluIG9yZGVyIHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplclxuICovXG5mdW5jdGlvbiBnZXRXYWxrU291cmNlKFxuICB2YWx1ZTogYW55LFxuKToge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59IHtcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZSBhcyBFeHRlbmRlZEVycm9yO1xuICAgIGNvbnN0IGVycjoge1xuICAgICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge1xuICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaSBpbiBlcnJvcikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgaSkpIHtcbiAgICAgICAgZXJyW2ldID0gZXJyb3JbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycjtcbiAgfVxuXG4gIGlmIChpc0V2ZW50KHZhbHVlKSkge1xuICAgIC8qKlxuICAgICAqIEV2ZW50LWxpa2UgaW50ZXJmYWNlIHRoYXQncyB1c2FibGUgaW4gYnJvd3NlciBhbmQgbm9kZVxuICAgICAqL1xuICAgIGludGVyZmFjZSBTaW1wbGVFdmVudCB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgdGFyZ2V0PzogdW5rbm93bjtcbiAgICAgIGN1cnJlbnRUYXJnZXQ/OiB1bmtub3duO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gdmFsdWUgYXMgU2ltcGxlRXZlbnQ7XG5cbiAgICBjb25zdCBzb3VyY2U6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge307XG5cbiAgICBzb3VyY2UudHlwZSA9IGV2ZW50LnR5cGU7XG5cbiAgICAvLyBBY2Nlc3NpbmcgZXZlbnQudGFyZ2V0IGNhbiB0aHJvdyAoc2VlIGdldHNlbnRyeS9yYXZlbi1qcyM4MzgsICM3NjgpXG4gICAgdHJ5IHtcbiAgICAgIHNvdXJjZS50YXJnZXQgPSBpc0VsZW1lbnQoZXZlbnQudGFyZ2V0KVxuICAgICAgICA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnQudGFyZ2V0KVxuICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudC50YXJnZXQpO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgc291cmNlLnRhcmdldCA9ICc8dW5rbm93bj4nO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzb3VyY2UuY3VycmVudFRhcmdldCA9IGlzRWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KVxuICAgICAgICA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICBzb3VyY2UuY3VycmVudFRhcmdldCA9ICc8dW5rbm93bj4nO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHtcbiAgICAgIHNvdXJjZS5kZXRhaWwgPSBldmVudC5kZXRhaWw7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpIGluIGV2ZW50KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCBpKSkge1xuICAgICAgICBzb3VyY2VbaV0gPSBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlIGFzIHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG59XG5cbi8qKiBDYWxjdWxhdGVzIGJ5dGVzIHNpemUgb2YgaW5wdXQgc3RyaW5nICovXG5mdW5jdGlvbiB1dGY4TGVuZ3RoKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICByZXR1cm4gfi1lbmNvZGVVUkkodmFsdWUpLnNwbGl0KC8lLi58Li8pLmxlbmd0aDtcbn1cblxuLyoqIENhbGN1bGF0ZXMgYnl0ZXMgc2l6ZSBvZiBpbnB1dCBvYmplY3QgKi9cbmZ1bmN0aW9uIGpzb25TaXplKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gdXRmOExlbmd0aChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUb1NpemU8VD4oXG4gIG9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgLy8gRGVmYXVsdCBOb2RlLmpzIFJFUEwgZGVwdGhcbiAgZGVwdGg6IG51bWJlciA9IDMsXG4gIC8vIDEwMGtCLCBhcyAyMDBrQiBpcyBtYXggcGF5bG9hZCBzaXplLCBzbyBoYWxmIHNvdW5kcyByZWFzb25hYmxlXG4gIG1heFNpemU6IG51bWJlciA9IDEwMCAqIDEwMjQsXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IG5vcm1hbGl6ZShvYmplY3QsIGRlcHRoKTtcblxuICBpZiAoanNvblNpemUoc2VyaWFsaXplZCkgPiBtYXhTaXplKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVRvU2l6ZShvYmplY3QsIGRlcHRoIC0gMSwgbWF4U2l6ZSk7XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplZCBhcyBUO1xufVxuXG4vKiogVHJhbnNmb3JtcyBhbnkgaW5wdXQgdmFsdWUgaW50byBhIHN0cmluZyBmb3JtLCBlaXRoZXIgcHJpbWl0aXZlIHZhbHVlIG9yIGEgdHlwZSBvZiB0aGUgaW5wdXQgKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuICAvLyBOb2RlLmpzIFJFUEwgbm90YXRpb25cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgcmV0dXJuICdbT2JqZWN0XSc7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICByZXR1cm4gJ1tBcnJheV0nO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIGlzUHJpbWl0aXZlKG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IHR5cGU7XG59XG5cbi8qKlxuICogbm9ybWFsaXplVmFsdWUoKVxuICpcbiAqIFRha2VzIHVuc2VyaWFsaXphYmxlIGlucHV0IGFuZCBtYWtlIGl0IHNlcmlhbGl6YWJsZSBmcmllbmRseVxuICpcbiAqIC0gdHJhbnNsYXRlcyB1bmRlZmluZWQvTmFOIHZhbHVlcyB0byBcIlt1bmRlZmluZWRdXCIvXCJbTmFOXVwiIHJlc3BlY3RpdmVseSxcbiAqIC0gc2VyaWFsaXplcyBFcnJvciBvYmplY3RzXG4gKiAtIGZpbHRlciBnbG9iYWwgb2JqZWN0c1xuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZTxUPih2YWx1ZTogVCwga2V5PzogYW55KTogVCB8IHN0cmluZyB7XG4gIGlmIChrZXkgPT09ICdkb21haW4nICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKCh2YWx1ZSBhcyB1bmtub3duKSBhcyB7IF9ldmVudHM6IGFueSB9KS5fZXZlbnRzKSB7XG4gICAgcmV0dXJuICdbRG9tYWluXSc7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnZG9tYWluRW1pdHRlcicpIHtcbiAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7XG4gIH1cblxuICBpZiAodHlwZW9mIChnbG9iYWwgYXMgYW55KSAhPT0gJ3VuZGVmaW5lZCcgJiYgKHZhbHVlIGFzIHVua25vd24pID09PSBnbG9iYWwpIHtcbiAgICByZXR1cm4gJ1tHbG9iYWxdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgKHdpbmRvdyBhcyBhbnkpICE9PSAndW5kZWZpbmVkJyAmJiAodmFsdWUgYXMgdW5rbm93bikgPT09IHdpbmRvdykge1xuICAgIHJldHVybiAnW1dpbmRvd10nO1xuICB9XG5cbiAgaWYgKHR5cGVvZiAoZG9jdW1lbnQgYXMgYW55KSAhPT0gJ3VuZGVmaW5lZCcgJiYgKHZhbHVlIGFzIHVua25vd24pID09PSBkb2N1bWVudCkge1xuICAgIHJldHVybiAnW0RvY3VtZW50XSc7XG4gIH1cblxuICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neVxuICBpZiAoaXNTeW50aGV0aWNFdmVudCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXRhdXRvbG9neS1leHByZXNzaW9uXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiAnW05hTl0nO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gJ1t1bmRlZmluZWRdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYFtGdW5jdGlvbjogJHtnZXRGdW5jdGlvbk5hbWUodmFsdWUpfV1gO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFdhbGtzIGFuIG9iamVjdCB0byBwZXJmb3JtIGEgbm9ybWFsaXphdGlvbiBvbiBpdFxuICpcbiAqIEBwYXJhbSBrZXkgb2Ygb2JqZWN0IHRoYXQncyB3YWxrZWQgaW4gY3VycmVudCBpdGVyYXRpb25cbiAqIEBwYXJhbSB2YWx1ZSBvYmplY3QgdG8gYmUgd2Fsa2VkXG4gKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IGRlZXAgc2hvdWxkIHdhbGtpbmcgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gbWVtbyBPcHRpb25hbCBNZW1vIGNsYXNzIGhhbmRsaW5nIGRlY3ljbGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2FsayhrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgZGVwdGg6IG51bWJlciA9ICtJbmZpbml0eSwgbWVtbzogTWVtbyA9IG5ldyBNZW1vKCkpOiBhbnkge1xuICAvLyBJZiB3ZSByZWFjaCB0aGUgbWF4aW11bSBkZXB0aCwgc2VyaWFsaXplIHdoYXRldmVyIGhhcyBsZWZ0XG4gIGlmIChkZXB0aCA9PT0gMCkge1xuICAgIHJldHVybiBzZXJpYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvLyBJZiB2YWx1ZSBpbXBsZW1lbnRzIGB0b0pTT05gIG1ldGhvZCwgY2FsbCBpdCBhbmQgcmV0dXJuIGVhcmx5XG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLXVuc2FmZS1hbnlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZS50b0pTT04oKTtcbiAgfVxuICAvLyB0c2xpbnQ6ZW5hYmxlOm5vLXVuc2FmZS1hbnlcblxuICAvLyBJZiBub3JtYWxpemVkIHZhbHVlIGlzIGEgcHJpbWl0aXZlLCB0aGVyZSBhcmUgbm8gYnJhbmNoZXMgbGVmdCB0byB3YWxrLCBzbyB3ZSBjYW4ganVzdCBiYWlsIG91dCwgYXMgdGhlcmVzIG5vIHBvaW50IGluIGdvaW5nIGRvd24gdGhhdCBicmFuY2ggYW55IGZ1cnRoZXJcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCBrZXkpO1xuICBpZiAoaXNQcmltaXRpdmUobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBzb3VyY2UgdGhhdCB3ZSB3aWxsIHVzZSBmb3IgbmV4dCBpdHRlcmF0aW9ucywgZWl0aGVyIG9iamVjdGlmaWVkIGVycm9yIG9iamVjdCAoRXJyb3IgdHlwZSB3aXRoIGV4dHJhY3RlZCBrZXlzOnZhbHVlIHBhaXJzKSBvciB0aGUgaW5wdXQgaXRzZWxmXG4gIGNvbnN0IHNvdXJjZSA9IGdldFdhbGtTb3VyY2UodmFsdWUpO1xuXG4gIC8vIENyZWF0ZSBhbiBhY2N1bXVsYXRvciB0aGF0IHdpbGwgYWN0IGFzIGEgcGFyZW50IGZvciBhbGwgZnV0dXJlIGl0dGVyYXRpb25zIG9mIHRoYXQgYnJhbmNoXG4gIGNvbnN0IGFjYyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fTtcblxuICAvLyBJZiB3ZSBhbHJlYWR5IHdhbGtlZCB0aGF0IGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlXG4gIGlmIChtZW1vLm1lbW9pemUodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nO1xuICB9XG5cbiAgLy8gV2FsayBhbGwga2V5cyBvZiB0aGUgc291cmNlXG4gIGZvciAoY29uc3QgaW5uZXJLZXkgaW4gc291cmNlKSB7XG4gICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGlubmVyS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHdhbGsgdGhyb3VnaCBhbGwgdGhlIGNoaWxkIG5vZGVzXG4gICAgKGFjYyBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KVtpbm5lcktleV0gPSB3YWxrKGlubmVyS2V5LCBzb3VyY2VbaW5uZXJLZXldLCBkZXB0aCAtIDEsIG1lbW8pO1xuICB9XG5cbiAgLy8gT25jZSB3YWxrZWQgdGhyb3VnaCBhbGwgdGhlIGJyYW5jaGVzLCByZW1vdmUgdGhlIHBhcmVudCBmcm9tIG1lbW8gc3RvcmFnZVxuICBtZW1vLnVubWVtb2l6ZSh2YWx1ZSk7XG5cbiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlc1xuICByZXR1cm4gYWNjO1xufVxuXG4vKipcbiAqIG5vcm1hbGl6ZSgpXG4gKlxuICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uXG4gKiAtIFNraXAgbm9uLWVudW1lcmFibGVyc1xuICogLSBDYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZFxuICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAqIC0gVHJhbnNsYXRlcyBub24tc2VyaWFsaXplYWJsZSB2YWx1ZXMgKHVuZGVmaW5lZC9OYU4vRnVuY3Rpb25zKSB0byBzZXJpYWxpemFibGUgZm9ybWF0XG4gKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvQ2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnNcbiAqIC0gVGFrZXMgY2FyZSBvZiBFcnJvciBvYmplY3RzIHNlcmlhbGl6YXRpb25cbiAqIC0gT3B0aW9uYWxseSBsaW1pdCBkZXB0aCBvZiBmaW5hbCBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dDogYW55LCBkZXB0aD86IG51bWJlcik6IGFueSB7XG4gIHRyeSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuc2FmZS1hbnlcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCwgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB3YWxrKGtleSwgdmFsdWUsIGRlcHRoKSkpO1xuICB9IGNhdGNoIChfb08pIHtcbiAgICByZXR1cm4gJyoqbm9uLXNlcmlhbGl6YWJsZSoqJztcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFueSBjYXB0dXJlZCBleGNlcHRpb24sIGV4dHJhY3QgaXRzIGtleXMgYW5kIGNyZWF0ZSBhIHNvcnRlZFxuICogYW5kIHRydW5jYXRlZCBsaXN0IHRoYXQgd2lsbCBiZSB1c2VkIGluc2lkZSB0aGUgZXZlbnQgbWVzc2FnZS5cbiAqIGVnLiBgTm9uLWVycm9yIGV4Y2VwdGlvbiBjYXB0dXJlZCB3aXRoIGtleXM6IGZvbywgYmFyLCBiYXpgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UoZXhjZXB0aW9uOiBhbnksIG1heExlbmd0aDogbnVtYmVyID0gNDApOiBzdHJpbmcge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhnZXRXYWxrU291cmNlKGV4Y2VwdGlvbikpO1xuICBrZXlzLnNvcnQoKTtcblxuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IGhhcyBubyBrZXlzXSc7XG4gIH1cblxuICBpZiAoa2V5c1swXS5sZW5ndGggPj0gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydW5jYXRlKGtleXNbMF0sIG1heExlbmd0aCk7XG4gIH1cblxuICBmb3IgKGxldCBpbmNsdWRlZEtleXMgPSBrZXlzLmxlbmd0aDsgaW5jbHVkZWRLZXlzID4gMDsgaW5jbHVkZWRLZXlzLS0pIHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0ga2V5cy5zbGljZSgwLCBpbmNsdWRlZEtleXMpLmpvaW4oJywgJyk7XG4gICAgaWYgKHNlcmlhbGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVkS2V5cyA9PT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1bmNhdGUoc2VyaWFsaXplZCwgbWF4TGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gdGhlIG5ldyBvYmplY3Qgd2l0aCByZW1vdmVkIGtleXMgdGhhdCB2YWx1ZSB3YXMgYHVuZGVmaW5lZGAuXG4gKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5czxUPih2YWw6IFQpOiBUIHtcbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgIGNvbnN0IG9iaiA9IHZhbCBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGNvbnN0IHJ2OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcnZba2V5XSA9IGRyb3BVbmRlZmluZWRLZXlzKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJ2IGFzIFQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbC5tYXAoZHJvcFVuZGVmaW5lZEtleXMpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBRkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFHQTtBQUFBO0FBSEE7QUFNQTtBQUVBOzs7Ozs7O0FBTUE7QUFLQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUVBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBakNBO0FBQ0E7QUFDQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQUNBO0FBQ0E7QUFvQkE7QUFDQTtBQXZCQTtBQUNBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBVEE7QUFhQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQWhCQTtBQUNBO0FBQ0E7QUFrQkE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBM0JBO0FBQ0E7QUFDQTtBQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUlBO0FBckNBO0FBQ0E7QUFDQTtBQXVDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBSUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/object.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/path.js": -/*!*************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/path.js ***! - \*************************************************/ -/*! exports provided: resolve, relative, normalizePath, isAbsolute, join, dirname, basename */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"resolve\", function() { return resolve; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"relative\", function() { return relative; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"normalizePath\", function() { return normalizePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAbsolute\", function() { return isAbsolute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"join\", function() { return join; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dirname\", function() { return dirname; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basename\", function() { return basename; });\n// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://raw.githubusercontent.com/calvinmetcalf/rollup-plugin-node-builtins/master/src/es6/path.js\n\n/** JSDoc */\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\n\n\nvar splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n/** JSDoc */\n\nfunction splitPath(filename) {\n var parts = splitPathRe.exec(filename);\n return parts ? parts.slice(1) : [];\n} // path.resolve([from ...], to)\n// posix version\n\n/** JSDoc */\n\n\nfunction resolve() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var resolvedPath = '';\n var resolvedAbsolute = false;\n\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : '/'; // Skip empty entries\n\n if (!path) {\n continue;\n }\n\n resolvedPath = path + \"/\" + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(resolvedPath.split('/').filter(function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n/** JSDoc */\n\nfunction trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') {\n break;\n }\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') {\n break;\n }\n }\n\n if (start > end) {\n return [];\n }\n\n return arr.slice(start, end - start + 1);\n} // path.relative(from, to)\n// posix version\n\n/** JSDoc */\n\n\nfunction relative(from, to) {\n // tslint:disable:no-parameter-reassignment\n from = resolve(from).substr(1);\n to = resolve(to).substr(1);\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n} // path.normalize(path)\n// posix version\n\n/** JSDoc */\n\nfunction normalizePath(path) {\n var isPathAbsolute = isAbsolute(path);\n var trailingSlash = path.substr(-1) === '/'; // Normalize the path\n\n var normalizedPath = normalizeArray(path.split('/').filter(function (p) {\n return !!p;\n }), !isPathAbsolute).join('/');\n\n if (!normalizedPath && !isPathAbsolute) {\n normalizedPath = '.';\n }\n\n if (normalizedPath && trailingSlash) {\n normalizedPath += '/';\n }\n\n return (isPathAbsolute ? '/' : '') + normalizedPath;\n} // posix version\n\n/** JSDoc */\n\nfunction isAbsolute(path) {\n return path.charAt(0) === '/';\n} // posix version\n\n/** JSDoc */\n\nfunction join() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n return normalizePath(args.join('/'));\n}\n/** JSDoc */\n\nfunction dirname(path) {\n var result = splitPath(path);\n var root = result[0];\n var dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n}\n/** JSDoc */\n\nfunction basename(path, ext) {\n var f = splitPath(path)[2];\n\n if (ext && f.substr(ext.length * -1) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3BhdGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL3BhdGgudHM/YTk3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTbGlnaHRseSBtb2RpZmllZCAobm8gSUU4IHN1cHBvcnQsIEVTNikgYW5kIHRyYW5zY3JpYmVkIHRvIFR5cGVTY3JpcHRcbi8vIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jYWx2aW5tZXRjYWxmL3JvbGx1cC1wbHVnaW4tbm9kZS1idWlsdGlucy9tYXN0ZXIvc3JjL2VzNi9wYXRoLmpzXG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHM6IHN0cmluZ1tdLCBhbGxvd0Fib3ZlUm9vdD86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIGxldCB1cCA9IDA7XG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbmNvbnN0IHNwbGl0UGF0aFJlID0gL14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC87XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJ0cyA9IHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpO1xuICByZXR1cm4gcGFydHMgPyBwYXJ0cy5zbGljZSgxKSA6IFtdO1xufVxuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHJlc29sdmVkUGF0aCA9ICcnO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBhcmdzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIGNvbnN0IHBhdGggPSBpID49IDAgPyBhcmdzW2ldIDogJy8nO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBgJHtwYXRofS8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKHAgPT4gISFwKSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGggfHwgJy4nO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHRyaW0oYXJyOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgbGV0IGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICBmb3IgKDsgZW5kID49IDA7IGVuZC0tKSB7XG4gICAgaWYgKGFycltlbmRdICE9PSAnJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG59XG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1wYXJhbWV0ZXItcmVhc3NpZ25tZW50XG4gIGZyb20gPSByZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSByZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgY29uc3QgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICBjb25zdCB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLCB0b1BhcnRzLmxlbmd0aCk7XG4gIGxldCBzYW1lUGFydHNMZW5ndGggPSBsZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZnJvbVBhcnRzW2ldICE9PSB0b1BhcnRzW2ldKSB7XG4gICAgICBzYW1lUGFydHNMZW5ndGggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgbGV0IG91dHB1dFBhcnRzID0gW107XG4gIGZvciAobGV0IGkgPSBzYW1lUGFydHNMZW5ndGg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXRQYXJ0cy5wdXNoKCcuLicpO1xuICB9XG5cbiAgb3V0cHV0UGFydHMgPSBvdXRwdXRQYXJ0cy5jb25jYXQodG9QYXJ0cy5zbGljZShzYW1lUGFydHNMZW5ndGgpKTtcblxuICByZXR1cm4gb3V0cHV0UGFydHMuam9pbignLycpO1xufVxuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpc1BhdGhBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCk7XG4gIGNvbnN0IHRyYWlsaW5nU2xhc2ggPSBwYXRoLnN1YnN0cigtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkocGF0aC5zcGxpdCgnLycpLmZpbHRlcihwID0+ICEhcCksICFpc1BhdGhBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghbm9ybWFsaXplZFBhdGggJiYgIWlzUGF0aEFic29sdXRlKSB7XG4gICAgbm9ybWFsaXplZFBhdGggPSAnLic7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRQYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBub3JtYWxpemVkUGF0aCArPSAnLyc7XG4gIH1cblxuICByZXR1cm4gKGlzUGF0aEFic29sdXRlID8gJy8nIDogJycpICsgbm9ybWFsaXplZFBhdGg7XG59XG5cbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufVxuXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoYXJncy5qb2luKCcvJykpO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTtcbiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTtcbiAgbGV0IGRpciA9IHJlc3VsdFsxXTtcblxuICBpZiAoIXJvb3QgJiYgIWRpcikge1xuICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlclxuICAgIHJldHVybiAnLic7XG4gIH1cblxuICBpZiAoZGlyKSB7XG4gICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiByb290ICsgZGlyO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcsIGV4dD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBmID0gc3BsaXRQYXRoKHBhdGgpWzJdO1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKGV4dC5sZW5ndGggKiAtMSkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQWlCQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTs7O0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/path.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/polyfill.js": -/*!*****************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/polyfill.js ***! - \*****************************************************/ -/*! exports provided: setPrototypeOf */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setPrototypeOf\", function() { return setPrototypeOf; });\nvar setPrototypeOf = Object.setPrototypeOf || ({\n __proto__: []\n} instanceof Array ? setProtoOf : mixinProperties); // tslint:disable-line:no-unbound-method\n\n/**\n * setPrototypeOf polyfill using __proto__\n */\n\nfunction setProtoOf(obj, proto) {\n // @ts-ignore\n obj.__proto__ = proto;\n return obj;\n}\n/**\n * setPrototypeOf polyfill using mixin\n */\n\n\nfunction mixinProperties(obj, proto) {\n for (var prop in proto) {\n if (!obj.hasOwnProperty(prop)) {\n // @ts-ignore\n obj[prop] = proto[prop];\n }\n }\n\n return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3BvbHlmaWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9wb2x5ZmlsbC50cz8zOGY4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBzZXRQcm90b3R5cGVPZiA9XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSA/IHNldFByb3RvT2YgOiBtaXhpblByb3BlcnRpZXMpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVuYm91bmQtbWV0aG9kXG5cbi8qKlxuICogc2V0UHJvdG90eXBlT2YgcG9seWZpbGwgdXNpbmcgX19wcm90b19fXG4gKi9cbmZ1bmN0aW9uIHNldFByb3RvT2Y8VFRhcmdldCBleHRlbmRzIG9iamVjdCwgVFByb3RvPihvYmo6IFRUYXJnZXQsIHByb3RvOiBUUHJvdG8pOiBUVGFyZ2V0ICYgVFByb3RvIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBvYmouX19wcm90b19fID0gcHJvdG87XG4gIHJldHVybiBvYmogYXMgVFRhcmdldCAmIFRQcm90bztcbn1cblxuLyoqXG4gKiBzZXRQcm90b3R5cGVPZiBwb2x5ZmlsbCB1c2luZyBtaXhpblxuICovXG5mdW5jdGlvbiBtaXhpblByb3BlcnRpZXM8VFRhcmdldCBleHRlbmRzIG9iamVjdCwgVFByb3RvPihvYmo6IFRUYXJnZXQsIHByb3RvOiBUUHJvdG8pOiBUVGFyZ2V0ICYgVFByb3RvIHtcbiAgZm9yIChjb25zdCBwcm9wIGluIHByb3RvKSB7XG4gICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9ialtwcm9wXSA9IHByb3RvW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmogYXMgVFRhcmdldCAmIFRQcm90bztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/polyfill.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/promisebuffer.js": -/*!**********************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/promisebuffer.js ***! - \**********************************************************/ -/*! exports provided: PromiseBuffer */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PromiseBuffer\", function() { return PromiseBuffer; });\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./error */ \"../node_modules/@sentry/utils/esm/error.js\");\n/* harmony import */ var _syncpromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./syncpromise */ \"../node_modules/@sentry/utils/esm/syncpromise.js\");\n\n\n/** A simple queue that holds promises. */\n\nvar PromiseBuffer =\n/** @class */\nfunction () {\n function PromiseBuffer(_limit) {\n this._limit = _limit;\n /** Internal set of queued Promises */\n\n this._buffer = [];\n }\n /**\n * Says if the buffer is ready to take more requests\n */\n\n\n PromiseBuffer.prototype.isReady = function () {\n return this._limit === undefined || this.length() < this._limit;\n };\n /**\n * Add a promise to the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns The original promise.\n */\n\n\n PromiseBuffer.prototype.add = function (task) {\n var _this = this;\n\n if (!this.isReady()) {\n return _syncpromise__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].reject(new _error__WEBPACK_IMPORTED_MODULE_0__[\"SentryError\"]('Not adding Promise due to buffer limit reached.'));\n }\n\n if (this._buffer.indexOf(task) === -1) {\n this._buffer.push(task);\n }\n\n task.then(function () {\n return _this.remove(task);\n }).then(null, function () {\n return _this.remove(task).then(null, function () {// We have to add this catch here otherwise we have an unhandledPromiseRejection\n // because it's a new Promise chain.\n });\n });\n return task;\n };\n /**\n * Remove a promise to the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns Removed promise.\n */\n\n\n PromiseBuffer.prototype.remove = function (task) {\n var removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0];\n\n return removedTask;\n };\n /**\n * This function returns the number of unresolved promises in the queue.\n */\n\n\n PromiseBuffer.prototype.length = function () {\n return this._buffer.length;\n };\n /**\n * This will drain the whole queue, returns true if queue is empty or drained.\n * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false.\n *\n * @param timeout Number in ms to wait until it resolves with false.\n */\n\n\n PromiseBuffer.prototype.drain = function (timeout) {\n var _this = this;\n\n return new _syncpromise__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"](function (resolve) {\n var capturedSetTimeout = setTimeout(function () {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n _syncpromise__WEBPACK_IMPORTED_MODULE_1__[\"SyncPromise\"].all(_this._buffer).then(function () {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }).then(null, function () {\n resolve(true);\n });\n });\n };\n\n return PromiseBuffer;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3Byb21pc2VidWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL3Byb21pc2VidWZmZXIudHM/MmFhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZW50cnlFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHsgU3luY1Byb21pc2UgfSBmcm9tICcuL3N5bmNwcm9taXNlJztcblxuLyoqIEEgc2ltcGxlIHF1ZXVlIHRoYXQgaG9sZHMgcHJvbWlzZXMuICovXG5leHBvcnQgY2xhc3MgUHJvbWlzZUJ1ZmZlcjxUPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xpbWl0PzogbnVtYmVyKSB7fVxuXG4gIC8qKiBJbnRlcm5hbCBzZXQgb2YgcXVldWVkIFByb21pc2VzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZmZlcjogQXJyYXk8UHJvbWlzZUxpa2U8VD4+ID0gW107XG5cbiAgLyoqXG4gICAqIFNheXMgaWYgdGhlIGJ1ZmZlciBpcyByZWFkeSB0byB0YWtlIG1vcmUgcmVxdWVzdHNcbiAgICovXG4gIHB1YmxpYyBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9saW1pdCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubGVuZ3RoKCkgPCB0aGlzLl9saW1pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9taXNlIHRvIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgQ2FuIGJlIGFueSBQcm9taXNlTGlrZTxUPlxuICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS5cbiAgICovXG4gIHB1YmxpYyBhZGQodGFzazogUHJvbWlzZUxpa2U8VD4pOiBQcm9taXNlTGlrZTxUPiB7XG4gICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlamVjdChuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBkdWUgdG8gYnVmZmVyIGxpbWl0IHJlYWNoZWQuJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7XG4gICAgICB0aGlzLl9idWZmZXIucHVzaCh0YXNrKTtcbiAgICB9XG4gICAgdGFza1xuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZW1vdmUodGFzaykpXG4gICAgICAudGhlbihudWxsLCAoKSA9PlxuICAgICAgICB0aGlzLnJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHtcbiAgICAgICAgICAvLyBXZSBoYXZlIHRvIGFkZCB0aGlzIGNhdGNoIGhlcmUgb3RoZXJ3aXNlIHdlIGhhdmUgYW4gdW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvblxuICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyBhIG5ldyBQcm9taXNlIGNoYWluLlxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRhc2s7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcHJvbWlzZSB0byB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD5cbiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZSh0YXNrOiBQcm9taXNlTGlrZTxUPik6IFByb21pc2VMaWtlPFQ+IHtcbiAgICBjb25zdCByZW1vdmVkVGFzayA9IHRoaXMuX2J1ZmZlci5zcGxpY2UodGhpcy5fYnVmZmVyLmluZGV4T2YodGFzayksIDEpWzBdO1xuICAgIHJldHVybiByZW1vdmVkVGFzaztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIHByb21pc2VzIGluIHRoZSBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgZHJhaW4gdGhlIHdob2xlIHF1ZXVlLCByZXR1cm5zIHRydWUgaWYgcXVldWUgaXMgZW1wdHkgb3IgZHJhaW5lZC5cbiAgICogSWYgdGltZW91dCBpcyBwcm92aWRlZCBhbmQgdGhlIHF1ZXVlIHRha2VzIGxvbmdlciB0byBkcmFpbiwgdGhlIHByb21pc2Ugc3RpbGwgcmVzb2x2ZXMgYnV0IHdpdGggZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IE51bWJlciBpbiBtcyB0byB3YWl0IHVudGlsIGl0IHJlc29sdmVzIHdpdGggZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZHJhaW4odGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aW1lb3V0ICYmIHRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgU3luY1Byb21pc2UuYWxsKHRoaXMuX2J1ZmZlcilcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKG51bGwsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUhBO0FBS0E7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFGQTtBQUhBO0FBUUE7QUFmQTtBQWtCQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUZBO0FBS0E7Ozs7O0FBR0E7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFFQTtBQUNBO0FBSEE7QUFNQTtBQU5BO0FBTkE7QUFEQTtBQUNBO0FBZ0JBO0FBOUVBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/promisebuffer.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/string.js": -/*!***************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/string.js ***! - \***************************************************/ -/*! exports provided: truncate, snipLine, safeJoin, isMatchingPattern */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"truncate\", function() { return truncate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"snipLine\", function() { return snipLine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"safeJoin\", function() { return safeJoin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isMatchingPattern\", function() { return isMatchingPattern; });\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\n\nfunction truncate(str, max) {\n if (max === void 0) {\n max = 0;\n } // tslint:disable-next-line:strict-type-predicates\n\n\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n\n return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\n\nfunction snipLine(line, colno) {\n var newLine = line;\n var ll = newLine.length;\n\n if (ll <= 150) {\n return newLine;\n }\n\n if (colno > ll) {\n colno = ll; // tslint:disable-line:no-parameter-reassignment\n }\n\n var start = Math.max(colno - 60, 0);\n\n if (start < 5) {\n start = 0;\n }\n\n var end = Math.min(start + 140, ll);\n\n if (end > ll - 5) {\n end = ll;\n }\n\n if (end === ll) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n\n if (start > 0) {\n newLine = \"'{snip} \" + newLine;\n }\n\n if (end < ll) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n var output = []; // tslint:disable-next-line:prefer-for-of\n\n for (var i = 0; i < input.length; i++) {\n var value = input[i];\n\n try {\n output.push(String(value));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\n\nfunction isMatchingPattern(value, pattern) {\n if (Object(_is__WEBPACK_IMPORTED_MODULE_0__[\"isRegExp\"])(pattern)) {\n return pattern.test(value);\n }\n\n if (typeof pattern === 'string') {\n return value.indexOf(pattern) !== -1;\n }\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3N0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zcmMvc3RyaW5nLnRzPzE1ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZWdFeHAgfSBmcm9tICcuL2lzJztcblxuLyoqXG4gKiBUcnVuY2F0ZXMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBtYXhpbXVtIGNoYXJhY3RlcnMgY291bnRcbiAqXG4gKiBAcGFyYW0gc3RyIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgc3RyaW5nXG4gKiBAcmV0dXJucyBzdHJpbmcgRW5jb2RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyOiBzdHJpbmcsIG1heDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtdHlwZS1wcmVkaWNhdGVzXG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBtYXggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIubGVuZ3RoIDw9IG1heCA/IHN0ciA6IGAke3N0ci5zdWJzdHIoMCwgbWF4KX0uLi5gO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgYHRyaW1fbGluZWAgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnkvYmxvYi9tYXN0ZXIvc3JjL3NlbnRyeS9sYW5nL2phdmFzY3JpcHQvcHJvY2Vzc29yLnB5I0w2N1xuICpcbiAqIEBwYXJhbSBzdHIgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHBhcmFtIG1heCBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRydW5jYXRlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNuaXBMaW5lKGxpbmU6IHN0cmluZywgY29sbm86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5lID0gbGluZTtcbiAgY29uc3QgbGwgPSBuZXdMaW5lLmxlbmd0aDtcbiAgaWYgKGxsIDw9IDE1MCkge1xuICAgIHJldHVybiBuZXdMaW5lO1xuICB9XG4gIGlmIChjb2xubyA+IGxsKSB7XG4gICAgY29sbm8gPSBsbDsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1wYXJhbWV0ZXItcmVhc3NpZ25tZW50XG4gIH1cblxuICBsZXQgc3RhcnQgPSBNYXRoLm1heChjb2xubyAtIDYwLCAwKTtcbiAgaWYgKHN0YXJ0IDwgNSkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGxldCBlbmQgPSBNYXRoLm1pbihzdGFydCArIDE0MCwgbGwpO1xuICBpZiAoZW5kID4gbGwgLSA1KSB7XG4gICAgZW5kID0gbGw7XG4gIH1cbiAgaWYgKGVuZCA9PT0gbGwpIHtcbiAgICBzdGFydCA9IE1hdGgubWF4KGVuZCAtIDE0MCwgMCk7XG4gIH1cblxuICBuZXdMaW5lID0gbmV3TGluZS5zbGljZShzdGFydCwgZW5kKTtcbiAgaWYgKHN0YXJ0ID4gMCkge1xuICAgIG5ld0xpbmUgPSBgJ3tzbmlwfSAke25ld0xpbmV9YDtcbiAgfVxuICBpZiAoZW5kIDwgbGwpIHtcbiAgICBuZXdMaW5lICs9ICcge3NuaXB9JztcbiAgfVxuXG4gIHJldHVybiBuZXdMaW5lO1xufVxuXG4vKipcbiAqIEpvaW4gdmFsdWVzIGluIGFycmF5XG4gKiBAcGFyYW0gaW5wdXQgYXJyYXkgb2YgdmFsdWVzIHRvIGJlIGpvaW5lZCB0b2dldGhlclxuICogQHBhcmFtIGRlbGltaXRlciBzdHJpbmcgdG8gYmUgcGxhY2VkIGluLWJldHdlZW4gdmFsdWVzXG4gKiBAcmV0dXJucyBKb2luZWQgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlSm9pbihpbnB1dDogYW55W10sIGRlbGltaXRlcj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXRbaV07XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dC5wdXNoKFN0cmluZyh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG91dHB1dC5wdXNoKCdbdmFsdWUgY2Fubm90IGJlIHNlcmlhbGl6ZWRdJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dC5qb2luKGRlbGltaXRlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSB2YWx1ZSBtYXRjaGVzIGEgcmVnZXggb3IgaW5jbHVkZXMgdGhlIHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKiBAcGFyYW0gcGF0dGVybiBFaXRoZXIgYSByZWdleCBvciBhIHN0cmluZyB0aGF0IG11c3QgYmUgY29udGFpbmVkIGluIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoaW5nUGF0dGVybih2YWx1ZTogc3RyaW5nLCBwYXR0ZXJuOiBSZWdFeHAgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIChwYXR0ZXJuIGFzIFJlZ0V4cCkudGVzdCh2YWx1ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKHBhdHRlcm4pICE9PSAtMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/string.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/supports.js": -/*!*****************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/supports.js ***! - \*****************************************************/ -/*! exports provided: supportsErrorEvent, supportsDOMError, supportsDOMException, supportsFetch, supportsNativeFetch, supportsReportingObserver, supportsReferrerPolicy, supportsHistory */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsErrorEvent\", function() { return supportsErrorEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsDOMError\", function() { return supportsDOMError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsDOMException\", function() { return supportsDOMException; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsFetch\", function() { return supportsFetch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsNativeFetch\", function() { return supportsNativeFetch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsReportingObserver\", function() { return supportsReportingObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsReferrerPolicy\", function() { return supportsReferrerPolicy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsHistory\", function() { return supportsHistory; });\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger */ \"../node_modules/@sentry/utils/esm/logger.js\");\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./misc */ \"../node_modules/@sentry/utils/esm/misc.js\");\n\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsErrorEvent() {\n try {\n // tslint:disable:no-unused-expression\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsDOMError() {\n try {\n // It really needs 1 argument, not 0.\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-ignore\n // tslint:disable:no-unused-expression\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsDOMException() {\n try {\n // tslint:disable:no-unused-expression\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsFetch() {\n if (!('fetch' in Object(_misc__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])())) {\n return false;\n }\n\n try {\n // tslint:disable-next-line:no-unused-expression\n new Headers(); // tslint:disable-next-line:no-unused-expression\n\n new Request(''); // tslint:disable-next-line:no-unused-expression\n\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n\nfunction isNativeFetch(func) {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\n\n\nfunction supportsNativeFetch() {\n if (!supportsFetch()) {\n return false;\n }\n\n var global = Object(_misc__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])(); // Fast path to avoid DOM I/O\n // tslint:disable-next-line:no-unbound-method\n\n if (isNativeFetch(global.fetch)) {\n return true;\n } // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n\n\n var result = false;\n var doc = global.document;\n\n if (doc) {\n try {\n var sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // tslint:disable-next-line:no-unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n\n doc.head.removeChild(sandbox);\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsReportingObserver() {\n // tslint:disable-next-line: no-unsafe-any\n return 'ReportingObserver' in Object(_misc__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])();\n}\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n // tslint:disable:no-unused-expression\n new Request('_', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var global = Object(_misc__WEBPACK_IMPORTED_MODULE_1__[\"getGlobalObject\"])();\n var chrome = global.chrome; // tslint:disable-next-line:no-unsafe-any\n\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n return !isChromePackagedApp && hasHistoryApi;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3N1cHBvcnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9zdXBwb3J0cy50cz8xZDlhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEVycm9yRXZlbnQgb2JqZWN0c1xuICoge0BsaW5rIHN1cHBvcnRzRXJyb3JFdmVudH0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRXJyb3JFdmVudCgpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgIG5ldyBFcnJvckV2ZW50KCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBET01FcnJvciBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNET01FcnJvcn0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRE9NRXJyb3IoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gSXQgcmVhbGx5IG5lZWRzIDEgYXJndW1lbnQsIG5vdCAwLlxuICAgIC8vIENocm9tZTogVk04OToxIFVuY2F1Z2h0IFR5cGVFcnJvcjogRmFpbGVkIHRvIGNvbnN0cnVjdCAnRE9NRXJyb3InOlxuICAgIC8vIDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICBuZXcgRE9NRXJyb3IoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUV4Y2VwdGlvbiBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNET01FeGNlcHRpb259LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0RPTUV4Y2VwdGlvbigpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgIG5ldyBET01FeGNlcHRpb24oJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEZldGNoIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzRmV0Y2h9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0ZldGNoKCk6IGJvb2xlYW4ge1xuICBpZiAoISgnZmV0Y2gnIGluIGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICBuZXcgSGVhZGVycygpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgIG5ldyBSZXF1ZXN0KCcnKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICBuZXcgUmVzcG9uc2UoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBpc05hdGl2ZUZldGNoIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZmV0Y2goKVxuICovXG5mdW5jdGlvbiBpc05hdGl2ZUZldGNoKGZ1bmM6IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBmdW5jICYmIC9eZnVuY3Rpb24gZmV0Y2hcXChcXClcXHMrXFx7XFxzK1xcW25hdGl2ZSBjb2RlXFxdXFxzK1xcfSQvLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRmV0Y2ggQVBJIG5hdGl2ZWx5XG4gKiB7QGxpbmsgc3VwcG9ydHNOYXRpdmVGZXRjaH0uXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgd2luZG93LmZldGNoYCBpcyBuYXRpdmVseSBpbXBsZW1lbnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c05hdGl2ZUZldGNoKCk6IGJvb2xlYW4ge1xuICBpZiAoIXN1cHBvcnRzRmV0Y2goKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbiAgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuYm91bmQtbWV0aG9kXG4gIGlmIChpc05hdGl2ZUZldGNoKGdsb2JhbC5mZXRjaCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHdpbmRvdy5mZXRjaCBpcyBpbXBsZW1lbnRlZCwgYnV0IGlzIHBvbHlmaWxsZWQgb3IgYWxyZWFkeSB3cmFwcGVkIChlLmc6IGJ5IGEgY2hyb21lIGV4dGVuc2lvbilcbiAgLy8gc28gY3JlYXRlIGEgXCJwdXJlXCIgaWZyYW1lIHRvIHNlZSBpZiB0aGF0IGhhcyBuYXRpdmUgZmV0Y2hcbiAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICBjb25zdCBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gIGlmIChkb2MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgaWYgKHNhbmRib3guY29udGVudFdpbmRvdyAmJiBzYW5kYm94LmNvbnRlbnRXaW5kb3cuZmV0Y2gpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuYm91bmQtbWV0aG9kXG4gICAgICAgIHJlc3VsdCA9IGlzTmF0aXZlRmV0Y2goc2FuZGJveC5jb250ZW50V2luZG93LmZldGNoKTtcbiAgICAgIH1cbiAgICAgIGRvYy5oZWFkLnJlbW92ZUNoaWxkKHNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBjcmVhdGUgc2FuZGJveCBpZnJhbWUgZm9yIHB1cmUgZmV0Y2ggY2hlY2ssIGJhaWxpbmcgdG8gd2luZG93LmZldGNoOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlcG9ydGluZ09ic2VydmVyIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXJ9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyKCk6IGJvb2xlYW4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVuc2FmZS1hbnlcbiAgcmV0dXJuICdSZXBvcnRpbmdPYnNlcnZlcicgaW4gZ2V0R2xvYmFsT2JqZWN0KCk7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlZmVycmVyIFBvbGljeSBBUElcbiAqIHtAbGluayBzdXBwb3J0c1JlZmVycmVyUG9saWN5fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNSZWZlcnJlclBvbGljeSgpOiBib29sZWFuIHtcbiAgLy8gRGVzcGl0ZSBhbGwgc3RhcnMgaW4gdGhlIHNreSBzYXlpbmcgdGhhdCBFZGdlIHN1cHBvcnRzIG9sZCBkcmFmdCBzeW50YXgsIGFrYSAnbmV2ZXInLCAnYWx3YXlzJywgJ29yaWdpbicgYW5kICdkZWZhdWx0XG4gIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9cmVmZXJyZXItcG9saWN5XG4gIC8vIEl0IGRvZXNuJ3QuIEFuZCBpdCB0aHJvdyBleGNlcHRpb24gaW5zdGVhZCBvZiBpZ25vcmluZyB0aGlzIHBhcmFtZXRlci4uLlxuICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvcmF2ZW4tanMvaXNzdWVzLzEyMzNcblxuICBpZiAoIXN1cHBvcnRzRmV0Y2goKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICBuZXcgUmVxdWVzdCgnXycsIHtcbiAgICAgIHJlZmVycmVyUG9saWN5OiAnb3JpZ2luJyBhcyBSZWZlcnJlclBvbGljeSxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBIaXN0b3J5IEFQSVxuICoge0BsaW5rIHN1cHBvcnRzSGlzdG9yeX0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeSgpOiBib29sZWFuIHtcbiAgLy8gTk9URTogaW4gQ2hyb21lIEFwcCBlbnZpcm9ubWVudCwgdG91Y2hpbmcgaGlzdG9yeS5wdXNoU3RhdGUsICpldmVuIGluc2lkZVxuICAvLyAgICAgICBhIHRyeS9jYXRjaCBibG9jayosIHdpbGwgY2F1c2UgQ2hyb21lIHRvIG91dHB1dCBhbiBlcnJvciB0byBjb25zb2xlLmVycm9yXG4gIC8vIGJvcnJvd2VkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvcHVsbC8xMzk0NS9maWxlc1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuICBjb25zdCBjaHJvbWUgPSAoZ2xvYmFsIGFzIGFueSkuY2hyb21lO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5zYWZlLWFueVxuICBjb25zdCBpc0Nocm9tZVBhY2thZ2VkQXBwID0gY2hyb21lICYmIGNocm9tZS5hcHAgJiYgY2hyb21lLmFwcC5ydW50aW1lO1xuICBjb25zdCBoYXNIaXN0b3J5QXBpID0gJ2hpc3RvcnknIGluIGdsb2JhbCAmJiAhIWdsb2JhbC5oaXN0b3J5LnB1c2hTdGF0ZSAmJiAhIWdsb2JhbC5oaXN0b3J5LnJlcGxhY2VTdGF0ZTtcblxuICByZXR1cm4gIWlzQ2hyb21lUGFja2FnZWRBcHAgJiYgaGFzSGlzdG9yeUFwaTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQWNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/supports.js\n"); - -/***/ }), - -/***/ "../node_modules/@sentry/utils/esm/syncpromise.js": -/*!********************************************************!*\ - !*** ../node_modules/@sentry/utils/esm/syncpromise.js ***! - \********************************************************/ -/*! exports provided: SyncPromise */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SyncPromise\", function() { return SyncPromise; });\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is */ \"../node_modules/@sentry/utils/esm/is.js\");\n\n/** SyncPromise internal states */\n\nvar States;\n\n(function (States) {\n /** Pending */\n States[\"PENDING\"] = \"PENDING\";\n /** Resolved / OK */\n\n States[\"RESOLVED\"] = \"RESOLVED\";\n /** Rejected / Error */\n\n States[\"REJECTED\"] = \"REJECTED\";\n})(States || (States = {}));\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\n\n\nvar SyncPromise =\n/** @class */\nfunction () {\n function SyncPromise(executor) {\n var _this = this;\n\n this._state = States.PENDING;\n this._handlers = [];\n /** JSDoc */\n\n this._resolve = function (value) {\n _this._setResult(States.RESOLVED, value);\n };\n /** JSDoc */\n\n\n this._reject = function (reason) {\n _this._setResult(States.REJECTED, reason);\n };\n /** JSDoc */\n\n\n this._setResult = function (state, value) {\n if (_this._state !== States.PENDING) {\n return;\n }\n\n if (Object(_is__WEBPACK_IMPORTED_MODULE_0__[\"isThenable\"])(value)) {\n value.then(_this._resolve, _this._reject);\n return;\n }\n\n _this._state = state;\n _this._value = value;\n\n _this._executeHandlers();\n }; // TODO: FIXME\n\n /** JSDoc */\n\n\n this._attachHandler = function (handler) {\n _this._handlers = _this._handlers.concat(handler);\n\n _this._executeHandlers();\n };\n /** JSDoc */\n\n\n this._executeHandlers = function () {\n if (_this._state === States.PENDING) {\n return;\n }\n\n if (_this._state === States.REJECTED) {\n _this._handlers.forEach(function (handler) {\n if (handler.onrejected) {\n handler.onrejected(_this._value);\n }\n });\n } else {\n _this._handlers.forEach(function (handler) {\n if (handler.onfulfilled) {\n // tslint:disable-next-line:no-unsafe-any\n handler.onfulfilled(_this._value);\n }\n });\n }\n\n _this._handlers = [];\n };\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n /** JSDoc */\n\n\n SyncPromise.prototype.toString = function () {\n return '[object SyncPromise]';\n };\n /** JSDoc */\n\n\n SyncPromise.resolve = function (value) {\n return new SyncPromise(function (resolve) {\n resolve(value);\n });\n };\n /** JSDoc */\n\n\n SyncPromise.reject = function (reason) {\n return new SyncPromise(function (_, reject) {\n reject(reason);\n });\n };\n /** JSDoc */\n\n\n SyncPromise.all = function (collection) {\n return new SyncPromise(function (resolve, reject) {\n if (!Array.isArray(collection)) {\n reject(new TypeError(\"Promise.all requires an array as input.\"));\n return;\n }\n\n if (collection.length === 0) {\n resolve([]);\n return;\n }\n\n var counter = collection.length;\n var resolvedCollection = [];\n collection.forEach(function (item, index) {\n SyncPromise.resolve(item).then(function (value) {\n resolvedCollection[index] = value;\n counter -= 1;\n\n if (counter !== 0) {\n return;\n }\n\n resolve(resolvedCollection);\n }).then(null, reject);\n });\n });\n };\n /** JSDoc */\n\n\n SyncPromise.prototype.then = function (_onfulfilled, _onrejected) {\n var _this = this;\n\n return new SyncPromise(function (resolve, reject) {\n _this._attachHandler({\n onfulfilled: function onfulfilled(result) {\n if (!_onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result);\n return;\n }\n\n try {\n resolve(_onfulfilled(result));\n return;\n } catch (e) {\n reject(e);\n return;\n }\n },\n onrejected: function onrejected(reason) {\n if (!_onrejected) {\n reject(reason);\n return;\n }\n\n try {\n resolve(_onrejected(reason));\n return;\n } catch (e) {\n reject(e);\n return;\n }\n }\n });\n });\n };\n /** JSDoc */\n\n\n SyncPromise.prototype[\"catch\"] = function (onrejected) {\n return this.then(function (val) {\n return val;\n }, onrejected);\n };\n /** JSDoc */\n\n\n SyncPromise.prototype[\"finally\"] = function (onfinally) {\n var _this = this;\n\n return new SyncPromise(function (resolve, reject) {\n var val;\n var isRejected;\n return _this.then(function (value) {\n isRejected = false;\n val = value;\n\n if (onfinally) {\n onfinally();\n }\n }, function (reason) {\n isRejected = true;\n val = reason;\n\n if (onfinally) {\n onfinally();\n }\n }).then(function () {\n if (isRejected) {\n reject(val);\n return;\n } // tslint:disable-next-line:no-unsafe-any\n\n\n resolve(val);\n });\n });\n };\n\n return SyncPromise;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL3N5bmNwcm9taXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9zeW5jcHJvbWlzZS50cz9hYWRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzVGhlbmFibGUgfSBmcm9tICcuL2lzJztcblxuLyoqIFN5bmNQcm9taXNlIGludGVybmFsIHN0YXRlcyAqL1xuZW51bSBTdGF0ZXMge1xuICAvKiogUGVuZGluZyAqL1xuICBQRU5ESU5HID0gJ1BFTkRJTkcnLFxuICAvKiogUmVzb2x2ZWQgLyBPSyAqL1xuICBSRVNPTFZFRCA9ICdSRVNPTFZFRCcsXG4gIC8qKiBSZWplY3RlZCAvIEVycm9yICovXG4gIFJFSkVDVEVEID0gJ1JFSkVDVEVEJyxcbn1cblxuLyoqXG4gKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2VcbiAqIGJ1dCBpcyBub3QgYXN5bmMgaW50ZXJuYWxseVxuICovXG5jbGFzcyBTeW5jUHJvbWlzZTxUPiBpbXBsZW1lbnRzIFByb21pc2VMaWtlPFQ+IHtcbiAgcHJpdmF0ZSBfc3RhdGU6IFN0YXRlcyA9IFN0YXRlcy5QRU5ESU5HO1xuICBwcml2YXRlIF9oYW5kbGVyczogQXJyYXk8e1xuICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVCB8IFByb21pc2VMaWtlPFQ+KSB8IG51bGw7XG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IGFueSkgfCBudWxsO1xuICB9PiA9IFtdO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBleGVjdXRvcjogKHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPiB8IG51bGwpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fcmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgU3luY1Byb21pc2VdJztcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgc3RhdGljIHJlc29sdmU8VD4odmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPik6IFByb21pc2VMaWtlPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHN0YXRpYyByZWplY3Q8VCA9IG5ldmVyPihyZWFzb24/OiBhbnkpOiBQcm9taXNlTGlrZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgc3RhdGljIGFsbDxVID0gYW55Pihjb2xsZWN0aW9uOiBBcnJheTxVIHwgUHJvbWlzZUxpa2U8VT4+KTogUHJvbWlzZUxpa2U8VVtdPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxVW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcihgUHJvbWlzZS5hbGwgcmVxdWlyZXMgYW4gYXJyYXkgYXMgaW5wdXQuYCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgY291bnRlciA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgY29uc3QgcmVzb2x2ZWRDb2xsZWN0aW9uOiBVW10gPSBbXTtcblxuICAgICAgY29sbGVjdGlvbi5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBTeW5jUHJvbWlzZS5yZXNvbHZlKGl0ZW0pXG4gICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRDb2xsZWN0aW9uW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgY291bnRlciAtPSAxO1xuXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc29sdmVkQ29sbGVjdGlvbik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2VMaWtlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZXIoe1xuICAgICAgICBvbmZ1bGZpbGxlZDogcmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICAgICAgLy8gVE9ETzogRklYTUVcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0IGFzIGFueSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9ucmVqZWN0ZWQ6IHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7XG4gICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmUob25yZWplY3RlZChyZWFzb24pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQgfCBQcm9taXNlTGlrZTxUUmVzdWx0PikgfCBudWxsLFxuICApOiBQcm9taXNlTGlrZTxUIHwgVFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnRoZW4odmFsID0+IHZhbCwgb25yZWplY3RlZCk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGZpbmFsbHk8VFJlc3VsdD4ob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2VMaWtlPFRSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPFRSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCB2YWw6IFRSZXN1bHQgfCBhbnk7XG4gICAgICBsZXQgaXNSZWplY3RlZDogYm9vbGVhbjtcblxuICAgICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAob25maW5hbGx5KSB7XG4gICAgICAgICAgICBvbmZpbmFsbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgdmFsID0gcmVhc29uO1xuICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHtcbiAgICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlamVjdGVkKSB7XG4gICAgICAgICAgcmVqZWN0KHZhbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVuc2FmZS1hbnlcbiAgICAgICAgcmVzb2x2ZSh2YWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzb2x2ZSA9ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPiB8IG51bGwpID0+IHtcbiAgICB0aGlzLl9zZXRSZXN1bHQoU3RhdGVzLlJFU09MVkVELCB2YWx1ZSk7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlamVjdCA9IChyZWFzb24/OiBhbnkpID0+IHtcbiAgICB0aGlzLl9zZXRSZXN1bHQoU3RhdGVzLlJFSkVDVEVELCByZWFzb24pO1xuICB9O1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSZXN1bHQgPSAoc3RhdGU6IFN0YXRlcywgdmFsdWU/OiBUIHwgUHJvbWlzZUxpa2U8VD4gfCBhbnkpID0+IHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICAodmFsdWUgYXMgUHJvbWlzZUxpa2U8VD4pLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTtcbiAgfTtcblxuICAvLyBUT0RPOiBGSVhNRVxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYXR0YWNoSGFuZGxlciA9IChoYW5kbGVyOiB7XG4gICAgLyoqIEpTRG9jICovXG4gICAgb25mdWxmaWxsZWQ/KHZhbHVlOiBUKTogYW55O1xuICAgIC8qKiBKU0RvYyAqL1xuICAgIG9ucmVqZWN0ZWQ/KHJlYXNvbjogYW55KTogYW55O1xuICB9KSA9PiB7XG4gICAgdGhpcy5faGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5jb25jYXQoaGFuZGxlcik7XG4gICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5QRU5ESU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHtcbiAgICAgIHRoaXMuX2hhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGlmIChoYW5kbGVyLm9ucmVqZWN0ZWQpIHtcbiAgICAgICAgICBoYW5kbGVyLm9ucmVqZWN0ZWQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgICAgaWYgKGhhbmRsZXIub25mdWxmaWxsZWQpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5zYWZlLWFueVxuICAgICAgICAgIGhhbmRsZXIub25mdWxmaWxsZWQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVycyA9IFtdO1xuICB9O1xufVxuXG5leHBvcnQgeyBTeW5jUHJvbWlzZSB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFTQTs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBUUE7QUFBQTtBQUNBO0FBUkE7QUFDQTtBQWtKQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5LQTtBQUNBO0FBc0tBO0FBQ0E7QUFDQTtBQURBO0FBTUE7QUFDQTtBQUFBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFwQkE7QUFDQTtBQWxMQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBTUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBREE7QUFkQTtBQURBO0FBK0JBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBNUJBO0FBREE7QUFKQTtBQXNDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUtBO0FBdEJBO0FBSkE7QUFEQTtBQUNBO0FBNkZBO0FBbE5BO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/@sentry/utils/esm/syncpromise.js\n"); - -/***/ }), - -/***/ "../node_modules/aes-decrypter/dist/aes-decrypter.es.js": -/*!**************************************************************!*\ - !*** ../node_modules/aes-decrypter/dist/aes-decrypter.es.js ***! - \**************************************************************/ -/*! exports provided: decrypt, Decrypter, AsyncStream */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decrypt\", function() { return decrypt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Decrypter\", function() { return Decrypter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AsyncStream\", function() { return AsyncStream; });\n/* harmony import */ var pkcs7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pkcs7 */ \"../node_modules/pkcs7/dist/pkcs7.es.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n};\n/**\n * @file aes.js\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\n/**\n * Expand the S-box tables.\n *\n * @private\n */\n\n\nvar precompute = function precompute() {\n var tables = [[[], [], [], [], []], [[], [], [], [], []]];\n var encTable = tables[0];\n var decTable = tables[1];\n var sbox = encTable[4];\n var sboxInv = decTable[4];\n var i = void 0;\n var x = void 0;\n var xInv = void 0;\n var d = [];\n var th = [];\n var x2 = void 0;\n var x4 = void 0;\n var x8 = void 0;\n var s = void 0;\n var tEnc = void 0;\n var tDec = void 0; // Compute double and third tables\n\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x; // Compute MixColumns\n\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n } // Compactify. Considerable speedup on Firefox.\n\n\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n\n return tables;\n};\n\nvar aesTables = null;\n/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n\nvar AES = function () {\n function AES(key) {\n classCallCheck(this, AES);\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n // if we have yet to precompute the S-box tables\n // do so now\n\n if (!aesTables) {\n aesTables = precompute();\n } // then make a copy of that object for use\n\n\n this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];\n var i = void 0;\n var j = void 0;\n var tmp = void 0;\n var encKey = void 0;\n var decKey = void 0;\n var sbox = this._tables[0][4];\n var decTable = this._tables[1];\n var keyLen = key.length;\n var rcon = 1;\n\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size');\n }\n\n encKey = key.slice(0);\n decKey = [];\n this._key = [encKey, decKey]; // schedule encryption keys\n\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1]; // apply sbox\n\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon\n\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n\n encKey[i] = encKey[i - keyLen] ^ tmp;\n } // schedule decryption keys\n\n\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {Number} encrypted0 the first word to decrypt\n * @param {Number} encrypted1 the second word to decrypt\n * @param {Number} encrypted2 the third word to decrypt\n * @param {Number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {Number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n\n AES.prototype.decrypt = function decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n var key = this._key[1]; // state variables a,b,c,d are loaded with pre-whitened data\n\n var a = encrypted0 ^ key[0];\n var b = encrypted3 ^ key[1];\n var c = encrypted2 ^ key[2];\n var d = encrypted1 ^ key[3];\n var a2 = void 0;\n var b2 = void 0;\n var c2 = void 0; // key.length === 2 ?\n\n var nInnerRounds = key.length / 4 - 2;\n var i = void 0;\n var kIndex = 4;\n var table = this._tables[1]; // load up the tables\n\n var table0 = table[0];\n var table1 = table[1];\n var table2 = table[2];\n var table3 = table[3];\n var sbox = table[4]; // Inner rounds. Cribbed from OpenSSL.\n\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n } // Last round.\n\n\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n };\n\n return AES;\n}();\n/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\n\n\nvar Stream = function () {\n function Stream() {\n classCallCheck(this, Stream);\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n Stream.prototype.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n };\n /**\n * Remove a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {Boolean} if we could turn it off or not\n */\n\n\n Stream.prototype.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener);\n this.listeners[type].splice(index, 1);\n return index > -1;\n };\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {String} type the event name\n */\n\n\n Stream.prototype.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n };\n /**\n * Destroys the stream and cleans up.\n */\n\n\n Stream.prototype.dispose = function dispose() {\n this.listeners = {};\n };\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n\n\n Stream.prototype.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n/**\n * @file async-stream.js\n */\n\n/**\n * A wrapper around the Stream class to use setTiemout\n * and run stream \"jobs\" Asynchronously\n *\n * @class AsyncStream\n * @extends Stream\n */\n\n\nvar AsyncStream = function (_Stream) {\n inherits(AsyncStream, _Stream);\n\n function AsyncStream() {\n classCallCheck(this, AsyncStream);\n\n var _this = possibleConstructorReturn(this, _Stream.call(this, Stream));\n\n _this.jobs = [];\n _this.delay = 1;\n _this.timeout_ = null;\n return _this;\n }\n /**\n * process an async job\n *\n * @private\n */\n\n\n AsyncStream.prototype.processJob_ = function processJob_() {\n this.jobs.shift()();\n\n if (this.jobs.length) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n } else {\n this.timeout_ = null;\n }\n };\n /**\n * push a job into the stream\n *\n * @param {Function} job the job to push into the stream\n */\n\n\n AsyncStream.prototype.push = function push(job) {\n this.jobs.push(job);\n\n if (!this.timeout_) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n }\n };\n\n return AsyncStream;\n}(Stream);\n/**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */\n\n/**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n\n\nvar ntoh = function ntoh(word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n};\n/**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n\n\nvar decrypt = function decrypt(encrypted, key, initVector) {\n // word-level access to the encrypted bytes\n var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);\n var decipher = new AES(Array.prototype.slice.call(key)); // byte and word-level access for the decrypted output\n\n var decrypted = new Uint8Array(encrypted.byteLength);\n var decrypted32 = new Int32Array(decrypted.buffer); // temporary variables for working with the IV, encrypted, and\n // decrypted data\n\n var init0 = void 0;\n var init1 = void 0;\n var init2 = void 0;\n var init3 = void 0;\n var encrypted0 = void 0;\n var encrypted1 = void 0;\n var encrypted2 = void 0;\n var encrypted3 = void 0; // iteration variable\n\n var wordIx = void 0; // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n\n init0 = initVector[0];\n init1 = initVector[1];\n init2 = initVector[2];\n init3 = initVector[3]; // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ntoh(encrypted32[wordIx]);\n encrypted1 = ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ntoh(encrypted32[wordIx + 3]); // decrypt the block\n\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n\n decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); // setup the IV for the next round\n\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n\n return decrypted;\n};\n/**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */\n\n\nvar Decrypter = function () {\n function Decrypter(encrypted, key, initVector, done) {\n classCallCheck(this, Decrypter);\n var step = Decrypter.STEP;\n var encrypted32 = new Int32Array(encrypted.buffer);\n var decrypted = new Uint8Array(encrypted.byteLength);\n var i = 0;\n this.asyncStream_ = new AsyncStream(); // split up the encryption job and do the individual chunks asynchronously\n\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n } // invoke the done() callback when everything is finished\n\n\n this.asyncStream_.push(function () {\n // remove pkcs#7 padding from the decrypted bytes\n done(null, Object(pkcs7__WEBPACK_IMPORTED_MODULE_0__[\"unpad\"])(decrypted));\n });\n }\n /**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {Number} the value of step 32000\n */\n\n /**\n * @private\n */\n\n\n Decrypter.prototype.decryptChunk_ = function decryptChunk_(encrypted, key, initVector, decrypted) {\n return function () {\n var bytes = decrypt(encrypted, key, initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n };\n };\n\n createClass(Decrypter, null, [{\n key: 'STEP',\n get: function get$$1() {\n // 4 * 8000;\n return 32000;\n }\n }]);\n return Decrypter;\n}();\n/**\n * @file index.js\n *\n * Index module to easily import the primary components of AES-128\n * decryption. Like this:\n *\n * ```js\n * import {Decrypter, decrypt, AsyncStream} from 'aes-decrypter';\n * ```\n */\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Flcy1kZWNyeXB0ZXIvZGlzdC9hZXMtZGVjcnlwdGVyLmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9hZXMtZGVjcnlwdGVyL2Rpc3QvYWVzLWRlY3J5cHRlci5lcy5qcz8yNWNjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVucGFkIH0gZnJvbSAncGtjczcnO1xuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxuLyoqXG4gKiBAZmlsZSBhZXMuanNcbiAqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gYWRhcHRhdGlvbiBvZiB0aGUgQUVTIGRlY3J5cHRpb24gYWxnb3JpdGhtXG4gKiBmcm9tIHRoZSBTdGFuZGZvcmQgSmF2YXNjcmlwdCBDcnlwdG9ncmFwaHkgTGlicmFyeS4gVGhhdCB3b3JrIGlzXG4gKiBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9ucyBub3RpY2U6XG4gKlxuICogQ29weXJpZ2h0IDIwMDktMjAxMCBFbWlseSBTdGFyaywgTWlrZSBIYW1idXJnLCBEYW4gQm9uZWguXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUlxuICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBPUiBDT05UUklCVVRPUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GXG4gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1JcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLFxuICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0VcbiAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU5cbiAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvblxuICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZ1xuICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgdGhlIGF1dGhvcnMuXG4gKi9cblxuLyoqXG4gKiBFeHBhbmQgdGhlIFMtYm94IHRhYmxlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgcHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XG4gIHZhciB0YWJsZXMgPSBbW1tdLCBbXSwgW10sIFtdLCBbXV0sIFtbXSwgW10sIFtdLCBbXSwgW11dXTtcbiAgdmFyIGVuY1RhYmxlID0gdGFibGVzWzBdO1xuICB2YXIgZGVjVGFibGUgPSB0YWJsZXNbMV07XG4gIHZhciBzYm94ID0gZW5jVGFibGVbNF07XG4gIHZhciBzYm94SW52ID0gZGVjVGFibGVbNF07XG4gIHZhciBpID0gdm9pZCAwO1xuICB2YXIgeCA9IHZvaWQgMDtcbiAgdmFyIHhJbnYgPSB2b2lkIDA7XG4gIHZhciBkID0gW107XG4gIHZhciB0aCA9IFtdO1xuICB2YXIgeDIgPSB2b2lkIDA7XG4gIHZhciB4NCA9IHZvaWQgMDtcbiAgdmFyIHg4ID0gdm9pZCAwO1xuICB2YXIgcyA9IHZvaWQgMDtcbiAgdmFyIHRFbmMgPSB2b2lkIDA7XG4gIHZhciB0RGVjID0gdm9pZCAwO1xuXG4gIC8vIENvbXB1dGUgZG91YmxlIGFuZCB0aGlyZCB0YWJsZXNcbiAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgdGhbKGRbaV0gPSBpIDw8IDEgXiAoaSA+PiA3KSAqIDI4MykgXiBpXSA9IGk7XG4gIH1cblxuICBmb3IgKHggPSB4SW52ID0gMDsgIXNib3hbeF07IHggXj0geDIgfHwgMSwgeEludiA9IHRoW3hJbnZdIHx8IDEpIHtcbiAgICAvLyBDb21wdXRlIHNib3hcbiAgICBzID0geEludiBeIHhJbnYgPDwgMSBeIHhJbnYgPDwgMiBeIHhJbnYgPDwgMyBeIHhJbnYgPDwgNDtcbiAgICBzID0gcyA+PiA4IF4gcyAmIDI1NSBeIDk5O1xuICAgIHNib3hbeF0gPSBzO1xuICAgIHNib3hJbnZbc10gPSB4O1xuXG4gICAgLy8gQ29tcHV0ZSBNaXhDb2x1bW5zXG4gICAgeDggPSBkW3g0ID0gZFt4MiA9IGRbeF1dXTtcbiAgICB0RGVjID0geDggKiAweDEwMTAxMDEgXiB4NCAqIDB4MTAwMDEgXiB4MiAqIDB4MTAxIF4geCAqIDB4MTAxMDEwMDtcbiAgICB0RW5jID0gZFtzXSAqIDB4MTAxIF4gcyAqIDB4MTAxMDEwMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIGVuY1RhYmxlW2ldW3hdID0gdEVuYyA9IHRFbmMgPDwgMjQgXiB0RW5jID4+PiA4O1xuICAgICAgZGVjVGFibGVbaV1bc10gPSB0RGVjID0gdERlYyA8PCAyNCBeIHREZWMgPj4+IDg7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcGFjdGlmeS4gQ29uc2lkZXJhYmxlIHNwZWVkdXAgb24gRmlyZWZveC5cbiAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykge1xuICAgIGVuY1RhYmxlW2ldID0gZW5jVGFibGVbaV0uc2xpY2UoMCk7XG4gICAgZGVjVGFibGVbaV0gPSBkZWNUYWJsZVtpXS5zbGljZSgwKTtcbiAgfVxuICByZXR1cm4gdGFibGVzO1xufTtcbnZhciBhZXNUYWJsZXMgPSBudWxsO1xuXG4vKipcbiAqIFNjaGVkdWxlIG91dCBhbiBBRVMga2V5IGZvciBib3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uIFRoaXNcbiAqIGlzIGEgbG93LWxldmVsIGNsYXNzLiBVc2UgYSBjaXBoZXIgbW9kZSB0byBkbyBidWxrIGVuY3J5cHRpb24uXG4gKlxuICogQGNsYXNzIEFFU1xuICogQHBhcmFtIGtleSB7QXJyYXl9IFRoZSBrZXkgYXMgYW4gYXJyYXkgb2YgNCwgNiBvciA4IHdvcmRzLlxuICovXG5cbnZhciBBRVMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFFUyhrZXkpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBBRVMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4cGFuZGVkIFMtYm94IGFuZCBpbnZlcnNlIFMtYm94IHRhYmxlcy4gVGhlc2Ugd2lsbCBiZSBjb21wdXRlZFxuICAgICAqIG9uIHRoZSBjbGllbnQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNlbmQgdGhlbSBkb3duIHRoZSB3aXJlLlxuICAgICAqXG4gICAgICogVGhlcmUgYXJlIHR3byB0YWJsZXMsIF90YWJsZXNbMF0gaXMgZm9yIGVuY3J5cHRpb24gYW5kXG4gICAgICogX3RhYmxlc1sxXSBpcyBmb3IgZGVjcnlwdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCA0IHN1Yi10YWJsZXMgYXJlIHRoZSBleHBhbmRlZCBTLWJveCB3aXRoIE1peENvbHVtbnMuIFRoZVxuICAgICAqIGxhc3QgKF90YWJsZXNbMDFdWzRdKSBpcyB0aGUgUy1ib3ggaXRzZWxmLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBpZiB3ZSBoYXZlIHlldCB0byBwcmVjb21wdXRlIHRoZSBTLWJveCB0YWJsZXNcbiAgICAvLyBkbyBzbyBub3dcbiAgICBpZiAoIWFlc1RhYmxlcykge1xuICAgICAgYWVzVGFibGVzID0gcHJlY29tcHV0ZSgpO1xuICAgIH1cbiAgICAvLyB0aGVuIG1ha2UgYSBjb3B5IG9mIHRoYXQgb2JqZWN0IGZvciB1c2VcbiAgICB0aGlzLl90YWJsZXMgPSBbW2Flc1RhYmxlc1swXVswXS5zbGljZSgpLCBhZXNUYWJsZXNbMF1bMV0uc2xpY2UoKSwgYWVzVGFibGVzWzBdWzJdLnNsaWNlKCksIGFlc1RhYmxlc1swXVszXS5zbGljZSgpLCBhZXNUYWJsZXNbMF1bNF0uc2xpY2UoKV0sIFthZXNUYWJsZXNbMV1bMF0uc2xpY2UoKSwgYWVzVGFibGVzWzFdWzFdLnNsaWNlKCksIGFlc1RhYmxlc1sxXVsyXS5zbGljZSgpLCBhZXNUYWJsZXNbMV1bM10uc2xpY2UoKSwgYWVzVGFibGVzWzFdWzRdLnNsaWNlKCldXTtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaiA9IHZvaWQgMDtcbiAgICB2YXIgdG1wID0gdm9pZCAwO1xuICAgIHZhciBlbmNLZXkgPSB2b2lkIDA7XG4gICAgdmFyIGRlY0tleSA9IHZvaWQgMDtcbiAgICB2YXIgc2JveCA9IHRoaXMuX3RhYmxlc1swXVs0XTtcbiAgICB2YXIgZGVjVGFibGUgPSB0aGlzLl90YWJsZXNbMV07XG4gICAgdmFyIGtleUxlbiA9IGtleS5sZW5ndGg7XG4gICAgdmFyIHJjb24gPSAxO1xuXG4gICAgaWYgKGtleUxlbiAhPT0gNCAmJiBrZXlMZW4gIT09IDYgJiYga2V5TGVuICE9PSA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWVzIGtleSBzaXplJyk7XG4gICAgfVxuXG4gICAgZW5jS2V5ID0ga2V5LnNsaWNlKDApO1xuICAgIGRlY0tleSA9IFtdO1xuICAgIHRoaXMuX2tleSA9IFtlbmNLZXksIGRlY0tleV07XG5cbiAgICAvLyBzY2hlZHVsZSBlbmNyeXB0aW9uIGtleXNcbiAgICBmb3IgKGkgPSBrZXlMZW47IGkgPCA0ICoga2V5TGVuICsgMjg7IGkrKykge1xuICAgICAgdG1wID0gZW5jS2V5W2kgLSAxXTtcblxuICAgICAgLy8gYXBwbHkgc2JveFxuICAgICAgaWYgKGkgJSBrZXlMZW4gPT09IDAgfHwga2V5TGVuID09PSA4ICYmIGkgJSBrZXlMZW4gPT09IDQpIHtcbiAgICAgICAgdG1wID0gc2JveFt0bXAgPj4+IDI0XSA8PCAyNCBeIHNib3hbdG1wID4+IDE2ICYgMjU1XSA8PCAxNiBeIHNib3hbdG1wID4+IDggJiAyNTVdIDw8IDggXiBzYm94W3RtcCAmIDI1NV07XG5cbiAgICAgICAgLy8gc2hpZnQgcm93cyBhbmQgYWRkIHJjb25cbiAgICAgICAgaWYgKGkgJSBrZXlMZW4gPT09IDApIHtcbiAgICAgICAgICB0bXAgPSB0bXAgPDwgOCBeIHRtcCA+Pj4gMjQgXiByY29uIDw8IDI0O1xuICAgICAgICAgIHJjb24gPSByY29uIDw8IDEgXiAocmNvbiA+PiA3KSAqIDI4MztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbmNLZXlbaV0gPSBlbmNLZXlbaSAtIGtleUxlbl0gXiB0bXA7XG4gICAgfVxuXG4gICAgLy8gc2NoZWR1bGUgZGVjcnlwdGlvbiBrZXlzXG4gICAgZm9yIChqID0gMDsgaTsgaisrLCBpLS0pIHtcbiAgICAgIHRtcCA9IGVuY0tleVtqICYgMyA/IGkgOiBpIC0gNF07XG4gICAgICBpZiAoaSA8PSA0IHx8IGogPCA0KSB7XG4gICAgICAgIGRlY0tleVtqXSA9IHRtcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY0tleVtqXSA9IGRlY1RhYmxlWzBdW3Nib3hbdG1wID4+PiAyNF1dIF4gZGVjVGFibGVbMV1bc2JveFt0bXAgPj4gMTYgJiAyNTVdXSBeIGRlY1RhYmxlWzJdW3Nib3hbdG1wID4+IDggJiAyNTVdXSBeIGRlY1RhYmxlWzNdW3Nib3hbdG1wICYgMjU1XV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY3J5cHQgMTYgYnl0ZXMsIHNwZWNpZmllZCBhcyBmb3VyIDMyLWJpdCB3b3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGVuY3J5cHRlZDAgdGhlIGZpcnN0IHdvcmQgdG8gZGVjcnlwdFxuICAgKiBAcGFyYW0ge051bWJlcn0gZW5jcnlwdGVkMSB0aGUgc2Vjb25kIHdvcmQgdG8gZGVjcnlwdFxuICAgKiBAcGFyYW0ge051bWJlcn0gZW5jcnlwdGVkMiB0aGUgdGhpcmQgd29yZCB0byBkZWNyeXB0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBlbmNyeXB0ZWQzIHRoZSBmb3VydGggd29yZCB0byBkZWNyeXB0XG4gICAqIEBwYXJhbSB7SW50MzJBcnJheX0gb3V0IHRoZSBhcnJheSB0byB3cml0ZSB0aGUgZGVjcnlwdGVkIHdvcmRzXG4gICAqIGludG9cbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCB0aGUgb2Zmc2V0IGludG8gdGhlIG91dHB1dCBhcnJheSB0byBzdGFydFxuICAgKiB3cml0aW5nIHJlc3VsdHNcbiAgICogQHJldHVybiB7QXJyYXl9IFRoZSBwbGFpbnRleHQuXG4gICAqL1xuXG5cbiAgQUVTLnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gZGVjcnlwdChlbmNyeXB0ZWQwLCBlbmNyeXB0ZWQxLCBlbmNyeXB0ZWQyLCBlbmNyeXB0ZWQzLCBvdXQsIG9mZnNldCkge1xuICAgIHZhciBrZXkgPSB0aGlzLl9rZXlbMV07XG4gICAgLy8gc3RhdGUgdmFyaWFibGVzIGEsYixjLGQgYXJlIGxvYWRlZCB3aXRoIHByZS13aGl0ZW5lZCBkYXRhXG4gICAgdmFyIGEgPSBlbmNyeXB0ZWQwIF4ga2V5WzBdO1xuICAgIHZhciBiID0gZW5jcnlwdGVkMyBeIGtleVsxXTtcbiAgICB2YXIgYyA9IGVuY3J5cHRlZDIgXiBrZXlbMl07XG4gICAgdmFyIGQgPSBlbmNyeXB0ZWQxIF4ga2V5WzNdO1xuICAgIHZhciBhMiA9IHZvaWQgMDtcbiAgICB2YXIgYjIgPSB2b2lkIDA7XG4gICAgdmFyIGMyID0gdm9pZCAwO1xuXG4gICAgLy8ga2V5Lmxlbmd0aCA9PT0gMiA/XG4gICAgdmFyIG5Jbm5lclJvdW5kcyA9IGtleS5sZW5ndGggLyA0IC0gMjtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIga0luZGV4ID0gNDtcbiAgICB2YXIgdGFibGUgPSB0aGlzLl90YWJsZXNbMV07XG5cbiAgICAvLyBsb2FkIHVwIHRoZSB0YWJsZXNcbiAgICB2YXIgdGFibGUwID0gdGFibGVbMF07XG4gICAgdmFyIHRhYmxlMSA9IHRhYmxlWzFdO1xuICAgIHZhciB0YWJsZTIgPSB0YWJsZVsyXTtcbiAgICB2YXIgdGFibGUzID0gdGFibGVbM107XG4gICAgdmFyIHNib3ggPSB0YWJsZVs0XTtcblxuICAgIC8vIElubmVyIHJvdW5kcy4gQ3JpYmJlZCBmcm9tIE9wZW5TU0wuXG4gICAgZm9yIChpID0gMDsgaSA8IG5Jbm5lclJvdW5kczsgaSsrKSB7XG4gICAgICBhMiA9IHRhYmxlMFthID4+PiAyNF0gXiB0YWJsZTFbYiA+PiAxNiAmIDI1NV0gXiB0YWJsZTJbYyA+PiA4ICYgMjU1XSBeIHRhYmxlM1tkICYgMjU1XSBeIGtleVtrSW5kZXhdO1xuICAgICAgYjIgPSB0YWJsZTBbYiA+Pj4gMjRdIF4gdGFibGUxW2MgPj4gMTYgJiAyNTVdIF4gdGFibGUyW2QgPj4gOCAmIDI1NV0gXiB0YWJsZTNbYSAmIDI1NV0gXiBrZXlba0luZGV4ICsgMV07XG4gICAgICBjMiA9IHRhYmxlMFtjID4+PiAyNF0gXiB0YWJsZTFbZCA+PiAxNiAmIDI1NV0gXiB0YWJsZTJbYSA+PiA4ICYgMjU1XSBeIHRhYmxlM1tiICYgMjU1XSBeIGtleVtrSW5kZXggKyAyXTtcbiAgICAgIGQgPSB0YWJsZTBbZCA+Pj4gMjRdIF4gdGFibGUxW2EgPj4gMTYgJiAyNTVdIF4gdGFibGUyW2IgPj4gOCAmIDI1NV0gXiB0YWJsZTNbYyAmIDI1NV0gXiBrZXlba0luZGV4ICsgM107XG4gICAgICBrSW5kZXggKz0gNDtcbiAgICAgIGEgPSBhMjtiID0gYjI7YyA9IGMyO1xuICAgIH1cblxuICAgIC8vIExhc3Qgcm91bmQuXG4gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgb3V0WygzICYgLWkpICsgb2Zmc2V0XSA9IHNib3hbYSA+Pj4gMjRdIDw8IDI0IF4gc2JveFtiID4+IDE2ICYgMjU1XSA8PCAxNiBeIHNib3hbYyA+PiA4ICYgMjU1XSA8PCA4IF4gc2JveFtkICYgMjU1XSBeIGtleVtrSW5kZXgrK107XG4gICAgICBhMiA9IGE7YSA9IGI7YiA9IGM7YyA9IGQ7ZCA9IGEyO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQUVTO1xufSgpO1xuXG4vKipcbiAqIEBmaWxlIHN0cmVhbS5qc1xuICovXG4vKipcbiAqIEEgbGlnaHR3ZWlnaHQgcmVhZGFibGUgc3RyZWFtIGltcGxlbWVudGlvbiB0aGF0IGhhbmRsZXMgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gKlxuICogQGNsYXNzIFN0cmVhbVxuICovXG52YXIgU3RyZWFtID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHJlYW0oKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyZWFtKTtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge307XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBldmVudCBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIHRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYW4gZXZlbnQgb2ZcbiAgICogdGhlIHNwZWNpZmllZCB0eXBlIG9jY3Vyc1xuICAgKi9cblxuXG4gIFN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbih0eXBlLCBsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107XG4gICAgfVxuICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIGV2ZW50IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgIGEgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIGZvciB0aGlzXG4gICAqIHR5cGUgb2YgZXZlbnQgdGhyb3VnaCBgb25gXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGlmIHdlIGNvdWxkIHR1cm4gaXQgb2ZmIG9yIG5vdFxuICAgKi9cblxuXG4gIFN0cmVhbS5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IHRoaXMubGlzdGVuZXJzW3R5cGVdLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgfTtcblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgb24gdGhpcyBzdHJlYW0uIEFueSBhZGRpdGlvbmFsXG4gICAqIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBldmVudCBuYW1lXG4gICAqL1xuXG5cbiAgU3RyZWFtLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24gdHJpZ2dlcih0eXBlKSB7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMubGlzdGVuZXJzW3R5cGVdO1xuXG4gICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTbGljaW5nIHRoZSBhcmd1bWVudHMgb24gZXZlcnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZFxuICAgIC8vIGNhbiBhZGQgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygb3ZlcmhlYWQuIEF2b2lkIHRoZVxuICAgIC8vIGludGVybWVkaWF0ZSBvYmplY3QgY3JlYXRpb24gZm9yIHRoZSBjb21tb24gY2FzZSBvZiBhXG4gICAgLy8gc2luZ2xlIGNhbGxiYWNrIGFyZ3VtZW50XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHZhciBsZW5ndGggPSBjYWxsYmFja3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBfbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9sZW5ndGg7ICsrX2kpIHtcbiAgICAgICAgY2FsbGJhY2tzW19pXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBzdHJlYW0gYW5kIGNsZWFucyB1cC5cbiAgICovXG5cblxuICBTdHJlYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0ge307XG4gIH07XG4gIC8qKlxuICAgKiBGb3J3YXJkcyBhbGwgYGRhdGFgIGV2ZW50cyBvbiB0aGlzIHN0cmVhbSB0byB0aGUgZGVzdGluYXRpb24gc3RyZWFtLiBUaGVcbiAgICogZGVzdGluYXRpb24gc3RyZWFtIHNob3VsZCBwcm92aWRlIGEgbWV0aG9kIGBwdXNoYCB0byByZWNlaXZlIHRoZSBkYXRhXG4gICAqIGV2ZW50cyBhcyB0aGV5IGFycml2ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJlYW19IGRlc3RpbmF0aW9uIHRoZSBzdHJlYW0gdGhhdCB3aWxsIHJlY2VpdmUgYWxsIGBkYXRhYCBldmVudHNcbiAgICogQHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvc3RyZWFtLmh0bWwjc3RyZWFtX3JlYWRhYmxlX3BpcGVfZGVzdGluYXRpb25fb3B0aW9uc1xuICAgKi9cblxuXG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIHBpcGUoZGVzdGluYXRpb24pIHtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGRlc3RpbmF0aW9uLnB1c2goZGF0YSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFN0cmVhbTtcbn0oKTtcblxuLyoqXG4gKiBAZmlsZSBhc3luYy1zdHJlYW0uanNcbiAqL1xuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBTdHJlYW0gY2xhc3MgdG8gdXNlIHNldFRpZW1vdXRcbiAqIGFuZCBydW4gc3RyZWFtIFwiam9ic1wiIEFzeW5jaHJvbm91c2x5XG4gKlxuICogQGNsYXNzIEFzeW5jU3RyZWFtXG4gKiBAZXh0ZW5kcyBTdHJlYW1cbiAqL1xuXG52YXIgQXN5bmNTdHJlYW0gPSBmdW5jdGlvbiAoX1N0cmVhbSkge1xuICBpbmhlcml0cyhBc3luY1N0cmVhbSwgX1N0cmVhbSk7XG5cbiAgZnVuY3Rpb24gQXN5bmNTdHJlYW0oKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgQXN5bmNTdHJlYW0pO1xuXG4gICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfU3RyZWFtLmNhbGwodGhpcywgU3RyZWFtKSk7XG5cbiAgICBfdGhpcy5qb2JzID0gW107XG4gICAgX3RoaXMuZGVsYXkgPSAxO1xuICAgIF90aGlzLnRpbWVvdXRfID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAvKipcbiAgICogcHJvY2VzcyBhbiBhc3luYyBqb2JcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBBc3luY1N0cmVhbS5wcm90b3R5cGUucHJvY2Vzc0pvYl8gPSBmdW5jdGlvbiBwcm9jZXNzSm9iXygpIHtcbiAgICB0aGlzLmpvYnMuc2hpZnQoKSgpO1xuICAgIGlmICh0aGlzLmpvYnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRpbWVvdXRfID0gc2V0VGltZW91dCh0aGlzLnByb2Nlc3NKb2JfLmJpbmQodGhpcyksIHRoaXMuZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpbWVvdXRfID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHB1c2ggYSBqb2IgaW50byB0aGUgc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGpvYiB0aGUgam9iIHRvIHB1c2ggaW50byB0aGUgc3RyZWFtXG4gICAqL1xuXG5cbiAgQXN5bmNTdHJlYW0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoKGpvYikge1xuICAgIHRoaXMuam9icy5wdXNoKGpvYik7XG4gICAgaWYgKCF0aGlzLnRpbWVvdXRfKSB7XG4gICAgICB0aGlzLnRpbWVvdXRfID0gc2V0VGltZW91dCh0aGlzLnByb2Nlc3NKb2JfLmJpbmQodGhpcyksIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQXN5bmNTdHJlYW07XG59KFN0cmVhbSk7XG5cbi8qKlxuICogQGZpbGUgZGVjcnlwdGVyLmpzXG4gKlxuICogQW4gYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIEFFUy0xMjggQ0JDIGRlY3J5cHRpb24gd2l0aFxuICogUEtDUyM3IHBhZGRpbmcuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0IG5ldHdvcmstb3JkZXIgKGJpZy1lbmRpYW4pIGJ5dGVzIGludG8gdGhlaXIgbGl0dGxlLWVuZGlhblxuICogcmVwcmVzZW50YXRpb24uXG4gKi9cbnZhciBudG9oID0gZnVuY3Rpb24gbnRvaCh3b3JkKSB7XG4gIHJldHVybiB3b3JkIDw8IDI0IHwgKHdvcmQgJiAweGZmMDApIDw8IDggfCAod29yZCAmIDB4ZmYwMDAwKSA+PiA4IHwgd29yZCA+Pj4gMjQ7XG59O1xuXG4vKipcbiAqIERlY3J5cHQgYnl0ZXMgdXNpbmcgQUVTLTEyOCB3aXRoIENCQyBhbmQgUEtDUyM3IHBhZGRpbmcuXG4gKlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBlbmNyeXB0ZWQgdGhlIGVuY3J5cHRlZCBieXRlc1xuICogQHBhcmFtIHtVaW50MzJBcnJheX0ga2V5IHRoZSBieXRlcyBvZiB0aGUgZGVjcnlwdGlvbiBrZXlcbiAqIEBwYXJhbSB7VWludDMyQXJyYXl9IGluaXRWZWN0b3IgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpIHRvXG4gKiB1c2UgZm9yIHRoZSBmaXJzdCByb3VuZCBvZiBDQkMuXG4gKiBAcmV0dXJuIHtVaW50OEFycmF5fSB0aGUgZGVjcnlwdGVkIGJ5dGVzXG4gKlxuICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FkdmFuY2VkX0VuY3J5cHRpb25fU3RhbmRhcmRcbiAqIEBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CbG9ja19jaXBoZXJfbW9kZV9vZl9vcGVyYXRpb24jQ2lwaGVyX0Jsb2NrX0NoYWluaW5nXy4yOENCQy4yOVxuICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjMxNVxuICovXG52YXIgZGVjcnlwdCA9IGZ1bmN0aW9uIGRlY3J5cHQoZW5jcnlwdGVkLCBrZXksIGluaXRWZWN0b3IpIHtcbiAgLy8gd29yZC1sZXZlbCBhY2Nlc3MgdG8gdGhlIGVuY3J5cHRlZCBieXRlc1xuICB2YXIgZW5jcnlwdGVkMzIgPSBuZXcgSW50MzJBcnJheShlbmNyeXB0ZWQuYnVmZmVyLCBlbmNyeXB0ZWQuYnl0ZU9mZnNldCwgZW5jcnlwdGVkLmJ5dGVMZW5ndGggPj4gMik7XG5cbiAgdmFyIGRlY2lwaGVyID0gbmV3IEFFUyhBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrZXkpKTtcblxuICAvLyBieXRlIGFuZCB3b3JkLWxldmVsIGFjY2VzcyBmb3IgdGhlIGRlY3J5cHRlZCBvdXRwdXRcbiAgdmFyIGRlY3J5cHRlZCA9IG5ldyBVaW50OEFycmF5KGVuY3J5cHRlZC5ieXRlTGVuZ3RoKTtcbiAgdmFyIGRlY3J5cHRlZDMyID0gbmV3IEludDMyQXJyYXkoZGVjcnlwdGVkLmJ1ZmZlcik7XG5cbiAgLy8gdGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3Igd29ya2luZyB3aXRoIHRoZSBJViwgZW5jcnlwdGVkLCBhbmRcbiAgLy8gZGVjcnlwdGVkIGRhdGFcbiAgdmFyIGluaXQwID0gdm9pZCAwO1xuICB2YXIgaW5pdDEgPSB2b2lkIDA7XG4gIHZhciBpbml0MiA9IHZvaWQgMDtcbiAgdmFyIGluaXQzID0gdm9pZCAwO1xuICB2YXIgZW5jcnlwdGVkMCA9IHZvaWQgMDtcbiAgdmFyIGVuY3J5cHRlZDEgPSB2b2lkIDA7XG4gIHZhciBlbmNyeXB0ZWQyID0gdm9pZCAwO1xuICB2YXIgZW5jcnlwdGVkMyA9IHZvaWQgMDtcblxuICAvLyBpdGVyYXRpb24gdmFyaWFibGVcbiAgdmFyIHdvcmRJeCA9IHZvaWQgMDtcblxuICAvLyBwdWxsIG91dCB0aGUgd29yZHMgb2YgdGhlIElWIHRvIGVuc3VyZSB3ZSBkb24ndCBtb2RpZnkgdGhlXG4gIC8vIHBhc3NlZC1pbiByZWZlcmVuY2UgYW5kIGVhc2llciBhY2Nlc3NcbiAgaW5pdDAgPSBpbml0VmVjdG9yWzBdO1xuICBpbml0MSA9IGluaXRWZWN0b3JbMV07XG4gIGluaXQyID0gaW5pdFZlY3RvclsyXTtcbiAgaW5pdDMgPSBpbml0VmVjdG9yWzNdO1xuXG4gIC8vIGRlY3J5cHQgZm91ciB3b3JkIHNlcXVlbmNlcywgYXBwbHlpbmcgY2lwaGVyLWJsb2NrIGNoYWluaW5nIChDQkMpXG4gIC8vIHRvIGVhY2ggZGVjcnlwdGVkIGJsb2NrXG4gIGZvciAod29yZEl4ID0gMDsgd29yZEl4IDwgZW5jcnlwdGVkMzIubGVuZ3RoOyB3b3JkSXggKz0gNCkge1xuICAgIC8vIGNvbnZlcnQgYmlnLWVuZGlhbiAobmV0d29yayBvcmRlcikgd29yZHMgaW50byBsaXR0bGUtZW5kaWFuXG4gICAgLy8gKGphdmFzY3JpcHQgb3JkZXIpXG4gICAgZW5jcnlwdGVkMCA9IG50b2goZW5jcnlwdGVkMzJbd29yZEl4XSk7XG4gICAgZW5jcnlwdGVkMSA9IG50b2goZW5jcnlwdGVkMzJbd29yZEl4ICsgMV0pO1xuICAgIGVuY3J5cHRlZDIgPSBudG9oKGVuY3J5cHRlZDMyW3dvcmRJeCArIDJdKTtcbiAgICBlbmNyeXB0ZWQzID0gbnRvaChlbmNyeXB0ZWQzMlt3b3JkSXggKyAzXSk7XG5cbiAgICAvLyBkZWNyeXB0IHRoZSBibG9ja1xuICAgIGRlY2lwaGVyLmRlY3J5cHQoZW5jcnlwdGVkMCwgZW5jcnlwdGVkMSwgZW5jcnlwdGVkMiwgZW5jcnlwdGVkMywgZGVjcnlwdGVkMzIsIHdvcmRJeCk7XG5cbiAgICAvLyBYT1Igd2l0aCB0aGUgSVYsIGFuZCByZXN0b3JlIG5ldHdvcmsgYnl0ZS1vcmRlciB0byBvYnRhaW4gdGhlXG4gICAgLy8gcGxhaW50ZXh0XG4gICAgZGVjcnlwdGVkMzJbd29yZEl4XSA9IG50b2goZGVjcnlwdGVkMzJbd29yZEl4XSBeIGluaXQwKTtcbiAgICBkZWNyeXB0ZWQzMlt3b3JkSXggKyAxXSA9IG50b2goZGVjcnlwdGVkMzJbd29yZEl4ICsgMV0gXiBpbml0MSk7XG4gICAgZGVjcnlwdGVkMzJbd29yZEl4ICsgMl0gPSBudG9oKGRlY3J5cHRlZDMyW3dvcmRJeCArIDJdIF4gaW5pdDIpO1xuICAgIGRlY3J5cHRlZDMyW3dvcmRJeCArIDNdID0gbnRvaChkZWNyeXB0ZWQzMlt3b3JkSXggKyAzXSBeIGluaXQzKTtcblxuICAgIC8vIHNldHVwIHRoZSBJViBmb3IgdGhlIG5leHQgcm91bmRcbiAgICBpbml0MCA9IGVuY3J5cHRlZDA7XG4gICAgaW5pdDEgPSBlbmNyeXB0ZWQxO1xuICAgIGluaXQyID0gZW5jcnlwdGVkMjtcbiAgICBpbml0MyA9IGVuY3J5cHRlZDM7XG4gIH1cblxuICByZXR1cm4gZGVjcnlwdGVkO1xufTtcblxuLyoqXG4gKiBUaGUgYERlY3J5cHRlcmAgY2xhc3MgdGhhdCBtYW5hZ2VzIGRlY3J5cHRpb24gb2YgQUVTXG4gKiBkYXRhIHRocm91Z2ggYEFzeW5jU3RyZWFtYCBvYmplY3RzIGFuZCB0aGUgYGRlY3J5cHRgXG4gKiBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gZW5jcnlwdGVkIHRoZSBlbmNyeXB0ZWQgYnl0ZXNcbiAqIEBwYXJhbSB7VWludDMyQXJyYXl9IGtleSB0aGUgYnl0ZXMgb2YgdGhlIGRlY3J5cHRpb24ga2V5XG4gKiBAcGFyYW0ge1VpbnQzMkFycmF5fSBpbml0VmVjdG9yIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKElWKSB0b1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZG9uZSB0aGUgZnVuY3Rpb24gdG8gcnVuIHdoZW4gZG9uZVxuICogQGNsYXNzIERlY3J5cHRlclxuICovXG5cbnZhciBEZWNyeXB0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERlY3J5cHRlcihlbmNyeXB0ZWQsIGtleSwgaW5pdFZlY3RvciwgZG9uZSkge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIERlY3J5cHRlcik7XG5cbiAgICB2YXIgc3RlcCA9IERlY3J5cHRlci5TVEVQO1xuICAgIHZhciBlbmNyeXB0ZWQzMiA9IG5ldyBJbnQzMkFycmF5KGVuY3J5cHRlZC5idWZmZXIpO1xuICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShlbmNyeXB0ZWQuYnl0ZUxlbmd0aCk7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdGhpcy5hc3luY1N0cmVhbV8gPSBuZXcgQXN5bmNTdHJlYW0oKTtcblxuICAgIC8vIHNwbGl0IHVwIHRoZSBlbmNyeXB0aW9uIGpvYiBhbmQgZG8gdGhlIGluZGl2aWR1YWwgY2h1bmtzIGFzeW5jaHJvbm91c2x5XG4gICAgdGhpcy5hc3luY1N0cmVhbV8ucHVzaCh0aGlzLmRlY3J5cHRDaHVua18oZW5jcnlwdGVkMzIuc3ViYXJyYXkoaSwgaSArIHN0ZXApLCBrZXksIGluaXRWZWN0b3IsIGRlY3J5cHRlZCkpO1xuICAgIGZvciAoaSA9IHN0ZXA7IGkgPCBlbmNyeXB0ZWQzMi5sZW5ndGg7IGkgKz0gc3RlcCkge1xuICAgICAgaW5pdFZlY3RvciA9IG5ldyBVaW50MzJBcnJheShbbnRvaChlbmNyeXB0ZWQzMltpIC0gNF0pLCBudG9oKGVuY3J5cHRlZDMyW2kgLSAzXSksIG50b2goZW5jcnlwdGVkMzJbaSAtIDJdKSwgbnRvaChlbmNyeXB0ZWQzMltpIC0gMV0pXSk7XG4gICAgICB0aGlzLmFzeW5jU3RyZWFtXy5wdXNoKHRoaXMuZGVjcnlwdENodW5rXyhlbmNyeXB0ZWQzMi5zdWJhcnJheShpLCBpICsgc3RlcCksIGtleSwgaW5pdFZlY3RvciwgZGVjcnlwdGVkKSk7XG4gICAgfVxuICAgIC8vIGludm9rZSB0aGUgZG9uZSgpIGNhbGxiYWNrIHdoZW4gZXZlcnl0aGluZyBpcyBmaW5pc2hlZFxuICAgIHRoaXMuYXN5bmNTdHJlYW1fLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gcmVtb3ZlIHBrY3MjNyBwYWRkaW5nIGZyb20gdGhlIGRlY3J5cHRlZCBieXRlc1xuICAgICAgZG9uZShudWxsLCB1bnBhZChkZWNyeXB0ZWQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhIGdldHRlciBmb3Igc3RlcCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcyBhdCBvbmUgdGltZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSB2YWx1ZSBvZiBzdGVwIDMyMDAwXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBEZWNyeXB0ZXIucHJvdG90eXBlLmRlY3J5cHRDaHVua18gPSBmdW5jdGlvbiBkZWNyeXB0Q2h1bmtfKGVuY3J5cHRlZCwga2V5LCBpbml0VmVjdG9yLCBkZWNyeXB0ZWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJ5dGVzID0gZGVjcnlwdChlbmNyeXB0ZWQsIGtleSwgaW5pdFZlY3Rvcik7XG5cbiAgICAgIGRlY3J5cHRlZC5zZXQoYnl0ZXMsIGVuY3J5cHRlZC5ieXRlT2Zmc2V0KTtcbiAgICB9O1xuICB9O1xuXG4gIGNyZWF0ZUNsYXNzKERlY3J5cHRlciwgbnVsbCwgW3tcbiAgICBrZXk6ICdTVEVQJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgIC8vIDQgKiA4MDAwO1xuICAgICAgcmV0dXJuIDMyMDAwO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRGVjcnlwdGVyO1xufSgpO1xuXG4vKipcbiAqIEBmaWxlIGluZGV4LmpzXG4gKlxuICogSW5kZXggbW9kdWxlIHRvIGVhc2lseSBpbXBvcnQgdGhlIHByaW1hcnkgY29tcG9uZW50cyBvZiBBRVMtMTI4XG4gKiBkZWNyeXB0aW9uLiBMaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7RGVjcnlwdGVyLCBkZWNyeXB0LCBBc3luY1N0cmVhbX0gZnJvbSAnYWVzLWRlY3J5cHRlcic7XG4gKiBgYGBcbiAqL1xuXG5leHBvcnQgeyBkZWNyeXB0LCBEZWNyeXB0ZXIsIEFzeW5jU3RyZWFtIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVhBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFRQTtBQWJBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUNBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0Q0E7QUFDQTtBQUNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTlDQTtBQUNBO0FBK0NBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFsQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2REE7QUFDQTtBQUNBO0FBeURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBL0JBO0FBQ0E7QUFDQTtBQWlDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdENBO0FBQ0E7QUF3Q0E7QUE5SEE7QUFpSUE7Ozs7QUFHQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFPQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFSQTtBQVdBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBMkJBOzs7OztBQUtBO0FBQ0E7QUFEQTtBQUdBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBS0E7QUF2R0E7QUEwR0E7Ozs7QUFHQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFOQTtBQVNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBNUNBO0FBK0NBOzs7Ozs7O0FBT0E7Ozs7OztBQUlBO0FBQ0E7QUFEQTtBQUlBOzs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMURBO0FBNkRBOzs7Ozs7Ozs7Ozs7O0FBWUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7O0FBT0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBakRBO0FBb0RBOzs7Ozs7Ozs7Ozs7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/aes-decrypter/dist/aes-decrypter.es.js\n"); - -/***/ }), - -/***/ "../node_modules/babel-polyfill/lib/index.js": -/*!***************************************************!*\ - !*** ../node_modules/babel-polyfill/lib/index.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(/*! core-js/shim */ \"../node_modules/core-js/shim.js\");\n\n__webpack_require__(/*! regenerator-runtime/runtime */ \"../node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js\");\n\n__webpack_require__(/*! core-js/fn/regexp/escape */ \"../node_modules/core-js/fn/regexp/escape.js\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\n\nglobal._babelPolyfill = true;\nvar DEFINE_PROPERTY = \"defineProperty\";\n\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzPzEwOWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/babel-polyfill/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js": -/*!**********************************************************************************!*\ - !*** ../node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global, module) {function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n\n!function (global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n var inModule = ( false ? undefined : _typeof(module)) === \"object\";\n var runtime = global.regeneratorRuntime;\n\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n } // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n\n\n return;\n } // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n\n\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n runtime.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n runtime.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n runtime.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && _typeof(value) === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (_typeof(global.process) === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n runtime.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n runtime.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n runtime.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n}( // Among the various tricks for obtaining a reference to the global\n// object, this seems to be the most reliable technique that does not\n// use indirect eval (which violates Content Security Policy).\n(typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) === \"object\" ? global : (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" ? window : (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) === \"object\" ? self : this);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/Y2M2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQURBO0FBckJBO0FBeUJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBTkE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBbklBO0FBdUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSEE7QUFsRUE7QUEyRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUdBO0FBSEE7QUFMQTtBQUNBO0FBV0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBWEE7QUFpQkE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF2RUE7QUFyUEE7QUFpVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBb0JBO0FBQ0E7QUFyRUE7QUF5RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQS9ZQTtBQW1aQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQWRBO0FBVEE7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUE1QkE7QUFDQTtBQUNBO0FBOEJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQTZCQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUxBO0FBUUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBbEdBO0FBcUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBJQTtBQXVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQXZKQTtBQTBKQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxLQTtBQXFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFEQTtBQXBMQTtBQXVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyTUE7QUF2Z0JBO0FBZ3RCQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js\n"); - -/***/ }), - -/***/ "../node_modules/bail/index.js": -/*!*************************************!*\ - !*** ../node_modules/bail/index.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = bail;\n\nfunction bail(err) {\n if (err) {\n throw err;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanM/NmEzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBiYWlsXG5cbmZ1bmN0aW9uIGJhaWwoZXJyKSB7XG4gIGlmIChlcnIpIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/bail/index.js\n"); - -/***/ }), - -/***/ "../node_modules/base64-js/index.js": -/*!******************************************!*\ - !*** ../node_modules/base64-js/index.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4');\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf('=');\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 0xFF;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n return arr;\n}\n\nfunction tripletToBase64(num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n }\n\n return parts.join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzPzJhNTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFUQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFGQTtBQVFBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/base64-js/index.js\n"); - -/***/ }), - -/***/ "../node_modules/buffer/index.js": -/*!***************************************!*\ - !*** ../node_modules/buffer/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n\n/* eslint-disable no-proto */\n\n\nvar base64 = __webpack_require__(/*! base64-js */ \"../node_modules/base64-js/index.js\");\n\nvar ieee754 = __webpack_require__(/*! ieee754 */ \"../node_modules/ieee754/index.js\");\n\nvar isArray = __webpack_require__(/*! isarray */ \"../node_modules/isarray/index.js\");\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n try {\n var arr = new Uint8Array(1);\n arr.__proto__ = {\n __proto__: Uint8Array.prototype,\n foo: function foo() {\n return 42;\n }\n };\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`\n } catch (e) {\n return false;\n }\n}\n\nfunction kMaxLength() {\n return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length');\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n\n that.length = length;\n }\n\n return that;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length);\n } // Common case.\n\n\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error('If encoding is specified then the first argument must be a string');\n }\n\n return allocUnsafe(this, arg);\n }\n\n return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr;\n};\n\nfunction from(that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number');\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length);\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset);\n }\n\n return fromObject(that, value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length);\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n\n if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n });\n }\n}\n\nfunction assertSize(size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number');\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative');\n }\n}\n\nfunction alloc(that, size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(that, size);\n }\n\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n }\n\n return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding);\n};\n\nfunction allocUnsafe(that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n\n return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size);\n};\n\nfunction fromString(that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding');\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that;\n}\n\nfunction fromArrayLike(that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n\n return that;\n}\n\nfunction fromArrayBuffer(that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds');\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds');\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n\n return that;\n}\n\nfunction fromObject(that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that;\n }\n\n obj.copy(that, 0, 0, len);\n return that;\n }\n\n if (obj) {\n if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0);\n }\n\n return fromArrayLike(that, obj);\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data);\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');\n}\n\nfunction checked(length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n }\n\n return length | 0;\n}\n\nfunction SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n return !!(b != null && b._isBuffer);\n};\n\nBuffer.compare = function compare(a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers');\n }\n\n if (a === b) return 0;\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true;\n\n default:\n return false;\n }\n};\n\nBuffer.concat = function concat(list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n\n var i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n\n return buffer;\n};\n\nfunction byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0; // Use a for loop to avoid recursion\n\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len;\n\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length;\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2;\n\n case 'hex':\n return len >>> 1;\n\n case 'base64':\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\n if (start > this.length) {\n return '';\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return '';\n } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return '';\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end);\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end);\n\n case 'ascii':\n return asciiSlice(this, start, end);\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end);\n\n case 'base64':\n return base64Slice(this, start, end);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n var len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits');\n }\n\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n var len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits');\n }\n\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n var len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits');\n }\n\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n\n return this;\n};\n\nBuffer.prototype.toString = function toString() {\n var length = this.length | 0;\n if (length === 0) return '';\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n var str = '';\n var max = exports.INSPECT_MAX_BYTES;\n\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n\n return '<Buffer ' + str + '>';\n};\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer');\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\n\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index');\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n\n if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read(buf, i) {\n if (indexSize === 1) {\n return buf[i];\n } else {\n return buf.readUInt16BE(i * indexSize);\n }\n }\n\n var i;\n\n if (dir) {\n var foundIndex = -1;\n\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n } // must be an even number of digits\n\n\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction latin1Write(buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n } else {\n throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds');\n }\n\n if (!encoding) encoding = 'utf8';\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length);\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length);\n\n case 'ascii':\n return asciiWrite(this, string, offset, length);\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length);\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n};\n\nfunction base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n}\n\nfunction utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n var i = start;\n\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n var len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n var res = '';\n var i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n\n return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n var len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n var out = '';\n\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n\n return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n var newBuf;\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return this[offset];\n return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | this[offset + 1] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | this[offset] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nfunction objectWriteUInt16(buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n\n return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (value < 0) value = 0xffffffff + value + 1;\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n\n return offset + 4;\n};\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds');\n }\n\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');\n if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);\n }\n\n return len;\n}; // Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n\n if (code < 256) {\n val = code;\n }\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string');\n }\n\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding);\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n } // Invalid ranges are not set to a default, so can range check early.\n\n\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index');\n }\n\n if (end <= start) {\n return this;\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n if (!val) val = 0;\n var i;\n\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n}; // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n\n return str;\n}\n\nfunction stringtrim(str) {\n if (str.trim) return str.trim();\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction toHex(n) {\n if (n < 16) return '0' + n.toString(16);\n return n.toString(16);\n}\n\nfunction utf8ToBytes(string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else {\n throw new Error('Invalid code point');\n }\n }\n\n return bytes;\n}\n\nfunction asciiToBytes(str) {\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n\n return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n var c, hi, lo;\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray;\n}\n\nfunction base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n}\n\nfunction isnan(val) {\n return val !== val; // eslint-disable-line no-self-compare\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzP2NlNDQiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQUlBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUdBOzs7OztBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBREE7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTNCQTtBQUNBO0FBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBWEE7QUFjQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQUNBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQTZCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFYQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeERBO0FBNERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBaEJBO0FBQ0E7QUFDQTtBQWtCQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBSUE7QUF6QkE7QUFDQTtBQUNBO0FBNEJBO0FBQ0E7QUEvQkE7QUFDQTtBQUNBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVBBO0FBQ0E7QUFEQTtBQVdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUJBO0FBOEJBO0FBckVBO0FBQ0E7QUF1RUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpDQTtBQW9DQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBSEE7QUFDQTtBQVFBO0FBQ0E7QUFFQTtBQUhBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFmQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBSEE7QUFDQTtBQVFBO0FBQ0E7QUFFQTtBQUhBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFWQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFWQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUtBO0FBQ0E7QUFDQTtBQTdDQTtBQWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBcEJBO0FBc0JBO0FBeEJBO0FBQ0E7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4REE7QUE0REE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFDQTtBQVdBO0FBRUE7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBQ0E7QUFDQTtBQTBCQTtBQTVCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQU9BO0FBQ0E7QUFGQTtBQVFBO0FBQ0E7QUFGQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/buffer/index.js\n"); - -/***/ }), - -/***/ "../node_modules/builtin-status-codes/browser.js": -/*!*******************************************************!*\ - !*** ../node_modules/builtin-status-codes/browser.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2J1aWx0aW4tc3RhdHVzLWNvZGVzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2J1aWx0aW4tc3RhdHVzLWNvZGVzL2Jyb3dzZXIuanM/MWViMiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCIxMDBcIjogXCJDb250aW51ZVwiLFxuICBcIjEwMVwiOiBcIlN3aXRjaGluZyBQcm90b2NvbHNcIixcbiAgXCIxMDJcIjogXCJQcm9jZXNzaW5nXCIsXG4gIFwiMjAwXCI6IFwiT0tcIixcbiAgXCIyMDFcIjogXCJDcmVhdGVkXCIsXG4gIFwiMjAyXCI6IFwiQWNjZXB0ZWRcIixcbiAgXCIyMDNcIjogXCJOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvblwiLFxuICBcIjIwNFwiOiBcIk5vIENvbnRlbnRcIixcbiAgXCIyMDVcIjogXCJSZXNldCBDb250ZW50XCIsXG4gIFwiMjA2XCI6IFwiUGFydGlhbCBDb250ZW50XCIsXG4gIFwiMjA3XCI6IFwiTXVsdGktU3RhdHVzXCIsXG4gIFwiMjA4XCI6IFwiQWxyZWFkeSBSZXBvcnRlZFwiLFxuICBcIjIyNlwiOiBcIklNIFVzZWRcIixcbiAgXCIzMDBcIjogXCJNdWx0aXBsZSBDaG9pY2VzXCIsXG4gIFwiMzAxXCI6IFwiTW92ZWQgUGVybWFuZW50bHlcIixcbiAgXCIzMDJcIjogXCJGb3VuZFwiLFxuICBcIjMwM1wiOiBcIlNlZSBPdGhlclwiLFxuICBcIjMwNFwiOiBcIk5vdCBNb2RpZmllZFwiLFxuICBcIjMwNVwiOiBcIlVzZSBQcm94eVwiLFxuICBcIjMwN1wiOiBcIlRlbXBvcmFyeSBSZWRpcmVjdFwiLFxuICBcIjMwOFwiOiBcIlBlcm1hbmVudCBSZWRpcmVjdFwiLFxuICBcIjQwMFwiOiBcIkJhZCBSZXF1ZXN0XCIsXG4gIFwiNDAxXCI6IFwiVW5hdXRob3JpemVkXCIsXG4gIFwiNDAyXCI6IFwiUGF5bWVudCBSZXF1aXJlZFwiLFxuICBcIjQwM1wiOiBcIkZvcmJpZGRlblwiLFxuICBcIjQwNFwiOiBcIk5vdCBGb3VuZFwiLFxuICBcIjQwNVwiOiBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLFxuICBcIjQwNlwiOiBcIk5vdCBBY2NlcHRhYmxlXCIsXG4gIFwiNDA3XCI6IFwiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIixcbiAgXCI0MDhcIjogXCJSZXF1ZXN0IFRpbWVvdXRcIixcbiAgXCI0MDlcIjogXCJDb25mbGljdFwiLFxuICBcIjQxMFwiOiBcIkdvbmVcIixcbiAgXCI0MTFcIjogXCJMZW5ndGggUmVxdWlyZWRcIixcbiAgXCI0MTJcIjogXCJQcmVjb25kaXRpb24gRmFpbGVkXCIsXG4gIFwiNDEzXCI6IFwiUGF5bG9hZCBUb28gTGFyZ2VcIixcbiAgXCI0MTRcIjogXCJVUkkgVG9vIExvbmdcIixcbiAgXCI0MTVcIjogXCJVbnN1cHBvcnRlZCBNZWRpYSBUeXBlXCIsXG4gIFwiNDE2XCI6IFwiUmFuZ2UgTm90IFNhdGlzZmlhYmxlXCIsXG4gIFwiNDE3XCI6IFwiRXhwZWN0YXRpb24gRmFpbGVkXCIsXG4gIFwiNDE4XCI6IFwiSSdtIGEgdGVhcG90XCIsXG4gIFwiNDIxXCI6IFwiTWlzZGlyZWN0ZWQgUmVxdWVzdFwiLFxuICBcIjQyMlwiOiBcIlVucHJvY2Vzc2FibGUgRW50aXR5XCIsXG4gIFwiNDIzXCI6IFwiTG9ja2VkXCIsXG4gIFwiNDI0XCI6IFwiRmFpbGVkIERlcGVuZGVuY3lcIixcbiAgXCI0MjVcIjogXCJVbm9yZGVyZWQgQ29sbGVjdGlvblwiLFxuICBcIjQyNlwiOiBcIlVwZ3JhZGUgUmVxdWlyZWRcIixcbiAgXCI0MjhcIjogXCJQcmVjb25kaXRpb24gUmVxdWlyZWRcIixcbiAgXCI0MjlcIjogXCJUb28gTWFueSBSZXF1ZXN0c1wiLFxuICBcIjQzMVwiOiBcIlJlcXVlc3QgSGVhZGVyIEZpZWxkcyBUb28gTGFyZ2VcIixcbiAgXCI0NTFcIjogXCJVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29uc1wiLFxuICBcIjUwMFwiOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICBcIjUwMVwiOiBcIk5vdCBJbXBsZW1lbnRlZFwiLFxuICBcIjUwMlwiOiBcIkJhZCBHYXRld2F5XCIsXG4gIFwiNTAzXCI6IFwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFxuICBcIjUwNFwiOiBcIkdhdGV3YXkgVGltZW91dFwiLFxuICBcIjUwNVwiOiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCIsXG4gIFwiNTA2XCI6IFwiVmFyaWFudCBBbHNvIE5lZ290aWF0ZXNcIixcbiAgXCI1MDdcIjogXCJJbnN1ZmZpY2llbnQgU3RvcmFnZVwiLFxuICBcIjUwOFwiOiBcIkxvb3AgRGV0ZWN0ZWRcIixcbiAgXCI1MDlcIjogXCJCYW5kd2lkdGggTGltaXQgRXhjZWVkZWRcIixcbiAgXCI1MTBcIjogXCJOb3QgRXh0ZW5kZWRcIixcbiAgXCI1MTFcIjogXCJOZXR3b3JrIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCJcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/builtin-status-codes/browser.js\n"); - -/***/ }), - -/***/ "../node_modules/ccount/index.js": -/*!***************************************!*\ - !*** ../node_modules/ccount/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = ccount;\n\nfunction ccount(value, character) {\n var val = String(value);\n var count = 0;\n var index;\n\n if (typeof character !== 'string' || character.length !== 1) {\n throw new Error('Expected character');\n }\n\n index = val.indexOf(character);\n\n while (index !== -1) {\n count++;\n index = val.indexOf(character, index + 1);\n }\n\n return count;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Njb3VudC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzPzc2NWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2NvdW50XG5cbmZ1bmN0aW9uIGNjb3VudCh2YWx1ZSwgY2hhcmFjdGVyKSB7XG4gIHZhciB2YWwgPSBTdHJpbmcodmFsdWUpXG4gIHZhciBjb3VudCA9IDBcbiAgdmFyIGluZGV4XG5cbiAgaWYgKHR5cGVvZiBjaGFyYWN0ZXIgIT09ICdzdHJpbmcnIHx8IGNoYXJhY3Rlci5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGNoYXJhY3RlcicpXG4gIH1cblxuICBpbmRleCA9IHZhbC5pbmRleE9mKGNoYXJhY3RlcilcblxuICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgY291bnQrK1xuICAgIGluZGV4ID0gdmFsLmluZGV4T2YoY2hhcmFjdGVyLCBpbmRleCArIDEpXG4gIH1cblxuICByZXR1cm4gY291bnRcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/ccount/index.js\n"); - -/***/ }), - -/***/ "../node_modules/character-entities-html4/index.json": -/*!***********************************************************!*\ - !*** ../node_modules/character-entities-html4/index.json ***! - \***********************************************************/ -/*! exports provided: nbsp, iexcl, cent, pound, curren, yen, brvbar, sect, uml, copy, ordf, laquo, not, shy, reg, macr, deg, plusmn, sup2, sup3, acute, micro, para, middot, cedil, sup1, ordm, raquo, frac14, frac12, frac34, iquest, Agrave, Aacute, Acirc, Atilde, Auml, Aring, AElig, Ccedil, Egrave, Eacute, Ecirc, Euml, Igrave, Iacute, Icirc, Iuml, ETH, Ntilde, Ograve, Oacute, Ocirc, Otilde, Ouml, times, Oslash, Ugrave, Uacute, Ucirc, Uuml, Yacute, THORN, szlig, agrave, aacute, acirc, atilde, auml, aring, aelig, ccedil, egrave, eacute, ecirc, euml, igrave, iacute, icirc, iuml, eth, ntilde, ograve, oacute, ocirc, otilde, ouml, divide, oslash, ugrave, uacute, ucirc, uuml, yacute, thorn, yuml, fnof, Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu, Nu, Xi, Omicron, Pi, Rho, Sigma, Tau, Upsilon, Phi, Chi, Psi, Omega, alpha, beta, gamma, delta, epsilon, zeta, eta, theta, iota, kappa, lambda, mu, nu, xi, omicron, pi, rho, sigmaf, sigma, tau, upsilon, phi, chi, psi, omega, thetasym, upsih, piv, bull, hellip, prime, Prime, oline, frasl, weierp, image, real, trade, alefsym, larr, uarr, rarr, darr, harr, crarr, lArr, uArr, rArr, dArr, hArr, forall, part, exist, empty, nabla, isin, notin, ni, prod, sum, minus, lowast, radic, prop, infin, ang, and, or, cap, cup, int, there4, sim, cong, asymp, ne, equiv, le, ge, sub, sup, nsub, sube, supe, oplus, otimes, perp, sdot, lceil, rceil, lfloor, rfloor, lang, rang, loz, spades, clubs, hearts, diams, quot, amp, lt, gt, OElig, oelig, Scaron, scaron, Yuml, circ, tilde, ensp, emsp, thinsp, zwnj, zwj, lrm, rlm, ndash, mdash, lsquo, rsquo, sbquo, ldquo, rdquo, bdquo, dagger, Dagger, permil, lsaquo, rsaquo, euro, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"nbsp\\\":\\\" \\\",\\\"iexcl\\\":\\\"¡\\\",\\\"cent\\\":\\\"¢\\\",\\\"pound\\\":\\\"£\\\",\\\"curren\\\":\\\"¤\\\",\\\"yen\\\":\\\"¥\\\",\\\"brvbar\\\":\\\"¦\\\",\\\"sect\\\":\\\"§\\\",\\\"uml\\\":\\\"¨\\\",\\\"copy\\\":\\\"©\\\",\\\"ordf\\\":\\\"ª\\\",\\\"laquo\\\":\\\"«\\\",\\\"not\\\":\\\"¬\\\",\\\"shy\\\":\\\"­\\\",\\\"reg\\\":\\\"®\\\",\\\"macr\\\":\\\"¯\\\",\\\"deg\\\":\\\"°\\\",\\\"plusmn\\\":\\\"±\\\",\\\"sup2\\\":\\\"²\\\",\\\"sup3\\\":\\\"³\\\",\\\"acute\\\":\\\"´\\\",\\\"micro\\\":\\\"µ\\\",\\\"para\\\":\\\"¶\\\",\\\"middot\\\":\\\"·\\\",\\\"cedil\\\":\\\"¸\\\",\\\"sup1\\\":\\\"¹\\\",\\\"ordm\\\":\\\"º\\\",\\\"raquo\\\":\\\"»\\\",\\\"frac14\\\":\\\"¼\\\",\\\"frac12\\\":\\\"½\\\",\\\"frac34\\\":\\\"¾\\\",\\\"iquest\\\":\\\"¿\\\",\\\"Agrave\\\":\\\"À\\\",\\\"Aacute\\\":\\\"Á\\\",\\\"Acirc\\\":\\\"Â\\\",\\\"Atilde\\\":\\\"Ã\\\",\\\"Auml\\\":\\\"Ä\\\",\\\"Aring\\\":\\\"Å\\\",\\\"AElig\\\":\\\"Æ\\\",\\\"Ccedil\\\":\\\"Ç\\\",\\\"Egrave\\\":\\\"È\\\",\\\"Eacute\\\":\\\"É\\\",\\\"Ecirc\\\":\\\"Ê\\\",\\\"Euml\\\":\\\"Ë\\\",\\\"Igrave\\\":\\\"Ì\\\",\\\"Iacute\\\":\\\"Í\\\",\\\"Icirc\\\":\\\"Î\\\",\\\"Iuml\\\":\\\"Ï\\\",\\\"ETH\\\":\\\"Ð\\\",\\\"Ntilde\\\":\\\"Ñ\\\",\\\"Ograve\\\":\\\"Ò\\\",\\\"Oacute\\\":\\\"Ó\\\",\\\"Ocirc\\\":\\\"Ô\\\",\\\"Otilde\\\":\\\"Õ\\\",\\\"Ouml\\\":\\\"Ö\\\",\\\"times\\\":\\\"×\\\",\\\"Oslash\\\":\\\"Ø\\\",\\\"Ugrave\\\":\\\"Ù\\\",\\\"Uacute\\\":\\\"Ú\\\",\\\"Ucirc\\\":\\\"Û\\\",\\\"Uuml\\\":\\\"Ü\\\",\\\"Yacute\\\":\\\"Ý\\\",\\\"THORN\\\":\\\"Þ\\\",\\\"szlig\\\":\\\"ß\\\",\\\"agrave\\\":\\\"à\\\",\\\"aacute\\\":\\\"á\\\",\\\"acirc\\\":\\\"â\\\",\\\"atilde\\\":\\\"ã\\\",\\\"auml\\\":\\\"ä\\\",\\\"aring\\\":\\\"å\\\",\\\"aelig\\\":\\\"æ\\\",\\\"ccedil\\\":\\\"ç\\\",\\\"egrave\\\":\\\"è\\\",\\\"eacute\\\":\\\"é\\\",\\\"ecirc\\\":\\\"ê\\\",\\\"euml\\\":\\\"ë\\\",\\\"igrave\\\":\\\"ì\\\",\\\"iacute\\\":\\\"í\\\",\\\"icirc\\\":\\\"î\\\",\\\"iuml\\\":\\\"ï\\\",\\\"eth\\\":\\\"ð\\\",\\\"ntilde\\\":\\\"ñ\\\",\\\"ograve\\\":\\\"ò\\\",\\\"oacute\\\":\\\"ó\\\",\\\"ocirc\\\":\\\"ô\\\",\\\"otilde\\\":\\\"õ\\\",\\\"ouml\\\":\\\"ö\\\",\\\"divide\\\":\\\"÷\\\",\\\"oslash\\\":\\\"ø\\\",\\\"ugrave\\\":\\\"ù\\\",\\\"uacute\\\":\\\"ú\\\",\\\"ucirc\\\":\\\"û\\\",\\\"uuml\\\":\\\"ü\\\",\\\"yacute\\\":\\\"ý\\\",\\\"thorn\\\":\\\"þ\\\",\\\"yuml\\\":\\\"ÿ\\\",\\\"fnof\\\":\\\"ƒ\\\",\\\"Alpha\\\":\\\"Α\\\",\\\"Beta\\\":\\\"Β\\\",\\\"Gamma\\\":\\\"Γ\\\",\\\"Delta\\\":\\\"Δ\\\",\\\"Epsilon\\\":\\\"Ε\\\",\\\"Zeta\\\":\\\"Ζ\\\",\\\"Eta\\\":\\\"Η\\\",\\\"Theta\\\":\\\"Θ\\\",\\\"Iota\\\":\\\"Ι\\\",\\\"Kappa\\\":\\\"Κ\\\",\\\"Lambda\\\":\\\"Λ\\\",\\\"Mu\\\":\\\"Μ\\\",\\\"Nu\\\":\\\"Ν\\\",\\\"Xi\\\":\\\"Ξ\\\",\\\"Omicron\\\":\\\"Ο\\\",\\\"Pi\\\":\\\"Π\\\",\\\"Rho\\\":\\\"Ρ\\\",\\\"Sigma\\\":\\\"Σ\\\",\\\"Tau\\\":\\\"Τ\\\",\\\"Upsilon\\\":\\\"Υ\\\",\\\"Phi\\\":\\\"Φ\\\",\\\"Chi\\\":\\\"Χ\\\",\\\"Psi\\\":\\\"Ψ\\\",\\\"Omega\\\":\\\"Ω\\\",\\\"alpha\\\":\\\"α\\\",\\\"beta\\\":\\\"β\\\",\\\"gamma\\\":\\\"γ\\\",\\\"delta\\\":\\\"δ\\\",\\\"epsilon\\\":\\\"ε\\\",\\\"zeta\\\":\\\"ζ\\\",\\\"eta\\\":\\\"η\\\",\\\"theta\\\":\\\"θ\\\",\\\"iota\\\":\\\"ι\\\",\\\"kappa\\\":\\\"κ\\\",\\\"lambda\\\":\\\"λ\\\",\\\"mu\\\":\\\"μ\\\",\\\"nu\\\":\\\"ν\\\",\\\"xi\\\":\\\"ξ\\\",\\\"omicron\\\":\\\"ο\\\",\\\"pi\\\":\\\"π\\\",\\\"rho\\\":\\\"ρ\\\",\\\"sigmaf\\\":\\\"ς\\\",\\\"sigma\\\":\\\"σ\\\",\\\"tau\\\":\\\"τ\\\",\\\"upsilon\\\":\\\"υ\\\",\\\"phi\\\":\\\"φ\\\",\\\"chi\\\":\\\"χ\\\",\\\"psi\\\":\\\"ψ\\\",\\\"omega\\\":\\\"ω\\\",\\\"thetasym\\\":\\\"ϑ\\\",\\\"upsih\\\":\\\"ϒ\\\",\\\"piv\\\":\\\"ϖ\\\",\\\"bull\\\":\\\"•\\\",\\\"hellip\\\":\\\"…\\\",\\\"prime\\\":\\\"′\\\",\\\"Prime\\\":\\\"″\\\",\\\"oline\\\":\\\"‾\\\",\\\"frasl\\\":\\\"⁄\\\",\\\"weierp\\\":\\\"℘\\\",\\\"image\\\":\\\"ℑ\\\",\\\"real\\\":\\\"ℜ\\\",\\\"trade\\\":\\\"™\\\",\\\"alefsym\\\":\\\"ℵ\\\",\\\"larr\\\":\\\"←\\\",\\\"uarr\\\":\\\"↑\\\",\\\"rarr\\\":\\\"→\\\",\\\"darr\\\":\\\"↓\\\",\\\"harr\\\":\\\"↔\\\",\\\"crarr\\\":\\\"↵\\\",\\\"lArr\\\":\\\"⇐\\\",\\\"uArr\\\":\\\"⇑\\\",\\\"rArr\\\":\\\"⇒\\\",\\\"dArr\\\":\\\"⇓\\\",\\\"hArr\\\":\\\"⇔\\\",\\\"forall\\\":\\\"∀\\\",\\\"part\\\":\\\"∂\\\",\\\"exist\\\":\\\"∃\\\",\\\"empty\\\":\\\"∅\\\",\\\"nabla\\\":\\\"∇\\\",\\\"isin\\\":\\\"∈\\\",\\\"notin\\\":\\\"∉\\\",\\\"ni\\\":\\\"∋\\\",\\\"prod\\\":\\\"∏\\\",\\\"sum\\\":\\\"∑\\\",\\\"minus\\\":\\\"−\\\",\\\"lowast\\\":\\\"∗\\\",\\\"radic\\\":\\\"√\\\",\\\"prop\\\":\\\"∝\\\",\\\"infin\\\":\\\"∞\\\",\\\"ang\\\":\\\"∠\\\",\\\"and\\\":\\\"∧\\\",\\\"or\\\":\\\"∨\\\",\\\"cap\\\":\\\"∩\\\",\\\"cup\\\":\\\"∪\\\",\\\"int\\\":\\\"∫\\\",\\\"there4\\\":\\\"∴\\\",\\\"sim\\\":\\\"∼\\\",\\\"cong\\\":\\\"≅\\\",\\\"asymp\\\":\\\"≈\\\",\\\"ne\\\":\\\"≠\\\",\\\"equiv\\\":\\\"≡\\\",\\\"le\\\":\\\"≤\\\",\\\"ge\\\":\\\"≥\\\",\\\"sub\\\":\\\"⊂\\\",\\\"sup\\\":\\\"⊃\\\",\\\"nsub\\\":\\\"⊄\\\",\\\"sube\\\":\\\"⊆\\\",\\\"supe\\\":\\\"⊇\\\",\\\"oplus\\\":\\\"⊕\\\",\\\"otimes\\\":\\\"⊗\\\",\\\"perp\\\":\\\"⊥\\\",\\\"sdot\\\":\\\"⋅\\\",\\\"lceil\\\":\\\"⌈\\\",\\\"rceil\\\":\\\"⌉\\\",\\\"lfloor\\\":\\\"⌊\\\",\\\"rfloor\\\":\\\"⌋\\\",\\\"lang\\\":\\\"〈\\\",\\\"rang\\\":\\\"〉\\\",\\\"loz\\\":\\\"◊\\\",\\\"spades\\\":\\\"♠\\\",\\\"clubs\\\":\\\"♣\\\",\\\"hearts\\\":\\\"♥\\\",\\\"diams\\\":\\\"♦\\\",\\\"quot\\\":\\\"\\\\\\\"\\\",\\\"amp\\\":\\\"&\\\",\\\"lt\\\":\\\"<\\\",\\\"gt\\\":\\\">\\\",\\\"OElig\\\":\\\"Œ\\\",\\\"oelig\\\":\\\"œ\\\",\\\"Scaron\\\":\\\"Š\\\",\\\"scaron\\\":\\\"š\\\",\\\"Yuml\\\":\\\"Ÿ\\\",\\\"circ\\\":\\\"ˆ\\\",\\\"tilde\\\":\\\"˜\\\",\\\"ensp\\\":\\\" \\\",\\\"emsp\\\":\\\" \\\",\\\"thinsp\\\":\\\" \\\",\\\"zwnj\\\":\\\"‌\\\",\\\"zwj\\\":\\\"‍\\\",\\\"lrm\\\":\\\"‎\\\",\\\"rlm\\\":\\\"‏\\\",\\\"ndash\\\":\\\"–\\\",\\\"mdash\\\":\\\"—\\\",\\\"lsquo\\\":\\\"‘\\\",\\\"rsquo\\\":\\\"’\\\",\\\"sbquo\\\":\\\"‚\\\",\\\"ldquo\\\":\\\"“\\\",\\\"rdquo\\\":\\\"”\\\",\\\"bdquo\\\":\\\"„\\\",\\\"dagger\\\":\\\"†\\\",\\\"Dagger\\\":\\\"‡\\\",\\\"permil\\\":\\\"‰\\\",\\\"lsaquo\\\":\\\"‹\\\",\\\"rsaquo\\\":\\\"›\\\",\\\"euro\\\":\\\"€\\\"}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/character-entities-html4/index.json\n"); - -/***/ }), - -/***/ "../node_modules/character-entities-legacy/index.json": -/*!************************************************************!*\ - !*** ../node_modules/character-entities-legacy/index.json ***! - \************************************************************/ -/*! exports provided: AElig, AMP, Aacute, Acirc, Agrave, Aring, Atilde, Auml, COPY, Ccedil, ETH, Eacute, Ecirc, Egrave, Euml, GT, Iacute, Icirc, Igrave, Iuml, LT, Ntilde, Oacute, Ocirc, Ograve, Oslash, Otilde, Ouml, QUOT, REG, THORN, Uacute, Ucirc, Ugrave, Uuml, Yacute, aacute, acirc, acute, aelig, agrave, amp, aring, atilde, auml, brvbar, ccedil, cedil, cent, copy, curren, deg, divide, eacute, ecirc, egrave, eth, euml, frac12, frac14, frac34, gt, iacute, icirc, iexcl, igrave, iquest, iuml, laquo, lt, macr, micro, middot, nbsp, not, ntilde, oacute, ocirc, ograve, ordf, ordm, oslash, otilde, ouml, para, plusmn, pound, quot, raquo, reg, sect, shy, sup1, sup2, sup3, szlig, thorn, times, uacute, ucirc, ugrave, uml, uuml, yacute, yen, yuml, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"AElig\\\":\\\"Æ\\\",\\\"AMP\\\":\\\"&\\\",\\\"Aacute\\\":\\\"Á\\\",\\\"Acirc\\\":\\\"Â\\\",\\\"Agrave\\\":\\\"À\\\",\\\"Aring\\\":\\\"Å\\\",\\\"Atilde\\\":\\\"Ã\\\",\\\"Auml\\\":\\\"Ä\\\",\\\"COPY\\\":\\\"©\\\",\\\"Ccedil\\\":\\\"Ç\\\",\\\"ETH\\\":\\\"Ð\\\",\\\"Eacute\\\":\\\"É\\\",\\\"Ecirc\\\":\\\"Ê\\\",\\\"Egrave\\\":\\\"È\\\",\\\"Euml\\\":\\\"Ë\\\",\\\"GT\\\":\\\">\\\",\\\"Iacute\\\":\\\"Í\\\",\\\"Icirc\\\":\\\"Î\\\",\\\"Igrave\\\":\\\"Ì\\\",\\\"Iuml\\\":\\\"Ï\\\",\\\"LT\\\":\\\"<\\\",\\\"Ntilde\\\":\\\"Ñ\\\",\\\"Oacute\\\":\\\"Ó\\\",\\\"Ocirc\\\":\\\"Ô\\\",\\\"Ograve\\\":\\\"Ò\\\",\\\"Oslash\\\":\\\"Ø\\\",\\\"Otilde\\\":\\\"Õ\\\",\\\"Ouml\\\":\\\"Ö\\\",\\\"QUOT\\\":\\\"\\\\\\\"\\\",\\\"REG\\\":\\\"®\\\",\\\"THORN\\\":\\\"Þ\\\",\\\"Uacute\\\":\\\"Ú\\\",\\\"Ucirc\\\":\\\"Û\\\",\\\"Ugrave\\\":\\\"Ù\\\",\\\"Uuml\\\":\\\"Ü\\\",\\\"Yacute\\\":\\\"Ý\\\",\\\"aacute\\\":\\\"á\\\",\\\"acirc\\\":\\\"â\\\",\\\"acute\\\":\\\"´\\\",\\\"aelig\\\":\\\"æ\\\",\\\"agrave\\\":\\\"à\\\",\\\"amp\\\":\\\"&\\\",\\\"aring\\\":\\\"å\\\",\\\"atilde\\\":\\\"ã\\\",\\\"auml\\\":\\\"ä\\\",\\\"brvbar\\\":\\\"¦\\\",\\\"ccedil\\\":\\\"ç\\\",\\\"cedil\\\":\\\"¸\\\",\\\"cent\\\":\\\"¢\\\",\\\"copy\\\":\\\"©\\\",\\\"curren\\\":\\\"¤\\\",\\\"deg\\\":\\\"°\\\",\\\"divide\\\":\\\"÷\\\",\\\"eacute\\\":\\\"é\\\",\\\"ecirc\\\":\\\"ê\\\",\\\"egrave\\\":\\\"è\\\",\\\"eth\\\":\\\"ð\\\",\\\"euml\\\":\\\"ë\\\",\\\"frac12\\\":\\\"½\\\",\\\"frac14\\\":\\\"¼\\\",\\\"frac34\\\":\\\"¾\\\",\\\"gt\\\":\\\">\\\",\\\"iacute\\\":\\\"í\\\",\\\"icirc\\\":\\\"î\\\",\\\"iexcl\\\":\\\"¡\\\",\\\"igrave\\\":\\\"ì\\\",\\\"iquest\\\":\\\"¿\\\",\\\"iuml\\\":\\\"ï\\\",\\\"laquo\\\":\\\"«\\\",\\\"lt\\\":\\\"<\\\",\\\"macr\\\":\\\"¯\\\",\\\"micro\\\":\\\"µ\\\",\\\"middot\\\":\\\"·\\\",\\\"nbsp\\\":\\\" \\\",\\\"not\\\":\\\"¬\\\",\\\"ntilde\\\":\\\"ñ\\\",\\\"oacute\\\":\\\"ó\\\",\\\"ocirc\\\":\\\"ô\\\",\\\"ograve\\\":\\\"ò\\\",\\\"ordf\\\":\\\"ª\\\",\\\"ordm\\\":\\\"º\\\",\\\"oslash\\\":\\\"ø\\\",\\\"otilde\\\":\\\"õ\\\",\\\"ouml\\\":\\\"ö\\\",\\\"para\\\":\\\"¶\\\",\\\"plusmn\\\":\\\"±\\\",\\\"pound\\\":\\\"£\\\",\\\"quot\\\":\\\"\\\\\\\"\\\",\\\"raquo\\\":\\\"»\\\",\\\"reg\\\":\\\"®\\\",\\\"sect\\\":\\\"§\\\",\\\"shy\\\":\\\"­\\\",\\\"sup1\\\":\\\"¹\\\",\\\"sup2\\\":\\\"²\\\",\\\"sup3\\\":\\\"³\\\",\\\"szlig\\\":\\\"ß\\\",\\\"thorn\\\":\\\"þ\\\",\\\"times\\\":\\\"×\\\",\\\"uacute\\\":\\\"ú\\\",\\\"ucirc\\\":\\\"û\\\",\\\"ugrave\\\":\\\"ù\\\",\\\"uml\\\":\\\"¨\\\",\\\"uuml\\\":\\\"ü\\\",\\\"yacute\\\":\\\"ý\\\",\\\"yen\\\":\\\"¥\\\",\\\"yuml\\\":\\\"ÿ\\\"}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/character-entities-legacy/index.json\n"); - -/***/ }), - -/***/ "../node_modules/character-reference-invalid/index.json": -/*!**************************************************************!*\ - !*** ../node_modules/character-reference-invalid/index.json ***! - \**************************************************************/ -/*! exports provided: 0, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"0\\\":\\\"�\\\",\\\"128\\\":\\\"€\\\",\\\"130\\\":\\\"‚\\\",\\\"131\\\":\\\"ƒ\\\",\\\"132\\\":\\\"„\\\",\\\"133\\\":\\\"…\\\",\\\"134\\\":\\\"†\\\",\\\"135\\\":\\\"‡\\\",\\\"136\\\":\\\"ˆ\\\",\\\"137\\\":\\\"‰\\\",\\\"138\\\":\\\"Š\\\",\\\"139\\\":\\\"‹\\\",\\\"140\\\":\\\"Œ\\\",\\\"142\\\":\\\"Ž\\\",\\\"145\\\":\\\"‘\\\",\\\"146\\\":\\\"’\\\",\\\"147\\\":\\\"“\\\",\\\"148\\\":\\\"”\\\",\\\"149\\\":\\\"•\\\",\\\"150\\\":\\\"–\\\",\\\"151\\\":\\\"—\\\",\\\"152\\\":\\\"˜\\\",\\\"153\\\":\\\"™\\\",\\\"154\\\":\\\"š\\\",\\\"155\\\":\\\"›\\\",\\\"156\\\":\\\"œ\\\",\\\"158\\\":\\\"ž\\\",\\\"159\\\":\\\"Ÿ\\\"}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1yZWZlcmVuY2UtaW52YWxpZC9pbmRleC5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/character-reference-invalid/index.json\n"); - -/***/ }), - -/***/ "../node_modules/classnames/index.js": -/*!*******************************************!*\ - !*** ../node_modules/classnames/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n\n/* global define */\n\n\n(function () {\n 'use strict';\n\n var hasOwn = {}.hasOwnProperty;\n\n function classNames() {\n var classes = [];\n\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n\n var argType = _typeof(arg);\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg) && arg.length) {\n var inner = classNames.apply(null, arg);\n\n if (inner) {\n classes.push(inner);\n }\n } else if (argType === 'object') {\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n }\n\n if ( true && module.exports) {\n classNames[\"default\"] = classNames;\n module.exports = classNames;\n } else if ( true && _typeof(__webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) === 'object' && __webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) {\n // register as 'classnames', consistent with npm package name\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return classNames;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n window.classNames = classNames;\n }\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanM/ZjA5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE3IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpICYmIGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUZBO0FBTUE7QUFDQTtBQTNDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/classnames/index.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror-spell-checker/src/js/spell-checker.js": -/*!************************************************************************!*\ - !*** ../node_modules/codemirror-spell-checker/src/js/spell-checker.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n // Requires\n\nvar Typo = __webpack_require__(/*! typo-js */ \"../node_modules/typo-js/typo.js\"); // Create function\n\n\nfunction CodeMirrorSpellChecker(options) {\n // Initialize\n options = options || {}; // Verify\n\n if (typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n console.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n return;\n } // Because some browsers don't support this functionality yet\n\n\n if (!String.prototype.includes) {\n String.prototype.includes = function () {\n \"use strict\";\n\n return String.prototype.indexOf.apply(this, arguments) !== -1;\n };\n } // Define the new mode\n\n\n options.codeMirrorInstance.defineMode(\"spell-checker\", function (config) {\n // Load AFF/DIC data\n if (!CodeMirrorSpellChecker.aff_loading) {\n CodeMirrorSpellChecker.aff_loading = true;\n var xhr_aff = new XMLHttpRequest();\n xhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\n xhr_aff.onload = function () {\n if (xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n CodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n CodeMirrorSpellChecker.num_loaded++;\n\n if (CodeMirrorSpellChecker.num_loaded == 2) {\n CodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n platform: \"any\"\n });\n }\n }\n };\n\n xhr_aff.send(null);\n }\n\n if (!CodeMirrorSpellChecker.dic_loading) {\n CodeMirrorSpellChecker.dic_loading = true;\n var xhr_dic = new XMLHttpRequest();\n xhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\n xhr_dic.onload = function () {\n if (xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n CodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n CodeMirrorSpellChecker.num_loaded++;\n\n if (CodeMirrorSpellChecker.num_loaded == 2) {\n CodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n platform: \"any\"\n });\n }\n }\n };\n\n xhr_dic.send(null);\n } // Define what separates a word\n\n\n var rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \"; // Create the overlay and such\n\n var overlay = {\n token: function token(stream) {\n var ch = stream.peek();\n var word = \"\";\n\n if (rx_word.includes(ch)) {\n stream.next();\n return null;\n }\n\n while ((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n word += ch;\n stream.next();\n }\n\n if (CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word)) return \"spell-error\"; // CSS class: cm-spell-error\n\n return null;\n }\n };\n var mode = options.codeMirrorInstance.getMode(config, config.backdrop || \"text/plain\");\n return options.codeMirrorInstance.overlayMode(mode, overlay, true);\n });\n} // Initialize data globally to reduce memory consumption\n\n\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo; // Export\n\nmodule.exports = CodeMirrorSpellChecker;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3Itc3BlbGwtY2hlY2tlci9zcmMvanMvc3BlbGwtY2hlY2tlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci1zcGVsbC1jaGVja2VyL3NyYy9qcy9zcGVsbC1jaGVja2VyLmpzP2NmNTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVXNlIHN0cmljdCBtb2RlIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9TdHJpY3RfbW9kZSlcblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIFJlcXVpcmVzXG52YXIgVHlwbyA9IHJlcXVpcmUoXCJ0eXBvLWpzXCIpO1xuXG5cbi8vIENyZWF0ZSBmdW5jdGlvblxuZnVuY3Rpb24gQ29kZU1pcnJvclNwZWxsQ2hlY2tlcihvcHRpb25zKSB7XG5cdC8vIEluaXRpYWxpemVcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblxuXHQvLyBWZXJpZnlcblx0aWYodHlwZW9mIG9wdGlvbnMuY29kZU1pcnJvckluc3RhbmNlICE9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIG9wdGlvbnMuY29kZU1pcnJvckluc3RhbmNlLmRlZmluZU1vZGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnNvbGUubG9nKFwiQ29kZU1pcnJvciBTcGVsbCBDaGVja2VyOiBZb3UgbXVzdCBwcm92aWRlIGFuIGluc3RhbmNlIG9mIENvZGVNaXJyb3IgdmlhIHRoZSBvcHRpb24gYGNvZGVNaXJyb3JJbnN0YW5jZWBcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblxuXHQvLyBCZWNhdXNlIHNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHkgeWV0XG5cdGlmKCFTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKSB7XG5cdFx0U3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgIT09IC0xO1xuXHRcdH07XG5cdH1cblxuXG5cdC8vIERlZmluZSB0aGUgbmV3IG1vZGVcblx0b3B0aW9ucy5jb2RlTWlycm9ySW5zdGFuY2UuZGVmaW5lTW9kZShcInNwZWxsLWNoZWNrZXJcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG5cdFx0Ly8gTG9hZCBBRkYvRElDIGRhdGFcblx0XHRpZighQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5hZmZfbG9hZGluZykge1xuXHRcdFx0Q29kZU1pcnJvclNwZWxsQ2hlY2tlci5hZmZfbG9hZGluZyA9IHRydWU7XG5cdFx0XHR2YXIgeGhyX2FmZiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHRcdFx0eGhyX2FmZi5vcGVuKFwiR0VUXCIsIFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2NvZGVtaXJyb3Iuc3BlbGwtY2hlY2tlci9sYXRlc3QvZW5fVVMuYWZmXCIsIHRydWUpO1xuXHRcdFx0eGhyX2FmZi5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYoeGhyX2FmZi5yZWFkeVN0YXRlID09PSA0ICYmIHhocl9hZmYuc3RhdHVzID09PSAyMDApIHtcblx0XHRcdFx0XHRDb2RlTWlycm9yU3BlbGxDaGVja2VyLmFmZl9kYXRhID0geGhyX2FmZi5yZXNwb25zZVRleHQ7XG5cdFx0XHRcdFx0Q29kZU1pcnJvclNwZWxsQ2hlY2tlci5udW1fbG9hZGVkKys7XG5cblx0XHRcdFx0XHRpZihDb2RlTWlycm9yU3BlbGxDaGVja2VyLm51bV9sb2FkZWQgPT0gMikge1xuXHRcdFx0XHRcdFx0Q29kZU1pcnJvclNwZWxsQ2hlY2tlci50eXBvID0gbmV3IFR5cG8oXCJlbl9VU1wiLCBDb2RlTWlycm9yU3BlbGxDaGVja2VyLmFmZl9kYXRhLCBDb2RlTWlycm9yU3BlbGxDaGVja2VyLmRpY19kYXRhLCB7XG5cdFx0XHRcdFx0XHRcdHBsYXRmb3JtOiBcImFueVwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR4aHJfYWZmLnNlbmQobnVsbCk7XG5cdFx0fVxuXG5cdFx0aWYoIUNvZGVNaXJyb3JTcGVsbENoZWNrZXIuZGljX2xvYWRpbmcpIHtcblx0XHRcdENvZGVNaXJyb3JTcGVsbENoZWNrZXIuZGljX2xvYWRpbmcgPSB0cnVlO1xuXHRcdFx0dmFyIHhocl9kaWMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHRcdHhocl9kaWMub3BlbihcIkdFVFwiLCBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9jb2RlbWlycm9yLnNwZWxsLWNoZWNrZXIvbGF0ZXN0L2VuX1VTLmRpY1wiLCB0cnVlKTtcblx0XHRcdHhocl9kaWMub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKHhocl9kaWMucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHJfZGljLnN0YXR1cyA9PT0gMjAwKSB7XG5cdFx0XHRcdFx0Q29kZU1pcnJvclNwZWxsQ2hlY2tlci5kaWNfZGF0YSA9IHhocl9kaWMucmVzcG9uc2VUZXh0O1xuXHRcdFx0XHRcdENvZGVNaXJyb3JTcGVsbENoZWNrZXIubnVtX2xvYWRlZCsrO1xuXG5cdFx0XHRcdFx0aWYoQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5udW1fbG9hZGVkID09IDIpIHtcblx0XHRcdFx0XHRcdENvZGVNaXJyb3JTcGVsbENoZWNrZXIudHlwbyA9IG5ldyBUeXBvKFwiZW5fVVNcIiwgQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5hZmZfZGF0YSwgQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5kaWNfZGF0YSwge1xuXHRcdFx0XHRcdFx0XHRwbGF0Zm9ybTogXCJhbnlcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0eGhyX2RpYy5zZW5kKG51bGwpO1xuXHRcdH1cblxuXG5cdFx0Ly8gRGVmaW5lIHdoYXQgc2VwYXJhdGVzIGEgd29yZFxuXHRcdHZhciByeF93b3JkID0gXCIhXFxcIiMkJSYoKSorLC0uLzo7PD0+P0BbXFxcXF1eX2B7fH1+IFwiO1xuXG5cblx0XHQvLyBDcmVhdGUgdGhlIG92ZXJsYXkgYW5kIHN1Y2hcblx0XHR2YXIgb3ZlcmxheSA9IHtcblx0XHRcdHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtcblx0XHRcdFx0dmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcblx0XHRcdFx0dmFyIHdvcmQgPSBcIlwiO1xuXG5cdFx0XHRcdGlmKHJ4X3dvcmQuaW5jbHVkZXMoY2gpKSB7XG5cdFx0XHRcdFx0c3RyZWFtLm5leHQoKTtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdoaWxlKChjaCA9IHN0cmVhbS5wZWVrKCkpICE9IG51bGwgJiYgIXJ4X3dvcmQuaW5jbHVkZXMoY2gpKSB7XG5cdFx0XHRcdFx0d29yZCArPSBjaDtcblx0XHRcdFx0XHRzdHJlYW0ubmV4dCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoQ29kZU1pcnJvclNwZWxsQ2hlY2tlci50eXBvICYmICFDb2RlTWlycm9yU3BlbGxDaGVja2VyLnR5cG8uY2hlY2sod29yZCkpXG5cdFx0XHRcdFx0cmV0dXJuIFwic3BlbGwtZXJyb3JcIjsgLy8gQ1NTIGNsYXNzOiBjbS1zcGVsbC1lcnJvclxuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR2YXIgbW9kZSA9IG9wdGlvbnMuY29kZU1pcnJvckluc3RhbmNlLmdldE1vZGUoXG5cdFx0XHRjb25maWcsIGNvbmZpZy5iYWNrZHJvcCB8fCBcInRleHQvcGxhaW5cIlxuXHRcdCk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5jb2RlTWlycm9ySW5zdGFuY2Uub3ZlcmxheU1vZGUobW9kZSwgb3ZlcmxheSwgdHJ1ZSk7XG5cdH0pO1xufVxuXG5cbi8vIEluaXRpYWxpemUgZGF0YSBnbG9iYWxseSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uXG5Db2RlTWlycm9yU3BlbGxDaGVja2VyLm51bV9sb2FkZWQgPSAwO1xuQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5hZmZfbG9hZGluZyA9IGZhbHNlO1xuQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5kaWNfbG9hZGluZyA9IGZhbHNlO1xuQ29kZU1pcnJvclNwZWxsQ2hlY2tlci5hZmZfZGF0YSA9IFwiXCI7XG5Db2RlTWlycm9yU3BlbGxDaGVja2VyLmRpY19kYXRhID0gXCJcIjtcbkNvZGVNaXJyb3JTcGVsbENoZWNrZXIudHlwbztcblxuXG4vLyBFeHBvcnRcbm1vZHVsZS5leHBvcnRzID0gQ29kZU1pcnJvclNwZWxsQ2hlY2tlcjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUZBO0FBZEE7QUFDQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBQ0E7QUFXQTtBQXJDQTtBQUNBO0FBQ0E7QUF3Q0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBbkJBO0FBc0JBO0FBSUE7QUF4RUE7QUE2RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror-spell-checker/src/js/spell-checker.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/display/fullscreen.js": -/*!**************************************************************!*\ - !*** ../node_modules/codemirror/addon/display/fullscreen.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function (cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset,\n width: wrap.style.width,\n height: wrap.style.height\n };\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width;\n wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZGlzcGxheS9mdWxsc2NyZWVuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL2Rpc3BsYXkvZnVsbHNjcmVlbi5qcz83ZjEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwiZnVsbFNjcmVlblwiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCA9PSBDb2RlTWlycm9yLkluaXQpIG9sZCA9IGZhbHNlO1xuICAgIGlmICghb2xkID09ICF2YWwpIHJldHVybjtcbiAgICBpZiAodmFsKSBzZXRGdWxsc2NyZWVuKGNtKTtcbiAgICBlbHNlIHNldE5vcm1hbChjbSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNldEZ1bGxzY3JlZW4oY20pIHtcbiAgICB2YXIgd3JhcCA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgY20uc3RhdGUuZnVsbFNjcmVlblJlc3RvcmUgPSB7c2Nyb2xsVG9wOiB3aW5kb3cucGFnZVlPZmZzZXQsIHNjcm9sbExlZnQ6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd3JhcC5zdHlsZS53aWR0aCwgaGVpZ2h0OiB3cmFwLnN0eWxlLmhlaWdodH07XG4gICAgd3JhcC5zdHlsZS53aWR0aCA9IFwiXCI7XG4gICAgd3JhcC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgICB3cmFwLmNsYXNzTmFtZSArPSBcIiBDb2RlTWlycm9yLWZ1bGxzY3JlZW5cIjtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIGNtLnJlZnJlc2goKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE5vcm1hbChjbSkge1xuICAgIHZhciB3cmFwID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICB3cmFwLmNsYXNzTmFtZSA9IHdyYXAuY2xhc3NOYW1lLnJlcGxhY2UoL1xccypDb2RlTWlycm9yLWZ1bGxzY3JlZW5cXGIvLCBcIlwiKTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xuICAgIHZhciBpbmZvID0gY20uc3RhdGUuZnVsbFNjcmVlblJlc3RvcmU7XG4gICAgd3JhcC5zdHlsZS53aWR0aCA9IGluZm8ud2lkdGg7IHdyYXAuc3R5bGUuaGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKGluZm8uc2Nyb2xsTGVmdCwgaW5mby5zY3JvbGxUb3ApO1xuICAgIGNtLnJlZnJlc2goKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFwQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/display/fullscreen.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/display/placeholder.js": -/*!***************************************************************!*\ - !*** ../node_modules/codemirror/addon/display/placeholder.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function (cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\");\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder);\n elt.appendChild(placeHolder);\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(),\n empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n if (empty) setPlaceholder(cm);else clearPlaceholder(cm);\n }\n\n function isEmpty(cm) {\n return cm.lineCount() === 1 && cm.getLine(0) === \"\";\n }\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZGlzcGxheS9wbGFjZWhvbGRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9kaXNwbGF5L3BsYWNlaG9sZGVyLmpzPzQ0MzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJwbGFjZWhvbGRlclwiLCBcIlwiLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICB2YXIgcHJldiA9IG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0O1xuICAgIGlmICh2YWwgJiYgIXByZXYpIHtcbiAgICAgIGNtLm9uKFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgY20ub24oXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgICAgY20ub24oXCJzd2FwRG9jXCIsIG9uQ2hhbmdlKTtcbiAgICAgIG9uQ2hhbmdlKGNtKTtcbiAgICB9IGVsc2UgaWYgKCF2YWwgJiYgcHJldikge1xuICAgICAgY20ub2ZmKFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgY20ub2ZmKFwiY2hhbmdlXCIsIG9uQ2hhbmdlKTtcbiAgICAgIGNtLm9mZihcInN3YXBEb2NcIiwgb25DaGFuZ2UpO1xuICAgICAgY2xlYXJQbGFjZWhvbGRlcihjbSk7XG4gICAgICB2YXIgd3JhcHBlciA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXCIgQ29kZU1pcnJvci1lbXB0eVwiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAodmFsICYmICFjbS5oYXNGb2N1cygpKSBvbkJsdXIoY20pO1xuICB9KTtcblxuICBmdW5jdGlvbiBjbGVhclBsYWNlaG9sZGVyKGNtKSB7XG4gICAgaWYgKGNtLnN0YXRlLnBsYWNlaG9sZGVyKSB7XG4gICAgICBjbS5zdGF0ZS5wbGFjZWhvbGRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLnN0YXRlLnBsYWNlaG9sZGVyKTtcbiAgICAgIGNtLnN0YXRlLnBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXIoY20pIHtcbiAgICBjbGVhclBsYWNlaG9sZGVyKGNtKTtcbiAgICB2YXIgZWx0ID0gY20uc3RhdGUucGxhY2Vob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicHJlXCIpO1xuICAgIGVsdC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IDA7IG92ZXJmbG93OiB2aXNpYmxlXCI7XG4gICAgZWx0LnN0eWxlLmRpcmVjdGlvbiA9IGNtLmdldE9wdGlvbihcImRpcmVjdGlvblwiKTtcbiAgICBlbHQuY2xhc3NOYW1lID0gXCJDb2RlTWlycm9yLXBsYWNlaG9sZGVyIENvZGVNaXJyb3ItbGluZS1saWtlXCI7XG4gICAgdmFyIHBsYWNlSG9sZGVyID0gY20uZ2V0T3B0aW9uKFwicGxhY2Vob2xkZXJcIilcbiAgICBpZiAodHlwZW9mIHBsYWNlSG9sZGVyID09IFwic3RyaW5nXCIpIHBsYWNlSG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGxhY2VIb2xkZXIpXG4gICAgZWx0LmFwcGVuZENoaWxkKHBsYWNlSG9sZGVyKVxuICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShlbHQsIGNtLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25CbHVyKGNtKSB7XG4gICAgaWYgKGlzRW1wdHkoY20pKSBzZXRQbGFjZWhvbGRlcihjbSk7XG4gIH1cbiAgZnVuY3Rpb24gb25DaGFuZ2UoY20pIHtcbiAgICB2YXIgd3JhcHBlciA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCksIGVtcHR5ID0gaXNFbXB0eShjbSk7XG4gICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFwiIENvZGVNaXJyb3ItZW1wdHlcIiwgXCJcIikgKyAoZW1wdHkgPyBcIiBDb2RlTWlycm9yLWVtcHR5XCIgOiBcIlwiKTtcblxuICAgIGlmIChlbXB0eSkgc2V0UGxhY2Vob2xkZXIoY20pO1xuICAgIGVsc2UgY2xlYXJQbGFjZWhvbGRlcihjbSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0VtcHR5KGNtKSB7XG4gICAgcmV0dXJuIChjbS5saW5lQ291bnQoKSA9PT0gMSkgJiYgKGNtLmdldExpbmUoMCkgPT09IFwiXCIpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFEQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/display/placeholder.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/edit/continuelist.js": -/*!*************************************************************!*\ - !*** ../node_modules/codemirror/addon/edit/continuelist.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function (cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(),\n replacements = [];\n\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head; // If we're not in Markdown mode, fall back to normal newlineAndIndent\n\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n\n if (inner.mode.name !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n var line = cm.getLine(pos.line),\n match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n\n if (!ranges[i].empty() || !inList && !inQuote || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line);\n var endOfList = !/>\\s*$/.test(line);\n if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n line: pos.line,\n ch: 0\n }, {\n line: pos.line,\n ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1],\n after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n }; // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n\n\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line,\n lookAhead = 0,\n skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)),\n startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber),\n nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;\n var nextNumber = parseInt(nextItem[3], 10),\n itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]), {\n line: nextLineNumber,\n ch: 0\n }, {\n line: nextLineNumber,\n ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return; // This doesn't run if the next line immediatley indents, as it is\n // not clear of the users intention (new indented item or same level)\n\n if (startIndent.length < nextIndent.length && lookAhead === 1) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QuanM/NTY4MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgbGlzdFJFID0gL14oXFxzKikoPls+IF0qfFsqKy1dIFxcW1t4IF1cXF1cXHN8WyorLV1cXHN8KFxcZCspKFsuKV0pKShcXHMqKS8sXG4gICAgICBlbXB0eUxpc3RSRSA9IC9eKFxccyopKD5bPiBdKnxbKistXSBcXFtbeCBdXFxdfFsqKy1dfChcXGQrKVsuKV0pKFxccyopJC8sXG4gICAgICB1bm9yZGVyZWRMaXN0UkUgPSAvWyorLV1cXHMvO1xuXG4gIENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0ID0gZnVuY3Rpb24oY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5oZWFkO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gTWFya2Rvd24gbW9kZSwgZmFsbCBiYWNrIHRvIG5vcm1hbCBuZXdsaW5lQW5kSW5kZW50XG4gICAgICB2YXIgZW9sU3RhdGUgPSBjbS5nZXRTdGF0ZUFmdGVyKHBvcy5saW5lKTtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGNtLmdldE1vZGUoKSwgZW9sU3RhdGUpO1xuICAgICAgaWYgKGlubmVyLm1vZGUubmFtZSAhPT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW9sU3RhdGUgPSBpbm5lci5zdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluTGlzdCA9IGVvbFN0YXRlLmxpc3QgIT09IGZhbHNlO1xuICAgICAgdmFyIGluUXVvdGUgPSBlb2xTdGF0ZS5xdW90ZSAhPT0gMDtcblxuICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHBvcy5saW5lKSwgbWF0Y2ggPSBsaXN0UkUuZXhlYyhsaW5lKTtcbiAgICAgIHZhciBjdXJzb3JCZWZvcmVCdWxsZXQgPSAvXlxccyokLy50ZXN0KGxpbmUuc2xpY2UoMCwgcG9zLmNoKSk7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpIHx8ICghaW5MaXN0ICYmICFpblF1b3RlKSB8fCAhbWF0Y2ggfHwgY3Vyc29yQmVmb3JlQnVsbGV0KSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVtcHR5TGlzdFJFLnRlc3QobGluZSkpIHtcbiAgICAgICAgdmFyIGVuZE9mUXVvdGUgPSBpblF1b3RlICYmIC8+XFxzKiQvLnRlc3QobGluZSlcbiAgICAgICAgdmFyIGVuZE9mTGlzdCA9ICEvPlxccyokLy50ZXN0KGxpbmUpXG4gICAgICAgIGlmIChlbmRPZlF1b3RlIHx8IGVuZE9mTGlzdCkgY20ucmVwbGFjZVJhbmdlKFwiXCIsIHtcbiAgICAgICAgICBsaW5lOiBwb3MubGluZSwgY2g6IDBcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLCBjaDogcG9zLmNoICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBtYXRjaFsxXSwgYWZ0ZXIgPSBtYXRjaFs1XTtcbiAgICAgICAgdmFyIG51bWJlcmVkID0gISh1bm9yZGVyZWRMaXN0UkUudGVzdChtYXRjaFsyXSkgfHwgbWF0Y2hbMl0uaW5kZXhPZihcIj5cIikgPj0gMCk7XG4gICAgICAgIHZhciBidWxsZXQgPSBudW1iZXJlZCA/IChwYXJzZUludChtYXRjaFszXSwgMTApICsgMSkgKyBtYXRjaFs0XSA6IG1hdGNoWzJdLnJlcGxhY2UoXCJ4XCIsIFwiIFwiKTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIiArIGluZGVudCArIGJ1bGxldCArIGFmdGVyO1xuXG4gICAgICAgIGlmIChudW1iZXJlZCkgaW5jcmVtZW50UmVtYWluaW5nTWFya2Rvd25MaXN0TnVtYmVycyhjbSwgcG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhyZXBsYWNlbWVudHMpO1xuICB9O1xuXG4gIC8vIEF1dG8tdXBkYXRpbmcgTWFya2Rvd24gbGlzdCBudW1iZXJzIHdoZW4gYSBuZXcgaXRlbSBpcyBhZGRlZCB0byB0aGVcbiAgLy8gbWlkZGxlIG9mIGEgbGlzdFxuICBmdW5jdGlvbiBpbmNyZW1lbnRSZW1haW5pbmdNYXJrZG93bkxpc3ROdW1iZXJzKGNtLCBwb3MpIHtcbiAgICB2YXIgc3RhcnRMaW5lID0gcG9zLmxpbmUsIGxvb2tBaGVhZCA9IDAsIHNraXBDb3VudCA9IDA7XG4gICAgdmFyIHN0YXJ0SXRlbSA9IGxpc3RSRS5leGVjKGNtLmdldExpbmUoc3RhcnRMaW5lKSksIHN0YXJ0SW5kZW50ID0gc3RhcnRJdGVtWzFdO1xuXG4gICAgZG8ge1xuICAgICAgbG9va0FoZWFkICs9IDE7XG4gICAgICB2YXIgbmV4dExpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsb29rQWhlYWQ7XG4gICAgICB2YXIgbmV4dExpbmUgPSBjbS5nZXRMaW5lKG5leHRMaW5lTnVtYmVyKSwgbmV4dEl0ZW0gPSBsaXN0UkUuZXhlYyhuZXh0TGluZSk7XG5cbiAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHRJdGVtWzFdO1xuICAgICAgICB2YXIgbmV3TnVtYmVyID0gKHBhcnNlSW50KHN0YXJ0SXRlbVszXSwgMTApICsgbG9va0FoZWFkIC0gc2tpcENvdW50KTtcbiAgICAgICAgdmFyIG5leHROdW1iZXIgPSAocGFyc2VJbnQobmV4dEl0ZW1bM10sIDEwKSksIGl0ZW1OdW1iZXIgPSBuZXh0TnVtYmVyO1xuXG4gICAgICAgIGlmIChzdGFydEluZGVudCA9PT0gbmV4dEluZGVudCAmJiAhaXNOYU4obmV4dE51bWJlcikpIHtcbiAgICAgICAgICBpZiAobmV3TnVtYmVyID09PSBuZXh0TnVtYmVyKSBpdGVtTnVtYmVyID0gbmV4dE51bWJlciArIDE7XG4gICAgICAgICAgaWYgKG5ld051bWJlciA+IG5leHROdW1iZXIpIGl0ZW1OdW1iZXIgPSBuZXdOdW1iZXIgKyAxO1xuICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgIG5leHRMaW5lLnJlcGxhY2UobGlzdFJFLCBuZXh0SW5kZW50ICsgaXRlbU51bWJlciArIG5leHRJdGVtWzRdICsgbmV4dEl0ZW1bNV0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogMFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogbmV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0YXJ0SW5kZW50Lmxlbmd0aCA+IG5leHRJbmRlbnQubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHJ1biBpZiB0aGUgbmV4dCBsaW5lIGltbWVkaWF0bGV5IGluZGVudHMsIGFzIGl0IGlzXG4gICAgICAgICAgLy8gbm90IGNsZWFyIG9mIHRoZSB1c2VycyBpbnRlbnRpb24gKG5ldyBpbmRlbnRlZCBpdGVtIG9yIHNhbWUgbGV2ZWwpXG4gICAgICAgICAgaWYgKChzdGFydEluZGVudC5sZW5ndGggPCBuZXh0SW5kZW50Lmxlbmd0aCkgJiYgKGxvb2tBaGVhZCA9PT0gMSkpIHJldHVybjtcbiAgICAgICAgICBza2lwQ291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRJdGVtKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBREE7QUFHQTtBQVJBO0FBVUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuREE7QUF1REE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFEQTtBQVBBO0FBV0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUEzQkE7QUE2QkE7QUFoR0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/edit/continuelist.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/mode/overlay.js": -/*!********************************************************!*\ - !*** ../node_modules/codemirror/addon/mode/overlay.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.overlayMode = function (base, overlay, combine) {\n return {\n startState: function startState() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0,\n baseCur: null,\n overlayPos: 0,\n overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function copyState(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos,\n baseCur: null,\n overlayPos: state.overlayPos,\n overlayCur: null\n };\n },\n token: function token(stream, state) {\n if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n\n stream.pos = Math.min(state.basePos, state.overlayPos); // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n\n if (state.overlayCur == null) return state.baseCur;else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + \" \" + state.overlayCur;else return state.overlayCur;\n },\n indent: base.indent && function (state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n innerMode: function innerMode(state) {\n return {\n state: state.base,\n mode: base\n };\n },\n blankLine: function blankLine(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken;\n }\n };\n };\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL21vZGUvb3ZlcmxheS5qcz80MDRmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgbW9kZXMgdG8gYmUgY29tYmluZWQuIFRoZSBtb2RlIGdpdmVuXG4vLyBhcyB0aGUgYmFzZSBhcmd1bWVudCB0YWtlcyBjYXJlIG9mIG1vc3Qgb2YgdGhlIG5vcm1hbCBtb2RlXG4vLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2hcbi8vIGNhbiBvdmVycmlkZSB0aGUgc3R5bGUgb2YgdGV4dC4gQm90aCBtb2RlcyBnZXQgdG8gcGFyc2UgYWxsIG9mIHRoZVxuLy8gdGV4dCwgYnV0IHdoZW4gYm90aCBhc3NpZ24gYSBub24tbnVsbCBzdHlsZSB0byBhIHBpZWNlIG9mIGNvZGUsIHRoZVxuLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUgYW5kIG5vdCBvdmVycmlkZGVuLFxuLy8gb3Igc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zIHdhcyB0cnVlLCBpbiB3aGljaCBjYXNlIHRoZSBzdHlsZXMgYXJlXG4vLyBjb21iaW5lZC5cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLm92ZXJsYXlNb2RlID0gZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYmluZSkge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogQ29kZU1pcnJvci5zdGFydFN0YXRlKGJhc2UpLFxuICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksXG4gICAgICAgIGJhc2VQb3M6IDAsIGJhc2VDdXI6IG51bGwsXG4gICAgICAgIG92ZXJsYXlQb3M6IDAsIG92ZXJsYXlDdXI6IG51bGwsXG4gICAgICAgIHN0cmVhbVNlZW46IG51bGxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShiYXNlLCBzdGF0ZS5iYXNlKSxcbiAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5jb3B5U3RhdGUob3ZlcmxheSwgc3RhdGUub3ZlcmxheSksXG4gICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsXG4gICAgICAgIG92ZXJsYXlQb3M6IHN0YXRlLm92ZXJsYXlQb3MsIG92ZXJsYXlDdXI6IG51bGxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtICE9IHN0YXRlLnN0cmVhbVNlZW4gfHxcbiAgICAgICAgICBNYXRoLm1pbihzdGF0ZS5iYXNlUG9zLCBzdGF0ZS5vdmVybGF5UG9zKSA8IHN0cmVhbS5zdGFydCkge1xuICAgICAgICBzdGF0ZS5zdHJlYW1TZWVuID0gc3RyZWFtO1xuICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5zdGFydDtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5zdGFydCA9PSBzdGF0ZS5iYXNlUG9zKSB7XG4gICAgICAgIHN0YXRlLmJhc2VDdXIgPSBiYXNlLnRva2VuKHN0cmVhbSwgc3RhdGUuYmFzZSk7XG4gICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zdGFydCA9PSBzdGF0ZS5vdmVybGF5UG9zKSB7XG4gICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7XG4gICAgICAgIHN0YXRlLm92ZXJsYXlDdXIgPSBvdmVybGF5LnRva2VuKHN0cmVhbSwgc3RhdGUub3ZlcmxheSk7XG4gICAgICAgIHN0YXRlLm92ZXJsYXlQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgfVxuICAgICAgc3RyZWFtLnBvcyA9IE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpO1xuXG4gICAgICAvLyBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgYWx3YXlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBjb21iaW5lLFxuICAgICAgLy8gdW5sZXNzIHNldCB0byBudWxsXG4gICAgICBpZiAoc3RhdGUub3ZlcmxheUN1ciA9PSBudWxsKSByZXR1cm4gc3RhdGUuYmFzZUN1cjtcbiAgICAgIGVsc2UgaWYgKHN0YXRlLmJhc2VDdXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zIHx8XG4gICAgICAgICAgICAgICBjb21iaW5lICYmIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyA9PSBudWxsKVxuICAgICAgICByZXR1cm4gc3RhdGUuYmFzZUN1ciArIFwiIFwiICsgc3RhdGUub3ZlcmxheUN1cjtcbiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLm92ZXJsYXlDdXI7XG4gICAgfSxcblxuICAgIGluZGVudDogYmFzZS5pbmRlbnQgJiYgZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgbGluZSkge1xuICAgICAgcmV0dXJuIGJhc2UuaW5kZW50KHN0YXRlLmJhc2UsIHRleHRBZnRlciwgbGluZSk7XG4gICAgfSxcbiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMsXG5cbiAgICBpbm5lck1vZGU6IGZ1bmN0aW9uKHN0YXRlKSB7IHJldHVybiB7c3RhdGU6IHN0YXRlLmJhc2UsIG1vZGU6IGJhc2V9OyB9LFxuXG4gICAgYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgdmFyIGJhc2VUb2tlbiwgb3ZlcmxheVRva2VuO1xuICAgICAgaWYgKGJhc2UuYmxhbmtMaW5lKSBiYXNlVG9rZW4gPSBiYXNlLmJsYW5rTGluZShzdGF0ZS5iYXNlKTtcbiAgICAgIGlmIChvdmVybGF5LmJsYW5rTGluZSkgb3ZlcmxheVRva2VuID0gb3ZlcmxheS5ibGFua0xpbmUoc3RhdGUub3ZlcmxheSk7XG5cbiAgICAgIHJldHVybiBvdmVybGF5VG9rZW4gPT0gbnVsbCA/XG4gICAgICAgIGJhc2VUb2tlbiA6XG4gICAgICAgIChjb21iaW5lICYmIGJhc2VUb2tlbiAhPSBudWxsID8gYmFzZVRva2VuICsgXCIgXCIgKyBvdmVybGF5VG9rZW4gOiBvdmVybGF5VG9rZW4pO1xuICAgIH1cbiAgfTtcbn07XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFGQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQVhBO0FBbUJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQXZDQTtBQStDQTtBQUNBO0FBaERBO0FBa0RBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXBEQTtBQXNEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUE5REE7QUFEQTtBQVZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/mode/overlay.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/search/searchcursor.js": -/*!***************************************************************!*\ - !*** ../node_modules/codemirror/addon/search/searchcursor.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n\n function regexpFlags(regexp) {\n var flags = regexp.flags;\n return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\") + (regexp.global ? \"g\" : \"\") + (regexp.multiline ? \"m\" : \"\");\n }\n\n function ensureFlags(regexp, flags) {\n var current = regexpFlags(regexp),\n target = current;\n\n for (var i = 0; i < flags.length; i++) {\n if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i);\n }\n\n return current == target ? regexp : new RegExp(regexp.source, target);\n }\n\n function maybeMultiline(regexp) {\n return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source);\n }\n\n function searchRegexpForward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\");\n\n for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n regexp.lastIndex = ch;\n var string = doc.getLine(line),\n match = regexp.exec(string);\n if (match) return {\n from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match\n };\n }\n }\n\n function searchRegexpForwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start);\n regexp = ensureFlags(regexp, \"gm\");\n var string,\n chunk = 1;\n\n for (var line = start.line, last = doc.lastLine(); line <= last;) {\n // This grows the search buffer in exponentially-sized chunks\n // between matches, so that nearby matches are fast and don't\n // require concatenating the whole document (in case we're\n // searching for something that has tons of matches), but at the\n // same time, the amount of retries is limited.\n for (var i = 0; i < chunk; i++) {\n if (line > last) break;\n var curLine = doc.getLine(line++);\n string = string == null ? curLine : string + \"\\n\" + curLine;\n }\n\n chunk = chunk * 2;\n regexp.lastIndex = start.ch;\n var match = regexp.exec(string);\n\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"),\n inside = match[0].split(\"\\n\");\n var startLine = start.line + before.length - 1,\n startCh = before[before.length - 1].length;\n return {\n from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match\n };\n }\n }\n }\n\n function lastMatchIn(string, regexp, endMargin) {\n var match,\n from = 0;\n\n while (from <= string.length) {\n regexp.lastIndex = from;\n var newMatch = regexp.exec(string);\n if (!newMatch) break;\n var end = newMatch.index + newMatch[0].length;\n if (end > string.length - endMargin) break;\n if (!match || end > match.index + match[0].length) match = newMatch;\n from = newMatch.index + 1;\n }\n\n return match;\n }\n\n function searchRegexpBackward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\");\n\n for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n var string = doc.getLine(line);\n var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch);\n if (match) return {\n from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match\n };\n }\n }\n\n function searchRegexpBackwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start);\n regexp = ensureFlags(regexp, \"gm\");\n var string,\n chunkSize = 1,\n endMargin = doc.getLine(start.line).length - start.ch;\n\n for (var line = start.line, first = doc.firstLine(); line >= first;) {\n for (var i = 0; i < chunkSize && line >= first; i++) {\n var curLine = doc.getLine(line--);\n string = string == null ? curLine : curLine + \"\\n\" + string;\n }\n\n chunkSize *= 2;\n var match = lastMatchIn(string, regexp, endMargin);\n\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"),\n inside = match[0].split(\"\\n\");\n var startLine = line + before.length,\n startCh = before[before.length - 1].length;\n return {\n from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match\n };\n }\n }\n }\n\n var doFold, noFold;\n\n if (String.prototype.normalize) {\n doFold = function doFold(str) {\n return str.normalize(\"NFD\").toLowerCase();\n };\n\n noFold = function noFold(str) {\n return str.normalize(\"NFD\");\n };\n } else {\n doFold = function doFold(str) {\n return str.toLowerCase();\n };\n\n noFold = function noFold(str) {\n return str;\n };\n } // Maps a position in a case-folded line back to a position in the original line\n // (compensating for codepoints increasing in number during folding)\n\n\n function adjustPos(orig, folded, pos, foldFunc) {\n if (orig.length == folded.length) return pos;\n\n for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n if (min == max) return min;\n var mid = min + max >> 1;\n var len = foldFunc(orig.slice(0, mid)).length;\n if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1;\n }\n }\n\n function searchStringForward(doc, query, start, caseFold) {\n // Empty string would match anything and never progress, so we\n // define it to match nothing instead.\n if (!query.length) return null;\n var fold = caseFold ? doFold : noFold;\n var lines = fold(query).split(/\\r|\\n\\r?/);\n\n search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n var orig = doc.getLine(line).slice(ch),\n string = fold(orig);\n\n if (lines.length == 1) {\n var found = string.indexOf(lines[0]);\n if (found == -1) continue search;\n var start = adjustPos(orig, string, found, fold) + ch;\n return {\n from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)\n };\n } else {\n var cutFrom = string.length - lines[0].length;\n if (string.slice(cutFrom) != lines[0]) continue search;\n\n for (var i = 1; i < lines.length - 1; i++) {\n if (fold(doc.getLine(line + i)) != lines[i]) continue search;\n }\n\n var end = doc.getLine(line + lines.length - 1),\n endString = fold(end),\n lastLine = lines[lines.length - 1];\n if (endString.slice(0, lastLine.length) != lastLine) continue search;\n return {\n from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))\n };\n }\n }\n }\n\n function searchStringBackward(doc, query, start, caseFold) {\n if (!query.length) return null;\n var fold = caseFold ? doFold : noFold;\n var lines = fold(query).split(/\\r|\\n\\r?/);\n\n search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n var orig = doc.getLine(line);\n if (ch > -1) orig = orig.slice(0, ch);\n var string = fold(orig);\n\n if (lines.length == 1) {\n var found = string.lastIndexOf(lines[0]);\n if (found == -1) continue search;\n return {\n from: Pos(line, adjustPos(orig, string, found, fold)),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))\n };\n } else {\n var lastLine = lines[lines.length - 1];\n if (string.slice(0, lastLine.length) != lastLine) continue search;\n\n for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) {\n if (fold(doc.getLine(start + i)) != lines[i]) continue search;\n }\n\n var top = doc.getLine(line + 1 - lines.length),\n topString = fold(top);\n if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search;\n return {\n from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n to: Pos(line, adjustPos(orig, string, lastLine.length, fold))\n };\n }\n }\n }\n\n function SearchCursor(doc, query, pos, options) {\n this.atOccurrence = false;\n this.doc = doc;\n pos = pos ? doc.clipPos(pos) : Pos(0, 0);\n this.pos = {\n from: pos,\n to: pos\n };\n var caseFold;\n\n if (_typeof(options) == \"object\") {\n caseFold = options.caseFold;\n } else {\n // Backwards compat for when caseFold was the 4th argument\n caseFold = options;\n options = null;\n }\n\n if (typeof query == \"string\") {\n if (caseFold == null) caseFold = false;\n\n this.matches = function (reverse, pos) {\n return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold);\n };\n } else {\n query = ensureFlags(query, \"gm\");\n if (!options || options.multiline !== false) this.matches = function (reverse, pos) {\n return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos);\n };else this.matches = function (reverse, pos) {\n return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos);\n };\n }\n }\n\n SearchCursor.prototype = {\n findNext: function findNext() {\n return this.find(false);\n },\n findPrevious: function findPrevious() {\n return this.find(true);\n },\n find: function find(reverse) {\n var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to)); // Implements weird auto-growing behavior on null-matches for\n // backwards-compatiblity with the vim code (unfortunately)\n\n while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {\n if (reverse) {\n if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1);else if (result.from.line == this.doc.firstLine()) result = null;else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)));\n } else {\n if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1);else if (result.to.line == this.doc.lastLine()) result = null;else result = this.matches(reverse, Pos(result.to.line + 1, 0));\n }\n }\n\n if (result) {\n this.pos = result;\n this.atOccurrence = true;\n return this.pos.match || true;\n } else {\n var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0);\n this.pos = {\n from: end,\n to: end\n };\n return this.atOccurrence = false;\n }\n },\n from: function from() {\n if (this.atOccurrence) return this.pos.from;\n },\n to: function to() {\n if (this.atOccurrence) return this.pos.to;\n },\n replace: function replace(newText, origin) {\n if (!this.atOccurrence) return;\n var lines = CodeMirror.splitLines(newText);\n this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin);\n this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0));\n }\n };\n CodeMirror.defineExtension(\"getSearchCursor\", function (query, pos, caseFold) {\n return new SearchCursor(this.doc, query, pos, caseFold);\n });\n CodeMirror.defineDocExtension(\"getSearchCursor\", function (query, pos, caseFold) {\n return new SearchCursor(this, query, pos, caseFold);\n });\n CodeMirror.defineExtension(\"selectMatches\", function (query, caseFold) {\n var ranges = [];\n var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold);\n\n while (cur.findNext()) {\n if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break;\n ranges.push({\n anchor: cur.from(),\n head: cur.to()\n });\n }\n\n if (ranges.length) this.setSelections(ranges, 0);\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vc2VhcmNoL3NlYXJjaGN1cnNvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9zZWFyY2gvc2VhcmNoY3Vyc29yLmpzPzA4YzIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSlcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpXG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCJcbiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zXG5cbiAgZnVuY3Rpb24gcmVnZXhwRmxhZ3MocmVnZXhwKSB7XG4gICAgdmFyIGZsYWdzID0gcmVnZXhwLmZsYWdzXG4gICAgcmV0dXJuIGZsYWdzICE9IG51bGwgPyBmbGFncyA6IChyZWdleHAuaWdub3JlQ2FzZSA/IFwiaVwiIDogXCJcIilcbiAgICAgICsgKHJlZ2V4cC5nbG9iYWwgPyBcImdcIiA6IFwiXCIpXG4gICAgICArIChyZWdleHAubXVsdGlsaW5lID8gXCJtXCIgOiBcIlwiKVxuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlRmxhZ3MocmVnZXhwLCBmbGFncykge1xuICAgIHZhciBjdXJyZW50ID0gcmVnZXhwRmxhZ3MocmVnZXhwKSwgdGFyZ2V0ID0gY3VycmVudFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmxhZ3MubGVuZ3RoOyBpKyspIGlmICh0YXJnZXQuaW5kZXhPZihmbGFncy5jaGFyQXQoaSkpID09IC0xKVxuICAgICAgdGFyZ2V0ICs9IGZsYWdzLmNoYXJBdChpKVxuICAgIHJldHVybiBjdXJyZW50ID09IHRhcmdldCA/IHJlZ2V4cCA6IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgdGFyZ2V0KVxuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVNdWx0aWxpbmUocmVnZXhwKSB7XG4gICAgcmV0dXJuIC9cXFxcc3xcXFxcbnxcXG58XFxcXFd8XFxcXER8XFxbXFxeLy50ZXN0KHJlZ2V4cC5zb3VyY2UpXG4gIH1cblxuICBmdW5jdGlvbiBzZWFyY2hSZWdleHBGb3J3YXJkKGRvYywgcmVnZXhwLCBzdGFydCkge1xuICAgIHJlZ2V4cCA9IGVuc3VyZUZsYWdzKHJlZ2V4cCwgXCJnXCIpXG4gICAgZm9yICh2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGNoID0gc3RhcnQuY2gsIGxhc3QgPSBkb2MubGFzdExpbmUoKTsgbGluZSA8PSBsYXN0OyBsaW5lKyssIGNoID0gMCkge1xuICAgICAgcmVnZXhwLmxhc3RJbmRleCA9IGNoXG4gICAgICB2YXIgc3RyaW5nID0gZG9jLmdldExpbmUobGluZSksIG1hdGNoID0gcmVnZXhwLmV4ZWMoc3RyaW5nKVxuICAgICAgaWYgKG1hdGNoKVxuICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhsaW5lLCBtYXRjaC5pbmRleCksXG4gICAgICAgICAgICAgICAgdG86IFBvcyhsaW5lLCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgbWF0Y2g6IG1hdGNofVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlYXJjaFJlZ2V4cEZvcndhcmRNdWx0aWxpbmUoZG9jLCByZWdleHAsIHN0YXJ0KSB7XG4gICAgaWYgKCFtYXliZU11bHRpbGluZShyZWdleHApKSByZXR1cm4gc2VhcmNoUmVnZXhwRm9yd2FyZChkb2MsIHJlZ2V4cCwgc3RhcnQpXG5cbiAgICByZWdleHAgPSBlbnN1cmVGbGFncyhyZWdleHAsIFwiZ21cIilcbiAgICB2YXIgc3RyaW5nLCBjaHVuayA9IDFcbiAgICBmb3IgKHZhciBsaW5lID0gc3RhcnQubGluZSwgbGFzdCA9IGRvYy5sYXN0TGluZSgpOyBsaW5lIDw9IGxhc3Q7KSB7XG4gICAgICAvLyBUaGlzIGdyb3dzIHRoZSBzZWFyY2ggYnVmZmVyIGluIGV4cG9uZW50aWFsbHktc2l6ZWQgY2h1bmtzXG4gICAgICAvLyBiZXR3ZWVuIG1hdGNoZXMsIHNvIHRoYXQgbmVhcmJ5IG1hdGNoZXMgYXJlIGZhc3QgYW5kIGRvbid0XG4gICAgICAvLyByZXF1aXJlIGNvbmNhdGVuYXRpbmcgdGhlIHdob2xlIGRvY3VtZW50IChpbiBjYXNlIHdlJ3JlXG4gICAgICAvLyBzZWFyY2hpbmcgZm9yIHNvbWV0aGluZyB0aGF0IGhhcyB0b25zIG9mIG1hdGNoZXMpLCBidXQgYXQgdGhlXG4gICAgICAvLyBzYW1lIHRpbWUsIHRoZSBhbW91bnQgb2YgcmV0cmllcyBpcyBsaW1pdGVkLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuazsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lID4gbGFzdCkgYnJlYWtcbiAgICAgICAgdmFyIGN1ckxpbmUgPSBkb2MuZ2V0TGluZShsaW5lKyspXG4gICAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gY3VyTGluZSA6IHN0cmluZyArIFwiXFxuXCIgKyBjdXJMaW5lXG4gICAgICB9XG4gICAgICBjaHVuayA9IGNodW5rICogMlxuICAgICAgcmVnZXhwLmxhc3RJbmRleCA9IHN0YXJ0LmNoXG4gICAgICB2YXIgbWF0Y2ggPSByZWdleHAuZXhlYyhzdHJpbmcpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHN0cmluZy5zbGljZSgwLCBtYXRjaC5pbmRleCkuc3BsaXQoXCJcXG5cIiksIGluc2lkZSA9IG1hdGNoWzBdLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIHZhciBzdGFydExpbmUgPSBzdGFydC5saW5lICsgYmVmb3JlLmxlbmd0aCAtIDEsIHN0YXJ0Q2ggPSBiZWZvcmVbYmVmb3JlLmxlbmd0aCAtIDFdLmxlbmd0aFxuICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhzdGFydExpbmUsIHN0YXJ0Q2gpLFxuICAgICAgICAgICAgICAgIHRvOiBQb3Moc3RhcnRMaW5lICsgaW5zaWRlLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUubGVuZ3RoID09IDEgPyBzdGFydENoICsgaW5zaWRlWzBdLmxlbmd0aCA6IGluc2lkZVtpbnNpZGUubGVuZ3RoIC0gMV0ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2h9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGFzdE1hdGNoSW4oc3RyaW5nLCByZWdleHAsIGVuZE1hcmdpbikge1xuICAgIHZhciBtYXRjaCwgZnJvbSA9IDBcbiAgICB3aGlsZSAoZnJvbSA8PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICByZWdleHAubGFzdEluZGV4ID0gZnJvbVxuICAgICAgdmFyIG5ld01hdGNoID0gcmVnZXhwLmV4ZWMoc3RyaW5nKVxuICAgICAgaWYgKCFuZXdNYXRjaCkgYnJlYWtcbiAgICAgIHZhciBlbmQgPSBuZXdNYXRjaC5pbmRleCArIG5ld01hdGNoWzBdLmxlbmd0aFxuICAgICAgaWYgKGVuZCA+IHN0cmluZy5sZW5ndGggLSBlbmRNYXJnaW4pIGJyZWFrXG4gICAgICBpZiAoIW1hdGNoIHx8IGVuZCA+IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgICBtYXRjaCA9IG5ld01hdGNoXG4gICAgICBmcm9tID0gbmV3TWF0Y2guaW5kZXggKyAxXG4gICAgfVxuICAgIHJldHVybiBtYXRjaFxuICB9XG5cbiAgZnVuY3Rpb24gc2VhcmNoUmVnZXhwQmFja3dhcmQoZG9jLCByZWdleHAsIHN0YXJ0KSB7XG4gICAgcmVnZXhwID0gZW5zdXJlRmxhZ3MocmVnZXhwLCBcImdcIilcbiAgICBmb3IgKHZhciBsaW5lID0gc3RhcnQubGluZSwgY2ggPSBzdGFydC5jaCwgZmlyc3QgPSBkb2MuZmlyc3RMaW5lKCk7IGxpbmUgPj0gZmlyc3Q7IGxpbmUtLSwgY2ggPSAtMSkge1xuICAgICAgdmFyIHN0cmluZyA9IGRvYy5nZXRMaW5lKGxpbmUpXG4gICAgICB2YXIgbWF0Y2ggPSBsYXN0TWF0Y2hJbihzdHJpbmcsIHJlZ2V4cCwgY2ggPCAwID8gMCA6IHN0cmluZy5sZW5ndGggLSBjaClcbiAgICAgIGlmIChtYXRjaClcbiAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MobGluZSwgbWF0Y2guaW5kZXgpLFxuICAgICAgICAgICAgICAgIHRvOiBQb3MobGluZSwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIG1hdGNoOiBtYXRjaH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZWFyY2hSZWdleHBCYWNrd2FyZE11bHRpbGluZShkb2MsIHJlZ2V4cCwgc3RhcnQpIHtcbiAgICBpZiAoIW1heWJlTXVsdGlsaW5lKHJlZ2V4cCkpIHJldHVybiBzZWFyY2hSZWdleHBCYWNrd2FyZChkb2MsIHJlZ2V4cCwgc3RhcnQpXG4gICAgcmVnZXhwID0gZW5zdXJlRmxhZ3MocmVnZXhwLCBcImdtXCIpXG4gICAgdmFyIHN0cmluZywgY2h1bmtTaXplID0gMSwgZW5kTWFyZ2luID0gZG9jLmdldExpbmUoc3RhcnQubGluZSkubGVuZ3RoIC0gc3RhcnQuY2hcbiAgICBmb3IgKHZhciBsaW5lID0gc3RhcnQubGluZSwgZmlyc3QgPSBkb2MuZmlyc3RMaW5lKCk7IGxpbmUgPj0gZmlyc3Q7KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rU2l6ZSAmJiBsaW5lID49IGZpcnN0OyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckxpbmUgPSBkb2MuZ2V0TGluZShsaW5lLS0pXG4gICAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gY3VyTGluZSA6IGN1ckxpbmUgKyBcIlxcblwiICsgc3RyaW5nXG4gICAgICB9XG4gICAgICBjaHVua1NpemUgKj0gMlxuXG4gICAgICB2YXIgbWF0Y2ggPSBsYXN0TWF0Y2hJbihzdHJpbmcsIHJlZ2V4cCwgZW5kTWFyZ2luKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhciBiZWZvcmUgPSBzdHJpbmcuc2xpY2UoMCwgbWF0Y2guaW5kZXgpLnNwbGl0KFwiXFxuXCIpLCBpbnNpZGUgPSBtYXRjaFswXS5zcGxpdChcIlxcblwiKVxuICAgICAgICB2YXIgc3RhcnRMaW5lID0gbGluZSArIGJlZm9yZS5sZW5ndGgsIHN0YXJ0Q2ggPSBiZWZvcmVbYmVmb3JlLmxlbmd0aCAtIDFdLmxlbmd0aFxuICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhzdGFydExpbmUsIHN0YXJ0Q2gpLFxuICAgICAgICAgICAgICAgIHRvOiBQb3Moc3RhcnRMaW5lICsgaW5zaWRlLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUubGVuZ3RoID09IDEgPyBzdGFydENoICsgaW5zaWRlWzBdLmxlbmd0aCA6IGluc2lkZVtpbnNpZGUubGVuZ3RoIC0gMV0ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2h9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGRvRm9sZCwgbm9Gb2xkXG4gIGlmIChTdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZSkge1xuICAgIGRvRm9sZCA9IGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyLm5vcm1hbGl6ZShcIk5GRFwiKS50b0xvd2VyQ2FzZSgpIH1cbiAgICBub0ZvbGQgPSBmdW5jdGlvbihzdHIpIHsgcmV0dXJuIHN0ci5ub3JtYWxpemUoXCJORkRcIikgfVxuICB9IGVsc2Uge1xuICAgIGRvRm9sZCA9IGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkgfVxuICAgIG5vRm9sZCA9IGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyIH1cbiAgfVxuXG4gIC8vIE1hcHMgYSBwb3NpdGlvbiBpbiBhIGNhc2UtZm9sZGVkIGxpbmUgYmFjayB0byBhIHBvc2l0aW9uIGluIHRoZSBvcmlnaW5hbCBsaW5lXG4gIC8vIChjb21wZW5zYXRpbmcgZm9yIGNvZGVwb2ludHMgaW5jcmVhc2luZyBpbiBudW1iZXIgZHVyaW5nIGZvbGRpbmcpXG4gIGZ1bmN0aW9uIGFkanVzdFBvcyhvcmlnLCBmb2xkZWQsIHBvcywgZm9sZEZ1bmMpIHtcbiAgICBpZiAob3JpZy5sZW5ndGggPT0gZm9sZGVkLmxlbmd0aCkgcmV0dXJuIHBvc1xuICAgIGZvciAodmFyIG1pbiA9IDAsIG1heCA9IHBvcyArIE1hdGgubWF4KDAsIG9yaWcubGVuZ3RoIC0gZm9sZGVkLmxlbmd0aCk7Oykge1xuICAgICAgaWYgKG1pbiA9PSBtYXgpIHJldHVybiBtaW5cbiAgICAgIHZhciBtaWQgPSAobWluICsgbWF4KSA+PiAxXG4gICAgICB2YXIgbGVuID0gZm9sZEZ1bmMob3JpZy5zbGljZSgwLCBtaWQpKS5sZW5ndGhcbiAgICAgIGlmIChsZW4gPT0gcG9zKSByZXR1cm4gbWlkXG4gICAgICBlbHNlIGlmIChsZW4gPiBwb3MpIG1heCA9IG1pZFxuICAgICAgZWxzZSBtaW4gPSBtaWQgKyAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2VhcmNoU3RyaW5nRm9yd2FyZChkb2MsIHF1ZXJ5LCBzdGFydCwgY2FzZUZvbGQpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmcgd291bGQgbWF0Y2ggYW55dGhpbmcgYW5kIG5ldmVyIHByb2dyZXNzLCBzbyB3ZVxuICAgIC8vIGRlZmluZSBpdCB0byBtYXRjaCBub3RoaW5nIGluc3RlYWQuXG4gICAgaWYgKCFxdWVyeS5sZW5ndGgpIHJldHVybiBudWxsXG4gICAgdmFyIGZvbGQgPSBjYXNlRm9sZCA/IGRvRm9sZCA6IG5vRm9sZFxuICAgIHZhciBsaW5lcyA9IGZvbGQocXVlcnkpLnNwbGl0KC9cXHJ8XFxuXFxyPy8pXG5cbiAgICBzZWFyY2g6IGZvciAodmFyIGxpbmUgPSBzdGFydC5saW5lLCBjaCA9IHN0YXJ0LmNoLCBsYXN0ID0gZG9jLmxhc3RMaW5lKCkgKyAxIC0gbGluZXMubGVuZ3RoOyBsaW5lIDw9IGxhc3Q7IGxpbmUrKywgY2ggPSAwKSB7XG4gICAgICB2YXIgb3JpZyA9IGRvYy5nZXRMaW5lKGxpbmUpLnNsaWNlKGNoKSwgc3RyaW5nID0gZm9sZChvcmlnKVxuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IHN0cmluZy5pbmRleE9mKGxpbmVzWzBdKVxuICAgICAgICBpZiAoZm91bmQgPT0gLTEpIGNvbnRpbnVlIHNlYXJjaFxuICAgICAgICB2YXIgc3RhcnQgPSBhZGp1c3RQb3Mob3JpZywgc3RyaW5nLCBmb3VuZCwgZm9sZCkgKyBjaFxuICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhsaW5lLCBhZGp1c3RQb3Mob3JpZywgc3RyaW5nLCBmb3VuZCwgZm9sZCkgKyBjaCksXG4gICAgICAgICAgICAgICAgdG86IFBvcyhsaW5lLCBhZGp1c3RQb3Mob3JpZywgc3RyaW5nLCBmb3VuZCArIGxpbmVzWzBdLmxlbmd0aCwgZm9sZCkgKyBjaCl9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3V0RnJvbSA9IHN0cmluZy5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGhcbiAgICAgICAgaWYgKHN0cmluZy5zbGljZShjdXRGcm9tKSAhPSBsaW5lc1swXSkgY29udGludWUgc2VhcmNoXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgIGlmIChmb2xkKGRvYy5nZXRMaW5lKGxpbmUgKyBpKSkgIT0gbGluZXNbaV0pIGNvbnRpbnVlIHNlYXJjaFxuICAgICAgICB2YXIgZW5kID0gZG9jLmdldExpbmUobGluZSArIGxpbmVzLmxlbmd0aCAtIDEpLCBlbmRTdHJpbmcgPSBmb2xkKGVuZCksIGxhc3RMaW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGVuZFN0cmluZy5zbGljZSgwLCBsYXN0TGluZS5sZW5ndGgpICE9IGxhc3RMaW5lKSBjb250aW51ZSBzZWFyY2hcbiAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MobGluZSwgYWRqdXN0UG9zKG9yaWcsIHN0cmluZywgY3V0RnJvbSwgZm9sZCkgKyBjaCksXG4gICAgICAgICAgICAgICAgdG86IFBvcyhsaW5lICsgbGluZXMubGVuZ3RoIC0gMSwgYWRqdXN0UG9zKGVuZCwgZW5kU3RyaW5nLCBsYXN0TGluZS5sZW5ndGgsIGZvbGQpKX1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZWFyY2hTdHJpbmdCYWNrd2FyZChkb2MsIHF1ZXJ5LCBzdGFydCwgY2FzZUZvbGQpIHtcbiAgICBpZiAoIXF1ZXJ5Lmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICB2YXIgZm9sZCA9IGNhc2VGb2xkID8gZG9Gb2xkIDogbm9Gb2xkXG4gICAgdmFyIGxpbmVzID0gZm9sZChxdWVyeSkuc3BsaXQoL1xccnxcXG5cXHI/LylcblxuICAgIHNlYXJjaDogZm9yICh2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGNoID0gc3RhcnQuY2gsIGZpcnN0ID0gZG9jLmZpcnN0TGluZSgpIC0gMSArIGxpbmVzLmxlbmd0aDsgbGluZSA+PSBmaXJzdDsgbGluZS0tLCBjaCA9IC0xKSB7XG4gICAgICB2YXIgb3JpZyA9IGRvYy5nZXRMaW5lKGxpbmUpXG4gICAgICBpZiAoY2ggPiAtMSkgb3JpZyA9IG9yaWcuc2xpY2UoMCwgY2gpXG4gICAgICB2YXIgc3RyaW5nID0gZm9sZChvcmlnKVxuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IHN0cmluZy5sYXN0SW5kZXhPZihsaW5lc1swXSlcbiAgICAgICAgaWYgKGZvdW5kID09IC0xKSBjb250aW51ZSBzZWFyY2hcbiAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MobGluZSwgYWRqdXN0UG9zKG9yaWcsIHN0cmluZywgZm91bmQsIGZvbGQpKSxcbiAgICAgICAgICAgICAgICB0bzogUG9zKGxpbmUsIGFkanVzdFBvcyhvcmlnLCBzdHJpbmcsIGZvdW5kICsgbGluZXNbMF0ubGVuZ3RoLCBmb2xkKSl9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKDAsIGxhc3RMaW5lLmxlbmd0aCkgIT0gbGFzdExpbmUpIGNvbnRpbnVlIHNlYXJjaFxuICAgICAgICBmb3IgKHZhciBpID0gMSwgc3RhcnQgPSBsaW5lIC0gbGluZXMubGVuZ3RoICsgMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgICAgICBpZiAoZm9sZChkb2MuZ2V0TGluZShzdGFydCArIGkpKSAhPSBsaW5lc1tpXSkgY29udGludWUgc2VhcmNoXG4gICAgICAgIHZhciB0b3AgPSBkb2MuZ2V0TGluZShsaW5lICsgMSAtIGxpbmVzLmxlbmd0aCksIHRvcFN0cmluZyA9IGZvbGQodG9wKVxuICAgICAgICBpZiAodG9wU3RyaW5nLnNsaWNlKHRvcFN0cmluZy5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGgpICE9IGxpbmVzWzBdKSBjb250aW51ZSBzZWFyY2hcbiAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MobGluZSArIDEgLSBsaW5lcy5sZW5ndGgsIGFkanVzdFBvcyh0b3AsIHRvcFN0cmluZywgdG9wLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCwgZm9sZCkpLFxuICAgICAgICAgICAgICAgIHRvOiBQb3MobGluZSwgYWRqdXN0UG9zKG9yaWcsIHN0cmluZywgbGFzdExpbmUubGVuZ3RoLCBmb2xkKSl9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKGRvYywgcXVlcnksIHBvcywgb3B0aW9ucykge1xuICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gZmFsc2VcbiAgICB0aGlzLmRvYyA9IGRvY1xuICAgIHBvcyA9IHBvcyA/IGRvYy5jbGlwUG9zKHBvcykgOiBQb3MoMCwgMClcbiAgICB0aGlzLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9XG5cbiAgICB2YXIgY2FzZUZvbGRcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJvYmplY3RcIikge1xuICAgICAgY2FzZUZvbGQgPSBvcHRpb25zLmNhc2VGb2xkXG4gICAgfSBlbHNlIHsgLy8gQmFja3dhcmRzIGNvbXBhdCBmb3Igd2hlbiBjYXNlRm9sZCB3YXMgdGhlIDR0aCBhcmd1bWVudFxuICAgICAgY2FzZUZvbGQgPSBvcHRpb25zXG4gICAgICBvcHRpb25zID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcXVlcnkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKGNhc2VGb2xkID09IG51bGwpIGNhc2VGb2xkID0gZmFsc2VcbiAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykge1xuICAgICAgICByZXR1cm4gKHJldmVyc2UgPyBzZWFyY2hTdHJpbmdCYWNrd2FyZCA6IHNlYXJjaFN0cmluZ0ZvcndhcmQpKGRvYywgcXVlcnksIHBvcywgY2FzZUZvbGQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5ID0gZW5zdXJlRmxhZ3MocXVlcnksIFwiZ21cIilcbiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLm11bHRpbGluZSAhPT0gZmFsc2UpXG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykge1xuICAgICAgICAgIHJldHVybiAocmV2ZXJzZSA/IHNlYXJjaFJlZ2V4cEJhY2t3YXJkTXVsdGlsaW5lIDogc2VhcmNoUmVnZXhwRm9yd2FyZE11bHRpbGluZSkoZG9jLCBxdWVyeSwgcG9zKVxuICAgICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykge1xuICAgICAgICAgIHJldHVybiAocmV2ZXJzZSA/IHNlYXJjaFJlZ2V4cEJhY2t3YXJkIDogc2VhcmNoUmVnZXhwRm9yd2FyZCkoZG9jLCBxdWVyeSwgcG9zKVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgU2VhcmNoQ3Vyc29yLnByb3RvdHlwZSA9IHtcbiAgICBmaW5kTmV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZChmYWxzZSl9LFxuICAgIGZpbmRQcmV2aW91czogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZCh0cnVlKX0sXG5cbiAgICBmaW5kOiBmdW5jdGlvbihyZXZlcnNlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5tYXRjaGVzKHJldmVyc2UsIHRoaXMuZG9jLmNsaXBQb3MocmV2ZXJzZSA/IHRoaXMucG9zLmZyb20gOiB0aGlzLnBvcy50bykpXG5cbiAgICAgIC8vIEltcGxlbWVudHMgd2VpcmQgYXV0by1ncm93aW5nIGJlaGF2aW9yIG9uIG51bGwtbWF0Y2hlcyBmb3JcbiAgICAgIC8vIGJhY2t3YXJkcy1jb21wYXRpYmxpdHkgd2l0aCB0aGUgdmltIGNvZGUgKHVuZm9ydHVuYXRlbHkpXG4gICAgICB3aGlsZSAocmVzdWx0ICYmIENvZGVNaXJyb3IuY21wUG9zKHJlc3VsdC5mcm9tLCByZXN1bHQudG8pID09IDApIHtcbiAgICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmZyb20uY2gpIHJlc3VsdC5mcm9tID0gUG9zKHJlc3VsdC5mcm9tLmxpbmUsIHJlc3VsdC5mcm9tLmNoIC0gMSlcbiAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuZnJvbS5saW5lID09IHRoaXMuZG9jLmZpcnN0TGluZSgpKSByZXN1bHQgPSBudWxsXG4gICAgICAgICAgZWxzZSByZXN1bHQgPSB0aGlzLm1hdGNoZXMocmV2ZXJzZSwgdGhpcy5kb2MuY2xpcFBvcyhQb3MocmVzdWx0LmZyb20ubGluZSAtIDEpKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnRvLmNoIDwgdGhpcy5kb2MuZ2V0TGluZShyZXN1bHQudG8ubGluZSkubGVuZ3RoKSByZXN1bHQudG8gPSBQb3MocmVzdWx0LnRvLmxpbmUsIHJlc3VsdC50by5jaCArIDEpXG4gICAgICAgICAgZWxzZSBpZiAocmVzdWx0LnRvLmxpbmUgPT0gdGhpcy5kb2MubGFzdExpbmUoKSkgcmVzdWx0ID0gbnVsbFxuICAgICAgICAgIGVsc2UgcmVzdWx0ID0gdGhpcy5tYXRjaGVzKHJldmVyc2UsIFBvcyhyZXN1bHQudG8ubGluZSArIDEsIDApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wb3MgPSByZXN1bHRcbiAgICAgICAgdGhpcy5hdE9jY3VycmVuY2UgPSB0cnVlXG4gICAgICAgIHJldHVybiB0aGlzLnBvcy5tYXRjaCB8fCB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZW5kID0gUG9zKHJldmVyc2UgPyB0aGlzLmRvYy5maXJzdExpbmUoKSA6IHRoaXMuZG9jLmxhc3RMaW5lKCkgKyAxLCAwKVxuICAgICAgICB0aGlzLnBvcyA9IHtmcm9tOiBlbmQsIHRvOiBlbmR9XG4gICAgICAgIHJldHVybiB0aGlzLmF0T2NjdXJyZW5jZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZyb206IGZ1bmN0aW9uKCkge2lmICh0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuIHRoaXMucG9zLmZyb219LFxuICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy50b30sXG5cbiAgICByZXBsYWNlOiBmdW5jdGlvbihuZXdUZXh0LCBvcmlnaW4pIHtcbiAgICAgIGlmICghdGhpcy5hdE9jY3VycmVuY2UpIHJldHVyblxuICAgICAgdmFyIGxpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKG5ld1RleHQpXG4gICAgICB0aGlzLmRvYy5yZXBsYWNlUmFuZ2UobGluZXMsIHRoaXMucG9zLmZyb20sIHRoaXMucG9zLnRvLCBvcmlnaW4pXG4gICAgICB0aGlzLnBvcy50byA9IFBvcyh0aGlzLnBvcy5mcm9tLmxpbmUgKyBsaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoICsgKGxpbmVzLmxlbmd0aCA9PSAxID8gdGhpcy5wb3MuZnJvbS5jaCA6IDApKVxuICAgIH1cbiAgfVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKFwiZ2V0U2VhcmNoQ3Vyc29yXCIsIGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7XG4gICAgcmV0dXJuIG5ldyBTZWFyY2hDdXJzb3IodGhpcy5kb2MsIHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKVxuICB9KVxuICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbihcImdldFNlYXJjaEN1cnNvclwiLCBmdW5jdGlvbihxdWVyeSwgcG9zLCBjYXNlRm9sZCkge1xuICAgIHJldHVybiBuZXcgU2VhcmNoQ3Vyc29yKHRoaXMsIHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKVxuICB9KVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKFwic2VsZWN0TWF0Y2hlc1wiLCBmdW5jdGlvbihxdWVyeSwgY2FzZUZvbGQpIHtcbiAgICB2YXIgcmFuZ2VzID0gW11cbiAgICB2YXIgY3VyID0gdGhpcy5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHRoaXMuZ2V0Q3Vyc29yKFwiZnJvbVwiKSwgY2FzZUZvbGQpXG4gICAgd2hpbGUgKGN1ci5maW5kTmV4dCgpKSB7XG4gICAgICBpZiAoQ29kZU1pcnJvci5jbXBQb3MoY3VyLnRvKCksIHRoaXMuZ2V0Q3Vyc29yKFwidG9cIikpID4gMCkgYnJlYWtcbiAgICAgIHJhbmdlcy5wdXNoKHthbmNob3I6IGN1ci5mcm9tKCksIGhlYWQ6IGN1ci50bygpfSlcbiAgICB9XG4gICAgaWYgKHJhbmdlcy5sZW5ndGgpXG4gICAgICB0aGlzLnNldFNlbGVjdGlvbnMocmFuZ2VzLCAwKVxuICB9KVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBSEE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXhIQTtBQTRIQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBRUE7QUFGQTtBQU1BO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQTdCQTtBQWdDQTtBQUFBO0FBaENBO0FBaUNBO0FBQUE7QUFqQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBekNBO0FBNENBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUExUkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/search/searchcursor.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/addon/selection/mark-selection.js": -/*!********************************************************************!*\ - !*** ../node_modules/codemirror/addon/selection/mark-selection.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function (cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection) cm.operation(function () {\n update(cm);\n });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length) cm.operation(function () {\n clear(cm);\n });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE,\n atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {\n className: cls\n });\n if (addAt == null) array.push(mark);else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n\n for (var i = 0; i < array.length; ++i) {\n array[i].clear();\n }\n\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n\n for (var i = 0; i < ranges.length; i++) {\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n var from = cm.getCursor(\"start\"),\n to = cm.getCursor(\"end\");\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n var coverStart = array[0].find(),\n coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE || cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbi5qcz9hZmNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIEJlY2F1c2Ugc29tZXRpbWVzIHlvdSBuZWVkIHRvIG1hcmsgdGhlIHNlbGVjdGVkICp0ZXh0Ki5cbi8vXG4vLyBBZGRzIGFuIG9wdGlvbiAnc3R5bGVTZWxlY3RlZFRleHQnIHdoaWNoLCB3aGVuIGVuYWJsZWQsIGdpdmVzXG4vLyBzZWxlY3RlZCB0ZXh0IHRoZSBDU1MgY2xhc3MgZ2l2ZW4gYXMgb3B0aW9uIHZhbHVlLCBvclxuLy8gXCJDb2RlTWlycm9yLXNlbGVjdGVkdGV4dFwiIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBhIHN0cmluZy5cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJzdHlsZVNlbGVjdGVkVGV4dFwiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgdmFyIHByZXYgPSBvbGQgJiYgb2xkICE9IENvZGVNaXJyb3IuSW5pdDtcbiAgICBpZiAodmFsICYmICFwcmV2KSB7XG4gICAgICBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gPSBbXTtcbiAgICAgIGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlID0gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8gdmFsIDogXCJDb2RlTWlycm9yLXNlbGVjdGVkdGV4dFwiO1xuICAgICAgcmVzZXQoY20pO1xuICAgICAgY20ub24oXCJjdXJzb3JBY3Rpdml0eVwiLCBvbkN1cnNvckFjdGl2aXR5KTtcbiAgICAgIGNtLm9uKFwiY2hhbmdlXCIsIG9uQ2hhbmdlKTtcbiAgICB9IGVsc2UgaWYgKCF2YWwgJiYgcHJldikge1xuICAgICAgY20ub2ZmKFwiY3Vyc29yQWN0aXZpdHlcIiwgb25DdXJzb3JBY3Rpdml0eSk7XG4gICAgICBjbS5vZmYoXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgICAgY2xlYXIoY20pO1xuICAgICAgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUgPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gb25DdXJzb3JBY3Rpdml0eShjbSkge1xuICAgIGlmIChjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24pXG4gICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7IHVwZGF0ZShjbSk7IH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2UoY20pIHtcbiAgICBpZiAoY20uc3RhdGUubWFya2VkU2VsZWN0aW9uICYmIGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbi5sZW5ndGgpXG4gICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7IGNsZWFyKGNtKTsgfSk7XG4gIH1cblxuICB2YXIgQ0hVTktfU0laRSA9IDg7XG4gIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvcztcbiAgdmFyIGNtcCA9IENvZGVNaXJyb3IuY21wUG9zO1xuXG4gIGZ1bmN0aW9uIGNvdmVyUmFuZ2UoY20sIGZyb20sIHRvLCBhZGRBdCkge1xuICAgIGlmIChjbXAoZnJvbSwgdG8pID09IDApIHJldHVybjtcbiAgICB2YXIgYXJyYXkgPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb247XG4gICAgdmFyIGNscyA9IGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlO1xuICAgIGZvciAodmFyIGxpbmUgPSBmcm9tLmxpbmU7Oykge1xuICAgICAgdmFyIHN0YXJ0ID0gbGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tIDogUG9zKGxpbmUsIDApO1xuICAgICAgdmFyIGVuZExpbmUgPSBsaW5lICsgQ0hVTktfU0laRSwgYXRFbmQgPSBlbmRMaW5lID49IHRvLmxpbmU7XG4gICAgICB2YXIgZW5kID0gYXRFbmQgPyB0byA6IFBvcyhlbmRMaW5lLCAwKTtcbiAgICAgIHZhciBtYXJrID0gY20ubWFya1RleHQoc3RhcnQsIGVuZCwge2NsYXNzTmFtZTogY2xzfSk7XG4gICAgICBpZiAoYWRkQXQgPT0gbnVsbCkgYXJyYXkucHVzaChtYXJrKTtcbiAgICAgIGVsc2UgYXJyYXkuc3BsaWNlKGFkZEF0KyssIDAsIG1hcmspO1xuICAgICAgaWYgKGF0RW5kKSBicmVhaztcbiAgICAgIGxpbmUgPSBlbmRMaW5lO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyKGNtKSB7XG4gICAgdmFyIGFycmF5ID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIGFycmF5W2ldLmNsZWFyKCk7XG4gICAgYXJyYXkubGVuZ3RoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KGNtKSB7XG4gICAgY2xlYXIoY20pO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgY292ZXJSYW5nZShjbSwgcmFuZ2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKGNtKSB7XG4gICAgaWYgKCFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm4gY2xlYXIoY20pO1xuICAgIGlmIChjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aCA+IDEpIHJldHVybiByZXNldChjbSk7XG5cbiAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcihcInN0YXJ0XCIpLCB0byA9IGNtLmdldEN1cnNvcihcImVuZFwiKTtcblxuICAgIHZhciBhcnJheSA9IGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCkgcmV0dXJuIGNvdmVyUmFuZ2UoY20sIGZyb20sIHRvKTtcblxuICAgIHZhciBjb3ZlclN0YXJ0ID0gYXJyYXlbMF0uZmluZCgpLCBjb3ZlckVuZCA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdLmZpbmQoKTtcbiAgICBpZiAoIWNvdmVyU3RhcnQgfHwgIWNvdmVyRW5kIHx8IHRvLmxpbmUgLSBmcm9tLmxpbmUgPD0gQ0hVTktfU0laRSB8fFxuICAgICAgICBjbXAoZnJvbSwgY292ZXJFbmQudG8pID49IDAgfHwgY21wKHRvLCBjb3ZlclN0YXJ0LmZyb20pIDw9IDApXG4gICAgICByZXR1cm4gcmVzZXQoY20pO1xuXG4gICAgd2hpbGUgKGNtcChmcm9tLCBjb3ZlclN0YXJ0LmZyb20pID4gMCkge1xuICAgICAgYXJyYXkuc2hpZnQoKS5jbGVhcigpO1xuICAgICAgY292ZXJTdGFydCA9IGFycmF5WzBdLmZpbmQoKTtcbiAgICB9XG4gICAgaWYgKGNtcChmcm9tLCBjb3ZlclN0YXJ0LmZyb20pIDwgMCkge1xuICAgICAgaWYgKGNvdmVyU3RhcnQudG8ubGluZSAtIGZyb20ubGluZSA8IENIVU5LX1NJWkUpIHtcbiAgICAgICAgYXJyYXkuc2hpZnQoKS5jbGVhcigpO1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBmcm9tLCBjb3ZlclN0YXJ0LnRvLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvdmVyUmFuZ2UoY20sIGZyb20sIGNvdmVyU3RhcnQuZnJvbSwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGNtcCh0bywgY292ZXJFbmQudG8pIDwgMCkge1xuICAgICAgYXJyYXkucG9wKCkuY2xlYXIoKTtcbiAgICAgIGNvdmVyRW5kID0gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0uZmluZCgpO1xuICAgIH1cbiAgICBpZiAoY21wKHRvLCBjb3ZlckVuZC50bykgPiAwKSB7XG4gICAgICBpZiAodG8ubGluZSAtIGNvdmVyRW5kLmZyb20ubGluZSA8IENIVU5LX1NJWkUpIHtcbiAgICAgICAgYXJyYXkucG9wKCkuY2xlYXIoKTtcbiAgICAgICAgY292ZXJSYW5nZShjbSwgY292ZXJFbmQuZnJvbSwgdG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY292ZXJSYW5nZShjbSwgY292ZXJFbmQudG8sIHRvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBNUdBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/addon/selection/mark-selection.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/lib/codemirror.js": -/*!****************************************************!*\ - !*** ../node_modules/codemirror/lib/codemirror.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n\n(function (global, factory) {\n ( false ? undefined : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : (undefined);\n})(this, function () {\n 'use strict'; // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n var android = /Android/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome.\n\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n\n if (presto_version) {\n presto_version = Number(presto_version[1]);\n }\n\n if (presto_version && presto_version >= 15) {\n presto = false;\n webkit = true;\n } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n\n\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || ie && ie_version >= 9;\n\n function classTest(cls) {\n return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\");\n }\n\n var rmClass = function rmClass(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count) {\n e.removeChild(e.firstChild);\n }\n\n return e;\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n\n if (className) {\n e.className = className;\n }\n\n if (style) {\n e.style.cssText = style;\n }\n\n if (typeof content == \"string\") {\n e.appendChild(document.createTextNode(content));\n } else if (content) {\n for (var i = 0; i < content.length; ++i) {\n e.appendChild(content[i]);\n }\n }\n\n return e;\n } // wrapper for elt, which removes the elt from the accessibility tree\n\n\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e;\n }\n\n var range;\n\n if (document.createRange) {\n range = function range(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r;\n };\n } else {\n range = function range(node, start, end) {\n var r = document.body.createTextRange();\n\n try {\n r.moveToElementText(node.parentNode);\n } catch (e) {\n return r;\n }\n\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r;\n };\n }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n {\n child = child.parentNode;\n }\n\n if (parent.contains) {\n return parent.contains(child);\n }\n\n do {\n if (child.nodeType == 11) {\n child = child.host;\n }\n\n if (child == parent) {\n return true;\n }\n } while (child = child.parentNode);\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n\n try {\n activeElement = document.activeElement;\n } catch (e) {\n activeElement = document.body || null;\n }\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n }\n\n function addClass(node, cls) {\n var current = node.className;\n\n if (!classTest(cls).test(current)) {\n node.className += (current ? \" \" : \"\") + cls;\n }\n }\n\n function joinClasses(a, b) {\n var as = a.split(\" \");\n\n for (var i = 0; i < as.length; i++) {\n if (as[i] && !classTest(as[i]).test(b)) {\n b += \" \" + as[i];\n }\n }\n\n return b;\n }\n\n var selectInput = function selectInput(node) {\n node.select();\n };\n\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n {\n selectInput = function selectInput(node) {\n node.selectionStart = 0;\n node.selectionEnd = node.value.length;\n };\n } else if (ie) // Suppress mysterious IE10 errors\n {\n selectInput = function selectInput(node) {\n try {\n node.select();\n } catch (_e) {}\n };\n }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) {\n target = {};\n }\n\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {\n target[prop] = obj[prop];\n }\n }\n\n return target;\n } // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n\n\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n\n if (end == -1) {\n end = string.length;\n }\n }\n\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n\n if (nextTab < 0 || nextTab >= end) {\n return n + (end - i);\n }\n\n n += nextTab - i;\n n += tabSize - n % tabSize;\n i = nextTab + 1;\n }\n }\n\n var Delayed = function Delayed() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n\n if (self.time <= +new Date()) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date());\n }\n };\n\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date() + ms;\n\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i) {\n if (array[i] == elt) {\n return i;\n }\n }\n\n return -1;\n } // Number of pixels added to scroller and sizer to hide scrollbar\n\n\n var scrollerGap = 30; // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n\n var Pass = {\n toString: function toString() {\n return \"CodeMirror.Pass\";\n }\n }; // Reused option objects for setSelection & friends\n\n var sel_dontScroll = {\n scroll: false\n },\n sel_mouse = {\n origin: \"*mouse\"\n },\n sel_move = {\n origin: \"+move\"\n }; // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n\n if (nextTab == -1) {\n nextTab = string.length;\n }\n\n var skipped = nextTab - pos;\n\n if (nextTab == string.length || col + skipped >= goal) {\n return pos + Math.min(skipped, goal - col);\n }\n\n col += nextTab - pos;\n col += tabSize - col % tabSize;\n pos = nextTab + 1;\n\n if (col >= goal) {\n return pos;\n }\n }\n }\n\n var spaceStrs = [\"\"];\n\n function spaceStr(n) {\n while (spaceStrs.length <= n) {\n spaceStrs.push(lst(spaceStrs) + \" \");\n }\n\n return spaceStrs[n];\n }\n\n function lst(arr) {\n return arr[arr.length - 1];\n }\n\n function map(array, f) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = f(array[i], i);\n }\n\n return out;\n }\n\n function insertSorted(array, value, score) {\n var pos = 0,\n priority = score(value);\n\n while (pos < array.length && score(array[pos]) <= priority) {\n pos++;\n }\n\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n\n if (props) {\n copyObj(props, inst);\n }\n\n return inst;\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n }\n\n function isWordChar(ch, helper) {\n if (!helper) {\n return isWordCharBasic(ch);\n }\n\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) {\n return true;\n }\n\n return helper.test(ch);\n }\n\n function isEmpty(obj) {\n for (var n in obj) {\n if (obj.hasOwnProperty(n) && obj[n]) {\n return false;\n }\n }\n\n return true;\n } // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n\n\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n\n function isExtendingChar(ch) {\n return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n } // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n\n\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) {\n pos += dir;\n }\n\n return pos;\n } // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n\n\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n\n for (;;) {\n if (from == to) {\n return from;\n }\n\n var midF = (from + to) / 2,\n mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n\n if (mid == from) {\n return pred(mid) ? from : to;\n }\n\n if (pred(mid)) {\n to = mid;\n } else {\n from = mid + dir;\n }\n }\n } // BIDI HELPERS\n\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) {\n return f(from, to, \"ltr\", 0);\n }\n\n var found = false;\n\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n\n if (!found) {\n f(from, to, \"ltr\");\n }\n }\n\n var bidiOther = null;\n\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n\n if (cur.from < ch && cur.to > ch) {\n return i;\n }\n\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n }\n\n return found != null ? found : bidiOther;\n } // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n\n\n var bidiOrdering = function () {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\"; // Character types for codepoints 0x600 to 0x6f9\n\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n\n function charType(code) {\n if (code <= 0xf7) {\n return lowTypes.charAt(code);\n } else if (0x590 <= code && code <= 0x5f4) {\n return \"R\";\n } else if (0x600 <= code && code <= 0x6f9) {\n return arabicTypes.charAt(code - 0x600);\n } else if (0x6ee <= code && code <= 0x8ac) {\n return \"r\";\n } else if (0x2000 <= code && code <= 0x200b) {\n return \"w\";\n } else if (code == 0x200c) {\n return \"b\";\n } else {\n return \"L\";\n }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/,\n isStrong = /[LRr]/,\n countsAsLeft = /[Lb1n]/,\n countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from;\n this.to = to;\n }\n\n return function (str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) {\n return false;\n }\n\n var len = str.length,\n types = [];\n\n for (var i = 0; i < len; ++i) {\n types.push(charType(str.charCodeAt(i)));\n } // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n\n\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n\n if (type == \"m\") {\n types[i$1] = prev;\n } else {\n prev = type;\n }\n } // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n\n\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n\n if (type$1 == \"1\" && cur == \"r\") {\n types[i$2] = \"n\";\n } else if (isStrong.test(type$1)) {\n cur = type$1;\n\n if (type$1 == \"r\") {\n types[i$2] = \"R\";\n }\n }\n } // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n\n\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3 + 1] == \"1\") {\n types[i$3] = \"1\";\n } else if (type$2 == \",\" && prev$1 == types[i$3 + 1] && (prev$1 == \"1\" || prev$1 == \"n\")) {\n types[i$3] = prev$1;\n }\n\n prev$1 = type$2;\n } // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n\n\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n\n if (type$3 == \",\") {\n types[i$4] = \"N\";\n } else if (type$3 == \"%\") {\n var end = void 0;\n\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n\n var replace = i$4 && types[i$4 - 1] == \"!\" || end < len && types[end] == \"1\" ? \"1\" : \"N\";\n\n for (var j = i$4; j < end; ++j) {\n types[j] = replace;\n }\n\n i$4 = end - 1;\n }\n } // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n\n\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n\n if (cur$1 == \"L\" && type$4 == \"1\") {\n types[i$5] = \"L\";\n } else if (isStrong.test(type$4)) {\n cur$1 = type$4;\n }\n } // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n\n\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = void 0;\n\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n\n var before = (i$6 ? types[i$6 - 1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? before ? \"L\" : \"R\" : outerType;\n\n for (var j$1 = i$6; j$1 < end$1; ++j$1) {\n types[j$1] = replace$1;\n }\n\n i$6 = end$1 - 1;\n }\n } // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n\n\n var order = [],\n m;\n\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7,\n at = order.length,\n isRTL = direction == \"rtl\" ? 1 : 0;\n\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) {\n order.splice(at, 0, new BidiSpan(1, pos, j$2));\n at += isRTL;\n }\n\n var nstart = j$2;\n\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else {\n ++j$2;\n }\n }\n\n if (pos < i$7) {\n order.splice(at, 0, new BidiSpan(1, pos, i$7));\n }\n }\n }\n\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order;\n };\n }(); // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n\n\n function getOrder(line, direction) {\n var order = line.order;\n\n if (order == null) {\n order = line.order = bidiOrdering(line.text, direction);\n }\n\n return order;\n } // EVENT HANDLING\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n\n var noHandlers = [];\n\n var on = function on(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers;\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers,\n arr = map && map[type];\n\n if (arr) {\n var index = indexOf(arr, f);\n\n if (index > -1) {\n map[type] = arr.slice(0, index).concat(arr.slice(index + 1));\n }\n }\n }\n }\n\n function signal(emitter, type\n /*, values...*/\n ) {\n var handlers = getHandlers(emitter, type);\n\n if (!handlers.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2);\n\n for (var i = 0; i < handlers.length; ++i) {\n handlers[i].apply(null, args);\n }\n } // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n\n\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\") {\n e = {\n type: e,\n preventDefault: function preventDefault() {\n this.defaultPrevented = true;\n }\n };\n }\n\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n\n if (!arr) {\n return;\n }\n\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n\n for (var i = 0; i < arr.length; ++i) {\n if (indexOf(set, arr[i]) == -1) {\n set.push(arr[i]);\n }\n }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0;\n } // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n\n\n function eventMixin(ctor) {\n ctor.prototype.on = function (type, f) {\n on(this, type, f);\n };\n\n ctor.prototype.off = function (type, f) {\n off(this, type, f);\n };\n } // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n\n function e_preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n\n function e_stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else {\n e.cancelBubble = true;\n }\n }\n\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n\n function e_stop(e) {\n e_preventDefault(e);\n e_stopPropagation(e);\n }\n\n function e_target(e) {\n return e.target || e.srcElement;\n }\n\n function e_button(e) {\n var b = e.which;\n\n if (b == null) {\n if (e.button & 1) {\n b = 1;\n } else if (e.button & 2) {\n b = 3;\n } else if (e.button & 4) {\n b = 2;\n }\n }\n\n if (mac && e.ctrlKey && b == 1) {\n b = 3;\n }\n\n return b;\n } // Detect drag-and-drop\n\n\n var dragAndDrop = function () {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) {\n return false;\n }\n\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\n }();\n\n var zwspSupported;\n\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200B\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n\n if (measure.firstChild.offsetHeight != 0) {\n zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n }\n }\n\n var node = zwspSupported ? elt(\"span\", \"\\u200B\") : elt(\"span\", \"\\xA0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node;\n } // Feature-detect IE's crummy client rect reporting for bidi text\n\n\n var badBidiRects;\n\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) {\n return badBidiRects;\n }\n\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062EA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n\n if (!r0 || r0.left == r0.right) {\n return false;\n } // Safari returns null in some cases (#2780)\n\n\n return badBidiRects = r1.right - r0.right < 3;\n } // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n\n\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0,\n result = [],\n l = string.length;\n\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n\n if (nl == -1) {\n nl = string.length;\n }\n\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n\n return result;\n } : function (string) {\n return string.split(/\\r\\n?|\\n/);\n };\n var hasSelection = window.getSelection ? function (te) {\n try {\n return te.selectionStart != te.selectionEnd;\n } catch (e) {\n return false;\n }\n } : function (te) {\n var range;\n\n try {\n range = te.ownerDocument.selection.createRange();\n } catch (e) {}\n\n if (!range || range.parentElement() != te) {\n return false;\n }\n\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n\n var hasCopyEvent = function () {\n var e = elt(\"div\");\n\n if (\"oncopy\" in e) {\n return true;\n }\n\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n }();\n\n var badZoomedRects = null;\n\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) {\n return badZoomedRects;\n }\n\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n } // Known modes, by name and by MIME\n\n\n var modes = {},\n mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n function defineMode(name, mode) {\n if (arguments.length > 2) {\n mode.dependencies = Array.prototype.slice.call(arguments, 2);\n }\n\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n } // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n\n\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n\n if (typeof found == \"string\") {\n found = {\n name: found\n };\n }\n\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\");\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\");\n }\n\n if (typeof spec == \"string\") {\n return {\n name: spec\n };\n } else {\n return spec || {\n name: \"null\"\n };\n }\n } // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n\n\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n\n if (!mfactory) {\n return getMode(options, \"text/plain\");\n }\n\n var modeObj = mfactory(options, spec);\n\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) {\n continue;\n }\n\n if (modeObj.hasOwnProperty(prop)) {\n modeObj[\"_\" + prop] = modeObj[prop];\n }\n\n modeObj[prop] = exts[prop];\n }\n }\n\n modeObj.name = spec.name;\n\n if (spec.helperType) {\n modeObj.helperType = spec.helperType;\n }\n\n if (spec.modeProps) {\n for (var prop$1 in spec.modeProps) {\n modeObj[prop$1] = spec.modeProps[prop$1];\n }\n }\n\n return modeObj;\n } // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n\n\n var modeExtensions = {};\n\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {};\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) {\n return state;\n }\n\n if (mode.copyState) {\n return mode.copyState(state);\n }\n\n var nstate = {};\n\n for (var n in state) {\n var val = state[n];\n\n if (val instanceof Array) {\n val = val.concat([]);\n }\n\n nstate[n] = val;\n }\n\n return nstate;\n } // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n\n\n function innerMode(mode, state) {\n var info;\n\n while (mode.innerMode) {\n info = mode.innerMode(state);\n\n if (!info || info.mode == mode) {\n break;\n }\n\n state = info.state;\n mode = info.mode;\n }\n\n return info || {\n mode: mode,\n state: state\n };\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true;\n } // STRING STREAM\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n\n var StringStream = function StringStream(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {\n return this.pos >= this.string.length;\n };\n\n StringStream.prototype.sol = function () {\n return this.pos == this.lineStart;\n };\n\n StringStream.prototype.peek = function () {\n return this.string.charAt(this.pos) || undefined;\n };\n\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length) {\n return this.string.charAt(this.pos++);\n }\n };\n\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n\n if (typeof match == \"string\") {\n ok = ch == match;\n } else {\n ok = ch && (match.test ? match.test(ch) : match(ch));\n }\n\n if (ok) {\n ++this.pos;\n return ch;\n }\n };\n\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n\n while (this.eat(match)) {}\n\n return this.pos > start;\n };\n\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) {\n ++this.pos;\n }\n\n return this.pos > start;\n };\n\n StringStream.prototype.skipToEnd = function () {\n this.pos = this.string.length;\n };\n\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n\n if (found > -1) {\n this.pos = found;\n return true;\n }\n };\n\n StringStream.prototype.backUp = function (n) {\n this.pos -= n;\n };\n\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function cased(str) {\n return caseInsensitive ? str.toLowerCase() : str;\n };\n\n var substr = this.string.substr(this.pos, pattern.length);\n\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) {\n this.pos += pattern.length;\n }\n\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n\n if (match && match.index > 0) {\n return null;\n }\n\n if (match && consume !== false) {\n this.pos += match[0].length;\n }\n\n return match;\n }\n };\n\n StringStream.prototype.current = function () {\n return this.string.slice(this.start, this.pos);\n };\n\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n\n try {\n return inner();\n } finally {\n this.lineStart -= n;\n }\n };\n\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n);\n };\n\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos);\n }; // Find the line object corresponding to the given line number.\n\n\n function getLine(doc, n) {\n n -= doc.first;\n\n if (n < 0 || n >= doc.size) {\n throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n }\n\n var chunk = doc;\n\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i],\n sz = child.chunkSize();\n\n if (n < sz) {\n chunk = child;\n break;\n }\n\n n -= sz;\n }\n }\n\n return chunk.lines[n];\n } // Get the part of a document between two positions, as an array of\n // strings.\n\n\n function getBetween(doc, start, end) {\n var out = [],\n n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n\n if (n == end.line) {\n text = text.slice(0, end.ch);\n }\n\n if (n == start.line) {\n text = text.slice(start.ch);\n }\n\n out.push(text);\n ++n;\n });\n return out;\n } // Get the lines between from and to, as array of strings.\n\n\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) {\n out.push(line.text);\n }); // iter aborts when callback returns truthy value\n\n return out;\n } // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n\n\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n\n if (diff) {\n for (var n = line; n; n = n.parent) {\n n.height += diff;\n }\n }\n } // Given a line object, find its line number by walking up through\n // its parent links.\n\n\n function lineNo(line) {\n if (line.parent == null) {\n return null;\n }\n\n var cur = line.parent,\n no = indexOf(cur.lines, line);\n\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) {\n break;\n }\n\n no += chunk.children[i].chunkSize();\n }\n }\n\n return no + cur.first;\n } // Find the line at the given vertical position, using the height\n // information in the document tree.\n\n\n function _lineAtHeight(chunk, h) {\n var n = chunk.first;\n\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1],\n ch = child.height;\n\n if (h < ch) {\n chunk = child;\n continue outer;\n }\n\n h -= ch;\n n += child.chunkSize();\n }\n\n return n;\n } while (!chunk.lines);\n\n var i = 0;\n\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i],\n lh = line.height;\n\n if (h < lh) {\n break;\n }\n\n h -= lh;\n }\n\n return n + i;\n }\n\n function isLine(doc, l) {\n return l >= doc.first && l < doc.first + doc.size;\n }\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber));\n } // A Pos instance represents a position within the text.\n\n\n function Pos(line, ch, sticky) {\n if (sticky === void 0) sticky = null;\n\n if (!(this instanceof Pos)) {\n return new Pos(line, ch, sticky);\n }\n\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n } // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n\n\n function cmp(a, b) {\n return a.line - b.line || a.ch - b.ch;\n }\n\n function equalCursorPos(a, b) {\n return a.sticky == b.sticky && cmp(a, b) == 0;\n }\n\n function copyPos(x) {\n return Pos(x.line, x.ch);\n }\n\n function maxPos(a, b) {\n return cmp(a, b) < 0 ? b : a;\n }\n\n function minPos(a, b) {\n return cmp(a, b) < 0 ? a : b;\n } // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n\n\n function clipLine(doc, n) {\n return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));\n }\n\n function _clipPos(doc, pos) {\n if (pos.line < doc.first) {\n return Pos(doc.first, 0);\n }\n\n var last = doc.first + doc.size - 1;\n\n if (pos.line > last) {\n return Pos(last, getLine(doc, last).text.length);\n }\n\n return clipToLen(pos, getLine(doc, pos.line).text.length);\n }\n\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n\n if (ch == null || ch > linelen) {\n return Pos(pos.line, linelen);\n } else if (ch < 0) {\n return Pos(pos.line, 0);\n } else {\n return pos;\n }\n }\n\n function clipPosArray(doc, array) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = _clipPos(doc, array[i]);\n }\n\n return out;\n }\n\n var SavedContext = function SavedContext(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function Context(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n\n if (line != null && n > this.maxLookAhead) {\n this.maxLookAhead = n;\n }\n\n return line;\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) {\n return null;\n }\n\n while (this.baseTokens[this.baseTokenPos] <= n) {\n this.baseTokenPos += 2;\n }\n\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {\n type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n\n };\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n\n if (this.maxLookAhead > 0) {\n this.maxLookAhead--;\n }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext) {\n return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead);\n } else {\n return new Context(doc, copyState(doc.mode, saved), line);\n }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state;\n }; // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n\n\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen],\n lineClasses = {}; // Compute the base array of styles\n\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) {\n return st.push(end, style);\n }, lineClasses, forceToEnd);\n var state = context.state; // Run overlays, adjust style array.\n\n var loop = function loop(o) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o],\n i = 1,\n at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i; // Ensure there's a token end at the current position, and that i points at it\n\n while (at < end) {\n var i_end = st[i];\n\n if (i_end > end) {\n st.splice(i, 1, end, st[i + 1], i_end);\n }\n\n i += 2;\n at = Math.min(end, i_end);\n }\n\n if (!style) {\n return;\n }\n\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start + 1];\n st[start + 1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) {\n loop(o);\n }\n\n return {\n styles: st,\n classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null\n };\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n\n if (result.classes) {\n line.styleClasses = result.classes;\n } else if (line.styleClasses) {\n line.styleClasses = null;\n }\n\n if (updateFrontier === cm.doc.highlightFrontier) {\n cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);\n }\n }\n\n return line.styles;\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc,\n display = cm.display;\n\n if (!doc.mode.startState) {\n return new Context(doc, true, n);\n }\n\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n\n if (precise) {\n doc.modeFrontier = context.line;\n }\n\n return context;\n } // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n\n\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n\n if (text == \"\") {\n callBlankLine(mode, context.state);\n }\n\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) {\n return mode.blankLine(state);\n }\n\n if (!mode.innerMode) {\n return;\n }\n\n var inner = innerMode(mode, state);\n\n if (inner.mode.blankLine) {\n return inner.mode.blankLine(inner.state);\n }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) {\n inner[0] = innerMode(mode, state).mode;\n }\n\n var style = mode.token(stream, state);\n\n if (stream.pos > stream.start) {\n return style;\n }\n }\n\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n\n var Token = function Token(stream, type, state) {\n this.start = stream.start;\n this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n }; // Utility for getTokenAt and getLineTokens\n\n\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc,\n mode = doc.mode,\n style;\n pos = _clipPos(doc, pos);\n var line = getLine(doc, pos.line),\n context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context),\n tokens;\n\n if (asArray) {\n tokens = [];\n }\n\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n\n if (asArray) {\n tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));\n }\n }\n\n return asArray ? tokens : new Token(stream, style, context.state);\n }\n\n function extractLineClasses(type, output) {\n if (type) {\n for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n\n if (!lineClass) {\n break;\n }\n\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n\n if (output[prop] == null) {\n output[prop] = lineClass[2];\n } else if (!new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\").test(output[prop])) {\n output[prop] += \" \" + lineClass[2];\n }\n }\n }\n\n return type;\n } // Run the given mode's parser over a line, calling f for each token.\n\n\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n\n if (flattenSpans == null) {\n flattenSpans = cm.options.flattenSpans;\n }\n\n var curStart = 0,\n curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context),\n style;\n var inner = cm.options.addModeClass && [null];\n\n if (text == \"\") {\n extractLineClasses(callBlankLine(mode, context.state), lineClasses);\n }\n\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n\n if (forceToEnd) {\n processLine(cm, text, context, stream.pos);\n }\n\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n\n if (inner) {\n var mName = inner[0].name;\n\n if (mName) {\n style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n }\n\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n\n curStyle = style;\n }\n\n stream.start = stream.pos;\n }\n\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n } // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n\n\n function findStartLine(cm, n, precise) {\n var minindent,\n minline,\n doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) {\n return doc.first;\n }\n\n var line = getLine(doc, search - 1),\n after = line.stateAfter;\n\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {\n return search;\n }\n\n var indented = countColumn(line.text, null, cm.options.tabSize);\n\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n\n return minline;\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n\n if (doc.highlightFrontier < n - 10) {\n return;\n }\n\n var start = doc.first;\n\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter; // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break;\n }\n }\n\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n } // Optimize some code when these features are not used.\n\n\n var sawReadOnlySpans = false,\n sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n } // TEXTMARKER SPANS\n\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from;\n this.to = to;\n } // Search an array of spans for a span matching the given marker.\n\n\n function getMarkedSpanFor(spans, marker) {\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.marker == marker) {\n return span;\n }\n }\n }\n } // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n\n\n function removeMarkedSpan(spans, span) {\n var r;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i] != span) {\n (r || (r = [])).push(spans[i]);\n }\n }\n\n return r;\n } // Add a span to a line.\n\n\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n } // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n\n\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n }\n\n return nw;\n }\n\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));\n }\n }\n }\n\n return nw;\n } // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n\n\n function stretchSpansOverChange(doc, change) {\n if (change.full) {\n return null;\n }\n\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n\n if (!oldFirst && !oldLast) {\n return null;\n }\n\n var startCh = change.from.ch,\n endCh = change.to.ch,\n isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides\n\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends\n\n var sameLine = change.text.length == 1,\n offset = lst(change.text).length + (sameLine ? startCh : 0);\n\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n\n if (!found) {\n span.to = startCh;\n } else if (sameLine) {\n span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n }\n\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n\n if (span$1.to != null) {\n span$1.to += offset;\n }\n\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n\n if (!found$1) {\n span$1.from = offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n } else {\n span$1.from += offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n }\n } // Make sure we didn't create any zero-length spans\n\n\n if (first) {\n first = clearEmptySpans(first);\n }\n\n if (last && last != first) {\n last = clearEmptySpans(last);\n }\n\n var newMarkers = [first];\n\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2,\n gapMarkers;\n\n if (gap > 0 && first) {\n for (var i$2 = 0; i$2 < first.length; ++i$2) {\n if (first[i$2].to == null) {\n (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null));\n }\n }\n }\n\n for (var i$3 = 0; i$3 < gap; ++i$3) {\n newMarkers.push(gapMarkers);\n }\n\n newMarkers.push(last);\n }\n\n return newMarkers;\n } // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n\n\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) {\n spans.splice(i--, 1);\n }\n }\n\n if (!spans.length) {\n return null;\n }\n\n return spans;\n } // Used to 'clip' out readOnly ranges when making a change.\n\n\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) {\n (markers || (markers = [])).push(mark);\n }\n }\n }\n });\n\n if (!markers) {\n return null;\n }\n\n var parts = [{\n from: from,\n to: to\n }];\n\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i],\n m = mk.find(0);\n\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) {\n continue;\n }\n\n var newParts = [j, 1],\n dfrom = cmp(p.from, m.from),\n dto = cmp(p.to, m.to);\n\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {\n newParts.push({\n from: p.from,\n to: m.from\n });\n }\n\n if (dto > 0 || !mk.inclusiveRight && !dto) {\n newParts.push({\n from: m.to,\n to: p.to\n });\n }\n\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n\n return parts;\n } // Connect or disconnect spans from a line.\n\n\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.detachLine(line);\n }\n\n line.markedSpans = null;\n }\n\n function attachMarkedSpans(line, spans) {\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.attachLine(line);\n }\n\n line.markedSpans = spans;\n } // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n\n\n function extraLeft(marker) {\n return marker.inclusiveLeft ? -1 : 0;\n }\n\n function extraRight(marker) {\n return marker.inclusiveRight ? 1 : 0;\n } // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n\n\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n\n if (lenDiff != 0) {\n return lenDiff;\n }\n\n var aPos = a.find(),\n bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n\n if (fromCmp) {\n return -fromCmp;\n }\n\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n\n if (toCmp) {\n return toCmp;\n }\n\n return b.id - a.id;\n } // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n\n\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n }\n\n function collapsedSpanAtStart(line) {\n return collapsedSpanAtSide(line, true);\n }\n\n function collapsedSpanAtEnd(line) {\n return collapsedSpanAtSide(line, false);\n }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n } // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n\n\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {\n continue;\n }\n\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {\n return true;\n }\n }\n }\n } // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n\n\n function visualLine(line) {\n var merged;\n\n while (merged = collapsedSpanAtStart(line)) {\n line = merged.find(-1, true).line;\n }\n\n return line;\n }\n\n function visualLineEnd(line) {\n var merged;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return line;\n } // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n\n\n function visualLineContinued(line) {\n var merged, lines;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n (lines || (lines = [])).push(line);\n }\n\n return lines;\n } // Get the line number of the start of the visual line that the\n // given line number is part of.\n\n\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN),\n vis = visualLine(line);\n\n if (line == vis) {\n return lineN;\n }\n\n return lineNo(vis);\n } // Get the line number of the start of the next visual line after\n // the given line.\n\n\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) {\n return lineN;\n }\n\n var line = getLine(doc, lineN),\n merged;\n\n if (!lineIsHidden(doc, line)) {\n return lineN;\n }\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return lineNo(line) + 1;\n } // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n\n\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n if (sp.from == null) {\n return true;\n }\n\n if (sp.marker.widgetNode) {\n continue;\n }\n\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n }\n\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n\n if (span.marker.inclusiveRight && span.to == line.text.length) {\n return true;\n }\n\n for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n } // Find the height above the given line.\n\n\n function _heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n var h = 0,\n chunk = lineObj.parent;\n\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n\n if (line == lineObj) {\n break;\n } else {\n h += line.height;\n }\n }\n\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n\n if (cur == chunk) {\n break;\n } else {\n h += cur.height;\n }\n }\n }\n\n return h;\n } // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n\n\n function lineLength(line) {\n if (line.height == 0) {\n return 0;\n }\n\n var len = line.text.length,\n merged,\n cur = line;\n\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n\n cur = line;\n\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n\n return len;\n } // Find the longest line in the document.\n\n\n function findMaxLine(cm) {\n var d = cm.display,\n doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n } // LINE DATA STRUCTURE\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n\n\n var Line = function Line(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () {\n return lineNo(this);\n };\n\n eventMixin(Line); // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n\n if (line.order != null) {\n line.order = null;\n }\n\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n } // Detach a line from the document tree and its markers.\n\n\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n } // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n\n\n var styleToClassCache = {},\n styleToClassCacheWithMode = {};\n\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) {\n return null;\n }\n\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] || (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n } // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n\n\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {\n pre: eltP(\"pre\", [content], \"CodeMirror-line\"),\n content: content,\n col: 0,\n pos: 0,\n cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")\n };\n lineView.measure = {}; // Iterate over the logical lines that make up this visual line.\n\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line,\n order = void 0;\n builder.pos = 0;\n builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) {\n builder.addToken = buildTokenBadBidi(builder.addToken, order);\n }\n\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n\n if (line.styleClasses) {\n if (line.styleClasses.bgClass) {\n builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n }\n\n if (line.styleClasses.textClass) {\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\n } // Ensure at least a single node is present, for measuring.\n\n\n if (builder.map.length == 0) {\n builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n } // Store the map and a cache object for the current logical line\n\n\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n } // See issue #2901\n\n\n if (webkit) {\n var last = builder.content.lastChild;\n\n if (/\\bcm-tab\\b/.test(last.className) || last.querySelector && last.querySelector(\".cm-tab\")) {\n builder.content.className = \"cm-tab-wrap-hack\";\n }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n\n if (builder.pre.className) {\n builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n }\n\n return builder;\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token;\n } // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n\n\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) {\n return;\n }\n\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars,\n mustWrap = false;\n var content;\n\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n\n if (ie && ie_version < 9) {\n mustWrap = true;\n }\n\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt]));\n } else {\n content.appendChild(txt);\n }\n\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n\n if (!m) {\n break;\n }\n\n pos += skipped + 1;\n var txt$1 = void 0;\n\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize,\n tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240D\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt$1]));\n } else {\n content.appendChild(txt$1);\n }\n\n builder.col += 1;\n }\n\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n\n if (startStyle) {\n fullStyle += startStyle;\n }\n\n if (endStyle) {\n fullStyle += endStyle;\n }\n\n var token = elt(\"span\", [content], fullStyle, css);\n\n if (attributes) {\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\") {\n token.setAttribute(attr, attributes[attr]);\n }\n }\n }\n\n return builder.content.appendChild(token);\n }\n\n builder.content.appendChild(content);\n } // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n\n\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) {\n return text;\n }\n\n var spaceBefore = trailingBefore,\n result = \"\";\n\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) {\n ch = \"\\xA0\";\n }\n\n result += ch;\n spaceBefore = ch == \" \";\n }\n\n return result;\n } // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n\n\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos,\n end = start + text.length;\n\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = void 0;\n\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n\n if (part.to > start && part.from <= start) {\n break;\n }\n }\n\n if (part.to >= end) {\n return inner(builder, text, style, startStyle, endStyle, css, attributes);\n }\n\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n }\n\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget) {\n widget = builder.content.appendChild(document.createElement(\"span\"));\n }\n\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n\n builder.pos += size;\n builder.trailingSpace = false;\n } // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n\n\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans,\n allText = line.text,\n at = 0;\n\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1 += 2) {\n builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options));\n }\n\n return;\n }\n\n var len = allText.length,\n pos = 0,\n i = 1,\n text = \"\",\n style,\n css;\n var nextChange = 0,\n spanStyle,\n spanEndStyle,\n spanStartStyle,\n collapsed,\n attributes;\n\n for (;;) {\n if (nextChange == pos) {\n // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null;\n nextChange = Infinity;\n var foundBookmarks = [],\n endStyles = void 0;\n\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j],\n m = sp.marker;\n\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n\n if (m.className) {\n spanStyle += \" \" + m.className;\n }\n\n if (m.css) {\n css = (css ? css + \";\" : \"\") + m.css;\n }\n\n if (m.startStyle && sp.from == pos) {\n spanStartStyle += \" \" + m.startStyle;\n }\n\n if (m.endStyle && sp.to == nextChange) {\n (endStyles || (endStyles = [])).push(m.endStyle, sp.to);\n } // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n\n\n if (m.title) {\n (attributes || (attributes = {})).title = m.title;\n }\n\n if (m.attributes) {\n for (var attr in m.attributes) {\n (attributes || (attributes = {}))[attr] = m.attributes[attr];\n }\n }\n\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {\n collapsed = sp;\n }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n\n if (endStyles) {\n for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {\n if (endStyles[j$1 + 1] == nextChange) {\n spanEndStyle += \" \" + endStyles[j$1];\n }\n }\n }\n\n if (!collapsed || collapsed.from == pos) {\n for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {\n buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);\n }\n }\n\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);\n\n if (collapsed.to == null) {\n return;\n }\n\n if (collapsed.to == pos) {\n collapsed = false;\n }\n }\n }\n\n if (pos >= len) {\n break;\n }\n\n var upto = Math.min(len, nextChange);\n\n while (true) {\n if (text) {\n var end = pos + text.length;\n\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n\n if (end >= upto) {\n text = text.slice(upto - pos);\n pos = upto;\n break;\n }\n\n pos = end;\n spanStartStyle = \"\";\n }\n\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n } // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n\n\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line; // Continuing lines, if any\n\n this.rest = visualLineContinued(line); // Number of logical lines in this visual line\n\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n } // Create a range of LineView objects for the given lines.\n\n\n function buildViewArray(cm, from, to) {\n var array = [],\n nextPos;\n\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n\n return array;\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks,\n i = 0;\n\n do {\n for (; i < callbacks.length; i++) {\n callbacks[i].call(null);\n }\n\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n\n if (op.cursorActivityHandlers) {\n while (op.cursorActivityCalled < op.cursorActivityHandlers.length) {\n op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);\n }\n }\n }\n } while (i < callbacks.length);\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n\n if (!group) {\n return;\n }\n\n try {\n fireCallbacksForOps(group);\n } finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n\n function signalLater(emitter, type\n /*, values...*/\n ) {\n var arr = getHandlers(emitter, type);\n\n if (!arr.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2),\n list;\n\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n\n var loop = function loop(i) {\n list.push(function () {\n return arr[i].apply(null, args);\n });\n };\n\n for (var i = 0; i < arr.length; ++i) {\n loop(i);\n }\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n\n for (var i = 0; i < delayed.length; ++i) {\n delayed[i]();\n }\n } // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n\n\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n\n if (type == \"text\") {\n updateLineText(cm, lineView);\n } else if (type == \"gutter\") {\n updateLineGutter(cm, lineView, lineN, dims);\n } else if (type == \"class\") {\n updateLineClasses(cm, lineView);\n } else if (type == \"widget\") {\n updateLineWidgets(cm, lineView, dims);\n }\n }\n\n lineView.changes = null;\n } // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n\n\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n\n if (lineView.text.parentNode) {\n lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n }\n\n lineView.node.appendChild(lineView.text);\n\n if (ie && ie_version < 8) {\n lineView.node.style.zIndex = 2;\n }\n }\n\n return lineView.node;\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n\n if (cls) {\n cls += \" CodeMirror-linebackground\";\n }\n\n if (lineView.background) {\n if (cls) {\n lineView.background.className = cls;\n } else {\n lineView.background.parentNode.removeChild(lineView.background);\n lineView.background = null;\n }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n } // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n\n\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built;\n }\n\n return buildLineContent(cm, lineView);\n } // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n\n\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n\n if (lineView.text == lineView.node) {\n lineView.node = built.pre;\n }\n\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n\n if (lineView.line.wrapClass) {\n ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n } else if (lineView.node != lineView.text) {\n lineView.node.className = \"\";\n }\n\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass, \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + dims.gutterTotalWidth + \"px\");\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n\n var markers = lineView.line.gutterMarkers;\n\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n\n if (lineView.line.gutterClass) {\n gutterWrap.className += \" \" + lineView.line.gutterClass;\n }\n\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"])) {\n lineView.lineNumber = gutterWrap.appendChild(elt(\"div\", lineNumberFor(cm.options, lineN), \"CodeMirror-linenumber CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \" + cm.display.lineNumInnerWidth + \"px\"));\n }\n\n if (markers) {\n for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className,\n found = markers.hasOwnProperty(id) && markers[id];\n\n if (found) {\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) {\n lineView.alignable = null;\n }\n\n var isWidget = classTest(\"CodeMirror-linewidget\");\n\n for (var node = lineView.node.firstChild, next = void 0; node; node = next) {\n next = node.nextSibling;\n\n if (isWidget.test(node.className)) {\n lineView.node.removeChild(node);\n }\n }\n\n insertLineWidgets(cm, lineView, dims);\n } // Build a line's DOM representation from scratch\n\n\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n\n if (built.bgClass) {\n lineView.bgClass = built.bgClass;\n }\n\n if (built.textClass) {\n lineView.textClass = built.textClass;\n }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node;\n } // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n\n\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n }\n }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) {\n return;\n }\n\n var wrap = ensureLineWrapped(lineView);\n\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i],\n node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n\n if (!widget.handleMouseEvents) {\n node.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n\n if (allowAbove && widget.above) {\n wrap.insertBefore(node, lineView.gutter || lineView.text);\n } else {\n wrap.appendChild(node);\n }\n\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n\n node.style.width = width + \"px\";\n }\n\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n\n if (!widget.noHScroll) {\n node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) {\n return widget.height;\n }\n\n var cm = widget.doc.cm;\n\n if (!cm) {\n return 0;\n }\n\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n\n if (widget.coverGutter) {\n parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\";\n }\n\n if (widget.noHScroll) {\n parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n }\n\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n\n return widget.height = widget.node.parentNode.offsetHeight;\n } // Return true when the given mouse event happened in a widget\n\n\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\" || n.parentNode == display.sizer && n != display.mover) {\n return true;\n }\n }\n } // POSITION MEASUREMENT\n\n\n function paddingTop(display) {\n return display.lineSpace.offsetTop;\n }\n\n function paddingVert(display) {\n return display.mover.offsetHeight - display.lineSpace.offsetHeight;\n }\n\n function paddingH(display) {\n if (display.cachedPaddingH) {\n return display.cachedPaddingH;\n }\n\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight)\n };\n\n if (!isNaN(data.left) && !isNaN(data.right)) {\n display.cachedPaddingH = data;\n }\n\n return data;\n }\n\n function scrollGap(cm) {\n return scrollerGap - cm.display.nativeBarWidth;\n }\n\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n }\n\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n } // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n\n\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i],\n next = rects[i + 1];\n\n if (Math.abs(cur.bottom - next.bottom) > 2) {\n heights.push((cur.bottom + next.top) / 2 - rect.top);\n }\n }\n }\n\n heights.push(rect.bottom - rect.top);\n }\n } // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n\n\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line) {\n return {\n map: lineView.measure.map,\n cache: lineView.measure.cache\n };\n }\n\n for (var i = 0; i < lineView.rest.length; i++) {\n if (lineView.rest[i] == line) {\n return {\n map: lineView.measure.maps[i],\n cache: lineView.measure.caches[i]\n };\n }\n }\n\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {\n if (lineNo(lineView.rest[i$1]) > lineN) {\n return {\n map: lineView.measure.maps[i$1],\n cache: lineView.measure.caches[i$1],\n before: true\n };\n }\n }\n } // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n\n\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view;\n } // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n\n\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n } // Find a line view that corresponds to the given line number.\n\n\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) {\n return cm.display.view[findViewIndex(cm, lineN)];\n }\n\n var ext = cm.display.externalMeasured;\n\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {\n return ext;\n }\n } // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n\n\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n\n if (!view) {\n view = updateExternalMeasurement(cm, line);\n }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line,\n view: view,\n rect: null,\n map: info.map,\n cache: info.cache,\n before: info.before,\n hasHeights: false\n };\n } // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n\n\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) {\n ch = -1;\n }\n\n var key = ch + (bias || \"\"),\n found;\n\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect) {\n prepared.rect = prepared.view.text.getBoundingClientRect();\n }\n\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n\n found = measureCharInner(cm, prepared, ch, bias);\n\n if (!found.bogus) {\n prepared.cache[key] = found;\n }\n }\n\n return {\n left: found.left,\n right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom\n };\n }\n\n var nullRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd; // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n\n if (ch < mStart) {\n start = 0;\n end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n\n if (ch >= mEnd) {\n collapse = \"right\";\n }\n }\n\n if (start != null) {\n node = map[i + 2];\n\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\")) {\n collapse = bias;\n }\n\n if (bias == \"left\" && start == 0) {\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n }\n\n if (bias == \"right\" && start == mEnd - mStart) {\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n }\n\n break;\n }\n }\n\n return {\n node: node,\n start: start,\n end: end,\n collapse: collapse,\n coverStart: mStart,\n coverEnd: mEnd\n };\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n\n if (bias == \"left\") {\n for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) {\n break;\n }\n }\n } else {\n for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) {\n break;\n }\n }\n }\n\n return rect;\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node,\n start = place.start,\n end = place.end,\n collapse = place.collapse;\n var rect;\n\n if (node.nodeType == 3) {\n // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) {\n // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {\n --start;\n }\n\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {\n ++end;\n }\n\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else {\n rect = getUsefulRect(range(node, start, end).getClientRects(), bias);\n }\n\n if (rect.left || rect.right || start == 0) {\n break;\n }\n\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n\n if (ie && ie_version < 11) {\n rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n }\n } else {\n // If it is a widget, simply get the box for the whole widget.\n if (start > 0) {\n collapse = bias = \"right\";\n }\n\n var rects;\n\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) {\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n } else {\n rect = node.getBoundingClientRect();\n }\n }\n\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n\n if (rSpan) {\n rect = {\n left: rSpan.left,\n right: rSpan.left + charWidth(cm.display),\n top: rSpan.top,\n bottom: rSpan.bottom\n };\n } else {\n rect = nullRect;\n }\n }\n\n var rtop = rect.top - prepared.rect.top,\n rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n\n for (; i < heights.length - 1; i++) {\n if (mid < heights[i]) {\n break;\n }\n }\n\n var top = i ? heights[i - 1] : 0,\n bot = heights[i];\n var result = {\n left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top,\n bottom: bot\n };\n\n if (!rect.left && !rect.right) {\n result.bogus = true;\n }\n\n if (!cm.options.singleCursorHeightPerLine) {\n result.rtop = rtop;\n result.rbottom = rbot;\n }\n\n return result;\n } // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n\n\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {\n return rect;\n }\n\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {\n left: rect.left * scaleX,\n right: rect.right * scaleX,\n top: rect.top * scaleY,\n bottom: rect.bottom * scaleY\n };\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n lineView.measure.caches[i] = {};\n }\n }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n\n for (var i = 0; i < cm.display.view.length; i++) {\n clearLineMeasurementCacheFor(cm.display.view[i]);\n }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n\n if (!cm.options.lineWrapping) {\n cm.display.maxLineChanged = true;\n }\n\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft));\n }\n\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft;\n }\n\n function pageScrollY() {\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop));\n }\n\n return window.pageYOffset || (document.documentElement || document.body).scrollTop;\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n\n if (lineObj.widgets) {\n for (var i = 0; i < lineObj.widgets.length; ++i) {\n if (lineObj.widgets[i].above) {\n height += widgetHeight(lineObj.widgets[i]);\n }\n }\n }\n\n return height;\n } // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n\n\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height;\n rect.bottom += height;\n }\n\n if (context == \"line\") {\n return rect;\n }\n\n if (!context) {\n context = \"local\";\n }\n\n var yOff = _heightAtLine(lineObj);\n\n if (context == \"local\") {\n yOff += paddingTop(cm.display);\n } else {\n yOff -= cm.display.viewOffset;\n }\n\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff;\n rect.right += xOff;\n }\n\n rect.top += yOff;\n rect.bottom += yOff;\n return rect;\n } // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n\n\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") {\n return coords;\n }\n\n var left = coords.left,\n top = coords.top; // First move into \"page\" coordinate system\n\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {\n left: left - lineSpaceBox.left,\n top: top - lineSpaceBox.top\n };\n }\n\n function _charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) {\n lineObj = getLine(cm.doc, pos.line);\n }\n\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n } // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n\n\n function _cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n\n if (right) {\n m.left = m.right;\n } else {\n m.right = m.left;\n }\n\n return intoCoordSystem(cm, lineObj, m, context);\n }\n\n var order = getOrder(lineObj, cm.doc.direction),\n ch = pos.ch,\n sticky = pos.sticky;\n\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n\n if (!order) {\n return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\");\n }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos],\n right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert);\n }\n\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n\n if (other != null) {\n val.other = getBidi(ch, other, sticky != \"before\");\n }\n\n return val;\n } // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n\n\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = _clipPos(cm.doc, pos);\n\n if (!cm.options.lineWrapping) {\n left = charWidth(cm.display) * pos.ch;\n }\n\n var lineObj = getLine(cm.doc, pos.line);\n var top = _heightAtLine(lineObj) + paddingTop(cm.display);\n return {\n left: left,\n right: left,\n top: top,\n bottom: top + lineObj.height\n };\n } // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n\n\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n\n if (outside) {\n pos.outside = outside;\n }\n\n return pos;\n } // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n\n\n function _coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n\n if (y < 0) {\n return PosWithInfo(doc.first, 0, null, -1, -1);\n }\n\n var lineN = _lineAtHeight(doc, y),\n last = doc.first + doc.size - 1;\n\n if (lineN > last) {\n return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1);\n }\n\n if (x < 0) {\n x = 0;\n }\n\n var lineObj = getLine(doc, lineN);\n\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n\n if (!collapsed) {\n return found;\n }\n\n var rangeEnd = collapsed.find(1);\n\n if (rangeEnd.line == lineN) {\n return rangeEnd;\n }\n\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;\n }, end, 0);\n end = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch).top > y;\n }, begin, end);\n return {\n begin: begin,\n end: end\n };\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop);\n } // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n\n\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x;\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= _heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj); // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0,\n end = lineObj.text.length,\n ltr = true;\n var order = getOrder(lineObj, cm.doc.direction); // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1; // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n } // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n\n\n var chAround = null,\n boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight;\n box.bottom += widgetHeight;\n\n if (!boxIsAfter(box, x, y, false)) {\n return false;\n }\n\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n\n return true;\n }, begin, end);\n var baseX,\n sticky,\n outside = false; // If a box around the coordinates was found, use that\n\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x,\n atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) {\n ch++;\n } // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n\n\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? \"after\" : \"before\"; // Now get accurate coordinates for this place, in order to get a\n // base X position\n\n var coords = _cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i],\n ltr = part.level != 1;\n return boxIsAfter(_cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"), \"line\", lineObj, preparedMeasure), x, y, true);\n }, 0, order.length - 1);\n var part = order[index]; // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n\n if (index > 0) {\n var ltr = part.level != 1;\n\n var start = _cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"), \"line\", lineObj, preparedMeasure);\n\n if (boxIsAfter(start, x, y, true) && start.top > y) {\n part = order[index - 1];\n }\n }\n\n return part;\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n\n if (/\\s/.test(lineObj.text.charAt(end - 1))) {\n end--;\n }\n\n var part = null,\n closestDist = null;\n\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n\n if (p.from >= end || p.to <= begin) {\n continue;\n }\n\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n\n if (!part) {\n part = order[order.length - 1];\n } // Clip the part to the wrapped line.\n\n\n if (part.from < begin) {\n part = {\n from: begin,\n to: part.to,\n level: part.level\n };\n }\n\n if (part.to > end) {\n part = {\n from: part.from,\n to: end,\n level: part.level\n };\n }\n\n return part;\n }\n\n var measureText; // Compute the default text height.\n\n function textHeight(display) {\n if (display.cachedTextHeight != null) {\n return display.cachedTextHeight;\n }\n\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\"); // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n\n if (height > 3) {\n display.cachedTextHeight = height;\n }\n\n removeChildren(display.measure);\n return height || 1;\n } // Compute the default character width.\n\n\n function charWidth(display) {\n if (display.cachedCharWidth != null) {\n return display.cachedCharWidth;\n }\n\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(),\n width = (rect.right - rect.left) / 10;\n\n if (width > 2) {\n display.cachedCharWidth = width;\n }\n\n return width || 10;\n } // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n\n\n function getDimensions(cm) {\n var d = cm.display,\n left = {},\n width = {};\n var gutterLeft = d.gutters.clientLeft;\n\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n\n return {\n fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth\n };\n } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n\n\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n } // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n\n\n function estimateHeight(cm) {\n var th = textHeight(cm.display),\n wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) {\n return 0;\n }\n\n var widgetsHeight = 0;\n\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) {\n widgetsHeight += line.widgets[i].height;\n }\n }\n }\n\n if (wrapping) {\n return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n } else {\n return widgetsHeight + th;\n }\n };\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc,\n est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n });\n } // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n\n\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") {\n return null;\n }\n\n var x,\n y,\n space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n\n try {\n x = e.clientX - space.left;\n y = e.clientY - space.top;\n } catch (e) {\n return null;\n }\n\n var coords = _coordsChar(cm, x, y),\n line;\n\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n\n return coords;\n } // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n\n\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) {\n return null;\n }\n\n n -= cm.display.viewFrom;\n\n if (n < 0) {\n return null;\n }\n\n var view = cm.display.view;\n\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n\n if (n < 0) {\n return i;\n }\n }\n } // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n\n\n function regChange(cm, from, to, lendiff) {\n if (from == null) {\n from = cm.doc.first;\n }\n\n if (to == null) {\n to = cm.doc.first + cm.doc.size;\n }\n\n if (!lendiff) {\n lendiff = 0;\n }\n\n var display = cm.display;\n\n if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {\n display.updateLineNumbers = from;\n }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) {\n // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {\n resetView(cm);\n }\n } else if (to <= display.viewFrom) {\n // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) {\n // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) {\n // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) {\n // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else {\n // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n\n if (ext) {\n if (to < ext.lineN) {\n ext.lineN += lendiff;\n } else if (from < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n }\n } // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n\n\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display,\n ext = cm.display.externalMeasured;\n\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n\n if (line < display.viewFrom || line >= display.viewTo) {\n return;\n }\n\n var lineView = display.view[findViewIndex(cm, line)];\n\n if (lineView.node == null) {\n return;\n }\n\n var arr = lineView.changes || (lineView.changes = []);\n\n if (indexOf(arr, type) == -1) {\n arr.push(type);\n }\n } // Clear the view.\n\n\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN),\n diff,\n view = cm.display.view;\n\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {\n return {\n index: index,\n lineN: newN\n };\n }\n\n var n = cm.display.viewFrom;\n\n for (var i = 0; i < index; i++) {\n n += view[i].size;\n }\n\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) {\n return null;\n }\n\n diff = n + view[index].size - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n\n oldN += diff;\n newN += diff;\n }\n\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) {\n return null;\n }\n\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n\n return {\n index: index,\n lineN: newN\n };\n } // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n\n\n function adjustView(cm, from, to) {\n var display = cm.display,\n view = display.view;\n\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from) {\n display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n } else if (display.viewFrom < from) {\n display.view = display.view.slice(findViewIndex(cm, from));\n }\n\n display.viewFrom = from;\n\n if (display.viewTo < to) {\n display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n } else if (display.viewTo > to) {\n display.view = display.view.slice(0, findViewIndex(cm, to));\n }\n }\n\n display.viewTo = to;\n } // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n\n\n function countDirtyView(cm) {\n var view = cm.display.view,\n dirty = 0;\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n\n if (!lineView.hidden && (!lineView.node || lineView.changes)) {\n ++dirty;\n }\n }\n\n return dirty;\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if (primary === void 0) primary = true;\n var doc = cm.doc,\n result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) {\n continue;\n }\n\n var range = doc.sel.ranges[i];\n\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {\n continue;\n }\n\n var collapsed = range.empty();\n\n if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n\n if (!collapsed) {\n drawSelectionRange(cm, range, selFragment);\n }\n }\n\n return result;\n } // Draws a cursor for the given range\n\n\n function drawSelectionCursor(cm, head, output) {\n var pos = _cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) {\n return a.top - b.top || a.left - b.left;\n } // Draws the given range as a highlighted selection\n\n\n function drawSelectionRange(cm, range, output) {\n var display = cm.display,\n doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display),\n leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) {\n top = 0;\n }\n\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\"));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n\n function coords(ch, bias) {\n return _charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = dir == \"ltr\" == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop];\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n var openStart = fromArg == null && from == 0,\n openEnd = toArg == null && to == lineLen;\n var first = i == 0,\n last = !order || i == order.length - 1;\n\n if (toPos.top - fromPos.top <= 3) {\n // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else {\n // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n\n if (fromPos.bottom < toPos.top) {\n add(leftSide, fromPos.bottom, null, toPos.top);\n }\n\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) {\n start = fromPos;\n }\n\n if (cmpCoords(toPos, start) < 0) {\n start = toPos;\n }\n\n if (!end || cmpCoords(fromPos, end) < 0) {\n end = fromPos;\n }\n\n if (cmpCoords(toPos, end) < 0) {\n end = toPos;\n }\n });\n return {\n start: start,\n end: end\n };\n }\n\n var sFrom = range.from(),\n sTo = range.to();\n\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line),\n toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n\n if (leftEnd.bottom < rightStart.top) {\n add(leftSide, leftEnd.bottom, null, rightStart.top);\n }\n }\n\n output.appendChild(fragment);\n } // Cursor-blinking\n\n\n function restartBlink(cm) {\n if (!cm.state.focused) {\n return;\n }\n\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n\n if (cm.options.cursorBlinkRate > 0) {\n display.blinker = setInterval(function () {\n return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate);\n } else if (cm.options.cursorBlinkRate < 0) {\n display.cursorDiv.style.visibility = \"hidden\";\n }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) {\n cm.display.input.focus();\n onFocus(cm);\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n }\n }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n }\n\n if (cm.options.readOnly == \"nocursor\") {\n return;\n }\n\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\"); // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n\n if (webkit) {\n setTimeout(function () {\n return cm.display.input.reset(true);\n }, 20);\n } // Issue #1730\n\n }\n\n cm.display.input.receivedFocus();\n }\n\n restartBlink(cm);\n }\n\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) {\n return;\n }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n\n clearInterval(cm.display.blinker);\n setTimeout(function () {\n if (!cm.state.focused) {\n cm.display.shift = false;\n }\n }, 150);\n } // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n\n\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i],\n wrapping = cm.options.lineWrapping;\n var height = void 0,\n width = 0;\n\n if (cur.hidden) {\n continue;\n }\n\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top; // Check that lines don't extend past the right of the current\n // editor width\n\n if (!wrapping && cur.text.firstChild) {\n width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1;\n }\n }\n\n var diff = cur.line.height - height;\n\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n\n if (cur.rest) {\n for (var j = 0; j < cur.rest.length; j++) {\n updateWidgetHeight(cur.rest[j]);\n }\n }\n }\n\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n } // Read and store the height of line widgets associated with the\n // given line.\n\n\n function updateWidgetHeight(line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i],\n parent = w.node.parentNode;\n\n if (parent) {\n w.height = parent.offsetHeight;\n }\n }\n }\n } // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n\n\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = _lineAtHeight(doc, top),\n to = _lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n\n\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line,\n ensureTo = viewport.ensure.to.line;\n\n if (ensureFrom < from) {\n from = ensureFrom;\n to = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n\n return {\n from: from,\n to: Math.max(to, from + 1)\n };\n } // SCROLLING THINGS INTO VIEW\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n\n\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) {\n return;\n }\n\n var display = cm.display,\n box = display.sizer.getBoundingClientRect(),\n doScroll = null;\n\n if (rect.top + box.top < 0) {\n doScroll = true;\n } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) {\n doScroll = false;\n }\n\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200B\", null, \"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + rect.left + \"px; width: \" + Math.max(2, rect.right - rect.left) + \"px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n } // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n\n\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) {\n margin = 0;\n }\n\n var rect;\n\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n\n var coords = _cursorCoords(cm, pos);\n\n var endCoords = !end || end == pos ? coords : _cursorCoords(cm, end);\n rect = {\n left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin\n };\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop,\n startLeft = cm.doc.scrollLeft;\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) {\n changed = true;\n }\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {\n changed = true;\n }\n }\n\n if (!changed) {\n break;\n }\n }\n\n return rect;\n } // Scroll a given set of coordinates into view (immediately).\n\n\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n }\n } // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n\n\n function calculateScrollPos(cm, rect) {\n var display = cm.display,\n snapMargin = textHeight(cm.display);\n\n if (rect.top < 0) {\n rect.top = 0;\n }\n\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm),\n result = {};\n\n if (rect.bottom - rect.top > screen) {\n rect.bottom = rect.top + screen;\n }\n\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin,\n atBottom = rect.bottom > docBottom - snapMargin;\n\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n\n if (newTop != screentop) {\n result.scrollTop = newTop;\n }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n\n if (tooWide) {\n rect.right = rect.left + screenw;\n }\n\n if (rect.left < 10) {\n result.scrollLeft = 0;\n } else if (rect.left < screenleft) {\n result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10));\n } else if (rect.right > screenw + screenleft - 3) {\n result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;\n }\n\n return result;\n } // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n\n\n function addToScrollTop(cm, top) {\n if (top == null) {\n return;\n }\n\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n } // Make sure that at the end of the operation the current cursor is\n // shown.\n\n\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {\n from: cur,\n to: cur,\n margin: cm.options.cursorScrollMargin\n };\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) {\n resolveScrollToPos(cm);\n }\n\n if (x != null) {\n cm.curOp.scrollLeft = x;\n }\n\n if (y != null) {\n cm.curOp.scrollTop = y;\n }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n } // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n\n\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from),\n to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n } // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n\n\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) {\n return;\n }\n\n if (!gecko) {\n updateDisplaySimple(cm, {\n top: val\n });\n }\n\n setScrollTop(cm, val, true);\n\n if (gecko) {\n updateDisplaySimple(cm);\n }\n\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n\n if (cm.display.scroller.scrollTop == val && !forceScroll) {\n return;\n }\n\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n\n if (cm.display.scroller.scrollTop != val) {\n cm.display.scroller.scrollTop = val;\n }\n } // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n\n\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) {\n return;\n }\n\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n\n if (cm.display.scroller.scrollLeft != val) {\n cm.display.scroller.scrollLeft = val;\n }\n\n cm.display.scrollbars.setScrollLeft(val);\n } // SCROLLBARS\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n\n\n function measureForScrollbars(cm) {\n var d = cm.display,\n gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth,\n clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n\n var NativeScrollbars = function NativeScrollbars(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert);\n place(horiz);\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) {\n scroll(vert.scrollTop, \"vertical\");\n }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) {\n scroll(horiz.scrollLeft, \"horizontal\");\n }\n });\n this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n\n if (ie && ie_version < 8) {\n this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it.\n\n this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) {\n this.zeroWidthHack();\n }\n\n this.checkedZeroWidth = true;\n }\n\n return {\n right: needsV ? sWidth : 0,\n bottom: needsH ? sWidth : 0\n };\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) {\n this.horiz.scrollLeft = pos;\n }\n\n if (this.disableHoriz) {\n this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\");\n }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) {\n this.vert.scrollTop = pos;\n }\n\n if (this.disableVert) {\n this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\");\n }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed();\n this.disableVert = new Delayed();\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n\n if (elt != bar) {\n bar.style.pointerEvents = \"none\";\n } else {\n delay.set(1000, maybeDisable);\n }\n }\n\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function NullScrollbars() {};\n\n NullScrollbars.prototype.update = function () {\n return {\n bottom: 0,\n right: 0\n };\n };\n\n NullScrollbars.prototype.setScrollLeft = function () {};\n\n NullScrollbars.prototype.setScrollTop = function () {};\n\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) {\n measure = measureForScrollbars(cm);\n }\n\n var startWidth = cm.display.barWidth,\n startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping) {\n updateHeightsInViewport(cm);\n }\n\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth;\n startHeight = cm.display.barHeight;\n }\n } // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n\n\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else {\n d.scrollbarFiller.style.display = \"\";\n }\n\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else {\n d.gutterFiller.style.display = \"\";\n }\n }\n\n var scrollbarModel = {\n \"native\": NativeScrollbars,\n \"null\": NullScrollbars\n };\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n\n if (cm.display.scrollbars.addClass) {\n rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus\n\n on(node, \"mousedown\", function () {\n if (cm.state.focused) {\n setTimeout(function () {\n return cm.display.input.focus();\n }, 0);\n }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") {\n setScrollLeft(cm, pos);\n } else {\n updateScrollTop(cm, pos);\n }\n }, cm);\n\n if (cm.display.scrollbars.addClass) {\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n } // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n\n var nextOpId = 0; // Start a new operation.\n\n function _startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false,\n // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height,\n // Used to detect need to update scrollbar\n forceUpdate: false,\n // Used to force a redraw\n updateInput: 0,\n // Whether to reset the input textarea\n typing: false,\n // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null,\n // Accumulated changes, for firing change events\n cursorActivityHandlers: null,\n // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0,\n // Tracks which cursorActivity handlers have been called already\n selectionChanged: false,\n // Whether the selection needs to be redrawn\n updateMaxLine: false,\n // Set when the widest line needs to be determined anew\n scrollLeft: null,\n scrollTop: null,\n // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null,\n // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n\n };\n pushOperation(cm.curOp);\n } // Finish an operation, updating the display and signalling delayed events\n\n\n function _endOperation(cm) {\n var op = cm.curOp;\n\n if (op) {\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++) {\n group.ops[i].cm.curOp = null;\n }\n\n endOperations(group);\n });\n }\n } // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n\n\n function endOperations(group) {\n var ops = group.ops;\n\n for (var i = 0; i < ops.length; i++) // Read DOM\n {\n endOperation_R1(ops[i]);\n }\n\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n {\n endOperation_W1(ops[i$1]);\n }\n\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n {\n endOperation_R2(ops[i$2]);\n }\n\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n {\n endOperation_W2(ops[i$3]);\n }\n\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n {\n endOperation_finish(ops[i$4]);\n }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm,\n display = cm.display;\n maybeClipScrollbars(cm);\n\n if (op.updateMaxLine) {\n findMaxLine(cm);\n }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {\n top: op.scrollTop,\n ensure: op.scrollToPos\n }, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm,\n display = cm.display;\n\n if (op.updatedDisplay) {\n updateHeightsInViewport(cm);\n }\n\n op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged) {\n op.preparedSelection = display.input.prepareSelection();\n }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n\n if (op.maxScrollLeft < cm.doc.scrollLeft) {\n setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n }\n\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n\n if (op.preparedSelection) {\n cm.display.input.showSelection(op.preparedSelection, takeFocus);\n }\n\n if (op.updatedDisplay || op.startHeight != cm.doc.height) {\n updateScrollbars(cm, op.barMeasure);\n }\n\n if (op.updatedDisplay) {\n setDocumentHeight(cm, op.barMeasure);\n }\n\n if (op.selectionChanged) {\n restartBlink(cm);\n }\n\n if (cm.state.focused && op.updateInput) {\n cm.display.input.reset(op.typing);\n }\n\n if (takeFocus) {\n ensureFocus(op.cm);\n }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm,\n display = cm.display,\n doc = cm.doc;\n\n if (op.updatedDisplay) {\n postUpdateDisplay(cm, op.update);\n } // Abort mouse wheel delta measurement, when scrolling explicitly\n\n\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) {\n display.wheelStartX = display.wheelStartY = null;\n } // Propagate the scroll position to the actual DOM scroller\n\n\n if (op.scrollTop != null) {\n setScrollTop(cm, op.scrollTop, op.forceScroll);\n }\n\n if (op.scrollLeft != null) {\n setScrollLeft(cm, op.scrollLeft, true, true);\n } // If we need to scroll a specific position into view, do so.\n\n\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, _clipPos(doc, op.scrollToPos.from), _clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n } // Fire events for markers that are hidden/unidden by editing or\n // undoing\n\n\n var hidden = op.maybeHiddenMarkers,\n unhidden = op.maybeUnhiddenMarkers;\n\n if (hidden) {\n for (var i = 0; i < hidden.length; ++i) {\n if (!hidden[i].lines.length) {\n signal(hidden[i], \"hide\");\n }\n }\n }\n\n if (unhidden) {\n for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {\n if (unhidden[i$1].lines.length) {\n signal(unhidden[i$1], \"unhide\");\n }\n }\n }\n\n if (display.wrapper.offsetHeight) {\n doc.scrollTop = cm.display.scroller.scrollTop;\n } // Fire change events, and delayed event handlers\n\n\n if (op.changeObjs) {\n signal(cm, \"changes\", cm, op.changeObjs);\n }\n\n if (op.update) {\n op.update.finish();\n }\n } // Run the given function in an operation\n\n\n function runInOp(cm, f) {\n if (cm.curOp) {\n return f();\n }\n\n _startOperation(cm);\n\n try {\n return f();\n } finally {\n _endOperation(cm);\n }\n } // Wraps a function in an operation. Returns the wrapped function.\n\n\n function operation(cm, f) {\n return function () {\n if (cm.curOp) {\n return f.apply(cm, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(cm, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n\n\n function methodOp(f) {\n return function () {\n if (this.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(this);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(this);\n }\n };\n }\n\n function docMethodOp(f) {\n return function () {\n var cm = this.cm;\n\n if (!cm || cm.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // HIGHLIGHT WORKER\n\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo) {\n cm.state.highlight.set(time, bind(highlightWorker, cm));\n }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n\n if (doc.highlightFrontier >= cm.display.viewTo) {\n return;\n }\n\n var end = +new Date() + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) {\n // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses,\n newCls = highlighted.classes;\n\n if (newCls) {\n line.styleClasses = newCls;\n } else if (oldCls) {\n line.styleClasses = null;\n }\n\n var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n\n for (var i = 0; !ischange && i < oldStyles.length; ++i) {\n ischange = oldStyles[i] != line.styles[i];\n }\n\n if (ischange) {\n changedLines.push(context.line);\n }\n\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength) {\n processLine(cm, line.text, context);\n }\n\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n\n if (+new Date() > end) {\n startWorker(cm, cm.options.workDelay);\n return true;\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n\n if (changedLines.length) {\n runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++) {\n regLineChange(cm, changedLines[i], \"text\");\n }\n });\n }\n } // DISPLAY DRAWING\n\n\n var DisplayUpdate = function DisplayUpdate(cm, viewport, force) {\n var display = cm.display;\n this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for)\n\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type)) {\n this.events.push(arguments);\n }\n };\n\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++) {\n signal.apply(null, this.events[i]);\n }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) {\n return null;\n }\n\n var active = activeElt();\n\n if (!active || !contains(cm.display.lineDiv, active)) {\n return null;\n }\n\n var result = {\n activeElt: active\n };\n\n if (window.getSelection) {\n var sel = window.getSelection();\n\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n\n return result;\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) {\n return;\n }\n\n snapshot.activeElt.focus();\n\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(),\n range = document.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n } // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n\n\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display,\n doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false;\n } // Bail out if the visible area is already rendered and nothing changed.\n\n\n if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {\n return false;\n }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n } // Compute a suitable new viewport (from & to)\n\n\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n\n if (display.viewFrom < from && from - display.viewFrom < 20) {\n from = Math.max(doc.first, display.viewFrom);\n }\n\n if (display.viewTo > to && display.viewTo - to < 20) {\n to = Math.min(end, display.viewTo);\n }\n\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n display.viewOffset = _heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position\n\n cm.display.mover.style.top = display.viewOffset + \"px\";\n var toUpdate = countDirtyView(cm);\n\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {\n return false;\n } // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n\n\n var selSnapshot = selectionSnapshot(cm);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"none\";\n }\n\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"\";\n }\n\n display.renderedView = display.view; // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n\n restoreSelection(selSnapshot); // Prevent selection and cursors from interfering with the scroll\n // width and height.\n\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n return true;\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null) {\n viewport = {\n top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)\n };\n } // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n\n\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) {\n break;\n }\n }\n\n if (!updateDisplayIfNeeded(cm, update)) {\n break;\n }\n\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom;\n cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n } // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n\n\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display,\n lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv,\n cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit\n\n if (webkit && mac && cm.display.currentWheelTarget == node) {\n node.style.display = \"none\";\n } else {\n node.parentNode.removeChild(node);\n }\n\n return next;\n }\n\n var view = display.view,\n lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) {\n // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else {\n // Already drawn\n while (cur != lineView.node) {\n cur = rm(cur);\n }\n\n var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;\n\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) {\n updateNumber = false;\n }\n\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n\n while (cur) {\n cur = rm(cur);\n }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + \"px\";\n } // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n\n\n function alignHorizontally(cm) {\n var display = cm.display,\n view = display.view;\n\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {\n return;\n }\n\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth,\n left = comp + \"px\";\n\n for (var i = 0; i < view.length; i++) {\n if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter) {\n view[i].gutter.style.left = left;\n }\n\n if (view[i].gutterBackground) {\n view[i].gutterBackground.style.left = left;\n }\n }\n\n var align = view[i].alignable;\n\n if (align) {\n for (var j = 0; j < align.length; j++) {\n align[j].style.left = left;\n }\n }\n }\n }\n\n if (cm.options.fixedGutter) {\n display.gutters.style.left = comp + gutterW + \"px\";\n }\n } // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n\n\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) {\n return false;\n }\n\n var doc = cm.doc,\n last = lineNumberFor(cm.options, doc.first + doc.size - 1),\n display = cm.display;\n\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)], \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth,\n padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true;\n }\n\n return false;\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [],\n sawLineNumbers = false;\n\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i],\n style = null;\n\n if (typeof name != \"string\") {\n style = name.style;\n name = name.className;\n }\n\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) {\n continue;\n } else {\n sawLineNumbers = true;\n }\n }\n\n result.push({\n className: name,\n style: style\n });\n }\n\n if (lineNumbers && !sawLineNumbers) {\n result.push({\n className: \"CodeMirror-linenumbers\",\n style: null\n });\n }\n\n return result;\n } // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n\n\n function renderGutters(display) {\n var gutters = display.gutters,\n specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n\n if (style) {\n gElt.style.cssText = style;\n }\n\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n } // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input; // Covers bottom-right square when both scrollbars are present.\n\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\"); // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\"); // Will contain the actual code, positioned to cover the viewport.\n\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\"); // Elements are added to these to represent selection and cursors.\n\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\"); // A visibility: hidden element used to find the size of things.\n\n d.measure = elt(\"div\", null, \"CodeMirror-measure\"); // When lines outside of the viewport are measured, they are drawn in this.\n\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\"); // Wraps everything that needs to exist inside the vertically-padded coordinate system\n\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\"); // Moved around its parent to cover visible view.\n\n d.mover = elt(\"div\", [lines], null, \"position: relative\"); // Set to the height of the document, allowing scrolling.\n\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\"); // Will contain the gutters, if any.\n\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null; // Actual scrollable element.\n\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\"); // The element in which the editor lives.\n\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n\n if (ie && ie_version < 8) {\n d.gutters.style.zIndex = -1;\n d.scroller.style.paddingRight = 0;\n }\n\n if (!webkit && !(gecko && mobile)) {\n d.scroller.draggable = true;\n }\n\n if (place) {\n if (place.appendChild) {\n place.appendChild(d.wrapper);\n } else {\n place(d.wrapper);\n }\n } // Current rendered range (may be bigger than the view window).\n\n\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines.\n\n d.view = [];\n d.renderedView = null; // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n\n d.externalMeasured = null; // Empty space (in pixels) above the view\n\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n\n d.alignWidgets = false;\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false; // Used for measuring wheel scrolling granularity\n\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down.\n\n d.shift = false; // Used to track whether anything happened since the context menu\n // was opened.\n\n d.selForContextMenu = null;\n d.activeTouch = null;\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n input.init(d);\n } // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n\n var wheelSamples = 0,\n wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n\n if (ie) {\n wheelPixelsPerUnit = -.53;\n } else if (gecko) {\n wheelPixelsPerUnit = 15;\n } else if (chrome) {\n wheelPixelsPerUnit = -.7;\n } else if (safari) {\n wheelPixelsPerUnit = -1 / 3;\n }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX,\n dy = e.wheelDeltaY;\n\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {\n dx = e.detail;\n }\n\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {\n dy = e.detail;\n } else if (dy == null) {\n dy = e.wheelDelta;\n }\n\n return {\n x: dx,\n y: dy\n };\n }\n\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e),\n dx = delta.x,\n dy = delta.y;\n var display = cm.display,\n scroll = display.scroller; // Quit if there's nothing to scroll here\n\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n\n if (!(dx && canScrollX || dy && canScrollY)) {\n return;\n } // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n\n\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer;\n }\n }\n }\n } // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n\n\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY) {\n updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit));\n }\n\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n\n if (!dy || dy && canScrollY) {\n e_preventDefault(e);\n }\n\n display.wheelStartX = null; // Abort measurement, if in progress\n\n return;\n } // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n\n\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop,\n bot = top + display.wrapper.clientHeight;\n\n if (pixels < 0) {\n top = Math.max(0, top + pixels - 50);\n } else {\n bot = Math.min(cm.doc.height, bot + pixels + 50);\n }\n\n updateDisplaySimple(cm, {\n top: top,\n bottom: bot\n });\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft;\n display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx;\n display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) {\n return;\n }\n\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;\n display.wheelStartX = display.wheelStartY = null;\n\n if (!sample) {\n return;\n }\n\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx;\n display.wheelDY += dy;\n }\n }\n } // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n\n\n var Selection = function Selection(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () {\n return this.ranges[this.primIndex];\n };\n\n Selection.prototype.equals = function (other) {\n if (other == this) {\n return true;\n }\n\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {\n return false;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i],\n there = other.ranges[i];\n\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {\n return false;\n }\n }\n\n return true;\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n\n for (var i = 0; i < this.ranges.length; i++) {\n out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n }\n\n return new Selection(out, this.primIndex);\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++) {\n if (!this.ranges[i].empty()) {\n return true;\n }\n }\n\n return false;\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) {\n end = pos;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) {\n return i;\n }\n }\n\n return -1;\n };\n\n var Range = function Range(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n };\n\n Range.prototype.from = function () {\n return minPos(this.anchor, this.head);\n };\n\n Range.prototype.to = function () {\n return maxPos(this.anchor, this.head);\n };\n\n Range.prototype.empty = function () {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n }; // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n\n\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) {\n return cmp(a.from(), b.from());\n });\n primIndex = indexOf(ranges, prim);\n\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i],\n prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()),\n to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n\n if (i <= primIndex) {\n --primIndex;\n }\n\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n\n return new Selection(ranges, primIndex);\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0);\n } // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n\n\n function changeEnd(change) {\n if (!change.text) {\n return change.to;\n }\n\n return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n } // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n\n\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) {\n return pos;\n }\n\n if (cmp(pos, change.to) <= 0) {\n return changeEnd(change);\n }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1,\n ch = pos.ch;\n\n if (pos.line == change.to.line) {\n ch += changeEnd(change).ch - change.to.ch;\n }\n\n return Pos(line, ch);\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change)));\n }\n\n return normalizeSelection(doc.cm, out, doc.sel.primIndex);\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line) {\n return Pos(nw.line, pos.ch - old.ch + nw.ch);\n } else {\n return Pos(nw.line + (pos.line - old.line), pos.ch);\n }\n } // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n\n\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0),\n newPrev = oldPrev;\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n\n if (hint == \"around\") {\n var range = doc.sel.ranges[i],\n inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n\n return new Selection(out, doc.sel.primIndex);\n } // Used to get the editor into a consistent state again when options change.\n\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n\n if (cm.curOp) {\n regChange(cm);\n }\n } // DOCUMENT DATA STRUCTURE\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n\n\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n } // Perform a change on the document data structure.\n\n\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {\n return markedSpans ? markedSpans[n] : null;\n }\n\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n\n function linesFor(start, end) {\n var result = [];\n\n for (var i = start; i < end; ++i) {\n result.push(new Line(text[i], spansFor(i), estimateHeight));\n }\n\n return result;\n }\n\n var from = change.from,\n to = change.to,\n text = change.text;\n var firstLine = getLine(doc, from.line),\n lastLine = getLine(doc, to.line);\n var lastText = lst(text),\n lastSpans = spansFor(text.length - 1),\n nlines = to.line - from.line; // Adjust the line structure\n\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n\n if (nlines) {\n doc.remove(from.line, nlines);\n }\n\n if (added.length) {\n doc.insert(from.line, added);\n }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n\n if (nlines > 1) {\n doc.remove(from.line + 1, nlines - 1);\n }\n\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n } // Call f for all linked documents.\n\n\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) {\n for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n\n if (rel.doc == skip) {\n continue;\n }\n\n var shared = sharedHist && rel.sharedHist;\n\n if (sharedHistOnly && !shared) {\n continue;\n }\n\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\n }\n }\n\n propagate(doc, null, true);\n } // Attach a document to an editor.\n\n\n function attachDoc(cm, doc) {\n if (doc.cm) {\n throw new Error(\"This document is already in use.\");\n }\n\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n\n if (!cm.options.lineWrapping) {\n findMaxLine(cm);\n }\n\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = [];\n this.undone = [];\n this.undoDepth = Infinity; // Used to track when changes can be merged into a single undo\n // event\n\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method\n\n this.generation = this.maxGeneration = startGen || 1;\n } // Create a history change event from an updateDoc-style change\n // object.\n\n\n function historyChangeFromChange(doc, change) {\n var histChange = {\n from: copyPos(change.from),\n to: changeEnd(change),\n text: getBetween(doc, change.from, change.to)\n };\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) {\n return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n }, true);\n return histChange;\n } // Pop all selection events off the end of a history array. Stop at\n // a change event.\n\n\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n\n if (last.ranges) {\n array.pop();\n } else {\n break;\n }\n }\n } // Find the top change event in the history. Pop off selection\n // events that are in the way.\n\n\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done);\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done);\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done);\n }\n } // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n\n\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date(),\n cur;\n var last;\n\n if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == \"*\")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n\n if (!before || !before.ranges) {\n pushSelectionToHistory(doc.sel, hist.done);\n }\n\n cur = {\n changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation\n };\n hist.done.push(cur);\n\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n\n if (!hist.done[0].ranges) {\n hist.done.shift();\n }\n }\n }\n\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) {\n signal(doc, \"historyAdded\");\n }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" || ch == \"+\" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n } // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n\n\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history,\n origin = options && options.origin; // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n\n if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {\n hist.done[hist.done.length - 1] = sel;\n } else {\n pushSelectionToHistory(sel, hist.done);\n }\n\n hist.lastSelTime = +new Date();\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n\n if (options && options.clearRedo !== false) {\n clearSelectionEvents(hist.undone);\n }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n\n if (!(top && top.ranges && top.equals(sel))) {\n dest.push(sel);\n }\n } // Used to store marked span information in the history.\n\n\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id],\n n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans) {\n (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n }\n\n ++n;\n });\n } // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n\n\n function removeClearedSpans(spans) {\n if (!spans) {\n return null;\n }\n\n var out;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) {\n if (!out) {\n out = spans.slice(0, i);\n }\n } else if (out) {\n out.push(spans[i]);\n }\n }\n\n return !out ? spans : out.length ? out : null;\n } // Retrieve and filter the old marked spans stored in a change event.\n\n\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n\n if (!found) {\n return null;\n }\n\n var nw = [];\n\n for (var i = 0; i < change.text.length; ++i) {\n nw.push(removeClearedSpans(found[i]));\n }\n\n return nw;\n } // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n\n\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n\n if (!old) {\n return stretched;\n }\n\n if (!stretched) {\n return old;\n }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i],\n stretchCur = stretched[i];\n\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n\n for (var k = 0; k < oldCur.length; ++k) {\n if (oldCur[k].marker == span.marker) {\n continue spans;\n }\n }\n\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n\n return old;\n } // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n\n\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue;\n }\n\n var changes = event.changes,\n newChanges = [];\n copy.push({\n changes: newChanges\n });\n\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j],\n m = void 0;\n newChanges.push({\n from: change.from,\n to: change.to,\n text: change.text\n });\n\n if (newGroup) {\n for (var prop in change) {\n if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n }\n }\n\n return copy;\n } // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n\n\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n\n if (posBefore != cmp(other, anchor) < 0) {\n anchor = head;\n head = other;\n } else if (posBefore != cmp(head, other) < 0) {\n head = other;\n }\n }\n\n return new Range(anchor, head);\n } else {\n return new Range(other || head, head);\n }\n } // Extend the primary selection range, discard the rest.\n\n\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) {\n extend = doc.cm && (doc.cm.display.shift || doc.extend);\n }\n\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n } // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n\n\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend);\n }\n\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n } // Updates a single range in the selection.\n\n\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n } // Reset the selection to a single range.\n\n\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n } // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n\n\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function update(ranges) {\n this.ranges = [];\n\n for (var i = 0; i < ranges.length; i++) {\n this.ranges[i] = new Range(_clipPos(doc, ranges[i].anchor), _clipPos(doc, ranges[i].head));\n }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n }\n\n if (obj.ranges != sel.ranges) {\n return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);\n } else {\n return sel;\n }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done,\n last = lst(done);\n\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n } // Set a new selection.\n\n\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\")) {\n sel = filterSelectionChange(doc, sel, options);\n }\n\n var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm) {\n ensureCursorVisible(doc.cm);\n }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) {\n return;\n }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n\n signalLater(doc, \"cursorActivity\", doc);\n } // Verify that the selection does not partially select any atomic\n // marked ranges.\n\n\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n } // Return a selection that does not partially select any atomic\n // ranges.\n\n\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) {\n out = sel.ranges.slice(0, i);\n }\n\n out[i] = new Range(newAnchor, newHead);\n }\n }\n\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i],\n m = sp.marker; // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n\n var preventCursorLeft = \"selectLeft\" in m ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = \"selectRight\" in m ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n\n if (m.explicitlyCleared) {\n if (!line.markedSpans) {\n break;\n } else {\n --i;\n continue;\n }\n }\n }\n\n if (!m.atomic) {\n continue;\n }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1),\n diff = void 0;\n\n if (dir < 0 ? preventCursorRight : preventCursorLeft) {\n near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n }\n\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {\n return skipAtomicInner(doc, near, pos, dir, mayClear);\n }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n\n if (dir < 0 ? preventCursorLeft : preventCursorRight) {\n far = movePos(doc, far, dir, far.line == pos.line ? line : null);\n }\n\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n }\n }\n }\n\n return pos;\n } // Ensure a given position is not inside an atomic range.\n\n\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true);\n\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0);\n }\n\n return found;\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) {\n return _clipPos(doc, Pos(pos.line - 1));\n } else {\n return null;\n }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) {\n return Pos(pos.line + 1, 0);\n } else {\n return null;\n }\n } else {\n return new Pos(pos.line, pos.ch + dir);\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n } // UPDATING\n // Allow \"beforeChange\" event handlers to influence a change\n\n\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function cancel() {\n return obj.canceled = true;\n }\n };\n\n if (update) {\n obj.update = function (from, to, text, origin) {\n if (from) {\n obj.from = _clipPos(doc, from);\n }\n\n if (to) {\n obj.to = _clipPos(doc, to);\n }\n\n if (text) {\n obj.text = text;\n }\n\n if (origin !== undefined) {\n obj.origin = origin;\n }\n };\n }\n\n signal(doc, \"beforeChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeChange\", doc.cm, obj);\n }\n\n if (obj.canceled) {\n if (doc.cm) {\n doc.cm.curOp.updateInput = 2;\n }\n\n return null;\n }\n\n return {\n from: obj.from,\n to: obj.to,\n text: obj.text,\n origin: obj.origin\n };\n } // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n\n\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) {\n return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n }\n\n if (doc.cm.state.suppressEdits) {\n return;\n }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n\n if (!change) {\n return;\n }\n } // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n\n\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n\n if (split) {\n for (var i = split.length - 1; i >= 0; --i) {\n makeChangeInner(doc, {\n from: split[i].from,\n to: split[i].to,\n text: i ? [\"\"] : change.text,\n origin: change.origin\n });\n }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) {\n return;\n }\n\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n } // Revert a change stored in a document's history.\n\n\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n\n if (suppress && !allowSelectionOnly) {\n return;\n }\n\n var hist = doc.history,\n event,\n selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone,\n dest = type == \"undo\" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n\n var i = 0;\n\n for (; i < source.length; i++) {\n event = source[i];\n\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) {\n break;\n }\n }\n\n if (i == source.length) {\n return;\n }\n\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {\n clearRedo: false\n });\n return;\n }\n\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return;\n } else {\n break;\n }\n } // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n\n\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({\n changes: antiChanges,\n generation: hist.generation\n });\n hist.generation = event.generation || ++hist.maxGeneration;\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function loop(i) {\n var change = event.changes[i];\n change.origin = type;\n\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {};\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n\n if (!i && doc.cm) {\n doc.cm.scrollIntoView({\n from: change.from,\n to: changeEnd(change)\n });\n }\n\n var rebased = []; // Propagate to the linked documents\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop(i$1);\n if (returned) return returned.v;\n }\n } // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n\n\n function shiftDoc(doc, distance) {\n if (distance == 0) {\n return;\n }\n\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) {\n regLineChange(doc.cm, l, \"gutter\");\n }\n }\n } // More lower-level change function, handling only a single document\n // (not linked ones).\n\n\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return;\n }\n\n if (change.from.line > doc.lastLine()) {\n return;\n } // Clip the change to the size of this doc\n\n\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {\n from: Pos(doc.first, 0),\n to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)],\n origin: change.origin\n };\n }\n\n var last = doc.lastLine();\n\n if (change.to.line > last) {\n change = {\n from: change.from,\n to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]],\n origin: change.origin\n };\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) {\n selAfter = computeSelAfterChange(doc, change);\n }\n\n if (doc.cm) {\n makeChangeSingleDocInEditor(doc.cm, change, spans);\n } else {\n updateDoc(doc, change, spans);\n }\n\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {\n doc.cantEdit = false;\n }\n } // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n\n\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc,\n display = cm.display,\n from = change.from,\n to = change.to;\n var recomputeMaxLength = false,\n checkWidthStart = from.line;\n\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true;\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1) {\n signalCursorActivity(cm);\n }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n\n if (recomputeMaxLength) {\n cm.curOp.updateMaxLine = true;\n }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display\n\n if (change.full) {\n regChange(cm);\n } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) {\n regLineChange(cm, from.line, \"text\");\n } else {\n regChange(cm, from.line, to.line + 1, lendiff);\n }\n\n var changesHandler = hasHandler(cm, \"changes\"),\n changeHandler = hasHandler(cm, \"change\");\n\n if (changeHandler || changesHandler) {\n var obj = {\n from: from,\n to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n\n if (changeHandler) {\n signalLater(cm, \"change\", cm, obj);\n }\n\n if (changesHandler) {\n (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n }\n\n cm.display.selForContextMenu = null;\n }\n\n function _replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) {\n to = from;\n }\n\n if (cmp(to, from) < 0) {\n assign = [to, from], from = assign[0], to = assign[1];\n }\n\n if (typeof code == \"string\") {\n code = doc.splitLines(code);\n }\n\n makeChange(doc, {\n from: from,\n to: to,\n text: code,\n origin: origin\n });\n } // Rebasing/resetting history to deal with externally-sourced changes\n\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n } // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n\n\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i],\n ok = true;\n\n if (sub.ranges) {\n if (!sub.copied) {\n sub = array[i] = sub.deepCopy();\n sub.copied = true;\n }\n\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n\n continue;\n }\n\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break;\n }\n }\n\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line,\n to = change.to.line,\n diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n } // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n\n\n function changeLine(doc, handle, changeType, op) {\n var no = handle,\n line = handle;\n\n if (typeof handle == \"number\") {\n line = getLine(doc, clipLine(doc, handle));\n } else {\n no = lineNo(handle);\n }\n\n if (no == null) {\n return null;\n }\n\n if (op(line, no) && doc.cm) {\n regLineChange(doc.cm, no, changeType);\n }\n\n return line;\n } // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.lines.length;\n },\n // Remove the n lines at offset 'at'.\n removeInner: function removeInner(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n\n this.lines.splice(at, n);\n },\n // Helper used to collapse a small branch into a single leaf.\n collapse: function collapse(lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function insertInner(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n }\n },\n // Used to iterate over a part of the tree.\n iterN: function iterN(at, n, op) {\n for (var e = at + n; at < e; ++at) {\n if (op(this.lines[at])) {\n return true;\n }\n }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0,\n height = 0;\n\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize();\n height += ch.height;\n ch.parent = this;\n }\n\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.size;\n },\n removeInner: function removeInner(at, n) {\n this.size -= n;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var rm = Math.min(n, sz - at),\n oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n\n if (sz == rm) {\n this.children.splice(i--, 1);\n child.parent = null;\n }\n\n if ((n -= rm) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n } // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n\n\n if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function collapse(lines) {\n for (var i = 0; i < this.children.length; ++i) {\n this.children[i].collapse(lines);\n }\n },\n insertInner: function insertInner(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at <= sz) {\n child.insertInner(at, lines, height);\n\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n\n break;\n }\n\n at -= sz;\n }\n },\n // When a node has grown, check whether it should be split.\n maybeSpill: function maybeSpill() {\n if (this.children.length <= 10) {\n return;\n }\n\n var me = this;\n\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n\n if (!me.parent) {\n // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n\n me.parent.maybeSpill();\n },\n iterN: function iterN(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var used = Math.min(n, sz - at);\n\n if (child.iterN(at, used, op)) {\n return true;\n }\n\n if ((n -= used) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n }\n }\n }; // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function LineWidget(doc, node, options) {\n if (options) {\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n }\n\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm,\n ws = this.line.widgets,\n line = this.line,\n no = lineNo(line);\n\n if (no == null || !ws) {\n return;\n }\n\n for (var i = 0; i < ws.length; ++i) {\n if (ws[i] == this) {\n ws.splice(i--, 1);\n }\n }\n\n if (!ws.length) {\n line.widgets = null;\n }\n\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n var oldH = this.height,\n cm = this.doc.cm,\n line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n\n if (!diff) {\n return;\n }\n\n if (!lineIsHidden(this.doc, line)) {\n updateLineHeight(line, line.height + diff);\n }\n\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (_heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) {\n addToScrollTop(cm, diff);\n }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n\n if (cm && widget.noHScroll) {\n cm.display.alignWidgets = true;\n }\n\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n\n if (widget.insertAt == null) {\n widgets.push(widget);\n } else {\n widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n }\n\n widget.line = line;\n\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = _heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n\n if (aboveVisible) {\n addToScrollTop(cm, widget.height);\n }\n\n cm.curOp.forceUpdate = true;\n }\n\n return true;\n });\n\n if (cm) {\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n }\n\n return widget;\n } // TEXTMARKERS\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n\n\n var nextMarkerId = 0;\n\n var TextMarker = function TextMarker(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n }; // Clear the marker.\n\n\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n var cm = this.doc.cm,\n withOp = cm && !cm.curOp;\n\n if (withOp) {\n _startOperation(cm);\n }\n\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n\n if (found) {\n signalLater(this, \"clear\", found.from, found.to);\n }\n }\n\n var min = null,\n max = null;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (cm && !this.collapsed) {\n regLineChange(cm, lineNo(line), \"text\");\n } else if (cm) {\n if (span.to != null) {\n max = lineNo(line);\n }\n\n if (span.from != null) {\n min = lineNo(line);\n }\n }\n\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) {\n updateLineHeight(line, textHeight(cm.display));\n }\n }\n\n if (cm && this.collapsed && !cm.options.lineWrapping) {\n for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]),\n len = lineLength(visual);\n\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n }\n }\n\n if (min != null && cm && this.collapsed) {\n regChange(cm, min, max + 1);\n }\n\n this.lines.length = 0;\n this.explicitlyCleared = true;\n\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n\n if (cm) {\n reCheckSelection(cm.doc);\n }\n }\n\n if (cm) {\n signalLater(cm, \"markerCleared\", cm, this, min, max);\n }\n\n if (withOp) {\n _endOperation(cm);\n }\n\n if (this.parent) {\n this.parent.clear();\n }\n }; // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n\n\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") {\n side = 1;\n }\n\n var from, to;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n\n if (side == -1) {\n return from;\n }\n }\n\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n\n if (side == 1) {\n return to;\n }\n }\n }\n\n return from && {\n from: from,\n to: to\n };\n }; // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n\n\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n var pos = this.find(-1, true),\n widget = this,\n cm = this.doc.cm;\n\n if (!pos || !cm) {\n return;\n }\n\n runInOp(cm, function () {\n var line = pos.line,\n lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n\n cm.curOp.updateMaxLine = true;\n\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n\n if (dHeight) {\n updateLineHeight(line, line.height + dHeight);\n }\n }\n\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) {\n (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n }\n }\n\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n\n eventMixin(TextMarker); // Create a marker, wire it up to the right lines, and\n\n function _markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) {\n return markTextShared(doc, from, to, options, type);\n } // Ensure we are in an operation.\n\n\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, _markText)(doc, from, to, options, type);\n }\n\n var marker = new TextMarker(doc, type),\n diff = cmp(from, to);\n\n if (options) {\n copyObj(options, marker, false);\n } // Don't connect empty markers unless clearWhenEmpty is false\n\n\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {\n return marker;\n }\n\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n\n if (!options.handleMouseEvents) {\n marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n if (options.insertLeft) {\n marker.widgetNode.insertLeft = true;\n }\n }\n\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n }\n\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory) {\n addChangeToHistory(doc, {\n from: from,\n to: to,\n origin: \"markText\"\n }, doc.sel, NaN);\n }\n\n var curLine = from.line,\n cm = doc.cm,\n updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {\n updateMaxLine = true;\n }\n\n if (marker.collapsed && curLine != from.line) {\n updateLineHeight(line, 0);\n }\n\n addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null));\n ++curLine;\n }); // lineIsHidden depends on the presence of the spans, so needs a second pass\n\n if (marker.collapsed) {\n doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) {\n updateLineHeight(line, 0);\n }\n });\n }\n\n if (marker.clearOnEnter) {\n on(marker, \"beforeCursorEnter\", function () {\n return marker.clear();\n });\n }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n\n if (doc.history.done.length || doc.history.undone.length) {\n doc.clearHistory();\n }\n }\n\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n\n if (cm) {\n // Sync editor state\n if (updateMaxLine) {\n cm.curOp.updateMaxLine = true;\n }\n\n if (marker.collapsed) {\n regChange(cm, from.line, to.line + 1);\n } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {\n for (var i = from.line; i <= to.line; i++) {\n regLineChange(cm, i, \"text\");\n }\n }\n\n if (marker.atomic) {\n reCheckSelection(cm.doc);\n }\n\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n\n return marker;\n } // SHARED TEXTMARKERS\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n\n\n var SharedTextMarker = function SharedTextMarker(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n\n for (var i = 0; i < markers.length; ++i) {\n markers[i].parent = this;\n }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n this.explicitlyCleared = true;\n\n for (var i = 0; i < this.markers.length; ++i) {\n this.markers[i].clear();\n }\n\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [_markText(doc, from, to, options, type)],\n primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) {\n options.widgetNode = widget.cloneNode(true);\n }\n\n markers.push(_markText(doc, _clipPos(doc, from), _clipPos(doc, to), options, type));\n\n for (var i = 0; i < doc.linked.length; ++i) {\n if (doc.linked[i].isParent) {\n return;\n }\n }\n\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {\n return m.parent;\n });\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i],\n pos = marker.find();\n var mFrom = doc.clipPos(pos.from),\n mTo = doc.clipPos(pos.to);\n\n if (cmp(mFrom, mTo)) {\n var subMark = _markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function loop(i) {\n var marker = markers[i],\n linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) {\n return linked.push(d);\n });\n\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) {\n loop(i);\n }\n }\n\n var nextDocId = 0;\n\n var Doc = function Doc(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) {\n return new Doc(text, mode, firstLine, lineSep, direction);\n }\n\n if (firstLine == null) {\n firstLine = 0;\n }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = direction == \"rtl\" ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") {\n text = this.splitLines(text);\n }\n\n updateDoc(this, {\n from: start,\n to: start,\n text: text\n });\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function iter(from, to, op) {\n if (op) {\n this.iterN(from - this.first, to - from, op);\n } else {\n this.iterN(this.first, this.first + this.size, from);\n }\n },\n // Non-public interface for adding and removing lines.\n insert: function insert(at, lines) {\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n height += lines[i].height;\n }\n\n this.insertInner(at - this.first, lines, height);\n },\n remove: function remove(at, n) {\n this.removeInner(at - this.first, n);\n },\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n getValue: function getValue(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n\n if (lineSep === false) {\n return lines;\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n setValue: docMethodOp(function (code) {\n var top = Pos(this.first, 0),\n last = this.first + this.size - 1;\n makeChange(this, {\n from: top,\n to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code),\n origin: \"setValue\",\n full: true\n }, true);\n\n if (this.cm) {\n scrollToCoords(this.cm, 0, 0);\n }\n\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function replaceRange(code, from, to, origin) {\n from = _clipPos(this, from);\n to = to ? _clipPos(this, to) : from;\n\n _replaceRange(this, code, from, to, origin);\n },\n getRange: function getRange(from, to, lineSep) {\n var lines = getBetween(this, _clipPos(this, from), _clipPos(this, to));\n\n if (lineSep === false) {\n return lines;\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n getLine: function getLine(line) {\n var l = this.getLineHandle(line);\n return l && l.text;\n },\n getLineHandle: function getLineHandle(line) {\n if (isLine(this, line)) {\n return getLine(this, line);\n }\n },\n getLineNumber: function getLineNumber(line) {\n return lineNo(line);\n },\n getLineHandleVisualStart: function getLineHandleVisualStart(line) {\n if (typeof line == \"number\") {\n line = getLine(this, line);\n }\n\n return visualLine(line);\n },\n lineCount: function lineCount() {\n return this.size;\n },\n firstLine: function firstLine() {\n return this.first;\n },\n lastLine: function lastLine() {\n return this.first + this.size - 1;\n },\n clipPos: function clipPos(pos) {\n return _clipPos(this, pos);\n },\n getCursor: function getCursor(start) {\n var range = this.sel.primary(),\n pos;\n\n if (start == null || start == \"head\") {\n pos = range.head;\n } else if (start == \"anchor\") {\n pos = range.anchor;\n } else if (start == \"end\" || start == \"to\" || start === false) {\n pos = range.to();\n } else {\n pos = range.from();\n }\n\n return pos;\n },\n listSelections: function listSelections() {\n return this.sel.ranges;\n },\n somethingSelected: function somethingSelected() {\n return this.sel.somethingSelected();\n },\n setCursor: docMethodOp(function (line, ch, options) {\n setSimpleSelection(this, _clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function (anchor, head, options) {\n setSimpleSelection(this, _clipPos(this, anchor), _clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function (head, other, options) {\n extendSelection(this, _clipPos(this, head), other && _clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function (heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function (f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function (ranges, primary, options) {\n if (!ranges.length) {\n return;\n }\n\n var out = [];\n\n for (var i = 0; i < ranges.length; i++) {\n out[i] = new Range(_clipPos(this, ranges[i].anchor), _clipPos(this, ranges[i].head));\n }\n\n if (primary == null) {\n primary = Math.min(ranges.length - 1, this.sel.primIndex);\n }\n\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function (anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(_clipPos(this, anchor), _clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n getSelection: function getSelection(lineSep) {\n var ranges = this.sel.ranges,\n lines;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n\n if (lineSep === false) {\n return lines;\n } else {\n return lines.join(lineSep || this.lineSeparator());\n }\n },\n getSelections: function getSelections(lineSep) {\n var parts = [],\n ranges = this.sel.ranges;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n\n if (lineSep !== false) {\n sel = sel.join(lineSep || this.lineSeparator());\n }\n\n parts[i] = sel;\n }\n\n return parts;\n },\n replaceSelection: function replaceSelection(code, collapse, origin) {\n var dup = [];\n\n for (var i = 0; i < this.sel.ranges.length; i++) {\n dup[i] = code;\n }\n\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function (code, collapse, origin) {\n var changes = [],\n sel = this.sel;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {\n from: range.from(),\n to: range.to(),\n text: this.splitLines(code[i]),\n origin: origin\n };\n }\n\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) {\n makeChange(this, changes[i$1]);\n }\n\n if (newSel) {\n setSelectionReplaceHistory(this, newSel);\n } else if (this.cm) {\n ensureCursorVisible(this.cm);\n }\n }),\n undo: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\");\n }),\n redo: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\");\n }),\n undoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\", true);\n }),\n redoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\", true);\n }),\n setExtending: function setExtending(val) {\n this.extend = val;\n },\n getExtending: function getExtending() {\n return this.extend;\n },\n historySize: function historySize() {\n var hist = this.history,\n done = 0,\n undone = 0;\n\n for (var i = 0; i < hist.done.length; i++) {\n if (!hist.done[i].ranges) {\n ++done;\n }\n }\n\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {\n if (!hist.undone[i$1].ranges) {\n ++undone;\n }\n }\n\n return {\n undo: done,\n redo: undone\n };\n },\n clearHistory: function clearHistory() {\n var this$1 = this;\n this.history = new History(this.history.maxGeneration);\n linkedDocs(this, function (doc) {\n return doc.history = this$1.history;\n }, true);\n },\n markClean: function markClean() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function changeGeneration(forceSplit) {\n if (forceSplit) {\n this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n }\n\n return this.history.generation;\n },\n isClean: function isClean(gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n getHistory: function getHistory() {\n return {\n done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)\n };\n },\n setHistory: function setHistory(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n setGutterMarker: docMethodOp(function (line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n\n if (!value && isEmpty(markers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }),\n clearGutter: docMethodOp(function (gutterID) {\n var this$1 = this;\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n\n if (isEmpty(line.gutterMarkers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }\n });\n }),\n lineInfo: function lineInfo(line) {\n var n;\n\n if (typeof line == \"number\") {\n if (!isLine(this, line)) {\n return null;\n }\n\n n = line;\n line = getLine(this, line);\n\n if (!line) {\n return null;\n }\n } else {\n n = lineNo(line);\n\n if (n == null) {\n return null;\n }\n }\n\n return {\n line: n,\n handle: line,\n text: line.text,\n gutterMarkers: line.gutterMarkers,\n textClass: line.textClass,\n bgClass: line.bgClass,\n wrapClass: line.wrapClass,\n widgets: line.widgets\n };\n },\n addLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n\n if (!line[prop]) {\n line[prop] = cls;\n } else if (classTest(cls).test(line[prop])) {\n return false;\n } else {\n line[prop] += \" \" + cls;\n }\n\n return true;\n });\n }),\n removeLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n\n if (!cur) {\n return false;\n } else if (cls == null) {\n line[prop] = null;\n } else {\n var found = cur.match(classTest(cls));\n\n if (!found) {\n return false;\n }\n\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n\n return true;\n });\n }),\n addLineWidget: docMethodOp(function (handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n removeLineWidget: function removeLineWidget(widget) {\n widget.clear();\n },\n markText: function markText(from, to, options) {\n return _markText(this, _clipPos(this, from), _clipPos(this, to), options, options && options.type || \"range\");\n },\n setBookmark: function setBookmark(pos, options) {\n var realOpts = {\n replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false,\n shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents\n };\n pos = _clipPos(this, pos);\n return _markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function findMarksAt(pos) {\n pos = _clipPos(this, pos);\n var markers = [],\n spans = getLine(this, pos.line).markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {\n markers.push(span.marker.parent || span.marker);\n }\n }\n }\n\n return markers;\n },\n findMarks: function findMarks(from, to, filter) {\n from = _clipPos(this, from);\n to = _clipPos(this, to);\n var found = [],\n lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {\n found.push(span.marker.parent || span.marker);\n }\n }\n }\n\n ++lineNo;\n });\n return found;\n },\n getAllMarks: function getAllMarks() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n if (sps[i].from != null) {\n markers.push(sps[i].marker);\n }\n }\n }\n });\n return markers;\n },\n posFromIndex: function posFromIndex(off) {\n var ch,\n lineNo = this.first,\n sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n\n if (sz > off) {\n ch = off;\n return true;\n }\n\n off -= sz;\n ++lineNo;\n });\n return _clipPos(this, Pos(lineNo, ch));\n },\n indexFromPos: function indexFromPos(coords) {\n coords = _clipPos(this, coords);\n var index = coords.ch;\n\n if (coords.line < this.first || coords.ch < 0) {\n return 0;\n }\n\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) {\n // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index;\n },\n copy: function copy(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop;\n doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n\n return doc;\n },\n linkedDoc: function linkedDoc(options) {\n if (!options) {\n options = {};\n }\n\n var from = this.first,\n to = this.first + this.size;\n\n if (options.from != null && options.from > from) {\n from = options.from;\n }\n\n if (options.to != null && options.to < to) {\n to = options.to;\n }\n\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n\n if (options.sharedHist) {\n copy.history = this.history;\n }\n\n (this.linked || (this.linked = [])).push({\n doc: copy,\n sharedHist: options.sharedHist\n });\n copy.linked = [{\n doc: this,\n isParent: true,\n sharedHist: options.sharedHist\n }];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function unlinkDoc(other) {\n if (other instanceof CodeMirror) {\n other = other.doc;\n }\n\n if (this.linked) {\n for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n\n if (link.doc != other) {\n continue;\n }\n\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\n } // If the histories were shared, split them again\n\n\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) {\n return splitIds.push(doc.id);\n }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function iterLinkedDocs(f) {\n linkedDocs(this, f);\n },\n getMode: function getMode() {\n return this.mode;\n },\n getEditor: function getEditor() {\n return this.cm;\n },\n splitLines: function splitLines(str) {\n if (this.lineSep) {\n return str.split(this.lineSep);\n }\n\n return splitLinesAuto(str);\n },\n lineSeparator: function lineSeparator() {\n return this.lineSep || \"\\n\";\n },\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") {\n dir = \"ltr\";\n }\n\n if (dir == this.direction) {\n return;\n }\n\n this.direction = dir;\n this.iter(function (line) {\n return line.order = null;\n });\n\n if (this.cm) {\n directionChanged(this.cm);\n }\n })\n }); // Public alias.\n\n Doc.prototype.eachLine = Doc.prototype.iter; // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n\n if (ie) {\n lastDrop = +new Date();\n }\n\n var pos = posFromMouse(cm, e, true),\n files = e.dataTransfer.files;\n\n if (!pos || cm.isReadOnly()) {\n return;\n } // Might be a file drop, in which case we simply extract the text\n // and insert it.\n\n\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length,\n text = Array(n),\n read = 0;\n\n var markAsReadAndPasteIfAllFilesAreRead = function markAsReadAndPasteIfAllFilesAreRead() {\n if (++read == n) {\n operation(cm, function () {\n pos = _clipPos(cm.doc, pos);\n var change = {\n from: pos,\n to: pos,\n text: cm.doc.splitLines(text.filter(function (t) {\n return t != null;\n }).join(cm.doc.lineSeparator())),\n origin: \"paste\"\n };\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(_clipPos(cm.doc, pos), _clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n\n var readTextFromFile = function readTextFromFile(file, i) {\n if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n var reader = new FileReader();\n\n reader.onerror = function () {\n return markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.onload = function () {\n var content = reader.result;\n\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.readAsText(file);\n };\n\n for (var i = 0; i < files.length; i++) {\n readTextFromFile(files[i], i);\n }\n } else {\n // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e); // Ensure the editor is re-focused\n\n setTimeout(function () {\n return cm.display.input.focus();\n }, 20);\n return;\n }\n\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n\n if (text$1) {\n var selected;\n\n if (cm.state.draggingText && !cm.state.draggingText.copy) {\n selected = cm.listSelections();\n }\n\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n\n if (selected) {\n for (var i$1 = 0; i$1 < selected.length; ++i$1) {\n _replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\");\n }\n }\n\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n } catch (e) {}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {\n e_stop(e);\n return;\n }\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\"; // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason\n\n img._top = img.offsetTop;\n }\n\n e.dataTransfer.setDragImage(img, 0, 0);\n\n if (presto) {\n img.parentNode.removeChild(img);\n }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n\n if (!pos) {\n return;\n }\n\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n } // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) {\n return;\n }\n\n var byClass = document.getElementsByClassName(\"CodeMirror\"),\n editors = [];\n\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n\n if (cm) {\n editors.push(cm);\n }\n }\n\n if (editors.length) {\n editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) {\n f(editors[i]);\n }\n });\n }\n }\n\n var globalsRegistered = false;\n\n function ensureGlobalHandlers() {\n if (globalsRegistered) {\n return;\n }\n\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) {\n resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n }\n }); // When the window loses focus, we want to show the editor as blurred\n\n on(window, \"blur\", function () {\n return forEachCodeMirror(onBlur);\n });\n } // Called when the window resizes\n\n\n function onResize(cm) {\n var d = cm.display; // Might be a text scaling operation, clear size caches.\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\",\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"PrintScrn\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Mod\",\n 92: \"Mod\",\n 93: \"Mod\",\n 106: \"*\",\n 107: \"=\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 145: \"ScrollLock\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 63232: \"Up\",\n 63233: \"Down\",\n 63234: \"Left\",\n 63235: \"Right\",\n 63272: \"Delete\",\n 63273: \"Home\",\n 63275: \"End\",\n 63276: \"PageUp\",\n 63277: \"PageDown\",\n 63302: \"Insert\"\n }; // Number keys\n\n for (var i = 0; i < 10; i++) {\n keyNames[i + 48] = keyNames[i + 96] = String(i);\n } // Alphabetic keys\n\n\n for (var i$1 = 65; i$1 <= 90; i$1++) {\n keyNames[i$1] = String.fromCharCode(i$1);\n } // Function keys\n\n\n for (var i$2 = 1; i$2 <= 12; i$2++) {\n keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2;\n }\n\n var keyMap = {};\n keyMap.basic = {\n \"Left\": \"goCharLeft\",\n \"Right\": \"goCharRight\",\n \"Up\": \"goLineUp\",\n \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\",\n \"Home\": \"goLineStartSmart\",\n \"PageUp\": \"goPageUp\",\n \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\",\n \"Backspace\": \"delCharBefore\",\n \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\",\n \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\",\n \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n }; // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\",\n \"Ctrl-D\": \"deleteLine\",\n \"Ctrl-Z\": \"undo\",\n \"Shift-Ctrl-Z\": \"redo\",\n \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\",\n \"Ctrl-End\": \"goDocEnd\",\n \"Ctrl-Up\": \"goLineUp\",\n \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\",\n \"Ctrl-Right\": \"goGroupRight\",\n \"Alt-Left\": \"goLineStart\",\n \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\",\n \"Ctrl-Delete\": \"delGroupAfter\",\n \"Ctrl-S\": \"save\",\n \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\",\n \"Shift-Ctrl-G\": \"findPrev\",\n \"Shift-Ctrl-F\": \"replace\",\n \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\",\n \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\",\n \"Shift-Ctrl-U\": \"redoSelection\",\n \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n }; // Very basic readline/emacs-style bindings, which are standard on Mac.\n\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\",\n \"Ctrl-B\": \"goCharLeft\",\n \"Ctrl-P\": \"goLineUp\",\n \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\",\n \"Alt-B\": \"goWordLeft\",\n \"Ctrl-A\": \"goLineStart\",\n \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\",\n \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\",\n \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\",\n \"Alt-Backspace\": \"delWordBefore\",\n \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\",\n \"Cmd-D\": \"deleteLine\",\n \"Cmd-Z\": \"undo\",\n \"Shift-Cmd-Z\": \"redo\",\n \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\",\n \"Cmd-Up\": \"goDocStart\",\n \"Cmd-End\": \"goDocEnd\",\n \"Cmd-Down\": \"goDocEnd\",\n \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\",\n \"Cmd-Left\": \"goLineLeft\",\n \"Cmd-Right\": \"goLineRight\",\n \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\",\n \"Alt-Delete\": \"delGroupAfter\",\n \"Cmd-S\": \"save\",\n \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\",\n \"Shift-Cmd-G\": \"findPrev\",\n \"Cmd-Alt-F\": \"replace\",\n \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\",\n \"Cmd-]\": \"indentMore\",\n \"Cmd-Backspace\": \"delWrappedLineLeft\",\n \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\",\n \"Shift-Cmd-U\": \"redoSelection\",\n \"Ctrl-Up\": \"goDocStart\",\n \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n\n if (/^(cmd|meta|m)$/i.test(mod)) {\n cmd = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n\n if (alt) {\n name = \"Alt-\" + name;\n }\n\n if (ctrl) {\n name = \"Ctrl-\" + name;\n }\n\n if (cmd) {\n name = \"Cmd-\" + name;\n }\n\n if (shift) {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n\n\n function normalizeKeyMap(keymap) {\n var copy = {};\n\n for (var keyname in keymap) {\n if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) {\n continue;\n }\n\n if (value == \"...\") {\n delete keymap[keyname];\n continue;\n }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n\n for (var i = 0; i < keys.length; i++) {\n var val = void 0,\n name = void 0;\n\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n\n var prev = copy[name];\n\n if (!prev) {\n copy[name] = val;\n } else if (prev != val) {\n throw new Error(\"Inconsistent bindings for \" + name);\n }\n }\n\n delete keymap[keyname];\n }\n }\n\n for (var prop in copy) {\n keymap[prop] = copy[prop];\n }\n\n return keymap;\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n\n if (found === false) {\n return \"nothing\";\n }\n\n if (found === \"...\") {\n return \"multi\";\n }\n\n if (found != null && handle(found)) {\n return \"handled\";\n }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\") {\n return lookupKey(key, map.fallthrough, handle, context);\n }\n\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n\n if (result) {\n return result;\n }\n }\n }\n } // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n\n\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n\n if (event.altKey && base != \"Alt\") {\n name = \"Alt-\" + name;\n }\n\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") {\n name = \"Ctrl-\" + name;\n }\n\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") {\n name = \"Cmd-\" + name;\n }\n\n if (!noShift && event.shiftKey && base != \"Shift\") {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // Look up the name of a key as indicated by an event object.\n\n\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) {\n return false;\n }\n\n var name = keyNames[event.keyCode];\n\n if (name == null || event.altGraphKey) {\n return false;\n } // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n\n\n if (event.keyCode == 3 && event.code) {\n name = event.code;\n }\n\n return addModifierNames(name, event, noShift);\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val;\n } // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n\n\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges,\n kill = []; // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break;\n }\n }\n\n kill.push(toKill);\n } // Next, remove those actual ranges.\n\n\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n }\n\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target;\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\");\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") {\n dir = -dir;\n }\n\n var order = getOrder(lineObj, cm.doc.direction);\n\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = dir < 0 == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch; // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) {\n return measureCharPrepared(cm, prep, ch).top == targetTop;\n }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);\n\n if (sticky == \"before\") {\n ch = moveCharLogically(lineObj, ch, 1);\n }\n } else {\n ch = dir < 0 ? part.to : part.from;\n }\n\n return new Pos(lineNo, ch, sticky);\n }\n }\n\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\");\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n\n if (!bidi) {\n return moveLogically(line, start, dir);\n }\n\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky),\n part = bidi[partPos];\n\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir);\n }\n\n var mv = function mv(pos, dir) {\n return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);\n };\n\n var prep;\n\n var getWrappedLineExtent = function getWrappedLineExtent(ch) {\n if (!cm.options.lineWrapping) {\n return {\n begin: 0,\n end: line.text.length\n };\n }\n\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch);\n };\n\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = part.level == 1 == dir < 0;\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky);\n }\n } // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n\n var searchInVisualLine = function searchInVisualLine(partPos, dir, wrappedLineExtent) {\n var getRes = function getRes(ch, moveInStorageOrder) {\n return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), \"before\") : new Pos(start.line, ch, \"after\");\n };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = dir > 0 == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n\n if (part.from <= ch && ch < part.to) {\n return getRes(ch, moveInStorageOrder);\n }\n\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {\n return getRes(ch, moveInStorageOrder);\n }\n }\n }; // Case 3a: Look for other bidi parts on the same visual line\n\n\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n\n if (res) {\n return res;\n } // Case 3b: Look for other bidi parts on the next visual line\n\n\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n\n if (res) {\n return res;\n }\n } // Case 4: Nowhere to move\n\n\n return null;\n } // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n\n\n var commands = {\n selectAll: selectAll,\n singleSelection: function singleSelection(cm) {\n return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function killLine(cm) {\n return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n\n if (range.head.ch == len && range.head.line < cm.lastLine()) {\n return {\n from: range.head,\n to: Pos(range.head.line + 1, 0)\n };\n } else {\n return {\n from: range.head,\n to: Pos(range.head.line, len)\n };\n }\n } else {\n return {\n from: range.from(),\n to: range.to()\n };\n }\n });\n },\n deleteLine: function deleteLine(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: _clipPos(cm.doc, Pos(range.to().line + 1, 0))\n };\n });\n },\n delLineLeft: function delLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: range.from()\n };\n });\n },\n delWrappedLineLeft: function delWrappedLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n return {\n from: leftPos,\n to: range.from()\n };\n });\n },\n delWrappedLineRight: function delWrappedLineRight(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n return {\n from: range.from(),\n to: rightPos\n };\n });\n },\n undo: function undo(cm) {\n return cm.undo();\n },\n redo: function redo(cm) {\n return cm.redo();\n },\n undoSelection: function undoSelection(cm) {\n return cm.undoSelection();\n },\n redoSelection: function redoSelection(cm) {\n return cm.redoSelection();\n },\n goDocStart: function goDocStart(cm) {\n return cm.extendSelection(Pos(cm.firstLine(), 0));\n },\n goDocEnd: function goDocEnd(cm) {\n return cm.extendSelection(Pos(cm.lastLine()));\n },\n goLineStart: function goLineStart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStart(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineStartSmart: function goLineStartSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStartSmart(cm, range.head);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineEnd: function goLineEnd(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineEnd(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: -1\n });\n },\n goLineRight: function goLineRight(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeft: function goLineLeft(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function goLineLeftSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) {\n return lineStartSmart(cm, range.head);\n }\n\n return pos;\n }, sel_move);\n },\n goLineUp: function goLineUp(cm) {\n return cm.moveV(-1, \"line\");\n },\n goLineDown: function goLineDown(cm) {\n return cm.moveV(1, \"line\");\n },\n goPageUp: function goPageUp(cm) {\n return cm.moveV(-1, \"page\");\n },\n goPageDown: function goPageDown(cm) {\n return cm.moveV(1, \"page\");\n },\n goCharLeft: function goCharLeft(cm) {\n return cm.moveH(-1, \"char\");\n },\n goCharRight: function goCharRight(cm) {\n return cm.moveH(1, \"char\");\n },\n goColumnLeft: function goColumnLeft(cm) {\n return cm.moveH(-1, \"column\");\n },\n goColumnRight: function goColumnRight(cm) {\n return cm.moveH(1, \"column\");\n },\n goWordLeft: function goWordLeft(cm) {\n return cm.moveH(-1, \"word\");\n },\n goGroupRight: function goGroupRight(cm) {\n return cm.moveH(1, \"group\");\n },\n goGroupLeft: function goGroupLeft(cm) {\n return cm.moveH(-1, \"group\");\n },\n goWordRight: function goWordRight(cm) {\n return cm.moveH(1, \"word\");\n },\n delCharBefore: function delCharBefore(cm) {\n return cm.deleteH(-1, \"char\");\n },\n delCharAfter: function delCharAfter(cm) {\n return cm.deleteH(1, \"char\");\n },\n delWordBefore: function delWordBefore(cm) {\n return cm.deleteH(-1, \"word\");\n },\n delWordAfter: function delWordAfter(cm) {\n return cm.deleteH(1, \"word\");\n },\n delGroupBefore: function delGroupBefore(cm) {\n return cm.deleteH(-1, \"group\");\n },\n delGroupAfter: function delGroupAfter(cm) {\n return cm.deleteH(1, \"group\");\n },\n indentAuto: function indentAuto(cm) {\n return cm.indentSelection(\"smart\");\n },\n indentMore: function indentMore(cm) {\n return cm.indentSelection(\"add\");\n },\n indentLess: function indentLess(cm) {\n return cm.indentSelection(\"subtract\");\n },\n insertTab: function insertTab(cm) {\n return cm.replaceSelection(\"\\t\");\n },\n insertSoftTab: function insertSoftTab(cm) {\n var spaces = [],\n ranges = cm.listSelections(),\n tabSize = cm.options.tabSize;\n\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n\n cm.replaceSelections(spaces);\n },\n defaultTab: function defaultTab(cm) {\n if (cm.somethingSelected()) {\n cm.indentSelection(\"add\");\n } else {\n cm.execCommand(\"insertTab\");\n }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function transposeChars(cm) {\n return runInOp(cm, function () {\n var ranges = cm.listSelections(),\n newSel = [];\n\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) {\n continue;\n }\n\n var cur = ranges[i].head,\n line = getLine(cm.doc, cur.line).text;\n\n if (line) {\n if (cur.ch == line.length) {\n cur = new Pos(cur.line, cur.ch - 1);\n }\n\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n\n newSel.push(new Range(cur, cur));\n }\n\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function newlineAndIndent(cm) {\n return runInOp(cm, function () {\n var sels = cm.listSelections();\n\n for (var i = sels.length - 1; i >= 0; i--) {\n cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\");\n }\n\n sels = cm.listSelections();\n\n for (var i$1 = 0; i$1 < sels.length; i$1++) {\n cm.indentLine(sels[i$1].from().line, null, true);\n }\n\n ensureCursorVisible(cm);\n });\n },\n openLine: function openLine(cm) {\n return cm.replaceSelection(\"\\n\", \"start\");\n },\n toggleOverwrite: function toggleOverwrite(cm) {\n return cm.toggleOverwrite();\n }\n };\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, visual, lineN, 1);\n }\n\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, line, lineN, -1);\n }\n\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky);\n }\n\n return start;\n } // Run a handler that was bound to a key.\n\n\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n\n if (!bound) {\n return false;\n }\n } // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n\n\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift,\n done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n if (dropShift) {\n cm.display.shift = false;\n }\n\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n\n return done;\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n\n if (result) {\n return result;\n }\n }\n\n return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm);\n } // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n\n var stopSeq = new Delayed();\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n\n if (seq) {\n if (isModifierKey(name)) {\n return \"handled\";\n }\n\n if (/\\'$/.test(name)) {\n cm.state.keySeq = null;\n } else {\n stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n });\n }\n\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) {\n return true;\n }\n }\n\n return dispatchKeyInner(cm, name, e, handle);\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\") {\n cm.state.keySeq = name;\n }\n\n if (result == \"handled\") {\n signalLater(cm, \"keyHandled\", cm, name, e);\n }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result;\n } // Handle a key from the keydown event.\n\n\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n\n if (!name) {\n return false;\n }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) {\n return doHandleBinding(cm, b, true);\n }) || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion) {\n return doHandleBinding(cm, b);\n }\n });\n } else {\n return dispatchKey(cm, name, e, function (b) {\n return doHandleBinding(cm, b);\n });\n }\n } // Handle a key from the keypress event\n\n\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) {\n return doHandleBinding(cm, b, true);\n });\n }\n\n var lastStoppedKey = null;\n\n function onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n\n if (signalDOMEvent(cm, e)) {\n return;\n } // IE does strange things with escape.\n\n\n if (ie && ie_version < 11 && e.keyCode == 27) {\n e.returnValue = false;\n }\n\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n\n if (presto) {\n lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo\n\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n }\n\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {\n document.execCommand(\"cut\");\n } // Turn mouse into crosshair when Alt is held on Mac.\n\n\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className)) {\n showCrossHair(cm);\n }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) {\n this.doc.sel.shift = false;\n }\n\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {\n return;\n }\n\n var keyCode = e.keyCode,\n charCode = e.charCode;\n\n if (presto && keyCode == lastStoppedKey) {\n lastStoppedKey = null;\n e_preventDefault(e);\n return;\n }\n\n if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {\n return;\n }\n\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode); // Some browsers fire keypress events for backspace\n\n if (ch == \"\\x08\") {\n return;\n }\n\n if (handleCharBinding(cm, e, ch)) {\n return;\n }\n\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function PastClick(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;\n };\n\n var lastClick, lastDoubleClick;\n\n function clickRepeat(pos, button) {\n var now = +new Date();\n\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\";\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\";\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\";\n }\n } // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n\n\n function onMouseDown(e) {\n var cm = this,\n display = cm.display;\n\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {\n return;\n }\n\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () {\n return display.scroller.draggable = true;\n }, 100);\n }\n\n return;\n }\n\n if (clickInGutter(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e),\n button = e_button(e),\n repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus(); // #3261: make sure, that we're not starting a second selection\n\n if (button == 1 && cm.state.selectingText) {\n cm.state.selectingText(e);\n }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) {\n return;\n }\n\n if (button == 1) {\n if (pos) {\n leftButtonDown(cm, pos, repeat, e);\n } else if (e_target(e) == display.scroller) {\n e_preventDefault(e);\n }\n } else if (button == 2) {\n if (pos) {\n extendSelection(cm.doc, pos);\n }\n\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n } else if (button == 3) {\n if (captureRightClick) {\n cm.display.input.onContextMenu(e);\n } else {\n delayBlurEvent(cm);\n }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n\n if (repeat == \"double\") {\n name = \"Double\" + name;\n } else if (repeat == \"triple\") {\n name = \"Triple\" + name;\n }\n\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n }\n\n if (!bound) {\n return false;\n }\n\n var done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n\n return done;\n });\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n\n if (value.extend == null || cm.doc.extend) {\n value.extend = cm.doc.extend || event.shiftKey;\n }\n\n if (value.addNew == null) {\n value.addNew = mac ? event.metaKey : event.ctrlKey;\n }\n\n if (value.moveOnDrag == null) {\n value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);\n }\n\n return value;\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) {\n setTimeout(bind(ensureFocus, cm), 0);\n } else {\n cm.curOp.focus = activeElt();\n }\n\n var behavior = configureMouse(cm, repeat, event);\n var sel = cm.doc.sel,\n contained;\n\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == \"single\" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {\n leftButtonStartDrag(cm, event, pos, behavior);\n } else {\n leftButtonSelect(cm, event, pos, behavior);\n }\n } // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n\n\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display,\n moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) {\n display.scroller.draggable = false;\n }\n\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n\n if (!moved) {\n e_preventDefault(e);\n\n if (!behavior.addNew) {\n extendSelection(cm.doc, pos, null, null, behavior.extend);\n } // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n\n\n if (webkit || ie && ie_version == 9) {\n setTimeout(function () {\n display.wrapper.ownerDocument.body.focus();\n display.input.focus();\n }, 20);\n } else {\n display.input.focus();\n }\n }\n });\n\n var mouseMove = function mouseMove(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n\n var dragStart = function dragStart() {\n return moved = true;\n }; // Let the drag handler handle this.\n\n\n if (webkit) {\n display.scroller.draggable = true;\n }\n\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag; // IE's approach to draggable\n\n if (display.scroller.dragDrop) {\n display.scroller.dragDrop();\n }\n\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n delayBlurEvent(cm);\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") {\n return new Range(pos, pos);\n }\n\n if (unit == \"word\") {\n return cm.findWordAt(pos);\n }\n\n if (unit == \"line\") {\n return new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n var result = unit(cm, pos);\n return new Range(result.from, result.to);\n } // Normal selection, as opposed to text dragging.\n\n\n function leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display,\n doc = cm.doc;\n e_preventDefault(event);\n var ourRange,\n ourIndex,\n startSel = doc.sel,\n ranges = startSel.ranges;\n\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n\n if (ourIndex > -1) {\n ourRange = ranges[ourIndex];\n } else {\n ourRange = new Range(start, start);\n }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) {\n ourRange = new Range(start, start);\n }\n\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n\n if (behavior.extend) {\n ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend);\n } else {\n ourRange = range;\n }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {\n scroll: false,\n origin: \"*mouse\"\n });\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {\n scroll: false,\n origin: \"*mouse\"\n });\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) {\n return;\n }\n\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [],\n tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol),\n right = Math.max(startCol, posCol);\n\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) {\n var text = getLine(doc, line).text,\n leftPos = findColumn(text, left, tabSize);\n\n if (left == right) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n } else if (text.length > leftPos) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n }\n }\n\n if (!ranges.length) {\n ranges.push(new Range(start, start));\n }\n\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {\n origin: \"*mouse\",\n scroll: false\n });\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor,\n head;\n\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(_clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n\n if (!cur) {\n return;\n }\n\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n\n if (cur.line >= visible.to || cur.line < visible.from) {\n setTimeout(operation(cm, function () {\n if (counter == curCount) {\n extend(e);\n }\n }), 150);\n }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n\n if (outside) {\n setTimeout(operation(cm, function () {\n if (counter != curCount) {\n return;\n }\n\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50);\n }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity; // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) {\n done(e);\n } else {\n extend(e);\n }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n } // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n\n\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) {\n return range;\n }\n\n var order = getOrder(anchorLine);\n\n if (!order) {\n return range;\n }\n\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky),\n part = order[index];\n\n if (part.from != anchor.ch && part.to != anchor.ch) {\n return range;\n }\n\n var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);\n\n if (boundary == 0 || boundary == order.length) {\n return range;\n } // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n\n\n var leftSide;\n\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n\n if (headIndex == boundary - 1 || headIndex == boundary) {\n leftSide = dir < 0;\n } else {\n leftSide = dir > 0;\n }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to,\n sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head);\n } // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n\n\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try {\n mX = e.clientX;\n mY = e.clientY;\n } catch (e) {\n return false;\n }\n }\n\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {\n return false;\n }\n\n if (prevent) {\n e_preventDefault(e);\n }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) {\n return e_defaultPrevented(e);\n }\n\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = _lineAtHeight(cm.doc, mY);\n\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e);\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true);\n } // CONTEXT MENU HANDLING\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n\n\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) {\n return;\n }\n\n if (signalDOMEvent(cm, e, \"contextmenu\")) {\n return;\n }\n\n if (!captureRightClick) {\n cm.display.input.onContextMenu(e);\n }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) {\n return false;\n }\n\n return gutterEvent(cm, e, \"gutterContextMenu\", false);\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") + cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {\n toString: function toString() {\n return \"CodeMirror.Init\";\n }\n };\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n\n if (handle) {\n optionHandlers[name] = notOnInit ? function (cm, val, old) {\n if (old != Init) {\n handle(cm, val, old);\n }\n } : handle;\n }\n }\n\n CodeMirror.defineOption = option; // Passed to option handlers when there is no old value.\n\n CodeMirror.Init = Init; // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n\n option(\"value\", \"\", function (cm, val) {\n return cm.setValue(val);\n }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n\n if (!val) {\n return;\n }\n\n var newBreaks = [],\n lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n\n if (found == -1) {\n break;\n }\n\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n\n lineNo++;\n });\n\n for (var i = newBreaks.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length));\n }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n\n if (old != Init) {\n cm.refresh();\n }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) {\n return cm.refresh();\n }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) {\n return cm.getInputField().spellcheck = val;\n }, true);\n option(\"autocorrect\", false, function (cm, val) {\n return cm.getInputField().autocorrect = val;\n }, true);\n option(\"autocapitalize\", false, function (cm, val) {\n return cm.getInputField().autocapitalize = val;\n }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n\n if (prev && prev.detach) {\n prev.detach(cm, next);\n }\n\n if (next.attach) {\n next.attach(cm, prev || null);\n }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) {\n return updateScrollbars(cm);\n }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) {\n return integer;\n }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {\n if (!val) {\n cm.display.input.reset();\n }\n }, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) {\n return cm.doc.history.undoDepth = val;\n });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) {\n return cm.refresh();\n }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) {\n cm.display.input.resetPosition();\n }\n });\n option(\"tabindex\", null, function (cm, val) {\n return cm.display.input.getField().tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) {\n return cm.doc.setDirection(val);\n }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () {\n return updateScrollbars(cm);\n }, 100);\n } // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) {\n return new CodeMirror(place, options);\n }\n\n this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults.\n\n copyObj(defaults, options, false);\n var doc = options.value;\n\n if (typeof doc == \"string\") {\n doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);\n } else if (options.mode) {\n doc.modeOption = options.mode;\n }\n\n this.doc = doc;\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n\n if (options.lineWrapping) {\n this.display.wrapper.className += \" CodeMirror-wrap\";\n }\n\n initScrollbars(this);\n this.state = {\n keyMaps: [],\n // stores maps added by addKeyMap\n overlays: [],\n // highlighting overlays, as added by addOverlay\n modeGen: 0,\n // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false,\n // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1,\n cutIncoming: -1,\n // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(),\n // stores highlight worker timeout\n keySeq: null,\n // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) {\n display.input.focus();\n } // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n\n\n if (ie && ie_version < 11) {\n setTimeout(function () {\n return this$1.display.input.reset(true);\n }, 20);\n }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n _startOperation(this);\n\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if (options.autofocus && !mobile || this.hasFocus()) {\n setTimeout(bind(onFocus, this), 20);\n } else {\n onBlur(this);\n }\n\n for (var opt in optionHandlers) {\n if (optionHandlers.hasOwnProperty(opt)) {\n optionHandlers[opt](this, options[opt], Init);\n }\n }\n\n maybeUpdateLineNumberWidth(this);\n\n if (options.finishInit) {\n options.finishInit(this);\n }\n\n for (var i = 0; i < initHooks.length; ++i) {\n initHooks[i](this);\n }\n\n _endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n\n\n if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\") {\n display.lineDiv.style.textRendering = \"auto\";\n }\n } // The default configuration options.\n\n\n CodeMirror.defaults = defaults; // Functions to run when options are changed.\n\n CodeMirror.optionHandlers = optionHandlers; // Attach the necessary event handlers when initializing the editor\n\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click\n\n if (ie && ie_version < 11) {\n on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e);\n\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n } else {\n on(d.scroller, \"dblclick\", function (e) {\n return signalDOMEvent(cm, e) || e_preventDefault(e);\n });\n } // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n\n\n on(d.scroller, \"contextmenu\", function (e) {\n return onContextMenu(cm, e);\n });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) {\n onContextMenu(cm, e);\n }\n }); // Used to suppress mouse event handling when a touch happens\n\n var touchFinished,\n prevTouch = {\n end: 0\n };\n\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () {\n return d.activeTouch = null;\n }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date();\n }\n }\n\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) {\n return false;\n }\n\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1;\n }\n\n function farAway(touch, other) {\n if (other.left == null) {\n return true;\n }\n\n var dx = other.left - touch.left,\n dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20;\n }\n\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date();\n d.activeTouch = {\n start: now,\n moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null\n };\n\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) {\n d.activeTouch.moved = true;\n }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n\n if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"),\n range;\n\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n {\n range = new Range(pos, pos);\n } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n {\n range = cm.findWordAt(pos);\n } else // Triple tap\n {\n range = new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch); // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n }); // Listen to wheel events in order to try and update the viewport on time.\n\n on(d.scroller, \"mousewheel\", function (e) {\n return onScrollWheel(cm, e);\n });\n on(d.scroller, \"DOMMouseScroll\", function (e) {\n return onScrollWheel(cm, e);\n }); // Prevent wrapper from ever scrolling\n\n on(d.wrapper, \"scroll\", function () {\n return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;\n });\n d.dragFunctions = {\n enter: function enter(e) {\n if (!signalDOMEvent(cm, e)) {\n e_stop(e);\n }\n },\n over: function over(e) {\n if (!signalDOMEvent(cm, e)) {\n onDragOver(cm, e);\n e_stop(e);\n }\n },\n start: function start(e) {\n return onDragStart(cm, e);\n },\n drop: operation(cm, onDrop),\n leave: function leave(e) {\n if (!signalDOMEvent(cm, e)) {\n clearDragCursor(cm);\n }\n }\n };\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) {\n return onKeyUp.call(cm, e);\n });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) {\n return onFocus(cm, e);\n });\n on(inp, \"blur\", function (e) {\n return onBlur(cm, e);\n });\n }\n\n var initHooks = [];\n\n CodeMirror.defineInitHook = function (f) {\n return initHooks.push(f);\n }; // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n\n\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc,\n state;\n\n if (how == null) {\n how = \"add\";\n }\n\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) {\n how = \"prev\";\n } else {\n state = getContextBefore(cm, n).state;\n }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n),\n curSpace = countColumn(line.text, null, tabSize);\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n var curSpaceString = line.text.match(/^\\s*/)[0],\n indentation;\n\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) {\n return;\n }\n\n how = \"prev\";\n }\n }\n\n if (how == \"prev\") {\n if (n > doc.first) {\n indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);\n } else {\n indentation = 0;\n }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n\n indentation = Math.max(0, indentation);\n var indentString = \"\",\n pos = 0;\n\n if (cm.options.indentWithTabs) {\n for (var i = Math.floor(indentation / tabSize); i; --i) {\n pos += tabSize;\n indentString += \"\\t\";\n }\n }\n\n if (pos < indentation) {\n indentString += spaceStr(indentation - pos);\n }\n\n if (indentString != curSpaceString) {\n _replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n\n line.stateAfter = null;\n return true;\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break;\n }\n }\n }\n } // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n\n\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n\n if (!sel) {\n sel = doc.sel;\n }\n\n var recent = +new Date() - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted),\n multiPaste = null; // When pasting N lines into N selections, insert one line per selection\n\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n\n for (var i = 0; i < lastCopied.text.length; i++) {\n multiPaste.push(doc.splitLines(lastCopied.text[i]));\n }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) {\n return [l];\n });\n }\n }\n\n var updateInput = cm.curOp.updateInput; // Normal behavior is to insert the new text into every selection\n\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(),\n to = range.to();\n\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n {\n from = Pos(from.line, from.ch - deleted);\n } else if (cm.state.overwrite && !paste) // Handle overwrite\n {\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted) {\n from = to = Pos(from.line, 0);\n }\n }\n\n var changeEvent = {\n from: from,\n to: to,\n text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")\n };\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n\n if (inserted && !paste) {\n triggerElectric(cm, inserted);\n }\n\n ensureCursorVisible(cm);\n\n if (cm.curOp.updateInput < 2) {\n cm.curOp.updateInput = updateInput;\n }\n\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n\n if (pasted) {\n e.preventDefault();\n\n if (!cm.isReadOnly() && !cm.options.disableInput) {\n runInOp(cm, function () {\n return applyTextInput(cm, pasted, 0, null, \"paste\");\n });\n }\n\n return true;\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) {\n return;\n }\n\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n\n if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) {\n continue;\n }\n\n var mode = cm.getModeAt(range.head);\n var indented = false;\n\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++) {\n if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break;\n }\n }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {\n indented = indentLine(cm, range.head.line, \"smart\");\n }\n }\n\n if (indented) {\n signalLater(cm, \"electricInput\", cm, range.head.line);\n }\n }\n }\n\n function copyableRanges(cm) {\n var text = [],\n ranges = [];\n\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {\n anchor: Pos(line, 0),\n head: Pos(line + 1, 0)\n };\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n\n return {\n text: text,\n ranges: ranges\n };\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\"); // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n\n if (webkit) {\n te.style.width = \"1000px\";\n } else {\n te.setAttribute(\"wrap\", \"off\");\n } // If border: 0; -- iOS fails to open keyboard (issue #1287)\n\n\n if (ios) {\n te.style.border = \"1px solid black\";\n }\n\n disableBrowserMagic(te);\n return div;\n } // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n var helpers = CodeMirror.helpers = {};\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function focus() {\n window.focus();\n this.display.input.focus();\n },\n setOption: function setOption(option, value) {\n var options = this.options,\n old = options[option];\n\n if (options[option] == value && option != \"mode\") {\n return;\n }\n\n options[option] = value;\n\n if (optionHandlers.hasOwnProperty(option)) {\n operation(this, optionHandlers[option])(this, value, old);\n }\n\n signal(this, \"optionChange\", this, option);\n },\n getOption: function getOption(option) {\n return this.options[option];\n },\n getDoc: function getDoc() {\n return this.doc;\n },\n addKeyMap: function addKeyMap(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function removeKeyMap(map) {\n var maps = this.state.keyMaps;\n\n for (var i = 0; i < maps.length; ++i) {\n if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true;\n }\n }\n },\n addOverlay: methodOp(function (spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n\n if (mode.startState) {\n throw new Error(\"Overlays may not be stateful.\");\n }\n\n insertSorted(this.state.overlays, {\n mode: mode,\n modeSpec: spec,\n opaque: options && options.opaque,\n priority: options && options.priority || 0\n }, function (overlay) {\n return overlay.priority;\n });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function (spec) {\n var overlays = this.state.overlays;\n\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return;\n }\n }\n }),\n indentLine: methodOp(function (n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) {\n dir = this.options.smartIndent ? \"smart\" : \"prev\";\n } else {\n dir = dir ? \"add\" : \"subtract\";\n }\n }\n\n if (isLine(this.doc, n)) {\n indentLine(this, n, dir, aggressive);\n }\n }),\n indentSelection: methodOp(function (how) {\n var ranges = this.doc.sel.ranges,\n end = -1;\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n\n if (!range.empty()) {\n var from = range.from(),\n to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n\n for (var j = start; j < end; ++j) {\n indentLine(this, j, how);\n }\n\n var newRanges = this.doc.sel.ranges;\n\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) {\n replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n\n if (i == this.doc.sel.primIndex) {\n ensureCursorVisible(this);\n }\n }\n }\n }),\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function getTokenAt(pos, precise) {\n return takeToken(this, pos, precise);\n },\n getLineTokens: function getLineTokens(line, precise) {\n return takeToken(this, Pos(line), precise, true);\n },\n getTokenTypeAt: function getTokenTypeAt(pos) {\n pos = _clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0,\n after = (styles.length - 1) / 2,\n ch = pos.ch;\n var type;\n\n if (ch == 0) {\n type = styles[2];\n } else {\n for (;;) {\n var mid = before + after >> 1;\n\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {\n after = mid;\n } else if (styles[mid * 2 + 1] < ch) {\n before = mid + 1;\n } else {\n type = styles[mid * 2 + 2];\n break;\n }\n }\n }\n\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n getModeAt: function getModeAt(pos) {\n var mode = this.doc.mode;\n\n if (!mode.innerMode) {\n return mode;\n }\n\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n getHelper: function getHelper(pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n getHelpers: function getHelpers(pos, type) {\n var found = [];\n\n if (!helpers.hasOwnProperty(type)) {\n return found;\n }\n\n var help = helpers[type],\n mode = this.getModeAt(pos);\n\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) {\n found.push(help[mode[type]]);\n }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n\n if (val) {\n found.push(val);\n }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) {\n found.push(cur.val);\n }\n }\n\n return found;\n },\n getStateAfter: function getStateAfter(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line);\n return getContextBefore(this, line + 1, precise).state;\n },\n cursorCoords: function cursorCoords(start, mode) {\n var pos,\n range = this.doc.sel.primary();\n\n if (start == null) {\n pos = range.head;\n } else if (_typeof(start) == \"object\") {\n pos = _clipPos(this.doc, start);\n } else {\n pos = start ? range.from() : range.to();\n }\n\n return _cursorCoords(this, pos, mode || \"page\");\n },\n charCoords: function charCoords(pos, mode) {\n return _charCoords(this, _clipPos(this.doc, pos), mode || \"page\");\n },\n coordsChar: function coordsChar(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return _coordsChar(this, coords.left, coords.top);\n },\n lineAtHeight: function lineAtHeight(height, mode) {\n height = fromCoordSystem(this, {\n top: height,\n left: 0\n }, mode || \"page\").top;\n return _lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function heightAtLine(line, mode, includeWidgets) {\n var end = false,\n lineObj;\n\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n\n if (line < this.doc.first) {\n line = this.doc.first;\n } else if (line > last) {\n line = last;\n end = true;\n }\n\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n\n return intoCoordSystem(this, lineObj, {\n top: 0,\n left: 0\n }, mode || \"page\", includeWidgets || end).top + (end ? this.doc.height - _heightAtLine(lineObj) : 0);\n },\n defaultTextHeight: function defaultTextHeight() {\n return textHeight(this.display);\n },\n defaultCharWidth: function defaultCharWidth() {\n return charWidth(this.display);\n },\n getViewport: function getViewport() {\n return {\n from: this.display.viewFrom,\n to: this.display.viewTo\n };\n },\n addWidget: function addWidget(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = _cursorCoords(this, _clipPos(this.doc, pos));\n var top = pos.bottom,\n left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below\n\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) {\n top = pos.top - node.offsetHeight;\n } else if (pos.bottom + node.offsetHeight <= vspace) {\n top = pos.bottom;\n }\n\n if (left + node.offsetWidth > hspace) {\n left = hspace - node.offsetWidth;\n }\n }\n\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") {\n left = 0;\n } else if (horiz == \"middle\") {\n left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n }\n\n node.style.left = left + \"px\";\n }\n\n if (scroll) {\n scrollIntoView(this, {\n left: left,\n top: top,\n right: left + node.offsetWidth,\n bottom: top + node.offsetHeight\n });\n }\n },\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n execCommand: function execCommand(cmd) {\n if (commands.hasOwnProperty(cmd)) {\n return commands[cmd].call(null, this);\n }\n },\n triggerElectric: methodOp(function (text) {\n triggerElectric(this, text);\n }),\n findPosH: function findPosH(from, amount, unit, visually) {\n var dir = 1;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n cur = _findPosH(this.doc, cur, dir, unit, visually);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveH: methodOp(function (dir, unit) {\n var this$1 = this;\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty()) {\n return _findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually);\n } else {\n return dir < 0 ? range.from() : range.to();\n }\n }, sel_move);\n }),\n deleteH: methodOp(function (dir, unit) {\n var sel = this.doc.sel,\n doc = this.doc;\n\n if (sel.somethingSelected()) {\n doc.replaceSelection(\"\", null, \"+delete\");\n } else {\n deleteNearSelection(this, function (range) {\n var other = _findPosH(doc, range.head, dir, unit, false);\n\n return dir < 0 ? {\n from: other,\n to: range.head\n } : {\n from: range.head,\n to: other\n };\n });\n }\n }),\n findPosV: function findPosV(from, amount, unit, goalColumn) {\n var dir = 1,\n x = goalColumn;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n var coords = _cursorCoords(this, cur, \"div\");\n\n if (x == null) {\n x = coords.left;\n } else {\n coords.left = x;\n }\n\n cur = _findPosV(this, coords, dir, unit);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveV: methodOp(function (dir, unit) {\n var this$1 = this;\n var doc = this.doc,\n goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse) {\n return dir < 0 ? range.from() : range.to();\n }\n\n var headPos = _cursorCoords(this$1, range.head, \"div\");\n\n if (range.goalColumn != null) {\n headPos.left = range.goalColumn;\n }\n\n goals.push(headPos.left);\n\n var pos = _findPosV(this$1, headPos, dir, unit);\n\n if (unit == \"page\" && range == doc.sel.primary()) {\n addToScrollTop(this$1, _charCoords(this$1, pos, \"div\").top - headPos.top);\n }\n\n return pos;\n }, sel_move);\n\n if (goals.length) {\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n doc.sel.ranges[i].goalColumn = goals[i];\n }\n }\n }),\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function findWordAt(pos) {\n var doc = this.doc,\n line = getLine(doc, pos.line).text;\n var start = pos.ch,\n end = pos.ch;\n\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n\n if ((pos.sticky == \"before\" || end == line.length) && start) {\n --start;\n } else {\n ++end;\n }\n\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper) ? function (ch) {\n return isWordChar(ch, helper);\n } : /\\s/.test(startChar) ? function (ch) {\n return /\\s/.test(ch);\n } : function (ch) {\n return !/\\s/.test(ch) && !isWordChar(ch);\n };\n\n while (start > 0 && check(line.charAt(start - 1))) {\n --start;\n }\n\n while (end < line.length && check(line.charAt(end))) {\n ++end;\n }\n }\n\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n toggleOverwrite: function toggleOverwrite(value) {\n if (value != null && value == this.state.overwrite) {\n return;\n }\n\n if (this.state.overwrite = !this.state.overwrite) {\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n } else {\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function hasFocus() {\n return this.display.input.getField() == activeElt();\n },\n isReadOnly: function isReadOnly() {\n return !!(this.options.readOnly || this.doc.cantEdit);\n },\n scrollTo: methodOp(function (x, y) {\n scrollToCoords(this, x, y);\n }),\n getScrollInfo: function getScrollInfo() {\n var scroller = this.display.scroller;\n return {\n left: scroller.scrollLeft,\n top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this),\n clientWidth: displayWidth(this)\n };\n },\n scrollIntoView: methodOp(function (range, margin) {\n if (range == null) {\n range = {\n from: this.doc.sel.primary().head,\n to: null\n };\n\n if (margin == null) {\n margin = this.options.cursorScrollMargin;\n }\n } else if (typeof range == \"number\") {\n range = {\n from: Pos(range, 0),\n to: null\n };\n } else if (range.from == null) {\n range = {\n from: range,\n to: null\n };\n }\n\n if (!range.to) {\n range.to = range.from;\n }\n\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n setSize: methodOp(function (width, height) {\n var this$1 = this;\n\n var interpret = function interpret(val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n };\n\n if (width != null) {\n this.display.wrapper.style.width = interpret(width);\n }\n\n if (height != null) {\n this.display.wrapper.style.height = interpret(height);\n }\n\n if (this.options.lineWrapping) {\n clearLineMeasurementCache(this);\n }\n\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].noHScroll) {\n regLineChange(this$1, lineNo, \"widget\");\n break;\n }\n }\n }\n\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n operation: function operation(f) {\n return runInOp(this, f);\n },\n startOperation: function startOperation() {\n return _startOperation(this);\n },\n endOperation: function endOperation() {\n return _endOperation(this);\n },\n refresh: methodOp(function () {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) {\n estimateLineHeights(this);\n }\n\n signal(this, \"refresh\", this);\n }),\n swapDoc: methodOp(function (doc) {\n var old = this.doc;\n old.cm = null; // Cancel the current text selection if any (#5821)\n\n if (this.state.selectingText) {\n this.state.selectingText();\n }\n\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n phrase: function phrase(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;\n },\n getInputField: function getInputField() {\n return this.display.input.getField();\n },\n getWrapperElement: function getWrapperElement() {\n return this.display.wrapper;\n },\n getScrollerElement: function getScrollerElement() {\n return this.display.scroller;\n },\n getGutterElement: function getGutterElement() {\n return this.display.gutters;\n }\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function (type, name, value) {\n if (!helpers.hasOwnProperty(type)) {\n helpers[type] = CodeMirror[type] = {\n _global: []\n };\n }\n\n helpers[type][name] = value;\n };\n\n CodeMirror.registerGlobalHelper = function (type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n\n helpers[type]._global.push({\n pred: predicate,\n val: value\n });\n };\n } // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"char\", \"column\" (like char, but doesn't\n // cross line boundaries), \"word\" (across next word), or \"group\" (to\n // the start of next group of word or non-word-non-whitespace\n // chars). The visually param controls whether, in right-to-left\n // text, direction 1 means to move towards the next index in the\n // string, or towards the character to the right of the current\n // position. The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n\n\n function _findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n\n function findNextLine() {\n var l = pos.line + lineDir;\n\n if (l < doc.first || l >= doc.first + doc.size) {\n return false;\n }\n\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l);\n }\n\n function moveOnce(boundToLine) {\n var next;\n\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n\n if (next == null) {\n if (!boundToLine && findNextLine()) {\n pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir);\n } else {\n return false;\n }\n } else {\n pos = next;\n }\n\n return true;\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null,\n group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) {\n break;\n }\n\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\" : group && cur == \"\\n\" ? \"n\" : !group || /\\s/.test(cur) ? null : \"p\";\n\n if (group && !first && !type) {\n type = \"s\";\n }\n\n if (sawType && sawType != type) {\n if (dir < 0) {\n dir = 1;\n moveOnce();\n pos.sticky = \"after\";\n }\n\n break;\n }\n\n if (type) {\n sawType = type;\n }\n\n if (dir > 0 && !moveOnce(!first)) {\n break;\n }\n }\n }\n\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n\n if (equalCursorPos(oldPos, result)) {\n result.hitSide = true;\n }\n\n return result;\n } // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n\n\n function _findPosV(cm, pos, dir, unit) {\n var doc = cm.doc,\n x = pos.left,\n y;\n\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n\n var target;\n\n for (;;) {\n target = _coordsChar(cm, x, y);\n\n if (!target.outside) {\n break;\n }\n\n if (dir < 0 ? y <= 0 : y >= doc.height) {\n target.hitSide = true;\n break;\n }\n\n y += dir * 5;\n }\n\n return target;\n } // CONTENTEDITABLE INPUT STYLE\n\n\n var ContentEditableInput = function ContentEditableInput(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n } // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n\n\n if (ie_version <= 11) {\n setTimeout(operation(cm, function () {\n return this$1.updateFromDOM();\n }), 20);\n }\n });\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) {\n this$1.readFromDOMSoon();\n }\n\n this$1.composing.done = true;\n }\n });\n on(div, \"touchstart\", function () {\n return input.forceCompositionEnd();\n });\n on(div, \"input\", function () {\n if (!this$1.composing) {\n this$1.readFromDOMSoon();\n }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n\n if (e.type == \"cut\") {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\"); // iOS exposes the clipboard API, but seems to discard content inserted into it\n\n e.clipboardData.setData(\"Text\", content);\n\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return;\n }\n } // Old-fashioned briefly-focus-a-textarea hack\n\n\n var kludge = hiddenTextarea(),\n te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n\n if (hadFocus == div) {\n input.showPrimarySelection();\n }\n }, 50);\n }\n\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result;\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) {\n return;\n }\n\n if (info.focus || takeFocus) {\n this.showPrimarySelection();\n }\n\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection();\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(),\n cm = this.cm,\n prim = cm.doc.sel.primary();\n var from = prim.from(),\n to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return;\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) {\n return;\n }\n\n var view = cm.display.view;\n var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || {\n node: view[0].measure.map[2],\n offset: 0\n };\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {\n node: map[map.length - 1],\n offset: map[map.length - 2] - map[map.length - 3]\n };\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return;\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0),\n rng;\n\n try {\n rng = range(start.node, start.offset, end.offset, end.node);\n } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n\n\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n\n if (old && sel.anchorNode == null) {\n sel.addRange(old);\n } else if (gecko) {\n this.startGracePeriod();\n }\n }\n\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n\n if (this$1.selectionChanged()) {\n this$1.cm.operation(function () {\n return this$1.cm.curOp.selectionChanged = true;\n });\n }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode;\n this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode;\n this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n\n if (!sel.rangeCount) {\n return false;\n }\n\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node);\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor()) {\n this.showSelection(this.prepareSelection(), true);\n }\n\n this.div.focus();\n }\n };\n\n ContentEditableInput.prototype.blur = function () {\n this.div.blur();\n };\n\n ContentEditableInput.prototype.getField = function () {\n return this.div;\n };\n\n ContentEditableInput.prototype.supportsTouch = function () {\n return true;\n };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n\n if (this.selectionInEditor()) {\n this.pollSelection();\n } else {\n runInOp(this.cm, function () {\n return input.cm.curOp.selectionChanged = true;\n });\n }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {\n return;\n }\n\n var sel = this.getSelection(),\n cm = this.cm; // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({\n type: \"keydown\",\n keyCode: 8,\n preventDefault: Math.abs\n });\n this.blur();\n this.focus();\n return;\n }\n\n if (this.composing) {\n return;\n }\n\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (anchor && head) {\n runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n\n if (anchor.bad || head.bad) {\n cm.curOp.selectionChanged = true;\n }\n });\n }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm,\n display = cm.display,\n sel = cm.doc.sel.primary();\n var from = sel.from(),\n to = sel.to();\n\n if (from.ch == 0 && from.line > cm.firstLine()) {\n from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);\n }\n\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {\n to = Pos(to.line + 1, 0);\n }\n\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) {\n return false;\n }\n\n var fromIndex, fromLine, fromNode;\n\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) {\n return false;\n }\n\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) {\n newText.pop();\n oldText.pop();\n toLine--;\n } else if (newText[0] == oldText[0]) {\n newText.shift();\n oldText.shift();\n fromLine++;\n } else {\n break;\n }\n }\n\n var cutFront = 0,\n cutEnd = 0;\n var newTop = newText[0],\n oldTop = oldText[0],\n maxCutFront = Math.min(newTop.length, oldTop.length);\n\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {\n ++cutFront;\n }\n\n var newBot = lst(newText),\n oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));\n\n while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n ++cutEnd;\n } // Try to move start of change to start of selection if ambiguous\n\n\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n _replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n\n return true;\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) {\n return;\n }\n\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) {\n return;\n }\n\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n\n if (this$1.composing) {\n if (this$1.composing.done) {\n this$1.composing = null;\n } else {\n return;\n }\n }\n\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent()) {\n runInOp(this.cm, function () {\n return regChange(this$1.cm);\n });\n }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) {\n return;\n }\n\n e.preventDefault();\n\n if (!this.cm.isReadOnly()) {\n operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);\n }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n\n if (!view || view.hidden) {\n return null;\n }\n\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n var order = getOrder(line, cm.doc.direction),\n side = \"left\";\n\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result;\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode) {\n if (/CodeMirror-gutter-wrapper/.test(scan.className)) {\n return true;\n }\n }\n\n return false;\n }\n\n function badPos(pos, bad) {\n if (bad) {\n pos.bad = true;\n }\n\n return pos;\n }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\",\n closing = false,\n lineSep = cm.doc.lineSeparator(),\n extraLinebreak = false;\n\n function recognizeMarker(id) {\n return function (marker) {\n return marker.id == id;\n };\n }\n\n function close() {\n if (closing) {\n text += lineSep;\n\n if (extraLinebreak) {\n text += lineSep;\n }\n\n closing = extraLinebreak = false;\n }\n }\n\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n\n if (cmText) {\n addText(cmText);\n return;\n }\n\n var markerID = node.getAttribute(\"cm-marker\"),\n range;\n\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n\n if (found.length && (range = found[0].find(0))) {\n addText(getBetween(cm.doc, range.from, range.to).join(lineSep));\n }\n\n return;\n }\n\n if (node.getAttribute(\"contenteditable\") == \"false\") {\n return;\n }\n\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) {\n return;\n }\n\n if (isBlock) {\n close();\n }\n\n for (var i = 0; i < node.childNodes.length; i++) {\n walk(node.childNodes[i]);\n }\n\n if (/^(pre|p)$/i.test(node.nodeName)) {\n extraLinebreak = true;\n }\n\n if (isBlock) {\n closing = true;\n }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n\n for (;;) {\n walk(from);\n\n if (from == to) {\n break;\n }\n\n from = from.nextSibling;\n extraLinebreak = false;\n }\n\n return text;\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n\n if (!lineNode) {\n return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n }\n\n node = null;\n offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) {\n return null;\n }\n\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {\n break;\n }\n }\n }\n\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n\n if (lineView.node == lineNode) {\n return locateNodeInLineView(lineView, node, offset);\n }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild,\n bad = false;\n\n if (!node || !contains(wrapper, node)) {\n return badPos(Pos(lineNo(lineView.line), 0), true);\n }\n\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad);\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null,\n topNode = node;\n\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n\n if (offset) {\n offset = textNode.nodeValue.length;\n }\n }\n\n while (topNode.parentNode != wrapper) {\n topNode = topNode.parentNode;\n }\n\n var measure = lineView.measure,\n maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n\n if (offset < 0 || curNode != textNode) {\n ch = map[j + (offset ? 1 : 0)];\n }\n\n return Pos(line, ch);\n }\n }\n }\n }\n\n var found = find(textNode, topNode, offset);\n\n if (found) {\n return badPos(found, bad);\n } // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n\n\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n\n if (found) {\n return badPos(Pos(found.line, found.ch - dist), bad);\n } else {\n dist += after.textContent.length;\n }\n }\n\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n\n if (found) {\n return badPos(Pos(found.line, found.ch + dist$1), bad);\n } else {\n dist$1 += before.textContent.length;\n }\n }\n } // TEXTAREA INPUT STYLE\n\n\n var TextareaInput = function TextareaInput(cm) {\n this.cm = cm; // See input.poll and input.reset\n\n this.prevInput = \"\"; // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n\n this.pollingFast = false; // Self-resetting timeout for the poller\n\n this.polling = new Delayed(); // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n\n if (ios) {\n te.style.width = \"0px\";\n }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) {\n this$1.hasSelection = null;\n }\n\n input.poll();\n });\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n\n cm.state.pasteIncoming = +new Date();\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n\n if (e.type == \"cut\") {\n cm.state.cutIncoming = +new Date();\n }\n }\n\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {\n return;\n }\n\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date();\n input.focus();\n return;\n } // Pass the `paste` event to the textarea so it's handled by its event listener.\n\n\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n }); // Prevent normal selection in the editor (we handle our own)\n\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) {\n e_preventDefault(e);\n }\n });\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n\n if (input.composing) {\n input.composing.range.clear();\n }\n\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n })\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm,\n display = cm.display,\n doc = cm.doc;\n var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts\n\n if (cm.options.moveInputWithCursor) {\n var headPos = _cursorCoords(cm, doc.sel.primary().head, \"div\");\n\n var wrapOff = display.wrapper.getBoundingClientRect(),\n lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result;\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm,\n display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n }; // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n\n\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) {\n return;\n }\n\n var cm = this.cm;\n\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n\n if (cm.state.focused) {\n selectInput(this.textarea);\n }\n\n if (ie && ie_version >= 9) {\n this.hasSelection = content;\n }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n }\n };\n\n TextareaInput.prototype.getField = function () {\n return this.textarea;\n };\n\n TextareaInput.prototype.supportsTouch = function () {\n return false;\n };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try {\n this.textarea.focus();\n } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n\n }\n };\n\n TextareaInput.prototype.blur = function () {\n this.textarea.blur();\n };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () {\n this.slowPoll();\n }; // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n\n\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) {\n return;\n }\n\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n\n if (this$1.cm.state.focused) {\n this$1.slowPoll();\n }\n });\n }; // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n\n\n TextareaInput.prototype.fastPoll = function () {\n var missed = false,\n input = this;\n input.pollingFast = true;\n\n function p() {\n var changed = input.poll();\n\n if (!changed && !missed) {\n missed = true;\n input.polling.set(60, p);\n } else {\n input.pollingFast = false;\n input.slowPoll();\n }\n }\n\n input.polling.set(20, p);\n }; // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n\n\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n var cm = this.cm,\n input = this.textarea,\n prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n\n if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) {\n return false;\n }\n\n var text = input.value; // If nothing changed, bail.\n\n if (text == prevInput && !cm.somethingSelected()) {\n return false;\n } // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n\n\n if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false;\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n\n if (first == 0x200b && !prevInput) {\n prevInput = \"\\u200B\";\n }\n\n if (first == 0x21da) {\n this.reset();\n return this.cm.execCommand(\"undo\");\n }\n } // Find the part of the input that is actually new\n\n\n var same = 0,\n l = Math.min(prevInput.length, text.length);\n\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {\n ++same;\n }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? \"*compose\" : null); // Don't leave long text in the textarea, since it makes further polling slow\n\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) {\n input.value = this$1.prevInput = \"\";\n } else {\n this$1.prevInput = text;\n }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n });\n }\n });\n return true;\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) {\n this.pollingFast = false;\n }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this,\n cm = input.cm,\n display = cm.display,\n te = input.textarea;\n\n if (input.contextMenuPending) {\n input.contextMenuPending();\n }\n\n var pos = posFromMouse(cm, e),\n scrollPos = display.scroller.scrollTop;\n\n if (!pos || presto) {\n return;\n } // Opera is difficult.\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n\n\n var reset = cm.options.resetSelectionOnContextMenu;\n\n if (reset && cm.doc.sel.contains(pos) == -1) {\n operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n }\n\n var oldCSS = te.style.cssText,\n oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n\n if (webkit) {\n oldScrollY = window.scrollY;\n } // Work around Chrome issue (#2712)\n\n\n display.input.focus();\n\n if (webkit) {\n window.scrollTo(null, oldScrollY);\n }\n\n display.input.reset(); // Adds \"Select all\" to context menu in FF\n\n if (!cm.somethingSelected()) {\n te.value = input.prevInput = \" \";\n }\n\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200B\" + (selected ? te.value : \"\");\n te.value = \"\\u21DA\"; // Used to catch context-menu undo\n\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200B\";\n te.selectionStart = 1;\n te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the\n // selection in the meantime.\n\n display.selForContextMenu = cm.doc.sel;\n }\n }\n\n function rehide() {\n if (input.contextMenuPending != rehide) {\n return;\n }\n\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n\n if (ie && ie_version < 9) {\n display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n } // Try to detect the user choosing select-all\n\n\n if (te.selectionStart != null) {\n if (!ie || ie && ie_version < 9) {\n prepareSelectAllHack();\n }\n\n var i = 0,\n poll = function poll() {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == \"\\u200B\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) {\n prepareSelectAllHack();\n }\n\n if (captureRightClick) {\n e_stop(e);\n\n var mouseup = function mouseup() {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) {\n this.reset();\n }\n\n this.textarea.disabled = val == \"nocursor\";\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n\n if (!options.tabindex && textarea.tabIndex) {\n options.tabindex = textarea.tabIndex;\n }\n\n if (!options.placeholder && textarea.placeholder) {\n options.placeholder = textarea.placeholder;\n } // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n\n\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea || textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {\n textarea.value = cm.getValue();\n }\n\n var realSubmit;\n\n if (textarea.form) {\n on(textarea.form, \"submit\", save); // Deplorable hack to make the submit method do the right thing.\n\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch (e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n\n cm.getTextArea = function () {\n return textarea;\n };\n\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\") {\n textarea.form.submit = realSubmit;\n }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) {\n return textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n } // EDITOR CONSTRUCTOR\n\n\n defineOptions(CodeMirror);\n addEditorMethods(CodeMirror); // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n\n for (var prop in Doc.prototype) {\n if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {\n CodeMirror.prototype[prop] = function (method) {\n return function () {\n return method.apply(this.doc, arguments);\n };\n }(Doc.prototype[prop]);\n }\n }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\n \"textarea\": TextareaInput,\n \"contenteditable\": ContentEditableInput\n }; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n CodeMirror.defineMode = function (name\n /*, mode, …*/\n ) {\n if (!CodeMirror.defaults.mode && name != \"null\") {\n CodeMirror.defaults.mode = name;\n }\n\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME; // Minimal default mode.\n\n CodeMirror.defineMode(\"null\", function () {\n return {\n token: function token(stream) {\n return stream.skipToEnd();\n }\n };\n });\n CodeMirror.defineMIME(\"text/plain\", \"null\"); // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n addLegacyProps(CodeMirror);\n CodeMirror.version = \"5.52.0\";\n return CodeMirror;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanM/MGU1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHBzOi8vY29kZW1pcnJvci5uZXQpLCBhIGNvZGUgZWRpdG9yXG4vLyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IG9uIHRvcCBvZiB0aGUgYnJvd3NlcidzIERPTS5cbi8vXG4vLyBZb3UgY2FuIGZpbmQgc29tZSB0ZWNobmljYWwgYmFja2dyb3VuZCBmb3Igc29tZSBvZiB0aGUgY29kZSBiZWxvd1xuLy8gYXQgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nLyNjbS1pbnRlcm5hbHMgLlxuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkNvZGVNaXJyb3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgLy8gS2x1ZGdlcyBmb3IgYnVncyBhbmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMgdGhhdCBjYW4ndCBiZSBmZWF0dXJlXG4gIC8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuXG4gIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm07XG5cbiAgdmFyIGdlY2tvID0gL2dlY2tvXFwvXFxkL2kudGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgaWVfdXB0bzEwID0gL01TSUUgXFxkLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBpZV8xMXVwID0gL1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKHVzZXJBZ2VudCk7XG4gIHZhciBlZGdlID0gL0VkZ2VcXC8oXFxkKykvLmV4ZWModXNlckFnZW50KTtcbiAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXAgfHwgZWRnZTtcbiAgdmFyIGllX3ZlcnNpb24gPSBpZSAmJiAoaWVfdXB0bzEwID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDYgOiArKGVkZ2UgfHwgaWVfMTF1cClbMV0pO1xuICB2YXIgd2Via2l0ID0gIWVkZ2UgJiYgL1dlYktpdFxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XFwvXFxkK1xcLlxcZCsvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIC9DaHJvbWVcXC8vLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHByZXN0byA9IC9PcGVyYVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpO1xuICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBPUyBYIDFcXGRcXEQoWzgtOV18XFxkXFxkKVxcRC8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcGhhbnRvbSA9IC9QaGFudG9tSlMvLnRlc3QodXNlckFnZW50KTtcblxuICB2YXIgaW9zID0gIWVkZ2UgJiYgL0FwcGxlV2ViS2l0Ly50ZXN0KHVzZXJBZ2VudCkgJiYgL01vYmlsZVxcL1xcdysvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGFuZHJvaWQgPSAvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpO1xuICAvLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZvciBhbHRlcm5hdGl2ZSBtZXRob2RzIHdlbGNvbWUuXG4gIHZhciBtb2JpbGUgPSBpb3MgfHwgYW5kcm9pZCB8fCAvd2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChwbGF0Zm9ybSk7XG4gIHZhciBjaHJvbWVPUyA9IC9cXGJDck9TXFxiLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciB3aW5kb3dzID0gL3dpbi9pLnRlc3QocGxhdGZvcm0pO1xuXG4gIHZhciBwcmVzdG9fdmVyc2lvbiA9IHByZXN0byAmJiB1c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cXC8oXFxkKlxcLlxcZCopLyk7XG4gIGlmIChwcmVzdG9fdmVyc2lvbikgeyBwcmVzdG9fdmVyc2lvbiA9IE51bWJlcihwcmVzdG9fdmVyc2lvblsxXSk7IH1cbiAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9XG4gIC8vIFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBPUyBYXG4gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTtcbiAgdmFyIGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmIGllX3ZlcnNpb24gPj0gOSk7XG5cbiAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xzICsgXCIoPzokfFxcXFxzKVxcXFxzKlwiKSB9XG5cbiAgdmFyIHJtQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lO1xuICAgIHZhciBtYXRjaCA9IGNsYXNzVGVzdChjbHMpLmV4ZWMoY3VycmVudCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgYWZ0ZXIgPSBjdXJyZW50LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgIG5vZGUuY2xhc3NOYW1lID0gY3VycmVudC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAoYWZ0ZXIgPyBtYXRjaFsxXSArIGFmdGVyIDogXCJcIik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuKGUpIHtcbiAgICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudClcbiAgICAgIHsgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOyB9XG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHBhcmVudCwgZSkge1xuICAgIHJldHVybiByZW1vdmVDaGlsZHJlbihwYXJlbnQpLmFwcGVuZENoaWxkKGUpXG4gIH1cblxuICBmdW5jdGlvbiBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7XG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgaWYgKGNsYXNzTmFtZSkgeyBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuICAgIGlmIChzdHlsZSkgeyBlLnN0eWxlLmNzc1RleHQgPSBzdHlsZTsgfVxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiKSB7IGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOyB9XG4gICAgZWxzZSBpZiAoY29udGVudCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIHsgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsgfSB9XG4gICAgcmV0dXJuIGVcbiAgfVxuICAvLyB3cmFwcGVyIGZvciBlbHQsIHdoaWNoIHJlbW92ZXMgdGhlIGVsdCBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWVcbiAgZnVuY3Rpb24gZWx0UCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHtcbiAgICB2YXIgZSA9IGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpO1xuICAgIGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInByZXNlbnRhdGlvblwiKTtcbiAgICByZXR1cm4gZVxuICB9XG5cbiAgdmFyIHJhbmdlO1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7XG4gICAgdmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9kZSwgZW5kKTtcbiAgICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KTtcbiAgICByZXR1cm4gclxuICB9OyB9XG4gIGVsc2UgeyByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgdHJ5IHsgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9XG4gICAgY2F0Y2goZSkgeyByZXR1cm4gciB9XG4gICAgci5jb2xsYXBzZSh0cnVlKTtcbiAgICByLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIiwgZW5kKTtcbiAgICByLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBzdGFydCk7XG4gICAgcmV0dXJuIHJcbiAgfTsgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMykgLy8gQW5kcm9pZCBicm93c2VyIGFsd2F5cyByZXR1cm5zIGZhbHNlIHdoZW4gY2hpbGQgaXMgYSB0ZXh0bm9kZVxuICAgICAgeyBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7IH1cbiAgICBpZiAocGFyZW50LmNvbnRhaW5zKVxuICAgICAgeyByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKSB9XG4gICAgZG8ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDExKSB7IGNoaWxkID0gY2hpbGQuaG9zdDsgfVxuICAgICAgaWYgKGNoaWxkID09IHBhcmVudCkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKVxuICB9XG5cbiAgZnVuY3Rpb24gYWN0aXZlRWx0KCkge1xuICAgIC8vIElFIGFuZCBFZGdlIG1heSB0aHJvdyBhbiBcIlVuc3BlY2lmaWVkIEVycm9yXCIgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5cbiAgICAvLyBJRSA8IDEwIHdpbGwgdGhyb3cgd2hlbiBhY2Nlc3NlZCB3aGlsZSB0aGUgcGFnZSBpcyBsb2FkaW5nIG9yIGluIGFuIGlmcmFtZS5cbiAgICAvLyBJRSA+IDkgYW5kIEVkZ2Ugd2lsbCB0aHJvdyB3aGVuIGFjY2Vzc2VkIGluIGFuIGlmcmFtZSBpZiBkb2N1bWVudC5ib2R5IGlzIHVuYXZhaWxhYmxlLlxuICAgIHZhciBhY3RpdmVFbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5ib2R5IHx8IG51bGw7XG4gICAgfVxuICAgIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCAmJiBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudClcbiAgICAgIHsgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50OyB9XG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNscykge1xuICAgIHZhciBjdXJyZW50ID0gbm9kZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc1Rlc3QoY2xzKS50ZXN0KGN1cnJlbnQpKSB7IG5vZGUuY2xhc3NOYW1lICs9IChjdXJyZW50ID8gXCIgXCIgOiBcIlwiKSArIGNsczsgfVxuICB9XG4gIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGEsIGIpIHtcbiAgICB2YXIgYXMgPSBhLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAoYXNbaV0gJiYgIWNsYXNzVGVzdChhc1tpXSkudGVzdChiKSkgeyBiICs9IFwiIFwiICsgYXNbaV07IH0gfVxuICAgIHJldHVybiBiXG4gIH1cblxuICB2YXIgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0KCk7IH07XG4gIGlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLlxuICAgIHsgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAwOyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOyB9OyB9XG4gIGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzXG4gICAgeyBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsgfVxuXG4gIGZ1bmN0aW9uIGJpbmQoZikge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKX1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJnZXQsIG92ZXJ3cml0ZSkge1xuICAgIGlmICghdGFyZ2V0KSB7IHRhcmdldCA9IHt9OyB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopXG4gICAgICB7IGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYgKG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkpXG4gICAgICAgIHsgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOyB9IH1cbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC5cbiAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi5cbiAgZnVuY3Rpb24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHtcbiAgICBpZiAoZW5kID09IG51bGwpIHtcbiAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXFxzXFx1MDBhMF0vKTtcbiAgICAgIGlmIChlbmQgPT0gLTEpIHsgZW5kID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHtcbiAgICAgIHZhciBuZXh0VGFiID0gc3RyaW5nLmluZGV4T2YoXCJcXHRcIiwgaSk7XG4gICAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4dFRhYiA+PSBlbmQpXG4gICAgICAgIHsgcmV0dXJuIG4gKyAoZW5kIC0gaSkgfVxuICAgICAgbiArPSBuZXh0VGFiIC0gaTtcbiAgICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7XG4gICAgICBpID0gbmV4dFRhYiArIDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIERlbGF5ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlkID0gbnVsbDtcbiAgICB0aGlzLmYgPSBudWxsO1xuICAgIHRoaXMudGltZSA9IDA7XG4gICAgdGhpcy5oYW5kbGVyID0gYmluZCh0aGlzLm9uVGltZW91dCwgdGhpcyk7XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLm9uVGltZW91dCA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gICAgc2VsZi5pZCA9IDA7XG4gICAgaWYgKHNlbGYudGltZSA8PSArbmV3IERhdGUpIHtcbiAgICAgIHNlbGYuZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KHNlbGYuaGFuZGxlciwgc2VsZi50aW1lIC0gK25ldyBEYXRlKTtcbiAgICB9XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtcywgZikge1xuICAgIHRoaXMuZiA9IGY7XG4gICAgdmFyIHRpbWUgPSArbmV3IERhdGUgKyBtcztcbiAgICBpZiAoIXRoaXMuaWQgfHwgdGltZSA8IHRoaXMudGltZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpO1xuICAgICAgdGhpcy5pZCA9IHNldFRpbWVvdXQodGhpcy5oYW5kbGVyLCBtcyk7XG4gICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbHQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgeyBpZiAoYXJyYXlbaV0gPT0gZWx0KSB7IHJldHVybiBpIH0gfVxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHBpeGVscyBhZGRlZCB0byBzY3JvbGxlciBhbmQgc2l6ZXIgdG8gaGlkZSBzY3JvbGxiYXJcbiAgdmFyIHNjcm9sbGVyR2FwID0gMzA7XG5cbiAgLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdFxuICAvLyBoYW5kbGluZyB0aGlzJy5cbiAgdmFyIFBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuIFwiQ29kZU1pcnJvci5QYXNzXCJ9fTtcblxuICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHNcbiAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Njcm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiBcIiptb3VzZVwifSwgc2VsX21vdmUgPSB7b3JpZ2luOiBcIittb3ZlXCJ9O1xuXG4gIC8vIFRoZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvXG4gIC8vIGEgcGFydGljdWxhciBjb2x1bW4uXG4gIGZ1bmN0aW9uIGZpbmRDb2x1bW4oc3RyaW5nLCBnb2FsLCB0YWJTaXplKSB7XG4gICAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7XG4gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKFwiXFx0XCIsIHBvcyk7XG4gICAgICBpZiAobmV4dFRhYiA9PSAtMSkgeyBuZXh0VGFiID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpXG4gICAgICAgIHsgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwgLSBjb2wpIH1cbiAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7XG4gICAgICBwb3MgPSBuZXh0VGFiICsgMTtcbiAgICAgIGlmIChjb2wgPj0gZ29hbCkgeyByZXR1cm4gcG9zIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3BhY2VTdHJzID0gW1wiXCJdO1xuICBmdW5jdGlvbiBzcGFjZVN0cihuKSB7XG4gICAgd2hpbGUgKHNwYWNlU3Rycy5sZW5ndGggPD0gbilcbiAgICAgIHsgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyBcIiBcIik7IH1cbiAgICByZXR1cm4gc3BhY2VTdHJzW25dXG4gIH1cblxuICBmdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXSB9XG5cbiAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7IH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRTb3J0ZWQoYXJyYXksIHZhbHVlLCBzY29yZSkge1xuICAgIHZhciBwb3MgPSAwLCBwcmlvcml0eSA9IHNjb3JlKHZhbHVlKTtcbiAgICB3aGlsZSAocG9zIDwgYXJyYXkubGVuZ3RoICYmIHNjb3JlKGFycmF5W3Bvc10pIDw9IHByaW9yaXR5KSB7IHBvcysrOyB9XG4gICAgYXJyYXkuc3BsaWNlKHBvcywgMCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aGluZygpIHt9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7XG4gICAgdmFyIGluc3Q7XG4gICAgaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RoaW5nLnByb3RvdHlwZSA9IGJhc2U7XG4gICAgICBpbnN0ID0gbmV3IG5vdGhpbmcoKTtcbiAgICB9XG4gICAgaWYgKHByb3BzKSB7IGNvcHlPYmoocHJvcHMsIGluc3QpOyB9XG4gICAgcmV0dXJuIGluc3RcbiAgfVxuXG4gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXFx1MDBkZlxcdTA1ODdcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUzMDQwLVxcdTMwOWZcXHUzMGEwLVxcdTMwZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhYzAwLVxcdWQ3YWZdLztcbiAgZnVuY3Rpb24gaXNXb3JkQ2hhckJhc2ljKGNoKSB7XG4gICAgcmV0dXJuIC9cXHcvLnRlc3QoY2gpIHx8IGNoID4gXCJcXHg4MFwiICYmXG4gICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKVxuICB9XG4gIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gsIGhlbHBlcikge1xuICAgIGlmICghaGVscGVyKSB7IHJldHVybiBpc1dvcmRDaGFyQmFzaWMoY2gpIH1cbiAgICBpZiAoaGVscGVyLnNvdXJjZS5pbmRleE9mKFwiXFxcXHdcIikgPiAtMSAmJiBpc1dvcmRDaGFyQmFzaWMoY2gpKSB7IHJldHVybiB0cnVlIH1cbiAgICByZXR1cm4gaGVscGVyLnRlc3QoY2gpXG4gIH1cblxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGZvciAodmFyIG4gaW4gb2JqKSB7IGlmIChvYmouaGFzT3duUHJvcGVydHkobikgJiYgb2JqW25dKSB7IHJldHVybiBmYWxzZSB9IH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4gQSBzZXJpZXMgb2YgYSBub24tZXh0ZW5kaW5nIGNoYXIgK1xuICAvLyBhbnkgbnVtYmVyIG9mIGV4dGVuZGluZyBjaGFycyBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyXG4gIC8vIGFzIGVkaXRpbmcgYW5kIG1lYXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsXG4gIC8vIHNpbmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRyZWF0IG90aGVyIGNvbmZpZ3VyYXRpb25zXG4gIC8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAuXG4gIHZhciBleHRlbmRpbmdDaGFycyA9IC9bXFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg5XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjVlXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGUtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA5MDAtXFx1MDkwMlxcdTA5M2NcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDliY1xcdTA5YmVcXHUwOWMxLVxcdTA5YzRcXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MGEwMVxcdTBhMDJcXHUwYTNjXFx1MGE0MVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTcwXFx1MGE3MVxcdTBhNzVcXHUwYTgxXFx1MGE4MlxcdTBhYmNcXHUwYWMxLVxcdTBhYzVcXHUwYWM3XFx1MGFjOFxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBiMDFcXHUwYjNjXFx1MGIzZVxcdTBiM2ZcXHUwYjQxLVxcdTBiNDRcXHUwYjRkXFx1MGI1NlxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiODJcXHUwYmJlXFx1MGJjMFxcdTBiY2RcXHUwYmQ3XFx1MGMzZS1cXHUwYzQwXFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjYmNcXHUwY2JmXFx1MGNjMlxcdTBjYzZcXHUwY2NjXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwZDNlXFx1MGQ0MS1cXHUwZDQ0XFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkY2FcXHUwZGNmXFx1MGRkMi1cXHUwZGQ0XFx1MGRkNlxcdTBkZGZcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGYxOFxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOTAtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5XFx1MTAzYVxcdTEwM2RcXHUxMDNlXFx1MTA1OFxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzRcXHUxMDgyXFx1MTA4NVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyN1xcdTE5MjhcXHUxOTMyXFx1MTkzOS1cXHUxOTNiXFx1MWExN1xcdTFhMThcXHUxYTU2XFx1MWE1OC1cXHUxYTVlXFx1MWE2MFxcdTFhNjJcXHUxYTY1LVxcdTFhNmNcXHUxYTczLVxcdTFhN2NcXHUxYTdmXFx1MWIwMC1cXHUxYjAzXFx1MWIzNFxcdTFiMzYtXFx1MWIzYVxcdTFiM2NcXHUxYjQyXFx1MWI2Yi1cXHUxYjczXFx1MWI4MFxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4XFx1MWJhOVxcdTFjMmMtXFx1MWMzM1xcdTFjMzZcXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFkYzAtXFx1MWRlNlxcdTFkZmQtXFx1MWRmZlxcdTIwMGNcXHUyMDBkXFx1MjBkMC1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjZmLVxcdWE2NzJcXHVhNjdjXFx1YTY3ZFxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyNVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmNcXHVhYTI5LVxcdWFhMmVcXHVhYTMxXFx1YWEzMlxcdWFhMzVcXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYmU1XFx1YWJlOFxcdWFiZWRcXHVkYzAwLVxcdWRmZmZcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTI2XFx1ZmY5ZVxcdWZmOWZdLztcbiAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJldHVybiBjaC5jaGFyQ29kZUF0KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKSB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSByYW5nZSBbYDBgOyBgc3RyLmxlbmd0aGBdIHVubGVzcyBgcG9zYCBpcyBvdXRzaWRlIHRoYXQgcmFuZ2UuXG4gIGZ1bmN0aW9uIHNraXBFeHRlbmRpbmdDaGFycyhzdHIsIHBvcywgZGlyKSB7XG4gICAgd2hpbGUgKChkaXIgPCAwID8gcG9zID4gMCA6IHBvcyA8IHN0ci5sZW5ndGgpICYmIGlzRXh0ZW5kaW5nQ2hhcihzdHIuY2hhckF0KHBvcykpKSB7IHBvcyArPSBkaXI7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBmcm9tIHRoZSByYW5nZSBbYGZyb21gOyBgdG9gXSB0aGF0IHNhdGlzZmllc1xuICAvLyBgcHJlZGAgYW5kIGlzIGNsb3Nlc3QgdG8gYGZyb21gLiBBc3N1bWVzIHRoYXQgYXQgbGVhc3QgYHRvYFxuICAvLyBzYXRpc2ZpZXMgYHByZWRgLiBTdXBwb3J0cyBgZnJvbWAgYmVpbmcgZ3JlYXRlciB0aGFuIGB0b2AuXG4gIGZ1bmN0aW9uIGZpbmRGaXJzdChwcmVkLCBmcm9tLCB0bykge1xuICAgIC8vIEF0IGFueSBwb2ludCB3ZSBhcmUgY2VydGFpbiBgdG9gIHNhdGlzZmllcyBgcHJlZGAsIGRvbid0IGtub3dcbiAgICAvLyB3aGV0aGVyIGBmcm9tYCBkb2VzLlxuICAgIHZhciBkaXIgPSBmcm9tID4gdG8gPyAtMSA6IDE7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKGZyb20gPT0gdG8pIHsgcmV0dXJuIGZyb20gfVxuICAgICAgdmFyIG1pZEYgPSAoZnJvbSArIHRvKSAvIDIsIG1pZCA9IGRpciA8IDAgPyBNYXRoLmNlaWwobWlkRikgOiBNYXRoLmZsb29yKG1pZEYpO1xuICAgICAgaWYgKG1pZCA9PSBmcm9tKSB7IHJldHVybiBwcmVkKG1pZCkgPyBmcm9tIDogdG8gfVxuICAgICAgaWYgKHByZWQobWlkKSkgeyB0byA9IG1pZDsgfVxuICAgICAgZWxzZSB7IGZyb20gPSBtaWQgKyBkaXI7IH1cbiAgICB9XG4gIH1cblxuICAvLyBCSURJIEhFTFBFUlNcblxuICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikge1xuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIGYoZnJvbSwgdG8sIFwibHRyXCIsIDApIH1cbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKSB7XG4gICAgICAgIGYoTWF0aC5tYXgocGFydC5mcm9tLCBmcm9tKSwgTWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyBcInJ0bFwiIDogXCJsdHJcIiwgaSk7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgeyBmKGZyb20sIHRvLCBcImx0clwiKTsgfVxuICB9XG5cbiAgdmFyIGJpZGlPdGhlciA9IG51bGw7XG4gIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpIHtcbiAgICB2YXIgZm91bmQ7XG4gICAgYmlkaU90aGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY3VyID0gb3JkZXJbaV07XG4gICAgICBpZiAoY3VyLmZyb20gPCBjaCAmJiBjdXIudG8gPiBjaCkgeyByZXR1cm4gaSB9XG4gICAgICBpZiAoY3VyLnRvID09IGNoKSB7XG4gICAgICAgIGlmIChjdXIuZnJvbSAhPSBjdXIudG8gJiYgc3RpY2t5ID09IFwiYmVmb3JlXCIpIHsgZm91bmQgPSBpOyB9XG4gICAgICAgIGVsc2UgeyBiaWRpT3RoZXIgPSBpOyB9XG4gICAgICB9XG4gICAgICBpZiAoY3VyLmZyb20gPT0gY2gpIHtcbiAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50byAmJiBzdGlja3kgIT0gXCJiZWZvcmVcIikgeyBmb3VuZCA9IGk7IH1cbiAgICAgICAgZWxzZSB7IGJpZGlPdGhlciA9IGk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kICE9IG51bGwgPyBmb3VuZCA6IGJpZGlPdGhlclxuICB9XG5cbiAgLy8gQmlkaXJlY3Rpb25hbCBvcmRlcmluZyBhbGdvcml0aG1cbiAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobVxuICAvLyB0aGF0IHRoaXMgKHBhcnRpYWxseSkgaW1wbGVtZW50cy5cblxuICAvLyBPbmUtY2hhciBjb2RlcyB1c2VkIGZvciBjaGFyYWN0ZXIgdHlwZXM6XG4gIC8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHRcbiAgLy8gUiAoUik6ICAgUmlnaHQtdG8tTGVmdFxuICAvLyByIChBTCk6ICBSaWdodC10by1MZWZ0IEFyYWJpY1xuICAvLyAxIChFTik6ICBFdXJvcGVhbiBOdW1iZXJcbiAgLy8gKyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvclxuICAvLyAlIChFVCk6ICBFdXJvcGVhbiBOdW1iZXIgVGVybWluYXRvclxuICAvLyBuIChBTik6ICBBcmFiaWMgTnVtYmVyXG4gIC8vICwgKENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yXG4gIC8vIG0gKE5TTSk6IE5vbi1TcGFjaW5nIE1hcmtcbiAgLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbFxuICAvLyBzIChCKTogICBQYXJhZ3JhcGggU2VwYXJhdG9yXG4gIC8vIHQgKFMpOiAgIFNlZ21lbnQgU2VwYXJhdG9yXG4gIC8vIHcgKFdTKTogIFdoaXRlc3BhY2VcbiAgLy8gTiAoT04pOiAgT3RoZXIgTmV1dHJhbHNcblxuICAvLyBSZXR1cm5zIG51bGwgaWYgY2hhcmFjdGVycyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFwcGVhclxuICAvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfVxuICAvLyBvYmplY3RzKSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1YWxseS5cbiAgdmFyIGJpZGlPcmRlcmluZyA9IChmdW5jdGlvbigpIHtcbiAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmXG4gICAgdmFyIGxvd1R5cGVzID0gXCJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTlwiO1xuICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmOVxuICAgIHZhciBhcmFiaWNUeXBlcyA9IFwibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiO1xuICAgIGZ1bmN0aW9uIGNoYXJUeXBlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlIDw9IDB4ZjcpIHsgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChjb2RlKSB9XG4gICAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHsgcmV0dXJuIFwiUlwiIH1cbiAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDZmOSkgeyByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCkgfVxuICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSB7IHJldHVybiBcInJcIiB9XG4gICAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgeyByZXR1cm4gXCJ3XCIgfVxuICAgICAgZWxzZSBpZiAoY29kZSA9PSAweDIwMGMpIHsgcmV0dXJuIFwiYlwiIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gXCJMXCIgfVxuICAgIH1cblxuICAgIHZhciBiaWRpUkUgPSAvW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vO1xuICAgIHZhciBpc05ldXRyYWwgPSAvW3N0d05dLywgaXNTdHJvbmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywgY291bnRzQXNOdW0gPSAvWzFuXS87XG5cbiAgICBmdW5jdGlvbiBCaWRpU3BhbihsZXZlbCwgZnJvbSwgdG8pIHtcbiAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyLCBkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBvdXRlclR5cGUgPSBkaXJlY3Rpb24gPT0gXCJsdHJcIiA/IFwiTFwiIDogXCJSXCI7XG5cbiAgICAgIGlmIChzdHIubGVuZ3RoID09IDAgfHwgZGlyZWN0aW9uID09IFwibHRyXCIgJiYgIWJpZGlSRS50ZXN0KHN0cikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgeyB0eXBlcy5wdXNoKGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7IH1cblxuICAgICAgLy8gVzEuIEV4YW1pbmUgZWFjaCBub24tc3BhY2luZyBtYXJrIChOU00pIGluIHRoZSBsZXZlbCBydW4sIGFuZFxuICAgICAgLy8gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBOU00gdG8gdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzXG4gICAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGxcbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzb3IuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBwcmV2ID0gb3V0ZXJUeXBlOyBpJDEgPCBsZW47ICsraSQxKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNbaSQxXTtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJtXCIpIHsgdHlwZXNbaSQxXSA9IHByZXY7IH1cbiAgICAgICAgZWxzZSB7IHByZXYgPSB0eXBlOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlclxuICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW5cbiAgICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWNcbiAgICAgIC8vIG51bWJlci5cbiAgICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0byBSLlxuICAgICAgZm9yICh2YXIgaSQyID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpJDIgPCBsZW47ICsraSQyKSB7XG4gICAgICAgIHZhciB0eXBlJDEgPSB0eXBlc1tpJDJdO1xuICAgICAgICBpZiAodHlwZSQxID09IFwiMVwiICYmIGN1ciA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJuXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDEpKSB7IGN1ciA9IHR5cGUkMTsgaWYgKHR5cGUkMSA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJSXCI7IH0gfVxuICAgICAgfVxuXG4gICAgICAvLyBXNC4gQSBzaW5nbGUgRXVyb3BlYW4gc2VwYXJhdG9yIGJldHdlZW4gdHdvIEV1cm9wZWFuIG51bWJlcnNcbiAgICAgIC8vIGNoYW5nZXMgdG8gYSBFdXJvcGVhbiBudW1iZXIuIEEgc2luZ2xlIGNvbW1vbiBzZXBhcmF0b3IgYmV0d2VlblxuICAgICAgLy8gdHdvIG51bWJlcnMgb2YgdGhlIHNhbWUgdHlwZSBjaGFuZ2VzIHRvIHRoYXQgdHlwZS5cbiAgICAgIGZvciAodmFyIGkkMyA9IDEsIHByZXYkMSA9IHR5cGVzWzBdOyBpJDMgPCBsZW4gLSAxOyArK2kkMykge1xuICAgICAgICB2YXIgdHlwZSQyID0gdHlwZXNbaSQzXTtcbiAgICAgICAgaWYgKHR5cGUkMiA9PSBcIitcIiAmJiBwcmV2JDEgPT0gXCIxXCIgJiYgdHlwZXNbaSQzKzFdID09IFwiMVwiKSB7IHR5cGVzW2kkM10gPSBcIjFcIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDIgPT0gXCIsXCIgJiYgcHJldiQxID09IHR5cGVzW2kkMysxXSAmJlxuICAgICAgICAgICAgICAgICAocHJldiQxID09IFwiMVwiIHx8IHByZXYkMSA9PSBcIm5cIikpIHsgdHlwZXNbaSQzXSA9IHByZXYkMTsgfVxuICAgICAgICBwcmV2JDEgPSB0eXBlJDI7XG4gICAgICB9XG5cbiAgICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFuIHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuXG4gICAgICAvLyBudW1iZXJzIGNoYW5nZXMgdG8gYWxsIEV1cm9wZWFuIG51bWJlcnMuXG4gICAgICAvLyBXNi4gT3RoZXJ3aXNlLCBzZXBhcmF0b3JzIGFuZCB0ZXJtaW5hdG9ycyBjaGFuZ2UgdG8gT3RoZXJcbiAgICAgIC8vIE5ldXRyYWwuXG4gICAgICBmb3IgKHZhciBpJDQgPSAwOyBpJDQgPCBsZW47ICsraSQ0KSB7XG4gICAgICAgIHZhciB0eXBlJDMgPSB0eXBlc1tpJDRdO1xuICAgICAgICBpZiAodHlwZSQzID09IFwiLFwiKSB7IHR5cGVzW2kkNF0gPSBcIk5cIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDMgPT0gXCIlXCIpIHtcbiAgICAgICAgICB2YXIgZW5kID0gKHZvaWQgMCk7XG4gICAgICAgICAgZm9yIChlbmQgPSBpJDQgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIiVcIjsgKytlbmQpIHt9XG4gICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSQ0ICYmIHR5cGVzW2kkNC0xXSA9PSBcIiFcIikgfHwgKGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09IFwiMVwiKSA/IFwiMVwiIDogXCJOXCI7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGkkNDsgaiA8IGVuZDsgKytqKSB7IHR5cGVzW2pdID0gcmVwbGFjZTsgfVxuICAgICAgICAgIGkkNCA9IGVuZCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVzcuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyXG4gICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEwgaXNcbiAgICAgIC8vIGZvdW5kLCB0aGVuIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyIHRvIEwuXG4gICAgICBmb3IgKHZhciBpJDUgPSAwLCBjdXIkMSA9IG91dGVyVHlwZTsgaSQ1IDwgbGVuOyArK2kkNSkge1xuICAgICAgICB2YXIgdHlwZSQ0ID0gdHlwZXNbaSQ1XTtcbiAgICAgICAgaWYgKGN1ciQxID09IFwiTFwiICYmIHR5cGUkNCA9PSBcIjFcIikgeyB0eXBlc1tpJDVdID0gXCJMXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDQpKSB7IGN1ciQxID0gdHlwZSQ0OyB9XG4gICAgICB9XG5cbiAgICAgIC8vIE4xLiBBIHNlcXVlbmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlXG4gICAgICAvLyBzdXJyb3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVzIGhhcyB0aGUgc2FtZVxuICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBSIGluXG4gICAgICAvLyB0ZXJtcyBvZiB0aGVpciBpbmZsdWVuY2Ugb24gbmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKVxuICAgICAgLy8gYW5kIGVuZC1vZi1sZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMuXG4gICAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLlxuICAgICAgZm9yICh2YXIgaSQ2ID0gMDsgaSQ2IDwgbGVuOyArK2kkNikge1xuICAgICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlwZXNbaSQ2XSkpIHtcbiAgICAgICAgICB2YXIgZW5kJDEgPSAodm9pZCAwKTtcbiAgICAgICAgICBmb3IgKGVuZCQxID0gaSQ2ICsgMTsgZW5kJDEgPCBsZW4gJiYgaXNOZXV0cmFsLnRlc3QodHlwZXNbZW5kJDFdKTsgKytlbmQkMSkge31cbiAgICAgICAgICB2YXIgYmVmb3JlID0gKGkkNiA/IHR5cGVzW2kkNi0xXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCQxIDwgbGVuID8gdHlwZXNbZW5kJDFdIDogb3V0ZXJUeXBlKSA9PSBcIkxcIjtcbiAgICAgICAgICB2YXIgcmVwbGFjZSQxID0gYmVmb3JlID09IGFmdGVyID8gKGJlZm9yZSA/IFwiTFwiIDogXCJSXCIpIDogb3V0ZXJUeXBlO1xuICAgICAgICAgIGZvciAodmFyIGokMSA9IGkkNjsgaiQxIDwgZW5kJDE7ICsraiQxKSB7IHR5cGVzW2okMV0gPSByZXBsYWNlJDE7IH1cbiAgICAgICAgICBpJDYgPSBlbmQkMSAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGVyZSB3ZSBkZXBhcnQgZnJvbSB0aGUgZG9jdW1lbnRlZCBhbGdvcml0aG0sIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgICAvLyBidWlsZGluZyB1cCBhbiBhY3R1YWwgbGV2ZWxzIGFycmF5LiBTaW5jZSB0aGVyZSBhcmUgb25seSB0aHJlZVxuICAgICAgLy8gbGV2ZWxzICgwLCAxLCAyKSBpbiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZVxuICAgICAgLy8gZXhwbGljaXQgZW1iZWRkaW5nIGludG8gYWNjb3VudCwgd2UgY2FuIGJ1aWxkIHVwIHRoZSBvcmRlciBvblxuICAgICAgLy8gdGhlIGZseSwgd2l0aG91dCBmb2xsb3dpbmcgdGhlIGxldmVsLWJhc2VkIGFsZ29yaXRobS5cbiAgICAgIHZhciBvcmRlciA9IFtdLCBtO1xuICAgICAgZm9yICh2YXIgaSQ3ID0gMDsgaSQ3IDwgbGVuOykge1xuICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaSQ3XSkpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSBpJDc7XG4gICAgICAgICAgZm9yICgrK2kkNzsgaSQ3IDwgbGVuICYmIGNvdW50c0FzTGVmdC50ZXN0KHR5cGVzW2kkN10pOyArK2kkNykge31cbiAgICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBzdGFydCwgaSQ3KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHBvcyA9IGkkNywgYXQgPSBvcmRlci5sZW5ndGgsIGlzUlRMID0gZGlyZWN0aW9uID09IFwicnRsXCIgPyAxIDogMDtcbiAgICAgICAgICBmb3IgKCsraSQ3OyBpJDcgPCBsZW4gJiYgdHlwZXNbaSQ3XSAhPSBcIkxcIjsgKytpJDcpIHt9XG4gICAgICAgICAgZm9yICh2YXIgaiQyID0gcG9zOyBqJDIgPCBpJDc7KSB7XG4gICAgICAgICAgICBpZiAoY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKSkge1xuICAgICAgICAgICAgICBpZiAocG9zIDwgaiQyKSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaiQyKSk7IGF0ICs9IGlzUlRMOyB9XG4gICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqJDI7XG4gICAgICAgICAgICAgIGZvciAoKytqJDI7IGokMiA8IGkkNyAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2okMl0pOyArK2okMikge31cbiAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMiwgbnN0YXJ0LCBqJDIpKTtcbiAgICAgICAgICAgICAgYXQgKz0gaXNSVEw7XG4gICAgICAgICAgICAgIHBvcyA9IGokMjtcbiAgICAgICAgICAgIH0gZWxzZSB7ICsraiQyOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3MgPCBpJDcpIHsgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpJDcpKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09IFwibHRyXCIpIHtcbiAgICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL15cXHMrLykpKSB7XG4gICAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDAsIDAsIG1bMF0ubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxzdChvcmRlcikubGV2ZWwgPT0gMSAmJiAobSA9IHN0ci5tYXRjaCgvXFxzKyQvKSkpIHtcbiAgICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3RoLCBsZW4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09IFwicnRsXCIgPyBvcmRlci5yZXZlcnNlKCkgOiBvcmRlclxuICAgIH1cbiAgfSkoKTtcblxuICAvLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zXG4gIC8vIGZhbHNlIGZvciBsaW5lcyB0aGF0IGFyZSBmdWxseSBsZWZ0LXRvLXJpZ2h0LCBhbmQgYW4gYXJyYXkgb2ZcbiAgLy8gQmlkaVNwYW4gb2JqZWN0cyBvdGhlcndpc2UuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGxpbmUsIGRpcmVjdGlvbikge1xuICAgIHZhciBvcmRlciA9IGxpbmUub3JkZXI7XG4gICAgaWYgKG9yZGVyID09IG51bGwpIHsgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxpbmUudGV4dCwgZGlyZWN0aW9uKTsgfVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgLy8gRVZFTlQgSEFORExJTkdcblxuICAvLyBMaWdodHdlaWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLFxuICAvLyByZWdpc3RlcmluZyBuYXRpdmUgRE9NIGhhbmRsZXJzLlxuXG4gIHZhciBub0hhbmRsZXJzID0gW107XG5cbiAgdmFyIG9uID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikge1xuICAgIGlmIChlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KSB7XG4gICAgICBlbWl0dGVyLmF0dGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWFwID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pO1xuICAgICAgbWFwW3R5cGVdID0gKG1hcFt0eXBlXSB8fCBub0hhbmRsZXJzKS5jb25jYXQoZik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV0gfHwgbm9IYW5kbGVyc1xuICB9XG5cbiAgZnVuY3Rpb24gb2ZmKGVtaXR0ZXIsIHR5cGUsIGYpIHtcbiAgICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVudCkge1xuICAgICAgZW1pdHRlci5kZXRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hcCA9IGVtaXR0ZXIuX2hhbmRsZXJzLCBhcnIgPSBtYXAgJiYgbWFwW3R5cGVdO1xuICAgICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleE9mKGFyciwgZik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgIHsgbWFwW3R5cGVdID0gYXJyLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoYXJyLnNsaWNlKGluZGV4ICsgMSkpOyB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSk7XG4gICAgaWYgKCFoYW5kbGVycy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7ICsraSkgeyBoYW5kbGVyc1tpXS5hcHBseShudWxsLCBhcmdzKTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSBldmVudHMgdGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnlcbiAgLy8gcmVnaXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQgbmFtZSxcbiAgLy8gYW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZlbnQgaW4gdGhhdCBoYW5kbGVyLlxuICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHtcbiAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIilcbiAgICAgIHsgZSA9IHt0eXBlOiBlLCBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19OyB9XG4gICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTtcbiAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pIHtcbiAgICB2YXIgYXJyID0gY20uX2hhbmRsZXJzICYmIGNtLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtcbiAgICBpZiAoIWFycikgeyByZXR1cm4gfVxuICAgIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0gW10pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7IGlmIChpbmRleE9mKHNldCwgYXJyW2ldKSA9PSAtMSlcbiAgICAgIHsgc2V0LnB1c2goYXJyW2ldKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSkubGVuZ3RoID4gMFxuICB9XG5cbiAgLy8gQWRkIG9uIGFuZCBvZmYgbWV0aG9kcyB0byBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlLCB0byBtYWtlXG4gIC8vIHJlZ2lzdGVyaW5nIGV2ZW50cyBvbiBzdWNoIG9iamVjdHMgbW9yZSBjb252ZW5pZW50LlxuICBmdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHtcbiAgICBjdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9O1xuICAgIGN0b3IucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwgZik7fTtcbiAgfVxuXG4gIC8vIER1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWVcbiAgLy8gY29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLlxuXG4gIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkge1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgfVxuICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH1cbiAgICBlbHNlIHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlOyB9XG4gIH1cbiAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHtcbiAgICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNlXG4gIH1cbiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9XG5cbiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnR9XG4gIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHtcbiAgICB2YXIgYiA9IGUud2hpY2g7XG4gICAgaWYgKGIgPT0gbnVsbCkge1xuICAgICAgaWYgKGUuYnV0dG9uICYgMSkgeyBiID0gMTsgfVxuICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSB7IGIgPSAzOyB9XG4gICAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDQpIHsgYiA9IDI7IH1cbiAgICB9XG4gICAgaWYgKG1hYyAmJiBlLmN0cmxLZXkgJiYgYiA9PSAxKSB7IGIgPSAzOyB9XG4gICAgcmV0dXJuIGJcbiAgfVxuXG4gIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wXG4gIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IElcbiAgICAvLyBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7XG4gICAgcmV0dXJuIFwiZHJhZ2dhYmxlXCIgaW4gZGl2IHx8IFwiZHJhZ0Ryb3BcIiBpbiBkaXZcbiAgfSgpO1xuXG4gIHZhciB6d3NwU3VwcG9ydGVkO1xuICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50KG1lYXN1cmUpIHtcbiAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7XG4gICAgICB2YXIgdGVzdCA9IGVsdChcInNwYW5cIiwgXCJcXHUyMDBiXCIpO1xuICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBbdGVzdCwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpXSkpO1xuICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMClcbiAgICAgICAgeyB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKGllICYmIGllX3ZlcnNpb24gPCA4KTsgfVxuICAgIH1cbiAgICB2YXIgbm9kZSA9IHp3c3BTdXBwb3J0ZWQgPyBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKSA6XG4gICAgICBlbHQoXCJzcGFuXCIsIFwiXFx1MDBhMFwiLCBudWxsLCBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4XCIpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBcIlwiKTtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgLy8gRmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRpIHRleHRcbiAgdmFyIGJhZEJpZGlSZWN0cztcbiAgZnVuY3Rpb24gaGFzQmFkQmlkaVJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHsgcmV0dXJuIGJhZEJpZGlSZWN0cyB9XG4gICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiQVxcdTA2MmVBXCIpKTtcbiAgICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSk7XG4gICAgaWYgKCFyMCB8fCByMC5sZWZ0ID09IHIwLnJpZ2h0KSB7IHJldHVybiBmYWxzZSB9IC8vIFNhZmFyaSByZXR1cm5zIG51bGwgaW4gc29tZSBjYXNlcyAoIzI3ODApXG4gICAgcmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJpZ2h0IDwgMylcbiAgfVxuXG4gIC8vIFNlZSBpZiBcIlwiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW5cbiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLlxuICB2YXIgc3BsaXRMaW5lc0F1dG8gPSBcIlxcblxcbmJcIi5zcGxpdCgvXFxuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDw9IGwpIHtcbiAgICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKFwiXFxuXCIsIHBvcyk7XG4gICAgICBpZiAobmwgPT0gLTEpIHsgbmwgPSBzdHJpbmcubGVuZ3RoOyB9XG4gICAgICB2YXIgbGluZSA9IHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwgLSAxKSA9PSBcIlxcclwiID8gbmwgLSAxIDogbmwpO1xuICAgICAgdmFyIHJ0ID0gbGluZS5pbmRleE9mKFwiXFxyXCIpO1xuICAgICAgaWYgKHJ0ICE9IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUuc2xpY2UoMCwgcnQpKTtcbiAgICAgICAgcG9zICs9IHJ0ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUpO1xuICAgICAgICBwb3MgPSBubCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy5zcGxpdCgvXFxyXFxuP3xcXG4vKTsgfTtcblxuICB2YXIgaGFzU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGZ1bmN0aW9uICh0ZSkge1xuICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQgfVxuICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgfSA6IGZ1bmN0aW9uICh0ZSkge1xuICAgIHZhciByYW5nZTtcbiAgICB0cnkge3JhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9XG4gICAgY2F0Y2goZSkge31cbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKFwiU3RhcnRUb0VuZFwiLCByYW5nZSkgIT0gMFxuICB9O1xuXG4gIHZhciBoYXNDb3B5RXZlbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gZWx0KFwiZGl2XCIpO1xuICAgIGlmIChcIm9uY29weVwiIGluIGUpIHsgcmV0dXJuIHRydWUgfVxuICAgIGUuc2V0QXR0cmlidXRlKFwib25jb3B5XCIsIFwicmV0dXJuO1wiKTtcbiAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5ID09IFwiZnVuY3Rpb25cIlxuICB9KSgpO1xuXG4gIHZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7XG4gIGZ1bmN0aW9uIGhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkWm9vbWVkUmVjdHMgIT0gbnVsbCkgeyByZXR1cm4gYmFkWm9vbWVkUmVjdHMgfVxuICAgIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBcInhcIikpO1xuICAgIHZhciBub3JtYWwgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBmcm9tUmFuZ2UgPSByYW5nZShub2RlLCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gYmFkWm9vbWVkUmVjdHMgPSBNYXRoLmFicyhub3JtYWwubGVmdCAtIGZyb21SYW5nZS5sZWZ0KSA+IDFcbiAgfVxuXG4gIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FXG4gIHZhciBtb2RlcyA9IHt9LCBtaW1lTW9kZXMgPSB7fTtcblxuICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXNcbiAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseVxuICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5pc20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLilcbiAgZnVuY3Rpb24gZGVmaW5lTW9kZShuYW1lLCBtb2RlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKVxuICAgICAgeyBtb2RlLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7IH1cbiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZpbmVNSU1FKG1pbWUsIHNwZWMpIHtcbiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjO1xuICB9XG5cbiAgLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEge25hbWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZVxuICAvLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC5cbiAgZnVuY3Rpb24gcmVzb2x2ZU1vZGUoc3BlYykge1xuICAgIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkge1xuICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTtcbiAgICB9IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5uYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gXCJzdHJpbmdcIikgeyBmb3VuZCA9IHtuYW1lOiBmb3VuZH07IH1cbiAgICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQsIHNwZWMpO1xuICAgICAgc3BlYy5uYW1lID0gZm91bmQubmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCt4bWwkLy50ZXN0KHNwZWMpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU1vZGUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCtqc29uJC8udGVzdChzcGVjKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24vanNvblwiKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIikgeyByZXR1cm4ge25hbWU6IHNwZWN9IH1cbiAgICBlbHNlIHsgcmV0dXJuIHNwZWMgfHwge25hbWU6IFwibnVsbFwifSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgc3BlYyAoYW55dGhpbmcgdGhhdCByZXNvbHZlTW9kZSBhY2NlcHRzKSwgZmluZCBhbmRcbiAgLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGdldE1vZGUob3B0aW9ucywgc3BlYykge1xuICAgIHNwZWMgPSByZXNvbHZlTW9kZShzcGVjKTtcbiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdO1xuICAgIGlmICghbWZhY3RvcnkpIHsgcmV0dXJuIGdldE1vZGUob3B0aW9ucywgXCJ0ZXh0L3BsYWluXCIpIH1cbiAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpO1xuICAgIGlmIChtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zW3NwZWMubmFtZV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIGV4dHMpIHtcbiAgICAgICAgaWYgKCFleHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1vZGVPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgbW9kZU9ialtcIl9cIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsgfVxuICAgICAgICBtb2RlT2JqW3Byb3BdID0gZXh0c1twcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lO1xuICAgIGlmIChzcGVjLmhlbHBlclR5cGUpIHsgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOyB9XG4gICAgaWYgKHNwZWMubW9kZVByb3BzKSB7IGZvciAodmFyIHByb3AkMSBpbiBzcGVjLm1vZGVQcm9wcylcbiAgICAgIHsgbW9kZU9ialtwcm9wJDFdID0gc3BlYy5tb2RlUHJvcHNbcHJvcCQxXTsgfSB9XG5cbiAgICByZXR1cm4gbW9kZU9ialxuICB9XG5cbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbVxuICAvLyBvdXRzaWRlIHRoZSBhY3R1YWwgbW9kZSBkZWZpbml0aW9uLlxuICB2YXIgbW9kZUV4dGVuc2lvbnMgPSB7fTtcbiAgZnVuY3Rpb24gZXh0ZW5kTW9kZShtb2RlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pO1xuICAgIGNvcHlPYmoocHJvcGVydGllcywgZXh0cyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IHRydWUpIHsgcmV0dXJuIHN0YXRlIH1cbiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHsgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKSB9XG4gICAgdmFyIG5zdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHtcbiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgeyB2YWwgPSB2YWwuY29uY2F0KFtdKTsgfVxuICAgICAgbnN0YXRlW25dID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnN0YXRlXG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgYW5kIGEgc3RhdGUgKGZvciB0aGF0IG1vZGUpLCBmaW5kIHRoZSBpbm5lciBtb2RlIGFuZFxuICAvLyBzdGF0ZSBhdCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLlxuICBmdW5jdGlvbiBpbm5lck1vZGUobW9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaW5mbztcbiAgICB3aGlsZSAobW9kZS5pbm5lck1vZGUpIHtcbiAgICAgIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7XG4gICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIHsgYnJlYWsgfVxuICAgICAgc3RhdGUgPSBpbmZvLnN0YXRlO1xuICAgICAgbW9kZSA9IGluZm8ubW9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7XG4gICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZVxuICB9XG5cbiAgLy8gU1RSSU5HIFNUUkVBTVxuXG4gIC8vIEZlZCB0byB0aGUgbW9kZSBwYXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2VcbiAgLy8gcGFyc2VycyBtb3JlIHN1Y2NpbmN0LlxuXG4gIHZhciBTdHJpbmdTdHJlYW0gPSBmdW5jdGlvbihzdHJpbmcsIHRhYlNpemUsIGxpbmVPcmFjbGUpIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwO1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODtcbiAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7XG4gICAgdGhpcy5saW5lU3RhcnQgPSAwO1xuICAgIHRoaXMubGluZU9yYWNsZSA9IGxpbmVPcmFjbGU7XG4gIH07XG5cbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lb2wgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc29sID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnBvcyA9PSB0aGlzLmxpbmVTdGFydH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWR9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKVxuICAgICAgeyByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspIH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lYXQgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO1xuICAgIHZhciBvaztcbiAgICBpZiAodHlwZW9mIG1hdGNoID09IFwic3RyaW5nXCIpIHsgb2sgPSBjaCA9PSBtYXRjaDsgfVxuICAgIGVsc2UgeyBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOyB9XG4gICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNofVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFdoaWxlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0U3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKC9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHsgKyt0aGlzLnBvczsgfVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvRW5kID0gZnVuY3Rpb24gKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpO1xuICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWV9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFja1VwID0gZnVuY3Rpb24gKG4pIHt0aGlzLnBvcyAtPSBuO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY29sdW1uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7XG4gICAgICB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUsIHRoaXMubGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUpO1xuICAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdENvbHVtblZhbHVlIC0gKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLVxuICAgICAgKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIGNhc2VkID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7IH07XG4gICAgICB2YXIgc3Vic3RyID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICBpZiAoY2FzZWQoc3Vic3RyKSA9PSBjYXNlZChwYXR0ZXJuKSkge1xuICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ID4gMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOyB9XG4gICAgICByZXR1cm4gbWF0Y2hcbiAgICB9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uICgpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyl9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmhpZGVGaXJzdENoYXJzID0gZnVuY3Rpb24gKG4sIGlubmVyKSB7XG4gICAgdGhpcy5saW5lU3RhcnQgKz0gbjtcbiAgICB0cnkgeyByZXR1cm4gaW5uZXIoKSB9XG4gICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUubG9va0FoZWFkKG4pXG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUuYmFzZVRva2VuKHRoaXMucG9zKVxuICB9O1xuXG4gIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBnZXRMaW5lKGRvYywgbikge1xuICAgIG4gLT0gZG9jLmZpcnN0O1xuICAgIGlmIChuIDwgMCB8fCBuID49IGRvYy5zaXplKSB7IHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGxpbmUgXCIgKyAobiArIGRvYy5maXJzdCkgKyBcIiBpbiB0aGUgZG9jdW1lbnQuXCIpIH1cbiAgICB2YXIgY2h1bmsgPSBkb2M7XG4gICAgd2hpbGUgKCFjaHVuay5saW5lcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWsgfVxuICAgICAgICBuIC09IHN6O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2h1bmsubGluZXNbbl1cbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFydCBvZiBhIGRvY3VtZW50IGJldHdlZW4gdHdvIHBvc2l0aW9ucywgYXMgYW4gYXJyYXkgb2ZcbiAgLy8gc3RyaW5ncy5cbiAgZnVuY3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgb3V0ID0gW10sIG4gPSBzdGFydC5saW5lO1xuICAgIGRvYy5pdGVyKHN0YXJ0LmxpbmUsIGVuZC5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciB0ZXh0ID0gbGluZS50ZXh0O1xuICAgICAgaWYgKG4gPT0gZW5kLmxpbmUpIHsgdGV4dCA9IHRleHQuc2xpY2UoMCwgZW5kLmNoKTsgfVxuICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgeyB0ZXh0ID0gdGV4dC5zbGljZShzdGFydC5jaCk7IH1cbiAgICAgIG91dC5wdXNoKHRleHQpO1xuICAgICAgKytuO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXRcbiAgfVxuICAvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4gZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8pIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uIChsaW5lKSB7IG91dC5wdXNoKGxpbmUudGV4dCk7IH0pOyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgdHJ1dGh5IHZhbHVlXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZVxuICAvLyB1cHdhcmRzIHRvIHBhcmVudCBub2Rlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHtcbiAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0O1xuICAgIGlmIChkaWZmKSB7IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIHsgbi5oZWlnaHQgKz0gZGlmZjsgfSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIGxpbmUgb2JqZWN0LCBmaW5kIGl0cyBsaW5lIG51bWJlciBieSB3YWxraW5nIHVwIHRocm91Z2hcbiAgLy8gaXRzIHBhcmVudCBsaW5rcy5cbiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHtcbiAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTtcbiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7XG4gICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIHsgYnJlYWsgfVxuICAgICAgICBubyArPSBjaHVuay5jaGlsZHJlbltpXS5jaHVua1NpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0XG4gIH1cblxuICAvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodFxuICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS5cbiAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7XG4gICAgdmFyIG4gPSBjaHVuay5maXJzdDtcbiAgICBvdXRlcjogZG8ge1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpJDFdLCBjaCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlciB9XG4gICAgICAgIGggLT0gY2g7XG4gICAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gblxuICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcylcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDtcbiAgICAgIGlmIChoIDwgbGgpIHsgYnJlYWsgfVxuICAgICAgaCAtPSBsaDtcbiAgICB9XG4gICAgcmV0dXJuIG4gKyBpXG4gIH1cblxuICBmdW5jdGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZX1cblxuICBmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbnMubGluZU51bWJlckZvcm1hdHRlcihpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIpKVxuICB9XG5cbiAgLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC5cbiAgZnVuY3Rpb24gUG9zKGxpbmUsIGNoLCBzdGlja3kpIHtcbiAgICBpZiAoIHN0aWNreSA9PT0gdm9pZCAwICkgc3RpY2t5ID0gbnVsbDtcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSB7IHJldHVybiBuZXcgUG9zKGxpbmUsIGNoLCBzdGlja3kpIH1cbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIHRoaXMuY2ggPSBjaDtcbiAgICB0aGlzLnN0aWNreSA9IHN0aWNreTtcbiAgfVxuXG4gIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmVcbiAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLlxuICBmdW5jdGlvbiBjbXAoYSwgYikgeyByZXR1cm4gYS5saW5lIC0gYi5saW5lIHx8IGEuY2ggLSBiLmNoIH1cblxuICBmdW5jdGlvbiBlcXVhbEN1cnNvclBvcyhhLCBiKSB7IHJldHVybiBhLnN0aWNreSA9PSBiLnN0aWNreSAmJiBjbXAoYSwgYikgPT0gMCB9XG5cbiAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpfVxuICBmdW5jdGlvbiBtYXhQb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGIgOiBhIH1cbiAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYiB9XG5cbiAgLy8gTW9zdCBvZiB0aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBtYWtlIHN1cmUgdGhleVxuICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKX1cbiAgZnVuY3Rpb24gY2xpcFBvcyhkb2MsIHBvcykge1xuICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgeyByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCkgfVxuICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChwb3MubGluZSA+IGxhc3QpIHsgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpIH1cbiAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0Lmxlbmd0aClcbiAgfVxuICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVuKSB7XG4gICAgdmFyIGNoID0gcG9zLmNoO1xuICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikgeyByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKSB9XG4gICAgZWxzZSBpZiAoY2ggPCAwKSB7IHJldHVybiBQb3MocG9zLmxpbmUsIDApIH1cbiAgICBlbHNlIHsgcmV0dXJuIHBvcyB9XG4gIH1cbiAgZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywgYXJyYXkpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBvdXRbaV0gPSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOyB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgdmFyIFNhdmVkQ29udGV4dCA9IGZ1bmN0aW9uKHN0YXRlLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH07XG5cbiAgdmFyIENvbnRleHQgPSBmdW5jdGlvbihkb2MsIHN0YXRlLCBsaW5lLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLm1heExvb2tBaGVhZCA9IGxvb2tBaGVhZCB8fCAwO1xuICAgIHRoaXMuYmFzZVRva2VucyA9IG51bGw7XG4gICAgdGhpcy5iYXNlVG9rZW5Qb3MgPSAxO1xuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLmxvb2tBaGVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHRoaXMubGluZSArIG4pO1xuICAgIGlmIChsaW5lICE9IG51bGwgJiYgbiA+IHRoaXMubWF4TG9va0FoZWFkKSB7IHRoaXMubWF4TG9va0FoZWFkID0gbjsgfVxuICAgIHJldHVybiBsaW5lXG4gIH07XG5cbiAgQ29udGV4dC5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKG4pIHtcbiAgICBpZiAoIXRoaXMuYmFzZVRva2VucykgeyByZXR1cm4gbnVsbCB9XG4gICAgd2hpbGUgKHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10gPD0gbilcbiAgICAgIHsgdGhpcy5iYXNlVG9rZW5Qb3MgKz0gMjsgfVxuICAgIHZhciB0eXBlID0gdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zICsgMV07XG4gICAgcmV0dXJuIHt0eXBlOiB0eXBlICYmIHR5cGUucmVwbGFjZSgvKCB8XilvdmVybGF5IC4qLywgXCJcIiksXG4gICAgICAgICAgICBzaXplOiB0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdIC0gbn1cbiAgfTtcblxuICBDb250ZXh0LnByb3RvdHlwZS5uZXh0TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpbmUrKztcbiAgICBpZiAodGhpcy5tYXhMb29rQWhlYWQgPiAwKSB7IHRoaXMubWF4TG9va0FoZWFkLS07IH1cbiAgfTtcblxuICBDb250ZXh0LmZyb21TYXZlZCA9IGZ1bmN0aW9uIChkb2MsIHNhdmVkLCBsaW5lKSB7XG4gICAgaWYgKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkLnN0YXRlKSwgbGluZSwgc2F2ZWQubG9va0FoZWFkKSB9XG4gICAgZWxzZVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkKSwgbGluZSkgfVxuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiAoY29weSkge1xuICAgIHZhciBzdGF0ZSA9IGNvcHkgIT09IGZhbHNlID8gY29weVN0YXRlKHRoaXMuZG9jLm1vZGUsIHRoaXMuc3RhdGUpIDogdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gdGhpcy5tYXhMb29rQWhlYWQgPiAwID8gbmV3IFNhdmVkQ29udGV4dChzdGF0ZSwgdGhpcy5tYXhMb29rQWhlYWQpIDogc3RhdGVcbiAgfTtcblxuXG4gIC8vIENvbXB1dGUgYSBzdHlsZSBhcnJheSAoYW4gYXJyYXkgc3RhcnRpbmcgd2l0aCBhIG1vZGUgZ2VuZXJhdGlvblxuICAvLyAtLSBmb3IgaW52YWxpZGF0aW9uIC0tIGZvbGxvd2VkIGJ5IHBhaXJzIG9mIGVuZCBwb3NpdGlvbnMgYW5kXG4gIC8vIHN0eWxlIHN0cmluZ3MpLCB3aGljaCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgdG9rZW5zIG9uIHRoZVxuICAvLyBsaW5lLlxuICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0LCBmb3JjZVRvRW5kKSB7XG4gICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZVxuICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS5cbiAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307XG4gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBvZiBzdHlsZXNcbiAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkgeyByZXR1cm4gc3QucHVzaChlbmQsIHN0eWxlKTsgfSxcbiAgICAgICAgICAgIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKTtcbiAgICB2YXIgc3RhdGUgPSBjb250ZXh0LnN0YXRlO1xuXG4gICAgLy8gUnVuIG92ZXJsYXlzLCBhZGp1c3Qgc3R5bGUgYXJyYXkuXG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIG8gKSB7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlbnMgPSBzdDtcbiAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkgPSAxLCBhdCA9IDA7XG4gICAgICBjb250ZXh0LnN0YXRlID0gdHJ1ZTtcbiAgICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgb3ZlcmxheS5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSBpO1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXRcbiAgICAgICAgd2hpbGUgKGF0IDwgZW5kKSB7XG4gICAgICAgICAgdmFyIGlfZW5kID0gc3RbaV07XG4gICAgICAgICAgaWYgKGlfZW5kID4gZW5kKVxuICAgICAgICAgICAgeyBzdC5zcGxpY2UoaSwgMSwgZW5kLCBzdFtpKzFdLCBpX2VuZCk7IH1cbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0eWxlKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkge1xuICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsIFwib3ZlcmxheSBcIiArIHN0eWxlKTtcbiAgICAgICAgICBpID0gc3RhcnQgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoOyBzdGFydCA8IGk7IHN0YXJ0ICs9IDIpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSBzdFtzdGFydCsxXTtcbiAgICAgICAgICAgIHN0W3N0YXJ0KzFdID0gKGN1ciA/IGN1ciArIFwiIFwiIDogXCJcIikgKyBcIm92ZXJsYXkgXCIgKyBzdHlsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIGxpbmVDbGFzc2VzKTtcbiAgICAgIGNvbnRleHQuc3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnRleHQuYmFzZVRva2VucyA9IG51bGw7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlblBvcyA9IDE7XG4gICAgfTtcblxuICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIGxvb3AoIG8gKTtcblxuICAgIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCB1cGRhdGVGcm9udGllcikge1xuICAgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikge1xuICAgICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBsaW5lTm8obGluZSkpO1xuICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggJiYgY29weVN0YXRlKGNtLmRvYy5tb2RlLCBjb250ZXh0LnN0YXRlKTtcbiAgICAgIHZhciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0KTtcbiAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoIXJlc2V0U3RhdGUpO1xuICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzO1xuICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gcmVzdWx0LmNsYXNzZXM7IH1cbiAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgaWYgKHVwZGF0ZUZyb250aWVyID09PSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIpXG4gICAgICAgIHsgY20uZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGNtLmRvYy5tb2RlRnJvbnRpZXIsICsrY20uZG9jLmhpZ2hsaWdodEZyb250aWVyKTsgfVxuICAgIH1cbiAgICByZXR1cm4gbGluZS5zdHlsZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRleHRCZWZvcmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWRvYy5tb2RlLnN0YXJ0U3RhdGUpIHsgcmV0dXJuIG5ldyBDb250ZXh0KGRvYywgdHJ1ZSwgbikgfVxuICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpO1xuICAgIHZhciBzYXZlZCA9IHN0YXJ0ID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBzdGFydCAtIDEpLnN0YXRlQWZ0ZXI7XG4gICAgdmFyIGNvbnRleHQgPSBzYXZlZCA/IENvbnRleHQuZnJvbVNhdmVkKGRvYywgc2F2ZWQsIHN0YXJ0KSA6IG5ldyBDb250ZXh0KGRvYywgc3RhcnRTdGF0ZShkb2MubW9kZSksIHN0YXJ0KTtcblxuICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgY29udGV4dCk7XG4gICAgICB2YXIgcG9zID0gY29udGV4dC5saW5lO1xuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gcG9zID09IG4gLSAxIHx8IHBvcyAlIDUgPT0gMCB8fCBwb3MgPj0gZGlzcGxheS52aWV3RnJvbSAmJiBwb3MgPCBkaXNwbGF5LnZpZXdUbyA/IGNvbnRleHQuc2F2ZSgpIDogbnVsbDtcbiAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICB9KTtcbiAgICBpZiAocHJlY2lzZSkgeyBkb2MubW9kZUZyb250aWVyID0gY29udGV4dC5saW5lOyB9XG4gICAgcmV0dXJuIGNvbnRleHRcbiAgfVxuXG4gIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kXG4gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMgdGhhdFxuICAvLyBhcmVuJ3QgY3VycmVudGx5IHZpc2libGUuXG4gIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdGFydEF0KSB7XG4gICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpO1xuICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFydEF0IHx8IDA7XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBjYWxsQmxhbmtMaW5lKG1vZGUsIGNvbnRleHQuc3RhdGUpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG1vZGUuYmxhbmtMaW5lKSB7IHJldHVybiBtb2RlLmJsYW5rTGluZShzdGF0ZSkgfVxuICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIH1cbiAgICB2YXIgaW5uZXIgPSBpbm5lck1vZGUobW9kZSwgc3RhdGUpO1xuICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGluZSkgeyByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaWYgKGlubmVyKSB7IGlubmVyWzBdID0gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOyB9XG4gICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0cmVhbS5wb3MgPiBzdHJlYW0uc3RhcnQpIHsgcmV0dXJuIHN0eWxlIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIiArIG1vZGUubmFtZSArIFwiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIilcbiAgfVxuXG4gIHZhciBUb2tlbiA9IGZ1bmN0aW9uKHN0cmVhbSwgdHlwZSwgc3RhdGUpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyB0aGlzLmVuZCA9IHN0cmVhbS5wb3M7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgbnVsbDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBmb3IgZ2V0VG9rZW5BdCBhbmQgZ2V0TGluZVRva2Vuc1xuICBmdW5jdGlvbiB0YWtlVG9rZW4oY20sIHBvcywgcHJlY2lzZSwgYXNBcnJheSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIG1vZGUgPSBkb2MubW9kZSwgc3R5bGU7XG4gICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLCBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KSwgdG9rZW5zO1xuICAgIGlmIChhc0FycmF5KSB7IHRva2VucyA9IFtdOyB9XG4gICAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgaWYgKGFzQXJyYXkpIHsgdG9rZW5zLnB1c2gobmV3IFRva2VuKHN0cmVhbSwgc3R5bGUsIGNvcHlTdGF0ZShkb2MubW9kZSwgY29udGV4dC5zdGF0ZSkpKTsgfVxuICAgIH1cbiAgICByZXR1cm4gYXNBcnJheSA/IHRva2VucyA6IG5ldyBUb2tlbihzdHJlYW0sIHN0eWxlLCBjb250ZXh0LnN0YXRlKVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkge1xuICAgIGlmICh0eXBlKSB7IGZvciAoOzspIHtcbiAgICAgIHZhciBsaW5lQ2xhc3MgPSB0eXBlLm1hdGNoKC8oPzpefFxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcXFMrKS8pO1xuICAgICAgaWYgKCFsaW5lQ2xhc3MpIHsgYnJlYWsgfVxuICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7XG4gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/IFwiYmdDbGFzc1wiIDogXCJ0ZXh0Q2xhc3NcIjtcbiAgICAgIGlmIChvdXRwdXRbcHJvcF0gPT0gbnVsbClcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07IH1cbiAgICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cChcIig/Ol58XFxzKVwiICsgbGluZUNsYXNzWzJdICsgXCIoPzokfFxccylcIikpLnRlc3Qob3V0cHV0W3Byb3BdKSlcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gKz0gXCIgXCIgKyBsaW5lQ2xhc3NbMl07IH1cbiAgICB9IH1cbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLy8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9rZW4uXG4gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIGNvbnRleHQsIGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7XG4gICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zO1xuICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgeyBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsgfVxuICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpLCBzdHlsZTtcbiAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1vZGVDbGFzcyAmJiBbbnVsbF07XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBleHRyYWN0TGluZUNsYXNzZXMoY2FsbEJsYW5rTGluZShtb2RlLCBjb250ZXh0LnN0YXRlKSwgbGluZUNsYXNzZXMpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHtcbiAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7XG4gICAgICAgIGlmIChmb3JjZVRvRW5kKSB7IHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdHJlYW0ucG9zKTsgfVxuICAgICAgICBzdHJlYW0ucG9zID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIHN0eWxlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZXh0cmFjdExpbmVDbGFzc2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUsIGlubmVyKSwgbGluZUNsYXNzZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIHZhciBtTmFtZSA9IGlubmVyWzBdLm5hbWU7XG4gICAgICAgIGlmIChtTmFtZSkgeyBzdHlsZSA9IFwibS1cIiArIChzdHlsZSA/IG1OYW1lICsgXCIgXCIgKyBzdHlsZSA6IG1OYW1lKTsgfVxuICAgICAgfVxuICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHtcbiAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0ICsgNTAwMCk7XG4gICAgICAgICAgZihjdXJTdGFydCwgY3VyU3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGN1clN0eWxlID0gc3R5bGU7XG4gICAgICB9XG4gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICAgIH1cbiAgICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0ucG9zKSB7XG4gICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxvbmdlciB0aGFuIDU3NDQ0XG4gICAgICAvLyBjaGFyYWN0ZXJzLCBhbmQgcmV0dXJucyBpbmFjY3VyYXRlIG1lYXN1cmVtZW50cyBpbiBub2Rlc1xuICAgICAgLy8gc3RhcnRpbmcgYXJvdW5kIDUwMDAgY2hhcnMuXG4gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3VyU3RhcnQgKyA1MDAwKTtcbiAgICAgIGYocG9zLCBjdXJTdHlsZSk7XG4gICAgICBjdXJTdGFydCA9IHBvcztcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG9cbiAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYVxuICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZVxuICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0b1xuICAvLyBwYXJzZSBjb3JyZWN0bHkuXG4gIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lLCBkb2MgPSBjbS5kb2M7XG4gICAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJNb2RlID8gMTAwMCA6IDEwMCk7XG4gICAgZm9yICh2YXIgc2VhcmNoID0gbjsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkge1xuICAgICAgaWYgKHNlYXJjaCA8PSBkb2MuZmlyc3QpIHsgcmV0dXJuIGRvYy5maXJzdCB9XG4gICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2ggLSAxKSwgYWZ0ZXIgPSBsaW5lLnN0YXRlQWZ0ZXI7XG4gICAgICBpZiAoYWZ0ZXIgJiYgKCFwcmVjaXNlIHx8IHNlYXJjaCArIChhZnRlciBpbnN0YW5jZW9mIFNhdmVkQ29udGV4dCA/IGFmdGVyLmxvb2tBaGVhZCA6IDApIDw9IGRvYy5tb2RlRnJvbnRpZXIpKVxuICAgICAgICB7IHJldHVybiBzZWFyY2ggfVxuICAgICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpO1xuICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkge1xuICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTtcbiAgICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaW5saW5lXG4gIH1cblxuICBmdW5jdGlvbiByZXRyZWF0RnJvbnRpZXIoZG9jLCBuKSB7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWluKGRvYy5tb2RlRnJvbnRpZXIsIG4pO1xuICAgIGlmIChkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBuIC0gMTApIHsgcmV0dXJuIH1cbiAgICB2YXIgc3RhcnQgPSBkb2MuZmlyc3Q7XG4gICAgZm9yICh2YXIgbGluZSA9IG4gLSAxOyBsaW5lID4gc3RhcnQ7IGxpbmUtLSkge1xuICAgICAgdmFyIHNhdmVkID0gZ2V0TGluZShkb2MsIGxpbmUpLnN0YXRlQWZ0ZXI7XG4gICAgICAvLyBjaGFuZ2UgaXMgb24gM1xuICAgICAgLy8gc3RhdGUgb24gbGluZSAxIGxvb2tlZCBhaGVhZCAyIC0tIHNvIHNhdyAzXG4gICAgICAvLyB0ZXN0IDEgKyAyIDwgMyBzaG91bGQgY292ZXIgdGhpc1xuICAgICAgaWYgKHNhdmVkICYmICghKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KSB8fCBsaW5lICsgc2F2ZWQubG9va0FoZWFkIDwgbikpIHtcbiAgICAgICAgc3RhcnQgPSBsaW5lICsgMTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jLmhpZ2hsaWdodEZyb250aWVyID0gTWF0aC5taW4oZG9jLmhpZ2hsaWdodEZyb250aWVyLCBzdGFydCk7XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuXG4gIHZhciBzYXdSZWFkT25seVNwYW5zID0gZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc2VlUmVhZE9ubHlTcGFucygpIHtcbiAgICBzYXdSZWFkT25seVNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlZUNvbGxhcHNlZFNwYW5zKCkge1xuICAgIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRFWFRNQVJLRVIgU1BBTlNcblxuICBmdW5jdGlvbiBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHtcbiAgICB0aGlzLm1hcmtlciA9IG1hcmtlcjtcbiAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87XG4gIH1cblxuICAvLyBTZWFyY2ggYW4gYXJyYXkgb2Ygc3BhbnMgZm9yIGEgc3BhbiBtYXRjaGluZyB0aGUgZ2l2ZW4gbWFya2VyLlxuICBmdW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHtcbiAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHsgcmV0dXJuIHNwYW4gfVxuICAgIH0gfVxuICB9XG4gIC8vIFJlbW92ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBubyBzcGFucyBhcmVcbiAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5lcyB3aXRob3V0IHNwYW5zKS5cbiAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3Bhbikge1xuICAgIHZhciByO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IGlmIChzcGFuc1tpXSAhPSBzcGFuKSB7IChyIHx8IChyID0gW10pKS5wdXNoKHNwYW5zW2ldKTsgfSB9XG4gICAgcmV0dXJuIHJcbiAgfVxuICAvLyBBZGQgYSBzcGFuIHRvIGEgbGluZS5cbiAgZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDogW3NwYW5dO1xuICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7XG4gIH1cblxuICAvLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBjdXQgYW4gYXJyYXkgb2Ygc3BhbnMgYXQgYSBnaXZlblxuICAvLyBjaGFyYWN0ZXIgcG9zaXRpb24sIHJldHVybmluZyBhbiBhcnJheSBvZiByZW1haW5pbmcgY2h1bmtzIChvclxuICAvLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1haW5zKS5cbiAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2VydCkge1xuICAgIHZhciBudztcbiAgICBpZiAob2xkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7XG4gICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTtcbiAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7XG4gICAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gc3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8pKTtcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gbndcbiAgfVxuICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7XG4gICAgdmFyIG53O1xuICAgIGlmIChvbGQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjtcbiAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gZW5kQ2ggOiBzcGFuLnRvID4gZW5kQ2gpO1xuICAgICAgaWYgKGVuZHNBZnRlciB8fCBzcGFuLmZyb20gPT0gZW5kQ2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHtcbiAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnRvID09IG51bGwgPyBudWxsIDogc3Bhbi50byAtIGVuZENoKSk7XG4gICAgICB9XG4gICAgfSB9XG4gICAgcmV0dXJuIG53XG4gIH1cblxuICAvLyBHaXZlbiBhIGNoYW5nZSBvYmplY3QsIGNvbXB1dGUgdGhlIG5ldyBzZXQgb2YgbWFya2VyIHNwYW5zIHRoYXRcbiAgLy8gY292ZXIgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIGNoYW5nZSB0b29rIHBsYWNlLiBSZW1vdmVzIHNwYW5zXG4gIC8vIGVudGlyZWx5IHdpdGhpbiB0aGUgY2hhbmdlLCByZWNvbm5lY3RzIHNwYW5zIGJlbG9uZ2luZyB0byB0aGVcbiAgLy8gc2FtZSBtYXJrZXIgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiB0aGUgY2hhbmdlLCBhbmQgY3V0cyBvZmZcbiAgLy8gc3BhbnMgcGFydGlhbGx5IHdpdGhpbiB0aGUgY2hhbmdlLiBSZXR1cm5zIGFuIGFycmF5IG9mIHNwYW5cbiAgLy8gYXJyYXlzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBpbiAoYWZ0ZXIpIHRoZSBjaGFuZ2UuXG4gIGZ1bmN0aW9uIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHtcbiAgICBpZiAoY2hhbmdlLmZ1bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFucztcbiAgICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgIGlmICghb2xkRmlyc3QgJiYgIW9sZExhc3QpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7XG4gICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXNcbiAgICB2YXIgZmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRDaCwgaXNJbnNlcnQpO1xuICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNlcnQpO1xuXG4gICAgLy8gTmV4dCwgbWVyZ2UgdGhvc2UgdHdvIGVuZHNcbiAgICB2YXIgc2FtZUxpbmUgPSBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoc2FtZUxpbmUgPyBzdGFydENoIDogMCk7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAvLyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3RcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTtcbiAgICAgICAgaWYgKHNwYW4udG8gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IobGFzdCwgc3Bhbi5tYXJrZXIpO1xuICAgICAgICAgIGlmICghZm91bmQpIHsgc3Bhbi50byA9IHN0YXJ0Q2g7IH1cbiAgICAgICAgICBlbHNlIGlmIChzYW1lTGluZSkgeyBzcGFuLnRvID0gZm91bmQudG8gPT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNldDsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXN0KSB7XG4gICAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFzdCAob3IgbW92ZSB0aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSlcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGxhc3QubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgc3BhbiQxID0gbGFzdFtpJDFdO1xuICAgICAgICBpZiAoc3BhbiQxLnRvICE9IG51bGwpIHsgc3BhbiQxLnRvICs9IG9mZnNldDsgfVxuICAgICAgICBpZiAoc3BhbiQxLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCQxID0gZ2V0TWFya2VkU3BhbkZvcihmaXJzdCwgc3BhbiQxLm1hcmtlcik7XG4gICAgICAgICAgaWYgKCFmb3VuZCQxKSB7XG4gICAgICAgICAgICBzcGFuJDEuZnJvbSA9IG9mZnNldDtcbiAgICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3BhbiQxLmZyb20gKz0gb2Zmc2V0O1xuICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnNcbiAgICBpZiAoZmlyc3QpIHsgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3QpOyB9XG4gICAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgeyBsYXN0ID0gY2xlYXJFbXB0eVNwYW5zKGxhc3QpOyB9XG5cbiAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07XG4gICAgaWYgKCFzYW1lTGluZSkge1xuICAgICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zXG4gICAgICB2YXIgZ2FwID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMiwgZ2FwTWFya2VycztcbiAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KVxuICAgICAgICB7IGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IGZpcnN0Lmxlbmd0aDsgKytpJDIpXG4gICAgICAgICAgeyBpZiAoZmlyc3RbaSQyXS50byA9PSBudWxsKVxuICAgICAgICAgICAgeyAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihmaXJzdFtpJDJdLm1hcmtlciwgbnVsbCwgbnVsbCkpOyB9IH0gfVxuICAgICAgZm9yICh2YXIgaSQzID0gMDsgaSQzIDwgZ2FwOyArK2kkMylcbiAgICAgICAgeyBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7IH1cbiAgICAgIG5ld01hcmtlcnMucHVzaChsYXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hcmtlcnNcbiAgfVxuXG4gIC8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFyV2hlbkVtcHR5XG4gIC8vIG9wdGlvbiBvZiBmYWxzZS5cbiAgZnVuY3Rpb24gY2xlYXJFbXB0eVNwYW5zKHNwYW5zKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgICAgIHsgc3BhbnMuc3BsaWNlKGktLSwgMSk7IH1cbiAgICB9XG4gICAgaWYgKCFzcGFucy5sZW5ndGgpIHsgcmV0dXJuIG51bGwgfVxuICAgIHJldHVybiBzcGFuc1xuICB9XG5cbiAgLy8gVXNlZCB0byAnY2xpcCcgb3V0IHJlYWRPbmx5IHJhbmdlcyB3aGVuIG1ha2luZyBhIGNoYW5nZS5cbiAgZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykge1xuICAgIHZhciBtYXJrZXJzID0gbnVsbDtcbiAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBtYXJrID0gbGluZS5tYXJrZWRTcGFuc1tpXS5tYXJrZXI7XG4gICAgICAgIGlmIChtYXJrLnJlYWRPbmx5ICYmICghbWFya2VycyB8fCBpbmRleE9mKG1hcmtlcnMsIG1hcmspID09IC0xKSlcbiAgICAgICAgICB7IChtYXJrZXJzIHx8IChtYXJrZXJzID0gW10pKS5wdXNoKG1hcmspOyB9XG4gICAgICB9IH1cbiAgICB9KTtcbiAgICBpZiAoIW1hcmtlcnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFydHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIHAgPSBwYXJ0c1tqXTtcbiAgICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIHsgY29udGludWUgfVxuICAgICAgICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRvID0gY21wKHAudG8sIG0udG8pO1xuICAgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNpdmVMZWZ0ICYmICFkZnJvbSlcbiAgICAgICAgICB7IG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwgdG86IG0uZnJvbX0pOyB9XG4gICAgICAgIGlmIChkdG8gPiAwIHx8ICFtay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKVxuICAgICAgICAgIHsgbmV3UGFydHMucHVzaCh7ZnJvbTogbS50bywgdG86IHAudG99KTsgfVxuICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMsIG5ld1BhcnRzKTtcbiAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHNcbiAgfVxuXG4gIC8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS5cbiAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkge1xuICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgaWYgKCFzcGFucykgeyByZXR1cm4gfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOyB9XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gYXR0YWNoTWFya2VkU3BhbnMobGluZSwgc3BhbnMpIHtcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSlcbiAgICAgIHsgc3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7IH1cbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7XG4gIH1cblxuICAvLyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2VkIHNwYW5cbiAgLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLlxuICBmdW5jdGlvbiBleHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMCB9XG4gIGZ1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyAxIDogMCB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBzZWRcbiAgLy8gc3BhbnMgaXMgbGFyZ2VyIChhbmQgdGh1cyBpbmNsdWRlcyB0aGUgb3RoZXIpLiBGYWxscyBiYWNrIHRvXG4gIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS5cbiAgZnVuY3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoYSwgYikge1xuICAgIHZhciBsZW5EaWZmID0gYS5saW5lcy5sZW5ndGggLSBiLmxpbmVzLmxlbmd0aDtcbiAgICBpZiAobGVuRGlmZiAhPSAwKSB7IHJldHVybiBsZW5EaWZmIH1cbiAgICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7XG4gICAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVmdChhKSAtIGV4dHJhTGVmdChiKTtcbiAgICBpZiAoZnJvbUNtcCkgeyByZXR1cm4gLWZyb21DbXAgfVxuICAgIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTtcbiAgICBpZiAodG9DbXApIHsgcmV0dXJuIHRvQ21wIH1cbiAgICByZXR1cm4gYi5pZCAtIGEuaWRcbiAgfVxuXG4gIC8vIEZpbmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Igc3RhcnRzIGluIGEgY29sbGFwc2VkIHNwYW4uIElmXG4gIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3IgdGhhdCBzcGFuLlxuICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7XG4gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZvdW5kO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgc3AgPSAodm9pZCAwKSwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gc3BzW2ldO1xuICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNwLnRvKSA9PSBudWxsICYmXG4gICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKVxuICAgICAgICB7IGZvdW5kID0gc3AubWFya2VyOyB9XG4gICAgfSB9XG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCB0cnVlKSB9XG4gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIGZhbHNlKSB9XG5cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkFyb3VuZChsaW5lLCBjaCkge1xuICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDtcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3AuZnJvbSA9PSBudWxsIHx8IHNwLmZyb20gPCBjaCkgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBjaCkgJiZcbiAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpIHsgZm91bmQgPSBzcC5tYXJrZXI7IH1cbiAgICB9IH1cbiAgICByZXR1cm4gZm91bmRcbiAgfVxuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBzZWQgc3BhbiB0aGF0IHBhcnRpYWxseVxuICAvLyBvdmVybGFwcyAoY292ZXJzIHRoZSBzdGFydCBvciBlbmQsIGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi5cbiAgLy8gU3VjaCBvdmVybGFwIGlzIG5vdCBhbGxvd2VkLlxuICBmdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgbGluZU5vLCBmcm9tLCB0bywgbWFya2VyKSB7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU5vKTtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIHsgY29udGludWUgfVxuICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7XG4gICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpO1xuICAgICAgdmFyIHRvQ21wID0gY21wKGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpO1xuICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IGNtcChmb3VuZC50bywgZnJvbSkgPj0gMCA6IGNtcChmb3VuZC50bywgZnJvbSkgPiAwKSB8fFxuICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoc3AubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gY21wKGZvdW5kLmZyb20sIHRvKSA8PSAwIDogY21wKGZvdW5kLmZyb20sIHRvKSA8IDApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuXG4gIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRpbmcsIGZvclxuICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBsaW5lcyB0byBhcHBlYXIgb24gdGhlIHNhbWVcbiAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZVxuICAvLyBnaXZlbiBsaW5lIGlzIHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLlxuICBmdW5jdGlvbiB2aXN1YWxMaW5lKGxpbmUpIHtcbiAgICB2YXIgbWVyZ2VkO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVlKS5saW5lOyB9XG4gICAgcmV0dXJuIGxpbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVFbmQobGluZSkge1xuICAgIHZhciBtZXJnZWQ7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBsb2dpY2FsIGxpbmVzIHRoYXQgY29udGludWUgdGhlIHZpc3VhbCBsaW5lXG4gIC8vIHN0YXJ0ZWQgYnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGluZXMuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkge1xuICAgIHZhciBtZXJnZWQsIGxpbmVzO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpIHtcbiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lXG4gICAgICA7KGxpbmVzIHx8IChsaW5lcyA9IFtdKSkucHVzaChsaW5lKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGVcbiAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZU5vKGRvYywgbGluZU4pIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgaWYgKGxpbmUgPT0gdmlzKSB7IHJldHVybiBsaW5lTiB9XG4gICAgcmV0dXJuIGxpbmVObyh2aXMpXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRlclxuICAvLyB0aGUgZ2l2ZW4gbGluZS5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywgbGluZU4pIHtcbiAgICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gbGluZU4gfVxuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgbWVyZ2VkO1xuICAgIGlmICghbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHsgcmV0dXJuIGxpbmVOIH1cbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKVxuICAgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsgfVxuICAgIHJldHVybiBsaW5lTm8obGluZSkgKyAxXG4gIH1cblxuICAvLyBDb21wdXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4gdGhleVxuICAvLyBhcmUgcGFydCBvZiBhIHZpc3VhbCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYW5vdGhlciBsaW5lLCBvciB3aGVuXG4gIC8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29sbGFwc2VkLCBub24td2lkZ2V0IHNwYW4uXG4gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpIHtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICBzcCA9IHNwc1tpXTtcbiAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmIChzcC5tYXJrZXIud2lkZ2V0Tm9kZSkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHtcbiAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7XG4gICAgICB2YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmluZCgxLCB0cnVlKTtcbiAgICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZC5saW5lLCBnZXRNYXJrZWRTcGFuRm9yKGVuZC5saW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpXG4gICAgfVxuICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgICBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTtcbiAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiZcbiAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCBzcC50byAhPSBzcGFuLmZyb20pICYmXG4gICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJlxuICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuXG4gIGZ1bmN0aW9uIGhlaWdodEF0TGluZShsaW5lT2JqKSB7XG4gICAgbGluZU9iaiA9IHZpc3VhbExpbmUobGluZU9iaik7XG5cbiAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lID09IGxpbmVPYmopIHsgYnJlYWsgfVxuICAgICAgZWxzZSB7IGggKz0gbGluZS5oZWlnaHQ7IH1cbiAgICB9XG4gICAgZm9yICh2YXIgcCA9IGNodW5rLnBhcmVudDsgcDsgY2h1bmsgPSBwLCBwID0gY2h1bmsucGFyZW50KSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwLmNoaWxkcmVuLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgICAgdmFyIGN1ciA9IHAuY2hpbGRyZW5baSQxXTtcbiAgICAgICAgaWYgKGN1ciA9PSBjaHVuaykgeyBicmVhayB9XG4gICAgICAgIGVsc2UgeyBoICs9IGN1ci5oZWlnaHQ7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50XG4gIC8vIGNvbGxhcHNlZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQgam9pblxuICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LlxuICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHtcbiAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgeyByZXR1cm4gMCB9XG4gICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTtcbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7XG4gICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7XG4gICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoO1xuICAgIH1cbiAgICBjdXIgPSBsaW5lO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kJDEgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTtcbiAgICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZCQxLmZyb20uY2g7XG4gICAgICBjdXIgPSBmb3VuZCQxLnRvLmxpbmU7XG4gICAgICBsZW4gKz0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQkMS50by5jaDtcbiAgICB9XG4gICAgcmV0dXJuIGxlblxuICB9XG5cbiAgLy8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZpcnN0KTtcbiAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7XG4gICAgZC5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7XG4gICAgZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgICAgaWYgKGxlbiA+IGQubWF4TGluZUxlbmd0aCkge1xuICAgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgIGQubWF4TGluZSA9IGxpbmU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBMSU5FIERBVEEgU1RSVUNUVVJFXG5cbiAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmdcbiAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLlxuICB2YXIgTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkge1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpO1xuICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7XG4gIH07XG5cbiAgTGluZS5wcm90b3R5cGUubGluZU5vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpIH07XG4gIGV2ZW50TWl4aW4oTGluZSk7XG5cbiAgLy8gQ2hhbmdlIHRoZSBjb250ZW50ICh0ZXh0LCBtYXJrZXJzKSBvZiBhIGxpbmUuIEF1dG9tYXRpY2FsbHlcbiAgLy8gaW52YWxpZGF0ZXMgY2FjaGVkIGluZm9ybWF0aW9uIGFuZCB0cmllcyB0byByZS1lc3RpbWF0ZSB0aGVcbiAgLy8gbGluZSdzIGhlaWdodC5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHtcbiAgICBsaW5lLnRleHQgPSB0ZXh0O1xuICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0eWxlcyA9IG51bGw7IH1cbiAgICBpZiAobGluZS5vcmRlciAhPSBudWxsKSB7IGxpbmUub3JkZXIgPSBudWxsOyB9XG4gICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7XG4gICAgYXR0YWNoTWFya2VkU3BhbnMobGluZSwgbWFya2VkU3BhbnMpO1xuICAgIHZhciBlc3RIZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KGxpbmUpIDogMTtcbiAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxuICB9XG5cbiAgLy8gRGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy5cbiAgZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkge1xuICAgIGxpbmUucGFyZW50ID0gbnVsbDtcbiAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1vZGUgKGVpdGhlciBudWxsLCBvciBhIHN0cmluZ1xuICAvLyBjb250YWluaW5nIG9uZSBvciBtb3JlIHN0eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLFxuICAvLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy5cbiAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30sIHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTtcbiAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZSwgb3B0aW9ucykge1xuICAgIGlmICghc3R5bGUgfHwgL15cXHMqJC8udGVzdChzdHlsZSkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjYWNoZSA9IG9wdGlvbnMuYWRkTW9kZUNsYXNzID8gc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA6IHN0eWxlVG9DbGFzc0NhY2hlO1xuICAgIHJldHVybiBjYWNoZVtzdHlsZV0gfHxcbiAgICAgIChjYWNoZVtzdHlsZV0gPSBzdHlsZS5yZXBsYWNlKC9cXFMrL2csIFwiY20tJCZcIikpXG4gIH1cblxuICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzXG4gIC8vIHVwIGEgJ2xpbmUgbWFwJywgd2hpY2ggcG9pbnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnRcbiAgLy8gc3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcgY29kZS5cbiAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmRcbiAgLy8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0aGF0IHdlcmUgc2V0IGJ5IHRoZSBtb2RlLlxuICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoXG4gICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0byBiZSBhYmxlIHRvIGdldCBsaW5lLWxldmVsIGJvdW5kaW5nXG4gICAgLy8gcmVjdGFuZ2xlcyBmb3IgaXQgKGluIG1lYXN1cmVDaGFyKS5cbiAgICB2YXIgY29udGVudCA9IGVsdFAoXCJzcGFuXCIsIG51bGwsIG51bGwsIHdlYmtpdCA/IFwicGFkZGluZy1yaWdodDogLjFweFwiIDogbnVsbCk7XG4gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHRQKFwicHJlXCIsIFtjb250ZW50XSwgXCJDb2RlTWlycm9yLWxpbmVcIiksIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSxcbiAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICBzcGxpdFNwYWNlczogY20uZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpfTtcbiAgICBsaW5lVmlldy5tZWFzdXJlID0ge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJlc3QgPyBsaW5lVmlldy5yZXN0Lmxlbmd0aCA6IDApOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gaSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXIgPSAodm9pZCAwKTtcbiAgICAgIGJ1aWxkZXIucG9zID0gMDtcbiAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuO1xuICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9rZW4tcmVuZGVyaW5nXG4gICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1aXJrcy5cbiAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKSkpXG4gICAgICAgIHsgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsgfVxuICAgICAgYnVpbGRlci5tYXAgPSBbXTtcbiAgICAgIHZhciBhbGxvd0Zyb250aWVyVXBkYXRlID0gbGluZVZpZXcgIT0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkICYmIGxpbmVObyhsaW5lKTtcbiAgICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIGFsbG93RnJvbnRpZXJVcGRhdGUpKTtcbiAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcykge1xuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcylcbiAgICAgICAgICB7IGJ1aWxkZXIuYmdDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFzcyB8fCBcIlwiKTsgfVxuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKVxuICAgICAgICAgIHsgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8IFwiXCIpOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQsIGZvciBtZWFzdXJpbmcuXG4gICAgICBpZiAoYnVpbGRlci5tYXAubGVuZ3RoID09IDApXG4gICAgICAgIHsgYnVpbGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSk7IH1cblxuICAgICAgLy8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluZVxuICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLm1hcCA9IGJ1aWxkZXIubWFwO1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICB9IGVsc2Uge1xuICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmlldy5tZWFzdXJlLm1hcHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApXG4gICAgICAgIDsobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWUgaXNzdWUgIzI5MDFcbiAgICBpZiAod2Via2l0KSB7XG4gICAgICB2YXIgbGFzdCA9IGJ1aWxkZXIuY29udGVudC5sYXN0Q2hpbGQ7XG4gICAgICBpZiAoL1xcYmNtLXRhYlxcYi8udGVzdChsYXN0LmNsYXNzTmFtZSkgfHwgKGxhc3QucXVlcnlTZWxlY3RvciAmJiBsYXN0LnF1ZXJ5U2VsZWN0b3IoXCIuY20tdGFiXCIpKSlcbiAgICAgICAgeyBidWlsZGVyLmNvbnRlbnQuY2xhc3NOYW1lID0gXCJjbS10YWItd3JhcC1oYWNrXCI7IH1cbiAgICB9XG5cbiAgICBzaWduYWwoY20sIFwicmVuZGVyTGluZVwiLCBjbSwgbGluZVZpZXcubGluZSwgYnVpbGRlci5wcmUpO1xuICAgIGlmIChidWlsZGVyLnByZS5jbGFzc05hbWUpXG4gICAgICB7IGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMoYnVpbGRlci5wcmUuY2xhc3NOYW1lLCBidWlsZGVyLnRleHRDbGFzcyB8fCBcIlwiKTsgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7XG4gICAgdmFyIHRva2VuID0gZWx0KFwic3BhblwiLCBcIlxcdTIwMjJcIiwgXCJjbS1pbnZhbGlkY2hhclwiKTtcbiAgICB0b2tlbi50aXRsZSA9IFwiXFxcXHVcIiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIHRva2VuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdG9rZW4udGl0bGUpO1xuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG9cbiAgLy8gdGhlIGxpbmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS5cbiAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIGNzcywgYXR0cmlidXRlcykge1xuICAgIGlmICghdGV4dCkgeyByZXR1cm4gfVxuICAgIHZhciBkaXNwbGF5VGV4dCA9IGJ1aWxkZXIuc3BsaXRTcGFjZXMgPyBzcGxpdFNwYWNlcyh0ZXh0LCBidWlsZGVyLnRyYWlsaW5nU3BhY2UpIDogdGV4dDtcbiAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlO1xuICAgIHZhciBjb250ZW50O1xuICAgIGlmICghc3BlY2lhbC50ZXN0KHRleHQpKSB7XG4gICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5VGV4dCk7XG4gICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHRleHQubGVuZ3RoLCBjb250ZW50KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBtdXN0V3JhcCA9IHRydWU7IH1cbiAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvcztcbiAgICAgICAgdmFyIG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7XG4gICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvcztcbiAgICAgICAgaWYgKHNraXBwZWQpIHtcbiAgICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0XSkpOyB9XG4gICAgICAgICAgZWxzZSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsgfVxuICAgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0KTtcbiAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkO1xuICAgICAgICAgIGJ1aWxkZXIucG9zICs9IHNraXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7IGJyZWFrIH1cbiAgICAgICAgcG9zICs9IHNraXBwZWQgKyAxO1xuICAgICAgICB2YXIgdHh0JDEgPSAodm9pZCAwKTtcbiAgICAgICAgaWYgKG1bMF0gPT0gXCJcXHRcIikge1xuICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTtcbiAgICAgICAgICB0eHQkMSA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBzcGFjZVN0cih0YWJXaWR0aCksIFwiY20tdGFiXCIpKTtcbiAgICAgICAgICB0eHQkMS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwicHJlc2VudGF0aW9uXCIpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgXCJcXHRcIik7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gdGFiV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSBcIlxcclwiIHx8IG1bMF0gPT0gXCJcXG5cIikge1xuICAgICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIG1bMF0gPT0gXCJcXHJcIiA/IFwiXFx1MjQwZFwiIDogXCJcXHUyNDI0XCIsIFwiY20taW52YWxpZGNoYXJcIikpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eHQkMSA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0JDFdKSk7IH1cbiAgICAgICAgICBlbHNlIHsgY29udGVudC5hcHBlbmRDaGlsZCh0eHQkMSk7IH1cbiAgICAgICAgICBidWlsZGVyLmNvbCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgMSwgdHh0JDEpO1xuICAgICAgICBidWlsZGVyLnBvcysrO1xuICAgICAgfVxuICAgIH1cbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBkaXNwbGF5VGV4dC5jaGFyQ29kZUF0KHRleHQubGVuZ3RoIC0gMSkgPT0gMzI7XG4gICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXAgfHwgY3NzKSB7XG4gICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgXCJcIjtcbiAgICAgIGlmIChzdGFydFN0eWxlKSB7IGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOyB9XG4gICAgICBpZiAoZW5kU3R5bGUpIHsgZnVsbFN0eWxlICs9IGVuZFN0eWxlOyB9XG4gICAgICB2YXIgdG9rZW4gPSBlbHQoXCJzcGFuXCIsIFtjb250ZW50XSwgZnVsbFN0eWxlLCBjc3MpO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7IGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpICYmIGF0dHIgIT0gXCJzdHlsZVwiICYmIGF0dHIgIT0gXCJjbGFzc1wiKVxuICAgICAgICAgIHsgdG9rZW4uc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJpYnV0ZXNbYXR0cl0pOyB9IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pXG4gICAgfVxuICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfVxuXG4gIC8vIENoYW5nZSBzb21lIHNwYWNlcyB0byBOQlNQIHRvIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBjb2xsYXBzaW5nXG4gIC8vIHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGVuIHJlbmRlcmluZyB0ZXh0IChpc3N1ZSAjMTM2MikuXG4gIGZ1bmN0aW9uIHNwbGl0U3BhY2VzKHRleHQsIHRyYWlsaW5nQmVmb3JlKSB7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMSAmJiAhLyAgLy50ZXN0KHRleHQpKSB7IHJldHVybiB0ZXh0IH1cbiAgICB2YXIgc3BhY2VCZWZvcmUgPSB0cmFpbGluZ0JlZm9yZSwgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IHRleHQuY2hhckF0KGkpO1xuICAgICAgaWYgKGNoID09IFwiIFwiICYmIHNwYWNlQmVmb3JlICYmIChpID09IHRleHQubGVuZ3RoIC0gMSB8fCB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09IDMyKSlcbiAgICAgICAgeyBjaCA9IFwiXFx1MDBhMFwiOyB9XG4gICAgICByZXN1bHQgKz0gY2g7XG4gICAgICBzcGFjZUJlZm9yZSA9IGNoID09IFwiIFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2ZcbiAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0LlxuICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3JkZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB7XG4gICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyBcIiBjbS1mb3JjZS1ib3JkZXJcIiA6IFwiY20tZm9yY2UtYm9yZGVyXCI7XG4gICAgICB2YXIgc3RhcnQgPSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXJ0IG9mIHRoaXMgdGV4dFxuICAgICAgICB2YXIgcGFydCA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3RhcnQgJiYgcGFydC5mcm9tIDw9IHN0YXJ0KSB7IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydC50byA+PSBlbmQpIHsgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB9XG4gICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgIHN0YXJ0U3R5bGUgPSBudWxsO1xuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpO1xuICAgICAgICBzdGFydCA9IHBhcnQudG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7XG4gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7XG4gICAgaWYgKHdpZGdldCkgeyBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7IH1cbiAgICBpZiAoIWlnbm9yZVdpZGdldCAmJiBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlKSB7XG4gICAgICBpZiAoIXdpZGdldClcbiAgICAgICAgeyB3aWRnZXQgPSBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpOyB9XG4gICAgICB3aWRnZXQuc2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIsIG1hcmtlci5pZCk7XG4gICAgfVxuICAgIGlmICh3aWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHdpZGdldCk7XG4gICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lkZ2V0KTtcbiAgICB9XG4gICAgYnVpbGRlci5wb3MgKz0gc2l6ZTtcbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIE91dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGlnaHRpbmdcbiAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC5cbiAgZnVuY3Rpb24gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgc3R5bGVzKSB7XG4gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwO1xuICAgIGlmICghc3BhbnMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IHN0eWxlcy5sZW5ndGg7IGkkMSs9MilcbiAgICAgICAgeyBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2kkMV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpJDErMV0sIGJ1aWxkZXIuY20ub3B0aW9ucykpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gXCJcIiwgc3R5bGUsIGNzcztcbiAgICB2YXIgbmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgY29sbGFwc2VkLCBhdHRyaWJ1dGVzO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0XG4gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gY3NzID0gXCJcIjtcbiAgICAgICAgYXR0cmlidXRlcyA9IG51bGw7XG4gICAgICAgIGNvbGxhcHNlZCA9IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW10sIGVuZFN0eWxlcyA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7XG4gICAgICAgICAgaWYgKG0udHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7XG4gICAgICAgICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0gcG9zKSkge1xuICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykge1xuICAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87XG4gICAgICAgICAgICAgIHNwYW5FbmRTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHsgc3BhblN0eWxlICs9IFwiIFwiICsgbS5jbGFzc05hbWU7IH1cbiAgICAgICAgICAgIGlmIChtLmNzcykgeyBjc3MgPSAoY3NzID8gY3NzICsgXCI7XCIgOiBcIlwiKSArIG0uY3NzOyB9XG4gICAgICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSB7IHNwYW5TdGFydFN0eWxlICs9IFwiIFwiICsgbS5zdGFydFN0eWxlOyB9XG4gICAgICAgICAgICBpZiAobS5lbmRTdHlsZSAmJiBzcC50byA9PSBuZXh0Q2hhbmdlKSB7IChlbmRTdHlsZXMgfHwgKGVuZFN0eWxlcyA9IFtdKSkucHVzaChtLmVuZFN0eWxlLCBzcC50byk7IH1cbiAgICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIHRoZSBvbGQgdGl0bGUgcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWlycm9yL0NvZGVNaXJyb3IvcHVsbC81NjczXG4gICAgICAgICAgICBpZiAobS50aXRsZSkgeyAoYXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyA9IHt9KSkudGl0bGUgPSBtLnRpdGxlOyB9XG4gICAgICAgICAgICBpZiAobS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIHsgKGF0dHJpYnV0ZXMgfHwgKGF0dHJpYnV0ZXMgPSB7fSkpW2F0dHJdID0gbS5hdHRyaWJ1dGVzW2F0dHJdOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwgbSkgPCAwKSlcbiAgICAgICAgICAgICAgeyBjb2xsYXBzZWQgPSBzcDsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkge1xuICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb207XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRTdHlsZXMpIHsgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgZW5kU3R5bGVzLmxlbmd0aDsgaiQxICs9IDIpXG4gICAgICAgICAgeyBpZiAoZW5kU3R5bGVzW2okMSArIDFdID09IG5leHRDaGFuZ2UpIHsgc3BhbkVuZFN0eWxlICs9IFwiIFwiICsgZW5kU3R5bGVzW2okMV07IH0gfSB9XG5cbiAgICAgICAgaWYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLmZyb20gPT0gcG9zKSB7IGZvciAodmFyIGokMiA9IDA7IGokMiA8IGZvdW5kQm9va21hcmtzLmxlbmd0aDsgKytqJDIpXG4gICAgICAgICAgeyBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRCb29rbWFya3NbaiQyXSk7IH0gfVxuICAgICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHtcbiAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpO1xuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gcG9zKSB7IGNvbGxhcHNlZCA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb3MgPj0gbGVuKSB7IGJyZWFrIH1cblxuICAgICAgdmFyIHVwdG8gPSBNYXRoLm1pbihsZW4sIG5leHRDaGFuZ2UpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7XG4gICAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNwYW5TdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6IFwiXCIsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVha31cbiAgICAgICAgICBwb3MgPSBlbmQ7XG4gICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpKytdKTtcbiAgICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBidWlsZGVyLmNtLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRseSBkcmF3bilcbiAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZpZXcgbWF5IGNvcnJlc3BvbmQgdG8gbXVsdGlwbGVcbiAgLy8gbG9naWNhbCBsaW5lcywgaWYgdGhvc2UgYXJlIGNvbm5lY3RlZCBieSBjb2xsYXBzZWQgcmFuZ2VzLlxuICBmdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUsIGxpbmVOKSB7XG4gICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmVcbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueVxuICAgIHRoaXMucmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSk7XG4gICAgLy8gTnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgaW4gdGhpcyB2aXN1YWwgbGluZVxuICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/IGxpbmVObyhsc3QodGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxO1xuICAgIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9IG51bGw7XG4gICAgdGhpcy5oaWRkZW4gPSBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHJhbmdlIG9mIExpbmVWaWV3IG9iamVjdHMgZm9yIHRoZSBnaXZlbiBsaW5lcy5cbiAgZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKSB7XG4gICAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7XG4gICAgZm9yICh2YXIgcG9zID0gZnJvbTsgcG9zIDwgdG87IHBvcyA9IG5leHRQb3MpIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IExpbmVWaWV3KGNtLmRvYywgZ2V0TGluZShjbS5kb2MsIHBvcyksIHBvcyk7XG4gICAgICBuZXh0UG9zID0gcG9zICsgdmlldy5zaXplO1xuICAgICAgYXJyYXkucHVzaCh2aWV3KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICB2YXIgb3BlcmF0aW9uR3JvdXAgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgICBpZiAob3BlcmF0aW9uR3JvdXApIHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3Aub3duc0dyb3VwID0gb3BlcmF0aW9uR3JvdXAgPSB7XG4gICAgICAgIG9wczogW29wXSxcbiAgICAgICAgZGVsYXllZENhbGxiYWNrczogW11cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCkge1xuICAgIC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBjdXJzb3JBY3Rpdml0eSBoYW5kbGVycyB1bnRpbCBub1xuICAgIC8vIG5ldyBvbmVzIGFwcGVhclxuICAgIHZhciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDtcbiAgICBkbyB7XG4gICAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBjYWxsYmFja3NbaV0uY2FsbChudWxsKTsgfVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC5vcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG9wID0gZ3JvdXAub3BzW2pdO1xuICAgICAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycylcbiAgICAgICAgICB7IHdoaWxlIChvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCA8IG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKVxuICAgICAgICAgICAgeyBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCwgb3AuY20pOyB9IH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxlbmd0aClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaE9wZXJhdGlvbihvcCwgZW5kQ2IpIHtcbiAgICB2YXIgZ3JvdXAgPSBvcC5vd25zR3JvdXA7XG4gICAgaWYgKCFncm91cCkgeyByZXR1cm4gfVxuXG4gICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCk7IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwID0gbnVsbDtcbiAgICAgIGVuZENiKGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICB2YXIgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7XG5cbiAgLy8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBhdCBhIHBvaW50IHdoZXJlIHdlIGFyZSBpbiB0aGVcbiAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZ1xuICAvLyBvdGhlciBtZXRob2RzIG9uIHRoZSBlZGl0b3IsIHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudFxuICAvLyBzdGF0ZSBvciBzaW1wbHkgbm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBlbi5cbiAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzXG4gIC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3IsIGlmIG5vXG4gIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLlxuICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykge1xuICAgIHZhciBhcnIgPSBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKTtcbiAgICBpZiAoIWFyci5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7XG4gICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7XG4gICAgICBsaXN0ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrcztcbiAgICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHtcbiAgICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IFtdO1xuICAgICAgc2V0VGltZW91dChmaXJlT3JwaGFuRGVsYXllZCwgMCk7XG4gICAgfVxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgICAgbGlzdC5wdXNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFycltpXS5hcHBseShudWxsLCBhcmdzKTsgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKVxuICAgICAgbG9vcCggaSApO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlyZU9ycGhhbkRlbGF5ZWQoKSB7XG4gICAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgeyBkZWxheWVkW2ldKCk7IH1cbiAgfVxuXG4gIC8vIFdoZW4gYW4gYXNwZWN0IG9mIGEgbGluZSBjaGFuZ2VzLCBhIHN0cmluZyBpcyBhZGRlZCB0b1xuICAvLyBsaW5lVmlldy5jaGFuZ2VzLiBUaGlzIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUnc1xuICAvLyBET00gc3RydWN0dXJlLlxuICBmdW5jdGlvbiB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lVmlldy5jaGFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgdHlwZSA9IGxpbmVWaWV3LmNoYW5nZXNbal07XG4gICAgICBpZiAodHlwZSA9PSBcInRleHRcIikgeyB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOyB9XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwiZ3V0dGVyXCIpIHsgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImNsYXNzXCIpIHsgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIndpZGdldFwiKSB7IHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7IH1cbiAgICB9XG4gICAgbGluZVZpZXcuY2hhbmdlcyA9IG51bGw7XG4gIH1cblxuICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQgY2xhc3MgbmVlZCB0b1xuICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2XG4gIGZ1bmN0aW9uIGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KSB7XG4gICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkge1xuICAgICAgbGluZVZpZXcubm9kZSA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTtcbiAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpXG4gICAgICAgIHsgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgbGluZVZpZXcubm9kZS5hcHBlbmRDaGlsZChsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7IH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldykge1xuICAgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNzID8gbGluZVZpZXcuYmdDbGFzcyArIFwiIFwiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUuYmdDbGFzcztcbiAgICBpZiAoY2xzKSB7IGNscyArPSBcIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kXCI7IH1cbiAgICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkge1xuICAgICAgaWYgKGNscykgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNsczsgfVxuICAgICAgZWxzZSB7IGxpbmVWaWV3LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5kKTsgbGluZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH1cbiAgICB9IGVsc2UgaWYgKGNscykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5iYWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KFwiZGl2XCIsIG51bGwsIGNscyksIHdyYXAuZmlyc3RDaGlsZCk7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobGluZVZpZXcuYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBhcm91bmQgYnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBzdHJ1Y3R1cmVcbiAgLy8gaW4gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUuXG4gIGZ1bmN0aW9uIGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBleHQubGluZSA9PSBsaW5lVmlldy5saW5lKSB7XG4gICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsO1xuICAgICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlO1xuICAgICAgcmV0dXJuIGV4dC5idWlsdFxuICAgIH1cbiAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpXG4gIH1cblxuICAvLyBSZWRyYXcgdGhlIGxpbmUncyB0ZXh0LiBJbnRlcmFjdHMgd2l0aCB0aGUgYmFja2dyb3VuZCBhbmQgdGV4dFxuICAvLyBjbGFzc2VzIGJlY2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2VcbiAgLy8gY2xhc3Nlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KSB7XG4gICAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lO1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LnRleHQgPT0gbGluZVZpZXcubm9kZSkgeyBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOyB9XG4gICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpO1xuICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7XG4gICAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzcztcbiAgICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzcztcbiAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7XG4gICAgfSBlbHNlIGlmIChjbHMpIHtcbiAgICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gY2xzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldykge1xuICAgIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKVxuICAgICAgeyBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldykuY2xhc3NOYW1lID0gbGluZVZpZXcubGluZS53cmFwQ2xhc3M7IH1cbiAgICBlbHNlIGlmIChsaW5lVmlldy5ub2RlICE9IGxpbmVWaWV3LnRleHQpXG4gICAgICB7IGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gXCJcIjsgfVxuICAgIHZhciB0ZXh0Q2xhc3MgPSBsaW5lVmlldy50ZXh0Q2xhc3MgPyBsaW5lVmlldy50ZXh0Q2xhc3MgKyBcIiBcIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUudGV4dENsYXNzO1xuICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4dENsYXNzIHx8IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7XG4gICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7XG4gICAgICBsaW5lVmlldy5ndXR0ZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkge1xuICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTtcbiAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcImxlZnQ6IFwiICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4OyB3aWR0aDogXCIgKyAoZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQpO1xuICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZpZXcudGV4dCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJzO1xuICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHtcbiAgICAgIHZhciB3cmFwJDEgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3Lmd1dHRlciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXJcIiwgKFwibGVmdDogXCIgKyAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApO1xuICAgICAgd3JhcCQxLmluc2VydEJlZm9yZShndXR0ZXJXcmFwLCBsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzKVxuICAgICAgICB7IGd1dHRlcldyYXAuY2xhc3NOYW1lICs9IFwiIFwiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsgfVxuICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkpXG4gICAgICAgIHsgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgZWx0KFwiZGl2XCIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pLFxuICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgKFwibGVmdDogXCIgKyAoZGltcy5ndXR0ZXJMZWZ0W1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkgKyBcInB4OyB3aWR0aDogXCIgKyAoY20uZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCkgKyBcInB4XCIpKSk7IH1cbiAgICAgIGlmIChtYXJrZXJzKSB7IGZvciAodmFyIGsgPSAwOyBrIDwgY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsraykge1xuICAgICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2tdLmNsYXNzTmFtZSwgZm91bmQgPSBtYXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTtcbiAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgIHsgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2ZvdW5kXSwgXCJDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChkaW1zLmd1dHRlckxlZnRbaWRdKSArIFwicHg7IHdpZHRoOiBcIiArIChkaW1zLmd1dHRlcldpZHRoW2lkXSkgKyBcInB4XCIpKSk7IH1cbiAgICAgIH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGlmIChsaW5lVmlldy5hbGlnbmFibGUpIHsgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsgfVxuICAgIHZhciBpc1dpZGdldCA9IGNsYXNzVGVzdChcIkNvZGVNaXJyb3ItbGluZXdpZGdldFwiKTtcbiAgICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0ID0gKHZvaWQgMCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7XG4gICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIGlmIChpc1dpZGdldC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgeyBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgfVxuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGxpbmUncyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoXG4gIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykge1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIHsgbGluZVZpZXcuYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7IH1cbiAgICBpZiAoYnVpbHQudGV4dENsYXNzKSB7IGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzczsgfVxuXG4gICAgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTtcbiAgICB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpO1xuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIC8vIEEgbGluZVZpZXcgbWF5IGNvbnRhaW4gbXVsdGlwbGUgbG9naWNhbCBsaW5lcyAod2hlbiBtZXJnZWQgYnlcbiAgLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdldHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uXG4gIGZ1bmN0aW9uIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGNtLCBsaW5lVmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSk7XG4gICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHtcbiAgICBpZiAoIWxpbmUud2lkZ2V0cykgeyByZXR1cm4gfVxuICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoXCJkaXZcIiwgW3dpZGdldC5ub2RlXSwgXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIiArICh3aWRnZXQuY2xhc3NOYW1lID8gXCIgXCIgKyB3aWRnZXQuY2xhc3NOYW1lIDogXCJcIikpO1xuICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMpIHsgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTsgfVxuICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKVxuICAgICAgICB7IHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpbmVWaWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7IH1cbiAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgXCJyZWRyYXdcIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkge1xuICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5hbGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7XG4gICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJXaWR0aDtcbiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyBcInB4XCI7XG4gICAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikge1xuICAgICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUucGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gICAgfVxuICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpIHtcbiAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTtcbiAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgICBpZiAoIXdpZGdldC5ub0hTY3JvbGwpIHsgbm9kZS5zdHlsZS5tYXJnaW5MZWZ0ID0gLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCArIFwicHhcIjsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdpZGdldEhlaWdodCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7IHJldHVybiB3aWRnZXQuaGVpZ2h0IH1cbiAgICB2YXIgY20gPSB3aWRnZXQuZG9jLmNtO1xuICAgIGlmICghY20pIHsgcmV0dXJuIDAgfVxuICAgIGlmICghY29udGFpbnMoZG9jdW1lbnQuYm9keSwgd2lkZ2V0Lm5vZGUpKSB7XG4gICAgICB2YXIgcGFyZW50U3R5bGUgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIjtcbiAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJtYXJnaW4tbGVmdDogLVwiICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgXCJweDtcIjsgfVxuICAgICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJ3aWR0aDogXCIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyBcInB4O1wiOyB9XG4gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdChcImRpdlwiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0XG4gIH1cblxuICAvLyBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBnaXZlbiBtb3VzZSBldmVudCBoYXBwZW5lZCBpbiBhIHdpZGdldFxuICBmdW5jdGlvbiBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHtcbiAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIW4gfHwgKG4ubm9kZVR5cGUgPT0gMSAmJiBuLmdldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIikgPT0gXCJ0cnVlXCIpIHx8XG4gICAgICAgICAgKG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikpXG4gICAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBPU0lUSU9OIE1FQVNVUkVNRU5UXG5cbiAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcH1cbiAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodH1cbiAgZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdIKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIIH1cbiAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KFwicHJlXCIsIFwieFwiLCBcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpKTtcbiAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJyZW50U3R5bGU7XG4gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07XG4gICAgaWYgKCFpc05hTihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgeyBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gZGF0YTsgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aCB9XG4gIGZ1bmN0aW9uIGRpc3BsYXlXaWR0aChjbSkge1xuICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFyV2lkdGhcbiAgfVxuICBmdW5jdGlvbiBkaXNwbGF5SGVpZ2h0KGNtKSB7XG4gICAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFySGVpZ2h0XG4gIH1cblxuICAvLyBFbnN1cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd25cbiAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmVcbiAgLy8gaGVpZ2h0LlxuICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHtcbiAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBkaXNwbGF5V2lkdGgoY20pO1xuICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHtcbiAgICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107XG4gICAgICBpZiAod3JhcHBpbmcpIHtcbiAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRoO1xuICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKVxuICAgICAgICAgICAgeyBoZWlnaHRzLnB1c2goKGN1ci5ib3R0b20gKyBuZXh0LnRvcCkgLyAyIC0gcmVjdC50b3ApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhlaWdodHMucHVzaChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSBtYXAgKG1hcHBpbmcgY2hhcmFjdGVyIG9mZnNldHMgdG8gdGV4dCBub2RlcykgYW5kIGFcbiAgLy8gbWVhc3VyZW1lbnQgY2FjaGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKEEgbGluZSB2aWV3IG1pZ2h0XG4gIC8vIGNvbnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LilcbiAgZnVuY3Rpb24gbWFwRnJvbUxpbmVWaWV3KGxpbmVWaWV3LCBsaW5lLCBsaW5lTikge1xuICAgIGlmIChsaW5lVmlldy5saW5lID09IGxpbmUpXG4gICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspXG4gICAgICB7IGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUpXG4gICAgICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldfSB9IH1cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSQxKyspXG4gICAgICB7IGlmIChsaW5lTm8obGluZVZpZXcucmVzdFtpJDFdKSA+IGxpbmVOKVxuICAgICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaSQxXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2kkMV0sIGJlZm9yZTogdHJ1ZX0gfSB9XG4gIH1cblxuICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZFxuICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LlxuICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7XG4gICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpO1xuICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pO1xuICAgIHZpZXcubGluZU4gPSBsaW5lTjtcbiAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7XG4gICAgdmlldy50ZXh0ID0gYnVpbHQucHJlO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7XG4gICAgcmV0dXJuIHZpZXdcbiAgfVxuXG4gIC8vIEdldCBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCAoaW4gbGluZS1sb2NhbCBjb29yZGluYXRlcylcbiAgLy8gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGJpYXMpIHtcbiAgICByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSwgY2gsIGJpYXMpXG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSB2aWV3IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKSB7XG4gICAgaWYgKGxpbmVOID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildIH1cbiAgICB2YXIgZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgIGlmIChleHQgJiYgbGluZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IHJldHVybiBleHQgfVxuICB9XG5cbiAgLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBzdGVwcywgdGhlIHNldC11cCB3b3JrIHRoYXRcbiAgLy8gYXBwbGllcyB0byB0aGUgd2hvbGUgbGluZSwgYW5kIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgYWN0dWFsXG4gIC8vIGNoYXJhY3Rlci4gRnVuY3Rpb25zIGxpa2UgY29vcmRzQ2hhciwgdGhhdCBuZWVkIHRvIGRvIGEgbG90IG9mXG4gIC8vIG1lYXN1cmVtZW50cyBpbiBhIHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3JrIGlzXG4gIC8vIG9ubHkgZG9uZSBvbmNlLlxuICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHtcbiAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7XG4gICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTtcbiAgICBpZiAodmlldyAmJiAhdmlldy50ZXh0KSB7XG4gICAgICB2aWV3ID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZpZXcgJiYgdmlldy5jaGFuZ2VzKSB7XG4gICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgdmlldywgbGluZU4sIGdldERpbWVuc2lvbnMoY20pKTtcbiAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF2aWV3KVxuICAgICAgeyB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7IH1cblxuICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIGxpbmVOKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCxcbiAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hlLCBiZWZvcmU6IGluZm8uYmVmb3JlLFxuICAgICAgaGFzSGVpZ2h0czogZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBHaXZlbiBhIHByZXBhcmVkIG1lYXN1cmVtZW50IG9iamVjdCwgbWVhc3VyZXMgdGhlIHBvc2l0aW9uIG9mIGFuXG4gIC8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMsIHZhckhlaWdodCkge1xuICAgIGlmIChwcmVwYXJlZC5iZWZvcmUpIHsgY2ggPSAtMTsgfVxuICAgIHZhciBrZXkgPSBjaCArIChiaWFzIHx8IFwiXCIpLCBmb3VuZDtcbiAgICBpZiAocHJlcGFyZWQuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZm91bmQgPSBwcmVwYXJlZC5jYWNoZVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXByZXBhcmVkLnJlY3QpXG4gICAgICAgIHsgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgfVxuICAgICAgaWYgKCFwcmVwYXJlZC5oYXNIZWlnaHRzKSB7XG4gICAgICAgIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBwcmVwYXJlZC52aWV3LCBwcmVwYXJlZC5yZWN0KTtcbiAgICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcyk7XG4gICAgICBpZiAoIWZvdW5kLmJvZ3VzKSB7IHByZXBhcmVkLmNhY2hlW2tleV0gPSBmb3VuZDsgfVxuICAgIH1cbiAgICByZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCxcbiAgICAgICAgICAgIHRvcDogdmFySGVpZ2h0ID8gZm91bmQucnRvcCA6IGZvdW5kLnRvcCxcbiAgICAgICAgICAgIGJvdHRvbTogdmFySGVpZ2h0ID8gZm91bmQucmJvdHRvbSA6IGZvdW5kLmJvdHRvbX1cbiAgfVxuXG4gIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9O1xuXG4gIGZ1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwLCBjaCwgYmlhcykge1xuICAgIHZhciBub2RlLCBzdGFydCwgZW5kLCBjb2xsYXBzZSwgbVN0YXJ0LCBtRW5kO1xuICAgIC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUgdGV4dCBub2RlIGNvcnJlc3BvbmRpbmcgdG8sXG4gICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIG1TdGFydCA9IG1hcFtpXTtcbiAgICAgIG1FbmQgPSBtYXBbaSArIDFdO1xuICAgICAgaWYgKGNoIDwgbVN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0ID0gMDsgZW5kID0gMTtcbiAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPCBtRW5kKSB7XG4gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7XG4gICAgICAgIGVuZCA9IHN0YXJ0ICsgMTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVuZ3RoIC0gMyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkge1xuICAgICAgICBlbmQgPSBtRW5kIC0gbVN0YXJ0O1xuICAgICAgICBzdGFydCA9IGVuZCAtIDE7XG4gICAgICAgIGlmIChjaCA+PSBtRW5kKSB7IGNvbGxhcHNlID0gXCJyaWdodFwiOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbWFwW2kgKyAyXTtcbiAgICAgICAgaWYgKG1TdGFydCA9PSBtRW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/IFwibGVmdFwiIDogXCJyaWdodFwiKSlcbiAgICAgICAgICB7IGNvbGxhcHNlID0gYmlhczsgfVxuICAgICAgICBpZiAoYmlhcyA9PSBcImxlZnRcIiAmJiBzdGFydCA9PSAwKVxuICAgICAgICAgIHsgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBbaSAtIDNdICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkge1xuICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAtPSAzKSArIDJdO1xuICAgICAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgaWYgKGJpYXMgPT0gXCJyaWdodFwiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpXG4gICAgICAgICAgeyB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtpICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7XG4gICAgICAgICAgICBub2RlID0gbWFwWyhpICs9IDMpICsgMl07XG4gICAgICAgICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtub2RlOiBub2RlLCBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBjb2xsYXBzZTogY29sbGFwc2UsIGNvdmVyU3RhcnQ6IG1TdGFydCwgY292ZXJFbmQ6IG1FbmR9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVc2VmdWxSZWN0KHJlY3RzLCBiaWFzKSB7XG4gICAgdmFyIHJlY3QgPSBudWxsUmVjdDtcbiAgICBpZiAoYmlhcyA9PSBcImxlZnRcIikgeyBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKHJlY3QgPSByZWN0c1tpXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH0gZWxzZSB7IGZvciAodmFyIGkkMSA9IHJlY3RzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSkge1xuICAgICAgaWYgKChyZWN0ID0gcmVjdHNbaSQxXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgZnVuY3Rpb24gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7XG4gICAgdmFyIHBsYWNlID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChwcmVwYXJlZC5tYXAsIGNoLCBiaWFzKTtcbiAgICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xsYXBzZTtcblxuICAgIHZhciByZWN0O1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsgLy8gSWYgaXQgaXMgYSB0ZXh0IG5vZGUsIHVzZSBhIHJhbmdlIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy5cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7IC8vIFJldHJ5IGEgbWF4aW11bSBvZiA0IHRpbWVzIHdoZW4gbm9uc2Vuc2UgcmVjdGFuZ2xlcyBhcmUgcmV0dXJuZWRcbiAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBzdGFydCkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgd2hpbGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5jb3ZlckVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgZW5kKSkpIHsgKytlbmQ7IH1cbiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmIHN0YXJ0ID09IDAgJiYgZW5kID09IHBsYWNlLmNvdmVyRW5kIC0gcGxhY2UuY292ZXJTdGFydClcbiAgICAgICAgICB7IHJlY3QgPSBub2RlLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgcmVjdCA9IGdldFVzZWZ1bFJlY3QocmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Q2xpZW50UmVjdHMoKSwgYmlhcyk7IH1cbiAgICAgICAgaWYgKHJlY3QubGVmdCB8fCByZWN0LnJpZ2h0IHx8IHN0YXJ0ID09IDApIHsgYnJlYWsgfVxuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSBzdGFydCAtIDE7XG4gICAgICAgIGNvbGxhcHNlID0gXCJyaWdodFwiO1xuICAgICAgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyByZWN0ID0gbWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyhjbS5kaXNwbGF5Lm1lYXN1cmUsIHJlY3QpOyB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQsIHNpbXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC5cbiAgICAgIGlmIChzdGFydCA+IDApIHsgY29sbGFwc2UgPSBiaWFzID0gXCJyaWdodFwiOyB9XG4gICAgICB2YXIgcmVjdHM7XG4gICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGggPiAxKVxuICAgICAgICB7IHJlY3QgPSByZWN0c1tiaWFzID09IFwicmlnaHRcIiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgfVxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpKSB7XG4gICAgICB2YXIgclNwYW4gPSBub2RlLnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXTtcbiAgICAgIGlmIChyU3BhbilcbiAgICAgICAgeyByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmVjdCA9IG51bGxSZWN0OyB9XG4gICAgfVxuXG4gICAgdmFyIHJ0b3AgPSByZWN0LnRvcCAtIHByZXBhcmVkLnJlY3QudG9wLCByYm90ID0gcmVjdC5ib3R0b20gLSBwcmVwYXJlZC5yZWN0LnRvcDtcbiAgICB2YXIgbWlkID0gKHJ0b3AgKyByYm90KSAvIDI7XG4gICAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3Lm1lYXN1cmUuaGVpZ2h0cztcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgIHsgaWYgKG1pZCA8IGhlaWdodHNbaV0pIHsgYnJlYWsgfSB9XG4gICAgdmFyIHRvcCA9IGkgPyBoZWlnaHRzW2kgLSAxXSA6IDAsIGJvdCA9IGhlaWdodHNbaV07XG4gICAgdmFyIHJlc3VsdCA9IHtsZWZ0OiAoY29sbGFwc2UgPT0gXCJyaWdodFwiID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09IFwibGVmdFwiID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9O1xuICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSB7IHJlc3VsdC5ib2d1cyA9IHRydWU7IH1cbiAgICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSkgeyByZXN1bHQucnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmdcbiAgLy8gcmV0dXJuZWQgaW5jb3JyZWN0bHkgd2hlbiB6b29tZWQgb24gSUUxMCBhbmQgYmVsb3cuXG4gIGZ1bmN0aW9uIG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmcobWVhc3VyZSwgcmVjdCkge1xuICAgIGlmICghd2luZG93LnNjcmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fFxuICAgICAgICBzY3JlZW4ubG9naWNhbFhEUEkgPT0gc2NyZWVuLmRldmljZVhEUEkgfHwgIWhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpKVxuICAgICAgeyByZXR1cm4gcmVjdCB9XG4gICAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2FsWERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJO1xuICAgIHZhciBzY2FsZVkgPSBzY3JlZW4ubG9naWNhbFlEUEkgLyBzY3JlZW4uZGV2aWNlWURQSTtcbiAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAqIHNjYWxlWCwgcmlnaHQ6IHJlY3QucmlnaHQgKiBzY2FsZVgsXG4gICAgICAgICAgICB0b3A6IHJlY3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihsaW5lVmlldykge1xuICAgIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBudWxsO1xuICAgICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICB7IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldID0ge307IH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pIHtcbiAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZSA9IG51bGw7XG4gICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspXG4gICAgICB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IoY20uZGlzcGxheS52aWV3W2ldKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHtcbiAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKTtcbiAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7IH1cbiAgICBjbS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHtcbiAgICAvLyBXb3JrIGFyb3VuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00ODkyMDZcbiAgICAvLyB3aGljaCBjYXVzZXMgcGFnZV9PZmZzZXQgYW5kIGJvdW5kaW5nIGNsaWVudCByZWN0cyB0byB1c2VcbiAgICAvLyBkaWZmZXJlbnQgcmVmZXJlbmNlIHZpZXdwb3J0cyBhbmQgaW52YWxpZGF0ZSBvdXIgY2FsY3VsYXRpb25zLlxuICAgIGlmIChjaHJvbWUgJiYgYW5kcm9pZCkgeyByZXR1cm4gLShkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpbkxlZnQpKSB9XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnRcbiAgfVxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHtcbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQpIHsgcmV0dXJuIC0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpblRvcCkpIH1cbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wXG4gIH1cblxuICBmdW5jdGlvbiB3aWRnZXRUb3BIZWlnaHQobGluZU9iaikge1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIGlmIChsaW5lT2JqLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIHsgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSlcbiAgICAgIHsgaGVpZ2h0ICs9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOyB9IH0gfVxuICAgIHJldHVybiBoZWlnaHRcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbFxuICAvLyBjb29yZGluYXRlcyBpbnRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uIENvbnRleHQgbWF5IGJlIG9uZSBvZlxuICAvLyBcImxpbmVcIiwgXCJkaXZcIiAoZGlzcGxheS5saW5lRGl2KSwgXCJsb2NhbFwiLi9udWxsIChlZGl0b3IpLCBcIndpbmRvd1wiLFxuICAvLyBvciBcInBhZ2VcIi5cbiAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0LCBpbmNsdWRlV2lkZ2V0cykge1xuICAgIGlmICghaW5jbHVkZVdpZGdldHMpIHtcbiAgICAgIHZhciBoZWlnaHQgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgICByZWN0LnRvcCArPSBoZWlnaHQ7IHJlY3QuYm90dG9tICs9IGhlaWdodDtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsaW5lXCIpIHsgcmV0dXJuIHJlY3QgfVxuICAgIGlmICghY29udGV4dCkgeyBjb250ZXh0ID0gXCJsb2NhbFwiOyB9XG4gICAgdmFyIHlPZmYgPSBoZWlnaHRBdExpbmUobGluZU9iaik7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiKSB7IHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsgfVxuICAgIGVsc2UgeyB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsgfVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiIHx8IGNvbnRleHQgPT0gXCJ3aW5kb3dcIikge1xuICAgICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxZKCkpO1xuICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxYKCkpO1xuICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjtcbiAgICB9XG4gICAgcmVjdC50b3AgKz0geU9mZjsgcmVjdC5ib3R0b20gKz0geU9mZjtcbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tIFwiZGl2XCIgY29vcmRzIHRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIC8vIENvbnRleHQgbWF5IGJlIFwid2luZG93XCIsIFwicGFnZVwiLCBcImRpdlwiLCBvciBcImxvY2FsXCIuL251bGwuXG4gIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJkaXZcIikgeyByZXR1cm4gY29vcmRzIH1cbiAgICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wO1xuICAgIC8vIEZpcnN0IG1vdmUgaW50byBcInBhZ2VcIiBjb29yZGluYXRlIHN5c3RlbVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiKSB7XG4gICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7XG4gICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiIHx8ICFjb250ZXh0KSB7XG4gICAgICB2YXIgbG9jYWxCb3ggPSBjbS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgbGVmdCArPSBsb2NhbEJveC5sZWZ0O1xuICAgICAgdG9wICs9IGxvY2FsQm94LnRvcDtcbiAgICB9XG5cbiAgICB2YXIgbGluZVNwYWNlQm94ID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtsZWZ0OiBsZWZ0IC0gbGluZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNlQm94LnRvcH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykge1xuICAgIGlmICghbGluZU9iaikgeyBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsgfVxuICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJpYXMpLCBjb250ZXh0KVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNoIG1heSBoYXZlIGFuXG4gIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3JcbiAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LlxuICAvLyBBIGN1cnNvciBQb3MobGluZSwgY2hhciwgXCJiZWZvcmVcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXIgLSAxYFxuICAvLyBhbmQgYWZ0ZXIgYGNoYXIgLSAxYCBpbiB3cml0aW5nIG9yZGVyIG9mIGBjaGFyIC0gMWBcbiAgLy8gQSBjdXJzb3IgUG9zKGxpbmUsIGNoYXIsIFwiYWZ0ZXJcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXJgXG4gIC8vIGFuZCBiZWZvcmUgYGNoYXJgIGluIHdyaXRpbmcgb3JkZXIgb2YgYGNoYXJgXG4gIC8vIEV4YW1wbGVzICh1cHBlci1jYXNlIGxldHRlcnMgYXJlIFJUTCwgbG93ZXItY2FzZSBhcmUgTFRSKTpcbiAgLy8gICAgIFBvcygwLCAxLCAuLi4pXG4gIC8vICAgICBiZWZvcmUgICBhZnRlclxuICAvLyBhYiAgICAgYXxiICAgICBhfGJcbiAgLy8gYUIgICAgIGF8QiAgICAgYUJ8XG4gIC8vIEFiICAgICB8QWIgICAgIEF8YlxuICAvLyBBQiAgICAgQnxBICAgICBCfEFcbiAgLy8gRXZlcnkgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEgbGluZSBpcyBjb25zaWRlcmVkIHRvIHN0aWNrXG4gIC8vIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvbiB0aGUgbGluZS5cbiAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7XG4gICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkge1xuICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoLCByaWdodCA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCB2YXJIZWlnaHQpO1xuICAgICAgaWYgKHJpZ2h0KSB7IG0ubGVmdCA9IG0ucmlnaHQ7IH0gZWxzZSB7IG0ucmlnaHQgPSBtLmxlZnQ7IH1cbiAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQpXG4gICAgfVxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pLCBjaCA9IHBvcy5jaCwgc3RpY2t5ID0gcG9zLnN0aWNreTtcbiAgICBpZiAoY2ggPj0gbGluZU9iai50ZXh0Lmxlbmd0aCkge1xuICAgICAgY2ggPSBsaW5lT2JqLnRleHQubGVuZ3RoO1xuICAgICAgc3RpY2t5ID0gXCJiZWZvcmVcIjtcbiAgICB9IGVsc2UgaWYgKGNoIDw9IDApIHtcbiAgICAgIGNoID0gMDtcbiAgICAgIHN0aWNreSA9IFwiYWZ0ZXJcIjtcbiAgICB9XG4gICAgaWYgKCFvcmRlcikgeyByZXR1cm4gZ2V0KHN0aWNreSA9PSBcImJlZm9yZVwiID8gY2ggLSAxIDogY2gsIHN0aWNreSA9PSBcImJlZm9yZVwiKSB9XG5cbiAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBwYXJ0UG9zLCBpbnZlcnQpIHtcbiAgICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCA9PSAxO1xuICAgICAgcmV0dXJuIGdldChpbnZlcnQgPyBjaCAtIDEgOiBjaCwgcmlnaHQgIT0gaW52ZXJ0KVxuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpO1xuICAgIHZhciBvdGhlciA9IGJpZGlPdGhlcjtcbiAgICB2YXIgdmFsID0gZ2V0QmlkaShjaCwgcGFydFBvcywgc3RpY2t5ID09IFwiYmVmb3JlXCIpO1xuICAgIGlmIChvdGhlciAhPSBudWxsKSB7IHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIG90aGVyLCBzdGlja3kgIT0gXCJiZWZvcmVcIik7IH1cbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvclxuICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuXG4gIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHtcbiAgICB2YXIgbGVmdCA9IDA7XG4gICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBsZWZ0ID0gY2hhcldpZHRoKGNtLmRpc3BsYXkpICogcG9zLmNoOyB9XG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpO1xuICAgIHZhciB0b3AgPSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpO1xuICAgIHJldHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0fVxuICB9XG5cbiAgLy8gUG9zaXRpb25zIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIgY29udGFpbiBzb21lIGV4dHJhIGluZm9ybWF0aW9uLlxuICAvLyB4UmVsIGlzIHRoZSByZWxhdGl2ZSB4IHBvc2l0aW9uIG9mIHRoZSBpbnB1dCBjb29yZGluYXRlcyBjb21wYXJlZFxuICAvLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBjb29yZGluYXRlcyBhcmUgdG9cbiAgLy8gdGhlIHJpZ2h0IG9mIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24sIGZvciBleGFtcGxlKS4gV2hlbiBvdXRzaWRlXG4gIC8vIGlzIHRydWUsIHRoYXQgbWVhbnMgdGhlIGNvb3JkaW5hdGVzIGxpZSBvdXRzaWRlIHRoZSBsaW5lJ3NcbiAgLy8gdmVydGljYWwgcmFuZ2UuXG4gIGZ1bmN0aW9uIFBvc1dpdGhJbmZvKGxpbmUsIGNoLCBzdGlja3ksIG91dHNpZGUsIHhSZWwpIHtcbiAgICB2YXIgcG9zID0gUG9zKGxpbmUsIGNoLCBzdGlja3kpO1xuICAgIHBvcy54UmVsID0geFJlbDtcbiAgICBpZiAob3V0c2lkZSkgeyBwb3Mub3V0c2lkZSA9IG91dHNpZGU7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuXG4gIC8vIElucHV0IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsIChcImRpdlwiIGNvb3JkaW5hdGUgc3lzdGVtKS5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2M7XG4gICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7XG4gICAgaWYgKHkgPCAwKSB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIG51bGwsIC0xLCAtMSkgfVxuICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChsaW5lTiA+IGxhc3QpXG4gICAgICB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgbnVsbCwgMSwgMSkgfVxuICAgIGlmICh4IDwgMCkgeyB4ID0gMDsgfVxuXG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU4sIHgsIHkpO1xuICAgICAgdmFyIGNvbGxhcHNlZCA9IGNvbGxhcHNlZFNwYW5Bcm91bmQobGluZU9iaiwgZm91bmQuY2ggKyAoZm91bmQueFJlbCA+IDAgfHwgZm91bmQub3V0c2lkZSA+IDAgPyAxIDogMCkpO1xuICAgICAgaWYgKCFjb2xsYXBzZWQpIHsgcmV0dXJuIGZvdW5kIH1cbiAgICAgIHZhciByYW5nZUVuZCA9IGNvbGxhcHNlZC5maW5kKDEpO1xuICAgICAgaWYgKHJhbmdlRW5kLmxpbmUgPT0gbGluZU4pIHsgcmV0dXJuIHJhbmdlRW5kIH1cbiAgICAgIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4gPSByYW5nZUVuZC5saW5lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB5KSB7XG4gICAgeSAtPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgdmFyIGVuZCA9IGxpbmVPYmoudGV4dC5sZW5ndGg7XG4gICAgdmFyIGJlZ2luID0gZmluZEZpcnN0KGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCAtIDEpLmJvdHRvbSA8PSB5OyB9LCBlbmQsIDApO1xuICAgIGVuZCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpLnRvcCA+IHk7IH0sIGJlZ2luLCBlbmQpO1xuICAgIHJldHVybiB7YmVnaW46IGJlZ2luLCBlbmQ6IGVuZH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpIHtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgdmFyIHRhcmdldFRvcCA9IGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpLCBcImxpbmVcIikudG9wO1xuICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXRUb3ApXG4gIH1cblxuICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNpZGUgb2YgYSBib3ggaXMgYWZ0ZXIgdGhlIGdpdmVuXG4gIC8vIGNvb3JkaW5hdGVzLCBpbiB0b3AtdG8tYm90dG9tLCBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICBmdW5jdGlvbiBib3hJc0FmdGVyKGJveCwgeCwgeSwgbGVmdCkge1xuICAgIHJldHVybiBib3guYm90dG9tIDw9IHkgPyBmYWxzZSA6IGJveC50b3AgPiB5ID8gdHJ1ZSA6IChsZWZ0ID8gYm94LmxlZnQgOiBib3gucmlnaHQpID4geFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHtcbiAgICAvLyBNb3ZlIHkgaW50byBsaW5lLWxvY2FsIGNvb3JkaW5hdGUgc3BhY2VcbiAgICB5IC09IGhlaWdodEF0TGluZShsaW5lT2JqKTtcbiAgICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTtcbiAgICAvLyBXaGVuIGRpcmVjdGx5IGNhbGxpbmcgYG1lYXN1cmVDaGFyUHJlcGFyZWRgLCB3ZSBoYXZlIHRvIGFkanVzdFxuICAgIC8vIGZvciB0aGUgd2lkZ2V0cyBhdCB0aGlzIGxpbmUuXG4gICAgdmFyIHdpZGdldEhlaWdodCA9IHdpZGdldFRvcEhlaWdodChsaW5lT2JqKTtcbiAgICB2YXIgYmVnaW4gPSAwLCBlbmQgPSBsaW5lT2JqLnRleHQubGVuZ3RoLCBsdHIgPSB0cnVlO1xuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgY20uZG9jLmRpcmVjdGlvbik7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXNuJ3QgcGxhaW4gbGVmdC10by1yaWdodCB0ZXh0LCBmaXJzdCBmaWd1cmUgb3V0XG4gICAgLy8gd2hpY2ggYmlkaSBzZWN0aW9uIHRoZSBjb29yZGluYXRlcyBmYWxsIGludG8uXG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICB2YXIgcGFydCA9IChjbS5vcHRpb25zLmxpbmVXcmFwcGluZyA/IGNvb3Jkc0JpZGlQYXJ0V3JhcHBlZCA6IGNvb3Jkc0JpZGlQYXJ0KVxuICAgICAgICAgICAgICAgICAgIChjbSwgbGluZU9iaiwgbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KTtcbiAgICAgIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIC8vIFRoZSBhd2t3YXJkIC0xIG9mZnNldHMgYXJlIG5lZWRlZCBiZWNhdXNlIGZpbmRGaXJzdCAoY2FsbGVkXG4gICAgICAvLyBvbiB0aGVzZSBiZWxvdykgd2lsbCB0cmVhdCBpdHMgZmlyc3QgYm91bmQgYXMgaW5jbHVzaXZlLFxuICAgICAgLy8gc2Vjb25kIGFzIGV4Y2x1c2l2ZSwgYnV0IHdlIHdhbnQgdG8gYWN0dWFsbHkgYWRkcmVzcyB0aGVcbiAgICAgIC8vIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnQncyByYW5nZVxuICAgICAgYmVnaW4gPSBsdHIgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMTtcbiAgICAgIGVuZCA9IGx0ciA/IHBhcnQudG8gOiBwYXJ0LmZyb20gLSAxO1xuICAgIH1cblxuICAgIC8vIEEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hvc2UgYm91bmRpbmcgYm94XG4gICAgLy8gc3RhcnRzIGFmdGVyIHRoZSBjb29yZGluYXRlcy4gSWYgd2UgcnVuIGFjcm9zcyBhbnkgd2hvc2UgYm94IHdyYXBcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIHN0b3JlIHRoYXQuXG4gICAgdmFyIGNoQXJvdW5kID0gbnVsbCwgYm94QXJvdW5kID0gbnVsbDtcbiAgICB2YXIgY2ggPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7XG4gICAgICB2YXIgYm94ID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCk7XG4gICAgICBib3gudG9wICs9IHdpZGdldEhlaWdodDsgYm94LmJvdHRvbSArPSB3aWRnZXRIZWlnaHQ7XG4gICAgICBpZiAoIWJveElzQWZ0ZXIoYm94LCB4LCB5LCBmYWxzZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGlmIChib3gudG9wIDw9IHkgJiYgYm94LmxlZnQgPD0geCkge1xuICAgICAgICBjaEFyb3VuZCA9IGNoO1xuICAgICAgICBib3hBcm91bmQgPSBib3g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIGJlZ2luLCBlbmQpO1xuXG4gICAgdmFyIGJhc2VYLCBzdGlja3ksIG91dHNpZGUgPSBmYWxzZTtcbiAgICAvLyBJZiBhIGJveCBhcm91bmQgdGhlIGNvb3JkaW5hdGVzIHdhcyBmb3VuZCwgdXNlIHRoYXRcbiAgICBpZiAoYm94QXJvdW5kKSB7XG4gICAgICAvLyBEaXN0aW5ndWlzaCBjb29yZGluYXRlcyBuZWFyZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2lkZSBvZiB0aGUgYm94XG4gICAgICB2YXIgYXRMZWZ0ID0geCAtIGJveEFyb3VuZC5sZWZ0IDwgYm94QXJvdW5kLnJpZ2h0IC0geCwgYXRTdGFydCA9IGF0TGVmdCA9PSBsdHI7XG4gICAgICBjaCA9IGNoQXJvdW5kICsgKGF0U3RhcnQgPyAwIDogMSk7XG4gICAgICBzdGlja3kgPSBhdFN0YXJ0ID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIGJhc2VYID0gYXRMZWZ0ID8gYm94QXJvdW5kLmxlZnQgOiBib3hBcm91bmQucmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIChBZGp1c3QgZm9yIGV4dGVuZGVkIGJvdW5kLCBpZiBuZWNlc3NhcnkuKVxuICAgICAgaWYgKCFsdHIgJiYgKGNoID09IGVuZCB8fCBjaCA9PSBiZWdpbikpIHsgY2grKzsgfVxuICAgICAgLy8gVG8gZGV0ZXJtaW5lIHdoaWNoIHNpZGUgdG8gYXNzb2NpYXRlIHdpdGgsIGdldCB0aGUgYm94IHRvIHRoZVxuICAgICAgLy8gbGVmdCBvZiB0aGUgY2hhcmFjdGVyIGFuZCBjb21wYXJlIGl0J3MgdmVydGljYWwgcG9zaXRpb24gdG8gdGhlXG4gICAgICAvLyBjb29yZGluYXRlc1xuICAgICAgc3RpY2t5ID0gY2ggPT0gMCA/IFwiYWZ0ZXJcIiA6IGNoID09IGxpbmVPYmoudGV4dC5sZW5ndGggPyBcImJlZm9yZVwiIDpcbiAgICAgICAgKG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2ggLSAobHRyID8gMSA6IDApKS5ib3R0b20gKyB3aWRnZXRIZWlnaHQgPD0geSkgPT0gbHRyID9cbiAgICAgICAgXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIC8vIE5vdyBnZXQgYWNjdXJhdGUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgcGxhY2UsIGluIG9yZGVyIHRvIGdldCBhXG4gICAgICAvLyBiYXNlIFggcG9zaXRpb25cbiAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoLCBzdGlja3kpLCBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKTtcbiAgICAgIGJhc2VYID0gY29vcmRzLmxlZnQ7XG4gICAgICBvdXRzaWRlID0geSA8IGNvb3Jkcy50b3AgPyAtMSA6IHkgPj0gY29vcmRzLmJvdHRvbSA/IDEgOiAwO1xuICAgIH1cblxuICAgIGNoID0gc2tpcEV4dGVuZGluZ0NoYXJzKGxpbmVPYmoudGV4dCwgY2gsIDEpO1xuICAgIHJldHVybiBQb3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBzdGlja3ksIG91dHNpZGUsIHggLSBiYXNlWClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3Jkc0JpZGlQYXJ0KGNtLCBsaW5lT2JqLCBsaW5lTm8sIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpIHtcbiAgICAvLyBCaWRpIHBhcnRzIGFyZSBzb3J0ZWQgbGVmdC10by1yaWdodCwgYW5kIGluIGEgbm9uLWxpbmUtd3JhcHBpbmdcbiAgICAvLyBzaXR1YXRpb24sIHdlIGNhbiB0YWtlIHRoaXMgb3JkZXJpbmcgdG8gY29ycmVzcG9uZCB0byB0aGUgdmlzdWFsXG4gICAgLy8gb3JkZXJpbmcuIFRoaXMgZmluZHMgdGhlIGZpcnN0IHBhcnQgd2hvc2UgZW5kIGlzIGFmdGVyIHRoZSBnaXZlblxuICAgIC8vIGNvb3JkaW5hdGVzLlxuICAgIHZhciBpbmRleCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoaSkge1xuICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXSwgbHRyID0gcGFydC5sZXZlbCAhPSAxO1xuICAgICAgcmV0dXJuIGJveElzQWZ0ZXIoY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBsdHIgPyBwYXJ0LnRvIDogcGFydC5mcm9tLCBsdHIgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKSwgeCwgeSwgdHJ1ZSlcbiAgICB9LCAwLCBvcmRlci5sZW5ndGggLSAxKTtcbiAgICB2YXIgcGFydCA9IG9yZGVyW2luZGV4XTtcbiAgICAvLyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJ0LCB0aGUgcGFydCdzIHN0YXJ0IGlzIGFsc28gYWZ0ZXJcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIGFuZCB0aGUgY29vcmRpbmF0ZXMgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUgYXNcbiAgICAvLyB0aGF0IHN0YXJ0LCBtb3ZlIG9uZSBwYXJ0IGJhY2suXG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdmFyIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIHZhciBzdGFydCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgbHRyID8gcGFydC5mcm9tIDogcGFydC50bywgbHRyID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lXCIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7XG4gICAgICBpZiAoYm94SXNBZnRlcihzdGFydCwgeCwgeSwgdHJ1ZSkgJiYgc3RhcnQudG9wID4geSlcbiAgICAgICAgeyBwYXJ0ID0gb3JkZXJbaW5kZXggLSAxXTsgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQmlkaVBhcnRXcmFwcGVkKGNtLCBsaW5lT2JqLCBfbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KSB7XG4gICAgLy8gSW4gYSB3cmFwcGVkIGxpbmUsIHJ0bCB0ZXh0IG9uIHdyYXBwaW5nIGJvdW5kYXJpZXMgY2FuIGRvIHRoaW5nc1xuICAgIC8vIHRoYXQgZG9uJ3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXJpbmcgaW4gb3VyIGBvcmRlcmAgYXJyYXkgYXRcbiAgICAvLyBhbGwsIHNvIGEgYmluYXJ5IHNlYXJjaCBkb2Vzbid0IHdvcmssIGFuZCB3ZSB3YW50IHRvIHJldHVybiBhXG4gICAgLy8gcGFydCB0aGF0IG9ubHkgc3BhbnMgb25lIGxpbmUgc28gdGhhdCB0aGUgYmluYXJ5IHNlYXJjaCBpblxuICAgIC8vIGNvb3Jkc0NoYXJJbm5lciBpcyBzYWZlLiBBcyBzdWNoLCB3ZSBmaXJzdCBmaW5kIHRoZSBleHRlbnQgb2YgdGhlXG4gICAgLy8gd3JhcHBlZCBsaW5lLCBhbmQgdGhlbiBkbyBhIGZsYXQgc2VhcmNoIGluIHdoaWNoIHdlIGRpc2NhcmQgYW55XG4gICAgLy8gc3BhbnMgdGhhdCBhcmVuJ3Qgb24gdGhlIGxpbmUuXG4gICAgdmFyIHJlZiA9IHdyYXBwZWRMaW5lRXh0ZW50KGNtLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUsIHkpO1xuICAgIHZhciBiZWdpbiA9IHJlZi5iZWdpbjtcbiAgICB2YXIgZW5kID0gcmVmLmVuZDtcbiAgICBpZiAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGVuZCAtIDEpKSkgeyBlbmQtLTsgfVxuICAgIHZhciBwYXJ0ID0gbnVsbCwgY2xvc2VzdERpc3QgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwID0gb3JkZXJbaV07XG4gICAgICBpZiAocC5mcm9tID49IGVuZCB8fCBwLnRvIDw9IGJlZ2luKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBsdHIgPSBwLmxldmVsICE9IDE7XG4gICAgICB2YXIgZW5kWCA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgbHRyID8gTWF0aC5taW4oZW5kLCBwLnRvKSAtIDEgOiBNYXRoLm1heChiZWdpbiwgcC5mcm9tKSkucmlnaHQ7XG4gICAgICAvLyBXZWlnaCBhZ2FpbnN0IHNwYW5zIGVuZGluZyBiZWZvcmUgdGhpcywgc28gdGhhdCB0aGV5IGFyZSBvbmx5XG4gICAgICAvLyBwaWNrZWQgaWYgbm90aGluZyBlbmRzIGFmdGVyXG4gICAgICB2YXIgZGlzdCA9IGVuZFggPCB4ID8geCAtIGVuZFggKyAxZTkgOiBlbmRYIC0geDtcbiAgICAgIGlmICghcGFydCB8fCBjbG9zZXN0RGlzdCA+IGRpc3QpIHtcbiAgICAgICAgcGFydCA9IHA7XG4gICAgICAgIGNsb3Nlc3REaXN0ID0gZGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwYXJ0KSB7IHBhcnQgPSBvcmRlcltvcmRlci5sZW5ndGggLSAxXTsgfVxuICAgIC8vIENsaXAgdGhlIHBhcnQgdG8gdGhlIHdyYXBwZWQgbGluZS5cbiAgICBpZiAocGFydC5mcm9tIDwgYmVnaW4pIHsgcGFydCA9IHtmcm9tOiBiZWdpbiwgdG86IHBhcnQudG8sIGxldmVsOiBwYXJ0LmxldmVsfTsgfVxuICAgIGlmIChwYXJ0LnRvID4gZW5kKSB7IHBhcnQgPSB7ZnJvbTogcGFydC5mcm9tLCB0bzogZW5kLCBsZXZlbDogcGFydC5sZXZlbH07IH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgdmFyIG1lYXN1cmVUZXh0O1xuICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IHRleHQgaGVpZ2h0LlxuICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3BsYXkpIHtcbiAgICBpZiAoZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ICE9IG51bGwpIHsgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCB9XG4gICAgaWYgKG1lYXN1cmVUZXh0ID09IG51bGwpIHtcbiAgICAgIG1lYXN1cmVUZXh0ID0gZWx0KFwicHJlXCIsIG51bGwsIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgICAvLyBNZWFzdXJlIGEgYnVuY2ggb2YgbGluZXMsIGZvciBicm93c2VycyB0aGF0IGNvbXB1dGVcbiAgICAgIC8vIGZyYWN0aW9uYWwgaGVpZ2h0cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkge1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChlbHQoXCJiclwiKSk7XG4gICAgICB9XG4gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgIH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIG1lYXN1cmVUZXh0KTtcbiAgICB2YXIgaGVpZ2h0ID0gbWVhc3VyZVRleHQub2Zmc2V0SGVpZ2h0IC8gNTA7XG4gICAgaWYgKGhlaWdodCA+IDMpIHsgZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gaGVpZ2h0OyB9XG4gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTtcbiAgICByZXR1cm4gaGVpZ2h0IHx8IDFcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoLlxuICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCB9XG4gICAgdmFyIGFuY2hvciA9IGVsdChcInNwYW5cIiwgXCJ4eHh4eHh4eHh4XCIpO1xuICAgIHZhciBwcmUgPSBlbHQoXCJwcmVcIiwgW2FuY2hvcl0sIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpO1xuICAgIHZhciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDEwO1xuICAgIGlmICh3aWR0aCA+IDIpIHsgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsgfVxuICAgIHJldHVybiB3aWR0aCB8fCAxMFxuICB9XG5cbiAgLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMgYW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZVxuICAvLyB2aWV3LCBzbyB0aGF0IHdlIGRvbid0IGludGVybGVhdmUgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgRE9NLlxuICBmdW5jdGlvbiBnZXREaW1lbnNpb25zKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdpZHRoID0ge307XG4gICAgdmFyIGd1dHRlckxlZnQgPSBkLmd1dHRlcnMuY2xpZW50TGVmdDtcbiAgICBmb3IgKHZhciBuID0gZC5ndXR0ZXJzLmZpcnN0Q2hpbGQsIGkgPSAwOyBuOyBuID0gbi5uZXh0U2libGluZywgKytpKSB7XG4gICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ldLmNsYXNzTmFtZTtcbiAgICAgIGxlZnRbaWRdID0gbi5vZmZzZXRMZWZ0ICsgbi5jbGllbnRMZWZ0ICsgZ3V0dGVyTGVmdDtcbiAgICAgIHdpZHRoW2lkXSA9IG4uY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB7Zml4ZWRQb3M6IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGQpLFxuICAgICAgICAgICAgZ3V0dGVyVG90YWxXaWR0aDogZC5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgZ3V0dGVyTGVmdDogbGVmdCxcbiAgICAgICAgICAgIGd1dHRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIHdyYXBwZXJXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRofVxuICB9XG5cbiAgLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAvLyBidXQgdXNpbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IHRvIGdldCBhIHN1Yi1waXhlbC1hY2N1cmF0ZVxuICAvLyByZXN1bHQuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHtcbiAgICByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBlc3RpbWF0ZXMgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHRvIHVzZSBhc1xuICAvLyBmaXJzdCBhcHByb3hpbWF0aW9uIHVudGlsIHRoZSBsaW5lIGJlY29tZXMgdmlzaWJsZSAoYW5kIGlzIHRodXNcbiAgLy8gcHJvcGVybHkgbWVhc3VyYWJsZSkuXG4gIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7XG4gICAgdmFyIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkgeyByZXR1cm4gMCB9XG5cbiAgICAgIHZhciB3aWRnZXRzSGVpZ2h0ID0gMDtcbiAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHsgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0OyB9XG4gICAgICB9IH1cblxuICAgICAgaWYgKHdyYXBwaW5nKVxuICAgICAgICB7IHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aCB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aCB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIGVzdCA9IGVzdGltYXRlSGVpZ2h0KGNtKTtcbiAgICBkb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIGVzdEhlaWdodCA9IGVzdChsaW5lKTtcbiAgICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOyB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsXG4gIC8vIGlzIGZhbHNlLCBpdCBjaGVja3Mgd2hldGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNrZWQsXG4gIC8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVjdGFuZ3VsYXJcbiAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yXG4gIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmlnaHQgb2YgdGhlIHRleHQuXG4gIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9yUmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWxpYmVyYWwgJiYgZV90YXJnZXQoZSkuZ2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIikgPT0gXCJ0cnVlXCIpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LlxuICAgIHRyeSB7IHggPSBlLmNsaWVudFggLSBzcGFjZS5sZWZ0OyB5ID0gZS5jbGllbnRZIC0gc3BhY2UudG9wOyB9XG4gICAgY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTtcbiAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA+IDAgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHtcbiAgICAgIHZhciBjb2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFiU2l6ZSkgLSBsaW5lLmxlbmd0aDtcbiAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSAtIGNvbERpZmYpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3Jkc1xuICB9XG5cbiAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbFxuICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuXG4gIGZ1bmN0aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHtcbiAgICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gbnVsbCB9XG4gICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tO1xuICAgIGlmIChuIDwgMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuIC09IHZpZXdbaV0uc2l6ZTtcbiAgICAgIGlmIChuIDwgMCkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGVcbiAgLy8gZG9jdW1lbnQuIEZyb20gYW5kIHRvIGFyZSBpbiBwcmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzXG4gIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzXG4gIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheVxuICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVnTGluZUNoYW5nZSAoYmVsb3cpXG4gIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLlxuICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7XG4gICAgaWYgKGZyb20gPT0gbnVsbCkgeyBmcm9tID0gY20uZG9jLmZpcnN0OyB9XG4gICAgaWYgKHRvID09IG51bGwpIHsgdG8gPSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsgfVxuICAgIGlmICghbGVuZGlmZikgeyBsZW5kaWZmID0gMDsgfVxuXG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiZcbiAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID4gZnJvbSkpXG4gICAgICB7IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOyB9XG5cbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG5cbiAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBDaGFuZ2UgYWZ0ZXJcbiAgICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKSA8IGRpc3BsYXkudmlld1RvKVxuICAgICAgICB7IHJlc2V0VmlldyhjbSk7IH1cbiAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZVxuICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7XG4gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwXG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwXG4gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0KSB7XG4gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpO1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOO1xuICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVybGFwXG4gICAgICB2YXIgY3V0JDEgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICBpZiAoY3V0JDEpIHtcbiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dCQxLmluZGV4KTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQkMS5saW5lTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGVcbiAgICAgIHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICB2YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkge1xuICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0VG9wLmluZGV4KVxuICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGN1dFRvcC5saW5lTiwgY3V0Qm90LmxpbmVOKSlcbiAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgICBpZiAoZXh0KSB7XG4gICAgICBpZiAodG8gPCBleHQubGluZU4pXG4gICAgICAgIHsgZXh0LmxpbmVOICs9IGxlbmRpZmY7IH1cbiAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSlcbiAgICAgICAgeyBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgdG8gYSBzaW5nbGUgbGluZS4gVHlwZSBtdXN0IGJlIG9uZSBvZiBcInRleHRcIixcbiAgLy8gXCJndXR0ZXJcIiwgXCJjbGFzc1wiLCBcIndpZGdldFwiXG4gIGZ1bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHtcbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7IH1cblxuICAgIGlmIChsaW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGxpbmVWaWV3ID0gZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmUpXTtcbiAgICBpZiAobGluZVZpZXcubm9kZSA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgdmFyIGFyciA9IGxpbmVWaWV3LmNoYW5nZXMgfHwgKGxpbmVWaWV3LmNoYW5nZXMgPSBbXSk7XG4gICAgaWYgKGluZGV4T2YoYXJyLCB0eXBlKSA9PSAtMSkgeyBhcnIucHVzaCh0eXBlKTsgfVxuICB9XG5cbiAgLy8gQ2xlYXIgdGhlIHZpZXcuXG4gIGZ1bmN0aW9uIHJlc2V0VmlldyhjbSkge1xuICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDtcbiAgICBjbS5kaXNwbGF5LnZpZXcgPSBbXTtcbiAgICBjbS5kaXNwbGF5LnZpZXdPZmZzZXQgPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucyB8fCBuZXdOID09IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplKVxuICAgICAgeyByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059IH1cbiAgICB2YXIgbiA9IGNtLmRpc3BsYXkudmlld0Zyb207XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKVxuICAgICAgeyBuICs9IHZpZXdbaV0uc2l6ZTsgfVxuICAgIGlmIChuICE9IG9sZE4pIHtcbiAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWZmID0gbiAtIG9sZE47XG4gICAgICB9XG4gICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjtcbiAgICB9XG4gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHtcbiAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSB7IHJldHVybiBudWxsIH1cbiAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059XG4gIH1cblxuICAvLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50XG4gIC8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC5cbiAgZnVuY3Rpb24gYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKHZpZXcubGVuZ3RoID09IDAgfHwgZnJvbSA+PSBkaXNwbGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pO1xuICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tID4gZnJvbSlcbiAgICAgICAgeyBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgZGlzcGxheS52aWV3RnJvbSkuY29uY2F0KGRpc3BsYXkudmlldyk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKVxuICAgICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7IH1cbiAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tO1xuICAgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGZpbmRWaWV3SW5kZXgoY20sIHRvKSk7IH1cbiAgICB9XG4gICAgZGlzcGxheS52aWV3VG8gPSB0bztcbiAgfVxuXG4gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlzXG4gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuXG4gIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpIHsgKytkaXJ0eTsgfVxuICAgIH1cbiAgICByZXR1cm4gZGlydHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihjbSkge1xuICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7XG4gICAgaWYgKCBwcmltYXJ5ID09PSB2b2lkIDAgKSBwcmltYXJ5ID0gdHJ1ZTtcblxuICAgIHZhciBkb2MgPSBjbS5kb2MsIHJlc3VsdCA9IHt9O1xuICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXByaW1hcnkgJiYgaSA9PSBkb2Muc2VsLnByaW1JbmRleCkgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5mcm9tKCkubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCByYW5nZS50bygpLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5nZS5lbXB0eSgpO1xuICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKVxuICAgICAgICB7IGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KTsgfVxuICAgICAgaWYgKCFjb2xsYXBzZWQpXG4gICAgICAgIHsgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOyB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2VcbiAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7XG4gICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgXCJkaXZcIiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7XG5cbiAgICB2YXIgY3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBcIlxcdTAwYTBcIiwgXCJDb2RlTWlycm9yLWN1cnNvclwiKSk7XG4gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyBcInB4XCI7XG5cbiAgICBpZiAocG9zLm90aGVyKSB7XG4gICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHRcbiAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgXCJcXHUwMGEwXCIsIFwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3JcIikpO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyBcInB4XCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgXCJweFwiO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArIFwicHhcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbXBDb29yZHMoYSwgYikgeyByZXR1cm4gYS50b3AgLSBiLnRvcCB8fCBhLmxlZnQgLSBiLmxlZnQgfVxuXG4gIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVjdGlvblxuICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQ7XG4gICAgdmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0O1xuICAgIHZhciBkb2NMVFIgPSBkb2MuZGlyZWN0aW9uID09IFwibHRyXCI7XG5cbiAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7XG4gICAgICBpZiAodG9wIDwgMCkgeyB0b3AgPSAwOyB9XG4gICAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7XG4gICAgICBib3R0b20gPSBNYXRoLnJvdW5kKGJvdHRvbSk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNlbGVjdGVkXCIsIChcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogXCIgKyBsZWZ0ICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIgKyB0b3AgKyBcInB4OyB3aWR0aDogXCIgKyAod2lkdGggPT0gbnVsbCA/IHJpZ2h0U2lkZSAtIGxlZnQgOiB3aWR0aCkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIiArIChib3R0b20gLSB0b3ApICsgXCJweFwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnKSB7XG4gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTtcbiAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICAgIHZhciBzdGFydCwgZW5kO1xuICAgICAgZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCBcImRpdlwiLCBsaW5lT2JqLCBiaWFzKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB3cmFwWChwb3MsIGRpciwgc2lkZSkge1xuICAgICAgICB2YXIgZXh0ZW50ID0gd3JhcHBlZExpbmVFeHRlbnRDaGFyKGNtLCBsaW5lT2JqLCBudWxsLCBwb3MpO1xuICAgICAgICB2YXIgcHJvcCA9IChkaXIgPT0gXCJsdHJcIikgPT0gKHNpZGUgPT0gXCJhZnRlclwiKSA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICB2YXIgY2ggPSBzaWRlID09IFwiYWZ0ZXJcIiA/IGV4dGVudC5iZWdpbiA6IGV4dGVudC5lbmQgLSAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGV4dGVudC5lbmQgLSAxKSkgPyAyIDogMSk7XG4gICAgICAgIHJldHVybiBjb29yZHMoY2gsIHByb3ApW3Byb3BdXG4gICAgICB9XG5cbiAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGRvYy5kaXJlY3Rpb24pO1xuICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbiAoZnJvbSwgdG8sIGRpciwgaSkge1xuICAgICAgICB2YXIgbHRyID0gZGlyID09IFwibHRyXCI7XG4gICAgICAgIHZhciBmcm9tUG9zID0gY29vcmRzKGZyb20sIGx0ciA/IFwibGVmdFwiIDogXCJyaWdodFwiKTtcbiAgICAgICAgdmFyIHRvUG9zID0gY29vcmRzKHRvIC0gMSwgbHRyID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpO1xuXG4gICAgICAgIHZhciBvcGVuU3RhcnQgPSBmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwLCBvcGVuRW5kID0gdG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuO1xuICAgICAgICB2YXIgZmlyc3QgPSBpID09IDAsIGxhc3QgPSAhb3JkZXIgfHwgaSA9PSBvcmRlci5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodG9Qb3MudG9wIC0gZnJvbVBvcy50b3AgPD0gMykgeyAvLyBTaW5nbGUgbGluZVxuICAgICAgICAgIHZhciBvcGVuTGVmdCA9IChkb2NMVFIgPyBvcGVuU3RhcnQgOiBvcGVuRW5kKSAmJiBmaXJzdDtcbiAgICAgICAgICB2YXIgb3BlblJpZ2h0ID0gKGRvY0xUUiA/IG9wZW5FbmQgOiBvcGVuU3RhcnQpICYmIGxhc3Q7XG4gICAgICAgICAgdmFyIGxlZnQgPSBvcGVuTGVmdCA/IGxlZnRTaWRlIDogKGx0ciA/IGZyb21Qb3MgOiB0b1BvcykubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBvcGVuUmlnaHQgPyByaWdodFNpZGUgOiAobHRyID8gdG9Qb3MgOiBmcm9tUG9zKS5yaWdodDtcbiAgICAgICAgICBhZGQobGVmdCwgZnJvbVBvcy50b3AsIHJpZ2h0IC0gbGVmdCwgZnJvbVBvcy5ib3R0b20pO1xuICAgICAgICB9IGVsc2UgeyAvLyBNdWx0aXBsZSBsaW5lc1xuICAgICAgICAgIHZhciB0b3BMZWZ0LCB0b3BSaWdodCwgYm90TGVmdCwgYm90UmlnaHQ7XG4gICAgICAgICAgaWYgKGx0cikge1xuICAgICAgICAgICAgdG9wTGVmdCA9IGRvY0xUUiAmJiBvcGVuU3RhcnQgJiYgZmlyc3QgPyBsZWZ0U2lkZSA6IGZyb21Qb3MubGVmdDtcbiAgICAgICAgICAgIHRvcFJpZ2h0ID0gZG9jTFRSID8gcmlnaHRTaWRlIDogd3JhcFgoZnJvbSwgZGlyLCBcImJlZm9yZVwiKTtcbiAgICAgICAgICAgIGJvdExlZnQgPSBkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgICBib3RSaWdodCA9IGRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyByaWdodFNpZGUgOiB0b1Bvcy5yaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9wTGVmdCA9ICFkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKGZyb20sIGRpciwgXCJiZWZvcmVcIik7XG4gICAgICAgICAgICB0b3BSaWdodCA9ICFkb2NMVFIgJiYgb3BlblN0YXJ0ICYmIGZpcnN0ID8gcmlnaHRTaWRlIDogZnJvbVBvcy5yaWdodDtcbiAgICAgICAgICAgIGJvdExlZnQgPSAhZG9jTFRSICYmIG9wZW5FbmQgJiYgbGFzdCA/IGxlZnRTaWRlIDogdG9Qb3MubGVmdDtcbiAgICAgICAgICAgIGJvdFJpZ2h0ID0gIWRvY0xUUiA/IHJpZ2h0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZCh0b3BMZWZ0LCBmcm9tUG9zLnRvcCwgdG9wUmlnaHQgLSB0b3BMZWZ0LCBmcm9tUG9zLmJvdHRvbSk7XG4gICAgICAgICAgaWYgKGZyb21Qb3MuYm90dG9tIDwgdG9Qb3MudG9wKSB7IGFkZChsZWZ0U2lkZSwgZnJvbVBvcy5ib3R0b20sIG51bGwsIHRvUG9zLnRvcCk7IH1cbiAgICAgICAgICBhZGQoYm90TGVmdCwgdG9Qb3MudG9wLCBib3RSaWdodCAtIGJvdExlZnQsIHRvUG9zLmJvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXJ0IHx8IGNtcENvb3Jkcyhmcm9tUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gZnJvbVBvczsgfVxuICAgICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gdG9Qb3M7IH1cbiAgICAgICAgaWYgKCFlbmQgfHwgY21wQ29vcmRzKGZyb21Qb3MsIGVuZCkgPCAwKSB7IGVuZCA9IGZyb21Qb3M7IH1cbiAgICAgICAgaWYgKGNtcENvb3Jkcyh0b1BvcywgZW5kKSA8IDApIHsgZW5kID0gdG9Qb3M7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfVxuICAgIH1cblxuICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1RvID0gcmFuZ2UudG8oKTtcbiAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkge1xuICAgICAgZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTtcbiAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5lKTtcbiAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kO1xuICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDtcbiAgICAgIGlmIChzaW5nbGVWTGluZSkge1xuICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApXG4gICAgICAgIHsgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOyB9XG4gICAgfVxuXG4gICAgb3V0cHV0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxuXG4gIC8vIEN1cnNvci1ibGlua2luZ1xuICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5rZXIpO1xuICAgIHZhciBvbiA9IHRydWU7XG4gICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XG4gICAgaWYgKGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlID4gMClcbiAgICAgIHsgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyBcIlwiIDogXCJoaWRkZW5cIjsgfSxcbiAgICAgICAgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOyB9XG4gICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKVxuICAgICAgeyBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHtcbiAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkge1xuICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIG9uQmx1cihjbSk7XG4gICAgfSB9LCAxMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2N1cyhjbSwgZSkge1xuICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOyB9XG5cbiAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSBcIm5vY3Vyc29yXCIpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgIHNpZ25hbChjbSwgXCJmb2N1c1wiLCBjbSwgZSk7XG4gICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dFxuICAgICAgLy8gbWVudSBpcyBjbG9zZWQgKHNpbmNlIHRoZSBpbnB1dCByZXNldCB3b3VsZCBraWxsIHRoZVxuICAgICAgLy8gc2VsZWN0LWFsbCBkZXRlY3Rpb24gaGFjaylcbiAgICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7XG4gICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgaWYgKHdlYmtpdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfSAvLyBJc3N1ZSAjMTczMFxuICAgICAgfVxuICAgICAgY20uZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCk7XG4gICAgfVxuICAgIHJlc3RhcnRCbGluayhjbSk7XG4gIH1cbiAgZnVuY3Rpb24gb25CbHVyKGNtLCBlKSB7XG4gICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7IHJldHVybiB9XG5cbiAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgc2lnbmFsKGNtLCBcImJsdXJcIiwgY20sIGUpO1xuICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci1mb2N1c2VkXCIpO1xuICAgIH1cbiAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH0gfSwgMTUwKTtcbiAgfVxuXG4gIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpclxuICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC5cbiAgZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nO1xuICAgICAgdmFyIGhlaWdodCA9ICh2b2lkIDApLCB3aWR0aCA9IDA7XG4gICAgICBpZiAoY3VyLmhpZGRlbikgeyBjb250aW51ZSB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHtcbiAgICAgICAgdmFyIGJvdCA9IGN1ci5ub2RlLm9mZnNldFRvcCArIGN1ci5ub2RlLm9mZnNldEhlaWdodDtcbiAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTtcbiAgICAgICAgcHJldkJvdHRvbSA9IGJvdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbGluZXMgZG9uJ3QgZXh0ZW5kIHBhc3QgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGVkaXRvciB3aWR0aFxuICAgICAgICBpZiAoIXdyYXBwaW5nICYmIGN1ci50ZXh0LmZpcnN0Q2hpbGQpXG4gICAgICAgICAgeyB3aWR0aCA9IGN1ci50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSBib3gubGVmdCAtIDE7IH1cbiAgICAgIH1cbiAgICAgIHZhciBkaWZmID0gY3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgaWYgKGRpZmYgPiAuMDA1IHx8IGRpZmYgPCAtLjAwNSkge1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGN1ci5saW5lLCBoZWlnaHQpO1xuICAgICAgICB1cGRhdGVXaWRnZXRIZWlnaHQoY3VyLmxpbmUpO1xuICAgICAgICBpZiAoY3VyLnJlc3QpIHsgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKylcbiAgICAgICAgICB7IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7IH0gfVxuICAgICAgfVxuICAgICAgaWYgKHdpZHRoID4gY20uZGlzcGxheS5zaXplcldpZHRoKSB7XG4gICAgICAgIHZhciBjaFdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKTtcbiAgICAgICAgaWYgKGNoV2lkdGggPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBjaFdpZHRoO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IGN1ci5saW5lO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBnaXZlbiBsaW5lLlxuICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkge1xuICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldLCBwYXJlbnQgPSB3Lm5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGlmIChwYXJlbnQpIHsgdy5oZWlnaHQgPSBwYXJlbnQub2Zmc2V0SGVpZ2h0OyB9XG4gICAgfSB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzXG4gIC8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3cG9ydCBtYXkgY29udGFpbiB0b3AsXG4gIC8vIGhlaWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9zKSBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkge1xuICAgIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpO1xuICAgIHZhciBib3R0b20gPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdwb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG5cbiAgICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTtcbiAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kXG4gICAgLy8gZm9yY2VzIHRob3NlIGxpbmVzIGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSkuXG4gICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkge1xuICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3cG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdwb3J0LmVuc3VyZS50by5saW5lO1xuICAgICAgaWYgKGVuc3VyZUZyb20gPCBmcm9tKSB7XG4gICAgICAgIGZyb20gPSBlbnN1cmVGcm9tO1xuICAgICAgICB0byA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7XG4gICAgICB9IGVsc2UgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2MubGFzdExpbmUoKSkgPj0gdG8pIHtcbiAgICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgICAgICB0byA9IGVuc3VyZVRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfVxuICB9XG5cbiAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVdcblxuICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHlcbiAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS5cbiAgZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpIHtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIFwic2Nyb2xsQ3Vyc29ySW50b1ZpZXdcIikpIHsgcmV0dXJuIH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBudWxsO1xuICAgIGlmIChyZWN0LnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKHJlY3QuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIHsgZG9TY3JvbGwgPSBmYWxzZTsgfVxuICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7XG4gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdChcImRpdlwiLCBcIlxcdTIwMGJcIiwgbnVsbCwgKFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiICsgKHJlY3QudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIgKyAocmVjdC5sZWZ0KSArIFwicHg7IHdpZHRoOiBcIiArIChNYXRoLm1heCgyLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSkgKyBcInB4O1wiKSk7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3JvbGxOb2RlKTtcbiAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0XG4gIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHlcbiAgLy8gbWVhc3VyZWQsIHRoZSBwb3NpdGlvbiBvZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLlxuICBmdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikge1xuICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSAwOyB9XG4gICAgdmFyIHJlY3Q7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwb3MgPT0gZW5kKSB7XG4gICAgICAvLyBTZXQgcG9zIGFuZCBlbmQgdG8gdGhlIGN1cnNvciBwb3NpdGlvbnMgYXJvdW5kIHRoZSBjaGFyYWN0ZXIgcG9zIHN0aWNrcyB0b1xuICAgICAgLy8gSWYgcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiLCB0aGF0IGlzIGFyb3VuZCBwb3MuY2ggLSAxLCBvdGhlcndpc2UgYXJvdW5kIHBvcy5jaFxuICAgICAgLy8gSWYgcG9zID09IFBvcyhfLCAwLCBcImJlZm9yZVwiKSwgcG9zIGFuZCBlbmQgYXJlIHVuY2hhbmdlZFxuICAgICAgcG9zID0gcG9zLmNoID8gUG9zKHBvcy5saW5lLCBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBwb3MuY2ggLSAxIDogcG9zLmNoLCBcImFmdGVyXCIpIDogcG9zO1xuICAgICAgZW5kID0gcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiID8gUG9zKHBvcy5saW5lLCBwb3MuY2ggKyAxLCBcImJlZm9yZVwiKSA6IHBvcztcbiAgICB9XG4gICAgZm9yICh2YXIgbGltaXQgPSAwOyBsaW1pdCA8IDU7IGxpbWl0KyspIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpO1xuICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTtcbiAgICAgIHJlY3QgPSB7bGVmdDogTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSxcbiAgICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbixcbiAgICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksXG4gICAgICAgICAgICAgIGJvdHRvbTogTWF0aC5tYXgoY29vcmRzLmJvdHRvbSwgZW5kQ29vcmRzLmJvdHRvbSkgKyBtYXJnaW59O1xuICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCk7XG4gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFydExlZnQgPSBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7XG4gICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoYW5nZWQpIHsgYnJlYWsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLlxuICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgcmVjdCkge1xuICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHJlY3QpO1xuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsgfVxuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGEgbmV3IHNjcm9sbCBwb3NpdGlvbiBuZWVkZWQgdG8gc2Nyb2xsIHRoZSBnaXZlblxuICAvLyByZWN0YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmRcbiAgLy8gc2Nyb2xsTGVmdCBwcm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZVxuICAvLyB2ZXJ0aWNhbC9ob3Jpem9udGFsIHBvc2l0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7XG4gICAgaWYgKHJlY3QudG9wIDwgMCkgeyByZWN0LnRvcCA9IDA7IH1cbiAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9O1xuICAgIGlmIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wID4gc2NyZWVuKSB7IHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBzY3JlZW47IH1cbiAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpO1xuICAgIHZhciBhdFRvcCA9IHJlY3QudG9wIDwgc25hcE1hcmdpbiwgYXRCb3R0b20gPSByZWN0LmJvdHRvbSA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47XG4gICAgaWYgKHJlY3QudG9wIDwgc2NyZWVudG9wKSB7XG4gICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogcmVjdC50b3A7XG4gICAgfSBlbHNlIGlmIChyZWN0LmJvdHRvbSA+IHNjcmVlbnRvcCArIHNjcmVlbikge1xuICAgICAgdmFyIG5ld1RvcCA9IE1hdGgubWluKHJlY3QudG9wLCAoYXRCb3R0b20gPyBkb2NCb3R0b20gOiByZWN0LmJvdHRvbSkgLSBzY3JlZW4pO1xuICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHsgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsgfVxuICAgIH1cblxuICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdDtcbiAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApO1xuICAgIHZhciB0b29XaWRlID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdCA+IHNjcmVlbnc7XG4gICAgaWYgKHRvb1dpZGUpIHsgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIHNjcmVlbnc7IH1cbiAgICBpZiAocmVjdC5sZWZ0IDwgMTApXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gMDsgfVxuICAgIGVsc2UgaWYgKHJlY3QubGVmdCA8IHNjcmVlbmxlZnQpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0IC0gKHRvb1dpZGUgPyAwIDogMTApKTsgfVxuICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPiBzY3JlZW53ICsgc2NyZWVubGVmdCAtIDMpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gcmVjdC5yaWdodCArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7IH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICAvLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS5cbiAgZnVuY3Rpb24gYWRkVG9TY3JvbGxUb3AoY20sIHRvcCkge1xuICAgIGlmICh0b3AgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9wID0gKGNtLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9wLnNjcm9sbFRvcCkgKyB0b3A7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzXG4gIC8vIHNob3duLlxuICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogY3VyLCB0bzogY3VyLCBtYXJnaW46IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2lufTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzKGNtLCB4LCB5KSB7XG4gICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHsgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsgfVxuICAgIGlmICh4ICE9IG51bGwpIHsgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IHg7IH1cbiAgICBpZiAoeSAhPSBudWxsKSB7IGNtLmN1ck9wLnNjcm9sbFRvcCA9IHk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UoY20sIHJhbmdlKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHJhbmdlO1xuICB9XG5cbiAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyXG4gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLCB0aGlzXG4gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc29cbiAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuXG4gIGZ1bmN0aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkge1xuICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsO1xuICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTtcbiAgICAgIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCByYW5nZS5tYXJnaW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCBtYXJnaW4pIHtcbiAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwge1xuICAgICAgbGVmdDogTWF0aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSxcbiAgICAgIHRvcDogTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSBtYXJnaW4sXG4gICAgICByaWdodDogTWF0aC5tYXgoZnJvbS5yaWdodCwgdG8ucmlnaHQpLFxuICAgICAgYm90dG9tOiBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIG1hcmdpblxuICAgIH0pO1xuICAgIHNjcm9sbFRvQ29vcmRzKGNtLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTtcbiAgfVxuXG4gIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydFxuICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS5cbiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsVG9wKGNtLCB2YWwpIHtcbiAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSB7IHJldHVybiB9XG4gICAgaWYgKCFnZWNrbykgeyB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB2YWx9KTsgfVxuICAgIHNldFNjcm9sbFRvcChjbSwgdmFsLCB0cnVlKTtcbiAgICBpZiAoZ2Vja28pIHsgdXBkYXRlRGlzcGxheVNpbXBsZShjbSk7IH1cbiAgICBzdGFydFdvcmtlcihjbSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNjcm9sbFRvcChjbSwgdmFsLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIHZhbCkpO1xuICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9PSB2YWwgJiYgIWZvcmNlU2Nyb2xsKSB7IHJldHVybiB9XG4gICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDtcbiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgeyBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsgfVxuICB9XG5cbiAgLy8gU3luYyBzY3JvbGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50cyBhcmVcbiAgLy8gYWxpZ25lZC5cbiAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZhbCwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKTtcbiAgICBpZiAoKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSAmJiAhZm9yY2VTY3JvbGwpIHsgcmV0dXJuIH1cbiAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIHsgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOyB9XG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQodmFsKTtcbiAgfVxuXG4gIC8vIFNDUk9MTEJBUlNcblxuICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZVxuICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuXG4gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpO1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LFxuICAgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICAgIHNjcm9sbFdpZHRoOiBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aDogZC5zY3JvbGxlci5jbGllbnRXaWR0aCxcbiAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRoLFxuICAgICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLFxuICAgICAgZG9jSGVpZ2h0OiBkb2NILFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NIICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LFxuICAgICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsXG4gICAgICBndXR0ZXJXaWR0aDogZ3V0dGVyV1xuICAgIH1cbiAgfVxuXG4gIHZhciBOYXRpdmVTY3JvbGxiYXJzID0gZnVuY3Rpb24ocGxhY2UsIHNjcm9sbCwgY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcIm1pbi13aWR0aDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIik7XG4gICAgdmFyIGhvcml6ID0gdGhpcy5ob3JpeiA9IGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLCBcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtcbiAgICB2ZXJ0LnRhYkluZGV4ID0gaG9yaXoudGFiSW5kZXggPSAtMTtcbiAgICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopO1xuXG4gICAgb24odmVydCwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHZlcnQuY2xpZW50SGVpZ2h0KSB7IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgXCJ2ZXJ0aWNhbFwiKTsgfVxuICAgIH0pO1xuICAgIG9uKGhvcml6LCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaG9yaXouY2xpZW50V2lkdGgpIHsgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsIFwiaG9yaXpvbnRhbFwiKTsgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGVja2VkWmVyb1dpZHRoID0gZmFsc2U7XG4gICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLlxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyB0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lYXN1cmUpIHtcbiAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGggKyAxO1xuICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICB2YXIgc1dpZHRoID0gbWVhc3VyZS5uYXRpdmVCYXJXaWR0aDtcblxuICAgIGlmIChuZWVkc1YpIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArIFwicHhcIiA6IFwiMFwiO1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5lZWRzSCA/IHNXaWR0aCA6IDApO1xuICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC5cbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyB0b3RhbEhlaWdodCkgKyBcInB4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIH1cblxuICAgIGlmIChuZWVkc0gpIHtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzV2lkdGggKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IG1lYXN1cmUuYmFyTGVmdCArIFwicHhcIjtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCk7XG4gICAgICB0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPVxuICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIHRvdGFsV2lkdGgpICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrZWRaZXJvV2lkdGggJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICBpZiAoc1dpZHRoID09IDApIHsgdGhpcy56ZXJvV2lkdGhIYWNrKCk7IH1cbiAgICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAwfVxuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHsgdGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKHBvcykge1xuICAgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZVZlcnQpIHsgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0LCBcInZlcnRcIik7IH1cbiAgfTtcblxuICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3ID0gbWFjICYmICFtYWNfZ2VNb3VudGFpbkxpb24gPyBcIjEycHhcIiA6IFwiMThweFwiO1xuICAgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRoID0gdztcbiAgICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgIHRoaXMuZGlzYWJsZUhvcml6ID0gbmV3IERlbGF5ZWQ7XG4gICAgdGhpcy5kaXNhYmxlVmVydCA9IG5ldyBEZWxheWVkO1xuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhciA9IGZ1bmN0aW9uIChiYXIsIGRlbGF5LCB0eXBlKSB7XG4gICAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICBmdW5jdGlvbiBtYXliZURpc2FibGUoKSB7XG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc3RpbGwgdmlzaWJsZSwgd2VcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGVsZW1lbnQgdW5kZXIgdGhlIHBpeGVsIGluIHRoZSBib3R0b21cbiAgICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFyIGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveFxuICAgICAgLy8gaXRzZWxmICh3aGVuIHRoZSBiYXIgaXMgc3RpbGwgdmlzaWJsZSkgb3IgaXRzIGZpbGxlciBjaGlsZFxuICAgICAgLy8gKHdoZW4gdGhlIGJhciBpcyBoaWRkZW4pLiBJZiBpdCBpcyBzdGlsbCB2aXNpYmxlLCB3ZSBrZWVwXG4gICAgICAvLyBpdCBlbmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy5cbiAgICAgIHZhciBib3ggPSBiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgZWx0ID0gdHlwZSA9PSBcInZlcnRcIiA/IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYm94LnJpZ2h0IC0gMSwgKGJveC50b3AgKyBib3guYm90dG9tKSAvIDIpXG4gICAgICAgICAgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChib3gucmlnaHQgKyBib3gubGVmdCkgLyAyLCBib3guYm90dG9tIC0gMSk7XG4gICAgICBpZiAoZWx0ICE9IGJhcikgeyBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlIHsgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7IH1cbiAgICB9XG4gICAgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5ob3Jpeik7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7XG4gIH07XG5cbiAgdmFyIE51bGxTY3JvbGxiYXJzID0gZnVuY3Rpb24gKCkge307XG5cbiAgTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfSB9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uICgpIHt9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKCkge307XG4gIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnMoY20sIG1lYXN1cmUpIHtcbiAgICBpZiAoIW1lYXN1cmUpIHsgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsgfVxuICAgIHZhciBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aCwgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDtcbiAgICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggfHwgc3RhcnRIZWlnaHQgIT0gY20uZGlzcGxheS5iYXJIZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgICAgeyB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7IH1cbiAgICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pKTtcbiAgICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlXG4gIC8vIGNvbnRlbnQuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheTtcbiAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpO1xuXG4gICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArIFwicHhcIjtcbiAgICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgXCJweFwiO1xuICAgIGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbSA9IHNpemVzLmJvdHRvbSArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcblxuICAgIGlmIChzaXplcy5yaWdodCAmJiBzaXplcy5ib3R0b20pIHtcbiAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgXCJweFwiO1xuICAgIH0gZWxzZSB7IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gICAgaWYgKHNpemVzLmJvdHRvbSAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHtcbiAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aCA9IG1lYXN1cmUuZ3V0dGVyV2lkdGggKyBcInB4XCI7XG4gICAgfSBlbHNlIHsgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiXCI7IH1cbiAgfVxuXG4gIHZhciBzY3JvbGxiYXJNb2RlbCA9IHtcIm5hdGl2ZVwiOiBOYXRpdmVTY3JvbGxiYXJzLCBcIm51bGxcIjogTnVsbFNjcm9sbGJhcnN9O1xuXG4gIGZ1bmN0aW9uIGluaXRTY3JvbGxiYXJzKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykge1xuICAgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCk7XG4gICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgICB7IHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOyB9XG4gICAgfVxuXG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzID0gbmV3IHNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTtcbiAgICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1c1xuICAgICAgb24obm9kZSwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH1cbiAgICAgIH0pO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykge1xuICAgICAgaWYgKGF4aXMgPT0gXCJob3Jpem9udGFsXCIpIHsgc2V0U2Nyb2xsTGVmdChjbSwgcG9zKTsgfVxuICAgICAgZWxzZSB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgcG9zKTsgfVxuICAgIH0sIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgeyBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7IH1cbiAgfVxuXG4gIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBhIHNlcmllcyBvZiBjaGFuZ2VzIHRvIHRoZSBlZGl0b3JcbiAgLy8gc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZVxuICAvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZFxuICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0Y2hlZCBhbmQgdGhlbiBhbGxcbiAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuXG5cbiAgdmFyIG5leHRPcElkID0gMDtcbiAgLy8gU3RhcnQgYSBuZXcgb3BlcmF0aW9uLlxuICBmdW5jdGlvbiBzdGFydE9wZXJhdGlvbihjbSkge1xuICAgIGNtLmN1ck9wID0ge1xuICAgICAgY206IGNtLFxuICAgICAgdmlld0NoYW5nZWQ6IGZhbHNlLCAgICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBsaW5lcyBtaWdodCBuZWVkIHRvIGJlIHJlZHJhd25cbiAgICAgIHN0YXJ0SGVpZ2h0OiBjbS5kb2MuaGVpZ2h0LCAvLyBVc2VkIHRvIGRldGVjdCBuZWVkIHRvIHVwZGF0ZSBzY3JvbGxiYXJcbiAgICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEgcmVkcmF3XG4gICAgICB1cGRhdGVJbnB1dDogMCwgICAgICAgLy8gV2hldGhlciB0byByZXNldCB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVzZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0aW5nKVxuICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50c1xuICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVyczogbnVsbCwgLy8gU2V0IG9mIGhhbmRsZXJzIHRvIGZpcmUgY3Vyc29yQWN0aXZpdHkgb25cbiAgICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5XG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd25cbiAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLCAgICAvLyBTZXQgd2hlbiB0aGUgd2lkZXN0IGxpbmUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBhbmV3XG4gICAgICBzY3JvbGxMZWZ0OiBudWxsLCBzY3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNoZWQgdG8gRE9NIHlldFxuICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb25cbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSURcbiAgICB9O1xuICAgIHB1c2hPcGVyYXRpb24oY20uY3VyT3ApO1xuICB9XG5cbiAgLy8gRmluaXNoIGFuIG9wZXJhdGlvbiwgdXBkYXRpbmcgdGhlIGRpc3BsYXkgYW5kIHNpZ25hbGxpbmcgZGVsYXllZCBldmVudHNcbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7XG4gICAgdmFyIG9wID0gY20uY3VyT3A7XG4gICAgaWYgKG9wKSB7IGZpbmlzaE9wZXJhdGlvbihvcCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm9wcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOyB9XG4gICAgICBlbmRPcGVyYXRpb25zKGdyb3VwKTtcbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc29cbiAgLy8gdGhhdCB0aGUgbWluaW11bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkge1xuICAgIHZhciBvcHMgPSBncm91cC5vcHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9SMShvcHNbaV0pOyB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgb3BzLmxlbmd0aDsgaSQxKyspIC8vIFdyaXRlIERPTSAobWF5YmUpXG4gICAgICB7IGVuZE9wZXJhdGlvbl9XMShvcHNbaSQxXSk7IH1cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBvcHMubGVuZ3RoOyBpJDIrKykgLy8gUmVhZCBET01cbiAgICAgIHsgZW5kT3BlcmF0aW9uX1IyKG9wc1tpJDJdKTsgfVxuICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG9wcy5sZW5ndGg7IGkkMysrKSAvLyBXcml0ZSBET00gKG1heWJlKVxuICAgICAgeyBlbmRPcGVyYXRpb25fVzIob3BzW2kkM10pOyB9XG4gICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgb3BzLmxlbmd0aDsgaSQ0KyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2kkNF0pOyB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjEob3ApIHtcbiAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSk7XG4gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIHsgZmluZE1heExpbmUoY20pOyB9XG5cbiAgICBvcC5tdXN0VXBkYXRlID0gb3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHxcbiAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHxcbiAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJlxuICAgICAgbmV3IERpc3BsYXlVcGRhdGUoY20sIG9wLm11c3RVcGRhdGUgJiYge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cxKG9wKSB7XG4gICAgb3AudXBkYXRlZERpc3BsYXkgPSBvcC5tdXN0VXBkYXRlICYmIHVwZGF0ZURpc3BsYXlJZk5lZWRlZChvcC5jbSwgb3AudXBkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAob3AudXBkYXRlZERpc3BsYXkpIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOyB9XG5cbiAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuXG4gICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsXG4gICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LlxuICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nXG4gICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMztcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87XG4gICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID1cbiAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTtcbiAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQpXG4gICAgICB7IG9wLnByZXBhcmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9XMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtO1xuXG4gICAgaWYgKG9wLmFkanVzdFdpZHRoVG8gIT0gbnVsbCkge1xuICAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG9wLmFkanVzdFdpZHRoVG8gKyBcInB4XCI7XG4gICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KVxuICAgICAgICB7IHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgb3AubWF4U2Nyb2xsTGVmdCksIHRydWUpOyB9XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRha2VGb2N1cyA9IG9wLmZvY3VzICYmIG9wLmZvY3VzID09IGFjdGl2ZUVsdCgpO1xuICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbilcbiAgICAgIHsgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uLCB0YWtlRm9jdXMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpXG4gICAgICB7IHVwZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KVxuICAgICAgeyBzZXREb2N1bWVudEhlaWdodChjbSwgb3AuYmFyTWVhc3VyZSk7IH1cblxuICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSB7IHJlc3RhcnRCbGluayhjbSk7IH1cblxuICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KVxuICAgICAgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KG9wLnR5cGluZyk7IH1cbiAgICBpZiAodGFrZUZvY3VzKSB7IGVuc3VyZUZvY3VzKG9wLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpOyB9XG5cbiAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hlbiBzY3JvbGxpbmcgZXhwbGljaXRseVxuICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51bGwgJiYgKG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBvcC5zY3JvbGxUb1BvcykpXG4gICAgICB7IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBET00gc2Nyb2xsZXJcbiAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwpIHsgc2V0U2Nyb2xsVG9wKGNtLCBvcC5zY3JvbGxUb3AsIG9wLmZvcmNlU2Nyb2xsKTsgfVxuXG4gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRTY3JvbGxMZWZ0KGNtLCBvcC5zY3JvbGxMZWZ0LCB0cnVlLCB0cnVlKTsgfVxuICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby5cbiAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHtcbiAgICAgIHZhciByZWN0ID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTtcbiAgICAgIG1heWJlU2Nyb2xsV2luZG93KGNtLCByZWN0KTtcbiAgICB9XG5cbiAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBlZGl0aW5nIG9yXG4gICAgLy8gdW5kb2luZ1xuICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7XG4gICAgaWYgKGhpZGRlbikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlbi5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbChoaWRkZW5baV0sIFwiaGlkZVwiKTsgfSB9IH1cbiAgICBpZiAodW5oaWRkZW4pIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kkMSlcbiAgICAgIHsgaWYgKHVuaGlkZGVuW2kkMV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbCh1bmhpZGRlbltpJDFdLCBcInVuaGlkZVwiKTsgfSB9IH1cblxuICAgIGlmIChkaXNwbGF5LndyYXBwZXIub2Zmc2V0SGVpZ2h0KVxuICAgICAgeyBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7IH1cblxuICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAob3AuY2hhbmdlT2JqcylcbiAgICAgIHsgc2lnbmFsKGNtLCBcImNoYW5nZXNcIiwgY20sIG9wLmNoYW5nZU9ianMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZSlcbiAgICAgIHsgb3AudXBkYXRlLmZpbmlzaCgpOyB9XG4gIH1cblxuICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvblxuICBmdW5jdGlvbiBydW5Jbk9wKGNtLCBmKSB7XG4gICAgaWYgKGNtLmN1ck9wKSB7IHJldHVybiBmKCkgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTtcbiAgICB0cnkgeyByZXR1cm4gZigpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG4gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY20uY3VyT3ApIHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICB9XG4gIH1cbiAgLy8gVXNlZCB0byBhZGQgbWV0aG9kcyB0byBlZGl0b3IgYW5kIGRvYyBpbnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW5cbiAgLy8gb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gbWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbiAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG4gICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJR0hMSUdIVCBXT1JLRVJcblxuICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkge1xuICAgIGlmIChjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYztcbiAgICBpZiAoZG9jLmhpZ2hsaWdodEZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIpO1xuICAgIHZhciBjaGFuZ2VkTGluZXMgPSBbXTtcblxuICAgIGRvYy5pdGVyKGNvbnRleHQubGluZSwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChjb250ZXh0LmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlXG4gICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlcztcbiAgICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggPyBjb3B5U3RhdGUoZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpIDogbnVsbDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzO1xuICAgICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7XG4gICAgICAgIGlmIChuZXdDbHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7IH1cbiAgICAgICAgZWxzZSBpZiAob2xkQ2xzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgeyBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsgfVxuICAgICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goY29udGV4dC5saW5lKTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgY29udGV4dC5uZXh0TGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpXG4gICAgICAgICAgeyBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBjb250ZXh0KTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LmxpbmUgJSA1ID09IDAgPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHtcbiAgICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjb250ZXh0LmxpbmU7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGRvYy5tb2RlRnJvbnRpZXIsIGNvbnRleHQubGluZSk7XG4gICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkTGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdlZExpbmVzW2ldLCBcInRleHRcIik7IH1cbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gRElTUExBWSBEUkFXSU5HXG5cbiAgdmFyIERpc3BsYXlVcGRhdGUgPSBmdW5jdGlvbihjbSwgdmlld3BvcnQsIGZvcmNlKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuXG4gICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIC8vIFN0b3JlIHNvbWUgdmFsdWVzIHRoYXQgd2UnbGwgbmVlZCBsYXRlciAoYnV0IGRvbid0IHdhbnQgdG8gZm9yY2UgYSByZWxheW91dCBmb3IpXG4gICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoO1xuICAgIHRoaXMud3JhcHBlckhlaWdodCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy53cmFwcGVyV2lkdGggPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGg7XG4gICAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pO1xuICAgIHRoaXMuZm9yY2UgPSBmb3JjZTtcbiAgICB0aGlzLmRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICB9O1xuXG4gIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uIChlbWl0dGVyLCB0eXBlKSB7XG4gICAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpXG4gICAgICB7IHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsgfVxuICB9O1xuICBEaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIHsgc2lnbmFsLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2ldKTsgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG1heWJlQ2xpcFNjcm9sbGJhcnMoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkICYmIGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpIHtcbiAgICAgIGRpc3BsYXkubmF0aXZlQmFyV2lkdGggPSBkaXNwbGF5LnNjcm9sbGVyLm9mZnNldFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtcbiAgICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyBcInB4XCI7XG4gICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgXCJweFwiO1xuICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2FwKGNtKSArIFwicHhcIjtcbiAgICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvblNuYXBzaG90KGNtKSB7XG4gICAgaWYgKGNtLmhhc0ZvY3VzKCkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbHQoKTtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhY29udGFpbnMoY20uZGlzcGxheS5saW5lRGl2LCBhY3RpdmUpKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgcmVzdWx0ID0ge2FjdGl2ZUVsdDogYWN0aXZlfTtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAmJiBzZWwuZXh0ZW5kICYmIGNvbnRhaW5zKGNtLmRpc3BsYXkubGluZURpdiwgc2VsLmFuY2hvck5vZGUpKSB7XG4gICAgICAgIHJlc3VsdC5hbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gICAgICAgIHJlc3VsdC5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgICByZXN1bHQuZm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgcmVzdWx0LmZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHNuYXBzaG90KSB7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNob3QuYWN0aXZlRWx0IHx8IHNuYXBzaG90LmFjdGl2ZUVsdCA9PSBhY3RpdmVFbHQoKSkgeyByZXR1cm4gfVxuICAgIHNuYXBzaG90LmFjdGl2ZUVsdC5mb2N1cygpO1xuICAgIGlmIChzbmFwc2hvdC5hbmNob3JOb2RlICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmFuY2hvck5vZGUpICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmZvY3VzTm9kZSkpIHtcbiAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldEVuZChzbmFwc2hvdC5hbmNob3JOb2RlLCBzbmFwc2hvdC5hbmNob3JPZmZzZXQpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbC5leHRlbmQoc25hcHNob3QuZm9jdXNOb2RlLCBzbmFwc2hvdC5mb2N1c09mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dFxuICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlzXG4gIC8vIGZhbHNlLlxuICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKHVwZGF0ZS5lZGl0b3JJc0hpZGRlbikge1xuICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLlxuICAgIGlmICghdXBkYXRlLmZvcmNlICYmXG4gICAgICAgIHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pICYmXG4gICAgICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJiBjb3VudERpcnR5VmlldyhjbSkgPT0gMClcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpIHtcbiAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20pO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bylcbiAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7XG4gICAgdmFyIGZyb20gPSBNYXRoLm1heCh1cGRhdGUudmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTtcbiAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHVwZGF0ZS52aXNpYmxlLnRvICsgY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7XG4gICAgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnZpZXdGcm9tIDwgMjApIHsgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7IH1cbiAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAmJiBkaXNwbGF5LnZpZXdUbyAtIHRvIDwgMjApIHsgdG8gPSBNYXRoLm1pbihlbmQsIGRpc3BsYXkudmlld1RvKTsgfVxuICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykge1xuICAgICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pO1xuICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0byk7XG4gICAgfVxuXG4gICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fFxuICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDtcbiAgICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7XG5cbiAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTtcbiAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uXG4gICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyBcInB4XCI7XG5cbiAgICB2YXIgdG9VcGRhdGUgPSBjb3VudERpcnR5VmlldyhjbSk7XG4gICAgaWYgKCFkaWZmZXJlbnQgJiYgdG9VcGRhdGUgPT0gMCAmJiAhdXBkYXRlLmZvcmNlICYmIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgLy8gRm9yIGJpZyBjaGFuZ2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlXG4gICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJzLlxuICAgIHZhciBzZWxTbmFwc2hvdCA9IHNlbGVjdGlvblNuYXBzaG90KGNtKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IH1cbiAgICBwYXRjaERpc3BsYXkoY20sIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMsIHVwZGF0ZS5kaW1zKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJcIjsgfVxuICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID0gZGlzcGxheS52aWV3O1xuICAgIC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290XG4gICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LlxuICAgIHJlc3RvcmVTZWxlY3Rpb24oc2VsU25hcHNob3QpO1xuXG4gICAgLy8gUHJldmVudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBzY3JvbGxcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0LlxuICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuY3Vyc29yRGl2KTtcbiAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LnNlbGVjdGlvbkRpdik7XG4gICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gMDtcblxuICAgIGlmIChkaWZmZXJlbnQpIHtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgPSB1cGRhdGUud3JhcHBlckhlaWdodDtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBXaWR0aCA9IHVwZGF0ZS53cmFwcGVyV2lkdGg7XG4gICAgICBzdGFydFdvcmtlcihjbSwgNDAwKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7XG4gICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRlLnZpZXdwb3J0O1xuXG4gICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkge1xuICAgICAgaWYgKCFmaXJzdCB8fCAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgdXBkYXRlLm9sZERpc3BsYXlXaWR0aCA9PSBkaXNwbGF5V2lkdGgoY20pKSB7XG4gICAgICAgIC8vIENsaXAgZm9yY2VkIHZpZXdwb3J0IHRvIGFjdHVhbCBzY3JvbGxhYmxlIGFyZWEuXG4gICAgICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbClcbiAgICAgICAgICB7IHZpZXdwb3J0ID0ge3RvcDogTWF0aC5taW4oY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpIC0gZGlzcGxheUhlaWdodChjbSksIHZpZXdwb3J0LnRvcCl9OyB9XG4gICAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy5cbiAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pXG4gICAgICAgICAgeyBicmVhayB9XG4gICAgICB9XG4gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkgeyBicmVhayB9XG4gICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7XG4gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTtcbiAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHVwZGF0ZS5mb3JjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHVwZGF0ZS5zaWduYWwoY20sIFwidXBkYXRlXCIsIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAhPSBjbS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20gfHwgY20uZGlzcGxheS52aWV3VG8gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbykge1xuICAgICAgdXBkYXRlLnNpZ25hbChjbSwgXCJ2aWV3cG9ydENoYW5nZVwiLCBjbSwgY20uZGlzcGxheS52aWV3RnJvbSwgY20uZGlzcGxheS52aWV3VG8pO1xuICAgICAgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1RvO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHZpZXdwb3J0KSB7XG4gICAgdmFyIHVwZGF0ZSA9IG5ldyBEaXNwbGF5VXBkYXRlKGNtLCB2aWV3cG9ydCk7XG4gICAgaWYgKHVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkge1xuICAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pO1xuICAgICAgcG9zdFVwZGF0ZURpc3BsYXkoY20sIHVwZGF0ZSk7XG4gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTtcbiAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHVwZGF0ZS5maW5pc2goKTtcbiAgICB9XG4gIH1cblxuICAvLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1vdmluZ1xuICAvLyBub2RlcyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25lc1xuICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgdXBkYXRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgb3V0IG9mXG4gIC8vIGRhdGUuXG4gIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVyc0Zyb20sIGRpbXMpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxpbmVOdW1iZXJzID0gY20ub3B0aW9ucy5saW5lTnVtYmVycztcbiAgICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgIGZ1bmN0aW9uIHJtKG5vZGUpIHtcbiAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4gT1MgWCBXZWJraXRcbiAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUpXG4gICAgICAgIHsgbm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7IH1cbiAgICAgIHJldHVybiBuZXh0XG4gICAgfVxuXG4gICAgdmFyIHZpZXcgPSBkaXNwbGF5LnZpZXcsIGxpbmVOID0gZGlzcGxheS52aWV3RnJvbTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIGVsZW1lbnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2Rlc1xuICAgIC8vIGluIGRpc3BsYXkubGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAobGluZVZpZXcuaGlkZGVuKSA7IGVsc2UgaWYgKCFsaW5lVmlldy5ub2RlIHx8IGxpbmVWaWV3Lm5vZGUucGFyZW50Tm9kZSAhPSBjb250YWluZXIpIHsgLy8gTm90IGRyYXduIHlldFxuICAgICAgICB2YXIgbm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7XG4gICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUobm9kZSwgY3VyKTtcbiAgICAgIH0gZWxzZSB7IC8vIEFscmVhZHkgZHJhd25cbiAgICAgICAgd2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2RlKSB7IGN1ciA9IHJtKGN1cik7IH1cbiAgICAgICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51bGwgJiZcbiAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmlldy5saW5lTnVtYmVyO1xuICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykge1xuICAgICAgICAgIGlmIChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsIFwiZ3V0dGVyXCIpID4gLTEpIHsgdXBkYXRlTnVtYmVyID0gZmFsc2U7IH1cbiAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7XG4gICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7XG4gICAgICAgICAgbGluZVZpZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpO1xuICAgICAgICB9XG4gICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICBsaW5lTiArPSBsaW5lVmlldy5zaXplO1xuICAgIH1cbiAgICB3aGlsZSAoY3VyKSB7IGN1ciA9IHJtKGN1cik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlclNwYWNlKGRpc3BsYXkpIHtcbiAgICB2YXIgd2lkdGggPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7XG4gICAgZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyBcInB4XCI7XG4gIH1cblxuICBmdW5jdGlvbiBzZXREb2N1bWVudEhlaWdodChjbSwgbWVhc3VyZSkge1xuICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBcInB4XCI7XG4gICAgY20uZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBcInB4XCI7XG4gICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IChtZWFzdXJlLmRvY0hlaWdodCArIGNtLmRpc3BsYXkuYmFySGVpZ2h0ICsgc2Nyb2xsR2FwKGNtKSkgKyBcInB4XCI7XG4gIH1cblxuICAvLyBSZS1hbGlnbiBsaW5lIG51bWJlcnMgYW5kIGd1dHRlciBtYXJrcyB0byBjb21wZW5zYXRlIGZvclxuICAvLyBob3Jpem9udGFsIHNjcm9sbGluZy5cbiAgZnVuY3Rpb24gYWxpZ25Ib3Jpem9udGFsbHkoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFkaXNwbGF5LmFsaWduV2lkZ2V0cyAmJiAoIWRpc3BsYXkuZ3V0dGVycy5maXJzdENoaWxkIHx8ICFjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSkgeyByZXR1cm4gfVxuICAgIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbGVmdCA9IGNvbXAgKyBcInB4XCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7IGlmICghdmlld1tpXS5oaWRkZW4pIHtcbiAgICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7XG4gICAgICAgIGlmICh2aWV3W2ldLmd1dHRlcilcbiAgICAgICAgICB7IHZpZXdbaV0uZ3V0dGVyLnN0eWxlLmxlZnQgPSBsZWZ0OyB9XG4gICAgICAgIGlmICh2aWV3W2ldLmd1dHRlckJhY2tncm91bmQpXG4gICAgICAgICAgeyB2aWV3W2ldLmd1dHRlckJhY2tncm91bmQuc3R5bGUubGVmdCA9IGxlZnQ7IH1cbiAgICAgIH1cbiAgICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlO1xuICAgICAgaWYgKGFsaWduKSB7IGZvciAodmFyIGogPSAwOyBqIDwgYWxpZ24ubGVuZ3RoOyBqKyspXG4gICAgICAgIHsgYWxpZ25bal0uc3R5bGUubGVmdCA9IGxlZnQ7IH0gfVxuICAgIH0gfVxuICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKVxuICAgICAgeyBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykgKyBcInB4XCI7IH1cbiAgfVxuXG4gIC8vIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciBpcyBzdGlsbCB0aGUgcmlnaHRcbiAgLy8gc2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4gUmV0dXJucyB0cnVlIHdoZW4gYW4gdXBkYXRlXG4gIC8vIGlzIG5lZWRlZC5cbiAgZnVuY3Rpb24gbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pIHtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZU51bWJlcnMpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAobGFzdC5sZW5ndGggIT0gZGlzcGxheS5saW5lTnVtQ2hhcnMpIHtcbiAgICAgIHZhciB0ZXN0ID0gZGlzcGxheS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIGxhc3QpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIikpO1xuICAgICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGluZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBpbm5lclc7XG4gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBcIlwiO1xuICAgICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxO1xuICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZztcbiAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7XG4gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArIFwicHhcIjtcbiAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKGNtLmRpc3BsYXkpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBnZXRHdXR0ZXJzKGd1dHRlcnMsIGxpbmVOdW1iZXJzKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdLCBzYXdMaW5lTnVtYmVycyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3V0dGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBndXR0ZXJzW2ldLCBzdHlsZSA9IG51bGw7XG4gICAgICBpZiAodHlwZW9mIG5hbWUgIT0gXCJzdHJpbmdcIikgeyBzdHlsZSA9IG5hbWUuc3R5bGU7IG5hbWUgPSBuYW1lLmNsYXNzTmFtZTsgfVxuICAgICAgaWYgKG5hbWUgPT0gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIpIHtcbiAgICAgICAgaWYgKCFsaW5lTnVtYmVycykgeyBjb250aW51ZSB9XG4gICAgICAgIGVsc2UgeyBzYXdMaW5lTnVtYmVycyA9IHRydWU7IH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHtjbGFzc05hbWU6IG5hbWUsIHN0eWxlOiBzdHlsZX0pO1xuICAgIH1cbiAgICBpZiAobGluZU51bWJlcnMgJiYgIXNhd0xpbmVOdW1iZXJzKSB7IHJlc3VsdC5wdXNoKHtjbGFzc05hbWU6IFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiLCBzdHlsZTogbnVsbH0pOyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gUmVidWlsZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0aGVcbiAgLy8gY29kZSBtYXRjaGVzIHRoZWlyIHdpZHRoLlxuICBmdW5jdGlvbiByZW5kZXJHdXR0ZXJzKGRpc3BsYXkpIHtcbiAgICB2YXIgZ3V0dGVycyA9IGRpc3BsYXkuZ3V0dGVycywgc3BlY3MgPSBkaXNwbGF5Lmd1dHRlclNwZWNzO1xuICAgIHJlbW92ZUNoaWxkcmVuKGd1dHRlcnMpO1xuICAgIGRpc3BsYXkubGluZUd1dHRlciA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHJlZiA9IHNwZWNzW2ldO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZi5jbGFzc05hbWU7XG4gICAgICB2YXIgc3R5bGUgPSByZWYuc3R5bGU7XG4gICAgICB2YXIgZ0VsdCA9IGd1dHRlcnMuYXBwZW5kQ2hpbGQoZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXIgXCIgKyBjbGFzc05hbWUpKTtcbiAgICAgIGlmIChzdHlsZSkgeyBnRWx0LnN0eWxlLmNzc1RleHQgPSBzdHlsZTsgfVxuICAgICAgaWYgKGNsYXNzTmFtZSA9PSBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIikge1xuICAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIgPSBnRWx0O1xuICAgICAgICBnRWx0LnN0eWxlLndpZHRoID0gKGRpc3BsYXkubGluZU51bVdpZHRoIHx8IDEpICsgXCJweFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkgPSBzcGVjcy5sZW5ndGggPyBcIlwiIDogXCJub25lXCI7XG4gICAgdXBkYXRlR3V0dGVyU3BhY2UoZGlzcGxheSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7XG4gICAgcmVuZGVyR3V0dGVycyhjbS5kaXNwbGF5KTtcbiAgICByZWdDaGFuZ2UoY20pO1xuICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTtcbiAgfVxuXG4gIC8vIFRoZSBkaXNwbGF5IGhhbmRsZXMgdGhlIERPTSBpbnRlZ3JhdGlvbiwgYm90aCBmb3IgaW5wdXQgcmVhZGluZ1xuICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBub2RlcyBhbmRcbiAgLy8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLlxuXG4gIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgZCA9IHRoaXM7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgLy8gQ292ZXJzIGJvdHRvbS1yaWdodCBzcXVhcmUgd2hlbiBib3RoIHNjcm9sbGJhcnMgYXJlIHByZXNlbnQuXG4gICAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJcIik7XG4gICAgZC5zY3JvbGxiYXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIC8vIENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgaXMgb25cbiAgICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2VudC5cbiAgICBkLmd1dHRlckZpbGxlciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlclwiKTtcbiAgICBkLmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuXG4gICAgZC5saW5lRGl2ID0gZWx0UChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY29kZVwiKTtcbiAgICAvLyBFbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlc2UgdG8gcmVwcmVzZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycy5cbiAgICBkLnNlbGVjdGlvbkRpdiA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMVwiKTtcbiAgICBkLmN1cnNvckRpdiA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY3Vyc29yc1wiKTtcbiAgICAvLyBBIHZpc2liaWxpdHk6IGhpZGRlbiBlbGVtZW50IHVzZWQgdG8gZmluZCB0aGUgc2l6ZSBvZiB0aGluZ3MuXG4gICAgZC5tZWFzdXJlID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO1xuICAgIC8vIFdoZW4gbGluZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYXJlIG1lYXN1cmVkLCB0aGV5IGFyZSBkcmF3biBpbiB0aGlzLlxuICAgIGQubGluZU1lYXN1cmUgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLW1lYXN1cmVcIik7XG4gICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgICBkLmxpbmVTcGFjZSA9IGVsdFAoXCJkaXZcIiwgW2QubWVhc3VyZSwgZC5saW5lTWVhc3VyZSwgZC5zZWxlY3Rpb25EaXYsIGQuY3Vyc29yRGl2LCBkLmxpbmVEaXZdLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsIFwicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lXCIpO1xuICAgIHZhciBsaW5lcyA9IGVsdFAoXCJkaXZcIiwgW2QubGluZVNwYWNlXSwgXCJDb2RlTWlycm9yLWxpbmVzXCIpO1xuICAgIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldy5cbiAgICBkLm1vdmVyID0gZWx0KFwiZGl2XCIsIFtsaW5lc10sIG51bGwsIFwicG9zaXRpb246IHJlbGF0aXZlXCIpO1xuICAgIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLlxuICAgIGQuc2l6ZXIgPSBlbHQoXCJkaXZcIiwgW2QubW92ZXJdLCBcIkNvZGVNaXJyb3Itc2l6ZXJcIik7XG4gICAgZC5zaXplcldpZHRoID0gbnVsbDtcbiAgICAvLyBCZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcgaXNcbiAgICAvLyBpbmNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZVxuICAgIC8vIHNjcm9sbGFibGUgYXJlYSBpcyBiaWcgZW5vdWdoLlxuICAgIGQuaGVpZ2h0Rm9yY2VyID0gZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IFwiICsgc2Nyb2xsZXJHYXAgKyBcInB4OyB3aWR0aDogMXB4O1wiKTtcbiAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueS5cbiAgICBkLmd1dHRlcnMgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlcnNcIik7XG4gICAgZC5saW5lR3V0dGVyID0gbnVsbDtcbiAgICAvLyBBY3R1YWwgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgIGQuc2Nyb2xsZXIgPSBlbHQoXCJkaXZcIiwgW2Quc2l6ZXIsIGQuaGVpZ2h0Rm9yY2VyLCBkLmd1dHRlcnNdLCBcIkNvZGVNaXJyb3Itc2Nyb2xsXCIpO1xuICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKFwidGFiSW5kZXhcIiwgXCItMVwiKTtcbiAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLlxuICAgIGQud3JhcHBlciA9IGVsdChcImRpdlwiLCBbZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgXCJDb2RlTWlycm9yXCIpO1xuXG4gICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKVxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfVxuICAgIGlmICghd2Via2l0ICYmICEoZ2Vja28gJiYgbW9iaWxlKSkgeyBkLnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7IH1cblxuICAgIGlmIChwbGFjZSkge1xuICAgICAgaWYgKHBsYWNlLmFwcGVuZENoaWxkKSB7IHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7IH1cbiAgICAgIGVsc2UgeyBwbGFjZShkLndyYXBwZXIpOyB9XG4gICAgfVxuXG4gICAgLy8gQ3VycmVudCByZW5kZXJlZCByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuXG4gICAgZC52aWV3RnJvbSA9IGQudmlld1RvID0gZG9jLmZpcnN0O1xuICAgIGQucmVwb3J0ZWRWaWV3RnJvbSA9IGQucmVwb3J0ZWRWaWV3VG8gPSBkb2MuZmlyc3Q7XG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlcmVkIGxpbmVzLlxuICAgIGQudmlldyA9IFtdO1xuICAgIGQucmVuZGVyZWRWaWV3ID0gbnVsbDtcbiAgICAvLyBIb2xkcyBpbmZvIGFib3V0IGEgc2luZ2xlIHJlbmRlcmVkIGxpbmUgd2hlbiBpdCB3YXMgcmVuZGVyZWRcbiAgICAvLyBmb3IgbWVhc3VyZW1lbnQsIHdoaWxlIG5vdCBpbiB2aWV3LlxuICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7XG4gICAgLy8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXdcbiAgICBkLnZpZXdPZmZzZXQgPSAwO1xuICAgIGQubGFzdFdyYXBIZWlnaHQgPSBkLmxhc3RXcmFwV2lkdGggPSAwO1xuICAgIGQudXBkYXRlTGluZU51bWJlcnMgPSBudWxsO1xuXG4gICAgZC5uYXRpdmVCYXJXaWR0aCA9IGQuYmFySGVpZ2h0ID0gZC5iYXJXaWR0aCA9IDA7XG4gICAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIgZ3V0dGVyIHdoZW4gbmVjZXNzYXJ5ICh3aGVuXG4gICAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBjcm9zc2VzIGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKVxuICAgIGQubGluZU51bVdpZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbDtcbiAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzXG4gICAgLy8gYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgbGluZSB3aWRnZXQgYWxpZ25pbmcgaXMgc2tpcHBlZCB3aGVuXG4gICAgLy8gdGhpcyBpcyBmYWxzZS5cbiAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlO1xuXG4gICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdIID0gbnVsbDtcblxuICAgIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhclxuICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRpYyB3aGVuIHNjcm9sbGluZy5cbiAgICBkLm1heExpbmUgPSBudWxsO1xuICAgIGQubWF4TGluZUxlbmd0aCA9IDA7XG4gICAgZC5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCBmb3IgbWVhc3VyaW5nIHdoZWVsIHNjcm9sbGluZyBncmFudWxhcml0eVxuICAgIGQud2hlZWxEWCA9IGQud2hlZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVsbDtcblxuICAgIC8vIFRydWUgd2hlbiBzaGlmdCBpcyBoZWxkIGRvd24uXG4gICAgZC5zaGlmdCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCB0byB0cmFjayB3aGV0aGVyIGFueXRoaW5nIGhhcHBlbmVkIHNpbmNlIHRoZSBjb250ZXh0IG1lbnVcbiAgICAvLyB3YXMgb3BlbmVkLlxuICAgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsO1xuXG4gICAgZC5hY3RpdmVUb3VjaCA9IG51bGw7XG5cbiAgICBkLmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyhvcHRpb25zLmd1dHRlcnMsIG9wdGlvbnMubGluZU51bWJlcnMpO1xuICAgIHJlbmRlckd1dHRlcnMoZCk7XG5cbiAgICBpbnB1dC5pbml0KGQpO1xuICB9XG5cbiAgLy8gU2luY2UgdGhlIGRlbHRhIHZhbHVlcyByZXBvcnRlZCBvbiBtb3VzZSB3aGVlbCBldmVudHMgYXJlXG4gIC8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3NlcnMgYW5kIGV2ZW4gYnJvd3NlciB2ZXJzaW9ucywgYW5kXG4gIC8vIGdlbmVyYWxseSBob3JyaWJseSB1bnByZWRpY3RhYmxlLCB0aGlzIGNvZGUgc3RhcnRzIGJ5IG1lYXN1cmluZ1xuICAvLyB0aGUgc2Nyb2xsIGVmZmVjdCB0aGF0IHRoZSBmaXJzdCBmZXcgbW91c2Ugd2hlZWwgZXZlbnRzIGhhdmUsXG4gIC8vIGFuZCwgZnJvbSB0aGF0LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVsdGFzIHRvIHBpeGVsXG4gIC8vIG9mZnNldHMgYWZ0ZXJ3YXJkcy5cbiAgLy9cbiAgLy8gVGhlIHJlYXNvbiB3ZSB3YW50IHRvIGtub3cgdGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xsXG4gIC8vIGlzIHRoYXQgaXQgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBkaXNwbGF5IGJlZm9yZSB0aGVcbiAgLy8gYWN0dWFsIHNjcm9sbGluZyBoYXBwZW5zLCByZWR1Y2luZyBmbGlja2VyaW5nLlxuXG4gIHZhciB3aGVlbFNhbXBsZXMgPSAwLCB3aGVlbFBpeGVsc1BlclVuaXQgPSBudWxsO1xuICAvLyBGaWxsIGluIGEgYnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3ZVxuICAvLyBrbm93IG9uZS4gVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBhY2N1cmF0ZSAtLSB0aGUgcmVzdWx0IG9mIHRoZW1cbiAgLy8gYmVpbmcgd3Jvbmcgd291bGQganVzdCBiZSBhIHNsaWdodCBmbGlja2VyIG9uIHRoZSBmaXJzdCB3aGVlbFxuICAvLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCkuXG4gIGlmIChpZSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjUzOyB9XG4gIGVsc2UgaWYgKGdlY2tvKSB7IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IDE1OyB9XG4gIGVsc2UgaWYgKGNocm9tZSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjc7IH1cbiAgZWxzZSBpZiAoc2FmYXJpKSB7IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7IH1cblxuICBmdW5jdGlvbiB3aGVlbEV2ZW50RGVsdGEoZSkge1xuICAgIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTtcbiAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsgZHggPSBlLmRldGFpbDsgfVxuICAgIGlmIChkeSA9PSBudWxsICYmIGUuZGV0YWlsICYmIGUuYXhpcyA9PSBlLlZFUlRJQ0FMX0FYSVMpIHsgZHkgPSBlLmRldGFpbDsgfVxuICAgIGVsc2UgaWYgKGR5ID09IG51bGwpIHsgZHkgPSBlLndoZWVsRGVsdGE7IH1cbiAgICByZXR1cm4ge3g6IGR4LCB5OiBkeX1cbiAgfVxuICBmdW5jdGlvbiB3aGVlbEV2ZW50UGl4ZWxzKGUpIHtcbiAgICB2YXIgZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSk7XG4gICAgZGVsdGEueCAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgZGVsdGEueSAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgcmV0dXJuIGRlbHRhXG4gIH1cblxuICBmdW5jdGlvbiBvblNjcm9sbFdoZWVsKGNtLCBlKSB7XG4gICAgdmFyIGRlbHRhID0gd2hlZWxFdmVudERlbHRhKGUpLCBkeCA9IGRlbHRhLngsIGR5ID0gZGVsdGEueTtcblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2Nyb2xsID0gZGlzcGxheS5zY3JvbGxlcjtcbiAgICAvLyBRdWl0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzY3JvbGwgaGVyZVxuICAgIHZhciBjYW5TY3JvbGxYID0gc2Nyb2xsLnNjcm9sbFdpZHRoID4gc2Nyb2xsLmNsaWVudFdpZHRoO1xuICAgIHZhciBjYW5TY3JvbGxZID0gc2Nyb2xsLnNjcm9sbEhlaWdodCA+IHNjcm9sbC5jbGllbnRIZWlnaHQ7XG4gICAgaWYgKCEoZHggJiYgY2FuU2Nyb2xsWCB8fCBkeSAmJiBjYW5TY3JvbGxZKSkgeyByZXR1cm4gfVxuXG4gICAgLy8gV2Via2l0IGJyb3dzZXJzIG9uIE9TIFggYWJvcnQgbW9tZW50dW0gc2Nyb2xscyB3aGVuIHRoZSB0YXJnZXRcbiAgICAvLyBvZiB0aGUgc2Nyb2xsIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlXG4gICAgLy8gZWxlbWVudCBpcyBrZXB0IGFyb3VuZC5cbiAgICBpZiAoZHkgJiYgbWFjICYmIHdlYmtpdCkge1xuICAgICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodmlld1tpXS5ub2RlID09IGN1cikge1xuICAgICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7XG4gICAgICAgICAgICBicmVhayBvdXRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9uIHNvbWUgYnJvd3NlcnMsIGhvcml6b250YWwgc2Nyb2xsaW5nIHdpbGwgY2F1c2UgcmVkcmF3cyB0b1xuICAgIC8vIGhhcHBlbiBiZWZvcmUgdGhlIGd1dHRlciBoYXMgYmVlbiByZWFsaWduZWQsIGNhdXNpbmcgaXQgdG9cbiAgICAvLyB3cmlnZ2xlIGFyb3VuZCBpbiBhIG1vc3QgdW5zZWVtbHkgd2F5LiBXaGVuIHdlIGhhdmUgYW5cbiAgICAvLyBlc3RpbWF0ZWQgcGl4ZWxzL2RlbHRhIHZhbHVlLCB3ZSBqdXN0IGhhbmRsZSBob3Jpem9udGFsXG4gICAgLy8gc2Nyb2xsaW5nIGVudGlyZWx5IGhlcmUuIEl0J2xsIGJlIHNsaWdodGx5IG9mZiBmcm9tIG5hdGl2ZSwgYnV0XG4gICAgLy8gYmV0dGVyIHRoYW4gZ2xpdGNoaW5nIG91dC5cbiAgICBpZiAoZHggJiYgIWdlY2tvICYmICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHtcbiAgICAgIGlmIChkeSAmJiBjYW5TY3JvbGxZKVxuICAgICAgICB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgc2Nyb2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0KSk7IH1cbiAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAsIHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQpKTtcbiAgICAgIC8vIE9ubHkgcHJldmVudCBkZWZhdWx0IHNjcm9sbGluZyBpZiB2ZXJ0aWNhbCBzY3JvbGxpbmcgaXNcbiAgICAgIC8vIGFjdHVhbGx5IHBvc3NpYmxlLiBPdGhlcndpc2UsIGl0IGNhdXNlcyB2ZXJ0aWNhbCBzY3JvbGxcbiAgICAgIC8vIGppdHRlciBvbiBPU1ggdHJhY2twYWRzIHdoZW4gZGVsdGFYIGlzIHNtYWxsIGFuZCBkZWx0YVlcbiAgICAgIC8vIGlzIGxhcmdlIChpc3N1ZSAjMzU3OSlcbiAgICAgIGlmICghZHkgfHwgKGR5ICYmIGNhblNjcm9sbFkpKVxuICAgICAgICB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBudWxsOyAvLyBBYm9ydCBtZWFzdXJlbWVudCwgaWYgaW4gcHJvZ3Jlc3NcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vICdQcm9qZWN0JyB0aGUgdmlzaWJsZSB2aWV3cG9ydCB0byBjb3ZlciB0aGUgYXJlYSB0aGF0IGlzIGJlaW5nXG4gICAgLy8gc2Nyb2xsZWQgaW50byB2aWV3IChpZiB3ZSBrbm93IGVub3VnaCB0byBlc3RpbWF0ZSBpdCkuXG4gICAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7XG4gICAgICB2YXIgcGl4ZWxzID0gZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9sbFRvcCwgYm90ID0gdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDtcbiAgICAgIGlmIChwaXhlbHMgPCAwKSB7IHRvcCA9IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyAtIDUwKTsgfVxuICAgICAgZWxzZSB7IGJvdCA9IE1hdGgubWluKGNtLmRvYy5oZWlnaHQsIGJvdCArIHBpeGVscyArIDUwKTsgfVxuICAgICAgdXBkYXRlRGlzcGxheVNpbXBsZShjbSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pO1xuICAgIH1cblxuICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkge1xuICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkge1xuICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wO1xuICAgICAgICBkaXNwbGF5LndoZWVsRFggPSBkeDsgZGlzcGxheS53aGVlbERZID0gZHk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgICB2YXIgbW92ZWRYID0gc2Nyb2xsLnNjcm9sbExlZnQgLSBkaXNwbGF5LndoZWVsU3RhcnRYO1xuICAgICAgICAgIHZhciBtb3ZlZFkgPSBzY3JvbGwuc2Nyb2xsVG9wIC0gZGlzcGxheS53aGVlbFN0YXJ0WTtcbiAgICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiBkaXNwbGF5LndoZWVsRFkgJiYgbW92ZWRZIC8gZGlzcGxheS53aGVlbERZKSB8fFxuICAgICAgICAgICAgKG1vdmVkWCAmJiBkaXNwbGF5LndoZWVsRFggJiYgbW92ZWRYIC8gZGlzcGxheS53aGVlbERYKTtcbiAgICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVlbFN0YXJ0WSA9IG51bGw7XG4gICAgICAgICAgaWYgKCFzYW1wbGUpIHsgcmV0dXJuIH1cbiAgICAgICAgICB3aGVlbFBpeGVsc1BlclVuaXQgPSAod2hlZWxQaXhlbHNQZXJVbml0ICogd2hlZWxTYW1wbGVzICsgc2FtcGxlKSAvICh3aGVlbFNhbXBsZXMgKyAxKTtcbiAgICAgICAgICArK3doZWVsU2FtcGxlcztcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkud2hlZWxEWCArPSBkeDsgZGlzcGxheS53aGVlbERZICs9IGR5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlbGVjdGlvbiBvYmplY3RzIGFyZSBpbW11dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWVcbiAgLy8gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiBBIHNlbGVjdGlvbiBpcyBvbmUgb3IgbW9yZSBub24tb3ZlcmxhcHBpbmdcbiAgLy8gKGFuZCBub24tdG91Y2hpbmcpIHJhbmdlcywgc29ydGVkLCBhbmQgYW4gaW50ZWdlciB0aGF0IGluZGljYXRlc1xuICAvLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9uICh0aGUgb25lIHRoYXQncyBzY3JvbGxlZCBpbnRvXG4gIC8vIHZpZXcsIHRoYXQgZ2V0Q3Vyc29yIHJldHVybnMsIGV0YykuXG4gIHZhciBTZWxlY3Rpb24gPSBmdW5jdGlvbihyYW5nZXMsIHByaW1JbmRleCkge1xuICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzO1xuICAgIHRoaXMucHJpbUluZGV4ID0gcHJpbUluZGV4O1xuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUucHJpbWFyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XSB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKG90aGVyID09IHRoaXMpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXggfHwgb3RoZXIucmFuZ2VzLmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVyZSA9IHRoaXMucmFuZ2VzW2ldLCB0aGVyZSA9IG90aGVyLnJhbmdlc1tpXTtcbiAgICAgIGlmICghZXF1YWxDdXJzb3JQb3MoaGVyZS5hbmNob3IsIHRoZXJlLmFuY2hvcikgfHwgIWVxdWFsQ3Vyc29yUG9zKGhlcmUuaGVhZCwgdGhlcmUuaGVhZCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBvdXRbaV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0aGlzLnJhbmdlc1tpXS5hbmNob3IpLCBjb3B5UG9zKHRoaXMucmFuZ2VzW2ldLmhlYWQpKTsgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgdGhpcy5wcmltSW5kZXgpXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5zb21ldGhpbmdTZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAoIXRoaXMucmFuZ2VzW2ldLmVtcHR5KCkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChwb3MsIGVuZCkge1xuICAgIGlmICghZW5kKSB7IGVuZCA9IHBvczsgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2VzW2ldO1xuICAgICAgaWYgKGNtcChlbmQsIHJhbmdlLmZyb20oKSkgPj0gMCAmJiBjbXAocG9zLCByYW5nZS50bygpKSA8PSAwKVxuICAgICAgICB7IHJldHVybiBpIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH07XG5cbiAgdmFyIFJhbmdlID0gZnVuY3Rpb24oYW5jaG9yLCBoZWFkKSB7XG4gICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQ7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmZyb20gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5Qb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCkgfTtcbiAgUmFuZ2UucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpIH07XG4gIFJhbmdlLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaGVhZC5saW5lID09IHRoaXMuYW5jaG9yLmxpbmUgJiYgdGhpcy5oZWFkLmNoID09IHRoaXMuYW5jaG9yLmNoIH07XG5cbiAgLy8gVGFrZSBhbiB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5kXG4gIC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVzJyByYW5nZXMgYXJyYXkgKG1vZGlmeWluZ1xuICAvLyBpdCkuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihjbSwgcmFuZ2VzLCBwcmltSW5kZXgpIHtcbiAgICB2YXIgbWF5VG91Y2ggPSBjbSAmJiBjbS5vcHRpb25zLnNlbGVjdGlvbnNNYXlUb3VjaDtcbiAgICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhdO1xuICAgIHJhbmdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBjbXAoYS5mcm9tKCksIGIuZnJvbSgpKTsgfSk7XG4gICAgcHJpbUluZGV4ID0gaW5kZXhPZihyYW5nZXMsIHByaW0pO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLCBwcmV2ID0gcmFuZ2VzW2kgLSAxXTtcbiAgICAgIHZhciBkaWZmID0gY21wKHByZXYudG8oKSwgY3VyLmZyb20oKSk7XG4gICAgICBpZiAobWF5VG91Y2ggJiYgIWN1ci5lbXB0eSgpID8gZGlmZiA+IDAgOiBkaWZmID49IDApIHtcbiAgICAgICAgdmFyIGZyb20gPSBtaW5Qb3MocHJldi5mcm9tKCksIGN1ci5mcm9tKCkpLCB0byA9IG1heFBvcyhwcmV2LnRvKCksIGN1ci50bygpKTtcbiAgICAgICAgdmFyIGludiA9IHByZXYuZW1wdHkoKSA/IGN1ci5mcm9tKCkgPT0gY3VyLmhlYWQgOiBwcmV2LmZyb20oKSA9PSBwcmV2LmhlYWQ7XG4gICAgICAgIGlmIChpIDw9IHByaW1JbmRleCkgeyAtLXByaW1JbmRleDsgfVxuICAgICAgICByYW5nZXMuc3BsaWNlKC0taSwgMiwgbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KVxuICB9XG5cbiAgZnVuY3Rpb24gc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCkge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKFtuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkIHx8IGFuY2hvcildLCAwKVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiBhIGNoYW5nZSAoaXRzICd0bycgcHJvcGVydHlcbiAgLy8gcmVmZXJzIHRvIHRoZSBwcmUtY2hhbmdlIGVuZCkuXG4gIGZ1bmN0aW9uIGNoYW5nZUVuZChjaGFuZ2UpIHtcbiAgICBpZiAoIWNoYW5nZS50ZXh0KSB7IHJldHVybiBjaGFuZ2UudG8gfVxuICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkpXG4gIH1cblxuICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0byB0aGUgcG9zdC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlXG4gIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LlxuICBmdW5jdGlvbiBhZGp1c3RGb3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHtcbiAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZyb20pIDwgMCkgeyByZXR1cm4gcG9zIH1cbiAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSB7IHJldHVybiBjaGFuZ2VFbmQoY2hhbmdlKSB9XG5cbiAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBvcy5jaDtcbiAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIHsgY2ggKz0gY2hhbmdlRW5kKGNoYW5nZSkuY2ggLSBjaGFuZ2UudG8uY2g7IH1cbiAgICByZXR1cm4gUG9zKGxpbmUsIGNoKVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldO1xuICAgICAgb3V0LnB1c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5hbmNob3IsIGNoYW5nZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG91dCwgZG9jLnNlbC5wcmltSW5kZXgpXG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXRQb3MocG9zLCBvbGQsIG53KSB7XG4gICAgaWYgKHBvcy5saW5lID09IG9sZC5saW5lKVxuICAgICAgeyByZXR1cm4gUG9zKG53LmxpbmUsIHBvcy5jaCAtIG9sZC5jaCArIG53LmNoKSB9XG4gICAgZWxzZVxuICAgICAgeyByZXR1cm4gUG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCkgfVxuICB9XG5cbiAgLy8gVXNlZCBieSByZXBsYWNlU2VsZWN0aW9ucyB0byBhbGxvdyBtb3ZpbmcgdGhlIHNlbGVjdGlvbiB0byB0aGVcbiAgLy8gc3RhcnQgb3IgYXJvdW5kIHRoZSByZXBsYWNlZCB0ZXN0LiBIaW50IG1heSBiZSBcInN0YXJ0XCIgb3IgXCJhcm91bmRcIi5cbiAgZnVuY3Rpb24gY29tcHV0ZVJlcGxhY2VkU2VsKGRvYywgY2hhbmdlcywgaGludCkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgb2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9sZFByZXYsIG5ld1ByZXYpO1xuICAgICAgdmFyIHRvID0gb2Zmc2V0UG9zKGNoYW5nZUVuZChjaGFuZ2UpLCBvbGRQcmV2LCBuZXdQcmV2KTtcbiAgICAgIG9sZFByZXYgPSBjaGFuZ2UudG87XG4gICAgICBuZXdQcmV2ID0gdG87XG4gICAgICBpZiAoaGludCA9PSBcImFyb3VuZFwiKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldLCBpbnYgPSBjbXAocmFuZ2UuaGVhZCwgcmFuZ2UuYW5jaG9yKSA8IDA7XG4gICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoZnJvbSwgZnJvbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5wcmltSW5kZXgpXG4gIH1cblxuICAvLyBVc2VkIHRvIGdldCB0aGUgZWRpdG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdoZW4gb3B0aW9ucyBjaGFuZ2UuXG5cbiAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHtcbiAgICBjbS5kb2MubW9kZSA9IGdldE1vZGUoY20ub3B0aW9ucywgY20uZG9jLm1vZGVPcHRpb24pO1xuICAgIHJlc2V0TW9kZVN0YXRlKGNtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0TW9kZVN0YXRlKGNtKSB7XG4gICAgY20uZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgICAgaWYgKGxpbmUuc3R5bGVzKSB7IGxpbmUuc3R5bGVzID0gbnVsbDsgfVxuICAgIH0pO1xuICAgIGNtLmRvYy5tb2RlRnJvbnRpZXIgPSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjbS5kb2MuZmlyc3Q7XG4gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7XG4gICAgY20uc3RhdGUubW9kZUdlbisrO1xuICAgIGlmIChjbS5jdXJPcCkgeyByZWdDaGFuZ2UoY20pOyB9XG4gIH1cblxuICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRVxuXG4gIC8vIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhhdCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lXG4gIC8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24gb2YgbGluZVxuICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4dCBiZWhhdmUgbW9yZSBpbnR1aXRpdmUuXG4gIGZ1bmN0aW9uIGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSB7XG4gICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRvLmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSBcIlwiICYmXG4gICAgICAoIWRvYy5jbSB8fCBkb2MuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpXG4gIH1cblxuICAvLyBQZXJmb3JtIGEgY2hhbmdlIG9uIHRoZSBkb2N1bWVudCBkYXRhIHN0cnVjdHVyZS5cbiAgZnVuY3Rpb24gdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHtcbiAgICBmdW5jdGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBudWxsfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykge1xuICAgICAgdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpO1xuICAgICAgc2lnbmFsTGF0ZXIobGluZSwgXCJjaGFuZ2VcIiwgbGluZSwgY2hhbmdlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGluZXNGb3Ioc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpXG4gICAgICAgIHsgcmVzdWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7IH1cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB2YXIgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNoYW5nZS50bywgdGV4dCA9IGNoYW5nZS50ZXh0O1xuICAgIHZhciBmaXJzdExpbmUgPSBnZXRMaW5lKGRvYywgZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKGRvYywgdG8ubGluZSk7XG4gICAgdmFyIGxhc3RUZXh0ID0gbHN0KHRleHQpLCBsYXN0U3BhbnMgPSBzcGFuc0Zvcih0ZXh0Lmxlbmd0aCAtIDEpLCBubGluZXMgPSB0by5saW5lIC0gZnJvbS5saW5lO1xuXG4gICAgLy8gQWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZVxuICAgIGlmIChjaGFuZ2UuZnVsbCkge1xuICAgICAgZG9jLmluc2VydCgwLCBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCkpO1xuICAgICAgZG9jLnJlbW92ZSh0ZXh0Lmxlbmd0aCwgZG9jLnNpemUgLSB0ZXh0Lmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2VcbiAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by5cbiAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7XG4gICAgICBpZiAobmxpbmVzKSB7IGRvYy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMpOyB9XG4gICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7IGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7IH1cbiAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkge1xuICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhZGRlZCQxID0gbGluZXNGb3IoMSwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgYWRkZWQkMS5wdXNoKG5ldyBMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7XG4gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkJDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkge1xuICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIHNwYW5zRm9yKDApKTtcbiAgICAgIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7XG4gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7XG4gICAgICB2YXIgYWRkZWQkMiA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAobmxpbmVzID4gMSkgeyBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOyB9XG4gICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkJDIpO1xuICAgIH1cblxuICAgIHNpZ25hbExhdGVyKGRvYywgXCJjaGFuZ2VcIiwgZG9jLCBjaGFuZ2UpO1xuICB9XG5cbiAgLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy5cbiAgZnVuY3Rpb24gbGlua2VkRG9jcyhkb2MsIGYsIHNoYXJlZEhpc3RPbmx5KSB7XG4gICAgZnVuY3Rpb24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkge1xuICAgICAgaWYgKGRvYy5saW5rZWQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWwgPSBkb2MubGlua2VkW2ldO1xuICAgICAgICBpZiAocmVsLmRvYyA9PSBza2lwKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgdmFyIHNoYXJlZCA9IHNoYXJlZEhpc3QgJiYgcmVsLnNoYXJlZEhpc3Q7XG4gICAgICAgIGlmIChzaGFyZWRIaXN0T25seSAmJiAhc2hhcmVkKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgZihyZWwuZG9jLCBzaGFyZWQpO1xuICAgICAgICBwcm9wYWdhdGUocmVsLmRvYywgZG9jLCBzaGFyZWQpO1xuICAgICAgfSB9XG4gICAgfVxuICAgIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpO1xuICB9XG5cbiAgLy8gQXR0YWNoIGEgZG9jdW1lbnQgdG8gYW4gZWRpdG9yLlxuICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykge1xuICAgIGlmIChkb2MuY20pIHsgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS5cIikgfVxuICAgIGNtLmRvYyA9IGRvYztcbiAgICBkb2MuY20gPSBjbTtcbiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTtcbiAgICBsb2FkTW9kZShjbSk7XG4gICAgc2V0RGlyZWN0aW9uQ2xhc3MoY20pO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZmluZE1heExpbmUoY20pOyB9XG4gICAgY20ub3B0aW9ucy5tb2RlID0gZG9jLm1vZGVPcHRpb247XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERpcmVjdGlvbkNsYXNzKGNtKSB7XG4gIChjbS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIgPyBhZGRDbGFzcyA6IHJtQ2xhc3MpKGNtLmRpc3BsYXkubGluZURpdiwgXCJDb2RlTWlycm9yLXJ0bFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpcmVjdGlvbkNoYW5nZWQoY20pIHtcbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXREaXJlY3Rpb25DbGFzcyhjbSk7XG4gICAgICByZWdDaGFuZ2UoY20pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gSGlzdG9yeShzdGFydEdlbikge1xuICAgIC8vIEFycmF5cyBvZiBjaGFuZ2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhblxuICAgIC8vIGV2ZW50IHRvIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVzIGV2ZW50cyBmcm9tIGRvbmVcbiAgICAvLyB0byB1bmRvbmUsIHJlZG9pbmcgbW92ZXMgdGhlbSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLlxuICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdO1xuICAgIHRoaXMudW5kb0RlcHRoID0gSW5maW5pdHk7XG4gICAgLy8gVXNlZCB0byB0cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG9cbiAgICAvLyBldmVudFxuICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDtcbiAgICB0aGlzLmxhc3RPcCA9IHRoaXMubGFzdFNlbE9wID0gbnVsbDtcbiAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4gPSBudWxsO1xuICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2RcbiAgICB0aGlzLmdlbmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5bGUgY2hhbmdlXG4gIC8vIG9iamVjdC5cbiAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpIHtcbiAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNoYW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9O1xuICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO1xuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTsgfSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGhpc3RDaGFuZ2VcbiAgfVxuXG4gIC8vIFBvcCBhbGwgc2VsZWN0aW9uIGV2ZW50cyBvZmYgdGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3AgYXRcbiAgLy8gYSBjaGFuZ2UgZXZlbnQuXG4gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGFycmF5KSB7XG4gICAgd2hpbGUgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpO1xuICAgICAgaWYgKGxhc3QucmFuZ2VzKSB7IGFycmF5LnBvcCgpOyB9XG4gICAgICBlbHNlIHsgYnJlYWsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHRvcCBjaGFuZ2UgZXZlbnQgaW4gdGhlIGhpc3RvcnkuIFBvcCBvZmYgc2VsZWN0aW9uXG4gIC8vIGV2ZW50cyB0aGF0IGFyZSBpbiB0aGUgd2F5LlxuICBmdW5jdGlvbiBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QuZG9uZSk7XG4gICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSlcbiAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJhbmdlcykge1xuICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoID4gMSAmJiAhaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGggLSAyXS5yYW5nZXMpIHtcbiAgICAgIGhpc3QuZG9uZS5wb3AoKTtcbiAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJnZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW5cbiAgLy8gYSBzaW5nbGUgb3BlcmF0aW9uLCBvciBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdFxuICAvLyBhbGxvd3MgbWVyZ2luZyAoc3RhcnRpbmcgd2l0aCBcIitcIikgaW50byBhIHNpbmdsZSBldmVudC5cbiAgZnVuY3Rpb24gYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgb3BJZCkge1xuICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7XG4gICAgaGlzdC51bmRvbmUubGVuZ3RoID0gMDtcbiAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyO1xuICAgIHZhciBsYXN0O1xuXG4gICAgaWYgKChoaXN0Lmxhc3RPcCA9PSBvcElkIHx8XG4gICAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2luICYmXG4gICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09IFwiK1wiICYmIGhpc3QubGFzdE1vZFRpbWUgPiB0aW1lIC0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKSkgfHxcbiAgICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSBcIipcIikpICYmXG4gICAgICAgIChjdXIgPSBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgaGlzdC5sYXN0T3AgPT0gb3BJZCkpKSB7XG4gICAgICAvLyBNZXJnZSB0aGlzIGNoYW5nZSBpbnRvIHRoZSBsYXN0IGV2ZW50XG4gICAgICBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKTtcbiAgICAgIGlmIChjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZyb20sIGxhc3QudG8pID09IDApIHtcbiAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24gLS0gZG9uJ3Qgd2FudCB0byBhZGRcbiAgICAgICAgLy8gbmV3IGNoYW5nZXNldHMgZm9yIGV2ZXJ5IGNoYXJhY3RlciB0eXBlZFxuICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZGQgbmV3IHN1Yi1ldmVudFxuICAgICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBldmVudC5cbiAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTtcbiAgICAgIGlmICghYmVmb3JlIHx8ICFiZWZvcmUucmFuZ2VzKVxuICAgICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLnNlbCwgaGlzdC5kb25lKTsgfVxuICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSldLFxuICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn07XG4gICAgICBoaXN0LmRvbmUucHVzaChjdXIpO1xuICAgICAgd2hpbGUgKGhpc3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkge1xuICAgICAgICBoaXN0LmRvbmUuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSB7IGhpc3QuZG9uZS5zaGlmdCgpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGhpc3QuZG9uZS5wdXNoKHNlbEFmdGVyKTtcbiAgICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjtcbiAgICBoaXN0Lmxhc3RNb2RUaW1lID0gaGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7XG4gICAgaGlzdC5sYXN0T3AgPSBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7XG4gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gY2hhbmdlLm9yaWdpbjtcblxuICAgIGlmICghbGFzdCkgeyBzaWduYWwoZG9jLCBcImhpc3RvcnlBZGRlZFwiKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgcHJldiwgc2VsKSB7XG4gICAgdmFyIGNoID0gb3JpZ2luLmNoYXJBdCgwKTtcbiAgICByZXR1cm4gY2ggPT0gXCIqXCIgfHxcbiAgICAgIGNoID09IFwiK1wiICYmXG4gICAgICBwcmV2LnJhbmdlcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiZcbiAgICAgIHByZXYuc29tZXRoaW5nU2VsZWN0ZWQoKSA9PSBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSAmJlxuICAgICAgbmV3IERhdGUgLSBkb2MuaGlzdG9yeS5sYXN0U2VsVGltZSA8PSAoZG9jLmNtID8gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkgOiA1MDApXG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzXG4gIC8vIHRoZSBwZW5kaW5nIHNlbGVjdGlvbiBpbiB0aGUgaGlzdG9yeSwgYW5kIHB1c2hlcyB0aGUgb2xkIHBlbmRpbmdcbiAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdhcyBzaWduaWZpY2FudGx5XG4gIC8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywgZW1wdGluZXNzLCBvciB0aW1lKS5cbiAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRvYywgc2VsLCBvcElkLCBvcHRpb25zKSB7XG4gICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgb3JpZ2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjtcblxuICAgIC8vIEEgbmV3IGV2ZW50IGlzIHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoXG4gICAgLy8gdGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5zXG4gICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBzdGFydGluZyB3aXRoICsgYXJlXG4gICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRoZXIgaW4gdGltZS5cbiAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RTZWxPcCB8fFxuICAgICAgICAob3JpZ2luICYmIGhpc3QubGFzdFNlbE9yaWdpbiA9PSBvcmlnaW4gJiZcbiAgICAgICAgIChoaXN0Lmxhc3RNb2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2luID09IG9yaWdpbiB8fFxuICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxzdChoaXN0LmRvbmUpLCBzZWwpKSkpXG4gICAgICB7IGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBzZWw7IH1cbiAgICBlbHNlXG4gICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBoaXN0LmRvbmUpOyB9XG5cbiAgICBoaXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRlO1xuICAgIGhpc3QubGFzdFNlbE9yaWdpbiA9IG9yaWdpbjtcbiAgICBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jbGVhclJlZG8gIT09IGZhbHNlKVxuICAgICAgeyBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LnVuZG9uZSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBkZXN0KSB7XG4gICAgdmFyIHRvcCA9IGxzdChkZXN0KTtcbiAgICBpZiAoISh0b3AgJiYgdG9wLnJhbmdlcyAmJiB0b3AuZXF1YWxzKHNlbCkpKVxuICAgICAgeyBkZXN0LnB1c2goc2VsKTsgfVxuICB9XG5cbiAgLy8gVXNlZCB0byBzdG9yZSBtYXJrZWQgc3BhbiBpbmZvcm1hdGlvbiBpbiB0aGUgaGlzdG9yeS5cbiAgZnVuY3Rpb24gYXR0YWNoTG9jYWxTcGFucyhkb2MsIGNoYW5nZSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbXCJzcGFuc19cIiArIGRvYy5pZF0sIG4gPSAwO1xuICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZS5tYXJrZWRTcGFucylcbiAgICAgICAgeyAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7IH1cbiAgICAgICsrbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdoZW4gdW4vcmUtZG9pbmcgcmVzdG9yZXMgdGV4dCBjb250YWluaW5nIG1hcmtlZCBzcGFucywgdGhvc2VcbiAgLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBjbGVhcmVkIHNob3VsZCBub3QgYmUgcmVzdG9yZWQuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFucykge1xuICAgIGlmICghc3BhbnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBvdXQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKHNwYW5zW2ldLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZCkgeyBpZiAoIW91dCkgeyBvdXQgPSBzcGFucy5zbGljZSgwLCBpKTsgfSB9XG4gICAgICBlbHNlIGlmIChvdXQpIHsgb3V0LnB1c2goc3BhbnNbaV0pOyB9XG4gICAgfVxuICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbFxuICB9XG5cbiAgLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUgb2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuXG4gIGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIGZvdW5kID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdO1xuICAgIGlmICghZm91bmQpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBudyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlLnRleHQubGVuZ3RoOyArK2kpXG4gICAgICB7IG53LnB1c2gocmVtb3ZlQ2xlYXJlZFNwYW5zKGZvdW5kW2ldKSk7IH1cbiAgICByZXR1cm4gbndcbiAgfVxuXG4gIC8vIFVzZWQgZm9yIHVuL3JlLWRvaW5nIGNoYW5nZXMgZnJvbSB0aGUgaGlzdG9yeS4gQ29tYmluZXMgdGhlXG4gIC8vIHJlc3VsdCBvZiBjb21wdXRpbmcgdGhlIGV4aXN0aW5nIHNwYW5zIHdpdGggdGhlIHNldCBvZiBzcGFucyB0aGF0XG4gIC8vIGV4aXN0ZWQgaW4gdGhlIGhpc3RvcnkgKHNvIHRoYXQgZGVsZXRpbmcgYXJvdW5kIGEgc3BhbiBhbmQgdGhlblxuICAvLyB1bmRvaW5nIGJyaW5ncyBiYWNrIHRoZSBzcGFuKS5cbiAgZnVuY3Rpb24gbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkge1xuICAgIHZhciBvbGQgPSBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSk7XG4gICAgdmFyIHN0cmV0Y2hlZCA9IHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpO1xuICAgIGlmICghb2xkKSB7IHJldHVybiBzdHJldGNoZWQgfVxuICAgIGlmICghc3RyZXRjaGVkKSB7IHJldHVybiBvbGQgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBvbGRDdXIgPSBvbGRbaV0sIHN0cmV0Y2hDdXIgPSBzdHJldGNoZWRbaV07XG4gICAgICBpZiAob2xkQ3VyICYmIHN0cmV0Y2hDdXIpIHtcbiAgICAgICAgc3BhbnM6IGZvciAodmFyIGogPSAwOyBqIDwgc3RyZXRjaEN1ci5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHZhciBzcGFuID0gc3RyZXRjaEN1cltqXTtcbiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9sZEN1ci5sZW5ndGg7ICsraylcbiAgICAgICAgICAgIHsgaWYgKG9sZEN1cltrXS5tYXJrZXIgPT0gc3Bhbi5tYXJrZXIpIHsgY29udGludWUgc3BhbnMgfSB9XG4gICAgICAgICAgb2xkQ3VyLnB1c2goc3Bhbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZXRjaEN1cikge1xuICAgICAgICBvbGRbaV0gPSBzdHJldGNoQ3VyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2xkXG4gIH1cblxuICAvLyBVc2VkIGJvdGggdG8gcHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwgd2hlblxuICAvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvXG4gIGZ1bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlhdGVTZWwpIHtcbiAgICB2YXIgY29weSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICAgIGNvcHkucHVzaChpbnN0YW50aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChldmVudCkgOiBldmVudCk7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICB2YXIgY2hhbmdlcyA9IGV2ZW50LmNoYW5nZXMsIG5ld0NoYW5nZXMgPSBbXTtcbiAgICAgIGNvcHkucHVzaCh7Y2hhbmdlczogbmV3Q2hhbmdlc30pO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2pdLCBtID0gKHZvaWQgMCk7XG4gICAgICAgIG5ld0NoYW5nZXMucHVzaCh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2UudG8sIHRleHQ6IGNoYW5nZS50ZXh0fSk7XG4gICAgICAgIGlmIChuZXdHcm91cCkgeyBmb3IgKHZhciBwcm9wIGluIGNoYW5nZSkgeyBpZiAobSA9IHByb3AubWF0Y2goL15zcGFuc18oXFxkKykkLykpIHtcbiAgICAgICAgICBpZiAoaW5kZXhPZihuZXdHcm91cCwgTnVtYmVyKG1bMV0pKSA+IC0xKSB7XG4gICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2VbcHJvcF07XG4gICAgICAgICAgICBkZWxldGUgY2hhbmdlW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB9IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfVxuXG4gIC8vIFRoZSAnc2Nyb2xsJyBwYXJhbWV0ZXIgZ2l2ZW4gdG8gbWFueSBvZiB0aGVzZSBpbmRpY2F0ZWQgd2hldGhlclxuICAvLyB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBzaG91bGQgYmUgc2Nyb2xsZWQgaW50byB2aWV3IGFmdGVyXG4gIC8vIG1vZGlmeWluZyB0aGUgc2VsZWN0aW9uLlxuXG4gIC8vIElmIHNoaWZ0IGlzIGhlbGQgb3IgdGhlIGV4dGVuZCBmbGFnIGlzIHNldCwgZXh0ZW5kcyBhIHJhbmdlIHRvXG4gIC8vIGluY2x1ZGUgYSBnaXZlbiBwb3NpdGlvbiAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLlxuICAvLyBPdGhlcndpc2UsIHNpbXBseSByZXR1cm5zIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMuXG4gIC8vIFVzZWQgZm9yIGN1cnNvciBtb3Rpb24gYW5kIHN1Y2guXG4gIGZ1bmN0aW9uIGV4dGVuZFJhbmdlKHJhbmdlLCBoZWFkLCBvdGhlciwgZXh0ZW5kKSB7XG4gICAgaWYgKGV4dGVuZCkge1xuICAgICAgdmFyIGFuY2hvciA9IHJhbmdlLmFuY2hvcjtcbiAgICAgIGlmIChvdGhlcikge1xuICAgICAgICB2YXIgcG9zQmVmb3JlID0gY21wKGhlYWQsIGFuY2hvcikgPCAwO1xuICAgICAgICBpZiAocG9zQmVmb3JlICE9IChjbXAob3RoZXIsIGFuY2hvcikgPCAwKSkge1xuICAgICAgICAgIGFuY2hvciA9IGhlYWQ7XG4gICAgICAgICAgaGVhZCA9IG90aGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9yZSAhPSAoY21wKGhlYWQsIG90aGVyKSA8IDApKSB7XG4gICAgICAgICAgaGVhZCA9IG90aGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGFuY2hvciwgaGVhZClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZShvdGhlciB8fCBoZWFkLCBoZWFkKVxuICAgIH1cbiAgfVxuXG4gIC8vIEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gcmFuZ2UsIGRpc2NhcmQgdGhlIHJlc3QuXG4gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVyLCBvcHRpb25zLCBleHRlbmQpIHtcbiAgICBpZiAoZXh0ZW5kID09IG51bGwpIHsgZXh0ZW5kID0gZG9jLmNtICYmIChkb2MuY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKTsgfVxuICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW2V4dGVuZFJhbmdlKGRvYy5zZWwucHJpbWFyeSgpLCBoZWFkLCBvdGhlciwgZXh0ZW5kKV0sIDApLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVjdGlvbnMgd2l0aCBsZW5ndGhcbiAgLy8gZXF1YWwgdGhlIG51bWJlciBvZiBzZWxlY3Rpb25zKVxuICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb25zKGRvYywgaGVhZHMsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGV4dGVuZCA9IGRvYy5jbSAmJiAoZG9jLmNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgb3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ldLCBudWxsLCBleHRlbmQpOyB9XG4gICAgdmFyIG5ld1NlbCA9IG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG91dCwgZG9jLnNlbC5wcmltSW5kZXgpO1xuICAgIHNldFNlbGVjdGlvbihkb2MsIG5ld1NlbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBVcGRhdGVzIGEgc2luZ2xlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24uXG4gIGZ1bmN0aW9uIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykge1xuICAgIHZhciByYW5nZXMgPSBkb2Muc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICByYW5nZXNbaV0gPSByYW5nZTtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCByYW5nZXMsIGRvYy5zZWwucHJpbUluZGV4KSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBSZXNldCB0aGUgc2VsZWN0aW9uIHRvIGEgc2luZ2xlIHJhbmdlLlxuICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxlY3Rpb24oZG9jLCBhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBHaXZlIGJlZm9yZVNlbGVjdGlvbkNoYW5nZSBoYW5kbGVycyBhIGNoYW5nZSB0byBpbmZsdWVuY2UgYVxuICAvLyBzZWxlY3Rpb24gdXBkYXRlLlxuICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgcmFuZ2VzOiBzZWwucmFuZ2VzLFxuICAgICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyB0aGlzLnJhbmdlc1tpXSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgcmFuZ2VzW2ldLmFuY2hvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICAgIH0sXG4gICAgICBvcmlnaW46IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW5cbiAgICB9O1xuICAgIHNpZ25hbChkb2MsIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGRvYywgb2JqKTtcbiAgICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGRvYy5jbSwgb2JqKTsgfVxuICAgIGlmIChvYmoucmFuZ2VzICE9IHNlbC5yYW5nZXMpIHsgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG9iai5yYW5nZXMsIG9iai5yYW5nZXMubGVuZ3RoIC0gMSkgfVxuICAgIGVsc2UgeyByZXR1cm4gc2VsIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGRvYywgc2VsLCBvcHRpb25zKSB7XG4gICAgdmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBsYXN0ID0gbHN0KGRvbmUpO1xuICAgIGlmIChsYXN0ICYmIGxhc3QucmFuZ2VzKSB7XG4gICAgICBkb25lW2RvbmUubGVuZ3RoIC0gMV0gPSBzZWw7XG4gICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBhIG5ldyBzZWxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7XG4gICAgYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRvYywgZG9jLnNlbCwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIGlmIChoYXNIYW5kbGVyKGRvYywgXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiKSlcbiAgICAgIHsgc2VsID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsLCBvcHRpb25zKTsgfVxuXG4gICAgdmFyIGJpYXMgPSBvcHRpb25zICYmIG9wdGlvbnMuYmlhcyB8fFxuICAgICAgKGNtcChzZWwucHJpbWFyeSgpLmhlYWQsIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQpIDwgMCA/IC0xIDogMSk7XG4gICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIHRydWUpKTtcblxuICAgIGlmICghKG9wdGlvbnMgJiYgb3B0aW9ucy5zY3JvbGwgPT09IGZhbHNlKSAmJiBkb2MuY20pXG4gICAgICB7IGVuc3VyZUN1cnNvclZpc2libGUoZG9jLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBzZWwpIHtcbiAgICBpZiAoc2VsLmVxdWFscyhkb2Muc2VsKSkgeyByZXR1cm4gfVxuXG4gICAgZG9jLnNlbCA9IHNlbDtcblxuICAgIGlmIChkb2MuY20pIHtcbiAgICAgIGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1dCA9IDE7XG4gICAgICBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICBzaWduYWxDdXJzb3JBY3Rpdml0eShkb2MuY20pO1xuICAgIH1cbiAgICBzaWduYWxMYXRlcihkb2MsIFwiY3Vyc29yQWN0aXZpdHlcIiwgZG9jKTtcbiAgfVxuXG4gIC8vIFZlcmlmeSB0aGF0IHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljXG4gIC8vIG1hcmtlZCByYW5nZXMuXG4gIGZ1bmN0aW9uIHJlQ2hlY2tTZWxlY3Rpb24oZG9jKSB7XG4gICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBkb2Muc2VsLCBudWxsLCBmYWxzZSkpO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgc2VsZWN0aW9uIHRoYXQgZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljXG4gIC8vIHJhbmdlcy5cbiAgZnVuY3Rpb24gc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCBtYXlDbGVhcikge1xuICAgIHZhciBvdXQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgdmFyIG9sZCA9IHNlbC5yYW5nZXMubGVuZ3RoID09IGRvYy5zZWwucmFuZ2VzLmxlbmd0aCAmJiBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIHZhciBuZXdBbmNob3IgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuYW5jaG9yLCBvbGQgJiYgb2xkLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIpO1xuICAgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgb2xkICYmIG9sZC5oZWFkLCBiaWFzLCBtYXlDbGVhcik7XG4gICAgICBpZiAob3V0IHx8IG5ld0FuY2hvciAhPSByYW5nZS5hbmNob3IgfHwgbmV3SGVhZCAhPSByYW5nZS5oZWFkKSB7XG4gICAgICAgIGlmICghb3V0KSB7IG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7IH1cbiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwgbmV3SGVhZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIHNlbC5wcmltSW5kZXgpIDogc2VsXG4gIH1cblxuICBmdW5jdGlvbiBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgZGlyLCBtYXlDbGVhcikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTtcbiAgICBpZiAobGluZS5tYXJrZWRTcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7XG5cbiAgICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgcHJldmVudCB0aGUgY3Vyc29yIGJlaW5nIHBsYWNlZCB0byB0aGUgbGVmdC9yaWdodCBvZiBhbiBhdG9taWMgbWFya2VyXG4gICAgICAvLyBIaXN0b3JpY2FsbHkgdGhpcyB3YXMgZGV0ZXJtaW5lZCB1c2luZyB0aGUgaW5jbHVzaXZlTGVmdC9SaWdodCBvcHRpb24sIGJ1dCB0aGUgbmV3IHdheSB0byBjb250cm9sIGl0XG4gICAgICAvLyBpcyB3aXRoIHNlbGVjdExlZnQvUmlnaHRcbiAgICAgIHZhciBwcmV2ZW50Q3Vyc29yTGVmdCA9IChcInNlbGVjdExlZnRcIiBpbiBtKSA/ICFtLnNlbGVjdExlZnQgOiBtLmluY2x1c2l2ZUxlZnQ7XG4gICAgICB2YXIgcHJldmVudEN1cnNvclJpZ2h0ID0gKFwic2VsZWN0UmlnaHRcIiBpbiBtKSA/ICFtLnNlbGVjdFJpZ2h0IDogbS5pbmNsdXNpdmVSaWdodDtcblxuICAgICAgaWYgKChzcC5mcm9tID09IG51bGwgfHwgKHByZXZlbnRDdXJzb3JMZWZ0ID8gc3AuZnJvbSA8PSBwb3MuY2ggOiBzcC5mcm9tIDwgcG9zLmNoKSkgJiZcbiAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCAocHJldmVudEN1cnNvclJpZ2h0ID8gc3AudG8gPj0gcG9zLmNoIDogc3AudG8gPiBwb3MuY2gpKSkge1xuICAgICAgICBpZiAobWF5Q2xlYXIpIHtcbiAgICAgICAgICBzaWduYWwobSwgXCJiZWZvcmVDdXJzb3JFbnRlclwiKTtcbiAgICAgICAgICBpZiAobS5leHBsaWNpdGx5Q2xlYXJlZCkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLm1hcmtlZFNwYW5zKSB7IGJyZWFrIH1cbiAgICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWV9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbS5hdG9taWMpIHsgY29udGludWUgfVxuXG4gICAgICAgIGlmIChvbGRQb3MpIHtcbiAgICAgICAgICB2YXIgbmVhciA9IG0uZmluZChkaXIgPCAwID8gMSA6IC0xKSwgZGlmZiA9ICh2b2lkIDApO1xuICAgICAgICAgIGlmIChkaXIgPCAwID8gcHJldmVudEN1cnNvclJpZ2h0IDogcHJldmVudEN1cnNvckxlZnQpXG4gICAgICAgICAgICB7IG5lYXIgPSBtb3ZlUG9zKGRvYywgbmVhciwgLWRpciwgbmVhciAmJiBuZWFyLmxpbmUgPT0gcG9zLmxpbmUgPyBsaW5lIDogbnVsbCk7IH1cbiAgICAgICAgICBpZiAobmVhciAmJiBuZWFyLmxpbmUgPT0gcG9zLmxpbmUgJiYgKGRpZmYgPSBjbXAobmVhciwgb2xkUG9zKSkgJiYgKGRpciA8IDAgPyBkaWZmIDwgMCA6IGRpZmYgPiAwKSlcbiAgICAgICAgICAgIHsgcmV0dXJuIHNraXBBdG9taWNJbm5lcihkb2MsIG5lYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZhciA9IG0uZmluZChkaXIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgaWYgKGRpciA8IDAgPyBwcmV2ZW50Q3Vyc29yTGVmdCA6IHByZXZlbnRDdXJzb3JSaWdodClcbiAgICAgICAgICB7IGZhciA9IG1vdmVQb3MoZG9jLCBmYXIsIGRpciwgZmFyLmxpbmUgPT0gcG9zLmxpbmUgPyBsaW5lIDogbnVsbCk7IH1cbiAgICAgICAgcmV0dXJuIGZhciA/IHNraXBBdG9taWNJbm5lcihkb2MsIGZhciwgcG9zLCBkaXIsIG1heUNsZWFyKSA6IG51bGxcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBFbnN1cmUgYSBnaXZlbiBwb3NpdGlvbiBpcyBub3QgaW5zaWRlIGFuIGF0b21pYyByYW5nZS5cbiAgZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBiaWFzLCBtYXlDbGVhcikge1xuICAgIHZhciBkaXIgPSBiaWFzIHx8IDE7XG4gICAgdmFyIGZvdW5kID0gc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHx8XG4gICAgICAgICghbWF5Q2xlYXIgJiYgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgdHJ1ZSkpIHx8XG4gICAgICAgIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCAtZGlyLCBtYXlDbGVhcikgfHxcbiAgICAgICAgKCFtYXlDbGVhciAmJiBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgLWRpciwgdHJ1ZSkpO1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgIGRvYy5jYW50RWRpdCA9IHRydWU7XG4gICAgICByZXR1cm4gUG9zKGRvYy5maXJzdCwgMClcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlUG9zKGRvYywgcG9zLCBkaXIsIGxpbmUpIHtcbiAgICBpZiAoZGlyIDwgMCAmJiBwb3MuY2ggPT0gMCkge1xuICAgICAgaWYgKHBvcy5saW5lID4gZG9jLmZpcnN0KSB7IHJldHVybiBjbGlwUG9zKGRvYywgUG9zKHBvcy5saW5lIC0gMSkpIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gbnVsbCB9XG4gICAgfSBlbHNlIGlmIChkaXIgPiAwICYmIHBvcy5jaCA9PSAobGluZSB8fCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpKS50ZXh0Lmxlbmd0aCkge1xuICAgICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSB7IHJldHVybiBQb3MocG9zLmxpbmUgKyAxLCAwKSB9XG4gICAgICBlbHNlIHsgcmV0dXJuIG51bGwgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFBvcyhwb3MubGluZSwgcG9zLmNoICsgZGlyKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdEFsbChjbSkge1xuICAgIGNtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xsKTtcbiAgfVxuXG4gIC8vIFVQREFUSU5HXG5cbiAgLy8gQWxsb3cgXCJiZWZvcmVDaGFuZ2VcIiBldmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2VcbiAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgZnJvbTogY2hhbmdlLmZyb20sXG4gICAgICB0bzogY2hhbmdlLnRvLFxuICAgICAgdGV4dDogY2hhbmdlLnRleHQsXG4gICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sXG4gICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iai5jYW5jZWxlZCA9IHRydWU7IH1cbiAgICB9O1xuICAgIGlmICh1cGRhdGUpIHsgb2JqLnVwZGF0ZSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7XG4gICAgICBpZiAoZnJvbSkgeyBvYmouZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKTsgfVxuICAgICAgaWYgKHRvKSB7IG9iai50byA9IGNsaXBQb3MoZG9jLCB0byk7IH1cbiAgICAgIGlmICh0ZXh0KSB7IG9iai50ZXh0ID0gdGV4dDsgfVxuICAgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7IG9iai5vcmlnaW4gPSBvcmlnaW47IH1cbiAgICB9OyB9XG4gICAgc2lnbmFsKGRvYywgXCJiZWZvcmVDaGFuZ2VcIiwgZG9jLCBvYmopO1xuICAgIGlmIChkb2MuY20pIHsgc2lnbmFsKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIiwgZG9jLmNtLCBvYmopOyB9XG5cbiAgICBpZiAob2JqLmNhbmNlbGVkKSB7XG4gICAgICBpZiAoZG9jLmNtKSB7IGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1dCA9IDI7IH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmoudG8sIHRleHQ6IG9iai50ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59XG4gIH1cblxuICAvLyBBcHBseSBhIGNoYW5nZSB0byBhIGRvY3VtZW50LCBhbmQgYWRkIGl0IHRvIHRoZSBkb2N1bWVudCdzXG4gIC8vIGhpc3RvcnksIGFuZCBwcm9wYWdhdGluZyBpdCB0byBhbGwgbGlua2VkIGRvY3VtZW50cy5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIHtcbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICBpZiAoIWRvYy5jbS5jdXJPcCkgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZSkoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB9XG4gICAgICBpZiAoZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHsgcmV0dXJuIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIikpIHtcbiAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNoYW5nZSkgeyByZXR1cm4gfVxuICAgIH1cblxuICAgIC8vIFBvc3NpYmx5IHNwbGl0IG9yIHN1cHByZXNzIHRoZSB1cGRhdGUgYmFzZWQgb24gdGhlIHByZXNlbmNlXG4gICAgLy8gb2YgcmVhZC1vbmx5IHNwYW5zIGluIGl0cyByYW5nZS5cbiAgICB2YXIgc3BsaXQgPSBzYXdSZWFkT25seVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pO1xuICAgIGlmIChzcGxpdCkge1xuICAgICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKVxuICAgICAgICB7IG1ha2VDaGFuZ2VJbm5lcihkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8sIHRleHQ6IGkgPyBbXCJcIl0gOiBjaGFuZ2UudGV4dCwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufSk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlSW5uZXIoZG9jLCBjaGFuZ2UpIHtcbiAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdlLnRleHRbMF0gPT0gXCJcIiAmJiBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCkgeyByZXR1cm4gfVxuICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7XG4gICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOKTtcblxuICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgdmFyIHJlYmFzZWQgPSBbXTtcblxuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jLCBzaGFyZWRIaXN0KSB7XG4gICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHtcbiAgICAgICAgcmViYXNlSGlzdChkb2MuaGlzdG9yeSwgY2hhbmdlKTtcbiAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTtcbiAgICAgIH1cbiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkge1xuICAgIHZhciBzdXBwcmVzcyA9IGRvYy5jbSAmJiBkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0cztcbiAgICBpZiAoc3VwcHJlc3MgJiYgIWFsbG93U2VsZWN0aW9uT25seSkgeyByZXR1cm4gfVxuXG4gICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgZXZlbnQsIHNlbEFmdGVyID0gZG9jLnNlbDtcbiAgICB2YXIgc291cmNlID0gdHlwZSA9PSBcInVuZG9cIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lLCBkZXN0ID0gdHlwZSA9PSBcInVuZG9cIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwteiB3b24ndFxuICAgIC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cylcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV2ZW50ID0gc291cmNlW2ldO1xuICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSA/IGV2ZW50LnJhbmdlcyAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpIDogIWV2ZW50LnJhbmdlcylcbiAgICAgICAgeyBicmVhayB9XG4gICAgfVxuICAgIGlmIChpID09IHNvdXJjZS5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBudWxsO1xuXG4gICAgZm9yICg7Oykge1xuICAgICAgZXZlbnQgPSBzb3VyY2UucG9wKCk7XG4gICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZXZlbnQsIGRlc3QpO1xuICAgICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ICYmICFldmVudC5lcXVhbHMoZG9jLnNlbCkpIHtcbiAgICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxBZnRlciA9IGV2ZW50O1xuICAgICAgfSBlbHNlIGlmIChzdXBwcmVzcykge1xuICAgICAgICBzb3VyY2UucHVzaChldmVudCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHsgYnJlYWsgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHVwIGEgcmV2ZXJzZSBjaGFuZ2Ugb2JqZWN0IHRvIGFkZCB0byB0aGUgb3Bwb3NpdGUgaGlzdG9yeVxuICAgIC8vIHN0YWNrIChyZWRvIHdoZW4gdW5kb2luZywgYW5kIHZpY2UgdmVyc2EpLlxuICAgIHZhciBhbnRpQ2hhbmdlcyA9IFtdO1xuICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIsIGRlc3QpO1xuICAgIGRlc3QucHVzaCh7Y2hhbmdlczogYW50aUNoYW5nZXMsIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn0pO1xuICAgIGhpc3QuZ2VuZXJhdGlvbiA9IGV2ZW50LmdlbmVyYXRpb24gfHwgKytoaXN0Lm1heEdlbmVyYXRpb247XG5cbiAgICB2YXIgZmlsdGVyID0gaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIik7XG5cbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBldmVudC5jaGFuZ2VzW2ldO1xuICAgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7XG4gICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkge1xuICAgICAgICBzb3VyY2UubGVuZ3RoID0gMDtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG5cbiAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcblxuICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkgOiBsc3Qoc291cmNlKTtcbiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7XG4gICAgICBpZiAoIWkgJiYgZG9jLmNtKSB7IGRvYy5jbS5zY3JvbGxJbnRvVmlldyh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKX0pOyB9XG4gICAgICB2YXIgcmViYXNlZCA9IFtdO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHNcbiAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jLCBzaGFyZWRIaXN0KSB7XG4gICAgICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkge1xuICAgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7XG4gICAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSQxID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgLS1pJDEpIHtcbiAgICAgIHZhciByZXR1cm5lZCA9IGxvb3AoIGkkMSApO1xuXG4gICAgICBpZiAoIHJldHVybmVkICkgcmV0dXJuIHJldHVybmVkLnY7XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXZpZXdzIG5lZWQgdGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkXG4gIC8vIGFib3ZlIG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBkb2N1bWVudC5cbiAgZnVuY3Rpb24gc2hpZnREb2MoZG9jLCBkaXN0YW5jZSkge1xuICAgIGlmIChkaXN0YW5jZSA9PSAwKSB7IHJldHVybiB9XG4gICAgZG9jLmZpcnN0ICs9IGRpc3RhbmNlO1xuICAgIGRvYy5zZWwgPSBuZXcgU2VsZWN0aW9uKG1hcChkb2Muc2VsLnJhbmdlcywgZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiBuZXcgUmFuZ2UoXG4gICAgICBQb3MocmFuZ2UuYW5jaG9yLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuYW5jaG9yLmNoKSxcbiAgICAgIFBvcyhyYW5nZS5oZWFkLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuaGVhZC5jaClcbiAgICApOyB9KSwgZG9jLnNlbC5wcmltSW5kZXgpO1xuICAgIGlmIChkb2MuY20pIHtcbiAgICAgIHJlZ0NoYW5nZShkb2MuY20sIGRvYy5maXJzdCwgZG9jLmZpcnN0IC0gZGlzdGFuY2UsIGRpc3RhbmNlKTtcbiAgICAgIGZvciAodmFyIGQgPSBkb2MuY20uZGlzcGxheSwgbCA9IGQudmlld0Zyb207IGwgPCBkLnZpZXdUbzsgbCsrKVxuICAgICAgICB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBsLCBcImd1dHRlclwiKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1vcmUgbG93ZXItbGV2ZWwgY2hhbmdlIGZ1bmN0aW9uLCBoYW5kbGluZyBvbmx5IGEgc2luZ2xlIGRvY3VtZW50XG4gIC8vIChub3QgbGlua2VkIG9uZXMpLlxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpIHtcbiAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApXG4gICAgICB7IHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlU2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKSB9XG5cbiAgICBpZiAoY2hhbmdlLnRvLmxpbmUgPCBkb2MuZmlyc3QpIHtcbiAgICAgIHNoaWZ0RG9jKGRvYywgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSB7IHJldHVybiB9XG5cbiAgICAvLyBDbGlwIHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhpcyBkb2NcbiAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA8IGRvYy5maXJzdCkge1xuICAgICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTtcbiAgICAgIHNoaWZ0RG9jKGRvYywgc2hpZnQpO1xuICAgICAgY2hhbmdlID0ge2Zyb206IFBvcyhkb2MuZmlyc3QsIDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50by5jaCksXG4gICAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59O1xuICAgIH1cbiAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGluZSgpO1xuICAgIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHtcbiAgICAgIGNoYW5nZSA9IHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdlLm9yaWdpbn07XG4gICAgfVxuXG4gICAgY2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7XG5cbiAgICBpZiAoIXNlbEFmdGVyKSB7IHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKTsgfVxuICAgIGlmIChkb2MuY20pIHsgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7IH1cbiAgICBlbHNlIHsgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucyk7IH1cbiAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpO1xuXG4gICAgaWYgKGRvYy5jYW50RWRpdCAmJiBza2lwQXRvbWljKGRvYywgUG9zKGRvYy5maXJzdExpbmUoKSwgMCkpKVxuICAgICAgeyBkb2MuY2FudEVkaXQgPSBmYWxzZTsgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSBpbnRlcmFjdGlvbiBvZiBhIGNoYW5nZSB0byBhIGRvY3VtZW50IHdpdGggdGhlIGVkaXRvclxuICAvLyB0aGF0IHRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZi5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG87XG5cbiAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhTdGFydCA9IGZyb20ubGluZTtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkpO1xuICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUgPT0gZGlzcGxheS5tYXhMaW5lKSB7XG4gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlbC5jb250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKVxuICAgICAgeyBzaWduYWxDdXJzb3JBY3Rpdml0eShjbSk7IH1cblxuICAgIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KGNtKSk7XG5cbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7XG4gICAgICAgIGlmIChsZW4gPiBkaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmUgPSBsaW5lO1xuICAgICAgICAgIGRpc3BsYXkubWF4TGluZUxlbmd0aCA9IGxlbjtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSB7IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgfVxuXG4gICAgcmV0cmVhdEZyb250aWVyKGRvYywgZnJvbS5saW5lKTtcbiAgICBzdGFydFdvcmtlcihjbSwgNDAwKTtcblxuICAgIHZhciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTtcbiAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheVxuICAgIGlmIChjaGFuZ2UuZnVsbClcbiAgICAgIHsgcmVnQ2hhbmdlKGNtKTsgfVxuICAgIGVsc2UgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpXG4gICAgICB7IHJlZ0xpbmVDaGFuZ2UoY20sIGZyb20ubGluZSwgXCJ0ZXh0XCIpOyB9XG4gICAgZWxzZVxuICAgICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOyB9XG5cbiAgICB2YXIgY2hhbmdlc0hhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCBcImNoYW5nZXNcIiksIGNoYW5nZUhhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCBcImNoYW5nZVwiKTtcbiAgICBpZiAoY2hhbmdlSGFuZGxlciB8fCBjaGFuZ2VzSGFuZGxlcikge1xuICAgICAgdmFyIG9iaiA9IHtcbiAgICAgICAgZnJvbTogZnJvbSwgdG86IHRvLFxuICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCxcbiAgICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsXG4gICAgICAgIG9yaWdpbjogY2hhbmdlLm9yaWdpblxuICAgICAgfTtcbiAgICAgIGlmIChjaGFuZ2VIYW5kbGVyKSB7IHNpZ25hbExhdGVyKGNtLCBcImNoYW5nZVwiLCBjbSwgb2JqKTsgfVxuICAgICAgaWYgKGNoYW5nZXNIYW5kbGVyKSB7IChjbS5jdXJPcC5jaGFuZ2VPYmpzIHx8IChjbS5jdXJPcC5jaGFuZ2VPYmpzID0gW10pKS5wdXNoKG9iaik7IH1cbiAgICB9XG4gICAgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoZG9jLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7XG4gICAgdmFyIGFzc2lnbjtcblxuICAgIGlmICghdG8pIHsgdG8gPSBmcm9tOyB9XG4gICAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IChhc3NpZ24gPSBbdG8sIGZyb21dLCBmcm9tID0gYXNzaWduWzBdLCB0byA9IGFzc2lnblsxXSk7IH1cbiAgICBpZiAodHlwZW9mIGNvZGUgPT0gXCJzdHJpbmdcIikgeyBjb2RlID0gZG9jLnNwbGl0TGluZXMoY29kZSk7IH1cbiAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59KTtcbiAgfVxuXG4gIC8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlc1xuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBmcm9tLCB0bywgZGlmZikge1xuICAgIGlmICh0byA8IHBvcy5saW5lKSB7XG4gICAgICBwb3MubGluZSArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7XG4gICAgICBwb3MubGluZSA9IGZyb207XG4gICAgICBwb3MuY2ggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRyaWVzIHRvIHJlYmFzZSBhbiBhcnJheSBvZiBoaXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRoZVxuICAvLyBldmVudCwgYW5kIGV2ZXJ5dGhpbmcgJ2JlaGluZCcgaXQsIGlzIGRpc2NhcmRlZC4gSWYgdGhlIGNoYW5nZSBpc1xuICAvLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQuIFVzZXMgYVxuICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3IgdGhlIHBvc2l0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvXG4gIC8vIHJlYWxsb2NhdGUgdGhlbSBhbGwgb24gZXZlcnkgcmViYXNlLCBidXQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoXG4gIC8vIHNoYXJlZCBwb3NpdGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3ViID0gYXJyYXlbaV0sIG9rID0gdHJ1ZTtcbiAgICAgIGlmIChzdWIucmFuZ2VzKSB7XG4gICAgICAgIGlmICghc3ViLmNvcGllZCkgeyBzdWIgPSBhcnJheVtpXSA9IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0gdHJ1ZTsgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9yLCBmcm9tLCB0bywgZGlmZik7XG4gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmhlYWQsIGZyb20sIHRvLCBkaWZmKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyArK2okMSkge1xuICAgICAgICB2YXIgY3VyID0gc3ViLmNoYW5nZXNbaiQxXTtcbiAgICAgICAgaWYgKHRvIDwgY3VyLmZyb20ubGluZSkge1xuICAgICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUgKyBkaWZmLCBjdXIuZnJvbS5jaCk7XG4gICAgICAgICAgY3VyLnRvID0gUG9zKGN1ci50by5saW5lICsgZGlmZiwgY3VyLnRvLmNoKTtcbiAgICAgICAgfSBlbHNlIGlmIChmcm9tIDw9IGN1ci50by5saW5lKSB7XG4gICAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGFycmF5LnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgIGkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3QoaGlzdCwgY2hhbmdlKSB7XG4gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbS5saW5lLCB0byA9IGNoYW5nZS50by5saW5lLCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvIC0gZnJvbSkgLSAxO1xuICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTtcbiAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZmKTtcbiAgfVxuXG4gIC8vIFV0aWxpdHkgZm9yIGFwcGx5aW5nIGEgY2hhbmdlIHRvIGEgbGluZSBieSBoYW5kbGUgb3IgbnVtYmVyLFxuICAvLyByZXR1cm5pbmcgdGhlIG51bWJlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlcmluZyB0aGUgbGluZSBhc1xuICAvLyBjaGFuZ2VkLlxuICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkge1xuICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTtcbiAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSBcIm51bWJlclwiKSB7IGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9jLCBoYW5kbGUpKTsgfVxuICAgIGVsc2UgeyBubyA9IGxpbmVObyhoYW5kbGUpOyB9XG4gICAgaWYgKG5vID09IG51bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIGlmIChvcChsaW5lLCBubykgJiYgZG9jLmNtKSB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBubywgY2hhbmdlVHlwZSk7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUgY29uc2lzdGluZyBvZiBsZWF2ZXMsIHdpdGhcbiAgLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwgYW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3JcbiAgLy8gb3RoZXIgYnJhbmNoIG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2hcbiAgLy8gbm9kZSwgYW5kIGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhc1xuICAvLyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLlxuICAvL1xuICAvLyBBbGwgbm9kZXMgaGF2ZSBwYXJlbnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9tXG4gIC8vIGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVjdHMgdG8gbnVtYmVycy5cbiAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGhlaWdodFxuICAvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0byBmaW5kIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LlxuICAvL1xuICAvLyBTZWUgYWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUuaHRtbFxuXG4gIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgdmFyIGhlaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgbGluZXNbaV0ucGFyZW50ID0gdGhpcztcbiAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggfSxcblxuICAgIC8vIFJlbW92ZSB0aGUgbiBsaW5lcyBhdCBvZmZzZXQgJ2F0Jy5cbiAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHtcbiAgICAgIGZvciAodmFyIGkgPSBhdCwgZSA9IGF0ICsgbjsgaSA8IGU7ICsraSkge1xuICAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICAgIHRoaXMuaGVpZ2h0IC09IGxpbmUuaGVpZ2h0O1xuICAgICAgICBjbGVhblVwTGluZShsaW5lKTtcbiAgICAgICAgc2lnbmFsTGF0ZXIobGluZSwgXCJkZWxldGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7XG4gICAgfSxcblxuICAgIC8vIEhlbHBlciB1c2VkIHRvIGNvbGxhcHNlIGEgc21hbGwgYnJhbmNoIGludG8gYSBzaW5nbGUgbGVhZi5cbiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHtcbiAgICAgIGxpbmVzLnB1c2guYXBwbHkobGluZXMsIHRoaXMubGluZXMpO1xuICAgIH0sXG5cbiAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIGFycmF5IG9mIGxpbmVzIGF0IG9mZnNldCAnYXQnLCBjb3VudCB0aGVtIGFzXG4gICAgLy8gaGF2aW5nIHRoZSBnaXZlbiBoZWlnaHQuXG4gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7XG4gICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7XG4gICAgICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhdCkpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgeyBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOyB9XG4gICAgfSxcblxuICAgIC8vIFVzZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcGFydCBvZiB0aGUgdHJlZS5cbiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7XG4gICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpXG4gICAgICAgIHsgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgeyByZXR1cm4gdHJ1ZSB9IH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldO1xuICAgICAgc2l6ZSArPSBjaC5jaHVua1NpemUoKTsgaGVpZ2h0ICs9IGNoLmhlaWdodDtcbiAgICAgIGNoLnBhcmVudCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgQnJhbmNoQ2h1bmsucHJvdG90eXBlID0ge1xuICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemUgfSxcblxuICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikge1xuICAgICAgdGhpcy5zaXplIC09IG47XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTtcbiAgICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgICB2YXIgcm0gPSBNYXRoLm1pbihuLCBzeiAtIGF0KSwgb2xkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgICAgICAgIGNoaWxkLnJlbW92ZUlubmVyKGF0LCBybSk7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xkSGVpZ2h0IC0gY2hpbGQuaGVpZ2h0O1xuICAgICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzLmNoaWxkcmVuLnNwbGljZShpLS0sIDEpOyBjaGlsZC5wYXJlbnQgPSBudWxsOyB9XG4gICAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgICBhdCA9IDA7XG4gICAgICAgIH0gZWxzZSB7IGF0IC09IHN6OyB9XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIHNtYWxsZXIgdGhhbiAyNSBsaW5lcywgZW5zdXJlIHRoYXQgaXQgaXMgYVxuICAgICAgLy8gc2luZ2xlIGxlYWYgbm9kZS5cbiAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUgJiZcbiAgICAgICAgICAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAxIHx8ICEodGhpcy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIExlYWZDaHVuaykpKSB7XG4gICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbGxhcHNlKGxpbmVzKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5rKGxpbmVzKV07XG4gICAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpcztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7IH1cbiAgICB9LFxuXG4gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7XG4gICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChhdCA8PSBzeikge1xuICAgICAgICAgIGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTtcbiAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHtcbiAgICAgICAgICAgIC8vIFRvIGF2b2lkIG1lbW9yeSB0aHJhc2hpbmcgd2hlbiBjaGlsZC5saW5lcyBpcyBodWdlIChlLmcuIGZpcnN0IHZpZXcgb2YgYSBsYXJnZSBmaWxlKSwgaXQncyBuZXZlciBzcGxpY2VkLlxuICAgICAgICAgICAgLy8gSW5zdGVhZCwgc21hbGwgc2xpY2VzIGFyZSB0YWtlbi4gVGhleSdyZSB0YWtlbiBpbiBvcmRlciBiZWNhdXNlIHNlcXVlbnRpYWwgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmYXN0ZXN0LlxuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGNoaWxkLmxpbmVzLmxlbmd0aCAlIDI1ICsgMjU7XG4gICAgICAgICAgICBmb3IgKHZhciBwb3MgPSByZW1haW5pbmc7IHBvcyA8IGNoaWxkLmxpbmVzLmxlbmd0aDspIHtcbiAgICAgICAgICAgICAgdmFyIGxlYWYgPSBuZXcgTGVhZkNodW5rKGNoaWxkLmxpbmVzLnNsaWNlKHBvcywgcG9zICs9IDI1KSk7XG4gICAgICAgICAgICAgIGNoaWxkLmhlaWdodCAtPSBsZWFmLmhlaWdodDtcbiAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoKytpLCAwLCBsZWFmKTtcbiAgICAgICAgICAgICAgbGVhZi5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQubGluZXMgPSBjaGlsZC5saW5lcy5zbGljZSgwLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgYXQgLT0gc3o7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFdoZW4gYSBub2RlIGhhcyBncm93biwgY2hlY2sgd2hldGhlciBpdCBzaG91bGQgYmUgc3BsaXQuXG4gICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHsgcmV0dXJuIH1cbiAgICAgIHZhciBtZSA9IHRoaXM7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNlKG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpO1xuICAgICAgICB2YXIgc2libGluZyA9IG5ldyBCcmFuY2hDaHVuayhzcGlsbGVkKTtcbiAgICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21lIHRoZSBwYXJlbnQgbm9kZVxuICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1lLmNoaWxkcmVuKTtcbiAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lO1xuICAgICAgICAgIG1lLmNoaWxkcmVuID0gW2NvcHksIHNpYmxpbmddO1xuICAgICAgICAgIG1lID0gY29weTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lLnNpemUgLT0gc2libGluZy5zaXplO1xuICAgICAgICAgIG1lLmhlaWdodCAtPSBzaWJsaW5nLmhlaWdodDtcbiAgICAgICAgICB2YXIgbXlJbmRleCA9IGluZGV4T2YobWUucGFyZW50LmNoaWxkcmVuLCBtZSk7XG4gICAgICAgICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7XG4gICAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMClcbiAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7XG4gICAgfSxcblxuICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgICBpZiAoYXQgPCBzeikge1xuICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4obiwgc3ogLSBhdCk7XG4gICAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgICAgIGlmICgobiAtPSB1c2VkKSA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgICBhdCA9IDA7XG4gICAgICAgIH0gZWxzZSB7IGF0IC09IHN6OyB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIExpbmUgd2lkZ2V0cyBhcmUgYmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3ZlIG9yIGJlbG93IGEgbGluZS5cblxuICB2YXIgTGluZVdpZGdldCA9IGZ1bmN0aW9uKGRvYywgbm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7IGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSB7IGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgICB7IHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTsgfSB9IH1cbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICB9O1xuXG4gIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3cyA9IHRoaXMubGluZS53aWRnZXRzLCBsaW5lID0gdGhpcy5saW5lLCBubyA9IGxpbmVObyhsaW5lKTtcbiAgICBpZiAobm8gPT0gbnVsbCB8fCAhd3MpIHsgcmV0dXJuIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSB7IGlmICh3c1tpXSA9PSB0aGlzKSB7IHdzLnNwbGljZShpLS0sIDEpOyB9IH1cbiAgICBpZiAoIXdzLmxlbmd0aCkgeyBsaW5lLndpZGdldHMgPSBudWxsOyB9XG4gICAgdmFyIGhlaWdodCA9IHdpZGdldEhlaWdodCh0aGlzKTtcbiAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIE1hdGgubWF4KDAsIGxpbmUuaGVpZ2h0IC0gaGVpZ2h0KSk7XG4gICAgaWYgKGNtKSB7XG4gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIC1oZWlnaHQpO1xuICAgICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgXCJ3aWRnZXRcIik7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRDbGVhcmVkXCIsIGNtLCB0aGlzLCBubyk7XG4gICAgfVxuICB9O1xuXG4gIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBvbGRIID0gdGhpcy5oZWlnaHQsIGNtID0gdGhpcy5kb2MuY20sIGxpbmUgPSB0aGlzLmxpbmU7XG4gICAgdGhpcy5oZWlnaHQgPSBudWxsO1xuICAgIHZhciBkaWZmID0gd2lkZ2V0SGVpZ2h0KHRoaXMpIC0gb2xkSDtcbiAgICBpZiAoIWRpZmYpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWxpbmVJc0hpZGRlbih0aGlzLmRvYywgbGluZSkpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRpZmYpOyB9XG4gICAgaWYgKGNtKSB7XG4gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7XG4gICAgICAgIHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRDaGFuZ2VkXCIsIGNtLCB0aGlzJDEsIGxpbmVObyhsaW5lKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7XG5cbiAgZnVuY3Rpb24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikge1xuICAgIGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpXG4gICAgICB7IGFkZFRvU2Nyb2xsVG9wKGNtLCBkaWZmKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTGluZVdpZGdldChkb2MsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykge1xuICAgIHZhciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChkb2MsIG5vZGUsIG9wdGlvbnMpO1xuICAgIHZhciBjbSA9IGRvYy5jbTtcbiAgICBpZiAoY20gJiYgd2lkZ2V0Lm5vSFNjcm9sbCkgeyBjbS5kaXNwbGF5LmFsaWduV2lkZ2V0cyA9IHRydWU7IH1cbiAgICBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBcIndpZGdldFwiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTtcbiAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgeyB3aWRnZXRzLnB1c2god2lkZ2V0KTsgfVxuICAgICAgZWxzZSB7IHdpZGdldHMuc3BsaWNlKE1hdGgubWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdpZGdldCk7IH1cbiAgICAgIHdpZGdldC5saW5lID0gbGluZTtcbiAgICAgIGlmIChjbSAmJiAhbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHtcbiAgICAgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5lKSA8IGRvYy5zY3JvbGxUb3A7XG4gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7XG4gICAgICAgIGlmIChhYm92ZVZpc2libGUpIHsgYWRkVG9TY3JvbGxUb3AoY20sIHdpZGdldC5oZWlnaHQpOyB9XG4gICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKGNtKSB7IHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRBZGRlZFwiLCBjbSwgd2lkZ2V0LCB0eXBlb2YgaGFuZGxlID09IFwibnVtYmVyXCIgPyBoYW5kbGUgOiBsaW5lTm8oaGFuZGxlKSk7IH1cbiAgICByZXR1cm4gd2lkZ2V0XG4gIH1cblxuICAvLyBURVhUTUFSS0VSU1xuXG4gIC8vIENyZWF0ZWQgd2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9kcy4gQSBUZXh0TWFya2VyIGlzIGFcbiAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmdcbiAgLy8ge2Zyb20sIHRvLCBtYXJrZXJ9IG9iamVjdCBwb2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmRcbiAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRpcGxlXG4gIC8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFucyBhY3Jvc3MgbGluZXMuXG4gIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBmb3IgdGhlaXIgZnJvbS90byBwcm9wZXJ0aWVzIHdoZW4gdGhlXG4gIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZVxuICAvLyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC5cblxuICAvLyBDb2xsYXBzZWQgbWFya2VycyBoYXZlIHVuaXF1ZSBpZHMsIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gb3JkZXJcbiAgLy8gdGhlbSwgd2hpY2ggaXMgbmVlZGVkIGZvciB1bmlxdWVseSBkZXRlcm1pbmluZyBhbiBvdXRlciBtYXJrZXJcbiAgLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLlxuICB2YXIgbmV4dE1hcmtlcklkID0gMDtcblxuICB2YXIgVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkge1xuICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDtcbiAgfTtcblxuICAvLyBDbGVhciB0aGUgbWFya2VyLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgeyByZXR1cm4gfVxuICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3aXRoT3AgPSBjbSAmJiAhY20uY3VyT3A7XG4gICAgaWYgKHdpdGhPcCkgeyBzdGFydE9wZXJhdGlvbihjbSk7IH1cbiAgICBpZiAoaGFzSGFuZGxlcih0aGlzLCBcImNsZWFyXCIpKSB7XG4gICAgICB2YXIgZm91bmQgPSB0aGlzLmZpbmQoKTtcbiAgICAgIGlmIChmb3VuZCkgeyBzaWduYWxMYXRlcih0aGlzLCBcImNsZWFyXCIsIGZvdW5kLmZyb20sIGZvdW5kLnRvKTsgfVxuICAgIH1cbiAgICB2YXIgbWluID0gbnVsbCwgbWF4ID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzKTtcbiAgICAgIGlmIChjbSAmJiAhdGhpcy5jb2xsYXBzZWQpIHsgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vKGxpbmUpLCBcInRleHRcIik7IH1cbiAgICAgIGVsc2UgaWYgKGNtKSB7XG4gICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsgbWF4ID0gbGluZU5vKGxpbmUpOyB9XG4gICAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgeyBtaW4gPSBsaW5lTm8obGluZSk7IH1cbiAgICAgIH1cbiAgICAgIGxpbmUubWFya2VkU3BhbnMgPSByZW1vdmVNYXJrZWRTcGFuKGxpbmUubWFya2VkU3BhbnMsIHNwYW4pO1xuICAgICAgaWYgKHNwYW4uZnJvbSA9PSBudWxsICYmIHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpICYmIGNtKVxuICAgICAgICB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhlaWdodChjbS5kaXNwbGF5KSk7IH1cbiAgICB9XG4gICAgaWYgKGNtICYmIHRoaXMuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRoaXMubGluZXNbaSQxXSksIGxlbiA9IGxpbmVMZW5ndGgodmlzdWFsKTtcbiAgICAgIGlmIChsZW4gPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lID0gdmlzdWFsO1xuICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gfVxuXG4gICAgaWYgKG1pbiAhPSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSB7IHJlZ0NoYW5nZShjbSwgbWluLCBtYXggKyAxKTsgfVxuICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHtcbiAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7XG4gICAgICBpZiAoY20pIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gICAgfVxuICAgIGlmIChjbSkgeyBzaWduYWxMYXRlcihjbSwgXCJtYXJrZXJDbGVhcmVkXCIsIGNtLCB0aGlzLCBtaW4sIG1heCk7IH1cbiAgICBpZiAod2l0aE9wKSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICBpZiAodGhpcy5wYXJlbnQpIHsgdGhpcy5wYXJlbnQuY2xlYXIoKTsgfVxuICB9O1xuXG4gIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIgaW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20sXG4gIC8vIHRvfSBvYmplY3QgYnkgZGVmYXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBhIHNwZWNpZmljIHNpZGVcbiAgLy8gLS0gMCAoYm90aCksIC0xIChsZWZ0KSwgb3IgMSAocmlnaHQpLiBXaGVuIGxpbmVPYmogaXMgdHJ1ZSwgdGhlXG4gIC8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNvbnRhaW4gYSBsaW5lIG9iamVjdCwgcmF0aGVyIHRoYW4gYSBsaW5lXG4gIC8vIG51bWJlciAodXNlZCB0byBwcmV2ZW50IGxvb2tpbmcgdXAgdGhlIHNhbWUgbGluZSB0d2ljZSkuXG4gIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2lkZSwgbGluZU9iaikge1xuICAgIGlmIChzaWRlID09IG51bGwgJiYgdGhpcy50eXBlID09IFwiYm9va21hcmtcIikgeyBzaWRlID0gMTsgfVxuICAgIHZhciBmcm9tLCB0bztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzKTtcbiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkge1xuICAgICAgICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pO1xuICAgICAgICBpZiAoc2lkZSA9PSAtMSkgeyByZXR1cm4gZnJvbSB9XG4gICAgICB9XG4gICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7XG4gICAgICAgIHRvID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLnRvKTtcbiAgICAgICAgaWYgKHNpZGUgPT0gMSkgeyByZXR1cm4gdG8gfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJvbSAmJiB7ZnJvbTogZnJvbSwgdG86IHRvfVxuICB9O1xuXG4gIC8vIFNpZ25hbHMgdGhhdCB0aGUgbWFya2VyJ3Mgd2lkZ2V0IGNoYW5nZWQsIGFuZCBzdXJyb3VuZGluZyBsYXlvdXRcbiAgLy8gc2hvdWxkIGJlIHJlY29tcHV0ZWQuXG4gIFRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3aWRnZXQgPSB0aGlzLCBjbSA9IHRoaXMuZG9jLmNtO1xuICAgIGlmICghcG9zIHx8ICFjbSkgeyByZXR1cm4gfVxuICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBvcy5saW5lKTtcbiAgICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7XG4gICAgICBpZiAodmlldykge1xuICAgICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKHZpZXcpO1xuICAgICAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7XG4gICAgICBpZiAoIWxpbmVJc0hpZGRlbih3aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG9sZEhlaWdodCA9IHdpZGdldC5oZWlnaHQ7XG4gICAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxsO1xuICAgICAgICB2YXIgZEhlaWdodCA9IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0O1xuICAgICAgICBpZiAoZEhlaWdodClcbiAgICAgICAgICB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkSGVpZ2h0KTsgfVxuICAgICAgfVxuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQ2hhbmdlZFwiLCBjbSwgdGhpcyQxKTtcbiAgICB9KTtcbiAgfTtcblxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7XG4gICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDtcbiAgICAgIGlmICghb3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IGluZGV4T2Yob3AubWF5YmVIaWRkZW5NYXJrZXJzLCB0aGlzKSA9PSAtMSlcbiAgICAgICAgeyAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOyB9XG4gICAgfVxuICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgfTtcblxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5kZXRhY2hMaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICB0aGlzLmxpbmVzLnNwbGljZShpbmRleE9mKHRoaXMubGluZXMsIGxpbmUpLCAxKTtcbiAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7XG4gICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcFxuICAgICAgOyhvcC5tYXliZUhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlSGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTtcbiAgICB9XG4gIH07XG4gIGV2ZW50TWl4aW4oVGV4dE1hcmtlcik7XG5cbiAgLy8gQ3JlYXRlIGEgbWFya2VyLCB3aXJlIGl0IHVwIHRvIHRoZSByaWdodCBsaW5lcywgYW5kXG4gIGZ1bmN0aW9uIG1hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHtcbiAgICAvLyBTaGFyZWQgbWFya2VycyAoYWNyb3NzIGxpbmtlZCBkb2N1bWVudHMpIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcbiAgICAvLyAobWFya1RleHRTaGFyZWQgd2lsbCBjYWxsIG91dCB0byB0aGlzIGFnYWluLCBvbmNlIHBlclxuICAgIC8vIGRvY3VtZW50KS5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCkgeyByZXR1cm4gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgfVxuICAgIC8vIEVuc3VyZSB3ZSBhcmUgaW4gYW4gb3BlcmF0aW9uLlxuICAgIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFya1RleHQpKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cblxuICAgIHZhciBtYXJrZXIgPSBuZXcgVGV4dE1hcmtlcihkb2MsIHR5cGUpLCBkaWZmID0gY21wKGZyb20sIHRvKTtcbiAgICBpZiAob3B0aW9ucykgeyBjb3B5T2JqKG9wdGlvbnMsIG1hcmtlciwgZmFsc2UpOyB9XG4gICAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBtYXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZVxuICAgIGlmIChkaWZmID4gMCB8fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSlcbiAgICAgIHsgcmV0dXJuIG1hcmtlciB9XG4gICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHtcbiAgICAgIC8vIFNob3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0ZXh0KVxuICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICBtYXJrZXIud2lkZ2V0Tm9kZSA9IGVsdFAoXCJzcGFuXCIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgXCJDb2RlTWlycm9yLXdpZGdldFwiKTtcbiAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgeyBtYXJrZXIud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTsgfVxuICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0TGVmdCkgeyBtYXJrZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsgfVxuICAgIH1cbiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkge1xuICAgICAgaWYgKGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBmcm9tLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpIHx8XG4gICAgICAgICAgZnJvbS5saW5lICE9IHRvLmxpbmUgJiYgY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIHRvLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpKVxuICAgICAgICB7IHRocm93IG5ldyBFcnJvcihcIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIHBhcnRpYWxseSBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmVcIikgfVxuICAgICAgc2VlQ29sbGFwc2VkU3BhbnMoKTtcbiAgICB9XG5cbiAgICBpZiAobWFya2VyLmFkZFRvSGlzdG9yeSlcbiAgICAgIHsgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgb3JpZ2luOiBcIm1hcmtUZXh0XCJ9LCBkb2Muc2VsLCBOYU4pOyB9XG5cbiAgICB2YXIgY3VyTGluZSA9IGZyb20ubGluZSwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7XG4gICAgZG9jLml0ZXIoY3VyTGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAoY20gJiYgbWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGluZShsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpXG4gICAgICAgIHsgdXBkYXRlTWF4TGluZSA9IHRydWU7IH1cbiAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkICYmIGN1ckxpbmUgIT0gZnJvbS5saW5lKSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7IH1cbiAgICAgIGFkZE1hcmtlZFNwYW4obGluZSwgbmV3IE1hcmtlZFNwYW4obWFya2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IHRvLmxpbmUgPyB0by5jaCA6IG51bGwpKTtcbiAgICAgICsrY3VyTGluZTtcbiAgICB9KTtcbiAgICAvLyBsaW5lSXNIaWRkZW4gZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHNwYW5zLCBzbyBuZWVkcyBhIHNlY29uZCBwYXNzXG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gICAgfSk7IH1cblxuICAgIGlmIChtYXJrZXIuY2xlYXJPbkVudGVyKSB7IG9uKG1hcmtlciwgXCJiZWZvcmVDdXJzb3JFbnRlclwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXJrZXIuY2xlYXIoKTsgfSk7IH1cblxuICAgIGlmIChtYXJrZXIucmVhZE9ubHkpIHtcbiAgICAgIHNlZVJlYWRPbmx5U3BhbnMoKTtcbiAgICAgIGlmIChkb2MuaGlzdG9yeS5kb25lLmxlbmd0aCB8fCBkb2MuaGlzdG9yeS51bmRvbmUubGVuZ3RoKVxuICAgICAgICB7IGRvYy5jbGVhckhpc3RvcnkoKTsgfVxuICAgIH1cbiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkge1xuICAgICAgbWFya2VyLmlkID0gKytuZXh0TWFya2VySWQ7XG4gICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNtKSB7XG4gICAgICAvLyBTeW5jIGVkaXRvciBzdGF0ZVxuICAgICAgaWYgKHVwZGF0ZU1heExpbmUpIHsgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7IH1cbiAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKVxuICAgICAgICB7IHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSk7IH1cbiAgICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jc3MgfHxcbiAgICAgICAgICAgICAgIG1hcmtlci5hdHRyaWJ1dGVzIHx8IG1hcmtlci50aXRsZSlcbiAgICAgICAgeyBmb3IgKHZhciBpID0gZnJvbS5saW5lOyBpIDw9IHRvLmxpbmU7IGkrKykgeyByZWdMaW5lQ2hhbmdlKGNtLCBpLCBcInRleHRcIik7IH0gfVxuICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJtYXJrZXJBZGRlZFwiLCBjbSwgbWFya2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlclxuICB9XG5cbiAgLy8gU0hBUkVEIFRFWFRNQVJLRVJTXG5cbiAgLy8gQSBzaGFyZWQgbWFya2VyIHNwYW5zIG11bHRpcGxlIGxpbmtlZCBkb2N1bWVudHMuIEl0IGlzXG4gIC8vIGltcGxlbWVudGVkIGFzIGEgbWV0YS1tYXJrZXItb2JqZWN0IGNvbnRyb2xsaW5nIG11bHRpcGxlIG5vcm1hbFxuICAvLyBtYXJrZXJzLlxuICB2YXIgU2hhcmVkVGV4dE1hcmtlciA9IGZ1bmN0aW9uKG1hcmtlcnMsIHByaW1hcnkpIHtcbiAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzO1xuICAgIHRoaXMucHJpbWFyeSA9IHByaW1hcnk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKVxuICAgICAgeyBtYXJrZXJzW2ldLnBhcmVudCA9IHRoaXM7IH1cbiAgfTtcblxuICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgeyByZXR1cm4gfVxuICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXJrZXJzLmxlbmd0aDsgKytpKVxuICAgICAgeyB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsgfVxuICAgIHNpZ25hbExhdGVyKHRoaXMsIFwiY2xlYXJcIik7XG4gIH07XG5cbiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uIChzaWRlLCBsaW5lT2JqKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKHNpZGUsIGxpbmVPYmopXG4gIH07XG4gIGV2ZW50TWl4aW4oU2hhcmVkVGV4dE1hcmtlcik7XG5cbiAgZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkge1xuICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7XG4gICAgdmFyIG1hcmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSldLCBwcmltYXJ5ID0gbWFya2Vyc1swXTtcbiAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlO1xuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jKSB7XG4gICAgICBpZiAod2lkZ2V0KSB7IG9wdGlvbnMud2lkZ2V0Tm9kZSA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7IH1cbiAgICAgIG1hcmtlcnMucHVzaChtYXJrVGV4dChkb2MsIGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhkb2MsIHRvKSwgb3B0aW9ucywgdHlwZSkpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKVxuICAgICAgICB7IGlmIChkb2MubGlua2VkW2ldLmlzUGFyZW50KSB7IHJldHVybiB9IH1cbiAgICAgIHByaW1hcnkgPSBsc3QobWFya2Vycyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBTaGFyZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5kU2hhcmVkTWFya2Vycyhkb2MpIHtcbiAgICByZXR1cm4gZG9jLmZpbmRNYXJrcyhQb3MoZG9jLmZpcnN0LCAwKSwgZG9jLmNsaXBQb3MoUG9zKGRvYy5sYXN0TGluZSgpKSksIGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLnBhcmVudDsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2Vycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1hcmtlci5maW5kKCk7XG4gICAgICB2YXIgbUZyb20gPSBkb2MuY2xpcFBvcyhwb3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7XG4gICAgICBpZiAoY21wKG1Gcm9tLCBtVG8pKSB7XG4gICAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9jLCBtRnJvbSwgbVRvLCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7XG4gICAgICAgIG1hcmtlci5tYXJrZXJzLnB1c2goc3ViTWFyayk7XG4gICAgICAgIHN1Yk1hcmsucGFyZW50ID0gbWFya2VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFya2Vycykge1xuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIGxpbmtlZCA9IFttYXJrZXIucHJpbWFyeS5kb2NdO1xuICAgICAgbGlua2VkRG9jcyhtYXJrZXIucHJpbWFyeS5kb2MsIGZ1bmN0aW9uIChkKSB7IHJldHVybiBsaW5rZWQucHVzaChkKTsgfSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcmtlci5tYXJrZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBzdWJNYXJrZXIgPSBtYXJrZXIubWFya2Vyc1tqXTtcbiAgICAgICAgaWYgKGluZGV4T2YobGlua2VkLCBzdWJNYXJrZXIuZG9jKSA9PSAtMSkge1xuICAgICAgICAgIHN1Yk1hcmtlci5wYXJlbnQgPSBudWxsO1xuICAgICAgICAgIG1hcmtlci5tYXJrZXJzLnNwbGljZShqLS0sIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgbG9vcCggaSApO1xuICB9XG5cbiAgdmFyIG5leHREb2NJZCA9IDA7XG4gIHZhciBEb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEb2MpKSB7IHJldHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSwgbGluZVNlcCwgZGlyZWN0aW9uKSB9XG4gICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSB7IGZpcnN0TGluZSA9IDA7IH1cblxuICAgIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKFwiXCIsIG51bGwpXSldKTtcbiAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lO1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxMZWZ0ID0gMDtcbiAgICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxO1xuICAgIHRoaXMubW9kZUZyb250aWVyID0gdGhpcy5oaWdobGlnaHRGcm9udGllciA9IGZpcnN0TGluZTtcbiAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RMaW5lLCAwKTtcbiAgICB0aGlzLnNlbCA9IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7XG4gICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7XG4gICAgdGhpcy5pZCA9ICsrbmV4dERvY0lkO1xuICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7XG4gICAgdGhpcy5saW5lU2VwID0gbGluZVNlcDtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gXCJydGxcIikgPyBcInJ0bFwiIDogXCJsdHJcIjtcbiAgICB0aGlzLmV4dGVuZCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB0ZXh0ID09IFwic3RyaW5nXCIpIHsgdGV4dCA9IHRoaXMuc3BsaXRMaW5lcyh0ZXh0KTsgfVxuICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pO1xuICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7XG4gIH07XG5cbiAgRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3RvcjogRG9jLFxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZG9jdW1lbnQuIFN1cHBvcnRzIHR3byBmb3JtcyAtLSB3aXRoIG9ubHkgb25lXG4gICAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVhY2ggbGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGhcbiAgICAvLyB0aHJlZSwgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aFxuICAgIC8vIHRoZSBzZWNvbmQgYmVpbmcgbm9uLWluY2x1c2l2ZSkuXG4gICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7XG4gICAgICBpZiAob3ApIHsgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7IH1cbiAgICAgIGVsc2UgeyB0aGlzLml0ZXJOKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUsIGZyb20pOyB9XG4gICAgfSxcblxuICAgIC8vIE5vbi1wdWJsaWMgaW50ZXJmYWNlIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzLlxuICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsgfVxuICAgICAgdGhpcy5pbnNlcnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhpcy5maXJzdCwgbik7IH0sXG5cbiAgICAvLyBGcm9tIGhlcmUsIHRoZSBtZXRob2RzIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBNb3N0XG4gICAgLy8gYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuXG5cbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7XG4gICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH1cbiAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpXG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkge1xuICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxO1xuICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46IFwic2V0VmFsdWVcIiwgZnVsbDogdHJ1ZX0sIHRydWUpO1xuICAgICAgaWYgKHRoaXMuY20pIHsgc2Nyb2xsVG9Db29yZHModGhpcy5jbSwgMCwgMCk7IH1cbiAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24odG9wKSwgc2VsX2RvbnRTY3JvbGwpO1xuICAgIH0pLFxuICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8sIG9yaWdpbikge1xuICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7XG4gICAgICB0byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tO1xuICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pO1xuICAgIH0sXG4gICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7XG4gICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTtcbiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgeyByZXR1cm4gbGluZXMgfVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSlcbiAgICB9LFxuXG4gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHR9LFxuXG4gICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSkgfX0sXG4gICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24obGluZSkge3JldHVybiBsaW5lTm8obGluZSl9LFxuXG4gICAgZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlvbihsaW5lKSB7XG4gICAgICBpZiAodHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIikgeyBsaW5lID0gZ2V0TGluZSh0aGlzLCBsaW5lKTsgfVxuICAgICAgcmV0dXJuIHZpc3VhbExpbmUobGluZSlcbiAgICB9LFxuXG4gICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplfSxcbiAgICBmaXJzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0fSxcbiAgICBsYXN0TGluZTogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxfSxcblxuICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyl9LFxuXG4gICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkge1xuICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWwucHJpbWFyeSgpLCBwb3M7XG4gICAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PSBcImhlYWRcIikgeyBwb3MgPSByYW5nZS5oZWFkOyB9XG4gICAgICBlbHNlIGlmIChzdGFydCA9PSBcImFuY2hvclwiKSB7IHBvcyA9IHJhbmdlLmFuY2hvcjsgfVxuICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gXCJlbmRcIiB8fCBzdGFydCA9PSBcInRvXCIgfHwgc3RhcnQgPT09IGZhbHNlKSB7IHBvcyA9IHJhbmdlLnRvKCk7IH1cbiAgICAgIGVsc2UgeyBwb3MgPSByYW5nZS5mcm9tKCk7IH1cbiAgICAgIHJldHVybiBwb3NcbiAgICB9LFxuICAgIGxpc3RTZWxlY3Rpb25zOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsLnJhbmdlcyB9LFxuICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKX0sXG5cbiAgICBzZXRDdXJzb3I6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGNoLCBvcHRpb25zKSB7XG4gICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiID8gUG9zKGxpbmUsIGNoIHx8IDApIDogbGluZSksIG51bGwsIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIHNldFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihoZWFkLCBvdGhlciwgb3B0aW9ucykge1xuICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgaGVhZCksIG90aGVyICYmIGNsaXBQb3ModGhpcywgb3RoZXIpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBleHRlbmRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihoZWFkcywgb3B0aW9ucykge1xuICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBjbGlwUG9zQXJyYXkodGhpcywgaGVhZHMpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBleHRlbmRTZWxlY3Rpb25zQnk6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBoZWFkcyA9IG1hcCh0aGlzLnNlbC5yYW5nZXMsIGYpO1xuICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBjbGlwUG9zQXJyYXkodGhpcywgaGVhZHMpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBzZXRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihyYW5nZXMsIHByaW1hcnksIG9wdGlvbnMpIHtcbiAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByZXR1cm4gfVxuICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmFuY2hvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICAgIGlmIChwcmltYXJ5ID09IG51bGwpIHsgcHJpbWFyeSA9IE1hdGgubWluKHJhbmdlcy5sZW5ndGggLSAxLCB0aGlzLnNlbC5wcmltSW5kZXgpOyB9XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKHRoaXMuY20sIG91dCwgcHJpbWFyeSksIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTtcbiAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24odGhpcy5jbSwgcmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9wdGlvbnMpO1xuICAgIH0pLFxuXG4gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTtcbiAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsO1xuICAgICAgfVxuICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgICBlbHNlIHsgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSkgfVxuICAgIH0sXG4gICAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTtcbiAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSB7IHNlbCA9IHNlbC5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOyB9XG4gICAgICAgIHBhcnRzW2ldID0gc2VsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnRzXG4gICAgfSxcbiAgICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgICB2YXIgZHVwID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBkdXBbaV0gPSBjb2RlOyB9XG4gICAgICB0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKGR1cCwgY29sbGFwc2UsIG9yaWdpbiB8fCBcIitpbnB1dFwiKTtcbiAgICB9LFxuICAgIHJlcGxhY2VTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59O1xuICAgICAgfVxuICAgICAgdmFyIG5ld1NlbCA9IGNvbGxhcHNlICYmIGNvbGxhcHNlICE9IFwiZW5kXCIgJiYgY29tcHV0ZVJlcGxhY2VkU2VsKHRoaXMsIGNoYW5nZXMsIGNvbGxhcHNlKTtcbiAgICAgIGZvciAodmFyIGkkMSA9IGNoYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IGkkMS0tKVxuICAgICAgICB7IG1ha2VDaGFuZ2UodGhpcywgY2hhbmdlc1tpJDFdKTsgfVxuICAgICAgaWYgKG5ld1NlbCkgeyBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSh0aGlzLCBuZXdTZWwpOyB9XG4gICAgICBlbHNlIGlmICh0aGlzLmNtKSB7IGVuc3VyZUN1cnNvclZpc2libGUodGhpcy5jbSk7IH1cbiAgICB9KSxcbiAgICB1bmRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJ1bmRvXCIpO30pLFxuICAgIHJlZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCBcInJlZG9cIik7fSksXG4gICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwidW5kb1wiLCB0cnVlKTt9KSxcbiAgICByZWRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIsIHRydWUpO30pLFxuXG4gICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLmV4dGVuZCA9IHZhbDt9LFxuICAgIGdldEV4dGVuZGluZzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZXh0ZW5kfSxcblxuICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5LCBkb25lID0gMCwgdW5kb25lID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC5kb25lLmxlbmd0aDsgaSsrKSB7IGlmICghaGlzdC5kb25lW2ldLnJhbmdlcykgeyArK2RvbmU7IH0gfVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpJDErKykgeyBpZiAoIWhpc3QudW5kb25lW2kkMV0ucmFuZ2VzKSB7ICsrdW5kb25lOyB9IH1cbiAgICAgIHJldHVybiB7dW5kbzogZG9uZSwgcmVkbzogdW5kb25lfVxuICAgIH0sXG4gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7XG4gICAgICBsaW5rZWREb2NzKHRoaXMsIGZ1bmN0aW9uIChkb2MpIHsgcmV0dXJuIGRvYy5oaXN0b3J5ID0gdGhpcyQxLmhpc3Rvcnk7IH0sIHRydWUpO1xuICAgIH0sXG5cbiAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRpb24odHJ1ZSk7XG4gICAgfSxcbiAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7XG4gICAgICBpZiAoZm9yY2VTcGxpdClcbiAgICAgICAgeyB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RTZWxPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsgfVxuICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uXG4gICAgfSxcbiAgICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0gKGdlbiB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbilcbiAgICB9LFxuXG4gICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLFxuICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9XG4gICAgfSxcbiAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkge1xuICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7XG4gICAgICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpO1xuICAgICAgaGlzdC51bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIHNldEd1dHRlck1hcmtlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24obGluZSwgZ3V0dGVySUQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5lLCBcImd1dHRlclwiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2VycyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pO1xuICAgICAgICBtYXJrZXJzW2d1dHRlcklEXSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFya2VycykpIHsgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICB9KSxcblxuICAgIGNsZWFyR3V0dGVyOiBkb2NNZXRob2RPcChmdW5jdGlvbihndXR0ZXJJRCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICBpZiAobGluZS5ndXR0ZXJNYXJrZXJzICYmIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0pIHtcbiAgICAgICAgICBjaGFuZ2VMaW5lKHRoaXMkMSwgbGluZSwgXCJndXR0ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShsaW5lLmd1dHRlck1hcmtlcnMpKSB7IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7IH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLFxuXG4gICAgbGluZUluZm86IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBuO1xuICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKCFpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBuID0gbGluZTtcbiAgICAgICAgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7XG4gICAgICAgIGlmICghbGluZSkgeyByZXR1cm4gbnVsbCB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuID0gbGluZU5vKGxpbmUpO1xuICAgICAgICBpZiAobiA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIGd1dHRlck1hcmtlcnM6IGxpbmUuZ3V0dGVyTWFya2VycyxcbiAgICAgICAgICAgICAgdGV4dENsYXNzOiBsaW5lLnRleHRDbGFzcywgYmdDbGFzczogbGluZS5iZ0NsYXNzLCB3cmFwQ2xhc3M6IGxpbmUud3JhcENsYXNzLFxuICAgICAgICAgICAgICB3aWRnZXRzOiBsaW5lLndpZGdldHN9XG4gICAgfSxcblxuICAgIGFkZExpbmVDbGFzczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7XG4gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlclwiIDogXCJjbGFzc1wiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09IFwidGV4dFwiID8gXCJ0ZXh0Q2xhc3NcIlxuICAgICAgICAgICAgICAgICA6IHdoZXJlID09IFwiYmFja2dyb3VuZFwiID8gXCJiZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJDbGFzc1wiIDogXCJ3cmFwQ2xhc3NcIjtcbiAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSB7IGxpbmVbcHJvcF0gPSBjbHM7IH1cbiAgICAgICAgZWxzZSBpZiAoY2xhc3NUZXN0KGNscykudGVzdChsaW5lW3Byb3BdKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICBlbHNlIHsgbGluZVtwcm9wXSArPSBcIiBcIiArIGNsczsgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICB9KSxcbiAgICByZW1vdmVMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJcIiA6IFwiY2xhc3NcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSBcInRleHRcIiA/IFwidGV4dENsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyQ2xhc3NcIiA6IFwid3JhcENsYXNzXCI7XG4gICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdO1xuICAgICAgICBpZiAoIWN1cikgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgeyBsaW5lW3Byb3BdID0gbnVsbDsgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpO1xuICAgICAgICAgIGlmICghZm91bmQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBmb3VuZFswXS5sZW5ndGg7XG4gICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gXCJcIiA6IFwiIFwiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG5cbiAgICBhZGRMaW5lV2lkZ2V0OiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucylcbiAgICB9KSxcbiAgICByZW1vdmVMaW5lV2lkZ2V0OiBmdW5jdGlvbih3aWRnZXQpIHsgd2lkZ2V0LmNsZWFyKCk7IH0sXG5cbiAgICBtYXJrVGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSwgb3B0aW9ucywgb3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgfHwgXCJyYW5nZVwiKVxuICAgIH0sXG4gICAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKHBvcywgb3B0aW9ucykge1xuICAgICAgdmFyIHJlYWxPcHRzID0ge3JlcGxhY2VkV2l0aDogb3B0aW9ucyAmJiAob3B0aW9ucy5ub2RlVHlwZSA9PSBudWxsID8gb3B0aW9ucy53aWRnZXQgOiBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0TGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJlZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVNb3VzZUV2ZW50czogb3B0aW9ucyAmJiBvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzfTtcbiAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTtcbiAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsIFwiYm9va21hcmtcIilcbiAgICB9LFxuICAgIGZpbmRNYXJrc0F0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTtcbiAgICAgIHZhciBtYXJrZXJzID0gW10sIHNwYW5zID0gZ2V0TGluZSh0aGlzLCBwb3MubGluZSkubWFya2VkU3BhbnM7XG4gICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICBpZiAoKHNwYW4uZnJvbSA9PSBudWxsIHx8IHNwYW4uZnJvbSA8PSBwb3MuY2gpICYmXG4gICAgICAgICAgICAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4udG8gPj0gcG9zLmNoKSlcbiAgICAgICAgICB7IG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOyB9XG4gICAgICB9IH1cbiAgICAgIHJldHVybiBtYXJrZXJzXG4gICAgfSxcbiAgICBmaW5kTWFya3M6IGZ1bmN0aW9uKGZyb20sIHRvLCBmaWx0ZXIpIHtcbiAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pOyB0byA9IGNsaXBQb3ModGhpcywgdG8pO1xuICAgICAgdmFyIGZvdW5kID0gW10sIGxpbmVObyA9IGZyb20ubGluZTtcbiAgICAgIHRoaXMuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zO1xuICAgICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07XG4gICAgICAgICAgaWYgKCEoc3Bhbi50byAhPSBudWxsICYmIGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJvbS5jaCA+PSBzcGFuLnRvIHx8XG4gICAgICAgICAgICAgICAgc3Bhbi5mcm9tID09IG51bGwgJiYgbGluZU5vICE9IGZyb20ubGluZSB8fFxuICAgICAgICAgICAgICAgIHNwYW4uZnJvbSAhPSBudWxsICYmIGxpbmVObyA9PSB0by5saW5lICYmIHNwYW4uZnJvbSA+PSB0by5jaCkgJiZcbiAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNwYW4ubWFya2VyKSkpXG4gICAgICAgICAgICB7IGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsgfVxuICAgICAgICB9IH1cbiAgICAgICAgKytsaW5lTm87XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmb3VuZFxuICAgIH0sXG4gICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG1hcmtlcnMgPSBbXTtcbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3BzID0gbGluZS5tYXJrZWRTcGFucztcbiAgICAgICAgaWYgKHNwcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICB7IGlmIChzcHNbaV0uZnJvbSAhPSBudWxsKSB7IG1hcmtlcnMucHVzaChzcHNbaV0ubWFya2VyKTsgfSB9IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hcmtlcnNcbiAgICB9LFxuXG4gICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHtcbiAgICAgIHZhciBjaCwgbGluZU5vID0gdGhpcy5maXJzdCwgc2VwU2l6ZSA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgc2VwU2l6ZTtcbiAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZSB9XG4gICAgICAgIG9mZiAtPSBzejtcbiAgICAgICAgKytsaW5lTm87XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lTm8sIGNoKSlcbiAgICB9LFxuICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgY29vcmRzID0gY2xpcFBvcyh0aGlzLCBjb29yZHMpO1xuICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoO1xuICAgICAgaWYgKGNvb3Jkcy5saW5lIDwgdGhpcy5maXJzdCB8fCBjb29yZHMuY2ggPCAwKSB7IHJldHVybiAwIH1cbiAgICAgIHZhciBzZXBTaXplID0gdGhpcy5saW5lU2VwYXJhdG9yKCkubGVuZ3RoO1xuICAgICAgdGhpcy5pdGVyKHRoaXMuZmlyc3QsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgeyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgYSB0cnV0aHkgdmFsdWVcbiAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIHNlcFNpemU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleFxuICAgIH0sXG5cbiAgICBjb3B5OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkge1xuICAgICAgdmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmlyc3QsIHRoaXMubGluZVNlcCwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgZG9jLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDtcbiAgICAgIGRvYy5zZWwgPSB0aGlzLnNlbDtcbiAgICAgIGRvYy5leHRlbmQgPSBmYWxzZTtcbiAgICAgIGlmIChjb3B5SGlzdG9yeSkge1xuICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoO1xuICAgICAgICBkb2Muc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9jXG4gICAgfSxcblxuICAgIGxpbmtlZERvYzogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgdmFyIGZyb20gPSB0aGlzLmZpcnN0LCB0byA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemU7XG4gICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5mcm9tID4gZnJvbSkgeyBmcm9tID0gb3B0aW9ucy5mcm9tOyB9XG4gICAgICBpZiAob3B0aW9ucy50byAhPSBudWxsICYmIG9wdGlvbnMudG8gPCB0bykgeyB0byA9IG9wdGlvbnMudG87IH1cbiAgICAgIHZhciBjb3B5ID0gbmV3IERvYyhnZXRMaW5lcyh0aGlzLCBmcm9tLCB0byksIG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGVPcHRpb24sIGZyb20sIHRoaXMubGluZVNlcCwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgeyBjb3B5Lmhpc3RvcnkgPSB0aGlzLmhpc3RvcnlcbiAgICAgIDsgfSh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5rZWQgPSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fSk7XG4gICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07XG4gICAgICBjb3B5U2hhcmVkTWFya2Vycyhjb3B5LCBmaW5kU2hhcmVkTWFya2Vycyh0aGlzKSk7XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG4gICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQ29kZU1pcnJvcikgeyBvdGhlciA9IG90aGVyLmRvYzsgfVxuICAgICAgaWYgKHRoaXMubGlua2VkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5rZWQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmxpbmtlZFtpXTtcbiAgICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVyKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICBvdGhlci51bmxpbmtEb2ModGhpcyk7XG4gICAgICAgIGRldGFjaFNoYXJlZE1hcmtlcnMoZmluZFNoYXJlZE1hcmtlcnModGhpcykpO1xuICAgICAgICBicmVha1xuICAgICAgfSB9XG4gICAgICAvLyBJZiB0aGUgaGlzdG9yaWVzIHdlcmUgc2hhcmVkLCBzcGxpdCB0aGVtIGFnYWluXG4gICAgICBpZiAob3RoZXIuaGlzdG9yeSA9PSB0aGlzLmhpc3RvcnkpIHtcbiAgICAgICAgdmFyIHNwbGl0SWRzID0gW290aGVyLmlkXTtcbiAgICAgICAgbGlua2VkRG9jcyhvdGhlciwgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gc3BsaXRJZHMucHVzaChkb2MuaWQpOyB9LCB0cnVlKTtcbiAgICAgICAgb3RoZXIuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpO1xuICAgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcyk7XG4gICAgICAgIG90aGVyLmhpc3RvcnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSxcblxuICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLm1vZGV9LFxuICAgIGdldEVkaXRvcjogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuY219LFxuXG4gICAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICBpZiAodGhpcy5saW5lU2VwKSB7IHJldHVybiBzdHIuc3BsaXQodGhpcy5saW5lU2VwKSB9XG4gICAgICByZXR1cm4gc3BsaXRMaW5lc0F1dG8oc3RyKVxuICAgIH0sXG4gICAgbGluZVNlcGFyYXRvcjogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVTZXAgfHwgXCJcXG5cIiB9LFxuXG4gICAgc2V0RGlyZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbiAoZGlyKSB7XG4gICAgICBpZiAoZGlyICE9IFwicnRsXCIpIHsgZGlyID0gXCJsdHJcIjsgfVxuICAgICAgaWYgKGRpciA9PSB0aGlzLmRpcmVjdGlvbikgeyByZXR1cm4gfVxuICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXI7XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHsgcmV0dXJuIGxpbmUub3JkZXIgPSBudWxsOyB9KTtcbiAgICAgIGlmICh0aGlzLmNtKSB7IGRpcmVjdGlvbkNoYW5nZWQodGhpcy5jbSk7IH1cbiAgICB9KVxuICB9KTtcblxuICAvLyBQdWJsaWMgYWxpYXMuXG4gIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJvdG90eXBlLml0ZXI7XG5cbiAgLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzXG4gIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2YgZHJhZy1yZWxhdGVkIGV2ZW50cyByaWdodCBhZnRlciB0aGUgZHJvcCAoIzE1NTEpXG4gIHZhciBsYXN0RHJvcCA9IDA7XG5cbiAgZnVuY3Rpb24gb25Ecm9wKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzO1xuICAgIGNsZWFyRHJhZ0N1cnNvcihjbSk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKVxuICAgICAgeyByZXR1cm4gfVxuICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgaWYgKGllKSB7IGxhc3REcm9wID0gK25ldyBEYXRlOyB9XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSksIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7XG4gICAgaWYgKCFwb3MgfHwgY20uaXNSZWFkT25seSgpKSB7IHJldHVybiB9XG4gICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHRcbiAgICAvLyBhbmQgaW5zZXJ0IGl0LlxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHtcbiAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwO1xuICAgICAgdmFyIG1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoKytyZWFkID09IG4pIHtcbiAgICAgICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNtLmRvYy5zcGxpdExpbmVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgIT0gbnVsbDsgfSkuam9pbihjbS5kb2MubGluZVNlcGFyYXRvcigpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJwYXN0ZVwifTtcbiAgICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2UpO1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oY2xpcFBvcyhjbS5kb2MsIHBvcyksIGNsaXBQb3MoY20uZG9jLCBjaGFuZ2VFbmQoY2hhbmdlKSkpKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIHJlYWRUZXh0RnJvbUZpbGUgPSBmdW5jdGlvbiAoZmlsZSwgaSkge1xuICAgICAgICBpZiAoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMgJiZcbiAgICAgICAgICAgIGluZGV4T2YoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsIGZpbGUudHlwZSkgPT0gLTEpIHtcbiAgICAgICAgICBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpOyB9O1xuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBjb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICBpZiAoL1tcXHgwMC1cXHgwOFxceDBlLVxceDFmXXsyfS8udGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0W2ldID0gY29udGVudDtcbiAgICAgICAgICBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7IHJlYWRUZXh0RnJvbUZpbGUoZmlsZXNbaV0sIGkpOyB9XG4gICAgfSBlbHNlIHsgLy8gTm9ybWFsIGRyb3BcbiAgICAgIC8vIERvbid0IGRvIGEgcmVwbGFjZSBpZiB0aGUgZHJvcCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuXG4gICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA+IC0xKSB7XG4gICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dChlKTtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNlZFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMjApO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0ZXh0JDEgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICAgICAgaWYgKHRleHQkMSkge1xuICAgICAgICAgIHZhciBzZWxlY3RlZDtcbiAgICAgICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmICFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQuY29weSlcbiAgICAgICAgICAgIHsgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOyB9XG4gICAgICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcywgcG9zKSk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkKSB7IGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNlbGVjdGVkLmxlbmd0aDsgKytpJDEpXG4gICAgICAgICAgICB7IHJlcGxhY2VSYW5nZShjbS5kb2MsIFwiXCIsIHNlbGVjdGVkW2kkMV0uYW5jaG9yLCBzZWxlY3RlZFtpJDFdLmhlYWQsIFwiZHJhZ1wiKTsgfSB9XG4gICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0JDEsIFwiYXJvdW5kXCIsIFwicGFzdGVcIik7XG4gICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXRjaChlKXt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25EcmFnU3RhcnQoY20sIGUpIHtcbiAgICBpZiAoaWUgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERyb3AgPCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuIH1cbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHsgcmV0dXJuIH1cblxuICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoXCJUZXh0XCIsIGNtLmdldFNlbGVjdGlvbigpKTtcbiAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gXCJjb3B5TW92ZVwiO1xuXG4gICAgLy8gVXNlIGR1bW15IGltYWdlIGluc3RlYWQgb2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS5cbiAgICAvLyBSZWNlbnQgU2FmYXJpICh+Ni4wLjIpIGhhdmUgYSB0ZW5kZW5jeSB0byBzZWdmYXVsdCB3aGVuIHRoaXMgaGFwcGVucywgc28gd2UgZG9uJ3QgZG8gaXQgdGhlcmUuXG4gICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7XG4gICAgICB2YXIgaW1nID0gZWx0KFwiaW1nXCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7XCIpO1xuICAgICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT1cIjtcbiAgICAgIGlmIChwcmVzdG8pIHtcbiAgICAgICAgaW1nLndpZHRoID0gaW1nLmhlaWdodCA9IDE7XG4gICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xuICAgICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVhc29uXG4gICAgICAgIGltZy5fdG9wID0gaW1nLm9mZnNldFRvcDtcbiAgICAgIH1cbiAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgaWYgKHByZXN0bykgeyBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25EcmFnT3ZlcihjbSwgZSkge1xuICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpO1xuICAgIGlmICghcG9zKSB7IHJldHVybiB9XG4gICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcG9zLCBmcmFnKTtcbiAgICBpZiAoIWNtLmRpc3BsYXkuZHJhZ0N1cnNvcikge1xuICAgICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1jdXJzb3JzIENvZGVNaXJyb3ItZHJhZ2N1cnNvcnNcIik7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoY20uZGlzcGxheS5kcmFnQ3Vyc29yLCBjbS5kaXNwbGF5LmN1cnNvckRpdik7XG4gICAgfVxuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgZnJhZyk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckRyYWdDdXJzb3IoY20pIHtcbiAgICBpZiAoY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IpO1xuICAgICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgY2FyZWZ1bGx5LCBiZWNhdXNlIG5haXZlbHkgcmVnaXN0ZXJpbmcgYVxuICAvLyBoYW5kbGVyIGZvciBlYWNoIGVkaXRvciB3aWxsIGNhdXNlIHRoZSBlZGl0b3JzIHRvIG5ldmVyIGJlXG4gIC8vIGdhcmJhZ2UgY29sbGVjdGVkLlxuXG4gIGZ1bmN0aW9uIGZvckVhY2hDb2RlTWlycm9yKGYpIHtcbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpIHsgcmV0dXJuIH1cbiAgICB2YXIgYnlDbGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJDb2RlTWlycm9yXCIpLCBlZGl0b3JzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieUNsYXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY20gPSBieUNsYXNzW2ldLkNvZGVNaXJyb3I7XG4gICAgICBpZiAoY20pIHsgZWRpdG9ycy5wdXNoKGNtKTsgfVxuICAgIH1cbiAgICBpZiAoZWRpdG9ycy5sZW5ndGgpIHsgZWRpdG9yc1swXS5vcGVyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGl0b3JzLmxlbmd0aDsgaSsrKSB7IGYoZWRpdG9yc1tpXSk7IH1cbiAgICB9KTsgfVxuICB9XG5cbiAgdmFyIGdsb2JhbHNSZWdpc3RlcmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGVuc3VyZUdsb2JhbEhhbmRsZXJzKCkge1xuICAgIGlmIChnbG9iYWxzUmVnaXN0ZXJlZCkgeyByZXR1cm4gfVxuICAgIHJlZ2lzdGVyR2xvYmFsSGFuZGxlcnMoKTtcbiAgICBnbG9iYWxzUmVnaXN0ZXJlZCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXJHbG9iYWxIYW5kbGVycygpIHtcbiAgICAvLyBXaGVuIHRoZSB3aW5kb3cgcmVzaXplcywgd2UgbmVlZCB0byByZWZyZXNoIGFjdGl2ZSBlZGl0b3JzLlxuICAgIHZhciByZXNpemVUaW1lcjtcbiAgICBvbih3aW5kb3csIFwicmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChyZXNpemVUaW1lciA9PSBudWxsKSB7IHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc2l6ZVRpbWVyID0gbnVsbDtcbiAgICAgICAgZm9yRWFjaENvZGVNaXJyb3Iob25SZXNpemUpO1xuICAgICAgfSwgMTAwKTsgfVxuICAgIH0pO1xuICAgIC8vIFdoZW4gdGhlIHdpbmRvdyBsb3NlcyBmb2N1cywgd2Ugd2FudCB0byBzaG93IHRoZSBlZGl0b3IgYXMgYmx1cnJlZFxuICAgIG9uKHdpbmRvdywgXCJibHVyXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvckVhY2hDb2RlTWlycm9yKG9uQmx1cik7IH0pO1xuICB9XG4gIC8vIENhbGxlZCB3aGVuIHRoZSB3aW5kb3cgcmVzaXplc1xuICBmdW5jdGlvbiBvblJlc2l6ZShjbSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheTtcbiAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLlxuICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7XG4gICAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlO1xuICAgIGNtLnNldFNpemUoKTtcbiAgfVxuXG4gIHZhciBrZXlOYW1lcyA9IHtcbiAgICAzOiBcIlBhdXNlXCIsIDg6IFwiQmFja3NwYWNlXCIsIDk6IFwiVGFiXCIsIDEzOiBcIkVudGVyXCIsIDE2OiBcIlNoaWZ0XCIsIDE3OiBcIkN0cmxcIiwgMTg6IFwiQWx0XCIsXG4gICAgMTk6IFwiUGF1c2VcIiwgMjA6IFwiQ2Fwc0xvY2tcIiwgMjc6IFwiRXNjXCIsIDMyOiBcIlNwYWNlXCIsIDMzOiBcIlBhZ2VVcFwiLCAzNDogXCJQYWdlRG93blwiLCAzNTogXCJFbmRcIixcbiAgICAzNjogXCJIb21lXCIsIDM3OiBcIkxlZnRcIiwgMzg6IFwiVXBcIiwgMzk6IFwiUmlnaHRcIiwgNDA6IFwiRG93blwiLCA0NDogXCJQcmludFNjcm5cIiwgNDU6IFwiSW5zZXJ0XCIsXG4gICAgNDY6IFwiRGVsZXRlXCIsIDU5OiBcIjtcIiwgNjE6IFwiPVwiLCA5MTogXCJNb2RcIiwgOTI6IFwiTW9kXCIsIDkzOiBcIk1vZFwiLFxuICAgIDEwNjogXCIqXCIsIDEwNzogXCI9XCIsIDEwOTogXCItXCIsIDExMDogXCIuXCIsIDExMTogXCIvXCIsIDE0NTogXCJTY3JvbGxMb2NrXCIsXG4gICAgMTczOiBcIi1cIiwgMTg2OiBcIjtcIiwgMTg3OiBcIj1cIiwgMTg4OiBcIixcIiwgMTg5OiBcIi1cIiwgMTkwOiBcIi5cIiwgMTkxOiBcIi9cIiwgMTkyOiBcImBcIiwgMjE5OiBcIltcIiwgMjIwOiBcIlxcXFxcIixcbiAgICAyMjE6IFwiXVwiLCAyMjI6IFwiJ1wiLCA2MzIzMjogXCJVcFwiLCA2MzIzMzogXCJEb3duXCIsIDYzMjM0OiBcIkxlZnRcIiwgNjMyMzU6IFwiUmlnaHRcIiwgNjMyNzI6IFwiRGVsZXRlXCIsXG4gICAgNjMyNzM6IFwiSG9tZVwiLCA2MzI3NTogXCJFbmRcIiwgNjMyNzY6IFwiUGFnZVVwXCIsIDYzMjc3OiBcIlBhZ2VEb3duXCIsIDYzMzAyOiBcIkluc2VydFwiXG4gIH07XG5cbiAgLy8gTnVtYmVyIGtleXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7IGtleU5hbWVzW2kgKyA0OF0gPSBrZXlOYW1lc1tpICsgOTZdID0gU3RyaW5nKGkpOyB9XG4gIC8vIEFscGhhYmV0aWMga2V5c1xuICBmb3IgKHZhciBpJDEgPSA2NTsgaSQxIDw9IDkwOyBpJDErKykgeyBrZXlOYW1lc1tpJDFdID0gU3RyaW5nLmZyb21DaGFyQ29kZShpJDEpOyB9XG4gIC8vIEZ1bmN0aW9uIGtleXNcbiAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDw9IDEyOyBpJDIrKykgeyBrZXlOYW1lc1tpJDIgKyAxMTFdID0ga2V5TmFtZXNbaSQyICsgNjMyMzVdID0gXCJGXCIgKyBpJDI7IH1cblxuICB2YXIga2V5TWFwID0ge307XG5cbiAga2V5TWFwLmJhc2ljID0ge1xuICAgIFwiTGVmdFwiOiBcImdvQ2hhckxlZnRcIiwgXCJSaWdodFwiOiBcImdvQ2hhclJpZ2h0XCIsIFwiVXBcIjogXCJnb0xpbmVVcFwiLCBcIkRvd25cIjogXCJnb0xpbmVEb3duXCIsXG4gICAgXCJFbmRcIjogXCJnb0xpbmVFbmRcIiwgXCJIb21lXCI6IFwiZ29MaW5lU3RhcnRTbWFydFwiLCBcIlBhZ2VVcFwiOiBcImdvUGFnZVVwXCIsIFwiUGFnZURvd25cIjogXCJnb1BhZ2VEb3duXCIsXG4gICAgXCJEZWxldGVcIjogXCJkZWxDaGFyQWZ0ZXJcIiwgXCJCYWNrc3BhY2VcIjogXCJkZWxDaGFyQmVmb3JlXCIsIFwiU2hpZnQtQmFja3NwYWNlXCI6IFwiZGVsQ2hhckJlZm9yZVwiLFxuICAgIFwiVGFiXCI6IFwiZGVmYXVsdFRhYlwiLCBcIlNoaWZ0LVRhYlwiOiBcImluZGVudEF1dG9cIixcbiAgICBcIkVudGVyXCI6IFwibmV3bGluZUFuZEluZGVudFwiLCBcIkluc2VydFwiOiBcInRvZ2dsZU92ZXJ3cml0ZVwiLFxuICAgIFwiRXNjXCI6IFwic2luZ2xlU2VsZWN0aW9uXCJcbiAgfTtcbiAgLy8gTm90ZSB0aGF0IHRoZSBzYXZlIGFuZCBmaW5kLXJlbGF0ZWQgY29tbWFuZHMgYXJlbid0IGRlZmluZWQgYnlcbiAgLy8gZGVmYXVsdC4gVXNlciBjb2RlIG9yIGFkZG9ucyBjYW4gZGVmaW5lIHRoZW0uIFVua25vd24gY29tbWFuZHNcbiAgLy8gYXJlIHNpbXBseSBpZ25vcmVkLlxuICBrZXlNYXAucGNEZWZhdWx0ID0ge1xuICAgIFwiQ3RybC1BXCI6IFwic2VsZWN0QWxsXCIsIFwiQ3RybC1EXCI6IFwiZGVsZXRlTGluZVwiLCBcIkN0cmwtWlwiOiBcInVuZG9cIiwgXCJTaGlmdC1DdHJsLVpcIjogXCJyZWRvXCIsIFwiQ3RybC1ZXCI6IFwicmVkb1wiLFxuICAgIFwiQ3RybC1Ib21lXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkN0cmwtRW5kXCI6IFwiZ29Eb2NFbmRcIiwgXCJDdHJsLVVwXCI6IFwiZ29MaW5lVXBcIiwgXCJDdHJsLURvd25cIjogXCJnb0xpbmVEb3duXCIsXG4gICAgXCJDdHJsLUxlZnRcIjogXCJnb0dyb3VwTGVmdFwiLCBcIkN0cmwtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIiwgXCJBbHQtTGVmdFwiOiBcImdvTGluZVN0YXJ0XCIsIFwiQWx0LVJpZ2h0XCI6IFwiZ29MaW5lRW5kXCIsXG4gICAgXCJDdHJsLUJhY2tzcGFjZVwiOiBcImRlbEdyb3VwQmVmb3JlXCIsIFwiQ3RybC1EZWxldGVcIjogXCJkZWxHcm91cEFmdGVyXCIsIFwiQ3RybC1TXCI6IFwic2F2ZVwiLCBcIkN0cmwtRlwiOiBcImZpbmRcIixcbiAgICBcIkN0cmwtR1wiOiBcImZpbmROZXh0XCIsIFwiU2hpZnQtQ3RybC1HXCI6IFwiZmluZFByZXZcIiwgXCJTaGlmdC1DdHJsLUZcIjogXCJyZXBsYWNlXCIsIFwiU2hpZnQtQ3RybC1SXCI6IFwicmVwbGFjZUFsbFwiLFxuICAgIFwiQ3RybC1bXCI6IFwiaW5kZW50TGVzc1wiLCBcIkN0cmwtXVwiOiBcImluZGVudE1vcmVcIixcbiAgICBcIkN0cmwtVVwiOiBcInVuZG9TZWxlY3Rpb25cIiwgXCJTaGlmdC1DdHJsLVVcIjogXCJyZWRvU2VsZWN0aW9uXCIsIFwiQWx0LVVcIjogXCJyZWRvU2VsZWN0aW9uXCIsXG4gICAgXCJmYWxsdGhyb3VnaFwiOiBcImJhc2ljXCJcbiAgfTtcbiAgLy8gVmVyeSBiYXNpYyByZWFkbGluZS9lbWFjcy1zdHlsZSBiaW5kaW5ncywgd2hpY2ggYXJlIHN0YW5kYXJkIG9uIE1hYy5cbiAga2V5TWFwLmVtYWNzeSA9IHtcbiAgICBcIkN0cmwtRlwiOiBcImdvQ2hhclJpZ2h0XCIsIFwiQ3RybC1CXCI6IFwiZ29DaGFyTGVmdFwiLCBcIkN0cmwtUFwiOiBcImdvTGluZVVwXCIsIFwiQ3RybC1OXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiQWx0LUZcIjogXCJnb1dvcmRSaWdodFwiLCBcIkFsdC1CXCI6IFwiZ29Xb3JkTGVmdFwiLCBcIkN0cmwtQVwiOiBcImdvTGluZVN0YXJ0XCIsIFwiQ3RybC1FXCI6IFwiZ29MaW5lRW5kXCIsXG4gICAgXCJDdHJsLVZcIjogXCJnb1BhZ2VEb3duXCIsIFwiU2hpZnQtQ3RybC1WXCI6IFwiZ29QYWdlVXBcIiwgXCJDdHJsLURcIjogXCJkZWxDaGFyQWZ0ZXJcIiwgXCJDdHJsLUhcIjogXCJkZWxDaGFyQmVmb3JlXCIsXG4gICAgXCJBbHQtRFwiOiBcImRlbFdvcmRBZnRlclwiLCBcIkFsdC1CYWNrc3BhY2VcIjogXCJkZWxXb3JkQmVmb3JlXCIsIFwiQ3RybC1LXCI6IFwia2lsbExpbmVcIiwgXCJDdHJsLVRcIjogXCJ0cmFuc3Bvc2VDaGFyc1wiLFxuICAgIFwiQ3RybC1PXCI6IFwib3BlbkxpbmVcIlxuICB9O1xuICBrZXlNYXAubWFjRGVmYXVsdCA9IHtcbiAgICBcIkNtZC1BXCI6IFwic2VsZWN0QWxsXCIsIFwiQ21kLURcIjogXCJkZWxldGVMaW5lXCIsIFwiQ21kLVpcIjogXCJ1bmRvXCIsIFwiU2hpZnQtQ21kLVpcIjogXCJyZWRvXCIsIFwiQ21kLVlcIjogXCJyZWRvXCIsXG4gICAgXCJDbWQtSG9tZVwiOiBcImdvRG9jU3RhcnRcIiwgXCJDbWQtVXBcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ21kLUVuZFwiOiBcImdvRG9jRW5kXCIsIFwiQ21kLURvd25cIjogXCJnb0RvY0VuZFwiLCBcIkFsdC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIixcbiAgICBcIkFsdC1SaWdodFwiOiBcImdvR3JvdXBSaWdodFwiLCBcIkNtZC1MZWZ0XCI6IFwiZ29MaW5lTGVmdFwiLCBcIkNtZC1SaWdodFwiOiBcImdvTGluZVJpZ2h0XCIsIFwiQWx0LUJhY2tzcGFjZVwiOiBcImRlbEdyb3VwQmVmb3JlXCIsXG4gICAgXCJDdHJsLUFsdC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEFmdGVyXCIsIFwiQWx0LURlbGV0ZVwiOiBcImRlbEdyb3VwQWZ0ZXJcIiwgXCJDbWQtU1wiOiBcInNhdmVcIiwgXCJDbWQtRlwiOiBcImZpbmRcIixcbiAgICBcIkNtZC1HXCI6IFwiZmluZE5leHRcIiwgXCJTaGlmdC1DbWQtR1wiOiBcImZpbmRQcmV2XCIsIFwiQ21kLUFsdC1GXCI6IFwicmVwbGFjZVwiLCBcIlNoaWZ0LUNtZC1BbHQtRlwiOiBcInJlcGxhY2VBbGxcIixcbiAgICBcIkNtZC1bXCI6IFwiaW5kZW50TGVzc1wiLCBcIkNtZC1dXCI6IFwiaW5kZW50TW9yZVwiLCBcIkNtZC1CYWNrc3BhY2VcIjogXCJkZWxXcmFwcGVkTGluZUxlZnRcIiwgXCJDbWQtRGVsZXRlXCI6IFwiZGVsV3JhcHBlZExpbmVSaWdodFwiLFxuICAgIFwiQ21kLVVcIjogXCJ1bmRvU2VsZWN0aW9uXCIsIFwiU2hpZnQtQ21kLVVcIjogXCJyZWRvU2VsZWN0aW9uXCIsIFwiQ3RybC1VcFwiOiBcImdvRG9jU3RhcnRcIiwgXCJDdHJsLURvd25cIjogXCJnb0RvY0VuZFwiLFxuICAgIFwiZmFsbHRocm91Z2hcIjogW1wiYmFzaWNcIiwgXCJlbWFjc3lcIl1cbiAgfTtcbiAga2V5TWFwW1wiZGVmYXVsdFwiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDtcblxuICAvLyBLRVlNQVAgRElTUEFUQ0hcblxuICBmdW5jdGlvbiBub3JtYWxpemVLZXlOYW1lKG5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KC8tKD8hJCkvKTtcbiAgICBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGFsdCwgY3RybCwgc2hpZnQsIGNtZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgdmFyIG1vZCA9IHBhcnRzW2ldO1xuICAgICAgaWYgKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QobW9kKSkgeyBjbWQgPSB0cnVlOyB9XG4gICAgICBlbHNlIGlmICgvXmEobHQpPyQvaS50ZXN0KG1vZCkpIHsgYWx0ID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgeyBjdHJsID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoL15zKGhpZnQpPyQvaS50ZXN0KG1vZCkpIHsgc2hpZnQgPSB0cnVlOyB9XG4gICAgICBlbHNlIHsgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6IFwiICsgbW9kKSB9XG4gICAgfVxuICAgIGlmIChhbHQpIHsgbmFtZSA9IFwiQWx0LVwiICsgbmFtZTsgfVxuICAgIGlmIChjdHJsKSB7IG5hbWUgPSBcIkN0cmwtXCIgKyBuYW1lOyB9XG4gICAgaWYgKGNtZCkgeyBuYW1lID0gXCJDbWQtXCIgKyBuYW1lOyB9XG4gICAgaWYgKHNoaWZ0KSB7IG5hbWUgPSBcIlNoaWZ0LVwiICsgbmFtZTsgfVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBUaGlzIGlzIGEga2x1ZGdlIHRvIGtlZXAga2V5bWFwcyBtb3N0bHkgd29ya2luZyBhcyByYXcgb2JqZWN0c1xuICAvLyAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgc3VwcG9ydCBmZWF0dXJlc1xuICAvLyBsaWtlIG5vcm1hbGl6YXRpb24gYW5kIG11bHRpLXN0cm9rZSBrZXkgYmluZGluZ3MuIEl0IGNvbXBpbGVzIGFcbiAgLy8gbmV3IG5vcm1hbGl6ZWQga2V5bWFwLCBhbmQgdGhlbiB1cGRhdGVzIHRoZSBvbGQgb2JqZWN0IHRvIHJlZmxlY3RcbiAgLy8gdGhpcy5cbiAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TWFwKGtleW1hcCkge1xuICAgIHZhciBjb3B5ID0ge307XG4gICAgZm9yICh2YXIga2V5bmFtZSBpbiBrZXltYXApIHsgaWYgKGtleW1hcC5oYXNPd25Qcm9wZXJ0eShrZXluYW1lKSkge1xuICAgICAgdmFyIHZhbHVlID0ga2V5bWFwW2tleW5hbWVdO1xuICAgICAgaWYgKC9eKG5hbWV8ZmFsbHRocm91Z2h8KGRlfGF0KXRhY2gpJC8udGVzdChrZXluYW1lKSkgeyBjb250aW51ZSB9XG4gICAgICBpZiAodmFsdWUgPT0gXCIuLi5cIikgeyBkZWxldGUga2V5bWFwW2tleW5hbWVdOyBjb250aW51ZSB9XG5cbiAgICAgIHZhciBrZXlzID0gbWFwKGtleW5hbWUuc3BsaXQoXCIgXCIpLCBub3JtYWxpemVLZXlOYW1lKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdmFsID0gKHZvaWQgMCksIG5hbWUgPSAodm9pZCAwKTtcbiAgICAgICAgaWYgKGkgPT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgbmFtZSA9IGtleXMuam9pbihcIiBcIik7XG4gICAgICAgICAgdmFsID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZSA9IGtleXMuc2xpY2UoMCwgaSArIDEpLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIHZhbCA9IFwiLi4uXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXYgPSBjb3B5W25hbWVdO1xuICAgICAgICBpZiAoIXByZXYpIHsgY29weVtuYW1lXSA9IHZhbDsgfVxuICAgICAgICBlbHNlIGlmIChwcmV2ICE9IHZhbCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvbnNpc3RlbnQgYmluZGluZ3MgZm9yIFwiICsgbmFtZSkgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIGtleW1hcFtrZXluYW1lXTtcbiAgICB9IH1cbiAgICBmb3IgKHZhciBwcm9wIGluIGNvcHkpIHsga2V5bWFwW3Byb3BdID0gY29weVtwcm9wXTsgfVxuICAgIHJldHVybiBrZXltYXBcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2t1cEtleShrZXksIG1hcCwgaGFuZGxlLCBjb250ZXh0KSB7XG4gICAgbWFwID0gZ2V0S2V5TWFwKG1hcCk7XG4gICAgdmFyIGZvdW5kID0gbWFwLmNhbGwgPyBtYXAuY2FsbChrZXksIGNvbnRleHQpIDogbWFwW2tleV07XG4gICAgaWYgKGZvdW5kID09PSBmYWxzZSkgeyByZXR1cm4gXCJub3RoaW5nXCIgfVxuICAgIGlmIChmb3VuZCA9PT0gXCIuLi5cIikgeyByZXR1cm4gXCJtdWx0aVwiIH1cbiAgICBpZiAoZm91bmQgIT0gbnVsbCAmJiBoYW5kbGUoZm91bmQpKSB7IHJldHVybiBcImhhbmRsZWRcIiB9XG5cbiAgICBpZiAobWFwLmZhbGx0aHJvdWdoKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1hcC5mYWxsdGhyb3VnaCkgIT0gXCJbb2JqZWN0IEFycmF5XVwiKVxuICAgICAgICB7IHJldHVybiBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2gsIGhhbmRsZSwgY29udGV4dCkgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAuZmFsbHRocm91Z2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaFtpXSwgaGFuZGxlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNb2RpZmllciBrZXkgcHJlc3NlcyBkb24ndCBjb3VudCBhcyAncmVhbCcga2V5IHByZXNzZXMgZm9yIHRoZVxuICAvLyBwdXJwb3NlIG9mIGtleW1hcCBmYWxsdGhyb3VnaC5cbiAgZnVuY3Rpb24gaXNNb2RpZmllcktleSh2YWx1ZSkge1xuICAgIHZhciBuYW1lID0gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IGtleU5hbWVzW3ZhbHVlLmtleUNvZGVdO1xuICAgIHJldHVybiBuYW1lID09IFwiQ3RybFwiIHx8IG5hbWUgPT0gXCJBbHRcIiB8fCBuYW1lID09IFwiU2hpZnRcIiB8fCBuYW1lID09IFwiTW9kXCJcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZE1vZGlmaWVyTmFtZXMobmFtZSwgZXZlbnQsIG5vU2hpZnQpIHtcbiAgICB2YXIgYmFzZSA9IG5hbWU7XG4gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBiYXNlICE9IFwiQWx0XCIpIHsgbmFtZSA9IFwiQWx0LVwiICsgbmFtZTsgfVxuICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSkgJiYgYmFzZSAhPSBcIkN0cmxcIikgeyBuYW1lID0gXCJDdHJsLVwiICsgbmFtZTsgfVxuICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgJiYgYmFzZSAhPSBcIkNtZFwiKSB7IG5hbWUgPSBcIkNtZC1cIiArIG5hbWU7IH1cbiAgICBpZiAoIW5vU2hpZnQgJiYgZXZlbnQuc2hpZnRLZXkgJiYgYmFzZSAhPSBcIlNoaWZ0XCIpIHsgbmFtZSA9IFwiU2hpZnQtXCIgKyBuYW1lOyB9XG4gICAgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIG5hbWUgb2YgYSBrZXkgYXMgaW5kaWNhdGVkIGJ5IGFuIGV2ZW50IG9iamVjdC5cbiAgZnVuY3Rpb24ga2V5TmFtZShldmVudCwgbm9TaGlmdCkge1xuICAgIGlmIChwcmVzdG8gJiYgZXZlbnQua2V5Q29kZSA9PSAzNCAmJiBldmVudFtcImNoYXJcIl0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdO1xuICAgIGlmIChuYW1lID09IG51bGwgfHwgZXZlbnQuYWx0R3JhcGhLZXkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAvLyBDdHJsLVNjcm9sbExvY2sgaGFzIGtleUNvZGUgMywgc2FtZSBhcyBDdHJsLVBhdXNlLFxuICAgIC8vIHNvIHdlJ2xsIHVzZSBldmVudC5jb2RlIHdoZW4gYXZhaWxhYmxlIChDaHJvbWUgNDgrLCBGRiAzOCssIFNhZmFyaSAxMC4xKylcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAzICYmIGV2ZW50LmNvZGUpIHsgbmFtZSA9IGV2ZW50LmNvZGU7IH1cbiAgICByZXR1cm4gYWRkTW9kaWZpZXJOYW1lcyhuYW1lLCBldmVudCwgbm9TaGlmdClcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEtleU1hcCh2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8ga2V5TWFwW3ZhbF0gOiB2YWxcbiAgfVxuXG4gIC8vIEhlbHBlciBmb3IgZGVsZXRpbmcgdGV4dCBuZWFyIHRoZSBzZWxlY3Rpb24ocyksIHVzZWQgdG8gaW1wbGVtZW50XG4gIC8vIGJhY2tzcGFjZSwgZGVsZXRlLCBhbmQgc2ltaWxhciBmdW5jdGlvbmFsaXR5LlxuICBmdW5jdGlvbiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBjb21wdXRlKSB7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmRvYy5zZWwucmFuZ2VzLCBraWxsID0gW107XG4gICAgLy8gQnVpbGQgdXAgYSBzZXQgb2YgcmFuZ2VzIHRvIGtpbGwgZmlyc3QsIG1lcmdpbmcgb3ZlcmxhcHBpbmdcbiAgICAvLyByYW5nZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b0tpbGwgPSBjb21wdXRlKHJhbmdlc1tpXSk7XG4gICAgICB3aGlsZSAoa2lsbC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBsc3Qoa2lsbCkudG8pIDw9IDApIHtcbiAgICAgICAgdmFyIHJlcGxhY2VkID0ga2lsbC5wb3AoKTtcbiAgICAgICAgaWYgKGNtcChyZXBsYWNlZC5mcm9tLCB0b0tpbGwuZnJvbSkgPCAwKSB7XG4gICAgICAgICAgdG9LaWxsLmZyb20gPSByZXBsYWNlZC5mcm9tO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGtpbGwucHVzaCh0b0tpbGwpO1xuICAgIH1cbiAgICAvLyBOZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy5cbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0ga2lsbC5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCBcIlwiLCBraWxsW2ldLmZyb20sIGtpbGxbaV0udG8sIFwiK2RlbGV0ZVwiKTsgfVxuICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBjaCwgZGlyKSB7XG4gICAgdmFyIHRhcmdldCA9IHNraXBFeHRlbmRpbmdDaGFycyhsaW5lLnRleHQsIGNoICsgZGlyLCBkaXIpO1xuICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIpIHtcbiAgICB2YXIgY2ggPSBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBzdGFydC5jaCwgZGlyKTtcbiAgICByZXR1cm4gY2ggPT0gbnVsbCA/IG51bGwgOiBuZXcgUG9zKHN0YXJ0LmxpbmUsIGNoLCBkaXIgPCAwID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIilcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9mTGluZSh2aXN1YWxseSwgY20sIGxpbmVPYmosIGxpbmVObywgZGlyKSB7XG4gICAgaWYgKHZpc3VhbGx5KSB7XG4gICAgICBpZiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiKSB7IGRpciA9IC1kaXI7IH1cbiAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gZGlyIDwgMCA/IGxzdChvcmRlcikgOiBvcmRlclswXTtcbiAgICAgICAgdmFyIG1vdmVJblN0b3JhZ2VPcmRlciA9IChkaXIgPCAwKSA9PSAocGFydC5sZXZlbCA9PSAxKTtcbiAgICAgICAgdmFyIHN0aWNreSA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgICAgIHZhciBjaDtcbiAgICAgICAgLy8gV2l0aCBhIHdyYXBwZWQgcnRsIGNodW5rIChwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBiaWRpIHBhcnRzKSxcbiAgICAgICAgLy8gaXQgY291bGQgYmUgdGhhdCB0aGUgbGFzdCBiaWRpIHBhcnQgaXMgbm90IG9uIHRoZSBsYXN0IHZpc3VhbCBsaW5lLFxuICAgICAgICAvLyBzaW5jZSB2aXN1YWwgbGluZXMgY29udGFpbiBjb250ZW50IG9yZGVyLWNvbnNlY3V0aXZlIGNodW5rcy5cbiAgICAgICAgLy8gVGh1cywgaW4gcnRsLCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGZpcnN0IChjb250ZW50LW9yZGVyKSBjaGFyYWN0ZXJcbiAgICAgICAgLy8gaW4gdGhlIHJ0bCBjaHVuayB0aGF0IGlzIG9uIHRoZSBsYXN0IGxpbmUgKHRoYXQgaXMsIHRoZSBzYW1lIGxpbmVcbiAgICAgICAgLy8gYXMgdGhlIGxhc3QgKGNvbnRlbnQtb3JkZXIpIGNoYXJhY3RlcikuXG4gICAgICAgIGlmIChwYXJ0LmxldmVsID4gMCB8fCBjbS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIpIHtcbiAgICAgICAgICB2YXIgcHJlcCA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7XG4gICAgICAgICAgY2ggPSBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICAgIHZhciB0YXJnZXRUb3AgPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwLCBjaCkudG9wO1xuICAgICAgICAgIGNoID0gZmluZEZpcnN0KGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcCwgY2gpLnRvcCA9PSB0YXJnZXRUb3A7IH0sIChkaXIgPCAwKSA9PSAocGFydC5sZXZlbCA9PSAxKSA/IHBhcnQuZnJvbSA6IHBhcnQudG8gLSAxLCBjaCk7XG4gICAgICAgICAgaWYgKHN0aWNreSA9PSBcImJlZm9yZVwiKSB7IGNoID0gbW92ZUNoYXJMb2dpY2FsbHkobGluZU9iaiwgY2gsIDEpOyB9XG4gICAgICAgIH0gZWxzZSB7IGNoID0gZGlyIDwgMCA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH1cbiAgICAgICAgcmV0dXJuIG5ldyBQb3MobGluZU5vLCBjaCwgc3RpY2t5KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFBvcyhsaW5lTm8sIGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3RoIDogMCwgZGlyIDwgMCA/IFwiYmVmb3JlXCIgOiBcImFmdGVyXCIpXG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlVmlzdWFsbHkoY20sIGxpbmUsIHN0YXJ0LCBkaXIpIHtcbiAgICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgIGlmICghYmlkaSkgeyByZXR1cm4gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyKSB9XG4gICAgaWYgKHN0YXJ0LmNoID49IGxpbmUudGV4dC5sZW5ndGgpIHtcbiAgICAgIHN0YXJ0LmNoID0gbGluZS50ZXh0Lmxlbmd0aDtcbiAgICAgIHN0YXJ0LnN0aWNreSA9IFwiYmVmb3JlXCI7XG4gICAgfSBlbHNlIGlmIChzdGFydC5jaCA8PSAwKSB7XG4gICAgICBzdGFydC5jaCA9IDA7XG4gICAgICBzdGFydC5zdGlja3kgPSBcImFmdGVyXCI7XG4gICAgfVxuICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChiaWRpLCBzdGFydC5jaCwgc3RhcnQuc3RpY2t5KSwgcGFydCA9IGJpZGlbcGFydFBvc107XG4gICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJsdHJcIiAmJiBwYXJ0LmxldmVsICUgMiA9PSAwICYmIChkaXIgPiAwID8gcGFydC50byA+IHN0YXJ0LmNoIDogcGFydC5mcm9tIDwgc3RhcnQuY2gpKSB7XG4gICAgICAvLyBDYXNlIDE6IFdlIG1vdmUgd2l0aGluIGFuIGx0ciBwYXJ0IGluIGFuIGx0ciBlZGl0b3IuIEV2ZW4gd2l0aCB3cmFwcGVkIGxpbmVzLFxuICAgICAgLy8gbm90aGluZyBpbnRlcmVzdGluZyBoYXBwZW5zLlxuICAgICAgcmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpcilcbiAgICB9XG5cbiAgICB2YXIgbXYgPSBmdW5jdGlvbiAocG9zLCBkaXIpIHsgcmV0dXJuIG1vdmVDaGFyTG9naWNhbGx5KGxpbmUsIHBvcyBpbnN0YW5jZW9mIFBvcyA/IHBvcy5jaCA6IHBvcywgZGlyKTsgfTtcbiAgICB2YXIgcHJlcDtcbiAgICB2YXIgZ2V0V3JhcHBlZExpbmVFeHRlbnQgPSBmdW5jdGlvbiAoY2gpIHtcbiAgICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgcmV0dXJuIHtiZWdpbjogMCwgZW5kOiBsaW5lLnRleHQubGVuZ3RofSB9XG4gICAgICBwcmVwID0gcHJlcCB8fCBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpO1xuICAgICAgcmV0dXJuIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZSwgcHJlcCwgY2gpXG4gICAgfTtcbiAgICB2YXIgd3JhcHBlZExpbmVFeHRlbnQgPSBnZXRXcmFwcGVkTGluZUV4dGVudChzdGFydC5zdGlja3kgPT0gXCJiZWZvcmVcIiA/IG12KHN0YXJ0LCAtMSkgOiBzdGFydC5jaCk7XG5cbiAgICBpZiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiIHx8IHBhcnQubGV2ZWwgPT0gMSkge1xuICAgICAgdmFyIG1vdmVJblN0b3JhZ2VPcmRlciA9IChwYXJ0LmxldmVsID09IDEpID09IChkaXIgPCAwKTtcbiAgICAgIHZhciBjaCA9IG12KHN0YXJ0LCBtb3ZlSW5TdG9yYWdlT3JkZXIgPyAxIDogLTEpO1xuICAgICAgaWYgKGNoICE9IG51bGwgJiYgKCFtb3ZlSW5TdG9yYWdlT3JkZXIgPyBjaCA+PSBwYXJ0LmZyb20gJiYgY2ggPj0gd3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gOiBjaCA8PSBwYXJ0LnRvICYmIGNoIDw9IHdyYXBwZWRMaW5lRXh0ZW50LmVuZCkpIHtcbiAgICAgICAgLy8gQ2FzZSAyOiBXZSBtb3ZlIHdpdGhpbiBhbiBydGwgcGFydCBvciBpbiBhbiBydGwgZWRpdG9yIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lXG4gICAgICAgIHZhciBzdGlja3kgPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiO1xuICAgICAgICByZXR1cm4gbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgc3RpY2t5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhc2UgMzogQ291bGQgbm90IG1vdmUgd2l0aGluIHRoaXMgYmlkaSBwYXJ0IGluIHRoaXMgdmlzdWFsIGxpbmUsIHNvIGxlYXZlXG4gICAgLy8gdGhlIGN1cnJlbnQgYmlkaSBwYXJ0XG5cbiAgICB2YXIgc2VhcmNoSW5WaXN1YWxMaW5lID0gZnVuY3Rpb24gKHBhcnRQb3MsIGRpciwgd3JhcHBlZExpbmVFeHRlbnQpIHtcbiAgICAgIHZhciBnZXRSZXMgPSBmdW5jdGlvbiAoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgeyByZXR1cm4gbW92ZUluU3RvcmFnZU9yZGVyXG4gICAgICAgID8gbmV3IFBvcyhzdGFydC5saW5lLCBtdihjaCwgMSksIFwiYmVmb3JlXCIpXG4gICAgICAgIDogbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgXCJhZnRlclwiKTsgfTtcblxuICAgICAgZm9yICg7IHBhcnRQb3MgPj0gMCAmJiBwYXJ0UG9zIDwgYmlkaS5sZW5ndGg7IHBhcnRQb3MgKz0gZGlyKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gYmlkaVtwYXJ0UG9zXTtcbiAgICAgICAgdmFyIG1vdmVJblN0b3JhZ2VPcmRlciA9IChkaXIgPiAwKSA9PSAocGFydC5sZXZlbCAhPSAxKTtcbiAgICAgICAgdmFyIGNoID0gbW92ZUluU3RvcmFnZU9yZGVyID8gd3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gOiBtdih3cmFwcGVkTGluZUV4dGVudC5lbmQsIC0xKTtcbiAgICAgICAgaWYgKHBhcnQuZnJvbSA8PSBjaCAmJiBjaCA8IHBhcnQudG8pIHsgcmV0dXJuIGdldFJlcyhjaCwgbW92ZUluU3RvcmFnZU9yZGVyKSB9XG4gICAgICAgIGNoID0gbW92ZUluU3RvcmFnZU9yZGVyID8gcGFydC5mcm9tIDogbXYocGFydC50bywgLTEpO1xuICAgICAgICBpZiAod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gPD0gY2ggJiYgY2ggPCB3cmFwcGVkTGluZUV4dGVudC5lbmQpIHsgcmV0dXJuIGdldFJlcyhjaCwgbW92ZUluU3RvcmFnZU9yZGVyKSB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIENhc2UgM2E6IExvb2sgZm9yIG90aGVyIGJpZGkgcGFydHMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmVcbiAgICB2YXIgcmVzID0gc2VhcmNoSW5WaXN1YWxMaW5lKHBhcnRQb3MgKyBkaXIsIGRpciwgd3JhcHBlZExpbmVFeHRlbnQpO1xuICAgIGlmIChyZXMpIHsgcmV0dXJuIHJlcyB9XG5cbiAgICAvLyBDYXNlIDNiOiBMb29rIGZvciBvdGhlciBiaWRpIHBhcnRzIG9uIHRoZSBuZXh0IHZpc3VhbCBsaW5lXG4gICAgdmFyIG5leHRDaCA9IGRpciA+IDAgPyB3cmFwcGVkTGluZUV4dGVudC5lbmQgOiBtdih3cmFwcGVkTGluZUV4dGVudC5iZWdpbiwgLTEpO1xuICAgIGlmIChuZXh0Q2ggIT0gbnVsbCAmJiAhKGRpciA+IDAgJiYgbmV4dENoID09IGxpbmUudGV4dC5sZW5ndGgpKSB7XG4gICAgICByZXMgPSBzZWFyY2hJblZpc3VhbExpbmUoZGlyID4gMCA/IDAgOiBiaWRpLmxlbmd0aCAtIDEsIGRpciwgZ2V0V3JhcHBlZExpbmVFeHRlbnQobmV4dENoKSk7XG4gICAgICBpZiAocmVzKSB7IHJldHVybiByZXMgfVxuICAgIH1cblxuICAgIC8vIENhc2UgNDogTm93aGVyZSB0byBtb3ZlXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENvbW1hbmRzIGFyZSBwYXJhbWV0ZXItbGVzcyBhY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhblxuICAvLyBlZGl0b3IsIG1vc3RseSB1c2VkIGZvciBrZXliaW5kaW5ncy5cbiAgdmFyIGNvbW1hbmRzID0ge1xuICAgIHNlbGVjdEFsbDogc2VsZWN0QWxsLFxuICAgIHNpbmdsZVNlbGVjdGlvbjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5zZXRTZWxlY3Rpb24oY20uZ2V0Q3Vyc29yKFwiYW5jaG9yXCIpLCBjbS5nZXRDdXJzb3IoXCJoZWFkXCIpLCBzZWxfZG9udFNjcm9sbCk7IH0sXG4gICAga2lsbExpbmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICBpZiAocmFuZ2UuZW1wdHkoKSkge1xuICAgICAgICB2YXIgbGVuID0gZ2V0TGluZShjbS5kb2MsIHJhbmdlLmhlYWQubGluZSkudGV4dC5sZW5ndGg7XG4gICAgICAgIGlmIChyYW5nZS5oZWFkLmNoID09IGxlbiAmJiByYW5nZS5oZWFkLmxpbmUgPCBjbS5sYXN0TGluZSgpKVxuICAgICAgICAgIHsgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSArIDEsIDApfSB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUsIGxlbil9IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmFuZ2UudG8oKX1cbiAgICAgIH1cbiAgICB9KTsgfSxcbiAgICBkZWxldGVMaW5lOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gKHtcbiAgICAgIGZyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksXG4gICAgICB0bzogY2xpcFBvcyhjbS5kb2MsIFBvcyhyYW5nZS50bygpLmxpbmUgKyAxLCAwKSlcbiAgICB9KTsgfSk7IH0sXG4gICAgZGVsTGluZUxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiAoe1xuICAgICAgZnJvbTogUG9zKHJhbmdlLmZyb20oKS5saW5lLCAwKSwgdG86IHJhbmdlLmZyb20oKVxuICAgIH0pOyB9KTsgfSxcbiAgICBkZWxXcmFwcGVkTGluZUxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgdmFyIGxlZnRQb3MgPSBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpO1xuICAgICAgcmV0dXJuIHtmcm9tOiBsZWZ0UG9zLCB0bzogcmFuZ2UuZnJvbSgpfVxuICAgIH0pOyB9LFxuICAgIGRlbFdyYXBwZWRMaW5lUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgdmFyIHJpZ2h0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpO1xuICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByaWdodFBvcyB9XG4gICAgfSk7IH0sXG4gICAgdW5kbzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS51bmRvKCk7IH0sXG4gICAgcmVkbzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZWRvKCk7IH0sXG4gICAgdW5kb1NlbGVjdGlvbjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS51bmRvU2VsZWN0aW9uKCk7IH0sXG4gICAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZWRvU2VsZWN0aW9uKCk7IH0sXG4gICAgZ29Eb2NTdGFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7IH0sXG4gICAgZ29Eb2NFbmQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5sYXN0TGluZSgpKSk7IH0sXG4gICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0KGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LFxuICAgICAge29yaWdpbjogXCIrbW92ZVwiLCBiaWFzOiAxfVxuICAgICk7IH0sXG4gICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCk7IH0sXG4gICAgICB7b3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IDF9XG4gICAgKTsgfSxcbiAgICBnb0xpbmVFbmQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSxcbiAgICAgIHtvcmlnaW46IFwiK21vdmVcIiwgYmlhczogLTF9XG4gICAgKTsgfSxcbiAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY3Vyc29yQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgICByZXR1cm4gY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpXG4gICAgfSwgc2VsX21vdmUpOyB9LFxuICAgIGdvTGluZUxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmN1cnNvckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgXCJkaXZcIilcbiAgICB9LCBzZWxfbW92ZSk7IH0sXG4gICAgZ29MaW5lTGVmdFNtYXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgIHZhciB0b3AgPSBjbS5jdXJzb3JDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpO1xuICAgICAgaWYgKHBvcy5jaCA8IGNtLmdldExpbmUocG9zLmxpbmUpLnNlYXJjaCgvXFxTLykpIHsgcmV0dXJuIGxpbmVTdGFydFNtYXJ0KGNtLCByYW5nZS5oZWFkKSB9XG4gICAgICByZXR1cm4gcG9zXG4gICAgfSwgc2VsX21vdmUpOyB9LFxuICAgIGdvTGluZVVwOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKC0xLCBcImxpbmVcIik7IH0sXG4gICAgZ29MaW5lRG93bjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCBcImxpbmVcIik7IH0sXG4gICAgZ29QYWdlVXA6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoLTEsIFwicGFnZVwiKTsgfSxcbiAgICBnb1BhZ2VEb3duOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKDEsIFwicGFnZVwiKTsgfSxcbiAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImNoYXJcIik7IH0sXG4gICAgZ29DaGFyUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJjaGFyXCIpOyB9LFxuICAgIGdvQ29sdW1uTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJjb2x1bW5cIik7IH0sXG4gICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCBcImNvbHVtblwiKTsgfSxcbiAgICBnb1dvcmRMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcIndvcmRcIik7IH0sXG4gICAgZ29Hcm91cFJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwiZ3JvdXBcIik7IH0sXG4gICAgZ29Hcm91cExlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsIFwiZ3JvdXBcIik7IH0sXG4gICAgZ29Xb3JkUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGRlbENoYXJCZWZvcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgtMSwgXCJjaGFyXCIpOyB9LFxuICAgIGRlbENoYXJBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiY2hhclwiKTsgfSxcbiAgICBkZWxXb3JkQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwid29yZFwiKTsgfSxcbiAgICBkZWxXb3JkQWZ0ZXI6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgxLCBcIndvcmRcIik7IH0sXG4gICAgZGVsR3JvdXBCZWZvcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgtMSwgXCJncm91cFwiKTsgfSxcbiAgICBkZWxHcm91cEFmdGVyOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoMSwgXCJncm91cFwiKTsgfSxcbiAgICBpbmRlbnRBdXRvOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcInNtYXJ0XCIpOyB9LFxuICAgIGluZGVudE1vcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwiYWRkXCIpOyB9LFxuICAgIGluZGVudExlc3M6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwic3VidHJhY3RcIik7IH0sXG4gICAgaW5zZXJ0VGFiOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcXHRcIik7IH0sXG4gICAgaW5zZXJ0U29mdFRhYjogZnVuY3Rpb24gKGNtKSB7XG4gICAgICB2YXIgc3BhY2VzID0gW10sIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmZyb20oKTtcbiAgICAgICAgdmFyIGNvbCA9IGNvdW50Q29sdW1uKGNtLmdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gsIHRhYlNpemUpO1xuICAgICAgICBzcGFjZXMucHVzaChzcGFjZVN0cih0YWJTaXplIC0gY29sICUgdGFiU2l6ZSkpO1xuICAgICAgfVxuICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc3BhY2VzKTtcbiAgICB9LFxuICAgIGRlZmF1bHRUYWI6IGZ1bmN0aW9uIChjbSkge1xuICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgY20uaW5kZW50U2VsZWN0aW9uKFwiYWRkXCIpOyB9XG4gICAgICBlbHNlIHsgY20uZXhlY0NvbW1hbmQoXCJpbnNlcnRUYWJcIik7IH1cbiAgICB9LFxuICAgIC8vIFN3YXAgdGhlIHR3byBjaGFycyBsZWZ0IGFuZCByaWdodCBvZiBlYWNoIHNlbGVjdGlvbidzIGhlYWQuXG4gICAgLy8gTW92ZSBjdXJzb3IgYmVoaW5kIHRoZSB0d28gc3dhcHBlZCBjaGFyYWN0ZXJzIGFmdGVyd2FyZHMuXG4gICAgLy9cbiAgICAvLyBEb2Vzbid0IGNvbnNpZGVyIGxpbmUgZmVlZHMgYSBjaGFyYWN0ZXIuXG4gICAgLy8gRG9lc24ndCBzY2FuIG1vcmUgdGhhbiBvbmUgbGluZSBhYm92ZSB0byBmaW5kIGEgY2hhcmFjdGVyLlxuICAgIC8vIERvZXNuJ3QgZG8gYW55dGhpbmcgb24gYW4gZW1wdHkgbGluZS5cbiAgICAvLyBEb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggbm9uLWVtcHR5IHNlbGVjdGlvbnMuXG4gICAgdHJhbnNwb3NlQ2hhcnM6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIG5ld1NlbCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgeyBjb250aW51ZSB9XG4gICAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0uaGVhZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSkudGV4dDtcbiAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoKSB7IGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpOyB9XG4gICAgICAgICAgaWYgKGN1ci5jaCA+IDApIHtcbiAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpO1xuICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyLCBcIit0cmFuc3Bvc2VcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXIubGluZSA+IGNtLmRvYy5maXJzdCkge1xuICAgICAgICAgICAgdmFyIHByZXYgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50ZXh0O1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgY3VyID0gbmV3IFBvcyhjdXIubGluZSwgMSk7XG4gICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdCgwKSArIGNtLmRvYy5saW5lU2VwYXJhdG9yKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSAtIDEsIHByZXYubGVuZ3RoIC0gMSksIGN1ciwgXCIrdHJhbnNwb3NlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTZWwucHVzaChuZXcgUmFuZ2UoY3VyLCBjdXIpKTtcbiAgICAgIH1cbiAgICAgIGNtLnNldFNlbGVjdGlvbnMobmV3U2VsKTtcbiAgICB9KTsgfSxcbiAgICBuZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxzID0gY20ubGlzdFNlbGVjdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSBzZWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7IGNtLnJlcGxhY2VSYW5nZShjbS5kb2MubGluZVNlcGFyYXRvcigpLCBzZWxzW2ldLmFuY2hvciwgc2Vsc1tpXS5oZWFkLCBcIitpbnB1dFwiKTsgfVxuICAgICAgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzZWxzLmxlbmd0aDsgaSQxKyspXG4gICAgICAgIHsgY20uaW5kZW50TGluZShzZWxzW2kkMV0uZnJvbSgpLmxpbmUsIG51bGwsIHRydWUpOyB9XG4gICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTtcbiAgICB9KTsgfSxcbiAgICBvcGVuTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXFxuXCIsIFwic3RhcnRcIik7IH0sXG4gICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnRvZ2dsZU92ZXJ3cml0ZSgpOyB9XG4gIH07XG5cblxuICBmdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4pO1xuICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGxpbmUpO1xuICAgIGlmICh2aXN1YWwgIT0gbGluZSkgeyBsaW5lTiA9IGxpbmVObyh2aXN1YWwpOyB9XG4gICAgcmV0dXJuIGVuZE9mTGluZSh0cnVlLCBjbSwgdmlzdWFsLCBsaW5lTiwgMSlcbiAgfVxuICBmdW5jdGlvbiBsaW5lRW5kKGNtLCBsaW5lTikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTtcbiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZUVuZChsaW5lKTtcbiAgICBpZiAodmlzdWFsICE9IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsgfVxuICAgIHJldHVybiBlbmRPZkxpbmUodHJ1ZSwgY20sIGxpbmUsIGxpbmVOLCAtMSlcbiAgfVxuICBmdW5jdGlvbiBsaW5lU3RhcnRTbWFydChjbSwgcG9zKSB7XG4gICAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0KGNtLCBwb3MubGluZSk7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgc3RhcnQubGluZSk7XG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSwgY20uZG9jLmRpcmVjdGlvbik7XG4gICAgaWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7XG4gICAgICB2YXIgZmlyc3ROb25XUyA9IE1hdGgubWF4KHN0YXJ0LmNoLCBsaW5lLnRleHQuc2VhcmNoKC9cXFMvKSk7XG4gICAgICB2YXIgaW5XUyA9IHBvcy5saW5lID09IHN0YXJ0LmxpbmUgJiYgcG9zLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcG9zLmNoO1xuICAgICAgcmV0dXJuIFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MsIHN0YXJ0LnN0aWNreSlcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0XG4gIH1cblxuICAvLyBSdW4gYSBoYW5kbGVyIHRoYXQgd2FzIGJvdW5kIHRvIGEga2V5LlxuICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmcoY20sIGJvdW5kLCBkcm9wU2hpZnQpIHtcbiAgICBpZiAodHlwZW9mIGJvdW5kID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdO1xuICAgICAgaWYgKCFib3VuZCkgeyByZXR1cm4gZmFsc2UgfVxuICAgIH1cbiAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGFcbiAgICAvLyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50XG4gICAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTtcbiAgICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY20uaXNSZWFkT25seSgpKSB7IGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOyB9XG4gICAgICBpZiAoZHJvcFNoaWZ0KSB7IGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsgfVxuICAgICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gcHJldlNoaWZ0O1xuICAgICAgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZG9uZVxuICB9XG5cbiAgZnVuY3Rpb24gbG9va3VwS2V5Rm9yRWRpdG9yKGNtLCBuYW1lLCBoYW5kbGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLnN0YXRlLmtleU1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkobmFtZSwgY20uc3RhdGUua2V5TWFwc1tpXSwgaGFuZGxlLCBjbSk7XG4gICAgICBpZiAocmVzdWx0KSB7IHJldHVybiByZXN1bHQgfVxuICAgIH1cbiAgICByZXR1cm4gKGNtLm9wdGlvbnMuZXh0cmFLZXlzICYmIGxvb2t1cEtleShuYW1lLCBjbS5vcHRpb25zLmV4dHJhS2V5cywgaGFuZGxlLCBjbSkpXG4gICAgICB8fCBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5rZXlNYXAsIGhhbmRsZSwgY20pXG4gIH1cblxuICAvLyBOb3RlIHRoYXQsIGRlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHRvIGNoZWNrXG4gIC8vIGZvciBib3VuZCBtb3VzZSBjbGlja3MuXG5cbiAgdmFyIHN0b3BTZXEgPSBuZXcgRGVsYXllZDtcblxuICBmdW5jdGlvbiBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgaGFuZGxlKSB7XG4gICAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTtcbiAgICBpZiAoc2VxKSB7XG4gICAgICBpZiAoaXNNb2RpZmllcktleShuYW1lKSkgeyByZXR1cm4gXCJoYW5kbGVkXCIgfVxuICAgICAgaWYgKC9cXCckLy50ZXN0KG5hbWUpKVxuICAgICAgICB7IGNtLnN0YXRlLmtleVNlcSA9IG51bGw7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBzdG9wU2VxLnNldCg1MCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjbS5zdGF0ZS5rZXlTZXEgPT0gc2VxKSB7XG4gICAgICAgICAgICBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsO1xuICAgICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IH1cbiAgICAgIGlmIChkaXNwYXRjaEtleUlubmVyKGNtLCBzZXEgKyBcIiBcIiArIG5hbWUsIGUsIGhhbmRsZSkpIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hLZXlJbm5lcihjbSwgbmFtZSwgZSwgaGFuZGxlKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hLZXlJbm5lcihjbSwgbmFtZSwgZSwgaGFuZGxlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKTtcblxuICAgIGlmIChyZXN1bHQgPT0gXCJtdWx0aVwiKVxuICAgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBuYW1lOyB9XG4gICAgaWYgKHJlc3VsdCA9PSBcImhhbmRsZWRcIilcbiAgICAgIHsgc2lnbmFsTGF0ZXIoY20sIFwia2V5SGFuZGxlZFwiLCBjbSwgbmFtZSwgZSk7IH1cblxuICAgIGlmIChyZXN1bHQgPT0gXCJoYW5kbGVkXCIgfHwgcmVzdWx0ID09IFwibXVsdGlcIikge1xuICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHJlc3RhcnRCbGluayhjbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhcmVzdWx0XG4gIH1cblxuICAvLyBIYW5kbGUgYSBrZXkgZnJvbSB0aGUga2V5ZG93biBldmVudC5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5QmluZGluZyhjbSwgZSkge1xuICAgIHZhciBuYW1lID0ga2V5TmFtZShlLCB0cnVlKTtcbiAgICBpZiAoIW5hbWUpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChlLnNoaWZ0S2V5ICYmICFjbS5zdGF0ZS5rZXlTZXEpIHtcbiAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5jbHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZ1xuICAgICAgLy8gdGhhdCwgc2VlIGlmIHRoZXJlIGlzIGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoXG4gICAgICAvLyAnZ28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBcIlNoaWZ0LVwiICsgbmFtZSwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pXG4gICAgICAgICAgfHwgZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gXCJzdHJpbmdcIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKVxuICAgICAgICAgICAgICAgICB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpIH1cbiAgICAgICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudFxuICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIFwiJ1wiICsgY2ggKyBcIidcIiwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pXG4gIH1cblxuICB2YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsO1xuICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgIHZhciBjbSA9IHRoaXM7XG4gICAgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQoKTtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS5cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExICYmIGUua2V5Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgY29kZSA9IGUua2V5Q29kZTtcbiAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gY29kZSA9PSAxNiB8fCBlLnNoaWZ0S2V5O1xuICAgIHZhciBoYW5kbGVkID0gaGFuZGxlS2V5QmluZGluZyhjbSwgZSk7XG4gICAgaWYgKHByZXN0bykge1xuICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7XG4gICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvXG4gICAgICBpZiAoIWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiAhaGFzQ29weUV2ZW50ICYmIChtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpKVxuICAgICAgICB7IGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7IH1cbiAgICB9XG4gICAgaWYgKGdlY2tvICYmICFtYWMgJiYgIWhhbmRsZWQgJiYgY29kZSA9PSA0NiAmJiBlLnNoaWZ0S2V5ICYmICFlLmN0cmxLZXkgJiYgZG9jdW1lbnQuZXhlY0NvbW1hbmQpXG4gICAgICB7IGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3V0XCIpOyB9XG5cbiAgICAvLyBUdXJuIG1vdXNlIGludG8gY3Jvc3NoYWlyIHdoZW4gQWx0IGlzIGhlbGQgb24gTWFjLlxuICAgIGlmIChjb2RlID09IDE4ICYmICEvXFxiQ29kZU1pcnJvci1jcm9zc2hhaXJcXGIvLnRlc3QoY20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkpXG4gICAgICB7IHNob3dDcm9zc0hhaXIoY20pOyB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG93Q3Jvc3NIYWlyKGNtKSB7XG4gICAgdmFyIGxpbmVEaXYgPSBjbS5kaXNwbGF5LmxpbmVEaXY7XG4gICAgYWRkQ2xhc3MobGluZURpdiwgXCJDb2RlTWlycm9yLWNyb3NzaGFpclwiKTtcblxuICAgIGZ1bmN0aW9uIHVwKGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT0gMTggfHwgIWUuYWx0S2V5KSB7XG4gICAgICAgIHJtQ2xhc3MobGluZURpdiwgXCJDb2RlTWlycm9yLWNyb3NzaGFpclwiKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCBcImtleXVwXCIsIHVwKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCBcIm1vdXNlb3ZlclwiLCB1cCk7XG4gICAgICB9XG4gICAgfVxuICAgIG9uKGRvY3VtZW50LCBcImtleXVwXCIsIHVwKTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZW92ZXJcIiwgdXApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgaWYgKGUua2V5Q29kZSA9PSAxNikgeyB0aGlzLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsgfVxuICAgIHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7XG4gICAgdmFyIGNtID0gdGhpcztcbiAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBtYWMgJiYgZS5tZXRhS2V5KSB7IHJldHVybiB9XG4gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJDb2RlID0gZS5jaGFyQ29kZTtcbiAgICBpZiAocHJlc3RvICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybn1cbiAgICBpZiAoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgJiYgaGFuZGxlS2V5QmluZGluZyhjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICB2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hhckNvZGUpO1xuICAgIC8vIFNvbWUgYnJvd3NlcnMgZmlyZSBrZXlwcmVzcyBldmVudHMgZm9yIGJhY2tzcGFjZVxuICAgIGlmIChjaCA9PSBcIlxceDA4XCIpIHsgcmV0dXJuIH1cbiAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgeyByZXR1cm4gfVxuICAgIGNtLmRpc3BsYXkuaW5wdXQub25LZXlQcmVzcyhlKTtcbiAgfVxuXG4gIHZhciBET1VCTEVDTElDS19ERUxBWSA9IDQwMDtcblxuICB2YXIgUGFzdENsaWNrID0gZnVuY3Rpb24odGltZSwgcG9zLCBidXR0b24pIHtcbiAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIHRoaXMucG9zID0gcG9zO1xuICAgIHRoaXMuYnV0dG9uID0gYnV0dG9uO1xuICB9O1xuXG4gIFBhc3RDbGljay5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh0aW1lLCBwb3MsIGJ1dHRvbikge1xuICAgIHJldHVybiB0aGlzLnRpbWUgKyBET1VCTEVDTElDS19ERUxBWSA+IHRpbWUgJiZcbiAgICAgIGNtcChwb3MsIHRoaXMucG9zKSA9PSAwICYmIGJ1dHRvbiA9PSB0aGlzLmJ1dHRvblxuICB9O1xuXG4gIHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljaztcbiAgZnVuY3Rpb24gY2xpY2tSZXBlYXQocG9zLCBidXR0b24pIHtcbiAgICB2YXIgbm93ID0gK25ldyBEYXRlO1xuICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLmNvbXBhcmUobm93LCBwb3MsIGJ1dHRvbikpIHtcbiAgICAgIGxhc3RDbGljayA9IGxhc3REb3VibGVDbGljayA9IG51bGw7XG4gICAgICByZXR1cm4gXCJ0cmlwbGVcIlxuICAgIH0gZWxzZSBpZiAobGFzdENsaWNrICYmIGxhc3RDbGljay5jb21wYXJlKG5vdywgcG9zLCBidXR0b24pKSB7XG4gICAgICBsYXN0RG91YmxlQ2xpY2sgPSBuZXcgUGFzdENsaWNrKG5vdywgcG9zLCBidXR0b24pO1xuICAgICAgbGFzdENsaWNrID0gbnVsbDtcbiAgICAgIHJldHVybiBcImRvdWJsZVwiXG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RDbGljayA9IG5ldyBQYXN0Q2xpY2sobm93LCBwb3MsIGJ1dHRvbik7XG4gICAgICBsYXN0RG91YmxlQ2xpY2sgPSBudWxsO1xuICAgICAgcmV0dXJuIFwic2luZ2xlXCJcbiAgICB9XG4gIH1cblxuICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljayxcbiAgLy8gc3RhcnQgb2Ygc2VsZWN0aW9uIGRyYWcsIHN0YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvclxuICAvLyAoY3RybC1jbGljayksIHJlY3RhbmdsZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW5cbiAgLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGRcbiAgLy8gbm90IGludGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC5cbiAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZGlzcGxheS5hY3RpdmVUb3VjaCAmJiBkaXNwbGF5LmlucHV0LnN1cHBvcnRzVG91Y2goKSkgeyByZXR1cm4gfVxuICAgIGRpc3BsYXkuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgZGlzcGxheS5zaGlmdCA9IGUuc2hpZnRLZXk7XG5cbiAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkge1xuICAgICAgaWYgKCF3ZWJraXQpIHtcbiAgICAgICAgLy8gQnJpZWZseSB0dXJuIG9mZiBkcmFnZ2FiaWxpdHksIHRvIGFsbG93IHdpZGdldHMgdG8gZG9cbiAgICAgICAgLy8gbm9ybWFsIGRyYWdnaW5nIHRoaW5ncy5cbiAgICAgICAgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7IH0sIDEwMCk7XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNsaWNrSW5HdXR0ZXIoY20sIGUpKSB7IHJldHVybiB9XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIGJ1dHRvbiA9IGVfYnV0dG9uKGUpLCByZXBlYXQgPSBwb3MgPyBjbGlja1JlcGVhdChwb3MsIGJ1dHRvbikgOiBcInNpbmdsZVwiO1xuICAgIHdpbmRvdy5mb2N1cygpO1xuXG4gICAgLy8gIzMyNjE6IG1ha2Ugc3VyZSwgdGhhdCB3ZSdyZSBub3Qgc3RhcnRpbmcgYSBzZWNvbmQgc2VsZWN0aW9uXG4gICAgaWYgKGJ1dHRvbiA9PSAxICYmIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQpXG4gICAgICB7IGNtLnN0YXRlLnNlbGVjdGluZ1RleHQoZSk7IH1cblxuICAgIGlmIChwb3MgJiYgaGFuZGxlTWFwcGVkQnV0dG9uKGNtLCBidXR0b24sIHBvcywgcmVwZWF0LCBlKSkgeyByZXR1cm4gfVxuXG4gICAgaWYgKGJ1dHRvbiA9PSAxKSB7XG4gICAgICBpZiAocG9zKSB7IGxlZnRCdXR0b25Eb3duKGNtLCBwb3MsIHJlcGVhdCwgZSk7IH1cbiAgICAgIGVsc2UgaWYgKGVfdGFyZ2V0KGUpID09IGRpc3BsYXkuc2Nyb2xsZXIpIHsgZV9wcmV2ZW50RGVmYXVsdChlKTsgfVxuICAgIH0gZWxzZSBpZiAoYnV0dG9uID09IDIpIHtcbiAgICAgIGlmIChwb3MpIHsgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgcG9zKTsgfVxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PSAzKSB7XG4gICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsgY20uZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGUpOyB9XG4gICAgICBlbHNlIHsgZGVsYXlCbHVyRXZlbnQoY20pOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTWFwcGVkQnV0dG9uKGNtLCBidXR0b24sIHBvcywgcmVwZWF0LCBldmVudCkge1xuICAgIHZhciBuYW1lID0gXCJDbGlja1wiO1xuICAgIGlmIChyZXBlYXQgPT0gXCJkb3VibGVcIikgeyBuYW1lID0gXCJEb3VibGVcIiArIG5hbWU7IH1cbiAgICBlbHNlIGlmIChyZXBlYXQgPT0gXCJ0cmlwbGVcIikgeyBuYW1lID0gXCJUcmlwbGVcIiArIG5hbWU7IH1cbiAgICBuYW1lID0gKGJ1dHRvbiA9PSAxID8gXCJMZWZ0XCIgOiBidXR0b24gPT0gMiA/IFwiTWlkZGxlXCIgOiBcIlJpZ2h0XCIpICsgbmFtZTtcblxuICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgIGFkZE1vZGlmaWVyTmFtZXMobmFtZSwgZXZlbnQpLCBldmVudCwgZnVuY3Rpb24gKGJvdW5kKSB7XG4gICAgICBpZiAodHlwZW9mIGJvdW5kID09IFwic3RyaW5nXCIpIHsgYm91bmQgPSBjb21tYW5kc1tib3VuZF07IH1cbiAgICAgIGlmICghYm91bmQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoY20uaXNSZWFkT25seSgpKSB7IGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOyB9XG4gICAgICAgIGRvbmUgPSBib3VuZChjbSwgcG9zKSAhPSBQYXNzO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbmVcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY29uZmlndXJlTW91c2UoY20sIHJlcGVhdCwgZXZlbnQpIHtcbiAgICB2YXIgb3B0aW9uID0gY20uZ2V0T3B0aW9uKFwiY29uZmlndXJlTW91c2VcIik7XG4gICAgdmFyIHZhbHVlID0gb3B0aW9uID8gb3B0aW9uKGNtLCByZXBlYXQsIGV2ZW50KSA6IHt9O1xuICAgIGlmICh2YWx1ZS51bml0ID09IG51bGwpIHtcbiAgICAgIHZhciByZWN0ID0gY2hyb21lT1MgPyBldmVudC5zaGlmdEtleSAmJiBldmVudC5tZXRhS2V5IDogZXZlbnQuYWx0S2V5O1xuICAgICAgdmFsdWUudW5pdCA9IHJlY3QgPyBcInJlY3RhbmdsZVwiIDogcmVwZWF0ID09IFwic2luZ2xlXCIgPyBcImNoYXJcIiA6IHJlcGVhdCA9PSBcImRvdWJsZVwiID8gXCJ3b3JkXCIgOiBcImxpbmVcIjtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmV4dGVuZCA9PSBudWxsIHx8IGNtLmRvYy5leHRlbmQpIHsgdmFsdWUuZXh0ZW5kID0gY20uZG9jLmV4dGVuZCB8fCBldmVudC5zaGlmdEtleTsgfVxuICAgIGlmICh2YWx1ZS5hZGROZXcgPT0gbnVsbCkgeyB2YWx1ZS5hZGROZXcgPSBtYWMgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleTsgfVxuICAgIGlmICh2YWx1ZS5tb3ZlT25EcmFnID09IG51bGwpIHsgdmFsdWUubW92ZU9uRHJhZyA9ICEobWFjID8gZXZlbnQuYWx0S2V5IDogZXZlbnQuY3RybEtleSk7IH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBwb3MsIHJlcGVhdCwgZXZlbnQpIHtcbiAgICBpZiAoaWUpIHsgc2V0VGltZW91dChiaW5kKGVuc3VyZUZvY3VzLCBjbSksIDApOyB9XG4gICAgZWxzZSB7IGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7IH1cblxuICAgIHZhciBiZWhhdmlvciA9IGNvbmZpZ3VyZU1vdXNlKGNtLCByZXBlYXQsIGV2ZW50KTtcblxuICAgIHZhciBzZWwgPSBjbS5kb2Muc2VsLCBjb250YWluZWQ7XG4gICAgaWYgKGNtLm9wdGlvbnMuZHJhZ0Ryb3AgJiYgZHJhZ0FuZERyb3AgJiYgIWNtLmlzUmVhZE9ubHkoKSAmJlxuICAgICAgICByZXBlYXQgPT0gXCJzaW5nbGVcIiAmJiAoY29udGFpbmVkID0gc2VsLmNvbnRhaW5zKHBvcykpID4gLTEgJiZcbiAgICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJhbmdlc1tjb250YWluZWRdKS5mcm9tKCksIHBvcykgPCAwIHx8IHBvcy54UmVsID4gMCkgJiZcbiAgICAgICAgKGNtcChjb250YWluZWQudG8oKSwgcG9zKSA+IDAgfHwgcG9zLnhSZWwgPCAwKSlcbiAgICAgIHsgbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZXZlbnQsIHBvcywgYmVoYXZpb3IpOyB9XG4gICAgZWxzZVxuICAgICAgeyBsZWZ0QnV0dG9uU2VsZWN0KGNtLCBldmVudCwgcG9zLCBiZWhhdmlvcik7IH1cbiAgfVxuXG4gIC8vIFN0YXJ0IGEgdGV4dCBkcmFnLiBXaGVuIGl0IGVuZHMsIHNlZSBpZiBhbnkgZHJhZ2dpbmcgYWN0dWFsbHlcbiAgLy8gaGFwcGVuLCBhbmQgdHJlYXQgYXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuXG4gIGZ1bmN0aW9uIGxlZnRCdXR0b25TdGFydERyYWcoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBtb3ZlZCA9IGZhbHNlO1xuICAgIHZhciBkcmFnRW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKHdlYmtpdCkgeyBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOyB9XG4gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxzZTtcbiAgICAgIG9mZihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZXVwXCIsIGRyYWdFbmQpO1xuICAgICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3VzZU1vdmUpO1xuICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGRyYWdTdGFydCk7XG4gICAgICBvZmYoZGlzcGxheS5zY3JvbGxlciwgXCJkcm9wXCIsIGRyYWdFbmQpO1xuICAgICAgaWYgKCFtb3ZlZCkge1xuICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldylcbiAgICAgICAgICB7IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHBvcywgbnVsbCwgbnVsbCwgYmVoYXZpb3IuZXh0ZW5kKTsgfVxuICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3VzIHByb2JsZW0gaW4gSUU5ICgjMjEyNykgYW5kIENocm9tZSAoIzMwODEpXG4gICAgICAgIGlmICh3ZWJraXQgfHwgaWUgJiYgaWVfdmVyc2lvbiA9PSA5KVxuICAgICAgICAgIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cygpOyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7fSwgMjApOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBtb3VzZU1vdmUgPSBmdW5jdGlvbihlMikge1xuICAgICAgbW92ZWQgPSBtb3ZlZCB8fCBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhldmVudC5jbGllbnRZIC0gZTIuY2xpZW50WSkgPj0gMTA7XG4gICAgfTtcbiAgICB2YXIgZHJhZ1N0YXJ0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbW92ZWQgPSB0cnVlOyB9O1xuICAgIC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLlxuICAgIGlmICh3ZWJraXQpIHsgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9XG4gICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0VuZDtcbiAgICBkcmFnRW5kLmNvcHkgPSAhYmVoYXZpb3IubW92ZU9uRHJhZztcbiAgICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZVxuICAgIGlmIChkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsgfVxuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgZHJhZ0VuZCk7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdXNlTW92ZSk7XG4gICAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnc3RhcnRcIiwgZHJhZ1N0YXJ0KTtcbiAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgZHJhZ0VuZCk7XG5cbiAgICBkZWxheUJsdXJFdmVudChjbSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRm9yVW5pdChjbSwgcG9zLCB1bml0KSB7XG4gICAgaWYgKHVuaXQgPT0gXCJjaGFyXCIpIHsgcmV0dXJuIG5ldyBSYW5nZShwb3MsIHBvcykgfVxuICAgIGlmICh1bml0ID09IFwid29yZFwiKSB7IHJldHVybiBjbS5maW5kV29yZEF0KHBvcykgfVxuICAgIGlmICh1bml0ID09IFwibGluZVwiKSB7IHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSkgfVxuICAgIHZhciByZXN1bHQgPSB1bml0KGNtLCBwb3MpO1xuICAgIHJldHVybiBuZXcgUmFuZ2UocmVzdWx0LmZyb20sIHJlc3VsdC50bylcbiAgfVxuXG4gIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQgdG8gdGV4dCBkcmFnZ2luZy5cbiAgZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZXZlbnQsIHN0YXJ0LCBiZWhhdmlvcikge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICAgIGVfcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgdmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsLCByYW5nZXMgPSBzdGFydFNlbC5yYW5nZXM7XG4gICAgaWYgKGJlaGF2aW9yLmFkZE5ldyAmJiAhYmVoYXZpb3IuZXh0ZW5kKSB7XG4gICAgICBvdXJJbmRleCA9IGRvYy5zZWwuY29udGFpbnMoc3RhcnQpO1xuICAgICAgaWYgKG91ckluZGV4ID4gLTEpXG4gICAgICAgIHsgb3VyUmFuZ2UgPSByYW5nZXNbb3VySW5kZXhdOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucHJpbWFyeSgpO1xuICAgICAgb3VySW5kZXggPSBkb2Muc2VsLnByaW1JbmRleDtcbiAgICB9XG5cbiAgICBpZiAoYmVoYXZpb3IudW5pdCA9PSBcInJlY3RhbmdsZVwiKSB7XG4gICAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldykgeyBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgc3RhcnQpOyB9XG4gICAgICBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwgZXZlbnQsIHRydWUsIHRydWUpO1xuICAgICAgb3VySW5kZXggPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VGb3JVbml0KGNtLCBzdGFydCwgYmVoYXZpb3IudW5pdCk7XG4gICAgICBpZiAoYmVoYXZpb3IuZXh0ZW5kKVxuICAgICAgICB7IG91clJhbmdlID0gZXh0ZW5kUmFuZ2Uob3VyUmFuZ2UsIHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgYmVoYXZpb3IuZXh0ZW5kKTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IG91clJhbmdlID0gcmFuZ2U7IH1cbiAgICB9XG5cbiAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldykge1xuICAgICAgb3VySW5kZXggPSAwO1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTtcbiAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDtcbiAgICB9IGVsc2UgaWYgKG91ckluZGV4ID09IC0xKSB7XG4gICAgICBvdXJJbmRleCA9IHJhbmdlcy5sZW5ndGg7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSxcbiAgICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiBcIiptb3VzZVwifSk7XG4gICAgfSBlbHNlIGlmIChyYW5nZXMubGVuZ3RoID4gMSAmJiByYW5nZXNbb3VySW5kZXhdLmVtcHR5KCkgJiYgYmVoYXZpb3IudW5pdCA9PSBcImNoYXJcIiAmJiAhYmVoYXZpb3IuZXh0ZW5kKSB7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcy5zbGljZShvdXJJbmRleCArIDEpKSwgMCksXG4gICAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9zID0gc3RhcnQ7XG4gICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9zKSB7XG4gICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgeyByZXR1cm4gfVxuICAgICAgbGFzdFBvcyA9IHBvcztcblxuICAgICAgaWYgKGJlaGF2aW9yLnVuaXQgPT0gXCJyZWN0YW5nbGVcIikge1xuICAgICAgICB2YXIgcmFuZ2VzID0gW10sIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgICAgIHZhciBzdGFydENvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBzdGFydC5jaCwgdGFiU2l6ZSk7XG4gICAgICAgIHZhciBwb3NDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQsIHBvcy5jaCwgdGFiU2l6ZSk7XG4gICAgICAgIHZhciBsZWZ0ID0gTWF0aC5taW4oc3RhcnRDb2wsIHBvc0NvbCksIHJpZ2h0ID0gTWF0aC5tYXgoc3RhcnRDb2wsIHBvc0NvbCk7XG4gICAgICAgIGZvciAodmFyIGxpbmUgPSBNYXRoLm1pbihzdGFydC5saW5lLCBwb3MubGluZSksIGVuZCA9IE1hdGgubWluKGNtLmxhc3RMaW5lKCksIE1hdGgubWF4KHN0YXJ0LmxpbmUsIHBvcy5saW5lKSk7XG4gICAgICAgICAgICAgbGluZSA8PSBlbmQ7IGxpbmUrKykge1xuICAgICAgICAgIHZhciB0ZXh0ID0gZ2V0TGluZShkb2MsIGxpbmUpLnRleHQsIGxlZnRQb3MgPSBmaW5kQ29sdW1uKHRleHQsIGxlZnQsIHRhYlNpemUpO1xuICAgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KVxuICAgICAgICAgICAgeyByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKHRleHQubGVuZ3RoID4gbGVmdFBvcylcbiAgICAgICAgICAgIHsgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwgUG9zKGxpbmUsIGZpbmRDb2x1bW4odGV4dCwgcmlnaHQsIHRhYlNpemUpKSkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSB7IHJhbmdlcy5wdXNoKG5ldyBSYW5nZShzdGFydCwgc3RhcnQpKTsgfVxuICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcyksIG91ckluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgIHtvcmlnaW46IFwiKm1vdXNlXCIsIHNjcm9sbDogZmFsc2V9KTtcbiAgICAgICAgY20uc2Nyb2xsSW50b1ZpZXcocG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvbGRSYW5nZSA9IG91clJhbmdlO1xuICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZUZvclVuaXQoY20sIHBvcywgYmVoYXZpb3IudW5pdCk7XG4gICAgICAgIHZhciBhbmNob3IgPSBvbGRSYW5nZS5hbmNob3IsIGhlYWQ7XG4gICAgICAgIGlmIChjbXAocmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkge1xuICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkO1xuICAgICAgICAgIGFuY2hvciA9IG1pblBvcyhvbGRSYW5nZS5mcm9tKCksIHJhbmdlLmFuY2hvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjtcbiAgICAgICAgICBhbmNob3IgPSBtYXhQb3Mob2xkUmFuZ2UudG8oKSwgcmFuZ2UuaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJhbmdlcyQxID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgICByYW5nZXMkMVtvdXJJbmRleF0gPSBiaWRpU2ltcGxpZnkoY20sIG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5jaG9yKSwgaGVhZCkpO1xuICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcyQxLCBvdXJJbmRleCksIHNlbF9tb3VzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVkaXRvclNpemUgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gVXNlZCB0byBlbnN1cmUgdGltZW91dCByZS10cmllcyBkb24ndCBmaXJlIHdoZW4gYW5vdGhlciBleHRlbmRcbiAgICAvLyBoYXBwZW5lZCBpbiB0aGUgbWVhbnRpbWUgKGNsZWFyVGltZW91dCBpc24ndCByZWxpYWJsZSAtLSBhdFxuICAgIC8vIGxlYXN0IG9uIENocm9tZSwgdGhlIHRpbWVvdXRzIHN0aWxsIGhhcHBlbiBldmVuIHdoZW4gY2xlYXJlZCxcbiAgICAvLyBpZiB0aGUgY2xlYXIgaGFwcGVucyBhZnRlciB0aGVpciBzY2hlZHVsZWQgZmlyaW5nIHRpbWUpLlxuICAgIHZhciBjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7XG4gICAgICB2YXIgY3VyQ291bnQgPSArK2NvdW50ZXI7XG4gICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlLCBiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpO1xuICAgICAgaWYgKCFjdXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbXAoY3VyLCBsYXN0UG9zKSAhPSAwKSB7XG4gICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICAgIGV4dGVuZFRvKGN1cik7XG4gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7XG4gICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKVxuICAgICAgICAgIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtpZiAoY291bnRlciA9PSBjdXJDb3VudCkgeyBleHRlbmQoZSk7IH19KSwgMTUwKTsgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG91dHNpZGUgPSBlLmNsaWVudFkgPCBlZGl0b3JTaXplLnRvcCA/IC0yMCA6IGUuY2xpZW50WSA+IGVkaXRvclNpemUuYm90dG9tID8gMjAgOiAwO1xuICAgICAgICBpZiAob3V0c2lkZSkgeyBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjb3VudGVyICE9IGN1ckNvdW50KSB7IHJldHVybiB9XG4gICAgICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgKz0gb3V0c2lkZTtcbiAgICAgICAgICBleHRlbmQoZSk7XG4gICAgICAgIH0pLCA1MCk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb25lKGUpIHtcbiAgICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSBmYWxzZTtcbiAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTtcbiAgICAgIC8vIElmIGUgaXMgbnVsbCBvciB1bmRlZmluZWQgd2UgaW50ZXJwcmV0IHRoaXMgYXMgc29tZW9uZSB0cnlpbmdcbiAgICAgIC8vIHRvIGV4cGxpY2l0bHkgY2FuY2VsIHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gdGhlIHVzZXJcbiAgICAgIC8vIGxldHRpbmcgZ28gb2YgdGhlIG1vdXNlIGJ1dHRvbi5cbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIG9mZihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCB1cCk7XG4gICAgICBkb2MuaGlzdG9yeS5sYXN0U2VsT3JpZ2luID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLmJ1dHRvbnMgPT09IDAgfHwgIWVfYnV0dG9uKGUpKSB7IGRvbmUoZSk7IH1cbiAgICAgIGVsc2UgeyBleHRlbmQoZSk7IH1cbiAgICB9KTtcbiAgICB2YXIgdXAgPSBvcGVyYXRpb24oY20sIGRvbmUpO1xuICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSB1cDtcbiAgICBvbihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCB1cCk7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gbW91c2Utc2VsZWN0aW5nIHRvIGFkanVzdCB0aGUgYW5jaG9yIHRvIHRoZSBwcm9wZXIgc2lkZVxuICAvLyBvZiBhIGJpZGkganVtcCBkZXBlbmRpbmcgb24gdGhlIHZpc3VhbCBwb3NpdGlvbiBvZiB0aGUgaGVhZC5cbiAgZnVuY3Rpb24gYmlkaVNpbXBsaWZ5KGNtLCByYW5nZSkge1xuICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3I7XG4gICAgdmFyIGhlYWQgPSByYW5nZS5oZWFkO1xuICAgIHZhciBhbmNob3JMaW5lID0gZ2V0TGluZShjbS5kb2MsIGFuY2hvci5saW5lKTtcbiAgICBpZiAoY21wKGFuY2hvciwgaGVhZCkgPT0gMCAmJiBhbmNob3Iuc3RpY2t5ID09IGhlYWQuc3RpY2t5KSB7IHJldHVybiByYW5nZSB9XG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIoYW5jaG9yTGluZSk7XG4gICAgaWYgKCFvcmRlcikgeyByZXR1cm4gcmFuZ2UgfVxuICAgIHZhciBpbmRleCA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGFuY2hvci5jaCwgYW5jaG9yLnN0aWNreSksIHBhcnQgPSBvcmRlcltpbmRleF07XG4gICAgaWYgKHBhcnQuZnJvbSAhPSBhbmNob3IuY2ggJiYgcGFydC50byAhPSBhbmNob3IuY2gpIHsgcmV0dXJuIHJhbmdlIH1cbiAgICB2YXIgYm91bmRhcnkgPSBpbmRleCArICgocGFydC5mcm9tID09IGFuY2hvci5jaCkgPT0gKHBhcnQubGV2ZWwgIT0gMSkgPyAwIDogMSk7XG4gICAgaWYgKGJvdW5kYXJ5ID09IDAgfHwgYm91bmRhcnkgPT0gb3JkZXIubGVuZ3RoKSB7IHJldHVybiByYW5nZSB9XG5cbiAgICAvLyBDb21wdXRlIHRoZSByZWxhdGl2ZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIGhlYWQgY29tcGFyZWQgdG8gdGhlXG4gICAgLy8gYW5jaG9yICg8MCBpcyB0byB0aGUgbGVmdCwgPjAgdG8gdGhlIHJpZ2h0KVxuICAgIHZhciBsZWZ0U2lkZTtcbiAgICBpZiAoaGVhZC5saW5lICE9IGFuY2hvci5saW5lKSB7XG4gICAgICBsZWZ0U2lkZSA9IChoZWFkLmxpbmUgLSBhbmNob3IubGluZSkgKiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcImx0clwiID8gMSA6IC0xKSA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBoZWFkSW5kZXggPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBoZWFkLmNoLCBoZWFkLnN0aWNreSk7XG4gICAgICB2YXIgZGlyID0gaGVhZEluZGV4IC0gaW5kZXggfHwgKGhlYWQuY2ggLSBhbmNob3IuY2gpICogKHBhcnQubGV2ZWwgPT0gMSA/IC0xIDogMSk7XG4gICAgICBpZiAoaGVhZEluZGV4ID09IGJvdW5kYXJ5IC0gMSB8fCBoZWFkSW5kZXggPT0gYm91bmRhcnkpXG4gICAgICAgIHsgbGVmdFNpZGUgPSBkaXIgPCAwOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgbGVmdFNpZGUgPSBkaXIgPiAwOyB9XG4gICAgfVxuXG4gICAgdmFyIHVzZVBhcnQgPSBvcmRlcltib3VuZGFyeSArIChsZWZ0U2lkZSA/IC0xIDogMCldO1xuICAgIHZhciBmcm9tID0gbGVmdFNpZGUgPT0gKHVzZVBhcnQubGV2ZWwgPT0gMSk7XG4gICAgdmFyIGNoID0gZnJvbSA/IHVzZVBhcnQuZnJvbSA6IHVzZVBhcnQudG8sIHN0aWNreSA9IGZyb20gPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgIHJldHVybiBhbmNob3IuY2ggPT0gY2ggJiYgYW5jaG9yLnN0aWNreSA9PSBzdGlja3kgPyByYW5nZSA6IG5ldyBSYW5nZShuZXcgUG9zKGFuY2hvci5saW5lLCBjaCwgc3RpY2t5KSwgaGVhZClcbiAgfVxuXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGhhcHBlbmVkIGluIHRoZSBndXR0ZXIsIGFuZCBmaXJlcyB0aGVcbiAgLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LlxuICBmdW5jdGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlwZSwgcHJldmVudCkge1xuICAgIHZhciBtWCwgbVk7XG4gICAgaWYgKGUudG91Y2hlcykge1xuICAgICAgbVggPSBlLnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIG1ZID0gZS50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7IG1YID0gZS5jbGllbnRYOyBtWSA9IGUuY2xpZW50WTsgfVxuICAgICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIH1cbiAgICBpZiAobVggPj0gTWF0aC5mbG9vcihjbS5kaXNwbGF5Lmd1dHRlcnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgaWYgKHByZXZlbnQpIHsgZV9wcmV2ZW50RGVmYXVsdChlKTsgfVxuXG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIHZhciBsaW5lQm94ID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20gfHwgIWhhc0hhbmRsZXIoY20sIHR5cGUpKSB7IHJldHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkgfVxuICAgIG1ZIC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgZyA9IGRpc3BsYXkuZ3V0dGVycy5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKGcgJiYgZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+PSBtWCkge1xuICAgICAgICB2YXIgbGluZSA9IGxpbmVBdEhlaWdodChjbS5kb2MsIG1ZKTtcbiAgICAgICAgdmFyIGd1dHRlciA9IGNtLmRpc3BsYXkuZ3V0dGVyU3BlY3NbaV07XG4gICAgICAgIHNpZ25hbChjbSwgdHlwZSwgY20sIGxpbmUsIGd1dHRlci5jbGFzc05hbWUsIGUpO1xuICAgICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xpY2tJbkd1dHRlcihjbSwgZSkge1xuICAgIHJldHVybiBndXR0ZXJFdmVudChjbSwgZSwgXCJndXR0ZXJDbGlja1wiLCB0cnVlKVxuICB9XG5cbiAgLy8gQ09OVEVYVCBNRU5VIEhBTkRMSU5HXG5cbiAgLy8gVG8gbWFrZSB0aGUgY29udGV4dCBtZW51IHdvcmssIHdlIG5lZWQgdG8gYnJpZWZseSB1bmhpZGUgdGhlXG4gIC8vIHRleHRhcmVhIChtYWtpbmcgaXQgYXMgdW5vYnRydXNpdmUgYXMgcG9zc2libGUpIHRvIGxldCB0aGVcbiAgLy8gcmlnaHQtY2xpY2sgdGFrZSBlZmZlY3Qgb24gaXQuXG4gIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHtcbiAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSwgXCJjb250ZXh0bWVudVwiKSkgeyByZXR1cm4gfVxuICAgIGlmICghY2FwdHVyZVJpZ2h0Q2xpY2spIHsgY20uZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGUpOyB9XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSB7XG4gICAgaWYgKCFoYXNIYW5kbGVyKGNtLCBcImd1dHRlckNvbnRleHRNZW51XCIpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCBcImd1dHRlckNvbnRleHRNZW51XCIsIGZhbHNlKVxuICB9XG5cbiAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKGNtKSB7XG4gICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXFxzKmNtLXMtXFxTKy9nLCBcIlwiKSArXG4gICAgICBjbS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxccylcXHMqL2csIFwiIGNtLXMtXCIpO1xuICAgIGNsZWFyQ2FjaGVzKGNtKTtcbiAgfVxuXG4gIHZhciBJbml0ID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiBcIkNvZGVNaXJyb3IuSW5pdFwifX07XG5cbiAgdmFyIGRlZmF1bHRzID0ge307XG4gIHZhciBvcHRpb25IYW5kbGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGRlZmluZU9wdGlvbnMoQ29kZU1pcnJvcikge1xuICAgIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iub3B0aW9uSGFuZGxlcnM7XG5cbiAgICBmdW5jdGlvbiBvcHRpb24obmFtZSwgZGVmbHQsIGhhbmRsZSwgbm90T25Jbml0KSB7XG4gICAgICBDb2RlTWlycm9yLmRlZmF1bHRzW25hbWVdID0gZGVmbHQ7XG4gICAgICBpZiAoaGFuZGxlKSB7IG9wdGlvbkhhbmRsZXJzW25hbWVdID1cbiAgICAgICAgbm90T25Jbml0ID8gZnVuY3Rpb24gKGNtLCB2YWwsIG9sZCkge2lmIChvbGQgIT0gSW5pdCkgeyBoYW5kbGUoY20sIHZhbCwgb2xkKTsgfX0gOiBoYW5kbGU7IH1cbiAgICB9XG5cbiAgICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbiA9IG9wdGlvbjtcblxuICAgIC8vIFBhc3NlZCB0byBvcHRpb24gaGFuZGxlcnMgd2hlbiB0aGVyZSBpcyBubyBvbGQgdmFsdWUuXG4gICAgQ29kZU1pcnJvci5Jbml0ID0gSW5pdDtcblxuICAgIC8vIFRoZXNlIHR3byBhcmUsIG9uIGluaXQsIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHRoZXlcbiAgICAvLyBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZWRpdG9yIGNhbiBzdGFydCBhdCBhbGwuXG4gICAgb3B0aW9uKFwidmFsdWVcIiwgXCJcIiwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLnNldFZhbHVlKHZhbCk7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcIm1vZGVcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRvYy5tb2RlT3B0aW9uID0gdmFsO1xuICAgICAgbG9hZE1vZGUoY20pO1xuICAgIH0sIHRydWUpO1xuXG4gICAgb3B0aW9uKFwiaW5kZW50VW5pdFwiLCAyLCBsb2FkTW9kZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiaW5kZW50V2l0aFRhYnNcIiwgZmFsc2UpO1xuICAgIG9wdGlvbihcInNtYXJ0SW5kZW50XCIsIHRydWUpO1xuICAgIG9wdGlvbihcInRhYlNpemVcIiwgNCwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICByZXNldE1vZGVTdGF0ZShjbSk7XG4gICAgICBjbGVhckNhY2hlcyhjbSk7XG4gICAgICByZWdDaGFuZ2UoY20pO1xuICAgIH0sIHRydWUpO1xuXG4gICAgb3B0aW9uKFwibGluZVNlcGFyYXRvclwiLCBudWxsLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgY20uZG9jLmxpbmVTZXAgPSB2YWw7XG4gICAgICBpZiAoIXZhbCkgeyByZXR1cm4gfVxuICAgICAgdmFyIG5ld0JyZWFrcyA9IFtdLCBsaW5lTm8gPSBjbS5kb2MuZmlyc3Q7XG4gICAgICBjbS5kb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHtcbiAgICAgICAgICB2YXIgZm91bmQgPSBsaW5lLnRleHQuaW5kZXhPZih2YWwsIHBvcyk7XG4gICAgICAgICAgaWYgKGZvdW5kID09IC0xKSB7IGJyZWFrIH1cbiAgICAgICAgICBwb3MgPSBmb3VuZCArIHZhbC5sZW5ndGg7XG4gICAgICAgICAgbmV3QnJlYWtzLnB1c2goUG9zKGxpbmVObywgZm91bmQpKTtcbiAgICAgICAgfVxuICAgICAgICBsaW5lTm8rKztcbiAgICAgIH0pO1xuICAgICAgZm9yICh2YXIgaSA9IG5ld0JyZWFrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCB2YWwsIG5ld0JyZWFrc1tpXSwgUG9zKG5ld0JyZWFrc1tpXS5saW5lLCBuZXdCcmVha3NbaV0uY2ggKyB2YWwubGVuZ3RoKSk7IH1cbiAgICB9KTtcbiAgICBvcHRpb24oXCJzcGVjaWFsQ2hhcnNcIiwgL1tcXHUwMDAwLVxcdTAwMWZcXHUwMDdmLVxcdTAwOWZcXHUwMGFkXFx1MDYxY1xcdTIwMGItXFx1MjAwZlxcdTIwMjhcXHUyMDI5XFx1ZmVmZlxcdWZmZjktXFx1ZmZmY10vZywgZnVuY3Rpb24gKGNtLCB2YWwsIG9sZCkge1xuICAgICAgY20uc3RhdGUuc3BlY2lhbENoYXJzID0gbmV3IFJlZ0V4cCh2YWwuc291cmNlICsgKHZhbC50ZXN0KFwiXFx0XCIpID8gXCJcIiA6IFwifFxcdFwiKSwgXCJnXCIpO1xuICAgICAgaWYgKG9sZCAhPSBJbml0KSB7IGNtLnJlZnJlc2goKTsgfVxuICAgIH0pO1xuICAgIG9wdGlvbihcInNwZWNpYWxDaGFyUGxhY2Vob2xkZXJcIiwgZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVmcmVzaCgpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJlbGVjdHJpY0NoYXJzXCIsIHRydWUpO1xuICAgIG9wdGlvbihcImlucHV0U3R5bGVcIiwgbW9iaWxlID8gXCJjb250ZW50ZWRpdGFibGVcIiA6IFwidGV4dGFyZWFcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXRTdHlsZSBjYW4gbm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvclwiKSAvLyBGSVhNRVxuICAgIH0sIHRydWUpO1xuICAgIG9wdGlvbihcInNwZWxsY2hlY2tcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5nZXRJbnB1dEZpZWxkKCkuc3BlbGxjaGVjayA9IHZhbDsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiYXV0b2NvcnJlY3RcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5nZXRJbnB1dEZpZWxkKCkuYXV0b2NvcnJlY3QgPSB2YWw7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcImF1dG9jYXBpdGFsaXplXCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLmF1dG9jYXBpdGFsaXplID0gdmFsOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJydGxNb3ZlVmlzdWFsbHlcIiwgIXdpbmRvd3MpO1xuICAgIG9wdGlvbihcIndob2xlTGluZVVwZGF0ZUJlZm9yZVwiLCB0cnVlKTtcblxuICAgIG9wdGlvbihcInRoZW1lXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbiAoY20pIHtcbiAgICAgIHRoZW1lQ2hhbmdlZChjbSk7XG4gICAgICB1cGRhdGVHdXR0ZXJzKGNtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJrZXlNYXBcIiwgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtcbiAgICAgIHZhciBuZXh0ID0gZ2V0S2V5TWFwKHZhbCk7XG4gICAgICB2YXIgcHJldiA9IG9sZCAhPSBJbml0ICYmIGdldEtleU1hcChvbGQpO1xuICAgICAgaWYgKHByZXYgJiYgcHJldi5kZXRhY2gpIHsgcHJldi5kZXRhY2goY20sIG5leHQpOyB9XG4gICAgICBpZiAobmV4dC5hdHRhY2gpIHsgbmV4dC5hdHRhY2goY20sIHByZXYgfHwgbnVsbCk7IH1cbiAgICB9KTtcbiAgICBvcHRpb24oXCJleHRyYUtleXNcIiwgbnVsbCk7XG4gICAgb3B0aW9uKFwiY29uZmlndXJlTW91c2VcIiwgbnVsbCk7XG5cbiAgICBvcHRpb24oXCJsaW5lV3JhcHBpbmdcIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZ3V0dGVyc1wiLCBbXSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MgPSBnZXRHdXR0ZXJzKHZhbCwgY20ub3B0aW9ucy5saW5lTnVtYmVycyk7XG4gICAgICB1cGRhdGVHdXR0ZXJzKGNtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJmaXhlZEd1dHRlclwiLCB0cnVlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSB2YWwgPyBjb21wZW5zYXRlRm9ySFNjcm9sbChjbS5kaXNwbGF5KSArIFwicHhcIiA6IFwiMFwiO1xuICAgICAgY20ucmVmcmVzaCgpO1xuICAgIH0sIHRydWUpO1xuICAgIG9wdGlvbihcImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyXCIsIGZhbHNlLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHVwZGF0ZVNjcm9sbGJhcnMoY20pOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJzY3JvbGxiYXJTdHlsZVwiLCBcIm5hdGl2ZVwiLCBmdW5jdGlvbiAoY20pIHtcbiAgICAgIGluaXRTY3JvbGxiYXJzKGNtKTtcbiAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20pO1xuICAgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChjbS5kb2Muc2Nyb2xsVG9wKTtcbiAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGNtLmRvYy5zY3JvbGxMZWZ0KTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJsaW5lTnVtYmVyc1wiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MgPSBnZXRHdXR0ZXJzKGNtLm9wdGlvbnMuZ3V0dGVycywgdmFsKTtcbiAgICAgIHVwZGF0ZUd1dHRlcnMoY20pO1xuICAgIH0sIHRydWUpO1xuICAgIG9wdGlvbihcImZpcnN0TGluZU51bWJlclwiLCAxLCB1cGRhdGVHdXR0ZXJzLCB0cnVlKTtcbiAgICBvcHRpb24oXCJsaW5lTnVtYmVyRm9ybWF0dGVyXCIsIGZ1bmN0aW9uIChpbnRlZ2VyKSB7IHJldHVybiBpbnRlZ2VyOyB9LCB1cGRhdGVHdXR0ZXJzLCB0cnVlKTtcbiAgICBvcHRpb24oXCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZ1wiLCBmYWxzZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTtcblxuICAgIG9wdGlvbihcInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudVwiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJsaW5lV2lzZUNvcHlDdXRcIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicGFzdGVMaW5lc1BlclNlbGVjdGlvblwiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJzZWxlY3Rpb25zTWF5VG91Y2hcIiwgZmFsc2UpO1xuXG4gICAgb3B0aW9uKFwicmVhZE9ubHlcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBpZiAodmFsID09IFwibm9jdXJzb3JcIikge1xuICAgICAgICBvbkJsdXIoY20pO1xuICAgICAgICBjbS5kaXNwbGF5LmlucHV0LmJsdXIoKTtcbiAgICAgIH1cbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVhZE9ubHlDaGFuZ2VkKHZhbCk7XG4gICAgfSk7XG4gICAgb3B0aW9uKFwiZGlzYWJsZUlucHV0XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge2lmICghdmFsKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsgfX0sIHRydWUpO1xuICAgIG9wdGlvbihcImRyYWdEcm9wXCIsIHRydWUsIGRyYWdEcm9wQ2hhbmdlZCk7XG4gICAgb3B0aW9uKFwiYWxsb3dEcm9wRmlsZVR5cGVzXCIsIG51bGwpO1xuXG4gICAgb3B0aW9uKFwiY3Vyc29yQmxpbmtSYXRlXCIsIDUzMCk7XG4gICAgb3B0aW9uKFwiY3Vyc29yU2Nyb2xsTWFyZ2luXCIsIDApO1xuICAgIG9wdGlvbihcImN1cnNvckhlaWdodFwiLCAxLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpO1xuICAgIG9wdGlvbihcInNpbmdsZUN1cnNvckhlaWdodFBlckxpbmVcIiwgdHJ1ZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTtcbiAgICBvcHRpb24oXCJ3b3JrVGltZVwiLCAxMDApO1xuICAgIG9wdGlvbihcIndvcmtEZWxheVwiLCAxMDApO1xuICAgIG9wdGlvbihcImZsYXR0ZW5TcGFuc1wiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiYWRkTW9kZUNsYXNzXCIsIGZhbHNlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicG9sbEludGVydmFsXCIsIDEwMCk7XG4gICAgb3B0aW9uKFwidW5kb0RlcHRoXCIsIDIwMCwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHZhbDsgfSk7XG4gICAgb3B0aW9uKFwiaGlzdG9yeUV2ZW50RGVsYXlcIiwgMTI1MCk7XG4gICAgb3B0aW9uKFwidmlld3BvcnRNYXJnaW5cIiwgMTAsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVmcmVzaCgpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJtYXhIaWdobGlnaHRMZW5ndGhcIiwgMTAwMDAsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTtcbiAgICBvcHRpb24oXCJtb3ZlSW5wdXRXaXRoQ3Vyc29yXCIsIHRydWUsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKTsgfVxuICAgIH0pO1xuXG4gICAgb3B0aW9uKFwidGFiaW5kZXhcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKS50YWJJbmRleCA9IHZhbCB8fCBcIlwiOyB9KTtcbiAgICBvcHRpb24oXCJhdXRvZm9jdXNcIiwgbnVsbCk7XG4gICAgb3B0aW9uKFwiZGlyZWN0aW9uXCIsIFwibHRyXCIsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kb2Muc2V0RGlyZWN0aW9uKHZhbCk7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcInBocmFzZXNcIiwgbnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBkcmFnRHJvcENoYW5nZWQoY20sIHZhbHVlLCBvbGQpIHtcbiAgICB2YXIgd2FzT24gPSBvbGQgJiYgb2xkICE9IEluaXQ7XG4gICAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHtcbiAgICAgIHZhciBmdW5jcyA9IGNtLmRpc3BsYXkuZHJhZ0Z1bmN0aW9ucztcbiAgICAgIHZhciB0b2dnbGUgPSB2YWx1ZSA/IG9uIDogb2ZmO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGZ1bmNzLnN0YXJ0KTtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdlbnRlclwiLCBmdW5jcy5lbnRlcik7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnb3ZlclwiLCBmdW5jcy5vdmVyKTtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdsZWF2ZVwiLCBmdW5jcy5sZWF2ZSk7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcm9wXCIsIGZ1bmNzLmRyb3ApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChjbSkge1xuICAgIGlmIChjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSBcIlwiO1xuICAgICAgY20uZGlzcGxheS5zaXplcldpZHRoID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci13cmFwXCIpO1xuICAgICAgZmluZE1heExpbmUoY20pO1xuICAgIH1cbiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTtcbiAgICByZWdDaGFuZ2UoY20pO1xuICAgIGNsZWFyQ2FjaGVzKGNtKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVwZGF0ZVNjcm9sbGJhcnMoY20pOyB9LCAxMDApO1xuICB9XG5cbiAgLy8gQSBDb2RlTWlycm9yIGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZWRpdG9yLiBUaGlzIGlzIHRoZSBvYmplY3RcbiAgLy8gdGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguXG5cbiAgZnVuY3Rpb24gQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IpKSB7IHJldHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307XG4gICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuXG4gICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFsc2UpO1xuXG4gICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7XG4gICAgaWYgKHR5cGVvZiBkb2MgPT0gXCJzdHJpbmdcIikgeyBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlLCBudWxsLCBvcHRpb25zLmxpbmVTZXBhcmF0b3IsIG9wdGlvbnMuZGlyZWN0aW9uKTsgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMubW9kZSkgeyBkb2MubW9kZU9wdGlvbiA9IG9wdGlvbnMubW9kZTsgfVxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdmFyIGlucHV0ID0gbmV3IENvZGVNaXJyb3IuaW5wdXRTdHlsZXNbb3B0aW9ucy5pbnB1dFN0eWxlXSh0aGlzKTtcbiAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG5ldyBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0LCBvcHRpb25zKTtcbiAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7XG4gICAgdGhlbWVDaGFuZ2VkKHRoaXMpO1xuICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgIHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9IFwiIENvZGVNaXJyb3Itd3JhcFwiOyB9XG4gICAgaW5pdFNjcm9sbGJhcnModGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFwcyBhZGRlZCBieSBhZGRLZXlNYXBcbiAgICAgIG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRPdmVybGF5XG4gICAgICBtb2RlR2VuOiAwLCAgIC8vIGJ1bXBlZCB3aGVuIG1vZGUvb3ZlcmxheSBjaGFuZ2VzLCB1c2VkIHRvIGludmFsaWRhdGUgaGlnaGxpZ2h0aW5nIGluZm9cbiAgICAgIG92ZXJ3cml0ZTogZmFsc2UsXG4gICAgICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1c2VkIHRvIGRpc2FibGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9ubHkgbW9kZVxuICAgICAgcGFzdGVJbmNvbWluZzogLTEsIGN1dEluY29taW5nOiAtMSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGluIGlucHV0LnBvbGxcbiAgICAgIHNlbGVjdGluZ1RleHQ6IGZhbHNlLFxuICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSwgLy8gc3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dFxuICAgICAga2V5U2VxOiBudWxsLCAgLy8gVW5maW5pc2hlZCBrZXkgc2VxdWVuY2VcbiAgICAgIHNwZWNpYWxDaGFyczogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgeyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH1cblxuICAgIC8vIE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzXG4gICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWRcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKSB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfVxuXG4gICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpO1xuICAgIGVuc3VyZUdsb2JhbEhhbmRsZXJzKCk7XG5cbiAgICBzdGFydE9wZXJhdGlvbih0aGlzKTtcbiAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICBhdHRhY2hEb2ModGhpcywgZG9jKTtcblxuICAgIGlmICgob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgfHwgdGhpcy5oYXNGb2N1cygpKVxuICAgICAgeyBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb25CbHVyKHRoaXMpOyB9XG5cbiAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpIHsgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgICB7IG9wdGlvbkhhbmRsZXJzW29wdF0odGhpcywgb3B0aW9uc1tvcHRdLCBJbml0KTsgfSB9XG4gICAgbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgodGhpcyk7XG4gICAgaWYgKG9wdGlvbnMuZmluaXNoSW5pdCkgeyBvcHRpb25zLmZpbmlzaEluaXQodGhpcyk7IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkgeyBpbml0SG9va3NbaV0odGhpcyk7IH1cbiAgICBlbmRPcGVyYXRpb24odGhpcyk7XG4gICAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2luY2UgaXQgYnJlYWtzIHRleHRcbiAgICAvLyBtZWFzdXJpbmcgb24gbGluZSB3cmFwcGluZyBib3VuZGFyaWVzLlxuICAgIGlmICh3ZWJraXQgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiZcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gXCJvcHRpbWl6ZWxlZ2liaWxpdHlcIilcbiAgICAgIHsgZGlzcGxheS5saW5lRGl2LnN0eWxlLnRleHRSZW5kZXJpbmcgPSBcImF1dG9cIjsgfVxuICB9XG5cbiAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICBDb2RlTWlycm9yLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gIC8vIEZ1bmN0aW9ucyB0byBydW4gd2hlbiBvcHRpb25zIGFyZSBjaGFuZ2VkLlxuICBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzID0gb3B0aW9uSGFuZGxlcnM7XG5cbiAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBpbml0aWFsaXppbmcgdGhlIGVkaXRvclxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXk7XG4gICAgb24oZC5zY3JvbGxlciwgXCJtb3VzZWRvd25cIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpO1xuICAgIC8vIE9sZGVyIElFJ3Mgd2lsbCBub3QgZmlyZSBhIHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSlcbiAgICAgIHsgb24oZC5zY3JvbGxlciwgXCJkYmxjbGlja1wiLCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7XG4gICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgdmFyIHdvcmQgPSBjbS5maW5kV29yZEF0KHBvcyk7XG4gICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9yLCB3b3JkLmhlYWQpO1xuICAgICAgfSkpOyB9XG4gICAgZWxzZVxuICAgICAgeyBvbihkLnNjcm9sbGVyLCBcImRibGNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7IH1cbiAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdFxuICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXNcbiAgICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciB0aGVzZSBicm93c2Vycy5cbiAgICBvbihkLnNjcm9sbGVyLCBcImNvbnRleHRtZW51XCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkNvbnRleHRNZW51KGNtLCBlKTsgfSk7XG4gICAgb24oZC5pbnB1dC5nZXRGaWVsZCgpLCBcImNvbnRleHRtZW51XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWQuc2Nyb2xsZXIuY29udGFpbnMoZS50YXJnZXQpKSB7IG9uQ29udGV4dE1lbnUoY20sIGUpOyB9XG4gICAgfSk7XG5cbiAgICAvLyBVc2VkIHRvIHN1cHByZXNzIG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdoZW4gYSB0b3VjaCBoYXBwZW5zXG4gICAgdmFyIHRvdWNoRmluaXNoZWQsIHByZXZUb3VjaCA9IHtlbmQ6IDB9O1xuICAgIGZ1bmN0aW9uIGZpbmlzaFRvdWNoKCkge1xuICAgICAgaWYgKGQuYWN0aXZlVG91Y2gpIHtcbiAgICAgICAgdG91Y2hGaW5pc2hlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZC5hY3RpdmVUb3VjaCA9IG51bGw7IH0sIDEwMDApO1xuICAgICAgICBwcmV2VG91Y2ggPSBkLmFjdGl2ZVRvdWNoO1xuICAgICAgICBwcmV2VG91Y2guZW5kID0gK25ldyBEYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkge1xuICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggIT0gMSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgdmFyIHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgcmV0dXJuIHRvdWNoLnJhZGl1c1ggPD0gMSAmJiB0b3VjaC5yYWRpdXNZIDw9IDFcbiAgICB9XG4gICAgZnVuY3Rpb24gZmFyQXdheSh0b3VjaCwgb3RoZXIpIHtcbiAgICAgIGlmIChvdGhlci5sZWZ0ID09IG51bGwpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgdmFyIGR4ID0gb3RoZXIubGVmdCAtIHRvdWNoLmxlZnQsIGR5ID0gb3RoZXIudG9wIC0gdG91Y2gudG9wO1xuICAgICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5ID4gMjAgKiAyMFxuICAgIH1cbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpICYmICFpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkgJiYgIWNsaWNrSW5HdXR0ZXIoY20sIGUpKSB7XG4gICAgICAgIGQuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlzaGVkKTtcbiAgICAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTtcbiAgICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBtb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbm93IC0gcHJldlRvdWNoLmVuZCA8PSAzMDAgPyBwcmV2VG91Y2ggOiBudWxsfTtcbiAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5wYWdlWTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7IGQuYWN0aXZlVG91Y2gubW92ZWQgPSB0cnVlOyB9XG4gICAgfSk7XG4gICAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaGVuZFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRvdWNoID0gZC5hY3RpdmVUb3VjaDtcbiAgICAgIGlmICh0b3VjaCAmJiAhZXZlbnRJbldpZGdldChkLCBlKSAmJiB0b3VjaC5sZWZ0ICE9IG51bGwgJiZcbiAgICAgICAgICAhdG91Y2gubW92ZWQgJiYgbmV3IERhdGUgLSB0b3VjaC5zdGFydCA8IDMwMCkge1xuICAgICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihkLmFjdGl2ZVRvdWNoLCBcInBhZ2VcIiksIHJhbmdlO1xuICAgICAgICBpZiAoIXRvdWNoLnByZXYgfHwgZmFyQXdheSh0b3VjaCwgdG91Y2gucHJldikpIC8vIFNpbmdsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gbmV3IFJhbmdlKHBvcywgcG9zKTsgfVxuICAgICAgICBlbHNlIGlmICghdG91Y2gucHJldi5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYucHJldikpIC8vIERvdWJsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gY20uZmluZFdvcmRBdChwb3MpOyB9XG4gICAgICAgIGVsc2UgLy8gVHJpcGxlIHRhcFxuICAgICAgICAgIHsgcmFuZ2UgPSBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSk7IH1cbiAgICAgICAgY20uc2V0U2VsZWN0aW9uKHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCk7XG4gICAgICAgIGNtLmZvY3VzKCk7XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICB9XG4gICAgICBmaW5pc2hUb3VjaCgpO1xuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2hjYW5jZWxcIiwgZmluaXNoVG91Y2gpO1xuXG4gICAgLy8gU3luYyBzY3JvbGxpbmcgYmV0d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJsZVxuICAgIC8vIGFyZWEsIGVuc3VyZSB2aWV3cG9ydCBpcyB1cGRhdGVkIHdoZW4gc2Nyb2xsaW5nLlxuICAgIG9uKGQuc2Nyb2xsZXIsIFwic2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCkge1xuICAgICAgICB1cGRhdGVTY3JvbGxUb3AoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsVG9wKTtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgZC5zY3JvbGxlci5zY3JvbGxMZWZ0LCB0cnVlKTtcbiAgICAgICAgc2lnbmFsKGNtLCBcInNjcm9sbFwiLCBjbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gd2hlZWwgZXZlbnRzIGluIG9yZGVyIHRvIHRyeSBhbmQgdXBkYXRlIHRoZSB2aWV3cG9ydCBvbiB0aW1lLlxuICAgIG9uKGQuc2Nyb2xsZXIsIFwibW91c2V3aGVlbFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25TY3JvbGxXaGVlbChjbSwgZSk7IH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwiRE9NTW91c2VTY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uU2Nyb2xsV2hlZWwoY20sIGUpOyB9KTtcblxuICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nXG4gICAgb24oZC53cmFwcGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTtcblxuICAgIGQuZHJhZ0Z1bmN0aW9ucyA9IHtcbiAgICAgIGVudGVyOiBmdW5jdGlvbiAoZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IGVfc3RvcChlKTsgfX0sXG4gICAgICBvdmVyOiBmdW5jdGlvbiAoZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20sIGUpOyBlX3N0b3AoZSk7IH19LFxuICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkRyYWdTdGFydChjbSwgZSk7IH0sXG4gICAgICBkcm9wOiBvcGVyYXRpb24oY20sIG9uRHJvcCksXG4gICAgICBsZWF2ZTogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBjbGVhckRyYWdDdXJzb3IoY20pOyB9fVxuICAgIH07XG5cbiAgICB2YXIgaW5wID0gZC5pbnB1dC5nZXRGaWVsZCgpO1xuICAgIG9uKGlucCwgXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25LZXlVcC5jYWxsKGNtLCBlKTsgfSk7XG4gICAgb24oaW5wLCBcImtleWRvd25cIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTtcbiAgICBvbihpbnAsIFwia2V5cHJlc3NcIiwgb3BlcmF0aW9uKGNtLCBvbktleVByZXNzKSk7XG4gICAgb24oaW5wLCBcImZvY3VzXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkZvY3VzKGNtLCBlKTsgfSk7XG4gICAgb24oaW5wLCBcImJsdXJcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uQmx1cihjbSwgZSk7IH0pO1xuICB9XG5cbiAgdmFyIGluaXRIb29rcyA9IFtdO1xuICBDb2RlTWlycm9yLmRlZmluZUluaXRIb29rID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGluaXRIb29rcy5wdXNoKGYpOyB9O1xuXG4gIC8vIEluZGVudCB0aGUgZ2l2ZW4gbGluZS4gVGhlIGhvdyBwYXJhbWV0ZXIgY2FuIGJlIFwic21hcnRcIixcbiAgLy8gXCJhZGRcIi9udWxsLCBcInN1YnRyYWN0XCIsIG9yIFwicHJldlwiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2VcbiAgLy8gKHR5cGljYWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eVxuICAvLyBsaW5lcyBhcmUgbm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRoZSBtb2RlIHJldHVybnMgUGFzc1xuICAvLyBhcmUgbGVmdCBhbG9uZS5cbiAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgc3RhdGU7XG4gICAgaWYgKGhvdyA9PSBudWxsKSB7IGhvdyA9IFwiYWRkXCI7IH1cbiAgICBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIFwicHJldlwiIHdoZW4gdGhlIG1vZGUgZG9lc24ndCBoYXZlIGFuIGluZGVudGF0aW9uXG4gICAgICAvLyBtZXRob2QuXG4gICAgICBpZiAoIWRvYy5tb2RlLmluZGVudCkgeyBob3cgPSBcInByZXZcIjsgfVxuICAgICAgZWxzZSB7IHN0YXRlID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgbikuc3RhdGU7IH1cbiAgICB9XG5cbiAgICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIHRhYlNpemUpO1xuICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxccyovKVswXSwgaW5kZW50YXRpb247XG4gICAgaWYgKCFhZ2dyZXNzaXZlICYmICEvXFxTLy50ZXN0KGxpbmUudGV4dCkpIHtcbiAgICAgIGluZGVudGF0aW9uID0gMDtcbiAgICAgIGhvdyA9IFwibm90XCI7XG4gICAgfSBlbHNlIGlmIChob3cgPT0gXCJzbWFydFwiKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IGRvYy5tb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7XG4gICAgICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkge1xuICAgICAgICBpZiAoIWFnZ3Jlc3NpdmUpIHsgcmV0dXJuIH1cbiAgICAgICAgaG93ID0gXCJwcmV2XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChob3cgPT0gXCJwcmV2XCIpIHtcbiAgICAgIGlmIChuID4gZG9jLmZpcnN0KSB7IGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIG4tMSkudGV4dCwgbnVsbCwgdGFiU2l6ZSk7IH1cbiAgICAgIGVsc2UgeyBpbmRlbnRhdGlvbiA9IDA7IH1cbiAgICB9IGVsc2UgaWYgKGhvdyA9PSBcImFkZFwiKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0O1xuICAgIH0gZWxzZSBpZiAoaG93ID09IFwic3VidHJhY3RcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0gXCJudW1iZXJcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGhvdztcbiAgICB9XG4gICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7XG5cbiAgICB2YXIgaW5kZW50U3RyaW5nID0gXCJcIiwgcG9zID0gMDtcbiAgICBpZiAoY20ub3B0aW9ucy5pbmRlbnRXaXRoVGFicylcbiAgICAgIHsgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVudFN0cmluZyArPSBcIlxcdFwiO30gfVxuICAgIGlmIChwb3MgPCBpbmRlbnRhdGlvbikgeyBpbmRlbnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOyB9XG5cbiAgICBpZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKSB7XG4gICAgICByZXBsYWNlUmFuZ2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIFwiK2lucHV0XCIpO1xuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuc3VyZSB0aGF0LCBpZiB0aGUgY3Vyc29yIHdhcyBpbiB0aGUgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnRcbiAgICAgIC8vIG9mIHRoZSBsaW5lLCBpdCBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoYXQgc3BhY2UuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2kkMV07XG4gICAgICAgIGlmIChyYW5nZS5oZWFkLmxpbmUgPT0gbiAmJiByYW5nZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBvcyQxID0gUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGkkMSwgbmV3IFJhbmdlKHBvcyQxLCBwb3MkMSkpO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIHdpbGwgYmUgc2V0IHRvIGEge2xpbmVXaXNlOiBib29sLCB0ZXh0OiBbc3RyaW5nXX0gb2JqZWN0LCBzb1xuICAvLyB0aGF0LCB3aGVuIHBhc3RpbmcsIHdlIGtub3cgd2hhdCBraW5kIG9mIHNlbGVjdGlvbnMgdGhlIGNvcGllZFxuICAvLyB0ZXh0IHdhcyBtYWRlIG91dCBvZi5cbiAgdmFyIGxhc3RDb3BpZWQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHNldExhc3RDb3BpZWQobmV3TGFzdENvcGllZCkge1xuICAgIGxhc3RDb3BpZWQgPSBuZXdMYXN0Q29waWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUZXh0SW5wdXQoY20sIGluc2VydGVkLCBkZWxldGVkLCBzZWwsIG9yaWdpbikge1xuICAgIHZhciBkb2MgPSBjbS5kb2M7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlO1xuICAgIGlmICghc2VsKSB7IHNlbCA9IGRvYy5zZWw7IH1cblxuICAgIHZhciByZWNlbnQgPSArbmV3IERhdGUgLSAyMDA7XG4gICAgdmFyIHBhc3RlID0gb3JpZ2luID09IFwicGFzdGVcIiB8fCBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID4gcmVjZW50O1xuICAgIHZhciB0ZXh0TGluZXMgPSBzcGxpdExpbmVzQXV0byhpbnNlcnRlZCksIG11bHRpUGFzdGUgPSBudWxsO1xuICAgIC8vIFdoZW4gcGFzdGluZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvblxuICAgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpID09IGluc2VydGVkKSB7XG4gICAgICAgIGlmIChzZWwucmFuZ2VzLmxlbmd0aCAlIGxhc3RDb3BpZWQudGV4dC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIG11bHRpUGFzdGUgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RDb3BpZWQudGV4dC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHsgbXVsdGlQYXN0ZS5wdXNoKGRvYy5zcGxpdExpbmVzKGxhc3RDb3BpZWQudGV4dFtpXSkpOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGV4dExpbmVzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJiBjbS5vcHRpb25zLnBhc3RlTGluZXNQZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgbXVsdGlQYXN0ZSA9IG1hcCh0ZXh0TGluZXMsIGZ1bmN0aW9uIChsKSB7IHJldHVybiBbbF07IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0O1xuICAgIC8vIE5vcm1hbCBiZWhhdmlvciBpcyB0byBpbnNlcnQgdGhlIG5ldyB0ZXh0IGludG8gZXZlcnkgc2VsZWN0aW9uXG4gICAgZm9yICh2YXIgaSQxID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pIHtcbiAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaSQxXTtcbiAgICAgIHZhciBmcm9tID0gcmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7XG4gICAgICBpZiAocmFuZ2UuZW1wdHkoKSkge1xuICAgICAgICBpZiAoZGVsZXRlZCAmJiBkZWxldGVkID4gMCkgLy8gSGFuZGxlIGRlbGV0aW9uXG4gICAgICAgICAgeyBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIGRlbGV0ZWQpOyB9XG4gICAgICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiAhcGFzdGUpIC8vIEhhbmRsZSBvdmVyd3JpdGVcbiAgICAgICAgICB7IHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsgfVxuICAgICAgICBlbHNlIGlmIChwYXN0ZSAmJiBsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQubGluZVdpc2UgJiYgbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIikgPT0gaW5zZXJ0ZWQpXG4gICAgICAgICAgeyBmcm9tID0gdG8gPSBQb3MoZnJvbS5saW5lLCAwKTsgfVxuICAgICAgfVxuICAgICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQYXN0ZSA/IG11bHRpUGFzdGVbaSQxICUgbXVsdGlQYXN0ZS5sZW5ndGhdIDogdGV4dExpbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8IChwYXN0ZSA/IFwicGFzdGVcIiA6IGNtLnN0YXRlLmN1dEluY29taW5nID4gcmVjZW50ID8gXCJjdXRcIiA6IFwiK2lucHV0XCIpfTtcbiAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJpbnB1dFJlYWRcIiwgY20sIGNoYW5nZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkICYmICFwYXN0ZSlcbiAgICAgIHsgdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCk7IH1cblxuICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICAgIGlmIChjbS5jdXJPcC51cGRhdGVJbnB1dCA8IDIpIHsgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsgfVxuICAgIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7XG4gICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IGNtLnN0YXRlLmN1dEluY29taW5nID0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQYXN0ZShlLCBjbSkge1xuICAgIHZhciBwYXN0ZWQgPSBlLmNsaXBib2FyZERhdGEgJiYgZS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpO1xuICAgIGlmIChwYXN0ZWQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICghY20uaXNSZWFkT25seSgpICYmICFjbS5vcHRpb25zLmRpc2FibGVJbnB1dClcbiAgICAgICAgeyBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhcHBseVRleHRJbnB1dChjbSwgcGFzdGVkLCAwLCBudWxsLCBcInBhc3RlXCIpOyB9KTsgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2VydGVkKSB7XG4gICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50XG4gICAgaWYgKCFjbS5vcHRpb25zLmVsZWN0cmljQ2hhcnMgfHwgIWNtLm9wdGlvbnMuc21hcnRJbmRlbnQpIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsID0gY20uZG9jLnNlbDtcblxuICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgaWYgKHJhbmdlLmhlYWQuY2ggPiAxMDAgfHwgKGkgJiYgc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lID09IHJhbmdlLmhlYWQubGluZSkpIHsgY29udGludWUgfVxuICAgICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2UuaGVhZCk7XG4gICAgICB2YXIgaW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtb2RlLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgeyBpZiAoaW5zZXJ0ZWQuaW5kZXhPZihtb2RlLmVsZWN0cmljQ2hhcnMuY2hhckF0KGopKSA+IC0xKSB7XG4gICAgICAgICAgICBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgXCJzbWFydFwiKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfSB9XG4gICAgICB9IGVsc2UgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dCkge1xuICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0lucHV0LnRlc3QoZ2V0TGluZShjbS5kb2MsIHJhbmdlLmhlYWQubGluZSkudGV4dC5zbGljZSgwLCByYW5nZS5oZWFkLmNoKSkpXG4gICAgICAgICAgeyBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgXCJzbWFydFwiKTsgfVxuICAgICAgfVxuICAgICAgaWYgKGluZGVudGVkKSB7IHNpZ25hbExhdGVyKGNtLCBcImVsZWN0cmljSW5wdXRcIiwgY20sIHJhbmdlLmhlYWQubGluZSk7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5YWJsZVJhbmdlcyhjbSkge1xuICAgIHZhciB0ZXh0ID0gW10sIHJhbmdlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lO1xuICAgICAgdmFyIGxpbmVSYW5nZSA9IHthbmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07XG4gICAgICByYW5nZXMucHVzaChsaW5lUmFuZ2UpO1xuICAgICAgdGV4dC5wdXNoKGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKSk7XG4gICAgfVxuICAgIHJldHVybiB7dGV4dDogdGV4dCwgcmFuZ2VzOiByYW5nZXN9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlQnJvd3Nlck1hZ2ljKGZpZWxkLCBzcGVsbGNoZWNrLCBhdXRvY29ycmVjdCwgYXV0b2NhcGl0YWxpemUpIHtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBhdXRvY29ycmVjdCA/IFwiXCIgOiBcIm9mZlwiKTtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJhdXRvY2FwaXRhbGl6ZVwiLCBhdXRvY2FwaXRhbGl6ZSA/IFwiXCIgOiBcIm9mZlwiKTtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJzcGVsbGNoZWNrXCIsICEhc3BlbGxjaGVjayk7XG4gIH1cblxuICBmdW5jdGlvbiBoaWRkZW5UZXh0YXJlYSgpIHtcbiAgICB2YXIgdGUgPSBlbHQoXCJ0ZXh0YXJlYVwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAtMWVtOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZVwiKTtcbiAgICB2YXIgZGl2ID0gZWx0KFwiZGl2XCIsIFt0ZV0sIG51bGwsIFwib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDtcIik7XG4gICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9zaXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGVcbiAgICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nXG4gICAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzXG4gICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVhZC5cbiAgICBpZiAod2Via2l0KSB7IHRlLnN0eWxlLndpZHRoID0gXCIxMDAwcHhcIjsgfVxuICAgIGVsc2UgeyB0ZS5zZXRBdHRyaWJ1dGUoXCJ3cmFwXCIsIFwib2ZmXCIpOyB9XG4gICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUgIzEyODcpXG4gICAgaWYgKGlvcykgeyB0ZS5zdHlsZS5ib3JkZXIgPSBcIjFweCBzb2xpZCBibGFja1wiOyB9XG4gICAgZGlzYWJsZUJyb3dzZXJNYWdpYyh0ZSk7XG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgLy8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgbWV0aG9kT3AoZikgbWVhbnNcbiAgLy8gJ3dyYXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRoaXNgIHBhcmFtZXRlcicuXG5cbiAgLy8gVGhpcyBpcyBub3QgdGhlIGNvbXBsZXRlIHNldCBvZiBlZGl0b3IgbWV0aG9kcy4gTW9zdCBvZiB0aGVcbiAgLy8gbWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBEb2MgdHlwZSBhcmUgYWxzbyBpbmplY3RlZCBpbnRvXG4gIC8vIENvZGVNaXJyb3IucHJvdG90eXBlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kXG4gIC8vIGNvbnZlbmllbmNlLlxuXG4gIGZ1bmN0aW9uIGFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvcikge1xuICAgIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iub3B0aW9uSGFuZGxlcnM7XG5cbiAgICB2YXIgaGVscGVycyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9O1xuXG4gICAgQ29kZU1pcnJvci5wcm90b3R5cGUgPSB7XG4gICAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvcixcbiAgICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LFxuXG4gICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9PSB2YWx1ZSAmJiBvcHRpb24gIT0gXCJtb2RlXCIpIHsgcmV0dXJuIH1cbiAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7XG4gICAgICAgIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKVxuICAgICAgICAgIHsgb3BlcmF0aW9uKHRoaXMsIG9wdGlvbkhhbmRsZXJzW29wdGlvbl0pKHRoaXMsIHZhbHVlLCBvbGQpOyB9XG4gICAgICAgIHNpZ25hbCh0aGlzLCBcIm9wdGlvbkNoYW5nZVwiLCB0aGlzLCBvcHRpb24pO1xuICAgICAgfSxcblxuICAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbl19LFxuICAgICAgZ2V0RG9jOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kb2N9LFxuXG4gICAgICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1hcCwgYm90dG9tKSB7XG4gICAgICAgIHRoaXMuc3RhdGUua2V5TWFwc1tib3R0b20gPyBcInB1c2hcIiA6IFwidW5zaGlmdFwiXShnZXRLZXlNYXAobWFwKSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHtcbiAgICAgICAgdmFyIG1hcHMgPSB0aGlzLnN0YXRlLmtleU1hcHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICB7IGlmIChtYXBzW2ldID09IG1hcCB8fCBtYXBzW2ldLm5hbWUgPT0gbWFwKSB7XG4gICAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSB9XG4gICAgICB9LFxuXG4gICAgICBhZGRPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtb2RlID0gc3BlYy50b2tlbiA/IHNwZWMgOiBDb2RlTWlycm9yLmdldE1vZGUodGhpcy5vcHRpb25zLCBzcGVjKTtcbiAgICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLlwiKSB9XG4gICAgICAgIGluc2VydFNvcnRlZCh0aGlzLnN0YXRlLm92ZXJsYXlzLFxuICAgICAgICAgICAgICAgICAgICAge21vZGU6IG1vZGUsIG1vZGVTcGVjOiBzcGVjLCBvcGFxdWU6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGFxdWUsXG4gICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IChvcHRpb25zICYmIG9wdGlvbnMucHJpb3JpdHkpIHx8IDB9LFxuICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG92ZXJsYXkpIHsgcmV0dXJuIG92ZXJsYXkucHJpb3JpdHk7IH0pO1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKztcbiAgICAgICAgcmVnQ2hhbmdlKHRoaXMpO1xuICAgICAgfSksXG4gICAgICByZW1vdmVPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjKSB7XG4gICAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7XG4gICAgICAgICAgaWYgKGN1ciA9PSBzcGVjIHx8IHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgY3VyLm5hbWUgPT0gc3BlYykge1xuICAgICAgICAgICAgb3ZlcmxheXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7XG4gICAgICAgICAgICByZWdDaGFuZ2UodGhpcyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICBpbmRlbnRMaW5lOiBtZXRob2RPcChmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZGlyICE9IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAoZGlyID09IG51bGwpIHsgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50ID8gXCJzbWFydFwiIDogXCJwcmV2XCI7IH1cbiAgICAgICAgICBlbHNlIHsgZGlyID0gZGlyID8gXCJhZGRcIiA6IFwic3VidHJhY3RcIjsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSB7IGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZlKTsgfVxuICAgICAgfSksXG4gICAgICBpbmRlbnRTZWxlY3Rpb246IG1ldGhvZE9wKGZ1bmN0aW9uKGhvdykge1xuICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlcywgZW5kID0gLTE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgICAgIGlmICghcmFuZ2UuZW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5saW5lKTtcbiAgICAgICAgICAgIGVuZCA9IE1hdGgubWluKHRoaXMubGFzdExpbmUoKSwgdG8ubGluZSAtICh0by5jaCA/IDAgOiAxKSkgKyAxO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDwgZW5kOyArK2opXG4gICAgICAgICAgICAgIHsgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOyB9XG4gICAgICAgICAgICB2YXIgbmV3UmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlcztcbiAgICAgICAgICAgIGlmIChmcm9tLmNoID09IDAgJiYgcmFuZ2VzLmxlbmd0aCA9PSBuZXdSYW5nZXMubGVuZ3RoICYmIG5ld1Jhbmdlc1tpXS5mcm9tKCkuY2ggPiAwKVxuICAgICAgICAgICAgICB7IHJlcGxhY2VPbmVTZWxlY3Rpb24odGhpcy5kb2MsIGksIG5ldyBSYW5nZShmcm9tLCBuZXdSYW5nZXNbaV0udG8oKSksIHNlbF9kb250U2Nyb2xsKTsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaGVhZC5saW5lID4gZW5kKSB7XG4gICAgICAgICAgICBpbmRlbnRMaW5lKHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTtcbiAgICAgICAgICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZTtcbiAgICAgICAgICAgIGlmIChpID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXgpIHsgZW5zdXJlQ3Vyc29yVmlzaWJsZSh0aGlzKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuXG4gICAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3MsIHByZWNpc2UpIHtcbiAgICAgICAgcmV0dXJuIHRha2VUb2tlbih0aGlzLCBwb3MsIHByZWNpc2UpXG4gICAgICB9LFxuXG4gICAgICBnZXRMaW5lVG9rZW5zOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7XG4gICAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgUG9zKGxpbmUpLCBwcmVjaXNlLCB0cnVlKVxuICAgICAgfSxcblxuICAgICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpO1xuICAgICAgICB2YXIgc3R5bGVzID0gZ2V0TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSkpO1xuICAgICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7XG4gICAgICAgIHZhciB0eXBlO1xuICAgICAgICBpZiAoY2ggPT0gMCkgeyB0eXBlID0gc3R5bGVzWzJdOyB9XG4gICAgICAgIGVsc2UgeyBmb3IgKDs7KSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMTtcbiAgICAgICAgICBpZiAoKG1pZCA/IHN0eWxlc1ttaWQgKiAyIC0gMV0gOiAwKSA+PSBjaCkgeyBhZnRlciA9IG1pZDsgfVxuICAgICAgICAgIGVsc2UgaWYgKHN0eWxlc1ttaWQgKiAyICsgMV0gPCBjaCkgeyBiZWZvcmUgPSBtaWQgKyAxOyB9XG4gICAgICAgICAgZWxzZSB7IHR5cGUgPSBzdHlsZXNbbWlkICogMiArIDJdOyBicmVhayB9XG4gICAgICAgIH0gfVxuICAgICAgICB2YXIgY3V0ID0gdHlwZSA/IHR5cGUuaW5kZXhPZihcIm92ZXJsYXkgXCIpIDogLTE7XG4gICAgICAgIHJldHVybiBjdXQgPCAwID8gdHlwZSA6IGN1dCA9PSAwID8gbnVsbCA6IHR5cGUuc2xpY2UoMCwgY3V0IC0gMSlcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vZGVBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy5kb2MubW9kZTtcbiAgICAgICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgeyByZXR1cm4gbW9kZSB9XG4gICAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCB0aGlzLmdldFRva2VuQXQocG9zKS5zdGF0ZSkubW9kZVxuICAgICAgfSxcblxuICAgICAgZ2V0SGVscGVyOiBmdW5jdGlvbihwb3MsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBdXG4gICAgICB9LFxuXG4gICAgICBnZXRIZWxwZXJzOiBmdW5jdGlvbihwb3MsIHR5cGUpIHtcbiAgICAgICAgdmFyIGZvdW5kID0gW107XG4gICAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgeyByZXR1cm4gZm91bmQgfVxuICAgICAgICB2YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUgPSB0aGlzLmdldE1vZGVBdChwb3MpO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGVbdHlwZV0gPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmIChoZWxwW21vZGVbdHlwZV1dKSB7IGZvdW5kLnB1c2goaGVscFttb2RlW3R5cGVdXSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChtb2RlW3R5cGVdKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlW3R5cGVdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gaGVscFttb2RlW3R5cGVdW2ldXTtcbiAgICAgICAgICAgIGlmICh2YWwpIHsgZm91bmQucHVzaCh2YWwpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVyVHlwZV0pIHtcbiAgICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGVscFttb2RlLm5hbWVdKSB7XG4gICAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUubmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGhlbHAuX2dsb2JhbC5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IGhlbHAuX2dsb2JhbFtpJDFdO1xuICAgICAgICAgIGlmIChjdXIucHJlZChtb2RlLCB0aGlzKSAmJiBpbmRleE9mKGZvdW5kLCBjdXIudmFsKSA9PSAtMSlcbiAgICAgICAgICAgIHsgZm91bmQucHVzaChjdXIudmFsKTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgfSxcblxuICAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkge1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7XG4gICAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSk7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0QmVmb3JlKHRoaXMsIGxpbmUgKyAxLCBwcmVjaXNlKS5zdGF0ZVxuICAgICAgfSxcblxuICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkge1xuICAgICAgICB2YXIgcG9zLCByYW5nZSA9IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCk7XG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHBvcyA9IHJhbmdlLmhlYWQ7IH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09IFwib2JqZWN0XCIpIHsgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgc3RhcnQpOyB9XG4gICAgICAgIGVsc2UgeyBwb3MgPSBzdGFydCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7IH1cbiAgICAgICAgcmV0dXJuIGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUgfHwgXCJwYWdlXCIpXG4gICAgICB9LFxuXG4gICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSwgbW9kZSB8fCBcInBhZ2VcIilcbiAgICAgIH0sXG5cbiAgICAgIGNvb3Jkc0NoYXI6IGZ1bmN0aW9uKGNvb3JkcywgbW9kZSkge1xuICAgICAgICBjb29yZHMgPSBmcm9tQ29vcmRTeXN0ZW0odGhpcywgY29vcmRzLCBtb2RlIHx8IFwicGFnZVwiKTtcbiAgICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApXG4gICAgICB9LFxuXG4gICAgICBsaW5lQXRIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCwgbW9kZSkge1xuICAgICAgICBoZWlnaHQgPSBmcm9tQ29vcmRTeXN0ZW0odGhpcywge3RvcDogaGVpZ2h0LCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIikudG9wO1xuICAgICAgICByZXR1cm4gbGluZUF0SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldClcbiAgICAgIH0sXG4gICAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUsIGluY2x1ZGVXaWRnZXRzKSB7XG4gICAgICAgIHZhciBlbmQgPSBmYWxzZSwgbGluZU9iajtcbiAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7XG4gICAgICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgeyBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7IH1cbiAgICAgICAgICBlbHNlIGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfVxuICAgICAgICAgIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lT2JqID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8IFwicGFnZVwiLCBpbmNsdWRlV2lkZ2V0cyB8fCBlbmQpLnRvcCArXG4gICAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAtIGhlaWdodEF0TGluZShsaW5lT2JqKSA6IDApXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSkgfSxcbiAgICAgIGRlZmF1bHRDaGFyV2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMuZGlzcGxheSkgfSxcblxuICAgICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG99fSxcblxuICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHtcbiAgICAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXk7XG4gICAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpKTtcbiAgICAgICAgdmFyIHRvcCA9IHBvcy5ib3R0b20sIGxlZnQgPSBwb3MubGVmdDtcbiAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobm9kZSk7XG4gICAgICAgIGRpc3BsYXkuc2l6ZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIGlmICh2ZXJ0ID09IFwib3ZlclwiKSB7XG4gICAgICAgICAgdG9wID0gcG9zLnRvcDtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ID09IFwiYWJvdmVcIiB8fCB2ZXJ0ID09IFwibmVhclwiKSB7XG4gICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHRoaXMuZG9jLmhlaWdodCksXG4gICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xpZW50V2lkdGgpO1xuICAgICAgICAgIC8vIERlZmF1bHQgdG8gcG9zaXRpb25pbmcgYWJvdmUgKGlmIHNwZWNpZmllZCBhbmQgcG9zc2libGUpOyBvdGhlcndpc2UgZGVmYXVsdCB0byBwb3NpdGlvbmluZyBiZWxvd1xuICAgICAgICAgIGlmICgodmVydCA9PSAnYWJvdmUnIHx8IHBvcy5ib3R0b20gKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSkgJiYgcG9zLnRvcCA+IG5vZGUub2Zmc2V0SGVpZ2h0KVxuICAgICAgICAgICAgeyB0b3AgPSBwb3MudG9wIC0gbm9kZS5vZmZzZXRIZWlnaHQ7IH1cbiAgICAgICAgICBlbHNlIGlmIChwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKVxuICAgICAgICAgICAgeyB0b3AgPSBwb3MuYm90dG9tOyB9XG4gICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKVxuICAgICAgICAgICAgeyBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBub2RlLnN0eWxlLnJpZ2h0ID0gXCJcIjtcbiAgICAgICAgaWYgKGhvcml6ID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBub2RlLnN0eWxlLnJpZ2h0ID0gXCIwcHhcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaG9yaXogPT0gXCJsZWZ0XCIpIHsgbGVmdCA9IDA7IH1cbiAgICAgICAgICBlbHNlIGlmIChob3JpeiA9PSBcIm1pZGRsZVwiKSB7IGxlZnQgPSAoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsgfVxuICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbClcbiAgICAgICAgICB7IHNjcm9sbEludG9WaWV3KHRoaXMsIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcCwgcmlnaHQ6IGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCBib3R0b206IHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0fSk7IH1cbiAgICAgIH0sXG5cbiAgICAgIHRyaWdnZXJPbktleURvd246IG1ldGhvZE9wKG9uS2V5RG93biksXG4gICAgICB0cmlnZ2VyT25LZXlQcmVzczogbWV0aG9kT3Aob25LZXlQcmVzcyksXG4gICAgICB0cmlnZ2VyT25LZXlVcDogb25LZXlVcCxcbiAgICAgIHRyaWdnZXJPbk1vdXNlRG93bjogbWV0aG9kT3Aob25Nb3VzZURvd24pLFxuXG4gICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7XG4gICAgICAgIGlmIChjb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShjbWQpKVxuICAgICAgICAgIHsgcmV0dXJuIGNvbW1hbmRzW2NtZF0uY2FsbChudWxsLCB0aGlzKSB9XG4gICAgICB9LFxuXG4gICAgICB0cmlnZ2VyRWxlY3RyaWM6IG1ldGhvZE9wKGZ1bmN0aW9uKHRleHQpIHsgdHJpZ2dlckVsZWN0cmljKHRoaXMsIHRleHQpOyB9KSxcblxuICAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgdmlzdWFsbHkpIHtcbiAgICAgICAgdmFyIGRpciA9IDE7XG4gICAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9XG4gICAgICAgIHZhciBjdXIgPSBjbGlwUG9zKHRoaXMuZG9jLCBmcm9tKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7ICsraSkge1xuICAgICAgICAgIGN1ciA9IGZpbmRQb3NIKHRoaXMuZG9jLCBjdXIsIGRpciwgdW5pdCwgdmlzdWFsbHkpO1xuICAgICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clxuICAgICAgfSxcblxuICAgICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB0aGlzLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICBpZiAodGhpcyQxLmRpc3BsYXkuc2hpZnQgfHwgdGhpcyQxLmRvYy5leHRlbmQgfHwgcmFuZ2UuZW1wdHkoKSlcbiAgICAgICAgICAgIHsgcmV0dXJuIGZpbmRQb3NIKHRoaXMkMS5kb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgdGhpcyQxLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KSB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgeyByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCkgfVxuICAgICAgICB9LCBzZWxfbW92ZSk7XG4gICAgICB9KSxcblxuICAgICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7XG4gICAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWwsIGRvYyA9IHRoaXMuZG9jO1xuICAgICAgICBpZiAoc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpXG4gICAgICAgICAgeyBkb2MucmVwbGFjZVNlbGVjdGlvbihcIlwiLCBudWxsLCBcIitkZWxldGVcIik7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgZGVsZXRlTmVhclNlbGVjdGlvbih0aGlzLCBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGZpbmRQb3NIKGRvYywgcmFuZ2UuaGVhZCwgZGlyLCB1bml0LCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHtmcm9tOiBvdGhlciwgdG86IHJhbmdlLmhlYWR9IDoge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBvdGhlcn1cbiAgICAgICAgICB9KTsgfVxuICAgICAgfSksXG5cbiAgICAgIGZpbmRQb3NWOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHtcbiAgICAgICAgdmFyIGRpciA9IDEsIHggPSBnb2FsQ29sdW1uO1xuICAgICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfVxuICAgICAgICB2YXIgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgXCJkaXZcIik7XG4gICAgICAgICAgaWYgKHggPT0gbnVsbCkgeyB4ID0gY29vcmRzLmxlZnQ7IH1cbiAgICAgICAgICBlbHNlIHsgY29vcmRzLmxlZnQgPSB4OyB9XG4gICAgICAgICAgY3VyID0gZmluZFBvc1YodGhpcywgY29vcmRzLCBkaXIsIHVuaXQpO1xuICAgICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clxuICAgICAgfSxcblxuICAgICAgbW92ZVY6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107XG4gICAgICAgIHZhciBjb2xsYXBzZSA9ICF0aGlzLmRpc3BsYXkuc2hpZnQgJiYgIWRvYy5leHRlbmQgJiYgZG9jLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO1xuICAgICAgICBkb2MuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgICAgIGlmIChjb2xsYXBzZSlcbiAgICAgICAgICAgIHsgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpIH1cbiAgICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzJDEsIHJhbmdlLmhlYWQsIFwiZGl2XCIpO1xuICAgICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwpIHsgaGVhZFBvcy5sZWZ0ID0gcmFuZ2UuZ29hbENvbHVtbjsgfVxuICAgICAgICAgIGdvYWxzLnB1c2goaGVhZFBvcy5sZWZ0KTtcbiAgICAgICAgICB2YXIgcG9zID0gZmluZFBvc1YodGhpcyQxLCBoZWFkUG9zLCBkaXIsIHVuaXQpO1xuICAgICAgICAgIGlmICh1bml0ID09IFwicGFnZVwiICYmIHJhbmdlID09IGRvYy5zZWwucHJpbWFyeSgpKVxuICAgICAgICAgICAgeyBhZGRUb1Njcm9sbFRvcCh0aGlzJDEsIGNoYXJDb29yZHModGhpcyQxLCBwb3MsIFwiZGl2XCIpLnRvcCAtIGhlYWRQb3MudG9wKTsgfVxuICAgICAgICAgIHJldHVybiBwb3NcbiAgICAgICAgfSwgc2VsX21vdmUpO1xuICAgICAgICBpZiAoZ29hbHMubGVuZ3RoKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyBkb2Muc2VsLnJhbmdlc1tpXS5nb2FsQ29sdW1uID0gZ29hbHNbaV07IH0gfVxuICAgICAgfSksXG5cbiAgICAgIC8vIEZpbmQgdGhlIHdvcmQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBjb29yZHNDaGFyKS5cbiAgICAgIGZpbmRXb3JkQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7XG4gICAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoO1xuICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgIHZhciBoZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsIFwid29yZENoYXJzXCIpO1xuICAgICAgICAgIGlmICgocG9zLnN0aWNreSA9PSBcImJlZm9yZVwiIHx8IGVuZCA9PSBsaW5lLmxlbmd0aCkgJiYgc3RhcnQpIHsgLS1zdGFydDsgfSBlbHNlIHsgKytlbmQ7IH1cbiAgICAgICAgICB2YXIgc3RhcnRDaGFyID0gbGluZS5jaGFyQXQoc3RhcnQpO1xuICAgICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gaXNXb3JkQ2hhcihjaCwgaGVscGVyKTsgfVxuICAgICAgICAgICAgOiAvXFxzLy50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIC9cXHMvLnRlc3QoY2gpOyB9XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gKCEvXFxzLy50ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCkpOyB9O1xuICAgICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIHsgLS1zdGFydDsgfVxuICAgICAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgeyArK2VuZDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBzdGFydCksIFBvcyhwb3MubGluZSwgZW5kKSlcbiAgICAgIH0sXG5cbiAgICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHsgcmV0dXJuIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3ZlcndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKVxuICAgICAgICAgIHsgYWRkQ2xhc3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgXCJDb2RlTWlycm9yLW92ZXJ3cml0ZVwiKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyBybUNsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIik7IH1cblxuICAgICAgICBzaWduYWwodGhpcywgXCJvdmVyd3JpdGVUb2dnbGVcIiwgdGhpcywgdGhpcy5zdGF0ZS5vdmVyd3JpdGUpO1xuICAgICAgfSxcbiAgICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpID09IGFjdGl2ZUVsdCgpIH0sXG4gICAgICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHsgcmV0dXJuICEhKHRoaXMub3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLmRvYy5jYW50RWRpdCkgfSxcblxuICAgICAgc2Nyb2xsVG86IG1ldGhvZE9wKGZ1bmN0aW9uICh4LCB5KSB7IHNjcm9sbFRvQ29vcmRzKHRoaXMsIHgsIHkpOyB9KSxcbiAgICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFySGVpZ2h0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJXaWR0aCxcbiAgICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGRpc3BsYXlIZWlnaHQodGhpcyksIGNsaWVudFdpZHRoOiBkaXNwbGF5V2lkdGgodGhpcyl9XG4gICAgICB9LFxuXG4gICAgICBzY3JvbGxJbnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikge1xuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgdG86IG51bGx9O1xuICAgICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSB0aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luOyB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhbmdlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICByYW5nZSA9IHtmcm9tOiBQb3MocmFuZ2UsIDApLCB0bzogbnVsbH07XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuZnJvbSA9PSBudWxsKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhbmdlLnRvKSB7IHJhbmdlLnRvID0gcmFuZ2UuZnJvbTsgfVxuICAgICAgICByYW5nZS5tYXJnaW4gPSBtYXJnaW4gfHwgMDtcblxuICAgICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHtcbiAgICAgICAgICBzY3JvbGxUb1JhbmdlKHRoaXMsIHJhbmdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxUb0Nvb3Jkc1JhbmdlKHRoaXMsIHJhbmdlLmZyb20sIHJhbmdlLnRvLCByYW5nZS5tYXJnaW4pO1xuICAgICAgICB9XG4gICAgICB9KSxcblxuICAgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB2YXIgaW50ZXJwcmV0ID0gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdHlwZW9mIHZhbCA9PSBcIm51bWJlclwiIHx8IC9eXFxkKyQvLnRlc3QoU3RyaW5nKHZhbCkpID8gdmFsICsgXCJweFwiIDogdmFsOyB9O1xuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgeyB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7IH1cbiAgICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7IHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpOyB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcyk7IH1cbiAgICAgICAgdmFyIGxpbmVObyA9IHRoaXMuZGlzcGxheS52aWV3RnJvbTtcbiAgICAgICAgdGhpcy5kb2MuaXRlcihsaW5lTm8sIHRoaXMuZGlzcGxheS52aWV3VG8sIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHsgaWYgKGxpbmUud2lkZ2V0c1tpXS5ub0hTY3JvbGwpIHsgcmVnTGluZUNoYW5nZSh0aGlzJDEsIGxpbmVObywgXCJ3aWRnZXRcIik7IGJyZWFrIH0gfSB9XG4gICAgICAgICAgKytsaW5lTm87XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsKHRoaXMsIFwicmVmcmVzaFwiLCB0aGlzKTtcbiAgICAgIH0pLFxuXG4gICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpfSxcbiAgICAgIHN0YXJ0T3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBzdGFydE9wZXJhdGlvbih0aGlzKX0sXG4gICAgICBlbmRPcGVyYXRpb246IGZ1bmN0aW9uKCl7cmV0dXJuIGVuZE9wZXJhdGlvbih0aGlzKX0sXG5cbiAgICAgIHJlZnJlc2g6IG1ldGhvZE9wKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7XG4gICAgICAgIHJlZ0NoYW5nZSh0aGlzKTtcbiAgICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpO1xuICAgICAgICBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCB0aGlzLmRvYy5zY3JvbGxMZWZ0LCB0aGlzLmRvYy5zY3JvbGxUb3ApO1xuICAgICAgICB1cGRhdGVHdXR0ZXJTcGFjZSh0aGlzLmRpc3BsYXkpO1xuICAgICAgICBpZiAob2xkSGVpZ2h0ID09IG51bGwgfHwgTWF0aC5hYnMob2xkSGVpZ2h0IC0gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpKSA+IC41KVxuICAgICAgICAgIHsgZXN0aW1hdGVMaW5lSGVpZ2h0cyh0aGlzKTsgfVxuICAgICAgICBzaWduYWwodGhpcywgXCJyZWZyZXNoXCIsIHRoaXMpO1xuICAgICAgfSksXG5cbiAgICAgIHN3YXBEb2M6IG1ldGhvZE9wKGZ1bmN0aW9uKGRvYykge1xuICAgICAgICB2YXIgb2xkID0gdGhpcy5kb2M7XG4gICAgICAgIG9sZC5jbSA9IG51bGw7XG4gICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBpZiBhbnkgKCM1ODIxKVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZWxlY3RpbmdUZXh0KSB7IHRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCgpOyB9XG4gICAgICAgIGF0dGFjaERvYyh0aGlzLCBkb2MpO1xuICAgICAgICBjbGVhckNhY2hlcyh0aGlzKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICAgIHNjcm9sbFRvQ29vcmRzKHRoaXMsIGRvYy5zY3JvbGxMZWZ0LCBkb2Muc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5jdXJPcC5mb3JjZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHNpZ25hbExhdGVyKHRoaXMsIFwic3dhcERvY1wiLCB0aGlzLCBvbGQpO1xuICAgICAgICByZXR1cm4gb2xkXG4gICAgICB9KSxcblxuICAgICAgcGhyYXNlOiBmdW5jdGlvbihwaHJhc2VUZXh0KSB7XG4gICAgICAgIHZhciBwaHJhc2VzID0gdGhpcy5vcHRpb25zLnBocmFzZXM7XG4gICAgICAgIHJldHVybiBwaHJhc2VzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwaHJhc2VzLCBwaHJhc2VUZXh0KSA/IHBocmFzZXNbcGhyYXNlVGV4dF0gOiBwaHJhc2VUZXh0XG4gICAgICB9LFxuXG4gICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKX0sXG4gICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LFxuICAgICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LFxuICAgICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9XG4gICAgfTtcbiAgICBldmVudE1peGluKENvZGVNaXJyb3IpO1xuXG4gICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHsgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7X2dsb2JhbDogW119OyB9XG4gICAgICBoZWxwZXJzW3R5cGVdW25hbWVdID0gdmFsdWU7XG4gICAgfTtcbiAgICBDb2RlTWlycm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgcHJlZGljYXRlLCB2YWx1ZSkge1xuICAgICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcih0eXBlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICBoZWxwZXJzW3R5cGVdLl9nbG9iYWwucHVzaCh7cHJlZDogcHJlZGljYXRlLCB2YWw6IHZhbHVlfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFVzZWQgZm9yIGhvcml6b250YWwgcmVsYXRpdmUgbW90aW9uLiBEaXIgaXMgLTEgb3IgMSAobGVmdCBvclxuICAvLyByaWdodCksIHVuaXQgY2FuIGJlIFwiY2hhclwiLCBcImNvbHVtblwiIChsaWtlIGNoYXIsIGJ1dCBkb2Vzbid0XG4gIC8vIGNyb3NzIGxpbmUgYm91bmRhcmllcyksIFwid29yZFwiIChhY3Jvc3MgbmV4dCB3b3JkKSwgb3IgXCJncm91cFwiICh0b1xuICAvLyB0aGUgc3RhcnQgb2YgbmV4dCBncm91cCBvZiB3b3JkIG9yIG5vbi13b3JkLW5vbi13aGl0ZXNwYWNlXG4gIC8vIGNoYXJzKS4gVGhlIHZpc3VhbGx5IHBhcmFtIGNvbnRyb2xzIHdoZXRoZXIsIGluIHJpZ2h0LXRvLWxlZnRcbiAgLy8gdGV4dCwgZGlyZWN0aW9uIDEgbWVhbnMgdG8gbW92ZSB0b3dhcmRzIHRoZSBuZXh0IGluZGV4IGluIHRoZVxuICAvLyBzdHJpbmcsIG9yIHRvd2FyZHMgdGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnRcbiAgLy8gcG9zaXRpb24uIFRoZSByZXN1bHRpbmcgcG9zaXRpb24gd2lsbCBoYXZlIGEgaGl0U2lkZT10cnVlXG4gIC8vIHByb3BlcnR5IGlmIGl0IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG4gIGZ1bmN0aW9uIGZpbmRQb3NIKGRvYywgcG9zLCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7XG4gICAgdmFyIG9sZFBvcyA9IHBvcztcbiAgICB2YXIgb3JpZ0RpciA9IGRpcjtcbiAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBwb3MubGluZSk7XG4gICAgdmFyIGxpbmVEaXIgPSB2aXN1YWxseSAmJiBkb2MuZGlyZWN0aW9uID09IFwicnRsXCIgPyAtZGlyIDogZGlyO1xuICAgIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHtcbiAgICAgIHZhciBsID0gcG9zLmxpbmUgKyBsaW5lRGlyO1xuICAgICAgaWYgKGwgPCBkb2MuZmlyc3QgfHwgbCA+PSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgcG9zID0gbmV3IFBvcyhsLCBwb3MuY2gsIHBvcy5zdGlja3kpO1xuICAgICAgcmV0dXJuIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbClcbiAgICB9XG4gICAgZnVuY3Rpb24gbW92ZU9uY2UoYm91bmRUb0xpbmUpIHtcbiAgICAgIHZhciBuZXh0O1xuICAgICAgaWYgKHZpc3VhbGx5KSB7XG4gICAgICAgIG5leHQgPSBtb3ZlVmlzdWFsbHkoZG9jLmNtLCBsaW5lT2JqLCBwb3MsIGRpcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gbW92ZUxvZ2ljYWxseShsaW5lT2JqLCBwb3MsIGRpcik7XG4gICAgICB9XG4gICAgICBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpXG4gICAgICAgICAgeyBwb3MgPSBlbmRPZkxpbmUodmlzdWFsbHksIGRvYy5jbSwgbGluZU9iaiwgcG9zLmxpbmUsIGxpbmVEaXIpOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3MgPSBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodW5pdCA9PSBcImNoYXJcIikge1xuICAgICAgbW92ZU9uY2UoKTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT0gXCJjb2x1bW5cIikge1xuICAgICAgbW92ZU9uY2UodHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09IFwid29yZFwiIHx8IHVuaXQgPT0gXCJncm91cFwiKSB7XG4gICAgICB2YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5pdCA9PSBcImdyb3VwXCI7XG4gICAgICB2YXIgaGVscGVyID0gZG9jLmNtICYmIGRvYy5jbS5nZXRIZWxwZXIocG9zLCBcIndvcmRDaGFyc1wiKTtcbiAgICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGRpciA8IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIHsgYnJlYWsgfVxuICAgICAgICB2YXIgY3VyID0gbGluZU9iai50ZXh0LmNoYXJBdChwb3MuY2gpIHx8IFwiXFxuXCI7XG4gICAgICAgIHZhciB0eXBlID0gaXNXb3JkQ2hhcihjdXIsIGhlbHBlcikgPyBcIndcIlxuICAgICAgICAgIDogZ3JvdXAgJiYgY3VyID09IFwiXFxuXCIgPyBcIm5cIlxuICAgICAgICAgIDogIWdyb3VwIHx8IC9cXHMvLnRlc3QoY3VyKSA/IG51bGxcbiAgICAgICAgICA6IFwicFwiO1xuICAgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0ICYmICF0eXBlKSB7IHR5cGUgPSBcInNcIjsgfVxuICAgICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9IHR5cGUpIHtcbiAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7IHBvcy5zdGlja3kgPSBcImFmdGVyXCI7fVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSkgeyBzYXdUeXBlID0gdHlwZTsgfVxuICAgICAgICBpZiAoZGlyID4gMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgeyBicmVhayB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWljKGRvYywgcG9zLCBvbGRQb3MsIG9yaWdEaXIsIHRydWUpO1xuICAgIGlmIChlcXVhbEN1cnNvclBvcyhvbGRQb3MsIHJlc3VsdCkpIHsgcmVzdWx0LmhpdFNpZGUgPSB0cnVlOyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gRm9yIHJlbGF0aXZlIHZlcnRpY2FsIG1vdmVtZW50LiBEaXIgbWF5IGJlIC0xIG9yIDEuIFVuaXQgY2FuIGJlXG4gIC8vIFwicGFnZVwiIG9yIFwibGluZVwiLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZVxuICAvLyBwcm9wZXJ0eSBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBmaW5kUG9zVihjbSwgcG9zLCBkaXIsIHVuaXQpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCB4ID0gcG9zLmxlZnQsIHk7XG4gICAgaWYgKHVuaXQgPT0gXCJwYWdlXCIpIHtcbiAgICAgIHZhciBwYWdlU2l6ZSA9IE1hdGgubWluKGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICAgIHZhciBtb3ZlQW1vdW50ID0gTWF0aC5tYXgocGFnZVNpemUgLSAuNSAqIHRleHRIZWlnaHQoY20uZGlzcGxheSksIDMpO1xuICAgICAgeSA9IChkaXIgPiAwID8gcG9zLmJvdHRvbSA6IHBvcy50b3ApICsgZGlyICogbW92ZUFtb3VudDtcblxuICAgIH0gZWxzZSBpZiAodW5pdCA9PSBcImxpbmVcIikge1xuICAgICAgeSA9IGRpciA+IDAgPyBwb3MuYm90dG9tICsgMyA6IHBvcy50b3AgLSAzO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0O1xuICAgIGZvciAoOzspIHtcbiAgICAgIHRhcmdldCA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpO1xuICAgICAgaWYgKCF0YXJnZXQub3V0c2lkZSkgeyBicmVhayB9XG4gICAgICBpZiAoZGlyIDwgMCA/IHkgPD0gMCA6IHkgPj0gZG9jLmhlaWdodCkgeyB0YXJnZXQuaGl0U2lkZSA9IHRydWU7IGJyZWFrIH1cbiAgICAgIHkgKz0gZGlyICogNTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldFxuICB9XG5cbiAgLy8gQ09OVEVOVEVESVRBQkxFIElOUFVUIFNUWUxFXG5cbiAgdmFyIENvbnRlbnRFZGl0YWJsZUlucHV0ID0gZnVuY3Rpb24oY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHRoaXMubGFzdEFuY2hvck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9kZSA9IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpO1xuICAgIHRoaXMuY29tcG9zaW5nID0gbnVsbDtcbiAgICB0aGlzLmdyYWNlUGVyaW9kID0gZmFsc2U7XG4gICAgdGhpcy5yZWFkRE9NVGltZW91dCA9IG51bGw7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoZGlzcGxheSkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtO1xuICAgIHZhciBkaXYgPSBpbnB1dC5kaXYgPSBkaXNwbGF5LmxpbmVEaXY7XG4gICAgZGlzYWJsZUJyb3dzZXJNYWdpYyhkaXYsIGNtLm9wdGlvbnMuc3BlbGxjaGVjaywgY20ub3B0aW9ucy5hdXRvY29ycmVjdCwgY20ub3B0aW9ucy5hdXRvY2FwaXRhbGl6ZSk7XG5cbiAgICBvbihkaXYsIFwicGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20pKSB7IHJldHVybiB9XG4gICAgICAvLyBJRSBkb2Vzbid0IGZpcmUgaW5wdXQgZXZlbnRzLCBzbyB3ZSBzY2hlZHVsZSBhIHJlYWQgZm9yIHRoZSBwYXN0ZWQgY29udGVudCBpbiB0aGlzIHdheVxuICAgICAgaWYgKGllX3ZlcnNpb24gPD0gMTEpIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS51cGRhdGVGcm9tRE9NKCk7IH0pLCAyMCk7IH1cbiAgICB9KTtcblxuICAgIG9uKGRpdiwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB0aGlzJDEuY29tcG9zaW5nID0ge2RhdGE6IGUuZGF0YSwgZG9uZTogZmFsc2V9O1xuICAgIH0pO1xuICAgIG9uKGRpdiwgXCJjb21wb3NpdGlvbnVwZGF0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCF0aGlzJDEuY29tcG9zaW5nKSB7IHRoaXMkMS5jb21wb3NpbmcgPSB7ZGF0YTogZS5kYXRhLCBkb25lOiBmYWxzZX07IH1cbiAgICB9KTtcbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICh0aGlzJDEuY29tcG9zaW5nKSB7XG4gICAgICAgIGlmIChlLmRhdGEgIT0gdGhpcyQxLmNvbXBvc2luZy5kYXRhKSB7IHRoaXMkMS5yZWFkRnJvbURPTVNvb24oKTsgfVxuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLmRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb24oZGl2LCBcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5wdXQuZm9yY2VDb21wb3NpdGlvbkVuZCgpOyB9KTtcblxuICAgIG9uKGRpdiwgXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMkMS5jb21wb3NpbmcpIHsgdGhpcyQxLnJlYWRGcm9tRE9NU29vbigpOyB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBvbkNvcHlDdXQoZSkge1xuICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IGZhbHNlLCB0ZXh0OiBjbS5nZXRTZWxlY3Rpb25zKCl9KTtcbiAgICAgICAgaWYgKGUudHlwZSA9PSBcImN1dFwiKSB7IGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7IH1cbiAgICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IHRydWUsIHRleHQ6IHJhbmdlcy50ZXh0fSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikge1xuICAgICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcy5yYW5nZXMsIDAsIHNlbF9kb250U2Nyb2xsKTtcbiAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlLmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgZS5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpO1xuICAgICAgICB2YXIgY29udGVudCA9IGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpO1xuICAgICAgICAvLyBpT1MgZXhwb3NlcyB0aGUgY2xpcGJvYXJkIEFQSSwgYnV0IHNlZW1zIHRvIGRpc2NhcmQgY29udGVudCBpbnNlcnRlZCBpbnRvIGl0XG4gICAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwiVGV4dFwiLCBjb250ZW50KTtcbiAgICAgICAgaWYgKGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKSA9PSBjb250ZW50KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPbGQtZmFzaGlvbmVkIGJyaWVmbHktZm9jdXMtYS10ZXh0YXJlYSBoYWNrXG4gICAgICB2YXIga2x1ZGdlID0gaGlkZGVuVGV4dGFyZWEoKSwgdGUgPSBrbHVkZ2UuZmlyc3RDaGlsZDtcbiAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShrbHVkZ2UsIGNtLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpO1xuICAgICAgdGUudmFsdWUgPSBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgIHZhciBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBzZWxlY3RJbnB1dCh0ZSk7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdlKTtcbiAgICAgICAgaGFkRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgaWYgKGhhZEZvY3VzID09IGRpdikgeyBpbnB1dC5zaG93UHJpbWFyeVNlbGVjdGlvbigpOyB9XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICAgIG9uKGRpdiwgXCJjb3B5XCIsIG9uQ29weUN1dCk7XG4gICAgb24oZGl2LCBcImN1dFwiLCBvbkNvcHlDdXQpO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKHRoaXMuY20sIGZhbHNlKTtcbiAgICByZXN1bHQuZm9jdXMgPSB0aGlzLmNtLnN0YXRlLmZvY3VzZWQ7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24gKGluZm8sIHRha2VGb2N1cykge1xuICAgIGlmICghaW5mbyB8fCAhdGhpcy5jbS5kaXNwbGF5LnZpZXcubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgaWYgKGluZm8uZm9jdXMgfHwgdGFrZUZvY3VzKSB7IHRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICAgIHRoaXMuc2hvd011bHRpcGxlU2VsZWN0aW9ucyhpbmZvKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNtLmRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmdldFNlbGVjdGlvbigpXG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNob3dQcmltYXJ5U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpLCBjbSA9IHRoaXMuY20sIHByaW0gPSBjbS5kb2Muc2VsLnByaW1hcnkoKTtcbiAgICB2YXIgZnJvbSA9IHByaW0uZnJvbSgpLCB0byA9IHByaW0udG8oKTtcblxuICAgIGlmIChjbS5kaXNwbGF5LnZpZXdUbyA9PSBjbS5kaXNwbGF5LnZpZXdGcm9tIHx8IGZyb20ubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCB0by5saW5lIDwgY20uZGlzcGxheS52aWV3RnJvbSkge1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGN1ckFuY2hvciA9IGRvbVRvUG9zKGNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7XG4gICAgdmFyIGN1ckZvY3VzID0gZG9tVG9Qb3MoY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7XG4gICAgaWYgKGN1ckFuY2hvciAmJiAhY3VyQW5jaG9yLmJhZCAmJiBjdXJGb2N1cyAmJiAhY3VyRm9jdXMuYmFkICYmXG4gICAgICAgIGNtcChtaW5Qb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIGZyb20pID09IDAgJiZcbiAgICAgICAgY21wKG1heFBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgdG8pID09IDApXG4gICAgICB7IHJldHVybiB9XG5cbiAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXkudmlldztcbiAgICB2YXIgc3RhcnQgPSAoZnJvbS5saW5lID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgcG9zVG9ET00oY20sIGZyb20pKSB8fFxuICAgICAgICB7bm9kZTogdmlld1swXS5tZWFzdXJlLm1hcFsyXSwgb2Zmc2V0OiAwfTtcbiAgICB2YXIgZW5kID0gdG8ubGluZSA8IGNtLmRpc3BsYXkudmlld1RvICYmIHBvc1RvRE9NKGNtLCB0byk7XG4gICAgaWYgKCFlbmQpIHtcbiAgICAgIHZhciBtZWFzdXJlID0gdmlld1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7XG4gICAgICB2YXIgbWFwID0gbWVhc3VyZS5tYXBzID8gbWVhc3VyZS5tYXBzW21lYXN1cmUubWFwcy5sZW5ndGggLSAxXSA6IG1lYXN1cmUubWFwO1xuICAgICAgZW5kID0ge25vZGU6IG1hcFttYXAubGVuZ3RoIC0gMV0sIG9mZnNldDogbWFwW21hcC5sZW5ndGggLSAyXSAtIG1hcFttYXAubGVuZ3RoIC0gM119O1xuICAgIH1cblxuICAgIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIG9sZCA9IHNlbC5yYW5nZUNvdW50ICYmIHNlbC5nZXRSYW5nZUF0KDApLCBybmc7XG4gICAgdHJ5IHsgcm5nID0gcmFuZ2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0LCBlbmQub2Zmc2V0LCBlbmQubm9kZSk7IH1cbiAgICBjYXRjaChlKSB7fSAvLyBPdXIgbW9kZWwgb2YgdGhlIERPTSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmFuZ2Ugd2UgdHJ5IHRvIHNldCBjYW4gYmUgaW1wb3NzaWJsZVxuICAgIGlmIChybmcpIHtcbiAgICAgIGlmICghZ2Vja28gJiYgY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgICBzZWwuY29sbGFwc2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICAgICAgaWYgKCFybmcuY29sbGFwc2VkKSB7XG4gICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHNlbC5hZGRSYW5nZShybmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbC5hZGRSYW5nZShybmcpO1xuICAgICAgfVxuICAgICAgaWYgKG9sZCAmJiBzZWwuYW5jaG9yTm9kZSA9PSBudWxsKSB7IHNlbC5hZGRSYW5nZShvbGQpOyB9XG4gICAgICBlbHNlIGlmIChnZWNrbykgeyB0aGlzLnN0YXJ0R3JhY2VQZXJpb2QoKTsgfVxuICAgIH1cbiAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTtcbiAgICB0aGlzLmdyYWNlUGVyaW9kID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEuZ3JhY2VQZXJpb2QgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzJDEuc2VsZWN0aW9uQ2hhbmdlZCgpKVxuICAgICAgICB7IHRoaXMkMS5jbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KTsgfVxuICAgIH0sIDIwKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQodGhpcy5jbS5kaXNwbGF5LmN1cnNvckRpdiwgaW5mby5jdXJzb3JzKTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuc2VsZWN0aW9uRGl2LCBpbmZvLnNlbGVjdGlvbik7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlbWVtYmVyU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIHRoaXMubGFzdEFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTsgdGhpcy5sYXN0QW5jaG9yT2Zmc2V0ID0gc2VsLmFuY2hvck9mZnNldDtcbiAgICB0aGlzLmxhc3RGb2N1c05vZGUgPSBzZWwuZm9jdXNOb2RlOyB0aGlzLmxhc3RGb2N1c09mZnNldCA9IHNlbC5mb2N1c09mZnNldDtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwucmFuZ2VDb3VudCkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBub2RlID0gc2VsLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgcmV0dXJuIGNvbnRhaW5zKHRoaXMuZGl2LCBub2RlKVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIikge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpXG4gICAgICAgIHsgdGhpcy5zaG93U2VsZWN0aW9uKHRoaXMucHJlcGFyZVNlbGVjdGlvbigpLCB0cnVlKTsgfVxuICAgICAgdGhpcy5kaXYuZm9jdXMoKTtcbiAgICB9XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gKCkgeyB0aGlzLmRpdi5ibHVyKCk7IH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5nZXRGaWVsZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZGl2IH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnN1cHBvcnRzVG91Y2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlY2VpdmVkRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0ID0gdGhpcztcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbkVkaXRvcigpKVxuICAgICAgeyB0aGlzLnBvbGxTZWxlY3Rpb24oKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7IH1cblxuICAgIGZ1bmN0aW9uIHBvbGwoKSB7XG4gICAgICBpZiAoaW5wdXQuY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgICBpbnB1dC5wb2xsU2VsZWN0aW9uKCk7XG4gICAgICAgIGlucHV0LnBvbGxpbmcuc2V0KGlucHV0LmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBwb2xsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBwb2xsKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4gc2VsLmFuY2hvck5vZGUgIT0gdGhpcy5sYXN0QW5jaG9yTm9kZSB8fCBzZWwuYW5jaG9yT2Zmc2V0ICE9IHRoaXMubGFzdEFuY2hvck9mZnNldCB8fFxuICAgICAgc2VsLmZvY3VzTm9kZSAhPSB0aGlzLmxhc3RGb2N1c05vZGUgfHwgc2VsLmZvY3VzT2Zmc2V0ICE9IHRoaXMubGFzdEZvY3VzT2Zmc2V0XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnBvbGxTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCB8fCB0aGlzLmdyYWNlUGVyaW9kIHx8ICF0aGlzLnNlbGVjdGlvbkNoYW5nZWQoKSkgeyByZXR1cm4gfVxuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpLCBjbSA9IHRoaXMuY207XG4gICAgLy8gT24gQW5kcm9pZCBDaHJvbWUgKHZlcnNpb24gNTYsIGF0IGxlYXN0KSwgYmFja3NwYWNpbmcgaW50byBhblxuICAgIC8vIHVuZWRpdGFibGUgYmxvY2sgZWxlbWVudCB3aWxsIHB1dCB0aGUgY3Vyc29yIGluIHRoYXQgZWxlbWVudCxcbiAgICAvLyBhbmQgdGhlbiwgYmVjYXVzZSBpdCdzIG5vdCBlZGl0YWJsZSwgaGlkZSB0aGUgdmlydHVhbCBrZXlib2FyZC5cbiAgICAvLyBCZWNhdXNlIEFuZHJvaWQgZG9lc24ndCBhbGxvdyB1cyB0byBhY3R1YWxseSBkZXRlY3QgYmFja3NwYWNlXG4gICAgLy8gcHJlc3NlcyBpbiBhIHNhbmUgd2F5LCB0aGlzIGNvZGUgY2hlY2tzIGZvciB3aGVuIHRoYXQgaGFwcGVuc1xuICAgIC8vIGFuZCBzaW11bGF0ZXMgYSBiYWNrc3BhY2UgcHJlc3MgaW4gdGhpcyBjYXNlLlxuICAgIGlmIChhbmRyb2lkICYmIGNocm9tZSAmJiB0aGlzLmNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MubGVuZ3RoICYmIGlzSW5HdXR0ZXIoc2VsLmFuY2hvck5vZGUpKSB7XG4gICAgICB0aGlzLmNtLnRyaWdnZXJPbktleURvd24oe3R5cGU6IFwia2V5ZG93blwiLCBrZXlDb2RlOiA4LCBwcmV2ZW50RGVmYXVsdDogTWF0aC5hYnN9KTtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTtcbiAgICB2YXIgYW5jaG9yID0gZG9tVG9Qb3MoY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTtcbiAgICB2YXIgaGVhZCA9IGRvbVRvUG9zKGNtLCBzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpO1xuICAgIGlmIChhbmNob3IgJiYgaGVhZCkgeyBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgc2VsX2RvbnRTY3JvbGwpO1xuICAgICAgaWYgKGFuY2hvci5iYWQgfHwgaGVhZC5iYWQpIHsgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7IH1cbiAgICB9KTsgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5wb2xsQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5yZWFkRE9NVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCk7XG4gICAgICB0aGlzLnJlYWRET01UaW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2VsID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7XG4gICAgdmFyIGZyb20gPSBzZWwuZnJvbSgpLCB0byA9IHNlbC50bygpO1xuICAgIGlmIChmcm9tLmNoID09IDAgJiYgZnJvbS5saW5lID4gY20uZmlyc3RMaW5lKCkpXG4gICAgICB7IGZyb20gPSBQb3MoZnJvbS5saW5lIC0gMSwgZ2V0TGluZShjbS5kb2MsIGZyb20ubGluZSAtIDEpLmxlbmd0aCk7IH1cbiAgICBpZiAodG8uY2ggPT0gZ2V0TGluZShjbS5kb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoICYmIHRvLmxpbmUgPCBjbS5sYXN0TGluZSgpKVxuICAgICAgeyB0byA9IFBvcyh0by5saW5lICsgMSwgMCk7IH1cbiAgICBpZiAoZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCB0by5saW5lID4gZGlzcGxheS52aWV3VG8gLSAxKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICB2YXIgZnJvbUluZGV4LCBmcm9tTGluZSwgZnJvbU5vZGU7XG4gICAgaWYgKGZyb20ubGluZSA9PSBkaXNwbGF5LnZpZXdGcm9tIHx8IChmcm9tSW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCBmcm9tLmxpbmUpKSA9PSAwKSB7XG4gICAgICBmcm9tTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbMF0ubGluZSk7XG4gICAgICBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1swXS5ub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbZnJvbUluZGV4XS5saW5lKTtcbiAgICAgIGZyb21Ob2RlID0gZGlzcGxheS52aWV3W2Zyb21JbmRleCAtIDFdLm5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIHZhciB0b0luZGV4ID0gZmluZFZpZXdJbmRleChjbSwgdG8ubGluZSk7XG4gICAgdmFyIHRvTGluZSwgdG9Ob2RlO1xuICAgIGlmICh0b0luZGV4ID09IGRpc3BsYXkudmlldy5sZW5ndGggLSAxKSB7XG4gICAgICB0b0xpbmUgPSBkaXNwbGF5LnZpZXdUbyAtIDE7XG4gICAgICB0b05vZGUgPSBkaXNwbGF5LmxpbmVEaXYubGFzdENoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b0xpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5lKSAtIDE7XG4gICAgICB0b05vZGUgPSBkaXNwbGF5LnZpZXdbdG9JbmRleCArIDFdLm5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgIH1cblxuICAgIGlmICghZnJvbU5vZGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgbmV3VGV4dCA9IGNtLmRvYy5zcGxpdExpbmVzKGRvbVRleHRCZXR3ZWVuKGNtLCBmcm9tTm9kZSwgdG9Ob2RlLCBmcm9tTGluZSwgdG9MaW5lKSk7XG4gICAgdmFyIG9sZFRleHQgPSBnZXRCZXR3ZWVuKGNtLmRvYywgUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGluZSwgZ2V0TGluZShjbS5kb2MsIHRvTGluZSkudGV4dC5sZW5ndGgpKTtcbiAgICB3aGlsZSAobmV3VGV4dC5sZW5ndGggPiAxICYmIG9sZFRleHQubGVuZ3RoID4gMSkge1xuICAgICAgaWYgKGxzdChuZXdUZXh0KSA9PSBsc3Qob2xkVGV4dCkpIHsgbmV3VGV4dC5wb3AoKTsgb2xkVGV4dC5wb3AoKTsgdG9MaW5lLS07IH1cbiAgICAgIGVsc2UgaWYgKG5ld1RleHRbMF0gPT0gb2xkVGV4dFswXSkgeyBuZXdUZXh0LnNoaWZ0KCk7IG9sZFRleHQuc2hpZnQoKTsgZnJvbUxpbmUrKzsgfVxuICAgICAgZWxzZSB7IGJyZWFrIH1cbiAgICB9XG5cbiAgICB2YXIgY3V0RnJvbnQgPSAwLCBjdXRFbmQgPSAwO1xuICAgIHZhciBuZXdUb3AgPSBuZXdUZXh0WzBdLCBvbGRUb3AgPSBvbGRUZXh0WzBdLCBtYXhDdXRGcm9udCA9IE1hdGgubWluKG5ld1RvcC5sZW5ndGgsIG9sZFRvcC5sZW5ndGgpO1xuICAgIHdoaWxlIChjdXRGcm9udCA8IG1heEN1dEZyb250ICYmIG5ld1RvcC5jaGFyQ29kZUF0KGN1dEZyb250KSA9PSBvbGRUb3AuY2hhckNvZGVBdChjdXRGcm9udCkpXG4gICAgICB7ICsrY3V0RnJvbnQ7IH1cbiAgICB2YXIgbmV3Qm90ID0gbHN0KG5ld1RleHQpLCBvbGRCb3QgPSBsc3Qob2xkVGV4dCk7XG4gICAgdmFyIG1heEN1dEVuZCA9IE1hdGgubWluKG5ld0JvdC5sZW5ndGggLSAobmV3VGV4dC5sZW5ndGggPT0gMSA/IGN1dEZyb250IDogMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEJvdC5sZW5ndGggLSAob2xkVGV4dC5sZW5ndGggPT0gMSA/IGN1dEZyb250IDogMCkpO1xuICAgIHdoaWxlIChjdXRFbmQgPCBtYXhDdXRFbmQgJiZcbiAgICAgICAgICAgbmV3Qm90LmNoYXJDb2RlQXQobmV3Qm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpID09IG9sZEJvdC5jaGFyQ29kZUF0KG9sZEJvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSlcbiAgICAgIHsgKytjdXRFbmQ7IH1cbiAgICAvLyBUcnkgdG8gbW92ZSBzdGFydCBvZiBjaGFuZ2UgdG8gc3RhcnQgb2Ygc2VsZWN0aW9uIGlmIGFtYmlndW91c1xuICAgIGlmIChuZXdUZXh0Lmxlbmd0aCA9PSAxICYmIG9sZFRleHQubGVuZ3RoID09IDEgJiYgZnJvbUxpbmUgPT0gZnJvbS5saW5lKSB7XG4gICAgICB3aGlsZSAoY3V0RnJvbnQgJiYgY3V0RnJvbnQgPiBmcm9tLmNoICYmXG4gICAgICAgICAgICAgbmV3Qm90LmNoYXJDb2RlQXQobmV3Qm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpID09IG9sZEJvdC5jaGFyQ29kZUF0KG9sZEJvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSkge1xuICAgICAgICBjdXRGcm9udC0tO1xuICAgICAgICBjdXRFbmQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdUZXh0W25ld1RleHQubGVuZ3RoIC0gMV0gPSBuZXdCb3Quc2xpY2UoMCwgbmV3Qm90Lmxlbmd0aCAtIGN1dEVuZCkucmVwbGFjZSgvXlxcdTIwMGIrLywgXCJcIik7XG4gICAgbmV3VGV4dFswXSA9IG5ld1RleHRbMF0uc2xpY2UoY3V0RnJvbnQpLnJlcGxhY2UoL1xcdTIwMGIrJC8sIFwiXCIpO1xuXG4gICAgdmFyIGNoRnJvbSA9IFBvcyhmcm9tTGluZSwgY3V0RnJvbnQpO1xuICAgIHZhciBjaFRvID0gUG9zKHRvTGluZSwgb2xkVGV4dC5sZW5ndGggPyBsc3Qob2xkVGV4dCkubGVuZ3RoIC0gY3V0RW5kIDogMCk7XG4gICAgaWYgKG5ld1RleHQubGVuZ3RoID4gMSB8fCBuZXdUZXh0WzBdIHx8IGNtcChjaEZyb20sIGNoVG8pKSB7XG4gICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCBuZXdUZXh0LCBjaEZyb20sIGNoVG8sIFwiK2lucHV0XCIpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmVuc3VyZVBvbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTtcbiAgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpO1xuICB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZm9yY2VDb21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpO1xuICAgIHRoaXMuY29tcG9zaW5nID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZUZyb21ET00oKTtcbiAgICB0aGlzLmRpdi5ibHVyKCk7XG4gICAgdGhpcy5kaXYuZm9jdXMoKTtcbiAgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlYWRGcm9tRE9NU29vbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCkgeyByZXR1cm4gfVxuICAgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMkMS5yZWFkRE9NVGltZW91dCA9IG51bGw7XG4gICAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgICBpZiAodGhpcyQxLmNvbXBvc2luZy5kb25lKSB7IHRoaXMkMS5jb21wb3NpbmcgPSBudWxsOyB9XG4gICAgICAgIGVsc2UgeyByZXR1cm4gfVxuICAgICAgfVxuICAgICAgdGhpcyQxLnVwZGF0ZUZyb21ET00oKTtcbiAgICB9LCA4MCk7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnVwZGF0ZUZyb21ET00gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLmNtLmlzUmVhZE9ubHkoKSB8fCAhdGhpcy5wb2xsQ29udGVudCgpKVxuICAgICAgeyBydW5Jbk9wKHRoaXMuY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZ0NoYW5nZSh0aGlzJDEuY20pOyB9KTsgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBub2RlLmNvbnRlbnRFZGl0YWJsZSA9IFwiZmFsc2VcIjtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUuY2hhckNvZGUgPT0gMCB8fCB0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuY20uaXNSZWFkT25seSgpKVxuICAgICAgeyBvcGVyYXRpb24odGhpcy5jbSwgYXBwbHlUZXh0SW5wdXQpKHRoaXMuY20sIFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSA9PSBudWxsID8gZS5rZXlDb2RlIDogZS5jaGFyQ29kZSksIDApOyB9XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB0aGlzLmRpdi5jb250ZW50RWRpdGFibGUgPSBTdHJpbmcodmFsICE9IFwibm9jdXJzb3JcIik7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoKSB7fTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7fTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUubmVlZHNDb250ZW50QXR0cmlidXRlID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBwb3NUb0RPTShjbSwgcG9zKSB7XG4gICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIHBvcy5saW5lKTtcbiAgICBpZiAoIXZpZXcgfHwgdmlldy5oaWRkZW4pIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgICB2YXIgaW5mbyA9IG1hcEZyb21MaW5lVmlldyh2aWV3LCBsaW5lLCBwb3MubGluZSk7XG5cbiAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKSwgc2lkZSA9IFwibGVmdFwiO1xuICAgIGlmIChvcmRlcikge1xuICAgICAgdmFyIHBhcnRQb3MgPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBwb3MuY2gpO1xuICAgICAgc2lkZSA9IHBhcnRQb3MgJSAyID8gXCJyaWdodFwiIDogXCJsZWZ0XCI7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKGluZm8ubWFwLCBwb3MuY2gsIHNpZGUpO1xuICAgIHJlc3VsdC5vZmZzZXQgPSByZXN1bHQuY29sbGFwc2UgPT0gXCJyaWdodFwiID8gcmVzdWx0LmVuZCA6IHJlc3VsdC5zdGFydDtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBpc0luR3V0dGVyKG5vZGUpIHtcbiAgICBmb3IgKHZhciBzY2FuID0gbm9kZTsgc2Nhbjsgc2NhbiA9IHNjYW4ucGFyZW50Tm9kZSlcbiAgICAgIHsgaWYgKC9Db2RlTWlycm9yLWd1dHRlci13cmFwcGVyLy50ZXN0KHNjYW4uY2xhc3NOYW1lKSkgeyByZXR1cm4gdHJ1ZSB9IH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhZFBvcyhwb3MsIGJhZCkgeyBpZiAoYmFkKSB7IHBvcy5iYWQgPSB0cnVlOyB9IHJldHVybiBwb3MgfVxuXG4gIGZ1bmN0aW9uIGRvbVRleHRCZXR3ZWVuKGNtLCBmcm9tLCB0bywgZnJvbUxpbmUsIHRvTGluZSkge1xuICAgIHZhciB0ZXh0ID0gXCJcIiwgY2xvc2luZyA9IGZhbHNlLCBsaW5lU2VwID0gY20uZG9jLmxpbmVTZXBhcmF0b3IoKSwgZXh0cmFMaW5lYnJlYWsgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiByZWNvZ25pemVNYXJrZXIoaWQpIHsgcmV0dXJuIGZ1bmN0aW9uIChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pZCA9PSBpZDsgfSB9XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICBpZiAoY2xvc2luZykge1xuICAgICAgICB0ZXh0ICs9IGxpbmVTZXA7XG4gICAgICAgIGlmIChleHRyYUxpbmVicmVhaykgeyB0ZXh0ICs9IGxpbmVTZXA7IH1cbiAgICAgICAgY2xvc2luZyA9IGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRleHQoc3RyKSB7XG4gICAgICBpZiAoc3RyKSB7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgICAgIHRleHQgKz0gc3RyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB3YWxrKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHtcbiAgICAgICAgdmFyIGNtVGV4dCA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiY20tdGV4dFwiKTtcbiAgICAgICAgaWYgKGNtVGV4dCkge1xuICAgICAgICAgIGFkZFRleHQoY21UZXh0KTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgbWFya2VySUQgPSBub2RlLmdldEF0dHJpYnV0ZShcImNtLW1hcmtlclwiKSwgcmFuZ2U7XG4gICAgICAgIGlmIChtYXJrZXJJRCkge1xuICAgICAgICAgIHZhciBmb3VuZCA9IGNtLmZpbmRNYXJrcyhQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lICsgMSwgMCksIHJlY29nbml6ZU1hcmtlcigrbWFya2VySUQpKTtcbiAgICAgICAgICBpZiAoZm91bmQubGVuZ3RoICYmIChyYW5nZSA9IGZvdW5kWzBdLmZpbmQoMCkpKVxuICAgICAgICAgICAgeyBhZGRUZXh0KGdldEJldHdlZW4oY20uZG9jLCByYW5nZS5mcm9tLCByYW5nZS50bykuam9pbihsaW5lU2VwKSk7IH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgPT0gXCJmYWxzZVwiKSB7IHJldHVybiB9XG4gICAgICAgIHZhciBpc0Jsb2NrID0gL14ocHJlfGRpdnxwfGxpfHRhYmxlfGJyKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpO1xuICAgICAgICBpZiAoIS9eYnIkL2kudGVzdChub2RlLm5vZGVOYW1lKSAmJiBub2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PSAwKSB7IHJldHVybiB9XG5cbiAgICAgICAgaWYgKGlzQmxvY2spIHsgY2xvc2UoKTsgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICB7IHdhbGsobm9kZS5jaGlsZE5vZGVzW2ldKTsgfVxuXG4gICAgICAgIGlmICgvXihwcmV8cCkkL2kudGVzdChub2RlLm5vZGVOYW1lKSkgeyBleHRyYUxpbmVicmVhayA9IHRydWU7IH1cbiAgICAgICAgaWYgKGlzQmxvY2spIHsgY2xvc2luZyA9IHRydWU7IH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7XG4gICAgICAgIGFkZFRleHQobm9kZS5ub2RlVmFsdWUucmVwbGFjZSgvXFx1MjAwYi9nLCBcIlwiKS5yZXBsYWNlKC9cXHUwMGEwL2csIFwiIFwiKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoOzspIHtcbiAgICAgIHdhbGsoZnJvbSk7XG4gICAgICBpZiAoZnJvbSA9PSB0bykgeyBicmVhayB9XG4gICAgICBmcm9tID0gZnJvbS5uZXh0U2libGluZztcbiAgICAgIGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBkb21Ub1BvcyhjbSwgbm9kZSwgb2Zmc2V0KSB7XG4gICAgdmFyIGxpbmVOb2RlO1xuICAgIGlmIChub2RlID09IGNtLmRpc3BsYXkubGluZURpdikge1xuICAgICAgbGluZU5vZGUgPSBjbS5kaXNwbGF5LmxpbmVEaXYuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgaWYgKCFsaW5lTm9kZSkgeyByZXR1cm4gYmFkUG9zKGNtLmNsaXBQb3MoUG9zKGNtLmRpc3BsYXkudmlld1RvIC0gMSkpLCB0cnVlKSB9XG4gICAgICBub2RlID0gbnVsbDsgb2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsaW5lTm9kZSA9IG5vZGU7OyBsaW5lTm9kZSA9IGxpbmVOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgaWYgKCFsaW5lTm9kZSB8fCBsaW5lTm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBpZiAobGluZU5vZGUucGFyZW50Tm9kZSAmJiBsaW5lTm9kZS5wYXJlbnROb2RlID09IGNtLmRpc3BsYXkubGluZURpdikgeyBicmVhayB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZVZpZXcgPSBjbS5kaXNwbGF5LnZpZXdbaV07XG4gICAgICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lTm9kZSlcbiAgICAgICAgeyByZXR1cm4gbG9jYXRlTm9kZUluTGluZVZpZXcobGluZVZpZXcsIG5vZGUsIG9mZnNldCkgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIHtcbiAgICB2YXIgd3JhcHBlciA9IGxpbmVWaWV3LnRleHQuZmlyc3RDaGlsZCwgYmFkID0gZmFsc2U7XG4gICAgaWYgKCFub2RlIHx8ICFjb250YWlucyh3cmFwcGVyLCBub2RlKSkgeyByZXR1cm4gYmFkUG9zKFBvcyhsaW5lTm8obGluZVZpZXcubGluZSksIDApLCB0cnVlKSB9XG4gICAgaWYgKG5vZGUgPT0gd3JhcHBlcikge1xuICAgICAgYmFkID0gdHJ1ZTtcbiAgICAgIG5vZGUgPSB3cmFwcGVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdmFyIGxpbmUgPSBsaW5lVmlldy5yZXN0ID8gbHN0KGxpbmVWaWV3LnJlc3QpIDogbGluZVZpZXcubGluZTtcbiAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3MobGluZU5vKGxpbmUpLCBsaW5lLnRleHQubGVuZ3RoKSwgYmFkKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUubm9kZVR5cGUgPT0gMyA/IG5vZGUgOiBudWxsLCB0b3BOb2RlID0gbm9kZTtcbiAgICBpZiAoIXRleHROb2RlICYmIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAmJiBub2RlLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMykge1xuICAgICAgdGV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICBpZiAob2Zmc2V0KSB7IG9mZnNldCA9IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGg7IH1cbiAgICB9XG4gICAgd2hpbGUgKHRvcE5vZGUucGFyZW50Tm9kZSAhPSB3cmFwcGVyKSB7IHRvcE5vZGUgPSB0b3BOb2RlLnBhcmVudE5vZGU7IH1cbiAgICB2YXIgbWVhc3VyZSA9IGxpbmVWaWV3Lm1lYXN1cmUsIG1hcHMgPSBtZWFzdXJlLm1hcHM7XG5cbiAgICBmdW5jdGlvbiBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAtMTsgaSA8IChtYXBzID8gbWFwcy5sZW5ndGggOiAwKTsgaSsrKSB7XG4gICAgICAgIHZhciBtYXAgPSBpIDwgMCA/IG1lYXN1cmUubWFwIDogbWFwc1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICB2YXIgY3VyTm9kZSA9IG1hcFtqICsgMl07XG4gICAgICAgICAgaWYgKGN1ck5vZGUgPT0gdGV4dE5vZGUgfHwgY3VyTm9kZSA9PSB0b3BOb2RlKSB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVObyhpIDwgMCA/IGxpbmVWaWV3LmxpbmUgOiBsaW5lVmlldy5yZXN0W2ldKTtcbiAgICAgICAgICAgIHZhciBjaCA9IG1hcFtqXSArIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGN1ck5vZGUgIT0gdGV4dE5vZGUpIHsgY2ggPSBtYXBbaiArIChvZmZzZXQgPyAxIDogMCldOyB9XG4gICAgICAgICAgICByZXR1cm4gUG9zKGxpbmUsIGNoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZm91bmQgPSBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpO1xuICAgIGlmIChmb3VuZCkgeyByZXR1cm4gYmFkUG9zKGZvdW5kLCBiYWQpIH1cblxuICAgIC8vIEZJWE1FIHRoaXMgaXMgYWxsIHJlYWxseSBzaGFreS4gbWlnaHQgaGFuZGxlIHRoZSBmZXcgY2FzZXMgaXQgbmVlZHMgdG8gaGFuZGxlLCBidXQgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zXG4gICAgZm9yICh2YXIgYWZ0ZXIgPSB0b3BOb2RlLm5leHRTaWJsaW5nLCBkaXN0ID0gdGV4dE5vZGUgPyB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoIC0gb2Zmc2V0IDogMDsgYWZ0ZXI7IGFmdGVyID0gYWZ0ZXIubmV4dFNpYmxpbmcpIHtcbiAgICAgIGZvdW5kID0gZmluZChhZnRlciwgYWZ0ZXIuZmlyc3RDaGlsZCwgMCk7XG4gICAgICBpZiAoZm91bmQpXG4gICAgICAgIHsgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggLSBkaXN0KSwgYmFkKSB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgZGlzdCArPSBhZnRlci50ZXh0Q29udGVudC5sZW5ndGg7IH1cbiAgICB9XG4gICAgZm9yICh2YXIgYmVmb3JlID0gdG9wTm9kZS5wcmV2aW91c1NpYmxpbmcsIGRpc3QkMSA9IG9mZnNldDsgYmVmb3JlOyBiZWZvcmUgPSBiZWZvcmUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBmb3VuZCA9IGZpbmQoYmVmb3JlLCBiZWZvcmUuZmlyc3RDaGlsZCwgLTEpO1xuICAgICAgaWYgKGZvdW5kKVxuICAgICAgICB7IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoICsgZGlzdCQxKSwgYmFkKSB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgZGlzdCQxICs9IGJlZm9yZS50ZXh0Q29udGVudC5sZW5ndGg7IH1cbiAgICB9XG4gIH1cblxuICAvLyBURVhUQVJFQSBJTlBVVCBTVFlMRVxuXG4gIHZhciBUZXh0YXJlYUlucHV0ID0gZnVuY3Rpb24oY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgLy8gU2VlIGlucHV0LnBvbGwgYW5kIGlucHV0LnJlc2V0XG4gICAgdGhpcy5wcmV2SW5wdXQgPSBcIlwiO1xuXG4gICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29uXG4gICAgLy8gbm93IChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAnaW5wdXQnKSBhbmQgYXJlXG4gICAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS5cbiAgICB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7XG4gICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhlIHBvbGxlclxuICAgIHRoaXMucG9sbGluZyA9IG5ldyBEZWxheWVkKCk7XG4gICAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCBJRSBpc3N1ZSB3aXRoIHNlbGVjdGlvbiBiZWluZyBmb3Jnb3R0ZW4gd2hlbiBmb2N1cyBtb3ZlcyBhd2F5IGZyb20gdGV4dGFyZWFcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29tcG9zaW5nID0gbnVsbDtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGRpc3BsYXkpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSB0aGlzLmNtO1xuICAgIHRoaXMuY3JlYXRlRmllbGQoZGlzcGxheSk7XG4gICAgdmFyIHRlID0gdGhpcy50ZXh0YXJlYTtcblxuICAgIGRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLCBkaXNwbGF5LndyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgICAvLyBOZWVkZWQgdG8gaGlkZSBiaWcgYmx1ZSBibGlua2luZyBjdXJzb3Igb24gTW9iaWxlIFNhZmFyaSAoZG9lc24ndCBzZWVtIHRvIHdvcmsgaW4gaU9TIDggYW55bW9yZSlcbiAgICBpZiAoaW9zKSB7IHRlLnN0eWxlLndpZHRoID0gXCIwcHhcIjsgfVxuXG4gICAgb24odGUsIFwiaW5wdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlzJDEuaGFzU2VsZWN0aW9uKSB7IHRoaXMkMS5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gICAgICBpbnB1dC5wb2xsKCk7XG4gICAgfSk7XG5cbiAgICBvbih0ZSwgXCJwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBoYW5kbGVQYXN0ZShlLCBjbSkpIHsgcmV0dXJuIH1cblxuICAgICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9ICtuZXcgRGF0ZTtcbiAgICAgIGlucHV0LmZhc3RQb2xsKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29weUN1dChlKSB7XG4gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogZmFsc2UsIHRleHQ6IGNtLmdldFNlbGVjdGlvbnMoKX0pO1xuICAgICAgfSBlbHNlIGlmICghY20ub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZ2VzID0gY29weWFibGVSYW5nZXMoY20pO1xuICAgICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogdHJ1ZSwgdGV4dDogcmFuZ2VzLnRleHR9KTtcbiAgICAgICAgaWYgKGUudHlwZSA9PSBcImN1dFwiKSB7XG4gICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCBudWxsLCBzZWxfZG9udFNjcm9sbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5wdXQucHJldklucHV0ID0gXCJcIjtcbiAgICAgICAgICB0ZS52YWx1ZSA9IHJhbmdlcy50ZXh0LmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgc2VsZWN0SW5wdXQodGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHsgY20uc3RhdGUuY3V0SW5jb21pbmcgPSArbmV3IERhdGU7IH1cbiAgICB9XG4gICAgb24odGUsIFwiY3V0XCIsIHByZXBhcmVDb3B5Q3V0KTtcbiAgICBvbih0ZSwgXCJjb3B5XCIsIHByZXBhcmVDb3B5Q3V0KTtcblxuICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsIFwicGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHx8IHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgICAgaWYgKCF0ZS5kaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSArbmV3IERhdGU7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBQYXNzIHRoZSBgcGFzdGVgIGV2ZW50IHRvIHRoZSB0ZXh0YXJlYSBzbyBpdCdzIGhhbmRsZWQgYnkgaXRzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KFwicGFzdGVcIik7XG4gICAgICBldmVudC5jbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhO1xuICAgICAgdGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFuZGxlIG91ciBvd24pXG4gICAgb24oZGlzcGxheS5saW5lU3BhY2UsIFwic2VsZWN0c3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgeyBlX3ByZXZlbnREZWZhdWx0KGUpOyB9XG4gICAgfSk7XG5cbiAgICBvbih0ZSwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGFydCA9IGNtLmdldEN1cnNvcihcImZyb21cIik7XG4gICAgICBpZiAoaW5wdXQuY29tcG9zaW5nKSB7IGlucHV0LmNvbXBvc2luZy5yYW5nZS5jbGVhcigpOyB9XG4gICAgICBpbnB1dC5jb21wb3NpbmcgPSB7XG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgcmFuZ2U6IGNtLm1hcmtUZXh0KHN0YXJ0LCBjbS5nZXRDdXJzb3IoXCJ0b1wiKSwge2NsYXNzTmFtZTogXCJDb2RlTWlycm9yLWNvbXBvc2luZ1wifSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgb24odGUsIFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykge1xuICAgICAgICBpbnB1dC5wb2xsKCk7XG4gICAgICAgIGlucHV0LmNvbXBvc2luZy5yYW5nZS5jbGVhcigpO1xuICAgICAgICBpbnB1dC5jb21wb3NpbmcgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gKF9kaXNwbGF5KSB7XG4gICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhXG4gICAgdGhpcy53cmFwcGVyID0gaGlkZGVuVGV4dGFyZWEoKTtcbiAgICAvLyBUaGUgc2VtaWhpZGRlbiB0ZXh0YXJlYSB0aGF0IGlzIGZvY3VzZWQgd2hlbiB0aGUgZWRpdG9yIGlzXG4gICAgLy8gZm9jdXNlZCwgYW5kIHJlY2VpdmVzIGlucHV0LlxuICAgIHRoaXMudGV4dGFyZWEgPSB0aGlzLndyYXBwZXIuZmlyc3RDaGlsZDtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3JcbiAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKGNtKTtcblxuICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzXG4gICAgaWYgKGNtLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikge1xuICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsIFwiZGl2XCIpO1xuICAgICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXN1bHQudGVUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0IC0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTtcbiAgICAgIHJlc3VsdC50ZUxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2ZmLmxlZnQgLSB3cmFwT2ZmLmxlZnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2hvd1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChkcmF3bikge1xuICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuY3Vyc29yRGl2LCBkcmF3bi5jdXJzb3JzKTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZHJhd24uc2VsZWN0aW9uKTtcbiAgICBpZiAoZHJhd24udGVUb3AgIT0gbnVsbCkge1xuICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLnRvcCA9IGRyYXduLnRlVG9wICsgXCJweFwiO1xuICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQgPSBkcmF3bi50ZUxlZnQgKyBcInB4XCI7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LFxuICAvLyB3aGVuIG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMgc2VsZWN0ZWQpXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKHR5cGluZykge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51UGVuZGluZyB8fCB0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucHJldklucHV0ID0gXCJcIjtcbiAgICAgIHZhciBjb250ZW50ID0gY20uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29udGVudDtcbiAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSB7IHNlbGVjdElucHV0KHRoaXMudGV4dGFyZWEpOyB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gY29udGVudDsgfVxuICAgIH0gZWxzZSBpZiAoIXR5cGluZykge1xuICAgICAgdGhpcy5wcmV2SW5wdXQgPSB0aGlzLnRleHRhcmVhLnZhbHVlID0gXCJcIjtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50ZXh0YXJlYSB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnN1cHBvcnRzVG91Y2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZSB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiICYmICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IHRoaXMudGV4dGFyZWEpKSB7XG4gICAgICB0cnkgeyB0aGlzLnRleHRhcmVhLmZvY3VzKCk7IH1cbiAgICAgIGNhdGNoIChlKSB7fSAvLyBJRTggd2lsbCB0aHJvdyBpZiB0aGUgdGV4dGFyZWEgaXMgZGlzcGxheTogbm9uZSBvciBub3QgaW4gRE9NXG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbiAoKSB7IHRoaXMudGV4dGFyZWEuYmx1cigpOyB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy53cmFwcGVyLnN0eWxlLnRvcCA9IHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gMDtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkgeyB0aGlzLnNsb3dQb2xsKCk7IH07XG5cbiAgLy8gUG9sbCBmb3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcuIFRoaXNcbiAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2xvd1BvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLnBvbGxpbmdGYXN0KSB7IHJldHVybiB9XG4gICAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEucG9sbCgpO1xuICAgICAgaWYgKHRoaXMkMS5jbS5zdGF0ZS5mb2N1c2VkKSB7IHRoaXMkMS5zbG93UG9sbCgpOyB9XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gV2hlbiBhbiBldmVudCBoYXMganVzdCBjb21lIGluIHRoYXQgaXMgbGlrZWx5IHRvIGFkZCBvciBjaGFuZ2VcbiAgLy8gc29tZXRoaW5nIGluIHRoZSBpbnB1dCB0ZXh0YXJlYSwgd2UgcG9sbCBmYXN0ZXIsIHRvIGVuc3VyZSB0aGF0XG4gIC8vIHRoZSBjaGFuZ2UgYXBwZWFycyBvbiB0aGUgc2NyZWVuIHF1aWNrbHkuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmZhc3RQb2xsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtaXNzZWQgPSBmYWxzZSwgaW5wdXQgPSB0aGlzO1xuICAgIGlucHV0LnBvbGxpbmdGYXN0ID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBwKCkge1xuICAgICAgdmFyIGNoYW5nZWQgPSBpbnB1dC5wb2xsKCk7XG4gICAgICBpZiAoIWNoYW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IGlucHV0LnBvbGxpbmcuc2V0KDYwLCBwKTt9XG4gICAgICBlbHNlIHtpbnB1dC5wb2xsaW5nRmFzdCA9IGZhbHNlOyBpbnB1dC5zbG93UG9sbCgpO31cbiAgICB9XG4gICAgaW5wdXQucG9sbGluZy5zZXQoMjAsIHApO1xuICB9O1xuXG4gIC8vIFJlYWQgaW5wdXQgZnJvbSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLlxuICAvLyBXaGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEsIGFuZFxuICAvLyBzZWxlY3RlZCAodW5sZXNzIGl0IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBwbGFjZWhvbGRlciBpc1xuICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUgY3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseVxuICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3RcbiAgLy8gbm90IHJlc2V0IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywgYmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLlxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5wb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY20gPSB0aGlzLmNtLCBpbnB1dCA9IHRoaXMudGV4dGFyZWEsIHByZXZJbnB1dCA9IHRoaXMucHJldklucHV0O1xuICAgIC8vIFNpbmNlIHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzXG4gICAgLy8gcG9zc2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVuZWQuIGhhc1NlbGVjdGlvblxuICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0IGluIHRoZSB0ZXh0YXJlYSxcbiAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVlIHdvdWxkIGJlIGV4cGVuc2l2ZS5cbiAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcgfHwgIWNtLnN0YXRlLmZvY3VzZWQgfHxcbiAgICAgICAgKGhhc1NlbGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCAmJiAhdGhpcy5jb21wb3NpbmcpIHx8XG4gICAgICAgIGNtLmlzUmVhZE9ubHkoKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG5cbiAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlO1xuICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCwgYmFpbC5cbiAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAvLyBXb3JrIGFyb3VuZCBub25zZW5zaWNhbCBzZWxlY3Rpb24gcmVzZXR0aW5nIGluIElFOS8xMCwgYW5kXG4gICAgLy8gaW5leHBsaWNhYmxlIGFwcGVhcmFuY2Ugb2YgcHJpdmF0ZSBhcmVhIHVuaWNvZGUgY2hhcmFjdGVycyBvblxuICAgIC8vIHNvbWUga2V5IGNvbWJvcyBpbiBNYWMgKCMyNjg5KS5cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5ICYmIHRoaXMuaGFzU2VsZWN0aW9uID09PSB0ZXh0IHx8XG4gICAgICAgIG1hYyAmJiAvW1xcdWY3MDAtXFx1ZjdmZl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjbS5kb2Muc2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUpIHtcbiAgICAgIHZhciBmaXJzdCA9IHRleHQuY2hhckNvZGVBdCgwKTtcbiAgICAgIGlmIChmaXJzdCA9PSAweDIwMGIgJiYgIXByZXZJbnB1dCkgeyBwcmV2SW5wdXQgPSBcIlxcdTIwMGJcIjsgfVxuICAgICAgaWYgKGZpcnN0ID09IDB4MjFkYSkgeyB0aGlzLnJlc2V0KCk7IHJldHVybiB0aGlzLmNtLmV4ZWNDb21tYW5kKFwidW5kb1wiKSB9XG4gICAgfVxuICAgIC8vIEZpbmQgdGhlIHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3XG4gICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpO1xuICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpIHsgKytzYW1lOyB9XG5cbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseVRleHRJbnB1dChjbSwgdGV4dC5zbGljZShzYW1lKSwgcHJldklucHV0Lmxlbmd0aCAtIHNhbWUsXG4gICAgICAgICAgICAgICAgICAgICBudWxsLCB0aGlzJDEuY29tcG9zaW5nID8gXCIqY29tcG9zZVwiIDogbnVsbCk7XG5cbiAgICAgIC8vIERvbid0IGxlYXZlIGxvbmcgdGV4dCBpbiB0aGUgdGV4dGFyZWEsIHNpbmNlIGl0IG1ha2VzIGZ1cnRoZXIgcG9sbGluZyBzbG93XG4gICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZihcIlxcblwiKSA+IC0xKSB7IGlucHV0LnZhbHVlID0gdGhpcyQxLnByZXZJbnB1dCA9IFwiXCI7IH1cbiAgICAgIGVsc2UgeyB0aGlzJDEucHJldklucHV0ID0gdGV4dDsgfVxuXG4gICAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMkMS5jb21wb3NpbmcucmFuZ2UgPSBjbS5tYXJrVGV4dCh0aGlzJDEuY29tcG9zaW5nLnN0YXJ0LCBjbS5nZXRDdXJzb3IoXCJ0b1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmVuc3VyZVBvbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkgeyB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7IH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gICAgdGhpcy5mYXN0UG9sbCgpO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gaW5wdXQuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB0ZSA9IGlucHV0LnRleHRhcmVhO1xuICAgIGlmIChpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcpIHsgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nKCk7IH1cbiAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7XG4gICAgaWYgKCFwb3MgfHwgcHJlc3RvKSB7IHJldHVybiB9IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC5cblxuICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9uIG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVlLlxuICAgIHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O1xuICAgIGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpXG4gICAgICB7IG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MpLCBzZWxfZG9udFNjcm9sbCk7IH1cblxuICAgIHZhciBvbGRDU1MgPSB0ZS5zdHlsZS5jc3NUZXh0LCBvbGRXcmFwcGVyQ1NTID0gaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0O1xuICAgIHZhciB3cmFwcGVyQm94ID0gaW5wdXQud3JhcHBlci5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogc3RhdGljXCI7XG4gICAgdGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4O1xcbiAgICAgIHRvcDogXCIgKyAoZS5jbGllbnRZIC0gd3JhcHBlckJveC50b3AgLSA1KSArIFwicHg7IGxlZnQ6IFwiICsgKGUuY2xpZW50WCAtIHdyYXBwZXJCb3gubGVmdCAtIDUpICsgXCJweDtcXG4gICAgICB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiBcIiArIChpZSA/IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpXCIgOiBcInRyYW5zcGFyZW50XCIpICsgXCI7XFxuICAgICAgb3V0bGluZTogbm9uZTsgYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTtcIjtcbiAgICB2YXIgb2xkU2Nyb2xsWTtcbiAgICBpZiAod2Via2l0KSB7IG9sZFNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTsgfSAvLyBXb3JrIGFyb3VuZCBDaHJvbWUgaXNzdWUgKCMyNzEyKVxuICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICBpZiAod2Via2l0KSB7IHdpbmRvdy5zY3JvbGxUbyhudWxsLCBvbGRTY3JvbGxZKTsgfVxuICAgIGRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAvLyBBZGRzIFwiU2VsZWN0IGFsbFwiIHRvIGNvbnRleHQgbWVudSBpbiBGRlxuICAgIGlmICghY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgeyB0ZS52YWx1ZSA9IGlucHV0LnByZXZJbnB1dCA9IFwiIFwiOyB9XG4gICAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gcmVoaWRlO1xuICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsO1xuICAgIGNsZWFyVGltZW91dChkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCk7XG5cbiAgICAvLyBTZWxlY3QtYWxsIHdpbGwgYmUgZ3JleWVkIG91dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2VsZWN0LCBzb1xuICAgIC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3ZSBjYW4gbGF0ZXIgY2hlY2sgd2hldGhlclxuICAgIC8vIGl0IGdvdCBzZWxlY3RlZC5cbiAgICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0QWxsSGFjaygpIHtcbiAgICAgIGlmICh0ZS5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCk7XG4gICAgICAgIHZhciBleHR2YWwgPSBcIlxcdTIwMGJcIiArIChzZWxlY3RlZCA/IHRlLnZhbHVlIDogXCJcIik7XG4gICAgICAgIHRlLnZhbHVlID0gXCJcXHUyMWRhXCI7IC8vIFVzZWQgdG8gY2F0Y2ggY29udGV4dC1tZW51IHVuZG9cbiAgICAgICAgdGUudmFsdWUgPSBleHR2YWw7XG4gICAgICAgIGlucHV0LnByZXZJbnB1dCA9IHNlbGVjdGVkID8gXCJcIiA6IFwiXFx1MjAwYlwiO1xuICAgICAgICB0ZS5zZWxlY3Rpb25TdGFydCA9IDE7IHRlLnNlbGVjdGlvbkVuZCA9IGV4dHZhbC5sZW5ndGg7XG4gICAgICAgIC8vIFJlLXNldCB0aGlzLCBpbiBjYXNlIHNvbWUgb3RoZXIgaGFuZGxlciB0b3VjaGVkIHRoZVxuICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVoaWRlKCkge1xuICAgICAgaWYgKGlucHV0LmNvbnRleHRNZW51UGVuZGluZyAhPSByZWhpZGUpIHsgcmV0dXJuIH1cbiAgICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IGZhbHNlO1xuICAgICAgaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gb2xkV3JhcHBlckNTUztcbiAgICAgIHRlLnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvcyk7IH1cblxuICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsXG4gICAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIWllIHx8IChpZSAmJiBpZV92ZXJzaW9uIDwgOSkpIHsgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsgfVxuICAgICAgICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiB0ZS5zZWxlY3Rpb25TdGFydCA9PSAwICYmXG4gICAgICAgICAgICAgIHRlLnNlbGVjdGlvbkVuZCA+IDAgJiYgaW5wdXQucHJldklucHV0ID09IFwiXFx1MjAwYlwiKSB7XG4gICAgICAgICAgICBvcGVyYXRpb24oY20sIHNlbGVjdEFsbCkoY20pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSsrIDwgMTApIHtcbiAgICAgICAgICAgIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCA1MDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDtcbiAgICAgICAgICAgIGRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCAyMDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsgfVxuICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykge1xuICAgICAgZV9zdG9wKGUpO1xuICAgICAgdmFyIG1vdXNldXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZih3aW5kb3csIFwibW91c2V1cFwiLCBtb3VzZXVwKTtcbiAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTtcbiAgICAgIH07XG4gICAgICBvbih3aW5kb3csIFwibW91c2V1cFwiLCBtb3VzZXVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dChyZWhpZGUsIDUwKTtcbiAgICB9XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIGlmICghdmFsKSB7IHRoaXMucmVzZXQoKTsgfVxuICAgIHRoaXMudGV4dGFyZWEuZGlzYWJsZWQgPSB2YWwgPT0gXCJub2N1cnNvclwiO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNldFVuZWRpdGFibGUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBmcm9tVGV4dEFyZWEodGV4dGFyZWEsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fTtcbiAgICBvcHRpb25zLnZhbHVlID0gdGV4dGFyZWEudmFsdWU7XG4gICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYkluZGV4KVxuICAgICAgeyBvcHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiSW5kZXg7IH1cbiAgICBpZiAoIW9wdGlvbnMucGxhY2Vob2xkZXIgJiYgdGV4dGFyZWEucGxhY2Vob2xkZXIpXG4gICAgICB7IG9wdGlvbnMucGxhY2Vob2xkZXIgPSB0ZXh0YXJlYS5wbGFjZWhvbGRlcjsgfVxuICAgIC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBpZiB0aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9yIGlmIGl0IGhhc1xuICAgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLlxuICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyA9PSBudWxsKSB7XG4gICAgICB2YXIgaGFzRm9jdXMgPSBhY3RpdmVFbHQoKTtcbiAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHxcbiAgICAgICAgdGV4dGFyZWEuZ2V0QXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpICE9IG51bGwgJiYgaGFzRm9jdXMgPT0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gY20uZ2V0VmFsdWUoKTt9XG5cbiAgICB2YXIgcmVhbFN1Ym1pdDtcbiAgICBpZiAodGV4dGFyZWEuZm9ybSkge1xuICAgICAgb24odGV4dGFyZWEuZm9ybSwgXCJzdWJtaXRcIiwgc2F2ZSk7XG4gICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuXG4gICAgICBpZiAoIW9wdGlvbnMubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkge1xuICAgICAgICB2YXIgZm9ybSA9IHRleHRhcmVhLmZvcm07XG4gICAgICAgIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2F2ZSgpO1xuICAgICAgICAgICAgZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0O1xuICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gd3JhcHBlZFN1Ym1pdDtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoKGUpIHt9XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3B0aW9ucy5maW5pc2hJbml0ID0gZnVuY3Rpb24gKGNtKSB7XG4gICAgICBjbS5zYXZlID0gc2F2ZTtcbiAgICAgIGNtLmdldFRleHRBcmVhID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGV4dGFyZWE7IH07XG4gICAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjbS50b1RleHRBcmVhID0gaXNOYU47IC8vIFByZXZlbnQgdGhpcyBmcm9tIGJlaW5nIHJhbiB0d2ljZVxuICAgICAgICBzYXZlKCk7XG4gICAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7XG4gICAgICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgICBpZiAodGV4dGFyZWEuZm9ybSkge1xuICAgICAgICAgIG9mZih0ZXh0YXJlYS5mb3JtLCBcInN1Ym1pdFwiLCBzYXZlKTtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMubGVhdmVTdWJtaXRNZXRob2RBbG9uZSAmJiB0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgeyB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7IH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIHZhciBjbSA9IENvZGVNaXJyb3IoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsgfSxcbiAgICAgIG9wdGlvbnMpO1xuICAgIHJldHVybiBjbVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTGVnYWN5UHJvcHMoQ29kZU1pcnJvcikge1xuICAgIENvZGVNaXJyb3Iub2ZmID0gb2ZmO1xuICAgIENvZGVNaXJyb3Iub24gPSBvbjtcbiAgICBDb2RlTWlycm9yLndoZWVsRXZlbnRQaXhlbHMgPSB3aGVlbEV2ZW50UGl4ZWxzO1xuICAgIENvZGVNaXJyb3IuRG9jID0gRG9jO1xuICAgIENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9IHNwbGl0TGluZXNBdXRvO1xuICAgIENvZGVNaXJyb3IuY291bnRDb2x1bW4gPSBjb3VudENvbHVtbjtcbiAgICBDb2RlTWlycm9yLmZpbmRDb2x1bW4gPSBmaW5kQ29sdW1uO1xuICAgIENvZGVNaXJyb3IuaXNXb3JkQ2hhciA9IGlzV29yZENoYXJCYXNpYztcbiAgICBDb2RlTWlycm9yLlBhc3MgPSBQYXNzO1xuICAgIENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsO1xuICAgIENvZGVNaXJyb3IuTGluZSA9IExpbmU7XG4gICAgQ29kZU1pcnJvci5jaGFuZ2VFbmQgPSBjaGFuZ2VFbmQ7XG4gICAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHNjcm9sbGJhck1vZGVsO1xuICAgIENvZGVNaXJyb3IuUG9zID0gUG9zO1xuICAgIENvZGVNaXJyb3IuY21wUG9zID0gY21wO1xuICAgIENvZGVNaXJyb3IubW9kZXMgPSBtb2RlcztcbiAgICBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IG1pbWVNb2RlcztcbiAgICBDb2RlTWlycm9yLnJlc29sdmVNb2RlID0gcmVzb2x2ZU1vZGU7XG4gICAgQ29kZU1pcnJvci5nZXRNb2RlID0gZ2V0TW9kZTtcbiAgICBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zID0gbW9kZUV4dGVuc2lvbnM7XG4gICAgQ29kZU1pcnJvci5leHRlbmRNb2RlID0gZXh0ZW5kTW9kZTtcbiAgICBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGNvcHlTdGF0ZTtcbiAgICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlO1xuICAgIENvZGVNaXJyb3IuaW5uZXJNb2RlID0gaW5uZXJNb2RlO1xuICAgIENvZGVNaXJyb3IuY29tbWFuZHMgPSBjb21tYW5kcztcbiAgICBDb2RlTWlycm9yLmtleU1hcCA9IGtleU1hcDtcbiAgICBDb2RlTWlycm9yLmtleU5hbWUgPSBrZXlOYW1lO1xuICAgIENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGlzTW9kaWZpZXJLZXk7XG4gICAgQ29kZU1pcnJvci5sb29rdXBLZXkgPSBsb29rdXBLZXk7XG4gICAgQ29kZU1pcnJvci5ub3JtYWxpemVLZXlNYXAgPSBub3JtYWxpemVLZXlNYXA7XG4gICAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBTdHJpbmdTdHJlYW07XG4gICAgQ29kZU1pcnJvci5TaGFyZWRUZXh0TWFya2VyID0gU2hhcmVkVGV4dE1hcmtlcjtcbiAgICBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBUZXh0TWFya2VyO1xuICAgIENvZGVNaXJyb3IuTGluZVdpZGdldCA9IExpbmVXaWRnZXQ7XG4gICAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVmYXVsdDtcbiAgICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZV9zdG9wUHJvcGFnYXRpb247XG4gICAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7XG4gICAgQ29kZU1pcnJvci5hZGRDbGFzcyA9IGFkZENsYXNzO1xuICAgIENvZGVNaXJyb3IuY29udGFpbnMgPSBjb250YWlucztcbiAgICBDb2RlTWlycm9yLnJtQ2xhc3MgPSBybUNsYXNzO1xuICAgIENvZGVNaXJyb3Iua2V5TmFtZXMgPSBrZXlOYW1lcztcbiAgfVxuXG4gIC8vIEVESVRPUiBDT05TVFJVQ1RPUlxuXG4gIGRlZmluZU9wdGlvbnMoQ29kZU1pcnJvcik7XG5cbiAgYWRkRWRpdG9yTWV0aG9kcyhDb2RlTWlycm9yKTtcblxuICAvLyBTZXQgdXAgbWV0aG9kcyBvbiBDb2RlTWlycm9yJ3MgcHJvdG90eXBlIHRvIHJlZGlyZWN0IHRvIHRoZSBlZGl0b3IncyBkb2N1bWVudC5cbiAgdmFyIGRvbnREZWxlZ2F0ZSA9IFwiaXRlciBpbnNlcnQgcmVtb3ZlIGNvcHkgZ2V0RWRpdG9yIGNvbnN0cnVjdG9yXCIuc3BsaXQoXCIgXCIpO1xuICBmb3IgKHZhciBwcm9wIGluIERvYy5wcm90b3R5cGUpIHsgaWYgKERvYy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHByb3ApIDwgMClcbiAgICB7IENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiBtZXRob2QuYXBwbHkodGhpcy5kb2MsIGFyZ3VtZW50cyl9XG4gICAgfSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7IH0gfVxuXG4gIGV2ZW50TWl4aW4oRG9jKTtcbiAgQ29kZU1pcnJvci5pbnB1dFN0eWxlcyA9IHtcInRleHRhcmVhXCI6IFRleHRhcmVhSW5wdXQsIFwiY29udGVudGVkaXRhYmxlXCI6IENvbnRlbnRFZGl0YWJsZUlucHV0fTtcblxuICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXNcbiAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseVxuICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5pc20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLilcbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZS8qLCBtb2RlLCDigKYqLykge1xuICAgIGlmICghQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlICYmIG5hbWUgIT0gXCJudWxsXCIpIHsgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsgfVxuICAgIGRlZmluZU1vZGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBkZWZpbmVNSU1FO1xuXG4gIC8vIE1pbmltYWwgZGVmYXVsdCBtb2RlLlxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJudWxsXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7dG9rZW46IGZ1bmN0aW9uIChzdHJlYW0pIHsgcmV0dXJuIHN0cmVhbS5za2lwVG9FbmQoKTsgfX0pOyB9KTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9wbGFpblwiLCBcIm51bGxcIik7XG5cbiAgLy8gRVhURU5TSU9OU1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUsIGZ1bmMpIHtcbiAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7XG4gIH07XG4gIENvZGVNaXJyb3IuZGVmaW5lRG9jRXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUsIGZ1bmMpIHtcbiAgICBEb2MucHJvdG90eXBlW25hbWVdID0gZnVuYztcbiAgfTtcblxuICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSA9IGZyb21UZXh0QXJlYTtcblxuICBhZGRMZWdhY3lQcm9wcyhDb2RlTWlycm9yKTtcblxuICBDb2RlTWlycm9yLnZlcnNpb24gPSBcIjUuNTIuMFwiO1xuXG4gIHJldHVybiBDb2RlTWlycm9yO1xuXG59KSkpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBSUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUEvQkE7QUFDQTtBQUNBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBL0RBO0FBQ0E7QUFDQTtBQWdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTlJQTtBQWtKQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTdMQTtBQUNBO0FBQ0E7QUErTEE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUExUUE7QUE4UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFuUkE7QUFDQTtBQUNBO0FBb1JBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXhSQTtBQTRSQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUF4U0E7QUFDQTtBQUNBO0FBMlNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBMVVBO0FBOFVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQWZBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQTFCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBckNBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFyREE7QUF5REE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBOURBO0FBa0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFoRkE7QUFvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQU9BO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6SEE7QUEzWEE7QUF5ZkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBOWZBO0FBbWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUExaUJBO0FBOGlCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoa0JBO0FBb2tCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdmtCQTtBQTJrQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQW5tQkE7QUFDQTtBQUNBO0FBcW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBMW5CQTtBQUNBO0FBQ0E7QUE0bkJBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFOQTtBQUNBO0FBQ0E7QUFLQTtBQXRvQkE7QUEwb0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZkE7QUFnQkE7QUFoQkE7QUFrQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBcnJCQTtBQUNBO0FBQ0E7QUF1ckJBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJzQkE7QUF5c0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQU1BO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF4dEJBO0FBNHRCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUEvdUJBO0FBbXZCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBbndCQTtBQXV3QkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFweEJBO0FBeXhCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU1BO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFiQTtBQUNBO0FBY0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUF6MkJBO0FBQ0E7QUFDQTtBQTIyQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBeDNCQTtBQTQzQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQU9BO0FBdDRCQTtBQUNBO0FBQ0E7QUF1NEJBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUVBO0FBNTRCQTtBQWc1QkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW41QkE7QUF1NUJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBajZCQTtBQXE2QkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBNzdCQTtBQUNBO0FBQ0E7QUErN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBdjhCQTtBQTI4QkE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBbDlCQTtBQXE5QkE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBTEE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBcGhDQTtBQXloQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBM0JBO0FBQ0E7QUE2QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBdm1DQTtBQTJtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBNW9DQTtBQUNBO0FBQ0E7QUE4b0NBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUF6cUNBO0FBQ0E7QUFDQTtBQTJxQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWp0Q0E7QUFxdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4dkNBO0FBQ0E7QUFDQTtBQTB2Q0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbndDQTtBQUNBO0FBQ0E7QUFzd0NBO0FBQ0E7QUFDQTtBQUFBO0FBMXdDQTtBQUNBO0FBQ0E7QUE0d0NBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBbHhDQTtBQXF4Q0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUExeENBO0FBQ0E7QUFDQTtBQTJ4Q0E7QUFDQTtBQUNBO0FBL3hDQTtBQW15Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQTd6Q0E7QUFpMENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBdkNBO0FBQ0E7QUFDQTtBQXdDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQS8zQ0E7QUFtNENBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUEzNENBO0FBQ0E7QUFDQTtBQTY0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4NkNBO0FBQ0E7QUFDQTtBQTA2Q0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBdjdDQTtBQTI3Q0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBNzdDQTtBQWc4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTE4Q0E7QUE4OENBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBbitDQTtBQXUrQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQXQvQ0E7QUEwL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUF4Z0RBO0FBNGdEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFuaERBO0FBdWhEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUEzaERBO0FBK2hEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBdGlEQTtBQTBpREE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQXBrREE7QUFDQTtBQUNBO0FBc2tEQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhsREE7QUE0bERBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE3bURBO0FBQ0E7QUFDQTtBQSttREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXRuREE7QUFpb0RBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdnBEQTtBQUNBO0FBQ0E7QUF5cERBO0FBQ0E7QUFDQTtBQTdwREE7QUFpcURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUF2cURBO0FBNHFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUhBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFmQTtBQUNBO0FBQ0E7QUFpQkE7QUFDQTtBQXBCQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUF6Q0E7QUFDQTtBQUNBO0FBMkNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOXVEQTtBQWt2REE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFqekRBO0FBcXpEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBaDBEQTtBQW8wREE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBdDJEQTtBQTAyREE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBbjdEQTtBQXc3REE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsOERBO0FBQ0E7QUFDQTtBQW84REE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBeGhFQTtBQTRoRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXRpRUE7QUEwaUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBaGtFQTtBQW9rRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE1a0VBO0FBZ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXhwRUE7QUFDQTtBQUNBO0FBMHBFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJxRUE7QUF5cUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBOXRFQTtBQUNBO0FBQ0E7QUFndUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQXZ1RUE7QUFDQTtBQUNBO0FBMHVFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTV2RUE7QUFnd0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBbHhFQTtBQXN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaHlFQTtBQW95RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN3lFQTtBQWl6RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQW56RUE7QUFDQTtBQUNBO0FBcXpFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQTV6RUE7QUFnMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBajFFQTtBQXkxRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBYkE7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFoOUVBO0FBbzlFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXRnRkE7QUEwZ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQTloRkE7QUFraUZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXRqRkE7QUEwakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBbm1GQTtBQXVtRkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE5bUZBO0FBa25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTNuRkE7QUErbkZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBL3BGQTtBQW1xRkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQXJCQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFSQTtBQVdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBMUJBO0FBQ0E7QUFDQTtBQTBCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBdHpGQTtBQUNBO0FBQ0E7QUF3ekZBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBajBGQTtBQXEwRkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUE5MEZBO0FBczFGQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUF6MUZBO0FBNjFGQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBbjNGQTtBQTAzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBMzRGQTtBQSs0RkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXg1RkE7QUE0NUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUZBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFOQTtBQU9BO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBUkE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFQQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQTc5RkE7QUFpK0ZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTUrRkE7QUFDQTtBQUNBO0FBOCtGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNWdHQTtBQWdoR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBamlHQTtBQXFpR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFwa0dBO0FBQ0E7QUFDQTtBQXNrR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTFsR0E7QUFDQTtBQUNBO0FBMmxHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBbENBO0FBb0NBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXRyR0E7QUFDQTtBQUNBO0FBd3JHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBL3VHQTtBQW12R0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdHhHQTtBQTB4R0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQS94R0E7QUFteUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdnpHQTtBQTR6R0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6MEdBO0FBNjBHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUE3MkdBO0FBQ0E7QUFDQTtBQSsyR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFwM0dBO0FBdzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQXA1R0E7QUF3NUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBNTVHQTtBQWc2R0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBLzZHQTtBQW03R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBdDhHQTtBQTA4R0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBeDlHQTtBQTQ5R0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBbitHQTtBQXcrR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWhCQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWxDQTtBQUNBO0FBb0NBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBZkE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUE1bUhBO0FBZ25IQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQU5BO0FBUUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQVRBO0FBQ0E7QUFVQTtBQUNBO0FBQUE7QUExcEhBO0FBOHBIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFpQkE7QUF2ckhBO0FBQ0E7QUFDQTtBQXlySEE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBanNIQTtBQXFzSEE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQVBBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFFQTtBQWpCQTtBQXFCQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUE3QkE7QUFDQTtBQUNBO0FBOEJBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBdHpIQTtBQUNBO0FBQ0E7QUF3ekhBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTl6SEE7QUFDQTtBQUNBO0FBK3pIQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBbDBIQTtBQTAwSEE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFMQTtBQXAxSEE7QUFDQTtBQUNBO0FBNjFIQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFHQTtBQTM0SEE7QUFDQTtBQUNBO0FBODRIQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOThIQTtBQWs5SEE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU9BO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBMUNBO0FBNkNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwa0lBO0FBd2tJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVuSUE7QUFnb0lBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBbHBJQTtBQXNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUF0cklBO0FBMHJJQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqdElBO0FBcXRJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBaERBO0FBQ0E7QUFDQTtBQWtEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBM3pJQTtBQSt6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQXpDQTtBQTZDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFUQTtBQUhBO0FBZUE7QUFBQTtBQUNBO0FBQ0E7QUF6NklBO0FBNjZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUEvOUlBO0FBaytJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdi9JQTtBQTIvSUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBOS9JQTtBQW1nSkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBM2hKQTtBQStoSkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoakpBO0FBQ0E7QUFDQTtBQW1qSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFsa0pBO0FBdWtKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQTNrSkE7QUFDQTtBQUNBO0FBOGtKQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQVFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWhvSkE7QUFDQTtBQUNBO0FBa29KQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBL29KQTtBQUNBO0FBQ0E7QUFpcEpBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0ckpBO0FBMHJKQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBL3JKQTtBQW1zSkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUF6c0pBO0FBNnNKQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQXZ0SkE7QUEydEpBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExd0pBO0FBa3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBSkE7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUE5eUpBO0FBQ0E7QUFDQTtBQWd6SkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFwekpBO0FBNHpKQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFwMEpBO0FBQ0E7QUFDQTtBQXMwSkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQTkwSkE7QUFrMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXgySkE7QUE0MkpBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbDRKQTtBQXM0SkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBWEE7QUFhQTtBQUNBO0FBNTVKQTtBQUNBO0FBQ0E7QUE4NUpBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQWw2SkE7QUFzNkpBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBNzZKQTtBQUNBO0FBQ0E7QUErNkpBO0FBQ0E7QUFDQTtBQUNBO0FBcDdKQTtBQUNBO0FBQ0E7QUFzN0pBO0FBQ0E7QUF6N0pBO0FBNjdKQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBUkE7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBdDlKQTtBQUNBO0FBQ0E7QUF3OUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFyL0pBO0FBeS9KQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBMy9KQTtBQSsvSkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQW5qS0E7QUFDQTtBQUNBO0FBcWpLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBamxLQTtBQXNsS0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFOQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE3bUtBO0FBaW5LQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBUkE7QUFZQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFocEtBO0FBQ0E7QUFDQTtBQXdwS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBUUE7QUFDQTtBQUZBO0FBR0E7QUFBQTtBQTlCQTtBQWtDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFoQkE7QUFDQTtBQXdCQTtBQUNBO0FBRUE7QUFDQTtBQWp1S0E7QUFxdUtBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFqdktBO0FBcXZLQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFSQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFyeEtBO0FBeXhLQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMTFLQTtBQUNBO0FBQ0E7QUE2MUtBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBcjJLQTtBQXkyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUE5NEtBO0FBazVLQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBMTVLQTtBQTg1S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQWhCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF4QkE7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQS9CQTtBQUNBO0FBaUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFOQTtBQU9BO0FBQUE7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQTJCQTtBQUNBO0FBQUE7QUFBQTtBQTVCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBdERBO0FBeURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFkQTtBQUNBO0FBZUE7QUE3RUE7QUFnRkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUExRkE7QUFDQTtBQThGQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBZEE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBbm9MQTtBQXdvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM3BMQTtBQUNBO0FBQ0E7QUE2cExBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdHNMQTtBQTBzTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTd0TEE7QUFpdUxBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQWZBO0FBTEE7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBVEE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBdENBO0FBQ0E7QUF3Q0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFoMUxBO0FBcTFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUF4TkE7QUE2TkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFQQTtBQTlOQTtBQXdPQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFiQTtBQXpPQTtBQTBQQTtBQUNBO0FBM1BBO0FBNlBBO0FBQUE7QUE3UEE7QUErUEE7QUFDQTtBQWhRQTtBQWtRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBSUE7QUFDQTtBQXhRQTtBQTBRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQW5SQTtBQXFSQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQVZBO0FBWUE7QUFwU0E7QUFzU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFLQTtBQTdTQTtBQWdUQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFNQTtBQXhUQTtBQTBUQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBbFVBO0FBcVVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBL1VBO0FBa1ZBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQTVWQTtBQThWQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvV0E7QUFpWEE7QUFBQTtBQWpYQTtBQW1YQTtBQUFBO0FBblhBO0FBb1hBO0FBQUE7QUFwWEE7QUFzWEE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBeFhBO0FBMFhBO0FBQUE7QUExWEE7QUE0WEE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBNVhBO0FBQ0E7QUFxWUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBSUE7QUFDQTtBQVBBO0FBU0E7QUFYQTtBQUNBO0FBWUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFQQTtBQUNBO0FBUUE7QUFqQkE7QUFDQTtBQWtCQTtBQUFBO0FBQUE7QUFsQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTk2TUE7QUFrN01BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFQQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBajlNQTtBQUNBO0FBQ0E7QUFrOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUkE7QUFDQTtBQVdBO0FBQUE7QUF4K01BO0FBQ0E7QUFDQTtBQXcrTUE7QUFBQTtBQTErTUE7QUFDQTtBQUNBO0FBMCtNQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTNpTkE7QUEraU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBNWxOQTtBQWdtTkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUE1bU5BO0FBQ0E7QUFDQTtBQThtTkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzbk5BO0FBK25OQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFiQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakNBO0FBcUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFuREE7QUFDQTtBQUNBO0FBcURBO0FBQ0E7QUFBQTtBQUFBO0FBeERBO0FBQ0E7QUFDQTtBQXlEQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQTFsT0E7QUE4bE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBSkE7QUFNQTtBQUFBO0FBcnJPQTtBQXlyT0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFoQkE7QUFDQTtBQWlCQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQUE7QUF2QkE7QUFDQTtBQUNBO0FBdUJBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQXR1T0E7QUFDQTtBQUNBO0FBd3VPQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQTkyT0E7QUFrM09BO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFWQTtBQWFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFoNU9BO0FBcTVPQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcDdPQTtBQXk3T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFyblBBO0FBeW5QQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFBQTtBQXRDQTtBQXlDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFBQTtBQTdyUEE7QUFDQTtBQUNBO0FBK3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTkE7QUFEQTtBQVVBO0FBQUE7QUFBQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFwQkE7QUFDQTtBQXVCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBZkE7QUFpQkE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEZBO0FBQ0E7QUF1RkE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXpGQTtBQUNBO0FBMkZBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFIQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBcnpQQTtBQXd6UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwM1BBO0FBdzNQQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVJBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQS8rUEE7QUFtL1BBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBVkE7QUFhQTtBQUFBO0FBYkE7QUFjQTtBQUFBO0FBZEE7QUFnQkE7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF6QkE7QUE0QkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUhBO0FBSUE7QUFDQTtBQXBDQTtBQXNDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhEQTtBQW1EQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF4REE7QUEwREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUE1RUE7QUErRUE7QUFDQTtBQUNBO0FBQ0E7QUFsRkE7QUFxRkE7QUFDQTtBQXRGQTtBQXlGQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUF0R0E7QUF5R0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQTVHQTtBQStHQTtBQUNBO0FBaEhBO0FBbUhBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFNQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBeElBO0FBMklBO0FBQ0E7QUFDQTtBQUNBO0FBOUlBO0FBaUpBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBdEpBO0FBeUpBO0FBQ0E7QUExSkE7QUE2SkE7QUFDQTtBQUNBO0FBL0pBO0FBa0tBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXBLQTtBQXNLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaExBO0FBb0xBO0FBQUE7QUFwTEE7QUFxTEE7QUFBQTtBQXJMQTtBQXVMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdkxBO0FBeUxBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXpOQTtBQTROQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBbk9BO0FBc09BO0FBQUE7QUF0T0E7QUF3T0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFoUEE7QUFtUEE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUpBO0FBdFBBO0FBOFBBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUdBO0FBdFFBO0FBeVFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBcFJBO0FBdVJBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBVEE7QUFDQTtBQVVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUF4U0E7QUEyU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQUE7QUFDQTtBQUhBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQTFUQTtBQTZUQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFwVUE7QUFzVUE7QUFBQTtBQXRVQTtBQXVVQTtBQUFBO0FBdlVBO0FBeVVBO0FBQUE7QUF6VUE7QUEwVUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUE1VUE7QUFrVkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBbFdBO0FBcVdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFLQTtBQUNBO0FBblhBO0FBc1hBO0FBQUE7QUF0WEE7QUF1WEE7QUFBQTtBQXZYQTtBQXdYQTtBQUFBO0FBeFhBO0FBMFhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBbllBO0FBc1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpaQTtBQW9aQTtBQUNBO0FBQ0E7QUF0WkE7QUF5WkE7QUFBQTtBQXpaQTtBQTBaQTtBQUFBO0FBMVpBO0FBMlpBO0FBQUE7QUEzWkE7QUE0WkE7QUFBQTtBQUFBO0FBNVpBO0FBOFpBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFuNlFBO0FBMDZRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXorUUE7QUE2K1FBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFoZ1JBO0FBQ0E7QUFDQTtBQW1nUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQU9BO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF6QkE7QUFDQTtBQUNBO0FBMEJBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQXhFQTtBQUNBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBaERBO0FBQ0E7QUFrREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBSkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBR0E7QUF0QkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWxEQTtBQUNBO0FBQ0E7QUFrREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQXBFQTtBQUNBO0FBc0VBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBSkE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdEJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFwQ0E7QUFDQTtBQUNBO0FBcUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBdGdTQTtBQUNBO0FBQ0E7QUF5Z1NBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQXpEQTtBQUNBO0FBNERBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUF6RUE7QUFDQTtBQWlGQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUE5b1NBO0FBa3BTQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQW5yU0E7QUFzclNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUEzclNBO0FBa3NTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQTVzU0E7QUFndFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE1QkE7QUFDQTtBQUNBO0FBNkJBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBWkE7QUFjQTtBQWhEQTtBQUNBO0FBa0RBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBakJBO0FBQ0E7QUFDQTtBQWdCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQU5BO0FBUUE7QUFDQTtBQTlFQTtBQUNBO0FBZ0ZBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQURBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBVEE7QUFIQTtBQUNBO0FBZUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3OFNBO0FBQ0E7QUFDQTtBQWc5U0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQWpnVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/lib/codemirror.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/clike/clike.js": -/*!******************************************************!*\ - !*** ../node_modules/codemirror/mode/clike/clike.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n function Context(indented, column, type, info, align, prev) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.info = info;\n this.align = align;\n this.prev = prev;\n }\n\n function pushContext(state, col, type, info) {\n var indent = state.indented;\n if (state.context && state.context.type == \"statement\" && type != \"statement\") indent = state.context.indented;\n return state.context = new Context(indent, col, type, info, null, state.context);\n }\n\n function popContext(state) {\n var t = state.context.type;\n if (t == \")\" || t == \"]\" || t == \"}\") state.indented = state.context.indented;\n return state.context = state.context.prev;\n }\n\n function typeBefore(stream, state, pos) {\n if (state.prevToken == \"variable\" || state.prevToken == \"type\") return true;\n if (/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(stream.string.slice(0, pos))) return true;\n if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true;\n }\n\n function isTopScope(context) {\n for (;;) {\n if (!context || context.type == \"top\") return true;\n if (context.type == \"}\" && context.prev.info != \"namespace\") return false;\n context = context.prev;\n }\n }\n\n CodeMirror.defineMode(\"clike\", function (config, parserConfig) {\n var indentUnit = config.indentUnit,\n statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,\n dontAlignCalls = parserConfig.dontAlignCalls,\n keywords = parserConfig.keywords || {},\n types = parserConfig.types || {},\n builtin = parserConfig.builtin || {},\n blockKeywords = parserConfig.blockKeywords || {},\n defKeywords = parserConfig.defKeywords || {},\n atoms = parserConfig.atoms || {},\n hooks = parserConfig.hooks || {},\n multiLineStrings = parserConfig.multiLineStrings,\n indentStatements = parserConfig.indentStatements !== false,\n indentSwitch = parserConfig.indentSwitch !== false,\n namespaceSeparator = parserConfig.namespaceSeparator,\n isPunctuationChar = parserConfig.isPunctuationChar || /[\\[\\]{}\\(\\),;\\:\\.]/,\n numberStart = parserConfig.numberStart || /[\\d\\.]/,\n number = parserConfig.number || /^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,\n isOperatorChar = parserConfig.isOperatorChar || /[+\\-*&%=<>!?|\\/]/,\n isIdentifierChar = parserConfig.isIdentifierChar || /[\\w\\$_\\xa1-\\uffff]/,\n // An optional function that takes a {string} token and returns true if it\n // should be treated as a builtin.\n isReservedIdentifier = parserConfig.isReservedIdentifier || false;\n var curPunc, isDefKeyword;\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n if (hooks[ch]) {\n var result = hooks[ch](stream, state);\n if (result !== false) return result;\n }\n\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n }\n\n if (isPunctuationChar.test(ch)) {\n curPunc = ch;\n return null;\n }\n\n if (numberStart.test(ch)) {\n stream.backUp(1);\n if (stream.match(number)) return \"number\";\n stream.next();\n }\n\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n }\n\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n }\n\n if (isOperatorChar.test(ch)) {\n while (!stream.match(/^\\/[\\/*]/, false) && stream.eat(isOperatorChar)) {}\n\n return \"operator\";\n }\n\n stream.eatWhile(isIdentifierChar);\n if (namespaceSeparator) while (stream.match(namespaceSeparator)) {\n stream.eatWhile(isIdentifierChar);\n }\n var cur = stream.current();\n\n if (contains(keywords, cur)) {\n if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n if (contains(defKeywords, cur)) isDefKeyword = true;\n return \"keyword\";\n }\n\n if (contains(types, cur)) return \"type\";\n\n if (contains(builtin, cur) || isReservedIdentifier && isReservedIdentifier(cur)) {\n if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n return \"builtin\";\n }\n\n if (contains(atoms, cur)) return \"atom\";\n return \"variable\";\n }\n\n function tokenString(quote) {\n return function (stream, state) {\n var escaped = false,\n next,\n end = false;\n\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) {\n end = true;\n break;\n }\n\n escaped = !escaped && next == \"\\\\\";\n }\n\n if (end || !(escaped || multiLineStrings)) state.tokenize = null;\n return \"string\";\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false,\n ch;\n\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = null;\n break;\n }\n\n maybeEnd = ch == \"*\";\n }\n\n return \"comment\";\n }\n\n function maybeEOL(stream, state) {\n if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) state.typeAtEndOfLine = typeBefore(stream, state, stream.pos);\n } // Interface\n\n\n return {\n startState: function startState(basecolumn) {\n return {\n tokenize: null,\n context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", null, false),\n indented: 0,\n startOfLine: true,\n prevToken: null\n };\n },\n token: function token(stream, state) {\n var ctx = state.context;\n\n if (stream.sol()) {\n if (ctx.align == null) ctx.align = false;\n state.indented = stream.indentation();\n state.startOfLine = true;\n }\n\n if (stream.eatSpace()) {\n maybeEOL(stream, state);\n return null;\n }\n\n curPunc = isDefKeyword = null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style == \"comment\" || style == \"meta\") return style;\n if (ctx.align == null) ctx.align = true;\n if (curPunc == \";\" || curPunc == \":\" || curPunc == \",\" && stream.match(/^\\s*(?:\\/\\/.*)?$/, false)) while (state.context.type == \"statement\") {\n popContext(state);\n } else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");else if (curPunc == \"}\") {\n while (ctx.type == \"statement\") {\n ctx = popContext(state);\n }\n\n if (ctx.type == \"}\") ctx = popContext(state);\n\n while (ctx.type == \"statement\") {\n ctx = popContext(state);\n }\n } else if (curPunc == ctx.type) popContext(state);else if (indentStatements && ((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != \";\" || ctx.type == \"statement\" && curPunc == \"newstatement\")) {\n pushContext(state, stream.column(), \"statement\", stream.current());\n }\n if (style == \"variable\" && (state.prevToken == \"def\" || parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && isTopScope(state.context) && stream.match(/^\\s*\\(/, false))) style = \"def\";\n\n if (hooks.token) {\n var result = hooks.token(stream, state, style);\n if (result !== undefined) style = result;\n }\n\n if (style == \"def\" && parserConfig.styleDefs === false) style = \"variable\";\n state.startOfLine = false;\n state.prevToken = isDefKeyword ? \"def\" : style || curPunc;\n maybeEOL(stream, state);\n return style;\n },\n indent: function indent(state, textAfter) {\n if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass;\n var ctx = state.context,\n firstChar = textAfter && textAfter.charAt(0);\n var closing = firstChar == ctx.type;\n if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n if (parserConfig.dontIndentStatements) while (ctx.type == \"statement\" && parserConfig.dontIndentStatements.test(ctx.info)) {\n ctx = ctx.prev;\n }\n\n if (hooks.indent) {\n var hook = hooks.indent(state, ctx, textAfter, indentUnit);\n if (typeof hook == \"number\") return hook;\n }\n\n var switchBlock = ctx.prev && ctx.prev.info == \"switch\";\n\n if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) {\n while (ctx.type != \"top\" && ctx.type != \"}\") {\n ctx = ctx.prev;\n }\n\n return ctx.indented;\n }\n\n if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit);\n if (ctx.align && (!dontAlignCalls || ctx.type != \")\")) return ctx.column + (closing ? 0 : 1);\n if (ctx.type == \")\" && !closing) return ctx.indented + statementIndentUnit;\n return ctx.indented + (closing ? 0 : indentUnit) + (!closing && switchBlock && !/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 0);\n },\n electricInput: indentSwitch ? /^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/ : /^\\s*[{}]$/,\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: \"//\",\n fold: \"brace\"\n };\n });\n\n function words(str) {\n var obj = {},\n words = str.split(\" \");\n\n for (var i = 0; i < words.length; ++i) {\n obj[words[i]] = true;\n }\n\n return obj;\n }\n\n function contains(words, word) {\n if (typeof words === \"function\") {\n return words(word);\n } else {\n return words.propertyIsEnumerable(word);\n }\n }\n\n var cKeywords = \"auto if break case register continue return default do sizeof \" + \"static else struct switch extern typedef union for goto while enum const \" + \"volatile inline restrict asm fortran\"; // Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.\n\n var cppKeywords = \"alignas alignof and and_eq audit axiom bitand bitor catch \" + \"class compl concept constexpr const_cast decltype delete dynamic_cast \" + \"explicit export final friend import module mutable namespace new noexcept \" + \"not not_eq operator or or_eq override private protected public \" + \"reinterpret_cast requires static_assert static_cast template this \" + \"thread_local throw try typeid typename using virtual xor xor_eq\";\n var objCKeywords = \"bycopy byref in inout oneway out self super atomic nonatomic retain copy \" + \"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd \" + \"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class \" + \"@public @package @private @protected @required @optional @try @catch @finally @import \" + \"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\";\n var objCBuiltins = \"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION \" + \" NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER \" + \"NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION \" + \"NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\"; // Do not use this. Use the cTypes function below. This is global just to avoid\n // excessive calls when cTypes is being called multiple times during a parse.\n\n var basicCTypes = words(\"int long char short double float unsigned signed \" + \"void bool\"); // Do not use this. Use the objCTypes function below. This is global just to avoid\n // excessive calls when objCTypes is being called multiple times during a parse.\n\n var basicObjCTypes = words(\"SEL instancetype id Class Protocol BOOL\"); // Returns true if identifier is a \"C\" type.\n // C type is defined as those that are reserved by the compiler (basicTypes),\n // and those that end in _t (Reserved by POSIX for types)\n // http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html\n\n function cTypes(identifier) {\n return contains(basicCTypes, identifier) || /.+_t$/.test(identifier);\n } // Returns true if identifier is a \"Objective C\" type.\n\n\n function objCTypes(identifier) {\n return cTypes(identifier) || contains(basicObjCTypes, identifier);\n }\n\n var cBlockKeywords = \"case do else for if switch while struct enum union\";\n var cDefKeywords = \"struct enum union\";\n\n function cppHook(stream, state) {\n if (!state.startOfLine) return false;\n\n for (var ch, next = null; ch = stream.peek();) {\n if (ch == \"\\\\\" && stream.match(/^.$/)) {\n next = cppHook;\n break;\n } else if (ch == \"/\" && stream.match(/^\\/[\\/\\*]/, false)) {\n break;\n }\n\n stream.next();\n }\n\n state.tokenize = next;\n return \"meta\";\n }\n\n function pointerHook(_stream, state) {\n if (state.prevToken == \"type\") return \"type\";\n return false;\n } // For C and C++ (and ObjC): identifiers starting with __\n // or _ followed by a capital letter are reserved for the compiler.\n\n\n function cIsReservedIdentifier(token) {\n if (!token || token.length < 2) return false;\n if (token[0] != '_') return false;\n return token[1] == '_' || token[1] !== token[1].toLowerCase();\n }\n\n function cpp14Literal(stream) {\n stream.eatWhile(/[\\w\\.']/);\n return \"number\";\n }\n\n function cpp11StringHook(stream, state) {\n stream.backUp(1); // Raw strings.\n\n if (stream.match(/(R|u8R|uR|UR|LR)/)) {\n var match = stream.match(/\"([^\\s\\\\()]{0,16})\\(/);\n\n if (!match) {\n return false;\n }\n\n state.cpp11RawStringDelim = match[1];\n state.tokenize = tokenRawString;\n return tokenRawString(stream, state);\n } // Unicode strings/chars.\n\n\n if (stream.match(/(u8|u|U|L)/)) {\n if (stream.match(/[\"']/,\n /* eat */\n false)) {\n return \"string\";\n }\n\n return false;\n } // Ignore this hook.\n\n\n stream.next();\n return false;\n }\n\n function cppLooksLikeConstructor(word) {\n var lastTwo = /(\\w+)::~?(\\w+)$/.exec(word);\n return lastTwo && lastTwo[1] == lastTwo[2];\n } // C#-style strings where \"\" escapes a quote.\n\n\n function tokenAtString(stream, state) {\n var next;\n\n while ((next = stream.next()) != null) {\n if (next == '\"' && !stream.eat('\"')) {\n state.tokenize = null;\n break;\n }\n }\n\n return \"string\";\n } // C++11 raw string literal is <prefix>\"<delim>( anything )<delim>\", where\n // <delim> can be a string up to 16 characters long.\n\n\n function tokenRawString(stream, state) {\n // Escape characters that have special regex meanings.\n var delim = state.cpp11RawStringDelim.replace(/[^\\w\\s]/g, '\\\\$&');\n var match = stream.match(new RegExp(\".*?\\\\)\" + delim + '\"'));\n if (match) state.tokenize = null;else stream.skipToEnd();\n return \"string\";\n }\n\n function def(mimes, mode) {\n if (typeof mimes == \"string\") mimes = [mimes];\n var words = [];\n\n function add(obj) {\n if (obj) for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) words.push(prop);\n }\n }\n\n add(mode.keywords);\n add(mode.types);\n add(mode.builtin);\n add(mode.atoms);\n\n if (words.length) {\n mode.helperType = mimes[0];\n CodeMirror.registerHelper(\"hintWords\", mimes[0], words);\n }\n\n for (var i = 0; i < mimes.length; ++i) {\n CodeMirror.defineMIME(mimes[i], mode);\n }\n }\n\n def([\"text/x-csrc\", \"text/x-c\", \"text/x-chdr\"], {\n name: \"clike\",\n keywords: words(cKeywords),\n types: cTypes,\n blockKeywords: words(cBlockKeywords),\n defKeywords: words(cDefKeywords),\n typeFirstDefinitions: true,\n atoms: words(\"NULL true false\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook\n },\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def([\"text/x-c++src\", \"text/x-c++hdr\"], {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + cppKeywords),\n types: cTypes,\n blockKeywords: words(cBlockKeywords + \" class try catch\"),\n defKeywords: words(cDefKeywords + \" class namespace\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false NULL nullptr\"),\n dontIndentStatements: /^template$/,\n isIdentifierChar: /[\\w\\$_~\\xa1-\\uffff]/,\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n \"u\": cpp11StringHook,\n \"U\": cpp11StringHook,\n \"L\": cpp11StringHook,\n \"R\": cpp11StringHook,\n \"0\": cpp14Literal,\n \"1\": cpp14Literal,\n \"2\": cpp14Literal,\n \"3\": cpp14Literal,\n \"4\": cpp14Literal,\n \"5\": cpp14Literal,\n \"6\": cpp14Literal,\n \"7\": cpp14Literal,\n \"8\": cpp14Literal,\n \"9\": cpp14Literal,\n token: function token(stream, state, style) {\n if (style == \"variable\" && stream.peek() == \"(\" && (state.prevToken == \";\" || state.prevToken == null || state.prevToken == \"}\") && cppLooksLikeConstructor(stream.current())) return \"def\";\n }\n },\n namespaceSeparator: \"::\",\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def(\"text/x-java\", {\n name: \"clike\",\n keywords: words(\"abstract assert break case catch class const continue default \" + \"do else enum extends final finally for goto if implements import \" + \"instanceof interface native new package private protected public \" + \"return static strictfp super switch synchronized this throw throws transient \" + \"try volatile while @interface\"),\n types: words(\"byte short int long float double boolean char void Boolean Byte Character Double Float \" + \"Integer Long Number Object Short String StringBuffer StringBuilder Void\"),\n blockKeywords: words(\"catch class do else finally for if switch try while\"),\n defKeywords: words(\"class interface enum @interface\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n hooks: {\n \"@\": function _(stream) {\n // Don't match the @interface keyword.\n if (stream.match('interface', false)) return false;\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n }\n },\n modeProps: {\n fold: [\"brace\", \"import\"]\n }\n });\n def(\"text/x-csharp\", {\n name: \"clike\",\n keywords: words(\"abstract as async await base break case catch checked class const continue\" + \" default delegate do else enum event explicit extern finally fixed for\" + \" foreach goto if implicit in interface internal is lock namespace new\" + \" operator out override params private protected public readonly ref return sealed\" + \" sizeof stackalloc static struct switch this throw try typeof unchecked\" + \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" + \" global group into join let orderby partial remove select set value var yield\"),\n types: words(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func\" + \" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32\" + \" UInt64 bool byte char decimal double short int long object\" + \" sbyte float string ushort uint ulong\"),\n blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n defKeywords: words(\"class interface namespace struct var\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n hooks: {\n \"@\": function _(stream, state) {\n if (stream.eat('\"')) {\n state.tokenize = tokenAtString;\n return tokenAtString(stream, state);\n }\n\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n }\n }\n });\n\n function tokenTripleString(stream, state) {\n var escaped = false;\n\n while (!stream.eol()) {\n if (!escaped && stream.match('\"\"\"')) {\n state.tokenize = null;\n break;\n }\n\n escaped = stream.next() == \"\\\\\" && !escaped;\n }\n\n return \"string\";\n }\n\n function tokenNestedComment(depth) {\n return function (stream, state) {\n var ch;\n\n while (ch = stream.next()) {\n if (ch == \"*\" && stream.eat(\"/\")) {\n if (depth == 1) {\n state.tokenize = null;\n break;\n } else {\n state.tokenize = tokenNestedComment(depth - 1);\n return state.tokenize(stream, state);\n }\n } else if (ch == \"/\" && stream.eat(\"*\")) {\n state.tokenize = tokenNestedComment(depth + 1);\n return state.tokenize(stream, state);\n }\n }\n\n return \"comment\";\n };\n }\n\n def(\"text/x-scala\", {\n name: \"clike\",\n keywords: words(\n /* scala */\n \"abstract case catch class def do else extends final finally for forSome if \" + \"implicit import lazy match new null object override package private protected return \" + \"sealed super this throw trait try type val var while with yield _ \" +\n /* package scala */\n \"assert assume require print println printf readLine readBoolean readByte readShort \" + \"readChar readInt readLong readFloat readDouble\"),\n types: words(\"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" + \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable \" + \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" + \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" + \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector \" +\n /* package java.lang */\n \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" + \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" + \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" + \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"),\n multiLineStrings: true,\n blockKeywords: words(\"catch class enum do else finally for forSome if match switch try while\"),\n defKeywords: words(\"class enum def object package trait type val var\"),\n atoms: words(\"true false null\"),\n indentStatements: false,\n indentSwitch: false,\n isOperatorChar: /[+\\-*&%=<>!?|\\/#:@]/,\n hooks: {\n \"@\": function _(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '\"': function _(stream, state) {\n if (!stream.match('\"\"')) return false;\n state.tokenize = tokenTripleString;\n return state.tokenize(stream, state);\n },\n \"'\": function _(stream) {\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n return \"atom\";\n },\n \"=\": function _(stream, state) {\n var cx = state.context;\n\n if (cx.type == \"}\" && cx.align && stream.eat(\">\")) {\n state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev);\n return \"operator\";\n } else {\n return false;\n }\n },\n \"/\": function _(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenNestedComment(1);\n return state.tokenize(stream, state);\n }\n },\n modeProps: {\n closeBrackets: {\n pairs: '()[]{}\"\"',\n triples: '\"'\n }\n }\n });\n\n function tokenKotlinString(tripleString) {\n return function (stream, state) {\n var escaped = false,\n next,\n end = false;\n\n while (!stream.eol()) {\n if (!tripleString && !escaped && stream.match('\"')) {\n end = true;\n break;\n }\n\n if (tripleString && stream.match('\"\"\"')) {\n end = true;\n break;\n }\n\n next = stream.next();\n if (!escaped && next == \"$\" && stream.match('{')) stream.skipTo(\"}\");\n escaped = !escaped && next == \"\\\\\" && !tripleString;\n }\n\n if (end || !tripleString) state.tokenize = null;\n return \"string\";\n };\n }\n\n def(\"text/x-kotlin\", {\n name: \"clike\",\n keywords: words(\n /*keywords*/\n \"package as typealias class interface this super val operator \" + \"var fun for is in This throw return annotation \" + \"break continue object if else while do try when !in !is as? \" +\n /*soft keywords*/\n \"file import where by get set abstract enum open inner override private public internal \" + \"protected catch finally out final vararg reified dynamic companion constructor init \" + \"sealed field property receiver param sparam lateinit data inline noinline tailrec \" + \"external annotation crossinline const operator infix suspend actual expect setparam\"),\n types: words(\n /* package java.lang */\n \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" + \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" + \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" + \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray \" + \"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy \" + \"LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"),\n intendSwitch: false,\n indentStatements: false,\n multiLineStrings: true,\n number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n blockKeywords: words(\"catch class do else finally for if where try while enum\"),\n defKeywords: words(\"class val var object interface fun\"),\n atoms: words(\"true false null this\"),\n hooks: {\n \"@\": function _(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '*': function _(_stream, state) {\n return state.prevToken == '.' ? 'variable' : 'operator';\n },\n '\"': function _(stream, state) {\n state.tokenize = tokenKotlinString(stream.match('\"\"'));\n return state.tokenize(stream, state);\n },\n \"/\": function _(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenNestedComment(1);\n return state.tokenize(stream, state);\n },\n indent: function indent(state, ctx, textAfter, indentUnit) {\n var firstChar = textAfter && textAfter.charAt(0);\n if ((state.prevToken == \"}\" || state.prevToken == \")\") && textAfter == \"\") return state.indented;\n if (state.prevToken == \"operator\" && textAfter != \"}\" && state.context.type != \"}\" || state.prevToken == \"variable\" && firstChar == \".\" || (state.prevToken == \"}\" || state.prevToken == \")\") && firstChar == \".\") return indentUnit * 2 + ctx.indented;\n if (ctx.align && ctx.type == \"}\") return ctx.indented + (state.context.type == (textAfter || \"\").charAt(0) ? 0 : indentUnit);\n }\n },\n modeProps: {\n closeBrackets: {\n triples: '\"'\n }\n }\n });\n def([\"x-shader/x-vertex\", \"x-shader/x-fragment\"], {\n name: \"clike\",\n keywords: words(\"sampler1D sampler2D sampler3D samplerCube \" + \"sampler1DShadow sampler2DShadow \" + \"const attribute uniform varying \" + \"break continue discard return \" + \"for while do if else struct \" + \"in out inout\"),\n types: words(\"float int bool void \" + \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" + \"mat2 mat3 mat4\"),\n blockKeywords: words(\"for while do if else struct\"),\n builtin: words(\"radians degrees sin cos tan asin acos atan \" + \"pow exp log exp2 sqrt inversesqrt \" + \"abs sign floor ceil fract mod min max clamp mix step smoothstep \" + \"length distance dot cross normalize ftransform faceforward \" + \"reflect refract matrixCompMult \" + \"lessThan lessThanEqual greaterThan greaterThanEqual \" + \"equal notEqual any all not \" + \"texture1D texture1DProj texture1DLod texture1DProjLod \" + \"texture2D texture2DProj texture2DLod texture2DProjLod \" + \"texture3D texture3DProj texture3DLod texture3DProjLod \" + \"textureCube textureCubeLod \" + \"shadow1D shadow2D shadow1DProj shadow2DProj \" + \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" + \"dFdx dFdy fwidth \" + \"noise1 noise2 noise3 noise4\"),\n atoms: words(\"true false \" + \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" + \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" + \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" + \"gl_FogCoord gl_PointCoord \" + \"gl_Position gl_PointSize gl_ClipVertex \" + \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" + \"gl_TexCoord gl_FogFragCoord \" + \"gl_FragCoord gl_FrontFacing \" + \"gl_FragData gl_FragDepth \" + \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" + \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" + \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" + \"gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" + \"gl_ProjectionMatrixInverseTranspose \" + \"gl_ModelViewProjectionMatrixInverseTranspose \" + \"gl_TextureMatrixInverseTranspose \" + \"gl_NormalScale gl_DepthRange gl_ClipPlane \" + \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" + \"gl_FrontLightModelProduct gl_BackLightModelProduct \" + \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" + \"gl_FogParameters \" + \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" + \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" + \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" + \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" + \"gl_MaxDrawBuffers\"),\n indentSwitch: false,\n hooks: {\n \"#\": cppHook\n },\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def(\"text/x-nesc\", {\n name: \"clike\",\n keywords: words(cKeywords + \" as atomic async call command component components configuration event generic \" + \"implementation includes interface module new norace nx_struct nx_union post provides \" + \"signal task uses abstract extends\"),\n types: cTypes,\n blockKeywords: words(cBlockKeywords),\n atoms: words(\"null true false\"),\n hooks: {\n \"#\": cppHook\n },\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def(\"text/x-objectivec\", {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + objCKeywords),\n types: objCTypes,\n builtin: words(objCBuiltins),\n blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),\n defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class\"),\n dontIndentStatements: /^@.*$/,\n typeFirstDefinitions: true,\n atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook\n },\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def(\"text/x-objectivec++\", {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + objCKeywords + \" \" + cppKeywords),\n types: objCTypes,\n builtin: words(objCBuiltins),\n blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),\n defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class class namespace\"),\n dontIndentStatements: /^@.*$|^template$/,\n typeFirstDefinitions: true,\n atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n \"u\": cpp11StringHook,\n \"U\": cpp11StringHook,\n \"L\": cpp11StringHook,\n \"R\": cpp11StringHook,\n \"0\": cpp14Literal,\n \"1\": cpp14Literal,\n \"2\": cpp14Literal,\n \"3\": cpp14Literal,\n \"4\": cpp14Literal,\n \"5\": cpp14Literal,\n \"6\": cpp14Literal,\n \"7\": cpp14Literal,\n \"8\": cpp14Literal,\n \"9\": cpp14Literal,\n token: function token(stream, state, style) {\n if (style == \"variable\" && stream.peek() == \"(\" && (state.prevToken == \";\" || state.prevToken == null || state.prevToken == \"}\") && cppLooksLikeConstructor(stream.current())) return \"def\";\n }\n },\n namespaceSeparator: \"::\",\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n });\n def(\"text/x-squirrel\", {\n name: \"clike\",\n keywords: words(\"base break clone continue const default delete enum extends function in class\" + \" foreach local resume return this throw typeof yield constructor instanceof static\"),\n types: cTypes,\n blockKeywords: words(\"case catch class else for foreach if switch try while\"),\n defKeywords: words(\"function local class\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n hooks: {\n \"#\": cppHook\n },\n modeProps: {\n fold: [\"brace\", \"include\"]\n }\n }); // Ceylon Strings need to deal with interpolation\n\n var stringTokenizer = null;\n\n function tokenCeylonString(type) {\n return function (stream, state) {\n var escaped = false,\n next,\n end = false;\n\n while (!stream.eol()) {\n if (!escaped && stream.match('\"') && (type == \"single\" || stream.match('\"\"'))) {\n end = true;\n break;\n }\n\n if (!escaped && stream.match('``')) {\n stringTokenizer = tokenCeylonString(type);\n end = true;\n break;\n }\n\n next = stream.next();\n escaped = type == \"single\" && !escaped && next == \"\\\\\";\n }\n\n if (end) state.tokenize = null;\n return \"string\";\n };\n }\n\n def(\"text/x-ceylon\", {\n name: \"clike\",\n keywords: words(\"abstracts alias assembly assert assign break case catch class continue dynamic else\" + \" exists extends finally for function given if import in interface is let module new\" + \" nonempty object of out outer package return satisfies super switch then this throw\" + \" try value void while\"),\n types: function types(word) {\n // In Ceylon all identifiers that start with an uppercase are types\n var first = word.charAt(0);\n return first === first.toUpperCase() && first !== first.toLowerCase();\n },\n blockKeywords: words(\"case catch class dynamic else finally for function if interface module new object switch try while\"),\n defKeywords: words(\"class dynamic function interface module object package value\"),\n builtin: words(\"abstract actual aliased annotation by default deprecated doc final formal late license\" + \" native optional sealed see serializable shared suppressWarnings tagged throws variable\"),\n isPunctuationChar: /[\\[\\]{}\\(\\),;\\:\\.`]/,\n isOperatorChar: /[+\\-*&%=<>!?|^~:\\/]/,\n numberStart: /[\\d#$]/,\n number: /^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,\n multiLineStrings: true,\n typeFirstDefinitions: true,\n atoms: words(\"true false null larger smaller equal empty finished\"),\n indentSwitch: false,\n styleDefs: false,\n hooks: {\n \"@\": function _(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '\"': function _(stream, state) {\n state.tokenize = tokenCeylonString(stream.match('\"\"') ? \"triple\" : \"single\");\n return state.tokenize(stream, state);\n },\n '`': function _(stream, state) {\n if (!stringTokenizer || !stream.match('`')) return false;\n state.tokenize = stringTokenizer;\n stringTokenizer = null;\n return state.tokenize(stream, state);\n },\n \"'\": function _(stream) {\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n return \"atom\";\n },\n token: function token(_stream, state, style) {\n if ((style == \"variable\" || style == \"type\") && state.prevToken == \".\") {\n return \"variable-2\";\n }\n }\n },\n modeProps: {\n fold: [\"brace\", \"import\"],\n closeBrackets: {\n triples: '\"'\n }\n }\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9jbGlrZS9jbGlrZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL2NsaWtlL2NsaWtlLmpzP2NiOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGluZm8sIGFsaWduLCBwcmV2KSB7XG4gIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuaW5mbyA9IGluZm87XG4gIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgdGhpcy5wcmV2ID0gcHJldjtcbn1cbmZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUsIGluZm8pIHtcbiAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIiAmJiB0eXBlICE9IFwic3RhdGVtZW50XCIpXG4gICAgaW5kZW50ID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChpbmRlbnQsIGNvbCwgdHlwZSwgaW5mbywgbnVsbCwgc3RhdGUuY29udGV4dCk7XG59XG5mdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlO1xuICBpZiAodCA9PSBcIilcIiB8fCB0ID09IFwiXVwiIHx8IHQgPT0gXCJ9XCIpXG4gICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbn1cblxuZnVuY3Rpb24gdHlwZUJlZm9yZShzdHJlYW0sIHN0YXRlLCBwb3MpIHtcbiAgaWYgKHN0YXRlLnByZXZUb2tlbiA9PSBcInZhcmlhYmxlXCIgfHwgc3RhdGUucHJldlRva2VuID09IFwidHlwZVwiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKC9cXFMoPzpbXi0gXT58WypcXF1dKVxccyokfFxcKiQvLnRlc3Qoc3RyZWFtLnN0cmluZy5zbGljZSgwLCBwb3MpKSkgcmV0dXJuIHRydWU7XG4gIGlmIChzdGF0ZS50eXBlQXRFbmRPZkxpbmUgJiYgc3RyZWFtLmNvbHVtbigpID09IHN0cmVhbS5pbmRlbnRhdGlvbigpKSByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNUb3BTY29wZShjb250ZXh0KSB7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC50eXBlID09IFwidG9wXCIpIHJldHVybiB0cnVlO1xuICAgIGlmIChjb250ZXh0LnR5cGUgPT0gXCJ9XCIgJiYgY29udGV4dC5wcmV2LmluZm8gIT0gXCJuYW1lc3BhY2VcIikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gIH1cbn1cblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiY2xpa2VcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCxcbiAgICAgIHN0YXRlbWVudEluZGVudFVuaXQgPSBwYXJzZXJDb25maWcuc3RhdGVtZW50SW5kZW50VW5pdCB8fCBpbmRlbnRVbml0LFxuICAgICAgZG9udEFsaWduQ2FsbHMgPSBwYXJzZXJDb25maWcuZG9udEFsaWduQ2FsbHMsXG4gICAgICBrZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcyB8fCB7fSxcbiAgICAgIHR5cGVzID0gcGFyc2VyQ29uZmlnLnR5cGVzIHx8IHt9LFxuICAgICAgYnVpbHRpbiA9IHBhcnNlckNvbmZpZy5idWlsdGluIHx8IHt9LFxuICAgICAgYmxvY2tLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ibG9ja0tleXdvcmRzIHx8IHt9LFxuICAgICAgZGVmS2V5d29yZHMgPSBwYXJzZXJDb25maWcuZGVmS2V5d29yZHMgfHwge30sXG4gICAgICBhdG9tcyA9IHBhcnNlckNvbmZpZy5hdG9tcyB8fCB7fSxcbiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LFxuICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzLFxuICAgICAgaW5kZW50U3RhdGVtZW50cyA9IHBhcnNlckNvbmZpZy5pbmRlbnRTdGF0ZW1lbnRzICE9PSBmYWxzZSxcbiAgICAgIGluZGVudFN3aXRjaCA9IHBhcnNlckNvbmZpZy5pbmRlbnRTd2l0Y2ggIT09IGZhbHNlLFxuICAgICAgbmFtZXNwYWNlU2VwYXJhdG9yID0gcGFyc2VyQ29uZmlnLm5hbWVzcGFjZVNlcGFyYXRvcixcbiAgICAgIGlzUHVuY3R1YXRpb25DaGFyID0gcGFyc2VyQ29uZmlnLmlzUHVuY3R1YXRpb25DaGFyIHx8IC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLFxuICAgICAgbnVtYmVyU3RhcnQgPSBwYXJzZXJDb25maWcubnVtYmVyU3RhcnQgfHwgL1tcXGRcXC5dLyxcbiAgICAgIG51bWJlciA9IHBhcnNlckNvbmZpZy5udW1iZXIgfHwgL14oPzoweFthLWZcXGRdK3wwYlswMV0rfCg/OlxcZCtcXC4/XFxkKnxcXC5cXGQrKSg/OmVbLStdP1xcZCspPykodXxsbD98bHxmKT8vaSxcbiAgICAgIGlzT3BlcmF0b3JDaGFyID0gcGFyc2VyQ29uZmlnLmlzT3BlcmF0b3JDaGFyIHx8IC9bK1xcLSomJT08PiE/fFxcL10vLFxuICAgICAgaXNJZGVudGlmaWVyQ2hhciA9IHBhcnNlckNvbmZpZy5pc0lkZW50aWZpZXJDaGFyIHx8IC9bXFx3XFwkX1xceGExLVxcdWZmZmZdLyxcbiAgICAgIC8vIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB7c3RyaW5nfSB0b2tlbiBhbmQgcmV0dXJucyB0cnVlIGlmIGl0XG4gICAgICAvLyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIGJ1aWx0aW4uXG4gICAgICBpc1Jlc2VydmVkSWRlbnRpZmllciA9IHBhcnNlckNvbmZpZy5pc1Jlc2VydmVkSWRlbnRpZmllciB8fCBmYWxzZTtcblxuICB2YXIgY3VyUHVuYywgaXNEZWZLZXl3b3JkO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoaG9va3NbY2hdKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKGlzUHVuY3R1YXRpb25DaGFyLnRlc3QoY2gpKSB7XG4gICAgICBjdXJQdW5jID0gY2g7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKG51bWJlclN0YXJ0LnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uYmFja1VwKDEpXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG51bWJlcikpIHJldHVybiBcIm51bWJlclwiXG4gICAgICBzdHJlYW0ubmV4dCgpXG4gICAgfVxuICAgIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHdoaWxlICghc3RyZWFtLm1hdGNoKC9eXFwvW1xcLypdLywgZmFsc2UpICYmIHN0cmVhbS5lYXQoaXNPcGVyYXRvckNoYXIpKSB7fVxuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICB9XG4gICAgc3RyZWFtLmVhdFdoaWxlKGlzSWRlbnRpZmllckNoYXIpO1xuICAgIGlmIChuYW1lc3BhY2VTZXBhcmF0b3IpIHdoaWxlIChzdHJlYW0ubWF0Y2gobmFtZXNwYWNlU2VwYXJhdG9yKSlcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc0lkZW50aWZpZXJDaGFyKTtcblxuICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIGlmIChjb250YWlucyhrZXl3b3JkcywgY3VyKSkge1xuICAgICAgaWYgKGNvbnRhaW5zKGJsb2NrS2V5d29yZHMsIGN1cikpIGN1clB1bmMgPSBcIm5ld3N0YXRlbWVudFwiO1xuICAgICAgaWYgKGNvbnRhaW5zKGRlZktleXdvcmRzLCBjdXIpKSBpc0RlZktleXdvcmQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH1cbiAgICBpZiAoY29udGFpbnModHlwZXMsIGN1cikpIHJldHVybiBcInR5cGVcIjtcbiAgICBpZiAoY29udGFpbnMoYnVpbHRpbiwgY3VyKVxuICAgICAgICB8fCAoaXNSZXNlcnZlZElkZW50aWZpZXIgJiYgaXNSZXNlcnZlZElkZW50aWZpZXIoY3VyKSkpIHtcbiAgICAgIGlmIChjb250YWlucyhibG9ja0tleXdvcmRzLCBjdXIpKSBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICB9XG4gICAgaWYgKGNvbnRhaW5zKGF0b21zLCBjdXIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiBtYXliZUVPTChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHBhcnNlckNvbmZpZy50eXBlRmlyc3REZWZpbml0aW9ucyAmJiBzdHJlYW0uZW9sKCkgJiYgaXNUb3BTY29wZShzdGF0ZS5jb250ZXh0KSlcbiAgICAgIHN0YXRlLnR5cGVBdEVuZE9mTGluZSA9IHR5cGVCZWZvcmUoc3RyZWFtLCBzdGF0ZSwgc3RyZWFtLnBvcylcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJ0b3BcIiwgbnVsbCwgZmFsc2UpLFxuICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUsXG4gICAgICAgIHByZXZUb2tlbjogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsgbWF5YmVFT0woc3RyZWFtLCBzdGF0ZSk7IHJldHVybiBudWxsOyB9XG4gICAgICBjdXJQdW5jID0gaXNEZWZLZXl3b3JkID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiIHx8IHN0eWxlID09IFwibWV0YVwiKSByZXR1cm4gc3R5bGU7XG4gICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7XG5cbiAgICAgIGlmIChjdXJQdW5jID09IFwiO1wiIHx8IGN1clB1bmMgPT0gXCI6XCIgfHwgKGN1clB1bmMgPT0gXCIsXCIgJiYgc3RyZWFtLm1hdGNoKC9eXFxzKig/OlxcL1xcLy4qKT8kLywgZmFsc2UpKSlcbiAgICAgICAgd2hpbGUgKHN0YXRlLmNvbnRleHQudHlwZSA9PSBcInN0YXRlbWVudFwiKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ7XCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwifVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJbXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiXVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCIoXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiKVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ9XCIpIHtcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJ9XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKGluZGVudFN0YXRlbWVudHMgJiZcbiAgICAgICAgICAgICAgICgoKGN0eC50eXBlID09IFwifVwiIHx8IGN0eC50eXBlID09IFwidG9wXCIpICYmIGN1clB1bmMgIT0gXCI7XCIpIHx8XG4gICAgICAgICAgICAgICAgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgY3VyUHVuYyA9PSBcIm5ld3N0YXRlbWVudFwiKSkpIHtcbiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJzdGF0ZW1lbnRcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHlsZSA9PSBcInZhcmlhYmxlXCIgJiZcbiAgICAgICAgICAoKHN0YXRlLnByZXZUb2tlbiA9PSBcImRlZlwiIHx8XG4gICAgICAgICAgICAocGFyc2VyQ29uZmlnLnR5cGVGaXJzdERlZmluaXRpb25zICYmIHR5cGVCZWZvcmUoc3RyZWFtLCBzdGF0ZSwgc3RyZWFtLnN0YXJ0KSAmJlxuICAgICAgICAgICAgIGlzVG9wU2NvcGUoc3RhdGUuY29udGV4dCkgJiYgc3RyZWFtLm1hdGNoKC9eXFxzKlxcKC8sIGZhbHNlKSkpKSlcbiAgICAgICAgc3R5bGUgPSBcImRlZlwiO1xuXG4gICAgICBpZiAoaG9va3MudG9rZW4pIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzLnRva2VuKHN0cmVhbSwgc3RhdGUsIHN0eWxlKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSBzdHlsZSA9IHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0eWxlID09IFwiZGVmXCIgJiYgcGFyc2VyQ29uZmlnLnN0eWxlRGVmcyA9PT0gZmFsc2UpIHN0eWxlID0gXCJ2YXJpYWJsZVwiO1xuXG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgc3RhdGUucHJldlRva2VuID0gaXNEZWZLZXl3b3JkID8gXCJkZWZcIiA6IHN0eWxlIHx8IGN1clB1bmM7XG4gICAgICBtYXliZUVPTChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwgfHwgc3RhdGUudHlwZUF0RW5kT2ZMaW5lKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQsIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgdmFyIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7XG4gICAgICBpZiAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIiAmJiBmaXJzdENoYXIgPT0gXCJ9XCIpIGN0eCA9IGN0eC5wcmV2O1xuICAgICAgaWYgKHBhcnNlckNvbmZpZy5kb250SW5kZW50U3RhdGVtZW50cylcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgcGFyc2VyQ29uZmlnLmRvbnRJbmRlbnRTdGF0ZW1lbnRzLnRlc3QoY3R4LmluZm8pKVxuICAgICAgICAgIGN0eCA9IGN0eC5wcmV2XG4gICAgICBpZiAoaG9va3MuaW5kZW50KSB7XG4gICAgICAgIHZhciBob29rID0gaG9va3MuaW5kZW50KHN0YXRlLCBjdHgsIHRleHRBZnRlciwgaW5kZW50VW5pdCk7XG4gICAgICAgIGlmICh0eXBlb2YgaG9vayA9PSBcIm51bWJlclwiKSByZXR1cm4gaG9va1xuICAgICAgfVxuICAgICAgdmFyIHN3aXRjaEJsb2NrID0gY3R4LnByZXYgJiYgY3R4LnByZXYuaW5mbyA9PSBcInN3aXRjaFwiO1xuICAgICAgaWYgKHBhcnNlckNvbmZpZy5hbGxtYW5JbmRlbnRhdGlvbiAmJiAvW3soXS8udGVzdChmaXJzdENoYXIpKSB7XG4gICAgICAgIHdoaWxlIChjdHgudHlwZSAhPSBcInRvcFwiICYmIGN0eC50eXBlICE9IFwifVwiKSBjdHggPSBjdHgucHJldlxuICAgICAgICByZXR1cm4gY3R4LmluZGVudGVkXG4gICAgICB9XG4gICAgICBpZiAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIilcbiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChmaXJzdENoYXIgPT0gXCJ7XCIgPyAwIDogc3RhdGVtZW50SW5kZW50VW5pdCk7XG4gICAgICBpZiAoY3R4LmFsaWduICYmICghZG9udEFsaWduQ2FsbHMgfHwgY3R4LnR5cGUgIT0gXCIpXCIpKVxuICAgICAgICByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgaWYgKGN0eC50eXBlID09IFwiKVwiICYmICFjbG9zaW5nKVxuICAgICAgICByZXR1cm4gY3R4LmluZGVudGVkICsgc3RhdGVtZW50SW5kZW50VW5pdDtcblxuICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpICtcbiAgICAgICAgKCFjbG9zaW5nICYmIHN3aXRjaEJsb2NrICYmICEvXig/OmNhc2V8ZGVmYXVsdClcXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAwKTtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogaW5kZW50U3dpdGNoID8gL15cXHMqKD86Y2FzZSAuKj86fGRlZmF1bHQ6fFxce1xcfT98XFx9KSQvIDogL15cXHMqW3t9XSQvLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCIsXG4gICAgYmxvY2tDb21tZW50Q29udGludWU6IFwiICogXCIsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICBmb2xkOiBcImJyYWNlXCJcbiAgfTtcbn0pO1xuXG4gIGZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgZnVuY3Rpb24gY29udGFpbnMod29yZHMsIHdvcmQpIHtcbiAgICBpZiAodHlwZW9mIHdvcmRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB3b3Jkcyh3b3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpO1xuICAgIH1cbiAgfVxuICB2YXIgY0tleXdvcmRzID0gXCJhdXRvIGlmIGJyZWFrIGNhc2UgcmVnaXN0ZXIgY29udGludWUgcmV0dXJuIGRlZmF1bHQgZG8gc2l6ZW9mIFwiICtcbiAgICBcInN0YXRpYyBlbHNlIHN0cnVjdCBzd2l0Y2ggZXh0ZXJuIHR5cGVkZWYgdW5pb24gZm9yIGdvdG8gd2hpbGUgZW51bSBjb25zdCBcIiArXG4gICAgXCJ2b2xhdGlsZSBpbmxpbmUgcmVzdHJpY3QgYXNtIGZvcnRyYW5cIjtcblxuICAvLyBLZXl3b3JkcyBmcm9tIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9rZXl3b3JkIGluY2x1ZGVzIEMrKzIwLlxuICB2YXIgY3BwS2V5d29yZHMgPSBcImFsaWduYXMgYWxpZ25vZiBhbmQgYW5kX2VxIGF1ZGl0IGF4aW9tIGJpdGFuZCBiaXRvciBjYXRjaCBcIiArXG4gIFwiY2xhc3MgY29tcGwgY29uY2VwdCBjb25zdGV4cHIgY29uc3RfY2FzdCBkZWNsdHlwZSBkZWxldGUgZHluYW1pY19jYXN0IFwiICtcbiAgXCJleHBsaWNpdCBleHBvcnQgZmluYWwgZnJpZW5kIGltcG9ydCBtb2R1bGUgbXV0YWJsZSBuYW1lc3BhY2UgbmV3IG5vZXhjZXB0IFwiICtcbiAgXCJub3Qgbm90X2VxIG9wZXJhdG9yIG9yIG9yX2VxIG92ZXJyaWRlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBcIiArXG4gIFwicmVpbnRlcnByZXRfY2FzdCByZXF1aXJlcyBzdGF0aWNfYXNzZXJ0IHN0YXRpY19jYXN0IHRlbXBsYXRlIHRoaXMgXCIgK1xuICBcInRocmVhZF9sb2NhbCB0aHJvdyB0cnkgdHlwZWlkIHR5cGVuYW1lIHVzaW5nIHZpcnR1YWwgeG9yIHhvcl9lcVwiO1xuXG4gIHZhciBvYmpDS2V5d29yZHMgPSBcImJ5Y29weSBieXJlZiBpbiBpbm91dCBvbmV3YXkgb3V0IHNlbGYgc3VwZXIgYXRvbWljIG5vbmF0b21pYyByZXRhaW4gY29weSBcIiArXG4gIFwicmVhZHdyaXRlIHJlYWRvbmx5IHN0cm9uZyB3ZWFrIGFzc2lnbiB0eXBlb2YgbnVsbGFibGUgbm9ubnVsbCBudWxsX3Jlc2V0dGFibGUgX2NtZCBcIiArXG4gIFwiQGludGVyZmFjZSBAaW1wbGVtZW50YXRpb24gQGVuZCBAcHJvdG9jb2wgQGVuY29kZSBAcHJvcGVydHkgQHN5bnRoZXNpemUgQGR5bmFtaWMgQGNsYXNzIFwiICtcbiAgXCJAcHVibGljIEBwYWNrYWdlIEBwcml2YXRlIEBwcm90ZWN0ZWQgQHJlcXVpcmVkIEBvcHRpb25hbCBAdHJ5IEBjYXRjaCBAZmluYWxseSBAaW1wb3J0IFwiICtcbiAgXCJAc2VsZWN0b3IgQGVuY29kZSBAZGVmcyBAc3luY2hyb25pemVkIEBhdXRvcmVsZWFzZXBvb2wgQGNvbXBhdGliaWxpdHlfYWxpYXMgQGF2YWlsYWJsZVwiO1xuXG4gIHZhciBvYmpDQnVpbHRpbnMgPSBcIkZPVU5EQVRJT05fRVhQT1JUIEZPVU5EQVRJT05fRVhURVJOIE5TX0lOTElORSBOU19GT1JNQVRfRlVOQ1RJT04gXCIgK1xuICBcIiBOU19SRVRVUk5TX1JFVEFJTkVETlNfRVJST1JfRU5VTSBOU19SRVRVUk5TX05PVF9SRVRBSU5FRCBOU19SRVRVUk5TX0lOTkVSX1BPSU5URVIgXCIgK1xuICBcIk5TX0RFU0lHTkFURURfSU5JVElBTElaRVIgTlNfRU5VTSBOU19PUFRJT05TIE5TX1JFUVVJUkVTX05JTF9URVJNSU5BVElPTiBcIiArXG4gIFwiTlNfQVNTVU1FX05PTk5VTExfQkVHSU4gTlNfQVNTVU1FX05PTk5VTExfRU5EIE5TX1NXSUZUX05BTUUgTlNfUkVGSU5FRF9GT1JfU1dJRlRcIlxuXG4gIC8vIERvIG5vdCB1c2UgdGhpcy4gVXNlIHRoZSBjVHlwZXMgZnVuY3Rpb24gYmVsb3cuIFRoaXMgaXMgZ2xvYmFsIGp1c3QgdG8gYXZvaWRcbiAgLy8gZXhjZXNzaXZlIGNhbGxzIHdoZW4gY1R5cGVzIGlzIGJlaW5nIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBwYXJzZS5cbiAgdmFyIGJhc2ljQ1R5cGVzID0gd29yZHMoXCJpbnQgbG9uZyBjaGFyIHNob3J0IGRvdWJsZSBmbG9hdCB1bnNpZ25lZCBzaWduZWQgXCIgK1xuICAgIFwidm9pZCBib29sXCIpO1xuXG4gIC8vIERvIG5vdCB1c2UgdGhpcy4gVXNlIHRoZSBvYmpDVHlwZXMgZnVuY3Rpb24gYmVsb3cuIFRoaXMgaXMgZ2xvYmFsIGp1c3QgdG8gYXZvaWRcbiAgLy8gZXhjZXNzaXZlIGNhbGxzIHdoZW4gb2JqQ1R5cGVzIGlzIGJlaW5nIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBwYXJzZS5cbiAgdmFyIGJhc2ljT2JqQ1R5cGVzID0gd29yZHMoXCJTRUwgaW5zdGFuY2V0eXBlIGlkIENsYXNzIFByb3RvY29sIEJPT0xcIik7XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmIGlkZW50aWZpZXIgaXMgYSBcIkNcIiB0eXBlLlxuICAvLyBDIHR5cGUgaXMgZGVmaW5lZCBhcyB0aG9zZSB0aGF0IGFyZSByZXNlcnZlZCBieSB0aGUgY29tcGlsZXIgKGJhc2ljVHlwZXMpLFxuICAvLyBhbmQgdGhvc2UgdGhhdCBlbmQgaW4gX3QgKFJlc2VydmVkIGJ5IFBPU0lYIGZvciB0eXBlcylcbiAgLy8gaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbWFudWFsL2h0bWxfbm9kZS9SZXNlcnZlZC1OYW1lcy5odG1sXG4gIGZ1bmN0aW9uIGNUeXBlcyhpZGVudGlmaWVyKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zKGJhc2ljQ1R5cGVzLCBpZGVudGlmaWVyKSB8fCAvLitfdCQvLnRlc3QoaWRlbnRpZmllcik7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRydWUgaWYgaWRlbnRpZmllciBpcyBhIFwiT2JqZWN0aXZlIENcIiB0eXBlLlxuICBmdW5jdGlvbiBvYmpDVHlwZXMoaWRlbnRpZmllcikge1xuICAgIHJldHVybiBjVHlwZXMoaWRlbnRpZmllcikgfHwgY29udGFpbnMoYmFzaWNPYmpDVHlwZXMsIGlkZW50aWZpZXIpO1xuICB9XG5cbiAgdmFyIGNCbG9ja0tleXdvcmRzID0gXCJjYXNlIGRvIGVsc2UgZm9yIGlmIHN3aXRjaCB3aGlsZSBzdHJ1Y3QgZW51bSB1bmlvblwiO1xuICB2YXIgY0RlZktleXdvcmRzID0gXCJzdHJ1Y3QgZW51bSB1bmlvblwiO1xuXG4gIGZ1bmN0aW9uIGNwcEhvb2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICghc3RhdGUuc3RhcnRPZkxpbmUpIHJldHVybiBmYWxzZVxuICAgIGZvciAodmFyIGNoLCBuZXh0ID0gbnVsbDsgY2ggPSBzdHJlYW0ucGVlaygpOykge1xuICAgICAgaWYgKGNoID09IFwiXFxcXFwiICYmIHN0cmVhbS5tYXRjaCgvXi4kLykpIHtcbiAgICAgICAgbmV4dCA9IGNwcEhvb2tcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLm1hdGNoKC9eXFwvW1xcL1xcKl0vLCBmYWxzZSkpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KClcbiAgICB9XG4gICAgc3RhdGUudG9rZW5pemUgPSBuZXh0XG4gICAgcmV0dXJuIFwibWV0YVwiXG4gIH1cblxuICBmdW5jdGlvbiBwb2ludGVySG9vayhfc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5wcmV2VG9rZW4gPT0gXCJ0eXBlXCIpIHJldHVybiBcInR5cGVcIjtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBGb3IgQyBhbmQgQysrIChhbmQgT2JqQyk6IGlkZW50aWZpZXJzIHN0YXJ0aW5nIHdpdGggX19cbiAgLy8gb3IgXyBmb2xsb3dlZCBieSBhIGNhcGl0YWwgbGV0dGVyIGFyZSByZXNlcnZlZCBmb3IgdGhlIGNvbXBpbGVyLlxuICBmdW5jdGlvbiBjSXNSZXNlcnZlZElkZW50aWZpZXIodG9rZW4pIHtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuLmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodG9rZW5bMF0gIT0gJ18nKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICh0b2tlblsxXSA9PSAnXycpIHx8ICh0b2tlblsxXSAhPT0gdG9rZW5bMV0udG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcHAxNExpdGVyYWwoc3RyZWFtKSB7XG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuJ10vKTtcbiAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNwcDExU3RyaW5nSG9vayhzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAvLyBSYXcgc3RyaW5ncy5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKC8oUnx1OFJ8dVJ8VVJ8TFIpLykpIHtcbiAgICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXCIoW15cXHNcXFxcKCldezAsMTZ9KVxcKC8pO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzdGF0ZS5jcHAxMVJhd1N0cmluZ0RlbGltID0gbWF0Y2hbMV07XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuUmF3U3RyaW5nO1xuICAgICAgcmV0dXJuIHRva2VuUmF3U3RyaW5nKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICAvLyBVbmljb2RlIHN0cmluZ3MvY2hhcnMuXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKHU4fHV8VXxMKS8pKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9bXCInXS8sIC8qIGVhdCAqLyBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIElnbm9yZSB0aGlzIGhvb2suXG4gICAgc3RyZWFtLm5leHQoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBjcHBMb29rc0xpa2VDb25zdHJ1Y3Rvcih3b3JkKSB7XG4gICAgdmFyIGxhc3RUd28gPSAvKFxcdyspOjp+PyhcXHcrKSQvLmV4ZWMod29yZCk7XG4gICAgcmV0dXJuIGxhc3RUd28gJiYgbGFzdFR3b1sxXSA9PSBsYXN0VHdvWzJdO1xuICB9XG5cbiAgLy8gQyMtc3R5bGUgc3RyaW5ncyB3aGVyZSBcIlwiIGVzY2FwZXMgYSBxdW90ZS5cbiAgZnVuY3Rpb24gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG5leHQ7XG4gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKG5leHQgPT0gJ1wiJyAmJiAhc3RyZWFtLmVhdCgnXCInKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIC8vIEMrKzExIHJhdyBzdHJpbmcgbGl0ZXJhbCBpcyA8cHJlZml4PlwiPGRlbGltPiggYW55dGhpbmcgKTxkZWxpbT5cIiwgd2hlcmVcbiAgLy8gPGRlbGltPiBjYW4gYmUgYSBzdHJpbmcgdXAgdG8gMTYgY2hhcmFjdGVycyBsb25nLlxuICBmdW5jdGlvbiB0b2tlblJhd1N0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgcmVnZXggbWVhbmluZ3MuXG4gICAgdmFyIGRlbGltID0gc3RhdGUuY3BwMTFSYXdTdHJpbmdEZWxpbS5yZXBsYWNlKC9bXlxcd1xcc10vZywgJ1xcXFwkJicpO1xuICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaChuZXcgUmVnRXhwKFwiLio/XFxcXClcIiArIGRlbGltICsgJ1wiJykpO1xuICAgIGlmIChtYXRjaClcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICBlbHNlXG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cblxuICBmdW5jdGlvbiBkZWYobWltZXMsIG1vZGUpIHtcbiAgICBpZiAodHlwZW9mIG1pbWVzID09IFwic3RyaW5nXCIpIG1pbWVzID0gW21pbWVzXTtcbiAgICB2YXIgd29yZHMgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGQob2JqKSB7XG4gICAgICBpZiAob2JqKSBmb3IgKHZhciBwcm9wIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSlcbiAgICAgICAgd29yZHMucHVzaChwcm9wKTtcbiAgICB9XG4gICAgYWRkKG1vZGUua2V5d29yZHMpO1xuICAgIGFkZChtb2RlLnR5cGVzKTtcbiAgICBhZGQobW9kZS5idWlsdGluKTtcbiAgICBhZGQobW9kZS5hdG9tcyk7XG4gICAgaWYgKHdvcmRzLmxlbmd0aCkge1xuICAgICAgbW9kZS5oZWxwZXJUeXBlID0gbWltZXNbMF07XG4gICAgICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIG1pbWVzWzBdLCB3b3Jkcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRShtaW1lc1tpXSwgbW9kZSk7XG4gIH1cblxuICBkZWYoW1widGV4dC94LWNzcmNcIiwgXCJ0ZXh0L3gtY1wiLCBcInRleHQveC1jaGRyXCJdLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMpLFxuICAgIHR5cGVzOiBjVHlwZXMsXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoY0Jsb2NrS2V5d29yZHMpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhjRGVmS2V5d29yZHMpLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcIk5VTEwgdHJ1ZSBmYWxzZVwiKSxcbiAgICBpc1Jlc2VydmVkSWRlbnRpZmllcjogY0lzUmVzZXJ2ZWRJZGVudGlmaWVyLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIiNcIjogY3BwSG9vayxcbiAgICAgIFwiKlwiOiBwb2ludGVySG9vayxcbiAgICB9LFxuICAgIG1vZGVQcm9wczoge2ZvbGQ6IFtcImJyYWNlXCIsIFwiaW5jbHVkZVwiXX1cbiAgfSk7XG5cbiAgZGVmKFtcInRleHQveC1jKytzcmNcIiwgXCJ0ZXh0L3gtYysraGRyXCJdLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMgKyBcIiBcIiArIGNwcEtleXdvcmRzKSxcbiAgICB0eXBlczogY1R5cGVzLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGNCbG9ja0tleXdvcmRzICsgXCIgY2xhc3MgdHJ5IGNhdGNoXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhjRGVmS2V5d29yZHMgKyBcIiBjbGFzcyBuYW1lc3BhY2VcIiksXG4gICAgdHlwZUZpcnN0RGVmaW5pdGlvbnM6IHRydWUsXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBOVUxMIG51bGxwdHJcIiksXG4gICAgZG9udEluZGVudFN0YXRlbWVudHM6IC9edGVtcGxhdGUkLyxcbiAgICBpc0lkZW50aWZpZXJDaGFyOiAvW1xcd1xcJF9+XFx4YTEtXFx1ZmZmZl0vLFxuICAgIGlzUmVzZXJ2ZWRJZGVudGlmaWVyOiBjSXNSZXNlcnZlZElkZW50aWZpZXIsXG4gICAgaG9va3M6IHtcbiAgICAgIFwiI1wiOiBjcHBIb29rLFxuICAgICAgXCIqXCI6IHBvaW50ZXJIb29rLFxuICAgICAgXCJ1XCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiVVwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIkxcIjogY3BwMTFTdHJpbmdIb29rLFxuICAgICAgXCJSXCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiMFwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjFcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCIyXCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiM1wiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjRcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI1XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiNlwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjdcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI4XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiOVwiOiBjcHAxNExpdGVyYWwsXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSwgc3R5bGUpIHtcbiAgICAgICAgaWYgKHN0eWxlID09IFwidmFyaWFibGVcIiAmJiBzdHJlYW0ucGVlaygpID09IFwiKFwiICYmXG4gICAgICAgICAgICAoc3RhdGUucHJldlRva2VuID09IFwiO1wiIHx8IHN0YXRlLnByZXZUb2tlbiA9PSBudWxsIHx8XG4gICAgICAgICAgICAgc3RhdGUucHJldlRva2VuID09IFwifVwiKSAmJlxuICAgICAgICAgICAgY3BwTG9va3NMaWtlQ29uc3RydWN0b3Ioc3RyZWFtLmN1cnJlbnQoKSkpXG4gICAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICB9XG4gICAgfSxcbiAgICBuYW1lc3BhY2VTZXBhcmF0b3I6IFwiOjpcIixcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihcInRleHQveC1qYXZhXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiYWJzdHJhY3QgYXNzZXJ0IGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29uc3QgY29udGludWUgZGVmYXVsdCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZG8gZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaW5zdGFuY2VvZiBpbnRlcmZhY2UgbmF0aXZlIG5ldyBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwicmV0dXJuIHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidHJ5IHZvbGF0aWxlIHdoaWxlIEBpbnRlcmZhY2VcIiksXG4gICAgdHlwZXM6IHdvcmRzKFwiYnl0ZSBzaG9ydCBpbnQgbG9uZyBmbG9hdCBkb3VibGUgYm9vbGVhbiBjaGFyIHZvaWQgQm9vbGVhbiBCeXRlIENoYXJhY3RlciBEb3VibGUgRmxvYXQgXCIgK1xuICAgICAgICAgICAgICAgICBcIkludGVnZXIgTG9uZyBOdW1iZXIgT2JqZWN0IFNob3J0IFN0cmluZyBTdHJpbmdCdWZmZXIgU3RyaW5nQnVpbGRlciBWb2lkXCIpLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKFwiY2F0Y2ggY2xhc3MgZG8gZWxzZSBmaW5hbGx5IGZvciBpZiBzd2l0Y2ggdHJ5IHdoaWxlXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhcImNsYXNzIGludGVyZmFjZSBlbnVtIEBpbnRlcmZhY2VcIiksXG4gICAgdHlwZUZpcnN0RGVmaW5pdGlvbnM6IHRydWUsXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBudWxsXCIpLFxuICAgIG51bWJlcjogL14oPzoweFthLWZcXGRfXSt8MGJbMDFfXSt8KD86W1xcZF9dK1xcLj9cXGQqfFxcLlxcZCspKD86ZVstK10/W1xcZF9dKyk/KSh1fGxsP3xsfGYpPy9pLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIC8vIERvbid0IG1hdGNoIHRoZSBAaW50ZXJmYWNlIGtleXdvcmQuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goJ2ludGVyZmFjZScsIGZhbHNlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVQcm9wczoge2ZvbGQ6IFtcImJyYWNlXCIsIFwiaW1wb3J0XCJdfVxuICB9KTtcblxuICBkZWYoXCJ0ZXh0L3gtY3NoYXJwXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiYWJzdHJhY3QgYXMgYXN5bmMgYXdhaXQgYmFzZSBicmVhayBjYXNlIGNhdGNoIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWVcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIGRlZmF1bHQgZGVsZWdhdGUgZG8gZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmaW5hbGx5IGZpeGVkIGZvclwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIG5hbWVzcGFjZSBuZXdcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiByZXR1cm4gc2VhbGVkXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdW5jaGVja2VkXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiB1bnNhZmUgdXNpbmcgdmlydHVhbCB2b2lkIHZvbGF0aWxlIHdoaWxlIGFkZCBhbGlhcyBhc2NlbmRpbmcgZGVzY2VuZGluZyBkeW5hbWljIGZyb20gZ2V0XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBnbG9iYWwgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgcmVtb3ZlIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHlpZWxkXCIpLFxuICAgIHR5cGVzOiB3b3JkcyhcIkFjdGlvbiBCb29sZWFuIEJ5dGUgQ2hhciBEYXRlVGltZSBEYXRlVGltZU9mZnNldCBEZWNpbWFsIERvdWJsZSBGdW5jXCIgK1xuICAgICAgICAgICAgICAgICBcIiBHdWlkIEludDE2IEludDMyIEludDY0IE9iamVjdCBTQnl0ZSBTaW5nbGUgU3RyaW5nIFRhc2sgVGltZVNwYW4gVUludDE2IFVJbnQzMlwiICtcbiAgICAgICAgICAgICAgICAgXCIgVUludDY0IGJvb2wgYnl0ZSBjaGFyIGRlY2ltYWwgZG91YmxlIHNob3J0IGludCBsb25nIG9iamVjdFwiICArXG4gICAgICAgICAgICAgICAgIFwiIHNieXRlIGZsb2F0IHN0cmluZyB1c2hvcnQgdWludCB1bG9uZ1wiKSxcbiAgICBibG9ja0tleXdvcmRzOiB3b3JkcyhcImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgZm9yZWFjaCBpZiBzdHJ1Y3Qgc3dpdGNoIHRyeSB3aGlsZVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJjbGFzcyBpbnRlcmZhY2UgbmFtZXNwYWNlIHN0cnVjdCB2YXJcIiksXG4gICAgdHlwZUZpcnN0RGVmaW5pdGlvbnM6IHRydWUsXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBudWxsXCIpLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdCgnXCInKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5BdFN0cmluZztcbiAgICAgICAgICByZXR1cm4gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiB0b2tlblRyaXBsZVN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgaWYgKCFlc2NhcGVkICYmIHN0cmVhbS5tYXRjaCgnXCJcIlwiJykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSBzdHJlYW0ubmV4dCgpID09IFwiXFxcXFwiICYmICFlc2NhcGVkO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuTmVzdGVkQ29tbWVudChkZXB0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoXG4gICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIGlmIChjaCA9PSBcIipcIiAmJiBzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGxcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRDb21tZW50KGRlcHRoIC0gMSlcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIi9cIiAmJiBzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRDb21tZW50KGRlcHRoICsgMSlcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgfVxuICB9XG5cbiAgZGVmKFwidGV4dC94LXNjYWxhXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFxuICAgICAgLyogc2NhbGEgKi9cbiAgICAgIFwiYWJzdHJhY3QgY2FzZSBjYXRjaCBjbGFzcyBkZWYgZG8gZWxzZSBleHRlbmRzIGZpbmFsIGZpbmFsbHkgZm9yIGZvclNvbWUgaWYgXCIgK1xuICAgICAgXCJpbXBsaWNpdCBpbXBvcnQgbGF6eSBtYXRjaCBuZXcgbnVsbCBvYmplY3Qgb3ZlcnJpZGUgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCByZXR1cm4gXCIgK1xuICAgICAgXCJzZWFsZWQgc3VwZXIgdGhpcyB0aHJvdyB0cmFpdCB0cnkgdHlwZSB2YWwgdmFyIHdoaWxlIHdpdGggeWllbGQgXyBcIiArXG5cbiAgICAgIC8qIHBhY2thZ2Ugc2NhbGEgKi9cbiAgICAgIFwiYXNzZXJ0IGFzc3VtZSByZXF1aXJlIHByaW50IHByaW50bG4gcHJpbnRmIHJlYWRMaW5lIHJlYWRCb29sZWFuIHJlYWRCeXRlIHJlYWRTaG9ydCBcIiArXG4gICAgICBcInJlYWRDaGFyIHJlYWRJbnQgcmVhZExvbmcgcmVhZEZsb2F0IHJlYWREb3VibGVcIlxuICAgICksXG4gICAgdHlwZXM6IHdvcmRzKFxuICAgICAgXCJBbnlWYWwgQXBwIEFwcGxpY2F0aW9uIEFycmF5IEJ1ZmZlcmVkSXRlcmF0b3IgQmlnRGVjaW1hbCBCaWdJbnQgQ2hhciBDb25zb2xlIEVpdGhlciBcIiArXG4gICAgICBcIkVudW1lcmF0aW9uIEVxdWl2IEVycm9yIEV4Y2VwdGlvbiBGcmFjdGlvbmFsIEZ1bmN0aW9uIEluZGV4ZWRTZXEgSW50IEludGVncmFsIEl0ZXJhYmxlIFwiICtcbiAgICAgIFwiSXRlcmF0b3IgTGlzdCBNYXAgTnVtZXJpYyBOaWwgTm90TnVsbCBPcHRpb24gT3JkZXJlZCBPcmRlcmluZyBQYXJ0aWFsRnVuY3Rpb24gUGFydGlhbE9yZGVyaW5nIFwiICtcbiAgICAgIFwiUHJvZHVjdCBQcm94eSBSYW5nZSBSZXNwb25kZXIgU2VxIFNlcmlhbGl6YWJsZSBTZXQgU3BlY2lhbGl6YWJsZSBTdHJlYW0gU3RyaW5nQnVpbGRlciBcIiArXG4gICAgICBcIlN0cmluZ0NvbnRleHQgU3ltYm9sIFRocm93YWJsZSBUcmF2ZXJzYWJsZSBUcmF2ZXJzYWJsZU9uY2UgVHVwbGUgVW5pdCBWZWN0b3IgXCIgK1xuXG4gICAgICAvKiBwYWNrYWdlIGphdmEubGFuZyAqL1xuICAgICAgXCJCb29sZWFuIEJ5dGUgQ2hhcmFjdGVyIENoYXJTZXF1ZW5jZSBDbGFzcyBDbGFzc0xvYWRlciBDbG9uZWFibGUgQ29tcGFyYWJsZSBcIiArXG4gICAgICBcIkNvbXBpbGVyIERvdWJsZSBFeGNlcHRpb24gRmxvYXQgSW50ZWdlciBMb25nIE1hdGggTnVtYmVyIE9iamVjdCBQYWNrYWdlIFBhaXIgUHJvY2VzcyBcIiArXG4gICAgICBcIlJ1bnRpbWUgUnVubmFibGUgU2VjdXJpdHlNYW5hZ2VyIFNob3J0IFN0YWNrVHJhY2VFbGVtZW50IFN0cmljdE1hdGggU3RyaW5nIFwiICtcbiAgICAgIFwiU3RyaW5nQnVmZmVyIFN5c3RlbSBUaHJlYWQgVGhyZWFkR3JvdXAgVGhyZWFkTG9jYWwgVGhyb3dhYmxlIFRyaXBsZSBWb2lkXCJcbiAgICApLFxuICAgIG11bHRpTGluZVN0cmluZ3M6IHRydWUsXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJjYXRjaCBjbGFzcyBlbnVtIGRvIGVsc2UgZmluYWxseSBmb3IgZm9yU29tZSBpZiBtYXRjaCBzd2l0Y2ggdHJ5IHdoaWxlXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhcImNsYXNzIGVudW0gZGVmIG9iamVjdCBwYWNrYWdlIHRyYWl0IHR5cGUgdmFsIHZhclwiKSxcbiAgICBhdG9tczogd29yZHMoXCJ0cnVlIGZhbHNlIG51bGxcIiksXG4gICAgaW5kZW50U3RhdGVtZW50czogZmFsc2UsXG4gICAgaW5kZW50U3dpdGNoOiBmYWxzZSxcbiAgICBpc09wZXJhdG9yQ2hhcjogL1srXFwtKiYlPTw+IT98XFwvIzpAXS8sXG4gICAgaG9va3M6IHtcbiAgICAgIFwiQFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgfSxcbiAgICAgICdcIic6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0ubWF0Y2goJ1wiXCInKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuVHJpcGxlU3RyaW5nO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgXCInXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXFx4YTEtXFx1ZmZmZl0vKTtcbiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgfSxcbiAgICAgIFwiPVwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBjeCA9IHN0YXRlLmNvbnRleHRcbiAgICAgICAgaWYgKGN4LnR5cGUgPT0gXCJ9XCIgJiYgY3guYWxpZ24gJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoY3guaW5kZW50ZWQsIGN4LmNvbHVtbiwgY3gudHlwZSwgY3guaW5mbywgbnVsbCwgY3gucHJldilcbiAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIFwiL1wiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdChcIipcIikpIHJldHVybiBmYWxzZVxuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTmVzdGVkQ29tbWVudCgxKVxuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVQcm9wczoge2Nsb3NlQnJhY2tldHM6IHtwYWlyczogJygpW117fVwiXCInLCB0cmlwbGVzOiAnXCInfX1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdG9rZW5Lb3RsaW5TdHJpbmcodHJpcGxlU3RyaW5nKXtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKCF0cmlwbGVTdHJpbmcgJiYgIWVzY2FwZWQgJiYgc3RyZWFtLm1hdGNoKCdcIicpICkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgaWYgKHRyaXBsZVN0cmluZyAmJiBzdHJlYW0ubWF0Y2goJ1wiXCJcIicpKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fVxuICAgICAgICBuZXh0ID0gc3RyZWFtLm5leHQoKTtcbiAgICAgICAgaWYoIWVzY2FwZWQgJiYgbmV4dCA9PSBcIiRcIiAmJiBzdHJlYW0ubWF0Y2goJ3snKSlcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvKFwifVwiKTtcbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCIgJiYgIXRyaXBsZVN0cmluZztcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIXRyaXBsZVN0cmluZylcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfVxuICB9XG5cbiAgZGVmKFwidGV4dC94LWtvdGxpblwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcbiAgICAgIC8qa2V5d29yZHMqL1xuICAgICAgXCJwYWNrYWdlIGFzIHR5cGVhbGlhcyBjbGFzcyBpbnRlcmZhY2UgdGhpcyBzdXBlciB2YWwgb3BlcmF0b3IgXCIgK1xuICAgICAgXCJ2YXIgZnVuIGZvciBpcyBpbiBUaGlzIHRocm93IHJldHVybiBhbm5vdGF0aW9uIFwiICtcbiAgICAgIFwiYnJlYWsgY29udGludWUgb2JqZWN0IGlmIGVsc2Ugd2hpbGUgZG8gdHJ5IHdoZW4gIWluICFpcyBhcz8gXCIgK1xuXG4gICAgICAvKnNvZnQga2V5d29yZHMqL1xuICAgICAgXCJmaWxlIGltcG9ydCB3aGVyZSBieSBnZXQgc2V0IGFic3RyYWN0IGVudW0gb3BlbiBpbm5lciBvdmVycmlkZSBwcml2YXRlIHB1YmxpYyBpbnRlcm5hbCBcIiArXG4gICAgICBcInByb3RlY3RlZCBjYXRjaCBmaW5hbGx5IG91dCBmaW5hbCB2YXJhcmcgcmVpZmllZCBkeW5hbWljIGNvbXBhbmlvbiBjb25zdHJ1Y3RvciBpbml0IFwiICtcbiAgICAgIFwic2VhbGVkIGZpZWxkIHByb3BlcnR5IHJlY2VpdmVyIHBhcmFtIHNwYXJhbSBsYXRlaW5pdCBkYXRhIGlubGluZSBub2lubGluZSB0YWlscmVjIFwiICtcbiAgICAgIFwiZXh0ZXJuYWwgYW5ub3RhdGlvbiBjcm9zc2lubGluZSBjb25zdCBvcGVyYXRvciBpbmZpeCBzdXNwZW5kIGFjdHVhbCBleHBlY3Qgc2V0cGFyYW1cIlxuICAgICksXG4gICAgdHlwZXM6IHdvcmRzKFxuICAgICAgLyogcGFja2FnZSBqYXZhLmxhbmcgKi9cbiAgICAgIFwiQm9vbGVhbiBCeXRlIENoYXJhY3RlciBDaGFyU2VxdWVuY2UgQ2xhc3MgQ2xhc3NMb2FkZXIgQ2xvbmVhYmxlIENvbXBhcmFibGUgXCIgK1xuICAgICAgXCJDb21waWxlciBEb3VibGUgRXhjZXB0aW9uIEZsb2F0IEludGVnZXIgTG9uZyBNYXRoIE51bWJlciBPYmplY3QgUGFja2FnZSBQYWlyIFByb2Nlc3MgXCIgK1xuICAgICAgXCJSdW50aW1lIFJ1bm5hYmxlIFNlY3VyaXR5TWFuYWdlciBTaG9ydCBTdGFja1RyYWNlRWxlbWVudCBTdHJpY3RNYXRoIFN0cmluZyBcIiArXG4gICAgICBcIlN0cmluZ0J1ZmZlciBTeXN0ZW0gVGhyZWFkIFRocmVhZEdyb3VwIFRocmVhZExvY2FsIFRocm93YWJsZSBUcmlwbGUgVm9pZCBBbm5vdGF0aW9uIEFueSBCb29sZWFuQXJyYXkgXCIgK1xuICAgICAgXCJCeXRlQXJyYXkgQ2hhciBDaGFyQXJyYXkgRGVwcmVjYXRpb25MZXZlbCBEb3VibGVBcnJheSBFbnVtIEZsb2F0QXJyYXkgRnVuY3Rpb24gSW50IEludEFycmF5IExhenkgXCIgK1xuICAgICAgXCJMYXp5VGhyZWFkU2FmZXR5TW9kZSBMb25nQXJyYXkgTm90aGluZyBTaG9ydEFycmF5IFVuaXRcIlxuICAgICksXG4gICAgaW50ZW5kU3dpdGNoOiBmYWxzZSxcbiAgICBpbmRlbnRTdGF0ZW1lbnRzOiBmYWxzZSxcbiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLFxuICAgIG51bWJlcjogL14oPzoweFthLWZcXGRfXSt8MGJbMDFfXSt8KD86W1xcZF9dKyhcXC5cXGQrKT98XFwuXFxkKykoPzplWy0rXT9bXFxkX10rKT8pKHV8bGw/fGx8Zik/L2ksXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHdoZXJlIHRyeSB3aGlsZSBlbnVtXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhcImNsYXNzIHZhbCB2YXIgb2JqZWN0IGludGVyZmFjZSBmdW5cIiksXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBudWxsIHRoaXNcIiksXG4gICAgaG9va3M6IHtcbiAgICAgIFwiQFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgfSxcbiAgICAgICcqJzogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnByZXZUb2tlbiA9PSAnLicgPyAndmFyaWFibGUnIDogJ29wZXJhdG9yJztcbiAgICAgIH0sXG4gICAgICAnXCInOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Lb3RsaW5TdHJpbmcoc3RyZWFtLm1hdGNoKCdcIlwiJykpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgXCIvXCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKlwiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTmVzdGVkQ29tbWVudCgxKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9LFxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgY3R4LCB0ZXh0QWZ0ZXIsIGluZGVudFVuaXQpIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgICBpZiAoKHN0YXRlLnByZXZUb2tlbiA9PSBcIn1cIiB8fCBzdGF0ZS5wcmV2VG9rZW4gPT0gXCIpXCIpICYmIHRleHRBZnRlciA9PSBcIlwiKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRlZDtcbiAgICAgICAgaWYgKChzdGF0ZS5wcmV2VG9rZW4gPT0gXCJvcGVyYXRvclwiICYmIHRleHRBZnRlciAhPSBcIn1cIiAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gXCJ9XCIpIHx8XG4gICAgICAgICAgc3RhdGUucHJldlRva2VuID09IFwidmFyaWFibGVcIiAmJiBmaXJzdENoYXIgPT0gXCIuXCIgfHxcbiAgICAgICAgICAoc3RhdGUucHJldlRva2VuID09IFwifVwiIHx8IHN0YXRlLnByZXZUb2tlbiA9PSBcIilcIikgJiYgZmlyc3RDaGFyID09IFwiLlwiKVxuICAgICAgICAgIHJldHVybiBpbmRlbnRVbml0ICogMiArIGN0eC5pbmRlbnRlZDtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiAmJiBjdHgudHlwZSA9PSBcIn1cIilcbiAgICAgICAgICByZXR1cm4gY3R4LmluZGVudGVkICsgKHN0YXRlLmNvbnRleHQudHlwZSA9PSAodGV4dEFmdGVyIHx8IFwiXCIpLmNoYXJBdCgwKSA/IDAgOiBpbmRlbnRVbml0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVQcm9wczoge2Nsb3NlQnJhY2tldHM6IHt0cmlwbGVzOiAnXCInfX1cbiAgfSk7XG5cbiAgZGVmKFtcIngtc2hhZGVyL3gtdmVydGV4XCIsIFwieC1zaGFkZXIveC1mcmFnbWVudFwiXSwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoXCJzYW1wbGVyMUQgc2FtcGxlcjJEIHNhbXBsZXIzRCBzYW1wbGVyQ3ViZSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwic2FtcGxlcjFEU2hhZG93IHNhbXBsZXIyRFNoYWRvdyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiY29uc3QgYXR0cmlidXRlIHVuaWZvcm0gdmFyeWluZyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiYnJlYWsgY29udGludWUgZGlzY2FyZCByZXR1cm4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImZvciB3aGlsZSBkbyBpZiBlbHNlIHN0cnVjdCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaW4gb3V0IGlub3V0XCIpLFxuICAgIHR5cGVzOiB3b3JkcyhcImZsb2F0IGludCBib29sIHZvaWQgXCIgK1xuICAgICAgICAgICAgICAgICBcInZlYzIgdmVjMyB2ZWM0IGl2ZWMyIGl2ZWMzIGl2ZWM0IGJ2ZWMyIGJ2ZWMzIGJ2ZWM0IFwiICtcbiAgICAgICAgICAgICAgICAgXCJtYXQyIG1hdDMgbWF0NFwiKSxcbiAgICBibG9ja0tleXdvcmRzOiB3b3JkcyhcImZvciB3aGlsZSBkbyBpZiBlbHNlIHN0cnVjdFwiKSxcbiAgICBidWlsdGluOiB3b3JkcyhcInJhZGlhbnMgZGVncmVlcyBzaW4gY29zIHRhbiBhc2luIGFjb3MgYXRhbiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwicG93IGV4cCBsb2cgZXhwMiBzcXJ0IGludmVyc2VzcXJ0IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJhYnMgc2lnbiBmbG9vciBjZWlsIGZyYWN0IG1vZCBtaW4gbWF4IGNsYW1wIG1peCBzdGVwIHNtb290aHN0ZXAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImxlbmd0aCBkaXN0YW5jZSBkb3QgY3Jvc3Mgbm9ybWFsaXplIGZ0cmFuc2Zvcm0gZmFjZWZvcndhcmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInJlZmxlY3QgcmVmcmFjdCBtYXRyaXhDb21wTXVsdCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwibGVzc1RoYW4gbGVzc1RoYW5FcXVhbCBncmVhdGVyVGhhbiBncmVhdGVyVGhhbkVxdWFsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJlcXVhbCBub3RFcXVhbCBhbnkgYWxsIG5vdCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidGV4dHVyZTFEIHRleHR1cmUxRFByb2ogdGV4dHVyZTFETG9kIHRleHR1cmUxRFByb2pMb2QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRleHR1cmUyRCB0ZXh0dXJlMkRQcm9qIHRleHR1cmUyRExvZCB0ZXh0dXJlMkRQcm9qTG9kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0dXJlM0QgdGV4dHVyZTNEUHJvaiB0ZXh0dXJlM0RMb2QgdGV4dHVyZTNEUHJvakxvZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidGV4dHVyZUN1YmUgdGV4dHVyZUN1YmVMb2QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInNoYWRvdzFEIHNoYWRvdzJEIHNoYWRvdzFEUHJvaiBzaGFkb3cyRFByb2ogXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInNoYWRvdzFETG9kIHNoYWRvdzJETG9kIHNoYWRvdzFEUHJvakxvZCBzaGFkb3cyRFByb2pMb2QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImRGZHggZEZkeSBmd2lkdGggXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIm5vaXNlMSBub2lzZTIgbm9pc2UzIG5vaXNlNFwiKSxcbiAgICBhdG9tczogd29yZHMoXCJ0cnVlIGZhbHNlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX0ZyYWdDb2xvciBnbF9TZWNvbmRhcnlDb2xvciBnbF9Ob3JtYWwgZ2xfVmVydGV4IFwiICtcbiAgICAgICAgICAgICAgICBcImdsX011bHRpVGV4Q29vcmQwIGdsX011bHRpVGV4Q29vcmQxIGdsX011bHRpVGV4Q29vcmQyIGdsX011bHRpVGV4Q29vcmQzIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX011bHRpVGV4Q29vcmQ0IGdsX011bHRpVGV4Q29vcmQ1IGdsX011bHRpVGV4Q29vcmQ2IGdsX011bHRpVGV4Q29vcmQ3IFwiICtcbiAgICAgICAgICAgICAgICBcImdsX0ZvZ0Nvb3JkIGdsX1BvaW50Q29vcmQgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfUG9zaXRpb24gZ2xfUG9pbnRTaXplIGdsX0NsaXBWZXJ0ZXggXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfRnJvbnRDb2xvciBnbF9CYWNrQ29sb3IgZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciBnbF9CYWNrU2Vjb25kYXJ5Q29sb3IgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfVGV4Q29vcmQgZ2xfRm9nRnJhZ0Nvb3JkIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX0ZyYWdDb29yZCBnbF9Gcm9udEZhY2luZyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9GcmFnRGF0YSBnbF9GcmFnRGVwdGggXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfTW9kZWxWaWV3TWF0cml4IGdsX1Byb2plY3Rpb25NYXRyaXggZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9UZXh0dXJlTWF0cml4IGdsX05vcm1hbE1hdHJpeCBnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1RleHVyZU1hdHJpeFRyYW5zcG9zZSBnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX05vcm1hbFNjYWxlIGdsX0RlcHRoUmFuZ2UgZ2xfQ2xpcFBsYW5lIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1BvaW50IGdsX0Zyb250TWF0ZXJpYWwgZ2xfQmFja01hdGVyaWFsIGdsX0xpZ2h0U291cmNlIGdsX0xpZ2h0TW9kZWwgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCBnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfVGV4dHVyZUNvbG9yIGdsX0V5ZVBsYW5lUyBnbF9FeWVQbGFuZVQgZ2xfRXllUGxhbmVSIGdsX0V5ZVBsYW5lUSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Gb2dQYXJhbWV0ZXJzIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX01heExpZ2h0cyBnbF9NYXhDbGlwUGxhbmVzIGdsX01heFRleHR1cmVVbml0cyBnbF9NYXhUZXh0dXJlQ29vcmRzIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX01heFZlcnRleEF0dHJpYnMgZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4VmFyeWluZ0Zsb2F0cyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIGdsX01heENvbWJpbmVUZXh0dXJlSW1hZ2VVbml0cyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NYXhEcmF3QnVmZmVyc1wiKSxcbiAgICBpbmRlbnRTd2l0Y2g6IGZhbHNlLFxuICAgIGhvb2tzOiB7XCIjXCI6IGNwcEhvb2t9LFxuICAgIG1vZGVQcm9wczoge2ZvbGQ6IFtcImJyYWNlXCIsIFwiaW5jbHVkZVwiXX1cbiAgfSk7XG5cbiAgZGVmKFwidGV4dC94LW5lc2NcIiwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoY0tleXdvcmRzICsgXCIgYXMgYXRvbWljIGFzeW5jIGNhbGwgY29tbWFuZCBjb21wb25lbnQgY29tcG9uZW50cyBjb25maWd1cmF0aW9uIGV2ZW50IGdlbmVyaWMgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImltcGxlbWVudGF0aW9uIGluY2x1ZGVzIGludGVyZmFjZSBtb2R1bGUgbmV3IG5vcmFjZSBueF9zdHJ1Y3QgbnhfdW5pb24gcG9zdCBwcm92aWRlcyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwic2lnbmFsIHRhc2sgdXNlcyBhYnN0cmFjdCBleHRlbmRzXCIpLFxuICAgIHR5cGVzOiBjVHlwZXMsXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoY0Jsb2NrS2V5d29yZHMpLFxuICAgIGF0b21zOiB3b3JkcyhcIm51bGwgdHJ1ZSBmYWxzZVwiKSxcbiAgICBob29rczoge1wiI1wiOiBjcHBIb29rfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihcInRleHQveC1vYmplY3RpdmVjXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArIFwiIFwiICsgb2JqQ0tleXdvcmRzKSxcbiAgICB0eXBlczogb2JqQ1R5cGVzLFxuICAgIGJ1aWx0aW46IHdvcmRzKG9iakNCdWlsdGlucyksXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoY0Jsb2NrS2V5d29yZHMgKyBcIiBAc3ludGhlc2l6ZSBAdHJ5IEBjYXRjaCBAZmluYWxseSBAYXV0b3JlbGVhc2Vwb29sIEBzeW5jaHJvbml6ZWRcIiksXG4gICAgZGVmS2V5d29yZHM6IHdvcmRzKGNEZWZLZXl3b3JkcyArIFwiIEBpbnRlcmZhY2UgQGltcGxlbWVudGF0aW9uIEBwcm90b2NvbCBAY2xhc3NcIiksXG4gICAgZG9udEluZGVudFN0YXRlbWVudHM6IC9eQC4qJC8sXG4gICAgdHlwZUZpcnN0RGVmaW5pdGlvbnM6IHRydWUsXG4gICAgYXRvbXM6IHdvcmRzKFwiWUVTIE5PIE5VTEwgTmlsIG5pbCB0cnVlIGZhbHNlIG51bGxwdHJcIiksXG4gICAgaXNSZXNlcnZlZElkZW50aWZpZXI6IGNJc1Jlc2VydmVkSWRlbnRpZmllcixcbiAgICBob29rczoge1xuICAgICAgXCIjXCI6IGNwcEhvb2ssXG4gICAgICBcIipcIjogcG9pbnRlckhvb2ssXG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihcInRleHQveC1vYmplY3RpdmVjKytcIiwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoY0tleXdvcmRzICsgXCIgXCIgKyBvYmpDS2V5d29yZHMgKyBcIiBcIiArIGNwcEtleXdvcmRzKSxcbiAgICB0eXBlczogb2JqQ1R5cGVzLFxuICAgIGJ1aWx0aW46IHdvcmRzKG9iakNCdWlsdGlucyksXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoY0Jsb2NrS2V5d29yZHMgKyBcIiBAc3ludGhlc2l6ZSBAdHJ5IEBjYXRjaCBAZmluYWxseSBAYXV0b3JlbGVhc2Vwb29sIEBzeW5jaHJvbml6ZWQgY2xhc3MgdHJ5IGNhdGNoXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhjRGVmS2V5d29yZHMgKyBcIiBAaW50ZXJmYWNlIEBpbXBsZW1lbnRhdGlvbiBAcHJvdG9jb2wgQGNsYXNzIGNsYXNzIG5hbWVzcGFjZVwiKSxcbiAgICBkb250SW5kZW50U3RhdGVtZW50czogL15ALiokfF50ZW1wbGF0ZSQvLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcIllFUyBOTyBOVUxMIE5pbCBuaWwgdHJ1ZSBmYWxzZSBudWxscHRyXCIpLFxuICAgIGlzUmVzZXJ2ZWRJZGVudGlmaWVyOiBjSXNSZXNlcnZlZElkZW50aWZpZXIsXG4gICAgaG9va3M6IHtcbiAgICAgIFwiI1wiOiBjcHBIb29rLFxuICAgICAgXCIqXCI6IHBvaW50ZXJIb29rLFxuICAgICAgXCJ1XCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiVVwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIkxcIjogY3BwMTFTdHJpbmdIb29rLFxuICAgICAgXCJSXCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiMFwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjFcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCIyXCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiM1wiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjRcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI1XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiNlwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjdcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI4XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiOVwiOiBjcHAxNExpdGVyYWwsXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSwgc3R5bGUpIHtcbiAgICAgICAgaWYgKHN0eWxlID09IFwidmFyaWFibGVcIiAmJiBzdHJlYW0ucGVlaygpID09IFwiKFwiICYmXG4gICAgICAgICAgICAoc3RhdGUucHJldlRva2VuID09IFwiO1wiIHx8IHN0YXRlLnByZXZUb2tlbiA9PSBudWxsIHx8XG4gICAgICAgICAgICAgc3RhdGUucHJldlRva2VuID09IFwifVwiKSAmJlxuICAgICAgICAgICAgY3BwTG9va3NMaWtlQ29uc3RydWN0b3Ioc3RyZWFtLmN1cnJlbnQoKSkpXG4gICAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICB9XG4gICAgfSxcbiAgICBuYW1lc3BhY2VTZXBhcmF0b3I6IFwiOjpcIixcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihcInRleHQveC1zcXVpcnJlbFwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcImJhc2UgYnJlYWsgY2xvbmUgY29udGludWUgY29uc3QgZGVmYXVsdCBkZWxldGUgZW51bSBleHRlbmRzIGZ1bmN0aW9uIGluIGNsYXNzXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBmb3JlYWNoIGxvY2FsIHJlc3VtZSByZXR1cm4gdGhpcyB0aHJvdyB0eXBlb2YgeWllbGQgY29uc3RydWN0b3IgaW5zdGFuY2VvZiBzdGF0aWNcIiksXG4gICAgdHlwZXM6IGNUeXBlcyxcbiAgICBibG9ja0tleXdvcmRzOiB3b3JkcyhcImNhc2UgY2F0Y2ggY2xhc3MgZWxzZSBmb3IgZm9yZWFjaCBpZiBzd2l0Y2ggdHJ5IHdoaWxlXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhcImZ1bmN0aW9uIGxvY2FsIGNsYXNzXCIpLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgbnVsbFwiKSxcbiAgICBob29rczoge1wiI1wiOiBjcHBIb29rfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIC8vIENleWxvbiBTdHJpbmdzIG5lZWQgdG8gZGVhbCB3aXRoIGludGVycG9sYXRpb25cbiAgdmFyIHN0cmluZ1Rva2VuaXplciA9IG51bGw7XG4gIGZ1bmN0aW9uIHRva2VuQ2V5bG9uU3RyaW5nKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoIWVzY2FwZWQgJiYgc3RyZWFtLm1hdGNoKCdcIicpICYmXG4gICAgICAgICAgICAgICh0eXBlID09IFwic2luZ2xlXCIgfHwgc3RyZWFtLm1hdGNoKCdcIlwiJykpKSB7XG4gICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVzY2FwZWQgJiYgc3RyZWFtLm1hdGNoKCdgYCcpKSB7XG4gICAgICAgICAgc3RyaW5nVG9rZW5pemVyID0gdG9rZW5DZXlsb25TdHJpbmcodHlwZSk7XG4gICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBuZXh0ID0gc3RyZWFtLm5leHQoKTtcbiAgICAgICAgZXNjYXBlZCA9IHR5cGUgPT0gXCJzaW5nbGVcIiAmJiAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZClcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gIH1cblxuICBkZWYoXCJ0ZXh0L3gtY2V5bG9uXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiYWJzdHJhY3RzIGFsaWFzIGFzc2VtYmx5IGFzc2VydCBhc3NpZ24gYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb250aW51ZSBkeW5hbWljIGVsc2VcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIGV4aXN0cyBleHRlbmRzIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGdpdmVuIGlmIGltcG9ydCBpbiBpbnRlcmZhY2UgaXMgbGV0IG1vZHVsZSBuZXdcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIG5vbmVtcHR5IG9iamVjdCBvZiBvdXQgb3V0ZXIgcGFja2FnZSByZXR1cm4gc2F0aXNmaWVzIHN1cGVyIHN3aXRjaCB0aGVuIHRoaXMgdGhyb3dcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIHRyeSB2YWx1ZSB2b2lkIHdoaWxlXCIpLFxuICAgIHR5cGVzOiBmdW5jdGlvbih3b3JkKSB7XG4gICAgICAgIC8vIEluIENleWxvbiBhbGwgaWRlbnRpZmllcnMgdGhhdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBhcmUgdHlwZXNcbiAgICAgICAgdmFyIGZpcnN0ID0gd29yZC5jaGFyQXQoMCk7XG4gICAgICAgIHJldHVybiAoZmlyc3QgPT09IGZpcnN0LnRvVXBwZXJDYXNlKCkgJiYgZmlyc3QgIT09IGZpcnN0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH0sXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJjYXNlIGNhdGNoIGNsYXNzIGR5bmFtaWMgZWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiBpZiBpbnRlcmZhY2UgbW9kdWxlIG5ldyBvYmplY3Qgc3dpdGNoIHRyeSB3aGlsZVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJjbGFzcyBkeW5hbWljIGZ1bmN0aW9uIGludGVyZmFjZSBtb2R1bGUgb2JqZWN0IHBhY2thZ2UgdmFsdWVcIiksXG4gICAgYnVpbHRpbjogd29yZHMoXCJhYnN0cmFjdCBhY3R1YWwgYWxpYXNlZCBhbm5vdGF0aW9uIGJ5IGRlZmF1bHQgZGVwcmVjYXRlZCBkb2MgZmluYWwgZm9ybWFsIGxhdGUgbGljZW5zZVwiICtcbiAgICAgICAgICAgICAgICAgICBcIiBuYXRpdmUgb3B0aW9uYWwgc2VhbGVkIHNlZSBzZXJpYWxpemFibGUgc2hhcmVkIHN1cHByZXNzV2FybmluZ3MgdGFnZ2VkIHRocm93cyB2YXJpYWJsZVwiKSxcbiAgICBpc1B1bmN0dWF0aW9uQ2hhcjogL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuYF0vLFxuICAgIGlzT3BlcmF0b3JDaGFyOiAvWytcXC0qJiU9PD4hP3xefjpcXC9dLyxcbiAgICBudW1iZXJTdGFydDogL1tcXGQjJF0vLFxuICAgIG51bWJlcjogL14oPzojW1xcZGEtZkEtRl9dK3xcXCRbMDFfXSt8W1xcZF9dK1trTUdUUG11bnBmXT98W1xcZF9dK1xcLltcXGRfXSsoPzpbZUVdWy0rXT9cXGQrfFtrTUdUUG11bnBmXXwpfCkvaSxcbiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgbnVsbCBsYXJnZXIgc21hbGxlciBlcXVhbCBlbXB0eSBmaW5pc2hlZFwiKSxcbiAgICBpbmRlbnRTd2l0Y2g6IGZhbHNlLFxuICAgIHN0eWxlRGVmczogZmFsc2UsXG4gICAgaG9va3M6IHtcbiAgICAgIFwiQFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgfSxcbiAgICAgICdcIic6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ2V5bG9uU3RyaW5nKHN0cmVhbS5tYXRjaCgnXCJcIicpID8gXCJ0cmlwbGVcIiA6IFwic2luZ2xlXCIpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICdgJzogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgIGlmICghc3RyaW5nVG9rZW5pemVyIHx8ICFzdHJlYW0ubWF0Y2goJ2AnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RyaW5nVG9rZW5pemVyO1xuICAgICAgICAgIHN0cmluZ1Rva2VuaXplciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgXCInXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXFx4YTEtXFx1ZmZmZl0vKTtcbiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihfc3RyZWFtLCBzdGF0ZSwgc3R5bGUpIHtcbiAgICAgICAgICBpZiAoKHN0eWxlID09IFwidmFyaWFibGVcIiB8fCBzdHlsZSA9PSBcInR5cGVcIikgJiZcbiAgICAgICAgICAgICAgc3RhdGUucHJldlRva2VuID09IFwiLlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtcbiAgICAgICAgZm9sZDogW1wiYnJhY2VcIiwgXCJpbXBvcnRcIl0sXG4gICAgICAgIGNsb3NlQnJhY2tldHM6IHt0cmlwbGVzOiAnXCInfVxuICAgIH1cbiAgfSk7XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpHQTtBQUNBO0FBQ0E7QUE2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBRkE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQVNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUF6REE7QUE0REE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFHQTtBQXBGQTtBQXdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3RkE7QUEvR0E7QUFDQTtBQStNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQU9BO0FBTUE7QUFNQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF2U0E7QUFDQTtBQUNBO0FBeVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBblVBO0FBdVVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFqQkE7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN1dBO0FBQ0E7QUFDQTtBQStXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBelhBO0FBNlhBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFBQTtBQUFBO0FBYkE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUF2QkE7QUF5QkE7QUFDQTtBQUFBO0FBQUE7QUFyQ0E7QUF3Q0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQUE7QUFBQTtBQXZCQTtBQTBCQTtBQUNBO0FBQ0E7QUFPQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFSQTtBQWpCQTtBQUNBO0FBNEJBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUpBO0FBUUE7QUFPQTtBQU5BO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBckJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUE4QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOURBO0FBQ0E7QUFnRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBM0JBO0FBNkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEzREE7QUE4REE7QUFDQTtBQUNBO0FBTUE7QUFHQTtBQUNBO0FBZUE7QUEyQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUF4REE7QUEyREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBVEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFmQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQXZCQTtBQXlCQTtBQUNBO0FBQUE7QUFBQTtBQXJDQTtBQXdDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBVkE7QUFDQTtBQWFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFsQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQXhCQTtBQTBCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFsREE7QUEzMkJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/clike/clike.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/css/css.js": -/*!**************************************************!*\ - !*** ../node_modules/codemirror/mode/css/css.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"css\", function (config, parserConfig) {\n var inline = parserConfig.inline;\n if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n var indentUnit = config.indentUnit,\n tokenHooks = parserConfig.tokenHooks,\n documentTypes = parserConfig.documentTypes || {},\n mediaTypes = parserConfig.mediaTypes || {},\n mediaFeatures = parserConfig.mediaFeatures || {},\n mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n propertyKeywords = parserConfig.propertyKeywords || {},\n nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n fontProperties = parserConfig.fontProperties || {},\n counterDescriptors = parserConfig.counterDescriptors || {},\n colorKeywords = parserConfig.colorKeywords || {},\n valueKeywords = parserConfig.valueKeywords || {},\n allowNested = parserConfig.allowNested,\n lineComment = parserConfig.lineComment,\n supportsAtComponent = parserConfig.supportsAtComponent === true;\n var type, override;\n\n function ret(style, tp) {\n type = tp;\n return style;\n } // Tokenizers\n\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n if (tokenHooks[ch]) {\n var result = tokenHooks[ch](stream, state);\n if (result !== false) return result;\n }\n\n if (ch == \"@\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"def\", stream.current());\n } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n return ret(null, \"compare\");\n } else if (ch == \"\\\"\" || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \"#\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"atom\", \"hash\");\n } else if (ch == \"!\") {\n stream.match(/^\\s*\\w*/);\n return ret(\"keyword\", \"important\");\n } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (ch === \"-\") {\n if (/[\\d.]/.test(stream.peek())) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (stream.match(/^-[\\w\\\\\\-]*/)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false)) return ret(\"variable-2\", \"variable-definition\");\n return ret(\"variable-2\", \"variable\");\n } else if (stream.match(/^\\w+-/)) {\n return ret(\"meta\", \"meta\");\n }\n } else if (/[,+>*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (stream.match(/[\\w-.]+(?=\\()/)) {\n if (/^(url(-prefix)?|domain|regexp)$/.test(stream.current().toLowerCase())) {\n state.tokenize = tokenParenthesized;\n }\n\n return ret(\"variable callee\", \"variable\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function (stream, state) {\n var escaped = false,\n ch;\n\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n\n escaped = !escaped && ch == \"\\\\\";\n }\n\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n\n if (!stream.match(/\\s*[\\\"\\')]/, false)) state.tokenize = tokenString(\")\");else state.tokenize = null;\n return ret(null, \"(\");\n } // Context management\n\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev) state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--) {\n state.context = state.context.prev;\n }\n\n return pass(type, stream, state);\n } // Parser\n\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word)) override = \"atom\";else if (colorKeywords.hasOwnProperty(word)) override = \"keyword\";else override = \"variable\";\n }\n\n var states = {};\n\n states.top = function (type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n\n return state.context.type;\n };\n\n states.block = function (type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = \"string-2\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override += \" error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function (type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function (type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n override += \" error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n\n return \"prop\";\n };\n\n states.propBlock = function (type, _stream, state) {\n if (type == \"}\") return popContext(state);\n\n if (type == \"word\") {\n override = \"property\";\n return \"maybeprop\";\n }\n\n return state.context.type;\n };\n\n states.parens = function (type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function (type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variable-3\";\n return state.context.type;\n }\n\n return pass(type, stream, state);\n };\n\n states.documentTypes = function (type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function (type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\") override = \"keyword\";else if (mediaTypes.hasOwnProperty(word)) override = \"attribute\";else if (mediaFeatures.hasOwnProperty(word)) override = \"property\";else if (mediaValueKeywords.hasOwnProperty(word)) override = \"keyword\";else if (propertyKeywords.hasOwnProperty(word)) override = \"property\";else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = \"string-2\";else if (valueKeywords.hasOwnProperty(word)) override = \"atom\";else if (colorKeywords.hasOwnProperty(word)) override = \"keyword\";else override = \"error\";\n }\n\n return state.context.type;\n };\n\n states.atComponentBlock = function (type, stream, state) {\n if (type == \"}\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\") override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function (type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function (type, stream, state) {\n if (type == \"{\") return pushContext(state, stream, \"restricted_atBlock\");\n\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function (type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n\n if (type == \"word\") {\n if (state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase()) || state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())) override = \"error\";else override = \"property\";\n return \"maybeprop\";\n }\n\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function (type, stream, state) {\n if (type == \"word\") {\n override = \"variable\";\n return \"keyframes\";\n }\n\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function (type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function (type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n startState: function startState(base) {\n return {\n tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", base || 0, null)\n };\n },\n token: function token(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n\n if (style && _typeof(style) == \"object\") {\n type = style[1];\n style = style[0];\n }\n\n override = style;\n if (type != \"comment\") state.state = states[state.state](type, stream, state);\n return override;\n },\n indent: function indent(state, textAfter) {\n var cx = state.context,\n ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" || cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") || ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - indentUnit);\n }\n }\n\n return indent;\n },\n electricChars: \"}\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: lineComment,\n fold: \"brace\"\n };\n });\n\n function keySet(array) {\n var keys = {};\n\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n\n return keys;\n }\n\n var documentTypes_ = [\"domain\", \"regexp\", \"url\", \"url-prefix\"],\n documentTypes = keySet(documentTypes_);\n var mediaTypes_ = [\"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\", \"tty\", \"tv\", \"embossed\"],\n mediaTypes = keySet(mediaTypes_);\n var mediaFeatures_ = [\"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\", \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\", \"min-device-height\", \"max-device-height\", \"aspect-ratio\", \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\", \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\", \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\", \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\", \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\", \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\", \"pointer\", \"any-pointer\", \"hover\", \"any-hover\"],\n mediaFeatures = keySet(mediaFeatures_);\n var mediaValueKeywords_ = [\"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\", \"interlace\", \"progressive\"],\n mediaValueKeywords = keySet(mediaValueKeywords_);\n var propertyKeywords_ = [\"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\", \"alignment-baseline\", \"anchor-point\", \"animation\", \"animation-delay\", \"animation-direction\", \"animation-duration\", \"animation-fill-mode\", \"animation-iteration-count\", \"animation-name\", \"animation-play-state\", \"animation-timing-function\", \"appearance\", \"azimuth\", \"backface-visibility\", \"background\", \"background-attachment\", \"background-blend-mode\", \"background-clip\", \"background-color\", \"background-image\", \"background-origin\", \"background-position\", \"background-repeat\", \"background-size\", \"baseline-shift\", \"binding\", \"bleed\", \"bookmark-label\", \"bookmark-level\", \"bookmark-state\", \"bookmark-target\", \"border\", \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\", \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\", \"border-collapse\", \"border-color\", \"border-image\", \"border-image-outset\", \"border-image-repeat\", \"border-image-slice\", \"border-image-source\", \"border-image-width\", \"border-left\", \"border-left-color\", \"border-left-style\", \"border-left-width\", \"border-radius\", \"border-right\", \"border-right-color\", \"border-right-style\", \"border-right-width\", \"border-spacing\", \"border-style\", \"border-top\", \"border-top-color\", \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\", \"border-top-width\", \"border-width\", \"bottom\", \"box-decoration-break\", \"box-shadow\", \"box-sizing\", \"break-after\", \"break-before\", \"break-inside\", \"caption-side\", \"caret-color\", \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\", \"column-fill\", \"column-gap\", \"column-rule\", \"column-rule-color\", \"column-rule-style\", \"column-rule-width\", \"column-span\", \"column-width\", \"columns\", \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\", \"cue-after\", \"cue-before\", \"cursor\", \"direction\", \"display\", \"dominant-baseline\", \"drop-initial-after-adjust\", \"drop-initial-after-align\", \"drop-initial-before-adjust\", \"drop-initial-before-align\", \"drop-initial-size\", \"drop-initial-value\", \"elevation\", \"empty-cells\", \"fit\", \"fit-position\", \"flex\", \"flex-basis\", \"flex-direction\", \"flex-flow\", \"flex-grow\", \"flex-shrink\", \"flex-wrap\", \"float\", \"float-offset\", \"flow-from\", \"flow-into\", \"font\", \"font-feature-settings\", \"font-family\", \"font-kerning\", \"font-language-override\", \"font-size\", \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-synthesis\", \"font-variant\", \"font-variant-alternates\", \"font-variant-caps\", \"font-variant-east-asian\", \"font-variant-ligatures\", \"font-variant-numeric\", \"font-variant-position\", \"font-weight\", \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\", \"grid-auto-rows\", \"grid-column\", \"grid-column-end\", \"grid-column-gap\", \"grid-column-start\", \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\", \"grid-row-start\", \"grid-template\", \"grid-template-areas\", \"grid-template-columns\", \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\", \"icon\", \"image-orientation\", \"image-rendering\", \"image-resolution\", \"inline-box-align\", \"justify-content\", \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\", \"line-break\", \"line-height\", \"line-stacking\", \"line-stacking-ruby\", \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\", \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marks\", \"marquee-direction\", \"marquee-loop\", \"marquee-play-count\", \"marquee-speed\", \"marquee-style\", \"max-height\", \"max-width\", \"min-height\", \"min-width\", \"mix-blend-mode\", \"move-to\", \"nav-down\", \"nav-index\", \"nav-left\", \"nav-right\", \"nav-up\", \"object-fit\", \"object-position\", \"opacity\", \"order\", \"orphans\", \"outline\", \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\", \"overflow\", \"overflow-style\", \"overflow-wrap\", \"overflow-x\", \"overflow-y\", \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\", \"page\", \"page-break-after\", \"page-break-before\", \"page-break-inside\", \"page-policy\", \"pause\", \"pause-after\", \"pause-before\", \"perspective\", \"perspective-origin\", \"pitch\", \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\", \"position\", \"presentation-level\", \"punctuation-trim\", \"quotes\", \"region-break-after\", \"region-break-before\", \"region-break-inside\", \"region-fragment\", \"rendering-intent\", \"resize\", \"rest\", \"rest-after\", \"rest-before\", \"richness\", \"right\", \"rotation\", \"rotation-point\", \"ruby-align\", \"ruby-overhang\", \"ruby-position\", \"ruby-span\", \"shape-image-threshold\", \"shape-inside\", \"shape-margin\", \"shape-outside\", \"size\", \"speak\", \"speak-as\", \"speak-header\", \"speak-numeral\", \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\", \"tab-size\", \"table-layout\", \"target\", \"target-name\", \"target-new\", \"target-position\", \"text-align\", \"text-align-last\", \"text-decoration\", \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\", \"text-decoration-style\", \"text-emphasis\", \"text-emphasis-color\", \"text-emphasis-position\", \"text-emphasis-style\", \"text-height\", \"text-indent\", \"text-justify\", \"text-outline\", \"text-overflow\", \"text-shadow\", \"text-size-adjust\", \"text-space-collapse\", \"text-transform\", \"text-underline-position\", \"text-wrap\", \"top\", \"transform\", \"transform-origin\", \"transform-style\", \"transition\", \"transition-delay\", \"transition-duration\", \"transition-property\", \"transition-timing-function\", \"unicode-bidi\", \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\", \"voice-duration\", \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\", \"voice-stress\", \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\", \"will-change\", \"word-break\", \"word-spacing\", \"word-wrap\", \"z-index\", // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\", \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\", \"color-interpolation\", \"color-interpolation-filters\", \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\", \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"shape-rendering\", \"stroke\", \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\", \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\", \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\"],\n propertyKeywords = keySet(propertyKeywords_);\n var nonStandardPropertyKeywords_ = [\"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\", \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\", \"scrollbar-3d-light-color\", \"scrollbar-track-color\", \"shape-inside\", \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\", \"searchfield-results-decoration\", \"zoom\"],\n nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n var fontProperties_ = [\"font-family\", \"src\", \"unicode-range\", \"font-variant\", \"font-feature-settings\", \"font-stretch\", \"font-weight\", \"font-style\"],\n fontProperties = keySet(fontProperties_);\n var counterDescriptors_ = [\"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\", \"speak-as\", \"suffix\", \"symbols\", \"system\"],\n counterDescriptors = keySet(counterDescriptors_);\n var colorKeywords_ = [\"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\", \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\", \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\", \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\", \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\", \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\", \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\", \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\", \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\", \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\", \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\", \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\", \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\", \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\", \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\", \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\", \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\", \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\", \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\", \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\", \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\", \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\", \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\", \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\", \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\", \"whitesmoke\", \"yellow\", \"yellowgreen\"],\n colorKeywords = keySet(colorKeywords_);\n var valueKeywords_ = [\"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\", \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\", \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\", \"avoid-region\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\", \"bengali\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\", \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\", \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\", \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\", \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\", \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\", \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\", \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\", \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\", \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\", \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\", \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\", \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"graytext\", \"grid\", \"groove\", \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\", \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\", \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\", \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\", \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\", \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\", \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\", \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"match\", \"matrix\", \"matrix3d\", \"media-controls-background\", \"media-current-time-display\", \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\", \"media-return-to-realtime-button\", \"media-rewind-button\", \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\", \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\", \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\", \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\", \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\", \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiply\", \"myanmar\", \"n-resize\", \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\", \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\", \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\", \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\", \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\", \"sidama\", \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\", \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\", \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"sub\", \"subpixel-antialiased\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\", \"tamil\", \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\", \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\", \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\", \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unset\", \"up\", \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\", \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"visible\", \"visibleFill\", \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"],\n valueKeywords = keySet(valueKeywords_);\n var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_).concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_);\n CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n function tokenCComment(stream, state) {\n var maybeEnd = false,\n ch;\n\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n\n maybeEnd = ch == \"*\";\n }\n\n return [\"comment\", \"comment\"];\n }\n\n CodeMirror.defineMIME(\"text/css\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function _(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\"\n });\n CodeMirror.defineMIME(\"text/x-scss\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function _(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function _(stream) {\n if (stream.match(/\\s*\\{/, false)) return [null, null];\n return false;\n },\n \"$\": function $(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false)) return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"#\": function _(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n },\n name: \"css\",\n helperType: \"scss\"\n });\n CodeMirror.defineMIME(\"text/x-less\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function _(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function _(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false)) return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"&\": function _() {\n return [\"atom\", \"atom\"];\n }\n },\n name: \"css\",\n helperType: \"less\"\n });\n CodeMirror.defineMIME(\"text/x-gss\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function _(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\",\n helperType: \"gss\"\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9jc3MvY3NzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvY3NzL2Nzcy5qcz8yMzY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiY3NzXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gIHZhciBpbmxpbmUgPSBwYXJzZXJDb25maWcuaW5saW5lXG4gIGlmICghcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMpIHBhcnNlckNvbmZpZyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoXCJ0ZXh0L2Nzc1wiKTtcblxuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LFxuICAgICAgdG9rZW5Ib29rcyA9IHBhcnNlckNvbmZpZy50b2tlbkhvb2tzLFxuICAgICAgZG9jdW1lbnRUeXBlcyA9IHBhcnNlckNvbmZpZy5kb2N1bWVudFR5cGVzIHx8IHt9LFxuICAgICAgbWVkaWFUeXBlcyA9IHBhcnNlckNvbmZpZy5tZWRpYVR5cGVzIHx8IHt9LFxuICAgICAgbWVkaWFGZWF0dXJlcyA9IHBhcnNlckNvbmZpZy5tZWRpYUZlYXR1cmVzIHx8IHt9LFxuICAgICAgbWVkaWFWYWx1ZUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLm1lZGlhVmFsdWVLZXl3b3JkcyB8fCB7fSxcbiAgICAgIHByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcucHJvcGVydHlLZXl3b3JkcyB8fCB7fSxcbiAgICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgfHwge30sXG4gICAgICBmb250UHJvcGVydGllcyA9IHBhcnNlckNvbmZpZy5mb250UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvdW50ZXJEZXNjcmlwdG9ycyA9IHBhcnNlckNvbmZpZy5jb3VudGVyRGVzY3JpcHRvcnMgfHwge30sXG4gICAgICBjb2xvcktleXdvcmRzID0gcGFyc2VyQ29uZmlnLmNvbG9yS2V5d29yZHMgfHwge30sXG4gICAgICB2YWx1ZUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnZhbHVlS2V5d29yZHMgfHwge30sXG4gICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZCxcbiAgICAgIGxpbmVDb21tZW50ID0gcGFyc2VyQ29uZmlnLmxpbmVDb21tZW50LFxuICAgICAgc3VwcG9ydHNBdENvbXBvbmVudCA9IHBhcnNlckNvbmZpZy5zdXBwb3J0c0F0Q29tcG9uZW50ID09PSB0cnVlO1xuXG4gIHZhciB0eXBlLCBvdmVycmlkZTtcbiAgZnVuY3Rpb24gcmV0KHN0eWxlLCB0cCkgeyB0eXBlID0gdHA7IHJldHVybiBzdHlsZTsgfVxuXG4gIC8vIFRva2VuaXplcnNcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKHRva2VuSG9va3NbY2hdKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdG9rZW5Ib29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiQFwiKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXS8pO1xuICAgICAgcmV0dXJuIHJldChcImRlZlwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiIHx8IChjaCA9PSBcIn5cIiB8fCBjaCA9PSBcInxcIikgJiYgc3RyZWFtLmVhdChcIj1cIikpIHtcbiAgICAgIHJldHVybiByZXQobnVsbCwgXCJjb21wYXJlXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJcXFwiXCIgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1dLyk7XG4gICAgICByZXR1cm4gcmV0KFwiYXRvbVwiLCBcImhhc2hcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiFcIikge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eXFxzKlxcdyovKTtcbiAgICAgIHJldHVybiByZXQoXCJrZXl3b3JkXCIsIFwiaW1wb3J0YW50XCIpO1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkgfHwgY2ggPT0gXCIuXCIgJiYgc3RyZWFtLmVhdCgvXFxkLykpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy4lXS8pO1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcInVuaXRcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCItXCIpIHtcbiAgICAgIGlmICgvW1xcZC5dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy4lXS8pO1xuICAgICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwidW5pdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eLVtcXHdcXFxcXFwtXSovKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXS8pO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCIpO1xuICAgICAgICByZXR1cm4gcmV0KFwidmFyaWFibGUtMlwiLCBcInZhcmlhYmxlXCIpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cXHcrLS8pKSB7XG4gICAgICAgIHJldHVybiByZXQoXCJtZXRhXCIsIFwibWV0YVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9bLCs+KlxcL10vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIFwic2VsZWN0LW9wXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKC9eLT9bX2Etel1bX2EtejAtOS1dKi9pKSkge1xuICAgICAgcmV0dXJuIHJldChcInF1YWxpZmllclwiLCBcInF1YWxpZmllclwiKTtcbiAgICB9IGVsc2UgaWYgKC9bOjt7fVxcW1xcXVxcKFxcKV0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvW1xcdy0uXSsoPz1cXCgpLykpIHtcbiAgICAgIGlmICgvXih1cmwoLXByZWZpeCk/fGRvbWFpbnxyZWdleHApJC8udGVzdChzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlIGNhbGxlZVwiLCBcInZhcmlhYmxlXCIpO1xuICAgIH0gZWxzZSBpZiAoL1tcXHdcXFxcXFwtXS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1dLyk7XG4gICAgICByZXR1cm4gcmV0KFwicHJvcGVydHlcIiwgXCJ3b3JkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgaWYgKHF1b3RlID09IFwiKVwiKSBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBxdW90ZSB8fCAhZXNjYXBlZCAmJiBxdW90ZSAhPSBcIilcIikgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJldChcInN0cmluZ1wiLCBcInN0cmluZ1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5QYXJlbnRoZXNpemVkKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzdHJlYW0ubmV4dCgpOyAvLyBNdXN0IGJlICcoJ1xuICAgIGlmICghc3RyZWFtLm1hdGNoKC9cXHMqW1xcXCJcXCcpXS8sIGZhbHNlKSlcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoXCIpXCIpO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICByZXR1cm4gcmV0KG51bGwsIFwiKFwiKTtcbiAgfVxuXG4gIC8vIENvbnRleHQgbWFuYWdlbWVudFxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHlwZSwgaW5kZW50LCBwcmV2KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmluZGVudCA9IGluZGVudDtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSwgaW5kZW50KSB7XG4gICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHR5cGUsIHN0cmVhbS5pbmRlbnRhdGlvbigpICsgKGluZGVudCA9PT0gZmFsc2UgPyAwIDogaW5kZW50VW5pdCksIHN0YXRlLmNvbnRleHQpO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0LnByZXYpXG4gICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7XG4gICAgZm9yICh2YXIgaSA9IG4gfHwgMTsgaSA+IDA7IGktLSlcbiAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICAvLyBQYXJzZXJcblxuICBmdW5jdGlvbiB3b3JkQXNWYWx1ZShzdHJlYW0pIHtcbiAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgIG92ZXJyaWRlID0gXCJrZXl3b3JkXCI7XG4gICAgZWxzZVxuICAgICAgb3ZlcnJpZGUgPSBcInZhcmlhYmxlXCI7XG4gIH1cblxuICB2YXIgc3RhdGVzID0ge307XG5cbiAgc3RhdGVzLnRvcCA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIntcIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwifVwiICYmIHN0YXRlLmNvbnRleHQucHJldikge1xuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNBdENvbXBvbmVudCAmJiAvQGNvbXBvbmVudC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0Q29tcG9uZW50QmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICgvXkAoLW1vei0pP2RvY3VtZW50JC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImRvY3VtZW50VHlwZXNcIik7XG4gICAgfSBlbHNlIGlmICgvXkAobWVkaWF8c3VwcG9ydHN8KC1tb3otKT9kb2N1bWVudHxpbXBvcnQpJC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0QmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICgvXkAoZm9udC1mYWNlfGNvdW50ZXItc3R5bGUpL2kudGVzdCh0eXBlKSkge1xuICAgICAgc3RhdGUuc3RhdGVBcmcgPSB0eXBlO1xuICAgICAgcmV0dXJuIFwicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZVwiO1xuICAgIH0gZWxzZSBpZiAoL15AKC0obW96fG1zfG98d2Via2l0KS0pP2tleWZyYW1lcyQvaS50ZXN0KHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJrZXlmcmFtZXNcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgdHlwZS5jaGFyQXQoMCkgPT0gXCJAXCIpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0XCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc2hcIikge1xuICAgICAgb3ZlcnJpZGUgPSBcImJ1aWx0aW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiBcIm1heWJlcHJvcFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImludGVycG9sYXRpb25cIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiaW50ZXJwb2xhdGlvblwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIHJldHVybiBcInBzZXVkb1wiO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQgJiYgdHlwZSA9PSBcIihcIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicGFyZW5zXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICB9O1xuXG4gIHN0YXRlcy5ibG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9IGVsc2UgaWYgKG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICBvdmVycmlkZSA9IFwic3RyaW5nLTJcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkKSB7XG4gICAgICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXFxzKjooPzpcXHN8JCkvLCBmYWxzZSkgPyBcInByb3BlcnR5XCIgOiBcInRhZ1wiO1xuICAgICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3ZlcnJpZGUgKz0gXCIgZXJyb3JcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwibWV0YVwiKSB7XG4gICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgIH0gZWxzZSBpZiAoIWFsbG93TmVzdGVkICYmICh0eXBlID09IFwiaGFzaFwiIHx8IHR5cGUgPT0gXCJxdWFsaWZpZXJcIikpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJlcnJvclwiO1xuICAgICAgcmV0dXJuIFwiYmxvY2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlcy50b3AodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRlcy5tYXliZXByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcInByb3BcIik7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiAmJiBhbGxvd05lc3RlZCkgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicHJvcEJsb2NrXCIpO1xuICAgIGlmICh0eXBlID09IFwifVwiIHx8IHR5cGUgPT0gXCJ7XCIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJwYXJlbnNcIik7XG5cbiAgICBpZiAodHlwZSA9PSBcImhhc2hcIiAmJiAhL14jKFswLTlhLWZBLWZdezMsNH18WzAtOWEtZkEtZl17Nn18WzAtOWEtZkEtZl17OH0pJC8udGVzdChzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgb3ZlcnJpZGUgKz0gXCIgZXJyb3JcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHdvcmRBc1ZhbHVlKHN0cmVhbSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiaW50ZXJwb2xhdGlvblwiKSB7XG4gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJpbnRlcnBvbGF0aW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJwcm9wXCI7XG4gIH07XG5cbiAgc3RhdGVzLnByb3BCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikgeyBvdmVycmlkZSA9IFwicHJvcGVydHlcIjsgcmV0dXJuIFwibWF5YmVwcm9wXCI7IH1cbiAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICB9O1xuXG4gIHN0YXRlcy5wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIgfHwgdHlwZSA9PSBcIn1cIikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCIpXCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicGFyZW5zXCIpO1xuICAgIGlmICh0eXBlID09IFwiaW50ZXJwb2xhdGlvblwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJpbnRlcnBvbGF0aW9uXCIpO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB3b3JkQXNWYWx1ZShzdHJlYW0pO1xuICAgIHJldHVybiBcInBhcmVuc1wiO1xuICB9O1xuXG4gIHN0YXRlcy5wc2V1ZG8gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJtZXRhXCIpIHJldHVybiBcInBzZXVkb1wiO1xuXG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfTtcblxuICBzdGF0ZXMuZG9jdW1lbnRUeXBlcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIiAmJiBkb2N1bWVudFR5cGVzLmhhc093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkpKSB7XG4gICAgICBvdmVycmlkZSA9IFwidGFnXCI7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJhdEJsb2NrX3BhcmVuc1wiKTtcbiAgICBpZiAodHlwZSA9PSBcIn1cIiB8fCB0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gXCJibG9ja1wiIDogXCJ0b3BcIik7XG5cbiAgICBpZiAodHlwZSA9PSBcImludGVycG9sYXRpb25cIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiaW50ZXJwb2xhdGlvblwiKTtcblxuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh3b3JkID09IFwib25seVwiIHx8IHdvcmQgPT0gXCJub3RcIiB8fCB3b3JkID09IFwiYW5kXCIgfHwgd29yZCA9PSBcIm9yXCIpXG4gICAgICAgIG92ZXJyaWRlID0gXCJrZXl3b3JkXCI7XG4gICAgICBlbHNlIGlmIChtZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwiYXR0cmlidXRlXCI7XG4gICAgICBlbHNlIGlmIChtZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKG1lZGlhVmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgICAgb3ZlcnJpZGUgPSBcImtleXdvcmRcIjtcbiAgICAgIGVsc2UgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgZWxzZSBpZiAobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwic3RyaW5nLTJcIjtcbiAgICAgIGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgICBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwia2V5d29yZFwiO1xuICAgICAgZWxzZVxuICAgICAgICBvdmVycmlkZSA9IFwiZXJyb3JcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTtcbiAgfTtcblxuICBzdGF0ZXMuYXRDb21wb25lbnRCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIilcbiAgICAgIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICh0eXBlID09IFwie1wiKVxuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gXCJibG9ja1wiIDogXCJ0b3BcIiwgZmFsc2UpO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKVxuICAgICAgb3ZlcnJpZGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTtcbiAgfTtcblxuICBzdGF0ZXMuYXRCbG9ja19wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIpXCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiB8fCB0eXBlID09IFwifVwiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTtcbiAgICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpXG4gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJyZXN0cmljdGVkX2F0QmxvY2tcIik7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIgJiYgc3RhdGUuc3RhdGVBcmcgPT0gXCJAY291bnRlci1zdHlsZVwiKSB7XG4gICAgICBvdmVycmlkZSA9IFwidmFyaWFibGVcIjtcbiAgICAgIHJldHVybiBcInJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgc3RhdGUuc3RhdGVBcmcgPSBudWxsO1xuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgaWYgKChzdGF0ZS5zdGF0ZUFyZyA9PSBcIkBmb250LWZhY2VcIiAmJiAhZm9udFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkgfHxcbiAgICAgICAgICAoc3RhdGUuc3RhdGVBcmcgPT0gXCJAY291bnRlci1zdHlsZVwiICYmICFjb3VudGVyRGVzY3JpcHRvcnMuaGFzT3duUHJvcGVydHkoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJlcnJvclwiO1xuICAgICAgZWxzZVxuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIHJldHVybiBcIm1heWJlcHJvcFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJyZXN0cmljdGVkX2F0QmxvY2tcIjtcbiAgfTtcblxuICBzdGF0ZXMua2V5ZnJhbWVzID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7IG92ZXJyaWRlID0gXCJ2YXJpYWJsZVwiOyByZXR1cm4gXCJrZXlmcmFtZXNcIjsgfVxuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJ0b3BcIik7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLmF0ID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIgfHwgdHlwZSA9PSBcIn1cIikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIG92ZXJyaWRlID0gXCJ0YWdcIjtcbiAgICBlbHNlIGlmICh0eXBlID09IFwiaGFzaFwiKSBvdmVycmlkZSA9IFwiYnVpbHRpblwiO1xuICAgIHJldHVybiBcImF0XCI7XG4gIH07XG5cbiAgc3RhdGVzLmludGVycG9sYXRpb24gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiB8fCB0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikgb3ZlcnJpZGUgPSBcInZhcmlhYmxlXCI7XG4gICAgZWxzZSBpZiAodHlwZSAhPSBcInZhcmlhYmxlXCIgJiYgdHlwZSAhPSBcIihcIiAmJiB0eXBlICE9IFwiKVwiKSBvdmVycmlkZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gXCJpbnRlcnBvbGF0aW9uXCI7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZTogaW5saW5lID8gXCJibG9ja1wiIDogXCJ0b3BcIixcbiAgICAgICAgICAgICAgc3RhdGVBcmc6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KGlubGluZSA/IFwiYmxvY2tcIiA6IFwidG9wXCIsIGJhc2UgfHwgMCwgbnVsbCl9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZSAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0eXBlID0gc3R5bGVbMV07XG4gICAgICAgIHN0eWxlID0gc3R5bGVbMF07XG4gICAgICB9XG4gICAgICBvdmVycmlkZSA9IHN0eWxlO1xuICAgICAgaWYgKHR5cGUgIT0gXCJjb21tZW50XCIpXG4gICAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0YXRlLnN0YXRlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBvdmVycmlkZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgdmFyIGluZGVudCA9IGN4LmluZGVudDtcbiAgICAgIGlmIChjeC50eXBlID09IFwicHJvcFwiICYmIChjaCA9PSBcIn1cIiB8fCBjaCA9PSBcIilcIikpIGN4ID0gY3gucHJldjtcbiAgICAgIGlmIChjeC5wcmV2KSB7XG4gICAgICAgIGlmIChjaCA9PSBcIn1cIiAmJiAoY3gudHlwZSA9PSBcImJsb2NrXCIgfHwgY3gudHlwZSA9PSBcInRvcFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN4LnR5cGUgPT0gXCJpbnRlcnBvbGF0aW9uXCIgfHwgY3gudHlwZSA9PSBcInJlc3RyaWN0ZWRfYXRCbG9ja1wiKSkge1xuICAgICAgICAgIC8vIFJlc3VtZSBpbmRlbnRhdGlvbiBmcm9tIHBhcmVudCBjb250ZXh0LlxuICAgICAgICAgIGN4ID0gY3gucHJldjtcbiAgICAgICAgICBpbmRlbnQgPSBjeC5pbmRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIpXCIgJiYgKGN4LnR5cGUgPT0gXCJwYXJlbnNcIiB8fCBjeC50eXBlID09IFwiYXRCbG9ja19wYXJlbnNcIikgfHxcbiAgICAgICAgICAgIGNoID09IFwie1wiICYmIChjeC50eXBlID09IFwiYXRcIiB8fCBjeC50eXBlID09IFwiYXRCbG9ja1wiKSkge1xuICAgICAgICAgIC8vIERlZGVudCByZWxhdGl2ZSB0byBjdXJyZW50IGNvbnRleHQuXG4gICAgICAgICAgaW5kZW50ID0gTWF0aC5tYXgoMCwgY3guaW5kZW50IC0gaW5kZW50VW5pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgfSxcblxuICAgIGVsZWN0cmljQ2hhcnM6IFwifVwiLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCIsXG4gICAgYmxvY2tDb21tZW50Q29udGludWU6IFwiICogXCIsXG4gICAgbGluZUNvbW1lbnQ6IGxpbmVDb21tZW50LFxuICAgIGZvbGQ6IFwiYnJhY2VcIlxuICB9O1xufSk7XG5cbiAgZnVuY3Rpb24ga2V5U2V0KGFycmF5KSB7XG4gICAgdmFyIGtleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBrZXlzW2FycmF5W2ldLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICB2YXIgZG9jdW1lbnRUeXBlc18gPSBbXG4gICAgXCJkb21haW5cIiwgXCJyZWdleHBcIiwgXCJ1cmxcIiwgXCJ1cmwtcHJlZml4XCJcbiAgXSwgZG9jdW1lbnRUeXBlcyA9IGtleVNldChkb2N1bWVudFR5cGVzXyk7XG5cbiAgdmFyIG1lZGlhVHlwZXNfID0gW1xuICAgIFwiYWxsXCIsIFwiYXVyYWxcIiwgXCJicmFpbGxlXCIsIFwiaGFuZGhlbGRcIiwgXCJwcmludFwiLCBcInByb2plY3Rpb25cIiwgXCJzY3JlZW5cIixcbiAgICBcInR0eVwiLCBcInR2XCIsIFwiZW1ib3NzZWRcIlxuICBdLCBtZWRpYVR5cGVzID0ga2V5U2V0KG1lZGlhVHlwZXNfKTtcblxuICB2YXIgbWVkaWFGZWF0dXJlc18gPSBbXG4gICAgXCJ3aWR0aFwiLCBcIm1pbi13aWR0aFwiLCBcIm1heC13aWR0aFwiLCBcImhlaWdodFwiLCBcIm1pbi1oZWlnaHRcIiwgXCJtYXgtaGVpZ2h0XCIsXG4gICAgXCJkZXZpY2Utd2lkdGhcIiwgXCJtaW4tZGV2aWNlLXdpZHRoXCIsIFwibWF4LWRldmljZS13aWR0aFwiLCBcImRldmljZS1oZWlnaHRcIixcbiAgICBcIm1pbi1kZXZpY2UtaGVpZ2h0XCIsIFwibWF4LWRldmljZS1oZWlnaHRcIiwgXCJhc3BlY3QtcmF0aW9cIixcbiAgICBcIm1pbi1hc3BlY3QtcmF0aW9cIiwgXCJtYXgtYXNwZWN0LXJhdGlvXCIsIFwiZGV2aWNlLWFzcGVjdC1yYXRpb1wiLFxuICAgIFwibWluLWRldmljZS1hc3BlY3QtcmF0aW9cIiwgXCJtYXgtZGV2aWNlLWFzcGVjdC1yYXRpb1wiLCBcImNvbG9yXCIsIFwibWluLWNvbG9yXCIsXG4gICAgXCJtYXgtY29sb3JcIiwgXCJjb2xvci1pbmRleFwiLCBcIm1pbi1jb2xvci1pbmRleFwiLCBcIm1heC1jb2xvci1pbmRleFwiLFxuICAgIFwibW9ub2Nocm9tZVwiLCBcIm1pbi1tb25vY2hyb21lXCIsIFwibWF4LW1vbm9jaHJvbWVcIiwgXCJyZXNvbHV0aW9uXCIsXG4gICAgXCJtaW4tcmVzb2x1dGlvblwiLCBcIm1heC1yZXNvbHV0aW9uXCIsIFwic2NhblwiLCBcImdyaWRcIiwgXCJvcmllbnRhdGlvblwiLFxuICAgIFwiZGV2aWNlLXBpeGVsLXJhdGlvXCIsIFwibWluLWRldmljZS1waXhlbC1yYXRpb1wiLCBcIm1heC1kZXZpY2UtcGl4ZWwtcmF0aW9cIixcbiAgICBcInBvaW50ZXJcIiwgXCJhbnktcG9pbnRlclwiLCBcImhvdmVyXCIsIFwiYW55LWhvdmVyXCJcbiAgXSwgbWVkaWFGZWF0dXJlcyA9IGtleVNldChtZWRpYUZlYXR1cmVzXyk7XG5cbiAgdmFyIG1lZGlhVmFsdWVLZXl3b3Jkc18gPSBbXG4gICAgXCJsYW5kc2NhcGVcIiwgXCJwb3J0cmFpdFwiLCBcIm5vbmVcIiwgXCJjb2Fyc2VcIiwgXCJmaW5lXCIsIFwib24tZGVtYW5kXCIsIFwiaG92ZXJcIixcbiAgICBcImludGVybGFjZVwiLCBcInByb2dyZXNzaXZlXCJcbiAgXSwgbWVkaWFWYWx1ZUtleXdvcmRzID0ga2V5U2V0KG1lZGlhVmFsdWVLZXl3b3Jkc18pO1xuXG4gIHZhciBwcm9wZXJ0eUtleXdvcmRzXyA9IFtcbiAgICBcImFsaWduLWNvbnRlbnRcIiwgXCJhbGlnbi1pdGVtc1wiLCBcImFsaWduLXNlbGZcIiwgXCJhbGlnbm1lbnQtYWRqdXN0XCIsXG4gICAgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbmNob3ItcG9pbnRcIiwgXCJhbmltYXRpb25cIiwgXCJhbmltYXRpb24tZGVsYXlcIixcbiAgICBcImFuaW1hdGlvbi1kaXJlY3Rpb25cIiwgXCJhbmltYXRpb24tZHVyYXRpb25cIiwgXCJhbmltYXRpb24tZmlsbC1tb2RlXCIsXG4gICAgXCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50XCIsIFwiYW5pbWF0aW9uLW5hbWVcIiwgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiLFxuICAgIFwiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvblwiLCBcImFwcGVhcmFuY2VcIiwgXCJhemltdXRoXCIsIFwiYmFja2ZhY2UtdmlzaWJpbGl0eVwiLFxuICAgIFwiYmFja2dyb3VuZFwiLCBcImJhY2tncm91bmQtYXR0YWNobWVudFwiLCBcImJhY2tncm91bmQtYmxlbmQtbW9kZVwiLCBcImJhY2tncm91bmQtY2xpcFwiLFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLCBcImJhY2tncm91bmQtaW1hZ2VcIiwgXCJiYWNrZ3JvdW5kLW9yaWdpblwiLCBcImJhY2tncm91bmQtcG9zaXRpb25cIixcbiAgICBcImJhY2tncm91bmQtcmVwZWF0XCIsIFwiYmFja2dyb3VuZC1zaXplXCIsIFwiYmFzZWxpbmUtc2hpZnRcIiwgXCJiaW5kaW5nXCIsXG4gICAgXCJibGVlZFwiLCBcImJvb2ttYXJrLWxhYmVsXCIsIFwiYm9va21hcmstbGV2ZWxcIiwgXCJib29rbWFyay1zdGF0ZVwiLFxuICAgIFwiYm9va21hcmstdGFyZ2V0XCIsIFwiYm9yZGVyXCIsIFwiYm9yZGVyLWJvdHRvbVwiLCBcImJvcmRlci1ib3R0b20tY29sb3JcIixcbiAgICBcImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXNcIiwgXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLFxuICAgIFwiYm9yZGVyLWJvdHRvbS1zdHlsZVwiLCBcImJvcmRlci1ib3R0b20td2lkdGhcIiwgXCJib3JkZXItY29sbGFwc2VcIixcbiAgICBcImJvcmRlci1jb2xvclwiLCBcImJvcmRlci1pbWFnZVwiLCBcImJvcmRlci1pbWFnZS1vdXRzZXRcIixcbiAgICBcImJvcmRlci1pbWFnZS1yZXBlYXRcIiwgXCJib3JkZXItaW1hZ2Utc2xpY2VcIiwgXCJib3JkZXItaW1hZ2Utc291cmNlXCIsXG4gICAgXCJib3JkZXItaW1hZ2Utd2lkdGhcIiwgXCJib3JkZXItbGVmdFwiLCBcImJvcmRlci1sZWZ0LWNvbG9yXCIsXG4gICAgXCJib3JkZXItbGVmdC1zdHlsZVwiLCBcImJvcmRlci1sZWZ0LXdpZHRoXCIsIFwiYm9yZGVyLXJhZGl1c1wiLCBcImJvcmRlci1yaWdodFwiLFxuICAgIFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsIFwiYm9yZGVyLXJpZ2h0LXN0eWxlXCIsIFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCIsXG4gICAgXCJib3JkZXItc3BhY2luZ1wiLCBcImJvcmRlci1zdHlsZVwiLCBcImJvcmRlci10b3BcIiwgXCJib3JkZXItdG9wLWNvbG9yXCIsXG4gICAgXCJib3JkZXItdG9wLWxlZnQtcmFkaXVzXCIsIFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIiwgXCJib3JkZXItdG9wLXN0eWxlXCIsXG4gICAgXCJib3JkZXItdG9wLXdpZHRoXCIsIFwiYm9yZGVyLXdpZHRoXCIsIFwiYm90dG9tXCIsIFwiYm94LWRlY29yYXRpb24tYnJlYWtcIixcbiAgICBcImJveC1zaGFkb3dcIiwgXCJib3gtc2l6aW5nXCIsIFwiYnJlYWstYWZ0ZXJcIiwgXCJicmVhay1iZWZvcmVcIiwgXCJicmVhay1pbnNpZGVcIixcbiAgICBcImNhcHRpb24tc2lkZVwiLCBcImNhcmV0LWNvbG9yXCIsIFwiY2xlYXJcIiwgXCJjbGlwXCIsIFwiY29sb3JcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sdW1uLWNvdW50XCIsXG4gICAgXCJjb2x1bW4tZmlsbFwiLCBcImNvbHVtbi1nYXBcIiwgXCJjb2x1bW4tcnVsZVwiLCBcImNvbHVtbi1ydWxlLWNvbG9yXCIsXG4gICAgXCJjb2x1bW4tcnVsZS1zdHlsZVwiLCBcImNvbHVtbi1ydWxlLXdpZHRoXCIsIFwiY29sdW1uLXNwYW5cIiwgXCJjb2x1bW4td2lkdGhcIixcbiAgICBcImNvbHVtbnNcIiwgXCJjb250ZW50XCIsIFwiY291bnRlci1pbmNyZW1lbnRcIiwgXCJjb3VudGVyLXJlc2V0XCIsIFwiY3JvcFwiLCBcImN1ZVwiLFxuICAgIFwiY3VlLWFmdGVyXCIsIFwiY3VlLWJlZm9yZVwiLCBcImN1cnNvclwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIixcbiAgICBcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiZHJvcC1pbml0aWFsLWFmdGVyLWFkanVzdFwiLFxuICAgIFwiZHJvcC1pbml0aWFsLWFmdGVyLWFsaWduXCIsIFwiZHJvcC1pbml0aWFsLWJlZm9yZS1hZGp1c3RcIixcbiAgICBcImRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ25cIiwgXCJkcm9wLWluaXRpYWwtc2l6ZVwiLCBcImRyb3AtaW5pdGlhbC12YWx1ZVwiLFxuICAgIFwiZWxldmF0aW9uXCIsIFwiZW1wdHktY2VsbHNcIiwgXCJmaXRcIiwgXCJmaXQtcG9zaXRpb25cIiwgXCJmbGV4XCIsIFwiZmxleC1iYXNpc1wiLFxuICAgIFwiZmxleC1kaXJlY3Rpb25cIiwgXCJmbGV4LWZsb3dcIiwgXCJmbGV4LWdyb3dcIiwgXCJmbGV4LXNocmlua1wiLCBcImZsZXgtd3JhcFwiLFxuICAgIFwiZmxvYXRcIiwgXCJmbG9hdC1vZmZzZXRcIiwgXCJmbG93LWZyb21cIiwgXCJmbG93LWludG9cIiwgXCJmb250XCIsIFwiZm9udC1mZWF0dXJlLXNldHRpbmdzXCIsXG4gICAgXCJmb250LWZhbWlseVwiLCBcImZvbnQta2VybmluZ1wiLCBcImZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGVcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsXG4gICAgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC1zeW50aGVzaXNcIiwgXCJmb250LXZhcmlhbnRcIixcbiAgICBcImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzXCIsIFwiZm9udC12YXJpYW50LWNhcHNcIiwgXCJmb250LXZhcmlhbnQtZWFzdC1hc2lhblwiLFxuICAgIFwiZm9udC12YXJpYW50LWxpZ2F0dXJlc1wiLCBcImZvbnQtdmFyaWFudC1udW1lcmljXCIsIFwiZm9udC12YXJpYW50LXBvc2l0aW9uXCIsXG4gICAgXCJmb250LXdlaWdodFwiLCBcImdyaWRcIiwgXCJncmlkLWFyZWFcIiwgXCJncmlkLWF1dG8tY29sdW1uc1wiLCBcImdyaWQtYXV0by1mbG93XCIsXG4gICAgXCJncmlkLWF1dG8tcm93c1wiLCBcImdyaWQtY29sdW1uXCIsIFwiZ3JpZC1jb2x1bW4tZW5kXCIsIFwiZ3JpZC1jb2x1bW4tZ2FwXCIsXG4gICAgXCJncmlkLWNvbHVtbi1zdGFydFwiLCBcImdyaWQtZ2FwXCIsIFwiZ3JpZC1yb3dcIiwgXCJncmlkLXJvdy1lbmRcIiwgXCJncmlkLXJvdy1nYXBcIixcbiAgICBcImdyaWQtcm93LXN0YXJ0XCIsIFwiZ3JpZC10ZW1wbGF0ZVwiLCBcImdyaWQtdGVtcGxhdGUtYXJlYXNcIiwgXCJncmlkLXRlbXBsYXRlLWNvbHVtbnNcIixcbiAgICBcImdyaWQtdGVtcGxhdGUtcm93c1wiLCBcImhhbmdpbmctcHVuY3R1YXRpb25cIiwgXCJoZWlnaHRcIiwgXCJoeXBoZW5zXCIsXG4gICAgXCJpY29uXCIsIFwiaW1hZ2Utb3JpZW50YXRpb25cIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpbWFnZS1yZXNvbHV0aW9uXCIsXG4gICAgXCJpbmxpbmUtYm94LWFsaWduXCIsIFwianVzdGlmeS1jb250ZW50XCIsIFwianVzdGlmeS1pdGVtc1wiLCBcImp1c3RpZnktc2VsZlwiLCBcImxlZnRcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLFxuICAgIFwibGluZS1icmVha1wiLCBcImxpbmUtaGVpZ2h0XCIsIFwibGluZS1zdGFja2luZ1wiLCBcImxpbmUtc3RhY2tpbmctcnVieVwiLFxuICAgIFwibGluZS1zdGFja2luZy1zaGlmdFwiLCBcImxpbmUtc3RhY2tpbmctc3RyYXRlZ3lcIiwgXCJsaXN0LXN0eWxlXCIsXG4gICAgXCJsaXN0LXN0eWxlLWltYWdlXCIsIFwibGlzdC1zdHlsZS1wb3NpdGlvblwiLCBcImxpc3Qtc3R5bGUtdHlwZVwiLCBcIm1hcmdpblwiLFxuICAgIFwibWFyZ2luLWJvdHRvbVwiLCBcIm1hcmdpbi1sZWZ0XCIsIFwibWFyZ2luLXJpZ2h0XCIsIFwibWFyZ2luLXRvcFwiLFxuICAgIFwibWFya3NcIiwgXCJtYXJxdWVlLWRpcmVjdGlvblwiLCBcIm1hcnF1ZWUtbG9vcFwiLFxuICAgIFwibWFycXVlZS1wbGF5LWNvdW50XCIsIFwibWFycXVlZS1zcGVlZFwiLCBcIm1hcnF1ZWUtc3R5bGVcIiwgXCJtYXgtaGVpZ2h0XCIsXG4gICAgXCJtYXgtd2lkdGhcIiwgXCJtaW4taGVpZ2h0XCIsIFwibWluLXdpZHRoXCIsIFwibWl4LWJsZW5kLW1vZGVcIiwgXCJtb3ZlLXRvXCIsIFwibmF2LWRvd25cIiwgXCJuYXYtaW5kZXhcIixcbiAgICBcIm5hdi1sZWZ0XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwib2JqZWN0LWZpdFwiLCBcIm9iamVjdC1wb3NpdGlvblwiLFxuICAgIFwib3BhY2l0eVwiLCBcIm9yZGVyXCIsIFwib3JwaGFuc1wiLCBcIm91dGxpbmVcIixcbiAgICBcIm91dGxpbmUtY29sb3JcIiwgXCJvdXRsaW5lLW9mZnNldFwiLCBcIm91dGxpbmUtc3R5bGVcIiwgXCJvdXRsaW5lLXdpZHRoXCIsXG4gICAgXCJvdmVyZmxvd1wiLCBcIm92ZXJmbG93LXN0eWxlXCIsIFwib3ZlcmZsb3ctd3JhcFwiLCBcIm92ZXJmbG93LXhcIiwgXCJvdmVyZmxvdy15XCIsXG4gICAgXCJwYWRkaW5nXCIsIFwicGFkZGluZy1ib3R0b21cIiwgXCJwYWRkaW5nLWxlZnRcIiwgXCJwYWRkaW5nLXJpZ2h0XCIsIFwicGFkZGluZy10b3BcIixcbiAgICBcInBhZ2VcIiwgXCJwYWdlLWJyZWFrLWFmdGVyXCIsIFwicGFnZS1icmVhay1iZWZvcmVcIiwgXCJwYWdlLWJyZWFrLWluc2lkZVwiLFxuICAgIFwicGFnZS1wb2xpY3lcIiwgXCJwYXVzZVwiLCBcInBhdXNlLWFmdGVyXCIsIFwicGF1c2UtYmVmb3JlXCIsIFwicGVyc3BlY3RpdmVcIixcbiAgICBcInBlcnNwZWN0aXZlLW9yaWdpblwiLCBcInBpdGNoXCIsIFwicGl0Y2gtcmFuZ2VcIiwgXCJwbGFjZS1jb250ZW50XCIsIFwicGxhY2UtaXRlbXNcIiwgXCJwbGFjZS1zZWxmXCIsIFwicGxheS1kdXJpbmdcIiwgXCJwb3NpdGlvblwiLFxuICAgIFwicHJlc2VudGF0aW9uLWxldmVsXCIsIFwicHVuY3R1YXRpb24tdHJpbVwiLCBcInF1b3Rlc1wiLCBcInJlZ2lvbi1icmVhay1hZnRlclwiLFxuICAgIFwicmVnaW9uLWJyZWFrLWJlZm9yZVwiLCBcInJlZ2lvbi1icmVhay1pbnNpZGVcIiwgXCJyZWdpb24tZnJhZ21lbnRcIixcbiAgICBcInJlbmRlcmluZy1pbnRlbnRcIiwgXCJyZXNpemVcIiwgXCJyZXN0XCIsIFwicmVzdC1hZnRlclwiLCBcInJlc3QtYmVmb3JlXCIsIFwicmljaG5lc3NcIixcbiAgICBcInJpZ2h0XCIsIFwicm90YXRpb25cIiwgXCJyb3RhdGlvbi1wb2ludFwiLCBcInJ1YnktYWxpZ25cIiwgXCJydWJ5LW92ZXJoYW5nXCIsXG4gICAgXCJydWJ5LXBvc2l0aW9uXCIsIFwicnVieS1zcGFuXCIsIFwic2hhcGUtaW1hZ2UtdGhyZXNob2xkXCIsIFwic2hhcGUtaW5zaWRlXCIsIFwic2hhcGUtbWFyZ2luXCIsXG4gICAgXCJzaGFwZS1vdXRzaWRlXCIsIFwic2l6ZVwiLCBcInNwZWFrXCIsIFwic3BlYWstYXNcIiwgXCJzcGVhay1oZWFkZXJcIixcbiAgICBcInNwZWFrLW51bWVyYWxcIiwgXCJzcGVhay1wdW5jdHVhdGlvblwiLCBcInNwZWVjaC1yYXRlXCIsIFwic3RyZXNzXCIsIFwic3RyaW5nLXNldFwiLFxuICAgIFwidGFiLXNpemVcIiwgXCJ0YWJsZS1sYXlvdXRcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXQtbmFtZVwiLCBcInRhcmdldC1uZXdcIixcbiAgICBcInRhcmdldC1wb3NpdGlvblwiLCBcInRleHQtYWxpZ25cIiwgXCJ0ZXh0LWFsaWduLWxhc3RcIiwgXCJ0ZXh0LWRlY29yYXRpb25cIixcbiAgICBcInRleHQtZGVjb3JhdGlvbi1jb2xvclwiLCBcInRleHQtZGVjb3JhdGlvbi1saW5lXCIsIFwidGV4dC1kZWNvcmF0aW9uLXNraXBcIixcbiAgICBcInRleHQtZGVjb3JhdGlvbi1zdHlsZVwiLCBcInRleHQtZW1waGFzaXNcIiwgXCJ0ZXh0LWVtcGhhc2lzLWNvbG9yXCIsXG4gICAgXCJ0ZXh0LWVtcGhhc2lzLXBvc2l0aW9uXCIsIFwidGV4dC1lbXBoYXNpcy1zdHlsZVwiLCBcInRleHQtaGVpZ2h0XCIsXG4gICAgXCJ0ZXh0LWluZGVudFwiLCBcInRleHQtanVzdGlmeVwiLCBcInRleHQtb3V0bGluZVwiLCBcInRleHQtb3ZlcmZsb3dcIiwgXCJ0ZXh0LXNoYWRvd1wiLFxuICAgIFwidGV4dC1zaXplLWFkanVzdFwiLCBcInRleHQtc3BhY2UtY29sbGFwc2VcIiwgXCJ0ZXh0LXRyYW5zZm9ybVwiLCBcInRleHQtdW5kZXJsaW5lLXBvc2l0aW9uXCIsXG4gICAgXCJ0ZXh0LXdyYXBcIiwgXCJ0b3BcIiwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsIFwidHJhbnNmb3JtLXN0eWxlXCIsXG4gICAgXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbi1kZWxheVwiLCBcInRyYW5zaXRpb24tZHVyYXRpb25cIixcbiAgICBcInRyYW5zaXRpb24tcHJvcGVydHlcIiwgXCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLCBcInVuaWNvZGUtYmlkaVwiLFxuICAgIFwidXNlci1zZWxlY3RcIiwgXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcInZpc2liaWxpdHlcIiwgXCJ2b2ljZS1iYWxhbmNlXCIsIFwidm9pY2UtZHVyYXRpb25cIixcbiAgICBcInZvaWNlLWZhbWlseVwiLCBcInZvaWNlLXBpdGNoXCIsIFwidm9pY2UtcmFuZ2VcIiwgXCJ2b2ljZS1yYXRlXCIsIFwidm9pY2Utc3RyZXNzXCIsXG4gICAgXCJ2b2ljZS12b2x1bWVcIiwgXCJ2b2x1bWVcIiwgXCJ3aGl0ZS1zcGFjZVwiLCBcIndpZG93c1wiLCBcIndpZHRoXCIsIFwid2lsbC1jaGFuZ2VcIiwgXCJ3b3JkLWJyZWFrXCIsXG4gICAgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3b3JkLXdyYXBcIiwgXCJ6LWluZGV4XCIsXG4gICAgLy8gU1ZHLXNwZWNpZmljXG4gICAgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJtYXNrXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJmaWx0ZXJcIiwgXCJmbG9vZC1jb2xvclwiLFxuICAgIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInBvaW50ZXItZXZlbnRzXCIsXG4gICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsXG4gICAgXCJjb2xvci1yZW5kZXJpbmdcIiwgXCJmaWxsXCIsIFwiZmlsbC1vcGFjaXR5XCIsIFwiZmlsbC1ydWxlXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsXG4gICAgXCJtYXJrZXJcIiwgXCJtYXJrZXItZW5kXCIsIFwibWFya2VyLW1pZFwiLCBcIm1hcmtlci1zdGFydFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInN0cm9rZVwiLFxuICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIixcbiAgICBcInN0cm9rZS1taXRlcmxpbWl0XCIsIFwic3Ryb2tlLW9wYWNpdHlcIiwgXCJzdHJva2Utd2lkdGhcIiwgXCJ0ZXh0LXJlbmRlcmluZ1wiLFxuICAgIFwiYmFzZWxpbmUtc2hpZnRcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIixcbiAgICBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwidGV4dC1hbmNob3JcIiwgXCJ3cml0aW5nLW1vZGVcIlxuICBdLCBwcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KHByb3BlcnR5S2V5d29yZHNfKTtcblxuICB2YXIgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXyA9IFtcbiAgICBcInNjcm9sbGJhci1hcnJvdy1jb2xvclwiLCBcInNjcm9sbGJhci1iYXNlLWNvbG9yXCIsIFwic2Nyb2xsYmFyLWRhcmstc2hhZG93LWNvbG9yXCIsXG4gICAgXCJzY3JvbGxiYXItZmFjZS1jb2xvclwiLCBcInNjcm9sbGJhci1oaWdobGlnaHQtY29sb3JcIiwgXCJzY3JvbGxiYXItc2hhZG93LWNvbG9yXCIsXG4gICAgXCJzY3JvbGxiYXItM2QtbGlnaHQtY29sb3JcIiwgXCJzY3JvbGxiYXItdHJhY2stY29sb3JcIiwgXCJzaGFwZS1pbnNpZGVcIixcbiAgICBcInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b25cIiwgXCJzZWFyY2hmaWVsZC1kZWNvcmF0aW9uXCIsIFwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b25cIixcbiAgICBcInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvblwiLCBcInpvb21cIlxuICBdLCBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXyk7XG5cbiAgdmFyIGZvbnRQcm9wZXJ0aWVzXyA9IFtcbiAgICBcImZvbnQtZmFtaWx5XCIsIFwic3JjXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtZmVhdHVyZS1zZXR0aW5nc1wiLFxuICAgIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb250LXN0eWxlXCJcbiAgXSwgZm9udFByb3BlcnRpZXMgPSBrZXlTZXQoZm9udFByb3BlcnRpZXNfKTtcblxuICB2YXIgY291bnRlckRlc2NyaXB0b3JzXyA9IFtcbiAgICBcImFkZGl0aXZlLXN5bWJvbHNcIiwgXCJmYWxsYmFja1wiLCBcIm5lZ2F0aXZlXCIsIFwicGFkXCIsIFwicHJlZml4XCIsIFwicmFuZ2VcIixcbiAgICBcInNwZWFrLWFzXCIsIFwic3VmZml4XCIsIFwic3ltYm9sc1wiLCBcInN5c3RlbVwiXG4gIF0sIGNvdW50ZXJEZXNjcmlwdG9ycyA9IGtleVNldChjb3VudGVyRGVzY3JpcHRvcnNfKTtcblxuICB2YXIgY29sb3JLZXl3b3Jkc18gPSBbXG4gICAgXCJhbGljZWJsdWVcIiwgXCJhbnRpcXVld2hpdGVcIiwgXCJhcXVhXCIsIFwiYXF1YW1hcmluZVwiLCBcImF6dXJlXCIsIFwiYmVpZ2VcIixcbiAgICBcImJpc3F1ZVwiLCBcImJsYWNrXCIsIFwiYmxhbmNoZWRhbG1vbmRcIiwgXCJibHVlXCIsIFwiYmx1ZXZpb2xldFwiLCBcImJyb3duXCIsXG4gICAgXCJidXJseXdvb2RcIiwgXCJjYWRldGJsdWVcIiwgXCJjaGFydHJldXNlXCIsIFwiY2hvY29sYXRlXCIsIFwiY29yYWxcIiwgXCJjb3JuZmxvd2VyYmx1ZVwiLFxuICAgIFwiY29ybnNpbGtcIiwgXCJjcmltc29uXCIsIFwiY3lhblwiLCBcImRhcmtibHVlXCIsIFwiZGFya2N5YW5cIiwgXCJkYXJrZ29sZGVucm9kXCIsXG4gICAgXCJkYXJrZ3JheVwiLCBcImRhcmtncmVlblwiLCBcImRhcmtraGFraVwiLCBcImRhcmttYWdlbnRhXCIsIFwiZGFya29saXZlZ3JlZW5cIixcbiAgICBcImRhcmtvcmFuZ2VcIiwgXCJkYXJrb3JjaGlkXCIsIFwiZGFya3JlZFwiLCBcImRhcmtzYWxtb25cIiwgXCJkYXJrc2VhZ3JlZW5cIixcbiAgICBcImRhcmtzbGF0ZWJsdWVcIiwgXCJkYXJrc2xhdGVncmF5XCIsIFwiZGFya3R1cnF1b2lzZVwiLCBcImRhcmt2aW9sZXRcIixcbiAgICBcImRlZXBwaW5rXCIsIFwiZGVlcHNreWJsdWVcIiwgXCJkaW1ncmF5XCIsIFwiZG9kZ2VyYmx1ZVwiLCBcImZpcmVicmlja1wiLFxuICAgIFwiZmxvcmFsd2hpdGVcIiwgXCJmb3Jlc3RncmVlblwiLCBcImZ1Y2hzaWFcIiwgXCJnYWluc2Jvcm9cIiwgXCJnaG9zdHdoaXRlXCIsXG4gICAgXCJnb2xkXCIsIFwiZ29sZGVucm9kXCIsIFwiZ3JheVwiLCBcImdyZXlcIiwgXCJncmVlblwiLCBcImdyZWVueWVsbG93XCIsIFwiaG9uZXlkZXdcIixcbiAgICBcImhvdHBpbmtcIiwgXCJpbmRpYW5yZWRcIiwgXCJpbmRpZ29cIiwgXCJpdm9yeVwiLCBcImtoYWtpXCIsIFwibGF2ZW5kZXJcIixcbiAgICBcImxhdmVuZGVyYmx1c2hcIiwgXCJsYXduZ3JlZW5cIiwgXCJsZW1vbmNoaWZmb25cIiwgXCJsaWdodGJsdWVcIiwgXCJsaWdodGNvcmFsXCIsXG4gICAgXCJsaWdodGN5YW5cIiwgXCJsaWdodGdvbGRlbnJvZHllbGxvd1wiLCBcImxpZ2h0Z3JheVwiLCBcImxpZ2h0Z3JlZW5cIiwgXCJsaWdodHBpbmtcIixcbiAgICBcImxpZ2h0c2FsbW9uXCIsIFwibGlnaHRzZWFncmVlblwiLCBcImxpZ2h0c2t5Ymx1ZVwiLCBcImxpZ2h0c2xhdGVncmF5XCIsXG4gICAgXCJsaWdodHN0ZWVsYmx1ZVwiLCBcImxpZ2h0eWVsbG93XCIsIFwibGltZVwiLCBcImxpbWVncmVlblwiLCBcImxpbmVuXCIsIFwibWFnZW50YVwiLFxuICAgIFwibWFyb29uXCIsIFwibWVkaXVtYXF1YW1hcmluZVwiLCBcIm1lZGl1bWJsdWVcIiwgXCJtZWRpdW1vcmNoaWRcIiwgXCJtZWRpdW1wdXJwbGVcIixcbiAgICBcIm1lZGl1bXNlYWdyZWVuXCIsIFwibWVkaXVtc2xhdGVibHVlXCIsIFwibWVkaXVtc3ByaW5nZ3JlZW5cIiwgXCJtZWRpdW10dXJxdW9pc2VcIixcbiAgICBcIm1lZGl1bXZpb2xldHJlZFwiLCBcIm1pZG5pZ2h0Ymx1ZVwiLCBcIm1pbnRjcmVhbVwiLCBcIm1pc3R5cm9zZVwiLCBcIm1vY2Nhc2luXCIsXG4gICAgXCJuYXZham93aGl0ZVwiLCBcIm5hdnlcIiwgXCJvbGRsYWNlXCIsIFwib2xpdmVcIiwgXCJvbGl2ZWRyYWJcIiwgXCJvcmFuZ2VcIiwgXCJvcmFuZ2VyZWRcIixcbiAgICBcIm9yY2hpZFwiLCBcInBhbGVnb2xkZW5yb2RcIiwgXCJwYWxlZ3JlZW5cIiwgXCJwYWxldHVycXVvaXNlXCIsIFwicGFsZXZpb2xldHJlZFwiLFxuICAgIFwicGFwYXlhd2hpcFwiLCBcInBlYWNocHVmZlwiLCBcInBlcnVcIiwgXCJwaW5rXCIsIFwicGx1bVwiLCBcInBvd2RlcmJsdWVcIixcbiAgICBcInB1cnBsZVwiLCBcInJlYmVjY2FwdXJwbGVcIiwgXCJyZWRcIiwgXCJyb3N5YnJvd25cIiwgXCJyb3lhbGJsdWVcIiwgXCJzYWRkbGVicm93blwiLFxuICAgIFwic2FsbW9uXCIsIFwic2FuZHlicm93blwiLCBcInNlYWdyZWVuXCIsIFwic2Vhc2hlbGxcIiwgXCJzaWVubmFcIiwgXCJzaWx2ZXJcIiwgXCJza3libHVlXCIsXG4gICAgXCJzbGF0ZWJsdWVcIiwgXCJzbGF0ZWdyYXlcIiwgXCJzbm93XCIsIFwic3ByaW5nZ3JlZW5cIiwgXCJzdGVlbGJsdWVcIiwgXCJ0YW5cIixcbiAgICBcInRlYWxcIiwgXCJ0aGlzdGxlXCIsIFwidG9tYXRvXCIsIFwidHVycXVvaXNlXCIsIFwidmlvbGV0XCIsIFwid2hlYXRcIiwgXCJ3aGl0ZVwiLFxuICAgIFwid2hpdGVzbW9rZVwiLCBcInllbGxvd1wiLCBcInllbGxvd2dyZWVuXCJcbiAgXSwgY29sb3JLZXl3b3JkcyA9IGtleVNldChjb2xvcktleXdvcmRzXyk7XG5cbiAgdmFyIHZhbHVlS2V5d29yZHNfID0gW1xuICAgIFwiYWJvdmVcIiwgXCJhYnNvbHV0ZVwiLCBcImFjdGl2ZWJvcmRlclwiLCBcImFkZGl0aXZlXCIsIFwiYWN0aXZlY2FwdGlvblwiLCBcImFmYXJcIixcbiAgICBcImFmdGVyLXdoaXRlLXNwYWNlXCIsIFwiYWhlYWRcIiwgXCJhbGlhc1wiLCBcImFsbFwiLCBcImFsbC1zY3JvbGxcIiwgXCJhbHBoYWJldGljXCIsIFwiYWx0ZXJuYXRlXCIsXG4gICAgXCJhbHdheXNcIiwgXCJhbWhhcmljXCIsIFwiYW1oYXJpYy1hYmVnZWRlXCIsIFwiYW50aWFsaWFzZWRcIiwgXCJhcHB3b3Jrc3BhY2VcIixcbiAgICBcImFyYWJpYy1pbmRpY1wiLCBcImFybWVuaWFuXCIsIFwiYXN0ZXJpc2tzXCIsIFwiYXR0clwiLCBcImF1dG9cIiwgXCJhdXRvLWZsb3dcIiwgXCJhdm9pZFwiLCBcImF2b2lkLWNvbHVtblwiLCBcImF2b2lkLXBhZ2VcIixcbiAgICBcImF2b2lkLXJlZ2lvblwiLCBcImJhY2tncm91bmRcIiwgXCJiYWNrd2FyZHNcIiwgXCJiYXNlbGluZVwiLCBcImJlbG93XCIsIFwiYmlkaS1vdmVycmlkZVwiLCBcImJpbmFyeVwiLFxuICAgIFwiYmVuZ2FsaVwiLCBcImJsaW5rXCIsIFwiYmxvY2tcIiwgXCJibG9jay1heGlzXCIsIFwiYm9sZFwiLCBcImJvbGRlclwiLCBcImJvcmRlclwiLCBcImJvcmRlci1ib3hcIixcbiAgICBcImJvdGhcIiwgXCJib3R0b21cIiwgXCJicmVha1wiLCBcImJyZWFrLWFsbFwiLCBcImJyZWFrLXdvcmRcIiwgXCJidWxsZXRzXCIsIFwiYnV0dG9uXCIsIFwiYnV0dG9uLWJldmVsXCIsXG4gICAgXCJidXR0b25mYWNlXCIsIFwiYnV0dG9uaGlnaGxpZ2h0XCIsIFwiYnV0dG9uc2hhZG93XCIsIFwiYnV0dG9udGV4dFwiLCBcImNhbGNcIiwgXCJjYW1ib2RpYW5cIixcbiAgICBcImNhcGl0YWxpemVcIiwgXCJjYXBzLWxvY2staW5kaWNhdG9yXCIsIFwiY2FwdGlvblwiLCBcImNhcHRpb250ZXh0XCIsIFwiY2FyZXRcIixcbiAgICBcImNlbGxcIiwgXCJjZW50ZXJcIiwgXCJjaGVja2JveFwiLCBcImNpcmNsZVwiLCBcImNqay1kZWNpbWFsXCIsIFwiY2prLWVhcnRobHktYnJhbmNoXCIsXG4gICAgXCJjamstaGVhdmVubHktc3RlbVwiLCBcImNqay1pZGVvZ3JhcGhpY1wiLCBcImNsZWFyXCIsIFwiY2xpcFwiLCBcImNsb3NlLXF1b3RlXCIsXG4gICAgXCJjb2wtcmVzaXplXCIsIFwiY29sbGFwc2VcIiwgXCJjb2xvclwiLCBcImNvbG9yLWJ1cm5cIiwgXCJjb2xvci1kb2RnZVwiLCBcImNvbHVtblwiLCBcImNvbHVtbi1yZXZlcnNlXCIsXG4gICAgXCJjb21wYWN0XCIsIFwiY29uZGVuc2VkXCIsIFwiY29udGFpblwiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50c1wiLFxuICAgIFwiY29udGVudC1ib3hcIiwgXCJjb250ZXh0LW1lbnVcIiwgXCJjb250aW51b3VzXCIsIFwiY29weVwiLCBcImNvdW50ZXJcIiwgXCJjb3VudGVyc1wiLCBcImNvdmVyXCIsIFwiY3JvcFwiLFxuICAgIFwiY3Jvc3NcIiwgXCJjcm9zc2hhaXJcIiwgXCJjdXJyZW50Y29sb3JcIiwgXCJjdXJzaXZlXCIsIFwiY3ljbGljXCIsIFwiZGFya2VuXCIsIFwiZGFzaGVkXCIsIFwiZGVjaW1hbFwiLFxuICAgIFwiZGVjaW1hbC1sZWFkaW5nLXplcm9cIiwgXCJkZWZhdWx0XCIsIFwiZGVmYXVsdC1idXR0b25cIiwgXCJkZW5zZVwiLCBcImRlc3RpbmF0aW9uLWF0b3BcIixcbiAgICBcImRlc3RpbmF0aW9uLWluXCIsIFwiZGVzdGluYXRpb24tb3V0XCIsIFwiZGVzdGluYXRpb24tb3ZlclwiLCBcImRldmFuYWdhcmlcIiwgXCJkaWZmZXJlbmNlXCIsXG4gICAgXCJkaXNjXCIsIFwiZGlzY2FyZFwiLCBcImRpc2Nsb3N1cmUtY2xvc2VkXCIsIFwiZGlzY2xvc3VyZS1vcGVuXCIsIFwiZG9jdW1lbnRcIixcbiAgICBcImRvdC1kYXNoXCIsIFwiZG90LWRvdC1kYXNoXCIsXG4gICAgXCJkb3R0ZWRcIiwgXCJkb3VibGVcIiwgXCJkb3duXCIsIFwiZS1yZXNpemVcIiwgXCJlYXNlXCIsIFwiZWFzZS1pblwiLCBcImVhc2UtaW4tb3V0XCIsIFwiZWFzZS1vdXRcIixcbiAgICBcImVsZW1lbnRcIiwgXCJlbGxpcHNlXCIsIFwiZWxsaXBzaXNcIiwgXCJlbWJlZFwiLCBcImVuZFwiLCBcImV0aGlvcGljXCIsIFwiZXRoaW9waWMtYWJlZ2VkZVwiLFxuICAgIFwiZXRoaW9waWMtYWJlZ2VkZS1hbS1ldFwiLCBcImV0aGlvcGljLWFiZWdlZGUtZ2V6XCIsIFwiZXRoaW9waWMtYWJlZ2VkZS10aS1lclwiLFxuICAgIFwiZXRoaW9waWMtYWJlZ2VkZS10aS1ldFwiLCBcImV0aGlvcGljLWhhbGVoYW1lLWFhLWVyXCIsXG4gICAgXCJldGhpb3BpYy1oYWxlaGFtZS1hYS1ldFwiLCBcImV0aGlvcGljLWhhbGVoYW1lLWFtLWV0XCIsXG4gICAgXCJldGhpb3BpYy1oYWxlaGFtZS1nZXpcIiwgXCJldGhpb3BpYy1oYWxlaGFtZS1vbS1ldFwiLFxuICAgIFwiZXRoaW9waWMtaGFsZWhhbWUtc2lkLWV0XCIsIFwiZXRoaW9waWMtaGFsZWhhbWUtc28tZXRcIixcbiAgICBcImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyXCIsIFwiZXRoaW9waWMtaGFsZWhhbWUtdGktZXRcIiwgXCJldGhpb3BpYy1oYWxlaGFtZS10aWdcIixcbiAgICBcImV0aGlvcGljLW51bWVyaWNcIiwgXCJldy1yZXNpemVcIiwgXCJleGNsdXNpb25cIiwgXCJleHBhbmRlZFwiLCBcImV4dGVuZHNcIiwgXCJleHRyYS1jb25kZW5zZWRcIixcbiAgICBcImV4dHJhLWV4cGFuZGVkXCIsIFwiZmFudGFzeVwiLCBcImZhc3RcIiwgXCJmaWxsXCIsIFwiZml4ZWRcIiwgXCJmbGF0XCIsIFwiZmxleFwiLCBcImZsZXgtZW5kXCIsIFwiZmxleC1zdGFydFwiLCBcImZvb3Rub3Rlc1wiLFxuICAgIFwiZm9yd2FyZHNcIiwgXCJmcm9tXCIsIFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIsIFwiZ2VvcmdpYW5cIiwgXCJncmF5dGV4dFwiLCBcImdyaWRcIiwgXCJncm9vdmVcIixcbiAgICBcImd1amFyYXRpXCIsIFwiZ3VybXVraGlcIiwgXCJoYW5kXCIsIFwiaGFuZ3VsXCIsIFwiaGFuZ3VsLWNvbnNvbmFudFwiLCBcImhhcmQtbGlnaHRcIiwgXCJoZWJyZXdcIixcbiAgICBcImhlbHBcIiwgXCJoaWRkZW5cIiwgXCJoaWRlXCIsIFwiaGlnaGVyXCIsIFwiaGlnaGxpZ2h0XCIsIFwiaGlnaGxpZ2h0dGV4dFwiLFxuICAgIFwiaGlyYWdhbmFcIiwgXCJoaXJhZ2FuYS1pcm9oYVwiLCBcImhvcml6b250YWxcIiwgXCJoc2xcIiwgXCJoc2xhXCIsIFwiaHVlXCIsIFwiaWNvblwiLCBcImlnbm9yZVwiLFxuICAgIFwiaW5hY3RpdmVib3JkZXJcIiwgXCJpbmFjdGl2ZWNhcHRpb25cIiwgXCJpbmFjdGl2ZWNhcHRpb250ZXh0XCIsIFwiaW5maW5pdGVcIixcbiAgICBcImluZm9iYWNrZ3JvdW5kXCIsIFwiaW5mb3RleHRcIiwgXCJpbmhlcml0XCIsIFwiaW5pdGlhbFwiLCBcImlubGluZVwiLCBcImlubGluZS1heGlzXCIsXG4gICAgXCJpbmxpbmUtYmxvY2tcIiwgXCJpbmxpbmUtZmxleFwiLCBcImlubGluZS1ncmlkXCIsIFwiaW5saW5lLXRhYmxlXCIsIFwiaW5zZXRcIiwgXCJpbnNpZGVcIiwgXCJpbnRyaW5zaWNcIiwgXCJpbnZlcnRcIixcbiAgICBcIml0YWxpY1wiLCBcImphcGFuZXNlLWZvcm1hbFwiLCBcImphcGFuZXNlLWluZm9ybWFsXCIsIFwianVzdGlmeVwiLCBcImthbm5hZGFcIixcbiAgICBcImthdGFrYW5hXCIsIFwia2F0YWthbmEtaXJvaGFcIiwgXCJrZWVwLWFsbFwiLCBcImtobWVyXCIsXG4gICAgXCJrb3JlYW4taGFuZ3VsLWZvcm1hbFwiLCBcImtvcmVhbi1oYW5qYS1mb3JtYWxcIiwgXCJrb3JlYW4taGFuamEtaW5mb3JtYWxcIixcbiAgICBcImxhbmRzY2FwZVwiLCBcImxhb1wiLCBcImxhcmdlXCIsIFwibGFyZ2VyXCIsIFwibGVmdFwiLCBcImxldmVsXCIsIFwibGlnaHRlclwiLCBcImxpZ2h0ZW5cIixcbiAgICBcImxpbmUtdGhyb3VnaFwiLCBcImxpbmVhclwiLCBcImxpbmVhci1ncmFkaWVudFwiLCBcImxpbmVzXCIsIFwibGlzdC1pdGVtXCIsIFwibGlzdGJveFwiLCBcImxpc3RpdGVtXCIsXG4gICAgXCJsb2NhbFwiLCBcImxvZ2ljYWxcIiwgXCJsb3VkXCIsIFwibG93ZXJcIiwgXCJsb3dlci1hbHBoYVwiLCBcImxvd2VyLWFybWVuaWFuXCIsXG4gICAgXCJsb3dlci1ncmVla1wiLCBcImxvd2VyLWhleGFkZWNpbWFsXCIsIFwibG93ZXItbGF0aW5cIiwgXCJsb3dlci1ub3J3ZWdpYW5cIixcbiAgICBcImxvd2VyLXJvbWFuXCIsIFwibG93ZXJjYXNlXCIsIFwibHRyXCIsIFwibHVtaW5vc2l0eVwiLCBcIm1hbGF5YWxhbVwiLCBcIm1hdGNoXCIsIFwibWF0cml4XCIsIFwibWF0cml4M2RcIixcbiAgICBcIm1lZGlhLWNvbnRyb2xzLWJhY2tncm91bmRcIiwgXCJtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheVwiLFxuICAgIFwibWVkaWEtZnVsbHNjcmVlbi1idXR0b25cIiwgXCJtZWRpYS1tdXRlLWJ1dHRvblwiLCBcIm1lZGlhLXBsYXktYnV0dG9uXCIsXG4gICAgXCJtZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uXCIsIFwibWVkaWEtcmV3aW5kLWJ1dHRvblwiLFxuICAgIFwibWVkaWEtc2Vlay1iYWNrLWJ1dHRvblwiLCBcIm1lZGlhLXNlZWstZm9yd2FyZC1idXR0b25cIiwgXCJtZWRpYS1zbGlkZXJcIixcbiAgICBcIm1lZGlhLXNsaWRlcnRodW1iXCIsIFwibWVkaWEtdGltZS1yZW1haW5pbmctZGlzcGxheVwiLCBcIm1lZGlhLXZvbHVtZS1zbGlkZXJcIixcbiAgICBcIm1lZGlhLXZvbHVtZS1zbGlkZXItY29udGFpbmVyXCIsIFwibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iXCIsIFwibWVkaXVtXCIsXG4gICAgXCJtZW51XCIsIFwibWVudWxpc3RcIiwgXCJtZW51bGlzdC1idXR0b25cIiwgXCJtZW51bGlzdC10ZXh0XCIsXG4gICAgXCJtZW51bGlzdC10ZXh0ZmllbGRcIiwgXCJtZW51dGV4dFwiLCBcIm1lc3NhZ2UtYm94XCIsIFwibWlkZGxlXCIsIFwibWluLWludHJpbnNpY1wiLFxuICAgIFwibWl4XCIsIFwibW9uZ29saWFuXCIsIFwibW9ub3NwYWNlXCIsIFwibW92ZVwiLCBcIm11bHRpcGxlXCIsIFwibXVsdGlwbHlcIiwgXCJteWFubWFyXCIsIFwibi1yZXNpemVcIixcbiAgICBcIm5hcnJvd2VyXCIsIFwibmUtcmVzaXplXCIsIFwibmVzdy1yZXNpemVcIiwgXCJuby1jbG9zZS1xdW90ZVwiLCBcIm5vLWRyb3BcIixcbiAgICBcIm5vLW9wZW4tcXVvdGVcIiwgXCJuby1yZXBlYXRcIiwgXCJub25lXCIsIFwibm9ybWFsXCIsIFwibm90LWFsbG93ZWRcIiwgXCJub3dyYXBcIixcbiAgICBcIm5zLXJlc2l6ZVwiLCBcIm51bWJlcnNcIiwgXCJudW1lcmljXCIsIFwibnctcmVzaXplXCIsIFwibndzZS1yZXNpemVcIiwgXCJvYmxpcXVlXCIsIFwib2N0YWxcIiwgXCJvcGFjaXR5XCIsIFwib3Blbi1xdW90ZVwiLFxuICAgIFwib3B0aW1pemVMZWdpYmlsaXR5XCIsIFwib3B0aW1pemVTcGVlZFwiLCBcIm9yaXlhXCIsIFwib3JvbW9cIiwgXCJvdXRzZXRcIixcbiAgICBcIm91dHNpZGVcIiwgXCJvdXRzaWRlLXNoYXBlXCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lXCIsIFwicGFkZGluZ1wiLCBcInBhZGRpbmctYm94XCIsXG4gICAgXCJwYWludGVkXCIsIFwicGFnZVwiLCBcInBhdXNlZFwiLCBcInBlcnNpYW5cIiwgXCJwZXJzcGVjdGl2ZVwiLCBcInBsdXMtZGFya2VyXCIsIFwicGx1cy1saWdodGVyXCIsXG4gICAgXCJwb2ludGVyXCIsIFwicG9seWdvblwiLCBcInBvcnRyYWl0XCIsIFwicHJlXCIsIFwicHJlLWxpbmVcIiwgXCJwcmUtd3JhcFwiLCBcInByZXNlcnZlLTNkXCIsXG4gICAgXCJwcm9ncmVzc1wiLCBcInB1c2gtYnV0dG9uXCIsIFwicmFkaWFsLWdyYWRpZW50XCIsIFwicmFkaW9cIiwgXCJyZWFkLW9ubHlcIixcbiAgICBcInJlYWQtd3JpdGVcIiwgXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCIsIFwicmVjdGFuZ2xlXCIsIFwicmVnaW9uXCIsXG4gICAgXCJyZWxhdGl2ZVwiLCBcInJlcGVhdFwiLCBcInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnRcIixcbiAgICBcInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnRcIiwgXCJyZXBlYXQteFwiLCBcInJlcGVhdC15XCIsIFwicmVzZXRcIiwgXCJyZXZlcnNlXCIsXG4gICAgXCJyZ2JcIiwgXCJyZ2JhXCIsIFwicmlkZ2VcIiwgXCJyaWdodFwiLCBcInJvdGF0ZVwiLCBcInJvdGF0ZTNkXCIsIFwicm90YXRlWFwiLCBcInJvdGF0ZVlcIixcbiAgICBcInJvdGF0ZVpcIiwgXCJyb3VuZFwiLCBcInJvd1wiLCBcInJvdy1yZXNpemVcIiwgXCJyb3ctcmV2ZXJzZVwiLCBcInJ0bFwiLCBcInJ1bi1pblwiLCBcInJ1bm5pbmdcIixcbiAgICBcInMtcmVzaXplXCIsIFwic2Fucy1zZXJpZlwiLCBcInNhdHVyYXRpb25cIiwgXCJzY2FsZVwiLCBcInNjYWxlM2RcIiwgXCJzY2FsZVhcIiwgXCJzY2FsZVlcIiwgXCJzY2FsZVpcIiwgXCJzY3JlZW5cIixcbiAgICBcInNjcm9sbFwiLCBcInNjcm9sbGJhclwiLCBcInNjcm9sbC1wb3NpdGlvblwiLCBcInNlLXJlc2l6ZVwiLCBcInNlYXJjaGZpZWxkXCIsXG4gICAgXCJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uXCIsIFwic2VhcmNoZmllbGQtZGVjb3JhdGlvblwiLFxuICAgIFwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b25cIiwgXCJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb25cIiwgXCJzZWxmLXN0YXJ0XCIsIFwic2VsZi1lbmRcIixcbiAgICBcInNlbWktY29uZGVuc2VkXCIsIFwic2VtaS1leHBhbmRlZFwiLCBcInNlcGFyYXRlXCIsIFwic2VyaWZcIiwgXCJzaG93XCIsIFwic2lkYW1hXCIsXG4gICAgXCJzaW1wLWNoaW5lc2UtZm9ybWFsXCIsIFwic2ltcC1jaGluZXNlLWluZm9ybWFsXCIsIFwic2luZ2xlXCIsXG4gICAgXCJza2V3XCIsIFwic2tld1hcIiwgXCJza2V3WVwiLCBcInNraXAtd2hpdGUtc3BhY2VcIiwgXCJzbGlkZVwiLCBcInNsaWRlci1ob3Jpem9udGFsXCIsXG4gICAgXCJzbGlkZXItdmVydGljYWxcIiwgXCJzbGlkZXJ0aHVtYi1ob3Jpem9udGFsXCIsIFwic2xpZGVydGh1bWItdmVydGljYWxcIiwgXCJzbG93XCIsXG4gICAgXCJzbWFsbFwiLCBcInNtYWxsLWNhcHNcIiwgXCJzbWFsbC1jYXB0aW9uXCIsIFwic21hbGxlclwiLCBcInNvZnQtbGlnaHRcIiwgXCJzb2xpZFwiLCBcInNvbWFsaVwiLFxuICAgIFwic291cmNlLWF0b3BcIiwgXCJzb3VyY2UtaW5cIiwgXCJzb3VyY2Utb3V0XCIsIFwic291cmNlLW92ZXJcIiwgXCJzcGFjZVwiLCBcInNwYWNlLWFyb3VuZFwiLCBcInNwYWNlLWJldHdlZW5cIiwgXCJzcGFjZS1ldmVubHlcIiwgXCJzcGVsbC1vdXRcIiwgXCJzcXVhcmVcIixcbiAgICBcInNxdWFyZS1idXR0b25cIiwgXCJzdGFydFwiLCBcInN0YXRpY1wiLCBcInN0YXR1cy1iYXJcIiwgXCJzdHJldGNoXCIsIFwic3Ryb2tlXCIsIFwic3ViXCIsXG4gICAgXCJzdWJwaXhlbC1hbnRpYWxpYXNlZFwiLCBcInN1cGVyXCIsIFwic3ctcmVzaXplXCIsIFwic3ltYm9saWNcIiwgXCJzeW1ib2xzXCIsIFwic3lzdGVtLXVpXCIsIFwidGFibGVcIixcbiAgICBcInRhYmxlLWNhcHRpb25cIiwgXCJ0YWJsZS1jZWxsXCIsIFwidGFibGUtY29sdW1uXCIsIFwidGFibGUtY29sdW1uLWdyb3VwXCIsXG4gICAgXCJ0YWJsZS1mb290ZXItZ3JvdXBcIiwgXCJ0YWJsZS1oZWFkZXItZ3JvdXBcIiwgXCJ0YWJsZS1yb3dcIiwgXCJ0YWJsZS1yb3ctZ3JvdXBcIixcbiAgICBcInRhbWlsXCIsXG4gICAgXCJ0ZWx1Z3VcIiwgXCJ0ZXh0XCIsIFwidGV4dC1ib3R0b21cIiwgXCJ0ZXh0LXRvcFwiLCBcInRleHRhcmVhXCIsIFwidGV4dGZpZWxkXCIsIFwidGhhaVwiLFxuICAgIFwidGhpY2tcIiwgXCJ0aGluXCIsIFwidGhyZWVkZGFya3NoYWRvd1wiLCBcInRocmVlZGZhY2VcIiwgXCJ0aHJlZWRoaWdobGlnaHRcIixcbiAgICBcInRocmVlZGxpZ2h0c2hhZG93XCIsIFwidGhyZWVkc2hhZG93XCIsIFwidGliZXRhblwiLCBcInRpZ3JlXCIsIFwidGlncmlueWEtZXJcIixcbiAgICBcInRpZ3JpbnlhLWVyLWFiZWdlZGVcIiwgXCJ0aWdyaW55YS1ldFwiLCBcInRpZ3JpbnlhLWV0LWFiZWdlZGVcIiwgXCJ0b1wiLCBcInRvcFwiLFxuICAgIFwidHJhZC1jaGluZXNlLWZvcm1hbFwiLCBcInRyYWQtY2hpbmVzZS1pbmZvcm1hbFwiLCBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlXCIsIFwidHJhbnNsYXRlM2RcIiwgXCJ0cmFuc2xhdGVYXCIsIFwidHJhbnNsYXRlWVwiLCBcInRyYW5zbGF0ZVpcIixcbiAgICBcInRyYW5zcGFyZW50XCIsIFwidWx0cmEtY29uZGVuc2VkXCIsIFwidWx0cmEtZXhwYW5kZWRcIiwgXCJ1bmRlcmxpbmVcIiwgXCJ1bnNldFwiLCBcInVwXCIsXG4gICAgXCJ1cHBlci1hbHBoYVwiLCBcInVwcGVyLWFybWVuaWFuXCIsIFwidXBwZXItZ3JlZWtcIiwgXCJ1cHBlci1oZXhhZGVjaW1hbFwiLFxuICAgIFwidXBwZXItbGF0aW5cIiwgXCJ1cHBlci1ub3J3ZWdpYW5cIiwgXCJ1cHBlci1yb21hblwiLCBcInVwcGVyY2FzZVwiLCBcInVyZHVcIiwgXCJ1cmxcIixcbiAgICBcInZhclwiLCBcInZlcnRpY2FsXCIsIFwidmVydGljYWwtdGV4dFwiLCBcInZpc2libGVcIiwgXCJ2aXNpYmxlRmlsbFwiLCBcInZpc2libGVQYWludGVkXCIsXG4gICAgXCJ2aXNpYmxlU3Ryb2tlXCIsIFwidmlzdWFsXCIsIFwidy1yZXNpemVcIiwgXCJ3YWl0XCIsIFwid2F2ZVwiLCBcIndpZGVyXCIsXG4gICAgXCJ3aW5kb3dcIiwgXCJ3aW5kb3dmcmFtZVwiLCBcIndpbmRvd3RleHRcIiwgXCJ3b3Jkc1wiLCBcIndyYXBcIiwgXCJ3cmFwLXJldmVyc2VcIiwgXCJ4LWxhcmdlXCIsIFwieC1zbWFsbFwiLCBcInhvclwiLFxuICAgIFwieHgtbGFyZ2VcIiwgXCJ4eC1zbWFsbFwiXG4gIF0sIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pO1xuXG4gIHZhciBhbGxXb3JkcyA9IGRvY3VtZW50VHlwZXNfLmNvbmNhdChtZWRpYVR5cGVzXykuY29uY2F0KG1lZGlhRmVhdHVyZXNfKS5jb25jYXQobWVkaWFWYWx1ZUtleXdvcmRzXylcbiAgICAuY29uY2F0KHByb3BlcnR5S2V5d29yZHNfKS5jb25jYXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXykuY29uY2F0KGNvbG9yS2V5d29yZHNfKVxuICAgIC5jb25jYXQodmFsdWVLZXl3b3Jkc18pO1xuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwiY3NzXCIsIGFsbFdvcmRzKTtcblxuICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSBcIi9cIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gW1wiY29tbWVudFwiLCBcImNvbW1lbnRcIl07XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2Nzc1wiLCB7XG4gICAgZG9jdW1lbnRUeXBlczogZG9jdW1lbnRUeXBlcyxcbiAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLFxuICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsXG4gICAgbWVkaWFWYWx1ZUtleXdvcmRzOiBtZWRpYVZhbHVlS2V5d29yZHMsXG4gICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcyxcbiAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgY291bnRlckRlc2NyaXB0b3JzOiBjb3VudGVyRGVzY3JpcHRvcnMsXG4gICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcyxcbiAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLFxuICAgIHRva2VuSG9va3M6IHtcbiAgICAgIFwiL1wiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdChcIipcIikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNjc3NcIiwge1xuICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsXG4gICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcyxcbiAgICBtZWRpYVZhbHVlS2V5d29yZHM6IG1lZGlhVmFsdWVLZXl3b3JkcyxcbiAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLFxuICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLFxuICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsXG4gICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgYWxsb3dOZXN0ZWQ6IHRydWUsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICB0b2tlbkhvb2tzOiB7XG4gICAgICBcIi9cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFtcImNvbW1lbnRcIiwgXCJjb21tZW50XCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCJdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCI6XCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXHMqXFx7LywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIFwiJFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eW1xcdy1dKy8pO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCJdO1xuICAgICAgICByZXR1cm4gW1widmFyaWFibGUtMlwiLCBcInZhcmlhYmxlXCJdO1xuICAgICAgfSxcbiAgICAgIFwiI1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwie1wiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gW251bGwsIFwiaW50ZXJwb2xhdGlvblwiXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCIsXG4gICAgaGVscGVyVHlwZTogXCJzY3NzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWxlc3NcIiwge1xuICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsXG4gICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcyxcbiAgICBtZWRpYVZhbHVlS2V5d29yZHM6IG1lZGlhVmFsdWVLZXl3b3JkcyxcbiAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLFxuICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLFxuICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsXG4gICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgYWxsb3dOZXN0ZWQ6IHRydWUsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICB0b2tlbkhvb2tzOiB7XG4gICAgICBcIi9cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFtcImNvbW1lbnRcIiwgXCJjb21tZW50XCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCJdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJAXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIntcIikpIHJldHVybiBbbnVsbCwgXCJpbnRlcnBvbGF0aW9uXCJdO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxcYi9pLCBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFxcXFxcLV0vKTtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxccyo6LywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiBbXCJ2YXJpYWJsZS0yXCIsIFwidmFyaWFibGUtZGVmaW5pdGlvblwiXTtcbiAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZVwiXTtcbiAgICAgIH0sXG4gICAgICBcIiZcIjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbXCJhdG9tXCIsIFwiYXRvbVwiXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCIsXG4gICAgaGVscGVyVHlwZTogXCJsZXNzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWdzc1wiLCB7XG4gICAgZG9jdW1lbnRUeXBlczogZG9jdW1lbnRUeXBlcyxcbiAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLFxuICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsXG4gICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcyxcbiAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgY291bnRlckRlc2NyaXB0b3JzOiBjb3VudGVyRGVzY3JpcHRvcnMsXG4gICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcyxcbiAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLFxuICAgIHN1cHBvcnRzQXRDb21wb25lbnQ6IHRydWUsXG4gICAgdG9rZW5Ib29rczoge1xuICAgICAgXCIvXCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKlwiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbmFtZTogXCJjc3NcIixcbiAgICBoZWxwZXJUeXBlOiBcImdzc1wiXG4gIH0pO1xuXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQUNBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUVBO0FBSkE7QUFNQTtBQUNBO0FBWEE7QUFhQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFNQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQXBHQTtBQUNBO0FBQ0E7QUF1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQWhJQTtBQUNBO0FBQ0E7QUFtSUE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBRkE7QUFJQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUEvQkE7QUFDQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUF2QkE7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFBQTtBQTVCQTtBQUNBO0FBOEJBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFsQkE7QUFxQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQW5XQTtBQUNBO0FBbVpBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQUE7QUFLQTtBQUFBO0FBYUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQTRGQTtBQUFBO0FBUUE7QUFBQTtBQUtBO0FBQUE7QUFLQTtBQUFBO0FBNkJBO0FBQUE7QUFpR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQWxCQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUVBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBRUE7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUExQkE7QUE0QkE7QUFDQTtBQXhDQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBbEJBO0FBb0JBO0FBQ0E7QUFDQTtBQXRCQTtBQXdCQTtBQUNBO0FBcENBO0FBdUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFuQkE7QUFyeUJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/css/css.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/gfm/gfm.js": -/*!**************************************************!*\ - !*** ../node_modules/codemirror/mode/gfm/gfm.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../markdown/markdown */ \"../node_modules/codemirror/mode/markdown/markdown.js\"), __webpack_require__(/*! ../../addon/mode/overlay */ \"../node_modules/codemirror/addon/mode/overlay.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../markdown/markdown */ \"../node_modules/codemirror/mode/markdown/markdown.js\"), __webpack_require__(/*! ../../addon/mode/overlay */ \"../node_modules/codemirror/addon/mode/overlay.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i;\n CodeMirror.defineMode(\"gfm\", function (config, modeConfig) {\n var codeDepth = 0;\n\n function blankLine(state) {\n state.code = false;\n return null;\n }\n\n var gfmOverlay = {\n startState: function startState() {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function copyState(s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function token(stream, state) {\n state.combineTokens = null; // Hack to prevent formatting override inside code blocks (block and inline)\n\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n\n stream.skipToEnd();\n return null;\n }\n\n if (stream.sol()) {\n state.code = false;\n }\n\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n } // If this block is changed, it may need to be updated in Markdown mode\n\n\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) {\n // Must be exact\n state.code = false;\n }\n }\n\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n } // Check if space. If so, links can be formatted later on\n\n\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n\n if (modeConfig.gitHubSpice !== false) {\n if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n\n if (stream.match(urlRE) && stream.string.slice(stream.start - 2, stream.start) != \"](\" && (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n }, \"markdown\");\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9nZm0vZ2ZtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvZ2ZtL2dmbS5qcz83MzQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9tYXJrZG93bi9tYXJrZG93blwiKSwgcmVxdWlyZShcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL21hcmtkb3duL21hcmtkb3duXCIsIFwiLi4vLi4vYWRkb24vbW9kZS9vdmVybGF5XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB1cmxSRSA9IC9eKCg/Oig/OmFhYXM/fGFib3V0fGFjYXB8YWRpdW14dHJhfGFmW3BzXXxhaW18YXB0fGF0dGFjaG1lbnR8YXd8YmVzaGFyZXxiaXRjb2lufGJvbG98Y2FsbHRvfGNhcHxjaHJvbWUoPzotZXh0ZW5zaW9uKT98Y2lkfGNvYXB8Y29tLWV2ZW50YnJpdGUtYXR0ZW5kZWV8Y29udGVudHxjcmlkfGN2c3xkYXRhfGRhdnxkaWN0fGRsbmEtKD86cGxheWNvbnRhaW5lcnxwbGF5c2luZ2xlKXxkbnN8ZG9pfGR0bnxkdmJ8ZWQya3xmYWNldGltZXxmZWVkfGZpbGV8ZmluZ2VyfGZpc2h8ZnRwfGdlb3xnZ3xnaXR8Z2l6bW9wcm9qZWN0fGdvfGdvcGhlcnxndGFsa3xoMzIzfGhjcHxodHRwcz98aWF4fGljYXB8aWNvbnxpbXxpbWFwfGluZm98aXBufGlwcHxpcmNbNnNdP3xpcmlzKD86XFwuYmVlcHxcXC5sd3p8XFwueHBjfFxcLnhwY3MpP3xpdG1zfGphcnxqYXZhc2NyaXB0fGptc3xrZXlwYXJjfGxhc3RmbXxsZGFwcz98bWFnbmV0fG1haWx0b3xtYXBzfG1hcmtldHxtZXNzYWdlfG1pZHxtbXN8bXMtaGVscHxtc25pbXxtc3Jwcz98bXRxcHxtdW1ibGV8bXVwZGF0ZXxtdm58bmV3c3xuZnN8bmloP3xubnRwfG5vdGVzfG9pZHxvcGFxdWVsb2NrdG9rZW58cGFsbXxwYXBhcmF6eml8cGxhdGZvcm18cG9wfHByZXN8cHJveHl8cHN5Y3xxdWVyeXxyZXMoPzpvdXJjZSk/fHJtaXxyc3luY3xydG1wfHJ0c3B8c2Vjb25kbGlmZXxzZXJ2aWNlfHNlc3Npb258c2Z0cHxzZ258c2h0dHB8c2lldmV8c2lwcz98c2t5cGV8c21bYnNdfHNubXB8c29hcFxcLmJlZXBzP3xzb2xkYXR8c3BvdGlmeXxzc2h8c3RlYW18c3ZufHRhZ3x0ZWFtc3BlYWt8dGVsKD86bmV0KT98dGZ0cHx0aGluZ3N8dGhpc21lc3NhZ2V8dGlwfHRuMzI3MHx0dnx1ZHB8dW5yZWFsfHVybnx1dDIwMDR8dmVtbWl8dmVudHJpbG98dmlldy1zb3VyY2V8d2ViY2FsfHdzcz98d3RhaXx3eWNpd3lnfHhjb24oPzotdXNlcmlkKT98eGZpcmV8eG1scnBjXFwuYmVlcHM/fHhtcHB8eHJpfHltc2dyfHozOVxcLjUwW3JzXT8pOig/OlxcL3sxLDN9fFthLXowLTklXSl8d3d3XFxkezAsM31bLl18W2EtejAtOS5cXC1dK1suXVthLXpdezIsNH1cXC8pKD86W15cXHMoKTw+XXxcXChbXlxccygpPD5dKlxcKSkrKD86XFwoW15cXHMoKTw+XSpcXCl8W15cXHNgKiEoKVxcW1xcXXt9OzonXCIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaVxuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJnZm1cIiwgZnVuY3Rpb24oY29uZmlnLCBtb2RlQ29uZmlnKSB7XG4gIHZhciBjb2RlRGVwdGggPSAwO1xuICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHtcbiAgICBzdGF0ZS5jb2RlID0gZmFsc2U7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGdmbU92ZXJsYXkgPSB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBmYWxzZSxcbiAgICAgICAgY29kZUJsb2NrOiBmYWxzZSxcbiAgICAgICAgYXRlU3BhY2U6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgY29weVN0YXRlOiBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBzLmNvZGUsXG4gICAgICAgIGNvZGVCbG9jazogcy5jb2RlQmxvY2ssXG4gICAgICAgIGF0ZVNwYWNlOiBzLmF0ZVNwYWNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSBudWxsO1xuXG4gICAgICAvLyBIYWNrIHRvIHByZXZlbnQgZm9ybWF0dGluZyBvdmVycmlkZSBpbnNpZGUgY29kZSBibG9ja3MgKGJsb2NrIGFuZCBpbmxpbmUpXG4gICAgICBpZiAoc3RhdGUuY29kZUJsb2NrKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15gYGArLykpIHtcbiAgICAgICAgICBzdGF0ZS5jb2RlQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBzdGF0ZS5jb2RlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgvXmBgYCsvKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHN0YXRlLmNvZGVCbG9jayA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhpcyBibG9jayBpcyBjaGFuZ2VkLCBpdCBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIGluIE1hcmtkb3duIG1vZGVcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnYCcpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHN0cmVhbS5wb3M7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgnYCcpO1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IDEgKyBzdHJlYW0ucG9zIC0gYmVmb3JlO1xuICAgICAgICBpZiAoIXN0YXRlLmNvZGUpIHtcbiAgICAgICAgICBjb2RlRGVwdGggPSBkaWZmZXJlbmNlO1xuICAgICAgICAgIHN0YXRlLmNvZGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkaWZmZXJlbmNlID09PSBjb2RlRGVwdGgpIHsgLy8gTXVzdCBiZSBleGFjdFxuICAgICAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY29kZSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIHNwYWNlLiBJZiBzbywgbGlua3MgY2FuIGJlIGZvcm1hdHRlZCBsYXRlciBvblxuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHN0YXRlLmF0ZVNwYWNlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpIHx8IHN0YXRlLmF0ZVNwYWNlKSB7XG4gICAgICAgIHN0YXRlLmF0ZVNwYWNlID0gZmFsc2U7XG4gICAgICAgIGlmIChtb2RlQ29uZmlnLmdpdEh1YlNwaWNlICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvXig/OlthLXpBLVowLTlcXC1fXStcXC8pPyg/OlthLXpBLVowLTlcXC1fXStAKT8oPz0uezAsNn1cXGQpKD86W2EtZjAtOV17Nyw0MH1cXGIpLykpIHtcbiAgICAgICAgICAgIC8vIFVzZXIvUHJvamVjdEBTSEFcbiAgICAgICAgICAgIC8vIFVzZXJAU0hBXG4gICAgICAgICAgICAvLyBTSEFcbiAgICAgICAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFwibGlua1wiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eKD86W2EtekEtWjAtOVxcLV9dK1xcLyk/KD86W2EtekEtWjAtOVxcLV9dKyk/I1swLTldK1xcYi8pKSB7XG4gICAgICAgICAgICAvLyBVc2VyL1Byb2plY3QjTnVtXG4gICAgICAgICAgICAvLyBVc2VyI051bVxuICAgICAgICAgICAgLy8gI051bVxuICAgICAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gXCJsaW5rXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHVybFJFKSAmJlxuICAgICAgICAgIHN0cmVhbS5zdHJpbmcuc2xpY2Uoc3RyZWFtLnN0YXJ0IC0gMiwgc3RyZWFtLnN0YXJ0KSAhPSBcIl0oXCIgJiZcbiAgICAgICAgICAoc3RyZWFtLnN0YXJ0ID09IDAgfHwgL1xcVy8udGVzdChzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0uc3RhcnQgLSAxKSkpKSB7XG4gICAgICAgIC8vIFVSTHNcbiAgICAgICAgLy8gVGFrZW4gZnJvbSBodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0LzIwMTAvMDcvaW1wcm92ZWRfcmVnZXhfZm9yX21hdGNoaW5nX3VybHNcbiAgICAgICAgLy8gQW5kIHRoZW4gKGlzc3VlICMxMTYwKSBzaW1wbGlmaWVkIHRvIG1ha2UgaXQgbm90IGNyYXNoIHRoZSBDaHJvbWUgUmVnZXhwIGVuZ2luZVxuICAgICAgICAvLyBBbmQgdGhlbiBsaW1pdGVkIHVybCBzY2hlbWVzIHRvIHRoZSBDb21tb25NYXJrIGxpc3QsIHNvIGZvbzpiYXIgaXNuJ3QgbWF0Y2hlZCBhcyBhIFVSTFxuICAgICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwibGlua1wiO1xuICAgICAgfVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgYmxhbmtMaW5lOiBibGFua0xpbmVcbiAgfTtcblxuICB2YXIgbWFya2Rvd25Db25maWcgPSB7XG4gICAgdGFza0xpc3RzOiB0cnVlLFxuICAgIHN0cmlrZXRocm91Z2g6IHRydWUsXG4gICAgZW1vamk6IHRydWVcbiAgfTtcbiAgZm9yICh2YXIgYXR0ciBpbiBtb2RlQ29uZmlnKSB7XG4gICAgbWFya2Rvd25Db25maWdbYXR0cl0gPSBtb2RlQ29uZmlnW2F0dHJdO1xuICB9XG4gIG1hcmtkb3duQ29uZmlnLm5hbWUgPSBcIm1hcmtkb3duXCI7XG4gIHJldHVybiBDb2RlTWlycm9yLm92ZXJsYXlNb2RlKENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1hcmtkb3duQ29uZmlnKSwgZ2ZtT3ZlcmxheSk7XG5cbn0sIFwibWFya2Rvd25cIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWdmbVwiLCBcImdmbVwiKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFUQTtBQWVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWJBO0FBZUE7QUFDQTtBQXJDQTtBQUNBO0FBQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBeEZBO0FBMEZBO0FBMUZBO0FBNkZBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTVHQTtBQWdIQTtBQTVIQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/gfm/gfm.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/go/go.js": -/*!************************************************!*\ - !*** ../node_modules/codemirror/mode/go/go.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"go\", function (config) {\n var indentUnit = config.indentUnit;\n var keywords = {\n \"break\": true,\n \"case\": true,\n \"chan\": true,\n \"const\": true,\n \"continue\": true,\n \"default\": true,\n \"defer\": true,\n \"else\": true,\n \"fallthrough\": true,\n \"for\": true,\n \"func\": true,\n \"go\": true,\n \"goto\": true,\n \"if\": true,\n \"import\": true,\n \"interface\": true,\n \"map\": true,\n \"package\": true,\n \"range\": true,\n \"return\": true,\n \"select\": true,\n \"struct\": true,\n \"switch\": true,\n \"type\": true,\n \"var\": true,\n \"bool\": true,\n \"byte\": true,\n \"complex64\": true,\n \"complex128\": true,\n \"float32\": true,\n \"float64\": true,\n \"int8\": true,\n \"int16\": true,\n \"int32\": true,\n \"int64\": true,\n \"string\": true,\n \"uint8\": true,\n \"uint16\": true,\n \"uint32\": true,\n \"uint64\": true,\n \"int\": true,\n \"uint\": true,\n \"uintptr\": true,\n \"error\": true,\n \"rune\": true\n };\n var atoms = {\n \"true\": true,\n \"false\": true,\n \"iota\": true,\n \"nil\": true,\n \"append\": true,\n \"cap\": true,\n \"close\": true,\n \"complex\": true,\n \"copy\": true,\n \"delete\": true,\n \"imag\": true,\n \"len\": true,\n \"make\": true,\n \"new\": true,\n \"panic\": true,\n \"print\": true,\n \"println\": true,\n \"real\": true,\n \"recover\": true\n };\n var isOperatorChar = /[+\\-*&^%:=<>!|\\/]/;\n var curPunc;\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n if (ch == '\"' || ch == \"'\" || ch == \"`\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n }\n\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n\n return \"number\";\n }\n\n if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n curPunc = ch;\n return null;\n }\n\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n }\n\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n }\n\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n\n if (keywords.propertyIsEnumerable(cur)) {\n if (cur == \"case\" || cur == \"default\") curPunc = \"case\";\n return \"keyword\";\n }\n\n if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n return \"variable\";\n }\n\n function tokenString(quote) {\n return function (stream, state) {\n var escaped = false,\n next,\n end = false;\n\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) {\n end = true;\n break;\n }\n\n escaped = !escaped && quote != \"`\" && next == \"\\\\\";\n }\n\n if (end || !(escaped || quote == \"`\")) state.tokenize = tokenBase;\n return \"string\";\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false,\n ch;\n\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n\n maybeEnd = ch == \"*\";\n }\n\n return \"comment\";\n }\n\n function Context(indented, column, type, align, prev) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.align = align;\n this.prev = prev;\n }\n\n function pushContext(state, col, type) {\n return state.context = new Context(state.indented, col, type, null, state.context);\n }\n\n function popContext(state) {\n if (!state.context.prev) return;\n var t = state.context.type;\n if (t == \")\" || t == \"]\" || t == \"}\") state.indented = state.context.indented;\n return state.context = state.context.prev;\n } // Interface\n\n\n return {\n startState: function startState(basecolumn) {\n return {\n tokenize: null,\n context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", false),\n indented: 0,\n startOfLine: true\n };\n },\n token: function token(stream, state) {\n var ctx = state.context;\n\n if (stream.sol()) {\n if (ctx.align == null) ctx.align = false;\n state.indented = stream.indentation();\n state.startOfLine = true;\n if (ctx.type == \"case\") ctx.type = \"}\";\n }\n\n if (stream.eatSpace()) return null;\n curPunc = null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style == \"comment\") return style;\n if (ctx.align == null) ctx.align = true;\n if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");else if (curPunc == \"case\") ctx.type = \"case\";else if (curPunc == \"}\" && ctx.type == \"}\") popContext(state);else if (curPunc == ctx.type) popContext(state);\n state.startOfLine = false;\n return style;\n },\n indent: function indent(state, textAfter) {\n if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;\n var ctx = state.context,\n firstChar = textAfter && textAfter.charAt(0);\n\n if (ctx.type == \"case\" && /^(?:case|default)\\b/.test(textAfter)) {\n state.context.type = \"}\";\n return ctx.indented;\n }\n\n var closing = firstChar == ctx.type;\n if (ctx.align) return ctx.column + (closing ? 0 : 1);else return ctx.indented + (closing ? 0 : indentUnit);\n },\n electricChars: \"{}):\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"brace\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"//\"\n };\n });\n CodeMirror.defineMIME(\"text/x-go\", \"go\");\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9nby9nby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL2dvL2dvLmpzP2ZjMDciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJnb1wiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcblxuICB2YXIga2V5d29yZHMgPSB7XG4gICAgXCJicmVha1wiOnRydWUsIFwiY2FzZVwiOnRydWUsIFwiY2hhblwiOnRydWUsIFwiY29uc3RcIjp0cnVlLCBcImNvbnRpbnVlXCI6dHJ1ZSxcbiAgICBcImRlZmF1bHRcIjp0cnVlLCBcImRlZmVyXCI6dHJ1ZSwgXCJlbHNlXCI6dHJ1ZSwgXCJmYWxsdGhyb3VnaFwiOnRydWUsIFwiZm9yXCI6dHJ1ZSxcbiAgICBcImZ1bmNcIjp0cnVlLCBcImdvXCI6dHJ1ZSwgXCJnb3RvXCI6dHJ1ZSwgXCJpZlwiOnRydWUsIFwiaW1wb3J0XCI6dHJ1ZSxcbiAgICBcImludGVyZmFjZVwiOnRydWUsIFwibWFwXCI6dHJ1ZSwgXCJwYWNrYWdlXCI6dHJ1ZSwgXCJyYW5nZVwiOnRydWUsIFwicmV0dXJuXCI6dHJ1ZSxcbiAgICBcInNlbGVjdFwiOnRydWUsIFwic3RydWN0XCI6dHJ1ZSwgXCJzd2l0Y2hcIjp0cnVlLCBcInR5cGVcIjp0cnVlLCBcInZhclwiOnRydWUsXG4gICAgXCJib29sXCI6dHJ1ZSwgXCJieXRlXCI6dHJ1ZSwgXCJjb21wbGV4NjRcIjp0cnVlLCBcImNvbXBsZXgxMjhcIjp0cnVlLFxuICAgIFwiZmxvYXQzMlwiOnRydWUsIFwiZmxvYXQ2NFwiOnRydWUsIFwiaW50OFwiOnRydWUsIFwiaW50MTZcIjp0cnVlLCBcImludDMyXCI6dHJ1ZSxcbiAgICBcImludDY0XCI6dHJ1ZSwgXCJzdHJpbmdcIjp0cnVlLCBcInVpbnQ4XCI6dHJ1ZSwgXCJ1aW50MTZcIjp0cnVlLCBcInVpbnQzMlwiOnRydWUsXG4gICAgXCJ1aW50NjRcIjp0cnVlLCBcImludFwiOnRydWUsIFwidWludFwiOnRydWUsIFwidWludHB0clwiOnRydWUsIFwiZXJyb3JcIjogdHJ1ZSxcbiAgICBcInJ1bmVcIjp0cnVlXG4gIH07XG5cbiAgdmFyIGF0b21zID0ge1xuICAgIFwidHJ1ZVwiOnRydWUsIFwiZmFsc2VcIjp0cnVlLCBcImlvdGFcIjp0cnVlLCBcIm5pbFwiOnRydWUsIFwiYXBwZW5kXCI6dHJ1ZSxcbiAgICBcImNhcFwiOnRydWUsIFwiY2xvc2VcIjp0cnVlLCBcImNvbXBsZXhcIjp0cnVlLCBcImNvcHlcIjp0cnVlLCBcImRlbGV0ZVwiOnRydWUsIFwiaW1hZ1wiOnRydWUsXG4gICAgXCJsZW5cIjp0cnVlLCBcIm1ha2VcIjp0cnVlLCBcIm5ld1wiOnRydWUsIFwicGFuaWNcIjp0cnVlLCBcInByaW50XCI6dHJ1ZSxcbiAgICBcInByaW50bG5cIjp0cnVlLCBcInJlYWxcIjp0cnVlLCBcInJlY292ZXJcIjp0cnVlXG4gIH07XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiZeJTo9PD4hfFxcL10vO1xuXG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIiB8fCBjaCA9PSBcImBcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmICgvW1xcZFxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIuXCIpIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtOV0rKFtlRV1bXFwtK10/WzAtOV0rKT8vKTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIwXCIpIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eW3hYXVswLTlhLWZBLUZdKy8pIHx8IHN0cmVhbS5tYXRjaCgvXjBbMC03XSsvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKlxcLj9bMC05XSooW2VFXVtcXC0rXT9bMC05XSspPy8pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfVxuICAgIGlmICgvW1xcW1xcXXt9XFwoXFwpLDtcXDpcXC5dLy50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXFx4YTEtXFx1ZmZmZl0vKTtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgaWYgKGN1ciA9PSBcImNhc2VcIiB8fCBjdXIgPT0gXCJkZWZhdWx0XCIpIGN1clB1bmMgPSBcImNhc2VcIjtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImF0b21cIjtcbiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgcXVvdGUgIT0gXCJgXCIgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IHF1b3RlID09IFwiYFwiKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiL1wiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikge1xuICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHtcbiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpO1xuICB9XG4gIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvbnRleHQucHJldikgcmV0dXJuO1xuICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIGlmICh0ID09IFwiKVwiIHx8IHQgPT0gXCJdXCIgfHwgdCA9PSBcIn1cIilcbiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJ0b3BcIiwgZmFsc2UpLFxuICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJjYXNlXCIpIGN0eC50eXBlID0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSA9PSBcImNvbW1lbnRcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJ9XCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJdXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcImNhc2VcIikgY3R4LnR5cGUgPSBcImNhc2VcIjtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ9XCIgJiYgY3R4LnR5cGUgPT0gXCJ9XCIpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcImNhc2VcIiAmJiAvXig/OmNhc2V8ZGVmYXVsdClcXGIvLnRlc3QodGV4dEFmdGVyKSkge1xuICAgICAgICBzdGF0ZS5jb250ZXh0LnR5cGUgPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZDtcbiAgICAgIH1cbiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlO1xuICAgICAgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0NoYXJzOiBcInt9KTpcIixcbiAgICBjbG9zZUJyYWNrZXRzOiBcIigpW117fScnXFxcIlxcXCJgYFwiLFxuICAgIGZvbGQ6IFwiYnJhY2VcIixcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgIGxpbmVDb21tZW50OiBcIi8vXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZ29cIiwgXCJnb1wiKTtcblxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVkE7QUFhQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSkE7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBL0dBO0FBQ0E7QUFDQTtBQWtIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUEvQkE7QUFrQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBMUNBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5EQTtBQXBIQTtBQTJLQTtBQXJMQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/go/go.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/htmlmixed/htmlmixed.js": -/*!**************************************************************!*\ - !*** ../node_modules/codemirror/mode/htmlmixed/htmlmixed.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../javascript/javascript */ \"../node_modules/codemirror/mode/javascript/javascript.js\"), __webpack_require__(/*! ../css/css */ \"../node_modules/codemirror/mode/css/css.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../javascript/javascript */ \"../node_modules/codemirror/mode/javascript/javascript.js\"), __webpack_require__(/*! ../css/css */ \"../node_modules/codemirror/mode/css/css.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n var defaultTags = {\n script: [[\"lang\", /(javascript|babel)/i, \"javascript\"], [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"], [\"type\", /./, \"text/plain\"], [null, null, \"javascript\"]],\n style: [[\"lang\", /^css$/i, \"css\"], [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"], [\"type\", /./, \"text/plain\"], [null, null, \"css\"]]\n };\n\n function maybeBackup(stream, pat, style) {\n var cur = stream.current(),\n close = cur.search(pat);\n\n if (close > -1) {\n stream.backUp(cur.length - close);\n } else if (cur.match(/<\\/?$/)) {\n stream.backUp(cur.length);\n if (!stream.match(pat, false)) stream.match(cur);\n }\n\n return style;\n }\n\n var attrRegexpCache = {};\n\n function getAttrRegexp(attr) {\n var regexp = attrRegexpCache[attr];\n if (regexp) return regexp;\n return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n }\n\n function getAttrValue(text, attr) {\n var match = text.match(getAttrRegexp(attr));\n return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\";\n }\n\n function getTagRegexp(tagName, anchored) {\n return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n }\n\n function addTags(from, to) {\n for (var tag in from) {\n var dest = to[tag] || (to[tag] = []);\n var source = from[tag];\n\n for (var i = source.length - 1; i >= 0; i--) {\n dest.unshift(source[i]);\n }\n }\n }\n\n function findMatchingMode(tagInfo, tagText) {\n for (var i = 0; i < tagInfo.length; i++) {\n var spec = tagInfo[i];\n if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n }\n }\n\n CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n var htmlMode = CodeMirror.getMode(config, {\n name: \"xml\",\n htmlMode: true,\n multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag\n });\n var tags = {};\n var configTags = parserConfig && parserConfig.tags,\n configScript = parserConfig && parserConfig.scriptTypes;\n addTags(defaultTags, tags);\n if (configTags) addTags(configTags, tags);\n if (configScript) for (var i = configScript.length - 1; i >= 0; i--) {\n tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode]);\n }\n\n function html(stream, state) {\n var style = htmlMode.token(stream, state.htmlState),\n tag = /\\btag\\b/.test(style),\n tagName;\n\n if (tag && !/[<>\\s\\/]/.test(stream.current()) && (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && tags.hasOwnProperty(tagName)) {\n state.inTag = tagName + \" \";\n } else if (state.inTag && tag && />$/.test(stream.current())) {\n var inTag = /^([\\S]+) (.*)/.exec(state.inTag);\n state.inTag = null;\n var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2]);\n var mode = CodeMirror.getMode(config, modeSpec);\n var endTagA = getTagRegexp(inTag[1], true),\n endTag = getTagRegexp(inTag[1], false);\n\n state.token = function (stream, state) {\n if (stream.match(endTagA, false)) {\n state.token = html;\n state.localState = state.localMode = null;\n return null;\n }\n\n return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n };\n\n state.localMode = mode;\n state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\", \"\"));\n } else if (state.inTag) {\n state.inTag += stream.current();\n if (stream.eol()) state.inTag += \" \";\n }\n\n return style;\n }\n\n ;\n return {\n startState: function startState() {\n var state = CodeMirror.startState(htmlMode);\n return {\n token: html,\n inTag: null,\n localMode: null,\n localState: null,\n htmlState: state\n };\n },\n copyState: function copyState(state) {\n var local;\n\n if (state.localState) {\n local = CodeMirror.copyState(state.localMode, state.localState);\n }\n\n return {\n token: state.token,\n inTag: state.inTag,\n localMode: state.localMode,\n localState: local,\n htmlState: CodeMirror.copyState(htmlMode, state.htmlState)\n };\n },\n token: function token(stream, state) {\n return state.token(stream, state);\n },\n indent: function indent(state, textAfter, line) {\n if (!state.localMode || /^\\s*<\\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter, line);else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);else return CodeMirror.Pass;\n },\n innerMode: function innerMode(state) {\n return {\n state: state.localState || state.htmlState,\n mode: state.localMode || htmlMode\n };\n }\n };\n }, \"xml\", \"javascript\", \"css\");\n CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcz9hZTliIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIpLCByZXF1aXJlKFwiLi4vY3NzL2Nzc1wiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL3htbC94bWxcIiwgXCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHRcIiwgXCIuLi9jc3MvY3NzXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgZGVmYXVsdFRhZ3MgPSB7XG4gICAgc2NyaXB0OiBbXG4gICAgICBbXCJsYW5nXCIsIC8oamF2YXNjcmlwdHxiYWJlbCkvaSwgXCJqYXZhc2NyaXB0XCJdLFxuICAgICAgW1widHlwZVwiLCAvXig/OnRleHR8YXBwbGljYXRpb24pXFwvKD86eC0pPyg/OmphdmF8ZWNtYSlzY3JpcHQkfF5tb2R1bGUkfF4kL2ksIFwiamF2YXNjcmlwdFwiXSxcbiAgICAgIFtcInR5cGVcIiwgLy4vLCBcInRleHQvcGxhaW5cIl0sXG4gICAgICBbbnVsbCwgbnVsbCwgXCJqYXZhc2NyaXB0XCJdXG4gICAgXSxcbiAgICBzdHlsZTogIFtcbiAgICAgIFtcImxhbmdcIiwgL15jc3MkL2ksIFwiY3NzXCJdLFxuICAgICAgW1widHlwZVwiLCAvXih0ZXh0XFwvKT8oeC0pPyhzdHlsZXNoZWV0fGNzcykkL2ksIFwiY3NzXCJdLFxuICAgICAgW1widHlwZVwiLCAvLi8sIFwidGV4dC9wbGFpblwiXSxcbiAgICAgIFtudWxsLCBudWxsLCBcImNzc1wiXVxuICAgIF1cbiAgfTtcblxuICBmdW5jdGlvbiBtYXliZUJhY2t1cChzdHJlYW0sIHBhdCwgc3R5bGUpIHtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKSwgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7XG4gICAgaWYgKGNsb3NlID4gLTEpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGNsb3NlKTtcbiAgICB9IGVsc2UgaWYgKGN1ci5tYXRjaCgvPFxcLz8kLykpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7XG4gICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1cik7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIHZhciBhdHRyUmVnZXhwQ2FjaGUgPSB7fTtcbiAgZnVuY3Rpb24gZ2V0QXR0clJlZ2V4cChhdHRyKSB7XG4gICAgdmFyIHJlZ2V4cCA9IGF0dHJSZWdleHBDYWNoZVthdHRyXTtcbiAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwO1xuICAgIHJldHVybiBhdHRyUmVnZXhwQ2FjaGVbYXR0cl0gPSBuZXcgUmVnRXhwKFwiXFxcXHMrXCIgKyBhdHRyICsgXCJcXFxccyo9XFxcXHMqKCd8XFxcIik/KFteJ1xcXCJdKykoJ3xcXFwiKT9cXFxccypcIik7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBdHRyVmFsdWUodGV4dCwgYXR0cikge1xuICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goZ2V0QXR0clJlZ2V4cChhdHRyKSlcbiAgICByZXR1cm4gbWF0Y2ggPyAvXlxccyooLio/KVxccyokLy5leGVjKG1hdGNoWzJdKVsxXSA6IFwiXCJcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRhZ1JlZ2V4cCh0YWdOYW1lLCBhbmNob3JlZCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKChhbmNob3JlZCA/IFwiXlwiIDogXCJcIikgKyBcIjxcXC9cXHMqXCIgKyB0YWdOYW1lICsgXCJcXHMqPlwiLCBcImlcIik7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRUYWdzKGZyb20sIHRvKSB7XG4gICAgZm9yICh2YXIgdGFnIGluIGZyb20pIHtcbiAgICAgIHZhciBkZXN0ID0gdG9bdGFnXSB8fCAodG9bdGFnXSA9IFtdKTtcbiAgICAgIHZhciBzb3VyY2UgPSBmcm9tW3RhZ107XG4gICAgICBmb3IgKHZhciBpID0gc291cmNlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICBkZXN0LnVuc2hpZnQoc291cmNlW2ldKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ01vZGUodGFnSW5mbywgdGFnVGV4dCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFnSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNwZWMgPSB0YWdJbmZvW2ldO1xuICAgICAgaWYgKCFzcGVjWzBdIHx8IHNwZWNbMV0udGVzdChnZXRBdHRyVmFsdWUodGFnVGV4dCwgc3BlY1swXSkpKSByZXR1cm4gc3BlY1syXTtcbiAgICB9XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJodG1sbWl4ZWRcIiwgZnVuY3Rpb24gKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge1xuICAgICAgbmFtZTogXCJ4bWxcIixcbiAgICAgIGh0bWxNb2RlOiB0cnVlLFxuICAgICAgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOiBwYXJzZXJDb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yLFxuICAgICAgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogcGFyc2VyQ29uZmlnLm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWdcbiAgICB9KTtcblxuICAgIHZhciB0YWdzID0ge307XG4gICAgdmFyIGNvbmZpZ1RhZ3MgPSBwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLnRhZ3MsIGNvbmZpZ1NjcmlwdCA9IHBhcnNlckNvbmZpZyAmJiBwYXJzZXJDb25maWcuc2NyaXB0VHlwZXM7XG4gICAgYWRkVGFncyhkZWZhdWx0VGFncywgdGFncyk7XG4gICAgaWYgKGNvbmZpZ1RhZ3MpIGFkZFRhZ3MoY29uZmlnVGFncywgdGFncyk7XG4gICAgaWYgKGNvbmZpZ1NjcmlwdCkgZm9yICh2YXIgaSA9IGNvbmZpZ1NjcmlwdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIHRhZ3Muc2NyaXB0LnVuc2hpZnQoW1widHlwZVwiLCBjb25maWdTY3JpcHRbaV0ubWF0Y2hlcywgY29uZmlnU2NyaXB0W2ldLm1vZGVdKVxuXG4gICAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSksIHRhZyA9IC9cXGJ0YWdcXGIvLnRlc3Qoc3R5bGUpLCB0YWdOYW1lXG4gICAgICBpZiAodGFnICYmICEvWzw+XFxzXFwvXS8udGVzdChzdHJlYW0uY3VycmVudCgpKSAmJlxuICAgICAgICAgICh0YWdOYW1lID0gc3RhdGUuaHRtbFN0YXRlLnRhZ05hbWUgJiYgc3RhdGUuaHRtbFN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgJiZcbiAgICAgICAgICB0YWdzLmhhc093blByb3BlcnR5KHRhZ05hbWUpKSB7XG4gICAgICAgIHN0YXRlLmluVGFnID0gdGFnTmFtZSArIFwiIFwiXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGFnICYmIHRhZyAmJiAvPiQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHtcbiAgICAgICAgdmFyIGluVGFnID0gL14oW1xcU10rKSAoLiopLy5leGVjKHN0YXRlLmluVGFnKVxuICAgICAgICBzdGF0ZS5pblRhZyA9IG51bGxcbiAgICAgICAgdmFyIG1vZGVTcGVjID0gc3RyZWFtLmN1cnJlbnQoKSA9PSBcIj5cIiAmJiBmaW5kTWF0Y2hpbmdNb2RlKHRhZ3NbaW5UYWdbMV1dLCBpblRhZ1syXSlcbiAgICAgICAgdmFyIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2RlU3BlYylcbiAgICAgICAgdmFyIGVuZFRhZ0EgPSBnZXRUYWdSZWdleHAoaW5UYWdbMV0sIHRydWUpLCBlbmRUYWcgPSBnZXRUYWdSZWdleHAoaW5UYWdbMV0sIGZhbHNlKTtcbiAgICAgICAgc3RhdGUudG9rZW4gPSBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZW5kVGFnQSwgZmFsc2UpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7XG4gICAgICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2RlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCBlbmRUYWcsIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpKTtcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUubG9jYWxNb2RlID0gbW9kZTtcbiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlLCBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCBcIlwiLCBcIlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGFnKSB7XG4gICAgICAgIHN0YXRlLmluVGFnICs9IHN0cmVhbS5jdXJyZW50KClcbiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgc3RhdGUuaW5UYWcgKz0gXCIgXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGh0bWxNb2RlKTtcbiAgICAgICAgcmV0dXJuIHt0b2tlbjogaHRtbCwgaW5UYWc6IG51bGwsIGxvY2FsTW9kZTogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbCwgaHRtbFN0YXRlOiBzdGF0ZX07XG4gICAgICB9LFxuXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgbG9jYWw7XG4gICAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSB7XG4gICAgICAgICAgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS5sb2NhbE1vZGUsIHN0YXRlLmxvY2FsU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBpblRhZzogc3RhdGUuaW5UYWcsXG4gICAgICAgICAgICAgICAgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsIGxvY2FsU3RhdGU6IGxvY2FsLFxuICAgICAgICAgICAgICAgIGh0bWxTdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSl9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbihzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24gKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5sb2NhbE1vZGUgfHwgL15cXHMqPFxcLy8udGVzdCh0ZXh0QWZ0ZXIpKVxuICAgICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpO1xuICAgICAgICBlbHNlIGlmIChzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlciwgbGluZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgfSxcblxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUubG9jYWxTdGF0ZSB8fCBzdGF0ZS5odG1sU3RhdGUsIG1vZGU6IHN0YXRlLmxvY2FsTW9kZSB8fCBodG1sTW9kZX07XG4gICAgICB9XG4gICAgfTtcbiAgfSwgXCJ4bWxcIiwgXCJqYXZhc2NyaXB0XCIsIFwiY3NzXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvaHRtbFwiLCBcImh0bWxtaXhlZFwiKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQVBBO0FBQ0E7QUFjQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBQ0E7QUFPQTtBQUNBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBWEE7QUFnQkE7QUFDQTtBQWpCQTtBQW9CQTtBQUNBO0FBckJBO0FBNkJBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQS9CQTtBQTVDQTtBQStFQTtBQW5KQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/htmlmixed/htmlmixed.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/javascript/javascript.js": -/*!****************************************************************!*\ - !*** ../node_modules/codemirror/mode/javascript/javascript.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"javascript\", function (config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/; // Tokenizer\n\n var keywords = function () {\n function kw(type) {\n return {\n type: type,\n style: \"keyword\"\n };\n }\n\n var A = kw(\"keyword a\"),\n B = kw(\"keyword b\"),\n C = kw(\"keyword c\"),\n D = kw(\"keyword d\");\n var operator = kw(\"operator\"),\n atom = {\n type: \"atom\",\n style: \"atom\"\n };\n return {\n \"if\": kw(\"if\"),\n \"while\": A,\n \"with\": A,\n \"else\": B,\n \"do\": B,\n \"try\": B,\n \"finally\": B,\n \"return\": D,\n \"break\": D,\n \"continue\": D,\n \"new\": kw(\"new\"),\n \"delete\": C,\n \"void\": C,\n \"throw\": C,\n \"debugger\": kw(\"debugger\"),\n \"var\": kw(\"var\"),\n \"const\": kw(\"var\"),\n \"let\": kw(\"var\"),\n \"function\": kw(\"function\"),\n \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"),\n \"switch\": kw(\"switch\"),\n \"case\": kw(\"case\"),\n \"default\": kw(\"default\"),\n \"in\": operator,\n \"typeof\": operator,\n \"instanceof\": operator,\n \"true\": atom,\n \"false\": atom,\n \"null\": atom,\n \"undefined\": atom,\n \"NaN\": atom,\n \"Infinity\": atom,\n \"this\": kw(\"this\"),\n \"class\": kw(\"class\"),\n \"super\": kw(\"atom\"),\n \"yield\": C,\n \"export\": kw(\"export\"),\n \"import\": kw(\"import\"),\n \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false,\n next,\n inSet = false;\n\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;else if (inSet && next == \"]\") inSet = false;\n }\n\n escaped = !escaped && next == \"\\\\\";\n }\n } // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n\n\n var type, content;\n\n function ret(tp, style, cont) {\n type = tp;\n content = cont;\n return style;\n }\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d[\\d_]*(?:[eE][+\\-]?[\\d_]+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^[\\d_]*(?:n|(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (ch == \"<\" && stream.match(\"!--\") || ch == \"-\" && stream.match(\"->\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\");\n } else if (/[<>*+\\-]/.test(ch)) {\n stream.eat(ch);\n if (ch == \">\") stream.eat(ch);\n }\n }\n\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current();\n\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word];\n return ret(kw.type, kw.style, word);\n }\n\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\[\\(\\w]/, false)) return ret(\"async\", \"keyword\", word);\n }\n\n return ret(\"variable\", \"variable\", word);\n }\n }\n\n function tokenString(quote) {\n return function (stream, state) {\n var escaped = false,\n next;\n\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)) {\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false,\n ch;\n\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n\n maybeEnd = ch == \"*\";\n }\n\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false,\n next;\n\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n\n escaped = !escaped && next == \"\\\\\";\n }\n\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\"; // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) {\n // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow));\n if (m) arrow = m.index;\n }\n\n var depth = 0,\n sawSomething = false;\n\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n\n if (bracket >= 0 && bracket < 3) {\n if (!depth) {\n ++pos;\n break;\n }\n\n if (--depth == 0) {\n if (ch == \"(\") sawSomething = true;\n break;\n }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/`]/.test(ch)) {\n for (;; --pos) {\n if (pos == 0) return;\n var next = stream.string.charAt(pos - 1);\n\n if (next == ch && stream.string.charAt(pos - 2) != \"\\\\\") {\n pos--;\n break;\n }\n }\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n\n if (sawSomething && !depth) state.fatArrowAt = pos;\n } // Parser\n\n\n var atomicTypes = {\n \"atom\": true,\n \"number\": true,\n \"variable\": true,\n \"string\": true,\n \"regexp\": true,\n \"this\": true,\n \"jsonld-keyword\": true\n };\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next) {\n if (v.name == varname) return true;\n }\n\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next) {\n if (v.name == varname) return true;\n }\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc; // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n\n cx.state = state;\n cx.stream = stream;\n cx.marked = null, cx.cc = cc;\n cx.style = style;\n if (!state.lexical.hasOwnProperty(\"align\")) state.lexical.align = true;\n\n while (true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n\n if (combinator(type, content)) {\n while (cc.length && cc[cc.length - 1].lex) {\n cc.pop()();\n }\n\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n } // Combinator utils\n\n\n var cx = {\n state: null,\n column: null,\n marked: null,\n cc: null\n };\n\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) {\n cx.cc.push(arguments[i]);\n }\n }\n\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n\n function inList(name, list) {\n for (var v = list; v; v = v.next) {\n if (v.name == name) return true;\n }\n\n return false;\n }\n\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context);\n\n if (newContext != null) {\n state.context = newContext;\n return;\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars);\n return;\n }\n } // Fall through means this is global\n\n\n if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars);\n }\n\n function registerVarScoped(varname, context) {\n if (!context) {\n return null;\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev);\n if (!inner) return null;\n if (inner == context.prev) return context;\n return new Context(inner, context.vars, true);\n } else if (inList(varname, context.vars)) {\n return context;\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false);\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\";\n } // Combinators\n\n\n function Context(prev, vars, block) {\n this.prev = prev;\n this.vars = vars;\n this.block = block;\n }\n\n function Var(name, next) {\n this.name = name;\n this.next = next;\n }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null));\n\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false);\n cx.state.localVars = defaultVars;\n }\n\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true);\n cx.state.localVars = null;\n }\n\n function popcontext() {\n cx.state.localVars = cx.state.context.vars;\n cx.state.context = cx.state.context.prev;\n }\n\n popcontext.lex = true;\n\n function pushlex(type, info) {\n var result = function result() {\n var state = cx.state,\n indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev) {\n indent = outer.indented;\n }\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n\n result.lex = true;\n return result;\n }\n\n function poplex() {\n var state = cx.state;\n\n if (state.lexical.prev) {\n if (state.lexical.type == \")\") state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();else return cont(exp);\n }\n\n ;\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n\n if (type == \"class\" || isTS && value == \"interface\") {\n cx.marked = \"keyword\";\n return cont(pushlex(\"form\", type == \"class\" ? type : value), className, poplex);\n }\n\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\";\n return cont(statement);\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\";\n if (value == \"enum\") return cont(enumdef);else if (value == \"type\") return cont(typename, expect(\"operator\"), typeexpr, expect(\";\"));else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex);\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\";\n return cont(pushlex(\"form\"), expression, statement, poplex);\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\";\n return cont(statement);\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext, block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement);\n if (value == \"@\") return cont(expression, statement);\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"));\n }\n\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n\n function parenExpr(type) {\n if (type != \"(\") return pass();\n return cont(pushlex(\")\"), expression, expect(\")\"), poplex);\n }\n\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n\n if (type == \"class\" || isTS && value == \"interface\") {\n cx.marked = \"keyword\";\n return cont(pushlex(\"form\"), classExpression, poplex);\n }\n\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n if (type == \"import\") return cont(expression);\n return cont();\n }\n\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(maybeexpression);\n return maybeoperatorNoComma(type, value, false);\n }\n\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^>]|<.*?>)*>\\s*\\(/, false)) return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n\n if (type == \"quasi\") {\n return pass(quasi, me);\n }\n\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n\n if (isTS && value == \"as\") {\n cx.marked = \"keyword\";\n return cont(typeexpr, me);\n }\n\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\";\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1);\n return cont(expr);\n }\n }\n\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n\n function maybeTarget(noComma) {\n return function (type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma);else return pass(noComma ? expressionNoComma : expression);\n };\n }\n\n function target(_, value) {\n if (value == \"target\") {\n cx.marked = \"keyword\";\n return cont(maybeoperatorComma);\n }\n }\n\n function targetNoComma(_, value) {\n if (value == \"target\") {\n cx.marked = \"keyword\";\n return cont(maybeoperatorNoComma);\n }\n }\n\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n\n function property(type) {\n if (type == \"variable\") {\n cx.marked = \"property\";\n return cont();\n }\n }\n\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m; // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length;\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : cx.style + \" property\";\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop);\n }\n }\n\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function (type, value) {\n if (type == end || value == end) return pass();\n return pass(what);\n }, proceed);\n }\n\n if (type == end || value == end) return cont();\n if (sep && sep.indexOf(\";\") > -1) return pass(what);\n return cont(expect(end));\n }\n\n return function (type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++) {\n cx.cc.push(arguments[i]);\n }\n\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n\n function maybetypeOrIn(type, value) {\n if (isTS && (type == \":\" || value == \"in\")) return cont(typeexpr);\n }\n\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr);else return cont(typeexpr);\n }\n }\n\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\";\n return cont();\n }\n }\n\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\" || value == \"infer\") {\n cx.marked = \"keyword\";\n return cont(value == \"typeof\" ? expressionNoComma : typeexpr);\n }\n\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\";\n return cont(afterType);\n }\n\n if (value == \"|\" || value == \"&\") return cont(typeexpr);\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType);\n if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex, afterType);\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType, afterType);\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr);\n }\n\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr);\n }\n\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(typeprop);\n } else if (value == \"?\" || type == \"number\" || type == \"string\") {\n return cont(typeprop);\n } else if (type == \":\") {\n return cont(typeexpr);\n } else if (type == \"[\") {\n return cont(expect(\"variable\"), maybetypeOrIn, expect(\"]\"), typeprop);\n } else if (type == \"(\") {\n return pass(functiondecl, typeprop);\n }\n }\n\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg);\n if (type == \":\") return cont(typeexpr);\n if (type == \"spread\") return cont(typearg);\n return pass(typeexpr);\n }\n\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType);\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr);\n if (type == \"[\") return cont(typeexpr, expect(\"]\"), afterType);\n\n if (value == \"extends\" || value == \"implements\") {\n cx.marked = \"keyword\";\n return cont(typeexpr);\n }\n\n if (value == \"?\") return cont(typeexpr, expect(\":\"), typeexpr);\n }\n\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType);\n }\n\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault);\n }\n\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr);\n }\n\n function vardef(_, value) {\n if (value == \"enum\") {\n cx.marked = \"keyword\";\n return cont(enumdef);\n }\n\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n\n function pattern(type, value) {\n if (isTS && isModifier(value)) {\n cx.marked = \"keyword\";\n return cont(pattern);\n }\n\n if (type == \"variable\") {\n register(value);\n return cont();\n }\n\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(eltpattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n if (type == \"[\") return cont(expression, expect(']'), expect(':'), proppattern);\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n\n function eltpattern() {\n return pass(pattern, maybeAssign);\n }\n\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, poplex);\n }\n\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, forspec2);\n if (type == \"variable\") return cont(forspec2);\n return pass(forspec2);\n }\n\n function forspec2(type, value) {\n if (type == \")\") return cont();\n if (type == \";\") return cont(forspec2);\n\n if (value == \"in\" || value == \"of\") {\n cx.marked = \"keyword\";\n return cont(expression, forspec2);\n }\n\n return pass(expression, forspec2);\n }\n\n function functiondef(type, value) {\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(functiondef);\n }\n\n if (type == \"variable\") {\n register(value);\n return cont(functiondef);\n }\n\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef);\n }\n\n function functiondecl(type, value) {\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(functiondecl);\n }\n\n if (type == \"variable\") {\n register(value);\n return cont(functiondecl);\n }\n\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondecl);\n }\n\n function typename(type, value) {\n if (type == \"keyword\" || type == \"variable\") {\n cx.marked = \"type\";\n return cont(typename);\n } else if (value == \"<\") {\n return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex);\n }\n }\n\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg);\n if (type == \"spread\") return cont(funarg);\n\n if (isTS && isModifier(value)) {\n cx.marked = \"keyword\";\n return cont(funarg);\n }\n\n if (isTS && type == \"this\") return cont(maybetype, maybeAssign);\n return pass(pattern, maybetype, maybeAssign);\n }\n\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n\n function className(type, value) {\n if (type == \"variable\") {\n register(value);\n return cont(classNameAfter);\n }\n }\n\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter);\n\n if (value == \"extends\" || value == \"implements\" || isTS && type == \",\") {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n\n function classBody(type, value) {\n if (type == \"async\" || type == \"variable\" && (value == \"static\" || value == \"get\" || value == \"set\" || isTS && isModifier(value)) && cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false)) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(isTS ? classfield : functiondef, classBody);\n }\n\n if (type == \"number\" || type == \"string\") return cont(isTS ? classfield : functiondef, classBody);\n if (type == \"[\") return cont(expression, maybetype, expect(\"]\"), isTS ? classfield : functiondef, classBody);\n\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n\n if (isTS && type == \"(\") return pass(functiondecl, classBody);\n if (type == \";\" || type == \",\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody);\n }\n\n function classfield(type, value) {\n if (value == \"?\") return cont(classfield);\n if (type == \":\") return cont(typeexpr, maybeAssign);\n if (value == \"=\") return cont(expressionNoComma);\n var context = cx.state.lexical.prev,\n isInterface = context && context.info == \"interface\";\n return pass(isInterface ? functiondecl : functiondef);\n }\n\n function afterExport(type, value) {\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(maybeFrom, expect(\";\"));\n }\n\n if (value == \"default\") {\n cx.marked = \"keyword\";\n return cont(expression, expect(\";\"));\n }\n\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n\n function exportField(type, value) {\n if (value == \"as\") {\n cx.marked = \"keyword\";\n return cont(expect(\"variable\"));\n }\n\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports);\n }\n\n function maybeAs(_type, value) {\n if (value == \"as\") {\n cx.marked = \"keyword\";\n return cont(importSpec);\n }\n }\n\n function maybeFrom(_type, value) {\n if (value == \"from\") {\n cx.marked = \"keyword\";\n return cont(expression);\n }\n }\n\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex);\n }\n\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) || state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)));\n } // Interface\n\n\n return {\n startState: function startState(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && _typeof(parserConfig.globalVars) == \"object\") state.globalVars = parserConfig.globalVars;\n return state;\n },\n token: function token(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\")) state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n indent: function indent(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0),\n lexical = state.lexical,\n top; // Kludge to prevent 'maybelse' from blocking lexical scope pops\n\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;else if (c != maybeelse) break;\n }\n\n while ((lexical.type == \"stat\" || lexical.type == \"form\") && (firstChar == \"}\" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))) {\n lexical = lexical.prev;\n }\n\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\") lexical = lexical.prev;\n var type = lexical.type,\n closing = firstChar == type;\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);else if (type == \"form\" && firstChar == \"{\") return lexical.indented;else if (type == \"form\") return lexical.indented + indentUnit;else if (type == \"stat\") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);else if (lexical.align) return lexical.column + (closing ? 0 : 1);else return lexical.indented + (closing ? 0 : indentUnit);\n },\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n expressionAllowed: expressionAllowed,\n skipExpression: function skipExpression(state) {\n var top = state.cc[state.cc.length - 1];\n if (top == expression || top == expressionNoComma) state.cc.pop();\n }\n };\n });\n CodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n CodeMirror.defineMIME(\"text/javascript\", \"javascript\");\n CodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\n CodeMirror.defineMIME(\"application/javascript\", \"javascript\");\n CodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\n CodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\n CodeMirror.defineMIME(\"application/json\", {\n name: \"javascript\",\n json: true\n });\n CodeMirror.defineMIME(\"application/x-json\", {\n name: \"javascript\",\n json: true\n });\n CodeMirror.defineMIME(\"application/ld+json\", {\n name: \"javascript\",\n jsonld: true\n });\n CodeMirror.defineMIME(\"text/typescript\", {\n name: \"javascript\",\n typescript: true\n });\n CodeMirror.defineMIME(\"application/typescript\", {\n name: \"javascript\",\n typescript: true\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanM/MDYyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImphdmFzY3JpcHRcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcbiAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7XG4gIHZhciBqc29ubGRNb2RlID0gcGFyc2VyQ29uZmlnLmpzb25sZDtcbiAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpzb24gfHwganNvbmxkTW9kZTtcbiAgdmFyIGlzVFMgPSBwYXJzZXJDb25maWcudHlwZXNjcmlwdDtcbiAgdmFyIHdvcmRSRSA9IHBhcnNlckNvbmZpZy53b3JkQ2hhcmFjdGVycyB8fCAvW1xcdyRcXHhhMS1cXHVmZmZmXS87XG5cbiAgLy8gVG9rZW5pemVyXG5cbiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXtcbiAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZTogXCJrZXl3b3JkXCJ9O31cbiAgICB2YXIgQSA9IGt3KFwia2V5d29yZCBhXCIpLCBCID0ga3coXCJrZXl3b3JkIGJcIiksIEMgPSBrdyhcImtleXdvcmQgY1wiKSwgRCA9IGt3KFwia2V5d29yZCBkXCIpO1xuICAgIHZhciBvcGVyYXRvciA9IGt3KFwib3BlcmF0b3JcIiksIGF0b20gPSB7dHlwZTogXCJhdG9tXCIsIHN0eWxlOiBcImF0b21cIn07XG5cbiAgICByZXR1cm4ge1xuICAgICAgXCJpZlwiOiBrdyhcImlmXCIpLCBcIndoaWxlXCI6IEEsIFwid2l0aFwiOiBBLCBcImVsc2VcIjogQiwgXCJkb1wiOiBCLCBcInRyeVwiOiBCLCBcImZpbmFsbHlcIjogQixcbiAgICAgIFwicmV0dXJuXCI6IEQsIFwiYnJlYWtcIjogRCwgXCJjb250aW51ZVwiOiBELCBcIm5ld1wiOiBrdyhcIm5ld1wiKSwgXCJkZWxldGVcIjogQywgXCJ2b2lkXCI6IEMsIFwidGhyb3dcIjogQyxcbiAgICAgIFwiZGVidWdnZXJcIjoga3coXCJkZWJ1Z2dlclwiKSwgXCJ2YXJcIjoga3coXCJ2YXJcIiksIFwiY29uc3RcIjoga3coXCJ2YXJcIiksIFwibGV0XCI6IGt3KFwidmFyXCIpLFxuICAgICAgXCJmdW5jdGlvblwiOiBrdyhcImZ1bmN0aW9uXCIpLCBcImNhdGNoXCI6IGt3KFwiY2F0Y2hcIiksXG4gICAgICBcImZvclwiOiBrdyhcImZvclwiKSwgXCJzd2l0Y2hcIjoga3coXCJzd2l0Y2hcIiksIFwiY2FzZVwiOiBrdyhcImNhc2VcIiksIFwiZGVmYXVsdFwiOiBrdyhcImRlZmF1bHRcIiksXG4gICAgICBcImluXCI6IG9wZXJhdG9yLCBcInR5cGVvZlwiOiBvcGVyYXRvciwgXCJpbnN0YW5jZW9mXCI6IG9wZXJhdG9yLFxuICAgICAgXCJ0cnVlXCI6IGF0b20sIFwiZmFsc2VcIjogYXRvbSwgXCJudWxsXCI6IGF0b20sIFwidW5kZWZpbmVkXCI6IGF0b20sIFwiTmFOXCI6IGF0b20sIFwiSW5maW5pdHlcIjogYXRvbSxcbiAgICAgIFwidGhpc1wiOiBrdyhcInRoaXNcIiksIFwiY2xhc3NcIjoga3coXCJjbGFzc1wiKSwgXCJzdXBlclwiOiBrdyhcImF0b21cIiksXG4gICAgICBcInlpZWxkXCI6IEMsIFwiZXhwb3J0XCI6IGt3KFwiZXhwb3J0XCIpLCBcImltcG9ydFwiOiBrdyhcImltcG9ydFwiKSwgXCJleHRlbmRzXCI6IEMsXG4gICAgICBcImF3YWl0XCI6IENcbiAgICB9O1xuICB9KCk7XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiYlPTw+IT98fl5AXS87XG4gIHZhciBpc0pzb25sZEtleXdvcmQgPSAvXkAoY29udGV4dHxpZHx2YWx1ZXxsYW5ndWFnZXx0eXBlfGNvbnRhaW5lcnxsaXN0fHNldHxyZXZlcnNlfGluZGV4fGJhc2V8dm9jYWJ8Z3JhcGgpXCIvO1xuXG4gIGZ1bmN0aW9uIHJlYWRSZWdleHAoc3RyZWFtKSB7XG4gICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgaW5TZXQgPSBmYWxzZTtcbiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gXCIvXCIgJiYgIWluU2V0KSByZXR1cm47XG4gICAgICAgIGlmIChuZXh0ID09IFwiW1wiKSBpblNldCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGluU2V0ICYmIG5leHQgPT0gXCJdXCIpIGluU2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICB9XG4gIH1cblxuICAvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0XG4gIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLlxuICB2YXIgdHlwZSwgY29udGVudDtcbiAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkge1xuICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIi5cIiAmJiBzdHJlYW0ubWF0Y2goL15cXGRbXFxkX10qKD86W2VFXVsrXFwtXT9bXFxkX10rKT8vKSkge1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaChcIi4uXCIpKSB7XG4gICAgICByZXR1cm4gcmV0KFwic3ByZWFkXCIsIFwibWV0YVwiKTtcbiAgICB9IGVsc2UgaWYgKC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KGNoKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSB7XG4gICAgICByZXR1cm4gcmV0KFwiPT5cIiwgXCJvcGVyYXRvclwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiICYmIHN0cmVhbS5tYXRjaCgvXig/OnhbXFxkQS1GYS1mX10rfG9bMC03X10rfGJbMDFfXSspbj8vKSkge1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICB9IGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15bXFxkX10qKD86bnwoPzpcXC5bXFxkX10qKT8oPzpbZUVdWytcXC1dP1tcXGRfXSspPyk/Lyk7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIDEpKSB7XG4gICAgICAgIHJlYWRSZWdleHAoc3RyZWFtKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eXFxiKChbZ2lteXVzXSkoPyFbZ2lteXVzXSpcXDIpKStcXGIvKTtcbiAgICAgICAgcmV0dXJuIHJldChcInJlZ2V4cFwiLCBcInN0cmluZy0yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdChcIj1cIik7XG4gICAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJgXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5RdWFzaTtcbiAgICAgIHJldHVybiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiByZXQoXCJlcnJvclwiLCBcImVycm9yXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI8XCIgJiYgc3RyZWFtLm1hdGNoKFwiIS0tXCIpIHx8IGNoID09IFwiLVwiICYmIHN0cmVhbS5tYXRjaChcIi0+XCIpKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKVxuICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCAhPSBcIj5cIiB8fCAhc3RhdGUubGV4aWNhbCB8fCBzdGF0ZS5sZXhpY2FsLnR5cGUgIT0gXCI+XCIpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCI9XCIpKSB7XG4gICAgICAgICAgaWYgKGNoID09IFwiIVwiIHx8IGNoID09IFwiPVwiKSBzdHJlYW0uZWF0KFwiPVwiKVxuICAgICAgICB9IGVsc2UgaWYgKC9bPD4qK1xcLV0vLnRlc3QoY2gpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdChjaClcbiAgICAgICAgICBpZiAoY2ggPT0gXCI+XCIpIHN0cmVhbS5lYXQoY2gpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUod29yZFJFKTtcbiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKVxuICAgICAgaWYgKHN0YXRlLmxhc3RUeXBlICE9IFwiLlwiKSB7XG4gICAgICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkge1xuICAgICAgICAgIHZhciBrdyA9IGtleXdvcmRzW3dvcmRdXG4gICAgICAgICAgcmV0dXJuIHJldChrdy50eXBlLCBrdy5zdHlsZSwgd29yZClcbiAgICAgICAgfVxuICAgICAgICBpZiAod29yZCA9PSBcImFzeW5jXCIgJiYgc3RyZWFtLm1hdGNoKC9eKFxcc3xcXC9cXCouKj9cXCpcXC8pKltcXFtcXChcXHddLywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiByZXQoXCJhc3luY1wiLCBcImtleXdvcmRcIiwgd29yZClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQoXCJ2YXJpYWJsZVwiLCBcInZhcmlhYmxlXCIsIHdvcmQpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDtcbiAgICAgIGlmIChqc29ubGRNb2RlICYmIHN0cmVhbS5wZWVrKCkgPT0gXCJAXCIgJiYgc3RyZWFtLm1hdGNoKGlzSnNvbmxkS2V5d29yZCkpe1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgcmV0dXJuIHJldChcImpzb25sZC1rZXl3b3JkXCIsIFwibWV0YVwiKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIGJyZWFrO1xuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gcmV0KFwic3RyaW5nXCIsIFwic3RyaW5nXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCAmJiAobmV4dCA9PSBcImBcIiB8fCBuZXh0ID09IFwiJFwiICYmIHN0cmVhbS5lYXQoXCJ7XCIpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJldChcInF1YXNpXCIsIFwic3RyaW5nLTJcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gIH1cblxuICB2YXIgYnJhY2tldHMgPSBcIihbe31dKVwiO1xuICAvLyBUaGlzIGlzIGEgY3J1ZGUgbG9va2FoZWFkIHRyaWNrIHRvIHRyeSBhbmQgbm90aWNlIHRoYXQgd2UncmVcbiAgLy8gcGFyc2luZyB0aGUgYXJndW1lbnQgcGF0dGVybnMgZm9yIGEgZmF0LWFycm93IGZ1bmN0aW9uIGJlZm9yZSB3ZVxuICAvLyBhY3R1YWxseSBoaXQgdGhlIGFycm93IHRva2VuLiBJdCBvbmx5IHdvcmtzIGlmIHRoZSBhcnJvdyBpcyBvblxuICAvLyB0aGUgc2FtZSBsaW5lIGFzIHRoZSBhcmd1bWVudHMgYW5kIHRoZXJlJ3Mgbm8gc3RyYW5nZSBub2lzZVxuICAvLyAoY29tbWVudHMpIGluIGJldHdlZW4uIEZhbGxiYWNrIGlzIHRvIG9ubHkgbm90aWNlIHdoZW4gd2UgaGl0IHRoZVxuICAvLyBhcnJvdywgYW5kIG5vdCBkZWNsYXJlIHRoZSBhcmd1bWVudHMgYXMgbG9jYWxzIGZvciB0aGUgYXJyb3dcbiAgLy8gYm9keS5cbiAgZnVuY3Rpb24gZmluZEZhdEFycm93KHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuZmF0QXJyb3dBdCkgc3RhdGUuZmF0QXJyb3dBdCA9IG51bGw7XG4gICAgdmFyIGFycm93ID0gc3RyZWFtLnN0cmluZy5pbmRleE9mKFwiPT5cIiwgc3RyZWFtLnN0YXJ0KTtcbiAgICBpZiAoYXJyb3cgPCAwKSByZXR1cm47XG5cbiAgICBpZiAoaXNUUykgeyAvLyBUcnkgdG8gc2tpcCBUeXBlU2NyaXB0IHJldHVybiB0eXBlIGRlY2xhcmF0aW9ucyBhZnRlciB0aGUgYXJndW1lbnRzXG4gICAgICB2YXIgbSA9IC86XFxzKig/OlxcdysoPzo8W14+XSo+fFxcW1xcXSk/fFxce1tefV0qXFx9KVxccyokLy5leGVjKHN0cmVhbS5zdHJpbmcuc2xpY2Uoc3RyZWFtLnN0YXJ0LCBhcnJvdykpXG4gICAgICBpZiAobSkgYXJyb3cgPSBtLmluZGV4XG4gICAgfVxuXG4gICAgdmFyIGRlcHRoID0gMCwgc2F3U29tZXRoaW5nID0gZmFsc2U7XG4gICAgZm9yICh2YXIgcG9zID0gYXJyb3cgLSAxOyBwb3MgPj0gMDsgLS1wb3MpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5zdHJpbmcuY2hhckF0KHBvcyk7XG4gICAgICB2YXIgYnJhY2tldCA9IGJyYWNrZXRzLmluZGV4T2YoY2gpO1xuICAgICAgaWYgKGJyYWNrZXQgPj0gMCAmJiBicmFja2V0IDwgMykge1xuICAgICAgICBpZiAoIWRlcHRoKSB7ICsrcG9zOyBicmVhazsgfVxuICAgICAgICBpZiAoLS1kZXB0aCA9PSAwKSB7IGlmIChjaCA9PSBcIihcIikgc2F3U29tZXRoaW5nID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICAgIH0gZWxzZSBpZiAoYnJhY2tldCA+PSAzICYmIGJyYWNrZXQgPCA2KSB7XG4gICAgICAgICsrZGVwdGg7XG4gICAgICB9IGVsc2UgaWYgKHdvcmRSRS50ZXN0KGNoKSkge1xuICAgICAgICBzYXdTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICgvW1wiJ1xcL2BdLy50ZXN0KGNoKSkge1xuICAgICAgICBmb3IgKDs7IC0tcG9zKSB7XG4gICAgICAgICAgaWYgKHBvcyA9PSAwKSByZXR1cm5cbiAgICAgICAgICB2YXIgbmV4dCA9IHN0cmVhbS5zdHJpbmcuY2hhckF0KHBvcyAtIDEpXG4gICAgICAgICAgaWYgKG5leHQgPT0gY2ggJiYgc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zIC0gMikgIT0gXCJcXFxcXCIpIHsgcG9zLS07IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzYXdTb21ldGhpbmcgJiYgIWRlcHRoKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgpIHN0YXRlLmZhdEFycm93QXQgPSBwb3M7XG4gIH1cblxuICAvLyBQYXJzZXJcblxuICB2YXIgYXRvbWljVHlwZXMgPSB7XCJhdG9tXCI6IHRydWUsIFwibnVtYmVyXCI6IHRydWUsIFwidmFyaWFibGVcIjogdHJ1ZSwgXCJzdHJpbmdcIjogdHJ1ZSwgXCJyZWdleHBcIjogdHJ1ZSwgXCJ0aGlzXCI6IHRydWUsIFwianNvbmxkLWtleXdvcmRcIjogdHJ1ZX07XG5cbiAgZnVuY3Rpb24gSlNMZXhpY2FsKGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2LCBpbmZvKSB7XG4gICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkO1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIGlmIChhbGlnbiAhPSBudWxsKSB0aGlzLmFsaWduID0gYWxpZ247XG4gIH1cblxuICBmdW5jdGlvbiBpblNjb3BlKHN0YXRlLCB2YXJuYW1lKSB7XG4gICAgZm9yICh2YXIgdiA9IHN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dClcbiAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgY3ggPSBzdGF0ZS5jb250ZXh0OyBjeDsgY3ggPSBjeC5wcmV2KSB7XG4gICAgICBmb3IgKHZhciB2ID0gY3gudmFyczsgdjsgdiA9IHYubmV4dClcbiAgICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKSB7XG4gICAgdmFyIGNjID0gc3RhdGUuY2M7XG4gICAgLy8gQ29tbXVuaWNhdGUgb3VyIGNvbnRleHQgdG8gdGhlIGNvbWJpbmF0b3JzLlxuICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pXG4gICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFtID0gc3RyZWFtOyBjeC5tYXJrZWQgPSBudWxsLCBjeC5jYyA9IGNjOyBjeC5zdHlsZSA9IHN0eWxlO1xuXG4gICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikpXG4gICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gdHJ1ZTtcblxuICAgIHdoaWxlKHRydWUpIHtcbiAgICAgIHZhciBjb21iaW5hdG9yID0gY2MubGVuZ3RoID8gY2MucG9wKCkgOiBqc29uTW9kZSA/IGV4cHJlc3Npb24gOiBzdGF0ZW1lbnQ7XG4gICAgICBpZiAoY29tYmluYXRvcih0eXBlLCBjb250ZW50KSkge1xuICAgICAgICB3aGlsZShjYy5sZW5ndGggJiYgY2NbY2MubGVuZ3RoIC0gMV0ubGV4KVxuICAgICAgICAgIGNjLnBvcCgpKCk7XG4gICAgICAgIGlmIChjeC5tYXJrZWQpIHJldHVybiBjeC5tYXJrZWQ7XG4gICAgICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiBpblNjb3BlKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tYmluYXRvciB1dGlsc1xuXG4gIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgY29sdW1uOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTtcbiAgZnVuY3Rpb24gcGFzcygpIHtcbiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgZnVuY3Rpb24gY29udCgpIHtcbiAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gaW5MaXN0KG5hbWUsIGxpc3QpIHtcbiAgICBmb3IgKHZhciB2ID0gbGlzdDsgdjsgdiA9IHYubmV4dCkgaWYgKHYubmFtZSA9PSBuYW1lKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3Rlcih2YXJuYW1lKSB7XG4gICAgdmFyIHN0YXRlID0gY3guc3RhdGU7XG4gICAgY3gubWFya2VkID0gXCJkZWZcIjtcbiAgICBpZiAoc3RhdGUuY29udGV4dCkge1xuICAgICAgaWYgKHN0YXRlLmxleGljYWwuaW5mbyA9PSBcInZhclwiICYmIHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5ibG9jaykge1xuICAgICAgICAvLyBGSVhNRSBmdW5jdGlvbiBkZWNscyBhcmUgYWxzbyBub3QgYmxvY2sgc2NvcGVkXG4gICAgICAgIHZhciBuZXdDb250ZXh0ID0gcmVnaXN0ZXJWYXJTY29wZWQodmFybmFtZSwgc3RhdGUuY29udGV4dClcbiAgICAgICAgaWYgKG5ld0NvbnRleHQgIT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXdDb250ZXh0XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluTGlzdCh2YXJuYW1lLCBzdGF0ZS5sb2NhbFZhcnMpKSB7XG4gICAgICAgIHN0YXRlLmxvY2FsVmFycyA9IG5ldyBWYXIodmFybmFtZSwgc3RhdGUubG9jYWxWYXJzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRmFsbCB0aHJvdWdoIG1lYW5zIHRoaXMgaXMgZ2xvYmFsXG4gICAgaWYgKHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzICYmICFpbkxpc3QodmFybmFtZSwgc3RhdGUuZ2xvYmFsVmFycykpXG4gICAgICBzdGF0ZS5nbG9iYWxWYXJzID0gbmV3IFZhcih2YXJuYW1lLCBzdGF0ZS5nbG9iYWxWYXJzKVxuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyVmFyU2NvcGVkKHZhcm5hbWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmIChjb250ZXh0LmJsb2NrKSB7XG4gICAgICB2YXIgaW5uZXIgPSByZWdpc3RlclZhclNjb3BlZCh2YXJuYW1lLCBjb250ZXh0LnByZXYpXG4gICAgICBpZiAoIWlubmVyKSByZXR1cm4gbnVsbFxuICAgICAgaWYgKGlubmVyID09IGNvbnRleHQucHJldikgcmV0dXJuIGNvbnRleHRcbiAgICAgIHJldHVybiBuZXcgQ29udGV4dChpbm5lciwgY29udGV4dC52YXJzLCB0cnVlKVxuICAgIH0gZWxzZSBpZiAoaW5MaXN0KHZhcm5hbWUsIGNvbnRleHQudmFycykpIHtcbiAgICAgIHJldHVybiBjb250ZXh0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29udGV4dChjb250ZXh0LnByZXYsIG5ldyBWYXIodmFybmFtZSwgY29udGV4dC52YXJzKSwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNNb2RpZmllcihuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUgPT0gXCJwdWJsaWNcIiB8fCBuYW1lID09IFwicHJpdmF0ZVwiIHx8IG5hbWUgPT0gXCJwcm90ZWN0ZWRcIiB8fCBuYW1lID09IFwiYWJzdHJhY3RcIiB8fCBuYW1lID09IFwicmVhZG9ubHlcIlxuICB9XG5cbiAgLy8gQ29tYmluYXRvcnNcblxuICBmdW5jdGlvbiBDb250ZXh0KHByZXYsIHZhcnMsIGJsb2NrKSB7IHRoaXMucHJldiA9IHByZXY7IHRoaXMudmFycyA9IHZhcnM7IHRoaXMuYmxvY2sgPSBibG9jayB9XG4gIGZ1bmN0aW9uIFZhcihuYW1lLCBuZXh0KSB7IHRoaXMubmFtZSA9IG5hbWU7IHRoaXMubmV4dCA9IG5leHQgfVxuXG4gIHZhciBkZWZhdWx0VmFycyA9IG5ldyBWYXIoXCJ0aGlzXCIsIG5ldyBWYXIoXCJhcmd1bWVudHNcIiwgbnVsbCkpXG4gIGZ1bmN0aW9uIHB1c2hjb250ZXh0KCkge1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChjeC5zdGF0ZS5jb250ZXh0LCBjeC5zdGF0ZS5sb2NhbFZhcnMsIGZhbHNlKVxuICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IGRlZmF1bHRWYXJzXG4gIH1cbiAgZnVuY3Rpb24gcHVzaGJsb2NrY29udGV4dCgpIHtcbiAgICBjeC5zdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoY3guc3RhdGUuY29udGV4dCwgY3guc3RhdGUubG9jYWxWYXJzLCB0cnVlKVxuICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IG51bGxcbiAgfVxuICBmdW5jdGlvbiBwb3Bjb250ZXh0KCkge1xuICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IGN4LnN0YXRlLmNvbnRleHQudmFyc1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXZcbiAgfVxuICBwb3Bjb250ZXh0LmxleCA9IHRydWVcbiAgZnVuY3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGUsIGluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSBcInN0YXRcIikgaW5kZW50ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgZm9yICh2YXIgb3V0ZXIgPSBzdGF0ZS5sZXhpY2FsOyBvdXRlciAmJiBvdXRlci50eXBlID09IFwiKVwiICYmIG91dGVyLmFsaWduOyBvdXRlciA9IG91dGVyLnByZXYpXG4gICAgICAgIGluZGVudCA9IG91dGVyLmluZGVudGVkO1xuICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoaW5kZW50LCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pO1xuICAgIH07XG4gICAgcmVzdWx0LmxleCA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBmdW5jdGlvbiBwb3BsZXgoKSB7XG4gICAgdmFyIHN0YXRlID0gY3guc3RhdGU7XG4gICAgaWYgKHN0YXRlLmxleGljYWwucHJldikge1xuICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSBcIilcIilcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkO1xuICAgICAgc3RhdGUubGV4aWNhbCA9IHN0YXRlLmxleGljYWwucHJldjtcbiAgICB9XG4gIH1cbiAgcG9wbGV4LmxleCA9IHRydWU7XG5cbiAgZnVuY3Rpb24gZXhwZWN0KHdhbnRlZCkge1xuICAgIGZ1bmN0aW9uIGV4cCh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7XG4gICAgICBlbHNlIGlmICh3YW50ZWQgPT0gXCI7XCIgfHwgdHlwZSA9PSBcIn1cIiB8fCB0eXBlID09IFwiKVwiIHx8IHR5cGUgPT0gXCJdXCIpIHJldHVybiBwYXNzKCk7XG4gICAgICBlbHNlIHJldHVybiBjb250KGV4cCk7XG4gICAgfTtcbiAgICByZXR1cm4gZXhwO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhdGVtZW50KHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJcIikgcmV0dXJuIGNvbnQocHVzaGxleChcInZhcmRlZlwiLCB2YWx1ZSksIHZhcmRlZiwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYVwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGFyZW5FeHByLCBzdGF0ZW1lbnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGJcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgZFwiKSByZXR1cm4gY3guc3RyZWFtLm1hdGNoKC9eXFxzKiQvLCBmYWxzZSkgPyBjb250KCkgOiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJkZWJ1Z2dlclwiKSByZXR1cm4gY29udChleHBlY3QoXCI7XCIpKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIn1cIiksIHB1c2hibG9ja2NvbnRleHQsIGJsb2NrLCBwb3BsZXgsIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gY29udCgpO1xuICAgIGlmICh0eXBlID09IFwiaWZcIikge1xuICAgICAgaWYgKGN4LnN0YXRlLmxleGljYWwuaW5mbyA9PSBcImVsc2VcIiAmJiBjeC5zdGF0ZS5jY1tjeC5zdGF0ZS5jYy5sZW5ndGggLSAxXSA9PSBwb3BsZXgpXG4gICAgICAgIGN4LnN0YXRlLmNjLnBvcCgpKCk7XG4gICAgICByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGFyZW5FeHByLCBzdGF0ZW1lbnQsIHBvcGxleCwgbWF5YmVlbHNlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gICAgaWYgKHR5cGUgPT0gXCJmb3JcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIGZvcnNwZWMsIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImNsYXNzXCIgfHwgKGlzVFMgJiYgdmFsdWUgPT0gXCJpbnRlcmZhY2VcIikpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiLCB0eXBlID09IFwiY2xhc3NcIiA/IHR5cGUgOiB2YWx1ZSksIGNsYXNzTmFtZSwgcG9wbGV4KVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiZGVjbGFyZVwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiAodmFsdWUgPT0gXCJtb2R1bGVcIiB8fCB2YWx1ZSA9PSBcImVudW1cIiB8fCB2YWx1ZSA9PSBcInR5cGVcIikgJiYgY3guc3RyZWFtLm1hdGNoKC9eXFxzKlxcdy8sIGZhbHNlKSkge1xuICAgICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgICBpZiAodmFsdWUgPT0gXCJlbnVtXCIpIHJldHVybiBjb250KGVudW1kZWYpO1xuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInR5cGVcIikgcmV0dXJuIGNvbnQodHlwZW5hbWUsIGV4cGVjdChcIm9wZXJhdG9yXCIpLCB0eXBlZXhwciwgZXhwZWN0KFwiO1wiKSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHBhdHRlcm4sIGV4cGVjdChcIntcIiksIHB1c2hsZXgoXCJ9XCIpLCBibG9jaywgcG9wbGV4LCBwb3BsZXgpXG4gICAgICB9IGVsc2UgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJuYW1lc3BhY2VcIikge1xuICAgICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgICByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgpXG4gICAgICB9IGVsc2UgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJhYnN0cmFjdFwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBtYXliZWxhYmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJzd2l0Y2hcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHBhcmVuRXhwciwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiwgXCJzd2l0Y2hcIiksIHB1c2hibG9ja2NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCwgcG9wY29udGV4dCk7XG4gICAgaWYgKHR5cGUgPT0gXCJjYXNlXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiZGVmYXVsdFwiKSByZXR1cm4gY29udChleHBlY3QoXCI6XCIpKTtcbiAgICBpZiAodHlwZSA9PSBcImNhdGNoXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwdXNoY29udGV4dCwgbWF5YmVDYXRjaEJpbmRpbmcsIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImV4cG9ydFwiKSByZXR1cm4gY29udChwdXNobGV4KFwic3RhdFwiKSwgYWZ0ZXJFeHBvcnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJpbXBvcnRcIikgcmV0dXJuIGNvbnQocHVzaGxleChcInN0YXRcIiksIGFmdGVySW1wb3J0LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiYXN5bmNcIikgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgIGlmICh2YWx1ZSA9PSBcIkBcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgc3RhdGVtZW50KVxuICAgIHJldHVybiBwYXNzKHB1c2hsZXgoXCJzdGF0XCIpLCBleHByZXNzaW9uLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlQ2F0Y2hCaW5kaW5nKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQoZnVuYXJnLCBleHBlY3QoXCIpXCIpKVxuICB9XG4gIGZ1bmN0aW9uIGV4cHJlc3Npb24odHlwZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCB0cnVlKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbkV4cHIodHlwZSkge1xuICAgIGlmICh0eXBlICE9IFwiKFwiKSByZXR1cm4gcGFzcygpXG4gICAgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGV4cHJlc3Npb24sIGV4cGVjdChcIilcIiksIHBvcGxleClcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICBpZiAoY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQpIHtcbiAgICAgIHZhciBib2R5ID0gbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0JvZHk7XG4gICAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoXCIpXCIpLCBjb21tYXNlcChmdW5hcmcsIFwiKVwiKSwgcG9wbGV4LCBleHBlY3QoXCI9PlwiKSwgYm9keSwgcG9wY29udGV4dCk7XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MocHVzaGNvbnRleHQsIHBhdHRlcm4sIGV4cGVjdChcIj0+XCIpLCBib2R5LCBwb3Bjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYTtcbiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwiY2xhc3NcIiB8fCAoaXNUUyAmJiB2YWx1ZSA9PSBcImludGVyZmFjZVwiKSkgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIGNsYXNzRXhwcmVzc2lvbiwgcG9wbGV4KTsgfVxuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBjXCIgfHwgdHlwZSA9PSBcImFzeW5jXCIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCIpXCIpLCBwb3BsZXgsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwib3BlcmF0b3JcIiB8fCB0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgYXJyYXlMaXRlcmFsLCBwb3BsZXgsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udENvbW1hc2VwKG9ianByb3AsIFwifVwiLCBudWxsLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcInF1YXNpXCIpIHJldHVybiBwYXNzKHF1YXNpLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIm5ld1wiKSByZXR1cm4gY29udChtYXliZVRhcmdldChub0NvbW1hKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJpbXBvcnRcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIGNvbnQoKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb24odHlwZSkge1xuICAgIGlmICh0eXBlLm1hdGNoKC9bO1xcfVxcKVxcXSxdLykpIHJldHVybiBwYXNzKCk7XG4gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gIH1cblxuICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yQ29tbWEodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcIixcIikgcmV0dXJuIGNvbnQobWF5YmVleHByZXNzaW9uKTtcbiAgICByZXR1cm4gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yTm9Db21tYSh0eXBlLCB2YWx1ZSwgbm9Db21tYSkge1xuICAgIHZhciBtZSA9IG5vQ29tbWEgPT0gZmFsc2UgPyBtYXliZW9wZXJhdG9yQ29tbWEgOiBtYXliZW9wZXJhdG9yTm9Db21tYTtcbiAgICB2YXIgZXhwciA9IG5vQ29tbWEgPT0gZmFsc2UgPyBleHByZXNzaW9uIDogZXhwcmVzc2lvbk5vQ29tbWE7XG4gICAgaWYgKHR5cGUgPT0gXCI9PlwiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0JvZHksIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwib3BlcmF0b3JcIikge1xuICAgICAgaWYgKC9cXCtcXCt8LS0vLnRlc3QodmFsdWUpIHx8IGlzVFMgJiYgdmFsdWUgPT0gXCIhXCIpIHJldHVybiBjb250KG1lKTtcbiAgICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiPFwiICYmIGN4LnN0cmVhbS5tYXRjaCgvXihbXj5dfDwuKj8+KSo+XFxzKlxcKC8sIGZhbHNlKSlcbiAgICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVleHByLCBcIj5cIiksIHBvcGxleCwgbWUpO1xuICAgICAgaWYgKHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoXCI6XCIpLCBleHByKTtcbiAgICAgIHJldHVybiBjb250KGV4cHIpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInF1YXNpXCIpIHsgcmV0dXJuIHBhc3MocXVhc2ksIG1lKTsgfVxuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250Q29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsIFwiKVwiLCBcImNhbGxcIiwgbWUpO1xuICAgIGlmICh0eXBlID09IFwiLlwiKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWUpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCJdXCIpLCBwb3BsZXgsIG1lKTtcbiAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcImFzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHR5cGVleHByLCBtZSkgfVxuICAgIGlmICh0eXBlID09IFwicmVnZXhwXCIpIHtcbiAgICAgIGN4LnN0YXRlLmxhc3RUeXBlID0gY3gubWFya2VkID0gXCJvcGVyYXRvclwiXG4gICAgICBjeC5zdHJlYW0uYmFja1VwKGN4LnN0cmVhbS5wb3MgLSBjeC5zdHJlYW0uc3RhcnQgLSAxKVxuICAgICAgcmV0dXJuIGNvbnQoZXhwcilcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcXVhc2kodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSAhPSBcInF1YXNpXCIpIHJldHVybiBwYXNzKCk7XG4gICAgaWYgKHZhbHVlLnNsaWNlKHZhbHVlLmxlbmd0aCAtIDIpICE9IFwiJHtcIikgcmV0dXJuIGNvbnQocXVhc2kpO1xuICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNvbnRpbnVlUXVhc2kpO1xuICB9XG4gIGZ1bmN0aW9uIGNvbnRpbnVlUXVhc2kodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwifVwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInN0cmluZy0yXCI7XG4gICAgICBjeC5zdGF0ZS50b2tlbml6ZSA9IHRva2VuUXVhc2k7XG4gICAgICByZXR1cm4gY29udChxdWFzaSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFycm93Qm9keSh0eXBlKSB7XG4gICAgZmluZEZhdEFycm93KGN4LnN0cmVhbSwgY3guc3RhdGUpO1xuICAgIHJldHVybiBwYXNzKHR5cGUgPT0gXCJ7XCIgPyBzdGF0ZW1lbnQgOiBleHByZXNzaW9uKTtcbiAgfVxuICBmdW5jdGlvbiBhcnJvd0JvZHlOb0NvbW1hKHR5cGUpIHtcbiAgICBmaW5kRmF0QXJyb3coY3guc3RyZWFtLCBjeC5zdGF0ZSk7XG4gICAgcmV0dXJuIHBhc3ModHlwZSA9PSBcIntcIiA/IHN0YXRlbWVudCA6IGV4cHJlc3Npb25Ob0NvbW1hKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZVRhcmdldChub0NvbW1hKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09IFwiLlwiKSByZXR1cm4gY29udChub0NvbW1hID8gdGFyZ2V0Tm9Db21tYSA6IHRhcmdldCk7XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiBpc1RTKSByZXR1cm4gY29udChtYXliZVR5cGVBcmdzLCBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWEpXG4gICAgICBlbHNlIHJldHVybiBwYXNzKG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdGFyZ2V0KF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwidGFyZ2V0XCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KG1heWJlb3BlcmF0b3JDb21tYSk7IH1cbiAgfVxuICBmdW5jdGlvbiB0YXJnZXROb0NvbW1hKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwidGFyZ2V0XCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KG1heWJlb3BlcmF0b3JOb0NvbW1hKTsgfVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHBhc3MobWF5YmVvcGVyYXRvckNvbW1hLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIHByb3BlcnR5KHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7IHJldHVybiBjb250KCk7fVxuICB9XG4gIGZ1bmN0aW9uIG9ianByb3AodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImFzeW5jXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICAgIHJldHVybiBjb250KG9ianByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgY3guc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICAgIGlmICh2YWx1ZSA9PSBcImdldFwiIHx8IHZhbHVlID09IFwic2V0XCIpIHJldHVybiBjb250KGdldHRlclNldHRlcik7XG4gICAgICB2YXIgbSAvLyBXb3JrIGFyb3VuZCBmYXQtYXJyb3ctZGV0ZWN0aW9uIGNvbXBsaWNhdGlvbiBmb3IgZGV0ZWN0aW5nIHR5cGVzY3JpcHQgdHlwZWQgYXJyb3cgcGFyYW1zXG4gICAgICBpZiAoaXNUUyAmJiBjeC5zdGF0ZS5mYXRBcnJvd0F0ID09IGN4LnN0cmVhbS5zdGFydCAmJiAobSA9IGN4LnN0cmVhbS5tYXRjaCgvXlxccyo6XFxzKi8sIGZhbHNlKSkpXG4gICAgICAgIGN4LnN0YXRlLmZhdEFycm93QXQgPSBjeC5zdHJlYW0ucG9zICsgbVswXS5sZW5ndGhcbiAgICAgIHJldHVybiBjb250KGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBqc29ubGRNb2RlID8gXCJwcm9wZXJ0eVwiIDogKGN4LnN0eWxlICsgXCIgcHJvcGVydHlcIik7XG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImpzb25sZC1rZXl3b3JkXCIpIHtcbiAgICAgIHJldHVybiBjb250KGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmIChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgcmV0dXJuIGNvbnQob2JqcHJvcClcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJbXCIpIHtcbiAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIG1heWJldHlwZSwgZXhwZWN0KFwiXVwiKSwgYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikge1xuICAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEsIGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIipcIikge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgICByZXR1cm4gY29udChvYmpwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIHJldHVybiBwYXNzKGFmdGVycHJvcClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0dGVyU2V0dGVyKHR5cGUpIHtcbiAgICBpZiAodHlwZSAhPSBcInZhcmlhYmxlXCIpIHJldHVybiBwYXNzKGFmdGVycHJvcCk7XG4gICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTtcbiAgfVxuICBmdW5jdGlvbiBhZnRlcnByb3AodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSk7XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVmKTtcbiAgfVxuICBmdW5jdGlvbiBjb21tYXNlcCh3aGF0LCBlbmQsIHNlcCkge1xuICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSwgdmFsdWUpIHtcbiAgICAgIGlmIChzZXAgPyBzZXAuaW5kZXhPZih0eXBlKSA+IC0xIDogdHlwZSA9PSBcIixcIikge1xuICAgICAgICB2YXIgbGV4ID0gY3guc3RhdGUubGV4aWNhbDtcbiAgICAgICAgaWYgKGxleC5pbmZvID09IFwiY2FsbFwiKSBsZXgucG9zID0gKGxleC5wb3MgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gY29udChmdW5jdGlvbih0eXBlLCB2YWx1ZSkge1xuICAgICAgICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJldHVybiBwYXNzKClcbiAgICAgICAgICByZXR1cm4gcGFzcyh3aGF0KVxuICAgICAgICB9LCBwcm9jZWVkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJldHVybiBjb250KCk7XG4gICAgICBpZiAoc2VwICYmIHNlcC5pbmRleE9mKFwiO1wiKSA+IC0xKSByZXR1cm4gcGFzcyh3aGF0KVxuICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KGVuZCkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJldHVybiBjb250KCk7XG4gICAgICByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGNvbnRDb21tYXNlcCh3aGF0LCBlbmQsIGluZm8pIHtcbiAgICBmb3IgKHZhciBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICByZXR1cm4gY29udChwdXNobGV4KGVuZCwgaW5mbyksIGNvbW1hc2VwKHdoYXQsIGVuZCksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gYmxvY2sodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwifVwiKSByZXR1cm4gY29udCgpO1xuICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJldHlwZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpO1xuICAgICAgaWYgKHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udChtYXliZXR5cGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZXR5cGVPckluKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKGlzVFMgJiYgKHR5cGUgPT0gXCI6XCIgfHwgdmFsdWUgPT0gXCJpblwiKSkgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVyZXR0eXBlKHR5cGUpIHtcbiAgICBpZiAoaXNUUyAmJiB0eXBlID09IFwiOlwiKSB7XG4gICAgICBpZiAoY3guc3RyZWFtLm1hdGNoKC9eXFxzKlxcdytcXHMraXNcXGIvLCBmYWxzZSkpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGlzS1csIHR5cGVleHByKVxuICAgICAgZWxzZSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaXNLVyhfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImlzXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udCgpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVleHByKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwia2V5b2ZcIiB8fCB2YWx1ZSA9PSBcInR5cGVvZlwiIHx8IHZhbHVlID09IFwiaW5mZXJcIikge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KHZhbHVlID09IFwidHlwZW9mXCIgPyBleHByZXNzaW9uTm9Db21tYSA6IHR5cGVleHByKVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgdmFsdWUgPT0gXCJ2b2lkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwidHlwZVwiXG4gICAgICByZXR1cm4gY29udChhZnRlclR5cGUpXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PSBcInxcIiB8fCB2YWx1ZSA9PSBcIiZcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIiB8fCB0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcImF0b21cIikgcmV0dXJuIGNvbnQoYWZ0ZXJUeXBlKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIGNvbW1hc2VwKHR5cGVleHByLCBcIl1cIiwgXCIsXCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIn1cIiksIGNvbW1hc2VwKHR5cGVwcm9wLCBcIn1cIiwgXCIsO1wiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KGNvbW1hc2VwKHR5cGVhcmcsIFwiKVwiKSwgbWF5YmVSZXR1cm5UeXBlLCBhZnRlclR5cGUpXG4gICAgaWYgKHR5cGUgPT0gXCI8XCIpIHJldHVybiBjb250KGNvbW1hc2VwKHR5cGVleHByLCBcIj5cIiksIHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlUmV0dXJuVHlwZSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI9PlwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiB0eXBlcHJvcCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiB8fCBjeC5zdHlsZSA9PSBcImtleXdvcmRcIikge1xuICAgICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiXG4gICAgICByZXR1cm4gY29udCh0eXBlcHJvcClcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwiP1wiIHx8IHR5cGUgPT0gXCJudW1iZXJcIiB8fCB0eXBlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBjb250KHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIjpcIikge1xuICAgICAgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiW1wiKSB7XG4gICAgICByZXR1cm4gY29udChleHBlY3QoXCJ2YXJpYWJsZVwiKSwgbWF5YmV0eXBlT3JJbiwgZXhwZWN0KFwiXVwiKSwgdHlwZXByb3ApXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiKFwiKSB7XG4gICAgICByZXR1cm4gcGFzcyhmdW5jdGlvbmRlY2wsIHR5cGVwcm9wKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0eXBlYXJnKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGN4LnN0cmVhbS5tYXRjaCgvXlxccypbPzpdLywgZmFsc2UpIHx8IHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udCh0eXBlYXJnKVxuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udCh0eXBlYXJnKVxuICAgIHJldHVybiBwYXNzKHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIGFmdGVyVHlwZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVleHByLCBcIj5cIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICAgIGlmICh2YWx1ZSA9PSBcInxcIiB8fCB0eXBlID09IFwiLlwiIHx8IHZhbHVlID09IFwiJlwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIGV4cGVjdChcIl1cIiksIGFmdGVyVHlwZSlcbiAgICBpZiAodmFsdWUgPT0gXCJleHRlbmRzXCIgfHwgdmFsdWUgPT0gXCJpbXBsZW1lbnRzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHR5cGVleHByKSB9XG4gICAgaWYgKHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udCh0eXBlZXhwciwgZXhwZWN0KFwiOlwiKSwgdHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUeXBlQXJncyhfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVleHByLCBcIj5cIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVwYXJhbSgpIHtcbiAgICByZXR1cm4gcGFzcyh0eXBlZXhwciwgbWF5YmVUeXBlRGVmYXVsdClcbiAgfVxuICBmdW5jdGlvbiBtYXliZVR5cGVEZWZhdWx0KF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPVwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiB2YXJkZWYoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJlbnVtXCIpIHtjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZW51bWRlZil9XG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbiwgdmFyZGVmQ29udCk7XG4gIH1cbiAgZnVuY3Rpb24gcGF0dGVybih0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChwYXR0ZXJuKSB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTsgfVxuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KHBhdHRlcm4pO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udENvbW1hc2VwKGVsdHBhdHRlcm4sIFwiXVwiKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChwcm9wcGF0dGVybiwgXCJ9XCIpO1xuICB9XG4gIGZ1bmN0aW9uIHByb3BwYXR0ZXJuKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmICFjeC5zdHJlYW0ubWF0Y2goL15cXHMqOi8sIGZhbHNlKSkge1xuICAgICAgcmVnaXN0ZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGNvbnQobWF5YmVBc3NpZ24pO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChwYXR0ZXJuKTtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIHBhc3MoKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCddJyksIGV4cGVjdCgnOicpLCBwcm9wcGF0dGVybik7XG4gICAgcmV0dXJuIGNvbnQoZXhwZWN0KFwiOlwiKSwgcGF0dGVybiwgbWF5YmVBc3NpZ24pO1xuICB9XG4gIGZ1bmN0aW9uIGVsdHBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmVBc3NpZ24pXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVBc3NpZ24oX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPVwiKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSk7XG4gIH1cbiAgZnVuY3Rpb24gdmFyZGVmQ29udCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KHZhcmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGJcIiAmJiB2YWx1ZSA9PSBcImVsc2VcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiwgXCJlbHNlXCIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImF3YWl0XCIpIHJldHVybiBjb250KGZvcnNwZWMpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgZm9yc3BlYzEsIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyXCIpIHJldHVybiBjb250KHZhcmRlZiwgZm9yc3BlYzIpO1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIGNvbnQoZm9yc3BlYzIpO1xuICAgIHJldHVybiBwYXNzKGZvcnNwZWMyKVxuICB9XG4gIGZ1bmN0aW9uIGZvcnNwZWMyKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIpXCIpIHJldHVybiBjb250KClcbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuIGNvbnQoZm9yc3BlYzIpXG4gICAgaWYgKHZhbHVlID09IFwiaW5cIiB8fCB2YWx1ZSA9PSBcIm9mXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24sIGZvcnNwZWMyKSB9XG4gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbiwgZm9yc3BlYzIpXG4gIH1cbiAgZnVuY3Rpb24gZnVuY3Rpb25kZWYodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHtjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO31cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgbWF5YmVyZXR0eXBlLCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpO1xuICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleCwgZnVuY3Rpb25kZWYpXG4gIH1cbiAgZnVuY3Rpb24gZnVuY3Rpb25kZWNsKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7Y3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGZ1bmN0aW9uZGVjbCk7fVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWNsKTt9XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgbWF5YmVyZXR0eXBlLCBwb3Bjb250ZXh0KTtcbiAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgsIGZ1bmN0aW9uZGVjbClcbiAgfVxuICBmdW5jdGlvbiB0eXBlbmFtZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZFwiIHx8IHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInR5cGVcIlxuICAgICAgcmV0dXJuIGNvbnQodHlwZW5hbWUpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIjxcIikge1xuICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIkBcIikgY29udChleHByZXNzaW9uLCBmdW5hcmcpXG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQoZnVuYXJnKTtcbiAgICBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZnVuYXJnKTsgfVxuICAgIGlmIChpc1RTICYmIHR5cGUgPT0gXCJ0aGlzXCIpIHJldHVybiBjb250KG1heWJldHlwZSwgbWF5YmVBc3NpZ24pXG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbik7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NFeHByZXNzaW9uKHR5cGUsIHZhbHVlKSB7XG4gICAgLy8gQ2xhc3MgZXhwcmVzc2lvbnMgbWF5IGhhdmUgYW4gb3B0aW9uYWwgbmFtZS5cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjbGFzc05hbWUodHlwZSwgdmFsdWUpO1xuICAgIHJldHVybiBjbGFzc05hbWVBZnRlcih0eXBlLCB2YWx1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChjbGFzc05hbWVBZnRlcik7fVxuICB9XG4gIGZ1bmN0aW9uIGNsYXNzTmFtZUFmdGVyKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleCwgY2xhc3NOYW1lQWZ0ZXIpXG4gICAgaWYgKHZhbHVlID09IFwiZXh0ZW5kc1wiIHx8IHZhbHVlID09IFwiaW1wbGVtZW50c1wiIHx8IChpc1RTICYmIHR5cGUgPT0gXCIsXCIpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gXCJpbXBsZW1lbnRzXCIpIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQoaXNUUyA/IHR5cGVleHByIDogZXhwcmVzc2lvbiwgY2xhc3NOYW1lQWZ0ZXIpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIn1cIiksIGNsYXNzQm9keSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBjbGFzc0JvZHkodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImFzeW5jXCIgfHxcbiAgICAgICAgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmXG4gICAgICAgICAodmFsdWUgPT0gXCJzdGF0aWNcIiB8fCB2YWx1ZSA9PSBcImdldFwiIHx8IHZhbHVlID09IFwic2V0XCIgfHwgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpKSAmJlxuICAgICAgICAgY3guc3RyZWFtLm1hdGNoKC9eXFxzK1tcXHckXFx4YTEtXFx1ZmZmZl0vLCBmYWxzZSkpKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiB8fCBjeC5zdHlsZSA9PSBcImtleXdvcmRcIikge1xuICAgICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgcmV0dXJuIGNvbnQoaXNUUyA/IGNsYXNzZmllbGQgOiBmdW5jdGlvbmRlZiwgY2xhc3NCb2R5KTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJudW1iZXJcIiB8fCB0eXBlID09IFwic3RyaW5nXCIpIHJldHVybiBjb250KGlzVFMgPyBjbGFzc2ZpZWxkIDogZnVuY3Rpb25kZWYsIGNsYXNzQm9keSk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpXG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIGlzVFMgPyBjbGFzc2ZpZWxkIDogZnVuY3Rpb25kZWYsIGNsYXNzQm9keSlcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTtcbiAgICB9XG4gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSBcIihcIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWNsLCBjbGFzc0JvZHkpXG4gICAgaWYgKHR5cGUgPT0gXCI7XCIgfHwgdHlwZSA9PSBcIixcIikgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodmFsdWUgPT0gXCJAXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNsYXNzQm9keSlcbiAgfVxuICBmdW5jdGlvbiBjbGFzc2ZpZWxkKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udChjbGFzc2ZpZWxkKVxuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udCh0eXBlZXhwciwgbWF5YmVBc3NpZ24pXG4gICAgaWYgKHZhbHVlID09IFwiPVwiKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSlcbiAgICB2YXIgY29udGV4dCA9IGN4LnN0YXRlLmxleGljYWwucHJldiwgaXNJbnRlcmZhY2UgPSBjb250ZXh0ICYmIGNvbnRleHQuaW5mbyA9PSBcImludGVyZmFjZVwiXG4gICAgcmV0dXJuIHBhc3MoaXNJbnRlcmZhY2UgPyBmdW5jdGlvbmRlY2wgOiBmdW5jdGlvbmRlZilcbiAgfVxuICBmdW5jdGlvbiBhZnRlckV4cG9ydCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQobWF5YmVGcm9tLCBleHBlY3QoXCI7XCIpKTsgfVxuICAgIGlmICh2YWx1ZSA9PSBcImRlZmF1bHRcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiO1wiKSk7IH1cbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnQoY29tbWFzZXAoZXhwb3J0RmllbGQsIFwifVwiKSwgbWF5YmVGcm9tLCBleHBlY3QoXCI7XCIpKTtcbiAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQpO1xuICB9XG4gIGZ1bmN0aW9uIGV4cG9ydEZpZWxkKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiYXNcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZXhwZWN0KFwidmFyaWFibGVcIikpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uTm9Db21tYSwgZXhwb3J0RmllbGQpO1xuICB9XG4gIGZ1bmN0aW9uIGFmdGVySW1wb3J0KHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29udCgpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uKTtcbiAgICByZXR1cm4gcGFzcyhpbXBvcnRTcGVjLCBtYXliZU1vcmVJbXBvcnRzLCBtYXliZUZyb20pO1xuICB9XG4gIGZ1bmN0aW9uIGltcG9ydFNwZWModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChpbXBvcnRTcGVjLCBcIn1cIik7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZWdpc3Rlcih2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICByZXR1cm4gY29udChtYXliZUFzKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZU1vcmVJbXBvcnRzKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIixcIikgcmV0dXJuIGNvbnQoaW1wb3J0U3BlYywgbWF5YmVNb3JlSW1wb3J0cylcbiAgfVxuICBmdW5jdGlvbiBtYXliZUFzKF90eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImFzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGltcG9ydFNwZWMpOyB9XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVGcm9tKF90eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImZyb21cIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7IH1cbiAgfVxuICBmdW5jdGlvbiBhcnJheUxpdGVyYWwodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiXVwiKSByZXR1cm4gY29udCgpO1xuICAgIHJldHVybiBwYXNzKGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCBcIl1cIikpO1xuICB9XG4gIGZ1bmN0aW9uIGVudW1kZWYoKSB7XG4gICAgcmV0dXJuIHBhc3MocHVzaGxleChcImZvcm1cIiksIHBhdHRlcm4sIGV4cGVjdChcIntcIiksIHB1c2hsZXgoXCJ9XCIpLCBjb21tYXNlcChlbnVtbWVtYmVyLCBcIn1cIiksIHBvcGxleCwgcG9wbGV4KVxuICB9XG4gIGZ1bmN0aW9uIGVudW1tZW1iZXIoKSB7XG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmVBc3NpZ24pO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDb250aW51ZWRTdGF0ZW1lbnQoc3RhdGUsIHRleHRBZnRlcikge1xuICAgIHJldHVybiBzdGF0ZS5sYXN0VHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgc3RhdGUubGFzdFR5cGUgPT0gXCIsXCIgfHxcbiAgICAgIGlzT3BlcmF0b3JDaGFyLnRlc3QodGV4dEFmdGVyLmNoYXJBdCgwKSkgfHxcbiAgICAgIC9bLC5dLy50ZXN0KHRleHRBZnRlci5jaGFyQXQoMCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbkFsbG93ZWQoc3RyZWFtLCBzdGF0ZSwgYmFja1VwKSB7XG4gICAgcmV0dXJuIHN0YXRlLnRva2VuaXplID09IHRva2VuQmFzZSAmJlxuICAgICAgL14oPzpvcGVyYXRvcnxzb2Z8a2V5d29yZCBbYmNkXXxjYXNlfG5ld3xleHBvcnR8ZGVmYXVsdHxzcHJlYWR8W1xcW3t9XFwoLDs6XXw9PikkLy50ZXN0KHN0YXRlLmxhc3RUeXBlKSB8fFxuICAgICAgKHN0YXRlLmxhc3RUeXBlID09IFwicXVhc2lcIiAmJiAvXFx7XFxzKiQvLnRlc3Qoc3RyZWFtLnN0cmluZy5zbGljZSgwLCBzdHJlYW0ucG9zIC0gKGJhY2tVcCB8fCAwKSkpKVxuICB9XG5cbiAgLy8gSW50ZXJmYWNlXG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7XG4gICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgIGxhc3RUeXBlOiBcInNvZlwiLFxuICAgICAgICBjYzogW10sXG4gICAgICAgIGxleGljYWw6IG5ldyBKU0xleGljYWwoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCBcImJsb2NrXCIsIGZhbHNlKSxcbiAgICAgICAgbG9jYWxWYXJzOiBwYXJzZXJDb25maWcubG9jYWxWYXJzLFxuICAgICAgICBjb250ZXh0OiBwYXJzZXJDb25maWcubG9jYWxWYXJzICYmIG5ldyBDb250ZXh0KG51bGwsIG51bGwsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IGJhc2Vjb2x1bW4gfHwgMFxuICAgICAgfTtcbiAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycyAmJiB0eXBlb2YgcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgPT0gXCJvYmplY3RcIilcbiAgICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKSlcbiAgICAgICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgIGZpbmRGYXRBcnJvdyhzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkNvbW1lbnQgJiYgc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAodHlwZSA9PSBcImNvbW1lbnRcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgc3RhdGUubGFzdFR5cGUgPSB0eXBlID09IFwib3BlcmF0b3JcIiAmJiAoY29udGVudCA9PSBcIisrXCIgfHwgY29udGVudCA9PSBcIi0tXCIpID8gXCJpbmNkZWNcIiA6IHR5cGU7XG4gICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IHRva2VuQ29tbWVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwO1xuICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbCwgdG9wXG4gICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20gYmxvY2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzXG4gICAgICBpZiAoIS9eXFxzKmVsc2VcXGIvLnRlc3QodGV4dEFmdGVyKSkgZm9yICh2YXIgaSA9IHN0YXRlLmNjLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBjID0gc3RhdGUuY2NbaV07XG4gICAgICAgIGlmIChjID09IHBvcGxleCkgbGV4aWNhbCA9IGxleGljYWwucHJldjtcbiAgICAgICAgZWxzZSBpZiAoYyAhPSBtYXliZWVsc2UpIGJyZWFrO1xuICAgICAgfVxuICAgICAgd2hpbGUgKChsZXhpY2FsLnR5cGUgPT0gXCJzdGF0XCIgfHwgbGV4aWNhbC50eXBlID09IFwiZm9ybVwiKSAmJlxuICAgICAgICAgICAgIChmaXJzdENoYXIgPT0gXCJ9XCIgfHwgKCh0b3AgPSBzdGF0ZS5jY1tzdGF0ZS5jYy5sZW5ndGggLSAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvcCA9PSBtYXliZW9wZXJhdG9yQ29tbWEgfHwgdG9wID09IG1heWJlb3BlcmF0b3JOb0NvbW1hKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhL15bLFxcLj0rXFwtKjo/W1xcKF0vLnRlc3QodGV4dEFmdGVyKSkpKVxuICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgaWYgKHN0YXRlbWVudEluZGVudCAmJiBsZXhpY2FsLnR5cGUgPT0gXCIpXCIgJiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gXCJzdGF0XCIpXG4gICAgICAgIGxleGljYWwgPSBsZXhpY2FsLnByZXY7XG4gICAgICB2YXIgdHlwZSA9IGxleGljYWwudHlwZSwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSB0eXBlO1xuXG4gICAgICBpZiAodHlwZSA9PSBcInZhcmRlZlwiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgc3RhdGUubGFzdFR5cGUgPT0gXCIsXCIgPyBsZXhpY2FsLmluZm8ubGVuZ3RoICsgMSA6IDApO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImZvcm1cIiAmJiBmaXJzdENoYXIgPT0gXCJ7XCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImZvcm1cIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0O1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInN0YXRcIilcbiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoaXNDb250aW51ZWRTdGF0ZW1lbnQoc3RhdGUsIHRleHRBZnRlcikgPyBzdGF0ZW1lbnRJbmRlbnQgfHwgaW5kZW50VW5pdCA6IDApO1xuICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09IFwic3dpdGNoXCIgJiYgIWNsb3NpbmcgJiYgcGFyc2VyQ29uZmlnLmRvdWJsZUluZGVudFN3aXRjaCAhPSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1bHQpXFxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQpO1xuICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGlnbikgcmV0dXJuIGxleGljYWwuY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7XG4gICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7XG4gICAgfSxcblxuICAgIGVsZWN0cmljSW5wdXQ6IC9eXFxzKig/OmNhc2UgLio/OnxkZWZhdWx0OnxcXHt8XFx9KSQvLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBqc29uTW9kZSA/IG51bGwgOiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBqc29uTW9kZSA/IG51bGwgOiBcIiovXCIsXG4gICAgYmxvY2tDb21tZW50Q29udGludWU6IGpzb25Nb2RlID8gbnVsbCA6IFwiICogXCIsXG4gICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8gbnVsbCA6IFwiLy9cIixcbiAgICBmb2xkOiBcImJyYWNlXCIsXG4gICAgY2xvc2VCcmFja2V0czogXCIoKVtde30nJ1xcXCJcXFwiYGBcIixcblxuICAgIGhlbHBlclR5cGU6IGpzb25Nb2RlID8gXCJqc29uXCIgOiBcImphdmFzY3JpcHRcIixcbiAgICBqc29ubGRNb2RlOiBqc29ubGRNb2RlLFxuICAgIGpzb25Nb2RlOiBqc29uTW9kZSxcblxuICAgIGV4cHJlc3Npb25BbGxvd2VkOiBleHByZXNzaW9uQWxsb3dlZCxcblxuICAgIHNraXBFeHByZXNzaW9uOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgdmFyIHRvcCA9IHN0YXRlLmNjW3N0YXRlLmNjLmxlbmd0aCAtIDFdXG4gICAgICBpZiAodG9wID09IGV4cHJlc3Npb24gfHwgdG9wID09IGV4cHJlc3Npb25Ob0NvbW1hKSBzdGF0ZS5jYy5wb3AoKVxuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwid29yZENoYXJzXCIsIFwiamF2YXNjcmlwdFwiLCAvW1xcdyRdLyk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvamF2YXNjcmlwdFwiLCBcImphdmFzY3JpcHRcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2VjbWFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLCBcImphdmFzY3JpcHRcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiLCBcImphdmFzY3JpcHRcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9qc29uXCIsIHtuYW1lOiBcImphdmFzY3JpcHRcIiwganNvbjogdHJ1ZX0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qc29uXCIsIHtuYW1lOiBcImphdmFzY3JpcHRcIiwganNvbjogdHJ1ZX0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vbGQranNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb25sZDogdHJ1ZX0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC90eXBlc2NyaXB0XCIsIHsgbmFtZTogXCJqYXZhc2NyaXB0XCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi90eXBlc2NyaXB0XCIsIHsgbmFtZTogXCJqYXZhc2NyaXB0XCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVkE7QUFMQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBekNBO0FBNkNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdE1BO0FBQ0E7QUFDQTtBQXlNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqUEE7QUFDQTtBQUNBO0FBb1BBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQUNBO0FBZUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRTQTtBQUNBO0FBQ0E7QUF5U0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBREE7QUFFQTtBQUxBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBRkE7QUFJQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQS95QkE7QUFDQTtBQUNBO0FBb3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFFQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUlBO0FBSkE7QUFDQTtBQUlBO0FBRUE7QUFBQTtBQUVBO0FBakRBO0FBNERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQTdFQTtBQXR6QkE7QUF1NEJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE1NUJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/javascript/javascript.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/jsx/jsx.js": -/*!**************************************************!*\ - !*** ../node_modules/codemirror/mode/jsx/jsx.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../javascript/javascript */ \"../node_modules/codemirror/mode/javascript/javascript.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../javascript/javascript */ \"../node_modules/codemirror/mode/javascript/javascript.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\"; // Depth means the amount of open braces in JS context, in XML\n // context 0 means not in tag, 1 means in tag, and 2 means in tag\n // and js block comment.\n\n function Context(state, mode, depth, prev) {\n this.state = state;\n this.mode = mode;\n this.depth = depth;\n this.prev = prev;\n }\n\n function copyContext(context) {\n return new Context(CodeMirror.copyState(context.mode, context.state), context.mode, context.depth, context.prev && copyContext(context.prev));\n }\n\n CodeMirror.defineMode(\"jsx\", function (config, modeConfig) {\n var xmlMode = CodeMirror.getMode(config, {\n name: \"xml\",\n allowMissing: true,\n multilineTagIndentPastTag: false,\n allowMissingTagName: true\n });\n var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || \"javascript\");\n\n function flatXMLIndent(state) {\n var tagName = state.tagName;\n state.tagName = null;\n var result = xmlMode.indent(state, \"\", \"\");\n state.tagName = tagName;\n return result;\n }\n\n function token(stream, state) {\n if (state.context.mode == xmlMode) return xmlToken(stream, state, state.context);else return jsToken(stream, state, state.context);\n }\n\n function xmlToken(stream, state, cx) {\n if (cx.depth == 2) {\n // Inside a JS /* */ comment\n if (stream.match(/^.*?\\*\\//)) cx.depth = 1;else stream.skipToEnd();\n return \"comment\";\n }\n\n if (stream.peek() == \"{\") {\n xmlMode.skipAttribute(cx.state);\n var indent = flatXMLIndent(cx.state),\n xmlContext = cx.state.context; // If JS starts on same line as tag\n\n if (xmlContext && stream.match(/^[^>]*>\\s*$/, false)) {\n while (xmlContext.prev && !xmlContext.startOfLine) {\n xmlContext = xmlContext.prev;\n } // If tag starts the line, use XML indentation level\n\n\n if (xmlContext.startOfLine) indent -= config.indentUnit; // Else use JS indentation level\n else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented; // Else if inside of tag\n } else if (cx.depth == 1) {\n indent += config.indentUnit;\n }\n\n state.context = new Context(CodeMirror.startState(jsMode, indent), jsMode, 0, state.context);\n return null;\n }\n\n if (cx.depth == 1) {\n // Inside of tag\n if (stream.peek() == \"<\") {\n // Tag inside of tag\n xmlMode.skipAttribute(cx.state);\n state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), xmlMode, 0, state.context);\n return null;\n } else if (stream.match(\"//\")) {\n stream.skipToEnd();\n return \"comment\";\n } else if (stream.match(\"/*\")) {\n cx.depth = 2;\n return token(stream, state);\n }\n }\n\n var style = xmlMode.token(stream, cx.state),\n cur = stream.current(),\n stop;\n\n if (/\\btag\\b/.test(style)) {\n if (/>$/.test(cur)) {\n if (cx.state.context) cx.depth = 0;else state.context = state.context.prev;\n } else if (/^</.test(cur)) {\n cx.depth = 1;\n }\n } else if (!style && (stop = cur.indexOf(\"{\")) > -1) {\n stream.backUp(cur.length - stop);\n }\n\n return style;\n }\n\n function jsToken(stream, state, cx) {\n if (stream.peek() == \"<\" && jsMode.expressionAllowed(stream, cx.state)) {\n jsMode.skipExpression(cx.state);\n state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, \"\", \"\")), xmlMode, 0, state.context);\n return null;\n }\n\n var style = jsMode.token(stream, cx.state);\n\n if (!style && cx.depth != null) {\n var cur = stream.current();\n\n if (cur == \"{\") {\n cx.depth++;\n } else if (cur == \"}\") {\n if (--cx.depth == 0) state.context = state.context.prev;\n }\n }\n\n return style;\n }\n\n return {\n startState: function startState() {\n return {\n context: new Context(CodeMirror.startState(jsMode), jsMode)\n };\n },\n copyState: function copyState(state) {\n return {\n context: copyContext(state.context)\n };\n },\n token: token,\n indent: function indent(state, textAfter, fullLine) {\n return state.context.mode.indent(state.context.state, textAfter, fullLine);\n },\n innerMode: function innerMode(state) {\n return state.context;\n }\n };\n }, \"xml\", \"javascript\");\n CodeMirror.defineMIME(\"text/jsx\", \"jsx\");\n CodeMirror.defineMIME(\"text/typescript-jsx\", {\n name: \"jsx\",\n base: {\n name: \"javascript\",\n typescript: true\n }\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9qc3gvanN4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvanN4L2pzeC5qcz81ZDQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIpKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi94bWwveG1sXCIsIFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCJdLCBtb2QpXG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCJcblxuICAvLyBEZXB0aCBtZWFucyB0aGUgYW1vdW50IG9mIG9wZW4gYnJhY2VzIGluIEpTIGNvbnRleHQsIGluIFhNTFxuICAvLyBjb250ZXh0IDAgbWVhbnMgbm90IGluIHRhZywgMSBtZWFucyBpbiB0YWcsIGFuZCAyIG1lYW5zIGluIHRhZ1xuICAvLyBhbmQganMgYmxvY2sgY29tbWVudC5cbiAgZnVuY3Rpb24gQ29udGV4dChzdGF0ZSwgbW9kZSwgZGVwdGgsIHByZXYpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7IHRoaXMubW9kZSA9IG1vZGU7IHRoaXMuZGVwdGggPSBkZXB0aDsgdGhpcy5wcmV2ID0gcHJldlxuICB9XG5cbiAgZnVuY3Rpb24gY29weUNvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ29udGV4dChDb2RlTWlycm9yLmNvcHlTdGF0ZShjb250ZXh0Lm1vZGUsIGNvbnRleHQuc3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJldiAmJiBjb3B5Q29udGV4dChjb250ZXh0LnByZXYpKVxuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwianN4XCIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykge1xuICAgIHZhciB4bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6IFwieG1sXCIsIGFsbG93TWlzc2luZzogdHJ1ZSwgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogZmFsc2UsIGFsbG93TWlzc2luZ1RhZ05hbWU6IHRydWV9KVxuICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2RlQ29uZmlnICYmIG1vZGVDb25maWcuYmFzZSB8fCBcImphdmFzY3JpcHRcIilcblxuICAgIGZ1bmN0aW9uIGZsYXRYTUxJbmRlbnQoc3RhdGUpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RhdGUudGFnTmFtZVxuICAgICAgc3RhdGUudGFnTmFtZSA9IG51bGxcbiAgICAgIHZhciByZXN1bHQgPSB4bWxNb2RlLmluZGVudChzdGF0ZSwgXCJcIiwgXCJcIilcbiAgICAgIHN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW4oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmNvbnRleHQubW9kZSA9PSB4bWxNb2RlKVxuICAgICAgICByZXR1cm4geG1sVG9rZW4oc3RyZWFtLCBzdGF0ZSwgc3RhdGUuY29udGV4dClcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGpzVG9rZW4oc3RyZWFtLCBzdGF0ZSwgc3RhdGUuY29udGV4dClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB4bWxUb2tlbihzdHJlYW0sIHN0YXRlLCBjeCkge1xuICAgICAgaWYgKGN4LmRlcHRoID09IDIpIHsgLy8gSW5zaWRlIGEgSlMgLyogKi8gY29tbWVudFxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLio/XFwqXFwvLykpIGN4LmRlcHRoID0gMVxuICAgICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCJcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCJ7XCIpIHtcbiAgICAgICAgeG1sTW9kZS5za2lwQXR0cmlidXRlKGN4LnN0YXRlKVxuXG4gICAgICAgIHZhciBpbmRlbnQgPSBmbGF0WE1MSW5kZW50KGN4LnN0YXRlKSwgeG1sQ29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHRcbiAgICAgICAgLy8gSWYgSlMgc3RhcnRzIG9uIHNhbWUgbGluZSBhcyB0YWdcbiAgICAgICAgaWYgKHhtbENvbnRleHQgJiYgc3RyZWFtLm1hdGNoKC9eW14+XSo+XFxzKiQvLCBmYWxzZSkpIHtcbiAgICAgICAgICB3aGlsZSAoeG1sQ29udGV4dC5wcmV2ICYmICF4bWxDb250ZXh0LnN0YXJ0T2ZMaW5lKVxuICAgICAgICAgICAgeG1sQ29udGV4dCA9IHhtbENvbnRleHQucHJldlxuICAgICAgICAgIC8vIElmIHRhZyBzdGFydHMgdGhlIGxpbmUsIHVzZSBYTUwgaW5kZW50YXRpb24gbGV2ZWxcbiAgICAgICAgICBpZiAoeG1sQ29udGV4dC5zdGFydE9mTGluZSkgaW5kZW50IC09IGNvbmZpZy5pbmRlbnRVbml0XG4gICAgICAgICAgLy8gRWxzZSB1c2UgSlMgaW5kZW50YXRpb24gbGV2ZWxcbiAgICAgICAgICBlbHNlIGlmIChjeC5wcmV2LnN0YXRlLmxleGljYWwpIGluZGVudCA9IGN4LnByZXYuc3RhdGUubGV4aWNhbC5pbmRlbnRlZFxuICAgICAgICAvLyBFbHNlIGlmIGluc2lkZSBvZiB0YWdcbiAgICAgICAgfSBlbHNlIGlmIChjeC5kZXB0aCA9PSAxKSB7XG4gICAgICAgICAgaW5kZW50ICs9IGNvbmZpZy5pbmRlbnRVbml0XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKGpzTW9kZSwgaW5kZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTW9kZSwgMCwgc3RhdGUuY29udGV4dClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKGN4LmRlcHRoID09IDEpIHsgLy8gSW5zaWRlIG9mIHRhZ1xuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIjxcIikgeyAvLyBUYWcgaW5zaWRlIG9mIHRhZ1xuICAgICAgICAgIHhtbE1vZGUuc2tpcEF0dHJpYnV0ZShjeC5zdGF0ZSlcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKHhtbE1vZGUsIGZsYXRYTUxJbmRlbnQoY3guc3RhdGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sTW9kZSwgMCwgc3RhdGUuY29udGV4dClcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIi8vXCIpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwiLypcIikpIHtcbiAgICAgICAgICBjeC5kZXB0aCA9IDJcbiAgICAgICAgICByZXR1cm4gdG9rZW4oc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGUgPSB4bWxNb2RlLnRva2VuKHN0cmVhbSwgY3guc3RhdGUpLCBjdXIgPSBzdHJlYW0uY3VycmVudCgpLCBzdG9wXG4gICAgICBpZiAoL1xcYnRhZ1xcYi8udGVzdChzdHlsZSkpIHtcbiAgICAgICAgaWYgKC8+JC8udGVzdChjdXIpKSB7XG4gICAgICAgICAgaWYgKGN4LnN0YXRlLmNvbnRleHQpIGN4LmRlcHRoID0gMFxuICAgICAgICAgIGVsc2Ugc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgICB9IGVsc2UgaWYgKC9ePC8udGVzdChjdXIpKSB7XG4gICAgICAgICAgY3guZGVwdGggPSAxXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0eWxlICYmIChzdG9wID0gY3VyLmluZGV4T2YoXCJ7XCIpKSA+IC0xKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIHN0b3ApXG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBqc1Rva2VuKHN0cmVhbSwgc3RhdGUsIGN4KSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIjxcIiAmJiBqc01vZGUuZXhwcmVzc2lvbkFsbG93ZWQoc3RyZWFtLCBjeC5zdGF0ZSkpIHtcbiAgICAgICAganNNb2RlLnNraXBFeHByZXNzaW9uKGN4LnN0YXRlKVxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKHhtbE1vZGUsIGpzTW9kZS5pbmRlbnQoY3guc3RhdGUsIFwiXCIsIFwiXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbE1vZGUsIDAsIHN0YXRlLmNvbnRleHQpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSA9IGpzTW9kZS50b2tlbihzdHJlYW0sIGN4LnN0YXRlKVxuICAgICAgaWYgKCFzdHlsZSAmJiBjeC5kZXB0aCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpXG4gICAgICAgIGlmIChjdXIgPT0gXCJ7XCIpIHtcbiAgICAgICAgICBjeC5kZXB0aCsrXG4gICAgICAgIH0gZWxzZSBpZiAoY3VyID09IFwifVwiKSB7XG4gICAgICAgICAgaWYgKC0tY3guZGVwdGggPT0gMCkgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7Y29udGV4dDogbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKGpzTW9kZSksIGpzTW9kZSl9XG4gICAgICB9LFxuXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7Y29udGV4dDogY29weUNvbnRleHQoc3RhdGUuY29udGV4dCl9XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogdG9rZW4sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgZnVsbExpbmUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQubW9kZS5pbmRlbnQoc3RhdGUuY29udGV4dC5zdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSlcbiAgICAgIH0sXG5cbiAgICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHRcbiAgICAgIH1cbiAgICB9XG4gIH0sIFwieG1sXCIsIFwiamF2YXNjcmlwdFwiKVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvanN4XCIsIFwianN4XCIpXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdC1qc3hcIiwge25hbWU6IFwianN4XCIsIGJhc2U6IHtuYW1lOiBcImphdmFzY3JpcHRcIiwgdHlwZXNjcmlwdDogdHJ1ZX19KVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFPQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBSkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBSkE7QUFNQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFOQTtBQVNBO0FBRUE7QUFDQTtBQVpBO0FBZUE7QUFDQTtBQUNBO0FBakJBO0FBakdBO0FBc0hBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEvSUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/jsx/jsx.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/markdown/markdown.js": -/*!************************************************************!*\ - !*** ../node_modules/codemirror/mode/markdown/markdown.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../meta */ \"../node_modules/codemirror/mode/meta.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\"), __webpack_require__(/*! ../meta */ \"../node_modules/codemirror/mode/meta.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"markdown\", function (cmCfg, modeCfg) {\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\";\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n } // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n\n\n if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n\n if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax\n\n if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false;\n if (modeCfg.emoji === undefined) modeCfg.emoji = false;\n if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true;\n if (modeCfg.xml === undefined) modeCfg.xml = true; // Allow token types to be overridden by user-provided token types.\n\n if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {};\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/,\n listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,\n taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n ,\n atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/,\n setextHeaderRE = /^ *(?:\\={1,}|-{1,})\\s*$/,\n textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,\n fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w+#-]*)[^\\n`]*$/,\n linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n ,\n punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,\n expandedTab = \" \"; // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string);\n } // Blocks\n\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false; // Reset EM state\n\n state.em = false; // Reset STRONG state\n\n state.strong = false; // Reset strikethrough state\n\n state.strikethrough = false; // Reset state.quote\n\n state.quote = 0; // Reset state.indentedCode\n\n state.indentedCode = false;\n\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing;\n\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText;\n }\n\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n } // Reset state.trailingSpace\n\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false; // Mark this line as blank\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: null\n };\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n state.indentedCode = false;\n var lineIndentation = state.indentation; // compute once per line (on first token)\n\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n\n if (prevLineIsList) {\n state.list = null; // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1]; // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1];\n }\n }\n } // not comprehensive (currently only for setext detection purposes)\n\n\n var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd;\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n var match = null;\n\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0; // Add this list item's content's indentation to the stack\n\n state.listStack.push(state.indentation); // Reset inline styles which shouldn't propagate aross list items\n\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\"); // try switching mode\n\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1;\n return getType(state); // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if ( // if setext set, indicates line after ---/===\n state.setext || // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) {\n if (!state.setext) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext; // has no effect on type so we can reset it now\n\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n\n if (inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(\">\") > -1) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state);\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0;\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n } // Inline\n\n\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n } // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n\n\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else {\n // Only apply inline styles to non-url text\n if (state.strong) {\n styles.push(tokenTypes.strong);\n }\n\n if (state.em) {\n styles.push(tokenTypes.em);\n }\n\n if (state.strikethrough) {\n styles.push(tokenTypes.strikethrough);\n }\n\n if (state.emoji) {\n styles.push(tokenTypes.emoji);\n }\n\n if (state.linkText) {\n styles.push(tokenTypes.linkText);\n }\n\n if (state.code) {\n styles.push(tokenTypes.code);\n }\n\n if (state.image) {\n styles.push(tokenTypes.image);\n }\n\n if (state.imageAltText) {\n styles.push(tokenTypes.imageAltText, \"link\");\n }\n\n if (state.imageMarker) {\n styles.push(tokenTypes.imageMarker);\n }\n }\n\n if (state.header) {\n styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header);\n }\n\n if (state.quote) {\n styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined') return style;\n\n if (state.list) {\n // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next(); // Matches link titles present on next line\n\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n\n if (ch === '(') {\n matchCh = ')';\n }\n\n matchCh = (matchCh + '').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n } // If this block is changed, it may need to be updated in GFM mode\n\n\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length;\n\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count;\n return getType(state);\n } else if (count == state.code) {\n // Must be exact\n var t = getType(state);\n state.code = 0;\n return t;\n } else {\n state.formatting = previousFormatting;\n return getType(state);\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state);\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal;\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1,\n before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2);\n\n while (len < 3 && stream.eat(ch)) {\n len++;\n }\n\n var after = stream.peek() || \" \"; // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before));\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after));\n var setEm = null,\n setStrong = null;\n\n if (len % 2) {\n // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setEm = true;else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setEm = false;\n }\n\n if (len > 1) {\n // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setStrong = true;else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setStrong = false;\n }\n\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\";\n if (setEm === true) state.em = ch;\n if (setStrong === true) state.strong = ch;\n var t = getType(state);\n if (setEm === false) state.em = false;\n if (setStrong === false) state.strong = false;\n return t;\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) {\n // Probably surrounded by spaces\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {\n // Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {\n // Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match(/^~~/, true)) {\n // Probably surrounded by space\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n\n var ch = stream.next();\n\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n };\n\n function getLinkHrefInside(endChar) {\n return function (stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar]);\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(/^\\]:/, true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n } // Match URL\n\n\n stream.match(/^[^\\s]+/, true); // Check for link title\n\n if (stream.peek() === undefined) {\n // End of line, set flag to check next line\n state.linkTitle = true;\n } else {\n // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n }\n\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function startState() {\n return {\n f: blockNormal,\n prevLine: {\n stream: null\n },\n thisLine: {\n stream: null\n },\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n inline: inlineNormal,\n text: handleText,\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n copyState: function copyState(s) {\n return {\n f: s.f,\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n token: function token(stream, state) {\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: stream\n }; // Reset state.taskList\n\n state.taskList = false; // Reset state.trailingSpace\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n\n return state.f(stream, state);\n },\n innerMode: function innerMode(state) {\n if (state.block == htmlBlock) return {\n state: state.htmlState,\n mode: htmlMode\n };\n if (state.localState) return {\n state: state.localState,\n mode: state.localMode\n };\n return {\n state: state,\n mode: mode\n };\n },\n indent: function indent(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line);\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);\n return CodeMirror.Pass;\n },\n blankLine: blankLine,\n getType: getType,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n }, \"xml\");\n CodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n CodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzPzMzNTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL3htbC94bWxcIiksIHJlcXVpcmUoXCIuLi9tZXRhXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4veG1sL3htbFwiLCBcIi4uL21ldGFcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibWFya2Rvd25cIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHtcblxuICB2YXIgaHRtbE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY21DZmcsIFwidGV4dC9odG1sXCIpO1xuICB2YXIgaHRtbE1vZGVNaXNzaW5nID0gaHRtbE1vZGUubmFtZSA9PSBcIm51bGxcIlxuXG4gIGZ1bmN0aW9uIGdldE1vZGUobmFtZSkge1xuICAgIGlmIChDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lKSB7XG4gICAgICB2YXIgZm91bmQgPSBDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lKG5hbWUpO1xuICAgICAgaWYgKGZvdW5kKSBuYW1lID0gZm91bmQubWltZSB8fCBmb3VuZC5taW1lc1swXTtcbiAgICB9XG4gICAgdmFyIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY21DZmcsIG5hbWUpO1xuICAgIHJldHVybiBtb2RlLm5hbWUgPT0gXCJudWxsXCIgPyBudWxsIDogbW9kZTtcbiAgfVxuXG4gIC8vIFNob3VsZCBjaGFyYWN0ZXJzIHRoYXQgYWZmZWN0IGhpZ2hsaWdodGluZyBiZSBoaWdobGlnaHRlZCBzZXBhcmF0ZT9cbiAgLy8gRG9lcyBub3QgaW5jbHVkZSBjaGFyYWN0ZXJzIHRoYXQgd2lsbCBiZSBvdXRwdXQgKHN1Y2ggYXMgYDEuYCBhbmQgYC1gIGZvciBsaXN0cylcbiAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZyA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZyA9IGZhbHNlO1xuXG4gIC8vIE1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBibG9ja3F1b3Rlcy4gU2V0IHRvIDAgZm9yIGluZmluaXRlIG5lc3RpbmcuXG4gIC8vIEV4Y2VzcyBgPmAgd2lsbCBlbWl0IGBlcnJvcmAgdG9rZW4uXG4gIGlmIChtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID0gMDtcblxuICAvLyBUdXJuIG9uIHRhc2sgbGlzdHM/IChcIi0gWyBdIFwiIGFuZCBcIi0gW3hdIFwiKVxuICBpZiAobW9kZUNmZy50YXNrTGlzdHMgPT09IHVuZGVmaW5lZCkgbW9kZUNmZy50YXNrTGlzdHMgPSBmYWxzZTtcblxuICAvLyBUdXJuIG9uIHN0cmlrZXRocm91Z2ggc3ludGF4XG4gIGlmIChtb2RlQ2ZnLnN0cmlrZXRocm91Z2ggPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLnN0cmlrZXRocm91Z2ggPSBmYWxzZTtcblxuICBpZiAobW9kZUNmZy5lbW9qaSA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcuZW1vamkgPSBmYWxzZTtcblxuICBpZiAobW9kZUNmZy5mZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmcgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZyA9IHRydWU7XG5cbiAgaWYgKG1vZGVDZmcueG1sID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy54bWwgPSB0cnVlO1xuXG4gIC8vIEFsbG93IHRva2VuIHR5cGVzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdXNlci1wcm92aWRlZCB0b2tlbiB0eXBlcy5cbiAgaWYgKG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXMgPSB7fTtcblxuICB2YXIgdG9rZW5UeXBlcyA9IHtcbiAgICBoZWFkZXI6IFwiaGVhZGVyXCIsXG4gICAgY29kZTogXCJjb21tZW50XCIsXG4gICAgcXVvdGU6IFwicXVvdGVcIixcbiAgICBsaXN0MTogXCJ2YXJpYWJsZS0yXCIsXG4gICAgbGlzdDI6IFwidmFyaWFibGUtM1wiLFxuICAgIGxpc3QzOiBcImtleXdvcmRcIixcbiAgICBocjogXCJoclwiLFxuICAgIGltYWdlOiBcImltYWdlXCIsXG4gICAgaW1hZ2VBbHRUZXh0OiBcImltYWdlLWFsdC10ZXh0XCIsXG4gICAgaW1hZ2VNYXJrZXI6IFwiaW1hZ2UtbWFya2VyXCIsXG4gICAgZm9ybWF0dGluZzogXCJmb3JtYXR0aW5nXCIsXG4gICAgbGlua0lubGluZTogXCJsaW5rXCIsXG4gICAgbGlua0VtYWlsOiBcImxpbmtcIixcbiAgICBsaW5rVGV4dDogXCJsaW5rXCIsXG4gICAgbGlua0hyZWY6IFwic3RyaW5nXCIsXG4gICAgZW06IFwiZW1cIixcbiAgICBzdHJvbmc6IFwic3Ryb25nXCIsXG4gICAgc3RyaWtldGhyb3VnaDogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgZW1vamk6IFwiYnVpbHRpblwiXG4gIH07XG5cbiAgZm9yICh2YXIgdG9rZW5UeXBlIGluIHRva2VuVHlwZXMpIHtcbiAgICBpZiAodG9rZW5UeXBlcy5oYXNPd25Qcm9wZXJ0eSh0b2tlblR5cGUpICYmIG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzW3Rva2VuVHlwZV0pIHtcbiAgICAgIHRva2VuVHlwZXNbdG9rZW5UeXBlXSA9IG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzW3Rva2VuVHlwZV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGhyUkUgPSAvXihbKlxcLV9dKSg/OlxccypcXDEpezIsfVxccyokL1xuICAsICAgbGlzdFJFID0gL14oPzpbKlxcLStdfF5bMC05XSsoWy4pXSkpXFxzKy9cbiAgLCAgIHRhc2tMaXN0UkUgPSAvXlxcWyh4fCApXFxdKD89XFxzKS9pIC8vIE11c3QgZm9sbG93IGxpc3RSRVxuICAsICAgYXR4SGVhZGVyUkUgPSBtb2RlQ2ZnLmFsbG93QXR4SGVhZGVyV2l0aG91dFNwYWNlID8gL14oIyspLyA6IC9eKCMrKSg/OiB8JCkvXG4gICwgICBzZXRleHRIZWFkZXJSRSA9IC9eICooPzpcXD17MSx9fC17MSx9KVxccyokL1xuICAsICAgdGV4dFJFID0gL15bXiMhXFxbXFxdKl9cXFxcPD5gIFwiJyh+Ol0rL1xuICAsICAgZmVuY2VkQ29kZVJFID0gL14ofn5+K3xgYGArKVsgXFx0XSooW1xcdysjLV0qKVteXFxuYF0qJC9cbiAgLCAgIGxpbmtEZWZSRSA9IC9eXFxzKlxcW1teXFxdXSs/XFxdOi4qJC8gLy8gbmFpdmUgbGluay1kZWZpbml0aW9uXG4gICwgICBwdW5jdHVhdGlvbiA9IC9bIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdL1xuICAsICAgZXhwYW5kZWRUYWIgPSBcIiAgICBcIiAvLyBDb21tb25NYXJrIHNwZWNpZmllcyB0YWIgYXMgNCBzcGFjZXNcblxuICBmdW5jdGlvbiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZikge1xuICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBmO1xuICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgZikge1xuICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5lSXNFbXB0eShsaW5lKSB7XG4gICAgcmV0dXJuICFsaW5lIHx8ICEvXFxTLy50ZXN0KGxpbmUuc3RyaW5nKVxuICB9XG5cbiAgLy8gQmxvY2tzXG5cbiAgZnVuY3Rpb24gYmxhbmtMaW5lKHN0YXRlKSB7XG4gICAgLy8gUmVzZXQgbGlua1RpdGxlIHN0YXRlXG4gICAgc3RhdGUubGlua1RpdGxlID0gZmFsc2U7XG4gICAgc3RhdGUubGlua0hyZWYgPSBmYWxzZTtcbiAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IEVNIHN0YXRlXG4gICAgc3RhdGUuZW0gPSBmYWxzZTtcbiAgICAvLyBSZXNldCBTVFJPTkcgc3RhdGVcbiAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTtcbiAgICAvLyBSZXNldCBzdHJpa2V0aHJvdWdoIHN0YXRlXG4gICAgc3RhdGUuc3RyaWtldGhyb3VnaCA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IHN0YXRlLnF1b3RlXG4gICAgc3RhdGUucXVvdGUgPSAwO1xuICAgIC8vIFJlc2V0IHN0YXRlLmluZGVudGVkQ29kZVxuICAgIHN0YXRlLmluZGVudGVkQ29kZSA9IGZhbHNlO1xuICAgIGlmIChzdGF0ZS5mID09IGh0bWxCbG9jaykge1xuICAgICAgdmFyIGV4aXQgPSBodG1sTW9kZU1pc3NpbmdcbiAgICAgIGlmICghZXhpdCkge1xuICAgICAgICB2YXIgaW5uZXIgPSBDb2RlTWlycm9yLmlubmVyTW9kZShodG1sTW9kZSwgc3RhdGUuaHRtbFN0YXRlKVxuICAgICAgICBleGl0ID0gaW5uZXIubW9kZS5uYW1lID09IFwieG1sXCIgJiYgaW5uZXIuc3RhdGUudGFnU3RhcnQgPT09IG51bGwgJiZcbiAgICAgICAgICAoIWlubmVyLnN0YXRlLmNvbnRleHQgJiYgaW5uZXIuc3RhdGUudG9rZW5pemUuaXNJblRleHQpXG4gICAgICB9XG4gICAgICBpZiAoZXhpdCkge1xuICAgICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsO1xuICAgICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsO1xuICAgICAgICBzdGF0ZS5odG1sU3RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZXNldCBzdGF0ZS50cmFpbGluZ1NwYWNlXG4gICAgc3RhdGUudHJhaWxpbmdTcGFjZSA9IDA7XG4gICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSBmYWxzZTtcbiAgICAvLyBNYXJrIHRoaXMgbGluZSBhcyBibGFua1xuICAgIHN0YXRlLnByZXZMaW5lID0gc3RhdGUudGhpc0xpbmVcbiAgICBzdGF0ZS50aGlzTGluZSA9IHtzdHJlYW06IG51bGx9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBibG9ja05vcm1hbChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGZpcnN0VG9rZW5PbkxpbmUgPSBzdHJlYW0uY29sdW1uKCkgPT09IHN0YXRlLmluZGVudGF0aW9uO1xuICAgIHZhciBwcmV2TGluZUxpbmVJc0VtcHR5ID0gbGluZUlzRW1wdHkoc3RhdGUucHJldkxpbmUuc3RyZWFtKTtcbiAgICB2YXIgcHJldkxpbmVJc0luZGVudGVkQ29kZSA9IHN0YXRlLmluZGVudGVkQ29kZTtcbiAgICB2YXIgcHJldkxpbmVJc0hyID0gc3RhdGUucHJldkxpbmUuaHI7XG4gICAgdmFyIHByZXZMaW5lSXNMaXN0ID0gc3RhdGUubGlzdCAhPT0gZmFsc2U7XG4gICAgdmFyIG1heE5vbkNvZGVJbmRlbnRhdGlvbiA9IChzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdIHx8IDApICsgMztcblxuICAgIHN0YXRlLmluZGVudGVkQ29kZSA9IGZhbHNlO1xuXG4gICAgdmFyIGxpbmVJbmRlbnRhdGlvbiA9IHN0YXRlLmluZGVudGF0aW9uO1xuICAgIC8vIGNvbXB1dGUgb25jZSBwZXIgbGluZSAob24gZmlyc3QgdG9rZW4pXG4gICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA9PT0gbnVsbCkge1xuICAgICAgc3RhdGUuaW5kZW50YXRpb25EaWZmID0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgICBpZiAocHJldkxpbmVJc0xpc3QpIHtcbiAgICAgICAgc3RhdGUubGlzdCA9IG51bGw7XG4gICAgICAgIC8vIFdoaWxlIHRoaXMgbGlzdCBpdGVtJ3MgbWFya2VyJ3MgaW5kZW50YXRpb24gaXMgbGVzcyB0aGFuIHRoZSBkZWVwZXN0XG4gICAgICAgIC8vICBsaXN0IGl0ZW0ncyBjb250ZW50J3MgaW5kZW50YXRpb24scG9wIHRoZSBkZWVwZXN0IGxpc3QgaXRlbVxuICAgICAgICAvLyAgaW5kZW50YXRpb24gb2ZmIHRoZSBzdGFjaywgYW5kIHVwZGF0ZSBibG9jayBpbmRlbnRhdGlvbiBzdGF0ZVxuICAgICAgICB3aGlsZSAobGluZUluZGVudGF0aW9uIDwgc3RhdGUubGlzdFN0YWNrW3N0YXRlLmxpc3RTdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHN0YXRlLmxpc3RTdGFjay5wb3AoKTtcbiAgICAgICAgICBpZiAoc3RhdGUubGlzdFN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgZmlyc3QgbGlzdCdzIGluZGVudCAtPiB0aGUgbGluZSBpcyBubyBsb25nZXIgYSBsaXN0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmxpc3QgIT09IGZhbHNlKSB7XG4gICAgICAgICAgc3RhdGUuaW5kZW50YXRpb25EaWZmID0gbGluZUluZGVudGF0aW9uIC0gc3RhdGUubGlzdFN0YWNrW3N0YXRlLmxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm90IGNvbXByZWhlbnNpdmUgKGN1cnJlbnRseSBvbmx5IGZvciBzZXRleHQgZGV0ZWN0aW9uIHB1cnBvc2VzKVxuICAgIHZhciBhbGxvd3NJbmxpbmVDb250aW51YXRpb24gPSAoXG4gICAgICAgICFwcmV2TGluZUxpbmVJc0VtcHR5ICYmICFwcmV2TGluZUlzSHIgJiYgIXN0YXRlLnByZXZMaW5lLmhlYWRlciAmJlxuICAgICAgICAoIXByZXZMaW5lSXNMaXN0IHx8ICFwcmV2TGluZUlzSW5kZW50ZWRDb2RlKSAmJlxuICAgICAgICAhc3RhdGUucHJldkxpbmUuZmVuY2VkQ29kZUVuZFxuICAgICk7XG5cbiAgICB2YXIgaXNIciA9IChzdGF0ZS5saXN0ID09PSBmYWxzZSB8fCBwcmV2TGluZUlzSHIgfHwgcHJldkxpbmVMaW5lSXNFbXB0eSkgJiZcbiAgICAgIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiBzdHJlYW0ubWF0Y2goaHJSRSk7XG5cbiAgICB2YXIgbWF0Y2ggPSBudWxsO1xuICAgIGlmIChzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPj0gNCAmJiAocHJldkxpbmVJc0luZGVudGVkQ29kZSB8fCBzdGF0ZS5wcmV2TGluZS5mZW5jZWRDb2RlRW5kIHx8XG4gICAgICAgICBzdGF0ZS5wcmV2TGluZS5oZWFkZXIgfHwgcHJldkxpbmVMaW5lSXNFbXB0eSkpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHN0YXRlLmluZGVudGVkQ29kZSA9IHRydWU7XG4gICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZmlyc3RUb2tlbk9uTGluZSAmJiBzdGF0ZS5pbmRlbnRhdGlvbiA8PSBtYXhOb25Db2RlSW5kZW50YXRpb24gJiYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKGF0eEhlYWRlclJFKSkgJiYgbWF0Y2hbMV0ubGVuZ3RoIDw9IDYpIHtcbiAgICAgIHN0YXRlLnF1b3RlID0gMDtcbiAgICAgIHN0YXRlLmhlYWRlciA9IG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhlYWRlciA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmU7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5pbmRlbnRhdGlvbiA8PSBtYXhOb25Db2RlSW5kZW50YXRpb24gJiYgc3RyZWFtLmVhdCgnPicpKSB7XG4gICAgICBzdGF0ZS5xdW90ZSA9IGZpcnN0VG9rZW5PbkxpbmUgPyAxIDogc3RhdGUucXVvdGUgKyAxO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwicXVvdGVcIjtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoIWlzSHIgJiYgIXN0YXRlLnNldGV4dCAmJiBmaXJzdFRva2VuT25MaW5lICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2gobGlzdFJFKSkpIHtcbiAgICAgIHZhciBsaXN0VHlwZSA9IG1hdGNoWzFdID8gXCJvbFwiIDogXCJ1bFwiO1xuXG4gICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IGxpbmVJbmRlbnRhdGlvbiArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoO1xuICAgICAgc3RhdGUubGlzdCA9IHRydWU7XG4gICAgICBzdGF0ZS5xdW90ZSA9IDA7XG5cbiAgICAgIC8vIEFkZCB0aGlzIGxpc3QgaXRlbSdzIGNvbnRlbnQncyBpbmRlbnRhdGlvbiB0byB0aGUgc3RhY2tcbiAgICAgIHN0YXRlLmxpc3RTdGFjay5wdXNoKHN0YXRlLmluZGVudGF0aW9uKTtcbiAgICAgIC8vIFJlc2V0IGlubGluZSBzdHlsZXMgd2hpY2ggc2hvdWxkbid0IHByb3BhZ2F0ZSBhcm9zcyBsaXN0IGl0ZW1zXG4gICAgICBzdGF0ZS5lbSA9IGZhbHNlO1xuICAgICAgc3RhdGUuc3Ryb25nID0gZmFsc2U7XG4gICAgICBzdGF0ZS5jb2RlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG5cbiAgICAgIGlmIChtb2RlQ2ZnLnRhc2tMaXN0cyAmJiBzdHJlYW0ubWF0Y2godGFza0xpc3RSRSwgZmFsc2UpKSB7XG4gICAgICAgIHN0YXRlLnRhc2tMaXN0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gW1wibGlzdFwiLCBcImxpc3QtXCIgKyBsaXN0VHlwZV07XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChmaXJzdFRva2VuT25MaW5lICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goZmVuY2VkQ29kZVJFLCB0cnVlKSkpIHtcbiAgICAgIHN0YXRlLnF1b3RlID0gMDtcbiAgICAgIHN0YXRlLmZlbmNlZEVuZFJFID0gbmV3IFJlZ0V4cChtYXRjaFsxXSArIFwiKyAqJFwiKTtcbiAgICAgIC8vIHRyeSBzd2l0Y2hpbmcgbW9kZVxuICAgICAgc3RhdGUubG9jYWxNb2RlID0gbW9kZUNmZy5mZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmcgJiYgZ2V0TW9kZShtYXRjaFsyXSk7XG4gICAgICBpZiAoc3RhdGUubG9jYWxNb2RlKSBzdGF0ZS5sb2NhbFN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKHN0YXRlLmxvY2FsTW9kZSk7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuYmxvY2sgPSBsb2NhbDtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImNvZGUtYmxvY2tcIjtcbiAgICAgIHN0YXRlLmNvZGUgPSAtMVxuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIC8vIFNFVEVYVCBoYXMgbG93ZXN0IGJsb2NrLXNjb3BlIHByZWNlZGVuY2UgYWZ0ZXIgSFIsIHNvIGNoZWNrIGl0IGFmdGVyXG4gICAgLy8gIHRoZSBvdGhlcnMgKGNvZGUsIGJsb2NrcXVvdGUsIGxpc3QuLi4pXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIGlmIHNldGV4dCBzZXQsIGluZGljYXRlcyBsaW5lIGFmdGVyIC0tLS89PT1cbiAgICAgIHN0YXRlLnNldGV4dCB8fCAoXG4gICAgICAgIC8vIGxpbmUgYmVmb3JlIC0tLS89PT1cbiAgICAgICAgKCFhbGxvd3NJbmxpbmVDb250aW51YXRpb24gfHwgIXByZXZMaW5lSXNMaXN0KSAmJiAhc3RhdGUucXVvdGUgJiYgc3RhdGUubGlzdCA9PT0gZmFsc2UgJiZcbiAgICAgICAgIXN0YXRlLmNvZGUgJiYgIWlzSHIgJiYgIWxpbmtEZWZSRS50ZXN0KHN0cmVhbS5zdHJpbmcpICYmXG4gICAgICAgIChtYXRjaCA9IHN0cmVhbS5sb29rQWhlYWQoMSkpICYmIChtYXRjaCA9IG1hdGNoLm1hdGNoKHNldGV4dEhlYWRlclJFKSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmICggIXN0YXRlLnNldGV4dCApIHtcbiAgICAgICAgc3RhdGUuaGVhZGVyID0gbWF0Y2hbMF0uY2hhckF0KDApID09ICc9JyA/IDEgOiAyO1xuICAgICAgICBzdGF0ZS5zZXRleHQgPSBzdGF0ZS5oZWFkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSBzdGF0ZS5zZXRleHQ7XG4gICAgICAgIC8vIGhhcyBubyBlZmZlY3Qgb24gdHlwZSBzbyB3ZSBjYW4gcmVzZXQgaXQgbm93XG4gICAgICAgIHN0YXRlLnNldGV4dCA9IDA7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaGVhZGVyXCI7XG4gICAgICB9XG4gICAgICBzdGF0ZS50aGlzTGluZS5oZWFkZXIgPSB0cnVlO1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGlzSHIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHN0YXRlLmhyID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhyID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblR5cGVzLmhyO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ1snKSB7XG4gICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBzdGF0ZS5pbmxpbmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbEJsb2NrKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7XG4gICAgaWYgKCFodG1sTW9kZU1pc3NpbmcpIHtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpXG4gICAgICBpZiAoKGlubmVyLm1vZGUubmFtZSA9PSBcInhtbFwiICYmIGlubmVyLnN0YXRlLnRhZ1N0YXJ0ID09PSBudWxsICYmXG4gICAgICAgICAgICghaW5uZXIuc3RhdGUuY29udGV4dCAmJiBpbm5lci5zdGF0ZS50b2tlbml6ZS5pc0luVGV4dCkpIHx8XG4gICAgICAgICAgKHN0YXRlLm1kX2luc2lkZSAmJiBzdHJlYW0uY3VycmVudCgpLmluZGV4T2YoXCI+XCIpID4gLTEpKSB7XG4gICAgICAgIHN0YXRlLmYgPSBpbmxpbmVOb3JtYWw7XG4gICAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2FsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY3Vyckxpc3RJbmQgPSBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdIHx8IDA7XG4gICAgdmFyIGhhc0V4aXRlZExpc3QgPSBzdGF0ZS5pbmRlbnRhdGlvbiA8IGN1cnJMaXN0SW5kO1xuICAgIHZhciBtYXhGZW5jZWRFbmRJbmQgPSBjdXJyTGlzdEluZCArIDM7XG4gICAgaWYgKHN0YXRlLmZlbmNlZEVuZFJFICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heEZlbmNlZEVuZEluZCAmJiAoaGFzRXhpdGVkTGlzdCB8fCBzdHJlYW0ubWF0Y2goc3RhdGUuZmVuY2VkRW5kUkUpKSkge1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiY29kZS1ibG9ja1wiO1xuICAgICAgdmFyIHJldHVyblR5cGU7XG4gICAgICBpZiAoIWhhc0V4aXRlZExpc3QpIHJldHVyblR5cGUgPSBnZXRUeXBlKHN0YXRlKVxuICAgICAgc3RhdGUubG9jYWxNb2RlID0gc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7XG4gICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsO1xuICAgICAgc3RhdGUuZiA9IGlubGluZU5vcm1hbDtcbiAgICAgIHN0YXRlLmZlbmNlZEVuZFJFID0gbnVsbDtcbiAgICAgIHN0YXRlLmNvZGUgPSAwXG4gICAgICBzdGF0ZS50aGlzTGluZS5mZW5jZWRDb2RlRW5kID0gdHJ1ZTtcbiAgICAgIGlmIChoYXNFeGl0ZWRMaXN0KSByZXR1cm4gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgc3RhdGUuYmxvY2spO1xuICAgICAgcmV0dXJuIHJldHVyblR5cGU7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIHRva2VuVHlwZXMuY29kZTtcbiAgICB9XG4gIH1cblxuICAvLyBJbmxpbmVcbiAgZnVuY3Rpb24gZ2V0VHlwZShzdGF0ZSkge1xuICAgIHZhciBzdHlsZXMgPSBbXTtcblxuICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nKSB7XG4gICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcpO1xuXG4gICAgICBpZiAodHlwZW9mIHN0YXRlLmZvcm1hdHRpbmcgPT09IFwic3RyaW5nXCIpIHN0YXRlLmZvcm1hdHRpbmcgPSBbc3RhdGUuZm9ybWF0dGluZ107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuZm9ybWF0dGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0pO1xuXG4gICAgICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nW2ldID09PSBcImhlYWRlclwiKSB7XG4gICAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5mb3JtYXR0aW5nICsgXCItXCIgKyBzdGF0ZS5mb3JtYXR0aW5nW2ldICsgXCItXCIgKyBzdGF0ZS5oZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGBmb3JtYXR0aW5nLXF1b3RlYCBhbmQgYGZvcm1hdHRpbmctcXVvdGUtI2AgZm9yIGJsb2NrcXVvdGVzXG4gICAgICAgIC8vIEFkZCBgZXJyb3JgIGluc3RlYWQgaWYgdGhlIG1heGltdW0gYmxvY2txdW90ZSBuZXN0aW5nIGRlcHRoIGlzIHBhc3NlZFxuICAgICAgICBpZiAoc3RhdGUuZm9ybWF0dGluZ1tpXSA9PT0gXCJxdW90ZVwiKSB7XG4gICAgICAgICAgaWYgKCFtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCB8fCBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA+PSBzdGF0ZS5xdW90ZSkge1xuICAgICAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5mb3JtYXR0aW5nICsgXCItXCIgKyBzdGF0ZS5mb3JtYXR0aW5nW2ldICsgXCItXCIgKyBzdGF0ZS5xdW90ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlcy5wdXNoKFwiZXJyb3JcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRhc2tPcGVuKSB7XG4gICAgICBzdHlsZXMucHVzaChcIm1ldGFcIik7XG4gICAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoc3RhdGUudGFza0Nsb3NlZCkge1xuICAgICAgc3R5bGVzLnB1c2goXCJwcm9wZXJ0eVwiKTtcbiAgICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpbmtIcmVmKSB7XG4gICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpbmtIcmVmLCBcInVybFwiKTtcbiAgICB9IGVsc2UgeyAvLyBPbmx5IGFwcGx5IGlubGluZSBzdHlsZXMgdG8gbm9uLXVybCB0ZXh0XG4gICAgICBpZiAoc3RhdGUuc3Ryb25nKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuc3Ryb25nKTsgfVxuICAgICAgaWYgKHN0YXRlLmVtKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZW0pOyB9XG4gICAgICBpZiAoc3RhdGUuc3RyaWtldGhyb3VnaCkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnN0cmlrZXRocm91Z2gpOyB9XG4gICAgICBpZiAoc3RhdGUuZW1vamkpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5lbW9qaSk7IH1cbiAgICAgIGlmIChzdGF0ZS5saW5rVGV4dCkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpbmtUZXh0KTsgfVxuICAgICAgaWYgKHN0YXRlLmNvZGUpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5jb2RlKTsgfVxuICAgICAgaWYgKHN0YXRlLmltYWdlKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuaW1hZ2UpOyB9XG4gICAgICBpZiAoc3RhdGUuaW1hZ2VBbHRUZXh0KSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuaW1hZ2VBbHRUZXh0LCBcImxpbmtcIik7IH1cbiAgICAgIGlmIChzdGF0ZS5pbWFnZU1hcmtlcikgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmltYWdlTWFya2VyKTsgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZS5oZWFkZXIpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5oZWFkZXIsIHRva2VuVHlwZXMuaGVhZGVyICsgXCItXCIgKyBzdGF0ZS5oZWFkZXIpOyB9XG5cbiAgICBpZiAoc3RhdGUucXVvdGUpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMucXVvdGUpO1xuXG4gICAgICAvLyBBZGQgYHF1b3RlLSNgIHdoZXJlIHRoZSBtYXhpbXVtIGZvciBgI2AgaXMgbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGhcbiAgICAgIGlmICghbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggfHwgbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPj0gc3RhdGUucXVvdGUpIHtcbiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5xdW90ZSArIFwiLVwiICsgc3RhdGUucXVvdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5xdW90ZSArIFwiLVwiICsgbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZS5saXN0ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIGxpc3RNb2QgPSAoc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDEpICUgMztcbiAgICAgIGlmICghbGlzdE1vZCkge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpc3QxKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdE1vZCA9PT0gMSkge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpc3QyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSkge1xuICAgICAgc3R5bGVzLnB1c2goXCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZVwiKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2UpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwidHJhaWxpbmctc3BhY2UtXCIgKyAoc3RhdGUudHJhaWxpbmdTcGFjZSAlIDIgPyBcImFcIiA6IFwiYlwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbignICcpIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2godGV4dFJFLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5saW5lTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS50ZXh0KHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICh0eXBlb2Ygc3R5bGUgIT09ICd1bmRlZmluZWQnKVxuICAgICAgcmV0dXJuIHN0eWxlO1xuXG4gICAgaWYgKHN0YXRlLmxpc3QpIHsgLy8gTGlzdCBtYXJrZXIgKCosICssIC0sIDEuLCBldGMpXG4gICAgICBzdGF0ZS5saXN0ID0gbnVsbDtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFza0xpc3QpIHtcbiAgICAgIHZhciB0YXNrT3BlbiA9IHN0cmVhbS5tYXRjaCh0YXNrTGlzdFJFLCB0cnVlKVsxXSA9PT0gXCIgXCI7XG4gICAgICBpZiAodGFza09wZW4pIHN0YXRlLnRhc2tPcGVuID0gdHJ1ZTtcbiAgICAgIGVsc2Ugc3RhdGUudGFza0Nsb3NlZCA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJ0YXNrXCI7XG4gICAgICBzdGF0ZS50YXNrTGlzdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhc2tPcGVuID0gZmFsc2U7XG4gICAgc3RhdGUudGFza0Nsb3NlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN0YXRlLmhlYWRlciAmJiBzdHJlYW0ubWF0Y2goL14jKyQvLCB0cnVlKSkge1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaGVhZGVyXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIE1hdGNoZXMgbGluayB0aXRsZXMgcHJlc2VudCBvbiBuZXh0IGxpbmVcbiAgICBpZiAoc3RhdGUubGlua1RpdGxlKSB7XG4gICAgICBzdGF0ZS5saW5rVGl0bGUgPSBmYWxzZTtcbiAgICAgIHZhciBtYXRjaENoID0gY2g7XG4gICAgICBpZiAoY2ggPT09ICcoJykge1xuICAgICAgICBtYXRjaENoID0gJyknO1xuICAgICAgfVxuICAgICAgbWF0Y2hDaCA9IChtYXRjaENoKycnKS5yZXBsYWNlKC8oWy4/KiteXFxbXFxdXFxcXCgpe318LV0pL2csIFwiXFxcXCQxXCIpO1xuICAgICAgdmFyIHJlZ2V4ID0gJ15cXFxccyooPzpbXicgKyBtYXRjaENoICsgJ1xcXFxcXFxcXSt8XFxcXFxcXFxcXFxcXFxcXHxcXFxcXFxcXC4pJyArIG1hdGNoQ2g7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG5ldyBSZWdFeHAocmVnZXgpLCB0cnVlKSkge1xuICAgICAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rSHJlZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGJsb2NrIGlzIGNoYW5nZWQsIGl0IG1heSBuZWVkIHRvIGJlIHVwZGF0ZWQgaW4gR0ZNIG1vZGVcbiAgICBpZiAoY2ggPT09ICdgJykge1xuICAgICAgdmFyIHByZXZpb3VzRm9ybWF0dGluZyA9IHN0YXRlLmZvcm1hdHRpbmc7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJjb2RlXCI7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoJ2AnKTtcbiAgICAgIHZhciBjb3VudCA9IHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoXG4gICAgICBpZiAoc3RhdGUuY29kZSA9PSAwICYmICghc3RhdGUucXVvdGUgfHwgY291bnQgPT0gMSkpIHtcbiAgICAgICAgc3RhdGUuY29kZSA9IGNvdW50XG4gICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKVxuICAgICAgfSBlbHNlIGlmIChjb3VudCA9PSBzdGF0ZS5jb2RlKSB7IC8vIE11c3QgYmUgZXhhY3RcbiAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKVxuICAgICAgICBzdGF0ZS5jb2RlID0gMFxuICAgICAgICByZXR1cm4gdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuZm9ybWF0dGluZyA9IHByZXZpb3VzRm9ybWF0dGluZ1xuICAgICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXRlLmNvZGUpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgdmFyIGZvcm1hdHRpbmdFc2NhcGUgPSB0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1lc2NhcGVcIjtcbiAgICAgICAgcmV0dXJuIHR5cGUgPyB0eXBlICsgXCIgXCIgKyBmb3JtYXR0aW5nRXNjYXBlIDogZm9ybWF0dGluZ0VzY2FwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICchJyAmJiBzdHJlYW0ubWF0Y2goL1xcW1teXFxdXSpcXF0gPyg/OlxcKHxcXFspLywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5pbWFnZU1hcmtlciA9IHRydWU7XG4gICAgICBzdGF0ZS5pbWFnZSA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJpbWFnZVwiO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1snICYmIHN0YXRlLmltYWdlTWFya2VyICYmIHN0cmVhbS5tYXRjaCgvW15cXF1dKlxcXShcXCguKj9cXCl8ID9cXFsuKj9cXF0pLywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5pbWFnZU1hcmtlciA9IGZhbHNlO1xuICAgICAgc3RhdGUuaW1hZ2VBbHRUZXh0ID0gdHJ1ZVxuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaW1hZ2VcIjtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICddJyAmJiBzdGF0ZS5pbWFnZUFsdFRleHQpIHtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImltYWdlXCI7XG4gICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgc3RhdGUuaW1hZ2VBbHRUZXh0ID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbWFnZSA9IGZhbHNlO1xuICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IGxpbmtIcmVmO1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnWycgJiYgIXN0YXRlLmltYWdlKSB7XG4gICAgICBpZiAoc3RhdGUubGlua1RleHQgJiYgc3RyZWFtLm1hdGNoKC9eLio/XFxdLykpIHJldHVybiBnZXRUeXBlKHN0YXRlKVxuICAgICAgc3RhdGUubGlua1RleHQgPSB0cnVlO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ10nICYmIHN0YXRlLmxpbmtUZXh0KSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgc3RhdGUubGlua1RleHQgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmlubGluZSA9IHN0YXRlLmYgPSBzdHJlYW0ubWF0Y2goL1xcKC4qP1xcKXwgP1xcWy4qP1xcXS8sIGZhbHNlKSA/IGxpbmtIcmVmIDogaW5saW5lTm9ybWFsXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcXC9cXC8oPzpbXlxcXFw+XXxcXFxcLikrPi8sIGZhbHNlKSkge1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGxpbmtJbmxpbmU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgaWYgKHR5cGUpe1xuICAgICAgICB0eXBlICs9IFwiIFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IFwiXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZSArIHRva2VuVHlwZXMubGlua0lubGluZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL15bXj4gXFxcXF0rQCg/OlteXFxcXD5dfFxcXFwuKSs+LywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gbGlua0lubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBpZiAodHlwZSl7XG4gICAgICAgIHR5cGUgKz0gXCIgXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlICsgdG9rZW5UeXBlcy5saW5rRW1haWw7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVDZmcueG1sICYmIGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eKCEtLXxcXD98IVxcW0NEQVRBXFxbfFthLXpdW2EtejAtOS1dKig/OlxccytbYS16XzouXFwtXSsoPzpcXHMqPVxccypbXj5dKyk/KSpcXHMqKD86PnwkKSkvaSwgZmFsc2UpKSB7XG4gICAgICB2YXIgZW5kID0gc3RyZWFtLnN0cmluZy5pbmRleE9mKFwiPlwiLCBzdHJlYW0ucG9zKTtcbiAgICAgIGlmIChlbmQgIT0gLTEpIHtcbiAgICAgICAgdmFyIGF0dHMgPSBzdHJlYW0uc3RyaW5nLnN1YnN0cmluZyhzdHJlYW0uc3RhcnQsIGVuZCk7XG4gICAgICAgIGlmICgvbWFya2Rvd25cXHMqPVxccyooJ3xcIil7MCwxfTEoJ3xcIil7MCwxfS8udGVzdChhdHRzKSkgc3RhdGUubWRfaW5zaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICBzdGF0ZS5odG1sU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoaHRtbE1vZGUpO1xuICAgICAgcmV0dXJuIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGh0bWxCbG9jayk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVDZmcueG1sICYmIGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eXFwvXFx3Kj8+LykpIHtcbiAgICAgIHN0YXRlLm1kX2luc2lkZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCIqXCIgfHwgY2ggPT09IFwiX1wiKSB7XG4gICAgICB2YXIgbGVuID0gMSwgYmVmb3JlID0gc3RyZWFtLnBvcyA9PSAxID8gXCIgXCIgOiBzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0ucG9zIC0gMilcbiAgICAgIHdoaWxlIChsZW4gPCAzICYmIHN0cmVhbS5lYXQoY2gpKSBsZW4rK1xuICAgICAgdmFyIGFmdGVyID0gc3RyZWFtLnBlZWsoKSB8fCBcIiBcIlxuICAgICAgLy8gU2VlIGh0dHA6Ly9zcGVjLmNvbW1vbm1hcmsub3JnLzAuMjcvI2VtcGhhc2lzLWFuZC1zdHJvbmctZW1waGFzaXNcbiAgICAgIHZhciBsZWZ0RmxhbmtpbmcgPSAhL1xccy8udGVzdChhZnRlcikgJiYgKCFwdW5jdHVhdGlvbi50ZXN0KGFmdGVyKSB8fCAvXFxzLy50ZXN0KGJlZm9yZSkgfHwgcHVuY3R1YXRpb24udGVzdChiZWZvcmUpKVxuICAgICAgdmFyIHJpZ2h0RmxhbmtpbmcgPSAhL1xccy8udGVzdChiZWZvcmUpICYmICghcHVuY3R1YXRpb24udGVzdChiZWZvcmUpIHx8IC9cXHMvLnRlc3QoYWZ0ZXIpIHx8IHB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpKVxuICAgICAgdmFyIHNldEVtID0gbnVsbCwgc2V0U3Ryb25nID0gbnVsbFxuICAgICAgaWYgKGxlbiAlIDIpIHsgLy8gRW1cbiAgICAgICAgaWYgKCFzdGF0ZS5lbSAmJiBsZWZ0RmxhbmtpbmcgJiYgKGNoID09PSBcIipcIiB8fCAhcmlnaHRGbGFua2luZyB8fCBwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkpKVxuICAgICAgICAgIHNldEVtID0gdHJ1ZVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS5lbSA9PSBjaCAmJiByaWdodEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIWxlZnRGbGFua2luZyB8fCBwdW5jdHVhdGlvbi50ZXN0KGFmdGVyKSkpXG4gICAgICAgICAgc2V0RW0gPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKGxlbiA+IDEpIHsgLy8gU3Ryb25nXG4gICAgICAgIGlmICghc3RhdGUuc3Ryb25nICYmIGxlZnRGbGFua2luZyAmJiAoY2ggPT09IFwiKlwiIHx8ICFyaWdodEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYmVmb3JlKSkpXG4gICAgICAgICAgc2V0U3Ryb25nID0gdHJ1ZVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHJvbmcgPT0gY2ggJiYgcmlnaHRGbGFua2luZyAmJiAoY2ggPT09IFwiKlwiIHx8ICFsZWZ0RmxhbmtpbmcgfHwgcHVuY3R1YXRpb24udGVzdChhZnRlcikpKVxuICAgICAgICAgIHNldFN0cm9uZyA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoc2V0U3Ryb25nICE9IG51bGwgfHwgc2V0RW0gIT0gbnVsbCkge1xuICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gc2V0RW0gPT0gbnVsbCA/IFwic3Ryb25nXCIgOiBzZXRTdHJvbmcgPT0gbnVsbCA/IFwiZW1cIiA6IFwic3Ryb25nIGVtXCJcbiAgICAgICAgaWYgKHNldEVtID09PSB0cnVlKSBzdGF0ZS5lbSA9IGNoXG4gICAgICAgIGlmIChzZXRTdHJvbmcgPT09IHRydWUpIHN0YXRlLnN0cm9uZyA9IGNoXG4gICAgICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSlcbiAgICAgICAgaWYgKHNldEVtID09PSBmYWxzZSkgc3RhdGUuZW0gPSBmYWxzZVxuICAgICAgICBpZiAoc2V0U3Ryb25nID09PSBmYWxzZSkgc3RhdGUuc3Ryb25nID0gZmFsc2VcbiAgICAgICAgcmV0dXJuIHRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAnICcpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCcqJykgfHwgc3RyZWFtLmVhdCgnXycpKSB7IC8vIFByb2JhYmx5IHN1cnJvdW5kZWQgYnkgc3BhY2VzXG4gICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnICcpIHsgLy8gU3Vycm91bmRlZCBieSBzcGFjZXMsIGlnbm9yZVxuICAgICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gTm90IHN1cnJvdW5kZWQgYnkgc3BhY2VzLCBiYWNrIHVwIHBvaW50ZXJcbiAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZGVDZmcuc3RyaWtldGhyb3VnaCkge1xuICAgICAgaWYgKGNoID09PSAnficgJiYgc3RyZWFtLmVhdFdoaWxlKGNoKSkge1xuICAgICAgICBpZiAoc3RhdGUuc3RyaWtldGhyb3VnaCkgey8vIFJlbW92ZSBzdHJpa2V0aHJvdWdoXG4gICAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwic3RyaWtldGhyb3VnaFwiO1xuICAgICAgICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICAgICAgc3RhdGUuc3RyaWtldGhyb3VnaCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlteXFxzXS8sIGZhbHNlKSkgey8vIEFkZCBzdHJpa2V0aHJvdWdoXG4gICAgICAgICAgc3RhdGUuc3RyaWtldGhyb3VnaCA9IHRydWU7XG4gICAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwic3RyaWtldGhyb3VnaFwiO1xuICAgICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJyAnKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15+fi8sIHRydWUpKSB7IC8vIFByb2JhYmx5IHN1cnJvdW5kZWQgYnkgc3BhY2VcbiAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJyAnKSB7IC8vIFN1cnJvdW5kZWQgYnkgc3BhY2VzLCBpZ25vcmVcbiAgICAgICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgeyAvLyBOb3Qgc3Vycm91bmRlZCBieSBzcGFjZXMsIGJhY2sgdXAgcG9pbnRlclxuICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy5lbW9qaSAmJiBjaCA9PT0gXCI6XCIgJiYgc3RyZWFtLm1hdGNoKC9eKD86W2Etel9cXGQrXVthLXpfXFxkKy1dKnxcXC1bYS16X1xcZCtdW2Etel9cXGQrLV0qKTovKSkge1xuICAgICAgc3RhdGUuZW1vamkgPSB0cnVlO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiZW1vamlcIjtcbiAgICAgIHZhciByZXRUeXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5lbW9qaSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldFR5cGU7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnICcpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14gKyQvLCBmYWxzZSkpIHtcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZSsrO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50cmFpbGluZ1NwYWNlKSB7XG4gICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rSW5saW5lKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgaWYgKGNoID09PSBcIj5cIikge1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBpZiAodHlwZSl7XG4gICAgICAgIHR5cGUgKz0gXCIgXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlICsgdG9rZW5UeXBlcy5saW5rSW5saW5lO1xuICAgIH1cblxuICAgIHN0cmVhbS5tYXRjaCgvXltePl0rLywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rSW5saW5lO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlua0hyZWYoc3RyZWFtLCBzdGF0ZSkge1xuICAgIC8vIENoZWNrIGlmIHNwYWNlLCBhbmQgcmV0dXJuIE5VTEwgaWYgc28gKHRvIGF2b2lkIG1hcmtpbmcgdGhlIHNwYWNlKVxuICAgIGlmKHN0cmVhbS5lYXRTcGFjZSgpKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PT0gJygnIHx8IGNoID09PSAnWycpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBnZXRMaW5rSHJlZkluc2lkZShjaCA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXVwiKTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmstc3RyaW5nXCI7XG4gICAgICBzdGF0ZS5saW5rSHJlZiA9IHRydWU7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiAnZXJyb3InO1xuICB9XG5cbiAgdmFyIGxpbmtSRSA9IHtcbiAgICBcIilcIjogL14oPzpbXlxcXFxcXChcXCldfFxcXFwufFxcKCg/OlteXFxcXFxcKFxcKV18XFxcXC4pKlxcKSkqPyg/PVxcKSkvLFxuICAgIFwiXVwiOiAvXig/OlteXFxcXFxcW1xcXV18XFxcXC58XFxbKD86W15cXFxcXFxbXFxdXXxcXFxcLikqXFxdKSo/KD89XFxdKS9cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExpbmtIcmVmSW5zaWRlKGVuZENoYXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgICAgaWYgKGNoID09PSBlbmRDaGFyKSB7XG4gICAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7XG4gICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmstc3RyaW5nXCI7XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5saW5rSHJlZiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmV0dXJuU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS5tYXRjaChsaW5rUkVbZW5kQ2hhcl0pXG4gICAgICBzdGF0ZS5saW5rSHJlZiA9IHRydWU7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvb3Rub3RlTGluayhzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXihbXlxcXVxcXFxdfFxcXFwuKSpcXF06LywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5mID0gZm9vdG5vdGVMaW5rSW5zaWRlO1xuICAgICAgc3RyZWFtLm5leHQoKTsgLy8gQ29uc3VtZSBbXG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IHRydWU7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lTm9ybWFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvb3Rub3RlTGlua0luc2lkZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcXTovLCB0cnVlKSkge1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGZvb3Rub3RlVXJsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHJldHVyblR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIHN0YXRlLmxpbmtUZXh0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcbiAgICB9XG5cbiAgICBzdHJlYW0ubWF0Y2goL14oW15cXF1cXFxcXXxcXFxcLikrLywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rVGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvb3Rub3RlVXJsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyBDaGVjayBpZiBzcGFjZSwgYW5kIHJldHVybiBOVUxMIGlmIHNvICh0byBhdm9pZCBtYXJraW5nIHRoZSBzcGFjZSlcbiAgICBpZihzdHJlYW0uZWF0U3BhY2UoKSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gTWF0Y2ggVVJMXG4gICAgc3RyZWFtLm1hdGNoKC9eW15cXHNdKy8sIHRydWUpO1xuICAgIC8vIENoZWNrIGZvciBsaW5rIHRpdGxlXG4gICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09IHVuZGVmaW5lZCkgeyAvLyBFbmQgb2YgbGluZSwgc2V0IGZsYWcgdG8gY2hlY2sgbmV4dCBsaW5lXG4gICAgICBzdGF0ZS5saW5rVGl0bGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7IC8vIE1vcmUgY29udGVudCBvbiBsaW5lLCBjaGVjayBpZiBsaW5rIHRpdGxlXG4gICAgICBzdHJlYW0ubWF0Y2goL14oPzpcXHMrKD86XCIoPzpbXlwiXFxcXF18XFxcXFxcXFx8XFxcXC4pK1wifCcoPzpbXidcXFxcXXxcXFxcXFxcXHxcXFxcLikrJ3xcXCgoPzpbXilcXFxcXXxcXFxcXFxcXHxcXFxcLikrXFwpKSk/LywgdHJ1ZSk7XG4gICAgfVxuICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7XG4gICAgcmV0dXJuIHRva2VuVHlwZXMubGlua0hyZWYgKyBcIiB1cmxcIjtcbiAgfVxuXG4gIHZhciBtb2RlID0ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZjogYmxvY2tOb3JtYWwsXG5cbiAgICAgICAgcHJldkxpbmU6IHtzdHJlYW06IG51bGx9LFxuICAgICAgICB0aGlzTGluZToge3N0cmVhbTogbnVsbH0sXG5cbiAgICAgICAgYmxvY2s6IGJsb2NrTm9ybWFsLFxuICAgICAgICBodG1sU3RhdGU6IG51bGwsXG4gICAgICAgIGluZGVudGF0aW9uOiAwLFxuXG4gICAgICAgIGlubGluZTogaW5saW5lTm9ybWFsLFxuICAgICAgICB0ZXh0OiBoYW5kbGVUZXh0LFxuXG4gICAgICAgIGZvcm1hdHRpbmc6IGZhbHNlLFxuICAgICAgICBsaW5rVGV4dDogZmFsc2UsXG4gICAgICAgIGxpbmtIcmVmOiBmYWxzZSxcbiAgICAgICAgbGlua1RpdGxlOiBmYWxzZSxcbiAgICAgICAgY29kZTogMCxcbiAgICAgICAgZW06IGZhbHNlLFxuICAgICAgICBzdHJvbmc6IGZhbHNlLFxuICAgICAgICBoZWFkZXI6IDAsXG4gICAgICAgIHNldGV4dDogMCxcbiAgICAgICAgaHI6IGZhbHNlLFxuICAgICAgICB0YXNrTGlzdDogZmFsc2UsXG4gICAgICAgIGxpc3Q6IGZhbHNlLFxuICAgICAgICBsaXN0U3RhY2s6IFtdLFxuICAgICAgICBxdW90ZTogMCxcbiAgICAgICAgdHJhaWxpbmdTcGFjZTogMCxcbiAgICAgICAgdHJhaWxpbmdTcGFjZU5ld0xpbmU6IGZhbHNlLFxuICAgICAgICBzdHJpa2V0aHJvdWdoOiBmYWxzZSxcbiAgICAgICAgZW1vamk6IGZhbHNlLFxuICAgICAgICBmZW5jZWRFbmRSRTogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY29weVN0YXRlOiBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmOiBzLmYsXG5cbiAgICAgICAgcHJldkxpbmU6IHMucHJldkxpbmUsXG4gICAgICAgIHRoaXNMaW5lOiBzLnRoaXNMaW5lLFxuXG4gICAgICAgIGJsb2NrOiBzLmJsb2NrLFxuICAgICAgICBodG1sU3RhdGU6IHMuaHRtbFN0YXRlICYmIENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzLmh0bWxTdGF0ZSksXG4gICAgICAgIGluZGVudGF0aW9uOiBzLmluZGVudGF0aW9uLFxuXG4gICAgICAgIGxvY2FsTW9kZTogcy5sb2NhbE1vZGUsXG4gICAgICAgIGxvY2FsU3RhdGU6IHMubG9jYWxNb2RlID8gQ29kZU1pcnJvci5jb3B5U3RhdGUocy5sb2NhbE1vZGUsIHMubG9jYWxTdGF0ZSkgOiBudWxsLFxuXG4gICAgICAgIGlubGluZTogcy5pbmxpbmUsXG4gICAgICAgIHRleHQ6IHMudGV4dCxcbiAgICAgICAgZm9ybWF0dGluZzogZmFsc2UsXG4gICAgICAgIGxpbmtUZXh0OiBzLmxpbmtUZXh0LFxuICAgICAgICBsaW5rVGl0bGU6IHMubGlua1RpdGxlLFxuICAgICAgICBsaW5rSHJlZjogcy5saW5rSHJlZixcbiAgICAgICAgY29kZTogcy5jb2RlLFxuICAgICAgICBlbTogcy5lbSxcbiAgICAgICAgc3Ryb25nOiBzLnN0cm9uZyxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogcy5zdHJpa2V0aHJvdWdoLFxuICAgICAgICBlbW9qaTogcy5lbW9qaSxcbiAgICAgICAgaGVhZGVyOiBzLmhlYWRlcixcbiAgICAgICAgc2V0ZXh0OiBzLnNldGV4dCxcbiAgICAgICAgaHI6IHMuaHIsXG4gICAgICAgIHRhc2tMaXN0OiBzLnRhc2tMaXN0LFxuICAgICAgICBsaXN0OiBzLmxpc3QsXG4gICAgICAgIGxpc3RTdGFjazogcy5saXN0U3RhY2suc2xpY2UoMCksXG4gICAgICAgIHF1b3RlOiBzLnF1b3RlLFxuICAgICAgICBpbmRlbnRlZENvZGU6IHMuaW5kZW50ZWRDb2RlLFxuICAgICAgICB0cmFpbGluZ1NwYWNlOiBzLnRyYWlsaW5nU3BhY2UsXG4gICAgICAgIHRyYWlsaW5nU3BhY2VOZXdMaW5lOiBzLnRyYWlsaW5nU3BhY2VOZXdMaW5lLFxuICAgICAgICBtZF9pbnNpZGU6IHMubWRfaW5zaWRlLFxuICAgICAgICBmZW5jZWRFbmRSRTogcy5mZW5jZWRFbmRSRVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcblxuICAgICAgLy8gUmVzZXQgc3RhdGUuZm9ybWF0dGluZ1xuICAgICAgc3RhdGUuZm9ybWF0dGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RyZWFtICE9IHN0YXRlLnRoaXNMaW5lLnN0cmVhbSkge1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSAwO1xuICAgICAgICBzdGF0ZS5ociA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXHMqJC8sIHRydWUpKSB7XG4gICAgICAgICAgYmxhbmtMaW5lKHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnByZXZMaW5lID0gc3RhdGUudGhpc0xpbmVcbiAgICAgICAgc3RhdGUudGhpc0xpbmUgPSB7c3RyZWFtOiBzdHJlYW19XG5cbiAgICAgICAgLy8gUmVzZXQgc3RhdGUudGFza0xpc3RcbiAgICAgICAgc3RhdGUudGFza0xpc3QgPSBmYWxzZTtcblxuICAgICAgICAvLyBSZXNldCBzdGF0ZS50cmFpbGluZ1NwYWNlXG4gICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2UgPSAwO1xuICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghc3RhdGUubG9jYWxTdGF0ZSkge1xuICAgICAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jaztcbiAgICAgICAgICBpZiAoc3RhdGUuZiAhPSBodG1sQmxvY2spIHtcbiAgICAgICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IHN0cmVhbS5tYXRjaCgvXlxccyovLCB0cnVlKVswXS5yZXBsYWNlKC9cXHQvZywgZXhwYW5kZWRUYWIpLmxlbmd0aDtcbiAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGluZGVudGF0aW9uID4gMCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGUuZihzdHJlYW0sIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmJsb2NrID09IGh0bWxCbG9jaykgcmV0dXJuIHtzdGF0ZTogc3RhdGUuaHRtbFN0YXRlLCBtb2RlOiBodG1sTW9kZX07XG4gICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSkgcmV0dXJuIHtzdGF0ZTogc3RhdGUubG9jYWxTdGF0ZSwgbW9kZTogc3RhdGUubG9jYWxNb2RlfTtcbiAgICAgIHJldHVybiB7c3RhdGU6IHN0YXRlLCBtb2RlOiBtb2RlfTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKSB7XG4gICAgICBpZiAoc3RhdGUuYmxvY2sgPT0gaHRtbEJsb2NrICYmIGh0bWxNb2RlLmluZGVudCkgcmV0dXJuIGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlciwgbGluZSlcbiAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlICYmIHN0YXRlLmxvY2FsTW9kZS5pbmRlbnQpIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlciwgbGluZSlcbiAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3NcbiAgICB9LFxuXG4gICAgYmxhbmtMaW5lOiBibGFua0xpbmUsXG5cbiAgICBnZXRUeXBlOiBnZXRUeXBlLFxuXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiPCEtLVwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCItLT5cIixcbiAgICBjbG9zZUJyYWNrZXRzOiBcIigpW117fScnXFxcIlxcXCJgYFwiLFxuICAgIGZvbGQ6IFwibWFya2Rvd25cIlxuICB9O1xuICByZXR1cm4gbW9kZTtcbn0sIFwieG1sXCIpO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L21hcmtkb3duXCIsIFwibWFya2Rvd25cIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1tYXJrZG93blwiLCBcIm1hcmtkb3duXCIpO1xuXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFYQTtBQWVBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFHQTtBQUdBO0FBR0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUZBO0FBQ0E7QUFDQTtBQWlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBO0FBQ0E7QUFDQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUEvQkE7QUFDQTtBQUNBO0FBaUNBO0FBTUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXBCQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVhBO0FBY0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQS9TQTtBQUNBO0FBQ0E7QUFpVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBeENBO0FBQ0E7QUFDQTtBQTBDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUE4QkE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvQkE7QUFGQTtBQXFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQ0E7QUF0Q0E7QUE2RUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBL0dBO0FBa0hBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBckhBO0FBd0hBO0FBQ0E7QUFDQTtBQUNBO0FBM0hBO0FBOEhBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXJJQTtBQXVJQTtBQTkxQkE7QUFpMkJBO0FBRUE7QUE3MkJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/markdown/markdown.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/meta.js": -/*!***********************************************!*\ - !*** ../node_modules/codemirror/mode/meta.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [{\n name: \"APL\",\n mime: \"text/apl\",\n mode: \"apl\",\n ext: [\"dyalog\", \"apl\"]\n }, {\n name: \"PGP\",\n mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"],\n mode: \"asciiarmor\",\n ext: [\"asc\", \"pgp\", \"sig\"]\n }, {\n name: \"ASN.1\",\n mime: \"text/x-ttcn-asn\",\n mode: \"asn.1\",\n ext: [\"asn\", \"asn1\"]\n }, {\n name: \"Asterisk\",\n mime: \"text/x-asterisk\",\n mode: \"asterisk\",\n file: /^extensions\\.conf$/i\n }, {\n name: \"Brainfuck\",\n mime: \"text/x-brainfuck\",\n mode: \"brainfuck\",\n ext: [\"b\", \"bf\"]\n }, {\n name: \"C\",\n mime: \"text/x-csrc\",\n mode: \"clike\",\n ext: [\"c\", \"h\", \"ino\"]\n }, {\n name: \"C++\",\n mime: \"text/x-c++src\",\n mode: \"clike\",\n ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n alias: [\"cpp\"]\n }, {\n name: \"Cobol\",\n mime: \"text/x-cobol\",\n mode: \"cobol\",\n ext: [\"cob\", \"cpy\"]\n }, {\n name: \"C#\",\n mime: \"text/x-csharp\",\n mode: \"clike\",\n ext: [\"cs\"],\n alias: [\"csharp\", \"cs\"]\n }, {\n name: \"Clojure\",\n mime: \"text/x-clojure\",\n mode: \"clojure\",\n ext: [\"clj\", \"cljc\", \"cljx\"]\n }, {\n name: \"ClojureScript\",\n mime: \"text/x-clojurescript\",\n mode: \"clojure\",\n ext: [\"cljs\"]\n }, {\n name: \"Closure Stylesheets (GSS)\",\n mime: \"text/x-gss\",\n mode: \"css\",\n ext: [\"gss\"]\n }, {\n name: \"CMake\",\n mime: \"text/x-cmake\",\n mode: \"cmake\",\n ext: [\"cmake\", \"cmake.in\"],\n file: /^CMakeLists.txt$/\n }, {\n name: \"CoffeeScript\",\n mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"],\n mode: \"coffeescript\",\n ext: [\"coffee\"],\n alias: [\"coffee\", \"coffee-script\"]\n }, {\n name: \"Common Lisp\",\n mime: \"text/x-common-lisp\",\n mode: \"commonlisp\",\n ext: [\"cl\", \"lisp\", \"el\"],\n alias: [\"lisp\"]\n }, {\n name: \"Cypher\",\n mime: \"application/x-cypher-query\",\n mode: \"cypher\",\n ext: [\"cyp\", \"cypher\"]\n }, {\n name: \"Cython\",\n mime: \"text/x-cython\",\n mode: \"python\",\n ext: [\"pyx\", \"pxd\", \"pxi\"]\n }, {\n name: \"Crystal\",\n mime: \"text/x-crystal\",\n mode: \"crystal\",\n ext: [\"cr\"]\n }, {\n name: \"CSS\",\n mime: \"text/css\",\n mode: \"css\",\n ext: [\"css\"]\n }, {\n name: \"CQL\",\n mime: \"text/x-cassandra\",\n mode: \"sql\",\n ext: [\"cql\"]\n }, {\n name: \"D\",\n mime: \"text/x-d\",\n mode: \"d\",\n ext: [\"d\"]\n }, {\n name: \"Dart\",\n mimes: [\"application/dart\", \"text/x-dart\"],\n mode: \"dart\",\n ext: [\"dart\"]\n }, {\n name: \"diff\",\n mime: \"text/x-diff\",\n mode: \"diff\",\n ext: [\"diff\", \"patch\"]\n }, {\n name: \"Django\",\n mime: \"text/x-django\",\n mode: \"django\"\n }, {\n name: \"Dockerfile\",\n mime: \"text/x-dockerfile\",\n mode: \"dockerfile\",\n file: /^Dockerfile$/\n }, {\n name: \"DTD\",\n mime: \"application/xml-dtd\",\n mode: \"dtd\",\n ext: [\"dtd\"]\n }, {\n name: \"Dylan\",\n mime: \"text/x-dylan\",\n mode: \"dylan\",\n ext: [\"dylan\", \"dyl\", \"intr\"]\n }, {\n name: \"EBNF\",\n mime: \"text/x-ebnf\",\n mode: \"ebnf\"\n }, {\n name: \"ECL\",\n mime: \"text/x-ecl\",\n mode: \"ecl\",\n ext: [\"ecl\"]\n }, {\n name: \"edn\",\n mime: \"application/edn\",\n mode: \"clojure\",\n ext: [\"edn\"]\n }, {\n name: \"Eiffel\",\n mime: \"text/x-eiffel\",\n mode: \"eiffel\",\n ext: [\"e\"]\n }, {\n name: \"Elm\",\n mime: \"text/x-elm\",\n mode: \"elm\",\n ext: [\"elm\"]\n }, {\n name: \"Embedded Javascript\",\n mime: \"application/x-ejs\",\n mode: \"htmlembedded\",\n ext: [\"ejs\"]\n }, {\n name: \"Embedded Ruby\",\n mime: \"application/x-erb\",\n mode: \"htmlembedded\",\n ext: [\"erb\"]\n }, {\n name: \"Erlang\",\n mime: \"text/x-erlang\",\n mode: \"erlang\",\n ext: [\"erl\"]\n }, {\n name: \"Esper\",\n mime: \"text/x-esper\",\n mode: \"sql\"\n }, {\n name: \"Factor\",\n mime: \"text/x-factor\",\n mode: \"factor\",\n ext: [\"factor\"]\n }, {\n name: \"FCL\",\n mime: \"text/x-fcl\",\n mode: \"fcl\"\n }, {\n name: \"Forth\",\n mime: \"text/x-forth\",\n mode: \"forth\",\n ext: [\"forth\", \"fth\", \"4th\"]\n }, {\n name: \"Fortran\",\n mime: \"text/x-fortran\",\n mode: \"fortran\",\n ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]\n }, {\n name: \"F#\",\n mime: \"text/x-fsharp\",\n mode: \"mllike\",\n ext: [\"fs\"],\n alias: [\"fsharp\"]\n }, {\n name: \"Gas\",\n mime: \"text/x-gas\",\n mode: \"gas\",\n ext: [\"s\"]\n }, {\n name: \"Gherkin\",\n mime: \"text/x-feature\",\n mode: \"gherkin\",\n ext: [\"feature\"]\n }, {\n name: \"GitHub Flavored Markdown\",\n mime: \"text/x-gfm\",\n mode: \"gfm\",\n file: /^(readme|contributing|history).md$/i\n }, {\n name: \"Go\",\n mime: \"text/x-go\",\n mode: \"go\",\n ext: [\"go\"]\n }, {\n name: \"Groovy\",\n mime: \"text/x-groovy\",\n mode: \"groovy\",\n ext: [\"groovy\", \"gradle\"],\n file: /^Jenkinsfile$/\n }, {\n name: \"HAML\",\n mime: \"text/x-haml\",\n mode: \"haml\",\n ext: [\"haml\"]\n }, {\n name: \"Haskell\",\n mime: \"text/x-haskell\",\n mode: \"haskell\",\n ext: [\"hs\"]\n }, {\n name: \"Haskell (Literate)\",\n mime: \"text/x-literate-haskell\",\n mode: \"haskell-literate\",\n ext: [\"lhs\"]\n }, {\n name: \"Haxe\",\n mime: \"text/x-haxe\",\n mode: \"haxe\",\n ext: [\"hx\"]\n }, {\n name: \"HXML\",\n mime: \"text/x-hxml\",\n mode: \"haxe\",\n ext: [\"hxml\"]\n }, {\n name: \"ASP.NET\",\n mime: \"application/x-aspx\",\n mode: \"htmlembedded\",\n ext: [\"aspx\"],\n alias: [\"asp\", \"aspx\"]\n }, {\n name: \"HTML\",\n mime: \"text/html\",\n mode: \"htmlmixed\",\n ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n alias: [\"xhtml\"]\n }, {\n name: \"HTTP\",\n mime: \"message/http\",\n mode: \"http\"\n }, {\n name: \"IDL\",\n mime: \"text/x-idl\",\n mode: \"idl\",\n ext: [\"pro\"]\n }, {\n name: \"Pug\",\n mime: \"text/x-pug\",\n mode: \"pug\",\n ext: [\"jade\", \"pug\"],\n alias: [\"jade\"]\n }, {\n name: \"Java\",\n mime: \"text/x-java\",\n mode: \"clike\",\n ext: [\"java\"]\n }, {\n name: \"Java Server Pages\",\n mime: \"application/x-jsp\",\n mode: \"htmlembedded\",\n ext: [\"jsp\"],\n alias: [\"jsp\"]\n }, {\n name: \"JavaScript\",\n mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\",\n ext: [\"js\"],\n alias: [\"ecmascript\", \"js\", \"node\"]\n }, {\n name: \"JSON\",\n mimes: [\"application/json\", \"application/x-json\"],\n mode: \"javascript\",\n ext: [\"json\", \"map\"],\n alias: [\"json5\"]\n }, {\n name: \"JSON-LD\",\n mime: \"application/ld+json\",\n mode: \"javascript\",\n ext: [\"jsonld\"],\n alias: [\"jsonld\"]\n }, {\n name: \"JSX\",\n mime: \"text/jsx\",\n mode: \"jsx\",\n ext: [\"jsx\"]\n }, {\n name: \"Jinja2\",\n mime: \"text/jinja2\",\n mode: \"jinja2\",\n ext: [\"j2\", \"jinja\", \"jinja2\"]\n }, {\n name: \"Julia\",\n mime: \"text/x-julia\",\n mode: \"julia\",\n ext: [\"jl\"]\n }, {\n name: \"Kotlin\",\n mime: \"text/x-kotlin\",\n mode: \"clike\",\n ext: [\"kt\"]\n }, {\n name: \"LESS\",\n mime: \"text/x-less\",\n mode: \"css\",\n ext: [\"less\"]\n }, {\n name: \"LiveScript\",\n mime: \"text/x-livescript\",\n mode: \"livescript\",\n ext: [\"ls\"],\n alias: [\"ls\"]\n }, {\n name: \"Lua\",\n mime: \"text/x-lua\",\n mode: \"lua\",\n ext: [\"lua\"]\n }, {\n name: \"Markdown\",\n mime: \"text/x-markdown\",\n mode: \"markdown\",\n ext: [\"markdown\", \"md\", \"mkd\"]\n }, {\n name: \"mIRC\",\n mime: \"text/mirc\",\n mode: \"mirc\"\n }, {\n name: \"MariaDB SQL\",\n mime: \"text/x-mariadb\",\n mode: \"sql\"\n }, {\n name: \"Mathematica\",\n mime: \"text/x-mathematica\",\n mode: \"mathematica\",\n ext: [\"m\", \"nb\", \"wl\", \"wls\"]\n }, {\n name: \"Modelica\",\n mime: \"text/x-modelica\",\n mode: \"modelica\",\n ext: [\"mo\"]\n }, {\n name: \"MUMPS\",\n mime: \"text/x-mumps\",\n mode: \"mumps\",\n ext: [\"mps\"]\n }, {\n name: \"MS SQL\",\n mime: \"text/x-mssql\",\n mode: \"sql\"\n }, {\n name: \"mbox\",\n mime: \"application/mbox\",\n mode: \"mbox\",\n ext: [\"mbox\"]\n }, {\n name: \"MySQL\",\n mime: \"text/x-mysql\",\n mode: \"sql\"\n }, {\n name: \"Nginx\",\n mime: \"text/x-nginx-conf\",\n mode: \"nginx\",\n file: /nginx.*\\.conf$/i\n }, {\n name: \"NSIS\",\n mime: \"text/x-nsis\",\n mode: \"nsis\",\n ext: [\"nsh\", \"nsi\"]\n }, {\n name: \"NTriples\",\n mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\",\n ext: [\"nt\", \"nq\"]\n }, {\n name: \"Objective-C\",\n mime: \"text/x-objectivec\",\n mode: \"clike\",\n ext: [\"m\"],\n alias: [\"objective-c\", \"objc\"]\n }, {\n name: \"Objective-C++\",\n mime: \"text/x-objectivec++\",\n mode: \"clike\",\n ext: [\"mm\"],\n alias: [\"objective-c++\", \"objc++\"]\n }, {\n name: \"OCaml\",\n mime: \"text/x-ocaml\",\n mode: \"mllike\",\n ext: [\"ml\", \"mli\", \"mll\", \"mly\"]\n }, {\n name: \"Octave\",\n mime: \"text/x-octave\",\n mode: \"octave\",\n ext: [\"m\"]\n }, {\n name: \"Oz\",\n mime: \"text/x-oz\",\n mode: \"oz\",\n ext: [\"oz\"]\n }, {\n name: \"Pascal\",\n mime: \"text/x-pascal\",\n mode: \"pascal\",\n ext: [\"p\", \"pas\"]\n }, {\n name: \"PEG.js\",\n mime: \"null\",\n mode: \"pegjs\",\n ext: [\"jsonld\"]\n }, {\n name: \"Perl\",\n mime: \"text/x-perl\",\n mode: \"perl\",\n ext: [\"pl\", \"pm\"]\n }, {\n name: \"PHP\",\n mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"],\n mode: \"php\",\n ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]\n }, {\n name: \"Pig\",\n mime: \"text/x-pig\",\n mode: \"pig\",\n ext: [\"pig\"]\n }, {\n name: \"Plain Text\",\n mime: \"text/plain\",\n mode: \"null\",\n ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]\n }, {\n name: \"PLSQL\",\n mime: \"text/x-plsql\",\n mode: \"sql\",\n ext: [\"pls\"]\n }, {\n name: \"PostgreSQL\",\n mime: \"text/x-pgsql\",\n mode: \"sql\"\n }, {\n name: \"PowerShell\",\n mime: \"application/x-powershell\",\n mode: \"powershell\",\n ext: [\"ps1\", \"psd1\", \"psm1\"]\n }, {\n name: \"Properties files\",\n mime: \"text/x-properties\",\n mode: \"properties\",\n ext: [\"properties\", \"ini\", \"in\"],\n alias: [\"ini\", \"properties\"]\n }, {\n name: \"ProtoBuf\",\n mime: \"text/x-protobuf\",\n mode: \"protobuf\",\n ext: [\"proto\"]\n }, {\n name: \"Python\",\n mime: \"text/x-python\",\n mode: \"python\",\n ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n file: /^(BUCK|BUILD)$/\n }, {\n name: \"Puppet\",\n mime: \"text/x-puppet\",\n mode: \"puppet\",\n ext: [\"pp\"]\n }, {\n name: \"Q\",\n mime: \"text/x-q\",\n mode: \"q\",\n ext: [\"q\"]\n }, {\n name: \"R\",\n mime: \"text/x-rsrc\",\n mode: \"r\",\n ext: [\"r\", \"R\"],\n alias: [\"rscript\"]\n }, {\n name: \"reStructuredText\",\n mime: \"text/x-rst\",\n mode: \"rst\",\n ext: [\"rst\"],\n alias: [\"rst\"]\n }, {\n name: \"RPM Changes\",\n mime: \"text/x-rpm-changes\",\n mode: \"rpm\"\n }, {\n name: \"RPM Spec\",\n mime: \"text/x-rpm-spec\",\n mode: \"rpm\",\n ext: [\"spec\"]\n }, {\n name: \"Ruby\",\n mime: \"text/x-ruby\",\n mode: \"ruby\",\n ext: [\"rb\"],\n alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]\n }, {\n name: \"Rust\",\n mime: \"text/x-rustsrc\",\n mode: \"rust\",\n ext: [\"rs\"]\n }, {\n name: \"SAS\",\n mime: \"text/x-sas\",\n mode: \"sas\",\n ext: [\"sas\"]\n }, {\n name: \"Sass\",\n mime: \"text/x-sass\",\n mode: \"sass\",\n ext: [\"sass\"]\n }, {\n name: \"Scala\",\n mime: \"text/x-scala\",\n mode: \"clike\",\n ext: [\"scala\"]\n }, {\n name: \"Scheme\",\n mime: \"text/x-scheme\",\n mode: \"scheme\",\n ext: [\"scm\", \"ss\"]\n }, {\n name: \"SCSS\",\n mime: \"text/x-scss\",\n mode: \"css\",\n ext: [\"scss\"]\n }, {\n name: \"Shell\",\n mimes: [\"text/x-sh\", \"application/x-sh\"],\n mode: \"shell\",\n ext: [\"sh\", \"ksh\", \"bash\"],\n alias: [\"bash\", \"sh\", \"zsh\"],\n file: /^PKGBUILD$/\n }, {\n name: \"Sieve\",\n mime: \"application/sieve\",\n mode: \"sieve\",\n ext: [\"siv\", \"sieve\"]\n }, {\n name: \"Slim\",\n mimes: [\"text/x-slim\", \"application/x-slim\"],\n mode: \"slim\",\n ext: [\"slim\"]\n }, {\n name: \"Smalltalk\",\n mime: \"text/x-stsrc\",\n mode: \"smalltalk\",\n ext: [\"st\"]\n }, {\n name: \"Smarty\",\n mime: \"text/x-smarty\",\n mode: \"smarty\",\n ext: [\"tpl\"]\n }, {\n name: \"Solr\",\n mime: \"text/x-solr\",\n mode: \"solr\"\n }, {\n name: \"SML\",\n mime: \"text/x-sml\",\n mode: \"mllike\",\n ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]\n }, {\n name: \"Soy\",\n mime: \"text/x-soy\",\n mode: \"soy\",\n ext: [\"soy\"],\n alias: [\"closure template\"]\n }, {\n name: \"SPARQL\",\n mime: \"application/sparql-query\",\n mode: \"sparql\",\n ext: [\"rq\", \"sparql\"],\n alias: [\"sparul\"]\n }, {\n name: \"Spreadsheet\",\n mime: \"text/x-spreadsheet\",\n mode: \"spreadsheet\",\n alias: [\"excel\", \"formula\"]\n }, {\n name: \"SQL\",\n mime: \"text/x-sql\",\n mode: \"sql\",\n ext: [\"sql\"]\n }, {\n name: \"SQLite\",\n mime: \"text/x-sqlite\",\n mode: \"sql\"\n }, {\n name: \"Squirrel\",\n mime: \"text/x-squirrel\",\n mode: \"clike\",\n ext: [\"nut\"]\n }, {\n name: \"Stylus\",\n mime: \"text/x-styl\",\n mode: \"stylus\",\n ext: [\"styl\"]\n }, {\n name: \"Swift\",\n mime: \"text/x-swift\",\n mode: \"swift\",\n ext: [\"swift\"]\n }, {\n name: \"sTeX\",\n mime: \"text/x-stex\",\n mode: \"stex\"\n }, {\n name: \"LaTeX\",\n mime: \"text/x-latex\",\n mode: \"stex\",\n ext: [\"text\", \"ltx\", \"tex\"],\n alias: [\"tex\"]\n }, {\n name: \"SystemVerilog\",\n mime: \"text/x-systemverilog\",\n mode: \"verilog\",\n ext: [\"v\", \"sv\", \"svh\"]\n }, {\n name: \"Tcl\",\n mime: \"text/x-tcl\",\n mode: \"tcl\",\n ext: [\"tcl\"]\n }, {\n name: \"Textile\",\n mime: \"text/x-textile\",\n mode: \"textile\",\n ext: [\"textile\"]\n }, {\n name: \"TiddlyWiki \",\n mime: \"text/x-tiddlywiki\",\n mode: \"tiddlywiki\"\n }, {\n name: \"Tiki wiki\",\n mime: \"text/tiki\",\n mode: \"tiki\"\n }, {\n name: \"TOML\",\n mime: \"text/x-toml\",\n mode: \"toml\",\n ext: [\"toml\"]\n }, {\n name: \"Tornado\",\n mime: \"text/x-tornado\",\n mode: \"tornado\"\n }, {\n name: \"troff\",\n mime: \"text/troff\",\n mode: \"troff\",\n ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n }, {\n name: \"TTCN\",\n mime: \"text/x-ttcn\",\n mode: \"ttcn\",\n ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]\n }, {\n name: \"TTCN_CFG\",\n mime: \"text/x-ttcn-cfg\",\n mode: \"ttcn-cfg\",\n ext: [\"cfg\"]\n }, {\n name: \"Turtle\",\n mime: \"text/turtle\",\n mode: \"turtle\",\n ext: [\"ttl\"]\n }, {\n name: \"TypeScript\",\n mime: \"application/typescript\",\n mode: \"javascript\",\n ext: [\"ts\"],\n alias: [\"ts\"]\n }, {\n name: \"TypeScript-JSX\",\n mime: \"text/typescript-jsx\",\n mode: \"jsx\",\n ext: [\"tsx\"],\n alias: [\"tsx\"]\n }, {\n name: \"Twig\",\n mime: \"text/x-twig\",\n mode: \"twig\"\n }, {\n name: \"Web IDL\",\n mime: \"text/x-webidl\",\n mode: \"webidl\",\n ext: [\"webidl\"]\n }, {\n name: \"VB.NET\",\n mime: \"text/x-vb\",\n mode: \"vb\",\n ext: [\"vb\"]\n }, {\n name: \"VBScript\",\n mime: \"text/vbscript\",\n mode: \"vbscript\",\n ext: [\"vbs\"]\n }, {\n name: \"Velocity\",\n mime: \"text/velocity\",\n mode: \"velocity\",\n ext: [\"vtl\"]\n }, {\n name: \"Verilog\",\n mime: \"text/x-verilog\",\n mode: \"verilog\",\n ext: [\"v\"]\n }, {\n name: \"VHDL\",\n mime: \"text/x-vhdl\",\n mode: \"vhdl\",\n ext: [\"vhd\", \"vhdl\"]\n }, {\n name: \"Vue.js Component\",\n mimes: [\"script/x-vue\", \"text/x-vue\"],\n mode: \"vue\",\n ext: [\"vue\"]\n }, {\n name: \"XML\",\n mimes: [\"application/xml\", \"text/xml\"],\n mode: \"xml\",\n ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n alias: [\"rss\", \"wsdl\", \"xsd\"]\n }, {\n name: \"XQuery\",\n mime: \"application/xquery\",\n mode: \"xquery\",\n ext: [\"xy\", \"xquery\"]\n }, {\n name: \"Yacas\",\n mime: \"text/x-yacas\",\n mode: \"yacas\",\n ext: [\"ys\"]\n }, {\n name: \"YAML\",\n mimes: [\"text/x-yaml\", \"text/yaml\"],\n mode: \"yaml\",\n ext: [\"yaml\", \"yml\"],\n alias: [\"yml\"]\n }, {\n name: \"Z80\",\n mime: \"text/x-z80\",\n mode: \"z80\",\n ext: [\"z80\"]\n }, {\n name: \"mscgen\",\n mime: \"text/x-mscgen\",\n mode: \"mscgen\",\n ext: [\"mscgen\", \"mscin\", \"msc\"]\n }, {\n name: \"xu\",\n mime: \"text/x-xu\",\n mode: \"mscgen\",\n ext: [\"xu\"]\n }, {\n name: \"msgenny\",\n mime: \"text/x-msgenny\",\n mode: \"mscgen\",\n ext: [\"msgenny\"]\n }]; // Ensure all modes have a mime property for backwards compatibility\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function (mime) {\n mime = mime.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++) {\n if (info.mimes[j] == mime) return info;\n }\n }\n\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\");\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\");\n };\n\n CodeMirror.findModeByExtension = function (ext) {\n ext = ext.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++) {\n if (info.ext[j] == ext) return info;\n }\n }\n };\n\n CodeMirror.findModeByFileName = function (filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function (name) {\n name = name.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++) {\n if (info.alias[j].toLowerCase() == name) return info;\n }\n }\n };\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9tZXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvbWV0YS5qcz8yMjBkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IubW9kZUluZm8gPSBbXG4gICAge25hbWU6IFwiQVBMXCIsIG1pbWU6IFwidGV4dC9hcGxcIiwgbW9kZTogXCJhcGxcIiwgZXh0OiBbXCJkeWFsb2dcIiwgXCJhcGxcIl19LFxuICAgIHtuYW1lOiBcIlBHUFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vcGdwXCIsIFwiYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZFwiLCBcImFwcGxpY2F0aW9uL3BncC1rZXlzXCIsIFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiXSwgbW9kZTogXCJhc2NpaWFybW9yXCIsIGV4dDogW1wiYXNjXCIsIFwicGdwXCIsIFwic2lnXCJdfSxcbiAgICB7bmFtZTogXCJBU04uMVwiLCBtaW1lOiBcInRleHQveC10dGNuLWFzblwiLCBtb2RlOiBcImFzbi4xXCIsIGV4dDogW1wiYXNuXCIsIFwiYXNuMVwiXX0sXG4gICAge25hbWU6IFwiQXN0ZXJpc2tcIiwgbWltZTogXCJ0ZXh0L3gtYXN0ZXJpc2tcIiwgbW9kZTogXCJhc3Rlcmlza1wiLCBmaWxlOiAvXmV4dGVuc2lvbnNcXC5jb25mJC9pfSxcbiAgICB7bmFtZTogXCJCcmFpbmZ1Y2tcIiwgbWltZTogXCJ0ZXh0L3gtYnJhaW5mdWNrXCIsIG1vZGU6IFwiYnJhaW5mdWNrXCIsIGV4dDogW1wiYlwiLCBcImJmXCJdfSxcbiAgICB7bmFtZTogXCJDXCIsIG1pbWU6IFwidGV4dC94LWNzcmNcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImNcIiwgXCJoXCIsIFwiaW5vXCJdfSxcbiAgICB7bmFtZTogXCJDKytcIiwgbWltZTogXCJ0ZXh0L3gtYysrc3JjXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJjcHBcIiwgXCJjKytcIiwgXCJjY1wiLCBcImN4eFwiLCBcImhwcFwiLCBcImgrK1wiLCBcImhoXCIsIFwiaHh4XCJdLCBhbGlhczogW1wiY3BwXCJdfSxcbiAgICB7bmFtZTogXCJDb2JvbFwiLCBtaW1lOiBcInRleHQveC1jb2JvbFwiLCBtb2RlOiBcImNvYm9sXCIsIGV4dDogW1wiY29iXCIsIFwiY3B5XCJdfSxcbiAgICB7bmFtZTogXCJDI1wiLCBtaW1lOiBcInRleHQveC1jc2hhcnBcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImNzXCJdLCBhbGlhczogW1wiY3NoYXJwXCIsIFwiY3NcIl19LFxuICAgIHtuYW1lOiBcIkNsb2p1cmVcIiwgbWltZTogXCJ0ZXh0L3gtY2xvanVyZVwiLCBtb2RlOiBcImNsb2p1cmVcIiwgZXh0OiBbXCJjbGpcIiwgXCJjbGpjXCIsIFwiY2xqeFwiXX0sXG4gICAge25hbWU6IFwiQ2xvanVyZVNjcmlwdFwiLCBtaW1lOiBcInRleHQveC1jbG9qdXJlc2NyaXB0XCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImNsanNcIl19LFxuICAgIHtuYW1lOiBcIkNsb3N1cmUgU3R5bGVzaGVldHMgKEdTUylcIiwgbWltZTogXCJ0ZXh0L3gtZ3NzXCIsIG1vZGU6IFwiY3NzXCIsIGV4dDogW1wiZ3NzXCJdfSxcbiAgICB7bmFtZTogXCJDTWFrZVwiLCBtaW1lOiBcInRleHQveC1jbWFrZVwiLCBtb2RlOiBcImNtYWtlXCIsIGV4dDogW1wiY21ha2VcIiwgXCJjbWFrZS5pblwiXSwgZmlsZTogL15DTWFrZUxpc3RzLnR4dCQvfSxcbiAgICB7bmFtZTogXCJDb2ZmZWVTY3JpcHRcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHRcIiwgXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiLCBcInRleHQveC1jb2ZmZWVzY3JpcHRcIl0sIG1vZGU6IFwiY29mZmVlc2NyaXB0XCIsIGV4dDogW1wiY29mZmVlXCJdLCBhbGlhczogW1wiY29mZmVlXCIsIFwiY29mZmVlLXNjcmlwdFwiXX0sXG4gICAge25hbWU6IFwiQ29tbW9uIExpc3BcIiwgbWltZTogXCJ0ZXh0L3gtY29tbW9uLWxpc3BcIiwgbW9kZTogXCJjb21tb25saXNwXCIsIGV4dDogW1wiY2xcIiwgXCJsaXNwXCIsIFwiZWxcIl0sIGFsaWFzOiBbXCJsaXNwXCJdfSxcbiAgICB7bmFtZTogXCJDeXBoZXJcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWN5cGhlci1xdWVyeVwiLCBtb2RlOiBcImN5cGhlclwiLCBleHQ6IFtcImN5cFwiLCBcImN5cGhlclwiXX0sXG4gICAge25hbWU6IFwiQ3l0aG9uXCIsIG1pbWU6IFwidGV4dC94LWN5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcInB5eFwiLCBcInB4ZFwiLCBcInB4aVwiXX0sXG4gICAge25hbWU6IFwiQ3J5c3RhbFwiLCBtaW1lOiBcInRleHQveC1jcnlzdGFsXCIsIG1vZGU6IFwiY3J5c3RhbFwiLCBleHQ6IFtcImNyXCJdfSxcbiAgICB7bmFtZTogXCJDU1NcIiwgbWltZTogXCJ0ZXh0L2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcImNzc1wiXX0sXG4gICAge25hbWU6IFwiQ1FMXCIsIG1pbWU6IFwidGV4dC94LWNhc3NhbmRyYVwiLCBtb2RlOiBcInNxbFwiLCBleHQ6IFtcImNxbFwiXX0sXG4gICAge25hbWU6IFwiRFwiLCBtaW1lOiBcInRleHQveC1kXCIsIG1vZGU6IFwiZFwiLCBleHQ6IFtcImRcIl19LFxuICAgIHtuYW1lOiBcIkRhcnRcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2RhcnRcIiwgXCJ0ZXh0L3gtZGFydFwiXSwgbW9kZTogXCJkYXJ0XCIsIGV4dDogW1wiZGFydFwiXX0sXG4gICAge25hbWU6IFwiZGlmZlwiLCBtaW1lOiBcInRleHQveC1kaWZmXCIsIG1vZGU6IFwiZGlmZlwiLCBleHQ6IFtcImRpZmZcIiwgXCJwYXRjaFwiXX0sXG4gICAge25hbWU6IFwiRGphbmdvXCIsIG1pbWU6IFwidGV4dC94LWRqYW5nb1wiLCBtb2RlOiBcImRqYW5nb1wifSxcbiAgICB7bmFtZTogXCJEb2NrZXJmaWxlXCIsIG1pbWU6IFwidGV4dC94LWRvY2tlcmZpbGVcIiwgbW9kZTogXCJkb2NrZXJmaWxlXCIsIGZpbGU6IC9eRG9ja2VyZmlsZSQvfSxcbiAgICB7bmFtZTogXCJEVERcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94bWwtZHRkXCIsIG1vZGU6IFwiZHRkXCIsIGV4dDogW1wiZHRkXCJdfSxcbiAgICB7bmFtZTogXCJEeWxhblwiLCBtaW1lOiBcInRleHQveC1keWxhblwiLCBtb2RlOiBcImR5bGFuXCIsIGV4dDogW1wiZHlsYW5cIiwgXCJkeWxcIiwgXCJpbnRyXCJdfSxcbiAgICB7bmFtZTogXCJFQk5GXCIsIG1pbWU6IFwidGV4dC94LWVibmZcIiwgbW9kZTogXCJlYm5mXCJ9LFxuICAgIHtuYW1lOiBcIkVDTFwiLCBtaW1lOiBcInRleHQveC1lY2xcIiwgbW9kZTogXCJlY2xcIiwgZXh0OiBbXCJlY2xcIl19LFxuICAgIHtuYW1lOiBcImVkblwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2VkblwiLCBtb2RlOiBcImNsb2p1cmVcIiwgZXh0OiBbXCJlZG5cIl19LFxuICAgIHtuYW1lOiBcIkVpZmZlbFwiLCBtaW1lOiBcInRleHQveC1laWZmZWxcIiwgbW9kZTogXCJlaWZmZWxcIiwgZXh0OiBbXCJlXCJdfSxcbiAgICB7bmFtZTogXCJFbG1cIiwgbWltZTogXCJ0ZXh0L3gtZWxtXCIsIG1vZGU6IFwiZWxtXCIsIGV4dDogW1wiZWxtXCJdfSxcbiAgICB7bmFtZTogXCJFbWJlZGRlZCBKYXZhc2NyaXB0XCIsIG1pbWU6IFwiYXBwbGljYXRpb24veC1lanNcIiwgbW9kZTogXCJodG1sZW1iZWRkZWRcIiwgZXh0OiBbXCJlanNcIl19LFxuICAgIHtuYW1lOiBcIkVtYmVkZGVkIFJ1YnlcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWVyYlwiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImVyYlwiXX0sXG4gICAge25hbWU6IFwiRXJsYW5nXCIsIG1pbWU6IFwidGV4dC94LWVybGFuZ1wiLCBtb2RlOiBcImVybGFuZ1wiLCBleHQ6IFtcImVybFwiXX0sXG4gICAge25hbWU6IFwiRXNwZXJcIiwgbWltZTogXCJ0ZXh0L3gtZXNwZXJcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiRmFjdG9yXCIsIG1pbWU6IFwidGV4dC94LWZhY3RvclwiLCBtb2RlOiBcImZhY3RvclwiLCBleHQ6IFtcImZhY3RvclwiXX0sXG4gICAge25hbWU6IFwiRkNMXCIsIG1pbWU6IFwidGV4dC94LWZjbFwiLCBtb2RlOiBcImZjbFwifSxcbiAgICB7bmFtZTogXCJGb3J0aFwiLCBtaW1lOiBcInRleHQveC1mb3J0aFwiLCBtb2RlOiBcImZvcnRoXCIsIGV4dDogW1wiZm9ydGhcIiwgXCJmdGhcIiwgXCI0dGhcIl19LFxuICAgIHtuYW1lOiBcIkZvcnRyYW5cIiwgbWltZTogXCJ0ZXh0L3gtZm9ydHJhblwiLCBtb2RlOiBcImZvcnRyYW5cIiwgZXh0OiBbXCJmXCIsIFwiZm9yXCIsIFwiZjc3XCIsIFwiZjkwXCIsIFwiZjk1XCJdfSxcbiAgICB7bmFtZTogXCJGI1wiLCBtaW1lOiBcInRleHQveC1mc2hhcnBcIiwgbW9kZTogXCJtbGxpa2VcIiwgZXh0OiBbXCJmc1wiXSwgYWxpYXM6IFtcImZzaGFycFwiXX0sXG4gICAge25hbWU6IFwiR2FzXCIsIG1pbWU6IFwidGV4dC94LWdhc1wiLCBtb2RlOiBcImdhc1wiLCBleHQ6IFtcInNcIl19LFxuICAgIHtuYW1lOiBcIkdoZXJraW5cIiwgbWltZTogXCJ0ZXh0L3gtZmVhdHVyZVwiLCBtb2RlOiBcImdoZXJraW5cIiwgZXh0OiBbXCJmZWF0dXJlXCJdfSxcbiAgICB7bmFtZTogXCJHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd25cIiwgbWltZTogXCJ0ZXh0L3gtZ2ZtXCIsIG1vZGU6IFwiZ2ZtXCIsIGZpbGU6IC9eKHJlYWRtZXxjb250cmlidXRpbmd8aGlzdG9yeSkubWQkL2l9LFxuICAgIHtuYW1lOiBcIkdvXCIsIG1pbWU6IFwidGV4dC94LWdvXCIsIG1vZGU6IFwiZ29cIiwgZXh0OiBbXCJnb1wiXX0sXG4gICAge25hbWU6IFwiR3Jvb3Z5XCIsIG1pbWU6IFwidGV4dC94LWdyb292eVwiLCBtb2RlOiBcImdyb292eVwiLCBleHQ6IFtcImdyb292eVwiLCBcImdyYWRsZVwiXSwgZmlsZTogL15KZW5raW5zZmlsZSQvfSxcbiAgICB7bmFtZTogXCJIQU1MXCIsIG1pbWU6IFwidGV4dC94LWhhbWxcIiwgbW9kZTogXCJoYW1sXCIsIGV4dDogW1wiaGFtbFwiXX0sXG4gICAge25hbWU6IFwiSGFza2VsbFwiLCBtaW1lOiBcInRleHQveC1oYXNrZWxsXCIsIG1vZGU6IFwiaGFza2VsbFwiLCBleHQ6IFtcImhzXCJdfSxcbiAgICB7bmFtZTogXCJIYXNrZWxsIChMaXRlcmF0ZSlcIiwgbWltZTogXCJ0ZXh0L3gtbGl0ZXJhdGUtaGFza2VsbFwiLCBtb2RlOiBcImhhc2tlbGwtbGl0ZXJhdGVcIiwgZXh0OiBbXCJsaHNcIl19LFxuICAgIHtuYW1lOiBcIkhheGVcIiwgbWltZTogXCJ0ZXh0L3gtaGF4ZVwiLCBtb2RlOiBcImhheGVcIiwgZXh0OiBbXCJoeFwiXX0sXG4gICAge25hbWU6IFwiSFhNTFwiLCBtaW1lOiBcInRleHQveC1oeG1sXCIsIG1vZGU6IFwiaGF4ZVwiLCBleHQ6IFtcImh4bWxcIl19LFxuICAgIHtuYW1lOiBcIkFTUC5ORVRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWFzcHhcIiwgbW9kZTogXCJodG1sZW1iZWRkZWRcIiwgZXh0OiBbXCJhc3B4XCJdLCBhbGlhczogW1wiYXNwXCIsIFwiYXNweFwiXX0sXG4gICAge25hbWU6IFwiSFRNTFwiLCBtaW1lOiBcInRleHQvaHRtbFwiLCBtb2RlOiBcImh0bWxtaXhlZFwiLCBleHQ6IFtcImh0bWxcIiwgXCJodG1cIiwgXCJoYW5kbGViYXJzXCIsIFwiaGJzXCJdLCBhbGlhczogW1wieGh0bWxcIl19LFxuICAgIHtuYW1lOiBcIkhUVFBcIiwgbWltZTogXCJtZXNzYWdlL2h0dHBcIiwgbW9kZTogXCJodHRwXCJ9LFxuICAgIHtuYW1lOiBcIklETFwiLCBtaW1lOiBcInRleHQveC1pZGxcIiwgbW9kZTogXCJpZGxcIiwgZXh0OiBbXCJwcm9cIl19LFxuICAgIHtuYW1lOiBcIlB1Z1wiLCBtaW1lOiBcInRleHQveC1wdWdcIiwgbW9kZTogXCJwdWdcIiwgZXh0OiBbXCJqYWRlXCIsIFwicHVnXCJdLCBhbGlhczogW1wiamFkZVwiXX0sXG4gICAge25hbWU6IFwiSmF2YVwiLCBtaW1lOiBcInRleHQveC1qYXZhXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJqYXZhXCJdfSxcbiAgICB7bmFtZTogXCJKYXZhIFNlcnZlciBQYWdlc1wiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtanNwXCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wianNwXCJdLCBhbGlhczogW1wianNwXCJdfSxcbiAgICB7bmFtZTogXCJKYXZhU2NyaXB0XCIsIG1pbWVzOiBbXCJ0ZXh0L2phdmFzY3JpcHRcIiwgXCJ0ZXh0L2VjbWFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIsIFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsIFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiXSxcbiAgICAgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1wianNcIl0sIGFsaWFzOiBbXCJlY21hc2NyaXB0XCIsIFwianNcIiwgXCJub2RlXCJdfSxcbiAgICB7bmFtZTogXCJKU09OXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi9qc29uXCIsIFwiYXBwbGljYXRpb24veC1qc29uXCJdLCBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJqc29uXCIsIFwibWFwXCJdLCBhbGlhczogW1wianNvbjVcIl19LFxuICAgIHtuYW1lOiBcIkpTT04tTERcIiwgbWltZTogXCJhcHBsaWNhdGlvbi9sZCtqc29uXCIsIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzb25sZFwiXSwgYWxpYXM6IFtcImpzb25sZFwiXX0sXG4gICAge25hbWU6IFwiSlNYXCIsIG1pbWU6IFwidGV4dC9qc3hcIiwgbW9kZTogXCJqc3hcIiwgZXh0OiBbXCJqc3hcIl19LFxuICAgIHtuYW1lOiBcIkppbmphMlwiLCBtaW1lOiBcInRleHQvamluamEyXCIsIG1vZGU6IFwiamluamEyXCIsIGV4dDogW1wiajJcIiwgXCJqaW5qYVwiLCBcImppbmphMlwiXX0sXG4gICAge25hbWU6IFwiSnVsaWFcIiwgbWltZTogXCJ0ZXh0L3gtanVsaWFcIiwgbW9kZTogXCJqdWxpYVwiLCBleHQ6IFtcImpsXCJdfSxcbiAgICB7bmFtZTogXCJLb3RsaW5cIiwgbWltZTogXCJ0ZXh0L3gta290bGluXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJrdFwiXX0sXG4gICAge25hbWU6IFwiTEVTU1wiLCBtaW1lOiBcInRleHQveC1sZXNzXCIsIG1vZGU6IFwiY3NzXCIsIGV4dDogW1wibGVzc1wiXX0sXG4gICAge25hbWU6IFwiTGl2ZVNjcmlwdFwiLCBtaW1lOiBcInRleHQveC1saXZlc2NyaXB0XCIsIG1vZGU6IFwibGl2ZXNjcmlwdFwiLCBleHQ6IFtcImxzXCJdLCBhbGlhczogW1wibHNcIl19LFxuICAgIHtuYW1lOiBcIkx1YVwiLCBtaW1lOiBcInRleHQveC1sdWFcIiwgbW9kZTogXCJsdWFcIiwgZXh0OiBbXCJsdWFcIl19LFxuICAgIHtuYW1lOiBcIk1hcmtkb3duXCIsIG1pbWU6IFwidGV4dC94LW1hcmtkb3duXCIsIG1vZGU6IFwibWFya2Rvd25cIiwgZXh0OiBbXCJtYXJrZG93blwiLCBcIm1kXCIsIFwibWtkXCJdfSxcbiAgICB7bmFtZTogXCJtSVJDXCIsIG1pbWU6IFwidGV4dC9taXJjXCIsIG1vZGU6IFwibWlyY1wifSxcbiAgICB7bmFtZTogXCJNYXJpYURCIFNRTFwiLCBtaW1lOiBcInRleHQveC1tYXJpYWRiXCIsIG1vZGU6IFwic3FsXCJ9LFxuICAgIHtuYW1lOiBcIk1hdGhlbWF0aWNhXCIsIG1pbWU6IFwidGV4dC94LW1hdGhlbWF0aWNhXCIsIG1vZGU6IFwibWF0aGVtYXRpY2FcIiwgZXh0OiBbXCJtXCIsIFwibmJcIiwgXCJ3bFwiLCBcIndsc1wiXX0sXG4gICAge25hbWU6IFwiTW9kZWxpY2FcIiwgbWltZTogXCJ0ZXh0L3gtbW9kZWxpY2FcIiwgbW9kZTogXCJtb2RlbGljYVwiLCBleHQ6IFtcIm1vXCJdfSxcbiAgICB7bmFtZTogXCJNVU1QU1wiLCBtaW1lOiBcInRleHQveC1tdW1wc1wiLCBtb2RlOiBcIm11bXBzXCIsIGV4dDogW1wibXBzXCJdfSxcbiAgICB7bmFtZTogXCJNUyBTUUxcIiwgbWltZTogXCJ0ZXh0L3gtbXNzcWxcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwibWJveFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL21ib3hcIiwgbW9kZTogXCJtYm94XCIsIGV4dDogW1wibWJveFwiXX0sXG4gICAge25hbWU6IFwiTXlTUUxcIiwgbWltZTogXCJ0ZXh0L3gtbXlzcWxcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiTmdpbnhcIiwgbWltZTogXCJ0ZXh0L3gtbmdpbngtY29uZlwiLCBtb2RlOiBcIm5naW54XCIsIGZpbGU6IC9uZ2lueC4qXFwuY29uZiQvaX0sXG4gICAge25hbWU6IFwiTlNJU1wiLCBtaW1lOiBcInRleHQveC1uc2lzXCIsIG1vZGU6IFwibnNpc1wiLCBleHQ6IFtcIm5zaFwiLCBcIm5zaVwiXX0sXG4gICAge25hbWU6IFwiTlRyaXBsZXNcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL24tdHJpcGxlc1wiLCBcImFwcGxpY2F0aW9uL24tcXVhZHNcIiwgXCJ0ZXh0L24tdHJpcGxlc1wiXSxcbiAgICAgbW9kZTogXCJudHJpcGxlc1wiLCBleHQ6IFtcIm50XCIsIFwibnFcIl19LFxuICAgIHtuYW1lOiBcIk9iamVjdGl2ZS1DXCIsIG1pbWU6IFwidGV4dC94LW9iamVjdGl2ZWNcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm1cIl0sIGFsaWFzOiBbXCJvYmplY3RpdmUtY1wiLCBcIm9iamNcIl19LFxuICAgIHtuYW1lOiBcIk9iamVjdGl2ZS1DKytcIiwgbWltZTogXCJ0ZXh0L3gtb2JqZWN0aXZlYysrXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJtbVwiXSwgYWxpYXM6IFtcIm9iamVjdGl2ZS1jKytcIiwgXCJvYmpjKytcIl19LFxuICAgIHtuYW1lOiBcIk9DYW1sXCIsIG1pbWU6IFwidGV4dC94LW9jYW1sXCIsIG1vZGU6IFwibWxsaWtlXCIsIGV4dDogW1wibWxcIiwgXCJtbGlcIiwgXCJtbGxcIiwgXCJtbHlcIl19LFxuICAgIHtuYW1lOiBcIk9jdGF2ZVwiLCBtaW1lOiBcInRleHQveC1vY3RhdmVcIiwgbW9kZTogXCJvY3RhdmVcIiwgZXh0OiBbXCJtXCJdfSxcbiAgICB7bmFtZTogXCJPelwiLCBtaW1lOiBcInRleHQveC1velwiLCBtb2RlOiBcIm96XCIsIGV4dDogW1wib3pcIl19LFxuICAgIHtuYW1lOiBcIlBhc2NhbFwiLCBtaW1lOiBcInRleHQveC1wYXNjYWxcIiwgbW9kZTogXCJwYXNjYWxcIiwgZXh0OiBbXCJwXCIsIFwicGFzXCJdfSxcbiAgICB7bmFtZTogXCJQRUcuanNcIiwgbWltZTogXCJudWxsXCIsIG1vZGU6IFwicGVnanNcIiwgZXh0OiBbXCJqc29ubGRcIl19LFxuICAgIHtuYW1lOiBcIlBlcmxcIiwgbWltZTogXCJ0ZXh0L3gtcGVybFwiLCBtb2RlOiBcInBlcmxcIiwgZXh0OiBbXCJwbFwiLCBcInBtXCJdfSxcbiAgICB7bmFtZTogXCJQSFBcIiwgbWltZXM6IFtcInRleHQveC1waHBcIiwgXCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocFwiLCBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW5cIl0sIG1vZGU6IFwicGhwXCIsIGV4dDogW1wicGhwXCIsIFwicGhwM1wiLCBcInBocDRcIiwgXCJwaHA1XCIsIFwicGhwN1wiLCBcInBodG1sXCJdfSxcbiAgICB7bmFtZTogXCJQaWdcIiwgbWltZTogXCJ0ZXh0L3gtcGlnXCIsIG1vZGU6IFwicGlnXCIsIGV4dDogW1wicGlnXCJdfSxcbiAgICB7bmFtZTogXCJQbGFpbiBUZXh0XCIsIG1pbWU6IFwidGV4dC9wbGFpblwiLCBtb2RlOiBcIm51bGxcIiwgZXh0OiBbXCJ0eHRcIiwgXCJ0ZXh0XCIsIFwiY29uZlwiLCBcImRlZlwiLCBcImxpc3RcIiwgXCJsb2dcIl19LFxuICAgIHtuYW1lOiBcIlBMU1FMXCIsIG1pbWU6IFwidGV4dC94LXBsc3FsXCIsIG1vZGU6IFwic3FsXCIsIGV4dDogW1wicGxzXCJdfSxcbiAgICB7bmFtZTogXCJQb3N0Z3JlU1FMXCIsIG1pbWU6IFwidGV4dC94LXBnc3FsXCIsIG1vZGU6IFwic3FsXCJ9LFxuICAgIHtuYW1lOiBcIlBvd2VyU2hlbGxcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LXBvd2Vyc2hlbGxcIiwgbW9kZTogXCJwb3dlcnNoZWxsXCIsIGV4dDogW1wicHMxXCIsIFwicHNkMVwiLCBcInBzbTFcIl19LFxuICAgIHtuYW1lOiBcIlByb3BlcnRpZXMgZmlsZXNcIiwgbWltZTogXCJ0ZXh0L3gtcHJvcGVydGllc1wiLCBtb2RlOiBcInByb3BlcnRpZXNcIiwgZXh0OiBbXCJwcm9wZXJ0aWVzXCIsIFwiaW5pXCIsIFwiaW5cIl0sIGFsaWFzOiBbXCJpbmlcIiwgXCJwcm9wZXJ0aWVzXCJdfSxcbiAgICB7bmFtZTogXCJQcm90b0J1ZlwiLCBtaW1lOiBcInRleHQveC1wcm90b2J1ZlwiLCBtb2RlOiBcInByb3RvYnVmXCIsIGV4dDogW1wicHJvdG9cIl19LFxuICAgIHtuYW1lOiBcIlB5dGhvblwiLCBtaW1lOiBcInRleHQveC1weXRob25cIiwgbW9kZTogXCJweXRob25cIiwgZXh0OiBbXCJCVUlMRFwiLCBcImJ6bFwiLCBcInB5XCIsIFwicHl3XCJdLCBmaWxlOiAvXihCVUNLfEJVSUxEKSQvfSxcbiAgICB7bmFtZTogXCJQdXBwZXRcIiwgbWltZTogXCJ0ZXh0L3gtcHVwcGV0XCIsIG1vZGU6IFwicHVwcGV0XCIsIGV4dDogW1wicHBcIl19LFxuICAgIHtuYW1lOiBcIlFcIiwgbWltZTogXCJ0ZXh0L3gtcVwiLCBtb2RlOiBcInFcIiwgZXh0OiBbXCJxXCJdfSxcbiAgICB7bmFtZTogXCJSXCIsIG1pbWU6IFwidGV4dC94LXJzcmNcIiwgbW9kZTogXCJyXCIsIGV4dDogW1wiclwiLCBcIlJcIl0sIGFsaWFzOiBbXCJyc2NyaXB0XCJdfSxcbiAgICB7bmFtZTogXCJyZVN0cnVjdHVyZWRUZXh0XCIsIG1pbWU6IFwidGV4dC94LXJzdFwiLCBtb2RlOiBcInJzdFwiLCBleHQ6IFtcInJzdFwiXSwgYWxpYXM6IFtcInJzdFwiXX0sXG4gICAge25hbWU6IFwiUlBNIENoYW5nZXNcIiwgbWltZTogXCJ0ZXh0L3gtcnBtLWNoYW5nZXNcIiwgbW9kZTogXCJycG1cIn0sXG4gICAge25hbWU6IFwiUlBNIFNwZWNcIiwgbWltZTogXCJ0ZXh0L3gtcnBtLXNwZWNcIiwgbW9kZTogXCJycG1cIiwgZXh0OiBbXCJzcGVjXCJdfSxcbiAgICB7bmFtZTogXCJSdWJ5XCIsIG1pbWU6IFwidGV4dC94LXJ1YnlcIiwgbW9kZTogXCJydWJ5XCIsIGV4dDogW1wicmJcIl0sIGFsaWFzOiBbXCJqcnVieVwiLCBcIm1hY3J1YnlcIiwgXCJyYWtlXCIsIFwicmJcIiwgXCJyYnhcIl19LFxuICAgIHtuYW1lOiBcIlJ1c3RcIiwgbWltZTogXCJ0ZXh0L3gtcnVzdHNyY1wiLCBtb2RlOiBcInJ1c3RcIiwgZXh0OiBbXCJyc1wiXX0sXG4gICAge25hbWU6IFwiU0FTXCIsIG1pbWU6IFwidGV4dC94LXNhc1wiLCBtb2RlOiBcInNhc1wiLCBleHQ6IFtcInNhc1wiXX0sXG4gICAge25hbWU6IFwiU2Fzc1wiLCBtaW1lOiBcInRleHQveC1zYXNzXCIsIG1vZGU6IFwic2Fzc1wiLCBleHQ6IFtcInNhc3NcIl19LFxuICAgIHtuYW1lOiBcIlNjYWxhXCIsIG1pbWU6IFwidGV4dC94LXNjYWxhXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJzY2FsYVwiXX0sXG4gICAge25hbWU6IFwiU2NoZW1lXCIsIG1pbWU6IFwidGV4dC94LXNjaGVtZVwiLCBtb2RlOiBcInNjaGVtZVwiLCBleHQ6IFtcInNjbVwiLCBcInNzXCJdfSxcbiAgICB7bmFtZTogXCJTQ1NTXCIsIG1pbWU6IFwidGV4dC94LXNjc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJzY3NzXCJdfSxcbiAgICB7bmFtZTogXCJTaGVsbFwiLCBtaW1lczogW1widGV4dC94LXNoXCIsIFwiYXBwbGljYXRpb24veC1zaFwiXSwgbW9kZTogXCJzaGVsbFwiLCBleHQ6IFtcInNoXCIsIFwia3NoXCIsIFwiYmFzaFwiXSwgYWxpYXM6IFtcImJhc2hcIiwgXCJzaFwiLCBcInpzaFwiXSwgZmlsZTogL15QS0dCVUlMRCQvfSxcbiAgICB7bmFtZTogXCJTaWV2ZVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3NpZXZlXCIsIG1vZGU6IFwic2lldmVcIiwgZXh0OiBbXCJzaXZcIiwgXCJzaWV2ZVwiXX0sXG4gICAge25hbWU6IFwiU2xpbVwiLCBtaW1lczogW1widGV4dC94LXNsaW1cIiwgXCJhcHBsaWNhdGlvbi94LXNsaW1cIl0sIG1vZGU6IFwic2xpbVwiLCBleHQ6IFtcInNsaW1cIl19LFxuICAgIHtuYW1lOiBcIlNtYWxsdGFsa1wiLCBtaW1lOiBcInRleHQveC1zdHNyY1wiLCBtb2RlOiBcInNtYWxsdGFsa1wiLCBleHQ6IFtcInN0XCJdfSxcbiAgICB7bmFtZTogXCJTbWFydHlcIiwgbWltZTogXCJ0ZXh0L3gtc21hcnR5XCIsIG1vZGU6IFwic21hcnR5XCIsIGV4dDogW1widHBsXCJdfSxcbiAgICB7bmFtZTogXCJTb2xyXCIsIG1pbWU6IFwidGV4dC94LXNvbHJcIiwgbW9kZTogXCJzb2xyXCJ9LFxuICAgIHtuYW1lOiBcIlNNTFwiLCBtaW1lOiBcInRleHQveC1zbWxcIiwgbW9kZTogXCJtbGxpa2VcIiwgZXh0OiBbXCJzbWxcIiwgXCJzaWdcIiwgXCJmdW5cIiwgXCJzbWFja3NwZWNcIl19LFxuICAgIHtuYW1lOiBcIlNveVwiLCBtaW1lOiBcInRleHQveC1zb3lcIiwgbW9kZTogXCJzb3lcIiwgZXh0OiBbXCJzb3lcIl0sIGFsaWFzOiBbXCJjbG9zdXJlIHRlbXBsYXRlXCJdfSxcbiAgICB7bmFtZTogXCJTUEFSUUxcIiwgbWltZTogXCJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnlcIiwgbW9kZTogXCJzcGFycWxcIiwgZXh0OiBbXCJycVwiLCBcInNwYXJxbFwiXSwgYWxpYXM6IFtcInNwYXJ1bFwiXX0sXG4gICAge25hbWU6IFwiU3ByZWFkc2hlZXRcIiwgbWltZTogXCJ0ZXh0L3gtc3ByZWFkc2hlZXRcIiwgbW9kZTogXCJzcHJlYWRzaGVldFwiLCBhbGlhczogW1wiZXhjZWxcIiwgXCJmb3JtdWxhXCJdfSxcbiAgICB7bmFtZTogXCJTUUxcIiwgbWltZTogXCJ0ZXh0L3gtc3FsXCIsIG1vZGU6IFwic3FsXCIsIGV4dDogW1wic3FsXCJdfSxcbiAgICB7bmFtZTogXCJTUUxpdGVcIiwgbWltZTogXCJ0ZXh0L3gtc3FsaXRlXCIsIG1vZGU6IFwic3FsXCJ9LFxuICAgIHtuYW1lOiBcIlNxdWlycmVsXCIsIG1pbWU6IFwidGV4dC94LXNxdWlycmVsXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJudXRcIl19LFxuICAgIHtuYW1lOiBcIlN0eWx1c1wiLCBtaW1lOiBcInRleHQveC1zdHlsXCIsIG1vZGU6IFwic3R5bHVzXCIsIGV4dDogW1wic3R5bFwiXX0sXG4gICAge25hbWU6IFwiU3dpZnRcIiwgbWltZTogXCJ0ZXh0L3gtc3dpZnRcIiwgbW9kZTogXCJzd2lmdFwiLCBleHQ6IFtcInN3aWZ0XCJdfSxcbiAgICB7bmFtZTogXCJzVGVYXCIsIG1pbWU6IFwidGV4dC94LXN0ZXhcIiwgbW9kZTogXCJzdGV4XCJ9LFxuICAgIHtuYW1lOiBcIkxhVGVYXCIsIG1pbWU6IFwidGV4dC94LWxhdGV4XCIsIG1vZGU6IFwic3RleFwiLCBleHQ6IFtcInRleHRcIiwgXCJsdHhcIiwgXCJ0ZXhcIl0sIGFsaWFzOiBbXCJ0ZXhcIl19LFxuICAgIHtuYW1lOiBcIlN5c3RlbVZlcmlsb2dcIiwgbWltZTogXCJ0ZXh0L3gtc3lzdGVtdmVyaWxvZ1wiLCBtb2RlOiBcInZlcmlsb2dcIiwgZXh0OiBbXCJ2XCIsIFwic3ZcIiwgXCJzdmhcIl19LFxuICAgIHtuYW1lOiBcIlRjbFwiLCBtaW1lOiBcInRleHQveC10Y2xcIiwgbW9kZTogXCJ0Y2xcIiwgZXh0OiBbXCJ0Y2xcIl19LFxuICAgIHtuYW1lOiBcIlRleHRpbGVcIiwgbWltZTogXCJ0ZXh0L3gtdGV4dGlsZVwiLCBtb2RlOiBcInRleHRpbGVcIiwgZXh0OiBbXCJ0ZXh0aWxlXCJdfSxcbiAgICB7bmFtZTogXCJUaWRkbHlXaWtpIFwiLCBtaW1lOiBcInRleHQveC10aWRkbHl3aWtpXCIsIG1vZGU6IFwidGlkZGx5d2lraVwifSxcbiAgICB7bmFtZTogXCJUaWtpIHdpa2lcIiwgbWltZTogXCJ0ZXh0L3Rpa2lcIiwgbW9kZTogXCJ0aWtpXCJ9LFxuICAgIHtuYW1lOiBcIlRPTUxcIiwgbWltZTogXCJ0ZXh0L3gtdG9tbFwiLCBtb2RlOiBcInRvbWxcIiwgZXh0OiBbXCJ0b21sXCJdfSxcbiAgICB7bmFtZTogXCJUb3JuYWRvXCIsIG1pbWU6IFwidGV4dC94LXRvcm5hZG9cIiwgbW9kZTogXCJ0b3JuYWRvXCJ9LFxuICAgIHtuYW1lOiBcInRyb2ZmXCIsIG1pbWU6IFwidGV4dC90cm9mZlwiLCBtb2RlOiBcInRyb2ZmXCIsIGV4dDogW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdfSxcbiAgICB7bmFtZTogXCJUVENOXCIsIG1pbWU6IFwidGV4dC94LXR0Y25cIiwgbW9kZTogXCJ0dGNuXCIsIGV4dDogW1widHRjblwiLCBcInR0Y24zXCIsIFwidHRjbnBwXCJdfSxcbiAgICB7bmFtZTogXCJUVENOX0NGR1wiLCBtaW1lOiBcInRleHQveC10dGNuLWNmZ1wiLCBtb2RlOiBcInR0Y24tY2ZnXCIsIGV4dDogW1wiY2ZnXCJdfSxcbiAgICB7bmFtZTogXCJUdXJ0bGVcIiwgbWltZTogXCJ0ZXh0L3R1cnRsZVwiLCBtb2RlOiBcInR1cnRsZVwiLCBleHQ6IFtcInR0bFwiXX0sXG4gICAge25hbWU6IFwiVHlwZVNjcmlwdFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3R5cGVzY3JpcHRcIiwgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1widHNcIl0sIGFsaWFzOiBbXCJ0c1wiXX0sXG4gICAge25hbWU6IFwiVHlwZVNjcmlwdC1KU1hcIiwgbWltZTogXCJ0ZXh0L3R5cGVzY3JpcHQtanN4XCIsIG1vZGU6IFwianN4XCIsIGV4dDogW1widHN4XCJdLCBhbGlhczogW1widHN4XCJdfSxcbiAgICB7bmFtZTogXCJUd2lnXCIsIG1pbWU6IFwidGV4dC94LXR3aWdcIiwgbW9kZTogXCJ0d2lnXCJ9LFxuICAgIHtuYW1lOiBcIldlYiBJRExcIiwgbWltZTogXCJ0ZXh0L3gtd2ViaWRsXCIsIG1vZGU6IFwid2ViaWRsXCIsIGV4dDogW1wid2ViaWRsXCJdfSxcbiAgICB7bmFtZTogXCJWQi5ORVRcIiwgbWltZTogXCJ0ZXh0L3gtdmJcIiwgbW9kZTogXCJ2YlwiLCBleHQ6IFtcInZiXCJdfSxcbiAgICB7bmFtZTogXCJWQlNjcmlwdFwiLCBtaW1lOiBcInRleHQvdmJzY3JpcHRcIiwgbW9kZTogXCJ2YnNjcmlwdFwiLCBleHQ6IFtcInZic1wiXX0sXG4gICAge25hbWU6IFwiVmVsb2NpdHlcIiwgbWltZTogXCJ0ZXh0L3ZlbG9jaXR5XCIsIG1vZGU6IFwidmVsb2NpdHlcIiwgZXh0OiBbXCJ2dGxcIl19LFxuICAgIHtuYW1lOiBcIlZlcmlsb2dcIiwgbWltZTogXCJ0ZXh0L3gtdmVyaWxvZ1wiLCBtb2RlOiBcInZlcmlsb2dcIiwgZXh0OiBbXCJ2XCJdfSxcbiAgICB7bmFtZTogXCJWSERMXCIsIG1pbWU6IFwidGV4dC94LXZoZGxcIiwgbW9kZTogXCJ2aGRsXCIsIGV4dDogW1widmhkXCIsIFwidmhkbFwiXX0sXG4gICAge25hbWU6IFwiVnVlLmpzIENvbXBvbmVudFwiLCBtaW1lczogW1wic2NyaXB0L3gtdnVlXCIsIFwidGV4dC94LXZ1ZVwiXSwgbW9kZTogXCJ2dWVcIiwgZXh0OiBbXCJ2dWVcIl19LFxuICAgIHtuYW1lOiBcIlhNTFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24veG1sXCIsIFwidGV4dC94bWxcIl0sIG1vZGU6IFwieG1sXCIsIGV4dDogW1wieG1sXCIsIFwieHNsXCIsIFwieHNkXCIsIFwic3ZnXCJdLCBhbGlhczogW1wicnNzXCIsIFwid3NkbFwiLCBcInhzZFwiXX0sXG4gICAge25hbWU6IFwiWFF1ZXJ5XCIsIG1pbWU6IFwiYXBwbGljYXRpb24veHF1ZXJ5XCIsIG1vZGU6IFwieHF1ZXJ5XCIsIGV4dDogW1wieHlcIiwgXCJ4cXVlcnlcIl19LFxuICAgIHtuYW1lOiBcIllhY2FzXCIsIG1pbWU6IFwidGV4dC94LXlhY2FzXCIsIG1vZGU6IFwieWFjYXNcIiwgZXh0OiBbXCJ5c1wiXX0sXG4gICAge25hbWU6IFwiWUFNTFwiLCBtaW1lczogW1widGV4dC94LXlhbWxcIiwgXCJ0ZXh0L3lhbWxcIl0sIG1vZGU6IFwieWFtbFwiLCBleHQ6IFtcInlhbWxcIiwgXCJ5bWxcIl0sIGFsaWFzOiBbXCJ5bWxcIl19LFxuICAgIHtuYW1lOiBcIlo4MFwiLCBtaW1lOiBcInRleHQveC16ODBcIiwgbW9kZTogXCJ6ODBcIiwgZXh0OiBbXCJ6ODBcIl19LFxuICAgIHtuYW1lOiBcIm1zY2dlblwiLCBtaW1lOiBcInRleHQveC1tc2NnZW5cIiwgbW9kZTogXCJtc2NnZW5cIiwgZXh0OiBbXCJtc2NnZW5cIiwgXCJtc2NpblwiLCBcIm1zY1wiXX0sXG4gICAge25hbWU6IFwieHVcIiwgbWltZTogXCJ0ZXh0L3gteHVcIiwgbW9kZTogXCJtc2NnZW5cIiwgZXh0OiBbXCJ4dVwiXX0sXG4gICAge25hbWU6IFwibXNnZW5ueVwiLCBtaW1lOiBcInRleHQveC1tc2dlbm55XCIsIG1vZGU6IFwibXNjZ2VuXCIsIGV4dDogW1wibXNnZW5ueVwiXX1cbiAgXTtcbiAgLy8gRW5zdXJlIGFsbCBtb2RlcyBoYXZlIGEgbWltZSBwcm9wZXJ0eSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGluZm8gPSBDb2RlTWlycm9yLm1vZGVJbmZvW2ldO1xuICAgIGlmIChpbmZvLm1pbWVzKSBpbmZvLm1pbWUgPSBpbmZvLm1pbWVzWzBdO1xuICB9XG5cbiAgQ29kZU1pcnJvci5maW5kTW9kZUJ5TUlNRSA9IGZ1bmN0aW9uKG1pbWUpIHtcbiAgICBtaW1lID0gbWltZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ29kZU1pcnJvci5tb2RlSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBDb2RlTWlycm9yLm1vZGVJbmZvW2ldO1xuICAgICAgaWYgKGluZm8ubWltZSA9PSBtaW1lKSByZXR1cm4gaW5mbztcbiAgICAgIGlmIChpbmZvLm1pbWVzKSBmb3IgKHZhciBqID0gMDsgaiA8IGluZm8ubWltZXMubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLm1pbWVzW2pdID09IG1pbWUpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBpZiAoL1xcK3htbCQvLnRlc3QobWltZSkpIHJldHVybiBDb2RlTWlycm9yLmZpbmRNb2RlQnlNSU1FKFwiYXBwbGljYXRpb24veG1sXCIpXG4gICAgaWYgKC9cXCtqc29uJC8udGVzdChtaW1lKSkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeU1JTUUoXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIH07XG5cbiAgQ29kZU1pcnJvci5maW5kTW9kZUJ5RXh0ZW5zaW9uID0gZnVuY3Rpb24oZXh0KSB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5leHQpIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5leHQubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLmV4dFtqXSA9PSBleHQpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlGaWxlTmFtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5maWxlICYmIGluZm8uZmlsZS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIHZhciBkb3QgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgdmFyIGV4dCA9IGRvdCA+IC0xICYmIGZpbGVuYW1lLnN1YnN0cmluZyhkb3QgKyAxLCBmaWxlbmFtZS5sZW5ndGgpO1xuICAgIGlmIChleHQpIHJldHVybiBDb2RlTWlycm9yLmZpbmRNb2RlQnlFeHRlbnNpb24oZXh0KTtcbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gbmFtZSkgcmV0dXJuIGluZm87XG4gICAgICBpZiAoaW5mby5hbGlhcykgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLmFsaWFzLmxlbmd0aDsgaisrKVxuICAgICAgICBpZiAoaW5mby5hbGlhc1tqXS50b0xvd2VyQ2FzZSgpID09IG5hbWUpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBUEE7QUEvTUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/meta.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/php/php.js": -/*!**************************************************!*\ - !*** ../node_modules/codemirror/mode/php/php.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../htmlmixed/htmlmixed */ \"../node_modules/codemirror/mode/htmlmixed/htmlmixed.js\"), __webpack_require__(/*! ../clike/clike */ \"../node_modules/codemirror/mode/clike/clike.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"), __webpack_require__(/*! ../htmlmixed/htmlmixed */ \"../node_modules/codemirror/mode/htmlmixed/htmlmixed.js\"), __webpack_require__(/*! ../clike/clike */ \"../node_modules/codemirror/mode/clike/clike.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n function keywords(str) {\n var obj = {},\n words = str.split(\" \");\n\n for (var i = 0; i < words.length; ++i) {\n obj[words[i]] = true;\n }\n\n return obj;\n } // Helper for phpString\n\n\n function matchSequence(list, end, escapes) {\n if (list.length == 0) return phpString(end);\n return function (stream, state) {\n var patterns = list[0];\n\n for (var i = 0; i < patterns.length; i++) {\n if (stream.match(patterns[i][0])) {\n state.tokenize = matchSequence(list.slice(1), end);\n return patterns[i][1];\n }\n }\n\n state.tokenize = phpString(end, escapes);\n return \"string\";\n };\n }\n\n function phpString(closing, escapes) {\n return function (stream, state) {\n return phpString_(stream, state, closing, escapes);\n };\n }\n\n function phpString_(stream, state, closing, escapes) {\n // \"Complex\" syntax\n if (escapes !== false && stream.match(\"${\", false) || stream.match(\"{$\", false)) {\n state.tokenize = null;\n return \"string\";\n } // Simple syntax\n\n\n if (escapes !== false && stream.match(/^\\$[a-zA-Z_][a-zA-Z0-9_]*/)) {\n // After the variable name there may appear array or object operator.\n if (stream.match(\"[\", false)) {\n // Match array operator\n state.tokenize = matchSequence([[[\"[\", null]], [[/\\d[\\w\\.]*/, \"number\"], [/\\$[a-zA-Z_][a-zA-Z0-9_]*/, \"variable-2\"], [/[\\w\\$]+/, \"variable\"]], [[\"]\", null]]], closing, escapes);\n }\n\n if (stream.match(/\\-\\>\\w/, false)) {\n // Match object operator\n state.tokenize = matchSequence([[[\"->\", null]], [[/[\\w]+/, \"variable\"]]], closing, escapes);\n }\n\n return \"variable-2\";\n }\n\n var escaped = false; // Normal string\n\n while (!stream.eol() && (escaped || escapes === false || !stream.match(\"{$\", false) && !stream.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*|\\$\\{)/, false))) {\n if (!escaped && stream.match(closing)) {\n state.tokenize = null;\n state.tokStack.pop();\n state.tokStack.pop();\n break;\n }\n\n escaped = stream.next() == \"\\\\\" && !escaped;\n }\n\n return \"string\";\n }\n\n var phpKeywords = \"abstract and array as break case catch class clone const continue declare default \" + \"do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final \" + \"for foreach function global goto if implements interface instanceof namespace \" + \"new or private protected public static switch throw trait try use var while xor \" + \"die echo empty exit eval include include_once isset list require require_once return \" + \"print unset __halt_compiler self static parent yield insteadof finally\";\n var phpAtoms = \"true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__\";\n var phpBuiltin = \"func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count\";\n CodeMirror.registerHelper(\"hintWords\", \"php\", [phpKeywords, phpAtoms, phpBuiltin].join(\" \").split(\" \"));\n CodeMirror.registerHelper(\"wordChars\", \"php\", /[\\w$]/);\n var phpConfig = {\n name: \"clike\",\n helperType: \"php\",\n keywords: keywords(phpKeywords),\n blockKeywords: keywords(\"catch do else elseif for foreach if switch try while finally\"),\n defKeywords: keywords(\"class function interface namespace trait\"),\n atoms: keywords(phpAtoms),\n builtin: keywords(phpBuiltin),\n multiLineStrings: true,\n hooks: {\n \"$\": function $(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"variable-2\";\n },\n \"<\": function _(stream, state) {\n var before;\n\n if (before = stream.match(/<<\\s*/)) {\n var quoted = stream.eat(/['\"]/);\n stream.eatWhile(/[\\w\\.]/);\n var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1));\n if (quoted) stream.eat(quoted);\n\n if (delim) {\n (state.tokStack || (state.tokStack = [])).push(delim, 0);\n state.tokenize = phpString(delim, quoted != \"'\");\n return \"string\";\n }\n }\n\n return false;\n },\n \"#\": function _(stream) {\n while (!stream.eol() && !stream.match(\"?>\", false)) {\n stream.next();\n }\n\n return \"comment\";\n },\n \"/\": function _(stream) {\n if (stream.eat(\"/\")) {\n while (!stream.eol() && !stream.match(\"?>\", false)) {\n stream.next();\n }\n\n return \"comment\";\n }\n\n return false;\n },\n '\"': function _(_stream, state) {\n (state.tokStack || (state.tokStack = [])).push('\"', 0);\n state.tokenize = phpString('\"');\n return \"string\";\n },\n \"{\": function _(_stream, state) {\n if (state.tokStack && state.tokStack.length) state.tokStack[state.tokStack.length - 1]++;\n return false;\n },\n \"}\": function _(_stream, state) {\n if (state.tokStack && state.tokStack.length > 0 && ! --state.tokStack[state.tokStack.length - 1]) {\n state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]);\n }\n\n return false;\n }\n }\n };\n CodeMirror.defineMode(\"php\", function (config, parserConfig) {\n var htmlMode = CodeMirror.getMode(config, parserConfig && parserConfig.htmlMode || \"text/html\");\n var phpMode = CodeMirror.getMode(config, phpConfig);\n\n function dispatch(stream, state) {\n var isPHP = state.curMode == phpMode;\n if (stream.sol() && state.pending && state.pending != '\"' && state.pending != \"'\") state.pending = null;\n\n if (!isPHP) {\n if (stream.match(/^<\\?\\w*/)) {\n state.curMode = phpMode;\n if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, \"\", \"\"));\n state.curState = state.php;\n return \"meta\";\n }\n\n if (state.pending == '\"' || state.pending == \"'\") {\n while (!stream.eol() && stream.next() != state.pending) {}\n\n var style = \"string\";\n } else if (state.pending && stream.pos < state.pending.end) {\n stream.pos = state.pending.end;\n var style = state.pending.style;\n } else {\n var style = htmlMode.token(stream, state.curState);\n }\n\n if (state.pending) state.pending = null;\n var cur = stream.current(),\n openPHP = cur.search(/<\\?/),\n m;\n\n if (openPHP != -1) {\n if (style == \"string\" && (m = cur.match(/[\\'\\\"]$/)) && !/\\?>/.test(cur)) state.pending = m[0];else state.pending = {\n end: stream.pos,\n style: style\n };\n stream.backUp(cur.length - openPHP);\n }\n\n return style;\n } else if (isPHP && state.php.tokenize == null && stream.match(\"?>\")) {\n state.curMode = htmlMode;\n state.curState = state.html;\n if (!state.php.context.prev) state.php = null;\n return \"meta\";\n } else {\n return phpMode.token(stream, state.curState);\n }\n }\n\n return {\n startState: function startState() {\n var html = CodeMirror.startState(htmlMode);\n var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null;\n return {\n html: html,\n php: php,\n curMode: parserConfig.startOpen ? phpMode : htmlMode,\n curState: parserConfig.startOpen ? php : html,\n pending: null\n };\n },\n copyState: function copyState(state) {\n var html = state.html,\n htmlNew = CodeMirror.copyState(htmlMode, html),\n php = state.php,\n phpNew = php && CodeMirror.copyState(phpMode, php),\n cur;\n if (state.curMode == htmlMode) cur = htmlNew;else cur = phpNew;\n return {\n html: htmlNew,\n php: phpNew,\n curMode: state.curMode,\n curState: cur,\n pending: state.pending\n };\n },\n token: dispatch,\n indent: function indent(state, textAfter, line) {\n if (state.curMode != phpMode && /^\\s*<\\//.test(textAfter) || state.curMode == phpMode && /^\\?>/.test(textAfter)) return htmlMode.indent(state.html, textAfter, line);\n return state.curMode.indent(state.curState, textAfter, line);\n },\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"//\",\n innerMode: function innerMode(state) {\n return {\n state: state.curState,\n mode: state.curMode\n };\n }\n };\n }, \"htmlmixed\", \"clike\");\n CodeMirror.defineMIME(\"application/x-httpd-php\", \"php\");\n CodeMirror.defineMIME(\"application/x-httpd-php-open\", {\n name: \"php\",\n startOpen: true\n });\n CodeMirror.defineMIME(\"text/x-php\", phpConfig);\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9waHAvcGhwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvcGhwL3BocC5qcz8wZTdlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIpLCByZXF1aXJlKFwiLi4vY2xpa2UvY2xpa2VcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIsIFwiLi4vY2xpa2UvY2xpa2VcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvLyBIZWxwZXIgZm9yIHBocFN0cmluZ1xuICBmdW5jdGlvbiBtYXRjaFNlcXVlbmNlKGxpc3QsIGVuZCwgZXNjYXBlcykge1xuICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gcGhwU3RyaW5nKGVuZCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgcGF0dGVybnMgPSBsaXN0WzBdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykgaWYgKHN0cmVhbS5tYXRjaChwYXR0ZXJuc1tpXVswXSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBtYXRjaFNlcXVlbmNlKGxpc3Quc2xpY2UoMSksIGVuZCk7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuc1tpXVsxXTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnRva2VuaXplID0gcGhwU3RyaW5nKGVuZCwgZXNjYXBlcyk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHBocFN0cmluZyhjbG9zaW5nLCBlc2NhcGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsgcmV0dXJuIHBocFN0cmluZ18oc3RyZWFtLCBzdGF0ZSwgY2xvc2luZywgZXNjYXBlcyk7IH07XG4gIH1cbiAgZnVuY3Rpb24gcGhwU3RyaW5nXyhzdHJlYW0sIHN0YXRlLCBjbG9zaW5nLCBlc2NhcGVzKSB7XG4gICAgLy8gXCJDb21wbGV4XCIgc3ludGF4XG4gICAgaWYgKGVzY2FwZXMgIT09IGZhbHNlICYmIHN0cmVhbS5tYXRjaChcIiR7XCIsIGZhbHNlKSB8fCBzdHJlYW0ubWF0Y2goXCJ7JFwiLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSBzeW50YXhcbiAgICBpZiAoZXNjYXBlcyAhPT0gZmFsc2UgJiYgc3RyZWFtLm1hdGNoKC9eXFwkW2EtekEtWl9dW2EtekEtWjAtOV9dKi8pKSB7XG4gICAgICAvLyBBZnRlciB0aGUgdmFyaWFibGUgbmFtZSB0aGVyZSBtYXkgYXBwZWFyIGFycmF5IG9yIG9iamVjdCBvcGVyYXRvci5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCJbXCIsIGZhbHNlKSkge1xuICAgICAgICAvLyBNYXRjaCBhcnJheSBvcGVyYXRvclxuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG1hdGNoU2VxdWVuY2UoW1xuICAgICAgICAgIFtbXCJbXCIsIG51bGxdXSxcbiAgICAgICAgICBbWy9cXGRbXFx3XFwuXSovLCBcIm51bWJlclwiXSxcbiAgICAgICAgICAgWy9cXCRbYS16QS1aX11bYS16QS1aMC05X10qLywgXCJ2YXJpYWJsZS0yXCJdLFxuICAgICAgICAgICBbL1tcXHdcXCRdKy8sIFwidmFyaWFibGVcIl1dLFxuICAgICAgICAgIFtbXCJdXCIsIG51bGxdXVxuICAgICAgICBdLCBjbG9zaW5nLCBlc2NhcGVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLVxcPlxcdy8sIGZhbHNlKSkge1xuICAgICAgICAvLyBNYXRjaCBvYmplY3Qgb3BlcmF0b3JcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBtYXRjaFNlcXVlbmNlKFtcbiAgICAgICAgICBbW1wiLT5cIiwgbnVsbF1dLFxuICAgICAgICAgIFtbL1tcXHddKy8sIFwidmFyaWFibGVcIl1dXG4gICAgICAgIF0sIGNsb3NpbmcsIGVzY2FwZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgIH1cblxuICAgIHZhciBlc2NhcGVkID0gZmFsc2U7XG4gICAgLy8gTm9ybWFsIHN0cmluZ1xuICAgIHdoaWxlICghc3RyZWFtLmVvbCgpICYmXG4gICAgICAgICAgIChlc2NhcGVkIHx8IGVzY2FwZXMgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAoIXN0cmVhbS5tYXRjaChcInskXCIsIGZhbHNlKSAmJlxuICAgICAgICAgICAgICFzdHJlYW0ubWF0Y2goL14oXFwkW2EtekEtWl9dW2EtekEtWjAtOV9dKnxcXCRcXHspLywgZmFsc2UpKSkpIHtcbiAgICAgIGlmICghZXNjYXBlZCAmJiBzdHJlYW0ubWF0Y2goY2xvc2luZykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICBzdGF0ZS50b2tTdGFjay5wb3AoKTsgc3RhdGUudG9rU3RhY2sucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZXNjYXBlZCA9IHN0cmVhbS5uZXh0KCkgPT0gXCJcXFxcXCIgJiYgIWVzY2FwZWQ7XG4gICAgfVxuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgdmFyIHBocEtleXdvcmRzID0gXCJhYnN0cmFjdCBhbmQgYXJyYXkgYXMgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjbG9uZSBjb25zdCBjb250aW51ZSBkZWNsYXJlIGRlZmF1bHQgXCIgK1xuICAgIFwiZG8gZWxzZSBlbHNlaWYgZW5kZGVjbGFyZSBlbmRmb3IgZW5kZm9yZWFjaCBlbmRpZiBlbmRzd2l0Y2ggZW5kd2hpbGUgZXh0ZW5kcyBmaW5hbCBcIiArXG4gICAgXCJmb3IgZm9yZWFjaCBmdW5jdGlvbiBnbG9iYWwgZ290byBpZiBpbXBsZW1lbnRzIGludGVyZmFjZSBpbnN0YW5jZW9mIG5hbWVzcGFjZSBcIiArXG4gICAgXCJuZXcgb3IgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYyBzd2l0Y2ggdGhyb3cgdHJhaXQgdHJ5IHVzZSB2YXIgd2hpbGUgeG9yIFwiICtcbiAgICBcImRpZSBlY2hvIGVtcHR5IGV4aXQgZXZhbCBpbmNsdWRlIGluY2x1ZGVfb25jZSBpc3NldCBsaXN0IHJlcXVpcmUgcmVxdWlyZV9vbmNlIHJldHVybiBcIiArXG4gICAgXCJwcmludCB1bnNldCBfX2hhbHRfY29tcGlsZXIgc2VsZiBzdGF0aWMgcGFyZW50IHlpZWxkIGluc3RlYWRvZiBmaW5hbGx5XCI7XG4gIHZhciBwaHBBdG9tcyA9IFwidHJ1ZSBmYWxzZSBudWxsIFRSVUUgRkFMU0UgTlVMTCBfX0NMQVNTX18gX19ESVJfXyBfX0ZJTEVfXyBfX0xJTkVfXyBfX01FVEhPRF9fIF9fRlVOQ1RJT05fXyBfX05BTUVTUEFDRV9fIF9fVFJBSVRfX1wiO1xuICB2YXIgcGhwQnVpbHRpbiA9IFwiZnVuY19udW1fYXJncyBmdW5jX2dldF9hcmcgZnVuY19nZXRfYXJncyBzdHJsZW4gc3RyY21wIHN0cm5jbXAgc3RyY2FzZWNtcCBzdHJuY2FzZWNtcCBlYWNoIGVycm9yX3JlcG9ydGluZyBkZWZpbmUgZGVmaW5lZCB0cmlnZ2VyX2Vycm9yIHVzZXJfZXJyb3Igc2V0X2Vycm9yX2hhbmRsZXIgcmVzdG9yZV9lcnJvcl9oYW5kbGVyIGdldF9kZWNsYXJlZF9jbGFzc2VzIGdldF9sb2FkZWRfZXh0ZW5zaW9ucyBleHRlbnNpb25fbG9hZGVkIGdldF9leHRlbnNpb25fZnVuY3MgZGVidWdfYmFja3RyYWNlIGNvbnN0YW50IGJpbjJoZXggaGV4MmJpbiBzbGVlcCB1c2xlZXAgdGltZSBta3RpbWUgZ21ta3RpbWUgc3RyZnRpbWUgZ21zdHJmdGltZSBzdHJ0b3RpbWUgZGF0ZSBnbWRhdGUgZ2V0ZGF0ZSBsb2NhbHRpbWUgY2hlY2tkYXRlIGZsdXNoIHdvcmR3cmFwIGh0bWxzcGVjaWFsY2hhcnMgaHRtbGVudGl0aWVzIGh0bWxfZW50aXR5X2RlY29kZSBtZDUgbWQ1X2ZpbGUgY3JjMzIgZ2V0aW1hZ2VzaXplIGltYWdlX3R5cGVfdG9fbWltZV90eXBlIHBocGluZm8gcGhwdmVyc2lvbiBwaHBjcmVkaXRzIHN0cm5hdGNtcCBzdHJuYXRjYXNlY21wIHN1YnN0cl9jb3VudCBzdHJzcG4gc3RyY3NwbiBzdHJ0b2sgc3RydG91cHBlciBzdHJ0b2xvd2VyIHN0cnBvcyBzdHJycG9zIHN0cnJldiBoZWJyZXYgaGVicmV2YyBubDJiciBiYXNlbmFtZSBkaXJuYW1lIHBhdGhpbmZvIHN0cmlwc2xhc2hlcyBzdHJpcGNzbGFzaGVzIHN0cnN0ciBzdHJpc3RyIHN0cnJjaHIgc3RyX3NodWZmbGUgc3RyX3dvcmRfY291bnQgc3RyY29sbCBzdWJzdHIgc3Vic3RyX3JlcGxhY2UgcXVvdGVtZXRhIHVjZmlyc3QgdWN3b3JkcyBzdHJ0ciBhZGRzbGFzaGVzIGFkZGNzbGFzaGVzIHJ0cmltIHN0cl9yZXBsYWNlIHN0cl9yZXBlYXQgY291bnRfY2hhcnMgY2h1bmtfc3BsaXQgdHJpbSBsdHJpbSBzdHJpcF90YWdzIHNpbWlsYXJfdGV4dCBleHBsb2RlIGltcGxvZGUgc2V0bG9jYWxlIGxvY2FsZWNvbnYgcGFyc2Vfc3RyIHN0cl9wYWQgY2hvcCBzdHJjaHIgc3ByaW50ZiBwcmludGYgdnByaW50ZiB2c3ByaW50ZiBzc2NhbmYgZnNjYW5mIHBhcnNlX3VybCB1cmxlbmNvZGUgdXJsZGVjb2RlIHJhd3VybGVuY29kZSByYXd1cmxkZWNvZGUgcmVhZGxpbmsgbGlua2luZm8gbGluayB1bmxpbmsgZXhlYyBzeXN0ZW0gZXNjYXBlc2hlbGxjbWQgZXNjYXBlc2hlbGxhcmcgcGFzc3RocnUgc2hlbGxfZXhlYyBwcm9jX29wZW4gcHJvY19jbG9zZSByYW5kIHNyYW5kIGdldHJhbmRtYXggbXRfcmFuZCBtdF9zcmFuZCBtdF9nZXRyYW5kbWF4IGJhc2U2NF9kZWNvZGUgYmFzZTY0X2VuY29kZSBhYnMgY2VpbCBmbG9vciByb3VuZCBpc19maW5pdGUgaXNfbmFuIGlzX2luZmluaXRlIGJpbmRlYyBoZXhkZWMgb2N0ZGVjIGRlY2JpbiBkZWNvY3QgZGVjaGV4IGJhc2VfY29udmVydCBudW1iZXJfZm9ybWF0IGZtb2QgaXAybG9uZyBsb25nMmlwIGdldGVudiBwdXRlbnYgZ2V0b3B0IG1pY3JvdGltZSBnZXR0aW1lb2ZkYXkgZ2V0cnVzYWdlIHVuaXFpZCBxdW90ZWRfcHJpbnRhYmxlX2RlY29kZSBzZXRfdGltZV9saW1pdCBnZXRfY2ZnX3ZhciBtYWdpY19xdW90ZXNfcnVudGltZSBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUgZ2V0X21hZ2ljX3F1b3Rlc19ncGMgZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlcyBlcnJvcl9sb2cgc2VyaWFsaXplIHVuc2VyaWFsaXplIG1lbW9yeV9nZXRfdXNhZ2UgdmFyX2R1bXAgdmFyX2V4cG9ydCBkZWJ1Z196dmFsX2R1bXAgcHJpbnRfciBoaWdobGlnaHRfZmlsZSBzaG93X3NvdXJjZSBoaWdobGlnaHRfc3RyaW5nIGluaV9nZXQgaW5pX2dldF9hbGwgaW5pX3NldCBpbmlfYWx0ZXIgaW5pX3Jlc3RvcmUgZ2V0X2luY2x1ZGVfcGF0aCBzZXRfaW5jbHVkZV9wYXRoIHJlc3RvcmVfaW5jbHVkZV9wYXRoIHNldGNvb2tpZSBoZWFkZXIgaGVhZGVyc19zZW50IGNvbm5lY3Rpb25fYWJvcnRlZCBjb25uZWN0aW9uX3N0YXR1cyBpZ25vcmVfdXNlcl9hYm9ydCBwYXJzZV9pbmlfZmlsZSBpc191cGxvYWRlZF9maWxlIG1vdmVfdXBsb2FkZWRfZmlsZSBpbnR2YWwgZmxvYXR2YWwgZG91YmxldmFsIHN0cnZhbCBnZXR0eXBlIHNldHR5cGUgaXNfbnVsbCBpc19yZXNvdXJjZSBpc19ib29sIGlzX2xvbmcgaXNfZmxvYXQgaXNfaW50IGlzX2ludGVnZXIgaXNfZG91YmxlIGlzX3JlYWwgaXNfbnVtZXJpYyBpc19zdHJpbmcgaXNfYXJyYXkgaXNfb2JqZWN0IGlzX3NjYWxhciBlcmVnIGVyZWdfcmVwbGFjZSBlcmVnaSBlcmVnaV9yZXBsYWNlIHNwbGl0IHNwbGl0aSBqb2luIHNxbF9yZWdjYXNlIGRsIHBjbG9zZSBwb3BlbiByZWFkZmlsZSByZXdpbmQgcm1kaXIgdW1hc2sgZmNsb3NlIGZlb2YgZmdldGMgZmdldHMgZmdldHNzIGZyZWFkIGZvcGVuIGZwYXNzdGhydSBmdHJ1bmNhdGUgZnN0YXQgZnNlZWsgZnRlbGwgZmZsdXNoIGZ3cml0ZSBmcHV0cyBta2RpciByZW5hbWUgY29weSB0ZW1wbmFtIHRtcGZpbGUgZmlsZSBmaWxlX2dldF9jb250ZW50cyBmaWxlX3B1dF9jb250ZW50cyBzdHJlYW1fc2VsZWN0IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zIHN0cmVhbV9jb250ZXh0X3NldF9vcHRpb24gc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMgc3RyZWFtX2ZpbHRlcl9wcmVwZW5kIHN0cmVhbV9maWx0ZXJfYXBwZW5kIGZnZXRjc3YgZmxvY2sgZ2V0X21ldGFfdGFncyBzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlciBzZXRfZmlsZV9idWZmZXIgc2V0X3NvY2tldF9ibG9ja2luZyBzdHJlYW1fc2V0X2Jsb2NraW5nIHNvY2tldF9zZXRfYmxvY2tpbmcgc3RyZWFtX2dldF9tZXRhX2RhdGEgc3RyZWFtX3JlZ2lzdGVyX3dyYXBwZXIgc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIgc3RyZWFtX3NldF90aW1lb3V0IHNvY2tldF9zZXRfdGltZW91dCBzb2NrZXRfZ2V0X3N0YXR1cyByZWFscGF0aCBmbm1hdGNoIGZzb2Nrb3BlbiBwZnNvY2tvcGVuIHBhY2sgdW5wYWNrIGdldF9icm93c2VyIGNyeXB0IG9wZW5kaXIgY2xvc2VkaXIgY2hkaXIgZ2V0Y3dkIHJld2luZGRpciByZWFkZGlyIGRpciBnbG9iIGZpbGVhdGltZSBmaWxlY3RpbWUgZmlsZWdyb3VwIGZpbGVpbm9kZSBmaWxlbXRpbWUgZmlsZW93bmVyIGZpbGVwZXJtcyBmaWxlc2l6ZSBmaWxldHlwZSBmaWxlX2V4aXN0cyBpc193cml0YWJsZSBpc193cml0ZWFibGUgaXNfcmVhZGFibGUgaXNfZXhlY3V0YWJsZSBpc19maWxlIGlzX2RpciBpc19saW5rIHN0YXQgbHN0YXQgY2hvd24gdG91Y2ggY2xlYXJzdGF0Y2FjaGUgbWFpbCBvYl9zdGFydCBvYl9mbHVzaCBvYl9jbGVhbiBvYl9lbmRfZmx1c2ggb2JfZW5kX2NsZWFuIG9iX2dldF9mbHVzaCBvYl9nZXRfY2xlYW4gb2JfZ2V0X2xlbmd0aCBvYl9nZXRfbGV2ZWwgb2JfZ2V0X3N0YXR1cyBvYl9nZXRfY29udGVudHMgb2JfaW1wbGljaXRfZmx1c2ggb2JfbGlzdF9oYW5kbGVycyBrc29ydCBrcnNvcnQgbmF0c29ydCBuYXRjYXNlc29ydCBhc29ydCBhcnNvcnQgc29ydCByc29ydCB1c29ydCB1YXNvcnQgdWtzb3J0IHNodWZmbGUgYXJyYXlfd2FsayBjb3VudCBlbmQgcHJldiBuZXh0IHJlc2V0IGN1cnJlbnQga2V5IG1pbiBtYXggaW5fYXJyYXkgYXJyYXlfc2VhcmNoIGV4dHJhY3QgY29tcGFjdCBhcnJheV9maWxsIHJhbmdlIGFycmF5X211bHRpc29ydCBhcnJheV9wdXNoIGFycmF5X3BvcCBhcnJheV9zaGlmdCBhcnJheV91bnNoaWZ0IGFycmF5X3NwbGljZSBhcnJheV9zbGljZSBhcnJheV9tZXJnZSBhcnJheV9tZXJnZV9yZWN1cnNpdmUgYXJyYXlfa2V5cyBhcnJheV92YWx1ZXMgYXJyYXlfY291bnRfdmFsdWVzIGFycmF5X3JldmVyc2UgYXJyYXlfcmVkdWNlIGFycmF5X3BhZCBhcnJheV9mbGlwIGFycmF5X2NoYW5nZV9rZXlfY2FzZSBhcnJheV9yYW5kIGFycmF5X3VuaXF1ZSBhcnJheV9pbnRlcnNlY3QgYXJyYXlfaW50ZXJzZWN0X2Fzc29jIGFycmF5X2RpZmYgYXJyYXlfZGlmZl9hc3NvYyBhcnJheV9zdW0gYXJyYXlfZmlsdGVyIGFycmF5X21hcCBhcnJheV9jaHVuayBhcnJheV9rZXlfZXhpc3RzIGFycmF5X2ludGVyc2VjdF9rZXkgYXJyYXlfY29tYmluZSBhcnJheV9jb2x1bW4gcG9zIHNpemVvZiBrZXlfZXhpc3RzIGFzc2VydCBhc3NlcnRfb3B0aW9ucyB2ZXJzaW9uX2NvbXBhcmUgZnRvayBzdHJfcm90MTMgYWdncmVnYXRlIHNlc3Npb25fbmFtZSBzZXNzaW9uX21vZHVsZV9uYW1lIHNlc3Npb25fc2F2ZV9wYXRoIHNlc3Npb25faWQgc2Vzc2lvbl9yZWdlbmVyYXRlX2lkIHNlc3Npb25fZGVjb2RlIHNlc3Npb25fcmVnaXN0ZXIgc2Vzc2lvbl91bnJlZ2lzdGVyIHNlc3Npb25faXNfcmVnaXN0ZXJlZCBzZXNzaW9uX2VuY29kZSBzZXNzaW9uX3N0YXJ0IHNlc3Npb25fZGVzdHJveSBzZXNzaW9uX3Vuc2V0IHNlc3Npb25fc2V0X3NhdmVfaGFuZGxlciBzZXNzaW9uX2NhY2hlX2xpbWl0ZXIgc2Vzc2lvbl9jYWNoZV9leHBpcmUgc2Vzc2lvbl9zZXRfY29va2llX3BhcmFtcyBzZXNzaW9uX2dldF9jb29raWVfcGFyYW1zIHNlc3Npb25fd3JpdGVfY2xvc2UgcHJlZ19tYXRjaCBwcmVnX21hdGNoX2FsbCBwcmVnX3JlcGxhY2UgcHJlZ19yZXBsYWNlX2NhbGxiYWNrIHByZWdfc3BsaXQgcHJlZ19xdW90ZSBwcmVnX2dyZXAgb3ZlcmxvYWQgY3R5cGVfYWxudW0gY3R5cGVfYWxwaGEgY3R5cGVfY250cmwgY3R5cGVfZGlnaXQgY3R5cGVfbG93ZXIgY3R5cGVfZ3JhcGggY3R5cGVfcHJpbnQgY3R5cGVfcHVuY3QgY3R5cGVfc3BhY2UgY3R5cGVfdXBwZXIgY3R5cGVfeGRpZ2l0IHZpcnR1YWwgYXBhY2hlX3JlcXVlc3RfaGVhZGVycyBhcGFjaGVfbm90ZSBhcGFjaGVfbG9va3VwX3VyaSBhcGFjaGVfY2hpbGRfdGVybWluYXRlIGFwYWNoZV9zZXRlbnYgYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMgYXBhY2hlX2dldF92ZXJzaW9uIGdldGFsbGhlYWRlcnMgbXlzcWxfY29ubmVjdCBteXNxbF9wY29ubmVjdCBteXNxbF9jbG9zZSBteXNxbF9zZWxlY3RfZGIgbXlzcWxfY3JlYXRlX2RiIG15c3FsX2Ryb3BfZGIgbXlzcWxfcXVlcnkgbXlzcWxfdW5idWZmZXJlZF9xdWVyeSBteXNxbF9kYl9xdWVyeSBteXNxbF9saXN0X2RicyBteXNxbF9saXN0X3RhYmxlcyBteXNxbF9saXN0X2ZpZWxkcyBteXNxbF9saXN0X3Byb2Nlc3NlcyBteXNxbF9lcnJvciBteXNxbF9lcnJubyBteXNxbF9hZmZlY3RlZF9yb3dzIG15c3FsX2luc2VydF9pZCBteXNxbF9yZXN1bHQgbXlzcWxfbnVtX3Jvd3MgbXlzcWxfbnVtX2ZpZWxkcyBteXNxbF9mZXRjaF9yb3cgbXlzcWxfZmV0Y2hfYXJyYXkgbXlzcWxfZmV0Y2hfYXNzb2MgbXlzcWxfZmV0Y2hfb2JqZWN0IG15c3FsX2RhdGFfc2VlayBteXNxbF9mZXRjaF9sZW5ndGhzIG15c3FsX2ZldGNoX2ZpZWxkIG15c3FsX2ZpZWxkX3NlZWsgbXlzcWxfZnJlZV9yZXN1bHQgbXlzcWxfZmllbGRfbmFtZSBteXNxbF9maWVsZF90YWJsZSBteXNxbF9maWVsZF9sZW4gbXlzcWxfZmllbGRfdHlwZSBteXNxbF9maWVsZF9mbGFncyBteXNxbF9lc2NhcGVfc3RyaW5nIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyBteXNxbF9zdGF0IG15c3FsX3RocmVhZF9pZCBteXNxbF9jbGllbnRfZW5jb2RpbmcgbXlzcWxfZ2V0X2NsaWVudF9pbmZvIG15c3FsX2dldF9ob3N0X2luZm8gbXlzcWxfZ2V0X3Byb3RvX2luZm8gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvIG15c3FsX2luZm8gbXlzcWwgbXlzcWxfZmllbGRuYW1lIG15c3FsX2ZpZWxkdGFibGUgbXlzcWxfZmllbGRsZW4gbXlzcWxfZmllbGR0eXBlIG15c3FsX2ZpZWxkZmxhZ3MgbXlzcWxfc2VsZWN0ZGIgbXlzcWxfY3JlYXRlZGIgbXlzcWxfZHJvcGRiIG15c3FsX2ZyZWVyZXN1bHQgbXlzcWxfbnVtZmllbGRzIG15c3FsX251bXJvd3MgbXlzcWxfbGlzdGRicyBteXNxbF9saXN0dGFibGVzIG15c3FsX2xpc3RmaWVsZHMgbXlzcWxfZGJfbmFtZSBteXNxbF9kYm5hbWUgbXlzcWxfdGFibGVuYW1lIG15c3FsX3RhYmxlX25hbWUgcGdfY29ubmVjdCBwZ19wY29ubmVjdCBwZ19jbG9zZSBwZ19jb25uZWN0aW9uX3N0YXR1cyBwZ19jb25uZWN0aW9uX2J1c3kgcGdfY29ubmVjdGlvbl9yZXNldCBwZ19ob3N0IHBnX2RibmFtZSBwZ19wb3J0IHBnX3R0eSBwZ19vcHRpb25zIHBnX3BpbmcgcGdfcXVlcnkgcGdfc2VuZF9xdWVyeSBwZ19jYW5jZWxfcXVlcnkgcGdfZmV0Y2hfcmVzdWx0IHBnX2ZldGNoX3JvdyBwZ19mZXRjaF9hc3NvYyBwZ19mZXRjaF9hcnJheSBwZ19mZXRjaF9vYmplY3QgcGdfZmV0Y2hfYWxsIHBnX2FmZmVjdGVkX3Jvd3MgcGdfZ2V0X3Jlc3VsdCBwZ19yZXN1bHRfc2VlayBwZ19yZXN1bHRfc3RhdHVzIHBnX2ZyZWVfcmVzdWx0IHBnX2xhc3Rfb2lkIHBnX251bV9yb3dzIHBnX251bV9maWVsZHMgcGdfZmllbGRfbmFtZSBwZ19maWVsZF9udW0gcGdfZmllbGRfc2l6ZSBwZ19maWVsZF90eXBlIHBnX2ZpZWxkX3BydGxlbiBwZ19maWVsZF9pc19udWxsIHBnX2dldF9ub3RpZnkgcGdfZ2V0X3BpZCBwZ19yZXN1bHRfZXJyb3IgcGdfbGFzdF9lcnJvciBwZ19sYXN0X25vdGljZSBwZ19wdXRfbGluZSBwZ19lbmRfY29weSBwZ19jb3B5X3RvIHBnX2NvcHlfZnJvbSBwZ190cmFjZSBwZ191bnRyYWNlIHBnX2xvX2NyZWF0ZSBwZ19sb191bmxpbmsgcGdfbG9fb3BlbiBwZ19sb19jbG9zZSBwZ19sb19yZWFkIHBnX2xvX3dyaXRlIHBnX2xvX3JlYWRfYWxsIHBnX2xvX2ltcG9ydCBwZ19sb19leHBvcnQgcGdfbG9fc2VlayBwZ19sb190ZWxsIHBnX2VzY2FwZV9zdHJpbmcgcGdfZXNjYXBlX2J5dGVhIHBnX3VuZXNjYXBlX2J5dGVhIHBnX2NsaWVudF9lbmNvZGluZyBwZ19zZXRfY2xpZW50X2VuY29kaW5nIHBnX21ldGFfZGF0YSBwZ19jb252ZXJ0IHBnX2luc2VydCBwZ191cGRhdGUgcGdfZGVsZXRlIHBnX3NlbGVjdCBwZ19leGVjIHBnX2dldGxhc3RvaWQgcGdfY21kdHVwbGVzIHBnX2Vycm9ybWVzc2FnZSBwZ19udW1yb3dzIHBnX251bWZpZWxkcyBwZ19maWVsZG5hbWUgcGdfZmllbGRzaXplIHBnX2ZpZWxkdHlwZSBwZ19maWVsZG51bSBwZ19maWVsZHBydGxlbiBwZ19maWVsZGlzbnVsbCBwZ19mcmVlcmVzdWx0IHBnX3Jlc3VsdCBwZ19sb3JlYWRhbGwgcGdfbG9jcmVhdGUgcGdfbG91bmxpbmsgcGdfbG9vcGVuIHBnX2xvY2xvc2UgcGdfbG9yZWFkIHBnX2xvd3JpdGUgcGdfbG9pbXBvcnQgcGdfbG9leHBvcnQgaHR0cF9yZXNwb25zZV9jb2RlIGdldF9kZWNsYXJlZF90cmFpdHMgZ2V0aW1hZ2VzaXplZnJvbXN0cmluZyBzb2NrZXRfaW1wb3J0X3N0cmVhbSBzdHJlYW1fc2V0X2NodW5rX3NpemUgdHJhaXRfZXhpc3RzIGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjayBjbGFzc191c2VzIHNlc3Npb25fc3RhdHVzIHNlc3Npb25fcmVnaXN0ZXJfc2h1dGRvd24gZWNobyBwcmludCBnbG9iYWwgc3RhdGljIGV4aXQgYXJyYXkgZW1wdHkgZXZhbCBpc3NldCB1bnNldCBkaWUgaW5jbHVkZSByZXF1aXJlIGluY2x1ZGVfb25jZSByZXF1aXJlX29uY2UganNvbl9kZWNvZGUganNvbl9lbmNvZGUganNvbl9sYXN0X2Vycm9yIGpzb25fbGFzdF9lcnJvcl9tc2cgY3VybF9jbG9zZSBjdXJsX2NvcHlfaGFuZGxlIGN1cmxfZXJybm8gY3VybF9lcnJvciBjdXJsX2VzY2FwZSBjdXJsX2V4ZWMgY3VybF9maWxlX2NyZWF0ZSBjdXJsX2dldGluZm8gY3VybF9pbml0IGN1cmxfbXVsdGlfYWRkX2hhbmRsZSBjdXJsX211bHRpX2Nsb3NlIGN1cmxfbXVsdGlfZXhlYyBjdXJsX211bHRpX2dldGNvbnRlbnQgY3VybF9tdWx0aV9pbmZvX3JlYWQgY3VybF9tdWx0aV9pbml0IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSBjdXJsX211bHRpX3NlbGVjdCBjdXJsX211bHRpX3NldG9wdCBjdXJsX211bHRpX3N0cmVycm9yIGN1cmxfcGF1c2UgY3VybF9yZXNldCBjdXJsX3NldG9wdF9hcnJheSBjdXJsX3NldG9wdCBjdXJsX3NoYXJlX2Nsb3NlIGN1cmxfc2hhcmVfaW5pdCBjdXJsX3NoYXJlX3NldG9wdCBjdXJsX3N0cmVycm9yIGN1cmxfdW5lc2NhcGUgY3VybF92ZXJzaW9uIG15c3FsaV9hZmZlY3RlZF9yb3dzIG15c3FsaV9hdXRvY29tbWl0IG15c3FsaV9jaGFuZ2VfdXNlciBteXNxbGlfY2hhcmFjdGVyX3NldF9uYW1lIG15c3FsaV9jbG9zZSBteXNxbGlfY29tbWl0IG15c3FsaV9jb25uZWN0X2Vycm5vIG15c3FsaV9jb25uZWN0X2Vycm9yIG15c3FsaV9jb25uZWN0IG15c3FsaV9kYXRhX3NlZWsgbXlzcWxpX2RlYnVnIG15c3FsaV9kdW1wX2RlYnVnX2luZm8gbXlzcWxpX2Vycm5vIG15c3FsaV9lcnJvcl9saXN0IG15c3FsaV9lcnJvciBteXNxbGlfZmV0Y2hfYWxsIG15c3FsaV9mZXRjaF9hcnJheSBteXNxbGlfZmV0Y2hfYXNzb2MgbXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdCBteXNxbGlfZmV0Y2hfZmllbGQgbXlzcWxpX2ZldGNoX2ZpZWxkcyBteXNxbGlfZmV0Y2hfbGVuZ3RocyBteXNxbGlfZmV0Y2hfb2JqZWN0IG15c3FsaV9mZXRjaF9yb3cgbXlzcWxpX2ZpZWxkX2NvdW50IG15c3FsaV9maWVsZF9zZWVrIG15c3FsaV9maWVsZF90ZWxsIG15c3FsaV9mcmVlX3Jlc3VsdCBteXNxbGlfZ2V0X2NoYXJzZXQgbXlzcWxpX2dldF9jbGllbnRfaW5mbyBteXNxbGlfZ2V0X2NsaWVudF9zdGF0cyBteXNxbGlfZ2V0X2NsaWVudF92ZXJzaW9uIG15c3FsaV9nZXRfY29ubmVjdGlvbl9zdGF0cyBteXNxbGlfZ2V0X2hvc3RfaW5mbyBteXNxbGlfZ2V0X3Byb3RvX2luZm8gbXlzcWxpX2dldF9zZXJ2ZXJfaW5mbyBteXNxbGlfZ2V0X3NlcnZlcl92ZXJzaW9uIG15c3FsaV9pbmZvIG15c3FsaV9pbml0IG15c3FsaV9pbnNlcnRfaWQgbXlzcWxpX2tpbGwgbXlzcWxpX21vcmVfcmVzdWx0cyBteXNxbGlfbXVsdGlfcXVlcnkgbXlzcWxpX25leHRfcmVzdWx0IG15c3FsaV9udW1fZmllbGRzIG15c3FsaV9udW1fcm93cyBteXNxbGlfb3B0aW9ucyBteXNxbGlfcGluZyBteXNxbGlfcHJlcGFyZSBteXNxbGlfcXVlcnkgbXlzcWxpX3JlYWxfY29ubmVjdCBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nIG15c3FsaV9yZWFsX3F1ZXJ5IG15c3FsaV9yZWFwX2FzeW5jX3F1ZXJ5IG15c3FsaV9yZWZyZXNoIG15c3FsaV9yb2xsYmFjayBteXNxbGlfc2VsZWN0X2RiIG15c3FsaV9zZXRfY2hhcnNldCBteXNxbGlfc2V0X2xvY2FsX2luZmlsZV9kZWZhdWx0IG15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2hhbmRsZXIgbXlzcWxpX3NxbHN0YXRlIG15c3FsaV9zc2xfc2V0IG15c3FsaV9zdGF0IG15c3FsaV9zdG10X2luaXQgbXlzcWxpX3N0b3JlX3Jlc3VsdCBteXNxbGlfdGhyZWFkX2lkIG15c3FsaV90aHJlYWRfc2FmZSBteXNxbGlfdXNlX3Jlc3VsdCBteXNxbGlfd2FybmluZ19jb3VudFwiO1xuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwicGhwXCIsIFtwaHBLZXl3b3JkcywgcGhwQXRvbXMsIHBocEJ1aWx0aW5dLmpvaW4oXCIgXCIpLnNwbGl0KFwiIFwiKSk7XG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJ3b3JkQ2hhcnNcIiwgXCJwaHBcIiwgL1tcXHckXS8pO1xuXG4gIHZhciBwaHBDb25maWcgPSB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGhlbHBlclR5cGU6IFwicGhwXCIsXG4gICAga2V5d29yZHM6IGtleXdvcmRzKHBocEtleXdvcmRzKSxcbiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcyhcImNhdGNoIGRvIGVsc2UgZWxzZWlmIGZvciBmb3JlYWNoIGlmIHN3aXRjaCB0cnkgd2hpbGUgZmluYWxseVwiKSxcbiAgICBkZWZLZXl3b3Jkczoga2V5d29yZHMoXCJjbGFzcyBmdW5jdGlvbiBpbnRlcmZhY2UgbmFtZXNwYWNlIHRyYWl0XCIpLFxuICAgIGF0b21zOiBrZXl3b3JkcyhwaHBBdG9tcyksXG4gICAgYnVpbHRpbjoga2V5d29yZHMocGhwQnVpbHRpbiksXG4gICAgbXVsdGlMaW5lU3RyaW5nczogdHJ1ZSxcbiAgICBob29rczoge1xuICAgICAgXCIkXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pO1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICB9LFxuICAgICAgXCI8XCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGJlZm9yZTtcbiAgICAgICAgaWYgKGJlZm9yZSA9IHN0cmVhbS5tYXRjaCgvPDxcXHMqLykpIHtcbiAgICAgICAgICB2YXIgcXVvdGVkID0gc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICAgICAgdmFyIGRlbGltID0gc3RyZWFtLmN1cnJlbnQoKS5zbGljZShiZWZvcmVbMF0ubGVuZ3RoICsgKHF1b3RlZCA/IDIgOiAxKSk7XG4gICAgICAgICAgaWYgKHF1b3RlZCkgc3RyZWFtLmVhdChxdW90ZWQpO1xuICAgICAgICAgIGlmIChkZWxpbSkge1xuICAgICAgICAgICAgKHN0YXRlLnRva1N0YWNrIHx8IChzdGF0ZS50b2tTdGFjayA9IFtdKSkucHVzaChkZWxpbSwgMCk7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBocFN0cmluZyhkZWxpbSwgcXVvdGVkICE9IFwiJ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgXCIjXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKFwiPz5cIiwgZmFsc2UpKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9LFxuICAgICAgXCIvXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKFwiPz5cIiwgZmFsc2UpKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgJ1wiJzogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgKHN0YXRlLnRva1N0YWNrIHx8IChzdGF0ZS50b2tTdGFjayA9IFtdKSkucHVzaCgnXCInLCAwKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwaHBTdHJpbmcoJ1wiJyk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSxcbiAgICAgIFwie1wiOiBmdW5jdGlvbihfc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUudG9rU3RhY2sgJiYgc3RhdGUudG9rU3RhY2subGVuZ3RoKVxuICAgICAgICAgIHN0YXRlLnRva1N0YWNrW3N0YXRlLnRva1N0YWNrLmxlbmd0aCAtIDFdKys7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBcIn1cIjogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRva1N0YWNrICYmIHN0YXRlLnRva1N0YWNrLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICEtLXN0YXRlLnRva1N0YWNrW3N0YXRlLnRva1N0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwaHBTdHJpbmcoc3RhdGUudG9rU3RhY2tbc3RhdGUudG9rU3RhY2subGVuZ3RoIC0gMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwicGhwXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgKHBhcnNlckNvbmZpZyAmJiBwYXJzZXJDb25maWcuaHRtbE1vZGUpIHx8IFwidGV4dC9odG1sXCIpO1xuICAgIHZhciBwaHBNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGhwQ29uZmlnKTtcblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBpc1BIUCA9IHN0YXRlLmN1ck1vZGUgPT0gcGhwTW9kZTtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RhdGUucGVuZGluZyAmJiBzdGF0ZS5wZW5kaW5nICE9ICdcIicgJiYgc3RhdGUucGVuZGluZyAhPSBcIidcIikgc3RhdGUucGVuZGluZyA9IG51bGw7XG4gICAgICBpZiAoIWlzUEhQKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL148XFw/XFx3Ki8pKSB7XG4gICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IHBocE1vZGU7XG4gICAgICAgICAgaWYgKCFzdGF0ZS5waHApIHN0YXRlLnBocCA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShwaHBNb2RlLCBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbCwgXCJcIiwgXCJcIikpXG4gICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7XG4gICAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5wZW5kaW5nID09ICdcIicgfHwgc3RhdGUucGVuZGluZyA9PSBcIidcIikge1xuICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5uZXh0KCkgIT0gc3RhdGUucGVuZGluZykge31cbiAgICAgICAgICB2YXIgc3R5bGUgPSBcInN0cmluZ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBlbmRpbmcgJiYgc3RyZWFtLnBvcyA8IHN0YXRlLnBlbmRpbmcuZW5kKSB7XG4gICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXRlLnBlbmRpbmcuZW5kO1xuICAgICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnBlbmRpbmcuc3R5bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5jdXJTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnBlbmRpbmcpIHN0YXRlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKSwgb3BlblBIUCA9IGN1ci5zZWFyY2goLzxcXD8vKSwgbTtcbiAgICAgICAgaWYgKG9wZW5QSFAgIT0gLTEpIHtcbiAgICAgICAgICBpZiAoc3R5bGUgPT0gXCJzdHJpbmdcIiAmJiAobSA9IGN1ci5tYXRjaCgvW1xcJ1xcXCJdJC8pKSAmJiAhL1xcPz4vLnRlc3QoY3VyKSkgc3RhdGUucGVuZGluZyA9IG1bMF07XG4gICAgICAgICAgZWxzZSBzdGF0ZS5wZW5kaW5nID0ge2VuZDogc3RyZWFtLnBvcywgc3R5bGU6IHN0eWxlfTtcbiAgICAgICAgICBzdHJlYW0uYmFja1VwKGN1ci5sZW5ndGggLSBvcGVuUEhQKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9IGVsc2UgaWYgKGlzUEhQICYmIHN0YXRlLnBocC50b2tlbml6ZSA9PSBudWxsICYmIHN0cmVhbS5tYXRjaChcIj8+XCIpKSB7XG4gICAgICAgIHN0YXRlLmN1ck1vZGUgPSBodG1sTW9kZTtcbiAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5odG1sO1xuICAgICAgICBpZiAoIXN0YXRlLnBocC5jb250ZXh0LnByZXYpIHN0YXRlLnBocCA9IG51bGw7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwaHBNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoaHRtbE1vZGUpXG4gICAgICAgIHZhciBwaHAgPSBwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gQ29kZU1pcnJvci5zdGFydFN0YXRlKHBocE1vZGUpIDogbnVsbFxuICAgICAgICByZXR1cm4ge2h0bWw6IGh0bWwsXG4gICAgICAgICAgICAgICAgcGhwOiBwaHAsXG4gICAgICAgICAgICAgICAgY3VyTW9kZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IHBocE1vZGUgOiBodG1sTW9kZSxcbiAgICAgICAgICAgICAgICBjdXJTdGF0ZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IHBocCA6IGh0bWwsXG4gICAgICAgICAgICAgICAgcGVuZGluZzogbnVsbH07XG4gICAgICB9LFxuXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHZhciBodG1sID0gc3RhdGUuaHRtbCwgaHRtbE5ldyA9IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBodG1sKSxcbiAgICAgICAgICAgIHBocCA9IHN0YXRlLnBocCwgcGhwTmV3ID0gcGhwICYmIENvZGVNaXJyb3IuY29weVN0YXRlKHBocE1vZGUsIHBocCksIGN1cjtcbiAgICAgICAgaWYgKHN0YXRlLmN1ck1vZGUgPT0gaHRtbE1vZGUpIGN1ciA9IGh0bWxOZXc7XG4gICAgICAgIGVsc2UgY3VyID0gcGhwTmV3O1xuICAgICAgICByZXR1cm4ge2h0bWw6IGh0bWxOZXcsIHBocDogcGhwTmV3LCBjdXJNb2RlOiBzdGF0ZS5jdXJNb2RlLCBjdXJTdGF0ZTogY3VyLFxuICAgICAgICAgICAgICAgIHBlbmRpbmc6IHN0YXRlLnBlbmRpbmd9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGRpc3BhdGNoLFxuXG4gICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgICAgaWYgKChzdGF0ZS5jdXJNb2RlICE9IHBocE1vZGUgJiYgL15cXHMqPFxcLy8udGVzdCh0ZXh0QWZ0ZXIpKSB8fFxuICAgICAgICAgICAgKHN0YXRlLmN1ck1vZGUgPT0gcGhwTW9kZSAmJiAvXlxcPz4vLnRlc3QodGV4dEFmdGVyKSkpXG4gICAgICAgICAgcmV0dXJuIGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sLCB0ZXh0QWZ0ZXIsIGxpbmUpO1xuICAgICAgICByZXR1cm4gc3RhdGUuY3VyTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsIHRleHRBZnRlciwgbGluZSk7XG4gICAgICB9LFxuXG4gICAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCIsXG4gICAgICBsaW5lQ29tbWVudDogXCIvL1wiLFxuXG4gICAgICBpbm5lck1vZGU6IGZ1bmN0aW9uKHN0YXRlKSB7IHJldHVybiB7c3RhdGU6IHN0YXRlLmN1clN0YXRlLCBtb2RlOiBzdGF0ZS5jdXJNb2RlfTsgfVxuICAgIH07XG4gIH0sIFwiaHRtbG1peGVkXCIsIFwiY2xpa2VcIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIiwgXCJwaHBcIik7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW5cIiwge25hbWU6IFwicGhwXCIsIHN0YXJ0T3BlbjogdHJ1ZX0pO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtcGhwXCIsIHBocENvbmZpZyk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFHQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbEJBO0FBb0JBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXRCQTtBQXdCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQTdCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQWxDQTtBQW9DQTtBQUNBO0FBRUE7QUF2Q0E7QUF5Q0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUEvQ0E7QUFUQTtBQTREQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdkJBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFKQTtBQVdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFoQkE7QUFvQkE7QUFFQTtBQUNBO0FBR0E7QUExQkE7QUE2QkE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBakNBO0FBekNBO0FBOEVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXJPQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/php/php.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/python/python.js": -/*!********************************************************!*\ - !*** ../node_modules/codemirror/mode/python/python.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n }\n\n var wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\n var commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\", \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\", \"for\", \"from\", \"global\", \"if\", \"import\", \"lambda\", \"pass\", \"raise\", \"return\", \"try\", \"while\", \"with\", \"yield\", \"in\"];\n var commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\", \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\", \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\", \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\", \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\", \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\", \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\", \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\", \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\", \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\", \"Ellipsis\", \"__debug__\"];\n CodeMirror.registerHelper(\"hintWords\", \"python\", commonKeywords.concat(commonBuiltins));\n\n function top(state) {\n return state.scopes[state.scopes.length - 1];\n }\n\n CodeMirror.defineMode(\"python\", function (conf, parserConf) {\n var ERRORCLASS = \"error\";\n var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/; // (Backwards-compatiblity with old, cumbersome config system)\n\n var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters, parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/];\n\n for (var i = 0; i < operators.length; i++) {\n if (!operators[i]) operators.splice(i--, 1);\n }\n\n var hangingIndent = parserConf.hangingIndent || conf.indentUnit;\n var myKeywords = commonKeywords,\n myBuiltins = commonBuiltins;\n if (parserConf.extra_keywords != undefined) myKeywords = myKeywords.concat(parserConf.extra_keywords);\n if (parserConf.extra_builtins != undefined) myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n var py3 = !(parserConf.version && Number(parserConf.version) < 3);\n\n if (py3) {\n // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n var identifiers = parserConf.identifiers || /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n myKeywords = myKeywords.concat([\"nonlocal\", \"False\", \"True\", \"None\", \"async\", \"await\"]);\n myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(fr))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n } else {\n var identifiers = parserConf.identifiers || /^[_A-Za-z][_A-Za-z0-9]*/;\n myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\", \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\", \"unichr\", \"unicode\", \"xrange\", \"False\", \"True\", \"None\"]);\n var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n }\n\n var keywords = wordRegexp(myKeywords);\n var builtins = wordRegexp(myBuiltins); // tokenizers\n\n function tokenBase(stream, state) {\n var sol = stream.sol() && state.lastToken != \"\\\\\";\n if (sol) state.indent = stream.indentation(); // Handle scope changes\n\n if (sol && top(state).type == \"py\") {\n var scopeOffset = top(state).offset;\n\n if (stream.eatSpace()) {\n var lineOffset = stream.indentation();\n if (lineOffset > scopeOffset) pushPyScope(state);else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\") state.errorToken = true;\n return null;\n } else {\n var style = tokenBaseInner(stream, state);\n if (scopeOffset > 0 && dedent(stream, state)) style += \" \" + ERRORCLASS;\n return style;\n }\n }\n\n return tokenBaseInner(stream, state);\n }\n\n function tokenBaseInner(stream, state) {\n if (stream.eatSpace()) return null; // Handle Comments\n\n if (stream.match(/^#.*/)) return \"comment\"; // Handle Number Literals\n\n if (stream.match(/^[0-9\\.]/, false)) {\n var floatLiteral = false; // Floats\n\n if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) {\n floatLiteral = true;\n }\n\n if (stream.match(/^[\\d_]+\\.\\d*/)) {\n floatLiteral = true;\n }\n\n if (stream.match(/^\\.\\d+/)) {\n floatLiteral = true;\n }\n\n if (floatLiteral) {\n // Float literals may be \"imaginary\"\n stream.eat(/J/i);\n return \"number\";\n } // Integers\n\n\n var intLiteral = false; // Hex\n\n if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true; // Binary\n\n if (stream.match(/^0b[01_]+/i)) intLiteral = true; // Octal\n\n if (stream.match(/^0o[0-7_]+/i)) intLiteral = true; // Decimal\n\n if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n // Decimal literals may be \"imaginary\"\n stream.eat(/J/i); // TODO - Can you have imaginary longs?\n\n intLiteral = true;\n } // Zero by itself with no other piece of number.\n\n\n if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n\n if (intLiteral) {\n // Integer literals may be \"long\"\n stream.eat(/L/i);\n return \"number\";\n }\n } // Handle Strings\n\n\n if (stream.match(stringPrefixes)) {\n var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n\n if (!isFmtString) {\n state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n } else {\n state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n }\n }\n\n for (var i = 0; i < operators.length; i++) {\n if (stream.match(operators[i])) return \"operator\";\n }\n\n if (stream.match(delimiters)) return \"punctuation\";\n if (state.lastToken == \".\" && stream.match(identifiers)) return \"property\";\n if (stream.match(keywords) || stream.match(wordOperators)) return \"keyword\";\n if (stream.match(builtins)) return \"builtin\";\n if (stream.match(/^(self|cls)\\b/)) return \"variable-2\";\n\n if (stream.match(identifiers)) {\n if (state.lastToken == \"def\" || state.lastToken == \"class\") return \"def\";\n return \"variable\";\n } // Handle non-detected items\n\n\n stream.next();\n return ERRORCLASS;\n }\n\n function formatStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) {\n delimiter = delimiter.substr(1);\n }\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenNestedExpr(depth) {\n return function (stream, state) {\n var inner = tokenBaseInner(stream, state);\n\n if (inner == \"punctuation\") {\n if (stream.current() == \"{\") {\n state.tokenize = tokenNestedExpr(depth + 1);\n } else if (stream.current() == \"}\") {\n if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1);else state.tokenize = tokenString;\n }\n }\n\n return inner;\n };\n }\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol()) return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else if (stream.match('{{')) {\n // ignore {{ in f-str\n return OUTCLASS;\n } else if (stream.match('{', false)) {\n // switch to nested mode\n state.tokenize = tokenNestedExpr(0);\n if (stream.current()) return OUTCLASS;else return state.tokenize(stream, state);\n } else if (stream.match('}}')) {\n return OUTCLASS;\n } else if (stream.match('}')) {\n // single } in f-string is an error\n return ERRORCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n\n if (singleline) {\n if (parserConf.singleLineStringErrors) return ERRORCLASS;else state.tokenize = tokenOuter;\n }\n\n return OUTCLASS;\n }\n\n tokenString.isString = true;\n return tokenString;\n }\n\n function tokenStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) {\n delimiter = delimiter.substr(1);\n }\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\\\]/);\n\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol()) return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n\n if (singleline) {\n if (parserConf.singleLineStringErrors) return ERRORCLASS;else state.tokenize = tokenOuter;\n }\n\n return OUTCLASS;\n }\n\n tokenString.isString = true;\n return tokenString;\n }\n\n function pushPyScope(state) {\n while (top(state).type != \"py\") {\n state.scopes.pop();\n }\n\n state.scopes.push({\n offset: top(state).offset + conf.indentUnit,\n type: \"py\",\n align: null\n });\n }\n\n function pushBracketScope(stream, state, type) {\n var align = stream.match(/^([\\s\\[\\{\\(]|#.*)*$/, false) ? null : stream.column() + 1;\n state.scopes.push({\n offset: state.indent + hangingIndent,\n type: type,\n align: align\n });\n }\n\n function dedent(stream, state) {\n var indented = stream.indentation();\n\n while (state.scopes.length > 1 && top(state).offset > indented) {\n if (top(state).type != \"py\") return true;\n state.scopes.pop();\n }\n\n return top(state).offset != indented;\n }\n\n function tokenLexer(stream, state) {\n if (stream.sol()) state.beginningOfLine = true;\n var style = state.tokenize(stream, state);\n var current = stream.current(); // Handle decorators\n\n if (state.beginningOfLine && current == \"@\") return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n if (/\\S/.test(current)) state.beginningOfLine = false;\n if ((style == \"variable\" || style == \"builtin\") && state.lastToken == \"meta\") style = \"meta\"; // Handle scope changes.\n\n if (current == \"pass\" || current == \"return\") state.dedent += 1;\n if (current == \"lambda\") state.lambda = true;\n if (current == \":\" && !state.lambda && top(state).type == \"py\") pushPyScope(state);\n\n if (current.length == 1 && !/string|comment/.test(style)) {\n var delimiter_index = \"[({\".indexOf(current);\n if (delimiter_index != -1) pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index + 1));\n delimiter_index = \"])}\".indexOf(current);\n\n if (delimiter_index != -1) {\n if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent;else return ERRORCLASS;\n }\n }\n\n if (state.dedent > 0 && stream.eol() && top(state).type == \"py\") {\n if (state.scopes.length > 1) state.scopes.pop();\n state.dedent -= 1;\n }\n\n return style;\n }\n\n var external = {\n startState: function startState(basecolumn) {\n return {\n tokenize: tokenBase,\n scopes: [{\n offset: basecolumn || 0,\n type: \"py\",\n align: null\n }],\n indent: basecolumn || 0,\n lastToken: null,\n lambda: false,\n dedent: 0\n };\n },\n token: function token(stream, state) {\n var addErr = state.errorToken;\n if (addErr) state.errorToken = false;\n var style = tokenLexer(stream, state);\n if (style && style != \"comment\") state.lastToken = style == \"keyword\" || style == \"punctuation\" ? stream.current() : style;\n if (style == \"punctuation\") style = null;\n if (stream.eol() && state.lambda) state.lambda = false;\n return addErr ? style + \" \" + ERRORCLASS : style;\n },\n indent: function indent(state, textAfter) {\n if (state.tokenize != tokenBase) return state.tokenize.isString ? CodeMirror.Pass : 0;\n var scope = top(state),\n closing = scope.type == textAfter.charAt(0);\n if (scope.align != null) return scope.align - (closing ? 1 : 0);else return scope.offset - (closing ? hangingIndent : 0);\n },\n electricInput: /^\\s*[\\}\\]\\)]$/,\n closeBrackets: {\n triples: \"'\\\"\"\n },\n lineComment: \"#\",\n fold: \"indent\"\n };\n return external;\n });\n CodeMirror.defineMIME(\"text/x-python\", \"python\");\n\n var words = function words(str) {\n return str.split(\" \");\n };\n\n CodeMirror.defineMIME(\"text/x-cython\", {\n name: \"python\",\n extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \" + \"extern gil include nogil property public \" + \"readonly struct union DEF IF ELIF ELSE\")\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9weXRob24vcHl0aG9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvcHl0aG9uL3B5dGhvbi5qcz8wNDI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcbiAgfVxuXG4gIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbXCJhbmRcIiwgXCJvclwiLCBcIm5vdFwiLCBcImlzXCJdKTtcbiAgdmFyIGNvbW1vbktleXdvcmRzID0gW1wiYXNcIiwgXCJhc3NlcnRcIiwgXCJicmVha1wiLCBcImNsYXNzXCIsIFwiY29udGludWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmXCIsIFwiZGVsXCIsIFwiZWxpZlwiLCBcImVsc2VcIiwgXCJleGNlcHRcIiwgXCJmaW5hbGx5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvclwiLCBcImZyb21cIiwgXCJnbG9iYWxcIiwgXCJpZlwiLCBcImltcG9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsYW1iZGFcIiwgXCJwYXNzXCIsIFwicmFpc2VcIiwgXCJyZXR1cm5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHJ5XCIsIFwid2hpbGVcIiwgXCJ3aXRoXCIsIFwieWllbGRcIiwgXCJpblwiXTtcbiAgdmFyIGNvbW1vbkJ1aWx0aW5zID0gW1wiYWJzXCIsIFwiYWxsXCIsIFwiYW55XCIsIFwiYmluXCIsIFwiYm9vbFwiLCBcImJ5dGVhcnJheVwiLCBcImNhbGxhYmxlXCIsIFwiY2hyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzbWV0aG9kXCIsIFwiY29tcGlsZVwiLCBcImNvbXBsZXhcIiwgXCJkZWxhdHRyXCIsIFwiZGljdFwiLCBcImRpclwiLCBcImRpdm1vZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnVtZXJhdGVcIiwgXCJldmFsXCIsIFwiZmlsdGVyXCIsIFwiZmxvYXRcIiwgXCJmb3JtYXRcIiwgXCJmcm96ZW5zZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0YXR0clwiLCBcImdsb2JhbHNcIiwgXCJoYXNhdHRyXCIsIFwiaGFzaFwiLCBcImhlbHBcIiwgXCJoZXhcIiwgXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFwiLCBcImludFwiLCBcImlzaW5zdGFuY2VcIiwgXCJpc3N1YmNsYXNzXCIsIFwiaXRlclwiLCBcImxlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXN0XCIsIFwibG9jYWxzXCIsIFwibWFwXCIsIFwibWF4XCIsIFwibWVtb3J5dmlld1wiLCBcIm1pblwiLCBcIm5leHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIsIFwib2N0XCIsIFwib3BlblwiLCBcIm9yZFwiLCBcInBvd1wiLCBcInByb3BlcnR5XCIsIFwicmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVwclwiLCBcInJldmVyc2VkXCIsIFwicm91bmRcIiwgXCJzZXRcIiwgXCJzZXRhdHRyXCIsIFwic2xpY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic29ydGVkXCIsIFwic3RhdGljbWV0aG9kXCIsIFwic3RyXCIsIFwic3VtXCIsIFwic3VwZXJcIiwgXCJ0dXBsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIsIFwidmFyc1wiLCBcInppcFwiLCBcIl9faW1wb3J0X19cIiwgXCJOb3RJbXBsZW1lbnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFbGxpcHNpc1wiLCBcIl9fZGVidWdfX1wiXTtcbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInB5dGhvblwiLCBjb21tb25LZXl3b3Jkcy5jb25jYXQoY29tbW9uQnVpbHRpbnMpKTtcblxuICBmdW5jdGlvbiB0b3Aoc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUuc2NvcGVzW3N0YXRlLnNjb3Blcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInB5dGhvblwiLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7XG4gICAgdmFyIEVSUk9SQ0xBU1MgPSBcImVycm9yXCI7XG5cbiAgICB2YXIgZGVsaW1pdGVycyA9IHBhcnNlckNvbmYuZGVsaW1pdGVycyB8fCBwYXJzZXJDb25mLnNpbmdsZURlbGltaXRlcnMgfHwgL15bXFwoXFwpXFxbXFxdXFx7XFx9QCw6YD07XFwuXFxcXF0vO1xuICAgIC8vICAgICAgICAgICAgICAgKEJhY2t3YXJkcy1jb21wYXRpYmxpdHkgd2l0aCBvbGQsIGN1bWJlcnNvbWUgY29uZmlnIHN5c3RlbSlcbiAgICB2YXIgb3BlcmF0b3JzID0gW3BhcnNlckNvbmYuc2luZ2xlT3BlcmF0b3JzLCBwYXJzZXJDb25mLmRvdWJsZU9wZXJhdG9ycywgcGFyc2VyQ29uZi5kb3VibGVEZWxpbWl0ZXJzLCBwYXJzZXJDb25mLnRyaXBsZURlbGltaXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICBwYXJzZXJDb25mLm9wZXJhdG9ycyB8fCAvXihbLSsqLyVcXC8mfF5dPT98Wzw+PV0rfFxcL1xcLz0/fFxcKlxcKj0/fCE9fFt+IUBdfFxcLlxcLlxcLikvXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BlcmF0b3JzLmxlbmd0aDsgaSsrKSBpZiAoIW9wZXJhdG9yc1tpXSkgb3BlcmF0b3JzLnNwbGljZShpLS0sIDEpXG5cbiAgICB2YXIgaGFuZ2luZ0luZGVudCA9IHBhcnNlckNvbmYuaGFuZ2luZ0luZGVudCB8fCBjb25mLmluZGVudFVuaXQ7XG5cbiAgICB2YXIgbXlLZXl3b3JkcyA9IGNvbW1vbktleXdvcmRzLCBteUJ1aWx0aW5zID0gY29tbW9uQnVpbHRpbnM7XG4gICAgaWYgKHBhcnNlckNvbmYuZXh0cmFfa2V5d29yZHMgIT0gdW5kZWZpbmVkKVxuICAgICAgbXlLZXl3b3JkcyA9IG15S2V5d29yZHMuY29uY2F0KHBhcnNlckNvbmYuZXh0cmFfa2V5d29yZHMpO1xuXG4gICAgaWYgKHBhcnNlckNvbmYuZXh0cmFfYnVpbHRpbnMgIT0gdW5kZWZpbmVkKVxuICAgICAgbXlCdWlsdGlucyA9IG15QnVpbHRpbnMuY29uY2F0KHBhcnNlckNvbmYuZXh0cmFfYnVpbHRpbnMpO1xuXG4gICAgdmFyIHB5MyA9ICEocGFyc2VyQ29uZi52ZXJzaW9uICYmIE51bWJlcihwYXJzZXJDb25mLnZlcnNpb24pIDwgMylcbiAgICBpZiAocHkzKSB7XG4gICAgICAvLyBzaW5jZSBodHRwOi8vbGVnYWN5LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NjUvIEAgaXMgYWxzbyBhbiBvcGVyYXRvclxuICAgICAgdmFyIGlkZW50aWZpZXJzID0gcGFyc2VyQ29uZi5pZGVudGlmaWVyc3x8IC9eW19BLVphLXpcXHUwMEExLVxcdUZGRkZdW19BLVphLXowLTlcXHUwMEExLVxcdUZGRkZdKi87XG4gICAgICBteUtleXdvcmRzID0gbXlLZXl3b3Jkcy5jb25jYXQoW1wibm9ubG9jYWxcIiwgXCJGYWxzZVwiLCBcIlRydWVcIiwgXCJOb25lXCIsIFwiYXN5bmNcIiwgXCJhd2FpdFwiXSk7XG4gICAgICBteUJ1aWx0aW5zID0gbXlCdWlsdGlucy5jb25jYXQoW1wiYXNjaWlcIiwgXCJieXRlc1wiLCBcImV4ZWNcIiwgXCJwcmludFwiXSk7XG4gICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKFwiXigoW3JidWZdfChicil8KGZyKSk/KCd7M318XFxcInszfXxbJ1xcXCJdKSlcIiwgXCJpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaWRlbnRpZmllcnMgPSBwYXJzZXJDb25mLmlkZW50aWZpZXJzfHwgL15bX0EtWmEtel1bX0EtWmEtejAtOV0qLztcbiAgICAgIG15S2V5d29yZHMgPSBteUtleXdvcmRzLmNvbmNhdChbXCJleGVjXCIsIFwicHJpbnRcIl0pO1xuICAgICAgbXlCdWlsdGlucyA9IG15QnVpbHRpbnMuY29uY2F0KFtcImFwcGx5XCIsIFwiYmFzZXN0cmluZ1wiLCBcImJ1ZmZlclwiLCBcImNtcFwiLCBcImNvZXJjZVwiLCBcImV4ZWNmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlsZVwiLCBcImludGVyblwiLCBcImxvbmdcIiwgXCJyYXdfaW5wdXRcIiwgXCJyZWR1Y2VcIiwgXCJyZWxvYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmljaHJcIiwgXCJ1bmljb2RlXCIsIFwieHJhbmdlXCIsIFwiRmFsc2VcIiwgXCJUcnVlXCIsIFwiTm9uZVwiXSk7XG4gICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKFwiXigoW3J1YmZdfCh1cil8KGJyKSk/KCd7M318XFxcInszfXxbJ1xcXCJdKSlcIiwgXCJpXCIpO1xuICAgIH1cbiAgICB2YXIga2V5d29yZHMgPSB3b3JkUmVnZXhwKG15S2V5d29yZHMpO1xuICAgIHZhciBidWlsdGlucyA9IHdvcmRSZWdleHAobXlCdWlsdGlucyk7XG5cbiAgICAvLyB0b2tlbml6ZXJzXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCkgJiYgc3RhdGUubGFzdFRva2VuICE9IFwiXFxcXFwiXG4gICAgICBpZiAoc29sKSBzdGF0ZS5pbmRlbnQgPSBzdHJlYW0uaW5kZW50YXRpb24oKVxuICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXNcbiAgICAgIGlmIChzb2wgJiYgdG9wKHN0YXRlKS50eXBlID09IFwicHlcIikge1xuICAgICAgICB2YXIgc2NvcGVPZmZzZXQgPSB0b3Aoc3RhdGUpLm9mZnNldDtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0KVxuICAgICAgICAgICAgcHVzaFB5U2NvcGUoc3RhdGUpO1xuICAgICAgICAgIGVsc2UgaWYgKGxpbmVPZmZzZXQgPCBzY29wZU9mZnNldCAmJiBkZWRlbnQoc3RyZWFtLCBzdGF0ZSkgJiYgc3RyZWFtLnBlZWsoKSAhPSBcIiNcIilcbiAgICAgICAgICAgIHN0YXRlLmVycm9yVG9rZW4gPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzdHlsZSA9IHRva2VuQmFzZUlubmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDAgJiYgZGVkZW50KHN0cmVhbSwgc3RhdGUpKVxuICAgICAgICAgICAgc3R5bGUgKz0gXCIgXCIgKyBFUlJPUkNMQVNTO1xuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRva2VuQmFzZUlubmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuQmFzZUlubmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIEhhbmRsZSBDb21tZW50c1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiMuKi8pKSByZXR1cm4gXCJjb21tZW50XCI7XG5cbiAgICAgIC8vIEhhbmRsZSBOdW1iZXIgTGl0ZXJhbHNcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMC05XFwuXS8sIGZhbHNlKSkge1xuICAgICAgICB2YXIgZmxvYXRMaXRlcmFsID0gZmFsc2U7XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1xcZF9dKlxcLlxcZCsoZVtcXCtcXC1dP1xcZCspPy9pKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bXFxkX10rXFwuXFxkKi8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcLlxcZCsvKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAgIGlmIChmbG9hdExpdGVyYWwpIHtcbiAgICAgICAgICAvLyBGbG9hdCBsaXRlcmFscyBtYXkgYmUgXCJpbWFnaW5hcnlcIlxuICAgICAgICAgIHN0cmVhbS5lYXQoL0ovaSk7XG4gICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW50ZWdlcnNcbiAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTtcbiAgICAgICAgLy8gSGV4XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14weFswLTlhLWZfXSsvaSkpIGludExpdGVyYWwgPSB0cnVlO1xuICAgICAgICAvLyBCaW5hcnlcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBiWzAxX10rL2kpKSBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgLy8gT2N0YWxcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBvWzAtN19dKy9pKSkgaW50TGl0ZXJhbCA9IHRydWU7XG4gICAgICAgIC8vIERlY2ltYWxcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsxLTldW1xcZF9dKihlW1xcK1xcLV0/W1xcZF9dKyk/LykpIHtcbiAgICAgICAgICAvLyBEZWNpbWFsIGxpdGVyYWxzIG1heSBiZSBcImltYWdpbmFyeVwiXG4gICAgICAgICAgc3RyZWFtLmVhdCgvSi9pKTtcbiAgICAgICAgICAvLyBUT0RPIC0gQ2FuIHlvdSBoYXZlIGltYWdpbmFyeSBsb25ncz9cbiAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBaZXJvIGJ5IGl0c2VsZiB3aXRoIG5vIG90aGVyIHBpZWNlIG9mIG51bWJlci5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjAoPyFbXFxkeF0pL2kpKSBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgaWYgKGludExpdGVyYWwpIHtcbiAgICAgICAgICAvLyBJbnRlZ2VyIGxpdGVyYWxzIG1heSBiZSBcImxvbmdcIlxuICAgICAgICAgIHN0cmVhbS5lYXQoL0wvaSk7XG4gICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIFN0cmluZ3NcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7XG4gICAgICAgIHZhciBpc0ZtdFN0cmluZyA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmJykgIT09IC0xO1xuICAgICAgICBpZiAoIWlzRm10U3RyaW5nKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZ0ZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgc3RhdGUudG9rZW5pemUpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGZvcm1hdFN0cmluZ0ZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgc3RhdGUudG9rZW5pemUpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wZXJhdG9ycy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcGVyYXRvcnNbaV0pKSByZXR1cm4gXCJvcGVyYXRvclwiXG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVycykpIHJldHVybiBcInB1bmN0dWF0aW9uXCI7XG5cbiAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSlcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcblxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykgfHwgc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcnMpKVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goYnVpbHRpbnMpKVxuICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oc2VsZnxjbHMpXFxiLykpXG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcblxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHtcbiAgICAgICAgaWYgKHN0YXRlLmxhc3RUb2tlbiA9PSBcImRlZlwiIHx8IHN0YXRlLmxhc3RUb2tlbiA9PSBcImNsYXNzXCIpXG4gICAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXNcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRTdHJpbmdGYWN0b3J5KGRlbGltaXRlciwgdG9rZW5PdXRlcikge1xuICAgICAgd2hpbGUgKFwicnViZlwiLmluZGV4T2YoZGVsaW1pdGVyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSA+PSAwKVxuICAgICAgICBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXIuc3Vic3RyKDEpO1xuXG4gICAgICB2YXIgc2luZ2xlbGluZSA9IGRlbGltaXRlci5sZW5ndGggPT0gMTtcbiAgICAgIHZhciBPVVRDTEFTUyA9IFwic3RyaW5nXCI7XG5cbiAgICAgIGZ1bmN0aW9uIHRva2VuTmVzdGVkRXhwcihkZXB0aCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgIHZhciBpbm5lciA9IHRva2VuQmFzZUlubmVyKHN0cmVhbSwgc3RhdGUpXG4gICAgICAgICAgaWYgKGlubmVyID09IFwicHVuY3R1YXRpb25cIikge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk5lc3RlZEV4cHIoZGVwdGggKyAxKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpID09IFwifVwiKSB7XG4gICAgICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRFeHByKGRlcHRoIC0gMSlcbiAgICAgICAgICAgICAgZWxzZSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbm5lclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJ1wiXFx7XFx9XFxcXF0vKTtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXFxcIikpIHtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpXG4gICAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuT3V0ZXI7XG4gICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJ3t7JykpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSB7eyBpbiBmLXN0clxuICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCd7JywgZmFsc2UpKSB7XG4gICAgICAgICAgICAvLyBzd2l0Y2ggdG8gbmVzdGVkIG1vZGVcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRFeHByKDApXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSkgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgnfX0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIC8vIHNpbmdsZSB9IGluIGYtc3RyaW5nIGlzIGFuIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbmdsZWxpbmUpIHtcbiAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKVxuICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgIH1cbiAgICAgIHRva2VuU3RyaW5nLmlzU3RyaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblN0cmluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyLCB0b2tlbk91dGVyKSB7XG4gICAgICB3aGlsZSAoXCJydWJmXCIuaW5kZXhPZihkZWxpbWl0ZXIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpID49IDApXG4gICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7XG5cbiAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxO1xuICAgICAgdmFyIE9VVENMQVNTID0gXCJzdHJpbmdcIjtcblxuICAgICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nXCJcXFxcXS8pO1xuICAgICAgICAgIGlmIChzdHJlYW0uZWF0KFwiXFxcXFwiKSkge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lICYmIHN0cmVhbS5lb2woKSlcbiAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5PdXRlcjtcbiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbmdsZWxpbmUpIHtcbiAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKVxuICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgIH1cbiAgICAgIHRva2VuU3RyaW5nLmlzU3RyaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblN0cmluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoUHlTY29wZShzdGF0ZSkge1xuICAgICAgd2hpbGUgKHRvcChzdGF0ZSkudHlwZSAhPSBcInB5XCIpIHN0YXRlLnNjb3Blcy5wb3AoKVxuICAgICAgc3RhdGUuc2NvcGVzLnB1c2goe29mZnNldDogdG9wKHN0YXRlKS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJweVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiBudWxsfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoQnJhY2tldFNjb3BlKHN0cmVhbSwgc3RhdGUsIHR5cGUpIHtcbiAgICAgIHZhciBhbGlnbiA9IHN0cmVhbS5tYXRjaCgvXihbXFxzXFxbXFx7XFwoXXwjLiopKiQvLCBmYWxzZSkgPyBudWxsIDogc3RyZWFtLmNvbHVtbigpICsgMVxuICAgICAgc3RhdGUuc2NvcGVzLnB1c2goe29mZnNldDogc3RhdGUuaW5kZW50ICsgaGFuZ2luZ0luZGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiBhbGlnbn0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVkZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBpbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxICYmIHRvcChzdGF0ZSkub2Zmc2V0ID4gaW5kZW50ZWQpIHtcbiAgICAgICAgaWYgKHRvcChzdGF0ZSkudHlwZSAhPSBcInB5XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9wKHN0YXRlKS5vZmZzZXQgIT0gaW5kZW50ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5iZWdpbm5pbmdPZkxpbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgLy8gSGFuZGxlIGRlY29yYXRvcnNcbiAgICAgIGlmIChzdGF0ZS5iZWdpbm5pbmdPZkxpbmUgJiYgY3VycmVudCA9PSBcIkBcIilcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChpZGVudGlmaWVycywgZmFsc2UpID8gXCJtZXRhXCIgOiBweTMgPyBcIm9wZXJhdG9yXCIgOiBFUlJPUkNMQVNTO1xuXG4gICAgICBpZiAoL1xcUy8udGVzdChjdXJyZW50KSkgc3RhdGUuYmVnaW5uaW5nT2ZMaW5lID0gZmFsc2U7XG5cbiAgICAgIGlmICgoc3R5bGUgPT0gXCJ2YXJpYWJsZVwiIHx8IHN0eWxlID09IFwiYnVpbHRpblwiKVxuICAgICAgICAgICYmIHN0YXRlLmxhc3RUb2tlbiA9PSBcIm1ldGFcIilcbiAgICAgICAgc3R5bGUgPSBcIm1ldGFcIjtcblxuICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuXG4gICAgICBpZiAoY3VycmVudCA9PSBcInBhc3NcIiB8fCBjdXJyZW50ID09IFwicmV0dXJuXCIpXG4gICAgICAgIHN0YXRlLmRlZGVudCArPSAxO1xuXG4gICAgICBpZiAoY3VycmVudCA9PSBcImxhbWJkYVwiKSBzdGF0ZS5sYW1iZGEgPSB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnQgPT0gXCI6XCIgJiYgIXN0YXRlLmxhbWJkYSAmJiB0b3Aoc3RhdGUpLnR5cGUgPT0gXCJweVwiKVxuICAgICAgICBwdXNoUHlTY29wZShzdGF0ZSk7XG5cbiAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA9PSAxICYmICEvc3RyaW5nfGNvbW1lbnQvLnRlc3Qoc3R5bGUpKSB7XG4gICAgICAgIHZhciBkZWxpbWl0ZXJfaW5kZXggPSBcIlsoe1wiLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT0gLTEpXG4gICAgICAgICAgcHVzaEJyYWNrZXRTY29wZShzdHJlYW0sIHN0YXRlLCBcIl0pfVwiLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTtcblxuICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSBcIl0pfVwiLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT0gLTEpIHtcbiAgICAgICAgICBpZiAodG9wKHN0YXRlKS50eXBlID09IGN1cnJlbnQpIHN0YXRlLmluZGVudCA9IHN0YXRlLnNjb3Blcy5wb3AoKS5vZmZzZXQgLSBoYW5naW5nSW5kZW50XG4gICAgICAgICAgZWxzZSByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHRvcChzdGF0ZSkudHlwZSA9PSBcInB5XCIpIHtcbiAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgICAgIHN0YXRlLmRlZGVudCAtPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgdmFyIGV4dGVybmFsID0ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgICAgc2NvcGVzOiBbe29mZnNldDogYmFzZWNvbHVtbiB8fCAwLCB0eXBlOiBcInB5XCIsIGFsaWduOiBudWxsfV0sXG4gICAgICAgICAgaW5kZW50OiBiYXNlY29sdW1uIHx8IDAsXG4gICAgICAgICAgbGFzdFRva2VuOiBudWxsLFxuICAgICAgICAgIGxhbWJkYTogZmFsc2UsXG4gICAgICAgICAgZGVkZW50OiAwXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgYWRkRXJyID0gc3RhdGUuZXJyb3JUb2tlbjtcbiAgICAgICAgaWYgKGFkZEVycikgc3RhdGUuZXJyb3JUb2tlbiA9IGZhbHNlO1xuICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIilcbiAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSAoc3R5bGUgPT0gXCJrZXl3b3JkXCIgfHwgc3R5bGUgPT0gXCJwdW5jdHVhdGlvblwiKSA/IHN0cmVhbS5jdXJyZW50KCkgOiBzdHlsZTtcbiAgICAgICAgaWYgKHN0eWxlID09IFwicHVuY3R1YXRpb25cIikgc3R5bGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RhdGUubGFtYmRhKVxuICAgICAgICAgIHN0YXRlLmxhbWJkYSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYWRkRXJyID8gc3R5bGUgKyBcIiBcIiArIEVSUk9SQ0xBU1MgOiBzdHlsZTtcbiAgICAgIH0sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZS5pc1N0cmluZyA/IENvZGVNaXJyb3IuUGFzcyA6IDA7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdG9wKHN0YXRlKSwgY2xvc2luZyA9IHNjb3BlLnR5cGUgPT0gdGV4dEFmdGVyLmNoYXJBdCgwKVxuICAgICAgICBpZiAoc2NvcGUuYWxpZ24gIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gc2NvcGUuYWxpZ24gLSAoY2xvc2luZyA/IDEgOiAwKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLm9mZnNldCAtIChjbG9zaW5nID8gaGFuZ2luZ0luZGVudCA6IDApXG4gICAgICB9LFxuXG4gICAgICBlbGVjdHJpY0lucHV0OiAvXlxccypbXFx9XFxdXFwpXSQvLFxuICAgICAgY2xvc2VCcmFja2V0czoge3RyaXBsZXM6IFwiJ1xcXCJcIn0sXG4gICAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgICBmb2xkOiBcImluZGVudFwiXG4gICAgfTtcbiAgICByZXR1cm4gZXh0ZXJuYWw7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1weXRob25cIiwgXCJweXRob25cIik7XG5cbiAgdmFyIHdvcmRzID0gZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIuc3BsaXQoXCIgXCIpOyB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jeXRob25cIiwge1xuICAgIG5hbWU6IFwicHl0aG9uXCIsXG4gICAgZXh0cmFfa2V5d29yZHM6IHdvcmRzKFwiYnkgY2RlZiBjaW1wb3J0IGNwZGVmIGN0eXBlZGVmIGVudW0gZXhjZXB0IFwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcImV4dGVybiBnaWwgaW5jbHVkZSBub2dpbCBwcm9wZXJ0eSBwdWJsaWMgXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhZG9ubHkgc3RydWN0IHVuaW9uIERFRiBJRiBFTElGIEVMU0VcIilcbiAgfSk7XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQU5BO0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4QkE7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkNBO0FBQ0E7QUFDQTtBQXlDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBRUE7QUFHQTtBQUdBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQTFFQTtBQUNBO0FBQ0E7QUE0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBSUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBRkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBdkJBO0FBMEJBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUEvQkE7QUFxQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBeENBO0FBMENBO0FBeFZBO0FBMlZBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBcFlBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/python/python.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/ruby/ruby.js": -/*!****************************************************!*\ - !*** ../node_modules/codemirror/mode/ruby/ruby.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"ruby\", function (config) {\n function wordObj(words) {\n var o = {};\n\n for (var i = 0, e = words.length; i < e; ++i) {\n o[words[i]] = true;\n }\n\n return o;\n }\n\n var keywords = wordObj([\"alias\", \"and\", \"BEGIN\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"defined?\", \"do\", \"else\", \"elsif\", \"END\", \"end\", \"ensure\", \"false\", \"for\", \"if\", \"in\", \"module\", \"next\", \"not\", \"or\", \"redo\", \"rescue\", \"retry\", \"return\", \"self\", \"super\", \"then\", \"true\", \"undef\", \"unless\", \"until\", \"when\", \"while\", \"yield\", \"nil\", \"raise\", \"throw\", \"catch\", \"fail\", \"loop\", \"callcc\", \"caller\", \"lambda\", \"proc\", \"public\", \"protected\", \"private\", \"require\", \"load\", \"require_relative\", \"extend\", \"autoload\", \"__END__\", \"__FILE__\", \"__LINE__\", \"__dir__\"]);\n var indentWords = wordObj([\"def\", \"class\", \"case\", \"for\", \"while\", \"until\", \"module\", \"then\", \"catch\", \"loop\", \"proc\", \"begin\"]);\n var dedentWords = wordObj([\"end\", \"until\"]);\n var opening = {\n \"[\": \"]\",\n \"{\": \"}\",\n \"(\": \")\"\n };\n var closing = {\n \"]\": \"[\",\n \"}\": \"{\",\n \")\": \"(\"\n };\n var curPunc;\n\n function chain(newtok, stream, state) {\n state.tokenize.push(newtok);\n return newtok(stream, state);\n }\n\n function tokenBase(stream, state) {\n if (stream.sol() && stream.match(\"=begin\") && stream.eol()) {\n state.tokenize.push(readBlockComment);\n return \"comment\";\n }\n\n if (stream.eatSpace()) return null;\n var ch = stream.next(),\n m;\n\n if (ch == \"`\" || ch == \"'\" || ch == '\"') {\n return chain(readQuoted(ch, \"string\", ch == '\"' || ch == \"`\"), stream, state);\n } else if (ch == \"/\") {\n if (regexpAhead(stream)) return chain(readQuoted(ch, \"string-2\", true), stream, state);else return \"operator\";\n } else if (ch == \"%\") {\n var style = \"string\",\n embed = true;\n if (stream.eat(\"s\")) style = \"atom\";else if (stream.eat(/[WQ]/)) style = \"string\";else if (stream.eat(/[r]/)) style = \"string-2\";else if (stream.eat(/[wxq]/)) {\n style = \"string\";\n embed = false;\n }\n var delim = stream.eat(/[^\\w\\s=]/);\n if (!delim) return \"operator\";\n if (opening.propertyIsEnumerable(delim)) delim = opening[delim];\n return chain(readQuoted(delim, style, embed, true), stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return \"comment\";\n } else if (ch == \"<\" && (m = stream.match(/^<([-~])[\\`\\\"\\']?([a-zA-Z_?]\\w*)[\\`\\\"\\']?(?:;|$)/))) {\n return chain(readHereDoc(m[2], m[1]), stream, state);\n } else if (ch == \"0\") {\n if (stream.eat(\"x\")) stream.eatWhile(/[\\da-fA-F]/);else if (stream.eat(\"b\")) stream.eatWhile(/[01]/);else stream.eatWhile(/[0-7]/);\n return \"number\";\n } else if (/\\d/.test(ch)) {\n stream.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+\\-]?[\\d_]+)?/);\n return \"number\";\n } else if (ch == \"?\") {\n while (stream.match(/^\\\\[CM]-/)) {}\n\n if (stream.eat(\"\\\\\")) stream.eatWhile(/\\w/);else stream.next();\n return \"string\";\n } else if (ch == \":\") {\n if (stream.eat(\"'\")) return chain(readQuoted(\"'\", \"atom\", false), stream, state);\n if (stream.eat('\"')) return chain(readQuoted('\"', \"atom\", true), stream, state); // :> :>> :< :<< are valid symbols\n\n if (stream.eat(/[\\<\\>]/)) {\n stream.eat(/[\\<\\>]/);\n return \"atom\";\n } // :+ :- :/ :* :| :& :! are valid symbols\n\n\n if (stream.eat(/[\\+\\-\\*\\/\\&\\|\\:\\!]/)) {\n return \"atom\";\n } // Symbols can't start by a digit\n\n\n if (stream.eat(/[a-zA-Z$@_\\xa1-\\uffff]/)) {\n stream.eatWhile(/[\\w$\\xa1-\\uffff]/); // Only one ? ! = is allowed and only as the last character\n\n stream.eat(/[\\?\\!\\=]/);\n return \"atom\";\n }\n\n return \"operator\";\n } else if (ch == \"@\" && stream.match(/^@?[a-zA-Z_\\xa1-\\uffff]/)) {\n stream.eat(\"@\");\n stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n return \"variable-2\";\n } else if (ch == \"$\") {\n if (stream.eat(/[a-zA-Z_]/)) {\n stream.eatWhile(/[\\w]/);\n } else if (stream.eat(/\\d/)) {\n stream.eat(/\\d/);\n } else {\n stream.next(); // Must be a special global like $: or $!\n }\n\n return \"variable-3\";\n } else if (/[a-zA-Z_\\xa1-\\uffff]/.test(ch)) {\n stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n stream.eat(/[\\?\\!]/);\n if (stream.eat(\":\")) return \"atom\";\n return \"ident\";\n } else if (ch == \"|\" && (state.varList || state.lastTok == \"{\" || state.lastTok == \"do\")) {\n curPunc = \"|\";\n return null;\n } else if (/[\\(\\)\\[\\]{}\\\\;]/.test(ch)) {\n curPunc = ch;\n return null;\n } else if (ch == \"-\" && stream.eat(\">\")) {\n return \"arrow\";\n } else if (/[=+\\-\\/*:\\.^%<>~|]/.test(ch)) {\n var more = stream.eatWhile(/[=+\\-\\/*:\\.^%<>~|]/);\n if (ch == \".\" && !more) curPunc = \".\";\n return \"operator\";\n } else {\n return null;\n }\n }\n\n function regexpAhead(stream) {\n var start = stream.pos,\n depth = 0,\n next,\n found = false,\n escaped = false;\n\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (\"[{(\".indexOf(next) > -1) {\n depth++;\n } else if (\"]})\".indexOf(next) > -1) {\n depth--;\n if (depth < 0) break;\n } else if (next == \"/\" && depth == 0) {\n found = true;\n break;\n }\n\n escaped = next == \"\\\\\";\n } else {\n escaped = false;\n }\n }\n\n stream.backUp(stream.pos - start);\n return found;\n }\n\n function tokenBaseUntilBrace(depth) {\n if (!depth) depth = 1;\n return function (stream, state) {\n if (stream.peek() == \"}\") {\n if (depth == 1) {\n state.tokenize.pop();\n return state.tokenize[state.tokenize.length - 1](stream, state);\n } else {\n state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1);\n }\n } else if (stream.peek() == \"{\") {\n state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1);\n }\n\n return tokenBase(stream, state);\n };\n }\n\n function tokenBaseOnce() {\n var alreadyCalled = false;\n return function (stream, state) {\n if (alreadyCalled) {\n state.tokenize.pop();\n return state.tokenize[state.tokenize.length - 1](stream, state);\n }\n\n alreadyCalled = true;\n return tokenBase(stream, state);\n };\n }\n\n function readQuoted(quote, style, embed, unescaped) {\n return function (stream, state) {\n var escaped = false,\n ch;\n\n if (state.context.type === 'read-quoted-paused') {\n state.context = state.context.prev;\n stream.eat(\"}\");\n }\n\n while ((ch = stream.next()) != null) {\n if (ch == quote && (unescaped || !escaped)) {\n state.tokenize.pop();\n break;\n }\n\n if (embed && ch == \"#\" && !escaped) {\n if (stream.eat(\"{\")) {\n if (quote == \"}\") {\n state.context = {\n prev: state.context,\n type: 'read-quoted-paused'\n };\n }\n\n state.tokenize.push(tokenBaseUntilBrace());\n break;\n } else if (/[@\\$]/.test(stream.peek())) {\n state.tokenize.push(tokenBaseOnce());\n break;\n }\n }\n\n escaped = !escaped && ch == \"\\\\\";\n }\n\n return style;\n };\n }\n\n function readHereDoc(phrase, mayIndent) {\n return function (stream, state) {\n if (mayIndent) stream.eatSpace();\n if (stream.match(phrase)) state.tokenize.pop();else stream.skipToEnd();\n return \"string\";\n };\n }\n\n function readBlockComment(stream, state) {\n if (stream.sol() && stream.match(\"=end\") && stream.eol()) state.tokenize.pop();\n stream.skipToEnd();\n return \"comment\";\n }\n\n return {\n startState: function startState() {\n return {\n tokenize: [tokenBase],\n indented: 0,\n context: {\n type: \"top\",\n indented: -config.indentUnit\n },\n continuedLine: false,\n lastTok: null,\n varList: false\n };\n },\n token: function token(stream, state) {\n curPunc = null;\n if (stream.sol()) state.indented = stream.indentation();\n var style = state.tokenize[state.tokenize.length - 1](stream, state),\n kwtype;\n var thisTok = curPunc;\n\n if (style == \"ident\") {\n var word = stream.current();\n style = state.lastTok == \".\" ? \"property\" : keywords.propertyIsEnumerable(stream.current()) ? \"keyword\" : /^[A-Z]/.test(word) ? \"tag\" : state.lastTok == \"def\" || state.lastTok == \"class\" || state.varList ? \"def\" : \"variable\";\n\n if (style == \"keyword\") {\n thisTok = word;\n if (indentWords.propertyIsEnumerable(word)) kwtype = \"indent\";else if (dedentWords.propertyIsEnumerable(word)) kwtype = \"dedent\";else if ((word == \"if\" || word == \"unless\") && stream.column() == stream.indentation()) kwtype = \"indent\";else if (word == \"do\" && state.context.indented < state.indented) kwtype = \"indent\";\n }\n }\n\n if (curPunc || style && style != \"comment\") state.lastTok = thisTok;\n if (curPunc == \"|\") state.varList = !state.varList;\n if (kwtype == \"indent\" || /[\\(\\[\\{]/.test(curPunc)) state.context = {\n prev: state.context,\n type: curPunc || style,\n indented: state.indented\n };else if ((kwtype == \"dedent\" || /[\\)\\]\\}]/.test(curPunc)) && state.context.prev) state.context = state.context.prev;\n if (stream.eol()) state.continuedLine = curPunc == \"\\\\\" || style == \"operator\";\n return style;\n },\n indent: function indent(state, textAfter) {\n if (state.tokenize[state.tokenize.length - 1] != tokenBase) return CodeMirror.Pass;\n var firstChar = textAfter && textAfter.charAt(0);\n var ct = state.context;\n var closed = ct.type == closing[firstChar] || ct.type == \"keyword\" && /^(?:end|until|else|elsif|when|rescue)\\b/.test(textAfter);\n return ct.indented + (closed ? 0 : config.indentUnit) + (state.continuedLine ? config.indentUnit : 0);\n },\n electricInput: /^\\s*(?:end|rescue|elsif|else|\\})$/,\n lineComment: \"#\",\n fold: \"indent\"\n };\n });\n CodeMirror.defineMIME(\"text/x-ruby\", \"ruby\");\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9ydWJ5L3J1YnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9ydWJ5L3J1YnkuanM/ZjQ0NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInJ1YnlcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gIGZ1bmN0aW9uIHdvcmRPYmood29yZHMpIHtcbiAgICB2YXIgbyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBlID0gd29yZHMubGVuZ3RoOyBpIDwgZTsgKytpKSBvW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG87XG4gIH1cbiAgdmFyIGtleXdvcmRzID0gd29yZE9iaihbXG4gICAgXCJhbGlhc1wiLCBcImFuZFwiLCBcIkJFR0lOXCIsIFwiYmVnaW5cIiwgXCJicmVha1wiLCBcImNhc2VcIiwgXCJjbGFzc1wiLCBcImRlZlwiLCBcImRlZmluZWQ/XCIsIFwiZG9cIiwgXCJlbHNlXCIsXG4gICAgXCJlbHNpZlwiLCBcIkVORFwiLCBcImVuZFwiLCBcImVuc3VyZVwiLCBcImZhbHNlXCIsIFwiZm9yXCIsIFwiaWZcIiwgXCJpblwiLCBcIm1vZHVsZVwiLCBcIm5leHRcIiwgXCJub3RcIiwgXCJvclwiLFxuICAgIFwicmVkb1wiLCBcInJlc2N1ZVwiLCBcInJldHJ5XCIsIFwicmV0dXJuXCIsIFwic2VsZlwiLCBcInN1cGVyXCIsIFwidGhlblwiLCBcInRydWVcIiwgXCJ1bmRlZlwiLCBcInVubGVzc1wiLFxuICAgIFwidW50aWxcIiwgXCJ3aGVuXCIsIFwid2hpbGVcIiwgXCJ5aWVsZFwiLCBcIm5pbFwiLCBcInJhaXNlXCIsIFwidGhyb3dcIiwgXCJjYXRjaFwiLCBcImZhaWxcIiwgXCJsb29wXCIsIFwiY2FsbGNjXCIsXG4gICAgXCJjYWxsZXJcIiwgXCJsYW1iZGFcIiwgXCJwcm9jXCIsIFwicHVibGljXCIsIFwicHJvdGVjdGVkXCIsIFwicHJpdmF0ZVwiLCBcInJlcXVpcmVcIiwgXCJsb2FkXCIsXG4gICAgXCJyZXF1aXJlX3JlbGF0aXZlXCIsIFwiZXh0ZW5kXCIsIFwiYXV0b2xvYWRcIiwgXCJfX0VORF9fXCIsIFwiX19GSUxFX19cIiwgXCJfX0xJTkVfX1wiLCBcIl9fZGlyX19cIlxuICBdKTtcbiAgdmFyIGluZGVudFdvcmRzID0gd29yZE9iaihbXCJkZWZcIiwgXCJjbGFzc1wiLCBcImNhc2VcIiwgXCJmb3JcIiwgXCJ3aGlsZVwiLCBcInVudGlsXCIsIFwibW9kdWxlXCIsIFwidGhlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhdGNoXCIsIFwibG9vcFwiLCBcInByb2NcIiwgXCJiZWdpblwiXSk7XG4gIHZhciBkZWRlbnRXb3JkcyA9IHdvcmRPYmooW1wiZW5kXCIsIFwidW50aWxcIl0pO1xuICB2YXIgb3BlbmluZyA9IHtcIltcIjogXCJdXCIsIFwie1wiOiBcIn1cIiwgXCIoXCI6IFwiKVwifTtcbiAgdmFyIGNsb3NpbmcgPSB7XCJdXCI6IFwiW1wiLCBcIn1cIjogXCJ7XCIsIFwiKVwiOiBcIihcIn07XG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHN0YXRlLnRva2VuaXplLnB1c2gobmV3dG9rKTtcbiAgICByZXR1cm4gbmV3dG9rKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChcIj1iZWdpblwiKSAmJiBzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplLnB1c2gocmVhZEJsb2NrQ29tbWVudCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKSwgbTtcbiAgICBpZiAoY2ggPT0gXCJgXCIgfHwgY2ggPT0gXCInXCIgfHwgY2ggPT0gJ1wiJykge1xuICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsIFwic3RyaW5nXCIsIGNoID09ICdcIicgfHwgY2ggPT0gXCJgXCIpLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAocmVnZXhwQWhlYWQoc3RyZWFtKSlcbiAgICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsIFwic3RyaW5nLTJcIiwgdHJ1ZSksIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIlXCIpIHtcbiAgICAgIHZhciBzdHlsZSA9IFwic3RyaW5nXCIsIGVtYmVkID0gdHJ1ZTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwic1wiKSkgc3R5bGUgPSBcImF0b21cIjtcbiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkgc3R5bGUgPSBcInN0cmluZ1wiO1xuICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3JdLykpIHN0eWxlID0gXCJzdHJpbmctMlwiO1xuICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3d4cV0vKSkgeyBzdHlsZSA9IFwic3RyaW5nXCI7IGVtYmVkID0gZmFsc2U7IH1cbiAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5lYXQoL1teXFx3XFxzPV0vKTtcbiAgICAgIGlmICghZGVsaW0pIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICBpZiAob3BlbmluZy5wcm9wZXJ0eUlzRW51bWVyYWJsZShkZWxpbSkpIGRlbGltID0gb3BlbmluZ1tkZWxpbV07XG4gICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChkZWxpbSwgc3R5bGUsIGVtYmVkLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI8XCIgJiYgKG0gPSBzdHJlYW0ubWF0Y2goL148KFstfl0pW1xcYFxcXCJcXCddPyhbYS16QS1aXz9dXFx3KilbXFxgXFxcIlxcJ10/KD86O3wkKS8pKSkge1xuICAgICAgcmV0dXJuIGNoYWluKHJlYWRIZXJlRG9jKG1bMl0sIG1bMV0pLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcInhcIikpIHN0cmVhbS5lYXRXaGlsZSgvW1xcZGEtZkEtRl0vKTtcbiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoXCJiXCIpKSBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTtcbiAgICAgIGVsc2Ugc3RyZWFtLmVhdFdoaWxlKC9bMC03XS8pO1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfSBlbHNlIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW1xcZF9dKig/OlxcLltcXGRfXSspPyg/OltlRV1bK1xcLV0/W1xcZF9dKyk/Lyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiP1wiKSB7XG4gICAgICB3aGlsZSAoc3RyZWFtLm1hdGNoKC9eXFxcXFtDTV0tLykpIHt9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXFxcIikpIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICBlbHNlIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiOlwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIidcIikpIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKFwiJ1wiLCBcImF0b21cIiwgZmFsc2UpLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCdcIicpKSByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgnXCInLCBcImF0b21cIiwgdHJ1ZSksIHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICAvLyA6PiA6Pj4gOjwgOjw8IGFyZSB2YWxpZCBzeW1ib2xzXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW1xcPFxcPl0vKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9bXFw8XFw+XS8pO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIDorIDotIDovIDoqIDp8IDomIDohIGFyZSB2YWxpZCBzeW1ib2xzXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW1xcK1xcLVxcKlxcL1xcJlxcfFxcOlxcIV0vKSkge1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFN5bWJvbHMgY2FuJ3Qgc3RhcnQgYnkgYSBkaWdpdFxuICAgICAgaWYgKHN0cmVhbS5lYXQoL1thLXpBLVokQF9cXHhhMS1cXHVmZmZmXS8pKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdyRcXHhhMS1cXHVmZmZmXS8pO1xuICAgICAgICAvLyBPbmx5IG9uZSA/ICEgPSBpcyBhbGxvd2VkIGFuZCBvbmx5IGFzIHRoZSBsYXN0IGNoYXJhY3RlclxuICAgICAgICBzdHJlYW0uZWF0KC9bXFw/XFwhXFw9XS8pO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJAXCIgJiYgc3RyZWFtLm1hdGNoKC9eQD9bYS16QS1aX1xceGExLVxcdWZmZmZdLykpIHtcbiAgICAgIHN0cmVhbS5lYXQoXCJAXCIpO1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFx4YTEtXFx1ZmZmZl0vKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW2EtekEtWl9dLykpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XS8pO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9cXGQvKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9cXGQvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIE11c3QgYmUgYSBzcGVjaWFsIGdsb2JhbCBsaWtlICQ6IG9yICQhXG4gICAgICB9XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgfSBlbHNlIGlmICgvW2EtekEtWl9cXHhhMS1cXHVmZmZmXS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xceGExLVxcdWZmZmZdLyk7XG4gICAgICBzdHJlYW0uZWF0KC9bXFw/XFwhXS8pO1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCI6XCIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgICByZXR1cm4gXCJpZGVudFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJ8XCIgJiYgKHN0YXRlLnZhckxpc3QgfHwgc3RhdGUubGFzdFRvayA9PSBcIntcIiB8fCBzdGF0ZS5sYXN0VG9rID09IFwiZG9cIikpIHtcbiAgICAgIGN1clB1bmMgPSBcInxcIjtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoL1tcXChcXClcXFtcXF17fVxcXFw7XS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCItXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIHJldHVybiBcImFycm93XCI7XG4gICAgfSBlbHNlIGlmICgvWz0rXFwtXFwvKjpcXC5eJTw+fnxdLy50ZXN0KGNoKSkge1xuICAgICAgdmFyIG1vcmUgPSBzdHJlYW0uZWF0V2hpbGUoL1s9K1xcLVxcLyo6XFwuXiU8Pn58XS8pO1xuICAgICAgaWYgKGNoID09IFwiLlwiICYmICFtb3JlKSBjdXJQdW5jID0gXCIuXCI7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdleHBBaGVhZChzdHJlYW0pIHtcbiAgICB2YXIgc3RhcnQgPSBzdHJlYW0ucG9zLCBkZXB0aCA9IDAsIG5leHQsIGZvdW5kID0gZmFsc2UsIGVzY2FwZWQgPSBmYWxzZVxuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAoXCJbeyhcIi5pbmRleE9mKG5leHQpID4gLTEpIHtcbiAgICAgICAgICBkZXB0aCsrXG4gICAgICAgIH0gZWxzZSBpZiAoXCJdfSlcIi5pbmRleE9mKG5leHQpID4gLTEpIHtcbiAgICAgICAgICBkZXB0aC0tXG4gICAgICAgICAgaWYgKGRlcHRoIDwgMCkgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IFwiL1wiICYmIGRlcHRoID09IDApIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSBuZXh0ID09IFwiXFxcXFwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlc2NhcGVkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtLmJhY2tVcChzdHJlYW0ucG9zIC0gc3RhcnQpXG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkgZGVwdGggPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIn1cIikge1xuICAgICAgICBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0gPSB0b2tlbkJhc2VVbnRpbEJyYWNlKGRlcHRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIntcIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGggLSAxXSA9IHRva2VuQmFzZVVudGlsQnJhY2UoZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB0b2tlbkJhc2VPbmNlKCkge1xuICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcmVhZFF1b3RlZChxdW90ZSwgc3R5bGUsIGVtYmVkLCB1bmVzY2FwZWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG5cbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0LnR5cGUgPT09ICdyZWFkLXF1b3RlZC1wYXVzZWQnKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgICAgIHN0cmVhbS5lYXQoXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgKHVuZXNjYXBlZCB8fCAhZXNjYXBlZCkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW1iZWQgJiYgY2ggPT0gXCIjXCIgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIntcIikpIHtcbiAgICAgICAgICAgIGlmIChxdW90ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6ICdyZWFkLXF1b3RlZC1wYXVzZWQnfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5CYXNlVW50aWxCcmFjZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL1tAXFwkXS8udGVzdChzdHJlYW0ucGVlaygpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VPbmNlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRIZXJlRG9jKHBocmFzZSwgbWF5SW5kZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChtYXlJbmRlbnQpIHN0cmVhbS5lYXRTcGFjZSgpXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHBocmFzZSkpIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgZWxzZSBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRCbG9ja0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKFwiPWVuZFwiKSAmJiBzdHJlYW0uZW9sKCkpXG4gICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IFt0b2tlbkJhc2VdLFxuICAgICAgICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgICAgICAgY29udGV4dDoge3R5cGU6IFwidG9wXCIsIGluZGVudGVkOiAtY29uZmlnLmluZGVudFVuaXR9LFxuICAgICAgICAgICAgICBjb250aW51ZWRMaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGFzdFRvazogbnVsbCxcbiAgICAgICAgICAgICAgdmFyTGlzdDogZmFsc2V9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpLCBrd3R5cGU7XG4gICAgICB2YXIgdGhpc1RvayA9IGN1clB1bmM7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJpZGVudFwiKSB7XG4gICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgc3R5bGUgPSBzdGF0ZS5sYXN0VG9rID09IFwiLlwiID8gXCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/IFwia2V5d29yZFwiXG4gICAgICAgICAgOiAvXltBLVpdLy50ZXN0KHdvcmQpID8gXCJ0YWdcIlxuICAgICAgICAgIDogKHN0YXRlLmxhc3RUb2sgPT0gXCJkZWZcIiB8fCBzdGF0ZS5sYXN0VG9rID09IFwiY2xhc3NcIiB8fCBzdGF0ZS52YXJMaXN0KSA/IFwiZGVmXCJcbiAgICAgICAgICA6IFwidmFyaWFibGVcIjtcbiAgICAgICAgaWYgKHN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICAgICAgdGhpc1RvayA9IHdvcmQ7XG4gICAgICAgICAgaWYgKGluZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSBcImluZGVudFwiO1xuICAgICAgICAgIGVsc2UgaWYgKGRlZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSBcImRlZGVudFwiO1xuICAgICAgICAgIGVsc2UgaWYgKCh3b3JkID09IFwiaWZcIiB8fCB3b3JkID09IFwidW5sZXNzXCIpICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSlcbiAgICAgICAgICAgIGt3dHlwZSA9IFwiaW5kZW50XCI7XG4gICAgICAgICAgZWxzZSBpZiAod29yZCA9PSBcImRvXCIgJiYgc3RhdGUuY29udGV4dC5pbmRlbnRlZCA8IHN0YXRlLmluZGVudGVkKVxuICAgICAgICAgICAga3d0eXBlID0gXCJpbmRlbnRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1clB1bmMgfHwgKHN0eWxlICYmIHN0eWxlICE9IFwiY29tbWVudFwiKSkgc3RhdGUubGFzdFRvayA9IHRoaXNUb2s7XG4gICAgICBpZiAoY3VyUHVuYyA9PSBcInxcIikgc3RhdGUudmFyTGlzdCA9ICFzdGF0ZS52YXJMaXN0O1xuXG4gICAgICBpZiAoa3d0eXBlID09IFwiaW5kZW50XCIgfHwgL1tcXChcXFtcXHtdLy50ZXN0KGN1clB1bmMpKVxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6IGN1clB1bmMgfHwgc3R5bGUsIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZH07XG4gICAgICBlbHNlIGlmICgoa3d0eXBlID09IFwiZGVkZW50XCIgfHwgL1tcXClcXF1cXH1dLy50ZXN0KGN1clB1bmMpKSAmJiBzdGF0ZS5jb250ZXh0LnByZXYpXG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG5cbiAgICAgIGlmIChzdHJlYW0uZW9sKCkpXG4gICAgICAgIHN0YXRlLmNvbnRpbnVlZExpbmUgPSAoY3VyUHVuYyA9PSBcIlxcXFxcIiB8fCBzdHlsZSA9PSBcIm9wZXJhdG9yXCIpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0gIT0gdG9rZW5CYXNlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgdmFyIGN0ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIHZhciBjbG9zZWQgPSBjdC50eXBlID09IGNsb3NpbmdbZmlyc3RDaGFyXSB8fFxuICAgICAgICBjdC50eXBlID09IFwia2V5d29yZFwiICYmIC9eKD86ZW5kfHVudGlsfGVsc2V8ZWxzaWZ8d2hlbnxyZXNjdWUpXFxiLy50ZXN0KHRleHRBZnRlcik7XG4gICAgICByZXR1cm4gY3QuaW5kZW50ZWQgKyAoY2xvc2VkID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KSArXG4gICAgICAgIChzdGF0ZS5jb250aW51ZWRMaW5lID8gY29uZmlnLmluZGVudFVuaXQgOiAwKTtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogL15cXHMqKD86ZW5kfHJlc2N1ZXxlbHNpZnxlbHNlfFxcfSkkLyxcbiAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgZm9sZDogXCJpbmRlbnRcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1ydWJ5XCIsIFwicnVieVwiKTtcblxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBUUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFNQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBR0E7QUFKQTtBQU1BO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBWkE7QUFDQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXRCQTtBQXdCQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUEzQkE7QUE2QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUZBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQTFDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFuREE7QUF1REE7QUFDQTtBQUNBO0FBekRBO0FBN05BO0FBMFJBO0FBcFNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/ruby/ruby.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/shell/shell.js": -/*!******************************************************!*\ - !*** ../node_modules/codemirror/mode/shell/shell.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode('shell', function () {\n var words = {};\n\n function define(style, dict) {\n for (var i = 0; i < dict.length; i++) {\n words[dict[i]] = style;\n }\n }\n\n ;\n var commonAtoms = [\"true\", \"false\"];\n var commonKeywords = [\"if\", \"then\", \"do\", \"else\", \"elif\", \"while\", \"until\", \"for\", \"in\", \"esac\", \"fi\", \"fin\", \"fil\", \"done\", \"exit\", \"set\", \"unset\", \"export\", \"function\"];\n var commonCommands = [\"ab\", \"awk\", \"bash\", \"beep\", \"cat\", \"cc\", \"cd\", \"chown\", \"chmod\", \"chroot\", \"clear\", \"cp\", \"curl\", \"cut\", \"diff\", \"echo\", \"find\", \"gawk\", \"gcc\", \"get\", \"git\", \"grep\", \"hg\", \"kill\", \"killall\", \"ln\", \"ls\", \"make\", \"mkdir\", \"openssl\", \"mv\", \"nc\", \"nl\", \"node\", \"npm\", \"ping\", \"ps\", \"restart\", \"rm\", \"rmdir\", \"sed\", \"service\", \"sh\", \"shopt\", \"shred\", \"source\", \"sort\", \"sleep\", \"ssh\", \"start\", \"stop\", \"su\", \"sudo\", \"svn\", \"tee\", \"telnet\", \"top\", \"touch\", \"vi\", \"vim\", \"wall\", \"wc\", \"wget\", \"who\", \"write\", \"yes\", \"zsh\"];\n CodeMirror.registerHelper(\"hintWords\", \"shell\", commonAtoms.concat(commonKeywords, commonCommands));\n define('atom', commonAtoms);\n define('keyword', commonKeywords);\n define('builtin', commonCommands);\n\n function tokenBase(stream, state) {\n if (stream.eatSpace()) return null;\n var sol = stream.sol();\n var ch = stream.next();\n\n if (ch === '\\\\') {\n stream.next();\n return null;\n }\n\n if (ch === '\\'' || ch === '\"' || ch === '`') {\n state.tokens.unshift(tokenString(ch, ch === \"`\" ? \"quote\" : \"string\"));\n return tokenize(stream, state);\n }\n\n if (ch === '#') {\n if (sol && stream.eat('!')) {\n stream.skipToEnd();\n return 'meta'; // 'comment'?\n }\n\n stream.skipToEnd();\n return 'comment';\n }\n\n if (ch === '$') {\n state.tokens.unshift(tokenDollar);\n return tokenize(stream, state);\n }\n\n if (ch === '+' || ch === '=') {\n return 'operator';\n }\n\n if (ch === '-') {\n stream.eat('-');\n stream.eatWhile(/\\w/);\n return 'attribute';\n }\n\n if (/\\d/.test(ch)) {\n stream.eatWhile(/\\d/);\n\n if (stream.eol() || !/\\w/.test(stream.peek())) {\n return 'number';\n }\n }\n\n stream.eatWhile(/[\\w-]/);\n var cur = stream.current();\n if (stream.peek() === '=' && /\\w+/.test(cur)) return 'def';\n return words.hasOwnProperty(cur) ? words[cur] : null;\n }\n\n function tokenString(quote, style) {\n var close = quote == \"(\" ? \")\" : quote == \"{\" ? \"}\" : quote;\n return function (stream, state) {\n var next,\n escaped = false;\n\n while ((next = stream.next()) != null) {\n if (next === close && !escaped) {\n state.tokens.shift();\n break;\n } else if (next === '$' && !escaped && quote !== \"'\" && stream.peek() != close) {\n escaped = true;\n stream.backUp(1);\n state.tokens.unshift(tokenDollar);\n break;\n } else if (!escaped && quote !== close && next === quote) {\n state.tokens.unshift(tokenString(quote, style));\n return tokenize(stream, state);\n } else if (!escaped && /['\"]/.test(next) && !/['\"]/.test(quote)) {\n state.tokens.unshift(tokenStringStart(next, \"string\"));\n stream.backUp(1);\n break;\n }\n\n escaped = !escaped && next === '\\\\';\n }\n\n return style;\n };\n }\n\n ;\n\n function tokenStringStart(quote, style) {\n return function (stream, state) {\n state.tokens[0] = tokenString(quote, style);\n stream.next();\n return tokenize(stream, state);\n };\n }\n\n var tokenDollar = function tokenDollar(stream, state) {\n if (state.tokens.length > 1) stream.eat('$');\n var ch = stream.next();\n\n if (/['\"({]/.test(ch)) {\n state.tokens[0] = tokenString(ch, ch == \"(\" ? \"quote\" : ch == \"{\" ? \"def\" : \"string\");\n return tokenize(stream, state);\n }\n\n if (!/\\d/.test(ch)) stream.eatWhile(/\\w/);\n state.tokens.shift();\n return 'def';\n };\n\n function tokenize(stream, state) {\n return (state.tokens[0] || tokenBase)(stream, state);\n }\n\n ;\n return {\n startState: function startState() {\n return {\n tokens: []\n };\n },\n token: function token(stream, state) {\n return tokenize(stream, state);\n },\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n lineComment: '#',\n fold: \"brace\"\n };\n });\n CodeMirror.defineMIME('text/x-sh', 'shell'); // Apache uses a slightly different Media Type for Shell scripts\n // http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n\n CodeMirror.defineMIME('application/x-sh', 'shell');\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9zaGVsbC9zaGVsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL3NoZWxsL3NoZWxsLmpzPzdlNmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoJ3NoZWxsJywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHdvcmRzID0ge307XG4gIGZ1bmN0aW9uIGRlZmluZShzdHlsZSwgZGljdCkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB3b3Jkc1tkaWN0W2ldXSA9IHN0eWxlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgY29tbW9uQXRvbXMgPSBbXCJ0cnVlXCIsIFwiZmFsc2VcIl07XG4gIHZhciBjb21tb25LZXl3b3JkcyA9IFtcImlmXCIsIFwidGhlblwiLCBcImRvXCIsIFwiZWxzZVwiLCBcImVsaWZcIiwgXCJ3aGlsZVwiLCBcInVudGlsXCIsIFwiZm9yXCIsIFwiaW5cIiwgXCJlc2FjXCIsIFwiZmlcIixcbiAgICBcImZpblwiLCBcImZpbFwiLCBcImRvbmVcIiwgXCJleGl0XCIsIFwic2V0XCIsIFwidW5zZXRcIiwgXCJleHBvcnRcIiwgXCJmdW5jdGlvblwiXTtcbiAgdmFyIGNvbW1vbkNvbW1hbmRzID0gW1wiYWJcIiwgXCJhd2tcIiwgXCJiYXNoXCIsIFwiYmVlcFwiLCBcImNhdFwiLCBcImNjXCIsIFwiY2RcIiwgXCJjaG93blwiLCBcImNobW9kXCIsIFwiY2hyb290XCIsIFwiY2xlYXJcIixcbiAgICBcImNwXCIsIFwiY3VybFwiLCBcImN1dFwiLCBcImRpZmZcIiwgXCJlY2hvXCIsIFwiZmluZFwiLCBcImdhd2tcIiwgXCJnY2NcIiwgXCJnZXRcIiwgXCJnaXRcIiwgXCJncmVwXCIsIFwiaGdcIiwgXCJraWxsXCIsIFwia2lsbGFsbFwiLFxuICAgIFwibG5cIiwgXCJsc1wiLCBcIm1ha2VcIiwgXCJta2RpclwiLCBcIm9wZW5zc2xcIiwgXCJtdlwiLCBcIm5jXCIsIFwibmxcIiwgXCJub2RlXCIsIFwibnBtXCIsIFwicGluZ1wiLCBcInBzXCIsIFwicmVzdGFydFwiLCBcInJtXCIsXG4gICAgXCJybWRpclwiLCBcInNlZFwiLCBcInNlcnZpY2VcIiwgXCJzaFwiLCBcInNob3B0XCIsIFwic2hyZWRcIiwgXCJzb3VyY2VcIiwgXCJzb3J0XCIsIFwic2xlZXBcIiwgXCJzc2hcIiwgXCJzdGFydFwiLCBcInN0b3BcIixcbiAgICBcInN1XCIsIFwic3Vkb1wiLCBcInN2blwiLCBcInRlZVwiLCBcInRlbG5ldFwiLCBcInRvcFwiLCBcInRvdWNoXCIsIFwidmlcIiwgXCJ2aW1cIiwgXCJ3YWxsXCIsIFwid2NcIiwgXCJ3Z2V0XCIsIFwid2hvXCIsIFwid3JpdGVcIixcbiAgICBcInllc1wiLCBcInpzaFwiXTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwic2hlbGxcIiwgY29tbW9uQXRvbXMuY29uY2F0KGNvbW1vbktleXdvcmRzLCBjb21tb25Db21tYW5kcykpO1xuXG4gIGRlZmluZSgnYXRvbScsIGNvbW1vbkF0b21zKTtcbiAgZGVmaW5lKCdrZXl3b3JkJywgY29tbW9uS2V5d29yZHMpO1xuICBkZWZpbmUoJ2J1aWx0aW4nLCBjb21tb25Db21tYW5kcyk7XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHNvbCA9IHN0cmVhbS5zb2woKTtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNoID09PSAnXFwnJyB8fCBjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gJ2AnKSB7XG4gICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlblN0cmluZyhjaCwgY2ggPT09IFwiYFwiID8gXCJxdW90ZVwiIDogXCJzdHJpbmdcIikpO1xuICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoY2ggPT09ICcjJykge1xuICAgICAgaWYgKHNvbCAmJiBzdHJlYW0uZWF0KCchJykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gJ21ldGEnOyAvLyAnY29tbWVudCc/XG4gICAgICB9XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgIH1cbiAgICBpZiAoY2ggPT09ICckJykge1xuICAgICAgc3RhdGUudG9rZW5zLnVuc2hpZnQodG9rZW5Eb2xsYXIpO1xuICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJz0nKSB7XG4gICAgICByZXR1cm4gJ29wZXJhdG9yJztcbiAgICB9XG4gICAgaWYgKGNoID09PSAnLScpIHtcbiAgICAgIHN0cmVhbS5lYXQoJy0nKTtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICByZXR1cm4gJ2F0dHJpYnV0ZSc7XG4gICAgfVxuICAgIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cXGQvKTtcbiAgICAgIGlmKHN0cmVhbS5lb2woKSB8fCAhL1xcdy8udGVzdChzdHJlYW0ucGVlaygpKSkge1xuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICB9XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy1dLyk7XG4gICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICc9JyAmJiAvXFx3Ky8udGVzdChjdXIpKSByZXR1cm4gJ2RlZic7XG4gICAgcmV0dXJuIHdvcmRzLmhhc093blByb3BlcnR5KGN1cikgPyB3b3Jkc1tjdXJdIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBzdHlsZSkge1xuICAgIHZhciBjbG9zZSA9IHF1b3RlID09IFwiKFwiID8gXCIpXCIgOiBxdW90ZSA9PSBcIntcIiA/IFwifVwiIDogcXVvdGVcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG5leHQsIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IGNsb3NlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5zLnNoaWZ0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gJyQnICYmICFlc2NhcGVkICYmIHF1b3RlICE9PSBcIidcIiAmJiBzdHJlYW0ucGVlaygpICE9IGNsb3NlKSB7XG4gICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlbkRvbGxhcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWVzY2FwZWQgJiYgcXVvdGUgIT09IGNsb3NlICYmIG5leHQgPT09IHF1b3RlKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5zLnVuc2hpZnQodG9rZW5TdHJpbmcocXVvdGUsIHN0eWxlKSlcbiAgICAgICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfSBlbHNlIGlmICghZXNjYXBlZCAmJiAvWydcIl0vLnRlc3QobmV4dCkgJiYgIS9bJ1wiXS8udGVzdChxdW90ZSkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlblN0cmluZ1N0YXJ0KG5leHQsIFwic3RyaW5nXCIpKTtcbiAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09PSAnXFxcXCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b2tlblN0cmluZ1N0YXJ0KHF1b3RlLCBzdHlsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbMF0gPSB0b2tlblN0cmluZyhxdW90ZSwgc3R5bGUpXG4gICAgICBzdHJlYW0ubmV4dCgpXG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgdG9rZW5Eb2xsYXIgPSBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPiAxKSBzdHJlYW0uZWF0KCckJyk7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKVxuICAgIGlmICgvWydcIih7XS8udGVzdChjaCkpIHtcbiAgICAgIHN0YXRlLnRva2Vuc1swXSA9IHRva2VuU3RyaW5nKGNoLCBjaCA9PSBcIihcIiA/IFwicXVvdGVcIiA6IGNoID09IFwie1wiID8gXCJkZWZcIiA6IFwic3RyaW5nXCIpO1xuICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoIS9cXGQvLnRlc3QoY2gpKSBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pO1xuICAgIHN0YXRlLnRva2Vucy5zaGlmdCgpO1xuICAgIHJldHVybiAnZGVmJztcbiAgfTtcblxuICBmdW5jdGlvbiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgcmV0dXJuIChzdGF0ZS50b2tlbnNbMF0gfHwgdG9rZW5CYXNlKSAoc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtyZXR1cm4ge3Rva2VuczpbXX07fSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG4gICAgY2xvc2VCcmFja2V0czogXCIoKVtde30nJ1xcXCJcXFwiYGBcIixcbiAgICBsaW5lQ29tbWVudDogJyMnLFxuICAgIGZvbGQ6IFwiYnJhY2VcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXNoJywgJ3NoZWxsJyk7XG4vLyBBcGFjaGUgdXNlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBNZWRpYSBUeXBlIGZvciBTaGVsbCBzY3JpcHRzXG4vLyBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2h0dHBkL2h0dHBkL3RydW5rL2RvY3MvY29uZi9taW1lLnR5cGVzXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ2FwcGxpY2F0aW9uL3gtc2gnLCAnc2hlbGwnKTtcblxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBRUE7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFyQkE7QUF1QkE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFQQTtBQTFIQTtBQXFJQTtBQUVBO0FBQ0E7QUFBQTtBQWxKQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/shell/shell.js\n"); - -/***/ }), - -/***/ "../node_modules/codemirror/mode/xml/xml.js": -/*!**************************************************!*\ - !*** ../node_modules/codemirror/mode/xml/xml.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n\n(function (mod) {\n if (( false ? undefined : _typeof(exports)) == \"object\" && ( false ? undefined : _typeof(module)) == \"object\") // CommonJS\n mod(__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\"));else if (true) // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../../lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (mod),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // Plain browser env\n {}\n})(function (CodeMirror) {\n \"use strict\";\n\n var htmlConfig = {\n autoSelfClosers: {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'command': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true,\n 'menuitem': true\n },\n implicitlyClosed: {\n 'dd': true,\n 'li': true,\n 'optgroup': true,\n 'option': true,\n 'p': true,\n 'rp': true,\n 'rt': true,\n 'tbody': true,\n 'td': true,\n 'tfoot': true,\n 'th': true,\n 'tr': true\n },\n contextGrabbers: {\n 'dd': {\n 'dd': true,\n 'dt': true\n },\n 'dt': {\n 'dd': true,\n 'dt': true\n },\n 'li': {\n 'li': true\n },\n 'option': {\n 'option': true,\n 'optgroup': true\n },\n 'optgroup': {\n 'optgroup': true\n },\n 'p': {\n 'address': true,\n 'article': true,\n 'aside': true,\n 'blockquote': true,\n 'dir': true,\n 'div': true,\n 'dl': true,\n 'fieldset': true,\n 'footer': true,\n 'form': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'header': true,\n 'hgroup': true,\n 'hr': true,\n 'menu': true,\n 'nav': true,\n 'ol': true,\n 'p': true,\n 'pre': true,\n 'section': true,\n 'table': true,\n 'ul': true\n },\n 'rp': {\n 'rp': true,\n 'rt': true\n },\n 'rt': {\n 'rp': true,\n 'rt': true\n },\n 'tbody': {\n 'tbody': true,\n 'tfoot': true\n },\n 'td': {\n 'td': true,\n 'th': true\n },\n 'tfoot': {\n 'tbody': true\n },\n 'th': {\n 'td': true,\n 'th': true\n },\n 'thead': {\n 'tbody': true,\n 'tfoot': true\n },\n 'tr': {\n 'tr': true\n }\n },\n doNotIndent: {\n \"pre\": true\n },\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n };\n var xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n };\n CodeMirror.defineMode(\"xml\", function (editorConf, config_) {\n var indentUnit = editorConf.indentUnit;\n var config = {};\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig;\n\n for (var prop in defaults) {\n config[prop] = defaults[prop];\n }\n\n for (var prop in config_) {\n config[prop] = config_[prop];\n } // Return variables for tokenizers\n\n\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n\n if (ch == \">\" || ch == \"/\" && stream.eat(\">\")) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function closure(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n\n return \"string\";\n };\n\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function (stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n\n stream.next();\n }\n\n return style;\n };\n }\n\n function doctype(depth) {\n return function (stream, state) {\n var ch;\n\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true;\n }\n\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n\n while (true) {\n if (!state.context) {\n return;\n }\n\n parentTagName = state.context.tagName;\n\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state);\n\n if (state.context && state.context.tagName == tagName || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n\n popContext(state);\n return baseState;\n }\n\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName,\n tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n\n if (type == \"selfcloseTag\" || config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n\n return baseState;\n }\n\n setStyle = \"error\";\n return attrState;\n }\n\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n\n if (type == \"word\" && config.allowUnquoted) {\n setStyle = \"string\";\n return attrState;\n }\n\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function startState(baseIndent) {\n var state = {\n tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null,\n tagStart: null,\n context: null\n };\n if (baseIndent != null) state.baseIndent = baseIndent;\n return state;\n },\n token: function token(stream, state) {\n if (!state.tagName && stream.sol()) state.indented = stream.indentation();\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle) style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n\n return style;\n },\n indent: function indent(state, textAfter, fullLine) {\n var context = state.context; // Indent multi-line strings (e.g. css).\n\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented) return state.stringStartCol + 1;else return state.indented + indentUnit;\n }\n\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0; // Indent the starts of attribute names.\n\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2;else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n\n if (tagAfter && tagAfter[1]) {\n // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) {\n // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2])) context = context.prev;else break;\n }\n }\n\n while (context && context.prev && !context.startOfLine) {\n context = context.prev;\n }\n\n if (context) return context.indent + indentUnit;else return state.baseIndent || 0;\n },\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n skipAttribute: function skipAttribute(state) {\n if (state.state == attrValueState) state.state = attrState;\n },\n xmlCurrentTag: function xmlCurrentTag(state) {\n return state.tagName ? {\n name: state.tagName,\n close: state.type == \"closeTag\"\n } : null;\n },\n xmlCurrentContext: function xmlCurrentContext(state) {\n var context = [];\n\n for (var cx = state.context; cx; cx = cx.prev) {\n if (cx.tagName) context.push(cx.tagName);\n }\n\n return context.reverse();\n }\n };\n });\n CodeMirror.defineMIME(\"text/xml\", \"xml\");\n CodeMirror.defineMIME(\"application/xml\", \"xml\");\n if (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\")) CodeMirror.defineMIME(\"text/html\", {\n name: \"xml\",\n htmlMode: true\n });\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS94bWwveG1sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUveG1sL3htbC5qcz8yYWYzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGh0bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2VyczogeydhcmVhJzogdHJ1ZSwgJ2Jhc2UnOiB0cnVlLCAnYnInOiB0cnVlLCAnY29sJzogdHJ1ZSwgJ2NvbW1hbmQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnZW1iZWQnOiB0cnVlLCAnZnJhbWUnOiB0cnVlLCAnaHInOiB0cnVlLCAnaW1nJzogdHJ1ZSwgJ2lucHV0JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51aXRlbSc6IHRydWV9LFxuICBpbXBsaWNpdGx5Q2xvc2VkOiB7J2RkJzogdHJ1ZSwgJ2xpJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZSwgJ29wdGlvbic6IHRydWUsICdwJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICdycCc6IHRydWUsICdydCc6IHRydWUsICd0Ym9keSc6IHRydWUsICd0ZCc6IHRydWUsICd0Zm9vdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHInOiB0cnVlfSxcbiAgY29udGV4dEdyYWJiZXJzOiB7XG4gICAgJ2RkJzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LFxuICAgICdkdCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSxcbiAgICAnbGknOiB7J2xpJzogdHJ1ZX0sXG4gICAgJ29wdGlvbic6IHsnb3B0aW9uJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZX0sXG4gICAgJ29wdGdyb3VwJzogeydvcHRncm91cCc6IHRydWV9LFxuICAgICdwJzogeydhZGRyZXNzJzogdHJ1ZSwgJ2FydGljbGUnOiB0cnVlLCAnYXNpZGUnOiB0cnVlLCAnYmxvY2txdW90ZSc6IHRydWUsICdkaXInOiB0cnVlLFxuICAgICAgICAgICdkaXYnOiB0cnVlLCAnZGwnOiB0cnVlLCAnZmllbGRzZXQnOiB0cnVlLCAnZm9vdGVyJzogdHJ1ZSwgJ2Zvcm0nOiB0cnVlLFxuICAgICAgICAgICdoMSc6IHRydWUsICdoMic6IHRydWUsICdoMyc6IHRydWUsICdoNCc6IHRydWUsICdoNSc6IHRydWUsICdoNic6IHRydWUsXG4gICAgICAgICAgJ2hlYWRlcic6IHRydWUsICdoZ3JvdXAnOiB0cnVlLCAnaHInOiB0cnVlLCAnbWVudSc6IHRydWUsICduYXYnOiB0cnVlLCAnb2wnOiB0cnVlLFxuICAgICAgICAgICdwJzogdHJ1ZSwgJ3ByZSc6IHRydWUsICdzZWN0aW9uJzogdHJ1ZSwgJ3RhYmxlJzogdHJ1ZSwgJ3VsJzogdHJ1ZX0sXG4gICAgJ3JwJzogeydycCc6IHRydWUsICdydCc6IHRydWV9LFxuICAgICdydCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSxcbiAgICAndGJvZHknOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sXG4gICAgJ3RkJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LFxuICAgICd0Zm9vdCc6IHsndGJvZHknOiB0cnVlfSxcbiAgICAndGgnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sXG4gICAgJ3RoZWFkJzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9LFxuICAgICd0cic6IHsndHInOiB0cnVlfVxuICB9LFxuICBkb05vdEluZGVudDoge1wicHJlXCI6IHRydWV9LFxuICBhbGxvd1VucXVvdGVkOiB0cnVlLFxuICBhbGxvd01pc3Npbmc6IHRydWUsXG4gIGNhc2VGb2xkOiB0cnVlXG59XG5cbnZhciB4bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2Vyczoge30sXG4gIGltcGxpY2l0bHlDbG9zZWQ6IHt9LFxuICBjb250ZXh0R3JhYmJlcnM6IHt9LFxuICBkb05vdEluZGVudDoge30sXG4gIGFsbG93VW5xdW90ZWQ6IGZhbHNlLFxuICBhbGxvd01pc3Npbmc6IGZhbHNlLFxuICBhbGxvd01pc3NpbmdUYWdOYW1lOiBmYWxzZSxcbiAgY2FzZUZvbGQ6IGZhbHNlXG59XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInhtbFwiLCBmdW5jdGlvbihlZGl0b3JDb25mLCBjb25maWdfKSB7XG4gIHZhciBpbmRlbnRVbml0ID0gZWRpdG9yQ29uZi5pbmRlbnRVbml0XG4gIHZhciBjb25maWcgPSB7fVxuICB2YXIgZGVmYXVsdHMgPSBjb25maWdfLmh0bWxNb2RlID8gaHRtbENvbmZpZyA6IHhtbENvbmZpZ1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSBjb25maWdbcHJvcF0gPSBkZWZhdWx0c1twcm9wXVxuICBmb3IgKHZhciBwcm9wIGluIGNvbmZpZ18pIGNvbmZpZ1twcm9wXSA9IGNvbmZpZ19bcHJvcF1cblxuICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzXG4gIHZhciB0eXBlLCBzZXRTdHlsZTtcblxuICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGZ1bmN0aW9uIGNoYWluKHBhcnNlcikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7XG4gICAgICByZXR1cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiFcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJbXCIpKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcIkNEQVRBW1wiKSkgcmV0dXJuIGNoYWluKGluQmxvY2soXCJhdG9tXCIsIFwiXV0+XCIpKTtcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIi0tXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJjb21tZW50XCIsIFwiLS0+XCIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goXCJET0NUWVBFXCIsIHRydWUsIHRydWUpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oZG9jdHlwZSgxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIj9cIikpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkJsb2NrKFwibWV0YVwiLCBcIj8+XCIpO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gc3RyZWFtLmVhdChcIi9cIikgPyBcImNsb3NlVGFnXCIgOiBcIm9wZW5UYWdcIjtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZztcbiAgICAgICAgcmV0dXJuIFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJlwiKSB7XG4gICAgICB2YXIgb2s7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiNcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJ4XCIpKSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1thLWZBLUZcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuXFwtOl0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvayA/IFwiYXRvbVwiIDogXCJlcnJvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCI+XCIgfHwgKGNoID09IFwiL1wiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICB0eXBlID0gY2ggPT0gXCI+XCIgPyBcImVuZFRhZ1wiIDogXCJzZWxmY2xvc2VUYWdcIjtcbiAgICAgIHJldHVybiBcInRhZyBicmFja2V0XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIj1cIikge1xuICAgICAgdHlwZSA9IFwiZXF1YWxzXCI7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIHN0YXRlLnN0YXRlID0gYmFzZVN0YXRlO1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDtcbiAgICAgIHZhciBuZXh0ID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gbmV4dCA/IG5leHQgKyBcIiB0YWcgZXJyb3JcIiA6IFwidGFnIGVycm9yXCI7XG4gICAgfSBlbHNlIGlmICgvW1xcJ1xcXCJdLy50ZXN0KGNoKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7XG4gICAgICBzdGF0ZS5zdHJpbmdTdGFydENvbCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW15cXHNcXHUwMGEwPTw+XFxcIlxcJ10qW15cXHNcXHUwMGEwPTw+XFxcIlxcJ1xcL10vKTtcbiAgICAgIHJldHVybiBcIndvcmRcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkge1xuICAgIHZhciBjbG9zdXJlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICAgIGNsb3N1cmUuaXNJbkF0dHJpYnV0ZSA9IHRydWU7XG4gICAgcmV0dXJuIGNsb3N1cmU7XG4gIH1cblxuICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoICsgMSk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiPlwiKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID09IDEpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gZG9jdHlwZShkZXB0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCBzdGFydE9mTGluZSkge1xuICAgIHRoaXMucHJldiA9IHN0YXRlLmNvbnRleHQ7XG4gICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbiAgICB0aGlzLmluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgIHRoaXMuc3RhcnRPZkxpbmUgPSBzdGFydE9mTGluZTtcbiAgICBpZiAoY29uZmlnLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQubm9JbmRlbnQpKVxuICAgICAgdGhpcy5ub0luZGVudCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgbmV4dFRhZ05hbWUpIHtcbiAgICB2YXIgcGFyZW50VGFnTmFtZTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCFzdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhcmVudFRhZ05hbWUgPSBzdGF0ZS5jb250ZXh0LnRhZ05hbWU7XG4gICAgICBpZiAoIWNvbmZpZy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkocGFyZW50VGFnTmFtZSkgfHxcbiAgICAgICAgICAhY29uZmlnLmNvbnRleHRHcmFiYmVyc1twYXJlbnRUYWdOYW1lXS5oYXNPd25Qcm9wZXJ0eShuZXh0VGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmFzZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIm9wZW5UYWdcIikge1xuICAgICAgc3RhdGUudGFnU3RhcnQgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICByZXR1cm4gdGFnTmFtZVN0YXRlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImNsb3NlVGFnXCIpIHtcbiAgICAgIHJldHVybiBjbG9zZVRhZ05hbWVTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdGFnTmFtZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICByZXR1cm4gYXR0clN0YXRlO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93TWlzc2luZ1RhZ05hbWUgJiYgdHlwZSA9PSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIHJldHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgICAgcmV0dXJuIHRhZ05hbWVTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VUYWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSAmJlxuICAgICAgICAgIGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpXG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgaWYgKChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB8fCBjb25maWcubWF0Y2hDbG9zaW5nID09PSBmYWxzZSkge1xuICAgICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICAgIHJldHVybiBjbG9zZVN0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U3R5bGUgPSBcInRhZyBlcnJvclwiO1xuICAgICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5hbGxvd01pc3NpbmdUYWdOYW1lICYmIHR5cGUgPT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcInRhZyBicmFja2V0XCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZTtcbiAgICB9XG4gICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBjbG9zZVN0YXRlRXJyKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJTdGF0ZSh0eXBlLCBfc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwiYXR0cmlidXRlXCI7XG4gICAgICByZXR1cm4gYXR0ckVxU3RhdGU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZW5kVGFnXCIgfHwgdHlwZSA9PSBcInNlbGZjbG9zZVRhZ1wiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLnRhZ05hbWUsIHRhZ1N0YXJ0ID0gc3RhdGUudGFnU3RhcnQ7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsO1xuICAgICAgaWYgKHR5cGUgPT0gXCJzZWxmY2xvc2VUYWdcIiB8fFxuICAgICAgICAgIGNvbmZpZy5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHtcbiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgdGFnTmFtZSk7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZSwgdGFnTmFtZSwgdGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyRXFTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJlcXVhbHNcIikgcmV0dXJuIGF0dHJWYWx1ZVN0YXRlO1xuICAgIGlmICghY29uZmlnLmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyVmFsdWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIiAmJiBjb25maWcuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gXCJzdHJpbmdcIjsgcmV0dXJuIGF0dHJTdGF0ZTt9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyQ29udGludWVkU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZUluZGVudCkge1xuICAgICAgdmFyIHN0YXRlID0ge3Rva2VuaXplOiBpblRleHQsXG4gICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2VTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICBpbmRlbnRlZDogYmFzZUluZGVudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6IG51bGwsIHRhZ1N0YXJ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGx9XG4gICAgICBpZiAoYmFzZUluZGVudCAhPSBudWxsKSBzdGF0ZS5iYXNlSW5kZW50ID0gYmFzZUluZGVudFxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoIXN0YXRlLnRhZ05hbWUgJiYgc3RyZWFtLnNvbCgpKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdHlwZSA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgc2V0U3R5bGUgPSBudWxsO1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YXRlKHR5cGUgfHwgc3R5bGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc2V0U3R5bGUpXG4gICAgICAgICAgc3R5bGUgPSBzZXRTdHlsZSA9PSBcImVycm9yXCIgPyBzdHlsZSArIFwiIGVycm9yXCIgOiBzZXRTdHlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgLy8gSW5kZW50IG11bHRpLWxpbmUgc3RyaW5ncyAoZS5nLiBjc3MpLlxuICAgICAgaWYgKHN0YXRlLnRva2VuaXplLmlzSW5BdHRyaWJ1dGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRhZ1N0YXJ0ID09IHN0YXRlLmluZGVudGVkKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHJpbmdTdGFydENvbCArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50ZWQgKyBpbmRlbnRVbml0O1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpXG4gICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxccyopLylbMF0ubGVuZ3RoIDogMDtcbiAgICAgIC8vIEluZGVudCB0aGUgc3RhcnRzIG9mIGF0dHJpYnV0ZSBuYW1lcy5cbiAgICAgIGlmIChzdGF0ZS50YWdOYW1lKSB7XG4gICAgICAgIGlmIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZyAhPT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgc3RhdGUudGFnTmFtZS5sZW5ndGggKyAyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgaW5kZW50VW5pdCAqIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIHx8IDEpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5hbGlnbkNEQVRBICYmIC88IVxcW0NEQVRBXFxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwO1xuICAgICAgdmFyIHRhZ0FmdGVyID0gdGV4dEFmdGVyICYmIC9ePChcXC8pPyhbXFx3XzpcXC4tXSopLy5leGVjKHRleHRBZnRlcik7XG4gICAgICBpZiAodGFnQWZ0ZXIgJiYgdGFnQWZ0ZXJbMV0pIHsgLy8gQ2xvc2luZyB0YWcgc3BvdHRlZFxuICAgICAgICB3aGlsZSAoY29udGV4dCkge1xuICAgICAgICAgIGlmIChjb250ZXh0LnRhZ05hbWUgPT0gdGFnQWZ0ZXJbMl0pIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KGNvbnRleHQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdBZnRlcikgeyAvLyBPcGVuaW5nIHRhZyBzcG90dGVkXG4gICAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgICAgdmFyIGdyYWJiZXJzID0gY29uZmlnLmNvbnRleHRHcmFiYmVyc1tjb250ZXh0LnRhZ05hbWVdO1xuICAgICAgICAgIGlmIChncmFiYmVycyAmJiBncmFiYmVycy5oYXNPd25Qcm9wZXJ0eSh0YWdBZnRlclsyXSkpXG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoY29udGV4dCAmJiBjb250ZXh0LnByZXYgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgfHwgMDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogLzxcXC9bXFxzXFx3Ol0rPiQvLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIjwhLS1cIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiLS0+XCIsXG5cbiAgICBjb25maWd1cmF0aW9uOiBjb25maWcuaHRtbE1vZGUgPyBcImh0bWxcIiA6IFwieG1sXCIsXG4gICAgaGVscGVyVHlwZTogY29uZmlnLmh0bWxNb2RlID8gXCJodG1sXCIgOiBcInhtbFwiLFxuXG4gICAgc2tpcEF0dHJpYnV0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PSBhdHRyVmFsdWVTdGF0ZSlcbiAgICAgICAgc3RhdGUuc3RhdGUgPSBhdHRyU3RhdGVcbiAgICB9LFxuXG4gICAgeG1sQ3VycmVudFRhZzogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS50YWdOYW1lID8ge25hbWU6IHN0YXRlLnRhZ05hbWUsIGNsb3NlOiBzdGF0ZS50eXBlID09IFwiY2xvc2VUYWdcIn0gOiBudWxsXG4gICAgfSxcblxuICAgIHhtbEN1cnJlbnRDb250ZXh0OiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBbXVxuICAgICAgZm9yICh2YXIgY3ggPSBzdGF0ZS5jb250ZXh0OyBjeDsgY3ggPSBjeC5wcmV2KVxuICAgICAgICBpZiAoY3gudGFnTmFtZSkgY29udGV4dC5wdXNoKGN4LnRhZ05hbWUpXG4gICAgICByZXR1cm4gY29udGV4dC5yZXZlcnNlKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94bWxcIiwgXCJ4bWxcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ4bWxcIik7XG5pZiAoIUNvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blByb3BlcnR5KFwidGV4dC9odG1sXCIpKVxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2h0bWxcIiwge25hbWU6IFwieG1sXCIsIGh0bWxNb2RlOiB0cnVlfSk7XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRkE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFsQkE7QUFvQkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBL0JBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUxBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBdUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQUtBO0FBQ0E7QUFSQTtBQVdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBeEJBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFWQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQXRFQTtBQTBFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQWxGQTtBQXNGQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBdkZBO0FBMEZBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQS9GQTtBQTFQQTtBQTZWQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUF2WkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/codemirror/mode/xml/xml.js\n"); - -/***/ }), - -/***/ "../node_modules/collapse-white-space/index.js": -/*!*****************************************************!*\ - !*** ../node_modules/collapse-white-space/index.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = collapse; // `collapse(' \\t\\nbar \\nbaz\\t') // ' bar baz '`\n\nfunction collapse(value) {\n return String(value).replace(/\\s+/g, ' ');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvbGxhcHNlLXdoaXRlLXNwYWNlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb2xsYXBzZS13aGl0ZS1zcGFjZS9pbmRleC5qcz9mNjMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxhcHNlXG5cbi8vIGBjb2xsYXBzZSgnIFxcdFxcbmJhciBcXG5iYXpcXHQnKSAvLyAnIGJhciBiYXogJ2BcbmZ1bmN0aW9uIGNvbGxhcHNlKHZhbHVlKSB7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xccysvZywgJyAnKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/collapse-white-space/index.js\n"); - -/***/ }), - -/***/ "../node_modules/comma-separated-tokens/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/comma-separated-tokens/index.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nexports.parse = parse;\nexports.stringify = stringify;\nvar comma = ',';\nvar space = ' ';\nvar empty = ''; // Parse comma-separated tokens to an array.\n\nfunction parse(value) {\n var values = [];\n var input = String(value || empty);\n var index = input.indexOf(comma);\n var lastIndex = 0;\n var end = false;\n var val;\n\n while (!end) {\n if (index === -1) {\n index = input.length;\n end = true;\n }\n\n val = input.slice(lastIndex, index).trim();\n\n if (val || !end) {\n values.push(val);\n }\n\n lastIndex = index + 1;\n index = input.indexOf(comma, lastIndex);\n }\n\n return values;\n} // Compile an array to comma-separated tokens.\n// `options.padLeft` (default: `true`) pads a space left of each token, and\n// `options.padRight` (default: `false`) pads a space to the right of each token.\n\n\nfunction stringify(values, options) {\n var settings = options || {};\n var left = settings.padLeft === false ? empty : space;\n var right = settings.padRight ? space : empty; // Ensure the last empty entry is seen.\n\n if (values[values.length - 1] === empty) {\n values = values.concat(empty);\n }\n\n return values.join(right + comma + left).trim();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanM/MWZjNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeVxuXG52YXIgY29tbWEgPSAnLCdcbnZhciBzcGFjZSA9ICcgJ1xudmFyIGVtcHR5ID0gJydcblxuLy8gUGFyc2UgY29tbWEtc2VwYXJhdGVkIHRva2VucyB0byBhbiBhcnJheS5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG4gIHZhciB2YWx1ZXMgPSBbXVxuICB2YXIgaW5wdXQgPSBTdHJpbmcodmFsdWUgfHwgZW1wdHkpXG4gIHZhciBpbmRleCA9IGlucHV0LmluZGV4T2YoY29tbWEpXG4gIHZhciBsYXN0SW5kZXggPSAwXG4gIHZhciBlbmQgPSBmYWxzZVxuICB2YXIgdmFsXG5cbiAgd2hpbGUgKCFlbmQpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpbmRleCA9IGlucHV0Lmxlbmd0aFxuICAgICAgZW5kID0gdHJ1ZVxuICAgIH1cblxuICAgIHZhbCA9IGlucHV0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpLnRyaW0oKVxuXG4gICAgaWYgKHZhbCB8fCAhZW5kKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWwpXG4gICAgfVxuXG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyAxXG4gICAgaW5kZXggPSBpbnB1dC5pbmRleE9mKGNvbW1hLCBsYXN0SW5kZXgpXG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8vIENvbXBpbGUgYW4gYXJyYXkgdG8gY29tbWEtc2VwYXJhdGVkIHRva2Vucy5cbi8vIGBvcHRpb25zLnBhZExlZnRgIChkZWZhdWx0OiBgdHJ1ZWApIHBhZHMgYSBzcGFjZSBsZWZ0IG9mIGVhY2ggdG9rZW4sIGFuZFxuLy8gYG9wdGlvbnMucGFkUmlnaHRgIChkZWZhdWx0OiBgZmFsc2VgKSBwYWRzIGEgc3BhY2UgdG8gdGhlIHJpZ2h0IG9mIGVhY2ggdG9rZW4uXG5mdW5jdGlvbiBzdHJpbmdpZnkodmFsdWVzLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGxlZnQgPSBzZXR0aW5ncy5wYWRMZWZ0ID09PSBmYWxzZSA/IGVtcHR5IDogc3BhY2VcbiAgdmFyIHJpZ2h0ID0gc2V0dGluZ3MucGFkUmlnaHQgPyBzcGFjZSA6IGVtcHR5XG5cbiAgLy8gRW5zdXJlIHRoZSBsYXN0IGVtcHR5IGVudHJ5IGlzIHNlZW4uXG4gIGlmICh2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSBlbXB0eSkge1xuICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoZW1wdHkpXG4gIH1cblxuICByZXR1cm4gdmFsdWVzLmpvaW4ocmlnaHQgKyBjb21tYSArIGxlZnQpLnRyaW0oKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/comma-separated-tokens/index.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/ConnectedRouter.js": -/*!*********************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/ConnectedRouter.js ***! - \*********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions */ \"../node_modules/connected-react-router/esm/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./selectors */ \"../node_modules/connected-react-router/esm/selectors.js\");\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar createConnectedRouter = function createConnectedRouter(structure) {\n var _createSelectors = Object(_selectors__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(structure),\n getLocation = _createSelectors.getLocation;\n /*\n * ConnectedRouter listens to a history object passed from props.\n * When history is changed, it dispatches action to redux store.\n * Then, store will pass props to component to render.\n * This creates uni-directional flow from history->store->router->components.\n */\n\n\n var ConnectedRouter = /*#__PURE__*/function (_PureComponent) {\n _inherits(ConnectedRouter, _PureComponent);\n\n function ConnectedRouter(props) {\n var _this;\n\n _classCallCheck(this, ConnectedRouter);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedRouter).call(this, props));\n var store = props.store,\n history = props.history,\n onLocationChanged = props.onLocationChanged;\n _this.inTimeTravelling = false; // Subscribe to store changes to check if we are in time travelling\n\n _this.unsubscribe = store.subscribe(function () {\n // Extract store's location\n var _getLocation = getLocation(store.getState()),\n pathnameInStore = _getLocation.pathname,\n searchInStore = _getLocation.search,\n hashInStore = _getLocation.hash,\n stateInStore = _getLocation.state; // Extract history's location\n\n\n var _history$location = history.location,\n pathnameInHistory = _history$location.pathname,\n searchInHistory = _history$location.search,\n hashInHistory = _history$location.hash,\n stateInHistory = _history$location.state; // If we do time travelling, the location in store is changed but location in history is not changed\n\n if (props.history.action === 'PUSH' && (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore || stateInStore !== stateInHistory)) {\n _this.inTimeTravelling = true; // Update history's location to match store's location\n\n history.push({\n pathname: pathnameInStore,\n search: searchInStore,\n hash: hashInStore,\n state: stateInStore\n });\n }\n });\n\n var handleLocationChange = function handleLocationChange(location, action) {\n var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; // Dispatch onLocationChanged except when we're in time travelling\n\n if (!_this.inTimeTravelling) {\n onLocationChanged(location, action, isFirstRendering);\n } else {\n _this.inTimeTravelling = false;\n }\n }; // Listen to history changes\n\n\n _this.unlisten = history.listen(handleLocationChange); // Dispatch a location change action for the initial location.\n // This makes it backward-compatible with react-router-redux.\n // But, we add `isFirstRendering` to `true` to prevent double-rendering.\n\n handleLocationChange(history.location, history.action, true);\n return _this;\n }\n\n _createClass(ConnectedRouter, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unlisten();\n this.unsubscribe();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n history = _this$props.history,\n children = _this$props.children;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__[\"Router\"], {\n history: history\n }, children);\n }\n }]);\n\n return ConnectedRouter;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n ConnectedRouter.propTypes = {\n store: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n getState: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n subscribe: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n }).isRequired,\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n action: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n listen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n location: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n push: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n }).isRequired,\n basename: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]),\n onLocationChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n };\n\n var mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onLocationChanged: function onLocationChanged(location, action, isFirstRendering) {\n return dispatch(Object(_actions__WEBPACK_IMPORTED_MODULE_4__[\"onLocationChanged\"])(location, action, isFirstRendering));\n }\n };\n };\n\n var ConnectedRouterWithContext = function ConnectedRouterWithContext(props) {\n var Context = props.context || react_redux__WEBPACK_IMPORTED_MODULE_2__[\"ReactReduxContext\"];\n\n if (Context == null) {\n throw 'Please upgrade to react-redux v6';\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Context.Consumer, null, function (_ref) {\n var store = _ref.store;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ConnectedRouter, _extends({\n store: store\n }, props));\n });\n };\n\n ConnectedRouterWithContext.propTypes = {\n context: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n };\n return Object(react_redux__WEBPACK_IMPORTED_MODULE_2__[\"connect\"])(null, mapDispatchToProps)(ConnectedRouterWithContext);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createConnectedRouter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL0Nvbm5lY3RlZFJvdXRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29ubmVjdGVkLXJlYWN0LXJvdXRlci9lc20vQ29ubmVjdGVkUm91dGVyLmpzPzM3MDAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNvbm5lY3QsIFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IG9uTG9jYXRpb25DaGFuZ2VkIGFzIF9vbkxvY2F0aW9uQ2hhbmdlZCB9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgY3JlYXRlU2VsZWN0b3JzIGZyb20gJy4vc2VsZWN0b3JzJztcblxudmFyIGNyZWF0ZUNvbm5lY3RlZFJvdXRlciA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZFJvdXRlcihzdHJ1Y3R1cmUpIHtcbiAgdmFyIF9jcmVhdGVTZWxlY3RvcnMgPSBjcmVhdGVTZWxlY3RvcnMoc3RydWN0dXJlKSxcbiAgICAgIGdldExvY2F0aW9uID0gX2NyZWF0ZVNlbGVjdG9ycy5nZXRMb2NhdGlvbjtcbiAgLypcbiAgICogQ29ubmVjdGVkUm91dGVyIGxpc3RlbnMgdG8gYSBoaXN0b3J5IG9iamVjdCBwYXNzZWQgZnJvbSBwcm9wcy5cbiAgICogV2hlbiBoaXN0b3J5IGlzIGNoYW5nZWQsIGl0IGRpc3BhdGNoZXMgYWN0aW9uIHRvIHJlZHV4IHN0b3JlLlxuICAgKiBUaGVuLCBzdG9yZSB3aWxsIHBhc3MgcHJvcHMgdG8gY29tcG9uZW50IHRvIHJlbmRlci5cbiAgICogVGhpcyBjcmVhdGVzIHVuaS1kaXJlY3Rpb25hbCBmbG93IGZyb20gaGlzdG9yeS0+c3RvcmUtPnJvdXRlci0+Y29tcG9uZW50cy5cbiAgICovXG5cblxuICB2YXIgQ29ubmVjdGVkUm91dGVyID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoQ29ubmVjdGVkUm91dGVyLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRSb3V0ZXIocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZFJvdXRlcik7XG5cbiAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKENvbm5lY3RlZFJvdXRlcikuY2FsbCh0aGlzLCBwcm9wcykpO1xuICAgICAgdmFyIHN0b3JlID0gcHJvcHMuc3RvcmUsXG4gICAgICAgICAgaGlzdG9yeSA9IHByb3BzLmhpc3RvcnksXG4gICAgICAgICAgb25Mb2NhdGlvbkNoYW5nZWQgPSBwcm9wcy5vbkxvY2F0aW9uQ2hhbmdlZDtcbiAgICAgIF90aGlzLmluVGltZVRyYXZlbGxpbmcgPSBmYWxzZTsgLy8gU3Vic2NyaWJlIHRvIHN0b3JlIGNoYW5nZXMgdG8gY2hlY2sgaWYgd2UgYXJlIGluIHRpbWUgdHJhdmVsbGluZ1xuXG4gICAgICBfdGhpcy51bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEV4dHJhY3Qgc3RvcmUncyBsb2NhdGlvblxuICAgICAgICB2YXIgX2dldExvY2F0aW9uID0gZ2V0TG9jYXRpb24oc3RvcmUuZ2V0U3RhdGUoKSksXG4gICAgICAgICAgICBwYXRobmFtZUluU3RvcmUgPSBfZ2V0TG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICBzZWFyY2hJblN0b3JlID0gX2dldExvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgIGhhc2hJblN0b3JlID0gX2dldExvY2F0aW9uLmhhc2gsXG4gICAgICAgICAgICBzdGF0ZUluU3RvcmUgPSBfZ2V0TG9jYXRpb24uc3RhdGU7IC8vIEV4dHJhY3QgaGlzdG9yeSdzIGxvY2F0aW9uXG5cblxuICAgICAgICB2YXIgX2hpc3RvcnkkbG9jYXRpb24gPSBoaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICAgICAgcGF0aG5hbWVJbkhpc3RvcnkgPSBfaGlzdG9yeSRsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIHNlYXJjaEluSGlzdG9yeSA9IF9oaXN0b3J5JGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgIGhhc2hJbkhpc3RvcnkgPSBfaGlzdG9yeSRsb2NhdGlvbi5oYXNoLFxuICAgICAgICAgICAgc3RhdGVJbkhpc3RvcnkgPSBfaGlzdG9yeSRsb2NhdGlvbi5zdGF0ZTsgLy8gSWYgd2UgZG8gdGltZSB0cmF2ZWxsaW5nLCB0aGUgbG9jYXRpb24gaW4gc3RvcmUgaXMgY2hhbmdlZCBidXQgbG9jYXRpb24gaW4gaGlzdG9yeSBpcyBub3QgY2hhbmdlZFxuXG4gICAgICAgIGlmIChwcm9wcy5oaXN0b3J5LmFjdGlvbiA9PT0gJ1BVU0gnICYmIChwYXRobmFtZUluSGlzdG9yeSAhPT0gcGF0aG5hbWVJblN0b3JlIHx8IHNlYXJjaEluSGlzdG9yeSAhPT0gc2VhcmNoSW5TdG9yZSB8fCBoYXNoSW5IaXN0b3J5ICE9PSBoYXNoSW5TdG9yZSB8fCBzdGF0ZUluU3RvcmUgIT09IHN0YXRlSW5IaXN0b3J5KSkge1xuICAgICAgICAgIF90aGlzLmluVGltZVRyYXZlbGxpbmcgPSB0cnVlOyAvLyBVcGRhdGUgaGlzdG9yeSdzIGxvY2F0aW9uIHRvIG1hdGNoIHN0b3JlJ3MgbG9jYXRpb25cblxuICAgICAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWVJblN0b3JlLFxuICAgICAgICAgICAgc2VhcmNoOiBzZWFyY2hJblN0b3JlLFxuICAgICAgICAgICAgaGFzaDogaGFzaEluU3RvcmUsXG4gICAgICAgICAgICBzdGF0ZTogc3RhdGVJblN0b3JlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaGFuZGxlTG9jYXRpb25DaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2NhdGlvbkNoYW5nZShsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgICAgIHZhciBpc0ZpcnN0UmVuZGVyaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICAgICAgICAvLyBEaXNwYXRjaCBvbkxvY2F0aW9uQ2hhbmdlZCBleGNlcHQgd2hlbiB3ZSdyZSBpbiB0aW1lIHRyYXZlbGxpbmdcbiAgICAgICAgaWYgKCFfdGhpcy5pblRpbWVUcmF2ZWxsaW5nKSB7XG4gICAgICAgICAgb25Mb2NhdGlvbkNoYW5nZWQobG9jYXRpb24sIGFjdGlvbiwgaXNGaXJzdFJlbmRlcmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuaW5UaW1lVHJhdmVsbGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9OyAvLyBMaXN0ZW4gdG8gaGlzdG9yeSBjaGFuZ2VzXG5cblxuICAgICAgX3RoaXMudW5saXN0ZW4gPSBoaXN0b3J5Lmxpc3RlbihoYW5kbGVMb2NhdGlvbkNoYW5nZSk7IC8vIERpc3BhdGNoIGEgbG9jYXRpb24gY2hhbmdlIGFjdGlvbiBmb3IgdGhlIGluaXRpYWwgbG9jYXRpb24uXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCByZWFjdC1yb3V0ZXItcmVkdXguXG4gICAgICAvLyBCdXQsIHdlIGFkZCBgaXNGaXJzdFJlbmRlcmluZ2AgdG8gYHRydWVgIHRvIHByZXZlbnQgZG91YmxlLXJlbmRlcmluZy5cblxuICAgICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoaGlzdG9yeS5sb2NhdGlvbiwgaGlzdG9yeS5hY3Rpb24sIHRydWUpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRSb3V0ZXIsIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy51bmxpc3RlbigpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGhpc3RvcnkgPSBfdGhpcyRwcm9wcy5oaXN0b3J5LFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgICAgICAgaGlzdG9yeTogaGlzdG9yeVxuICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIENvbm5lY3RlZFJvdXRlcjtcbiAgfShQdXJlQ29tcG9uZW50KTtcblxuICBDb25uZWN0ZWRSb3V0ZXIucHJvcFR5cGVzID0ge1xuICAgIHN0b3JlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZ2V0U3RhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdWJzY3JpYmU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGhpc3Rvcnk6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBhY3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxpc3RlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGxvY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBwdXNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBiYXNlbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gICAgb25Mb2NhdGlvbkNoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgfTtcblxuICB2YXIgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZnVuY3Rpb24gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uTG9jYXRpb25DaGFuZ2VkOiBmdW5jdGlvbiBvbkxvY2F0aW9uQ2hhbmdlZChsb2NhdGlvbiwgYWN0aW9uLCBpc0ZpcnN0UmVuZGVyaW5nKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChfb25Mb2NhdGlvbkNoYW5nZWQobG9jYXRpb24sIGFjdGlvbiwgaXNGaXJzdFJlbmRlcmluZykpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgdmFyIENvbm5lY3RlZFJvdXRlcldpdGhDb250ZXh0ID0gZnVuY3Rpb24gQ29ubmVjdGVkUm91dGVyV2l0aENvbnRleHQocHJvcHMpIHtcbiAgICB2YXIgQ29udGV4dCA9IHByb3BzLmNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7XG5cbiAgICBpZiAoQ29udGV4dCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyAnUGxlYXNlIHVwZ3JhZGUgdG8gcmVhY3QtcmVkdXggdjYnO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgc3RvcmUgPSBfcmVmLnN0b3JlO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdGVkUm91dGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0b3JlOiBzdG9yZVxuICAgICAgfSwgcHJvcHMpKTtcbiAgICB9KTtcbiAgfTtcblxuICBDb25uZWN0ZWRSb3V0ZXJXaXRoQ29udGV4dC5wcm9wVHlwZXMgPSB7XG4gICAgY29udGV4dDogUHJvcFR5cGVzLm9iamVjdFxuICB9O1xuICByZXR1cm4gY29ubmVjdChudWxsLCBtYXBEaXNwYXRjaFRvUHJvcHMpKENvbm5lY3RlZFJvdXRlcldpdGhDb250ZXh0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNvbm5lY3RlZFJvdXRlcjsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFRQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUF4QkE7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBOUNBO0FBQ0E7QUFDQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFUQTtBQUNBO0FBV0E7QUEvRUE7QUFDQTtBQWlGQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQVBBO0FBQ0E7QUFjQTtBQUNBO0FBREE7QUFHQTtBQXpJQTtBQUNBO0FBMklBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/ConnectedRouter.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/actions.js": -/*!*************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/actions.js ***! - \*************************************************************/ -/*! exports provided: LOCATION_CHANGE, onLocationChanged, CALL_HISTORY_METHOD, push, replace, go, goBack, goForward, routerActions */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOCATION_CHANGE\", function() { return LOCATION_CHANGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"onLocationChanged\", function() { return onLocationChanged; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CALL_HISTORY_METHOD\", function() { return CALL_HISTORY_METHOD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"push\", function() { return push; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"replace\", function() { return replace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"go\", function() { return go; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"goBack\", function() { return goBack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"goForward\", function() { return goForward; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"routerActions\", function() { return routerActions; });\n/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nvar LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nvar onLocationChanged = function onLocationChanged(location, action) {\n var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return {\n type: LOCATION_CHANGE,\n payload: {\n location: location,\n action: action,\n isFirstRendering: isFirstRendering\n }\n };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\nvar CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nvar updateLocation = function updateLocation(method) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return {\n type: CALL_HISTORY_METHOD,\n payload: {\n method: method,\n args: args\n }\n };\n };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nvar push = updateLocation('push');\nvar replace = updateLocation('replace');\nvar go = updateLocation('go');\nvar goBack = updateLocation('goBack');\nvar goForward = updateLocation('goForward');\nvar routerActions = {\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL2FjdGlvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL2FjdGlvbnMuanM/ZmZmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgYWN0aW9uIHR5cGUgd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW4geW91ciBoaXN0b3J5XG4gKiByZWNlaXZlcyBhIGxvY2F0aW9uIGNoYW5nZS5cbiAqL1xuZXhwb3J0IHZhciBMT0NBVElPTl9DSEFOR0UgPSAnQEByb3V0ZXIvTE9DQVRJT05fQ0hBTkdFJztcbmV4cG9ydCB2YXIgb25Mb2NhdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiBvbkxvY2F0aW9uQ2hhbmdlZChsb2NhdGlvbiwgYWN0aW9uKSB7XG4gIHZhciBpc0ZpcnN0UmVuZGVyaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBMT0NBVElPTl9DSEFOR0UsXG4gICAgcGF5bG9hZDoge1xuICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICBpc0ZpcnN0UmVuZGVyaW5nOiBpc0ZpcnN0UmVuZGVyaW5nXG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogVGhpcyBhY3Rpb24gdHlwZSB3aWxsIGJlIGRpc3BhdGNoZWQgYnkgdGhlIGhpc3RvcnkgYWN0aW9ucyBiZWxvdy5cbiAqIElmIHlvdSdyZSB3cml0aW5nIGEgbWlkZGxld2FyZSB0byB3YXRjaCBmb3IgbmF2aWdhdGlvbiBldmVudHMsIGJlIHN1cmUgdG9cbiAqIGxvb2sgZm9yIGFjdGlvbnMgb2YgdGhpcyB0eXBlLlxuICovXG5cbmV4cG9ydCB2YXIgQ0FMTF9ISVNUT1JZX01FVEhPRCA9ICdAQHJvdXRlci9DQUxMX0hJU1RPUllfTUVUSE9EJztcblxudmFyIHVwZGF0ZUxvY2F0aW9uID0gZnVuY3Rpb24gdXBkYXRlTG9jYXRpb24obWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBDQUxMX0hJU1RPUllfTUVUSE9ELFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgYXJnczogYXJnc1xuICAgICAgfVxuICAgIH07XG4gIH07XG59O1xuLyoqXG4gKiBUaGVzZSBhY3Rpb25zIGNvcnJlc3BvbmQgdG8gdGhlIGhpc3RvcnkgQVBJLlxuICogVGhlIGFzc29jaWF0ZWQgcm91dGVyTWlkZGxld2FyZSB3aWxsIGNhcHR1cmUgdGhlc2UgZXZlbnRzIGJlZm9yZSB0aGV5IGdldCB0b1xuICogeW91ciByZWR1Y2VyIGFuZCByZWlzc3VlIHRoZW0gYXMgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIG9uIHlvdXIgaGlzdG9yeS5cbiAqL1xuXG5cbmV4cG9ydCB2YXIgcHVzaCA9IHVwZGF0ZUxvY2F0aW9uKCdwdXNoJyk7XG5leHBvcnQgdmFyIHJlcGxhY2UgPSB1cGRhdGVMb2NhdGlvbigncmVwbGFjZScpO1xuZXhwb3J0IHZhciBnbyA9IHVwZGF0ZUxvY2F0aW9uKCdnbycpO1xuZXhwb3J0IHZhciBnb0JhY2sgPSB1cGRhdGVMb2NhdGlvbignZ29CYWNrJyk7XG5leHBvcnQgdmFyIGdvRm9yd2FyZCA9IHVwZGF0ZUxvY2F0aW9uKCdnb0ZvcndhcmQnKTtcbmV4cG9ydCB2YXIgcm91dGVyQWN0aW9ucyA9IHtcbiAgcHVzaDogcHVzaCxcbiAgcmVwbGFjZTogcmVwbGFjZSxcbiAgZ286IGdvLFxuICBnb0JhY2s6IGdvQmFjayxcbiAgZ29Gb3J3YXJkOiBnb0ZvcndhcmRcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQUZBO0FBV0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUxBO0FBREE7QUFlQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/actions.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/index.js": -/*!***********************************************************!*\ - !*** ../node_modules/connected-react-router/esm/index.js ***! - \***********************************************************/ -/*! exports provided: LOCATION_CHANGE, CALL_HISTORY_METHOD, onLocationChanged, push, replace, go, goBack, goForward, routerActions, routerMiddleware, ConnectedRouter, connectRouter, getLocation, getAction, getHash, getSearch, createMatchSelector */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConnectedRouter\", function() { return ConnectedRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"connectRouter\", function() { return connectRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocation\", function() { return getLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAction\", function() { return getAction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getHash\", function() { return getHash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSearch\", function() { return getSearch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMatchSelector\", function() { return createMatchSelector; });\n/* harmony import */ var _ConnectedRouter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ConnectedRouter */ \"../node_modules/connected-react-router/esm/ConnectedRouter.js\");\n/* harmony import */ var _reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducer */ \"../node_modules/connected-react-router/esm/reducer.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ \"../node_modules/connected-react-router/esm/selectors.js\");\n/* harmony import */ var _structure_plain__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./structure/plain */ \"../node_modules/connected-react-router/esm/structure/plain/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions */ \"../node_modules/connected-react-router/esm/actions.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LOCATION_CHANGE\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"LOCATION_CHANGE\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CALL_HISTORY_METHOD\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"CALL_HISTORY_METHOD\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"onLocationChanged\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"onLocationChanged\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"push\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"push\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"replace\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"replace\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"go\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"go\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"goBack\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"goBack\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"goForward\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"goForward\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"routerActions\", function() { return _actions__WEBPACK_IMPORTED_MODULE_4__[\"routerActions\"]; });\n\n/* harmony import */ var _middleware__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./middleware */ \"../node_modules/connected-react-router/esm/middleware.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"routerMiddleware\", function() { return _middleware__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\nvar ConnectedRouter = /*#__PURE__*/Object(_ConnectedRouter__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_structure_plain__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\nvar connectRouter = /*#__PURE__*/Object(_reducer__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_structure_plain__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n\nvar _createSelectors = /*#__PURE__*/Object(_selectors__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_structure_plain__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n getLocation = _createSelectors.getLocation,\n getAction = _createSelectors.getAction,\n getHash = _createSelectors.getHash,\n getSearch = _createSelectors.getSearch,\n createMatchSelector = _createSelectors.createMatchSelector;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb25uZWN0ZWQtcmVhY3Qtcm91dGVyL2VzbS9pbmRleC5qcz9hODVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVDb25uZWN0ZWRSb3V0ZXIgZnJvbSBcIi4vQ29ubmVjdGVkUm91dGVyXCI7XG5pbXBvcnQgY3JlYXRlQ29ubmVjdFJvdXRlciBmcm9tIFwiLi9yZWR1Y2VyXCI7XG5pbXBvcnQgY3JlYXRlU2VsZWN0b3JzIGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IHBsYWluU3RydWN0dXJlIGZyb20gXCIuL3N0cnVjdHVyZS9wbGFpblwiO1xuZXhwb3J0IHsgTE9DQVRJT05fQ0hBTkdFLCBDQUxMX0hJU1RPUllfTUVUSE9ELCBvbkxvY2F0aW9uQ2hhbmdlZCwgcHVzaCwgcmVwbGFjZSwgZ28sIGdvQmFjaywgZ29Gb3J3YXJkLCByb3V0ZXJBY3Rpb25zIH0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJNaWRkbGV3YXJlIH0gZnJvbSBcIi4vbWlkZGxld2FyZVwiO1xuZXhwb3J0IHZhciBDb25uZWN0ZWRSb3V0ZXIgPVxuLyojX19QVVJFX18qL1xuY3JlYXRlQ29ubmVjdGVkUm91dGVyKHBsYWluU3RydWN0dXJlKTtcbmV4cG9ydCB2YXIgY29ubmVjdFJvdXRlciA9XG4vKiNfX1BVUkVfXyovXG5jcmVhdGVDb25uZWN0Um91dGVyKHBsYWluU3RydWN0dXJlKTtcblxudmFyIF9jcmVhdGVTZWxlY3RvcnMgPVxuLyojX19QVVJFX18qL1xuY3JlYXRlU2VsZWN0b3JzKHBsYWluU3RydWN0dXJlKSxcbiAgICBnZXRMb2NhdGlvbiA9IF9jcmVhdGVTZWxlY3RvcnMuZ2V0TG9jYXRpb24sXG4gICAgZ2V0QWN0aW9uID0gX2NyZWF0ZVNlbGVjdG9ycy5nZXRBY3Rpb24sXG4gICAgZ2V0SGFzaCA9IF9jcmVhdGVTZWxlY3RvcnMuZ2V0SGFzaCxcbiAgICBnZXRTZWFyY2ggPSBfY3JlYXRlU2VsZWN0b3JzLmdldFNlYXJjaCxcbiAgICBjcmVhdGVNYXRjaFNlbGVjdG9yID0gX2NyZWF0ZVNlbGVjdG9ycy5jcmVhdGVNYXRjaFNlbGVjdG9yO1xuXG5leHBvcnQgeyBnZXRMb2NhdGlvbiwgZ2V0QWN0aW9uLCBnZXRIYXNoLCBnZXRTZWFyY2gsIGNyZWF0ZU1hdGNoU2VsZWN0b3IgfTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/middleware.js": -/*!****************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/middleware.js ***! - \****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions */ \"../node_modules/connected-react-router/esm/actions.js\");\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\n\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\n\nvar routerMiddleware = function routerMiddleware(history) {\n return function (store) {\n return function (next) {\n return function (action) {\n // eslint-disable-line no-unused-vars\n if (action.type !== _actions__WEBPACK_IMPORTED_MODULE_0__[\"CALL_HISTORY_METHOD\"]) {\n return next(action);\n }\n\n var _action$payload = action.payload,\n method = _action$payload.method,\n args = _action$payload.args;\n history[method].apply(history, _toConsumableArray(args));\n };\n };\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (routerMiddleware);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL21pZGRsZXdhcmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL21pZGRsZXdhcmUuanM/NzdmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG5pbXBvcnQgeyBDQUxMX0hJU1RPUllfTUVUSE9EIH0gZnJvbSAnLi9hY3Rpb25zJztcbi8qKlxuICogVGhpcyBtaWRkbGV3YXJlIGNhcHR1cmVzIENBTExfSElTVE9SWV9NRVRIT0QgYWN0aW9ucyB0byByZWRpcmVjdCB0byB0aGVcbiAqIHByb3ZpZGVkIGhpc3Rvcnkgb2JqZWN0LiBUaGlzIHdpbGwgcHJldmVudCB0aGVzZSBhY3Rpb25zIGZyb20gcmVhY2hpbmcgeW91clxuICogcmVkdWNlciBvciBhbnkgbWlkZGxld2FyZSB0aGF0IGNvbWVzIGFmdGVyIHRoaXMgb25lLlxuICovXG5cbnZhciByb3V0ZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gcm91dGVyTWlkZGxld2FyZShoaXN0b3J5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlICE9PSBDQUxMX0hJU1RPUllfTUVUSE9EKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfYWN0aW9uJHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIG1ldGhvZCA9IF9hY3Rpb24kcGF5bG9hZC5tZXRob2QsXG4gICAgICAgICAgICBhcmdzID0gX2FjdGlvbiRwYXlsb2FkLmFyZ3M7XG4gICAgICAgIGhpc3RvcnlbbWV0aG9kXS5hcHBseShoaXN0b3J5LCBfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcm91dGVyTWlkZGxld2FyZTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBVEE7QUFEQTtBQURBO0FBREE7QUFDQTtBQWlCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/middleware.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/reducer.js": -/*!*************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/reducer.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions */ \"../node_modules/connected-react-router/esm/actions.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n/**\n * Adds query to location.\n * Utilises the search prop of location to construct query.\n */\n\nvar injectQuery = function injectQuery(location) {\n var searchQuery = location && location.search;\n\n if (typeof searchQuery !== 'string' || searchQuery.length === 0) {\n return _objectSpread({}, location, {\n query: {}\n });\n } // Ignore the `?` part of the search string e.g. ?username=codejockie\n\n\n var search = searchQuery.substring(1); // Split the query string on `&` e.g. ?username=codejockie&name=Kennedy\n\n var queries = search.split('&'); // Contruct query\n\n var query = queries.reduce(function (acc, currentQuery) {\n // Split on `=`, to get key and value\n var _currentQuery$split = currentQuery.split('='),\n _currentQuery$split2 = _slicedToArray(_currentQuery$split, 2),\n queryKey = _currentQuery$split2[0],\n queryValue = _currentQuery$split2[1];\n\n return _objectSpread({}, acc, _defineProperty({}, queryKey, queryValue));\n }, {});\n return _objectSpread({}, location, {\n query: query\n });\n};\n\nvar createConnectRouter = function createConnectRouter(structure) {\n var fromJS = structure.fromJS,\n merge = structure.merge;\n\n var createRouterReducer = function createRouterReducer(history) {\n var initialRouterState = fromJS({\n location: injectQuery(history.location),\n action: history.action\n });\n /*\n * This reducer will update the state with the most recent location history\n * has transitioned to.\n */\n\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialRouterState;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n type = _ref.type,\n payload = _ref.payload;\n\n if (type === _actions__WEBPACK_IMPORTED_MODULE_0__[\"LOCATION_CHANGE\"]) {\n var location = payload.location,\n action = payload.action,\n isFirstRendering = payload.isFirstRendering; // Don't update the state ref for the first rendering\n // to prevent the double-rendering issue on initilization\n\n return isFirstRendering ? state : merge(state, {\n location: fromJS(injectQuery(location)),\n action: action\n });\n }\n\n return state;\n };\n };\n\n return createRouterReducer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createConnectRouter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL3JlZHVjZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL3JlZHVjZXIuanM/OTdkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7IG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7IH0pKTsgfSBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBMT0NBVElPTl9DSEFOR0UgfSBmcm9tICcuL2FjdGlvbnMnO1xuLyoqXG4gKiBBZGRzIHF1ZXJ5IHRvIGxvY2F0aW9uLlxuICogVXRpbGlzZXMgdGhlIHNlYXJjaCBwcm9wIG9mIGxvY2F0aW9uIHRvIGNvbnN0cnVjdCBxdWVyeS5cbiAqL1xuXG52YXIgaW5qZWN0UXVlcnkgPSBmdW5jdGlvbiBpbmplY3RRdWVyeShsb2NhdGlvbikge1xuICB2YXIgc2VhcmNoUXVlcnkgPSBsb2NhdGlvbiAmJiBsb2NhdGlvbi5zZWFyY2g7XG5cbiAgaWYgKHR5cGVvZiBzZWFyY2hRdWVyeSAhPT0gJ3N0cmluZycgfHwgc2VhcmNoUXVlcnkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGxvY2F0aW9uLCB7XG4gICAgICBxdWVyeToge31cbiAgICB9KTtcbiAgfSAvLyBJZ25vcmUgdGhlIGA/YCBwYXJ0IG9mIHRoZSBzZWFyY2ggc3RyaW5nIGUuZy4gP3VzZXJuYW1lPWNvZGVqb2NraWVcblxuXG4gIHZhciBzZWFyY2ggPSBzZWFyY2hRdWVyeS5zdWJzdHJpbmcoMSk7IC8vIFNwbGl0IHRoZSBxdWVyeSBzdHJpbmcgb24gYCZgIGUuZy4gP3VzZXJuYW1lPWNvZGVqb2NraWUmbmFtZT1LZW5uZWR5XG5cbiAgdmFyIHF1ZXJpZXMgPSBzZWFyY2guc3BsaXQoJyYnKTsgLy8gQ29udHJ1Y3QgcXVlcnlcblxuICB2YXIgcXVlcnkgPSBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyZW50UXVlcnkpIHtcbiAgICAvLyBTcGxpdCBvbiBgPWAsIHRvIGdldCBrZXkgYW5kIHZhbHVlXG4gICAgdmFyIF9jdXJyZW50UXVlcnkkc3BsaXQgPSBjdXJyZW50UXVlcnkuc3BsaXQoJz0nKSxcbiAgICAgICAgX2N1cnJlbnRRdWVyeSRzcGxpdDIgPSBfc2xpY2VkVG9BcnJheShfY3VycmVudFF1ZXJ5JHNwbGl0LCAyKSxcbiAgICAgICAgcXVlcnlLZXkgPSBfY3VycmVudFF1ZXJ5JHNwbGl0MlswXSxcbiAgICAgICAgcXVlcnlWYWx1ZSA9IF9jdXJyZW50UXVlcnkkc3BsaXQyWzFdO1xuXG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGFjYywgX2RlZmluZVByb3BlcnR5KHt9LCBxdWVyeUtleSwgcXVlcnlWYWx1ZSkpO1xuICB9LCB7fSk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCBsb2NhdGlvbiwge1xuICAgIHF1ZXJ5OiBxdWVyeVxuICB9KTtcbn07XG5cbnZhciBjcmVhdGVDb25uZWN0Um91dGVyID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdFJvdXRlcihzdHJ1Y3R1cmUpIHtcbiAgdmFyIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlMsXG4gICAgICBtZXJnZSA9IHN0cnVjdHVyZS5tZXJnZTtcblxuICB2YXIgY3JlYXRlUm91dGVyUmVkdWNlciA9IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlclJlZHVjZXIoaGlzdG9yeSkge1xuICAgIHZhciBpbml0aWFsUm91dGVyU3RhdGUgPSBmcm9tSlMoe1xuICAgICAgbG9jYXRpb246IGluamVjdFF1ZXJ5KGhpc3RvcnkubG9jYXRpb24pLFxuICAgICAgYWN0aW9uOiBoaXN0b3J5LmFjdGlvblxuICAgIH0pO1xuICAgIC8qXG4gICAgKiBUaGlzIHJlZHVjZXIgd2lsbCB1cGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIG1vc3QgcmVjZW50IGxvY2F0aW9uIGhpc3RvcnlcbiAgICAqIGhhcyB0cmFuc2l0aW9uZWQgdG8uXG4gICAgKi9cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGluaXRpYWxSb3V0ZXJTdGF0ZTtcblxuICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcblxuICAgICAgaWYgKHR5cGUgPT09IExPQ0FUSU9OX0NIQU5HRSkge1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBwYXlsb2FkLmxvY2F0aW9uLFxuICAgICAgICAgICAgYWN0aW9uID0gcGF5bG9hZC5hY3Rpb24sXG4gICAgICAgICAgICBpc0ZpcnN0UmVuZGVyaW5nID0gcGF5bG9hZC5pc0ZpcnN0UmVuZGVyaW5nOyAvLyBEb24ndCB1cGRhdGUgdGhlIHN0YXRlIHJlZiBmb3IgdGhlIGZpcnN0IHJlbmRlcmluZ1xuICAgICAgICAvLyB0byBwcmV2ZW50IHRoZSBkb3VibGUtcmVuZGVyaW5nIGlzc3VlIG9uIGluaXRpbGl6YXRpb25cblxuICAgICAgICByZXR1cm4gaXNGaXJzdFJlbmRlcmluZyA/IHN0YXRlIDogbWVyZ2Uoc3RhdGUsIHtcbiAgICAgICAgICBsb2NhdGlvbjogZnJvbUpTKGluamVjdFF1ZXJ5KGxvY2F0aW9uKSksXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBjcmVhdGVSb3V0ZXJSZWR1Y2VyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29ubmVjdFJvdXRlcjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSkE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBUEE7QUFTQTtBQUNBO0FBREE7QUF2QkE7QUFDQTtBQTJCQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBbkJBO0FBVkE7QUFDQTtBQWdDQTtBQXJDQTtBQUNBO0FBdUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/reducer.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/selectors.js": -/*!***************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/selectors.js ***! - \***************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\n\n\nvar createSelectors = function createSelectors(structure) {\n var getIn = structure.getIn,\n toJS = structure.toJS;\n\n var isRouter = function isRouter(value) {\n return value != null && _typeof(value) === 'object' && getIn(value, ['location']) && getIn(value, ['action']);\n };\n\n var getRouter = function getRouter(state) {\n var router = toJS(getIn(state, ['router']));\n\n if (!isRouter(router)) {\n throw 'Could not find router reducer in state tree, it must be mounted under \"router\"';\n }\n\n return router;\n };\n\n var getLocation = function getLocation(state) {\n return toJS(getIn(getRouter(state), ['location']));\n };\n\n var getAction = function getAction(state) {\n return toJS(getIn(getRouter(state), ['action']));\n };\n\n var getSearch = function getSearch(state) {\n return toJS(getIn(getRouter(state), ['location', 'search']));\n };\n\n var getHash = function getHash(state) {\n return toJS(getIn(getRouter(state), ['location', 'hash']));\n }; // It only makes sense to recalculate the `matchPath` whenever the pathname\n // of the location changes. That's why `createMatchSelector` memoizes\n // the latest result based on the location's pathname.\n\n\n var createMatchSelector = function createMatchSelector(path) {\n var lastPathname = null;\n var lastMatch = null;\n return function (state) {\n var _ref = getLocation(state) || {},\n pathname = _ref.pathname;\n\n if (pathname === lastPathname) {\n return lastMatch;\n }\n\n lastPathname = pathname;\n var match = Object(react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"])(pathname, path);\n\n if (!match || !lastMatch || match.url !== lastMatch.url) {\n lastMatch = match;\n }\n\n return lastMatch;\n };\n };\n\n return {\n getLocation: getLocation,\n getAction: getAction,\n getRouter: getRouter,\n getSearch: getSearch,\n getHash: getHash,\n createMatchSelector: createMatchSelector\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createSelectors);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL3NlbGVjdG9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29ubmVjdGVkLXJlYWN0LXJvdXRlci9lc20vc2VsZWN0b3JzLmpzPzBkZDMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHsgbWF0Y2hQYXRoIH0gZnJvbSBcInJlYWN0LXJvdXRlclwiO1xuXG52YXIgY3JlYXRlU2VsZWN0b3JzID0gZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzKHN0cnVjdHVyZSkge1xuICB2YXIgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXG4gICAgICB0b0pTID0gc3RydWN0dXJlLnRvSlM7XG5cbiAgdmFyIGlzUm91dGVyID0gZnVuY3Rpb24gaXNSb3V0ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgZ2V0SW4odmFsdWUsIFsnbG9jYXRpb24nXSkgJiYgZ2V0SW4odmFsdWUsIFsnYWN0aW9uJ10pO1xuICB9O1xuXG4gIHZhciBnZXRSb3V0ZXIgPSBmdW5jdGlvbiBnZXRSb3V0ZXIoc3RhdGUpIHtcbiAgICB2YXIgcm91dGVyID0gdG9KUyhnZXRJbihzdGF0ZSwgWydyb3V0ZXInXSkpO1xuXG4gICAgaWYgKCFpc1JvdXRlcihyb3V0ZXIpKSB7XG4gICAgICB0aHJvdyAnQ291bGQgbm90IGZpbmQgcm91dGVyIHJlZHVjZXIgaW4gc3RhdGUgdHJlZSwgaXQgbXVzdCBiZSBtb3VudGVkIHVuZGVyIFwicm91dGVyXCInO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZXI7XG4gIH07XG5cbiAgdmFyIGdldExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0TG9jYXRpb24oc3RhdGUpIHtcbiAgICByZXR1cm4gdG9KUyhnZXRJbihnZXRSb3V0ZXIoc3RhdGUpLCBbJ2xvY2F0aW9uJ10pKTtcbiAgfTtcblxuICB2YXIgZ2V0QWN0aW9uID0gZnVuY3Rpb24gZ2V0QWN0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRvSlMoZ2V0SW4oZ2V0Um91dGVyKHN0YXRlKSwgWydhY3Rpb24nXSkpO1xuICB9O1xuXG4gIHZhciBnZXRTZWFyY2ggPSBmdW5jdGlvbiBnZXRTZWFyY2goc3RhdGUpIHtcbiAgICByZXR1cm4gdG9KUyhnZXRJbihnZXRSb3V0ZXIoc3RhdGUpLCBbJ2xvY2F0aW9uJywgJ3NlYXJjaCddKSk7XG4gIH07XG5cbiAgdmFyIGdldEhhc2ggPSBmdW5jdGlvbiBnZXRIYXNoKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRvSlMoZ2V0SW4oZ2V0Um91dGVyKHN0YXRlKSwgWydsb2NhdGlvbicsICdoYXNoJ10pKTtcbiAgfTsgLy8gSXQgb25seSBtYWtlcyBzZW5zZSB0byByZWNhbGN1bGF0ZSB0aGUgYG1hdGNoUGF0aGAgd2hlbmV2ZXIgdGhlIHBhdGhuYW1lXG4gIC8vIG9mIHRoZSBsb2NhdGlvbiBjaGFuZ2VzLiBUaGF0J3Mgd2h5IGBjcmVhdGVNYXRjaFNlbGVjdG9yYCBtZW1vaXplc1xuICAvLyB0aGUgbGF0ZXN0IHJlc3VsdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24ncyBwYXRobmFtZS5cblxuXG4gIHZhciBjcmVhdGVNYXRjaFNlbGVjdG9yID0gZnVuY3Rpb24gY3JlYXRlTWF0Y2hTZWxlY3RvcihwYXRoKSB7XG4gICAgdmFyIGxhc3RQYXRobmFtZSA9IG51bGw7XG4gICAgdmFyIGxhc3RNYXRjaCA9IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgdmFyIF9yZWYgPSBnZXRMb2NhdGlvbihzdGF0ZSkgfHwge30sXG4gICAgICAgICAgcGF0aG5hbWUgPSBfcmVmLnBhdGhuYW1lO1xuXG4gICAgICBpZiAocGF0aG5hbWUgPT09IGxhc3RQYXRobmFtZSkge1xuICAgICAgICByZXR1cm4gbGFzdE1hdGNoO1xuICAgICAgfVxuXG4gICAgICBsYXN0UGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgIHZhciBtYXRjaCA9IG1hdGNoUGF0aChwYXRobmFtZSwgcGF0aCk7XG5cbiAgICAgIGlmICghbWF0Y2ggfHwgIWxhc3RNYXRjaCB8fCBtYXRjaC51cmwgIT09IGxhc3RNYXRjaC51cmwpIHtcbiAgICAgICAgbGFzdE1hdGNoID0gbWF0Y2g7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXN0TWF0Y2g7XG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGdldExvY2F0aW9uOiBnZXRMb2NhdGlvbixcbiAgICBnZXRBY3Rpb246IGdldEFjdGlvbixcbiAgICBnZXRSb3V0ZXI6IGdldFJvdXRlcixcbiAgICBnZXRTZWFyY2g6IGdldFNlYXJjaCxcbiAgICBnZXRIYXNoOiBnZXRIYXNoLFxuICAgIGNyZWF0ZU1hdGNoU2VsZWN0b3I6IGNyZWF0ZU1hdGNoU2VsZWN0b3JcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVNlbGVjdG9yczsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQS9CQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFIQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUEzREE7QUFDQTtBQW9FQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/selectors.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/structure/plain/getIn.js": -/*!***************************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/structure/plain/getIn.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n if (!state) {\n return state;\n }\n\n var length = path.length;\n\n if (!length) {\n return undefined;\n }\n\n var result = state;\n\n for (var i = 0; i < length && !!result; ++i) {\n result = result[path[i]];\n }\n\n return result;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL3N0cnVjdHVyZS9wbGFpbi9nZXRJbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29ubmVjdGVkLXJlYWN0LXJvdXRlci9lc20vc3RydWN0dXJlL3BsYWluL2dldEluLmpzP2Q5MGMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogQ29kZSBmcm9tIGdpdGh1Yi5jb20vZXJpa3Jhcy9yZWR1eC1mb3JtIGJ5IEVyaWsgUmFzbXVzc2VuICovXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgcGF0aCkge1xuICBpZiAoIXN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBzdGF0ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhbaV1dO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldEluOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBbUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/structure/plain/getIn.js\n"); - -/***/ }), - -/***/ "../node_modules/connected-react-router/esm/structure/plain/index.js": -/*!***************************************************************************!*\ - !*** ../node_modules/connected-react-router/esm/structure/plain/index.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getIn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getIn */ \"../node_modules/connected-react-router/esm/structure/plain/getIn.js\");\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\nvar structure = {\n fromJS: function fromJS(value) {\n return value;\n },\n getIn: _getIn__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n merge: function merge(state, payload) {\n return _objectSpread({}, state, payload);\n },\n toJS: function toJS(value) {\n return value;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (structure);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXIvZXNtL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29ubmVjdGVkLXJlYWN0LXJvdXRlci9lc20vc3RydWN0dXJlL3BsYWluL2luZGV4LmpzPzU1ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7IG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7IH0pKTsgfSBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgZ2V0SW4gZnJvbSAnLi9nZXRJbic7XG52YXIgc3RydWN0dXJlID0ge1xuICBmcm9tSlM6IGZ1bmN0aW9uIGZyb21KUyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgZ2V0SW46IGdldEluLFxuICBtZXJnZTogZnVuY3Rpb24gbWVyZ2Uoc3RhdGUsIHBheWxvYWQpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgc3RhdGUsIHBheWxvYWQpO1xuICB9LFxuICB0b0pTOiBmdW5jdGlvbiB0b0pTKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgc3RydWN0dXJlOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBVkE7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/connected-react-router/esm/structure/plain/index.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/fn/regexp/escape.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/fn/regexp/escape.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ../../modules/core.regexp.escape */ \"../node_modules/core-js/modules/core.regexp.escape.js\");\n\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"../node_modules/core-js/modules/_core.js\").RegExp.escape;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzPzc4NmEiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/fn/regexp/escape.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_a-function.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_a-function.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzPzZmYzQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_a-function.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_a-number-value.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/_a-number-value.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/NjU0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_a-number-value.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_add-to-unscopables.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/_add-to-unscopables.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('unscopables');\n\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\n\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcz8zOWY5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_add-to-unscopables.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_advance-string-index.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/_advance-string-index.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar at = __webpack_require__(/*! ./_string-at */ \"../node_modules/core-js/modules/_string-at.js\")(true); // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\n\n\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/NzU1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_advance-string-index.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_an-instance.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) {\n throw TypeError(name + ': incorrect invocation!');\n }\n\n return it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/MTJlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_an-instance.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_an-object.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_an-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcz8zYzAxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_an-object.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-copy-within.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_array-copy-within.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = [].copyWithin || function copyWithin(target\n/* = 0 */\n, start\n/* = 0, end = @length */\n) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n\n while (count-- > 0) {\n if (from in O) O[to] = O[from];else delete O[to];\n to += inc;\n from += inc;\n }\n\n return O;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/MjRhOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQWxCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-copy-within.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-fill.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_array-fill.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = function fill(value\n/* , start = 0, end = @length */\n) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n\n while (endPos > index) {\n O[index++] = value;\n }\n\n return O;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzPzNkZjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBUkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-fill.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-from-iterable.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/_array-from-iterable.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzPzc2ZjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-from-iterable.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-includes.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/_array-includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value; // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++]; // eslint-disable-next-line no-self-compare\n\n if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not\n } else for (; length > index; index++) {\n if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n }\n }\n return !IS_INCLUDES && -1;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YjFkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFFQTtBQWRBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-includes.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-methods.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_array-methods.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar IObject = __webpack_require__(/*! ./_iobject */ \"../node_modules/core-js/modules/_iobject.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar asc = __webpack_require__(/*! ./_array-species-create */ \"../node_modules/core-js/modules/_array-species-create.js\");\n\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n\n for (; length > index; index++) {\n if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3:\n return true;\n // some\n\n case 5:\n return val;\n // find\n\n case 6:\n return index;\n // findIndex\n\n case 2:\n result.push(val);\n // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n }\n\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzP2Q3MDciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQVpBO0FBQ0E7QUFZQTtBQXJCQTtBQVJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-methods.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-reduce.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/_array-reduce.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar IObject = __webpack_require__(/*! ./_iobject */ \"../node_modules/core-js/modules/_iobject.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n\n index += i;\n\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n\n for (; isRight ? index >= 0 : length > index; index += i) {\n if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n }\n\n return memo;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcz9mNDE2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBckJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-reduce.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-species-constructor.js": -/*!*********************************************************************!*\ - !*** ../node_modules/core-js/modules/_array-species-constructor.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar isArray = __webpack_require__(/*! ./_is-array */ \"../node_modules/core-js/modules/_is-array.js\");\n\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (original) {\n var C;\n\n if (isArray(original)) {\n C = original.constructor; // cross-realm fallback\n\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n }\n\n return C === undefined ? Array : C;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzPzQyN2EiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-species-constructor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_array-species-create.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/_array-species-create.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ \"../node_modules/core-js/modules/_array-species-constructor.js\");\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/MGI5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_array-species-create.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_bind.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_bind.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar invoke = __webpack_require__(/*! ./_invoke */ \"../node_modules/core-js/modules/_invoke.js\");\n\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function construct(F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) {\n n[i] = 'a[' + i + ']';\n } // eslint-disable-next-line no-new-func\n\n\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n }\n\n return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that\n/* , ...args */\n) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n\n var bound = function bound()\n /* args... */\n {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzP2EwMGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFMQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBUkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_bind.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_classof.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_classof.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nvar TAG = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('toStringTag'); // ES3 wrong here\n\n\nvar ARG = cof(function () {\n return arguments;\n}()) == 'Arguments'; // fallback for IE11 Script Access Denied error\n\nvar tryGet = function tryGet(it, key) {\n try {\n return it[key];\n } catch (e) {\n /* empty */\n }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T // builtinTag case\n : ARG ? cof(O) // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzPzM4NTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_classof.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_cof.js": -/*!***********************************************!*\ - !*** ../node_modules/core-js/modules/_cof.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvZi5qcz85ZmU1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_cof.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_collection-strong.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_collection-strong.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar create = __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\");\n\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nvar $iterDefine = __webpack_require__(/*! ./_iter-define */ \"../node_modules/core-js/modules/_iter-define.js\");\n\nvar step = __webpack_require__(/*! ./_iter-step */ \"../node_modules/core-js/modules/_iter-step.js\");\n\nvar setSpecies = __webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\");\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar fastKey = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").fastKey;\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function getEntry(that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index]; // frozen object case\n\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n\n that._i = create(null); // index\n\n that._f = undefined; // first entry\n\n that._l = undefined; // last entry\n\n that[SIZE] = 0; // size\n\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function _delete(key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n }\n\n return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn\n /* , that = undefined */\n ) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this); // revert to the last existing entry\n\n while (entry && entry.r) {\n entry = entry.p;\n }\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function get() {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function def(that, key, value) {\n var entry = getEntry(that, key);\n var prev, index; // change existing entry\n\n if (entry) {\n entry.v = value; // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true),\n // <- index\n k: key,\n // <- key\n v: value,\n // <- value\n p: prev = that._l,\n // <- previous entry\n n: undefined,\n // <- next entry\n r: false // <- removed\n\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++; // add to index\n\n if (index !== 'F') that._i[index] = entry;\n }\n\n return that;\n },\n getEntry: getEntry,\n setStrong: function setStrong(C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n\n this._k = kind; // kind\n\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l; // revert to the last existing entry\n\n while (entry && entry.r) {\n entry = entry.p;\n } // get next entry\n\n\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n } // return step by kind\n\n\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); // add [@@species], 23.1.2.2, 23.2.2.2\n\n setSpecies(NAME);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/NWQwYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQXZDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQS9EQTtBQWlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBdEZBO0FBd0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBc0JBO0FBQ0E7QUFwSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_collection-strong.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_collection-to-json.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/_collection-to-json.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\nvar from = __webpack_require__(/*! ./_array-from-iterable */ \"../node_modules/core-js/modules/_array-from-iterable.js\");\n\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcz9jZjA2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_collection-to-json.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_collection-weak.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_collection-weak.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\nvar getWeak = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").getWeak;\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nvar createArrayMethod = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\");\n\nvar $has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0; // fallback for uncaught frozen keys\n\nvar uncaughtFrozenStore = function uncaughtFrozenStore(that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function UncaughtFrozenStore() {\n this.a = [];\n};\n\nvar findUncaughtFrozen = function findUncaughtFrozen(store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function get(key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function has(key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function set(key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;else this.a.push([key, value]);\n },\n 'delete': function _delete(key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\nmodule.exports = {\n getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n\n that._i = id++; // collection id\n\n that._l = undefined; // leak store for uncaught frozen objects\n\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function _delete(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function def(that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcz9iMzVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQVZBO0FBYUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFuQkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQWtCQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFFQTtBQWpDQTtBQW1DQTtBQW5DQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_collection-weak.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_collection.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_collection.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\nvar meta = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar $iterDetect = __webpack_require__(/*! ./_iter-detect */ \"../node_modules/core-js/modules/_iter-detect.js\");\n\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\");\n\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"../node_modules/core-js/modules/_inherit-if-required.js\");\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n\n var fixMethod = function fixMethod(KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY, KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) {\n fn.call(this, a === 0 ? 0 : a);\n return this;\n } : function set(a, b) {\n fn.call(this, a === 0 ? 0 : a, b);\n return this;\n });\n };\n\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C(); // early implementations not supports chaining\n\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n\n var THROWS_ON_PRIMITIVES = fails(function () {\n instance.has(1);\n }); // most early implementations doesn't supports iterables, most modern - not close it correctly\n\n var ACCEPT_ITERABLES = $iterDetect(function (iter) {\n new C(iter);\n }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n\n while (index--) {\n $instance[ADDER](index, index);\n }\n\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); // weak collections should not contains .clear method\n\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n return C;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzPzAyNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFSQTtBQUZBO0FBQ0E7QUFZQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU1BO0FBQUE7QUFQQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFyRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_collection.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_core.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_core.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var core = module.exports = {\n version: '2.6.11'\n};\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzPzQ3OTQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_core.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_create-property.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_create-property.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));else object[index] = value;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcz8wODg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_create-property.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_ctx.js": -/*!***********************************************!*\ - !*** ../node_modules/core-js/modules/_ctx.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n\n switch (length) {\n case 1:\n return function (a) {\n return fn.call(that, a);\n };\n\n case 2:\n return function (a, b) {\n return fn.call(that, a, b);\n };\n\n case 3:\n return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n\n return function ()\n /* ...args */\n {\n return fn.apply(that, arguments);\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcz9mNjU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBREE7QUFQQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQWRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_ctx.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_date-to-iso-string.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/_date-to-iso-string.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function lz(num) {\n return num > 9 ? num : '0' + num;\n}; // PhantomJS / old WebKit has a broken implementations\n\n\nmodule.exports = fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n}) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcz9jYjI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_date-to-iso-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_date-to-primitive.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_date-to-primitive.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/NWUyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_date-to-primitive.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_defined.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_defined.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzPzE4MjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_defined.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_descriptors.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_descriptors.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', {\n get: function get() {\n return 7;\n }\n }).a != 7;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/MTg2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_descriptors.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_dom-create.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_dom-create.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar document = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").document; // typeof document.createElement is 'object' in old IE\n\n\nvar is = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzPzlhMDgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_dom-create.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_enum-bug-keys.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// IE 8- don't enum bug keys\nmodule.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzPzdkMGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_enum-bug-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_enum-keys.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_enum-keys.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"../node_modules/core-js/modules/_object-gops.js\");\n\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"../node_modules/core-js/modules/_object-pie.js\");\n\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n\n while (symbols.length > i) {\n if (isEnum.call(it, key = symbols[i++])) result.push(key);\n }\n }\n\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcz85NmQ0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_enum-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_export.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/_export.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function $export(type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined; // export native or passed\n\n out = (own ? target : source)[key]; // bind timers to global for call from export context\n\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; // extend global\n\n if (target) redefine(target, key, out, type & $export.U); // export\n\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\n\nglobal.core = core; // type bitmap\n\n$export.F = 1; // forced\n\n$export.G = 2; // global\n\n$export.S = 4; // static\n\n$export.P = 8; // proto\n\n$export.B = 16; // bind\n\n$export.W = 32; // wrap\n\n$export.U = 64; // safe\n\n$export.R = 128; // real proto method for `library`\n\nmodule.exports = $export;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcz81ZmE1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_export.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_fails-is-regexp.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_fails-is-regexp.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var MATCH = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('match');\n\nmodule.exports = function (KEY) {\n var re = /./;\n\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) {\n /* empty */\n }\n }\n\n return true;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcz8xNjVlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_fails-is-regexp.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_fails.js": -/*!*************************************************!*\ - !*** ../node_modules/core-js/modules/_fails.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/MTNiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_fails.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_fix-re-wks.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_fix-re-wks.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\n__webpack_require__(/*! ./es6.regexp.exec */ \"../node_modules/core-js/modules/es6.regexp.exec.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nvar wks = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\");\n\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"../node_modules/core-js/modules/_regexp-exec.js\");\n\nvar SPECIES = wks('species');\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n\n re.exec = function () {\n var result = [];\n result.groups = {\n a: '7'\n };\n return result;\n };\n\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n\n re.exec = function () {\n return originalExec.apply(this, arguments);\n };\n\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n}();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n\n O[SYMBOL] = function () {\n return 7;\n };\n\n return ''[KEY](O) != 7;\n });\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n\n re.constructor[SPECIES] = function () {\n return re;\n };\n }\n\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS || KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(defined, SYMBOL, ''[KEY], function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return {\n done: true,\n value: nativeRegExpMethod.call(regexp, str, arg2)\n };\n }\n\n return {\n done: true,\n value: nativeMethod.call(str, regexp, arg2)\n };\n }\n\n return {\n done: false\n };\n });\n var strfn = fns[0];\n var rxfn = fns[1];\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) {\n return rxfn.call(string, this, arg);\n } // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) {\n return rxfn.call(string, this);\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzPzVhMjciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBQ0E7QUFJQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBTUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFkQTtBQWlCQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRkE7QUFHQTtBQUhBO0FBS0E7QUFMQTtBQU1BO0FBTkE7QUFRQTtBQTdEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_fix-re-wks.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_flags.js": -/*!*************************************************!*\ - !*** ../node_modules/core-js/modules/_flags.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 21.2.5.3 get RegExp.prototype.flags\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MzAxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_flags.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_flatten-into-array.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/_flatten-into-array.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\n\nvar isArray = __webpack_require__(/*! ./_is-array */ \"../node_modules/core-js/modules/_is-array.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar IS_CONCAT_SPREADABLE = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n spreadable = false;\n\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n\n sourceIndex++;\n }\n\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYXR0ZW4taW50by1hcnJheS5qcz9mMDJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_flatten-into-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_for-of.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/_for-of.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar call = __webpack_require__(/*! ./_iter-call */ \"../node_modules/core-js/modules/_iter-call.js\");\n\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"../node_modules/core-js/modules/_is-array-iter.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"../node_modules/core-js/modules/core.get-iterator-method.js\");\n\nvar BREAK = {};\nvar RETURN = {};\n\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () {\n return iterable;\n } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); // fast case for arrays with default iterator\n\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\n\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcz8xZWE1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_for-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_function-to-string.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/_function-to-string.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! ./_shared */ \"../node_modules/core-js/modules/_shared.js\")('native-function-to-string', Function.toString);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcz8yNDY3Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_function-to-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_global.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/_global.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self // eslint-disable-next-line no-new-func\n: Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcz8zZjllIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_global.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_has.js": -/*!***********************************************!*\ - !*** ../node_modules/core-js/modules/_has.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcz83YjM3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_has.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_hide.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_hide.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzP2I2MzkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_hide.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_html.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_html.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var document = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").document;\n\nmodule.exports = document && document.documentElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzPzA4YmIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_html.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_ie8-dom-define.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/_ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"../node_modules/core-js/modules/_dom-create.js\")('div'), 'a', {\n get: function get() {\n return 7;\n }\n }).a != 7;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/MWQ2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_ie8-dom-define.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_inherit-if-required.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/_inherit-if-required.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar setPrototypeOf = __webpack_require__(/*! ./_set-proto */ \"../node_modules/core-js/modules/_set-proto.js\").set;\n\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n }\n\n return that;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzPzhjNGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_inherit-if-required.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_invoke.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/_invoke.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n\n switch (args.length) {\n case 0:\n return un ? fn() : fn.call(that);\n\n case 1:\n return un ? fn(args[0]) : fn.call(that, args[0]);\n\n case 2:\n return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);\n\n case 3:\n return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);\n\n case 4:\n return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);\n }\n\n return fn.apply(that, args);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcz8yODU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFUQTtBQUNBO0FBVUE7QUFiQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_invoke.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iobject.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_iobject.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\"); // eslint-disable-next-line no-prototype-builtins\n\n\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzPzBhNmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iobject.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_is-array-iter.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_is-array-iter.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('iterator');\n\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzP2Q4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_is-array-iter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_is-array.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_is-array.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/NWRmOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_is-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_is-integer.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_is-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar floor = Math.floor;\n\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1pbnRlZ2VyLmpzP2M0OGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_is-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_is-object.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_is-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = function (it) {\n return _typeof(it) === 'object' ? it !== null : typeof it === 'function';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcz8wNmM4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_is-object.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_is-regexp.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_is-regexp.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nvar MATCH = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('match');\n\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcz8zNTUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_is-regexp.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iter-call.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_iter-call.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value); // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcz84ODk5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBUkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iter-call.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iter-create.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_iter-create.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar create = __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\");\n\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\");\n\nvar IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n\n__webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('iterator'), function () {\n return this;\n});\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, {\n next: descriptor(1, next)\n });\n setToStringTag(Constructor, NAME + ' Iterator');\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/YTZlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iter-create.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iter-define.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_iter-define.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"../node_modules/core-js/modules/_iter-create.js\");\n\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('iterator');\n\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\n\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function returnThis() {\n return this;\n};\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n\n var getMethod = function getMethod(kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n\n switch (kind) {\n case KEYS:\n return function keys() {\n return new Constructor(this, kind);\n };\n\n case VALUES:\n return function values() {\n return new Constructor(this, kind);\n };\n }\n\n return function entries() {\n return new Constructor(this, kind);\n };\n };\n\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype; // Fix native\n\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true); // fix for some old engines\n\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n } // fix Array#{values, @@iterator}.name in V8 / FF\n\n\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n\n $default = function values() {\n return $native.call(this);\n };\n } // Define iterator\n\n\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n } // Plug for library\n\n\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n\n return methods;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MjcwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExQkE7QUFDQTtBQUNBO0FBMkJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQS9CQTtBQUNBO0FBQ0E7QUFnQ0E7QUFDQTtBQW5DQTtBQUNBO0FBQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBbERBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iter-define.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iter-detect.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_iter-detect.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('iterator');\n\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n\n riter['return'] = function () {\n SAFE_CLOSING = true;\n }; // eslint-disable-next-line no-throw-literal\n\n\n Array.from(riter, function () {\n throw 2;\n });\n} catch (e) {\n /* empty */\n}\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n\n iter.next = function () {\n return {\n done: safe = true\n };\n };\n\n arr[ITERATOR] = function () {\n return iter;\n };\n\n exec(arr);\n } catch (e) {\n /* empty */\n }\n\n return safe;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/Y2U1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFKQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTEE7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQVZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iter-detect.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iter-step.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_iter-step.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (done, value) {\n return {\n value: value,\n done: !!done\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcz81NTUxIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iter-step.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_iterators.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcz8yMWI4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge307XG4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_iterators.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_library.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_library.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = false;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzP2MwNGIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_library.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_math-expm1.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_math-expm1.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = !$expm1 // Old FF bug\n|| $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 // Tor Browser bug\n|| $expm1(-2e-17) != -2e-17 ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzP2M4Y2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFNQTtBQU5BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_math-expm1.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_math-fround.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_math-fround.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(/*! ./_math-sign */ \"../node_modules/core-js/modules/_math-sign.js\");\n\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function roundTiesToEven(n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs); // eslint-disable-next-line no-self-compare\n\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/ZWI1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_math-fround.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_math-log1p.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_math-log1p.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzPzA5YjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_math-log1p.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_math-scale.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_math-scale.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (arguments.length === 0 // eslint-disable-next-line no-self-compare\n || x != x // eslint-disable-next-line no-self-compare\n || inLow != inLow // eslint-disable-next-line no-self-compare\n || inHigh != inHigh // eslint-disable-next-line no-self-compare\n || outLow != outLow // eslint-disable-next-line no-self-compare\n || outHigh != outHigh) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzPzY5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUE7QUFDQTtBQWZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_math-scale.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_math-sign.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_math-sign.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcz9mZmFmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_math-sign.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_meta.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_meta.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar META = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\")('meta');\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar setDesc = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar FREEZE = !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return isExtensible(Object.preventExtensions({}));\n});\n\nvar setMeta = function setMeta(it) {\n setDesc(it, META, {\n value: {\n i: 'O' + ++id,\n // object ID\n w: {} // weak collections IDs\n\n }\n });\n};\n\nvar fastKey = function fastKey(it, create) {\n // return primitive with prefix\n if (!isObject(it)) return _typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F'; // not necessary to add metadata\n\n if (!create) return 'E'; // add missing metadata\n\n setMeta(it); // return object ID\n }\n\n return it[META].i;\n};\n\nvar getWeak = function getWeak(it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true; // not necessary to add metadata\n\n if (!create) return false; // add missing metadata\n\n setMeta(it); // return hash weak collections IDs\n }\n\n return it[META].w;\n}; // add metadata on freeze-family methods calling\n\n\nvar onFreeze = function onFreeze(it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\n\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzP2NjODMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFYQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQVRBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_meta.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_metadata.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_metadata.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar Map = __webpack_require__(/*! ./es6.map */ \"../node_modules/core-js/modules/es6.map.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar shared = __webpack_require__(/*! ./_shared */ \"../node_modules/core-js/modules/_shared.js\")('metadata');\n\nvar store = shared.store || (shared.store = new (__webpack_require__(/*! ./es6.weak-map */ \"../node_modules/core-js/modules/es6.weak-map.js\"))());\n\nvar getOrCreateMetadataMap = function getOrCreateMetadataMap(target, targetKey, create) {\n var targetMetadata = store.get(target);\n\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n\n var keyMetadata = targetMetadata.get(targetKey);\n\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n }\n\n return keyMetadata;\n};\n\nvar ordinaryHasOwnMetadata = function ordinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\n\nvar ordinaryGetOwnMetadata = function ordinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\n\nvar ordinaryDefineOwnMetadata = function ordinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\n\nvar ordinaryOwnMetadataKeys = function ordinaryOwnMetadataKeys(target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) {\n keys.push(key);\n });\n return keys;\n};\n\nvar toMetaKey = function toMetaKey(it) {\n return it === undefined || _typeof(it) == 'symbol' ? it : String(it);\n};\n\nvar exp = function exp(O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/NTM5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFWQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_microtask.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_microtask.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar macrotask = __webpack_require__(/*! ./_task */ \"../node_modules/core-js/modules/_task.js\").set;\n\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function flush() {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n\n while (head) {\n fn = head.fn;\n head = head.next;\n\n try {\n fn();\n } catch (e) {\n if (head) notify();else last = undefined;\n throw e;\n }\n }\n\n last = undefined;\n if (parent) parent.enter();\n }; // Node.js\n\n\n if (isNode) {\n notify = function notify() {\n process.nextTick(flush);\n }; // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, {\n characterData: true\n }); // eslint-disable-line no-new\n\n notify = function notify() {\n node.data = toggle = !toggle;\n }; // environments with maybe non-completely correct, but existent Promise\n\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n\n notify = function notify() {\n promise.then(flush);\n }; // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n\n } else {\n notify = function notify() {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = {\n fn: fn,\n next: undefined\n };\n if (last) last.next = task;\n\n if (!head) {\n head = task;\n notify();\n }\n\n last = task;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcz81YzNjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQUNBO0FBREE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBTkE7QUFyREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_microtask.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_new-promise-capability.js": -/*!******************************************************************!*\ - !*** ../node_modules/core-js/modules/_new-promise-capability.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 25.4.1.5 NewPromiseCapability(C)\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzPzgyZDMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_new-promise-capability.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-assign.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_object-assign.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 19.1.2.1 Object.assign(target, source, ...)\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"../node_modules/core-js/modules/_object-gops.js\");\n\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"../node_modules/core-js/modules/_object-pie.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar IObject = __webpack_require__(/*! ./_iobject */ \"../node_modules/core-js/modules/_iobject.js\");\n\nvar $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug)\n\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n var A = {};\n var B = {}; // eslint-disable-next-line no-undef\n\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) {\n B[k] = k;\n });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) {\n // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n }\n\n return T;\n} : $assign;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzPzM1MWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQVJBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBekJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-assign.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-create.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_object-create.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"../node_modules/core-js/modules/_object-dps.js\");\n\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"../node_modules/core-js/modules/_enum-bug-keys.js\");\n\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"../node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nvar Empty = function Empty() {\n /* empty */\n};\n\nvar PROTOTYPE = 'prototype'; // Create object with fake `null` prototype: use iframe Object with cleared prototype\n\nvar _createDict = function createDict() {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(/*! ./_dom-create */ \"../node_modules/core-js/modules/_dom-create.js\")('iframe');\n\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n\n __webpack_require__(/*! ./_html */ \"../node_modules/core-js/modules/_html.js\").appendChild(iframe);\n\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n _createDict = iframeDocument.F;\n\n while (i--) {\n delete _createDict[PROTOTYPE][enumBugKeys[i]];\n }\n\n return _createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null; // add \"__proto__\" for Object.getPrototypeOf polyfill\n\n result[IE_PROTO] = O;\n } else result = _createDict();\n\n return Properties === undefined ? result : dPs(result, Properties);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzPzU3MWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFsQkE7QUFDQTtBQW9CQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBTUE7QUFUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-create.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-dp.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_object-dp.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"../node_modules/core-js/modules/_ie8-dom-define.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar dP = Object.defineProperty;\nexports.f = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) {\n /* empty */\n }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcz81MzUyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-dp.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-dps.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-dps.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n\n while (length > i) {\n dP.f(O, P = keys[i++], Properties[P]);\n }\n\n return O;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzP2E1NGQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFQQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-dps.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-forced-pam.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_object-forced-pam.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // Forced replacement prototype accessors methods\n\nmodule.exports = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\") || !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n var K = Math.random(); // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n\n __defineSetter__.call(null, K, function () {\n /* empty */\n });\n\n delete __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\")[K];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/OGY3NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-forced-pam.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-gopd.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-gopd.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"../node_modules/core-js/modules/_object-pie.js\");\n\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"../node_modules/core-js/modules/_ie8-dom-define.js\");\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nexports.f = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) {\n /* empty */\n }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/ZDUzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUFBO0FBQ0E7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-gopd.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-gopn-ext.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_object-gopn-ext.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f;\n\nvar toString = {}.toString;\nvar windowNames = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function getWindowNames(it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcz81MTg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-gopn-ext.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-gopn.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-gopn.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"../node_modules/core-js/modules/_object-keys-internal.js\");\n\nvar hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"../node_modules/core-js/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/Y2M4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-gopn.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-gops.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-gops.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports.f = Object.getOwnPropertySymbols;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/ZDI4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-gops.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-gpo.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-gpo.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"../node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n }\n\n return O instanceof Object ? ObjectProto : null;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzPzAzNTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-gpo.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-keys-internal.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/_object-keys-internal.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"../node_modules/core-js/modules/_array-includes.js\")(false);\n\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"../node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n\n for (key in O) {\n if (key != IE_PROTO) has(O, key) && result.push(key);\n } // Don't enum bug & hidden keys\n\n\n while (names.length > i) {\n if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n }\n\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/NmFkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFFQTtBQVZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-keys-internal.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-keys.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"../node_modules/core-js/modules/_object-keys-internal.js\");\n\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"../node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MmVlMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-pie.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-pie.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports.f = {}.propertyIsEnumerable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzPzIxZDEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-pie.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-sap.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_object-sap.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () {\n fn(1);\n }), 'Object', exp);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzPzgxMTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-sap.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_object-to-array.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_object-to-array.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar isEnum = __webpack_require__(/*! ./_object-pie */ \"../node_modules/core-js/modules/_object-pie.js\").f;\n\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n\n while (length > i) {\n key = keys[i++];\n\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n\n return result;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC10by1hcnJheS5qcz9hNDY1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFiQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_object-to-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_own-keys.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_own-keys.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\");\n\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"../node_modules/core-js/modules/_object-gops.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar Reflect = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").Reflect;\n\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OGZmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_own-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_parse-float.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_parse-float.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $parseFloat = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").parseFloat;\n\nvar $trim = __webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\").trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(/*! ./_string-ws */ \"../node_modules/core-js/modules/_string-ws.js\") + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/YzE0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_parse-float.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_parse-int.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_parse-int.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $parseInt = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").parseInt;\n\nvar $trim = __webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\").trim;\n\nvar ws = __webpack_require__(/*! ./_string-ws */ \"../node_modules/core-js/modules/_string-ws.js\");\n\nvar hex = /^[-+]?0[xX]/;\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, radix >>> 0 || (hex.test(string) ? 16 : 10));\n} : $parseInt;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcz80OWUzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_parse-int.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_perform.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_perform.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (exec) {\n try {\n return {\n e: false,\n v: exec()\n };\n } catch (e) {\n return {\n e: true,\n v: e\n };\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzPzYyZmIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_perform.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_promise-resolve.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/_promise-resolve.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"../node_modules/core-js/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcz85MjEyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_promise-resolve.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_property-desc.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_property-desc.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzPzU5NjkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_property-desc.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_redefine-all.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/_redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n redefine(target, key, src[key], safe);\n }\n\n return target;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcz9mOWU3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_redefine-all.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_redefine.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_redefine.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar SRC = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\")('src');\n\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"../node_modules/core-js/modules/_function-to-string.js\");\n\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n } // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/YjE0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBYkE7QUFDQTtBQURBO0FBaUJBO0FBakJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_redefine.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_regexp-exec-abstract.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/_regexp-exec-abstract.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\nvar builtinExec = RegExp.prototype.exec; // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\n\nmodule.exports = function (R, S) {\n var exec = R.exec;\n\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n\n if (_typeof(result) !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return builtinExec.call(R, S);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/MTZlZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_regexp-exec-abstract.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_regexp-exec.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_regexp-exec.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"../node_modules/core-js/modules/_flags.js\");\n\nvar nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\n\nvar nativeReplace = String.prototype.replace;\nvar patchedExec = nativeExec;\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n}(); // nonparticipating capturing group, copied from es5-shim's String#split patch.\n\n\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/OTQwMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBekJBO0FBMkJBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_regexp-exec.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_replacer.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_replacer.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/NjU3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_replacer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_same-value.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_same-value.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzPzM2ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_same-value.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_set-collection-from.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/_set-collection-from.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/proposal-setmap-offrom/\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, {\n from: function from(source\n /* , mapFn, thisArg */\n ) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n\n return new this(A);\n }\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzP2QxZmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFsQkE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_set-collection-from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_set-collection-of.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_set-collection-of.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/proposal-setmap-offrom/\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, {\n of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n\n while (length--) {\n A[length] = arguments[length];\n }\n\n return new this(A);\n }\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/NDA0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_set-collection-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_set-proto.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_set-proto.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar check = function check(O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\n\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) {\n buggy = true;\n }\n\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcz9kZjI3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBSkE7QUFOQTtBQWFBO0FBZkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_set-proto.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_set-species.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function get() {\n return this;\n }\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/MTNjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_set-species.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_set-to-string-tag.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var def = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar TAG = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, {\n configurable: true,\n value: tag\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/OGNmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_set-to-string-tag.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_shared-key.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var shared = __webpack_require__(/*! ./_shared */ \"../node_modules/core-js/modules/_shared.js\")('keys');\n\nvar uid = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\");\n\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzP2YyNDIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_shared-key.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_shared.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/_shared.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcz82NTUyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_shared.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_species-constructor.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/_species-constructor.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzP2U0NWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_species-constructor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_strict-method.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_strict-method.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () {\n /* empty */\n }, 1) : method.call(null);\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzP2ZmYWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_strict-method.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-at.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_string-at.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\"); // true -> String#at\n// false -> String#codePointAt\n\n\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcz9iOTEwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-at.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-context.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/_string-context.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"../node_modules/core-js/modules/_is-regexp.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/MDI1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-context.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-html.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_string-html.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nvar quot = /\"/g; // B.2.3.2.1 CreateHTML(string, tag, attribute, value)\n\nvar createHTML = function createHTML(string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\n\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/MmM0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-html.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-pad.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_string-pad.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar repeat = __webpack_require__(/*! ./_string-repeat */ \"../node_modules/core-js/modules/_string-repeat.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzPzcxYmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-pad.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-repeat.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/_string-repeat.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n\n for (; n > 0; (n >>>= 1) && (str += str)) {\n if (n & 1) res += str;\n }\n\n return res;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzP2E3NTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-repeat.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-trim.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_string-trim.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar spaces = __webpack_require__(/*! ./_string-ws */ \"../node_modules/core-js/modules/_string-ws.js\");\n\nvar space = '[' + spaces + ']';\nvar non = \"\\u200B\\x85\";\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function exporter(KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n}; // 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\n\n\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/ODQ2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFQQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-trim.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_string-ws.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_string-ws.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = \"\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" + \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcz80YWYzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_string-ws.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_task.js": -/*!************************************************!*\ - !*** ../node_modules/core-js/modules/_task.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar invoke = __webpack_require__(/*! ./_invoke */ \"../node_modules/core-js/modules/_invoke.js\");\n\nvar html = __webpack_require__(/*! ./_html */ \"../node_modules/core-js/modules/_html.js\");\n\nvar cel = __webpack_require__(/*! ./_dom-create */ \"../node_modules/core-js/modules/_dom-create.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function run() {\n var id = +this; // eslint-disable-next-line no-prototype-builtins\n\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar listener = function listener(event) {\n run.call(event.data);\n}; // Node.js 0.9+ & IE10+ has setImmediate, otherwise:\n\n\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n\n while (arguments.length > i) {\n args.push(arguments[i++]);\n }\n\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n\n defer(counter);\n return counter;\n };\n\n clearTask = function clearImmediate(id) {\n delete queue[id];\n }; // Node.js 0.8-\n\n\n if (__webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\")(process) == 'process') {\n defer = function defer(id) {\n process.nextTick(ctx(run, id, 1));\n }; // Sphere (JS game engine) Dispatch API\n\n } else if (Dispatch && Dispatch.now) {\n defer = function defer(id) {\n Dispatch.now(ctx(run, id, 1));\n }; // Browsers with MessageChannel, includes WebWorkers\n\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function defer(id) {\n global.postMessage(id + '', '*');\n };\n\n global.addEventListener('message', listener, false); // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function defer(id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n }; // Rest old browsers\n\n } else {\n defer = function defer(id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\n\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzP2U0MTMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFUQTtBQUNBO0FBVUE7QUFDQTtBQWJBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFEQTtBQU1BO0FBQ0E7QUFGQTtBQUNBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTkE7QUFRQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFDQTtBQURBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_task.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-absolute-index.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/_to-absolute-index.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar max = Math.max;\nvar min = Math.min;\n\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/MDU0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-absolute-index.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-index.js": -/*!****************************************************!*\ - !*** ../node_modules/core-js/modules/_to-index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MTlkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-index.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-integer.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzPzlhZjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-iobject.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_to-iobject.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"../node_modules/core-js/modules/_iobject.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (it) {\n return IObject(defined(it));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzPzlhNWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-iobject.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-length.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_to-length.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar min = Math.min;\n\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcz80YTllIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-length.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-object.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/_to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (it) {\n return Object(defined(it));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcz81MjcxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-object.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_to-primitive.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/_to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\"); // instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\n\n\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcz9lNGM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_to-primitive.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_typed-array.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/_typed-array.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nif (__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\")) {\n var LIBRARY = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\");\n\n var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\n var fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\n var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n var $typed = __webpack_require__(/*! ./_typed */ \"../node_modules/core-js/modules/_typed.js\");\n\n var $buffer = __webpack_require__(/*! ./_typed-buffer */ \"../node_modules/core-js/modules/_typed-buffer.js\");\n\n var ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\n var anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\n var propertyDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\n var hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\n var redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\n var toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\n var toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\n var toIndex = __webpack_require__(/*! ./_to-index */ \"../node_modules/core-js/modules/_to-index.js\");\n\n var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\n var toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\n var has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\n var classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\n var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\n var toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\n var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"../node_modules/core-js/modules/_is-array-iter.js\");\n\n var create = __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\");\n\n var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\n var gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f;\n\n var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"../node_modules/core-js/modules/core.get-iterator-method.js\");\n\n var uid = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\");\n\n var wks = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\");\n\n var createArrayMethod = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\");\n\n var createArrayIncludes = __webpack_require__(/*! ./_array-includes */ \"../node_modules/core-js/modules/_array-includes.js\");\n\n var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"../node_modules/core-js/modules/_species-constructor.js\");\n\n var ArrayIterators = __webpack_require__(/*! ./es6.array.iterator */ \"../node_modules/core-js/modules/es6.array.iterator.js\");\n\n var Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\n var $iterDetect = __webpack_require__(/*! ./_iter-detect */ \"../node_modules/core-js/modules/_iter-detect.js\");\n\n var setSpecies = __webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\");\n\n var arrayFill = __webpack_require__(/*! ./_array-fill */ \"../node_modules/core-js/modules/_array-fill.js\");\n\n var arrayCopyWithin = __webpack_require__(/*! ./_array-copy-within */ \"../node_modules/core-js/modules/_array-copy-within.js\");\n\n var $DP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\n var $GOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function toOffset(it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function validate(it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function allocate(C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n }\n\n return new C(length);\n };\n\n var speciesFromList = function speciesFromList(O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function fromList(C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n\n while (length > index) {\n result[index] = list[index++];\n }\n\n return result;\n };\n\n var addGetter = function addGetter(it, key, internal) {\n dP(it, key, {\n get: function get() {\n return this._d[internal];\n }\n });\n };\n\n var $from = function from(source\n /* , mapfn, thisArg */\n ) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n }\n\n O = values;\n }\n\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n\n return result;\n };\n\n var $of = function of()\n /* ...items */\n {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n\n while (length > index) {\n result[index] = arguments[index++];\n }\n\n return result;\n }; // iOS Safari 6.x fails here\n\n\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () {\n arrayToLocaleString.call(new Uint8Array(1));\n });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start\n /* , end */\n ) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn\n /* , thisArg */\n ) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value\n /* , start, end */\n ) {\n // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn\n /* , thisArg */\n ) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate\n /* , thisArg */\n ) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate\n /* , thisArg */\n ) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn\n /* , thisArg */\n ) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement\n /* , fromIndex */\n ) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement\n /* , fromIndex */\n ) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) {\n // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement\n /* , fromIndex */\n ) {\n // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn\n /* , thisArg */\n ) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn\n /* , initialValue */\n ) {\n // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn\n /* , initialValue */\n ) {\n // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n }\n\n return that;\n },\n some: function some(callbackfn\n /* , thisArg */\n ) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(O.buffer, O.byteOffset + $begin * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin));\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike\n /* , offset */\n ) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n\n while (index < len) {\n this[offset + index] = src[index++];\n }\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function isTAIndex(target, key) {\n return isObject(target) && target[TYPED_ARRAY] && _typeof(key) != 'symbol' && key in target && String(+key) == String(key);\n };\n\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true)) ? propertyDesc(2, target[key]) : gOPD(target, key);\n };\n\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true)) && isObject(desc) && has(desc, 'value') && !has(desc, 'get') && !has(desc, 'set') // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable && (!has(desc, 'writable') || desc.writable) && (!has(desc, 'enumerable') || desc.enumerable)) {\n target[key] = desc.value;\n return target;\n }\n\n return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () {\n arrayToString.call({});\n })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function constructor() {\n /* noop */\n },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function get() {\n return this[TYPED_ARRAY];\n }\n }); // eslint-disable-next-line max-statements\n\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n\n var getter = function getter(that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n\n var setter = function setter(that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n\n var addElement = function addElement(that, index) {\n dP(that, index, {\n get: function get() {\n return getter(this, index);\n },\n set: function set(value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n\n while (index < length) {\n addElement(that, index++);\n }\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n\n new TypedArray(null); // eslint-disable-line no-new\n\n new TypedArray(1.5); // eslint-disable-line no-new\n\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass; // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n\n if (!isObject(data)) return new Base(toIndex(data));\n\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined ? new Base(data, toOffset($offset, BYTES), $length) : $offset !== undefined ? new Base(data, toOffset($offset, BYTES)) : new Base(data);\n }\n\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function get() {\n return NAME;\n }\n });\n }\n\n O[NAME] = TypedArray;\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n $export($export.S + $export.F * fails(function () {\n Base.of.call(TypedArray, 1);\n }), NAME, {\n from: $from,\n of: $of\n });\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n $export($export.P, NAME, proto);\n setSpecies(NAME);\n $export($export.P + $export.F * FORCED_SET, NAME, {\n set: $set\n });\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, {\n slice: $slice\n });\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, {\n toLocaleString: $toLocaleString\n });\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () {\n /* empty */\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/NmY0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWhCQTtBQUNBO0FBa0JBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQXJKQTtBQUNBO0FBQ0E7QUF1SkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBUkE7QUFVQTtBQUFBO0FBQUE7QUFDQTtBQVhBO0FBY0E7QUFBQTtBQUFBO0FBQ0E7QUFmQTtBQWlCQTtBQUFBO0FBQUE7QUFDQTtBQWxCQTtBQW9CQTtBQUFBO0FBQUE7QUFDQTtBQXJCQTtBQXVCQTtBQUFBO0FBQUE7QUFDQTtBQXhCQTtBQTBCQTtBQUFBO0FBQUE7QUFDQTtBQTNCQTtBQTZCQTtBQUFBO0FBQ0E7QUE5QkE7QUFnQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWpDQTtBQW1DQTtBQUFBO0FBQUE7QUFDQTtBQXBDQTtBQXNDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdkNBO0FBeUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExQ0E7QUE0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXREQTtBQXdEQTtBQUFBO0FBQUE7QUFDQTtBQXpEQTtBQTJEQTtBQUNBO0FBNURBO0FBOERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQXZFQTtBQUNBO0FBeUVBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFJQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUxBO0FBT0E7QUFQQTtBQURBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBWkE7QUFjQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQWxDQTtBQW9DQTtBQUNBO0FBdENBO0FBd0NBO0FBREE7QUFHQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUVBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQXpKQTtBQW5VQTtBQThkQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_typed-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_typed-buffer.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/_typed-buffer.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\");\n\nvar $typed = __webpack_require__(/*! ./_typed */ \"../node_modules/core-js/modules/_typed.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar toIndex = __webpack_require__(/*! ./_to-index */ \"../node_modules/core-js/modules/_to-index.js\");\n\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f;\n\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar arrayFill = __webpack_require__(/*! ./_array-fill */ \"../node_modules/core-js/modules/_array-fill.js\");\n\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\");\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError; // eslint-disable-next-line no-shadow-restricted-names\n\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; // IEEE754 conversions based on https://github.com/feross/ieee754\n\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value); // eslint-disable-next-line no-self-compare\n\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8) {\n ;\n }\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8) {\n ;\n }\n\n buffer[--i] |= s * 128;\n return buffer;\n}\n\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8) {\n ;\n }\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8) {\n ;\n }\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\n\nfunction packI8(it) {\n return [it & 0xff];\n}\n\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\n\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\n\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\n\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, {\n get: function get() {\n return this[internal];\n }\n });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\n\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n\n for (var i = 0; i < bytes; i++) {\n store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n }\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset\n /* , littleEndian */\n ) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset\n /* , littleEndian */\n ) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset\n /* , littleEndian */\n ) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset\n /* , littleEndian */\n ) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset\n /* , littleEndian */\n ) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset\n /* , littleEndian */\n ) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n } // iOS Safari 7.x bug\n\n\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcz8wZTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUxBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFBQTtBQUFBO0FBQ0E7QUFoQkE7QUFrQkE7QUFBQTtBQUFBO0FBQ0E7QUFuQkE7QUFxQkE7QUFBQTtBQUFBO0FBQ0E7QUF0QkE7QUF3QkE7QUFBQTtBQUFBO0FBQ0E7QUF6QkE7QUEyQkE7QUFDQTtBQTVCQTtBQThCQTtBQUNBO0FBL0JBO0FBaUNBO0FBQUE7QUFBQTtBQUNBO0FBbENBO0FBb0NBO0FBQUE7QUFBQTtBQUNBO0FBckNBO0FBdUNBO0FBQUE7QUFBQTtBQUNBO0FBeENBO0FBMENBO0FBQUE7QUFBQTtBQUNBO0FBM0NBO0FBNkNBO0FBQUE7QUFBQTtBQUNBO0FBOUNBO0FBZ0RBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFsREE7QUE1QkE7QUFpRkE7QUFDQTtBQURBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFuQkE7QUFDQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_typed-buffer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_typed.js": -/*!*************************************************!*\ - !*** ../node_modules/core-js/modules/_typed.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar uid = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\");\n\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\nvar TypedArrayConstructors = 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'.split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/YjU2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_typed.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_uid.js": -/*!***********************************************!*\ - !*** ../node_modules/core-js/modules/_uid.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var id = 0;\nvar px = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcz9kNDA5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_uid.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_user-agent.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_user-agent.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar navigator = global.navigator;\nmodule.exports = navigator && navigator.userAgent || '';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzPzQ0ZTAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_user-agent.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_validate-collection.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/_validate-collection.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzPzRhYzEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_validate-collection.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_wks-define.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/_wks-define.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\");\n\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"../node_modules/core-js/modules/_wks-ext.js\");\n\nvar defineProperty = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, {\n value: wksExt.f(name)\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzP2NmYTIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_wks-define.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_wks-ext.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/_wks-ext.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("exports.f = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzPzdmMTUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_wks-ext.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/_wks.js": -/*!***********************************************!*\ - !*** ../node_modules/core-js/modules/_wks.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var store = __webpack_require__(/*! ./_shared */ \"../node_modules/core-js/modules/_shared.js\")('wks');\n\nvar uid = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\");\n\nvar _Symbol = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").Symbol;\n\nvar USE_SYMBOL = typeof _Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcz9mNWRjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/_wks.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/core.get-iterator-method.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/core.get-iterator-method.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('iterator');\n\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\nmodule.exports = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\").getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/YTQxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/core.get-iterator-method.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/core.regexp.escape.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/core.regexp.escape.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $re = __webpack_require__(/*! ./_replacer */ \"../node_modules/core-js/modules/_replacer.js\")(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {\n escape: function escape(it) {\n return $re(it);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/NTA5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/core.regexp.escape.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.copy-within.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.copy-within.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', {\n copyWithin: __webpack_require__(/*! ./_array-copy-within */ \"../node_modules/core-js/modules/_array-copy-within.js\")\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")('copyWithin');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/OGUyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.copy-within.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.every.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.every.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $every = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(4);\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn\n /* , thisArg */\n ) {\n return $every(this, callbackfn, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NGQ4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.every.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.fill.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.fill.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', {\n fill: __webpack_require__(/*! ./_array-fill */ \"../node_modules/core-js/modules/_array-fill.js\")\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")('fill');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzPzIwYTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.fill.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.filter.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.filter.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $filter = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(2);\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn\n /* , thisArg */\n ) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlci5qcz9mNjllIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgyKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.filter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.find-index.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.find-index.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $find = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(6);\n\nvar KEY = 'findIndex';\nvar forced = true; // Shouldn't skip holes\n\nif (KEY in []) Array(1)[KEY](function () {\n forced = false;\n});\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn\n /* , that = undefined */\n ) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzP2Q5NDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.find-index.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.find.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.find.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $find = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(5);\n\nvar KEY = 'find';\nvar forced = true; // Shouldn't skip holes\n\nif (KEY in []) Array(1)[KEY](function () {\n forced = false;\n});\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn\n /* , that = undefined */\n ) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzPzhhZGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.find.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.for-each.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.for-each.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $forEach = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(0);\n\nvar STRICT = __webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn\n /* , thisArg */\n ) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZWU1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.for-each.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.from.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.from.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar call = __webpack_require__(/*! ./_iter-call */ \"../node_modules/core-js/modules/_iter-call.js\");\n\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"../node_modules/core-js/modules/_is-array-iter.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"../node_modules/core-js/modules/_create-property.js\");\n\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"../node_modules/core-js/modules/core.get-iterator-method.js\");\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_iter-detect */ \"../node_modules/core-js/modules/_iter-detect.js\")(function (iter) {\n Array.from(iter);\n}), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike\n /* , mapfn = undefined, thisArg = undefined */\n ) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); // if object isn't iterable or it's array with default iterator - use simple case\n\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n\n result.length = index;\n return result;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzPzYyMTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXpCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.index-of.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.index-of.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $indexOf = __webpack_require__(/*! ./_array-includes */ \"../node_modules/core-js/modules/_array-includes.js\")(false);\n\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement\n /* , fromIndex = 0 */\n ) {\n return NEGATIVE_ZERO // convert -0 to +0\n ? $native.apply(this, arguments) || 0 : $indexOf(this, searchElement, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdiNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBUEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.index-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.is-array.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.is-array.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Array', {\n isArray: __webpack_require__(/*! ./_is-array */ \"../node_modules/core-js/modules/_is-array.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/ZmI3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.is-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.iterator.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.iterator.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\");\n\nvar step = __webpack_require__(/*! ./_iter-step */ \"../node_modules/core-js/modules/_iter-step.js\");\n\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\"); // 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\n\n\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"../node_modules/core-js/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n\n this._i = 0; // next index\n\n this._k = kind; // kind\n // 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n\nIterators.Arguments = Iterators.Array;\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/MmJmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFrQkE7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.iterator.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.join.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.join.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 22.1.3.13 Array.prototype.join(separator)\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar arrayJoin = [].join; // fallback for not array-like strings\n\n$export($export.P + $export.F * (__webpack_require__(/*! ./_iobject */ \"../node_modules/core-js/modules/_iobject.js\") != Object || !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzPzhhMGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBzdHJpbmdzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChyZXF1aXJlKCcuL19pb2JqZWN0JykgIT0gT2JqZWN0IHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoYXJyYXlKb2luKSksICdBcnJheScsIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodG9JT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.join.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.last-index-of.js": -/*!******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.last-index-of.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement\n /* , fromIndex = @[*-1] */\n ) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n\n for (; index >= 0; index--) {\n if (index in O) if (O[index] === searchElement) return index || 0;\n }\n\n return -1;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzPzNmZmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgJG5hdGl2ZSA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBWkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.last-index-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.map.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.map.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $map = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(1);\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn\n /* , thisArg */\n ) {\n return $map(this, callbackfn, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcz9jODg5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.map.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.of.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.of.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"../node_modules/core-js/modules/_create-property.js\"); // WebKit Array.of isn't generic\n\n\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n function F() {\n /* empty */\n }\n\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of()\n /* ...args */\n {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n\n while (aLen > index) {\n createProperty(result, index, arguments[index++]);\n }\n\n result.length = aLen;\n return result;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKEFycmF5Lm9mLmNhbGwoRikgaW5zdGFuY2VvZiBGKTtcbn0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4zIEFycmF5Lm9mKCAuLi5pdGVtcylcbiAgb2Y6IGZ1bmN0aW9uIG9mKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3ICh0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5KShhTGVuKTtcbiAgICB3aGlsZSAoYUxlbiA+IGluZGV4KSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBhTGVuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.reduce-right.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.reduce-right.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $reduce = __webpack_require__(/*! ./_array-reduce */ \"../node_modules/core-js/modules/_array-reduce.js\");\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn\n /* , initialValue */\n ) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodC5qcz82ODZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.reduce-right.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.reduce.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.reduce.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $reduce = __webpack_require__(/*! ./_array-reduce */ \"../node_modules/core-js/modules/_array-reduce.js\");\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn\n /* , initialValue */\n ) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcz9kZjJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.reduce.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.slice.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.slice.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar html = __webpack_require__(/*! ./_html */ \"../node_modules/core-js/modules/_html.js\");\n\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar arraySlice = [].slice; // fallback for not array-like ES3 strings and DOM objects\n\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n\n for (; i < size; i++) {\n cloned[i] = klass == 'String' ? this.charAt(start + i) : this[start + i];\n }\n\n return cloned;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/ZDM4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQWZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.slice.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.some.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.some.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $some = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(3);\n\n$export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn\n /* , thisArg */\n ) {\n return $some(this, callbackfn, arguments[1]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzPzU0ZGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.some.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.sort.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.sort.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null); // Old WebKit\n}) || !__webpack_require__(/*! ./_strict-method */ \"../node_modules/core-js/modules/_strict-method.js\")($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined ? $sort.call(toObject(this)) : $sort.call(toObject(this), aFunction(comparefn));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzPzUzY2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUdBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.sort.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.array.species.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.array.species.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\")('Array');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzP2FiZjUiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.array.species.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.date.now.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es6.date.now.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Date', {\n now: function now() {\n return new Date().getTime();\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/ZWVkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRGF0ZScsIHsgbm93OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.date.now.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.date.to-iso-string.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.date.to-iso-string.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toISOString = __webpack_require__(/*! ./_date-to-iso-string */ \"../node_modules/core-js/modules/_date-to-iso-string.js\"); // PhantomJS / old WebKit has a broken implementations\n\n\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qcz9iNjFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.date.to-iso-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.date.to-json.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.date.to-json.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({\n toISOString: function toISOString() {\n return 1;\n }\n }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcz8wMDI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.date.to-json.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.date.to-primitive.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.date.to-primitive.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var TO_PRIMITIVE = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('toPrimitive');\n\nvar proto = Date.prototype;\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\")(proto, TO_PRIMITIVE, __webpack_require__(/*! ./_date-to-primitive */ \"../node_modules/core-js/modules/_date-to-primitive.js\"));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/ZjNkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.date.to-primitive.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.date.to-string.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.date.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\n\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\")(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this); // eslint-disable-next-line no-self-compare\n\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/MzNmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgRGF0ZVByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSBEYXRlUHJvdG9bVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKERhdGVQcm90bywgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAkdG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.date.to-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.function.bind.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.function.bind.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Function', {\n bind: __webpack_require__(/*! ./_bind */ \"../node_modules/core-js/modules/_bind.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzP2EzYjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.function.bind.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.function.has-instance.js": -/*!********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.function.has-instance.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar HAS_INSTANCE = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('hasInstance');\n\nvar FunctionProto = Function.prototype; // 19.2.3.6 Function.prototype[@@hasInstance](V)\n\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f(FunctionProto, HAS_INSTANCE, {\n value: function value(O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this; // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n\n while (O = getPrototypeOf(O)) {\n if (this.prototype === O) return true;\n }\n\n return false;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZS5qcz9hZjc4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.function.has-instance.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.function.name.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.function.name.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name'; // 19.2.4.2 name\n\nNAME in FProto || __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n configurable: true,\n get: function get() {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzPzFhNDMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.function.name.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.map.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/es6.map.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar strong = __webpack_require__(/*! ./_collection-strong */ \"../node_modules/core-js/modules/_collection-strong.js\");\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar MAP = 'Map'; // 23.1 Map Objects\n\nmodule.exports = __webpack_require__(/*! ./_collection */ \"../node_modules/core-js/modules/_collection.js\")(MAP, function (get) {\n return function Map() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcz9jZjFmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.map.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.acosh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.acosh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar log1p = __webpack_require__(/*! ./_math-log1p */ \"../node_modules/core-js/modules/_math-log1p.js\");\n\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n$export($export.S + $export.F * !($acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n&& Math.floor($acosh(Number.MAX_VALUE)) == 710 // Tor Browser bug: Math.acosh(Infinity) -> NaN\n&& $acosh(Infinity) == Infinity), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? Math.log(x) + Math.LN2 : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoLmpzP2FjM2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBR0E7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.acosh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.asinh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.asinh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n} // Tor Browser bug: Math.asinh(0) -> -0\n\n\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {\n asinh: asinh\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzPzE1ZDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.asinh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.atanh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.atanh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $atanh = Math.atanh; // Tor Browser bug: Math.atanh(-0) -> 0\n\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzPzZlOTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.atanh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.cbrt.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.cbrt.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar sign = __webpack_require__(/*! ./_math-sign */ \"../node_modules/core-js/modules/_math-sign.js\");\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcz8zYTUwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.cbrt.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.clz32.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.clz32.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzP2FkNTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.clz32.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.cosh.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.cosh.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar exp = Math.exp;\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcz81NTZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.cosh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.expm1.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.expm1.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $expm1 = __webpack_require__(/*! ./_math-expm1 */ \"../node_modules/core-js/modules/_math-expm1.js\");\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {\n expm1: $expm1\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzPzBhZTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.expm1.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.fround.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.fround.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n fround: __webpack_require__(/*! ./_math-fround */ \"../node_modules/core-js/modules/_math-fround.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/Y2ZhOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.fround.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.hypot.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.hypot.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar abs = Math.abs;\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) {\n // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n\n while (i < aLen) {\n arg = abs(arguments[i++]);\n\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzPzY5YTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBbkJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.hypot.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.imul.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.imul.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $imul = Math.imul; // some WebKit versions fails with big numbers, some has wrong arity\n\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaW11bC5qcz82Zjc1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.imul.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.log10.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.log10.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzPzAyZmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.log10.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.log1p.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.log1p.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log1p: __webpack_require__(/*! ./_math-log1p */ \"../node_modules/core-js/modules/_math-log1p.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzPzQ0MmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgbG9nMXA6IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.log1p.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.log2.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.log2.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcz8wMDkyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.log2.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.sign.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.sign.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n sign: __webpack_require__(/*! ./_math-sign */ \"../node_modules/core-js/modules/_math-sign.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcz8wZDhkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.sign.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.sinh.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.sinh.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar expm1 = __webpack_require__(/*! ./_math-expm1 */ \"../node_modules/core-js/modules/_math-expm1.js\");\n\nvar exp = Math.exp; // V8 near Chromium 38 has a problem with very small numbers\n\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcz9kZDg3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMCBNYXRoLnNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUdBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.sinh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.tanh.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.tanh.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar expm1 = __webpack_require__(/*! ./_math-expm1 */ \"../node_modules/core-js/modules/_math-expm1.js\");\n\nvar exp = Math.exp;\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcz9mZWRiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.tanh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.math.trunc.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.math.trunc.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzPzhmNjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.math.trunc.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.constructor.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.constructor.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"../node_modules/core-js/modules/_inherit-if-required.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f;\n\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f;\n\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar $trim = __webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\").trim;\n\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype; // Opera ~12 has broken Object#toString\n\nvar BROKEN_COF = cof(__webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\")(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype; // 7.1.3 ToNumber(argument)\n\nvar toNumber = function toNumber(argument) {\n var it = toPrimitive(argument, false);\n\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66:\n case 98:\n radix = 2;\n maxCode = 49;\n break;\n // fast equal /^0b[01]+$/i\n\n case 79:\n case 111:\n radix = 8;\n maxCode = 55;\n break;\n // fast equal /^0o[0-7]+$/i\n\n default:\n return +it;\n }\n\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i); // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n\n if (code < 48 || code > maxCode) return NaN;\n }\n\n return parseInt(digits, radix);\n }\n }\n\n return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () {\n proto.valueOf.call(that);\n }) : cof(that) != NUMBER) ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n\n for (var keys = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") ? gOPN(Base) : ( // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger').split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n\n $Number.prototype = proto;\n proto.constructor = $Number;\n\n __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\")(global, NUMBER, $Number);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcz83YjYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUF0QkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBTEE7QUFDQTtBQU9BO0FBRUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.constructor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.epsilon.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.epsilon.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n EPSILON: Math.pow(2, -52)\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/YjhhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.epsilon.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.is-finite.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.is-finite.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar _isFinite = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzPzFhMzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.is-finite.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.is-integer.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.is-integer.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n isInteger: __webpack_require__(/*! ./_is-integer */ \"../node_modules/core-js/modules/_is-integer.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/MWFmZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.is-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.is-nan.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.is-nan.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzPzMxOGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjQgTnVtYmVyLmlzTmFOKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.is-nan.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.is-safe-integer.js": -/*!*********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.is-safe-integer.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar isInteger = __webpack_require__(/*! ./_is-integer */ \"../node_modules/core-js/modules/_is-integer.js\");\n\nvar abs = Math.abs;\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzP2NlYzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.is-safe-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.max-safe-integer.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.max-safe-integer.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n MAX_SAFE_INTEGER: 0x1fffffffffffff\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/MjgxMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuNiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.max-safe-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.min-safe-integer.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.min-safe-integer.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n MIN_SAFE_INTEGER: -0x1fffffffffffff\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/MThhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMTAgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.min-safe-integer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.parse-float.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.parse-float.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $parseFloat = __webpack_require__(/*! ./_parse-float */ \"../node_modules/core-js/modules/_parse-float.js\"); // 20.1.2.12 Number.parseFloat(string)\n\n\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {\n parseFloat: $parseFloat\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcz82YjNmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.parse-float.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.parse-int.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.parse-int.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $parseInt = __webpack_require__(/*! ./_parse-int */ \"../node_modules/core-js/modules/_parse-int.js\"); // 20.1.2.13 Number.parseInt(string, radix)\n\n\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {\n parseInt: $parseInt\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzPzdjOGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.parse-int.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.to-fixed.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.to-fixed.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar aNumberValue = __webpack_require__(/*! ./_a-number-value */ \"../node_modules/core-js/modules/_a-number-value.js\");\n\nvar repeat = __webpack_require__(/*! ./_string-repeat */ \"../node_modules/core-js/modules/_string-repeat.js\");\n\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function multiply(n, c) {\n var i = -1;\n var c2 = c;\n\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function divide(n) {\n var i = 6;\n var c = 0;\n\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = c % n * 1e7;\n }\n};\n\nvar numToString = function numToString() {\n var i = 6;\n var s = '';\n\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n }\n\n return s;\n};\n\nvar pow = function pow(x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function log(x) {\n var n = 0;\n var x2 = x;\n\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n }\n\n return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || 1000000000000000128.0.toFixed(0) !== '1000000000000000128') || !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR); // eslint-disable-next-line no-self-compare\n\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n\n if (x < 0) {\n s = '-';\n x = -x;\n }\n\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n\n if (e > 0) {\n multiply(0, z);\n j = f;\n\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n }\n\n return m;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZC5qcz84YzAxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFSQTtBQUNBO0FBU0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFWQTtBQUNBO0FBWUE7QUFNQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFqREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.to-fixed.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.number.to-precision.js": -/*!******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.number.to-precision.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar aNumberValue = __webpack_require__(/*! ./_a-number-value */ \"../node_modules/core-js/modules/_a-number-value.js\");\n\nvar $toPrecision = 1.0.toPrecision;\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzPzEyNDMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.number.to-precision.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.assign.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.assign.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', {\n assign: __webpack_require__(/*! ./_object-assign */ \"../node_modules/core-js/modules/_object-assign.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzP2U2MTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.assign.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.create.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.create.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\"); // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n$export($export.S, 'Object', {\n create: __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzPzNjMDYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.create.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.define-properties.js": -/*!***********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.define-properties.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\"); // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\"), 'Object', {\n defineProperties: __webpack_require__(/*! ./_object-dps */ \"../node_modules/core-js/modules/_object-dps.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcz9lYmYxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.define-properties.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.define-property.js": -/*!*********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.define-property.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\"); // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\"), 'Object', {\n defineProperty: __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzPzc3N2YiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.define-property.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.freeze.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.freeze.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar meta = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzPzJiM2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.freeze.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js": -/*!*********************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f;\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzP2FkNTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.get-own-property-names.js": -/*!****************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.get-own-property-names.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyNames', function () {\n return __webpack_require__(/*! ./_object-gopn-ext */ \"../node_modules/core-js/modules/_object-gopn-ext.js\").f;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/ZGQxYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.get-own-property-names.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.get-prototype-of.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.get-prototype-of.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar $getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/OTU0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.get-prototype-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.is-extensible.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.is-extensible.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/M2M5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.is-extensible.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.is-frozen.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.is-frozen.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzPzcyNTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.is-frozen.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.is-sealed.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.is-sealed.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkLmpzPzhhNjIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjEzIE9iamVjdC5pc1NlYWxlZChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNTZWFsZWQnLCBmdW5jdGlvbiAoJGlzU2VhbGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc1NlYWxlZChpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNTZWFsZWQgPyAkaXNTZWFsZWQoaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.is-sealed.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.is.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.is.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Object', {\n is: __webpack_require__(/*! ./_same-value */ \"../node_modules/core-js/modules/_same-value.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcz8yYzAyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.is.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.keys.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.keys.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/ZWY5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.prevent-extensions.js": -/*!************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.prevent-extensions.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar meta = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zLmpzPzZmN2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE1IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdwcmV2ZW50RXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgkcHJldmVudEV4dGVuc2lvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKGl0KSB7XG4gICAgcmV0dXJuICRwcmV2ZW50RXh0ZW5zaW9ucyAmJiBpc09iamVjdChpdCkgPyAkcHJldmVudEV4dGVuc2lvbnMobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.prevent-extensions.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.seal.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.seal.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar meta = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"../node_modules/core-js/modules/_object-sap.js\")('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/MWQ5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.seal.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.set-prototype-of.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.set-prototype-of.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Object', {\n setPrototypeOf: __webpack_require__(/*! ./_set-proto */ \"../node_modules/core-js/modules/_set-proto.js\").set\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZDZhMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.set-prototype-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.object.to-string.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.object.to-string.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 19.1.3.6 Object.prototype.toString()\n\nvar classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\nvar test = {};\ntest[__webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('toStringTag')] = 'z';\n\nif (test + '' != '[object z]') {\n __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\")(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzP2I3ZGQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.object.to-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.parse-float.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.parse-float.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $parseFloat = __webpack_require__(/*! ./_parse-float */ \"../node_modules/core-js/modules/_parse-float.js\"); // 18.2.4 parseFloat(string)\n\n\n$export($export.G + $export.F * (parseFloat != $parseFloat), {\n parseFloat: $parseFloat\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/MGVhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.parse-float.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.parse-int.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.parse-int.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $parseInt = __webpack_require__(/*! ./_parse-int */ \"../node_modules/core-js/modules/_parse-int.js\"); // 18.2.5 parseInt(string, radix)\n\n\n$export($export.G + $export.F * (parseInt != $parseInt), {\n parseInt: $parseInt\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcz82NmY3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.parse-int.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.promise.js": -/*!******************************************************!*\ - !*** ../node_modules/core-js/modules/es6.promise.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar ctx = __webpack_require__(/*! ./_ctx */ \"../node_modules/core-js/modules/_ctx.js\");\n\nvar classof = __webpack_require__(/*! ./_classof */ \"../node_modules/core-js/modules/_classof.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"../node_modules/core-js/modules/_species-constructor.js\");\n\nvar task = __webpack_require__(/*! ./_task */ \"../node_modules/core-js/modules/_task.js\").set;\n\nvar microtask = __webpack_require__(/*! ./_microtask */ \"../node_modules/core-js/modules/_microtask.js\")();\n\nvar newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ \"../node_modules/core-js/modules/_new-promise-capability.js\");\n\nvar perform = __webpack_require__(/*! ./_perform */ \"../node_modules/core-js/modules/_perform.js\");\n\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"../node_modules/core-js/modules/_user-agent.js\");\n\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"../node_modules/core-js/modules/_promise-resolve.js\");\n\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\n\nvar empty = function empty() {\n /* empty */\n};\n\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n\n var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('species')] = function (exec) {\n exec(empty, empty);\n }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n\n\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) {\n /* empty */\n }\n}(); // helpers\n\nvar isThenable = function isThenable(it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function notify(promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n\n var run = function run(reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n\n if (handler === true) result = value;else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n\n while (chain.length > i) {\n run(chain[i++]);\n } // variable length - can't use forEach\n\n\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\n\nvar onUnhandled = function onUnhandled(promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({\n promise: promise,\n reason: value\n });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n }\n\n promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\n\nvar isUnhandled = function isUnhandled(promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\n\nvar onHandleUnhandled = function onHandleUnhandled(promise) {\n task.call(global, function () {\n var handler;\n\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({\n promise: promise,\n reason: promise._v\n });\n }\n });\n};\n\nvar $reject = function $reject(value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\n\nvar $resolve = function $resolve(value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = {\n _w: promise,\n _d: false\n }; // wrap\n\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({\n _w: promise,\n _d: false\n }, e); // wrap\n }\n}; // constructor polyfill\n\n\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n }; // eslint-disable-next-line no-unused-vars\n\n\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n\n this._a = undefined; // <- checked in isUnhandled reactions\n\n this._s = 0; // <- state\n\n this._d = false; // <- done\n\n this._v = undefined; // <- value\n\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n\n this._n = false; // <- notify\n };\n\n Internal.prototype = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\")($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n\n this._c.push(reaction);\n\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function _catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n\n OwnPromiseCapability = function OwnPromiseCapability() {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n\n newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) {\n return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {\n Promise: $Promise\n});\n\n__webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n\n__webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\")(PROMISE);\n\nWrapper = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\")[PROMISE]; // statics\n\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ \"../node_modules/core-js/modules/_iter-detect.js\")(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzPzBkYmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBS0E7QUFHQTtBQUNBO0FBSkE7QUFQQTtBQWNBO0FBQUE7QUFmQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBaEJBO0FBREE7QUFzQkE7QUFDQTtBQUNBO0FBOUJBO0FBQ0E7QUErQkE7QUFBQTtBQXBDQTtBQUNBO0FBQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBdkNBO0FBSkE7QUFDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQWpCQTtBQURBO0FBQ0E7QUFvQkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFOQTtBQURBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBREE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBaUJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF4QkE7QUFDQTtBQUNBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUxBO0FBWUE7QUFoQkE7QUFrQkE7QUFDQTtBQTFCQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQXhDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.promise.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.apply.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.apply.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar rApply = (__webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").Reflect || {}).apply;\nvar fApply = Function.apply; // MS Edge argumentsList argument is optional\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n rApply(function () {\n /* empty */\n });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzPzAyN2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.apply.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.construct.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.construct.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar create = __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar bind = __webpack_require__(/*! ./_bind */ \"../node_modules/core-js/modules/_bind.js\");\n\nvar rConstruct = (__webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").Reflect || {}).construct; // MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n\nvar NEW_TARGET_BUG = fails(function () {\n function F() {\n /* empty */\n }\n\n return !(rConstruct(function () {\n /* empty */\n }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () {\n /* empty */\n });\n});\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args\n /* , newTarget */\n ) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0:\n return new Target();\n\n case 1:\n return new Target(args[0]);\n\n case 2:\n return new Target(args[0], args[1]);\n\n case 3:\n return new Target(args[0], args[1], args[2]);\n\n case 4:\n return new Target(args[0], args[1], args[2], args[3]);\n } // w/o altered newTarget, lot of arguments case\n\n\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n } // with altered newTarget, not support built-in constructors\n\n\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MmQ3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.construct.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.define-property.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.define-property.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\"); // MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n\n\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, {\n value: 1\n }), 1, {\n value: 2\n });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/MTE5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQVhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.define-property.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.delete-property.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.delete-property.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f;\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/ZWY1NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.delete-property.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.enumerate.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.enumerate.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 26.1.5 Reflect.enumerate(target)\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar Enumerate = function Enumerate(iterated) {\n this._t = anObject(iterated); // target\n\n this._i = 0; // next index\n\n var keys = this._k = []; // keys\n\n var key;\n\n for (key in iterated) {\n keys.push(key);\n }\n};\n\n__webpack_require__(/*! ./_iter-create */ \"../node_modules/core-js/modules/_iter-create.js\")(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n\n do {\n if (that._i >= keys.length) return {\n value: undefined,\n done: true\n };\n } while (!((key = keys[that._i++]) in that._t));\n\n return {\n value: key,\n done: false\n };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/MTc0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.enumerate.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js": -/*!**********************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/NWZkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjcgUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.get-prototype-of.js": -/*!***********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.get-prototype-of.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar getProto = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcz8xYjYwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.get-prototype-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.get.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.get.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nfunction get(target, propertyKey\n/* , receiver */\n) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value') ? desc.value : desc.get !== undefined ? desc.get.call(receiver) : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {\n get: get\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZjU5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.get.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.has.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.has.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZmRkYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.has.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.is-extensible.js": -/*!********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.is-extensible.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar $isExtensible = Object.isExtensible;\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcz9kNjFjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.is-extensible.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.own-keys.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.own-keys.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', {\n ownKeys: __webpack_require__(/*! ./_own-keys */ \"../node_modules/core-js/modules/_own-keys.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzP2JkZDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.own-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.prevent-extensions.js": -/*!*************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.prevent-extensions.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar $preventExtensions = Object.preventExtensions;\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/MTJkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICB0cnkge1xuICAgICAgaWYgKCRwcmV2ZW50RXh0ZW5zaW9ucykgJHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQVRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.prevent-extensions.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.set-prototype-of.js": -/*!***********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.set-prototype-of.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar setProto = __webpack_require__(/*! ./_set-proto */ \"../node_modules/core-js/modules/_set-proto.js\");\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcz9hMjdhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTQgUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzZXRQcm90byA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpO1xuXG5pZiAoc2V0UHJvdG8pICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBzZXRQcm90by5jaGVjayh0YXJnZXQsIHByb3RvKTtcbiAgICB0cnkge1xuICAgICAgc2V0UHJvdG8uc2V0KHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBVEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.set-prototype-of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.reflect.set.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.reflect.set.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nfunction set(target, propertyKey, V\n/* , receiver */\n) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n\n ownDesc = createDesc(0);\n }\n\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n\n return true;\n }\n\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {\n set: set\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/N2UwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.reflect.set.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.constructor.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.constructor.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"../node_modules/core-js/modules/_inherit-if-required.js\");\n\nvar dP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f;\n\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f;\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"../node_modules/core-js/modules/_is-regexp.js\");\n\nvar $flags = __webpack_require__(/*! ./_flags */ \"../node_modules/core-js/modules/_flags.js\");\n\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g; // \"new\" creates a new object, old webkit buggy here\n\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && (!CORRECT_NEW || __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n re2[__webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match\n\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p : inheritIfRequired(CORRECT_NEW ? new Base(piRE && !fiU ? p.source : p, f) : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f), tiRE ? this : proto, $RegExp);\n };\n\n var proxy = function proxy(key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function get() {\n return Base[key];\n },\n set: function set(it) {\n Base[key] = it;\n }\n });\n };\n\n for (var keys = gOPN(Base), i = 0; keys.length > i;) {\n proxy(keys[i++]);\n }\n\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n\n __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\")(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\")('RegExp');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcz8yN2M4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.constructor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.exec.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.exec.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"../node_modules/core-js/modules/_regexp-exec.js\");\n\n__webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\")({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/MzdhZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.exec.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.flags.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.flags.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && /./g.flags != 'g') __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\").f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(/*! ./_flags */ \"../node_modules/core-js/modules/_flags.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcz84YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.flags.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.match.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.match.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"../node_modules/core-js/modules/_advance-string-index.js\");\n\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"../node_modules/core-js/modules/_regexp-exec-abstract.js\"); // @@match logic\n\n\n__webpack_require__(/*! ./_fix-re-wks */ \"../node_modules/core-js/modules/_fix-re-wks.js\")('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [// `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n\n return n === 0 ? null : A;\n }];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcz9mNjhiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTNCQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.match.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.replace.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.replace.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"../node_modules/core-js/modules/_advance-string-index.js\");\n\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"../node_modules/core-js/modules/_regexp-exec-abstract.js\");\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function maybeToString(it) {\n return it === undefined ? it : String(it);\n}; // @@replace logic\n\n\n__webpack_require__(/*! ./_fix-re-wks */ \"../node_modules/core-js/modules/_fix-re-wks.js\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [// `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined ? fn.call(searchValue, O, replaceValue) : $replace.call(String(O), searchValue, replaceValue);\n }, // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = []; // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n\n for (var j = 1; j < result.length; j++) {\n captures.push(maybeToString(result[j]));\n }\n\n var namedCaptures = result.groups;\n\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + S.slice(nextSourcePosition);\n }]; // https://tc39.github.io/ecma262/#sec-getsubstitution\n\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n\n switch (ch.charAt(0)) {\n case '$':\n return '$';\n\n case '&':\n return matched;\n\n case '`':\n return str.slice(0, position);\n\n case \"'\":\n return str.slice(tailPos);\n\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n\n default:\n // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n\n capture = captures[n - 1];\n }\n\n return capture === undefined ? '' : capture;\n });\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/NjdjOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBN0RBO0FBQ0E7QUFpRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFqQkE7QUFDQTtBQWtCQTtBQXJCQTtBQXVCQTtBQWpHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.replace.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.search.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.search.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar sameValue = __webpack_require__(/*! ./_same-value */ \"../node_modules/core-js/modules/_same-value.js\");\n\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"../node_modules/core-js/modules/_regexp-exec-abstract.js\"); // @@search logic\n\n\n__webpack_require__(/*! ./_fix-re-wks */ \"../node_modules/core-js/modules/_fix-re-wks.js\")('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [// `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzPzllYzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.search.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.split.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.split.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"../node_modules/core-js/modules/_is-regexp.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"../node_modules/core-js/modules/_species-constructor.js\");\n\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"../node_modules/core-js/modules/_advance-string-index.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar callRegExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"../node_modules/core-js/modules/_regexp-exec-abstract.js\");\n\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"../node_modules/core-js/modules/_regexp-exec.js\");\n\nvar fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\n\nvar SUPPORTS_Y = !fails(function () {\n RegExp(MAX_UINT32, 'y');\n}); // @@split logic\n\n__webpack_require__(/*! ./_fix-re-wks */ \"../node_modules/core-js/modules/_fix-re-wks.js\")('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n\n if ('abbc'[$SPLIT](/(b)*/)[1] == 'c' || 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || '.'[$SPLIT](/()()/)[LENGTH] > 1 || ''[$SPLIT](/.?/)[LENGTH]) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function internalSplit(separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return []; // If `separator` is not a regex, use native split\n\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0; // Make `global` and avoid `lastIndex` issues by working with a copy\n\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n }; // Chakra, V8\n\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function internalSplit(separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [// `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined ? splitter.call(separator, O, limit) : internalSplit.call(String(O), separator, limit);\n }, // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (SUPPORTS_Y ? 'y' : 'g'); // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n\n if (z === null || (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n\n q = p = e;\n }\n }\n\n A.push(S.slice(p));\n return A;\n }];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcz82YWM2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBL0JBO0FBQ0E7QUFSQTtBQTBDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTFEQTtBQW5EQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.split.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.regexp.to-string.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.regexp.to-string.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\n__webpack_require__(/*! ./es6.regexp.flags */ \"../node_modules/core-js/modules/es6.regexp.flags.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar $flags = __webpack_require__(/*! ./_flags */ \"../node_modules/core-js/modules/_flags.js\");\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function define(fn) {\n __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\")(RegExp.prototype, TO_STRING, fn, true);\n}; // 21.2.5.14 RegExp.prototype.toString()\n\n\nif (__webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return $toString.call({\n source: 'a',\n flags: 'b'\n }) != '/a/b';\n})) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/', 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n }); // FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzP2UxYTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFRQTtBQUNBO0FBREE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.regexp.to-string.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.set.js": -/*!**************************************************!*\ - !*** ../node_modules/core-js/modules/es6.set.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar strong = __webpack_require__(/*! ./_collection-strong */ \"../node_modules/core-js/modules/_collection-strong.js\");\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar SET = 'Set'; // 23.2 Set Objects\n\nmodule.exports = __webpack_require__(/*! ./_collection */ \"../node_modules/core-js/modules/_collection.js\")(SET, function (get) {\n return function Set() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcz85YjUwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.set.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.anchor.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.anchor.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.2 String.prototype.anchor(name)\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzPzc2ZGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.anchor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.big.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.big.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.3 String.prototype.big()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzPzVhOWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.big.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.blink.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.blink.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.4 String.prototype.blink()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcz9iOGY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.blink.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.bold.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.bold.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.5 String.prototype.bold()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/N2ZkYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.bold.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.code-point-at.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.code-point-at.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $at = __webpack_require__(/*! ./_string-at */ \"../node_modules/core-js/modules/_string-at.js\")(false);\n\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/NmE4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.code-point-at.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.ends-with.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.ends-with.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar context = __webpack_require__(/*! ./_string-context */ \"../node_modules/core-js/modules/_string-context.js\");\n\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"../node_modules/core-js/modules/_fails-is-regexp.js\")(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString\n /* , endPosition = @length */\n ) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzPzA0M2MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBVkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.ends-with.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.fixed.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.fixed.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.6 String.prototype.fixed()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcz8wNTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.fixed.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.fontcolor.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.fontcolor.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.7 String.prototype.fontcolor(color)\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzPzg2ZDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.fontcolor.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.fontsize.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.fontsize.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.8 String.prototype.fontsize(size)\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcz80YmJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjggU3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZShzaXplKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udHNpemUnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udHNpemUoc2l6ZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ3NpemUnLCBzaXplKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.fontsize.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.from-code-point.js": -/*!*********************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.from-code-point.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint; // length should be 1, old FF problem\n\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) {\n // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00));\n }\n\n return res.join('');\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzP2NkMjYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBQ0E7QUFmQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.from-code-point.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.includes.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.includes.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar context = __webpack_require__(/*! ./_string-context */ \"../node_modules/core-js/modules/_string-context.js\");\n\nvar INCLUDES = 'includes';\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"../node_modules/core-js/modules/_fails-is-regexp.js\")(INCLUDES), 'String', {\n includes: function includes(searchString\n /* , position = 0 */\n ) {\n return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcz9lOWRlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBSkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.includes.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.italics.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.italics.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.9 String.prototype.italics()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/MjZhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy45IFN0cmluZy5wcm90b3R5cGUuaXRhbGljcygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.italics.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.iterator.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.iterator.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $at = __webpack_require__(/*! ./_string-at */ \"../node_modules/core-js/modules/_string-at.js\")(true); // 21.1.3.27 String.prototype[@@iterator]()\n\n\n__webpack_require__(/*! ./_iter-define */ \"../node_modules/core-js/modules/_iter-define.js\")(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n\n this._i = 0; // next index\n // 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return {\n value: undefined,\n done: true\n };\n point = $at(O, index);\n this._i += point.length;\n return {\n value: point,\n done: false\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcz85NTBjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFYQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.iterator.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.link.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.link.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.10 String.prototype.link(url)\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/NDljYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.link.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.raw.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.raw.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n }\n\n return res.join('');\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzP2JhM2UiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQVpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.raw.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.repeat.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.repeat.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(/*! ./_string-repeat */ \"../node_modules/core-js/modules/_string-repeat.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzPzM2MWMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.repeat.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.small.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.small.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.11 String.prototype.small()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcz81ZDBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.small.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.starts-with.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.starts-with.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar context = __webpack_require__(/*! ./_string-context */ \"../node_modules/core-js/modules/_string-context.js\");\n\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"../node_modules/core-js/modules/_fails-is-regexp.js\")(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString\n /* , position = 0 */\n ) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcz8xNDQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.starts-with.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.strike.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.strike.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.12 String.prototype.strike()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzP2E5ZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.strike.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.sub.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.sub.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.13 String.prototype.sub()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzPzM1ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.sub.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.sup.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.sup.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // B.2.3.14 String.prototype.sup()\n\n__webpack_require__(/*! ./_string-html */ \"../node_modules/core-js/modules/_string-html.js\")('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzP2UxZTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.sup.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.string.trim.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es6.string.trim.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // 21.1.3.25 String.prototype.trim()\n\n__webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\")('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/OWJjYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.string.trim.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.symbol.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/es6.symbol.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // ECMAScript 6 symbols shim\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar has = __webpack_require__(/*! ./_has */ \"../node_modules/core-js/modules/_has.js\");\n\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar META = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\").KEY;\n\nvar $fails = __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\");\n\nvar shared = __webpack_require__(/*! ./_shared */ \"../node_modules/core-js/modules/_shared.js\");\n\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"../node_modules/core-js/modules/_set-to-string-tag.js\");\n\nvar uid = __webpack_require__(/*! ./_uid */ \"../node_modules/core-js/modules/_uid.js\");\n\nvar wks = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\");\n\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"../node_modules/core-js/modules/_wks-ext.js\");\n\nvar wksDefine = __webpack_require__(/*! ./_wks-define */ \"../node_modules/core-js/modules/_wks-define.js\");\n\nvar enumKeys = __webpack_require__(/*! ./_enum-keys */ \"../node_modules/core-js/modules/_enum-keys.js\");\n\nvar isArray = __webpack_require__(/*! ./_is-array */ \"../node_modules/core-js/modules/_is-array.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"../node_modules/core-js/modules/_property-desc.js\");\n\nvar _create = __webpack_require__(/*! ./_object-create */ \"../node_modules/core-js/modules/_object-create.js\");\n\nvar gOPNExt = __webpack_require__(/*! ./_object-gopn-ext */ \"../node_modules/core-js/modules/_object-gopn-ext.js\");\n\nvar $GOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\nvar $GOPS = __webpack_require__(/*! ./_object-gops */ \"../node_modules/core-js/modules/_object-gops.js\");\n\nvar $DP = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\");\n\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\n\nvar _stringify = $JSON && $JSON.stringify;\n\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\n\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\n\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function get() {\n return dP(this, 'a', {\n value: 7\n }).a;\n }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function wrap(tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) {\n return _typeof(it) == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, {\n enumerable: createDesc(0, false)\n });\n }\n\n return setSymbolDesc(it, key, D);\n }\n\n return dP(it, key, D);\n};\n\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n\n while (l > i) {\n $defineProperty(it, key = keys[i++], P[key]);\n }\n\n return it;\n};\n\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n }\n\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n }\n\n return result;\n}; // 19.4.1.1 Symbol([description])\n\n\nif (!USE_NATIVE) {\n $Symbol = function _Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n\n var $set = function $set(value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, {\n configurable: true,\n set: $set\n });\n return wrap(tag);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(/*! ./_object-gopn */ \"../node_modules/core-js/modules/_object-gopn.js\").f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(/*! ./_object-pie */ \"../node_modules/core-js/modules/_object-pie.js\").f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(/*! ./_library */ \"../node_modules/core-js/modules/_library.js\")) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {\n Symbol: $Symbol\n});\n\nfor (var es6Symbols = // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) {\n wks(es6Symbols[j++]);\n}\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) {\n wksDefine(wellKnownSymbols[k++]);\n}\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function _for(key) {\n return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n\n for (var key in SymbolRegistry) {\n if (SymbolRegistry[key] === sym) return key;\n }\n },\n useSetter: function useSetter() {\n setter = true;\n },\n useSimple: function useSimple() {\n setter = false;\n }\n});\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n}); // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n\nvar FAILS_ON_PRIMITIVES = $fails(function () {\n $GOPS.f(1);\n});\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n}); // 24.3.2 JSON.stringify(value [, replacer [, space]])\n\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol(); // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n\n return _stringify([S]) != '[null]' || _stringify({\n a: S\n }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n\n while (arguments.length > i) {\n args.push(arguments[i++]);\n }\n\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n\n if (!isArray(replacer)) replacer = function replacer(key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n}); // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); // 19.4.3.5 Symbol.prototype[@@toStringTag]\n\nsetToStringTag($Symbol, 'Symbol'); // 20.2.1.9 Math[@@toStringTag]\n\nsetToStringTag(Math, 'Math', true); // 24.3.3 JSON[@@toStringTag]\n\nsetToStringTag(global.JSON, 'JSON', true);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcz8wMDEyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBYkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFQQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFUQTtBQUNBO0FBVUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFIQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFWQTtBQVlBO0FBQUE7QUFaQTtBQWFBO0FBQUE7QUFBQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFnQkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.symbol.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.array-buffer.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.array-buffer.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $typed = __webpack_require__(/*! ./_typed */ \"../node_modules/core-js/modules/_typed.js\");\n\nvar buffer = __webpack_require__(/*! ./_typed-buffer */ \"../node_modules/core-js/modules/_typed-buffer.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"../node_modules/core-js/modules/_to-absolute-index.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar ArrayBuffer = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").ArrayBuffer;\n\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"../node_modules/core-js/modules/_species-constructor.js\");\n\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {\n ArrayBuffer: $ArrayBuffer\n});\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n$export($export.P + $export.U + $export.F * __webpack_require__(/*! ./_fails */ \"../node_modules/core-js/modules/_fails.js\")(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n }\n\n return result;\n }\n});\n\n__webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\")(ARRAY_BUFFER);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcz83N2NmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.array-buffer.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.data-view.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.data-view.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.G + $export.W + $export.F * !__webpack_require__(/*! ./_typed */ \"../node_modules/core-js/modules/_typed.js\").ABV, {\n DataView: __webpack_require__(/*! ./_typed-buffer */ \"../node_modules/core-js/modules/_typed-buffer.js\").DataView\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcz9hM2E4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.data-view.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.float32-array.js": -/*!******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.float32-array.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzPzg0Y2EiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.float32-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.float64-array.js": -/*!******************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.float64-array.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzPzNmMTEiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.float64-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.int16-array.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.int16-array.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/NDNmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.int16-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.int32-array.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.int32-array.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/NjMwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.int32-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.int8-array.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.int8-array.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzP2Q1NGEiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.int8-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.uint16-array.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.uint16-array.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheS5qcz9lMzY1Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.uint16-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.uint32-array.js": -/*!*****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.uint32-array.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcz80MjIyIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.uint32-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.uint8-array.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.uint8-array.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/OWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.uint8-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js": -/*!************************************************************************!*\ - !*** ../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_typed-array */ \"../node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzPzJlZTQiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.weak-map.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es6.weak-map.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar each = __webpack_require__(/*! ./_array-methods */ \"../node_modules/core-js/modules/_array-methods.js\")(0);\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar meta = __webpack_require__(/*! ./_meta */ \"../node_modules/core-js/modules/_meta.js\");\n\nvar assign = __webpack_require__(/*! ./_object-assign */ \"../node_modules/core-js/modules/_object-assign.js\");\n\nvar weak = __webpack_require__(/*! ./_collection-weak */ \"../node_modules/core-js/modules/_collection-weak.js\");\n\nvar isObject = __webpack_require__(/*! ./_is-object */ \"../node_modules/core-js/modules/_is-object.js\");\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar NATIVE_WEAK_MAP = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function wrapper(get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n}; // 23.3 WeakMap Objects\n\nvar $WeakMap = module.exports = __webpack_require__(/*! ./_collection */ \"../node_modules/core-js/modules/_collection.js\")(WEAK_MAP, wrapper, methods, weak, true, true); // IE11 WeakMap frozen keys fix\n\n\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n\n var result = this._f[key](a, b);\n\n return key == 'set' ? this : result; // store all the rest on native weakmap\n }\n\n return method.call(this, a, b);\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/YTJiMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQVBBO0FBSEE7QUFhQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.weak-map.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es6.weak-set.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es6.weak-set.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar weak = __webpack_require__(/*! ./_collection-weak */ \"../node_modules/core-js/modules/_collection-weak.js\");\n\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"../node_modules/core-js/modules/_validate-collection.js\");\n\nvar WEAK_SET = 'WeakSet'; // 23.4 WeakSet Objects\n\n__webpack_require__(/*! ./_collection */ \"../node_modules/core-js/modules/_collection.js\")(WEAK_SET, function (get) {\n return function WeakSet() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/MTkzMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es6.weak-set.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.array.flat-map.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.array.flat-map.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar flattenIntoArray = __webpack_require__(/*! ./_flatten-into-array */ \"../node_modules/core-js/modules/_flatten-into-array.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar arraySpeciesCreate = __webpack_require__(/*! ./_array-species-create */ \"../node_modules/core-js/modules/_array-species-create.js\");\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn\n /* , thisArg */\n ) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")('flatMap');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/MDQ3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.array.flat-map.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.array.flatten.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.array.flatten.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar flattenIntoArray = __webpack_require__(/*! ./_flatten-into-array */ \"../node_modules/core-js/modules/_flatten-into-array.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"../node_modules/core-js/modules/_to-integer.js\");\n\nvar arraySpeciesCreate = __webpack_require__(/*! ./_array-species-create */ \"../node_modules/core-js/modules/_array-species-create.js\");\n\n$export($export.P, 'Array', {\n flatten: function flatten()\n /* depthArg = 1 */\n {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")('flatten');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzPzVhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.array.flatten.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.array.includes.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.array.includes.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/tc39/Array.prototype.includes\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $includes = __webpack_require__(/*! ./_array-includes */ \"../node_modules/core-js/modules/_array-includes.js\")(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el\n /* , fromIndex = 0 */\n ) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"../node_modules/core-js/modules/_add-to-unscopables.js\")('includes');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/YTBjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.array.includes.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.asap.js": -/*!***************************************************!*\ - !*** ../node_modules/core-js/modules/es7.asap.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar microtask = __webpack_require__(/*! ./_microtask */ \"../node_modules/core-js/modules/_microtask.js\")();\n\nvar process = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\").process;\n\nvar isNode = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\")(process) == 'process';\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzP2IxZWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.asap.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.error.is-error.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.error.is-error.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar cof = __webpack_require__(/*! ./_cof */ \"../node_modules/core-js/modules/_cof.js\");\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/YmEyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.error.is-error.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.global.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/es7.global.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.G, {\n global: __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcz82OGFiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.global.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.map.from.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es7.map.from.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(/*! ./_set-collection-from */ \"../node_modules/core-js/modules/_set-collection-from.js\")('Map');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/OGM1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.map.from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.map.of.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/es7.map.of.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(/*! ./_set-collection-of */ \"../node_modules/core-js/modules/_set-collection-of.js\")('Map');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcz8xZGEyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.map.of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.map.to-json.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.map.to-json.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P + $export.R, 'Map', {\n toJSON: __webpack_require__(/*! ./_collection-to-json */ \"../node_modules/core-js/modules/_collection-to-json.js\")('Map')\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NWFhZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.map.to-json.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.clamp.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.clamp.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wLmpzP2I4MTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.clamp.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.deg-per-rad.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.deg-per-rad.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n DEG_PER_RAD: Math.PI / 180\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzPzJkZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.deg-per-rad.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.degrees.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.degrees.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar RAD_PER_DEG = 180 / Math.PI;\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcz82N2Q4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.degrees.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.fscale.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.fscale.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar scale = __webpack_require__(/*! ./_math-scale */ \"../node_modules/core-js/modules/_math-scale.js\");\n\nvar fround = __webpack_require__(/*! ./_math-fround */ \"../node_modules/core-js/modules/_math-fround.js\");\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/YWQxZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.fscale.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.iaddh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.iaddh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzP2NmZjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.iaddh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.imulh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.imulh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzPzE5NjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.imulh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.isubh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.isubh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoLmpzP2VkNTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.isubh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.rad-per-deg.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.rad-per-deg.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n RAD_PER_DEG: 180 / Math.PI\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzP2M1MjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.rad-per-deg.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.radians.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.radians.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar DEG_PER_RAD = Math.PI / 180;\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcz81NDBkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.radians.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.scale.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.scale.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n scale: __webpack_require__(/*! ./_math-scale */ \"../node_modules/core-js/modules/_math-scale.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzPzExN2IiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.scale.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.signbit.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.signbit.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcz84ODg5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.signbit.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.math.umulh.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.math.umulh.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzPzQ3Y2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.math.umulh.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.define-getter.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.define-getter.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\"); // B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n\n\n__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ \"../node_modules/core-js/modules/_object-forced-pam.js\"), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, {\n get: aFunction(getter),\n enumerable: true,\n configurable: true\n });\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NzJiZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.define-getter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.define-setter.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.define-setter.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"../node_modules/core-js/modules/_object-dp.js\"); // B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n\n\n__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ \"../node_modules/core-js/modules/_object-forced-pam.js\"), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, {\n set: aFunction(setter),\n enumerable: true,\n configurable: true\n });\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/OTdlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.define-setter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.entries.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.entries.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $entries = __webpack_require__(/*! ./_object-to-array */ \"../node_modules/core-js/modules/_object-to-array.js\")(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/YmFhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.entries.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js": -/*!**********************************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar ownKeys = __webpack_require__(/*! ./_own-keys */ \"../node_modules/core-js/modules/_own-keys.js\");\n\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"../node_modules/core-js/modules/_to-iobject.js\");\n\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\");\n\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"../node_modules/core-js/modules/_create-property.js\");\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n\n return result;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/ZDkzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFiQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.lookup-getter.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.lookup-getter.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f; // B.2.2.4 Object.prototype.__lookupGetter__(P)\n\n\n__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ \"../node_modules/core-js/modules/_object-forced-pam.js\"), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/ZTM5YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.lookup-getter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.lookup-setter.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.lookup-setter.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"../node_modules/core-js/modules/_to-object.js\");\n\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"../node_modules/core-js/modules/_to-primitive.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ \"../node_modules/core-js/modules/_object-gopd.js\").f; // B.2.2.5 Object.prototype.__lookupSetter__(P)\n\n\n__webpack_require__(/*! ./_descriptors */ \"../node_modules/core-js/modules/_descriptors.js\") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ \"../node_modules/core-js/modules/_object-forced-pam.js\"), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/Mjg0NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.lookup-setter.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.object.values.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.object.values.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $values = __webpack_require__(/*! ./_object-to-array */ \"../node_modules/core-js/modules/_object-to-array.js\")(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzP2RjMzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.object.values.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.observable.js": -/*!*********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.observable.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/zenparsing/es-observable\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar microtask = __webpack_require__(/*! ./_microtask */ \"../node_modules/core-js/modules/_microtask.js\")();\n\nvar OBSERVABLE = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\")('observable');\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"../node_modules/core-js/modules/_an-instance.js\");\n\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"../node_modules/core-js/modules/_redefine-all.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar forOf = __webpack_require__(/*! ./_for-of */ \"../node_modules/core-js/modules/_for-of.js\");\n\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function getMethod(fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function cleanupSubscription(subscription) {\n var cleanup = subscription._c;\n\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function subscriptionClosed(subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function closeSubscription(subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function Subscription(observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function cleanup() {\n subscription.unsubscribe();\n };else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n }\n\n if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() {\n closeSubscription(this);\n }\n});\n\nvar SubscriptionObserver = function SubscriptionObserver(subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n }\n\n cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n }\n\n cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function next(value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n }\n\n observer.complete();\n }\n });\n return function () {\n done = true;\n };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) {\n items[i] = arguments[i++];\n }\n\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n }\n\n observer.complete();\n }\n });\n return function () {\n done = true;\n };\n });\n }\n});\nhide($Observable.prototype, OBSERVABLE, function () {\n return this;\n});\n$export($export.G, {\n Observable: $Observable\n});\n\n__webpack_require__(/*! ./_set-species */ \"../node_modules/core-js/modules/_set-species.js\")('Observable');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzPzZiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBaEJBO0FBQ0E7QUFrQkE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBakNBO0FBbUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBcERBO0FBQ0E7QUFzREE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQVZBO0FBRkE7QUFlQTtBQXJCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBWkE7QUFjQTtBQUFBO0FBQUE7QUFoQkE7QUFWQTtBQTZCQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQU5BO0FBUUE7QUFBQTtBQUFBO0FBVkE7QUFZQTtBQTNDQTtBQThDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.observable.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.promise.finally.js": -/*!**************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.promise.finally.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// https://github.com/tc39/proposal-promise-finally\n\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar core = __webpack_require__(/*! ./_core */ \"../node_modules/core-js/modules/_core.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"../node_modules/core-js/modules/_species-constructor.js\");\n\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"../node_modules/core-js/modules/_promise-resolve.js\");\n\n$export($export.P + $export.R, 'Promise', {\n 'finally': function _finally(onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () {\n return x;\n });\n } : onFinally, isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () {\n throw e;\n });\n } : onFinally);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcz84Y2Y2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFEQTtBQUlBO0FBWEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.promise.finally.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.promise.try.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.promise.try.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/tc39/proposal-promise-try\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"../node_modules/core-js/modules/_new-promise-capability.js\");\n\nvar perform = __webpack_require__(/*! ./_perform */ \"../node_modules/core-js/modules/_perform.js\");\n\n$export($export.S, 'Promise', {\n 'try': function _try(callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/Mzk0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.promise.try.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.define-metadata.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.define-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\nmetadata.exp({\n defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZGVhNiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.define-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.delete-metadata.js": -/*!**********************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.delete-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\nmetadata.exp({\n deleteMetadata: function deleteMetadata(metadataKey, target\n /* , targetKey */\n ) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/MmY4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.delete-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js": -/*!************************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var Set = __webpack_require__(/*! ./es6.set */ \"../node_modules/core-js/modules/es6.set.js\");\n\nvar from = __webpack_require__(/*! ./_array-from-iterable */ \"../node_modules/core-js/modules/_array-from-iterable.js\");\n\nvar metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function ordinaryMetadataKeys(O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({\n getMetadataKeys: function getMetadataKeys(target\n /* , targetKey */\n ) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzLmpzPzJlYjYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.get-metadata.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.get-metadata.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function ordinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({\n getMetadata: function getMetadata(metadataKey, target\n /* , targetKey */\n ) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/NjU4NiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.get-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js": -/*!****************************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\nmetadata.exp({\n getOwnMetadataKeys: function getOwnMetadataKeys(target\n /* , targetKey */\n ) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/ZjFiNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.get-own-metadata.js": -/*!***********************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.get-own-metadata.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\nmetadata.exp({\n getOwnMetadata: function getOwnMetadata(metadataKey, target\n /* , targetKey */\n ) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS5qcz9hYTM1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.get-own-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.has-metadata.js": -/*!*******************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.has-metadata.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"../node_modules/core-js/modules/_object-gpo.js\");\n\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function ordinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({\n hasMetadata: function hasMetadata(metadataKey, target\n /* , targetKey */\n ) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/YWQ0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.has-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.has-own-metadata.js": -/*!***********************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.has-own-metadata.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\nmetadata.exp({\n hasOwnMetadata: function hasOwnMetadata(metadataKey, target\n /* , targetKey */\n ) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcz83Zjk1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.has-own-metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.reflect.metadata.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.reflect.metadata.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $metadata = __webpack_require__(/*! ./_metadata */ \"../node_modules/core-js/modules/_metadata.js\");\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"../node_modules/core-js/modules/_an-object.js\");\n\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"../node_modules/core-js/modules/_a-function.js\");\n\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n$metadata.exp({\n metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, (targetKey !== undefined ? anObject : aFunction)(target), toMetaKey(targetKey));\n };\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzPzczMjUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQU9BO0FBUkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.reflect.metadata.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.set.from.js": -/*!*******************************************************!*\ - !*** ../node_modules/core-js/modules/es7.set.from.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(/*! ./_set-collection-from */ \"../node_modules/core-js/modules/_set-collection-from.js\")('Set');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/N2YxMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.set.from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.set.of.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/es7.set.of.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(/*! ./_set-collection-of */ \"../node_modules/core-js/modules/_set-collection-of.js\")('Set');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcz81YmFkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.set.of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.set.to-json.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.set.to-json.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.P + $export.R, 'Set', {\n toJSON: __webpack_require__(/*! ./_collection-to-json */ \"../node_modules/core-js/modules/_collection-to-json.js\")('Set')\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ODNmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.set.to-json.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.at.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.at.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/mathiasbynens/String.prototype.at\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $at = __webpack_require__(/*! ./_string-at */ \"../node_modules/core-js/modules/_string-at.js\")(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcz84Y2I5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.at.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.match-all.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.match-all.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://tc39.github.io/String.prototype.matchAll/\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar defined = __webpack_require__(/*! ./_defined */ \"../node_modules/core-js/modules/_defined.js\");\n\nvar toLength = __webpack_require__(/*! ./_to-length */ \"../node_modules/core-js/modules/_to-length.js\");\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"../node_modules/core-js/modules/_is-regexp.js\");\n\nvar getFlags = __webpack_require__(/*! ./_flags */ \"../node_modules/core-js/modules/_flags.js\");\n\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function $RegExpStringIterator(regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(/*! ./_iter-create */ \"../node_modules/core-js/modules/_iter-create.js\")($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n\n return {\n value: match,\n done: match === null\n };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzP2JmOTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.match-all.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.pad-end.js": -/*!*************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.pad-end.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/tc39/proposal-string-pad-start-end\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $pad = __webpack_require__(/*! ./_string-pad */ \"../node_modules/core-js/modules/_string-pad.js\");\n\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"../node_modules/core-js/modules/_user-agent.js\"); // https://github.com/zloirock/core-js/issues/280\n\n\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength\n /* , fillString = ' ' */\n ) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZDU5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.pad-end.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.pad-start.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.pad-start.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/tc39/proposal-string-pad-start-end\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $pad = __webpack_require__(/*! ./_string-pad */ \"../node_modules/core-js/modules/_string-pad.js\");\n\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"../node_modules/core-js/modules/_user-agent.js\"); // https://github.com/zloirock/core-js/issues/280\n\n\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength\n /* , fillString = ' ' */\n ) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzPzg1ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.pad-start.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.trim-left.js": -/*!***************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.trim-left.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n\n__webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\")('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0LmpzPzgyYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.trim-left.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.string.trim-right.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.string.trim-right.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n\n__webpack_require__(/*! ./_string-trim */ \"../node_modules/core-js/modules/_string-trim.js\")('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/ZTVmYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.string.trim-right.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.symbol.async-iterator.js": -/*!********************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.symbol.async-iterator.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_wks-define */ \"../node_modules/core-js/modules/_wks-define.js\")('asyncIterator');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcz9mYTM4Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.symbol.async-iterator.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.symbol.observable.js": -/*!****************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.symbol.observable.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./_wks-define */ \"../node_modules/core-js/modules/_wks-define.js\")('observable');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/MThiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.symbol.observable.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.system.global.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.system.global.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'System', {\n global: __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\")\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsLmpzP2I4NDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.system.global.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.weak-map.from.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.weak-map.from.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(/*! ./_set-collection-from */ \"../node_modules/core-js/modules/_set-collection-from.js\")('WeakMap');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzPzZiNzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.weak-map.from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.weak-map.of.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.weak-map.of.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(/*! ./_set-collection-of */ \"../node_modules/core-js/modules/_set-collection-of.js\")('WeakMap');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/MDNmZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrTWFwJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.weak-map.of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.weak-set.from.js": -/*!************************************************************!*\ - !*** ../node_modules/core-js/modules/es7.weak-set.from.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(/*! ./_set-collection-from */ \"../node_modules/core-js/modules/_set-collection-from.js\")('WeakSet');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzPzZhMWMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.weak-set.from.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/es7.weak-set.of.js": -/*!**********************************************************!*\ - !*** ../node_modules/core-js/modules/es7.weak-set.of.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(/*! ./_set-collection-of */ \"../node_modules/core-js/modules/_set-collection-of.js\")('WeakSet');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/MjM4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/es7.weak-set.of.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/web.dom.iterable.js": -/*!***********************************************************!*\ - !*** ../node_modules/core-js/modules/web.dom.iterable.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $iterators = __webpack_require__(/*! ./es6.array.iterator */ \"../node_modules/core-js/modules/es6.array.iterator.js\");\n\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"../node_modules/core-js/modules/_object-keys.js\");\n\nvar redefine = __webpack_require__(/*! ./_redefine */ \"../node_modules/core-js/modules/_redefine.js\");\n\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar hide = __webpack_require__(/*! ./_hide */ \"../node_modules/core-js/modules/_hide.js\");\n\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"../node_modules/core-js/modules/_iterators.js\");\n\nvar wks = __webpack_require__(/*! ./_wks */ \"../node_modules/core-js/modules/_wks.js\");\n\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\nvar DOMIterables = {\n CSSRuleList: true,\n // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true,\n // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true,\n // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) {\n if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcz81YjU0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQS9CQTtBQUNBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/web.dom.iterable.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/web.immediate.js": -/*!********************************************************!*\ - !*** ../node_modules/core-js/modules/web.immediate.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar $task = __webpack_require__(/*! ./_task */ \"../node_modules/core-js/modules/_task.js\");\n\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcz8xN2RiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/web.immediate.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/modules/web.timers.js": -/*!*****************************************************!*\ - !*** ../node_modules/core-js/modules/web.timers.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(/*! ./_global */ \"../node_modules/core-js/modules/_global.js\");\n\nvar $export = __webpack_require__(/*! ./_export */ \"../node_modules/core-js/modules/_export.js\");\n\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"../node_modules/core-js/modules/_user-agent.js\");\n\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\n\nvar wrap = function wrap(set) {\n return function (fn, time\n /* , ...args */\n ) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcz9lMTI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQURBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/modules/web.timers.js\n"); - -/***/ }), - -/***/ "../node_modules/core-js/shim.js": -/*!***************************************!*\ - !*** ../node_modules/core-js/shim.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("__webpack_require__(/*! ./modules/es6.symbol */ \"../node_modules/core-js/modules/es6.symbol.js\");\n\n__webpack_require__(/*! ./modules/es6.object.create */ \"../node_modules/core-js/modules/es6.object.create.js\");\n\n__webpack_require__(/*! ./modules/es6.object.define-property */ \"../node_modules/core-js/modules/es6.object.define-property.js\");\n\n__webpack_require__(/*! ./modules/es6.object.define-properties */ \"../node_modules/core-js/modules/es6.object.define-properties.js\");\n\n__webpack_require__(/*! ./modules/es6.object.get-own-property-descriptor */ \"../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\");\n\n__webpack_require__(/*! ./modules/es6.object.get-prototype-of */ \"../node_modules/core-js/modules/es6.object.get-prototype-of.js\");\n\n__webpack_require__(/*! ./modules/es6.object.keys */ \"../node_modules/core-js/modules/es6.object.keys.js\");\n\n__webpack_require__(/*! ./modules/es6.object.get-own-property-names */ \"../node_modules/core-js/modules/es6.object.get-own-property-names.js\");\n\n__webpack_require__(/*! ./modules/es6.object.freeze */ \"../node_modules/core-js/modules/es6.object.freeze.js\");\n\n__webpack_require__(/*! ./modules/es6.object.seal */ \"../node_modules/core-js/modules/es6.object.seal.js\");\n\n__webpack_require__(/*! ./modules/es6.object.prevent-extensions */ \"../node_modules/core-js/modules/es6.object.prevent-extensions.js\");\n\n__webpack_require__(/*! ./modules/es6.object.is-frozen */ \"../node_modules/core-js/modules/es6.object.is-frozen.js\");\n\n__webpack_require__(/*! ./modules/es6.object.is-sealed */ \"../node_modules/core-js/modules/es6.object.is-sealed.js\");\n\n__webpack_require__(/*! ./modules/es6.object.is-extensible */ \"../node_modules/core-js/modules/es6.object.is-extensible.js\");\n\n__webpack_require__(/*! ./modules/es6.object.assign */ \"../node_modules/core-js/modules/es6.object.assign.js\");\n\n__webpack_require__(/*! ./modules/es6.object.is */ \"../node_modules/core-js/modules/es6.object.is.js\");\n\n__webpack_require__(/*! ./modules/es6.object.set-prototype-of */ \"../node_modules/core-js/modules/es6.object.set-prototype-of.js\");\n\n__webpack_require__(/*! ./modules/es6.object.to-string */ \"../node_modules/core-js/modules/es6.object.to-string.js\");\n\n__webpack_require__(/*! ./modules/es6.function.bind */ \"../node_modules/core-js/modules/es6.function.bind.js\");\n\n__webpack_require__(/*! ./modules/es6.function.name */ \"../node_modules/core-js/modules/es6.function.name.js\");\n\n__webpack_require__(/*! ./modules/es6.function.has-instance */ \"../node_modules/core-js/modules/es6.function.has-instance.js\");\n\n__webpack_require__(/*! ./modules/es6.parse-int */ \"../node_modules/core-js/modules/es6.parse-int.js\");\n\n__webpack_require__(/*! ./modules/es6.parse-float */ \"../node_modules/core-js/modules/es6.parse-float.js\");\n\n__webpack_require__(/*! ./modules/es6.number.constructor */ \"../node_modules/core-js/modules/es6.number.constructor.js\");\n\n__webpack_require__(/*! ./modules/es6.number.to-fixed */ \"../node_modules/core-js/modules/es6.number.to-fixed.js\");\n\n__webpack_require__(/*! ./modules/es6.number.to-precision */ \"../node_modules/core-js/modules/es6.number.to-precision.js\");\n\n__webpack_require__(/*! ./modules/es6.number.epsilon */ \"../node_modules/core-js/modules/es6.number.epsilon.js\");\n\n__webpack_require__(/*! ./modules/es6.number.is-finite */ \"../node_modules/core-js/modules/es6.number.is-finite.js\");\n\n__webpack_require__(/*! ./modules/es6.number.is-integer */ \"../node_modules/core-js/modules/es6.number.is-integer.js\");\n\n__webpack_require__(/*! ./modules/es6.number.is-nan */ \"../node_modules/core-js/modules/es6.number.is-nan.js\");\n\n__webpack_require__(/*! ./modules/es6.number.is-safe-integer */ \"../node_modules/core-js/modules/es6.number.is-safe-integer.js\");\n\n__webpack_require__(/*! ./modules/es6.number.max-safe-integer */ \"../node_modules/core-js/modules/es6.number.max-safe-integer.js\");\n\n__webpack_require__(/*! ./modules/es6.number.min-safe-integer */ \"../node_modules/core-js/modules/es6.number.min-safe-integer.js\");\n\n__webpack_require__(/*! ./modules/es6.number.parse-float */ \"../node_modules/core-js/modules/es6.number.parse-float.js\");\n\n__webpack_require__(/*! ./modules/es6.number.parse-int */ \"../node_modules/core-js/modules/es6.number.parse-int.js\");\n\n__webpack_require__(/*! ./modules/es6.math.acosh */ \"../node_modules/core-js/modules/es6.math.acosh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.asinh */ \"../node_modules/core-js/modules/es6.math.asinh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.atanh */ \"../node_modules/core-js/modules/es6.math.atanh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.cbrt */ \"../node_modules/core-js/modules/es6.math.cbrt.js\");\n\n__webpack_require__(/*! ./modules/es6.math.clz32 */ \"../node_modules/core-js/modules/es6.math.clz32.js\");\n\n__webpack_require__(/*! ./modules/es6.math.cosh */ \"../node_modules/core-js/modules/es6.math.cosh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.expm1 */ \"../node_modules/core-js/modules/es6.math.expm1.js\");\n\n__webpack_require__(/*! ./modules/es6.math.fround */ \"../node_modules/core-js/modules/es6.math.fround.js\");\n\n__webpack_require__(/*! ./modules/es6.math.hypot */ \"../node_modules/core-js/modules/es6.math.hypot.js\");\n\n__webpack_require__(/*! ./modules/es6.math.imul */ \"../node_modules/core-js/modules/es6.math.imul.js\");\n\n__webpack_require__(/*! ./modules/es6.math.log10 */ \"../node_modules/core-js/modules/es6.math.log10.js\");\n\n__webpack_require__(/*! ./modules/es6.math.log1p */ \"../node_modules/core-js/modules/es6.math.log1p.js\");\n\n__webpack_require__(/*! ./modules/es6.math.log2 */ \"../node_modules/core-js/modules/es6.math.log2.js\");\n\n__webpack_require__(/*! ./modules/es6.math.sign */ \"../node_modules/core-js/modules/es6.math.sign.js\");\n\n__webpack_require__(/*! ./modules/es6.math.sinh */ \"../node_modules/core-js/modules/es6.math.sinh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.tanh */ \"../node_modules/core-js/modules/es6.math.tanh.js\");\n\n__webpack_require__(/*! ./modules/es6.math.trunc */ \"../node_modules/core-js/modules/es6.math.trunc.js\");\n\n__webpack_require__(/*! ./modules/es6.string.from-code-point */ \"../node_modules/core-js/modules/es6.string.from-code-point.js\");\n\n__webpack_require__(/*! ./modules/es6.string.raw */ \"../node_modules/core-js/modules/es6.string.raw.js\");\n\n__webpack_require__(/*! ./modules/es6.string.trim */ \"../node_modules/core-js/modules/es6.string.trim.js\");\n\n__webpack_require__(/*! ./modules/es6.string.iterator */ \"../node_modules/core-js/modules/es6.string.iterator.js\");\n\n__webpack_require__(/*! ./modules/es6.string.code-point-at */ \"../node_modules/core-js/modules/es6.string.code-point-at.js\");\n\n__webpack_require__(/*! ./modules/es6.string.ends-with */ \"../node_modules/core-js/modules/es6.string.ends-with.js\");\n\n__webpack_require__(/*! ./modules/es6.string.includes */ \"../node_modules/core-js/modules/es6.string.includes.js\");\n\n__webpack_require__(/*! ./modules/es6.string.repeat */ \"../node_modules/core-js/modules/es6.string.repeat.js\");\n\n__webpack_require__(/*! ./modules/es6.string.starts-with */ \"../node_modules/core-js/modules/es6.string.starts-with.js\");\n\n__webpack_require__(/*! ./modules/es6.string.anchor */ \"../node_modules/core-js/modules/es6.string.anchor.js\");\n\n__webpack_require__(/*! ./modules/es6.string.big */ \"../node_modules/core-js/modules/es6.string.big.js\");\n\n__webpack_require__(/*! ./modules/es6.string.blink */ \"../node_modules/core-js/modules/es6.string.blink.js\");\n\n__webpack_require__(/*! ./modules/es6.string.bold */ \"../node_modules/core-js/modules/es6.string.bold.js\");\n\n__webpack_require__(/*! ./modules/es6.string.fixed */ \"../node_modules/core-js/modules/es6.string.fixed.js\");\n\n__webpack_require__(/*! ./modules/es6.string.fontcolor */ \"../node_modules/core-js/modules/es6.string.fontcolor.js\");\n\n__webpack_require__(/*! ./modules/es6.string.fontsize */ \"../node_modules/core-js/modules/es6.string.fontsize.js\");\n\n__webpack_require__(/*! ./modules/es6.string.italics */ \"../node_modules/core-js/modules/es6.string.italics.js\");\n\n__webpack_require__(/*! ./modules/es6.string.link */ \"../node_modules/core-js/modules/es6.string.link.js\");\n\n__webpack_require__(/*! ./modules/es6.string.small */ \"../node_modules/core-js/modules/es6.string.small.js\");\n\n__webpack_require__(/*! ./modules/es6.string.strike */ \"../node_modules/core-js/modules/es6.string.strike.js\");\n\n__webpack_require__(/*! ./modules/es6.string.sub */ \"../node_modules/core-js/modules/es6.string.sub.js\");\n\n__webpack_require__(/*! ./modules/es6.string.sup */ \"../node_modules/core-js/modules/es6.string.sup.js\");\n\n__webpack_require__(/*! ./modules/es6.date.now */ \"../node_modules/core-js/modules/es6.date.now.js\");\n\n__webpack_require__(/*! ./modules/es6.date.to-json */ \"../node_modules/core-js/modules/es6.date.to-json.js\");\n\n__webpack_require__(/*! ./modules/es6.date.to-iso-string */ \"../node_modules/core-js/modules/es6.date.to-iso-string.js\");\n\n__webpack_require__(/*! ./modules/es6.date.to-string */ \"../node_modules/core-js/modules/es6.date.to-string.js\");\n\n__webpack_require__(/*! ./modules/es6.date.to-primitive */ \"../node_modules/core-js/modules/es6.date.to-primitive.js\");\n\n__webpack_require__(/*! ./modules/es6.array.is-array */ \"../node_modules/core-js/modules/es6.array.is-array.js\");\n\n__webpack_require__(/*! ./modules/es6.array.from */ \"../node_modules/core-js/modules/es6.array.from.js\");\n\n__webpack_require__(/*! ./modules/es6.array.of */ \"../node_modules/core-js/modules/es6.array.of.js\");\n\n__webpack_require__(/*! ./modules/es6.array.join */ \"../node_modules/core-js/modules/es6.array.join.js\");\n\n__webpack_require__(/*! ./modules/es6.array.slice */ \"../node_modules/core-js/modules/es6.array.slice.js\");\n\n__webpack_require__(/*! ./modules/es6.array.sort */ \"../node_modules/core-js/modules/es6.array.sort.js\");\n\n__webpack_require__(/*! ./modules/es6.array.for-each */ \"../node_modules/core-js/modules/es6.array.for-each.js\");\n\n__webpack_require__(/*! ./modules/es6.array.map */ \"../node_modules/core-js/modules/es6.array.map.js\");\n\n__webpack_require__(/*! ./modules/es6.array.filter */ \"../node_modules/core-js/modules/es6.array.filter.js\");\n\n__webpack_require__(/*! ./modules/es6.array.some */ \"../node_modules/core-js/modules/es6.array.some.js\");\n\n__webpack_require__(/*! ./modules/es6.array.every */ \"../node_modules/core-js/modules/es6.array.every.js\");\n\n__webpack_require__(/*! ./modules/es6.array.reduce */ \"../node_modules/core-js/modules/es6.array.reduce.js\");\n\n__webpack_require__(/*! ./modules/es6.array.reduce-right */ \"../node_modules/core-js/modules/es6.array.reduce-right.js\");\n\n__webpack_require__(/*! ./modules/es6.array.index-of */ \"../node_modules/core-js/modules/es6.array.index-of.js\");\n\n__webpack_require__(/*! ./modules/es6.array.last-index-of */ \"../node_modules/core-js/modules/es6.array.last-index-of.js\");\n\n__webpack_require__(/*! ./modules/es6.array.copy-within */ \"../node_modules/core-js/modules/es6.array.copy-within.js\");\n\n__webpack_require__(/*! ./modules/es6.array.fill */ \"../node_modules/core-js/modules/es6.array.fill.js\");\n\n__webpack_require__(/*! ./modules/es6.array.find */ \"../node_modules/core-js/modules/es6.array.find.js\");\n\n__webpack_require__(/*! ./modules/es6.array.find-index */ \"../node_modules/core-js/modules/es6.array.find-index.js\");\n\n__webpack_require__(/*! ./modules/es6.array.species */ \"../node_modules/core-js/modules/es6.array.species.js\");\n\n__webpack_require__(/*! ./modules/es6.array.iterator */ \"../node_modules/core-js/modules/es6.array.iterator.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.constructor */ \"../node_modules/core-js/modules/es6.regexp.constructor.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.exec */ \"../node_modules/core-js/modules/es6.regexp.exec.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.to-string */ \"../node_modules/core-js/modules/es6.regexp.to-string.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.flags */ \"../node_modules/core-js/modules/es6.regexp.flags.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.match */ \"../node_modules/core-js/modules/es6.regexp.match.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.replace */ \"../node_modules/core-js/modules/es6.regexp.replace.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.search */ \"../node_modules/core-js/modules/es6.regexp.search.js\");\n\n__webpack_require__(/*! ./modules/es6.regexp.split */ \"../node_modules/core-js/modules/es6.regexp.split.js\");\n\n__webpack_require__(/*! ./modules/es6.promise */ \"../node_modules/core-js/modules/es6.promise.js\");\n\n__webpack_require__(/*! ./modules/es6.map */ \"../node_modules/core-js/modules/es6.map.js\");\n\n__webpack_require__(/*! ./modules/es6.set */ \"../node_modules/core-js/modules/es6.set.js\");\n\n__webpack_require__(/*! ./modules/es6.weak-map */ \"../node_modules/core-js/modules/es6.weak-map.js\");\n\n__webpack_require__(/*! ./modules/es6.weak-set */ \"../node_modules/core-js/modules/es6.weak-set.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.array-buffer */ \"../node_modules/core-js/modules/es6.typed.array-buffer.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.data-view */ \"../node_modules/core-js/modules/es6.typed.data-view.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.int8-array */ \"../node_modules/core-js/modules/es6.typed.int8-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.uint8-array */ \"../node_modules/core-js/modules/es6.typed.uint8-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.uint8-clamped-array */ \"../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.int16-array */ \"../node_modules/core-js/modules/es6.typed.int16-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.uint16-array */ \"../node_modules/core-js/modules/es6.typed.uint16-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.int32-array */ \"../node_modules/core-js/modules/es6.typed.int32-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.uint32-array */ \"../node_modules/core-js/modules/es6.typed.uint32-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.float32-array */ \"../node_modules/core-js/modules/es6.typed.float32-array.js\");\n\n__webpack_require__(/*! ./modules/es6.typed.float64-array */ \"../node_modules/core-js/modules/es6.typed.float64-array.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.apply */ \"../node_modules/core-js/modules/es6.reflect.apply.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.construct */ \"../node_modules/core-js/modules/es6.reflect.construct.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.define-property */ \"../node_modules/core-js/modules/es6.reflect.define-property.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.delete-property */ \"../node_modules/core-js/modules/es6.reflect.delete-property.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.enumerate */ \"../node_modules/core-js/modules/es6.reflect.enumerate.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.get */ \"../node_modules/core-js/modules/es6.reflect.get.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.get-own-property-descriptor */ \"../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.get-prototype-of */ \"../node_modules/core-js/modules/es6.reflect.get-prototype-of.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.has */ \"../node_modules/core-js/modules/es6.reflect.has.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.is-extensible */ \"../node_modules/core-js/modules/es6.reflect.is-extensible.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.own-keys */ \"../node_modules/core-js/modules/es6.reflect.own-keys.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.prevent-extensions */ \"../node_modules/core-js/modules/es6.reflect.prevent-extensions.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.set */ \"../node_modules/core-js/modules/es6.reflect.set.js\");\n\n__webpack_require__(/*! ./modules/es6.reflect.set-prototype-of */ \"../node_modules/core-js/modules/es6.reflect.set-prototype-of.js\");\n\n__webpack_require__(/*! ./modules/es7.array.includes */ \"../node_modules/core-js/modules/es7.array.includes.js\");\n\n__webpack_require__(/*! ./modules/es7.array.flat-map */ \"../node_modules/core-js/modules/es7.array.flat-map.js\");\n\n__webpack_require__(/*! ./modules/es7.array.flatten */ \"../node_modules/core-js/modules/es7.array.flatten.js\");\n\n__webpack_require__(/*! ./modules/es7.string.at */ \"../node_modules/core-js/modules/es7.string.at.js\");\n\n__webpack_require__(/*! ./modules/es7.string.pad-start */ \"../node_modules/core-js/modules/es7.string.pad-start.js\");\n\n__webpack_require__(/*! ./modules/es7.string.pad-end */ \"../node_modules/core-js/modules/es7.string.pad-end.js\");\n\n__webpack_require__(/*! ./modules/es7.string.trim-left */ \"../node_modules/core-js/modules/es7.string.trim-left.js\");\n\n__webpack_require__(/*! ./modules/es7.string.trim-right */ \"../node_modules/core-js/modules/es7.string.trim-right.js\");\n\n__webpack_require__(/*! ./modules/es7.string.match-all */ \"../node_modules/core-js/modules/es7.string.match-all.js\");\n\n__webpack_require__(/*! ./modules/es7.symbol.async-iterator */ \"../node_modules/core-js/modules/es7.symbol.async-iterator.js\");\n\n__webpack_require__(/*! ./modules/es7.symbol.observable */ \"../node_modules/core-js/modules/es7.symbol.observable.js\");\n\n__webpack_require__(/*! ./modules/es7.object.get-own-property-descriptors */ \"../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\");\n\n__webpack_require__(/*! ./modules/es7.object.values */ \"../node_modules/core-js/modules/es7.object.values.js\");\n\n__webpack_require__(/*! ./modules/es7.object.entries */ \"../node_modules/core-js/modules/es7.object.entries.js\");\n\n__webpack_require__(/*! ./modules/es7.object.define-getter */ \"../node_modules/core-js/modules/es7.object.define-getter.js\");\n\n__webpack_require__(/*! ./modules/es7.object.define-setter */ \"../node_modules/core-js/modules/es7.object.define-setter.js\");\n\n__webpack_require__(/*! ./modules/es7.object.lookup-getter */ \"../node_modules/core-js/modules/es7.object.lookup-getter.js\");\n\n__webpack_require__(/*! ./modules/es7.object.lookup-setter */ \"../node_modules/core-js/modules/es7.object.lookup-setter.js\");\n\n__webpack_require__(/*! ./modules/es7.map.to-json */ \"../node_modules/core-js/modules/es7.map.to-json.js\");\n\n__webpack_require__(/*! ./modules/es7.set.to-json */ \"../node_modules/core-js/modules/es7.set.to-json.js\");\n\n__webpack_require__(/*! ./modules/es7.map.of */ \"../node_modules/core-js/modules/es7.map.of.js\");\n\n__webpack_require__(/*! ./modules/es7.set.of */ \"../node_modules/core-js/modules/es7.set.of.js\");\n\n__webpack_require__(/*! ./modules/es7.weak-map.of */ \"../node_modules/core-js/modules/es7.weak-map.of.js\");\n\n__webpack_require__(/*! ./modules/es7.weak-set.of */ \"../node_modules/core-js/modules/es7.weak-set.of.js\");\n\n__webpack_require__(/*! ./modules/es7.map.from */ \"../node_modules/core-js/modules/es7.map.from.js\");\n\n__webpack_require__(/*! ./modules/es7.set.from */ \"../node_modules/core-js/modules/es7.set.from.js\");\n\n__webpack_require__(/*! ./modules/es7.weak-map.from */ \"../node_modules/core-js/modules/es7.weak-map.from.js\");\n\n__webpack_require__(/*! ./modules/es7.weak-set.from */ \"../node_modules/core-js/modules/es7.weak-set.from.js\");\n\n__webpack_require__(/*! ./modules/es7.global */ \"../node_modules/core-js/modules/es7.global.js\");\n\n__webpack_require__(/*! ./modules/es7.system.global */ \"../node_modules/core-js/modules/es7.system.global.js\");\n\n__webpack_require__(/*! ./modules/es7.error.is-error */ \"../node_modules/core-js/modules/es7.error.is-error.js\");\n\n__webpack_require__(/*! ./modules/es7.math.clamp */ \"../node_modules/core-js/modules/es7.math.clamp.js\");\n\n__webpack_require__(/*! ./modules/es7.math.deg-per-rad */ \"../node_modules/core-js/modules/es7.math.deg-per-rad.js\");\n\n__webpack_require__(/*! ./modules/es7.math.degrees */ \"../node_modules/core-js/modules/es7.math.degrees.js\");\n\n__webpack_require__(/*! ./modules/es7.math.fscale */ \"../node_modules/core-js/modules/es7.math.fscale.js\");\n\n__webpack_require__(/*! ./modules/es7.math.iaddh */ \"../node_modules/core-js/modules/es7.math.iaddh.js\");\n\n__webpack_require__(/*! ./modules/es7.math.isubh */ \"../node_modules/core-js/modules/es7.math.isubh.js\");\n\n__webpack_require__(/*! ./modules/es7.math.imulh */ \"../node_modules/core-js/modules/es7.math.imulh.js\");\n\n__webpack_require__(/*! ./modules/es7.math.rad-per-deg */ \"../node_modules/core-js/modules/es7.math.rad-per-deg.js\");\n\n__webpack_require__(/*! ./modules/es7.math.radians */ \"../node_modules/core-js/modules/es7.math.radians.js\");\n\n__webpack_require__(/*! ./modules/es7.math.scale */ \"../node_modules/core-js/modules/es7.math.scale.js\");\n\n__webpack_require__(/*! ./modules/es7.math.umulh */ \"../node_modules/core-js/modules/es7.math.umulh.js\");\n\n__webpack_require__(/*! ./modules/es7.math.signbit */ \"../node_modules/core-js/modules/es7.math.signbit.js\");\n\n__webpack_require__(/*! ./modules/es7.promise.finally */ \"../node_modules/core-js/modules/es7.promise.finally.js\");\n\n__webpack_require__(/*! ./modules/es7.promise.try */ \"../node_modules/core-js/modules/es7.promise.try.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.define-metadata */ \"../node_modules/core-js/modules/es7.reflect.define-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.delete-metadata */ \"../node_modules/core-js/modules/es7.reflect.delete-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.get-metadata */ \"../node_modules/core-js/modules/es7.reflect.get-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.get-metadata-keys */ \"../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.get-own-metadata */ \"../node_modules/core-js/modules/es7.reflect.get-own-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.get-own-metadata-keys */ \"../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.has-metadata */ \"../node_modules/core-js/modules/es7.reflect.has-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.has-own-metadata */ \"../node_modules/core-js/modules/es7.reflect.has-own-metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.reflect.metadata */ \"../node_modules/core-js/modules/es7.reflect.metadata.js\");\n\n__webpack_require__(/*! ./modules/es7.asap */ \"../node_modules/core-js/modules/es7.asap.js\");\n\n__webpack_require__(/*! ./modules/es7.observable */ \"../node_modules/core-js/modules/es7.observable.js\");\n\n__webpack_require__(/*! ./modules/web.timers */ \"../node_modules/core-js/modules/web.timers.js\");\n\n__webpack_require__(/*! ./modules/web.immediate */ \"../node_modules/core-js/modules/web.immediate.js\");\n\n__webpack_require__(/*! ./modules/web.dom.iterable */ \"../node_modules/core-js/modules/web.dom.iterable.js\");\n\nmodule.exports = __webpack_require__(/*! ./modules/_core */ \"../node_modules/core-js/modules/_core.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9zaGltLmpzP2FhYjQiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNlYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2x6MzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5mcm91bmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5oeXBvdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxMCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRydW5jJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ibGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1YicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5qb2luJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb21lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaWFkZGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pc3ViaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmltdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC51bXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFzYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL21vZHVsZXMvX2NvcmUnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/core-js/shim.js\n"); - -/***/ }), - -/***/ "../node_modules/core-util-is/lib/util.js": -/*!************************************************!*\ - !*** ../node_modules/core-util-is/lib/util.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(Buffer) {function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n\n return objectToString(arg) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return _typeof(arg) === 'symbol';\n}\n\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\n\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return _typeof(arg) === 'object' && arg !== null;\n}\n\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\n\nexports.isDate = isDate;\n\nfunction isError(e) {\n return objectToString(e) === '[object Error]' || e instanceof Error;\n}\n\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nexports.isPrimitive = isPrimitive;\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS11dGlsLWlzL2xpYi91dGlsLmpzPzllYjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbiAgfVxuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcjtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/core-util-is/lib/util.js\n"); - -/***/ }), - -/***/ "../node_modules/country-data/data/continents.js": -/*!*******************************************************!*\ - !*** ../node_modules/country-data/data/continents.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar _ = __webpack_require__(/*! underscore */ \"../node_modules/country-data/node_modules/underscore/underscore.js\");\n\nvar regions = __webpack_require__(/*! ./regions.js */ \"../node_modules/country-data/data/regions.js\");\n\nvar continents = {};\ncontinents.asia = {\n name: 'Asia',\n regions: ['centralAsia', 'southernAsia', 'southeastAsia', 'eastAsia', 'westernAsia'],\n countries: _.flatten([regions.centralAsia.countries, regions.southernAsia.countries, regions.southeastAsia.countries, regions.eastAsia.countries, regions.westernAsia.countries]).sort()\n};\ncontinents.africa = {\n name: 'Africa',\n regions: ['centralAfrica', 'northAfrica', 'southernAfrica', 'eastAfrica', 'westAfrica'],\n countries: _.flatten([regions.centralAfrica.countries, regions.northAfrica.countries, regions.southernAfrica.countries, regions.eastAfrica.countries, regions.westAfrica.countries]).sort()\n};\ncontinents.northAmerica = {\n name: 'North America',\n regions: ['centralAmerica', 'northernAmerica', 'caribbean'],\n countries: _.flatten([regions.centralAmerica.countries, regions.northernAmerica.countries, regions.caribbean.countries]).sort()\n};\ncontinents.southAmerica = {\n name: 'South America',\n regions: ['southAmerica'],\n countries: _.flatten([regions.southAmerica.countries]).sort()\n};\ncontinents.antartica = {\n name: 'Antartica',\n regions: ['antartica'],\n countries: _.flatten([regions.antartica.countries]).sort()\n};\ncontinents.europe = {\n name: 'Europe',\n regions: ['northernEurope', 'southernEurope', 'easternEurope', 'westernEurope'],\n countries: _.flatten([regions.northernEurope.countries, regions.southernEurope.countries, regions.easternEurope.countries, regions.westernEurope.countries]).sort()\n};\ncontinents.oceania = {\n name: 'Oceania',\n regions: ['australia', 'melanesia', 'micronesia', 'polynesia'],\n countries: _.flatten([regions.australia.countries, regions.melanesia.countries, regions.micronesia.countries, regions.polynesia.countries]).sort()\n};\nmodule.exports = continents;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL2NvbnRpbmVudHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL2NvbnRpbmVudHMuanM/MGE0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyIHJlZ2lvbnMgPSByZXF1aXJlKCcuL3JlZ2lvbnMuanMnKTtcbnZhciBjb250aW5lbnRzID0ge307XG5cbmNvbnRpbmVudHMuYXNpYSA9IHtcbiAgbmFtZTogJ0FzaWEnLFxuICByZWdpb25zOiBbJ2NlbnRyYWxBc2lhJywgJ3NvdXRoZXJuQXNpYScsICdzb3V0aGVhc3RBc2lhJywgJ2Vhc3RBc2lhJywgJ3dlc3Rlcm5Bc2lhJ10sXG4gIGNvdW50cmllczogXy5mbGF0dGVuKFtcbiAgICByZWdpb25zLmNlbnRyYWxBc2lhLmNvdW50cmllcyxcbiAgICByZWdpb25zLnNvdXRoZXJuQXNpYS5jb3VudHJpZXMsXG4gICAgcmVnaW9ucy5zb3V0aGVhc3RBc2lhLmNvdW50cmllcyxcbiAgICByZWdpb25zLmVhc3RBc2lhLmNvdW50cmllcyxcbiAgICByZWdpb25zLndlc3Rlcm5Bc2lhLmNvdW50cmllc1xuICBdKVxuICAuc29ydCgpXG59O1xuXG5jb250aW5lbnRzLmFmcmljYSA9IHtcbiAgbmFtZTogJ0FmcmljYScsXG4gIHJlZ2lvbnM6IFsnY2VudHJhbEFmcmljYScsICdub3J0aEFmcmljYScsICdzb3V0aGVybkFmcmljYScsICdlYXN0QWZyaWNhJywgJ3dlc3RBZnJpY2EnXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgICAgcmVnaW9ucy5jZW50cmFsQWZyaWNhLmNvdW50cmllcyxcbiAgICAgIHJlZ2lvbnMubm9ydGhBZnJpY2EuY291bnRyaWVzLFxuICAgICAgcmVnaW9ucy5zb3V0aGVybkFmcmljYS5jb3VudHJpZXMsXG4gICAgICByZWdpb25zLmVhc3RBZnJpY2EuY291bnRyaWVzLFxuICAgICAgcmVnaW9ucy53ZXN0QWZyaWNhLmNvdW50cmllc1xuICBdKVxuICAuc29ydCgpXG59O1xuXG5jb250aW5lbnRzLm5vcnRoQW1lcmljYSA9IHtcbiAgbmFtZTogJ05vcnRoIEFtZXJpY2EnLFxuICByZWdpb25zOiBbJ2NlbnRyYWxBbWVyaWNhJywgJ25vcnRoZXJuQW1lcmljYScsICdjYXJpYmJlYW4nXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgIHJlZ2lvbnMuY2VudHJhbEFtZXJpY2EuY291bnRyaWVzLFxuICAgIHJlZ2lvbnMubm9ydGhlcm5BbWVyaWNhLmNvdW50cmllcyxcbiAgICByZWdpb25zLmNhcmliYmVhbi5jb3VudHJpZXNcbiAgXSlcbiAgLnNvcnQoKVxufTtcblxuY29udGluZW50cy5zb3V0aEFtZXJpY2EgPSB7XG4gIG5hbWU6ICdTb3V0aCBBbWVyaWNhJyxcbiAgcmVnaW9uczogWydzb3V0aEFtZXJpY2EnXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgIHJlZ2lvbnMuc291dGhBbWVyaWNhLmNvdW50cmllc1xuICBdKVxuICAuc29ydCgpXG59XG5cbmNvbnRpbmVudHMuYW50YXJ0aWNhID0ge1xuICBuYW1lOiAnQW50YXJ0aWNhJyxcbiAgcmVnaW9uczogWydhbnRhcnRpY2EnXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgIHJlZ2lvbnMuYW50YXJ0aWNhLmNvdW50cmllc1xuICBdKVxuICAuc29ydCgpXG59XG5cbmNvbnRpbmVudHMuZXVyb3BlID0ge1xuICBuYW1lOiAnRXVyb3BlJyxcbiAgcmVnaW9uczogWydub3J0aGVybkV1cm9wZScsICdzb3V0aGVybkV1cm9wZScsICdlYXN0ZXJuRXVyb3BlJywgJ3dlc3Rlcm5FdXJvcGUnXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgIHJlZ2lvbnMubm9ydGhlcm5FdXJvcGUuY291bnRyaWVzLFxuICAgIHJlZ2lvbnMuc291dGhlcm5FdXJvcGUuY291bnRyaWVzLFxuICAgIHJlZ2lvbnMuZWFzdGVybkV1cm9wZS5jb3VudHJpZXMsXG4gICAgcmVnaW9ucy53ZXN0ZXJuRXVyb3BlLmNvdW50cmllc1xuICBdKVxuICAuc29ydCgpXG59XG5cbmNvbnRpbmVudHMub2NlYW5pYSA9IHtcbiAgbmFtZTogJ09jZWFuaWEnLFxuICByZWdpb25zOiBbJ2F1c3RyYWxpYScsICdtZWxhbmVzaWEnLCAnbWljcm9uZXNpYScsICdwb2x5bmVzaWEnXSxcbiAgY291bnRyaWVzOiBfLmZsYXR0ZW4oW1xuICAgIHJlZ2lvbnMuYXVzdHJhbGlhLmNvdW50cmllcyxcbiAgICByZWdpb25zLm1lbGFuZXNpYS5jb3VudHJpZXMsXG4gICAgcmVnaW9ucy5taWNyb25lc2lhLmNvdW50cmllcyxcbiAgICByZWdpb25zLnBvbHluZXNpYS5jb3VudHJpZXNcbiAgXSlcbiAgLnNvcnQoKVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb250aW5lbnRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/country-data/data/continents.js\n"); - -/***/ }), - -/***/ "../node_modules/country-data/data/countries.json": -/*!********************************************************!*\ - !*** ../node_modules/country-data/data/countries.json ***! - \********************************************************/ -/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"[{\\\"alpha2\\\":\\\"AC\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[\\\"+247\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"SHP\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Ascension Island\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"AD\\\",\\\"alpha3\\\":\\\"AND\\\",\\\"countryCallingCodes\\\":[\\\"+376\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇦🇩\\\",\\\"ioc\\\":\\\"AND\\\",\\\"languages\\\":[\\\"cat\\\"],\\\"name\\\":\\\"Andorra\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AE\\\",\\\"alpha3\\\":\\\"ARE\\\",\\\"countryCallingCodes\\\":[\\\"+971\\\"],\\\"currencies\\\":[\\\"AED\\\"],\\\"emoji\\\":\\\"🇦🇪\\\",\\\"ioc\\\":\\\"UAE\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"United Arab Emirates\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AF\\\",\\\"alpha3\\\":\\\"AFG\\\",\\\"countryCallingCodes\\\":[\\\"+93\\\"],\\\"currencies\\\":[\\\"AFN\\\"],\\\"emoji\\\":\\\"🇦🇫\\\",\\\"ioc\\\":\\\"AFG\\\",\\\"languages\\\":[\\\"pus\\\"],\\\"name\\\":\\\"Afghanistan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AG\\\",\\\"alpha3\\\":\\\"ATG\\\",\\\"countryCallingCodes\\\":[\\\"+1 268\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇦🇬\\\",\\\"ioc\\\":\\\"ANT\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Antigua And Barbuda\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AI\\\",\\\"alpha3\\\":\\\"AIA\\\",\\\"countryCallingCodes\\\":[\\\"+1 264\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇦🇮\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Anguilla\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AI\\\",\\\"alpha3\\\":\\\"AFI\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"French Afar and Issas\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"AL\\\",\\\"alpha3\\\":\\\"ALB\\\",\\\"countryCallingCodes\\\":[\\\"+355\\\"],\\\"currencies\\\":[\\\"ALL\\\"],\\\"emoji\\\":\\\"🇦🇱\\\",\\\"ioc\\\":\\\"ALB\\\",\\\"languages\\\":[\\\"sqi\\\"],\\\"name\\\":\\\"Albania\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AM\\\",\\\"alpha3\\\":\\\"ARM\\\",\\\"countryCallingCodes\\\":[\\\"+374\\\"],\\\"currencies\\\":[\\\"AMD\\\"],\\\"emoji\\\":\\\"🇦🇲\\\",\\\"ioc\\\":\\\"ARM\\\",\\\"languages\\\":[\\\"hye\\\",\\\"rus\\\"],\\\"name\\\":\\\"Armenia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AN\\\",\\\"alpha3\\\":\\\"ANT\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Netherlands Antilles\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"AO\\\",\\\"alpha3\\\":\\\"AGO\\\",\\\"countryCallingCodes\\\":[\\\"+244\\\"],\\\"currencies\\\":[\\\"AOA\\\"],\\\"emoji\\\":\\\"🇦🇴\\\",\\\"ioc\\\":\\\"ANG\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Angola\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AQ\\\",\\\"alpha3\\\":\\\"ATA\\\",\\\"countryCallingCodes\\\":[\\\"+672\\\"],\\\"currencies\\\":[],\\\"emoji\\\":\\\"🇦🇶\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Antarctica\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AR\\\",\\\"alpha3\\\":\\\"ARG\\\",\\\"countryCallingCodes\\\":[\\\"+54\\\"],\\\"currencies\\\":[\\\"ARS\\\"],\\\"emoji\\\":\\\"🇦🇷\\\",\\\"ioc\\\":\\\"ARG\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Argentina\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AS\\\",\\\"alpha3\\\":\\\"ASM\\\",\\\"countryCallingCodes\\\":[\\\"+1 684\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇦🇸\\\",\\\"ioc\\\":\\\"ASA\\\",\\\"languages\\\":[\\\"eng\\\",\\\"smo\\\"],\\\"name\\\":\\\"American Samoa\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AT\\\",\\\"alpha3\\\":\\\"AUT\\\",\\\"countryCallingCodes\\\":[\\\"+43\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇦🇹\\\",\\\"ioc\\\":\\\"AUT\\\",\\\"languages\\\":[\\\"deu\\\"],\\\"name\\\":\\\"Austria\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AU\\\",\\\"alpha3\\\":\\\"AUS\\\",\\\"countryCallingCodes\\\":[\\\"+61\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇦🇺\\\",\\\"ioc\\\":\\\"AUS\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Australia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AW\\\",\\\"alpha3\\\":\\\"ABW\\\",\\\"countryCallingCodes\\\":[\\\"+297\\\"],\\\"currencies\\\":[\\\"AWG\\\"],\\\"emoji\\\":\\\"🇦🇼\\\",\\\"ioc\\\":\\\"ARU\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Aruba\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AX\\\",\\\"alpha3\\\":\\\"ALA\\\",\\\"countryCallingCodes\\\":[\\\"+358\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇦🇽\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"swe\\\"],\\\"name\\\":\\\"Åland Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"AZ\\\",\\\"alpha3\\\":\\\"AZE\\\",\\\"countryCallingCodes\\\":[\\\"+994\\\"],\\\"currencies\\\":[\\\"AZN\\\"],\\\"emoji\\\":\\\"🇦🇿\\\",\\\"ioc\\\":\\\"AZE\\\",\\\"languages\\\":[\\\"aze\\\"],\\\"name\\\":\\\"Azerbaijan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BA\\\",\\\"alpha3\\\":\\\"BIH\\\",\\\"countryCallingCodes\\\":[\\\"+387\\\"],\\\"currencies\\\":[\\\"BAM\\\"],\\\"emoji\\\":\\\"🇧🇦\\\",\\\"ioc\\\":\\\"BIH\\\",\\\"languages\\\":[\\\"bos\\\",\\\"cre\\\",\\\"srp\\\"],\\\"name\\\":\\\"Bosnia & Herzegovina\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BB\\\",\\\"alpha3\\\":\\\"BRB\\\",\\\"countryCallingCodes\\\":[\\\"+1 246\\\"],\\\"currencies\\\":[\\\"BBD\\\"],\\\"emoji\\\":\\\"🇧🇧\\\",\\\"ioc\\\":\\\"BAR\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Barbados\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BD\\\",\\\"alpha3\\\":\\\"BGD\\\",\\\"countryCallingCodes\\\":[\\\"+880\\\"],\\\"currencies\\\":[\\\"BDT\\\"],\\\"emoji\\\":\\\"🇧🇩\\\",\\\"ioc\\\":\\\"BAN\\\",\\\"languages\\\":[\\\"ben\\\"],\\\"name\\\":\\\"Bangladesh\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BE\\\",\\\"alpha3\\\":\\\"BEL\\\",\\\"countryCallingCodes\\\":[\\\"+32\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇧🇪\\\",\\\"ioc\\\":\\\"BEL\\\",\\\"languages\\\":[\\\"nld\\\",\\\"fra\\\",\\\"deu\\\"],\\\"name\\\":\\\"Belgium\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BF\\\",\\\"alpha3\\\":\\\"BFA\\\",\\\"countryCallingCodes\\\":[\\\"+226\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇧🇫\\\",\\\"ioc\\\":\\\"BUR\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Burkina Faso\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BG\\\",\\\"alpha3\\\":\\\"BGR\\\",\\\"countryCallingCodes\\\":[\\\"+359\\\"],\\\"currencies\\\":[\\\"BGN\\\"],\\\"emoji\\\":\\\"🇧🇬\\\",\\\"ioc\\\":\\\"BUL\\\",\\\"languages\\\":[\\\"bul\\\"],\\\"name\\\":\\\"Bulgaria\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BH\\\",\\\"alpha3\\\":\\\"BHR\\\",\\\"countryCallingCodes\\\":[\\\"+973\\\"],\\\"currencies\\\":[\\\"BHD\\\"],\\\"emoji\\\":\\\"🇧🇭\\\",\\\"ioc\\\":\\\"BRN\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Bahrain\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BI\\\",\\\"alpha3\\\":\\\"BDI\\\",\\\"countryCallingCodes\\\":[\\\"+257\\\"],\\\"currencies\\\":[\\\"BIF\\\"],\\\"emoji\\\":\\\"🇧🇮\\\",\\\"ioc\\\":\\\"BDI\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Burundi\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BJ\\\",\\\"alpha3\\\":\\\"BEN\\\",\\\"countryCallingCodes\\\":[\\\"+229\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇧🇯\\\",\\\"ioc\\\":\\\"BEN\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Benin\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BL\\\",\\\"alpha3\\\":\\\"BLM\\\",\\\"countryCallingCodes\\\":[\\\"+590\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇧🇱\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Saint Barthélemy\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BM\\\",\\\"alpha3\\\":\\\"BMU\\\",\\\"countryCallingCodes\\\":[\\\"+1 441\\\"],\\\"currencies\\\":[\\\"BMD\\\"],\\\"emoji\\\":\\\"🇧🇲\\\",\\\"ioc\\\":\\\"BER\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Bermuda\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BN\\\",\\\"alpha3\\\":\\\"BRN\\\",\\\"countryCallingCodes\\\":[\\\"+673\\\"],\\\"currencies\\\":[\\\"BND\\\"],\\\"emoji\\\":\\\"🇧🇳\\\",\\\"ioc\\\":\\\"BRU\\\",\\\"languages\\\":[\\\"msa\\\",\\\"eng\\\"],\\\"name\\\":\\\"Brunei Darussalam\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BO\\\",\\\"alpha3\\\":\\\"BOL\\\",\\\"countryCallingCodes\\\":[\\\"+591\\\"],\\\"currencies\\\":[\\\"BOB\\\",\\\"BOV\\\"],\\\"emoji\\\":\\\"🇧🇴\\\",\\\"ioc\\\":\\\"BOL\\\",\\\"languages\\\":[\\\"spa\\\",\\\"aym\\\",\\\"que\\\"],\\\"name\\\":\\\"Bolivia, Plurinational State Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BQ\\\",\\\"alpha3\\\":\\\"BES\\\",\\\"countryCallingCodes\\\":[\\\"+599\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇧🇶\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Bonaire, Saint Eustatius And Saba\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BQ\\\",\\\"alpha3\\\":\\\"ATB\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"British Antarctic Territory\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"BR\\\",\\\"alpha3\\\":\\\"BRA\\\",\\\"countryCallingCodes\\\":[\\\"+55\\\"],\\\"currencies\\\":[\\\"BRL\\\"],\\\"emoji\\\":\\\"🇧🇷\\\",\\\"ioc\\\":\\\"BRA\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Brazil\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BS\\\",\\\"alpha3\\\":\\\"BHS\\\",\\\"countryCallingCodes\\\":[\\\"+1 242\\\"],\\\"currencies\\\":[\\\"BSD\\\"],\\\"emoji\\\":\\\"🇧🇸\\\",\\\"ioc\\\":\\\"BAH\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Bahamas\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BT\\\",\\\"alpha3\\\":\\\"BTN\\\",\\\"countryCallingCodes\\\":[\\\"+975\\\"],\\\"currencies\\\":[\\\"INR\\\",\\\"BTN\\\"],\\\"emoji\\\":\\\"🇧🇹\\\",\\\"ioc\\\":\\\"BHU\\\",\\\"languages\\\":[\\\"dzo\\\"],\\\"name\\\":\\\"Bhutan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BU\\\",\\\"alpha3\\\":\\\"BUR\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Burma\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"BV\\\",\\\"alpha3\\\":\\\"BVT\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"NOK\\\"],\\\"emoji\\\":\\\"🇧🇻\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Bouvet Island\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BW\\\",\\\"alpha3\\\":\\\"BWA\\\",\\\"countryCallingCodes\\\":[\\\"+267\\\"],\\\"currencies\\\":[\\\"BWP\\\"],\\\"emoji\\\":\\\"🇧🇼\\\",\\\"ioc\\\":\\\"BOT\\\",\\\"languages\\\":[\\\"eng\\\",\\\"tsn\\\"],\\\"name\\\":\\\"Botswana\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BY\\\",\\\"alpha3\\\":\\\"BLR\\\",\\\"countryCallingCodes\\\":[\\\"+375\\\"],\\\"currencies\\\":[\\\"BYR\\\"],\\\"emoji\\\":\\\"🇧🇾\\\",\\\"ioc\\\":\\\"BLR\\\",\\\"languages\\\":[\\\"bel\\\",\\\"rus\\\"],\\\"name\\\":\\\"Belarus\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"BY\\\",\\\"alpha3\\\":\\\"BYS\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Byelorussian SSR\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"BZ\\\",\\\"alpha3\\\":\\\"BLZ\\\",\\\"countryCallingCodes\\\":[\\\"+501\\\"],\\\"currencies\\\":[\\\"BZD\\\"],\\\"emoji\\\":\\\"🇧🇿\\\",\\\"ioc\\\":\\\"BIZ\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Belize\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CA\\\",\\\"alpha3\\\":\\\"CAN\\\",\\\"countryCallingCodes\\\":[\\\"+1\\\"],\\\"currencies\\\":[\\\"CAD\\\"],\\\"emoji\\\":\\\"🇨🇦\\\",\\\"ioc\\\":\\\"CAN\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Canada\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CC\\\",\\\"alpha3\\\":\\\"CCK\\\",\\\"countryCallingCodes\\\":[\\\"+61\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇨🇨\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Cocos (Keeling) Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CD\\\",\\\"alpha3\\\":\\\"COD\\\",\\\"countryCallingCodes\\\":[\\\"+243\\\"],\\\"currencies\\\":[\\\"CDF\\\"],\\\"emoji\\\":\\\"🇨🇩\\\",\\\"ioc\\\":\\\"COD\\\",\\\"languages\\\":[\\\"fra\\\",\\\"lin\\\",\\\"kon\\\",\\\"swa\\\"],\\\"name\\\":\\\"Democratic Republic Of Congo\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CF\\\",\\\"alpha3\\\":\\\"CAF\\\",\\\"countryCallingCodes\\\":[\\\"+236\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇨🇫\\\",\\\"ioc\\\":\\\"CAF\\\",\\\"languages\\\":[\\\"fra\\\",\\\"sag\\\"],\\\"name\\\":\\\"Central African Republic\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CG\\\",\\\"alpha3\\\":\\\"COG\\\",\\\"countryCallingCodes\\\":[\\\"+242\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇨🇬\\\",\\\"ioc\\\":\\\"CGO\\\",\\\"languages\\\":[\\\"fra\\\",\\\"lin\\\"],\\\"name\\\":\\\"Republic Of Congo\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CH\\\",\\\"alpha3\\\":\\\"CHE\\\",\\\"countryCallingCodes\\\":[\\\"+41\\\"],\\\"currencies\\\":[\\\"CHF\\\",\\\"CHE\\\",\\\"CHW\\\"],\\\"emoji\\\":\\\"🇨🇭\\\",\\\"ioc\\\":\\\"SUI\\\",\\\"languages\\\":[\\\"deu\\\",\\\"fra\\\",\\\"ita\\\",\\\"roh\\\"],\\\"name\\\":\\\"Switzerland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CI\\\",\\\"alpha3\\\":\\\"CIV\\\",\\\"countryCallingCodes\\\":[\\\"+225\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇨🇮\\\",\\\"ioc\\\":\\\"CIV\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Côte d'Ivoire\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CK\\\",\\\"alpha3\\\":\\\"COK\\\",\\\"countryCallingCodes\\\":[\\\"+682\\\"],\\\"currencies\\\":[\\\"NZD\\\"],\\\"emoji\\\":\\\"🇨🇰\\\",\\\"ioc\\\":\\\"COK\\\",\\\"languages\\\":[\\\"eng\\\",\\\"mri\\\"],\\\"name\\\":\\\"Cook Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CL\\\",\\\"alpha3\\\":\\\"CHL\\\",\\\"countryCallingCodes\\\":[\\\"+56\\\"],\\\"currencies\\\":[\\\"CLP\\\",\\\"CLF\\\"],\\\"emoji\\\":\\\"🇨🇱\\\",\\\"ioc\\\":\\\"CHI\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Chile\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CM\\\",\\\"alpha3\\\":\\\"CMR\\\",\\\"countryCallingCodes\\\":[\\\"+237\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇨🇲\\\",\\\"ioc\\\":\\\"CMR\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Cameroon\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CN\\\",\\\"alpha3\\\":\\\"CHN\\\",\\\"countryCallingCodes\\\":[\\\"+86\\\"],\\\"currencies\\\":[\\\"CNY\\\"],\\\"emoji\\\":\\\"🇨🇳\\\",\\\"ioc\\\":\\\"CHN\\\",\\\"languages\\\":[\\\"zho\\\"],\\\"name\\\":\\\"China\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CO\\\",\\\"alpha3\\\":\\\"COL\\\",\\\"countryCallingCodes\\\":[\\\"+57\\\"],\\\"currencies\\\":[\\\"COP\\\",\\\"COU\\\"],\\\"emoji\\\":\\\"🇨🇴\\\",\\\"ioc\\\":\\\"COL\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Colombia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CP\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Clipperton Island\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"CR\\\",\\\"alpha3\\\":\\\"CRI\\\",\\\"countryCallingCodes\\\":[\\\"+506\\\"],\\\"currencies\\\":[\\\"CRC\\\"],\\\"emoji\\\":\\\"🇨🇷\\\",\\\"ioc\\\":\\\"CRC\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Costa Rica\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CS\\\",\\\"alpha3\\\":\\\"CSK\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Czechoslovakia\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"CS\\\",\\\"alpha3\\\":\\\"SCG\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Serbia and Montenegro\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"CT\\\",\\\"alpha3\\\":\\\"CTE\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Canton and Enderbury Islands\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"CU\\\",\\\"alpha3\\\":\\\"CUB\\\",\\\"countryCallingCodes\\\":[\\\"+53\\\"],\\\"currencies\\\":[\\\"CUP\\\",\\\"CUC\\\"],\\\"emoji\\\":\\\"🇨🇺\\\",\\\"ioc\\\":\\\"CUB\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Cuba\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CV\\\",\\\"alpha3\\\":\\\"CPV\\\",\\\"countryCallingCodes\\\":[\\\"+238\\\"],\\\"currencies\\\":[\\\"CVE\\\"],\\\"emoji\\\":\\\"🇨🇻\\\",\\\"ioc\\\":\\\"CPV\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Cabo Verde\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CW\\\",\\\"alpha3\\\":\\\"CUW\\\",\\\"countryCallingCodes\\\":[\\\"+599\\\"],\\\"currencies\\\":[\\\"ANG\\\"],\\\"emoji\\\":\\\"🇨🇼\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Curacao\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CX\\\",\\\"alpha3\\\":\\\"CXR\\\",\\\"countryCallingCodes\\\":[\\\"+61\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇨🇽\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Christmas Island\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CY\\\",\\\"alpha3\\\":\\\"CYP\\\",\\\"countryCallingCodes\\\":[\\\"+357\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇨🇾\\\",\\\"ioc\\\":\\\"CYP\\\",\\\"languages\\\":[\\\"ell\\\",\\\"tur\\\"],\\\"name\\\":\\\"Cyprus\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"CZ\\\",\\\"alpha3\\\":\\\"CZE\\\",\\\"countryCallingCodes\\\":[\\\"+420\\\"],\\\"currencies\\\":[\\\"CZK\\\"],\\\"emoji\\\":\\\"🇨🇿\\\",\\\"ioc\\\":\\\"CZE\\\",\\\"languages\\\":[\\\"ces\\\"],\\\"name\\\":\\\"Czech Republic\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DD\\\",\\\"alpha3\\\":\\\"DDR\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"German Democratic Republic\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"DE\\\",\\\"alpha3\\\":\\\"DEU\\\",\\\"countryCallingCodes\\\":[\\\"+49\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇩🇪\\\",\\\"ioc\\\":\\\"GER\\\",\\\"languages\\\":[\\\"deu\\\"],\\\"name\\\":\\\"Germany\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DG\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Diego Garcia\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"DJ\\\",\\\"alpha3\\\":\\\"DJI\\\",\\\"countryCallingCodes\\\":[\\\"+253\\\"],\\\"currencies\\\":[\\\"DJF\\\"],\\\"emoji\\\":\\\"🇩🇯\\\",\\\"ioc\\\":\\\"DJI\\\",\\\"languages\\\":[\\\"ara\\\",\\\"fra\\\"],\\\"name\\\":\\\"Djibouti\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DK\\\",\\\"alpha3\\\":\\\"DNK\\\",\\\"countryCallingCodes\\\":[\\\"+45\\\"],\\\"currencies\\\":[\\\"DKK\\\"],\\\"emoji\\\":\\\"🇩🇰\\\",\\\"ioc\\\":\\\"DEN\\\",\\\"languages\\\":[\\\"dan\\\"],\\\"name\\\":\\\"Denmark\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DM\\\",\\\"alpha3\\\":\\\"DMA\\\",\\\"countryCallingCodes\\\":[\\\"+1 767\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇩🇲\\\",\\\"ioc\\\":\\\"DMA\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Dominica\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DO\\\",\\\"alpha3\\\":\\\"DOM\\\",\\\"countryCallingCodes\\\":[\\\"+1 809\\\",\\\"+1 829\\\",\\\"+1 849\\\"],\\\"currencies\\\":[\\\"DOP\\\"],\\\"emoji\\\":\\\"🇩🇴\\\",\\\"ioc\\\":\\\"DOM\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Dominican Republic\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"DY\\\",\\\"alpha3\\\":\\\"DHY\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Dahomey\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"DZ\\\",\\\"alpha3\\\":\\\"DZA\\\",\\\"countryCallingCodes\\\":[\\\"+213\\\"],\\\"currencies\\\":[\\\"DZD\\\"],\\\"emoji\\\":\\\"🇩🇿\\\",\\\"ioc\\\":\\\"ALG\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Algeria\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"EA\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Ceuta, Mulilla\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"EC\\\",\\\"alpha3\\\":\\\"ECU\\\",\\\"countryCallingCodes\\\":[\\\"+593\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇪🇨\\\",\\\"ioc\\\":\\\"ECU\\\",\\\"languages\\\":[\\\"spa\\\",\\\"que\\\"],\\\"name\\\":\\\"Ecuador\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"EE\\\",\\\"alpha3\\\":\\\"EST\\\",\\\"countryCallingCodes\\\":[\\\"+372\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇪🇪\\\",\\\"ioc\\\":\\\"EST\\\",\\\"languages\\\":[\\\"est\\\"],\\\"name\\\":\\\"Estonia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"EG\\\",\\\"alpha3\\\":\\\"EGY\\\",\\\"countryCallingCodes\\\":[\\\"+20\\\"],\\\"currencies\\\":[\\\"EGP\\\"],\\\"emoji\\\":\\\"🇪🇬\\\",\\\"ioc\\\":\\\"EGY\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Egypt\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"EH\\\",\\\"alpha3\\\":\\\"ESH\\\",\\\"countryCallingCodes\\\":[\\\"+212\\\"],\\\"currencies\\\":[\\\"MAD\\\"],\\\"emoji\\\":\\\"🇪🇭\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Western Sahara\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ER\\\",\\\"alpha3\\\":\\\"ERI\\\",\\\"countryCallingCodes\\\":[\\\"+291\\\"],\\\"currencies\\\":[\\\"ERN\\\"],\\\"emoji\\\":\\\"🇪🇷\\\",\\\"ioc\\\":\\\"ERI\\\",\\\"languages\\\":[\\\"eng\\\",\\\"ara\\\",\\\"tir\\\"],\\\"name\\\":\\\"Eritrea\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ES\\\",\\\"alpha3\\\":\\\"ESP\\\",\\\"countryCallingCodes\\\":[\\\"+34\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇪🇸\\\",\\\"ioc\\\":\\\"ESP\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Spain\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ET\\\",\\\"alpha3\\\":\\\"ETH\\\",\\\"countryCallingCodes\\\":[\\\"+251\\\"],\\\"currencies\\\":[\\\"ETB\\\"],\\\"emoji\\\":\\\"🇪🇹\\\",\\\"ioc\\\":\\\"ETH\\\",\\\"languages\\\":[\\\"amh\\\"],\\\"name\\\":\\\"Ethiopia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"EU\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[\\\"+388\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇪🇺\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"European Union\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"FI\\\",\\\"alpha3\\\":\\\"FIN\\\",\\\"countryCallingCodes\\\":[\\\"+358\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇫🇮\\\",\\\"ioc\\\":\\\"FIN\\\",\\\"languages\\\":[\\\"fin\\\",\\\"swe\\\"],\\\"name\\\":\\\"Finland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FJ\\\",\\\"alpha3\\\":\\\"FJI\\\",\\\"countryCallingCodes\\\":[\\\"+679\\\"],\\\"currencies\\\":[\\\"FJD\\\"],\\\"emoji\\\":\\\"🇫🇯\\\",\\\"ioc\\\":\\\"FIJ\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fij\\\"],\\\"name\\\":\\\"Fiji\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FK\\\",\\\"alpha3\\\":\\\"FLK\\\",\\\"countryCallingCodes\\\":[\\\"+500\\\"],\\\"currencies\\\":[\\\"FKP\\\"],\\\"emoji\\\":\\\"🇫🇰\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Falkland Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FM\\\",\\\"alpha3\\\":\\\"FSM\\\",\\\"countryCallingCodes\\\":[\\\"+691\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇫🇲\\\",\\\"ioc\\\":\\\"FSM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Micronesia, Federated States Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FO\\\",\\\"alpha3\\\":\\\"FRO\\\",\\\"countryCallingCodes\\\":[\\\"+298\\\"],\\\"currencies\\\":[\\\"DKK\\\"],\\\"emoji\\\":\\\"🇫🇴\\\",\\\"ioc\\\":\\\"FAI\\\",\\\"languages\\\":[\\\"fao\\\",\\\"dan\\\"],\\\"name\\\":\\\"Faroe Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FQ\\\",\\\"alpha3\\\":\\\"ATF\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"French Southern and Antarctic Territories\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"FR\\\",\\\"alpha3\\\":\\\"FRA\\\",\\\"countryCallingCodes\\\":[\\\"+33\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇫🇷\\\",\\\"ioc\\\":\\\"FRA\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"France\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"FX\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[\\\"+241\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"France, Metropolitan\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"GA\\\",\\\"alpha3\\\":\\\"GAB\\\",\\\"countryCallingCodes\\\":[\\\"+241\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇬🇦\\\",\\\"ioc\\\":\\\"GAB\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Gabon\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GB\\\",\\\"alpha3\\\":\\\"GBR\\\",\\\"countryCallingCodes\\\":[\\\"+44\\\"],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"🇬🇧\\\",\\\"ioc\\\":\\\"GBR\\\",\\\"languages\\\":[\\\"eng\\\",\\\"cor\\\",\\\"gle\\\",\\\"gla\\\",\\\"cym\\\"],\\\"name\\\":\\\"United Kingdom\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GD\\\",\\\"alpha3\\\":\\\"GRD\\\",\\\"countryCallingCodes\\\":[\\\"+473\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇬🇩\\\",\\\"ioc\\\":\\\"GRN\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Grenada\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GE\\\",\\\"alpha3\\\":\\\"GEO\\\",\\\"countryCallingCodes\\\":[\\\"+995\\\"],\\\"currencies\\\":[\\\"GEL\\\"],\\\"emoji\\\":\\\"🇬🇪\\\",\\\"ioc\\\":\\\"GEO\\\",\\\"languages\\\":[\\\"kat\\\"],\\\"name\\\":\\\"Georgia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GE\\\",\\\"alpha3\\\":\\\"GEL\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Gilbert and Ellice Islands\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"GF\\\",\\\"alpha3\\\":\\\"GUF\\\",\\\"countryCallingCodes\\\":[\\\"+594\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇬🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"French Guiana\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GG\\\",\\\"alpha3\\\":\\\"GGY\\\",\\\"countryCallingCodes\\\":[\\\"+44\\\"],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"🇬🇬\\\",\\\"ioc\\\":\\\"GCI\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Guernsey\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GH\\\",\\\"alpha3\\\":\\\"GHA\\\",\\\"countryCallingCodes\\\":[\\\"+233\\\"],\\\"currencies\\\":[\\\"GHS\\\"],\\\"emoji\\\":\\\"🇬🇭\\\",\\\"ioc\\\":\\\"GHA\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Ghana\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GI\\\",\\\"alpha3\\\":\\\"GIB\\\",\\\"countryCallingCodes\\\":[\\\"+350\\\"],\\\"currencies\\\":[\\\"GIP\\\"],\\\"emoji\\\":\\\"🇬🇮\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Gibraltar\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GL\\\",\\\"alpha3\\\":\\\"GRL\\\",\\\"countryCallingCodes\\\":[\\\"+299\\\"],\\\"currencies\\\":[\\\"DKK\\\"],\\\"emoji\\\":\\\"🇬🇱\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"kal\\\"],\\\"name\\\":\\\"Greenland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GM\\\",\\\"alpha3\\\":\\\"GMB\\\",\\\"countryCallingCodes\\\":[\\\"+220\\\"],\\\"currencies\\\":[\\\"GMD\\\"],\\\"emoji\\\":\\\"🇬🇲\\\",\\\"ioc\\\":\\\"GAM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Gambia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GN\\\",\\\"alpha3\\\":\\\"GIN\\\",\\\"countryCallingCodes\\\":[\\\"+224\\\"],\\\"currencies\\\":[\\\"GNF\\\"],\\\"emoji\\\":\\\"🇬🇳\\\",\\\"ioc\\\":\\\"GUI\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Guinea\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GP\\\",\\\"alpha3\\\":\\\"GLP\\\",\\\"countryCallingCodes\\\":[\\\"+590\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇬🇵\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Guadeloupe\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GQ\\\",\\\"alpha3\\\":\\\"GNQ\\\",\\\"countryCallingCodes\\\":[\\\"+240\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇬🇶\\\",\\\"ioc\\\":\\\"GEQ\\\",\\\"languages\\\":[\\\"spa\\\",\\\"fra\\\",\\\"por\\\"],\\\"name\\\":\\\"Equatorial Guinea\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GR\\\",\\\"alpha3\\\":\\\"GRC\\\",\\\"countryCallingCodes\\\":[\\\"+30\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇬🇷\\\",\\\"ioc\\\":\\\"GRE\\\",\\\"languages\\\":[\\\"ell\\\"],\\\"name\\\":\\\"Greece\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GS\\\",\\\"alpha3\\\":\\\"SGS\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"🇬🇸\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"South Georgia And The South Sandwich Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GT\\\",\\\"alpha3\\\":\\\"GTM\\\",\\\"countryCallingCodes\\\":[\\\"+502\\\"],\\\"currencies\\\":[\\\"GTQ\\\"],\\\"emoji\\\":\\\"🇬🇹\\\",\\\"ioc\\\":\\\"GUA\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Guatemala\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GU\\\",\\\"alpha3\\\":\\\"GUM\\\",\\\"countryCallingCodes\\\":[\\\"+1 671\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇬🇺\\\",\\\"ioc\\\":\\\"GUM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Guam\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GW\\\",\\\"alpha3\\\":\\\"GNB\\\",\\\"countryCallingCodes\\\":[\\\"+245\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇬🇼\\\",\\\"ioc\\\":\\\"GBS\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Guinea-bissau\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"GY\\\",\\\"alpha3\\\":\\\"GUY\\\",\\\"countryCallingCodes\\\":[\\\"+592\\\"],\\\"currencies\\\":[\\\"GYD\\\"],\\\"emoji\\\":\\\"🇬🇾\\\",\\\"ioc\\\":\\\"GUY\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Guyana\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HK\\\",\\\"alpha3\\\":\\\"HKG\\\",\\\"countryCallingCodes\\\":[\\\"+852\\\"],\\\"currencies\\\":[\\\"HKD\\\"],\\\"emoji\\\":\\\"🇭🇰\\\",\\\"ioc\\\":\\\"HKG\\\",\\\"languages\\\":[\\\"zho\\\",\\\"eng\\\"],\\\"name\\\":\\\"Hong Kong\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HM\\\",\\\"alpha3\\\":\\\"HMD\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇭🇲\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Heard Island And McDonald Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HN\\\",\\\"alpha3\\\":\\\"HND\\\",\\\"countryCallingCodes\\\":[\\\"+504\\\"],\\\"currencies\\\":[\\\"HNL\\\"],\\\"emoji\\\":\\\"🇭🇳\\\",\\\"ioc\\\":\\\"HON\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Honduras\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HR\\\",\\\"alpha3\\\":\\\"HRV\\\",\\\"countryCallingCodes\\\":[\\\"+385\\\"],\\\"currencies\\\":[\\\"HRK\\\"],\\\"emoji\\\":\\\"🇭🇷\\\",\\\"ioc\\\":\\\"CRO\\\",\\\"languages\\\":[\\\"hrv\\\"],\\\"name\\\":\\\"Croatia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HT\\\",\\\"alpha3\\\":\\\"HTI\\\",\\\"countryCallingCodes\\\":[\\\"+509\\\"],\\\"currencies\\\":[\\\"HTG\\\",\\\"USD\\\"],\\\"emoji\\\":\\\"🇭🇹\\\",\\\"ioc\\\":\\\"HAI\\\",\\\"languages\\\":[\\\"fra\\\",\\\"hat\\\"],\\\"name\\\":\\\"Haiti\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HU\\\",\\\"alpha3\\\":\\\"HUN\\\",\\\"countryCallingCodes\\\":[\\\"+36\\\"],\\\"currencies\\\":[\\\"HUF\\\"],\\\"emoji\\\":\\\"🇭🇺\\\",\\\"ioc\\\":\\\"HUN\\\",\\\"languages\\\":[\\\"hun\\\"],\\\"name\\\":\\\"Hungary\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"HV\\\",\\\"alpha3\\\":\\\"HVO\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Upper Volta\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"IC\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Canary Islands\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"ID\\\",\\\"alpha3\\\":\\\"IDN\\\",\\\"countryCallingCodes\\\":[\\\"+62\\\"],\\\"currencies\\\":[\\\"IDR\\\"],\\\"emoji\\\":\\\"🇮🇩\\\",\\\"ioc\\\":\\\"INA\\\",\\\"languages\\\":[\\\"ind\\\"],\\\"name\\\":\\\"Indonesia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IE\\\",\\\"alpha3\\\":\\\"IRL\\\",\\\"countryCallingCodes\\\":[\\\"+353\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇮🇪\\\",\\\"ioc\\\":\\\"IRL\\\",\\\"languages\\\":[\\\"eng\\\",\\\"gle\\\"],\\\"name\\\":\\\"Ireland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IL\\\",\\\"alpha3\\\":\\\"ISR\\\",\\\"countryCallingCodes\\\":[\\\"+972\\\"],\\\"currencies\\\":[\\\"ILS\\\"],\\\"emoji\\\":\\\"🇮🇱\\\",\\\"ioc\\\":\\\"ISR\\\",\\\"languages\\\":[\\\"heb\\\",\\\"ara\\\",\\\"eng\\\"],\\\"name\\\":\\\"Israel\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IM\\\",\\\"alpha3\\\":\\\"IMN\\\",\\\"countryCallingCodes\\\":[\\\"+44\\\"],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"🇮🇲\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\",\\\"glv\\\"],\\\"name\\\":\\\"Isle Of Man\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IN\\\",\\\"alpha3\\\":\\\"IND\\\",\\\"countryCallingCodes\\\":[\\\"+91\\\"],\\\"currencies\\\":[\\\"INR\\\"],\\\"emoji\\\":\\\"🇮🇳\\\",\\\"ioc\\\":\\\"IND\\\",\\\"languages\\\":[\\\"eng\\\",\\\"hin\\\"],\\\"name\\\":\\\"India\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IO\\\",\\\"alpha3\\\":\\\"IOT\\\",\\\"countryCallingCodes\\\":[\\\"+246\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇮🇴\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"British Indian Ocean Territory\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IQ\\\",\\\"alpha3\\\":\\\"IRQ\\\",\\\"countryCallingCodes\\\":[\\\"+964\\\"],\\\"currencies\\\":[\\\"IQD\\\"],\\\"emoji\\\":\\\"🇮🇶\\\",\\\"ioc\\\":\\\"IRQ\\\",\\\"languages\\\":[\\\"ara\\\",\\\"kur\\\"],\\\"name\\\":\\\"Iraq\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IR\\\",\\\"alpha3\\\":\\\"IRN\\\",\\\"countryCallingCodes\\\":[\\\"+98\\\"],\\\"currencies\\\":[\\\"IRR\\\"],\\\"emoji\\\":\\\"🇮🇷\\\",\\\"ioc\\\":\\\"IRI\\\",\\\"languages\\\":[\\\"fas\\\"],\\\"name\\\":\\\"Iran, Islamic Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IS\\\",\\\"alpha3\\\":\\\"ISL\\\",\\\"countryCallingCodes\\\":[\\\"+354\\\"],\\\"currencies\\\":[\\\"ISK\\\"],\\\"emoji\\\":\\\"🇮🇸\\\",\\\"ioc\\\":\\\"ISL\\\",\\\"languages\\\":[\\\"isl\\\"],\\\"name\\\":\\\"Iceland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"IT\\\",\\\"alpha3\\\":\\\"ITA\\\",\\\"countryCallingCodes\\\":[\\\"+39\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇮🇹\\\",\\\"ioc\\\":\\\"ITA\\\",\\\"languages\\\":[\\\"ita\\\"],\\\"name\\\":\\\"Italy\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"JE\\\",\\\"alpha3\\\":\\\"JEY\\\",\\\"countryCallingCodes\\\":[\\\"+44\\\"],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"🇯🇪\\\",\\\"ioc\\\":\\\"JCI\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Jersey\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"JM\\\",\\\"alpha3\\\":\\\"JAM\\\",\\\"countryCallingCodes\\\":[\\\"+1 876\\\"],\\\"currencies\\\":[\\\"JMD\\\"],\\\"emoji\\\":\\\"🇯🇲\\\",\\\"ioc\\\":\\\"JAM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Jamaica\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"JO\\\",\\\"alpha3\\\":\\\"JOR\\\",\\\"countryCallingCodes\\\":[\\\"+962\\\"],\\\"currencies\\\":[\\\"JOD\\\"],\\\"emoji\\\":\\\"🇯🇴\\\",\\\"ioc\\\":\\\"JOR\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Jordan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"JP\\\",\\\"alpha3\\\":\\\"JPN\\\",\\\"countryCallingCodes\\\":[\\\"+81\\\"],\\\"currencies\\\":[\\\"JPY\\\"],\\\"emoji\\\":\\\"🇯🇵\\\",\\\"ioc\\\":\\\"JPN\\\",\\\"languages\\\":[\\\"jpn\\\"],\\\"name\\\":\\\"Japan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"JT\\\",\\\"alpha3\\\":\\\"JTN\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Johnston Island\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"KE\\\",\\\"alpha3\\\":\\\"KEN\\\",\\\"countryCallingCodes\\\":[\\\"+254\\\"],\\\"currencies\\\":[\\\"KES\\\"],\\\"emoji\\\":\\\"🇰🇪\\\",\\\"ioc\\\":\\\"KEN\\\",\\\"languages\\\":[\\\"eng\\\",\\\"swa\\\"],\\\"name\\\":\\\"Kenya\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KG\\\",\\\"alpha3\\\":\\\"KGZ\\\",\\\"countryCallingCodes\\\":[\\\"+996\\\"],\\\"currencies\\\":[\\\"KGS\\\"],\\\"emoji\\\":\\\"🇰🇬\\\",\\\"ioc\\\":\\\"KGZ\\\",\\\"languages\\\":[\\\"rus\\\"],\\\"name\\\":\\\"Kyrgyzstan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KH\\\",\\\"alpha3\\\":\\\"KHM\\\",\\\"countryCallingCodes\\\":[\\\"+855\\\"],\\\"currencies\\\":[\\\"KHR\\\"],\\\"emoji\\\":\\\"🇰🇭\\\",\\\"ioc\\\":\\\"CAM\\\",\\\"languages\\\":[\\\"khm\\\"],\\\"name\\\":\\\"Cambodia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KI\\\",\\\"alpha3\\\":\\\"KIR\\\",\\\"countryCallingCodes\\\":[\\\"+686\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇰🇮\\\",\\\"ioc\\\":\\\"KIR\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Kiribati\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KM\\\",\\\"alpha3\\\":\\\"COM\\\",\\\"countryCallingCodes\\\":[\\\"+269\\\"],\\\"currencies\\\":[\\\"KMF\\\"],\\\"emoji\\\":\\\"🇰🇲\\\",\\\"ioc\\\":\\\"COM\\\",\\\"languages\\\":[\\\"ara\\\",\\\"fra\\\"],\\\"name\\\":\\\"Comoros\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KN\\\",\\\"alpha3\\\":\\\"KNA\\\",\\\"countryCallingCodes\\\":[\\\"+1 869\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇰🇳\\\",\\\"ioc\\\":\\\"SKN\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Saint Kitts And Nevis\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KP\\\",\\\"alpha3\\\":\\\"PRK\\\",\\\"countryCallingCodes\\\":[\\\"+850\\\"],\\\"currencies\\\":[\\\"KPW\\\"],\\\"emoji\\\":\\\"🇰🇵\\\",\\\"ioc\\\":\\\"PRK\\\",\\\"languages\\\":[\\\"kor\\\"],\\\"name\\\":\\\"Korea, Democratic People's Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KR\\\",\\\"alpha3\\\":\\\"KOR\\\",\\\"countryCallingCodes\\\":[\\\"+82\\\"],\\\"currencies\\\":[\\\"KRW\\\"],\\\"emoji\\\":\\\"🇰🇷\\\",\\\"ioc\\\":\\\"KOR\\\",\\\"languages\\\":[\\\"kor\\\"],\\\"name\\\":\\\"Korea, Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KW\\\",\\\"alpha3\\\":\\\"KWT\\\",\\\"countryCallingCodes\\\":[\\\"+965\\\"],\\\"currencies\\\":[\\\"KWD\\\"],\\\"emoji\\\":\\\"🇰🇼\\\",\\\"ioc\\\":\\\"KUW\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Kuwait\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KY\\\",\\\"alpha3\\\":\\\"CYM\\\",\\\"countryCallingCodes\\\":[\\\"+1 345\\\"],\\\"currencies\\\":[\\\"KYD\\\"],\\\"emoji\\\":\\\"🇰🇾\\\",\\\"ioc\\\":\\\"CAY\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Cayman Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"KZ\\\",\\\"alpha3\\\":\\\"KAZ\\\",\\\"countryCallingCodes\\\":[\\\"+7\\\",\\\"+7 6\\\",\\\"+7 7\\\"],\\\"currencies\\\":[\\\"KZT\\\"],\\\"emoji\\\":\\\"🇰🇿\\\",\\\"ioc\\\":\\\"KAZ\\\",\\\"languages\\\":[\\\"kaz\\\",\\\"rus\\\"],\\\"name\\\":\\\"Kazakhstan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LA\\\",\\\"alpha3\\\":\\\"LAO\\\",\\\"countryCallingCodes\\\":[\\\"+856\\\"],\\\"currencies\\\":[\\\"LAK\\\"],\\\"emoji\\\":\\\"🇱🇦\\\",\\\"ioc\\\":\\\"LAO\\\",\\\"languages\\\":[\\\"lao\\\"],\\\"name\\\":\\\"Lao People's Democratic Republic\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LB\\\",\\\"alpha3\\\":\\\"LBN\\\",\\\"countryCallingCodes\\\":[\\\"+961\\\"],\\\"currencies\\\":[\\\"LBP\\\"],\\\"emoji\\\":\\\"🇱🇧\\\",\\\"ioc\\\":\\\"LIB\\\",\\\"languages\\\":[\\\"ara\\\",\\\"hye\\\"],\\\"name\\\":\\\"Lebanon\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LC\\\",\\\"alpha3\\\":\\\"LCA\\\",\\\"countryCallingCodes\\\":[\\\"+1 758\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇱🇨\\\",\\\"ioc\\\":\\\"LCA\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Saint Lucia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LI\\\",\\\"alpha3\\\":\\\"LIE\\\",\\\"countryCallingCodes\\\":[\\\"+423\\\"],\\\"currencies\\\":[\\\"CHF\\\"],\\\"emoji\\\":\\\"🇱🇮\\\",\\\"ioc\\\":\\\"LIE\\\",\\\"languages\\\":[\\\"deu\\\"],\\\"name\\\":\\\"Liechtenstein\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LK\\\",\\\"alpha3\\\":\\\"LKA\\\",\\\"countryCallingCodes\\\":[\\\"+94\\\"],\\\"currencies\\\":[\\\"LKR\\\"],\\\"emoji\\\":\\\"🇱🇰\\\",\\\"ioc\\\":\\\"SRI\\\",\\\"languages\\\":[\\\"sin\\\",\\\"tam\\\"],\\\"name\\\":\\\"Sri Lanka\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LR\\\",\\\"alpha3\\\":\\\"LBR\\\",\\\"countryCallingCodes\\\":[\\\"+231\\\"],\\\"currencies\\\":[\\\"LRD\\\"],\\\"emoji\\\":\\\"🇱🇷\\\",\\\"ioc\\\":\\\"LBR\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Liberia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LS\\\",\\\"alpha3\\\":\\\"LSO\\\",\\\"countryCallingCodes\\\":[\\\"+266\\\"],\\\"currencies\\\":[\\\"LSL\\\",\\\"ZAR\\\"],\\\"emoji\\\":\\\"🇱🇸\\\",\\\"ioc\\\":\\\"LES\\\",\\\"languages\\\":[\\\"eng\\\",\\\"sot\\\"],\\\"name\\\":\\\"Lesotho\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LT\\\",\\\"alpha3\\\":\\\"LTU\\\",\\\"countryCallingCodes\\\":[\\\"+370\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇱🇹\\\",\\\"ioc\\\":\\\"LTU\\\",\\\"languages\\\":[\\\"lit\\\"],\\\"name\\\":\\\"Lithuania\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LU\\\",\\\"alpha3\\\":\\\"LUX\\\",\\\"countryCallingCodes\\\":[\\\"+352\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇱🇺\\\",\\\"ioc\\\":\\\"LUX\\\",\\\"languages\\\":[\\\"fra\\\",\\\"deu\\\",\\\"ltz\\\"],\\\"name\\\":\\\"Luxembourg\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LV\\\",\\\"alpha3\\\":\\\"LVA\\\",\\\"countryCallingCodes\\\":[\\\"+371\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇱🇻\\\",\\\"ioc\\\":\\\"LAT\\\",\\\"languages\\\":[\\\"lav\\\"],\\\"name\\\":\\\"Latvia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"LY\\\",\\\"alpha3\\\":\\\"LBY\\\",\\\"countryCallingCodes\\\":[\\\"+218\\\"],\\\"currencies\\\":[\\\"LYD\\\"],\\\"emoji\\\":\\\"🇱🇾\\\",\\\"ioc\\\":\\\"LBA\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Libya\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MA\\\",\\\"alpha3\\\":\\\"MAR\\\",\\\"countryCallingCodes\\\":[\\\"+212\\\"],\\\"currencies\\\":[\\\"MAD\\\"],\\\"emoji\\\":\\\"🇲🇦\\\",\\\"ioc\\\":\\\"MAR\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Morocco\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MC\\\",\\\"alpha3\\\":\\\"MCO\\\",\\\"countryCallingCodes\\\":[\\\"+377\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇲🇨\\\",\\\"ioc\\\":\\\"MON\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Monaco\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MD\\\",\\\"alpha3\\\":\\\"MDA\\\",\\\"countryCallingCodes\\\":[\\\"+373\\\"],\\\"currencies\\\":[\\\"MDL\\\"],\\\"emoji\\\":\\\"🇲🇩\\\",\\\"ioc\\\":\\\"MDA\\\",\\\"languages\\\":[\\\"ron\\\"],\\\"name\\\":\\\"Moldova\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ME\\\",\\\"alpha3\\\":\\\"MNE\\\",\\\"countryCallingCodes\\\":[\\\"+382\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇲🇪\\\",\\\"ioc\\\":\\\"MNE\\\",\\\"languages\\\":[\\\"mot\\\"],\\\"name\\\":\\\"Montenegro\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MF\\\",\\\"alpha3\\\":\\\"MAF\\\",\\\"countryCallingCodes\\\":[\\\"+590\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇲🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Saint Martin\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MG\\\",\\\"alpha3\\\":\\\"MDG\\\",\\\"countryCallingCodes\\\":[\\\"+261\\\"],\\\"currencies\\\":[\\\"MGA\\\"],\\\"emoji\\\":\\\"🇲🇬\\\",\\\"ioc\\\":\\\"MAD\\\",\\\"languages\\\":[\\\"fra\\\",\\\"mlg\\\"],\\\"name\\\":\\\"Madagascar\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MH\\\",\\\"alpha3\\\":\\\"MHL\\\",\\\"countryCallingCodes\\\":[\\\"+692\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇲🇭\\\",\\\"ioc\\\":\\\"MHL\\\",\\\"languages\\\":[\\\"eng\\\",\\\"mah\\\"],\\\"name\\\":\\\"Marshall Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MI\\\",\\\"alpha3\\\":\\\"MID\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Midway Islands\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"MK\\\",\\\"alpha3\\\":\\\"MKD\\\",\\\"countryCallingCodes\\\":[\\\"+389\\\"],\\\"currencies\\\":[\\\"MKD\\\"],\\\"emoji\\\":\\\"🇲🇰\\\",\\\"ioc\\\":\\\"MKD\\\",\\\"languages\\\":[\\\"mkd\\\"],\\\"name\\\":\\\"Macedonia, The Former Yugoslav Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ML\\\",\\\"alpha3\\\":\\\"MLI\\\",\\\"countryCallingCodes\\\":[\\\"+223\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇲🇱\\\",\\\"ioc\\\":\\\"MLI\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Mali\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MM\\\",\\\"alpha3\\\":\\\"MMR\\\",\\\"countryCallingCodes\\\":[\\\"+95\\\"],\\\"currencies\\\":[\\\"MMK\\\"],\\\"emoji\\\":\\\"🇲🇲\\\",\\\"ioc\\\":\\\"MYA\\\",\\\"languages\\\":[\\\"mya\\\"],\\\"name\\\":\\\"Myanmar\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MN\\\",\\\"alpha3\\\":\\\"MNG\\\",\\\"countryCallingCodes\\\":[\\\"+976\\\"],\\\"currencies\\\":[\\\"MNT\\\"],\\\"emoji\\\":\\\"🇲🇳\\\",\\\"ioc\\\":\\\"MGL\\\",\\\"languages\\\":[\\\"mon\\\"],\\\"name\\\":\\\"Mongolia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MO\\\",\\\"alpha3\\\":\\\"MAC\\\",\\\"countryCallingCodes\\\":[\\\"+853\\\"],\\\"currencies\\\":[\\\"MOP\\\"],\\\"emoji\\\":\\\"🇲🇴\\\",\\\"ioc\\\":\\\"MAC\\\",\\\"languages\\\":[\\\"zho\\\",\\\"por\\\"],\\\"name\\\":\\\"Macao\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MP\\\",\\\"alpha3\\\":\\\"MNP\\\",\\\"countryCallingCodes\\\":[\\\"+1 670\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇲🇵\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Northern Mariana Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MQ\\\",\\\"alpha3\\\":\\\"MTQ\\\",\\\"countryCallingCodes\\\":[\\\"+596\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇲🇶\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Martinique\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MR\\\",\\\"alpha3\\\":\\\"MRT\\\",\\\"countryCallingCodes\\\":[\\\"+222\\\"],\\\"currencies\\\":[\\\"MRO\\\"],\\\"emoji\\\":\\\"🇲🇷\\\",\\\"ioc\\\":\\\"MTN\\\",\\\"languages\\\":[\\\"ara\\\",\\\"fra\\\"],\\\"name\\\":\\\"Mauritania\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MS\\\",\\\"alpha3\\\":\\\"MSR\\\",\\\"countryCallingCodes\\\":[\\\"+1 664\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇲🇸\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Montserrat\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MT\\\",\\\"alpha3\\\":\\\"MLT\\\",\\\"countryCallingCodes\\\":[\\\"+356\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇲🇹\\\",\\\"ioc\\\":\\\"MLT\\\",\\\"languages\\\":[\\\"mlt\\\",\\\"eng\\\"],\\\"name\\\":\\\"Malta\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MU\\\",\\\"alpha3\\\":\\\"MUS\\\",\\\"countryCallingCodes\\\":[\\\"+230\\\"],\\\"currencies\\\":[\\\"MUR\\\"],\\\"emoji\\\":\\\"🇲🇺\\\",\\\"ioc\\\":\\\"MRI\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Mauritius\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MV\\\",\\\"alpha3\\\":\\\"MDV\\\",\\\"countryCallingCodes\\\":[\\\"+960\\\"],\\\"currencies\\\":[\\\"MVR\\\"],\\\"emoji\\\":\\\"🇲🇻\\\",\\\"ioc\\\":\\\"MDV\\\",\\\"languages\\\":[\\\"div\\\"],\\\"name\\\":\\\"Maldives\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MW\\\",\\\"alpha3\\\":\\\"MWI\\\",\\\"countryCallingCodes\\\":[\\\"+265\\\"],\\\"currencies\\\":[\\\"MWK\\\"],\\\"emoji\\\":\\\"🇲🇼\\\",\\\"ioc\\\":\\\"MAW\\\",\\\"languages\\\":[\\\"eng\\\",\\\"nya\\\"],\\\"name\\\":\\\"Malawi\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MX\\\",\\\"alpha3\\\":\\\"MEX\\\",\\\"countryCallingCodes\\\":[\\\"+52\\\"],\\\"currencies\\\":[\\\"MXN\\\",\\\"MXV\\\"],\\\"emoji\\\":\\\"🇲🇽\\\",\\\"ioc\\\":\\\"MEX\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Mexico\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MY\\\",\\\"alpha3\\\":\\\"MYS\\\",\\\"countryCallingCodes\\\":[\\\"+60\\\"],\\\"currencies\\\":[\\\"MYR\\\"],\\\"emoji\\\":\\\"🇲🇾\\\",\\\"ioc\\\":\\\"MAS\\\",\\\"languages\\\":[\\\"msa\\\",\\\"eng\\\"],\\\"name\\\":\\\"Malaysia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"MZ\\\",\\\"alpha3\\\":\\\"MOZ\\\",\\\"countryCallingCodes\\\":[\\\"+258\\\"],\\\"currencies\\\":[\\\"MZN\\\"],\\\"emoji\\\":\\\"🇲🇿\\\",\\\"ioc\\\":\\\"MOZ\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Mozambique\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NA\\\",\\\"alpha3\\\":\\\"NAM\\\",\\\"countryCallingCodes\\\":[\\\"+264\\\"],\\\"currencies\\\":[\\\"NAD\\\",\\\"ZAR\\\"],\\\"emoji\\\":\\\"🇳🇦\\\",\\\"ioc\\\":\\\"NAM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Namibia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NC\\\",\\\"alpha3\\\":\\\"NCL\\\",\\\"countryCallingCodes\\\":[\\\"+687\\\"],\\\"currencies\\\":[\\\"XPF\\\"],\\\"emoji\\\":\\\"🇳🇨\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"New Caledonia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NE\\\",\\\"alpha3\\\":\\\"NER\\\",\\\"countryCallingCodes\\\":[\\\"+227\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇳🇪\\\",\\\"ioc\\\":\\\"NIG\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Niger\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NF\\\",\\\"alpha3\\\":\\\"NFK\\\",\\\"countryCallingCodes\\\":[\\\"+672\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇳🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Norfolk Island\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NG\\\",\\\"alpha3\\\":\\\"NGA\\\",\\\"countryCallingCodes\\\":[\\\"+234\\\"],\\\"currencies\\\":[\\\"NGN\\\"],\\\"emoji\\\":\\\"🇳🇬\\\",\\\"ioc\\\":\\\"NGR\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Nigeria\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NH\\\",\\\"alpha3\\\":\\\"NHB\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"New Hebrides\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"NI\\\",\\\"alpha3\\\":\\\"NIC\\\",\\\"countryCallingCodes\\\":[\\\"+505\\\"],\\\"currencies\\\":[\\\"NIO\\\"],\\\"emoji\\\":\\\"🇳🇮\\\",\\\"ioc\\\":\\\"NCA\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Nicaragua\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NL\\\",\\\"alpha3\\\":\\\"NLD\\\",\\\"countryCallingCodes\\\":[\\\"+31\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇳🇱\\\",\\\"ioc\\\":\\\"NED\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Netherlands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NO\\\",\\\"alpha3\\\":\\\"NOR\\\",\\\"countryCallingCodes\\\":[\\\"+47\\\"],\\\"currencies\\\":[\\\"NOK\\\"],\\\"emoji\\\":\\\"🇳🇴\\\",\\\"ioc\\\":\\\"NOR\\\",\\\"languages\\\":[\\\"nor\\\"],\\\"name\\\":\\\"Norway\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NP\\\",\\\"alpha3\\\":\\\"NPL\\\",\\\"countryCallingCodes\\\":[\\\"+977\\\"],\\\"currencies\\\":[\\\"NPR\\\"],\\\"emoji\\\":\\\"🇳🇵\\\",\\\"ioc\\\":\\\"NEP\\\",\\\"languages\\\":[\\\"nep\\\"],\\\"name\\\":\\\"Nepal\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NQ\\\",\\\"alpha3\\\":\\\"ATN\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Dronning Maud Land\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"NR\\\",\\\"alpha3\\\":\\\"NRU\\\",\\\"countryCallingCodes\\\":[\\\"+674\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇳🇷\\\",\\\"ioc\\\":\\\"NRU\\\",\\\"languages\\\":[\\\"eng\\\",\\\"nau\\\"],\\\"name\\\":\\\"Nauru\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NT\\\",\\\"alpha3\\\":\\\"NTZ\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Neutral Zone\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"NU\\\",\\\"alpha3\\\":\\\"NIU\\\",\\\"countryCallingCodes\\\":[\\\"+683\\\"],\\\"currencies\\\":[\\\"NZD\\\"],\\\"emoji\\\":\\\"🇳🇺\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Niue\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"NZ\\\",\\\"alpha3\\\":\\\"NZL\\\",\\\"countryCallingCodes\\\":[\\\"+64\\\"],\\\"currencies\\\":[\\\"NZD\\\"],\\\"emoji\\\":\\\"🇳🇿\\\",\\\"ioc\\\":\\\"NZL\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"New Zealand\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"OM\\\",\\\"alpha3\\\":\\\"OMN\\\",\\\"countryCallingCodes\\\":[\\\"+968\\\"],\\\"currencies\\\":[\\\"OMR\\\"],\\\"emoji\\\":\\\"🇴🇲\\\",\\\"ioc\\\":\\\"OMA\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Oman\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PA\\\",\\\"alpha3\\\":\\\"PAN\\\",\\\"countryCallingCodes\\\":[\\\"+507\\\"],\\\"currencies\\\":[\\\"PAB\\\",\\\"USD\\\"],\\\"emoji\\\":\\\"🇵🇦\\\",\\\"ioc\\\":\\\"PAN\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Panama\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PC\\\",\\\"alpha3\\\":\\\"PCI\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Pacific Islands, Trust Territory of the\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"PE\\\",\\\"alpha3\\\":\\\"PER\\\",\\\"countryCallingCodes\\\":[\\\"+51\\\"],\\\"currencies\\\":[\\\"PEN\\\"],\\\"emoji\\\":\\\"🇵🇪\\\",\\\"ioc\\\":\\\"PER\\\",\\\"languages\\\":[\\\"spa\\\",\\\"aym\\\",\\\"que\\\"],\\\"name\\\":\\\"Peru\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PF\\\",\\\"alpha3\\\":\\\"PYF\\\",\\\"countryCallingCodes\\\":[\\\"+689\\\"],\\\"currencies\\\":[\\\"XPF\\\"],\\\"emoji\\\":\\\"🇵🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"French Polynesia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PG\\\",\\\"alpha3\\\":\\\"PNG\\\",\\\"countryCallingCodes\\\":[\\\"+675\\\"],\\\"currencies\\\":[\\\"PGK\\\"],\\\"emoji\\\":\\\"🇵🇬\\\",\\\"ioc\\\":\\\"PNG\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Papua New Guinea\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PH\\\",\\\"alpha3\\\":\\\"PHL\\\",\\\"countryCallingCodes\\\":[\\\"+63\\\"],\\\"currencies\\\":[\\\"PHP\\\"],\\\"emoji\\\":\\\"🇵🇭\\\",\\\"ioc\\\":\\\"PHI\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Philippines\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PK\\\",\\\"alpha3\\\":\\\"PAK\\\",\\\"countryCallingCodes\\\":[\\\"+92\\\"],\\\"currencies\\\":[\\\"PKR\\\"],\\\"emoji\\\":\\\"🇵🇰\\\",\\\"ioc\\\":\\\"PAK\\\",\\\"languages\\\":[\\\"urd\\\",\\\"eng\\\"],\\\"name\\\":\\\"Pakistan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PL\\\",\\\"alpha3\\\":\\\"POL\\\",\\\"countryCallingCodes\\\":[\\\"+48\\\"],\\\"currencies\\\":[\\\"PLN\\\"],\\\"emoji\\\":\\\"🇵🇱\\\",\\\"ioc\\\":\\\"POL\\\",\\\"languages\\\":[\\\"pol\\\"],\\\"name\\\":\\\"Poland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PM\\\",\\\"alpha3\\\":\\\"SPM\\\",\\\"countryCallingCodes\\\":[\\\"+508\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇵🇲\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Saint Pierre And Miquelon\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PN\\\",\\\"alpha3\\\":\\\"PCN\\\",\\\"countryCallingCodes\\\":[\\\"+872\\\"],\\\"currencies\\\":[\\\"NZD\\\"],\\\"emoji\\\":\\\"🇵🇳\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Pitcairn\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PR\\\",\\\"alpha3\\\":\\\"PRI\\\",\\\"countryCallingCodes\\\":[\\\"+1 787\\\",\\\"+1 939\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇵🇷\\\",\\\"ioc\\\":\\\"PUR\\\",\\\"languages\\\":[\\\"spa\\\",\\\"eng\\\"],\\\"name\\\":\\\"Puerto Rico\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PS\\\",\\\"alpha3\\\":\\\"PSE\\\",\\\"countryCallingCodes\\\":[\\\"+970\\\"],\\\"currencies\\\":[\\\"JOD\\\",\\\"EGP\\\",\\\"ILS\\\"],\\\"emoji\\\":\\\"🇵🇸\\\",\\\"ioc\\\":\\\"PLE\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Palestinian Territory, Occupied\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PT\\\",\\\"alpha3\\\":\\\"PRT\\\",\\\"countryCallingCodes\\\":[\\\"+351\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇵🇹\\\",\\\"ioc\\\":\\\"POR\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Portugal\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PU\\\",\\\"alpha3\\\":\\\"PUS\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"U.S. Miscellaneous Pacific Islands\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"PW\\\",\\\"alpha3\\\":\\\"PLW\\\",\\\"countryCallingCodes\\\":[\\\"+680\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇵🇼\\\",\\\"ioc\\\":\\\"PLW\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Palau\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PY\\\",\\\"alpha3\\\":\\\"PRY\\\",\\\"countryCallingCodes\\\":[\\\"+595\\\"],\\\"currencies\\\":[\\\"PYG\\\"],\\\"emoji\\\":\\\"🇵🇾\\\",\\\"ioc\\\":\\\"PAR\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Paraguay\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"PZ\\\",\\\"alpha3\\\":\\\"PCZ\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Panama Canal Zone\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"QA\\\",\\\"alpha3\\\":\\\"QAT\\\",\\\"countryCallingCodes\\\":[\\\"+974\\\"],\\\"currencies\\\":[\\\"QAR\\\"],\\\"emoji\\\":\\\"🇶🇦\\\",\\\"ioc\\\":\\\"QAT\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Qatar\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"RE\\\",\\\"alpha3\\\":\\\"REU\\\",\\\"countryCallingCodes\\\":[\\\"+262\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇷🇪\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Reunion\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"RH\\\",\\\"alpha3\\\":\\\"RHO\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Southern Rhodesia\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"RO\\\",\\\"alpha3\\\":\\\"ROU\\\",\\\"countryCallingCodes\\\":[\\\"+40\\\"],\\\"currencies\\\":[\\\"RON\\\"],\\\"emoji\\\":\\\"🇷🇴\\\",\\\"ioc\\\":\\\"ROU\\\",\\\"languages\\\":[\\\"ron\\\"],\\\"name\\\":\\\"Romania\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"RS\\\",\\\"alpha3\\\":\\\"SRB\\\",\\\"countryCallingCodes\\\":[\\\"+381\\\"],\\\"currencies\\\":[\\\"RSD\\\"],\\\"emoji\\\":\\\"🇷🇸\\\",\\\"ioc\\\":\\\"SRB\\\",\\\"languages\\\":[\\\"srp\\\"],\\\"name\\\":\\\"Serbia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"RU\\\",\\\"alpha3\\\":\\\"RUS\\\",\\\"countryCallingCodes\\\":[\\\"+7\\\",\\\"+7 3\\\",\\\"+7 4\\\",\\\"+7 8\\\"],\\\"currencies\\\":[\\\"RUB\\\"],\\\"emoji\\\":\\\"🇷🇺\\\",\\\"ioc\\\":\\\"RUS\\\",\\\"languages\\\":[\\\"rus\\\"],\\\"name\\\":\\\"Russian Federation\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"RW\\\",\\\"alpha3\\\":\\\"RWA\\\",\\\"countryCallingCodes\\\":[\\\"+250\\\"],\\\"currencies\\\":[\\\"RWF\\\"],\\\"emoji\\\":\\\"🇷🇼\\\",\\\"ioc\\\":\\\"RWA\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\",\\\"kin\\\"],\\\"name\\\":\\\"Rwanda\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SA\\\",\\\"alpha3\\\":\\\"SAU\\\",\\\"countryCallingCodes\\\":[\\\"+966\\\"],\\\"currencies\\\":[\\\"SAR\\\"],\\\"emoji\\\":\\\"🇸🇦\\\",\\\"ioc\\\":\\\"KSA\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Saudi Arabia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SB\\\",\\\"alpha3\\\":\\\"SLB\\\",\\\"countryCallingCodes\\\":[\\\"+677\\\"],\\\"currencies\\\":[\\\"SBD\\\"],\\\"emoji\\\":\\\"🇸🇧\\\",\\\"ioc\\\":\\\"SOL\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Solomon Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SC\\\",\\\"alpha3\\\":\\\"SYC\\\",\\\"countryCallingCodes\\\":[\\\"+248\\\"],\\\"currencies\\\":[\\\"SCR\\\"],\\\"emoji\\\":\\\"🇸🇨\\\",\\\"ioc\\\":\\\"SEY\\\",\\\"languages\\\":[\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Seychelles\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SD\\\",\\\"alpha3\\\":\\\"SDN\\\",\\\"countryCallingCodes\\\":[\\\"+249\\\"],\\\"currencies\\\":[\\\"SDG\\\"],\\\"emoji\\\":\\\"🇸🇩\\\",\\\"ioc\\\":\\\"SUD\\\",\\\"languages\\\":[\\\"ara\\\",\\\"eng\\\"],\\\"name\\\":\\\"Sudan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SE\\\",\\\"alpha3\\\":\\\"SWE\\\",\\\"countryCallingCodes\\\":[\\\"+46\\\"],\\\"currencies\\\":[\\\"SEK\\\"],\\\"emoji\\\":\\\"🇸🇪\\\",\\\"ioc\\\":\\\"SWE\\\",\\\"languages\\\":[\\\"swe\\\"],\\\"name\\\":\\\"Sweden\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SG\\\",\\\"alpha3\\\":\\\"SGP\\\",\\\"countryCallingCodes\\\":[\\\"+65\\\"],\\\"currencies\\\":[\\\"SGD\\\"],\\\"emoji\\\":\\\"🇸🇬\\\",\\\"ioc\\\":\\\"SIN\\\",\\\"languages\\\":[\\\"eng\\\",\\\"zho\\\",\\\"msa\\\",\\\"tam\\\"],\\\"name\\\":\\\"Singapore\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SH\\\",\\\"alpha3\\\":\\\"SHN\\\",\\\"countryCallingCodes\\\":[\\\"+290\\\"],\\\"currencies\\\":[\\\"SHP\\\"],\\\"emoji\\\":\\\"🇸🇭\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Saint Helena, Ascension And Tristan Da Cunha\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SI\\\",\\\"alpha3\\\":\\\"SVN\\\",\\\"countryCallingCodes\\\":[\\\"+386\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇸🇮\\\",\\\"ioc\\\":\\\"SLO\\\",\\\"languages\\\":[\\\"slv\\\"],\\\"name\\\":\\\"Slovenia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SJ\\\",\\\"alpha3\\\":\\\"SJM\\\",\\\"countryCallingCodes\\\":[\\\"+47\\\"],\\\"currencies\\\":[\\\"NOK\\\"],\\\"emoji\\\":\\\"🇸🇯\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Svalbard And Jan Mayen\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SK\\\",\\\"alpha3\\\":\\\"SVK\\\",\\\"countryCallingCodes\\\":[\\\"+421\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇸🇰\\\",\\\"ioc\\\":\\\"SVK\\\",\\\"languages\\\":[\\\"slk\\\"],\\\"name\\\":\\\"Slovakia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SK\\\",\\\"alpha3\\\":\\\"SKM\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Sikkim\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"SL\\\",\\\"alpha3\\\":\\\"SLE\\\",\\\"countryCallingCodes\\\":[\\\"+232\\\"],\\\"currencies\\\":[\\\"SLL\\\"],\\\"emoji\\\":\\\"🇸🇱\\\",\\\"ioc\\\":\\\"SLE\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Sierra Leone\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SM\\\",\\\"alpha3\\\":\\\"SMR\\\",\\\"countryCallingCodes\\\":[\\\"+378\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇸🇲\\\",\\\"ioc\\\":\\\"SMR\\\",\\\"languages\\\":[\\\"ita\\\"],\\\"name\\\":\\\"San Marino\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SN\\\",\\\"alpha3\\\":\\\"SEN\\\",\\\"countryCallingCodes\\\":[\\\"+221\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇸🇳\\\",\\\"ioc\\\":\\\"SEN\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Senegal\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SO\\\",\\\"alpha3\\\":\\\"SOM\\\",\\\"countryCallingCodes\\\":[\\\"+252\\\"],\\\"currencies\\\":[\\\"SOS\\\"],\\\"emoji\\\":\\\"🇸🇴\\\",\\\"ioc\\\":\\\"SOM\\\",\\\"languages\\\":[\\\"som\\\"],\\\"name\\\":\\\"Somalia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SR\\\",\\\"alpha3\\\":\\\"SUR\\\",\\\"countryCallingCodes\\\":[\\\"+597\\\"],\\\"currencies\\\":[\\\"SRD\\\"],\\\"emoji\\\":\\\"🇸🇷\\\",\\\"ioc\\\":\\\"SUR\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Suriname\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SS\\\",\\\"alpha3\\\":\\\"SSD\\\",\\\"countryCallingCodes\\\":[\\\"+211\\\"],\\\"currencies\\\":[\\\"SSP\\\"],\\\"emoji\\\":\\\"🇸🇸\\\",\\\"ioc\\\":\\\"SSD\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"South Sudan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ST\\\",\\\"alpha3\\\":\\\"STP\\\",\\\"countryCallingCodes\\\":[\\\"+239\\\"],\\\"currencies\\\":[\\\"STD\\\"],\\\"emoji\\\":\\\"🇸🇹\\\",\\\"ioc\\\":\\\"STP\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Sao Tome and Principe\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SU\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"RUB\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"rus\\\"],\\\"name\\\":\\\"USSR\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"SV\\\",\\\"alpha3\\\":\\\"SLV\\\",\\\"countryCallingCodes\\\":[\\\"+503\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇸🇻\\\",\\\"ioc\\\":\\\"ESA\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"El Salvador\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SX\\\",\\\"alpha3\\\":\\\"SXM\\\",\\\"countryCallingCodes\\\":[\\\"+1 721\\\"],\\\"currencies\\\":[\\\"ANG\\\"],\\\"emoji\\\":\\\"🇸🇽\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"nld\\\"],\\\"name\\\":\\\"Sint Maarten\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SY\\\",\\\"alpha3\\\":\\\"SYR\\\",\\\"countryCallingCodes\\\":[\\\"+963\\\"],\\\"currencies\\\":[\\\"SYP\\\"],\\\"emoji\\\":\\\"🇸🇾\\\",\\\"ioc\\\":\\\"SYR\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Syrian Arab Republic\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"SZ\\\",\\\"alpha3\\\":\\\"SWZ\\\",\\\"countryCallingCodes\\\":[\\\"+268\\\"],\\\"currencies\\\":[\\\"SZL\\\"],\\\"emoji\\\":\\\"🇸🇿\\\",\\\"ioc\\\":\\\"SWZ\\\",\\\"languages\\\":[\\\"eng\\\",\\\"ssw\\\"],\\\"name\\\":\\\"Swaziland\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TA\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[\\\"+290\\\"],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Tristan de Cunha\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"TC\\\",\\\"alpha3\\\":\\\"TCA\\\",\\\"countryCallingCodes\\\":[\\\"+1 649\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇹🇨\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Turks And Caicos Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TD\\\",\\\"alpha3\\\":\\\"TCD\\\",\\\"countryCallingCodes\\\":[\\\"+235\\\"],\\\"currencies\\\":[\\\"XAF\\\"],\\\"emoji\\\":\\\"🇹🇩\\\",\\\"ioc\\\":\\\"CHA\\\",\\\"languages\\\":[\\\"ara\\\",\\\"fra\\\"],\\\"name\\\":\\\"Chad\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TF\\\",\\\"alpha3\\\":\\\"ATF\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇹🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"French Southern Territories\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TG\\\",\\\"alpha3\\\":\\\"TGO\\\",\\\"countryCallingCodes\\\":[\\\"+228\\\"],\\\"currencies\\\":[\\\"XOF\\\"],\\\"emoji\\\":\\\"🇹🇬\\\",\\\"ioc\\\":\\\"TOG\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Togo\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TH\\\",\\\"alpha3\\\":\\\"THA\\\",\\\"countryCallingCodes\\\":[\\\"+66\\\"],\\\"currencies\\\":[\\\"THB\\\"],\\\"emoji\\\":\\\"🇹🇭\\\",\\\"ioc\\\":\\\"THA\\\",\\\"languages\\\":[\\\"tha\\\"],\\\"name\\\":\\\"Thailand\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TJ\\\",\\\"alpha3\\\":\\\"TJK\\\",\\\"countryCallingCodes\\\":[\\\"+992\\\"],\\\"currencies\\\":[\\\"TJS\\\"],\\\"emoji\\\":\\\"🇹🇯\\\",\\\"ioc\\\":\\\"TJK\\\",\\\"languages\\\":[\\\"tgk\\\",\\\"rus\\\"],\\\"name\\\":\\\"Tajikistan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TK\\\",\\\"alpha3\\\":\\\"TKL\\\",\\\"countryCallingCodes\\\":[\\\"+690\\\"],\\\"currencies\\\":[\\\"NZD\\\"],\\\"emoji\\\":\\\"🇹🇰\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Tokelau\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TL\\\",\\\"alpha3\\\":\\\"TLS\\\",\\\"countryCallingCodes\\\":[\\\"+670\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇹🇱\\\",\\\"ioc\\\":\\\"TLS\\\",\\\"languages\\\":[\\\"por\\\"],\\\"name\\\":\\\"Timor-Leste, Democratic Republic of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TM\\\",\\\"alpha3\\\":\\\"TKM\\\",\\\"countryCallingCodes\\\":[\\\"+993\\\"],\\\"currencies\\\":[\\\"TMT\\\"],\\\"emoji\\\":\\\"🇹🇲\\\",\\\"ioc\\\":\\\"TKM\\\",\\\"languages\\\":[\\\"tuk\\\",\\\"rus\\\"],\\\"name\\\":\\\"Turkmenistan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TN\\\",\\\"alpha3\\\":\\\"TUN\\\",\\\"countryCallingCodes\\\":[\\\"+216\\\"],\\\"currencies\\\":[\\\"TND\\\"],\\\"emoji\\\":\\\"🇹🇳\\\",\\\"ioc\\\":\\\"TUN\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Tunisia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TO\\\",\\\"alpha3\\\":\\\"TON\\\",\\\"countryCallingCodes\\\":[\\\"+676\\\"],\\\"currencies\\\":[\\\"TOP\\\"],\\\"emoji\\\":\\\"🇹🇴\\\",\\\"ioc\\\":\\\"TGA\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Tonga\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TP\\\",\\\"alpha3\\\":\\\"TMP\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"East Timor\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"TR\\\",\\\"alpha3\\\":\\\"TUR\\\",\\\"countryCallingCodes\\\":[\\\"+90\\\"],\\\"currencies\\\":[\\\"TRY\\\"],\\\"emoji\\\":\\\"🇹🇷\\\",\\\"ioc\\\":\\\"TUR\\\",\\\"languages\\\":[\\\"tur\\\"],\\\"name\\\":\\\"Turkey\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TT\\\",\\\"alpha3\\\":\\\"TTO\\\",\\\"countryCallingCodes\\\":[\\\"+1 868\\\"],\\\"currencies\\\":[\\\"TTD\\\"],\\\"emoji\\\":\\\"🇹🇹\\\",\\\"ioc\\\":\\\"TTO\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Trinidad And Tobago\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TV\\\",\\\"alpha3\\\":\\\"TUV\\\",\\\"countryCallingCodes\\\":[\\\"+688\\\"],\\\"currencies\\\":[\\\"AUD\\\"],\\\"emoji\\\":\\\"🇹🇻\\\",\\\"ioc\\\":\\\"TUV\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Tuvalu\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TW\\\",\\\"alpha3\\\":\\\"TWN\\\",\\\"countryCallingCodes\\\":[\\\"+886\\\"],\\\"currencies\\\":[\\\"TWD\\\"],\\\"emoji\\\":\\\"🇹🇼\\\",\\\"ioc\\\":\\\"TPE\\\",\\\"languages\\\":[\\\"zho\\\"],\\\"name\\\":\\\"Taiwan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"TZ\\\",\\\"alpha3\\\":\\\"TZA\\\",\\\"countryCallingCodes\\\":[\\\"+255\\\"],\\\"currencies\\\":[\\\"TZS\\\"],\\\"emoji\\\":\\\"🇹🇿\\\",\\\"ioc\\\":\\\"TAN\\\",\\\"languages\\\":[\\\"swa\\\",\\\"eng\\\"],\\\"name\\\":\\\"Tanzania, United Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"UA\\\",\\\"alpha3\\\":\\\"UKR\\\",\\\"countryCallingCodes\\\":[\\\"+380\\\"],\\\"currencies\\\":[\\\"UAH\\\"],\\\"emoji\\\":\\\"🇺🇦\\\",\\\"ioc\\\":\\\"UKR\\\",\\\"languages\\\":[\\\"ukr\\\",\\\"rus\\\"],\\\"name\\\":\\\"Ukraine\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"UG\\\",\\\"alpha3\\\":\\\"UGA\\\",\\\"countryCallingCodes\\\":[\\\"+256\\\"],\\\"currencies\\\":[\\\"UGX\\\"],\\\"emoji\\\":\\\"🇺🇬\\\",\\\"ioc\\\":\\\"UGA\\\",\\\"languages\\\":[\\\"eng\\\",\\\"swa\\\"],\\\"name\\\":\\\"Uganda\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"UK\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[\\\"GBP\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\",\\\"cor\\\",\\\"gle\\\",\\\"gla\\\",\\\"cym\\\"],\\\"name\\\":\\\"United Kingdom\\\",\\\"status\\\":\\\"reserved\\\"},{\\\"alpha2\\\":\\\"UM\\\",\\\"alpha3\\\":\\\"UMI\\\",\\\"countryCallingCodes\\\":[\\\"+1\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇺🇲\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"United States Minor Outlying Islands\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"US\\\",\\\"alpha3\\\":\\\"USA\\\",\\\"countryCallingCodes\\\":[\\\"+1\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇺🇸\\\",\\\"ioc\\\":\\\"USA\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"United States\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"UY\\\",\\\"alpha3\\\":\\\"URY\\\",\\\"countryCallingCodes\\\":[\\\"+598\\\"],\\\"currencies\\\":[\\\"UYU\\\",\\\"UYI\\\"],\\\"emoji\\\":\\\"🇺🇾\\\",\\\"ioc\\\":\\\"URU\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Uruguay\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"UZ\\\",\\\"alpha3\\\":\\\"UZB\\\",\\\"countryCallingCodes\\\":[\\\"+998\\\"],\\\"currencies\\\":[\\\"UZS\\\"],\\\"emoji\\\":\\\"🇺🇿\\\",\\\"ioc\\\":\\\"UZB\\\",\\\"languages\\\":[\\\"uzb\\\",\\\"rus\\\"],\\\"name\\\":\\\"Uzbekistan\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VA\\\",\\\"alpha3\\\":\\\"VAT\\\",\\\"countryCallingCodes\\\":[\\\"+379\\\",\\\"+39\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇻🇦\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"ita\\\"],\\\"name\\\":\\\"Vatican City State\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VC\\\",\\\"alpha3\\\":\\\"VCT\\\",\\\"countryCallingCodes\\\":[\\\"+1 784\\\"],\\\"currencies\\\":[\\\"XCD\\\"],\\\"emoji\\\":\\\"🇻🇨\\\",\\\"ioc\\\":\\\"VIN\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Saint Vincent And The Grenadines\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VD\\\",\\\"alpha3\\\":\\\"VDR\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Viet-Nam, Democratic Republic of\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"VE\\\",\\\"alpha3\\\":\\\"VEN\\\",\\\"countryCallingCodes\\\":[\\\"+58\\\"],\\\"currencies\\\":[\\\"VEF\\\"],\\\"emoji\\\":\\\"🇻🇪\\\",\\\"ioc\\\":\\\"VEN\\\",\\\"languages\\\":[\\\"spa\\\"],\\\"name\\\":\\\"Venezuela, Bolivarian Republic Of\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VG\\\",\\\"alpha3\\\":\\\"VGB\\\",\\\"countryCallingCodes\\\":[\\\"+1 284\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇻🇬\\\",\\\"ioc\\\":\\\"IVB\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Virgin Islands (British)\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VI\\\",\\\"alpha3\\\":\\\"VIR\\\",\\\"countryCallingCodes\\\":[\\\"+1 340\\\"],\\\"currencies\\\":[\\\"USD\\\"],\\\"emoji\\\":\\\"🇻🇮\\\",\\\"ioc\\\":\\\"ISV\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Virgin Islands (US)\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VN\\\",\\\"alpha3\\\":\\\"VNM\\\",\\\"countryCallingCodes\\\":[\\\"+84\\\"],\\\"currencies\\\":[\\\"VND\\\"],\\\"emoji\\\":\\\"🇻🇳\\\",\\\"ioc\\\":\\\"VIE\\\",\\\"languages\\\":[\\\"vie\\\"],\\\"name\\\":\\\"Viet Nam\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"VU\\\",\\\"alpha3\\\":\\\"VUT\\\",\\\"countryCallingCodes\\\":[\\\"+678\\\"],\\\"currencies\\\":[\\\"VUV\\\"],\\\"emoji\\\":\\\"🇻🇺\\\",\\\"ioc\\\":\\\"VAN\\\",\\\"languages\\\":[\\\"bis\\\",\\\"eng\\\",\\\"fra\\\"],\\\"name\\\":\\\"Vanuatu\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"WF\\\",\\\"alpha3\\\":\\\"WLF\\\",\\\"countryCallingCodes\\\":[\\\"+681\\\"],\\\"currencies\\\":[\\\"XPF\\\"],\\\"emoji\\\":\\\"🇼🇫\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Wallis And Futuna\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"WK\\\",\\\"alpha3\\\":\\\"WAK\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Wake Island\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"WS\\\",\\\"alpha3\\\":\\\"WSM\\\",\\\"countryCallingCodes\\\":[\\\"+685\\\"],\\\"currencies\\\":[\\\"WST\\\"],\\\"emoji\\\":\\\"🇼🇸\\\",\\\"ioc\\\":\\\"SAM\\\",\\\"languages\\\":[\\\"eng\\\",\\\"smo\\\"],\\\"name\\\":\\\"Samoa\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"XK\\\",\\\"alpha3\\\":\\\"\\\",\\\"countryCallingCodes\\\":[\\\"+383\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"\\\",\\\"ioc\\\":\\\"KOS\\\",\\\"languages\\\":[\\\"sqi\\\",\\\"srp\\\",\\\"bos\\\",\\\"tur\\\",\\\"rom\\\"],\\\"name\\\":\\\"Kosovo\\\",\\\"status\\\":\\\"user assigned\\\"},{\\\"alpha2\\\":\\\"YD\\\",\\\"alpha3\\\":\\\"YMD\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Yemen, Democratic\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"YE\\\",\\\"alpha3\\\":\\\"YEM\\\",\\\"countryCallingCodes\\\":[\\\"+967\\\"],\\\"currencies\\\":[\\\"YER\\\"],\\\"emoji\\\":\\\"🇾🇪\\\",\\\"ioc\\\":\\\"YEM\\\",\\\"languages\\\":[\\\"ara\\\"],\\\"name\\\":\\\"Yemen\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"YT\\\",\\\"alpha3\\\":\\\"MYT\\\",\\\"countryCallingCodes\\\":[\\\"+262\\\"],\\\"currencies\\\":[\\\"EUR\\\"],\\\"emoji\\\":\\\"🇾🇹\\\",\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[\\\"fra\\\"],\\\"name\\\":\\\"Mayotte\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"YU\\\",\\\"alpha3\\\":\\\"YUG\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Yugoslavia\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"ZA\\\",\\\"alpha3\\\":\\\"ZAF\\\",\\\"countryCallingCodes\\\":[\\\"+27\\\"],\\\"currencies\\\":[\\\"ZAR\\\"],\\\"emoji\\\":\\\"🇿🇦\\\",\\\"ioc\\\":\\\"RSA\\\",\\\"languages\\\":[\\\"afr\\\",\\\"eng\\\",\\\"nbl\\\",\\\"som\\\",\\\"tso\\\",\\\"ven\\\",\\\"xho\\\",\\\"zul\\\"],\\\"name\\\":\\\"South Africa\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ZM\\\",\\\"alpha3\\\":\\\"ZMB\\\",\\\"countryCallingCodes\\\":[\\\"+260\\\"],\\\"currencies\\\":[\\\"ZMW\\\"],\\\"emoji\\\":\\\"🇿🇲\\\",\\\"ioc\\\":\\\"ZAM\\\",\\\"languages\\\":[\\\"eng\\\"],\\\"name\\\":\\\"Zambia\\\",\\\"status\\\":\\\"assigned\\\"},{\\\"alpha2\\\":\\\"ZR\\\",\\\"alpha3\\\":\\\"ZAR\\\",\\\"countryCallingCodes\\\":[],\\\"currencies\\\":[],\\\"ioc\\\":\\\"\\\",\\\"languages\\\":[],\\\"name\\\":\\\"Zaire\\\",\\\"status\\\":\\\"deleted\\\"},{\\\"alpha2\\\":\\\"ZW\\\",\\\"alpha3\\\":\\\"ZWE\\\",\\\"countryCallingCodes\\\":[\\\"+263\\\"],\\\"currencies\\\":[\\\"USD\\\",\\\"ZAR\\\",\\\"BWP\\\",\\\"GBP\\\",\\\"EUR\\\"],\\\"emoji\\\":\\\"🇿🇼\\\",\\\"ioc\\\":\\\"ZIM\\\",\\\"languages\\\":[\\\"eng\\\",\\\"sna\\\",\\\"nde\\\"],\\\"name\\\":\\\"Zimbabwe\\\",\\\"status\\\":\\\"assigned\\\"}]\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL2NvdW50cmllcy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/country-data/data/countries.json\n"); - -/***/ }), - -/***/ "../node_modules/country-data/data/currencies.json": -/*!*********************************************************!*\ - !*** ../node_modules/country-data/data/currencies.json ***! - \*********************************************************/ -/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"[{\\\"code\\\":\\\"AED\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"United Arab Emirates dirham\\\",\\\"number\\\":\\\"784\\\"},{\\\"code\\\":\\\"AFN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Afghan afghani\\\",\\\"number\\\":\\\"971\\\"},{\\\"code\\\":\\\"ALL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Albanian lek\\\",\\\"number\\\":\\\"8\\\"},{\\\"code\\\":\\\"AMD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Armenian dram\\\",\\\"number\\\":\\\"51\\\"},{\\\"code\\\":\\\"ANG\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Netherlands Antillean guilder\\\",\\\"number\\\":\\\"532\\\"},{\\\"code\\\":\\\"AOA\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Angolan kwanza\\\",\\\"number\\\":\\\"973\\\"},{\\\"code\\\":\\\"ARS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Argentine peso\\\",\\\"number\\\":\\\"32\\\"},{\\\"code\\\":\\\"AUD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Australian dollar\\\",\\\"number\\\":\\\"36\\\"},{\\\"code\\\":\\\"AWG\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Aruban florin\\\",\\\"number\\\":\\\"533\\\"},{\\\"code\\\":\\\"AZN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Azerbaijani manat\\\",\\\"number\\\":\\\"944\\\"},{\\\"code\\\":\\\"BAM\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bosnia and Herzegovina convertible mark\\\",\\\"number\\\":\\\"977\\\"},{\\\"code\\\":\\\"BBD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Barbados dollar\\\",\\\"number\\\":\\\"52\\\"},{\\\"code\\\":\\\"BDT\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bangladeshi taka\\\",\\\"number\\\":\\\"50\\\"},{\\\"code\\\":\\\"BGN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bulgarian lev\\\",\\\"number\\\":\\\"975\\\"},{\\\"code\\\":\\\"BHD\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Bahraini dinar\\\",\\\"number\\\":\\\"48\\\"},{\\\"code\\\":\\\"BIF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Burundian franc\\\",\\\"number\\\":\\\"108\\\"},{\\\"code\\\":\\\"BMD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bermudian dollar (customarily known as Bermuda dollar)\\\",\\\"number\\\":\\\"60\\\"},{\\\"code\\\":\\\"BND\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Brunei dollar\\\",\\\"number\\\":\\\"96\\\"},{\\\"code\\\":\\\"BOB\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Boliviano\\\",\\\"number\\\":\\\"68\\\"},{\\\"code\\\":\\\"BOV\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bolivian Mvdol (funds code)\\\",\\\"number\\\":\\\"984\\\"},{\\\"code\\\":\\\"BRL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Brazilian real\\\",\\\"number\\\":\\\"986\\\"},{\\\"code\\\":\\\"BSD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bahamian dollar\\\",\\\"number\\\":\\\"44\\\"},{\\\"code\\\":\\\"BTN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Bhutanese ngultrum\\\",\\\"number\\\":\\\"64\\\"},{\\\"code\\\":\\\"BWP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Botswana pula\\\",\\\"number\\\":\\\"72\\\"},{\\\"code\\\":\\\"BYR\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Belarusian ruble\\\",\\\"number\\\":\\\"974\\\"},{\\\"code\\\":\\\"BZD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Belize dollar\\\",\\\"number\\\":\\\"84\\\"},{\\\"code\\\":\\\"CAD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Canadian dollar\\\",\\\"number\\\":\\\"124\\\"},{\\\"code\\\":\\\"CDF\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Congolese franc\\\",\\\"number\\\":\\\"976\\\"},{\\\"code\\\":\\\"CHE\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"WIR Euro (complementary currency)\\\",\\\"number\\\":\\\"947\\\"},{\\\"code\\\":\\\"CHF\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Swiss franc\\\",\\\"number\\\":\\\"756\\\"},{\\\"code\\\":\\\"CHW\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"WIR Franc (complementary currency)\\\",\\\"number\\\":\\\"948\\\"},{\\\"code\\\":\\\"CLF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Unidad de Fomento (funds code)\\\",\\\"number\\\":\\\"990\\\"},{\\\"code\\\":\\\"CLP\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Chilean peso\\\",\\\"number\\\":\\\"152\\\"},{\\\"code\\\":\\\"CNY\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Chinese yuan\\\",\\\"number\\\":\\\"156\\\"},{\\\"code\\\":\\\"COP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Colombian peso\\\",\\\"number\\\":\\\"170\\\"},{\\\"code\\\":\\\"COU\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Unidad de Valor Real\\\",\\\"number\\\":\\\"970\\\"},{\\\"code\\\":\\\"CRC\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Costa Rican colon\\\",\\\"number\\\":\\\"188\\\"},{\\\"code\\\":\\\"CUC\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Cuban convertible peso\\\",\\\"number\\\":\\\"931\\\"},{\\\"code\\\":\\\"CUP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Cuban peso\\\",\\\"number\\\":\\\"192\\\"},{\\\"code\\\":\\\"CVE\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Cape Verde escudo\\\",\\\"number\\\":\\\"132\\\"},{\\\"code\\\":\\\"CZK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Czech koruna\\\",\\\"number\\\":\\\"203\\\"},{\\\"code\\\":\\\"DJF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Djiboutian franc\\\",\\\"number\\\":\\\"262\\\"},{\\\"code\\\":\\\"DKK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Danish krone\\\",\\\"number\\\":\\\"208\\\"},{\\\"code\\\":\\\"DOP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Dominican peso\\\",\\\"number\\\":\\\"214\\\"},{\\\"code\\\":\\\"DZD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Algerian dinar\\\",\\\"number\\\":\\\"12\\\"},{\\\"code\\\":\\\"EGP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Egyptian pound\\\",\\\"number\\\":\\\"818\\\"},{\\\"code\\\":\\\"ERN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Eritrean nakfa\\\",\\\"number\\\":\\\"232\\\"},{\\\"code\\\":\\\"ETB\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Ethiopian birr\\\",\\\"number\\\":\\\"230\\\"},{\\\"code\\\":\\\"EUR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Euro\\\",\\\"number\\\":\\\"978\\\"},{\\\"code\\\":\\\"FJD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Fiji dollar\\\",\\\"number\\\":\\\"242\\\"},{\\\"code\\\":\\\"FKP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Falkland Islands pound\\\",\\\"number\\\":\\\"238\\\"},{\\\"code\\\":\\\"GBP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Pound sterling\\\",\\\"number\\\":\\\"826\\\"},{\\\"code\\\":\\\"GEL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Georgian lari\\\",\\\"number\\\":\\\"981\\\"},{\\\"code\\\":\\\"GHS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Ghanaian cedi\\\",\\\"number\\\":\\\"936\\\"},{\\\"code\\\":\\\"GIP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Gibraltar pound\\\",\\\"number\\\":\\\"292\\\"},{\\\"code\\\":\\\"GMD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Gambian dalasi\\\",\\\"number\\\":\\\"270\\\"},{\\\"code\\\":\\\"GNF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Guinean franc\\\",\\\"number\\\":\\\"324\\\"},{\\\"code\\\":\\\"GTQ\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Guatemalan quetzal\\\",\\\"number\\\":\\\"320\\\"},{\\\"code\\\":\\\"GYD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Guyanese dollar\\\",\\\"number\\\":\\\"328\\\"},{\\\"code\\\":\\\"HKD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Hong Kong dollar\\\",\\\"number\\\":\\\"344\\\"},{\\\"code\\\":\\\"HNL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Honduran lempira\\\",\\\"number\\\":\\\"340\\\"},{\\\"code\\\":\\\"HRK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Croatian kuna\\\",\\\"number\\\":\\\"191\\\"},{\\\"code\\\":\\\"HTG\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Haitian gourde\\\",\\\"number\\\":\\\"332\\\"},{\\\"code\\\":\\\"HUF\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Hungarian forint\\\",\\\"number\\\":\\\"348\\\"},{\\\"code\\\":\\\"IDR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Indonesian rupiah\\\",\\\"number\\\":\\\"360\\\"},{\\\"code\\\":\\\"ILS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Israeli new shekel\\\",\\\"number\\\":\\\"376\\\"},{\\\"code\\\":\\\"INR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Indian rupee\\\",\\\"number\\\":\\\"356\\\"},{\\\"code\\\":\\\"IQD\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Iraqi dinar\\\",\\\"number\\\":\\\"368\\\"},{\\\"code\\\":\\\"IRR\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Iranian rial\\\",\\\"number\\\":\\\"364\\\"},{\\\"code\\\":\\\"ISK\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Icelandic króna\\\",\\\"number\\\":\\\"352\\\"},{\\\"code\\\":\\\"JMD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Jamaican dollar\\\",\\\"number\\\":\\\"388\\\"},{\\\"code\\\":\\\"JOD\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Jordanian dinar\\\",\\\"number\\\":\\\"400\\\"},{\\\"code\\\":\\\"JPY\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Japanese yen\\\",\\\"number\\\":\\\"392\\\"},{\\\"code\\\":\\\"KES\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Kenyan shilling\\\",\\\"number\\\":\\\"404\\\"},{\\\"code\\\":\\\"KGS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Kyrgyzstani som\\\",\\\"number\\\":\\\"417\\\"},{\\\"code\\\":\\\"KHR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Cambodian riel\\\",\\\"number\\\":\\\"116\\\"},{\\\"code\\\":\\\"KMF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Comoro franc\\\",\\\"number\\\":\\\"174\\\"},{\\\"code\\\":\\\"KPW\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"North Korean won\\\",\\\"number\\\":\\\"408\\\"},{\\\"code\\\":\\\"KRW\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"South Korean won\\\",\\\"number\\\":\\\"410\\\"},{\\\"code\\\":\\\"KWD\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Kuwaiti dinar\\\",\\\"number\\\":\\\"414\\\"},{\\\"code\\\":\\\"KYD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Cayman Islands dollar\\\",\\\"number\\\":\\\"136\\\"},{\\\"code\\\":\\\"KZT\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Kazakhstani tenge\\\",\\\"number\\\":\\\"398\\\"},{\\\"code\\\":\\\"LAK\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Lao kip\\\",\\\"number\\\":\\\"418\\\"},{\\\"code\\\":\\\"LBP\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Lebanese pound\\\",\\\"number\\\":\\\"422\\\"},{\\\"code\\\":\\\"LKR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Sri Lankan rupee\\\",\\\"number\\\":\\\"144\\\"},{\\\"code\\\":\\\"LRD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Liberian dollar\\\",\\\"number\\\":\\\"430\\\"},{\\\"code\\\":\\\"LSL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Lesotho loti\\\",\\\"number\\\":\\\"426\\\"},{\\\"code\\\":\\\"LTL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Lithuanian litas\\\",\\\"number\\\":\\\"440\\\"},{\\\"code\\\":\\\"LVL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Latvian lats\\\",\\\"number\\\":\\\"428\\\"},{\\\"code\\\":\\\"LYD\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Libyan dinar\\\",\\\"number\\\":\\\"434\\\"},{\\\"code\\\":\\\"MAD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Moroccan dirham\\\",\\\"number\\\":\\\"504\\\"},{\\\"code\\\":\\\"MDL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Moldovan leu\\\",\\\"number\\\":\\\"498\\\"},{\\\"code\\\":\\\"MGA\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Malagasy ariary\\\",\\\"number\\\":\\\"969\\\"},{\\\"code\\\":\\\"MKD\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Macedonian denar\\\",\\\"number\\\":\\\"807\\\"},{\\\"code\\\":\\\"MMK\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Myanma kyat\\\",\\\"number\\\":\\\"104\\\"},{\\\"code\\\":\\\"MNT\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Mongolian tugrik\\\",\\\"number\\\":\\\"496\\\"},{\\\"code\\\":\\\"MOP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Macanese pataca\\\",\\\"number\\\":\\\"446\\\"},{\\\"code\\\":\\\"MRO\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Mauritanian ouguiya\\\",\\\"number\\\":\\\"478\\\"},{\\\"code\\\":\\\"MUR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Mauritian rupee\\\",\\\"number\\\":\\\"480\\\"},{\\\"code\\\":\\\"MVR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Maldivian rufiyaa\\\",\\\"number\\\":\\\"462\\\"},{\\\"code\\\":\\\"MWK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Malawian kwacha\\\",\\\"number\\\":\\\"454\\\"},{\\\"code\\\":\\\"MXN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Mexican peso\\\",\\\"number\\\":\\\"484\\\"},{\\\"code\\\":\\\"MXV\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Mexican Unidad de Inversion (UDI) (funds code)\\\",\\\"number\\\":\\\"979\\\"},{\\\"code\\\":\\\"MYR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Malaysian ringgit\\\",\\\"number\\\":\\\"458\\\"},{\\\"code\\\":\\\"MZN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Mozambican metical\\\",\\\"number\\\":\\\"943\\\"},{\\\"code\\\":\\\"NAD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Namibian dollar\\\",\\\"number\\\":\\\"516\\\"},{\\\"code\\\":\\\"NGN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Nigerian naira\\\",\\\"number\\\":\\\"566\\\"},{\\\"code\\\":\\\"NIO\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Nicaraguan córdoba\\\",\\\"number\\\":\\\"558\\\"},{\\\"code\\\":\\\"NOK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Norwegian krone\\\",\\\"number\\\":\\\"578\\\"},{\\\"code\\\":\\\"NPR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Nepalese rupee\\\",\\\"number\\\":\\\"524\\\"},{\\\"code\\\":\\\"NZD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"New Zealand dollar\\\",\\\"number\\\":\\\"554\\\"},{\\\"code\\\":\\\"OMR\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Omani rial\\\",\\\"number\\\":\\\"512\\\"},{\\\"code\\\":\\\"PAB\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Panamanian balboa\\\",\\\"number\\\":\\\"590\\\"},{\\\"code\\\":\\\"PEN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Peruvian nuevo sol\\\",\\\"number\\\":\\\"604\\\"},{\\\"code\\\":\\\"PGK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Papua New Guinean kina\\\",\\\"number\\\":\\\"598\\\"},{\\\"code\\\":\\\"PHP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Philippine peso\\\",\\\"number\\\":\\\"608\\\"},{\\\"code\\\":\\\"PKR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Pakistani rupee\\\",\\\"number\\\":\\\"586\\\"},{\\\"code\\\":\\\"PLN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Polish złoty\\\",\\\"number\\\":\\\"985\\\"},{\\\"code\\\":\\\"PYG\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Paraguayan guaraní\\\",\\\"number\\\":\\\"600\\\"},{\\\"code\\\":\\\"QAR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Qatari riyal\\\",\\\"number\\\":\\\"634\\\"},{\\\"code\\\":\\\"RON\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Romanian new leu\\\",\\\"number\\\":\\\"946\\\"},{\\\"code\\\":\\\"RSD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Serbian dinar\\\",\\\"number\\\":\\\"941\\\"},{\\\"code\\\":\\\"RUB\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Russian rouble\\\",\\\"number\\\":\\\"643\\\"},{\\\"code\\\":\\\"RWF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Rwandan franc\\\",\\\"number\\\":\\\"646\\\"},{\\\"code\\\":\\\"SAR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Saudi riyal\\\",\\\"number\\\":\\\"682\\\"},{\\\"code\\\":\\\"SBD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Solomon Islands dollar\\\",\\\"number\\\":\\\"90\\\"},{\\\"code\\\":\\\"SCR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Seychelles rupee\\\",\\\"number\\\":\\\"690\\\"},{\\\"code\\\":\\\"SDG\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Sudanese pound\\\",\\\"number\\\":\\\"938\\\"},{\\\"code\\\":\\\"SEK\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Swedish krona/kronor\\\",\\\"number\\\":\\\"752\\\"},{\\\"code\\\":\\\"SGD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Singapore dollar\\\",\\\"number\\\":\\\"702\\\"},{\\\"code\\\":\\\"SHP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Saint Helena pound\\\",\\\"number\\\":\\\"654\\\"},{\\\"code\\\":\\\"SLL\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Sierra Leonean leone\\\",\\\"number\\\":\\\"694\\\"},{\\\"code\\\":\\\"SOS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Somali shilling\\\",\\\"number\\\":\\\"706\\\"},{\\\"code\\\":\\\"SRD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Surinamese dollar\\\",\\\"number\\\":\\\"968\\\"},{\\\"code\\\":\\\"SSP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"South Sudanese pound\\\",\\\"number\\\":\\\"728\\\"},{\\\"code\\\":\\\"STD\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"São Tomé and Príncipe dobra\\\",\\\"number\\\":\\\"678\\\"},{\\\"code\\\":\\\"SYP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Syrian pound\\\",\\\"number\\\":\\\"760\\\"},{\\\"code\\\":\\\"SZL\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Swazi lilangeni\\\",\\\"number\\\":\\\"748\\\"},{\\\"code\\\":\\\"THB\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Thai baht\\\",\\\"number\\\":\\\"764\\\"},{\\\"code\\\":\\\"TJS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Tajikistani somoni\\\",\\\"number\\\":\\\"972\\\"},{\\\"code\\\":\\\"TMT\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Turkmenistani manat\\\",\\\"number\\\":\\\"934\\\"},{\\\"code\\\":\\\"TND\\\",\\\"decimals\\\":3,\\\"name\\\":\\\"Tunisian dinar\\\",\\\"number\\\":\\\"788\\\"},{\\\"code\\\":\\\"TOP\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Tongan paʻanga\\\",\\\"number\\\":\\\"776\\\"},{\\\"code\\\":\\\"TRY\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Turkish lira\\\",\\\"number\\\":\\\"949\\\"},{\\\"code\\\":\\\"TTD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Trinidad and Tobago dollar\\\",\\\"number\\\":\\\"780\\\"},{\\\"code\\\":\\\"TWD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"New Taiwan dollar\\\",\\\"number\\\":\\\"901\\\"},{\\\"code\\\":\\\"TZS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Tanzanian shilling\\\",\\\"number\\\":\\\"834\\\"},{\\\"code\\\":\\\"UAH\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Ukrainian hryvnia\\\",\\\"number\\\":\\\"980\\\"},{\\\"code\\\":\\\"UGX\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Ugandan shilling\\\",\\\"number\\\":\\\"800\\\"},{\\\"code\\\":\\\"USD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"United States dollar\\\",\\\"number\\\":\\\"840\\\"},{\\\"code\\\":\\\"USN\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"United States dollar (next day) (funds code)\\\",\\\"number\\\":\\\"997\\\"},{\\\"code\\\":\\\"USS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"United States dollar (same day) (funds code) (one source[who?] claims it is no longer used, but it is still on the ISO 4217-MA list)\\\",\\\"number\\\":\\\"998\\\"},{\\\"code\\\":\\\"UYI\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code)\\\",\\\"number\\\":\\\"940\\\"},{\\\"code\\\":\\\"UYU\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Uruguayan peso\\\",\\\"number\\\":\\\"858\\\"},{\\\"code\\\":\\\"UZS\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Uzbekistan som\\\",\\\"number\\\":\\\"860\\\"},{\\\"code\\\":\\\"VEF\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Venezuelan bolívar fuerte\\\",\\\"number\\\":\\\"937\\\"},{\\\"code\\\":\\\"VND\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Vietnamese dong\\\",\\\"number\\\":\\\"704\\\"},{\\\"code\\\":\\\"VUV\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"Vanuatu vatu\\\",\\\"number\\\":\\\"548\\\"},{\\\"code\\\":\\\"WST\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Samoan tala\\\",\\\"number\\\":\\\"882\\\"},{\\\"code\\\":\\\"XAF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"CFA franc BEAC\\\",\\\"number\\\":\\\"950\\\"},{\\\"code\\\":\\\"XAG\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Silver (one troy ounce)\\\",\\\"number\\\":\\\"961\\\"},{\\\"code\\\":\\\"XAU\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Gold (one troy ounce)\\\",\\\"number\\\":\\\"959\\\"},{\\\"code\\\":\\\"XBA\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"European Composite Unit (EURCO) (bond market unit)\\\",\\\"number\\\":\\\"955\\\"},{\\\"code\\\":\\\"XBB\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"European Monetary Unit (E.M.U.-6) (bond market unit)\\\",\\\"number\\\":\\\"956\\\"},{\\\"code\\\":\\\"XBC\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"European Unit of Account 9 (E.U.A.-9) (bond market unit)\\\",\\\"number\\\":\\\"957\\\"},{\\\"code\\\":\\\"XBD\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"European Unit of Account 17 (E.U.A.-17) (bond market unit)\\\",\\\"number\\\":\\\"958\\\"},{\\\"code\\\":\\\"XCD\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"East Caribbean dollar\\\",\\\"number\\\":\\\"951\\\"},{\\\"code\\\":\\\"XDR\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Special drawing rights\\\",\\\"number\\\":\\\"960\\\"},{\\\"code\\\":\\\"XFU\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"UIC franc (special settlement currency)\\\",\\\"number\\\":\\\"Nil\\\"},{\\\"code\\\":\\\"XOF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"CFA franc BCEAO\\\",\\\"number\\\":\\\"952\\\"},{\\\"code\\\":\\\"XPD\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Palladium (one troy ounce)\\\",\\\"number\\\":\\\"964\\\"},{\\\"code\\\":\\\"XPF\\\",\\\"decimals\\\":0,\\\"name\\\":\\\"CFP franc\\\",\\\"number\\\":\\\"953\\\"},{\\\"code\\\":\\\"XPT\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Platinum (one troy ounce)\\\",\\\"number\\\":\\\"962\\\"},{\\\"code\\\":\\\"XTS\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"Code reserved for testing purposes\\\",\\\"number\\\":\\\"963\\\"},{\\\"code\\\":\\\"XXX\\\",\\\"decimals\\\":null,\\\"name\\\":\\\"No currency\\\",\\\"number\\\":\\\"999\\\"},{\\\"code\\\":\\\"YER\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Yemeni rial\\\",\\\"number\\\":\\\"886\\\"},{\\\"code\\\":\\\"ZAR\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"South African rand\\\",\\\"number\\\":\\\"710\\\"},{\\\"code\\\":\\\"ZMW\\\",\\\"decimals\\\":2,\\\"name\\\":\\\"Zambian kwacha\\\",\\\"number\\\":\\\"967\\\"}]\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL2N1cnJlbmNpZXMuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/country-data/data/currencies.json\n"); - -/***/ }), - -/***/ "../node_modules/country-data/data/languages.json": -/*!********************************************************!*\ - !*** ../node_modules/country-data/data/languages.json ***! - \********************************************************/ -/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"[{\\\"alpha2\\\":\\\"aa\\\",\\\"alpha3\\\":\\\"aar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Afar\\\"},{\\\"alpha2\\\":\\\"ab\\\",\\\"alpha3\\\":\\\"abk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Abkhazian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ace\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Achinese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ach\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Acoli\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ada\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Adangme\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ady\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Adygei\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ady\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Adyghe\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"afa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Afro-Asiatic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"afh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Afrihili\\\"},{\\\"alpha2\\\":\\\"af\\\",\\\"alpha3\\\":\\\"afr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Afrikaans\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ain\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ainu\\\"},{\\\"alpha2\\\":\\\"ak\\\",\\\"alpha3\\\":\\\"aka\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Akan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"akk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Akkadian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ale\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Aleut\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"alg\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Algonquian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"alt\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Southern Altai\\\"},{\\\"alpha2\\\":\\\"am\\\",\\\"alpha3\\\":\\\"amh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Amharic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ang\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"English, Old (ca.450-1100)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"anp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Angika\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"apa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Apache languages\\\"},{\\\"alpha2\\\":\\\"ar\\\",\\\"alpha3\\\":\\\"ara\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Arabic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Imperial Aramaic (700-300 BCE)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Official Aramaic (700-300 BCE)\\\"},{\\\"alpha2\\\":\\\"an\\\",\\\"alpha3\\\":\\\"arg\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Aragonese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mapuche\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mapudungun\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Arapaho\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"art\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Artificial languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"arw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Arawak\\\"},{\\\"alpha2\\\":\\\"as\\\",\\\"alpha3\\\":\\\"asm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Assamese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ast\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Asturian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ast\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Asturleonese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ast\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bable\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ast\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Leonese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ath\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Athapascan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"aus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Australian languages\\\"},{\\\"alpha2\\\":\\\"av\\\",\\\"alpha3\\\":\\\"ava\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Avaric\\\"},{\\\"alpha2\\\":\\\"ae\\\",\\\"alpha3\\\":\\\"ave\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Avestan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"awa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Awadhi\\\"},{\\\"alpha2\\\":\\\"ay\\\",\\\"alpha3\\\":\\\"aym\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Aymara\\\"},{\\\"alpha2\\\":\\\"az\\\",\\\"alpha3\\\":\\\"aze\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Azerbaijani\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bad\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Banda languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bamileke languages\\\"},{\\\"alpha2\\\":\\\"ba\\\",\\\"alpha3\\\":\\\"bak\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bashkir\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Baluchi\\\"},{\\\"alpha2\\\":\\\"bm\\\",\\\"alpha3\\\":\\\"bam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bambara\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ban\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Balinese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bas\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Basa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Baltic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bej\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bedawiyet\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bej\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Beja\\\"},{\\\"alpha2\\\":\\\"be\\\",\\\"alpha3\\\":\\\"bel\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Belarusian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bem\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bemba\\\"},{\\\"alpha2\\\":\\\"bn\\\",\\\"alpha3\\\":\\\"ben\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bengali\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ber\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Berber languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bho\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bhojpuri\\\"},{\\\"alpha2\\\":\\\"bh\\\",\\\"alpha3\\\":\\\"bih\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bihari languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bik\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bikol\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bini\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Edo\\\"},{\\\"alpha2\\\":\\\"bi\\\",\\\"alpha3\\\":\\\"bis\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bislama\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bla\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Siksika\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bnt\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bantu languages\\\"},{\\\"alpha2\\\":\\\"bo\\\",\\\"alpha3\\\":\\\"bod\\\",\\\"bibliographic\\\":\\\"tib\\\",\\\"name\\\":\\\"Tibetan\\\"},{\\\"alpha2\\\":\\\"bs\\\",\\\"alpha3\\\":\\\"bos\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bosnian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bra\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Braj\\\"},{\\\"alpha2\\\":\\\"br\\\",\\\"alpha3\\\":\\\"bre\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Breton\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"btk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Batak languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bua\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Buriat\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"bug\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Buginese\\\"},{\\\"alpha2\\\":\\\"bg\\\",\\\"alpha3\\\":\\\"bul\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bulgarian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"byn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bilin\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"byn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Blin\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cad\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Caddo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Central American Indian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"car\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Galibi Carib\\\"},{\\\"alpha2\\\":\\\"ca\\\",\\\"alpha3\\\":\\\"cat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Catalan\\\"},{\\\"alpha2\\\":\\\"ca\\\",\\\"alpha3\\\":\\\"cat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Valencian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cau\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Caucasian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ceb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cebuano\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cel\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Celtic languages\\\"},{\\\"alpha2\\\":\\\"cs\\\",\\\"alpha3\\\":\\\"ces\\\",\\\"bibliographic\\\":\\\"cze\\\",\\\"name\\\":\\\"Czech\\\"},{\\\"alpha2\\\":\\\"ch\\\",\\\"alpha3\\\":\\\"cha\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chamorro\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chibcha\\\"},{\\\"alpha2\\\":\\\"ce\\\",\\\"alpha3\\\":\\\"che\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chechen\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chg\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chagatai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chuukese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mari\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chinook jargon\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cho\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Choctaw\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chipewyan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dene Suline\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cherokee\\\"},{\\\"alpha2\\\":\\\"cu\\\",\\\"alpha3\\\":\\\"chu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Church Slavic\\\"},{\\\"alpha2\\\":\\\"cu\\\",\\\"alpha3\\\":\\\"chu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Church Slavonic\\\"},{\\\"alpha2\\\":\\\"cu\\\",\\\"alpha3\\\":\\\"chu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Old Bulgarian\\\"},{\\\"alpha2\\\":\\\"cu\\\",\\\"alpha3\\\":\\\"chu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Old Church Slavonic\\\"},{\\\"alpha2\\\":\\\"cu\\\",\\\"alpha3\\\":\\\"chu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Old Slavonic\\\"},{\\\"alpha2\\\":\\\"cv\\\",\\\"alpha3\\\":\\\"chv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chuvash\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"chy\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cheyenne\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cmc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chamic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cop\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Coptic\\\"},{\\\"alpha2\\\":\\\"kw\\\",\\\"alpha3\\\":\\\"cor\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cornish\\\"},{\\\"alpha2\\\":\\\"co\\\",\\\"alpha3\\\":\\\"cos\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Corsican\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cpe\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Creoles and pidgins, English based\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cpf\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Creoles and pidgins, French-based\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cpp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Creoles and pidgins, Portuguese-based\\\"},{\\\"alpha2\\\":\\\"cr\\\",\\\"alpha3\\\":\\\"cre\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cree\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"crh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Crimean Tatar\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"crh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Crimean Turkish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"crp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Creoles and pidgins\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"csb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kashubian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"cus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cushitic languages\\\"},{\\\"alpha2\\\":\\\"cy\\\",\\\"alpha3\\\":\\\"cym\\\",\\\"bibliographic\\\":\\\"wel\\\",\\\"name\\\":\\\"Welsh\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dak\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dakota\\\"},{\\\"alpha2\\\":\\\"da\\\",\\\"alpha3\\\":\\\"dan\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Danish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dargwa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"day\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Land Dayak languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"del\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Delaware\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"den\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Slave (Athapascan)\\\"},{\\\"alpha2\\\":\\\"de\\\",\\\"alpha3\\\":\\\"deu\\\",\\\"bibliographic\\\":\\\"ger\\\",\\\"name\\\":\\\"German\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dgr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dogrib\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"din\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dinka\\\"},{\\\"alpha2\\\":\\\"dv\\\",\\\"alpha3\\\":\\\"div\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dhivehi\\\"},{\\\"alpha2\\\":\\\"dv\\\",\\\"alpha3\\\":\\\"div\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Divehi\\\"},{\\\"alpha2\\\":\\\"dv\\\",\\\"alpha3\\\":\\\"div\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Maldivian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"doi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dogri\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dra\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dravidian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dsb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lower Sorbian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dua\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Duala\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dum\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dutch, Middle (ca.1050-1350)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"dyu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dyula\\\"},{\\\"alpha2\\\":\\\"dz\\\",\\\"alpha3\\\":\\\"dzo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dzongkha\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"efi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Efik\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"egy\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Egyptian (Ancient)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"eka\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ekajuk\\\"},{\\\"alpha2\\\":\\\"el\\\",\\\"alpha3\\\":\\\"ell\\\",\\\"bibliographic\\\":\\\"gre\\\",\\\"name\\\":\\\"Greek, Modern (1453-)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"elx\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Elamite\\\"},{\\\"alpha2\\\":\\\"en\\\",\\\"alpha3\\\":\\\"eng\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"English\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"enm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"English, Middle (1100-1500)\\\"},{\\\"alpha2\\\":\\\"eo\\\",\\\"alpha3\\\":\\\"epo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Esperanto\\\"},{\\\"alpha2\\\":\\\"et\\\",\\\"alpha3\\\":\\\"est\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Estonian\\\"},{\\\"alpha2\\\":\\\"eu\\\",\\\"alpha3\\\":\\\"eus\\\",\\\"bibliographic\\\":\\\"baq\\\",\\\"name\\\":\\\"Basque\\\"},{\\\"alpha2\\\":\\\"ee\\\",\\\"alpha3\\\":\\\"ewe\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ewe\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ewo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ewondo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fan\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Fang\\\"},{\\\"alpha2\\\":\\\"fo\\\",\\\"alpha3\\\":\\\"fao\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Faroese\\\"},{\\\"alpha2\\\":\\\"fa\\\",\\\"alpha3\\\":\\\"fas\\\",\\\"bibliographic\\\":\\\"per\\\",\\\"name\\\":\\\"Persian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Fanti\\\"},{\\\"alpha2\\\":\\\"fj\\\",\\\"alpha3\\\":\\\"fij\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Fijian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fil\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Filipino\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fil\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pilipino\\\"},{\\\"alpha2\\\":\\\"fi\\\",\\\"alpha3\\\":\\\"fin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Finnish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fiu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Finno-Ugrian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fon\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Fon\\\"},{\\\"alpha2\\\":\\\"fr\\\",\\\"alpha3\\\":\\\"fra\\\",\\\"bibliographic\\\":\\\"fre\\\",\\\"name\\\":\\\"French\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"frm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"French, Middle (ca.1400-1600)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fro\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"French, Old (842-ca.1400)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"frr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Northern Frisian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"frs\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Eastern Frisian\\\"},{\\\"alpha2\\\":\\\"fy\\\",\\\"alpha3\\\":\\\"fry\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Western Frisian\\\"},{\\\"alpha2\\\":\\\"ff\\\",\\\"alpha3\\\":\\\"ful\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Fulah\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"fur\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Friulian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gaa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ga\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gay\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gayo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gba\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gbaya\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gem\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Germanic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gez\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Geez\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gil\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gilbertese\\\"},{\\\"alpha2\\\":\\\"gd\\\",\\\"alpha3\\\":\\\"gla\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gaelic\\\"},{\\\"alpha2\\\":\\\"gd\\\",\\\"alpha3\\\":\\\"gla\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Scottish Gaelic\\\"},{\\\"alpha2\\\":\\\"ga\\\",\\\"alpha3\\\":\\\"gle\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Irish\\\"},{\\\"alpha2\\\":\\\"gl\\\",\\\"alpha3\\\":\\\"glg\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Galician\\\"},{\\\"alpha2\\\":\\\"gv\\\",\\\"alpha3\\\":\\\"glv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Manx\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gmh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"German, Middle High (ca.1050-1500)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"goh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"German, Old High (ca.750-1050)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gon\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gondi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gor\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gorontalo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"got\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gothic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"grb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Grebo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"grc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Greek, Ancient (to 1453)\\\"},{\\\"alpha2\\\":\\\"gn\\\",\\\"alpha3\\\":\\\"grn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Guarani\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gsw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Alemannic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gsw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Alsatian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gsw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Swiss German\\\"},{\\\"alpha2\\\":\\\"gu\\\",\\\"alpha3\\\":\\\"guj\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gujarati\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"gwi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gwich'in\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Haida\\\"},{\\\"alpha2\\\":\\\"ht\\\",\\\"alpha3\\\":\\\"hat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Haitian\\\"},{\\\"alpha2\\\":\\\"ht\\\",\\\"alpha3\\\":\\\"hat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Haitian Creole\\\"},{\\\"alpha2\\\":\\\"ha\\\",\\\"alpha3\\\":\\\"hau\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hausa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"haw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hawaiian\\\"},{\\\"alpha2\\\":\\\"he\\\",\\\"alpha3\\\":\\\"heb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hebrew\\\"},{\\\"alpha2\\\":\\\"hz\\\",\\\"alpha3\\\":\\\"her\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Herero\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hil\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hiligaynon\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"him\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Himachali languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"him\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Western Pahari languages\\\"},{\\\"alpha2\\\":\\\"hi\\\",\\\"alpha3\\\":\\\"hin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hindi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hit\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hittite\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hmn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hmong\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hmn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mong\\\"},{\\\"alpha2\\\":\\\"ho\\\",\\\"alpha3\\\":\\\"hmo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hiri Motu\\\"},{\\\"alpha2\\\":\\\"hr\\\",\\\"alpha3\\\":\\\"hrv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Croatian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hsb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Upper Sorbian\\\"},{\\\"alpha2\\\":\\\"hu\\\",\\\"alpha3\\\":\\\"hun\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hungarian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"hup\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Hupa\\\"},{\\\"alpha2\\\":\\\"hy\\\",\\\"alpha3\\\":\\\"hye\\\",\\\"bibliographic\\\":\\\"arm\\\",\\\"name\\\":\\\"Armenian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"iba\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Iban\\\"},{\\\"alpha2\\\":\\\"ig\\\",\\\"alpha3\\\":\\\"ibo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Igbo\\\"},{\\\"alpha2\\\":\\\"io\\\",\\\"alpha3\\\":\\\"ido\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ido\\\"},{\\\"alpha2\\\":\\\"ii\\\",\\\"alpha3\\\":\\\"iii\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nuosu\\\"},{\\\"alpha2\\\":\\\"ii\\\",\\\"alpha3\\\":\\\"iii\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sichuan Yi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ijo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ijo languages\\\"},{\\\"alpha2\\\":\\\"iu\\\",\\\"alpha3\\\":\\\"iku\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Inuktitut\\\"},{\\\"alpha2\\\":\\\"ie\\\",\\\"alpha3\\\":\\\"ile\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Interlingue\\\"},{\\\"alpha2\\\":\\\"ie\\\",\\\"alpha3\\\":\\\"ile\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Occidental\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ilo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Iloko\\\"},{\\\"alpha2\\\":\\\"ia\\\",\\\"alpha3\\\":\\\"ina\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Interlingua (International Auxiliary Language Association)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"inc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Indic languages\\\"},{\\\"alpha2\\\":\\\"id\\\",\\\"alpha3\\\":\\\"ind\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Indonesian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ine\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Indo-European languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"inh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ingush\\\"},{\\\"alpha2\\\":\\\"ik\\\",\\\"alpha3\\\":\\\"ipk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Inupiaq\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ira\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Iranian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"iro\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Iroquoian languages\\\"},{\\\"alpha2\\\":\\\"is\\\",\\\"alpha3\\\":\\\"isl\\\",\\\"bibliographic\\\":\\\"ice\\\",\\\"name\\\":\\\"Icelandic\\\"},{\\\"alpha2\\\":\\\"it\\\",\\\"alpha3\\\":\\\"ita\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Italian\\\"},{\\\"alpha2\\\":\\\"jv\\\",\\\"alpha3\\\":\\\"jav\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Javanese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"jbo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lojban\\\"},{\\\"alpha2\\\":\\\"ja\\\",\\\"alpha3\\\":\\\"jpn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Japanese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"jpr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Judeo-Persian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"jrb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Judeo-Arabic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kaa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kara-Kalpak\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kab\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kabyle\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kac\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Jingpho\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kac\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kachin\\\"},{\\\"alpha2\\\":\\\"kl\\\",\\\"alpha3\\\":\\\"kal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Greenlandic\\\"},{\\\"alpha2\\\":\\\"kl\\\",\\\"alpha3\\\":\\\"kal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kalaallisut\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kamba\\\"},{\\\"alpha2\\\":\\\"kn\\\",\\\"alpha3\\\":\\\"kan\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kannada\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Karen languages\\\"},{\\\"alpha2\\\":\\\"ks\\\",\\\"alpha3\\\":\\\"kas\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kashmiri\\\"},{\\\"alpha2\\\":\\\"ka\\\",\\\"alpha3\\\":\\\"kat\\\",\\\"bibliographic\\\":\\\"geo\\\",\\\"name\\\":\\\"Georgian\\\"},{\\\"alpha2\\\":\\\"kr\\\",\\\"alpha3\\\":\\\"kau\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kanuri\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kaw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kawi\\\"},{\\\"alpha2\\\":\\\"kk\\\",\\\"alpha3\\\":\\\"kaz\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kazakh\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kbd\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kabardian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kha\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Khasi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"khi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Khoisan languages\\\"},{\\\"alpha2\\\":\\\"km\\\",\\\"alpha3\\\":\\\"khm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Central Khmer\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kho\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Khotanese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kho\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sakan\\\"},{\\\"alpha2\\\":\\\"ki\\\",\\\"alpha3\\\":\\\"kik\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Gikuyu\\\"},{\\\"alpha2\\\":\\\"ki\\\",\\\"alpha3\\\":\\\"kik\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kikuyu\\\"},{\\\"alpha2\\\":\\\"rw\\\",\\\"alpha3\\\":\\\"kin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kinyarwanda\\\"},{\\\"alpha2\\\":\\\"ky\\\",\\\"alpha3\\\":\\\"kir\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kirghiz\\\"},{\\\"alpha2\\\":\\\"ky\\\",\\\"alpha3\\\":\\\"kir\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kyrgyz\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kmb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kimbundu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kok\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Konkani\\\"},{\\\"alpha2\\\":\\\"kv\\\",\\\"alpha3\\\":\\\"kom\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Komi\\\"},{\\\"alpha2\\\":\\\"kg\\\",\\\"alpha3\\\":\\\"kon\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kongo\\\"},{\\\"alpha2\\\":\\\"ko\\\",\\\"alpha3\\\":\\\"kor\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Korean\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kos\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kosraean\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kpe\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kpelle\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"krc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Karachay-Balkar\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"krl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Karelian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kro\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kru languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kru\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kurukh\\\"},{\\\"alpha2\\\":\\\"kj\\\",\\\"alpha3\\\":\\\"kua\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kuanyama\\\"},{\\\"alpha2\\\":\\\"kj\\\",\\\"alpha3\\\":\\\"kua\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kwanyama\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kum\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kumyk\\\"},{\\\"alpha2\\\":\\\"ku\\\",\\\"alpha3\\\":\\\"kur\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kurdish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"kut\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kutenai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lad\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ladino\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lah\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lahnda\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lamba\\\"},{\\\"alpha2\\\":\\\"lo\\\",\\\"alpha3\\\":\\\"lao\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lao\\\"},{\\\"alpha2\\\":\\\"la\\\",\\\"alpha3\\\":\\\"lat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Latin\\\"},{\\\"alpha2\\\":\\\"lv\\\",\\\"alpha3\\\":\\\"lav\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Latvian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lez\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lezghian\\\"},{\\\"alpha2\\\":\\\"li\\\",\\\"alpha3\\\":\\\"lim\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Limburgan\\\"},{\\\"alpha2\\\":\\\"li\\\",\\\"alpha3\\\":\\\"lim\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Limburger\\\"},{\\\"alpha2\\\":\\\"li\\\",\\\"alpha3\\\":\\\"lim\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Limburgish\\\"},{\\\"alpha2\\\":\\\"ln\\\",\\\"alpha3\\\":\\\"lin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lingala\\\"},{\\\"alpha2\\\":\\\"lt\\\",\\\"alpha3\\\":\\\"lit\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lithuanian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lol\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mongo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"loz\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lozi\\\"},{\\\"alpha2\\\":\\\"lb\\\",\\\"alpha3\\\":\\\"ltz\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Letzeburgesch\\\"},{\\\"alpha2\\\":\\\"lb\\\",\\\"alpha3\\\":\\\"ltz\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Luxembourgish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lua\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Luba-Lulua\\\"},{\\\"alpha2\\\":\\\"lu\\\",\\\"alpha3\\\":\\\"lub\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Luba-Katanga\\\"},{\\\"alpha2\\\":\\\"lg\\\",\\\"alpha3\\\":\\\"lug\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ganda\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lui\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Luiseno\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lun\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lunda\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"luo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Luo (Kenya and Tanzania)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"lus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lushai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mad\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Madurese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mag\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Magahi\\\"},{\\\"alpha2\\\":\\\"mh\\\",\\\"alpha3\\\":\\\"mah\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Marshallese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Maithili\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mak\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Makasar\\\"},{\\\"alpha2\\\":\\\"ml\\\",\\\"alpha3\\\":\\\"mal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Malayalam\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"man\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mandingo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"map\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Austronesian languages\\\"},{\\\"alpha2\\\":\\\"mr\\\",\\\"alpha3\\\":\\\"mar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Marathi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mas\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Masai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mdf\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Moksha\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mdr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mandar\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"men\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mende\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mga\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Irish, Middle (900-1200)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mic\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mi'kmaq\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mic\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Micmac\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"min\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Minangkabau\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mis\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Uncoded languages\\\"},{\\\"alpha2\\\":\\\"mk\\\",\\\"alpha3\\\":\\\"mkd\\\",\\\"bibliographic\\\":\\\"mac\\\",\\\"name\\\":\\\"Macedonian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mkh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mon-Khmer languages\\\"},{\\\"alpha2\\\":\\\"mg\\\",\\\"alpha3\\\":\\\"mlg\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Malagasy\\\"},{\\\"alpha2\\\":\\\"mt\\\",\\\"alpha3\\\":\\\"mlt\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Maltese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mnc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Manchu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mni\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Manipuri\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mno\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Manobo languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"moh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mohawk\\\"},{\\\"alpha2\\\":\\\"mn\\\",\\\"alpha3\\\":\\\"mon\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mongolian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mos\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mossi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mot\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Montenegrin\\\"},{\\\"alpha2\\\":\\\"mi\\\",\\\"alpha3\\\":\\\"mri\\\",\\\"bibliographic\\\":\\\"mao\\\",\\\"name\\\":\\\"Maori\\\"},{\\\"alpha2\\\":\\\"ms\\\",\\\"alpha3\\\":\\\"msa\\\",\\\"bibliographic\\\":\\\"may\\\",\\\"name\\\":\\\"Malay\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mul\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Multiple languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mun\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Munda languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Creek\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mwl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mirandese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"mwr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Marwari\\\"},{\\\"alpha2\\\":\\\"my\\\",\\\"alpha3\\\":\\\"mya\\\",\\\"bibliographic\\\":\\\"bur\\\",\\\"name\\\":\\\"Burmese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"myn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Mayan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"myv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Erzya\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nah\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nahuatl languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"North American Indian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nap\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Neapolitan\\\"},{\\\"alpha2\\\":\\\"na\\\",\\\"alpha3\\\":\\\"nau\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nauru\\\"},{\\\"alpha2\\\":\\\"nv\\\",\\\"alpha3\\\":\\\"nav\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Navaho\\\"},{\\\"alpha2\\\":\\\"nv\\\",\\\"alpha3\\\":\\\"nav\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Navajo\\\"},{\\\"alpha2\\\":\\\"nr\\\",\\\"alpha3\\\":\\\"nbl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ndebele, South\\\"},{\\\"alpha2\\\":\\\"nr\\\",\\\"alpha3\\\":\\\"nbl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"South Ndebele\\\"},{\\\"alpha2\\\":\\\"nd\\\",\\\"alpha3\\\":\\\"nde\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ndebele, North\\\"},{\\\"alpha2\\\":\\\"nd\\\",\\\"alpha3\\\":\\\"nde\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"North Ndebele\\\"},{\\\"alpha2\\\":\\\"ng\\\",\\\"alpha3\\\":\\\"ndo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ndonga\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nds\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"German, Low\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nds\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Low German\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nds\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Low Saxon\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nds\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Saxon, Low\\\"},{\\\"alpha2\\\":\\\"ne\\\",\\\"alpha3\\\":\\\"nep\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nepali\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"new\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nepal Bhasa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"new\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Newari\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nia\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nias\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nic\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Niger-Kordofanian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"niu\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Niuean\\\"},{\\\"alpha2\\\":\\\"nl\\\",\\\"alpha3\\\":\\\"nld\\\",\\\"bibliographic\\\":\\\"dut\\\",\\\"name\\\":\\\"Dutch\\\"},{\\\"alpha2\\\":\\\"nl\\\",\\\"alpha3\\\":\\\"nld\\\",\\\"bibliographic\\\":\\\"dut\\\",\\\"name\\\":\\\"Flemish\\\"},{\\\"alpha2\\\":\\\"nn\\\",\\\"alpha3\\\":\\\"nno\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Norwegian Nynorsk\\\"},{\\\"alpha2\\\":\\\"nn\\\",\\\"alpha3\\\":\\\"nno\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nynorsk, Norwegian\\\"},{\\\"alpha2\\\":\\\"nb\\\",\\\"alpha3\\\":\\\"nob\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bokmål, Norwegian\\\"},{\\\"alpha2\\\":\\\"nb\\\",\\\"alpha3\\\":\\\"nob\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Norwegian Bokmål\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nog\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nogai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"non\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Norse, Old\\\"},{\\\"alpha2\\\":\\\"no\\\",\\\"alpha3\\\":\\\"nor\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Norwegian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nqo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"N'Ko\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nso\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Northern Sotho\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nso\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pedi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nso\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sepedi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nso\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sotho, Northern\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nub\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nubian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nwc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Classical Nepal Bhasa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nwc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Classical Newari\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nwc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Old Newari\\\"},{\\\"alpha2\\\":\\\"ny\\\",\\\"alpha3\\\":\\\"nya\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chewa\\\"},{\\\"alpha2\\\":\\\"ny\\\",\\\"alpha3\\\":\\\"nya\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chichewa\\\"},{\\\"alpha2\\\":\\\"ny\\\",\\\"alpha3\\\":\\\"nya\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nyanja\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nym\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nyamwezi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nyn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nyankole\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nyo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nyoro\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"nzi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nzima\\\"},{\\\"alpha2\\\":\\\"oc\\\",\\\"alpha3\\\":\\\"oci\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Occitan (post 1500)\\\"},{\\\"alpha2\\\":\\\"oj\\\",\\\"alpha3\\\":\\\"oji\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ojibwa\\\"},{\\\"alpha2\\\":\\\"or\\\",\\\"alpha3\\\":\\\"ori\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Oriya\\\"},{\\\"alpha2\\\":\\\"om\\\",\\\"alpha3\\\":\\\"orm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Oromo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"osa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Osage\\\"},{\\\"alpha2\\\":\\\"os\\\",\\\"alpha3\\\":\\\"oss\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ossetian\\\"},{\\\"alpha2\\\":\\\"os\\\",\\\"alpha3\\\":\\\"oss\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ossetic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ota\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Turkish, Ottoman (1500-1928)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"oto\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Otomian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"paa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Papuan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pag\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pangasinan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pahlavi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kapampangan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pampanga\\\"},{\\\"alpha2\\\":\\\"pa\\\",\\\"alpha3\\\":\\\"pan\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Panjabi\\\"},{\\\"alpha2\\\":\\\"pa\\\",\\\"alpha3\\\":\\\"pan\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Punjabi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pap\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Papiamento\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pau\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Palauan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"peo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Persian, Old (ca.600-400 B.C.)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"phi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Philippine languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"phn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Phoenician\\\"},{\\\"alpha2\\\":\\\"pi\\\",\\\"alpha3\\\":\\\"pli\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pali\\\"},{\\\"alpha2\\\":\\\"pl\\\",\\\"alpha3\\\":\\\"pol\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Polish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pon\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pohnpeian\\\"},{\\\"alpha2\\\":\\\"pt\\\",\\\"alpha3\\\":\\\"por\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Portuguese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pra\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Prakrit languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pro\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Occitan, Old (to 1500)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"pro\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Provençal, Old (to 1500)\\\"},{\\\"alpha2\\\":\\\"ps\\\",\\\"alpha3\\\":\\\"pus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pashto\\\"},{\\\"alpha2\\\":\\\"ps\\\",\\\"alpha3\\\":\\\"pus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Pushto\\\"},{\\\"alpha2\\\":\\\"qu\\\",\\\"alpha3\\\":\\\"que\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Quechua\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"raj\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Rajasthani\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rap\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Rapanui\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Cook Islands Maori\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rar\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Rarotongan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"roa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Romance languages\\\"},{\\\"alpha2\\\":\\\"rm\\\",\\\"alpha3\\\":\\\"roh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Romansh\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rom\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Romany\\\"},{\\\"alpha2\\\":\\\"ro\\\",\\\"alpha3\\\":\\\"ron\\\",\\\"bibliographic\\\":\\\"rum\\\",\\\"name\\\":\\\"Moldavian\\\"},{\\\"alpha2\\\":\\\"ro\\\",\\\"alpha3\\\":\\\"ron\\\",\\\"bibliographic\\\":\\\"rum\\\",\\\"name\\\":\\\"Romanian\\\"},{\\\"alpha2\\\":\\\"rn\\\",\\\"alpha3\\\":\\\"run\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Rundi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rup\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Aromanian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rup\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Arumanian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"rup\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Macedo-Romanian\\\"},{\\\"alpha2\\\":\\\"ru\\\",\\\"alpha3\\\":\\\"rus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Russian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sad\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sandawe\\\"},{\\\"alpha2\\\":\\\"sg\\\",\\\"alpha3\\\":\\\"sag\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sango\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sah\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yakut\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"South American Indian languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Salishan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Samaritan Aramaic\\\"},{\\\"alpha2\\\":\\\"sa\\\",\\\"alpha3\\\":\\\"san\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sanskrit\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sas\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sasak\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Santali\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"scn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sicilian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sco\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Scots\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sel\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Selkup\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sem\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Semitic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sga\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Irish, Old (to 900)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sgn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sign Languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"shn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Shan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sid\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sidamo\\\"},{\\\"alpha2\\\":\\\"si\\\",\\\"alpha3\\\":\\\"sin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sinhala\\\"},{\\\"alpha2\\\":\\\"si\\\",\\\"alpha3\\\":\\\"sin\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sinhalese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sio\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Siouan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sit\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sino-Tibetan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sla\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Slavic languages\\\"},{\\\"alpha2\\\":\\\"sk\\\",\\\"alpha3\\\":\\\"slk\\\",\\\"bibliographic\\\":\\\"slo\\\",\\\"name\\\":\\\"Slovak\\\"},{\\\"alpha2\\\":\\\"sl\\\",\\\"alpha3\\\":\\\"slv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Slovenian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sma\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Southern Sami\\\"},{\\\"alpha2\\\":\\\"se\\\",\\\"alpha3\\\":\\\"sme\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Northern Sami\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"smi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sami languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"smj\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Lule Sami\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"smn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Inari Sami\\\"},{\\\"alpha2\\\":\\\"sm\\\",\\\"alpha3\\\":\\\"smo\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Samoan\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sms\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Skolt Sami\\\"},{\\\"alpha2\\\":\\\"sn\\\",\\\"alpha3\\\":\\\"sna\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Shona\\\"},{\\\"alpha2\\\":\\\"sd\\\",\\\"alpha3\\\":\\\"snd\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sindhi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"snk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Soninke\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sog\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sogdian\\\"},{\\\"alpha2\\\":\\\"so\\\",\\\"alpha3\\\":\\\"som\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Somali\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"son\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Songhai languages\\\"},{\\\"alpha2\\\":\\\"st\\\",\\\"alpha3\\\":\\\"sot\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sotho, Southern\\\"},{\\\"alpha2\\\":\\\"es\\\",\\\"alpha3\\\":\\\"spa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Castilian\\\"},{\\\"alpha2\\\":\\\"es\\\",\\\"alpha3\\\":\\\"spa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Spanish\\\"},{\\\"alpha2\\\":\\\"sq\\\",\\\"alpha3\\\":\\\"sqi\\\",\\\"bibliographic\\\":\\\"alb\\\",\\\"name\\\":\\\"Albanian\\\"},{\\\"alpha2\\\":\\\"sc\\\",\\\"alpha3\\\":\\\"srd\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sardinian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"srn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sranan Tongo\\\"},{\\\"alpha2\\\":\\\"sr\\\",\\\"alpha3\\\":\\\"srp\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Serbian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"srr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Serer\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ssa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Nilo-Saharan languages\\\"},{\\\"alpha2\\\":\\\"ss\\\",\\\"alpha3\\\":\\\"ssw\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Swati\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"suk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sukuma\\\"},{\\\"alpha2\\\":\\\"su\\\",\\\"alpha3\\\":\\\"sun\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sundanese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sus\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Susu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"sux\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sumerian\\\"},{\\\"alpha2\\\":\\\"sw\\\",\\\"alpha3\\\":\\\"swa\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Swahili\\\"},{\\\"alpha2\\\":\\\"sv\\\",\\\"alpha3\\\":\\\"swe\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Swedish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"syc\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Classical Syriac\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"syr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Syriac\\\"},{\\\"alpha2\\\":\\\"ty\\\",\\\"alpha3\\\":\\\"tah\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tahitian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tai languages\\\"},{\\\"alpha2\\\":\\\"ta\\\",\\\"alpha3\\\":\\\"tam\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tamil\\\"},{\\\"alpha2\\\":\\\"tt\\\",\\\"alpha3\\\":\\\"tat\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tatar\\\"},{\\\"alpha2\\\":\\\"te\\\",\\\"alpha3\\\":\\\"tel\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Telugu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tem\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Timne\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ter\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tereno\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tet\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tetum\\\"},{\\\"alpha2\\\":\\\"tg\\\",\\\"alpha3\\\":\\\"tgk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tajik\\\"},{\\\"alpha2\\\":\\\"tl\\\",\\\"alpha3\\\":\\\"tgl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tagalog\\\"},{\\\"alpha2\\\":\\\"th\\\",\\\"alpha3\\\":\\\"tha\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Thai\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tig\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tigre\\\"},{\\\"alpha2\\\":\\\"ti\\\",\\\"alpha3\\\":\\\"tir\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tigrinya\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tiv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tiv\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tkl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tokelau\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tlh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Klingon\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tlh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"tlhIngan-Hol\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tli\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tlingit\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tmh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tamashek\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tog\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tonga (Nyasa)\\\"},{\\\"alpha2\\\":\\\"to\\\",\\\"alpha3\\\":\\\"ton\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tonga (Tonga Islands)\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tpi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tok Pisin\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tsi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tsimshian\\\"},{\\\"alpha2\\\":\\\"tn\\\",\\\"alpha3\\\":\\\"tsn\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tswana\\\"},{\\\"alpha2\\\":\\\"ts\\\",\\\"alpha3\\\":\\\"tso\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tsonga\\\"},{\\\"alpha2\\\":\\\"tk\\\",\\\"alpha3\\\":\\\"tuk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Turkmen\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tum\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tumbuka\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tup\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tupi languages\\\"},{\\\"alpha2\\\":\\\"tr\\\",\\\"alpha3\\\":\\\"tur\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Turkish\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tut\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Altaic languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tvl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tuvalu\\\"},{\\\"alpha2\\\":\\\"tw\\\",\\\"alpha3\\\":\\\"twi\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Twi\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"tyv\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Tuvinian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"udm\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Udmurt\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"uga\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ugaritic\\\"},{\\\"alpha2\\\":\\\"ug\\\",\\\"alpha3\\\":\\\"uig\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Uighur\\\"},{\\\"alpha2\\\":\\\"ug\\\",\\\"alpha3\\\":\\\"uig\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Uyghur\\\"},{\\\"alpha2\\\":\\\"uk\\\",\\\"alpha3\\\":\\\"ukr\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Ukrainian\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"umb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Umbundu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"und\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Undetermined\\\"},{\\\"alpha2\\\":\\\"ur\\\",\\\"alpha3\\\":\\\"urd\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Urdu\\\"},{\\\"alpha2\\\":\\\"uz\\\",\\\"alpha3\\\":\\\"uzb\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Uzbek\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"vai\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Vai\\\"},{\\\"alpha2\\\":\\\"ve\\\",\\\"alpha3\\\":\\\"ven\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Venda\\\"},{\\\"alpha2\\\":\\\"vi\\\",\\\"alpha3\\\":\\\"vie\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Vietnamese\\\"},{\\\"alpha2\\\":\\\"vo\\\",\\\"alpha3\\\":\\\"vol\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Volapük\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"vot\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Votic\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"wak\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Wakashan languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"wal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Wolaitta\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"wal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Wolaytta\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"war\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Waray\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"was\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Washo\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"wen\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Sorbian languages\\\"},{\\\"alpha2\\\":\\\"wa\\\",\\\"alpha3\\\":\\\"wln\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Walloon\\\"},{\\\"alpha2\\\":\\\"wo\\\",\\\"alpha3\\\":\\\"wol\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Wolof\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"xal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kalmyk\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"xal\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Oirat\\\"},{\\\"alpha2\\\":\\\"xh\\\",\\\"alpha3\\\":\\\"xho\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Xhosa\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"yao\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yao\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"yap\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yapese\\\"},{\\\"alpha2\\\":\\\"yi\\\",\\\"alpha3\\\":\\\"yid\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yiddish\\\"},{\\\"alpha2\\\":\\\"yo\\\",\\\"alpha3\\\":\\\"yor\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yoruba\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"ypk\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Yupik languages\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zap\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zapotec\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zbl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Bliss\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zbl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Blissymbolics\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zbl\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Blissymbols\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zen\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zenaga\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zgh\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Standard Moroccan Tamazight\\\"},{\\\"alpha2\\\":\\\"za\\\",\\\"alpha3\\\":\\\"zha\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Chuang\\\"},{\\\"alpha2\\\":\\\"za\\\",\\\"alpha3\\\":\\\"zha\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zhuang\\\"},{\\\"alpha2\\\":\\\"zh\\\",\\\"alpha3\\\":\\\"zho\\\",\\\"bibliographic\\\":\\\"chi\\\",\\\"name\\\":\\\"Chinese\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"znd\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zande languages\\\"},{\\\"alpha2\\\":\\\"zu\\\",\\\"alpha3\\\":\\\"zul\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zulu\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zun\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zuni\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zxx\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"No linguistic content\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zxx\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Not applicable\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dimili\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Dimli\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kirdki\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Kirmanjki\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zaza\\\"},{\\\"alpha2\\\":\\\"\\\",\\\"alpha3\\\":\\\"zza\\\",\\\"bibliographic\\\":\\\"\\\",\\\"name\\\":\\\"Zazaki\\\"}]\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL2xhbmd1YWdlcy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/country-data/data/languages.json\n"); - -/***/ }), - -/***/ "../node_modules/country-data/data/regions.js": -/*!****************************************************!*\ - !*** ../node_modules/country-data/data/regions.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar regions = {};\nregions.centralAsia = {\n name: 'Central Asia',\n countries: [// source is http://en.wikipedia.org/wiki/Central_Asia\n 'KZ', // Kazakhstan\n 'KG', // Kyrgyzstan\n 'TJ', // Tajikistan\n 'TM', // Turkmenistan\n 'UZ' // Uzbekistan\n ]\n};\nregions.southernAsia = {\n name: 'Southern Asia',\n countries: [// source is http://en.wikipedia.org/wiki/South_Asia\n 'AF', // Afghanistan\n 'BD', // Bangladesh\n 'BT', // Bhutan\n 'IO', // British Indian Ocean Territory\n 'IN', // India\n 'IR', // Iran\n 'MV', // Maldives\n 'NP', // Nepal\n 'PK', // Pakistan\n 'LK' // Sri Lanka\n ]\n};\nregions.southeastAsia = {\n name: 'Southeast Asia',\n countries: [// source is http://en.wikipedia.org/wiki/Southeast_Asia\n 'BN', // Brunei\n 'KH', // Cambodia\n 'CX', // Christmas Island\n 'CC', // Cocos (Keeling) Islands\n 'TL', // East Timor\n 'ID', // Indonesia\n 'LA', // Laos\n 'MY', // Malaysia\n 'MM', // Myanmar (Burma)\n 'PH', // Philippines\n 'SG', // Singapore\n 'TH', // Thailand\n 'VN' // Vietnam\n ]\n};\nregions.eastAsia = {\n name: 'East Asia',\n countries: [// source is http://en.wikipedia.org/wiki/East_Asia\n 'CN', // China\n 'HK', // Hong Kong\n 'JP', // Japan\n 'KP', // North Korea\n 'KR', // South Korea\n 'MO', // Macao\n 'MN', // Mongolia\n 'TW' // Taiwan\n ]\n};\nregions.westernAsia = {\n name: 'Western Asia',\n countries: [// source is http://en.wikipedia.org/wiki/Western_Asia\n 'AM', // Armenia\n 'AZ', // Azerbaijan\n 'BH', // Bahrain\n 'IQ', // Iraq\n 'IL', // Israel\n 'JO', // Jordan\n 'KW', // Kuwait\n 'LB', // Lebanon\n 'OM', // Oman\n 'PS', // Palestinian territories\n 'QA', // Qatar\n 'SA', // Saudi Arabia\n 'SY', // Syria\n 'TR', // Turkey\n 'AE', // United Arab Emirates\n 'YE' // Yemen\n ]\n};\nregions.centralAfrica = {\n name: 'Central Aftrica',\n countries: [// source is http://en.wikipedia.org/wiki/Central_Africa\n 'AO', // Angola\n 'CM', // Cameroon\n 'CF', // Central African Republic\n 'TD', // Chad\n 'CG', // Republic of the Congo\n 'CD', // Democratic Republic of the Congo\n 'GQ', // Equatorial Guinea\n 'GA', // Gabon\n 'ST' // São Tomé and Príncipe\n ]\n};\nregions.northAfrica = {\n name: 'North Africa',\n countries: [// source is http://en.wikipedia.org/wiki/North_Africa\n 'DZ', // Algeria\n 'EG', // Egypt\n 'LY', // Libya\n 'MA', // Morocco\n 'SD', // Sudan\n 'TN', // Tunisia\n 'EH' // Western Sahara\n ]\n};\nregions.southernAfrica = {\n name: 'Southern Africa',\n countries: [// source is http://en.wikipedia.org/wiki/Southern_Africa\n 'BW', // Botswana\n 'LS', // Lesotho\n 'NA', // Namibia\n 'ZA', // South Africa\n 'SZ' // Swaziland\n ]\n};\nregions.eastAfrica = {\n name: 'East Africa',\n countries: [// source is http://en.wikipedia.org/wiki/East_Africa\n 'BI', // Burundi\n 'KM', // Comoros\n 'DJ', // Djibouti\n 'ER', // Eritrea\n 'ET', // Ethiopia\n 'KE', // Kenya\n 'MG', // Madagascar\n 'MW', // Malawi\n 'MU', // Mauritius\n 'YT', // Mayotte (France)\n 'MZ', // Mozambique\n 'RE', // Réunion (France)\n 'RW', // Rwanda\n 'SC', // Seychelles\n 'SO', // Somalia\n 'SS', // South Sudan\n 'TZ', // Tanzania\n 'UG', // Uganda\n 'ZM', // Zambia\n 'ZW' // Zimbabwe\n ]\n};\nregions.westAfrica = {\n name: 'West Africa',\n countries: [// source is http://en.wikipedia.org/wiki/West_Africa\n 'BJ', // Benin\n 'BF', // Burkina Faso\n 'CV', // Cabo Verde\n 'CI', // Côte d'Ivoire\n 'GM', // Gambia\n 'GH', // Ghana\n 'GN', // Guinea\n 'GW', // Guinea-Bissau\n 'LR', // Liberia\n 'ML', // Mali\n 'MR', // Mauritania\n 'NE', // Niger\n 'NG', // Nigeria\n 'SH', // Saint Helena, Ascension and Tristan da Cunha (United Kingdom)\n 'SN', // Senegal\n 'SL', // Sierra Leone\n 'TG' // Togo\n ]\n};\nregions.centralAmerica = {\n name: 'Central America',\n countries: [// source is http://en.wikipedia.org/wiki/Central_America\n 'BZ', // Belize\n 'CR', // Costa Rica\n 'SV', // El Salvador\n 'GT', // Guatemala\n 'HN', // Honduras\n 'NI', // Nicaragua\n 'PA' // Panama\n ]\n};\nregions.northernAmerica = {\n name: 'Northern America',\n countries: [// source is http://en.wikipedia.org/wiki/Northern_America\n 'BM', // Bermuda\n 'CA', // Canada\n 'GL', // Greenland\n 'MX', // Mexico\n 'PM', // Saint Pierre and Miquelon\n 'US' // United States\n ]\n};\nregions.caribbean = {\n name: 'Caribbean',\n countries: [// source is http://en.wikipedia.org/wiki/Caribbean\n 'AI', // Anguilla\n 'AG', // Antigua and Barbuda\n 'AW', // Aruba\n 'BS', // Bahamas\n 'BB', // Barbados\n 'BQ', // Bonaire, Sint Eustatius & Saba\n 'VG', // British Virgin Islands\n 'KY', // Cayman Islands\n 'CU', // Cuba\n 'CW', // Curaçao\n 'DM', // Dominica\n 'DO', // Dominican Republic\n 'GD', // Grenada\n 'GP', // Guadeloupe\n 'HT', // Haiti\n 'JM', // Jamaica\n 'MQ', // Martinique\n 'MS', // Montserrat\n 'PR', // Puerto Rico\n 'BL', // Saint Barthélemy\n 'KN', // St. Kitts & Nevis\n 'LC', // Saint Lucia\n 'MF', // Saint Martin\n 'VC', // Saint Vincent and the Grenadines\n 'SX', // Sint Maarten\n 'TT', // Trinidad and Tobago\n 'TC', // Turks & Caicos\n 'VI' // United States Virgin Islands\n ]\n};\nregions.southAmerica = {\n name: 'South America',\n countries: [// source is http://en.wikipedia.org/wiki/South_America\n 'AR', // Argentina\n 'BO', // Bolivia\n 'BR', // Brazil\n 'CL', // Chile\n 'CO', // Colombia\n 'EC', // Ecuador\n 'FK', // Falkland Islands\n 'GF', // French Guiana\n 'GY', // Guyana\n 'PY', // Paraguay\n 'PE', // Peru\n 'SR', // Suriname\n 'UY', // Uruguay\n 'VE' // Venezuela\n ]\n};\nregions.antartica = {\n name: 'Antartica',\n countries: [// source is http://en.wikipedia.org/wiki/Antarctica\n 'AQ', // Antarctica\n 'BV', // Bouvet Island\n 'TF', // French Southern Territories\n 'HM', // Heard Island and McDonald Islands\n 'GS' // South Georgia and the South Sandwich Islands\n ]\n};\nregions.northernEurope = {\n name: 'Northern Europe',\n countries: [// source is http://en.wikipedia.org/wiki/Northern_Europe\n 'AX', // Åland\n 'DK', // Denmark\n 'EE', // Estonia\n 'FO', // Faroe Islands\n 'FI', // Finland\n 'GG', // Guernsey\n 'IS', // Iceland\n 'IE', // Republic of Ireland\n 'JE', // Jersey (UK)\n 'IM', // Isle of Man\n 'LV', // Latvia\n 'LT', // Lithuania\n 'NO', // Norway\n 'SJ', // Svalbard and Jan Mayen\n 'SE', // Sweden\n 'GB' // United Kingdom\n ]\n};\nregions.southernEurope = {\n name: 'Southern Europe',\n countries: [// source is http://en.wikipedia.org/wiki/Southern_Europe\n 'AL', // Albania\n 'AD', // Andorra\n 'BA', // Bosnia and Herzegovina\n 'HR', // Croatia\n 'CY', // Cyprus\n 'GI', // Gibraltar\n 'GR', // Greece\n 'IT', // Italy\n 'MK', // Republic of Macedonia\n 'VA', // Vatican City\n 'MT', // Malta\n 'ME', // Montenegro\n 'PT', // Portugal\n 'SM', // San Marino\n 'RS', // Serbia\n 'SI', // Slovenia\n 'ES' // Spain\n ]\n};\nregions.easternEurope = {\n name: 'Eastern Europe',\n countries: [// source is http://en.wikipedia.org/wiki/Eastern_Europe\n 'BY', // Belarus\n 'BG', // Bulgaria\n 'CZ', // Czech Republic\n 'GE', // Georgia\n 'HU', // Hungary\n 'MD', // Moldova\n 'PL', // Poland\n 'RO', // Romania\n 'RU', // Russia\n 'SK', // Slovakia\n 'UA' // Ukraine\n ]\n};\nregions.westernEurope = {\n name: 'Western Europe',\n countries: [// source is http://en.wikipedia.org/wiki/Western_Europe\n 'AT', // Austria\n 'BE', // Belgium\n 'FR', // France\n 'DE', // Germany\n 'LI', // Liechtenstein\n 'LU', // Luxembourg\n 'MC', // Monaco\n 'NL', // Netherlands\n 'CH' // Switzerland\n ]\n};\nregions.australia = {\n name: 'Australia',\n countries: [// source is http://en.wikipedia.org/wiki/Oceania\n 'AU', // Australia\n 'NF', // Norfolk Island\n 'NZ' // New Zealand\n ]\n};\nregions.melanesia = {\n name: 'Melanesia',\n countries: [// source is http://en.wikipedia.org/wiki/Oceania\n 'FJ', // Fiji\n 'NC', // New Caledonia\n 'PG', // Papua New Guinea\n 'SB', // Solomon Islands\n 'VU' // Vanuatu\n ]\n};\nregions.micronesia = {\n name: 'Micronesia',\n countries: [// source is http://en.wikipedia.org/wiki/Oceania\n 'GU', // Guam\n 'KI', // Kiribati\n 'MH', // Marshall Islands\n 'FM', // Micronesia, Fed. Sts.\n 'NR', // Nauru\n 'MP', // Northern Mariana Islands\n 'PW', // Palau\n 'UM' // United States Minor Outlying Islands\n ]\n};\nregions.polynesia = {\n name: 'Polynesia',\n countries: [// source is http://en.wikipedia.org/wiki/Oceania\n 'AS', // American Samoa\n 'CK', // Cook Islands\n 'PF', // French Polynesia\n 'NU', // Niue\n 'PN', // Pitcairn Islands\n 'WS', // Samoa\n 'TK', // Tokelau\n 'TO', // Tonga\n 'TV', // Tuvalu\n 'WF' // Wallis and Futuna\n ]\n};\nmodule.exports = regions;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL3JlZ2lvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9kYXRhL3JlZ2lvbnMuanM/ZTAyMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWdpb25zID0ge307XG5cbnJlZ2lvbnMuY2VudHJhbEFzaWEgPSB7XG4gIG5hbWU6ICdDZW50cmFsIEFzaWEnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cmFsX0FzaWFcbiAgICAnS1onLCAvLyBLYXpha2hzdGFuXG4gICAgJ0tHJywgLy8gS3lyZ3l6c3RhblxuICAgICdUSicsIC8vIFRhamlraXN0YW5cbiAgICAnVE0nLCAvLyBUdXJrbWVuaXN0YW5cbiAgICAnVVonLCAvLyBVemJla2lzdGFuXG4gIF1cbn1cblxucmVnaW9ucy5zb3V0aGVybkFzaWEgPSB7XG4gIG5hbWU6ICdTb3V0aGVybiBBc2lhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU291dGhfQXNpYVxuICAgICdBRicsIC8vIEFmZ2hhbmlzdGFuXG4gICAgJ0JEJywgLy8gQmFuZ2xhZGVzaFxuICAgICdCVCcsIC8vIEJodXRhblxuICAgICdJTycsIC8vIEJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVxuICAgICdJTicsIC8vIEluZGlhXG4gICAgJ0lSJywgLy8gSXJhblxuICAgICdNVicsIC8vIE1hbGRpdmVzXG4gICAgJ05QJywgLy8gTmVwYWxcbiAgICAnUEsnLCAvLyBQYWtpc3RhblxuICAgICdMSycsIC8vIFNyaSBMYW5rYVxuICBdXG59XG5cbnJlZ2lvbnMuc291dGhlYXN0QXNpYSA9IHtcbiAgbmFtZTogJ1NvdXRoZWFzdCBBc2lhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU291dGhlYXN0X0FzaWFcbiAgICAnQk4nLCAvLyBCcnVuZWlcbiAgICAnS0gnLCAvLyBDYW1ib2RpYVxuICAgICdDWCcsIC8vIENocmlzdG1hcyBJc2xhbmRcbiAgICAnQ0MnLCAvLyBDb2NvcyAoS2VlbGluZykgSXNsYW5kc1xuICAgICdUTCcsIC8vIEVhc3QgVGltb3JcbiAgICAnSUQnLCAvLyBJbmRvbmVzaWFcbiAgICAnTEEnLCAvLyBMYW9zXG4gICAgJ01ZJywgLy8gTWFsYXlzaWFcbiAgICAnTU0nLCAvLyBNeWFubWFyIChCdXJtYSlcbiAgICAnUEgnLCAvLyBQaGlsaXBwaW5lc1xuICAgICdTRycsIC8vIFNpbmdhcG9yZVxuICAgICdUSCcsIC8vIFRoYWlsYW5kXG4gICAgJ1ZOJywgLy8gVmlldG5hbVxuICBdXG59XG5cbnJlZ2lvbnMuZWFzdEFzaWEgPSB7XG4gIG5hbWU6ICdFYXN0IEFzaWEnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FYXN0X0FzaWFcbiAgICAnQ04nLCAvLyBDaGluYVxuICAgICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdKUCcsIC8vIEphcGFuXG4gICAgJ0tQJywgLy8gTm9ydGggS29yZWFcbiAgICAnS1InLCAvLyBTb3V0aCBLb3JlYVxuICAgICdNTycsIC8vIE1hY2FvXG4gICAgJ01OJywgLy8gTW9uZ29saWFcbiAgICAnVFcnLCAvLyBUYWl3YW5cbiAgXVxufVxuXG5yZWdpb25zLndlc3Rlcm5Bc2lhID0ge1xuICBuYW1lOiAnV2VzdGVybiBBc2lhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VzdGVybl9Bc2lhXG4gICAgJ0FNJywgLy8gQXJtZW5pYVxuICAgICdBWicsIC8vIEF6ZXJiYWlqYW5cbiAgICAnQkgnLCAvLyBCYWhyYWluXG4gICAgJ0lRJywgLy8gSXJhcVxuICAgICdJTCcsIC8vIElzcmFlbFxuICAgICdKTycsIC8vIEpvcmRhblxuICAgICdLVycsIC8vIEt1d2FpdFxuICAgICdMQicsIC8vIExlYmFub25cbiAgICAnT00nLCAvLyBPbWFuXG4gICAgJ1BTJywgLy8gUGFsZXN0aW5pYW4gdGVycml0b3JpZXNcbiAgICAnUUEnLCAvLyBRYXRhclxuICAgICdTQScsIC8vIFNhdWRpIEFyYWJpYVxuICAgICdTWScsIC8vIFN5cmlhXG4gICAgJ1RSJywgLy8gVHVya2V5XG4gICAgJ0FFJywgLy8gVW5pdGVkIEFyYWIgRW1pcmF0ZXNcbiAgICAnWUUnLCAvLyBZZW1lblxuICBdXG59XG5cbnJlZ2lvbnMuY2VudHJhbEFmcmljYSA9IHtcbiAgbmFtZTogJ0NlbnRyYWwgQWZ0cmljYScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyYWxfQWZyaWNhXG4gICAgJ0FPJywgLy8gQW5nb2xhXG4gICAgJ0NNJywgLy8gQ2FtZXJvb25cbiAgICAnQ0YnLCAvLyBDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcbiAgICAnVEQnLCAvLyBDaGFkXG4gICAgJ0NHJywgLy8gUmVwdWJsaWMgb2YgdGhlIENvbmdvXG4gICAgJ0NEJywgLy8gRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cbiAgICAnR1EnLCAvLyBFcXVhdG9yaWFsIEd1aW5lYVxuICAgICdHQScsIC8vIEdhYm9uXG4gICAgJ1NUJywgLy8gU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXG4gIF1cbn07XG5cbnJlZ2lvbnMubm9ydGhBZnJpY2EgPSB7XG4gIG5hbWU6ICdOb3J0aCBBZnJpY2EnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob3J0aF9BZnJpY2FcbiAgICAnRFonLCAvLyBBbGdlcmlhXG4gICAgJ0VHJywgLy8gRWd5cHRcbiAgICAnTFknLCAvLyBMaWJ5YVxuICAgICdNQScsIC8vIE1vcm9jY29cbiAgICAnU0QnLCAvLyBTdWRhblxuICAgICdUTicsIC8vIFR1bmlzaWFcbiAgICAnRUgnLCAvLyBXZXN0ZXJuIFNhaGFyYVxuICBdXG59O1xuXG5yZWdpb25zLnNvdXRoZXJuQWZyaWNhID0ge1xuICBuYW1lOiAnU291dGhlcm4gQWZyaWNhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU291dGhlcm5fQWZyaWNhXG4gICAgJ0JXJywgLy8gQm90c3dhbmFcbiAgICAnTFMnLCAvLyBMZXNvdGhvXG4gICAgJ05BJywgLy8gTmFtaWJpYVxuICAgICdaQScsIC8vIFNvdXRoIEFmcmljYVxuICAgICdTWicsIC8vIFN3YXppbGFuZFxuICBdXG59O1xuXG5yZWdpb25zLmVhc3RBZnJpY2EgPSB7XG4gIG5hbWU6ICdFYXN0IEFmcmljYScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vhc3RfQWZyaWNhXG4gICAgJ0JJJywgLy8gQnVydW5kaVxuICAgICdLTScsIC8vIENvbW9yb3NcbiAgICAnREonLCAvLyBEamlib3V0aVxuICAgICdFUicsIC8vIEVyaXRyZWFcbiAgICAnRVQnLCAvLyBFdGhpb3BpYVxuICAgICdLRScsIC8vIEtlbnlhXG4gICAgJ01HJywgLy8gTWFkYWdhc2NhclxuICAgICdNVycsIC8vIE1hbGF3aVxuICAgICdNVScsIC8vIE1hdXJpdGl1c1xuICAgICdZVCcsIC8vIE1heW90dGUgKEZyYW5jZSlcbiAgICAnTVonLCAvLyBNb3phbWJpcXVlXG4gICAgJ1JFJywgLy8gUsOpdW5pb24gKEZyYW5jZSlcbiAgICAnUlcnLCAvLyBSd2FuZGFcbiAgICAnU0MnLCAvLyBTZXljaGVsbGVzXG4gICAgJ1NPJywgLy8gU29tYWxpYVxuICAgICdTUycsIC8vIFNvdXRoIFN1ZGFuXG4gICAgJ1RaJywgLy8gVGFuemFuaWFcbiAgICAnVUcnLCAvLyBVZ2FuZGFcbiAgICAnWk0nLCAvLyBaYW1iaWFcbiAgICAnWlcnLCAvLyBaaW1iYWJ3ZVxuICBdXG59O1xuXG5yZWdpb25zLndlc3RBZnJpY2EgPSB7XG4gIG5hbWU6ICdXZXN0IEFmcmljYScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlc3RfQWZyaWNhXG4gICAgJ0JKJywgLy8gQmVuaW5cbiAgICAnQkYnLCAvLyBCdXJraW5hIEZhc29cbiAgICAnQ1YnLCAvLyBDYWJvIFZlcmRlXG4gICAgJ0NJJywgLy8gQ8O0dGUgZCdJdm9pcmVcbiAgICAnR00nLCAvLyBHYW1iaWFcbiAgICAnR0gnLCAvLyBHaGFuYVxuICAgICdHTicsIC8vIEd1aW5lYVxuICAgICdHVycsIC8vIEd1aW5lYS1CaXNzYXVcbiAgICAnTFInLCAvLyBMaWJlcmlhXG4gICAgJ01MJywgLy8gTWFsaVxuICAgICdNUicsIC8vIE1hdXJpdGFuaWFcbiAgICAnTkUnLCAvLyBOaWdlclxuICAgICdORycsIC8vIE5pZ2VyaWFcbiAgICAnU0gnLCAvLyBTYWludCBIZWxlbmEsIEFzY2Vuc2lvbiBhbmQgVHJpc3RhbiBkYSBDdW5oYSAoVW5pdGVkIEtpbmdkb20pXG4gICAgJ1NOJywgLy8gU2VuZWdhbFxuICAgICdTTCcsIC8vIFNpZXJyYSBMZW9uZVxuICAgICdURycsIC8vIFRvZ29cbiAgXVxufTtcblxucmVnaW9ucy5jZW50cmFsQW1lcmljYSA9IHtcbiAgbmFtZTogJ0NlbnRyYWwgQW1lcmljYScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyYWxfQW1lcmljYVxuICAgICdCWicsIC8vIEJlbGl6ZVxuICAgICdDUicsIC8vIENvc3RhIFJpY2FcbiAgICAnU1YnLCAvLyBFbCBTYWx2YWRvclxuICAgICdHVCcsIC8vIEd1YXRlbWFsYVxuICAgICdITicsIC8vIEhvbmR1cmFzXG4gICAgJ05JJywgLy8gTmljYXJhZ3VhXG4gICAgJ1BBJywgLy8gUGFuYW1hXG4gIF1cbn1cblxucmVnaW9ucy5ub3J0aGVybkFtZXJpY2EgPSB7XG4gIG5hbWU6ICdOb3J0aGVybiBBbWVyaWNhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9ydGhlcm5fQW1lcmljYVxuICAgICdCTScsIC8vIEJlcm11ZGFcbiAgICAnQ0EnLCAvLyBDYW5hZGFcbiAgICAnR0wnLCAvLyBHcmVlbmxhbmRcbiAgICAnTVgnLCAvLyBNZXhpY29cbiAgICAnUE0nLCAvLyBTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXG4gICAgJ1VTJywgLy8gVW5pdGVkIFN0YXRlc1xuICBdXG59XG5cbnJlZ2lvbnMuY2FyaWJiZWFuID0ge1xuICBuYW1lOiAnQ2FyaWJiZWFuJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FyaWJiZWFuXG4gICAgJ0FJJywgLy8gQW5ndWlsbGFcbiAgICAnQUcnLCAvLyBBbnRpZ3VhIGFuZCBCYXJidWRhXG4gICAgJ0FXJywgLy8gQXJ1YmFcbiAgICAnQlMnLCAvLyBCYWhhbWFzXG4gICAgJ0JCJywgLy8gQmFyYmFkb3NcbiAgICAnQlEnLCAvLyBCb25haXJlLCBTaW50IEV1c3RhdGl1cyAmIFNhYmFcbiAgICAnVkcnLCAvLyBCcml0aXNoIFZpcmdpbiBJc2xhbmRzXG4gICAgJ0tZJywgLy8gQ2F5bWFuIElzbGFuZHNcbiAgICAnQ1UnLCAvLyBDdWJhXG4gICAgJ0NXJywgLy8gQ3VyYcOnYW9cbiAgICAnRE0nLCAvLyBEb21pbmljYVxuICAgICdETycsIC8vIERvbWluaWNhbiBSZXB1YmxpY1xuICAgICdHRCcsIC8vIEdyZW5hZGFcbiAgICAnR1AnLCAvLyBHdWFkZWxvdXBlXG4gICAgJ0hUJywgLy8gSGFpdGlcbiAgICAnSk0nLCAvLyBKYW1haWNhXG4gICAgJ01RJywgLy8gTWFydGluaXF1ZVxuICAgICdNUycsIC8vIE1vbnRzZXJyYXRcbiAgICAnUFInLCAvLyBQdWVydG8gUmljb1xuICAgICdCTCcsIC8vIFNhaW50IEJhcnRow6lsZW15XG4gICAgJ0tOJywgLy8gU3QuIEtpdHRzICYgTmV2aXNcbiAgICAnTEMnLCAvLyBTYWludCBMdWNpYVxuICAgICdNRicsIC8vIFNhaW50IE1hcnRpblxuICAgICdWQycsIC8vIFNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXG4gICAgJ1NYJywgLy8gU2ludCBNYWFydGVuXG4gICAgJ1RUJywgLy8gVHJpbmlkYWQgYW5kIFRvYmFnb1xuICAgICdUQycsIC8vIFR1cmtzICYgQ2FpY29zXG4gICAgJ1ZJJywgLy8gVW5pdGVkIFN0YXRlcyBWaXJnaW4gSXNsYW5kc1xuICBdXG59XG5cbnJlZ2lvbnMuc291dGhBbWVyaWNhID0ge1xuICBuYW1lOiAnU291dGggQW1lcmljYScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvdXRoX0FtZXJpY2FcbiAgICAnQVInLCAvLyBBcmdlbnRpbmFcbiAgICAnQk8nLCAvLyBCb2xpdmlhXG4gICAgJ0JSJywgLy8gQnJhemlsXG4gICAgJ0NMJywgLy8gQ2hpbGVcbiAgICAnQ08nLCAvLyBDb2xvbWJpYVxuICAgICdFQycsIC8vIEVjdWFkb3JcbiAgICAnRksnLCAvLyBGYWxrbGFuZCBJc2xhbmRzXG4gICAgJ0dGJywgLy8gRnJlbmNoIEd1aWFuYVxuICAgICdHWScsIC8vIEd1eWFuYVxuICAgICdQWScsIC8vIFBhcmFndWF5XG4gICAgJ1BFJywgLy8gUGVydVxuICAgICdTUicsIC8vIFN1cmluYW1lXG4gICAgJ1VZJywgLy8gVXJ1Z3VheVxuICAgICdWRScsIC8vIFZlbmV6dWVsYVxuICBdXG59XG5cbnJlZ2lvbnMuYW50YXJ0aWNhID0ge1xuICBuYW1lOiAnQW50YXJ0aWNhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW50YXJjdGljYVxuICAgICdBUScsIC8vIEFudGFyY3RpY2FcbiAgICAnQlYnLCAvLyBCb3V2ZXQgSXNsYW5kXG4gICAgJ1RGJywgLy8gRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXG4gICAgJ0hNJywgLy8gSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXG4gICAgJ0dTJywgLy8gU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcbiAgXVxufVxuXG5yZWdpb25zLm5vcnRoZXJuRXVyb3BlID0ge1xuICBuYW1lOiAnTm9ydGhlcm4gRXVyb3BlJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9ydGhlcm5fRXVyb3BlXG4gICAgJ0FYJywgLy8gw4VsYW5kXG4gICAgJ0RLJywgLy8gRGVubWFya1xuICAgICdFRScsIC8vIEVzdG9uaWFcbiAgICAnRk8nLCAvLyBGYXJvZSBJc2xhbmRzXG4gICAgJ0ZJJywgLy8gRmlubGFuZFxuICAgICdHRycsIC8vIEd1ZXJuc2V5XG4gICAgJ0lTJywgLy8gSWNlbGFuZFxuICAgICdJRScsIC8vIFJlcHVibGljIG9mIElyZWxhbmRcbiAgICAnSkUnLCAvLyBKZXJzZXkgKFVLKVxuICAgICdJTScsIC8vIElzbGUgb2YgTWFuXG4gICAgJ0xWJywgLy8gTGF0dmlhXG4gICAgJ0xUJywgLy8gTGl0aHVhbmlhXG4gICAgJ05PJywgLy8gTm9yd2F5XG4gICAgJ1NKJywgLy8gU3ZhbGJhcmQgYW5kIEphbiBNYXllblxuICAgICdTRScsIC8vIFN3ZWRlblxuICAgICdHQicsIC8vIFVuaXRlZCBLaW5nZG9tXG4gIF1cbn1cblxucmVnaW9ucy5zb3V0aGVybkV1cm9wZSA9IHtcbiAgbmFtZTogJ1NvdXRoZXJuIEV1cm9wZScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvdXRoZXJuX0V1cm9wZVxuICAgICdBTCcsIC8vIEFsYmFuaWFcbiAgICAnQUQnLCAvLyBBbmRvcnJhXG4gICAgJ0JBJywgLy8gQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxuICAgICdIUicsIC8vIENyb2F0aWFcbiAgICAnQ1knLCAvLyBDeXBydXNcbiAgICAnR0knLCAvLyBHaWJyYWx0YXJcbiAgICAnR1InLCAvLyBHcmVlY2VcbiAgICAnSVQnLCAvLyBJdGFseVxuICAgICdNSycsIC8vIFJlcHVibGljIG9mIE1hY2Vkb25pYVxuICAgICdWQScsIC8vIFZhdGljYW4gQ2l0eVxuICAgICdNVCcsIC8vIE1hbHRhXG4gICAgJ01FJywgLy8gTW9udGVuZWdyb1xuICAgICdQVCcsIC8vIFBvcnR1Z2FsXG4gICAgJ1NNJywgLy8gU2FuIE1hcmlub1xuICAgICdSUycsIC8vIFNlcmJpYVxuICAgICdTSScsIC8vIFNsb3ZlbmlhXG4gICAgJ0VTJywgLy8gU3BhaW5cbiAgXVxufVxuXG5yZWdpb25zLmVhc3Rlcm5FdXJvcGUgPSB7XG4gIG5hbWU6ICdFYXN0ZXJuIEV1cm9wZScsXG4gIGNvdW50cmllczogW1xuICAgIC8vIHNvdXJjZSBpcyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vhc3Rlcm5fRXVyb3BlXG4gICAgJ0JZJywgLy8gQmVsYXJ1c1xuICAgICdCRycsIC8vIEJ1bGdhcmlhXG4gICAgJ0NaJywgLy8gQ3plY2ggUmVwdWJsaWNcbiAgICAnR0UnLCAvLyBHZW9yZ2lhXG4gICAgJ0hVJywgLy8gSHVuZ2FyeVxuICAgICdNRCcsIC8vIE1vbGRvdmFcbiAgICAnUEwnLCAvLyBQb2xhbmRcbiAgICAnUk8nLCAvLyBSb21hbmlhXG4gICAgJ1JVJywgLy8gUnVzc2lhXG4gICAgJ1NLJywgLy8gU2xvdmFraWFcbiAgICAnVUEnLCAvLyBVa3JhaW5lXG4gIF1cbn1cblxucmVnaW9ucy53ZXN0ZXJuRXVyb3BlID0ge1xuICBuYW1lOiAnV2VzdGVybiBFdXJvcGUnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZXN0ZXJuX0V1cm9wZVxuICAgICdBVCcsIC8vIEF1c3RyaWFcbiAgICAnQkUnLCAvLyBCZWxnaXVtXG4gICAgJ0ZSJywgLy8gRnJhbmNlXG4gICAgJ0RFJywgLy8gR2VybWFueVxuICAgICdMSScsIC8vIExpZWNodGVuc3RlaW5cbiAgICAnTFUnLCAvLyBMdXhlbWJvdXJnXG4gICAgJ01DJywgLy8gTW9uYWNvXG4gICAgJ05MJywgLy8gTmV0aGVybGFuZHNcbiAgICAnQ0gnLCAvLyBTd2l0emVybGFuZFxuICBdLFxufTtcbiBcbnJlZ2lvbnMuYXVzdHJhbGlhID0ge1xuICBuYW1lOiAnQXVzdHJhbGlhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT2NlYW5pYVxuICAgICdBVScsIC8vIEF1c3RyYWxpYVxuICAgICdORicsIC8vIE5vcmZvbGsgSXNsYW5kXG4gICAgJ05aJywgLy8gTmV3IFplYWxhbmRcbiAgXVxufTtcblxucmVnaW9ucy5tZWxhbmVzaWEgPSB7XG4gIG5hbWU6ICdNZWxhbmVzaWEnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PY2VhbmlhXG4gICAgJ0ZKJywgLy8gRmlqaVxuICAgICdOQycsIC8vICBOZXcgQ2FsZWRvbmlhXG4gICAgJ1BHJywgLy8gUGFwdWEgTmV3IEd1aW5lYVxuICAgICdTQicsIC8vIFNvbG9tb24gSXNsYW5kc1xuICAgICdWVScsIC8vIFZhbnVhdHVcbiAgXVxufTsgICAgXG5cbnJlZ2lvbnMubWljcm9uZXNpYSA9IHtcbiAgbmFtZTogJ01pY3JvbmVzaWEnLFxuICBjb3VudHJpZXM6IFtcbiAgICAvLyBzb3VyY2UgaXMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PY2VhbmlhXG4gICAgJ0dVJywgLy8gR3VhbVxuICAgICdLSScsIC8vIEtpcmliYXRpXG4gICAgJ01IJywgLy8gTWFyc2hhbGwgSXNsYW5kc1xuICAgICdGTScsIC8vIE1pY3JvbmVzaWEsIEZlZC4gU3RzLlxuICAgICdOUicsIC8vIE5hdXJ1XG4gICAgJ01QJywgLy8gTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXG4gICAgJ1BXJywgLy8gUGFsYXVcbiAgICAnVU0nLCAvLyBVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcbiAgXVxufTsgICAgXG5cbnJlZ2lvbnMucG9seW5lc2lhID0ge1xuICBuYW1lOiAnUG9seW5lc2lhJyxcbiAgY291bnRyaWVzOiBbXG4gICAgLy8gc291cmNlIGlzIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT2NlYW5pYVxuICAgICdBUycsIC8vIEFtZXJpY2FuIFNhbW9hXG4gICAgJ0NLJywgLy8gQ29vayBJc2xhbmRzXG4gICAgJ1BGJywgLy8gRnJlbmNoIFBvbHluZXNpYVxuICAgICdOVScsIC8vIE5pdWVcbiAgICAnUE4nLCAvLyBQaXRjYWlybiBJc2xhbmRzXG4gICAgJ1dTJywgLy8gU2Ftb2FcbiAgICAnVEsnLCAvLyBUb2tlbGF1XG4gICAgJ1RPJywgLy8gVG9uZ2FcbiAgICAnVFYnLCAvLyBUdXZhbHVcbiAgICAnV0YnLCAvLyBXYWxsaXMgYW5kIEZ1dHVuYVxuICBdXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZ2lvbnM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBWUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBaUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQW9CQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQXVCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBZ0JBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBWUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUEyQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUF3QkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQW1DQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQXFCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQXVCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQXdCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQWtCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBZ0JBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBZUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBaUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/country-data/data/regions.js\n"); - -/***/ }), - -/***/ "../node_modules/country-data/index.js": -/*!*********************************************!*\ - !*** ../node_modules/country-data/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar _ = __webpack_require__(/*! underscore */ \"../node_modules/country-data/node_modules/underscore/underscore.js\");\n\nvar continents = __webpack_require__(/*! ./data/continents */ \"../node_modules/country-data/data/continents.js\");\n\nvar regions = __webpack_require__(/*! ./data/regions */ \"../node_modules/country-data/data/regions.js\");\n\nvar countriesAll = __webpack_require__(/*! ./data/countries.json */ \"../node_modules/country-data/data/countries.json\");\n\nvar currenciesAll = __webpack_require__(/*! ./data/currencies.json */ \"../node_modules/country-data/data/currencies.json\");\n\nvar languagesAll = __webpack_require__(/*! ./data/languages.json */ \"../node_modules/country-data/data/languages.json\");\n\nvar lookup = __webpack_require__(/*! ./lookup */ \"../node_modules/country-data/lookup.js\");\n\nvar getSymbol = __webpack_require__(/*! currency-symbol-map */ \"../node_modules/currency-symbol-map/currency-symbol-map.js\");\n\nexports.continents = continents;\nexports.regions = regions;\nexports.countries = {\n all: countriesAll\n};\n\n_.each(countriesAll, function (country) {\n // prefer assigned country codes over inactive ones\n var exportedAlpha2 = exports.countries[country.alpha2];\n\n if (!exportedAlpha2 || exportedAlpha2.status === 'deleted') {\n exports.countries[country.alpha2] = country;\n }\n\n var exportedAlpha3 = exports.countries[country.alpha3];\n\n if (!exportedAlpha3 || exportedAlpha3.status === 'deleted') {\n exports.countries[country.alpha3] = country;\n }\n});\n\nexports.currencies = {\n all: currenciesAll\n};\n\n_.each(currenciesAll, function (currency) {\n //If the symbol isn't available, default to the currency code\n var symbol = getSymbol(currency.code);\n\n if (symbol == '?') {\n symbol = currency.code;\n }\n\n currency.symbol = symbol;\n exports.currencies[currency.code] = currency;\n});\n\nexports.languages = {\n all: languagesAll\n}; // Note that for the languages there are several entries with the same alpha3 -\n// eg Dutch and Flemish. Not sure how to best deal with that - here whichever\n// comes last wins.\n\n_.each(languagesAll, function (language) {\n exports.languages[language.alpha2] = language;\n exports.languages[language.bibliographic] = language;\n exports.languages[language.alpha3] = language;\n});\n\nexports.lookup = lookup({\n countries: countriesAll,\n currencies: currenciesAll,\n languages: languagesAll\n});\nvar callingCountries = {\n all: []\n};\n\nvar callingCodesAll = _.reduce(countriesAll, function (codes, country) {\n if (country.countryCallingCodes && country.countryCallingCodes.length) {\n callingCountries.all.push(country);\n callingCountries[country.alpha2] = country;\n callingCountries[country.alpha3] = country;\n\n _.each(country.countryCallingCodes, function (code) {\n if (codes.indexOf(code) == -1) {\n codes.push(code);\n }\n });\n }\n\n return codes;\n}, []);\n\ndelete callingCountries['']; // remove empty alpha3s\n\nexports.callingCountries = callingCountries;\ncallingCodesAll.sort(function (a, b) {\n var parse = function parse(str) {\n return parseInt(str);\n };\n\n var splitA = _.map(a.split(' '), parse);\n\n var splitB = _.map(b.split(' '), parse);\n\n if (splitA[0] < splitB[0]) {\n return -1;\n } else if (splitA[0] > splitB[0]) {\n return 1;\n } else {\n // Same - check split[1]\n if (splitA[1] === undefined && splitB[1] !== undefined) {\n return -1;\n } else if (splitA[1] !== undefined && splitB[1] === undefined) {\n return 1;\n } else if (splitA[1] < splitB[1]) {\n return -1;\n } else if (splitA[1] > splitB[1]) {\n return 1;\n } else {\n return 0;\n }\n }\n});\nexports.callingCodes = {\n all: callingCodesAll\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY291bnRyeS1kYXRhL2luZGV4LmpzPzMwN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbnZhciBjb250aW5lbnRzID0gcmVxdWlyZSgnLi9kYXRhL2NvbnRpbmVudHMnKTtcbnZhciByZWdpb25zID0gcmVxdWlyZSgnLi9kYXRhL3JlZ2lvbnMnKTtcbnZhciBjb3VudHJpZXNBbGwgPSByZXF1aXJlKCcuL2RhdGEvY291bnRyaWVzLmpzb24nKTtcbnZhciBjdXJyZW5jaWVzQWxsID0gcmVxdWlyZSgnLi9kYXRhL2N1cnJlbmNpZXMuanNvbicpO1xudmFyIGxhbmd1YWdlc0FsbCA9IHJlcXVpcmUoJy4vZGF0YS9sYW5ndWFnZXMuanNvbicpO1xudmFyIGxvb2t1cCA9IHJlcXVpcmUoJy4vbG9va3VwJyk7XG5cbnZhciBnZXRTeW1ib2wgPSByZXF1aXJlKCdjdXJyZW5jeS1zeW1ib2wtbWFwJylcblxuZXhwb3J0cy5jb250aW5lbnRzID0gY29udGluZW50cztcbmV4cG9ydHMucmVnaW9ucyA9IHJlZ2lvbnM7XG5cbmV4cG9ydHMuY291bnRyaWVzID0ge1xuICBhbGw6IGNvdW50cmllc0FsbCxcbn07XG5cbl8uZWFjaChjb3VudHJpZXNBbGwsIGZ1bmN0aW9uIChjb3VudHJ5KSB7XG4gIC8vIHByZWZlciBhc3NpZ25lZCBjb3VudHJ5IGNvZGVzIG92ZXIgaW5hY3RpdmUgb25lc1xuICB2YXIgZXhwb3J0ZWRBbHBoYTIgPSBleHBvcnRzLmNvdW50cmllc1tjb3VudHJ5LmFscGhhMl07XG4gIGlmICghZXhwb3J0ZWRBbHBoYTIgfHwgZXhwb3J0ZWRBbHBoYTIuc3RhdHVzID09PSAnZGVsZXRlZCcpIHtcbiAgICBleHBvcnRzLmNvdW50cmllc1tjb3VudHJ5LmFscGhhMl0gPSBjb3VudHJ5O1xuICB9XG5cbiAgdmFyIGV4cG9ydGVkQWxwaGEzID0gZXhwb3J0cy5jb3VudHJpZXNbY291bnRyeS5hbHBoYTNdO1xuICBpZiAoIWV4cG9ydGVkQWxwaGEzIHx8IGV4cG9ydGVkQWxwaGEzLnN0YXR1cyA9PT0gJ2RlbGV0ZWQnKSB7XG4gICAgZXhwb3J0cy5jb3VudHJpZXNbY291bnRyeS5hbHBoYTNdID0gY291bnRyeTtcbiAgfVxufSk7XG5cbmV4cG9ydHMuY3VycmVuY2llcyA9IHtcbiAgYWxsOiBjdXJyZW5jaWVzQWxsLFxufTtcblxuXy5lYWNoKGN1cnJlbmNpZXNBbGwsIGZ1bmN0aW9uIChjdXJyZW5jeSkge1xuICAvL0lmIHRoZSBzeW1ib2wgaXNuJ3QgYXZhaWxhYmxlLCBkZWZhdWx0IHRvIHRoZSBjdXJyZW5jeSBjb2RlXG4gIHZhciBzeW1ib2wgPSBnZXRTeW1ib2woY3VycmVuY3kuY29kZSk7XG4gIGlmIChzeW1ib2wgPT0gJz8nKSB7XG4gICAgc3ltYm9sID0gY3VycmVuY3kuY29kZTtcbiAgfVxuXG4gIGN1cnJlbmN5LnN5bWJvbCA9IHN5bWJvbDtcbiAgZXhwb3J0cy5jdXJyZW5jaWVzW2N1cnJlbmN5LmNvZGVdID0gY3VycmVuY3k7XG59KTtcblxuZXhwb3J0cy5sYW5ndWFnZXMgPSB7XG4gIGFsbDogbGFuZ3VhZ2VzQWxsLFxufTtcblxuLy8gTm90ZSB0aGF0IGZvciB0aGUgbGFuZ3VhZ2VzIHRoZXJlIGFyZSBzZXZlcmFsIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBhbHBoYTMgLVxuLy8gZWcgRHV0Y2ggYW5kIEZsZW1pc2guIE5vdCBzdXJlIGhvdyB0byBiZXN0IGRlYWwgd2l0aCB0aGF0IC0gaGVyZSB3aGljaGV2ZXJcbi8vIGNvbWVzIGxhc3Qgd2lucy5cbl8uZWFjaChsYW5ndWFnZXNBbGwsIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBleHBvcnRzLmxhbmd1YWdlc1tsYW5ndWFnZS5hbHBoYTJdID0gbGFuZ3VhZ2U7XG4gIGV4cG9ydHMubGFuZ3VhZ2VzW2xhbmd1YWdlLmJpYmxpb2dyYXBoaWNdID0gbGFuZ3VhZ2U7XG4gIGV4cG9ydHMubGFuZ3VhZ2VzW2xhbmd1YWdlLmFscGhhM10gPSBsYW5ndWFnZTtcbn0pO1xuXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cCh7XG4gICAgY291bnRyaWVzOiBjb3VudHJpZXNBbGwsXG4gICAgY3VycmVuY2llczogY3VycmVuY2llc0FsbCxcbiAgICBsYW5ndWFnZXM6IGxhbmd1YWdlc0FsbFxufSk7XG5cbnZhciBjYWxsaW5nQ291bnRyaWVzID0ge2FsbDogW119O1xuXG52YXIgY2FsbGluZ0NvZGVzQWxsID0gXy5yZWR1Y2UoY291bnRyaWVzQWxsLCBmdW5jdGlvbiAoY29kZXMsIGNvdW50cnkpIHtcbiAgaWYgKGNvdW50cnkuY291bnRyeUNhbGxpbmdDb2RlcyAmJiBjb3VudHJ5LmNvdW50cnlDYWxsaW5nQ29kZXMubGVuZ3RoKSB7XG4gICAgY2FsbGluZ0NvdW50cmllcy5hbGwucHVzaChjb3VudHJ5KTtcblxuICAgIGNhbGxpbmdDb3VudHJpZXNbY291bnRyeS5hbHBoYTJdID0gY291bnRyeTtcbiAgICBjYWxsaW5nQ291bnRyaWVzW2NvdW50cnkuYWxwaGEzXSA9IGNvdW50cnk7XG5cbiAgICBfLmVhY2goY291bnRyeS5jb3VudHJ5Q2FsbGluZ0NvZGVzLCBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgaWYgKGNvZGVzLmluZGV4T2YoY29kZSkgPT0gLTEpIHtcbiAgICAgICAgY29kZXMucHVzaChjb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29kZXM7XG59LCBbXSk7XG5cbmRlbGV0ZSBjYWxsaW5nQ291bnRyaWVzWycnXTsgLy8gcmVtb3ZlIGVtcHR5IGFscGhhM3NcbmV4cG9ydHMuY2FsbGluZ0NvdW50cmllcyA9IGNhbGxpbmdDb3VudHJpZXM7XG5cbmNhbGxpbmdDb2Rlc0FsbC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHBhcnNlSW50KHN0cikgfTtcbiAgdmFyIHNwbGl0QSA9IF8ubWFwKGEuc3BsaXQoJyAnKSwgcGFyc2UpO1xuICB2YXIgc3BsaXRCID0gXy5tYXAoYi5zcGxpdCgnICcpLCBwYXJzZSk7XG5cbiAgaWYgKHNwbGl0QVswXSA8IHNwbGl0QlswXSkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIGlmIChzcGxpdEFbMF0gPiBzcGxpdEJbMF0pIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTYW1lIC0gY2hlY2sgc3BsaXRbMV1cbiAgICBpZiAoc3BsaXRBWzFdID09PSB1bmRlZmluZWQgJiYgc3BsaXRCWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2UgaWYgKHNwbGl0QVsxXSAhPT0gdW5kZWZpbmVkICYmIHNwbGl0QlsxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHNwbGl0QVsxXSA8IHNwbGl0QlsxXSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoc3BsaXRBWzFdID4gc3BsaXRCWzFdKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG59KTtcblxuZXhwb3J0cy5jYWxsaW5nQ29kZXMgPSB7XG4gIGFsbDogY2FsbGluZ0NvZGVzQWxsXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBdEJBO0FBeUJBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/country-data/index.js\n"); - -/***/ }), - -/***/ "../node_modules/country-data/lookup.js": -/*!**********************************************!*\ - !*** ../node_modules/country-data/lookup.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _ = __webpack_require__(/*! underscore */ \"../node_modules/country-data/node_modules/underscore/underscore.js\");\n\nmodule.exports = init;\n\nfunction init(o) {\n return {\n countries: search.bind(null, o.countries),\n currencies: search.bind(null, o.currencies),\n languages: search.bind(null, o.languages)\n };\n}\n\nfunction search(data, query) {\n var q = _.pairs(query);\n\n return data.filter(function (d) {\n return q.filter(function (v) {\n var prop = d[v[0]];\n if (_.isArray(prop)) return prop.indexOf(v[1]) >= 0;\n return prop == v[1];\n }).length == q.length;\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9sb29rdXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9sb29rdXAuanM/MmVkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbml0O1xuXG5mdW5jdGlvbiBpbml0KG8pIHtcbiAgcmV0dXJuIHtcbiAgICBjb3VudHJpZXM6IHNlYXJjaC5iaW5kKG51bGwsIG8uY291bnRyaWVzKSxcbiAgICBjdXJyZW5jaWVzOiBzZWFyY2guYmluZChudWxsLCBvLmN1cnJlbmNpZXMpLFxuICAgIGxhbmd1YWdlczogc2VhcmNoLmJpbmQobnVsbCwgby5sYW5ndWFnZXMpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNlYXJjaChkYXRhLCBxdWVyeSkge1xuICB2YXIgcSA9IF8ucGFpcnMocXVlcnkpO1xuXG4gIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIHEuZmlsdGVyKGZ1bmN0aW9uKHYpIHtcbiAgICAgIHZhciBwcm9wID0gZFt2WzBdXTtcblxuICAgICAgaWYoXy5pc0FycmF5KHByb3ApKSByZXR1cm4gcHJvcC5pbmRleE9mKHZbMV0pID49IDA7XG5cbiAgICAgIHJldHVybiBwcm9wID09IHZbMV07XG4gICAgfSkubGVuZ3RoID09IHEubGVuZ3RoO1xuICB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFMQTtBQURBO0FBU0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/country-data/lookup.js\n"); - -/***/ }), - -/***/ "../node_modules/country-data/node_modules/underscore/underscore.js": -/*!**************************************************************************!*\ - !*** ../node_modules/country-data/node_modules/underscore/underscore.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // Underscore.js 1.9.2\n// https://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n\n(function () {\n // Baseline setup\n // --------------\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self.self === self && self || (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global.global === global && global || this || {}; // Save the previous value of the `_` variable.\n\n var previousUnderscore = root._; // Save bytes in the minified (but not gzipped) version:\n\n var ArrayProto = Array.prototype,\n ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; // Create quick reference variables for speed access to core prototypes.\n\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty; // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create; // Naked function reference for surrogate-prototype-swapping.\n\n var Ctor = function Ctor() {}; // Create a safe reference to the Underscore object for use below.\n\n\n var _ = function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n }; // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n\n\n if ( true && !exports.nodeType) {\n if ( true && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n\n exports._ = _;\n } else {\n root._ = _;\n } // Current version.\n\n\n _.VERSION = '1.9.2'; // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n\n var optimizeCb = function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n\n switch (argCount == null ? 3 : argCount) {\n case 1:\n return function (value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n\n case 3:\n return function (value, index, collection) {\n return func.call(context, value, index, collection);\n };\n\n case 4:\n return function (accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n\n return function () {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee; // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n\n var cb = function cb(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n }; // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n\n\n _.iteratee = builtinIteratee = function builtinIteratee(value, context) {\n return cb(value, context, Infinity);\n }; // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n\n\n var restArguments = function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function () {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n\n switch (startIndex) {\n case 0:\n return func.call(this, rest);\n\n case 1:\n return func.call(this, arguments[0], rest);\n\n case 2:\n return func.call(this, arguments[0], arguments[1], rest);\n }\n\n var args = Array(startIndex + 1);\n\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }; // An internal function for creating a new object that inherits from another.\n\n\n var baseCreate = function baseCreate(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor();\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function shallowProperty(key) {\n return function (obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function has(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n };\n\n var deepGet = function deepGet(obj, path) {\n var length = path.length;\n\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n\n return length ? obj : void 0;\n }; // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n\n\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n\n var isArrayLike = function isArrayLike(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n }; // Collection Functions\n // --------------------\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n\n\n _.each = _.forEach = function (obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n\n return obj;\n }; // Return the results of applying the iteratee to each element.\n\n\n _.map = _.collect = function (obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n\n return results;\n }; // Create a reducing function iterating left or right.\n\n\n var createReduce = function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function reducer(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n\n return memo;\n };\n\n return function (obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }; // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n\n\n _.reduce = _.foldl = _.inject = createReduce(1); // The right-associative version of reduce, also known as `foldr`.\n\n _.reduceRight = _.foldr = createReduce(-1); // Return the first value which passes a truth test. Aliased as `detect`.\n\n _.find = _.detect = function (obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }; // Return all the elements that pass a truth test.\n // Aliased as `select`.\n\n\n _.filter = _.select = function (obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n\n _.each(obj, function (value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n\n return results;\n }; // Return all the elements for which a truth test fails.\n\n\n _.reject = function (obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n }; // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n\n\n _.every = _.all = function (obj, predicate, context) {\n predicate = cb(predicate, context);\n\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n\n return true;\n }; // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n\n\n _.some = _.any = function (obj, predicate, context) {\n predicate = cb(predicate, context);\n\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n\n return false;\n }; // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n\n\n _.contains = _.includes = _.include = function (obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n }; // Invoke a method (with arguments) on every item in a collection.\n\n\n _.invoke = restArguments(function (obj, path, args) {\n var contextPath, func;\n\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n\n return _.map(obj, function (context) {\n var method = func;\n\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n\n if (context == null) return void 0;\n method = context[path];\n }\n\n return method == null ? method : method.apply(context, args);\n });\n }); // Convenience version of a common use case of `map`: fetching a property.\n\n _.pluck = function (obj, key) {\n return _.map(obj, _.property(key));\n }; // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n\n\n _.where = function (obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n }; // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n\n\n _.findWhere = function (obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n }; // Return the maximum element (or element-based computation).\n\n\n _.max = function (obj, iteratee, context) {\n var result = -Infinity,\n lastComputed = -Infinity,\n value,\n computed;\n\n if (iteratee == null || typeof iteratee == 'number' && _typeof(obj[0]) != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n\n _.each(obj, function (v, index, list) {\n computed = iteratee(v, index, list);\n\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n\n return result;\n }; // Return the minimum element (or element-based computation).\n\n\n _.min = function (obj, iteratee, context) {\n var result = Infinity,\n lastComputed = Infinity,\n value,\n computed;\n\n if (iteratee == null || typeof iteratee == 'number' && _typeof(obj[0]) != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n\n _.each(obj, function (v, index, list) {\n computed = iteratee(v, index, list);\n\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n\n return result;\n }; // Shuffle a collection.\n\n\n _.shuffle = function (obj) {\n return _.sample(obj, Infinity);\n }; // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n\n\n _.sample = function (obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n\n return sample.slice(0, n);\n }; // Sort the object's values by a criterion produced by an iteratee.\n\n\n _.sortBy = function (obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function (value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function (left, right) {\n var a = left.criteria;\n var b = right.criteria;\n\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n\n return left.index - right.index;\n }), 'value');\n }; // An internal function used for aggregate \"group by\" operations.\n\n\n var group = function group(behavior, partition) {\n return function (obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n\n _.each(obj, function (value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n\n return result;\n };\n }; // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n\n\n _.groupBy = group(function (result, value, key) {\n if (has(result, key)) result[key].push(value);else result[key] = [value];\n }); // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n\n _.indexBy = group(function (result, value, key) {\n result[key] = value;\n }); // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n\n _.countBy = group(function (result, value, key) {\n if (has(result, key)) result[key]++;else result[key] = 1;\n });\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g; // Safely create a real, live array from anything iterable.\n\n _.toArray = function (obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n }; // Return the number of elements in an object.\n\n\n _.size = function (obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n }; // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n\n\n _.partition = group(function (result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true); // Array Functions\n // ---------------\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n\n _.first = _.head = _.take = function (array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n }; // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n\n\n _.initial = function (array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }; // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n\n\n _.last = function (array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n }; // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n\n\n _.rest = _.tail = _.drop = function (array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }; // Trim out all falsy values from an array.\n\n\n _.compact = function (array) {\n return _.filter(array, Boolean);\n }; // Internal implementation of a recursive `flatten` function.\n\n\n var flatten = function flatten(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0,\n len = value.length;\n\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n\n return output;\n }; // Flatten out an array, either recursively (by default), or just one level.\n\n\n _.flatten = function (array, shallow) {\n return flatten(array, shallow, false);\n }; // Return a version of the array that does not contain the specified value(s).\n\n\n _.without = restArguments(function (array, otherArrays) {\n return _.difference(array, otherArrays);\n }); // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n\n _.uniq = _.unique = function (array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n\n return result;\n }; // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n\n\n _.union = restArguments(function (arrays) {\n return _.uniq(flatten(arrays, true, true));\n }); // Produce an array that contains every item shared between all the\n // passed-in arrays.\n\n _.intersection = function (array) {\n var result = [];\n var argsLength = arguments.length;\n\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n\n if (j === argsLength) result.push(item);\n }\n\n return result;\n }; // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n\n\n _.difference = restArguments(function (array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function (value) {\n return !_.contains(rest, value);\n });\n }); // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n\n _.unzip = function (array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n\n return result;\n }; // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n\n\n _.zip = restArguments(_.unzip); // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n\n _.object = function (list, values) {\n var result = {};\n\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n\n return result;\n }; // Generator function to create the findIndex and findLastIndex functions.\n\n\n var createPredicateIndexFinder = function createPredicateIndexFinder(dir) {\n return function (array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n\n return -1;\n };\n }; // Returns the first index on an array-like that passes a predicate test.\n\n\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1); // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n\n _.sortedIndex = function (array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0,\n high = getLength(array);\n\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1;else high = mid;\n }\n\n return low;\n }; // Generator function to create the indexOf and lastIndexOf functions.\n\n\n var createIndexFinder = function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function (array, item, idx) {\n var i = 0,\n length = getLength(array);\n\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n\n return -1;\n };\n }; // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n\n\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n\n _.range = function (start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }; // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n\n\n _.chunk = function (array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0,\n length = array.length;\n\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n\n return result;\n }; // Function (ahem) Functions\n // ------------------\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n\n\n var executeBound = function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n }; // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n\n\n _.bind = restArguments(function (func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function (callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n }); // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n\n _.partial = restArguments(function (func, boundArgs) {\n var placeholder = _.partial.placeholder;\n\n var bound = function bound() {\n var position = 0,\n length = boundArgs.length;\n var args = Array(length);\n\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n\n while (position < arguments.length) {\n args.push(arguments[position++]);\n }\n\n return executeBound(func, bound, this, this, args);\n };\n\n return bound;\n });\n _.partial.placeholder = _; // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n\n _.bindAll = restArguments(function (obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n }); // Memoize an expensive function by storing its results.\n\n _.memoize = function (func, hasher) {\n var memoize = function memoize(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n\n memoize.cache = {};\n return memoize;\n }; // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n\n\n _.delay = restArguments(function (func, wait, args) {\n return setTimeout(function () {\n return func.apply(null, args);\n }, wait);\n }); // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n\n _.defer = _.partial(_.delay, _, 1); // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n\n _.throttle = function (func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var now = _.now();\n\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }; // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n\n\n _.debounce = function (func, wait, immediate) {\n var timeout, result;\n\n var later = function later(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function (args) {\n if (timeout) clearTimeout(timeout);\n\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n }; // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n\n\n _.wrap = function (func, wrapper) {\n return _.partial(wrapper, func);\n }; // Returns a negated version of the passed-in predicate.\n\n\n _.negate = function (predicate) {\n return function () {\n return !predicate.apply(this, arguments);\n };\n }; // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n\n\n _.compose = function () {\n var args = arguments;\n var start = args.length - 1;\n return function () {\n var i = start;\n var result = args[start].apply(this, arguments);\n\n while (i--) {\n result = args[i].call(this, result);\n }\n\n return result;\n };\n }; // Returns a function that will only be executed on and after the Nth call.\n\n\n _.after = function (times, func) {\n return function () {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }; // Returns a function that will only be executed up to (but not including) the Nth call.\n\n\n _.before = function (times, func) {\n var memo;\n return function () {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n\n if (times <= 1) func = null;\n return memo;\n };\n }; // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n\n\n _.once = _.partial(_.before, 2);\n _.restArguments = restArguments; // Object Functions\n // ----------------\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n\n var hasEnumBug = !{\n toString: null\n }.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; // Constructor is a special case.\n\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }; // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n\n\n _.keys = function (obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n\n for (var key in obj) {\n if (has(obj, key)) keys.push(key);\n } // Ahem, IE < 9.\n\n\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }; // Retrieve all the property names of an object.\n\n\n _.allKeys = function (obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n } // Ahem, IE < 9.\n\n\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }; // Retrieve the values of an object's properties.\n\n\n _.values = function (obj) {\n var keys = _.keys(obj);\n\n var length = keys.length;\n var values = Array(length);\n\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n\n return values;\n }; // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n\n\n _.mapObject = function (obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n\n return results;\n }; // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n\n\n _.pairs = function (obj) {\n var keys = _.keys(obj);\n\n var length = keys.length;\n var pairs = Array(length);\n\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n\n return pairs;\n }; // Invert the keys and values of an object. The values must be serializable.\n\n\n _.invert = function (obj) {\n var result = {};\n\n var keys = _.keys(obj);\n\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n\n return result;\n }; // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n\n\n _.functions = _.methods = function (obj) {\n var names = [];\n\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n\n return names.sort();\n }; // An internal function for creating assigner functions.\n\n\n var createAssigner = function createAssigner(keysFunc, defaults) {\n return function (obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n\n return obj;\n };\n }; // Extend a given object with all the properties in passed-in object(s).\n\n\n _.extend = createAssigner(_.allKeys); // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n\n _.extendOwn = _.assign = createAssigner(_.keys); // Returns the first key on an object that passes a predicate test.\n\n _.findKey = function (obj, predicate, context) {\n predicate = cb(predicate, context);\n\n var keys = _.keys(obj),\n key;\n\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }; // Internal pick helper function to determine if `obj` has key `key`.\n\n\n var keyInObj = function keyInObj(value, key, obj) {\n return key in obj;\n }; // Return a copy of the object only containing the whitelisted properties.\n\n\n _.pick = restArguments(function (obj, keys) {\n var result = {},\n iteratee = keys[0];\n if (obj == null) return result;\n\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n\n return result;\n }); // Return a copy of the object without the blacklisted properties.\n\n _.omit = restArguments(function (obj, keys) {\n var iteratee = keys[0],\n context;\n\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n\n iteratee = function iteratee(value, key) {\n return !_.contains(keys, key);\n };\n }\n\n return _.pick(obj, iteratee, context);\n }); // Fill in a given object with default properties.\n\n _.defaults = createAssigner(_.allKeys, true); // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n\n _.create = function (prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n }; // Create a (shallow-cloned) duplicate of an object.\n\n\n _.clone = function (obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n }; // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n\n\n _.tap = function (obj, interceptor) {\n interceptor(obj);\n return obj;\n }; // Returns whether an object has a given set of `key:value` pairs.\n\n\n _.isMatch = function (object, attrs) {\n var keys = _.keys(attrs),\n length = keys.length;\n\n if (object == null) return !length;\n var obj = Object(object);\n\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n\n return true;\n }; // Internal recursive comparison function for `isEqual`.\n\n\n var eq, deepEq;\n\n eq = function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b; // `null` or `undefined` only equal to itself (strict comparison).\n\n if (a == null || b == null) return false; // `NaN`s are equivalent, but non-reflexive.\n\n if (a !== a) return b !== b; // Exhaust primitive checks\n\n var type = _typeof(a);\n\n if (type !== 'function' && type !== 'object' && _typeof(b) != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }; // Internal recursive comparison function for `isEqual`.\n\n\n deepEq = function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names.\n\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]': // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b; // An `egal` comparison is performed for other numeric values.\n\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n\n if (!areArrays) {\n if (_typeof(a) != 'object' || _typeof(b) != 'object') return false; // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n\n var aCtor = a.constructor,\n bCtor = b.constructor;\n\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && _.isFunction(bCtor) && bCtor instanceof bCtor) && 'constructor' in a && 'constructor' in b) {\n return false;\n }\n } // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n\n\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n } // Add the first object to the stack of traversed objects.\n\n\n aStack.push(a);\n bStack.push(b); // Recursively compare objects and arrays.\n\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false; // Deep compare the contents, ignoring non-numeric properties.\n\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a),\n key;\n\n length = keys.length; // Ensure that both objects contain the same number of properties before comparing deep equality.\n\n if (_.keys(b).length !== length) return false;\n\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n } // Remove the first object from the stack of traversed objects.\n\n\n aStack.pop();\n bStack.pop();\n return true;\n }; // Perform a deep comparison to check if two objects are equal.\n\n\n _.isEqual = function (a, b) {\n return eq(a, b);\n }; // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n\n\n _.isEmpty = function (obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n }; // Is a given value a DOM element?\n\n\n _.isElement = function (obj) {\n return !!(obj && obj.nodeType === 1);\n }; // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n\n\n _.isArray = nativeIsArray || function (obj) {\n return toString.call(obj) === '[object Array]';\n }; // Is a given variable an object?\n\n\n _.isObject = function (obj) {\n var type = _typeof(obj);\n\n return type === 'function' || type === 'object' && !!obj;\n }; // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n\n\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function (name) {\n _['is' + name] = function (obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n }); // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n\n\n if (!_.isArguments(arguments)) {\n _.isArguments = function (obj) {\n return has(obj, 'callee');\n };\n } // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n\n\n var nodelist = root.document && root.document.childNodes;\n\n if ( true && (typeof Int8Array === \"undefined\" ? \"undefined\" : _typeof(Int8Array)) != 'object' && typeof nodelist != 'function') {\n _.isFunction = function (obj) {\n return typeof obj == 'function' || false;\n };\n } // Is a given object a finite number?\n\n\n _.isFinite = function (obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n }; // Is the given value `NaN`?\n\n\n _.isNaN = function (obj) {\n return _.isNumber(obj) && isNaN(obj);\n }; // Is a given value a boolean?\n\n\n _.isBoolean = function (obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }; // Is a given value equal to null?\n\n\n _.isNull = function (obj) {\n return obj === null;\n }; // Is a given variable undefined?\n\n\n _.isUndefined = function (obj) {\n return obj === void 0;\n }; // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n\n\n _.has = function (obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n\n var length = path.length;\n\n for (var i = 0; i < length; i++) {\n var key = path[i];\n\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n\n obj = obj[key];\n }\n\n return !!length;\n }; // Utility Functions\n // -----------------\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n\n\n _.noConflict = function () {\n root._ = previousUnderscore;\n return this;\n }; // Keep the identity function around for default iteratees.\n\n\n _.identity = function (value) {\n return value;\n }; // Predicate-generating functions. Often useful outside of Underscore.\n\n\n _.constant = function (value) {\n return function () {\n return value;\n };\n };\n\n _.noop = function () {}; // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n\n\n _.property = function (path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n\n return function (obj) {\n return deepGet(obj, path);\n };\n }; // Generates a function for a given object that returns a given property.\n\n\n _.propertyOf = function (obj) {\n if (obj == null) {\n return function () {};\n }\n\n return function (path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n }; // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n\n\n _.matcher = _.matches = function (attrs) {\n attrs = _.extendOwn({}, attrs);\n return function (obj) {\n return _.isMatch(obj, attrs);\n };\n }; // Run a function **n** times.\n\n\n _.times = function (n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n\n for (var i = 0; i < n; i++) {\n accum[i] = iteratee(i);\n }\n\n return accum;\n }; // Return a random integer between min and max (inclusive).\n\n\n _.random = function (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n\n return min + Math.floor(Math.random() * (max - min + 1));\n }; // A (possibly faster) way to get the current timestamp as an integer.\n\n\n _.now = Date.now || function () {\n return new Date().getTime();\n }; // List of HTML entities for escaping.\n\n\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n var unescapeMap = _.invert(escapeMap); // Functions for escaping and unescaping strings to/from HTML interpolation.\n\n\n var createEscaper = function createEscaper(map) {\n var escaper = function escaper(match) {\n return map[match];\n }; // Regexes for identifying a key that needs to be escaped.\n\n\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function (string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap); // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n\n _.result = function (obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n\n return obj;\n }; // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n\n\n var idCounter = 0;\n\n _.uniqueId = function (prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }; // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n\n\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n }; // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n\n var noMatch = /(.)^/; // Certain characters need to be escaped so that they can be put into a\n // string literal.\n\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n \"\\u2028\": 'u2028',\n \"\\u2029\": 'u2029'\n };\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function escapeChar(match) {\n return '\\\\' + escapes[match];\n }; // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n\n\n _.template = function (text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation.\n\n var matcher = RegExp([(settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source].join('|') + '|$', 'g'); // Compile the template source, escaping string literals appropriately.\n\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function (match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n } // Adobe VMs need the match returned to produce the correct offset.\n\n\n return match;\n });\n source += \"';\\n\"; // If a variable is not specified, place data values in local scope.\n\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n source = \"var __t,__p='',__j=Array.prototype.join,\" + \"print=function(){__p+=__j.call(arguments,'');};\\n\" + source + 'return __p;\\n';\n var render;\n\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function template(data) {\n return render.call(this, data, _);\n }; // Provide the compiled source as a convenience for precompilation.\n\n\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n return template;\n }; // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n\n\n _.chain = function (obj) {\n var instance = _(obj);\n\n instance._chain = true;\n return instance;\n }; // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n // Helper function to continue chaining intermediate results.\n\n\n var chainResult = function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n }; // Add your own custom functions to the Underscore object.\n\n\n _.mixin = function (obj) {\n _.each(_.functions(obj), function (name) {\n var func = _[name] = obj[name];\n\n _.prototype[name] = function () {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n\n return _;\n }; // Add all of the Underscore functions to the wrapper object.\n\n\n _.mixin(_); // Add all mutator Array functions to the wrapper.\n\n\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function (name) {\n var method = ArrayProto[name];\n\n _.prototype[name] = function () {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n }); // Add all accessor Array functions to the wrapper.\n\n\n _.each(['concat', 'join', 'slice'], function (name) {\n var method = ArrayProto[name];\n\n _.prototype[name] = function () {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n }); // Extracts the result from a wrapped and chained object.\n\n\n _.prototype.value = function () {\n return this._wrapped;\n }; // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n\n\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function () {\n return String(this._wrapped);\n }; // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n\n\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return _;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n})();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2NvdW50cnktZGF0YS9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3VudHJ5LWRhdGEvbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS5qcz8zNjRiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOS4yXG4vLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxOCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gIC8vIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuXG4gIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYgfHxcbiAgICAgICAgICAgIHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcyB8fFxuICAgICAgICAgICAge307XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgU3ltYm9sUHJvdG8gPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbC5wcm90b3R5cGUgOiBudWxsO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXIgcHVzaCA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSxcbiAgICAgIHRvU3RyaW5nID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyIG5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5LFxuICAgICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLFxuICAgICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlaXIgb2xkIG1vZHVsZSBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgLy8gKGBub2RlVHlwZWAgaXMgY2hlY2tlZCB0byBlbnN1cmUgdGhhdCBgbW9kdWxlYFxuICAvLyBhbmQgYGV4cG9ydHNgIGFyZSBub3QgSFRNTCBlbGVtZW50cy4pXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJyAmJiAhZXhwb3J0cy5ub2RlVHlwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOS4yJztcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgLy8gVGhlIDItYXJndW1lbnQgY2FzZSBpcyBvbWl0dGVkIGJlY2F1c2Ugd2XigJlyZSBub3QgdXNpbmcgaXQuXG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgYnVpbHRpbkl0ZXJhdGVlO1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbiAgLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgaWRlbnRpdHlgLFxuICAvLyBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKF8uaXRlcmF0ZWUgIT09IGJ1aWx0aW5JdGVyYXRlZSkgcmV0dXJuIF8uaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkgJiYgIV8uaXNBcnJheSh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcblxuICAvLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4gIC8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBhcmdDb3VudCBhcmd1bWVudC5cbiAgXy5pdGVyYXRlZSA9IGJ1aWx0aW5JdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gU29tZSBmdW5jdGlvbnMgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIG9yIGEgZmV3IGV4cGVjdGVkXG4gIC8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlXG4gIC8vIG9uLiBUaGlzIGhlbHBlciBhY2N1bXVsYXRlcyBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBwYXN0IHRoZSBmdW5jdGlvbuKAmXNcbiAgLy8gYXJndW1lbnQgbGVuZ3RoIChvciBhbiBleHBsaWNpdCBgc3RhcnRJbmRleGApLCBpbnRvIGFuIGFycmF5IHRoYXQgYmVjb21lc1xuICAvLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzIFwicmVzdCBwYXJhbWV0ZXJcIi5cbiAgdmFyIHJlc3RBcmd1bWVudHMgPSBmdW5jdGlvbihmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXggPT0gbnVsbCA/IGZ1bmMubGVuZ3RoIC0gMSA6ICtzdGFydEluZGV4O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCksXG4gICAgICAgICAgcmVzdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3RbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4ICsgc3RhcnRJbmRleF07XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCByZXN0KTtcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gQXJyYXkoc3RhcnRJbmRleCArIDEpO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhcnRJbmRleDsgaW5kZXgrKykge1xuICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHNoYWxsb3dQcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGhhcyA9IGZ1bmN0aW9uKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcGF0aCk7XG4gIH1cblxuICB2YXIgZGVlcEdldCA9IGZ1bmN0aW9uKG9iaiwgcGF0aCkge1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGggPyBvYmogOiB2b2lkIDA7XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3QuXG4gIC8vIFJlbGF0ZWQ6IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgdmFyIHNhbXBsZSA9IGlzQXJyYXlMaWtlKG9iaikgPyBfLmNsb25lKG9iaikgOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgICBuID0gTWF0aC5tYXgoTWF0aC5taW4obiwgbGVuZ3RoKSwgMCk7XG4gICAgdmFyIGxhc3QgPSBsZW5ndGggLSAxO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgICB2YXIgcmFuZCA9IF8ucmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICAgIHNhbXBsZVtpbmRleF0gPSBzYW1wbGVbcmFuZF07XG4gICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gc2FtcGxlLnNsaWNlKDAsIG4pO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4KyssXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgdmFyIHJlU3RyU3ltYm9sID0gL1teXFx1ZDgwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRmZmZdL2c7XG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChfLmlzU3RyaW5nKG9iaikpIHtcbiAgICAgIC8vIEtlZXAgc3Vycm9nYXRlIHBhaXIgY2hhcmFjdGVycyB0b2dldGhlclxuICAgICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gICAgfVxuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgICByZXN1bHRbcGFzcyA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgb3V0cHV0KSB7XG4gICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuICAgIHZhciBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy8gRmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QuXG4gICAgICAgIGlmIChzaGFsbG93KSB7XG4gICAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCwgb3V0cHV0KTtcbiAgICAgICAgICBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCBvdGhlckFycmF5cykge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBUaGUgZmFzdGVyIGFsZ29yaXRobSB3aWxsIG5vdCB3b3JrIHdpdGggYW4gaXRlcmF0ZWUgaWYgdGhlIGl0ZXJhdGVlXG4gIC8vIGlzIG5vdCBhIG9uZS10by1vbmUgZnVuY3Rpb24sIHNvIHByb3ZpZGluZyBhbiBpdGVyYXRlZSB3aWxsIGRpc2FibGVcbiAgLy8gdGhlIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheXMpIHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgdmFyIGo7XG4gICAgICBmb3IgKGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgICByZXN0ID0gZmxhdHRlbihyZXN0LCB0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLlxuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gcmVzdEFyZ3VtZW50cyhfLnVuemlwKTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgXy5wYWlycy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdC5cbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUluZGV4RmluZGVyID0gZnVuY3Rpb24oZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyXG4gIC8vIGl0ZW1zLlxuICBfLmNodW5rID0gZnVuY3Rpb24oYXJyYXksIGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KGNhbGxBcmdzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlXG4gIC8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG4gIF8ucGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0gXy5wYXJ0aWFsLnBsYWNlaG9sZGVyO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICBfLnBhcnRpYWwucGxhY2Vob2xkZXIgPSBfO1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGluZGV4IDwgMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9KTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRocm90dGxlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgcmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oY29udGV4dCwgYXJncykge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoYXJncykgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJncykge1xuICAgICAgaWYgKHRpbWVvdXQpIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgdmFyIGNhbGxOb3cgPSAhdGltZW91dDtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICBpZiAoY2FsbE5vdykgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBfLmRlbGF5KGxhdGVyLCB3YWl0LCB0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGRlYm91bmNlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVib3VuY2VkO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7XG5cbiAgXy5yZXN0QXJndW1lbnRzID0gcmVzdEFyZ3VtZW50cztcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIHZhciBjb2xsZWN0Tm9uRW51bVByb3BzID0gZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSBfLmlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC5cbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3QuXG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0LlxuICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgLy8gVGhlIG9wcG9zaXRlIG9mIF8ub2JqZWN0LlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYC5cbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCBkZWZhdWx0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGRlZmF1bHRzKSBvYmogPSBPYmplY3Qob2JqKTtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghZGVmYXVsdHMgfHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3QuXG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEludGVybmFsIHBpY2sgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBgb2JqYCBoYXMga2V5IGBrZXlgLlxuICB2YXIga2V5SW5PYmogPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICByZXR1cm4ga2V5IGluIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciByZXN1bHQgPSB7fSwgaXRlcmF0ZWUgPSBrZXlzWzBdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICAgIGtleXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBrZXlJbk9iajtcbiAgICAgIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBjb250ZXh0ID0ga2V5c1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IF8ubWFwKGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSwgZGVlcEVxO1xuICBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwczovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkNBO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFyREE7QUFDQTtBQUNBO0FBdURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBREE7QUFSQTtBQUNBO0FBV0E7QUFDQTtBQURBO0FBZEE7QUFDQTtBQWtCQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNGQTtBQStGQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFsR0E7QUFzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBakJBO0FBNUdBO0FBQ0E7QUFDQTtBQWdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBQ0E7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTNKQTtBQStKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBdEtBO0FBMEtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE1TEE7QUFDQTtBQUNBO0FBOExBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBek1BO0FBQ0E7QUFDQTtBQTJNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFGQTtBQS9OQTtBQXNPQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBaFBBO0FBb1BBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQTNQQTtBQUNBO0FBQ0E7QUE2UEE7QUFDQTtBQWhRQTtBQW9RQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE3UUE7QUFpUkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBMVJBO0FBOFJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBbFNBO0FBQ0E7QUFDQTtBQW9TQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBVEE7QUE5U0E7QUFDQTtBQTJUQTtBQUNBO0FBN1RBO0FBaVVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFuVUE7QUF1VUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXpVQTtBQUNBO0FBQ0E7QUEyVUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUFBO0FBbFdBO0FBQ0E7QUFDQTtBQW9XQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQUE7QUEzWEE7QUFDQTtBQUNBO0FBNlhBO0FBQ0E7QUFoWUE7QUFvWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF0WkE7QUFDQTtBQUNBO0FBd1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBYkE7QUE3WkE7QUFDQTtBQUNBO0FBNmFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFQQTtBQWhiQTtBQTRiQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBOWJBO0FBa2NBO0FBQ0E7QUFBQTtBQUNBO0FBcGNBO0FBd2NBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBeGRBO0FBQ0E7QUFDQTtBQTBkQTtBQUNBO0FBQ0E7QUE5ZEE7QUFrZUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBaGZBO0FBb2ZBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXZmQTtBQTJmQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQS9mQTtBQW1nQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBdGdCQTtBQUNBO0FBQ0E7QUF3Z0JBO0FBQ0E7QUEzZ0JBO0FBQ0E7QUFDQTtBQTZnQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWppQkE7QUFDQTtBQUNBO0FBbWlCQTtBQUNBO0FBdGlCQTtBQUNBO0FBQ0E7QUF3aUJBO0FBQ0E7QUEzaUJBO0FBK2lCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBNWtCQTtBQWdsQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQWxsQkE7QUFzbEJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBbm1CQTtBQXVtQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQTFtQkE7QUFnbkJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4bkJBO0FBNG5CQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTNvQkE7QUFDQTtBQUNBO0FBNm9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFocEJBO0FBQ0E7QUFDQTtBQTBwQkE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF6cUJBO0FBQ0E7QUFDQTtBQTJxQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQW5CQTtBQTlxQkE7QUFzc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL3RCQTtBQW11QkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTN1QkE7QUErdUJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4dkJBO0FBNHZCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQW53QkE7QUF1d0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7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QUFEQTtBQURBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUF2NENBO0FBQ0E7QUFDQTtBQTI0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQWo1Q0E7QUF1NUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUExNUNBO0FBQ0E7QUFDQTtBQTg1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBcDZDQTtBQUNBO0FBQ0E7QUFzNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBNzZDQTtBQUNBO0FBQ0E7QUErNkNBO0FBQ0E7QUFsN0NBO0FBQ0E7QUFDQTtBQW83Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFSQTtBQUNBO0FBWUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFsK0NBO0FBcytDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBMStDQTtBQTgrQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQXhnREE7QUE0Z0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQWJBO0FBZUE7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBO0FBQ0E7QUFDQTtBQWlEQTtBQUNBO0FBRUE7QUFya0RBO0FBQ0E7QUFDQTtBQXVrREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTVrREE7QUFnbERBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXZsREE7QUFDQTtBQUNBO0FBeWxEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQUNBO0FBT0E7QUFwbURBO0FBQ0E7QUFDQTtBQXNtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBN21EQTtBQUNBO0FBQ0E7QUFvbkRBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQXhuREE7QUFDQTtBQUNBO0FBNG5EQTtBQUNBO0FBL25EQTtBQW1vREE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUF2b0RBO0FBMm9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBcnBEQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/country-data/node_modules/underscore/underscore.js\n"); - -/***/ }), - -/***/ "../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/easymde/dist/easymde.min.css": -/*!**********************************************************************************************************************************************************************!*\ - !*** ../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src!../node_modules/sass-loader/dist/cjs.js!../node_modules/easymde/dist/easymde.min.css ***! - \**********************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("exports = module.exports = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ \"../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * easymde v2.9.0\\n * Copyright Jeroen Akkerman\\n * @link https://github.com/ionaru/easy-markdown-editor\\n * @license MIT\\n */\\n.CodeMirror {\\n font-family: monospace;\\n height: 300px;\\n color: #000;\\n direction: ltr; }\\n.CodeMirror-lines {\\n padding: 4px 0; }\\n.CodeMirror pre.CodeMirror-line, .CodeMirror pre.CodeMirror-line-like {\\n padding: 0 4px; }\\n.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler {\\n background-color: #fff; }\\n.CodeMirror-gutters {\\n border-right: 1px solid #ddd;\\n background-color: #f7f7f7;\\n white-space: nowrap; }\\n.CodeMirror-linenumber {\\n padding: 0 3px 0 5px;\\n min-width: 20px;\\n text-align: right;\\n color: #999;\\n white-space: nowrap; }\\n.CodeMirror-guttermarker {\\n color: #000; }\\n.CodeMirror-guttermarker-subtle {\\n color: #999; }\\n.CodeMirror-cursor {\\n border-left: 1px solid #000;\\n border-right: none;\\n width: 0; }\\n.CodeMirror div.CodeMirror-secondarycursor {\\n border-left: 1px solid silver; }\\n.cm-fat-cursor .CodeMirror-cursor {\\n width: auto;\\n border: 0 !important;\\n background: #7e7; }\\n.cm-fat-cursor div.CodeMirror-cursors {\\n z-index: 1; }\\n.cm-fat-cursor-mark {\\n background-color: rgba(20, 255, 20, 0.5);\\n -webkit-animation: blink 1.06s steps(1) infinite;\\n -moz-animation: blink 1.06s steps(1) infinite;\\n animation: blink 1.06s steps(1) infinite; }\\n.cm-animate-fat-cursor {\\n width: auto;\\n border: 0;\\n -webkit-animation: blink 1.06s steps(1) infinite;\\n -moz-animation: blink 1.06s steps(1) infinite;\\n animation: blink 1.06s steps(1) infinite;\\n background-color: #7e7; }\\n@-moz-keyframes blink {\\n 50% {\\n background-color: transparent; } }\\n@-webkit-keyframes blink {\\n 50% {\\n background-color: transparent; } }\\n@keyframes blink {\\n 50% {\\n background-color: transparent; } }\\n.cm-tab {\\n display: inline-block;\\n text-decoration: inherit; }\\n.CodeMirror-rulers {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: -50px;\\n bottom: 0;\\n overflow: hidden; }\\n.CodeMirror-ruler {\\n border-left: 1px solid #ccc;\\n top: 0;\\n bottom: 0;\\n position: absolute; }\\n.cm-s-default .cm-header {\\n color: #00f; }\\n.cm-s-default .cm-quote {\\n color: #090; }\\n.cm-negative {\\n color: #d44; }\\n.cm-positive {\\n color: #292; }\\n.cm-header, .cm-strong {\\n font-weight: 700; }\\n.cm-em {\\n font-style: italic; }\\n.cm-link {\\n text-decoration: underline; }\\n.cm-strikethrough {\\n text-decoration: line-through; }\\n.cm-s-default .cm-keyword {\\n color: #708; }\\n.cm-s-default .cm-atom {\\n color: #219; }\\n.cm-s-default .cm-number {\\n color: #164; }\\n.cm-s-default .cm-def {\\n color: #00f; }\\n.cm-s-default .cm-variable-2 {\\n color: #05a; }\\n.cm-s-default .cm-type, .cm-s-default .cm-variable-3 {\\n color: #085; }\\n.cm-s-default .cm-comment {\\n color: #a50; }\\n.cm-s-default .cm-string {\\n color: #a11; }\\n.cm-s-default .cm-string-2 {\\n color: #f50; }\\n.cm-s-default .cm-meta {\\n color: #555; }\\n.cm-s-default .cm-qualifier {\\n color: #555; }\\n.cm-s-default .cm-builtin {\\n color: #30a; }\\n.cm-s-default .cm-bracket {\\n color: #997; }\\n.cm-s-default .cm-tag {\\n color: #170; }\\n.cm-s-default .cm-attribute {\\n color: #00c; }\\n.cm-s-default .cm-hr {\\n color: #999; }\\n.cm-s-default .cm-link {\\n color: #00c; }\\n.cm-s-default .cm-error {\\n color: red; }\\n.cm-invalidchar {\\n color: red; }\\n.CodeMirror-composing {\\n border-bottom: 2px solid; }\\ndiv.CodeMirror span.CodeMirror-matchingbracket {\\n color: #0b0; }\\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {\\n color: #a22; }\\n.CodeMirror-matchingtag {\\n background: rgba(255, 150, 0, 0.3); }\\n.CodeMirror-activeline-background {\\n background: #e8f2ff; }\\n.CodeMirror {\\n position: relative;\\n overflow: hidden;\\n background: #fff; }\\n.CodeMirror-scroll {\\n overflow: scroll !important;\\n margin-bottom: -30px;\\n margin-right: -30px;\\n padding-bottom: 30px;\\n height: 100%;\\n outline: 0;\\n position: relative; }\\n.CodeMirror-sizer {\\n position: relative;\\n border-right: 30px solid transparent; }\\n.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar {\\n position: absolute;\\n z-index: 6;\\n display: none; }\\n.CodeMirror-vscrollbar {\\n right: 0;\\n top: 0;\\n overflow-x: hidden;\\n overflow-y: scroll; }\\n.CodeMirror-hscrollbar {\\n bottom: 0;\\n left: 0;\\n overflow-y: hidden;\\n overflow-x: scroll; }\\n.CodeMirror-scrollbar-filler {\\n right: 0;\\n bottom: 0; }\\n.CodeMirror-gutter-filler {\\n left: 0;\\n bottom: 0; }\\n.CodeMirror-gutters {\\n position: absolute;\\n left: 0;\\n top: 0;\\n min-height: 100%;\\n z-index: 3; }\\n.CodeMirror-gutter {\\n white-space: normal;\\n height: 100%;\\n display: inline-block;\\n vertical-align: top;\\n margin-bottom: -30px; }\\n.CodeMirror-gutter-wrapper {\\n position: absolute;\\n z-index: 4;\\n background: 0 0 !important;\\n border: none !important; }\\n.CodeMirror-gutter-background {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n z-index: 4; }\\n.CodeMirror-gutter-elt {\\n position: absolute;\\n cursor: default;\\n z-index: 4; }\\n.CodeMirror-gutter-wrapper ::selection {\\n background-color: transparent; }\\n.CodeMirror-gutter-wrapper ::-moz-selection {\\n background-color: transparent; }\\n.CodeMirror-lines {\\n cursor: text;\\n min-height: 1px; }\\n.CodeMirror pre.CodeMirror-line, .CodeMirror pre.CodeMirror-line-like {\\n -moz-border-radius: 0;\\n -webkit-border-radius: 0;\\n border-radius: 0;\\n border-width: 0;\\n background: 0 0;\\n font-family: inherit;\\n font-size: inherit;\\n margin: 0;\\n white-space: pre;\\n word-wrap: normal;\\n line-height: inherit;\\n color: inherit;\\n z-index: 2;\\n position: relative;\\n overflow: visible;\\n -webkit-tap-highlight-color: transparent;\\n -webkit-font-variant-ligatures: contextual;\\n font-variant-ligatures: contextual; }\\n.CodeMirror-wrap pre.CodeMirror-line, .CodeMirror-wrap pre.CodeMirror-line-like {\\n word-wrap: break-word;\\n white-space: pre-wrap;\\n word-break: normal; }\\n.CodeMirror-linebackground {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n z-index: 0; }\\n.CodeMirror-linewidget {\\n position: relative;\\n z-index: 2;\\n padding: .1px; }\\n.CodeMirror-rtl pre {\\n direction: rtl; }\\n.CodeMirror-code {\\n outline: 0; }\\n.CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber, .CodeMirror-scroll, .CodeMirror-sizer {\\n -moz-box-sizing: content-box;\\n box-sizing: content-box; }\\n.CodeMirror-measure {\\n position: absolute;\\n width: 100%;\\n height: 0;\\n overflow: hidden;\\n visibility: hidden; }\\n.CodeMirror-cursor {\\n position: absolute;\\n pointer-events: none; }\\n.CodeMirror-measure pre {\\n position: static; }\\ndiv.CodeMirror-cursors {\\n visibility: hidden;\\n position: relative;\\n z-index: 3; }\\ndiv.CodeMirror-dragcursors {\\n visibility: visible; }\\n.CodeMirror-focused div.CodeMirror-cursors {\\n visibility: visible; }\\n.CodeMirror-selected {\\n background: #d9d9d9; }\\n.CodeMirror-focused .CodeMirror-selected {\\n background: #d7d4f0; }\\n.CodeMirror-crosshair {\\n cursor: crosshair; }\\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection {\\n background: #d7d4f0; }\\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection {\\n background: #d7d4f0; }\\n.cm-searching {\\n background-color: #ffa;\\n background-color: rgba(255, 255, 0, 0.4); }\\n.cm-force-border {\\n padding-right: .1px; }\\n@media print {\\n .CodeMirror div.CodeMirror-cursors {\\n visibility: hidden; } }\\n.cm-tab-wrap-hack:after {\\n content: ''; }\\nspan.CodeMirror-selectedtext {\\n background: 0 0; }\\n.CodeMirror {\\n box-sizing: border-box;\\n height: auto;\\n border: 1px solid #ddd;\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n padding: 10px;\\n font: inherit;\\n z-index: 1;\\n word-wrap: break-word; }\\n.CodeMirror-scroll {\\n cursor: text; }\\n.CodeMirror-fullscreen {\\n background: #fff;\\n position: fixed !important;\\n top: 50px;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n height: auto;\\n z-index: 9;\\n border-right: none !important;\\n border-bottom-right-radius: 0 !important; }\\n.CodeMirror-sided {\\n width: 50% !important; }\\n.CodeMirror-placeholder {\\n opacity: .5; }\\n.CodeMirror-focused .CodeMirror-selected {\\n background: #d9d9d9; }\\n.editor-toolbar {\\n position: relative;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n -o-user-select: none;\\n user-select: none;\\n padding: 0 10px;\\n border-top: 1px solid #bbb;\\n border-left: 1px solid #bbb;\\n border-right: 1px solid #bbb;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px; }\\n.editor-toolbar:after, .editor-toolbar:before {\\n display: block;\\n content: ' ';\\n height: 1px; }\\n.editor-toolbar:before {\\n margin-bottom: 8px; }\\n.editor-toolbar:after {\\n margin-top: 8px; }\\n.editor-toolbar.fullscreen {\\n width: 100%;\\n height: 50px;\\n overflow-x: auto;\\n overflow-y: hidden;\\n white-space: nowrap;\\n padding-top: 10px;\\n padding-bottom: 10px;\\n box-sizing: border-box;\\n background: #fff;\\n border: 0;\\n position: fixed;\\n top: 0;\\n left: 0;\\n opacity: 1;\\n z-index: 9; }\\n.editor-toolbar.fullscreen::before {\\n width: 20px;\\n height: 50px;\\n background: -moz-linear-gradient(left, white 0, rgba(255, 255, 255, 0) 100%);\\n background: -webkit-gradient(linear, left top, right top, color-stop(0, white), color-stop(100%, rgba(255, 255, 255, 0)));\\n background: -webkit-linear-gradient(left, white 0, rgba(255, 255, 255, 0) 100%);\\n background: -o-linear-gradient(left, white 0, rgba(255, 255, 255, 0) 100%);\\n background: -ms-linear-gradient(left, white 0, rgba(255, 255, 255, 0) 100%);\\n background: linear-gradient(to right, white 0, rgba(255, 255, 255, 0) 100%);\\n position: fixed;\\n top: 0;\\n left: 0;\\n margin: 0;\\n padding: 0; }\\n.editor-toolbar.fullscreen::after {\\n width: 20px;\\n height: 50px;\\n background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0, white 100%);\\n background: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(255, 255, 255, 0)), color-stop(100%, white));\\n background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0, white 100%);\\n background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0, white 100%);\\n background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0, white 100%);\\n background: linear-gradient(to right, rgba(255, 255, 255, 0) 0, white 100%);\\n position: fixed;\\n top: 0;\\n right: 0;\\n margin: 0;\\n padding: 0; }\\n.editor-toolbar button {\\n background: 0 0;\\n display: inline-block;\\n text-align: center;\\n text-decoration: none !important;\\n width: 30px;\\n height: 30px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid transparent;\\n border-radius: 3px;\\n cursor: pointer; }\\n.editor-toolbar button.active, .editor-toolbar button:hover {\\n background: #fcfcfc;\\n border-color: #95a5a6; }\\n.editor-toolbar i.separator {\\n display: inline-block;\\n width: 0;\\n border-left: 1px solid #d9d9d9;\\n border-right: 1px solid #fff;\\n color: transparent;\\n text-indent: -10px;\\n margin: 0 6px; }\\n.editor-toolbar button:after {\\n font-family: Arial,\\\"Helvetica Neue\\\",Helvetica,sans-serif;\\n font-size: 65%;\\n vertical-align: text-bottom;\\n position: relative;\\n top: 2px; }\\n.editor-toolbar button.heading-1:after {\\n content: \\\"1\\\"; }\\n.editor-toolbar button.heading-2:after {\\n content: \\\"2\\\"; }\\n.editor-toolbar button.heading-3:after {\\n content: \\\"3\\\"; }\\n.editor-toolbar button.heading-bigger:after {\\n content: \\\"▲\\\"; }\\n.editor-toolbar button.heading-smaller:after {\\n content: \\\"▼\\\"; }\\n.editor-toolbar.disabled-for-preview button:not(.no-disable) {\\n opacity: .6;\\n pointer-events: none; }\\n@media only screen and (max-width: 700px) {\\n .editor-toolbar i.no-mobile {\\n display: none; } }\\n.editor-statusbar {\\n padding: 8px 10px;\\n font-size: 12px;\\n color: #959694;\\n text-align: right; }\\n.editor-statusbar span {\\n display: inline-block;\\n min-width: 4em;\\n margin-left: 1em; }\\n.editor-statusbar .lines:before {\\n content: 'lines: '; }\\n.editor-statusbar .words:before {\\n content: 'words: '; }\\n.editor-statusbar .characters:before {\\n content: 'characters: '; }\\n.editor-preview-full {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n z-index: 7;\\n overflow: auto;\\n display: none;\\n box-sizing: border-box; }\\n.editor-preview-side {\\n position: fixed;\\n bottom: 0;\\n width: 50%;\\n top: 50px;\\n right: 0;\\n z-index: 9;\\n overflow: auto;\\n display: none;\\n box-sizing: border-box;\\n border: 1px solid #ddd;\\n word-wrap: break-word; }\\n.editor-preview-active-side {\\n display: block; }\\n.editor-preview-active {\\n display: block; }\\n.editor-preview {\\n padding: 10px;\\n background: #fafafa; }\\n.editor-preview > p {\\n margin-top: 0; }\\n.editor-preview pre {\\n background: #eee;\\n margin-bottom: 10px; }\\n.editor-preview table td, .editor-preview table th {\\n border: 1px solid #ddd;\\n padding: 5px; }\\n.cm-s-easymde .cm-tag {\\n color: #63a35c; }\\n.cm-s-easymde .cm-attribute {\\n color: #795da3; }\\n.cm-s-easymde .cm-string {\\n color: #183691; }\\n.cm-s-easymde .cm-header-1 {\\n font-size: 200%;\\n line-height: 200%; }\\n.cm-s-easymde .cm-header-2 {\\n font-size: 160%;\\n line-height: 160%; }\\n.cm-s-easymde .cm-header-3 {\\n font-size: 125%;\\n line-height: 125%; }\\n.cm-s-easymde .cm-header-4 {\\n font-size: 110%;\\n line-height: 110%; }\\n.cm-s-easymde .cm-comment {\\n background: rgba(0, 0, 0, 0.05);\\n border-radius: 2px; }\\n.cm-s-easymde .cm-link {\\n color: #7f8c8d; }\\n.cm-s-easymde .cm-url {\\n color: #aab2b3; }\\n.cm-s-easymde .cm-quote {\\n color: #7f8c8d;\\n font-style: italic; }\\n.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word) {\\n background: rgba(255, 0, 0, 0.15); }\\n\", \"\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvZGlzdC9lYXN5bWRlLm1pbi5jc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvZGlzdC9lYXN5bWRlLm1pbi5jc3M/YTlkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpKGZhbHNlKTtcbi8vIE1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG4vKipcXG4gKiBlYXN5bWRlIHYyLjkuMFxcbiAqIENvcHlyaWdodCBKZXJvZW4gQWtrZXJtYW5cXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vaW9uYXJ1L2Vhc3ktbWFya2Rvd24tZWRpdG9yXFxuICogQGxpY2Vuc2UgTUlUXFxuICovXFxuLkNvZGVNaXJyb3Ige1xcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcXG4gIGhlaWdodDogMzAwcHg7XFxuICBjb2xvcjogIzAwMDtcXG4gIGRpcmVjdGlvbjogbHRyOyB9XFxuLkNvZGVNaXJyb3ItbGluZXMge1xcbiAgcGFkZGluZzogNHB4IDA7IH1cXG4uQ29kZU1pcnJvciBwcmUuQ29kZU1pcnJvci1saW5lLCAuQ29kZU1pcnJvciBwcmUuQ29kZU1pcnJvci1saW5lLWxpa2Uge1xcbiAgcGFkZGluZzogMCA0cHg7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXJzIHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxcbi5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xcbiAgcGFkZGluZzogMCAzcHggMCA1cHg7XFxuICBtaW4td2lkdGg6IDIwcHg7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIGNvbG9yOiAjOTk5O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxcbi5Db2RlTWlycm9yLWd1dHRlcm1hcmtlciB7XFxuICBjb2xvcjogIzAwMDsgfVxcbi5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUge1xcbiAgY29sb3I6ICM5OTk7IH1cXG4uQ29kZU1pcnJvci1jdXJzb3Ige1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMDAwO1xcbiAgYm9yZGVyLXJpZ2h0OiBub25lO1xcbiAgd2lkdGg6IDA7IH1cXG4uQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3Ige1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7IH1cXG4uY20tZmF0LWN1cnNvciAuQ29kZU1pcnJvci1jdXJzb3Ige1xcbiAgd2lkdGg6IGF1dG87XFxuICBib3JkZXI6IDAgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6ICM3ZTc7IH1cXG4uY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHtcXG4gIHotaW5kZXg6IDE7IH1cXG4uY20tZmF0LWN1cnNvci1tYXJrIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAsIDI1NSwgMjAsIDAuNSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XFxuICAtbW96LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XFxuICBhbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOyB9XFxuLmNtLWFuaW1hdGUtZmF0LWN1cnNvciB7XFxuICB3aWR0aDogYXV0bztcXG4gIGJvcmRlcjogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcXG4gIC1tb3otYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2U3OyB9XFxuQC1tb3ota2V5ZnJhbWVzIGJsaW5rIHtcXG4gIDUwJSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgYmxpbmsge1xcbiAgNTAlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfVxcbkBrZXlmcmFtZXMgYmxpbmsge1xcbiAgNTAlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfVxcbi5jbS10YWIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0OyB9XFxuLkNvZGVNaXJyb3ItcnVsZXJzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogLTUwcHg7XFxuICBib3R0b206IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuOyB9XFxuLkNvZGVNaXJyb3ItcnVsZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlOyB9XFxuLmNtLXMtZGVmYXVsdCAuY20taGVhZGVyIHtcXG4gIGNvbG9yOiAjMDBmOyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUge1xcbiAgY29sb3I6ICMwOTA7IH1cXG4uY20tbmVnYXRpdmUge1xcbiAgY29sb3I6ICNkNDQ7IH1cXG4uY20tcG9zaXRpdmUge1xcbiAgY29sb3I6ICMyOTI7IH1cXG4uY20taGVhZGVyLCAuY20tc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7IH1cXG4uY20tZW0ge1xcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XFxuLmNtLWxpbmsge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cXG4uY20tc3RyaWtldGhyb3VnaCB7XFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgfVxcbi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQge1xcbiAgY29sb3I6ICM3MDg7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1hdG9tIHtcXG4gIGNvbG9yOiAjMjE5OyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtcXG4gIGNvbG9yOiAjMTY0OyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tZGVmIHtcXG4gIGNvbG9yOiAjMDBmOyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7XFxuICBjb2xvcjogIzA1YTsgfVxcbi5jbS1zLWRlZmF1bHQgLmNtLXR5cGUsIC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMge1xcbiAgY29sb3I6ICMwODU7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHtcXG4gIGNvbG9yOiAjYTUwOyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nIHtcXG4gIGNvbG9yOiAjYTExOyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIge1xcbiAgY29sb3I6ICNmNTA7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1tZXRhIHtcXG4gIGNvbG9yOiAjNTU1OyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tcXVhbGlmaWVyIHtcXG4gIGNvbG9yOiAjNTU1OyB9XFxuLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7XFxuICBjb2xvcjogIzMwYTsgfVxcbi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQge1xcbiAgY29sb3I6ICM5OTc7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS10YWcge1xcbiAgY29sb3I6ICMxNzA7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUge1xcbiAgY29sb3I6ICMwMGM7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1ociB7XFxuICBjb2xvcjogIzk5OTsgfVxcbi5jbS1zLWRlZmF1bHQgLmNtLWxpbmsge1xcbiAgY29sb3I6ICMwMGM7IH1cXG4uY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7XFxuICBjb2xvcjogcmVkOyB9XFxuLmNtLWludmFsaWRjaGFyIHtcXG4gIGNvbG9yOiByZWQ7IH1cXG4uQ29kZU1pcnJvci1jb21wb3Npbmcge1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkOyB9XFxuZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7XFxuICBjb2xvcjogIzBiMDsgfVxcbmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge1xcbiAgY29sb3I6ICNhMjI7IH1cXG4uQ29kZU1pcnJvci1tYXRjaGluZ3RhZyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTUwLCAwLCAwLjMpOyB9XFxuLkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kIHtcXG4gIGJhY2tncm91bmQ6ICNlOGYyZmY7IH1cXG4uQ29kZU1pcnJvciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYmFja2dyb3VuZDogI2ZmZjsgfVxcbi5Db2RlTWlycm9yLXNjcm9sbCB7XFxuICBvdmVyZmxvdzogc2Nyb2xsICFpbXBvcnRhbnQ7XFxuICBtYXJnaW4tYm90dG9tOiAtMzBweDtcXG4gIG1hcmdpbi1yaWdodDogLTMwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMzBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG91dGxpbmU6IDA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG4uQ29kZU1pcnJvci1zaXplciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3JkZXItcmlnaHQ6IDMwcHggc29saWQgdHJhbnNwYXJlbnQ7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci12c2Nyb2xsYmFyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDY7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDsgfVxcbi5Db2RlTWlycm9yLWhzY3JvbGxiYXIge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXg6IHNjcm9sbDsgfVxcbi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIge1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXJzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBtaW4taGVpZ2h0OiAxMDAlO1xcbiAgei1pbmRleDogMzsgfVxcbi5Db2RlTWlycm9yLWd1dHRlciB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIG1hcmdpbi1ib3R0b206IC0zMHB4OyB9XFxuLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogNDtcXG4gIGJhY2tncm91bmQ6IDAgMCAhaW1wb3J0YW50O1xcbiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiA0OyB9XFxuLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB6LWluZGV4OiA0OyB9XFxuLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIgOjpzZWxlY3Rpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cXG4uQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciA6Oi1tb3otc2VsZWN0aW9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XFxuLkNvZGVNaXJyb3ItbGluZXMge1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgbWluLWhlaWdodDogMXB4OyB9XFxuLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItbGluZSwgLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItbGluZS1saWtlIHtcXG4gIC1tb3otYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3JkZXItd2lkdGg6IDA7XFxuICBiYWNrZ3JvdW5kOiAwIDA7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIG1hcmdpbjogMDtcXG4gIHdoaXRlLXNwYWNlOiBwcmU7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB6LWluZGV4OiAyO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzOiBjb250ZXh0dWFsO1xcbiAgZm9udC12YXJpYW50LWxpZ2F0dXJlczogY29udGV4dHVhbDsgfVxcbi5Db2RlTWlycm9yLXdyYXAgcHJlLkNvZGVNaXJyb3ItbGluZSwgLkNvZGVNaXJyb3Itd3JhcCBwcmUuQ29kZU1pcnJvci1saW5lLWxpa2Uge1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgd29yZC1icmVhazogbm9ybWFsOyB9XFxuLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMDsgfVxcbi5Db2RlTWlycm9yLWxpbmV3aWRnZXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMjtcXG4gIHBhZGRpbmc6IC4xcHg7IH1cXG4uQ29kZU1pcnJvci1ydGwgcHJlIHtcXG4gIGRpcmVjdGlvbjogcnRsOyB9XFxuLkNvZGVNaXJyb3ItY29kZSB7XFxuICBvdXRsaW5lOiAwOyB9XFxuLkNvZGVNaXJyb3ItZ3V0dGVyLCAuQ29kZU1pcnJvci1ndXR0ZXJzLCAuQ29kZU1pcnJvci1saW5lbnVtYmVyLCAuQ29kZU1pcnJvci1zY3JvbGwsIC5Db2RlTWlycm9yLXNpemVyIHtcXG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfVxcbi5Db2RlTWlycm9yLW1lYXN1cmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuOyB9XFxuLkNvZGVNaXJyb3ItY3Vyc29yIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XFxuLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUge1xcbiAgcG9zaXRpb246IHN0YXRpYzsgfVxcbmRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMzsgfVxcbmRpdi5Db2RlTWlycm9yLWRyYWdjdXJzb3JzIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7IH1cXG4uQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTsgfVxcbi5Db2RlTWlycm9yLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH1cXG4uQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH1cXG4uQ29kZU1pcnJvci1jcm9zc2hhaXIge1xcbiAgY3Vyc29yOiBjcm9zc2hhaXI7IH1cXG4uQ29kZU1pcnJvci1saW5lOjpzZWxlY3Rpb24sIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjpzZWxlY3Rpb24sIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6c2VsZWN0aW9uIHtcXG4gIGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH1cXG4uQ29kZU1pcnJvci1saW5lOjotbW96LXNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46Oi1tb3otc2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46Oi1tb3otc2VsZWN0aW9uIHtcXG4gIGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH1cXG4uY20tc2VhcmNoaW5nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAwLCAwLjQpOyB9XFxuLmNtLWZvcmNlLWJvcmRlciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9XFxuQG1lZGlhIHByaW50IHtcXG4gIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47IH0gfVxcbi5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnOyB9XFxuc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkdGV4dCB7XFxuICBiYWNrZ3JvdW5kOiAwIDA7IH1cXG4uQ29kZU1pcnJvciB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIHotaW5kZXg6IDE7XFxuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH1cXG4uQ29kZU1pcnJvci1zY3JvbGwge1xcbiAgY3Vyc29yOiB0ZXh0OyB9XFxuLkNvZGVNaXJyb3ItZnVsbHNjcmVlbiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XFxuICB0b3A6IDUwcHg7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB6LWluZGV4OiA5O1xcbiAgYm9yZGVyLXJpZ2h0OiBub25lICFpbXBvcnRhbnQ7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMCAhaW1wb3J0YW50OyB9XFxuLkNvZGVNaXJyb3Itc2lkZWQge1xcbiAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XFxuLkNvZGVNaXJyb3ItcGxhY2Vob2xkZXIge1xcbiAgb3BhY2l0eTogLjU7IH1cXG4uQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH1cXG4uZWRpdG9yLXRvb2xiYXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtby11c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCAxMHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiYmI7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNiYmI7XFxuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYmJiO1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsgfVxcbi5lZGl0b3ItdG9vbGJhcjphZnRlciwgLmVkaXRvci10b29sYmFyOmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcgJztcXG4gIGhlaWdodDogMXB4OyB9XFxuLmVkaXRvci10b29sYmFyOmJlZm9yZSB7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cXG4uZWRpdG9yLXRvb2xiYXI6YWZ0ZXIge1xcbiAgbWFyZ2luLXRvcDogOHB4OyB9XFxuLmVkaXRvci10b29sYmFyLmZ1bGxzY3JlZW4ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHBhZGRpbmctdG9wOiAxMHB4O1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJvcmRlcjogMDtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAxO1xcbiAgei1pbmRleDogOTsgfVxcbi5lZGl0b3ItdG9vbGJhci5mdWxsc2NyZWVuOjpiZWZvcmUge1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChsZWZ0LCB3aGl0ZSAwLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDEwMCUpO1xcbiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGNvbG9yLXN0b3AoMCwgd2hpdGUpLCBjb2xvci1zdG9wKDEwMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpKTtcXG4gIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHdoaXRlIDAsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgMTAwJSk7XFxuICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgd2hpdGUgMCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAxMDAlKTtcXG4gIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQobGVmdCwgd2hpdGUgMCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAxMDAlKTtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgd2hpdGUgMCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAxMDAlKTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwOyB9XFxuLmVkaXRvci10b29sYmFyLmZ1bGxzY3JlZW46OmFmdGVyIHtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiA1MHB4O1xcbiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAwLCB3aGl0ZSAxMDAlKTtcXG4gIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgcmlnaHQgdG9wLCBjb2xvci1zdG9wKDAsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpLCBjb2xvci1zdG9wKDEwMCUsIHdoaXRlKSk7XFxuICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDAsIHdoaXRlIDEwMCUpO1xcbiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgMCwgd2hpdGUgMTAwJSk7XFxuICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgMCwgd2hpdGUgMTAwJSk7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgMCwgd2hpdGUgMTAwJSk7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7IH1cXG4uZWRpdG9yLXRvb2xiYXIgYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IDAgMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbiAgd2lkdGg6IDMwcHg7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7IH1cXG4uZWRpdG9yLXRvb2xiYXIgYnV0dG9uLmFjdGl2ZSwgLmVkaXRvci10b29sYmFyIGJ1dHRvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjZmNmY2ZjO1xcbiAgYm9yZGVyLWNvbG9yOiAjOTVhNWE2OyB9XFxuLmVkaXRvci10b29sYmFyIGkuc2VwYXJhdG9yIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAwO1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZDlkOWQ5O1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2ZmZjtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHRleHQtaW5kZW50OiAtMTBweDtcXG4gIG1hcmdpbjogMCA2cHg7IH1cXG4uZWRpdG9yLXRvb2xiYXIgYnV0dG9uOmFmdGVyIHtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCxcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEhlbHZldGljYSxzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiA2NSU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDJweDsgfVxcbi5lZGl0b3ItdG9vbGJhciBidXR0b24uaGVhZGluZy0xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIxXFxcIjsgfVxcbi5lZGl0b3ItdG9vbGJhciBidXR0b24uaGVhZGluZy0yOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIyXFxcIjsgfVxcbi5lZGl0b3ItdG9vbGJhciBidXR0b24uaGVhZGluZy0zOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIzXFxcIjsgfVxcbi5lZGl0b3ItdG9vbGJhciBidXR0b24uaGVhZGluZy1iaWdnZXI6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIuKWslxcXCI7IH1cXG4uZWRpdG9yLXRvb2xiYXIgYnV0dG9uLmhlYWRpbmctc21hbGxlcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwi4pa8XFxcIjsgfVxcbi5lZGl0b3ItdG9vbGJhci5kaXNhYmxlZC1mb3ItcHJldmlldyBidXR0b246bm90KC5uby1kaXNhYmxlKSB7XFxuICBvcGFjaXR5OiAuNjtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MDBweCkge1xcbiAgLmVkaXRvci10b29sYmFyIGkubm8tbW9iaWxlIHtcXG4gICAgZGlzcGxheTogbm9uZTsgfSB9XFxuLmVkaXRvci1zdGF0dXNiYXIge1xcbiAgcGFkZGluZzogOHB4IDEwcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogIzk1OTY5NDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XFxuLmVkaXRvci1zdGF0dXNiYXIgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtaW4td2lkdGg6IDRlbTtcXG4gIG1hcmdpbi1sZWZ0OiAxZW07IH1cXG4uZWRpdG9yLXN0YXR1c2JhciAubGluZXM6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdsaW5lczogJzsgfVxcbi5lZGl0b3Itc3RhdHVzYmFyIC53b3JkczpiZWZvcmUge1xcbiAgY29udGVudDogJ3dvcmRzOiAnOyB9XFxuLmVkaXRvci1zdGF0dXNiYXIgLmNoYXJhY3RlcnM6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdjaGFyYWN0ZXJzOiAnOyB9XFxuLmVkaXRvci1wcmV2aWV3LWZ1bGwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogNztcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXG4uZWRpdG9yLXByZXZpZXctc2lkZSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogNTAlO1xcbiAgdG9wOiA1MHB4O1xcbiAgcmlnaHQ6IDA7XFxuICB6LWluZGV4OiA5O1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBkaXNwbGF5OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XFxuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH1cXG4uZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGUge1xcbiAgZGlzcGxheTogYmxvY2s7IH1cXG4uZWRpdG9yLXByZXZpZXctYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrOyB9XFxuLmVkaXRvci1wcmV2aWV3IHtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBiYWNrZ3JvdW5kOiAjZmFmYWZhOyB9XFxuLmVkaXRvci1wcmV2aWV3ID4gcCB7XFxuICBtYXJnaW4tdG9wOiAwOyB9XFxuLmVkaXRvci1wcmV2aWV3IHByZSB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxcbi5lZGl0b3ItcHJldmlldyB0YWJsZSB0ZCwgLmVkaXRvci1wcmV2aWV3IHRhYmxlIHRoIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XFxuICBwYWRkaW5nOiA1cHg7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS10YWcge1xcbiAgY29sb3I6ICM2M2EzNWM7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS1hdHRyaWJ1dGUge1xcbiAgY29sb3I6ICM3OTVkYTM7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS1zdHJpbmcge1xcbiAgY29sb3I6ICMxODM2OTE7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS1oZWFkZXItMSB7XFxuICBmb250LXNpemU6IDIwMCU7XFxuICBsaW5lLWhlaWdodDogMjAwJTsgfVxcbi5jbS1zLWVhc3ltZGUgLmNtLWhlYWRlci0yIHtcXG4gIGZvbnQtc2l6ZTogMTYwJTtcXG4gIGxpbmUtaGVpZ2h0OiAxNjAlOyB9XFxuLmNtLXMtZWFzeW1kZSAuY20taGVhZGVyLTMge1xcbiAgZm9udC1zaXplOiAxMjUlO1xcbiAgbGluZS1oZWlnaHQ6IDEyNSU7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS1oZWFkZXItNCB7XFxuICBmb250LXNpemU6IDExMCU7XFxuICBsaW5lLWhlaWdodDogMTEwJTsgfVxcbi5jbS1zLWVhc3ltZGUgLmNtLWNvbW1lbnQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDsgfVxcbi5jbS1zLWVhc3ltZGUgLmNtLWxpbmsge1xcbiAgY29sb3I6ICM3ZjhjOGQ7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS11cmwge1xcbiAgY29sb3I6ICNhYWIyYjM7IH1cXG4uY20tcy1lYXN5bWRlIC5jbS1xdW90ZSB7XFxuICBjb2xvcjogIzdmOGM4ZDtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxcbi5Db2RlTWlycm9yIC5jbS1zcGVsbC1lcnJvcjpub3QoLmNtLXVybCk6bm90KC5jbS1jb21tZW50KTpub3QoLmNtLXRhZyk6bm90KC5jbS13b3JkKSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMCwgMCwgMC4xNSk7IH1cXG5cIiwgXCJcIl0pO1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/easymde/dist/easymde.min.css\n"); - -/***/ }), - -/***/ "../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/video.js/dist/alt/video-js-cdn.min.css": -/*!********************************************************************************************************************************************************************************!*\ - !*** ../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src!../node_modules/sass-loader/dist/cjs.js!../node_modules/video.js/dist/alt/video-js-cdn.min.css ***! - \********************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("exports = module.exports = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \"../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .video-js .vjs-modal-dialog, .vjs-button > .vjs-icon-placeholder:before, .vjs-modal-dialog .vjs-modal-dialog-content {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\n.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .vjs-button > .vjs-icon-placeholder:before {\\n text-align: center; }\\n@font-face {\\n font-family: VideoJS;\\n src: url(data:application/font-woff;charset=utf-8;base64,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) format(\\\"woff\\\");\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .video-js .vjs-play-control .vjs-icon-placeholder, .vjs-icon-play {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .video-js .vjs-play-control .vjs-icon-placeholder:before, .vjs-icon-play:before {\\n content: \\\"\\\\f101\\\"; }\\n.vjs-icon-play-circle {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-play-circle:before {\\n content: \\\"\\\\f102\\\"; }\\n.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder, .vjs-icon-pause {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before, .vjs-icon-pause:before {\\n content: \\\"\\\\f103\\\"; }\\n.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder, .vjs-icon-volume-mute {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before, .vjs-icon-volume-mute:before {\\n content: \\\"\\\\f104\\\"; }\\n.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder, .vjs-icon-volume-low {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before, .vjs-icon-volume-low:before {\\n content: \\\"\\\\f105\\\"; }\\n.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder, .vjs-icon-volume-mid {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before, .vjs-icon-volume-mid:before {\\n content: \\\"\\\\f106\\\"; }\\n.video-js .vjs-mute-control .vjs-icon-placeholder, .vjs-icon-volume-high {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-mute-control .vjs-icon-placeholder:before, .vjs-icon-volume-high:before {\\n content: \\\"\\\\f107\\\"; }\\n.video-js .vjs-fullscreen-control .vjs-icon-placeholder, .vjs-icon-fullscreen-enter {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before, .vjs-icon-fullscreen-enter:before {\\n content: \\\"\\\\f108\\\"; }\\n.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder, .vjs-icon-fullscreen-exit {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before, .vjs-icon-fullscreen-exit:before {\\n content: \\\"\\\\f109\\\"; }\\n.vjs-icon-square {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-square:before {\\n content: \\\"\\\\f10a\\\"; }\\n.vjs-icon-spinner {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-spinner:before {\\n content: \\\"\\\\f10b\\\"; }\\n.video-js .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-subtitles-button .vjs-icon-placeholder, .video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder, .vjs-icon-subtitles {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-subtitles-button .vjs-icon-placeholder:before, .video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before, .vjs-icon-subtitles:before {\\n content: \\\"\\\\f10c\\\"; }\\n.video-js .vjs-captions-button .vjs-icon-placeholder, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder, .vjs-icon-captions {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-captions-button .vjs-icon-placeholder:before, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before, .vjs-icon-captions:before {\\n content: \\\"\\\\f10d\\\"; }\\n.video-js .vjs-chapters-button .vjs-icon-placeholder, .vjs-icon-chapters {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-chapters-button .vjs-icon-placeholder:before, .vjs-icon-chapters:before {\\n content: \\\"\\\\f10e\\\"; }\\n.vjs-icon-share {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-share:before {\\n content: \\\"\\\\f10f\\\"; }\\n.vjs-icon-cog {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-cog:before {\\n content: \\\"\\\\f110\\\"; }\\n.video-js .vjs-play-progress, .video-js .vjs-volume-level, .vjs-icon-circle, .vjs-seek-to-live-control .vjs-icon-placeholder {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-play-progress:before, .video-js .vjs-volume-level:before, .vjs-icon-circle:before, .vjs-seek-to-live-control .vjs-icon-placeholder:before {\\n content: \\\"\\\\f111\\\"; }\\n.vjs-icon-circle-outline {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-circle-outline:before {\\n content: \\\"\\\\f112\\\"; }\\n.vjs-icon-circle-inner-circle {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-circle-inner-circle:before {\\n content: \\\"\\\\f113\\\"; }\\n.vjs-icon-hd {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-hd:before {\\n content: \\\"\\\\f114\\\"; }\\n.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder, .vjs-icon-cancel {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before, .vjs-icon-cancel:before {\\n content: \\\"\\\\f115\\\"; }\\n.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder, .vjs-icon-replay {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before, .vjs-icon-replay:before {\\n content: \\\"\\\\f116\\\"; }\\n.vjs-icon-facebook {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-facebook:before {\\n content: \\\"\\\\f117\\\"; }\\n.vjs-icon-gplus {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-gplus:before {\\n content: \\\"\\\\f118\\\"; }\\n.vjs-icon-linkedin {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-linkedin:before {\\n content: \\\"\\\\f119\\\"; }\\n.vjs-icon-twitter {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-twitter:before {\\n content: \\\"\\\\f11a\\\"; }\\n.vjs-icon-tumblr {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-tumblr:before {\\n content: \\\"\\\\f11b\\\"; }\\n.vjs-icon-pinterest {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-pinterest:before {\\n content: \\\"\\\\f11c\\\"; }\\n.video-js .vjs-descriptions-button .vjs-icon-placeholder, .vjs-icon-audio-description {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-descriptions-button .vjs-icon-placeholder:before, .vjs-icon-audio-description:before {\\n content: \\\"\\\\f11d\\\"; }\\n.video-js .vjs-audio-button .vjs-icon-placeholder, .vjs-icon-audio {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-audio-button .vjs-icon-placeholder:before, .vjs-icon-audio:before {\\n content: \\\"\\\\f11e\\\"; }\\n.vjs-icon-next-item {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-next-item:before {\\n content: \\\"\\\\f11f\\\"; }\\n.vjs-icon-previous-item {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.vjs-icon-previous-item:before {\\n content: \\\"\\\\f120\\\"; }\\n.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder, .vjs-icon-picture-in-picture-enter {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before, .vjs-icon-picture-in-picture-enter:before {\\n content: \\\"\\\\f121\\\"; }\\n.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder, .vjs-icon-picture-in-picture-exit {\\n font-family: VideoJS;\\n font-weight: 400;\\n font-style: normal; }\\n.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before, .vjs-icon-picture-in-picture-exit:before {\\n content: \\\"\\\\f122\\\"; }\\n.video-js {\\n display: block;\\n vertical-align: top;\\n box-sizing: border-box;\\n color: #fff;\\n background-color: #000;\\n position: relative;\\n padding: 0;\\n font-size: 10px;\\n line-height: 1;\\n font-weight: 400;\\n font-style: normal;\\n font-family: Arial,Helvetica,sans-serif;\\n word-break: initial; }\\n.video-js:-moz-full-screen {\\n position: absolute; }\\n.video-js:-webkit-full-screen {\\n width: 100% !important;\\n height: 100% !important; }\\n.video-js[tabindex=\\\"-1\\\"] {\\n outline: 0; }\\n.video-js *, .video-js :after, .video-js :before {\\n box-sizing: inherit; }\\n.video-js ul {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n list-style-position: outside;\\n margin-left: 0;\\n margin-right: 0;\\n margin-top: 0;\\n margin-bottom: 0; }\\n.video-js.vjs-16-9, .video-js.vjs-4-3, .video-js.vjs-fluid {\\n width: 100%;\\n max-width: 100%;\\n height: 0; }\\n.video-js.vjs-16-9 {\\n padding-top: 56.25%; }\\n.video-js.vjs-4-3 {\\n padding-top: 75%; }\\n.video-js.vjs-fill {\\n width: 100%;\\n height: 100%; }\\n.video-js .vjs-tech {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\nbody.vjs-full-window {\\n padding: 0;\\n margin: 0;\\n height: 100%; }\\n.vjs-full-window .video-js.vjs-fullscreen {\\n position: fixed;\\n overflow: hidden;\\n z-index: 1000;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n right: 0; }\\n.video-js.vjs-fullscreen {\\n width: 100% !important;\\n height: 100% !important;\\n padding-top: 0 !important; }\\n.video-js.vjs-fullscreen.vjs-user-inactive {\\n cursor: none; }\\n.vjs-hidden {\\n display: none !important; }\\n.vjs-disabled {\\n opacity: .5;\\n cursor: default; }\\n.video-js .vjs-offscreen {\\n height: 1px;\\n left: -9999px;\\n position: absolute;\\n top: 0;\\n width: 1px; }\\n.vjs-lock-showing {\\n display: block !important;\\n opacity: 1;\\n visibility: visible; }\\n.vjs-no-js {\\n padding: 20px;\\n color: #fff;\\n background-color: #000;\\n font-size: 18px;\\n font-family: Arial,Helvetica,sans-serif;\\n text-align: center;\\n width: 300px;\\n height: 150px;\\n margin: 0 auto; }\\n.vjs-no-js a, .vjs-no-js a:visited {\\n color: #66a8cc; }\\n.video-js .vjs-big-play-button {\\n font-size: 3em;\\n line-height: 1.5em;\\n height: 1.63332em;\\n width: 3em;\\n display: block;\\n position: absolute;\\n top: 10px;\\n left: 10px;\\n padding: 0;\\n cursor: pointer;\\n opacity: 1;\\n border: .06666em solid #fff;\\n background-color: #2b333f;\\n background-color: rgba(43, 51, 63, 0.7);\\n border-radius: .3em;\\n transition: all .4s; }\\n.vjs-big-play-centered .vjs-big-play-button {\\n top: 50%;\\n left: 50%;\\n margin-top: -.81666em;\\n margin-left: -1.5em; }\\n.video-js .vjs-big-play-button:focus, .video-js:hover .vjs-big-play-button {\\n border-color: #fff;\\n background-color: #73859f;\\n background-color: rgba(115, 133, 159, 0.5);\\n transition: all 0s; }\\n.vjs-controls-disabled .vjs-big-play-button, .vjs-error .vjs-big-play-button, .vjs-has-started .vjs-big-play-button, .vjs-using-native-controls .vjs-big-play-button {\\n display: none; }\\n.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button {\\n display: block; }\\n.video-js button {\\n background: 0 0;\\n border: none;\\n color: inherit;\\n display: inline-block;\\n font-size: inherit;\\n line-height: inherit;\\n text-transform: none;\\n text-decoration: none;\\n transition: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none; }\\n.vjs-control .vjs-button {\\n width: 100%;\\n height: 100%; }\\n.video-js .vjs-control.vjs-close-button {\\n cursor: pointer;\\n height: 3em;\\n position: absolute;\\n right: 0;\\n top: .5em;\\n z-index: 2; }\\n.video-js .vjs-modal-dialog {\\n background: rgba(0, 0, 0, 0.8);\\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0));\\n overflow: auto; }\\n.video-js .vjs-modal-dialog > * {\\n box-sizing: border-box; }\\n.vjs-modal-dialog .vjs-modal-dialog-content {\\n font-size: 1.2em;\\n line-height: 1.5;\\n padding: 20px 24px;\\n z-index: 1; }\\n.vjs-menu-button {\\n cursor: pointer; }\\n.vjs-menu-button.vjs-disabled {\\n cursor: default; }\\n.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu {\\n display: none; }\\n.vjs-menu .vjs-menu-content {\\n display: block;\\n padding: 0;\\n margin: 0;\\n font-family: Arial,Helvetica,sans-serif;\\n overflow: auto; }\\n.vjs-menu .vjs-menu-content > * {\\n box-sizing: border-box; }\\n.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu {\\n display: none; }\\n.vjs-menu li {\\n list-style: none;\\n margin: 0;\\n padding: .2em 0;\\n line-height: 1.4em;\\n font-size: 1.2em;\\n text-align: center;\\n text-transform: lowercase; }\\n.js-focus-visible .vjs-menu li.vjs-menu-item:hover, .vjs-menu li.vjs-menu-item:focus, .vjs-menu li.vjs-menu-item:hover {\\n background-color: #73859f;\\n background-color: rgba(115, 133, 159, 0.5); }\\n.js-focus-visible .vjs-menu li.vjs-selected:hover, .vjs-menu li.vjs-selected, .vjs-menu li.vjs-selected:focus, .vjs-menu li.vjs-selected:hover {\\n background-color: #fff;\\n color: #2b333f; }\\n.vjs-menu li.vjs-menu-title {\\n text-align: center;\\n text-transform: uppercase;\\n font-size: 1em;\\n line-height: 2em;\\n padding: 0;\\n margin: 0 0 .3em 0;\\n font-weight: 700;\\n cursor: default; }\\n.vjs-menu-button-popup .vjs-menu {\\n display: none;\\n position: absolute;\\n bottom: 0;\\n width: 10em;\\n left: -3em;\\n height: 0;\\n margin-bottom: 1.5em;\\n border-top-color: rgba(43, 51, 63, 0.7); }\\n.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\n background-color: #2b333f;\\n background-color: rgba(43, 51, 63, 0.7);\\n position: absolute;\\n width: 100%;\\n bottom: 1.5em;\\n max-height: 15em; }\\n.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content, .vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\n max-height: 5em; }\\n.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\n max-height: 10em; }\\n.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\n max-height: 14em; }\\n.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content, .vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, .vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\n max-height: 25em; }\\n.vjs-menu-button-popup .vjs-menu.vjs-lock-showing, .vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu {\\n display: block; }\\n.video-js .vjs-menu-button-inline {\\n transition: all .4s;\\n overflow: hidden; }\\n.video-js .vjs-menu-button-inline:before {\\n width: 2.222222222em; }\\n.video-js .vjs-menu-button-inline.vjs-slider-active, .video-js .vjs-menu-button-inline:focus, .video-js .vjs-menu-button-inline:hover, .video-js.vjs-no-flex .vjs-menu-button-inline {\\n width: 12em; }\\n.vjs-menu-button-inline .vjs-menu {\\n opacity: 0;\\n height: 100%;\\n width: auto;\\n position: absolute;\\n left: 4em;\\n top: 0;\\n padding: 0;\\n margin: 0;\\n transition: all .4s; }\\n.vjs-menu-button-inline.vjs-slider-active .vjs-menu, .vjs-menu-button-inline:focus .vjs-menu, .vjs-menu-button-inline:hover .vjs-menu {\\n display: block;\\n opacity: 1; }\\n.vjs-no-flex .vjs-menu-button-inline .vjs-menu {\\n display: block;\\n opacity: 1;\\n position: relative;\\n width: auto; }\\n.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu, .vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, .vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu {\\n width: auto; }\\n.vjs-menu-button-inline .vjs-menu-content {\\n width: auto;\\n height: 100%;\\n margin: 0;\\n overflow: hidden; }\\n.video-js .vjs-control-bar {\\n display: none;\\n width: 100%;\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 3em;\\n background-color: #2b333f;\\n background-color: rgba(43, 51, 63, 0.7); }\\n.vjs-has-started .vjs-control-bar {\\n display: flex;\\n visibility: visible;\\n opacity: 1;\\n transition: visibility .1s,opacity .1s; }\\n.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\\n visibility: visible;\\n opacity: 0;\\n transition: visibility 1s,opacity 1s; }\\n.vjs-controls-disabled .vjs-control-bar, .vjs-error .vjs-control-bar, .vjs-using-native-controls .vjs-control-bar {\\n display: none !important; }\\n.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\\n opacity: 1;\\n visibility: visible; }\\n.vjs-has-started.vjs-no-flex .vjs-control-bar {\\n display: table; }\\n.video-js .vjs-control {\\n position: relative;\\n text-align: center;\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n width: 4em;\\n flex: none; }\\n.vjs-button > .vjs-icon-placeholder:before {\\n font-size: 1.8em;\\n line-height: 1.67; }\\n.video-js .vjs-control:focus, .video-js .vjs-control:focus:before, .video-js .vjs-control:hover:before {\\n text-shadow: 0 0 1em #fff; }\\n.video-js .vjs-control-text {\\n border: 0;\\n clip: rect(0 0 0 0);\\n height: 1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px; }\\n.vjs-no-flex .vjs-control {\\n display: table-cell;\\n vertical-align: middle; }\\n.video-js .vjs-custom-control-spacer {\\n display: none; }\\n.video-js .vjs-progress-control {\\n cursor: pointer;\\n flex: auto;\\n display: flex;\\n align-items: center;\\n min-width: 4em;\\n touch-action: none; }\\n.video-js .vjs-progress-control.disabled {\\n cursor: default; }\\n.vjs-live .vjs-progress-control {\\n display: none; }\\n.vjs-liveui .vjs-progress-control {\\n display: flex;\\n align-items: center; }\\n.vjs-no-flex .vjs-progress-control {\\n width: auto; }\\n.video-js .vjs-progress-holder {\\n flex: auto;\\n transition: all .2s;\\n height: .3em; }\\n.video-js .vjs-progress-control .vjs-progress-holder {\\n margin: 0 10px; }\\n.video-js .vjs-progress-control:hover .vjs-progress-holder {\\n font-size: 1.6666666667em; }\\n.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled {\\n font-size: 1em; }\\n.video-js .vjs-progress-holder .vjs-load-progress, .video-js .vjs-progress-holder .vjs-load-progress div, .video-js .vjs-progress-holder .vjs-play-progress {\\n position: absolute;\\n display: block;\\n height: 100%;\\n margin: 0;\\n padding: 0;\\n width: 0; }\\n.video-js .vjs-play-progress {\\n background-color: #fff; }\\n.video-js .vjs-play-progress:before {\\n font-size: .9em;\\n position: absolute;\\n right: -.5em;\\n top: -.3333333333em;\\n z-index: 1; }\\n.video-js .vjs-load-progress {\\n background: rgba(115, 133, 159, 0.5); }\\n.video-js .vjs-load-progress div {\\n background: rgba(115, 133, 159, 0.75); }\\n.video-js .vjs-time-tooltip {\\n background-color: #fff;\\n background-color: rgba(255, 255, 255, 0.8);\\n border-radius: .3em;\\n color: #000;\\n float: right;\\n font-family: Arial,Helvetica,sans-serif;\\n font-size: 1em;\\n padding: 6px 8px 8px 8px;\\n pointer-events: none;\\n position: absolute;\\n top: -3.4em;\\n visibility: hidden;\\n z-index: 1; }\\n.video-js .vjs-progress-holder:focus .vjs-time-tooltip {\\n display: none; }\\n.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip, .video-js .vjs-progress-control:hover .vjs-time-tooltip {\\n display: block;\\n font-size: .6em;\\n visibility: visible; }\\n.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip {\\n font-size: 1em; }\\n.video-js .vjs-progress-control .vjs-mouse-display {\\n display: none;\\n position: absolute;\\n width: 1px;\\n height: 100%;\\n background-color: #000;\\n z-index: 1; }\\n.vjs-no-flex .vjs-progress-control .vjs-mouse-display {\\n z-index: 0; }\\n.video-js .vjs-progress-control:hover .vjs-mouse-display {\\n display: block; }\\n.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display {\\n visibility: hidden;\\n opacity: 0;\\n transition: visibility 1s,opacity 1s; }\\n.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display {\\n display: none; }\\n.vjs-mouse-display .vjs-time-tooltip {\\n color: #fff;\\n background-color: #000;\\n background-color: rgba(0, 0, 0, 0.8); }\\n.video-js .vjs-slider {\\n position: relative;\\n cursor: pointer;\\n padding: 0;\\n margin: 0 .45em 0 .45em;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n background-color: #73859f;\\n background-color: rgba(115, 133, 159, 0.5); }\\n.video-js .vjs-slider.disabled {\\n cursor: default; }\\n.video-js .vjs-slider:focus {\\n text-shadow: 0 0 1em #fff;\\n box-shadow: 0 0 1em #fff; }\\n.video-js .vjs-mute-control {\\n cursor: pointer;\\n flex: none; }\\n.video-js .vjs-volume-control {\\n cursor: pointer;\\n margin-right: 1em;\\n display: flex; }\\n.video-js .vjs-volume-control.vjs-volume-horizontal {\\n width: 5em; }\\n.video-js .vjs-volume-panel .vjs-volume-control {\\n visibility: visible;\\n opacity: 0;\\n width: 1px;\\n height: 1px;\\n margin-left: -1px; }\\n.video-js .vjs-volume-panel {\\n transition: width 1s; }\\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active, .video-js .vjs-volume-panel .vjs-volume-control:active, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control, .video-js .vjs-volume-panel.vjs-hover .vjs-volume-control, .video-js .vjs-volume-panel:active .vjs-volume-control, .video-js .vjs-volume-panel:focus .vjs-volume-control {\\n visibility: visible;\\n opacity: 1;\\n position: relative;\\n transition: visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s; }\\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal {\\n width: 5em;\\n height: 3em;\\n margin-right: 0; }\\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical {\\n left: -3.5em;\\n transition: left 0s; }\\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active {\\n width: 10em;\\n transition: width .1s; }\\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only {\\n width: 4em; }\\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical {\\n height: 8em;\\n width: 3em;\\n left: -3000em;\\n transition: visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s; }\\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal {\\n transition: visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s; }\\n.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal {\\n width: 5em;\\n height: 3em;\\n visibility: visible;\\n opacity: 1;\\n position: relative;\\n transition: none; }\\n.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical, .video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical {\\n position: absolute;\\n bottom: 3em;\\n left: .5em; }\\n.video-js .vjs-volume-panel {\\n display: flex; }\\n.video-js .vjs-volume-bar {\\n margin: 1.35em .45em; }\\n.vjs-volume-bar.vjs-slider-horizontal {\\n width: 5em;\\n height: .3em; }\\n.vjs-volume-bar.vjs-slider-vertical {\\n width: .3em;\\n height: 5em;\\n margin: 1.35em auto; }\\n.video-js .vjs-volume-level {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n background-color: #fff; }\\n.video-js .vjs-volume-level:before {\\n position: absolute;\\n font-size: .9em; }\\n.vjs-slider-vertical .vjs-volume-level {\\n width: .3em; }\\n.vjs-slider-vertical .vjs-volume-level:before {\\n top: -.5em;\\n left: -.3em; }\\n.vjs-slider-horizontal .vjs-volume-level {\\n height: .3em; }\\n.vjs-slider-horizontal .vjs-volume-level:before {\\n top: -.3em;\\n right: -.5em; }\\n.video-js .vjs-volume-panel.vjs-volume-panel-vertical {\\n width: 4em; }\\n.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level {\\n height: 100%; }\\n.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {\\n width: 100%; }\\n.video-js .vjs-volume-vertical {\\n width: 3em;\\n height: 8em;\\n bottom: 8em;\\n background-color: #2b333f;\\n background-color: rgba(43, 51, 63, 0.7); }\\n.video-js .vjs-volume-horizontal .vjs-menu {\\n left: -2em; }\\n.vjs-poster {\\n display: inline-block;\\n vertical-align: middle;\\n background-repeat: no-repeat;\\n background-position: 50% 50%;\\n background-size: contain;\\n background-color: #000;\\n cursor: pointer;\\n margin: 0;\\n padding: 0;\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n height: 100%; }\\n.vjs-has-started .vjs-poster {\\n display: none; }\\n.vjs-audio.vjs-has-started .vjs-poster {\\n display: block; }\\n.vjs-using-native-controls .vjs-poster {\\n display: none; }\\n.video-js .vjs-live-control {\\n display: flex;\\n align-items: flex-start;\\n flex: auto;\\n font-size: 1em;\\n line-height: 3em; }\\n.vjs-no-flex .vjs-live-control {\\n display: table-cell;\\n width: auto;\\n text-align: left; }\\n.video-js.vjs-liveui .vjs-live-control, .video-js:not(.vjs-live) .vjs-live-control {\\n display: none; }\\n.video-js .vjs-seek-to-live-control {\\n cursor: pointer;\\n flex: none;\\n display: inline-flex;\\n height: 100%;\\n padding-left: .5em;\\n padding-right: .5em;\\n font-size: 1em;\\n line-height: 3em;\\n width: auto;\\n min-width: 4em; }\\n.vjs-no-flex .vjs-seek-to-live-control {\\n display: table-cell;\\n width: auto;\\n text-align: left; }\\n.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control, .video-js:not(.vjs-live) .vjs-seek-to-live-control {\\n display: none; }\\n.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge {\\n cursor: auto; }\\n.vjs-seek-to-live-control .vjs-icon-placeholder {\\n margin-right: .5em;\\n color: #888; }\\n.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder {\\n color: red; }\\n.video-js .vjs-time-control {\\n flex: none;\\n font-size: 1em;\\n line-height: 3em;\\n min-width: 2em;\\n width: auto;\\n padding-left: 1em;\\n padding-right: 1em; }\\n.vjs-live .vjs-time-control {\\n display: none; }\\n.video-js .vjs-current-time, .vjs-no-flex .vjs-current-time {\\n display: none; }\\n.video-js .vjs-duration, .vjs-no-flex .vjs-duration {\\n display: none; }\\n.vjs-time-divider {\\n display: none;\\n line-height: 3em; }\\n.vjs-live .vjs-time-divider {\\n display: none; }\\n.video-js .vjs-play-control {\\n cursor: pointer; }\\n.video-js .vjs-play-control .vjs-icon-placeholder {\\n flex: none; }\\n.vjs-text-track-display {\\n position: absolute;\\n bottom: 3em;\\n left: 0;\\n right: 0;\\n top: 0;\\n pointer-events: none; }\\n.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {\\n bottom: 1em; }\\n.video-js .vjs-text-track {\\n font-size: 1.4em;\\n text-align: center;\\n margin-bottom: .1em; }\\n.vjs-subtitles {\\n color: #fff; }\\n.vjs-captions {\\n color: #fc6; }\\n.vjs-tt-cue {\\n display: block; }\\nvideo::-webkit-media-text-track-display {\\n transform: translateY(-3em); }\\n.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display {\\n transform: translateY(-1.5em); }\\n.video-js .vjs-picture-in-picture-control {\\n cursor: pointer;\\n flex: none; }\\n.video-js .vjs-fullscreen-control {\\n cursor: pointer;\\n flex: none; }\\n.vjs-playback-rate .vjs-playback-rate-value, .vjs-playback-rate > .vjs-menu-button {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\n.vjs-playback-rate .vjs-playback-rate-value {\\n pointer-events: none;\\n font-size: 1.5em;\\n line-height: 2;\\n text-align: center; }\\n.vjs-playback-rate .vjs-menu {\\n width: 4em;\\n left: 0; }\\n.vjs-error .vjs-error-display .vjs-modal-dialog-content {\\n font-size: 1.4em;\\n text-align: center; }\\n.vjs-error .vjs-error-display:before {\\n color: #fff;\\n content: \\\"X\\\";\\n font-family: Arial,Helvetica,sans-serif;\\n font-size: 4em;\\n left: 0;\\n line-height: 1;\\n margin-top: -.5em;\\n position: absolute;\\n text-shadow: .05em .05em .1em #000;\\n text-align: center;\\n top: 50%;\\n vertical-align: middle;\\n width: 100%; }\\n.vjs-loading-spinner {\\n display: none;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n margin: -25px 0 0 -25px;\\n opacity: .85;\\n text-align: left;\\n border: 6px solid rgba(43, 51, 63, 0.7);\\n box-sizing: border-box;\\n background-clip: padding-box;\\n width: 50px;\\n height: 50px;\\n border-radius: 25px;\\n visibility: hidden; }\\n.vjs-seeking .vjs-loading-spinner, .vjs-waiting .vjs-loading-spinner {\\n display: block;\\n -webkit-animation: vjs-spinner-show 0s linear .3s forwards;\\n animation: vjs-spinner-show 0s linear .3s forwards; }\\n.vjs-loading-spinner:after, .vjs-loading-spinner:before {\\n content: \\\"\\\";\\n position: absolute;\\n margin: -6px;\\n box-sizing: inherit;\\n width: inherit;\\n height: inherit;\\n border-radius: inherit;\\n opacity: 1;\\n border: inherit;\\n border-color: transparent;\\n border-top-color: #fff; }\\n.vjs-seeking .vjs-loading-spinner:after, .vjs-seeking .vjs-loading-spinner:before, .vjs-waiting .vjs-loading-spinner:after, .vjs-waiting .vjs-loading-spinner:before {\\n -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;\\n animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; }\\n.vjs-seeking .vjs-loading-spinner:before, .vjs-waiting .vjs-loading-spinner:before {\\n border-top-color: #fff; }\\n.vjs-seeking .vjs-loading-spinner:after, .vjs-waiting .vjs-loading-spinner:after {\\n border-top-color: #fff;\\n -webkit-animation-delay: .44s;\\n animation-delay: .44s; }\\n@keyframes vjs-spinner-show {\\n to {\\n visibility: visible; } }\\n@-webkit-keyframes vjs-spinner-show {\\n to {\\n visibility: visible; } }\\n@keyframes vjs-spinner-spin {\\n 100% {\\n transform: rotate(360deg); } }\\n@-webkit-keyframes vjs-spinner-spin {\\n 100% {\\n -webkit-transform: rotate(360deg); } }\\n@keyframes vjs-spinner-fade {\\n 0% {\\n border-top-color: #73859f; }\\n 20% {\\n border-top-color: #73859f; }\\n 35% {\\n border-top-color: #fff; }\\n 60% {\\n border-top-color: #73859f; }\\n 100% {\\n border-top-color: #73859f; } }\\n@-webkit-keyframes vjs-spinner-fade {\\n 0% {\\n border-top-color: #73859f; }\\n 20% {\\n border-top-color: #73859f; }\\n 35% {\\n border-top-color: #fff; }\\n 60% {\\n border-top-color: #73859f; }\\n 100% {\\n border-top-color: #73859f; } }\\n.vjs-chapters-button .vjs-menu ul {\\n width: 24em; }\\n.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder {\\n vertical-align: middle;\\n display: inline-block;\\n margin-bottom: -.1em; }\\n.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before {\\n font-family: VideoJS;\\n content: \\\"\\\";\\n font-size: 1.5em;\\n line-height: inherit; }\\n.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder {\\n vertical-align: middle;\\n display: inline-block;\\n margin-bottom: -.1em; }\\n.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before {\\n font-family: VideoJS;\\n content: \\\" \\\";\\n font-size: 1.5em;\\n line-height: inherit; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-audio-button, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-captions-button, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-chapters-button, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-current-time, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-descriptions-button, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-duration, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-playback-rate, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-remaining-time, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-subtitles-button, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-time-divider, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-control, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-audio-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-captions-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-chapters-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-current-time, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-descriptions-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-duration, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-playback-rate, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-remaining-time, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subtitles-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-time-divider, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-control, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-audio-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-captions-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-chapters-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-current-time, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-descriptions-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-duration, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-playback-rate, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-remaining-time, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-subtitles-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-time-divider, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-control {\\n display: none; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover {\\n width: auto;\\n width: initial; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subs-caps-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button {\\n display: none; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-custom-control-spacer, .video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer {\\n flex: auto;\\n display: block; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer, .video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer {\\n width: auto; }\\n.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-progress-control, .video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-progress-control {\\n display: none; }\\n.vjs-modal-dialog.vjs-text-track-settings {\\n background-color: #2b333f;\\n background-color: rgba(43, 51, 63, 0.75);\\n color: #fff;\\n height: 70%; }\\n.vjs-text-track-settings .vjs-modal-dialog-content {\\n display: table; }\\n.vjs-text-track-settings .vjs-track-settings-colors, .vjs-text-track-settings .vjs-track-settings-controls, .vjs-text-track-settings .vjs-track-settings-font {\\n display: table-cell; }\\n.vjs-text-track-settings .vjs-track-settings-controls {\\n text-align: right;\\n vertical-align: bottom; }\\n@supports (display: grid) {\\n .vjs-text-track-settings .vjs-modal-dialog-content {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n grid-template-rows: 1fr;\\n padding: 20px 24px 0 24px; }\\n .vjs-track-settings-controls .vjs-default-button {\\n margin-bottom: 20px; }\\n .vjs-text-track-settings .vjs-track-settings-controls {\\n grid-column: 1/-1; }\\n .vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content, .vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content, .vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content {\\n grid-template-columns: 1fr; } }\\n.vjs-track-setting > select {\\n margin-right: 1em;\\n margin-bottom: .5em; }\\n.vjs-text-track-settings fieldset {\\n margin: 5px;\\n padding: 3px;\\n border: none; }\\n.vjs-text-track-settings fieldset span {\\n display: inline-block; }\\n.vjs-text-track-settings fieldset span > select {\\n max-width: 7.3em; }\\n.vjs-text-track-settings legend {\\n color: #fff;\\n margin: 0 0 5px 0; }\\n.vjs-text-track-settings .vjs-label {\\n position: absolute;\\n clip: rect(1px 1px 1px 1px);\\n clip: rect(1px, 1px, 1px, 1px);\\n display: block;\\n margin: 0 0 5px 0;\\n padding: 0;\\n border: 0;\\n height: 1px;\\n width: 1px;\\n overflow: hidden; }\\n.vjs-track-settings-controls button:active, .vjs-track-settings-controls button:focus {\\n outline-style: solid;\\n outline-width: medium;\\n background-image: linear-gradient(0deg, #fff 88%, #73859f 100%); }\\n.vjs-track-settings-controls button:hover {\\n color: rgba(43, 51, 63, 0.75); }\\n.vjs-track-settings-controls button {\\n background-color: #fff;\\n background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%);\\n color: #2b333f;\\n cursor: pointer;\\n border-radius: 2px; }\\n.vjs-track-settings-controls .vjs-default-button {\\n margin-right: 1em; }\\n@media print {\\n .video-js > :not(.vjs-tech):not(.vjs-poster) {\\n visibility: hidden; } }\\n.vjs-resize-manager {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n border: none;\\n z-index: -1000; }\\n.js-focus-visible .video-js :focus:not(.focus-visible) {\\n outline: 0;\\n background: 0 0; }\\n.video-js .vjs-menu :focus:not(:focus-visible), .video-js :focus:not(:focus-visible) {\\n outline: 0;\\n background: 0 0; }\\n\", \"\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL2Rpc3QvYWx0L3ZpZGVvLWpzLWNkbi5taW4uY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlby5qcy9kaXN0L2FsdC92aWRlby1qcy1jZG4ubWluLmNzcz83YWY2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAY2hhcnNldCBcXFwiVVRGLThcXFwiO1xcbi52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1tb2RhbC1kaWFsb2csIC52anMtYnV0dG9uID4gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1tb2RhbC1kaWFsb2cgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG4udmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1idXR0b24gPiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkRrQUFzQUFBQUFHNmdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQkNBQUFBRHNBQUFCVUlJc2xlazlUTHpJQUFBRkVBQUFBUGdBQUFGWlJpVjNoWTIxaGNBQUFBWVFBQUFEYUFBQURQdjc0OS9wbmJIbG1BQUFDWUFBQUMzQUFBQkhRWmc2T2NXaGxZV1FBQUEzUUFBQUFLd0FBQURZWncyNTFhR2hsWVFBQURmd0FBQUFkQUFBQUpBK1JDTEZvYlhSNEFBQU9IQUFBQUJNQUFBQ003NDRBQUd4dlkyRUFBQTR3QUFBQVNBQUFBRWhGNmtxdWJXRjRjQUFBRG5nQUFBQWZBQUFBSUFFMEFJRnVZVzFsQUFBT21BQUFBU1VBQUFJSzFjZjFvSEJ2YzNRQUFBL0FBQUFCSkFBQUFkUEV4WXVOZUp4allHUmdZT0JpTUdDd1kyQnljZk1KWWVETFNTekpZNUJpWUdHQUFKQThNcHN4SnpNOWtZRUR4Z1BLc1lCcERpQm1nNGdDQUNZN0JVZ0FlSnhqWUdTN3dUaUJnWldCZ2FXUTVSa0RBOE12Q00wY3d4RE9lSTZCZ1ltQmxaa0JLd2hJYzAxaGNQakkrRkdKSGNSZHlBNFJaZ1FSQURLM0N4RUFBSGljN2RGWmJzTWdBRVhSUzB5Y3labm5PZUc3eStxQzhwVTFkSHVzSU9YeHVveGFPbHdaWVdRQjBBZWE0cXVJRU40RTlMektiS2p6RGVNNkgvbXVhNkxtYy9wOHloZzBsdmRZeDE1Wkc4dU9MUU9Hak1wM0V6cW16Sml6WU1tS05SdTI3Tmh6NE1pSk14ZXUzTGp6NEVrcW03VDhQNTJHOFBQM2xuVE9WaysrWjZpTjZRWnpOTjFGN3B0dU43ZUdPakRVb2FHT0RIVnN1dlU4TWRUTzlIZDVhcWd6UTUwYjZzSlFsNGE2TXRTMW9XNE1kV3VvTzBQZEcrckJVSStHZWpMVXM2RmVEUFZxcURkRHZSdnF3MUNmaHBxTTlBdDBpRkxhQUFCNG5KMVlEWEJUVlJaKzUvMjJUVWxKOHdlMHBIbEptN1JKZjVPOEYyajZFeW1sU1BrcHhhTDhVMnhwYTNES2owQ0JoYzJJVzRlV0tTb2tJb0xzdU1xc3NNNjRmK2pBNEhTZFdYWFhzY0JxNjdJT3MzRlhaMVpZV1Z5UkZkbzg5OXlYdElCUVo5MGs3NzE3enozdjNIUFBPZmQ4NTRZQ0NqOWNMOWRMMFJRRk9xQ2JHSm5ySGI1RWF5aUtJV044aUEvaFdCYmxvNmhVV204VHRDRHdFODBXTUp1cy9pcnd5eE9keGVCME1EYjE0Vk5KSG5YWW9MTFNsNkZmQ1VZTzluWVBUQThFcGc5MDkwTHByZmJCYloyaFkwVWxKVVhIUXAzL3Z0V2tTNkVCdjgrclBNcTV1OTY5MmYvZE54Sk5pcXdDMXhQRTlUQ1VnQ3NTZFFXZ0UzWFFEMjVsa0c0Q04yeG1UY09YV0JPeXNlcjZSTjZLbkdiS1NibVEzK2QwT0kxbTJXOFF6TExrSTJzeWtyV0FnSkpFdEE4dkdHVy8yUStDbVQzbjh6Uzl3Wnd1MkRDdnR1WktaTjN4a3JMaDM2eUNadVVvbVFTcUdwWTh0LzI1VmZIVmh3OHo0ZWJHQnRmTGIweWE5UENhRGMrOGRHVHZrMmRzaDZ6N1d6dm93bFhLVVNXbzlNSjE1YTNLckVQMmxvT3IyT2podzZpVzZoZjJCRGRFY2NRdlpHcGFBeTdZb3ZTd3E4a3I3SEdsbHhwZDcxcmtTNkcwU2YxMXNsOU92TUsxK2p3UFBPRHhqVXdrT2ltOUNVM2l4MXdOalhEZm1KU0VuNjE4QnM2bHBXd1VwVSs4UENxTE1ZNjUwempxOFZoQ0lQMTdORUtUeDNlYUxMK3M1UGk2eUpXYVdqVEhMUjFqWXpQU1Y5VkYvNk9qZGIvMWtPM01rM3VoSEMweDZnYzFCamxLUStuUUZ4VFlkYUprWjd5U1Z4TEJiaFIxZHNib05YcDF0Q1lLVzJMUmFFenBZY0l4MkJLTnhhTDBaYVVuU3FmRm9pTmhIS1IvR2tYNlBXVVNBYUplbFFhcVpMMUVwb0hOc2FqU0V5UFNvSjlJamhJeFRkakhMbXdadmhSRE9pRlRZL1llUW52clZabWlUUXRHbmNFQ1h0RlRCWkxPVnd3TVJnb1hIQWtYek16UG4xbkFKSjhqWVNiTURhcU4yd2FHTHpOaGloL2JaeW5VQk1wSVdTZzdWWWk3RFJ4Mm04QUxrSWRSQ0p3STZBckp4MkVJOGthRFdlVFFLZUFGazlmamwvMUF2d2t0alExUDdOanlNR1F5ZmQ0dmppcFg2TS9pNTJEN0NxODBrcWxjeEVjR1hSci9GRWNnczB1NXVHZ0I0Vld1TUZmcGRuMlJlNkhpM1Bxem14V0tzejYrYWUyUG45aFhYdy9mcU04NTlVaUdDMG9LWVlJTEpCcUpyc24xWjFFNXFPczlyUUNpVVFSUkVqbTh5SmNiSEY1Y1VKdWZYMXZBSGxlZncwWGdVb2JvUzNFVGZRbFR4QkM0U090dUU4VlBSSlRCU0NRU2paQ3BrN0dxenUrbWFzYVoyeTdaamVoaG80RjNnODJCTkRrQUhwT1JHNCtPQ1MrZjZKVFBtdFJuL1BIMWtjaDZkMDRzcDdBUWIyNWFRL3BxVXlYZVE4dnJlYkc4T1lRZFhPUSs1ODV1MHNkVzlycWFselJVUmlKKzlGNE13ZVJGcktVamwxR1VZaEgxQTI3V09IdzVjVEZTRlBNbzlFZVVJR25RVFpISWFKN0FITGFPS3NPT0RhTkY5amtCallHMlFFc1EyeGpNVUF4MmJCRWJlVEJXTUh3c2tCam5ncTU2Uy95ZmdrQm5XQmE0SzlzcUt0cTJ0MVVJOFM5SGU1WHVCUmJhd0FkYXRyUUVBaTMwQWtzMitMTThXZUNiYWxWWmtXTnlsdkorZHFKbnpWYitPSGxTb0tXOG5QQ1A3UmQrQ2NaMkRkV0FHcUoyQ0JGT3BoZ3l3RkZDRkJOdGZBYkd0TlBCQ3d4dnlnSGVZTVpNWTlaYm9CcXdxL3BWcnNiZ041dGt2MTUyT0RsYk1maXF3R01CZ3hhNEV4ejNRaG92UklVcDZhY3FabVF6UnEweXBEWFMyVFBMVDAyWUlrUUVUbk9FNDQ1b09HeE9tWEFxVUpOTkc3WGd1cE1qUHEydWE5YXNyajV5WS95dUt0ZU8xS3gwWU5KVHVmcmlyTGUxbVpuYXQ3T0w2cm5VZENXZW5wVzZJOG1BbmJzWThLV3MxUHVTb3ZDVzlBL1oyNVBRMjRhN2NOT3FnbVRrTG1CTWdoNFRIZ2M0YjlrMklWdjEvZy9GNW5HbGp3UExmT2dIQXpKemg0NVYvNCtXZW5Uem1NdFI1Wjd1czJUeXM5MDlVSHFyUFk3S2Jja294UnZSSGhtVmMzY0pHRTk3dW1sMFIxUzBqZFVMVmw3RXZadERGVkJGMzVOOWNFZGpwZ21BaU9sRlorRHRvaDkzK0QzenpIcjhSUk5aUWhuQ05NTmJjZWdPdnBFd1pvTCswNmNKUTA3aCt0aDNmWi83UFZiVkM2bmdUQVYvS29MRnVPNisyS0ZjVTY1MWdFYjV1Z1BTSWIxRCtYcDhWNCtrM3NFSUdudzVtWWU0SWY0azFsRllyNlNDem1NMkVROGlXdG13am5CSTlrVHdlMVRsZkFtWGg3SDAyYnk5ZlcyZ3NqS3d0djBhYVVSS2lsNE9kVjdyREwxTVhJRk5yaGR4b2hjWlhZVG5xNDdXaXNyS2l0YU9iYmY1K3l2a0xpNUo2bENOWlorQjZHQzM4Vk5CWkJEaWRTUy8rbVN2aDZzK3NyZ0M4cHlLTXZEdHQrZGUzYzlmVTc2WlBmdU04dWQ0S3YwZnlQL0xxZmVwTVQvM29aeFNxcFphVGExRGFRWUxZOFRGc0hZYldZc1BvUmhSV2ZMNWVTU1FiaFVHZ0dDM1lMYlZNazZQaXRURk5HcEFzTnJDNkQxVk5CS2dCSE1lamFpdVJXRVdHZ3NTREJUSmpxV0lsOGtKTGxzYUxKMnRYRHI2eEdmVDg1Yk0yUTA2YTQ2eDJIVGd2ZG5WOHo1WUR5LzI3SjR6dDZ4MlZ0a3pqb1lwa3EzNmthQnI0ZVFTZzd0eWlWd2VXdWJYWnVndGFkbDU4eWRhcGZiT1JmS3NEVHVaME9CZ3g0Y2ZkakNmNXRiV05JVG5MMTIwZmRPaTFSVjFDM3VLR3pOZHdZTGNNdlozQnhvUHlUT0NEMVh2WFRwN1UxMGdXQ1ZtVFY5YjNyMnowU2tHV292YjJocDlJODlPOGEyc21seWFPOG11TVUrZFJtdHpwNjBJekFvRnBqTHIxbjM4OGJvTHlmMGRSdnhoc0haMHFiV3FEa3dxdnZwa2o0bDBmWTZFSVhSaTVzUVNyQXZzVll3WFJ5NHFKMkVWdEQxQU43YTBIV3RoOXltdkwxeGMzV1RVS0svVEFIQS9iWERWdFZXZk9NZnVHeEdadjRMbi9qVnI5amMzajF5TXYwdG5kbXl0OVZxODhZOWdIMXd0TFgzS1dqb3Q1KytqV0hnQW9aWmtRMTR3R1EyMEZsaTcxVW1LSkF5NHhLTVNUR2JWZHliVzdGRERBdXQ5WHBENUF6V3JZTzd6UThxZmZxRjgrWW5kL2NsckhjZHl4R3kzYS8zK21mTm56Qy9jQnN2ZVRqblR2WGYxbzZ2ek9sWnc3V3RxdGRtUEsvRXJyei82Tk50RDcyem1OT1pmYm1ZZFRHSGZvb2ZxSTc5T2MrUjJuMWxybkw2cE9tMFVwN2t3eGhUVzEyQW1tN1dZa1hSMnFZckYyQW1nbWJBc3haand5MXhwZy9tMUplMnZycDh2L256MnhwbWxCZzRFOWhyTVUzNDF3VnBUT2gvT2ZtR3ZBbnJhOHE2dWN0cjYwWlFIVjNRK1dNUUp5a01qOFpzV24yUUJPbW1ITUIrbTVwRElwVEZvbllpZ2lhS0FoR0VpQUhGN0VsaVZuUWtqb0xWSU1QdEpwQktIWWQzQThHWUg5akp6cld3bUh4NVFqcDd2REFYMHN1R1J5bTF2dG0vOVcxL0h5Ujh2Y3pmTXM2U2s4RFN2ODU1LzVkbFg5b1FxNTJoVDhzeXlwMnJ4NUlkMTdJQXlBTTN3SWpRUE1PSHp5dEVCNjRxNkQ1elQ5MXlOYm54M1YvbnFuZDAxN1M5WTA2MDVrM2l6b1hMcHN4ZGUybjM4eW9PVjlzMUxjand6TmpiZFg2YXNuQlZhQmovNi9Ed0t3UGtwY3FiREc3Qm5zWG9TcVduVUFtb3R0WUY2ak1TZFZ5WVpoM3pWWENqd1Rpd3dISDZzR3VSaUVIUUd6dVJYNndoWmtwMTIzb3kxQldFMm1FZkovdHZJUnRNNFpNNWJEWGlNc1BNYUFLT1R5YzV1TDU3cnF5eWM1eTVKRTVwbTFpMlMyaVVYMENjYVE2bEM2Wm9nN0pxU3FabVlsb3NsMks2cHdOQTg0elJuUVc2U2FBTFlaUUdXNWxoQ3RVL1czNE42bytiS2ZaOGNmMy9DbC8raVRYM3dCenBPWTRtUmtlTmYzcnB0eWNHU3NoUVdnR2JZdDVqRmMyZTArRGdsSXJ3bDZEVldRN0J1d2FKM1hrMUo0Vkw1dXJuTGwvV2YrZ0hVL2hab1pkS055bTZsRytJMzRGYU5lWktjU3BKSW8ySWVDVnZwZHNER2ZLdnpKbkF3bWVEMzdPdzY1Wld3U293cGd3WDVUNjlzL3JCNTVkUDVCY3BnREtGVjhwN3Eyc24vMXVjOTNiVnpUL3c2VXJDcURUV3ZmQ3Evb0NEL3FaWE5vVWo4Qkw1S3A2R1UwMTdmcmZOWGtBdGlpeWYvU09DRWVMcW5kOFIvUWw5R2xDUmZjdFM2azVjaHZJQnVRMXpDQ2pvQ0hMMkRITkhJWHhNSjNrUWVPOGxic1VYT05lU2ZBNUVqY0c2L0UrS2RoTjRiUDA0dkJoZGk4ODMrQkZCelFieEZidlp6UWVZOUxOQlpjMEZOZm41TndmRG42ckNUblR3NlI4bytnZnBmNWhDb20zM2NSdWlUbHNzM0tIbVpqRCtCUE4rNWdYdUEyemlTL1E3M21MeFVrcGJLTi9lcXd6NXVLMFg5RjNoMmQxVjRuR05nWkdCZ0FPSmQ3NzYraXVlMytjckF6YzRBQWplNUJmY2cweHo5WUhFT0JpWVFCUUE4RlFsRkFIaWNZMkJrWUdCbkFBR09QZ2FHLy84NStoa1lHVkNCTWdCR0d3TllBQUFBZUp4allHQmdZQjhFbUtPUGdRRUFRMDRCZmdBQUFBQUFBQTRBYUFCK0FNd0E0QUVDQVVJQmJBR1lBY0lDR0FKWUFyUUM0QU13QTdBRDNnUXdCSllFM0FVa0JXWUZpZ1lnQm1ZR3RBYnFCMWdJRWdoWUNHNEloQWkyQ09oNG5HTmdaR0JnVUdZb1pXQm5BQUVtSU9ZQ1FnYUcvMkErQXdBWUNRRzJBSGljWFpCTmFvTkFHSVpmRTVQUUNLRlEybFVwczJvWEJmT3p6QUVTeURLQlFKZEdSMk5RUjNRU1NFL1FFL1FFUFVVUFVIcXN2c3JYalRNdzgzelB2UE1OQ3VBV1AzRFFEQWVqZG0xR2p6d1M3cE1td2k3NVhuZ0FENC9DUS9vWDRURmU0UXQ3dU1NYk96anVEYzBFbVhDUC9DN2NKMzhJdStSUDRRRWU4Q1U4cFA4V0htT1BYMkVQejg3VFBvMjAyZXkyT2psblFTWFYvNmFyT2pXRm12c3pNV3RkNkNxd09sS0hxNm92eWNMYVdNV1Z5ZFhLRkZabm1WRmxaVTQ2dFA3UjJuSTVuY2JpL2REa2ZEdEZCQTJERFhiWWtoS2MrVjBCcXM1WnQ5Sk0xSFFHQlJUbS9FZXpUbVpOS3RwY0FNczlZdTZBSzljYUY3NnpvTFdJV2NmTUdPU2tWZHV2U1dlY2hxWnN6MDQwSWIyUFkzdXJ4QkpUenJpVDk1bGlweitUTjFmbUFBQUFlSnh0a01sMndqQU1SZk9BaEFCbEttMmg4MEMzK2FqZ0NLS0RZNmNlZ1A1OVRZQnp1a0FMK3oxWnNxOGN0YUpUVEtQcnNVUUxiWFFRSTBFWEtYcm9ZNEFiRERIQ0dCTk1jWXNaN25DUEI4eXh3Q09lOEl3WHZPSU43L2pBSjc2d3hIZlVxV1grT3pndW1XQWpKTVYxN2kwTmRscjZpckxLTytxZnRkVDdpNnk0dUZTVXZDa25heStsRllaSVphUWNtZkgveElGZFluOThicWhyYTFhS1RNLzZsV01ueWFZaXJ4MXJGVVFaRkJrYjJ6SlV0b1hlSkNlZzBXbkx0SGVTRmMzT3Rybm96TndxaTBUa1NwQk1EQjFuU2RlNW9KWFcyM2hUUzIvVDBMaWxnbFhYN2RtRlZ4TG5xNVUwdllBVEhGazN6WDNCT2lzb1FITkRGRGVabnFLRHk5aFJOYXdON1ZoNzI3aEZ6Y0o1YzhUSUxyS1pmSDd0SVB4QUZQMEJwTGVKUEE9PSkgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtYmlnLXBsYXktYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi1wbGF5IHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXBsYXk6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEwMVxcXCI7IH1cXG4udmpzLWljb24tcGxheS1jaXJjbGUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLXBsYXktY2lyY2xlOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMDJcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLXBhdXNlIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtcGxheWluZyAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGF1c2U6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEwM1xcXCI7IH1cXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0wIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLXZvbHVtZS1tdXRlIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTAgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXZvbHVtZS1tdXRlOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMDRcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi12b2x1bWUtbG93IHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTEgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXZvbHVtZS1sb3c6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEwNVxcXCI7IH1cXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLXZvbHVtZS1taWQge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tdm9sdW1lLW1pZDpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTA2XFxcIjsgfVxcbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi12b2x1bWUtaGlnaCB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXZvbHVtZS1oaWdoOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMDdcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLWZ1bGxzY3JlZW4tZW50ZXIge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1mdWxsc2NyZWVuLWVudGVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMDhcXFwiOyB9XFxuLnZpZGVvLWpzLnZqcy1mdWxsc2NyZWVuIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLWZ1bGxzY3JlZW4tZXhpdCB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLWZ1bGxzY3JlZW4tZXhpdDpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTA5XFxcIjsgfVxcbi52anMtaWNvbi1zcXVhcmUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLXNxdWFyZTpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTBhXFxcIjsgfVxcbi52anMtaWNvbi1zcGlubmVyIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52anMtaWNvbi1zcGlubmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMGJcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52aWRlby1qcyAudmpzLXN1YnRpdGxlcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmlkZW8tanMudmlkZW8tanM6bGFuZyhlbi1BVSkgLnZqcy1zdWJzLWNhcHMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZpZGVvLWpzLnZpZGVvLWpzOmxhbmcoZW4tR0IpIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52aWRlby1qcy52aWRlby1qczpsYW5nKGVuLUlFKSAudmpzLXN1YnMtY2Fwcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmlkZW8tanMudmlkZW8tanM6bGFuZyhlbi1OWikgLnZqcy1zdWJzLWNhcHMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLXN1YnRpdGxlcyB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMgLnZqcy1zdWJzLWNhcHMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLXN1YnRpdGxlcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZpZGVvLWpzLnZpZGVvLWpzOmxhbmcoZW4tQVUpIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMudmlkZW8tanM6bGFuZyhlbi1HQikgLnZqcy1zdWJzLWNhcHMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcy52aWRlby1qczpsYW5nKGVuLUlFKSAudmpzLXN1YnMtY2Fwcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZpZGVvLWpzLnZpZGVvLWpzOmxhbmcoZW4tTlopIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tc3VidGl0bGVzOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMGNcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtY2FwdGlvbnMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZpZGVvLWpzOmxhbmcoZW4pIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52aWRlby1qczpsYW5nKGZyLUNBKSAudmpzLXN1YnMtY2Fwcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmpzLWljb24tY2FwdGlvbnMge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtY2FwdGlvbnMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qczpsYW5nKGVuKSAudmpzLXN1YnMtY2Fwcy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZpZGVvLWpzOmxhbmcoZnItQ0EpIC52anMtc3Vicy1jYXBzLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tY2FwdGlvbnM6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEwZFxcXCI7IH1cXG4udmlkZW8tanMgLnZqcy1jaGFwdGVycy1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmpzLWljb24tY2hhcHRlcnMge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtY2hhcHRlcnMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1jaGFwdGVyczpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTBlXFxcIjsgfVxcbi52anMtaWNvbi1zaGFyZSB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmpzLWljb24tc2hhcmU6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEwZlxcXCI7IH1cXG4udmpzLWljb24tY29nIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52anMtaWNvbi1jb2c6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjExMFxcXCI7IH1cXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzLCAudmlkZW8tanMgLnZqcy12b2x1bWUtbGV2ZWwsIC52anMtaWNvbi1jaXJjbGUsIC52anMtc2Vlay10by1saXZlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLCAudmlkZW8tanMgLnZqcy12b2x1bWUtbGV2ZWw6YmVmb3JlLCAudmpzLWljb24tY2lyY2xlOmJlZm9yZSwgLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjExMVxcXCI7IH1cXG4udmpzLWljb24tY2lyY2xlLW91dGxpbmUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMTJcXFwiOyB9XFxuLnZqcy1pY29uLWNpcmNsZS1pbm5lci1jaXJjbGUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLWNpcmNsZS1pbm5lci1jaXJjbGU6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjExM1xcXCI7IH1cXG4udmpzLWljb24taGQge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLWhkOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMTRcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtY2xvc2UtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnZqcy1pY29uLWNhbmNlbCB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMgLnZqcy1jb250cm9sLnZqcy1jbG9zZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLWNhbmNlbDpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTE1XFxcIjsgfVxcbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtZW5kZWQgLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmpzLWljb24tcmVwbGF5IHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtZW5kZWQgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXJlcGxheTpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTE2XFxcIjsgfVxcbi52anMtaWNvbi1mYWNlYm9vayB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmpzLWljb24tZmFjZWJvb2s6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjExN1xcXCI7IH1cXG4udmpzLWljb24tZ3BsdXMge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLWdwbHVzOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMThcXFwiOyB9XFxuLnZqcy1pY29uLWxpbmtlZGluIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52anMtaWNvbi1saW5rZWRpbjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTE5XFxcIjsgfVxcbi52anMtaWNvbi10d2l0dGVyIHtcXG4gIGZvbnQtZmFtaWx5OiBWaWRlb0pTO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxcbi52anMtaWNvbi10d2l0dGVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMWFcXFwiOyB9XFxuLnZqcy1pY29uLXR1bWJsciB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmpzLWljb24tdHVtYmxyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMWJcXFwiOyB9XFxuLnZqcy1pY29uLXBpbnRlcmVzdCB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmpzLWljb24tcGludGVyZXN0OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMWNcXFwiOyB9XFxuLnZpZGVvLWpzIC52anMtZGVzY3JpcHRpb25zLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi1hdWRpby1kZXNjcmlwdGlvbiB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMgLnZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1hdWRpby1kZXNjcmlwdGlvbjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTFkXFxcIjsgfVxcbi52aWRlby1qcyAudmpzLWF1ZGlvLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi1hdWRpbyB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmlkZW8tanMgLnZqcy1hdWRpby1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLWF1ZGlvOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMWVcXFwiOyB9XFxuLnZqcy1pY29uLW5leHQtaXRlbSB7XFxuICBmb250LWZhbWlseTogVmlkZW9KUztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7IH1cXG4udmpzLWljb24tbmV4dC1pdGVtOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcXGYxMWZcXFwiOyB9XFxuLnZqcy1pY29uLXByZXZpb3VzLWl0ZW0ge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZqcy1pY29uLXByZXZpb3VzLWl0ZW06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEyMFxcXCI7IH1cXG4udmlkZW8tanMgLnZqcy1waWN0dXJlLWluLXBpY3R1cmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIsIC52anMtaWNvbi1waWN0dXJlLWluLXBpY3R1cmUtZW50ZXIge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzIC52anMtcGljdHVyZS1pbi1waWN0dXJlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSwgLnZqcy1pY29uLXBpY3R1cmUtaW4tcGljdHVyZS1lbnRlcjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFxmMTIxXFxcIjsgfVxcbi52aWRlby1qcy52anMtcGljdHVyZS1pbi1waWN0dXJlIC52anMtcGljdHVyZS1pbi1waWN0dXJlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudmpzLWljb24tcGljdHVyZS1pbi1waWN0dXJlLWV4aXQge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XFxuLnZpZGVvLWpzLnZqcy1waWN0dXJlLWluLXBpY3R1cmUgLnZqcy1waWN0dXJlLWluLXBpY3R1cmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGljdHVyZS1pbi1waWN0dXJlLWV4aXQ6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFxcZjEyMlxcXCI7IH1cXG4udmlkZW8tanMge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDEwcHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XFxuICB3b3JkLWJyZWFrOiBpbml0aWFsOyB9XFxuLnZpZGVvLWpzOi1tb3otZnVsbC1zY3JlZW4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlOyB9XFxuLnZpZGVvLWpzOi13ZWJraXQtZnVsbC1zY3JlZW4ge1xcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OyB9XFxuLnZpZGVvLWpzW3RhYmluZGV4PVxcXCItMVxcXCJdIHtcXG4gIG91dGxpbmU6IDA7IH1cXG4udmlkZW8tanMgKiwgLnZpZGVvLWpzIDphZnRlciwgLnZpZGVvLWpzIDpiZWZvcmUge1xcbiAgYm94LXNpemluZzogaW5oZXJpdDsgfVxcbi52aWRlby1qcyB1bCB7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7IH1cXG4udmlkZW8tanMudmpzLTE2LTksIC52aWRlby1qcy52anMtNC0zLCAudmlkZW8tanMudmpzLWZsdWlkIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAwOyB9XFxuLnZpZGVvLWpzLnZqcy0xNi05IHtcXG4gIHBhZGRpbmctdG9wOiA1Ni4yNSU7IH1cXG4udmlkZW8tanMudmpzLTQtMyB7XFxuICBwYWRkaW5nLXRvcDogNzUlOyB9XFxuLnZpZGVvLWpzLnZqcy1maWxsIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlOyB9XFxuLnZpZGVvLWpzIC52anMtdGVjaCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG5ib2R5LnZqcy1mdWxsLXdpbmRvdyB7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlOyB9XFxuLnZqcy1mdWxsLXdpbmRvdyAudmlkZW8tanMudmpzLWZ1bGxzY3JlZW4ge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7IH1cXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4ge1xcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbiAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsgfVxcbi52aWRlby1qcy52anMtZnVsbHNjcmVlbi52anMtdXNlci1pbmFjdGl2ZSB7XFxuICBjdXJzb3I6IG5vbmU7IH1cXG4udmpzLWhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cXG4udmpzLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IC41O1xcbiAgY3Vyc29yOiBkZWZhdWx0OyB9XFxuLnZpZGVvLWpzIC52anMtb2Zmc2NyZWVuIHtcXG4gIGhlaWdodDogMXB4O1xcbiAgbGVmdDogLTk5OTlweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxcHg7IH1cXG4udmpzLWxvY2stc2hvd2luZyB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgb3BhY2l0eTogMTtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7IH1cXG4udmpzLW5vLWpzIHtcXG4gIHBhZGRpbmc6IDIwcHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogMzAwcHg7XFxuICBoZWlnaHQ6IDE1MHB4O1xcbiAgbWFyZ2luOiAwIGF1dG87IH1cXG4udmpzLW5vLWpzIGEsIC52anMtbm8tanMgYTp2aXNpdGVkIHtcXG4gIGNvbG9yOiAjNjZhOGNjOyB9XFxuLnZpZGVvLWpzIC52anMtYmlnLXBsYXktYnV0dG9uIHtcXG4gIGZvbnQtc2l6ZTogM2VtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNWVtO1xcbiAgaGVpZ2h0OiAxLjYzMzMyZW07XFxuICB3aWR0aDogM2VtO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICBsZWZ0OiAxMHB4O1xcbiAgcGFkZGluZzogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG9wYWNpdHk6IDE7XFxuICBib3JkZXI6IC4wNjY2NmVtIHNvbGlkICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzMzNmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MywgNTEsIDYzLCAwLjcpO1xcbiAgYm9yZGVyLXJhZGl1czogLjNlbTtcXG4gIHRyYW5zaXRpb246IGFsbCAuNHM7IH1cXG4udmpzLWJpZy1wbGF5LWNlbnRlcmVkIC52anMtYmlnLXBsYXktYnV0dG9uIHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNTAlO1xcbiAgbWFyZ2luLXRvcDogLS44MTY2NmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0xLjVlbTsgfVxcbi52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbjpmb2N1cywgLnZpZGVvLWpzOmhvdmVyIC52anMtYmlnLXBsYXktYnV0dG9uIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Mzg1OWY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNSwgMTMzLCAxNTksIDAuNSk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMHM7IH1cXG4udmpzLWNvbnRyb2xzLWRpc2FibGVkIC52anMtYmlnLXBsYXktYnV0dG9uLCAudmpzLWVycm9yIC52anMtYmlnLXBsYXktYnV0dG9uLCAudmpzLWhhcy1zdGFydGVkIC52anMtYmlnLXBsYXktYnV0dG9uLCAudmpzLXVzaW5nLW5hdGl2ZS1jb250cm9scyAudmpzLWJpZy1wbGF5LWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZqcy1oYXMtc3RhcnRlZC52anMtcGF1c2VkLnZqcy1zaG93LWJpZy1wbGF5LWJ1dHRvbi1vbi1wYXVzZSAudmpzLWJpZy1wbGF5LWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBibG9jazsgfVxcbi52aWRlby1qcyBidXR0b24ge1xcbiAgYmFja2dyb3VuZDogMCAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7IH1cXG4udmpzLWNvbnRyb2wgLnZqcy1idXR0b24ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG4udmlkZW8tanMgLnZqcy1jb250cm9sLnZqcy1jbG9zZS1idXR0b24ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgaGVpZ2h0OiAzZW07XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogLjVlbTtcXG4gIHotaW5kZXg6IDI7IH1cXG4udmlkZW8tanMgLnZqcy1tb2RhbC1kaWFsb2cge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgwLCAwLCAwLCAwLjgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApKTtcXG4gIG92ZXJmbG93OiBhdXRvOyB9XFxuLnZpZGVvLWpzIC52anMtbW9kYWwtZGlhbG9nID4gKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxuLnZqcy1tb2RhbC1kaWFsb2cgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCB7XFxuICBmb250LXNpemU6IDEuMmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIHBhZGRpbmc6IDIwcHggMjRweDtcXG4gIHotaW5kZXg6IDE7IH1cXG4udmpzLW1lbnUtYnV0dG9uIHtcXG4gIGN1cnNvcjogcG9pbnRlcjsgfVxcbi52anMtbWVudS1idXR0b24udmpzLWRpc2FibGVkIHtcXG4gIGN1cnNvcjogZGVmYXVsdDsgfVxcbi52anMtd29ya2luZ2hvdmVyIC52anMtbWVudS1idXR0b24udmpzLWRpc2FibGVkOmhvdmVyIC52anMtbWVudSB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtcXG4gIG92ZXJmbG93OiBhdXRvOyB9XFxuLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50ID4gKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxuLnZqcy1zY3J1YmJpbmcgLnZqcy1jb250cm9sLnZqcy1tZW51LWJ1dHRvbjpob3ZlciAudmpzLW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52anMtbWVudSBsaSB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogLjJlbSAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNGVtO1xcbiAgZm9udC1zaXplOiAxLjJlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7IH1cXG4uanMtZm9jdXMtdmlzaWJsZSAudmpzLW1lbnUgbGkudmpzLW1lbnUtaXRlbTpob3ZlciwgLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06Zm9jdXMsIC52anMtbWVudSBsaS52anMtbWVudS1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Mzg1OWY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNSwgMTMzLCAxNTksIDAuNSk7IH1cXG4uanMtZm9jdXMtdmlzaWJsZSAudmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkOmhvdmVyLCAudmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkLCAudmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkOmZvY3VzLCAudmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBjb2xvcjogIzJiMzMzZjsgfVxcbi52anMtbWVudSBsaS52anMtbWVudS10aXRsZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxuICBsaW5lLWhlaWdodDogMmVtO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMCAwIC4zZW0gMDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBjdXJzb3I6IGRlZmF1bHQ7IH1cXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDEwZW07XFxuICBsZWZ0OiAtM2VtO1xcbiAgaGVpZ2h0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XFxuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDQzLCA1MSwgNjMsIDAuNyk7IH1cXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzMzNmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MywgNTEsIDYzLCAwLjcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3R0b206IDEuNWVtO1xcbiAgbWF4LWhlaWdodDogMTVlbTsgfVxcbi52anMtbGF5b3V0LXRpbnkgLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUgLnZqcy1tZW51LWNvbnRlbnQsIC52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUgLnZqcy1tZW51LWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogNWVtOyB9XFxuLnZqcy1sYXlvdXQtc21hbGwgLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUgLnZqcy1tZW51LWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogMTBlbTsgfVxcbi52anMtbGF5b3V0LW1lZGl1bSAudmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XFxuICBtYXgtaGVpZ2h0OiAxNGVtOyB9XFxuLnZqcy1sYXlvdXQtaHVnZSAudmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCwgLnZqcy1sYXlvdXQtbGFyZ2UgLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUgLnZqcy1tZW51LWNvbnRlbnQsIC52anMtbGF5b3V0LXgtbGFyZ2UgLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUgLnZqcy1tZW51LWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogMjVlbTsgfVxcbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51LnZqcy1sb2NrLXNob3dpbmcsIC52anMtd29ya2luZ2hvdmVyIC52anMtbWVudS1idXR0b24tcG9wdXAudmpzLWhvdmVyIC52anMtbWVudSB7XFxuICBkaXNwbGF5OiBibG9jazsgfVxcbi52aWRlby1qcyAudmpzLW1lbnUtYnV0dG9uLWlubGluZSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgLjRzO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxcbi52aWRlby1qcyAudmpzLW1lbnUtYnV0dG9uLWlubGluZTpiZWZvcmUge1xcbiAgd2lkdGg6IDIuMjIyMjIyMjIyZW07IH1cXG4udmlkZW8tanMgLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmUudmpzLXNsaWRlci1hY3RpdmUsIC52aWRlby1qcyAudmpzLW1lbnUtYnV0dG9uLWlubGluZTpmb2N1cywgLnZpZGVvLWpzIC52anMtbWVudS1idXR0b24taW5saW5lOmhvdmVyLCAudmlkZW8tanMudmpzLW5vLWZsZXggLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmUge1xcbiAgd2lkdGg6IDEyZW07IH1cXG4udmpzLW1lbnUtYnV0dG9uLWlubGluZSAudmpzLW1lbnUge1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogNGVtO1xcbiAgdG9wOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAuNHM7IH1cXG4udmpzLW1lbnUtYnV0dG9uLWlubGluZS52anMtc2xpZGVyLWFjdGl2ZSAudmpzLW1lbnUsIC52anMtbWVudS1idXR0b24taW5saW5lOmZvY3VzIC52anMtbWVudSwgLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmU6aG92ZXIgLnZqcy1tZW51IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMTsgfVxcbi52anMtbm8tZmxleCAudmpzLW1lbnUtYnV0dG9uLWlubGluZSAudmpzLW1lbnUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IGF1dG87IH1cXG4udmpzLW5vLWZsZXggLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmUudmpzLXNsaWRlci1hY3RpdmUgLnZqcy1tZW51LCAudmpzLW5vLWZsZXggLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmU6Zm9jdXMgLnZqcy1tZW51LCAudmpzLW5vLWZsZXggLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmU6aG92ZXIgLnZqcy1tZW51IHtcXG4gIHdpZHRoOiBhdXRvOyB9XFxuLnZqcy1tZW51LWJ1dHRvbi1pbmxpbmUgLnZqcy1tZW51LWNvbnRlbnQge1xcbiAgd2lkdGg6IGF1dG87XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuOyB9XFxuLnZpZGVvLWpzIC52anMtY29udHJvbC1iYXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAzZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzMzNmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MywgNTEsIDYzLCAwLjcpOyB9XFxuLnZqcy1oYXMtc3RhcnRlZCAudmpzLWNvbnRyb2wtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgLjFzLG9wYWNpdHkgLjFzOyB9XFxuLnZqcy1oYXMtc3RhcnRlZC52anMtdXNlci1pbmFjdGl2ZS52anMtcGxheWluZyAudmpzLWNvbnRyb2wtYmFyIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAxcyxvcGFjaXR5IDFzOyB9XFxuLnZqcy1jb250cm9scy1kaXNhYmxlZCAudmpzLWNvbnRyb2wtYmFyLCAudmpzLWVycm9yIC52anMtY29udHJvbC1iYXIsIC52anMtdXNpbmctbmF0aXZlLWNvbnRyb2xzIC52anMtY29udHJvbC1iYXIge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XFxuLnZqcy1hdWRpby52anMtaGFzLXN0YXJ0ZWQudmpzLXVzZXItaW5hY3RpdmUudmpzLXBsYXlpbmcgLnZqcy1jb250cm9sLWJhciB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTsgfVxcbi52anMtaGFzLXN0YXJ0ZWQudmpzLW5vLWZsZXggLnZqcy1jb250cm9sLWJhciB7XFxuICBkaXNwbGF5OiB0YWJsZTsgfVxcbi52aWRlby1qcyAudmpzLWNvbnRyb2wge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiA0ZW07XFxuICBmbGV4OiBub25lOyB9XFxuLnZqcy1idXR0b24gPiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcXG4gIGZvbnQtc2l6ZTogMS44ZW07XFxuICBsaW5lLWhlaWdodDogMS42NzsgfVxcbi52aWRlby1qcyAudmpzLWNvbnRyb2w6Zm9jdXMsIC52aWRlby1qcyAudmpzLWNvbnRyb2w6Zm9jdXM6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1jb250cm9sOmhvdmVyOmJlZm9yZSB7XFxuICB0ZXh0LXNoYWRvdzogMCAwIDFlbSAjZmZmOyB9XFxuLnZpZGVvLWpzIC52anMtY29udHJvbC10ZXh0IHtcXG4gIGJvcmRlcjogMDtcXG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDsgfVxcbi52anMtbm8tZmxleCAudmpzLWNvbnRyb2wge1xcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cXG4udmlkZW8tanMgLnZqcy1jdXN0b20tY29udHJvbC1zcGFjZXIge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxleDogYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLXdpZHRoOiA0ZW07XFxuICB0b3VjaC1hY3Rpb246IG5vbmU7IH1cXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sLmRpc2FibGVkIHtcXG4gIGN1cnNvcjogZGVmYXVsdDsgfVxcbi52anMtbGl2ZSAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52anMtbGl2ZXVpIC52anMtcHJvZ3Jlc3MtY29udHJvbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxcbi52anMtbm8tZmxleCAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xcbiAgd2lkdGg6IGF1dG87IH1cXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xcbiAgZmxleDogYXV0bztcXG4gIHRyYW5zaXRpb246IGFsbCAuMnM7XFxuICBoZWlnaHQ6IC4zZW07IH1cXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtcHJvZ3Jlc3MtaG9sZGVyIHtcXG4gIG1hcmdpbjogMCAxMHB4OyB9XFxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbDpob3ZlciAudmpzLXByb2dyZXNzLWhvbGRlciB7XFxuICBmb250LXNpemU6IDEuNjY2NjY2NjY2N2VtOyB9XFxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbDpob3ZlciAudmpzLXByb2dyZXNzLWhvbGRlci5kaXNhYmxlZCB7XFxuICBmb250LXNpemU6IDFlbTsgfVxcbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWhvbGRlciAudmpzLWxvYWQtcHJvZ3Jlc3MsIC52aWRlby1qcyAudmpzLXByb2dyZXNzLWhvbGRlciAudmpzLWxvYWQtcHJvZ3Jlc3MgZGl2LCAudmlkZW8tanMgLnZqcy1wcm9ncmVzcy1ob2xkZXIgLnZqcy1wbGF5LXByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIHdpZHRoOiAwOyB9XFxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XFxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzczpiZWZvcmUge1xcbiAgZm9udC1zaXplOiAuOWVtO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IC0uNWVtO1xcbiAgdG9wOiAtLjMzMzMzMzMzMzNlbTtcXG4gIHotaW5kZXg6IDE7IH1cXG4udmlkZW8tanMgLnZqcy1sb2FkLXByb2dyZXNzIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTE1LCAxMzMsIDE1OSwgMC41KTsgfVxcbi52aWRlby1qcyAudmpzLWxvYWQtcHJvZ3Jlc3MgZGl2IHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTE1LCAxMzMsIDE1OSwgMC43NSk7IH1cXG4udmlkZW8tanMgLnZqcy10aW1lLXRvb2x0aXAge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcXG4gIGJvcmRlci1yYWRpdXM6IC4zZW07XFxuICBjb2xvcjogIzAwMDtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbiAgcGFkZGluZzogNnB4IDhweCA4cHggOHB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0zLjRlbTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHotaW5kZXg6IDE7IH1cXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1ob2xkZXI6Zm9jdXMgLnZqcy10aW1lLXRvb2x0aXAge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2w6aG92ZXIgLnZqcy1wcm9ncmVzcy1ob2xkZXI6Zm9jdXMgLnZqcy10aW1lLXRvb2x0aXAsIC52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2w6aG92ZXIgLnZqcy10aW1lLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IC42ZW07XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9XFxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbC5kaXNhYmxlZDpob3ZlciAudmpzLXRpbWUtdG9vbHRpcCB7XFxuICBmb250LXNpemU6IDFlbTsgfVxcbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1tb3VzZS1kaXNwbGF5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcXG4gIHotaW5kZXg6IDE7IH1cXG4udmpzLW5vLWZsZXggLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XFxuICB6LWluZGV4OiAwOyB9XFxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbDpob3ZlciAudmpzLW1vdXNlLWRpc3BsYXkge1xcbiAgZGlzcGxheTogYmxvY2s7IH1cXG4udmlkZW8tanMudmpzLXVzZXItaW5hY3RpdmUgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAxcyxvcGFjaXR5IDFzOyB9XFxuLnZpZGVvLWpzLnZqcy11c2VyLWluYWN0aXZlLnZqcy1uby1mbGV4IC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLW1vdXNlLWRpc3BsYXkge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52anMtbW91c2UtZGlzcGxheSAudmpzLXRpbWUtdG9vbHRpcCB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7IH1cXG4udmlkZW8tanMgLnZqcy1zbGlkZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMCAuNDVlbSAwIC40NWVtO1xcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Mzg1OWY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNSwgMTMzLCAxNTksIDAuNSk7IH1cXG4udmlkZW8tanMgLnZqcy1zbGlkZXIuZGlzYWJsZWQge1xcbiAgY3Vyc29yOiBkZWZhdWx0OyB9XFxuLnZpZGVvLWpzIC52anMtc2xpZGVyOmZvY3VzIHtcXG4gIHRleHQtc2hhZG93OiAwIDAgMWVtICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMWVtICNmZmY7IH1cXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxleDogbm9uZTsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogMWVtO1xcbiAgZGlzcGxheTogZmxleDsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XFxuICB3aWR0aDogNWVtOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW4tbGVmdDogLTFweDsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCB7XFxuICB0cmFuc2l0aW9uOiB3aWR0aCAxczsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbDphY3RpdmUsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy1tdXRlLWNvbnRyb2wgfiAudmpzLXZvbHVtZS1jb250cm9sLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDphY3RpdmUgLnZqcy12b2x1bWUtY29udHJvbCwgLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsOmZvY3VzIC52anMtdm9sdW1lLWNvbnRyb2wge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IC4xcyxvcGFjaXR5IC4xcyxoZWlnaHQgLjFzLHdpZHRoIC4xcyxsZWZ0IDBzLHRvcCAwczsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLnZqcy12b2x1bWUtaG9yaXpvbnRhbCwgLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLnZqcy12b2x1bWUtaG9yaXpvbnRhbCwgLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLW11dGUtY29udHJvbCB+IC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS1ob3Jpem9udGFsLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS1ob3Jpem9udGFsLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS1ob3Jpem9udGFsLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6Zm9jdXMgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLWhvcml6b250YWwge1xcbiAgd2lkdGg6IDVlbTtcXG4gIGhlaWdodDogM2VtO1xcbiAgbWFyZ2luLXJpZ2h0OiAwOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXNsaWRlci1hY3RpdmUudmpzLXZvbHVtZS12ZXJ0aWNhbCwgLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLnZqcy12b2x1bWUtdmVydGljYWwsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy1tdXRlLWNvbnRyb2wgfiAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtdmVydGljYWwsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLXZlcnRpY2FsLCAudmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS12ZXJ0aWNhbCwgLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsOmZvY3VzIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS12ZXJ0aWNhbCB7XFxuICBsZWZ0OiAtMy41ZW07XFxuICB0cmFuc2l0aW9uOiBsZWZ0IDBzOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtaG92ZXIsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLXNsaWRlci1hY3RpdmUsIC52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlIHtcXG4gIHdpZHRoOiAxMGVtO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggLjFzOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtbXV0ZS10b2dnbGUtb25seSB7XFxuICB3aWR0aDogNGVtOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS12ZXJ0aWNhbCB7XFxuICBoZWlnaHQ6IDhlbTtcXG4gIHdpZHRoOiAzZW07XFxuICBsZWZ0OiAtMzAwMGVtO1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAxcyxvcGFjaXR5IDFzLGhlaWdodCAxcyAxcyx3aWR0aCAxcyAxcyxsZWZ0IDFzIDFzLHRvcCAxcyAxczsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XFxuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDFzLG9wYWNpdHkgMXMsaGVpZ2h0IDFzIDFzLHdpZHRoIDFzLGxlZnQgMXMgMXMsdG9wIDFzIDFzOyB9XFxuLnZpZGVvLWpzLnZqcy1uby1mbGV4IC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS1ob3Jpem9udGFsIHtcXG4gIHdpZHRoOiA1ZW07XFxuICBoZWlnaHQ6IDNlbTtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogbm9uZTsgfVxcbi52aWRlby1qcy52anMtbm8tZmxleCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtdmVydGljYWwsIC52aWRlby1qcy52anMtbm8tZmxleCAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtdmVydGljYWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAzZW07XFxuICBsZWZ0OiAuNWVtOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7IH1cXG4udmlkZW8tanMgLnZqcy12b2x1bWUtYmFyIHtcXG4gIG1hcmdpbjogMS4zNWVtIC40NWVtOyB9XFxuLnZqcy12b2x1bWUtYmFyLnZqcy1zbGlkZXItaG9yaXpvbnRhbCB7XFxuICB3aWR0aDogNWVtO1xcbiAgaGVpZ2h0OiAuM2VtOyB9XFxuLnZqcy12b2x1bWUtYmFyLnZqcy1zbGlkZXItdmVydGljYWwge1xcbiAgd2lkdGg6IC4zZW07XFxuICBoZWlnaHQ6IDVlbTtcXG4gIG1hcmdpbjogMS4zNWVtIGF1dG87IH1cXG4udmlkZW8tanMgLnZqcy12b2x1bWUtbGV2ZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cXG4udmlkZW8tanMgLnZqcy12b2x1bWUtbGV2ZWw6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGZvbnQtc2l6ZTogLjllbTsgfVxcbi52anMtc2xpZGVyLXZlcnRpY2FsIC52anMtdm9sdW1lLWxldmVsIHtcXG4gIHdpZHRoOiAuM2VtOyB9XFxuLnZqcy1zbGlkZXItdmVydGljYWwgLnZqcy12b2x1bWUtbGV2ZWw6YmVmb3JlIHtcXG4gIHRvcDogLS41ZW07XFxuICBsZWZ0OiAtLjNlbTsgfVxcbi52anMtc2xpZGVyLWhvcml6b250YWwgLnZqcy12b2x1bWUtbGV2ZWwge1xcbiAgaGVpZ2h0OiAuM2VtOyB9XFxuLnZqcy1zbGlkZXItaG9yaXpvbnRhbCAudmpzLXZvbHVtZS1sZXZlbDpiZWZvcmUge1xcbiAgdG9wOiAtLjNlbTtcXG4gIHJpZ2h0OiAtLjVlbTsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLXZlcnRpY2FsIHtcXG4gIHdpZHRoOiA0ZW07IH1cXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci12ZXJ0aWNhbCAudmpzLXZvbHVtZS1sZXZlbCB7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci1ob3Jpem9udGFsIC52anMtdm9sdW1lLWxldmVsIHtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXZlcnRpY2FsIHtcXG4gIHdpZHRoOiAzZW07XFxuICBoZWlnaHQ6IDhlbTtcXG4gIGJvdHRvbTogOGVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJiMzMzZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDMsIDUxLCA2MywgMC43KTsgfVxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1ob3Jpem9udGFsIC52anMtbWVudSB7XFxuICBsZWZ0OiAtMmVtOyB9XFxuLnZqcy1wb3N0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG4udmpzLWhhcy1zdGFydGVkIC52anMtcG9zdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG4udmpzLWF1ZGlvLnZqcy1oYXMtc3RhcnRlZCAudmpzLXBvc3RlciB7XFxuICBkaXNwbGF5OiBibG9jazsgfVxcbi52anMtdXNpbmctbmF0aXZlLWNvbnRyb2xzIC52anMtcG9zdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG4udmlkZW8tanMgLnZqcy1saXZlLWNvbnRyb2wge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgZmxleDogYXV0bztcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbiAgbGluZS1oZWlnaHQ6IDNlbTsgfVxcbi52anMtbm8tZmxleCAudmpzLWxpdmUtY29udHJvbCB7XFxuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xcbiAgd2lkdGg6IGF1dG87XFxuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XFxuLnZpZGVvLWpzLnZqcy1saXZldWkgLnZqcy1saXZlLWNvbnRyb2wsIC52aWRlby1qczpub3QoLnZqcy1saXZlKSAudmpzLWxpdmUtY29udHJvbCB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZpZGVvLWpzIC52anMtc2Vlay10by1saXZlLWNvbnRyb2wge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxleDogbm9uZTtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgcGFkZGluZy1sZWZ0OiAuNWVtO1xcbiAgcGFkZGluZy1yaWdodDogLjVlbTtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbiAgbGluZS1oZWlnaHQ6IDNlbTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWluLXdpZHRoOiA0ZW07IH1cXG4udmpzLW5vLWZsZXggLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCB7XFxuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xcbiAgd2lkdGg6IGF1dG87XFxuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XFxuLnZpZGVvLWpzLnZqcy1saXZlOm5vdCgudmpzLWxpdmV1aSkgLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCwgLnZpZGVvLWpzOm5vdCgudmpzLWxpdmUpIC52anMtc2Vlay10by1saXZlLWNvbnRyb2wge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wudmpzLWNvbnRyb2wudmpzLWF0LWxpdmUtZWRnZSB7XFxuICBjdXJzb3I6IGF1dG87IH1cXG4udmpzLXNlZWstdG8tbGl2ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlciB7XFxuICBtYXJnaW4tcmlnaHQ6IC41ZW07XFxuICBjb2xvcjogIzg4ODsgfVxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wudmpzLWNvbnRyb2wudmpzLWF0LWxpdmUtZWRnZSAudmpzLWljb24tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHJlZDsgfVxcbi52aWRlby1qcyAudmpzLXRpbWUtY29udHJvbCB7XFxuICBmbGV4OiBub25lO1xcbiAgZm9udC1zaXplOiAxZW07XFxuICBsaW5lLWhlaWdodDogM2VtO1xcbiAgbWluLXdpZHRoOiAyZW07XFxuICB3aWR0aDogYXV0bztcXG4gIHBhZGRpbmctbGVmdDogMWVtO1xcbiAgcGFkZGluZy1yaWdodDogMWVtOyB9XFxuLnZqcy1saXZlIC52anMtdGltZS1jb250cm9sIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG4udmlkZW8tanMgLnZqcy1jdXJyZW50LXRpbWUsIC52anMtbm8tZmxleCAudmpzLWN1cnJlbnQtdGltZSB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZpZGVvLWpzIC52anMtZHVyYXRpb24sIC52anMtbm8tZmxleCAudmpzLWR1cmF0aW9uIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG4udmpzLXRpbWUtZGl2aWRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbGluZS1oZWlnaHQ6IDNlbTsgfVxcbi52anMtbGl2ZSAudmpzLXRpbWUtZGl2aWRlciB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIHtcXG4gIGN1cnNvcjogcG9pbnRlcjsgfVxcbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xcbiAgZmxleDogbm9uZTsgfVxcbi52anMtdGV4dC10cmFjay1kaXNwbGF5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogM2VtO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cXG4udmlkZW8tanMudmpzLXVzZXItaW5hY3RpdmUudmpzLXBsYXlpbmcgLnZqcy10ZXh0LXRyYWNrLWRpc3BsYXkge1xcbiAgYm90dG9tOiAxZW07IH1cXG4udmlkZW8tanMgLnZqcy10ZXh0LXRyYWNrIHtcXG4gIGZvbnQtc2l6ZTogMS40ZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXJnaW4tYm90dG9tOiAuMWVtOyB9XFxuLnZqcy1zdWJ0aXRsZXMge1xcbiAgY29sb3I6ICNmZmY7IH1cXG4udmpzLWNhcHRpb25zIHtcXG4gIGNvbG9yOiAjZmM2OyB9XFxuLnZqcy10dC1jdWUge1xcbiAgZGlzcGxheTogYmxvY2s7IH1cXG52aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zZW0pOyB9XFxuLnZpZGVvLWpzLnZqcy11c2VyLWluYWN0aXZlLnZqcy1wbGF5aW5nIHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZGlzcGxheSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEuNWVtKTsgfVxcbi52aWRlby1qcyAudmpzLXBpY3R1cmUtaW4tcGljdHVyZS1jb250cm9sIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZsZXg6IG5vbmU7IH1cXG4udmlkZW8tanMgLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxleDogbm9uZTsgfVxcbi52anMtcGxheWJhY2stcmF0ZSAudmpzLXBsYXliYWNrLXJhdGUtdmFsdWUsIC52anMtcGxheWJhY2stcmF0ZSA+IC52anMtbWVudS1idXR0b24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlOyB9XFxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGZvbnQtc2l6ZTogMS41ZW07XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcbi52anMtcGxheWJhY2stcmF0ZSAudmpzLW1lbnUge1xcbiAgd2lkdGg6IDRlbTtcXG4gIGxlZnQ6IDA7IH1cXG4udmpzLWVycm9yIC52anMtZXJyb3ItZGlzcGxheSAudmpzLW1vZGFsLWRpYWxvZy1jb250ZW50IHtcXG4gIGZvbnQtc2l6ZTogMS40ZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cXG4udmpzLWVycm9yIC52anMtZXJyb3ItZGlzcGxheTpiZWZvcmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBjb250ZW50OiBcXFwiWFxcXCI7XFxuICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDRlbTtcXG4gIGxlZnQ6IDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIG1hcmdpbi10b3A6IC0uNWVtO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdGV4dC1zaGFkb3c6IC4wNWVtIC4wNWVtIC4xZW0gIzAwMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRvcDogNTAlO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuLnZqcy1sb2FkaW5nLXNwaW5uZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNTAlO1xcbiAgbWFyZ2luOiAtMjVweCAwIDAgLTI1cHg7XFxuICBvcGFjaXR5OiAuODU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgYm9yZGVyOiA2cHggc29saWQgcmdiYSg0MywgNTEsIDYzLCAwLjcpO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICB3aWR0aDogNTBweDtcXG4gIGhlaWdodDogNTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDI1cHg7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47IH1cXG4udmpzLXNlZWtpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXIsIC52anMtd2FpdGluZyAudmpzLWxvYWRpbmctc3Bpbm5lciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiB2anMtc3Bpbm5lci1zaG93IDBzIGxpbmVhciAuM3MgZm9yd2FyZHM7XFxuICBhbmltYXRpb246IHZqcy1zcGlubmVyLXNob3cgMHMgbGluZWFyIC4zcyBmb3J3YXJkczsgfVxcbi52anMtbG9hZGluZy1zcGlubmVyOmFmdGVyLCAudmpzLWxvYWRpbmctc3Bpbm5lcjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBtYXJnaW46IC02cHg7XFxuICBib3gtc2l6aW5nOiBpbmhlcml0O1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgb3BhY2l0eTogMTtcXG4gIGJvcmRlcjogaW5oZXJpdDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmOyB9XFxuLnZqcy1zZWVraW5nIC52anMtbG9hZGluZy1zcGlubmVyOmFmdGVyLCAudmpzLXNlZWtpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXI6YmVmb3JlLCAudmpzLXdhaXRpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXI6YWZ0ZXIsIC52anMtd2FpdGluZyAudmpzLWxvYWRpbmctc3Bpbm5lcjpiZWZvcmUge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHZqcy1zcGlubmVyLXNwaW4gMS4xcyBjdWJpYy1iZXppZXIoMC42LCAwLjIsIDAsIDAuOCkgaW5maW5pdGUsIHZqcy1zcGlubmVyLWZhZGUgMS4xcyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHZqcy1zcGlubmVyLXNwaW4gMS4xcyBjdWJpYy1iZXppZXIoMC42LCAwLjIsIDAsIDAuOCkgaW5maW5pdGUsIHZqcy1zcGlubmVyLWZhZGUgMS4xcyBsaW5lYXIgaW5maW5pdGU7IH1cXG4udmpzLXNlZWtpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXI6YmVmb3JlLCAudmpzLXdhaXRpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXI6YmVmb3JlIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7IH1cXG4udmpzLXNlZWtpbmcgLnZqcy1sb2FkaW5nLXNwaW5uZXI6YWZ0ZXIsIC52anMtd2FpdGluZyAudmpzLWxvYWRpbmctc3Bpbm5lcjphZnRlciB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC40NHM7XFxuICBhbmltYXRpb24tZGVsYXk6IC40NHM7IH1cXG5Aa2V5ZnJhbWVzIHZqcy1zcGlubmVyLXNob3cge1xcbiAgdG8ge1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9IH1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgdmpzLXNwaW5uZXItc2hvdyB7XFxuICB0byB7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7IH0gfVxcbkBrZXlmcmFtZXMgdmpzLXNwaW5uZXItc3BpbiB7XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XFxuQC13ZWJraXQta2V5ZnJhbWVzIHZqcy1zcGlubmVyLXNwaW4ge1xcbiAgMTAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XFxuQGtleWZyYW1lcyB2anMtc3Bpbm5lci1mYWRlIHtcXG4gIDAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMjAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMzUlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjsgfVxcbiAgNjAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMTAwJSB7XFxuICAgIGJvcmRlci10b3AtY29sb3I6ICM3Mzg1OWY7IH0gfVxcbkAtd2Via2l0LWtleWZyYW1lcyB2anMtc3Bpbm5lci1mYWRlIHtcXG4gIDAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMjAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMzUlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjsgfVxcbiAgNjAlIHtcXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzczODU5ZjsgfVxcbiAgMTAwJSB7XFxuICAgIGJvcmRlci10b3AtY29sb3I6ICM3Mzg1OWY7IH0gfVxcbi52anMtY2hhcHRlcnMtYnV0dG9uIC52anMtbWVudSB1bCB7XFxuICB3aWR0aDogMjRlbTsgfVxcbi52aWRlby1qcyAudmpzLXN1YnMtY2Fwcy1idXR0b24gKyAudmpzLW1lbnUgLnZqcy1jYXB0aW9ucy1tZW51LWl0ZW0gLnZqcy1tZW51LWl0ZW0tdGV4dCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IC0uMWVtOyB9XFxuLnZpZGVvLWpzIC52anMtc3Vicy1jYXBzLWJ1dHRvbiArIC52anMtbWVudSAudmpzLWNhcHRpb25zLW1lbnUtaXRlbSAudmpzLW1lbnUtaXRlbS10ZXh0IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBjb250ZW50OiBcXFwi74SNXFxcIjtcXG4gIGZvbnQtc2l6ZTogMS41ZW07XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxcbi52aWRlby1qcyAudmpzLWF1ZGlvLWJ1dHRvbiArIC52anMtbWVudSAudmpzLW1haW4tZGVzYy1tZW51LWl0ZW0gLnZqcy1tZW51LWl0ZW0tdGV4dCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IC0uMWVtOyB9XFxuLnZpZGVvLWpzIC52anMtYXVkaW8tYnV0dG9uICsgLnZqcy1tZW51IC52anMtbWFpbi1kZXNjLW1lbnUtaXRlbSAudmpzLW1lbnUtaXRlbS10ZXh0IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xcbiAgZm9udC1mYW1pbHk6IFZpZGVvSlM7XFxuICBjb250ZW50OiBcXFwiIO+EnVxcXCI7XFxuICBmb250LXNpemU6IDEuNWVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH1cXG4udmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC1zbWFsbCAudmpzLWF1ZGlvLWJ1dHRvbiwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtc21hbGwgLnZqcy1jYXB0aW9ucy1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXNtYWxsIC52anMtY2hhcHRlcnMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC1zbWFsbCAudmpzLWN1cnJlbnQtdGltZSwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtc21hbGwgLnZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC1zbWFsbCAudmpzLWR1cmF0aW9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC1zbWFsbCAudmpzLXBsYXliYWNrLXJhdGUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXNtYWxsIC52anMtcmVtYWluaW5nLXRpbWUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXNtYWxsIC52anMtc3VidGl0bGVzLWJ1dHRvbiwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtc21hbGwgLnZqcy10aW1lLWRpdmlkZXIsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXNtYWxsIC52anMtdm9sdW1lLWNvbnRyb2wsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1hdWRpby1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1jYXB0aW9ucy1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1jaGFwdGVycy1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1jdXJyZW50LXRpbWUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtZHVyYXRpb24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1wbGF5YmFjay1yYXRlLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtcmVtYWluaW5nLXRpbWUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1zdWJ0aXRsZXMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtdGltZS1kaXZpZGVyLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtdm9sdW1lLWNvbnRyb2wsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1hdWRpby1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1jYXB0aW9ucy1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1jaGFwdGVycy1idXR0b24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1jdXJyZW50LXRpbWUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsIC52anMtZHVyYXRpb24sIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1wbGF5YmFjay1yYXRlLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsIC52anMtcmVtYWluaW5nLXRpbWUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy1zdWJ0aXRsZXMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsIC52anMtdGltZS1kaXZpZGVyLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsIC52anMtdm9sdW1lLWNvbnRyb2wge1xcbiAgZGlzcGxheTogbm9uZTsgfVxcbi52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXNtYWxsIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtc21hbGwgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsOmFjdGl2ZSwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtc21hbGwgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsOmhvdmVyLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtdGlueSAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC10aW55IC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbDpob3ZlciwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQteC1zbWFsbCAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLXNsaWRlci1hY3RpdmUsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsOmFjdGl2ZSwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQteC1zbWFsbCAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6aG92ZXIge1xcbiAgd2lkdGg6IGF1dG87XFxuICB3aWR0aDogaW5pdGlhbDsgfVxcbi52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1zdWJzLWNhcHMtYnV0dG9uLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsOm5vdCgudmpzLWxpdmUpIC52anMtc3Vicy1jYXBzLWJ1dHRvbiwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQteC1zbWFsbDpub3QoLnZqcy1saXZldWkpIC52anMtc3Vicy1jYXBzLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQtdGlueSAudmpzLWN1c3RvbS1jb250cm9sLXNwYWNlciwgLnZpZGVvLWpzOm5vdCgudmpzLWZ1bGxzY3JlZW4pLnZqcy1sYXlvdXQteC1zbWFsbC52anMtbGl2ZXVpIC52anMtY3VzdG9tLWNvbnRyb2wtc3BhY2VyIHtcXG4gIGZsZXg6IGF1dG87XFxuICBkaXNwbGF5OiBibG9jazsgfVxcbi52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkudmpzLW5vLWZsZXggLnZqcy1jdXN0b20tY29udHJvbC1zcGFjZXIsIC52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXgtc21hbGwudmpzLWxpdmV1aS52anMtbm8tZmxleCAudmpzLWN1c3RvbS1jb250cm9sLXNwYWNlciB7XFxuICB3aWR0aDogYXV0bzsgfVxcbi52aWRlby1qczpub3QoLnZqcy1mdWxsc2NyZWVuKS52anMtbGF5b3V0LXRpbnkgLnZqcy1wcm9ncmVzcy1jb250cm9sLCAudmlkZW8tanM6bm90KC52anMtZnVsbHNjcmVlbikudmpzLWxheW91dC14LXNtYWxsLnZqcy1saXZldWkgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG4udmpzLW1vZGFsLWRpYWxvZy52anMtdGV4dC10cmFjay1zZXR0aW5ncyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzMzNmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MywgNTEsIDYzLCAwLjc1KTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgaGVpZ2h0OiA3MCU7IH1cXG4udmpzLXRleHQtdHJhY2stc2V0dGluZ3MgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCB7XFxuICBkaXNwbGF5OiB0YWJsZTsgfVxcbi52anMtdGV4dC10cmFjay1zZXR0aW5ncyAudmpzLXRyYWNrLXNldHRpbmdzLWNvbG9ycywgLnZqcy10ZXh0LXRyYWNrLXNldHRpbmdzIC52anMtdHJhY2stc2V0dGluZ3MtY29udHJvbHMsIC52anMtdGV4dC10cmFjay1zZXR0aW5ncyAudmpzLXRyYWNrLXNldHRpbmdzLWZvbnQge1xcbiAgZGlzcGxheTogdGFibGUtY2VsbDsgfVxcbi52anMtdGV4dC10cmFjay1zZXR0aW5ncyAudmpzLXRyYWNrLXNldHRpbmdzLWNvbnRyb2xzIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfVxcbkBzdXBwb3J0cyAoZGlzcGxheTogZ3JpZCkge1xcbiAgLnZqcy10ZXh0LXRyYWNrLXNldHRpbmdzIC52anMtbW9kYWwtZGlhbG9nLWNvbnRlbnQge1xcbiAgICBkaXNwbGF5OiBncmlkO1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XFxuICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyO1xcbiAgICBwYWRkaW5nOiAyMHB4IDI0cHggMCAyNHB4OyB9XFxuICAudmpzLXRyYWNrLXNldHRpbmdzLWNvbnRyb2xzIC52anMtZGVmYXVsdC1idXR0b24ge1xcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XFxuICAudmpzLXRleHQtdHJhY2stc2V0dGluZ3MgLnZqcy10cmFjay1zZXR0aW5ncy1jb250cm9scyB7XFxuICAgIGdyaWQtY29sdW1uOiAxLy0xOyB9XFxuICAudmpzLWxheW91dC1zbWFsbCAudmpzLXRleHQtdHJhY2stc2V0dGluZ3MgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCwgLnZqcy1sYXlvdXQtdGlueSAudmpzLXRleHQtdHJhY2stc2V0dGluZ3MgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCwgLnZqcy1sYXlvdXQteC1zbWFsbCAudmpzLXRleHQtdHJhY2stc2V0dGluZ3MgLnZqcy1tb2RhbC1kaWFsb2ctY29udGVudCB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH1cXG4udmpzLXRyYWNrLXNldHRpbmcgPiBzZWxlY3Qge1xcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XFxuICBtYXJnaW4tYm90dG9tOiAuNWVtOyB9XFxuLnZqcy10ZXh0LXRyYWNrLXNldHRpbmdzIGZpZWxkc2V0IHtcXG4gIG1hcmdpbjogNXB4O1xcbiAgcGFkZGluZzogM3B4O1xcbiAgYm9yZGVyOiBub25lOyB9XFxuLnZqcy10ZXh0LXRyYWNrLXNldHRpbmdzIGZpZWxkc2V0IHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XFxuLnZqcy10ZXh0LXRyYWNrLXNldHRpbmdzIGZpZWxkc2V0IHNwYW4gPiBzZWxlY3Qge1xcbiAgbWF4LXdpZHRoOiA3LjNlbTsgfVxcbi52anMtdGV4dC10cmFjay1zZXR0aW5ncyBsZWdlbmQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBtYXJnaW46IDAgMCA1cHggMDsgfVxcbi52anMtdGV4dC10cmFjay1zZXR0aW5ncyAudmpzLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTtcXG4gIGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luOiAwIDAgNXB4IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiAwO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICB3aWR0aDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxcbi52anMtdHJhY2stc2V0dGluZ3MtY29udHJvbHMgYnV0dG9uOmFjdGl2ZSwgLnZqcy10cmFjay1zZXR0aW5ncy1jb250cm9scyBidXR0b246Zm9jdXMge1xcbiAgb3V0bGluZS1zdHlsZTogc29saWQ7XFxuICBvdXRsaW5lLXdpZHRoOiBtZWRpdW07XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgI2ZmZiA4OCUsICM3Mzg1OWYgMTAwJSk7IH1cXG4udmpzLXRyYWNrLXNldHRpbmdzLWNvbnRyb2xzIGJ1dHRvbjpob3ZlciB7XFxuICBjb2xvcjogcmdiYSg0MywgNTEsIDYzLCAwLjc1KTsgfVxcbi52anMtdHJhY2stc2V0dGluZ3MtY29udHJvbHMgYnV0dG9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTE4MGRlZywgI2ZmZiA4OCUsICM3Mzg1OWYgMTAwJSk7XFxuICBjb2xvcjogIzJiMzMzZjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDsgfVxcbi52anMtdHJhY2stc2V0dGluZ3MtY29udHJvbHMgLnZqcy1kZWZhdWx0LWJ1dHRvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDFlbTsgfVxcbkBtZWRpYSBwcmludCB7XFxuICAudmlkZW8tanMgPiA6bm90KC52anMtdGVjaCk6bm90KC52anMtcG9zdGVyKSB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjsgfSB9XFxuLnZqcy1yZXNpemUtbWFuYWdlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBib3JkZXI6IG5vbmU7XFxuICB6LWluZGV4OiAtMTAwMDsgfVxcbi5qcy1mb2N1cy12aXNpYmxlIC52aWRlby1qcyA6Zm9jdXM6bm90KC5mb2N1cy12aXNpYmxlKSB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYmFja2dyb3VuZDogMCAwOyB9XFxuLnZpZGVvLWpzIC52anMtbWVudSA6Zm9jdXM6bm90KDpmb2N1cy12aXNpYmxlKSwgLnZpZGVvLWpzIDpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gIG91dGxpbmU6IDA7XFxuICBiYWNrZ3JvdW5kOiAwIDA7IH1cXG5cIiwgXCJcIl0pO1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/video.js/dist/alt/video-js-cdn.min.css\n"); - -/***/ }), - -/***/ "../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../ui/scss/all.scss": -/*!*********************************************************************************************************************************************!*\ - !*** ../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src!../node_modules/sass-loader/dist/cjs.js!../ui/scss/all.scss ***! - \*********************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Imports\nvar urlEscape = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/url-escape.js */ \"../node_modules/css-loader/dist/runtime/url-escape.js\");\nvar ___CSS_LOADER_URL___0___ = urlEscape(__webpack_require__(/*! ../../static/img/busy.gif */ \"../static/img/busy.gif\"));\n\n// Module\nexports.push([module.i, \":root {\\n --color-primary: #257761;\\n --color-primary-alt: #e4f4ef;\\n --color-primary-alt-2: #4b8576;\\n --color-secondary: #295284;\\n --color-secondary-alt: #d9eaff;\\n --color-tertiary: #552470;\\n --color-tertiary-alt: #f7e8ff;\\n --color-danger: #9b2023;\\n --color-danger-alt: #fccdce;\\n --color-warning: #fff58c;\\n --color-cost: #f4e866;\\n --color-focus: #93cff2;\\n --color-border: #ddd;\\n --color-black: #111;\\n --color-white: #fdfdfd;\\n --color-white-alt: #fafafa;\\n --color-gray-1: #eff1f4;\\n --color-gray-2: #d8dde1;\\n --color-gray-3: #ced4da;\\n --color-gray-4: #abb1b7;\\n --color-gray-5: #666a6d;\\n --color-text: var(--color-black);\\n --color-text-subtitle: var(--color-gray-5);\\n --color-text-inverse: #fdfdfd;\\n --color-button-primary-bg: var(--color-primary);\\n --color-button-primary-text: var(--color-primary-alt);\\n --color-button-primary-bg-hover: var(--color-primary-alt-2);\\n --color-button-primary-hover-text: var(--color-primary-alt);\\n --color-button-secondary-bg: var(--color-secondary-alt);\\n --color-button-secondary-text: var(--color-secondary);\\n --color-button-secondary-bg-hover: var(--color-gray-3);\\n --color-button-alt-bg: var(--color-gray-1);\\n --color-button-alt-text: var(--color-text);\\n --color-button-alt-bg-hover: var(--color-gray-2);\\n --color-link: var(--color-primary);\\n --color-link-hover: var(--color-black);\\n --color-input-color: #111111;\\n --color-input-label: var(--color-gray-5);\\n --color-input-placeholder: #212529;\\n --color-input-bg: #f2f2f2;\\n --color-input-bg-copyable: #434b53;\\n --color-input-border: var(--color-border);\\n --color-input-border-active: var(--color-secondary);\\n --color-input-toggle: var(--color-secondary);\\n --color-input-toggle-bg: var(--color-gray-1);\\n --color-input-toggle-bg-hover: var(--color-secondary-alt);\\n --color-table-highlight: var(--color-white-alt);\\n --color-tag: var(--color-primary);\\n --color-tag-bg: var(--color-primary-alt);\\n --color-tag-hover: var(--color-white);\\n --color-tag-bg-hover: var(--color-primary-alt-2); }\\n\\n:root {\\n --border-radius: 5px;\\n --height-input: 2.5rem;\\n --height-button: 2.5rem;\\n --height-checkbox: 24px;\\n --height-radio: 24px;\\n --height-badge: 24px;\\n --spacing-xxs: 0.2rem;\\n --spacing-xs: 0.4rem;\\n --spacing-s: 0.8rem;\\n --spacing-m: 1.6rem;\\n --spacing-l: 2.4rem;\\n --spacing-xl: 3.2rem;\\n --spacing-xxl: 6.4rem;\\n --aspect-ratio-bluray: 41.6666666667%;\\n --aspect-ratio-panavision: 36.3636363636%;\\n --aspect-ratio-sd: 75%;\\n --aspect-ratio-standard: 56.25%;\\n --font-mono: \\\"Fira Code\\\";\\n --font-sans: Inter;\\n --font-serif: Georgia;\\n --font-weight-base: 400;\\n --font-weight-light: 300;\\n --font-weight-bold: 700;\\n --font-base: 14px;\\n --font-body: 1rem;\\n --font-xsmall: 0.7344rem;\\n --font-small: 0.8571rem;\\n --font-large: 1.3rem;\\n --font-title: 1.71rem;\\n --font-heading: 2.94rem; }\\n\\nhtml {\\n box-sizing: border-box;\\n text-rendering: optimizeLegibility;\\n -moz-osx-font-smoothing: grayscale;\\n -webkit-font-smoothing: antialiased; }\\n\\n*,\\n*::before,\\n*::after {\\n margin: 0;\\n padding: 0;\\n border: none;\\n box-sizing: inherit;\\n outline: 0; }\\n\\n[disabled] {\\n pointer-events: none;\\n resize: none; }\\n\\n[readonly] {\\n cursor: not-allowed; }\\n\\n[for],\\n[role=\\\"button\\\"],\\n[type=\\\"button\\\"],\\n[type=\\\"checkbox\\\"],\\n[type=\\\"file\\\"],\\n[type=\\\"radio\\\"],\\n[type=\\\"select\\\"],\\n[type=\\\"submit\\\"] {\\n cursor: pointer; }\\n\\na,\\narea,\\nbutton,\\n[role=\\\"button\\\"],\\ninput,\\nlabel,\\nselect,\\nsummary,\\ntextarea {\\n touch-action: manipulation; }\\n\\nbutton,\\ninput,\\nselect,\\ntextarea {\\n background-color: transparent;\\n border-radius: 0;\\n font-family: inherit;\\n font-size: inherit;\\n font-weight: inherit;\\n -moz-appearance: none;\\n -webkit-appearance: none; }\\n\\nbutton:disabled,\\n input:disabled,\\n select:disabled,\\n textarea:disabled {\\n cursor: default; }\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n font-weight: normal;\\n font-size: 1em; }\\n\\nol,\\nul {\\n list-style-position: inside; }\\n\\nol > li,\\n ul > li {\\n list-style-position: inside; }\\n\\ntable {\\n border-spacing: 0; }\\n\\ndd {\\n width: 80%;\\n float: left; }\\n\\ndl {\\n width: 100%;\\n overflow-x: scroll;\\n overflow-y: hidden; }\\n\\ndt {\\n width: 20%;\\n float: left; }\\n\\nimg {\\n width: auto;\\n max-width: 100%;\\n height: auto;\\n max-height: 100%;\\n vertical-align: middle; }\\n\\na {\\n text-decoration: none; }\\n\\nbutton {\\n background-color: transparent;\\n line-height: inherit; }\\n\\nbutton:not(:disabled) {\\n cursor: pointer; }\\n\\nbutton:disabled {\\n opacity: 0.3; }\\n\\nhr {\\n width: 100%;\\n height: 1px;\\n background-color: var(--color-gray-1); }\\n\\ninput {\\n background-color: transparent;\\n color: inherit; }\\n\\ninput::placeholder {\\n color: inherit;\\n opacity: 0.2; }\\n\\ninput::-webkit-search-cancel-button {\\n -webkit-appearance: none; }\\n\\nselect {\\n outline: none; }\\n\\ntextarea {\\n width: 100%;\\n min-height: var(--spacing-xxl);\\n padding: var(--spacing-s);\\n border: 1px solid; }\\n\\ntextarea:not([disabled]) {\\n resize: vertical; }\\n\\n@media print {\\n pre,\\n blockquote {\\n border: 1px solid var(--color-gray-5) !important;\\n page-break-inside: avoid !important; }\\n tr,\\n img {\\n page-break-inside: avoid !important; }\\n img {\\n max-width: 100% !important; }\\n @page {\\n margin: 0.5cm !important; }\\n p,\\n h2,\\n h3 {\\n orphans: 3 !important;\\n widows: 3 !important; }\\n h2,\\n h3 {\\n page-break-after: avoid !important; }\\n thead {\\n display: table-header-group !important; }\\n * {\\n background-color: transparent !important;\\n background-image: none !important;\\n color: var(--lbry-black) !important;\\n filter: none !important;\\n text-shadow: none !important; }\\n p a[href]::after {\\n content: \\\" (\\\" attr(href) \\\")\\\" !important; }\\n p a[href^=\\\"javascript:\\\"]::after, p a[href^=\\\"#\\\"]::after {\\n content: \\\"\\\" !important; }\\n p abbr[title]::after {\\n content: \\\" (\\\" attr(title) \\\")\\\" !important; }\\n p a,\\n p abbr {\\n text-decoration: underline !important;\\n word-wrap: break-word !important; } }\\n\\n@keyframes loading-animation {\\n 0% {\\n background-position: -500px 0; }\\n 100% {\\n background-position: 500px 0; } }\\n\\n@keyframes pulse {\\n 0% {\\n opacity: 1; }\\n 50% {\\n opacity: 0.7; }\\n 100% {\\n opacity: 1; } }\\n\\n.badge, .badge--tag, .tag, .badge--tag-mature, .tag--mature, .badge--cost, .badge--free, .badge--alert {\\n height: var(--height-badge);\\n border-radius: var(--border-radius);\\n font-size: var(--font-small);\\n padding: var(--spacing-xs) var(--spacing-xs);\\n white-space: nowrap;\\n user-select: none;\\n cursor: pointer;\\n align-items: center; }\\n\\n.badge--tag, .tag {\\n background-color: var(--color-tag-bg);\\n color: var(--color-tag); }\\n\\n.badge--tag:hover, .tag:hover {\\n background-color: var(--color-tag-bg-hover);\\n color: var(--color-tag-hover); }\\n\\n.badge--tag-mature, .tag--mature {\\n background-color: var(--color-tertiary-alt);\\n color: var(--color-tertiary); }\\n\\n.badge--cost {\\n background-color: var(--color-cost);\\n color: var(--color-black);\\n line-height: 1; }\\n\\n.badge--free {\\n background-color: var(--color-secondary-alt);\\n color: var(--color-secondary); }\\n\\n.badge--alert {\\n background-color: var(--color-danger-alt);\\n color: var(--color-danger); }\\n\\n.button {\\n display: inline-block;\\n position: relative;\\n white-space: nowrap;\\n text-decoration: none;\\n cursor: pointer; }\\n\\n.button:disabled {\\n opacity: 0.5; }\\n\\n.button--primary,\\n.button--secondary,\\n.button--alt,\\n.button--link,\\n.button--uri-indicator,\\n.markdown-preview a,\\n.tab {\\n border-radius: var(--border-radius); }\\n\\n.button--primary,\\n.button--secondary,\\n.button--alt {\\n height: var(--height-button);\\n border-radius: var(--border-radius);\\n padding: var(--spacing-s) var(--spacing-m);\\n line-height: 1.2;\\n font-weight: var(--font-weight-bold); }\\n\\n.button--alt {\\n padding: var(--spacing-s) var(--spacing-s); }\\n\\n.button--primary {\\n background-color: var(--color-button-primary-bg);\\n color: var(--color-button-primary-text); }\\n\\n.button--primary:hover {\\n color: var(--color-button-primary-hover-text);\\n background-color: var(--color-button-primary-bg-hover); }\\n\\n.button--secondary {\\n background-color: var(--color-button-secondary-bg);\\n color: var(--color-button-secondary-text); }\\n\\n.button--secondary:hover {\\n background-color: var(--color-button-secondary-bg-hover); }\\n\\n.button--alt {\\n background-color: var(--color-button-alt-bg);\\n color: var(--color-button-alt-text); }\\n\\n.button--alt:hover {\\n background-color: var(--color-button-alt-bg-hover); }\\n\\n.button--icon, .file-render .video-js .vjs-big-play-button, .file-render__embed .video-js .vjs-big-play-button {\\n width: 5rem;\\n height: 5rem;\\n background-repeat: no-repeat;\\n background-size: 50%;\\n border-radius: 50%;\\n transition: background-color 0.2s;\\n background-color: var(--color-primary); }\\n\\n.button--icon:hover, .file-render .video-js .vjs-big-play-button:hover, .file-render__embed .video-js .vjs-big-play-button:hover {\\n background-color: var(--color-button-primary-bg-hover); }\\n\\n.button--icon.button--play, .file-render .video-js .vjs-big-play-button, .file-render__embed .video-js .vjs-big-play-button {\\n background-image: url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Cg stroke='white' stroke-width='2' fill='white' fill-rule='evenodd' stroke-linejoin='round'%3E %3Cpolygon points='5 21 5 3 21 12'/%3E %3C/g%3E %3C/svg%3E\\\");\\n background-position: calc(50% + 0.1rem) center; }\\n\\n.button--icon.button--view, .file-render .video-js .button--view.vjs-big-play-button, .file-render__embed .video-js .button--view.vjs-big-play-button {\\n background-image: url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Cg stroke='white' stroke-width='2' fill='none' fill-rule='evenodd'%3E %3Cpath d='M2, 12 C2, 12 5, 5 12, 5 C19, 5 22, 12 22, 12 C22, 12 19, 19 12, 19 C5, 19 2, 12 2, 12 Z' stroke-linejoin='round'/%3E %3Ccircle cx='12' cy='12' r='3'/%3E %3Cpath d='M12, 5 L12, 3' stroke-linecap='round'/%3E %3Cpath d='M18, 6.5 L19, 5' stroke-linecap='round'/%3E %3Cpath d='M21, 10 L22.5, 9' stroke-linecap='round'/%3E %3Cpath d='M1.5, 10 L3, 9' stroke-linecap='round' transform='translate(2.250000, 9.500000) scale(1, -1) translate(-2.250000, -9.500000)'/%3E %3Cpath d='M5, 6.5 L6, 5' stroke-linecap='round' transform='translate(5.500000, 5.750000) scale(-1, 1) translate(-5.500000, -5.750000)'/%3E %3C/g%3E %3C/svg%3E\\\");\\n background-position: center calc(50% + 0.1rem); }\\n\\n.button--link,\\n.button--uri-indicator,\\n.markdown-preview a,\\n.tab {\\n color: var(--color-link);\\n transition: color 0.2s;\\n word-break: break-all; }\\n\\n.button--link:hover, .button--uri-indicator:hover, .markdown-preview a:hover, .tab:hover {\\n text-decoration: underline;\\n color: var(--color-link-hover); }\\n\\ninput,\\ntextarea,\\nselect {\\n height: var(--height-input);\\n border-radius: var(--border-radius);\\n border: 1px solid;\\n color: var(--color-input);\\n border-color: var(--color-input-border);\\n background-color: var(--color-input-bg);\\n padding-right: var(--spacing-s);\\n padding-left: var(--spacing-s); }\\n\\ninput:focus,\\n textarea:focus,\\n select:focus {\\n box-shadow: 0 0 0 3px var(--color-focus); }\\n\\ninput::placeholder,\\n textarea::placeholder,\\n select::placeholder {\\n color: var(--color-input-placeholder);\\n opacity: 0.4; }\\n\\ninput:disabled,\\n textarea:disabled,\\n select:disabled {\\n opacity: 0.4; }\\n\\ninput:disabled + label,\\n textarea:disabled + label,\\n select:disabled + label {\\n opacity: 0.4; }\\n\\ninput[type=\\\"range\\\"],\\n textarea[type=\\\"range\\\"],\\n select[type=\\\"range\\\"] {\\n height: auto;\\n height: 0.5rem;\\n background-color: var(--color-secondary); }\\n\\ncheckbox-element,\\nradio-element,\\nselect {\\n cursor: pointer; }\\n\\nselect {\\n background-image: url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23212529'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A\\\");\\n background-position: 99% center;\\n background-repeat: no-repeat;\\n background-size: 1rem;\\n padding-right: var(--spacing-l);\\n padding-left: var(--spacing-s); }\\n\\nfieldset-group, .fieldset-group {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between; }\\n\\nfieldset-group.fieldset-group--smushed fieldset-section + fieldset-section, .fieldset-group--smushed.fieldset-group fieldset-section + fieldset-section, fieldset-group.fieldset-group--smushed .fieldset-section + fieldset-section, .fieldset-group--smushed.fieldset-group .fieldset-section + fieldset-section, fieldset-group.fieldset-group--smushed fieldset-section + .fieldset-section, .fieldset-group--smushed.fieldset-group fieldset-section + .fieldset-section, fieldset-group.fieldset-group--smushed .fieldset-section + .fieldset-section, .fieldset-group--smushed.fieldset-group .fieldset-section + .fieldset-section {\\n margin-top: 0; }\\n\\nfieldset-section, .fieldset-section,\\nform,\\n.checkbox,\\n.radio {\\n display: flex;\\n flex-direction: column; }\\n\\nfieldset-section + fieldset-section, .fieldset-section + fieldset-section, fieldset-section + .fieldset-section, .fieldset-section + .fieldset-section,\\n fieldset-section + form,\\n .fieldset-section + form,\\n fieldset-section + .checkbox,\\n .fieldset-section + .checkbox,\\n fieldset-section + .radio,\\n .fieldset-section + .radio,\\n form + fieldset-section,\\n form + .fieldset-section,\\n form + form,\\n form + .checkbox,\\n form + .radio,\\n .checkbox + fieldset-section,\\n .checkbox + .fieldset-section,\\n .checkbox + form,\\n .checkbox + .checkbox,\\n .checkbox + .radio,\\n .radio + fieldset-section,\\n .radio + .fieldset-section,\\n .radio + form,\\n .radio + .checkbox,\\n .radio + .radio {\\n margin-top: var(--spacing-s); }\\n\\nfieldset-section:last-child, .fieldset-section:last-child,\\n form:last-child,\\n .checkbox:last-child,\\n .radio:last-child {\\n margin-bottom: 0; }\\n\\nfieldset-section input, .fieldset-section input,\\n fieldset-section select,\\n .fieldset-section select,\\n form input,\\n form select,\\n .checkbox input,\\n .checkbox select,\\n .radio input,\\n .radio select {\\n width: 100%; }\\n\\nlabel {\\n font-size: var(--font-small);\\n color: var(--color-input-label);\\n display: inline-block;\\n margin-bottom: var(--spacing-xxs); }\\n\\ninput-submit, .input-submit {\\n display: flex; }\\n\\ninput-submit > *:first-child, .input-submit > *:first-child,\\n input-submit > *:nth-child(2),\\n .input-submit > *:nth-child(2) {\\n margin: 0; }\\n\\ninput-submit > *:first-child, .input-submit > *:first-child {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n border-right: none; }\\n\\ninput-submit > *:nth-child(2),\\n .input-submit > *:nth-child(2) {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border: 1px solid var(--color-border); }\\n\\n.checkbox,\\n.radio {\\n position: relative; }\\n\\n.checkbox input[type=\\\"checkbox\\\"],\\n .checkbox input[type=\\\"radio\\\"],\\n .radio input[type=\\\"checkbox\\\"],\\n .radio input[type=\\\"radio\\\"] {\\n height: var(--height-checkbox);\\n width: var(--height-checkbox);\\n position: absolute;\\n border: none;\\n left: 0;\\n padding: 0;\\n background-color: transparent; }\\n\\n.checkbox input[type=\\\"checkbox\\\"]:disabled + label,\\n .checkbox input[type=\\\"radio\\\"]:disabled + label,\\n .radio input[type=\\\"checkbox\\\"]:disabled + label,\\n .radio input[type=\\\"radio\\\"]:disabled + label {\\n cursor: default;\\n pointer-events: none; }\\n\\n.checkbox label,\\n .radio label {\\n position: relative;\\n display: inline-block;\\n margin: 0;\\n font-size: var(--font-base);\\n padding-left: calc(var(--height-checkbox) + var(--spacing-s));\\n min-height: var(--height-checkbox); }\\n\\n.checkbox label::before,\\n .radio label::before {\\n background-color: var(--color-input-toggle-bg); }\\n\\n.checkbox label:hover::before,\\n .radio label:hover::before {\\n background-color: var(--color-input-toggle-bg-hover); }\\n\\n.checkbox label::before,\\n .checkbox label::after,\\n .radio label::before,\\n .radio label::after {\\n position: absolute;\\n content: \\\"\\\"; }\\n\\n.checkbox input[type=\\\"checkbox\\\"] + label::after,\\n .checkbox input[type=\\\"radio\\\"] + label::after,\\n .radio input[type=\\\"checkbox\\\"] + label::after,\\n .radio input[type=\\\"radio\\\"] + label::after {\\n content: none; }\\n\\n.checkbox input[type=\\\"checkbox\\\"]:checked + label::after,\\n .checkbox input[type=\\\"radio\\\"]:checked + label::after,\\n .radio input[type=\\\"checkbox\\\"]:checked + label::after,\\n .radio input[type=\\\"radio\\\"]:checked + label::after {\\n content: \\\"\\\"; }\\n\\n.checkbox input[type=\\\"checkbox\\\"]:focus + label::before,\\n .checkbox input[type=\\\"radio\\\"]:focus + label::before,\\n .radio input[type=\\\"checkbox\\\"]:focus + label::before,\\n .radio input[type=\\\"radio\\\"]:focus + label::before {\\n box-shadow: 0 0 0 3px var(--color-focus); }\\n\\n.checkbox label::before {\\n height: var(--height-checkbox);\\n width: var(--height-checkbox);\\n border: 1px solid var(--color-input-border);\\n border-radius: var(--border-radius);\\n left: 0px;\\n top: -1px; }\\n\\n.checkbox label::after {\\n height: 6px;\\n width: 12px;\\n border-left: 2px solid;\\n border-bottom: 2px solid;\\n border-color: var(--color-input-toggle);\\n transform: rotate(-45deg);\\n left: 6px;\\n top: 6px; }\\n\\n.radio input[type=\\\"radio\\\"] {\\n border-radius: 50%; }\\n\\n.radio label::before {\\n height: var(--height-radio);\\n width: var(--height-radio);\\n border: 1px solid var(--color-input-border);\\n border-radius: calc(var(--height-radio) * 0.5);\\n left: 0px;\\n top: -1px; }\\n\\n.radio label::after {\\n height: 12px;\\n width: 12px;\\n border-radius: 50%;\\n background-color: var(--color-secondary);\\n left: 6px;\\n top: 5px; }\\n\\n.range__label {\\n display: flex;\\n justify-content: space-between;\\n width: 100%; }\\n\\n.range__label > * {\\n width: 33%;\\n text-align: center; }\\n\\n.range__label > *:first-of-type {\\n text-align: left; }\\n\\n.range__label > *:last-of-type {\\n text-align: right; }\\n\\n.table {\\n width: 100%;\\n position: relative; }\\n\\n.table th,\\n .table td {\\n overflow: hidden; }\\n\\n.table th:first-of-type,\\n .table td:first-of-type {\\n padding-left: var(--spacing-l); }\\n\\n.table th:last-of-type,\\n .table td:last-of-type {\\n padding-right: var(--spacing-l); }\\n\\n.table thead {\\n cursor: default;\\n position: relative; }\\n\\n.table thead th {\\n border-bottom: 1px solid var(--color-border); }\\n\\n.table tr:not(:last-of-type) td {\\n border-bottom: 1px solid var(--color-border); }\\n\\n.table tr:nth-child(2n) {\\n background-color: var(--color-table-highlight); }\\n\\n.table th,\\n .table td {\\n padding: 0.5rem 1rem; }\\n\\nth {\\n text-align: left; }\\n\\n.table--fixed {\\n table-layout: fixed; }\\n\\n.table--condensed td,\\n.table--condensed th {\\n padding: 0.5rem; }\\n\\n.table--condensed td:first-of-type,\\n .table--condensed th:first-of-type {\\n padding-left: 0; }\\n\\n.table--condensed td:last-of-type,\\n .table--condensed th:last-of-type {\\n padding-right: 0; }\\n\\n.table--condensed tr:nth-child(2n) {\\n background-color: transparent; }\\n\\n.table__item-label {\\n font-size: var(--font-multiplier-small);\\n font-weight: 300;\\n color: var(--color-text-subtitle); }\\n\\n.table__item--align-right {\\n text-align: right; }\\n\\n.section {\\n margin-top: var(--spacing-l); }\\n\\n.section__actions, .channel__quick-actions, .section__actions--centered {\\n display: flex;\\n align-items: center;\\n margin-top: var(--spacing-medium); }\\n\\n.section__actions:only-child, .channel__quick-actions:only-child, .section__actions--centered:only-child {\\n margin-top: var(--spacing-xs); }\\n\\n.section__actions > *:not(:last-child), .channel__quick-actions > *:not(:last-child), .section__actions--centered > *:not(:last-child) {\\n margin-right: var(--spacing-medium); }\\n\\n.section__subtitle, .section__subtitle--status {\\n color: var(--color-text-subtitle);\\n margin: var(--spacing-small) 0;\\n font-size: var(--font-body); }\\n\\ndrawer-navigation {\\n width: 100%;\\n height: 5rem;\\n display: inline-flex;\\n flex: 1;\\n font-size: inherit;\\n justify-content: center;\\n position: relative;\\n z-index: 10; }\\n\\ndrawer-navigation-helper {\\n width: 0;\\n height: 0;\\n top: 3rem;\\n left: -5rem;\\n border-right: 8rem solid transparent;\\n border-bottom: 5rem solid transparent;\\n border-left: 8rem solid transparent;\\n position: absolute; }\\n\\ndrawer-section {\\n padding-right: 1rem;\\n padding-left: 1rem; }\\n\\ndrawer-section:not(:hover):not(.active) drawer-title::after {\\n background-color: transparent; }\\n\\ndrawer-section:not(:hover):not(.active) drawer-navigation-helper,\\n drawer-section:not(:hover):not(.active) drawer-wrap {\\n display: none; }\\n\\ndrawer-section:hover, drawer-section.active {\\n z-index: 3; }\\n\\ndrawer-section:hover drawer-title::after, drawer-section.active drawer-title::after {\\n background-color: var(--color-primary); }\\n\\ndrawer-title {\\n height: 100%;\\n align-items: center;\\n cursor: default;\\n display: flex;\\n line-height: 3;\\n position: relative;\\n z-index: 1; }\\n\\ndrawer-title::after {\\n width: 100%;\\n height: 1px;\\n bottom: -1px;\\n left: 0;\\n content: \\\"\\\";\\n position: absolute;\\n z-index: 1; }\\n\\ndrawer-wrap {\\n width: 100%;\\n top: 5rem;\\n left: 0;\\n background-color: var(--color-white);\\n border-top: 1px solid var(--color-gray-1);\\n padding-top: 2rem;\\n padding-bottom: 2rem;\\n position: absolute; }\\n\\ndrawer-wrap::after {\\n width: 100vw;\\n height: calc(100vh - 5rem);\\n top: 5rem;\\n left: 0;\\n background-color: var(--color-black);\\n content: \\\"\\\";\\n opacity: 0.3;\\n pointer-events: none;\\n position: absolute;\\n z-index: -1; }\\n\\ndrawer-children {\\n display: flex;\\n flex-wrap: wrap;\\n position: relative; }\\n\\ndrawer-child {\\n padding: var(--spacing-s);\\n border: 2px solid;\\n transition: all 0.2s; }\\n\\ndrawer-child:not(:hover) {\\n border-color: transparent; }\\n\\ndrawer-child:hover {\\n border-color: var(--color-gray-1);\\n padding-left: var(--spacing-m); }\\n\\ndrawer-child:hover > a {\\n color: var(--lbry-primary); }\\n\\ndrawer-child:not([full-width]) {\\n width: 50%; }\\n\\ndrawer-child[full-width] {\\n width: 100%; }\\n\\ndrawer-child span {\\n display: flex;\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem; }\\n\\nbody {\\n cursor: default;\\n font-weight: var(--font-weight-base);\\n font-size: var(--font-base);\\n line-height: 1.5;\\n font-weight: 400;\\n font-family: Inter, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"; }\\n\\nhr {\\n height: 1px;\\n background-color: var(--color-gray-2); }\\n\\n:root {\\n --color-link-icon: var(--color-gray-4);\\n --color-link-active: var(--color-primary);\\n --color-navigation-link: var(--color-gray-5);\\n --color-header-button: #f7f7f7;\\n --color-background: #f7f7f7;\\n --color-background--splash: #212529;\\n --color-border: #ededed;\\n --color-background-overlay: #21252980;\\n --color-nag: #f26522;\\n --color-error: #fcafca;\\n --color-comment-menu: #e0e0e0;\\n --color-comment-menu-hovering: #6a6a6a;\\n --color-notice: #fef3ca;\\n --color-follow-bg: #ffd4da;\\n --color-follow-icon: #e2495e;\\n --color-view-bg: var(--color-secondary-alt);\\n --color-view-icon: var(--color-secondary);\\n --color-text-selection-bg: var(--color-secondary-alt);\\n --color-text-selection: var(--color-secondary);\\n --color-text-error: var(--color-danger);\\n --color-text-empty: #999999;\\n --color-text-help: #999999;\\n --color-text-subtitle: #767676;\\n --color-text-warning: #212529;\\n --color-text-help-warning: #989b20;\\n --color-text-warning--background: var(--lbry-yellow-1);\\n --color-blockquote: var(--color-gray-3);\\n --color-spinner-light: #ffffff;\\n --color-spinner-dark: #212529;\\n --color-placeholder-background: #f0f0f0;\\n --color-header-background: #ffffff;\\n --color-card-background: #ffffff;\\n --color-card-background-highlighted: #f6faff;\\n --color-list-header: #fff;\\n --color-file-viewer-background: var(--color-card-background);\\n --color-tabs-background: var(--color-primary-alt);\\n --color-tab-divider: var(--color-primary);\\n --color-modal-background: var(--color-card-background);\\n --color-menu-background: var(--color-header-background);\\n --color-menu-background--selected: var(--color-secondary-alt);\\n --color-menu-background--active: var(--color-secondary-alt);\\n --color-menu-icon: var(--color-navigation-link);\\n --color-menu-icon-active: var(--color-navigation-link);\\n --color-search-suggestion: #212529;\\n --color-search-suggestion-background: #cce6fb;\\n --color-snack-bg: var(--color-primary);\\n --color-snack: var(--color-white);\\n --color-snack-bg-error: var(--color-danger);\\n --color-snack-upgrade: var(--color-tertiary);\\n --color-ads-background: #fae5ff;\\n --color-ads-link: var(--color-link); }\\n\\n/* #2c3237 - 5% */\\n\\n/* #383f45 - 10% */\\n\\n/* #434b53; - 15% */\\n\\n/* #4e5862; - 20% */\\n\\n/* #5a6570; - 25% */\\n\\n[theme='dark'] {\\n --color-primary-alt: #3e675d;\\n --color-primary: #74dfbf;\\n --color-link: var(--color-primary);\\n --color-link-hover: #60e1ba;\\n --color-link-active: #60e1ba;\\n --color-link-icon: #6a7580;\\n --color-navigation-link: #b3bcc6;\\n --color-button-primary-bg: var(--color-primary-alt);\\n --color-button-primary-bg-hover: #44796c;\\n --color-button-primary-text: var(--color-primary);\\n --color-button-primary-hover-text: var(--color-text);\\n --color-button-secondary-bg: #395877;\\n --color-button-secondary-bg-hover: #4b6d8f;\\n --color-button-secondary-text: #a3c1e0;\\n --color-button-alt-bg: #4d5660;\\n --color-button-alt-bg-hover: #3e464d;\\n --color-button-alt-text: #e2e9f0;\\n --color-header-button: var(--color-link-icon);\\n --color-focus: #2d69a5;\\n --color-background-overlay: #212529d7;\\n --color-background: #212529;\\n --color-background-overlay: #21252980;\\n --color-border: #4f5b64;\\n --color-card-background: #2c3237;\\n --color-card-background-highlighted: #384046;\\n --color-header-background: #434b53;\\n --color-tab-text: var(--color-white);\\n --color-tabs-background: #434b53;\\n --color-tab-divider: var(--color-white);\\n --color-modal-background: var(--color-header-background);\\n --color-comment-menu: #6a6a6a;\\n --color-comment-menu-hovering: #e0e0e0;\\n --color-notice: #58563b;\\n --color-error: #61373f;\\n --color-text: #eeeeee;\\n --color-text-error: #f5748c;\\n --color-text-help-warning: #f5ec74;\\n --color-text-empty: #bbbbbb;\\n --color-text-help: #bbbbbb;\\n --color-text-subtitle: #9fafc0;\\n --color-text-warning: #212529;\\n --color-text-warning--background: var(--lbry-yellow-1);\\n --color-blockquote: var(--color-gray-5);\\n --color-input: #f4f4f5;\\n --color-input-label: #d4d4d4;\\n --color-input-placeholder: #f4f4f5;\\n --color-input-bg: #5d6772;\\n --color-input-bg-copyable: #434b53;\\n --color-input-border: var(--color-border);\\n --color-input-border-active: var(--color-secondary);\\n --color-input-toggle: var(--color-primary);\\n --color-input-toggle-bg: var(--color-input-bg);\\n --color-input-toggle-bg-hover: var(--color-secondary);\\n --color-menu-background: var(--color-header-background);\\n --color-menu-background--selected: #89939e;\\n --color-menu-background--active: #89939e;\\n --color-menu-icon: #a7a7a7;\\n --color-menu-icon-active: #d6d6d6;\\n --color-table-highlight: #3a444e;\\n --color-search-suggestion: #212529;\\n --color-search-suggestion-background: #cce6fb;\\n --color-placeholder-background: #4e5862;\\n --color-spinner-light: #5a6570;\\n --color-spinner-dark: #212529;\\n --color-wunderbar: #89939e;\\n --color-tag: var(--color-primary);\\n --color-tag-bg: var(--color-primary-alt);\\n --color-tag-hover: var(--color-white);\\n --color-tag-bg-hover: var(--color-primary-alt-2);\\n --color-snack-bg: var(--color-secondary);\\n --color-ads-background: #dce6e8;\\n --color-ads-text: #111;\\n --color-ads-link: var(--color-primary-alt); }\\n\\n:root {\\n --page-max-width: 1420px;\\n --mac-titlebar-height: 1.5rem;\\n --mobile: 600px;\\n --side-nav-width: 170px;\\n --spacing-miniscule: calc(2rem / 5);\\n --spacing-xsmall: calc(2rem / 4);\\n --spacing-small: calc(2rem / 3);\\n --spacing-medium: calc(2rem / 2);\\n --spacing-large: 2rem;\\n --spacing-xlarge: 3rem;\\n --spacing-main-padding: var(--spacing-xlarge);\\n --floating-viewer-width: 32rem;\\n --floating-viewer-height: 18rem;\\n --floating-viewer-info-height: 5rem;\\n --floating-viewer-container-height: calc(var(--floating-viewer-height) + var(--floating-viewer-info-height));\\n --option-select-width: 8rem;\\n --text-max-width: 660px;\\n --text-link-padding: 4px;\\n --tab-indicator-size: 0.5rem;\\n --header-height: 5rem;\\n --inline-player-max-height: calc(100vh - var(--header-height) - var(--spacing-large) * 2);\\n --card-radius: var(--border-radius);\\n --card-max-width: 1000px;\\n --card-box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\\n --modal-width: 550px;\\n --animation-duration: 0.2s;\\n --animation-style: ease-in-out;\\n --thumbnail-preview-height: 100px;\\n --thumbnail-preview-width: 177px;\\n --cover-photo-height: 180px;\\n --channel-thumbnail-width: 10rem;\\n --channel-thumbnail-width--small: 4rem;\\n --file-list-thumbnail-width: 10rem;\\n --tag-height: 1.5rem; }\\n\\n@media (max-width: 900px) {\\n :root {\\n --font-base: 16px; } }\\n\\n*::selection {\\n background-color: var(--color-text-selection-bg);\\n color: var(--color-text-selection); }\\n\\n*:focus {\\n outline: none; }\\n\\nhtml {\\n font-family: Inter, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";\\n height: 100%;\\n min-height: 100%;\\n overflow-x: hidden;\\n color: var(--color-text);\\n background-color: var(--color-background);\\n font-size: 16px; }\\n\\nbody {\\n font-size: 1em; }\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n font-size: 1rem; }\\n\\np + p {\\n margin-top: var(--spacing-small); }\\n\\nul,\\nol {\\n list-style: initial; }\\n\\nul li,\\n ol li {\\n list-style-position: outside;\\n margin: var(--spacing-xsmall) var(--spacing-medium);\\n margin-bottom: 0; }\\n\\n.ul--no-style, .navigation-links, .navigation-links--small, .pagination, .tags, .tags--remove, .tags--vertical, .tags--selected {\\n list-style: none;\\n margin-bottom: 0; }\\n\\n.ul--no-style li, .navigation-links li, .navigation-links--small li, .pagination li, .tags li, .tags--remove li, .tags--vertical li, .tags--selected li {\\n margin: 0; }\\n\\ndl {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n overflow-x: visible;\\n margin-top: var(--spacing-medium); }\\n\\ndt {\\n flex-basis: 40%;\\n text-align: left;\\n font-weight: bold; }\\n\\ndd {\\n flex-basis: 55%;\\n flex-grow: 1;\\n margin: 0;\\n text-align: right; }\\n\\ndt,\\ndd {\\n padding: var(--spacing-medium) var(--spacing-small);\\n border-top: 1px solid var(--color-border); }\\n\\ndt:last-of-type,\\n dd:last-of-type {\\n border-bottom: 1px solid var(--color-border); }\\n\\nblockquote {\\n margin-bottom: 1rem;\\n padding: 0.8rem;\\n background-color: var(--color-blockquote-bg);\\n border-left: 0.3rem solid var(--color-blockquote); }\\n\\ncode {\\n font-family: \\\"Fira Code\\\", \\\"Courier New\\\", monospace;\\n font-size: 1.5rem; }\\n\\nhr {\\n width: 100%;\\n height: 1px;\\n background-color: var(--color-border); }\\n\\nimg,\\na {\\n -webkit-user-drag: none; }\\n\\nimg {\\n text-indent: -9999px; }\\n\\n.columns {\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n flex-wrap: wrap; }\\n\\n.columns > * {\\n flex-grow: 1;\\n flex-basis: 0;\\n min-width: 15rem;\\n margin-bottom: var(--spacing-large); }\\n\\n.columns > *:first-child {\\n margin-right: 1.5rem; }\\n\\n@media (max-width: 900px) {\\n .columns {\\n flex-direction: column; }\\n .columns > * {\\n margin: 0;\\n margin-bottom: var(--spacing-medium);\\n width: 100%;\\n flex-basis: auto; }\\n .columns > *:first-child {\\n margin-right: 0; } }\\n\\n.hidden {\\n display: none; }\\n\\n.disabled {\\n opacity: 0.3;\\n pointer-events: none; }\\n\\n.column {\\n display: flex; }\\n\\n.column .column__item:not(:first-child) {\\n padding-left: 24px;\\n flex: 1; }\\n\\n.truncated-text {\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-box-orient: vertical;\\n word-break: break-word; }\\n\\n.busy-indicator__loader {\\n min-width: 16px;\\n min-height: 8px;\\n margin: -1rem 0;\\n padding: 0 30px;\\n background: url(\" + ___CSS_LOADER_URL___0___ + \") no-repeat center center;\\n display: inline-block;\\n vertical-align: middle; }\\n\\n.busy-indicator__loader:first-child {\\n padding-left: 2px; }\\n\\n.busy-indicator__loader:last-child {\\n padding-right: 2px; }\\n\\n.help, .help--warning, .help--inline, .help--error, .form-field__help, .header__navigation-button-help {\\n display: block;\\n font-size: var(--font-small);\\n color: var(--color-text-help);\\n margin-top: var(--spacing-miniscule);\\n margin-bottom: var(--spacing-small); }\\n\\n.help--warning {\\n color: var(--color-text-help-warning); }\\n\\n.help--inline {\\n margin-top: 0;\\n margin-bottom: 0; }\\n\\n.empty {\\n color: var(--color-text-empty);\\n font-style: italic; }\\n\\n.empty--centered {\\n text-align: center; }\\n\\n.qr-code {\\n width: 134px;\\n height: 134px;\\n border: 3px solid white; }\\n\\n.qr-code.qr-code--right-padding {\\n margin-right: 1.33333rem; }\\n\\n.qr-code.qr-code--top-padding {\\n margin-top: 1.33333rem; }\\n\\n.error-wrapper {\\n background-color: var(--color-error);\\n padding: var(--spacing-small);\\n border-radius: var(--border-radius); }\\n\\n.error-text {\\n color: var(--color-text-error); }\\n\\n.help--error {\\n color: var(--color-text-error); }\\n\\n.thumbnail-preview {\\n width: var(--thumbnail-preview-width);\\n height: var(--thumbnail-preview-height);\\n background-position: 50% 50%;\\n background-repeat: no-repeat;\\n background-size: cover; }\\n\\n.emoji {\\n font-size: 1.3em; }\\n\\n.download-text {\\n font-size: var(--font-xsmall); }\\n\\n.notice-message {\\n border-radius: var(--border-radius);\\n padding: var(--spacing-large);\\n background-color: var(--color-primary-alt); }\\n\\n.privacy-img {\\n height: 10rem; }\\n\\n.ads-wrapper {\\n background-color: var(--color-ads-background);\\n padding-top: 0.5rem;\\n padding-right: 0.5rem; }\\n\\n.ads-wrapper p {\\n margin-left: 0.4rem;\\n font-size: var(--font-xsmall);\\n color: var(--color-ads-text); }\\n\\n.ads-wrapper .button--link, .ads-wrapper .button--uri-indicator, .ads-wrapper .markdown-preview a, .markdown-preview .ads-wrapper a, .ads-wrapper .tab {\\n color: var(--color-ads-link); }\\n\\n.ads__claim-item {\\n border-bottom: 1px solid var(--color-border);\\n padding: var(--spacing-medium);\\n background-color: var(--color-ads-background);\\n display: flex; }\\n\\n.ads__claim-item > div {\\n width: 40%;\\n position: relative !important; }\\n\\n.ads__claim-item .avp-p-gui {\\n z-index: 1 !important; }\\n\\n@media (max-width: 900px) {\\n .ads__claim-item {\\n flex-direction: column; }\\n .ads__claim-item > div {\\n width: 100%; } }\\n\\n.ads__claim-text {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n padding-left: var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .ads__claim-text {\\n padding-left: 0; } }\\n\\n.ads__claim-text--small {\\n font-size: var(--font-small); }\\n\\n@keyframes expand {\\n 0% {\\n margin-top: 200px;\\n opacity: 0; }\\n 100% {\\n margin-top: 2rem;\\n opacity: 1; } }\\n\\n@keyframes loading-animation {\\n 0% {\\n background-position: -500px 0; }\\n 100% {\\n background-position: 500px 0; } }\\n\\n@keyframes pulse {\\n 0% {\\n opacity: 1; }\\n 50% {\\n opacity: 0.7; }\\n 100% {\\n opacity: 1; } }\\n\\n@keyframes sk-stretchdelay {\\n 0%,\\n 40%,\\n 100% {\\n transform: scaleY(0.4); }\\n 20% {\\n transform: scaleY(1); } }\\n\\n@keyframes bounce {\\n 0% {\\n width: 0; }\\n 10% {\\n width: 0.5rem; }\\n 20% {\\n width: 0; }\\n 30% {\\n width: 0.5rem; }\\n 40% {\\n width: 0; } }\\n\\n@keyframes menu-animate-in {\\n 0% {\\n transform: scaleY(0);\\n opacity: 0; }\\n 100% {\\n transform: scaleY(1);\\n opacity: 1; } }\\n\\n@media (max-width: 900px) {\\n .button--primary,\\n .button--secondary,\\n .button--alt {\\n font-size: var(--font-small); } }\\n\\n.button--uri-indicator {\\n color: var(--color-text-subtitle);\\n max-width: 100%;\\n text-align: left;\\n text-overflow: ellipsis;\\n transition: color 0.2s; }\\n\\n.markdown-preview .button--uri-indicator {\\n height: initial;\\n vertical-align: initial; }\\n\\n.button--close, .content__actions .button {\\n z-index: 1;\\n position: absolute;\\n top: var(--spacing-miniscule);\\n right: var(--spacing-miniscule);\\n padding: 0.3rem;\\n transition: all var(--transition-duration) var(--transition-style);\\n border-radius: var(--card-radius);\\n color: var(--color-text);\\n font-size: var(--font-body); }\\n\\n.button--close svg, .content__actions .button svg {\\n height: 1rem;\\n width: 1rem; }\\n\\n.button--close:hover, .content__actions .button:hover {\\n color: var(--color-button-primary-text);\\n background-color: var(--color-button-primary-bg); }\\n\\n@media (max-width: 900px) {\\n .button--close, .content__actions .button {\\n padding: var(--spacing-medium) var(--spacing-small); } }\\n\\n.button--download-link .button__label {\\n white-space: normal;\\n text-align: left; }\\n\\n.button__content {\\n display: flex;\\n align-items: center;\\n min-width: 0;\\n height: 100%; }\\n\\n.button__label {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis; }\\n\\nsvg + .button__label,\\n.button__label + svg {\\n margin-left: var(--spacing-small); }\\n\\n.button-toggle {\\n padding: 0 var(--spacing-medium);\\n height: var(--height-button);\\n font-size: var(--font-base);\\n border: 1px solid var(--color-border);\\n border-left-width: 0;\\n border-radius: 0;\\n margin: 0;\\n background-color: var(--color-card-background); }\\n\\n@media (max-width: 900px) {\\n .button-toggle {\\n padding: var(--spacing-medium) var(--spacing-small); } }\\n\\n.button-toggle svg {\\n opacity: 0.5; }\\n\\n.button-toggle:first-of-type {\\n border-left-width: 1px;\\n border-top-left-radius: var(--border-radius);\\n border-bottom-left-radius: var(--border-radius); }\\n\\n.button-toggle:last-of-type {\\n border-top-right-radius: var(--border-radius);\\n border-bottom-right-radius: var(--border-radius);\\n margin-right: var(--spacing-small); }\\n\\n.button-toggle--active {\\n color: var(--color-primary);\\n background-color: var(--color-primary-alt); }\\n\\n.button-toggle--active svg {\\n opacity: 1; }\\n\\n.button-toggle--active:hover {\\n cursor: default;\\n text-decoration: none; }\\n\\n.button-toggle--custom {\\n color: var(--color-primary); }\\n\\n.button-toggle--custom svg {\\n opacity: 1; }\\n\\n.card, .card--claim-preview-wrap, .content__viewer, .modal {\\n background-color: var(--color-card-background);\\n position: relative;\\n border-radius: var(--card-radius);\\n overflow: hidden;\\n border: 1px solid var(--color-border); }\\n\\n@media (max-width: 900px) {\\n .card, .card--claim-preview-wrap, .content__viewer, .modal {\\n margin-bottom: var(--spacing-medium); } }\\n\\n.card--disabled {\\n opacity: 0.3;\\n pointer-events: none; }\\n\\n.card--section {\\n position: relative;\\n padding: var(--spacing-large); }\\n\\n.card--reward-total {\\n background-repeat: no-repeat;\\n background-size: cover;\\n color: var(--color-white);\\n font-size: var(--font-large);\\n font-weight: var(--font-weight-bold); }\\n\\n.card--inline {\\n border: 1px solid var(--color-border);\\n border-radius: var(--card-radius);\\n margin-bottom: var(--spacing-medium); }\\n\\n.card--inline:last-of-type {\\n margin-bottom: 0; }\\n\\n.card--claim-preview-wrap {\\n margin: var(--spacing-xlarge) 0;\\n min-width: 35rem; }\\n\\n.card--data {\\n display: flex;\\n align-items: center; }\\n\\n.card__actions, .card__actions--inline {\\n display: flex;\\n align-items: center;\\n margin-top: var(--spacing-large); }\\n\\n.card__actions:only-child, .card__actions--inline:only-child {\\n margin-top: 0; }\\n\\n.card__actions > *:not(:last-child), .card__actions--inline > *:not(:last-child) {\\n margin-right: var(--spacing-medium); }\\n\\n.card__section--flex {\\n padding: var(--spacing-medium) var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .card__section--flex {\\n padding: 0; } }\\n\\n.card__actions--inline {\\n margin-top: 0; }\\n\\n.card__actions--between {\\n display: flex;\\n justify-content: space-between; }\\n\\n.card__actions--center {\\n display: flex;\\n align-items: center;\\n justify-content: center; }\\n\\n.card-stack .card:not(:last-of-type), .card-stack .card--claim-preview-wrap:not(:last-of-type), .card-stack .content__viewer:not(:last-of-type), .card-stack .modal:not(:last-of-type) {\\n margin-bottom: var(--spacing-large); }\\n\\n.card__list {\\n column-count: 2;\\n column-gap: var(--spacing-large);\\n display: block; }\\n\\n.card__list .card, .card__list .card--claim-preview-wrap, .card__list .content__viewer, .card__list .modal {\\n display: inline-block;\\n margin-bottom: var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .card__list {\\n column-count: 1; }\\n .card__list .card, .card__list .card--claim-preview-wrap, .card__list .content__viewer, .card__list .modal {\\n display: block; } }\\n\\n.card__message {\\n border-left: 0.5rem solid;\\n padding: var(--spacing-medium) var(--spacing-medium) var(--spacing-medium) var(--spacing-large);\\n background-color: var(--color-primary-alt);\\n border-color: var(--color-primary); }\\n\\n.card__message--error {\\n background-color: var(--color-error);\\n border-color: var(--color-text-error); }\\n\\n.card__message--failure {\\n background-color: var(--color-error);\\n border-color: var(--color-text-error); }\\n\\n.card__title, .card__title--between {\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n font-size: var(--font-title);\\n font-weight: var(--font-weight-light); }\\n\\n.card__title > *:not(:last-child), .card__title--between > *:not(:last-child) {\\n margin-right: var(--spacing-medium); }\\n\\n.card__title.card__title--deprecated, .card__title--deprecated.card__title--between {\\n margin-bottom: var(--spacing-small); }\\n\\n.card__title--between {\\n justify-content: space-between;\\n width: 100%; }\\n\\n.card__title--between > *:not(:last-child) {\\n margin-right: 0; }\\n\\n.card__media--nsfw {\\n background-color: black; }\\n\\n.card__header, .card__header--between {\\n position: relative;\\n display: flex;\\n align-items: flex-start; }\\n\\n.card__header .icon__wrapper, .card__header--between .icon__wrapper {\\n margin-right: var(--spacing-large); }\\n\\n.card__header--between {\\n justify-content: space-between; }\\n\\n.card__title, .card__title--between {\\n font-size: var(--font-title);\\n font-weight: var(--font-weight-light);\\n display: block;\\n /* .badge rule inherited from file page prices, should be refactored */ }\\n\\n.card__title .badge, .card__title--between .badge, .card__title .badge--tag, .card__title--between .badge--tag, .card__title .tag, .card__title--between .tag, .card__title .badge--tag-mature, .card__title--between .badge--tag-mature, .card__title .tag--mature, .card__title--between .tag--mature, .card__title .badge--cost, .card__title--between .badge--cost, .card__title .badge--free, .card__title--between .badge--free, .card__title .badge--alert, .card__title--between .badge--alert {\\n float: right;\\n margin-left: var(--spacing-small);\\n margin-top: 8px; }\\n\\n.card__subtitle {\\n color: var(--color-text-subtitle);\\n margin: var(--spacing-small) 0;\\n font-size: var(--font-body); }\\n\\n.card__body {\\n padding: var(--spacing-large); }\\n\\n.card__body:not(.card__body--no-title) {\\n padding-top: 0; }\\n\\n.card__body.card__body--table {\\n padding: 0;\\n border-top: 1px solid var(--color-border); }\\n\\n@media (max-width: 900px) {\\n .card__body {\\n padding: var(--spacing-large); } }\\n\\n.card__main-actions {\\n padding: var(--spacing-large);\\n padding-bottom: 0;\\n margin-bottom: var(--spacing-large);\\n border-top: 1px solid var(--color-border); }\\n\\n.card__body--with-icon,\\n.card__main-actions--with-icon {\\n padding-left: 7.5rem; }\\n\\n.card__data-subtitle {\\n display: flex;\\n align-items: center; }\\n\\n.card__data-subtitle :not(:first-child) {\\n margin-left: var(--spacing-small); }\\n\\n.card__expand-btn {\\n padding: var(--spacing-medium); }\\n\\n@media (max-width: 900px) {\\n .card__expand-btn {\\n padding: 0; } }\\n\\n@media (max-width: 900px) {\\n .card__header, .card__header--between,\\n .card__body,\\n .card__main-actions {\\n padding: var(--spacing-small);\\n padding-bottom: 0;\\n margin: 0;\\n margin-bottom: var(--spacing-small); } }\\n\\n.channel-cover {\\n position: relative;\\n background-image: linear-gradient(to right, #637ad2, #318794 80%);\\n display: flex;\\n align-items: flex-end;\\n box-sizing: content-box;\\n color: #fff; }\\n\\n.channel-cover__custom {\\n z-index: 0;\\n align-self: flex-start;\\n position: absolute;\\n object-fit: cover;\\n filter: brightness(30%); }\\n\\n.channel-cover,\\n.channel-cover__custom {\\n min-height: var(--cover-photo-height);\\n width: 100%;\\n border-top-left-radius: var(--card-radius);\\n border-top-right-radius: var(--card-radius); }\\n\\n@media (max-width: 900px) {\\n .channel-cover,\\n .channel-cover__custom {\\n min-height: calc(var(--cover-photo-height) + 2 * var(--spacing-xlarge) + var(--spacing-medium)); } }\\n\\n.channel-thumbnail {\\n display: flex;\\n height: 5rem;\\n width: 5rem;\\n background-size: cover;\\n margin-right: var(--spacing-medium); }\\n\\n.channel-thumbnail--small {\\n height: 3rem;\\n width: 3rem; }\\n\\n.channel__thumbnail--channel-page {\\n position: absolute;\\n height: var(--channel-thumbnail-width);\\n width: var(--channel-thumbnail-width);\\n left: var(--spacing-medium);\\n top: 4rem; }\\n\\n@media (max-width: 900px) {\\n .channel__thumbnail--channel-page {\\n display: none; } }\\n\\n.channel-thumbnail__custom {\\n width: 100%;\\n object-fit: cover; }\\n\\n.channel-thumbnail__default {\\n width: 80%;\\n height: 80%;\\n margin-left: auto;\\n margin-right: auto;\\n align-self: flex-end; }\\n\\n.channel-thumbnail,\\n.channel-thumbnail__custom {\\n border-radius: var(--card-radius); }\\n\\n.channel-thumbnail__default--0 {\\n background-color: #748ffc; }\\n\\n.channel-thumbnail__default--1 {\\n background-color: #ffa855; }\\n\\n.channel-thumbnail__default--2 {\\n background-color: #339af0; }\\n\\n.channel-thumbnail__default--3 {\\n background-color: #ec8383; }\\n\\n.channel-thumbnail__default--4 {\\n background-color: #ccc; }\\n\\n.channel__primary-info {\\n z-index: 1;\\n padding-left: calc(var(--channel-thumbnail-width) + var(--spacing-large));\\n padding-right: var(--spacing-medium);\\n padding-bottom: var(--spacing-medium);\\n min-width: 0;\\n width: 100%; }\\n\\n@media (max-width: 900px) {\\n .channel__primary-info {\\n padding-left: var(--spacing-medium); } }\\n\\n.channel__title {\\n display: inline;\\n margin-right: var(--spacing-small);\\n overflow: hidden;\\n text-overflow: ellipsis;\\n font-size: xx-large;\\n font-weight: var(--font-weight-bold); }\\n\\n.channel__title .button {\\n margin-left: var(--spacing-medium); }\\n\\n@media (max-width: 900px) {\\n .channel__title {\\n padding-top: var(--spacing-xlarge); } }\\n\\n.channel__meta {\\n display: flex;\\n justify-content: space-between; }\\n\\n.channel__image--blurred {\\n filter: blur(16px); }\\n\\n.channel__quick-actions {\\n margin-left: var(--spacing-medium);\\n position: absolute;\\n top: 0;\\n right: var(--spacing-medium);\\n margin-top: var(--spacing-medium);\\n z-index: 1;\\n flex-wrap: wrap;\\n font-size: var(--font-base); }\\n\\n.channel__quick-actions > * {\\n padding: 0 var(--spacing-xsmall); }\\n\\n@media (max-width: 900px) {\\n .channel__quick-actions > * {\\n margin-bottom: var(--spacing-xsmall); } }\\n\\n.channel-name--inline {\\n margin-left: var(--spacing-xsmall); }\\n\\n.channel__list-item {\\n display: flex;\\n align-items: center;\\n background-color: var(--color-card-background);\\n padding: var(--spacing-small);\\n border-bottom: 1px solid var(--color-border); }\\n\\n.channel__list-item .channel-thumbnail {\\n height: 2rem;\\n width: 2rem; }\\n\\n.channel__list-item .icon {\\n margin-left: var(--spacing-large);\\n margin-right: var(--spacing-small); }\\n\\n.channel__list-item:hover {\\n background-color: var(--color-card-background-highlighted); }\\n\\n.channel__list-item--selected {\\n border-radius: var(--border-radius);\\n border: 1px solid var(--color-border); }\\n\\n.claim-list .claim-preview__wrapper {\\n border-bottom: 1px solid var(--color-border); }\\n\\n.claim-list__header {\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n margin: var(--spacing-medium) 0;\\n margin-top: 0;\\n font-size: var(--font-body); }\\n\\n.claim-list__header .spinner {\\n margin-left: var(--spacing-medium); }\\n\\n.claim-list__dropdown {\\n padding: 0 var(--spacing-medium); }\\n\\n@media (max-width: 900px) {\\n .claim-list__dropdown {\\n margin-left: 0; } }\\n\\n.claim-list__header-label {\\n position: absolute;\\n transform: translateY(-130%);\\n font-size: var(--font-xsmall);\\n color: var(--color-text-subtitle); }\\n\\n.claim-list__header-label .icon {\\n margin-right: var(--spacing-xsmall); }\\n\\n@media (max-width: 900px) {\\n .claim-list__header-label {\\n position: static;\\n transform: none; } }\\n\\n.claim-list__conjuction {\\n color: var(--color-text-subtitle);\\n font-size: var(--font-small); }\\n\\n.claim-list__alt-controls {\\n align-self: flex-start;\\n display: flex;\\n align-items: center;\\n margin-left: auto;\\n padding-top: var(--spacing-medium); }\\n\\n.claim-list__alt-controls > * {\\n margin-left: var(--spacing-small); }\\n\\n@media (max-width: 900px) {\\n .claim-list__alt-controls {\\n display: none; } }\\n\\n.claim-preview__wrapper {\\n padding: var(--spacing-medium);\\n list-style: none; }\\n\\n.claim-preview__wrapper--notice {\\n background-color: var(--color-notice); }\\n\\n.claim-preview__wrapper--inline {\\n padding: 0; }\\n\\n.claim-preview__wrapper--small {\\n padding: var(--spacing-small); }\\n\\n.claim-preview {\\n flex: 1;\\n display: flex;\\n position: relative;\\n overflow: visible; }\\n\\n.claim-preview:not(.claim-preview--inline):not(.claim-preview--pending):not(.claim-preview--inactive) {\\n cursor: pointer; }\\n\\n.claim-preview .media__thumb {\\n width: var(--file-list-thumbnail-width);\\n flex-shrink: 0;\\n margin-right: var(--spacing-medium); }\\n\\n.claim-preview:hover .claim-preview__hover-actions {\\n display: block; }\\n\\n@media (max-width: 900px) {\\n .claim-preview {\\n font-size: 14px; }\\n .claim-preview .media__thumb {\\n width: 5rem;\\n height: 3rem; }\\n .claim-preview .channel-thumbnail {\\n width: 5rem;\\n height: 5rem; } }\\n\\n.claim-preview--large {\\n border: none; }\\n\\n.claim-preview--large:hover {\\n background-color: transparent; }\\n\\n.claim-preview--large .media__thumb {\\n width: 14rem; }\\n\\n@media (max-width: 900px) {\\n .claim-preview--large .media__thumb {\\n width: 5rem; } }\\n\\n.claim-preview--large .channel-thumbnail {\\n width: 7.5rem;\\n height: 7.5rem; }\\n\\n.claim-preview--small .media__thumb {\\n width: 8rem; }\\n\\n.claim-preview--small .channel-thumbnail {\\n width: 4rem;\\n height: 4rem; }\\n\\n.claim-preview--pending {\\n opacity: 0.6; }\\n\\n.claim-preview--padded {\\n padding: var(--spacing-small); }\\n\\n.claim-preview--inline .channel-thumbnail {\\n width: var(--channel-thumbnail-width--small);\\n height: var(--channel-thumbnail-width--small); }\\n\\n.claim-preview--inline .claim-preview__actions, .claim-preview--inline .claim-preview__actions--header {\\n align-self: flex-end;\\n margin-top: 0;\\n margin-bottom: auto;\\n justify-content: flex-end;\\n width: auto; }\\n\\n.claim-preview--inline .claim-preview__text {\\n width: 100%;\\n flex-direction: row;\\n justify-content: space-between; }\\n\\n@media (max-width: 600px) {\\n .claim-preview--inline .claim-preview__text {\\n flex-direction: column; }\\n .claim-preview--inline .claim-preview__actions, .claim-preview--inline .claim-preview__actions--header {\\n align-self: flex-start; } }\\n\\n.claim-preview__text {\\n width: 100%;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between; }\\n\\n.claim-preview__title {\\n font-weight: var(--font-weight-bold);\\n font-size: var(--font-body);\\n margin-right: auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 100%;\\n color: var(--color-text); }\\n\\n.claim-preview-metadata {\\n display: flex;\\n flex-direction: column;\\n flex: 1; }\\n\\n@media (max-width: 900px) {\\n .claim-preview-metadata {\\n margin-bottom: var(--spacing-small); } }\\n\\n.claim-preview-info {\\n align-items: flex-start; }\\n\\n.claim-preview-info,\\n.claim-preview-properties {\\n display: flex;\\n justify-content: space-between; }\\n\\n.claim-preview__actions, .claim-preview__actions--header {\\n align-self: flex-end;\\n display: flex;\\n justify-content: space-between;\\n margin-top: auto;\\n width: 100%; }\\n\\n.claim-preview__button {\\n margin-left: 2rem; }\\n\\n.claim-preview-properties {\\n align-items: flex-end;\\n flex: 1;\\n font-size: var(--font-small);\\n color: var(--color-text-subtitle); }\\n\\n.claim-upload {\\n flex: 1;\\n display: flex;\\n position: relative;\\n overflow: visible;\\n padding: var(--spacing-medium); }\\n\\n.claim-upload .media__thumb {\\n width: var(--file-list-thumbnail-width);\\n flex-shrink: 0;\\n margin-right: var(--spacing-medium); }\\n\\n.claim-upload__progress--outer {\\n width: 100%; }\\n\\n.claim-upload__progress--inner {\\n background: var(--color-primary-alt);\\n padding: var(--spacing-miniscule); }\\n\\n.claim-grid {\\n display: flex;\\n flex-wrap: wrap;\\n list-style: none;\\n align-items: flex-start; }\\n\\n.claim-grid__wrapper:not(:first-of-type) {\\n margin-top: var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .claim-grid__wrapper:not(:first-of-type) {\\n margin-top: var(--spacing-medium); } }\\n\\n.claim-grid__title {\\n margin-bottom: var(--spacing-medium); }\\n\\n.claim-grid__title:not(:first-of-type) {\\n margin-top: var(--spacing-xlarge); }\\n\\n.claim-grid__help {\\n margin-bottom: 12px; }\\n\\n.claim-grid__help svg {\\n stroke: var(--color-text-subtitle); }\\n\\n.claim-preview--tile {\\n width: calc((100% - var(--spacing-medium) * 3) / 4);\\n margin-bottom: var(--spacing-large);\\n margin-right: 0;\\n margin-top: 0;\\n margin-left: var(--spacing-medium);\\n justify-content: flex-start; }\\n\\n@media (min-width: 1150px) {\\n .claim-preview--tile:first-child, .claim-preview--tile:nth-child(4n + 1) {\\n margin-left: 0; } }\\n\\n.claim-preview--tile:hover {\\n cursor: pointer; }\\n\\n.claim-preview--tile .media__thumb {\\n border-bottom-right-radius: 0;\\n border-bottom-left-radius: 0; }\\n\\n@media (max-width: 1150px) and (min-width: 900px) {\\n .claim-preview--tile {\\n width: calc((100% - var(--spacing-medium) * 2) / 3); }\\n .claim-preview--tile:first-child, .claim-preview--tile:nth-child(3n + 1) {\\n margin-left: 0; }\\n .claim-preview--tile .channel-thumbnail {\\n display: none; } }\\n\\n@media (max-width: 900px) {\\n .claim-preview--tile {\\n width: calc((100% - var(--spacing-medium) * 1) / 2);\\n margin-bottom: var(--spacing-large); }\\n .claim-preview--tile:first-child, .claim-preview--tile:nth-child(2n + 1) {\\n margin-left: 0; }\\n .claim-preview--tile .channel-thumbnail {\\n display: none; } }\\n\\n.claim-tile__title {\\n margin-bottom: 0;\\n margin: var(--spacing-small);\\n font-weight: 600;\\n font-size: var(--font-small);\\n color: var(--color-text);\\n min-height: 2.5rem; }\\n\\n@media (max-width: 900px) {\\n .claim-tile__title {\\n font-size: var(--font-xsmall); } }\\n\\n.claim-tile__info {\\n display: flex;\\n margin-top: var(--spacing-small);\\n padding: var(--spacing-small);\\n border-top: 1px solid var(--color-border);\\n color: var(--color-subtitle); }\\n\\n.claim-tile__info .channel-thumbnail {\\n width: 2.1rem;\\n height: 2.1rem;\\n margin-right: var(--spacing-small); }\\n\\n.claim-tile__about, .claim-tile__about--channel {\\n display: flex;\\n flex-direction: column;\\n font-size: var(--font-xsmall);\\n color: var(--color-text-subtitle); }\\n\\n.claim-tile__publishes {\\n font-size: var(--font-xsmall); }\\n\\n.claim-tile__about--channel {\\n flex: 1;\\n flex-direction: row;\\n justify-content: space-between;\\n align-items: center;\\n height: 2.1rem;\\n font-size: var(--font-body); }\\n\\n.claim-tile__file-properties {\\n position: absolute;\\n bottom: var(--spacing-miniscule);\\n right: var(--spacing-miniscule);\\n background-color: var(--color-black);\\n padding: 0.2rem;\\n border-radius: var(--border-radius); }\\n\\n.claim-tile__file-properties .file-properties {\\n color: var(--color-white); }\\n\\n@media (max-width: 900px) {\\n .claim-tile__file-properties {\\n display: none; } }\\n\\n.claim-preview--tile:hover .claim-preview__hover-actions {\\n display: block; }\\n\\n.claim-preview__repost-author {\\n transform: translateY(calc(var(--spacing-xsmall) * -1));\\n font-size: var(--font-xsmall);\\n color: var(--color-text-subtitle); }\\n\\n.claim-preview__repost-author .icon {\\n margin-right: var(--spacing-miniscule);\\n margin-bottom: -1px; }\\n\\n.claim-tile__repost-author {\\n margin: var(--spacing-small);\\n margin-bottom: 0; }\\n\\n.claim-preview__hover-actions {\\n display: none;\\n position: absolute;\\n top: var(--spacing-miniscule);\\n right: var(--spacing-miniscule); }\\n\\n.claim-preview__hover-actions > * {\\n color: var(--color-black);\\n background-color: var(--color-white);\\n padding: var(--spacing-xsmall);\\n border-radius: var(--border-radius); }\\n\\n.comments {\\n padding-top: var(--spacing-large); }\\n\\n.comment {\\n display: flex;\\n flex-direction: row;\\n font-size: var(--font-body);\\n margin: 0; }\\n\\n.comment:not(:last-of-type) {\\n border-bottom: 1px solid var(--color-border);\\n padding: var(--spacing-medium) 0; }\\n\\n.comment:last-of-type {\\n padding-top: var(--spacing-medium); }\\n\\n.comment__create--reply {\\n margin-top: var(--spacing-small); }\\n\\n.comment__reply {\\n border-left: 5px solid var(--color-primary-alt);\\n padding-left: var(--spacing-medium);\\n margin-left: var(--spacing-medium); }\\n\\n.comment__reply-button {\\n margin-top: var(--spacing-small); }\\n\\n.comment__body_container {\\n padding-right: var(--spacing-small);\\n flex: 1; }\\n\\n.comment__meta {\\n display: flex;\\n justify-content: space-between;\\n text-overflow: ellipsis;\\n margin-bottom: var(--spacing-small); }\\n\\n.comment__meta-information {\\n justify-content: flex-start;\\n display: flex; }\\n\\n.comment__message {\\n white-space: pre-line;\\n margin-top: var(--spacing-small); }\\n\\n.comment__author {\\n text-overflow: ellipsis;\\n padding-right: var(--spacing-xsmall); }\\n\\n.comment__time {\\n opacity: 0.3;\\n white-space: nowrap; }\\n\\n.comment__menu {\\n align-self: flex-end; }\\n\\n.comment__char-count {\\n align-self: flex-end;\\n font-size: var(--font-small); }\\n\\n.comment__menu-option {\\n display: flex;\\n align-items: center;\\n padding: var(--spacing-small);\\n font-size: var(--font-small); }\\n\\n.comment__menu-icon--hovering {\\n stroke: var(--color-comment-menu-hovering); }\\n\\n.comment__menu-icon {\\n stroke: var(--color-comment-menu); }\\n\\n.content__viewer {\\n position: absolute;\\n top: var(--spacing-large); }\\n\\n.content__viewer--inline {\\n max-height: var(--inline-player-max-height); }\\n\\n@media (max-width: 900px) {\\n .content__viewer--inline {\\n margin-top: 10px; } }\\n\\n.content__viewer--floating {\\n position: fixed;\\n margin-bottom: 0;\\n height: calc(var(--floating-viewer-height) + var(--floating-viewer-info-height));\\n overflow: hidden;\\n left: calc(var(--spacing-large) + var(--spacing-small));\\n z-index: 9999; }\\n\\n.content__viewer--floating:hover .content__actions,\\n .content__viewer--floating:hover .content__floating-header {\\n visibility: visible; }\\n\\n.content__wrapper {\\n position: relative;\\n width: 100%;\\n height: 100%; }\\n\\n.content__wrapper--floating {\\n height: var(--floating-viewer-height);\\n width: var(--floating-viewer-width); }\\n\\n.content__actions {\\n visibility: hidden;\\n display: flex; }\\n\\n.content__actions .button {\\n height: 1.5rem;\\n top: 0;\\n position: relative;\\n margin-left: var(--spacing-small); }\\n\\n.content__actions .button svg {\\n color: var(--color-white); }\\n\\n.content__floating-header {\\n visibility: hidden;\\n position: absolute;\\n top: 0;\\n width: 100%;\\n height: 2rem;\\n display: flex;\\n justify-content: space-between;\\n line-height: 1.5rem;\\n padding: 0.25rem;\\n background-color: var(--color-background); }\\n\\n.content__actions,\\n.content__floating-header {\\n z-index: 1; }\\n\\n.content__info {\\n cursor: grab;\\n height: var(--floating-viewer-info-height);\\n padding: var(--spacing-medium);\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n white-space: nowrap; }\\n\\n.content__cover {\\n position: relative;\\n display: flex;\\n align-items: center;\\n border-radius: var(--card-radius);\\n border: 1px solid var(--color-border);\\n justify-content: center;\\n background-position: 50% 50%;\\n background-repeat: no-repeat;\\n background-size: 100%;\\n max-height: var(--inline-player-max-height);\\n margin: auto; }\\n\\n.content__cover::before, .content__cover::after {\\n content: \\\"\\\"; }\\n\\n.content__cover::before {\\n float: left;\\n padding-top: var(--aspect-ratio-standard); }\\n\\n.content__cover::after {\\n clear: both;\\n display: block; }\\n\\n.content__cover:not(.card__media--nsfw) {\\n background-color: #000; }\\n\\n.content__cover:hover {\\n cursor: pointer; }\\n\\n.content__cover:-webkit-full-screen {\\n width: 100%;\\n height: 100%; }\\n\\n.content__cover--none {\\n cursor: default;\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background-position: 50% 50%;\\n background-repeat: no-repeat;\\n background-size: 100%;\\n margin: auto; }\\n\\n.content__cover--none::before, .content__cover--none::after {\\n content: \\\"\\\"; }\\n\\n.content__cover--none::before {\\n float: left;\\n padding-top: var(--aspect-ratio-standard); }\\n\\n.content__cover--none::after {\\n clear: both;\\n display: block; }\\n\\n.content__cover--none:-webkit-full-screen {\\n width: 100%;\\n height: 100%; }\\n\\n.content__cover--disabled {\\n pointer-events: none; }\\n\\n.content__cover--disabled .nag {\\n /* boo fire Jeremy */\\n pointer-events: auto; }\\n\\n.content__cover--disabled:after {\\n content: '';\\n background: rgba(255, 255, 255, 0.5);\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n position: absolute; }\\n\\n.content__loading {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n padding: 0 var(--spacing-large);\\n background-color: #000; }\\n\\n.content__loading-text {\\n color: var(--color-white); }\\n\\n.gui-container {\\n top: 0;\\n right: 0;\\n position: absolute;\\n z-index: 2; }\\n\\n.gui-container .dg.main {\\n margin: 0;\\n padding: 0;\\n overflow: inherit; }\\n\\n.gui-container.light .dg.main.taller-than-window .close-button {\\n border-top: 1px solid #ddd; }\\n\\n.gui-container.light .dg.main .close-button:not(:hover) {\\n background-color: #e8e8e8; }\\n\\n.gui-container.light .dg.main .close-button:hover {\\n background-color: #ddd; }\\n\\n.gui-container.light .dg {\\n color: #555;\\n text-shadow: none !important; }\\n\\n.gui-container.light .dg.main::-webkit-scrollbar {\\n background-color: #fafafa; }\\n\\n.gui-container.light .dg.main::-webkit-scrollbar-thumb {\\n background-color: #bbb; }\\n\\n.gui-container.light .dg li:not(.folder) {\\n background-color: #fafafa;\\n border-bottom: 1px solid #ddd; }\\n\\n.gui-container.light .dg li.save-row .button {\\n text-shadow: none !important; }\\n\\n.gui-container.light .dg li.title {\\n background: #e8e8e8 url(\\\"data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==\\\") 6px 10px no-repeat; }\\n\\n.gui-container.light .dg .cr.function:hover, .gui-container.light .dg .cr.boolean:hover {\\n background-color: white; }\\n\\n.gui-container.light .dg .c input[type='text']:not(:focus), .gui-container.light .dg .c input[type='text']:not(:hover) {\\n background-color: #e9e9e9; }\\n\\n.gui-container.light .dg .c input[type='text']:focus, .gui-container.light .dg .c input[type='text']:hover {\\n background-color: #eee; }\\n\\n.gui-container.light .dg .c input[type='text']:focus {\\n color: #555; }\\n\\n.gui-container.light .dg .c .slider:not(:hover) {\\n background-color: #e9e9e9; }\\n\\n.gui-container.light .dg .c .slider:hover {\\n background-color: #eee; }\\n\\n.embed__wrapper {\\n height: 100vh;\\n width: 100vw;\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: center;\\n background-color: var(--color-black); }\\n\\n.expandable--closed,\\n.expandable--open {\\n margin-bottom: var(--spacing-small); }\\n\\n.expandable--closed {\\n max-height: 10rem;\\n overflow: hidden;\\n position: relative; }\\n\\n.expandable--open {\\n max-height: 100%; }\\n\\n.expanding-details__header {\\n background-color: var(--color-card-background);\\n position: relative;\\n overflow: hidden;\\n padding-left: var(--spacing-small); }\\n\\n.expanding-details {\\n border: 1px solid var(--color-border); }\\n\\n.expanding-details__body {\\n border-radius: var(--card-radius);\\n padding: 0 var(--spacing-small); }\\n\\n.file-properties {\\n display: flex;\\n position: relative;\\n align-items: center;\\n font-size: var(--font-small);\\n color: var(--color-text-help);\\n margin-left: var(--spacing-small);\\n white-space: nowrap; }\\n\\n.file-properties > *:not(:last-child) {\\n margin-right: var(--spacing-small); }\\n\\n@media (max-width: 600px) {\\n .file-properties {\\n display: none; } }\\n\\n.file-properties--small {\\n font-size: var(--font-xsmall);\\n line-height: 1.2;\\n margin-left: 0; }\\n\\n.file-properties--small > *:not(:last-child) {\\n margin-right: var(--spacing-miniscule); }\\n\\n.file-properties--large {\\n flex-wrap: wrap;\\n margin-bottom: var(--spacing-large);\\n margin-left: 0; }\\n\\n.file-properties--large > * {\\n margin-top: var(--spacing-small); }\\n\\n.file-page .grid-area--content + .card, .file-page .grid-area--content + .card--claim-preview-wrap, .file-page .grid-area--content + .content__viewer, .file-page .grid-area--content + .modal,\\n.file-page .file-render + .card,\\n.file-page .file-render + .card--claim-preview-wrap,\\n.file-page .file-render + .content__viewer,\\n.file-page .file-render + .modal,\\n.file-page .content__cover + .card,\\n.file-page .content__cover + .card--claim-preview-wrap,\\n.file-page .content__cover + .content__viewer,\\n.file-page .content__cover + .modal,\\n.file-page .card + .file-render,\\n.file-page .card--claim-preview-wrap + .file-render,\\n.file-page .content__viewer + .file-render,\\n.file-page .modal + .file-render,\\n.file-page .card + .grid-area--content,\\n.file-page .card--claim-preview-wrap + .grid-area--content,\\n.file-page .content__viewer + .grid-area--content,\\n.file-page .modal + .grid-area--content,\\n.file-page .card + .content__cover,\\n.file-page .card--claim-preview-wrap + .content__cover,\\n.file-page .content__viewer + .content__cover,\\n.file-page .modal + .content__cover {\\n margin-top: var(--spacing-large); }\\n\\n.file-page .card + .file-render,\\n.file-page .card--claim-preview-wrap + .file-render,\\n.file-page .content__viewer + .file-render,\\n.file-page .modal + .file-render {\\n margin-top: var(--spacing-large); }\\n\\n.file-page .file-page__md .card, .file-page .file-page__md .card--claim-preview-wrap, .file-page .file-page__md .content__viewer, .file-page .file-page__md .modal {\\n border-bottom-left-radius: 0;\\n border-bottom-right-radius: 0; }\\n\\n.file-page .file-page__md .card + .file-render, .file-page .file-page__md .card--claim-preview-wrap + .file-render, .file-page .file-page__md .content__viewer + .file-render, .file-page .file-page__md .modal + .file-render {\\n margin-top: 0; }\\n\\n.file-page .file-page__md .card + .file-render .card, .file-page .file-page__md .card--claim-preview-wrap + .file-render .card, .file-page .file-page__md .content__viewer + .file-render .card, .file-page .file-page__md .modal + .file-render .card, .file-page .file-page__md .card + .file-render .card--claim-preview-wrap, .file-page .file-page__md .card--claim-preview-wrap + .file-render .card--claim-preview-wrap, .file-page .file-page__md .content__viewer + .file-render .card--claim-preview-wrap, .file-page .file-page__md .modal + .file-render .card--claim-preview-wrap, .file-page .file-page__md .card + .file-render .content__viewer, .file-page .file-page__md .card--claim-preview-wrap + .file-render .content__viewer, .file-page .file-page__md .content__viewer + .file-render .content__viewer, .file-page .file-page__md .modal + .file-render .content__viewer, .file-page .file-page__md .card + .file-render .modal, .file-page .file-page__md .card--claim-preview-wrap + .file-render .modal, .file-page .file-page__md .content__viewer + .file-render .modal, .file-page .file-page__md .modal + .file-render .modal {\\n border-top-left-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-left-radius: var(--border-radius);\\n border-bottom-right-radius: var(--border-radius);\\n border-top: none; }\\n\\n.file-render {\\n width: 100%;\\n height: 100%;\\n z-index: 1;\\n overflow: hidden;\\n max-height: var(--inline-player-max-height); }\\n\\n.file-render--document {\\n max-height: none;\\n overflow: auto; }\\n\\n.file-render--document .content__loading {\\n background-color: transparent;\\n padding: 0;\\n margin: var(--spacing-xlarge) 0; }\\n\\n.file-render--document .content__loading .content__loading-text {\\n color: var(--color-text); }\\n\\n.file-render--document .markdown-preview {\\n height: 100%;\\n overflow: auto;\\n width: 40em;\\n margin-left: auto;\\n margin-right: auto;\\n max-width: unset;\\n min-width: unset; }\\n\\n@media (max-width: 900px) {\\n .file-render--document .markdown-preview {\\n width: 100%;\\n padding: var(--spacing-small); } }\\n\\n.file-render__header {\\n display: flex;\\n justify-content: space-between;\\n flex-wrap: wrap; }\\n\\n.file-render__viewer {\\n width: 100%;\\n height: 100%; }\\n\\n.file-render__viewer iframe,\\n .file-render__viewer webview,\\n .file-render__viewer img {\\n width: 100%;\\n height: 100%;\\n object-fit: contain; }\\n\\n.file-render__viewer video {\\n cursor: pointer; }\\n\\n.file-render__viewer .video-js.vjs-fullscreen.vjs-user-inactive.vjs-playing video {\\n cursor: none; }\\n\\n.file-render__viewer--iframe {\\n display: flex;\\n /*this eliminates extra height from whitespace, if someone edits this with a better technique, tell Jeremy*/\\n /*\\n ideally iframes would dynamiclly grow, see <IframeReact> for a start at this\\n for now, since we don't know size, let's make as large as we can without being larger than available area\\n */ }\\n\\n.file-render__viewer--iframe iframe {\\n height: calc(100vh - var(--header-height) - var(--spacing-medium) * 2); }\\n\\n.file-render__content, .CodeMirror {\\n width: 100%;\\n height: 100%;\\n overflow: auto;\\n max-width: 100vw; }\\n\\n.CodeMirror .cm-invalidchar {\\n display: none; }\\n\\n.CodeMirror .CodeMirror .CodeMirror-lines {\\n padding: var(--spacing-small) 0; }\\n\\n.CodeMirror .CodeMirror-code {\\n font-family: \\\"Fira Code\\\", \\\"Courier New\\\", monospace;\\n letter-spacing: 0.1rem; }\\n\\n.CodeMirror .CodeMirror-gutters {\\n background-color: var(--color-gray-1);\\n border-right: 1px solid var(--color-gray-4);\\n padding-right: var(--spacing-medium); }\\n\\n.CodeMirror .CodeMirror-line {\\n padding-left: var(--spacing-medium); }\\n\\n.CodeMirror .CodeMirror-linenumber {\\n color: var(--color-gray-5); }\\n\\n.video-js {\\n height: 100%;\\n width: 100%; }\\n\\n.video-js .vjs-big-play-button {\\n display: none; }\\n\\n.video-js .vjs-modal-dialog .vjs-modal-dialog-content {\\n position: relative;\\n padding-top: 5rem;\\n pointer-events: none; }\\n\\n@media (max-width: 900px) {\\n .vjs-paused .vjs-big-play-button,\\n .vjs-paused.vjs-has-started .vjs-big-play-button {\\n display: block; } }\\n\\n.file-render {\\n border-radius: var(--card-radius); }\\n\\n.file-render .video-js {\\n display: flex;\\n align-items: center;\\n justify-content: center; }\\n\\n.file-render .video-js .vjs-big-play-button {\\n border: none;\\n position: static;\\n z-index: 2; }\\n\\n.file-render .video-js .vjs-big-play-button .vjs-icon-placeholder {\\n display: none; }\\n\\n.file-render__embed {\\n height: 100%;\\n width: 100%;\\n position: fixed; }\\n\\n.file-render__embed .video-js {\\n display: flex;\\n align-items: center;\\n justify-content: center; }\\n\\n.file-render__embed .video-js .vjs-big-play-button {\\n background-color: rgba(0, 0, 0, 0.6);\\n border: none;\\n position: static;\\n z-index: 2; }\\n\\n.file-render__embed .video-js .vjs-big-play-button .vjs-icon-placeholder {\\n display: none; }\\n\\n.file-render__embed .video-js.vjs-paused .vjs-big-play-button {\\n display: block; }\\n\\n.file-render__embed .video-js:hover .vjs-big-play-button {\\n background-color: var(--color-primary); }\\n\\n.video-overlay__wrapper {\\n position: absolute;\\n left: auto;\\n right: auto;\\n height: 100%;\\n width: 100%;\\n background-color: rgba(0, 0, 0, 0.9);\\n z-index: 999;\\n color: var(--color-white);\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n padding: var(--spacing-large); }\\n\\n.video-overlay__wrapper .button--uri-indicator {\\n color: var(--color-gray-3); }\\n\\n@media (max-width: 900px) {\\n .video-overlay__wrapper {\\n align-items: flex-start;\\n padding: var(--spacing-small); }\\n .video-overlay__wrapper .button,\\n .video-overlay__wrapper .video-overlay__subtitle,\\n .video-overlay__wrapper .video-overlay__actions {\\n font-size: var(--font-small); } }\\n\\n.video-overlay__title {\\n font-size: var(--font-title);\\n font-weight: var(--font-weight-light);\\n margin-top: var(--spacing-medium);\\n margin-bottom: var(--spacing-small); }\\n\\n@media (max-width: 900px) {\\n .video-overlay__title {\\n margin: 0;\\n font-size: var(--font-medium); } }\\n\\n.video-overlay__subtitle {\\n color: var(--color-gray-3);\\n margin: var(--spacing-medium) 0;\\n line-height: 1; }\\n\\n@media (max-width: 900px) {\\n .video-overlay__subtitle {\\n margin: 0; } }\\n\\n.video-overlay__actions {\\n margin-top: var(--spacing-large); }\\n\\n.video-overlay__actions .button--link, .video-overlay__actions .button--uri-indicator, .video-overlay__actions .markdown-preview a, .markdown-preview .video-overlay__actions a, .video-overlay__actions .tab {\\n color: var(--color-white); }\\n\\n@media (max-width: 900px) {\\n .video-overlay__actions {\\n margin-top: var(--spacing-small); } }\\n\\ninput-submit, .input-submit {\\n align-items: center; }\\n\\ninput[type='number'] {\\n width: 8em; }\\n\\nfieldset-group + fieldset-group, .fieldset-group + fieldset-group, fieldset-group + .fieldset-group, .fieldset-group + .fieldset-group {\\n margin-top: var(--spacing-small); }\\n\\nfieldset-group.fieldset-group--smushed, .fieldset-group--smushed.fieldset-group {\\n justify-content: flex-start; }\\n\\nfieldset-group.fieldset-group--smushed fieldset-section, .fieldset-group--smushed.fieldset-group fieldset-section, fieldset-group.fieldset-group--smushed .fieldset-section, .fieldset-group--smushed.fieldset-group .fieldset-section {\\n width: auto;\\n margin: 0; }\\n\\nfieldset-group.fieldset-group--smushed fieldset-section:first-child input, .fieldset-group--smushed.fieldset-group fieldset-section:first-child input, fieldset-group.fieldset-group--smushed .fieldset-section:first-child input, .fieldset-group--smushed.fieldset-group .fieldset-section:first-child input,\\n fieldset-group.fieldset-group--smushed fieldset-section:first-child select,\\n .fieldset-group--smushed.fieldset-group fieldset-section:first-child select,\\n fieldset-group.fieldset-group--smushed .fieldset-section:first-child select,\\n .fieldset-group--smushed.fieldset-group .fieldset-section:first-child select {\\n border-right: none;\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0; }\\n\\nfieldset-group.fieldset-group--smushed fieldset-section:nth-of-type(2) input, .fieldset-group--smushed.fieldset-group fieldset-section:nth-of-type(2) input, fieldset-group.fieldset-group--smushed .fieldset-section:nth-of-type(2) input, .fieldset-group--smushed.fieldset-group .fieldset-section:nth-of-type(2) input,\\n fieldset-group.fieldset-group--smushed fieldset-section:nth-of-type(2) select,\\n .fieldset-group--smushed.fieldset-group fieldset-section:nth-of-type(2) select,\\n fieldset-group.fieldset-group--smushed .fieldset-section:nth-of-type(2) select,\\n .fieldset-group--smushed.fieldset-group .fieldset-section:nth-of-type(2) select {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0; }\\n\\nfieldset-group.fieldset-group--smushed.fieldgroup--paginate, .fieldset-group--smushed.fieldgroup--paginate.fieldset-group {\\n padding-bottom: var(--spacing-large);\\n margin-top: var(--spacing-large);\\n align-items: flex-end;\\n justify-content: center; }\\n\\nfieldset-group.fieldset-group--disabled-prefix, .fieldset-group--disabled-prefix.fieldset-group {\\n align-items: flex-end; }\\n\\nfieldset-group.fieldset-group--disabled-prefix label, .fieldset-group--disabled-prefix.fieldset-group label {\\n min-height: 18px;\\n white-space: nowrap;\\n overflow: visible;\\n width: 0; }\\n\\nfieldset-group.fieldset-group--disabled-prefix fieldset-section:first-child .form-field__prefix, .fieldset-group--disabled-prefix.fieldset-group fieldset-section:first-child .form-field__prefix, fieldset-group.fieldset-group--disabled-prefix .fieldset-section:first-child .form-field__prefix, .fieldset-group--disabled-prefix.fieldset-group .fieldset-section:first-child .form-field__prefix {\\n white-space: nowrap;\\n padding: 0.5rem;\\n padding-right: var(--spacing-small);\\n height: var(--height-input);\\n border: 1px solid;\\n border-top-left-radius: var(--border-radius);\\n border-bottom-left-radius: var(--border-radius);\\n border-right: 0;\\n border-color: var(--color-input-border);\\n color: var(--color-text-help);\\n background-color: var(--color-input-bg);\\n border-right: 1px solid var(--color-text-help); }\\n\\nfieldset-group.fieldset-group--disabled-prefix fieldset-section:last-child, .fieldset-group--disabled-prefix.fieldset-group fieldset-section:last-child, fieldset-group.fieldset-group--disabled-prefix .fieldset-section:last-child, .fieldset-group--disabled-prefix.fieldset-group .fieldset-section:last-child {\\n width: 100%; }\\n\\nfieldset-group.fieldset-group--disabled-prefix fieldset-section:last-child input, .fieldset-group--disabled-prefix.fieldset-group fieldset-section:last-child input, fieldset-group.fieldset-group--disabled-prefix .fieldset-section:last-child input, .fieldset-group--disabled-prefix.fieldset-group .fieldset-section:last-child input {\\n border-left: 0;\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-color: var(--color-input-border);\\n padding-left: var(--spacing-xsmall); }\\n\\n.form-field--copyable {\\n padding: 0.2rem 0.75rem;\\n text-overflow: ellipsis;\\n user-select: text;\\n cursor: default; }\\n\\n.form-field--short {\\n width: 25em; }\\n\\n.form-field--price-amount {\\n width: 7em; }\\n\\n.form-field--address {\\n min-width: 18em; }\\n\\n.form-field__help {\\n margin-top: var(--spacing-miniscule);\\n margin-bottom: var(--spacing-small); }\\n\\n.form-field__help + .checkbox,\\n.form-field__help + .radio {\\n margin-top: var(--spacing-large); }\\n\\n.form-field__conjuction {\\n padding-top: 1rem; }\\n\\nfieldset-section .form-field__internal-option, .fieldset-section .form-field__internal-option {\\n margin-top: var(--spacing-small);\\n margin-left: 2.2rem; }\\n\\nfieldset-section .form-field__internal-option:first-of-type, .fieldset-section .form-field__internal-option:first-of-type {\\n margin-top: var(--spacing-small); }\\n\\n.header {\\n z-index: 2;\\n position: fixed;\\n top: 0;\\n width: 100%;\\n background-color: var(--color-header-background);\\n box-shadow: var(--card-box-shadow);\\n font-size: var(--font-body);\\n -webkit-user-select: none;\\n -webkit-app-region: drag; }\\n\\n.header > * {\\n user-select: none; }\\n\\n.header--minimal {\\n box-shadow: none;\\n background-color: transparent;\\n border-bottom: none; }\\n\\n.header--mac {\\n padding-top: var(--mac-titlebar-height); }\\n\\n.header--noauth-web .header__navigation-item--icon {\\n margin: 0 10px; }\\n\\n.header__contents {\\n max-width: var(--page-max-width);\\n height: calc(var(--header-height) - 1px);\\n display: flex;\\n align-items: center;\\n margin: auto;\\n padding: 0 var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .header__contents {\\n padding: var(--spacing-small); } }\\n\\n.header__navigation {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n height: var(--height-input); }\\n\\n.header__menu {\\n margin-left: auto;\\n display: flex;\\n justify-content: space-between;\\n align-items: center; }\\n\\n.header__menu > .button:only-child {\\n margin-left: auto; }\\n\\n@media (max-width: 900px) {\\n .header__menu {\\n display: none; } }\\n\\n.header__menu--mobile {\\n display: none; }\\n\\n@media (max-width: 900px) {\\n .header__menu--mobile {\\n display: block;\\n margin-left: var(--spacing-medium); }\\n .header__menu--mobile svg {\\n stroke: var(--color-text); } }\\n\\n.header__menu--with-balance button:first-child {\\n margin-left: var(--spacing-large);\\n margin-right: var(--spacing-medium); }\\n\\n.header__navigation-arrows {\\n display: flex;\\n margin-right: var(--spacing-small); }\\n\\n.header__navigation-item {\\n height: var(--height-button);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n border-radius: var(--border-radius);\\n color: var(--color-text); }\\n\\n.header__navigation-item svg {\\n stroke: var(--color-text); }\\n\\n.header__navigation-item:hover {\\n color: var(--color-link-active); }\\n\\n.header__navigation-item:hover svg {\\n stroke: var(--color-link-active); }\\n\\n.header__navigation-item--back,\\n.header__navigation-item--forward,\\n.header__navigation-item--icon {\\n width: var(--height-button);\\n background-color: var(--color-header-button);\\n border-radius: 1.5rem;\\n margin-left: var(--spacing-small); }\\n\\n.header__navigation-item--back:hover,\\n .header__navigation-item--forward:hover,\\n .header__navigation-item--icon:hover {\\n background-color: var(--color-primary-alt); }\\n\\n.header__navigation-item--back:focus,\\n .header__navigation-item--forward:focus,\\n .header__navigation-item--icon:focus {\\n box-shadow: 0 0 0 3px var(--color-focus); }\\n\\n.header__navigation-item--back span,\\n .header__navigation-item--forward span,\\n .header__navigation-item--icon span {\\n display: flex;\\n justify-content: center;\\n align-items: center; }\\n\\n.header__navigation-item--lbry {\\n font-weight: var(--font-weight-bold);\\n margin-right: var(--spacing-medium); }\\n\\n.header__navigation-item--lbry .lbry-icon {\\n height: 2rem;\\n width: 2rem; }\\n\\n@media (max-width: 900px) {\\n .header__navigation-item--button-mobile .button__label {\\n display: none; } }\\n\\n.header__navigation-item--balance {\\n margin: 0 var(--spacing-medium); }\\n\\n.header__navigation-dropdown {\\n padding: 0;\\n position: absolute;\\n list-style-type: none;\\n background-color: var(--color-header-background); }\\n\\n.header__navigation-button {\\n margin: 0;\\n padding: var(--spacing-miniscule) var(--spacing-medium);\\n display: flex;\\n align-items: center; }\\n\\n.header__navigation-button:hover {\\n cursor: pointer;\\n background-color: var(--color-menu-background--active); }\\n\\n.header__navigation-button-help {\\n margin-top: 0;\\n margin-left: var(--spacing-small); }\\n\\n.icon__wrapper {\\n background-color: var(--color-primary-alt);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 1.5rem;\\n margin-top: 0;\\n margin-bottom: 0;\\n height: 3.5rem;\\n width: 3.5rem;\\n border-radius: calc(3.5rem / 2);\\n position: relative; }\\n\\n.icon__wrapper .icon {\\n position: absolute;\\n stroke: var(--color-primary); }\\n\\n.icon__wrapper--Heart {\\n background-color: var(--color-follow-bg); }\\n\\n.icon__wrapper--Heart .icon {\\n stroke: var(--color-follow-icon); }\\n\\n.icon__wrapper--Eye {\\n background-color: var(--color-view-bg); }\\n\\n.icon__wrapper--Eye .icon {\\n stroke: var(--color-view-icon); }\\n\\n.icon--help {\\n color: var(--color-subtitle);\\n margin-left: var(--spacing-xsmall);\\n opacity: 0.7;\\n top: 2px; }\\n\\n.icon--hidden {\\n margin-right: var(--spacing-small); }\\n\\n.main-wrapper {\\n position: relative; }\\n\\n.main-wrapper--mac {\\n margin-top: calc(var(--header-height) + var(--mac-titlebar-height)); }\\n\\n.main-wrapper__inner {\\n display: flex;\\n align-items: flex-start;\\n justify-content: space-between;\\n min-height: calc(100vh - var(--header-height));\\n max-width: var(--page-max-width);\\n margin-left: auto;\\n margin-right: auto;\\n margin-top: var(--header-height);\\n padding: var(--spacing-large); }\\n\\n@media (max-width: 900px) {\\n .main-wrapper__inner {\\n padding: var(--spacing-small); } }\\n\\n.main {\\n position: relative;\\n width: calc(100% - var(--side-nav-width) - var(--spacing-large)); }\\n\\n@media (max-width: 900px) {\\n .main {\\n width: 100%;\\n margin-right: 0;\\n margin-left: 0; } }\\n\\n.main--auth-page {\\n max-width: 60rem;\\n margin-top: var(--spacing-main-padding);\\n margin-left: auto;\\n margin-right: auto; }\\n\\n.main--empty {\\n align-self: center;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n margin-top: 100px;\\n margin-bottom: 100px;\\n text-align: center; }\\n\\n.main--empty > .card, .main--empty > .card--claim-preview-wrap, .main--empty > .content__viewer, .main--empty > .modal {\\n width: 100%; }\\n\\n.main--launching {\\n width: 100vw;\\n height: 100vh;\\n background-color: var(--color-background); }\\n\\n.main--contained {\\n margin: auto;\\n margin-top: 2rem;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n max-width: 40rem;\\n text-align: left; }\\n\\n.main--contained > * {\\n width: 100%; }\\n\\n.main--full-width {\\n width: 100%; }\\n\\n.CodeMirror {\\n border: 1px solid var(--color-input-border);\\n border-bottom-left-radius: var(--border-radius);\\n border-bottom-right-radius: var(--border-radius);\\n background: var(--color-input-bg);\\n color: var(--color-input); }\\n\\n.CodeMirror .CodeMirror-placeholder {\\n opacity: 0.5; }\\n\\n.CodeMirror-wrap {\\n overflow: hidden; }\\n\\n.editor-toolbar {\\n background-color: var(--color-header-background);\\n border: none;\\n border-top-left-radius: var(--border-radius);\\n border-top-right-radius: var(--border-radius);\\n border-right: 1px solid var(--color-input-border);\\n border-top: 1px solid var(--color-input-border);\\n border-left: 1px solid var(--color-input-border);\\n opacity: 1; }\\n\\n.editor-toolbar:hover {\\n opacity: 1; }\\n\\n.editor-toolbar.disabled-for-preview a:not(.no-disable) {\\n border-color: transparent;\\n opacity: 0.3; }\\n\\n.editor-toolbar.fullscreen::before, .editor-toolbar.fullscreen::after {\\n display: none; }\\n\\n.editor-toolbar button {\\n color: var(--color-header-link);\\n border-color: transparent;\\n transition: opacity 0.3s ease; }\\n\\n.editor-toolbar i.separator {\\n border: none; }\\n\\n.form-field--SimpleMDE {\\n margin-top: var(--spacing-large); }\\n\\n.form-field--SimpleMDE .editor-toolbar button:not(.button) {\\n padding-right: 0;\\n padding-left: 0;\\n background-color: transparent !important;\\n border: transparent; }\\n\\n.form-field--SimpleMDE .editor-toolbar button:not(.button):hover {\\n color: var(--color-header-link-active); }\\n\\n.markdown-preview > :first-child {\\n margin-top: 0; }\\n\\n.markdown-preview > *:last-child {\\n margin-bottom: 0; }\\n\\n@media (max-width: 900px) {\\n .markdown-preview {\\n font-size: var(--font-base); } }\\n\\n.markdown-preview h1,\\n.markdown-preview h2,\\n.markdown-preview h3,\\n.markdown-preview h4,\\n.markdown-preview h5,\\n.markdown-preview h6 {\\n font-size: inherit;\\n font-weight: var(--font-weight-bold);\\n margin-bottom: var(--spacing-medium); }\\n\\n.markdown-preview h1:not(:first-child),\\n .markdown-preview h2:not(:first-child),\\n .markdown-preview h3:not(:first-child),\\n .markdown-preview h4:not(:first-child),\\n .markdown-preview h5:not(:first-child),\\n .markdown-preview h6:not(:first-child) {\\n margin-top: var(--spacing-large); }\\n\\n.markdown-preview h1 {\\n font-size: 1.7em; }\\n\\n.markdown-preview h2 {\\n font-size: 1.5em; }\\n\\n.markdown-preview h3 {\\n font-size: 1.4em; }\\n\\n.markdown-preview h4 {\\n font-size: 1.3em; }\\n\\n.markdown-preview h5 {\\n font-size: 1.2em; }\\n\\n.markdown-preview h6 {\\n font-size: 1em; }\\n\\n.markdown-preview p svg {\\n width: 1rem;\\n height: 1rem;\\n margin-left: 0.2rem;\\n position: relative;\\n top: 1px; }\\n\\n.markdown-preview p,\\n.markdown-preview blockquote,\\n.markdown-preview dl,\\n.markdown-preview ul,\\n.markdown-preview ol,\\n.markdown-preview pre,\\n.markdown-preview table {\\n margin-top: var(--spacing-medium); }\\n\\n.markdown-preview table {\\n margin-bottom: 1.2rem;\\n padding: var(--spacing-medium);\\n word-break: normal; }\\n\\n.markdown-preview table tr td,\\n .markdown-preview table tr th,\\n .markdown-preview table tr td:first-of-type,\\n .markdown-preview table tr th:first-of-type,\\n .markdown-preview table tr td:last-of-type,\\n .markdown-preview table tr th:last-of-type {\\n padding: var(--spacing-small) var(--spacing-medium); }\\n\\n.markdown-preview table th {\\n border-bottom: 2px solid var(--color-border);\\n letter-spacing: 0.1rem;\\n text-align: left;\\n text-transform: uppercase; }\\n\\n.markdown-preview table tr:not(:last-of-type) td {\\n border-bottom: 1px solid var(--color-border); }\\n\\n.markdown-preview img {\\n margin-bottom: var(--spacing-medium);\\n padding-top: var(--spacing-medium);\\n max-height: var(--inline-player-max-height);\\n object-position: left; }\\n\\n@media (max-width: 900px) {\\n .markdown-preview img {\\n font-size: 0.8em; } }\\n\\n.markdown-preview hr {\\n margin-bottom: 2rem;\\n position: relative;\\n top: 1rem; }\\n\\n.markdown-preview pre {\\n white-space: normal;\\n background: transparent;\\n word-break: break-all; }\\n\\n.markdown-preview pre code {\\n margin-bottom: var(--spacing-medium);\\n padding: var(--spacing-medium);\\n display: block;\\n white-space: pre-wrap; }\\n\\n.markdown-preview code {\\n background-color: var(--color-blockquote);\\n display: inline-block;\\n margin: var(--spacing-miniscule);\\n border-radius: 0.2rem;\\n font-size: var(--font-small);\\n padding: calc(var(--spacing-miniscule) - 4px) var(--spacing-miniscule); }\\n\\n.markdown-preview a,\\n.markdown-preview button {\\n display: inline-block; }\\n\\n.markdown-preview a .button__label,\\n .markdown-preview button .button__label {\\n white-space: normal; }\\n\\n.markdown-preview button {\\n white-space: normal;\\n text-align: left; }\\n\\n.markdown-preview .preview-link {\\n padding: 0;\\n margin: 1rem 0;\\n background-color: var(--color-primary-alt);\\n border-left: 0.5rem solid var(--color-primary);\\n display: block;\\n align-items: center;\\n word-break: break-all;\\n overflow: hidden; }\\n\\n.markdown-preview .preview-link .claim-preview {\\n border: 0;\\n background: transparent; }\\n\\n.markdown-preview .preview-link .media__subtitle, .markdown-preview .preview-link .media__subtitle--between {\\n display: block; }\\n\\n.markdown-preview .preview-link__thumbnail {\\n width: 12rem; }\\n\\n.markdown-preview .preview-link__description {\\n margin-top: var(--spacing-small); }\\n\\n.editor-preview {\\n background-color: var(--color-input-bg); }\\n\\n.media__thumb {\\n position: relative;\\n border-radius: var(--card-radius);\\n object-fit: cover;\\n background-color: var(--color-placeholder-background);\\n background-position: center;\\n background-repeat: no-repeat;\\n background-size: cover; }\\n\\n.media__thumb::before, .media__thumb::after {\\n content: \\\"\\\"; }\\n\\n.media__thumb::before {\\n float: left;\\n padding-top: var(--aspect-ratio-standard); }\\n\\n.media__thumb::after {\\n clear: both;\\n display: block; }\\n\\n.media__uri, .media__uri--inline, .media__uri--right {\\n position: absolute;\\n transform: translateY(-130%);\\n font-size: var(--font-xsmall);\\n color: var(--color-text-subtitle); }\\n\\n@media (max-width: 900px) {\\n .media__uri, .media__uri--inline, .media__uri--right {\\n position: static;\\n transform: none;\\n margin-bottom: var(--spacing-xsmall); } }\\n\\n.media__uri .icon, .media__uri--inline .icon, .media__uri--right .icon {\\n margin-right: var(--spacing-xsmall)/2;\\n margin-bottom: -0.08rem; }\\n\\n.media__uri--inline {\\n position: relative;\\n transform: none;\\n overflow: hidden;\\n text-overflow: ellipsis; }\\n\\n.media__uri--right {\\n right: 0; }\\n\\n.media__subtitle, .media__subtitle--between {\\n align-self: flex-start;\\n color: var(--color-text-subtitle);\\n font-size: var(--font-small); }\\n\\n.media__subtitle svg, .media__subtitle--between svg {\\n stroke: var(--color-text-subtitle); }\\n\\n.media__subtitle--between {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: var(--spacing-small); }\\n\\n.media__info-text {\\n word-break: break-word; }\\n\\n.media__info-text:not(:last-of-type) {\\n margin-bottom: var(--spacing-medium); }\\n\\n.media__info-text.media__info-text--constrained {\\n max-width: 50rem; }\\n\\n.media__actions {\\n display: flex;\\n flex-wrap: wrap;\\n justify-content: space-between;\\n margin-top: 0; }\\n\\n@media (max-width: 900px) {\\n .media__actions {\\n justify-content: flex-start;\\n padding-top: var(--spacing-small); }\\n .media__actions > * {\\n margin-right: var(--spacing-small);\\n margin-bottom: var(--spacing-small); } }\\n\\n/* Used to detect in JavaScript if apps have loaded styles or not. */\\n\\n:root {\\n --reach-menu-button: 1; }\\n\\n[data-reach-menu] {\\n font-family: sans-serif;\\n display: block;\\n position: absolute;\\n z-index: 2;\\n font-size: var(--font-body); }\\n\\n[data-reach-menu-list] {\\n display: block;\\n white-space: nowrap;\\n outline: none;\\n background-color: var(--color-menu-background);\\n border-top: none; }\\n\\n[data-reach-menu-item] {\\n display: block;\\n z-index: 2; }\\n\\n[data-reach-menu-item]:focus {\\n box-shadow: none; }\\n\\n[data-reach-menu-item] {\\n cursor: pointer;\\n display: block;\\n color: inherit;\\n font: inherit;\\n text-decoration: initial; }\\n\\n[data-reach-menu-item] .icon {\\n stroke: var(--color-menu-icon); }\\n\\n[data-reach-menu-item][data-selected] {\\n background-color: var(--color-menu-background--active);\\n box-shadow: none; }\\n\\n[data-reach-menu-item][data-selected] .icon {\\n stroke: var(--color-menu-icon-active); }\\n\\n.menu__list, .menu__list--header, .header__navigation-dropdown {\\n margin-left: calc(var(--spacing-medium) * -1);\\n box-shadow: var(--card-box-shadow);\\n animation: menu-animate-in var(--animation-duration) var(--animation-style);\\n border-bottom-left-radius: var(--border-radius);\\n border-bottom-right-radius: var(--border-radius); }\\n\\n.menu__list--header, .header__navigation-dropdown {\\n margin-top: 19px; }\\n\\n.menu__link, .menu__link-help {\\n display: flex;\\n align-items: center;\\n padding: var(--spacing-medium);\\n padding-right: var(--spacing-large); }\\n\\n.menu__link .icon, .menu__link-help .icon {\\n stroke: var(--color-menu-icon);\\n margin-right: var(--spacing-small); }\\n\\n.menu__link .badge, .menu__link-help .badge, .menu__link .badge--tag, .menu__link-help .badge--tag, .menu__link .tag, .menu__link-help .tag, .menu__link .badge--tag-mature, .menu__link-help .badge--tag-mature, .menu__link .tag--mature, .menu__link-help .tag--mature, .menu__link .badge--cost, .menu__link-help .badge--cost, .menu__link .badge--free, .menu__link-help .badge--free, .menu__link .badge--alert, .menu__link-help .badge--alert {\\n margin-left: var(--spacing-small); }\\n\\n.menu__link-help {\\n color: var(--color-text-help);\\n font-size: var(--font-small);\\n padding-top: 0; }\\n\\n.ReactModal__Body--open #app {\\n height: 100vh;\\n overflow-y: hidden; }\\n\\n.modal-overlay {\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n align-items: center;\\n background-color: var(--color-background-overlay);\\n display: flex;\\n justify-content: center;\\n position: fixed;\\n z-index: 9999; }\\n\\n.modal {\\n background-color: var(--color-modal-background);\\n line-height: 1.55;\\n min-width: 500px;\\n max-width: var(--modal-width);\\n overflow: auto;\\n padding: var(--spacing-large);\\n word-break: break-word; }\\n\\n.modal:focus {\\n box-shadow: none; }\\n\\n@media (max-width: 900px) {\\n .modal {\\n width: 100%;\\n height: 100%;\\n max-width: 100%;\\n min-width: auto;\\n margin-bottom: 0;\\n border-radius: 0; }\\n .modal .card, .modal .card--claim-preview-wrap, .modal .content__viewer, .modal .modal {\\n box-shadow: none;\\n border: none; }\\n .modal .navigation, .modal .ads-wrapper {\\n width: 100%;\\n display: block;\\n padding: var(--spacing-large); }\\n .modal .navigation .navigation-links:not(.navigation-links--small) .navigation-link, .modal .ads-wrapper .navigation-links:not(.navigation-links--small) .navigation-link, .modal .navigation .navigation-links--small:not(.navigation-links--small) .navigation-link, .modal .ads-wrapper .navigation-links--small:not(.navigation-links--small) .navigation-link {\\n font-size: var(--font-large);\\n border-bottom: 1px solid var(--color-gray-3);\\n padding: var(--spacing-medium) 0; } }\\n\\n.modal--card-internal {\\n padding: 0; }\\n\\n.modal--card-internal .card, .modal--card-internal .card--claim-preview-wrap, .modal--card-internal .content__viewer, .modal--card-internal .modal {\\n margin: 0; }\\n\\n.error-modal__content {\\n display: flex;\\n padding: 0 var(--spacing-medium) var(--spacing-medium) var(--spacing-medium); }\\n\\n.error-modal {\\n max-width: none;\\n width: var(--modal-width);\\n white-space: pre-wrap; }\\n\\n.error-modal__error-list {\\n max-width: var(--modal-width);\\n max-height: 400px;\\n margin-top: var(--spacing-small);\\n padding: var(--spacing-small);\\n background-color: var(--color-error);\\n border-left: 2px solid var(--color-text-error);\\n color: var(--color-text-error);\\n list-style: none;\\n overflow-y: scroll;\\n white-space: pre-wrap; }\\n\\n.nag {\\n z-index: 9999;\\n position: fixed;\\n left: 0;\\n bottom: 0;\\n width: 100%;\\n padding: var(--spacing-small);\\n background-color: var(--color-nag);\\n color: var(--color-white);\\n font-weight: var(--font-weight-bold);\\n text-align: center; }\\n\\n.nag .button--link, .nag .button--uri-indicator, .nag .markdown-preview a, .markdown-preview .nag a, .nag .tab {\\n font-weight: var(--font-weight-bold);\\n color: var(--color-white);\\n text-decoration: underline; }\\n\\n@media (max-width: 900px) {\\n .nag {\\n text-align: left; } }\\n\\n.nag--inline {\\n position: absolute;\\n top: 0;\\n bottom: auto;\\n z-index: 1 !important;\\n /* booooooo */ }\\n\\n.nag--helpful {\\n background-color: var(--color-secondary);\\n color: var(--color-white);\\n z-index: 10000; }\\n\\n.nag--error {\\n background-color: var(--color-error);\\n color: var(--color-text-error);\\n z-index: 100001; }\\n\\n.nag__message {\\n display: inline; }\\n\\n@media (max-width: 900px) {\\n .nag__message::after {\\n content: '';\\n display: block; } }\\n\\n.nag__button {\\n line-height: 1;\\n margin-left: var(--spacing-small);\\n margin-right: var(--spacing-small);\\n border-radius: var(--border-radius);\\n border: 1px solid var(--color-white);\\n padding: var(--spacing-miniscule);\\n color: var(--color-white);\\n font-weight: var(--font-weight-bold); }\\n\\n.nag__button:hover {\\n background-color: var(--color-white);\\n color: var(--color-nag); }\\n\\n@media (max-width: 900px) {\\n .nag__button {\\n margin-left: 0;\\n margin-top: var(--spacing-small); } }\\n\\n.nag__button--helpful:hover {\\n background-color: var(--color-secondary-alt);\\n color: var(--color-secondary); }\\n\\n.nag__button--error {\\n color: var(--color-text-error);\\n border-color: var(--color-text-error); }\\n\\n.nag__button--error:hover {\\n background-color: var(--color-text-error);\\n color: var(--color-white); }\\n\\n.nag__close {\\n margin-left: auto;\\n right: var(--spacing-medium);\\n position: absolute;\\n border: none; }\\n\\n.nag__close svg {\\n stroke-width: 4px; }\\n\\n.navigation, .ads-wrapper {\\n width: var(--side-nav-width);\\n font-size: var(--font-body);\\n margin-left: var(--spacing-main-padding); }\\n\\n@media (max-width: 900px) {\\n .navigation, .ads-wrapper {\\n display: none;\\n margin-left: 0; } }\\n\\n.navigation + .ads-wrapper, .ads-wrapper + .ads-wrapper {\\n margin-top: var(--spacing-large); }\\n\\n.navigation__secondary {\\n margin-top: var(--spacing-large); }\\n\\n.navigation-links, .navigation-links--small {\\n flex-direction: column;\\n align-items: flex-start;\\n list-style: none; }\\n\\n.navigation-links--small {\\n font-size: var(--font-small); }\\n\\n.navigation-links__inline {\\n margin-left: calc(var(--spacing-medium) + var(--spacing-small)); }\\n\\n.navigation-link__wrapper {\\n margin: var(--spacing-miniscule) 0; }\\n\\n.navigation-link {\\n display: block;\\n position: relative;\\n text-align: left;\\n transition: color 0.2s;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n color: var(--color-navigation-link);\\n margin-top: var(--spacing-small); }\\n\\n.navigation-link .icon {\\n stroke: var(--color-link-icon); }\\n\\n.navigation-link:hover, .navigation-link.navigation-link--active {\\n color: var(--color-link-active); }\\n\\n.navigation-link:hover .icon, .navigation-link.navigation-link--active .icon {\\n stroke: var(--color-link-active); }\\n\\n.navigation-link:focus {\\n box-shadow: none; }\\n\\n.pagination {\\n display: flex;\\n align-items: center; }\\n\\n.pagination + .form-field {\\n margin-left: var(--spacing-medium); }\\n\\n@media (max-width: 900px) {\\n .pagination {\\n font-size: var(--font-small); } }\\n\\n.pagination__item {\\n width: 3rem;\\n height: 3rem;\\n border-radius: 50%;\\n text-align: center; }\\n\\n.pagination__item:not(.pagination__item--selected):hover {\\n background-color: var(--color-button-secondary-bg); }\\n\\n.pagination__item:not(.pagination__item--selected):not(.pagination__item--break):not(.disabled):hover {\\n color: var(--color-button-secondary-text); }\\n\\n.pagination__item:not(.pagination__item--selected):not(.pagination__item--break):not(.disabled):hover:hover {\\n background-color: var(--color-button-secondary-bg-hover); }\\n\\n.pagination__item:not(.pagination__item--previous):not(.pagination__item--next) {\\n font-weight: var(--font-weight-bold);\\n line-height: 3rem;\\n margin: 0 0.5em; }\\n\\n.pagination__item:not(.pagination__item--break):not(.disabled) {\\n cursor: pointer; }\\n\\n.pagination__item > a {\\n display: block;\\n height: 100%; }\\n\\n@media (max-width: 900px) {\\n .pagination__item {\\n width: 2rem;\\n height: 2rem; }\\n .pagination__item:not(.pagination__item--previous):not(.pagination__item--next) {\\n font-weight: var(--font-weight-bold);\\n line-height: 2rem; } }\\n\\n.pagination__item--break {\\n opacity: 0.3; }\\n\\n.pagination__item--previous,\\n.pagination__item--next {\\n line-height: 1;\\n position: relative;\\n padding-top: var(--spacing-small); }\\n\\n.pagination__item--selected {\\n background-color: var(--color-button-secondary-bg); }\\n\\n.placeholder {\\n animation: pulse 2s infinite ease-in-out;\\n background-color: var(--color-placeholder-background);\\n border-radius: var(--card-radius); }\\n\\n.placeholder__wrapper {\\n width: 100%; }\\n\\n.placeholder {\\n display: flex; }\\n\\n.placeholder.claim-preview__title {\\n width: 100%;\\n height: 3rem; }\\n\\n.placeholder.media__subtitle, .placeholder.media__subtitle--between {\\n margin-top: var(--spacing-small);\\n width: 30%;\\n height: 1.5em; }\\n\\n.placeholder.claim-tile__title {\\n width: 100%;\\n height: 2.5rem;\\n margin-left: 0; }\\n\\n.placeholder.claim-tile__info {\\n width: 40%;\\n height: 2rem; }\\n\\n.placeholder--text-document {\\n animation: pulse 2s infinite ease-in-out;\\n background-color: var(--color-placeholder-background);\\n border-radius: var(--card-radius);\\n height: 60vh; }\\n\\n.search__header {\\n margin-bottom: var(--spacing-large); }\\n\\n.search__header .placeholder {\\n background-color: var(--color-placeholder-background); }\\n\\n.search__options {\\n margin-top: var(--spacing-large); }\\n\\n.search__options .search__legend {\\n background-color: var(--color-secondary-alt);\\n color: var(--color-secondary);\\n margin-bottom: var(--spacing-small);\\n padding: var(--spacing-miniscule); }\\n\\n.search__options fieldset:not(:first-child) {\\n margin-top: var(--spacing-large); }\\n\\n.search__options .radio,\\n .search__options .checkbox {\\n display: inline-block; }\\n\\n.search__options .radio:not(:first-of-type),\\n .search__options .checkbox:not(:first-of-type) {\\n margin-left: var(--spacing-medium); }\\n\\n.claim-search__menus {\\n background-color: var(--color-card-background);\\n position: relative;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center;\\n padding: var(--spacing-medium);\\n padding-bottom: var(--spacing-small);\\n margin-top: var(--spacing-medium);\\n color: var(--color-text-subtitle); }\\n\\n@media (max-width: 900px) {\\n .claim-search__menus {\\n flex-direction: column;\\n align-items: flex-start; } }\\n\\n.claim-search__dropdown {\\n padding: 0 var(--spacing-medium);\\n max-width: 400px;\\n background-color: var(--color-card-background);\\n width: var(--option-select-width); }\\n\\n@media (max-width: 900px) {\\n .claim-search__dropdown {\\n margin-left: 0; } }\\n\\n.claim-search__dropdown--selected {\\n background-color: var(--color-primary-alt); }\\n\\n.claim-search__input-container:not(:first-of-type) {\\n padding-left: var(--spacing-medium); }\\n\\n@media (max-width: 900px) {\\n .claim-search__input-container {\\n padding-left: 0px; }\\n .claim-search__input-container:not(:first-of-type) {\\n margin-top: var(--spacing-small); }\\n .claim-search__input-container:not(:first-of-type) {\\n padding-left: 0; } }\\n\\n.claim-search__input-special {\\n font-weight: var(--font-weight-bold); }\\n\\n.claim-search__extra {\\n display: flex;\\n flex-direction: row;\\n align-items: center; }\\n\\n.claim-search__top {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap; }\\n\\n.section {\\n position: relative;\\n margin-top: var(--spacing-large); }\\n\\n.section:first-of-type {\\n margin-top: 0; }\\n\\n.section--padded {\\n padding: var(--spacing-medium); }\\n\\n.section--small {\\n max-width: 40rem; }\\n\\n.section__header {\\n margin-bottom: var(--spacing-large); }\\n\\n.section__flex, .card__section--flex {\\n display: flex;\\n align-items: flex-start; }\\n\\n.section__flex > .icon__wrapper:first-child, .card__section--flex > .icon__wrapper:first-child {\\n margin-right: var(--spacing-large); }\\n\\n.section__title, .section__title--small, .section__title--large {\\n text-align: left;\\n font-size: var(--font-title);\\n font-weight: var(--font-weight-light); }\\n\\n.section__title--small {\\n font-size: var(--font-body);\\n margin-top: var(--spacing-medium); }\\n\\n.section__title--large {\\n margin-right: var(--spacing-medium);\\n display: inline-block;\\n font-weight: var(--font-weight-bold);\\n font-size: var(--font-heading); }\\n\\n@media (max-width: 900px) {\\n .section__title--large {\\n font-size: var(--font-title); } }\\n\\n.section__subtitle--status {\\n padding: var(--spacing-small);\\n background-color: var(--color-text-warning); }\\n\\n.section__divider {\\n display: flex;\\n flex-direction: column; }\\n\\n.section__divider hr {\\n margin: var(--spacing-large) 0; }\\n\\n.section__divider p {\\n color: var(--color-subtitle);\\n text-align: center;\\n font-size: var(--font-large);\\n font-weight: var(--font-weight-base);\\n background-color: var(--color-background);\\n transform: translateY(-150%);\\n padding: 0 var(--spacing-large);\\n display: inline-block;\\n margin: auto; }\\n\\n.section__body {\\n margin-top: var(--spacing-medium); }\\n\\n.section__actions--centered {\\n justify-content: center; }\\n\\n@media (max-width: 900px) {\\n .section__actions--centered {\\n justify-content: flex-start; } }\\n\\n.section__actions--no-margin {\\n margin-top: 0; }\\n\\n@media (max-width: 900px) {\\n .section__actions, .channel__quick-actions, .section__actions--centered {\\n flex-wrap: wrap; }\\n .section__actions > *, .channel__quick-actions > *, .section__actions--centered > * {\\n margin-bottom: var(--spacing-small); } }\\n\\n.share {\\n border-radius: 50%; }\\n\\n.share .icon {\\n height: 2.2rem;\\n width: 2.2rem;\\n stroke: none; }\\n\\n.share:hover {\\n box-shadow: var(--card-box-shadow); }\\n\\n.snack-bar, .snack-bar--upgrade {\\n bottom: 2rem;\\n left: 2rem;\\n background-color: var(--color-snack-bg);\\n color: var(--color-snack);\\n border-radius: 0.5rem;\\n padding: var(--spacing-small) var(--spacing-large) var(--spacing-small) var(--spacing-medium);\\n position: fixed;\\n transition: all var(--transition-duration) var(--transition-type);\\n z-index: 10000; }\\n\\n.snack-bar--upgrade {\\n left: auto;\\n right: 2rem;\\n background-color: var(--color-snack-bg-upgrade);\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center; }\\n\\n.snack-bar--error {\\n background-color: var(--color-snack-bg-error); }\\n\\n.snack-bar__action {\\n display: inline-block;\\n margin: var(--spacing-small) 0;\\n min-width: min-content;\\n color: var(--color-white); }\\n\\n.snack-bar__action span:hover {\\n text-decoration: underline; }\\n\\n.snack-bar__message {\\n align-items: center;\\n display: flex;\\n flex-direction: row;\\n font-size: var(--font-body); }\\n\\n.snack-bar__message div:nth-of-type(1) {\\n margin-right: var(--spacing-medium); }\\n\\n.spinner {\\n width: 50px;\\n height: 40px;\\n font-size: 10px;\\n margin: var(--spacing-small);\\n text-align: center; }\\n\\n.spinner .rect {\\n width: 6px;\\n height: 100%;\\n animation: sk-stretchdelay 1.2s infinite ease-in-out;\\n display: inline-block;\\n margin: 0 2px; }\\n\\n.spinner .rect.rect2 {\\n animation-delay: -1.1s; }\\n\\n.spinner .rect.rect3 {\\n animation-delay: -1s; }\\n\\n.spinner .rect.rect4 {\\n animation-delay: -0.9s; }\\n\\n.spinner .rect.rect5 {\\n animation-delay: -0.8s; }\\n\\n.spinner--dark .rect {\\n background-color: var(--color-spinner-dark); }\\n\\n.spinner--light .rect {\\n background-color: var(--color-spinner-light); }\\n\\n.spinner--small {\\n height: 10px;\\n display: inline-block; }\\n\\n.spinner--small .rect {\\n width: 3px; }\\n\\n.splash {\\n -webkit-app-region: drag;\\n width: 100vw;\\n height: 100vh;\\n align-items: center;\\n background-color: var(--color-background--splash);\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n overflow: hidden; }\\n\\n.splash__details {\\n position: absolute;\\n line-height: 1;\\n font-weight: var(--font-weight-light);\\n color: #fff;\\n margin-top: 2rem; }\\n\\n.splash__title {\\n position: absolute;\\n font-size: 40px;\\n line-height: 1;\\n font-weight: var(--font-weight-bold);\\n color: #fff;\\n margin-top: -1rem; }\\n\\n.splash__animation-toggle {\\n position: fixed;\\n top: var(--spacing-large);\\n right: var(--spacing-large);\\n padding: var(--spacing-medium);\\n border-color: #fff;\\n color: #fff;\\n background-color: rgba(255, 255, 255, 0.205);\\n font-size: var(--font-small); }\\n\\n.splash__animation-toggle:hover {\\n background-color: rgba(255, 255, 255, 0.5); }\\n\\n.splash__animation-toggle:hover .icon {\\n stroke: #fff; }\\n\\n.doodle {\\n position: fixed; }\\n\\n.subscriptions__suggested {\\n animation: expand 0.2s;\\n position: relative; }\\n\\n/* Based on Sublime Text's Monokai theme */\\n\\n/* Customised slightly for LBRY dark theme */\\n\\n.cm-s-monokai.CodeMirror {\\n background: #212529;\\n color: #f8f8f2; }\\n\\n.cm-s-monokai div.CodeMirror-selected {\\n background: #717273; }\\n\\n.cm-s-monokai .CodeMirror-gutters {\\n background: #212529;\\n border-right: 0px; }\\n\\n.cm-s-monokai .CodeMirror-guttermarker {\\n color: white; }\\n\\n.cm-s-monokai .CodeMirror-guttermarker-subtle {\\n color: #d0d0d0; }\\n\\n.cm-s-monokai .CodeMirror-linenumber {\\n color: #d0d0d0; }\\n\\n.cm-s-monokai .CodeMirror-cursor {\\n border-left: 1px solid #f8f8f0; }\\n\\n.cm-s-monokai span.cm-comment {\\n color: #ada6a7; }\\n\\n.cm-s-monokai span.cm-atom {\\n color: #ae81ff; }\\n\\n.cm-s-monokai span.cm-number {\\n color: #ae81ff; }\\n\\n.cm-s-monokai span.cm-comment.cm-attribute {\\n color: #97b757; }\\n\\n.cm-s-monokai span.cm-comment.cm-def {\\n color: #bc9262; }\\n\\n.cm-s-monokai span.cm-comment.cm-tag {\\n color: #bc6283; }\\n\\n.cm-s-monokai span.cm-comment.cm-type {\\n color: #5998a6; }\\n\\n.cm-s-monokai span.cm-property,\\n.cm-s-monokai span.cm-attribute {\\n color: #a6e22e; }\\n\\n.cm-s-monokai span.cm-keyword {\\n color: #f92672; }\\n\\n.cm-s-monokai span.cm-builtin {\\n color: #66d9ef; }\\n\\n.cm-s-monokai span.cm-string {\\n color: #e6db74; }\\n\\n.cm-s-monokai span.cm-variable {\\n color: #f8f8f2; }\\n\\n.cm-s-monokai span.cm-variable-2 {\\n color: #9effff; }\\n\\n.cm-s-monokai span.cm-variable-3,\\n.cm-s-monokai span.cm-type {\\n color: #66d9ef; }\\n\\n.cm-s-monokai span.cm-def {\\n color: #fd971f; }\\n\\n.cm-s-monokai span.cm-bracket {\\n color: #f8f8f2; }\\n\\n.cm-s-monokai span.cm-tag {\\n color: #f92672; }\\n\\n.cm-s-monokai span.cm-header {\\n color: #ae81ff; }\\n\\n.cm-s-monokai span.cm-link {\\n color: #ae81ff; }\\n\\n.cm-s-monokai span.cm-error {\\n background: #f92672;\\n color: #f8f8f0; }\\n\\n.cm-s-monokai .CodeMirror-activeline-background {\\n background: #373831; }\\n\\n.cm-s-monokai .CodeMirror-matchingbracket {\\n text-decoration: underline;\\n color: white !important; }\\n\\n/* From https://codemirror.net/theme/ttcn.css */\\n\\n/* Customised slightly for LBRY light theme */\\n\\n.cm-s-ttnc .CodeMirror {\\n background-color: var(--color-background); }\\n\\n.cm-s-ttnc .CodeMirror {\\n background-color: var(--color-background);\\n border: 0; }\\n\\n.cm-s-ttcn .cm-quote {\\n color: #090; }\\n\\n.cm-s-ttcn .cm-negative {\\n color: #d44; }\\n\\n.cm-s-ttcn .cm-positive {\\n color: #292; }\\n\\n.cm-s-ttcn .cm-header,\\n.cm-strong {\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-em {\\n font-style: italic; }\\n\\n.cm-s-ttcn .cm-link {\\n text-decoration: underline; }\\n\\n.cm-s-ttcn .cm-strikethrough {\\n text-decoration: line-through; }\\n\\n.cm-s-ttcn .cm-header {\\n color: #00f;\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-atom {\\n color: #219; }\\n\\n.cm-s-ttcn .cm-attribute {\\n color: #00c; }\\n\\n.cm-s-ttcn .cm-bracket {\\n color: #997; }\\n\\n.cm-s-ttcn .cm-comment {\\n color: #333333; }\\n\\n.cm-s-ttcn .cm-def {\\n color: #00f; }\\n\\n.cm-s-ttcn .cm-em {\\n font-style: italic; }\\n\\n.cm-s-ttcn .cm-error {\\n color: #f00; }\\n\\n.cm-s-ttcn .cm-hr {\\n color: #999; }\\n\\n.cm-s-ttcn .cm-invalidchar {\\n color: #f00; }\\n\\n.cm-s-ttcn .cm-keyword {\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-link {\\n color: #00c;\\n text-decoration: underline; }\\n\\n.cm-s-ttcn .cm-meta {\\n color: #555; }\\n\\n.cm-s-ttcn .cm-negative {\\n color: #d44; }\\n\\n.cm-s-ttcn .cm-positive {\\n color: #292; }\\n\\n.cm-s-ttcn .cm-qualifier {\\n color: #555; }\\n\\n.cm-s-ttcn .cm-strikethrough {\\n text-decoration: line-through; }\\n\\n.cm-s-ttcn .cm-string {\\n color: #006400; }\\n\\n.cm-s-ttcn .cm-string-2 {\\n color: #f50; }\\n\\n.cm-s-ttcn .cm-strong {\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-tag {\\n color: #170; }\\n\\n.cm-s-ttcn .cm-variable {\\n color: #8b2252; }\\n\\n.cm-s-ttcn .cm-variable-2 {\\n color: #05a; }\\n\\n.cm-s-ttcn .cm-variable-3,\\n.cm-s-ttcn .cm-type {\\n color: #085; }\\n\\n.cm-s-ttcn .cm-invalidchar {\\n color: #f00; }\\n\\n/* ASN */\\n\\n.cm-s-ttcn .cm-accessTypes,\\n.cm-s-ttcn .cm-compareTypes {\\n color: #27408b; }\\n\\n.cm-s-ttcn .cm-cmipVerbs {\\n color: #8b2252; }\\n\\n.cm-s-ttcn .cm-modifier {\\n color: #d2691e; }\\n\\n.cm-s-ttcn .cm-status {\\n color: #8b4545; }\\n\\n.cm-s-ttcn .cm-storage {\\n color: #a020f0; }\\n\\n.cm-s-ttcn .cm-tags {\\n color: #006400; }\\n\\n/* CFG */\\n\\n.cm-s-ttcn .cm-externalCommands {\\n color: #8b4545;\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-fileNCtrlMaskOptions,\\n.cm-s-ttcn .cm-sectionTitle {\\n color: #2e8b57;\\n font-weight: bold; }\\n\\n/* TTCN */\\n\\n.cm-s-ttcn .cm-booleanConsts,\\n.cm-s-ttcn .cm-otherConsts,\\n.cm-s-ttcn .cm-verdictConsts {\\n color: #006400; }\\n\\n.cm-s-ttcn .cm-configOps,\\n.cm-s-ttcn .cm-functionOps,\\n.cm-s-ttcn .cm-portOps,\\n.cm-s-ttcn .cm-sutOps,\\n.cm-s-ttcn .cm-timerOps,\\n.cm-s-ttcn .cm-verdictOps {\\n color: #0000ff; }\\n\\n.cm-s-ttcn .cm-preprocessor,\\n.cm-s-ttcn .cm-templateMatch,\\n.cm-s-ttcn .cm-ttcn3Macros {\\n color: #27408b; }\\n\\n.cm-s-ttcn .cm-types {\\n color: #a52a2a;\\n font-weight: bold; }\\n\\n.cm-s-ttcn .cm-visibilityModifiers {\\n font-weight: bold; }\\n\\n.table__wrapper {\\n overflow-x: auto; }\\n\\n.table__header {\\n display: flex;\\n justify-content: space-between;\\n border-bottom: 1px solid var(--color-border); }\\n\\n.table__header .section__subtitle, .table__header .section__subtitle--status {\\n margin-bottom: 0; }\\n\\n.table__header-text, .table__header-text--between {\\n width: 100%;\\n margin: var(--spacing-medium) var(--spacing-large); }\\n\\n.table__header-text--between {\\n display: flex;\\n justify-content: space-between; }\\n\\n@media (max-width: 900px) {\\n .table__header-text--between {\\n flex-wrap: wrap; } }\\n\\n.table--help td:nth-of-type(1) {\\n min-width: 130px; }\\n\\n.table--help td:nth-of-type(2) {\\n max-width: 20vw;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap; }\\n\\n.table--transactions td:nth-of-type(3) a,\\n.table--transactions td:nth-of-type(3) button {\\n max-width: 10rem;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n vertical-align: bottom;\\n display: inline-block; }\\n\\n.table--rewards td:nth-of-type(1) {\\n width: 40%; }\\n\\n.table--rewards td:nth-of-type(2) {\\n width: 17.5%; }\\n\\n.table--rewards td:nth-of-type(3) {\\n width: 17.5%; }\\n\\n.table--rewards td:nth-of-type(4) {\\n width: 25%; }\\n\\n.table--invites svg {\\n margin-bottom: -2px;\\n margin-left: var(--spacing-small); }\\n\\n.table--details, .table--file-details, .table--lbc-details {\\n font-size: var(--font-small); }\\n\\n.table--file-details td:nth-of-type(1) {\\n width: 25%; }\\n\\n.table--file-details td:nth-of-type(2) {\\n width: 75%;\\n text-align: right; }\\n\\n.table--lbc-details td:nth-of-type(2) {\\n text-align: right; }\\n\\n.table__item--actionable {\\n vertical-align: middle;\\n white-space: nowrap; }\\n\\n.table__item--actionable .button {\\n height: 1.5rem;\\n padding: var(--spacing-s);\\n margin-left: var(--spacing-m); }\\n\\n.tabs {\\n position: relative; }\\n\\n.tabs__list {\\n display: flex;\\n align-items: center;\\n background-color: var(--color-tabs-background);\\n padding: var(--spacing-medium) var(--spacing-main-padding); }\\n\\n.tabs__list > *:not(.tab) {\\n margin-left: auto; }\\n\\n.tabs__list--channel-page {\\n padding-left: calc(var(--channel-thumbnail-width) + var(--spacing-large));\\n padding-right: var(--spacing-medium);\\n margin-bottom: var(--spacing-large);\\n height: 4rem;\\n border-bottom-left-radius: var(--card-radius);\\n border-bottom-right-radius: var(--card-radius); }\\n\\n@media (max-width: 900px) {\\n .tabs__list--channel-page {\\n padding-left: var(--spacing-medium); } }\\n\\n.tab {\\n margin-right: var(--spacing-large);\\n padding: 5px 0;\\n color: var(--color-tab-text);\\n position: relative;\\n font-size: var(--font-body); }\\n\\n.tab::after {\\n position: absolute;\\n bottom: calc(var(--tab-indicator-size) * -2);\\n height: 0;\\n width: 100%;\\n content: ''; }\\n\\n.tab:focus {\\n box-shadow: none; }\\n\\n.tab__divider {\\n position: absolute;\\n margin-top: calc(var(--tab-indicator-size) * -1 - var(--spacing-large)); }\\n\\n.tab::after,\\n.tab__divider {\\n display: block;\\n transition: all var(--animation-duration) var(--animation-style); }\\n\\n.tab:hover::after,\\n.tab__divider {\\n height: var(--tab-indicator-size);\\n background-color: var(--color-tab-divider); }\\n\\n.tags, .tags--remove, .tags--vertical, .tags--selected {\\n display: flex;\\n flex-wrap: wrap;\\n min-width: 0; }\\n\\n.tags .tag, .tags--remove .tag, .tags--vertical .tag, .tags--selected .tag {\\n margin-left: 0;\\n margin-bottom: var(--spacing-small);\\n margin-right: var(--spacing-small); }\\n\\n.tags--remove {\\n margin-bottom: var(--spacing-medium); }\\n\\n.tags--remove .tag {\\n margin-top: 0;\\n margin-bottom: var(--spacing-small); }\\n\\n.tags--vertical {\\n flex-direction: column;\\n align-items: flex-start; }\\n\\n.tags--vertical li:last-child .tag {\\n margin-bottom: 0; }\\n\\n.tags--selected {\\n margin: var(--spacing-large) 0; }\\n\\n.tags__input-wrapper .tag__input {\\n height: var(--tag-height);\\n padding: calc(var(--spacing-miniscule) + 1px) var(--spacing-small);\\n background-color: var(--color-input-bg);\\n margin-bottom: var(--spacing-medium); }\\n\\n.tag--remove, .tags__input-wrapper .tag__input {\\n max-width: 20rem; }\\n\\n.tag--disabled {\\n opacity: 0.3; }\\n\\n.tag--large {\\n height: var(--height-input);\\n padding: 0 var(--spacing-s); }\\n\\n.wunderbar, .wunderbar--inline {\\n flex: 1;\\n cursor: text;\\n display: flex;\\n align-items: center;\\n position: relative;\\n z-index: 1;\\n font-size: var(--font-small);\\n height: var(--height-input); }\\n\\n.wunderbar > .icon, .wunderbar--inline > .icon {\\n top: 0;\\n left: var(--spacing-small);\\n height: 100%;\\n position: absolute;\\n z-index: 1;\\n stroke: var(--color-input-placeholder); }\\n\\n.wunderbar--inline {\\n flex: 0;\\n margin-right: 0; }\\n\\n.wunderbar--inline fieldset-section, .wunderbar--inline .fieldset-section {\\n width: 15rem; }\\n\\n@media (max-width: 900px) {\\n .wunderbar--inline {\\n display: none; } }\\n\\n.wunderbar__active-suggestion {\\n color: var(--color-search-suggestion);\\n background-color: var(--color-search-suggestion-background); }\\n\\n.wunderbar__input {\\n width: 100%;\\n align-items: center;\\n min-width: 0;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n height: var(--height-input);\\n border-radius: var(--height-input);\\n background-color: var(--color-input-bg);\\n color: var(--color-input);\\n border: none;\\n padding-right: var(--spacing-small);\\n padding-left: 2.5rem;\\n transition: all 0.2s; }\\n\\n.wunderbar__input:focus {\\n border-radius: var(--border-radius); }\\n\\n.wunderbar__menu {\\n min-width: 100%;\\n overflow: hidden;\\n background-color: var(--color-input-bg);\\n margin-top: -4px; }\\n\\n.wunderbar__suggestion {\\n align-items: center;\\n cursor: pointer;\\n display: flex;\\n flex-direction: row;\\n justify-items: flex-start;\\n padding: var(--spacing-small) var(--spacing-small); }\\n\\n.wunderbar__suggestion:not(:first-of-type) {\\n border-top: 1px solid transparent; }\\n\\n.wunderbar__suggestion .icon {\\n flex-shrink: 0; }\\n\\n.wunderbar__suggestion-label {\\n overflow: hidden;\\n padding-left: var(--spacing-small);\\n text-overflow: ellipsis;\\n white-space: nowrap; }\\n\\n.wunderbar__suggestion-label--action {\\n margin-left: var(--spacing-medium);\\n opacity: 0.6;\\n white-space: nowrap; }\\n\\n.yrbl__wrap {\\n align-items: center;\\n display: flex;\\n justify-content: center;\\n vertical-align: middle;\\n text-align: left; }\\n\\n.yrbl {\\n height: 20rem;\\n margin-right: calc(var(--spacing-xlarge) * 2); }\\n\\n@media (max-width: 900px) {\\n .yrbl {\\n display: none; } }\\n\\n.yrbl__content {\\n max-width: 500px; }\\n\\n.yrbl--first-run {\\n align-self: center;\\n height: 250px;\\n width: auto;\\n margin: 0 var(--spacing-large); }\\n\\n.yrbl--search {\\n justify-content: flex-start;\\n margin: 0; }\\n\\n.yrbl--search .yrbl {\\n height: 18rem; }\\n\\n.yrbl--enhanced {\\n position: absolute;\\n z-index: 9999;\\n height: 95vh;\\n width: 95vh;\\n left: 0;\\n right: 0;\\n opacity: 0.5;\\n animation-name: enhancedAnimation;\\n animation-duration: 2s;\\n animation-iteration-count: infinite;\\n animation-direction: alternate;\\n animation-timing-function: ease-out; }\\n\\n@-webkit-keyframes enhancedAnimation {\\n from {\\n left: 0;\\n transform: rotate(0deg); }\\n to {\\n left: 50vw;\\n transform: rotate(360deg); } }\\n\", \"\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vdWkvc2Nzcy9hbGwuc2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9zY3NzL2FsbC5zY3NzPzY4NzIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gSW1wb3J0c1xudmFyIHVybEVzY2FwZSA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvdXJsLWVzY2FwZS5qc1wiKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9fXzBfX18gPSB1cmxFc2NhcGUocmVxdWlyZShcIi4uLy4uL3N0YXRpYy9pbWcvYnVzeS5naWZcIikpO1xuXG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIjpyb290IHtcXG4gIC0tY29sb3ItcHJpbWFyeTogIzI1Nzc2MTtcXG4gIC0tY29sb3ItcHJpbWFyeS1hbHQ6ICNlNGY0ZWY7XFxuICAtLWNvbG9yLXByaW1hcnktYWx0LTI6ICM0Yjg1NzY7XFxuICAtLWNvbG9yLXNlY29uZGFyeTogIzI5NTI4NDtcXG4gIC0tY29sb3Itc2Vjb25kYXJ5LWFsdDogI2Q5ZWFmZjtcXG4gIC0tY29sb3ItdGVydGlhcnk6ICM1NTI0NzA7XFxuICAtLWNvbG9yLXRlcnRpYXJ5LWFsdDogI2Y3ZThmZjtcXG4gIC0tY29sb3ItZGFuZ2VyOiAjOWIyMDIzO1xcbiAgLS1jb2xvci1kYW5nZXItYWx0OiAjZmNjZGNlO1xcbiAgLS1jb2xvci13YXJuaW5nOiAjZmZmNThjO1xcbiAgLS1jb2xvci1jb3N0OiAjZjRlODY2O1xcbiAgLS1jb2xvci1mb2N1czogIzkzY2ZmMjtcXG4gIC0tY29sb3ItYm9yZGVyOiAjZGRkO1xcbiAgLS1jb2xvci1ibGFjazogIzExMTtcXG4gIC0tY29sb3Itd2hpdGU6ICNmZGZkZmQ7XFxuICAtLWNvbG9yLXdoaXRlLWFsdDogI2ZhZmFmYTtcXG4gIC0tY29sb3ItZ3JheS0xOiAjZWZmMWY0O1xcbiAgLS1jb2xvci1ncmF5LTI6ICNkOGRkZTE7XFxuICAtLWNvbG9yLWdyYXktMzogI2NlZDRkYTtcXG4gIC0tY29sb3ItZ3JheS00OiAjYWJiMWI3O1xcbiAgLS1jb2xvci1ncmF5LTU6ICM2NjZhNmQ7XFxuICAtLWNvbG9yLXRleHQ6IHZhcigtLWNvbG9yLWJsYWNrKTtcXG4gIC0tY29sb3ItdGV4dC1zdWJ0aXRsZTogdmFyKC0tY29sb3ItZ3JheS01KTtcXG4gIC0tY29sb3ItdGV4dC1pbnZlcnNlOiAjZmRmZGZkO1xcbiAgLS1jb2xvci1idXR0b24tcHJpbWFyeS1iZzogdmFyKC0tY29sb3ItcHJpbWFyeSk7XFxuICAtLWNvbG9yLWJ1dHRvbi1wcmltYXJ5LXRleHQ6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0KTtcXG4gIC0tY29sb3ItYnV0dG9uLXByaW1hcnktYmctaG92ZXI6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0LTIpO1xcbiAgLS1jb2xvci1idXR0b24tcHJpbWFyeS1ob3Zlci10ZXh0OiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7XFxuICAtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktYmc6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hbHQpO1xcbiAgLS1jb2xvci1idXR0b24tc2Vjb25kYXJ5LXRleHQ6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktYmctaG92ZXI6IHZhcigtLWNvbG9yLWdyYXktMyk7XFxuICAtLWNvbG9yLWJ1dHRvbi1hbHQtYmc6IHZhcigtLWNvbG9yLWdyYXktMSk7XFxuICAtLWNvbG9yLWJ1dHRvbi1hbHQtdGV4dDogdmFyKC0tY29sb3ItdGV4dCk7XFxuICAtLWNvbG9yLWJ1dHRvbi1hbHQtYmctaG92ZXI6IHZhcigtLWNvbG9yLWdyYXktMik7XFxuICAtLWNvbG9yLWxpbms6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci1saW5rLWhvdmVyOiB2YXIoLS1jb2xvci1ibGFjayk7XFxuICAtLWNvbG9yLWlucHV0LWNvbG9yOiAjMTExMTExO1xcbiAgLS1jb2xvci1pbnB1dC1sYWJlbDogdmFyKC0tY29sb3ItZ3JheS01KTtcXG4gIC0tY29sb3ItaW5wdXQtcGxhY2Vob2xkZXI6ICMyMTI1Mjk7XFxuICAtLWNvbG9yLWlucHV0LWJnOiAjZjJmMmYyO1xcbiAgLS1jb2xvci1pbnB1dC1iZy1jb3B5YWJsZTogIzQzNGI1MztcXG4gIC0tY29sb3ItaW5wdXQtYm9yZGVyOiB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgLS1jb2xvci1pbnB1dC1ib3JkZXItYWN0aXZlOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xcbiAgLS1jb2xvci1pbnB1dC10b2dnbGU6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAtLWNvbG9yLWlucHV0LXRvZ2dsZS1iZzogdmFyKC0tY29sb3ItZ3JheS0xKTtcXG4gIC0tY29sb3ItaW5wdXQtdG9nZ2xlLWJnLWhvdmVyOiB2YXIoLS1jb2xvci1zZWNvbmRhcnktYWx0KTtcXG4gIC0tY29sb3ItdGFibGUtaGlnaGxpZ2h0OiB2YXIoLS1jb2xvci13aGl0ZS1hbHQpO1xcbiAgLS1jb2xvci10YWc6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci10YWctYmc6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0KTtcXG4gIC0tY29sb3ItdGFnLWhvdmVyOiB2YXIoLS1jb2xvci13aGl0ZSk7XFxuICAtLWNvbG9yLXRhZy1iZy1ob3ZlcjogdmFyKC0tY29sb3ItcHJpbWFyeS1hbHQtMik7IH1cXG5cXG46cm9vdCB7XFxuICAtLWJvcmRlci1yYWRpdXM6IDVweDtcXG4gIC0taGVpZ2h0LWlucHV0OiAyLjVyZW07XFxuICAtLWhlaWdodC1idXR0b246IDIuNXJlbTtcXG4gIC0taGVpZ2h0LWNoZWNrYm94OiAyNHB4O1xcbiAgLS1oZWlnaHQtcmFkaW86IDI0cHg7XFxuICAtLWhlaWdodC1iYWRnZTogMjRweDtcXG4gIC0tc3BhY2luZy14eHM6IDAuMnJlbTtcXG4gIC0tc3BhY2luZy14czogMC40cmVtO1xcbiAgLS1zcGFjaW5nLXM6IDAuOHJlbTtcXG4gIC0tc3BhY2luZy1tOiAxLjZyZW07XFxuICAtLXNwYWNpbmctbDogMi40cmVtO1xcbiAgLS1zcGFjaW5nLXhsOiAzLjJyZW07XFxuICAtLXNwYWNpbmcteHhsOiA2LjRyZW07XFxuICAtLWFzcGVjdC1yYXRpby1ibHVyYXk6IDQxLjY2NjY2NjY2NjclO1xcbiAgLS1hc3BlY3QtcmF0aW8tcGFuYXZpc2lvbjogMzYuMzYzNjM2MzYzNiU7XFxuICAtLWFzcGVjdC1yYXRpby1zZDogNzUlO1xcbiAgLS1hc3BlY3QtcmF0aW8tc3RhbmRhcmQ6IDU2LjI1JTtcXG4gIC0tZm9udC1tb25vOiBcXFwiRmlyYSBDb2RlXFxcIjtcXG4gIC0tZm9udC1zYW5zOiBJbnRlcjtcXG4gIC0tZm9udC1zZXJpZjogR2VvcmdpYTtcXG4gIC0tZm9udC13ZWlnaHQtYmFzZTogNDAwO1xcbiAgLS1mb250LXdlaWdodC1saWdodDogMzAwO1xcbiAgLS1mb250LXdlaWdodC1ib2xkOiA3MDA7XFxuICAtLWZvbnQtYmFzZTogMTRweDtcXG4gIC0tZm9udC1ib2R5OiAxcmVtO1xcbiAgLS1mb250LXhzbWFsbDogMC43MzQ0cmVtO1xcbiAgLS1mb250LXNtYWxsOiAwLjg1NzFyZW07XFxuICAtLWZvbnQtbGFyZ2U6IDEuM3JlbTtcXG4gIC0tZm9udC10aXRsZTogMS43MXJlbTtcXG4gIC0tZm9udC1oZWFkaW5nOiAyLjk0cmVtOyB9XFxuXFxuaHRtbCB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgfVxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBpbmhlcml0O1xcbiAgb3V0bGluZTogMDsgfVxcblxcbltkaXNhYmxlZF0ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICByZXNpemU6IG5vbmU7IH1cXG5cXG5bcmVhZG9ubHldIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cXG5cXG5bZm9yXSxcXG5bcm9sZT1cXFwiYnV0dG9uXFxcIl0sXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdLFxcblt0eXBlPVxcXCJjaGVja2JveFxcXCJdLFxcblt0eXBlPVxcXCJmaWxlXFxcIl0sXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuW3R5cGU9XFxcInNlbGVjdFxcXCJdLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7IH1cXG5cXG5hLFxcbmFyZWEsXFxuYnV0dG9uLFxcbltyb2xlPVxcXCJidXR0b25cXFwiXSxcXG5pbnB1dCxcXG5sYWJlbCxcXG5zZWxlY3QsXFxuc3VtbWFyeSxcXG50ZXh0YXJlYSB7XFxuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsgfVxcblxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3QsXFxudGV4dGFyZWEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogaW5oZXJpdDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfVxcblxcbmJ1dHRvbjpkaXNhYmxlZCxcXG4gIGlucHV0OmRpc2FibGVkLFxcbiAgc2VsZWN0OmRpc2FibGVkLFxcbiAgdGV4dGFyZWE6ZGlzYWJsZWQge1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7IH1cXG5cXG5oMSxcXG5oMixcXG5oMyxcXG5oNCxcXG5oNSxcXG5oNiB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZm9udC1zaXplOiAxZW07IH1cXG5cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7IH1cXG5cXG5vbCA+IGxpLFxcbiAgdWwgPiBsaSB7XFxuICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTsgfVxcblxcbnRhYmxlIHtcXG4gIGJvcmRlci1zcGFjaW5nOiAwOyB9XFxuXFxuZGQge1xcbiAgd2lkdGg6IDgwJTtcXG4gIGZsb2F0OiBsZWZ0OyB9XFxuXFxuZGwge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy14OiBzY3JvbGw7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47IH1cXG5cXG5kdCB7XFxuICB3aWR0aDogMjAlO1xcbiAgZmxvYXQ6IGxlZnQ7IH1cXG5cXG5pbWcge1xcbiAgd2lkdGg6IGF1dG87XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxcblxcbmEge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH1cXG5cXG5idXR0b246bm90KDpkaXNhYmxlZCkge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cXG5cXG5idXR0b246ZGlzYWJsZWQge1xcbiAgICBvcGFjaXR5OiAwLjM7IH1cXG5cXG5ociB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xKTsgfVxcblxcbmlucHV0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IGluaGVyaXQ7IH1cXG5cXG5pbnB1dDo6cGxhY2Vob2xkZXIge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgb3BhY2l0eTogMC4yOyB9XFxuXFxuaW5wdXQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24ge1xcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1cXG5cXG5zZWxlY3Qge1xcbiAgb3V0bGluZTogbm9uZTsgfVxcblxcbnRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogdmFyKC0tc3BhY2luZy14eGwpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkOyB9XFxuXFxudGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIHtcXG4gICAgcmVzaXplOiB2ZXJ0aWNhbDsgfVxcblxcbkBtZWRpYSBwcmludCB7XFxuICBwcmUsXFxuICBibG9ja3F1b3RlIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS01KSAhaW1wb3J0YW50O1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQgIWltcG9ydGFudDsgfVxcbiAgdHIsXFxuICBpbWcge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQgIWltcG9ydGFudDsgfVxcbiAgaW1nIHtcXG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cXG4gIEBwYWdlIHtcXG4gICAgbWFyZ2luOiAwLjVjbSAhaW1wb3J0YW50OyB9XFxuICBwLFxcbiAgaDIsXFxuICBoMyB7XFxuICAgIG9ycGhhbnM6IDMgIWltcG9ydGFudDtcXG4gICAgd2lkb3dzOiAzICFpbXBvcnRhbnQ7IH1cXG4gIGgyLFxcbiAgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZCAhaW1wb3J0YW50OyB9XFxuICB0aGVhZCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XFxuICAqIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICBjb2xvcjogdmFyKC0tbGJyeS1ibGFjaykgIWltcG9ydGFudDtcXG4gICAgZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7IH1cXG4gIHAgYVtocmVmXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIoaHJlZikgXFxcIilcXFwiICFpbXBvcnRhbnQ7IH1cXG4gIHAgYVtocmVmXj1cXFwiamF2YXNjcmlwdDpcXFwiXTo6YWZ0ZXIsIHAgYVtocmVmXj1cXFwiI1xcXCJdOjphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiICFpbXBvcnRhbnQ7IH1cXG4gIHAgYWJiclt0aXRsZV06OmFmdGVyIHtcXG4gICAgY29udGVudDogXFxcIiAoXFxcIiBhdHRyKHRpdGxlKSBcXFwiKVxcXCIgIWltcG9ydGFudDsgfVxcbiAgcCBhLFxcbiAgcCBhYmJyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgIWltcG9ydGFudDtcXG4gICAgd29yZC13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IH0gfVxcblxcbkBrZXlmcmFtZXMgbG9hZGluZy1hbmltYXRpb24ge1xcbiAgMCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNTAwcHggMDsgfVxcbiAgMTAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwMHB4IDA7IH0gfVxcblxcbkBrZXlmcmFtZXMgcHVsc2Uge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAxOyB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAwLjc7IH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxOyB9IH1cXG5cXG4uYmFkZ2UsIC5iYWRnZS0tdGFnLCAudGFnLCAuYmFkZ2UtLXRhZy1tYXR1cmUsIC50YWctLW1hdHVyZSwgLmJhZGdlLS1jb3N0LCAuYmFkZ2UtLWZyZWUsIC5iYWRnZS0tYWxlcnQge1xcbiAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtYmFkZ2UpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy14cyk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuLmJhZGdlLS10YWcsIC50YWcge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItdGFnLWJnKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10YWcpOyB9XFxuXFxuLmJhZGdlLS10YWc6aG92ZXIsIC50YWc6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci10YWctYmctaG92ZXIpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGFnLWhvdmVyKTsgfVxcblxcbi5iYWRnZS0tdGFnLW1hdHVyZSwgLnRhZy0tbWF0dXJlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXRlcnRpYXJ5LWFsdCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGVydGlhcnkpOyB9XFxuXFxuLmJhZGdlLS1jb3N0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWNvc3QpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcXG4gIGxpbmUtaGVpZ2h0OiAxOyB9XFxuXFxuLmJhZGdlLS1mcmVlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hbHQpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7IH1cXG5cXG4uYmFkZ2UtLWFsZXJ0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlci1hbHQpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7IH1cXG5cXG4uYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7IH1cXG5cXG4uYnV0dG9uOmRpc2FibGVkIHtcXG4gICAgb3BhY2l0eTogMC41OyB9XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeSxcXG4uYnV0dG9uLS1zZWNvbmRhcnksXFxuLmJ1dHRvbi0tYWx0LFxcbi5idXR0b24tLWxpbmssXFxuLmJ1dHRvbi0tdXJpLWluZGljYXRvcixcXG4ubWFya2Rvd24tcHJldmlldyBhLFxcbi50YWIge1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IH1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LFxcbi5idXR0b24tLXNlY29uZGFyeSxcXG4uYnV0dG9uLS1hbHQge1xcbiAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtYnV0dG9uKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zKSB2YXIoLS1zcGFjaW5nLW0pO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTsgfVxcblxcbi5idXR0b24tLWFsdCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXMpIHZhcigtLXNwYWNpbmctcyk7IH1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJ1dHRvbi1wcmltYXJ5LWJnKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1idXR0b24tcHJpbWFyeS10ZXh0KTsgfVxcblxcbi5idXR0b24tLXByaW1hcnk6aG92ZXIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXByaW1hcnktaG92ZXItdGV4dCk7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJ1dHRvbi1wcmltYXJ5LWJnLWhvdmVyKTsgfVxcblxcbi5idXR0b24tLXNlY29uZGFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1idXR0b24tc2Vjb25kYXJ5LWJnKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1idXR0b24tc2Vjb25kYXJ5LXRleHQpOyB9XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXNlY29uZGFyeS1iZy1ob3Zlcik7IH1cXG5cXG4uYnV0dG9uLS1hbHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLWFsdC1iZyk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLWFsdC10ZXh0KTsgfVxcblxcbi5idXR0b24tLWFsdDpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJ1dHRvbi1hbHQtYmctaG92ZXIpOyB9XFxuXFxuLmJ1dHRvbi0taWNvbiwgLmZpbGUtcmVuZGVyIC52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbiwgLmZpbGUtcmVuZGVyX19lbWJlZCAudmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgd2lkdGg6IDVyZW07XFxuICBoZWlnaHQ6IDVyZW07XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiA1MCU7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTsgfVxcblxcbi5idXR0b24tLWljb246aG92ZXIsIC5maWxlLXJlbmRlciAudmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b246aG92ZXIsIC5maWxlLXJlbmRlcl9fZW1iZWQgLnZpZGVvLWpzIC52anMtYmlnLXBsYXktYnV0dG9uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXByaW1hcnktYmctaG92ZXIpOyB9XFxuXFxuLmJ1dHRvbi0taWNvbi5idXR0b24tLXBsYXksIC5maWxlLXJlbmRlciAudmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b24sIC5maWxlLXJlbmRlcl9fZW1iZWQgLnZpZGVvLWpzIC52anMtYmlnLXBsYXktYnV0dG9uIHtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZpZXdCb3g9JzAgMCAyNCAyNCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayclM0UgJTNDZyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzInIGZpbGw9J3doaXRlJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFICUzQ3BvbHlnb24gcG9pbnRzPSc1IDIxIDUgMyAyMSAxMicvJTNFICUzQy9nJTNFICUzQy9zdmclM0VcXFwiKTtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYyg1MCUgKyAwLjFyZW0pIGNlbnRlcjsgfVxcblxcbi5idXR0b24tLWljb24uYnV0dG9uLS12aWV3LCAuZmlsZS1yZW5kZXIgLnZpZGVvLWpzIC5idXR0b24tLXZpZXcudmpzLWJpZy1wbGF5LWJ1dHRvbiwgLmZpbGUtcmVuZGVyX19lbWJlZCAudmlkZW8tanMgLmJ1dHRvbi0tdmlldy52anMtYmlnLXBsYXktYnV0dG9uIHtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZpZXdCb3g9JzAgMCAyNCAyNCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayclM0UgJTNDZyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzInIGZpbGw9J25vbmUnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UgJTNDcGF0aCBkPSdNMiwgMTIgQzIsIDEyIDUsIDUgMTIsIDUgQzE5LCA1IDIyLCAxMiAyMiwgMTIgQzIyLCAxMiAxOSwgMTkgMTIsIDE5IEM1LCAxOSAyLCAxMiAyLCAxMiBaJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UgJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSczJy8lM0UgJTNDcGF0aCBkPSdNMTIsIDUgTDEyLCAzJyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSAlM0NwYXRoIGQ9J00xOCwgNi41IEwxOSwgNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UgJTNDcGF0aCBkPSdNMjEsIDEwIEwyMi41LCA5JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSAlM0NwYXRoIGQ9J00xLjUsIDEwIEwzLCA5JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDIuMjUwMDAwLCA5LjUwMDAwMCkgc2NhbGUoMSwgLTEpIHRyYW5zbGF0ZSgtMi4yNTAwMDAsIC05LjUwMDAwMCknLyUzRSAlM0NwYXRoIGQ9J001LCA2LjUgTDYsIDUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgdHJhbnNmb3JtPSd0cmFuc2xhdGUoNS41MDAwMDAsIDUuNzUwMDAwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC01LjUwMDAwMCwgLTUuNzUwMDAwKScvJTNFICUzQy9nJTNFICUzQy9zdmclM0VcXFwiKTtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNhbGMoNTAlICsgMC4xcmVtKTsgfVxcblxcbi5idXR0b24tLWxpbmssXFxuLmJ1dHRvbi0tdXJpLWluZGljYXRvcixcXG4ubWFya2Rvd24tcHJldmlldyBhLFxcbi50YWIge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWxpbmspO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgfVxcblxcbi5idXR0b24tLWxpbms6aG92ZXIsIC5idXR0b24tLXVyaS1pbmRpY2F0b3I6aG92ZXIsIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIsIC50YWI6aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWxpbmstaG92ZXIpOyB9XFxuXFxuaW5wdXQsXFxudGV4dGFyZWEsXFxuc2VsZWN0IHtcXG4gIGhlaWdodDogdmFyKC0taGVpZ2h0LWlucHV0KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQ7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItaW5wdXQpO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1ib3JkZXIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItaW5wdXQtYmcpO1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2luZy1zKTtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1zKTsgfVxcblxcbmlucHV0OmZvY3VzLFxcbiAgdGV4dGFyZWE6Zm9jdXMsXFxuICBzZWxlY3Q6Zm9jdXMge1xcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tY29sb3ItZm9jdXMpOyB9XFxuXFxuaW5wdXQ6OnBsYWNlaG9sZGVyLFxcbiAgdGV4dGFyZWE6OnBsYWNlaG9sZGVyLFxcbiAgc2VsZWN0OjpwbGFjZWhvbGRlciB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1wbGFjZWhvbGRlcik7XFxuICAgIG9wYWNpdHk6IDAuNDsgfVxcblxcbmlucHV0OmRpc2FibGVkLFxcbiAgdGV4dGFyZWE6ZGlzYWJsZWQsXFxuICBzZWxlY3Q6ZGlzYWJsZWQge1xcbiAgICBvcGFjaXR5OiAwLjQ7IH1cXG5cXG5pbnB1dDpkaXNhYmxlZCArIGxhYmVsLFxcbiAgICB0ZXh0YXJlYTpkaXNhYmxlZCArIGxhYmVsLFxcbiAgICBzZWxlY3Q6ZGlzYWJsZWQgKyBsYWJlbCB7XFxuICAgICAgb3BhY2l0eTogMC40OyB9XFxuXFxuaW5wdXRbdHlwZT1cXFwicmFuZ2VcXFwiXSxcXG4gIHRleHRhcmVhW3R5cGU9XFxcInJhbmdlXFxcIl0sXFxuICBzZWxlY3RbdHlwZT1cXFwicmFuZ2VcXFwiXSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgaGVpZ2h0OiAwLjVyZW07XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7IH1cXG5cXG5jaGVja2JveC1lbGVtZW50LFxcbnJhZGlvLWVsZW1lbnQsXFxuc2VsZWN0IHtcXG4gIGN1cnNvcjogcG9pbnRlcjsgfVxcblxcbnNlbGVjdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDk2IDk2JyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyUyMzIxMjUyOSclM0UlM0NwYXRoIGQ9J00xNy4xNzIsIDMxLjE3MmMxLjU2MiwgLTEuNTYyIDQuMDk1LCAtMS41NjIgNS42NTYsIDBsMjUuMTcyLCAyNS4xNzFsMjUuMTcyLCAtMjUuMTcxYzEuNTYyLCAtMS41NjIgNC4wOTUsIC0xLjU2MiA1LjY1NiwgMGMxLjU2MiwgMS41NjIgMS41NjIsIDQuMDk1IDAsIDUuNjU2bC0yOCwgMjhjLTEuNTYyLCAxLjU2MiAtNC4wOTUsIDEuNTYyIC01LjY1NiwgMGwtMjgsIC0yOGMtMC43ODEsIC0wLjc4MSAtMS4xNzIsIC0xLjgwNSAtMS4xNzIsIC0yLjgyOGMwLCAtMS4wMjMgMC4zOTEsIC0yLjA0NyAxLjE3MiwgLTIuODI4WicvJTNFJTNDL3N2ZyUzRSUwQVxcXCIpO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogOTklIGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDFyZW07XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLWwpO1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjaW5nLXMpOyB9XFxuXFxuZmllbGRzZXQtZ3JvdXAsIC5maWVsZHNldC1ncm91cCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxcblxcbmZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkIGZpZWxkc2V0LXNlY3Rpb24gKyBmaWVsZHNldC1zZWN0aW9uLCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgZmllbGRzZXQtc2VjdGlvbiArIGZpZWxkc2V0LXNlY3Rpb24sIGZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkIC5maWVsZHNldC1zZWN0aW9uICsgZmllbGRzZXQtc2VjdGlvbiwgLmZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkLmZpZWxkc2V0LWdyb3VwIC5maWVsZHNldC1zZWN0aW9uICsgZmllbGRzZXQtc2VjdGlvbiwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgZmllbGRzZXQtc2VjdGlvbiArIC5maWVsZHNldC1zZWN0aW9uLCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgZmllbGRzZXQtc2VjdGlvbiArIC5maWVsZHNldC1zZWN0aW9uLCBmaWVsZHNldC1ncm91cC5maWVsZHNldC1ncm91cC0tc211c2hlZCAuZmllbGRzZXQtc2VjdGlvbiArIC5maWVsZHNldC1zZWN0aW9uLCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgLmZpZWxkc2V0LXNlY3Rpb24gKyAuZmllbGRzZXQtc2VjdGlvbiB7XFxuICAgIG1hcmdpbi10b3A6IDA7IH1cXG5cXG5maWVsZHNldC1zZWN0aW9uLCAuZmllbGRzZXQtc2VjdGlvbixcXG5mb3JtLFxcbi5jaGVja2JveCxcXG4ucmFkaW8ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cXG5cXG5maWVsZHNldC1zZWN0aW9uICsgZmllbGRzZXQtc2VjdGlvbiwgLmZpZWxkc2V0LXNlY3Rpb24gKyBmaWVsZHNldC1zZWN0aW9uLCBmaWVsZHNldC1zZWN0aW9uICsgLmZpZWxkc2V0LXNlY3Rpb24sIC5maWVsZHNldC1zZWN0aW9uICsgLmZpZWxkc2V0LXNlY3Rpb24sXFxuICBmaWVsZHNldC1zZWN0aW9uICsgZm9ybSxcXG4gIC5maWVsZHNldC1zZWN0aW9uICsgZm9ybSxcXG4gIGZpZWxkc2V0LXNlY3Rpb24gKyAuY2hlY2tib3gsXFxuICAuZmllbGRzZXQtc2VjdGlvbiArIC5jaGVja2JveCxcXG4gIGZpZWxkc2V0LXNlY3Rpb24gKyAucmFkaW8sXFxuICAuZmllbGRzZXQtc2VjdGlvbiArIC5yYWRpbyxcXG4gIGZvcm0gKyBmaWVsZHNldC1zZWN0aW9uLFxcbiAgZm9ybSArIC5maWVsZHNldC1zZWN0aW9uLFxcbiAgZm9ybSArIGZvcm0sXFxuICBmb3JtICsgLmNoZWNrYm94LFxcbiAgZm9ybSArIC5yYWRpbyxcXG4gIC5jaGVja2JveCArIGZpZWxkc2V0LXNlY3Rpb24sXFxuICAuY2hlY2tib3ggKyAuZmllbGRzZXQtc2VjdGlvbixcXG4gIC5jaGVja2JveCArIGZvcm0sXFxuICAuY2hlY2tib3ggKyAuY2hlY2tib3gsXFxuICAuY2hlY2tib3ggKyAucmFkaW8sXFxuICAucmFkaW8gKyBmaWVsZHNldC1zZWN0aW9uLFxcbiAgLnJhZGlvICsgLmZpZWxkc2V0LXNlY3Rpb24sXFxuICAucmFkaW8gKyBmb3JtLFxcbiAgLnJhZGlvICsgLmNoZWNrYm94LFxcbiAgLnJhZGlvICsgLnJhZGlvIHtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zKTsgfVxcblxcbmZpZWxkc2V0LXNlY3Rpb246bGFzdC1jaGlsZCwgLmZpZWxkc2V0LXNlY3Rpb246bGFzdC1jaGlsZCxcXG4gIGZvcm06bGFzdC1jaGlsZCxcXG4gIC5jaGVja2JveDpsYXN0LWNoaWxkLFxcbiAgLnJhZGlvOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XFxuXFxuZmllbGRzZXQtc2VjdGlvbiBpbnB1dCwgLmZpZWxkc2V0LXNlY3Rpb24gaW5wdXQsXFxuICBmaWVsZHNldC1zZWN0aW9uIHNlbGVjdCxcXG4gIC5maWVsZHNldC1zZWN0aW9uIHNlbGVjdCxcXG4gIGZvcm0gaW5wdXQsXFxuICBmb3JtIHNlbGVjdCxcXG4gIC5jaGVja2JveCBpbnB1dCxcXG4gIC5jaGVja2JveCBzZWxlY3QsXFxuICAucmFkaW8gaW5wdXQsXFxuICAucmFkaW8gc2VsZWN0IHtcXG4gICAgd2lkdGg6IDEwMCU7IH1cXG5cXG5sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWlucHV0LWxhYmVsKTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteHhzKTsgfVxcblxcbmlucHV0LXN1Ym1pdCwgLmlucHV0LXN1Ym1pdCB7XFxuICBkaXNwbGF5OiBmbGV4OyB9XFxuXFxuaW5wdXQtc3VibWl0ID4gKjpmaXJzdC1jaGlsZCwgLmlucHV0LXN1Ym1pdCA+ICo6Zmlyc3QtY2hpbGQsXFxuICBpbnB1dC1zdWJtaXQgPiAqOm50aC1jaGlsZCgyKSxcXG4gIC5pbnB1dC1zdWJtaXQgPiAqOm50aC1jaGlsZCgyKSB7XFxuICAgIG1hcmdpbjogMDsgfVxcblxcbmlucHV0LXN1Ym1pdCA+ICo6Zmlyc3QtY2hpbGQsIC5pbnB1dC1zdWJtaXQgPiAqOmZpcnN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7IH1cXG5cXG5pbnB1dC1zdWJtaXQgPiAqOm50aC1jaGlsZCgyKSxcXG4gIC5pbnB1dC1zdWJtaXQgPiAqOm50aC1jaGlsZCgyKSB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG4uY2hlY2tib3gsXFxuLnJhZGlvIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxcblxcbi5jaGVja2JveCBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdLFxcbiAgLmNoZWNrYm94IGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuICAucmFkaW8gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSxcXG4gIC5yYWRpbyBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtY2hlY2tib3gpO1xcbiAgICB3aWR0aDogdmFyKC0taGVpZ2h0LWNoZWNrYm94KTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XFxuXFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06ZGlzYWJsZWQgKyBsYWJlbCxcXG4gICAgLmNoZWNrYm94IGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl06ZGlzYWJsZWQgKyBsYWJlbCxcXG4gICAgLnJhZGlvIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06ZGlzYWJsZWQgKyBsYWJlbCxcXG4gICAgLnJhZGlvIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl06ZGlzYWJsZWQgKyBsYWJlbCB7XFxuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XFxuXFxuLmNoZWNrYm94IGxhYmVsLFxcbiAgLnJhZGlvIGxhYmVsIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LWJhc2UpO1xcbiAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0taGVpZ2h0LWNoZWNrYm94KSArIHZhcigtLXNwYWNpbmctcykpO1xcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1oZWlnaHQtY2hlY2tib3gpOyB9XFxuXFxuLmNoZWNrYm94IGxhYmVsOjpiZWZvcmUsXFxuICAgIC5yYWRpbyBsYWJlbDo6YmVmb3JlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC10b2dnbGUtYmcpOyB9XFxuXFxuLmNoZWNrYm94IGxhYmVsOmhvdmVyOjpiZWZvcmUsXFxuICAgIC5yYWRpbyBsYWJlbDpob3Zlcjo6YmVmb3JlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC10b2dnbGUtYmctaG92ZXIpOyB9XFxuXFxuLmNoZWNrYm94IGxhYmVsOjpiZWZvcmUsXFxuICAuY2hlY2tib3ggbGFiZWw6OmFmdGVyLFxcbiAgLnJhZGlvIGxhYmVsOjpiZWZvcmUsXFxuICAucmFkaW8gbGFiZWw6OmFmdGVyIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjsgfVxcblxcbi5jaGVja2JveCBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdICsgbGFiZWw6OmFmdGVyLFxcbiAgLmNoZWNrYm94IGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gKyBsYWJlbDo6YWZ0ZXIsXFxuICAucmFkaW8gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSArIGxhYmVsOjphZnRlcixcXG4gIC5yYWRpbyBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdICsgbGFiZWw6OmFmdGVyIHtcXG4gICAgY29udGVudDogbm9uZTsgfVxcblxcbi5jaGVja2JveCBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQgKyBsYWJlbDo6YWZ0ZXIsXFxuICAuY2hlY2tib3ggaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgbGFiZWw6OmFmdGVyLFxcbiAgLnJhZGlvIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06Y2hlY2tlZCArIGxhYmVsOjphZnRlcixcXG4gIC5yYWRpbyBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdOmNoZWNrZWQgKyBsYWJlbDo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjsgfVxcblxcbi5jaGVja2JveCBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmZvY3VzICsgbGFiZWw6OmJlZm9yZSxcXG4gIC5jaGVja2JveCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdOmZvY3VzICsgbGFiZWw6OmJlZm9yZSxcXG4gIC5yYWRpbyBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmZvY3VzICsgbGFiZWw6OmJlZm9yZSxcXG4gIC5yYWRpbyBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdOmZvY3VzICsgbGFiZWw6OmJlZm9yZSB7XFxuICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1jb2xvci1mb2N1cyk7IH1cXG5cXG4uY2hlY2tib3ggbGFiZWw6OmJlZm9yZSB7XFxuICBoZWlnaHQ6IHZhcigtLWhlaWdodC1jaGVja2JveCk7XFxuICB3aWR0aDogdmFyKC0taGVpZ2h0LWNoZWNrYm94KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWlucHV0LWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcXG4gIGxlZnQ6IDBweDtcXG4gIHRvcDogLTFweDsgfVxcblxcbi5jaGVja2JveCBsYWJlbDo6YWZ0ZXIge1xcbiAgaGVpZ2h0OiA2cHg7XFxuICB3aWR0aDogMTJweDtcXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQ7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQ7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWlucHV0LXRvZ2dsZSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcbiAgbGVmdDogNnB4O1xcbiAgdG9wOiA2cHg7IH1cXG5cXG4ucmFkaW8gaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7IH1cXG5cXG4ucmFkaW8gbGFiZWw6OmJlZm9yZSB7XFxuICBoZWlnaHQ6IHZhcigtLWhlaWdodC1yYWRpbyk7XFxuICB3aWR0aDogdmFyKC0taGVpZ2h0LXJhZGlvKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWlucHV0LWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWhlaWdodC1yYWRpbykgKiAwLjUpO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAtMXB4OyB9XFxuXFxuLnJhZGlvIGxhYmVsOjphZnRlciB7XFxuICBoZWlnaHQ6IDEycHg7XFxuICB3aWR0aDogMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICBsZWZ0OiA2cHg7XFxuICB0b3A6IDVweDsgfVxcblxcbi5yYW5nZV9fbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuXFxuLnJhbmdlX19sYWJlbCA+ICoge1xcbiAgICB3aWR0aDogMzMlO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cXG5cXG4ucmFuZ2VfX2xhYmVsID4gKjpmaXJzdC1vZi10eXBlIHtcXG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9XFxuXFxuLnJhbmdlX19sYWJlbCA+ICo6bGFzdC1vZi10eXBlIHtcXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDsgfVxcblxcbi50YWJsZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxcblxcbi50YWJsZSB0aCxcXG4gIC50YWJsZSB0ZCB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cXG5cXG4udGFibGUgdGg6Zmlyc3Qtb2YtdHlwZSxcXG4gICAgLnRhYmxlIHRkOmZpcnN0LW9mLXR5cGUge1xcbiAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1sKTsgfVxcblxcbi50YWJsZSB0aDpsYXN0LW9mLXR5cGUsXFxuICAgIC50YWJsZSB0ZDpsYXN0LW9mLXR5cGUge1xcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNpbmctbCk7IH1cXG5cXG4udGFibGUgdGhlYWQge1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxcblxcbi50YWJsZSB0aGVhZCB0aCB7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG4udGFibGUgdHI6bm90KDpsYXN0LW9mLXR5cGUpIHRkIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG4udGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXRhYmxlLWhpZ2hsaWdodCk7IH1cXG5cXG4udGFibGUgdGgsXFxuICAudGFibGUgdGQge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTsgfVxcblxcbnRoIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cXG5cXG4udGFibGUtLWZpeGVkIHtcXG4gIHRhYmxlLWxheW91dDogZml4ZWQ7IH1cXG5cXG4udGFibGUtLWNvbmRlbnNlZCB0ZCxcXG4udGFibGUtLWNvbmRlbnNlZCB0aCB7XFxuICBwYWRkaW5nOiAwLjVyZW07IH1cXG5cXG4udGFibGUtLWNvbmRlbnNlZCB0ZDpmaXJzdC1vZi10eXBlLFxcbiAgLnRhYmxlLS1jb25kZW5zZWQgdGg6Zmlyc3Qtb2YtdHlwZSB7XFxuICAgIHBhZGRpbmctbGVmdDogMDsgfVxcblxcbi50YWJsZS0tY29uZGVuc2VkIHRkOmxhc3Qtb2YtdHlwZSxcXG4gIC50YWJsZS0tY29uZGVuc2VkIHRoOmxhc3Qtb2YtdHlwZSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cXG5cXG4udGFibGUtLWNvbmRlbnNlZCB0cjpudGgtY2hpbGQoMm4pIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XFxuXFxuLnRhYmxlX19pdGVtLWxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1tdWx0aXBsaWVyLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0aXRsZSk7IH1cXG5cXG4udGFibGVfX2l0ZW0tLWFsaWduLXJpZ2h0IHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XFxuXFxuLnNlY3Rpb24ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sKTsgfVxcblxcbi5zZWN0aW9uX19hY3Rpb25zLCAuY2hhbm5lbF9fcXVpY2stYWN0aW9ucywgLnNlY3Rpb25fX2FjdGlvbnMtLWNlbnRlcmVkIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLnNlY3Rpb25fX2FjdGlvbnM6b25seS1jaGlsZCwgLmNoYW5uZWxfX3F1aWNrLWFjdGlvbnM6b25seS1jaGlsZCwgLnNlY3Rpb25fX2FjdGlvbnMtLWNlbnRlcmVkOm9ubHktY2hpbGQge1xcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXhzKTsgfVxcblxcbi5zZWN0aW9uX19hY3Rpb25zID4gKjpub3QoOmxhc3QtY2hpbGQpLCAuY2hhbm5lbF9fcXVpY2stYWN0aW9ucyA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLnNlY3Rpb25fX2FjdGlvbnMtLWNlbnRlcmVkID4gKjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uc2VjdGlvbl9fc3VidGl0bGUsIC5zZWN0aW9uX19zdWJ0aXRsZS0tc3RhdHVzIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1zbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1ib2R5KTsgfVxcblxcbmRyYXdlci1uYXZpZ2F0aW9uIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA1cmVtO1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMDsgfVxcblxcbmRyYXdlci1uYXZpZ2F0aW9uLWhlbHBlciB7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIHRvcDogM3JlbTtcXG4gIGxlZnQ6IC01cmVtO1xcbiAgYm9yZGVyLXJpZ2h0OiA4cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiA4cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcG9zaXRpb246IGFic29sdXRlOyB9XFxuXFxuZHJhd2VyLXNlY3Rpb24ge1xcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMXJlbTsgfVxcblxcbmRyYXdlci1zZWN0aW9uOm5vdCg6aG92ZXIpOm5vdCguYWN0aXZlKSBkcmF3ZXItdGl0bGU6OmFmdGVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cXG5cXG5kcmF3ZXItc2VjdGlvbjpub3QoOmhvdmVyKTpub3QoLmFjdGl2ZSkgZHJhd2VyLW5hdmlnYXRpb24taGVscGVyLFxcbiAgZHJhd2VyLXNlY3Rpb246bm90KDpob3Zlcik6bm90KC5hY3RpdmUpIGRyYXdlci13cmFwIHtcXG4gICAgZGlzcGxheTogbm9uZTsgfVxcblxcbmRyYXdlci1zZWN0aW9uOmhvdmVyLCBkcmF3ZXItc2VjdGlvbi5hY3RpdmUge1xcbiAgICB6LWluZGV4OiAzOyB9XFxuXFxuZHJhd2VyLXNlY3Rpb246aG92ZXIgZHJhd2VyLXRpdGxlOjphZnRlciwgZHJhd2VyLXNlY3Rpb24uYWN0aXZlIGRyYXdlci10aXRsZTo6YWZ0ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpOyB9XFxuXFxuZHJhd2VyLXRpdGxlIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgbGluZS1oZWlnaHQ6IDM7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxOyB9XFxuXFxuZHJhd2VyLXRpdGxlOjphZnRlciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDFweDtcXG4gICAgYm90dG9tOiAtMXB4O1xcbiAgICBsZWZ0OiAwO1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB6LWluZGV4OiAxOyB9XFxuXFxuZHJhd2VyLXdyYXAge1xcbiAgd2lkdGg6IDEwMCU7XFxuICB0b3A6IDVyZW07XFxuICBsZWZ0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itd2hpdGUpO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktMSk7XFxuICBwYWRkaW5nLXRvcDogMnJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAycmVtO1xcbiAgcG9zaXRpb246IGFic29sdXRlOyB9XFxuXFxuZHJhd2VyLXdyYXA6OmFmdGVyIHtcXG4gICAgd2lkdGg6IDEwMHZ3O1xcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA1cmVtKTtcXG4gICAgdG9wOiA1cmVtO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibGFjayk7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBvcGFjaXR5OiAwLjM7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHotaW5kZXg6IC0xOyB9XFxuXFxuZHJhd2VyLWNoaWxkcmVuIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cXG5kcmF3ZXItY2hpbGQge1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zKTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7IH1cXG5cXG5kcmF3ZXItY2hpbGQ6bm90KDpob3Zlcikge1xcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OyB9XFxuXFxuZHJhd2VyLWNoaWxkOmhvdmVyIHtcXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEpO1xcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbSk7IH1cXG5cXG5kcmF3ZXItY2hpbGQ6aG92ZXIgPiBhIHtcXG4gICAgICBjb2xvcjogdmFyKC0tbGJyeS1wcmltYXJ5KTsgfVxcblxcbmRyYXdlci1jaGlsZDpub3QoW2Z1bGwtd2lkdGhdKSB7XFxuICAgIHdpZHRoOiA1MCU7IH1cXG5cXG5kcmF3ZXItY2hpbGRbZnVsbC13aWR0aF0ge1xcbiAgICB3aWR0aDogMTAwJTsgfVxcblxcbmRyYXdlci1jaGlsZCBzcGFuIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW07XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtOyB9XFxuXFxuYm9keSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYmFzZSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYmFzZSk7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOyB9XFxuXFxuaHIge1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIpOyB9XFxuXFxuOnJvb3Qge1xcbiAgLS1jb2xvci1saW5rLWljb246IHZhcigtLWNvbG9yLWdyYXktNCk7XFxuICAtLWNvbG9yLWxpbmstYWN0aXZlOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcXG4gIC0tY29sb3ItbmF2aWdhdGlvbi1saW5rOiB2YXIoLS1jb2xvci1ncmF5LTUpO1xcbiAgLS1jb2xvci1oZWFkZXItYnV0dG9uOiAjZjdmN2Y3O1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kOiAjZjdmN2Y3O1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLS1zcGxhc2g6ICMyMTI1Mjk7XFxuICAtLWNvbG9yLWJvcmRlcjogI2VkZWRlZDtcXG4gIC0tY29sb3ItYmFja2dyb3VuZC1vdmVybGF5OiAjMjEyNTI5ODA7XFxuICAtLWNvbG9yLW5hZzogI2YyNjUyMjtcXG4gIC0tY29sb3ItZXJyb3I6ICNmY2FmY2E7XFxuICAtLWNvbG9yLWNvbW1lbnQtbWVudTogI2UwZTBlMDtcXG4gIC0tY29sb3ItY29tbWVudC1tZW51LWhvdmVyaW5nOiAjNmE2YTZhO1xcbiAgLS1jb2xvci1ub3RpY2U6ICNmZWYzY2E7XFxuICAtLWNvbG9yLWZvbGxvdy1iZzogI2ZmZDRkYTtcXG4gIC0tY29sb3ItZm9sbG93LWljb246ICNlMjQ5NWU7XFxuICAtLWNvbG9yLXZpZXctYmc6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hbHQpO1xcbiAgLS1jb2xvci12aWV3LWljb246IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAtLWNvbG9yLXRleHQtc2VsZWN0aW9uLWJnOiB2YXIoLS1jb2xvci1zZWNvbmRhcnktYWx0KTtcXG4gIC0tY29sb3ItdGV4dC1zZWxlY3Rpb246IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAtLWNvbG9yLXRleHQtZXJyb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XFxuICAtLWNvbG9yLXRleHQtZW1wdHk6ICM5OTk5OTk7XFxuICAtLWNvbG9yLXRleHQtaGVscDogIzk5OTk5OTtcXG4gIC0tY29sb3ItdGV4dC1zdWJ0aXRsZTogIzc2NzY3NjtcXG4gIC0tY29sb3ItdGV4dC13YXJuaW5nOiAjMjEyNTI5O1xcbiAgLS1jb2xvci10ZXh0LWhlbHAtd2FybmluZzogIzk4OWIyMDtcXG4gIC0tY29sb3ItdGV4dC13YXJuaW5nLS1iYWNrZ3JvdW5kOiB2YXIoLS1sYnJ5LXllbGxvdy0xKTtcXG4gIC0tY29sb3ItYmxvY2txdW90ZTogdmFyKC0tY29sb3ItZ3JheS0zKTtcXG4gIC0tY29sb3Itc3Bpbm5lci1saWdodDogI2ZmZmZmZjtcXG4gIC0tY29sb3Itc3Bpbm5lci1kYXJrOiAjMjEyNTI5O1xcbiAgLS1jb2xvci1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kOiAjZjBmMGYwO1xcbiAgLS1jb2xvci1oZWFkZXItYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gIC0tY29sb3ItY2FyZC1iYWNrZ3JvdW5kOiAjZmZmZmZmO1xcbiAgLS1jb2xvci1jYXJkLWJhY2tncm91bmQtaGlnaGxpZ2h0ZWQ6ICNmNmZhZmY7XFxuICAtLWNvbG9yLWxpc3QtaGVhZGVyOiAjZmZmO1xcbiAgLS1jb2xvci1maWxlLXZpZXdlci1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1jYXJkLWJhY2tncm91bmQpO1xcbiAgLS1jb2xvci10YWJzLWJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0KTtcXG4gIC0tY29sb3ItdGFiLWRpdmlkZXI6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci1tb2RhbC1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1jYXJkLWJhY2tncm91bmQpO1xcbiAgLS1jb2xvci1tZW51LWJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhlYWRlci1iYWNrZ3JvdW5kKTtcXG4gIC0tY29sb3ItbWVudS1iYWNrZ3JvdW5kLS1zZWxlY3RlZDogdmFyKC0tY29sb3Itc2Vjb25kYXJ5LWFsdCk7XFxuICAtLWNvbG9yLW1lbnUtYmFja2dyb3VuZC0tYWN0aXZlOiB2YXIoLS1jb2xvci1zZWNvbmRhcnktYWx0KTtcXG4gIC0tY29sb3ItbWVudS1pY29uOiB2YXIoLS1jb2xvci1uYXZpZ2F0aW9uLWxpbmspO1xcbiAgLS1jb2xvci1tZW51LWljb24tYWN0aXZlOiB2YXIoLS1jb2xvci1uYXZpZ2F0aW9uLWxpbmspO1xcbiAgLS1jb2xvci1zZWFyY2gtc3VnZ2VzdGlvbjogIzIxMjUyOTtcXG4gIC0tY29sb3Itc2VhcmNoLXN1Z2dlc3Rpb24tYmFja2dyb3VuZDogI2NjZTZmYjtcXG4gIC0tY29sb3Itc25hY2stYmc6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci1zbmFjazogdmFyKC0tY29sb3Itd2hpdGUpO1xcbiAgLS1jb2xvci1zbmFjay1iZy1lcnJvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcXG4gIC0tY29sb3Itc25hY2stdXBncmFkZTogdmFyKC0tY29sb3ItdGVydGlhcnkpO1xcbiAgLS1jb2xvci1hZHMtYmFja2dyb3VuZDogI2ZhZTVmZjtcXG4gIC0tY29sb3ItYWRzLWxpbms6IHZhcigtLWNvbG9yLWxpbmspOyB9XFxuXFxuLyogIzJjMzIzNyAtIDUlICovXFxuXFxuLyogIzM4M2Y0NSAtIDEwJSAqL1xcblxcbi8qICM0MzRiNTM7ICAtIDE1JSAqL1xcblxcbi8qICM0ZTU4NjI7ICAtIDIwJSAqL1xcblxcbi8qICM1YTY1NzA7ICAtIDI1JSAqL1xcblxcblt0aGVtZT0nZGFyayddIHtcXG4gIC0tY29sb3ItcHJpbWFyeS1hbHQ6ICMzZTY3NWQ7XFxuICAtLWNvbG9yLXByaW1hcnk6ICM3NGRmYmY7XFxuICAtLWNvbG9yLWxpbms6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci1saW5rLWhvdmVyOiAjNjBlMWJhO1xcbiAgLS1jb2xvci1saW5rLWFjdGl2ZTogIzYwZTFiYTtcXG4gIC0tY29sb3ItbGluay1pY29uOiAjNmE3NTgwO1xcbiAgLS1jb2xvci1uYXZpZ2F0aW9uLWxpbms6ICNiM2JjYzY7XFxuICAtLWNvbG9yLWJ1dHRvbi1wcmltYXJ5LWJnOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7XFxuICAtLWNvbG9yLWJ1dHRvbi1wcmltYXJ5LWJnLWhvdmVyOiAjNDQ3OTZjO1xcbiAgLS1jb2xvci1idXR0b24tcHJpbWFyeS10ZXh0OiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcXG4gIC0tY29sb3ItYnV0dG9uLXByaW1hcnktaG92ZXItdGV4dDogdmFyKC0tY29sb3ItdGV4dCk7XFxuICAtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktYmc6ICMzOTU4Nzc7XFxuICAtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktYmctaG92ZXI6ICM0YjZkOGY7XFxuICAtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktdGV4dDogI2EzYzFlMDtcXG4gIC0tY29sb3ItYnV0dG9uLWFsdC1iZzogIzRkNTY2MDtcXG4gIC0tY29sb3ItYnV0dG9uLWFsdC1iZy1ob3ZlcjogIzNlNDY0ZDtcXG4gIC0tY29sb3ItYnV0dG9uLWFsdC10ZXh0OiAjZTJlOWYwO1xcbiAgLS1jb2xvci1oZWFkZXItYnV0dG9uOiB2YXIoLS1jb2xvci1saW5rLWljb24pO1xcbiAgLS1jb2xvci1mb2N1czogIzJkNjlhNTtcXG4gIC0tY29sb3ItYmFja2dyb3VuZC1vdmVybGF5OiAjMjEyNTI5ZDc7XFxuICAtLWNvbG9yLWJhY2tncm91bmQ6ICMyMTI1Mjk7XFxuICAtLWNvbG9yLWJhY2tncm91bmQtb3ZlcmxheTogIzIxMjUyOTgwO1xcbiAgLS1jb2xvci1ib3JkZXI6ICM0ZjViNjQ7XFxuICAtLWNvbG9yLWNhcmQtYmFja2dyb3VuZDogIzJjMzIzNztcXG4gIC0tY29sb3ItY2FyZC1iYWNrZ3JvdW5kLWhpZ2hsaWdodGVkOiAjMzg0MDQ2O1xcbiAgLS1jb2xvci1oZWFkZXItYmFja2dyb3VuZDogIzQzNGI1MztcXG4gIC0tY29sb3ItdGFiLXRleHQ6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gIC0tY29sb3ItdGFicy1iYWNrZ3JvdW5kOiAjNDM0YjUzO1xcbiAgLS1jb2xvci10YWItZGl2aWRlcjogdmFyKC0tY29sb3Itd2hpdGUpO1xcbiAgLS1jb2xvci1tb2RhbC1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1oZWFkZXItYmFja2dyb3VuZCk7XFxuICAtLWNvbG9yLWNvbW1lbnQtbWVudTogIzZhNmE2YTtcXG4gIC0tY29sb3ItY29tbWVudC1tZW51LWhvdmVyaW5nOiAjZTBlMGUwO1xcbiAgLS1jb2xvci1ub3RpY2U6ICM1ODU2M2I7XFxuICAtLWNvbG9yLWVycm9yOiAjNjEzNzNmO1xcbiAgLS1jb2xvci10ZXh0OiAjZWVlZWVlO1xcbiAgLS1jb2xvci10ZXh0LWVycm9yOiAjZjU3NDhjO1xcbiAgLS1jb2xvci10ZXh0LWhlbHAtd2FybmluZzogI2Y1ZWM3NDtcXG4gIC0tY29sb3ItdGV4dC1lbXB0eTogI2JiYmJiYjtcXG4gIC0tY29sb3ItdGV4dC1oZWxwOiAjYmJiYmJiO1xcbiAgLS1jb2xvci10ZXh0LXN1YnRpdGxlOiAjOWZhZmMwO1xcbiAgLS1jb2xvci10ZXh0LXdhcm5pbmc6ICMyMTI1Mjk7XFxuICAtLWNvbG9yLXRleHQtd2FybmluZy0tYmFja2dyb3VuZDogdmFyKC0tbGJyeS15ZWxsb3ctMSk7XFxuICAtLWNvbG9yLWJsb2NrcXVvdGU6IHZhcigtLWNvbG9yLWdyYXktNSk7XFxuICAtLWNvbG9yLWlucHV0OiAjZjRmNGY1O1xcbiAgLS1jb2xvci1pbnB1dC1sYWJlbDogI2Q0ZDRkNDtcXG4gIC0tY29sb3ItaW5wdXQtcGxhY2Vob2xkZXI6ICNmNGY0ZjU7XFxuICAtLWNvbG9yLWlucHV0LWJnOiAjNWQ2NzcyO1xcbiAgLS1jb2xvci1pbnB1dC1iZy1jb3B5YWJsZTogIzQzNGI1MztcXG4gIC0tY29sb3ItaW5wdXQtYm9yZGVyOiB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgLS1jb2xvci1pbnB1dC1ib3JkZXItYWN0aXZlOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xcbiAgLS1jb2xvci1pbnB1dC10b2dnbGU6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgLS1jb2xvci1pbnB1dC10b2dnbGUtYmc6IHZhcigtLWNvbG9yLWlucHV0LWJnKTtcXG4gIC0tY29sb3ItaW5wdXQtdG9nZ2xlLWJnLWhvdmVyOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xcbiAgLS1jb2xvci1tZW51LWJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhlYWRlci1iYWNrZ3JvdW5kKTtcXG4gIC0tY29sb3ItbWVudS1iYWNrZ3JvdW5kLS1zZWxlY3RlZDogIzg5OTM5ZTtcXG4gIC0tY29sb3ItbWVudS1iYWNrZ3JvdW5kLS1hY3RpdmU6ICM4OTkzOWU7XFxuICAtLWNvbG9yLW1lbnUtaWNvbjogI2E3YTdhNztcXG4gIC0tY29sb3ItbWVudS1pY29uLWFjdGl2ZTogI2Q2ZDZkNjtcXG4gIC0tY29sb3ItdGFibGUtaGlnaGxpZ2h0OiAjM2E0NDRlO1xcbiAgLS1jb2xvci1zZWFyY2gtc3VnZ2VzdGlvbjogIzIxMjUyOTtcXG4gIC0tY29sb3Itc2VhcmNoLXN1Z2dlc3Rpb24tYmFja2dyb3VuZDogI2NjZTZmYjtcXG4gIC0tY29sb3ItcGxhY2Vob2xkZXItYmFja2dyb3VuZDogIzRlNTg2MjtcXG4gIC0tY29sb3Itc3Bpbm5lci1saWdodDogIzVhNjU3MDtcXG4gIC0tY29sb3Itc3Bpbm5lci1kYXJrOiAjMjEyNTI5O1xcbiAgLS1jb2xvci13dW5kZXJiYXI6ICM4OTkzOWU7XFxuICAtLWNvbG9yLXRhZzogdmFyKC0tY29sb3ItcHJpbWFyeSk7XFxuICAtLWNvbG9yLXRhZy1iZzogdmFyKC0tY29sb3ItcHJpbWFyeS1hbHQpO1xcbiAgLS1jb2xvci10YWctaG92ZXI6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gIC0tY29sb3ItdGFnLWJnLWhvdmVyOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdC0yKTtcXG4gIC0tY29sb3Itc25hY2stYmc6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAtLWNvbG9yLWFkcy1iYWNrZ3JvdW5kOiAjZGNlNmU4O1xcbiAgLS1jb2xvci1hZHMtdGV4dDogIzExMTtcXG4gIC0tY29sb3ItYWRzLWxpbms6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0KTsgfVxcblxcbjpyb290IHtcXG4gIC0tcGFnZS1tYXgtd2lkdGg6IDE0MjBweDtcXG4gIC0tbWFjLXRpdGxlYmFyLWhlaWdodDogMS41cmVtO1xcbiAgLS1tb2JpbGU6IDYwMHB4O1xcbiAgLS1zaWRlLW5hdi13aWR0aDogMTcwcHg7XFxuICAtLXNwYWNpbmctbWluaXNjdWxlOiBjYWxjKDJyZW0gLyA1KTtcXG4gIC0tc3BhY2luZy14c21hbGw6IGNhbGMoMnJlbSAvIDQpO1xcbiAgLS1zcGFjaW5nLXNtYWxsOiBjYWxjKDJyZW0gLyAzKTtcXG4gIC0tc3BhY2luZy1tZWRpdW06IGNhbGMoMnJlbSAvIDIpO1xcbiAgLS1zcGFjaW5nLWxhcmdlOiAycmVtO1xcbiAgLS1zcGFjaW5nLXhsYXJnZTogM3JlbTtcXG4gIC0tc3BhY2luZy1tYWluLXBhZGRpbmc6IHZhcigtLXNwYWNpbmcteGxhcmdlKTtcXG4gIC0tZmxvYXRpbmctdmlld2VyLXdpZHRoOiAzMnJlbTtcXG4gIC0tZmxvYXRpbmctdmlld2VyLWhlaWdodDogMThyZW07XFxuICAtLWZsb2F0aW5nLXZpZXdlci1pbmZvLWhlaWdodDogNXJlbTtcXG4gIC0tZmxvYXRpbmctdmlld2VyLWNvbnRhaW5lci1oZWlnaHQ6IGNhbGModmFyKC0tZmxvYXRpbmctdmlld2VyLWhlaWdodCkgKyB2YXIoLS1mbG9hdGluZy12aWV3ZXItaW5mby1oZWlnaHQpKTtcXG4gIC0tb3B0aW9uLXNlbGVjdC13aWR0aDogOHJlbTtcXG4gIC0tdGV4dC1tYXgtd2lkdGg6IDY2MHB4O1xcbiAgLS10ZXh0LWxpbmstcGFkZGluZzogNHB4O1xcbiAgLS10YWItaW5kaWNhdG9yLXNpemU6IDAuNXJlbTtcXG4gIC0taGVhZGVyLWhlaWdodDogNXJlbTtcXG4gIC0taW5saW5lLXBsYXllci1tYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgLSB2YXIoLS1zcGFjaW5nLWxhcmdlKSAqIDIpO1xcbiAgLS1jYXJkLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICAtLWNhcmQtbWF4LXdpZHRoOiAxMDAwcHg7XFxuICAtLWNhcmQtYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICAtLW1vZGFsLXdpZHRoOiA1NTBweDtcXG4gIC0tYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjJzO1xcbiAgLS1hbmltYXRpb24tc3R5bGU6IGVhc2UtaW4tb3V0O1xcbiAgLS10aHVtYm5haWwtcHJldmlldy1oZWlnaHQ6IDEwMHB4O1xcbiAgLS10aHVtYm5haWwtcHJldmlldy13aWR0aDogMTc3cHg7XFxuICAtLWNvdmVyLXBob3RvLWhlaWdodDogMTgwcHg7XFxuICAtLWNoYW5uZWwtdGh1bWJuYWlsLXdpZHRoOiAxMHJlbTtcXG4gIC0tY2hhbm5lbC10aHVtYm5haWwtd2lkdGgtLXNtYWxsOiA0cmVtO1xcbiAgLS1maWxlLWxpc3QtdGh1bWJuYWlsLXdpZHRoOiAxMHJlbTtcXG4gIC0tdGFnLWhlaWdodDogMS41cmVtOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICA6cm9vdCB7XFxuICAgIC0tZm9udC1iYXNlOiAxNnB4OyB9IH1cXG5cXG4qOjpzZWxlY3Rpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWxlY3Rpb24tYmcpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2VsZWN0aW9uKTsgfVxcblxcbio6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTsgfVxcblxcbmh0bWwge1xcbiAgZm9udC1mYW1pbHk6IEludGVyLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XFxuICBmb250LXNpemU6IDE2cHg7IH1cXG5cXG5ib2R5IHtcXG4gIGZvbnQtc2l6ZTogMWVtOyB9XFxuXFxuaDEsXFxuaDIsXFxuaDMsXFxuaDQsXFxuaDUsXFxuaDYge1xcbiAgZm9udC1zaXplOiAxcmVtOyB9XFxuXFxucCArIHAge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG51bCxcXG5vbCB7XFxuICBsaXN0LXN0eWxlOiBpbml0aWFsOyB9XFxuXFxudWwgbGksXFxuICBvbCBsaSB7XFxuICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7XFxuICAgIG1hcmdpbjogdmFyKC0tc3BhY2luZy14c21hbGwpIHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxcblxcbi51bC0tbm8tc3R5bGUsIC5uYXZpZ2F0aW9uLWxpbmtzLCAubmF2aWdhdGlvbi1saW5rcy0tc21hbGwsIC5wYWdpbmF0aW9uLCAudGFncywgLnRhZ3MtLXJlbW92ZSwgLnRhZ3MtLXZlcnRpY2FsLCAudGFncy0tc2VsZWN0ZWQge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIG1hcmdpbi1ib3R0b206IDA7IH1cXG5cXG4udWwtLW5vLXN0eWxlIGxpLCAubmF2aWdhdGlvbi1saW5rcyBsaSwgLm5hdmlnYXRpb24tbGlua3MtLXNtYWxsIGxpLCAucGFnaW5hdGlvbiBsaSwgLnRhZ3MgbGksIC50YWdzLS1yZW1vdmUgbGksIC50YWdzLS12ZXJ0aWNhbCBsaSwgLnRhZ3MtLXNlbGVjdGVkIGxpIHtcXG4gICAgbWFyZ2luOiAwOyB9XFxuXFxuZGwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBvdmVyZmxvdy14OiB2aXNpYmxlO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuZHQge1xcbiAgZmxleC1iYXNpczogNDAlO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXFxuZGQge1xcbiAgZmxleC1iYXNpczogNTUlO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWFyZ2luOiAwO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cXG5cXG5kdCxcXG5kZCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxcblxcbmR0Omxhc3Qtb2YtdHlwZSxcXG4gIGRkOmxhc3Qtb2YtdHlwZSB7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XFxuXFxuYmxvY2txdW90ZSB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgcGFkZGluZzogMC44cmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmxvY2txdW90ZS1iZyk7XFxuICBib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkIHZhcigtLWNvbG9yLWJsb2NrcXVvdGUpOyB9XFxuXFxuY29kZSB7XFxuICBmb250LWZhbWlseTogXFxcIkZpcmEgQ29kZVxcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtOyB9XFxuXFxuaHIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG5pbWcsXFxuYSB7XFxuICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTsgfVxcblxcbmltZyB7XFxuICB0ZXh0LWluZGVudDogLTk5OTlweDsgfVxcblxcbi5jb2x1bW5zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIGZsZXgtd3JhcDogd3JhcDsgfVxcblxcbi5jb2x1bW5zID4gKiB7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgbWluLXdpZHRoOiAxNXJlbTtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uY29sdW1ucyA+ICo6Zmlyc3QtY2hpbGQge1xcbiAgICAgIG1hcmdpbi1yaWdodDogMS41cmVtOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5jb2x1bW5zIHtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XFxuICAgICAgLmNvbHVtbnMgPiAqIHtcXG4gICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gICAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bzsgfVxcbiAgICAgICAgLmNvbHVtbnMgPiAqOmZpcnN0LWNoaWxkIHtcXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9IH1cXG5cXG4uaGlkZGVuIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG5cXG4uZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cXG5cXG4uY29sdW1uIHtcXG4gIGRpc3BsYXk6IGZsZXg7IH1cXG5cXG4uY29sdW1uIC5jb2x1bW5fX2l0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XFxuICAgIGZsZXg6IDE7IH1cXG5cXG4udHJ1bmNhdGVkLXRleHQge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IH1cXG5cXG4uYnVzeS1pbmRpY2F0b3JfX2xvYWRlciB7XFxuICBtaW4td2lkdGg6IDE2cHg7XFxuICBtaW4taGVpZ2h0OiA4cHg7XFxuICBtYXJnaW46IC0xcmVtIDA7XFxuICBwYWRkaW5nOiAwIDMwcHg7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9fXzBfX18gKyBcIikgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XFxuXFxuLmJ1c3ktaW5kaWNhdG9yX19sb2FkZXI6Zmlyc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDJweDsgfVxcblxcbi5idXN5LWluZGljYXRvcl9fbG9hZGVyOmxhc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7IH1cXG5cXG4uaGVscCwgLmhlbHAtLXdhcm5pbmcsIC5oZWxwLS1pbmxpbmUsIC5oZWxwLS1lcnJvciwgLmZvcm0tZmllbGRfX2hlbHAsIC5oZWFkZXJfX25hdmlnYXRpb24tYnV0dG9uLWhlbHAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaGVscCk7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5oZWxwLS13YXJuaW5nIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWhlbHAtd2FybmluZyk7IH1cXG5cXG4uaGVscC0taW5saW5lIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwOyB9XFxuXFxuLmVtcHR5IHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWVtcHR5KTtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxcblxcbi5lbXB0eS0tY2VudGVyZWQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XFxuXFxuLnFyLWNvZGUge1xcbiAgd2lkdGg6IDEzNHB4O1xcbiAgaGVpZ2h0OiAxMzRweDtcXG4gIGJvcmRlcjogM3B4IHNvbGlkIHdoaXRlOyB9XFxuXFxuLnFyLWNvZGUucXItY29kZS0tcmlnaHQtcGFkZGluZyB7XFxuICAgIG1hcmdpbi1yaWdodDogMS4zMzMzM3JlbTsgfVxcblxcbi5xci1jb2RlLnFyLWNvZGUtLXRvcC1wYWRkaW5nIHtcXG4gICAgbWFyZ2luLXRvcDogMS4zMzMzM3JlbTsgfVxcblxcbi5lcnJvci13cmFwcGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWVycm9yKTtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IH1cXG5cXG4uZXJyb3ItdGV4dCB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7IH1cXG5cXG4uaGVscC0tZXJyb3Ige1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtZXJyb3IpOyB9XFxuXFxuLnRodW1ibmFpbC1wcmV2aWV3IHtcXG4gIHdpZHRoOiB2YXIoLS10aHVtYm5haWwtcHJldmlldy13aWR0aCk7XFxuICBoZWlnaHQ6IHZhcigtLXRodW1ibmFpbC1wcmV2aWV3LWhlaWdodCk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cXG5cXG4uZW1vamkge1xcbiAgZm9udC1zaXplOiAxLjNlbTsgfVxcblxcbi5kb3dubG9hZC10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC14c21hbGwpOyB9XFxuXFxuLm5vdGljZS1tZXNzYWdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7IH1cXG5cXG4ucHJpdmFjeS1pbWcge1xcbiAgaGVpZ2h0OiAxMHJlbTsgfVxcblxcbi5hZHMtd3JhcHBlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hZHMtYmFja2dyb3VuZCk7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtO1xcbiAgcGFkZGluZy1yaWdodDogMC41cmVtOyB9XFxuXFxuLmFkcy13cmFwcGVyIHAge1xcbiAgICBtYXJnaW4tbGVmdDogMC40cmVtO1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQteHNtYWxsKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFkcy10ZXh0KTsgfVxcblxcbi5hZHMtd3JhcHBlciAuYnV0dG9uLS1saW5rLCAuYWRzLXdyYXBwZXIgLmJ1dHRvbi0tdXJpLWluZGljYXRvciwgLmFkcy13cmFwcGVyIC5tYXJrZG93bi1wcmV2aWV3IGEsIC5tYXJrZG93bi1wcmV2aWV3IC5hZHMtd3JhcHBlciBhLCAuYWRzLXdyYXBwZXIgLnRhYiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hZHMtbGluayk7IH1cXG5cXG4uYWRzX19jbGFpbS1pdGVtIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYWRzLWJhY2tncm91bmQpO1xcbiAgZGlzcGxheTogZmxleDsgfVxcblxcbi5hZHNfX2NsYWltLWl0ZW0gPiBkaXYge1xcbiAgICB3aWR0aDogNDAlO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsgfVxcblxcbi5hZHNfX2NsYWltLWl0ZW0gLmF2cC1wLWd1aSB7XFxuICAgIHotaW5kZXg6IDEgIWltcG9ydGFudDsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuYWRzX19jbGFpbS1pdGVtIHtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XFxuICAgICAgLmFkc19fY2xhaW0taXRlbSA+IGRpdiB7XFxuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XFxuXFxuLmFkc19fY2xhaW0tdGV4dCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuYWRzX19jbGFpbS10ZXh0IHtcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0gfVxcblxcbi5hZHNfX2NsYWltLXRleHQtLXNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zbWFsbCk7IH1cXG5cXG5Aa2V5ZnJhbWVzIGV4cGFuZCB7XFxuICAwJSB7XFxuICAgIG1hcmdpbi10b3A6IDIwMHB4O1xcbiAgICBvcGFjaXR5OiAwOyB9XFxuICAxMDAlIHtcXG4gICAgbWFyZ2luLXRvcDogMnJlbTtcXG4gICAgb3BhY2l0eTogMTsgfSB9XFxuXFxuQGtleWZyYW1lcyBsb2FkaW5nLWFuaW1hdGlvbiB7XFxuICAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC01MDBweCAwOyB9XFxuICAxMDAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAwcHggMDsgfSB9XFxuXFxuQGtleWZyYW1lcyBwdWxzZSB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDE7IH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDAuNzsgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7IH0gfVxcblxcbkBrZXlmcmFtZXMgc2stc3RyZXRjaGRlbGF5IHtcXG4gIDAlLFxcbiAgNDAlLFxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVZKDAuNCk7IH1cXG4gIDIwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVZKDEpOyB9IH1cXG5cXG5Aa2V5ZnJhbWVzIGJvdW5jZSB7XFxuICAwJSB7XFxuICAgIHdpZHRoOiAwOyB9XFxuICAxMCUge1xcbiAgICB3aWR0aDogMC41cmVtOyB9XFxuICAyMCUge1xcbiAgICB3aWR0aDogMDsgfVxcbiAgMzAlIHtcXG4gICAgd2lkdGg6IDAuNXJlbTsgfVxcbiAgNDAlIHtcXG4gICAgd2lkdGg6IDA7IH0gfVxcblxcbkBrZXlmcmFtZXMgbWVudS1hbmltYXRlLWluIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVkoMCk7XFxuICAgIG9wYWNpdHk6IDA7IH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWSgxKTtcXG4gICAgb3BhY2l0eTogMTsgfSB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAuYnV0dG9uLS1wcmltYXJ5LFxcbiAgLmJ1dHRvbi0tc2Vjb25kYXJ5LFxcbiAgLmJ1dHRvbi0tYWx0IHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfSB9XFxuXFxuLmJ1dHRvbi0tdXJpLWluZGljYXRvciB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0aXRsZSk7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgLmJ1dHRvbi0tdXJpLWluZGljYXRvciB7XFxuICAgIGhlaWdodDogaW5pdGlhbDtcXG4gICAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7IH1cXG5cXG4uYnV0dG9uLS1jbG9zZSwgLmNvbnRlbnRfX2FjdGlvbnMgLmJ1dHRvbiB7XFxuICB6LWluZGV4OiAxO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7XFxuICByaWdodDogdmFyKC0tc3BhY2luZy1taW5pc2N1bGUpO1xcbiAgcGFkZGluZzogMC4zcmVtO1xcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pIHZhcigtLXRyYW5zaXRpb24tc3R5bGUpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1yYWRpdXMpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LWJvZHkpOyB9XFxuXFxuLmJ1dHRvbi0tY2xvc2Ugc3ZnLCAuY29udGVudF9fYWN0aW9ucyAuYnV0dG9uIHN2ZyB7XFxuICAgIGhlaWdodDogMXJlbTtcXG4gICAgd2lkdGg6IDFyZW07IH1cXG5cXG4uYnV0dG9uLS1jbG9zZTpob3ZlciwgLmNvbnRlbnRfX2FjdGlvbnMgLmJ1dHRvbjpob3ZlciB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1idXR0b24tcHJpbWFyeS10ZXh0KTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXByaW1hcnktYmcpOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5idXR0b24tLWNsb3NlLCAuY29udGVudF9fYWN0aW9ucyAuYnV0dG9uIHtcXG4gICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5idXR0b24tLWRvd25sb2FkLWxpbmsgLmJ1dHRvbl9fbGFiZWwge1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cXG5cXG4uYnV0dG9uX19jb250ZW50IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAxMDAlOyB9XFxuXFxuLmJ1dHRvbl9fbGFiZWwge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfVxcblxcbnN2ZyArIC5idXR0b25fX2xhYmVsLFxcbi5idXR0b25fX2xhYmVsICsgc3ZnIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5idXR0b24tdG9nZ2xlIHtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtYnV0dG9uKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1iYXNlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XFxuICBib3JkZXItbGVmdC13aWR0aDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBtYXJnaW46IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1jYXJkLWJhY2tncm91bmQpOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5idXR0b24tdG9nZ2xlIHtcXG4gICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5idXR0b24tdG9nZ2xlIHN2ZyB7XFxuICAgIG9wYWNpdHk6IDAuNTsgfVxcblxcbi5idXR0b24tdG9nZ2xlOmZpcnN0LW9mLXR5cGUge1xcbiAgICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IH1cXG5cXG4uYnV0dG9uLXRvZ2dsZTpsYXN0LW9mLXR5cGUge1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5idXR0b24tdG9nZ2xlLS1hY3RpdmUge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1hbHQpOyB9XFxuXFxuLmJ1dHRvbi10b2dnbGUtLWFjdGl2ZSBzdmcge1xcbiAgICBvcGFjaXR5OiAxOyB9XFxuXFxuLmJ1dHRvbi10b2dnbGUtLWFjdGl2ZTpob3ZlciB7XFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XFxuXFxuLmJ1dHRvbi10b2dnbGUtLWN1c3RvbSB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7IH1cXG5cXG4uYnV0dG9uLXRvZ2dsZS0tY3VzdG9tIHN2ZyB7XFxuICAgIG9wYWNpdHk6IDE7IH1cXG5cXG4uY2FyZCwgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLmNvbnRlbnRfX3ZpZXdlciwgLm1vZGFsIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWNhcmQtYmFja2dyb3VuZCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1jYXJkLXJhZGl1cyk7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2FyZCwgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLmNvbnRlbnRfX3ZpZXdlciwgLm1vZGFsIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH0gfVxcblxcbi5jYXJkLS1kaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxcblxcbi5jYXJkLS1zZWN0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmNhcmQtLXJld2FyZC10b3RhbCB7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtbGFyZ2UpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpOyB9XFxuXFxuLmNhcmQtLWlubGluZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1yYWRpdXMpO1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNhcmQtLWlubGluZTpsYXN0LW9mLXR5cGUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XFxuXFxuLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCB7XFxuICBtYXJnaW46IHZhcigtLXNwYWNpbmcteGxhcmdlKSAwO1xcbiAgbWluLXdpZHRoOiAzNXJlbTsgfVxcblxcbi5jYXJkLS1kYXRhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuLmNhcmRfX2FjdGlvbnMsIC5jYXJkX19hY3Rpb25zLS1pbmxpbmUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbi5jYXJkX19hY3Rpb25zOm9ubHktY2hpbGQsIC5jYXJkX19hY3Rpb25zLS1pbmxpbmU6b25seS1jaGlsZCB7XFxuICAgIG1hcmdpbi10b3A6IDA7IH1cXG5cXG4uY2FyZF9fYWN0aW9ucyA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLmNhcmRfX2FjdGlvbnMtLWlubGluZSA+ICo6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNhcmRfX3NlY3Rpb24tLWZsZXgge1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pIHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5jYXJkX19zZWN0aW9uLS1mbGV4IHtcXG4gICAgICBwYWRkaW5nOiAwOyB9IH1cXG5cXG4uY2FyZF9fYWN0aW9ucy0taW5saW5lIHtcXG4gIG1hcmdpbi10b3A6IDA7IH1cXG5cXG4uY2FyZF9fYWN0aW9ucy0tYmV0d2VlbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XFxuXFxuLmNhcmRfX2FjdGlvbnMtLWNlbnRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XFxuXFxuLmNhcmQtc3RhY2sgLmNhcmQ6bm90KDpsYXN0LW9mLXR5cGUpLCAuY2FyZC1zdGFjayAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwOm5vdCg6bGFzdC1vZi10eXBlKSwgLmNhcmQtc3RhY2sgLmNvbnRlbnRfX3ZpZXdlcjpub3QoOmxhc3Qtb2YtdHlwZSksIC5jYXJkLXN0YWNrIC5tb2RhbDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uY2FyZF9fbGlzdCB7XFxuICBjb2x1bW4tY291bnQ6IDI7XFxuICBjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gIGRpc3BsYXk6IGJsb2NrOyB9XFxuXFxuLmNhcmRfX2xpc3QgLmNhcmQsIC5jYXJkX19saXN0IC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAsIC5jYXJkX19saXN0IC5jb250ZW50X192aWV3ZXIsIC5jYXJkX19saXN0IC5tb2RhbCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNhcmRfX2xpc3Qge1xcbiAgICAgIGNvbHVtbi1jb3VudDogMTsgfVxcbiAgICAgIC5jYXJkX19saXN0IC5jYXJkLCAuY2FyZF9fbGlzdCAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwLCAuY2FyZF9fbGlzdCAuY29udGVudF9fdmlld2VyLCAuY2FyZF9fbGlzdCAubW9kYWwge1xcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxcblxcbi5jYXJkX19tZXNzYWdlIHtcXG4gIGJvcmRlci1sZWZ0OiAwLjVyZW0gc29saWQ7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgdmFyKC0tc3BhY2luZy1tZWRpdW0pIHZhcigtLXNwYWNpbmctbWVkaXVtKSB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYWx0KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7IH1cXG5cXG4uY2FyZF9fbWVzc2FnZS0tZXJyb3Ige1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZXJyb3IpO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWVycm9yKTsgfVxcblxcbi5jYXJkX19tZXNzYWdlLS1mYWlsdXJlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWVycm9yKTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7IH1cXG5cXG4uY2FyZF9fdGl0bGUsIC5jYXJkX190aXRsZS0tYmV0d2VlbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC10aXRsZSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbGlnaHQpOyB9XFxuXFxuLmNhcmRfX3RpdGxlID4gKjpub3QoOmxhc3QtY2hpbGQpLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gPiAqOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5jYXJkX190aXRsZS5jYXJkX190aXRsZS0tZGVwcmVjYXRlZCwgLmNhcmRfX3RpdGxlLS1kZXByZWNhdGVkLmNhcmRfX3RpdGxlLS1iZXR3ZWVuIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmNhcmRfX3RpdGxlLS1iZXR3ZWVuIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuXFxuLmNhcmRfX3RpdGxlLS1iZXR3ZWVuID4gKjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwOyB9XFxuXFxuLmNhcmRfX21lZGlhLS1uc2Z3IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyB9XFxuXFxuLmNhcmRfX2hlYWRlciwgLmNhcmRfX2hlYWRlci0tYmV0d2VlbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cXG5cXG4uY2FyZF9faGVhZGVyIC5pY29uX193cmFwcGVyLCAuY2FyZF9faGVhZGVyLS1iZXR3ZWVuIC5pY29uX193cmFwcGVyIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbi5jYXJkX19oZWFkZXItLWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XFxuXFxuLmNhcmRfX3RpdGxlLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4ge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXRpdGxlKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1saWdodCk7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIC8qIC5iYWRnZSBydWxlIGluaGVyaXRlZCBmcm9tIGZpbGUgcGFnZSBwcmljZXMsIHNob3VsZCBiZSByZWZhY3RvcmVkICovIH1cXG5cXG4uY2FyZF9fdGl0bGUgLmJhZGdlLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gLmJhZGdlLCAuY2FyZF9fdGl0bGUgLmJhZGdlLS10YWcsIC5jYXJkX190aXRsZS0tYmV0d2VlbiAuYmFkZ2UtLXRhZywgLmNhcmRfX3RpdGxlIC50YWcsIC5jYXJkX190aXRsZS0tYmV0d2VlbiAudGFnLCAuY2FyZF9fdGl0bGUgLmJhZGdlLS10YWctbWF0dXJlLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gLmJhZGdlLS10YWctbWF0dXJlLCAuY2FyZF9fdGl0bGUgLnRhZy0tbWF0dXJlLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gLnRhZy0tbWF0dXJlLCAuY2FyZF9fdGl0bGUgLmJhZGdlLS1jb3N0LCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gLmJhZGdlLS1jb3N0LCAuY2FyZF9fdGl0bGUgLmJhZGdlLS1mcmVlLCAuY2FyZF9fdGl0bGUtLWJldHdlZW4gLmJhZGdlLS1mcmVlLCAuY2FyZF9fdGl0bGUgLmJhZGdlLS1hbGVydCwgLmNhcmRfX3RpdGxlLS1iZXR3ZWVuIC5iYWRnZS0tYWxlcnQge1xcbiAgICBmbG9hdDogcmlnaHQ7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gICAgbWFyZ2luLXRvcDogOHB4OyB9XFxuXFxuLmNhcmRfX3N1YnRpdGxlIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1zbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1ib2R5KTsgfVxcblxcbi5jYXJkX19ib2R5IHtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmNhcmRfX2JvZHk6bm90KC5jYXJkX19ib2R5LS1uby10aXRsZSkge1xcbiAgICBwYWRkaW5nLXRvcDogMDsgfVxcblxcbi5jYXJkX19ib2R5LmNhcmRfX2JvZHktLXRhYmxlIHtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNhcmRfX2JvZHkge1xcbiAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9IH1cXG5cXG4uY2FyZF9fbWFpbi1hY3Rpb25zIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGFyZ2UpO1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XFxuXFxuLmNhcmRfX2JvZHktLXdpdGgtaWNvbixcXG4uY2FyZF9fbWFpbi1hY3Rpb25zLS13aXRoLWljb24ge1xcbiAgcGFkZGluZy1sZWZ0OiA3LjVyZW07IH1cXG5cXG4uY2FyZF9fZGF0YS1zdWJ0aXRsZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxcblxcbi5jYXJkX19kYXRhLXN1YnRpdGxlIDpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5jYXJkX19leHBhbmQtYnRuIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2FyZF9fZXhwYW5kLWJ0biB7XFxuICAgICAgcGFkZGluZzogMDsgfSB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAuY2FyZF9faGVhZGVyLCAuY2FyZF9faGVhZGVyLS1iZXR3ZWVuLFxcbiAgLmNhcmRfX2JvZHksXFxuICAuY2FyZF9fbWFpbi1hY3Rpb25zIHtcXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9IH1cXG5cXG4uY2hhbm5lbC1jb3ZlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICM2MzdhZDIsICMzMTg3OTQgODAlKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGNvbG9yOiAjZmZmOyB9XFxuXFxuLmNoYW5uZWwtY292ZXJfX2N1c3RvbSB7XFxuICB6LWluZGV4OiAwO1xcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9iamVjdC1maXQ6IGNvdmVyO1xcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDMwJSk7IH1cXG5cXG4uY2hhbm5lbC1jb3ZlcixcXG4uY2hhbm5lbC1jb3Zlcl9fY3VzdG9tIHtcXG4gIG1pbi1oZWlnaHQ6IHZhcigtLWNvdmVyLXBob3RvLWhlaWdodCk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IHZhcigtLWNhcmQtcmFkaXVzKTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiB2YXIoLS1jYXJkLXJhZGl1cyk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNoYW5uZWwtY292ZXIsXFxuICAgIC5jaGFubmVsLWNvdmVyX19jdXN0b20ge1xcbiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tY292ZXItcGhvdG8taGVpZ2h0KSArIDIgKiB2YXIoLS1zcGFjaW5nLXhsYXJnZSkgKyB2YXIoLS1zcGFjaW5nLW1lZGl1bSkpOyB9IH1cXG5cXG4uY2hhbm5lbC10aHVtYm5haWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNXJlbTtcXG4gIHdpZHRoOiA1cmVtO1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNoYW5uZWwtdGh1bWJuYWlsLS1zbWFsbCB7XFxuICBoZWlnaHQ6IDNyZW07XFxuICB3aWR0aDogM3JlbTsgfVxcblxcbi5jaGFubmVsX190aHVtYm5haWwtLWNoYW5uZWwtcGFnZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IHZhcigtLWNoYW5uZWwtdGh1bWJuYWlsLXdpZHRoKTtcXG4gIHdpZHRoOiB2YXIoLS1jaGFubmVsLXRodW1ibmFpbC13aWR0aCk7XFxuICBsZWZ0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICB0b3A6IDRyZW07IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNoYW5uZWxfX3RodW1ibmFpbC0tY2hhbm5lbC1wYWdlIHtcXG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4uY2hhbm5lbC10aHVtYm5haWxfX2N1c3RvbSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG9iamVjdC1maXQ6IGNvdmVyOyB9XFxuXFxuLmNoYW5uZWwtdGh1bWJuYWlsX19kZWZhdWx0IHtcXG4gIHdpZHRoOiA4MCU7XFxuICBoZWlnaHQ6IDgwJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgYWxpZ24tc2VsZjogZmxleC1lbmQ7IH1cXG5cXG4uY2hhbm5lbC10aHVtYm5haWwsXFxuLmNoYW5uZWwtdGh1bWJuYWlsX19jdXN0b20ge1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1yYWRpdXMpOyB9XFxuXFxuLmNoYW5uZWwtdGh1bWJuYWlsX19kZWZhdWx0LS0wIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NDhmZmM7IH1cXG5cXG4uY2hhbm5lbC10aHVtYm5haWxfX2RlZmF1bHQtLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTg1NTsgfVxcblxcbi5jaGFubmVsLXRodW1ibmFpbF9fZGVmYXVsdC0tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM5YWYwOyB9XFxuXFxuLmNoYW5uZWwtdGh1bWJuYWlsX19kZWZhdWx0LS0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzgzODM7IH1cXG5cXG4uY2hhbm5lbC10aHVtYm5haWxfX2RlZmF1bHQtLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsgfVxcblxcbi5jaGFubmVsX19wcmltYXJ5LWluZm8ge1xcbiAgei1pbmRleDogMTtcXG4gIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGFubmVsLXRodW1ibmFpbC13aWR0aCkgKyB2YXIoLS1zcGFjaW5nLWxhcmdlKSk7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgd2lkdGg6IDEwMCU7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNoYW5uZWxfX3ByaW1hcnktaW5mbyB7XFxuICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH0gfVxcblxcbi5jaGFubmVsX190aXRsZSB7XFxuICBkaXNwbGF5OiBpbmxpbmU7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgZm9udC1zaXplOiB4eC1sYXJnZTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTsgfVxcblxcbi5jaGFubmVsX190aXRsZSAuYnV0dG9uIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2hhbm5lbF9fdGl0bGUge1xcbiAgICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjaW5nLXhsYXJnZSk7IH0gfVxcblxcbi5jaGFubmVsX19tZXRhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cXG5cXG4uY2hhbm5lbF9faW1hZ2UtLWJsdXJyZWQge1xcbiAgZmlsdGVyOiBibHVyKDE2cHgpOyB9XFxuXFxuLmNoYW5uZWxfX3F1aWNrLWFjdGlvbnMge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICB6LWluZGV4OiAxO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LWJhc2UpOyB9XFxuXFxuLmNoYW5uZWxfX3F1aWNrLWFjdGlvbnMgPiAqIHtcXG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLXhzbWFsbCk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNoYW5uZWxfX3F1aWNrLWFjdGlvbnMgPiAqIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhzbWFsbCk7IH0gfVxcblxcbi5jaGFubmVsLW5hbWUtLWlubGluZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2luZy14c21hbGwpOyB9XFxuXFxuLmNoYW5uZWxfX2xpc3QtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWNhcmQtYmFja2dyb3VuZCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XFxuXFxuLmNoYW5uZWxfX2xpc3QtaXRlbSAuY2hhbm5lbC10aHVtYm5haWwge1xcbiAgICBoZWlnaHQ6IDJyZW07XFxuICAgIHdpZHRoOiAycmVtOyB9XFxuXFxuLmNoYW5uZWxfX2xpc3QtaXRlbSAuaWNvbiB7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5jaGFubmVsX19saXN0LWl0ZW06aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1jYXJkLWJhY2tncm91bmQtaGlnaGxpZ2h0ZWQpOyB9XFxuXFxuLmNoYW5uZWxfX2xpc3QtaXRlbS0tc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XFxuXFxuLmNsYWltLWxpc3QgLmNsYWltLXByZXZpZXdfX3dyYXBwZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG4uY2xhaW0tbGlzdF9faGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgMDtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYm9keSk7IH1cXG5cXG4uY2xhaW0tbGlzdF9faGVhZGVyIC5zcGlubmVyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5jbGFpbS1saXN0X19kcm9wZG93biB7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tbGlzdF9fZHJvcGRvd24ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cXG5cXG4uY2xhaW0tbGlzdF9faGVhZGVyLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTMwJSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQteHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTsgfVxcblxcbi5jbGFpbS1saXN0X19oZWFkZXItbGFiZWwgLmljb24ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmcteHNtYWxsKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tbGlzdF9faGVhZGVyLWxhYmVsIHtcXG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICAgIHRyYW5zZm9ybTogbm9uZTsgfSB9XFxuXFxuLmNsYWltLWxpc3RfX2Nvbmp1Y3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGl0bGUpO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfVxcblxcbi5jbGFpbS1saXN0X19hbHQtY29udHJvbHMge1xcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNsYWltLWxpc3RfX2FsdC1jb250cm9scyA+ICoge1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNsYWltLWxpc3RfX2FsdC1jb250cm9scyB7XFxuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XFxuXFxuLmNsYWltLXByZXZpZXdfX3dyYXBwZXIge1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X193cmFwcGVyLS1ub3RpY2Uge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itbm90aWNlKTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X193cmFwcGVyLS1pbmxpbmUge1xcbiAgcGFkZGluZzogMDsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X193cmFwcGVyLS1zbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3IHtcXG4gIGZsZXg6IDE7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7IH1cXG5cXG4uY2xhaW0tcHJldmlldzpub3QoLmNsYWltLXByZXZpZXctLWlubGluZSk6bm90KC5jbGFpbS1wcmV2aWV3LS1wZW5kaW5nKTpub3QoLmNsYWltLXByZXZpZXctLWluYWN0aXZlKSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxcblxcbi5jbGFpbS1wcmV2aWV3IC5tZWRpYV9fdGh1bWIge1xcbiAgICB3aWR0aDogdmFyKC0tZmlsZS1saXN0LXRodW1ibmFpbC13aWR0aCk7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3OmhvdmVyIC5jbGFpbS1wcmV2aWV3X19ob3Zlci1hY3Rpb25zIHtcXG4gICAgZGlzcGxheTogYmxvY2s7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNsYWltLXByZXZpZXcge1xcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgfVxcbiAgICAgIC5jbGFpbS1wcmV2aWV3IC5tZWRpYV9fdGh1bWIge1xcbiAgICAgICAgd2lkdGg6IDVyZW07XFxuICAgICAgICBoZWlnaHQ6IDNyZW07IH1cXG4gICAgICAuY2xhaW0tcHJldmlldyAuY2hhbm5lbC10aHVtYm5haWwge1xcbiAgICAgICAgd2lkdGg6IDVyZW07XFxuICAgICAgICBoZWlnaHQ6IDVyZW07IH0gfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1sYXJnZSB7XFxuICBib3JkZXI6IG5vbmU7IH1cXG5cXG4uY2xhaW0tcHJldmlldy0tbGFyZ2U6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1sYXJnZSAubWVkaWFfX3RodW1iIHtcXG4gICAgd2lkdGg6IDE0cmVtOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgICAgLmNsYWltLXByZXZpZXctLWxhcmdlIC5tZWRpYV9fdGh1bWIge1xcbiAgICAgICAgd2lkdGg6IDVyZW07IH0gfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1sYXJnZSAuY2hhbm5lbC10aHVtYm5haWwge1xcbiAgICB3aWR0aDogNy41cmVtO1xcbiAgICBoZWlnaHQ6IDcuNXJlbTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1zbWFsbCAubWVkaWFfX3RodW1iIHtcXG4gIHdpZHRoOiA4cmVtOyB9XFxuXFxuLmNsYWltLXByZXZpZXctLXNtYWxsIC5jaGFubmVsLXRodW1ibmFpbCB7XFxuICB3aWR0aDogNHJlbTtcXG4gIGhlaWdodDogNHJlbTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1wZW5kaW5nIHtcXG4gIG9wYWNpdHk6IDAuNjsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1wYWRkZWQge1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uY2xhaW0tcHJldmlldy0taW5saW5lIC5jaGFubmVsLXRodW1ibmFpbCB7XFxuICB3aWR0aDogdmFyKC0tY2hhbm5lbC10aHVtYm5haWwtd2lkdGgtLXNtYWxsKTtcXG4gIGhlaWdodDogdmFyKC0tY2hhbm5lbC10aHVtYm5haWwtd2lkdGgtLXNtYWxsKTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LS1pbmxpbmUgLmNsYWltLXByZXZpZXdfX2FjdGlvbnMsIC5jbGFpbS1wcmV2aWV3LS1pbmxpbmUgLmNsYWltLXByZXZpZXdfX2FjdGlvbnMtLWhlYWRlciB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIHdpZHRoOiBhdXRvOyB9XFxuXFxuLmNsYWltLXByZXZpZXctLWlubGluZSAuY2xhaW0tcHJldmlld19fdGV4dCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcXG4gIC5jbGFpbS1wcmV2aWV3LS1pbmxpbmUgLmNsYWltLXByZXZpZXdfX3RleHQge1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XFxuICAuY2xhaW0tcHJldmlldy0taW5saW5lIC5jbGFpbS1wcmV2aWV3X19hY3Rpb25zLCAuY2xhaW0tcHJldmlldy0taW5saW5lIC5jbGFpbS1wcmV2aWV3X19hY3Rpb25zLS1oZWFkZXIge1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyB9IH1cXG5cXG4uY2xhaW0tcHJldmlld19fdGV4dCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XFxuXFxuLmNsYWltLXByZXZpZXdfX3RpdGxlIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1ib2R5KTtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3LW1ldGFkYXRhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleDogMTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tcHJldmlldy1tZXRhZGF0YSB7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5jbGFpbS1wcmV2aWV3LWluZm8ge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cXG5cXG4uY2xhaW0tcHJldmlldy1pbmZvLFxcbi5jbGFpbS1wcmV2aWV3LXByb3BlcnRpZXMge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X19hY3Rpb25zLCAuY2xhaW0tcHJldmlld19fYWN0aW9ucy0taGVhZGVyIHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi10b3A6IGF1dG87XFxuICB3aWR0aDogMTAwJTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X19idXR0b24ge1xcbiAgbWFyZ2luLWxlZnQ6IDJyZW07IH1cXG5cXG4uY2xhaW0tcHJldmlldy1wcm9wZXJ0aWVzIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG4gIGZsZXg6IDE7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGl0bGUpOyB9XFxuXFxuLmNsYWltLXVwbG9hZCB7XFxuICBmbGV4OiAxO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNsYWltLXVwbG9hZCAubWVkaWFfX3RodW1iIHtcXG4gICAgd2lkdGg6IHZhcigtLWZpbGUtbGlzdC10aHVtYm5haWwtd2lkdGgpO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uY2xhaW0tdXBsb2FkX19wcm9ncmVzcy0tb3V0ZXIge1xcbiAgd2lkdGg6IDEwMCU7IH1cXG5cXG4uY2xhaW0tdXBsb2FkX19wcm9ncmVzcy0taW5uZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeS1hbHQpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1taW5pc2N1bGUpOyB9XFxuXFxuLmNsYWltLWdyaWQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxcblxcbi5jbGFpbS1ncmlkX193cmFwcGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gIC5jbGFpbS1ncmlkX193cmFwcGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge1xcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH0gfVxcblxcbi5jbGFpbS1ncmlkX190aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uY2xhaW0tZ3JpZF9fdGl0bGU6bm90KDpmaXJzdC1vZi10eXBlKSB7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmcteGxhcmdlKTsgfVxcblxcbi5jbGFpbS1ncmlkX19oZWxwIHtcXG4gIG1hcmdpbi1ib3R0b206IDEycHg7IH1cXG5cXG4uY2xhaW0tZ3JpZF9faGVscCBzdmcge1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXRleHQtc3VidGl0bGUpOyB9XFxuXFxuLmNsYWltLXByZXZpZXctLXRpbGUge1xcbiAgd2lkdGg6IGNhbGMoKDEwMCUgLSB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgKiAzKSAvIDQpO1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMTUwcHgpIHtcXG4gICAgLmNsYWltLXByZXZpZXctLXRpbGU6Zmlyc3QtY2hpbGQsIC5jbGFpbS1wcmV2aWV3LS10aWxlOm50aC1jaGlsZCg0biArIDEpIHtcXG4gICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XFxuXFxuLmNsYWltLXByZXZpZXctLXRpbGU6aG92ZXIge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cXG5cXG4uY2xhaW0tcHJldmlldy0tdGlsZSAubWVkaWFfX3RodW1iIHtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogMTE1MHB4KSBhbmQgKG1pbi13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNsYWltLXByZXZpZXctLXRpbGUge1xcbiAgICAgIHdpZHRoOiBjYWxjKCgxMDAlIC0gdmFyKC0tc3BhY2luZy1tZWRpdW0pICogMikgLyAzKTsgfVxcbiAgICAgIC5jbGFpbS1wcmV2aWV3LS10aWxlOmZpcnN0LWNoaWxkLCAuY2xhaW0tcHJldmlldy0tdGlsZTpudGgtY2hpbGQoM24gKyAxKSB7XFxuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfVxcbiAgICAgIC5jbGFpbS1wcmV2aWV3LS10aWxlIC5jaGFubmVsLXRodW1ibmFpbCB7XFxuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNsYWltLXByZXZpZXctLXRpbGUge1xcbiAgICAgIHdpZHRoOiBjYWxjKCgxMDAlIC0gdmFyKC0tc3BhY2luZy1tZWRpdW0pICogMSkgLyAyKTtcXG4gICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcbiAgICAgIC5jbGFpbS1wcmV2aWV3LS10aWxlOmZpcnN0LWNoaWxkLCAuY2xhaW0tcHJldmlldy0tdGlsZTpudGgtY2hpbGQoMm4gKyAxKSB7XFxuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfVxcbiAgICAgIC5jbGFpbS1wcmV2aWV3LS10aWxlIC5jaGFubmVsLXRodW1ibmFpbCB7XFxuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4uY2xhaW0tdGlsZV9fdGl0bGUge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcXG4gIG1pbi1oZWlnaHQ6IDIuNXJlbTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tdGlsZV9fdGl0bGUge1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC14c21hbGwpOyB9IH1cXG5cXG4uY2xhaW0tdGlsZV9faW5mbyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXN1YnRpdGxlKTsgfVxcblxcbi5jbGFpbS10aWxlX19pbmZvIC5jaGFubmVsLXRodW1ibmFpbCB7XFxuICAgIHdpZHRoOiAyLjFyZW07XFxuICAgIGhlaWdodDogMi4xcmVtO1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmNsYWltLXRpbGVfX2Fib3V0LCAuY2xhaW0tdGlsZV9fYWJvdXQtLWNoYW5uZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQteHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTsgfVxcblxcbi5jbGFpbS10aWxlX19wdWJsaXNoZXMge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXhzbWFsbCk7IH1cXG5cXG4uY2xhaW0tdGlsZV9fYWJvdXQtLWNoYW5uZWwge1xcbiAgZmxleDogMTtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAyLjFyZW07XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYm9keSk7IH1cXG5cXG4uY2xhaW0tdGlsZV9fZmlsZS1wcm9wZXJ0aWVzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogdmFyKC0tc3BhY2luZy1taW5pc2N1bGUpO1xcbiAgcmlnaHQ6IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcXG4gIHBhZGRpbmc6IDAuMnJlbTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOyB9XFxuXFxuLmNsYWltLXRpbGVfX2ZpbGUtcHJvcGVydGllcyAuZmlsZS1wcm9wZXJ0aWVzIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tdGlsZV9fZmlsZS1wcm9wZXJ0aWVzIHtcXG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4uY2xhaW0tcHJldmlldy0tdGlsZTpob3ZlciAuY2xhaW0tcHJldmlld19faG92ZXItYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBibG9jazsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X19yZXBvc3QtYXV0aG9yIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKHZhcigtLXNwYWNpbmcteHNtYWxsKSAqIC0xKSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQteHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X19yZXBvc3QtYXV0aG9yIC5pY29uIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7IH1cXG5cXG4uY2xhaW0tdGlsZV9fcmVwb3N0LWF1dGhvciB7XFxuICBtYXJnaW46IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxcblxcbi5jbGFpbS1wcmV2aWV3X19ob3Zlci1hY3Rpb25zIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKTtcXG4gIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7IH1cXG5cXG4uY2xhaW0tcHJldmlld19faG92ZXItYWN0aW9ucyA+ICoge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZSk7XFxuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IH1cXG5cXG4uY29tbWVudHMge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmNvbW1lbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYm9keSk7XFxuICBtYXJnaW46IDA7IH1cXG5cXG4uY29tbWVudDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pIDA7IH1cXG5cXG4uY29tbWVudDpsYXN0LW9mLXR5cGUge1xcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNvbW1lbnRfX2NyZWF0ZS0tcmVwbHkge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uY29tbWVudF9fcmVwbHkge1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uY29tbWVudF9fcmVwbHktYnV0dG9uIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmNvbW1lbnRfX2JvZHlfY29udGFpbmVyIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgZmxleDogMTsgfVxcblxcbi5jb21tZW50X19tZXRhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmNvbW1lbnRfX21ldGEtaW5mb3JtYXRpb24ge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgZGlzcGxheTogZmxleDsgfVxcblxcbi5jb21tZW50X19tZXNzYWdlIHtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmNvbW1lbnRfX2F1dGhvciB7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNpbmcteHNtYWxsKTsgfVxcblxcbi5jb21tZW50X190aW1lIHtcXG4gIG9wYWNpdHk6IDAuMztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cXG5cXG4uY29tbWVudF9fbWVudSB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsgfVxcblxcbi5jb21tZW50X19jaGFyLWNvdW50IHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfVxcblxcbi5jb21tZW50X19tZW51LW9wdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfVxcblxcbi5jb21tZW50X19tZW51LWljb24tLWhvdmVyaW5nIHtcXG4gIHN0cm9rZTogdmFyKC0tY29sb3ItY29tbWVudC1tZW51LWhvdmVyaW5nKTsgfVxcblxcbi5jb21tZW50X19tZW51LWljb24ge1xcbiAgc3Ryb2tlOiB2YXIoLS1jb2xvci1jb21tZW50LW1lbnUpOyB9XFxuXFxuLmNvbnRlbnRfX3ZpZXdlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmNvbnRlbnRfX3ZpZXdlci0taW5saW5lIHtcXG4gIG1heC1oZWlnaHQ6IHZhcigtLWlubGluZS1wbGF5ZXItbWF4LWhlaWdodCk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLmNvbnRlbnRfX3ZpZXdlci0taW5saW5lIHtcXG4gICAgICBtYXJnaW4tdG9wOiAxMHB4OyB9IH1cXG5cXG4uY29udGVudF9fdmlld2VyLS1mbG9hdGluZyB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWZsb2F0aW5nLXZpZXdlci1oZWlnaHQpICsgdmFyKC0tZmxvYXRpbmctdmlld2VyLWluZm8taGVpZ2h0KSk7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgbGVmdDogY2FsYyh2YXIoLS1zcGFjaW5nLWxhcmdlKSArIHZhcigtLXNwYWNpbmctc21hbGwpKTtcXG4gIHotaW5kZXg6IDk5OTk7IH1cXG5cXG4uY29udGVudF9fdmlld2VyLS1mbG9hdGluZzpob3ZlciAuY29udGVudF9fYWN0aW9ucyxcXG4gIC5jb250ZW50X192aWV3ZXItLWZsb2F0aW5nOmhvdmVyIC5jb250ZW50X19mbG9hdGluZy1oZWFkZXIge1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9XFxuXFxuLmNvbnRlbnRfX3dyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7IH1cXG5cXG4uY29udGVudF9fd3JhcHBlci0tZmxvYXRpbmcge1xcbiAgaGVpZ2h0OiB2YXIoLS1mbG9hdGluZy12aWV3ZXItaGVpZ2h0KTtcXG4gIHdpZHRoOiB2YXIoLS1mbG9hdGluZy12aWV3ZXItd2lkdGgpOyB9XFxuXFxuLmNvbnRlbnRfX2FjdGlvbnMge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgZGlzcGxheTogZmxleDsgfVxcblxcbi5jb250ZW50X19hY3Rpb25zIC5idXR0b24ge1xcbiAgICBoZWlnaHQ6IDEuNXJlbTtcXG4gICAgdG9wOiAwO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5jb250ZW50X19hY3Rpb25zIC5idXR0b24gc3ZnIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUpOyB9XFxuXFxuLmNvbnRlbnRfX2Zsb2F0aW5nLWhlYWRlciB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMnJlbTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgcGFkZGluZzogMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpOyB9XFxuXFxuLmNvbnRlbnRfX2FjdGlvbnMsXFxuLmNvbnRlbnRfX2Zsb2F0aW5nLWhlYWRlciB7XFxuICB6LWluZGV4OiAxOyB9XFxuXFxuLmNvbnRlbnRfX2luZm8ge1xcbiAgY3Vyc29yOiBncmFiO1xcbiAgaGVpZ2h0OiB2YXIoLS1mbG9hdGluZy12aWV3ZXItaW5mby1oZWlnaHQpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cXG5cXG4uY29udGVudF9fY292ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1jYXJkLXJhZGl1cyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IHZhcigtLWlubGluZS1wbGF5ZXItbWF4LWhlaWdodCk7XFxuICBtYXJnaW46IGF1dG87IH1cXG5cXG4uY29udGVudF9fY292ZXI6OmJlZm9yZSwgLmNvbnRlbnRfX2NvdmVyOjphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiOyB9XFxuXFxuLmNvbnRlbnRfX2NvdmVyOjpiZWZvcmUge1xcbiAgICBmbG9hdDogbGVmdDtcXG4gICAgcGFkZGluZy10b3A6IHZhcigtLWFzcGVjdC1yYXRpby1zdGFuZGFyZCk7IH1cXG5cXG4uY29udGVudF9fY292ZXI6OmFmdGVyIHtcXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGRpc3BsYXk6IGJsb2NrOyB9XFxuXFxuLmNvbnRlbnRfX2NvdmVyOm5vdCguY2FyZF9fbWVkaWEtLW5zZncpIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsgfVxcblxcbi5jb250ZW50X19jb3Zlcjpob3ZlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxcblxcbi5jb250ZW50X19jb3Zlcjotd2Via2l0LWZ1bGwtc2NyZWVuIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTsgfVxcblxcbi5jb250ZW50X19jb3Zlci0tbm9uZSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XFxuICBtYXJnaW46IGF1dG87IH1cXG5cXG4uY29udGVudF9fY292ZXItLW5vbmU6OmJlZm9yZSwgLmNvbnRlbnRfX2NvdmVyLS1ub25lOjphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiOyB9XFxuXFxuLmNvbnRlbnRfX2NvdmVyLS1ub25lOjpiZWZvcmUge1xcbiAgICBmbG9hdDogbGVmdDtcXG4gICAgcGFkZGluZy10b3A6IHZhcigtLWFzcGVjdC1yYXRpby1zdGFuZGFyZCk7IH1cXG5cXG4uY29udGVudF9fY292ZXItLW5vbmU6OmFmdGVyIHtcXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGRpc3BsYXk6IGJsb2NrOyB9XFxuXFxuLmNvbnRlbnRfX2NvdmVyLS1ub25lOi13ZWJraXQtZnVsbC1zY3JlZW4ge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlOyB9XFxuXFxuLmNvbnRlbnRfX2NvdmVyLS1kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxcblxcbi5jb250ZW50X19jb3Zlci0tZGlzYWJsZWQgLm5hZyB7XFxuICAgIC8qIGJvbyBmaXJlIEplcmVteSAqL1xcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsgfVxcblxcbi5jb250ZW50X19jb3Zlci0tZGlzYWJsZWQ6YWZ0ZXIge1xcbiAgICBjb250ZW50OiAnJztcXG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxcblxcbi5jb250ZW50X19sb2FkaW5nIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7IH1cXG5cXG4uY29udGVudF9fbG9hZGluZy10ZXh0IHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZSk7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lciB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDI7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lciAuZGcubWFpbiB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgb3ZlcmZsb3c6IGluaGVyaXQ7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lci5saWdodCAuZGcubWFpbi50YWxsZXItdGhhbi13aW5kb3cgLmNsb3NlLWJ1dHRvbiB7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnLm1haW4gLmNsb3NlLWJ1dHRvbjpub3QoOmhvdmVyKSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlOGU4ZTg7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lci5saWdodCAuZGcubWFpbiAuY2xvc2UtYnV0dG9uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsgfVxcblxcbi5ndWktY29udGFpbmVyLmxpZ2h0IC5kZyB7XFxuICAgIGNvbG9yOiAjNTU1O1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnLm1haW46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhOyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnLm1haW46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiOyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnIGxpOm5vdCguZm9sZGVyKSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsgfVxcblxcbi5ndWktY29udGFpbmVyLmxpZ2h0IC5kZyBsaS5zYXZlLXJvdyAuYnV0dG9uIHtcXG4gICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnIGxpLnRpdGxlIHtcXG4gICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4IHVybChcXFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQlFBRkFKRUFBUC8vLy9QejgvLy8vLy8vL3lINUJBRUFBQUlBTEFBQUFBQUZBQVVBQUFJSWxJK2hLZ0Z4b0NnQU93PT1cXFwiKSA2cHggMTBweCBuby1yZXBlYXQ7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lci5saWdodCAuZGcgLmNyLmZ1bmN0aW9uOmhvdmVyLCAuZ3VpLWNvbnRhaW5lci5saWdodCAuZGcgLmNyLmJvb2xlYW46aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnIC5jIGlucHV0W3R5cGU9J3RleHQnXTpub3QoOmZvY3VzKSwgLmd1aS1jb250YWluZXIubGlnaHQgLmRnIC5jIGlucHV0W3R5cGU9J3RleHQnXTpub3QoOmhvdmVyKSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTsgfVxcblxcbi5ndWktY29udGFpbmVyLmxpZ2h0IC5kZyAuYyBpbnB1dFt0eXBlPSd0ZXh0J106Zm9jdXMsIC5ndWktY29udGFpbmVyLmxpZ2h0IC5kZyAuYyBpbnB1dFt0eXBlPSd0ZXh0J106aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7IH1cXG5cXG4uZ3VpLWNvbnRhaW5lci5saWdodCAuZGcgLmMgaW5wdXRbdHlwZT0ndGV4dCddOmZvY3VzIHtcXG4gICAgICBjb2xvcjogIzU1NTsgfVxcblxcbi5ndWktY29udGFpbmVyLmxpZ2h0IC5kZyAuYyAuc2xpZGVyOm5vdCg6aG92ZXIpIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllOWU5OyB9XFxuXFxuLmd1aS1jb250YWluZXIubGlnaHQgLmRnIC5jIC5zbGlkZXI6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7IH1cXG5cXG4uZW1iZWRfX3dyYXBwZXIge1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTsgfVxcblxcbi5leHBhbmRhYmxlLS1jbG9zZWQsXFxuLmV4cGFuZGFibGUtLW9wZW4ge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uZXhwYW5kYWJsZS0tY2xvc2VkIHtcXG4gIG1heC1oZWlnaHQ6IDEwcmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxcblxcbi5leHBhbmRhYmxlLS1vcGVuIHtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7IH1cXG5cXG4uZXhwYW5kaW5nLWRldGFpbHNfX2hlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1jYXJkLWJhY2tncm91bmQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uZXhwYW5kaW5nLWRldGFpbHMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxcblxcbi5leHBhbmRpbmctZGV0YWlsc19fYm9keSB7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1jYXJkLXJhZGl1cyk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmZpbGUtcHJvcGVydGllcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zbWFsbCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1oZWxwKTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cXG5cXG4uZmlsZS1wcm9wZXJ0aWVzID4gKjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xcbiAgICAuZmlsZS1wcm9wZXJ0aWVzIHtcXG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4uZmlsZS1wcm9wZXJ0aWVzLS1zbWFsbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxuICBtYXJnaW4tbGVmdDogMDsgfVxcblxcbi5maWxlLXByb3BlcnRpZXMtLXNtYWxsID4gKjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7IH1cXG5cXG4uZmlsZS1wcm9wZXJ0aWVzLS1sYXJnZSB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gIG1hcmdpbi1sZWZ0OiAwOyB9XFxuXFxuLmZpbGUtcHJvcGVydGllcy0tbGFyZ2UgPiAqIHtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uZmlsZS1wYWdlIC5ncmlkLWFyZWEtLWNvbnRlbnQgKyAuY2FyZCwgLmZpbGUtcGFnZSAuZ3JpZC1hcmVhLS1jb250ZW50ICsgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLmZpbGUtcGFnZSAuZ3JpZC1hcmVhLS1jb250ZW50ICsgLmNvbnRlbnRfX3ZpZXdlciwgLmZpbGUtcGFnZSAuZ3JpZC1hcmVhLS1jb250ZW50ICsgLm1vZGFsLFxcbi5maWxlLXBhZ2UgLmZpbGUtcmVuZGVyICsgLmNhcmQsXFxuLmZpbGUtcGFnZSAuZmlsZS1yZW5kZXIgKyAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwLFxcbi5maWxlLXBhZ2UgLmZpbGUtcmVuZGVyICsgLmNvbnRlbnRfX3ZpZXdlcixcXG4uZmlsZS1wYWdlIC5maWxlLXJlbmRlciArIC5tb2RhbCxcXG4uZmlsZS1wYWdlIC5jb250ZW50X19jb3ZlciArIC5jYXJkLFxcbi5maWxlLXBhZ2UgLmNvbnRlbnRfX2NvdmVyICsgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCxcXG4uZmlsZS1wYWdlIC5jb250ZW50X19jb3ZlciArIC5jb250ZW50X192aWV3ZXIsXFxuLmZpbGUtcGFnZSAuY29udGVudF9fY292ZXIgKyAubW9kYWwsXFxuLmZpbGUtcGFnZSAuY2FyZCArIC5maWxlLXJlbmRlcixcXG4uZmlsZS1wYWdlIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAgKyAuZmlsZS1yZW5kZXIsXFxuLmZpbGUtcGFnZSAuY29udGVudF9fdmlld2VyICsgLmZpbGUtcmVuZGVyLFxcbi5maWxlLXBhZ2UgLm1vZGFsICsgLmZpbGUtcmVuZGVyLFxcbi5maWxlLXBhZ2UgLmNhcmQgKyAuZ3JpZC1hcmVhLS1jb250ZW50LFxcbi5maWxlLXBhZ2UgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCArIC5ncmlkLWFyZWEtLWNvbnRlbnQsXFxuLmZpbGUtcGFnZSAuY29udGVudF9fdmlld2VyICsgLmdyaWQtYXJlYS0tY29udGVudCxcXG4uZmlsZS1wYWdlIC5tb2RhbCArIC5ncmlkLWFyZWEtLWNvbnRlbnQsXFxuLmZpbGUtcGFnZSAuY2FyZCArIC5jb250ZW50X19jb3ZlcixcXG4uZmlsZS1wYWdlIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAgKyAuY29udGVudF9fY292ZXIsXFxuLmZpbGUtcGFnZSAuY29udGVudF9fdmlld2VyICsgLmNvbnRlbnRfX2NvdmVyLFxcbi5maWxlLXBhZ2UgLm1vZGFsICsgLmNvbnRlbnRfX2NvdmVyIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmZpbGUtcGFnZSAuY2FyZCArIC5maWxlLXJlbmRlcixcXG4uZmlsZS1wYWdlIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAgKyAuZmlsZS1yZW5kZXIsXFxuLmZpbGUtcGFnZSAuY29udGVudF9fdmlld2VyICsgLmZpbGUtcmVuZGVyLFxcbi5maWxlLXBhZ2UgLm1vZGFsICsgLmZpbGUtcmVuZGVyIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY2FyZCwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jb250ZW50X192aWV3ZXIsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLm1vZGFsIHtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsgfVxcblxcbi5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLmNhcmQgKyAuZmlsZS1yZW5kZXIsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCArIC5maWxlLXJlbmRlciwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY29udGVudF9fdmlld2VyICsgLmZpbGUtcmVuZGVyLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5tb2RhbCArIC5maWxlLXJlbmRlciB7XFxuICBtYXJnaW4tdG9wOiAwOyB9XFxuXFxuLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY2FyZCArIC5maWxlLXJlbmRlciAuY2FyZCwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwICsgLmZpbGUtcmVuZGVyIC5jYXJkLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jb250ZW50X192aWV3ZXIgKyAuZmlsZS1yZW5kZXIgLmNhcmQsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLm1vZGFsICsgLmZpbGUtcmVuZGVyIC5jYXJkLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jYXJkICsgLmZpbGUtcmVuZGVyIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCArIC5maWxlLXJlbmRlciAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jb250ZW50X192aWV3ZXIgKyAuZmlsZS1yZW5kZXIgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAubW9kYWwgKyAuZmlsZS1yZW5kZXIgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY2FyZCArIC5maWxlLXJlbmRlciAuY29udGVudF9fdmlld2VyLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAgKyAuZmlsZS1yZW5kZXIgLmNvbnRlbnRfX3ZpZXdlciwgLmZpbGUtcGFnZSAuZmlsZS1wYWdlX19tZCAuY29udGVudF9fdmlld2VyICsgLmZpbGUtcmVuZGVyIC5jb250ZW50X192aWV3ZXIsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLm1vZGFsICsgLmZpbGUtcmVuZGVyIC5jb250ZW50X192aWV3ZXIsIC5maWxlLXBhZ2UgLmZpbGUtcGFnZV9fbWQgLmNhcmQgKyAuZmlsZS1yZW5kZXIgLm1vZGFsLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAgKyAuZmlsZS1yZW5kZXIgLm1vZGFsLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5jb250ZW50X192aWV3ZXIgKyAuZmlsZS1yZW5kZXIgLm1vZGFsLCAuZmlsZS1wYWdlIC5maWxlLXBhZ2VfX21kIC5tb2RhbCArIC5maWxlLXJlbmRlciAubW9kYWwge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcXG4gICAgYm9yZGVyLXRvcDogbm9uZTsgfVxcblxcbi5maWxlLXJlbmRlciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IDE7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgbWF4LWhlaWdodDogdmFyKC0taW5saW5lLXBsYXllci1tYXgtaGVpZ2h0KTsgfVxcblxcbi5maWxlLXJlbmRlci0tZG9jdW1lbnQge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG4gIG92ZXJmbG93OiBhdXRvOyB9XFxuXFxuLmZpbGUtcmVuZGVyLS1kb2N1bWVudCAuY29udGVudF9fbG9hZGluZyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBtYXJnaW46IHZhcigtLXNwYWNpbmcteGxhcmdlKSAwOyB9XFxuXFxuLmZpbGUtcmVuZGVyLS1kb2N1bWVudCAuY29udGVudF9fbG9hZGluZyAuY29udGVudF9fbG9hZGluZy10ZXh0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7IH1cXG5cXG4uZmlsZS1yZW5kZXItLWRvY3VtZW50IC5tYXJrZG93bi1wcmV2aWV3IHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBvdmVyZmxvdzogYXV0bztcXG4gICAgd2lkdGg6IDQwZW07XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgIG1heC13aWR0aDogdW5zZXQ7XFxuICAgIG1pbi13aWR0aDogdW5zZXQ7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgICAuZmlsZS1yZW5kZXItLWRvY3VtZW50IC5tYXJrZG93bi1wcmV2aWV3IHtcXG4gICAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5maWxlLXJlbmRlcl9faGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBmbGV4LXdyYXA6IHdyYXA7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX3ZpZXdlciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTsgfVxcblxcbi5maWxlLXJlbmRlcl9fdmlld2VyIGlmcmFtZSxcXG4gIC5maWxlLXJlbmRlcl9fdmlld2VyIHdlYnZpZXcsXFxuICAuZmlsZS1yZW5kZXJfX3ZpZXdlciBpbWcge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBvYmplY3QtZml0OiBjb250YWluOyB9XFxuXFxuLmZpbGUtcmVuZGVyX192aWV3ZXIgdmlkZW8ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX3ZpZXdlciAudmlkZW8tanMudmpzLWZ1bGxzY3JlZW4udmpzLXVzZXItaW5hY3RpdmUudmpzLXBsYXlpbmcgdmlkZW8ge1xcbiAgICBjdXJzb3I6IG5vbmU7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX3ZpZXdlci0taWZyYW1lIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAvKnRoaXMgZWxpbWluYXRlcyBleHRyYSBoZWlnaHQgZnJvbSB3aGl0ZXNwYWNlLCBpZiBzb21lb25lIGVkaXRzIHRoaXMgd2l0aCBhIGJldHRlciB0ZWNobmlxdWUsIHRlbGwgSmVyZW15Ki9cXG4gIC8qXFxuICBpZGVhbGx5IGlmcmFtZXMgd291bGQgZHluYW1pY2xseSBncm93LCBzZWUgPElmcmFtZVJlYWN0PiBmb3IgYSBzdGFydCBhdCB0aGlzXFxuICBmb3Igbm93LCBzaW5jZSB3ZSBkb24ndCBrbm93IHNpemUsIGxldCdzIG1ha2UgYXMgbGFyZ2UgYXMgd2UgY2FuIHdpdGhvdXQgYmVpbmcgbGFyZ2VyIHRoYW4gYXZhaWxhYmxlIGFyZWFcXG4gICovIH1cXG5cXG4uZmlsZS1yZW5kZXJfX3ZpZXdlci0taWZyYW1lIGlmcmFtZSB7XFxuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0tc3BhY2luZy1tZWRpdW0pICogMik7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX2NvbnRlbnQsIC5Db2RlTWlycm9yIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBtYXgtd2lkdGg6IDEwMHZ3OyB9XFxuXFxuLkNvZGVNaXJyb3IgLmNtLWludmFsaWRjaGFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG5cXG4uQ29kZU1pcnJvciAuQ29kZU1pcnJvciAuQ29kZU1pcnJvci1saW5lcyB7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKSAwOyB9XFxuXFxuLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItY29kZSB7XFxuICBmb250LWZhbWlseTogXFxcIkZpcmEgQ29kZVxcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZTtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjFyZW07IH1cXG5cXG4uQ29kZU1pcnJvciAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMSk7XFxuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQpO1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLkNvZGVNaXJyb3IgLkNvZGVNaXJyb3ItbGluZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5Db2RlTWlycm9yIC5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNSk7IH1cXG5cXG4udmlkZW8tanMge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7IH1cXG5cXG4udmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBub25lOyB9XFxuXFxuLnZpZGVvLWpzIC52anMtbW9kYWwtZGlhbG9nIC52anMtbW9kYWwtZGlhbG9nLWNvbnRlbnQge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHBhZGRpbmctdG9wOiA1cmVtO1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgLnZqcy1wYXVzZWQgLnZqcy1iaWctcGxheS1idXR0b24sXFxuICAudmpzLXBhdXNlZC52anMtaGFzLXN0YXJ0ZWQgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBibG9jazsgfSB9XFxuXFxuLmZpbGUtcmVuZGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtcmFkaXVzKTsgfVxcblxcbi5maWxlLXJlbmRlciAudmlkZW8tanMge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxcblxcbi5maWxlLXJlbmRlciAudmlkZW8tanMgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICAgIHotaW5kZXg6IDI7IH1cXG5cXG4uZmlsZS1yZW5kZXIgLnZpZGVvLWpzIC52anMtYmlnLXBsYXktYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciB7XFxuICAgICAgICBkaXNwbGF5OiBub25lOyB9XFxuXFxuLmZpbGUtcmVuZGVyX19lbWJlZCB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvc2l0aW9uOiBmaXhlZDsgfVxcblxcbi5maWxlLXJlbmRlcl9fZW1iZWQgLnZpZGVvLWpzIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX2VtYmVkIC52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbiB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbiAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICAgIHotaW5kZXg6IDI7IH1cXG5cXG4uZmlsZS1yZW5kZXJfX2VtYmVkIC52aWRlby1qcyAudmpzLWJpZy1wbGF5LWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxcblxcbi5maWxlLXJlbmRlcl9fZW1iZWQgLnZpZGVvLWpzLnZqcy1wYXVzZWQgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XFxuXFxuLmZpbGUtcmVuZGVyX19lbWJlZCAudmlkZW8tanM6aG92ZXIgLnZqcy1iaWctcGxheS1idXR0b24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTsgfVxcblxcbi52aWRlby1vdmVybGF5X193cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbiAgei1pbmRleDogOTk5O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4udmlkZW8tb3ZlcmxheV9fd3JhcHBlciAuYnV0dG9uLS11cmktaW5kaWNhdG9yIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMyk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLnZpZGVvLW92ZXJsYXlfX3dyYXBwZXIge1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuICAgICAgLnZpZGVvLW92ZXJsYXlfX3dyYXBwZXIgLmJ1dHRvbixcXG4gICAgICAudmlkZW8tb3ZlcmxheV9fd3JhcHBlciAudmlkZW8tb3ZlcmxheV9fc3VidGl0bGUsXFxuICAgICAgLnZpZGVvLW92ZXJsYXlfX3dyYXBwZXIgLnZpZGVvLW92ZXJsYXlfX2FjdGlvbnMge1xcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfSB9XFxuXFxuLnZpZGVvLW92ZXJsYXlfX3RpdGxlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC10aXRsZSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbGlnaHQpO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLnZpZGVvLW92ZXJsYXlfX3RpdGxlIHtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LW1lZGl1bSk7IH0gfVxcblxcbi52aWRlby1vdmVybGF5X19zdWJ0aXRsZSB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zKTtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1tZWRpdW0pIDA7XFxuICBsaW5lLWhlaWdodDogMTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAudmlkZW8tb3ZlcmxheV9fc3VidGl0bGUge1xcbiAgICAgIG1hcmdpbjogMDsgfSB9XFxuXFxuLnZpZGVvLW92ZXJsYXlfX2FjdGlvbnMge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4udmlkZW8tb3ZlcmxheV9fYWN0aW9ucyAuYnV0dG9uLS1saW5rLCAudmlkZW8tb3ZlcmxheV9fYWN0aW9ucyAuYnV0dG9uLS11cmktaW5kaWNhdG9yLCAudmlkZW8tb3ZlcmxheV9fYWN0aW9ucyAubWFya2Rvd24tcHJldmlldyBhLCAubWFya2Rvd24tcHJldmlldyAudmlkZW8tb3ZlcmxheV9fYWN0aW9ucyBhLCAudmlkZW8tb3ZlcmxheV9fYWN0aW9ucyAudGFiIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAudmlkZW8tb3ZlcmxheV9fYWN0aW9ucyB7XFxuICAgICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbmlucHV0LXN1Ym1pdCwgLmlucHV0LXN1Ym1pdCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuaW5wdXRbdHlwZT0nbnVtYmVyJ10ge1xcbiAgd2lkdGg6IDhlbTsgfVxcblxcbmZpZWxkc2V0LWdyb3VwICsgZmllbGRzZXQtZ3JvdXAsIC5maWVsZHNldC1ncm91cCArIGZpZWxkc2V0LWdyb3VwLCBmaWVsZHNldC1ncm91cCArIC5maWVsZHNldC1ncm91cCwgLmZpZWxkc2V0LWdyb3VwICsgLmZpZWxkc2V0LWdyb3VwIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQsIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cXG5cXG5maWVsZHNldC1ncm91cC5maWVsZHNldC1ncm91cC0tc211c2hlZCBmaWVsZHNldC1zZWN0aW9uLCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgZmllbGRzZXQtc2VjdGlvbiwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgLmZpZWxkc2V0LXNlY3Rpb24sIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCAuZmllbGRzZXQtc2VjdGlvbiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtYXJnaW46IDA7IH1cXG5cXG5maWVsZHNldC1ncm91cC5maWVsZHNldC1ncm91cC0tc211c2hlZCBmaWVsZHNldC1zZWN0aW9uOmZpcnN0LWNoaWxkIGlucHV0LCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgZmllbGRzZXQtc2VjdGlvbjpmaXJzdC1jaGlsZCBpbnB1dCwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgLmZpZWxkc2V0LXNlY3Rpb246Zmlyc3QtY2hpbGQgaW5wdXQsIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCAuZmllbGRzZXQtc2VjdGlvbjpmaXJzdC1jaGlsZCBpbnB1dCxcXG4gICAgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgZmllbGRzZXQtc2VjdGlvbjpmaXJzdC1jaGlsZCBzZWxlY3QsXFxuICAgIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCBmaWVsZHNldC1zZWN0aW9uOmZpcnN0LWNoaWxkIHNlbGVjdCxcXG4gICAgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgLmZpZWxkc2V0LXNlY3Rpb246Zmlyc3QtY2hpbGQgc2VsZWN0LFxcbiAgICAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgLmZpZWxkc2V0LXNlY3Rpb246Zmlyc3QtY2hpbGQgc2VsZWN0IHtcXG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XFxuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7IH1cXG5cXG5maWVsZHNldC1ncm91cC5maWVsZHNldC1ncm91cC0tc211c2hlZCBmaWVsZHNldC1zZWN0aW9uOm50aC1vZi10eXBlKDIpIGlucHV0LCAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgZmllbGRzZXQtc2VjdGlvbjpudGgtb2YtdHlwZSgyKSBpbnB1dCwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgLmZpZWxkc2V0LXNlY3Rpb246bnRoLW9mLXR5cGUoMikgaW5wdXQsIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCAuZmllbGRzZXQtc2VjdGlvbjpudGgtb2YtdHlwZSgyKSBpbnB1dCxcXG4gICAgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgZmllbGRzZXQtc2VjdGlvbjpudGgtb2YtdHlwZSgyKSBzZWxlY3QsXFxuICAgIC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZHNldC1ncm91cCBmaWVsZHNldC1zZWN0aW9uOm50aC1vZi10eXBlKDIpIHNlbGVjdCxcXG4gICAgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgLmZpZWxkc2V0LXNlY3Rpb246bnRoLW9mLXR5cGUoMikgc2VsZWN0LFxcbiAgICAuZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQuZmllbGRzZXQtZ3JvdXAgLmZpZWxkc2V0LXNlY3Rpb246bnRoLW9mLXR5cGUoMikgc2VsZWN0IHtcXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IH1cXG5cXG5maWVsZHNldC1ncm91cC5maWVsZHNldC1ncm91cC0tc211c2hlZC5maWVsZGdyb3VwLS1wYWdpbmF0ZSwgLmZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkLmZpZWxkZ3JvdXAtLXBhZ2luYXRlLmZpZWxkc2V0LWdyb3VwIHtcXG4gICAgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNpbmctbGFyZ2UpO1xcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxcblxcbmZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1kaXNhYmxlZC1wcmVmaXgsIC5maWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4LmZpZWxkc2V0LWdyb3VwIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxcblxcbmZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1kaXNhYmxlZC1wcmVmaXggbGFiZWwsIC5maWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4LmZpZWxkc2V0LWdyb3VwIGxhYmVsIHtcXG4gICAgbWluLWhlaWdodDogMThweDtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgIHdpZHRoOiAwOyB9XFxuXFxuZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeCBmaWVsZHNldC1zZWN0aW9uOmZpcnN0LWNoaWxkIC5mb3JtLWZpZWxkX19wcmVmaXgsIC5maWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4LmZpZWxkc2V0LWdyb3VwIGZpZWxkc2V0LXNlY3Rpb246Zmlyc3QtY2hpbGQgLmZvcm0tZmllbGRfX3ByZWZpeCwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeCAuZmllbGRzZXQtc2VjdGlvbjpmaXJzdC1jaGlsZCAuZm9ybS1maWVsZF9fcHJlZml4LCAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeC5maWVsZHNldC1ncm91cCAuZmllbGRzZXQtc2VjdGlvbjpmaXJzdC1jaGlsZCAuZm9ybS1maWVsZF9fcHJlZml4IHtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgcGFkZGluZzogMC41cmVtO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW5wdXQpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZDtcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgICBib3JkZXItcmlnaHQ6IDA7XFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItaW5wdXQtYm9yZGVyKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaGVscCk7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWlucHV0LWJnKTtcXG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItdGV4dC1oZWxwKTsgfVxcblxcbmZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1kaXNhYmxlZC1wcmVmaXggZmllbGRzZXQtc2VjdGlvbjpsYXN0LWNoaWxkLCAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeC5maWVsZHNldC1ncm91cCBmaWVsZHNldC1zZWN0aW9uOmxhc3QtY2hpbGQsIGZpZWxkc2V0LWdyb3VwLmZpZWxkc2V0LWdyb3VwLS1kaXNhYmxlZC1wcmVmaXggLmZpZWxkc2V0LXNlY3Rpb246bGFzdC1jaGlsZCwgLmZpZWxkc2V0LWdyb3VwLS1kaXNhYmxlZC1wcmVmaXguZmllbGRzZXQtZ3JvdXAgLmZpZWxkc2V0LXNlY3Rpb246bGFzdC1jaGlsZCB7XFxuICAgIHdpZHRoOiAxMDAlOyB9XFxuXFxuZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeCBmaWVsZHNldC1zZWN0aW9uOmxhc3QtY2hpbGQgaW5wdXQsIC5maWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4LmZpZWxkc2V0LWdyb3VwIGZpZWxkc2V0LXNlY3Rpb246bGFzdC1jaGlsZCBpbnB1dCwgZmllbGRzZXQtZ3JvdXAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeCAuZmllbGRzZXQtc2VjdGlvbjpsYXN0LWNoaWxkIGlucHV0LCAuZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeC5maWVsZHNldC1ncm91cCAuZmllbGRzZXQtc2VjdGlvbjpsYXN0LWNoaWxkIGlucHV0IHtcXG4gICAgICBib3JkZXItbGVmdDogMDtcXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1ib3JkZXIpO1xcbiAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy14c21hbGwpOyB9XFxuXFxuLmZvcm0tZmllbGQtLWNvcHlhYmxlIHtcXG4gIHBhZGRpbmc6IDAuMnJlbSAwLjc1cmVtO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB1c2VyLXNlbGVjdDogdGV4dDtcXG4gIGN1cnNvcjogZGVmYXVsdDsgfVxcblxcbi5mb3JtLWZpZWxkLS1zaG9ydCB7XFxuICB3aWR0aDogMjVlbTsgfVxcblxcbi5mb3JtLWZpZWxkLS1wcmljZS1hbW91bnQge1xcbiAgd2lkdGg6IDdlbTsgfVxcblxcbi5mb3JtLWZpZWxkLS1hZGRyZXNzIHtcXG4gIG1pbi13aWR0aDogMThlbTsgfVxcblxcbi5mb3JtLWZpZWxkX19oZWxwIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKTtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmZvcm0tZmllbGRfX2hlbHAgKyAuY2hlY2tib3gsXFxuLmZvcm0tZmllbGRfX2hlbHAgKyAucmFkaW8ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uZm9ybS1maWVsZF9fY29uanVjdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMXJlbTsgfVxcblxcbmZpZWxkc2V0LXNlY3Rpb24gLmZvcm0tZmllbGRfX2ludGVybmFsLW9wdGlvbiwgLmZpZWxkc2V0LXNlY3Rpb24gLmZvcm0tZmllbGRfX2ludGVybmFsLW9wdGlvbiB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAyLjJyZW07IH1cXG5cXG5maWVsZHNldC1zZWN0aW9uIC5mb3JtLWZpZWxkX19pbnRlcm5hbC1vcHRpb246Zmlyc3Qtb2YtdHlwZSwgLmZpZWxkc2V0LXNlY3Rpb24gLmZvcm0tZmllbGRfX2ludGVybmFsLW9wdGlvbjpmaXJzdC1vZi10eXBlIHtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uaGVhZGVyIHtcXG4gIHotaW5kZXg6IDI7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWhlYWRlci1iYWNrZ3JvdW5kKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtYm94LXNoYWRvdyk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYm9keSk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnOyB9XFxuXFxuLmhlYWRlciA+ICoge1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTsgfVxcblxcbi5oZWFkZXItLW1pbmltYWwge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTsgfVxcblxcbi5oZWFkZXItLW1hYyB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tbWFjLXRpdGxlYmFyLWhlaWdodCk7IH1cXG5cXG4uaGVhZGVyLS1ub2F1dGgtd2ViIC5oZWFkZXJfX25hdmlnYXRpb24taXRlbS0taWNvbiB7XFxuICBtYXJnaW46IDAgMTBweDsgfVxcblxcbi5oZWFkZXJfX2NvbnRlbnRzIHtcXG4gIG1heC13aWR0aDogdmFyKC0tcGFnZS1tYXgtd2lkdGgpO1xcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpIC0gMXB4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuaGVhZGVyX19jb250ZW50cyB7XFxuICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24ge1xcbiAgZmxleDogMTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW5wdXQpOyB9XFxuXFxuLmhlYWRlcl9fbWVudSB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuLmhlYWRlcl9fbWVudSA+IC5idXR0b246b25seS1jaGlsZCB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5oZWFkZXJfX21lbnUge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxcblxcbi5oZWFkZXJfX21lbnUtLW1vYmlsZSB7XFxuICBkaXNwbGF5OiBub25lOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5oZWFkZXJfX21lbnUtLW1vYmlsZSB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcbiAgICAgIC5oZWFkZXJfX21lbnUtLW1vYmlsZSBzdmcge1xcbiAgICAgICAgc3Ryb2tlOiB2YXIoLS1jb2xvci10ZXh0KTsgfSB9XFxuXFxuLmhlYWRlcl9fbWVudS0td2l0aC1iYWxhbmNlIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24tYXJyb3dzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtIHtcXG4gIGhlaWdodDogdmFyKC0taGVpZ2h0LWJ1dHRvbik7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7IH1cXG5cXG4uaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0gc3ZnIHtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci10ZXh0KTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24taXRlbTpob3ZlciB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1saW5rLWFjdGl2ZSk7IH1cXG5cXG4uaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW06aG92ZXIgc3ZnIHtcXG4gICAgICBzdHJva2U6IHZhcigtLWNvbG9yLWxpbmstYWN0aXZlKTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24taXRlbS0tYmFjayxcXG4uaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLWZvcndhcmQsXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uIHtcXG4gIHdpZHRoOiB2YXIoLS1oZWlnaHQtYnV0dG9uKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWhlYWRlci1idXR0b24pO1xcbiAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1iYWNrOmhvdmVyLFxcbiAgLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1mb3J3YXJkOmhvdmVyLFxcbiAgLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1hbHQpOyB9XFxuXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1iYWNrOmZvY3VzLFxcbiAgLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1mb3J3YXJkOmZvY3VzLFxcbiAgLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uOmZvY3VzIHtcXG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWNvbG9yLWZvY3VzKTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24taXRlbS0tYmFjayBzcGFuLFxcbiAgLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1mb3J3YXJkIHNwYW4sXFxuICAuaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLWljb24gc3BhbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1sYnJ5IHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1sYnJ5IC5sYnJ5LWljb24ge1xcbiAgICBoZWlnaHQ6IDJyZW07XFxuICAgIHdpZHRoOiAycmVtOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAuaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLWJ1dHRvbi1tb2JpbGUgLmJ1dHRvbl9fbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4uaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLWJhbGFuY2Uge1xcbiAgbWFyZ2luOiAwIHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24tZHJvcGRvd24ge1xcbiAgcGFkZGluZzogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWhlYWRlci1iYWNrZ3JvdW5kKTsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24tYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKSB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxcblxcbi5oZWFkZXJfX25hdmlnYXRpb24tYnV0dG9uOmhvdmVyIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1tZW51LWJhY2tncm91bmQtLWFjdGl2ZSk7IH1cXG5cXG4uaGVhZGVyX19uYXZpZ2F0aW9uLWJ1dHRvbi1oZWxwIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4uaWNvbl9fd3JhcHBlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogMS41cmVtO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBoZWlnaHQ6IDMuNXJlbTtcXG4gIHdpZHRoOiAzLjVyZW07XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKDMuNXJlbSAvIDIpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XFxuXFxuLmljb25fX3dyYXBwZXIgLmljb24ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItcHJpbWFyeSk7IH1cXG5cXG4uaWNvbl9fd3JhcHBlci0tSGVhcnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZm9sbG93LWJnKTsgfVxcblxcbi5pY29uX193cmFwcGVyLS1IZWFydCAuaWNvbiB7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItZm9sbG93LWljb24pOyB9XFxuXFxuLmljb25fX3dyYXBwZXItLUV5ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci12aWV3LWJnKTsgfVxcblxcbi5pY29uX193cmFwcGVyLS1FeWUgLmljb24ge1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXZpZXctaWNvbik7IH1cXG5cXG4uaWNvbi0taGVscCB7XFxuICBjb2xvcjogdmFyKC0tY29sb3Itc3VidGl0bGUpO1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmcteHNtYWxsKTtcXG4gIG9wYWNpdHk6IDAuNztcXG4gIHRvcDogMnB4OyB9XFxuXFxuLmljb24tLWhpZGRlbiB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLm1haW4td3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cXG4ubWFpbi13cmFwcGVyLS1tYWMge1xcbiAgbWFyZ2luLXRvcDogY2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLW1hYy10aXRsZWJhci1oZWlnaHQpKTsgfVxcblxcbi5tYWluLXdyYXBwZXJfX2lubmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7XFxuICBtYXgtd2lkdGg6IHZhcigtLXBhZ2UtbWF4LXdpZHRoKTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0taGVhZGVyLWhlaWdodCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAubWFpbi13cmFwcGVyX19pbm5lciB7XFxuICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH0gfVxcblxcbi5tYWluIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaWRlLW5hdi13aWR0aCkgLSB2YXIoLS1zcGFjaW5nLWxhcmdlKSk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLm1haW4ge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XFxuXFxuLm1haW4tLWF1dGgtcGFnZSB7XFxuICBtYXgtd2lkdGg6IDYwcmVtO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tYWluLXBhZGRpbmcpO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cXG5cXG4ubWFpbi0tZW1wdHkge1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWFyZ2luLXRvcDogMTAwcHg7XFxuICBtYXJnaW4tYm90dG9tOiAxMDBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcblxcbi5tYWluLS1lbXB0eSA+IC5jYXJkLCAubWFpbi0tZW1wdHkgPiAuY2FyZC0tY2xhaW0tcHJldmlldy13cmFwLCAubWFpbi0tZW1wdHkgPiAuY29udGVudF9fdmlld2VyLCAubWFpbi0tZW1wdHkgPiAubW9kYWwge1xcbiAgICB3aWR0aDogMTAwJTsgfVxcblxcbi5tYWluLS1sYXVuY2hpbmcge1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpOyB9XFxuXFxuLm1haW4tLWNvbnRhaW5lZCB7XFxuICBtYXJnaW46IGF1dG87XFxuICBtYXJnaW4tdG9wOiAycmVtO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIG1heC13aWR0aDogNDByZW07XFxuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XFxuXFxuLm1haW4tLWNvbnRhaW5lZCA+ICoge1xcbiAgICB3aWR0aDogMTAwJTsgfVxcblxcbi5tYWluLS1mdWxsLXdpZHRoIHtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuXFxuLkNvZGVNaXJyb3Ige1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItaW5wdXQtYm9yZGVyKTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaW5wdXQtYmcpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWlucHV0KTsgfVxcblxcbi5Db2RlTWlycm9yIC5Db2RlTWlycm9yLXBsYWNlaG9sZGVyIHtcXG4gICAgb3BhY2l0eTogMC41OyB9XFxuXFxuLkNvZGVNaXJyb3Itd3JhcCB7XFxuICBvdmVyZmxvdzogaGlkZGVuOyB9XFxuXFxuLmVkaXRvci10b29sYmFyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWhlYWRlci1iYWNrZ3JvdW5kKTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItaW5wdXQtYm9yZGVyKTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1pbnB1dC1ib3JkZXIpO1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1pbnB1dC1ib3JkZXIpO1xcbiAgb3BhY2l0eTogMTsgfVxcblxcbi5lZGl0b3ItdG9vbGJhcjpob3ZlciB7XFxuICAgIG9wYWNpdHk6IDE7IH1cXG5cXG4uZWRpdG9yLXRvb2xiYXIuZGlzYWJsZWQtZm9yLXByZXZpZXcgYTpub3QoLm5vLWRpc2FibGUpIHtcXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgb3BhY2l0eTogMC4zOyB9XFxuXFxuLmVkaXRvci10b29sYmFyLmZ1bGxzY3JlZW46OmJlZm9yZSwgLmVkaXRvci10b29sYmFyLmZ1bGxzY3JlZW46OmFmdGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTsgfVxcblxcbi5lZGl0b3ItdG9vbGJhciBidXR0b24ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItaGVhZGVyLWxpbmspO1xcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsgfVxcblxcbi5lZGl0b3ItdG9vbGJhciBpLnNlcGFyYXRvciB7XFxuICAgIGJvcmRlcjogbm9uZTsgfVxcblxcbi5mb3JtLWZpZWxkLS1TaW1wbGVNREUge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uZm9ybS1maWVsZC0tU2ltcGxlTURFIC5lZGl0b3ItdG9vbGJhciBidXR0b246bm90KC5idXR0b24pIHtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50OyB9XFxuXFxuLmZvcm0tZmllbGQtLVNpbXBsZU1ERSAuZWRpdG9yLXRvb2xiYXIgYnV0dG9uOm5vdCguYnV0dG9uKTpob3ZlciB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWhlYWRlci1saW5rLWFjdGl2ZSk7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyA+IDpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tdG9wOiAwOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgPiAqOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgLm1hcmtkb3duLXByZXZpZXcge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtYmFzZSk7IH0gfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGgxLFxcbi5tYXJrZG93bi1wcmV2aWV3IGgyLFxcbi5tYXJrZG93bi1wcmV2aWV3IGgzLFxcbi5tYXJrZG93bi1wcmV2aWV3IGg0LFxcbi5tYXJrZG93bi1wcmV2aWV3IGg1LFxcbi5tYXJrZG93bi1wcmV2aWV3IGg2IHtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGgxOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbiAgLm1hcmtkb3duLXByZXZpZXcgaDI6bm90KDpmaXJzdC1jaGlsZCksXFxuICAubWFya2Rvd24tcHJldmlldyBoMzpub3QoOmZpcnN0LWNoaWxkKSxcXG4gIC5tYXJrZG93bi1wcmV2aWV3IGg0Om5vdCg6Zmlyc3QtY2hpbGQpLFxcbiAgLm1hcmtkb3duLXByZXZpZXcgaDU6bm90KDpmaXJzdC1jaGlsZCksXFxuICAubWFya2Rvd24tcHJldmlldyBoNjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgaDEge1xcbiAgZm9udC1zaXplOiAxLjdlbTsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGgyIHtcXG4gIGZvbnQtc2l6ZTogMS41ZW07IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyBoMyB7XFxuICBmb250LXNpemU6IDEuNGVtOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgaDQge1xcbiAgZm9udC1zaXplOiAxLjNlbTsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGg1IHtcXG4gIGZvbnQtc2l6ZTogMS4yZW07IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyBoNiB7XFxuICBmb250LXNpemU6IDFlbTsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IHAgc3ZnIHtcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMXB4OyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgcCxcXG4ubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlLFxcbi5tYXJrZG93bi1wcmV2aWV3IGRsLFxcbi5tYXJrZG93bi1wcmV2aWV3IHVsLFxcbi5tYXJrZG93bi1wcmV2aWV3IG9sLFxcbi5tYXJrZG93bi1wcmV2aWV3IHByZSxcXG4ubWFya2Rvd24tcHJldmlldyB0YWJsZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyB0YWJsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAxLjJyZW07XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyB0YWJsZSB0ciB0ZCxcXG4gIC5tYXJrZG93bi1wcmV2aWV3IHRhYmxlIHRyIHRoLFxcbiAgLm1hcmtkb3duLXByZXZpZXcgdGFibGUgdHIgdGQ6Zmlyc3Qtb2YtdHlwZSxcXG4gIC5tYXJrZG93bi1wcmV2aWV3IHRhYmxlIHRyIHRoOmZpcnN0LW9mLXR5cGUsXFxuICAubWFya2Rvd24tcHJldmlldyB0YWJsZSB0ciB0ZDpsYXN0LW9mLXR5cGUsXFxuICAubWFya2Rvd24tcHJldmlldyB0YWJsZSB0ciB0aDpsYXN0LW9mLXR5cGUge1xcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKSB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyB0YWJsZSB0aCB7XFxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xcmVtO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgdGFibGUgdHI6bm90KDpsYXN0LW9mLXR5cGUpIHRkIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyBpbWcge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIG1heC1oZWlnaHQ6IHZhcigtLWlubGluZS1wbGF5ZXItbWF4LWhlaWdodCk7XFxuICBvYmplY3QtcG9zaXRpb246IGxlZnQ7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLm1hcmtkb3duLXByZXZpZXcgaW1nIHtcXG4gICAgICBmb250LXNpemU6IDAuOGVtOyB9IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyBociB7XFxuICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAxcmVtOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgcHJlIHtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IHByZSBjb2RlIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyBjb2RlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsb2NrcXVvdGUpO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjJyZW07XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgcGFkZGluZzogY2FsYyh2YXIoLS1zcGFjaW5nLW1pbmlzY3VsZSkgLSA0cHgpIHZhcigtLXNwYWNpbmctbWluaXNjdWxlKTsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGEsXFxuLm1hcmtkb3duLXByZXZpZXcgYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IGEgLmJ1dHRvbl9fbGFiZWwsXFxuICAubWFya2Rvd24tcHJldmlldyBidXR0b24gLmJ1dHRvbl9fbGFiZWwge1xcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgYnV0dG9uIHtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgLnByZXZpZXctbGluayB7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAxcmVtIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7XFxuICBib3JkZXItbGVmdDogMC41cmVtIHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IC5wcmV2aWV3LWxpbmsgLmNsYWltLXByZXZpZXcge1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XFxuXFxuLm1hcmtkb3duLXByZXZpZXcgLnByZXZpZXctbGluayAubWVkaWFfX3N1YnRpdGxlLCAubWFya2Rvd24tcHJldmlldyAucHJldmlldy1saW5rIC5tZWRpYV9fc3VidGl0bGUtLWJldHdlZW4ge1xcbiAgICBkaXNwbGF5OiBibG9jazsgfVxcblxcbi5tYXJrZG93bi1wcmV2aWV3IC5wcmV2aWV3LWxpbmtfX3RodW1ibmFpbCB7XFxuICB3aWR0aDogMTJyZW07IH1cXG5cXG4ubWFya2Rvd24tcHJldmlldyAucHJldmlldy1saW5rX19kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5lZGl0b3ItcHJldmlldyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1iZyk7IH1cXG5cXG4ubWVkaWFfX3RodW1iIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtcmFkaXVzKTtcXG4gIG9iamVjdC1maXQ6IGNvdmVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcGxhY2Vob2xkZXItYmFja2dyb3VuZCk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxcblxcbi5tZWRpYV9fdGh1bWI6OmJlZm9yZSwgLm1lZGlhX190aHVtYjo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjsgfVxcblxcbi5tZWRpYV9fdGh1bWI6OmJlZm9yZSB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tYXNwZWN0LXJhdGlvLXN0YW5kYXJkKTsgfVxcblxcbi5tZWRpYV9fdGh1bWI6OmFmdGVyIHtcXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGRpc3BsYXk6IGJsb2NrOyB9XFxuXFxuLm1lZGlhX191cmksIC5tZWRpYV9fdXJpLS1pbmxpbmUsIC5tZWRpYV9fdXJpLS1yaWdodCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEzMCUpO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXhzbWFsbCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0aXRsZSk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLm1lZGlhX191cmksIC5tZWRpYV9fdXJpLS1pbmxpbmUsIC5tZWRpYV9fdXJpLS1yaWdodCB7XFxuICAgICAgcG9zaXRpb246IHN0YXRpYztcXG4gICAgICB0cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy14c21hbGwpOyB9IH1cXG5cXG4ubWVkaWFfX3VyaSAuaWNvbiwgLm1lZGlhX191cmktLWlubGluZSAuaWNvbiwgLm1lZGlhX191cmktLXJpZ2h0IC5pY29uIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXhzbWFsbCkvMjtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMDhyZW07IH1cXG5cXG4ubWVkaWFfX3VyaS0taW5saW5lIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfVxcblxcbi5tZWRpYV9fdXJpLS1yaWdodCB7XFxuICByaWdodDogMDsgfVxcblxcbi5tZWRpYV9fc3VidGl0bGUsIC5tZWRpYV9fc3VidGl0bGUtLWJldHdlZW4ge1xcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zbWFsbCk7IH1cXG5cXG4ubWVkaWFfX3N1YnRpdGxlIHN2ZywgLm1lZGlhX19zdWJ0aXRsZS0tYmV0d2VlbiBzdmcge1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXRleHQtc3VidGl0bGUpOyB9XFxuXFxuLm1lZGlhX19zdWJ0aXRsZS0tYmV0d2VlbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLm1lZGlhX19pbmZvLXRleHQge1xcbiAgd29yZC1icmVhazogYnJlYWstd29yZDsgfVxcblxcbi5tZWRpYV9faW5mby10ZXh0Om5vdCg6bGFzdC1vZi10eXBlKSB7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi5tZWRpYV9faW5mby10ZXh0Lm1lZGlhX19pbmZvLXRleHQtLWNvbnN0cmFpbmVkIHtcXG4gICAgbWF4LXdpZHRoOiA1MHJlbTsgfVxcblxcbi5tZWRpYV9fYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLXRvcDogMDsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAubWVkaWFfX2FjdGlvbnMge1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gICAgICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG4gICAgICAubWVkaWFfX2FjdGlvbnMgPiAqIHtcXG4gICAgICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfSB9XFxuXFxuLyogVXNlZCB0byBkZXRlY3QgaW4gSmF2YVNjcmlwdCBpZiBhcHBzIGhhdmUgbG9hZGVkIHN0eWxlcyBvciBub3QuICovXFxuXFxuOnJvb3Qge1xcbiAgLS1yZWFjaC1tZW51LWJ1dHRvbjogMTsgfVxcblxcbltkYXRhLXJlYWNoLW1lbnVdIHtcXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6LWluZGV4OiAyO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LWJvZHkpOyB9XFxuXFxuW2RhdGEtcmVhY2gtbWVudS1saXN0XSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItbWVudS1iYWNrZ3JvdW5kKTtcXG4gIGJvcmRlci10b3A6IG5vbmU7IH1cXG5cXG5bZGF0YS1yZWFjaC1tZW51LWl0ZW1dIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgei1pbmRleDogMjsgfVxcblxcbltkYXRhLXJlYWNoLW1lbnUtaXRlbV06Zm9jdXMge1xcbiAgICBib3gtc2hhZG93OiBub25lOyB9XFxuXFxuW2RhdGEtcmVhY2gtbWVudS1pdGVtXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogaW5pdGlhbDsgfVxcblxcbltkYXRhLXJlYWNoLW1lbnUtaXRlbV0gLmljb24ge1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLW1lbnUtaWNvbik7IH1cXG5cXG5bZGF0YS1yZWFjaC1tZW51LWl0ZW1dW2RhdGEtc2VsZWN0ZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLW1lbnUtYmFja2dyb3VuZC0tYWN0aXZlKTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7IH1cXG5cXG5bZGF0YS1yZWFjaC1tZW51LWl0ZW1dW2RhdGEtc2VsZWN0ZWRdIC5pY29uIHtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1tZW51LWljb24tYWN0aXZlKTsgfVxcblxcbi5tZW51X19saXN0LCAubWVudV9fbGlzdC0taGVhZGVyLCAuaGVhZGVyX19uYXZpZ2F0aW9uLWRyb3Bkb3duIHtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKHZhcigtLXNwYWNpbmctbWVkaXVtKSAqIC0xKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtYm94LXNoYWRvdyk7XFxuICBhbmltYXRpb246IG1lbnUtYW5pbWF0ZS1pbiB2YXIoLS1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLWFuaW1hdGlvbi1zdHlsZSk7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsgfVxcblxcbi5tZW51X19saXN0LS1oZWFkZXIsIC5oZWFkZXJfX25hdmlnYXRpb24tZHJvcGRvd24ge1xcbiAgbWFyZ2luLXRvcDogMTlweDsgfVxcblxcbi5tZW51X19saW5rLCAubWVudV9fbGluay1oZWxwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4ubWVudV9fbGluayAuaWNvbiwgLm1lbnVfX2xpbmstaGVscCAuaWNvbiB7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItbWVudS1pY29uKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5tZW51X19saW5rIC5iYWRnZSwgLm1lbnVfX2xpbmstaGVscCAuYmFkZ2UsIC5tZW51X19saW5rIC5iYWRnZS0tdGFnLCAubWVudV9fbGluay1oZWxwIC5iYWRnZS0tdGFnLCAubWVudV9fbGluayAudGFnLCAubWVudV9fbGluay1oZWxwIC50YWcsIC5tZW51X19saW5rIC5iYWRnZS0tdGFnLW1hdHVyZSwgLm1lbnVfX2xpbmstaGVscCAuYmFkZ2UtLXRhZy1tYXR1cmUsIC5tZW51X19saW5rIC50YWctLW1hdHVyZSwgLm1lbnVfX2xpbmstaGVscCAudGFnLS1tYXR1cmUsIC5tZW51X19saW5rIC5iYWRnZS0tY29zdCwgLm1lbnVfX2xpbmstaGVscCAuYmFkZ2UtLWNvc3QsIC5tZW51X19saW5rIC5iYWRnZS0tZnJlZSwgLm1lbnVfX2xpbmstaGVscCAuYmFkZ2UtLWZyZWUsIC5tZW51X19saW5rIC5iYWRnZS0tYWxlcnQsIC5tZW51X19saW5rLWhlbHAgLmJhZGdlLS1hbGVydCB7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi5tZW51X19saW5rLWhlbHAge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaGVscCk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGwpO1xcbiAgcGFkZGluZy10b3A6IDA7IH1cXG5cXG4uUmVhY3RNb2RhbF9fQm9keS0tb3BlbiAjYXBwIHtcXG4gIGhlaWdodDogMTAwdmg7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47IH1cXG5cXG4ubW9kYWwtb3ZlcmxheSB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1vdmVybGF5KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHotaW5kZXg6IDk5OTk7IH1cXG5cXG4ubW9kYWwge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItbW9kYWwtYmFja2dyb3VuZCk7XFxuICBsaW5lLWhlaWdodDogMS41NTtcXG4gIG1pbi13aWR0aDogNTAwcHg7XFxuICBtYXgtd2lkdGg6IHZhcigtLW1vZGFsLXdpZHRoKTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyB9XFxuXFxuLm1vZGFsOmZvY3VzIHtcXG4gICAgYm94LXNoYWRvdzogbm9uZTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAubW9kYWwge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgICAgbWluLXdpZHRoOiBhdXRvO1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMDsgfVxcbiAgICAgIC5tb2RhbCAuY2FyZCwgLm1vZGFsIC5jYXJkLS1jbGFpbS1wcmV2aWV3LXdyYXAsIC5tb2RhbCAuY29udGVudF9fdmlld2VyLCAubW9kYWwgLm1vZGFsIHtcXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgICBib3JkZXI6IG5vbmU7IH1cXG4gICAgICAubW9kYWwgLm5hdmlnYXRpb24sIC5tb2RhbCAuYWRzLXdyYXBwZXIge1xcbiAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuICAgICAgICAubW9kYWwgLm5hdmlnYXRpb24gLm5hdmlnYXRpb24tbGlua3M6bm90KC5uYXZpZ2F0aW9uLWxpbmtzLS1zbWFsbCkgLm5hdmlnYXRpb24tbGluaywgLm1vZGFsIC5hZHMtd3JhcHBlciAubmF2aWdhdGlvbi1saW5rczpub3QoLm5hdmlnYXRpb24tbGlua3MtLXNtYWxsKSAubmF2aWdhdGlvbi1saW5rLCAubW9kYWwgLm5hdmlnYXRpb24gLm5hdmlnYXRpb24tbGlua3MtLXNtYWxsOm5vdCgubmF2aWdhdGlvbi1saW5rcy0tc21hbGwpIC5uYXZpZ2F0aW9uLWxpbmssIC5tb2RhbCAuYWRzLXdyYXBwZXIgLm5hdmlnYXRpb24tbGlua3MtLXNtYWxsOm5vdCgubmF2aWdhdGlvbi1saW5rcy0tc21hbGwpIC5uYXZpZ2F0aW9uLWxpbmsge1xcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtbGFyZ2UpO1xcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS0zKTtcXG4gICAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pIDA7IH0gfVxcblxcbi5tb2RhbC0tY2FyZC1pbnRlcm5hbCB7XFxuICBwYWRkaW5nOiAwOyB9XFxuXFxuLm1vZGFsLS1jYXJkLWludGVybmFsIC5jYXJkLCAubW9kYWwtLWNhcmQtaW50ZXJuYWwgLmNhcmQtLWNsYWltLXByZXZpZXctd3JhcCwgLm1vZGFsLS1jYXJkLWludGVybmFsIC5jb250ZW50X192aWV3ZXIsIC5tb2RhbC0tY2FyZC1pbnRlcm5hbCAubW9kYWwge1xcbiAgICBtYXJnaW46IDA7IH1cXG5cXG4uZXJyb3ItbW9kYWxfX2NvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2luZy1tZWRpdW0pIHZhcigtLXNwYWNpbmctbWVkaXVtKSB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uZXJyb3ItbW9kYWwge1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgd2lkdGg6IHZhcigtLW1vZGFsLXdpZHRoKTtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgfVxcblxcbi5lcnJvci1tb2RhbF9fZXJyb3ItbGlzdCB7XFxuICBtYXgtd2lkdGg6IHZhcigtLW1vZGFsLXdpZHRoKTtcXG4gIG1heC1oZWlnaHQ6IDQwMHB4O1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWVycm9yKTtcXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB9XFxuXFxuLm5hZyB7XFxuICB6LWluZGV4OiA5OTk5O1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1uYWcpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcblxcbi5uYWcgLmJ1dHRvbi0tbGluaywgLm5hZyAuYnV0dG9uLS11cmktaW5kaWNhdG9yLCAubmFnIC5tYXJrZG93bi1wcmV2aWV3IGEsIC5tYXJrZG93bi1wcmV2aWV3IC5uYWcgYSwgLm5hZyAudGFiIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUpO1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAubmFnIHtcXG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9IH1cXG5cXG4ubmFnLS1pbmxpbmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiBhdXRvO1xcbiAgei1pbmRleDogMSAhaW1wb3J0YW50O1xcbiAgLyogYm9vb29vb28gKi8gfVxcblxcbi5uYWctLWhlbHBmdWwge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZSk7XFxuICB6LWluZGV4OiAxMDAwMDsgfVxcblxcbi5uYWctLWVycm9yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWVycm9yKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWVycm9yKTtcXG4gIHotaW5kZXg6IDEwMDAwMTsgfVxcblxcbi5uYWdfX21lc3NhZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC5uYWdfX21lc3NhZ2U6OmFmdGVyIHtcXG4gICAgICBjb250ZW50OiAnJztcXG4gICAgICBkaXNwbGF5OiBibG9jazsgfSB9XFxuXFxuLm5hZ19fYnV0dG9uIHtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3Itd2hpdGUpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1taW5pc2N1bGUpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTsgfVxcblxcbi5uYWdfX2J1dHRvbjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLW5hZyk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLm5hZ19fYnV0dG9uIHtcXG4gICAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfSB9XFxuXFxuLm5hZ19fYnV0dG9uLS1oZWxwZnVsOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hbHQpO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7IH1cXG5cXG4ubmFnX19idXR0b24tLWVycm9yIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWVycm9yKTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7IH1cXG5cXG4ubmFnX19idXR0b24tLWVycm9yOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1lcnJvcik7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZSk7IH1cXG5cXG4ubmFnX19jbG9zZSB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXI6IG5vbmU7IH1cXG5cXG4ubmFnX19jbG9zZSBzdmcge1xcbiAgICBzdHJva2Utd2lkdGg6IDRweDsgfVxcblxcbi5uYXZpZ2F0aW9uLCAuYWRzLXdyYXBwZXIge1xcbiAgd2lkdGg6IHZhcigtLXNpZGUtbmF2LXdpZHRoKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1ib2R5KTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLW1haW4tcGFkZGluZyk7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLm5hdmlnYXRpb24sIC5hZHMtd3JhcHBlciB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XFxuXFxuLm5hdmlnYXRpb24gKyAuYWRzLXdyYXBwZXIsIC5hZHMtd3JhcHBlciArIC5hZHMtd3JhcHBlciB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbi5uYXZpZ2F0aW9uX19zZWNvbmRhcnkge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4ubmF2aWdhdGlvbi1saW5rcywgLm5hdmlnYXRpb24tbGlua3MtLXNtYWxsIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cXG5cXG4ubmF2aWdhdGlvbi1saW5rcy0tc21hbGwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfVxcblxcbi5uYXZpZ2F0aW9uLWxpbmtzX19pbmxpbmUge1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGModmFyKC0tc3BhY2luZy1tZWRpdW0pICsgdmFyKC0tc3BhY2luZy1zbWFsbCkpOyB9XFxuXFxuLm5hdmlnYXRpb24tbGlua19fd3JhcHBlciB7XFxuICBtYXJnaW46IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKSAwOyB9XFxuXFxuLm5hdmlnYXRpb24tbGluayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1uYXZpZ2F0aW9uLWxpbmspO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4ubmF2aWdhdGlvbi1saW5rIC5pY29uIHtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1saW5rLWljb24pOyB9XFxuXFxuLm5hdmlnYXRpb24tbGluazpob3ZlciwgLm5hdmlnYXRpb24tbGluay5uYXZpZ2F0aW9uLWxpbmstLWFjdGl2ZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1saW5rLWFjdGl2ZSk7IH1cXG5cXG4ubmF2aWdhdGlvbi1saW5rOmhvdmVyIC5pY29uLCAubmF2aWdhdGlvbi1saW5rLm5hdmlnYXRpb24tbGluay0tYWN0aXZlIC5pY29uIHtcXG4gICAgICBzdHJva2U6IHZhcigtLWNvbG9yLWxpbmstYWN0aXZlKTsgfVxcblxcbi5uYXZpZ2F0aW9uLWxpbms6Zm9jdXMge1xcbiAgICBib3gtc2hhZG93OiBub25lOyB9XFxuXFxuLnBhZ2luYXRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cXG5cXG4ucGFnaW5hdGlvbiArIC5mb3JtLWZpZWxkIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAucGFnaW5hdGlvbiB7XFxuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfSB9XFxuXFxuLnBhZ2luYXRpb25fX2l0ZW0ge1xcbiAgd2lkdGg6IDNyZW07XFxuICBoZWlnaHQ6IDNyZW07XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cXG5cXG4ucGFnaW5hdGlvbl9faXRlbTpub3QoLnBhZ2luYXRpb25fX2l0ZW0tLXNlbGVjdGVkKTpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJ1dHRvbi1zZWNvbmRhcnktYmcpOyB9XFxuXFxuLnBhZ2luYXRpb25fX2l0ZW06bm90KC5wYWdpbmF0aW9uX19pdGVtLS1zZWxlY3RlZCk6bm90KC5wYWdpbmF0aW9uX19pdGVtLS1icmVhayk6bm90KC5kaXNhYmxlZCk6aG92ZXIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXNlY29uZGFyeS10ZXh0KTsgfVxcblxcbi5wYWdpbmF0aW9uX19pdGVtOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tc2VsZWN0ZWQpOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tYnJlYWspOm5vdCguZGlzYWJsZWQpOmhvdmVyOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1idXR0b24tc2Vjb25kYXJ5LWJnLWhvdmVyKTsgfVxcblxcbi5wYWdpbmF0aW9uX19pdGVtOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tcHJldmlvdXMpOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tbmV4dCkge1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICAgIGxpbmUtaGVpZ2h0OiAzcmVtO1xcbiAgICBtYXJnaW46IDAgMC41ZW07IH1cXG5cXG4ucGFnaW5hdGlvbl9faXRlbTpub3QoLnBhZ2luYXRpb25fX2l0ZW0tLWJyZWFrKTpub3QoLmRpc2FibGVkKSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxcblxcbi5wYWdpbmF0aW9uX19pdGVtID4gYSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBoZWlnaHQ6IDEwMCU7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLnBhZ2luYXRpb25fX2l0ZW0ge1xcbiAgICAgIHdpZHRoOiAycmVtO1xcbiAgICAgIGhlaWdodDogMnJlbTsgfVxcbiAgICAgIC5wYWdpbmF0aW9uX19pdGVtOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tcHJldmlvdXMpOm5vdCgucGFnaW5hdGlvbl9faXRlbS0tbmV4dCkge1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDJyZW07IH0gfVxcblxcbi5wYWdpbmF0aW9uX19pdGVtLS1icmVhayB7XFxuICBvcGFjaXR5OiAwLjM7IH1cXG5cXG4ucGFnaW5hdGlvbl9faXRlbS0tcHJldmlvdXMsXFxuLnBhZ2luYXRpb25fX2l0ZW0tLW5leHQge1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4ucGFnaW5hdGlvbl9faXRlbS0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnV0dG9uLXNlY29uZGFyeS1iZyk7IH1cXG5cXG4ucGxhY2Vob2xkZXIge1xcbiAgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZSBlYXNlLWluLW91dDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBsYWNlaG9sZGVyLWJhY2tncm91bmQpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1yYWRpdXMpOyB9XFxuXFxuLnBsYWNlaG9sZGVyX193cmFwcGVyIHtcXG4gIHdpZHRoOiAxMDAlOyB9XFxuXFxuLnBsYWNlaG9sZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7IH1cXG5cXG4ucGxhY2Vob2xkZXIuY2xhaW0tcHJldmlld19fdGl0bGUge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAzcmVtOyB9XFxuXFxuLnBsYWNlaG9sZGVyLm1lZGlhX19zdWJ0aXRsZSwgLnBsYWNlaG9sZGVyLm1lZGlhX19zdWJ0aXRsZS0tYmV0d2VlbiB7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc21hbGwpO1xcbiAgICB3aWR0aDogMzAlO1xcbiAgICBoZWlnaHQ6IDEuNWVtOyB9XFxuXFxuLnBsYWNlaG9sZGVyLmNsYWltLXRpbGVfX3RpdGxlIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMi41cmVtO1xcbiAgICBtYXJnaW4tbGVmdDogMDsgfVxcblxcbi5wbGFjZWhvbGRlci5jbGFpbS10aWxlX19pbmZvIHtcXG4gICAgd2lkdGg6IDQwJTtcXG4gICAgaGVpZ2h0OiAycmVtOyB9XFxuXFxuLnBsYWNlaG9sZGVyLS10ZXh0LWRvY3VtZW50IHtcXG4gIGFuaW1hdGlvbjogcHVsc2UgMnMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtcmFkaXVzKTtcXG4gIGhlaWdodDogNjB2aDsgfVxcblxcbi5zZWFyY2hfX2hlYWRlciB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbi5zZWFyY2hfX2hlYWRlciAucGxhY2Vob2xkZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kKTsgfVxcblxcbi5zZWFyY2hfX29wdGlvbnMge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uc2VhcmNoX19vcHRpb25zIC5zZWFyY2hfX2xlZ2VuZCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hbHQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWluaXNjdWxlKTsgfVxcblxcbi5zZWFyY2hfX29wdGlvbnMgZmllbGRzZXQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLWxhcmdlKTsgfVxcblxcbi5zZWFyY2hfX29wdGlvbnMgLnJhZGlvLFxcbiAgLnNlYXJjaF9fb3B0aW9ucyAuY2hlY2tib3gge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cXG5cXG4uc2VhcmNoX19vcHRpb25zIC5yYWRpbzpub3QoOmZpcnN0LW9mLXR5cGUpLFxcbiAgICAuc2VhcmNoX19vcHRpb25zIC5jaGVja2JveDpub3QoOmZpcnN0LW9mLXR5cGUpIHtcXG4gICAgICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLmNsYWltLXNlYXJjaF9fbWVudXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItY2FyZC1iYWNrZ3JvdW5kKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRpdGxlKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tc2VhcmNoX19tZW51cyB7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfSB9XFxuXFxuLmNsYWltLXNlYXJjaF9fZHJvcGRvd24ge1xcbiAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7XFxuICBtYXgtd2lkdGg6IDQwMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItY2FyZC1iYWNrZ3JvdW5kKTtcXG4gIHdpZHRoOiB2YXIoLS1vcHRpb24tc2VsZWN0LXdpZHRoKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuY2xhaW0tc2VhcmNoX19kcm9wZG93biB7XFxuICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxcblxcbi5jbGFpbS1zZWFyY2hfX2Ryb3Bkb3duLS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWFsdCk7IH1cXG5cXG4uY2xhaW0tc2VhcmNoX19pbnB1dC1jb250YWluZXI6bm90KDpmaXJzdC1vZi10eXBlKSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgLmNsYWltLXNlYXJjaF9faW5wdXQtY29udGFpbmVyIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwcHg7IH1cXG4gICAgLmNsYWltLXNlYXJjaF9faW5wdXQtY29udGFpbmVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge1xcbiAgICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuICAgIC5jbGFpbS1zZWFyY2hfX2lucHV0LWNvbnRhaW5lcjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0gfVxcblxcbi5jbGFpbS1zZWFyY2hfX2lucHV0LXNwZWNpYWwge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpOyB9XFxuXFxuLmNsYWltLXNlYXJjaF9fZXh0cmEge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XFxuXFxuLmNsYWltLXNlYXJjaF9fdG9wIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC13cmFwOiB3cmFwOyB9XFxuXFxuLnNlY3Rpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4uc2VjdGlvbjpmaXJzdC1vZi10eXBlIHtcXG4gICAgbWFyZ2luLXRvcDogMDsgfVxcblxcbi5zZWN0aW9uLS1wYWRkZWQge1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLnNlY3Rpb24tLXNtYWxsIHtcXG4gIG1heC13aWR0aDogNDByZW07IH1cXG5cXG4uc2VjdGlvbl9faGVhZGVyIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLnNlY3Rpb25fX2ZsZXgsIC5jYXJkX19zZWN0aW9uLS1mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxcblxcbi5zZWN0aW9uX19mbGV4ID4gLmljb25fX3dyYXBwZXI6Zmlyc3QtY2hpbGQsIC5jYXJkX19zZWN0aW9uLS1mbGV4ID4gLmljb25fX3dyYXBwZXI6Zmlyc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLnNlY3Rpb25fX3RpdGxlLCAuc2VjdGlvbl9fdGl0bGUtLXNtYWxsLCAuc2VjdGlvbl9fdGl0bGUtLWxhcmdlIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtdGl0bGUpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWxpZ2h0KTsgfVxcblxcbi5zZWN0aW9uX190aXRsZS0tc21hbGwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LWJvZHkpO1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9XFxuXFxuLnNlY3Rpb25fX3RpdGxlLS1sYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1oZWFkaW5nKTsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgICAuc2VjdGlvbl9fdGl0bGUtLWxhcmdlIHtcXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtdGl0bGUpOyB9IH1cXG5cXG4uc2VjdGlvbl9fc3VidGl0bGUtLXN0YXR1cyB7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXRleHQtd2FybmluZyk7IH1cXG5cXG4uc2VjdGlvbl9fZGl2aWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxcblxcbi5zZWN0aW9uX19kaXZpZGVyIGhyIHtcXG4gICAgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLWxhcmdlKSAwOyB9XFxuXFxuLnNlY3Rpb25fX2RpdmlkZXIgcCB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zdWJ0aXRsZSk7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LWxhcmdlKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJhc2UpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNTAlKTtcXG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLWxhcmdlKTtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBtYXJnaW46IGF1dG87IH1cXG5cXG4uc2VjdGlvbl9fYm9keSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uc2VjdGlvbl9fYWN0aW9ucy0tY2VudGVyZWQge1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcXG4gICAgLnNlY3Rpb25fX2FjdGlvbnMtLWNlbnRlcmVkIHtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH0gfVxcblxcbi5zZWN0aW9uX19hY3Rpb25zLS1uby1tYXJnaW4ge1xcbiAgbWFyZ2luLXRvcDogMDsgfVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xcbiAgLnNlY3Rpb25fX2FjdGlvbnMsIC5jaGFubmVsX19xdWljay1hY3Rpb25zLCAuc2VjdGlvbl9fYWN0aW9ucy0tY2VudGVyZWQge1xcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cXG4gICAgLnNlY3Rpb25fX2FjdGlvbnMgPiAqLCAuY2hhbm5lbF9fcXVpY2stYWN0aW9ucyA+ICosIC5zZWN0aW9uX19hY3Rpb25zLS1jZW50ZXJlZCA+ICoge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9IH1cXG5cXG4uc2hhcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlOyB9XFxuXFxuLnNoYXJlIC5pY29uIHtcXG4gICAgaGVpZ2h0OiAyLjJyZW07XFxuICAgIHdpZHRoOiAyLjJyZW07XFxuICAgIHN0cm9rZTogbm9uZTsgfVxcblxcbi5zaGFyZTpob3ZlciB7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtYm94LXNoYWRvdyk7IH1cXG5cXG4uc25hY2stYmFyLCAuc25hY2stYmFyLS11cGdyYWRlIHtcXG4gIGJvdHRvbTogMnJlbTtcXG4gIGxlZnQ6IDJyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zbmFjay1iZyk7XFxuICBjb2xvcjogdmFyKC0tY29sb3Itc25hY2spO1xcbiAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbWFsbCkgdmFyKC0tc3BhY2luZy1sYXJnZSkgdmFyKC0tc3BhY2luZy1zbWFsbCkgdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pIHZhcigtLXRyYW5zaXRpb24tdHlwZSk7XFxuICB6LWluZGV4OiAxMDAwMDsgfVxcblxcbi5zbmFjay1iYXItLXVwZ3JhZGUge1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiAycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc25hY2stYmctdXBncmFkZSk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxcblxcbi5zbmFjay1iYXItLWVycm9yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNuYWNrLWJnLWVycm9yKTsgfVxcblxcbi5zbmFjay1iYXJfX2FjdGlvbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IHZhcigtLXNwYWNpbmctc21hbGwpIDA7XFxuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlKTsgfVxcblxcbi5zbmFjay1iYXJfX2FjdGlvbiBzcGFuOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cXG5cXG4uc25hY2stYmFyX19tZXNzYWdlIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1ib2R5KTsgfVxcblxcbi5zbmFjay1iYXJfX21lc3NhZ2UgZGl2Om50aC1vZi10eXBlKDEpIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4uc3Bpbm5lciB7XFxuICB3aWR0aDogNTBweDtcXG4gIGhlaWdodDogNDBweDtcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cXG5cXG4uc3Bpbm5lciAucmVjdCB7XFxuICAgIHdpZHRoOiA2cHg7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBzay1zdHJldGNoZGVsYXkgMS4ycyBpbmZpbml0ZSBlYXNlLWluLW91dDtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBtYXJnaW46IDAgMnB4OyB9XFxuXFxuLnNwaW5uZXIgLnJlY3QucmVjdDIge1xcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLTEuMXM7IH1cXG5cXG4uc3Bpbm5lciAucmVjdC5yZWN0MyB7XFxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMXM7IH1cXG5cXG4uc3Bpbm5lciAucmVjdC5yZWN0NCB7XFxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMC45czsgfVxcblxcbi5zcGlubmVyIC5yZWN0LnJlY3Q1IHtcXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC0wLjhzOyB9XFxuXFxuLnNwaW5uZXItLWRhcmsgLnJlY3Qge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3Bpbm5lci1kYXJrKTsgfVxcblxcbi5zcGlubmVyLS1saWdodCAucmVjdCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zcGlubmVyLWxpZ2h0KTsgfVxcblxcbi5zcGlubmVyLS1zbWFsbCB7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cXG5cXG4uc3Bpbm5lci0tc21hbGwgLnJlY3Qge1xcbiAgICB3aWR0aDogM3B4OyB9XFxuXFxuLnNwbGFzaCB7XFxuICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7XFxuICB3aWR0aDogMTAwdnc7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtLXNwbGFzaCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxcblxcbi5zcGxhc2hfX2RldGFpbHMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbGlnaHQpO1xcbiAgY29sb3I6ICNmZmY7XFxuICBtYXJnaW4tdG9wOiAycmVtOyB9XFxuXFxuLnNwbGFzaF9fdGl0bGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZm9udC1zaXplOiA0MHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICBjb2xvcjogI2ZmZjtcXG4gIG1hcmdpbi10b3A6IC0xcmVtOyB9XFxuXFxuLnNwbGFzaF9fYW5pbWF0aW9uLXRvZ2dsZSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IHZhcigtLXNwYWNpbmctbGFyZ2UpO1xcbiAgcmlnaHQ6IHZhcigtLXNwYWNpbmctbGFyZ2UpO1xcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjA1KTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zbWFsbCk7IH1cXG5cXG4uc3BsYXNoX19hbmltYXRpb24tdG9nZ2xlOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9XFxuXFxuLnNwbGFzaF9fYW5pbWF0aW9uLXRvZ2dsZTpob3ZlciAuaWNvbiB7XFxuICAgICAgc3Ryb2tlOiAjZmZmOyB9XFxuXFxuLmRvb2RsZSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7IH1cXG5cXG4uc3Vic2NyaXB0aW9uc19fc3VnZ2VzdGVkIHtcXG4gIGFuaW1hdGlvbjogZXhwYW5kIDAuMnM7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cXG4vKiBCYXNlZCBvbiBTdWJsaW1lIFRleHQncyBNb25va2FpIHRoZW1lICovXFxuXFxuLyogQ3VzdG9taXNlZCBzbGlnaHRseSBmb3IgTEJSWSBkYXJrIHRoZW1lICovXFxuXFxuLmNtLXMtbW9ub2thaS5Db2RlTWlycm9yIHtcXG4gIGJhY2tncm91bmQ6ICMyMTI1Mjk7XFxuICBjb2xvcjogI2Y4ZjhmMjsgfVxcblxcbi5jbS1zLW1vbm9rYWkgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogIzcxNzI3MzsgfVxcblxcbi5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItZ3V0dGVycyB7XFxuICBiYWNrZ3JvdW5kOiAjMjEyNTI5O1xcbiAgYm9yZGVyLXJpZ2h0OiAwcHg7IH1cXG5cXG4uY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlcm1hcmtlciB7XFxuICBjb2xvcjogd2hpdGU7IH1cXG5cXG4uY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUge1xcbiAgY29sb3I6ICNkMGQwZDA7IH1cXG5cXG4uY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xcbiAgY29sb3I6ICNkMGQwZDA7IH1cXG5cXG4uY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWN1cnNvciB7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNmOGY4ZjA7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tY29tbWVudCB7XFxuICBjb2xvcjogI2FkYTZhNzsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1hdG9tIHtcXG4gIGNvbG9yOiAjYWU4MWZmOyB9XFxuXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLW51bWJlciB7XFxuICBjb2xvcjogI2FlODFmZjsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1jb21tZW50LmNtLWF0dHJpYnV0ZSB7XFxuICBjb2xvcjogIzk3Yjc1NzsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1jb21tZW50LmNtLWRlZiB7XFxuICBjb2xvcjogI2JjOTI2MjsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1jb21tZW50LmNtLXRhZyB7XFxuICBjb2xvcjogI2JjNjI4MzsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1jb21tZW50LmNtLXR5cGUge1xcbiAgY29sb3I6ICM1OTk4YTY7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tcHJvcGVydHksXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLWF0dHJpYnV0ZSB7XFxuICBjb2xvcjogI2E2ZTIyZTsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1rZXl3b3JkIHtcXG4gIGNvbG9yOiAjZjkyNjcyOyB9XFxuXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLWJ1aWx0aW4ge1xcbiAgY29sb3I6ICM2NmQ5ZWY7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tc3RyaW5nIHtcXG4gIGNvbG9yOiAjZTZkYjc0OyB9XFxuXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLXZhcmlhYmxlIHtcXG4gIGNvbG9yOiAjZjhmOGYyOyB9XFxuXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLXZhcmlhYmxlLTIge1xcbiAgY29sb3I6ICM5ZWZmZmY7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tdmFyaWFibGUtMyxcXG4uY20tcy1tb25va2FpIHNwYW4uY20tdHlwZSB7XFxuICBjb2xvcjogIzY2ZDllZjsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1kZWYge1xcbiAgY29sb3I6ICNmZDk3MWY7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tYnJhY2tldCB7XFxuICBjb2xvcjogI2Y4ZjhmMjsgfVxcblxcbi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS10YWcge1xcbiAgY29sb3I6ICNmOTI2NzI7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20taGVhZGVyIHtcXG4gIGNvbG9yOiAjYWU4MWZmOyB9XFxuXFxuLmNtLXMtbW9ub2thaSBzcGFuLmNtLWxpbmsge1xcbiAgY29sb3I6ICNhZTgxZmY7IH1cXG5cXG4uY20tcy1tb25va2FpIHNwYW4uY20tZXJyb3Ige1xcbiAgYmFja2dyb3VuZDogI2Y5MjY3MjtcXG4gIGNvbG9yOiAjZjhmOGYwOyB9XFxuXFxuLmNtLXMtbW9ub2thaSAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQge1xcbiAgYmFja2dyb3VuZDogIzM3MzgzMTsgfVxcblxcbi5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IH1cXG5cXG4vKiBGcm9tIGh0dHBzOi8vY29kZW1pcnJvci5uZXQvdGhlbWUvdHRjbi5jc3MgKi9cXG5cXG4vKiBDdXN0b21pc2VkIHNsaWdodGx5IGZvciBMQlJZIGxpZ2h0IHRoZW1lICovXFxuXFxuLmNtLXMtdHRuYyAuQ29kZU1pcnJvciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTsgfVxcblxcbi5jbS1zLXR0bmMgLkNvZGVNaXJyb3Ige1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XFxuICBib3JkZXI6IDA7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1xdW90ZSB7XFxuICBjb2xvcjogIzA5MDsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLW5lZ2F0aXZlIHtcXG4gIGNvbG9yOiAjZDQ0OyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tcG9zaXRpdmUge1xcbiAgY29sb3I6ICMyOTI7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1oZWFkZXIsXFxuLmNtLXN0cm9uZyB7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLWVtIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLWxpbmsge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1zdHJpa2V0aHJvdWdoIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20taGVhZGVyIHtcXG4gIGNvbG9yOiAjMDBmO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1hdG9tIHtcXG4gIGNvbG9yOiAjMjE5OyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tYXR0cmlidXRlIHtcXG4gIGNvbG9yOiAjMDBjOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tYnJhY2tldCB7XFxuICBjb2xvcjogIzk5NzsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLWNvbW1lbnQge1xcbiAgY29sb3I6ICMzMzMzMzM7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1kZWYge1xcbiAgY29sb3I6ICMwMGY7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1lbSB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1lcnJvciB7XFxuICBjb2xvcjogI2YwMDsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLWhyIHtcXG4gIGNvbG9yOiAjOTk5OyB9XFxuXFxuLmNtLXMtdHRjbiAuY20taW52YWxpZGNoYXIge1xcbiAgY29sb3I6ICNmMDA7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1rZXl3b3JkIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tbGluayB7XFxuICBjb2xvcjogIzAwYztcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tbWV0YSB7XFxuICBjb2xvcjogIzU1NTsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLW5lZ2F0aXZlIHtcXG4gIGNvbG9yOiAjZDQ0OyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tcG9zaXRpdmUge1xcbiAgY29sb3I6ICMyOTI7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1xdWFsaWZpZXIge1xcbiAgY29sb3I6ICM1NTU7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1zdHJpa2V0aHJvdWdoIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tc3RyaW5nIHtcXG4gIGNvbG9yOiAjMDA2NDAwOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tc3RyaW5nLTIge1xcbiAgY29sb3I6ICNmNTA7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1zdHJvbmcge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4uY20tcy10dGNuIC5jbS10YWcge1xcbiAgY29sb3I6ICMxNzA7IH1cXG5cXG4uY20tcy10dGNuIC5jbS12YXJpYWJsZSB7XFxuICBjb2xvcjogIzhiMjI1MjsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLXZhcmlhYmxlLTIge1xcbiAgY29sb3I6ICMwNWE7IH1cXG5cXG4uY20tcy10dGNuIC5jbS12YXJpYWJsZS0zLFxcbi5jbS1zLXR0Y24gLmNtLXR5cGUge1xcbiAgY29sb3I6ICMwODU7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1pbnZhbGlkY2hhciB7XFxuICBjb2xvcjogI2YwMDsgfVxcblxcbi8qIEFTTiAqL1xcblxcbi5jbS1zLXR0Y24gLmNtLWFjY2Vzc1R5cGVzLFxcbi5jbS1zLXR0Y24gLmNtLWNvbXBhcmVUeXBlcyB7XFxuICBjb2xvcjogIzI3NDA4YjsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLWNtaXBWZXJicyB7XFxuICBjb2xvcjogIzhiMjI1MjsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLW1vZGlmaWVyIHtcXG4gIGNvbG9yOiAjZDI2OTFlOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tc3RhdHVzIHtcXG4gIGNvbG9yOiAjOGI0NTQ1OyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tc3RvcmFnZSB7XFxuICBjb2xvcjogI2EwMjBmMDsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLXRhZ3Mge1xcbiAgY29sb3I6ICMwMDY0MDA7IH1cXG5cXG4vKiBDRkcgKi9cXG5cXG4uY20tcy10dGNuIC5jbS1leHRlcm5hbENvbW1hbmRzIHtcXG4gIGNvbG9yOiAjOGI0NTQ1O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1maWxlTkN0cmxNYXNrT3B0aW9ucyxcXG4uY20tcy10dGNuIC5jbS1zZWN0aW9uVGl0bGUge1xcbiAgY29sb3I6ICMyZThiNTc7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi8qIFRUQ04gKi9cXG5cXG4uY20tcy10dGNuIC5jbS1ib29sZWFuQ29uc3RzLFxcbi5jbS1zLXR0Y24gLmNtLW90aGVyQ29uc3RzLFxcbi5jbS1zLXR0Y24gLmNtLXZlcmRpY3RDb25zdHMge1xcbiAgY29sb3I6ICMwMDY0MDA7IH1cXG5cXG4uY20tcy10dGNuIC5jbS1jb25maWdPcHMsXFxuLmNtLXMtdHRjbiAuY20tZnVuY3Rpb25PcHMsXFxuLmNtLXMtdHRjbiAuY20tcG9ydE9wcyxcXG4uY20tcy10dGNuIC5jbS1zdXRPcHMsXFxuLmNtLXMtdHRjbiAuY20tdGltZXJPcHMsXFxuLmNtLXMtdHRjbiAuY20tdmVyZGljdE9wcyB7XFxuICBjb2xvcjogIzAwMDBmZjsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLXByZXByb2Nlc3NvcixcXG4uY20tcy10dGNuIC5jbS10ZW1wbGF0ZU1hdGNoLFxcbi5jbS1zLXR0Y24gLmNtLXR0Y24zTWFjcm9zIHtcXG4gIGNvbG9yOiAjMjc0MDhiOyB9XFxuXFxuLmNtLXMtdHRjbiAuY20tdHlwZXMge1xcbiAgY29sb3I6ICNhNTJhMmE7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5jbS1zLXR0Y24gLmNtLXZpc2liaWxpdHlNb2RpZmllcnMge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4udGFibGVfX3dyYXBwZXIge1xcbiAgb3ZlcmZsb3cteDogYXV0bzsgfVxcblxcbi50YWJsZV9faGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxcblxcbi50YWJsZV9faGVhZGVyIC5zZWN0aW9uX19zdWJ0aXRsZSwgLnRhYmxlX19oZWFkZXIgLnNlY3Rpb25fX3N1YnRpdGxlLS1zdGF0dXMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XFxuXFxuLnRhYmxlX19oZWFkZXItdGV4dCwgLnRhYmxlX19oZWFkZXItdGV4dC0tYmV0d2VlbiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1tZWRpdW0pIHZhcigtLXNwYWNpbmctbGFyZ2UpOyB9XFxuXFxuLnRhYmxlX19oZWFkZXItdGV4dC0tYmV0d2VlbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC50YWJsZV9faGVhZGVyLXRleHQtLWJldHdlZW4ge1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfSB9XFxuXFxuLnRhYmxlLS1oZWxwIHRkOm50aC1vZi10eXBlKDEpIHtcXG4gIG1pbi13aWR0aDogMTMwcHg7IH1cXG5cXG4udGFibGUtLWhlbHAgdGQ6bnRoLW9mLXR5cGUoMikge1xcbiAgbWF4LXdpZHRoOiAyMHZ3O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxcblxcbi50YWJsZS0tdHJhbnNhY3Rpb25zIHRkOm50aC1vZi10eXBlKDMpIGEsXFxuLnRhYmxlLS10cmFuc2FjdGlvbnMgdGQ6bnRoLW9mLXR5cGUoMykgYnV0dG9uIHtcXG4gIG1heC13aWR0aDogMTByZW07XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxcblxcbi50YWJsZS0tcmV3YXJkcyB0ZDpudGgtb2YtdHlwZSgxKSB7XFxuICB3aWR0aDogNDAlOyB9XFxuXFxuLnRhYmxlLS1yZXdhcmRzIHRkOm50aC1vZi10eXBlKDIpIHtcXG4gIHdpZHRoOiAxNy41JTsgfVxcblxcbi50YWJsZS0tcmV3YXJkcyB0ZDpudGgtb2YtdHlwZSgzKSB7XFxuICB3aWR0aDogMTcuNSU7IH1cXG5cXG4udGFibGUtLXJld2FyZHMgdGQ6bnRoLW9mLXR5cGUoNCkge1xcbiAgd2lkdGg6IDI1JTsgfVxcblxcbi50YWJsZS0taW52aXRlcyBzdmcge1xcbiAgbWFyZ2luLWJvdHRvbTogLTJweDtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi50YWJsZS0tZGV0YWlscywgLnRhYmxlLS1maWxlLWRldGFpbHMsIC50YWJsZS0tbGJjLWRldGFpbHMge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNtYWxsKTsgfVxcblxcbi50YWJsZS0tZmlsZS1kZXRhaWxzIHRkOm50aC1vZi10eXBlKDEpIHtcXG4gIHdpZHRoOiAyNSU7IH1cXG5cXG4udGFibGUtLWZpbGUtZGV0YWlscyB0ZDpudGgtb2YtdHlwZSgyKSB7XFxuICB3aWR0aDogNzUlO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cXG5cXG4udGFibGUtLWxiYy1kZXRhaWxzIHRkOm50aC1vZi10eXBlKDIpIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XFxuXFxuLnRhYmxlX19pdGVtLS1hY3Rpb25hYmxlIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XFxuXFxuLnRhYmxlX19pdGVtLS1hY3Rpb25hYmxlIC5idXR0b24ge1xcbiAgICBoZWlnaHQ6IDEuNXJlbTtcXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zKTtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbSk7IH1cXG5cXG4udGFicyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cXG4udGFic19fbGlzdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXRhYnMtYmFja2dyb3VuZCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSkgdmFyKC0tc3BhY2luZy1tYWluLXBhZGRpbmcpOyB9XFxuXFxuLnRhYnNfX2xpc3QgPiAqOm5vdCgudGFiKSB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XFxuXFxuLnRhYnNfX2xpc3QtLWNoYW5uZWwtcGFnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hhbm5lbC10aHVtYm5haWwtd2lkdGgpICsgdmFyKC0tc3BhY2luZy1sYXJnZSkpO1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2luZy1tZWRpdW0pO1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICBoZWlnaHQ6IDRyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiB2YXIoLS1jYXJkLXJhZGl1cyk7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogdmFyKC0tY2FyZC1yYWRpdXMpOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC50YWJzX19saXN0LS1jaGFubmVsLXBhZ2Uge1xcbiAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1tZWRpdW0pOyB9IH1cXG5cXG4udGFiIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1sYXJnZSk7XFxuICBwYWRkaW5nOiA1cHggMDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10YWItdGV4dCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtYm9keSk7IH1cXG5cXG4udGFiOjphZnRlciB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiBjYWxjKHZhcigtLXRhYi1pbmRpY2F0b3Itc2l6ZSkgKiAtMik7XFxuICAgIGhlaWdodDogMDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGNvbnRlbnQ6ICcnOyB9XFxuXFxuLnRhYjpmb2N1cyB7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cXG5cXG4udGFiX19kaXZpZGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1hcmdpbi10b3A6IGNhbGModmFyKC0tdGFiLWluZGljYXRvci1zaXplKSAqIC0xIC0gdmFyKC0tc3BhY2luZy1sYXJnZSkpOyB9XFxuXFxuLnRhYjo6YWZ0ZXIsXFxuLnRhYl9fZGl2aWRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLWFuaW1hdGlvbi1zdHlsZSk7IH1cXG5cXG4udGFiOmhvdmVyOjphZnRlcixcXG4udGFiX19kaXZpZGVyIHtcXG4gIGhlaWdodDogdmFyKC0tdGFiLWluZGljYXRvci1zaXplKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXRhYi1kaXZpZGVyKTsgfVxcblxcbi50YWdzLCAudGFncy0tcmVtb3ZlLCAudGFncy0tdmVydGljYWwsIC50YWdzLS1zZWxlY3RlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWluLXdpZHRoOiAwOyB9XFxuXFxuLnRhZ3MgLnRhZywgLnRhZ3MtLXJlbW92ZSAudGFnLCAudGFncy0tdmVydGljYWwgLnRhZywgLnRhZ3MtLXNlbGVjdGVkIC50YWcge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1zbWFsbCk7IH1cXG5cXG4udGFncy0tcmVtb3ZlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWVkaXVtKTsgfVxcblxcbi50YWdzLS1yZW1vdmUgLnRhZyB7XFxuICAgIG1hcmdpbi10b3A6IDA7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc21hbGwpOyB9XFxuXFxuLnRhZ3MtLXZlcnRpY2FsIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxcblxcbi50YWdzLS12ZXJ0aWNhbCBsaTpsYXN0LWNoaWxkIC50YWcge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XFxuXFxuLnRhZ3MtLXNlbGVjdGVkIHtcXG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1sYXJnZSkgMDsgfVxcblxcbi50YWdzX19pbnB1dC13cmFwcGVyIC50YWdfX2lucHV0IHtcXG4gIGhlaWdodDogdmFyKC0tdGFnLWhlaWdodCk7XFxuICBwYWRkaW5nOiBjYWxjKHZhcigtLXNwYWNpbmctbWluaXNjdWxlKSArIDFweCkgdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1iZyk7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1lZGl1bSk7IH1cXG5cXG4udGFnLS1yZW1vdmUsIC50YWdzX19pbnB1dC13cmFwcGVyIC50YWdfX2lucHV0IHtcXG4gIG1heC13aWR0aDogMjByZW07IH1cXG5cXG4udGFnLS1kaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7IH1cXG5cXG4udGFnLS1sYXJnZSB7XFxuICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbnB1dCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctcyk7IH1cXG5cXG4ud3VuZGVyYmFyLCAud3VuZGVyYmFyLS1pbmxpbmUge1xcbiAgZmxleDogMTtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zbWFsbCk7XFxuICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbnB1dCk7IH1cXG5cXG4ud3VuZGVyYmFyID4gLmljb24sIC53dW5kZXJiYXItLWlubGluZSA+IC5pY29uIHtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiB2YXIoLS1zcGFjaW5nLXNtYWxsKTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHotaW5kZXg6IDE7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItaW5wdXQtcGxhY2Vob2xkZXIpOyB9XFxuXFxuLnd1bmRlcmJhci0taW5saW5lIHtcXG4gIGZsZXg6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDA7IH1cXG5cXG4ud3VuZGVyYmFyLS1pbmxpbmUgZmllbGRzZXQtc2VjdGlvbiwgLnd1bmRlcmJhci0taW5saW5lIC5maWVsZHNldC1zZWN0aW9uIHtcXG4gICAgd2lkdGg6IDE1cmVtOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC53dW5kZXJiYXItLWlubGluZSB7XFxuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XFxuXFxuLnd1bmRlcmJhcl9fYWN0aXZlLXN1Z2dlc3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXNlYXJjaC1zdWdnZXN0aW9uKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlYXJjaC1zdWdnZXN0aW9uLWJhY2tncm91bmQpOyB9XFxuXFxuLnd1bmRlcmJhcl9faW5wdXQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIGhlaWdodDogdmFyKC0taGVpZ2h0LWlucHV0KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWhlaWdodC1pbnB1dCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1pbnB1dC1iZyk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItaW5wdXQpO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICBwYWRkaW5nLWxlZnQ6IDIuNXJlbTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzOyB9XFxuXFxuLnd1bmRlcmJhcl9faW5wdXQ6Zm9jdXMge1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsgfVxcblxcbi53dW5kZXJiYXJfX21lbnUge1xcbiAgbWluLXdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWlucHV0LWJnKTtcXG4gIG1hcmdpbi10b3A6IC00cHg7IH1cXG5cXG4ud3VuZGVyYmFyX19zdWdnZXN0aW9uIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktaXRlbXM6IGZsZXgtc3RhcnQ7XFxuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtYWxsKSB2YXIoLS1zcGFjaW5nLXNtYWxsKTsgfVxcblxcbi53dW5kZXJiYXJfX3N1Z2dlc3Rpb246bm90KDpmaXJzdC1vZi10eXBlKSB7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgfVxcblxcbi53dW5kZXJiYXJfX3N1Z2dlc3Rpb24gLmljb24ge1xcbiAgICBmbGV4LXNocmluazogMDsgfVxcblxcbi53dW5kZXJiYXJfX3N1Z2dlc3Rpb24tbGFiZWwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1zbWFsbCk7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cXG5cXG4ud3VuZGVyYmFyX19zdWdnZXN0aW9uLWxhYmVsLS1hY3Rpb24ge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctbWVkaXVtKTtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cXG5cXG4ueXJibF9fd3JhcCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cXG5cXG4ueXJibCB7XFxuICBoZWlnaHQ6IDIwcmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmcteGxhcmdlKSAqIDIpOyB9XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XFxuICAgIC55cmJsIHtcXG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cXG5cXG4ueXJibF9fY29udGVudCB7XFxuICBtYXgtd2lkdGg6IDUwMHB4OyB9XFxuXFxuLnlyYmwtLWZpcnN0LXJ1biB7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDI1MHB4O1xcbiAgd2lkdGg6IGF1dG87XFxuICBtYXJnaW46IDAgdmFyKC0tc3BhY2luZy1sYXJnZSk7IH1cXG5cXG4ueXJibC0tc2VhcmNoIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIG1hcmdpbjogMDsgfVxcblxcbi55cmJsLS1zZWFyY2ggLnlyYmwge1xcbiAgICBoZWlnaHQ6IDE4cmVtOyB9XFxuXFxuLnlyYmwtLWVuaGFuY2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDk5OTk7XFxuICBoZWlnaHQ6IDk1dmg7XFxuICB3aWR0aDogOTV2aDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIGFuaW1hdGlvbi1uYW1lOiBlbmhhbmNlZEFuaW1hdGlvbjtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IGFsdGVybmF0ZTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0OyB9XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGVuaGFuY2VkQW5pbWF0aW9uIHtcXG4gIGZyb20ge1xcbiAgICBsZWZ0OiAwO1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxcbiAgdG8ge1xcbiAgICBsZWZ0OiA1MHZ3O1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH1cXG5cIiwgXCJcIl0pO1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../ui/scss/all.scss\n"); - -/***/ }), - -/***/ "../node_modules/css-loader/dist/runtime/api.js": -/*!******************************************************!*\ - !*** ../node_modules/css-loader/dist/runtime/api.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzAyMmQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXNlU291cmNlTWFwKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuICdAbWVkaWEgJyArIGl0ZW1bMl0gKyAneycgKyBjb250ZW50ICsgJ30nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbaV07IC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcbiAgICAgIC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG4gICAgICAvLyB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG4gICAgICAvLyBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cbiAgICAgIGlmIChpdGVtWzBdID09IG51bGwgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgaWYgKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgICAgaXRlbVsyXSA9ICcoJyArIGl0ZW1bMl0gKyAnKSBhbmQgKCcgKyBtZWRpYVF1ZXJ5ICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuICByZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTs7OztBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQUpBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUJBO0FBQ0E7QUFnQ0E7QUFqREE7QUFDQTtBQW1EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/css-loader/dist/runtime/api.js\n"); - -/***/ }), - -/***/ "../node_modules/css-loader/dist/runtime/url-escape.js": -/*!*************************************************************!*\ - !*** ../node_modules/css-loader/dist/runtime/url-escape.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = function escape(url, needQuotes) {\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || needQuotes) {\n return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"';\n }\n\n return url;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3VybC1lc2NhcGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3VybC1lc2NhcGUuanM/NTdiZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlc2NhcGUodXJsLCBuZWVkUXVvdGVzKSB7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmw7XG4gIH0gLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG5cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9IC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcblxuXG4gIGlmICgvW1wiJygpIFxcdFxcbl0vLnRlc3QodXJsKSB8fCBuZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuICdcIicgKyB1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKSArICdcIic7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/css-loader/dist/runtime/url-escape.js\n"); - -/***/ }), - -/***/ "../node_modules/currency-symbol-map/currency-symbol-map.js": -/*!******************************************************************!*\ - !*** ../node_modules/currency-symbol-map/currency-symbol-map.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = mapSymbol;\n\nvar map = __webpack_require__(/*! ./map */ \"../node_modules/currency-symbol-map/map.js\");\n\nfunction mapSymbol(currencyCode) {\n if (map.hasOwnProperty(currencyCode)) {\n return map[currencyCode];\n } else {\n return '?';\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2N1cnJlbmN5LXN5bWJvbC1tYXAvY3VycmVuY3ktc3ltYm9sLW1hcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY3VycmVuY3ktc3ltYm9sLW1hcC9jdXJyZW5jeS1zeW1ib2wtbWFwLmpzP2RiMjUiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBtYXBTeW1ib2xcblxudmFyIG1hcCA9IHJlcXVpcmUoJy4vbWFwJylcblxuZnVuY3Rpb24gbWFwU3ltYm9sKGN1cnJlbmN5Q29kZSkge1xuICBpZiAobWFwLmhhc093blByb3BlcnR5KGN1cnJlbmN5Q29kZSkpIHtcbiAgICByZXR1cm4gbWFwW2N1cnJlbmN5Q29kZV1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJz8nXG4gIH1cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/currency-symbol-map/currency-symbol-map.js\n"); - -/***/ }), - -/***/ "../node_modules/currency-symbol-map/map.js": -/*!**************************************************!*\ - !*** ../node_modules/currency-symbol-map/map.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n \"ALL\": \"L\",\n \"AFN\": \"؋\",\n \"ARS\": \"$\",\n \"AWG\": \"ƒ\",\n \"AUD\": \"$\",\n \"AZN\": \"₼\",\n \"BSD\": \"$\",\n \"BBD\": \"$\",\n \"BYR\": \"p.\",\n \"BZD\": \"BZ$\",\n \"BMD\": \"$\",\n \"BOB\": \"Bs.\",\n \"BAM\": \"KM\",\n \"BWP\": \"P\",\n \"BGN\": \"лв\",\n \"BRL\": \"R$\",\n \"BND\": \"$\",\n \"KHR\": \"៛\",\n \"CAD\": \"$\",\n \"KYD\": \"$\",\n \"CLP\": \"$\",\n \"CNY\": \"¥\",\n \"COP\": \"$\",\n \"CRC\": \"₡\",\n \"HRK\": \"kn\",\n \"CUP\": \"₱\",\n \"CZK\": \"Kč\",\n \"DKK\": \"kr\",\n \"DOP\": \"RD$\",\n \"XCD\": \"$\",\n \"EGP\": \"£\",\n \"SVC\": \"$\",\n \"EEK\": \"kr\",\n \"EUR\": \"€\",\n \"FKP\": \"£\",\n \"FJD\": \"$\",\n \"GHC\": \"¢\",\n \"GIP\": \"£\",\n \"GTQ\": \"Q\",\n \"GGP\": \"£\",\n \"GYD\": \"$\",\n \"HNL\": \"L\",\n \"HKD\": \"$\",\n \"HUF\": \"Ft\",\n \"ISK\": \"kr\",\n \"INR\": \"₹\",\n \"IDR\": \"Rp\",\n \"IRR\": \"﷼\",\n \"IMP\": \"£\",\n \"ILS\": \"₪\",\n \"JMD\": \"J$\",\n \"JPY\": \"¥\",\n \"JEP\": \"£\",\n \"KES\": \"KSh\",\n \"KZT\": \"лв\",\n \"KPW\": \"₩\",\n \"KRW\": \"₩\",\n \"KGS\": \"лв\",\n \"LAK\": \"₭\",\n \"LVL\": \"Ls\",\n \"LBP\": \"£\",\n \"LRD\": \"$\",\n \"LTL\": \"Lt\",\n \"MKD\": \"ден\",\n \"MYR\": \"RM\",\n \"MUR\": \"₨\",\n \"MXN\": \"$\",\n \"MNT\": \"₮\",\n \"MZN\": \"MT\",\n \"NAD\": \"$\",\n \"NPR\": \"₨\",\n \"ANG\": \"ƒ\",\n \"NZD\": \"$\",\n \"NIO\": \"C$\",\n \"NGN\": \"₦\",\n \"NOK\": \"kr\",\n \"OMR\": \"﷼\",\n \"PKR\": \"₨\",\n \"PAB\": \"B/.\",\n \"PYG\": \"Gs\",\n \"PEN\": \"S/.\",\n \"PHP\": \"₱\",\n \"PLN\": \"zł\",\n \"QAR\": \"﷼\",\n \"RON\": \"lei\",\n \"RUB\": \"₽\",\n \"SHP\": \"£\",\n \"SAR\": \"﷼\",\n \"RSD\": \"Дин.\",\n \"SCR\": \"₨\",\n \"SGD\": \"$\",\n \"SBD\": \"$\",\n \"SOS\": \"S\",\n \"ZAR\": \"R\",\n \"LKR\": \"₨\",\n \"SEK\": \"kr\",\n \"CHF\": \"CHF\",\n \"SRD\": \"$\",\n \"SYP\": \"£\",\n \"TZS\": \"TSh\",\n \"TWD\": \"NT$\",\n \"THB\": \"฿\",\n \"TTD\": \"TT$\",\n \"TRY\": \"\",\n \"TRL\": \"₤\",\n \"TVD\": \"$\",\n \"UGX\": \"USh\",\n \"UAH\": \"₴\",\n \"GBP\": \"£\",\n \"USD\": \"$\",\n \"UYU\": \"$U\",\n \"UZS\": \"лв\",\n \"VEF\": \"Bs\",\n \"VND\": \"₫\",\n \"YER\": \"﷼\",\n \"ZWD\": \"Z$\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2N1cnJlbmN5LXN5bWJvbC1tYXAvbWFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jdXJyZW5jeS1zeW1ib2wtbWFwL21hcC5qcz84MjhlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbnsgXCJBTExcIjogXCJMXCJcbiwgXCJBRk5cIjogXCLYi1wiXG4sIFwiQVJTXCI6IFwiJFwiXG4sIFwiQVdHXCI6IFwixpJcIlxuLCBcIkFVRFwiOiBcIiRcIlxuLCBcIkFaTlwiOiBcIuKCvFwiXG4sIFwiQlNEXCI6IFwiJFwiXG4sIFwiQkJEXCI6IFwiJFwiXG4sIFwiQllSXCI6IFwicC5cIlxuLCBcIkJaRFwiOiBcIkJaJFwiXG4sIFwiQk1EXCI6IFwiJFwiXG4sIFwiQk9CXCI6IFwiQnMuXCJcbiwgXCJCQU1cIjogXCJLTVwiXG4sIFwiQldQXCI6IFwiUFwiXG4sIFwiQkdOXCI6IFwi0LvQslwiXG4sIFwiQlJMXCI6IFwiUiRcIlxuLCBcIkJORFwiOiBcIiRcIlxuLCBcIktIUlwiOiBcIuGfm1wiXG4sIFwiQ0FEXCI6IFwiJFwiXG4sIFwiS1lEXCI6IFwiJFwiXG4sIFwiQ0xQXCI6IFwiJFwiXG4sIFwiQ05ZXCI6IFwiwqVcIlxuLCBcIkNPUFwiOiBcIiRcIlxuLCBcIkNSQ1wiOiBcIuKCoVwiXG4sIFwiSFJLXCI6IFwia25cIlxuLCBcIkNVUFwiOiBcIuKCsVwiXG4sIFwiQ1pLXCI6IFwiS8SNXCJcbiwgXCJES0tcIjogXCJrclwiXG4sIFwiRE9QXCI6IFwiUkQkXCJcbiwgXCJYQ0RcIjogXCIkXCJcbiwgXCJFR1BcIjogXCLCo1wiXG4sIFwiU1ZDXCI6IFwiJFwiXG4sIFwiRUVLXCI6IFwia3JcIlxuLCBcIkVVUlwiOiBcIuKCrFwiXG4sIFwiRktQXCI6IFwiwqNcIlxuLCBcIkZKRFwiOiBcIiRcIlxuLCBcIkdIQ1wiOiBcIsKiXCJcbiwgXCJHSVBcIjogXCLCo1wiXG4sIFwiR1RRXCI6IFwiUVwiXG4sIFwiR0dQXCI6IFwiwqNcIlxuLCBcIkdZRFwiOiBcIiRcIlxuLCBcIkhOTFwiOiBcIkxcIlxuLCBcIkhLRFwiOiBcIiRcIlxuLCBcIkhVRlwiOiBcIkZ0XCJcbiwgXCJJU0tcIjogXCJrclwiXG4sIFwiSU5SXCI6IFwi4oK5XCJcbiwgXCJJRFJcIjogXCJScFwiXG4sIFwiSVJSXCI6IFwi77e8XCJcbiwgXCJJTVBcIjogXCLCo1wiXG4sIFwiSUxTXCI6IFwi4oKqXCJcbiwgXCJKTURcIjogXCJKJFwiXG4sIFwiSlBZXCI6IFwiwqVcIlxuLCBcIkpFUFwiOiBcIsKjXCJcbiwgXCJLRVNcIjogXCJLU2hcIlxuLCBcIktaVFwiOiBcItC70LJcIlxuLCBcIktQV1wiOiBcIuKCqVwiXG4sIFwiS1JXXCI6IFwi4oKpXCJcbiwgXCJLR1NcIjogXCLQu9CyXCJcbiwgXCJMQUtcIjogXCLigq1cIlxuLCBcIkxWTFwiOiBcIkxzXCJcbiwgXCJMQlBcIjogXCLCo1wiXG4sIFwiTFJEXCI6IFwiJFwiXG4sIFwiTFRMXCI6IFwiTHRcIlxuLCBcIk1LRFwiOiBcItC00LXQvVwiXG4sIFwiTVlSXCI6IFwiUk1cIlxuLCBcIk1VUlwiOiBcIuKCqFwiXG4sIFwiTVhOXCI6IFwiJFwiXG4sIFwiTU5UXCI6IFwi4oKuXCJcbiwgXCJNWk5cIjogXCJNVFwiXG4sIFwiTkFEXCI6IFwiJFwiXG4sIFwiTlBSXCI6IFwi4oKoXCJcbiwgXCJBTkdcIjogXCLGklwiXG4sIFwiTlpEXCI6IFwiJFwiXG4sIFwiTklPXCI6IFwiQyRcIlxuLCBcIk5HTlwiOiBcIuKCplwiXG4sIFwiTk9LXCI6IFwia3JcIlxuLCBcIk9NUlwiOiBcIu+3vFwiXG4sIFwiUEtSXCI6IFwi4oKoXCJcbiwgXCJQQUJcIjogXCJCLy5cIlxuLCBcIlBZR1wiOiBcIkdzXCJcbiwgXCJQRU5cIjogXCJTLy5cIlxuLCBcIlBIUFwiOiBcIuKCsVwiXG4sIFwiUExOXCI6IFwiesWCXCJcbiwgXCJRQVJcIjogXCLvt7xcIlxuLCBcIlJPTlwiOiBcImxlaVwiXG4sIFwiUlVCXCI6IFwi4oK9XCJcbiwgXCJTSFBcIjogXCLCo1wiXG4sIFwiU0FSXCI6IFwi77e8XCJcbiwgXCJSU0RcIjogXCLQlNC40L0uXCJcbiwgXCJTQ1JcIjogXCLigqhcIlxuLCBcIlNHRFwiOiBcIiRcIlxuLCBcIlNCRFwiOiBcIiRcIlxuLCBcIlNPU1wiOiBcIlNcIlxuLCBcIlpBUlwiOiBcIlJcIlxuLCBcIkxLUlwiOiBcIuKCqFwiXG4sIFwiU0VLXCI6IFwia3JcIlxuLCBcIkNIRlwiOiBcIkNIRlwiXG4sIFwiU1JEXCI6IFwiJFwiXG4sIFwiU1lQXCI6IFwiwqNcIlxuLCBcIlRaU1wiOiBcIlRTaFwiXG4sIFwiVFdEXCI6IFwiTlQkXCJcbiwgXCJUSEJcIjogXCLguL9cIlxuLCBcIlRURFwiOiBcIlRUJFwiXG4sIFwiVFJZXCI6IFwiXCJcbiwgXCJUUkxcIjogXCLigqRcIlxuLCBcIlRWRFwiOiBcIiRcIlxuLCBcIlVHWFwiOiBcIlVTaFwiXG4sIFwiVUFIXCI6IFwi4oK0XCJcbiwgXCJHQlBcIjogXCLCo1wiXG4sIFwiVVNEXCI6IFwiJFwiXG4sIFwiVVlVXCI6IFwiJFVcIlxuLCBcIlVaU1wiOiBcItC70LJcIlxuLCBcIlZFRlwiOiBcIkJzXCJcbiwgXCJWTkRcIjogXCLigqtcIlxuLCBcIllFUlwiOiBcIu+3vFwiXG4sIFwiWldEXCI6IFwiWiRcIlxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuSEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/currency-symbol-map/map.js\n"); - -/***/ }), - -/***/ "../node_modules/define-properties/index.js": -/*!**************************************************!*\ - !*** ../node_modules/define-properties/index.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar keys = __webpack_require__(/*! object-keys */ \"../node_modules/object-keys/index.js\");\n\nvar hasSymbols = typeof Symbol === 'function' && _typeof(Symbol('foo')) === 'symbol';\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function isFunction(fn) {\n return typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function arePropertyDescriptorsSupported() {\n var obj = {};\n\n try {\n origDefineProperty(obj, 'x', {\n enumerable: false,\n value: obj\n }); // eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\n for (var _ in obj) {\n // jscs:ignore disallowUnusedVariables\n return false;\n }\n\n return obj.x === obj;\n } catch (e) {\n /* this is IE 8. */\n return false;\n }\n};\n\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function defineProperty(object, name, value, predicate) {\n if (name in object && (!isFunction(predicate) || !predicate())) {\n return;\n }\n\n if (supportsDescriptors) {\n origDefineProperty(object, name, {\n configurable: true,\n enumerable: false,\n value: value,\n writable: true\n });\n } else {\n object[name] = value;\n }\n};\n\nvar defineProperties = function defineProperties(object, map) {\n var predicates = arguments.length > 2 ? arguments[2] : {};\n var props = keys(map);\n\n if (hasSymbols) {\n props = concat.call(props, Object.getOwnPropertySymbols(map));\n }\n\n for (var i = 0; i < props.length; i += 1) {\n defineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n }\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\nmodule.exports = defineProperties;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcz82NTAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQU9BO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFRQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/define-properties/index.js\n"); - -/***/ }), - -/***/ "../node_modules/detab/index.js": -/*!**************************************!*\ - !*** ../node_modules/detab/index.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = detab;\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar tab = 0x09;\nvar lineFeed = 0x0a;\nvar carriageReturn = 0x0d; // Replace tabs with spaces, being smart about which column the tab is at and\n// which size should be used.\n\nfunction detab(value, size) {\n var string = typeof value === 'string';\n var length = string && value.length;\n var start = 0;\n var index = -1;\n var column = -1;\n var tabSize = size || 4;\n var results = [];\n var code;\n var add;\n\n if (!string) {\n throw new Error('detab expected string');\n }\n\n while (++index < length) {\n code = value.charCodeAt(index);\n\n if (code === tab) {\n add = tabSize - (column + 1) % tabSize;\n column += add;\n results.push(value.slice(start, index) + repeat(' ', add));\n start = index + 1;\n } else if (code === lineFeed || code === carriageReturn) {\n column = -1;\n } else {\n column++;\n }\n }\n\n results.push(value.slice(start));\n return results.join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2RldGFiL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZXRhYi9pbmRleC5qcz9jY2FiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRldGFiXG5cbnZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJylcblxudmFyIHRhYiA9IDB4MDlcbnZhciBsaW5lRmVlZCA9IDB4MGFcbnZhciBjYXJyaWFnZVJldHVybiA9IDB4MGRcblxuLy8gUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzLCBiZWluZyBzbWFydCBhYm91dCB3aGljaCBjb2x1bW4gdGhlIHRhYiBpcyBhdCBhbmRcbi8vIHdoaWNoIHNpemUgc2hvdWxkIGJlIHVzZWQuXG5mdW5jdGlvbiBkZXRhYih2YWx1ZSwgc2l6ZSkge1xuICB2YXIgc3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nICYmIHZhbHVlLmxlbmd0aFxuICB2YXIgc3RhcnQgPSAwXG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciBjb2x1bW4gPSAtMVxuICB2YXIgdGFiU2l6ZSA9IHNpemUgfHwgNFxuICB2YXIgcmVzdWx0cyA9IFtdXG4gIHZhciBjb2RlXG4gIHZhciBhZGRcblxuICBpZiAoIXN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcignZGV0YWIgZXhwZWN0ZWQgc3RyaW5nJylcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpXG5cbiAgICBpZiAoY29kZSA9PT0gdGFiKSB7XG4gICAgICBhZGQgPSB0YWJTaXplIC0gKChjb2x1bW4gKyAxKSAlIHRhYlNpemUpXG4gICAgICBjb2x1bW4gKz0gYWRkXG4gICAgICByZXN1bHRzLnB1c2godmFsdWUuc2xpY2Uoc3RhcnQsIGluZGV4KSArIHJlcGVhdCgnICcsIGFkZCkpXG4gICAgICBzdGFydCA9IGluZGV4ICsgMVxuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gbGluZUZlZWQgfHwgY29kZSA9PT0gY2FycmlhZ2VSZXR1cm4pIHtcbiAgICAgIGNvbHVtbiA9IC0xXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbisrXG4gICAgfVxuICB9XG5cbiAgcmVzdWx0cy5wdXNoKHZhbHVlLnNsaWNlKHN0YXJ0KSlcblxuICByZXR1cm4gcmVzdWx0cy5qb2luKCcnKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/detab/index.js\n"); - -/***/ }), - -/***/ "../node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js": -/*!************************************************************************!*\ - !*** ../node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar util = __webpack_require__(/*! ./util */ \"../node_modules/dom-scroll-into-view/lib/util.js\");\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {}; // document 归一化到 window\n\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset = undefined;\n var ch = undefined;\n var cw = undefined;\n var containerScroll = undefined;\n var diffTop = undefined;\n var diffBottom = undefined;\n var win = undefined;\n var winScroll = undefined;\n var ww = undefined;\n var wh = undefined;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n }; // elem 相对 container 可视视窗的距离\n\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n }; // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nmodule.exports = scrollIntoView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2RvbS1zY3JvbGwtaW50by12aWV3L2xpYi9kb20tc2Nyb2xsLWludG8tdmlldy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZG9tLXNjcm9sbC1pbnRvLXZpZXcvbGliL2RvbS1zY3JvbGwtaW50by12aWV3LmpzPzFjOGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5mdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhlbGVtLCBjb250YWluZXIsIGNvbmZpZykge1xuICBjb25maWcgPSBjb25maWcgfHwge307XG4gIC8vIGRvY3VtZW50IOW9kuS4gOWMluWIsCB3aW5kb3dcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gOSkge1xuICAgIGNvbnRhaW5lciA9IHV0aWwuZ2V0V2luZG93KGNvbnRhaW5lcik7XG4gIH1cblxuICB2YXIgYWxsb3dIb3Jpem9udGFsU2Nyb2xsID0gY29uZmlnLmFsbG93SG9yaXpvbnRhbFNjcm9sbDtcbiAgdmFyIG9ubHlTY3JvbGxJZk5lZWRlZCA9IGNvbmZpZy5vbmx5U2Nyb2xsSWZOZWVkZWQ7XG4gIHZhciBhbGlnbldpdGhUb3AgPSBjb25maWcuYWxpZ25XaXRoVG9wO1xuICB2YXIgYWxpZ25XaXRoTGVmdCA9IGNvbmZpZy5hbGlnbldpdGhMZWZ0O1xuICB2YXIgb2Zmc2V0VG9wID0gY29uZmlnLm9mZnNldFRvcCB8fCAwO1xuICB2YXIgb2Zmc2V0TGVmdCA9IGNvbmZpZy5vZmZzZXRMZWZ0IHx8IDA7XG4gIHZhciBvZmZzZXRCb3R0b20gPSBjb25maWcub2Zmc2V0Qm90dG9tIHx8IDA7XG4gIHZhciBvZmZzZXRSaWdodCA9IGNvbmZpZy5vZmZzZXRSaWdodCB8fCAwO1xuXG4gIGFsbG93SG9yaXpvbnRhbFNjcm9sbCA9IGFsbG93SG9yaXpvbnRhbFNjcm9sbCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93SG9yaXpvbnRhbFNjcm9sbDtcblxuICB2YXIgaXNXaW4gPSB1dGlsLmlzV2luZG93KGNvbnRhaW5lcik7XG4gIHZhciBlbGVtT2Zmc2V0ID0gdXRpbC5vZmZzZXQoZWxlbSk7XG4gIHZhciBlaCA9IHV0aWwub3V0ZXJIZWlnaHQoZWxlbSk7XG4gIHZhciBldyA9IHV0aWwub3V0ZXJXaWR0aChlbGVtKTtcbiAgdmFyIGNvbnRhaW5lck9mZnNldCA9IHVuZGVmaW5lZDtcbiAgdmFyIGNoID0gdW5kZWZpbmVkO1xuICB2YXIgY3cgPSB1bmRlZmluZWQ7XG4gIHZhciBjb250YWluZXJTY3JvbGwgPSB1bmRlZmluZWQ7XG4gIHZhciBkaWZmVG9wID0gdW5kZWZpbmVkO1xuICB2YXIgZGlmZkJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgdmFyIHdpbiA9IHVuZGVmaW5lZDtcbiAgdmFyIHdpblNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgdmFyIHd3ID0gdW5kZWZpbmVkO1xuICB2YXIgd2ggPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzV2luKSB7XG4gICAgd2luID0gY29udGFpbmVyO1xuICAgIHdoID0gdXRpbC5oZWlnaHQod2luKTtcbiAgICB3dyA9IHV0aWwud2lkdGgod2luKTtcbiAgICB3aW5TY3JvbGwgPSB7XG4gICAgICBsZWZ0OiB1dGlsLnNjcm9sbExlZnQod2luKSxcbiAgICAgIHRvcDogdXRpbC5zY3JvbGxUb3Aod2luKVxuICAgIH07XG4gICAgLy8gZWxlbSDnm7jlr7kgY29udGFpbmVyIOWPr+inhuinhueql+eahOi3neemu1xuICAgIGRpZmZUb3AgPSB7XG4gICAgICBsZWZ0OiBlbGVtT2Zmc2V0LmxlZnQgLSB3aW5TY3JvbGwubGVmdCAtIG9mZnNldExlZnQsXG4gICAgICB0b3A6IGVsZW1PZmZzZXQudG9wIC0gd2luU2Nyb2xsLnRvcCAtIG9mZnNldFRvcFxuICAgIH07XG4gICAgZGlmZkJvdHRvbSA9IHtcbiAgICAgIGxlZnQ6IGVsZW1PZmZzZXQubGVmdCArIGV3IC0gKHdpblNjcm9sbC5sZWZ0ICsgd3cpICsgb2Zmc2V0UmlnaHQsXG4gICAgICB0b3A6IGVsZW1PZmZzZXQudG9wICsgZWggLSAod2luU2Nyb2xsLnRvcCArIHdoKSArIG9mZnNldEJvdHRvbVxuICAgIH07XG4gICAgY29udGFpbmVyU2Nyb2xsID0gd2luU2Nyb2xsO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lck9mZnNldCA9IHV0aWwub2Zmc2V0KGNvbnRhaW5lcik7XG4gICAgY2ggPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgIGN3ID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGNvbnRhaW5lclNjcm9sbCA9IHtcbiAgICAgIGxlZnQ6IGNvbnRhaW5lci5zY3JvbGxMZWZ0LFxuICAgICAgdG9wOiBjb250YWluZXIuc2Nyb2xsVG9wXG4gICAgfTtcbiAgICAvLyBlbGVtIOebuOWvuSBjb250YWluZXIg5Y+v6KeG6KeG56qX55qE6Led56a7XG4gICAgLy8g5rOo5oSP6L655qGGLCBvZmZzZXQg5piv6L655qGG5Yiw5qC56IqC54K5XG4gICAgZGlmZlRvcCA9IHtcbiAgICAgIGxlZnQ6IGVsZW1PZmZzZXQubGVmdCAtIChjb250YWluZXJPZmZzZXQubGVmdCArIChwYXJzZUZsb2F0KHV0aWwuY3NzKGNvbnRhaW5lciwgJ2JvcmRlckxlZnRXaWR0aCcpKSB8fCAwKSkgLSBvZmZzZXRMZWZ0LFxuICAgICAgdG9wOiBlbGVtT2Zmc2V0LnRvcCAtIChjb250YWluZXJPZmZzZXQudG9wICsgKHBhcnNlRmxvYXQodXRpbC5jc3MoY29udGFpbmVyLCAnYm9yZGVyVG9wV2lkdGgnKSkgfHwgMCkpIC0gb2Zmc2V0VG9wXG4gICAgfTtcbiAgICBkaWZmQm90dG9tID0ge1xuICAgICAgbGVmdDogZWxlbU9mZnNldC5sZWZ0ICsgZXcgLSAoY29udGFpbmVyT2Zmc2V0LmxlZnQgKyBjdyArIChwYXJzZUZsb2F0KHV0aWwuY3NzKGNvbnRhaW5lciwgJ2JvcmRlclJpZ2h0V2lkdGgnKSkgfHwgMCkpICsgb2Zmc2V0UmlnaHQsXG4gICAgICB0b3A6IGVsZW1PZmZzZXQudG9wICsgZWggLSAoY29udGFpbmVyT2Zmc2V0LnRvcCArIGNoICsgKHBhcnNlRmxvYXQodXRpbC5jc3MoY29udGFpbmVyLCAnYm9yZGVyQm90dG9tV2lkdGgnKSkgfHwgMCkpICsgb2Zmc2V0Qm90dG9tXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkaWZmVG9wLnRvcCA8IDAgfHwgZGlmZkJvdHRvbS50b3AgPiAwKSB7XG4gICAgLy8g5by65Yi25ZCR5LiKXG4gICAgaWYgKGFsaWduV2l0aFRvcCA9PT0gdHJ1ZSkge1xuICAgICAgdXRpbC5zY3JvbGxUb3AoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwudG9wICsgZGlmZlRvcC50b3ApO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25XaXRoVG9wID09PSBmYWxzZSkge1xuICAgICAgdXRpbC5zY3JvbGxUb3AoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwudG9wICsgZGlmZkJvdHRvbS50b3ApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDoh6rliqjosIPmlbRcbiAgICAgIGlmIChkaWZmVG9wLnRvcCA8IDApIHtcbiAgICAgICAgdXRpbC5zY3JvbGxUb3AoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwudG9wICsgZGlmZlRvcC50b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXRpbC5zY3JvbGxUb3AoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwudG9wICsgZGlmZkJvdHRvbS50b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIW9ubHlTY3JvbGxJZk5lZWRlZCkge1xuICAgICAgYWxpZ25XaXRoVG9wID0gYWxpZ25XaXRoVG9wID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFhbGlnbldpdGhUb3A7XG4gICAgICBpZiAoYWxpZ25XaXRoVG9wKSB7XG4gICAgICAgIHV0aWwuc2Nyb2xsVG9wKGNvbnRhaW5lciwgY29udGFpbmVyU2Nyb2xsLnRvcCArIGRpZmZUb3AudG9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwuc2Nyb2xsVG9wKGNvbnRhaW5lciwgY29udGFpbmVyU2Nyb2xsLnRvcCArIGRpZmZCb3R0b20udG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoYWxsb3dIb3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgaWYgKGRpZmZUb3AubGVmdCA8IDAgfHwgZGlmZkJvdHRvbS5sZWZ0ID4gMCkge1xuICAgICAgLy8g5by65Yi25ZCR5LiKXG4gICAgICBpZiAoYWxpZ25XaXRoTGVmdCA9PT0gdHJ1ZSkge1xuICAgICAgICB1dGlsLnNjcm9sbExlZnQoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwubGVmdCArIGRpZmZUb3AubGVmdCk7XG4gICAgICB9IGVsc2UgaWYgKGFsaWduV2l0aExlZnQgPT09IGZhbHNlKSB7XG4gICAgICAgIHV0aWwuc2Nyb2xsTGVmdChjb250YWluZXIsIGNvbnRhaW5lclNjcm9sbC5sZWZ0ICsgZGlmZkJvdHRvbS5sZWZ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOiHquWKqOiwg+aVtFxuICAgICAgICBpZiAoZGlmZlRvcC5sZWZ0IDwgMCkge1xuICAgICAgICAgIHV0aWwuc2Nyb2xsTGVmdChjb250YWluZXIsIGNvbnRhaW5lclNjcm9sbC5sZWZ0ICsgZGlmZlRvcC5sZWZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1dGlsLnNjcm9sbExlZnQoY29udGFpbmVyLCBjb250YWluZXJTY3JvbGwubGVmdCArIGRpZmZCb3R0b20ubGVmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvbmx5U2Nyb2xsSWZOZWVkZWQpIHtcbiAgICAgICAgYWxpZ25XaXRoTGVmdCA9IGFsaWduV2l0aExlZnQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIWFsaWduV2l0aExlZnQ7XG4gICAgICAgIGlmIChhbGlnbldpdGhMZWZ0KSB7XG4gICAgICAgICAgdXRpbC5zY3JvbGxMZWZ0KGNvbnRhaW5lciwgY29udGFpbmVyU2Nyb2xsLmxlZnQgKyBkaWZmVG9wLmxlZnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHV0aWwuc2Nyb2xsTGVmdChjb250YWluZXIsIGNvbnRhaW5lclNjcm9sbC5sZWZ0ICsgZGlmZkJvdHRvbS5sZWZ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNjcm9sbEludG9WaWV3OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js\n"); - -/***/ }), - -/***/ "../node_modules/dom-scroll-into-view/lib/index.js": -/*!*********************************************************!*\ - !*** ../node_modules/dom-scroll-into-view/lib/index.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = __webpack_require__(/*! ./dom-scroll-into-view */ \"../node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2RvbS1zY3JvbGwtaW50by12aWV3L2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZG9tLXNjcm9sbC1pbnRvLXZpZXcvbGliL2luZGV4LmpzPzI0ZDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZG9tLXNjcm9sbC1pbnRvLXZpZXcnKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/dom-scroll-into-view/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/dom-scroll-into-view/lib/util.js": -/*!********************************************************!*\ - !*** ../node_modules/dom-scroll-into-view/lib/util.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : _typeof2(obj);\n};\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box = undefined;\n var x = undefined;\n var y = undefined;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement; // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n\n box = elem.getBoundingClientRect(); // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top; // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n var method = 'scroll' + (top ? 'Top' : 'Left');\n\n if (typeof ret !== 'number') {\n var d = w.document; // ie6,7,8 standard mode\n\n ret = d.documentElement[method];\n\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\n\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null); // https://github.com/kissyteam/kissy/issues/61\n\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\n\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT]; // prevent flashing of content\n\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; // Put in the new values to get a computed value out\n\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX; // Revert the changed values\n\n style[LEFT] = left;\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX = undefined;\n\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name = undefined; // Remember the old values, and insert the new ones\n\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem); // Revert the old values\n\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop = undefined;\n var j = undefined;\n var i = undefined;\n\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = undefined;\n\n if (prop === 'border') {\n cssProp = prop + which[i] + 'Width';\n } else {\n cssProp = prop + which[i];\n }\n\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n\n return value;\n}\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\n\n\nfunction isWindow(obj) {\n // must use == for ie8\n\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\neach(['Width', 'Height'], function (name) {\n domUtils['doc' + name] = function (refWin) {\n var d = refWin.document;\n return Math.max( // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement['scroll' + name], // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body['scroll' + name], domUtils['viewport' + name](d));\n };\n\n domUtils['viewport' + name] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = 'client' + name;\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop]; // 标准模式取 documentElement\n // backcompat 取 body\n\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\n\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem, computedStyle);\n var cssBoxValue = 0;\n\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined; // Fall back to computed then un computed css if necessary\n\n cssBoxValue = getComputedStyleX(elem, name);\n\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n } // Normalize '', auto, and prepare for extra\n\n\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n }\n\n return cssBoxValue;\n }\n\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n}; // fix #119 : https://github.com/kissyteam/kissy/issues/119\n\nfunction getWHIgnoreDisplay(elem) {\n var val = undefined;\n var args = arguments; // in case elem is window\n // elem.offsetWidth === undefined\n\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n\n return undefined;\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n\n el.style[name] = value;\n return undefined;\n }\n\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n\n domUtils['outer' + first] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n }\n\n return css(elem, name, val);\n }\n\n return undefined;\n }\n\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n}); // 设置 elem 相对 elem.ownerDocument 的坐标\n\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current = undefined;\n var key = undefined;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n\n css(elem, ret);\n}\n\nmodule.exports = _extends({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n\n var overflow = obj.overflow;\n\n if (overflow) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n\n w.scrollTop = v;\n }\n },\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2RvbS1zY3JvbGwtaW50by12aWV3L2xpYi91dGlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kb20tc2Nyb2xsLWludG8tdmlldy9saWIvdXRpbC5qcz83ZjVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBSRV9OVU0gPSAvW1xcLStdPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdW1xcLStdP1xcZCt8KS8uc291cmNlO1xuXG5mdW5jdGlvbiBnZXRDbGllbnRQb3NpdGlvbihlbGVtKSB7XG4gIHZhciBib3ggPSB1bmRlZmluZWQ7XG4gIHZhciB4ID0gdW5kZWZpbmVkO1xuICB2YXIgeSA9IHVuZGVmaW5lZDtcbiAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcbiAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgdmFyIGRvY0VsZW0gPSBkb2MgJiYgZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgLy8g5qC55o2uIEdCUyDmnIDmlrDmlbDmja7vvIxBLUdyYWRlIEJyb3dzZXJzIOmDveW3suaUr+aMgSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qg5pa55rOV77yM5LiN55So5YaN6ICD6JmR5Lyg57uf55qE5a6e546w5pa55byPXG4gIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8g5rOo77yaalF1ZXJ5IOi/mOiAg+iZkeWHj+WOuyBkb2NFbGVtLmNsaWVudExlZnQvY2xpZW50VG9wXG4gIC8vIOS9hua1i+ivleWPkeeOsO+8jOi/meagt+WPjeiAjOS8muWvvOiHtOW9kyBodG1sIOWSjCBib2R5IOaciei+uei3nS/ovrnmoYbmoLflvI/ml7bvvIzojrflj5bnmoTlgLzkuI3mraPnoa5cbiAgLy8g5q2k5aSW77yMaWU2IOS8muW/veeVpSBodG1sIOeahCBtYXJnaW4g5YC877yM5bm46L+Q5Zyw5piv5rKh5pyJ6LCB5Lya5Y676K6+572uIGh0bWwg55qEIG1hcmdpblxuXG4gIHggPSBib3gubGVmdDtcbiAgeSA9IGJveC50b3A7XG5cbiAgLy8gSW4gSUUsIG1vc3Qgb2YgdGhlIHRpbWUsIDIgZXh0cmEgcGl4ZWxzIGFyZSBhZGRlZCB0byB0aGUgdG9wIGFuZCBsZWZ0XG4gIC8vIGR1ZSB0byB0aGUgaW1wbGljaXQgMi1waXhlbCBpbnNldCBib3JkZXIuICBJbiBJRTYvNyBxdWlya3MgbW9kZSBhbmRcbiAgLy8gSUU2IHN0YW5kYXJkcyBtb2RlLCB0aGlzIGJvcmRlciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZVxuICAvLyBkb2N1bWVudCBlbGVtZW50J3MgYm9yZGVyIHRvIHplcm8gLS0gdGh1cywgd2UgY2Fubm90IHJlbHkgb24gdGhlXG4gIC8vIG9mZnNldCBhbHdheXMgYmVpbmcgMiBwaXhlbHMuXG5cbiAgLy8gSW4gcXVpcmtzIG1vZGUsIHRoZSBvZmZzZXQgY2FuIGJlIGRldGVybWluZWQgYnkgcXVlcnlpbmcgdGhlIGJvZHknc1xuICAvLyBjbGllbnRMZWZ0L2NsaWVudFRvcCwgYnV0IGluIHN0YW5kYXJkcyBtb2RlLCBpdCBpcyBmb3VuZCBieSBxdWVyeWluZ1xuICAvLyB0aGUgZG9jdW1lbnQgZWxlbWVudCdzIGNsaWVudExlZnQvY2xpZW50VG9wLiAgU2luY2Ugd2UgYWxyZWFkeSBjYWxsZWRcbiAgLy8gZ2V0Q2xpZW50Qm91bmRpbmdSZWN0IHdlIGhhdmUgYWxyZWFkeSBmb3JjZWQgYSByZWZsb3csIHNvIGl0IGlzIG5vdFxuICAvLyB0b28gZXhwZW5zaXZlIGp1c3QgdG8gcXVlcnkgdGhlbSBhbGwuXG5cbiAgLy8gaWUg5LiL5bqU6K+l5YeP5Y6756qX5Y+j55qE6L655qGG5ZCn77yM5q+V56uf6buY6K6kIGFic29sdXRlIOmDveaYr+ebuOWvueeql+WPo+WumuS9jeeahFxuICAvLyDnqpflj6PovrnmoYbmoIflh4bmmK/orr4gZG9jdW1lbnRFbGVtZW50ICxxdWlya3Mg5pe26K6+572uIGJvZHlcbiAgLy8g5pyA5aW956aB5q2i5ZyoIGJvZHkg5ZKMIGh0bWwg5LiK6L655qGGIO+8jOS9hiBpZSA8IDkgaHRtbCDpu5jorqTmnIkgMnB4IO+8jOWHj+WOu1xuICAvLyDkvYbmmK/pnZ4gaWUg5LiN5Y+v6IO96K6+572u56qX5Y+j6L655qGG77yMYm9keSBodG1sIOS5n+S4jeaYr+eql+WPoyAsaWUg5Y+v5Lul6YCa6L+HIGh0bWwsYm9keSDorr7nva5cbiAgLy8g5qCH5YeGIGllIOS4iyBkb2NFbGVtLmNsaWVudFRvcCDlsLHmmK8gYm9yZGVyLXRvcFxuICAvLyBpZTcgaHRtbCDljbPnqpflj6PovrnmoYbmlLnlj5jkuI3kuobjgILmsLjov5zkuLogMlxuICAvLyDkvYbmoIflh4YgZmlyZWZveC9jaHJvbWUvaWU5IOS4iyBkb2NFbGVtLmNsaWVudFRvcCDmmK/nqpflj6PovrnmoYbvvIzljbPkvb/orr7kuoYgYm9yZGVyLXRvcCDkuZ/kuLogMFxuXG4gIHggLT0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xuICB5IC09IGRvY0VsZW0uY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiB4LFxuICAgIHRvcDogeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGwodywgdG9wKSB7XG4gIHZhciByZXQgPSB3WydwYWdlJyArICh0b3AgPyAnWScgOiAnWCcpICsgJ09mZnNldCddO1xuICB2YXIgbWV0aG9kID0gJ3Njcm9sbCcgKyAodG9wID8gJ1RvcCcgOiAnTGVmdCcpO1xuICBpZiAodHlwZW9mIHJldCAhPT0gJ251bWJlcicpIHtcbiAgICB2YXIgZCA9IHcuZG9jdW1lbnQ7XG4gICAgLy8gaWU2LDcsOCBzdGFuZGFyZCBtb2RlXG4gICAgcmV0ID0gZC5kb2N1bWVudEVsZW1lbnRbbWV0aG9kXTtcbiAgICBpZiAodHlwZW9mIHJldCAhPT0gJ251bWJlcicpIHtcbiAgICAgIC8vIHF1aXJrcyBtb2RlXG4gICAgICByZXQgPSBkLmJvZHlbbWV0aG9kXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdCh3KSB7XG4gIHJldHVybiBnZXRTY3JvbGwodyk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcCh3KSB7XG4gIHJldHVybiBnZXRTY3JvbGwodywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldChlbCkge1xuICB2YXIgcG9zID0gZ2V0Q2xpZW50UG9zaXRpb24oZWwpO1xuICB2YXIgZG9jID0gZWwub3duZXJEb2N1bWVudDtcbiAgdmFyIHcgPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgcG9zLmxlZnQgKz0gZ2V0U2Nyb2xsTGVmdCh3KTtcbiAgcG9zLnRvcCArPSBnZXRTY3JvbGxUb3Aodyk7XG4gIHJldHVybiBwb3M7XG59XG5mdW5jdGlvbiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBuYW1lLCBjb21wdXRlZFN0eWxlXykge1xuICB2YXIgdmFsID0gJyc7XG4gIHZhciBkID0gZWxlbS5vd25lckRvY3VtZW50O1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGVfIHx8IGQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20va2lzc3l0ZWFtL2tpc3N5L2lzc3Vlcy82MVxuICBpZiAoY29tcHV0ZWRTdHlsZSkge1xuICAgIHZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSB8fCBjb21wdXRlZFN0eWxlW25hbWVdO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxudmFyIF9SRV9OVU1fTk9fUFggPSBuZXcgUmVnRXhwKCdeKCcgKyBSRV9OVU0gKyAnKSg/IXB4KVthLXolXSskJywgJ2knKTtcbnZhciBSRV9QT1MgPSAvXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87XG52YXIgQ1VSUkVOVF9TVFlMRSA9ICdjdXJyZW50U3R5bGUnO1xudmFyIFJVTlRJTUVfU1RZTEUgPSAncnVudGltZVN0eWxlJztcbnZhciBMRUZUID0gJ2xlZnQnO1xudmFyIFBYID0gJ3B4JztcblxuZnVuY3Rpb24gX2dldENvbXB1dGVkU3R5bGVJRShlbGVtLCBuYW1lKSB7XG4gIC8vIGN1cnJlbnRTdHlsZSBtYXliZSBudWxsXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNTIzMS5hc3B4XG4gIHZhciByZXQgPSBlbGVtW0NVUlJFTlRfU1RZTEVdICYmIGVsZW1bQ1VSUkVOVF9TVFlMRV1bbmFtZV07XG5cbiAgLy8g5b2TIHdpZHRoL2hlaWdodCDorr7nva7kuLrnmb7liIbmr5Tml7bvvIzpgJrov4cgcGl4ZWxMZWZ0IOaWueW8j+i9rOaNoueahCB3aWR0aC9oZWlnaHQg5YC8XG4gIC8vIOS4gOW8gOWni+WwseWkhOeQhuS6hiEgQ1VTVE9NX1NUWUxFLmhlaWdodCxDVVNUT01fU1RZTEUud2lkdGggLGNzc0hvb2sg6Kej5YazQDIwMTEtMDgtMTlcbiAgLy8g5ZyoIGllIOS4i+S4jeWvue+8jOmcgOimgeebtOaOpeeUqCBvZmZzZXQg5pa55byPXG4gIC8vIGJvcmRlcldpZHRoIOetieWAvOS5n+aciemXrumimO+8jOS9huiAg+iZkeWIsCBib3JkZXJXaWR0aCDorr7kuLrnmb7liIbmr5TnmoTmpoLnjoflvojlsI/vvIzov5nph4zlsLHkuI3ogIPomZHkuoZcblxuICAvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXG4gIC8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcbiAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyXG4gIC8vIGJ1dCBhIG51bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVsc1xuICAvLyBleGNsdWRlIGxlZnQgcmlnaHQgZm9yIHJlbGF0aXZpdHlcbiAgaWYgKF9SRV9OVU1fTk9fUFgudGVzdChyZXQpICYmICFSRV9QT1MudGVzdChuYW1lKSkge1xuICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcbiAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlO1xuICAgIHZhciBsZWZ0ID0gc3R5bGVbTEVGVF07XG4gICAgdmFyIHJzTGVmdCA9IGVsZW1bUlVOVElNRV9TVFlMRV1bTEVGVF07XG5cbiAgICAvLyBwcmV2ZW50IGZsYXNoaW5nIG9mIGNvbnRlbnRcbiAgICBlbGVtW1JVTlRJTUVfU1RZTEVdW0xFRlRdID0gZWxlbVtDVVJSRU5UX1NUWUxFXVtMRUZUXTtcblxuICAgIC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcbiAgICBzdHlsZVtMRUZUXSA9IG5hbWUgPT09ICdmb250U2l6ZScgPyAnMWVtJyA6IHJldCB8fCAwO1xuICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArIFBYO1xuXG4gICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuICAgIHN0eWxlW0xFRlRdID0gbGVmdDtcblxuICAgIGVsZW1bUlVOVElNRV9TVFlMRV1bTEVGVF0gPSByc0xlZnQ7XG4gIH1cbiAgcmV0dXJuIHJldCA9PT0gJycgPyAnYXV0bycgOiByZXQ7XG59XG5cbnZhciBnZXRDb21wdXRlZFN0eWxlWCA9IHVuZGVmaW5lZDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICBnZXRDb21wdXRlZFN0eWxlWCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8gX2dldENvbXB1dGVkU3R5bGUgOiBfZ2V0Q29tcHV0ZWRTdHlsZUlFO1xufVxuXG5mdW5jdGlvbiBlYWNoKGFyciwgZm4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBmbihhcnJbaV0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQm9yZGVyQm94Rm4oZWxlbSkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZVgoZWxlbSwgJ2JveFNpemluZycpID09PSAnYm9yZGVyLWJveCc7XG59XG5cbnZhciBCT1hfTU9ERUxTID0gWydtYXJnaW4nLCAnYm9yZGVyJywgJ3BhZGRpbmcnXTtcbnZhciBDT05URU5UX0lOREVYID0gLTE7XG52YXIgUEFERElOR19JTkRFWCA9IDI7XG52YXIgQk9SREVSX0lOREVYID0gMTtcbnZhciBNQVJHSU5fSU5ERVggPSAwO1xuXG5mdW5jdGlvbiBzd2FwKGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBvbGQgPSB7fTtcbiAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZTtcbiAgdmFyIG5hbWUgPSB1bmRlZmluZWQ7XG5cbiAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG4gIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIG9sZFtuYW1lXSA9IHN0eWxlW25hbWVdO1xuICAgICAgc3R5bGVbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoZWxlbSk7XG5cbiAgLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG4gIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHN0eWxlW25hbWVdID0gb2xkW25hbWVdO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQQk1XaWR0aChlbGVtLCBwcm9wcywgd2hpY2gpIHtcbiAgdmFyIHZhbHVlID0gMDtcbiAgdmFyIHByb3AgPSB1bmRlZmluZWQ7XG4gIHZhciBqID0gdW5kZWZpbmVkO1xuICB2YXIgaSA9IHVuZGVmaW5lZDtcbiAgZm9yIChqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgcHJvcCA9IHByb3BzW2pdO1xuICAgIGlmIChwcm9wKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgd2hpY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNzc1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcm9wID09PSAnYm9yZGVyJykge1xuICAgICAgICAgIGNzc1Byb3AgPSBwcm9wICsgd2hpY2hbaV0gKyAnV2lkdGgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNzc1Byb3AgPSBwcm9wICsgd2hpY2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgKz0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlWChlbGVtLCBjc3NQcm9wKSkgfHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIEEgY3J1ZGUgd2F5IG9mIGRldGVybWluaW5nIGlmIGFuIG9iamVjdCBpcyBhIHdpbmRvd1xuICogQG1lbWJlciB1dGlsXG4gKi9cbmZ1bmN0aW9uIGlzV2luZG93KG9iaikge1xuICAvLyBtdXN0IHVzZSA9PSBmb3IgaWU4XG4gIC8qIGVzbGludCBlcWVxZXE6MCAqL1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7XG59XG5cbnZhciBkb21VdGlscyA9IHt9O1xuXG5lYWNoKFsnV2lkdGgnLCAnSGVpZ2h0J10sIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRvbVV0aWxzWydkb2MnICsgbmFtZV0gPSBmdW5jdGlvbiAocmVmV2luKSB7XG4gICAgdmFyIGQgPSByZWZXaW4uZG9jdW1lbnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgIC8vIGZpcmVmb3ggY2hyb21lIGRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ8IGJvZHkuc2Nyb2xsSGVpZ2h0XG4gICAgLy8gaWUgc3RhbmRhcmQgbW9kZSA6IGRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ+IGJvZHkuc2Nyb2xsSGVpZ2h0XG4gICAgZC5kb2N1bWVudEVsZW1lbnRbJ3Njcm9sbCcgKyBuYW1lXSxcbiAgICAvLyBxdWlya3MgOiBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IOacgOWkp+etieS6juWPr+inhueql+WPo+WkmuS4gOeCue+8n1xuICAgIGQuYm9keVsnc2Nyb2xsJyArIG5hbWVdLCBkb21VdGlsc1sndmlld3BvcnQnICsgbmFtZV0oZCkpO1xuICB9O1xuXG4gIGRvbVV0aWxzWyd2aWV3cG9ydCcgKyBuYW1lXSA9IGZ1bmN0aW9uICh3aW4pIHtcbiAgICAvLyBwYyBicm93c2VyIGluY2x1ZGVzIHNjcm9sbGJhciBpbiB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIHZhciBwcm9wID0gJ2NsaWVudCcgKyBuYW1lO1xuICAgIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gICAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50UHJvcCA9IGRvY3VtZW50RWxlbWVudFtwcm9wXTtcbiAgICAvLyDmoIflh4bmqKHlvI/lj5YgZG9jdW1lbnRFbGVtZW50XG4gICAgLy8gYmFja2NvbXBhdCDlj5YgYm9keVxuICAgIHJldHVybiBkb2MuY29tcGF0TW9kZSA9PT0gJ0NTUzFDb21wYXQnICYmIGRvY3VtZW50RWxlbWVudFByb3AgfHwgYm9keSAmJiBib2R5W3Byb3BdIHx8IGRvY3VtZW50RWxlbWVudFByb3A7XG4gIH07XG59KTtcblxuLypcbiDlvpfliLDlhYPntKDnmoTlpKflsI/kv6Hmga9cbiBAcGFyYW0gZWxlbVxuIEBwYXJhbSBuYW1lXG4gQHBhcmFtIHtTdHJpbmd9IFtleHRyYV0gICdwYWRkaW5nJyA6IChjc3Mgd2lkdGgpICsgcGFkZGluZ1xuICdib3JkZXInIDogKGNzcyB3aWR0aCkgKyBwYWRkaW5nICsgYm9yZGVyXG4gJ21hcmdpbicgOiAoY3NzIHdpZHRoKSArIHBhZGRpbmcgKyBib3JkZXIgKyBtYXJnaW5cbiAqL1xuZnVuY3Rpb24gZ2V0V0goZWxlbSwgbmFtZSwgZXh0cmEpIHtcbiAgaWYgKGlzV2luZG93KGVsZW0pKSB7XG4gICAgcmV0dXJuIG5hbWUgPT09ICd3aWR0aCcgPyBkb21VdGlscy52aWV3cG9ydFdpZHRoKGVsZW0pIDogZG9tVXRpbHMudmlld3BvcnRIZWlnaHQoZWxlbSk7XG4gIH0gZWxzZSBpZiAoZWxlbS5ub2RlVHlwZSA9PT0gOSkge1xuICAgIHJldHVybiBuYW1lID09PSAnd2lkdGgnID8gZG9tVXRpbHMuZG9jV2lkdGgoZWxlbSkgOiBkb21VdGlscy5kb2NIZWlnaHQoZWxlbSk7XG4gIH1cbiAgdmFyIHdoaWNoID0gbmFtZSA9PT0gJ3dpZHRoJyA/IFsnTGVmdCcsICdSaWdodCddIDogWydUb3AnLCAnQm90dG9tJ107XG4gIHZhciBib3JkZXJCb3hWYWx1ZSA9IG5hbWUgPT09ICd3aWR0aCcgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZVgoZWxlbSk7XG4gIHZhciBpc0JvcmRlckJveCA9IGlzQm9yZGVyQm94Rm4oZWxlbSwgY29tcHV0ZWRTdHlsZSk7XG4gIHZhciBjc3NCb3hWYWx1ZSA9IDA7XG4gIGlmIChib3JkZXJCb3hWYWx1ZSA9PSBudWxsIHx8IGJvcmRlckJveFZhbHVlIDw9IDApIHtcbiAgICBib3JkZXJCb3hWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1biBjb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5XG4gICAgY3NzQm94VmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlWChlbGVtLCBuYW1lKTtcbiAgICBpZiAoY3NzQm94VmFsdWUgPT0gbnVsbCB8fCBOdW1iZXIoY3NzQm94VmFsdWUpIDwgMCkge1xuICAgICAgY3NzQm94VmFsdWUgPSBlbGVtLnN0eWxlW25hbWVdIHx8IDA7XG4gICAgfVxuICAgIC8vIE5vcm1hbGl6ZSAnJywgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhXG4gICAgY3NzQm94VmFsdWUgPSBwYXJzZUZsb2F0KGNzc0JveFZhbHVlKSB8fCAwO1xuICB9XG4gIGlmIChleHRyYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXh0cmEgPSBpc0JvcmRlckJveCA/IEJPUkRFUl9JTkRFWCA6IENPTlRFTlRfSU5ERVg7XG4gIH1cbiAgdmFyIGJvcmRlckJveFZhbHVlT3JJc0JvcmRlckJveCA9IGJvcmRlckJveFZhbHVlICE9PSB1bmRlZmluZWQgfHwgaXNCb3JkZXJCb3g7XG4gIHZhciB2YWwgPSBib3JkZXJCb3hWYWx1ZSB8fCBjc3NCb3hWYWx1ZTtcbiAgaWYgKGV4dHJhID09PSBDT05URU5UX0lOREVYKSB7XG4gICAgaWYgKGJvcmRlckJveFZhbHVlT3JJc0JvcmRlckJveCkge1xuICAgICAgcmV0dXJuIHZhbCAtIGdldFBCTVdpZHRoKGVsZW0sIFsnYm9yZGVyJywgJ3BhZGRpbmcnXSwgd2hpY2gsIGNvbXB1dGVkU3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gY3NzQm94VmFsdWU7XG4gIH1cbiAgaWYgKGJvcmRlckJveFZhbHVlT3JJc0JvcmRlckJveCkge1xuICAgIHZhciBwYWRkaW5nID0gZXh0cmEgPT09IFBBRERJTkdfSU5ERVggPyAtZ2V0UEJNV2lkdGgoZWxlbSwgWydib3JkZXInXSwgd2hpY2gsIGNvbXB1dGVkU3R5bGUpIDogZ2V0UEJNV2lkdGgoZWxlbSwgWydtYXJnaW4nXSwgd2hpY2gsIGNvbXB1dGVkU3R5bGUpO1xuICAgIHJldHVybiB2YWwgKyAoZXh0cmEgPT09IEJPUkRFUl9JTkRFWCA/IDAgOiBwYWRkaW5nKTtcbiAgfVxuICByZXR1cm4gY3NzQm94VmFsdWUgKyBnZXRQQk1XaWR0aChlbGVtLCBCT1hfTU9ERUxTLnNsaWNlKGV4dHJhKSwgd2hpY2gsIGNvbXB1dGVkU3R5bGUpO1xufVxuXG52YXIgY3NzU2hvdyA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBkaXNwbGF5OiAnYmxvY2snXG59O1xuXG4vLyBmaXggIzExOSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9raXNzeXRlYW0va2lzc3kvaXNzdWVzLzExOVxuZnVuY3Rpb24gZ2V0V0hJZ25vcmVEaXNwbGF5KGVsZW0pIHtcbiAgdmFyIHZhbCA9IHVuZGVmaW5lZDtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIC8vIGluIGNhc2UgZWxlbSBpcyB3aW5kb3dcbiAgLy8gZWxlbS5vZmZzZXRXaWR0aCA9PT0gdW5kZWZpbmVkXG4gIGlmIChlbGVtLm9mZnNldFdpZHRoICE9PSAwKSB7XG4gICAgdmFsID0gZ2V0V0guYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBzd2FwKGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbCA9IGdldFdILmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gY3NzKGVsLCBuYW1lLCB2KSB7XG4gIHZhciB2YWx1ZSA9IHY7XG4gIGlmICgodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG5hbWUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBpIGluIG5hbWUpIHtcbiAgICAgIGlmIChuYW1lLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIGNzcyhlbCwgaSwgbmFtZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgKz0gJ3B4JztcbiAgICB9XG4gICAgZWwuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlWChlbCwgbmFtZSk7XG59XG5cbmVhY2goWyd3aWR0aCcsICdoZWlnaHQnXSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIGZpcnN0ID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG4gIGRvbVV0aWxzWydvdXRlcicgKyBmaXJzdF0gPSBmdW5jdGlvbiAoZWwsIGluY2x1ZGVNYXJnaW4pIHtcbiAgICByZXR1cm4gZWwgJiYgZ2V0V0hJZ25vcmVEaXNwbGF5KGVsLCBuYW1lLCBpbmNsdWRlTWFyZ2luID8gTUFSR0lOX0lOREVYIDogQk9SREVSX0lOREVYKTtcbiAgfTtcbiAgdmFyIHdoaWNoID0gbmFtZSA9PT0gJ3dpZHRoJyA/IFsnTGVmdCcsICdSaWdodCddIDogWydUb3AnLCAnQm90dG9tJ107XG5cbiAgZG9tVXRpbHNbbmFtZV0gPSBmdW5jdGlvbiAoZWxlbSwgdmFsKSB7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGVYKGVsZW0pO1xuICAgICAgICB2YXIgaXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveEZuKGVsZW0pO1xuICAgICAgICBpZiAoaXNCb3JkZXJCb3gpIHtcbiAgICAgICAgICB2YWwgKz0gZ2V0UEJNV2lkdGgoZWxlbSwgWydwYWRkaW5nJywgJ2JvcmRlciddLCB3aGljaCwgY29tcHV0ZWRTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzcyhlbGVtLCBuYW1lLCB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW0gJiYgZ2V0V0hJZ25vcmVEaXNwbGF5KGVsZW0sIG5hbWUsIENPTlRFTlRfSU5ERVgpO1xuICB9O1xufSk7XG5cbi8vIOiuvue9riBlbGVtIOebuOWvuSBlbGVtLm93bmVyRG9jdW1lbnQg55qE5Z2Q5qCHXG5mdW5jdGlvbiBzZXRPZmZzZXQoZWxlbSwgb2Zmc2V0KSB7XG4gIC8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cbiAgaWYgKGNzcyhlbGVtLCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgfVxuXG4gIHZhciBvbGQgPSBnZXRPZmZzZXQoZWxlbSk7XG4gIHZhciByZXQgPSB7fTtcbiAgdmFyIGN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gIHZhciBrZXkgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChrZXkgaW4gb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjdXJyZW50ID0gcGFyc2VGbG9hdChjc3MoZWxlbSwga2V5KSkgfHwgMDtcbiAgICAgIHJldFtrZXldID0gY3VycmVudCArIG9mZnNldFtrZXldIC0gb2xkW2tleV07XG4gICAgfVxuICB9XG4gIGNzcyhlbGVtLCByZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzKHtcbiAgZ2V0V2luZG93OiBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICAgIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZTtcbiAgICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gIH0sXG4gIG9mZnNldDogZnVuY3Rpb24gb2Zmc2V0KGVsLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBzZXRPZmZzZXQoZWwsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldE9mZnNldChlbCk7XG4gICAgfVxuICB9LFxuXG4gIGlzV2luZG93OiBpc1dpbmRvdyxcbiAgZWFjaDogZWFjaCxcbiAgY3NzOiBjc3MsXG4gIGNsb25lOiBmdW5jdGlvbiBjbG9uZShvYmopIHtcbiAgICB2YXIgcmV0ID0ge307XG4gICAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgcmV0W2ldID0gb2JqW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb3ZlcmZsb3cgPSBvYmoub3ZlcmZsb3c7XG4gICAgaWYgKG92ZXJmbG93KSB7XG4gICAgICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgcmV0Lm92ZXJmbG93W2ldID0gb2JqLm92ZXJmbG93W2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIHNjcm9sbExlZnQ6IGZ1bmN0aW9uIHNjcm9sbExlZnQodywgdikge1xuICAgIGlmIChpc1dpbmRvdyh3KSkge1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZ2V0U2Nyb2xsTGVmdCh3KTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh2LCBnZXRTY3JvbGxUb3AodykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB3LnNjcm9sbExlZnQ7XG4gICAgICB9XG4gICAgICB3LnNjcm9sbExlZnQgPSB2O1xuICAgIH1cbiAgfSxcbiAgc2Nyb2xsVG9wOiBmdW5jdGlvbiBzY3JvbGxUb3Aodywgdikge1xuICAgIGlmIChpc1dpbmRvdyh3KSkge1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZ2V0U2Nyb2xsVG9wKHcpO1xuICAgICAgfVxuICAgICAgd2luZG93LnNjcm9sbFRvKGdldFNjcm9sbExlZnQodyksIHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB3LnNjcm9sbFRvcDtcbiAgICAgIH1cbiAgICAgIHcuc2Nyb2xsVG9wID0gdjtcbiAgICB9XG4gIH0sXG5cbiAgdmlld3BvcnRXaWR0aDogMCxcbiAgdmlld3BvcnRIZWlnaHQ6IDBcbn0sIGRvbVV0aWxzKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQVRBO0FBWEE7QUF3QkE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFaQTtBQVBBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQS9CQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBNUNBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF6REE7QUE0REE7QUFDQTtBQTdEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/dom-scroll-into-view/lib/util.js\n"); - -/***/ }), - -/***/ "../node_modules/easymde/dist/easymde.min.css": -/*!****************************************************!*\ - !*** ../node_modules/easymde/dist/easymde.min.css ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("\nvar content = __webpack_require__(/*! !../../css-loader/dist/cjs.js!../../postcss-loader/src!../../sass-loader/dist/cjs.js!./easymde.min.css */ \"../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/easymde/dist/easymde.min.css\");\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(/*! ../../style-loader/lib/addStyles.js */ \"../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvZGlzdC9lYXN5bWRlLm1pbi5jc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvZGlzdC9lYXN5bWRlLm1pbi5jc3M/MTczMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9lYXN5bWRlLm1pbi5jc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSB1bmRlZmluZWQ7XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9lYXN5bWRlLm1pbi5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2Vhc3ltZGUubWluLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/easymde/dist/easymde.min.css\n"); - -/***/ }), - -/***/ "../node_modules/easymde/src/js/codemirror/tablist.js": -/*!************************************************************!*\ - !*** ../node_modules/easymde/src/js/codemirror/tablist.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\nvar CodeMirror = __webpack_require__(/*! codemirror */ \"../node_modules/codemirror/lib/codemirror.js\");\n\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentMore');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\n\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentLess');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvc3JjL2pzL2NvZGVtaXJyb3IvdGFibGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZWFzeW1kZS9zcmMvanMvY29kZW1pcnJvci90YWJsaXN0LmpzPzU1ZjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG52YXIgQ29kZU1pcnJvciA9IHJlcXVpcmUoJ2NvZGVtaXJyb3InKTtcblxuQ29kZU1pcnJvci5jb21tYW5kcy50YWJBbmRJbmRlbnRNYXJrZG93bkxpc3QgPSBmdW5jdGlvbiAoY20pIHtcbiAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTtcbiAgICB2YXIgcG9zID0gcmFuZ2VzWzBdLmhlYWQ7XG4gICAgdmFyIGVvbFN0YXRlID0gY20uZ2V0U3RhdGVBZnRlcihwb3MubGluZSk7XG4gICAgdmFyIGluTGlzdCA9IGVvbFN0YXRlLmxpc3QgIT09IGZhbHNlO1xuXG4gICAgaWYgKGluTGlzdCkge1xuICAgICAgICBjbS5leGVjQ29tbWFuZCgnaW5kZW50TW9yZScpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNtLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpIHtcbiAgICAgICAgY20uZXhlY0NvbW1hbmQoJ2luc2VydFRhYicpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNwYWNlcyA9IEFycmF5KGNtLm9wdGlvbnMudGFiU2l6ZSArIDEpLmpvaW4oJyAnKTtcbiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihzcGFjZXMpO1xuICAgIH1cbn07XG5cbkNvZGVNaXJyb3IuY29tbWFuZHMuc2hpZnRUYWJBbmRVbmluZGVudE1hcmtkb3duTGlzdCA9IGZ1bmN0aW9uIChjbSkge1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIHZhciBwb3MgPSByYW5nZXNbMF0uaGVhZDtcbiAgICB2YXIgZW9sU3RhdGUgPSBjbS5nZXRTdGF0ZUFmdGVyKHBvcy5saW5lKTtcbiAgICB2YXIgaW5MaXN0ID0gZW9sU3RhdGUubGlzdCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoaW5MaXN0KSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKCdpbmRlbnRMZXNzJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY20ub3B0aW9ucy5pbmRlbnRXaXRoVGFicykge1xuICAgICAgICBjbS5leGVjQ29tbWFuZCgnaW5zZXJ0VGFiJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgc3BhY2VzID0gQXJyYXkoY20ub3B0aW9ucy50YWJTaXplICsgMSkuam9pbignICcpO1xuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHNwYWNlcyk7XG4gICAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQWpCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/easymde/src/js/codemirror/tablist.js\n"); - -/***/ }), - -/***/ "../node_modules/easymde/src/js/easymde.js": -/*!*************************************************!*\ - !*** ../node_modules/easymde/src/js/easymde.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar CodeMirror = __webpack_require__(/*! codemirror */ \"../node_modules/codemirror/lib/codemirror.js\");\n\n__webpack_require__(/*! codemirror/addon/edit/continuelist.js */ \"../node_modules/codemirror/addon/edit/continuelist.js\");\n\n__webpack_require__(/*! ./codemirror/tablist */ \"../node_modules/easymde/src/js/codemirror/tablist.js\");\n\n__webpack_require__(/*! codemirror/addon/display/fullscreen.js */ \"../node_modules/codemirror/addon/display/fullscreen.js\");\n\n__webpack_require__(/*! codemirror/mode/markdown/markdown.js */ \"../node_modules/codemirror/mode/markdown/markdown.js\");\n\n__webpack_require__(/*! codemirror/addon/mode/overlay.js */ \"../node_modules/codemirror/addon/mode/overlay.js\");\n\n__webpack_require__(/*! codemirror/addon/display/placeholder.js */ \"../node_modules/codemirror/addon/display/placeholder.js\");\n\n__webpack_require__(/*! codemirror/addon/selection/mark-selection.js */ \"../node_modules/codemirror/addon/selection/mark-selection.js\");\n\n__webpack_require__(/*! codemirror/addon/search/searchcursor.js */ \"../node_modules/codemirror/addon/search/searchcursor.js\");\n\n__webpack_require__(/*! codemirror/mode/gfm/gfm.js */ \"../node_modules/codemirror/mode/gfm/gfm.js\");\n\n__webpack_require__(/*! codemirror/mode/xml/xml.js */ \"../node_modules/codemirror/mode/xml/xml.js\");\n\nvar CodeMirrorSpellChecker = __webpack_require__(/*! codemirror-spell-checker */ \"../node_modules/codemirror-spell-checker/src/js/spell-checker.js\");\n\nvar marked = __webpack_require__(/*! marked */ \"../node_modules/marked/src/marked.js\"); // Some variables\n\n\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/(<a.*?https?:\\/\\/.*?[^a]>)+?/g); // Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\n\nvar bindings = {\n 'toggleBold': toggleBold,\n 'toggleItalic': toggleItalic,\n 'drawLink': drawLink,\n 'toggleHeadingSmaller': toggleHeadingSmaller,\n 'toggleHeadingBigger': toggleHeadingBigger,\n 'drawImage': drawImage,\n 'toggleBlockquote': toggleBlockquote,\n 'toggleOrderedList': toggleOrderedList,\n 'toggleUnorderedList': toggleUnorderedList,\n 'toggleCodeBlock': toggleCodeBlock,\n 'togglePreview': togglePreview,\n 'toggleStrikethrough': toggleStrikethrough,\n 'toggleHeading1': toggleHeading1,\n 'toggleHeading2': toggleHeading2,\n 'toggleHeading3': toggleHeading3,\n 'cleanBlock': cleanBlock,\n 'drawTable': drawTable,\n 'drawHorizontalRule': drawHorizontalRule,\n 'undo': undo,\n 'redo': redo,\n 'toggleSideBySide': toggleSideBySide,\n 'toggleFullScreen': toggleFullScreen\n};\nvar shortcuts = {\n 'toggleBold': 'Cmd-B',\n 'toggleItalic': 'Cmd-I',\n 'drawLink': 'Cmd-K',\n 'toggleHeadingSmaller': 'Cmd-H',\n 'toggleHeadingBigger': 'Shift-Cmd-H',\n 'cleanBlock': 'Cmd-E',\n 'drawImage': 'Cmd-Alt-I',\n 'toggleBlockquote': 'Cmd-\\'',\n 'toggleOrderedList': 'Cmd-Alt-L',\n 'toggleUnorderedList': 'Cmd-L',\n 'toggleCodeBlock': 'Cmd-Alt-C',\n 'togglePreview': 'Cmd-P',\n 'toggleSideBySide': 'F9',\n 'toggleFullScreen': 'F11'\n};\n\nvar getBindingName = function getBindingName(f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n\n return null;\n};\n\nvar isMobile = function isMobile() {\n var check = false;\n\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n\n return check;\n};\n/**\n * Modify HTML to add 'target=\"_blank\"' to links so they open in new tabs by default.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\n\n\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n\n while ((match = anchorToExternalRegex.exec(htmlText)) !== null) {\n // With only one capture group in the RegExp, we can safely take the first index from the match.\n var linkString = match[0];\n\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n\n return htmlText;\n}\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\n\n\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n\n return name;\n}\n/**\n * Create button element for toolbar.\n */\n\n\nfunction createToolbarButton(options, enableTooltips, shortcuts) {\n options = options || {};\n var el = document.createElement('button');\n el.className = options.name;\n el.setAttribute('type', 'button');\n enableTooltips = enableTooltips == undefined ? true : enableTooltips; // Properly hande custom shortcuts\n\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n\n if (isMac) {\n el.title = el.title.replace('Ctrl', '⌘');\n el.title = el.title.replace('Alt', '⌥');\n }\n }\n\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n\n if (options.noMobile) {\n el.classList.add('no-mobile');\n } // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n\n\n var classNameParts = options.className.split(' ');\n var iconClasses = [];\n\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex]; // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n\n el.tabIndex = -1; // Create icon element and append as a child to the button\n\n var icon = document.createElement('i');\n\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n\n el.appendChild(icon);\n return el;\n}\n\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\n\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n\n if (action) {\n actionName = getBindingName(action);\n\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n\n return tooltip;\n}\n/**\n * The state of CodeMirror at the given position.\n */\n\n\nfunction getState(cm, pos) {\n pos = pos || cm.getCursor('start');\n var stat = cm.getTokenAt(pos);\n if (!stat.type) return {};\n var types = stat.type.split(' ');\n var ret = {},\n data,\n text;\n\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n\n if (/^\\s*\\d+\\.\\s/.test(text)) {\n ret['ordered-list'] = true;\n } else {\n ret['unordered-list'] = true;\n }\n } else if (data === 'atom') {\n ret.quote = true;\n } else if (data === 'em') {\n ret.italic = true;\n } else if (data === 'quote') {\n ret.quote = true;\n } else if (data === 'strikethrough') {\n ret.strikethrough = true;\n } else if (data === 'comment') {\n ret.code = true;\n } else if (data === 'link') {\n ret.link = true;\n } else if (data === 'tag') {\n ret.image = true;\n } else if (data.match(/^header(-[1-6])?$/)) {\n ret[data.replace('header', 'heading')] = true;\n }\n }\n\n return ret;\n} // Saved overflow setting\n\n\nvar saved_overflow = '';\n/**\n * Toggle full screen of the editor.\n */\n\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen')); // Prevent scrolling on body during fullscreen active\n\n if (cm.getOption('fullScreen')) {\n saved_overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = saved_overflow;\n } // Update toolbar class\n\n\n var wrap = cm.getWrapperElement();\n\n if (!/fullscreen/.test(wrap.previousSibling.className)) {\n wrap.previousSibling.className += ' fullscreen';\n } else {\n wrap.previousSibling.className = wrap.previousSibling.className.replace(/\\s*fullscreen\\b/, '');\n } // Update toolbar button\n\n\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\n\n if (!/active/.test(toolbarButton.className)) {\n toolbarButton.className += ' active';\n } else {\n toolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, '');\n }\n } // Hide side by side if needed\n\n\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n }\n}\n/**\n * Action for toggling bold.\n */\n\n\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n/**\n * Action for toggling italic.\n */\n\n\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n/**\n * Action for toggling strikethrough.\n */\n\n\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n/**\n * Action for toggling code block.\n */\n\n\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n\n function fencing_line(line) {\n /* return true, if this is a ``` or ~~~ line */\n if (_typeof(line) !== 'object') {\n throw 'fencing_line() takes a \\'line\\' object (not a line number, or line text). Got: ' + _typeof(line) + ': ' + line;\n }\n\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\n\n function token_state(token) {\n // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n return token.state.base.base || token.state.base;\n }\n\n function code_type(cm, line_num, line, firstTok, lastTok) {\n /*\n * Return \"single\", \"indented\", \"fenced\" or false\n *\n * cm and line_num are required. Others are optional for efficiency\n * To check in the middle of a line, pass in firstTok yourself.\n */\n line = line || cm.getLineHandle(line_num);\n firstTok = firstTok || cm.getTokenAt({\n line: line_num,\n ch: 1\n });\n lastTok = lastTok || !!line.text && cm.getTokenAt({\n line: line_num,\n ch: line.text.length - 1\n });\n var types = firstTok.type ? firstTok.type.split(' ') : [];\n\n if (lastTok && token_state(lastTok).indentedCode) {\n // have to check last char, since first chars of first line aren\"t marked as indented\n return 'indented';\n } else if (types.indexOf('comment') === -1) {\n // has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n return false;\n } else if (token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n return 'fenced';\n } else {\n return 'single';\n }\n }\n\n function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n var start_line_sel = cur_start.line + 1,\n end_line_sel = cur_end.line + 1,\n sel_multi = cur_start.line !== cur_end.line,\n repl_start = fenceCharsToInsert + '\\n',\n repl_end = '\\n' + fenceCharsToInsert;\n\n if (sel_multi) {\n end_line_sel++;\n } // handle last char including \\n or not\n\n\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n\n _replaceSelection(cm, false, [repl_start, repl_end]);\n\n cm.setSelection({\n line: start_line_sel,\n ch: 0\n }, {\n line: end_line_sel,\n ch: 0\n });\n }\n\n var cm = editor.codemirror,\n cur_start = cm.getCursor('start'),\n cur_end = cm.getCursor('end'),\n tok = cm.getTokenAt({\n line: cur_start.line,\n ch: cur_start.ch || 1\n }),\n // avoid ch 0 which is a cursor pos but not token\n line = cm.getLineHandle(cur_start.line),\n is_code = code_type(cm, cur_start.line, line, tok);\n var block_start, block_end, lineCount;\n\n if (is_code === 'single') {\n // similar to some EasyMDE _toggleBlock logic\n var start = line.text.slice(0, cur_start.ch).replace('`', ''),\n end = line.text.slice(cur_start.ch).replace('`', '');\n cm.replaceRange(start + end, {\n line: cur_start.line,\n ch: 0\n }, {\n line: cur_start.line,\n ch: 99999999999999\n });\n cur_start.ch--;\n\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\n\n cm.setSelection(cur_start, cur_end);\n cm.focus();\n } else if (is_code === 'fenced') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n // find the fenced line so we know what type it is (tilde, backticks, number of them)\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n\n if (fencing_line(line)) {\n break;\n }\n }\n\n var fencedTok = cm.getTokenAt({\n line: block_start,\n ch: 1\n });\n var fence_chars = token_state(fencedTok).fencedChars;\n var start_text, start_line;\n var end_text, end_line; // check for selection going up against fenced lines, in which case we don't want to add more fencing\n\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n start_text = '';\n start_line = cur_start.line;\n } else if (fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n start_text = '';\n start_line = cur_start.line - 1;\n } else {\n start_text = fence_chars + '\\n';\n start_line = cur_start.line;\n }\n\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n\n if (cur_end.ch === 0) {\n end_line += 1;\n }\n } else if (cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n end_text = '';\n end_line = cur_end.line + 1;\n } else {\n end_text = fence_chars + '\\n';\n end_line = cur_end.line + 1;\n }\n\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\n\n cm.operation(function () {\n // end line first, so that line numbers don't change\n cm.replaceRange(end_text, {\n line: end_line,\n ch: 0\n }, {\n line: end_line + (end_text ? 0 : 1),\n ch: 0\n });\n cm.replaceRange(start_text, {\n line: start_line,\n ch: 0\n }, {\n line: start_line + (start_text ? 0 : 1),\n ch: 0\n });\n });\n cm.setSelection({\n line: start_line + (start_text ? 1 : 0),\n ch: 0\n }, {\n line: end_line + (start_text ? 1 : -1),\n ch: 0\n });\n cm.focus();\n } else {\n // no selection, search for ends of this fenced block\n var search_from = cur_start.line;\n\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n // gets a little tricky if cursor is right on a fenced line\n if (code_type(cm, cur_start.line + 1) === 'fenced') {\n block_start = cur_start.line;\n search_from = cur_start.line + 1; // for searching for \"end\"\n } else {\n block_end = cur_start.line;\n search_from = cur_start.line - 1; // for searching for \"start\"\n }\n }\n\n if (block_start === undefined) {\n for (block_start = search_from; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n\n if (fencing_line(line)) {\n break;\n }\n }\n }\n\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n\n if (fencing_line(line)) {\n break;\n }\n }\n }\n\n cm.operation(function () {\n cm.replaceRange('', {\n line: block_start,\n ch: 0\n }, {\n line: block_start + 1,\n ch: 0\n });\n cm.replaceRange('', {\n line: block_end - 1,\n ch: 0\n }, {\n line: block_end,\n ch: 0\n });\n });\n cm.focus();\n }\n } else if (is_code === 'indented') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n block_start = cur_start.line;\n block_end = cur_end.line;\n\n if (cur_end.ch === 0) {\n block_end--;\n }\n } else {\n // no selection, search for ends of this indented block\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_start, line) !== 'indented') {\n block_start += 1;\n break;\n }\n }\n }\n\n lineCount = cm.lineCount();\n\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_end, line) !== 'indented') {\n block_end -= 1;\n break;\n }\n }\n }\n } // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n // insert a blank line so that the next line(s) continue to be indented code\n\n\n var next_line = cm.getLineHandle(block_end + 1),\n next_line_last_tok = next_line && cm.getTokenAt({\n line: block_end + 1,\n ch: next_line.text.length - 1\n }),\n next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0\n });\n }\n\n for (var i = block_start; i <= block_end; i++) {\n cm.indentLine(i, 'subtract'); // TODO: this doesn't get tracked in the history, so can't be undone :(\n }\n\n cm.focus();\n } else {\n // insert code formatting\n var no_sel_and_starting_of_line = cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0;\n var sel_multi = cur_start.line !== cur_end.line;\n\n if (no_sel_and_starting_of_line || sel_multi) {\n insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n } else {\n _replaceSelection(cm, false, ['`', '`']);\n }\n }\n}\n/**\n * Action for toggling blockquote.\n */\n\n\nfunction toggleBlockquote(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'quote');\n}\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\n\n\nfunction toggleHeadingSmaller(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, 'smaller');\n}\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\n\n\nfunction toggleHeadingBigger(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, 'bigger');\n}\n/**\n * Action for toggling heading size 1\n */\n\n\nfunction toggleHeading1(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 1);\n}\n/**\n * Action for toggling heading size 2\n */\n\n\nfunction toggleHeading2(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 2);\n}\n/**\n * Action for toggling heading size 3\n */\n\n\nfunction toggleHeading3(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 3);\n}\n/**\n * Action for toggling ul.\n */\n\n\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'unordered-list');\n}\n/**\n * Action for toggling ol.\n */\n\n\nfunction toggleOrderedList(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'ordered-list');\n}\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\n\n\nfunction cleanBlock(editor) {\n var cm = editor.codemirror;\n\n _cleanBlock(cm);\n}\n/**\n * Action for drawing a link.\n */\n\n\nfunction drawLink(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n\n if (options.promptURLs) {\n url = prompt(options.promptTexts.link, 'https://');\n\n if (!url) {\n return false;\n }\n }\n\n _replaceSelection(cm, stat.link, options.insertTexts.link, url);\n}\n/**\n * Action for drawing an img.\n */\n\n\nfunction drawImage(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n\n if (options.promptURLs) {\n url = prompt(options.promptTexts.image, 'https://');\n\n if (!url) {\n return false;\n }\n }\n\n _replaceSelection(cm, stat.image, options.insertTexts.image, url);\n}\n/**\n * Action for opening the browse-file window to upload an image to a server.\n * @param editor {EasyMDE} The EasyMDE object\n */\n\n\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: '![](importing foo.png...)'\n editor.openBrowseFileWindow();\n}\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param editor {EasyMDE} The EasyMDE object\n * @param url {string} The url of the uploaded image\n */\n\n\nfunction afterImageUploaded(editor, url) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var imageName = url.substr(url.lastIndexOf('/') + 1);\n\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url); // show uploaded image filename for 1000ms\n\n\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbOnUploaded.replace('#image_name#', imageName));\n setTimeout(function () {\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbInit);\n }, 1000);\n}\n/**\n * Action for drawing a table.\n */\n\n\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n/**\n * Action for drawing a horizontal rule.\n */\n\n\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n/**\n * Undo action.\n */\n\n\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n/**\n * Redo action.\n */\n\n\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n/**\n * Toggle side by side preview\n */\n\n\nfunction toggleSideBySide(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];\n var useSideBySideListener = false;\n\n if (/editor-preview-active-side/.test(preview.className)) {\n preview.className = preview.className.replace(/\\s*editor-preview-active-side\\s*/g, '');\n if (toolbarButton) toolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, '');\n wrapper.className = wrapper.className.replace(/\\s*CodeMirror-sided\\s*/g, ' ');\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n if (!cm.getOption('fullScreen')) toggleFullScreen(editor);\n preview.className += ' editor-preview-active-side';\n }, 1);\n if (toolbarButton) toolbarButton.className += ' active';\n wrapper.className += ' CodeMirror-sided';\n useSideBySideListener = true;\n } // Hide normal preview if active\n\n\n var previewNormal = wrapper.lastChild;\n\n if (/editor-preview-active/.test(previewNormal.className)) {\n previewNormal.className = previewNormal.className.replace(/\\s*editor-preview-active\\s*/g, '');\n var toolbar = editor.toolbarElements.preview;\n var toolbar_div = wrapper.previousSibling;\n toolbar.className = toolbar.className.replace(/\\s*active\\s*/g, '');\n toolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, '');\n }\n\n var sideBySideRenderingFunction = function sideBySideRenderingFunction() {\n var newValue = editor.options.previewRender(editor.value(), preview);\n\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n } // Refresh to fix selection being off (#309)\n\n\n cm.refresh();\n}\n/**\n * Preview action.\n */\n\n\nfunction togglePreview(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var toolbar_div = wrapper.previousSibling;\n var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n var preview = wrapper.lastChild;\n\n if (!preview || !/editor-preview-full/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n\n if (editor.options.previewClass) {\n if (Array.isArray(editor.options.previewClass)) {\n for (var i = 0; i < editor.options.previewClass.length; i++) {\n preview.className += ' ' + editor.options.previewClass[i];\n }\n } else if (typeof editor.options.previewClass === 'string') {\n preview.className += ' ' + editor.options.previewClass;\n }\n }\n\n wrapper.appendChild(preview);\n }\n\n if (/editor-preview-active/.test(preview.className)) {\n preview.className = preview.className.replace(/\\s*editor-preview-active\\s*/g, '');\n\n if (toolbar) {\n toolbar.className = toolbar.className.replace(/\\s*active\\s*/g, '');\n toolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, '');\n }\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n preview.className += ' editor-preview-active';\n }, 1);\n\n if (toolbar) {\n toolbar.className += ' active';\n toolbar_div.className += ' disabled-for-preview';\n }\n }\n\n preview.innerHTML = editor.options.previewRender(editor.value(), preview); // Turn off side by side if needed\n\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var text;\n var start = startEnd[0];\n var end = startEnd[1];\n var startPoint = {},\n endPoint = {};\n Object.assign(startPoint, cm.getCursor('start'));\n Object.assign(endPoint, cm.getCursor('end'));\n\n if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n\n end = end.replace('#url#', url);\n }\n\n if (active) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n });\n } else {\n text = cm.getSelection();\n cm.replaceSelection(start + text + end);\n startPoint.ch += start.length;\n\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _toggleHeading(cm, direction, size) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n var currHeadingLevel = text.search(/[^#]/);\n\n if (direction !== undefined) {\n if (currHeadingLevel <= 0) {\n if (direction == 'bigger') {\n text = '###### ' + text;\n } else {\n text = '# ' + text;\n }\n } else if (currHeadingLevel == 6 && direction == 'smaller') {\n text = text.substr(7);\n } else if (currHeadingLevel == 1 && direction == 'bigger') {\n text = text.substr(2);\n } else {\n if (direction == 'bigger') {\n text = text.substr(1);\n } else {\n text = '#' + text;\n }\n }\n } else {\n if (size == 1) {\n if (currHeadingLevel <= 0) {\n text = '# ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '# ' + text.substr(currHeadingLevel + 1);\n }\n } else if (size == 2) {\n if (currHeadingLevel <= 0) {\n text = '## ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '## ' + text.substr(currHeadingLevel + 1);\n }\n } else {\n if (currHeadingLevel <= 0) {\n text = '### ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '### ' + text.substr(currHeadingLevel + 1);\n }\n }\n }\n\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n\n cm.focus();\n}\n\nfunction _toggleLine(cm, name) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var listRegexp = /^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/;\n var whitespacesRegexp = /^\\s*/;\n var stat = getState(cm);\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var repl = {\n 'quote': /^(\\s*)>\\s+/,\n 'unordered-list': listRegexp,\n 'ordered-list': listRegexp\n };\n\n var _getChar = function _getChar(name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '%%i.'\n };\n return map[name].replace('%%i', i);\n };\n\n var _checkChar = function _checkChar(name, _char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '\\\\d+.'\n };\n var rt = new RegExp(map[name]);\n return _char && rt.test(_char);\n };\n\n var _toggle = function _toggle(name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n\n var _char2 = _getChar(name, line);\n\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n _char2 = '';\n }\n\n text = arr[1] + _char2 + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = _char2 + ' ' + text;\n }\n\n return text;\n };\n\n var line = 1;\n\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n\n if (stat[name]) {\n text = text.replace(repl[name], '$1');\n } else {\n // If we're toggling unordered-list formatting, check if the current line\n // is part of an ordered-list, and if so, untoggle that first.\n // Workaround for https://github.com/Ionaru/easy-markdown-editor/issues/92\n if (name == 'unordered-list') {\n text = _toggle('ordered-list', text, true);\n }\n\n text = _toggle(name, text, false);\n line += 1;\n }\n\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n\n cm.focus();\n}\n\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n if (/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className)) return;\n end_chars = typeof end_chars === 'undefined' ? start_chars : end_chars;\n var cm = editor.codemirror;\n var stat = getState(cm);\n var text;\n var start = start_chars;\n var end = end_chars;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n\n if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n\n if (type == 'bold') {\n start = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, '');\n end = end.replace(/(\\*\\*|__)/, '');\n } else if (type == 'italic') {\n start = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, '');\n end = end.replace(/(\\*|_)/, '');\n } else if (type == 'strikethrough') {\n start = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, '');\n end = end.replace(/(\\*\\*|~~)/, '');\n }\n\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n }, {\n line: startPoint.line,\n ch: 99999999999999\n });\n\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n\n if (type == 'bold') {\n text = text.split('**').join('');\n text = text.split('__').join('');\n } else if (type == 'italic') {\n text = text.split('*').join('');\n text = text.split('_').join('');\n } else if (type == 'strikethrough') {\n text = text.split('~~').join('');\n }\n\n cm.replaceSelection(start + text + end);\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _cleanBlock(cm) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text;\n\n for (var line = startPoint.line; line <= endPoint.line; line++) {\n text = cm.getLine(line);\n text = text.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/, '');\n cm.replaceRange(text, {\n line: line,\n ch: 0\n }, {\n line: line,\n ch: 99999999999999\n });\n }\n}\n/**\n * Convert a number of bytes to a human-readable file size.\n * @param bytes {integer} A number of bytes, as integer. Ex: 421137\n * @param units {number[]} An array of human-readable units, ie. ['b', 'Kb', 'Mb']\n * @returns string A human-readable file size. Ex: '412Kb'\n */\n\n\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n\n var u = 0;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n\n return '' + bytes.toFixed(1) + units[u];\n} // Merge the properties of one object into another.\n\n\nfunction _mergeProperties(target, source) {\n for (var property in source) {\n if (Object.prototype.hasOwnProperty.call(source, property)) {\n if (source[property] instanceof Array) {\n target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n } else if (source[property] !== null && _typeof(source[property]) === 'object' && source[property].constructor === Object) {\n target[property] = _mergeProperties(target[property] || {}, source[property]);\n } else {\n target[property] = source[property];\n }\n }\n }\n\n return target;\n} // Merge an arbitrary number of objects into one.\n\n\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n\n return target;\n}\n/* The right word count in respect for CJK. */\n\n\nfunction wordCount(data) {\n var pattern = /[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n var m = data.match(pattern);\n var count = 0;\n if (m === null) return count;\n\n for (var i = 0; i < m.length; i++) {\n if (m[i].charCodeAt(0) >= 0x4E00) {\n count += m[i].length;\n } else {\n count += 1;\n }\n }\n\n return count;\n}\n\nvar toolbarBuiltInButtons = {\n 'bold': {\n name: 'bold',\n action: toggleBold,\n className: 'fa fa-bold',\n title: 'Bold',\n \"default\": true\n },\n 'italic': {\n name: 'italic',\n action: toggleItalic,\n className: 'fa fa-italic',\n title: 'Italic',\n \"default\": true\n },\n 'strikethrough': {\n name: 'strikethrough',\n action: toggleStrikethrough,\n className: 'fa fa-strikethrough',\n title: 'Strikethrough'\n },\n 'heading': {\n name: 'heading',\n action: toggleHeadingSmaller,\n className: 'fa fa-header fa-heading',\n title: 'Heading',\n \"default\": true\n },\n 'heading-smaller': {\n name: 'heading-smaller',\n action: toggleHeadingSmaller,\n className: 'fa fa-header fa-heading header-smaller',\n title: 'Smaller Heading'\n },\n 'heading-bigger': {\n name: 'heading-bigger',\n action: toggleHeadingBigger,\n className: 'fa fa-header fa-heading header-bigger',\n title: 'Bigger Heading'\n },\n 'heading-1': {\n name: 'heading-1',\n action: toggleHeading1,\n className: 'fa fa-header fa-heading header-1',\n title: 'Big Heading'\n },\n 'heading-2': {\n name: 'heading-2',\n action: toggleHeading2,\n className: 'fa fa-header fa-heading header-2',\n title: 'Medium Heading'\n },\n 'heading-3': {\n name: 'heading-3',\n action: toggleHeading3,\n className: 'fa fa-header fa-heading header-3',\n title: 'Small Heading'\n },\n 'separator-1': {\n name: 'separator-1'\n },\n 'code': {\n name: 'code',\n action: toggleCodeBlock,\n className: 'fa fa-code',\n title: 'Code'\n },\n 'quote': {\n name: 'quote',\n action: toggleBlockquote,\n className: 'fa fa-quote-left',\n title: 'Quote',\n \"default\": true\n },\n 'unordered-list': {\n name: 'unordered-list',\n action: toggleUnorderedList,\n className: 'fa fa-list-ul',\n title: 'Generic List',\n \"default\": true\n },\n 'ordered-list': {\n name: 'ordered-list',\n action: toggleOrderedList,\n className: 'fa fa-list-ol',\n title: 'Numbered List',\n \"default\": true\n },\n 'clean-block': {\n name: 'clean-block',\n action: cleanBlock,\n className: 'fa fa-eraser',\n title: 'Clean block'\n },\n 'separator-2': {\n name: 'separator-2'\n },\n 'link': {\n name: 'link',\n action: drawLink,\n className: 'fa fa-link',\n title: 'Create Link',\n \"default\": true\n },\n 'image': {\n name: 'image',\n action: drawImage,\n className: 'fa fa-image',\n title: 'Insert Image',\n \"default\": true\n },\n 'upload-image': {\n name: 'upload-image',\n action: drawUploadedImage,\n className: 'fa fa-image',\n title: 'Import an image'\n },\n 'table': {\n name: 'table',\n action: drawTable,\n className: 'fa fa-table',\n title: 'Insert Table'\n },\n 'horizontal-rule': {\n name: 'horizontal-rule',\n action: drawHorizontalRule,\n className: 'fa fa-minus',\n title: 'Insert Horizontal Line'\n },\n 'separator-3': {\n name: 'separator-3'\n },\n 'preview': {\n name: 'preview',\n action: togglePreview,\n className: 'fa fa-eye',\n noDisable: true,\n title: 'Toggle Preview',\n \"default\": true\n },\n 'side-by-side': {\n name: 'side-by-side',\n action: toggleSideBySide,\n className: 'fa fa-columns',\n noDisable: true,\n noMobile: true,\n title: 'Toggle Side by Side',\n \"default\": true\n },\n 'fullscreen': {\n name: 'fullscreen',\n action: toggleFullScreen,\n className: 'fa fa-arrows-alt',\n noDisable: true,\n noMobile: true,\n title: 'Toggle Fullscreen',\n \"default\": true\n },\n 'separator-4': {\n name: 'separator-4'\n },\n 'guide': {\n name: 'guide',\n action: 'https://www.markdownguide.org/basic-syntax/',\n className: 'fa fa-question-circle',\n noDisable: true,\n title: 'Markdown Guide',\n \"default\": true\n },\n 'separator-5': {\n name: 'separator-5'\n },\n 'undo': {\n name: 'undo',\n action: undo,\n className: 'fa fa-undo',\n noDisable: true,\n title: 'Undo'\n },\n 'redo': {\n name: 'redo',\n action: redo,\n className: 'fa fa-repeat fa-redo',\n noDisable: true,\n title: 'Redo'\n }\n};\nvar insertTexts = {\n link: ['[', '](#url#)'],\n image: ['![](', '#url#)'],\n uploadedImage: ['![](#url#)', ''],\n // uploadedImage: ['![](#url#)\\n', ''], // TODO: New line insertion doesn't work here.\n table: ['', '\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text | Text | Text |\\n\\n'],\n horizontalRule: ['', '\\n\\n-----\\n\\n']\n};\nvar promptTexts = {\n link: 'URL for the link:',\n image: 'URL of the image:'\n};\nvar blockStyles = {\n 'bold': '**',\n 'code': '```',\n 'italic': '*'\n};\n/**\n * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\n\nvar imageTexts = {\n sbInit: 'Attach files by drag and dropping or pasting from clipboard.',\n sbOnDragEnter: 'Drop image to upload it.',\n sbOnDrop: 'Uploading image #images_names#...',\n sbProgress: 'Uploading #file_name#: #progress#%',\n sbOnUploaded: 'Uploaded #image_name#',\n sizeUnits: 'b,Kb,Mb'\n};\n/**\n * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\n\nvar errorMessages = {\n noFileGiven: 'You must select a file.',\n typeNotAllowed: 'This image type is not allowed.',\n fileTooLarge: 'Image #image_name# is too big (#image_size#).\\n' + 'Maximum file size is #image_max_size#.',\n importError: 'Something went wrong when uploading the image #image_name#.'\n};\n/**\n * Interface of EasyMDE.\n */\n\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {}; // Used later to refer to it\"s parent\n\n options.parent = this; // Check if Font Awesome needs to be auto downloaded\n\n var autoDownloadFA = true;\n\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href) continue;\n\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\n }\n }\n\n if (autoDownloadFA) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css';\n document.getElementsByTagName('head')[0].appendChild(link);\n } // Find the textarea to use\n\n\n if (options.element) {\n this.element = options.element;\n } else if (options.element === null) {\n // This means that the element option was specified, but no element was found\n console.log('EasyMDE: Error. No element was found.');\n return;\n } // Handle toolbar\n\n\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = []; // Loop over the built in buttons, to get the preferred order\n\n for (var key in toolbarBuiltInButtons) {\n if (Object.prototype.hasOwnProperty.call(toolbarBuiltInButtons, key)) {\n if (key.indexOf('separator-') != -1) {\n options.toolbar.push('|');\n }\n\n if (toolbarBuiltInButtons[key][\"default\"] === true || options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1) {\n options.toolbar.push(key);\n }\n }\n }\n } // Editor preview styling class.\n\n\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n } // Handle status bar\n\n\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n } // Add default preview rendering function\n\n\n if (!options.previewRender) {\n options.previewRender = function (plainText) {\n // Note: \"this\" refers to the options object\n return this.parent.markdown(plainText);\n };\n } // Set default options for parsing config\n\n\n options.parsingConfig = extend({\n highlightFormatting: true // needed for toggleCodeBlock to detect types of code\n\n }, options.parsingConfig || {}); // Merging the insertTexts, with the given options\n\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {}); // Merging the promptTexts, with the given options\n\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {}); // Merging the blockStyles, with the given options\n\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {}); // Merging the shortcuts, with the given options\n\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n options.minHeight = options.minHeight || '300px';\n\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n }; // Import-image default configuration\n\n\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {}); // Change unique_id to uniqueId for backwards compatibility\n\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '') options.autosave.uniqueId = options.autosave.unique_id; // Update this options\n\n this.options = options; // Auto render\n\n this.render(); // The codemirror component is only available after rendering\n // so, the setter for the initialValue can only run after\n // the element has been rendered\n\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\n\n if (options.uploadImage) {\n var self = this;\n this.codemirror.on('dragenter', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragend', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragleave', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragover', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('drop', function (cm, event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.dataTransfer.files);\n } else {\n self.uploadImages(event.dataTransfer.files);\n }\n });\n this.codemirror.on('paste', function (cm, event) {\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.clipboardData.files);\n } else {\n self.uploadImages(event.clipboardData.files);\n }\n });\n }\n}\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param {FileList} files The files to upload the the server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\n\n\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n\n var names = [];\n\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options.\n * @param {FileList} files The files to upload the the server.\n */\n\n\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n\n var names = [];\n\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n/**\n * Update an item in the status bar.\n * @param itemName {string} The name of the item to update (ie. 'upload-image', 'autosave', etc.).\n * @param content {string} the new content of the item to write in the status bar.\n */\n\n\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n\n if (matchingClasses.length === 1) {\n this.gui.statusbar.getElementsByClassName(itemName)[0].textContent = content;\n } else if (matchingClasses.length === 0) {\n console.log('EasyMDE: status bar item ' + itemName + ' was not found.');\n } else {\n console.log('EasyMDE: Several status bar items named ' + itemName + ' was found.');\n }\n};\n/**\n * Default markdown render.\n */\n\n\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n } // Update options\n\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true) {\n /* Get HLJS from config or window */\n var hljs = this.options.renderingConfig.hljs || window.hljs;\n /* Check if HLJS loaded */\n\n if (hljs) {\n markedOptions.highlight = function (code) {\n return hljs.highlightAuto(code).value;\n };\n }\n } // Set options\n\n\n marked.setOptions(markedOptions); // Convert the markdown to HTML\n\n var htmlText = marked(text); // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n\n htmlText = addAnchorTargetBlank(htmlText);\n return htmlText;\n }\n};\n/**\n * Render editor to the given element.\n */\n\n\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n\n this.element = el;\n var options = this.options;\n var self = this;\n var keyMaps = {};\n\n for (var key in options.shortcuts) {\n // null stands for \"do not bind this command\"\n if (options.shortcuts[key] !== null && bindings[key] !== null) {\n (function (key) {\n keyMaps[fixShortcut(options.shortcuts[key])] = function () {\n var action = bindings[key];\n\n if (typeof action === 'function') {\n action(self);\n } else if (typeof action === 'string') {\n window.open(action, '_blank');\n }\n };\n })(key);\n }\n }\n\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n\n document.addEventListener('keydown', function (e) {\n e = e || window.event;\n\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n }, false);\n var mode, backdrop;\n\n if (options.spellChecker !== false) {\n mode = 'spell-checker';\n backdrop = options.parsingConfig;\n backdrop.name = 'gfm';\n backdrop.gitHubSpice = false;\n CodeMirrorSpellChecker({\n codeMirrorInstance: CodeMirror\n });\n } else {\n mode = options.parsingConfig;\n mode.name = 'gfm';\n mode.gitHubSpice = false;\n } // eslint-disable-next-line no-unused-vars\n\n\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false\n };\n }\n\n this.codemirror = CodeMirror.fromTextArea(el, {\n mode: mode,\n backdrop: backdrop,\n theme: options.theme != undefined ? options.theme : 'easymde',\n tabSize: options.tabSize != undefined ? options.tabSize : 2,\n indentUnit: options.tabSize != undefined ? options.tabSize : 2,\n indentWithTabs: options.indentWithTabs === false ? false : true,\n lineNumbers: false,\n autofocus: options.autofocus === true ? true : false,\n extraKeys: keyMaps,\n lineWrapping: options.lineWrapping === false ? false : true,\n allowDropFileTypes: ['text/plain'],\n placeholder: options.placeholder || el.getAttribute('placeholder') || '',\n styleSelectedText: options.styleSelectedText != undefined ? options.styleSelectedText : !isMobile(),\n configureMouse: configureMouse\n });\n this.codemirror.getScrollerElement().style.minHeight = options.minHeight;\n\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n\n this.gui = {};\n\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave();\n }\n\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element; // Fixes CodeMirror bug (#344)\n\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\n}; // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\n\n\nfunction isLocalStorageAvailable() {\n if ((typeof localStorage === \"undefined\" ? \"undefined\" : _typeof(localStorage)) === 'object') {\n try {\n localStorage.setItem('smde_localStorage', 1);\n localStorage.removeItem('smde_localStorage');\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n\n return true;\n}\n\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n\n if (this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to use the autosave feature');\n return;\n }\n\n if (this.options.autosave.binded !== true) {\n if (easyMDE.element.form != null && easyMDE.element.form != undefined) {\n easyMDE.element.form.addEventListener('submit', function () {\n clearTimeout(easyMDE.autosaveTimeoutId);\n easyMDE.autosaveTimeoutId = undefined;\n localStorage.removeItem('smde_' + easyMDE.options.autosave.uniqueId); // Restart autosaving in case the submit will be cancelled down the line\n\n setTimeout(function () {\n easyMDE.autosave();\n }, easyMDE.options.autosave.delay || 10000);\n });\n }\n\n this.options.autosave.binded = true;\n }\n\n if (this.options.autosave.loaded !== true) {\n if (typeof localStorage.getItem('smde_' + this.options.autosave.uniqueId) == 'string' && localStorage.getItem('smde_' + this.options.autosave.uniqueId) != '') {\n this.codemirror.setValue(localStorage.getItem('smde_' + this.options.autosave.uniqueId));\n this.options.autosave.foundSavedValue = true;\n }\n\n this.options.autosave.loaded = true;\n }\n\n var value = easyMDE.value();\n\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n\n var el = document.getElementById('autosaved');\n\n if (el != null && el != undefined && el != '') {\n var d = new Date();\n var hh = d.getHours();\n var m = d.getMinutes();\n var dd = 'am';\n var h = hh;\n\n if (h >= 12) {\n h = hh - 12;\n dd = 'pm';\n }\n\n if (h == 0) {\n h = 12;\n }\n\n m = m < 10 ? '0' + m : m;\n el.innerHTML = 'Autosaved: ' + h + ':' + m + ' ' + dd;\n }\n\n this.autosaveTimeoutId = setTimeout(function () {\n easyMDE.autosave();\n }, this.options.autosave.delay || 10000);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\nEasyMDE.prototype.clearAutosavedValue = function () {\n if (isLocalStorageAvailable()) {\n if (this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to clear the autosave value');\n return;\n }\n\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n/**\n * Open the browse-file window to upload an image to a server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\n\n\nEasyMDE.prototype.openBrowseFileWindow = function (onSuccess, onError) {\n var self = this;\n var imageInput = this.gui.toolbar.getElementsByClassName('imageInput')[0];\n imageInput.click(); //dispatchEvent(new MouseEvent('click')); // replaced with click() for IE11 compatibility.\n\n function onChange(event) {\n if (self.options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(self.options.imageUploadFunction, event.target.files);\n } else {\n self.uploadImages(event.target.files, onSuccess, onError);\n }\n\n imageInput.removeEventListener('change', onChange);\n }\n\n imageInput.addEventListener('change', onChange);\n};\n/**\n * Upload an image to the server.\n *\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File)\n * @param [onSuccess] {function} A callback function to execute after the image has been successfully uploaded, with one parameter:\n * - url (string): The URL of the uploaded image.\n * @param [onError] {function} A callback function to execute when the image upload fails, with one parameter:\n * - error (string): the detailed error to display to the user (based on messages from options.errorMessages).\n */\n\n\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\n\n function onErrorSup(errorMessage) {\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', errorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000); // run custom error handler\n\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n } // run error handler from options, this alerts the message.\n\n\n self.options.errorCallback(errorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n\n var formData = new FormData();\n formData.append('image', file); // insert CSRF token if provided in config.\n\n if (self.options.imageCSRFToken) {\n formData.append('csrfmiddlewaretoken', self.options.imageCSRFToken);\n }\n\n var request = new XMLHttpRequest();\n\n request.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n var progress = '' + Math.round(event.loaded * 100 / event.total);\n self.updateStatusBar('upload-image', self.options.imageTexts.sbProgress.replace('#file_name#', file.name).replace('#progress#', progress));\n }\n };\n\n request.open('POST', this.options.imageUploadEndpoint);\n\n request.onload = function () {\n try {\n var response = JSON.parse(this.responseText);\n } catch (error) {\n console.error('EasyMDE: The server did not return a valid json.');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n return;\n }\n\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess(window.location.origin + '/' + response.data.filePath);\n } else {\n if (response.error && response.error in self.options.errorMessages) {\n // preformatted error message\n onErrorSup(fillErrorMessage(self.options.errorMessages[response.error]));\n } else if (response.error) {\n // server side generated error message\n onErrorSup(fillErrorMessage(response.error));\n } else {\n //unknown error\n console.error('EasyMDE: Received an unexpected response after uploading the image.' + this.status + ' (' + this.statusText + ')');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n }\n }\n };\n\n request.onerror = function (event) {\n console.error('EasyMDE: An unexpected error occurred when trying to upload the image.' + event.target.status + ' (' + event.target.statusText + ')');\n onErrorSup(self.options.errorMessages.importError);\n };\n\n request.send(formData);\n};\n/**\n * Upload an image to the server using a custom upload function.\n *\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File).\n */\n\n\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage); // show error on status bar and reset after 10000ms\n\n self.updateStatusBar('upload-image', filledErrorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000); // run error handler from options, this alerts the message.\n\n self.options.errorCallback(filledErrorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n imageUploadFunction(file, onSuccess, onError);\n};\n\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n if (!preview || !/editor-preview-side/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n\n if (this.options.previewClass) {\n if (Array.isArray(this.options.previewClass)) {\n for (var i = 0; i < this.options.previewClass.length; i++) {\n preview.className += ' ' + this.options.previewClass[i];\n }\n } else if (typeof this.options.previewClass === 'string') {\n preview.className += ' ' + this.options.previewClass;\n }\n }\n\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n\n if (this.options.syncSideBySidePreviewScroll === false) return preview; // Syncs scroll editor -> preview\n\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\n\n pScroll = true;\n var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n var ratio = parseFloat(v.getScrollInfo().top) / height;\n var move = (preview.scrollHeight - preview.clientHeight) * ratio;\n preview.scrollTop = move;\n }); // Syncs scroll preview -> editor\n\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\n\n cScroll = true;\n var height = preview.scrollHeight - preview.clientHeight;\n var ratio = parseFloat(preview.scrollTop) / height;\n var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n cm.scrollTo(0, move);\n };\n\n return preview;\n};\n\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n\n if (!items || items.length === 0) {\n return;\n }\n\n var i;\n\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n var self = this;\n var toolbarData = {};\n self.toolbar = items;\n\n for (i = 0; i < items.length; i++) {\n if (items[i].name == 'guide' && self.options.toolbarGuideIcon === false) continue;\n if (self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1) continue; // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile()) continue; // Don't include trailing separators\n\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n\n for (var x = i + 1; x < items.length; x++) {\n if (items[x] !== '|' && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n nonSeparatorIconsFollow = true;\n }\n }\n\n if (!nonSeparatorIconsFollow) continue;\n } // Create the icon and append to the toolbar\n\n\n (function (item) {\n var el;\n\n if (item === '|') {\n el = createSep();\n } else {\n el = createToolbarButton(item, self.options.toolbarTips, self.options.shortcuts);\n } // bind events, special for info\n\n\n if (item.action) {\n if (typeof item.action === 'function') {\n el.onclick = function (e) {\n e.preventDefault();\n item.action(self);\n };\n } else if (typeof item.action === 'string') {\n el.onclick = function (e) {\n e.preventDefault();\n window.open(item.action, '_blank');\n };\n }\n }\n\n toolbarData[item.name || item] = el;\n bar.appendChild(el); // Create the input element (ie. <input type='file'>), used among\n // with the 'import-image' icon to open the browse-file window.\n\n if (item.name === 'upload-image') {\n var imageInput = document.createElement('input');\n imageInput.className = 'imageInput';\n imageInput.type = 'file';\n imageInput.multiple = true;\n imageInput.name = 'image';\n imageInput.accept = self.options.imageAccept;\n imageInput.style.display = 'none';\n imageInput.style.opacity = 0;\n bar.appendChild(imageInput);\n }\n })(items[i]);\n }\n\n self.toolbarElements = toolbarData;\n var cm = this.codemirror;\n cm.on('cursorActivity', function () {\n var stat = getState(cm);\n\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n\n if (stat[key]) {\n el.className += ' active';\n } else if (key != 'fullscreen' && key != 'side-by-side') {\n el.className = el.className.replace(/\\s*active\\s*/g, '');\n }\n })(key);\n }\n });\n var cmWrapper = cm.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper);\n return bar;\n};\n\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror; // Make sure the status variable is valid\n\n if (!status || status.length === 0) {\n return;\n } // Set up the built-in items\n\n\n var items = [];\n var i, onUpdate, defaultValue;\n\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n defaultValue = undefined; // Handle if custom or not\n\n if (_typeof(status[i]) === 'object') {\n items.push({\n className: status[i].className,\n defaultValue: status[i].defaultValue,\n onUpdate: status[i].onUpdate\n });\n } else {\n var name = status[i];\n\n if (name === 'words') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n\n onUpdate = function onUpdate(el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = cm.lineCount();\n };\n\n onUpdate = function onUpdate(el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = '0:0';\n };\n\n onUpdate = function onUpdate(el) {\n var pos = cm.getCursor();\n el.innerHTML = pos.line + ':' + pos.ch;\n };\n } else if (name === 'autosave') {\n defaultValue = function defaultValue(el) {\n if (options.autosave != undefined && options.autosave.enabled === true) {\n el.setAttribute('id', 'autosaved');\n }\n };\n } else if (name === 'upload-image') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate\n });\n }\n } // Create element for the status bar\n\n\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar'; // Create a new span for each item\n\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i]; // Create span element\n\n var el = document.createElement('span');\n el.className = item.className; // Ensure the defaultValue is a function\n\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n } // Ensure the onUpdate is a function\n\n\n if (typeof item.onUpdate === 'function') {\n // Create a closure around the span of the current action, then execute the onUpdate handler\n this.codemirror.on('update', function (el, item) {\n return function () {\n item.onUpdate(el);\n };\n }(el, item));\n } // Append the item to the status bar\n\n\n bar.appendChild(el);\n } // Insert the status bar into the DOM\n\n\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n/**\n * Get or set the text content.\n */\n\n\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n preview.innerHTML = this.options.previewRender(val, preview);\n }\n\n return this;\n }\n};\n/**\n * Bind static methods for exports.\n */\n\n\nEasyMDE.toggleBold = toggleBold;\nEasyMDE.toggleItalic = toggleItalic;\nEasyMDE.toggleStrikethrough = toggleStrikethrough;\nEasyMDE.toggleBlockquote = toggleBlockquote;\nEasyMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nEasyMDE.toggleHeadingBigger = toggleHeadingBigger;\nEasyMDE.toggleHeading1 = toggleHeading1;\nEasyMDE.toggleHeading2 = toggleHeading2;\nEasyMDE.toggleHeading3 = toggleHeading3;\nEasyMDE.toggleCodeBlock = toggleCodeBlock;\nEasyMDE.toggleUnorderedList = toggleUnorderedList;\nEasyMDE.toggleOrderedList = toggleOrderedList;\nEasyMDE.cleanBlock = cleanBlock;\nEasyMDE.drawLink = drawLink;\nEasyMDE.drawImage = drawImage;\nEasyMDE.drawTable = drawTable;\nEasyMDE.drawHorizontalRule = drawHorizontalRule;\nEasyMDE.undo = undo;\nEasyMDE.redo = redo;\nEasyMDE.togglePreview = togglePreview;\nEasyMDE.toggleSideBySide = toggleSideBySide;\nEasyMDE.toggleFullScreen = toggleFullScreen;\n/**\n * Bind instance methods for exports.\n */\n\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\n\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\n\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\n\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\n\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\n\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\n\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\n\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\n\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\n\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\n\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\n\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\n\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\n\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\n\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\n\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\n\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\n\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\n\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\n\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\n\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\n\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\n\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n return /editor-preview-active/.test(preview.className);\n};\n\nEasyMDE.prototype.isSideBySideActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n return /editor-preview-active-side/.test(preview.className);\n};\n\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n return cm.getOption('fullScreen');\n};\n\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n return getState(cm);\n};\n\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n\n if (wrapper.parentNode) {\n if (this.gui.toolbar) {\n wrapper.parentNode.removeChild(this.gui.toolbar);\n }\n\n if (this.gui.statusbar) {\n wrapper.parentNode.removeChild(this.gui.statusbar);\n }\n\n if (this.gui.sideBySide) {\n wrapper.parentNode.removeChild(this.gui.sideBySide);\n }\n }\n\n cm.toTextArea();\n\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\n\nmodule.exports = EasyMDE;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvc3JjL2pzL2Vhc3ltZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Vhc3ltZGUvc3JjL2pzL2Vhc3ltZGUuanM/YTU0NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgQ29kZU1pcnJvciA9IHJlcXVpcmUoJ2NvZGVtaXJyb3InKTtcbnJlcXVpcmUoJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QuanMnKTtcbnJlcXVpcmUoJy4vY29kZW1pcnJvci90YWJsaXN0Jyk7XG5yZXF1aXJlKCdjb2RlbWlycm9yL2FkZG9uL2Rpc3BsYXkvZnVsbHNjcmVlbi5qcycpO1xucmVxdWlyZSgnY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzJyk7XG5yZXF1aXJlKCdjb2RlbWlycm9yL2FkZG9uL21vZGUvb3ZlcmxheS5qcycpO1xucmVxdWlyZSgnY29kZW1pcnJvci9hZGRvbi9kaXNwbGF5L3BsYWNlaG9sZGVyLmpzJyk7XG5yZXF1aXJlKCdjb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbi5qcycpO1xucmVxdWlyZSgnY29kZW1pcnJvci9hZGRvbi9zZWFyY2gvc2VhcmNoY3Vyc29yLmpzJyk7XG5yZXF1aXJlKCdjb2RlbWlycm9yL21vZGUvZ2ZtL2dmbS5qcycpO1xucmVxdWlyZSgnY29kZW1pcnJvci9tb2RlL3htbC94bWwuanMnKTtcbnZhciBDb2RlTWlycm9yU3BlbGxDaGVja2VyID0gcmVxdWlyZSgnY29kZW1pcnJvci1zcGVsbC1jaGVja2VyJyk7XG52YXIgbWFya2VkID0gcmVxdWlyZSgnbWFya2VkJyk7XG5cblxuLy8gU29tZSB2YXJpYWJsZXNcbnZhciBpc01hYyA9IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBhbmNob3JUb0V4dGVybmFsUmVnZXggPSBuZXcgUmVnRXhwKC8oPGEuKj9odHRwcz86XFwvXFwvLio/W15hXT4pKz8vZyk7XG5cbi8vIE1hcHBpbmcgb2YgYWN0aW9ucyB0aGF0IGNhbiBiZSBib3VuZCB0byBrZXlib2FyZCBzaG9ydGN1dHMgb3IgdG9vbGJhciBidXR0b25zXG52YXIgYmluZGluZ3MgPSB7XG4gICAgJ3RvZ2dsZUJvbGQnOiB0b2dnbGVCb2xkLFxuICAgICd0b2dnbGVJdGFsaWMnOiB0b2dnbGVJdGFsaWMsXG4gICAgJ2RyYXdMaW5rJzogZHJhd0xpbmssXG4gICAgJ3RvZ2dsZUhlYWRpbmdTbWFsbGVyJzogdG9nZ2xlSGVhZGluZ1NtYWxsZXIsXG4gICAgJ3RvZ2dsZUhlYWRpbmdCaWdnZXInOiB0b2dnbGVIZWFkaW5nQmlnZ2VyLFxuICAgICdkcmF3SW1hZ2UnOiBkcmF3SW1hZ2UsXG4gICAgJ3RvZ2dsZUJsb2NrcXVvdGUnOiB0b2dnbGVCbG9ja3F1b3RlLFxuICAgICd0b2dnbGVPcmRlcmVkTGlzdCc6IHRvZ2dsZU9yZGVyZWRMaXN0LFxuICAgICd0b2dnbGVVbm9yZGVyZWRMaXN0JzogdG9nZ2xlVW5vcmRlcmVkTGlzdCxcbiAgICAndG9nZ2xlQ29kZUJsb2NrJzogdG9nZ2xlQ29kZUJsb2NrLFxuICAgICd0b2dnbGVQcmV2aWV3JzogdG9nZ2xlUHJldmlldyxcbiAgICAndG9nZ2xlU3RyaWtldGhyb3VnaCc6IHRvZ2dsZVN0cmlrZXRocm91Z2gsXG4gICAgJ3RvZ2dsZUhlYWRpbmcxJzogdG9nZ2xlSGVhZGluZzEsXG4gICAgJ3RvZ2dsZUhlYWRpbmcyJzogdG9nZ2xlSGVhZGluZzIsXG4gICAgJ3RvZ2dsZUhlYWRpbmczJzogdG9nZ2xlSGVhZGluZzMsXG4gICAgJ2NsZWFuQmxvY2snOiBjbGVhbkJsb2NrLFxuICAgICdkcmF3VGFibGUnOiBkcmF3VGFibGUsXG4gICAgJ2RyYXdIb3Jpem9udGFsUnVsZSc6IGRyYXdIb3Jpem9udGFsUnVsZSxcbiAgICAndW5kbyc6IHVuZG8sXG4gICAgJ3JlZG8nOiByZWRvLFxuICAgICd0b2dnbGVTaWRlQnlTaWRlJzogdG9nZ2xlU2lkZUJ5U2lkZSxcbiAgICAndG9nZ2xlRnVsbFNjcmVlbic6IHRvZ2dsZUZ1bGxTY3JlZW4sXG59O1xuXG52YXIgc2hvcnRjdXRzID0ge1xuICAgICd0b2dnbGVCb2xkJzogJ0NtZC1CJyxcbiAgICAndG9nZ2xlSXRhbGljJzogJ0NtZC1JJyxcbiAgICAnZHJhd0xpbmsnOiAnQ21kLUsnLFxuICAgICd0b2dnbGVIZWFkaW5nU21hbGxlcic6ICdDbWQtSCcsXG4gICAgJ3RvZ2dsZUhlYWRpbmdCaWdnZXInOiAnU2hpZnQtQ21kLUgnLFxuICAgICdjbGVhbkJsb2NrJzogJ0NtZC1FJyxcbiAgICAnZHJhd0ltYWdlJzogJ0NtZC1BbHQtSScsXG4gICAgJ3RvZ2dsZUJsb2NrcXVvdGUnOiAnQ21kLVxcJycsXG4gICAgJ3RvZ2dsZU9yZGVyZWRMaXN0JzogJ0NtZC1BbHQtTCcsXG4gICAgJ3RvZ2dsZVVub3JkZXJlZExpc3QnOiAnQ21kLUwnLFxuICAgICd0b2dnbGVDb2RlQmxvY2snOiAnQ21kLUFsdC1DJyxcbiAgICAndG9nZ2xlUHJldmlldyc6ICdDbWQtUCcsXG4gICAgJ3RvZ2dsZVNpZGVCeVNpZGUnOiAnRjknLFxuICAgICd0b2dnbGVGdWxsU2NyZWVuJzogJ0YxMScsXG59O1xuXG52YXIgZ2V0QmluZGluZ05hbWUgPSBmdW5jdGlvbiAoZikge1xuICAgIGZvciAodmFyIGtleSBpbiBiaW5kaW5ncykge1xuICAgICAgICBpZiAoYmluZGluZ3Nba2V5XSA9PT0gZikge1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBpc01vYmlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2hlY2sgPSBmYWxzZTtcbiAgICAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgaWYgKC8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaS50ZXN0KGEpIHx8IC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3LShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtLXxjZWxsfGNodG18Y2xkY3xjbWQtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8LWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseSgtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmLTV8Zy1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkLShtfHB8dCl8aGVpLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzLWN8aHQoYygtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aS0oMjB8Z298bWEpfGkyMzB8aWFjKCB8LXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHwtW2Etd10pfGxpYnd8bHlueHxtMS13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bS1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dCgtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSktfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3wtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdC1nfHFhLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8LVsyLTddfGktKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aC18b298cC0pfHNka1xcL3xzZShjKC18MHwxKXw0N3xtY3xuZHxyaSl8c2doLXxzaGFyfHNpZSgtfG0pfHNrLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aC18di18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2wtfHRkZy18dGVsKGl8bSl8dGltLXx0LW1vfHRvKHBsfHNoKXx0cyg3MHxtLXxtM3xtNSl8dHgtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118LXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhcy18eW91cnx6ZXRvfHp0ZS0vaS50ZXN0KGEuc3Vic3RyKDAsIDQpKSkgY2hlY2sgPSB0cnVlO1xuICAgIH0pKG5hdmlnYXRvci51c2VyQWdlbnQgfHwgbmF2aWdhdG9yLnZlbmRvciB8fCB3aW5kb3cub3BlcmEpO1xuICAgIHJldHVybiBjaGVjaztcbn07XG5cbi8qKlxuICogTW9kaWZ5IEhUTUwgdG8gYWRkICd0YXJnZXQ9XCJfYmxhbmtcIicgdG8gbGlua3Mgc28gdGhleSBvcGVuIGluIG5ldyB0YWJzIGJ5IGRlZmF1bHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFRleHQgLSBIVE1MIHRvIGJlIG1vZGlmaWVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbW9kaWZpZWQgSFRNTCB0ZXh0LlxuICovXG5mdW5jdGlvbiBhZGRBbmNob3JUYXJnZXRCbGFuayhodG1sVGV4dCkge1xuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gYW5jaG9yVG9FeHRlcm5hbFJlZ2V4LmV4ZWMoaHRtbFRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaXRoIG9ubHkgb25lIGNhcHR1cmUgZ3JvdXAgaW4gdGhlIFJlZ0V4cCwgd2UgY2FuIHNhZmVseSB0YWtlIHRoZSBmaXJzdCBpbmRleCBmcm9tIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIGxpbmtTdHJpbmcgPSBtYXRjaFswXTtcblxuICAgICAgICBpZiAobGlua1N0cmluZy5pbmRleE9mKCd0YXJnZXQ9JykgPT09IC0xKSB7XG4gICAgICAgICAgICB2YXIgZml4ZWRMaW5rU3RyaW5nID0gbGlua1N0cmluZy5yZXBsYWNlKC8+JC8sICcgdGFyZ2V0PVwiX2JsYW5rXCI+Jyk7XG4gICAgICAgICAgICBodG1sVGV4dCA9IGh0bWxUZXh0LnJlcGxhY2UobGlua1N0cmluZywgZml4ZWRMaW5rU3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbFRleHQ7XG59XG5cblxuLyoqXG4gKiBGaXggc2hvcnRjdXQuIE1hYyB1c2UgQ29tbWFuZCwgb3RoZXJzIHVzZSBDdHJsLlxuICovXG5mdW5jdGlvbiBmaXhTaG9ydGN1dChuYW1lKSB7XG4gICAgaWYgKGlzTWFjKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ0N0cmwnLCAnQ21kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgnQ21kJywgJ0N0cmwnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYnV0dG9uIGVsZW1lbnQgZm9yIHRvb2xiYXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRvb2xiYXJCdXR0b24ob3B0aW9ucywgZW5hYmxlVG9vbHRpcHMsIHNob3J0Y3V0cykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGVsLmNsYXNzTmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gICAgZW5hYmxlVG9vbHRpcHMgPSAoZW5hYmxlVG9vbHRpcHMgPT0gdW5kZWZpbmVkKSA/IHRydWUgOiBlbmFibGVUb29sdGlwcztcblxuICAgIC8vIFByb3Blcmx5IGhhbmRlIGN1c3RvbSBzaG9ydGN1dHNcbiAgICBpZiAob3B0aW9ucy5uYW1lICYmIG9wdGlvbnMubmFtZSBpbiBzaG9ydGN1dHMpIHtcbiAgICAgICAgYmluZGluZ3Nbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMuYWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnRpdGxlICYmIGVuYWJsZVRvb2x0aXBzKSB7XG4gICAgICAgIGVsLnRpdGxlID0gY3JlYXRlVG9vbHRpcChvcHRpb25zLnRpdGxlLCBvcHRpb25zLmFjdGlvbiwgc2hvcnRjdXRzKTtcblxuICAgICAgICBpZiAoaXNNYWMpIHtcbiAgICAgICAgICAgIGVsLnRpdGxlID0gZWwudGl0bGUucmVwbGFjZSgnQ3RybCcsICfijJgnKTtcbiAgICAgICAgICAgIGVsLnRpdGxlID0gZWwudGl0bGUucmVwbGFjZSgnQWx0JywgJ+KMpScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubm9EaXNhYmxlKSB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ25vLWRpc2FibGUnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5ub01vYmlsZSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCduby1tb2JpbGUnKTtcbiAgICB9XG5cbiAgICAvLyBQcm92aWRlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggc2ltcGxlLW1hcmtkb3duLWVkaXRvciBieSBhZGRpbmcgY3VzdG9tIGNsYXNzZXMgdG8gdGhlIGJ1dHRvbi5cbiAgICB2YXIgY2xhc3NOYW1lUGFydHMgPSBvcHRpb25zLmNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIHZhciBpY29uQ2xhc3NlcyA9IFtdO1xuICAgIGZvciAodmFyIGNsYXNzTmFtZUluZGV4ID0gMDsgY2xhc3NOYW1lSW5kZXggPCBjbGFzc05hbWVQYXJ0cy5sZW5ndGg7IGNsYXNzTmFtZUluZGV4KyspIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZVBhcnQgPSBjbGFzc05hbWVQYXJ0c1tjbGFzc05hbWVJbmRleF07XG4gICAgICAgIC8vIFNwbGl0IGljb24gY2xhc3NlcyBmcm9tIHRoZSBidXR0b24uXG4gICAgICAgIC8vIFJlZ2V4IHdpbGwgZGV0ZWN0IFwiZmFcIiwgXCJmYXNcIiwgXCJmYS1zb21ldGhpbmdcIiBhbmQgXCJmYS1zb21lLWljb24tMVwiLCBidXQgbm90IFwiZmFuZmFyZVwiLlxuICAgICAgICBpZiAoY2xhc3NOYW1lUGFydC5tYXRjaCgvXmZhKFtzcmxiXXwoLVtcXHctXSopfCQpLykpIHtcbiAgICAgICAgICAgIGljb25DbGFzc2VzLnB1c2goY2xhc3NOYW1lUGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZVBhcnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWwudGFiSW5kZXggPSAtMTtcblxuICAgIC8vIENyZWF0ZSBpY29uIGVsZW1lbnQgYW5kIGFwcGVuZCBhcyBhIGNoaWxkIHRvIHRoZSBidXR0b25cbiAgICB2YXIgaWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICBmb3IgKHZhciBpY29uQ2xhc3NJbmRleCA9IDA7IGljb25DbGFzc0luZGV4IDwgaWNvbkNsYXNzZXMubGVuZ3RoOyBpY29uQ2xhc3NJbmRleCsrKSB7XG4gICAgICAgIHZhciBpY29uQ2xhc3MgPSBpY29uQ2xhc3Nlc1tpY29uQ2xhc3NJbmRleF07XG4gICAgICAgIGljb24uY2xhc3NMaXN0LmFkZChpY29uQ2xhc3MpO1xuICAgIH1cbiAgICBlbC5hcHBlbmRDaGlsZChpY29uKTtcblxuICAgIHJldHVybiBlbDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VwKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICBlbC5jbGFzc05hbWUgPSAnc2VwYXJhdG9yJztcbiAgICBlbC5pbm5lckhUTUwgPSAnfCc7XG4gICAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUb29sdGlwKHRpdGxlLCBhY3Rpb24sIHNob3J0Y3V0cykge1xuICAgIHZhciBhY3Rpb25OYW1lO1xuICAgIHZhciB0b29sdGlwID0gdGl0bGU7XG5cbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbk5hbWUgPSBnZXRCaW5kaW5nTmFtZShhY3Rpb24pO1xuICAgICAgICBpZiAoc2hvcnRjdXRzW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICB0b29sdGlwICs9ICcgKCcgKyBmaXhTaG9ydGN1dChzaG9ydGN1dHNbYWN0aW9uTmFtZV0pICsgJyknO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvb2x0aXA7XG59XG5cbi8qKlxuICogVGhlIHN0YXRlIG9mIENvZGVNaXJyb3IgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZShjbSwgcG9zKSB7XG4gICAgcG9zID0gcG9zIHx8IGNtLmdldEN1cnNvcignc3RhcnQnKTtcbiAgICB2YXIgc3RhdCA9IGNtLmdldFRva2VuQXQocG9zKTtcbiAgICBpZiAoIXN0YXQudHlwZSkgcmV0dXJuIHt9O1xuXG4gICAgdmFyIHR5cGVzID0gc3RhdC50eXBlLnNwbGl0KCcgJyk7XG5cbiAgICB2YXIgcmV0ID0ge30sXG4gICAgICAgIGRhdGEsIHRleHQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhID0gdHlwZXNbaV07XG4gICAgICAgIGlmIChkYXRhID09PSAnc3Ryb25nJykge1xuICAgICAgICAgICAgcmV0LmJvbGQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT09ICd2YXJpYWJsZS0yJykge1xuICAgICAgICAgICAgdGV4dCA9IGNtLmdldExpbmUocG9zLmxpbmUpO1xuICAgICAgICAgICAgaWYgKC9eXFxzKlxcZCtcXC5cXHMvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXRbJ29yZGVyZWQtbGlzdCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0Wyd1bm9yZGVyZWQtbGlzdCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSAnYXRvbScpIHtcbiAgICAgICAgICAgIHJldC5xdW90ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gJ2VtJykge1xuICAgICAgICAgICAgcmV0Lml0YWxpYyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gJ3F1b3RlJykge1xuICAgICAgICAgICAgcmV0LnF1b3RlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSAnc3RyaWtldGhyb3VnaCcpIHtcbiAgICAgICAgICAgIHJldC5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIHJldC5jb2RlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSAnbGluaycpIHtcbiAgICAgICAgICAgIHJldC5saW5rID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSAndGFnJykge1xuICAgICAgICAgICAgcmV0LmltYWdlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1hdGNoKC9eaGVhZGVyKC1bMS02XSk/JC8pKSB7XG4gICAgICAgICAgICByZXRbZGF0YS5yZXBsYWNlKCdoZWFkZXInLCAnaGVhZGluZycpXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuXG4vLyBTYXZlZCBvdmVyZmxvdyBzZXR0aW5nXG52YXIgc2F2ZWRfb3ZlcmZsb3cgPSAnJztcblxuLyoqXG4gKiBUb2dnbGUgZnVsbCBzY3JlZW4gb2YgdGhlIGVkaXRvci5cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpIHtcbiAgICAvLyBTZXQgZnVsbHNjcmVlblxuICAgIHZhciBjbSA9IGVkaXRvci5jb2RlbWlycm9yO1xuICAgIGNtLnNldE9wdGlvbignZnVsbFNjcmVlbicsICFjbS5nZXRPcHRpb24oJ2Z1bGxTY3JlZW4nKSk7XG5cblxuICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9uIGJvZHkgZHVyaW5nIGZ1bGxzY3JlZW4gYWN0aXZlXG4gICAgaWYgKGNtLmdldE9wdGlvbignZnVsbFNjcmVlbicpKSB7XG4gICAgICAgIHNhdmVkX292ZXJmbG93ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBzYXZlZF9vdmVyZmxvdztcbiAgICB9XG5cblxuICAgIC8vIFVwZGF0ZSB0b29sYmFyIGNsYXNzXG4gICAgdmFyIHdyYXAgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpO1xuXG4gICAgaWYgKCEvZnVsbHNjcmVlbi8udGVzdCh3cmFwLnByZXZpb3VzU2libGluZy5jbGFzc05hbWUpKSB7XG4gICAgICAgIHdyYXAucHJldmlvdXNTaWJsaW5nLmNsYXNzTmFtZSArPSAnIGZ1bGxzY3JlZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdyYXAucHJldmlvdXNTaWJsaW5nLmNsYXNzTmFtZSA9IHdyYXAucHJldmlvdXNTaWJsaW5nLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqZnVsbHNjcmVlblxcYi8sICcnKTtcbiAgICB9XG5cblxuICAgIC8vIFVwZGF0ZSB0b29sYmFyIGJ1dHRvblxuICAgIGlmIChlZGl0b3IudG9vbGJhckVsZW1lbnRzICYmIGVkaXRvci50b29sYmFyRWxlbWVudHMuZnVsbHNjcmVlbikge1xuICAgICAgICB2YXIgdG9vbGJhckJ1dHRvbiA9IGVkaXRvci50b29sYmFyRWxlbWVudHMuZnVsbHNjcmVlbjtcblxuICAgICAgICBpZiAoIS9hY3RpdmUvLnRlc3QodG9vbGJhckJ1dHRvbi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICB0b29sYmFyQnV0dG9uLmNsYXNzTmFtZSArPSAnIGFjdGl2ZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b29sYmFyQnV0dG9uLmNsYXNzTmFtZSA9IHRvb2xiYXJCdXR0b24uY2xhc3NOYW1lLnJlcGxhY2UoL1xccyphY3RpdmVcXHMqL2csICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gSGlkZSBzaWRlIGJ5IHNpZGUgaWYgbmVlZGVkXG4gICAgdmFyIHNpZGVieXNpZGUgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLm5leHRTaWJsaW5nO1xuICAgIGlmICgvZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGUvLnRlc3Qoc2lkZWJ5c2lkZS5jbGFzc05hbWUpKVxuICAgICAgICB0b2dnbGVTaWRlQnlTaWRlKGVkaXRvcik7XG5cbiAgICBpZiAoZWRpdG9yLm9wdGlvbnMub25Ub2dnbGVGdWxsU2NyZWVuKSB7XG4gICAgICAgIGVkaXRvci5vcHRpb25zLm9uVG9nZ2xlRnVsbFNjcmVlbihjbS5nZXRPcHRpb24oJ2Z1bGxTY3JlZW4nKSB8fCBmYWxzZSk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQWN0aW9uIGZvciB0b2dnbGluZyBib2xkLlxuICovXG5mdW5jdGlvbiB0b2dnbGVCb2xkKGVkaXRvcikge1xuICAgIF90b2dnbGVCbG9jayhlZGl0b3IsICdib2xkJywgZWRpdG9yLm9wdGlvbnMuYmxvY2tTdHlsZXMuYm9sZCk7XG59XG5cblxuLyoqXG4gKiBBY3Rpb24gZm9yIHRvZ2dsaW5nIGl0YWxpYy5cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlSXRhbGljKGVkaXRvcikge1xuICAgIF90b2dnbGVCbG9jayhlZGl0b3IsICdpdGFsaWMnLCBlZGl0b3Iub3B0aW9ucy5ibG9ja1N0eWxlcy5pdGFsaWMpO1xufVxuXG5cbi8qKlxuICogQWN0aW9uIGZvciB0b2dnbGluZyBzdHJpa2V0aHJvdWdoLlxuICovXG5mdW5jdGlvbiB0b2dnbGVTdHJpa2V0aHJvdWdoKGVkaXRvcikge1xuICAgIF90b2dnbGVCbG9jayhlZGl0b3IsICdzdHJpa2V0aHJvdWdoJywgJ35+Jyk7XG59XG5cbi8qKlxuICogQWN0aW9uIGZvciB0b2dnbGluZyBjb2RlIGJsb2NrLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDb2RlQmxvY2soZWRpdG9yKSB7XG4gICAgdmFyIGZlbmNlQ2hhcnNUb0luc2VydCA9IGVkaXRvci5vcHRpb25zLmJsb2NrU3R5bGVzLmNvZGU7XG5cbiAgICBmdW5jdGlvbiBmZW5jaW5nX2xpbmUobGluZSkge1xuICAgICAgICAvKiByZXR1cm4gdHJ1ZSwgaWYgdGhpcyBpcyBhIGBgYCBvciB+fn4gbGluZSAqL1xuICAgICAgICBpZiAodHlwZW9mIGxpbmUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyAnZmVuY2luZ19saW5lKCkgdGFrZXMgYSBcXCdsaW5lXFwnIG9iamVjdCAobm90IGEgbGluZSBudW1iZXIsIG9yIGxpbmUgdGV4dCkuICBHb3Q6ICcgKyB0eXBlb2YgbGluZSArICc6ICcgKyBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lLnN0eWxlcyAmJiBsaW5lLnN0eWxlc1syXSAmJiBsaW5lLnN0eWxlc1syXS5pbmRleE9mKCdmb3JtYXR0aW5nLWNvZGUtYmxvY2snKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5fc3RhdGUodG9rZW4pIHtcbiAgICAgICAgLy8gYmFzZSBnb2VzIGFuIGV4dHJhIGxldmVsIGRlZXAgd2hlbiBtb2RlIGJhY2tkcm9wcyBhcmUgdXNlZCwgZS5nLiBzcGVsbGNoZWNrZXIgb25cbiAgICAgICAgcmV0dXJuIHRva2VuLnN0YXRlLmJhc2UuYmFzZSB8fCB0b2tlbi5zdGF0ZS5iYXNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvZGVfdHlwZShjbSwgbGluZV9udW0sIGxpbmUsIGZpcnN0VG9rLCBsYXN0VG9rKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFJldHVybiBcInNpbmdsZVwiLCBcImluZGVudGVkXCIsIFwiZmVuY2VkXCIgb3IgZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogY20gYW5kIGxpbmVfbnVtIGFyZSByZXF1aXJlZC4gIE90aGVycyBhcmUgb3B0aW9uYWwgZm9yIGVmZmljaWVuY3lcbiAgICAgICAgICogICBUbyBjaGVjayBpbiB0aGUgbWlkZGxlIG9mIGEgbGluZSwgcGFzcyBpbiBmaXJzdFRvayB5b3Vyc2VsZi5cbiAgICAgICAgICovXG4gICAgICAgIGxpbmUgPSBsaW5lIHx8IGNtLmdldExpbmVIYW5kbGUobGluZV9udW0pO1xuICAgICAgICBmaXJzdFRvayA9IGZpcnN0VG9rIHx8IGNtLmdldFRva2VuQXQoe1xuICAgICAgICAgICAgbGluZTogbGluZV9udW0sXG4gICAgICAgICAgICBjaDogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxhc3RUb2sgPSBsYXN0VG9rIHx8ICghIWxpbmUudGV4dCAmJiBjbS5nZXRUb2tlbkF0KHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVfbnVtLFxuICAgICAgICAgICAgY2g6IGxpbmUudGV4dC5sZW5ndGggLSAxLFxuICAgICAgICB9KSk7XG4gICAgICAgIHZhciB0eXBlcyA9IGZpcnN0VG9rLnR5cGUgPyBmaXJzdFRvay50eXBlLnNwbGl0KCcgJykgOiBbXTtcbiAgICAgICAgaWYgKGxhc3RUb2sgJiYgdG9rZW5fc3RhdGUobGFzdFRvaykuaW5kZW50ZWRDb2RlKSB7XG4gICAgICAgICAgICAvLyBoYXZlIHRvIGNoZWNrIGxhc3QgY2hhciwgc2luY2UgZmlyc3QgY2hhcnMgb2YgZmlyc3QgbGluZSBhcmVuXCJ0IG1hcmtlZCBhcyBpbmRlbnRlZFxuICAgICAgICAgICAgcmV0dXJuICdpbmRlbnRlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZXMuaW5kZXhPZignY29tbWVudCcpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGFmdGVyIFwiaW5kZW50ZWRcIiBjaGVjaywgc2luY2UgZmlyc3QgY2hhcnMgb2YgZmlyc3QgaW5kZW50ZWQgbGluZSBhcmVuXCJ0IG1hcmtlZCBhcyBzdWNoXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW5fc3RhdGUoZmlyc3RUb2spLmZlbmNlZENoYXJzIHx8IHRva2VuX3N0YXRlKGxhc3RUb2spLmZlbmNlZENoYXJzIHx8IGZlbmNpbmdfbGluZShsaW5lKSkge1xuICAgICAgICAgICAgcmV0dXJuICdmZW5jZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdzaW5nbGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zZXJ0RmVuY2luZ0F0U2VsZWN0aW9uKGNtLCBjdXJfc3RhcnQsIGN1cl9lbmQsIGZlbmNlQ2hhcnNUb0luc2VydCkge1xuICAgICAgICB2YXIgc3RhcnRfbGluZV9zZWwgPSBjdXJfc3RhcnQubGluZSArIDEsXG4gICAgICAgICAgICBlbmRfbGluZV9zZWwgPSBjdXJfZW5kLmxpbmUgKyAxLFxuICAgICAgICAgICAgc2VsX211bHRpID0gY3VyX3N0YXJ0LmxpbmUgIT09IGN1cl9lbmQubGluZSxcbiAgICAgICAgICAgIHJlcGxfc3RhcnQgPSBmZW5jZUNoYXJzVG9JbnNlcnQgKyAnXFxuJyxcbiAgICAgICAgICAgIHJlcGxfZW5kID0gJ1xcbicgKyBmZW5jZUNoYXJzVG9JbnNlcnQ7XG4gICAgICAgIGlmIChzZWxfbXVsdGkpIHtcbiAgICAgICAgICAgIGVuZF9saW5lX3NlbCsrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBsYXN0IGNoYXIgaW5jbHVkaW5nIFxcbiBvciBub3RcbiAgICAgICAgaWYgKHNlbF9tdWx0aSAmJiBjdXJfZW5kLmNoID09PSAwKSB7XG4gICAgICAgICAgICByZXBsX2VuZCA9IGZlbmNlQ2hhcnNUb0luc2VydCArICdcXG4nO1xuICAgICAgICAgICAgZW5kX2xpbmVfc2VsLS07XG4gICAgICAgIH1cbiAgICAgICAgX3JlcGxhY2VTZWxlY3Rpb24oY20sIGZhbHNlLCBbcmVwbF9zdGFydCwgcmVwbF9lbmRdKTtcbiAgICAgICAgY20uc2V0U2VsZWN0aW9uKHtcbiAgICAgICAgICAgIGxpbmU6IHN0YXJ0X2xpbmVfc2VsLFxuICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxpbmU6IGVuZF9saW5lX3NlbCxcbiAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgY20gPSBlZGl0b3IuY29kZW1pcnJvcixcbiAgICAgICAgY3VyX3N0YXJ0ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpLFxuICAgICAgICBjdXJfZW5kID0gY20uZ2V0Q3Vyc29yKCdlbmQnKSxcbiAgICAgICAgdG9rID0gY20uZ2V0VG9rZW5BdCh7XG4gICAgICAgICAgICBsaW5lOiBjdXJfc3RhcnQubGluZSxcbiAgICAgICAgICAgIGNoOiBjdXJfc3RhcnQuY2ggfHwgMSxcbiAgICAgICAgfSksIC8vIGF2b2lkIGNoIDAgd2hpY2ggaXMgYSBjdXJzb3IgcG9zIGJ1dCBub3QgdG9rZW5cbiAgICAgICAgbGluZSA9IGNtLmdldExpbmVIYW5kbGUoY3VyX3N0YXJ0LmxpbmUpLFxuICAgICAgICBpc19jb2RlID0gY29kZV90eXBlKGNtLCBjdXJfc3RhcnQubGluZSwgbGluZSwgdG9rKTtcbiAgICB2YXIgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZCwgbGluZUNvdW50O1xuXG4gICAgaWYgKGlzX2NvZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIC8vIHNpbWlsYXIgdG8gc29tZSBFYXN5TURFIF90b2dnbGVCbG9jayBsb2dpY1xuICAgICAgICB2YXIgc3RhcnQgPSBsaW5lLnRleHQuc2xpY2UoMCwgY3VyX3N0YXJ0LmNoKS5yZXBsYWNlKCdgJywgJycpLFxuICAgICAgICAgICAgZW5kID0gbGluZS50ZXh0LnNsaWNlKGN1cl9zdGFydC5jaCkucmVwbGFjZSgnYCcsICcnKTtcbiAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XG4gICAgICAgICAgICBsaW5lOiBjdXJfc3RhcnQubGluZSxcbiAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBsaW5lOiBjdXJfc3RhcnQubGluZSxcbiAgICAgICAgICAgIGNoOiA5OTk5OTk5OTk5OTk5OSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cl9zdGFydC5jaC0tO1xuICAgICAgICBpZiAoY3VyX3N0YXJ0ICE9PSBjdXJfZW5kKSB7XG4gICAgICAgICAgICBjdXJfZW5kLmNoLS07XG4gICAgICAgIH1cbiAgICAgICAgY20uc2V0U2VsZWN0aW9uKGN1cl9zdGFydCwgY3VyX2VuZCk7XG4gICAgICAgIGNtLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpc19jb2RlID09PSAnZmVuY2VkJykge1xuICAgICAgICBpZiAoY3VyX3N0YXJ0LmxpbmUgIT09IGN1cl9lbmQubGluZSB8fCBjdXJfc3RhcnQuY2ggIT09IGN1cl9lbmQuY2gpIHtcbiAgICAgICAgICAgIC8vIHVzZSBzZWxlY3Rpb25cblxuICAgICAgICAgICAgLy8gZmluZCB0aGUgZmVuY2VkIGxpbmUgc28gd2Uga25vdyB3aGF0IHR5cGUgaXQgaXMgKHRpbGRlLCBiYWNrdGlja3MsIG51bWJlciBvZiB0aGVtKVxuICAgICAgICAgICAgZm9yIChibG9ja19zdGFydCA9IGN1cl9zdGFydC5saW5lOyBibG9ja19zdGFydCA+PSAwOyBibG9ja19zdGFydC0tKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGNtLmdldExpbmVIYW5kbGUoYmxvY2tfc3RhcnQpO1xuICAgICAgICAgICAgICAgIGlmIChmZW5jaW5nX2xpbmUobGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZlbmNlZFRvayA9IGNtLmdldFRva2VuQXQoe1xuICAgICAgICAgICAgICAgIGxpbmU6IGJsb2NrX3N0YXJ0LFxuICAgICAgICAgICAgICAgIGNoOiAxLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgZmVuY2VfY2hhcnMgPSB0b2tlbl9zdGF0ZShmZW5jZWRUb2spLmZlbmNlZENoYXJzO1xuICAgICAgICAgICAgdmFyIHN0YXJ0X3RleHQsIHN0YXJ0X2xpbmU7XG4gICAgICAgICAgICB2YXIgZW5kX3RleHQsIGVuZF9saW5lO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNlbGVjdGlvbiBnb2luZyB1cCBhZ2FpbnN0IGZlbmNlZCBsaW5lcywgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCB3YW50IHRvIGFkZCBtb3JlIGZlbmNpbmdcbiAgICAgICAgICAgIGlmIChmZW5jaW5nX2xpbmUoY20uZ2V0TGluZUhhbmRsZShjdXJfc3RhcnQubGluZSkpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRfdGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBjdXJfc3RhcnQubGluZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmVuY2luZ19saW5lKGNtLmdldExpbmVIYW5kbGUoY3VyX3N0YXJ0LmxpbmUgLSAxKSkpIHtcbiAgICAgICAgICAgICAgICBzdGFydF90ZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgc3RhcnRfbGluZSA9IGN1cl9zdGFydC5saW5lIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRfdGV4dCA9IGZlbmNlX2NoYXJzICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgc3RhcnRfbGluZSA9IGN1cl9zdGFydC5saW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZlbmNpbmdfbGluZShjbS5nZXRMaW5lSGFuZGxlKGN1cl9lbmQubGluZSkpKSB7XG4gICAgICAgICAgICAgICAgZW5kX3RleHQgPSAnJztcbiAgICAgICAgICAgICAgICBlbmRfbGluZSA9IGN1cl9lbmQubGluZTtcbiAgICAgICAgICAgICAgICBpZiAoY3VyX2VuZC5jaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRfbGluZSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyX2VuZC5jaCAhPT0gMCAmJiBmZW5jaW5nX2xpbmUoY20uZ2V0TGluZUhhbmRsZShjdXJfZW5kLmxpbmUgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBlbmRfdGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIGVuZF9saW5lID0gY3VyX2VuZC5saW5lICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZW5kX3RleHQgPSBmZW5jZV9jaGFycyArICdcXG4nO1xuICAgICAgICAgICAgICAgIGVuZF9saW5lID0gY3VyX2VuZC5saW5lICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJfZW5kLmNoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZnVsbCBsYXN0IGxpbmUgc2VsZWN0ZWQsIHB1dHRpbmcgY3Vyc29yIGF0IGJlZ2lubmluZyBvZiBuZXh0XG4gICAgICAgICAgICAgICAgZW5kX2xpbmUgLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5kIGxpbmUgZmlyc3QsIHNvIHRoYXQgbGluZSBudW1iZXJzIGRvbid0IGNoYW5nZVxuICAgICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShlbmRfdGV4dCwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBlbmRfbGluZSxcbiAgICAgICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBlbmRfbGluZSArIChlbmRfdGV4dCA/IDAgOiAxKSxcbiAgICAgICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0X3RleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogc3RhcnRfbGluZSxcbiAgICAgICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBzdGFydF9saW5lICsgKHN0YXJ0X3RleHQgPyAwIDogMSksXG4gICAgICAgICAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbS5zZXRTZWxlY3Rpb24oe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YXJ0X2xpbmUgKyAoc3RhcnRfdGV4dCA/IDEgOiAwKSxcbiAgICAgICAgICAgICAgICBjaDogMCxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBsaW5lOiBlbmRfbGluZSArIChzdGFydF90ZXh0ID8gMSA6IC0xKSxcbiAgICAgICAgICAgICAgICBjaDogMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY20uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIHNlbGVjdGlvbiwgc2VhcmNoIGZvciBlbmRzIG9mIHRoaXMgZmVuY2VkIGJsb2NrXG4gICAgICAgICAgICB2YXIgc2VhcmNoX2Zyb20gPSBjdXJfc3RhcnQubGluZTtcbiAgICAgICAgICAgIGlmIChmZW5jaW5nX2xpbmUoY20uZ2V0TGluZUhhbmRsZShjdXJfc3RhcnQubGluZSkpKSB7IC8vIGdldHMgYSBsaXR0bGUgdHJpY2t5IGlmIGN1cnNvciBpcyByaWdodCBvbiBhIGZlbmNlZCBsaW5lXG4gICAgICAgICAgICAgICAgaWYgKGNvZGVfdHlwZShjbSwgY3VyX3N0YXJ0LmxpbmUgKyAxKSA9PT0gJ2ZlbmNlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tfc3RhcnQgPSBjdXJfc3RhcnQubGluZTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2Zyb20gPSBjdXJfc3RhcnQubGluZSArIDE7IC8vIGZvciBzZWFyY2hpbmcgZm9yIFwiZW5kXCJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBibG9ja19lbmQgPSBjdXJfc3RhcnQubGluZTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2Zyb20gPSBjdXJfc3RhcnQubGluZSAtIDE7IC8vIGZvciBzZWFyY2hpbmcgZm9yIFwic3RhcnRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChibG9ja19zdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChibG9ja19zdGFydCA9IHNlYXJjaF9mcm9tOyBibG9ja19zdGFydCA+PSAwOyBibG9ja19zdGFydC0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBjbS5nZXRMaW5lSGFuZGxlKGJsb2NrX3N0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlbmNpbmdfbGluZShsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmxvY2tfZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQgPSBjbS5saW5lQ291bnQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGJsb2NrX2VuZCA9IHNlYXJjaF9mcm9tOyBibG9ja19lbmQgPCBsaW5lQ291bnQ7IGJsb2NrX2VuZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBjbS5nZXRMaW5lSGFuZGxlKGJsb2NrX2VuZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZW5jaW5nX2xpbmUobGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYmxvY2tfc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYmxvY2tfc3RhcnQgKyAxLFxuICAgICAgICAgICAgICAgICAgICBjaDogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYmxvY2tfZW5kIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBibG9ja19lbmQsXG4gICAgICAgICAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc19jb2RlID09PSAnaW5kZW50ZWQnKSB7XG4gICAgICAgIGlmIChjdXJfc3RhcnQubGluZSAhPT0gY3VyX2VuZC5saW5lIHx8IGN1cl9zdGFydC5jaCAhPT0gY3VyX2VuZC5jaCkge1xuICAgICAgICAgICAgLy8gdXNlIHNlbGVjdGlvblxuICAgICAgICAgICAgYmxvY2tfc3RhcnQgPSBjdXJfc3RhcnQubGluZTtcbiAgICAgICAgICAgIGJsb2NrX2VuZCA9IGN1cl9lbmQubGluZTtcbiAgICAgICAgICAgIGlmIChjdXJfZW5kLmNoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYmxvY2tfZW5kLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzZWxlY3Rpb24sIHNlYXJjaCBmb3IgZW5kcyBvZiB0aGlzIGluZGVudGVkIGJsb2NrXG4gICAgICAgICAgICBmb3IgKGJsb2NrX3N0YXJ0ID0gY3VyX3N0YXJ0LmxpbmU7IGJsb2NrX3N0YXJ0ID49IDA7IGJsb2NrX3N0YXJ0LS0pIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShibG9ja19zdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUudGV4dC5tYXRjaCgvXlxccyokLykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UgLSBrZWVwIGdvaW5nXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlX3R5cGUoY20sIGJsb2NrX3N0YXJ0LCBsaW5lKSAhPT0gJ2luZGVudGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc3RhcnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZUNvdW50ID0gY20ubGluZUNvdW50KCk7XG4gICAgICAgICAgICBmb3IgKGJsb2NrX2VuZCA9IGN1cl9zdGFydC5saW5lOyBibG9ja19lbmQgPCBsaW5lQ291bnQ7IGJsb2NrX2VuZCsrKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGNtLmdldExpbmVIYW5kbGUoYmxvY2tfZW5kKTtcbiAgICAgICAgICAgICAgICBpZiAobGluZS50ZXh0Lm1hdGNoKC9eXFxzKiQvKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZSAtIGtlZXAgZ29pbmdcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVfdHlwZShjbSwgYmxvY2tfZW5kLCBsaW5lKSAhPT0gJ2luZGVudGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfZW5kIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gdW4taW5kZW50IGJhc2VkIG9uIGEgc2VsZWN0ZWQgc2V0IG9mIGxpbmVzLCBhbmQgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCB0b28sIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gaW5zZXJ0IGEgYmxhbmsgbGluZSBzbyB0aGF0IHRoZSBuZXh0IGxpbmUocykgY29udGludWUgdG8gYmUgaW5kZW50ZWQgY29kZVxuICAgICAgICB2YXIgbmV4dF9saW5lID0gY20uZ2V0TGluZUhhbmRsZShibG9ja19lbmQgKyAxKSxcbiAgICAgICAgICAgIG5leHRfbGluZV9sYXN0X3RvayA9IG5leHRfbGluZSAmJiBjbS5nZXRUb2tlbkF0KHtcbiAgICAgICAgICAgICAgICBsaW5lOiBibG9ja19lbmQgKyAxLFxuICAgICAgICAgICAgICAgIGNoOiBuZXh0X2xpbmUudGV4dC5sZW5ndGggLSAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXh0X2xpbmVfaW5kZW50ZWQgPSBuZXh0X2xpbmVfbGFzdF90b2sgJiYgdG9rZW5fc3RhdGUobmV4dF9saW5lX2xhc3RfdG9rKS5pbmRlbnRlZENvZGU7XG4gICAgICAgIGlmIChuZXh0X2xpbmVfaW5kZW50ZWQpIHtcbiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgnXFxuJywge1xuICAgICAgICAgICAgICAgIGxpbmU6IGJsb2NrX2VuZCArIDEsXG4gICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSBibG9ja19zdGFydDsgaSA8PSBibG9ja19lbmQ7IGkrKykge1xuICAgICAgICAgICAgY20uaW5kZW50TGluZShpLCAnc3VidHJhY3QnKTsgLy8gVE9ETzogdGhpcyBkb2Vzbid0IGdldCB0cmFja2VkIGluIHRoZSBoaXN0b3J5LCBzbyBjYW4ndCBiZSB1bmRvbmUgOihcbiAgICAgICAgfVxuICAgICAgICBjbS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydCBjb2RlIGZvcm1hdHRpbmdcbiAgICAgICAgdmFyIG5vX3NlbF9hbmRfc3RhcnRpbmdfb2ZfbGluZSA9IChjdXJfc3RhcnQubGluZSA9PT0gY3VyX2VuZC5saW5lICYmIGN1cl9zdGFydC5jaCA9PT0gY3VyX2VuZC5jaCAmJiBjdXJfc3RhcnQuY2ggPT09IDApO1xuICAgICAgICB2YXIgc2VsX211bHRpID0gY3VyX3N0YXJ0LmxpbmUgIT09IGN1cl9lbmQubGluZTtcbiAgICAgICAgaWYgKG5vX3NlbF9hbmRfc3RhcnRpbmdfb2ZfbGluZSB8fCBzZWxfbXVsdGkpIHtcbiAgICAgICAgICAgIGluc2VydEZlbmNpbmdBdFNlbGVjdGlvbihjbSwgY3VyX3N0YXJ0LCBjdXJfZW5kLCBmZW5jZUNoYXJzVG9JbnNlcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3JlcGxhY2VTZWxlY3Rpb24oY20sIGZhbHNlLCBbJ2AnLCAnYCddKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBY3Rpb24gZm9yIHRvZ2dsaW5nIGJsb2NrcXVvdGUuXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUJsb2NrcXVvdGUoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgX3RvZ2dsZUxpbmUoY20sICdxdW90ZScpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgaGVhZGluZyBzaXplOiBub3JtYWwgLT4gaDEgLT4gaDIgLT4gaDMgLT4gaDQgLT4gaDUgLT4gaDYgLT4gbm9ybWFsXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUhlYWRpbmdTbWFsbGVyKGVkaXRvcikge1xuICAgIHZhciBjbSA9IGVkaXRvci5jb2RlbWlycm9yO1xuICAgIF90b2dnbGVIZWFkaW5nKGNtLCAnc21hbGxlcicpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgaGVhZGluZyBzaXplOiBub3JtYWwgLT4gaDYgLT4gaDUgLT4gaDQgLT4gaDMgLT4gaDIgLT4gaDEgLT4gbm9ybWFsXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUhlYWRpbmdCaWdnZXIoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgX3RvZ2dsZUhlYWRpbmcoY20sICdiaWdnZXInKTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZm9yIHRvZ2dsaW5nIGhlYWRpbmcgc2l6ZSAxXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUhlYWRpbmcxKGVkaXRvcikge1xuICAgIHZhciBjbSA9IGVkaXRvci5jb2RlbWlycm9yO1xuICAgIF90b2dnbGVIZWFkaW5nKGNtLCB1bmRlZmluZWQsIDEpO1xufVxuXG4vKipcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgaGVhZGluZyBzaXplIDJcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlSGVhZGluZzIoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgX3RvZ2dsZUhlYWRpbmcoY20sIHVuZGVmaW5lZCwgMik7XG59XG5cbi8qKlxuICogQWN0aW9uIGZvciB0b2dnbGluZyBoZWFkaW5nIHNpemUgM1xuICovXG5mdW5jdGlvbiB0b2dnbGVIZWFkaW5nMyhlZGl0b3IpIHtcbiAgICB2YXIgY20gPSBlZGl0b3IuY29kZW1pcnJvcjtcbiAgICBfdG9nZ2xlSGVhZGluZyhjbSwgdW5kZWZpbmVkLCAzKTtcbn1cblxuXG4vKipcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgdWwuXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVVub3JkZXJlZExpc3QoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgX3RvZ2dsZUxpbmUoY20sICd1bm9yZGVyZWQtbGlzdCcpO1xufVxuXG5cbi8qKlxuICogQWN0aW9uIGZvciB0b2dnbGluZyBvbC5cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlT3JkZXJlZExpc3QoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgX3RvZ2dsZUxpbmUoY20sICdvcmRlcmVkLWxpc3QnKTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZm9yIGNsZWFuIGJsb2NrIChyZW1vdmUgaGVhZGxpbmUsIGxpc3QsIGJsb2NrcXVvdGUgY29kZSwgbWFya2VycylcbiAqL1xuZnVuY3Rpb24gY2xlYW5CbG9jayhlZGl0b3IpIHtcbiAgICB2YXIgY20gPSBlZGl0b3IuY29kZW1pcnJvcjtcbiAgICBfY2xlYW5CbG9jayhjbSk7XG59XG5cbi8qKlxuICogQWN0aW9uIGZvciBkcmF3aW5nIGEgbGluay5cbiAqL1xuZnVuY3Rpb24gZHJhd0xpbmsoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHN0YXQgPSBnZXRTdGF0ZShjbSk7XG4gICAgdmFyIG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICB2YXIgdXJsID0gJ2h0dHBzOi8vJztcbiAgICBpZiAob3B0aW9ucy5wcm9tcHRVUkxzKSB7XG4gICAgICAgIHVybCA9IHByb21wdChvcHRpb25zLnByb21wdFRleHRzLmxpbmssICdodHRwczovLycpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmxpbmssIG9wdGlvbnMuaW5zZXJ0VGV4dHMubGluaywgdXJsKTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZm9yIGRyYXdpbmcgYW4gaW1nLlxuICovXG5mdW5jdGlvbiBkcmF3SW1hZ2UoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHN0YXQgPSBnZXRTdGF0ZShjbSk7XG4gICAgdmFyIG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICB2YXIgdXJsID0gJ2h0dHBzOi8vJztcbiAgICBpZiAob3B0aW9ucy5wcm9tcHRVUkxzKSB7XG4gICAgICAgIHVybCA9IHByb21wdChvcHRpb25zLnByb21wdFRleHRzLmltYWdlLCAnaHR0cHM6Ly8nKTtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcmVwbGFjZVNlbGVjdGlvbihjbSwgc3RhdC5pbWFnZSwgb3B0aW9ucy5pbnNlcnRUZXh0cy5pbWFnZSwgdXJsKTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gZm9yIG9wZW5pbmcgdGhlIGJyb3dzZS1maWxlIHdpbmRvdyB0byB1cGxvYWQgYW4gaW1hZ2UgdG8gYSBzZXJ2ZXIuXG4gKiBAcGFyYW0gZWRpdG9yIHtFYXN5TURFfSBUaGUgRWFzeU1ERSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZHJhd1VwbG9hZGVkSW1hZ2UoZWRpdG9yKSB7XG4gICAgLy8gVE9ETzogRHJhdyB0aGUgaW1hZ2UgdGVtcGxhdGUgd2l0aCBhIGZha2UgdXJsPyBpZTogJyFbXShpbXBvcnRpbmcgZm9vLnBuZy4uLiknXG4gICAgZWRpdG9yLm9wZW5Ccm93c2VGaWxlV2luZG93KCk7XG59XG5cbi8qKlxuICogQWN0aW9uIGV4ZWN1dGVkIGFmdGVyIGFuIGltYWdlIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgb24gdGhlIHNlcnZlci5cbiAqIEBwYXJhbSBlZGl0b3Ige0Vhc3lNREV9IFRoZSBFYXN5TURFIG9iamVjdFxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIG9mIHRoZSB1cGxvYWRlZCBpbWFnZVxuICovXG5mdW5jdGlvbiBhZnRlckltYWdlVXBsb2FkZWQoZWRpdG9yLCB1cmwpIHtcbiAgICB2YXIgY20gPSBlZGl0b3IuY29kZW1pcnJvcjtcbiAgICB2YXIgc3RhdCA9IGdldFN0YXRlKGNtKTtcbiAgICB2YXIgb3B0aW9ucyA9IGVkaXRvci5vcHRpb25zO1xuICAgIHZhciBpbWFnZU5hbWUgPSB1cmwuc3Vic3RyKHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gICAgX3JlcGxhY2VTZWxlY3Rpb24oY20sIHN0YXQuaW1hZ2UsIG9wdGlvbnMuaW5zZXJ0VGV4dHMudXBsb2FkZWRJbWFnZSwgdXJsKTtcbiAgICAvLyBzaG93IHVwbG9hZGVkIGltYWdlIGZpbGVuYW1lIGZvciAxMDAwbXNcbiAgICBlZGl0b3IudXBkYXRlU3RhdHVzQmFyKCd1cGxvYWQtaW1hZ2UnLCBlZGl0b3Iub3B0aW9ucy5pbWFnZVRleHRzLnNiT25VcGxvYWRlZC5yZXBsYWNlKCcjaW1hZ2VfbmFtZSMnLCBpbWFnZU5hbWUpKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWRpdG9yLnVwZGF0ZVN0YXR1c0JhcigndXBsb2FkLWltYWdlJywgZWRpdG9yLm9wdGlvbnMuaW1hZ2VUZXh0cy5zYkluaXQpO1xuICAgIH0sIDEwMDApO1xufVxuXG4vKipcbiAqIEFjdGlvbiBmb3IgZHJhd2luZyBhIHRhYmxlLlxuICovXG5mdW5jdGlvbiBkcmF3VGFibGUoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHN0YXQgPSBnZXRTdGF0ZShjbSk7XG4gICAgdmFyIG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICBfcmVwbGFjZVNlbGVjdGlvbihjbSwgc3RhdC50YWJsZSwgb3B0aW9ucy5pbnNlcnRUZXh0cy50YWJsZSk7XG59XG5cbi8qKlxuICogQWN0aW9uIGZvciBkcmF3aW5nIGEgaG9yaXpvbnRhbCBydWxlLlxuICovXG5mdW5jdGlvbiBkcmF3SG9yaXpvbnRhbFJ1bGUoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHN0YXQgPSBnZXRTdGF0ZShjbSk7XG4gICAgdmFyIG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICBfcmVwbGFjZVNlbGVjdGlvbihjbSwgc3RhdC5pbWFnZSwgb3B0aW9ucy5pbnNlcnRUZXh0cy5ob3Jpem9udGFsUnVsZSk7XG59XG5cblxuLyoqXG4gKiBVbmRvIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gdW5kbyhlZGl0b3IpIHtcbiAgICB2YXIgY20gPSBlZGl0b3IuY29kZW1pcnJvcjtcbiAgICBjbS51bmRvKCk7XG4gICAgY20uZm9jdXMoKTtcbn1cblxuXG4vKipcbiAqIFJlZG8gYWN0aW9uLlxuICovXG5mdW5jdGlvbiByZWRvKGVkaXRvcikge1xuICAgIHZhciBjbSA9IGVkaXRvci5jb2RlbWlycm9yO1xuICAgIGNtLnJlZG8oKTtcbiAgICBjbS5mb2N1cygpO1xufVxuXG5cbi8qKlxuICogVG9nZ2xlIHNpZGUgYnkgc2lkZSBwcmV2aWV3XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNpZGVCeVNpZGUoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHdyYXBwZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgIHZhciBwcmV2aWV3ID0gd3JhcHBlci5uZXh0U2libGluZztcbiAgICB2YXIgdG9vbGJhckJ1dHRvbiA9IGVkaXRvci50b29sYmFyRWxlbWVudHMgJiYgZWRpdG9yLnRvb2xiYXJFbGVtZW50c1snc2lkZS1ieS1zaWRlJ107XG4gICAgdmFyIHVzZVNpZGVCeVNpZGVMaXN0ZW5lciA9IGZhbHNlO1xuICAgIGlmICgvZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGUvLnRlc3QocHJldmlldy5jbGFzc05hbWUpKSB7XG4gICAgICAgIHByZXZpZXcuY2xhc3NOYW1lID0gcHJldmlldy5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICAgIC9cXHMqZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGVcXHMqL2csICcnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0b29sYmFyQnV0dG9uKSB0b29sYmFyQnV0dG9uLmNsYXNzTmFtZSA9IHRvb2xiYXJCdXR0b24uY2xhc3NOYW1lLnJlcGxhY2UoL1xccyphY3RpdmVcXHMqL2csICcnKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqQ29kZU1pcnJvci1zaWRlZFxccyovZywgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHRoZSBwcmV2aWV3IGJ1dHRvbiBpcyBjbGlja2VkIGZvciB0aGUgZmlyc3QgdGltZSxcbiAgICAgICAgLy8gZ2l2ZSBzb21lIHRpbWUgZm9yIHRoZSB0cmFuc2l0aW9uIGZyb20gZWRpdG9yLmNzcyB0byBmaXJlIGFuZCB0aGUgdmlldyB0byBzbGlkZSBmcm9tIHJpZ2h0IHRvIGxlZnQsXG4gICAgICAgIC8vIGluc3RlYWQgb2YganVzdCBhcHBlYXJpbmcuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjbS5nZXRPcHRpb24oJ2Z1bGxTY3JlZW4nKSlcbiAgICAgICAgICAgICAgICB0b2dnbGVGdWxsU2NyZWVuKGVkaXRvcik7XG4gICAgICAgICAgICBwcmV2aWV3LmNsYXNzTmFtZSArPSAnIGVkaXRvci1wcmV2aWV3LWFjdGl2ZS1zaWRlJztcbiAgICAgICAgfSwgMSk7XG4gICAgICAgIGlmICh0b29sYmFyQnV0dG9uKSB0b29sYmFyQnV0dG9uLmNsYXNzTmFtZSArPSAnIGFjdGl2ZSc7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lICs9ICcgQ29kZU1pcnJvci1zaWRlZCc7XG4gICAgICAgIHVzZVNpZGVCeVNpZGVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSGlkZSBub3JtYWwgcHJldmlldyBpZiBhY3RpdmVcbiAgICB2YXIgcHJldmlld05vcm1hbCA9IHdyYXBwZXIubGFzdENoaWxkO1xuICAgIGlmICgvZWRpdG9yLXByZXZpZXctYWN0aXZlLy50ZXN0KHByZXZpZXdOb3JtYWwuY2xhc3NOYW1lKSkge1xuICAgICAgICBwcmV2aWV3Tm9ybWFsLmNsYXNzTmFtZSA9IHByZXZpZXdOb3JtYWwuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAvXFxzKmVkaXRvci1wcmV2aWV3LWFjdGl2ZVxccyovZywgJydcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHRvb2xiYXIgPSBlZGl0b3IudG9vbGJhckVsZW1lbnRzLnByZXZpZXc7XG4gICAgICAgIHZhciB0b29sYmFyX2RpdiA9IHdyYXBwZXIucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB0b29sYmFyLmNsYXNzTmFtZSA9IHRvb2xiYXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xccyphY3RpdmVcXHMqL2csICcnKTtcbiAgICAgICAgdG9vbGJhcl9kaXYuY2xhc3NOYW1lID0gdG9vbGJhcl9kaXYuY2xhc3NOYW1lLnJlcGxhY2UoL1xccypkaXNhYmxlZC1mb3ItcHJldmlldyovZywgJycpO1xuICAgIH1cblxuICAgIHZhciBzaWRlQnlTaWRlUmVuZGVyaW5nRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGVkaXRvci5vcHRpb25zLnByZXZpZXdSZW5kZXIoZWRpdG9yLnZhbHVlKCksIHByZXZpZXcpO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldmlldy5pbm5lckhUTUwgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWNtLnNpZGVCeVNpZGVSZW5kZXJpbmdGdW5jdGlvbikge1xuICAgICAgICBjbS5zaWRlQnlTaWRlUmVuZGVyaW5nRnVuY3Rpb24gPSBzaWRlQnlTaWRlUmVuZGVyaW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKHVzZVNpZGVCeVNpZGVMaXN0ZW5lcikge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBlZGl0b3Iub3B0aW9ucy5wcmV2aWV3UmVuZGVyKGVkaXRvci52YWx1ZSgpLCBwcmV2aWV3KTtcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY20ub24oJ3VwZGF0ZScsIGNtLnNpZGVCeVNpZGVSZW5kZXJpbmdGdW5jdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY20ub2ZmKCd1cGRhdGUnLCBjbS5zaWRlQnlTaWRlUmVuZGVyaW5nRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFJlZnJlc2ggdG8gZml4IHNlbGVjdGlvbiBiZWluZyBvZmYgKCMzMDkpXG4gICAgY20ucmVmcmVzaCgpO1xufVxuXG5cbi8qKlxuICogUHJldmlldyBhY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVByZXZpZXcoZWRpdG9yKSB7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHdyYXBwZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgIHZhciB0b29sYmFyX2RpdiA9IHdyYXBwZXIucHJldmlvdXNTaWJsaW5nO1xuICAgIHZhciB0b29sYmFyID0gZWRpdG9yLm9wdGlvbnMudG9vbGJhciA/IGVkaXRvci50b29sYmFyRWxlbWVudHMucHJldmlldyA6IGZhbHNlO1xuICAgIHZhciBwcmV2aWV3ID0gd3JhcHBlci5sYXN0Q2hpbGQ7XG4gICAgaWYgKCFwcmV2aWV3IHx8ICEvZWRpdG9yLXByZXZpZXctZnVsbC8udGVzdChwcmV2aWV3LmNsYXNzTmFtZSkpIHtcblxuICAgICAgICBwcmV2aWV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHByZXZpZXcuY2xhc3NOYW1lID0gJ2VkaXRvci1wcmV2aWV3LWZ1bGwnO1xuXG4gICAgICAgIGlmIChlZGl0b3Iub3B0aW9ucy5wcmV2aWV3Q2xhc3MpIHtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWRpdG9yLm9wdGlvbnMucHJldmlld0NsYXNzKSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9yLm9wdGlvbnMucHJldmlld0NsYXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXcuY2xhc3NOYW1lICs9ICgnICcgKyBlZGl0b3Iub3B0aW9ucy5wcmV2aWV3Q2xhc3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWRpdG9yLm9wdGlvbnMucHJldmlld0NsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByZXZpZXcuY2xhc3NOYW1lICs9ICgnICcgKyBlZGl0b3Iub3B0aW9ucy5wcmV2aWV3Q2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChwcmV2aWV3KTtcbiAgICB9XG4gICAgaWYgKC9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QocHJldmlldy5jbGFzc05hbWUpKSB7XG4gICAgICAgIHByZXZpZXcuY2xhc3NOYW1lID0gcHJldmlldy5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICAgIC9cXHMqZWRpdG9yLXByZXZpZXctYWN0aXZlXFxzKi9nLCAnJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodG9vbGJhcikge1xuICAgICAgICAgICAgdG9vbGJhci5jbGFzc05hbWUgPSB0b29sYmFyLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqYWN0aXZlXFxzKi9nLCAnJyk7XG4gICAgICAgICAgICB0b29sYmFyX2Rpdi5jbGFzc05hbWUgPSB0b29sYmFyX2Rpdi5jbGFzc05hbWUucmVwbGFjZSgvXFxzKmRpc2FibGVkLWZvci1wcmV2aWV3Ki9nLCAnJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHRoZSBwcmV2aWV3IGJ1dHRvbiBpcyBjbGlja2VkIGZvciB0aGUgZmlyc3QgdGltZSxcbiAgICAgICAgLy8gZ2l2ZSBzb21lIHRpbWUgZm9yIHRoZSB0cmFuc2l0aW9uIGZyb20gZWRpdG9yLmNzcyB0byBmaXJlIGFuZCB0aGUgdmlldyB0byBzbGlkZSBmcm9tIHJpZ2h0IHRvIGxlZnQsXG4gICAgICAgIC8vIGluc3RlYWQgb2YganVzdCBhcHBlYXJpbmcuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJldmlldy5jbGFzc05hbWUgKz0gJyBlZGl0b3ItcHJldmlldy1hY3RpdmUnO1xuICAgICAgICB9LCAxKTtcbiAgICAgICAgaWYgKHRvb2xiYXIpIHtcbiAgICAgICAgICAgIHRvb2xiYXIuY2xhc3NOYW1lICs9ICcgYWN0aXZlJztcbiAgICAgICAgICAgIHRvb2xiYXJfZGl2LmNsYXNzTmFtZSArPSAnIGRpc2FibGVkLWZvci1wcmV2aWV3JztcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmV2aWV3LmlubmVySFRNTCA9IGVkaXRvci5vcHRpb25zLnByZXZpZXdSZW5kZXIoZWRpdG9yLnZhbHVlKCksIHByZXZpZXcpO1xuXG4gICAgLy8gVHVybiBvZmYgc2lkZSBieSBzaWRlIGlmIG5lZWRlZFxuICAgIHZhciBzaWRlYnlzaWRlID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5uZXh0U2libGluZztcbiAgICBpZiAoL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS1zaWRlLy50ZXN0KHNpZGVieXNpZGUuY2xhc3NOYW1lKSlcbiAgICAgICAgdG9nZ2xlU2lkZUJ5U2lkZShlZGl0b3IpO1xufVxuXG5mdW5jdGlvbiBfcmVwbGFjZVNlbGVjdGlvbihjbSwgYWN0aXZlLCBzdGFydEVuZCwgdXJsKSB7XG4gICAgaWYgKC9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QoY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5sYXN0Q2hpbGQuY2xhc3NOYW1lKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHRleHQ7XG4gICAgdmFyIHN0YXJ0ID0gc3RhcnRFbmRbMF07XG4gICAgdmFyIGVuZCA9IHN0YXJ0RW5kWzFdO1xuICAgIHZhciBzdGFydFBvaW50ID0ge30sXG4gICAgICAgIGVuZFBvaW50ID0ge307XG4gICAgT2JqZWN0LmFzc2lnbihzdGFydFBvaW50LCBjbS5nZXRDdXJzb3IoJ3N0YXJ0JykpO1xuICAgIE9iamVjdC5hc3NpZ24oZW5kUG9pbnQsIGNtLmdldEN1cnNvcignZW5kJykpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgICAgc3RhcnQgPSBzdGFydC5yZXBsYWNlKCcjdXJsIycsIHVybCk7ICAvLyB1cmwgaXMgaW4gc3RhcnQgZm9yIHVwbG9hZC1pbWFnZVxuICAgICAgICBlbmQgPSBlbmQucmVwbGFjZSgnI3VybCMnLCB1cmwpO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XG4gICAgICAgIHN0YXJ0ID0gdGV4dC5zbGljZSgwLCBzdGFydFBvaW50LmNoKTtcbiAgICAgICAgZW5kID0gdGV4dC5zbGljZShzdGFydFBvaW50LmNoKTtcbiAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XG4gICAgICAgICAgICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXG4gICAgICAgICAgICBjaDogMCxcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGNtLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XG5cbiAgICAgICAgc3RhcnRQb2ludC5jaCArPSBzdGFydC5sZW5ndGg7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xuICAgICAgICAgICAgZW5kUG9pbnQuY2ggKz0gc3RhcnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgY20uZm9jdXMoKTtcbn1cblxuXG5mdW5jdGlvbiBfdG9nZ2xlSGVhZGluZyhjbSwgZGlyZWN0aW9uLCBzaXplKSB7XG4gICAgaWYgKC9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QoY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5sYXN0Q2hpbGQuY2xhc3NOYW1lKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XG4gICAgdmFyIGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRQb2ludC5saW5lOyBpIDw9IGVuZFBvaW50LmxpbmU7IGkrKykge1xuICAgICAgICAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKTtcbiAgICAgICAgICAgIHZhciBjdXJySGVhZGluZ0xldmVsID0gdGV4dC5zZWFyY2goL1teI10vKTtcblxuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJIZWFkaW5nTGV2ZWwgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09ICdiaWdnZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJyMjIyMjIyAnICsgdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSAnIyAnICsgdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyckhlYWRpbmdMZXZlbCA9PSA2ICYmIGRpcmVjdGlvbiA9PSAnc21hbGxlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyckhlYWRpbmdMZXZlbCA9PSAxICYmIGRpcmVjdGlvbiA9PSAnYmlnZ2VyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHIoMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAnYmlnZ2VyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcjJyArIHRleHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJIZWFkaW5nTGV2ZWwgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcjICcgKyB0ZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJIZWFkaW5nTGV2ZWwgPT0gc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1cnJIZWFkaW5nTGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSAnIyAnICsgdGV4dC5zdWJzdHIoY3VyckhlYWRpbmdMZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJIZWFkaW5nTGV2ZWwgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcjIyAnICsgdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJySGVhZGluZ0xldmVsID09IHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJySGVhZGluZ0xldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJyMjICcgKyB0ZXh0LnN1YnN0cihjdXJySGVhZGluZ0xldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckhlYWRpbmdMZXZlbCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJyMjIyAnICsgdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJySGVhZGluZ0xldmVsID09IHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJySGVhZGluZ0xldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJyMjIyAnICsgdGV4dC5zdWJzdHIoY3VyckhlYWRpbmdMZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xuICAgICAgICAgICAgICAgIGxpbmU6IGksXG4gICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbGluZTogaSxcbiAgICAgICAgICAgICAgICBjaDogOTk5OTk5OTk5OTk5OTksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoaSk7XG4gICAgfVxuICAgIGNtLmZvY3VzKCk7XG59XG5cblxuZnVuY3Rpb24gX3RvZ2dsZUxpbmUoY20sIG5hbWUpIHtcbiAgICBpZiAoL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmxhc3RDaGlsZC5jbGFzc05hbWUpKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgbGlzdFJlZ2V4cCA9IC9eKFxccyopKFxcKnwtfFxcK3xcXGQqXFwuKShcXHMrKS87XG4gICAgdmFyIHdoaXRlc3BhY2VzUmVnZXhwID0gL15cXHMqLztcblxuICAgIHZhciBzdGF0ID0gZ2V0U3RhdGUoY20pO1xuICAgIHZhciBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xuICAgIHZhciBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XG4gICAgdmFyIHJlcGwgPSB7XG4gICAgICAgICdxdW90ZSc6IC9eKFxccyopPlxccysvLFxuICAgICAgICAndW5vcmRlcmVkLWxpc3QnOiBsaXN0UmVnZXhwLFxuICAgICAgICAnb3JkZXJlZC1saXN0JzogbGlzdFJlZ2V4cCxcbiAgICB9O1xuXG4gICAgdmFyIF9nZXRDaGFyID0gZnVuY3Rpb24gKG5hbWUsIGkpIHtcbiAgICAgICAgdmFyIG1hcCA9IHtcbiAgICAgICAgICAgICdxdW90ZSc6ICc+JyxcbiAgICAgICAgICAgICd1bm9yZGVyZWQtbGlzdCc6ICcqJyxcbiAgICAgICAgICAgICdvcmRlcmVkLWxpc3QnOiAnJSVpLicsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG1hcFtuYW1lXS5yZXBsYWNlKCclJWknLCBpKTtcbiAgICB9O1xuXG4gICAgdmFyIF9jaGVja0NoYXIgPSBmdW5jdGlvbiAobmFtZSwgY2hhcikge1xuICAgICAgICB2YXIgbWFwID0ge1xuICAgICAgICAgICAgJ3F1b3RlJzogJz4nLFxuICAgICAgICAgICAgJ3Vub3JkZXJlZC1saXN0JzogJyonLFxuICAgICAgICAgICAgJ29yZGVyZWQtbGlzdCc6ICdcXFxcZCsuJyxcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJ0ID0gbmV3IFJlZ0V4cChtYXBbbmFtZV0pO1xuXG4gICAgICAgIHJldHVybiBjaGFyICYmIHJ0LnRlc3QoY2hhcik7XG4gICAgfTtcblxuICAgIHZhciBfdG9nZ2xlID0gZnVuY3Rpb24gKG5hbWUsIHRleHQsIHVudG9nZ2xlT25seSkge1xuICAgICAgICB2YXIgYXJyID0gbGlzdFJlZ2V4cC5leGVjKHRleHQpO1xuICAgICAgICB2YXIgY2hhciA9IF9nZXRDaGFyKG5hbWUsIGxpbmUpO1xuICAgICAgICBpZiAoYXJyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoX2NoZWNrQ2hhcihuYW1lLCBhcnJbMl0pKSB7XG4gICAgICAgICAgICAgICAgY2hhciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCA9IGFyclsxXSArIGNoYXIgKyBhcnJbM10gKyB0ZXh0LnJlcGxhY2Uod2hpdGVzcGFjZXNSZWdleHAsICcnKS5yZXBsYWNlKHJlcGxbbmFtZV0sICckMScpO1xuICAgICAgICB9IGVsc2UgaWYgKHVudG9nZ2xlT25seSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGV4dCA9IGNoYXIgKyAnICcgKyB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG5cbiAgICB2YXIgbGluZSA9IDE7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0UG9pbnQubGluZTsgaSA8PSBlbmRQb2ludC5saW5lOyBpKyspIHtcbiAgICAgICAgKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICB2YXIgdGV4dCA9IGNtLmdldExpbmUoaSk7XG4gICAgICAgICAgICBpZiAoc3RhdFtuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVwbFtuYW1lXSwgJyQxJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHRvZ2dsaW5nIHVub3JkZXJlZC1saXN0IGZvcm1hdHRpbmcsIGNoZWNrIGlmIHRoZSBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgICAgICAvLyBpcyBwYXJ0IG9mIGFuIG9yZGVyZWQtbGlzdCwgYW5kIGlmIHNvLCB1bnRvZ2dsZSB0aGF0IGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9Jb25hcnUvZWFzeS1tYXJrZG93bi1lZGl0b3IvaXNzdWVzLzkyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3Vub3JkZXJlZC1saXN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gX3RvZ2dsZSgnb3JkZXJlZC1saXN0JywgdGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRleHQgPSBfdG9nZ2xlKG5hbWUsIHRleHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBsaW5lICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xuICAgICAgICAgICAgICAgIGxpbmU6IGksXG4gICAgICAgICAgICAgICAgY2g6IDAsXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbGluZTogaSxcbiAgICAgICAgICAgICAgICBjaDogOTk5OTk5OTk5OTk5OTksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoaSk7XG4gICAgfVxuICAgIGNtLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIF90b2dnbGVCbG9jayhlZGl0b3IsIHR5cGUsIHN0YXJ0X2NoYXJzLCBlbmRfY2hhcnMpIHtcbiAgICBpZiAoL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChlZGl0b3IuY29kZW1pcnJvci5nZXRXcmFwcGVyRWxlbWVudCgpLmxhc3RDaGlsZC5jbGFzc05hbWUpKVxuICAgICAgICByZXR1cm47XG5cbiAgICBlbmRfY2hhcnMgPSAodHlwZW9mIGVuZF9jaGFycyA9PT0gJ3VuZGVmaW5lZCcpID8gc3RhcnRfY2hhcnMgOiBlbmRfY2hhcnM7XG4gICAgdmFyIGNtID0gZWRpdG9yLmNvZGVtaXJyb3I7XG4gICAgdmFyIHN0YXQgPSBnZXRTdGF0ZShjbSk7XG5cbiAgICB2YXIgdGV4dDtcbiAgICB2YXIgc3RhcnQgPSBzdGFydF9jaGFycztcbiAgICB2YXIgZW5kID0gZW5kX2NoYXJzO1xuXG4gICAgdmFyIHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XG4gICAgdmFyIGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcblxuICAgIGlmIChzdGF0W3R5cGVdKSB7XG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XG4gICAgICAgIHN0YXJ0ID0gdGV4dC5zbGljZSgwLCBzdGFydFBvaW50LmNoKTtcbiAgICAgICAgZW5kID0gdGV4dC5zbGljZShzdGFydFBvaW50LmNoKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2JvbGQnKSB7XG4gICAgICAgICAgICBzdGFydCA9IHN0YXJ0LnJlcGxhY2UoLyhcXCpcXCp8X18pKD8hW1xcc1xcU10qKFxcKlxcKnxfXykpLywgJycpO1xuICAgICAgICAgICAgZW5kID0gZW5kLnJlcGxhY2UoLyhcXCpcXCp8X18pLywgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ2l0YWxpYycpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQucmVwbGFjZSgvKFxcKnxfKSg/IVtcXHNcXFNdKihcXCp8XykpLywgJycpO1xuICAgICAgICAgICAgZW5kID0gZW5kLnJlcGxhY2UoLyhcXCp8XykvLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnc3RyaWtldGhyb3VnaCcpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQucmVwbGFjZSgvKFxcKlxcKnx+fikoPyFbXFxzXFxTXSooXFwqXFwqfH5+KSkvLCAnJyk7XG4gICAgICAgICAgICBlbmQgPSBlbmQucmVwbGFjZSgvKFxcKlxcKnx+fikvLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XG4gICAgICAgICAgICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXG4gICAgICAgICAgICBjaDogMCxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbGluZTogc3RhcnRQb2ludC5saW5lLFxuICAgICAgICAgICAgY2g6IDk5OTk5OTk5OTk5OTk5LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodHlwZSA9PSAnYm9sZCcgfHwgdHlwZSA9PSAnc3RyaWtldGhyb3VnaCcpIHtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQuY2ggLT0gMjtcbiAgICAgICAgICAgIGlmIChzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xuICAgICAgICAgICAgICAgIGVuZFBvaW50LmNoIC09IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnaXRhbGljJykge1xuICAgICAgICAgICAgc3RhcnRQb2ludC5jaCAtPSAxO1xuICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQgIT09IGVuZFBvaW50KSB7XG4gICAgICAgICAgICAgICAgZW5kUG9pbnQuY2ggLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2JvbGQnKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdCgnKionKS5qb2luKCcnKTtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KCdfXycpLmpvaW4oJycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ2l0YWxpYycpIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KCcqJykuam9pbignJyk7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdCgnXycpLmpvaW4oJycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ3N0cmlrZXRocm91Z2gnKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdCgnfn4nKS5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XG5cbiAgICAgICAgc3RhcnRQb2ludC5jaCArPSBzdGFydF9jaGFycy5sZW5ndGg7XG4gICAgICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgY20uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gX2NsZWFuQmxvY2soY20pIHtcbiAgICBpZiAoL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmxhc3RDaGlsZC5jbGFzc05hbWUpKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcbiAgICB2YXIgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xuICAgIHZhciB0ZXh0O1xuXG4gICAgZm9yICh2YXIgbGluZSA9IHN0YXJ0UG9pbnQubGluZTsgbGluZSA8PSBlbmRQb2ludC5saW5lOyBsaW5lKyspIHtcbiAgICAgICAgdGV4dCA9IGNtLmdldExpbmUobGluZSk7XG4gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15bIF0qKFsjIF0rfFxcKnwtfFs+IF0rfFswLTldKygufFxcKSkpWyBdKi8sICcnKTtcblxuICAgICAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xuICAgICAgICAgICAgbGluZTogbGluZSxcbiAgICAgICAgICAgIGNoOiAwLFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lLFxuICAgICAgICAgICAgY2g6IDk5OTk5OTk5OTk5OTk5LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIG51bWJlciBvZiBieXRlcyB0byBhIGh1bWFuLXJlYWRhYmxlIGZpbGUgc2l6ZS5cbiAqIEBwYXJhbSBieXRlcyB7aW50ZWdlcn0gQSBudW1iZXIgb2YgYnl0ZXMsIGFzIGludGVnZXIuIEV4OiA0MjExMzdcbiAqIEBwYXJhbSB1bml0cyB7bnVtYmVyW119IEFuIGFycmF5IG9mIGh1bWFuLXJlYWRhYmxlIHVuaXRzLCBpZS4gWydiJywgJ0tiJywgJ01iJ11cbiAqIEByZXR1cm5zIHN0cmluZyBBIGh1bWFuLXJlYWRhYmxlIGZpbGUgc2l6ZS4gRXg6ICc0MTJLYidcbiAqL1xuZnVuY3Rpb24gaHVtYW5GaWxlU2l6ZShieXRlcywgdW5pdHMpIHtcbiAgICBpZiAoTWF0aC5hYnMoYnl0ZXMpIDwgMTAyNCkge1xuICAgICAgICByZXR1cm4gJycgKyBieXRlcyArIHVuaXRzWzBdO1xuICAgIH1cbiAgICB2YXIgdSA9IDA7XG4gICAgZG8ge1xuICAgICAgICBieXRlcyAvPSAxMDI0O1xuICAgICAgICArK3U7XG4gICAgfSB3aGlsZSAoTWF0aC5hYnMoYnl0ZXMpID49IDEwMjQgJiYgdSA8IHVuaXRzLmxlbmd0aCk7XG4gICAgcmV0dXJuICcnICsgYnl0ZXMudG9GaXhlZCgxKSArIHVuaXRzW3VdO1xufVxuXG4vLyBNZXJnZSB0aGUgcHJvcGVydGllcyBvZiBvbmUgb2JqZWN0IGludG8gYW5vdGhlci5cbmZ1bmN0aW9uIF9tZXJnZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgaWYgKHNvdXJjZVtwcm9wZXJ0eV0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldLmNvbmNhdCh0YXJnZXRbcHJvcGVydHldIGluc3RhbmNlb2YgQXJyYXkgPyB0YXJnZXRbcHJvcGVydHldIDogW10pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzb3VyY2VbcHJvcGVydHldICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNvdXJjZVtwcm9wZXJ0eV0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgc291cmNlW3Byb3BlcnR5XS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gX21lcmdlUHJvcGVydGllcyh0YXJnZXRbcHJvcGVydHldIHx8IHt9LCBzb3VyY2VbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vLyBNZXJnZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG9iamVjdHMgaW50byBvbmUuXG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFyZ2V0ID0gX21lcmdlUHJvcGVydGllcyh0YXJnZXQsIGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyogVGhlIHJpZ2h0IHdvcmQgY291bnQgaW4gcmVzcGVjdCBmb3IgQ0pLLiAqL1xuZnVuY3Rpb24gd29yZENvdW50KGRhdGEpIHtcbiAgICB2YXIgcGF0dGVybiA9IC9bYS16QS1aMC05X1xcdTAwQTAtXFx1MDJBRlxcdTAzOTItXFx1MDNjOVxcdTA0MTAtXFx1MDRGOV0rfFtcXHU0RTAwLVxcdTlGRkZcXHUzNDAwLVxcdTRkYmZcXHVmOTAwLVxcdWZhZmZcXHUzMDQwLVxcdTMwOWZcXHVhYzAwLVxcdWQ3YWZdKy9nO1xuICAgIHZhciBtID0gZGF0YS5tYXRjaChwYXR0ZXJuKTtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIGlmIChtID09PSBudWxsKSByZXR1cm4gY291bnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtW2ldLmNoYXJDb2RlQXQoMCkgPj0gMHg0RTAwKSB7XG4gICAgICAgICAgICBjb3VudCArPSBtW2ldLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xufVxuXG52YXIgdG9vbGJhckJ1aWx0SW5CdXR0b25zID0ge1xuICAgICdib2xkJzoge1xuICAgICAgICBuYW1lOiAnYm9sZCcsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlQm9sZCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtYm9sZCcsXG4gICAgICAgIHRpdGxlOiAnQm9sZCcsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnaXRhbGljJzoge1xuICAgICAgICBuYW1lOiAnaXRhbGljJyxcbiAgICAgICAgYWN0aW9uOiB0b2dnbGVJdGFsaWMsXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWl0YWxpYycsXG4gICAgICAgIHRpdGxlOiAnSXRhbGljJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgICdzdHJpa2V0aHJvdWdoJzoge1xuICAgICAgICBuYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlU3RyaWtldGhyb3VnaCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtc3RyaWtldGhyb3VnaCcsXG4gICAgICAgIHRpdGxlOiAnU3RyaWtldGhyb3VnaCcsXG4gICAgfSxcbiAgICAnaGVhZGluZyc6IHtcbiAgICAgICAgbmFtZTogJ2hlYWRpbmcnLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZUhlYWRpbmdTbWFsbGVyLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1oZWFkZXIgZmEtaGVhZGluZycsXG4gICAgICAgIHRpdGxlOiAnSGVhZGluZycsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnaGVhZGluZy1zbWFsbGVyJzoge1xuICAgICAgICBuYW1lOiAnaGVhZGluZy1zbWFsbGVyJyxcbiAgICAgICAgYWN0aW9uOiB0b2dnbGVIZWFkaW5nU21hbGxlcixcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtaGVhZGVyIGZhLWhlYWRpbmcgaGVhZGVyLXNtYWxsZXInLFxuICAgICAgICB0aXRsZTogJ1NtYWxsZXIgSGVhZGluZycsXG4gICAgfSxcbiAgICAnaGVhZGluZy1iaWdnZXInOiB7XG4gICAgICAgIG5hbWU6ICdoZWFkaW5nLWJpZ2dlcicsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlSGVhZGluZ0JpZ2dlcixcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtaGVhZGVyIGZhLWhlYWRpbmcgaGVhZGVyLWJpZ2dlcicsXG4gICAgICAgIHRpdGxlOiAnQmlnZ2VyIEhlYWRpbmcnLFxuICAgIH0sXG4gICAgJ2hlYWRpbmctMSc6IHtcbiAgICAgICAgbmFtZTogJ2hlYWRpbmctMScsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlSGVhZGluZzEsXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWhlYWRlciBmYS1oZWFkaW5nIGhlYWRlci0xJyxcbiAgICAgICAgdGl0bGU6ICdCaWcgSGVhZGluZycsXG4gICAgfSxcbiAgICAnaGVhZGluZy0yJzoge1xuICAgICAgICBuYW1lOiAnaGVhZGluZy0yJyxcbiAgICAgICAgYWN0aW9uOiB0b2dnbGVIZWFkaW5nMixcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtaGVhZGVyIGZhLWhlYWRpbmcgaGVhZGVyLTInLFxuICAgICAgICB0aXRsZTogJ01lZGl1bSBIZWFkaW5nJyxcbiAgICB9LFxuICAgICdoZWFkaW5nLTMnOiB7XG4gICAgICAgIG5hbWU6ICdoZWFkaW5nLTMnLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZUhlYWRpbmczLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1oZWFkZXIgZmEtaGVhZGluZyBoZWFkZXItMycsXG4gICAgICAgIHRpdGxlOiAnU21hbGwgSGVhZGluZycsXG4gICAgfSxcbiAgICAnc2VwYXJhdG9yLTEnOiB7XG4gICAgICAgIG5hbWU6ICdzZXBhcmF0b3ItMScsXG4gICAgfSxcbiAgICAnY29kZSc6IHtcbiAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZUNvZGVCbG9jayxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtY29kZScsXG4gICAgICAgIHRpdGxlOiAnQ29kZScsXG4gICAgfSxcbiAgICAncXVvdGUnOiB7XG4gICAgICAgIG5hbWU6ICdxdW90ZScsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlQmxvY2txdW90ZSxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtcXVvdGUtbGVmdCcsXG4gICAgICAgIHRpdGxlOiAnUXVvdGUnLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gICAgJ3Vub3JkZXJlZC1saXN0Jzoge1xuICAgICAgICBuYW1lOiAndW5vcmRlcmVkLWxpc3QnLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZVVub3JkZXJlZExpc3QsXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWxpc3QtdWwnLFxuICAgICAgICB0aXRsZTogJ0dlbmVyaWMgTGlzdCcsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnb3JkZXJlZC1saXN0Jzoge1xuICAgICAgICBuYW1lOiAnb3JkZXJlZC1saXN0JyxcbiAgICAgICAgYWN0aW9uOiB0b2dnbGVPcmRlcmVkTGlzdCxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtbGlzdC1vbCcsXG4gICAgICAgIHRpdGxlOiAnTnVtYmVyZWQgTGlzdCcsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnY2xlYW4tYmxvY2snOiB7XG4gICAgICAgIG5hbWU6ICdjbGVhbi1ibG9jaycsXG4gICAgICAgIGFjdGlvbjogY2xlYW5CbG9jayxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtZXJhc2VyJyxcbiAgICAgICAgdGl0bGU6ICdDbGVhbiBibG9jaycsXG4gICAgfSxcbiAgICAnc2VwYXJhdG9yLTInOiB7XG4gICAgICAgIG5hbWU6ICdzZXBhcmF0b3ItMicsXG4gICAgfSxcbiAgICAnbGluayc6IHtcbiAgICAgICAgbmFtZTogJ2xpbmsnLFxuICAgICAgICBhY3Rpb246IGRyYXdMaW5rLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1saW5rJyxcbiAgICAgICAgdGl0bGU6ICdDcmVhdGUgTGluaycsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnaW1hZ2UnOiB7XG4gICAgICAgIG5hbWU6ICdpbWFnZScsXG4gICAgICAgIGFjdGlvbjogZHJhd0ltYWdlLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1pbWFnZScsXG4gICAgICAgIHRpdGxlOiAnSW5zZXJ0IEltYWdlJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgICd1cGxvYWQtaW1hZ2UnOiB7XG4gICAgICAgIG5hbWU6ICd1cGxvYWQtaW1hZ2UnLFxuICAgICAgICBhY3Rpb246IGRyYXdVcGxvYWRlZEltYWdlLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1pbWFnZScsXG4gICAgICAgIHRpdGxlOiAnSW1wb3J0IGFuIGltYWdlJyxcbiAgICB9LFxuICAgICd0YWJsZSc6IHtcbiAgICAgICAgbmFtZTogJ3RhYmxlJyxcbiAgICAgICAgYWN0aW9uOiBkcmF3VGFibGUsXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLXRhYmxlJyxcbiAgICAgICAgdGl0bGU6ICdJbnNlcnQgVGFibGUnLFxuICAgIH0sXG4gICAgJ2hvcml6b250YWwtcnVsZSc6IHtcbiAgICAgICAgbmFtZTogJ2hvcml6b250YWwtcnVsZScsXG4gICAgICAgIGFjdGlvbjogZHJhd0hvcml6b250YWxSdWxlLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1taW51cycsXG4gICAgICAgIHRpdGxlOiAnSW5zZXJ0IEhvcml6b250YWwgTGluZScsXG4gICAgfSxcbiAgICAnc2VwYXJhdG9yLTMnOiB7XG4gICAgICAgIG5hbWU6ICdzZXBhcmF0b3ItMycsXG4gICAgfSxcbiAgICAncHJldmlldyc6IHtcbiAgICAgICAgbmFtZTogJ3ByZXZpZXcnLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZVByZXZpZXcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWV5ZScsXG4gICAgICAgIG5vRGlzYWJsZTogdHJ1ZSxcbiAgICAgICAgdGl0bGU6ICdUb2dnbGUgUHJldmlldycsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICAnc2lkZS1ieS1zaWRlJzoge1xuICAgICAgICBuYW1lOiAnc2lkZS1ieS1zaWRlJyxcbiAgICAgICAgYWN0aW9uOiB0b2dnbGVTaWRlQnlTaWRlLFxuICAgICAgICBjbGFzc05hbWU6ICdmYSBmYS1jb2x1bW5zJyxcbiAgICAgICAgbm9EaXNhYmxlOiB0cnVlLFxuICAgICAgICBub01vYmlsZTogdHJ1ZSxcbiAgICAgICAgdGl0bGU6ICdUb2dnbGUgU2lkZSBieSBTaWRlJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgICdmdWxsc2NyZWVuJzoge1xuICAgICAgICBuYW1lOiAnZnVsbHNjcmVlbicsXG4gICAgICAgIGFjdGlvbjogdG9nZ2xlRnVsbFNjcmVlbixcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtYXJyb3dzLWFsdCcsXG4gICAgICAgIG5vRGlzYWJsZTogdHJ1ZSxcbiAgICAgICAgbm9Nb2JpbGU6IHRydWUsXG4gICAgICAgIHRpdGxlOiAnVG9nZ2xlIEZ1bGxzY3JlZW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gICAgJ3NlcGFyYXRvci00Jzoge1xuICAgICAgICBuYW1lOiAnc2VwYXJhdG9yLTQnLFxuICAgIH0sXG4gICAgJ2d1aWRlJzoge1xuICAgICAgICBuYW1lOiAnZ3VpZGUnLFxuICAgICAgICBhY3Rpb246ICdodHRwczovL3d3dy5tYXJrZG93bmd1aWRlLm9yZy9iYXNpYy1zeW50YXgvJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtcXVlc3Rpb24tY2lyY2xlJyxcbiAgICAgICAgbm9EaXNhYmxlOiB0cnVlLFxuICAgICAgICB0aXRsZTogJ01hcmtkb3duIEd1aWRlJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgICdzZXBhcmF0b3ItNSc6IHtcbiAgICAgICAgbmFtZTogJ3NlcGFyYXRvci01JyxcbiAgICB9LFxuICAgICd1bmRvJzoge1xuICAgICAgICBuYW1lOiAndW5kbycsXG4gICAgICAgIGFjdGlvbjogdW5kbyxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtdW5kbycsXG4gICAgICAgIG5vRGlzYWJsZTogdHJ1ZSxcbiAgICAgICAgdGl0bGU6ICdVbmRvJyxcbiAgICB9LFxuICAgICdyZWRvJzoge1xuICAgICAgICBuYW1lOiAncmVkbycsXG4gICAgICAgIGFjdGlvbjogcmVkbyxcbiAgICAgICAgY2xhc3NOYW1lOiAnZmEgZmEtcmVwZWF0IGZhLXJlZG8nLFxuICAgICAgICBub0Rpc2FibGU6IHRydWUsXG4gICAgICAgIHRpdGxlOiAnUmVkbycsXG4gICAgfSxcbn07XG5cbnZhciBpbnNlcnRUZXh0cyA9IHtcbiAgICBsaW5rOiBbJ1snLCAnXSgjdXJsIyknXSxcbiAgICBpbWFnZTogWychW10oJywgJyN1cmwjKSddLFxuICAgIHVwbG9hZGVkSW1hZ2U6IFsnIVtdKCN1cmwjKScsICcnXSxcbiAgICAvLyB1cGxvYWRlZEltYWdlOiBbJyFbXSgjdXJsIylcXG4nLCAnJ10sIC8vIFRPRE86IE5ldyBsaW5lIGluc2VydGlvbiBkb2Vzbid0IHdvcmsgaGVyZS5cbiAgICB0YWJsZTogWycnLCAnXFxuXFxufCBDb2x1bW4gMSB8IENvbHVtbiAyIHwgQ29sdW1uIDMgfFxcbnwgLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tIHxcXG58IFRleHQgICAgIHwgVGV4dCAgICAgfCBUZXh0ICAgICB8XFxuXFxuJ10sXG4gICAgaG9yaXpvbnRhbFJ1bGU6IFsnJywgJ1xcblxcbi0tLS0tXFxuXFxuJ10sXG59O1xuXG52YXIgcHJvbXB0VGV4dHMgPSB7XG4gICAgbGluazogJ1VSTCBmb3IgdGhlIGxpbms6JyxcbiAgICBpbWFnZTogJ1VSTCBvZiB0aGUgaW1hZ2U6Jyxcbn07XG5cbnZhciBibG9ja1N0eWxlcyA9IHtcbiAgICAnYm9sZCc6ICcqKicsXG4gICAgJ2NvZGUnOiAnYGBgJyxcbiAgICAnaXRhbGljJzogJyonLFxufTtcblxuLyoqXG4gKiBUZXh0cyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgKG1haW5seSBvbiB0aGUgc3RhdHVzIGJhcikgZm9yIHRoZSBpbXBvcnQgaW1hZ2VcbiAqIGZlYXR1cmUuIENhbiBiZSB1c2VkIGZvciBjdXN0b21pemF0aW9uIG9yIGludGVybmF0aW9uYWxpemF0aW9uLlxuICovXG52YXIgaW1hZ2VUZXh0cyA9IHtcbiAgICBzYkluaXQ6ICdBdHRhY2ggZmlsZXMgYnkgZHJhZyBhbmQgZHJvcHBpbmcgb3IgcGFzdGluZyBmcm9tIGNsaXBib2FyZC4nLFxuICAgIHNiT25EcmFnRW50ZXI6ICdEcm9wIGltYWdlIHRvIHVwbG9hZCBpdC4nLFxuICAgIHNiT25Ecm9wOiAnVXBsb2FkaW5nIGltYWdlICNpbWFnZXNfbmFtZXMjLi4uJyxcbiAgICBzYlByb2dyZXNzOiAnVXBsb2FkaW5nICNmaWxlX25hbWUjOiAjcHJvZ3Jlc3MjJScsXG4gICAgc2JPblVwbG9hZGVkOiAnVXBsb2FkZWQgI2ltYWdlX25hbWUjJyxcbiAgICBzaXplVW5pdHM6ICdiLEtiLE1iJyxcbn07XG5cbi8qKlxuICogRXJyb3JzIGRpc3BsYXllZCB0byB0aGUgdXNlciwgdXNpbmcgdGhlIGBlcnJvckNhbGxiYWNrYCBvcHRpb24uIENhbiBiZSB1c2VkIGZvclxuICogY3VzdG9taXphdGlvbiBvciBpbnRlcm5hdGlvbmFsaXphdGlvbi5cbiAqL1xudmFyIGVycm9yTWVzc2FnZXMgPSB7XG4gICAgbm9GaWxlR2l2ZW46ICdZb3UgbXVzdCBzZWxlY3QgYSBmaWxlLicsXG4gICAgdHlwZU5vdEFsbG93ZWQ6ICdUaGlzIGltYWdlIHR5cGUgaXMgbm90IGFsbG93ZWQuJyxcbiAgICBmaWxlVG9vTGFyZ2U6ICdJbWFnZSAjaW1hZ2VfbmFtZSMgaXMgdG9vIGJpZyAoI2ltYWdlX3NpemUjKS5cXG4nICtcbiAgICAgICAgJ01heGltdW0gZmlsZSBzaXplIGlzICNpbWFnZV9tYXhfc2l6ZSMuJyxcbiAgICBpbXBvcnRFcnJvcjogJ1NvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gdXBsb2FkaW5nIHRoZSBpbWFnZSAjaW1hZ2VfbmFtZSMuJyxcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIG9mIEVhc3lNREUuXG4gKi9cbmZ1bmN0aW9uIEVhc3lNREUob3B0aW9ucykge1xuICAgIC8vIEhhbmRsZSBvcHRpb25zIHBhcmFtZXRlclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gVXNlZCBsYXRlciB0byByZWZlciB0byBpdFwicyBwYXJlbnRcbiAgICBvcHRpb25zLnBhcmVudCA9IHRoaXM7XG5cbiAgICAvLyBDaGVjayBpZiBGb250IEF3ZXNvbWUgbmVlZHMgdG8gYmUgYXV0byBkb3dubG9hZGVkXG4gICAgdmFyIGF1dG9Eb3dubG9hZEZBID0gdHJ1ZTtcblxuICAgIGlmIChvcHRpb25zLmF1dG9Eb3dubG9hZEZvbnRBd2Vzb21lID09PSBmYWxzZSkge1xuICAgICAgICBhdXRvRG93bmxvYWRGQSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmF1dG9Eb3dubG9hZEZvbnRBd2Vzb21lICE9PSB0cnVlKSB7XG4gICAgICAgIHZhciBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXRzW2ldLmhyZWYpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0c1tpXS5ocmVmLmluZGV4T2YoJy8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLycpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBhdXRvRG93bmxvYWRGQSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF1dG9Eb3dubG9hZEZBKSB7XG4gICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgbGluay5ocmVmID0gJ2h0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lL2xhdGVzdC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MnO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH1cblxuXG4gICAgLy8gRmluZCB0aGUgdGV4dGFyZWEgdG8gdXNlXG4gICAgaWYgKG9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IG9wdGlvbiB3YXMgc3BlY2lmaWVkLCBidXQgbm8gZWxlbWVudCB3YXMgZm91bmRcbiAgICAgICAgY29uc29sZS5sb2coJ0Vhc3lNREU6IEVycm9yLiBObyBlbGVtZW50IHdhcyBmb3VuZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gSGFuZGxlIHRvb2xiYXJcbiAgICBpZiAob3B0aW9ucy50b29sYmFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZVxuICAgICAgICBvcHRpb25zLnRvb2xiYXIgPSBbXTtcblxuXG4gICAgICAgIC8vIExvb3Agb3ZlciB0aGUgYnVpbHQgaW4gYnV0dG9ucywgdG8gZ2V0IHRoZSBwcmVmZXJyZWQgb3JkZXJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRvb2xiYXJCdWlsdEluQnV0dG9ucykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0b29sYmFyQnVpbHRJbkJ1dHRvbnMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ3NlcGFyYXRvci0nKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRvb2xiYXIucHVzaCgnfCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0b29sYmFyQnVpbHRJbkJ1dHRvbnNba2V5XS5kZWZhdWx0ID09PSB0cnVlIHx8IChvcHRpb25zLnNob3dJY29ucyAmJiBvcHRpb25zLnNob3dJY29ucy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgJiYgb3B0aW9ucy5zaG93SWNvbnMuaW5kZXhPZihrZXkpICE9IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRvb2xiYXIucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVkaXRvciBwcmV2aWV3IHN0eWxpbmcgY2xhc3MuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ByZXZpZXdDbGFzcycpKSB7XG4gICAgICAgIG9wdGlvbnMucHJldmlld0NsYXNzID0gJ2VkaXRvci1wcmV2aWV3JztcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc3RhdHVzIGJhclxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzdGF0dXMnKSkge1xuICAgICAgICBvcHRpb25zLnN0YXR1cyA9IFsnYXV0b3NhdmUnLCAnbGluZXMnLCAnd29yZHMnLCAnY3Vyc29yJ107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXBsb2FkSW1hZ2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnVuc2hpZnQoJ3VwbG9hZC1pbWFnZScpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBBZGQgZGVmYXVsdCBwcmV2aWV3IHJlbmRlcmluZyBmdW5jdGlvblxuICAgIGlmICghb3B0aW9ucy5wcmV2aWV3UmVuZGVyKSB7XG4gICAgICAgIG9wdGlvbnMucHJldmlld1JlbmRlciA9IGZ1bmN0aW9uIChwbGFpblRleHQpIHtcbiAgICAgICAgICAgIC8vIE5vdGU6IFwidGhpc1wiIHJlZmVycyB0byB0aGUgb3B0aW9ucyBvYmplY3RcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5tYXJrZG93bihwbGFpblRleHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgLy8gU2V0IGRlZmF1bHQgb3B0aW9ucyBmb3IgcGFyc2luZyBjb25maWdcbiAgICBvcHRpb25zLnBhcnNpbmdDb25maWcgPSBleHRlbmQoe1xuICAgICAgICBoaWdobGlnaHRGb3JtYXR0aW5nOiB0cnVlLCAvLyBuZWVkZWQgZm9yIHRvZ2dsZUNvZGVCbG9jayB0byBkZXRlY3QgdHlwZXMgb2YgY29kZVxuICAgIH0sIG9wdGlvbnMucGFyc2luZ0NvbmZpZyB8fCB7fSk7XG5cblxuICAgIC8vIE1lcmdpbmcgdGhlIGluc2VydFRleHRzLCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zXG4gICAgb3B0aW9ucy5pbnNlcnRUZXh0cyA9IGV4dGVuZCh7fSwgaW5zZXJ0VGV4dHMsIG9wdGlvbnMuaW5zZXJ0VGV4dHMgfHwge30pO1xuXG5cbiAgICAvLyBNZXJnaW5nIHRoZSBwcm9tcHRUZXh0cywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xuICAgIG9wdGlvbnMucHJvbXB0VGV4dHMgPSBleHRlbmQoe30sIHByb21wdFRleHRzLCBvcHRpb25zLnByb21wdFRleHRzIHx8IHt9KTtcblxuXG4gICAgLy8gTWVyZ2luZyB0aGUgYmxvY2tTdHlsZXMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnNcbiAgICBvcHRpb25zLmJsb2NrU3R5bGVzID0gZXh0ZW5kKHt9LCBibG9ja1N0eWxlcywgb3B0aW9ucy5ibG9ja1N0eWxlcyB8fCB7fSk7XG5cblxuICAgIC8vIE1lcmdpbmcgdGhlIHNob3J0Y3V0cywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xuICAgIG9wdGlvbnMuc2hvcnRjdXRzID0gZXh0ZW5kKHt9LCBzaG9ydGN1dHMsIG9wdGlvbnMuc2hvcnRjdXRzIHx8IHt9KTtcblxuICAgIG9wdGlvbnMubWluSGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQgfHwgJzMwMHB4JztcblxuICAgIG9wdGlvbnMuZXJyb3JDYWxsYmFjayA9IG9wdGlvbnMuZXJyb3JDYWxsYmFjayB8fCBmdW5jdGlvbiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGFsZXJ0KGVycm9yTWVzc2FnZSk7XG4gICAgfTtcblxuICAgIC8vIEltcG9ydC1pbWFnZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICBvcHRpb25zLnVwbG9hZEltYWdlID0gb3B0aW9ucy51cGxvYWRJbWFnZSB8fCBmYWxzZTtcbiAgICBvcHRpb25zLmltYWdlTWF4U2l6ZSA9IG9wdGlvbnMuaW1hZ2VNYXhTaXplIHx8IDIwOTcxNTI7IC8vIDEwMjQgKiAxMDI0ICogMlxuICAgIG9wdGlvbnMuaW1hZ2VBY2NlcHQgPSBvcHRpb25zLmltYWdlQWNjZXB0IHx8ICdpbWFnZS9wbmcsIGltYWdlL2pwZWcnO1xuICAgIG9wdGlvbnMuaW1hZ2VUZXh0cyA9IGV4dGVuZCh7fSwgaW1hZ2VUZXh0cywgb3B0aW9ucy5pbWFnZVRleHRzIHx8IHt9KTtcbiAgICBvcHRpb25zLmVycm9yTWVzc2FnZXMgPSBleHRlbmQoe30sIGVycm9yTWVzc2FnZXMsIG9wdGlvbnMuZXJyb3JNZXNzYWdlcyB8fCB7fSk7XG5cblxuICAgIC8vIENoYW5nZSB1bmlxdWVfaWQgdG8gdW5pcXVlSWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgaWYgKG9wdGlvbnMuYXV0b3NhdmUgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYXV0b3NhdmUudW5pcXVlX2lkICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLmF1dG9zYXZlLnVuaXF1ZV9pZCAhPSAnJylcbiAgICAgICAgb3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCA9IG9wdGlvbnMuYXV0b3NhdmUudW5pcXVlX2lkO1xuXG5cbiAgICAvLyBVcGRhdGUgdGhpcyBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuXG4gICAgLy8gQXV0byByZW5kZXJcbiAgICB0aGlzLnJlbmRlcigpO1xuXG5cbiAgICAvLyBUaGUgY29kZW1pcnJvciBjb21wb25lbnQgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgLy8gc28sIHRoZSBzZXR0ZXIgZm9yIHRoZSBpbml0aWFsVmFsdWUgY2FuIG9ubHkgcnVuIGFmdGVyXG4gICAgLy8gdGhlIGVsZW1lbnQgaGFzIGJlZW4gcmVuZGVyZWRcbiAgICBpZiAob3B0aW9ucy5pbml0aWFsVmFsdWUgJiYgKCF0aGlzLm9wdGlvbnMuYXV0b3NhdmUgfHwgdGhpcy5vcHRpb25zLmF1dG9zYXZlLmZvdW5kU2F2ZWRWYWx1ZSAhPT0gdHJ1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZShvcHRpb25zLmluaXRpYWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudXBsb2FkSW1hZ2UpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuY29kZW1pcnJvci5vbignZHJhZ2VudGVyJywgZnVuY3Rpb24gKGNtLCBldmVudCkge1xuICAgICAgICAgICAgc2VsZi51cGRhdGVTdGF0dXNCYXIoJ3VwbG9hZC1pbWFnZScsIHNlbGYub3B0aW9ucy5pbWFnZVRleHRzLnNiT25EcmFnRW50ZXIpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2RlbWlycm9yLm9uKCdkcmFnZW5kJywgZnVuY3Rpb24gKGNtLCBldmVudCkge1xuICAgICAgICAgICAgc2VsZi51cGRhdGVTdGF0dXNCYXIoJ3VwbG9hZC1pbWFnZScsIHNlbGYub3B0aW9ucy5pbWFnZVRleHRzLnNiSW5pdCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvZGVtaXJyb3Iub24oJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uIChjbSwgZXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYudXBkYXRlU3RhdHVzQmFyKCd1cGxvYWQtaW1hZ2UnLCBzZWxmLm9wdGlvbnMuaW1hZ2VUZXh0cy5zYkluaXQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvZGVtaXJyb3Iub24oJ2RyYWdvdmVyJywgZnVuY3Rpb24gKGNtLCBldmVudCkge1xuICAgICAgICAgICAgc2VsZi51cGRhdGVTdGF0dXNCYXIoJ3VwbG9hZC1pbWFnZScsIHNlbGYub3B0aW9ucy5pbWFnZVRleHRzLnNiT25EcmFnRW50ZXIpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvZGVtaXJyb3Iub24oJ2Ryb3AnLCBmdW5jdGlvbiAoY20sIGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pbWFnZVVwbG9hZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi51cGxvYWRJbWFnZXNVc2luZ0N1c3RvbUZ1bmN0aW9uKG9wdGlvbnMuaW1hZ2VVcGxvYWRGdW5jdGlvbiwgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi51cGxvYWRJbWFnZXMoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb2RlbWlycm9yLm9uKCdwYXN0ZScsIGZ1bmN0aW9uIChjbSwgZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmltYWdlVXBsb2FkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxmLnVwbG9hZEltYWdlc1VzaW5nQ3VzdG9tRnVuY3Rpb24ob3B0aW9ucy5pbWFnZVVwbG9hZEZ1bmN0aW9uLCBldmVudC5jbGlwYm9hcmREYXRhLmZpbGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi51cGxvYWRJbWFnZXMoZXZlbnQuY2xpcGJvYXJkRGF0YS5maWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBVcGxvYWQgYXN5bmNocm9ub3VzbHkgYSBsaXN0IG9mIGltYWdlcyB0byBhIHNlcnZlci5cbiAqXG4gKiBDYW4gYmUgdHJpZ2dlcmVkIGJ5OlxuICogLSBkcmFnJmRyb3A7XG4gKiAtIGNvcHktcGFzdGU7XG4gKiAtIHRoZSBicm93c2UtZmlsZSB3aW5kb3cgKG9wZW5lZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgKnVwbG9hZC1pbWFnZSogaWNvbikuXG4gKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlcyBUaGUgZmlsZXMgdG8gdXBsb2FkIHRoZSB0aGUgc2VydmVyLlxuICogQHBhcmFtIFtvblN1Y2Nlc3NdIHtmdW5jdGlvbn0gc2VlIEVhc3lNREUucHJvdG90eXBlLnVwbG9hZEltYWdlXG4gKiBAcGFyYW0gW29uRXJyb3JdIHtmdW5jdGlvbn0gc2VlIEVhc3lNREUucHJvdG90eXBlLnVwbG9hZEltYWdlXG4gKi9cbkVhc3lNREUucHJvdG90eXBlLnVwbG9hZEltYWdlcyA9IGZ1bmN0aW9uIChmaWxlcywgb25TdWNjZXNzLCBvbkVycm9yKSB7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZmlsZXNbaV0ubmFtZSk7XG4gICAgICAgIHRoaXMudXBsb2FkSW1hZ2UoZmlsZXNbaV0sIG9uU3VjY2Vzcywgb25FcnJvcik7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdHVzQmFyKCd1cGxvYWQtaW1hZ2UnLCB0aGlzLm9wdGlvbnMuaW1hZ2VUZXh0cy5zYk9uRHJvcC5yZXBsYWNlKCcjaW1hZ2VzX25hbWVzIycsIG5hbWVzLmpvaW4oJywgJykpKTtcbn07XG5cbi8qKlxuICogVXBsb2FkIGFzeW5jaHJvbm91c2x5IGEgbGlzdCBvZiBpbWFnZXMgdG8gYSBzZXJ2ZXIuXG4gKlxuICogQ2FuIGJlIHRyaWdnZXJlZCBieTpcbiAqIC0gZHJhZyZkcm9wO1xuICogLSBjb3B5LXBhc3RlO1xuICogLSB0aGUgYnJvd3NlLWZpbGUgd2luZG93IChvcGVuZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlICp1cGxvYWQtaW1hZ2UqIGljb24pLlxuICogQHBhcmFtIGltYWdlVXBsb2FkRnVuY3Rpb24ge0Z1bmN0aW9ufSBUaGUgY3VzdG9tIGZ1bmN0aW9uIHRvIHVwbG9hZCB0aGUgaW1hZ2UgcGFzc2VkIGluIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlcyBUaGUgZmlsZXMgdG8gdXBsb2FkIHRoZSB0aGUgc2VydmVyLlxuICovXG5FYXN5TURFLnByb3RvdHlwZS51cGxvYWRJbWFnZXNVc2luZ0N1c3RvbUZ1bmN0aW9uID0gZnVuY3Rpb24gKGltYWdlVXBsb2FkRnVuY3Rpb24sIGZpbGVzKSB7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZmlsZXNbaV0ubmFtZSk7XG4gICAgICAgIHRoaXMudXBsb2FkSW1hZ2VVc2luZ0N1c3RvbUZ1bmN0aW9uKGltYWdlVXBsb2FkRnVuY3Rpb24sIGZpbGVzW2ldKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0dXNCYXIoJ3VwbG9hZC1pbWFnZScsIHRoaXMub3B0aW9ucy5pbWFnZVRleHRzLnNiT25Ecm9wLnJlcGxhY2UoJyNpbWFnZXNfbmFtZXMjJywgbmFtZXMuam9pbignLCAnKSkpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gaXRlbSBpbiB0aGUgc3RhdHVzIGJhci5cbiAqIEBwYXJhbSBpdGVtTmFtZSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgaXRlbSB0byB1cGRhdGUgKGllLiAndXBsb2FkLWltYWdlJywgJ2F1dG9zYXZlJywgZXRjLikuXG4gKiBAcGFyYW0gY29udGVudCB7c3RyaW5nfSB0aGUgbmV3IGNvbnRlbnQgb2YgdGhlIGl0ZW0gdG8gd3JpdGUgaW4gdGhlIHN0YXR1cyBiYXIuXG4gKi9cbkVhc3lNREUucHJvdG90eXBlLnVwZGF0ZVN0YXR1c0JhciA9IGZ1bmN0aW9uIChpdGVtTmFtZSwgY29udGVudCkge1xuICAgIHZhciBtYXRjaGluZ0NsYXNzZXMgPSB0aGlzLmd1aS5zdGF0dXNiYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpdGVtTmFtZSk7XG4gICAgaWYgKG1hdGNoaW5nQ2xhc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5ndWkuc3RhdHVzYmFyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaXRlbU5hbWUpWzBdLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICB9IGVsc2UgaWYgKG1hdGNoaW5nQ2xhc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0Vhc3lNREU6IHN0YXR1cyBiYXIgaXRlbSAnICsgaXRlbU5hbWUgKyAnIHdhcyBub3QgZm91bmQuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0Vhc3lNREU6IFNldmVyYWwgc3RhdHVzIGJhciBpdGVtcyBuYW1lZCAnICsgaXRlbU5hbWUgKyAnIHdhcyBmb3VuZC4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlZmF1bHQgbWFya2Rvd24gcmVuZGVyLlxuICovXG5FYXN5TURFLnByb3RvdHlwZS5tYXJrZG93biA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgaWYgKG1hcmtlZCkge1xuICAgICAgICAvLyBJbml0aWFsaXplXG4gICAgICAgIHZhciBtYXJrZWRPcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yZW5kZXJpbmdDb25maWcgJiYgdGhpcy5vcHRpb25zLnJlbmRlcmluZ0NvbmZpZy5tYXJrZWRPcHRpb25zKSB7XG4gICAgICAgICAgICBtYXJrZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLnJlbmRlcmluZ0NvbmZpZy5tYXJrZWRPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFya2VkT3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIG9wdGlvbnNcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucmVuZGVyaW5nQ29uZmlnICYmIHRoaXMub3B0aW9ucy5yZW5kZXJpbmdDb25maWcuc2luZ2xlTGluZUJyZWFrcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG1hcmtlZE9wdGlvbnMuYnJlYWtzID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXJrZWRPcHRpb25zLmJyZWFrcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yZW5kZXJpbmdDb25maWcgJiYgdGhpcy5vcHRpb25zLnJlbmRlcmluZ0NvbmZpZy5jb2RlU3ludGF4SGlnaGxpZ2h0aW5nID09PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qIEdldCBITEpTIGZyb20gY29uZmlnIG9yIHdpbmRvdyAqL1xuICAgICAgICAgICAgdmFyIGhsanMgPSB0aGlzLm9wdGlvbnMucmVuZGVyaW5nQ29uZmlnLmhsanMgfHwgd2luZG93LmhsanM7XG5cbiAgICAgICAgICAgIC8qIENoZWNrIGlmIEhMSlMgbG9hZGVkICovXG4gICAgICAgICAgICBpZiAoaGxqcykge1xuICAgICAgICAgICAgICAgIG1hcmtlZE9wdGlvbnMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhsanMuaGlnaGxpZ2h0QXV0byhjb2RlKS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IG9wdGlvbnNcbiAgICAgICAgbWFya2VkLnNldE9wdGlvbnMobWFya2VkT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgbWFya2Rvd24gdG8gSFRNTFxuICAgICAgICB2YXIgaHRtbFRleHQgPSBtYXJrZWQodGV4dCk7XG5cbiAgICAgICAgLy8gRWRpdCB0aGUgSFRNTCBhbmNob3JzIHRvIGFkZCAndGFyZ2V0PVwiX2JsYW5rXCInIGJ5IGRlZmF1bHQuXG4gICAgICAgIGh0bWxUZXh0ID0gYWRkQW5jaG9yVGFyZ2V0QmxhbmsoaHRtbFRleHQpO1xuXG4gICAgICAgIHJldHVybiBodG1sVGV4dDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlciBlZGl0b3IgdG8gdGhlIGdpdmVuIGVsZW1lbnQuXG4gKi9cbkVhc3lNREUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChlbCkge1xuICAgIGlmICghZWwpIHtcbiAgICAgICAgZWwgPSB0aGlzLmVsZW1lbnQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlbmRlcmVkICYmIHRoaXMuX3JlbmRlcmVkID09PSBlbCkge1xuICAgICAgICAvLyBBbHJlYWR5IHJlbmRlcmVkLlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWw7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGtleU1hcHMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnNob3J0Y3V0cykge1xuICAgICAgICAvLyBudWxsIHN0YW5kcyBmb3IgXCJkbyBub3QgYmluZCB0aGlzIGNvbW1hbmRcIlxuICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNba2V5XSAhPT0gbnVsbCAmJiBiaW5kaW5nc1trZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGtleU1hcHNbZml4U2hvcnRjdXQob3B0aW9ucy5zaG9ydGN1dHNba2V5XSldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gYmluZGluZ3Nba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbihzZWxmKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oYWN0aW9uLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGtleU1hcHNbJ0VudGVyJ10gPSAnbmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0JztcbiAgICBrZXlNYXBzWydUYWInXSA9ICd0YWJBbmRJbmRlbnRNYXJrZG93bkxpc3QnO1xuICAgIGtleU1hcHNbJ1NoaWZ0LVRhYiddID0gJ3NoaWZ0VGFiQW5kVW5pbmRlbnRNYXJrZG93bkxpc3QnO1xuICAgIGtleU1hcHNbJ0VzYyddID0gZnVuY3Rpb24gKGNtKSB7XG4gICAgICAgIGlmIChjbS5nZXRPcHRpb24oJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihzZWxmKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb2RlbWlycm9yLmdldE9wdGlvbignZnVsbFNjcmVlbicpKSB0b2dnbGVGdWxsU2NyZWVuKHNlbGYpO1xuICAgICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgdmFyIG1vZGUsIGJhY2tkcm9wO1xuICAgIGlmIChvcHRpb25zLnNwZWxsQ2hlY2tlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgbW9kZSA9ICdzcGVsbC1jaGVja2VyJztcbiAgICAgICAgYmFja2Ryb3AgPSBvcHRpb25zLnBhcnNpbmdDb25maWc7XG4gICAgICAgIGJhY2tkcm9wLm5hbWUgPSAnZ2ZtJztcbiAgICAgICAgYmFja2Ryb3AuZ2l0SHViU3BpY2UgPSBmYWxzZTtcblxuICAgICAgICBDb2RlTWlycm9yU3BlbGxDaGVja2VyKHtcbiAgICAgICAgICAgIGNvZGVNaXJyb3JJbnN0YW5jZTogQ29kZU1pcnJvcixcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbW9kZSA9IG9wdGlvbnMucGFyc2luZ0NvbmZpZztcbiAgICAgICAgbW9kZS5uYW1lID0gJ2dmbSc7XG4gICAgICAgIG1vZGUuZ2l0SHViU3BpY2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBmdW5jdGlvbiBjb25maWd1cmVNb3VzZShjbSwgcmVwZWF0LCBldmVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkTmV3OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGVtaXJyb3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShlbCwge1xuICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICBiYWNrZHJvcDogYmFja2Ryb3AsXG4gICAgICAgIHRoZW1lOiAob3B0aW9ucy50aGVtZSAhPSB1bmRlZmluZWQpID8gb3B0aW9ucy50aGVtZSA6ICdlYXN5bWRlJyxcbiAgICAgICAgdGFiU2l6ZTogKG9wdGlvbnMudGFiU2l6ZSAhPSB1bmRlZmluZWQpID8gb3B0aW9ucy50YWJTaXplIDogMixcbiAgICAgICAgaW5kZW50VW5pdDogKG9wdGlvbnMudGFiU2l6ZSAhPSB1bmRlZmluZWQpID8gb3B0aW9ucy50YWJTaXplIDogMixcbiAgICAgICAgaW5kZW50V2l0aFRhYnM6IChvcHRpb25zLmluZGVudFdpdGhUYWJzID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZSxcbiAgICAgICAgYXV0b2ZvY3VzOiAob3B0aW9ucy5hdXRvZm9jdXMgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBleHRyYUtleXM6IGtleU1hcHMsXG4gICAgICAgIGxpbmVXcmFwcGluZzogKG9wdGlvbnMubGluZVdyYXBwaW5nID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgIGFsbG93RHJvcEZpbGVUeXBlczogWyd0ZXh0L3BsYWluJ10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiBvcHRpb25zLnBsYWNlaG9sZGVyIHx8IGVsLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSB8fCAnJyxcbiAgICAgICAgc3R5bGVTZWxlY3RlZFRleHQ6IChvcHRpb25zLnN0eWxlU2VsZWN0ZWRUZXh0ICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zLnN0eWxlU2VsZWN0ZWRUZXh0IDogIWlzTW9iaWxlKCksXG4gICAgICAgIGNvbmZpZ3VyZU1vdXNlOiBjb25maWd1cmVNb3VzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29kZW1pcnJvci5nZXRTY3JvbGxlckVsZW1lbnQoKS5zdHlsZS5taW5IZWlnaHQgPSBvcHRpb25zLm1pbkhlaWdodDtcblxuICAgIGlmIChvcHRpb25zLmZvcmNlU3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICB2YXIgY20gPSB0aGlzLmNvZGVtaXJyb3I7XG4gICAgICAgIGNtLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbS5zYXZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZ3VpID0ge307XG5cbiAgICBpZiAob3B0aW9ucy50b29sYmFyICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmd1aS50b29sYmFyID0gdGhpcy5jcmVhdGVUb29sYmFyKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5ndWkuc3RhdHVzYmFyID0gdGhpcy5jcmVhdGVTdGF0dXNiYXIoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYXV0b3NhdmUgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYXV0b3NhdmUuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmF1dG9zYXZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ndWkuc2lkZUJ5U2lkZSA9IHRoaXMuY3JlYXRlU2lkZUJ5U2lkZSgpO1xuXG4gICAgdGhpcy5fcmVuZGVyZWQgPSB0aGlzLmVsZW1lbnQ7XG5cblxuICAgIC8vIEZpeGVzIENvZGVNaXJyb3IgYnVnICgjMzQ0KVxuICAgIHZhciB0ZW1wX2NtID0gdGhpcy5jb2RlbWlycm9yO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0ZW1wX2NtLnJlZnJlc2goKTtcbiAgICB9LmJpbmQodGVtcF9jbSksIDApO1xufTtcblxuLy8gU2FmYXJpLCBpbiBQcml2YXRlIEJyb3dzaW5nIE1vZGUsIGxvb2tzIGxpa2UgaXQgc3VwcG9ydHMgbG9jYWxTdG9yYWdlIGJ1dCBhbGwgY2FsbHMgdG8gc2V0SXRlbSB0aHJvdyBRdW90YUV4Y2VlZGVkRXJyb3IuIFdlJ3JlIGdvaW5nIHRvIGRldGVjdCB0aGlzIGFuZCBzZXQgYSB2YXJpYWJsZSBhY2NvcmRpbmdseS5cbmZ1bmN0aW9uIGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkge1xuICAgIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NtZGVfbG9jYWxTdG9yYWdlJywgMSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc21kZV9sb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5FYXN5TURFLnByb3RvdHlwZS5hdXRvc2F2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgICB2YXIgZWFzeU1ERSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkID09ICcnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRWFzeU1ERTogWW91IG11c3Qgc2V0IGEgdW5pcXVlSWQgdG8gdXNlIHRoZSBhdXRvc2F2ZSBmZWF0dXJlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9zYXZlLmJpbmRlZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGVhc3lNREUuZWxlbWVudC5mb3JtICE9IG51bGwgJiYgZWFzeU1ERS5lbGVtZW50LmZvcm0gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZWFzeU1ERS5lbGVtZW50LmZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZWFzeU1ERS5hdXRvc2F2ZVRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICAgIGVhc3lNREUuYXV0b3NhdmVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3NtZGVfJyArIGVhc3lNREUub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzdGFydCBhdXRvc2F2aW5nIGluIGNhc2UgdGhlIHN1Ym1pdCB3aWxsIGJlIGNhbmNlbGxlZCBkb3duIHRoZSBsaW5lXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFzeU1ERS5hdXRvc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlYXN5TURFLm9wdGlvbnMuYXV0b3NhdmUuZGVsYXkgfHwgMTAwMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b3NhdmUuYmluZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b3NhdmUubG9hZGVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzbWRlXycgKyB0aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQpID09ICdzdHJpbmcnICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzbWRlXycgKyB0aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQpICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2RlbWlycm9yLnNldFZhbHVlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzbWRlXycgKyB0aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b3NhdmUuZm91bmRTYXZlZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmF1dG9zYXZlLmxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmFsdWUgPSBlYXN5TURFLnZhbHVlKCk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzbWRlXycgKyB0aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzbWRlXycgKyB0aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dG9zYXZlZCcpO1xuICAgICAgICBpZiAoZWwgIT0gbnVsbCAmJiBlbCAhPSB1bmRlZmluZWQgJiYgZWwgIT0gJycpIHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBoaCA9IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIHZhciBtID0gZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB2YXIgZGQgPSAnYW0nO1xuICAgICAgICAgICAgdmFyIGggPSBoaDtcbiAgICAgICAgICAgIGlmIChoID49IDEyKSB7XG4gICAgICAgICAgICAgICAgaCA9IGhoIC0gMTI7XG4gICAgICAgICAgICAgICAgZGQgPSAncG0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGggPT0gMCkge1xuICAgICAgICAgICAgICAgIGggPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG0gPSBtIDwgMTAgPyAnMCcgKyBtIDogbTtcblxuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gJ0F1dG9zYXZlZDogJyArIGggKyAnOicgKyBtICsgJyAnICsgZGQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF1dG9zYXZlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlYXN5TURFLmF1dG9zYXZlKCk7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5hdXRvc2F2ZS5kZWxheSB8fCAxMDAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0Vhc3lNREU6IGxvY2FsU3RvcmFnZSBub3QgYXZhaWxhYmxlLCBjYW5ub3QgYXV0b3NhdmUnKTtcbiAgICB9XG59O1xuXG5FYXN5TURFLnByb3RvdHlwZS5jbGVhckF1dG9zYXZlZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0xvY2FsU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b3NhdmUgPT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkID09ICcnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRWFzeU1ERTogWW91IG11c3Qgc2V0IGEgdW5pcXVlSWQgdG8gY2xlYXIgdGhlIGF1dG9zYXZlIHZhbHVlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc21kZV8nICsgdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnRWFzeU1ERTogbG9jYWxTdG9yYWdlIG5vdCBhdmFpbGFibGUsIGNhbm5vdCBhdXRvc2F2ZScpO1xuICAgIH1cbn07XG5cbi8qKlxuICogT3BlbiB0aGUgYnJvd3NlLWZpbGUgd2luZG93IHRvIHVwbG9hZCBhbiBpbWFnZSB0byBhIHNlcnZlci5cbiAqIEBwYXJhbSBbb25TdWNjZXNzXSB7ZnVuY3Rpb259IHNlZSBFYXN5TURFLnByb3RvdHlwZS51cGxvYWRJbWFnZVxuICogQHBhcmFtIFtvbkVycm9yXSB7ZnVuY3Rpb259IHNlZSBFYXN5TURFLnByb3RvdHlwZS51cGxvYWRJbWFnZVxuICovXG5FYXN5TURFLnByb3RvdHlwZS5vcGVuQnJvd3NlRmlsZVdpbmRvdyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGltYWdlSW5wdXQgPSB0aGlzLmd1aS50b29sYmFyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ltYWdlSW5wdXQnKVswXTtcbiAgICBpbWFnZUlucHV0LmNsaWNrKCk7IC8vZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7ICAvLyByZXBsYWNlZCB3aXRoIGNsaWNrKCkgZm9yIElFMTEgY29tcGF0aWJpbGl0eS5cbiAgICBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmltYWdlVXBsb2FkRnVuY3Rpb24pIHtcbiAgICAgICAgICBzZWxmLnVwbG9hZEltYWdlc1VzaW5nQ3VzdG9tRnVuY3Rpb24oc2VsZi5vcHRpb25zLmltYWdlVXBsb2FkRnVuY3Rpb24sIGV2ZW50LnRhcmdldC5maWxlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi51cGxvYWRJbWFnZXMoZXZlbnQudGFyZ2V0LmZpbGVzLCBvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGltYWdlSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICAgIH1cblxuICAgIGltYWdlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xufTtcblxuLyoqXG4gKiBVcGxvYWQgYW4gaW1hZ2UgdG8gdGhlIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0gZmlsZSB7RmlsZX0gVGhlIGltYWdlIHRvIHVwbG9hZCwgYXMgYSBIVE1MNSBGaWxlIG9iamVjdCAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpXG4gKiBAcGFyYW0gW29uU3VjY2Vzc10ge2Z1bmN0aW9ufSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGltYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZCwgd2l0aCBvbmUgcGFyYW1ldGVyOlxuICogLSB1cmwgKHN0cmluZyk6IFRoZSBVUkwgb2YgdGhlIHVwbG9hZGVkIGltYWdlLlxuICogQHBhcmFtIFtvbkVycm9yXSB7ZnVuY3Rpb259IEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBpbWFnZSB1cGxvYWQgZmFpbHMsIHdpdGggb25lIHBhcmFtZXRlcjpcbiAqIC0gZXJyb3IgKHN0cmluZyk6IHRoZSBkZXRhaWxlZCBlcnJvciB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIChiYXNlZCBvbiBtZXNzYWdlcyBmcm9tIG9wdGlvbnMuZXJyb3JNZXNzYWdlcykuXG4gKi9cbkVhc3lNREUucHJvdG90eXBlLnVwbG9hZEltYWdlID0gZnVuY3Rpb24gKGZpbGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBvblN1Y2Nlc3MgPSBvblN1Y2Nlc3MgfHwgZnVuY3Rpb24gb25TdWNjZXNzKGltYWdlVXJsKSB7XG4gICAgICAgIGFmdGVySW1hZ2VVcGxvYWRlZChzZWxmLCBpbWFnZVVybCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9uRXJyb3JTdXAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIC8vIHNob3cgZXJyb3Igb24gc3RhdHVzIGJhciBhbmQgcmVzZXQgYWZ0ZXIgMTAwMDBtc1xuICAgICAgICBzZWxmLnVwZGF0ZVN0YXR1c0JhcigndXBsb2FkLWltYWdlJywgZXJyb3JNZXNzYWdlKTtcblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYudXBkYXRlU3RhdHVzQmFyKCd1cGxvYWQtaW1hZ2UnLCBzZWxmLm9wdGlvbnMuaW1hZ2VUZXh0cy5zYkluaXQpO1xuICAgICAgICB9LCAxMDAwMCk7XG5cbiAgICAgICAgLy8gcnVuIGN1c3RvbSBlcnJvciBoYW5kbGVyXG4gICAgICAgIGlmIChvbkVycm9yICYmIHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbkVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcnVuIGVycm9yIGhhbmRsZXIgZnJvbSBvcHRpb25zLCB0aGlzIGFsZXJ0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgc2VsZi5vcHRpb25zLmVycm9yQ2FsbGJhY2soZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWxsRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSkge1xuICAgICAgICB2YXIgdW5pdHMgPSBzZWxmLm9wdGlvbnMuaW1hZ2VUZXh0cy5zaXplVW5pdHMuc3BsaXQoJywnKTtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgLnJlcGxhY2UoJyNpbWFnZV9uYW1lIycsIGZpbGUubmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCcjaW1hZ2Vfc2l6ZSMnLCBodW1hbkZpbGVTaXplKGZpbGUuc2l6ZSwgdW5pdHMpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyNpbWFnZV9tYXhfc2l6ZSMnLCBodW1hbkZpbGVTaXplKHNlbGYub3B0aW9ucy5pbWFnZU1heFNpemUsIHVuaXRzKSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMub3B0aW9ucy5pbWFnZU1heFNpemUpIHtcbiAgICAgICAgb25FcnJvclN1cChmaWxsRXJyb3JNZXNzYWdlKHRoaXMub3B0aW9ucy5lcnJvck1lc3NhZ2VzLmZpbGVUb29MYXJnZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGZpbGUpO1xuXG4gICAgLy8gaW5zZXJ0IENTUkYgdG9rZW4gaWYgcHJvdmlkZWQgaW4gY29uZmlnLlxuICAgIGlmIChzZWxmLm9wdGlvbnMuaW1hZ2VDU1JGVG9rZW4pIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjc3JmbWlkZGxld2FyZXRva2VuJywgc2VsZi5vcHRpb25zLmltYWdlQ1NSRlRva2VuKTtcbiAgICB9XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICByZXF1ZXN0LnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAnJyArIE1hdGgucm91bmQoKGV2ZW50LmxvYWRlZCAqIDEwMCkgLyBldmVudC50b3RhbCk7XG4gICAgICAgICAgICBzZWxmLnVwZGF0ZVN0YXR1c0JhcigndXBsb2FkLWltYWdlJywgc2VsZi5vcHRpb25zLmltYWdlVGV4dHMuc2JQcm9ncmVzcy5yZXBsYWNlKCcjZmlsZV9uYW1lIycsIGZpbGUubmFtZSkucmVwbGFjZSgnI3Byb2dyZXNzIycsIHByb2dyZXNzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3Qub3BlbignUE9TVCcsIHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZEVuZHBvaW50KTtcblxuICAgIHJlcXVlc3Qub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFYXN5TURFOiBUaGUgc2VydmVyIGRpZCBub3QgcmV0dXJuIGEgdmFsaWQganNvbi4nKTtcbiAgICAgICAgICAgIG9uRXJyb3JTdXAoZmlsbEVycm9yTWVzc2FnZShzZWxmLm9wdGlvbnMuZXJyb3JNZXNzYWdlcy5pbXBvcnRFcnJvcikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlICYmICFyZXNwb25zZS5lcnJvciAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIG9uU3VjY2Vzcyh3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy8nICsgcmVzcG9uc2UuZGF0YS5maWxlUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgJiYgcmVzcG9uc2UuZXJyb3IgaW4gc2VsZi5vcHRpb25zLmVycm9yTWVzc2FnZXMpIHsgIC8vIHByZWZvcm1hdHRlZCBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgb25FcnJvclN1cChmaWxsRXJyb3JNZXNzYWdlKHNlbGYub3B0aW9ucy5lcnJvck1lc3NhZ2VzW3Jlc3BvbnNlLmVycm9yXSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5lcnJvcikgeyAgLy8gc2VydmVyIHNpZGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICBvbkVycm9yU3VwKGZpbGxFcnJvck1lc3NhZ2UocmVzcG9uc2UuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7ICAvL3Vua25vd24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFYXN5TURFOiBSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyB0aGUgaW1hZ2UuJ1xuICAgICAgICAgICAgICAgICAgICArIHRoaXMuc3RhdHVzICsgJyAoJyArIHRoaXMuc3RhdHVzVGV4dCArICcpJyk7XG4gICAgICAgICAgICAgICAgb25FcnJvclN1cChmaWxsRXJyb3JNZXNzYWdlKHNlbGYub3B0aW9ucy5lcnJvck1lc3NhZ2VzLmltcG9ydEVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vhc3lNREU6IEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hlbiB0cnlpbmcgdG8gdXBsb2FkIHRoZSBpbWFnZS4nXG4gICAgICAgICAgICArIGV2ZW50LnRhcmdldC5zdGF0dXMgKyAnICgnICsgZXZlbnQudGFyZ2V0LnN0YXR1c1RleHQgKyAnKScpO1xuICAgICAgICBvbkVycm9yU3VwKHNlbGYub3B0aW9ucy5lcnJvck1lc3NhZ2VzLmltcG9ydEVycm9yKTtcbiAgICB9O1xuXG4gICAgcmVxdWVzdC5zZW5kKGZvcm1EYXRhKTtcblxufTtcblxuLyoqXG4gKiBVcGxvYWQgYW4gaW1hZ2UgdG8gdGhlIHNlcnZlciB1c2luZyBhIGN1c3RvbSB1cGxvYWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGltYWdlVXBsb2FkRnVuY3Rpb24ge0Z1bmN0aW9ufSBUaGUgY3VzdG9tIGZ1bmN0aW9uIHRvIHVwbG9hZCB0aGUgaW1hZ2UgcGFzc2VkIGluIG9wdGlvbnNcbiAqIEBwYXJhbSBmaWxlIHtGaWxlfSBUaGUgaW1hZ2UgdG8gdXBsb2FkLCBhcyBhIEhUTUw1IEZpbGUgb2JqZWN0IChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkuXG4gKi9cbkVhc3lNREUucHJvdG90eXBlLnVwbG9hZEltYWdlVXNpbmdDdXN0b21GdW5jdGlvbiA9IGZ1bmN0aW9uKGltYWdlVXBsb2FkRnVuY3Rpb24sIGZpbGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gb25TdWNjZXNzKGltYWdlVXJsKSB7XG4gICAgICAgIGFmdGVySW1hZ2VVcGxvYWRlZChzZWxmLCBpbWFnZVVybCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25FcnJvcihlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIGZpbGxlZEVycm9yTWVzc2FnZSA9IGZpbGxFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgLy8gc2hvdyBlcnJvciBvbiBzdGF0dXMgYmFyIGFuZCByZXNldCBhZnRlciAxMDAwMG1zXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdHVzQmFyKCd1cGxvYWQtaW1hZ2UnLCBmaWxsZWRFcnJvck1lc3NhZ2UpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi51cGRhdGVTdGF0dXNCYXIoJ3VwbG9hZC1pbWFnZScsIHNlbGYub3B0aW9ucy5pbWFnZVRleHRzLnNiSW5pdCk7XG4gICAgICAgIH0sIDEwMDAwKTtcblxuICAgICAgICAvLyBydW4gZXJyb3IgaGFuZGxlciBmcm9tIG9wdGlvbnMsIHRoaXMgYWxlcnRzIHRoZSBtZXNzYWdlLlxuICAgICAgICBzZWxmLm9wdGlvbnMuZXJyb3JDYWxsYmFjayhmaWxsZWRFcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbGxFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHZhciB1bml0cyA9IHNlbGYub3B0aW9ucy5pbWFnZVRleHRzLnNpemVVbml0cy5zcGxpdCgnLCcpO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAucmVwbGFjZSgnI2ltYWdlX25hbWUjJywgZmlsZS5uYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyNpbWFnZV9zaXplIycsIGh1bWFuRmlsZVNpemUoZmlsZS5zaXplLCB1bml0cykpXG4gICAgICAgICAgICAucmVwbGFjZSgnI2ltYWdlX21heF9zaXplIycsIGh1bWFuRmlsZVNpemUoc2VsZi5vcHRpb25zLmltYWdlTWF4U2l6ZSwgdW5pdHMpKTtcbiAgICB9XG5cbiAgICBpbWFnZVVwbG9hZEZ1bmN0aW9uKGZpbGUsIG9uU3VjY2Vzcywgb25FcnJvcik7XG59O1xuXG5FYXN5TURFLnByb3RvdHlwZS5jcmVhdGVTaWRlQnlTaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjbSA9IHRoaXMuY29kZW1pcnJvcjtcbiAgICB2YXIgd3JhcHBlciA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgdmFyIHByZXZpZXcgPSB3cmFwcGVyLm5leHRTaWJsaW5nO1xuXG4gICAgaWYgKCFwcmV2aWV3IHx8ICEvZWRpdG9yLXByZXZpZXctc2lkZS8udGVzdChwcmV2aWV3LmNsYXNzTmFtZSkpIHtcbiAgICAgICAgcHJldmlldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwcmV2aWV3LmNsYXNzTmFtZSA9ICdlZGl0b3ItcHJldmlldy1zaWRlJztcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnByZXZpZXdDbGFzcykge1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMucHJldmlld0NsYXNzKSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLnByZXZpZXdDbGFzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3LmNsYXNzTmFtZSArPSAoJyAnICsgdGhpcy5vcHRpb25zLnByZXZpZXdDbGFzc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucHJldmlld0NsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByZXZpZXcuY2xhc3NOYW1lICs9ICgnICcgKyB0aGlzLm9wdGlvbnMucHJldmlld0NsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocHJldmlldywgd3JhcHBlci5uZXh0U2libGluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zeW5jU2lkZUJ5U2lkZVByZXZpZXdTY3JvbGwgPT09IGZhbHNlKSByZXR1cm4gcHJldmlldztcbiAgICAvLyBTeW5jcyBzY3JvbGwgIGVkaXRvciAtPiBwcmV2aWV3XG4gICAgdmFyIGNTY3JvbGwgPSBmYWxzZTtcbiAgICB2YXIgcFNjcm9sbCA9IGZhbHNlO1xuICAgIGNtLm9uKCdzY3JvbGwnLCBmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoY1Njcm9sbCkge1xuICAgICAgICAgICAgY1Njcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBTY3JvbGwgPSB0cnVlO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdi5nZXRTY3JvbGxJbmZvKCkuaGVpZ2h0IC0gdi5nZXRTY3JvbGxJbmZvKCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB2YXIgcmF0aW8gPSBwYXJzZUZsb2F0KHYuZ2V0U2Nyb2xsSW5mbygpLnRvcCkgLyBoZWlnaHQ7XG4gICAgICAgIHZhciBtb3ZlID0gKHByZXZpZXcuc2Nyb2xsSGVpZ2h0IC0gcHJldmlldy5jbGllbnRIZWlnaHQpICogcmF0aW87XG4gICAgICAgIHByZXZpZXcuc2Nyb2xsVG9wID0gbW92ZTtcbiAgICB9KTtcblxuICAgIC8vIFN5bmNzIHNjcm9sbCAgcHJldmlldyAtPiBlZGl0b3JcbiAgICBwcmV2aWV3Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocFNjcm9sbCkge1xuICAgICAgICAgICAgcFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNTY3JvbGwgPSB0cnVlO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gcHJldmlldy5zY3JvbGxIZWlnaHQgLSBwcmV2aWV3LmNsaWVudEhlaWdodDtcbiAgICAgICAgdmFyIHJhdGlvID0gcGFyc2VGbG9hdChwcmV2aWV3LnNjcm9sbFRvcCkgLyBoZWlnaHQ7XG4gICAgICAgIHZhciBtb3ZlID0gKGNtLmdldFNjcm9sbEluZm8oKS5oZWlnaHQgLSBjbS5nZXRTY3JvbGxJbmZvKCkuY2xpZW50SGVpZ2h0KSAqIHJhdGlvO1xuICAgICAgICBjbS5zY3JvbGxUbygwLCBtb3ZlKTtcbiAgICB9O1xuICAgIHJldHVybiBwcmV2aWV3O1xufTtcblxuRWFzeU1ERS5wcm90b3R5cGUuY3JlYXRlVG9vbGJhciA9IGZ1bmN0aW9uIChpdGVtcykge1xuICAgIGl0ZW1zID0gaXRlbXMgfHwgdGhpcy5vcHRpb25zLnRvb2xiYXI7XG5cbiAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodG9vbGJhckJ1aWx0SW5CdXR0b25zW2l0ZW1zW2ldXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0ZW1zW2ldID0gdG9vbGJhckJ1aWx0SW5CdXR0b25zW2l0ZW1zW2ldXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBiYXIuY2xhc3NOYW1lID0gJ2VkaXRvci10b29sYmFyJztcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciB0b29sYmFyRGF0YSA9IHt9O1xuICAgIHNlbGYudG9vbGJhciA9IGl0ZW1zO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpdGVtc1tpXS5uYW1lID09ICdndWlkZScgJiYgc2VsZi5vcHRpb25zLnRvb2xiYXJHdWlkZUljb24gPT09IGZhbHNlKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5oaWRlSWNvbnMgJiYgc2VsZi5vcHRpb25zLmhpZGVJY29ucy5pbmRleE9mKGl0ZW1zW2ldLm5hbWUpICE9IC0xKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gRnVsbHNjcmVlbiBkb2VzIG5vdCB3b3JrIHdlbGwgb24gbW9iaWxlIGRldmljZXMgKGV2ZW4gdGFibGV0cylcbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgaG9wZWZ1bGx5IHRoaXMgY2FuIGJlIHJlc29sdmVkXG4gICAgICAgIGlmICgoaXRlbXNbaV0ubmFtZSA9PSAnZnVsbHNjcmVlbicgfHwgaXRlbXNbaV0ubmFtZSA9PSAnc2lkZS1ieS1zaWRlJykgJiYgaXNNb2JpbGUoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG5cbiAgICAgICAgLy8gRG9uJ3QgaW5jbHVkZSB0cmFpbGluZyBzZXBhcmF0b3JzXG4gICAgICAgIGlmIChpdGVtc1tpXSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICB2YXIgbm9uU2VwYXJhdG9ySWNvbnNGb2xsb3cgPSBmYWxzZTtcblxuICAgICAgICAgICAgZm9yICh2YXIgeCA9IChpICsgMSk7IHggPCBpdGVtcy5sZW5ndGg7IHgrKykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtc1t4XSAhPT0gJ3wnICYmICghc2VsZi5vcHRpb25zLmhpZGVJY29ucyB8fCBzZWxmLm9wdGlvbnMuaGlkZUljb25zLmluZGV4T2YoaXRlbXNbeF0ubmFtZSkgPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vblNlcGFyYXRvckljb25zRm9sbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbm9uU2VwYXJhdG9ySWNvbnNGb2xsb3cpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgaWNvbiBhbmQgYXBwZW5kIHRvIHRoZSB0b29sYmFyXG4gICAgICAgIChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIGVsO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIGVsID0gY3JlYXRlU2VwKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsID0gY3JlYXRlVG9vbGJhckJ1dHRvbihpdGVtLCBzZWxmLm9wdGlvbnMudG9vbGJhclRpcHMsIHNlbGYub3B0aW9ucy5zaG9ydGN1dHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIGV2ZW50cywgc3BlY2lhbCBmb3IgaW5mb1xuICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWN0aW9uKHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0uYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGl0ZW0uYWN0aW9uLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b29sYmFyRGF0YVtpdGVtLm5hbWUgfHwgaXRlbV0gPSBlbDtcbiAgICAgICAgICAgIGJhci5hcHBlbmRDaGlsZChlbCk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5wdXQgZWxlbWVudCAoaWUuIDxpbnB1dCB0eXBlPSdmaWxlJz4pLCB1c2VkIGFtb25nXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSAnaW1wb3J0LWltYWdlJyBpY29uIHRvIG9wZW4gdGhlIGJyb3dzZS1maWxlIHdpbmRvdy5cbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT09ICd1cGxvYWQtaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgIGltYWdlSW5wdXQuY2xhc3NOYW1lID0gJ2ltYWdlSW5wdXQnO1xuICAgICAgICAgICAgICAgIGltYWdlSW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICAgICAgICAgICAgICBpbWFnZUlucHV0Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpbWFnZUlucHV0Lm5hbWUgPSAnaW1hZ2UnO1xuICAgICAgICAgICAgICAgIGltYWdlSW5wdXQuYWNjZXB0ID0gc2VsZi5vcHRpb25zLmltYWdlQWNjZXB0O1xuICAgICAgICAgICAgICAgIGltYWdlSW5wdXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICBpbWFnZUlucHV0LnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgICAgIGJhci5hcHBlbmRDaGlsZChpbWFnZUlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoaXRlbXNbaV0pO1xuICAgIH1cblxuICAgIHNlbGYudG9vbGJhckVsZW1lbnRzID0gdG9vbGJhckRhdGE7XG5cbiAgICB2YXIgY20gPSB0aGlzLmNvZGVtaXJyb3I7XG4gICAgY20ub24oJ2N1cnNvckFjdGl2aXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdCA9IGdldFN0YXRlKGNtKTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdG9vbGJhckRhdGEpIHtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdG9vbGJhckRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdFtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSArPSAnIGFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gJ2Z1bGxzY3JlZW4nICYmIGtleSAhPSAnc2lkZS1ieS1zaWRlJykge1xuICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUucmVwbGFjZSgvXFxzKmFjdGl2ZVxccyovZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKGtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBjbVdyYXBwZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgIGNtV3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiYXIsIGNtV3JhcHBlcik7XG4gICAgcmV0dXJuIGJhcjtcbn07XG5cbkVhc3lNREUucHJvdG90eXBlLmNyZWF0ZVN0YXR1c2JhciA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAvLyBJbml0aWFsaXplXG4gICAgc3RhdHVzID0gc3RhdHVzIHx8IHRoaXMub3B0aW9ucy5zdGF0dXM7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0dXMgdmFyaWFibGUgaXMgdmFsaWRcbiAgICBpZiAoIXN0YXR1cyB8fCBzdGF0dXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgdGhlIGJ1aWx0LWluIGl0ZW1zXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGksIG9uVXBkYXRlLCBkZWZhdWx0VmFsdWU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdHVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIFJlc2V0IHNvbWUgdmFsdWVzXG4gICAgICAgIG9uVXBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG5cblxuICAgICAgICAvLyBIYW5kbGUgaWYgY3VzdG9tIG9yIG5vdFxuICAgICAgICBpZiAodHlwZW9mIHN0YXR1c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3RhdHVzW2ldLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHN0YXR1c1tpXS5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgb25VcGRhdGU6IHN0YXR1c1tpXS5vblVwZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBzdGF0dXNbaV07XG5cbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnd29yZHMnKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IHdvcmRDb3VudChjbS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IHdvcmRDb3VudChjbS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbGluZXMnKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IGNtLmxpbmVDb3VudCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb25VcGRhdGUgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gY20ubGluZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2N1cnNvcicpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gJzA6MCc7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvblVwZGF0ZSA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gY20uZ2V0Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IHBvcy5saW5lICsgJzonICsgcG9zLmNoO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdhdXRvc2F2ZScpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXV0b3NhdmUgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYXV0b3NhdmUuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdpZCcsICdhdXRvc2F2ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd1cGxvYWQtaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IG9wdGlvbnMuaW1hZ2VUZXh0cy5zYkluaXQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgIG9uVXBkYXRlOiBvblVwZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBDcmVhdGUgZWxlbWVudCBmb3IgdGhlIHN0YXR1cyBiYXJcbiAgICB2YXIgYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYmFyLmNsYXNzTmFtZSA9ICdlZGl0b3Itc3RhdHVzYmFyJztcblxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHNwYW4gZm9yIGVhY2ggaXRlbVxuICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBTdG9yZSBpbiB0ZW1wb3JhcnkgdmFyaWFibGVcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcblxuXG4gICAgICAgIC8vIENyZWF0ZSBzcGFuIGVsZW1lbnRcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBpdGVtLmNsYXNzTmFtZTtcblxuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgZGVmYXVsdFZhbHVlIGlzIGEgZnVuY3Rpb25cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaXRlbS5kZWZhdWx0VmFsdWUoZWwpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBFbnN1cmUgdGhlIG9uVXBkYXRlIGlzIGEgZnVuY3Rpb25cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtLm9uVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9zdXJlIGFyb3VuZCB0aGUgc3BhbiBvZiB0aGUgY3VycmVudCBhY3Rpb24sIHRoZW4gZXhlY3V0ZSB0aGUgb25VcGRhdGUgaGFuZGxlclxuICAgICAgICAgICAgdGhpcy5jb2RlbWlycm9yLm9uKCd1cGRhdGUnLCAoZnVuY3Rpb24gKGVsLCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vblVwZGF0ZShlbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oZWwsIGl0ZW0pKSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgaXRlbSB0byB0aGUgc3RhdHVzIGJhclxuICAgICAgICBiYXIuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cblxuXG4gICAgLy8gSW5zZXJ0IHRoZSBzdGF0dXMgYmFyIGludG8gdGhlIERPTVxuICAgIHZhciBjbVdyYXBwZXIgPSB0aGlzLmNvZGVtaXJyb3IuZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICBjbVdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmFyLCBjbVdyYXBwZXIubmV4dFNpYmxpbmcpO1xuICAgIHJldHVybiBiYXI7XG59O1xuXG4vKipcbiAqIEdldCBvciBzZXQgdGhlIHRleHQgY29udGVudC5cbiAqL1xuRWFzeU1ERS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY20uZ2V0VmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjbS5nZXREb2MoKS5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICBpZiAodGhpcy5pc1ByZXZpZXdBY3RpdmUoKSkge1xuICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgICAgICAgdmFyIHByZXZpZXcgPSB3cmFwcGVyLmxhc3RDaGlsZDtcbiAgICAgICAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnByZXZpZXdSZW5kZXIodmFsLCBwcmV2aWV3KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuXG5cbi8qKlxuICogQmluZCBzdGF0aWMgbWV0aG9kcyBmb3IgZXhwb3J0cy5cbiAqL1xuRWFzeU1ERS50b2dnbGVCb2xkID0gdG9nZ2xlQm9sZDtcbkVhc3lNREUudG9nZ2xlSXRhbGljID0gdG9nZ2xlSXRhbGljO1xuRWFzeU1ERS50b2dnbGVTdHJpa2V0aHJvdWdoID0gdG9nZ2xlU3RyaWtldGhyb3VnaDtcbkVhc3lNREUudG9nZ2xlQmxvY2txdW90ZSA9IHRvZ2dsZUJsb2NrcXVvdGU7XG5FYXN5TURFLnRvZ2dsZUhlYWRpbmdTbWFsbGVyID0gdG9nZ2xlSGVhZGluZ1NtYWxsZXI7XG5FYXN5TURFLnRvZ2dsZUhlYWRpbmdCaWdnZXIgPSB0b2dnbGVIZWFkaW5nQmlnZ2VyO1xuRWFzeU1ERS50b2dnbGVIZWFkaW5nMSA9IHRvZ2dsZUhlYWRpbmcxO1xuRWFzeU1ERS50b2dnbGVIZWFkaW5nMiA9IHRvZ2dsZUhlYWRpbmcyO1xuRWFzeU1ERS50b2dnbGVIZWFkaW5nMyA9IHRvZ2dsZUhlYWRpbmczO1xuRWFzeU1ERS50b2dnbGVDb2RlQmxvY2sgPSB0b2dnbGVDb2RlQmxvY2s7XG5FYXN5TURFLnRvZ2dsZVVub3JkZXJlZExpc3QgPSB0b2dnbGVVbm9yZGVyZWRMaXN0O1xuRWFzeU1ERS50b2dnbGVPcmRlcmVkTGlzdCA9IHRvZ2dsZU9yZGVyZWRMaXN0O1xuRWFzeU1ERS5jbGVhbkJsb2NrID0gY2xlYW5CbG9jaztcbkVhc3lNREUuZHJhd0xpbmsgPSBkcmF3TGluaztcbkVhc3lNREUuZHJhd0ltYWdlID0gZHJhd0ltYWdlO1xuRWFzeU1ERS5kcmF3VGFibGUgPSBkcmF3VGFibGU7XG5FYXN5TURFLmRyYXdIb3Jpem9udGFsUnVsZSA9IGRyYXdIb3Jpem9udGFsUnVsZTtcbkVhc3lNREUudW5kbyA9IHVuZG87XG5FYXN5TURFLnJlZG8gPSByZWRvO1xuRWFzeU1ERS50b2dnbGVQcmV2aWV3ID0gdG9nZ2xlUHJldmlldztcbkVhc3lNREUudG9nZ2xlU2lkZUJ5U2lkZSA9IHRvZ2dsZVNpZGVCeVNpZGU7XG5FYXN5TURFLnRvZ2dsZUZ1bGxTY3JlZW4gPSB0b2dnbGVGdWxsU2NyZWVuO1xuXG4vKipcbiAqIEJpbmQgaW5zdGFuY2UgbWV0aG9kcyBmb3IgZXhwb3J0cy5cbiAqL1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlQm9sZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b2dnbGVCb2xkKHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLnRvZ2dsZUl0YWxpYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b2dnbGVJdGFsaWModGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlU3RyaWtldGhyb3VnaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b2dnbGVTdHJpa2V0aHJvdWdoKHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLnRvZ2dsZUJsb2NrcXVvdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlQmxvY2txdW90ZSh0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS50b2dnbGVIZWFkaW5nU21hbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b2dnbGVIZWFkaW5nU21hbGxlcih0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS50b2dnbGVIZWFkaW5nQmlnZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgIHRvZ2dsZUhlYWRpbmdCaWdnZXIodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlSGVhZGluZzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlSGVhZGluZzEodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlSGVhZGluZzIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlSGVhZGluZzIodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlSGVhZGluZzMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlSGVhZGluZzModGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlQ29kZUJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIHRvZ2dsZUNvZGVCbG9jayh0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS50b2dnbGVVbm9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRvZ2dsZVVub3JkZXJlZExpc3QodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlT3JkZXJlZExpc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlT3JkZXJlZExpc3QodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUuY2xlYW5CbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhbkJsb2NrKHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLmRyYXdMaW5rID0gZnVuY3Rpb24gKCkge1xuICAgIGRyYXdMaW5rKHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLmRyYXdJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBkcmF3SW1hZ2UodGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUuZHJhd1RhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIGRyYXdUYWJsZSh0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS5kcmF3SG9yaXpvbnRhbFJ1bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgZHJhd0hvcml6b250YWxSdWxlKHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbiAoKSB7XG4gICAgdW5kbyh0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKCkge1xuICAgIHJlZG8odGhpcyk7XG59O1xuRWFzeU1ERS5wcm90b3R5cGUudG9nZ2xlUHJldmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b2dnbGVQcmV2aWV3KHRoaXMpO1xufTtcbkVhc3lNREUucHJvdG90eXBlLnRvZ2dsZVNpZGVCeVNpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdG9nZ2xlU2lkZUJ5U2lkZSh0aGlzKTtcbn07XG5FYXN5TURFLnByb3RvdHlwZS50b2dnbGVGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRvZ2dsZUZ1bGxTY3JlZW4odGhpcyk7XG59O1xuXG5FYXN5TURFLnByb3RvdHlwZS5pc1ByZXZpZXdBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuICAgIHZhciB3cmFwcGVyID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICB2YXIgcHJldmlldyA9IHdyYXBwZXIubGFzdENoaWxkO1xuXG4gICAgcmV0dXJuIC9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QocHJldmlldy5jbGFzc05hbWUpO1xufTtcblxuRWFzeU1ERS5wcm90b3R5cGUuaXNTaWRlQnlTaWRlQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjbSA9IHRoaXMuY29kZW1pcnJvcjtcbiAgICB2YXIgd3JhcHBlciA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgdmFyIHByZXZpZXcgPSB3cmFwcGVyLm5leHRTaWJsaW5nO1xuXG4gICAgcmV0dXJuIC9lZGl0b3ItcHJldmlldy1hY3RpdmUtc2lkZS8udGVzdChwcmV2aWV3LmNsYXNzTmFtZSk7XG59O1xuXG5FYXN5TURFLnByb3RvdHlwZS5pc0Z1bGxzY3JlZW5BY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuXG4gICAgcmV0dXJuIGNtLmdldE9wdGlvbignZnVsbFNjcmVlbicpO1xufTtcblxuRWFzeU1ERS5wcm90b3R5cGUuZ2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuXG4gICAgcmV0dXJuIGdldFN0YXRlKGNtKTtcbn07XG5cbkVhc3lNREUucHJvdG90eXBlLnRvVGV4dEFyZWEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jb2RlbWlycm9yO1xuICAgIHZhciB3cmFwcGVyID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKTtcblxuICAgIGlmICh3cmFwcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3VpLnRvb2xiYXIpIHtcbiAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmd1aS50b29sYmFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ndWkuc3RhdHVzYmFyKSB7XG4gICAgICAgICAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ndWkuc3RhdHVzYmFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ndWkuc2lkZUJ5U2lkZSkge1xuICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZ3VpLnNpZGVCeVNpZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY20udG9UZXh0QXJlYSgpO1xuXG4gICAgaWYgKHRoaXMuYXV0b3NhdmVUaW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYXV0b3NhdmVUaW1lb3V0SWQpO1xuICAgICAgICB0aGlzLmF1dG9zYXZlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNsZWFyQXV0b3NhdmVkVmFsdWUoKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVhc3lNREU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUxBO0FBUUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBO0FBQ0E7QUFDQTtBQTRCQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBUUE7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFYQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFyQkE7QUFDQTtBQUNBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFqQ0E7QUFDQTtBQUNBO0FBb0NBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQVBBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBRkE7QUFIQTtBQU9BO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBWkE7QUFpQkE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQXJFQTtBQXVFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFYQTtBQWdCQTtBQUNBO0FBckhBO0FBdUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxDQTtBQXFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXREQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQU9BO0FBeERBO0FBQ0E7QUFDQTtBQTBEQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBakJBO0FBbUJBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBckRBO0FBMERBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBRUE7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFYQTtBQUNBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBakJBO0FBc0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7QUFrQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFPQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBbkxBO0FBNExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUxBO0FBUUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUJBO0FBQ0E7QUFDQTtBQWlDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUF4Q0E7QUFDQTtBQUNBO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdEQTtBQUNBO0FBQ0E7QUErREE7QUFDQTtBQWxFQTtBQUNBO0FBQ0E7QUFvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0VBO0FBQ0E7QUFDQTtBQThFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBakZBO0FBQ0E7QUFDQTtBQXVGQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBS0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQWhIQTtBQUNBO0FBQ0E7QUFrSEE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBWUE7Ozs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBVEE7QUFZQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFXQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQTFCQTtBQUNBO0FBQ0E7QUE0QkE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUF4Q0E7QUEyQ0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTkE7QUFEQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBTkE7QUFVQTtBQUNBO0FBQ0E7QUE1REE7QUFDQTtBQUNBO0FBOERBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQW5IQTtBQUNBO0FBQ0E7QUF1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFQQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUE3REE7QUFpRUE7QUFDQTtBQW5FQTtBQUNBO0FBcUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFWQTtBQWFBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQWdCQTs7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFzQkE7QUFDQTtBQUVBO0FBSEE7QUFDQTtBQUtBO0FBaEZBO0FBb0ZBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQTNCQTtBQUNBO0FBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckNBO0FBQ0E7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFVQTtBQXBEQTtBQUNBO0FBc0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQUNBO0FBMkJBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRDQTtBQXdDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBUUE7QUFaQTtBQWVBO0FBQ0E7QUFDQTtBQWhIQTtBQUNBO0FBa0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFSQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUpBO0FBUUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFKQTtBQVFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQU9BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUF0RUE7QUFDQTtBQUNBO0FBeUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQVpBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBbkJBO0FBQ0E7QUFDQTtBQTBCQTtBQTVHQTtBQUNBO0FBQ0E7QUErR0E7QUFDQTtBQUNBO0FBbkhBO0FBc0hBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBWkE7QUFnQkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUFDQTtBQXdCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/easymde/src/js/easymde.js\n"); - -/***/ }), - -/***/ "../node_modules/electron-is-dev/index.js": -/*!************************************************!*\ - !*** ../node_modules/electron-is-dev/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nvar getFromEnv = parseInt(process.env.ELECTRON_IS_DEV, 10) === 1;\nvar isEnvSet = 'ELECTRON_IS_DEV' in process.env;\nmodule.exports = isEnvSet ? getFromEnv : process.defaultApp || /node_modules[\\\\/]electron[\\\\/]/.test(process.execPath);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2VsZWN0cm9uLWlzLWRldi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZWxlY3Ryb24taXMtZGV2L2luZGV4LmpzPzk1M2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZ2V0RnJvbUVudiA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkVMRUNUUk9OX0lTX0RFViwgMTApID09PSAxO1xuY29uc3QgaXNFbnZTZXQgPSAnRUxFQ1RST05fSVNfREVWJyBpbiBwcm9jZXNzLmVudjtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0VudlNldCA/IGdldEZyb21FbnYgOiAocHJvY2Vzcy5kZWZhdWx0QXBwIHx8IC9ub2RlX21vZHVsZXNbXFxcXC9dZWxlY3Ryb25bXFxcXC9dLy50ZXN0KHByb2Nlc3MuZXhlY1BhdGgpKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/electron-is-dev/index.js\n"); - -/***/ }), - -/***/ "../node_modules/events/events.js": -/*!****************************************!*\ - !*** ../node_modules/events/events.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar R = (typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n};\nvar ReflectOwnKeys;\n\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\nmodule.exports = EventEmitter; // Backwards-compat with node 0.10.x\n\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\n\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function get() {\n return defaultMaxListeners;\n },\n set: function set(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function () {\n if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}; // Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\n\n\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n\n for (var i = 1; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var doError = type === 'error';\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.\n\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n } // At least give some kind of context to the user\n\n\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n if (handler === undefined) return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n\n for (var i = 0; i < len; ++i) {\n ReflectApply(listeners[i], this, args);\n }\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n checkListener(listener);\n events = target._events;\n\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n\n events = target._events;\n }\n\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n } // Check for listener leak\n\n\n m = _getMaxListeners(target);\n\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true; // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n\n var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n}; // Emits a 'removeListener' event if and only if the listener was removed.\n\n\nEventEmitter.prototype.removeListener = function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n checkListener(listener);\n events = this._events;\n if (events === undefined) return this;\n list = events[type];\n if (list === undefined) return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else {\n delete events[type];\n if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0) return this;\n if (position === 0) list.shift();else {\n spliceOne(list, position);\n }\n if (list.length === 1) events[type] = list[0];\n if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n events = this._events;\n if (events === undefined) return this; // not listening for removeListener, no need to emit\n\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n }\n\n return this;\n } // emit removeListener for all listeners on all events\n\n\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n if (events === undefined) return [];\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\n\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n copy[i] = arr[i];\n }\n\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) {\n list[index] = list[index + 1];\n }\n\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n\n return ret;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanM/ODQxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUdBO0FBSEE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBREE7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQUNBO0FBWUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQXpDQTtBQUNBO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQURBO0FBR0E7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQWpEQTtBQUNBO0FBbURBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBSUE7QUFDQTtBQUFBO0FBbEJBO0FBQ0E7QUFDQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhEQTtBQUNBO0FBa0RBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/events/events.js\n"); - -/***/ }), - -/***/ "../node_modules/exenv/index.js": -/*!**************************************!*\ - !*** ../node_modules/exenv/index.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n\n/* global define */\n\n\n(function () {\n 'use strict';\n\n var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n var ExecutionEnvironment = {\n canUseDOM: canUseDOM,\n canUseWorkers: typeof Worker !== 'undefined',\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n canUseViewport: canUseDOM && !!window.screen\n };\n\n if ( true && _typeof(__webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) === 'object' && __webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return ExecutionEnvironment;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ( true && module.exports) {\n module.exports = ExecutionEnvironment;\n } else {\n window.ExecutionEnvironment = ExecutionEnvironment;\n }\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2V4ZW52L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9leGVudi9pbmRleC5qcz8yYmZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTUgSmVkIFdhdHNvbi5cbiAgQmFzZWQgb24gY29kZSB0aGF0IGlzIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGNhblVzZURPTSA9ICEhKFxuXHRcdHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG5cdFx0d2luZG93LmRvY3VtZW50ICYmXG5cdFx0d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcblx0KTtcblxuXHR2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSB7XG5cblx0XHRjYW5Vc2VET006IGNhblVzZURPTSxcblxuXHRcdGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLFxuXG5cdFx0Y2FuVXNlRXZlbnRMaXN0ZW5lcnM6XG5cdFx0XHRjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgd2luZG93LmF0dGFjaEV2ZW50KSxcblxuXHRcdGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2NyZWVuXG5cblx0fTtcblxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gRXhlY3V0aW9uRW52aXJvbm1lbnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IEV4ZWN1dGlvbkVudmlyb25tZW50O1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5FeGVjdXRpb25FbnZpcm9ubWVudCA9IEV4ZWN1dGlvbkVudmlyb25tZW50O1xuXHR9XG5cbn0oKSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFUQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQURBO0FBS0E7QUFEQTtBQUdBO0FBQ0E7QUE5QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/exenv/index.js\n"); - -/***/ }), - -/***/ "../node_modules/extend/index.js": -/*!***************************************!*\ - !*** ../node_modules/extend/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n if (typeof Array.isArray === 'function') {\n return Array.isArray(arr);\n }\n\n return toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n if (!obj || toStr.call(obj) !== '[object Object]') {\n return false;\n }\n\n var hasOwnConstructor = hasOwn.call(obj, 'constructor');\n var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); // Not own constructor property must be Object\n\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n return false;\n } // Own properties are enumerated firstly, so to speed up,\n // if last one is own, then all properties are own.\n\n\n var key;\n\n for (key in obj) {\n /**/\n }\n\n return typeof key === 'undefined' || hasOwn.call(obj, key);\n}; // If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\n\n\nvar setProperty = function setProperty(target, options) {\n if (defineProperty && options.name === '__proto__') {\n defineProperty(target, options.name, {\n enumerable: true,\n configurable: true,\n value: options.newValue,\n writable: true\n });\n } else {\n target[options.name] = options.newValue;\n }\n}; // Return undefined instead of __proto__ if '__proto__' is not an own property\n\n\nvar getProperty = function getProperty(obj, name) {\n if (name === '__proto__') {\n if (!hasOwn.call(obj, name)) {\n return void 0;\n } else if (gOPD) {\n // In early versions of node, obj['__proto__'] is buggy when obj has\n // __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n return gOPD(obj, name).value;\n }\n }\n\n return obj[name];\n};\n\nmodule.exports = function extend() {\n var options, name, src, copy, copyIsArray, clone;\n var target = arguments[0];\n var i = 1;\n var length = arguments.length;\n var deep = false; // Handle a deep copy situation\n\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[1] || {}; // skip the boolean and the target\n\n i = 2;\n }\n\n if (target == null || _typeof(target) !== 'object' && typeof target !== 'function') {\n target = {};\n }\n\n for (; i < length; ++i) {\n options = arguments[i]; // Only deal with non-null/undefined values\n\n if (options != null) {\n // Extend the base object\n for (name in options) {\n src = getProperty(target, name);\n copy = getProperty(options, name); // Prevent never-ending loop\n\n if (target !== copy) {\n // Recurse if we're merging plain objects or arrays\n if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && isArray(src) ? src : [];\n } else {\n clone = src && isPlainObject(src) ? src : {};\n } // Never move original objects, clone them\n\n\n setProperty(target, {\n name: name,\n newValue: extend(deep, clone, copy)\n }); // Don't bring in undefined values\n } else if (typeof copy !== 'undefined') {\n setProperty(target, {\n name: name,\n newValue: copy\n });\n }\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2V4dGVuZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzP2IxNmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcblx0aWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTtcblx0fVxuXG5cdHJldHVybiB0b1N0ci5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG5cdGlmICghb2JqIHx8IHRvU3RyLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICdjb25zdHJ1Y3RvcicpO1xuXHR2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdpc1Byb3RvdHlwZU9mJyk7XG5cdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iaikgeyAvKiovIH1cblxuXHRyZXR1cm4gdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufTtcblxuLy8gSWYgbmFtZSBpcyAnX19wcm90b19fJywgYW5kIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpcyBhdmFpbGFibGUsIGRlZmluZSBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5IG9uIHRhcmdldFxudmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkodGFyZ2V0LCBvcHRpb25zKSB7XG5cdGlmIChkZWZpbmVQcm9wZXJ0eSAmJiBvcHRpb25zLm5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBvcHRpb25zLm5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogb3B0aW9ucy5uZXdWYWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0W29wdGlvbnMubmFtZV0gPSBvcHRpb25zLm5ld1ZhbHVlO1xuXHR9XG59O1xuXG4vLyBSZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgX19wcm90b19fIGlmICdfX3Byb3RvX18nIGlzIG5vdCBhbiBvd24gcHJvcGVydHlcbnZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5KG9iaiwgbmFtZSkge1xuXHRpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRpZiAoIWhhc093bi5jYWxsKG9iaiwgbmFtZSkpIHtcblx0XHRcdHJldHVybiB2b2lkIDA7XG5cdFx0fSBlbHNlIGlmIChnT1BEKSB7XG5cdFx0XHQvLyBJbiBlYXJseSB2ZXJzaW9ucyBvZiBub2RlLCBvYmpbJ19fcHJvdG9fXyddIGlzIGJ1Z2d5IHdoZW4gb2JqIGhhc1xuXHRcdFx0Ly8gX19wcm90b19fIGFzIGFuIG93biBwcm9wZXJ0eS4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHdvcmtzLlxuXHRcdFx0cmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb2JqW25hbWVdO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQoKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTtcblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblx0dmFyIGkgPSAxO1xuXHR2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0dmFyIGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcblx0XHQvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0aSA9IDI7XG5cdH1cblx0aWYgKHRhcmdldCA9PSBudWxsIHx8ICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbaV07XG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmIChvcHRpb25zICE9IG51bGwpIHtcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7XG5cdFx0XHRcdGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICh0YXJnZXQgIT09IGNvcHkpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkoY29weSkpKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XG5cdFx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdFx0c2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWU6IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQoZGVlcCwgY2xvbmUsIGNvcHkpIH0pO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBYUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFEQTtBQVFBO0FBQ0E7QUFWQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUxBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBVEE7QUFhQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBO0FBQ0E7QUFDQTtBQWlEQTtBQW5EQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/extend/index.js\n"); - -/***/ }), - -/***/ "../node_modules/formik/dist/formik.es6.js": -/*!*************************************************!*\ - !*** ../node_modules/formik/dist/formik.es6.js ***! - \*************************************************/ -/*! exports provided: Formik, yupToFormErrors, validateYupSchema, touchAllFields, Field, Form, withFormik */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Formik\", function() { return Formik; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"yupToFormErrors\", function() { return yupToFormErrors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"validateYupSchema\", function() { return validateYupSchema; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"touchAllFields\", function() { return touchAllFields; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Field\", function() { return Field; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return Form; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withFormik\", function() { return withFormik$$1; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\nvar extendStatics = Object.setPrototypeOf || {\n __proto__: []\n} instanceof Array && function (d, b) {\n d.__proto__ = b;\n} || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n};\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\n\n\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\n\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nvar emptyFunction_1 = emptyFunction;\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (undefined !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n\nvar invariant_1 = invariant;\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction_1;\n\nif (undefined !== 'production') {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar warning_1 = warning;\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\nvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\nif (undefined !== 'production') {\n var invariant$1 = invariant_1;\n var warning$1 = warning_1;\n var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n var loggedTypeFailures = {};\n}\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\n\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (undefined !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', location, typeSpecName);\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n } catch (ex) {\n error = ex;\n }\n\n warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, _typeof(error));\n\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n var stack = getStack ? getStack() : '';\n warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n }\n }\n }\n }\n}\n\nvar checkPropTypes_1 = checkPropTypes;\n\nvar factoryWithTypeCheckers = function factoryWithTypeCheckers(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n\n var ANONYMOUS = '<<anonymous>>'; // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n };\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n\n /*eslint-disable no-self-compare*/\n\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n\n\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n } // Make `instanceof Error` still work for returned errors.\n\n\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (undefined !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret_1) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n invariant_1(false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n } else if (undefined !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n\n if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3) {\n warning_1(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName);\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction_1.thatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n\n var propValue = props[propName];\n\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n\n if (error instanceof Error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n undefined !== 'production' ? warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n return emptyFunction_1.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\n if (error instanceof Error) {\n return error;\n }\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n undefined !== 'production' ? warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunction_1.thatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (typeof checker !== 'function') {\n warning_1(false, 'Invalid argument supplid to oneOfType. Expected an array of check functions, but ' + 'received %s at index %s.', getPostfixForTypeWarning(checker), i);\n return emptyFunction_1.thatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n continue;\n }\n\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\n if (error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (_typeof(propValue)) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n\n case 'boolean':\n return !propValue;\n\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\n\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n } // Fallback for non-spec compliant Symbols which are polyfilled.\n\n\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n } // Equivalent of `typeof` but with special handling for array and regexp.\n\n\n function getPropType(propValue) {\n var propType = _typeof(propValue);\n\n if (Array.isArray(propValue)) {\n return 'array';\n }\n\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n\n return propType;\n } // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n\n\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n\n var propType = getPropType(propValue);\n\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n\n return propType;\n } // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n\n\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n\n default:\n return type;\n }\n } // Returns class name of the object, if any.\n\n\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes_1;\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};\n\nvar factoryWithThrowingShims = function factoryWithThrowingShims() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret_1) {\n // It is still safe when called from React.\n return;\n }\n\n invariant_1(false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n }\n\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n } // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim\n };\n ReactPropTypes.checkPropTypes = emptyFunction_1;\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};\n\nvar index = createCommonjsModule(function (module) {\n /**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n if (undefined !== 'production') {\n var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol[\"for\"] && Symbol[\"for\"]('react.element') || 0xeac7;\n\n var isValidElement = function isValidElement(object) {\n return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }; // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n\n\n var throwOnDirectAccess = true;\n module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess);\n } else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = factoryWithThrowingShims();\n }\n});\nvar index_1 = index.object;\nvar index_2 = index.oneOfType;\nvar index_3 = index.string;\nvar index_4 = index.node;\nvar index_5 = index.func;\nvar index_6 = index.bool;\nvar index$2 = createCommonjsModule(function (module, exports) {\n /**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n /** Used to stand-in for `undefined` hash values. */\n\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n /** Used to compose bitmasks for value comparisons. */\n\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n /** Used as references for various `Number` constants. */\n\n var MAX_SAFE_INTEGER = 9007199254740991;\n /** `Object#toString` result references. */\n\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n /** Used to detect host constructors (Safari). */\n\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n /** Used to detect unsigned integer values. */\n\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n /** Used to identify `toStringTag` values of typed arrays. */\n\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n /** Detect free variable `global` from Node.js. */\n\n var freeGlobal = _typeof(commonjsGlobal) == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n /** Detect free variable `self`. */\n\n var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n /** Used as a reference to the global object. */\n\n var root = freeGlobal || freeSelf || Function('return this')();\n /** Detect free variable `exports`. */\n\n var freeExports = true && exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */\n\n var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */\n\n var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Detect free variable `process` from Node.js. */\n\n var freeProcess = moduleExports && freeGlobal.process;\n /** Used to access faster Node.js helpers. */\n\n var nodeUtil = function () {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }();\n /* Node.js helper references. */\n\n\n var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n }\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n\n\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n }\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n\n\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n\n\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n }\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n\n\n function baseUnary(func) {\n return function (value) {\n return func(value);\n };\n }\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\n\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n\n\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n\n\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n\n\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n }\n /** Used for built-in method references. */\n\n\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n /** Used to detect overreaching core-js shims. */\n\n var coreJsData = root['__core-js_shared__'];\n /** Used to resolve the decompiled source of functions. */\n\n var funcToString = funcProto.toString;\n /** Used to check objects for own properties. */\n\n var hasOwnProperty = objectProto.hasOwnProperty;\n /** Used to detect methods masquerading as native. */\n\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\n\n var nativeObjectToString = objectProto.toString;\n /** Used to detect if a method is native. */\n\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n /** Built-in value references. */\n\n var Buffer = moduleExports ? root.Buffer : undefined,\n _Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n /* Built-in method references for those with the same name as other `lodash` methods. */\n\n var nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n /* Built-in method references that are verified to be native. */\n\n var DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n /** Used to detect maps, sets, and weakmaps. */\n\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n /** Used to convert symbols to primitives and strings. */\n\n var symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\n\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n } // Add methods to `Hash`.\n\n\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\n\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n }\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n }\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n } // Add methods to `ListCache`.\n\n\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n }\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n } // Add methods to `MapCache`.\n\n\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n }\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\n\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n }\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n\n\n function setCacheHas(value) {\n return this.__data__.has(value);\n } // Add methods to `SetCache`.\n\n\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\n function stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n }\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function stackGet(key) {\n return this.__data__.get(key);\n }\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function stackHas(key) {\n return this.__data__.has(key);\n }\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\n\n function stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n } // Add methods to `Stack`.\n\n\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n }\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n }\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\n\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\n\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\n\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\n\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\n\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(array);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n }\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\n\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n }\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\n\n var getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n }\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\n\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\n\n function isKeyable(value) {\n var type = _typeof(value);\n\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n }\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\n\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n }\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\n\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\n\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n }\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\n\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\n\n var isArguments = baseIsArguments(function () {\n return arguments;\n }()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n };\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\n var isArray = Array.isArray;\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\n\n var isBuffer = nativeIsBuffer || stubFalse;\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\n\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\n\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\n function isObject(value) {\n var type = _typeof(value);\n\n return value != null && (type == 'object' || type == 'function');\n }\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\n function isObjectLike(value) {\n return value != null && _typeof(value) == 'object';\n }\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\n\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n\n\n function stubArray() {\n return [];\n }\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n\n\n function stubFalse() {\n return false;\n }\n\n module.exports = isEqual;\n});\n\nfunction isPromise(value) {\n if (value !== null && _typeof(value) === 'object') {\n return value && typeof value.then === 'function';\n }\n\n return false;\n}\n\nvar isReactNative = typeof window !== 'undefined' && window.navigator && window.navigator.product && window.navigator.product === 'ReactNative';\n\nfunction values(obj) {\n var vals = [];\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n vals.push(obj[key]);\n }\n }\n\n return vals;\n}\n\nvar isFunction = function isFunction(obj) {\n return 'function' === typeof obj;\n};\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"Children\"].count(children) === 0;\n};\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\nvar __DEV__ = undefined !== 'production';\n\nvar warning$2 = function warning$2() {};\n\nif (__DEV__) {\n warning$2 = function warning$2(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.length < 10 || /^[s\\W]*$/.test(format)) {\n throw new Error('The warning format should be able to uniquely identify this ' + 'warning. Please, use a more descriptive format than: ' + format);\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n };\n}\n\nvar warning_1$2 = warning$2;\n\nvar Field = function (_super) {\n __extends(Field, _super);\n\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Field.prototype.componentWillMount = function () {\n var _a = this.props,\n render = _a.render,\n children = _a.children,\n component = _a.component;\n warning_1$2(!(component && render), 'You should not use <Field component> and <Field render> in the same <Field> component; <Field component> will be ignored');\n warning_1$2(!(component && children && isFunction(children)), 'You should not use <Field component> and <Field children> as a function in the same <Field> component; <Field component> will be ignored.');\n warning_1$2(!(render && children && !isEmptyChildren(children)), 'You should not use <Field render> and <Field children> in the same <Field> component; <Field children> will be ignored');\n };\n\n Field.prototype.render = function () {\n var _a = this.props,\n name = _a.name,\n render = _a.render,\n children = _a.children,\n _b = _a.component,\n component = _b === void 0 ? 'input' : _b,\n props = __rest(_a, [\"name\", \"render\", \"children\", \"component\"]);\n\n var formik = this.context.formik;\n var field = {\n value: props.type === 'radio' || props.type === 'checkbox' ? props.value : formik.values[name],\n name: name,\n onChange: formik.handleChange,\n onBlur: formik.handleBlur\n };\n var bag = {\n field: field,\n form: formik\n };\n\n if (render) {\n return render(bag);\n }\n\n if (isFunction(children)) {\n return children(bag);\n }\n\n if (typeof component === 'string') {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(component, __assign({}, field, props, {\n children: children\n }));\n }\n\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(component, __assign({}, bag, props, {\n children: children\n }));\n };\n\n Field.contextTypes = {\n formik: index_1\n };\n Field.propTypes = {\n name: index_3.isRequired,\n component: index_2([index_3, index_5]),\n render: index_5,\n children: index_2([index_5, index_4])\n };\n return Field;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\nvar Form = function Form(props, context) {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"form\", __assign({\n onSubmit: context.formik.handleSubmit\n }, props));\n};\n\nForm.contextTypes = {\n formik: index_1\n};\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n if (propIsEnumerable.call(sourceComponent, key) || typeof sourceComponent[key] === 'function') {\n try {\n targetComponent[key] = sourceComponent[key];\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nfunction withFormik$$1(_a) {\n var _b = _a.mapPropsToValues,\n mapPropsToValues = _b === void 0 ? function (vanillaProps) {\n var val = {};\n\n for (var k in vanillaProps) {\n if (vanillaProps.hasOwnProperty(k) && typeof vanillaProps[k] !== 'function') {\n val[k] = vanillaProps[k];\n }\n }\n\n return val;\n } : _b,\n config = __rest(_a, [\"mapPropsToValues\"]);\n\n return function createFormik(Component$$1) {\n var C = function (_super) {\n __extends(C, _super);\n\n function C() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.validate = function (values$$1) {\n return config.validate(values$$1, _this.props);\n };\n\n _this.validationSchema = function () {\n return isFunction(config.validationSchema) ? config.validationSchema(_this.props) : config.validationSchema;\n };\n\n _this.handleSubmit = function (values$$1, actions) {\n return config.handleSubmit(values$$1, __assign({}, actions, {\n props: _this.props\n }));\n };\n\n _this.renderFormComponent = function (formikProps) {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(Component$$1, __assign({}, _this.props, formikProps));\n };\n\n return _this;\n }\n\n C.prototype.render = function () {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(Formik, __assign({}, this.props, config, {\n validate: config.validate && this.validate,\n validationSchema: config.validationSchema && this.validationSchema,\n initialValues: mapPropsToValues(this.props),\n onSubmit: this.handleSubmit,\n render: this.renderFormComponent\n }));\n };\n\n return C;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n return hoistNonReactStatics(C, Component$$1);\n };\n}\n\nvar Formik = function (_super) {\n __extends(Formik, _super);\n\n function Formik(props) {\n var _this = _super.call(this, props) || this;\n\n _this.setErrors = function (errors) {\n _this.setState({\n errors: errors\n });\n };\n\n _this.setTouched = function (touched) {\n _this.setState({\n touched: touched\n }, function () {\n if (_this.props.validateOnBlur) {\n _this.runValidations(_this.state.values);\n }\n });\n };\n\n _this.setValues = function (values$$1) {\n _this.setState({\n values: values$$1\n }, function () {\n if (_this.props.validateOnChange) {\n _this.runValidations(values$$1);\n }\n });\n };\n\n _this.setStatus = function (status) {\n _this.setState({\n status: status\n });\n };\n\n _this.setError = function (error) {\n if (undefined !== 'production') {\n console.warn(\"Warning: Formik's setError(error) is deprecated and may be removed in future releases. Please use Formik's setStatus(status) instead. It works identically. For more info see https://github.com/jaredpalmer/formik#setstatus-status-any--void\");\n }\n\n _this.setState({\n error: error\n });\n };\n\n _this.setSubmitting = function (isSubmitting) {\n _this.setState({\n isSubmitting: isSubmitting\n });\n };\n\n _this.runValidationSchema = function (values$$1, onSuccess) {\n var validationSchema = _this.props.validationSchema;\n var schema = isFunction(validationSchema) ? validationSchema() : validationSchema;\n validateYupSchema(values$$1, schema).then(function () {\n _this.setState({\n errors: {}\n });\n\n if (onSuccess) {\n onSuccess();\n }\n }, function (err) {\n return _this.setState({\n errors: yupToFormErrors(err),\n isSubmitting: false\n });\n });\n };\n\n _this.runValidations = function (values$$1) {\n if (_this.props.validationSchema) {\n _this.runValidationSchema(values$$1);\n }\n\n if (_this.props.validate) {\n var maybePromisedErrors = _this.props.validate(values$$1);\n\n if (isPromise(maybePromisedErrors)) {\n maybePromisedErrors.then(function () {\n _this.setState({\n errors: {}\n });\n }, function (errors) {\n return _this.setState({\n errors: errors,\n isSubmitting: false\n });\n });\n } else {\n _this.setErrors(maybePromisedErrors);\n }\n }\n };\n\n _this.handleChange = function (e) {\n if (isReactNative) {\n if (undefined !== 'production') {\n console.error(\"Warning: Formik's handleChange does not work with React Native. Use setFieldValue and within a callback instead. For more info see https://github.com/jaredpalmer/formikhttps://github.com/jaredpalmer/formik#react-native\");\n }\n\n return;\n }\n\n e.persist();\n var _a = e.target,\n type = _a.type,\n name = _a.name,\n id = _a.id,\n value = _a.value,\n checked = _a.checked,\n outerHTML = _a.outerHTML;\n var field = name ? name : id;\n var val = /number|range/.test(type) ? parseFloat(value) : /checkbox/.test(type) ? checked : value;\n\n if (!field && undefined !== 'production') {\n warnAboutMissingIdentifier({\n htmlContent: outerHTML,\n documentationAnchorLink: 'handlechange-e-reactchangeeventany--void',\n handlerName: 'handleChange'\n });\n }\n\n _this.setState(function (prevState) {\n return __assign({}, prevState, {\n values: __assign({}, prevState.values, (_a = {}, _a[field] = val, _a))\n });\n\n var _a;\n });\n\n if (_this.props.validateOnChange) {\n _this.runValidations(__assign({}, _this.state.values, (_b = {}, _b[field] = val, _b)));\n }\n\n var _b;\n };\n\n _this.handleChangeValue = function (field, value) {\n if (undefined !== 'production') {\n console.warn(\"Warning: Formik's handleChangeValue is deprecated and may be removed in future releases. Use Formik's setFieldValue(field, value) and setFieldTouched(field, isTouched) instead. React will merge the updates under the hood and avoid a double render. For more info see https://github.com/jaredpalmer/formik#setfieldvalue-field-string-value-any--void\");\n }\n\n _this.setState(function (prevState) {\n return __assign({}, prevState, {\n values: __assign({}, prevState.values, (_a = {}, _a[field] = value, _a)),\n touched: __assign({}, prevState.touched, (_b = {}, _b[field] = true, _b))\n });\n\n var _a, _b;\n });\n\n _this.runValidationSchema(__assign({}, _this.state.values, (_a = {}, _a[field] = value, _a)));\n\n var _a;\n };\n\n _this.setFieldValue = function (field, value) {\n _this.setState(function (prevState) {\n return __assign({}, prevState, {\n values: __assign({}, prevState.values, (_a = {}, _a[field] = value, _a))\n });\n\n var _a;\n }, function () {\n if (_this.props.validateOnChange) {\n _this.runValidations(__assign({}, _this.state.values, (_a = {}, _a[field] = value, _a)));\n }\n\n var _a;\n });\n };\n\n _this.handleSubmit = function (e) {\n e.preventDefault();\n\n _this.submitForm();\n };\n\n _this.submitForm = function () {\n _this.setState({\n touched: touchAllFields(_this.state.values),\n isSubmitting: true\n });\n\n if (_this.props.validate) {\n var maybePromisedErrors = _this.props.validate(_this.state.values) || {};\n\n if (isPromise(maybePromisedErrors)) {\n maybePromisedErrors.then(function () {\n _this.setState({\n errors: {}\n });\n\n _this.executeSubmit();\n }, function (errors) {\n return _this.setState({\n errors: errors,\n isSubmitting: false\n });\n });\n return;\n } else {\n var isValid = Object.keys(maybePromisedErrors).length === 0;\n\n _this.setState({\n errors: maybePromisedErrors,\n isSubmitting: isValid\n });\n\n if (isValid) {\n _this.executeSubmit();\n }\n }\n } else if (_this.props.validationSchema) {\n _this.runValidationSchema(_this.state.values, _this.executeSubmit);\n } else {\n _this.executeSubmit();\n }\n };\n\n _this.executeSubmit = function () {\n _this.props.onSubmit(_this.state.values, {\n resetForm: _this.resetForm,\n setError: _this.setError,\n setErrors: _this.setErrors,\n setFieldError: _this.setFieldError,\n setFieldTouched: _this.setFieldTouched,\n setFieldValue: _this.setFieldValue,\n setStatus: _this.setStatus,\n setSubmitting: _this.setSubmitting,\n setTouched: _this.setTouched,\n setValues: _this.setValues,\n submitForm: _this.submitForm\n });\n };\n\n _this.handleBlur = function (e) {\n if (isReactNative) {\n if (undefined !== 'production') {\n console.error(\"Warning: Formik's handleBlur does not work with React Native. Use setFieldTouched(field, isTouched) within a callback instead. For more info see https://github.com/jaredpalmer/formik#setfieldtouched-field-string-istouched-boolean--void\");\n }\n\n return;\n }\n\n e.persist();\n var _a = e.target,\n name = _a.name,\n id = _a.id,\n outerHTML = _a.outerHTML;\n var field = name ? name : id;\n\n if (!field && undefined !== 'production') {\n warnAboutMissingIdentifier({\n htmlContent: outerHTML,\n documentationAnchorLink: 'handleblur-e-any--void',\n handlerName: 'handleBlur'\n });\n }\n\n _this.setState(function (prevState) {\n return {\n touched: __assign({}, prevState.touched, (_a = {}, _a[field] = true, _a))\n };\n\n var _a;\n });\n\n if (_this.props.validateOnBlur) {\n _this.runValidations(_this.state.values);\n }\n };\n\n _this.setFieldTouched = function (field, touched) {\n if (touched === void 0) {\n touched = true;\n }\n\n _this.setState(function (prevState) {\n return __assign({}, prevState, {\n touched: __assign({}, prevState.touched, (_a = {}, _a[field] = touched, _a))\n });\n\n var _a;\n }, function () {\n if (_this.props.validateOnBlur) {\n _this.runValidations(_this.state.values);\n }\n });\n };\n\n _this.setFieldError = function (field, message) {\n _this.setState(function (prevState) {\n return __assign({}, prevState, {\n errors: __assign({}, prevState.errors, (_a = {}, _a[field] = message, _a))\n });\n\n var _a;\n });\n };\n\n _this.resetForm = function (nextValues) {\n if (nextValues) {\n _this.initialValues = nextValues;\n }\n\n _this.setState({\n isSubmitting: false,\n errors: {},\n touched: {},\n error: undefined,\n status: undefined,\n values: nextValues ? nextValues : _this.props.initialValues\n });\n };\n\n _this.handleReset = function () {\n _this.resetForm();\n };\n\n _this.state = {\n values: props.initialValues || {},\n errors: {},\n touched: {},\n isSubmitting: false\n };\n _this.initialValues = props.initialValues || {};\n return _this;\n }\n\n Formik.prototype.getChildContext = function () {\n var dirty = values(this.state.touched).filter(Boolean).length > 0;\n return {\n formik: __assign({}, this.state, {\n dirty: dirty,\n isValid: dirty ? this.state.errors && Object.keys(this.state.errors).length === 0 : this.props.isInitialValid !== false && isFunction(this.props.isInitialValid) ? this.props.isInitialValid(this.props) : this.props.isInitialValid,\n handleSubmit: this.handleSubmit,\n handleChange: this.handleChange,\n handleBlur: this.handleBlur,\n handleReset: this.handleReset,\n setStatus: this.setStatus,\n setTouched: this.setTouched,\n setErrors: this.setErrors,\n setError: this.setError,\n setValues: this.setValues,\n setFieldError: this.setFieldError,\n setFieldValue: this.setFieldValue,\n setFieldTouched: this.setFieldTouched,\n setSubmitting: this.setSubmitting,\n resetForm: this.resetForm,\n submitForm: this.submitForm,\n initialValues: this.initialValues\n })\n };\n };\n\n Formik.prototype.componentWillReceiveProps = function (nextProps) {\n if (this.props.enableReinitialize && !index$2(nextProps.initialValues, this.props.initialValues)) {\n this.initialValues = nextProps.initialValues;\n this.resetForm(nextProps.initialValues);\n }\n };\n\n Formik.prototype.componentWillMount = function () {\n warning_1$2(!(this.props.component && this.props.render), 'You should not use <Formik component> and <Formik render> in the same <Formik> component; <Formik render> will be ignored');\n warning_1$2(!(this.props.component && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use <Formik component> and <Formik children> in the same <Formik> component; <Formik children> will be ignored');\n warning_1$2(!(this.props.render && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use <Formik render> and <Formik children> in the same <Formik> component; <Formik children> will be ignored');\n };\n\n Formik.prototype.render = function () {\n var _a = this.props,\n component = _a.component,\n render = _a.render,\n children = _a.children,\n isInitialValid = _a.isInitialValid;\n var dirty = values(this.state.touched).filter(Boolean).length > 0;\n\n var props = __assign({}, this.state, {\n dirty: dirty,\n isValid: dirty ? this.state.errors && Object.keys(this.state.errors).length === 0 : isInitialValid !== false && isFunction(isInitialValid) ? isInitialValid(this.props) : isInitialValid,\n handleBlur: this.handleBlur,\n handleChange: this.handleChange,\n handleReset: this.handleReset,\n handleSubmit: this.handleSubmit,\n initialValues: this.initialValues,\n resetForm: this.resetForm,\n setError: this.setError,\n setErrors: this.setErrors,\n setFieldError: this.setFieldError,\n setFieldTouched: this.setFieldTouched,\n setFieldValue: this.setFieldValue,\n setStatus: this.setStatus,\n setSubmitting: this.setSubmitting,\n setTouched: this.setTouched,\n setValues: this.setValues,\n submitForm: this.submitForm\n });\n\n return component ? Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(component, props) : render ? render(props) : children ? typeof children === 'function' ? children(props) : !isEmptyChildren(children) ? react__WEBPACK_IMPORTED_MODULE_0__[\"Children\"].only(children) : null : null;\n };\n\n Formik.defaultProps = {\n validateOnChange: true,\n validateOnBlur: true,\n isInitialValid: false,\n enableReinitialize: false\n };\n Formik.propTypes = {\n validateOnChange: index_6,\n validateOnBlur: index_6,\n isInitialValid: index_2([index_5, index_6]),\n initialValues: index_1,\n onSubmit: index_5.isRequired,\n validationSchema: index_2([index_5, index_1]),\n validate: index_5,\n component: index_5,\n render: index_5,\n children: index_2([index_5, index_4]),\n enableReinitialize: index_6\n };\n Formik.childContextTypes = {\n formik: index_1\n };\n return Formik;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\nfunction warnAboutMissingIdentifier(_a) {\n var htmlContent = _a.htmlContent,\n documentationAnchorLink = _a.documentationAnchorLink,\n handlerName = _a.handlerName;\n console.error(\"Warning: `\" + handlerName + \"` has triggered and you forgot to pass an `id` or `name` attribute to your input:\\n \\n \" + htmlContent + \"\\n \\n Formik cannot determine which value to update. For more info see https://github.com/jaredpalmer/formik#\" + documentationAnchorLink + \"\\n \");\n}\n\nfunction yupToFormErrors(yupError) {\n var errors = {};\n\n for (var _i = 0, _a = yupError.inner; _i < _a.length; _i++) {\n var err = _a[_i];\n\n if (!errors[err.path]) {\n errors[err.path] = err.message;\n }\n }\n\n return errors;\n}\n\nfunction validateYupSchema(data, schema, context) {\n if (context === void 0) {\n context = {};\n }\n\n var validateData = {};\n\n for (var k in data) {\n if (data.hasOwnProperty(k)) {\n var key = String(k);\n validateData[key] = data[key] !== '' ? data[key] : undefined;\n }\n }\n\n return schema.validate(validateData, {\n abortEarly: false,\n context: context\n });\n}\n\nfunction touchAllFields(fields) {\n var touched = {};\n\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var k = _a[_i];\n touched[k] = true;\n }\n\n return touched;\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2Zvcm1pay9kaXN0L2Zvcm1pay5lczYuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcz82ZGJlIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcz9lODFiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzPzI4MDkiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzP2Q1NzUiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcz8xMzRkIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcz82ZWM0Iiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcz9jNTJmIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanM/MzUyZCIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanM/NWI0MCIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2VxdWFsL2luZGV4LmpzPzU4ZjMiLCJ3ZWJwYWNrOi8vLy4uL3NyYy91dGlscy50cz83ZjMzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzPzE0ODUiLCJ3ZWJwYWNrOi8vLy4uL3NyYy9GaWVsZC50c3g/ODYxZiIsIndlYnBhY2s6Ly8vLi4vc3JjL0Zvcm0udHN4Pzk5YzYiLCJ3ZWJwYWNrOi8vLy4uL3NyYy9ob2lzdFN0YXRpY3MudHN4P2MyN2MiLCJ3ZWJwYWNrOi8vLy4uL3NyYy93aXRoRm9ybWlrLnRzeD9kMGRiIiwid2VicGFjazovLy8uLi9zcmMvZm9ybWlrLnRzeD82ZWExIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IudGhyb3codmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKG9bbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH07IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxufSIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpc1xuICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2hcbiAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuXG4gKi9cbnZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9O1xuXG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCcuL2VtcHR5RnVuY3Rpb24nKTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG5cbiAgd2FybmluZyA9IGZ1bmN0aW9uIHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgQ29tcG9zaXRlQ29tcG9uZW50IHByb3B0eXBlIGNoZWNrLlxuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG4gIHZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAnUmVhY3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSk7XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXJcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLFxuICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGlkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICVzIGF0IGluZGV4ICVzLicsXG4gICAgICAgICAgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpLFxuICAgICAgICAgIGlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcy5mb3VuZGF0aW9uLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBTeW1ib2wgPSByb290LlN5bWJvbCxcbiAgICBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5LFxuICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcbiAgICBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxuICAgIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxuICAgIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXG4gICAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgaWYgKHN0YWNrZWQgJiYgc3RhY2suZ2V0KG90aGVyKSkge1xuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgcmVJc1VpbnQudGVzdCh2YWx1ZSkpICYmXG4gICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqIEBwcml2YXRlIGlzIHRoZSBnaXZlbiBvYmplY3QvdmFsdWUgYSBwcm9taXNlPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogQHByaXZhdGUgaXMgcnVubmluZyBSZWFjdCBOYXRpdmU/ICAqL1xuZXhwb3J0IGNvbnN0IGlzUmVhY3ROYXRpdmUgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICB3aW5kb3cubmF2aWdhdG9yICYmXG4gIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCAmJlxuICB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZSc7XG5cbi8qKiBAcHJpdmF0ZSBSZXR1cm5zIHZhbHVlcyBvZiBhbiBvYmplY3QgaW4gYSBuZXcgYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXM8VD4ob2JqOiBhbnkpOiBUW10ge1xuICBjb25zdCB2YWxzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHZhbHMucHVzaChvYmpba2V5XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWxzO1xufVxuXG4vKiogQHByaXZhdGUgaXMgdGhlIGdpdmVuIG9iamVjdCBhIEZ1bmN0aW9uPyAqL1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb24gPSAob2JqOiBhbnkpID0+ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmo7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5Q2hpbGRyZW4gPSAoY2hpbGRyZW46IGFueSkgPT5cbiAgUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09PSAwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgX19ERVZfXyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbic7XG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKF9fREVWX18pIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgKC9eW3NcXFddKiQvKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsImltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgRm9ybWlrUHJvcHMgfSBmcm9tICcuL2Zvcm1payc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0VtcHR5Q2hpbGRyZW4gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRmllbGRIVE1MQXR0cmlidXRlcyA9XG4gIHwgUmVhY3QuSW5wdXRIVE1MQXR0cmlidXRlczxIVE1MSW5wdXRFbGVtZW50PlxuICB8IFJlYWN0LlNlbGVjdEhUTUxBdHRyaWJ1dGVzPEhUTUxTZWxlY3RFbGVtZW50PlxuICB8IFJlYWN0LlRleHRhcmVhSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD47XG5cbi8qKlxuICogTm90ZTogVGhlc2UgdHlwaW5ncyBjb3VsZCBiZSBtb3JlIHJlc3RyaWN0aXZlLCBidXQgdGhlbiBpdCB3b3VsZCBsaW1pdCB0aGVcbiAqIHJldXNhYmlsaXR5IG9mIGN1c3RvbSA8RmllbGQvPiBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbnRlcmZhY2UgTXlQcm9wcyB7XG4gKiAgIC4uLlxuICogfVxuICpcbiAqIGV4cG9ydCBjb25zdCBNeUlucHV0OiBSZWFjdC5TRkM8TXlQcm9wcyAmIEZpZWxkUHJvcHM+ID0gKHtcbiAqICAgZmllbGQsXG4gKiAgIGZvcm0sXG4gKiAgIC4uLnByb3BzXG4gKiB9KSA9PlxuICogICA8ZGl2PlxuICogICAgIDxpbnB1dCB7Li4uZmllbGR9IHsuLi5wcm9wc30vPlxuICogICAgIHtmb3JtLnRvdWNoZWRbZmllbGQubmFtZV0gJiYgZm9ybS5lcnJvcnNbZmllbGQubmFtZV19XG4gKiAgIDwvZGl2PlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkUHJvcHM8ViA9IGFueT4ge1xuICBmaWVsZDoge1xuICAgIC8qKiBDbGFzc2ljIFJlYWN0IGNoYW5nZSBoYW5kbGVyLCBrZXllZCBieSBpbnB1dCBuYW1lICovXG4gICAgb25DaGFuZ2U6IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxhbnk+KSA9PiB2b2lkO1xuICAgIC8qKiBNYXJrIGlucHV0IGFzIHRvdWNoZWQgKi9cbiAgICBvbkJsdXI6IChlOiBhbnkpID0+IHZvaWQ7XG4gICAgLyoqIFZhbHVlIG9mIHRoZSBpbnB1dCAqL1xuICAgIHZhbHVlOiBhbnk7XG4gICAgLyogbmFtZSBvZiB0aGUgaW5wdXQgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG4gIGZvcm06IEZvcm1pa1Byb3BzPFY+OyAvLyBpZiBwcGwgd2FudCB0byByZXN0cmljdCB0aGlzIGZvciBhIGdpdmVuIGZvcm0sIGxldCB0aGVtLlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ29uZmlnIHtcbiAgLyoqXG4gICAqIEZpZWxkIGNvbXBvbmVudCB0byByZW5kZXIuIENhbiBlaXRoZXIgYmUgYSBzdHJpbmcgbGlrZSAnc2VsZWN0JyBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudD86IHN0cmluZyB8IFJlYWN0LkNvbXBvbmVudFR5cGU8RmllbGRQcm9wczxhbnk+IHwgdm9pZD47XG5cbiAgLyoqXG4gICAqIFJlbmRlciBwcm9wICh3b3JrcyBsaWtlIFJlYWN0IHJvdXRlcidzIDxSb3V0ZSByZW5kZXI9e3Byb3BzID0+fSAvPilcbiAgICovXG4gIHJlbmRlcj86ICgocHJvcHM6IEZpZWxkUHJvcHM8YW55PikgPT4gUmVhY3QuUmVhY3ROb2RlKTtcblxuICAvKipcbiAgICogQ2hpbGRyZW4gcmVuZGVyIGZ1bmN0aW9uIDxGaWVsZCBuYW1lPntwcm9wcyA9PiAuLi59PC9GaWVsZD4pXG4gICAqL1xuICBjaGlsZHJlbj86ICgocHJvcHM6IEZpZWxkUHJvcHM8YW55PikgPT4gUmVhY3QuUmVhY3ROb2RlKTtcblxuICAvKipcbiAgICogRmllbGQgbmFtZVxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBIVE1MIGlucHV0IHR5cGUgKi9cbiAgdHlwZT86IHN0cmluZztcblxuICAvKiogRmllbGQgdmFsdWUgKi9cbiAgdmFsdWU/OiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIEZpZWxkQXR0cmlidXRlcyA9IEdlbmVyaWNGaWVsZEhUTUxBdHRyaWJ1dGVzICYgRmllbGRDb25maWc7XG5cbi8qKlxuICogQ3VzdG9tIEZpZWxkIGNvbXBvbmVudCBmb3IgcXVpY2tseSBob29raW5nIGludG8gRm9ybWlrXG4gKiBjb250ZXh0IGFuZCB3aXJpbmcgdXAgZm9ybXMuXG4gKi9cblxuZXhwb3J0IGNsYXNzIEZpZWxkPFByb3BzIGV4dGVuZHMgRmllbGRBdHRyaWJ1dGVzID0gYW55PiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgUHJvcHMsXG4gIHt9XG4+IHtcbiAgc3RhdGljIGNvbnRleHRUeXBlcyA9IHtcbiAgICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QsXG4gIH07XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubm9kZV0pLFxuICB9O1xuXG4gIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICBjb25zdCB7IHJlbmRlciwgY2hpbGRyZW4sIGNvbXBvbmVudCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHdhcm5pbmcoXG4gICAgICAhKGNvbXBvbmVudCAmJiByZW5kZXIpLFxuICAgICAgJ1lvdSBzaG91bGQgbm90IHVzZSA8RmllbGQgY29tcG9uZW50PiBhbmQgPEZpZWxkIHJlbmRlcj4gaW4gdGhlIHNhbWUgPEZpZWxkPiBjb21wb25lbnQ7IDxGaWVsZCBjb21wb25lbnQ+IHdpbGwgYmUgaWdub3JlZCdcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgICEoY29tcG9uZW50ICYmIGNoaWxkcmVuICYmIGlzRnVuY3Rpb24oY2hpbGRyZW4pKSxcbiAgICAgICdZb3Ugc2hvdWxkIG5vdCB1c2UgPEZpZWxkIGNvbXBvbmVudD4gYW5kIDxGaWVsZCBjaGlsZHJlbj4gYXMgYSBmdW5jdGlvbiBpbiB0aGUgc2FtZSA8RmllbGQ+IGNvbXBvbmVudDsgPEZpZWxkIGNvbXBvbmVudD4gd2lsbCBiZSBpZ25vcmVkLidcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgICEocmVuZGVyICYmIGNoaWxkcmVuICYmICFpc0VtcHR5Q2hpbGRyZW4oY2hpbGRyZW4pKSxcbiAgICAgICdZb3Ugc2hvdWxkIG5vdCB1c2UgPEZpZWxkIHJlbmRlcj4gYW5kIDxGaWVsZCBjaGlsZHJlbj4gaW4gdGhlIHNhbWUgPEZpZWxkPiBjb21wb25lbnQ7IDxGaWVsZCBjaGlsZHJlbj4gd2lsbCBiZSBpZ25vcmVkJ1xuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBuYW1lLCByZW5kZXIsIGNoaWxkcmVuLCBjb21wb25lbnQgPSAnaW5wdXQnLCAuLi5wcm9wcyB9ID0gdGhpc1xuICAgICAgLnByb3BzIGFzIEZpZWxkQ29uZmlnO1xuXG4gICAgY29uc3QgeyBmb3JtaWsgfSA9IHRoaXMuY29udGV4dDtcbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIHZhbHVlOlxuICAgICAgICBwcm9wcy50eXBlID09PSAncmFkaW8nIHx8IHByb3BzLnR5cGUgPT09ICdjaGVja2JveCdcbiAgICAgICAgICA/IHByb3BzLnZhbHVlXG4gICAgICAgICAgOiBmb3JtaWsudmFsdWVzW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQ2hhbmdlOiBmb3JtaWsuaGFuZGxlQ2hhbmdlLFxuICAgICAgb25CbHVyOiBmb3JtaWsuaGFuZGxlQmx1cixcbiAgICB9O1xuICAgIGNvbnN0IGJhZyA9IHsgZmllbGQsIGZvcm06IGZvcm1payB9O1xuXG4gICAgaWYgKHJlbmRlcikge1xuICAgICAgcmV0dXJuIChyZW5kZXIgYXMgYW55KShiYWcpO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIChjaGlsZHJlbiBhcyAocHJvcHM6IEZpZWxkUHJvcHM8YW55PikgPT4gUmVhY3QuUmVhY3ROb2RlKShiYWcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50IGFzIGFueSwge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50IGFzIGFueSwge1xuICAgICAgLi4uYmFnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBjaGlsZHJlbixcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3QgRm9ybTogUmVhY3QuU0ZDPGFueT4gPSAocHJvcHMsIGNvbnRleHQpID0+IChcbiAgPGZvcm0gb25TdWJtaXQ9e2NvbnRleHQuZm9ybWlrLmhhbmRsZVN1Ym1pdH0gey4uLnByb3BzfSAvPlxuKTtcblxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XG4gIGZvcm1pazogUHJvcFR5cGVzLm9iamVjdCxcbn07XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDbGFzcyB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUkVBQ1RfU1RBVElDUzogYW55ID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlLFxufTtcblxuY29uc3QgS05PV05fU1RBVElDUzogYW55ID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWUsXG59O1xuXG5jb25zdCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuY29uc3QgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5jb25zdCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbmNvbnN0IG9iamVjdFByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mICYmIGdldFByb3RvdHlwZU9mKE9iamVjdCk7XG5jb25zdCBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljczxQPihcbiAgdGFyZ2V0Q29tcG9uZW50OiBDb21wb25lbnRDbGFzczxQPixcbiAgc291cmNlQ29tcG9uZW50OiBDb21wb25lbnRDbGFzczxhbnk+LFxuICBibGFja2xpc3Q/OiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH1cbik6IENvbXBvbmVudENsYXNzPFA+IHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcblxuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIGxldCBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSBhcyBhbnkpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgbGV0IGtleTogc3RyaW5nID0ga2V5c1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgIVJFQUNUX1NUQVRJQ1Nba2V5XSAmJlxuICAgICAgICAhS05PV05fU1RBVElDU1trZXldICYmXG4gICAgICAgICghYmxhY2tsaXN0IHx8ICFibGFja2xpc3Rba2V5XSlcbiAgICAgICkge1xuICAgICAgICAvLyBPbmx5IGhvaXN0IGVudW1lcmFibGVzIGFuZCBub24tZW51bWVyYWJsZSBmdW5jdGlvbnNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BJc0VudW1lcmFibGUuY2FsbChzb3VyY2VDb21wb25lbnQsIGtleSkgfHxcbiAgICAgICAgICB0eXBlb2YgKHNvdXJjZUNvbXBvbmVudCBhcyBhbnkpW2tleV0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICAgICh0YXJnZXRDb21wb25lbnQgYXMgYW55KVtrZXldID0gKHNvdXJjZUNvbXBvbmVudCBhcyBhbnkpW2tleV07XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHlcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7XG4gIEZvcm1payxcbiAgRm9ybWlrQWN0aW9ucyxcbiAgRm9ybWlrQ29tcHV0ZWRQcm9wcyxcbiAgRm9ybWlrSGFuZGxlcnMsXG4gIEZvcm1pa1Byb3BzLFxuICBGb3JtaWtTaGFyZWRDb25maWcsXG4gIEZvcm1pa1N0YXRlLFxuICBGb3JtaWtWYWx1ZXMsXG59IGZyb20gJy4vZm9ybWlrJztcblxuaW1wb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgfSBmcm9tICcuL2hvaXN0U3RhdGljcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogU3RhdGUsIGhhbmRsZXJzLCBhbmQgaGVscGVycyBpbmplY3RlZCBhcyBwcm9wcyBpbnRvIHRoZSB3cmFwcGVkIGZvcm0gY29tcG9uZW50LlxuICogVXNlZCB3aXRoIHdpdGhGb3JtaWsoKVxuICovXG5leHBvcnQgdHlwZSBJbmplY3RlZEZvcm1pa1Byb3BzPFByb3BzLCBWYWx1ZXM+ID0gUHJvcHMgJlxuICBGb3JtaWtTdGF0ZTxWYWx1ZXM+ICZcbiAgRm9ybWlrQWN0aW9uczxWYWx1ZXM+ICZcbiAgRm9ybWlrSGFuZGxlcnMgJlxuICBGb3JtaWtDb21wdXRlZFByb3BzPFZhbHVlcz47XG5cbi8qKlxuICogRm9ybWlrIGFjdGlvbnMgKyB7IHByb3BzIH1cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWlrQmFnPFAsIFY+ID0geyBwcm9wczogUCB9ICYgRm9ybWlrQWN0aW9uczxWPjtcblxuLyoqXG4gKiB3aXRoRm9ybWlrKCkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCYWNrd2FyZHMgY29tcGF0aWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaXRoRm9ybWlrQ29uZmlnPFxuICBQcm9wcyxcbiAgVmFsdWVzIGV4dGVuZHMgRm9ybWlrVmFsdWVzID0gRm9ybWlrVmFsdWVzLFxuICBEZXByZWNhdGVkUGF5bG9hZCA9IFZhbHVlc1xuPiBleHRlbmRzIEZvcm1pa1NoYXJlZENvbmZpZyB7XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29tcG9uZW50LiBVc2VmdWwgZm9yIFJlYWN0IERldlRvb2xzLlxuICAgKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1Ym1pc3Npb24gaGFuZGxlclxuICAgKi9cbiAgaGFuZGxlU3VibWl0OiAodmFsdWVzOiBWYWx1ZXMsIGZvcm1pa0JhZzogRm9ybWlrQmFnPFByb3BzLCBWYWx1ZXM+KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgcHJvcHMgdG8gdGhlIGZvcm0gdmFsdWVzXG4gICAqL1xuICBtYXBQcm9wc1RvVmFsdWVzPzogKHByb3BzOiBQcm9wcykgPT4gVmFsdWVzO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBpbiAwLjkuMCAoYnV0IG5lZWRlZCB0byBicmVhayBUUyB0eXBlcylcbiAgICovXG4gIG1hcFZhbHVlc1RvUGF5bG9hZD86ICh2YWx1ZXM6IFZhbHVlcykgPT4gRGVwcmVjYXRlZFBheWxvYWQ7XG5cbiAgLyoqXG4gICAqIEEgWXVwIFNjaGVtYSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFl1cCBzY2hlbWFcbiAgICovXG4gIHZhbGlkYXRpb25TY2hlbWE/OiBhbnkgfCAoKHByb3BzOiBQcm9wcykgPT4gYW55KTtcblxuICAvKipcbiAgICogVmFsaWRhdGlvbiBmdW5jdGlvbi4gTXVzdCByZXR1cm4gYW4gZXJyb3Igb2JqZWN0IG9yIHByb21pc2UgdGhhdFxuICAgKiB0aHJvd3MgYW4gZXJyb3Igb2JqZWN0IHdoZXJlIHRoYXQgb2JqZWN0IGtleXMgbWFwIHRvIGNvcnJlc3BvbmRpbmcgdmFsdWUuXG4gICAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IGFueSwgcHJvcHM6IFByb3BzKSA9PiB2b2lkIHwgb2JqZWN0IHwgUHJvbWlzZTxhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBDb21wb3NpdGVDb21wb25lbnQ8UD4gPVxuICB8IFJlYWN0LkNvbXBvbmVudENsYXNzPFA+XG4gIHwgUmVhY3QuU3RhdGVsZXNzQ29tcG9uZW50PFA+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERlY29yYXRvcjxUT3duUHJvcHMsIFRNZXJnZWRQcm9wcz4ge1xuICAoY29tcG9uZW50OiBDb21wb3NpdGVDb21wb25lbnQ8VE1lcmdlZFByb3BzPik6IFJlYWN0LkNvbXBvbmVudENsYXNzPFxuICAgIFRPd25Qcm9wc1xuICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZmVyYWJsZUNvbXBvbmVudERlY29yYXRvcjxUT3duUHJvcHM+IHtcbiAgPFQgZXh0ZW5kcyBDb21wb3NpdGVDb21wb25lbnQ8VE93blByb3BzPj4oY29tcG9uZW50OiBUKTogVDtcbn1cblxuLyoqXG4gKiBBIHB1YmxpYyBoaWdoZXItb3JkZXIgY29tcG9uZW50IHRvIGFjY2VzcyB0aGUgaW1wZXJhdGl2ZSBBUElcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhGb3JtaWs8XG4gIFByb3BzLFxuICBWYWx1ZXMgZXh0ZW5kcyBGb3JtaWtWYWx1ZXMsXG4gIFBheWxvYWQgPSBWYWx1ZXNcbj4oe1xuICBtYXBQcm9wc1RvVmFsdWVzID0gKHZhbmlsbGFQcm9wczogYW55KSA9PiB7XG4gICAgbGV0IHZhbDogRm9ybWlrVmFsdWVzID0ge30gYXMgRm9ybWlrVmFsdWVzO1xuICAgIGZvciAobGV0IGsgaW4gdmFuaWxsYVByb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbmlsbGFQcm9wcy5oYXNPd25Qcm9wZXJ0eShrKSAmJlxuICAgICAgICB0eXBlb2YgdmFuaWxsYVByb3BzW2tdICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdmFsW2tdID0gdmFuaWxsYVByb3BzW2tdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9LFxuICAuLi5jb25maWcsXG59OiBXaXRoRm9ybWlrQ29uZmlnPFByb3BzLCBWYWx1ZXMsIFBheWxvYWQ+KTogQ29tcG9uZW50RGVjb3JhdG9yPFxuICBQcm9wcyxcbiAgSW5qZWN0ZWRGb3JtaWtQcm9wczxQcm9wcywgVmFsdWVzPlxuPiB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVGb3JtaWsoQ29tcG9uZW50OiBDb21wb3NpdGVDb21wb25lbnQ8UHJvcHM+KSB7XG4gICAgLyoqXG4gICAgICogV2UgbmVlZCB0byB1c2UgY2xvc3VyZXMgaGVyZSBmb3IgdG8gcHJvdmlkZSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBwcm9wcyB0b1xuICAgICAqIHRoZSByZXNwZWN0aXZlIHdpdGhGb3JtaWsgY29uZmlnIG1ldGhvZHMuXG4gICAgICovXG4gICAgY2xhc3MgQyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywge30+IHtcbiAgICAgIHZhbGlkYXRlID0gKHZhbHVlczogVmFsdWVzKTogdm9pZCB8IG9iamVjdCB8IFByb21pc2U8YW55PiA9PiB7XG4gICAgICAgIHJldHVybiBjb25maWcudmFsaWRhdGUhKHZhbHVlcywgdGhpcy5wcm9wcyk7XG4gICAgICB9O1xuXG4gICAgICB2YWxpZGF0aW9uU2NoZW1hID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihjb25maWcudmFsaWRhdGlvblNjaGVtYSlcbiAgICAgICAgICA/IGNvbmZpZy52YWxpZGF0aW9uU2NoZW1hISh0aGlzLnByb3BzKVxuICAgICAgICAgIDogY29uZmlnLnZhbGlkYXRpb25TY2hlbWE7XG4gICAgICB9O1xuXG4gICAgICBoYW5kbGVTdWJtaXQgPSAodmFsdWVzOiBWYWx1ZXMsIGFjdGlvbnM6IEZvcm1pa0FjdGlvbnM8VmFsdWVzPikgPT4ge1xuICAgICAgICByZXR1cm4gY29uZmlnLmhhbmRsZVN1Ym1pdCh2YWx1ZXMgYXMgVmFsdWVzLCB7XG4gICAgICAgICAgLi4uYWN0aW9ucyxcbiAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICAvKipcbiAgICAgICAqIEp1c3QgYXZvaWRpbmcgYSByZW5kZXIgY2FsbGJhY2sgZm9yIHBlcmYgaGVyZVxuICAgICAgICovXG4gICAgICByZW5kZXJGb3JtQ29tcG9uZW50ID0gKGZvcm1pa1Byb3BzOiBGb3JtaWtQcm9wczxWYWx1ZXM+KSA9PiB7XG4gICAgICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi50aGlzLnByb3BzfSB7Li4uZm9ybWlrUHJvcHN9IC8+O1xuICAgICAgfTtcblxuICAgICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxGb3JtaWtcbiAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgey4uLmNvbmZpZ31cbiAgICAgICAgICAgIHZhbGlkYXRlPXtjb25maWcudmFsaWRhdGUgJiYgdGhpcy52YWxpZGF0ZX1cbiAgICAgICAgICAgIHZhbGlkYXRpb25TY2hlbWE9e2NvbmZpZy52YWxpZGF0aW9uU2NoZW1hICYmIHRoaXMudmFsaWRhdGlvblNjaGVtYX1cbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e21hcFByb3BzVG9WYWx1ZXModGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICByZW5kZXI9e3RoaXMucmVuZGVyRm9ybUNvbXBvbmVudH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljczxQcm9wcz4oXG4gICAgICBDIGFzIGFueSxcbiAgICAgIENvbXBvbmVudCBhcyBSZWFjdC5Db21wb25lbnRDbGFzczxJbmplY3RlZEZvcm1pa1Byb3BzPFByb3BzLCBWYWx1ZXM+PiAvLyBjYXN0IHR5cGUgdG8gQ29tcG9uZW50Q2xhc3MgKGV2ZW4gaWYgU0ZDKVxuICAgICkgYXMgUmVhY3QuQ29tcG9uZW50Q2xhc3M8UHJvcHM+O1xuICB9O1xufVxuIiwiaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuaW1wb3J0IHtcbiAgaXNFbXB0eUNoaWxkcmVuLFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIGlzUmVhY3ROYXRpdmUsXG4gIHZhbHVlcyxcbn0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuXG4vKipcbiAqIFZhbHVlcyBvZiBmaWVsZHMgaW4gdGhlIGZvcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtaWtWYWx1ZXMge1xuICBbZmllbGQ6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBlcnJvciBtZXNzYWdlcyB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gRm9ybWlrVmFsdWVzLlxuICogU2hvdWxkIGJlIGFsd2F5cyBiZSBhbmQgb2JqZWN0IG9mIHN0cmluZ3MsIGJ1dCBhbnkgaXMgYWxsb3dlZCB0byBzdXBwb3J0IGkxOG4gbGlicmFyaWVzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtaWtFcnJvcnM8VmFsdWVzPiA9IHsgW2ZpZWxkIGluIGtleW9mIFZhbHVlc106IGFueSB9O1xuXG4vKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIHRvdWNoZWQgc3RhdGUgb2YgdGhlIGZvcm0gd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIEZvcm1pa1ZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWlrVG91Y2hlZDxWYWx1ZXM+ID0geyBbZmllbGQgaW4ga2V5b2YgVmFsdWVzXTogYm9vbGVhbiB9O1xuXG4vKipcbiAqIEZvcm1payBzdGF0ZSB0cmVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWlrU3RhdGU8VmFsdWVzPiB7XG4gIC8qKiBGb3JtIHZhbHVlcyAqL1xuICB2YWx1ZXM6IFZhbHVlcztcbiAgLyoqXG4gICAqIFRvcCBsZXZlbCBlcnJvciwgaW4gY2FzZSB5b3UgbmVlZCBpdFxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAwLjguMFxuICAgKi9cbiAgZXJyb3I/OiBhbnk7XG4gIC8qKiBtYXAgb2YgZmllbGQgbmFtZXMgdG8gc3BlY2lmaWMgZXJyb3IgZm9yIHRoYXQgZmllbGQgKi9cbiAgZXJyb3JzOiBGb3JtaWtFcnJvcnM8VmFsdWVzPjtcbiAgLyoqIG1hcCBvZiBmaWVsZCBuYW1lcyB0byB3aGV0aGVyIHRoZSBmaWVsZCBoYXMgYmVlbiB0b3VjaGVkICovXG4gIHRvdWNoZWQ6IEZvcm1pa1RvdWNoZWQ8VmFsdWVzPjtcbiAgLyoqIHdoZXRoZXIgdGhlIGZvcm0gaXMgY3VycmVudGx5IHN1Ym1pdHRpbmcgKi9cbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuO1xuICAvKiogVG9wIGxldmVsIHN0YXR1cyBzdGF0ZSwgaW4gY2FzZSB5b3UgbmVlZCBpdCAqL1xuICBzdGF0dXM/OiBhbnk7XG59XG5cbi8qKlxuICogRm9ybWlrIGNvbXB1dGVkIHByb3BlcnRpZXMuIFRoZXNlIGFyZSByZWFkLW9ubHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWlrQ29tcHV0ZWRQcm9wczxWYWx1ZXM+IHtcbiAgLyoqIFRydWUgaWYgYW55IGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuIEZhbHNlIG90aGVyd2lzZS4gKi9cbiAgcmVhZG9ubHkgZGlydHk6IGJvb2xlYW47XG4gIC8qKiBSZXN1bHQgb2YgaXNJbml0aWFsbHlWYWxpZCBvbiBtb3VudCwgdGhlbiB3aGV0aGVyIHRydWUgdmFsdWVzIHBhc3MgdmFsaWRhdGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNWYWxpZDogYm9vbGVhbjtcbiAgLyoqIGluaXRpYWxWYWx1ZXMgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFZhbHVlczogVmFsdWVzO1xufVxuXG4vKipcbiAqIEZvcm1payBzdGF0ZSBoZWxwZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWlrQWN0aW9uczxWYWx1ZXM+IHtcbiAgLyoqIE1hbnVhbGx5IHNldCB0b3AgbGV2ZWwgc3RhdHVzLiAqL1xuICBzZXRTdGF0dXM6IChzdGF0dXM/OiBhbnkpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBNYW51YWxseSBzZXQgdG9wIGxldmVsIGVycm9yXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIDAuOC4wXG4gICAqL1xuICBzZXRFcnJvcjogKGU6IGFueSkgPT4gdm9pZDtcbiAgLyoqIE1hbnVhbGx5IHNldCBlcnJvcnMgb2JqZWN0ICovXG4gIHNldEVycm9yczogKGVycm9yczogRm9ybWlrRXJyb3JzPFZhbHVlcz4pID0+IHZvaWQ7XG4gIC8qKiBNYW51YWxseSBzZXQgaXNTdWJtaXR0aW5nICovXG4gIHNldFN1Ym1pdHRpbmc6IChpc1N1Ym1pdHRpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIC8qKiBNYW51YWxseSBzZXQgdG91Y2hlZCBvYmplY3QgKi9cbiAgc2V0VG91Y2hlZDogKHRvdWNoZWQ6IEZvcm1pa1RvdWNoZWQ8VmFsdWVzPikgPT4gdm9pZDtcbiAgLyoqIE1hbnVhbGx5IHNldCB2YWx1ZXMgb2JqZWN0ICAqL1xuICBzZXRWYWx1ZXM6ICh2YWx1ZXM6IFZhbHVlcykgPT4gdm9pZDtcbiAgLyoqIFNldCB2YWx1ZSBvZiBmb3JtIGZpZWxkIGRpcmVjdGx5ICovXG4gIHNldEZpZWxkVmFsdWU6IChmaWVsZDoga2V5b2YgVmFsdWVzLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAvKiogU2V0IGVycm9yIG1lc3NhZ2Ugb2YgYSBmb3JtIGZpZWxkIGRpcmVjdGx5ICovXG4gIHNldEZpZWxkRXJyb3I6IChmaWVsZDoga2V5b2YgVmFsdWVzLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBTZXQgd2hldGhlciBmaWVsZCBoYXMgYmVlbiB0b3VjaGVkIGRpcmVjdGx5ICovXG4gIHNldEZpZWxkVG91Y2hlZDogKGZpZWxkOiBrZXlvZiBWYWx1ZXMsIGlzVG91Y2hlZD86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIC8qKiBSZXNldCBmb3JtICovXG4gIHJlc2V0Rm9ybTogKG5leHRWYWx1ZXM/OiBhbnkpID0+IHZvaWQ7XG4gIC8qKiBTdWJtaXQgdGhlIGZvcm0gaW1wZXJhdGl2ZWx5ICovXG4gIHN1Ym1pdEZvcm06ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogRm9ybWlrIGZvcm0gZXZlbnQgaGFuZGxlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtaWtIYW5kbGVycyB7XG4gIC8qKiBGb3JtIHN1Ym1pdCBoYW5kbGVyICovXG4gIGhhbmRsZVN1Ym1pdDogKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSA9PiB2b2lkO1xuICAvKiogQ2xhc3NpYyBSZWFjdCBjaGFuZ2UgaGFuZGxlciwga2V5ZWQgYnkgaW5wdXQgbmFtZSAqL1xuICBoYW5kbGVDaGFuZ2U6IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxhbnk+KSA9PiB2b2lkO1xuICAvKiogTWFyayBpbnB1dCBhcyB0b3VjaGVkICovXG4gIGhhbmRsZUJsdXI6IChlOiBhbnkpID0+IHZvaWQ7XG4gIC8qKiBDaGFuZ2UgdmFsdWUgb2YgZm9ybSBmaWVsZCBkaXJlY3RseSAqL1xuICBoYW5kbGVDaGFuZ2VWYWx1ZTogKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgLyoqIFJlc2V0IGZvcm0gZXZlbnQgaGFuZGxlciAgKi9cbiAgaGFuZGxlUmVzZXQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQmFzZSBmb3JtaWsgY29uZmlndXJhdGlvbi9wcm9wcyBzaGFyZWQgYmV0d2VlbiB0aGUgSG9DIGFuZCBDb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWlrU2hhcmVkQ29uZmlnIHtcbiAgLyoqIFRlbGxzIEZvcm1payB0byB2YWxpZGF0ZSB0aGUgZm9ybSBvbiBlYWNoIGlucHV0J3Mgb25DaGFuZ2UgZXZlbnQgKi9cbiAgdmFsaWRhdGVPbkNoYW5nZT86IGJvb2xlYW47XG4gIC8qKiBUZWxscyBGb3JtaWsgdG8gdmFsaWRhdGUgdGhlIGZvcm0gb24gZWFjaCBpbnB1dCdzIG9uQmx1ciBldmVudCAqL1xuICB2YWxpZGF0ZU9uQmx1cj86IGJvb2xlYW47XG4gIC8qKiBUZWxsIEZvcm1payBpZiBpbml0aWFsIGZvcm0gdmFsdWVzIGFyZSB2YWxpZCBvciBub3Qgb24gZmlyc3QgcmVuZGVyICovXG4gIGlzSW5pdGlhbFZhbGlkPzogYm9vbGVhbiB8ICgocHJvcHM6IG9iamVjdCkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZCk7XG4gIC8qKiBTaG91bGQgRm9ybWlrIHJlc2V0IHRoZSBmb3JtIHdoZW4gbmV3IGluaXRpYWxWYWx1ZXMgY2hhbmdlICovXG4gIGVuYWJsZVJlaW5pdGlhbGl6ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogPEZvcm1payAvPiBwcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1pa0NvbmZpZzxWYWx1ZXMgPSBvYmplY3Q+IGV4dGVuZHMgRm9ybWlrU2hhcmVkQ29uZmlnIHtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWVzIG9mIHRoZSBmb3JtXG4gICAqL1xuICBpbml0aWFsVmFsdWVzOiBWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIFN1Ym1pc3Npb24gaGFuZGxlclxuICAgKi9cbiAgb25TdWJtaXQ6ICh2YWx1ZXM6IFZhbHVlcywgZm9ybWlrQWN0aW9uczogRm9ybWlrQWN0aW9uczxWYWx1ZXM+KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBGb3JtIGNvbXBvbmVudCB0byByZW5kZXJcbiAgICovXG4gIGNvbXBvbmVudD86IFJlYWN0LkNvbXBvbmVudFR5cGU8Rm9ybWlrUHJvcHM8VmFsdWVzPiB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgcHJvcCAod29ya3MgbGlrZSBSZWFjdCByb3V0ZXIncyA8Um91dGUgcmVuZGVyPXtwcm9wcyA9Pn0gLz4pXG4gICAqL1xuICByZW5kZXI/OiAoKHByb3BzOiBGb3JtaWtQcm9wczxWYWx1ZXM+KSA9PiBSZWFjdC5SZWFjdE5vZGUpO1xuXG4gIC8qKlxuICAgKiBBIFl1cCBTY2hlbWEgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBZdXAgc2NoZW1hXG4gICAqL1xuICB2YWxpZGF0aW9uU2NoZW1hPzogYW55IHwgKCgpID0+IGFueSk7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gZnVuY3Rpb24uIE11c3QgcmV0dXJuIGFuIGVycm9yIG9iamVjdCBvciBwcm9taXNlIHRoYXRcbiAgICogdGhyb3dzIGFuIGVycm9yIG9iamVjdCB3aGVyZSB0aGF0IG9iamVjdCBrZXlzIG1hcCB0byBjb3JyZXNwb25kaW5nIHZhbHVlLlxuICAgKi9cbiAgdmFsaWRhdGU/OiAoKFxuICAgIHZhbHVlczogVmFsdWVzXG4gICkgPT4gdm9pZCB8IG9iamVjdCB8IFByb21pc2U8Rm9ybWlrRXJyb3JzPFZhbHVlcz4+KTtcblxuICAvKipcbiAgICogUmVhY3QgY2hpbGRyZW4gb3IgY2hpbGQgcmVuZGVyIGNhbGxiYWNrXG4gICAqL1xuICBjaGlsZHJlbj86XG4gICAgfCAoKHByb3BzOiBGb3JtaWtQcm9wczxWYWx1ZXM+KSA9PiBSZWFjdC5SZWFjdE5vZGUpXG4gICAgfCBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbi8qKlxuICogU3RhdGUsIGhhbmRsZXJzLCBhbmQgaGVscGVycyBtYWRlIGF2YWlsYWJsZSB0byBmb3JtIGNvbXBvbmVudCBvciByZW5kZXIgcHJvcFxuICogb2YgPEZvcm1pay8+LlxuICovXG5leHBvcnQgdHlwZSBGb3JtaWtQcm9wczxWYWx1ZXM+ID0gRm9ybWlrU3RhdGU8VmFsdWVzPiAmXG4gIEZvcm1pa0FjdGlvbnM8VmFsdWVzPiAmXG4gIEZvcm1pa0hhbmRsZXJzICZcbiAgRm9ybWlrQ29tcHV0ZWRQcm9wczxWYWx1ZXM+O1xuXG5leHBvcnQgY2xhc3MgRm9ybWlrPFxuICBQcm9wcyBleHRlbmRzIEZvcm1pa0NvbmZpZzxWYWx1ZXM+ID0gRm9ybWlrQ29uZmlnPFZhbHVlcz4sXG4gIFZhbHVlcyA9IG9iamVjdFxuPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgRm9ybWlrU3RhdGU8YW55Pj4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbGlkYXRlT25DaGFuZ2U6IHRydWUsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgaXNJbml0aWFsVmFsaWQ6IGZhbHNlLFxuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogZmFsc2UsXG4gIH07XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICB2YWxpZGF0ZU9uQ2hhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB2YWxpZGF0ZU9uQmx1cjogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNJbml0aWFsVmFsaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAgIGluaXRpYWxWYWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgb25TdWJtaXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGlvblNjaGVtYTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY29tcG9uZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm5vZGVdKSxcbiAgICBlbmFibGVSZWluaXRpYWxpemU6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcyA9IHtcbiAgICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QsXG4gIH07XG5cbiAgaW5pdGlhbFZhbHVlczogVmFsdWVzO1xuXG4gIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICBjb25zdCBkaXJ0eSA9XG4gICAgICB2YWx1ZXM8Ym9vbGVhbj4odGhpcy5zdGF0ZS50b3VjaGVkKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWlrOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgIGRpcnR5LFxuICAgICAgICBpc1ZhbGlkOiBkaXJ0eVxuICAgICAgICAgID8gdGhpcy5zdGF0ZS5lcnJvcnMgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZS5lcnJvcnMpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIDogdGhpcy5wcm9wcy5pc0luaXRpYWxWYWxpZCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgIGlzRnVuY3Rpb24odGhpcy5wcm9wcy5pc0luaXRpYWxWYWxpZClcbiAgICAgICAgICAgID8gKHRoaXMucHJvcHMuaXNJbml0aWFsVmFsaWQgYXMgKHByb3BzOiBQcm9wcykgPT4gYm9vbGVhbikoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICh0aGlzLnByb3BzLmlzSW5pdGlhbFZhbGlkIGFzIGJvb2xlYW4pLFxuICAgICAgICBoYW5kbGVTdWJtaXQ6IHRoaXMuaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlLFxuICAgICAgICBoYW5kbGVCbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgIGhhbmRsZVJlc2V0OiB0aGlzLmhhbmRsZVJlc2V0LFxuICAgICAgICBzZXRTdGF0dXM6IHRoaXMuc2V0U3RhdHVzLFxuICAgICAgICBzZXRUb3VjaGVkOiB0aGlzLnNldFRvdWNoZWQsXG4gICAgICAgIHNldEVycm9yczogdGhpcy5zZXRFcnJvcnMsXG4gICAgICAgIHNldEVycm9yOiB0aGlzLnNldEVycm9yLFxuICAgICAgICBzZXRWYWx1ZXM6IHRoaXMuc2V0VmFsdWVzLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiB0aGlzLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IHRoaXMuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkOiB0aGlzLnNldEZpZWxkVG91Y2hlZCxcbiAgICAgICAgc2V0U3VibWl0dGluZzogdGhpcy5zZXRTdWJtaXR0aW5nLFxuICAgICAgICByZXNldEZvcm06IHRoaXMucmVzZXRGb3JtLFxuICAgICAgICBzdWJtaXRGb3JtOiB0aGlzLnN1Ym1pdEZvcm0sXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IHRoaXMuaW5pdGlhbFZhbHVlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWVzOiBwcm9wcy5pbml0aWFsVmFsdWVzIHx8ICh7fSBhcyBhbnkpLFxuICAgICAgZXJyb3JzOiB7fSxcbiAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdGhpcy5pbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyB8fCAoe30gYXMgYW55KTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBQcm9wcykge1xuICAgIC8vIElmIHRoZSBpbml0aWFsVmFsdWVzIGNoYW5nZSwgcmVzZXQgdGhlIGZvcm1cbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmVuYWJsZVJlaW5pdGlhbGl6ZSAmJlxuICAgICAgIWlzRXF1YWwobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlcylcbiAgICApIHtcbiAgICAgIHRoaXMuaW5pdGlhbFZhbHVlcyA9IG5leHRQcm9wcy5pbml0aWFsVmFsdWVzO1xuICAgICAgdGhpcy5yZXNldEZvcm0obmV4dFByb3BzLmluaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgISh0aGlzLnByb3BzLmNvbXBvbmVudCAmJiB0aGlzLnByb3BzLnJlbmRlciksXG4gICAgICAnWW91IHNob3VsZCBub3QgdXNlIDxGb3JtaWsgY29tcG9uZW50PiBhbmQgPEZvcm1payByZW5kZXI+IGluIHRoZSBzYW1lIDxGb3JtaWs+IGNvbXBvbmVudDsgPEZvcm1payByZW5kZXI+IHdpbGwgYmUgaWdub3JlZCdcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgICEoXG4gICAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgIWlzRW1wdHlDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuKVxuICAgICAgKSxcbiAgICAgICdZb3Ugc2hvdWxkIG5vdCB1c2UgPEZvcm1payBjb21wb25lbnQ+IGFuZCA8Rm9ybWlrIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSA8Rm9ybWlrPiBjb21wb25lbnQ7IDxGb3JtaWsgY2hpbGRyZW4+IHdpbGwgYmUgaWdub3JlZCdcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgICEoXG4gICAgICAgIHRoaXMucHJvcHMucmVuZGVyICYmXG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgIWlzRW1wdHlDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuKVxuICAgICAgKSxcbiAgICAgICdZb3Ugc2hvdWxkIG5vdCB1c2UgPEZvcm1payByZW5kZXI+IGFuZCA8Rm9ybWlrIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSA8Rm9ybWlrPiBjb21wb25lbnQ7IDxGb3JtaWsgY2hpbGRyZW4+IHdpbGwgYmUgaWdub3JlZCdcbiAgICApO1xuICB9XG5cbiAgc2V0RXJyb3JzID0gKGVycm9yczogRm9ybWlrRXJyb3JzPFZhbHVlcz4pID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3JzIH0pO1xuICB9O1xuXG4gIHNldFRvdWNoZWQgPSAodG91Y2hlZDogRm9ybWlrVG91Y2hlZDxWYWx1ZXM+KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRvdWNoZWQgfSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJvcHMudmFsaWRhdGVPbkJsdXIpIHtcbiAgICAgICAgdGhpcy5ydW5WYWxpZGF0aW9ucyh0aGlzLnN0YXRlLnZhbHVlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgc2V0VmFsdWVzID0gKHZhbHVlczogRm9ybWlrVmFsdWVzKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlcyB9LCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0ZU9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucnVuVmFsaWRhdGlvbnModmFsdWVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBzZXRTdGF0dXMgPSAoc3RhdHVzPzogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1cyB9KTtcbiAgfTtcblxuICBzZXRFcnJvciA9IChlcnJvcjogYW55KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFdhcm5pbmc6IEZvcm1pa1xcJ3Mgc2V0RXJyb3IoZXJyb3IpIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcy4gUGxlYXNlIHVzZSBGb3JtaWtcXCdzIHNldFN0YXR1cyhzdGF0dXMpIGluc3RlYWQuIEl0IHdvcmtzIGlkZW50aWNhbGx5LiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamFyZWRwYWxtZXIvZm9ybWlrI3NldHN0YXR1cy1zdGF0dXMtYW55LS12b2lkYFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yIH0pO1xuICB9O1xuXG4gIHNldFN1Ym1pdHRpbmcgPSAoaXNTdWJtaXR0aW5nOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzU3VibWl0dGluZyB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUnVuIHZhbGlkYXRpb24gYWdhaW5zdCBhIFl1cCBzY2hlbWEgYW5kIG9wdGlvbmFsbHkgcnVuIGEgZnVuY3Rpb24gaWYgc3VjY2Vzc2Z1bFxuICAgKi9cbiAgcnVuVmFsaWRhdGlvblNjaGVtYSA9ICh2YWx1ZXM6IEZvcm1pa1ZhbHVlcywgb25TdWNjZXNzPzogRnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IHZhbGlkYXRpb25TY2hlbWEgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgc2NoZW1hID0gaXNGdW5jdGlvbih2YWxpZGF0aW9uU2NoZW1hKVxuICAgICAgPyB2YWxpZGF0aW9uU2NoZW1hKClcbiAgICAgIDogdmFsaWRhdGlvblNjaGVtYTtcbiAgICB2YWxpZGF0ZVl1cFNjaGVtYSh2YWx1ZXMsIHNjaGVtYSkudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yczoge30gfSk7XG4gICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnI6IGFueSkgPT5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yczogeXVwVG9Gb3JtRXJyb3JzKGVyciksIGlzU3VibWl0dGluZzogZmFsc2UgfSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSdW4gdmFsaWRhdGlvbnMgYW5kIHVwZGF0ZSBzdGF0ZSBhY2NvcmRpbmdseVxuICAgKi9cbiAgcnVuVmFsaWRhdGlvbnMgPSAodmFsdWVzOiBGb3JtaWtWYWx1ZXMpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uU2NoZW1hKSB7XG4gICAgICB0aGlzLnJ1blZhbGlkYXRpb25TY2hlbWEodmFsdWVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0ZSkge1xuICAgICAgY29uc3QgbWF5YmVQcm9taXNlZEVycm9ycyA9ICh0aGlzLnByb3BzLnZhbGlkYXRlIGFzIGFueSkodmFsdWVzKTtcbiAgICAgIGlmIChpc1Byb21pc2UobWF5YmVQcm9taXNlZEVycm9ycykpIHtcbiAgICAgICAgKG1heWJlUHJvbWlzZWRFcnJvcnMgYXMgUHJvbWlzZTxhbnk+KS50aGVuKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcnM6IHt9IH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3JzID0+IHRoaXMuc2V0U3RhdGUoeyBlcnJvcnMsIGlzU3VibWl0dGluZzogZmFsc2UgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JzKG1heWJlUHJvbWlzZWRFcnJvcnMgYXMgRm9ybWlrRXJyb3JzPFZhbHVlcz4pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8YW55PikgPT4ge1xuICAgIGlmIChpc1JlYWN0TmF0aXZlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBXYXJuaW5nOiBGb3JtaWsncyBoYW5kbGVDaGFuZ2UgZG9lcyBub3Qgd29yayB3aXRoIFJlYWN0IE5hdGl2ZS4gVXNlIHNldEZpZWxkVmFsdWUgYW5kIHdpdGhpbiBhIGNhbGxiYWNrIGluc3RlYWQuIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXJlZHBhbG1lci9mb3JtaWtodHRwczovL2dpdGh1Yi5jb20vamFyZWRwYWxtZXIvZm9ybWlrI3JlYWN0LW5hdGl2ZWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZS5wZXJzaXN0KCk7XG4gICAgY29uc3QgeyB0eXBlLCBuYW1lLCBpZCwgdmFsdWUsIGNoZWNrZWQsIG91dGVySFRNTCB9ID0gZS50YXJnZXQ7XG4gICAgY29uc3QgZmllbGQgPSBuYW1lID8gbmFtZSA6IGlkO1xuICAgIGNvbnN0IHZhbCA9IC9udW1iZXJ8cmFuZ2UvLnRlc3QodHlwZSlcbiAgICAgID8gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgIDogL2NoZWNrYm94Ly50ZXN0KHR5cGUpID8gY2hlY2tlZCA6IHZhbHVlO1xuXG4gICAgaWYgKCFmaWVsZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuQWJvdXRNaXNzaW5nSWRlbnRpZmllcih7XG4gICAgICAgIGh0bWxDb250ZW50OiBvdXRlckhUTUwsXG4gICAgICAgIGRvY3VtZW50YXRpb25BbmNob3JMaW5rOiAnaGFuZGxlY2hhbmdlLWUtcmVhY3RjaGFuZ2VldmVudGFueS0tdm9pZCcsXG4gICAgICAgIGhhbmRsZXJOYW1lOiAnaGFuZGxlQ2hhbmdlJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNldCBmb3JtIGZpZWxkcyBieSBuYW1lXG4gICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAuLi4ocHJldlN0YXRlLnZhbHVlcyBhcyBvYmplY3QpLFxuICAgICAgICBbZmllbGRdOiB2YWwsXG4gICAgICB9LFxuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLnByb3BzLnZhbGlkYXRlT25DaGFuZ2UpIHtcbiAgICAgIHRoaXMucnVuVmFsaWRhdGlvbnMoe1xuICAgICAgICAuLi4odGhpcy5zdGF0ZS52YWx1ZXMgYXMgb2JqZWN0KSxcbiAgICAgICAgW2ZpZWxkXTogdmFsLFxuICAgICAgfSBhcyBPYmplY3QpO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVDaGFuZ2VWYWx1ZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFdhcm5pbmc6IEZvcm1pa1xcJ3MgaGFuZGxlQ2hhbmdlVmFsdWUgaXMgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHJlbGVhc2VzLiBVc2UgRm9ybWlrJ3Mgc2V0RmllbGRWYWx1ZShmaWVsZCwgdmFsdWUpIGFuZCBzZXRGaWVsZFRvdWNoZWQoZmllbGQsIGlzVG91Y2hlZCkgaW5zdGVhZC4gUmVhY3Qgd2lsbCBtZXJnZSB0aGUgdXBkYXRlcyB1bmRlciB0aGUgaG9vZCBhbmQgYXZvaWQgYSBkb3VibGUgcmVuZGVyLiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamFyZWRwYWxtZXIvZm9ybWlrI3NldGZpZWxkdmFsdWUtZmllbGQtc3RyaW5nLXZhbHVlLWFueS0tdm9pZGBcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFNldCB0b3VjaGVkIGFuZCBmb3JtIGZpZWxkcyBieSBuYW1lXG4gICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAuLi4ocHJldlN0YXRlLnZhbHVlcyBhcyBvYmplY3QpLFxuICAgICAgICBbZmllbGRdOiB2YWx1ZSxcbiAgICAgIH0sXG4gICAgICB0b3VjaGVkOiB7XG4gICAgICAgIC4uLihwcmV2U3RhdGUudG91Y2hlZCBhcyBvYmplY3QpLFxuICAgICAgICBbZmllbGRdOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnJ1blZhbGlkYXRpb25TY2hlbWEoe1xuICAgICAgLi4uKHRoaXMuc3RhdGUudmFsdWVzIGFzIG9iamVjdCksXG4gICAgICBbZmllbGRdOiB2YWx1ZSxcbiAgICB9IGFzIG9iamVjdCk7XG4gIH07XG5cbiAgc2V0RmllbGRWYWx1ZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgLy8gU2V0IGZvcm0gZmllbGQgYnkgbmFtZVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAuLi4ocHJldlN0YXRlLnZhbHVlcyBhcyBvYmplY3QpLFxuICAgICAgICAgIFtmaWVsZF06IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbGlkYXRlT25DaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnJ1blZhbGlkYXRpb25zKHtcbiAgICAgICAgICAgIC4uLih0aGlzLnN0YXRlLnZhbHVlcyBhcyBvYmplY3QpLFxuICAgICAgICAgICAgW2ZpZWxkXTogdmFsdWUsXG4gICAgICAgICAgfSBhcyBvYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gIH07XG5cbiAgc3VibWl0Rm9ybSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHRvdWNoZWQ6IHRvdWNoQWxsRmllbGRzPEZvcm1pa1RvdWNoZWQ8VmFsdWVzPj4odGhpcy5zdGF0ZS52YWx1ZXMpLFxuICAgICAgaXNTdWJtaXR0aW5nOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMudmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IG1heWJlUHJvbWlzZWRFcnJvcnMgPVxuICAgICAgICAodGhpcy5wcm9wcy52YWxpZGF0ZSBhcyBhbnkpKHRoaXMuc3RhdGUudmFsdWVzKSB8fCB7fTtcbiAgICAgIGlmIChpc1Byb21pc2UobWF5YmVQcm9taXNlZEVycm9ycykpIHtcbiAgICAgICAgKG1heWJlUHJvbWlzZWRFcnJvcnMgYXMgUHJvbWlzZTxhbnk+KS50aGVuKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcnM6IHt9IH0pO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlU3VibWl0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcnMgPT4gdGhpcy5zZXRTdGF0ZSh7IGVycm9ycywgaXNTdWJtaXR0aW5nOiBmYWxzZSB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gT2JqZWN0LmtleXMobWF5YmVQcm9taXNlZEVycm9ycykubGVuZ3RoID09PSAwO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBlcnJvcnM6IG1heWJlUHJvbWlzZWRFcnJvcnMgYXMgRm9ybWlrRXJyb3JzPFZhbHVlcz4sXG4gICAgICAgICAgaXNTdWJtaXR0aW5nOiBpc1ZhbGlkLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBvbmx5IHN1Ym1pdCBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzXG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5leGVjdXRlU3VibWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudmFsaWRhdGlvblNjaGVtYSkge1xuICAgICAgdGhpcy5ydW5WYWxpZGF0aW9uU2NoZW1hKHRoaXMuc3RhdGUudmFsdWVzLCB0aGlzLmV4ZWN1dGVTdWJtaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4ZWN1dGVTdWJtaXQoKTtcbiAgICB9XG4gIH07XG5cbiAgZXhlY3V0ZVN1Ym1pdCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uU3VibWl0KHRoaXMuc3RhdGUudmFsdWVzLCB7XG4gICAgICByZXNldEZvcm06IHRoaXMucmVzZXRGb3JtLFxuICAgICAgc2V0RXJyb3I6IHRoaXMuc2V0RXJyb3IsXG4gICAgICBzZXRFcnJvcnM6IHRoaXMuc2V0RXJyb3JzLFxuICAgICAgc2V0RmllbGRFcnJvcjogdGhpcy5zZXRGaWVsZEVycm9yLFxuICAgICAgc2V0RmllbGRUb3VjaGVkOiB0aGlzLnNldEZpZWxkVG91Y2hlZCxcbiAgICAgIHNldEZpZWxkVmFsdWU6IHRoaXMuc2V0RmllbGRWYWx1ZSxcbiAgICAgIHNldFN0YXR1czogdGhpcy5zZXRTdGF0dXMsXG4gICAgICBzZXRTdWJtaXR0aW5nOiB0aGlzLnNldFN1Ym1pdHRpbmcsXG4gICAgICBzZXRUb3VjaGVkOiB0aGlzLnNldFRvdWNoZWQsXG4gICAgICBzZXRWYWx1ZXM6IHRoaXMuc2V0VmFsdWVzLFxuICAgICAgc3VibWl0Rm9ybTogdGhpcy5zdWJtaXRGb3JtLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSAoZTogYW55KSA9PiB7XG4gICAgaWYgKGlzUmVhY3ROYXRpdmUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFdhcm5pbmc6IEZvcm1paydzIGhhbmRsZUJsdXIgZG9lcyBub3Qgd29yayB3aXRoIFJlYWN0IE5hdGl2ZS4gVXNlIHNldEZpZWxkVG91Y2hlZChmaWVsZCwgaXNUb3VjaGVkKSB3aXRoaW4gYSBjYWxsYmFjayBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamFyZWRwYWxtZXIvZm9ybWlrI3NldGZpZWxkdG91Y2hlZC1maWVsZC1zdHJpbmctaXN0b3VjaGVkLWJvb2xlYW4tLXZvaWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucGVyc2lzdCgpO1xuICAgIGNvbnN0IHsgbmFtZSwgaWQsIG91dGVySFRNTCB9ID0gZS50YXJnZXQ7XG4gICAgY29uc3QgZmllbGQgPSBuYW1lID8gbmFtZSA6IGlkO1xuXG4gICAgaWYgKCFmaWVsZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuQWJvdXRNaXNzaW5nSWRlbnRpZmllcih7XG4gICAgICAgIGh0bWxDb250ZW50OiBvdXRlckhUTUwsXG4gICAgICAgIGRvY3VtZW50YXRpb25BbmNob3JMaW5rOiAnaGFuZGxlYmx1ci1lLWFueS0tdm9pZCcsXG4gICAgICAgIGhhbmRsZXJOYW1lOiAnaGFuZGxlQmx1cicsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgdG91Y2hlZDogeyAuLi4ocHJldlN0YXRlLnRvdWNoZWQgYXMgb2JqZWN0KSwgW2ZpZWxkXTogdHJ1ZSB9LFxuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLnByb3BzLnZhbGlkYXRlT25CbHVyKSB7XG4gICAgICB0aGlzLnJ1blZhbGlkYXRpb25zKHRoaXMuc3RhdGUudmFsdWVzKTtcbiAgICB9XG4gIH07XG5cbiAgc2V0RmllbGRUb3VjaGVkID0gKGZpZWxkOiBrZXlvZiBWYWx1ZXMsIHRvdWNoZWQ6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XG4gICAgLy8gU2V0IHRvdWNoZWQgZmllbGQgYnkgbmFtZVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICB0b3VjaGVkOiB7XG4gICAgICAgICAgLi4uKHByZXZTdGF0ZS50b3VjaGVkIGFzIG9iamVjdCksXG4gICAgICAgICAgW2ZpZWxkXTogdG91Y2hlZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0ZU9uQmx1cikge1xuICAgICAgICAgIHRoaXMucnVuVmFsaWRhdGlvbnModGhpcy5zdGF0ZS52YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBzZXRGaWVsZEVycm9yID0gKGZpZWxkOiBrZXlvZiBWYWx1ZXMsIG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgIC8vIFNldCBmb3JtIGZpZWxkIGJ5IG5hbWVcbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgZXJyb3JzOiB7XG4gICAgICAgIC4uLihwcmV2U3RhdGUuZXJyb3JzIGFzIG9iamVjdCksXG4gICAgICAgIFtmaWVsZF06IG1lc3NhZ2UsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfTtcblxuICByZXNldEZvcm0gPSAobmV4dFZhbHVlcz86IFZhbHVlcykgPT4ge1xuICAgIGlmIChuZXh0VmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxWYWx1ZXMgPSBuZXh0VmFsdWVzO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICB0b3VjaGVkOiB7fSxcbiAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlczogbmV4dFZhbHVlcyA/IG5leHRWYWx1ZXMgOiB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsXG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlUmVzZXQgPSAoKSA9PiB7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjb21wb25lbnQsIHJlbmRlciwgY2hpbGRyZW4sIGlzSW5pdGlhbFZhbGlkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGRpcnR5ID1cbiAgICAgIHZhbHVlczxib29sZWFuPih0aGlzLnN0YXRlLnRvdWNoZWQpLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIGRpcnR5LFxuICAgICAgaXNWYWxpZDogZGlydHlcbiAgICAgICAgPyB0aGlzLnN0YXRlLmVycm9ycyAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlLmVycm9ycykubGVuZ3RoID09PSAwXG4gICAgICAgIDogaXNJbml0aWFsVmFsaWQgIT09IGZhbHNlICYmIGlzRnVuY3Rpb24oaXNJbml0aWFsVmFsaWQpXG4gICAgICAgICAgPyAoaXNJbml0aWFsVmFsaWQgYXMgKHByb3BzOiBQcm9wcykgPT4gYm9vbGVhbikodGhpcy5wcm9wcylcbiAgICAgICAgICA6IChpc0luaXRpYWxWYWxpZCBhcyBib29sZWFuKSxcbiAgICAgIGhhbmRsZUJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgIGhhbmRsZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICBoYW5kbGVSZXNldDogdGhpcy5oYW5kbGVSZXNldCxcbiAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5oYW5kbGVTdWJtaXQsXG4gICAgICBpbml0aWFsVmFsdWVzOiB0aGlzLmluaXRpYWxWYWx1ZXMsXG4gICAgICByZXNldEZvcm06IHRoaXMucmVzZXRGb3JtLFxuICAgICAgc2V0RXJyb3I6IHRoaXMuc2V0RXJyb3IsXG4gICAgICBzZXRFcnJvcnM6IHRoaXMuc2V0RXJyb3JzLFxuICAgICAgc2V0RmllbGRFcnJvcjogdGhpcy5zZXRGaWVsZEVycm9yLFxuICAgICAgc2V0RmllbGRUb3VjaGVkOiB0aGlzLnNldEZpZWxkVG91Y2hlZCxcbiAgICAgIHNldEZpZWxkVmFsdWU6IHRoaXMuc2V0RmllbGRWYWx1ZSxcbiAgICAgIHNldFN0YXR1czogdGhpcy5zZXRTdGF0dXMsXG4gICAgICBzZXRTdWJtaXR0aW5nOiB0aGlzLnNldFN1Ym1pdHRpbmcsXG4gICAgICBzZXRUb3VjaGVkOiB0aGlzLnNldFRvdWNoZWQsXG4gICAgICBzZXRWYWx1ZXM6IHRoaXMuc2V0VmFsdWVzLFxuICAgICAgc3VibWl0Rm9ybTogdGhpcy5zdWJtaXRGb3JtLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICAgICAgPyBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCBhcyBhbnksIHByb3BzKVxuICAgICAgOiByZW5kZXJcbiAgICAgICAgPyAocmVuZGVyIGFzIGFueSkocHJvcHMpXG4gICAgICAgIDogY2hpbGRyZW4gLy8gY2hpbGRyZW4gY29tZSBsYXN0LCBhbHdheXMgY2FsbGVkXG4gICAgICAgICAgPyB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gKGNoaWxkcmVuIGFzIChwcm9wczogRm9ybWlrUHJvcHM8YW55PikgPT4gUmVhY3QuUmVhY3ROb2RlKShcbiAgICAgICAgICAgICAgICBwcm9wcyBhcyBGb3JtaWtQcm9wczxhbnk+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogIWlzRW1wdHlDaGlsZHJlbihjaGlsZHJlbikgPyBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSA6IG51bGxcbiAgICAgICAgICA6IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybkFib3V0TWlzc2luZ0lkZW50aWZpZXIoe1xuICBodG1sQ29udGVudCxcbiAgZG9jdW1lbnRhdGlvbkFuY2hvckxpbmssXG4gIGhhbmRsZXJOYW1lLFxufToge1xuICBodG1sQ29udGVudDogc3RyaW5nO1xuICBkb2N1bWVudGF0aW9uQW5jaG9yTGluazogc3RyaW5nO1xuICBoYW5kbGVyTmFtZTogc3RyaW5nO1xufSkge1xuICBjb25zb2xlLmVycm9yKFxuICAgIGBXYXJuaW5nOiBcXGAke1xuICAgICAgaGFuZGxlck5hbWVcbiAgICB9XFxgIGhhcyB0cmlnZ2VyZWQgYW5kIHlvdSBmb3Jnb3QgdG8gcGFzcyBhbiBcXGBpZFxcYCBvciBcXGBuYW1lXFxgIGF0dHJpYnV0ZSB0byB5b3VyIGlucHV0OlxuICBcbiAgICAke2h0bWxDb250ZW50fVxuICBcbiAgICBGb3JtaWsgY2Fubm90IGRldGVybWluZSB3aGljaCB2YWx1ZSB0byB1cGRhdGUuIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXJlZHBhbG1lci9mb3JtaWsjJHtcbiAgICAgIGRvY3VtZW50YXRpb25BbmNob3JMaW5rXG4gICAgfVxuICBgXG4gICk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIFl1cCBWYWxpZGF0aW9uRXJyb3IgdG8gYSBtb3JlIHVzYWJsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHl1cFRvRm9ybUVycm9yczxWYWx1ZXM+KHl1cEVycm9yOiBhbnkpOiBGb3JtaWtFcnJvcnM8VmFsdWVzPiB7XG4gIGxldCBlcnJvcnMgPSB7fSBhcyBGb3JtaWtFcnJvcnM8VmFsdWVzPjtcbiAgZm9yIChsZXQgZXJyIG9mIHl1cEVycm9yLmlubmVyKSB7XG4gICAgaWYgKCFlcnJvcnNbZXJyLnBhdGhdKSB7XG4gICAgICBlcnJvcnNbZXJyLnBhdGhdID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSB5dXAgc2NoZW1hLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVZdXBTY2hlbWE8VD4oXG4gIGRhdGE6IFQsXG4gIHNjaGVtYTogYW55LFxuICBjb250ZXh0OiBhbnkgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB2YWxpZGF0ZURhdGE6IGFueSA9IHt9O1xuICBmb3IgKGxldCBrIGluIGRhdGEpIHtcbiAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKGspO1xuICAgICAgdmFsaWRhdGVEYXRhW2tleV0gPVxuICAgICAgICAoZGF0YSBhcyBhbnkpW2tleV0gIT09ICcnID8gKGRhdGEgYXMgYW55KVtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hLnZhbGlkYXRlKHZhbGlkYXRlRGF0YSwgeyBhYm9ydEVhcmx5OiBmYWxzZSwgY29udGV4dDogY29udGV4dCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvdWNoQWxsRmllbGRzPFZhbHVlcz4oZmllbGRzOiBWYWx1ZXMpOiBGb3JtaWtUb3VjaGVkPFZhbHVlcz4ge1xuICBjb25zdCB0b3VjaGVkID0ge30gYXMgRm9ybWlrVG91Y2hlZDxWYWx1ZXM+O1xuICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGZpZWxkcykpIHtcbiAgICB0b3VjaGVkW2tdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdG91Y2hlZDtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi9GaWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL0Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoRm9ybWlrJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUJBO0FBQ0E7QUFDQTtBQURBO0FBR0E7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUNyQ0E7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOzs7O0FBSUE7QUFKQTtBQVpBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUMvREE7Ozs7Ozs7OztBQVdBO0FBRUE7QUFDQTtBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7OztBQUdBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTs7O0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlEQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTs7Ozs7Ozs7QUF5QkE7O0FBRUE7OztBQUdBO0FBSEE7O0FBTUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUE1SEE7QUFDQTtBQUNBO0FBNkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFGQTs7QUFVQTtBQUNBO0FBQUE7QUFHQTtBQUVBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7OztBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7O0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUExQ0E7QUE0Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFhQTtBQUNBO0FBQ0E7QUE0YUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE1YkE7Ozs7QUFpY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE3Y0E7Ozs7QUFrZEE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVEE7QUFwZEE7QUFDQTtBQUNBO0FBZ2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUE1ZUE7QUFDQTtBQ0pBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQWZBOzs7O0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFvQkE7QUFDQTtBQUVBO0FBMUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBUEE7Ozs7QUFjQTtBQUNBO0FBZkE7OztBQW1CQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkJBOzs7QUFHQTs7O0FBR0E7QUFBQTs7O0FBSUE7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7O0FBZ0JBOzs7QUFHQTs7O0FBR0E7OztBQUdBO0FBQ0E7QUFLQTs7O0FBVUE7OztBQUdBOzs7QUFHQTs7O0FBR0E7OztBQUdBOzs7QUFHQTs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBREE7Ozs7QUFPQTs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBREE7QUFHQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7Ozs7QUFHQTtBQUFBO0FBQUE7OztBQUtBOzs7QUFHQTs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTtBQUZBOzs7Ozs7OztBQVVBOzs7QUFHQTs7O0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUFRQTtBQUFBO0FBQUE7OztBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBT0E7QUFBQTs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUFBO0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBOzs7O0FBSUE7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQVRBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1REE7QUFDQTtBQTREQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFmQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBU0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUdBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBTEE7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQWRBO0FBZ0JBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUdBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFHQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFBQTtBQUFBO0FBQ0E7QUFEQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBQ0E7QUFDQTtBQUZBOzs7O0FBTUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUNoQ0E7Ozs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7OztBQUdBO0FBSEE7QUFLQTtBQWxDQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQ2tCQTtBQUFBO0FBQ0E7QUFEQTs7QUF3RUE7QUFDQTtBQTFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFLQTtBQUtBO0FBYkE7QUFDQTtBQWtCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQURBO0FBbENBO0FBQ0E7QUEvQkE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBZ0VBO0FBeEVBO0FBQ0E7QUM5RUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTUE7QUFJQTtBQUVBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2dCQTtBQUNBO0FBQUE7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQ0E7QUFnQkE7QUFLQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBREE7QUFGQTtBQUNBO0FBU0E7QUFDQTtBQURBO0FBQ0E7O0FBZ0JBO0FBQ0E7QUFkQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBSkE7QUFDQTtBQVlBO0FBdENBO0FBQ0E7QUF1Q0E7QUE3Q0E7QUFrREE7QUFDQTtBQ2tCQTtBQUdBO0FBQ0E7QUE4REE7QUFBQTtBQUNBO0FBK0NBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBUkE7QUFMQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBREE7QUFRQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQURBO0FBQ0E7O0FBRkE7QUFDQTtBQU9BO0FBQ0E7QUFJQTtBQUNBOztBQXZDQTtBQUNBO0FBd0NBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFJQTtBQUxBO0FBQ0E7O0FBRkE7QUFDQTtBQVdBO0FBQ0E7O0FBcEJBO0FBQ0E7QUF3QkE7QUFFQTtBQUNBO0FBRUE7QUFEQTtBQUNBOztBQUhBO0FBU0E7QUFDQTtBQUlBO0FBQ0E7O0FBZkE7QUFGQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBT0E7QUFSQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUF5QkE7QUFEQTtBQUdBO0FBQ0E7QUFsQ0E7QUFDQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBREE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7O0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQTNCQTtBQUNBO0FBNkJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFEQTtBQUNBOztBQUhBO0FBU0E7QUFDQTtBQUNBO0FBWEE7QUFGQTtBQUNBO0FBaUJBO0FBRUE7QUFBQTtBQUVBO0FBREE7QUFDQTs7QUFGQTtBQUZBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUxBO0FBQ0E7QUFjQTtBQUNBO0FBREE7QUFDQTtBQTFWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTs7QUFDQTtBQUNBO0FBOUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBRkE7QUFIQTtBQUNBO0FBOENBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUtBO0FBU0E7QUFmQTtBQUNBO0FBdVVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQUNBO0FBdUJBO0FBN0JBO0FBQ0E7QUE5WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFjQTtBQUNBO0FBREE7QUFpYkE7QUExY0E7QUFDQTtBQTJjQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBWUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/formik/dist/formik.es6.js\n"); - -/***/ }), - -/***/ "../node_modules/global/window.js": -/*!****************************************!*\ - !*** ../node_modules/global/window.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\") {\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanM/YmM3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbiA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbiA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgIHdpbiA9IHNlbGY7XG59IGVsc2Uge1xuICAgIHdpbiA9IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/global/window.js\n"); - -/***/ }), - -/***/ "../node_modules/gud/index.js": -/*!************************************!*\ - !*** ../node_modules/gud/index.js ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function () {\n return global[key] = (global[key] || 0) + 1;\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2d1ZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZ3VkL2luZGV4LmpzP2U1MWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbid1c2Ugc3RyaWN0JztcblxudmFyIGtleSA9ICdfX2dsb2JhbF91bmlxdWVfaWRfXyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBnbG9iYWxba2V5XSA9IChnbG9iYWxba2V5XSB8fCAwKSArIDE7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/gud/index.js\n"); - -/***/ }), - -/***/ "../node_modules/hast-to-hyperscript/index.js": -/*!****************************************************!*\ - !*** ../node_modules/hast-to-hyperscript/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar paramCase = __webpack_require__(/*! kebab-case */ \"../node_modules/kebab-case/index.js\");\n\nvar information = __webpack_require__(/*! property-information */ \"../node_modules/property-information/index.js\");\n\nvar spaces = __webpack_require__(/*! space-separated-tokens */ \"../node_modules/space-separated-tokens/index.js\");\n\nvar commas = __webpack_require__(/*! comma-separated-tokens */ \"../node_modules/comma-separated-tokens/index.js\");\n\nvar nan = __webpack_require__(/*! is-nan */ \"../node_modules/is-nan/index.js\");\n\nvar is = __webpack_require__(/*! unist-util-is */ \"../node_modules/unist-util-is/index.js\");\n\nmodule.exports = wrapper;\n\nfunction wrapper(h, node, prefix) {\n var r;\n var v;\n\n if (typeof h !== 'function') {\n throw new Error('h is not a function');\n }\n\n r = react(h);\n v = vdom(h);\n\n if (prefix === null || prefix === undefined) {\n prefix = r === true || v === true ? 'h-' : false;\n }\n\n if (is('root', node)) {\n if (node.children.length === 1 && is('element', node.children[0])) {\n node = node.children[0];\n } else {\n node = {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: node.children\n };\n }\n } else if (!is('element', node)) {\n throw new Error('Expected root or element, not `' + (node && node.type || node) + '`');\n }\n\n return toH(h, node, {\n prefix: prefix,\n key: 0,\n react: r,\n vdom: v,\n hyperscript: hyperscript(h)\n });\n}\n/* Transform a HAST node through a hyperscript interface\n * to *anything*! */\n\n\nfunction toH(h, node, ctx) {\n var selector = node.tagName;\n var properties;\n var attributes;\n var children;\n var property;\n var elements;\n var length;\n var index;\n var value;\n properties = node.properties;\n attributes = {};\n\n for (property in properties) {\n addAttribute(attributes, property, properties[property], ctx);\n }\n\n if (ctx.vdom === true) {\n selector = selector.toUpperCase();\n }\n\n if (ctx.hyperscript === true && attributes.id) {\n selector += '#' + attributes.id;\n delete attributes.id;\n }\n\n if ((ctx.hyperscript === true || ctx.vdom === true) && attributes.className) {\n selector += '.' + spaces.parse(attributes.className).join('.');\n delete attributes.className;\n }\n\n if (typeof attributes.style === 'string') {\n /* VDOM expects a `string` style in `attributes`\n * See https://github.com/Matt-Esch/virtual-dom/blob/947ecf9/\n * docs/vnode.md#propertiesstyle-vs-propertiesattributesstyle */\n if (ctx.vdom === true) {\n if (!attributes.attributes) {\n attributes.attributes = {};\n }\n\n attributes.attributes.style = attributes.style;\n delete attributes.style;\n /* React only accepts `style` as object. */\n } else if (ctx.react === true) {\n attributes.style = parseStyle(attributes.style);\n }\n }\n\n if (ctx.prefix) {\n ctx.key++;\n attributes.key = ctx.prefix + ctx.key;\n }\n\n elements = [];\n children = node.children || [];\n length = children.length;\n index = -1;\n\n while (++index < length) {\n value = children[index];\n\n if (is('element', value)) {\n elements.push(toH(h, value, ctx));\n } else if (is('text', value)) {\n elements.push(value.value);\n }\n }\n /* Ensure no React warnings are triggered for\n * void elements having children passed in. */\n\n\n return elements.length === 0 ? h(selector, attributes) : h(selector, attributes, elements);\n}\n/* Add `name` and its `value` to `props`. */\n\n\nfunction addAttribute(props, name, value, ctx) {\n var info = information(name) || {};\n var subprop;\n /* Ignore nully, `false`, `NaN`, and falsey known\n * booleans. */\n\n if (value === null || value === undefined || value === false || nan(value) || info[\"boolean\"] && !value) {\n return;\n }\n\n if (info.name) {\n name = info.name;\n } else if (ctx.react && !paramCasedReactProp(name)) {\n name = camelCase(name);\n } else {\n name = paramCase(name);\n }\n\n if (value !== null && _typeof(value) === 'object' && 'length' in value) {\n /* Accept `array`. Most props are space-separater. */\n value = (info.commaSeparated ? commas : spaces).stringify(value);\n }\n /* Treat `true` and truthy known booleans. */\n\n\n if (info[\"boolean\"] && ctx.hyperscript === true) {\n value = '';\n }\n\n if (info.name !== 'class' && (info.mustUseAttribute || !info.name)) {\n if (ctx.vdom === true) {\n subprop = 'attributes';\n } else if (ctx.hyperscript === true) {\n subprop = 'attrs';\n }\n\n if (subprop) {\n if (props[subprop] === undefined) {\n props[subprop] = {};\n }\n\n props[subprop][name] = value;\n return;\n }\n }\n\n props[info.propertyName || name] = value;\n}\n/* Check if `h` is `react.createElement`. It doesn’t accept\n * `class` as an attribute, it must be added through the\n * `selector`. */\n\n\nfunction react(h) {\n var node = h && h('div');\n return Boolean(node && ('_owner' in node || '_store' in node) && node.key === null);\n}\n/* Check if `h` is `hyperscript`. It doesn’t accept\n * `class` as an attribute, it must be added through the\n * `selector`. */\n\n\nfunction hyperscript(h) {\n return Boolean(h && h.context && h.cleanup);\n}\n/**\n * Check if `h` is `virtual-dom/h`. It’s the only\n * hyperscript “compatible” interface needing `attributes`. */\n\n\nfunction vdom(h) {\n try {\n return h('div').type === 'VirtualNode';\n } catch (err) {}\n /* Empty */\n\n /* istanbul ignore next */\n\n\n return false;\n}\n\nfunction parseStyle(value) {\n var result = {};\n var declarations = value.split(';');\n var length = declarations.length;\n var index = -1;\n var declaration;\n var prop;\n var pos;\n\n while (++index < length) {\n declaration = declarations[index];\n pos = declaration.indexOf(':');\n\n if (pos !== -1) {\n prop = camelCase(trim(declaration.slice(0, pos)));\n result[prop] = trim(declaration.slice(pos + 1));\n }\n }\n\n return result;\n}\n\nfunction paramCasedReactProp(name) {\n var head = name.slice(0, 4);\n return (head === 'data' || head === 'aria') && name.length > 4;\n}\n\nfunction camelCase(val) {\n if (val.slice(0, 4) === '-ms-') {\n val = 'ms-' + val.slice(4);\n }\n\n return val.replace(/-([a-z])/g, replace);\n}\n\nfunction replace($0, $1) {\n return $1.toUpperCase();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hhc3QtdG8taHlwZXJzY3JpcHQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2hhc3QtdG8taHlwZXJzY3JpcHQvaW5kZXguanM/ZWE1MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0cmltID0gcmVxdWlyZSgndHJpbScpO1xudmFyIHBhcmFtQ2FzZSA9IHJlcXVpcmUoJ2tlYmFiLWNhc2UnKTtcbnZhciBpbmZvcm1hdGlvbiA9IHJlcXVpcmUoJ3Byb3BlcnR5LWluZm9ybWF0aW9uJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnc3BhY2Utc2VwYXJhdGVkLXRva2VucycpO1xudmFyIGNvbW1hcyA9IHJlcXVpcmUoJ2NvbW1hLXNlcGFyYXRlZC10b2tlbnMnKTtcbnZhciBuYW4gPSByZXF1aXJlKCdpcy1uYW4nKTtcbnZhciBpcyA9IHJlcXVpcmUoJ3VuaXN0LXV0aWwtaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyO1xuXG5mdW5jdGlvbiB3cmFwcGVyKGgsIG5vZGUsIHByZWZpeCkge1xuICB2YXIgcjtcbiAgdmFyIHY7XG5cbiAgaWYgKHR5cGVvZiBoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICByID0gcmVhY3QoaCk7XG4gIHYgPSB2ZG9tKGgpO1xuXG4gIGlmIChwcmVmaXggPT09IG51bGwgfHwgcHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICBwcmVmaXggPSByID09PSB0cnVlIHx8IHYgPT09IHRydWUgPyAnaC0nIDogZmFsc2U7XG4gIH1cblxuICBpZiAoaXMoJ3Jvb3QnLCBub2RlKSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBpcygnZWxlbWVudCcsIG5vZGUuY2hpbGRyZW5bMF0pKSB7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZHJlblswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZSA9IHtcbiAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICB0YWdOYW1lOiAnZGl2JyxcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIGNoaWxkcmVuOiBub2RlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIGlmICghaXMoJ2VsZW1lbnQnLCBub2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcm9vdCBvciBlbGVtZW50LCBub3QgYCcgKyAoKG5vZGUgJiYgbm9kZS50eXBlKSB8fCBub2RlKSArICdgJyk7XG4gIH1cblxuICByZXR1cm4gdG9IKGgsIG5vZGUsIHtcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBrZXk6IDAsXG4gICAgcmVhY3Q6IHIsXG4gICAgdmRvbTogdixcbiAgICBoeXBlcnNjcmlwdDogaHlwZXJzY3JpcHQoaClcbiAgfSk7XG59XG5cbi8qIFRyYW5zZm9ybSBhIEhBU1Qgbm9kZSB0aHJvdWdoIGEgaHlwZXJzY3JpcHQgaW50ZXJmYWNlXG4gKiB0byAqYW55dGhpbmcqISAqL1xuZnVuY3Rpb24gdG9IKGgsIG5vZGUsIGN0eCkge1xuICB2YXIgc2VsZWN0b3IgPSBub2RlLnRhZ05hbWU7XG4gIHZhciBwcm9wZXJ0aWVzO1xuICB2YXIgYXR0cmlidXRlcztcbiAgdmFyIGNoaWxkcmVuO1xuICB2YXIgcHJvcGVydHk7XG4gIHZhciBlbGVtZW50cztcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIGluZGV4O1xuICB2YXIgdmFsdWU7XG5cbiAgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcztcbiAgYXR0cmlidXRlcyA9IHt9O1xuXG4gIGZvciAocHJvcGVydHkgaW4gcHJvcGVydGllcykge1xuICAgIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGVzLCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0sIGN0eCk7XG4gIH1cblxuICBpZiAoY3R4LnZkb20gPT09IHRydWUpIHtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBpZiAoY3R4Lmh5cGVyc2NyaXB0ID09PSB0cnVlICYmIGF0dHJpYnV0ZXMuaWQpIHtcbiAgICBzZWxlY3RvciArPSAnIycgKyBhdHRyaWJ1dGVzLmlkO1xuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmlkO1xuICB9XG5cbiAgaWYgKChjdHguaHlwZXJzY3JpcHQgPT09IHRydWUgfHwgY3R4LnZkb20gPT09IHRydWUpICYmIGF0dHJpYnV0ZXMuY2xhc3NOYW1lKSB7XG4gICAgc2VsZWN0b3IgKz0gJy4nICsgc3BhY2VzLnBhcnNlKGF0dHJpYnV0ZXMuY2xhc3NOYW1lKS5qb2luKCcuJyk7XG4gICAgZGVsZXRlIGF0dHJpYnV0ZXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLnN0eWxlID09PSAnc3RyaW5nJykge1xuICAgIC8qIFZET00gZXhwZWN0cyBhIGBzdHJpbmdgIHN0eWxlIGluIGBhdHRyaWJ1dGVzYFxuICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWF0dC1Fc2NoL3ZpcnR1YWwtZG9tL2Jsb2IvOTQ3ZWNmOS9cbiAgICAgKiBkb2NzL3Zub2RlLm1kI3Byb3BlcnRpZXNzdHlsZS12cy1wcm9wZXJ0aWVzYXR0cmlidXRlc3N0eWxlICovXG4gICAgaWYgKGN0eC52ZG9tID09PSB0cnVlKSB7XG4gICAgICBpZiAoIWF0dHJpYnV0ZXMuYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyaWJ1dGVzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlcy5hdHRyaWJ1dGVzLnN0eWxlID0gYXR0cmlidXRlcy5zdHlsZTtcbiAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnN0eWxlO1xuICAgIC8qIFJlYWN0IG9ubHkgYWNjZXB0cyBgc3R5bGVgIGFzIG9iamVjdC4gKi9cbiAgICB9IGVsc2UgaWYgKGN0eC5yZWFjdCA9PT0gdHJ1ZSkge1xuICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHBhcnNlU3R5bGUoYXR0cmlidXRlcy5zdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN0eC5wcmVmaXgpIHtcbiAgICBjdHgua2V5Kys7XG4gICAgYXR0cmlidXRlcy5rZXkgPSBjdHgucHJlZml4ICsgY3R4LmtleTtcbiAgfVxuXG4gIGVsZW1lbnRzID0gW107XG4gIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiB8fCBbXTtcbiAgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICBpbmRleCA9IC0xO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFsdWUgPSBjaGlsZHJlbltpbmRleF07XG5cbiAgICBpZiAoaXMoJ2VsZW1lbnQnLCB2YWx1ZSkpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2godG9IKGgsIHZhbHVlLCBjdHgpKTtcbiAgICB9IGVsc2UgaWYgKGlzKCd0ZXh0JywgdmFsdWUpKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKHZhbHVlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiBFbnN1cmUgbm8gUmVhY3Qgd2FybmluZ3MgYXJlIHRyaWdnZXJlZCBmb3JcbiAgICogdm9pZCBlbGVtZW50cyBoYXZpbmcgY2hpbGRyZW4gcGFzc2VkIGluLiAqL1xuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoID09PSAwID8gaChzZWxlY3RvciwgYXR0cmlidXRlcykgOiBoKHNlbGVjdG9yLCBhdHRyaWJ1dGVzLCBlbGVtZW50cyk7XG59XG5cbi8qIEFkZCBgbmFtZWAgYW5kIGl0cyBgdmFsdWVgIHRvIGBwcm9wc2AuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUocHJvcHMsIG5hbWUsIHZhbHVlLCBjdHgpIHtcbiAgdmFyIGluZm8gPSBpbmZvcm1hdGlvbihuYW1lKSB8fCB7fTtcbiAgdmFyIHN1YnByb3A7XG5cbiAgLyogSWdub3JlIG51bGx5LCBgZmFsc2VgLCBgTmFOYCwgYW5kIGZhbHNleSBrbm93blxuICAgKiBib29sZWFucy4gKi9cbiAgaWYgKFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgIG5hbih2YWx1ZSkgfHxcbiAgICAoaW5mby5ib29sZWFuICYmICF2YWx1ZSlcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8ubmFtZSkge1xuICAgIG5hbWUgPSBpbmZvLm5hbWU7XG4gIH0gZWxzZSBpZiAoY3R4LnJlYWN0ICYmICFwYXJhbUNhc2VkUmVhY3RQcm9wKG5hbWUpKSB7XG4gICAgbmFtZSA9IGNhbWVsQ2FzZShuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBuYW1lID0gcGFyYW1DYXNlKG5hbWUpO1xuICB9XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gdmFsdWUpIHtcbiAgICAvKiBBY2NlcHQgYGFycmF5YC4gIE1vc3QgcHJvcHMgYXJlIHNwYWNlLXNlcGFyYXRlci4gKi9cbiAgICB2YWx1ZSA9IChpbmZvLmNvbW1hU2VwYXJhdGVkID8gY29tbWFzIDogc3BhY2VzKS5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG5cbiAgLyogVHJlYXQgYHRydWVgIGFuZCB0cnV0aHkga25vd24gYm9vbGVhbnMuICovXG4gIGlmIChpbmZvLmJvb2xlYW4gJiYgY3R4Lmh5cGVyc2NyaXB0ID09PSB0cnVlKSB7XG4gICAgdmFsdWUgPSAnJztcbiAgfVxuXG4gIGlmIChpbmZvLm5hbWUgIT09ICdjbGFzcycgJiYgKGluZm8ubXVzdFVzZUF0dHJpYnV0ZSB8fCAhaW5mby5uYW1lKSkge1xuICAgIGlmIChjdHgudmRvbSA9PT0gdHJ1ZSkge1xuICAgICAgc3VicHJvcCA9ICdhdHRyaWJ1dGVzJztcbiAgICB9IGVsc2UgaWYgKGN0eC5oeXBlcnNjcmlwdCA9PT0gdHJ1ZSkge1xuICAgICAgc3VicHJvcCA9ICdhdHRycyc7XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb3ApIHtcbiAgICAgIGlmIChwcm9wc1tzdWJwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3N1YnByb3BdID0ge307XG4gICAgICB9XG5cbiAgICAgIHByb3BzW3N1YnByb3BdW25hbWVdID0gdmFsdWU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm9wc1tpbmZvLnByb3BlcnR5TmFtZSB8fCBuYW1lXSA9IHZhbHVlO1xufVxuXG4vKiBDaGVjayBpZiBgaGAgaXMgYHJlYWN0LmNyZWF0ZUVsZW1lbnRgLiAgSXQgZG9lc27igJl0IGFjY2VwdFxuICogYGNsYXNzYCBhcyBhbiBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgYWRkZWQgdGhyb3VnaCB0aGVcbiAqIGBzZWxlY3RvcmAuICovXG5mdW5jdGlvbiByZWFjdChoKSB7XG4gIHZhciBub2RlID0gaCAmJiBoKCdkaXYnKTtcbiAgcmV0dXJuIEJvb2xlYW4obm9kZSAmJiAoJ19vd25lcicgaW4gbm9kZSB8fCAnX3N0b3JlJyBpbiBub2RlKSAmJiBub2RlLmtleSA9PT0gbnVsbCk7XG59XG5cbi8qIENoZWNrIGlmIGBoYCBpcyBgaHlwZXJzY3JpcHRgLiAgSXQgZG9lc27igJl0IGFjY2VwdFxuICogYGNsYXNzYCBhcyBhbiBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgYWRkZWQgdGhyb3VnaCB0aGVcbiAqIGBzZWxlY3RvcmAuICovXG5mdW5jdGlvbiBoeXBlcnNjcmlwdChoKSB7XG4gIHJldHVybiBCb29sZWFuKGggJiYgaC5jb250ZXh0ICYmIGguY2xlYW51cCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYGhgIGlzIGB2aXJ0dWFsLWRvbS9oYC4gIEl04oCZcyB0aGUgb25seVxuICogaHlwZXJzY3JpcHQg4oCcY29tcGF0aWJsZeKAnSBpbnRlcmZhY2UgbmVlZGluZyBgYXR0cmlidXRlc2AuICovXG5mdW5jdGlvbiB2ZG9tKGgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaCgnZGl2JykudHlwZSA9PT0gJ1ZpcnR1YWxOb2RlJztcbiAgfSBjYXRjaCAoZXJyKSB7IC8qIEVtcHR5ICovIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUodmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgZGVjbGFyYXRpb25zID0gdmFsdWUuc3BsaXQoJzsnKTtcbiAgdmFyIGxlbmd0aCA9IGRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgZGVjbGFyYXRpb247XG4gIHZhciBwcm9wO1xuICB2YXIgcG9zO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbnNbaW5kZXhdO1xuICAgIHBvcyA9IGRlY2xhcmF0aW9uLmluZGV4T2YoJzonKTtcbiAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgcHJvcCA9IGNhbWVsQ2FzZSh0cmltKGRlY2xhcmF0aW9uLnNsaWNlKDAsIHBvcykpKTtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IHRyaW0oZGVjbGFyYXRpb24uc2xpY2UocG9zICsgMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcmFtQ2FzZWRSZWFjdFByb3AobmFtZSkge1xuICB2YXIgaGVhZCA9IG5hbWUuc2xpY2UoMCwgNCk7XG4gIHJldHVybiAoaGVhZCA9PT0gJ2RhdGEnIHx8IGhlYWQgPT09ICdhcmlhJykgJiYgbmFtZS5sZW5ndGggPiA0O1xufVxuXG5mdW5jdGlvbiBjYW1lbENhc2UodmFsKSB7XG4gIGlmICh2YWwuc2xpY2UoMCwgNCkgPT09ICctbXMtJykge1xuICAgIHZhbCA9ICdtcy0nICsgdmFsLnNsaWNlKDQpO1xuICB9XG5cbiAgcmV0dXJuIHZhbC5yZXBsYWNlKC8tKFthLXpdKS9nLCByZXBsYWNlKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZSgkMCwgJDEpIHtcbiAgcmV0dXJuICQxLnRvVXBwZXJDYXNlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/hast-to-hyperscript/index.js\n"); - -/***/ }), - -/***/ "../node_modules/hast-util-sanitize/index.js": -/*!***************************************************!*\ - !*** ../node_modules/hast-util-sanitize/index.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = __webpack_require__(/*! ./lib */ \"../node_modules/hast-util-sanitize/lib/index.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzPzQ2M2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliJylcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/hast-util-sanitize/index.js\n"); - -/***/ }), - -/***/ "../node_modules/hast-util-sanitize/lib/github.json": -/*!**********************************************************!*\ - !*** ../node_modules/hast-util-sanitize/lib/github.json ***! - \**********************************************************/ -/*! exports provided: strip, clobberPrefix, clobber, ancestors, protocols, tagNames, attributes, required, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"strip\\\":[\\\"script\\\"],\\\"clobberPrefix\\\":\\\"user-content-\\\",\\\"clobber\\\":[\\\"name\\\",\\\"id\\\"],\\\"ancestors\\\":{\\\"li\\\":[\\\"ol\\\",\\\"ul\\\"],\\\"tbody\\\":[\\\"table\\\"],\\\"tfoot\\\":[\\\"table\\\"],\\\"thead\\\":[\\\"table\\\"],\\\"td\\\":[\\\"table\\\"],\\\"th\\\":[\\\"table\\\"],\\\"tr\\\":[\\\"table\\\"]},\\\"protocols\\\":{\\\"href\\\":[\\\"http\\\",\\\"https\\\",\\\"mailto\\\"],\\\"cite\\\":[\\\"http\\\",\\\"https\\\"],\\\"src\\\":[\\\"http\\\",\\\"https\\\"],\\\"longDesc\\\":[\\\"http\\\",\\\"https\\\"]},\\\"tagNames\\\":[\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\",\\\"h7\\\",\\\"h8\\\",\\\"br\\\",\\\"b\\\",\\\"i\\\",\\\"strong\\\",\\\"em\\\",\\\"a\\\",\\\"pre\\\",\\\"code\\\",\\\"img\\\",\\\"tt\\\",\\\"div\\\",\\\"ins\\\",\\\"del\\\",\\\"sup\\\",\\\"sub\\\",\\\"p\\\",\\\"ol\\\",\\\"ul\\\",\\\"table\\\",\\\"thead\\\",\\\"tbody\\\",\\\"tfoot\\\",\\\"blockquote\\\",\\\"dl\\\",\\\"dt\\\",\\\"dd\\\",\\\"kbd\\\",\\\"q\\\",\\\"samp\\\",\\\"var\\\",\\\"hr\\\",\\\"ruby\\\",\\\"rt\\\",\\\"rp\\\",\\\"li\\\",\\\"tr\\\",\\\"td\\\",\\\"th\\\",\\\"s\\\",\\\"strike\\\",\\\"summary\\\",\\\"details\\\",\\\"input\\\"],\\\"attributes\\\":{\\\"a\\\":[\\\"href\\\"],\\\"img\\\":[\\\"src\\\",\\\"longDesc\\\"],\\\"input\\\":[[\\\"type\\\",\\\"checkbox\\\"],[\\\"disabled\\\",true]],\\\"li\\\":[[\\\"className\\\",\\\"task-list-item\\\"]],\\\"div\\\":[\\\"itemScope\\\",\\\"itemType\\\"],\\\"blockquote\\\":[\\\"cite\\\"],\\\"del\\\":[\\\"cite\\\"],\\\"ins\\\":[\\\"cite\\\"],\\\"q\\\":[\\\"cite\\\"],\\\"*\\\":[\\\"abbr\\\",\\\"accept\\\",\\\"acceptCharset\\\",\\\"accessKey\\\",\\\"action\\\",\\\"align\\\",\\\"alt\\\",\\\"axis\\\",\\\"border\\\",\\\"cellPadding\\\",\\\"cellSpacing\\\",\\\"char\\\",\\\"charoff\\\",\\\"charSet\\\",\\\"checked\\\",\\\"clear\\\",\\\"cols\\\",\\\"colSpan\\\",\\\"color\\\",\\\"compact\\\",\\\"coords\\\",\\\"dateTime\\\",\\\"dir\\\",\\\"disabled\\\",\\\"encType\\\",\\\"htmlFor\\\",\\\"frame\\\",\\\"headers\\\",\\\"height\\\",\\\"hrefLang\\\",\\\"hspace\\\",\\\"isMap\\\",\\\"id\\\",\\\"label\\\",\\\"lang\\\",\\\"maxLength\\\",\\\"media\\\",\\\"method\\\",\\\"multiple\\\",\\\"name\\\",\\\"nohref\\\",\\\"noshade\\\",\\\"nowrap\\\",\\\"open\\\",\\\"prompt\\\",\\\"readOnly\\\",\\\"rel\\\",\\\"rev\\\",\\\"rows\\\",\\\"rowSpan\\\",\\\"rules\\\",\\\"scope\\\",\\\"selected\\\",\\\"shape\\\",\\\"size\\\",\\\"span\\\",\\\"start\\\",\\\"summary\\\",\\\"tabIndex\\\",\\\"target\\\",\\\"title\\\",\\\"type\\\",\\\"useMap\\\",\\\"valign\\\",\\\"value\\\",\\\"vspace\\\",\\\"width\\\",\\\"itemProp\\\"]},\\\"required\\\":{\\\"input\\\":{\\\"type\\\":\\\"checkbox\\\",\\\"disabled\\\":true}}}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvZ2l0aHViLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/hast-util-sanitize/lib/github.json\n"); - -/***/ }), - -/***/ "../node_modules/hast-util-sanitize/lib/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/hast-util-sanitize/lib/index.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar defaults = __webpack_require__(/*! ./github.json */ \"../node_modules/hast-util-sanitize/lib/github.json\");\n\nmodule.exports = wrapper;\nvar own = {}.hasOwnProperty;\nvar allData = 'data*';\nvar nodeSchema = {\n root: {\n children: all\n },\n doctype: handleDoctype,\n comment: handleComment,\n element: {\n tagName: handleTagName,\n properties: handleProperties,\n children: all\n },\n text: {\n value: handleValue\n },\n '*': {\n data: allow,\n position: allow\n }\n}; // Sanitize `node`, according to `schema`.\n\nfunction wrapper(node, schema) {\n var ctx = {\n type: 'root',\n children: []\n };\n var replace;\n\n if (!node || _typeof(node) !== 'object' || !node.type) {\n return ctx;\n }\n\n replace = one(xtend(defaults, schema || {}), node, []);\n\n if (!replace) {\n return ctx;\n }\n\n if ('length' in replace) {\n if (replace.length === 1) {\n return replace[0];\n }\n\n ctx.children = replace;\n return ctx;\n }\n\n return replace;\n} // Sanitize `node`.\n\n\nfunction one(schema, node, stack) {\n var type = node && node.type;\n var replacement = {\n type: node.type\n };\n var replace = true;\n var definition;\n var allowed;\n var result;\n var key;\n\n if (!own.call(nodeSchema, type)) {\n replace = false;\n } else {\n definition = nodeSchema[type];\n\n if (typeof definition === 'function') {\n definition = definition(schema, node);\n }\n\n if (!definition) {\n replace = false;\n } else {\n allowed = xtend(definition, nodeSchema['*']);\n\n for (key in allowed) {\n result = allowed[key](schema, node[key], node, stack);\n\n if (result === false) {\n replace = false; // Set the non-safe value.\n\n replacement[key] = node[key];\n } else if (result !== null && result !== undefined) {\n replacement[key] = result;\n }\n }\n }\n }\n\n if (!replace) {\n if (!replacement.children || replacement.children.length === 0 || schema.strip.indexOf(replacement.tagName) !== -1) {\n return null;\n }\n\n return replacement.children;\n }\n\n return replacement;\n} // Sanitize `children`.\n\n\nfunction all(schema, children, node, stack) {\n var nodes = children || [];\n var length = nodes.length || 0;\n var results = [];\n var index = -1;\n var result;\n stack = stack.concat(node.tagName);\n\n while (++index < length) {\n result = one(schema, nodes[index], stack);\n\n if (result) {\n if ('length' in result) {\n results = results.concat(result);\n } else {\n results.push(result);\n }\n }\n }\n\n return results;\n} // Sanitize `properties`.\n\n\nfunction handleProperties(schema, properties, node, stack) {\n var name = handleTagName(schema, node.tagName, node, stack);\n var attrs = schema.attributes;\n var reqs = schema.required ||\n /* istanbul ignore next */\n {};\n var props = properties || {};\n var result = {};\n var allowed;\n var required;\n var definition;\n var prop;\n var value;\n allowed = xtend(toPropertyValueMap(attrs['*']), toPropertyValueMap(own.call(attrs, name) ? attrs[name] : []));\n\n for (prop in props) {\n value = props[prop];\n\n if (own.call(allowed, prop)) {\n definition = allowed[prop];\n } else if (data(prop) && own.call(allowed, allData)) {\n definition = allowed[allData];\n } else {\n continue;\n }\n\n if (value && _typeof(value) === 'object' && 'length' in value) {\n value = handlePropertyValues(schema, value, prop, definition);\n } else {\n value = handlePropertyValue(schema, value, prop, definition);\n }\n\n if (value !== null && value !== undefined) {\n result[prop] = value;\n }\n }\n\n required = own.call(reqs, name) ? reqs[name] : {};\n\n for (prop in required) {\n if (!own.call(result, prop)) {\n result[prop] = required[prop];\n }\n }\n\n return result;\n} // Sanitize a property value which is a list.\n\n\nfunction handlePropertyValues(schema, values, prop, definition) {\n var length = values.length;\n var result = [];\n var index = -1;\n var value;\n\n while (++index < length) {\n value = handlePropertyValue(schema, values[index], prop, definition);\n\n if (value !== null && value !== undefined) {\n result.push(value);\n }\n }\n\n return result;\n} // Sanitize a property value.\n\n\nfunction handlePropertyValue(schema, value, prop, definition) {\n if (typeof value !== 'boolean' && typeof value !== 'number' && typeof value !== 'string') {\n return null;\n }\n\n if (!handleProtocol(schema, value, prop)) {\n return null;\n }\n\n if (definition.length !== 0 && definition.indexOf(value) === -1) {\n return null;\n }\n\n if (schema.clobber.indexOf(prop) !== -1) {\n value = schema.clobberPrefix + value;\n }\n\n return value;\n} // Check whether `value` is a safe URL.\n\n\nfunction handleProtocol(schema, value, prop) {\n var protocols = schema.protocols;\n var protocol;\n var first;\n var colon;\n var length;\n var index;\n protocols = own.call(protocols, prop) ? protocols[prop].concat() : [];\n\n if (protocols.length === 0) {\n return true;\n }\n\n value = String(value);\n first = value.charAt(0);\n\n if (first === '#' || first === '/') {\n return true;\n }\n\n colon = value.indexOf(':');\n\n if (colon === -1) {\n return true;\n }\n\n length = protocols.length;\n index = -1;\n\n while (++index < length) {\n protocol = protocols[index];\n\n if (colon === protocol.length && value.slice(0, protocol.length) === protocol) {\n return true;\n }\n }\n\n index = value.indexOf('?');\n\n if (index !== -1 && colon > index) {\n return true;\n }\n\n index = value.indexOf('#');\n\n if (index !== -1 && colon > index) {\n return true;\n }\n\n return false;\n} // Always return a valid HTML5 doctype.\n\n\nfunction handleDoctypeName() {\n return 'html';\n} // Sanitize `tagName`.\n\n\nfunction handleTagName(schema, tagName, node, stack) {\n var name = typeof tagName === 'string' ? tagName : null;\n var ancestors = schema.ancestors;\n var length;\n var index;\n\n if (!name || name === '*' || schema.tagNames.indexOf(name) === -1) {\n return false;\n }\n\n ancestors = own.call(ancestors, name) ? ancestors[name] : []; // Some nodes can break out of their context if they don’t have a certain\n // ancestor.\n\n if (ancestors.length !== 0) {\n length = ancestors.length + 1;\n index = -1;\n\n while (++index < length) {\n if (!ancestors[index]) {\n return false;\n }\n\n if (stack.indexOf(ancestors[index]) !== -1) {\n break;\n }\n }\n }\n\n return name;\n}\n\nfunction handleDoctype(schema) {\n return schema.allowDoctypes ? {\n name: handleDoctypeName\n } : null;\n}\n\nfunction handleComment(schema) {\n return schema.allowComments ? {\n value: handleValue\n } : null;\n} // Sanitize `value`.\n\n\nfunction handleValue(schema, value) {\n return typeof value === 'string' ? value : '';\n} // Create a map from a list of props or a list of properties and values.\n\n\nfunction toPropertyValueMap(values) {\n var result = {};\n var length = values.length;\n var index = -1;\n var value;\n\n while (++index < length) {\n value = values[index];\n\n if (value && _typeof(value) === 'object' && 'length' in value) {\n result[value[0]] = value.slice(1);\n } else {\n result[value] = [];\n }\n }\n\n return result;\n} // Allow `value`.\n\n\nfunction allow(schema, value) {\n return value;\n} // Check if `prop` is a data property.\n\n\nfunction data(prop) {\n return prop.length > 4 && prop.slice(0, 4).toLowerCase() === 'data';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanM/ZjU0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9naXRodWIuanNvbicpXG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlclxuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHlcblxudmFyIGFsbERhdGEgPSAnZGF0YSonXG5cbnZhciBub2RlU2NoZW1hID0ge1xuICByb290OiB7Y2hpbGRyZW46IGFsbH0sXG4gIGRvY3R5cGU6IGhhbmRsZURvY3R5cGUsXG4gIGNvbW1lbnQ6IGhhbmRsZUNvbW1lbnQsXG4gIGVsZW1lbnQ6IHtcbiAgICB0YWdOYW1lOiBoYW5kbGVUYWdOYW1lLFxuICAgIHByb3BlcnRpZXM6IGhhbmRsZVByb3BlcnRpZXMsXG4gICAgY2hpbGRyZW46IGFsbFxuICB9LFxuICB0ZXh0OiB7dmFsdWU6IGhhbmRsZVZhbHVlfSxcbiAgJyonOiB7XG4gICAgZGF0YTogYWxsb3csXG4gICAgcG9zaXRpb246IGFsbG93XG4gIH1cbn1cblxuLy8gU2FuaXRpemUgYG5vZGVgLCBhY2NvcmRpbmcgdG8gYHNjaGVtYWAuXG5mdW5jdGlvbiB3cmFwcGVyKG5vZGUsIHNjaGVtYSkge1xuICB2YXIgY3R4ID0ge3R5cGU6ICdyb290JywgY2hpbGRyZW46IFtdfVxuICB2YXIgcmVwbGFjZVxuXG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgIW5vZGUudHlwZSkge1xuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHJlcGxhY2UgPSBvbmUoeHRlbmQoZGVmYXVsdHMsIHNjaGVtYSB8fCB7fSksIG5vZGUsIFtdKVxuXG4gIGlmICghcmVwbGFjZSkge1xuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIGlmICgnbGVuZ3RoJyBpbiByZXBsYWNlKSB7XG4gICAgaWYgKHJlcGxhY2UubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcmVwbGFjZVswXVxuICAgIH1cblxuICAgIGN0eC5jaGlsZHJlbiA9IHJlcGxhY2VcblxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlXG59XG5cbi8vIFNhbml0aXplIGBub2RlYC5cbmZ1bmN0aW9uIG9uZShzY2hlbWEsIG5vZGUsIHN0YWNrKSB7XG4gIHZhciB0eXBlID0gbm9kZSAmJiBub2RlLnR5cGVcbiAgdmFyIHJlcGxhY2VtZW50ID0ge3R5cGU6IG5vZGUudHlwZX1cbiAgdmFyIHJlcGxhY2UgPSB0cnVlXG4gIHZhciBkZWZpbml0aW9uXG4gIHZhciBhbGxvd2VkXG4gIHZhciByZXN1bHRcbiAgdmFyIGtleVxuXG4gIGlmICghb3duLmNhbGwobm9kZVNjaGVtYSwgdHlwZSkpIHtcbiAgICByZXBsYWNlID0gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBkZWZpbml0aW9uID0gbm9kZVNjaGVtYVt0eXBlXVxuXG4gICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbihzY2hlbWEsIG5vZGUpXG4gICAgfVxuXG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICByZXBsYWNlID0gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsb3dlZCA9IHh0ZW5kKGRlZmluaXRpb24sIG5vZGVTY2hlbWFbJyonXSlcblxuICAgICAgZm9yIChrZXkgaW4gYWxsb3dlZCkge1xuICAgICAgICByZXN1bHQgPSBhbGxvd2VkW2tleV0oc2NoZW1hLCBub2RlW2tleV0sIG5vZGUsIHN0YWNrKVxuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVwbGFjZSA9IGZhbHNlXG5cbiAgICAgICAgICAvLyBTZXQgdGhlIG5vbi1zYWZlIHZhbHVlLlxuICAgICAgICAgIHJlcGxhY2VtZW50W2tleV0gPSBub2RlW2tleV1cbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXBsYWNlbWVudFtrZXldID0gcmVzdWx0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXJlcGxhY2UpIHtcbiAgICBpZiAoXG4gICAgICAhcmVwbGFjZW1lbnQuY2hpbGRyZW4gfHxcbiAgICAgIHJlcGxhY2VtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgc2NoZW1hLnN0cmlwLmluZGV4T2YocmVwbGFjZW1lbnQudGFnTmFtZSkgIT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiByZXBsYWNlbWVudC5jaGlsZHJlblxuICB9XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50XG59XG5cbi8vIFNhbml0aXplIGBjaGlsZHJlbmAuXG5mdW5jdGlvbiBhbGwoc2NoZW1hLCBjaGlsZHJlbiwgbm9kZSwgc3RhY2spIHtcbiAgdmFyIG5vZGVzID0gY2hpbGRyZW4gfHwgW11cbiAgdmFyIGxlbmd0aCA9IG5vZGVzLmxlbmd0aCB8fCAwXG4gIHZhciByZXN1bHRzID0gW11cbiAgdmFyIGluZGV4ID0gLTFcbiAgdmFyIHJlc3VsdFxuXG4gIHN0YWNrID0gc3RhY2suY29uY2F0KG5vZGUudGFnTmFtZSlcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdCA9IG9uZShzY2hlbWEsIG5vZGVzW2luZGV4XSwgc3RhY2spXG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBpZiAoJ2xlbmd0aCcgaW4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChyZXN1bHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzXG59XG5cbi8vIFNhbml0aXplIGBwcm9wZXJ0aWVzYC5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnRpZXMoc2NoZW1hLCBwcm9wZXJ0aWVzLCBub2RlLCBzdGFjaykge1xuICB2YXIgbmFtZSA9IGhhbmRsZVRhZ05hbWUoc2NoZW1hLCBub2RlLnRhZ05hbWUsIG5vZGUsIHN0YWNrKVxuICB2YXIgYXR0cnMgPSBzY2hlbWEuYXR0cmlidXRlc1xuICB2YXIgcmVxcyA9IHNjaGVtYS5yZXF1aXJlZCB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fVxuICB2YXIgcHJvcHMgPSBwcm9wZXJ0aWVzIHx8IHt9XG4gIHZhciByZXN1bHQgPSB7fVxuICB2YXIgYWxsb3dlZFxuICB2YXIgcmVxdWlyZWRcbiAgdmFyIGRlZmluaXRpb25cbiAgdmFyIHByb3BcbiAgdmFyIHZhbHVlXG5cbiAgYWxsb3dlZCA9IHh0ZW5kKFxuICAgIHRvUHJvcGVydHlWYWx1ZU1hcChhdHRyc1snKiddKSxcbiAgICB0b1Byb3BlcnR5VmFsdWVNYXAob3duLmNhbGwoYXR0cnMsIG5hbWUpID8gYXR0cnNbbmFtZV0gOiBbXSlcbiAgKVxuXG4gIGZvciAocHJvcCBpbiBwcm9wcykge1xuICAgIHZhbHVlID0gcHJvcHNbcHJvcF1cblxuICAgIGlmIChvd24uY2FsbChhbGxvd2VkLCBwcm9wKSkge1xuICAgICAgZGVmaW5pdGlvbiA9IGFsbG93ZWRbcHJvcF1cbiAgICB9IGVsc2UgaWYgKGRhdGEocHJvcCkgJiYgb3duLmNhbGwoYWxsb3dlZCwgYWxsRGF0YSkpIHtcbiAgICAgIGRlZmluaXRpb24gPSBhbGxvd2VkW2FsbERhdGFdXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaGFuZGxlUHJvcGVydHlWYWx1ZXMoc2NoZW1hLCB2YWx1ZSwgcHJvcCwgZGVmaW5pdGlvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBoYW5kbGVQcm9wZXJ0eVZhbHVlKHNjaGVtYSwgdmFsdWUsIHByb3AsIGRlZmluaXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcmVxdWlyZWQgPSBvd24uY2FsbChyZXFzLCBuYW1lKSA/IHJlcXNbbmFtZV0gOiB7fVxuXG4gIGZvciAocHJvcCBpbiByZXF1aXJlZCkge1xuICAgIGlmICghb3duLmNhbGwocmVzdWx0LCBwcm9wKSkge1xuICAgICAgcmVzdWx0W3Byb3BdID0gcmVxdWlyZWRbcHJvcF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIFNhbml0aXplIGEgcHJvcGVydHkgdmFsdWUgd2hpY2ggaXMgYSBsaXN0LlxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlWYWx1ZXMoc2NoZW1hLCB2YWx1ZXMsIHByb3AsIGRlZmluaXRpb24pIHtcbiAgdmFyIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGhcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciB2YWx1ZVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFsdWUgPSBoYW5kbGVQcm9wZXJ0eVZhbHVlKHNjaGVtYSwgdmFsdWVzW2luZGV4XSwgcHJvcCwgZGVmaW5pdGlvbilcblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIFNhbml0aXplIGEgcHJvcGVydHkgdmFsdWUuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eVZhbHVlKHNjaGVtYSwgdmFsdWUsIHByb3AsIGRlZmluaXRpb24pIHtcbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmXG4gICAgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmICghaGFuZGxlUHJvdG9jb2woc2NoZW1hLCB2YWx1ZSwgcHJvcCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKGRlZmluaXRpb24ubGVuZ3RoICE9PSAwICYmIGRlZmluaXRpb24uaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmIChzY2hlbWEuY2xvYmJlci5pbmRleE9mKHByb3ApICE9PSAtMSkge1xuICAgIHZhbHVlID0gc2NoZW1hLmNsb2JiZXJQcmVmaXggKyB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIENoZWNrIHdoZXRoZXIgYHZhbHVlYCBpcyBhIHNhZmUgVVJMLlxuZnVuY3Rpb24gaGFuZGxlUHJvdG9jb2woc2NoZW1hLCB2YWx1ZSwgcHJvcCkge1xuICB2YXIgcHJvdG9jb2xzID0gc2NoZW1hLnByb3RvY29sc1xuICB2YXIgcHJvdG9jb2xcbiAgdmFyIGZpcnN0XG4gIHZhciBjb2xvblxuICB2YXIgbGVuZ3RoXG4gIHZhciBpbmRleFxuXG4gIHByb3RvY29scyA9IG93bi5jYWxsKHByb3RvY29scywgcHJvcCkgPyBwcm90b2NvbHNbcHJvcF0uY29uY2F0KCkgOiBbXVxuXG4gIGlmIChwcm90b2NvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICBmaXJzdCA9IHZhbHVlLmNoYXJBdCgwKVxuXG4gIGlmIChmaXJzdCA9PT0gJyMnIHx8IGZpcnN0ID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29sb24gPSB2YWx1ZS5pbmRleE9mKCc6JylcblxuICBpZiAoY29sb24gPT09IC0xKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGxlbmd0aCA9IHByb3RvY29scy5sZW5ndGhcbiAgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcHJvdG9jb2wgPSBwcm90b2NvbHNbaW5kZXhdXG5cbiAgICBpZiAoXG4gICAgICBjb2xvbiA9PT0gcHJvdG9jb2wubGVuZ3RoICYmXG4gICAgICB2YWx1ZS5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpID09PSBwcm90b2NvbFxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBpbmRleCA9IHZhbHVlLmluZGV4T2YoJz8nKVxuXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgY29sb24gPiBpbmRleCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpbmRleCA9IHZhbHVlLmluZGV4T2YoJyMnKVxuXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgY29sb24gPiBpbmRleCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gQWx3YXlzIHJldHVybiBhIHZhbGlkIEhUTUw1IGRvY3R5cGUuXG5mdW5jdGlvbiBoYW5kbGVEb2N0eXBlTmFtZSgpIHtcbiAgcmV0dXJuICdodG1sJ1xufVxuXG4vLyBTYW5pdGl6ZSBgdGFnTmFtZWAuXG5mdW5jdGlvbiBoYW5kbGVUYWdOYW1lKHNjaGVtYSwgdGFnTmFtZSwgbm9kZSwgc3RhY2spIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgdGFnTmFtZSA9PT0gJ3N0cmluZycgPyB0YWdOYW1lIDogbnVsbFxuICB2YXIgYW5jZXN0b3JzID0gc2NoZW1hLmFuY2VzdG9yc1xuICB2YXIgbGVuZ3RoXG4gIHZhciBpbmRleFxuXG4gIGlmICghbmFtZSB8fCBuYW1lID09PSAnKicgfHwgc2NoZW1hLnRhZ05hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhbmNlc3RvcnMgPSBvd24uY2FsbChhbmNlc3RvcnMsIG5hbWUpID8gYW5jZXN0b3JzW25hbWVdIDogW11cblxuICAvLyBTb21lIG5vZGVzIGNhbiBicmVhayBvdXQgb2YgdGhlaXIgY29udGV4dCBpZiB0aGV5IGRvbuKAmXQgaGF2ZSBhIGNlcnRhaW5cbiAgLy8gYW5jZXN0b3IuXG4gIGlmIChhbmNlc3RvcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgbGVuZ3RoID0gYW5jZXN0b3JzLmxlbmd0aCArIDFcbiAgICBpbmRleCA9IC0xXG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKCFhbmNlc3RvcnNbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihhbmNlc3RvcnNbaW5kZXhdKSAhPT0gLTEpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZVxufVxuXG5mdW5jdGlvbiBoYW5kbGVEb2N0eXBlKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmFsbG93RG9jdHlwZXMgPyB7bmFtZTogaGFuZGxlRG9jdHlwZU5hbWV9IDogbnVsbFxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb21tZW50KHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmFsbG93Q29tbWVudHMgPyB7dmFsdWU6IGhhbmRsZVZhbHVlfSA6IG51bGxcbn1cblxuLy8gU2FuaXRpemUgYHZhbHVlYC5cbmZ1bmN0aW9uIGhhbmRsZVZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6ICcnXG59XG5cbi8vIENyZWF0ZSBhIG1hcCBmcm9tIGEgbGlzdCBvZiBwcm9wcyBvciBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzLlxuZnVuY3Rpb24gdG9Qcm9wZXJ0eVZhbHVlTWFwKHZhbHVlcykge1xuICB2YXIgcmVzdWx0ID0ge31cbiAgdmFyIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGhcbiAgdmFyIGluZGV4ID0gLTFcbiAgdmFyIHZhbHVlXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF1cblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHZhbHVlKSB7XG4gICAgICByZXN1bHRbdmFsdWVbMF1dID0gdmFsdWUuc2xpY2UoMSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3ZhbHVlXSA9IFtdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBBbGxvdyBgdmFsdWVgLlxuZnVuY3Rpb24gYWxsb3coc2NoZW1hLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQ2hlY2sgaWYgYHByb3BgIGlzIGEgZGF0YSBwcm9wZXJ0eS5cbmZ1bmN0aW9uIGRhdGEocHJvcCkge1xuICByZXR1cm4gcHJvcC5sZW5ndGggPiA0ICYmIHByb3Auc2xpY2UoMCwgNCkudG9Mb3dlckNhc2UoKSA9PT0gJ2RhdGEnXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFWQTtBQUNBO0FBZ0JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/hast-util-sanitize/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/history/esm/history.js": -/*!**********************************************!*\ - !*** ../node_modules/history/esm/history.js ***! - \**********************************************/ -/*! exports provided: createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBrowserHistory\", function() { return createBrowserHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createHashHistory\", function() { return createHashHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMemoryHistory\", function() { return createMemoryHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createLocation\", function() { return createLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"locationsAreEqual\", function() { return locationsAreEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePath\", function() { return parsePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPath\", function() { return createPath; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var resolve_pathname__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! resolve-pathname */ \"../node_modules/resolve-pathname/esm/resolve-pathname.js\");\n/* harmony import */ var value_equal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! value-equal */ \"../node_modules/value-equal/esm/value-equal.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"../node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-invariant */ \"../node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\n\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\n\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\n\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\n\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\n\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\n\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = Object(resolve_pathname__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\n\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && Object(value_equal__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Browser history needs a DOM') : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(_typeof(path) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(_typeof(path) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Hash history needs a DOM') : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(_typeof(path) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(_typeof(path) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXNtL2hpc3RvcnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXNtL2hpc3RvcnkuanM/YmRlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgcmVzb2x2ZVBhdGhuYW1lIGZyb20gJ3Jlc29sdmUtcGF0aG5hbWUnO1xuaW1wb3J0IHZhbHVlRXF1YWwgZnJvbSAndmFsdWUtZXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAndGlueS13YXJuaW5nJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAndGlueS1pbnZhcmlhbnQnO1xuXG5mdW5jdGlvbiBhZGRMZWFkaW5nU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJyA/IHBhdGggOiAnLycgKyBwYXRoO1xufVxuZnVuY3Rpb24gc3RyaXBMZWFkaW5nU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJyA/IHBhdGguc3Vic3RyKDEpIDogcGF0aDtcbn1cbmZ1bmN0aW9uIGhhc0Jhc2VuYW1lKHBhdGgsIHByZWZpeCkge1xuICByZXR1cm4gcGF0aC50b0xvd2VyQ2FzZSgpLmluZGV4T2YocHJlZml4LnRvTG93ZXJDYXNlKCkpID09PSAwICYmICcvPyMnLmluZGV4T2YocGF0aC5jaGFyQXQocHJlZml4Lmxlbmd0aCkpICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHN0cmlwQmFzZW5hbWUocGF0aCwgcHJlZml4KSB7XG4gIHJldHVybiBoYXNCYXNlbmFtZShwYXRoLCBwcmVmaXgpID8gcGF0aC5zdWJzdHIocHJlZml4Lmxlbmd0aCkgOiBwYXRoO1xufVxuZnVuY3Rpb24gc3RyaXBUcmFpbGluZ1NsYXNoKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KHBhdGgubGVuZ3RoIC0gMSkgPT09ICcvJyA/IHBhdGguc2xpY2UoMCwgLTEpIDogcGF0aDtcbn1cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBwYXRobmFtZSA9IHBhdGggfHwgJy8nO1xuICB2YXIgc2VhcmNoID0gJyc7XG4gIHZhciBoYXNoID0gJyc7XG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCcjJyk7XG5cbiAgaWYgKGhhc2hJbmRleCAhPT0gLTEpIHtcbiAgICBoYXNoID0gcGF0aG5hbWUuc3Vic3RyKGhhc2hJbmRleCk7XG4gICAgcGF0aG5hbWUgPSBwYXRobmFtZS5zdWJzdHIoMCwgaGFzaEluZGV4KTtcbiAgfVxuXG4gIHZhciBzZWFyY2hJbmRleCA9IHBhdGhuYW1lLmluZGV4T2YoJz8nKTtcblxuICBpZiAoc2VhcmNoSW5kZXggIT09IC0xKSB7XG4gICAgc2VhcmNoID0gcGF0aG5hbWUuc3Vic3RyKHNlYXJjaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cigwLCBzZWFyY2hJbmRleCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICBzZWFyY2g6IHNlYXJjaCA9PT0gJz8nID8gJycgOiBzZWFyY2gsXG4gICAgaGFzaDogaGFzaCA9PT0gJyMnID8gJycgOiBoYXNoXG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVQYXRoKGxvY2F0aW9uKSB7XG4gIHZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoLFxuICAgICAgaGFzaCA9IGxvY2F0aW9uLmhhc2g7XG4gIHZhciBwYXRoID0gcGF0aG5hbWUgfHwgJy8nO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaCAhPT0gJz8nKSBwYXRoICs9IHNlYXJjaC5jaGFyQXQoMCkgPT09ICc/JyA/IHNlYXJjaCA6IFwiP1wiICsgc2VhcmNoO1xuICBpZiAoaGFzaCAmJiBoYXNoICE9PSAnIycpIHBhdGggKz0gaGFzaC5jaGFyQXQoMCkgPT09ICcjJyA/IGhhc2ggOiBcIiNcIiArIGhhc2g7XG4gIHJldHVybiBwYXRoO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihwYXRoLCBzdGF0ZSwga2V5LCBjdXJyZW50TG9jYXRpb24pIHtcbiAgdmFyIGxvY2F0aW9uO1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBUd28tYXJnIGZvcm06IHB1c2gocGF0aCwgc3RhdGUpXG4gICAgbG9jYXRpb24gPSBwYXJzZVBhdGgocGF0aCk7XG4gICAgbG9jYXRpb24uc3RhdGUgPSBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPbmUtYXJnIGZvcm06IHB1c2gobG9jYXRpb24pXG4gICAgbG9jYXRpb24gPSBfZXh0ZW5kcyh7fSwgcGF0aCk7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09PSB1bmRlZmluZWQpIGxvY2F0aW9uLnBhdGhuYW1lID0gJyc7XG5cbiAgICBpZiAobG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBsb2NhdGlvbi5zZWFyY2ggPSAnPycgKyBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLnNlYXJjaCA9ICcnO1xuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgbG9jYXRpb24uaGFzaCA9ICcjJyArIGxvY2F0aW9uLmhhc2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLmhhc2ggPSAnJztcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbi5zdGF0ZSA9PT0gdW5kZWZpbmVkKSBsb2NhdGlvbi5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGRlY29kZVVSSShsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFVSSUVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgVVJJRXJyb3IoJ1BhdGhuYW1lIFwiJyArIGxvY2F0aW9uLnBhdGhuYW1lICsgJ1wiIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBlcmNlbnQtZW5jb2RpbmcuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSkgbG9jYXRpb24ua2V5ID0ga2V5O1xuXG4gIGlmIChjdXJyZW50TG9jYXRpb24pIHtcbiAgICAvLyBSZXNvbHZlIGluY29tcGxldGUvcmVsYXRpdmUgcGF0aG5hbWUgcmVsYXRpdmUgdG8gY3VycmVudCBsb2NhdGlvbi5cbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGN1cnJlbnRMb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9IHJlc29sdmVQYXRobmFtZShsb2NhdGlvbi5wYXRobmFtZSwgY3VycmVudExvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBwcmlvciBsb2NhdGlvbiBhbmQgcGF0aG5hbWUgaXMgZW1wdHksIHNldCBpdCB0byAvXG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuZnVuY3Rpb24gbG9jYXRpb25zQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS5wYXRobmFtZSA9PT0gYi5wYXRobmFtZSAmJiBhLnNlYXJjaCA9PT0gYi5zZWFyY2ggJiYgYS5oYXNoID09PSBiLmhhc2ggJiYgYS5rZXkgPT09IGIua2V5ICYmIHZhbHVlRXF1YWwoYS5zdGF0ZSwgYi5zdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyKCkge1xuICB2YXIgcHJvbXB0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBzZXRQcm9tcHQobmV4dFByb21wdCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcocHJvbXB0ID09IG51bGwsICdBIGhpc3Rvcnkgc3VwcG9ydHMgb25seSBvbmUgcHJvbXB0IGF0IGEgdGltZScpIDogdm9pZCAwO1xuICAgIHByb21wdCA9IG5leHRQcm9tcHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwcm9tcHQgPT09IG5leHRQcm9tcHQpIHByb21wdCA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgY2FsbGJhY2spIHtcbiAgICAvLyBUT0RPOiBJZiBhbm90aGVyIHRyYW5zaXRpb24gc3RhcnRzIHdoaWxlIHdlJ3JlIHN0aWxsIGNvbmZpcm1pbmdcbiAgICAvLyB0aGUgcHJldmlvdXMgb25lLCB3ZSBtYXkgZW5kIHVwIGluIGEgd2VpcmQgc3RhdGUuIEZpZ3VyZSBvdXQgdGhlXG4gICAgLy8gYmVzdCB3YXkgdG8gaGFuZGxlIHRoaXMuXG4gICAgaWYgKHByb21wdCAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdHlwZW9mIHByb21wdCA9PT0gJ2Z1bmN0aW9uJyA/IHByb21wdChsb2NhdGlvbiwgYWN0aW9uKSA6IHByb21wdDtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0VXNlckNvbmZpcm1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGdldFVzZXJDb25maXJtYXRpb24ocmVzdWx0LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhmYWxzZSwgJ0EgaGlzdG9yeSBuZWVkcyBhIGdldFVzZXJDb25maXJtYXRpb24gZnVuY3Rpb24gaW4gb3JkZXIgdG8gdXNlIGEgcHJvbXB0IG1lc3NhZ2UnKSA6IHZvaWQgMDtcbiAgICAgICAgICBjYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGZhbHNlIGZyb20gYSB0cmFuc2l0aW9uIGhvb2sgdG8gY2FuY2VsIHRoZSB0cmFuc2l0aW9uLlxuICAgICAgICBjYWxsYmFjayhyZXN1bHQgIT09IGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGFwcGVuZExpc3RlbmVyKGZuKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgaWYgKGlzQWN0aXZlKSBmbi5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbSAhPT0gbGlzdGVuZXI7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aWZ5TGlzdGVuZXJzKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXRQcm9tcHQ6IHNldFByb21wdCxcbiAgICBjb25maXJtVHJhbnNpdGlvblRvOiBjb25maXJtVHJhbnNpdGlvblRvLFxuICAgIGFwcGVuZExpc3RlbmVyOiBhcHBlbmRMaXN0ZW5lcixcbiAgICBub3RpZnlMaXN0ZW5lcnM6IG5vdGlmeUxpc3RlbmVyc1xuICB9O1xufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbmZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbihtZXNzYWdlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayh3aW5kb3cuY29uZmlybShtZXNzYWdlKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYWxlcnRcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBpcyBzdXBwb3J0ZWQuIFRha2VuIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9oaXN0b3J5LmpzXG4gKiBjaGFuZ2VkIHRvIGF2b2lkIGZhbHNlIG5lZ2F0aXZlcyBmb3IgV2luZG93cyBQaG9uZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJvdXRlci9pc3N1ZXMvNTg2XG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCkge1xuICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgaWYgKCh1YS5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVhLmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJiB1YS5pbmRleE9mKCdNb2JpbGUgU2FmYXJpJykgIT09IC0xICYmIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJiB1YS5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGJyb3dzZXIgZmlyZXMgcG9wc3RhdGUgb24gaGFzaCBjaGFuZ2UuXG4gKiBJRTEwIGFuZCBJRTExIGRvIG5vdC5cbiAqL1xuXG5mdW5jdGlvbiBzdXBwb3J0c1BvcFN0YXRlT25IYXNoQ2hhbmdlKCkge1xuICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpID09PSAtMTtcbn1cbi8qKlxuICogUmV0dXJucyBmYWxzZSBpZiB1c2luZyBnbyhuKSB3aXRoIGhhc2ggaGlzdG9yeSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKCkge1xuICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID09PSAtMTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4gcG9wc3RhdGUgZXZlbnQgaXMgYW4gZXh0cmFuZW91cyBXZWJLaXQgZXZlbnQuXG4gKiBBY2NvdW50cyBmb3IgdGhlIGZhY3QgdGhhdCBDaHJvbWUgb24gaU9TIGZpcmVzIHJlYWwgcG9wc3RhdGUgZXZlbnRzXG4gKiBjb250YWluaW5nIHVuZGVmaW5lZCBzdGF0ZSB3aGVuIHByZXNzaW5nIHRoZSBiYWNrIGJ1dHRvbi5cbiAqL1xuXG5mdW5jdGlvbiBpc0V4dHJhbmVvdXNQb3BzdGF0ZUV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5zdGF0ZSA9PT0gdW5kZWZpbmVkICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ3JpT1MnKSA9PT0gLTE7XG59XG5cbnZhciBQb3BTdGF0ZUV2ZW50ID0gJ3BvcHN0YXRlJztcbnZhciBIYXNoQ2hhbmdlRXZlbnQgPSAnaGFzaGNoYW5nZSc7XG5cbmZ1bmN0aW9uIGdldEhpc3RvcnlTdGF0ZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93Lmhpc3Rvcnkuc3RhdGUgfHwge307XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJRSAxMSBzb21ldGltZXMgdGhyb3dzIHdoZW4gYWNjZXNzaW5nIHdpbmRvdy5oaXN0b3J5LnN0YXRlXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdFRyYWluaW5nL2hpc3RvcnkvcHVsbC8yODlcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIGhpc3Rvcnkgb2JqZWN0IHRoYXQgdXNlcyB0aGUgSFRNTDUgaGlzdG9yeSBBUEkgaW5jbHVkaW5nXG4gKiBwdXNoU3RhdGUsIHJlcGxhY2VTdGF0ZSwgYW5kIHRoZSBwb3BzdGF0ZSBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KHByb3BzKSB7XG4gIGlmIChwcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgcHJvcHMgPSB7fTtcbiAgfVxuXG4gICFjYW5Vc2VET00gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdCcm93c2VyIGhpc3RvcnkgbmVlZHMgYSBET00nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHZhciBnbG9iYWxIaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHZhciBjYW5Vc2VIaXN0b3J5ID0gc3VwcG9ydHNIaXN0b3J5KCk7XG4gIHZhciBuZWVkc0hhc2hDaGFuZ2VMaXN0ZW5lciA9ICFzdXBwb3J0c1BvcFN0YXRlT25IYXNoQ2hhbmdlKCk7XG4gIHZhciBfcHJvcHMgPSBwcm9wcyxcbiAgICAgIF9wcm9wcyRmb3JjZVJlZnJlc2ggPSBfcHJvcHMuZm9yY2VSZWZyZXNoLFxuICAgICAgZm9yY2VSZWZyZXNoID0gX3Byb3BzJGZvcmNlUmVmcmVzaCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkZm9yY2VSZWZyZXNoLFxuICAgICAgX3Byb3BzJGdldFVzZXJDb25maXJtID0gX3Byb3BzLmdldFVzZXJDb25maXJtYXRpb24sXG4gICAgICBnZXRVc2VyQ29uZmlybWF0aW9uID0gX3Byb3BzJGdldFVzZXJDb25maXJtID09PSB2b2lkIDAgPyBnZXRDb25maXJtYXRpb24gOiBfcHJvcHMkZ2V0VXNlckNvbmZpcm0sXG4gICAgICBfcHJvcHMka2V5TGVuZ3RoID0gX3Byb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHZvaWQgMCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuICB2YXIgYmFzZW5hbWUgPSBwcm9wcy5iYXNlbmFtZSA/IHN0cmlwVHJhaWxpbmdTbGFzaChhZGRMZWFkaW5nU2xhc2gocHJvcHMuYmFzZW5hbWUpKSA6ICcnO1xuXG4gIGZ1bmN0aW9uIGdldERPTUxvY2F0aW9uKGhpc3RvcnlTdGF0ZSkge1xuICAgIHZhciBfcmVmID0gaGlzdG9yeVN0YXRlIHx8IHt9LFxuICAgICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlO1xuXG4gICAgdmFyIF93aW5kb3ckbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lID0gX3dpbmRvdyRsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoID0gX3dpbmRvdyRsb2NhdGlvbi5zZWFyY2gsXG4gICAgICAgIGhhc2ggPSBfd2luZG93JGxvY2F0aW9uLmhhc2g7XG4gICAgdmFyIHBhdGggPSBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghYmFzZW5hbWUgfHwgaGFzQmFzZW5hbWUocGF0aCwgYmFzZW5hbWUpLCAnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiAnICsgJ3dpdGggdGhlIGJhc2VuYW1lLiBFeHBlY3RlZCBwYXRoIFwiJyArIHBhdGggKyAnXCIgdG8gYmVnaW4gd2l0aCBcIicgKyBiYXNlbmFtZSArICdcIi4nKSA6IHZvaWQgMDtcbiAgICBpZiAoYmFzZW5hbWUpIHBhdGggPSBzdHJpcEJhc2VuYW1lKHBhdGgsIGJhc2VuYW1lKTtcbiAgICByZXR1cm4gY3JlYXRlTG9jYXRpb24ocGF0aCwgc3RhdGUsIGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVLZXkoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCBrZXlMZW5ndGgpO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIoKTtcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBnbG9iYWxIaXN0b3J5Lmxlbmd0aDtcbiAgICB0cmFuc2l0aW9uTWFuYWdlci5ub3RpZnlMaXN0ZW5lcnMoaGlzdG9yeS5sb2NhdGlvbiwgaGlzdG9yeS5hY3Rpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUG9wU3RhdGUoZXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgZXh0cmFuZW91cyBwb3BzdGF0ZSBldmVudHMgaW4gV2ViS2l0LlxuICAgIGlmIChpc0V4dHJhbmVvdXNQb3BzdGF0ZUV2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgIGhhbmRsZVBvcChnZXRET01Mb2NhdGlvbihldmVudC5zdGF0ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGFzaENoYW5nZSgpIHtcbiAgICBoYW5kbGVQb3AoZ2V0RE9NTG9jYXRpb24oZ2V0SGlzdG9yeVN0YXRlKCkpKTtcbiAgfVxuXG4gIHZhciBmb3JjZU5leHRQb3AgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBoYW5kbGVQb3AobG9jYXRpb24pIHtcbiAgICBpZiAoZm9yY2VOZXh0UG9wKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgICAgIHNldFN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhY3Rpb24gPSAnUE9QJztcbiAgICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV2ZXJ0UG9wKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0UG9wKGZyb21Mb2NhdGlvbikge1xuICAgIHZhciB0b0xvY2F0aW9uID0gaGlzdG9yeS5sb2NhdGlvbjsgLy8gVE9ETzogV2UgY291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG1vcmUgcmVsaWFibGUgYnlcbiAgICAvLyBrZWVwaW5nIGEgbGlzdCBvZiBrZXlzIHdlJ3ZlIHNlZW4gaW4gc2Vzc2lvblN0b3JhZ2UuXG4gICAgLy8gSW5zdGVhZCwgd2UganVzdCBkZWZhdWx0IHRvIDAgZm9yIGtleXMgd2UgZG9uJ3Qga25vdy5cblxuICAgIHZhciB0b0luZGV4ID0gYWxsS2V5cy5pbmRleE9mKHRvTG9jYXRpb24ua2V5KTtcbiAgICBpZiAodG9JbmRleCA9PT0gLTEpIHRvSW5kZXggPSAwO1xuICAgIHZhciBmcm9tSW5kZXggPSBhbGxLZXlzLmluZGV4T2YoZnJvbUxvY2F0aW9uLmtleSk7XG4gICAgaWYgKGZyb21JbmRleCA9PT0gLTEpIGZyb21JbmRleCA9IDA7XG4gICAgdmFyIGRlbHRhID0gdG9JbmRleCAtIGZyb21JbmRleDtcblxuICAgIGlmIChkZWx0YSkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gdHJ1ZTtcbiAgICAgIGdvKGRlbHRhKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbExvY2F0aW9uID0gZ2V0RE9NTG9jYXRpb24oZ2V0SGlzdG9yeVN0YXRlKCkpO1xuICB2YXIgYWxsS2V5cyA9IFtpbml0aWFsTG9jYXRpb24ua2V5XTsgLy8gUHVibGljIGludGVyZmFjZVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICByZXR1cm4gYmFzZW5hbWUgKyBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2gocGF0aCwgc3RhdGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKCEodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHBhdGguc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSwgJ1lvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHB1c2ggd2hlbiB0aGUgMXN0ICcgKyAnYXJndW1lbnQgaXMgYSBsb2NhdGlvbi1saWtlIG9iamVjdCB0aGF0IGFscmVhZHkgaGFzIHN0YXRlOyBpdCBpcyBpZ25vcmVkJykgOiB2b2lkIDA7XG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwYXRoLCBzdGF0ZSwgY3JlYXRlS2V5KCksIGhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgICAgdmFyIGtleSA9IGxvY2F0aW9uLmtleSxcbiAgICAgICAgICBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuXG4gICAgICBpZiAoY2FuVXNlSGlzdG9yeSkge1xuICAgICAgICBnbG9iYWxIaXN0b3J5LnB1c2hTdGF0ZSh7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICAgIH0sIG51bGwsIGhyZWYpO1xuXG4gICAgICAgIGlmIChmb3JjZVJlZnJlc2gpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGhyZWY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihoaXN0b3J5LmxvY2F0aW9uLmtleSk7XG4gICAgICAgICAgdmFyIG5leHRLZXlzID0gYWxsS2V5cy5zbGljZSgwLCBwcmV2SW5kZXggKyAxKTtcbiAgICAgICAgICBuZXh0S2V5cy5wdXNoKGxvY2F0aW9uLmtleSk7XG4gICAgICAgICAgYWxsS2V5cyA9IG5leHRLZXlzO1xuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0Jyb3dzZXIgaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZSBpbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhUTUw1IGhpc3RvcnknKSA6IHZvaWQgMDtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgcGF0aC5zdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSB1bmRlZmluZWQpLCAnWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcmVwbGFjZSB3aGVuIHRoZSAxc3QgJyArICdhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQnKSA6IHZvaWQgMDtcbiAgICB2YXIgYWN0aW9uID0gJ1JFUExBQ0UnO1xuICAgIHZhciBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcbiAgICAgIHZhciBocmVmID0gY3JlYXRlSHJlZihsb2NhdGlvbik7XG4gICAgICB2YXIga2V5ID0gbG9jYXRpb24ua2V5LFxuICAgICAgICAgIHN0YXRlID0gbG9jYXRpb24uc3RhdGU7XG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucmVwbGFjZVN0YXRlKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgICAgfSwgbnVsbCwgaHJlZik7XG5cbiAgICAgICAgaWYgKGZvcmNlUmVmcmVzaCkge1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGhyZWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxLZXlzLmluZGV4T2YoaGlzdG9yeS5sb2NhdGlvbi5rZXkpO1xuICAgICAgICAgIGlmIChwcmV2SW5kZXggIT09IC0xKSBhbGxLZXlzW3ByZXZJbmRleF0gPSBsb2NhdGlvbi5rZXk7XG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhzdGF0ZSA9PT0gdW5kZWZpbmVkLCAnQnJvd3NlciBoaXN0b3J5IGNhbm5vdCByZXBsYWNlIHN0YXRlIGluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgSFRNTDUgaGlzdG9yeScpIDogdm9pZCAwO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvKG4pIHtcbiAgICBnbG9iYWxIaXN0b3J5LmdvKG4pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29CYWNrKCkge1xuICAgIGdvKC0xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvRm9yd2FyZCgpIHtcbiAgICBnbygxKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMDtcblxuICBmdW5jdGlvbiBjaGVja0RPTUxpc3RlbmVycyhkZWx0YSkge1xuICAgIGxpc3RlbmVyQ291bnQgKz0gZGVsdGE7XG5cbiAgICBpZiAobGlzdGVuZXJDb3VudCA9PT0gMSAmJiBkZWx0YSA9PT0gMSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoUG9wU3RhdGVFdmVudCwgaGFuZGxlUG9wU3RhdGUpO1xuICAgICAgaWYgKG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyKSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihIYXNoQ2hhbmdlRXZlbnQsIGhhbmRsZUhhc2hDaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAobGlzdGVuZXJDb3VudCA9PT0gMCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoUG9wU3RhdGVFdmVudCwgaGFuZGxlUG9wU3RhdGUpO1xuICAgICAgaWYgKG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyKSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihIYXNoQ2hhbmdlRXZlbnQsIGhhbmRsZUhhc2hDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc0Jsb2NrZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBibG9jayhwcm9tcHQpIHtcbiAgICBpZiAocHJvbXB0ID09PSB2b2lkIDApIHtcbiAgICAgIHByb21wdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB1bmJsb2NrID0gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG5cbiAgICBpZiAoIWlzQmxvY2tlZCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgICBpc0Jsb2NrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNCbG9ja2VkKSB7XG4gICAgICAgIGlzQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmJsb2NrKCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgIHZhciB1bmxpc3RlbiA9IHRyYW5zaXRpb25NYW5hZ2VyLmFwcGVuZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICBjaGVja0RPTUxpc3RlbmVycygxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoLTEpO1xuICAgICAgdW5saXN0ZW4oKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGhpc3RvcnkgPSB7XG4gICAgbGVuZ3RoOiBnbG9iYWxIaXN0b3J5Lmxlbmd0aCxcbiAgICBhY3Rpb246ICdQT1AnLFxuICAgIGxvY2F0aW9uOiBpbml0aWFsTG9jYXRpb24sXG4gICAgY3JlYXRlSHJlZjogY3JlYXRlSHJlZixcbiAgICBwdXNoOiBwdXNoLFxuICAgIHJlcGxhY2U6IHJlcGxhY2UsXG4gICAgZ286IGdvLFxuICAgIGdvQmFjazogZ29CYWNrLFxuICAgIGdvRm9yd2FyZDogZ29Gb3J3YXJkLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBsaXN0ZW46IGxpc3RlblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn1cblxudmFyIEhhc2hDaGFuZ2VFdmVudCQxID0gJ2hhc2hjaGFuZ2UnO1xudmFyIEhhc2hQYXRoQ29kZXJzID0ge1xuICBoYXNoYmFuZzoge1xuICAgIGVuY29kZVBhdGg6IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnIScgPyBwYXRoIDogJyEvJyArIHN0cmlwTGVhZGluZ1NsYXNoKHBhdGgpO1xuICAgIH0sXG4gICAgZGVjb2RlUGF0aDogZnVuY3Rpb24gZGVjb2RlUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICchJyA/IHBhdGguc3Vic3RyKDEpIDogcGF0aDtcbiAgICB9XG4gIH0sXG4gIG5vc2xhc2g6IHtcbiAgICBlbmNvZGVQYXRoOiBzdHJpcExlYWRpbmdTbGFzaCxcbiAgICBkZWNvZGVQYXRoOiBhZGRMZWFkaW5nU2xhc2hcbiAgfSxcbiAgc2xhc2g6IHtcbiAgICBlbmNvZGVQYXRoOiBhZGRMZWFkaW5nU2xhc2gsXG4gICAgZGVjb2RlUGF0aDogYWRkTGVhZGluZ1NsYXNoXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHN0cmlwSGFzaCh1cmwpIHtcbiAgdmFyIGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gIHJldHVybiBoYXNoSW5kZXggPT09IC0xID8gdXJsIDogdXJsLnNsaWNlKDAsIGhhc2hJbmRleCk7XG59XG5cbmZ1bmN0aW9uIGdldEhhc2hQYXRoKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBoYXNoSW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGhhc2hJbmRleCA9PT0gLTEgPyAnJyA6IGhyZWYuc3Vic3RyaW5nKGhhc2hJbmRleCArIDEpO1xufVxuXG5mdW5jdGlvbiBwdXNoSGFzaFBhdGgocGF0aCkge1xuICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VIYXNoUGF0aChwYXRoKSB7XG4gIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHN0cmlwSGFzaCh3aW5kb3cubG9jYXRpb24uaHJlZikgKyAnIycgKyBwYXRoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGFzaEhpc3RvcnkocHJvcHMpIHtcbiAgaWYgKHByb3BzID09PSB2b2lkIDApIHtcbiAgICBwcm9wcyA9IHt9O1xuICB9XG5cbiAgIWNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0hhc2ggaGlzdG9yeSBuZWVkcyBhIERPTScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgdmFyIGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdmFyIGNhbkdvV2l0aG91dFJlbG9hZCA9IHN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKCk7XG4gIHZhciBfcHJvcHMgPSBwcm9wcyxcbiAgICAgIF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9IF9wcm9wcy5nZXRVc2VyQ29uZmlybWF0aW9uLFxuICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9PT0gdm9pZCAwID8gZ2V0Q29uZmlybWF0aW9uIDogX3Byb3BzJGdldFVzZXJDb25maXJtLFxuICAgICAgX3Byb3BzJGhhc2hUeXBlID0gX3Byb3BzLmhhc2hUeXBlLFxuICAgICAgaGFzaFR5cGUgPSBfcHJvcHMkaGFzaFR5cGUgPT09IHZvaWQgMCA/ICdzbGFzaCcgOiBfcHJvcHMkaGFzaFR5cGU7XG4gIHZhciBiYXNlbmFtZSA9IHByb3BzLmJhc2VuYW1lID8gc3RyaXBUcmFpbGluZ1NsYXNoKGFkZExlYWRpbmdTbGFzaChwcm9wcy5iYXNlbmFtZSkpIDogJyc7XG4gIHZhciBfSGFzaFBhdGhDb2RlcnMkaGFzaFQgPSBIYXNoUGF0aENvZGVyc1toYXNoVHlwZV0sXG4gICAgICBlbmNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmVuY29kZVBhdGgsXG4gICAgICBkZWNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmRlY29kZVBhdGg7XG5cbiAgZnVuY3Rpb24gZ2V0RE9NTG9jYXRpb24oKSB7XG4gICAgdmFyIHBhdGggPSBkZWNvZGVQYXRoKGdldEhhc2hQYXRoKCkpO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoIWJhc2VuYW1lIHx8IGhhc0Jhc2VuYW1lKHBhdGgsIGJhc2VuYW1lKSwgJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYSBiYXNlbmFtZSBvbiBhIHBhZ2Ugd2hvc2UgVVJMIHBhdGggZG9lcyBub3QgYmVnaW4gJyArICd3aXRoIHRoZSBiYXNlbmFtZS4gRXhwZWN0ZWQgcGF0aCBcIicgKyBwYXRoICsgJ1wiIHRvIGJlZ2luIHdpdGggXCInICsgYmFzZW5hbWUgKyAnXCIuJykgOiB2b2lkIDA7XG4gICAgaWYgKGJhc2VuYW1lKSBwYXRoID0gc3RyaXBCYXNlbmFtZShwYXRoLCBiYXNlbmFtZSk7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uKHBhdGgpO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIoKTtcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBnbG9iYWxIaXN0b3J5Lmxlbmd0aDtcbiAgICB0cmFuc2l0aW9uTWFuYWdlci5ub3RpZnlMaXN0ZW5lcnMoaGlzdG9yeS5sb2NhdGlvbiwgaGlzdG9yeS5hY3Rpb24pO1xuICB9XG5cbiAgdmFyIGZvcmNlTmV4dFBvcCA9IGZhbHNlO1xuICB2YXIgaWdub3JlUGF0aCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbG9jYXRpb25zQXJlRXF1YWwkJDEoYSwgYikge1xuICAgIHJldHVybiBhLnBhdGhuYW1lID09PSBiLnBhdGhuYW1lICYmIGEuc2VhcmNoID09PSBiLnNlYXJjaCAmJiBhLmhhc2ggPT09IGIuaGFzaDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUhhc2hDaGFuZ2UoKSB7XG4gICAgdmFyIHBhdGggPSBnZXRIYXNoUGF0aCgpO1xuICAgIHZhciBlbmNvZGVkUGF0aCA9IGVuY29kZVBhdGgocGF0aCk7XG5cbiAgICBpZiAocGF0aCAhPT0gZW5jb2RlZFBhdGgpIHtcbiAgICAgIC8vIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIHByb3Blcmx5LWVuY29kZWQgaGFzaC5cbiAgICAgIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsb2NhdGlvbiA9IGdldERPTUxvY2F0aW9uKCk7XG4gICAgICB2YXIgcHJldkxvY2F0aW9uID0gaGlzdG9yeS5sb2NhdGlvbjtcbiAgICAgIGlmICghZm9yY2VOZXh0UG9wICYmIGxvY2F0aW9uc0FyZUVxdWFsJCQxKHByZXZMb2NhdGlvbiwgbG9jYXRpb24pKSByZXR1cm47IC8vIEEgaGFzaGNoYW5nZSBkb2Vzbid0IGFsd2F5cyA9PSBsb2NhdGlvbiBjaGFuZ2UuXG5cbiAgICAgIGlmIChpZ25vcmVQYXRoID09PSBjcmVhdGVQYXRoKGxvY2F0aW9uKSkgcmV0dXJuOyAvLyBJZ25vcmUgdGhpcyBjaGFuZ2U7IHdlIGFscmVhZHkgc2V0U3RhdGUgaW4gcHVzaC9yZXBsYWNlLlxuXG4gICAgICBpZ25vcmVQYXRoID0gbnVsbDtcbiAgICAgIGhhbmRsZVBvcChsb2NhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUG9wKGxvY2F0aW9uKSB7XG4gICAgaWYgKGZvcmNlTmV4dFBvcCkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gZmFsc2U7XG4gICAgICBzZXRTdGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG4gICAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldmVydFBvcChsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJldmVydFBvcChmcm9tTG9jYXRpb24pIHtcbiAgICB2YXIgdG9Mb2NhdGlvbiA9IGhpc3RvcnkubG9jYXRpb247IC8vIFRPRE86IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBtb3JlIHJlbGlhYmxlIGJ5XG4gICAgLy8ga2VlcGluZyBhIGxpc3Qgb2YgcGF0aHMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3IgcGF0aHMgd2UgZG9uJ3Qga25vdy5cblxuICAgIHZhciB0b0luZGV4ID0gYWxsUGF0aHMubGFzdEluZGV4T2YoY3JlYXRlUGF0aCh0b0xvY2F0aW9uKSk7XG4gICAgaWYgKHRvSW5kZXggPT09IC0xKSB0b0luZGV4ID0gMDtcbiAgICB2YXIgZnJvbUluZGV4ID0gYWxsUGF0aHMubGFzdEluZGV4T2YoY3JlYXRlUGF0aChmcm9tTG9jYXRpb24pKTtcbiAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkgZnJvbUluZGV4ID0gMDtcbiAgICB2YXIgZGVsdGEgPSB0b0luZGV4IC0gZnJvbUluZGV4O1xuXG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSB0cnVlO1xuICAgICAgZ28oZGVsdGEpO1xuICAgIH1cbiAgfSAvLyBFbnN1cmUgdGhlIGhhc2ggaXMgZW5jb2RlZCBwcm9wZXJseSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS5cblxuXG4gIHZhciBwYXRoID0gZ2V0SGFzaFBhdGgoKTtcbiAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcbiAgaWYgKHBhdGggIT09IGVuY29kZWRQYXRoKSByZXBsYWNlSGFzaFBhdGgoZW5jb2RlZFBhdGgpO1xuICB2YXIgaW5pdGlhbExvY2F0aW9uID0gZ2V0RE9NTG9jYXRpb24oKTtcbiAgdmFyIGFsbFBhdGhzID0gW2NyZWF0ZVBhdGgoaW5pdGlhbExvY2F0aW9uKV07IC8vIFB1YmxpYyBpbnRlcmZhY2VcblxuICBmdW5jdGlvbiBjcmVhdGVIcmVmKGxvY2F0aW9uKSB7XG4gICAgdmFyIGJhc2VUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJyk7XG4gICAgdmFyIGhyZWYgPSAnJztcblxuICAgIGlmIChiYXNlVGFnICYmIGJhc2VUYWcuZ2V0QXR0cmlidXRlKCdocmVmJykpIHtcbiAgICAgIGhyZWYgPSBzdHJpcEhhc2god2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIH1cblxuICAgIHJldHVybiBocmVmICsgJyMnICsgZW5jb2RlUGF0aChiYXNlbmFtZSArIGNyZWF0ZVBhdGgobG9jYXRpb24pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2gocGF0aCwgc3RhdGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHN0YXRlID09PSB1bmRlZmluZWQsICdIYXNoIGhpc3RvcnkgY2Fubm90IHB1c2ggc3RhdGU7IGl0IGlzIGlnbm9yZWQnKSA6IHZvaWQgMDtcbiAgICB2YXIgYWN0aW9uID0gJ1BVU0gnO1xuICAgIHZhciBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuICAgICAgdmFyIHBhdGggPSBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbiAgICAgIHZhciBlbmNvZGVkUGF0aCA9IGVuY29kZVBhdGgoYmFzZW5hbWUgKyBwYXRoKTtcbiAgICAgIHZhciBoYXNoQ2hhbmdlZCA9IGdldEhhc2hQYXRoKCkgIT09IGVuY29kZWRQYXRoO1xuXG4gICAgICBpZiAoaGFzaENoYW5nZWQpIHtcbiAgICAgICAgLy8gV2UgY2Fubm90IHRlbGwgaWYgYSBoYXNoY2hhbmdlIHdhcyBjYXVzZWQgYnkgYSBQVVNILCBzbyB3ZSdkXG4gICAgICAgIC8vIHJhdGhlciBzZXRTdGF0ZSBoZXJlIGFuZCBpZ25vcmUgdGhlIGhhc2hjaGFuZ2UuIFRoZSBjYXZlYXQgaGVyZVxuICAgICAgICAvLyBpcyB0aGF0IG90aGVyIGhhc2ggaGlzdG9yaWVzIGluIHRoZSBwYWdlIHdpbGwgY29uc2lkZXIgaXQgYSBQT1AuXG4gICAgICAgIGlnbm9yZVBhdGggPSBwYXRoO1xuICAgICAgICBwdXNoSGFzaFBhdGgoZW5jb2RlZFBhdGgpO1xuICAgICAgICB2YXIgcHJldkluZGV4ID0gYWxsUGF0aHMubGFzdEluZGV4T2YoY3JlYXRlUGF0aChoaXN0b3J5LmxvY2F0aW9uKSk7XG4gICAgICAgIHZhciBuZXh0UGF0aHMgPSBhbGxQYXRocy5zbGljZSgwLCBwcmV2SW5kZXggKyAxKTtcbiAgICAgICAgbmV4dFBhdGhzLnB1c2gocGF0aCk7XG4gICAgICAgIGFsbFBhdGhzID0gbmV4dFBhdGhzO1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhmYWxzZSwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgUFVTSCB0aGUgc2FtZSBwYXRoOyBhIG5ldyBlbnRyeSB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgaGlzdG9yeSBzdGFjaycpIDogdm9pZCAwO1xuICAgICAgICBzZXRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcmVwbGFjZSBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpIDogdm9pZCAwO1xuICAgIHZhciBhY3Rpb24gPSAnUkVQTEFDRSc7XG4gICAgdmFyIGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24ocGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgICB2YXIgcGF0aCA9IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFJFUExBQ0UsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxQYXRocy5pbmRleE9mKGNyZWF0ZVBhdGgoaGlzdG9yeS5sb2NhdGlvbikpO1xuICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEpIGFsbFBhdGhzW3ByZXZJbmRleF0gPSBwYXRoO1xuICAgICAgc2V0U3RhdGUoe1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvKG4pIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGNhbkdvV2l0aG91dFJlbG9hZCwgJ0hhc2ggaGlzdG9yeSBnbyhuKSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkIGluIHRoaXMgYnJvd3NlcicpIDogdm9pZCAwO1xuICAgIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gIH1cblxuICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgZ28oLTEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIGdvKDEpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIGNoZWNrRE9NTGlzdGVuZXJzKGRlbHRhKSB7XG4gICAgbGlzdGVuZXJDb3VudCArPSBkZWx0YTtcblxuICAgIGlmIChsaXN0ZW5lckNvdW50ID09PSAxICYmIGRlbHRhID09PSAxKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihIYXNoQ2hhbmdlRXZlbnQkMSwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfSBlbHNlIGlmIChsaXN0ZW5lckNvdW50ID09PSAwKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihIYXNoQ2hhbmdlRXZlbnQkMSwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzQmxvY2tlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGJsb2NrKHByb21wdCkge1xuICAgIGlmIChwcm9tcHQgPT09IHZvaWQgMCkge1xuICAgICAgcHJvbXB0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHVuYmxvY2sgPSB0cmFuc2l0aW9uTWFuYWdlci5zZXRQcm9tcHQocHJvbXB0KTtcblxuICAgIGlmICghaXNCbG9ja2VkKSB7XG4gICAgICBjaGVja0RPTUxpc3RlbmVycygxKTtcbiAgICAgIGlzQmxvY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0Jsb2NrZWQpIHtcbiAgICAgICAgaXNCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuYmxvY2soKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB1bmxpc3RlbigpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG4gIHJldHVybiBoaXN0b3J5O1xufVxuXG5mdW5jdGlvbiBjbGFtcChuLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChuLCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHN0b3JlcyBsb2NhdGlvbnMgaW4gbWVtb3J5LlxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlTWVtb3J5SGlzdG9yeShwcm9wcykge1xuICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgIHByb3BzID0ge307XG4gIH1cblxuICB2YXIgX3Byb3BzID0gcHJvcHMsXG4gICAgICBnZXRVc2VyQ29uZmlybWF0aW9uID0gX3Byb3BzLmdldFVzZXJDb25maXJtYXRpb24sXG4gICAgICBfcHJvcHMkaW5pdGlhbEVudHJpZXMgPSBfcHJvcHMuaW5pdGlhbEVudHJpZXMsXG4gICAgICBpbml0aWFsRW50cmllcyA9IF9wcm9wcyRpbml0aWFsRW50cmllcyA9PT0gdm9pZCAwID8gWycvJ10gOiBfcHJvcHMkaW5pdGlhbEVudHJpZXMsXG4gICAgICBfcHJvcHMkaW5pdGlhbEluZGV4ID0gX3Byb3BzLmluaXRpYWxJbmRleCxcbiAgICAgIGluaXRpYWxJbmRleCA9IF9wcm9wcyRpbml0aWFsSW5kZXggPT09IHZvaWQgMCA/IDAgOiBfcHJvcHMkaW5pdGlhbEluZGV4LFxuICAgICAgX3Byb3BzJGtleUxlbmd0aCA9IF9wcm9wcy5rZXlMZW5ndGgsXG4gICAgICBrZXlMZW5ndGggPSBfcHJvcHMka2V5TGVuZ3RoID09PSB2b2lkIDAgPyA2IDogX3Byb3BzJGtleUxlbmd0aDtcbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIoKTtcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLm5vdGlmeUxpc3RlbmVycyhoaXN0b3J5LmxvY2F0aW9uLCBoaXN0b3J5LmFjdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVLZXkoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCBrZXlMZW5ndGgpO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gY2xhbXAoaW5pdGlhbEluZGV4LCAwLCBpbml0aWFsRW50cmllcy5sZW5ndGggLSAxKTtcbiAgdmFyIGVudHJpZXMgPSBpbml0aWFsRW50cmllcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBjcmVhdGVMb2NhdGlvbihlbnRyeSwgdW5kZWZpbmVkLCBjcmVhdGVLZXkoKSkgOiBjcmVhdGVMb2NhdGlvbihlbnRyeSwgdW5kZWZpbmVkLCBlbnRyeS5rZXkgfHwgY3JlYXRlS2V5KCkpO1xuICB9KTsgLy8gUHVibGljIGludGVyZmFjZVxuXG4gIHZhciBjcmVhdGVIcmVmID0gY3JlYXRlUGF0aDtcblxuICBmdW5jdGlvbiBwdXNoKHBhdGgsIHN0YXRlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKHR5cGVvZiBwYXRoID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpIDogdm9pZCAwO1xuICAgIHZhciBhY3Rpb24gPSAnUFVTSCc7XG4gICAgdmFyIGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24ocGF0aCwgc3RhdGUsIGNyZWF0ZUtleSgpLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuICAgICAgdmFyIHByZXZJbmRleCA9IGhpc3RvcnkuaW5kZXg7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gcHJldkluZGV4ICsgMTtcbiAgICAgIHZhciBuZXh0RW50cmllcyA9IGhpc3RvcnkuZW50cmllcy5zbGljZSgwKTtcblxuICAgICAgaWYgKG5leHRFbnRyaWVzLmxlbmd0aCA+IG5leHRJbmRleCkge1xuICAgICAgICBuZXh0RW50cmllcy5zcGxpY2UobmV4dEluZGV4LCBuZXh0RW50cmllcy5sZW5ndGggLSBuZXh0SW5kZXgsIGxvY2F0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRFbnRyaWVzLnB1c2gobG9jYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgIGVudHJpZXM6IG5leHRFbnRyaWVzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2UocGF0aCwgc3RhdGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKCEodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHBhdGguc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSwgJ1lvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHJlcGxhY2Ugd2hlbiB0aGUgMXN0ICcgKyAnYXJndW1lbnQgaXMgYSBsb2NhdGlvbi1saWtlIG9iamVjdCB0aGF0IGFscmVhZHkgaGFzIHN0YXRlOyBpdCBpcyBpZ25vcmVkJykgOiB2b2lkIDA7XG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwYXRoLCBzdGF0ZSwgY3JlYXRlS2V5KCksIGhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgICBoaXN0b3J5LmVudHJpZXNbaGlzdG9yeS5pbmRleF0gPSBsb2NhdGlvbjtcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGNsYW1wKGhpc3RvcnkuaW5kZXggKyBuLCAwLCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoIC0gMSk7XG4gICAgdmFyIGFjdGlvbiA9ICdQT1AnO1xuICAgIHZhciBsb2NhdGlvbiA9IGhpc3RvcnkuZW50cmllc1tuZXh0SW5kZXhdO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAob2spIHtcbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBpbmRleDogbmV4dEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWltaWMgdGhlIGJlaGF2aW9yIG9mIERPTSBoaXN0b3JpZXMgYnlcbiAgICAgICAgLy8gY2F1c2luZyBhIHJlbmRlciBhZnRlciBhIGNhbmNlbGxlZCBQT1AuXG4gICAgICAgIHNldFN0YXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgZ28oLTEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIGdvKDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuR28obikge1xuICAgIHZhciBuZXh0SW5kZXggPSBoaXN0b3J5LmluZGV4ICsgbjtcbiAgICByZXR1cm4gbmV4dEluZGV4ID49IDAgJiYgbmV4dEluZGV4IDwgaGlzdG9yeS5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsb2NrKHByb21wdCkge1xuICAgIGlmIChwcm9tcHQgPT09IHZvaWQgMCkge1xuICAgICAgcHJvbXB0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zaXRpb25NYW5hZ2VyLnNldFByb21wdChwcm9tcHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25NYW5hZ2VyLmFwcGVuZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHZhciBoaXN0b3J5ID0ge1xuICAgIGxlbmd0aDogZW50cmllcy5sZW5ndGgsXG4gICAgYWN0aW9uOiAnUE9QJyxcbiAgICBsb2NhdGlvbjogZW50cmllc1tpbmRleF0sXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIGVudHJpZXM6IGVudHJpZXMsXG4gICAgY3JlYXRlSHJlZjogY3JlYXRlSHJlZixcbiAgICBwdXNoOiBwdXNoLFxuICAgIHJlcGxhY2U6IHJlcGxhY2UsXG4gICAgZ286IGdvLFxuICAgIGdvQmFjazogZ29CYWNrLFxuICAgIGdvRm9yd2FyZDogZ29Gb3J3YXJkLFxuICAgIGNhbkdvOiBjYW5HbyxcbiAgICBibG9jazogYmxvY2ssXG4gICAgbGlzdGVuOiBsaXN0ZW5cbiAgfTtcbiAgcmV0dXJuIGhpc3Rvcnk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUJyb3dzZXJIaXN0b3J5LCBjcmVhdGVIYXNoSGlzdG9yeSwgY3JlYXRlTWVtb3J5SGlzdG9yeSwgY3JlYXRlTG9jYXRpb24sIGxvY2F0aW9uc0FyZUVxdWFsLCBwYXJzZVBhdGgsIGNyZWF0ZVBhdGggfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBakJBO0FBbUJBO0FBQ0E7QUFDQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBYkE7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdGQTtBQUNBO0FBQ0E7QUErRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQVZBO0FBZUE7QUFDQTtBQUNBO0FBdkJBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFoQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUJBO0FBQ0E7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBWkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/history/esm/history.js\n"); - -/***/ }), - -/***/ "../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js": -/*!***********************************************************************************!*\ - !*** ../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar reactIs = __webpack_require__(/*! react-is */ \"../node_modules/react-is/index.js\");\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcz8xOWU1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\n"); - -/***/ }), - -/***/ "../node_modules/html-element-attributes/index.json": -/*!**********************************************************!*\ - !*** ../node_modules/html-element-attributes/index.json ***! - \**********************************************************/ -/*! exports provided: *, a, abbr, applet, area, audio, base, basefont, bdo, blockquote, body, br, button, canvas, caption, col, colgroup, data, del, details, dfn, dialog, dir, div, dl, embed, fieldset, font, form, frame, frameset, h1, h2, h3, h4, h5, h6, head, hr, html, iframe, img, input, ins, isindex, label, legend, li, link, map, menu, meta, meter, object, ol, optgroup, option, output, p, param, pre, progress, q, script, select, slot, source, style, table, tbody, td, textarea, tfoot, th, thead, time, tr, track, ul, video, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"*\\\":[\\\"accesskey\\\",\\\"autocapitalize\\\",\\\"autofocus\\\",\\\"class\\\",\\\"contenteditable\\\",\\\"dir\\\",\\\"draggable\\\",\\\"enterkeyhint\\\",\\\"hidden\\\",\\\"id\\\",\\\"inputmode\\\",\\\"is\\\",\\\"itemid\\\",\\\"itemprop\\\",\\\"itemref\\\",\\\"itemscope\\\",\\\"itemtype\\\",\\\"lang\\\",\\\"nonce\\\",\\\"slot\\\",\\\"spellcheck\\\",\\\"style\\\",\\\"tabindex\\\",\\\"title\\\",\\\"translate\\\"],\\\"a\\\":[\\\"accesskey\\\",\\\"charset\\\",\\\"coords\\\",\\\"download\\\",\\\"href\\\",\\\"hreflang\\\",\\\"name\\\",\\\"ping\\\",\\\"referrerpolicy\\\",\\\"rel\\\",\\\"rev\\\",\\\"shape\\\",\\\"tabindex\\\",\\\"target\\\",\\\"type\\\"],\\\"abbr\\\":[\\\"title\\\"],\\\"applet\\\":[\\\"align\\\",\\\"alt\\\",\\\"archive\\\",\\\"code\\\",\\\"codebase\\\",\\\"height\\\",\\\"hspace\\\",\\\"name\\\",\\\"object\\\",\\\"vspace\\\",\\\"width\\\"],\\\"area\\\":[\\\"accesskey\\\",\\\"alt\\\",\\\"coords\\\",\\\"download\\\",\\\"href\\\",\\\"hreflang\\\",\\\"nohref\\\",\\\"ping\\\",\\\"referrerpolicy\\\",\\\"rel\\\",\\\"shape\\\",\\\"tabindex\\\",\\\"target\\\",\\\"type\\\"],\\\"audio\\\":[\\\"autoplay\\\",\\\"controls\\\",\\\"crossorigin\\\",\\\"loop\\\",\\\"muted\\\",\\\"preload\\\",\\\"src\\\"],\\\"base\\\":[\\\"href\\\",\\\"target\\\"],\\\"basefont\\\":[\\\"color\\\",\\\"face\\\",\\\"size\\\"],\\\"bdo\\\":[\\\"dir\\\"],\\\"blockquote\\\":[\\\"cite\\\"],\\\"body\\\":[\\\"alink\\\",\\\"background\\\",\\\"bgcolor\\\",\\\"link\\\",\\\"text\\\",\\\"vlink\\\"],\\\"br\\\":[\\\"clear\\\"],\\\"button\\\":[\\\"accesskey\\\",\\\"autofocus\\\",\\\"disabled\\\",\\\"form\\\",\\\"formaction\\\",\\\"formenctype\\\",\\\"formmethod\\\",\\\"formnovalidate\\\",\\\"formtarget\\\",\\\"name\\\",\\\"tabindex\\\",\\\"type\\\",\\\"value\\\"],\\\"canvas\\\":[\\\"height\\\",\\\"width\\\"],\\\"caption\\\":[\\\"align\\\"],\\\"col\\\":[\\\"align\\\",\\\"char\\\",\\\"charoff\\\",\\\"span\\\",\\\"valign\\\",\\\"width\\\"],\\\"colgroup\\\":[\\\"align\\\",\\\"char\\\",\\\"charoff\\\",\\\"span\\\",\\\"valign\\\",\\\"width\\\"],\\\"data\\\":[\\\"value\\\"],\\\"del\\\":[\\\"cite\\\",\\\"datetime\\\"],\\\"details\\\":[\\\"open\\\"],\\\"dfn\\\":[\\\"title\\\"],\\\"dialog\\\":[\\\"open\\\"],\\\"dir\\\":[\\\"compact\\\"],\\\"div\\\":[\\\"align\\\"],\\\"dl\\\":[\\\"compact\\\"],\\\"embed\\\":[\\\"height\\\",\\\"src\\\",\\\"type\\\",\\\"width\\\"],\\\"fieldset\\\":[\\\"disabled\\\",\\\"form\\\",\\\"name\\\"],\\\"font\\\":[\\\"color\\\",\\\"face\\\",\\\"size\\\"],\\\"form\\\":[\\\"accept\\\",\\\"accept-charset\\\",\\\"action\\\",\\\"autocomplete\\\",\\\"enctype\\\",\\\"method\\\",\\\"name\\\",\\\"novalidate\\\",\\\"target\\\"],\\\"frame\\\":[\\\"frameborder\\\",\\\"longdesc\\\",\\\"marginheight\\\",\\\"marginwidth\\\",\\\"name\\\",\\\"noresize\\\",\\\"scrolling\\\",\\\"src\\\"],\\\"frameset\\\":[\\\"cols\\\",\\\"rows\\\"],\\\"h1\\\":[\\\"align\\\"],\\\"h2\\\":[\\\"align\\\"],\\\"h3\\\":[\\\"align\\\"],\\\"h4\\\":[\\\"align\\\"],\\\"h5\\\":[\\\"align\\\"],\\\"h6\\\":[\\\"align\\\"],\\\"head\\\":[\\\"profile\\\"],\\\"hr\\\":[\\\"align\\\",\\\"noshade\\\",\\\"size\\\",\\\"width\\\"],\\\"html\\\":[\\\"manifest\\\",\\\"version\\\"],\\\"iframe\\\":[\\\"align\\\",\\\"allow\\\",\\\"allowfullscreen\\\",\\\"allowpaymentrequest\\\",\\\"allowusermedia\\\",\\\"frameborder\\\",\\\"height\\\",\\\"longdesc\\\",\\\"marginheight\\\",\\\"marginwidth\\\",\\\"name\\\",\\\"referrerpolicy\\\",\\\"sandbox\\\",\\\"scrolling\\\",\\\"src\\\",\\\"srcdoc\\\",\\\"width\\\"],\\\"img\\\":[\\\"align\\\",\\\"alt\\\",\\\"border\\\",\\\"crossorigin\\\",\\\"decoding\\\",\\\"height\\\",\\\"hspace\\\",\\\"ismap\\\",\\\"longdesc\\\",\\\"name\\\",\\\"referrerpolicy\\\",\\\"sizes\\\",\\\"src\\\",\\\"srcset\\\",\\\"usemap\\\",\\\"vspace\\\",\\\"width\\\"],\\\"input\\\":[\\\"accept\\\",\\\"accesskey\\\",\\\"align\\\",\\\"alt\\\",\\\"autocomplete\\\",\\\"autofocus\\\",\\\"checked\\\",\\\"dirname\\\",\\\"disabled\\\",\\\"form\\\",\\\"formaction\\\",\\\"formenctype\\\",\\\"formmethod\\\",\\\"formnovalidate\\\",\\\"formtarget\\\",\\\"height\\\",\\\"ismap\\\",\\\"list\\\",\\\"max\\\",\\\"maxlength\\\",\\\"min\\\",\\\"minlength\\\",\\\"multiple\\\",\\\"name\\\",\\\"pattern\\\",\\\"placeholder\\\",\\\"readonly\\\",\\\"required\\\",\\\"size\\\",\\\"src\\\",\\\"step\\\",\\\"tabindex\\\",\\\"title\\\",\\\"type\\\",\\\"usemap\\\",\\\"value\\\",\\\"width\\\"],\\\"ins\\\":[\\\"cite\\\",\\\"datetime\\\"],\\\"isindex\\\":[\\\"prompt\\\"],\\\"label\\\":[\\\"accesskey\\\",\\\"for\\\",\\\"form\\\"],\\\"legend\\\":[\\\"accesskey\\\",\\\"align\\\"],\\\"li\\\":[\\\"type\\\",\\\"value\\\"],\\\"link\\\":[\\\"as\\\",\\\"charset\\\",\\\"color\\\",\\\"crossorigin\\\",\\\"href\\\",\\\"hreflang\\\",\\\"imagesizes\\\",\\\"imagesrcset\\\",\\\"integrity\\\",\\\"media\\\",\\\"nonce\\\",\\\"referrerpolicy\\\",\\\"rel\\\",\\\"rev\\\",\\\"sizes\\\",\\\"target\\\",\\\"title\\\",\\\"type\\\"],\\\"map\\\":[\\\"name\\\"],\\\"menu\\\":[\\\"compact\\\"],\\\"meta\\\":[\\\"charset\\\",\\\"content\\\",\\\"http-equiv\\\",\\\"name\\\",\\\"scheme\\\"],\\\"meter\\\":[\\\"high\\\",\\\"low\\\",\\\"max\\\",\\\"min\\\",\\\"optimum\\\",\\\"value\\\"],\\\"object\\\":[\\\"align\\\",\\\"archive\\\",\\\"border\\\",\\\"classid\\\",\\\"codebase\\\",\\\"codetype\\\",\\\"data\\\",\\\"declare\\\",\\\"form\\\",\\\"height\\\",\\\"hspace\\\",\\\"name\\\",\\\"standby\\\",\\\"tabindex\\\",\\\"type\\\",\\\"typemustmatch\\\",\\\"usemap\\\",\\\"vspace\\\",\\\"width\\\"],\\\"ol\\\":[\\\"compact\\\",\\\"reversed\\\",\\\"start\\\",\\\"type\\\"],\\\"optgroup\\\":[\\\"disabled\\\",\\\"label\\\"],\\\"option\\\":[\\\"disabled\\\",\\\"label\\\",\\\"selected\\\",\\\"value\\\"],\\\"output\\\":[\\\"for\\\",\\\"form\\\",\\\"name\\\"],\\\"p\\\":[\\\"align\\\"],\\\"param\\\":[\\\"name\\\",\\\"type\\\",\\\"value\\\",\\\"valuetype\\\"],\\\"pre\\\":[\\\"width\\\"],\\\"progress\\\":[\\\"max\\\",\\\"value\\\"],\\\"q\\\":[\\\"cite\\\"],\\\"script\\\":[\\\"async\\\",\\\"charset\\\",\\\"crossorigin\\\",\\\"defer\\\",\\\"integrity\\\",\\\"language\\\",\\\"nomodule\\\",\\\"nonce\\\",\\\"referrerpolicy\\\",\\\"src\\\",\\\"type\\\"],\\\"select\\\":[\\\"autocomplete\\\",\\\"autofocus\\\",\\\"disabled\\\",\\\"form\\\",\\\"multiple\\\",\\\"name\\\",\\\"required\\\",\\\"size\\\",\\\"tabindex\\\"],\\\"slot\\\":[\\\"name\\\"],\\\"source\\\":[\\\"media\\\",\\\"sizes\\\",\\\"src\\\",\\\"srcset\\\",\\\"type\\\"],\\\"style\\\":[\\\"media\\\",\\\"nonce\\\",\\\"title\\\",\\\"type\\\"],\\\"table\\\":[\\\"align\\\",\\\"bgcolor\\\",\\\"border\\\",\\\"cellpadding\\\",\\\"cellspacing\\\",\\\"frame\\\",\\\"rules\\\",\\\"summary\\\",\\\"width\\\"],\\\"tbody\\\":[\\\"align\\\",\\\"char\\\",\\\"charoff\\\",\\\"valign\\\"],\\\"td\\\":[\\\"abbr\\\",\\\"align\\\",\\\"axis\\\",\\\"bgcolor\\\",\\\"char\\\",\\\"charoff\\\",\\\"colspan\\\",\\\"headers\\\",\\\"height\\\",\\\"nowrap\\\",\\\"rowspan\\\",\\\"scope\\\",\\\"valign\\\",\\\"width\\\"],\\\"textarea\\\":[\\\"accesskey\\\",\\\"autocomplete\\\",\\\"autofocus\\\",\\\"cols\\\",\\\"dirname\\\",\\\"disabled\\\",\\\"form\\\",\\\"maxlength\\\",\\\"minlength\\\",\\\"name\\\",\\\"placeholder\\\",\\\"readonly\\\",\\\"required\\\",\\\"rows\\\",\\\"tabindex\\\",\\\"wrap\\\"],\\\"tfoot\\\":[\\\"align\\\",\\\"char\\\",\\\"charoff\\\",\\\"valign\\\"],\\\"th\\\":[\\\"abbr\\\",\\\"align\\\",\\\"axis\\\",\\\"bgcolor\\\",\\\"char\\\",\\\"charoff\\\",\\\"colspan\\\",\\\"headers\\\",\\\"height\\\",\\\"nowrap\\\",\\\"rowspan\\\",\\\"scope\\\",\\\"valign\\\",\\\"width\\\"],\\\"thead\\\":[\\\"align\\\",\\\"char\\\",\\\"charoff\\\",\\\"valign\\\"],\\\"time\\\":[\\\"datetime\\\"],\\\"tr\\\":[\\\"align\\\",\\\"bgcolor\\\",\\\"char\\\",\\\"charoff\\\",\\\"valign\\\"],\\\"track\\\":[\\\"default\\\",\\\"kind\\\",\\\"label\\\",\\\"src\\\",\\\"srclang\\\"],\\\"ul\\\":[\\\"compact\\\",\\\"type\\\"],\\\"video\\\":[\\\"autoplay\\\",\\\"controls\\\",\\\"crossorigin\\\",\\\"height\\\",\\\"loop\\\",\\\"muted\\\",\\\"playsinline\\\",\\\"poster\\\",\\\"preload\\\",\\\"src\\\",\\\"width\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2h0bWwtZWxlbWVudC1hdHRyaWJ1dGVzL2luZGV4Lmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/html-element-attributes/index.json\n"); - -/***/ }), - -/***/ "../node_modules/https-browserify/index.js": -/*!*************************************************!*\ - !*** ../node_modules/https-browserify/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var http = __webpack_require__(/*! http */ \"../node_modules/stream-http/index.js\");\n\nvar url = __webpack_require__(/*! url */ \"../node_modules/url/url.js\");\n\nvar https = module.exports;\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key];\n}\n\nhttps.request = function (params, cb) {\n params = validateParams(params);\n return http.request.call(this, params, cb);\n};\n\nhttps.get = function (params, cb) {\n params = validateParams(params);\n return http.get.call(this, params, cb);\n};\n\nfunction validateParams(params) {\n if (typeof params === 'string') {\n params = url.parse(params);\n }\n\n if (!params.protocol) {\n params.protocol = 'https:';\n }\n\n if (params.protocol !== 'https:') {\n throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"');\n }\n\n return params;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLWJyb3dzZXJpZnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2h0dHBzLWJyb3dzZXJpZnkvaW5kZXguanM/YzNiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKVxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG5cbnZhciBodHRwcyA9IG1vZHVsZS5leHBvcnRzXG5cbmZvciAodmFyIGtleSBpbiBodHRwKSB7XG4gIGlmIChodHRwLmhhc093blByb3BlcnR5KGtleSkpIGh0dHBzW2tleV0gPSBodHRwW2tleV1cbn1cblxuaHR0cHMucmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNiKSB7XG4gIHBhcmFtcyA9IHZhbGlkYXRlUGFyYW1zKHBhcmFtcylcbiAgcmV0dXJuIGh0dHAucmVxdWVzdC5jYWxsKHRoaXMsIHBhcmFtcywgY2IpXG59XG5cbmh0dHBzLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNiKSB7XG4gIHBhcmFtcyA9IHZhbGlkYXRlUGFyYW1zKHBhcmFtcylcbiAgcmV0dXJuIGh0dHAuZ2V0LmNhbGwodGhpcywgcGFyYW1zLCBjYilcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMgKHBhcmFtcykge1xuICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJhbXMgPSB1cmwucGFyc2UocGFyYW1zKVxuICB9XG4gIGlmICghcGFyYW1zLnByb3RvY29sKSB7XG4gICAgcGFyYW1zLnByb3RvY29sID0gJ2h0dHBzOidcbiAgfVxuICBpZiAocGFyYW1zLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvdG9jb2wgXCInICsgcGFyYW1zLnByb3RvY29sICsgJ1wiIG5vdCBzdXBwb3J0ZWQuIEV4cGVjdGVkIFwiaHR0cHM6XCInKVxuICB9XG4gIHJldHVybiBwYXJhbXNcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/https-browserify/index.js\n"); - -/***/ }), - -/***/ "../node_modules/ieee754/index.js": -/*!****************************************!*\ - !*** ../node_modules/ieee754/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanM/MTVhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE5QkE7QUFDQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBakRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/ieee754/index.js\n"); - -/***/ }), - -/***/ "../node_modules/inherits/inherits_browser.js": -/*!****************************************************!*\ - !*** ../node_modules/inherits/inherits_browser.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n\n var TempCtor = function TempCtor() {};\n\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanM/YzFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQURBO0FBUUE7QUFYQTtBQUZBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/inherits/inherits_browser.js\n"); - -/***/ }), - -/***/ "../node_modules/invariant/browser.js": -/*!********************************************!*\ - !*** ../node_modules/invariant/browser.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function invariant(condition, format, a, b, c, d, e, f) {\n if (undefined !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n};\n\nmodule.exports = invariant;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcz9mOGJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgaW52YXJpYW50ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7IHJldHVybiBhcmdzW2FyZ0luZGV4KytdOyB9KVxuICAgICAgKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztBQU9BO0FBRUE7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF6QkE7QUFDQTtBQTJCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/invariant/browser.js\n"); - -/***/ }), - -/***/ "../node_modules/is-alphabetical/index.js": -/*!************************************************!*\ - !*** ../node_modules/is-alphabetical/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = alphabetical; // Check if the given character code, or the character code at the first\n// character, is alphabetical.\n\nfunction alphabetical(character) {\n var code = typeof character === 'string' ? character.charCodeAt(0) : character;\n return code >= 97 && code <= 122 ||\n /* a-z */\n code >= 65 && code <= 90\n /* A-Z */\n ;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWFscGhhYmV0aWNhbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtYWxwaGFiZXRpY2FsL2luZGV4LmpzPzZmM2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gYWxwaGFiZXRpY2FsXG5cbi8vIENoZWNrIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgY29kZSwgb3IgdGhlIGNoYXJhY3RlciBjb2RlIGF0IHRoZSBmaXJzdFxuLy8gY2hhcmFjdGVyLCBpcyBhbHBoYWJldGljYWwuXG5mdW5jdGlvbiBhbHBoYWJldGljYWwoY2hhcmFjdGVyKSB7XG4gIHZhciBjb2RlID0gdHlwZW9mIGNoYXJhY3RlciA9PT0gJ3N0cmluZycgPyBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKSA6IGNoYXJhY3RlclxuXG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIC8qIGEteiAqLyB8fFxuICAgIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIC8qIEEtWiAqL1xuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/is-alphabetical/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-alphanumeric/index.js": -/*!************************************************!*\ - !*** ../node_modules/is-alphanumeric/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = function (str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n return !/[^0-9a-z\\xDF-\\xFF]/.test(str.toLowerCase());\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWFscGhhbnVtZXJpYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtYWxwaGFudW1lcmljL2luZGV4LmpzP2U0MzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG5cdH1cblxuXHRyZXR1cm4gIS9bXjAtOWEtelxceERGLVxceEZGXS8udGVzdChzdHIudG9Mb3dlckNhc2UoKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-alphanumeric/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-alphanumerical/index.js": -/*!**************************************************!*\ - !*** ../node_modules/is-alphanumerical/index.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar alphabetical = __webpack_require__(/*! is-alphabetical */ \"../node_modules/is-alphabetical/index.js\");\n\nvar decimal = __webpack_require__(/*! is-decimal */ \"../node_modules/is-decimal/index.js\");\n\nmodule.exports = alphanumerical; // Check if the given character code, or the character code at the first\n// character, is alphanumerical.\n\nfunction alphanumerical(character) {\n return alphabetical(character) || decimal(character);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWFscGhhbnVtZXJpY2FsL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy1hbHBoYW51bWVyaWNhbC9pbmRleC5qcz9jM2FkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgYWxwaGFiZXRpY2FsID0gcmVxdWlyZSgnaXMtYWxwaGFiZXRpY2FsJylcbnZhciBkZWNpbWFsID0gcmVxdWlyZSgnaXMtZGVjaW1hbCcpXG5cbm1vZHVsZS5leHBvcnRzID0gYWxwaGFudW1lcmljYWxcblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBjb2RlLCBvciB0aGUgY2hhcmFjdGVyIGNvZGUgYXQgdGhlIGZpcnN0XG4vLyBjaGFyYWN0ZXIsIGlzIGFscGhhbnVtZXJpY2FsLlxuZnVuY3Rpb24gYWxwaGFudW1lcmljYWwoY2hhcmFjdGVyKSB7XG4gIHJldHVybiBhbHBoYWJldGljYWwoY2hhcmFjdGVyKSB8fCBkZWNpbWFsKGNoYXJhY3Rlcilcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/is-alphanumerical/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-buffer/index.js": -/*!******************************************!*\ - !*** ../node_modules/is-buffer/index.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);\n};\n\nfunction isBuffer(obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n} // For Node v0.10 support. Remove this eventually.\n\n\nfunction isSlowBuffer(obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtYnVmZmVyL2luZGV4LmpzPzExYjUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/is-buffer/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-decimal/index.js": -/*!*******************************************!*\ - !*** ../node_modules/is-decimal/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = decimal; // Check if the given character code, or the character code at the first\n// character, is decimal.\n\nfunction decimal(character) {\n var code = typeof character === 'string' ? character.charCodeAt(0) : character;\n return code >= 48 && code <= 57;\n /* 0-9 */\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWRlY2ltYWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2lzLWRlY2ltYWwvaW5kZXguanM/NDFmNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBkZWNpbWFsXG5cbi8vIENoZWNrIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgY29kZSwgb3IgdGhlIGNoYXJhY3RlciBjb2RlIGF0IHRoZSBmaXJzdFxuLy8gY2hhcmFjdGVyLCBpcyBkZWNpbWFsLlxuZnVuY3Rpb24gZGVjaW1hbChjaGFyYWN0ZXIpIHtcbiAgdmFyIGNvZGUgPSB0eXBlb2YgY2hhcmFjdGVyID09PSAnc3RyaW5nJyA/IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApIDogY2hhcmFjdGVyXG5cbiAgcmV0dXJuIGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyAvKiAwLTkgKi9cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-decimal/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-function/index.js": -/*!********************************************!*\ - !*** ../node_modules/is-function/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = isFunction;\nvar toString = Object.prototype.toString;\n\nfunction isFunction(fn) {\n var string = toString.call(fn);\n return string === '[object Function]' || typeof fn === 'function' && string !== '[object RegExp]' || typeof window !== 'undefined' && ( // IE8 and below\n fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt);\n}\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bmN0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcz8zM2FkIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvblxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24gKGZuKSB7XG4gIHZhciBzdHJpbmcgPSB0b1N0cmluZy5jYWxsKGZuKVxuICByZXR1cm4gc3RyaW5nID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8XG4gICAgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBzdHJpbmcgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB8fFxuICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAvLyBJRTggYW5kIGJlbG93XG4gICAgIChmbiA9PT0gd2luZG93LnNldFRpbWVvdXQgfHxcbiAgICAgIGZuID09PSB3aW5kb3cuYWxlcnQgfHxcbiAgICAgIGZuID09PSB3aW5kb3cuY29uZmlybSB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5wcm9tcHQpKVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-function/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-hexadecimal/index.js": -/*!***********************************************!*\ - !*** ../node_modules/is-hexadecimal/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = hexadecimal; // Check if the given character code, or the character code at the first\n// character, is hexadecimal.\n\nfunction hexadecimal(character) {\n var code = typeof character === 'string' ? character.charCodeAt(0) : character;\n return code >= 97\n /* a */\n && code <= 102 ||\n /* z */\n code >= 65\n /* A */\n && code <= 70\n /* Z */\n || code >= 48\n /* A */\n && code <= 57\n /* Z */\n ;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLWhleGFkZWNpbWFsL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy1oZXhhZGVjaW1hbC9pbmRleC5qcz9hNzI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhleGFkZWNpbWFsXG5cbi8vIENoZWNrIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgY29kZSwgb3IgdGhlIGNoYXJhY3RlciBjb2RlIGF0IHRoZSBmaXJzdFxuLy8gY2hhcmFjdGVyLCBpcyBoZXhhZGVjaW1hbC5cbmZ1bmN0aW9uIGhleGFkZWNpbWFsKGNoYXJhY3Rlcikge1xuICB2YXIgY29kZSA9IHR5cGVvZiBjaGFyYWN0ZXIgPT09ICdzdHJpbmcnID8gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCkgOiBjaGFyYWN0ZXJcblxuICByZXR1cm4gKFxuICAgIChjb2RlID49IDk3IC8qIGEgKi8gJiYgY29kZSA8PSAxMDIpIC8qIHogKi8gfHxcbiAgICAoY29kZSA+PSA2NSAvKiBBICovICYmIGNvZGUgPD0gNzApIC8qIFogKi8gfHxcbiAgICAoY29kZSA+PSA0OCAvKiBBICovICYmIGNvZGUgPD0gNTcpIC8qIFogKi9cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUhBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-hexadecimal/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-nan/implementation.js": -/*!************************************************!*\ - !*** ../node_modules/is-nan/implementation.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n return value !== value;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL2ltcGxlbWVudGF0aW9uLmpzP2M3YmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbnVtYmVyLmlzbmFuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/is-nan/implementation.js\n"); - -/***/ }), - -/***/ "../node_modules/is-nan/index.js": -/*!***************************************!*\ - !*** ../node_modules/is-nan/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar define = __webpack_require__(/*! define-properties */ \"../node_modules/define-properties/index.js\");\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"../node_modules/is-nan/implementation.js\");\n\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"../node_modules/is-nan/polyfill.js\");\n\nvar shim = __webpack_require__(/*! ./shim */ \"../node_modules/is-nan/shim.js\");\n\nvar polyfill = getPolyfill();\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n getPolyfill: getPolyfill,\n implementation: implementation,\n shim: shim\n});\nmodule.exports = polyfill;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL2luZGV4LmpzPzBkMWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblxuLyogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5pc25hbiAqL1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/is-nan/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-nan/polyfill.js": -/*!******************************************!*\ - !*** ../node_modules/is-nan/polyfill.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"../node_modules/is-nan/implementation.js\");\n\nmodule.exports = function getPolyfill() {\n if (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n return Number.isNaN;\n }\n\n return implementation;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL3BvbHlmaWxsLmpzPzRhZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmIChOdW1iZXIuaXNOYU4gJiYgTnVtYmVyLmlzTmFOKE5hTikgJiYgIU51bWJlci5pc05hTignYScpKSB7XG5cdFx0cmV0dXJuIE51bWJlci5pc05hTjtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/is-nan/polyfill.js\n"); - -/***/ }), - -/***/ "../node_modules/is-nan/shim.js": -/*!**************************************!*\ - !*** ../node_modules/is-nan/shim.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar define = __webpack_require__(/*! define-properties */ \"../node_modules/define-properties/index.js\");\n\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"../node_modules/is-nan/polyfill.js\");\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\n\nmodule.exports = function shimNumberIsNaN() {\n var polyfill = getPolyfill();\n define(Number, {\n isNaN: polyfill\n }, {\n isNaN: function testIsNaN() {\n return Number.isNaN !== polyfill;\n }\n });\n return polyfill;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9zaGltLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy1uYW4vc2hpbS5qcz8wNmI4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbi8qIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIuaXNuYW4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltTnVtYmVySXNOYU4oKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShOdW1iZXIsIHsgaXNOYU46IHBvbHlmaWxsIH0sIHtcblx0XHRpc05hTjogZnVuY3Rpb24gdGVzdElzTmFOKCkge1xuXHRcdFx0cmV0dXJuIE51bWJlci5pc05hTiAhPT0gcG9seWZpbGw7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-nan/shim.js\n"); - -/***/ }), - -/***/ "../node_modules/is-plain-obj/index.js": -/*!*********************************************!*\ - !*** ../node_modules/is-plain-obj/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar toString = Object.prototype.toString;\n\nmodule.exports = function (x) {\n var prototype;\n return toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({}));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iai9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzPzcxMzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoeCkge1xuXHR2YXIgcHJvdG90eXBlO1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgKHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih4KSwgcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/is-plain-obj/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-whitespace-character/index.js": -/*!********************************************************!*\ - !*** ../node_modules/is-whitespace-character/index.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = whitespace;\nvar fromCode = String.fromCharCode;\nvar re = /\\s/; // Check if the given character code, or the character code at the first\n// character, is a whitespace character.\n\nfunction whitespace(character) {\n return re.test(typeof character === 'number' ? fromCode(character) : character.charAt(0));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy13aGl0ZXNwYWNlLWNoYXJhY3Rlci9pbmRleC5qcz81M2YzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHdoaXRlc3BhY2VcblxudmFyIGZyb21Db2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZVxudmFyIHJlID0gL1xccy9cblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBjb2RlLCBvciB0aGUgY2hhcmFjdGVyIGNvZGUgYXQgdGhlIGZpcnN0XG4vLyBjaGFyYWN0ZXIsIGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB3aGl0ZXNwYWNlKGNoYXJhY3Rlcikge1xuICByZXR1cm4gcmUudGVzdChcbiAgICB0eXBlb2YgY2hhcmFjdGVyID09PSAnbnVtYmVyJyA/IGZyb21Db2RlKGNoYXJhY3RlcikgOiBjaGFyYWN0ZXIuY2hhckF0KDApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-whitespace-character/index.js\n"); - -/***/ }), - -/***/ "../node_modules/is-word-character/index.js": -/*!**************************************************!*\ - !*** ../node_modules/is-word-character/index.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = wordCharacter;\nvar fromCode = String.fromCharCode;\nvar re = /\\w/; // Check if the given character code, or the character code at the first\n// character, is a word character.\n\nfunction wordCharacter(character) {\n return re.test(typeof character === 'number' ? fromCode(character) : character.charAt(0));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzLXdvcmQtY2hhcmFjdGVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pcy13b3JkLWNoYXJhY3Rlci9pbmRleC5qcz9kMmIwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHdvcmRDaGFyYWN0ZXJcblxudmFyIGZyb21Db2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZVxudmFyIHJlID0gL1xcdy9cblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBjb2RlLCBvciB0aGUgY2hhcmFjdGVyIGNvZGUgYXQgdGhlIGZpcnN0XG4vLyBjaGFyYWN0ZXIsIGlzIGEgd29yZCBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB3b3JkQ2hhcmFjdGVyKGNoYXJhY3Rlcikge1xuICByZXR1cm4gcmUudGVzdChcbiAgICB0eXBlb2YgY2hhcmFjdGVyID09PSAnbnVtYmVyJyA/IGZyb21Db2RlKGNoYXJhY3RlcikgOiBjaGFyYWN0ZXIuY2hhckF0KDApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/is-word-character/index.js\n"); - -/***/ }), - -/***/ "../node_modules/isarray/index.js": -/*!****************************************!*\ - !*** ../node_modules/isarray/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanM/OTFhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/isarray/index.js\n"); - -/***/ }), - -/***/ "../node_modules/json-stringify-safe/stringify.js": -/*!********************************************************!*\ - !*** ../node_modules/json-stringify-safe/stringify.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [],\n keys = [];\n if (cycleReplacer == null) cycleReplacer = function cycleReplacer(key, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n return function (key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value);\n } else stack.push(value);\n\n return replacer == null ? value : replacer.call(this, key, value);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2pzb24tc3RyaW5naWZ5LXNhZmUvc3RyaW5naWZ5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9qc29uLXN0cmluZ2lmeS1zYWZlL3N0cmluZ2lmeS5qcz82YjQ2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHN0cmluZ2lmeVxuZXhwb3J0cy5nZXRTZXJpYWxpemUgPSBzZXJpYWxpemVyXG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMsIGN5Y2xlUmVwbGFjZXIpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplcihyZXBsYWNlciwgY3ljbGVSZXBsYWNlciksIHNwYWNlcylcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplcihyZXBsYWNlciwgY3ljbGVSZXBsYWNlcikge1xuICB2YXIgc3RhY2sgPSBbXSwga2V5cyA9IFtdXG5cbiAgaWYgKGN5Y2xlUmVwbGFjZXIgPT0gbnVsbCkgY3ljbGVSZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKSByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIlxuICAgIHJldHVybiBcIltDaXJjdWxhciB+LlwiICsga2V5cy5zbGljZSgwLCBzdGFjay5pbmRleE9mKHZhbHVlKSkuam9pbihcIi5cIikgKyBcIl1cIlxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpXG4gICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpXG4gICAgICB+dGhpc1BvcyA/IGtleXMuc3BsaWNlKHRoaXNQb3MsIEluZmluaXR5LCBrZXkpIDoga2V5cy5wdXNoKGtleSlcbiAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpIHZhbHVlID0gY3ljbGVSZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgfVxuICAgIGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSlcblxuICAgIHJldHVybiByZXBsYWNlciA9PSBudWxsID8gdmFsdWUgOiByZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFPQTtBQVRBO0FBV0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/json-stringify-safe/stringify.js\n"); - -/***/ }), - -/***/ "../node_modules/kebab-case/index.js": -/*!*******************************************!*\ - !*** ../node_modules/kebab-case/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar KEBAB_REGEX = /[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g;\nvar REVERSE_REGEX = /-[a-z\\u00E0-\\u00F6\\u00F8-\\u00FE]/g;\n\nmodule.exports = exports = function kebabCase(str) {\n return str.replace(KEBAB_REGEX, function (match) {\n return '-' + match.toLowerCase();\n });\n};\n\nexports.reverse = function (str) {\n return str.replace(REVERSE_REGEX, function (match) {\n return match.slice(1).toUpperCase();\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2tlYmFiLWNhc2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2tlYmFiLWNhc2UvaW5kZXguanM/NTVkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgS0VCQUJfUkVHRVggPSAvW0EtWlxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBERV0vZztcbnZhciBSRVZFUlNFX1JFR0VYID0gLy1bYS16XFx1MDBFMC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZFXS9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmdW5jdGlvbiBrZWJhYkNhc2Uoc3RyKSB7XG5cdHJldHVybiBzdHIucmVwbGFjZShLRUJBQl9SRUdFWCwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0cmV0dXJuICctJyArIG1hdGNoLnRvTG93ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxuZXhwb3J0cy5yZXZlcnNlID0gZnVuY3Rpb24gKHN0cikge1xuXHRyZXR1cm4gc3RyLnJlcGxhY2UoUkVWRVJTRV9SRUdFWCwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0cmV0dXJuIG1hdGNoLnNsaWNlKDEpLnRvVXBwZXJDYXNlKCk7XG5cdH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQURBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/kebab-case/index.js\n"); - -/***/ }), - -/***/ "../node_modules/keycode/index.js": -/*!****************************************!*\ - !*** ../node_modules/keycode/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // Source: http://jsfiddle.net/vWx8V/\n// http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes\n\n/**\n * Conenience method returns corresponding value for given keyName or keyCode.\n *\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Mixed}\n * @api public\n */\n\n\nfunction keyCode(searchInput) {\n // Keyboard Events\n if (searchInput && 'object' === _typeof(searchInput)) {\n var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode;\n if (hasKeyCode) searchInput = hasKeyCode;\n } // Numbers\n\n\n if ('number' === typeof searchInput) return names[searchInput]; // Everything else (cast to string)\n\n var search = String(searchInput); // check codes\n\n var foundNamedKey = codes[search.toLowerCase()];\n if (foundNamedKey) return foundNamedKey; // check aliases\n\n var foundNamedKey = aliases[search.toLowerCase()];\n if (foundNamedKey) return foundNamedKey; // weird character?\n\n if (search.length === 1) return search.charCodeAt(0);\n return undefined;\n}\n/**\n * Compares a keyboard event with a given keyCode or keyName.\n *\n * @param {Event} event Keyboard event that should be tested\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Boolean}\n * @api public\n */\n\n\nkeyCode.isEventKey = function isEventKey(event, nameOrCode) {\n if (event && 'object' === _typeof(event)) {\n var keyCode = event.which || event.keyCode || event.charCode;\n\n if (keyCode === null || keyCode === undefined) {\n return false;\n }\n\n if (typeof nameOrCode === 'string') {\n // check codes\n var foundNamedKey = codes[nameOrCode.toLowerCase()];\n\n if (foundNamedKey) {\n return foundNamedKey === keyCode;\n } // check aliases\n\n\n var foundNamedKey = aliases[nameOrCode.toLowerCase()];\n\n if (foundNamedKey) {\n return foundNamedKey === keyCode;\n }\n } else if (typeof nameOrCode === 'number') {\n return nameOrCode === keyCode;\n }\n\n return false;\n }\n};\n\nexports = module.exports = keyCode;\n/**\n * Get by name\n *\n * exports.code['enter'] // => 13\n */\n\nvar codes = exports.code = exports.codes = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'ctrl': 17,\n 'alt': 18,\n 'pause/break': 19,\n 'caps lock': 20,\n 'esc': 27,\n 'space': 32,\n 'page up': 33,\n 'page down': 34,\n 'end': 35,\n 'home': 36,\n 'left': 37,\n 'up': 38,\n 'right': 39,\n 'down': 40,\n 'insert': 45,\n 'delete': 46,\n 'command': 91,\n 'left command': 91,\n 'right command': 93,\n 'numpad *': 106,\n 'numpad +': 107,\n 'numpad -': 109,\n 'numpad .': 110,\n 'numpad /': 111,\n 'num lock': 144,\n 'scroll lock': 145,\n 'my computer': 182,\n 'my calculator': 183,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222\n}; // Helper aliases\n\nvar aliases = exports.aliases = {\n 'windows': 91,\n '⇧': 16,\n '⌥': 18,\n '⌃': 17,\n '⌘': 91,\n 'ctl': 17,\n 'control': 17,\n 'option': 18,\n 'pause': 19,\n 'break': 19,\n 'caps': 20,\n 'return': 13,\n 'escape': 27,\n 'spc': 32,\n 'spacebar': 32,\n 'pgup': 33,\n 'pgdn': 34,\n 'ins': 45,\n 'del': 46,\n 'cmd': 91\n};\n/*!\n * Programatically add the following\n */\n// lower case chars\n\nfor (i = 97; i < 123; i++) {\n codes[String.fromCharCode(i)] = i - 32;\n} // numbers\n\n\nfor (var i = 48; i < 58; i++) {\n codes[i - 48] = i;\n} // function keys\n\n\nfor (i = 1; i < 13; i++) {\n codes['f' + i] = i + 111;\n} // numpad keys\n\n\nfor (i = 0; i < 10; i++) {\n codes['numpad ' + i] = i + 96;\n}\n/**\n * Get by code\n *\n * exports.name[13] // => 'Enter'\n */\n\n\nvar names = exports.names = exports.title = {}; // title for backward compat\n// Create reverse mapping\n\nfor (i in codes) {\n names[codes[i]] = i;\n} // Add aliases\n\n\nfor (var alias in aliases) {\n codes[alias] = aliases[alias];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2tleWNvZGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2tleWNvZGUvaW5kZXguanM/MzA1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTb3VyY2U6IGh0dHA6Ly9qc2ZpZGRsZS5uZXQvdld4OFYvXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MDMxOTUvZnVsbC1saXN0LW9mLWphdmFzY3JpcHQta2V5Y29kZXNcblxuLyoqXG4gKiBDb25lbmllbmNlIG1ldGhvZCByZXR1cm5zIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIGdpdmVuIGtleU5hbWUgb3Iga2V5Q29kZS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBrZXlDb2RlIHtOdW1iZXJ9IG9yIGtleU5hbWUge1N0cmluZ31cbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBrZXlDb2RlKHNlYXJjaElucHV0KSB7XG4gIC8vIEtleWJvYXJkIEV2ZW50c1xuICBpZiAoc2VhcmNoSW5wdXQgJiYgJ29iamVjdCcgPT09IHR5cGVvZiBzZWFyY2hJbnB1dCkge1xuICAgIHZhciBoYXNLZXlDb2RlID0gc2VhcmNoSW5wdXQud2hpY2ggfHwgc2VhcmNoSW5wdXQua2V5Q29kZSB8fCBzZWFyY2hJbnB1dC5jaGFyQ29kZVxuICAgIGlmIChoYXNLZXlDb2RlKSBzZWFyY2hJbnB1dCA9IGhhc0tleUNvZGVcbiAgfVxuXG4gIC8vIE51bWJlcnNcbiAgaWYgKCdudW1iZXInID09PSB0eXBlb2Ygc2VhcmNoSW5wdXQpIHJldHVybiBuYW1lc1tzZWFyY2hJbnB1dF1cblxuICAvLyBFdmVyeXRoaW5nIGVsc2UgKGNhc3QgdG8gc3RyaW5nKVxuICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaElucHV0KVxuXG4gIC8vIGNoZWNrIGNvZGVzXG4gIHZhciBmb3VuZE5hbWVkS2V5ID0gY29kZXNbc2VhcmNoLnRvTG93ZXJDYXNlKCldXG4gIGlmIChmb3VuZE5hbWVkS2V5KSByZXR1cm4gZm91bmROYW1lZEtleVxuXG4gIC8vIGNoZWNrIGFsaWFzZXNcbiAgdmFyIGZvdW5kTmFtZWRLZXkgPSBhbGlhc2VzW3NlYXJjaC50b0xvd2VyQ2FzZSgpXVxuICBpZiAoZm91bmROYW1lZEtleSkgcmV0dXJuIGZvdW5kTmFtZWRLZXlcblxuICAvLyB3ZWlyZCBjaGFyYWN0ZXI/XG4gIGlmIChzZWFyY2gubGVuZ3RoID09PSAxKSByZXR1cm4gc2VhcmNoLmNoYXJDb2RlQXQoMClcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ29tcGFyZXMgYSBrZXlib2FyZCBldmVudCB3aXRoIGEgZ2l2ZW4ga2V5Q29kZSBvciBrZXlOYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IEtleWJvYXJkIGV2ZW50IHRoYXQgc2hvdWxkIGJlIHRlc3RlZFxuICogQHBhcmFtIHtNaXhlZH0ga2V5Q29kZSB7TnVtYmVyfSBvciBrZXlOYW1lIHtTdHJpbmd9XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xua2V5Q29kZS5pc0V2ZW50S2V5ID0gZnVuY3Rpb24gaXNFdmVudEtleShldmVudCwgbmFtZU9yQ29kZSkge1xuICBpZiAoZXZlbnQgJiYgJ29iamVjdCcgPT09IHR5cGVvZiBldmVudCkge1xuICAgIHZhciBrZXlDb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSB8fCBldmVudC5jaGFyQ29kZVxuICAgIGlmIChrZXlDb2RlID09PSBudWxsIHx8IGtleUNvZGUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIG5hbWVPckNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBjaGVjayBjb2Rlc1xuICAgICAgdmFyIGZvdW5kTmFtZWRLZXkgPSBjb2Rlc1tuYW1lT3JDb2RlLnRvTG93ZXJDYXNlKCldXG4gICAgICBpZiAoZm91bmROYW1lZEtleSkgeyByZXR1cm4gZm91bmROYW1lZEtleSA9PT0ga2V5Q29kZTsgfVxuICAgIFxuICAgICAgLy8gY2hlY2sgYWxpYXNlc1xuICAgICAgdmFyIGZvdW5kTmFtZWRLZXkgPSBhbGlhc2VzW25hbWVPckNvZGUudG9Mb3dlckNhc2UoKV1cbiAgICAgIGlmIChmb3VuZE5hbWVkS2V5KSB7IHJldHVybiBmb3VuZE5hbWVkS2V5ID09PSBrZXlDb2RlOyB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZU9yQ29kZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuYW1lT3JDb2RlID09PSBrZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ga2V5Q29kZTtcblxuLyoqXG4gKiBHZXQgYnkgbmFtZVxuICpcbiAqICAgZXhwb3J0cy5jb2RlWydlbnRlciddIC8vID0+IDEzXG4gKi9cblxudmFyIGNvZGVzID0gZXhwb3J0cy5jb2RlID0gZXhwb3J0cy5jb2RlcyA9IHtcbiAgJ2JhY2tzcGFjZSc6IDgsXG4gICd0YWInOiA5LFxuICAnZW50ZXInOiAxMyxcbiAgJ3NoaWZ0JzogMTYsXG4gICdjdHJsJzogMTcsXG4gICdhbHQnOiAxOCxcbiAgJ3BhdXNlL2JyZWFrJzogMTksXG4gICdjYXBzIGxvY2snOiAyMCxcbiAgJ2VzYyc6IDI3LFxuICAnc3BhY2UnOiAzMixcbiAgJ3BhZ2UgdXAnOiAzMyxcbiAgJ3BhZ2UgZG93bic6IDM0LFxuICAnZW5kJzogMzUsXG4gICdob21lJzogMzYsXG4gICdsZWZ0JzogMzcsXG4gICd1cCc6IDM4LFxuICAncmlnaHQnOiAzOSxcbiAgJ2Rvd24nOiA0MCxcbiAgJ2luc2VydCc6IDQ1LFxuICAnZGVsZXRlJzogNDYsXG4gICdjb21tYW5kJzogOTEsXG4gICdsZWZ0IGNvbW1hbmQnOiA5MSxcbiAgJ3JpZ2h0IGNvbW1hbmQnOiA5MyxcbiAgJ251bXBhZCAqJzogMTA2LFxuICAnbnVtcGFkICsnOiAxMDcsXG4gICdudW1wYWQgLSc6IDEwOSxcbiAgJ251bXBhZCAuJzogMTEwLFxuICAnbnVtcGFkIC8nOiAxMTEsXG4gICdudW0gbG9jayc6IDE0NCxcbiAgJ3Njcm9sbCBsb2NrJzogMTQ1LFxuICAnbXkgY29tcHV0ZXInOiAxODIsXG4gICdteSBjYWxjdWxhdG9yJzogMTgzLFxuICAnOyc6IDE4NixcbiAgJz0nOiAxODcsXG4gICcsJzogMTg4LFxuICAnLSc6IDE4OSxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJ1snOiAyMTksXG4gICdcXFxcJzogMjIwLFxuICAnXSc6IDIyMSxcbiAgXCInXCI6IDIyMlxufVxuXG4vLyBIZWxwZXIgYWxpYXNlc1xuXG52YXIgYWxpYXNlcyA9IGV4cG9ydHMuYWxpYXNlcyA9IHtcbiAgJ3dpbmRvd3MnOiA5MSxcbiAgJ+KHpyc6IDE2LFxuICAn4oylJzogMTgsXG4gICfijIMnOiAxNyxcbiAgJ+KMmCc6IDkxLFxuICAnY3RsJzogMTcsXG4gICdjb250cm9sJzogMTcsXG4gICdvcHRpb24nOiAxOCxcbiAgJ3BhdXNlJzogMTksXG4gICdicmVhayc6IDE5LFxuICAnY2Fwcyc6IDIwLFxuICAncmV0dXJuJzogMTMsXG4gICdlc2NhcGUnOiAyNyxcbiAgJ3NwYyc6IDMyLFxuICAnc3BhY2ViYXInOiAzMixcbiAgJ3BndXAnOiAzMyxcbiAgJ3BnZG4nOiAzNCxcbiAgJ2lucyc6IDQ1LFxuICAnZGVsJzogNDYsXG4gICdjbWQnOiA5MVxufVxuXG4vKiFcbiAqIFByb2dyYW1hdGljYWxseSBhZGQgdGhlIGZvbGxvd2luZ1xuICovXG5cbi8vIGxvd2VyIGNhc2UgY2hhcnNcbmZvciAoaSA9IDk3OyBpIDwgMTIzOyBpKyspIGNvZGVzW1N0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaSAtIDMyXG5cbi8vIG51bWJlcnNcbmZvciAodmFyIGkgPSA0ODsgaSA8IDU4OyBpKyspIGNvZGVzW2kgLSA0OF0gPSBpXG5cbi8vIGZ1bmN0aW9uIGtleXNcbmZvciAoaSA9IDE7IGkgPCAxMzsgaSsrKSBjb2Rlc1snZicraV0gPSBpICsgMTExXG5cbi8vIG51bXBhZCBrZXlzXG5mb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgY29kZXNbJ251bXBhZCAnK2ldID0gaSArIDk2XG5cbi8qKlxuICogR2V0IGJ5IGNvZGVcbiAqXG4gKiAgIGV4cG9ydHMubmFtZVsxM10gLy8gPT4gJ0VudGVyJ1xuICovXG5cbnZhciBuYW1lcyA9IGV4cG9ydHMubmFtZXMgPSBleHBvcnRzLnRpdGxlID0ge30gLy8gdGl0bGUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuXG4vLyBDcmVhdGUgcmV2ZXJzZSBtYXBwaW5nXG5mb3IgKGkgaW4gY29kZXMpIG5hbWVzW2NvZGVzW2ldXSA9IGlcblxuLy8gQWRkIGFsaWFzZXNcbmZvciAodmFyIGFsaWFzIGluIGFsaWFzZXMpIHtcbiAgY29kZXNbYWxpYXNdID0gYWxpYXNlc1thbGlhc11cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWhCQTtBQUNBO0FBa0JBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQ0E7QUFDQTtBQStDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUF1QkE7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFFQTs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/keycode/index.js\n"); - -/***/ }), - -/***/ "../node_modules/lbry-redux/dist/bundle.es.js": -/*!****************************************************!*\ - !*** ../node_modules/lbry-redux/dist/bundle.es.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__) {\n\nvar _handleActions, _handleActions2, _handleActions3, _options, _handleActions4, _handleActions5, _handleActions6, _handleActions7;\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && _typeof(ex) === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\n__webpack_require__(/*! proxy-polyfill */ \"../node_modules/proxy-polyfill/proxy.js\");\n\nvar reselect = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\");\n\nvar uuid = _interopDefault(__webpack_require__(/*! uuid/v4 */ \"../node_modules/uuid/v4.js\"));\n\nvar MINIMUM_PUBLISH_BID = 0.00000001;\nvar CHANNEL_ANONYMOUS = 'anonymous';\nvar CHANNEL_NEW = 'new';\nvar PAGE_SIZE = 20;\nvar claim = /*#__PURE__*/Object.freeze({\n MINIMUM_PUBLISH_BID: MINIMUM_PUBLISH_BID,\n CHANNEL_ANONYMOUS: CHANNEL_ANONYMOUS,\n CHANNEL_NEW: CHANNEL_NEW,\n PAGE_SIZE: PAGE_SIZE\n});\nvar WINDOW_FOCUSED = 'WINDOW_FOCUSED';\nvar DAEMON_READY = 'DAEMON_READY';\nvar DAEMON_VERSION_MATCH = 'DAEMON_VERSION_MATCH';\nvar DAEMON_VERSION_MISMATCH = 'DAEMON_VERSION_MISMATCH';\nvar VOLUME_CHANGED = 'VOLUME_CHANGED';\nvar SET_WELCOME_VERSION = 'SET_WELCOME_VERSION';\nvar SET_ALLOW_ANALYTICS = 'SET_ALLOW_ANALYTICS'; // Navigation\n\nvar CHANGE_AFTER_AUTH_PATH = 'CHANGE_AFTER_AUTH_PATH';\nvar WINDOW_SCROLLED = 'WINDOW_SCROLLED';\nvar HISTORY_NAVIGATE = 'HISTORY_NAVIGATE'; // Upgrades\n\nvar UPGRADE_CANCELLED = 'UPGRADE_CANCELLED';\nvar DOWNLOAD_UPGRADE = 'DOWNLOAD_UPGRADE';\nvar UPGRADE_DOWNLOAD_STARTED = 'UPGRADE_DOWNLOAD_STARTED';\nvar UPGRADE_DOWNLOAD_COMPLETED = 'UPGRADE_DOWNLOAD_COMPLETED';\nvar UPGRADE_DOWNLOAD_PROGRESSED = 'UPGRADE_DOWNLOAD_PROGRESSED';\nvar CHECK_UPGRADE_AVAILABLE = 'CHECK_UPGRADE_AVAILABLE';\nvar CHECK_UPGRADE_START = 'CHECK_UPGRADE_START';\nvar CHECK_UPGRADE_SUCCESS = 'CHECK_UPGRADE_SUCCESS';\nvar CHECK_UPGRADE_FAIL = 'CHECK_UPGRADE_FAIL';\nvar CHECK_UPGRADE_SUBSCRIBE = 'CHECK_UPGRADE_SUBSCRIBE';\nvar UPDATE_VERSION = 'UPDATE_VERSION';\nvar UPDATE_REMOTE_VERSION = 'UPDATE_REMOTE_VERSION';\nvar SKIP_UPGRADE = 'SKIP_UPGRADE';\nvar START_UPGRADE = 'START_UPGRADE';\nvar AUTO_UPDATE_DECLINED = 'AUTO_UPDATE_DECLINED';\nvar AUTO_UPDATE_DOWNLOADED = 'AUTO_UPDATE_DOWNLOADED';\nvar CLEAR_UPGRADE_TIMER = 'CLEAR_UPGRADE_TIMER'; // Wallet\n\nvar GET_NEW_ADDRESS_STARTED = 'GET_NEW_ADDRESS_STARTED';\nvar GET_NEW_ADDRESS_COMPLETED = 'GET_NEW_ADDRESS_COMPLETED';\nvar FETCH_TRANSACTIONS_STARTED = 'FETCH_TRANSACTIONS_STARTED';\nvar FETCH_TRANSACTIONS_COMPLETED = 'FETCH_TRANSACTIONS_COMPLETED';\nvar FETCH_SUPPORTS_STARTED = 'FETCH_SUPPORTS_STARTED';\nvar FETCH_SUPPORTS_COMPLETED = 'FETCH_SUPPORTS_COMPLETED';\nvar ABANDON_SUPPORT_STARTED = 'ABANDON_SUPPORT_STARTED';\nvar ABANDON_SUPPORT_COMPLETED = 'ABANDON_SUPPORT_COMPLETED';\nvar ABANDON_CLAIM_SUPPORT_STARTED = 'ABANDON_CLAIM_SUPPORT_STARTED';\nvar ABANDON_CLAIM_SUPPORT_COMPLETED = 'ABANDON_CLAIM_SUPPORT_COMPLETED';\nvar ABANDON_CLAIM_SUPPORT_FAILED = 'ABANDON_CLAIM_SUPPORT_FAILED';\nvar ABANDON_CLAIM_SUPPORT_PREVIEW = 'ABANDON_CLAIM_SUPPORT_PREVIEW';\nvar PENDING_SUPPORTS_UPDATED = 'PENDING_SUPPORTS_UPDATED';\nvar UPDATE_BALANCE = 'UPDATE_BALANCE';\nvar UPDATE_TOTAL_BALANCE = 'UPDATE_TOTAL_BALANCE';\nvar CHECK_ADDRESS_IS_MINE_STARTED = 'CHECK_ADDRESS_IS_MINE_STARTED';\nvar CHECK_ADDRESS_IS_MINE_COMPLETED = 'CHECK_ADDRESS_IS_MINE_COMPLETED';\nvar SEND_TRANSACTION_STARTED = 'SEND_TRANSACTION_STARTED';\nvar SEND_TRANSACTION_COMPLETED = 'SEND_TRANSACTION_COMPLETED';\nvar SEND_TRANSACTION_FAILED = 'SEND_TRANSACTION_FAILED';\nvar SUPPORT_TRANSACTION_STARTED = 'SUPPORT_TRANSACTION_STARTED';\nvar SUPPORT_TRANSACTION_COMPLETED = 'SUPPORT_TRANSACTION_COMPLETED';\nvar SUPPORT_TRANSACTION_FAILED = 'SUPPORT_TRANSACTION_FAILED';\nvar CLEAR_SUPPORT_TRANSACTION = 'CLEAR_SUPPORT_TRANSACTION';\nvar WALLET_ENCRYPT_START = 'WALLET_ENCRYPT_START';\nvar WALLET_ENCRYPT_COMPLETED = 'WALLET_ENCRYPT_COMPLETED';\nvar WALLET_ENCRYPT_FAILED = 'WALLET_ENCRYPT_FAILED';\nvar WALLET_UNLOCK_START = 'WALLET_UNLOCK_START';\nvar WALLET_UNLOCK_COMPLETED = 'WALLET_UNLOCK_COMPLETED';\nvar WALLET_UNLOCK_FAILED = 'WALLET_UNLOCK_FAILED';\nvar WALLET_DECRYPT_START = 'WALLET_DECRYPT_START';\nvar WALLET_DECRYPT_COMPLETED = 'WALLET_DECRYPT_COMPLETED';\nvar WALLET_DECRYPT_FAILED = 'WALLET_DECRYPT_FAILED';\nvar WALLET_LOCK_START = 'WALLET_LOCK_START';\nvar WALLET_LOCK_COMPLETED = 'WALLET_LOCK_COMPLETED';\nvar WALLET_LOCK_FAILED = 'WALLET_LOCK_FAILED';\nvar WALLET_STATUS_START = 'WALLET_STATUS_START';\nvar WALLET_STATUS_COMPLETED = 'WALLET_STATUS_COMPLETED';\nvar WALLET_RESTART = 'WALLET_RESTART';\nvar WALLET_RESTART_COMPLETED = 'WALLET_RESTART_COMPLETED';\nvar SET_TRANSACTION_LIST_FILTER = 'SET_TRANSACTION_LIST_FILTER';\nvar UPDATE_CURRENT_HEIGHT = 'UPDATE_CURRENT_HEIGHT';\nvar SET_DRAFT_TRANSACTION_AMOUNT = 'SET_DRAFT_TRANSACTION_AMOUNT';\nvar SET_DRAFT_TRANSACTION_ADDRESS = 'SET_DRAFT_TRANSACTION_ADDRESS'; // Claims\n\nvar RESOLVE_URIS_STARTED = 'RESOLVE_URIS_STARTED';\nvar RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED';\nvar FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED';\nvar FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED';\nvar FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED';\nvar FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED';\nvar ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED';\nvar ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED';\nvar FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED';\nvar FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED';\nvar CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED';\nvar CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED';\nvar CREATE_CHANNEL_FAILED = 'CREATE_CHANNEL_FAILED';\nvar UPDATE_CHANNEL_STARTED = 'UPDATE_CHANNEL_STARTED';\nvar UPDATE_CHANNEL_COMPLETED = 'UPDATE_CHANNEL_COMPLETED';\nvar UPDATE_CHANNEL_FAILED = 'UPDATE_CHANNEL_FAILED';\nvar IMPORT_CHANNEL_STARTED = 'IMPORT_CHANNEL_STARTED';\nvar IMPORT_CHANNEL_COMPLETED = 'IMPORT_CHANNEL_COMPLETED';\nvar IMPORT_CHANNEL_FAILED = 'IMPORT_CHANNEL_FAILED';\nvar PUBLISH_STARTED = 'PUBLISH_STARTED';\nvar PUBLISH_COMPLETED = 'PUBLISH_COMPLETED';\nvar PUBLISH_FAILED = 'PUBLISH_FAILED';\nvar SET_PLAYING_URI = 'SET_PLAYING_URI';\nvar SET_CONTENT_POSITION = 'SET_CONTENT_POSITION';\nvar SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED';\nvar CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI';\nvar CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL';\nvar CLAIM_SEARCH_STARTED = 'CLAIM_SEARCH_STARTED';\nvar CLAIM_SEARCH_COMPLETED = 'CLAIM_SEARCH_COMPLETED';\nvar CLAIM_SEARCH_FAILED = 'CLAIM_SEARCH_FAILED';\nvar CLAIM_SEARCH_BY_TAGS_STARTED = 'CLAIM_SEARCH_BY_TAGS_STARTED';\nvar CLAIM_SEARCH_BY_TAGS_COMPLETED = 'CLAIM_SEARCH_BY_TAGS_COMPLETED';\nvar CLAIM_SEARCH_BY_TAGS_FAILED = 'CLAIM_SEARCH_BY_TAGS_FAILED';\nvar CLAIM_REPOST_STARTED = 'CLAIM_REPOST_STARTED';\nvar CLAIM_REPOST_COMPLETED = 'CLAIM_REPOST_COMPLETED';\nvar CLAIM_REPOST_FAILED = 'CLAIM_REPOST_FAILED';\nvar CLEAR_REPOST_ERROR = 'CLEAR_REPOST_ERROR'; // Comments\n\nvar COMMENT_LIST_STARTED = 'COMMENT_LIST_STARTED';\nvar COMMENT_LIST_COMPLETED = 'COMMENT_LIST_COMPLETED';\nvar COMMENT_LIST_FAILED = 'COMMENT_LIST_FAILED';\nvar COMMENT_CREATE_STARTED = 'COMMENT_CREATE_STARTED';\nvar COMMENT_CREATE_COMPLETED = 'COMMENT_CREATE_COMPLETED';\nvar COMMENT_CREATE_FAILED = 'COMMENT_CREATE_FAILED';\nvar COMMENT_ABANDON_STARTED = 'COMMENT_ABANDON_STARTED';\nvar COMMENT_ABANDON_COMPLETED = 'COMMENT_ABANDON_COMPLETED';\nvar COMMENT_ABANDON_FAILED = 'COMMENT_ABANDON_FAILED';\nvar COMMENT_UPDATE_STARTED = 'COMMENT_UPDATE_STARTED';\nvar COMMENT_UPDATE_COMPLETED = 'COMMENT_UPDATE_COMPLETED';\nvar COMMENT_UPDATE_FAILED = 'COMMENT_UPDATE_FAILED';\nvar COMMENT_HIDE_STARTED = 'COMMENT_HIDE_STARTED';\nvar COMMENT_HIDE_COMPLETED = 'COMMENT_HIDE_COMPLETED';\nvar COMMENT_HIDE_FAILED = 'COMMENT_HIDE_FAILED'; // Files\n\nvar FILE_LIST_STARTED = 'FILE_LIST_STARTED';\nvar FILE_LIST_SUCCEEDED = 'FILE_LIST_SUCCEEDED';\nvar FETCH_FILE_INFO_STARTED = 'FETCH_FILE_INFO_STARTED';\nvar FETCH_FILE_INFO_COMPLETED = 'FETCH_FILE_INFO_COMPLETED';\nvar FETCH_FILE_INFO_FAILED = 'FETCH_FILE_INFO_FAILED';\nvar LOADING_VIDEO_STARTED = 'LOADING_VIDEO_STARTED';\nvar LOADING_VIDEO_COMPLETED = 'LOADING_VIDEO_COMPLETED';\nvar LOADING_VIDEO_FAILED = 'LOADING_VIDEO_FAILED';\nvar DOWNLOADING_STARTED = 'DOWNLOADING_STARTED';\nvar DOWNLOADING_PROGRESSED = 'DOWNLOADING_PROGRESSED';\nvar DOWNLOADING_COMPLETED = 'DOWNLOADING_COMPLETED';\nvar DOWNLOADING_CANCELED = 'DOWNLOADING_CANCELED';\nvar PLAY_VIDEO_STARTED = 'PLAY_VIDEO_STARTED';\nvar FETCH_AVAILABILITY_STARTED = 'FETCH_AVAILABILITY_STARTED';\nvar FETCH_AVAILABILITY_COMPLETED = 'FETCH_AVAILABILITY_COMPLETED';\nvar FILE_DELETE = 'FILE_DELETE';\nvar SET_FILE_LIST_SORT = 'SET_FILE_LIST_SORT';\nvar PURCHASE_URI_STARTED = 'PURCHASE_URI_STARTED';\nvar PURCHASE_URI_COMPLETED = 'PURCHASE_URI_COMPLETED';\nvar PURCHASE_URI_FAILED = 'PURCHASE_URI_FAILED';\nvar DELETE_PURCHASED_URI = 'DELETE_PURCHASED_URI'; // Search\n\nvar SEARCH_START = 'SEARCH_START';\nvar SEARCH_SUCCESS = 'SEARCH_SUCCESS';\nvar SEARCH_FAIL = 'SEARCH_FAIL';\nvar RESOLVED_SEARCH_START = 'RESOLVED_SEARCH_START';\nvar RESOLVED_SEARCH_SUCCESS = 'RESOLVED_SEARCH_SUCCESS';\nvar RESOLVED_SEARCH_FAIL = 'RESOLVED_SEARCH_FAIL';\nvar UPDATE_SEARCH_QUERY = 'UPDATE_SEARCH_QUERY';\nvar UPDATE_SEARCH_OPTIONS = 'UPDATE_SEARCH_OPTIONS';\nvar UPDATE_SEARCH_SUGGESTIONS = 'UPDATE_SEARCH_SUGGESTIONS';\nvar SEARCH_FOCUS = 'SEARCH_FOCUS';\nvar SEARCH_BLUR = 'SEARCH_BLUR'; // Settings\n\nvar DAEMON_SETTINGS_RECEIVED = 'DAEMON_SETTINGS_RECEIVED';\nvar DAEMON_STATUS_RECEIVED = 'DAEMON_STATUS_RECEIVED';\nvar SHARED_PREFERENCE_SET = 'SHARED_PREFERENCE_SET';\nvar SAVE_CUSTOM_WALLET_SERVERS = 'SAVE_CUSTOM_WALLET_SERVERS';\nvar CLIENT_SETTING_CHANGED = 'CLIENT_SETTING_CHANGED';\nvar UPDATE_IS_NIGHT = 'UPDATE_IS_NIGHT'; // User\n\nvar AUTHENTICATION_STARTED = 'AUTHENTICATION_STARTED';\nvar AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS';\nvar AUTHENTICATION_FAILURE = 'AUTHENTICATION_FAILURE';\nvar USER_EMAIL_DECLINE = 'USER_EMAIL_DECLINE';\nvar USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_STARTED';\nvar USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS';\nvar USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS';\nvar USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE';\nvar USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET';\nvar USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED';\nvar USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS';\nvar USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY';\nvar USER_PHONE_RESET = 'USER_PHONE_RESET';\nvar USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED';\nvar USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS';\nvar USER_PHONE_NEW_FAILURE = 'USER_PHONE_NEW_FAILURE';\nvar USER_PHONE_VERIFY_STARTED = 'USER_PHONE_VERIFY_STARTED';\nvar USER_PHONE_VERIFY_SUCCESS = 'USER_PHONE_VERIFY_SUCCESS';\nvar USER_PHONE_VERIFY_FAILURE = 'USER_PHONE_VERIFY_FAILURE';\nvar USER_IDENTITY_VERIFY_STARTED = 'USER_IDENTITY_VERIFY_STARTED';\nvar USER_IDENTITY_VERIFY_SUCCESS = 'USER_IDENTITY_VERIFY_SUCCESS';\nvar USER_IDENTITY_VERIFY_FAILURE = 'USER_IDENTITY_VERIFY_FAILURE';\nvar USER_FETCH_STARTED = 'USER_FETCH_STARTED';\nvar USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS';\nvar USER_FETCH_FAILURE = 'USER_FETCH_FAILURE';\nvar USER_INVITE_STATUS_FETCH_STARTED = 'USER_INVITE_STATUS_FETCH_STARTED';\nvar USER_INVITE_STATUS_FETCH_SUCCESS = 'USER_INVITE_STATUS_FETCH_SUCCESS';\nvar USER_INVITE_STATUS_FETCH_FAILURE = 'USER_INVITE_STATUS_FETCH_FAILURE';\nvar USER_INVITE_NEW_STARTED = 'USER_INVITE_NEW_STARTED';\nvar USER_INVITE_NEW_SUCCESS = 'USER_INVITE_NEW_SUCCESS';\nvar USER_INVITE_NEW_FAILURE = 'USER_INVITE_NEW_FAILURE';\nvar FETCH_ACCESS_TOKEN_SUCCESS = 'FETCH_ACCESS_TOKEN_SUCCESS'; // Rewards\n\nvar FETCH_REWARDS_STARTED = 'FETCH_REWARDS_STARTED';\nvar FETCH_REWARDS_COMPLETED = 'FETCH_REWARDS_COMPLETED';\nvar CLAIM_REWARD_STARTED = 'CLAIM_REWARD_STARTED';\nvar CLAIM_REWARD_SUCCESS = 'CLAIM_REWARD_SUCCESS';\nvar CLAIM_REWARD_FAILURE = 'CLAIM_REWARD_FAILURE';\nvar CLAIM_REWARD_CLEAR_ERROR = 'CLAIM_REWARD_CLEAR_ERROR';\nvar FETCH_REWARD_CONTENT_COMPLETED = 'FETCH_REWARD_CONTENT_COMPLETED'; // Language\n\nvar DOWNLOAD_LANGUAGE_SUCCEEDED = 'DOWNLOAD_LANGUAGE_SUCCEEDED';\nvar DOWNLOAD_LANGUAGE_FAILED = 'DOWNLOAD_LANGUAGE_FAILED'; // Subscriptions\n\nvar CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE';\nvar CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE';\nvar HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS';\nvar SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST';\nvar SET_SUBSCRIPTION_NOTIFICATION = 'SET_SUBSCRIPTION_NOTIFICATION';\nvar SET_SUBSCRIPTION_NOTIFICATIONS = 'SET_SUBSCRIPTION_NOTIFICATIONS';\nvar CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED';\nvar CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED';\nvar CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE'; // Publishing\n\nvar CLEAR_PUBLISH = 'CLEAR_PUBLISH';\nvar UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM';\nvar PUBLISH_START = 'PUBLISH_START';\nvar PUBLISH_SUCCESS = 'PUBLISH_SUCCESS';\nvar PUBLISH_FAIL = 'PUBLISH_FAIL';\nvar CLEAR_PUBLISH_ERROR = 'CLEAR_PUBLISH_ERROR';\nvar REMOVE_PENDING_PUBLISH = 'REMOVE_PENDING_PUBLISH';\nvar DO_PREPARE_EDIT = 'DO_PREPARE_EDIT'; // Notifications\n\nvar CREATE_NOTIFICATION = 'CREATE_NOTIFICATION';\nvar EDIT_NOTIFICATION = 'EDIT_NOTIFICATION';\nvar DELETE_NOTIFICATION = 'DELETE_NOTIFICATION';\nvar DISMISS_NOTIFICATION = 'DISMISS_NOTIFICATION';\nvar CREATE_TOAST = 'CREATE_TOAST';\nvar DISMISS_TOAST = 'DISMISS_TOAST';\nvar CREATE_ERROR = 'CREATE_ERROR';\nvar DISMISS_ERROR = 'DISMISS_ERROR';\nvar FETCH_DATE = 'FETCH_DATE'; // Cost info\n\nvar FETCH_COST_INFO_STARTED = 'FETCH_COST_INFO_STARTED';\nvar FETCH_COST_INFO_COMPLETED = 'FETCH_COST_INFO_COMPLETED';\nvar FETCH_COST_INFO_FAILED = 'FETCH_COST_INFO_FAILED'; // Tags\n\nvar TOGGLE_TAG_FOLLOW = 'TOGGLE_TAG_FOLLOW';\nvar TAG_ADD = 'TAG_ADD';\nvar TAG_DELETE = 'TAG_DELETE'; // Blocked Channels\n\nvar TOGGLE_BLOCK_CHANNEL = 'TOGGLE_BLOCK_CHANNEL'; // Sync\n\nvar USER_STATE_POPULATE = 'USER_STATE_POPULATE';\nvar action_types = /*#__PURE__*/Object.freeze({\n WINDOW_FOCUSED: WINDOW_FOCUSED,\n DAEMON_READY: DAEMON_READY,\n DAEMON_VERSION_MATCH: DAEMON_VERSION_MATCH,\n DAEMON_VERSION_MISMATCH: DAEMON_VERSION_MISMATCH,\n VOLUME_CHANGED: VOLUME_CHANGED,\n SET_WELCOME_VERSION: SET_WELCOME_VERSION,\n SET_ALLOW_ANALYTICS: SET_ALLOW_ANALYTICS,\n CHANGE_AFTER_AUTH_PATH: CHANGE_AFTER_AUTH_PATH,\n WINDOW_SCROLLED: WINDOW_SCROLLED,\n HISTORY_NAVIGATE: HISTORY_NAVIGATE,\n UPGRADE_CANCELLED: UPGRADE_CANCELLED,\n DOWNLOAD_UPGRADE: DOWNLOAD_UPGRADE,\n UPGRADE_DOWNLOAD_STARTED: UPGRADE_DOWNLOAD_STARTED,\n UPGRADE_DOWNLOAD_COMPLETED: UPGRADE_DOWNLOAD_COMPLETED,\n UPGRADE_DOWNLOAD_PROGRESSED: UPGRADE_DOWNLOAD_PROGRESSED,\n CHECK_UPGRADE_AVAILABLE: CHECK_UPGRADE_AVAILABLE,\n CHECK_UPGRADE_START: CHECK_UPGRADE_START,\n CHECK_UPGRADE_SUCCESS: CHECK_UPGRADE_SUCCESS,\n CHECK_UPGRADE_FAIL: CHECK_UPGRADE_FAIL,\n CHECK_UPGRADE_SUBSCRIBE: CHECK_UPGRADE_SUBSCRIBE,\n UPDATE_VERSION: UPDATE_VERSION,\n UPDATE_REMOTE_VERSION: UPDATE_REMOTE_VERSION,\n SKIP_UPGRADE: SKIP_UPGRADE,\n START_UPGRADE: START_UPGRADE,\n AUTO_UPDATE_DECLINED: AUTO_UPDATE_DECLINED,\n AUTO_UPDATE_DOWNLOADED: AUTO_UPDATE_DOWNLOADED,\n CLEAR_UPGRADE_TIMER: CLEAR_UPGRADE_TIMER,\n GET_NEW_ADDRESS_STARTED: GET_NEW_ADDRESS_STARTED,\n GET_NEW_ADDRESS_COMPLETED: GET_NEW_ADDRESS_COMPLETED,\n FETCH_TRANSACTIONS_STARTED: FETCH_TRANSACTIONS_STARTED,\n FETCH_TRANSACTIONS_COMPLETED: FETCH_TRANSACTIONS_COMPLETED,\n FETCH_SUPPORTS_STARTED: FETCH_SUPPORTS_STARTED,\n FETCH_SUPPORTS_COMPLETED: FETCH_SUPPORTS_COMPLETED,\n ABANDON_SUPPORT_STARTED: ABANDON_SUPPORT_STARTED,\n ABANDON_SUPPORT_COMPLETED: ABANDON_SUPPORT_COMPLETED,\n ABANDON_CLAIM_SUPPORT_STARTED: ABANDON_CLAIM_SUPPORT_STARTED,\n ABANDON_CLAIM_SUPPORT_COMPLETED: ABANDON_CLAIM_SUPPORT_COMPLETED,\n ABANDON_CLAIM_SUPPORT_FAILED: ABANDON_CLAIM_SUPPORT_FAILED,\n ABANDON_CLAIM_SUPPORT_PREVIEW: ABANDON_CLAIM_SUPPORT_PREVIEW,\n PENDING_SUPPORTS_UPDATED: PENDING_SUPPORTS_UPDATED,\n UPDATE_BALANCE: UPDATE_BALANCE,\n UPDATE_TOTAL_BALANCE: UPDATE_TOTAL_BALANCE,\n CHECK_ADDRESS_IS_MINE_STARTED: CHECK_ADDRESS_IS_MINE_STARTED,\n CHECK_ADDRESS_IS_MINE_COMPLETED: CHECK_ADDRESS_IS_MINE_COMPLETED,\n SEND_TRANSACTION_STARTED: SEND_TRANSACTION_STARTED,\n SEND_TRANSACTION_COMPLETED: SEND_TRANSACTION_COMPLETED,\n SEND_TRANSACTION_FAILED: SEND_TRANSACTION_FAILED,\n SUPPORT_TRANSACTION_STARTED: SUPPORT_TRANSACTION_STARTED,\n SUPPORT_TRANSACTION_COMPLETED: SUPPORT_TRANSACTION_COMPLETED,\n SUPPORT_TRANSACTION_FAILED: SUPPORT_TRANSACTION_FAILED,\n CLEAR_SUPPORT_TRANSACTION: CLEAR_SUPPORT_TRANSACTION,\n WALLET_ENCRYPT_START: WALLET_ENCRYPT_START,\n WALLET_ENCRYPT_COMPLETED: WALLET_ENCRYPT_COMPLETED,\n WALLET_ENCRYPT_FAILED: WALLET_ENCRYPT_FAILED,\n WALLET_UNLOCK_START: WALLET_UNLOCK_START,\n WALLET_UNLOCK_COMPLETED: WALLET_UNLOCK_COMPLETED,\n WALLET_UNLOCK_FAILED: WALLET_UNLOCK_FAILED,\n WALLET_DECRYPT_START: WALLET_DECRYPT_START,\n WALLET_DECRYPT_COMPLETED: WALLET_DECRYPT_COMPLETED,\n WALLET_DECRYPT_FAILED: WALLET_DECRYPT_FAILED,\n WALLET_LOCK_START: WALLET_LOCK_START,\n WALLET_LOCK_COMPLETED: WALLET_LOCK_COMPLETED,\n WALLET_LOCK_FAILED: WALLET_LOCK_FAILED,\n WALLET_STATUS_START: WALLET_STATUS_START,\n WALLET_STATUS_COMPLETED: WALLET_STATUS_COMPLETED,\n WALLET_RESTART: WALLET_RESTART,\n WALLET_RESTART_COMPLETED: WALLET_RESTART_COMPLETED,\n SET_TRANSACTION_LIST_FILTER: SET_TRANSACTION_LIST_FILTER,\n UPDATE_CURRENT_HEIGHT: UPDATE_CURRENT_HEIGHT,\n SET_DRAFT_TRANSACTION_AMOUNT: SET_DRAFT_TRANSACTION_AMOUNT,\n SET_DRAFT_TRANSACTION_ADDRESS: SET_DRAFT_TRANSACTION_ADDRESS,\n RESOLVE_URIS_STARTED: RESOLVE_URIS_STARTED,\n RESOLVE_URIS_COMPLETED: RESOLVE_URIS_COMPLETED,\n FETCH_CHANNEL_CLAIMS_STARTED: FETCH_CHANNEL_CLAIMS_STARTED,\n FETCH_CHANNEL_CLAIMS_COMPLETED: FETCH_CHANNEL_CLAIMS_COMPLETED,\n FETCH_CLAIM_LIST_MINE_STARTED: FETCH_CLAIM_LIST_MINE_STARTED,\n FETCH_CLAIM_LIST_MINE_COMPLETED: FETCH_CLAIM_LIST_MINE_COMPLETED,\n ABANDON_CLAIM_STARTED: ABANDON_CLAIM_STARTED,\n ABANDON_CLAIM_SUCCEEDED: ABANDON_CLAIM_SUCCEEDED,\n FETCH_CHANNEL_LIST_STARTED: FETCH_CHANNEL_LIST_STARTED,\n FETCH_CHANNEL_LIST_COMPLETED: FETCH_CHANNEL_LIST_COMPLETED,\n CREATE_CHANNEL_STARTED: CREATE_CHANNEL_STARTED,\n CREATE_CHANNEL_COMPLETED: CREATE_CHANNEL_COMPLETED,\n CREATE_CHANNEL_FAILED: CREATE_CHANNEL_FAILED,\n UPDATE_CHANNEL_STARTED: UPDATE_CHANNEL_STARTED,\n UPDATE_CHANNEL_COMPLETED: UPDATE_CHANNEL_COMPLETED,\n UPDATE_CHANNEL_FAILED: UPDATE_CHANNEL_FAILED,\n IMPORT_CHANNEL_STARTED: IMPORT_CHANNEL_STARTED,\n IMPORT_CHANNEL_COMPLETED: IMPORT_CHANNEL_COMPLETED,\n IMPORT_CHANNEL_FAILED: IMPORT_CHANNEL_FAILED,\n PUBLISH_STARTED: PUBLISH_STARTED,\n PUBLISH_COMPLETED: PUBLISH_COMPLETED,\n PUBLISH_FAILED: PUBLISH_FAILED,\n SET_PLAYING_URI: SET_PLAYING_URI,\n SET_CONTENT_POSITION: SET_CONTENT_POSITION,\n SET_CONTENT_LAST_VIEWED: SET_CONTENT_LAST_VIEWED,\n CLEAR_CONTENT_HISTORY_URI: CLEAR_CONTENT_HISTORY_URI,\n CLEAR_CONTENT_HISTORY_ALL: CLEAR_CONTENT_HISTORY_ALL,\n CLAIM_SEARCH_STARTED: CLAIM_SEARCH_STARTED,\n CLAIM_SEARCH_COMPLETED: CLAIM_SEARCH_COMPLETED,\n CLAIM_SEARCH_FAILED: CLAIM_SEARCH_FAILED,\n CLAIM_SEARCH_BY_TAGS_STARTED: CLAIM_SEARCH_BY_TAGS_STARTED,\n CLAIM_SEARCH_BY_TAGS_COMPLETED: CLAIM_SEARCH_BY_TAGS_COMPLETED,\n CLAIM_SEARCH_BY_TAGS_FAILED: CLAIM_SEARCH_BY_TAGS_FAILED,\n CLAIM_REPOST_STARTED: CLAIM_REPOST_STARTED,\n CLAIM_REPOST_COMPLETED: CLAIM_REPOST_COMPLETED,\n CLAIM_REPOST_FAILED: CLAIM_REPOST_FAILED,\n CLEAR_REPOST_ERROR: CLEAR_REPOST_ERROR,\n COMMENT_LIST_STARTED: COMMENT_LIST_STARTED,\n COMMENT_LIST_COMPLETED: COMMENT_LIST_COMPLETED,\n COMMENT_LIST_FAILED: COMMENT_LIST_FAILED,\n COMMENT_CREATE_STARTED: COMMENT_CREATE_STARTED,\n COMMENT_CREATE_COMPLETED: COMMENT_CREATE_COMPLETED,\n COMMENT_CREATE_FAILED: COMMENT_CREATE_FAILED,\n COMMENT_ABANDON_STARTED: COMMENT_ABANDON_STARTED,\n COMMENT_ABANDON_COMPLETED: COMMENT_ABANDON_COMPLETED,\n COMMENT_ABANDON_FAILED: COMMENT_ABANDON_FAILED,\n COMMENT_UPDATE_STARTED: COMMENT_UPDATE_STARTED,\n COMMENT_UPDATE_COMPLETED: COMMENT_UPDATE_COMPLETED,\n COMMENT_UPDATE_FAILED: COMMENT_UPDATE_FAILED,\n COMMENT_HIDE_STARTED: COMMENT_HIDE_STARTED,\n COMMENT_HIDE_COMPLETED: COMMENT_HIDE_COMPLETED,\n COMMENT_HIDE_FAILED: COMMENT_HIDE_FAILED,\n FILE_LIST_STARTED: FILE_LIST_STARTED,\n FILE_LIST_SUCCEEDED: FILE_LIST_SUCCEEDED,\n FETCH_FILE_INFO_STARTED: FETCH_FILE_INFO_STARTED,\n FETCH_FILE_INFO_COMPLETED: FETCH_FILE_INFO_COMPLETED,\n FETCH_FILE_INFO_FAILED: FETCH_FILE_INFO_FAILED,\n LOADING_VIDEO_STARTED: LOADING_VIDEO_STARTED,\n LOADING_VIDEO_COMPLETED: LOADING_VIDEO_COMPLETED,\n LOADING_VIDEO_FAILED: LOADING_VIDEO_FAILED,\n DOWNLOADING_STARTED: DOWNLOADING_STARTED,\n DOWNLOADING_PROGRESSED: DOWNLOADING_PROGRESSED,\n DOWNLOADING_COMPLETED: DOWNLOADING_COMPLETED,\n DOWNLOADING_CANCELED: DOWNLOADING_CANCELED,\n PLAY_VIDEO_STARTED: PLAY_VIDEO_STARTED,\n FETCH_AVAILABILITY_STARTED: FETCH_AVAILABILITY_STARTED,\n FETCH_AVAILABILITY_COMPLETED: FETCH_AVAILABILITY_COMPLETED,\n FILE_DELETE: FILE_DELETE,\n SET_FILE_LIST_SORT: SET_FILE_LIST_SORT,\n PURCHASE_URI_STARTED: PURCHASE_URI_STARTED,\n PURCHASE_URI_COMPLETED: PURCHASE_URI_COMPLETED,\n PURCHASE_URI_FAILED: PURCHASE_URI_FAILED,\n DELETE_PURCHASED_URI: DELETE_PURCHASED_URI,\n SEARCH_START: SEARCH_START,\n SEARCH_SUCCESS: SEARCH_SUCCESS,\n SEARCH_FAIL: SEARCH_FAIL,\n RESOLVED_SEARCH_START: RESOLVED_SEARCH_START,\n RESOLVED_SEARCH_SUCCESS: RESOLVED_SEARCH_SUCCESS,\n RESOLVED_SEARCH_FAIL: RESOLVED_SEARCH_FAIL,\n UPDATE_SEARCH_QUERY: UPDATE_SEARCH_QUERY,\n UPDATE_SEARCH_OPTIONS: UPDATE_SEARCH_OPTIONS,\n UPDATE_SEARCH_SUGGESTIONS: UPDATE_SEARCH_SUGGESTIONS,\n SEARCH_FOCUS: SEARCH_FOCUS,\n SEARCH_BLUR: SEARCH_BLUR,\n DAEMON_SETTINGS_RECEIVED: DAEMON_SETTINGS_RECEIVED,\n DAEMON_STATUS_RECEIVED: DAEMON_STATUS_RECEIVED,\n SHARED_PREFERENCE_SET: SHARED_PREFERENCE_SET,\n SAVE_CUSTOM_WALLET_SERVERS: SAVE_CUSTOM_WALLET_SERVERS,\n CLIENT_SETTING_CHANGED: CLIENT_SETTING_CHANGED,\n UPDATE_IS_NIGHT: UPDATE_IS_NIGHT,\n AUTHENTICATION_STARTED: AUTHENTICATION_STARTED,\n AUTHENTICATION_SUCCESS: AUTHENTICATION_SUCCESS,\n AUTHENTICATION_FAILURE: AUTHENTICATION_FAILURE,\n USER_EMAIL_DECLINE: USER_EMAIL_DECLINE,\n USER_EMAIL_NEW_STARTED: USER_EMAIL_NEW_STARTED,\n USER_EMAIL_NEW_SUCCESS: USER_EMAIL_NEW_SUCCESS,\n USER_EMAIL_NEW_EXISTS: USER_EMAIL_NEW_EXISTS,\n USER_EMAIL_NEW_FAILURE: USER_EMAIL_NEW_FAILURE,\n USER_EMAIL_VERIFY_SET: USER_EMAIL_VERIFY_SET,\n USER_EMAIL_VERIFY_STARTED: USER_EMAIL_VERIFY_STARTED,\n USER_EMAIL_VERIFY_SUCCESS: USER_EMAIL_VERIFY_SUCCESS,\n USER_EMAIL_VERIFY_FAILURE: USER_EMAIL_VERIFY_FAILURE,\n USER_EMAIL_VERIFY_RETRY: USER_EMAIL_VERIFY_RETRY,\n USER_PHONE_RESET: USER_PHONE_RESET,\n USER_PHONE_NEW_STARTED: USER_PHONE_NEW_STARTED,\n USER_PHONE_NEW_SUCCESS: USER_PHONE_NEW_SUCCESS,\n USER_PHONE_NEW_FAILURE: USER_PHONE_NEW_FAILURE,\n USER_PHONE_VERIFY_STARTED: USER_PHONE_VERIFY_STARTED,\n USER_PHONE_VERIFY_SUCCESS: USER_PHONE_VERIFY_SUCCESS,\n USER_PHONE_VERIFY_FAILURE: USER_PHONE_VERIFY_FAILURE,\n USER_IDENTITY_VERIFY_STARTED: USER_IDENTITY_VERIFY_STARTED,\n USER_IDENTITY_VERIFY_SUCCESS: USER_IDENTITY_VERIFY_SUCCESS,\n USER_IDENTITY_VERIFY_FAILURE: USER_IDENTITY_VERIFY_FAILURE,\n USER_FETCH_STARTED: USER_FETCH_STARTED,\n USER_FETCH_SUCCESS: USER_FETCH_SUCCESS,\n USER_FETCH_FAILURE: USER_FETCH_FAILURE,\n USER_INVITE_STATUS_FETCH_STARTED: USER_INVITE_STATUS_FETCH_STARTED,\n USER_INVITE_STATUS_FETCH_SUCCESS: USER_INVITE_STATUS_FETCH_SUCCESS,\n USER_INVITE_STATUS_FETCH_FAILURE: USER_INVITE_STATUS_FETCH_FAILURE,\n USER_INVITE_NEW_STARTED: USER_INVITE_NEW_STARTED,\n USER_INVITE_NEW_SUCCESS: USER_INVITE_NEW_SUCCESS,\n USER_INVITE_NEW_FAILURE: USER_INVITE_NEW_FAILURE,\n FETCH_ACCESS_TOKEN_SUCCESS: FETCH_ACCESS_TOKEN_SUCCESS,\n FETCH_REWARDS_STARTED: FETCH_REWARDS_STARTED,\n FETCH_REWARDS_COMPLETED: FETCH_REWARDS_COMPLETED,\n CLAIM_REWARD_STARTED: CLAIM_REWARD_STARTED,\n CLAIM_REWARD_SUCCESS: CLAIM_REWARD_SUCCESS,\n CLAIM_REWARD_FAILURE: CLAIM_REWARD_FAILURE,\n CLAIM_REWARD_CLEAR_ERROR: CLAIM_REWARD_CLEAR_ERROR,\n FETCH_REWARD_CONTENT_COMPLETED: FETCH_REWARD_CONTENT_COMPLETED,\n DOWNLOAD_LANGUAGE_SUCCEEDED: DOWNLOAD_LANGUAGE_SUCCEEDED,\n DOWNLOAD_LANGUAGE_FAILED: DOWNLOAD_LANGUAGE_FAILED,\n CHANNEL_SUBSCRIBE: CHANNEL_SUBSCRIBE,\n CHANNEL_UNSUBSCRIBE: CHANNEL_UNSUBSCRIBE,\n HAS_FETCHED_SUBSCRIPTIONS: HAS_FETCHED_SUBSCRIPTIONS,\n SET_SUBSCRIPTION_LATEST: SET_SUBSCRIPTION_LATEST,\n SET_SUBSCRIPTION_NOTIFICATION: SET_SUBSCRIPTION_NOTIFICATION,\n SET_SUBSCRIPTION_NOTIFICATIONS: SET_SUBSCRIPTION_NOTIFICATIONS,\n CHECK_SUBSCRIPTION_STARTED: CHECK_SUBSCRIPTION_STARTED,\n CHECK_SUBSCRIPTION_COMPLETED: CHECK_SUBSCRIPTION_COMPLETED,\n CHECK_SUBSCRIPTIONS_SUBSCRIBE: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n CLEAR_PUBLISH: CLEAR_PUBLISH,\n UPDATE_PUBLISH_FORM: UPDATE_PUBLISH_FORM,\n PUBLISH_START: PUBLISH_START,\n PUBLISH_SUCCESS: PUBLISH_SUCCESS,\n PUBLISH_FAIL: PUBLISH_FAIL,\n CLEAR_PUBLISH_ERROR: CLEAR_PUBLISH_ERROR,\n REMOVE_PENDING_PUBLISH: REMOVE_PENDING_PUBLISH,\n DO_PREPARE_EDIT: DO_PREPARE_EDIT,\n CREATE_NOTIFICATION: CREATE_NOTIFICATION,\n EDIT_NOTIFICATION: EDIT_NOTIFICATION,\n DELETE_NOTIFICATION: DELETE_NOTIFICATION,\n DISMISS_NOTIFICATION: DISMISS_NOTIFICATION,\n CREATE_TOAST: CREATE_TOAST,\n DISMISS_TOAST: DISMISS_TOAST,\n CREATE_ERROR: CREATE_ERROR,\n DISMISS_ERROR: DISMISS_ERROR,\n FETCH_DATE: FETCH_DATE,\n FETCH_COST_INFO_STARTED: FETCH_COST_INFO_STARTED,\n FETCH_COST_INFO_COMPLETED: FETCH_COST_INFO_COMPLETED,\n FETCH_COST_INFO_FAILED: FETCH_COST_INFO_FAILED,\n TOGGLE_TAG_FOLLOW: TOGGLE_TAG_FOLLOW,\n TAG_ADD: TAG_ADD,\n TAG_DELETE: TAG_DELETE,\n TOGGLE_BLOCK_CHANNEL: TOGGLE_BLOCK_CHANNEL,\n USER_STATE_POPULATE: USER_STATE_POPULATE\n});\nvar CC_LICENSES = [{\n value: 'Creative Commons Attribution 4.0 International',\n url: 'https://creativecommons.org/licenses/by/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nd/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode'\n}];\nvar NONE = 'None';\nvar PUBLIC_DOMAIN = 'Public Domain';\nvar OTHER = 'other';\nvar COPYRIGHT = 'copyright';\nvar licenses = /*#__PURE__*/Object.freeze({\n CC_LICENSES: CC_LICENSES,\n NONE: NONE,\n PUBLIC_DOMAIN: PUBLIC_DOMAIN,\n OTHER: OTHER,\n COPYRIGHT: COPYRIGHT\n});\nvar AUTH = 'auth';\nvar BACKUP = 'backup';\nvar CHANNEL = 'channel';\nvar DISCOVER = 'discover';\nvar FILE = 'file';\nvar DOWNLOADED = 'downloaded';\nvar PUBLISHED = 'published';\nvar GET_CREDITS = 'getcredits';\nvar HELP = 'help';\nvar INVITE = 'invite';\nvar PUBLISH = 'publish';\nvar REPORT = 'report';\nvar REWARDS = 'rewards';\nvar SEARCH = 'search';\nvar SEND_CREDITS = 'send';\nvar SETTINGS = 'settings';\nvar SHOW = 'show';\nvar SUBSCRIPTIONS = 'subscriptions';\nvar TRANSACTION_HISTORY = 'history';\nvar HISTORY = 'user_history';\nvar WALLET = 'wallet';\nvar pages = /*#__PURE__*/Object.freeze({\n AUTH: AUTH,\n BACKUP: BACKUP,\n CHANNEL: CHANNEL,\n DISCOVER: DISCOVER,\n FILE: FILE,\n DOWNLOADED: DOWNLOADED,\n PUBLISHED: PUBLISHED,\n GET_CREDITS: GET_CREDITS,\n HELP: HELP,\n INVITE: INVITE,\n PUBLISH: PUBLISH,\n REPORT: REPORT,\n REWARDS: REWARDS,\n SEARCH: SEARCH,\n SEND_CREDITS: SEND_CREDITS,\n SETTINGS: SETTINGS,\n SHOW: SHOW,\n SUBSCRIPTIONS: SUBSCRIPTIONS,\n TRANSACTION_HISTORY: TRANSACTION_HISTORY,\n HISTORY: HISTORY,\n WALLET: WALLET\n});\n/* hardcoded names still exist for these in reducers/settings.js - only discovered when debugging */\n\n/* Many SETTINGS are stored in the localStorage by their name -\n be careful about changing the value of a SETTINGS constant, as doing so can invalidate existing SETTINGS */\n\nvar SHOW_NSFW = 'showNsfw';\nvar CREDIT_REQUIRED_ACKNOWLEDGED = 'credit_required_acknowledged';\nvar NEW_USER_ACKNOWLEDGED = 'welcome_acknowledged';\nvar EMAIL_COLLECTION_ACKNOWLEDGED = 'email_collection_acknowledged';\nvar INVITE_ACKNOWLEDGED = 'invite_acknowledged';\nvar LANGUAGE = 'language';\nvar SHOW_MATURE = 'show_mature';\nvar SHOW_REPOSTS = 'show_reposts';\nvar SHOW_ANONYMOUS = 'show_anonymous';\nvar SHOW_UNAVAILABLE = 'show_unavailable';\nvar INSTANT_PURCHASE_ENABLED = 'instant_purchase_enabled';\nvar INSTANT_PURCHASE_MAX = 'instant_purchase_max';\nvar THEME = 'theme';\nvar THEMES = 'themes';\nvar AUTOMATIC_DARK_MODE_ENABLED = 'automatic_dark_mode_enabled';\nvar AUTOPLAY = 'autoplay';\nvar OS_NOTIFICATIONS_ENABLED = 'os_notifications_enabled';\nvar AUTO_DOWNLOAD = 'auto_download';\nvar AUTO_LAUNCH = 'auto_launch';\nvar SUPPORT_OPTION = 'support_option';\nvar HIDE_BALANCE = 'hide_balance';\nvar HIDE_SPLASH_ANIMATION = 'hide_splash_animation';\nvar FLOATING_PLAYER = 'floating_player';\nvar DARK_MODE_TIMES = 'dark_mode_times';\nvar ENABLE_SYNC = 'enable_sync'; // mobile settings\n\nvar BACKGROUND_PLAY_ENABLED = 'backgroundPlayEnabled';\nvar FOREGROUND_NOTIFICATION_ENABLED = 'foregroundNotificationEnabled';\nvar KEEP_DAEMON_RUNNING = 'keepDaemonRunning';\nvar SHOW_URI_BAR_SUGGESTIONS = 'showUriBarSuggestions';\nvar RECEIVE_SUBSCRIPTION_NOTIFICATIONS = 'receiveSubscriptionNotifications';\nvar RECEIVE_REWARD_NOTIFICATIONS = 'receiveRewardNotifications';\nvar RECEIVE_INTERESTS_NOTIFICATIONS = 'receiveInterestsNotifications';\nvar RECEIVE_CREATOR_NOTIFICATIONS = 'receiveCreatorNotifications';\nvar settings = /*#__PURE__*/Object.freeze({\n SHOW_NSFW: SHOW_NSFW,\n CREDIT_REQUIRED_ACKNOWLEDGED: CREDIT_REQUIRED_ACKNOWLEDGED,\n NEW_USER_ACKNOWLEDGED: NEW_USER_ACKNOWLEDGED,\n EMAIL_COLLECTION_ACKNOWLEDGED: EMAIL_COLLECTION_ACKNOWLEDGED,\n INVITE_ACKNOWLEDGED: INVITE_ACKNOWLEDGED,\n LANGUAGE: LANGUAGE,\n SHOW_MATURE: SHOW_MATURE,\n SHOW_REPOSTS: SHOW_REPOSTS,\n SHOW_ANONYMOUS: SHOW_ANONYMOUS,\n SHOW_UNAVAILABLE: SHOW_UNAVAILABLE,\n INSTANT_PURCHASE_ENABLED: INSTANT_PURCHASE_ENABLED,\n INSTANT_PURCHASE_MAX: INSTANT_PURCHASE_MAX,\n THEME: THEME,\n THEMES: THEMES,\n AUTOMATIC_DARK_MODE_ENABLED: AUTOMATIC_DARK_MODE_ENABLED,\n AUTOPLAY: AUTOPLAY,\n OS_NOTIFICATIONS_ENABLED: OS_NOTIFICATIONS_ENABLED,\n AUTO_DOWNLOAD: AUTO_DOWNLOAD,\n AUTO_LAUNCH: AUTO_LAUNCH,\n SUPPORT_OPTION: SUPPORT_OPTION,\n HIDE_BALANCE: HIDE_BALANCE,\n HIDE_SPLASH_ANIMATION: HIDE_SPLASH_ANIMATION,\n FLOATING_PLAYER: FLOATING_PLAYER,\n DARK_MODE_TIMES: DARK_MODE_TIMES,\n ENABLE_SYNC: ENABLE_SYNC,\n BACKGROUND_PLAY_ENABLED: BACKGROUND_PLAY_ENABLED,\n FOREGROUND_NOTIFICATION_ENABLED: FOREGROUND_NOTIFICATION_ENABLED,\n KEEP_DAEMON_RUNNING: KEEP_DAEMON_RUNNING,\n SHOW_URI_BAR_SUGGESTIONS: SHOW_URI_BAR_SUGGESTIONS,\n RECEIVE_SUBSCRIPTION_NOTIFICATIONS: RECEIVE_SUBSCRIPTION_NOTIFICATIONS,\n RECEIVE_REWARD_NOTIFICATIONS: RECEIVE_REWARD_NOTIFICATIONS,\n RECEIVE_INTERESTS_NOTIFICATIONS: RECEIVE_INTERESTS_NOTIFICATIONS,\n RECEIVE_CREATOR_NOTIFICATIONS: RECEIVE_CREATOR_NOTIFICATIONS\n});\nvar DATE_NEW = 'dateNew';\nvar DATE_OLD = 'dateOld';\nvar TITLE = 'title';\nvar FILENAME = 'filename';\nvar sort_options = /*#__PURE__*/Object.freeze({\n DATE_NEW: DATE_NEW,\n DATE_OLD: DATE_OLD,\n TITLE: TITLE,\n FILENAME: FILENAME\n});\nvar API_DOWN = 'apiDown';\nvar READY = 'ready';\nvar IN_PROGRESS = 'inProgress';\nvar COMPLETE = 'complete';\nvar MANUAL = 'manual';\nvar thumbnail_upload_statuses = /*#__PURE__*/Object.freeze({\n API_DOWN: API_DOWN,\n READY: READY,\n IN_PROGRESS: IN_PROGRESS,\n COMPLETE: COMPLETE,\n MANUAL: MANUAL\n}); // eslint-disable-next-line import/prefer-default-export\n\nvar ALL = 'all';\nvar SPEND = 'spend';\nvar RECEIVE = 'receive';\nvar PUBLISH$1 = 'publish';\nvar CHANNEL$1 = 'channel';\nvar TIP = 'tip';\nvar SUPPORT = 'support';\nvar UPDATE = 'update';\nvar ABANDON = 'abandon';\nvar transaction_types = /*#__PURE__*/Object.freeze({\n ALL: ALL,\n SPEND: SPEND,\n RECEIVE: RECEIVE,\n PUBLISH: PUBLISH$1,\n CHANNEL: CHANNEL$1,\n TIP: TIP,\n SUPPORT: SUPPORT,\n UPDATE: UPDATE,\n ABANDON: ABANDON\n}); // PAGE SIZE\n\nvar PAGE_SIZE$1 = 50;\nvar LATEST_PAGE_SIZE = 20;\nvar transaction_list = /*#__PURE__*/Object.freeze({\n PAGE_SIZE: PAGE_SIZE$1,\n LATEST_PAGE_SIZE: LATEST_PAGE_SIZE\n});\nvar SPEECH_STATUS = 'https://spee.ch/api/config/site/publishing';\nvar SPEECH_PUBLISH = 'https://spee.ch/api/claim/publish';\nvar speech_urls = /*#__PURE__*/Object.freeze({\n SPEECH_STATUS: SPEECH_STATUS,\n SPEECH_PUBLISH: SPEECH_PUBLISH\n});\nvar ANNOUNCE_HEAD_AND_SD_ONLY = 'announce_head_and_sd_only';\nvar API = 'api';\nvar BLOB_DOWNLOAD_TIMEOUT = 'blob_download_timeout';\nvar BLOB_LRU_CACHE_SIZE = 'blob_lru_cache_size';\nvar BLOCKCHAIN_NAME = 'blockchain_name';\nvar CACHE_TIME = 'cache_time';\nvar COIN_SELECTION_STRATEGY = 'coin_selection_strategy';\nvar COMMENT_SERVER = 'comment_server';\nvar COMPONENTS_TO_SKIP = 'components_to_skip';\nvar CONCURRENT_BLOB_ANNOUNCERS = 'concurrent_blob_announcers';\nvar CONCURRENT_REFLECTOR_UPLOADS = 'concurrent_reflector_uploads';\nvar CONFIG = 'config';\nvar DATA_DIR = 'data_dir';\nvar DOWNLOAD_DIR = 'download_dir';\nvar DOWNLOAD_TIMEOUT = 'download_timeout';\nvar FIXED_PEER_DELAY = 'fixed_peer_delay';\nvar KNOWN_DHT_NODES = 'known_dht_nodes';\nvar LBRYUM_SERVERS = 'lbryum_servers';\nvar MAX_CONNECTIONS_PER_DOWNLOAD = 'max_connections_per_download';\nvar MAX_KEY_FEE = 'max_key_fee';\nvar DEFAULT_WALLET = 'default_wallet';\nvar NETWORK_INTERFACE = 'network_interface';\nvar NODE_RPC_TIMEOUT = 'node_rpc_timeout';\nvar PEER_CONNECT_TIMEOUT = 'peer_connect_timeout';\nvar REFLECT_STREAMS = 'reflect_streams';\nvar REFLECTOR_SERVERS = 'reflector_servers';\nvar S3_HEADERS_DEPTH = 's3_headers_depth';\nvar SAVE_BLOBS = 'save_blobs';\nvar SAVE_FILES = 'save_files';\nvar SHARE_USAGE_DATA = 'share_usage_data';\nvar SPLIT_BUCKETS_UNDER_INDEX = 'split_buckets_under_index';\nvar STREAMING_GET = 'streaming_get';\nvar STREAMING_SERVER = 'streaming_server';\nvar TCP_PORT = 'tcp_port';\nvar TRACK_BANDWIDTH = 'track_bandwidth';\nvar UDP_PORT = 'udp_port';\nvar USE_UPNP = 'use_upnp';\nvar WALLET_DIR = 'wallet_dir';\nvar WALLETS = 'wallets';\nvar daemon_settings = /*#__PURE__*/Object.freeze({\n ANNOUNCE_HEAD_AND_SD_ONLY: ANNOUNCE_HEAD_AND_SD_ONLY,\n API: API,\n BLOB_DOWNLOAD_TIMEOUT: BLOB_DOWNLOAD_TIMEOUT,\n BLOB_LRU_CACHE_SIZE: BLOB_LRU_CACHE_SIZE,\n BLOCKCHAIN_NAME: BLOCKCHAIN_NAME,\n CACHE_TIME: CACHE_TIME,\n COIN_SELECTION_STRATEGY: COIN_SELECTION_STRATEGY,\n COMMENT_SERVER: COMMENT_SERVER,\n COMPONENTS_TO_SKIP: COMPONENTS_TO_SKIP,\n CONCURRENT_BLOB_ANNOUNCERS: CONCURRENT_BLOB_ANNOUNCERS,\n CONCURRENT_REFLECTOR_UPLOADS: CONCURRENT_REFLECTOR_UPLOADS,\n CONFIG: CONFIG,\n DATA_DIR: DATA_DIR,\n DOWNLOAD_DIR: DOWNLOAD_DIR,\n DOWNLOAD_TIMEOUT: DOWNLOAD_TIMEOUT,\n FIXED_PEER_DELAY: FIXED_PEER_DELAY,\n KNOWN_DHT_NODES: KNOWN_DHT_NODES,\n LBRYUM_SERVERS: LBRYUM_SERVERS,\n MAX_CONNECTIONS_PER_DOWNLOAD: MAX_CONNECTIONS_PER_DOWNLOAD,\n MAX_KEY_FEE: MAX_KEY_FEE,\n DEFAULT_WALLET: DEFAULT_WALLET,\n NETWORK_INTERFACE: NETWORK_INTERFACE,\n NODE_RPC_TIMEOUT: NODE_RPC_TIMEOUT,\n PEER_CONNECT_TIMEOUT: PEER_CONNECT_TIMEOUT,\n REFLECT_STREAMS: REFLECT_STREAMS,\n REFLECTOR_SERVERS: REFLECTOR_SERVERS,\n S3_HEADERS_DEPTH: S3_HEADERS_DEPTH,\n SAVE_BLOBS: SAVE_BLOBS,\n SAVE_FILES: SAVE_FILES,\n SHARE_USAGE_DATA: SHARE_USAGE_DATA,\n SPLIT_BUCKETS_UNDER_INDEX: SPLIT_BUCKETS_UNDER_INDEX,\n STREAMING_GET: STREAMING_GET,\n STREAMING_SERVER: STREAMING_SERVER,\n TCP_PORT: TCP_PORT,\n TRACK_BANDWIDTH: TRACK_BANDWIDTH,\n UDP_PORT: UDP_PORT,\n USE_UPNP: USE_UPNP,\n WALLET_DIR: WALLET_DIR,\n WALLETS: WALLETS\n});\n/*\n * How to use this file:\n * Settings exported from here will trigger the setting to be\n * sent to the preference middleware when set using the\n * usual setDaemonSettings and clearDaemonSettings methods.\n *\n * See redux/settings/actions in the app for where this is used.\n */\n\nvar WALLET_SERVERS = LBRYUM_SERVERS;\nvar SHARE_USAGE_DATA$1 = SHARE_USAGE_DATA;\nvar shared_preferences = /*#__PURE__*/Object.freeze({\n WALLET_SERVERS: WALLET_SERVERS,\n SHARE_USAGE_DATA: SHARE_USAGE_DATA$1\n});\nvar SEARCH_TYPES = {\n FILE: 'file',\n CHANNEL: 'channel',\n SEARCH: 'search',\n TAG: 'tag'\n};\nvar SEARCH_OPTIONS = {\n RESULT_COUNT: 'size',\n CLAIM_TYPE: 'claimType',\n INCLUDE_FILES: 'file',\n INCLUDE_CHANNELS: 'channel',\n INCLUDE_FILES_AND_CHANNELS: 'file,channel',\n MEDIA_AUDIO: 'audio',\n MEDIA_VIDEO: 'video',\n MEDIA_TEXT: 'text',\n MEDIA_IMAGE: 'image',\n MEDIA_APPLICATION: 'application'\n};\nvar DEFAULT_FOLLOWED_TAGS = ['art', 'automotive', 'blockchain', 'comedy', 'economics', 'education', 'gaming', 'music', 'news', 'science', 'sports', 'technology'];\nvar MATURE_TAGS = ['porn', 'nsfw', 'mature', 'xxx'];\nvar DEFAULT_KNOWN_TAGS = ['free speech', 'censorship', 'gaming', 'pop culture', 'entertainment', 'technology', 'music', 'funny', 'education', 'learning', 'news', 'gameplay', 'nature', 'beliefs', 'comedy', 'games', 'film & animation', 'game', 'weapons', 'blockchain', 'video game', 'sports', 'walkthrough', 'art', 'pc', 'minecraft', 'playthrough', 'economics', 'automotive', 'play', 'tutorial', 'twitch', 'how to', 'ps4', 'bitcoin', 'fortnite', 'commentary', 'lets play', 'fun', 'politics', 'travel', 'food', 'science', 'xbox', 'liberal', 'democrat', 'progressive', 'survival', 'non-profits', 'activism', 'cryptocurrency', 'playstation', 'nintendo', 'government', 'steam', 'podcast', 'gamer', 'horror', 'conservative', 'reaction', 'trailer', 'love', 'cnn', 'republican', 'political', 'hangoutsonair', 'hoa', 'msnbc', 'cbs', 'anime', 'donald trump', 'fiction', 'fox news', 'crypto', 'ethereum', 'call of duty', 'android', 'multiplayer', 'epic', 'rpg', 'adventure', 'secular talk', 'btc', 'atheist', 'atheism', 'video games', 'ps3', 'cod', 'online', 'agnostic', 'movie', 'fps', 'lets', 'mod', 'world', 'reviews', 'sharefactory', 'space', 'pokemon', 'stream', 'hilarious', 'lol', 'sony', 'god', 'dance', 'pvp', 'tech', 'strategy', 'zombies', 'fail', 'film', 'xbox360', 'animation', 'unboxing', 'money', 'wwe', 'mods', 'indie', 'pubg', 'ios', 'history', 'rap', 'mobile', 'trump', 'hack', 'flat earth', 'trap', 'humor', 'vlogging', 'fox', 'news radio', 'facebook', 'edm', 'fitness', 'vaping', 'hip hop', 'secular', 'jesus', 'song', 'vape', 'guitar', 'remix', 'mining', 'daily', 'diy', 'pets', 'videogame', 'death', 'funny moments', 'religion', 'media', 'viral', 'war', 'nbc', 'freedom', 'gold', 'family', 'meme', 'zombie', 'photography', 'chill', 'sniper', 'computer', 'iphone', 'dragon', 'bible', 'pro', 'overwatch', 'litecoin', 'gta', 'house', 'fire', 'bass', 'truth', 'crash', 'mario', 'league of legends', 'wii', 'mmorpg', 'health', 'marvel', 'racing', 'apple', 'instrumental', 'earth', 'destiny', 'satire', 'race', 'training', 'electronic', 'boss', 'roblox', 'family friendly', 'california', 'react', 'christian', 'mmo', 'twitter', 'help', 'star', 'cars', 'random', 'top 10', 'ninja', 'guns', 'linux', 'lessons', 'vegan', 'future', 'dota 2', 'studio', 'star wars', 'shooting', 'nasa', 'rock', 'league', 'subscribe', 'water', 'gta v', 'car', 'samsung', 'music video', 'skyrim', 'dog', 'comics', 'shooter game', 'bo3', 'halloween', 'liberty', 'eth', 'conspiracy', 'knife', 'fashion', 'stories', 'vapor', 'nvidia', 'cute', 'beat', 'nintendo switch', 'fantasy', 'christmas', 'world of warcraft', 'industry', 'cartoon', 'garden', 'animals', 'windows', 'happy', 'magic', 'memes', 'design', 'tactical', 'fallout 4', 'puzzle', 'parody', 'rv', 'beats', 'building', 'disney', 'drone', 'ps2', 'beach', 'metal', 'christianity', 'business', 'mix', 'bo2', 'cover', 'senate', '4k', 'united states', 'final', 'hero', 'playing', 'dlc', 'ubisoft', 'halo', 'pc gaming', 'raw', 'investing', 'online learning', 'software', 'ark', 'mojang', 'console', 'battle royale', 'canon', 'microsoft', 'camping', 'ufo', 'progressive talk', 'switch', 'fpv', 'arcade', 'school', 'driving', 'bodybuilding', 'drama', 'retro', 'science fiction', 'eggs', 'australia', 'modded', 'rainbow', 'gamers', 'resident evil', 'drawing', 'brasil', 'england', 'hillary clinton', 'singing', 'final fantasy', 'hiphop', 'video blog', 'mature', 'quad', 'noob', 'simulation', 'illuminati', 'poetry', 'dayz', 'manga', 'howto', 'insane', 'press', 'special', 'church', 'ico', 'weird', 'libertarian', 'crafting', 'level', 'comic', 'sandbox', 'daily vlog', 'outdoor', 'black ops', 'sound', 'christ', 'duty', 'juvenile fiction', 'pc game', 'how-to', 'ww2', 'creepy', 'artist', 'galaxy', 'destiny 2', 'new music', 'quest', 'lee', 'pacman', 'super smash bros', 'day', 'survival horror', 'patreon', 'bitcoin price', 'trending', 'open world', 'wii u', 'dope', 'reaper', 'sniping', 'dubstep', 'truck', 'planet', 'dc', 'amazon', 'spirituality', 'universe', 'video game culture', 'community', 'cat', 'aliens', 'tourism', 'altcoins', 'style', 'travel trailer', 'rda', 'gun', 'secret', 'far cry 5', 'auto', 'culture', 'dj', 'mw2', 'lord', 'full time rving', 'role-playing game', 'prank', 'grand theft auto', 'master', 'wrestling', 'sci-fi', 'workout', 'ghost', 'fake news', 'silly', 'season', 'bo4', 'trading', 'extreme', 'economy', 'combat', 'plays', 'muslim', 'pubg mobile', 'clips', 'bo1', 'paypal', 'sims', 'exploration', 'light', 'ripple', 'paranormal', 'football', 'capcom', 'rta', 'discord', 'batman', 'player', 'server', 'anarchy', 'military', 'playlist', 'cosplay', 'rv park', 'rant', 'edit', 'germany', 'reading', 'chris', 'flash', 'loot', 'bitcoin gratis', 'game reviews', 'movies', 'stupid', 'latest news', 'squad gameplay', 'guru', 'timelapse', 'black ops 3', 'holiday', 'soul', 'motivation', 'mw3', 'vacation', 'sega', '19th century', 'pop', 'sims 4', 'post', 'smok', 'island', 'scotland', 'paladins', 'warrior', 'creepypasta', 'role-playing', 'solar', 'vr', 'animal', 'peace', 'consciousness', 'dota', 'audio', 'mass effect', 'humour', 'first look', 'videogames', 'future bass', 'freestyle', 'hardcore', 'portugal', 'dantdm', 'teaser', 'lbry']; // \n\nvar CHECK_DAEMON_STARTED_TRY_NUMBER = 200; //\n// Basic LBRY sdk connection config\n// Offers a proxy to call LBRY sdk methods\n//\n\nvar Lbry = {\n isConnected: false,\n connectPromise: null,\n daemonConnectionString: 'http://localhost:5279',\n alternateConnectionString: '',\n methodsUsingAlternateConnectionString: [],\n apiRequestHeaders: {\n 'Content-Type': 'application/json-rpc'\n },\n // Allow overriding daemon connection string (e.g. to `/api/proxy` for lbryweb)\n setDaemonConnectionString: function setDaemonConnectionString(value) {\n Lbry.daemonConnectionString = value;\n },\n setApiHeader: function setApiHeader(key, value) {\n Lbry.apiRequestHeaders = Object.assign(Lbry.apiRequestHeaders, _defineProperty({}, key, value));\n },\n unsetApiHeader: function unsetApiHeader(key) {\n Object.keys(Lbry.apiRequestHeaders).includes(key) && delete Lbry.apiRequestHeaders['key'];\n },\n // Allow overriding Lbry methods\n overrides: {},\n setOverride: function setOverride(methodName, newMethod) {\n Lbry.overrides[methodName] = newMethod;\n },\n getApiRequestHeaders: function getApiRequestHeaders() {\n return Lbry.apiRequestHeaders;\n },\n // Returns a human readable media type based on the content type or extension of a file that is returned by the sdk\n getMediaType: function getMediaType(contentType, fileName) {\n if (fileName) {\n var formats = [[/\\.(mp4|m4v|webm|flv|f4v|ogv)$/i, 'video'], [/\\.(mp3|m4a|aac|wav|flac|ogg|opus)$/i, 'audio'], [/\\.(jpeg|jpg|png|gif|svg)$/i, 'image'], [/\\.(h|go|ja|java|js|jsx|c|cpp|cs|css|rb|scss|sh|php|py)$/i, 'script'], [/\\.(html|json|csv|txt|log|md|markdown|docx|pdf|xml|yml|yaml)$/i, 'document'], [/\\.(pdf|odf|doc|docx|epub|org|rtf)$/i, 'e-book'], [/\\.(stl|obj|fbx|gcode)$/i, '3D-file'], [/\\.(cbr|cbt|cbz)$/i, 'comic-book'], [/\\.(lbry)$/i, 'application']];\n var res = formats.reduce(function (ret, testpair) {\n switch (testpair[0].test(ret)) {\n case true:\n return testpair[1];\n\n default:\n return ret;\n }\n }, fileName);\n return res === fileName ? 'unknown' : res;\n } else if (contentType) {\n // $FlowFixMe\n return /^[^/]+/.exec(contentType)[0];\n }\n\n return 'unknown';\n },\n //\n // Lbry SDK Methods\n // https://lbry.tech/api/sdk\n //\n status: function status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('status', params);\n },\n stop: function stop() {\n return daemonCallWithResult('stop', {});\n },\n version: function version() {\n return daemonCallWithResult('version', {});\n },\n // Claim fetching and manipulation\n resolve: function resolve(params) {\n return daemonCallWithResult('resolve', params);\n },\n get: function get(params) {\n return daemonCallWithResult('get', params);\n },\n claim_search: function claim_search(params) {\n return daemonCallWithResult('claim_search', params);\n },\n claim_list: function claim_list(params) {\n return daemonCallWithResult('claim_list', params);\n },\n channel_create: function channel_create(params) {\n return daemonCallWithResult('channel_create', params);\n },\n channel_update: function channel_update(params) {\n return daemonCallWithResult('channel_update', params);\n },\n channel_import: function channel_import(params) {\n return daemonCallWithResult('channel_import', params);\n },\n channel_list: function channel_list(params) {\n return daemonCallWithResult('channel_list', params);\n },\n stream_abandon: function stream_abandon(params) {\n return daemonCallWithResult('stream_abandon', params);\n },\n stream_list: function stream_list(params) {\n return daemonCallWithResult('stream_list', params);\n },\n channel_abandon: function channel_abandon(params) {\n return daemonCallWithResult('channel_abandon', params);\n },\n support_create: function support_create(params) {\n return daemonCallWithResult('support_create', params);\n },\n support_list: function support_list(params) {\n return daemonCallWithResult('support_list', params);\n },\n stream_repost: function stream_repost(params) {\n return daemonCallWithResult('stream_repost', params);\n },\n // File fetching and manipulation\n file_list: function file_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_list', params);\n },\n file_delete: function file_delete() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_delete', params);\n },\n file_set_status: function file_set_status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_set_status', params);\n },\n blob_delete: function blob_delete() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('blob_delete', params);\n },\n blob_list: function blob_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('blob_list', params);\n },\n // Wallet utilities\n wallet_balance: function wallet_balance() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_balance', params);\n },\n wallet_decrypt: function wallet_decrypt() {\n return daemonCallWithResult('wallet_decrypt', {});\n },\n wallet_encrypt: function wallet_encrypt() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_encrypt', params);\n },\n wallet_unlock: function wallet_unlock() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_unlock', params);\n },\n wallet_list: function wallet_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_list', params);\n },\n wallet_send: function wallet_send() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_send', params);\n },\n wallet_status: function wallet_status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_status', params);\n },\n address_is_mine: function address_is_mine() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_is_mine', params);\n },\n address_unused: function address_unused() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_unused', params);\n },\n address_list: function address_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_list', params);\n },\n transaction_list: function transaction_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('transaction_list', params);\n },\n utxo_release: function utxo_release() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('utxo_release', params);\n },\n support_abandon: function support_abandon() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('support_abandon', params);\n },\n sync_hash: function sync_hash() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('sync_hash', params);\n },\n sync_apply: function sync_apply() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('sync_apply', params);\n },\n // Preferences\n preference_get: function preference_get() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('preference_get', params);\n },\n preference_set: function preference_set() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('preference_set', params);\n },\n // Comments\n comment_list: function comment_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_list', params);\n },\n comment_create: function comment_create() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_create', params);\n },\n comment_hide: function comment_hide() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_hide', params);\n },\n comment_abandon: function comment_abandon() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_abandon', params);\n },\n comment_update: function comment_update() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_update', params);\n },\n // Connect to the sdk\n connect: function connect() {\n if (Lbry.connectPromise === null) {\n Lbry.connectPromise = new Promise(function (resolve, reject) {\n var tryNum = 0; // Check every half second to see if the daemon is accepting connections\n\n function checkDaemonStarted() {\n tryNum += 1;\n Lbry.status().then(resolve)[\"catch\"](function () {\n if (tryNum <= CHECK_DAEMON_STARTED_TRY_NUMBER) {\n setTimeout(checkDaemonStarted, tryNum < 50 ? 400 : 1000);\n } else {\n reject(new Error('Unable to connect to LBRY'));\n }\n });\n }\n\n checkDaemonStarted();\n });\n } // Flow thinks this could be empty, but it will always reuturn a promise\n // $FlowFixMe\n\n\n return Lbry.connectPromise;\n },\n publish: function publish() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return new Promise(function (resolve, reject) {\n if (Lbry.overrides.publish) {\n Lbry.overrides.publish(params).then(resolve, reject);\n } else {\n apiCall('publish', params, resolve, reject);\n }\n });\n }\n};\n\nfunction checkAndParse(response) {\n if (response.status >= 200 && response.status < 300) {\n return response.json();\n }\n\n return response.json().then(function (json) {\n var error;\n\n if (json.error) {\n var errorMessage = _typeof(json.error) === 'object' ? json.error.message : json.error;\n error = new Error(errorMessage);\n } else {\n error = new Error('Protocol error with unknown response signature');\n }\n\n return Promise.reject(error);\n });\n}\n\nfunction apiCall(method, params, resolve, reject) {\n var counter = new Date().getTime();\n var options = {\n method: 'POST',\n headers: Lbry.apiRequestHeaders,\n body: JSON.stringify({\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: counter\n })\n };\n var connectionString = Lbry.methodsUsingAlternateConnectionString.includes(method) ? Lbry.alternateConnectionString : Lbry.daemonConnectionString;\n return fetch(connectionString + '?m=' + method, options).then(checkAndParse).then(function (response) {\n var error = response.error || response.result && response.result.error;\n\n if (error) {\n return reject(error);\n }\n\n return resolve(response.result);\n })[\"catch\"](reject);\n}\n\nfunction daemonCallWithResult(name) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new Promise(function (resolve, reject) {\n apiCall(name, params, function (result) {\n resolve(result);\n }, reject);\n });\n} // This is only for a fallback\n// If there is a Lbry method that is being called by an app, it should be added to /flow-typed/Lbry.js\n\n\nvar lbryProxy = new Proxy(Lbry, {\n get: function get(target, name) {\n if (name in target) {\n return target[name];\n }\n\n return function () {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return new Promise(function (resolve, reject) {\n apiCall(name, params, resolve, reject);\n });\n };\n }\n}); // \n\nvar DEFAULT_SEARCH_RESULT_FROM = 0;\nvar DEFAULT_SEARCH_SIZE = 20;\n\nfunction parseQueryParams(queryString) {\n if (queryString === '') return {};\n var parts = queryString.split('?').pop().split('&').map(function (p) {\n return p.split('=');\n });\n var params = {};\n parts.forEach(function (array) {\n var _array = _slicedToArray(array, 2),\n first = _array[0],\n second = _array[1];\n\n params[first] = second;\n });\n return params;\n}\n\nfunction toQueryString(params) {\n if (!params) return '';\n var parts = [];\n Object.keys(params).forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(params, key) && params[key]) {\n parts.push(\"\".concat(key, \"=\").concat(params[key]));\n }\n });\n return parts.join('&');\n}\n\nvar getSearchQueryString = function getSearchQueryString(query) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var encodedQuery = encodeURIComponent(query);\n var queryParams = [\"s=\".concat(encodedQuery), \"size=\".concat(options.size || DEFAULT_SEARCH_SIZE), \"from=\".concat(options.from || DEFAULT_SEARCH_RESULT_FROM)];\n var isBackgroundSearch = options.isBackgroundSearch;\n var includeUserOptions = typeof isBackgroundSearch === 'undefined' ? false : !isBackgroundSearch;\n\n if (includeUserOptions) {\n var claimType = options[SEARCH_OPTIONS.CLAIM_TYPE];\n\n if (claimType) {\n queryParams.push(\"claimType=\".concat(claimType)); // If they are only searching for channels, strip out the media info\n\n if (!claimType.includes(SEARCH_OPTIONS.INCLUDE_CHANNELS)) {\n queryParams.push(\"mediaType=\".concat([SEARCH_OPTIONS.MEDIA_FILE, SEARCH_OPTIONS.MEDIA_AUDIO, SEARCH_OPTIONS.MEDIA_VIDEO, SEARCH_OPTIONS.MEDIA_TEXT, SEARCH_OPTIONS.MEDIA_IMAGE, SEARCH_OPTIONS.MEDIA_APPLICATION].reduce(function (acc, currentOption) {\n return options[currentOption] ? \"\".concat(acc).concat(currentOption, \",\") : acc;\n }, '')));\n }\n }\n }\n\n var additionalOptions = {};\n var related_to = options.related_to;\n var nsfw = options.nsfw;\n if (related_to) additionalOptions['related_to'] = related_to;\n if (typeof nsfw !== 'undefined') additionalOptions['nsfw'] = nsfw;\n\n if (additionalOptions) {\n Object.keys(additionalOptions).forEach(function (key) {\n var option = additionalOptions[key];\n queryParams.push(\"\".concat(key, \"=\").concat(option));\n });\n }\n\n return queryParams.join('&');\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar channelNameMinLength = 1;\nvar claimIdMaxLength = 40; // see https://spec.lbry.com/#urls\n\nvar regexInvalidURI = /(?:[\\0-\\x08\\x0B\\f\\x0E- \"-&\\/:-@\\[-\\^`\\{-~\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\nvar regexAddress = /^(b|r)(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/;\nvar regexPartProtocol = '^((?:lbry://)?)';\nvar regexPartStreamOrChannelName = '([^:$#/]*)';\nvar regexPartModifierSeparator = '([:$#]?)([^/]*)';\nvar queryStringBreaker = '^([\\\\S]+)([?][\\\\S]*)';\nvar separateQuerystring = new RegExp(queryStringBreaker);\n/**\n * Parses a LBRY name into its component parts. Throws errors with user-friendly\n * messages for invalid names.\n *\n * Returns a dictionary with keys:\n * - path (string)\n * - isChannel (boolean)\n * - streamName (string, if present)\n * - streamClaimId (string, if present)\n * - channelName (string, if present)\n * - channelClaimId (string, if present)\n * - primaryClaimSequence (int, if present)\n * - secondaryClaimSequence (int, if present)\n * - primaryBidPosition (int, if present)\n * - secondaryBidPosition (int, if present)\n */\n\nfunction parseURI(URL) {\n var requireProto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; // Break into components. Empty sub-matches are converted to null\n\n var componentsRegex = new RegExp(regexPartProtocol + // protocol\n regexPartStreamOrChannelName + // stream or channel name (stops at the first separator or end)\n regexPartModifierSeparator + // modifier separator, modifier (stops at the first path separator or end)\n '(/?)' + // path separator, there should only be one (optional) slash to separate the stream and channel parts\n regexPartStreamOrChannelName + regexPartModifierSeparator); // chop off the querystring first\n\n var QSStrippedURL, qs;\n var qsRegexResult = separateQuerystring.exec(URL);\n\n if (qsRegexResult) {\n var _qsRegexResult$slice$ = qsRegexResult.slice(1).map(function (match) {\n return match || null;\n });\n\n var _qsRegexResult$slice$2 = _slicedToArray(_qsRegexResult$slice$, 2);\n\n QSStrippedURL = _qsRegexResult$slice$2[0];\n qs = _qsRegexResult$slice$2[1];\n }\n\n var cleanURL = QSStrippedURL || URL;\n var regexMatch = componentsRegex.exec(cleanURL) || [];\n\n var _regexMatch$slice$map = regexMatch.slice(1).map(function (match) {\n return match || null;\n }),\n _regexMatch$slice$map2 = _toArray(_regexMatch$slice$map),\n proto = _regexMatch$slice$map2[0],\n rest = _regexMatch$slice$map2.slice(1);\n\n var path = rest.join('');\n\n var _rest = _slicedToArray(rest, 7),\n streamNameOrChannelName = _rest[0],\n primaryModSeparator = _rest[1],\n primaryModValue = _rest[2],\n pathSep = _rest[3],\n possibleStreamName = _rest[4],\n secondaryModSeparator = _rest[5],\n secondaryModValue = _rest[6]; // Validate protocol\n\n\n if (requireProto && !proto) {\n throw new Error(__('LBRY URLs must include a protocol prefix (lbry://).'));\n } // Validate and process name\n\n\n if (!streamNameOrChannelName) {\n throw new Error(__('URL does not include name.'));\n }\n\n rest.forEach(function (urlPiece) {\n if (urlPiece && urlPiece.includes(' ')) {\n console.error('URL can not include a space');\n }\n });\n var includesChannel = streamNameOrChannelName.startsWith('@');\n var isChannel = streamNameOrChannelName.startsWith('@') && !possibleStreamName;\n var channelName = includesChannel && streamNameOrChannelName.slice(1);\n\n if (includesChannel) {\n if (!channelName) {\n throw new Error(__('No channel name after @.'));\n }\n\n if (channelName.length < channelNameMinLength) {\n throw new Error(__(\"Channel names must be at least %channelNameMinLength% characters.\", {\n channelNameMinLength: channelNameMinLength\n }));\n }\n } // Validate and process modifier\n\n\n var _parseURIModifier = parseURIModifier(primaryModSeparator, primaryModValue),\n _parseURIModifier2 = _slicedToArray(_parseURIModifier, 3),\n primaryClaimId = _parseURIModifier2[0],\n primaryClaimSequence = _parseURIModifier2[1],\n primaryBidPosition = _parseURIModifier2[2];\n\n var _parseURIModifier3 = parseURIModifier(secondaryModSeparator, secondaryModValue),\n _parseURIModifier4 = _slicedToArray(_parseURIModifier3, 3),\n secondaryClaimId = _parseURIModifier4[0],\n secondaryClaimSequence = _parseURIModifier4[1],\n secondaryBidPosition = _parseURIModifier4[2];\n\n var streamName = includesChannel ? possibleStreamName : streamNameOrChannelName;\n var streamClaimId = includesChannel ? secondaryClaimId : primaryClaimId;\n var channelClaimId = includesChannel && primaryClaimId;\n return _extends({\n isChannel: isChannel,\n path: path\n }, streamName ? {\n streamName: streamName\n } : {}, streamClaimId ? {\n streamClaimId: streamClaimId\n } : {}, channelName ? {\n channelName: channelName\n } : {}, channelClaimId ? {\n channelClaimId: channelClaimId\n } : {}, primaryClaimSequence ? {\n primaryClaimSequence: parseInt(primaryClaimSequence, 10)\n } : {}, secondaryClaimSequence ? {\n secondaryClaimSequence: parseInt(secondaryClaimSequence, 10)\n } : {}, primaryBidPosition ? {\n primaryBidPosition: parseInt(primaryBidPosition, 10)\n } : {}, secondaryBidPosition ? {\n secondaryBidPosition: parseInt(secondaryBidPosition, 10)\n } : {}, {\n // The values below should not be used for new uses of parseURI\n // They will not work properly with canonical_urls\n claimName: streamNameOrChannelName,\n claimId: primaryClaimId\n }, streamName ? {\n contentName: streamName\n } : {}, qs ? {\n queryString: qs\n } : {});\n}\n\nfunction parseURIModifier(modSeperator, modValue) {\n var claimId;\n var claimSequence;\n var bidPosition;\n\n if (modSeperator) {\n if (!modValue) {\n throw new Error(__(\"No modifier provided after separator %modSeperator%.\", {\n modSeperator: modSeperator\n }));\n }\n\n if (modSeperator === '#') {\n claimId = modValue;\n } else if (modSeperator === ':') {\n claimSequence = modValue;\n } else if (modSeperator === '$') {\n bidPosition = modValue;\n }\n }\n\n if (claimId && (claimId.length > claimIdMaxLength || !claimId.match(/^[0-9a-f]+$/))) {\n throw new Error(__(\"Invalid claim ID %claimId%.\", {\n claimId: claimId\n }));\n }\n\n if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {\n throw new Error(__('Claim sequence must be a number.'));\n }\n\n if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {\n throw new Error(__('Bid position must be a number.'));\n }\n\n return [claimId, claimSequence, bidPosition];\n}\n/**\n * Takes an object in the same format returned by parse() and builds a URI.\n *\n * The channelName key will accept names with or without the @ prefix.\n */\n\n\nfunction buildURI(UrlObj) {\n var includeProto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var protoDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'lbry://';\n\n var streamName = UrlObj.streamName,\n streamClaimId = UrlObj.streamClaimId,\n channelName = UrlObj.channelName,\n channelClaimId = UrlObj.channelClaimId,\n primaryClaimSequence = UrlObj.primaryClaimSequence,\n primaryBidPosition = UrlObj.primaryBidPosition,\n secondaryClaimSequence = UrlObj.secondaryClaimSequence,\n secondaryBidPosition = UrlObj.secondaryBidPosition,\n deprecatedParts = _objectWithoutProperties(UrlObj, ['streamName', 'streamClaimId', 'channelName', 'channelClaimId', 'primaryClaimSequence', 'primaryBidPosition', 'secondaryClaimSequence', 'secondaryBidPosition']);\n\n var claimId = deprecatedParts.claimId,\n claimName = deprecatedParts.claimName,\n contentName = deprecatedParts.contentName;\n\n if (!claimName && !channelName && !streamName) {\n console.error(__(\"'claimName', 'channelName', and 'streamName' are all empty. One must be present to build a url.\"));\n }\n\n var formattedChannelName = channelName && (channelName.startsWith('@') ? channelName : \"@\".concat(channelName));\n var primaryClaimName = claimName || contentName || formattedChannelName || streamName;\n var primaryClaimId = claimId || (formattedChannelName ? channelClaimId : streamClaimId);\n var secondaryClaimName = !claimName && contentName || (formattedChannelName ? streamName : null);\n var secondaryClaimId = secondaryClaimName && streamClaimId;\n return (includeProto ? protoDefault : '') + // primaryClaimName will always exist here because we throw above if there is no \"name\" value passed in\n // $FlowFixMe\n primaryClaimName + (primaryClaimId ? \"#\".concat(primaryClaimId) : '') + (primaryClaimSequence ? \":\".concat(primaryClaimSequence) : '') + (primaryBidPosition ? \"\".concat(primaryBidPosition) : '') + (secondaryClaimName ? \"/\".concat(secondaryClaimName) : '') + (secondaryClaimId ? \"#\".concat(secondaryClaimId) : '') + (secondaryClaimSequence ? \":\".concat(secondaryClaimSequence) : '') + (secondaryBidPosition ? \"\".concat(secondaryBidPosition) : '');\n}\n/* Takes a parseable LBRY URL and converts it to standard, canonical format */\n\n\nfunction normalizeURI(URL) {\n var _parseURI = parseURI(URL),\n streamName = _parseURI.streamName,\n streamClaimId = _parseURI.streamClaimId,\n channelName = _parseURI.channelName,\n channelClaimId = _parseURI.channelClaimId,\n primaryClaimSequence = _parseURI.primaryClaimSequence,\n primaryBidPosition = _parseURI.primaryBidPosition,\n secondaryClaimSequence = _parseURI.secondaryClaimSequence,\n secondaryBidPosition = _parseURI.secondaryBidPosition;\n\n return buildURI({\n streamName: streamName,\n streamClaimId: streamClaimId,\n channelName: channelName,\n channelClaimId: channelClaimId,\n primaryClaimSequence: primaryClaimSequence,\n primaryBidPosition: primaryBidPosition,\n secondaryClaimSequence: secondaryClaimSequence,\n secondaryBidPosition: secondaryBidPosition\n });\n}\n\nfunction isURIValid(URL) {\n try {\n parseURI(normalizeURI(URL));\n } catch (error) {\n return false;\n }\n\n return true;\n}\n\nfunction isNameValid(claimName) {\n return !regexInvalidURI.test(claimName);\n}\n\nfunction isURIClaimable(URL) {\n var parts;\n\n try {\n parts = parseURI(normalizeURI(URL));\n } catch (error) {\n return false;\n }\n\n return parts && parts.streamName && !parts.streamClaimId && !parts.isChannel;\n}\n\nfunction convertToShareLink(URL) {\n var _parseURI2 = parseURI(URL),\n streamName = _parseURI2.streamName,\n streamClaimId = _parseURI2.streamClaimId,\n channelName = _parseURI2.channelName,\n channelClaimId = _parseURI2.channelClaimId,\n primaryBidPosition = _parseURI2.primaryBidPosition,\n primaryClaimSequence = _parseURI2.primaryClaimSequence,\n secondaryBidPosition = _parseURI2.secondaryBidPosition,\n secondaryClaimSequence = _parseURI2.secondaryClaimSequence;\n\n return buildURI({\n streamName: streamName,\n streamClaimId: streamClaimId,\n channelName: channelName,\n channelClaimId: channelClaimId,\n primaryBidPosition: primaryBidPosition,\n primaryClaimSequence: primaryClaimSequence,\n secondaryBidPosition: secondaryBidPosition,\n secondaryClaimSequence: secondaryClaimSequence\n }, true, 'https://open.lbry.com/');\n}\n\nvar _extends$1 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState = function selectState(state) {\n return state.search;\n};\n\nvar selectSearchValue = reselect.createSelector(selectState, function (state) {\n return state.searchQuery;\n});\nvar selectSearchOptions = reselect.createSelector(selectState, function (state) {\n return state.options;\n});\nvar selectSuggestions = reselect.createSelector(selectState, function (state) {\n return state.suggestions;\n});\nvar selectIsSearching = reselect.createSelector(selectState, function (state) {\n return state.searching;\n});\nvar selectSearchUrisByQuery = reselect.createSelector(selectState, function (state) {\n return state.urisByQuery;\n});\n\nvar makeSelectSearchUris = function makeSelectSearchUris(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectSearchUrisByQuery, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar selectResolvedSearchResultsByQuery = reselect.createSelector(selectState, function (state) {\n return state.resolvedResultsByQuery;\n});\nvar selectResolvedSearchResultsByQueryLastPageReached = reselect.createSelector(selectState, function (state) {\n return state.resolvedResultsByQueryLastPageReached;\n});\n\nvar makeSelectResolvedSearchResults = function makeSelectResolvedSearchResults(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectResolvedSearchResultsByQuery, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar makeSelectResolvedSearchResultsLastPageReached = function makeSelectResolvedSearchResultsLastPageReached(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectResolvedSearchResultsByQueryLastPageReached, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar selectSearchBarFocused = reselect.createSelector(selectState, function (state) {\n return state.focused;\n});\nvar selectSearchSuggestions = reselect.createSelector(selectSearchValue, selectSuggestions, function (query, suggestions) {\n if (!query) {\n return [];\n }\n\n var queryIsPrefix = query === 'lbry:' || query === 'lbry:/' || query === 'lbry://' || query === 'lbry://@';\n\n if (queryIsPrefix) {\n // If it is a prefix, wait until something else comes to figure out what to do\n return [];\n } else if (query.startsWith('lbry://')) {\n // If it starts with a prefix, don't show any autocomplete results\n // They are probably typing/pasting in a lbry uri\n return [{\n value: query,\n type: query[7] === '@' ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n }];\n }\n\n var searchSuggestions = [];\n\n try {\n var uri = normalizeURI(query);\n\n var _parseURI3 = parseURI(uri),\n channelName = _parseURI3.channelName,\n streamName = _parseURI3.streamName,\n isChannel = _parseURI3.isChannel;\n\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.SEARCH\n }, {\n value: uri,\n shorthand: isChannel ? channelName : streamName,\n type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n });\n } catch (e) {\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.SEARCH\n });\n }\n\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.TAG\n });\n var apiSuggestions = suggestions[query] || [];\n\n if (apiSuggestions.length) {\n searchSuggestions = searchSuggestions.concat(apiSuggestions.filter(function (suggestion) {\n return suggestion !== query;\n }).map(function (suggestion) {\n // determine if it's a channel\n try {\n var _uri = normalizeURI(suggestion);\n\n var _parseURI4 = parseURI(_uri),\n _channelName = _parseURI4.channelName,\n _streamName = _parseURI4.streamName,\n _isChannel = _parseURI4.isChannel;\n\n return {\n value: _uri,\n shorthand: _isChannel ? _channelName : _streamName,\n type: _isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n };\n } catch (e) {\n // search result includes some character that isn't valid in claim names\n return {\n value: suggestion,\n type: SEARCH_TYPES.SEARCH\n };\n }\n }));\n }\n\n return searchSuggestions;\n}); // Creates a query string based on the state in the search reducer\n// Can be overrided by passing in custom sizes/from values for other areas pagination\n\nvar makeSelectQueryWithOptions = function makeSelectQueryWithOptions(customQuery, options) {\n return reselect.createSelector(selectSearchValue, selectSearchOptions, function (query, defaultOptions) {\n var searchOptions = _extends$1({}, defaultOptions, options);\n\n var queryString = getSearchQueryString(customQuery || query, searchOptions);\n return queryString;\n });\n};\n/* eslint-disable */\n// underscore's deep equal function\n// https://github.com/jashkenas/underscore/blob/master/underscore.js#L1189\n\n\nfunction isEqual(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b; // `null` or `undefined` only equal to itself (strict comparison).\n\n if (a == null || b == null) return false; // `NaN`s are equivalent, but non-reflexive.\n\n if (a !== a) return b !== b; // Exhaust primitive checks\n\n var type = _typeof(a);\n\n if (type !== 'function' && type !== 'object' && _typeof(b) != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\nfunction deepEq(a, b, aStack, bStack) {\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]': // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b; // An `egal` comparison is performed for other numeric values.\n\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n\n if (!areArrays) {\n if (_typeof(a) != 'object' || _typeof(b) != 'object') return false; // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n\n var aCtor = a.constructor,\n bCtor = b.constructor;\n\n if (aCtor !== bCtor && !(typeof aCtor === 'function' && aCtor instanceof aCtor && typeof bCtor === 'function' && bCtor instanceof bCtor) && 'constructor' in a && 'constructor' in b) {\n return false;\n }\n } // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n\n\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n } // Add the first object to the stack of traversed objects.\n\n\n aStack.push(a);\n bStack.push(b); // Recursively compare objects and arrays.\n\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false; // Deep compare the contents, ignoring non-numeric properties.\n\n while (length--) {\n if (!isEqual(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = Object.keys(a),\n key;\n length = keys.length; // Ensure that both objects contain the same number of properties before comparing deep equality.\n\n if (Object.keys(b).length !== length) return false;\n\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && isEqual(a[key], b[key], aStack, bStack))) return false;\n }\n } // Remove the first object from the stack of traversed objects.\n\n\n aStack.pop();\n bStack.pop();\n return true;\n}\n\nfunction has(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n}\n/* eslint-enable */\n\n\nvar _extends$2 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction extractUserState(rawObj) {\n if (rawObj && rawObj.version === '0.1' && rawObj.value) {\n var _rawObj$value = rawObj.value,\n subscriptions = _rawObj$value.subscriptions,\n tags = _rawObj$value.tags,\n blocked = _rawObj$value.blocked,\n _settings = _rawObj$value.settings,\n app_welcome_version = _rawObj$value.app_welcome_version,\n sharing_3P = _rawObj$value.sharing_3P;\n return _extends$2({}, subscriptions ? {\n subscriptions: subscriptions\n } : {}, tags ? {\n tags: tags\n } : {}, blocked ? {\n blocked: blocked\n } : {}, _settings ? {\n settings: _settings\n } : {}, app_welcome_version ? {\n app_welcome_version: app_welcome_version\n } : {}, sharing_3P ? {\n sharing_3P: sharing_3P\n } : {});\n }\n\n return {};\n}\n\nfunction doPopulateSharedUserState(sharedSettings) {\n return function (dispatch) {\n var _extractUserState = extractUserState(sharedSettings),\n subscriptions = _extractUserState.subscriptions,\n tags = _extractUserState.tags,\n blocked = _extractUserState.blocked,\n settings = _extractUserState.settings,\n app_welcome_version = _extractUserState.app_welcome_version,\n sharing_3P = _extractUserState.sharing_3P;\n\n dispatch({\n type: USER_STATE_POPULATE,\n data: {\n subscriptions: subscriptions,\n tags: tags,\n blocked: blocked,\n settings: settings,\n welcomeVersion: app_welcome_version,\n allowAnalytics: sharing_3P\n }\n });\n };\n}\n\nfunction doPreferenceSet(key, value, version, success, fail) {\n var preference = {\n type: _typeof(value),\n version: version,\n value: value\n };\n var options = {\n key: key,\n value: JSON.stringify(preference)\n };\n lbryProxy.preference_set(options).then(function () {\n success(preference);\n })[\"catch\"](function () {\n if (fail) {\n fail();\n }\n });\n}\n\nfunction doPreferenceGet(key, success, fail) {\n var options = {\n key: key\n };\n lbryProxy.preference_get(options).then(function (result) {\n if (result) {\n var preference = result[key];\n return success(preference);\n }\n\n return success(null);\n })[\"catch\"](function (err) {\n if (fail) {\n fail(err);\n }\n });\n} // \n\n\nvar SHARED_PREFERENCE_KEY = 'shared';\nvar SHARED_PREFERENCE_VERSION = '0.1';\nvar oldShared = {};\n\nvar buildSharedStateMiddleware = function buildSharedStateMiddleware(actions, sharedStateFilters, sharedStateCb) {\n return function (_ref) {\n var getState = _ref.getState,\n dispatch = _ref.dispatch;\n return function (next) {\n return function (action) {\n var currentState = getState(); // We don't care if sync is disabled here, we always want to backup preferences to the wallet\n\n if (!actions.includes(action.type)) {\n return next(action);\n }\n\n var actionResult = next(action); // Call `getState` after calling `next` to ensure the state has updated in response to the action\n\n var nextState = getState();\n var shared = {};\n Object.keys(sharedStateFilters).forEach(function (key) {\n var filter = sharedStateFilters[key];\n var source = filter.source,\n property = filter.property,\n transform = filter.transform;\n var value = nextState[source][property];\n\n if (transform) {\n value = transform(value);\n }\n\n shared[key] = value;\n });\n\n if (!isEqual(oldShared, shared)) {\n // only update if the preference changed from last call in the same session\n oldShared = shared;\n doPreferenceSet(SHARED_PREFERENCE_KEY, shared, SHARED_PREFERENCE_VERSION);\n }\n\n if (sharedStateCb) {\n // Pass dispatch to the callback to consumers can dispatch actions in response to preference set\n sharedStateCb({\n dispatch: dispatch,\n getState: getState\n });\n }\n\n return actionResult;\n };\n };\n };\n}; // \n\n\nfunction doToast(params) {\n if (!params) {\n throw Error(\"'params' object is required to create a toast notification\");\n }\n\n return {\n type: CREATE_TOAST,\n data: {\n id: uuid(),\n params: params\n }\n };\n}\n\nfunction doDismissToast() {\n return {\n type: DISMISS_TOAST\n };\n}\n\nfunction doError(error) {\n return {\n type: CREATE_ERROR,\n data: {\n error: error\n }\n };\n}\n\nfunction doDismissError() {\n return {\n type: DISMISS_ERROR\n };\n}\n\nvar selectState$1 = function selectState$1(state) {\n return state.wallet || {};\n};\n\nvar selectWalletState = selectState$1;\nvar selectWalletIsEncrypted = reselect.createSelector(selectState$1, function (state) {\n return state.walletIsEncrypted;\n});\nvar selectWalletEncryptPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptPending;\n});\nvar selectWalletEncryptSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptSucceded;\n});\nvar selectPendingSupportTransactions = reselect.createSelector(selectState$1, function (state) {\n return state.pendingSupportTransactions;\n});\nvar selectAbandonClaimSupportError = reselect.createSelector(selectState$1, function (state) {\n return state.abandonClaimSupportError;\n});\n\nvar makeSelectPendingAmountByUri = function makeSelectPendingAmountByUri(uri) {\n return reselect.createSelector(selectClaimIdsByUri, selectPendingSupportTransactions, function (claimIdsByUri, pendingSupports) {\n var uriEntry = Object.entries(claimIdsByUri).find(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n u = _ref3[0],\n cid = _ref3[1];\n\n return u === uri;\n });\n var claimId = uriEntry && uriEntry[1];\n var pendingSupport = claimId && pendingSupports[claimId];\n return pendingSupport ? pendingSupport.effective : undefined;\n });\n};\n\nvar selectWalletEncryptResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptResult;\n});\nvar selectWalletDecryptPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptPending;\n});\nvar selectWalletDecryptSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptSucceded;\n});\nvar selectWalletDecryptResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptResult;\n});\nvar selectWalletUnlockPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockPending;\n});\nvar selectWalletUnlockSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockSucceded;\n});\nvar selectWalletUnlockResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockResult;\n});\nvar selectWalletLockPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockPending;\n});\nvar selectWalletLockSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockSucceded;\n});\nvar selectWalletLockResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockResult;\n});\nvar selectBalance = reselect.createSelector(selectState$1, function (state) {\n return state.balance;\n});\nvar selectTotalBalance = reselect.createSelector(selectState$1, function (state) {\n return state.totalBalance;\n});\nvar selectReservedBalance = reselect.createSelector(selectState$1, function (state) {\n return state.reservedBalance;\n});\nvar selectClaimsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.claimsBalance;\n});\nvar selectSupportsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.supportsBalance;\n});\nvar selectTipsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.tipsBalance;\n});\nvar selectTransactionsById = reselect.createSelector(selectState$1, function (state) {\n return state.transactions || {};\n});\nvar selectSupportsByOutpoint = reselect.createSelector(selectState$1, function (state) {\n return state.supports || {};\n});\nvar selectTotalSupports = reselect.createSelector(selectSupportsByOutpoint, function (byOutpoint) {\n var total = parseFloat('0.0');\n Object.values(byOutpoint).forEach(function (support) {\n var amount = support.amount;\n total = amount ? total + parseFloat(amount) : total;\n });\n return total;\n});\nvar selectTransactionItems = reselect.createSelector(selectTransactionsById, function (byId) {\n var items = [];\n Object.keys(byId).forEach(function (txid) {\n var tx = byId[txid]; // ignore dust/fees\n // it is fee only txn if all infos are also empty\n\n if (Math.abs(tx.value) === Math.abs(tx.fee) && tx.claim_info.length === 0 && tx.support_info.length === 0 && tx.update_info.length === 0 && tx.abandon_info.length === 0) {\n return;\n }\n\n var append = [];\n append.push.apply(append, _toConsumableArray(tx.claim_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: item.claim_name[0] === '@' ? CHANNEL$1 : PUBLISH$1\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.support_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: !item.is_tip ? SUPPORT : TIP\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.update_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: UPDATE\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.abandon_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: ABANDON\n });\n })));\n\n if (!append.length) {\n append.push(Object.assign({}, tx, {\n type: tx.value < 0 ? SPEND : RECEIVE\n }));\n }\n\n items.push.apply(items, _toConsumableArray(append.map(function (item) {\n // value on transaction, amount on outpoint\n // amount is always positive, but should match sign of value\n var balanceDelta = parseFloat(item.balance_delta);\n var value = parseFloat(item.value);\n var amount = balanceDelta || value;\n var fee = parseFloat(tx.fee);\n return {\n txid: txid,\n timestamp: tx.timestamp,\n date: tx.timestamp ? new Date(Number(tx.timestamp) * 1000) : null,\n amount: amount,\n fee: fee,\n claim_id: item.claim_id,\n claim_name: item.claim_name,\n type: item.type || SPEND,\n nout: item.nout,\n confirmations: tx.confirmations\n };\n })));\n });\n return items.sort(function (tx1, tx2) {\n if (!tx1.timestamp && !tx2.timestamp) {\n return 0;\n } else if (!tx1.timestamp && tx2.timestamp) {\n return -1;\n } else if (tx1.timestamp && !tx2.timestamp) {\n return 1;\n }\n\n return tx2.timestamp - tx1.timestamp;\n });\n});\nvar selectRecentTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n var threshold = new Date();\n threshold.setDate(threshold.getDate() - 7);\n return transactions.filter(function (transaction) {\n if (!transaction.date) {\n return true; // pending transaction\n }\n\n return transaction.date > threshold;\n });\n});\nvar selectHasTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n return transactions && transactions.length > 0;\n});\nvar selectIsFetchingTransactions = reselect.createSelector(selectState$1, function (state) {\n return state.fetchingTransactions;\n});\nvar selectIsSendingSupport = reselect.createSelector(selectState$1, function (state) {\n return state.sendingSupport;\n});\nvar selectReceiveAddress = reselect.createSelector(selectState$1, function (state) {\n return state.receiveAddress;\n});\nvar selectGettingNewAddress = reselect.createSelector(selectState$1, function (state) {\n return state.gettingNewAddress;\n});\nvar selectDraftTransaction = reselect.createSelector(selectState$1, function (state) {\n return state.draftTransaction || {};\n});\nvar selectDraftTransactionAmount = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.amount;\n});\nvar selectDraftTransactionAddress = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.address;\n});\nvar selectDraftTransactionError = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.error;\n});\nvar selectBlocks = reselect.createSelector(selectState$1, function (state) {\n return state.blocks;\n});\nvar selectCurrentHeight = reselect.createSelector(selectState$1, function (state) {\n return state.latestBlock;\n});\nvar selectTransactionListFilter = reselect.createSelector(selectState$1, function (state) {\n return state.transactionListFilter || '';\n});\nvar selectFilteredTransactions = reselect.createSelector(selectTransactionItems, selectTransactionListFilter, function (transactions, filter) {\n return transactions.filter(function (transaction) {\n return filter === ALL || filter === transaction.type;\n });\n});\n\nvar makeSelectFilteredTransactionsForPage = function makeSelectFilteredTransactionsForPage() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return reselect.createSelector(selectFilteredTransactions, function (filteredTransactions) {\n var start = (Number(page) - 1) * Number(PAGE_SIZE$1);\n var end = Number(page) * Number(PAGE_SIZE$1);\n return filteredTransactions && filteredTransactions.length ? filteredTransactions.slice(start, end) : [];\n });\n};\n\nvar makeSelectLatestTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n return transactions && transactions.length ? transactions.slice(0, LATEST_PAGE_SIZE) : [];\n});\nvar selectFilteredTransactionCount = reselect.createSelector(selectFilteredTransactions, function (filteredTransactions) {\n return filteredTransactions.length;\n});\nvar selectIsWalletReconnecting = reselect.createSelector(selectState$1, function (state) {\n return state.walletReconnecting;\n});\n\nvar _extends$3 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$1(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar matureTagMap = MATURE_TAGS.reduce(function (acc, tag) {\n return _extends$3({}, acc, _defineProperty({}, tag, true));\n}, {});\n\nvar isClaimNsfw = function isClaimNsfw(claim) {\n if (!claim) {\n throw new Error('No claim passed to isClaimNsfw()');\n }\n\n if (!claim.value) {\n return false;\n }\n\n var tags = claim.value.tags || [];\n\n for (var i = 0; i < tags.length; i += 1) {\n var tag = tags[i].toLowerCase();\n\n if (matureTagMap[tag]) {\n return true;\n }\n }\n\n return false;\n};\n\nfunction createNormalizedClaimSearchKey(options) {\n // Ignore page because we don't care what the last page searched was, we want everything\n // Ignore release_time because that will change depending on when you call claim_search ex: release_time: \">12344567\"\n var rest = _objectWithoutProperties$1(options, ['page', 'release_time']);\n\n var query = JSON.stringify(rest);\n return query;\n}\n\nvar _extends$4 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState$2 = function selectState$2(state) {\n return state.claims || {};\n};\n\nvar selectClaimsById = reselect.createSelector(selectState$2, function (state) {\n return state.byId || {};\n});\nvar selectClaimIdsByUri = reselect.createSelector(selectState$2, function (state) {\n return state.claimsByUri || {};\n});\nvar selectCurrentChannelPage = reselect.createSelector(selectState$2, function (state) {\n return state.currentChannelPage || 1;\n});\nvar selectCreatingChannel = reselect.createSelector(selectState$2, function (state) {\n return state.creatingChannel;\n});\nvar selectCreateChannelError = reselect.createSelector(selectState$2, function (state) {\n return state.createChannelError;\n});\nvar selectRepostLoading = reselect.createSelector(selectState$2, function (state) {\n return state.repostLoading;\n});\nvar selectRepostError = reselect.createSelector(selectState$2, function (state) {\n return state.repostError;\n});\nvar selectClaimsByUri = reselect.createSelector(selectState$2, selectClaimsById, function (state, byId) {\n var byUri = state.claimsByUri || {};\n var claims = {};\n Object.keys(byUri).forEach(function (uri) {\n var claimId = byUri[uri]; // NOTE returning a null claim allows us to differentiate between an\n // undefined (never fetched claim) and one which just doesn't exist. Not\n // the cleanest solution but couldn't think of anything better right now\n\n if (claimId === null) {\n claims[uri] = null;\n } else {\n claims[uri] = byId[claimId];\n }\n });\n return claims;\n});\nvar selectAllClaimsByChannel = reselect.createSelector(selectState$2, function (state) {\n return state.paginatedClaimsByChannel || {};\n});\nvar selectPendingById = reselect.createSelector(selectState$2, function (state) {\n return state.pendingById || {};\n});\nvar selectPendingClaims = reselect.createSelector(selectState$2, function (state) {\n return Object.values(state.pendingById || []);\n});\n\nvar makeSelectClaimIsPending = function makeSelectClaimIsPending(uri) {\n return reselect.createSelector(selectPendingById, function (pendingById) {\n var claimId;\n\n try {\n var _parseURI5 = parseURI(uri),\n isChannel = _parseURI5.isChannel,\n channelClaimId = _parseURI5.channelClaimId,\n streamClaimId = _parseURI5.streamClaimId;\n\n claimId = isChannel ? channelClaimId : streamClaimId;\n } catch (e) {}\n\n if (claimId) {\n return Boolean(pendingById[claimId]);\n }\n });\n};\n\nvar makeSelectPendingByUri = function makeSelectPendingByUri(uri) {\n return reselect.createSelector(selectPendingById, function (pendingById) {\n var _parseURI6 = parseURI(uri),\n isChannel = _parseURI6.isChannel,\n channelClaimId = _parseURI6.channelClaimId,\n streamClaimId = _parseURI6.streamClaimId;\n\n var claimId = isChannel ? channelClaimId : streamClaimId;\n return pendingById[claimId];\n });\n};\n\nvar makeSelectClaimForUri = function makeSelectClaimForUri(uri) {\n var returnRepost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return reselect.createSelector(selectClaimsByUri, selectPendingById, function (byUri, pendingById) {\n // Check if a claim is pending first\n // It won't be in claimsByUri because resolving it will return nothing\n var valid;\n var channelClaimId;\n var streamClaimId;\n var isChannel;\n\n try {\n var _parseURI7 = parseURI(uri);\n\n isChannel = _parseURI7.isChannel;\n channelClaimId = _parseURI7.channelClaimId;\n streamClaimId = _parseURI7.streamClaimId;\n valid = true;\n } catch (e) {}\n\n if (valid && byUri) {\n var claimId = isChannel ? channelClaimId : streamClaimId;\n var pendingClaim = pendingById[claimId];\n\n if (pendingClaim) {\n return pendingClaim;\n }\n\n var _claim = byUri[normalizeURI(uri)];\n\n if (_claim === undefined || _claim === null) {\n // Make sure to return the claim as is so apps can check if it's been resolved before (null) or still needs to be resolved (undefined)\n return _claim;\n }\n\n var repostedClaim = _claim.reposted_claim;\n\n if (repostedClaim && returnRepost) {\n var channelUrl = _claim.signing_channel && _claim.signing_channel.canonical_url;\n return _extends$4({}, repostedClaim, {\n repost_url: uri,\n repost_channel_url: channelUrl\n });\n } else {\n return _claim;\n }\n }\n });\n};\n\nvar selectMyClaimsRaw = reselect.createSelector(selectState$2, selectClaimsById, function (state, byId) {\n var ids = state.myClaims;\n\n if (!ids) {\n return ids;\n }\n\n var claims = [];\n ids.forEach(function (id) {\n if (byId[id]) {\n // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544\n claims.push(byId[id]);\n }\n });\n return claims;\n});\nvar selectAbandoningIds = reselect.createSelector(selectState$2, function (state) {\n return Object.keys(state.abandoningById || {});\n});\nvar selectMyActiveClaims = reselect.createSelector(selectMyClaimsRaw, selectAbandoningIds, function (claims, abandoningIds) {\n return new Set(claims && claims.map(function (claim) {\n return claim.claim_id;\n }).filter(function (claimId) {\n return Object.keys(abandoningIds).indexOf(claimId) === -1;\n }));\n});\n\nvar makeSelectClaimIsMine = function makeSelectClaimIsMine(rawUri) {\n var uri;\n\n try {\n uri = normalizeURI(rawUri);\n } catch (e) {}\n\n return reselect.createSelector(selectClaimsByUri, selectMyActiveClaims, function (claims, myClaims) {\n try {\n parseURI(uri);\n } catch (e) {\n return false;\n }\n\n return claims && claims[uri] && claims[uri].claim_id && myClaims.has(claims[uri].claim_id);\n });\n};\n\nvar selectAllFetchingChannelClaims = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingChannelClaims || {};\n});\n\nvar makeSelectFetchingChannelClaims = function makeSelectFetchingChannelClaims(uri) {\n return reselect.createSelector(selectAllFetchingChannelClaims, function (fetching) {\n return fetching && fetching[uri];\n });\n};\n\nvar makeSelectClaimsInChannelForPage = function makeSelectClaimsInChannelForPage(uri, page) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return claimIds;\n return claimIds.map(function (claimId) {\n return byId[claimId];\n });\n });\n};\n\nvar makeSelectTotalClaimsInChannelSearch = function makeSelectTotalClaimsInChannelSearch(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n return byChannel['itemCount'];\n });\n};\n\nvar makeSelectTotalPagesInChannelSearch = function makeSelectTotalPagesInChannelSearch(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n return byChannel['pageCount'];\n });\n};\n\nvar makeSelectClaimsInChannelForCurrentPageState = function makeSelectClaimsInChannelForCurrentPageState(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, selectCurrentChannelPage, function (byId, allClaims, page) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return claimIds;\n return claimIds.map(function (claimId) {\n return byId[claimId];\n });\n });\n};\n\nvar makeSelectMetadataForUri = function makeSelectMetadataForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var metadata = claim && claim.value;\n return metadata || (claim === undefined ? undefined : null);\n });\n};\n\nvar makeSelectMetadataItemForUri = function makeSelectMetadataItemForUri(uri, key) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata ? metadata[key] : undefined;\n });\n};\n\nvar makeSelectTitleForUri = function makeSelectTitleForUri(uri) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata && metadata.title;\n });\n};\n\nvar makeSelectDateForUri = function makeSelectDateForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var timestamp = claim && claim.value && (claim.value.release_time ? claim.value.release_time * 1000 : claim.meta && claim.meta.creation_timestamp ? claim.meta.creation_timestamp * 1000 : null);\n\n if (!timestamp) {\n return undefined;\n }\n\n var dateObj = new Date(timestamp);\n return dateObj;\n });\n};\n\nvar makeSelectAmountForUri = function makeSelectAmountForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.amount;\n });\n};\n\nvar makeSelectContentTypeForUri = function makeSelectContentTypeForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var source = claim && claim.value && claim.value.source;\n return source ? source.media_type : undefined;\n });\n};\n\nvar makeSelectThumbnailForUri = function makeSelectThumbnailForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var thumbnail = claim && claim.value && claim.value.thumbnail;\n return thumbnail && thumbnail.url ? thumbnail.url.trim() : undefined;\n });\n};\n\nvar makeSelectCoverForUri = function makeSelectCoverForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var cover = claim && claim.value && claim.value.cover;\n return cover && cover.url ? cover.url.trim() : undefined;\n });\n};\n\nvar selectIsFetchingClaimListMine = reselect.createSelector(selectState$2, function (state) {\n return state.isFetchingClaimListMine;\n});\nvar selectMyClaims = reselect.createSelector(selectMyActiveClaims, selectClaimsById, selectAbandoningIds, selectPendingClaims, function (myClaimIds, byId, abandoningIds, pendingClaims) {\n var claims = [];\n myClaimIds.forEach(function (id) {\n var claim = byId[id];\n if (claim && abandoningIds.indexOf(id) === -1) claims.push(claim);\n });\n return [].concat(claims, _toConsumableArray(pendingClaims));\n});\nvar selectMyClaimsWithoutChannels = reselect.createSelector(selectMyClaims, function (myClaims) {\n return myClaims.filter(function (claim) {\n return !claim.name.match(/^@/);\n }).sort(function (a, b) {\n return a.timestamp - b.timestamp;\n });\n});\nvar selectMyClaimUrisWithoutChannels = reselect.createSelector(selectMyClaimsWithoutChannels, function (myClaims) {\n return myClaims.sort(function (a, b) {\n if (a.height < 1) {\n return -1;\n } else if (b.height < 1) {\n return 1;\n } else {\n return b.timestamp - a.timestamp;\n }\n }).map(function (claim) {\n return claim.canonical_url || claim.permanent_url;\n });\n});\nvar selectAllMyClaimsByOutpoint = reselect.createSelector(selectMyClaimsRaw, function (claims) {\n return new Set(claims && claims.length ? claims.map(function (claim) {\n return \"\".concat(claim.txid, \":\").concat(claim.nout);\n }) : null);\n});\nvar selectMyClaimsOutpoints = reselect.createSelector(selectMyClaims, function (myClaims) {\n var outpoints = [];\n myClaims.forEach(function (claim) {\n return outpoints.push(\"\".concat(claim.txid, \":\").concat(claim.nout));\n });\n return outpoints;\n});\nvar selectFetchingMyChannels = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingMyChannels;\n});\nvar selectMyChannelClaims = reselect.createSelector(selectState$2, selectClaimsById, function (state, byId) {\n var ids = state.myChannelClaims;\n\n if (!ids) {\n return ids;\n }\n\n var claims = [];\n ids.forEach(function (id) {\n if (byId[id]) {\n // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544\n claims.push(byId[id]);\n }\n });\n return claims;\n});\nvar selectResolvingUris = reselect.createSelector(selectState$2, function (state) {\n return state.resolvingUris || [];\n});\nvar selectChannelImportPending = reselect.createSelector(selectState$2, function (state) {\n return state.pendingChannelImport;\n});\n\nvar makeSelectIsUriResolving = function makeSelectIsUriResolving(uri) {\n return reselect.createSelector(selectResolvingUris, function (resolvingUris) {\n return resolvingUris && resolvingUris.indexOf(uri) !== -1;\n });\n};\n\nvar selectPlayingUri = reselect.createSelector(selectState$2, function (state) {\n return state.playingUri;\n});\nvar selectChannelClaimCounts = reselect.createSelector(selectState$2, function (state) {\n return state.channelClaimCounts || {};\n});\n\nvar makeSelectTotalItemsForChannel = function makeSelectTotalItemsForChannel(uri) {\n return reselect.createSelector(selectChannelClaimCounts, function (byUri) {\n return byUri && byUri[uri];\n });\n};\n\nvar makeSelectTotalPagesForChannel = function makeSelectTotalPagesForChannel(uri) {\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n return reselect.createSelector(selectChannelClaimCounts, function (byUri) {\n return byUri && byUri[uri] && Math.ceil(byUri[uri] / pageSize);\n });\n};\n\nvar makeSelectNsfwCountFromUris = function makeSelectNsfwCountFromUris(uris) {\n return reselect.createSelector(selectClaimsByUri, function (claims) {\n return uris.reduce(function (acc, uri) {\n var claim = claims[uri];\n\n if (claim && isClaimNsfw(claim)) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n });\n};\n\nvar makeSelectNsfwCountForChannel = function makeSelectNsfwCountForChannel(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, selectCurrentChannelPage, function (byId, allClaims, page) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return 0;\n return claimIds.reduce(function (acc, claimId) {\n var claim = byId[claimId];\n\n if (isClaimNsfw(claim)) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n });\n};\n\nvar makeSelectOmittedCountForChannel = function makeSelectOmittedCountForChannel(uri) {\n return reselect.createSelector(makeSelectTotalItemsForChannel(uri), makeSelectTotalClaimsInChannelSearch(uri), function (claimsInChannel, claimsInSearch) {\n if (claimsInChannel && typeof claimsInSearch === 'number' && claimsInSearch >= 0) {\n return claimsInChannel - claimsInSearch;\n } else return 0;\n });\n};\n\nvar makeSelectClaimIsNsfw = function makeSelectClaimIsNsfw(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), // Eventually these will come from some list of tags that are considered adult\n // Or possibly come from users settings of what tags they want to hide\n // For now, there is just a hard coded list of tags inside `isClaimNsfw`\n // selectNaughtyTags(),\n function (claim) {\n if (!claim) {\n return false;\n }\n\n return isClaimNsfw(claim);\n });\n};\n\nvar makeSelectRecommendedContentForUri = function makeSelectRecommendedContentForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), selectSearchUrisByQuery, makeSelectClaimIsNsfw(uri), function (claim, searchUrisByQuery, isMature) {\n var atVanityURI = !uri.includes('#');\n var recommendedContent;\n\n if (claim) {\n // always grab full URL - this can change once search returns canonical\n var currentUri = buildURI({\n streamClaimId: claim.claim_id,\n streamName: claim.name\n });\n var title = claim.value.title;\n\n if (!title) {\n return;\n }\n\n var options = {\n related_to: claim.claim_id,\n isBackgroundSearch: true\n };\n\n if (!isMature) {\n options['nsfw'] = false;\n }\n\n var searchQuery = getSearchQueryString(title.replace(/\\//, ' '), options);\n var searchUris = searchUrisByQuery[searchQuery];\n\n if (searchUris) {\n searchUris = searchUris.filter(function (searchUri) {\n return searchUri !== currentUri;\n });\n recommendedContent = searchUris;\n }\n }\n\n return recommendedContent;\n });\n};\n\nvar makeSelectFirstRecommendedFileForUri = function makeSelectFirstRecommendedFileForUri(uri) {\n return reselect.createSelector(makeSelectRecommendedContentForUri(uri), function (recommendedContent) {\n return recommendedContent ? recommendedContent[0] : null;\n });\n}; // Returns the associated channel uri for a given claim uri\n// accepts a regular claim uri lbry://something\n// returns the channel uri that created this claim lbry://@channel\n\n\nvar makeSelectChannelForClaimUri = function makeSelectChannelForClaimUri(uri) {\n var includePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n if (!claim || !claim.signing_channel || !claim.is_channel_signature_valid) {\n return null;\n }\n\n var _claim$signing_channe = claim.signing_channel,\n canonicalUrl = _claim$signing_channe.canonical_url,\n permanentUrl = _claim$signing_channe.permanent_url;\n\n if (canonicalUrl) {\n return includePrefix ? canonicalUrl : canonicalUrl.slice('lbry://'.length);\n } else {\n return includePrefix ? permanentUrl : permanentUrl.slice('lbry://'.length);\n }\n });\n};\n\nvar makeSelectTagsForUri = function makeSelectTagsForUri(uri) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata && metadata.tags || [];\n });\n};\n\nvar selectFetchingClaimSearchByQuery = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingClaimSearchByQuery || {};\n});\nvar selectFetchingClaimSearch = reselect.createSelector(selectFetchingClaimSearchByQuery, function (fetchingClaimSearchByQuery) {\n return Boolean(Object.keys(fetchingClaimSearchByQuery).length);\n});\nvar selectClaimSearchByQuery = reselect.createSelector(selectState$2, function (state) {\n return state.claimSearchByQuery || {};\n});\nvar selectClaimSearchByQueryLastPageReached = reselect.createSelector(selectState$2, function (state) {\n return state.claimSearchByQueryLastPageReached || {};\n});\n\nvar makeSelectShortUrlForUri = function makeSelectShortUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.short_url;\n });\n};\n\nvar makeSelectCanonicalUrlForUri = function makeSelectCanonicalUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.canonical_url;\n });\n};\n\nvar makeSelectPermanentUrlForUri = function makeSelectPermanentUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.permanent_url;\n });\n};\n\nvar makeSelectSupportsForUri = function makeSelectSupportsForUri(uri) {\n return reselect.createSelector(selectSupportsByOutpoint, makeSelectClaimForUri(uri), function (byOutpoint, claim) {\n if (!claim || !claim.is_mine) {\n return null;\n }\n\n var claimId = claim.claim_id;\n var total = 0;\n Object.values(byOutpoint).forEach(function (support) {\n // $FlowFixMe\n var claim_id = support.claim_id,\n amount = support.amount;\n total = claim_id === claimId && amount ? total + parseFloat(amount) : total;\n });\n return total;\n });\n};\n\nvar selectUpdatingChannel = reselect.createSelector(selectState$2, function (state) {\n return state.updatingChannel;\n});\nvar selectUpdateChannelError = reselect.createSelector(selectState$2, function (state) {\n return state.updateChannelError;\n});\n\nvar makeSelectMyStreamUrlsForPage = function makeSelectMyStreamUrlsForPage() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return reselect.createSelector(selectMyClaimUrisWithoutChannels, function (urls) {\n var start = (Number(page) - 1) * Number(PAGE_SIZE);\n var end = Number(page) * Number(PAGE_SIZE);\n return urls && urls.length ? urls.slice(start, end) : [];\n });\n};\n\nvar selectMyStreamUrlsCount = reselect.createSelector(selectMyClaimUrisWithoutChannels, function (channels) {\n return channels.length;\n});\n\nvar makeSelectResolvedRecommendedContentForUri = function makeSelectResolvedRecommendedContentForUri(uri, size, claimId, claimName, claimTitle) {\n return reselect.createSelector(makeSelectClaimForUri(uri), selectResolvedSearchResultsByQuery, makeSelectClaimIsNsfw(uri), function (claim, resolvedResultsByQuery, isMature) {\n var atVanityURI = !uri.includes('#');\n var currentUri;\n var recommendedContent;\n var title;\n\n if (claim) {\n // always grab full URL - this can change once search returns canonical\n currentUri = buildURI({\n streamClaimId: claim.claim_id,\n streamName: claim.name\n });\n title = claim.value ? claim.value.title : null;\n } else {\n // for cases on mobile where the claim may not have been resolved ()\n currentUri = buildURI({\n streamClaimId: claimId,\n streamName: claimName\n });\n title = claimTitle;\n }\n\n if (!title) {\n return;\n }\n\n var options = {\n related_to: claim ? claim.claim_id : claimId,\n size: size,\n isBackgroundSearch: false\n };\n var searchQuery = getSearchQueryString(title.replace(/\\//, ' '), options);\n var results = resolvedResultsByQuery[searchQuery];\n\n if (results) {\n results = results.filter(function (result) {\n return buildURI({\n streamClaimId: result.claimId,\n streamName: result.name\n }) !== currentUri;\n });\n recommendedContent = results;\n }\n\n return recommendedContent;\n });\n};\n\nfunction numberWithCommas(x) {\n var parts = x.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nfunction formatCredits(amount, precision) {\n var shortFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var actualAmount = parseFloat(amount);\n var actualPrecision = parseFloat(precision);\n var suffix = '';\n if (Number.isNaN(actualAmount) || actualAmount === 0) return '0';\n\n if (actualAmount >= 1000000) {\n if (precision <= 7) {\n if (shortFormat) {\n actualAmount = actualAmount / 1000000;\n suffix = 'M';\n } else {\n actualPrecision -= 7;\n }\n }\n } else if (actualAmount >= 1000) {\n if (precision <= 4) {\n if (shortFormat) {\n actualAmount = actualAmount / 1000;\n suffix = 'K';\n } else {\n actualPrecision -= 4;\n }\n }\n }\n\n return numberWithCommas(actualAmount.toFixed(actualPrecision >= 0 ? actualPrecision : 1).replace(/\\.*0+$/, '')) + suffix;\n}\n\nfunction formatFullPrice(amount) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var formated = '';\n var quantity = amount.toString().split('.');\n var fraction = quantity[1];\n\n if (fraction) {\n var decimals = fraction.split('');\n var first = decimals.filter(function (number) {\n return number !== '0';\n })[0];\n var index = decimals.indexOf(first); // Set format fraction\n\n formated = \".\".concat(fraction.substring(0, index + precision));\n }\n\n return parseFloat(quantity[0] + formated);\n}\n\nfunction creditsToString(amount) {\n var creditString = parseFloat(amount).toFixed(8);\n return creditString;\n}\n\nvar walletBalancePromise = null;\n\nfunction doUpdateBalance() {\n return function (dispatch, getState) {\n var _getState = getState(),\n totalInStore = _getState.wallet.totalBalance;\n\n if (walletBalancePromise === null) {\n walletBalancePromise = lbryProxy.wallet_balance().then(function (response) {\n walletBalancePromise = null;\n var available = response.available,\n reserved = response.reserved,\n reserved_subtotals = response.reserved_subtotals,\n total = response.total;\n var claims = reserved_subtotals.claims,\n supports = reserved_subtotals.supports,\n tips = reserved_subtotals.tips;\n var totalFloat = parseFloat(total);\n\n if (totalInStore !== totalFloat) {\n dispatch({\n type: UPDATE_BALANCE,\n data: {\n totalBalance: totalFloat,\n balance: parseFloat(available),\n reservedBalance: parseFloat(reserved),\n claimsBalance: parseFloat(claims),\n supportsBalance: parseFloat(supports),\n tipsBalance: parseFloat(tips)\n }\n });\n }\n })[\"catch\"](function () {\n walletBalancePromise = null;\n });\n }\n\n return walletBalancePromise;\n };\n}\n\nfunction doBalanceSubscribe() {\n return function (dispatch) {\n dispatch(doUpdateBalance());\n setInterval(function () {\n return dispatch(doUpdateBalance());\n }, 5000);\n };\n}\n\nfunction doFetchTransactions() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch(doFetchSupports());\n dispatch({\n type: FETCH_TRANSACTIONS_STARTED\n });\n lbryProxy.utxo_release().then(function () {\n return lbryProxy.transaction_list({\n page: page,\n page_size: pageSize\n });\n }).then(function (result) {\n dispatch({\n type: FETCH_TRANSACTIONS_COMPLETED,\n data: {\n transactions: result.items\n }\n });\n });\n };\n}\n\nfunction doFetchSupports() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch({\n type: FETCH_SUPPORTS_STARTED\n });\n lbryProxy.support_list({\n page: page,\n page_size: pageSize\n }).then(function (result) {\n dispatch({\n type: FETCH_SUPPORTS_COMPLETED,\n data: {\n supports: result.items\n }\n });\n });\n };\n}\n\nfunction doGetNewAddress() {\n return function (dispatch) {\n dispatch({\n type: GET_NEW_ADDRESS_STARTED\n });\n lbryProxy.address_unused().then(function (address) {\n dispatch({\n type: GET_NEW_ADDRESS_COMPLETED,\n data: {\n address: address\n }\n });\n });\n };\n}\n\nfunction doCheckAddressIsMine(address) {\n return function (dispatch) {\n dispatch({\n type: CHECK_ADDRESS_IS_MINE_STARTED\n });\n lbryProxy.address_is_mine({\n address: address\n }).then(function (isMine) {\n if (!isMine) dispatch(doGetNewAddress());\n dispatch({\n type: CHECK_ADDRESS_IS_MINE_COMPLETED\n });\n });\n };\n}\n\nfunction doSendDraftTransaction(address, amount) {\n return function (dispatch, getState) {\n var state = getState();\n var balance = selectBalance(state);\n\n if (balance - amount <= 0) {\n dispatch(doToast({\n title: 'Insufficient credits',\n message: 'Insufficient credits'\n }));\n return;\n }\n\n dispatch({\n type: SEND_TRANSACTION_STARTED\n });\n\n var successCallback = function successCallback(response) {\n if (response.txid) {\n dispatch({\n type: SEND_TRANSACTION_COMPLETED\n });\n dispatch(doToast({\n message: \"You sent \".concat(amount, \" LBC\"),\n linkText: 'History',\n linkTarget: '/wallet'\n }));\n } else {\n dispatch({\n type: SEND_TRANSACTION_FAILED,\n data: {\n error: response\n }\n });\n dispatch(doToast({\n message: 'Transaction failed',\n isError: true\n }));\n }\n };\n\n var errorCallback = function errorCallback(error) {\n dispatch({\n type: SEND_TRANSACTION_FAILED,\n data: {\n error: error.message\n }\n });\n dispatch(doToast({\n message: 'Transaction failed',\n isError: true\n }));\n };\n\n lbryProxy.wallet_send({\n addresses: [address],\n amount: creditsToString(amount)\n }).then(successCallback, errorCallback);\n };\n}\n\nfunction doSetDraftTransactionAmount(amount) {\n return {\n type: SET_DRAFT_TRANSACTION_AMOUNT,\n data: {\n amount: amount\n }\n };\n}\n\nfunction doSetDraftTransactionAddress(address) {\n return {\n type: SET_DRAFT_TRANSACTION_ADDRESS,\n data: {\n address: address\n }\n };\n}\n\nfunction doSendTip(amount, claimId, isSupport, successCallback, errorCallback) {\n return function (dispatch, getState) {\n var state = getState();\n var balance = selectBalance(state);\n var myClaims = selectMyClaimsRaw(state);\n var shouldSupport = isSupport || (myClaims ? myClaims.find(function (claim) {\n return claim.claim_id === claimId;\n }) : false);\n\n if (balance - amount <= 0) {\n dispatch(doToast({\n message: __('Insufficient credits'),\n isError: true\n }));\n return;\n }\n\n var success = function success() {\n dispatch(doToast({\n message: shouldSupport ? __('You deposited %amount% LBC as a support!', {\n amount: amount\n }) : __('You sent %amount% LBC as a tip, Mahalo!', {\n amount: amount\n }),\n linkText: __('History'),\n linkTarget: __('/wallet')\n }));\n dispatch({\n type: SUPPORT_TRANSACTION_COMPLETED\n });\n\n if (successCallback) {\n successCallback();\n }\n };\n\n var error = function error(err) {\n dispatch(doToast({\n message: __(\"There was an error sending support funds.\"),\n isError: true\n }));\n dispatch({\n type: SUPPORT_TRANSACTION_FAILED,\n data: {\n error: err\n }\n });\n\n if (errorCallback) {\n errorCallback();\n }\n };\n\n dispatch({\n type: SUPPORT_TRANSACTION_STARTED\n });\n lbryProxy.support_create({\n claim_id: claimId,\n amount: creditsToString(amount),\n tip: !shouldSupport,\n blocking: true\n }).then(success, error);\n };\n}\n\nfunction doClearSupport() {\n return {\n type: CLEAR_SUPPORT_TRANSACTION\n };\n}\n\nfunction doWalletEncrypt(newPassword) {\n return function (dispatch) {\n dispatch({\n type: WALLET_ENCRYPT_START\n });\n lbryProxy.wallet_encrypt({\n new_password: newPassword\n }).then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_ENCRYPT_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_ENCRYPT_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doWalletUnlock(password) {\n return function (dispatch) {\n dispatch({\n type: WALLET_UNLOCK_START\n });\n lbryProxy.wallet_unlock({\n password: password\n }).then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_UNLOCK_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_UNLOCK_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doSupportAbandonForClaim(claimId, claimType, keep, preview) {\n return function (dispatch) {\n if (preview) {\n dispatch({\n type: ABANDON_CLAIM_SUPPORT_PREVIEW\n });\n } else {\n dispatch({\n type: ABANDON_CLAIM_SUPPORT_STARTED\n });\n }\n\n var params = {\n claim_id: claimId\n };\n if (preview) params['preview'] = true;\n if (keep) params['keep'] = keep;\n return lbryProxy.support_abandon(params).then(function (res) {\n if (!preview) {\n dispatch({\n type: ABANDON_CLAIM_SUPPORT_COMPLETED,\n data: {\n claimId: claimId,\n txid: res.txid,\n effective: res.outputs[0].amount,\n type: claimType\n } // add to pendingSupportTransactions,\n\n });\n dispatch(doCheckPendingTxs());\n }\n\n return res;\n })[\"catch\"](function (e) {\n dispatch({\n type: ABANDON_CLAIM_SUPPORT_FAILED,\n data: e.message\n });\n });\n };\n}\n\nfunction doWalletReconnect() {\n return function (dispatch) {\n dispatch({\n type: WALLET_RESTART\n }); // this basically returns null when it's done. :(\n // might be good to dispatch ACTIONS.WALLET_RESTARTED\n\n lbryProxy.wallet_reconnect().then(function () {\n return dispatch({\n type: WALLET_RESTART_COMPLETED\n });\n });\n };\n}\n\nfunction doWalletDecrypt() {\n return function (dispatch) {\n dispatch({\n type: WALLET_DECRYPT_START\n });\n lbryProxy.wallet_decrypt().then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_DECRYPT_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_DECRYPT_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doWalletStatus() {\n return function (dispatch) {\n dispatch({\n type: WALLET_STATUS_START\n });\n lbryProxy.wallet_status().then(function (status) {\n if (status) {\n dispatch({\n type: WALLET_STATUS_COMPLETED,\n result: status.is_encrypted\n });\n }\n });\n };\n}\n\nfunction doSetTransactionListFilter(filterOption) {\n return {\n type: SET_TRANSACTION_LIST_FILTER,\n data: filterOption\n };\n}\n\nfunction doUpdateBlockHeight() {\n return function (dispatch) {\n return lbryProxy.status().then(function (status) {\n if (status.wallet) {\n dispatch({\n type: UPDATE_CURRENT_HEIGHT,\n data: status.wallet.blocks\n });\n }\n });\n };\n} // Calls transaction_show on txes until any pending txes are confirmed\n\n\nvar doCheckPendingTxs = function doCheckPendingTxs() {\n return function (dispatch, getState) {\n var state = getState();\n var pendingTxsById = selectPendingSupportTransactions(state); // {}\n\n if (!Object.keys(pendingTxsById).length) {\n return;\n }\n\n var txCheckInterval;\n\n var checkTxList = function checkTxList() {\n var state = getState();\n var pendingTxs = selectPendingSupportTransactions(state); // {}\n\n var promises = [];\n var newPendingTxes = {};\n var types = new Set([]);\n var changed = false;\n Object.entries(pendingTxs).forEach(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n claim = _ref5[0],\n data = _ref5[1];\n\n promises.push(lbryProxy.transaction_show({\n txid: data.txid\n }));\n types.add(data.type);\n });\n Promise.all(promises).then(function (txShows) {\n txShows.forEach(function (result) {\n if (result.height <= 0) {\n var entries = Object.entries(pendingTxs);\n var match = entries.find(function (entry) {\n return entry[1].txid === result.txid;\n });\n newPendingTxes[match[0]] = match[1];\n } else {\n changed = true;\n }\n });\n }).then(function () {\n if (changed) {\n dispatch({\n type: PENDING_SUPPORTS_UPDATED,\n data: newPendingTxes\n });\n\n if (types.has('channel')) {\n dispatch(doFetchChannelListMine());\n }\n\n if (types.has('stream')) {\n dispatch(doFetchClaimListMine());\n }\n }\n\n if (Object.keys(newPendingTxes).length === 0) clearInterval(txCheckInterval);\n });\n\n if (!Object.keys(pendingTxsById).length) {\n clearInterval(txCheckInterval);\n }\n };\n\n txCheckInterval = setInterval(function () {\n checkTxList();\n }, 30000);\n };\n}; // https://github.com/reactjs/redux/issues/911\n\n\nfunction batchActions() {\n for (var _len = arguments.length, actions = new Array(_len), _key = 0; _key < _len; _key++) {\n actions[_key] = arguments[_key];\n }\n\n return {\n type: 'BATCH_ACTIONS',\n actions: actions\n };\n}\n\nvar _extends$5 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction doResolveUris(uris) {\n var returnCachedClaims = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return function (dispatch, getState) {\n var normalizedUris = uris.map(normalizeURI);\n var state = getState();\n var resolvingUris = selectResolvingUris(state);\n var claimsByUri = selectClaimsByUri(state);\n var urisToResolve = normalizedUris.filter(function (uri) {\n if (resolvingUris.includes(uri)) {\n return false;\n }\n\n return returnCachedClaims ? !claimsByUri[uri] : true;\n });\n\n if (urisToResolve.length === 0) {\n return;\n }\n\n dispatch({\n type: RESOLVE_URIS_STARTED,\n data: {\n uris: normalizedUris\n }\n });\n var resolveInfo = {};\n lbryProxy.resolve({\n urls: urisToResolve\n }).then(function (result) {\n Object.entries(result).forEach(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n uri = _ref7[0],\n uriResolveInfo = _ref7[1];\n\n var fallbackResolveInfo = {\n stream: null,\n claimsInChannel: null,\n channel: null\n }; // Flow has terrible Object.entries support\n // https://github.com/facebook/flow/issues/2221\n\n if (uriResolveInfo) {\n if (uriResolveInfo.error) {\n resolveInfo[uri] = _extends$5({}, fallbackResolveInfo);\n } else {\n var _result = {};\n\n if (uriResolveInfo.value_type === 'channel') {\n _result.channel = uriResolveInfo; // $FlowFixMe\n\n _result.claimsInChannel = uriResolveInfo.meta.claims_in_channel;\n } else {\n _result.stream = uriResolveInfo;\n\n if (uriResolveInfo.signing_channel) {\n _result.channel = uriResolveInfo.signing_channel;\n _result.claimsInChannel = uriResolveInfo.signing_channel.meta && uriResolveInfo.signing_channel.meta.claims_in_channel || 0;\n }\n } // $FlowFixMe\n\n\n resolveInfo[uri] = _result;\n }\n }\n });\n dispatch({\n type: RESOLVE_URIS_COMPLETED,\n data: {\n resolveInfo: resolveInfo\n }\n });\n });\n };\n}\n\nfunction doResolveUri(uri) {\n return doResolveUris([uri]);\n}\n\nfunction doFetchClaimListMine() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n var resolve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n return function (dispatch) {\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_STARTED\n }); // $FlowFixMe\n\n lbryProxy.claim_list({\n page: page,\n page_size: pageSize,\n claim_type: ['stream', 'repost'],\n resolve: resolve\n }).then(function (result) {\n var claims = result.items;\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_COMPLETED,\n data: {\n claims: claims\n }\n });\n });\n };\n}\n\nfunction doAbandonClaim(txid, nout) {\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n return function (dispatch, getState) {\n var state = getState();\n var myClaims = selectMyClaimsRaw(state);\n var mySupports = selectSupportsByOutpoint(state); // A user could be trying to abandon a support or one of their claims\n\n var claimToAbandon = myClaims.find(function (claim) {\n return claim.txid === txid && claim.nout === nout;\n });\n var supportToAbandon = mySupports[outpoint];\n\n if (!claimToAbandon && !supportToAbandon) {\n console.error('No associated support or claim with txid: ', txid);\n return;\n }\n\n var data = claimToAbandon ? {\n claimId: claimToAbandon.claim_id\n } : {\n outpoint: \"\".concat(supportToAbandon.txid, \":\").concat(supportToAbandon.nout)\n };\n var isClaim = !!claimToAbandon;\n var startedActionType = isClaim ? ABANDON_CLAIM_STARTED : ABANDON_SUPPORT_STARTED;\n var completedActionType = isClaim ? ABANDON_CLAIM_SUCCEEDED : ABANDON_SUPPORT_COMPLETED;\n dispatch({\n type: startedActionType,\n data: data\n });\n\n var errorCallback = function errorCallback() {\n dispatch(doToast({\n message: isClaim ? 'Error abandoning your claim/support' : 'Error unlocking your tip',\n isError: true\n }));\n };\n\n var successCallback = function successCallback() {\n dispatch({\n type: completedActionType,\n data: data\n });\n var abandonMessage;\n\n if (isClaim) {\n abandonMessage = 'Successfully abandoned your claim.';\n } else if (supportToAbandon) {\n abandonMessage = 'Successfully abandoned your support.';\n } else {\n abandonMessage = 'Successfully unlocked your tip!';\n }\n\n dispatch(doToast({\n message: abandonMessage\n })); // After abandoning, fetch transactions to show the new abandon transaction\n // Only fetch the latest few transactions since we don't care about old ones\n // Not very robust, but better than calling the entire list for large wallets\n\n var page = 1;\n var pageSize = 10;\n dispatch(doFetchTransactions(page, pageSize));\n };\n\n var abandonParams = {\n txid: txid,\n nout: nout,\n blocking: true\n };\n var method;\n\n if (supportToAbandon) {\n method = 'support_abandon';\n } else if (claimToAbandon) {\n var claimName = claimToAbandon.name;\n method = claimName.startsWith('@') ? 'channel_abandon' : 'stream_abandon';\n }\n\n if (!method) {\n console.error('No \"method\" chosen for claim or support abandon');\n return;\n }\n\n lbryProxy[method](abandonParams).then(successCallback, errorCallback);\n };\n}\n\nfunction doFetchClaimsByChannel(uri) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return function (dispatch) {\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_STARTED,\n data: {\n uri: uri,\n page: page\n }\n });\n lbryProxy.claim_search({\n channel: uri,\n valid_channel_signature: true,\n page: page || 1,\n order_by: ['release_time']\n }).then(function (result) {\n var claims = result.items,\n claimsInChannel = result.total_items,\n returnedPage = result.page;\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_COMPLETED,\n data: {\n uri: uri,\n claimsInChannel: claimsInChannel,\n claims: claims || [],\n page: returnedPage || undefined\n }\n });\n });\n };\n}\n\nfunction doCreateChannel(name, amount, optionalParams) {\n return function (dispatch) {\n dispatch({\n type: CREATE_CHANNEL_STARTED\n });\n var createParams = {\n name: name,\n bid: creditsToString(amount),\n blocking: true\n };\n\n if (optionalParams) {\n if (optionalParams.title) {\n createParams.title = optionalParams.title;\n }\n\n if (optionalParams.coverUrl) {\n createParams.cover_url = optionalParams.coverUrl;\n }\n\n if (optionalParams.thumbnailUrl) {\n createParams.thumbnail_url = optionalParams.thumbnailUrl;\n }\n\n if (optionalParams.description) {\n createParams.description = optionalParams.description;\n }\n\n if (optionalParams.website) {\n createParams.website_url = optionalParams.website;\n }\n\n if (optionalParams.email) {\n createParams.email = optionalParams.email;\n }\n\n if (optionalParams.tags) {\n createParams.tags = optionalParams.tags.map(function (tag) {\n return tag.name;\n });\n }\n }\n\n return lbryProxy.channel_create(createParams) // outputs[0] is the certificate\n // outputs[1] is the change from the tx, not in the app currently\n .then(function (result) {\n var channelClaim = result.outputs[0];\n dispatch({\n type: CREATE_CHANNEL_COMPLETED,\n data: {\n channelClaim: channelClaim\n }\n });\n return channelClaim;\n })[\"catch\"](function (error) {\n dispatch({\n type: CREATE_CHANNEL_FAILED,\n data: error.message\n });\n return error;\n });\n };\n}\n\nfunction doUpdateChannel(params) {\n return function (dispatch, getState) {\n dispatch({\n type: UPDATE_CHANNEL_STARTED\n });\n var state = getState();\n var myChannels = selectMyChannelClaims(state);\n var channelClaim = myChannels.find(function (myChannel) {\n return myChannel.claim_id === params.claim_id;\n });\n var updateParams = {\n claim_id: params.claim_id,\n bid: creditsToString(params.amount),\n title: params.title,\n cover_url: params.coverUrl,\n thumbnail_url: params.thumbnailUrl,\n description: params.description,\n website_url: params.website,\n email: params.email,\n tags: [],\n replace: true,\n languages: [],\n locations: [],\n blocking: true\n };\n\n if (params.tags) {\n updateParams.tags = params.tags.map(function (tag) {\n return tag.name;\n });\n } // we'll need to remove these once we add locations/channels to channel page edit/create options\n\n\n if (channelClaim && channelClaim.value && channelClaim.value.locations) {\n updateParams.locations = channelClaim.value.locations;\n }\n\n if (channelClaim && channelClaim.value && channelClaim.value.languages) {\n updateParams.languages = channelClaim.value.languages;\n }\n\n return lbryProxy.channel_update(updateParams).then(function (result) {\n var channelClaim = result.outputs[0];\n dispatch({\n type: UPDATE_CHANNEL_COMPLETED,\n data: {\n channelClaim: channelClaim\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: UPDATE_CHANNEL_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doImportChannel(certificate) {\n return function (dispatch) {\n dispatch({\n type: IMPORT_CHANNEL_STARTED\n });\n return lbryProxy.channel_import({\n channel_data: certificate\n }).then(function (result) {\n dispatch({\n type: IMPORT_CHANNEL_COMPLETED\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: IMPORT_CHANNEL_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doFetchChannelListMine() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n var resolve = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n return function (dispatch) {\n dispatch({\n type: FETCH_CHANNEL_LIST_STARTED\n });\n\n var callback = function callback(response) {\n dispatch({\n type: FETCH_CHANNEL_LIST_COMPLETED,\n data: {\n claims: response.items\n }\n });\n };\n\n lbryProxy.channel_list({\n page: page,\n page_size: pageSize,\n resolve: resolve\n }).then(callback);\n };\n}\n\nfunction doClaimSearch() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n no_totals: true,\n page_size: 10,\n page: 1\n };\n var query = createNormalizedClaimSearchKey(options);\n return function (dispatch) {\n dispatch({\n type: CLAIM_SEARCH_STARTED,\n data: {\n query: query\n }\n });\n\n var success = function success(data) {\n var resolveInfo = {};\n var urls = [];\n data.items.forEach(function (stream) {\n resolveInfo[stream.canonical_url] = {\n stream: stream\n };\n urls.push(stream.canonical_url);\n });\n dispatch({\n type: CLAIM_SEARCH_COMPLETED,\n data: {\n query: query,\n resolveInfo: resolveInfo,\n urls: urls,\n append: options.page && options.page !== 1,\n pageSize: options.page_size\n }\n });\n };\n\n var failure = function failure(err) {\n dispatch({\n type: CLAIM_SEARCH_FAILED,\n data: {\n query: query\n },\n error: err\n });\n };\n\n lbryProxy.claim_search(options).then(success, failure);\n };\n}\n\nfunction doRepost(options) {\n return function (dispatch) {\n // $FlowFixMe\n return new Promise(function (resolve) {\n dispatch({\n type: CLAIM_REPOST_STARTED\n });\n\n function success(response) {\n var repostClaim = response.outputs[0];\n dispatch({\n type: CLAIM_REPOST_COMPLETED,\n data: {\n originalClaimId: options.claim_id,\n repostClaim: repostClaim\n }\n });\n dispatch(doFetchClaimListMine(1, 10));\n resolve(repostClaim);\n }\n\n function failure(error) {\n dispatch({\n type: CLAIM_REPOST_FAILED,\n data: {\n error: error.message\n }\n });\n }\n\n lbryProxy.stream_repost(options).then(success, failure);\n });\n };\n}\n\nfunction doClearRepostError() {\n return {\n type: CLEAR_REPOST_ERROR\n };\n}\n\nvar selectState$3 = function selectState$3(state) {\n return state.fileInfo || {};\n};\n\nvar selectFileInfosByOutpoint = reselect.createSelector(selectState$3, function (state) {\n return state.byOutpoint || {};\n});\nvar selectIsFetchingFileList = reselect.createSelector(selectState$3, function (state) {\n return state.isFetchingFileList;\n});\nvar selectIsFetchingFileListDownloadedOrPublished = reselect.createSelector(selectIsFetchingFileList, selectIsFetchingClaimListMine, function (isFetchingFileList, isFetchingClaimListMine) {\n return isFetchingFileList || isFetchingClaimListMine;\n});\n\nvar makeSelectFileInfoForUri = function makeSelectFileInfoForUri(uri) {\n return reselect.createSelector(selectClaimsByUri, selectFileInfosByOutpoint, function (claims, byOutpoint) {\n var claim = claims[uri];\n var outpoint = claim ? \"\".concat(claim.txid, \":\").concat(claim.nout) : undefined;\n return outpoint ? byOutpoint[outpoint] : undefined;\n });\n};\n\nvar selectDownloadingByOutpoint = reselect.createSelector(selectState$3, function (state) {\n return state.downloadingByOutpoint || {};\n});\n\nvar makeSelectDownloadingForUri = function makeSelectDownloadingForUri(uri) {\n return reselect.createSelector(selectDownloadingByOutpoint, makeSelectFileInfoForUri(uri), function (byOutpoint, fileInfo) {\n if (!fileInfo) return false;\n return byOutpoint[fileInfo.outpoint];\n });\n};\n\nvar selectUrisLoading = reselect.createSelector(selectState$3, function (state) {\n return state.fetching || {};\n});\n\nvar makeSelectLoadingForUri = function makeSelectLoadingForUri(uri) {\n return reselect.createSelector(selectUrisLoading, makeSelectClaimForUri(uri), function (fetchingByOutpoint, claim) {\n if (!claim) {\n return false;\n }\n\n var txid = claim.txid,\n nout = claim.nout;\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n var isFetching = fetchingByOutpoint[outpoint];\n return isFetching;\n });\n};\n\nvar selectFileInfosDownloaded = reselect.createSelector(selectFileInfosByOutpoint, selectMyClaims, function (byOutpoint, myClaims) {\n return Object.values(byOutpoint).reverse().filter(function (fileInfo) {\n var myClaimIds = myClaims.map(function (claim) {\n return claim.claim_id;\n });\n return fileInfo && myClaimIds.indexOf(fileInfo.claim_id) === -1 && (fileInfo.completed || fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0);\n });\n}); // export const selectFileInfoForUri = (state, props) => {\n// const claims = selectClaimsByUri(state),\n// claim = claims[props.uri],\n// fileInfos = selectAllFileInfos(state),\n// outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined;\n// return outpoint && fileInfos ? fileInfos[outpoint] : undefined;\n// };\n\nvar selectDownloadingFileInfos = reselect.createSelector(selectDownloadingByOutpoint, selectFileInfosByOutpoint, function (downloadingByOutpoint, fileInfosByOutpoint) {\n var outpoints = Object.keys(downloadingByOutpoint);\n var fileInfos = [];\n outpoints.forEach(function (outpoint) {\n var fileInfo = fileInfosByOutpoint[outpoint];\n if (fileInfo) fileInfos.push(fileInfo);\n });\n return fileInfos;\n});\nvar selectTotalDownloadProgress = reselect.createSelector(selectDownloadingFileInfos, function (fileInfos) {\n var progress = [];\n fileInfos.forEach(function (fileInfo) {\n progress.push(fileInfo.written_bytes / fileInfo.total_bytes * 100);\n });\n var totalProgress = progress.reduce(function (a, b) {\n return a + b;\n }, 0);\n if (fileInfos.length > 0) return totalProgress / fileInfos.length / 100.0;\n return -1;\n});\nvar selectFileListPublishedSort = reselect.createSelector(selectState$3, function (state) {\n return state.fileListPublishedSort;\n});\nvar selectFileListDownloadedSort = reselect.createSelector(selectState$3, function (state) {\n return state.fileListDownloadedSort;\n});\nvar selectDownloadedUris = reselect.createSelector(selectFileInfosDownloaded, // We should use permament_url but it doesn't exist in file_list\nfunction (info) {\n return info.slice().map(function (claim) {\n return \"lbry://\".concat(claim.claim_name, \"#\").concat(claim.claim_id);\n });\n});\n\nvar makeSelectMediaTypeForUri = function makeSelectMediaTypeForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), makeSelectContentTypeForUri(uri), function (fileInfo, contentType) {\n if (!fileInfo && !contentType) {\n return undefined;\n }\n\n var fileName = fileInfo && fileInfo.file_name;\n return lbryProxy.getMediaType(contentType, fileName);\n });\n};\n\nvar makeSelectUriIsStreamable = function makeSelectUriIsStreamable(uri) {\n return reselect.createSelector(makeSelectMediaTypeForUri(uri), function (mediaType) {\n var isStreamable = ['audio', 'video', 'image'].indexOf(mediaType) !== -1;\n return isStreamable;\n });\n};\n\nvar makeSelectDownloadPathForUri = function makeSelectDownloadPathForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.download_path;\n });\n};\n\nvar makeSelectFilePartlyDownloaded = function makeSelectFilePartlyDownloaded(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n if (!fileInfo) {\n return false;\n }\n\n return fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0;\n });\n};\n\nvar makeSelectFileNameForUri = function makeSelectFileNameForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.file_name;\n });\n};\n\nvar selectDownloadUrlsCount = reselect.createSelector(selectDownloadedUris, function (uris) {\n return uris.length;\n});\n\nfunction filterFileInfos(fileInfos, query) {\n if (query) {\n var queryMatchRegExp = new RegExp(query, 'i');\n return fileInfos.filter(function (fileInfo) {\n var metadata = fileInfo.metadata;\n return metadata.title && metadata.title.match(queryMatchRegExp) || fileInfo.channel_name && fileInfo.channel_name.match(queryMatchRegExp) || fileInfo.claim_name && fileInfo.claim_name.match(queryMatchRegExp);\n });\n }\n\n return fileInfos;\n}\n\nvar makeSelectSearchDownloadUrlsForPage = function makeSelectSearchDownloadUrlsForPage(query) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return reselect.createSelector(selectFileInfosDownloaded, function (fileInfos) {\n var matchingFileInfos = filterFileInfos(fileInfos, query);\n var start = (Number(page) - 1) * Number(PAGE_SIZE);\n var end = Number(page) * Number(PAGE_SIZE);\n return matchingFileInfos && matchingFileInfos.length ? matchingFileInfos.slice(start, end).map(function (fileInfo) {\n return buildURI({\n streamName: fileInfo.claim_name,\n channelName: fileInfo.channel_name,\n channelClaimId: fileInfo.channel_claim_id\n });\n }) : [];\n });\n};\n\nvar makeSelectSearchDownloadUrlsCount = function makeSelectSearchDownloadUrlsCount(query) {\n return reselect.createSelector(selectFileInfosDownloaded, function (fileInfos) {\n return fileInfos && fileInfos.length ? filterFileInfos(fileInfos, query).length : 0;\n });\n}; // \n\n\nvar selectState$4 = function selectState$4(state) {\n return state.file || {};\n};\n\nvar selectPurchaseUriErrorMessage = reselect.createSelector(selectState$4, function (state) {\n return state.purchaseUriErrorMessage;\n});\nvar selectFailedPurchaseUris = reselect.createSelector(selectState$4, function (state) {\n return state.failedPurchaseUris;\n});\nvar selectPurchasedUris = reselect.createSelector(selectState$4, function (state) {\n return state.purchasedUris;\n});\nvar selectLastPurchasedUri = reselect.createSelector(selectState$4, function (state) {\n return state.purchasedUris.length > 0 ? state.purchasedUris[state.purchasedUris.length - 1] : null;\n});\n\nvar makeSelectStreamingUrlForUri = function makeSelectStreamingUrlForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.streaming_url;\n });\n}; // \n\n\nfunction doFileGet(uri) {\n var saveFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var onSuccess = arguments.length > 2 ? arguments[2] : undefined;\n return function (dispatch, getState) {\n var state = getState();\n\n var _makeSelectClaimForUr = makeSelectClaimForUri(uri)(state),\n nout = _makeSelectClaimForUr.nout,\n txid = _makeSelectClaimForUr.txid;\n\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n dispatch({\n type: FETCH_FILE_INFO_STARTED,\n data: {\n outpoint: outpoint\n }\n }); // set save_file argument to True to save the file (old behaviour)\n\n lbryProxy.get({\n uri: uri,\n save_file: saveFile\n }).then(function (streamInfo) {\n var timeout = streamInfo === null || _typeof(streamInfo) !== 'object' || streamInfo.error === 'Timeout';\n\n if (timeout) {\n dispatch({\n type: FETCH_FILE_INFO_FAILED,\n data: {\n outpoint: outpoint\n }\n });\n dispatch(doToast({\n message: \"File timeout for uri \".concat(uri),\n isError: true\n }));\n } else {\n // purchase was completed successfully\n dispatch({\n type: PURCHASE_URI_COMPLETED,\n data: {\n uri: uri\n }\n });\n dispatch({\n type: FETCH_FILE_INFO_COMPLETED,\n data: {\n fileInfo: streamInfo,\n outpoint: streamInfo.outpoint\n }\n });\n\n if (onSuccess) {\n onSuccess(streamInfo);\n }\n }\n })[\"catch\"](function () {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri\n }\n });\n dispatch({\n type: FETCH_FILE_INFO_FAILED,\n data: {\n outpoint: outpoint\n }\n });\n dispatch(doToast({\n message: \"Failed to view \".concat(uri, \", please try again. If this problem persists, visit https://lbry.com/faq/support for support.\"),\n isError: true\n }));\n });\n };\n}\n\nfunction doPurchaseUri(uri, costInfo) {\n var saveFile = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var onSuccess = arguments.length > 3 ? arguments[3] : undefined;\n return function (dispatch, getState) {\n dispatch({\n type: PURCHASE_URI_STARTED,\n data: {\n uri: uri\n }\n });\n var state = getState();\n var balance = selectBalance(state);\n var fileInfo = makeSelectFileInfoForUri(uri)(state);\n var downloadingByOutpoint = selectDownloadingByOutpoint(state);\n var alreadyDownloading = fileInfo && !!downloadingByOutpoint[fileInfo.outpoint];\n var alreadyStreaming = makeSelectStreamingUrlForUri(uri)(state);\n\n if (!saveFile && (alreadyDownloading || alreadyStreaming)) {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri,\n error: \"Already fetching uri: \".concat(uri)\n }\n });\n return;\n }\n\n var cost = costInfo.cost;\n\n if (parseFloat(cost) > balance) {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri,\n error: 'Insufficient credits'\n }\n });\n return;\n }\n\n dispatch(doFileGet(uri, saveFile, onSuccess));\n };\n}\n\nfunction doDeletePurchasedUri(uri) {\n return {\n type: DELETE_PURCHASED_URI,\n data: {\n uri: uri\n }\n };\n}\n\nfunction doFetchFileInfo(uri) {\n return function (dispatch, getState) {\n var state = getState();\n var claim = selectClaimsByUri(state)[uri];\n var outpoint = claim ? \"\".concat(claim.txid, \":\").concat(claim.nout) : null;\n var alreadyFetching = !!selectUrisLoading(state)[uri];\n\n if (!alreadyFetching) {\n dispatch({\n type: FETCH_FILE_INFO_STARTED,\n data: {\n outpoint: outpoint\n }\n });\n lbryProxy.file_list({\n outpoint: outpoint,\n full_status: true,\n page: 1,\n page_size: 1\n }).then(function (result) {\n var fileInfos = result.items;\n var fileInfo = fileInfos[0];\n dispatch({\n type: FETCH_FILE_INFO_COMPLETED,\n data: {\n outpoint: outpoint,\n fileInfo: fileInfo || null\n }\n });\n });\n }\n };\n}\n\nfunction doFileList() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch, getState) {\n var state = getState();\n var isFetching = selectIsFetchingFileList(state);\n\n if (!isFetching) {\n dispatch({\n type: FILE_LIST_STARTED\n });\n lbryProxy.file_list({\n page: page,\n page_size: pageSize\n }).then(function (result) {\n var fileInfos = result.items;\n dispatch({\n type: FILE_LIST_SUCCEEDED,\n data: {\n fileInfos: fileInfos\n }\n });\n });\n }\n };\n}\n\nfunction doFetchFileInfosAndPublishedClaims() {\n return function (dispatch, getState) {\n var state = getState();\n var isFetchingClaimListMine = selectIsFetchingClaimListMine(state);\n var isFetchingFileInfo = selectIsFetchingFileList(state);\n if (!isFetchingClaimListMine) dispatch(doFetchClaimListMine());\n if (!isFetchingFileInfo) dispatch(doFileList());\n };\n}\n\nfunction doSetFileListSort(page, value) {\n return {\n type: SET_FILE_LIST_SORT,\n data: {\n page: page,\n value: value\n }\n };\n}\n\nvar _extends$6 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$2(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar selectState$5 = function selectState$5(state) {\n return state.publish || {};\n}; // Is the current uri the same as the uri they clicked \"edit\" on\n\n\nvar selectIsStillEditing = reselect.createSelector(selectState$5, function (publishState) {\n var editingURI = publishState.editingURI,\n uri = publishState.uri;\n\n if (!editingURI || !uri) {\n return false;\n }\n\n var _parseURI8 = parseURI(uri),\n currentIsChannel = _parseURI8.isChannel,\n currentClaimName = _parseURI8.streamName,\n currentContentName = _parseURI8.channelName;\n\n var _parseURI9 = parseURI(editingURI),\n editIsChannel = _parseURI9.isChannel,\n editClaimName = _parseURI9.streamName,\n editContentName = _parseURI9.channelName; // Depending on the previous/current use of a channel, we need to compare different things\n // ex: going from a channel to anonymous, the new uri won't return contentName, so we need to use claimName\n\n\n var currentName = currentIsChannel ? currentContentName : currentClaimName;\n var editName = editIsChannel ? editContentName : editClaimName;\n return currentName === editName;\n});\nvar selectPublishFormValues = reselect.createSelector(selectState$5, selectIsStillEditing, function (state, isStillEditing) {\n var pendingPublish = state.pendingPublish,\n language = state.language,\n languages = state.languages,\n formValues = _objectWithoutProperties$2(state, ['pendingPublish', 'language', 'languages']);\n\n var actualLanguage; // Sets default if editing a claim with a set language\n\n if (!language && isStillEditing && languages && languages[0]) {\n actualLanguage = languages[0];\n } else {\n actualLanguage = language || 'en';\n }\n\n return _extends$6({}, formValues, {\n language: actualLanguage\n });\n});\n\nvar makeSelectPublishFormValue = function makeSelectPublishFormValue(item) {\n return reselect.createSelector(selectState$5, function (state) {\n return state[item];\n });\n};\n\nvar selectMyClaimForUri = reselect.createSelector(selectPublishFormValues, selectIsStillEditing, selectClaimsById, selectMyClaimsWithoutChannels, function (_ref8, isStillEditing, claimsById, myClaims) {\n var editingURI = _ref8.editingURI,\n uri = _ref8.uri;\n\n var _parseURI10 = parseURI(uri),\n contentName = _parseURI10.channelName,\n claimName = _parseURI10.streamName;\n\n var _parseURI11 = parseURI(editingURI),\n editClaimId = _parseURI11.streamClaimId; // If isStillEditing\n // They clicked \"edit\" from the file page\n // They haven't changed the channel/name after clicking edit\n // Get the claim so they can edit without re-uploading a new file\n\n\n return isStillEditing ? claimsById[editClaimId] : myClaims.find(function (claim) {\n return !contentName ? claim.name === claimName : claim.name === contentName || claim.name === claimName;\n });\n});\nvar selectIsResolvingPublishUris = reselect.createSelector(selectState$5, selectResolvingUris, function (_ref9, resolvingUris) {\n var uri = _ref9.uri,\n name = _ref9.name;\n\n if (uri) {\n var isResolvingUri = resolvingUris.includes(uri);\n\n var _parseURI12 = parseURI(uri),\n isChannel = _parseURI12.isChannel;\n\n var isResolvingShortUri;\n\n if (isChannel && name) {\n var shortUri = buildURI({\n streamName: name\n });\n isResolvingShortUri = resolvingUris.includes(shortUri);\n }\n\n return isResolvingUri || isResolvingShortUri;\n }\n\n return false;\n});\nvar selectTakeOverAmount = reselect.createSelector(selectState$5, selectMyClaimForUri, selectClaimsByUri, function (_ref10, myClaimForUri, claimsByUri) {\n var name = _ref10.name;\n\n if (!name) {\n return null;\n } // We only care about the winning claim for the short uri\n\n\n var shortUri = buildURI({\n streamName: name\n });\n var claimForShortUri = claimsByUri[shortUri];\n\n if (!myClaimForUri && claimForShortUri) {\n return claimForShortUri.meta.effective_amount;\n } else if (myClaimForUri && claimForShortUri) {\n // https://github.com/lbryio/lbry/issues/1476\n // We should check the current effective_amount on my claim to see how much additional lbc\n // is needed to win the claim. Currently this is not possible during a takeover.\n // With this, we could say something like, \"You have x lbc in support, if you bid y additional LBC you will control the claim\"\n // For now just ignore supports. We will just show the winning claim's bid amount\n return claimForShortUri.meta.effective_amount || claimForShortUri.amount;\n }\n\n return null;\n});\n\nvar _extends$7 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar doResetThumbnailStatus = function doResetThumbnailStatus() {\n return function (dispatch) {\n dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n thumbnailPath: ''\n }\n });\n return fetch(SPEECH_STATUS).then(function (res) {\n return res.json();\n }).then(function (status) {\n if (status.disabled) {\n throw Error();\n }\n\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: READY,\n thumbnail: ''\n }\n });\n })[\"catch\"](function () {\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: API_DOWN,\n thumbnail: ''\n }\n });\n });\n };\n};\n\nvar doClearPublish = function doClearPublish() {\n return function (dispatch) {\n dispatch({\n type: CLEAR_PUBLISH\n });\n return dispatch(doResetThumbnailStatus());\n };\n};\n\nvar doUpdatePublishForm = function doUpdatePublishForm(publishFormValue) {\n return function (dispatch) {\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: _extends$7({}, publishFormValue)\n });\n };\n};\n\nvar doUploadThumbnail = function doUploadThumbnail(filePath, thumbnailBlob, fsAdapter, fs, path) {\n return function (dispatch) {\n var thumbnail, fileExt, fileName, fileType;\n\n var makeid = function makeid() {\n var text = '';\n var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (var i = 0; i < 24; i += 1) {\n text += possible.charAt(Math.floor(Math.random() * 62));\n }\n\n return text;\n };\n\n var uploadError = function uploadError() {\n var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n dispatch(batchActions({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: READY,\n thumbnail: '',\n nsfw: false\n }\n }, doError(error)));\n };\n\n dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: IN_PROGRESS\n }\n });\n\n if (fsAdapter && fsAdapter.readFile && filePath) {\n fsAdapter.readFile(filePath, 'base64').then(function (base64Image) {\n fileExt = 'png';\n fileName = 'thumbnail.png';\n fileType = 'image/png';\n var data = new FormData();\n var name = makeid();\n data.append('name', name); // $FlowFixMe\n\n data.append('file', {\n uri: 'file://' + filePath,\n type: fileType,\n name: fileName\n });\n return fetch(SPEECH_PUBLISH, {\n method: 'POST',\n body: data\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n return json.success ? dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: COMPLETE,\n thumbnail: \"\".concat(json.data.url, \".\").concat(fileExt)\n }\n }) : uploadError(json.message);\n })[\"catch\"](function (err) {\n return uploadError(err.message);\n });\n });\n } else {\n if (filePath && fs && path) {\n thumbnail = fs.readFileSync(filePath);\n fileExt = path.extname(filePath);\n fileName = path.basename(filePath);\n fileType = \"image/\".concat(fileExt.slice(1));\n } else if (thumbnailBlob) {\n fileExt = \".\".concat(thumbnailBlob.type && thumbnailBlob.type.split('/')[1]);\n fileName = thumbnailBlob.name;\n fileType = thumbnailBlob.type;\n } else {\n return null;\n }\n\n var data = new FormData();\n var name = makeid();\n var file = thumbnailBlob || thumbnail && new File([thumbnail], fileName, {\n type: fileType\n });\n data.append('name', name); // $FlowFixMe\n\n data.append('file', file);\n return fetch(SPEECH_PUBLISH, {\n method: 'POST',\n body: data\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n return json.success ? dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: COMPLETE,\n thumbnail: \"\".concat(json.data.url).concat(fileExt)\n }\n }) : uploadError(json.message);\n })[\"catch\"](function (err) {\n return uploadError(err.message);\n });\n }\n };\n};\n\nvar doPrepareEdit = function doPrepareEdit(claim, uri, fileInfo, fs) {\n return function (dispatch) {\n var name = claim.name,\n amount = claim.amount,\n _claim$value = claim.value,\n value = _claim$value === void 0 ? {} : _claim$value;\n var channelName = claim && claim.signing_channel && claim.signing_channel.name || null;\n var author = value.author,\n description = value.description,\n _value$fee = value.fee,\n fee = _value$fee === void 0 ? {\n amount: '0',\n currency: 'LBC'\n } : _value$fee,\n languages = value.languages,\n license = value.license,\n licenseUrl = value.license_url,\n thumbnail = value.thumbnail,\n title = value.title,\n tags = value.tags;\n var publishData = {\n name: name,\n bid: amount,\n contentIsFree: fee.amount === '0',\n author: author,\n description: description,\n fee: fee,\n languages: languages,\n thumbnail: thumbnail ? thumbnail.url : null,\n title: title,\n uri: uri,\n uploadThumbnailStatus: thumbnail ? MANUAL : undefined,\n licenseUrl: licenseUrl,\n nsfw: isClaimNsfw(claim),\n tags: tags ? tags.map(function (tag) {\n return {\n name: tag\n };\n }) : []\n }; // Make sure custom licenses are mapped properly\n // If the license isn't one of the standard licenses, map the custom license and description/url\n\n if (!CC_LICENSES.some(function (_ref11) {\n var value = _ref11.value;\n return value === license;\n })) {\n if (!license || license === NONE || license === PUBLIC_DOMAIN) {\n publishData.licenseType = license;\n } else if (license && !licenseUrl && license !== NONE) {\n publishData.licenseType = COPYRIGHT;\n } else {\n publishData.licenseType = OTHER;\n }\n\n publishData.otherLicenseDescription = license;\n } else {\n publishData.licenseType = license;\n }\n\n if (channelName) {\n publishData['channel'] = channelName;\n }\n\n dispatch({\n type: DO_PREPARE_EDIT,\n data: publishData\n });\n };\n};\n\nvar doPublish = function doPublish(success, fail) {\n return function (dispatch, getState) {\n dispatch({\n type: PUBLISH_START\n });\n var state = getState();\n var myClaimForUri = selectMyClaimForUri(state);\n var myChannels = selectMyChannelClaims(state);\n var myClaims = selectMyClaimsWithoutChannels(state); // get redux publish form\n\n var publishData = selectPublishFormValues(state); // destructure the data values\n\n var name = publishData.name,\n bid = publishData.bid,\n filePath = publishData.filePath,\n description = publishData.description,\n language = publishData.language,\n license = publishData.license,\n licenseUrl = publishData.licenseUrl,\n licenseType = publishData.licenseType,\n otherLicenseDescription = publishData.otherLicenseDescription,\n thumbnail = publishData.thumbnail,\n channel = publishData.channel,\n title = publishData.title,\n contentIsFree = publishData.contentIsFree,\n fee = publishData.fee,\n uri = publishData.uri,\n tags = publishData.tags,\n locations = publishData.locations,\n optimize = publishData.optimize; // Handle scenario where we have a claim that has the same name as a channel we are publishing with.\n\n var myClaimForUriEditing = myClaimForUri && myClaimForUri.name === name ? myClaimForUri : null;\n var publishingLicense;\n\n switch (licenseType) {\n case COPYRIGHT:\n case OTHER:\n publishingLicense = otherLicenseDescription;\n break;\n\n default:\n publishingLicense = licenseType;\n } // get the claim id from the channel name, we will use that instead\n\n\n var namedChannelClaim = myChannels ? myChannels.find(function (myChannel) {\n return myChannel.name === channel;\n }) : null;\n var channelId = namedChannelClaim ? namedChannelClaim.claim_id : '';\n var publishPayload = {\n name: name,\n title: title,\n description: description,\n locations: [],\n bid: creditsToString(bid),\n languages: [language],\n tags: tags && tags.map(function (tag) {\n return tag.name;\n }),\n thumbnail_url: thumbnail,\n blocking: true\n }; // Temporary solution to keep the same publish flow with the new tags api\n // Eventually we will allow users to enter their own tags on publish\n // `nsfw` will probably be removed\n\n if (publishingLicense) {\n publishPayload.license = publishingLicense;\n }\n\n if (licenseUrl) {\n publishPayload.license_url = licenseUrl;\n }\n\n if (thumbnail) {\n publishPayload.thumbnail_url = thumbnail;\n } // Set release time to curret date. On edits, keep original release/transaction time as release_time\n\n\n if (myClaimForUriEditing && myClaimForUriEditing.value.release_time) {\n publishPayload.release_time = Number(myClaimForUri.value.release_time);\n } else if (myClaimForUriEditing && myClaimForUriEditing.timestamp) {\n publishPayload.release_time = Number(myClaimForUriEditing.timestamp);\n } else {\n publishPayload.release_time = Number(Math.round(Date.now() / 1000));\n }\n\n if (channelId) {\n publishPayload.channel_id = channelId;\n }\n\n if (myClaimForUriEditing && myClaimForUriEditing.value && myClaimForUriEditing.value.locations) {\n publishPayload.locations = myClaimForUriEditing.value.locations;\n }\n\n if (!contentIsFree && fee && fee.currency && Number(fee.amount) > 0) {\n publishPayload.fee_currency = fee.currency;\n publishPayload.fee_amount = creditsToString(fee.amount);\n }\n\n if (optimize) {\n publishPayload.optimize_file = true;\n } // Only pass file on new uploads, not metadata only edits.\n // The sdk will figure it out\n\n\n if (filePath) publishPayload.file_path = filePath;\n return lbryProxy.publish(publishPayload).then(success, fail);\n };\n}; // Calls claim_list_mine until any pending publishes are confirmed\n\n\nvar doCheckPendingPublishes = function doCheckPendingPublishes(onConfirmed) {\n return function (dispatch, getState) {\n var state = getState();\n var pendingById = selectPendingById(state);\n\n if (!Object.keys(pendingById).length) {\n return;\n }\n\n var publishCheckInterval;\n\n var checkFileList = function checkFileList() {\n lbryProxy.stream_list({\n page: 1,\n page_size: 10\n }).then(function (result) {\n var claims = result.items;\n claims.forEach(function (claim) {\n // If it's confirmed, check if it was pending previously\n if (claim.confirmations > 0 && pendingById[claim.claim_id]) {\n delete pendingById[claim.claim_id];\n\n if (onConfirmed) {\n onConfirmed(claim);\n }\n }\n });\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_COMPLETED,\n data: {\n claims: claims\n }\n });\n\n if (!Object.keys(pendingById).length) {\n clearInterval(publishCheckInterval);\n }\n });\n };\n\n publishCheckInterval = setInterval(function () {\n checkFileList();\n }, 30000);\n };\n}; // Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n\n\nfunction debouce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n} // \n\n\nfunction handleFetchResponse(response) {\n return response.status === 200 ? Promise.resolve(response.json()) : Promise.reject(new Error(response.statusText));\n}\n\nvar _extends$8 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar DEBOUNCED_SEARCH_SUGGESTION_MS = 300; // We can't use env's because they aren't passed into node_modules\n\nvar CONNECTION_STRING = 'https://lighthouse.lbry.com/';\n\nvar setSearchApi = function setSearchApi(endpoint) {\n CONNECTION_STRING = endpoint.replace(/\\/*$/, '/'); // exactly one slash at the end;\n};\n\nvar getSearchSuggestions = function getSearchSuggestions(value) {\n return function (dispatch, getState) {\n var query = value.trim(); // strip out any basic stuff for more accurate search results\n\n var searchValue = query.replace(/lbry:\\/\\//g, '').replace(/-/g, ' ');\n\n if (searchValue.includes('#')) {\n // This should probably be more robust, but I think it's fine for now\n // Remove everything after # to get rid of the claim id\n searchValue = searchValue.substring(0, searchValue.indexOf('#'));\n }\n\n var suggestions = selectSuggestions(getState());\n\n if (suggestions[searchValue]) {\n return;\n }\n\n fetch(\"\".concat(CONNECTION_STRING, \"autocomplete?s=\").concat(searchValue)).then(handleFetchResponse).then(function (apiSuggestions) {\n dispatch({\n type: UPDATE_SEARCH_SUGGESTIONS,\n data: {\n query: searchValue,\n suggestions: apiSuggestions\n }\n });\n })[\"catch\"](function () {// If the fetch fails, do nothing\n // Basic search suggestions are already populated at this point\n });\n };\n};\n\nvar throttledSearchSuggestions = debouce(function (dispatch, query) {\n dispatch(getSearchSuggestions(query));\n}, DEBOUNCED_SEARCH_SUGGESTION_MS);\n\nvar doUpdateSearchQuery = function doUpdateSearchQuery(query, shouldSkipSuggestions) {\n return function (dispatch) {\n dispatch({\n type: UPDATE_SEARCH_QUERY,\n data: {\n query: query\n }\n }); // Don't fetch new suggestions if the user just added a space\n\n if (!query.endsWith(' ') || !shouldSkipSuggestions) {\n throttledSearchSuggestions(dispatch, query);\n }\n };\n};\n\nvar doSearch = function doSearch(rawQuery, searchOptions) {\n return function (dispatch, getState) {\n var query = rawQuery.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ');\n var resolveResults = searchOptions && searchOptions.resolveResults;\n var isBackgroundSearch = searchOptions && searchOptions.isBackgroundSearch || false;\n\n if (!query) {\n dispatch({\n type: SEARCH_FAIL\n });\n return;\n }\n\n var state = getState();\n var queryWithOptions = makeSelectQueryWithOptions(query, searchOptions)(state); // If we have already searched for something, we don't need to do anything\n\n var urisForQuery = makeSelectSearchUris(queryWithOptions)(state);\n\n if (urisForQuery && !!urisForQuery.length) {\n return;\n }\n\n dispatch({\n type: SEARCH_START\n }); // If the user is on the file page with a pre-populated uri and they select\n // the search option without typing anything, searchQuery will be empty\n // We need to populate it so the input is filled on the search page\n // isBackgroundSearch means the search is happening in the background, don't update the search query\n\n if (!state.search.searchQuery && !isBackgroundSearch) {\n dispatch(doUpdateSearchQuery(query));\n }\n\n fetch(\"\".concat(CONNECTION_STRING, \"search?\").concat(queryWithOptions)).then(handleFetchResponse).then(function (data) {\n var uris = [];\n var actions = [];\n data.forEach(function (result) {\n if (result) {\n var name = result.name,\n claimId = result.claimId;\n var urlObj = {};\n\n if (name.startsWith('@')) {\n urlObj.channelName = name;\n urlObj.channelClaimId = claimId;\n } else {\n urlObj.streamName = name;\n urlObj.streamClaimId = claimId;\n }\n\n var url = buildURI(urlObj);\n\n if (resolveResults) {\n actions.push(doResolveUri(url));\n }\n\n uris.push(url);\n }\n });\n actions.push({\n type: SEARCH_SUCCESS,\n data: {\n query: queryWithOptions,\n uris: uris\n }\n });\n dispatch(batchActions.apply(void 0, actions));\n })[\"catch\"](function (e) {\n dispatch({\n type: SEARCH_FAIL\n });\n });\n };\n};\n\nvar doResolvedSearch = function doResolvedSearch(rawQuery, size, // only pass in if you don't want to use the users setting (ex: related content)\nfrom) {\n var isBackgroundSearch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var nsfw = arguments.length > 5 ? arguments[5] : undefined;\n return function (dispatch, getState) {\n var query = rawQuery.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ');\n\n if (!query) {\n dispatch({\n type: RESOLVED_SEARCH_FAIL\n });\n return;\n }\n\n var optionsWithFrom = _extends$8({}, size ? {\n size: size\n } : {}, from ? {\n from: from\n } : {}, {\n isBackgroundSearch: isBackgroundSearch\n }, options);\n\n var optionsWithoutFrom = _extends$8({}, size ? {\n size: size\n } : {}, {\n isBackgroundSearch: isBackgroundSearch\n }, options);\n\n var state = getState();\n var queryWithOptions = makeSelectQueryWithOptions(query, optionsWithFrom)(state); // make from null so that we can maintain a reference to the same query for multiple pages and simply append the found results\n\n var queryWithoutFrom = makeSelectQueryWithOptions(query, optionsWithoutFrom)(state); // If we have already searched for something, we don't need to do anything\n // TODO: Tweak this check for multiple page results\n\n /* const resultsForQuery = makeSelectResolvedSearchResults(queryWithOptions)(state);\n if (resultsForQuery && resultsForQuery.length && resultsForQuery.length > (from * size)) {\n return;\n } */\n\n dispatch({\n type: RESOLVED_SEARCH_START\n });\n\n if (!state.search.searchQuery && !isBackgroundSearch) {\n dispatch(doUpdateSearchQuery(query));\n }\n\n var fetchUrl = nsfw ? \"\".concat(CONNECTION_STRING, \"search?resolve=true&\").concat(queryWithOptions) : \"\".concat(CONNECTION_STRING, \"search?resolve=true&nsfw=false&\").concat(queryWithOptions);\n fetch(fetchUrl).then(handleFetchResponse).then(function (data) {\n var results = [];\n data.forEach(function (result) {\n if (result) {\n results.push(result);\n }\n });\n dispatch({\n type: RESOLVED_SEARCH_SUCCESS,\n data: {\n query: queryWithoutFrom,\n results: results,\n pageSize: size,\n append: parseInt(from, 10) > parseInt(size, 10) - 1\n }\n });\n })[\"catch\"](function (e) {\n dispatch({\n type: RESOLVED_SEARCH_FAIL\n });\n });\n };\n};\n\nvar doFocusSearchInput = function doFocusSearchInput() {\n return function (dispatch) {\n return dispatch({\n type: SEARCH_FOCUS\n });\n };\n};\n\nvar doBlurSearchInput = function doBlurSearchInput() {\n return function (dispatch) {\n return dispatch({\n type: SEARCH_BLUR\n });\n };\n};\n\nvar doUpdateSearchOptions = function doUpdateSearchOptions(newOptions, additionalOptions) {\n return function (dispatch, getState) {\n var state = getState();\n var searchValue = selectSearchValue(state);\n dispatch({\n type: UPDATE_SEARCH_OPTIONS,\n data: newOptions\n });\n\n if (searchValue) {\n // After updating, perform a search with the new options\n dispatch(doSearch(searchValue, additionalOptions));\n }\n };\n}; // \n\n\nfunction savePosition(claimId, outpoint, position) {\n return function (dispatch) {\n dispatch({\n type: SET_CONTENT_POSITION,\n data: {\n claimId: claimId,\n outpoint: outpoint,\n position: position\n }\n });\n };\n} // \n\n\nvar doToggleTagFollow = function doToggleTagFollow(name) {\n return {\n type: TOGGLE_TAG_FOLLOW,\n data: {\n name: name\n }\n };\n};\n\nvar doAddTag = function doAddTag(name) {\n return {\n type: TAG_ADD,\n data: {\n name: name\n }\n };\n};\n\nvar doDeleteTag = function doDeleteTag(name) {\n return {\n type: TAG_DELETE,\n data: {\n name: name\n }\n };\n}; // \n\n\nfunction doCommentList(uri) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var pageSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 99999;\n return function (dispatch, getState) {\n var state = getState();\n var claim = selectClaimsByUri(state)[uri];\n var claimId = claim ? claim.claim_id : null;\n dispatch({\n type: COMMENT_LIST_STARTED\n });\n lbryProxy.comment_list({\n claim_id: claimId,\n page: page,\n page_size: pageSize\n }).then(function (result) {\n var comments = result.items;\n dispatch({\n type: COMMENT_LIST_COMPLETED,\n data: {\n comments: comments,\n claimId: claimId,\n uri: uri\n }\n });\n })[\"catch\"](function (error) {\n console.log(error);\n dispatch({\n type: COMMENT_LIST_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doCommentCreate() {\n var comment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var claim_id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var channel = arguments.length > 2 ? arguments[2] : undefined;\n var parent_id = arguments.length > 3 ? arguments[3] : undefined;\n return function (dispatch, getState) {\n var state = getState();\n dispatch({\n type: COMMENT_CREATE_STARTED\n });\n var myChannels = selectMyChannelClaims(state);\n var namedChannelClaim = myChannels && myChannels.find(function (myChannel) {\n return myChannel.name === channel;\n });\n var channel_id = namedChannelClaim.claim_id;\n\n if (channel_id == null) {\n dispatch({\n type: COMMENT_CREATE_FAILED,\n data: {}\n });\n dispatch(doToast({\n message: 'Channel cannot be anonymous, please select a channel and try again.',\n isError: true\n }));\n return;\n }\n\n return lbryProxy.comment_create({\n comment: comment,\n claim_id: claim_id,\n channel_id: channel_id,\n parent_id: parent_id\n }).then(function (result) {\n dispatch({\n type: COMMENT_CREATE_COMPLETED,\n data: {\n comment: result,\n claimId: claim_id\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_CREATE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to create comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentHide(comment_id) {\n return function (dispatch) {\n dispatch({\n type: COMMENT_HIDE_STARTED\n });\n return lbryProxy.comment_hide({\n comment_ids: [comment_id]\n }).then(function (result) {\n dispatch({\n type: COMMENT_HIDE_COMPLETED,\n data: result\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_HIDE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to hide this comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentAbandon(comment_id) {\n return function (dispatch) {\n dispatch({\n type: COMMENT_ABANDON_STARTED\n });\n return lbryProxy.comment_abandon({\n comment_id: comment_id\n }).then(function (result) {\n // Comment may not be deleted if the signing channel can't be signed.\n // This will happen if the channel was recently created or abandoned.\n if (result.abandoned) {\n dispatch({\n type: COMMENT_ABANDON_COMPLETED,\n data: {\n comment_id: comment_id\n }\n });\n } else {\n dispatch({\n type: COMMENT_ABANDON_FAILED\n });\n dispatch(doToast({\n message: 'Your channel is still being setup, try again in a few moments.',\n isError: true\n }));\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_ABANDON_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to delete this comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentUpdate(comment_id, comment) {\n // if they provided an empty string, they must have wanted to abandon\n if (comment === '') {\n return doCommentAbandon(comment_id);\n } else {\n return function (dispatch) {\n dispatch({\n type: COMMENT_UPDATE_STARTED\n });\n return lbryProxy.comment_update({\n comment_id: comment_id,\n comment: comment\n }).then(function (result) {\n if (result != null) {\n dispatch({\n type: COMMENT_UPDATE_COMPLETED,\n data: {\n comment: result\n }\n });\n } else {\n // the result will return null\n dispatch({\n type: COMMENT_UPDATE_FAILED\n });\n dispatch(doToast({\n message: 'Your channel is still being setup, try again in a few moments.',\n isError: true\n }));\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_UPDATE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to edit this comment, please try again later.',\n isError: true\n }));\n });\n };\n }\n} // \n\n\nvar doToggleBlockChannel = function doToggleBlockChannel(uri) {\n return {\n type: TOGGLE_BLOCK_CHANNEL,\n data: {\n uri: uri\n }\n };\n};\n\nvar _extends$9 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers = {};\nvar defaultState = {\n byId: {},\n claimsByUri: {},\n paginatedClaimsByChannel: {},\n channelClaimCounts: {},\n fetchingChannelClaims: {},\n resolvingUris: [],\n // This should not be a Set\n // Storing sets in reducers can cause issues\n myChannelClaims: undefined,\n myClaims: undefined,\n fetchingMyChannels: false,\n abandoningById: {},\n pendingById: {},\n claimSearchError: false,\n claimSearchByQuery: {},\n claimSearchByQueryLastPageReached: {},\n fetchingClaimSearchByQuery: {},\n updateChannelError: '',\n updatingChannel: false,\n creatingChannel: false,\n createChannelError: undefined,\n pendingChannelImport: false,\n repostLoading: false,\n repostError: undefined\n};\n\nfunction handleClaimAction(state, action) {\n var resolveInfo = action.data.resolveInfo;\n var byUri = Object.assign({}, state.claimsByUri);\n var byId = Object.assign({}, state.byId);\n var channelClaimCounts = Object.assign({}, state.channelClaimCounts);\n var newResolvingUrls = new Set(state.resolvingUris);\n Object.entries(resolveInfo).forEach(function (_ref12) {\n var _ref13 = _slicedToArray(_ref12, 2),\n url = _ref13[0],\n resolveResponse = _ref13[1]; // $FlowFixMe\n\n\n var claimsInChannel = resolveResponse.claimsInChannel,\n stream = resolveResponse.stream,\n channel = resolveResponse.channel;\n\n if (claimsInChannel) {\n channelClaimCounts[url] = claimsInChannel;\n channelClaimCounts[channel.canonical_url] = claimsInChannel;\n }\n\n if (stream) {\n byId[stream.claim_id] = stream;\n byUri[url] = stream.claim_id; // If url isn't a canonical_url, make sure that is added too\n\n byUri[stream.canonical_url] = stream.claim_id; // Also add the permanent_url here until lighthouse returns canonical_url for search results\n\n byUri[stream.permanent_url] = stream.claim_id;\n newResolvingUrls[\"delete\"](stream.canonical_url);\n newResolvingUrls[\"delete\"](stream.permanent_url);\n }\n\n if (channel) {\n if (!stream) {\n byUri[url] = channel.claim_id;\n }\n\n byId[channel.claim_id] = channel; // Also add the permanent_url here until lighthouse returns canonical_url for search results\n\n byUri[channel.permanent_url] = channel.claim_id;\n byUri[channel.canonical_url] = channel.claim_id;\n newResolvingUrls[\"delete\"](channel.canonical_url);\n newResolvingUrls[\"delete\"](channel.permanent_url);\n }\n\n newResolvingUrls[\"delete\"](url);\n\n if (!stream && !channel) {\n byUri[url] = null;\n }\n });\n return Object.assign({}, state, {\n byId: byId,\n claimsByUri: byUri,\n channelClaimCounts: channelClaimCounts,\n resolvingUris: Array.from(newResolvingUrls)\n });\n}\n\nreducers[RESOLVE_URIS_STARTED] = function (state, action) {\n var uris = action.data.uris;\n var oldResolving = state.resolvingUris || [];\n var newResolving = oldResolving.slice();\n uris.forEach(function (uri) {\n if (!newResolving.includes(uri)) {\n newResolving.push(uri);\n }\n });\n return Object.assign({}, state, {\n resolvingUris: newResolving\n });\n};\n\nreducers[RESOLVE_URIS_COMPLETED] = function (state, action) {\n return _extends$9({}, handleClaimAction(state, action));\n};\n\nreducers[FETCH_CLAIM_LIST_MINE_STARTED] = function (state) {\n return Object.assign({}, state, {\n isFetchingClaimListMine: true\n });\n};\n\nreducers[FETCH_CLAIM_LIST_MINE_COMPLETED] = function (state, action) {\n var claims = action.data.claims;\n var byId = Object.assign({}, state.byId);\n var byUri = Object.assign({}, state.claimsByUri);\n var pendingById = Object.assign({}, state.pendingById);\n var myClaimIds = new Set(state.myClaims);\n claims.forEach(function (claim) {\n var uri = buildURI({\n streamName: claim.name,\n streamClaimId: claim.claim_id\n });\n var claimId = claim.claim_id;\n\n if (claim.type && claim.type.match(/claim|update/)) {\n if (claim.confirmations < 1) {\n pendingById[claimId] = claim;\n delete byId[claimId];\n delete byUri[claimId];\n } else {\n byId[claimId] = claim;\n byUri[uri] = claimId;\n }\n\n myClaimIds.add(claimId);\n\n if (pendingById[claimId] && claim.confirmations > 0) {\n delete pendingById[claimId];\n }\n }\n }); // Remove old pending publishes\n\n Object.values(pendingById) // $FlowFixMe\n .filter(function (pendingClaim) {\n return byId[pendingClaim.claim_id];\n }).forEach(function (pendingClaim) {\n // $FlowFixMe\n delete pendingById[pendingClaim.claim_id];\n });\n return Object.assign({}, state, {\n isFetchingClaimListMine: false,\n myClaims: myClaimIds,\n byId: byId,\n claimsByUri: byUri,\n pendingById: pendingById\n });\n};\n\nreducers[FETCH_CHANNEL_LIST_STARTED] = function (state) {\n return Object.assign({}, state, {\n fetchingMyChannels: true\n });\n};\n\nreducers[FETCH_CHANNEL_LIST_COMPLETED] = function (state, action) {\n var claims = action.data.claims;\n var myClaims = state.myClaims || [];\n var myClaimIds = new Set(state.myClaims);\n var pendingById = Object.assign(state.pendingById);\n var myChannelClaims;\n var byId = Object.assign({}, state.byId);\n var byUri = Object.assign({}, state.claimsByUri);\n var channelClaimCounts = Object.assign({}, state.channelClaimCounts);\n\n if (!claims.length) {\n // $FlowFixMe\n myChannelClaims = null;\n } else {\n myChannelClaims = new Set(state.myChannelClaims);\n claims.forEach(function (claim) {\n var claimsInChannel = claim.meta.claims_in_channel;\n var canonicalUrl = claim.canonical_url,\n permanentUrl = claim.permanent_url,\n claimId = claim.claim_id;\n byUri[canonicalUrl] = claimId;\n byUri[permanentUrl] = claimId;\n channelClaimCounts[canonicalUrl] = claimsInChannel;\n channelClaimCounts[permanentUrl] = claimsInChannel; // $FlowFixMe\n\n myChannelClaims.add(claimId);\n\n if (!byId[claimId]) {\n byId[claimId] = claim;\n }\n\n myClaimIds.add(claimId);\n\n if (pendingById[claimId] && claim.confirmations > 0) {\n delete pendingById[claimId];\n }\n\n if (pendingById[claimId] && claim.confirmations > 0) {\n delete pendingById[claimId];\n }\n });\n }\n\n return Object.assign({}, state, {\n byId: byId,\n claimsByUri: byUri,\n channelClaimCounts: channelClaimCounts,\n fetchingMyChannels: false,\n myChannelClaims: myChannelClaims,\n myClaims: myClaimIds\n });\n};\n\nreducers[FETCH_CHANNEL_CLAIMS_STARTED] = function (state, action) {\n var _action$data = action.data,\n uri = _action$data.uri,\n page = _action$data.page;\n var fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims);\n fetchingChannelClaims[uri] = page;\n return Object.assign({}, state, {\n fetchingChannelClaims: fetchingChannelClaims,\n currentChannelPage: page\n });\n};\n\nreducers[FETCH_CHANNEL_CLAIMS_COMPLETED] = function (state, action) {\n var _action$data2 = action.data,\n uri = _action$data2.uri,\n claims = _action$data2.claims,\n claimsInChannel = _action$data2.claimsInChannel,\n page = _action$data2.page,\n totalPages = _action$data2.totalPages; // byChannel keeps claim_search relevant results by page. If the total changes, erase it.\n\n var channelClaimCounts = Object.assign({}, state.channelClaimCounts);\n var paginatedClaimsByChannel = Object.assign({}, state.paginatedClaimsByChannel); // check if count has changed - that means cached pagination will be wrong, so clear it\n\n var previousCount = paginatedClaimsByChannel[uri] && paginatedClaimsByChannel[uri]['itemCount'];\n var byChannel = claimsInChannel === previousCount ? Object.assign({}, paginatedClaimsByChannel[uri]) : {};\n var allClaimIds = new Set(byChannel.all);\n var currentPageClaimIds = [];\n var byId = Object.assign({}, state.byId);\n var fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims);\n var claimsByUri = Object.assign({}, state.claimsByUri);\n\n if (claims !== undefined) {\n claims.forEach(function (claim) {\n allClaimIds.add(claim.claim_id);\n currentPageClaimIds.push(claim.claim_id);\n byId[claim.claim_id] = claim;\n claimsByUri[claim.canonical_url] = claim.claim_id;\n });\n }\n\n byChannel.all = allClaimIds;\n byChannel.pageCount = totalPages;\n byChannel.itemCount = claimsInChannel;\n byChannel[page] = currentPageClaimIds;\n paginatedClaimsByChannel[uri] = byChannel;\n delete fetchingChannelClaims[uri];\n return Object.assign({}, state, {\n paginatedClaimsByChannel: paginatedClaimsByChannel,\n byId: byId,\n fetchingChannelClaims: fetchingChannelClaims,\n claimsByUri: claimsByUri,\n channelClaimCounts: channelClaimCounts,\n currentChannelPage: page\n });\n};\n\nreducers[ABANDON_CLAIM_STARTED] = function (state, action) {\n var claimId = action.data.claimId;\n var abandoningById = Object.assign({}, state.abandoningById);\n abandoningById[claimId] = true;\n return Object.assign({}, state, {\n abandoningById: abandoningById\n });\n};\n\nreducers[ABANDON_CLAIM_SUCCEEDED] = function (state, action) {\n var claimId = action.data.claimId;\n var byId = Object.assign({}, state.byId);\n var newMyClaims = state.myClaims ? state.myClaims.slice() : [];\n var claimsByUri = Object.assign({}, state.claimsByUri);\n Object.keys(claimsByUri).forEach(function (uri) {\n if (claimsByUri[uri] === claimId) {\n delete claimsByUri[uri];\n }\n });\n var myClaims = newMyClaims.filter(function (i) {\n return i.claim_id && i.claim_id !== claimId;\n });\n delete byId[claimId];\n return Object.assign({}, state, {\n myClaims: myClaims,\n byId: byId,\n claimsByUri: claimsByUri\n });\n};\n\nreducers[CREATE_CHANNEL_STARTED] = function (state) {\n return _extends$9({}, state, {\n creatingChannel: true,\n createChannelError: null\n });\n};\n\nreducers[CREATE_CHANNEL_COMPLETED] = function (state, action) {\n var channelClaim = action.data.channelClaim;\n var byId = Object.assign({}, state.byId);\n var pendingById = Object.assign({}, state.pendingById);\n var myChannelClaims = new Set(state.myChannelClaims);\n byId[channelClaim.claim_id] = channelClaim;\n pendingById[channelClaim.claim_id] = channelClaim;\n myChannelClaims.add(channelClaim.claim_id);\n return Object.assign({}, state, {\n byId: byId,\n pendingById: pendingById,\n myChannelClaims: myChannelClaims,\n creatingChannel: false\n });\n};\n\nreducers[CREATE_CHANNEL_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n creatingChannel: false,\n createChannelError: action.data\n });\n};\n\nreducers[UPDATE_CHANNEL_STARTED] = function (state, action) {\n return Object.assign({}, state, {\n updateChannelError: '',\n updatingChannel: true\n });\n};\n\nreducers[UPDATE_CHANNEL_COMPLETED] = function (state, action) {\n var channelClaim = action.data.channelClaim;\n var byId = Object.assign({}, state.byId);\n byId[channelClaim.claim_id] = channelClaim;\n return Object.assign({}, state, {\n byId: byId,\n updateChannelError: '',\n updatingChannel: false\n });\n};\n\nreducers[UPDATE_CHANNEL_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n updateChannelError: action.data.message,\n updatingChannel: false\n });\n};\n\nreducers[IMPORT_CHANNEL_STARTED] = function (state) {\n return Object.assign({}, state, {\n pendingChannelImports: true\n });\n};\n\nreducers[IMPORT_CHANNEL_COMPLETED] = function (state) {\n return Object.assign({}, state, {\n pendingChannelImports: false\n });\n};\n\nreducers[CLAIM_SEARCH_STARTED] = function (state, action) {\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n fetchingClaimSearchByQuery[action.data.query] = true;\n return Object.assign({}, state, {\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery\n });\n};\n\nreducers[CLAIM_SEARCH_COMPLETED] = function (state, action) {\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n var claimSearchByQuery = Object.assign({}, state.claimSearchByQuery);\n var claimSearchByQueryLastPageReached = Object.assign({}, state.claimSearchByQueryLastPageReached);\n var _action$data3 = action.data,\n append = _action$data3.append,\n query = _action$data3.query,\n urls = _action$data3.urls,\n pageSize = _action$data3.pageSize;\n\n if (append) {\n // todo: check for duplicate urls when concatenating?\n claimSearchByQuery[query] = claimSearchByQuery[query] && claimSearchByQuery[query].length ? claimSearchByQuery[query].concat(urls) : urls;\n } else {\n claimSearchByQuery[query] = urls;\n } // the returned number of urls is less than the page size, so we're on the last page\n\n\n claimSearchByQueryLastPageReached[query] = urls.length < pageSize;\n delete fetchingClaimSearchByQuery[query];\n return Object.assign({}, state, _extends$9({}, handleClaimAction(state, action), {\n claimSearchByQuery: claimSearchByQuery,\n claimSearchByQueryLastPageReached: claimSearchByQueryLastPageReached,\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery\n }));\n};\n\nreducers[CLAIM_SEARCH_FAILED] = function (state, action) {\n var query = action.data.query;\n var claimSearchByQuery = Object.assign({}, state.claimSearchByQuery);\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n delete fetchingClaimSearchByQuery[query];\n claimSearchByQuery[query] = null;\n return Object.assign({}, state, {\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery,\n claimSearchByQuery: claimSearchByQuery\n });\n};\n\nreducers[CLAIM_REPOST_STARTED] = function (state) {\n return _extends$9({}, state, {\n repostLoading: true,\n repostError: null\n });\n};\n\nreducers[CLAIM_REPOST_COMPLETED] = function (state, action) {\n var _action$data4 = action.data,\n originalClaimId = _action$data4.originalClaimId,\n repostClaim = _action$data4.repostClaim;\n\n var byId = _extends$9({}, state.byId);\n\n var claimsByUri = _extends$9({}, state.claimsByUri);\n\n var claimThatWasReposted = byId[originalClaimId];\n\n var repostStub = _extends$9({}, repostClaim, {\n reposted_claim: claimThatWasReposted\n });\n\n byId[repostStub.claim_id] = repostStub;\n claimsByUri[repostStub.permanent_url] = repostStub.claim_id;\n return _extends$9({}, state, {\n byId: byId,\n claimsByUri: claimsByUri,\n repostLoading: false,\n repostError: null\n });\n};\n\nreducers[CLAIM_REPOST_FAILED] = function (state, action) {\n var error = action.data.error;\n return _extends$9({}, state, {\n repostLoading: false,\n repostError: error\n });\n};\n\nreducers[CLEAR_REPOST_ERROR] = function (state) {\n return _extends$9({}, state, {\n repostError: null\n });\n};\n\nfunction claimsReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n} // util for creating reducers\n// based off of redux-actions\n// https://redux-actions.js.org/docs/api/handleAction.html#handleactions\n// eslint-disable-next-line import/prefer-default-export\n\n\nvar handleActions = function handleActions(actionMap, defaultState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = actionMap[action.type];\n\n if (handler) {\n var newState = handler(state, action);\n return Object.assign({}, state, newState);\n } // just return the original state if no handler\n // returning a copy here breaks redux-persist\n\n\n return state;\n };\n};\n\nvar _extends$a = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$1 = {\n commentById: {},\n // commentId -> Comment\n byId: {},\n // ClaimID -> list of comments\n commentsByUri: {},\n // URI -> claimId\n isLoading: false,\n myComments: undefined\n};\nvar commentReducer = handleActions((_handleActions = {}, _defineProperty(_handleActions, COMMENT_CREATE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_CREATE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_CREATE_COMPLETED, function (state, action) {\n var _action$data5 = action.data,\n comment = _action$data5.comment,\n claimId = _action$data5.claimId;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId);\n var comments = byId[claimId];\n var newCommentIds = comments.slice(); // add the comment by its ID\n\n commentById[comment.comment_id] = comment; // push the comment_id to the top of ID list\n\n newCommentIds.unshift(comment.comment_id);\n byId[claimId] = newCommentIds;\n return _extends$a({}, state, {\n commentById: commentById,\n byId: byId,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_STARTED, function (state) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_COMPLETED, function (state, action) {\n var _action$data6 = action.data,\n comments = _action$data6.comments,\n claimId = _action$data6.claimId,\n uri = _action$data6.uri;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId);\n var commentsByUri = Object.assign({}, state.commentsByUri);\n\n if (comments) {\n // we use an Array to preserve order of listing\n // in reality this doesn't matter and we can just\n // sort comments by their timestamp\n var commentIds = Array(comments.length); // map the comment_ids to the new comments\n\n for (var i = 0; i < comments.length; i++) {\n commentIds[i] = comments[i].comment_id;\n commentById[commentIds[i]] = comments[i];\n }\n\n byId[claimId] = commentIds;\n commentsByUri[uri] = claimId;\n }\n\n return _extends$a({}, state, {\n byId: byId,\n commentById: commentById,\n commentsByUri: commentsByUri,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_COMPLETED, function (state, action) {\n var comment_id = action.data.comment_id;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId); // to remove the comment and its references\n\n var claimId = commentById[comment_id].claim_id;\n\n for (var i = 0; i < byId[claimId].length; i++) {\n if (byId[claimId][i] === comment_id) {\n byId[claimId].splice(i, 1);\n break;\n }\n }\n\n delete commentById[comment_id];\n return _extends$a({}, state, {\n commentById: commentById,\n byId: byId,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_COMPLETED, function (state, action) {\n var comment = action.data.comment;\n var commentById = Object.assign({}, state.commentById);\n commentById[comment.comment_id] = comment;\n return _extends$a({}, state, {\n commentById: commentById,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_COMPLETED, function (state, action) {\n return _extends$a({}, state, {\n // todo: add HiddenComments state & create selectors\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _handleActions), defaultState$1);\n\nvar _extends$b = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers$1 = {};\nvar defaultState$2 = {\n positions: {}\n};\n\nreducers$1[SET_CONTENT_POSITION] = function (state, action) {\n var _action$data7 = action.data,\n claimId = _action$data7.claimId,\n outpoint = _action$data7.outpoint,\n position = _action$data7.position;\n return _extends$b({}, state, {\n positions: _extends$b({}, state.positions, _defineProperty({}, claimId, _extends$b({}, state.positions[claimId], _defineProperty({}, outpoint, position))))\n });\n};\n\nfunction contentReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$2;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$1[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$2 = {};\nvar defaultState$3 = {\n fileListPublishedSort: DATE_NEW,\n fileListDownloadedSort: DATE_NEW\n};\n\nreducers$2[FILE_LIST_STARTED] = function (state) {\n return Object.assign({}, state, {\n isFetchingFileList: true\n });\n};\n\nreducers$2[FILE_LIST_SUCCEEDED] = function (state, action) {\n var fileInfos = action.data.fileInfos;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var pendingByOutpoint = Object.assign({}, state.pendingByOutpoint);\n fileInfos.forEach(function (fileInfo) {\n var outpoint = fileInfo.outpoint;\n if (outpoint) newByOutpoint[fileInfo.outpoint] = fileInfo;\n });\n return Object.assign({}, state, {\n isFetchingFileList: false,\n byOutpoint: newByOutpoint,\n pendingByOutpoint: pendingByOutpoint\n });\n};\n\nreducers$2[FETCH_FILE_INFO_STARTED] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newFetching = Object.assign({}, state.fetching);\n newFetching[outpoint] = true;\n return Object.assign({}, state, {\n fetching: newFetching\n });\n};\n\nreducers$2[FETCH_FILE_INFO_COMPLETED] = function (state, action) {\n var _action$data8 = action.data,\n fileInfo = _action$data8.fileInfo,\n outpoint = _action$data8.outpoint;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newFetching = Object.assign({}, state.fetching);\n newByOutpoint[outpoint] = fileInfo;\n delete newFetching[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n fetching: newFetching\n });\n};\n\nreducers$2[FETCH_FILE_INFO_FAILED] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newFetching = Object.assign({}, state.fetching);\n delete newFetching[outpoint];\n return Object.assign({}, state, {\n fetching: newFetching\n });\n};\n\nreducers$2[DOWNLOADING_STARTED] = function (state, action) {\n var _action$data9 = action.data,\n uri = _action$data9.uri,\n outpoint = _action$data9.outpoint,\n fileInfo = _action$data9.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newDownloading[outpoint] = true;\n newByOutpoint[outpoint] = fileInfo;\n return Object.assign({}, state, {\n downloadingByOutpoint: newDownloading,\n byOutpoint: newByOutpoint\n });\n};\n\nreducers$2[DOWNLOADING_PROGRESSED] = function (state, action) {\n var _action$data10 = action.data,\n outpoint = _action$data10.outpoint,\n fileInfo = _action$data10.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newByOutpoint[outpoint] = fileInfo;\n newDownloading[outpoint] = true;\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[DOWNLOADING_CANCELED] = function (state, action) {\n var _action$data11 = action.data,\n uri = _action$data11.uri,\n outpoint = _action$data11.outpoint;\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n delete newDownloading[outpoint];\n return Object.assign({}, state, {\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[DOWNLOADING_COMPLETED] = function (state, action) {\n var _action$data12 = action.data,\n outpoint = _action$data12.outpoint,\n fileInfo = _action$data12.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newByOutpoint[outpoint] = fileInfo;\n delete newDownloading[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[FILE_DELETE] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var downloadingByOutpoint = Object.assign({}, state.downloadingByOutpoint);\n delete newByOutpoint[outpoint];\n delete downloadingByOutpoint[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: downloadingByOutpoint\n });\n};\n\nreducers$2[SET_FILE_LIST_SORT] = function (state, action) {\n var _pageSortStates;\n\n var pageSortStates = (_pageSortStates = {}, _defineProperty(_pageSortStates, PUBLISHED, 'fileListPublishedSort'), _defineProperty(_pageSortStates, DOWNLOADED, 'fileListDownloadedSort'), _pageSortStates);\n var pageSortState = pageSortStates[action.data.page];\n var value = action.data.value;\n return Object.assign({}, state, _defineProperty({}, pageSortState, value));\n};\n\nfunction fileInfoReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$3;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$2[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar _extends$c = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers$3 = {};\nvar defaultState$4 = {\n failedPurchaseUris: [],\n purchasedUris: [],\n purchaseUriErrorMessage: ''\n};\n\nreducers$3[PURCHASE_URI_STARTED] = function (state, action) {\n var uri = action.data.uri;\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.splice(newFailedPurchaseUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchaseUriErrorMessage: ''\n });\n};\n\nreducers$3[PURCHASE_URI_COMPLETED] = function (state, action) {\n var uri = action.data.uri;\n var newPurchasedUris = state.purchasedUris.slice();\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (!newPurchasedUris.includes(uri)) {\n newPurchasedUris.push(uri);\n }\n\n if (newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.splice(newFailedPurchaseUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchasedUris: newPurchasedUris,\n purchaseUriErrorMessage: ''\n });\n};\n\nreducers$3[PURCHASE_URI_FAILED] = function (state, action) {\n var _action$data13 = action.data,\n uri = _action$data13.uri,\n error = _action$data13.error;\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (!newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.push(uri);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchaseUriErrorMessage: error\n });\n};\n\nreducers$3[DELETE_PURCHASED_URI] = function (state, action) {\n var uri = action.data.uri;\n var newPurchasedUris = state.purchasedUris.slice();\n\n if (newPurchasedUris.includes(uri)) {\n newPurchasedUris.splice(newPurchasedUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n purchasedUris: newPurchasedUris\n });\n};\n\nfunction fileReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$4;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$3[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar _extends$d = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$5 = {\n notifications: [],\n toasts: [],\n errors: []\n};\nvar notificationsReducer = handleActions((_handleActions2 = {}, _defineProperty(_handleActions2, CREATE_TOAST, function (state, action) {\n var toast = action.data;\n var newToasts = state.toasts.slice();\n newToasts.push(toast);\n return _extends$d({}, state, {\n toasts: newToasts\n });\n}), _defineProperty(_handleActions2, DISMISS_TOAST, function (state) {\n var newToasts = state.toasts.slice();\n newToasts.shift();\n return _extends$d({}, state, {\n toasts: newToasts\n });\n}), _defineProperty(_handleActions2, CREATE_NOTIFICATION, function (state, action) {\n var notification = action.data;\n var newNotifications = state.notifications.slice();\n newNotifications.push(notification);\n return _extends$d({}, state, {\n notifications: newNotifications\n });\n}), _defineProperty(_handleActions2, EDIT_NOTIFICATION, function (state, action) {\n var notification = action.data.notification;\n var notifications = state.notifications.slice();\n notifications = notifications.map(function (pastNotification) {\n return pastNotification.id === notification.id ? notification : pastNotification;\n });\n return _extends$d({}, state, {\n notifications: notifications\n });\n}), _defineProperty(_handleActions2, DELETE_NOTIFICATION, function (state, action) {\n var id = action.data.id;\n var newNotifications = state.notifications.slice();\n newNotifications = newNotifications.filter(function (notification) {\n return notification.id !== id;\n });\n return _extends$d({}, state, {\n notifications: newNotifications\n });\n}), _defineProperty(_handleActions2, CREATE_ERROR, function (state, action) {\n var error = action.data;\n var newErrors = state.errors.slice();\n newErrors.push(error);\n return _extends$d({}, state, {\n errors: newErrors\n });\n}), _defineProperty(_handleActions2, DISMISS_ERROR, function (state) {\n var newErrors = state.errors.slice();\n newErrors.shift();\n return _extends$d({}, state, {\n errors: newErrors\n });\n}), _handleActions2), defaultState$5);\n\nvar _extends$e = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$3(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar defaultState$6 = {\n editingURI: undefined,\n filePath: undefined,\n fileDur: 0,\n fileSize: 0,\n fileVid: false,\n contentIsFree: true,\n fee: {\n amount: 1,\n currency: 'LBC'\n },\n title: '',\n thumbnail_url: '',\n thumbnailPath: '',\n uploadThumbnailStatus: API_DOWN,\n description: '',\n language: '',\n nsfw: false,\n channel: CHANNEL_ANONYMOUS,\n channelId: '',\n name: '',\n nameError: undefined,\n bid: 0.1,\n bidError: undefined,\n licenseType: 'None',\n otherLicenseDescription: 'All rights reserved',\n licenseUrl: '',\n tags: [],\n publishing: false,\n publishSuccess: false,\n publishError: undefined,\n optimize: false\n};\nvar publishReducer = handleActions((_handleActions3 = {}, _defineProperty(_handleActions3, UPDATE_PUBLISH_FORM, function (state, action) {\n var data = action.data;\n return _extends$e({}, state, data);\n}), _defineProperty(_handleActions3, CLEAR_PUBLISH, function (state) {\n return _extends$e({}, defaultState$6, {\n bid: state.bid,\n optimize: state.optimize\n });\n}), _defineProperty(_handleActions3, PUBLISH_START, function (state) {\n return _extends$e({}, state, {\n publishing: true,\n publishSuccess: false\n });\n}), _defineProperty(_handleActions3, PUBLISH_FAIL, function (state) {\n return _extends$e({}, state, {\n publishing: false\n });\n}), _defineProperty(_handleActions3, PUBLISH_SUCCESS, function (state) {\n return _extends$e({}, state, {\n publishing: false,\n publishSuccess: true\n });\n}), _defineProperty(_handleActions3, DO_PREPARE_EDIT, function (state, action) {\n var publishData = _objectWithoutProperties$3(action.data, []);\n\n var channel = publishData.channel,\n name = publishData.name,\n uri = publishData.uri; // The short uri is what is presented to the user\n // The editingUri is the full uri with claim id\n\n var shortUri = buildURI({\n channelName: channel,\n streamName: name\n });\n return _extends$e({}, defaultState$6, publishData, {\n editingURI: uri,\n uri: shortUri\n });\n}), _handleActions3), defaultState$6);\n\nvar _extends$f = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$7 = {\n isActive: false,\n // does the user have any typed text in the search input\n focused: false,\n // is the search input focused\n searchQuery: '',\n // needs to be an empty string for input focusing\n options: (_options = {}, _defineProperty(_options, SEARCH_OPTIONS.RESULT_COUNT, 30), _defineProperty(_options, SEARCH_OPTIONS.CLAIM_TYPE, SEARCH_OPTIONS.INCLUDE_FILES_AND_CHANNELS), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_AUDIO, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_VIDEO, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_TEXT, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_IMAGE, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_APPLICATION, true), _options),\n suggestions: {},\n urisByQuery: {},\n resolvedResultsByQuery: {},\n resolvedResultsByQueryLastPageReached: {}\n};\nvar searchReducer = handleActions((_handleActions4 = {}, _defineProperty(_handleActions4, SEARCH_START, function (state) {\n return _extends$f({}, state, {\n searching: true\n });\n}), _defineProperty(_handleActions4, SEARCH_SUCCESS, function (state, action) {\n var _action$data14 = action.data,\n query = _action$data14.query,\n uris = _action$data14.uris;\n return _extends$f({}, state, {\n searching: false,\n urisByQuery: Object.assign({}, state.urisByQuery, _defineProperty({}, query, uris))\n });\n}), _defineProperty(_handleActions4, SEARCH_FAIL, function (state) {\n return _extends$f({}, state, {\n searching: false\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_START, function (state) {\n return _extends$f({}, state, {\n searching: true\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_SUCCESS, function (state, action) {\n var resolvedResultsByQuery = Object.assign({}, state.resolvedResultsByQuery);\n var resolvedResultsByQueryLastPageReached = Object.assign({}, state.resolvedResultsByQueryLastPageReached);\n var _action$data15 = action.data,\n append = _action$data15.append,\n query = _action$data15.query,\n results = _action$data15.results,\n pageSize = _action$data15.pageSize;\n\n if (append) {\n // todo: check for duplicates when concatenating?\n resolvedResultsByQuery[query] = resolvedResultsByQuery[query] && resolvedResultsByQuery[query].length ? resolvedResultsByQuery[query].concat(results) : results;\n } else {\n resolvedResultsByQuery[query] = results;\n } // the returned number of urls is less than the page size, so we're on the last page\n\n\n resolvedResultsByQueryLastPageReached[query] = results.length < pageSize;\n return _extends$f({}, state, {\n searching: false,\n resolvedResultsByQuery: resolvedResultsByQuery,\n resolvedResultsByQueryLastPageReached: resolvedResultsByQueryLastPageReached\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_FAIL, function (state) {\n return _extends$f({}, state, {\n searching: false\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_QUERY, function (state, action) {\n return _extends$f({}, state, {\n searchQuery: action.data.query,\n isActive: true\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_SUGGESTIONS, function (state, action) {\n return _extends$f({}, state, {\n suggestions: _extends$f({}, state.suggestions, _defineProperty({}, action.data.query, action.data.suggestions))\n });\n}), _defineProperty(_handleActions4, DISMISS_NOTIFICATION, function (state) {\n return _extends$f({}, state, {\n isActive: false\n });\n}), _defineProperty(_handleActions4, SEARCH_FOCUS, function (state) {\n return _extends$f({}, state, {\n focused: true\n });\n}), _defineProperty(_handleActions4, SEARCH_BLUR, function (state) {\n return _extends$f({}, state, {\n focused: false\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_OPTIONS, function (state, action) {\n var oldOptions = state.options;\n var newOptions = action.data;\n\n var options = _extends$f({}, oldOptions, newOptions);\n\n return _extends$f({}, state, {\n options: options\n });\n}), _handleActions4), defaultState$7);\n\nvar _extends$g = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction getDefaultKnownTags() {\n return DEFAULT_FOLLOWED_TAGS.concat(DEFAULT_KNOWN_TAGS).reduce(function (tagsMap, tag) {\n return _extends$g({}, tagsMap, _defineProperty({}, tag, {\n name: tag\n }));\n }, {});\n}\n\nvar defaultState$8 = {\n followedTags: [],\n knownTags: getDefaultKnownTags()\n};\nvar tagsReducer = handleActions((_handleActions5 = {}, _defineProperty(_handleActions5, TOGGLE_TAG_FOLLOW, function (state, action) {\n var followedTags = state.followedTags;\n var name = action.data.name;\n var newFollowedTags = followedTags.slice();\n\n if (newFollowedTags.includes(name)) {\n newFollowedTags = newFollowedTags.filter(function (tag) {\n return tag !== name;\n });\n } else {\n newFollowedTags.push(name);\n }\n\n return _extends$g({}, state, {\n followedTags: newFollowedTags\n });\n}), _defineProperty(_handleActions5, TAG_ADD, function (state, action) {\n var knownTags = state.knownTags;\n var name = action.data.name;\n\n var newKnownTags = _extends$g({}, knownTags);\n\n newKnownTags[name] = {\n name: name\n };\n return _extends$g({}, state, {\n knownTags: newKnownTags\n });\n}), _defineProperty(_handleActions5, TAG_DELETE, function (state, action) {\n var knownTags = state.knownTags,\n followedTags = state.followedTags;\n var name = action.data.name;\n\n var newKnownTags = _extends$g({}, knownTags);\n\n delete newKnownTags[name];\n var newFollowedTags = followedTags.filter(function (tag) {\n return tag !== name;\n });\n return _extends$g({}, state, {\n knownTags: newKnownTags,\n followedTags: newFollowedTags\n });\n}), _defineProperty(_handleActions5, USER_STATE_POPULATE, function (state, action) {\n var tags = action.data.tags;\n\n if (Array.isArray(tags)) {\n return _extends$g({}, state, {\n followedTags: tags\n });\n }\n\n return _extends$g({}, state);\n}), _handleActions5), defaultState$8);\n\nvar _extends$h = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$9 = {\n blockedChannels: []\n};\nvar blockedReducer = handleActions((_handleActions6 = {}, _defineProperty(_handleActions6, TOGGLE_BLOCK_CHANNEL, function (state, action) {\n var blockedChannels = state.blockedChannels;\n var uri = action.data.uri;\n var newBlockedChannels = blockedChannels.slice();\n\n if (newBlockedChannels.includes(uri)) {\n newBlockedChannels = newBlockedChannels.filter(function (id) {\n return id !== uri;\n });\n } else {\n newBlockedChannels.push(uri);\n }\n\n return {\n blockedChannels: newBlockedChannels\n };\n}), _defineProperty(_handleActions6, USER_STATE_POPULATE, function (state, action) {\n var blocked = action.data.blocked;\n return _extends$h({}, state, {\n blockedChannels: blocked && blocked.length ? blocked : state.blockedChannels\n });\n}), _handleActions6), defaultState$9);\n\nvar _extends$i = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar buildDraftTransaction = function buildDraftTransaction() {\n return {\n amount: undefined,\n address: undefined\n };\n}; // TODO: Split into common success and failure types\n// See details in https://github.com/lbryio/lbry/issues/1307\n\n\nvar defaultState$a = {\n balance: undefined,\n totalBalance: undefined,\n reservedBalance: undefined,\n claimsBalance: undefined,\n supportsBalance: undefined,\n tipsBalance: undefined,\n latestBlock: undefined,\n transactions: {},\n fetchingTransactions: false,\n supports: {},\n fetchingSupports: false,\n abandoningSupportsByOutpoint: {},\n gettingNewAddress: false,\n draftTransaction: buildDraftTransaction(),\n sendingSupport: false,\n walletIsEncrypted: false,\n walletEncryptPending: false,\n walletEncryptSucceded: null,\n walletEncryptResult: null,\n walletDecryptPending: false,\n walletDecryptSucceded: null,\n walletDecryptResult: null,\n walletUnlockPending: false,\n walletUnlockSucceded: null,\n walletUnlockResult: null,\n walletLockPending: false,\n walletLockSucceded: null,\n walletLockResult: null,\n transactionListFilter: 'all',\n walletReconnecting: false,\n pendingSupportTransactions: {},\n abandonClaimSupportError: undefined\n};\nvar walletReducer = handleActions((_handleActions7 = {}, _defineProperty(_handleActions7, FETCH_TRANSACTIONS_STARTED, function (state) {\n return _extends$i({}, state, {\n fetchingTransactions: true\n });\n}), _defineProperty(_handleActions7, FETCH_TRANSACTIONS_COMPLETED, function (state, action) {\n var byId = _extends$i({}, state.transactions);\n\n var transactions = action.data.transactions;\n transactions.forEach(function (transaction) {\n byId[transaction.txid] = transaction;\n });\n return _extends$i({}, state, {\n transactions: byId,\n fetchingTransactions: false\n });\n}), _defineProperty(_handleActions7, FETCH_SUPPORTS_STARTED, function (state) {\n return _extends$i({}, state, {\n fetchingSupports: true\n });\n}), _defineProperty(_handleActions7, FETCH_SUPPORTS_COMPLETED, function (state, action) {\n var byOutpoint = state.supports;\n var supports = action.data.supports;\n supports.forEach(function (transaction) {\n var txid = transaction.txid,\n nout = transaction.nout;\n byOutpoint[\"\".concat(txid, \":\").concat(nout)] = transaction;\n });\n return _extends$i({}, state, {\n supports: byOutpoint,\n fetchingSupports: false\n });\n}), _defineProperty(_handleActions7, ABANDON_SUPPORT_STARTED, function (state, action) {\n var outpoint = action.data.outpoint;\n var currentlyAbandoning = state.abandoningSupportsByOutpoint;\n currentlyAbandoning[outpoint] = true;\n return _extends$i({}, state, {\n abandoningSupportsByOutpoint: currentlyAbandoning\n });\n}), _defineProperty(_handleActions7, ABANDON_SUPPORT_COMPLETED, function (state, action) {\n var outpoint = action.data.outpoint;\n var byOutpoint = state.supports;\n var currentlyAbandoning = state.abandoningSupportsByOutpoint;\n delete currentlyAbandoning[outpoint];\n delete byOutpoint[outpoint];\n return _extends$i({}, state, {\n supports: byOutpoint,\n abandoningSupportsById: currentlyAbandoning\n });\n}), _defineProperty(_handleActions7, ABANDON_CLAIM_SUPPORT_STARTED, function (state, action) {\n return _extends$i({}, state, {\n abandonClaimSupportError: undefined\n });\n}), _defineProperty(_handleActions7, ABANDON_CLAIM_SUPPORT_PREVIEW, function (state, action) {\n return _extends$i({}, state, {\n abandonClaimSupportError: undefined\n });\n}), _defineProperty(_handleActions7, ABANDON_CLAIM_SUPPORT_COMPLETED, function (state, action) {\n var _action$data16 = action.data,\n claimId = _action$data16.claimId,\n type = _action$data16.type,\n txid = _action$data16.txid,\n effective = _action$data16.effective;\n var pendingtxs = Object.assign({}, state.pendingSupportTransactions);\n pendingtxs[claimId] = {\n txid: txid,\n type: type,\n effective: effective\n };\n return _extends$i({}, state, {\n pendingSupportTransactions: pendingtxs,\n abandonClaimSupportError: undefined\n });\n}), _defineProperty(_handleActions7, ABANDON_CLAIM_SUPPORT_FAILED, function (state, action) {\n return _extends$i({}, state, {\n abandonClaimSupportError: action.data\n });\n}), _defineProperty(_handleActions7, PENDING_SUPPORTS_UPDATED, function (state, action) {\n return _extends$i({}, state, {\n pendingSupportTransactions: action.data\n });\n}), _defineProperty(_handleActions7, GET_NEW_ADDRESS_STARTED, function (state) {\n return _extends$i({}, state, {\n gettingNewAddress: true\n });\n}), _defineProperty(_handleActions7, GET_NEW_ADDRESS_COMPLETED, function (state, action) {\n var address = action.data.address;\n return _extends$i({}, state, {\n gettingNewAddress: false,\n receiveAddress: address\n });\n}), _defineProperty(_handleActions7, UPDATE_BALANCE, function (state, action) {\n return _extends$i({}, state, {\n totalBalance: action.data.totalBalance,\n balance: action.data.balance,\n reservedBalance: action.data.reservedBalance,\n claimsBalance: action.data.claimsBalance,\n supportsBalance: action.data.supportsBalance,\n tipsBalance: action.data.tipsBalance\n });\n}), _defineProperty(_handleActions7, CHECK_ADDRESS_IS_MINE_STARTED, function (state) {\n return _extends$i({}, state, {\n checkingAddressOwnership: true\n });\n}), _defineProperty(_handleActions7, CHECK_ADDRESS_IS_MINE_COMPLETED, function (state) {\n return _extends$i({}, state, {\n checkingAddressOwnership: false\n });\n}), _defineProperty(_handleActions7, SET_DRAFT_TRANSACTION_AMOUNT, function (state, action) {\n var oldDraft = state.draftTransaction;\n\n var newDraft = _extends$i({}, oldDraft, {\n amount: parseFloat(action.data.amount)\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraft\n });\n}), _defineProperty(_handleActions7, SET_DRAFT_TRANSACTION_ADDRESS, function (state, action) {\n var oldDraft = state.draftTransaction;\n\n var newDraft = _extends$i({}, oldDraft, {\n address: action.data.address\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraft\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_STARTED, function (state) {\n var newDraftTransaction = _extends$i({}, state.draftTransaction, {\n sending: true\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraftTransaction\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_COMPLETED, function (state) {\n return Object.assign({}, state, {\n draftTransaction: buildDraftTransaction()\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_FAILED, function (state, action) {\n var newDraftTransaction = Object.assign({}, state.draftTransaction, {\n sending: false,\n error: action.data.error\n });\n return _extends$i({}, state, {\n draftTransaction: newDraftTransaction\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_STARTED, function (state) {\n return _extends$i({}, state, {\n sendingSupport: true\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_COMPLETED, function (state) {\n return _extends$i({}, state, {\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_FAILED, function (state, action) {\n return _extends$i({}, state, {\n error: action.data.error,\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, CLEAR_SUPPORT_TRANSACTION, function (state) {\n return _extends$i({}, state, {\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, WALLET_STATUS_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletIsEncrypted: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_START, function (state) {\n return _extends$i({}, state, {\n walletEncryptPending: true,\n walletEncryptSucceded: null,\n walletEncryptResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletEncryptPending: false,\n walletEncryptSucceded: true,\n walletEncryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletEncryptPending: false,\n walletEncryptSucceded: false,\n walletEncryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_START, function (state) {\n return _extends$i({}, state, {\n walletDecryptPending: true,\n walletDecryptSucceded: null,\n walletDecryptResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletDecryptPending: false,\n walletDecryptSucceded: true,\n walletDecryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletDecryptPending: false,\n walletDecryptSucceded: false,\n walletDecryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_START, function (state) {\n return _extends$i({}, state, {\n walletUnlockPending: true,\n walletUnlockSucceded: null,\n walletUnlockResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletUnlockPending: false,\n walletUnlockSucceded: true,\n walletUnlockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletUnlockPending: false,\n walletUnlockSucceded: false,\n walletUnlockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_START, function (state) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: null,\n walletLockResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: true,\n walletLockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: false,\n walletLockResult: action.result\n });\n}), _defineProperty(_handleActions7, SET_TRANSACTION_LIST_FILTER, function (state, action) {\n return _extends$i({}, state, {\n transactionListFilter: action.data\n });\n}), _defineProperty(_handleActions7, UPDATE_CURRENT_HEIGHT, function (state, action) {\n return _extends$i({}, state, {\n latestBlock: action.data\n });\n}), _defineProperty(_handleActions7, WALLET_RESTART, function (state) {\n return _extends$i({}, state, {\n walletReconnecting: true\n });\n}), _defineProperty(_handleActions7, WALLET_RESTART_COMPLETED, function (state) {\n return _extends$i({}, state, {\n walletReconnecting: false\n });\n}), _handleActions7), defaultState$a); // \n\nvar selectState$6 = function selectState$6(state) {\n return state.content || {};\n};\n\nvar makeSelectContentPositionForUri = function makeSelectContentPositionForUri(uri) {\n return reselect.createSelector(selectState$6, makeSelectClaimForUri(uri), function (state, claim) {\n if (!claim) {\n return null;\n }\n\n var outpoint = \"\".concat(claim.txid, \":\").concat(claim.nout);\n var id = claim.claim_id;\n return state.positions[id] ? state.positions[id][outpoint] : null;\n });\n};\n\nvar _extends$j = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState$7 = function selectState$7(state) {\n return state.notifications || {};\n};\n\nvar selectToast = reselect.createSelector(selectState$7, function (state) {\n if (state.toasts.length) {\n var _state$toasts$ = state.toasts[0],\n id = _state$toasts$.id,\n params = _state$toasts$.params;\n return _extends$j({\n id: id\n }, params);\n }\n\n return null;\n});\nvar selectError = reselect.createSelector(selectState$7, function (state) {\n if (state.errors.length) {\n var error = state.errors[0].error;\n return {\n error: error\n };\n }\n\n return null;\n}); // \n\nvar selectState$8 = function selectState$8(state) {\n return state.comments || {};\n};\n\nvar selectCommentsById = reselect.createSelector(selectState$8, function (state) {\n return state.commentById || {};\n});\nvar selectCommentsByClaimId = reselect.createSelector(selectState$8, selectCommentsById, function (state, byId) {\n var byClaimId = state.byId || {};\n var comments = {}; // replace every comment_id in the list with the actual comment object\n\n Object.keys(byClaimId).forEach(function (claimId) {\n var commentIds = byClaimId[claimId];\n comments[claimId] = Array(commentIds === null ? 0 : commentIds.length);\n\n for (var i = 0; i < commentIds.length; i++) {\n comments[claimId][i] = byId[commentIds[i]];\n }\n });\n return comments;\n}); // previously this used a mapping from claimId -> Array<Comments>\n\n/* export const selectCommentsById = createSelector(\n selectState,\n state => state.byId || {}\n); */\n\nvar selectCommentsByUri = reselect.createSelector(selectState$8, function (state) {\n var byUri = state.commentsByUri || {};\n var comments = {};\n Object.keys(byUri).forEach(function (uri) {\n var claimId = byUri[uri];\n\n if (claimId === null) {\n comments[uri] = null;\n } else {\n comments[uri] = claimId;\n }\n });\n return comments;\n});\n\nvar makeSelectCommentsForUri = function makeSelectCommentsForUri(uri) {\n return reselect.createSelector(selectCommentsByClaimId, selectCommentsByUri, function (byClaimId, byUri) {\n var claimId = byUri[uri];\n return byClaimId && byClaimId[claimId];\n });\n}; // todo: allow SDK to retrieve user comments through comment_list\n// todo: implement selectors for selecting comments owned by user\n// \n\n\nvar selectState$9 = function selectState$9(state) {\n return state.tags || {};\n};\n\nvar selectKnownTagsByName = reselect.createSelector(selectState$9, function (state) {\n return state.knownTags;\n});\nvar selectFollowedTagsList = reselect.createSelector(selectState$9, function (state) {\n return state.followedTags.filter(function (tag) {\n return typeof tag === 'string';\n });\n});\nvar selectFollowedTags = reselect.createSelector(selectFollowedTagsList, function (followedTags) {\n return followedTags.map(function (tag) {\n return {\n name: tag.toLowerCase()\n };\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n});\nvar selectUnfollowedTags = reselect.createSelector(selectKnownTagsByName, selectFollowedTagsList, function (tagsByName, followedTags) {\n var followedTagsSet = new Set(followedTags);\n var tagsToReturn = [];\n Object.keys(tagsByName).forEach(function (key) {\n if (!followedTagsSet.has(key)) {\n var name = tagsByName[key].name;\n tagsToReturn.push({\n name: name.toLowerCase()\n });\n }\n });\n return tagsToReturn;\n});\n\nvar makeSelectIsFollowingTag = function makeSelectIsFollowingTag(tag) {\n return reselect.createSelector(selectFollowedTags, function (followedTags) {\n return followedTags.some(function (followedTag) {\n return followedTag.name === tag.toLowerCase();\n });\n });\n}; // \n\n\nvar selectState$a = function selectState$a(state) {\n return state.blocked || {};\n};\n\nvar selectBlockedChannels = reselect.createSelector(selectState$a, function (state) {\n return state.blockedChannels;\n});\nvar selectBlockedChannelsCount = reselect.createSelector(selectBlockedChannels, function (state) {\n return state.length;\n});\n\nvar selectChannelIsBlocked = function selectChannelIsBlocked(uri) {\n return reselect.createSelector(selectBlockedChannels, function (state) {\n return state.includes(uri);\n });\n};\n\nexports.ACTIONS = action_types;\nexports.CLAIM_VALUES = claim;\nexports.DAEMON_SETTINGS = daemon_settings;\nexports.DEFAULT_FOLLOWED_TAGS = DEFAULT_FOLLOWED_TAGS;\nexports.DEFAULT_KNOWN_TAGS = DEFAULT_KNOWN_TAGS;\nexports.LICENSES = licenses;\nexports.Lbry = lbryProxy;\nexports.MATURE_TAGS = MATURE_TAGS;\nexports.PAGES = pages;\nexports.SEARCH_OPTIONS = SEARCH_OPTIONS;\nexports.SEARCH_TYPES = SEARCH_TYPES;\nexports.SETTINGS = settings;\nexports.SHARED_PREFERENCES = shared_preferences;\nexports.SORT_OPTIONS = sort_options;\nexports.SPEECH_URLS = speech_urls;\nexports.THUMBNAIL_STATUSES = thumbnail_upload_statuses;\nexports.TRANSACTIONS = transaction_types;\nexports.TX_LIST = transaction_list;\nexports.apiCall = apiCall;\nexports.batchActions = batchActions;\nexports.blockedReducer = blockedReducer;\nexports.buildSharedStateMiddleware = buildSharedStateMiddleware;\nexports.buildURI = buildURI;\nexports.claimsReducer = claimsReducer;\nexports.commentReducer = commentReducer;\nexports.contentReducer = contentReducer;\nexports.convertToShareLink = convertToShareLink;\nexports.createNormalizedClaimSearchKey = createNormalizedClaimSearchKey;\nexports.creditsToString = creditsToString;\nexports.doAbandonClaim = doAbandonClaim;\nexports.doAddTag = doAddTag;\nexports.doBalanceSubscribe = doBalanceSubscribe;\nexports.doBlurSearchInput = doBlurSearchInput;\nexports.doCheckAddressIsMine = doCheckAddressIsMine;\nexports.doCheckPendingPublishes = doCheckPendingPublishes;\nexports.doClaimSearch = doClaimSearch;\nexports.doClearPublish = doClearPublish;\nexports.doClearRepostError = doClearRepostError;\nexports.doClearSupport = doClearSupport;\nexports.doCommentAbandon = doCommentAbandon;\nexports.doCommentCreate = doCommentCreate;\nexports.doCommentHide = doCommentHide;\nexports.doCommentList = doCommentList;\nexports.doCommentUpdate = doCommentUpdate;\nexports.doCreateChannel = doCreateChannel;\nexports.doDeletePurchasedUri = doDeletePurchasedUri;\nexports.doDeleteTag = doDeleteTag;\nexports.doDismissError = doDismissError;\nexports.doDismissToast = doDismissToast;\nexports.doError = doError;\nexports.doFetchChannelListMine = doFetchChannelListMine;\nexports.doFetchClaimListMine = doFetchClaimListMine;\nexports.doFetchClaimsByChannel = doFetchClaimsByChannel;\nexports.doFetchFileInfo = doFetchFileInfo;\nexports.doFetchFileInfosAndPublishedClaims = doFetchFileInfosAndPublishedClaims;\nexports.doFetchTransactions = doFetchTransactions;\nexports.doFileGet = doFileGet;\nexports.doFileList = doFileList;\nexports.doFocusSearchInput = doFocusSearchInput;\nexports.doGetNewAddress = doGetNewAddress;\nexports.doImportChannel = doImportChannel;\nexports.doPopulateSharedUserState = doPopulateSharedUserState;\nexports.doPreferenceGet = doPreferenceGet;\nexports.doPreferenceSet = doPreferenceSet;\nexports.doPrepareEdit = doPrepareEdit;\nexports.doPublish = doPublish;\nexports.doPurchaseUri = doPurchaseUri;\nexports.doRepost = doRepost;\nexports.doResetThumbnailStatus = doResetThumbnailStatus;\nexports.doResolveUri = doResolveUri;\nexports.doResolveUris = doResolveUris;\nexports.doResolvedSearch = doResolvedSearch;\nexports.doSearch = doSearch;\nexports.doSendDraftTransaction = doSendDraftTransaction;\nexports.doSendTip = doSendTip;\nexports.doSetDraftTransactionAddress = doSetDraftTransactionAddress;\nexports.doSetDraftTransactionAmount = doSetDraftTransactionAmount;\nexports.doSetFileListSort = doSetFileListSort;\nexports.doSetTransactionListFilter = doSetTransactionListFilter;\nexports.doSupportAbandonForClaim = doSupportAbandonForClaim;\nexports.doToast = doToast;\nexports.doToggleBlockChannel = doToggleBlockChannel;\nexports.doToggleTagFollow = doToggleTagFollow;\nexports.doUpdateBalance = doUpdateBalance;\nexports.doUpdateBlockHeight = doUpdateBlockHeight;\nexports.doUpdateChannel = doUpdateChannel;\nexports.doUpdatePublishForm = doUpdatePublishForm;\nexports.doUpdateSearchOptions = doUpdateSearchOptions;\nexports.doUpdateSearchQuery = doUpdateSearchQuery;\nexports.doUploadThumbnail = doUploadThumbnail;\nexports.doWalletDecrypt = doWalletDecrypt;\nexports.doWalletEncrypt = doWalletEncrypt;\nexports.doWalletReconnect = doWalletReconnect;\nexports.doWalletStatus = doWalletStatus;\nexports.doWalletUnlock = doWalletUnlock;\nexports.fileInfoReducer = fileInfoReducer;\nexports.fileReducer = fileReducer;\nexports.formatCredits = formatCredits;\nexports.formatFullPrice = formatFullPrice;\nexports.isClaimNsfw = isClaimNsfw;\nexports.isNameValid = isNameValid;\nexports.isURIClaimable = isURIClaimable;\nexports.isURIValid = isURIValid;\nexports.makeSelectAmountForUri = makeSelectAmountForUri;\nexports.makeSelectCanonicalUrlForUri = makeSelectCanonicalUrlForUri;\nexports.makeSelectChannelForClaimUri = makeSelectChannelForClaimUri;\nexports.makeSelectClaimForUri = makeSelectClaimForUri;\nexports.makeSelectClaimIsMine = makeSelectClaimIsMine;\nexports.makeSelectClaimIsNsfw = makeSelectClaimIsNsfw;\nexports.makeSelectClaimIsPending = makeSelectClaimIsPending;\nexports.makeSelectClaimsInChannelForCurrentPageState = makeSelectClaimsInChannelForCurrentPageState;\nexports.makeSelectClaimsInChannelForPage = makeSelectClaimsInChannelForPage;\nexports.makeSelectCommentsForUri = makeSelectCommentsForUri;\nexports.makeSelectContentPositionForUri = makeSelectContentPositionForUri;\nexports.makeSelectContentTypeForUri = makeSelectContentTypeForUri;\nexports.makeSelectCoverForUri = makeSelectCoverForUri;\nexports.makeSelectDateForUri = makeSelectDateForUri;\nexports.makeSelectDownloadPathForUri = makeSelectDownloadPathForUri;\nexports.makeSelectDownloadingForUri = makeSelectDownloadingForUri;\nexports.makeSelectFetchingChannelClaims = makeSelectFetchingChannelClaims;\nexports.makeSelectFileInfoForUri = makeSelectFileInfoForUri;\nexports.makeSelectFileNameForUri = makeSelectFileNameForUri;\nexports.makeSelectFilePartlyDownloaded = makeSelectFilePartlyDownloaded;\nexports.makeSelectFilteredTransactionsForPage = makeSelectFilteredTransactionsForPage;\nexports.makeSelectFirstRecommendedFileForUri = makeSelectFirstRecommendedFileForUri;\nexports.makeSelectIsFollowingTag = makeSelectIsFollowingTag;\nexports.makeSelectIsUriResolving = makeSelectIsUriResolving;\nexports.makeSelectLatestTransactions = makeSelectLatestTransactions;\nexports.makeSelectLoadingForUri = makeSelectLoadingForUri;\nexports.makeSelectMediaTypeForUri = makeSelectMediaTypeForUri;\nexports.makeSelectMetadataForUri = makeSelectMetadataForUri;\nexports.makeSelectMetadataItemForUri = makeSelectMetadataItemForUri;\nexports.makeSelectMyStreamUrlsForPage = makeSelectMyStreamUrlsForPage;\nexports.makeSelectNsfwCountForChannel = makeSelectNsfwCountForChannel;\nexports.makeSelectNsfwCountFromUris = makeSelectNsfwCountFromUris;\nexports.makeSelectOmittedCountForChannel = makeSelectOmittedCountForChannel;\nexports.makeSelectPendingAmountByUri = makeSelectPendingAmountByUri;\nexports.makeSelectPendingByUri = makeSelectPendingByUri;\nexports.makeSelectPermanentUrlForUri = makeSelectPermanentUrlForUri;\nexports.makeSelectPublishFormValue = makeSelectPublishFormValue;\nexports.makeSelectQueryWithOptions = makeSelectQueryWithOptions;\nexports.makeSelectRecommendedContentForUri = makeSelectRecommendedContentForUri;\nexports.makeSelectResolvedRecommendedContentForUri = makeSelectResolvedRecommendedContentForUri;\nexports.makeSelectResolvedSearchResults = makeSelectResolvedSearchResults;\nexports.makeSelectResolvedSearchResultsLastPageReached = makeSelectResolvedSearchResultsLastPageReached;\nexports.makeSelectSearchDownloadUrlsCount = makeSelectSearchDownloadUrlsCount;\nexports.makeSelectSearchDownloadUrlsForPage = makeSelectSearchDownloadUrlsForPage;\nexports.makeSelectSearchUris = makeSelectSearchUris;\nexports.makeSelectShortUrlForUri = makeSelectShortUrlForUri;\nexports.makeSelectStreamingUrlForUri = makeSelectStreamingUrlForUri;\nexports.makeSelectSupportsForUri = makeSelectSupportsForUri;\nexports.makeSelectTagsForUri = makeSelectTagsForUri;\nexports.makeSelectThumbnailForUri = makeSelectThumbnailForUri;\nexports.makeSelectTitleForUri = makeSelectTitleForUri;\nexports.makeSelectTotalClaimsInChannelSearch = makeSelectTotalClaimsInChannelSearch;\nexports.makeSelectTotalItemsForChannel = makeSelectTotalItemsForChannel;\nexports.makeSelectTotalPagesForChannel = makeSelectTotalPagesForChannel;\nexports.makeSelectTotalPagesInChannelSearch = makeSelectTotalPagesInChannelSearch;\nexports.makeSelectUriIsStreamable = makeSelectUriIsStreamable;\nexports.normalizeURI = normalizeURI;\nexports.notificationsReducer = notificationsReducer;\nexports.parseQueryParams = parseQueryParams;\nexports.parseURI = parseURI;\nexports.publishReducer = publishReducer;\nexports.regexAddress = regexAddress;\nexports.regexInvalidURI = regexInvalidURI;\nexports.savePosition = savePosition;\nexports.searchReducer = searchReducer;\nexports.selectAbandonClaimSupportError = selectAbandonClaimSupportError;\nexports.selectAbandoningIds = selectAbandoningIds;\nexports.selectAllClaimsByChannel = selectAllClaimsByChannel;\nexports.selectAllFetchingChannelClaims = selectAllFetchingChannelClaims;\nexports.selectAllMyClaimsByOutpoint = selectAllMyClaimsByOutpoint;\nexports.selectBalance = selectBalance;\nexports.selectBlockedChannels = selectBlockedChannels;\nexports.selectBlockedChannelsCount = selectBlockedChannelsCount;\nexports.selectBlocks = selectBlocks;\nexports.selectChannelClaimCounts = selectChannelClaimCounts;\nexports.selectChannelImportPending = selectChannelImportPending;\nexports.selectChannelIsBlocked = selectChannelIsBlocked;\nexports.selectClaimIdsByUri = selectClaimIdsByUri;\nexports.selectClaimSearchByQuery = selectClaimSearchByQuery;\nexports.selectClaimSearchByQueryLastPageReached = selectClaimSearchByQueryLastPageReached;\nexports.selectClaimsBalance = selectClaimsBalance;\nexports.selectClaimsById = selectClaimsById;\nexports.selectClaimsByUri = selectClaimsByUri;\nexports.selectCreateChannelError = selectCreateChannelError;\nexports.selectCreatingChannel = selectCreatingChannel;\nexports.selectCurrentChannelPage = selectCurrentChannelPage;\nexports.selectDownloadUrlsCount = selectDownloadUrlsCount;\nexports.selectDownloadedUris = selectDownloadedUris;\nexports.selectDownloadingByOutpoint = selectDownloadingByOutpoint;\nexports.selectDownloadingFileInfos = selectDownloadingFileInfos;\nexports.selectDraftTransaction = selectDraftTransaction;\nexports.selectDraftTransactionAddress = selectDraftTransactionAddress;\nexports.selectDraftTransactionAmount = selectDraftTransactionAmount;\nexports.selectDraftTransactionError = selectDraftTransactionError;\nexports.selectError = selectError;\nexports.selectFailedPurchaseUris = selectFailedPurchaseUris;\nexports.selectFetchingClaimSearch = selectFetchingClaimSearch;\nexports.selectFetchingClaimSearchByQuery = selectFetchingClaimSearchByQuery;\nexports.selectFetchingMyChannels = selectFetchingMyChannels;\nexports.selectFileInfosByOutpoint = selectFileInfosByOutpoint;\nexports.selectFileInfosDownloaded = selectFileInfosDownloaded;\nexports.selectFileListDownloadedSort = selectFileListDownloadedSort;\nexports.selectFileListPublishedSort = selectFileListPublishedSort;\nexports.selectFilteredTransactionCount = selectFilteredTransactionCount;\nexports.selectFilteredTransactions = selectFilteredTransactions;\nexports.selectFollowedTags = selectFollowedTags;\nexports.selectFollowedTagsList = selectFollowedTagsList;\nexports.selectGettingNewAddress = selectGettingNewAddress;\nexports.selectHasTransactions = selectHasTransactions;\nexports.selectIsFetchingClaimListMine = selectIsFetchingClaimListMine;\nexports.selectIsFetchingFileList = selectIsFetchingFileList;\nexports.selectIsFetchingFileListDownloadedOrPublished = selectIsFetchingFileListDownloadedOrPublished;\nexports.selectIsFetchingTransactions = selectIsFetchingTransactions;\nexports.selectIsResolvingPublishUris = selectIsResolvingPublishUris;\nexports.selectIsSearching = selectIsSearching;\nexports.selectIsSendingSupport = selectIsSendingSupport;\nexports.selectIsStillEditing = selectIsStillEditing;\nexports.selectIsWalletReconnecting = selectIsWalletReconnecting;\nexports.selectLastPurchasedUri = selectLastPurchasedUri;\nexports.selectMyActiveClaims = selectMyActiveClaims;\nexports.selectMyChannelClaims = selectMyChannelClaims;\nexports.selectMyClaimForUri = selectMyClaimForUri;\nexports.selectMyClaimUrisWithoutChannels = selectMyClaimUrisWithoutChannels;\nexports.selectMyClaims = selectMyClaims;\nexports.selectMyClaimsOutpoints = selectMyClaimsOutpoints;\nexports.selectMyClaimsRaw = selectMyClaimsRaw;\nexports.selectMyClaimsWithoutChannels = selectMyClaimsWithoutChannels;\nexports.selectMyStreamUrlsCount = selectMyStreamUrlsCount;\nexports.selectPendingById = selectPendingById;\nexports.selectPendingClaims = selectPendingClaims;\nexports.selectPendingSupportTransactions = selectPendingSupportTransactions;\nexports.selectPlayingUri = selectPlayingUri;\nexports.selectPublishFormValues = selectPublishFormValues;\nexports.selectPurchaseUriErrorMessage = selectPurchaseUriErrorMessage;\nexports.selectPurchasedUris = selectPurchasedUris;\nexports.selectReceiveAddress = selectReceiveAddress;\nexports.selectRecentTransactions = selectRecentTransactions;\nexports.selectRepostError = selectRepostError;\nexports.selectRepostLoading = selectRepostLoading;\nexports.selectReservedBalance = selectReservedBalance;\nexports.selectResolvedSearchResultsByQuery = selectResolvedSearchResultsByQuery;\nexports.selectResolvedSearchResultsByQueryLastPageReached = selectResolvedSearchResultsByQueryLastPageReached;\nexports.selectResolvingUris = selectResolvingUris;\nexports.selectSearchBarFocused = selectSearchBarFocused;\nexports.selectSearchOptions = selectSearchOptions;\nexports.selectSearchState = selectState;\nexports.selectSearchSuggestions = selectSearchSuggestions;\nexports.selectSearchUrisByQuery = selectSearchUrisByQuery;\nexports.selectSearchValue = selectSearchValue;\nexports.selectSupportsBalance = selectSupportsBalance;\nexports.selectSupportsByOutpoint = selectSupportsByOutpoint;\nexports.selectTakeOverAmount = selectTakeOverAmount;\nexports.selectTipsBalance = selectTipsBalance;\nexports.selectToast = selectToast;\nexports.selectTotalBalance = selectTotalBalance;\nexports.selectTotalDownloadProgress = selectTotalDownloadProgress;\nexports.selectTotalSupports = selectTotalSupports;\nexports.selectTransactionItems = selectTransactionItems;\nexports.selectTransactionListFilter = selectTransactionListFilter;\nexports.selectTransactionsById = selectTransactionsById;\nexports.selectUnfollowedTags = selectUnfollowedTags;\nexports.selectUpdateChannelError = selectUpdateChannelError;\nexports.selectUpdatingChannel = selectUpdatingChannel;\nexports.selectUrisLoading = selectUrisLoading;\nexports.selectWalletDecryptPending = selectWalletDecryptPending;\nexports.selectWalletDecryptResult = selectWalletDecryptResult;\nexports.selectWalletDecryptSucceeded = selectWalletDecryptSucceeded;\nexports.selectWalletEncryptPending = selectWalletEncryptPending;\nexports.selectWalletEncryptResult = selectWalletEncryptResult;\nexports.selectWalletEncryptSucceeded = selectWalletEncryptSucceeded;\nexports.selectWalletIsEncrypted = selectWalletIsEncrypted;\nexports.selectWalletState = selectWalletState;\nexports.selectWalletUnlockPending = selectWalletUnlockPending;\nexports.selectWalletUnlockResult = selectWalletUnlockResult;\nexports.selectWalletUnlockSucceeded = selectWalletUnlockSucceeded;\nexports.setSearchApi = setSearchApi;\nexports.tagsReducer = tagsReducer;\nexports.toQueryString = toQueryString;\nexports.walletReducer = walletReducer;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xicnktcmVkdXgvZGlzdC9idW5kbGUuZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xicnktcmVkdXgvZGlzdC9idW5kbGUuZXMuanM/ZWEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG5yZXF1aXJlKCdwcm94eS1wb2x5ZmlsbCcpO1xudmFyIHJlc2VsZWN0ID0gcmVxdWlyZSgncmVzZWxlY3QnKTtcbnZhciB1dWlkID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3V1aWQvdjQnKSk7XG5cbmNvbnN0IE1JTklNVU1fUFVCTElTSF9CSUQgPSAwLjAwMDAwMDAxO1xuXG5jb25zdCBDSEFOTkVMX0FOT05ZTU9VUyA9ICdhbm9ueW1vdXMnO1xuY29uc3QgQ0hBTk5FTF9ORVcgPSAnbmV3JztcbmNvbnN0IFBBR0VfU0laRSA9IDIwO1xuXG52YXIgY2xhaW0gPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIE1JTklNVU1fUFVCTElTSF9CSUQ6IE1JTklNVU1fUFVCTElTSF9CSUQsXG4gIENIQU5ORUxfQU5PTllNT1VTOiBDSEFOTkVMX0FOT05ZTU9VUyxcbiAgQ0hBTk5FTF9ORVc6IENIQU5ORUxfTkVXLFxuICBQQUdFX1NJWkU6IFBBR0VfU0laRVxufSk7XG5cbmNvbnN0IFdJTkRPV19GT0NVU0VEID0gJ1dJTkRPV19GT0NVU0VEJztcbmNvbnN0IERBRU1PTl9SRUFEWSA9ICdEQUVNT05fUkVBRFknO1xuY29uc3QgREFFTU9OX1ZFUlNJT05fTUFUQ0ggPSAnREFFTU9OX1ZFUlNJT05fTUFUQ0gnO1xuY29uc3QgREFFTU9OX1ZFUlNJT05fTUlTTUFUQ0ggPSAnREFFTU9OX1ZFUlNJT05fTUlTTUFUQ0gnO1xuY29uc3QgVk9MVU1FX0NIQU5HRUQgPSAnVk9MVU1FX0NIQU5HRUQnO1xuY29uc3QgU0VUX1dFTENPTUVfVkVSU0lPTiA9ICdTRVRfV0VMQ09NRV9WRVJTSU9OJztcbmNvbnN0IFNFVF9BTExPV19BTkFMWVRJQ1MgPSAnU0VUX0FMTE9XX0FOQUxZVElDUyc7XG5cbi8vIE5hdmlnYXRpb25cbmNvbnN0IENIQU5HRV9BRlRFUl9BVVRIX1BBVEggPSAnQ0hBTkdFX0FGVEVSX0FVVEhfUEFUSCc7XG5jb25zdCBXSU5ET1dfU0NST0xMRUQgPSAnV0lORE9XX1NDUk9MTEVEJztcbmNvbnN0IEhJU1RPUllfTkFWSUdBVEUgPSAnSElTVE9SWV9OQVZJR0FURSc7XG5cbi8vIFVwZ3JhZGVzXG5jb25zdCBVUEdSQURFX0NBTkNFTExFRCA9ICdVUEdSQURFX0NBTkNFTExFRCc7XG5jb25zdCBET1dOTE9BRF9VUEdSQURFID0gJ0RPV05MT0FEX1VQR1JBREUnO1xuY29uc3QgVVBHUkFERV9ET1dOTE9BRF9TVEFSVEVEID0gJ1VQR1JBREVfRE9XTkxPQURfU1RBUlRFRCc7XG5jb25zdCBVUEdSQURFX0RPV05MT0FEX0NPTVBMRVRFRCA9ICdVUEdSQURFX0RPV05MT0FEX0NPTVBMRVRFRCc7XG5jb25zdCBVUEdSQURFX0RPV05MT0FEX1BST0dSRVNTRUQgPSAnVVBHUkFERV9ET1dOTE9BRF9QUk9HUkVTU0VEJztcbmNvbnN0IENIRUNLX1VQR1JBREVfQVZBSUxBQkxFID0gJ0NIRUNLX1VQR1JBREVfQVZBSUxBQkxFJztcbmNvbnN0IENIRUNLX1VQR1JBREVfU1RBUlQgPSAnQ0hFQ0tfVVBHUkFERV9TVEFSVCc7XG5jb25zdCBDSEVDS19VUEdSQURFX1NVQ0NFU1MgPSAnQ0hFQ0tfVVBHUkFERV9TVUNDRVNTJztcbmNvbnN0IENIRUNLX1VQR1JBREVfRkFJTCA9ICdDSEVDS19VUEdSQURFX0ZBSUwnO1xuY29uc3QgQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkUgPSAnQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkUnO1xuY29uc3QgVVBEQVRFX1ZFUlNJT04gPSAnVVBEQVRFX1ZFUlNJT04nO1xuY29uc3QgVVBEQVRFX1JFTU9URV9WRVJTSU9OID0gJ1VQREFURV9SRU1PVEVfVkVSU0lPTic7XG5jb25zdCBTS0lQX1VQR1JBREUgPSAnU0tJUF9VUEdSQURFJztcbmNvbnN0IFNUQVJUX1VQR1JBREUgPSAnU1RBUlRfVVBHUkFERSc7XG5jb25zdCBBVVRPX1VQREFURV9ERUNMSU5FRCA9ICdBVVRPX1VQREFURV9ERUNMSU5FRCc7XG5jb25zdCBBVVRPX1VQREFURV9ET1dOTE9BREVEID0gJ0FVVE9fVVBEQVRFX0RPV05MT0FERUQnO1xuY29uc3QgQ0xFQVJfVVBHUkFERV9USU1FUiA9ICdDTEVBUl9VUEdSQURFX1RJTUVSJztcblxuLy8gV2FsbGV0XG5jb25zdCBHRVRfTkVXX0FERFJFU1NfU1RBUlRFRCA9ICdHRVRfTkVXX0FERFJFU1NfU1RBUlRFRCc7XG5jb25zdCBHRVRfTkVXX0FERFJFU1NfQ09NUExFVEVEID0gJ0dFVF9ORVdfQUREUkVTU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfVFJBTlNBQ1RJT05TX1NUQVJURUQgPSAnRkVUQ0hfVFJBTlNBQ1RJT05TX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRCA9ICdGRVRDSF9UUkFOU0FDVElPTlNfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX1NVUFBPUlRTX1NUQVJURUQgPSAnRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9TVVBQT1JUU19DT01QTEVURUQgPSAnRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVEJztcbmNvbnN0IEFCQU5ET05fU1VQUE9SVF9TVEFSVEVEID0gJ0FCQU5ET05fU1VQUE9SVF9TVEFSVEVEJztcbmNvbnN0IEFCQU5ET05fU1VQUE9SVF9DT01QTEVURUQgPSAnQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRCc7XG5jb25zdCBBQkFORE9OX0NMQUlNX1NVUFBPUlRfU1RBUlRFRCA9ICdBQkFORE9OX0NMQUlNX1NVUFBPUlRfU1RBUlRFRCc7XG5jb25zdCBBQkFORE9OX0NMQUlNX1NVUFBPUlRfQ09NUExFVEVEID0gJ0FCQU5ET05fQ0xBSU1fU1VQUE9SVF9DT01QTEVURUQnO1xuY29uc3QgQUJBTkRPTl9DTEFJTV9TVVBQT1JUX0ZBSUxFRCA9ICdBQkFORE9OX0NMQUlNX1NVUFBPUlRfRkFJTEVEJztcbmNvbnN0IEFCQU5ET05fQ0xBSU1fU1VQUE9SVF9QUkVWSUVXID0gJ0FCQU5ET05fQ0xBSU1fU1VQUE9SVF9QUkVWSUVXJztcbmNvbnN0IFBFTkRJTkdfU1VQUE9SVFNfVVBEQVRFRCA9ICdQRU5ESU5HX1NVUFBPUlRTX1VQREFURUQnO1xuY29uc3QgVVBEQVRFX0JBTEFOQ0UgPSAnVVBEQVRFX0JBTEFOQ0UnO1xuY29uc3QgVVBEQVRFX1RPVEFMX0JBTEFOQ0UgPSAnVVBEQVRFX1RPVEFMX0JBTEFOQ0UnO1xuY29uc3QgQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURUQgPSAnQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURUQnO1xuY29uc3QgQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRCA9ICdDSEVDS19BRERSRVNTX0lTX01JTkVfQ09NUExFVEVEJztcbmNvbnN0IFNFTkRfVFJBTlNBQ1RJT05fU1RBUlRFRCA9ICdTRU5EX1RSQU5TQUNUSU9OX1NUQVJURUQnO1xuY29uc3QgU0VORF9UUkFOU0FDVElPTl9DT01QTEVURUQgPSAnU0VORF9UUkFOU0FDVElPTl9DT01QTEVURUQnO1xuY29uc3QgU0VORF9UUkFOU0FDVElPTl9GQUlMRUQgPSAnU0VORF9UUkFOU0FDVElPTl9GQUlMRUQnO1xuY29uc3QgU1VQUE9SVF9UUkFOU0FDVElPTl9TVEFSVEVEID0gJ1NVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRCc7XG5jb25zdCBTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRCA9ICdTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRCc7XG5jb25zdCBTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRCA9ICdTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRCc7XG5jb25zdCBDTEVBUl9TVVBQT1JUX1RSQU5TQUNUSU9OID0gJ0NMRUFSX1NVUFBPUlRfVFJBTlNBQ1RJT04nO1xuY29uc3QgV0FMTEVUX0VOQ1JZUFRfU1RBUlQgPSAnV0FMTEVUX0VOQ1JZUFRfU1RBUlQnO1xuY29uc3QgV0FMTEVUX0VOQ1JZUFRfQ09NUExFVEVEID0gJ1dBTExFVF9FTkNSWVBUX0NPTVBMRVRFRCc7XG5jb25zdCBXQUxMRVRfRU5DUllQVF9GQUlMRUQgPSAnV0FMTEVUX0VOQ1JZUFRfRkFJTEVEJztcbmNvbnN0IFdBTExFVF9VTkxPQ0tfU1RBUlQgPSAnV0FMTEVUX1VOTE9DS19TVEFSVCc7XG5jb25zdCBXQUxMRVRfVU5MT0NLX0NPTVBMRVRFRCA9ICdXQUxMRVRfVU5MT0NLX0NPTVBMRVRFRCc7XG5jb25zdCBXQUxMRVRfVU5MT0NLX0ZBSUxFRCA9ICdXQUxMRVRfVU5MT0NLX0ZBSUxFRCc7XG5jb25zdCBXQUxMRVRfREVDUllQVF9TVEFSVCA9ICdXQUxMRVRfREVDUllQVF9TVEFSVCc7XG5jb25zdCBXQUxMRVRfREVDUllQVF9DT01QTEVURUQgPSAnV0FMTEVUX0RFQ1JZUFRfQ09NUExFVEVEJztcbmNvbnN0IFdBTExFVF9ERUNSWVBUX0ZBSUxFRCA9ICdXQUxMRVRfREVDUllQVF9GQUlMRUQnO1xuY29uc3QgV0FMTEVUX0xPQ0tfU1RBUlQgPSAnV0FMTEVUX0xPQ0tfU1RBUlQnO1xuY29uc3QgV0FMTEVUX0xPQ0tfQ09NUExFVEVEID0gJ1dBTExFVF9MT0NLX0NPTVBMRVRFRCc7XG5jb25zdCBXQUxMRVRfTE9DS19GQUlMRUQgPSAnV0FMTEVUX0xPQ0tfRkFJTEVEJztcbmNvbnN0IFdBTExFVF9TVEFUVVNfU1RBUlQgPSAnV0FMTEVUX1NUQVRVU19TVEFSVCc7XG5jb25zdCBXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRCA9ICdXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRCc7XG5jb25zdCBXQUxMRVRfUkVTVEFSVCA9ICdXQUxMRVRfUkVTVEFSVCc7XG5jb25zdCBXQUxMRVRfUkVTVEFSVF9DT01QTEVURUQgPSAnV0FMTEVUX1JFU1RBUlRfQ09NUExFVEVEJztcbmNvbnN0IFNFVF9UUkFOU0FDVElPTl9MSVNUX0ZJTFRFUiA9ICdTRVRfVFJBTlNBQ1RJT05fTElTVF9GSUxURVInO1xuY29uc3QgVVBEQVRFX0NVUlJFTlRfSEVJR0hUID0gJ1VQREFURV9DVVJSRU5UX0hFSUdIVCc7XG5jb25zdCBTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5UID0gJ1NFVF9EUkFGVF9UUkFOU0FDVElPTl9BTU9VTlQnO1xuY29uc3QgU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1MgPSAnU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1MnO1xuXG4vLyBDbGFpbXNcbmNvbnN0IFJFU09MVkVfVVJJU19TVEFSVEVEID0gJ1JFU09MVkVfVVJJU19TVEFSVEVEJztcbmNvbnN0IFJFU09MVkVfVVJJU19DT01QTEVURUQgPSAnUkVTT0xWRV9VUklTX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEID0gJ0ZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEID0gJ0ZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEID0gJ0ZFVENIX0NMQUlNX0xJU1RfTUlORV9DT01QTEVURUQnO1xuY29uc3QgQUJBTkRPTl9DTEFJTV9TVEFSVEVEID0gJ0FCQU5ET05fQ0xBSU1fU1RBUlRFRCc7XG5jb25zdCBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCA9ICdBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEID0gJ0ZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQnO1xuY29uc3QgQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCA9ICdDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEJztcbmNvbnN0IENSRUFURV9DSEFOTkVMX0NPTVBMRVRFRCA9ICdDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQnO1xuY29uc3QgQ1JFQVRFX0NIQU5ORUxfRkFJTEVEID0gJ0NSRUFURV9DSEFOTkVMX0ZBSUxFRCc7XG5jb25zdCBVUERBVEVfQ0hBTk5FTF9TVEFSVEVEID0gJ1VQREFURV9DSEFOTkVMX1NUQVJURUQnO1xuY29uc3QgVVBEQVRFX0NIQU5ORUxfQ09NUExFVEVEID0gJ1VQREFURV9DSEFOTkVMX0NPTVBMRVRFRCc7XG5jb25zdCBVUERBVEVfQ0hBTk5FTF9GQUlMRUQgPSAnVVBEQVRFX0NIQU5ORUxfRkFJTEVEJztcbmNvbnN0IElNUE9SVF9DSEFOTkVMX1NUQVJURUQgPSAnSU1QT1JUX0NIQU5ORUxfU1RBUlRFRCc7XG5jb25zdCBJTVBPUlRfQ0hBTk5FTF9DT01QTEVURUQgPSAnSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVEJztcbmNvbnN0IElNUE9SVF9DSEFOTkVMX0ZBSUxFRCA9ICdJTVBPUlRfQ0hBTk5FTF9GQUlMRUQnO1xuY29uc3QgUFVCTElTSF9TVEFSVEVEID0gJ1BVQkxJU0hfU1RBUlRFRCc7XG5jb25zdCBQVUJMSVNIX0NPTVBMRVRFRCA9ICdQVUJMSVNIX0NPTVBMRVRFRCc7XG5jb25zdCBQVUJMSVNIX0ZBSUxFRCA9ICdQVUJMSVNIX0ZBSUxFRCc7XG5jb25zdCBTRVRfUExBWUlOR19VUkkgPSAnU0VUX1BMQVlJTkdfVVJJJztcbmNvbnN0IFNFVF9DT05URU5UX1BPU0lUSU9OID0gJ1NFVF9DT05URU5UX1BPU0lUSU9OJztcbmNvbnN0IFNFVF9DT05URU5UX0xBU1RfVklFV0VEID0gJ1NFVF9DT05URU5UX0xBU1RfVklFV0VEJztcbmNvbnN0IENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkkgPSAnQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSc7XG5jb25zdCBDTEVBUl9DT05URU5UX0hJU1RPUllfQUxMID0gJ0NMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwnO1xuY29uc3QgQ0xBSU1fU0VBUkNIX1NUQVJURUQgPSAnQ0xBSU1fU0VBUkNIX1NUQVJURUQnO1xuY29uc3QgQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRCA9ICdDTEFJTV9TRUFSQ0hfQ09NUExFVEVEJztcbmNvbnN0IENMQUlNX1NFQVJDSF9GQUlMRUQgPSAnQ0xBSU1fU0VBUkNIX0ZBSUxFRCc7XG5jb25zdCBDTEFJTV9TRUFSQ0hfQllfVEFHU19TVEFSVEVEID0gJ0NMQUlNX1NFQVJDSF9CWV9UQUdTX1NUQVJURUQnO1xuY29uc3QgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfQ09NUExFVEVEID0gJ0NMQUlNX1NFQVJDSF9CWV9UQUdTX0NPTVBMRVRFRCc7XG5jb25zdCBDTEFJTV9TRUFSQ0hfQllfVEFHU19GQUlMRUQgPSAnQ0xBSU1fU0VBUkNIX0JZX1RBR1NfRkFJTEVEJztcbmNvbnN0IENMQUlNX1JFUE9TVF9TVEFSVEVEID0gJ0NMQUlNX1JFUE9TVF9TVEFSVEVEJztcbmNvbnN0IENMQUlNX1JFUE9TVF9DT01QTEVURUQgPSAnQ0xBSU1fUkVQT1NUX0NPTVBMRVRFRCc7XG5jb25zdCBDTEFJTV9SRVBPU1RfRkFJTEVEID0gJ0NMQUlNX1JFUE9TVF9GQUlMRUQnO1xuY29uc3QgQ0xFQVJfUkVQT1NUX0VSUk9SID0gJ0NMRUFSX1JFUE9TVF9FUlJPUic7XG5cbi8vIENvbW1lbnRzXG5jb25zdCBDT01NRU5UX0xJU1RfU1RBUlRFRCA9ICdDT01NRU5UX0xJU1RfU1RBUlRFRCc7XG5jb25zdCBDT01NRU5UX0xJU1RfQ09NUExFVEVEID0gJ0NPTU1FTlRfTElTVF9DT01QTEVURUQnO1xuY29uc3QgQ09NTUVOVF9MSVNUX0ZBSUxFRCA9ICdDT01NRU5UX0xJU1RfRkFJTEVEJztcbmNvbnN0IENPTU1FTlRfQ1JFQVRFX1NUQVJURUQgPSAnQ09NTUVOVF9DUkVBVEVfU1RBUlRFRCc7XG5jb25zdCBDT01NRU5UX0NSRUFURV9DT01QTEVURUQgPSAnQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVEJztcbmNvbnN0IENPTU1FTlRfQ1JFQVRFX0ZBSUxFRCA9ICdDT01NRU5UX0NSRUFURV9GQUlMRUQnO1xuY29uc3QgQ09NTUVOVF9BQkFORE9OX1NUQVJURUQgPSAnQ09NTUVOVF9BQkFORE9OX1NUQVJURUQnO1xuY29uc3QgQ09NTUVOVF9BQkFORE9OX0NPTVBMRVRFRCA9ICdDT01NRU5UX0FCQU5ET05fQ09NUExFVEVEJztcbmNvbnN0IENPTU1FTlRfQUJBTkRPTl9GQUlMRUQgPSAnQ09NTUVOVF9BQkFORE9OX0ZBSUxFRCc7XG5jb25zdCBDT01NRU5UX1VQREFURV9TVEFSVEVEID0gJ0NPTU1FTlRfVVBEQVRFX1NUQVJURUQnO1xuY29uc3QgQ09NTUVOVF9VUERBVEVfQ09NUExFVEVEID0gJ0NPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRCc7XG5jb25zdCBDT01NRU5UX1VQREFURV9GQUlMRUQgPSAnQ09NTUVOVF9VUERBVEVfRkFJTEVEJztcbmNvbnN0IENPTU1FTlRfSElERV9TVEFSVEVEID0gJ0NPTU1FTlRfSElERV9TVEFSVEVEJztcbmNvbnN0IENPTU1FTlRfSElERV9DT01QTEVURUQgPSAnQ09NTUVOVF9ISURFX0NPTVBMRVRFRCc7XG5jb25zdCBDT01NRU5UX0hJREVfRkFJTEVEID0gJ0NPTU1FTlRfSElERV9GQUlMRUQnO1xuXG4vLyBGaWxlc1xuY29uc3QgRklMRV9MSVNUX1NUQVJURUQgPSAnRklMRV9MSVNUX1NUQVJURUQnO1xuY29uc3QgRklMRV9MSVNUX1NVQ0NFRURFRCA9ICdGSUxFX0xJU1RfU1VDQ0VFREVEJztcbmNvbnN0IEZFVENIX0ZJTEVfSU5GT19TVEFSVEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19TVEFSVEVEJztcbmNvbnN0IEZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQgPSAnRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9GSUxFX0lORk9fRkFJTEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19GQUlMRUQnO1xuY29uc3QgTE9BRElOR19WSURFT19TVEFSVEVEID0gJ0xPQURJTkdfVklERU9fU1RBUlRFRCc7XG5jb25zdCBMT0FESU5HX1ZJREVPX0NPTVBMRVRFRCA9ICdMT0FESU5HX1ZJREVPX0NPTVBMRVRFRCc7XG5jb25zdCBMT0FESU5HX1ZJREVPX0ZBSUxFRCA9ICdMT0FESU5HX1ZJREVPX0ZBSUxFRCc7XG5jb25zdCBET1dOTE9BRElOR19TVEFSVEVEID0gJ0RPV05MT0FESU5HX1NUQVJURUQnO1xuY29uc3QgRE9XTkxPQURJTkdfUFJPR1JFU1NFRCA9ICdET1dOTE9BRElOR19QUk9HUkVTU0VEJztcbmNvbnN0IERPV05MT0FESU5HX0NPTVBMRVRFRCA9ICdET1dOTE9BRElOR19DT01QTEVURUQnO1xuY29uc3QgRE9XTkxPQURJTkdfQ0FOQ0VMRUQgPSAnRE9XTkxPQURJTkdfQ0FOQ0VMRUQnO1xuY29uc3QgUExBWV9WSURFT19TVEFSVEVEID0gJ1BMQVlfVklERU9fU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRCA9ICdGRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9BVkFJTEFCSUxJVFlfQ09NUExFVEVEID0gJ0ZFVENIX0FWQUlMQUJJTElUWV9DT01QTEVURUQnO1xuY29uc3QgRklMRV9ERUxFVEUgPSAnRklMRV9ERUxFVEUnO1xuY29uc3QgU0VUX0ZJTEVfTElTVF9TT1JUID0gJ1NFVF9GSUxFX0xJU1RfU09SVCc7XG5jb25zdCBQVVJDSEFTRV9VUklfU1RBUlRFRCA9ICdQVVJDSEFTRV9VUklfU1RBUlRFRCc7XG5jb25zdCBQVVJDSEFTRV9VUklfQ09NUExFVEVEID0gJ1BVUkNIQVNFX1VSSV9DT01QTEVURUQnO1xuY29uc3QgUFVSQ0hBU0VfVVJJX0ZBSUxFRCA9ICdQVVJDSEFTRV9VUklfRkFJTEVEJztcbmNvbnN0IERFTEVURV9QVVJDSEFTRURfVVJJID0gJ0RFTEVURV9QVVJDSEFTRURfVVJJJztcblxuLy8gU2VhcmNoXG5jb25zdCBTRUFSQ0hfU1RBUlQgPSAnU0VBUkNIX1NUQVJUJztcbmNvbnN0IFNFQVJDSF9TVUNDRVNTID0gJ1NFQVJDSF9TVUNDRVNTJztcbmNvbnN0IFNFQVJDSF9GQUlMID0gJ1NFQVJDSF9GQUlMJztcbmNvbnN0IFJFU09MVkVEX1NFQVJDSF9TVEFSVCA9ICdSRVNPTFZFRF9TRUFSQ0hfU1RBUlQnO1xuY29uc3QgUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1MgPSAnUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1MnO1xuY29uc3QgUkVTT0xWRURfU0VBUkNIX0ZBSUwgPSAnUkVTT0xWRURfU0VBUkNIX0ZBSUwnO1xuY29uc3QgVVBEQVRFX1NFQVJDSF9RVUVSWSA9ICdVUERBVEVfU0VBUkNIX1FVRVJZJztcbmNvbnN0IFVQREFURV9TRUFSQ0hfT1BUSU9OUyA9ICdVUERBVEVfU0VBUkNIX09QVElPTlMnO1xuY29uc3QgVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUyA9ICdVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TJztcbmNvbnN0IFNFQVJDSF9GT0NVUyA9ICdTRUFSQ0hfRk9DVVMnO1xuY29uc3QgU0VBUkNIX0JMVVIgPSAnU0VBUkNIX0JMVVInO1xuXG4vLyBTZXR0aW5nc1xuY29uc3QgREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVEID0gJ0RBRU1PTl9TRVRUSU5HU19SRUNFSVZFRCc7XG5jb25zdCBEQUVNT05fU1RBVFVTX1JFQ0VJVkVEID0gJ0RBRU1PTl9TVEFUVVNfUkVDRUlWRUQnO1xuY29uc3QgU0hBUkVEX1BSRUZFUkVOQ0VfU0VUID0gJ1NIQVJFRF9QUkVGRVJFTkNFX1NFVCc7XG5jb25zdCBTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUyA9ICdTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUyc7XG5jb25zdCBDTElFTlRfU0VUVElOR19DSEFOR0VEID0gJ0NMSUVOVF9TRVRUSU5HX0NIQU5HRUQnO1xuY29uc3QgVVBEQVRFX0lTX05JR0hUID0gJ1VQREFURV9JU19OSUdIVCc7XG5cbi8vIFVzZXJcbmNvbnN0IEFVVEhFTlRJQ0FUSU9OX1NUQVJURUQgPSAnQVVUSEVOVElDQVRJT05fU1RBUlRFRCc7XG5jb25zdCBBVVRIRU5USUNBVElPTl9TVUNDRVNTID0gJ0FVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MnO1xuY29uc3QgQVVUSEVOVElDQVRJT05fRkFJTFVSRSA9ICdBVVRIRU5USUNBVElPTl9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfREVDTElORSA9ICdVU0VSX0VNQUlMX0RFQ0xJTkUnO1xuY29uc3QgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX05FV19TVEFSVEVEJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1MgPSAnVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0VNQUlMX05FV19FWElTVFMgPSAnVVNFUl9FTUFJTF9ORVdfRVhJU1RTJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TRVQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU0VUJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSA9ICdVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1JFVFJZJztcbmNvbnN0IFVTRVJfUEhPTkVfUkVTRVQgPSAnVVNFUl9QSE9ORV9SRVNFVCc7XG5jb25zdCBVU0VSX1BIT05FX05FV19TVEFSVEVEID0gJ1VTRVJfUEhPTkVfTkVXX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX05FV19TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0ZFVENIX1NUQVJURUQgPSAnVVNFUl9GRVRDSF9TVEFSVEVEJztcbmNvbnN0IFVTRVJfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0ZFVENIX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9GRVRDSF9GQUlMVVJFID0gJ1VTRVJfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9ORVdfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9ORVdfRkFJTFVSRSc7XG5jb25zdCBGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyA9ICdGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyc7XG5cbi8vIFJld2FyZHNcbmNvbnN0IEZFVENIX1JFV0FSRFNfU1RBUlRFRCA9ICdGRVRDSF9SRVdBUkRTX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfUkVXQVJEU19DT01QTEVURUQgPSAnRkVUQ0hfUkVXQVJEU19DT01QTEVURUQnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX1NUQVJURUQgPSAnQ0xBSU1fUkVXQVJEX1NUQVJURUQnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX1NVQ0NFU1MgPSAnQ0xBSU1fUkVXQVJEX1NVQ0NFU1MnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX0ZBSUxVUkUgPSAnQ0xBSU1fUkVXQVJEX0ZBSUxVUkUnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX0NMRUFSX0VSUk9SID0gJ0NMQUlNX1JFV0FSRF9DTEVBUl9FUlJPUic7XG5jb25zdCBGRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfUkVXQVJEX0NPTlRFTlRfQ09NUExFVEVEJztcblxuLy8gTGFuZ3VhZ2VcbmNvbnN0IERPV05MT0FEX0xBTkdVQUdFX1NVQ0NFRURFRCA9ICdET1dOTE9BRF9MQU5HVUFHRV9TVUNDRUVERUQnO1xuY29uc3QgRE9XTkxPQURfTEFOR1VBR0VfRkFJTEVEID0gJ0RPV05MT0FEX0xBTkdVQUdFX0ZBSUxFRCc7XG5cbi8vIFN1YnNjcmlwdGlvbnNcbmNvbnN0IENIQU5ORUxfU1VCU0NSSUJFID0gJ0NIQU5ORUxfU1VCU0NSSUJFJztcbmNvbnN0IENIQU5ORUxfVU5TVUJTQ1JJQkUgPSAnQ0hBTk5FTF9VTlNVQlNDUklCRSc7XG5jb25zdCBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TID0gJ0hBU19GRVRDSEVEX1NVQlNDUklQVElPTlMnO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9MQVRFU1QgPSAnU0VUX1NVQlNDUklQVElPTl9MQVRFU1QnO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT04gPSAnU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT04nO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TID0gJ1NFVF9TVUJTQ1JJUFRJT05fTk9USUZJQ0FUSU9OUyc7XG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCA9ICdDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCc7XG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVEID0gJ0NIRUNLX1NVQlNDUklQVElPTl9DT01QTEVURUQnO1xuY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUgPSAnQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUnO1xuXG4vLyBQdWJsaXNoaW5nXG5jb25zdCBDTEVBUl9QVUJMSVNIID0gJ0NMRUFSX1BVQkxJU0gnO1xuY29uc3QgVVBEQVRFX1BVQkxJU0hfRk9STSA9ICdVUERBVEVfUFVCTElTSF9GT1JNJztcbmNvbnN0IFBVQkxJU0hfU1RBUlQgPSAnUFVCTElTSF9TVEFSVCc7XG5jb25zdCBQVUJMSVNIX1NVQ0NFU1MgPSAnUFVCTElTSF9TVUNDRVNTJztcbmNvbnN0IFBVQkxJU0hfRkFJTCA9ICdQVUJMSVNIX0ZBSUwnO1xuY29uc3QgQ0xFQVJfUFVCTElTSF9FUlJPUiA9ICdDTEVBUl9QVUJMSVNIX0VSUk9SJztcbmNvbnN0IFJFTU9WRV9QRU5ESU5HX1BVQkxJU0ggPSAnUkVNT1ZFX1BFTkRJTkdfUFVCTElTSCc7XG5jb25zdCBET19QUkVQQVJFX0VESVQgPSAnRE9fUFJFUEFSRV9FRElUJztcblxuLy8gTm90aWZpY2F0aW9uc1xuY29uc3QgQ1JFQVRFX05PVElGSUNBVElPTiA9ICdDUkVBVEVfTk9USUZJQ0FUSU9OJztcbmNvbnN0IEVESVRfTk9USUZJQ0FUSU9OID0gJ0VESVRfTk9USUZJQ0FUSU9OJztcbmNvbnN0IERFTEVURV9OT1RJRklDQVRJT04gPSAnREVMRVRFX05PVElGSUNBVElPTic7XG5jb25zdCBESVNNSVNTX05PVElGSUNBVElPTiA9ICdESVNNSVNTX05PVElGSUNBVElPTic7XG5jb25zdCBDUkVBVEVfVE9BU1QgPSAnQ1JFQVRFX1RPQVNUJztcbmNvbnN0IERJU01JU1NfVE9BU1QgPSAnRElTTUlTU19UT0FTVCc7XG5jb25zdCBDUkVBVEVfRVJST1IgPSAnQ1JFQVRFX0VSUk9SJztcbmNvbnN0IERJU01JU1NfRVJST1IgPSAnRElTTUlTU19FUlJPUic7XG5cbmNvbnN0IEZFVENIX0RBVEUgPSAnRkVUQ0hfREFURSc7XG5cbi8vIENvc3QgaW5mb1xuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQgPSAnRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX0NPTVBMRVRFRCA9ICdGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX0NPU1RfSU5GT19GQUlMRUQgPSAnRkVUQ0hfQ09TVF9JTkZPX0ZBSUxFRCc7XG5cbi8vIFRhZ3NcbmNvbnN0IFRPR0dMRV9UQUdfRk9MTE9XID0gJ1RPR0dMRV9UQUdfRk9MTE9XJztcbmNvbnN0IFRBR19BREQgPSAnVEFHX0FERCc7XG5jb25zdCBUQUdfREVMRVRFID0gJ1RBR19ERUxFVEUnO1xuXG4vLyBCbG9ja2VkIENoYW5uZWxzXG5jb25zdCBUT0dHTEVfQkxPQ0tfQ0hBTk5FTCA9ICdUT0dHTEVfQkxPQ0tfQ0hBTk5FTCc7XG5cbi8vIFN5bmNcbmNvbnN0IFVTRVJfU1RBVEVfUE9QVUxBVEUgPSAnVVNFUl9TVEFURV9QT1BVTEFURSc7XG5cbnZhciBhY3Rpb25fdHlwZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIFdJTkRPV19GT0NVU0VEOiBXSU5ET1dfRk9DVVNFRCxcbiAgREFFTU9OX1JFQURZOiBEQUVNT05fUkVBRFksXG4gIERBRU1PTl9WRVJTSU9OX01BVENIOiBEQUVNT05fVkVSU0lPTl9NQVRDSCxcbiAgREFFTU9OX1ZFUlNJT05fTUlTTUFUQ0g6IERBRU1PTl9WRVJTSU9OX01JU01BVENILFxuICBWT0xVTUVfQ0hBTkdFRDogVk9MVU1FX0NIQU5HRUQsXG4gIFNFVF9XRUxDT01FX1ZFUlNJT046IFNFVF9XRUxDT01FX1ZFUlNJT04sXG4gIFNFVF9BTExPV19BTkFMWVRJQ1M6IFNFVF9BTExPV19BTkFMWVRJQ1MsXG4gIENIQU5HRV9BRlRFUl9BVVRIX1BBVEg6IENIQU5HRV9BRlRFUl9BVVRIX1BBVEgsXG4gIFdJTkRPV19TQ1JPTExFRDogV0lORE9XX1NDUk9MTEVELFxuICBISVNUT1JZX05BVklHQVRFOiBISVNUT1JZX05BVklHQVRFLFxuICBVUEdSQURFX0NBTkNFTExFRDogVVBHUkFERV9DQU5DRUxMRUQsXG4gIERPV05MT0FEX1VQR1JBREU6IERPV05MT0FEX1VQR1JBREUsXG4gIFVQR1JBREVfRE9XTkxPQURfU1RBUlRFRDogVVBHUkFERV9ET1dOTE9BRF9TVEFSVEVELFxuICBVUEdSQURFX0RPV05MT0FEX0NPTVBMRVRFRDogVVBHUkFERV9ET1dOTE9BRF9DT01QTEVURUQsXG4gIFVQR1JBREVfRE9XTkxPQURfUFJPR1JFU1NFRDogVVBHUkFERV9ET1dOTE9BRF9QUk9HUkVTU0VELFxuICBDSEVDS19VUEdSQURFX0FWQUlMQUJMRTogQ0hFQ0tfVVBHUkFERV9BVkFJTEFCTEUsXG4gIENIRUNLX1VQR1JBREVfU1RBUlQ6IENIRUNLX1VQR1JBREVfU1RBUlQsXG4gIENIRUNLX1VQR1JBREVfU1VDQ0VTUzogQ0hFQ0tfVVBHUkFERV9TVUNDRVNTLFxuICBDSEVDS19VUEdSQURFX0ZBSUw6IENIRUNLX1VQR1JBREVfRkFJTCxcbiAgQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkU6IENIRUNLX1VQR1JBREVfU1VCU0NSSUJFLFxuICBVUERBVEVfVkVSU0lPTjogVVBEQVRFX1ZFUlNJT04sXG4gIFVQREFURV9SRU1PVEVfVkVSU0lPTjogVVBEQVRFX1JFTU9URV9WRVJTSU9OLFxuICBTS0lQX1VQR1JBREU6IFNLSVBfVVBHUkFERSxcbiAgU1RBUlRfVVBHUkFERTogU1RBUlRfVVBHUkFERSxcbiAgQVVUT19VUERBVEVfREVDTElORUQ6IEFVVE9fVVBEQVRFX0RFQ0xJTkVELFxuICBBVVRPX1VQREFURV9ET1dOTE9BREVEOiBBVVRPX1VQREFURV9ET1dOTE9BREVELFxuICBDTEVBUl9VUEdSQURFX1RJTUVSOiBDTEVBUl9VUEdSQURFX1RJTUVSLFxuICBHRVRfTkVXX0FERFJFU1NfU1RBUlRFRDogR0VUX05FV19BRERSRVNTX1NUQVJURUQsXG4gIEdFVF9ORVdfQUREUkVTU19DT01QTEVURUQ6IEdFVF9ORVdfQUREUkVTU19DT01QTEVURUQsXG4gIEZFVENIX1RSQU5TQUNUSU9OU19TVEFSVEVEOiBGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCxcbiAgRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRDogRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRCxcbiAgRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRDogRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRCxcbiAgRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVEOiBGRVRDSF9TVVBQT1JUU19DT01QTEVURUQsXG4gIEFCQU5ET05fU1VQUE9SVF9TVEFSVEVEOiBBQkFORE9OX1NVUFBPUlRfU1RBUlRFRCxcbiAgQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRDogQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRCxcbiAgQUJBTkRPTl9DTEFJTV9TVVBQT1JUX1NUQVJURUQ6IEFCQU5ET05fQ0xBSU1fU1VQUE9SVF9TVEFSVEVELFxuICBBQkFORE9OX0NMQUlNX1NVUFBPUlRfQ09NUExFVEVEOiBBQkFORE9OX0NMQUlNX1NVUFBPUlRfQ09NUExFVEVELFxuICBBQkFORE9OX0NMQUlNX1NVUFBPUlRfRkFJTEVEOiBBQkFORE9OX0NMQUlNX1NVUFBPUlRfRkFJTEVELFxuICBBQkFORE9OX0NMQUlNX1NVUFBPUlRfUFJFVklFVzogQUJBTkRPTl9DTEFJTV9TVVBQT1JUX1BSRVZJRVcsXG4gIFBFTkRJTkdfU1VQUE9SVFNfVVBEQVRFRDogUEVORElOR19TVVBQT1JUU19VUERBVEVELFxuICBVUERBVEVfQkFMQU5DRTogVVBEQVRFX0JBTEFOQ0UsXG4gIFVQREFURV9UT1RBTF9CQUxBTkNFOiBVUERBVEVfVE9UQUxfQkFMQU5DRSxcbiAgQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURUQ6IENIRUNLX0FERFJFU1NfSVNfTUlORV9TVEFSVEVELFxuICBDSEVDS19BRERSRVNTX0lTX01JTkVfQ09NUExFVEVEOiBDSEVDS19BRERSRVNTX0lTX01JTkVfQ09NUExFVEVELFxuICBTRU5EX1RSQU5TQUNUSU9OX1NUQVJURUQ6IFNFTkRfVFJBTlNBQ1RJT05fU1RBUlRFRCxcbiAgU0VORF9UUkFOU0FDVElPTl9DT01QTEVURUQ6IFNFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVELFxuICBTRU5EX1RSQU5TQUNUSU9OX0ZBSUxFRDogU0VORF9UUkFOU0FDVElPTl9GQUlMRUQsXG4gIFNVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRDogU1VQUE9SVF9UUkFOU0FDVElPTl9TVEFSVEVELFxuICBTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRDogU1VQUE9SVF9UUkFOU0FDVElPTl9DT01QTEVURUQsXG4gIFNVUFBPUlRfVFJBTlNBQ1RJT05fRkFJTEVEOiBTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRCxcbiAgQ0xFQVJfU1VQUE9SVF9UUkFOU0FDVElPTjogQ0xFQVJfU1VQUE9SVF9UUkFOU0FDVElPTixcbiAgV0FMTEVUX0VOQ1JZUFRfU1RBUlQ6IFdBTExFVF9FTkNSWVBUX1NUQVJULFxuICBXQUxMRVRfRU5DUllQVF9DT01QTEVURUQ6IFdBTExFVF9FTkNSWVBUX0NPTVBMRVRFRCxcbiAgV0FMTEVUX0VOQ1JZUFRfRkFJTEVEOiBXQUxMRVRfRU5DUllQVF9GQUlMRUQsXG4gIFdBTExFVF9VTkxPQ0tfU1RBUlQ6IFdBTExFVF9VTkxPQ0tfU1RBUlQsXG4gIFdBTExFVF9VTkxPQ0tfQ09NUExFVEVEOiBXQUxMRVRfVU5MT0NLX0NPTVBMRVRFRCxcbiAgV0FMTEVUX1VOTE9DS19GQUlMRUQ6IFdBTExFVF9VTkxPQ0tfRkFJTEVELFxuICBXQUxMRVRfREVDUllQVF9TVEFSVDogV0FMTEVUX0RFQ1JZUFRfU1RBUlQsXG4gIFdBTExFVF9ERUNSWVBUX0NPTVBMRVRFRDogV0FMTEVUX0RFQ1JZUFRfQ09NUExFVEVELFxuICBXQUxMRVRfREVDUllQVF9GQUlMRUQ6IFdBTExFVF9ERUNSWVBUX0ZBSUxFRCxcbiAgV0FMTEVUX0xPQ0tfU1RBUlQ6IFdBTExFVF9MT0NLX1NUQVJULFxuICBXQUxMRVRfTE9DS19DT01QTEVURUQ6IFdBTExFVF9MT0NLX0NPTVBMRVRFRCxcbiAgV0FMTEVUX0xPQ0tfRkFJTEVEOiBXQUxMRVRfTE9DS19GQUlMRUQsXG4gIFdBTExFVF9TVEFUVVNfU1RBUlQ6IFdBTExFVF9TVEFUVVNfU1RBUlQsXG4gIFdBTExFVF9TVEFUVVNfQ09NUExFVEVEOiBXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRCxcbiAgV0FMTEVUX1JFU1RBUlQ6IFdBTExFVF9SRVNUQVJULFxuICBXQUxMRVRfUkVTVEFSVF9DT01QTEVURUQ6IFdBTExFVF9SRVNUQVJUX0NPTVBMRVRFRCxcbiAgU0VUX1RSQU5TQUNUSU9OX0xJU1RfRklMVEVSOiBTRVRfVFJBTlNBQ1RJT05fTElTVF9GSUxURVIsXG4gIFVQREFURV9DVVJSRU5UX0hFSUdIVDogVVBEQVRFX0NVUlJFTlRfSEVJR0hULFxuICBTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5UOiBTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5ULFxuICBTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQUREUkVTUzogU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1MsXG4gIFJFU09MVkVfVVJJU19TVEFSVEVEOiBSRVNPTFZFX1VSSVNfU1RBUlRFRCxcbiAgUkVTT0xWRV9VUklTX0NPTVBMRVRFRDogUkVTT0xWRV9VUklTX0NPTVBMRVRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRDogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQsXG4gIEZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVEOiBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCxcbiAgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRDogRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCxcbiAgQUJBTkRPTl9DTEFJTV9TVEFSVEVEOiBBQkFORE9OX0NMQUlNX1NUQVJURUQsXG4gIEFCQU5ET05fQ0xBSU1fU1VDQ0VFREVEOiBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQ6IEZFVENIX0NIQU5ORUxfTElTVF9TVEFSVEVELFxuICBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEOiBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVELFxuICBDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEOiBDUkVBVEVfQ0hBTk5FTF9TVEFSVEVELFxuICBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQ6IENSRUFURV9DSEFOTkVMX0NPTVBMRVRFRCxcbiAgQ1JFQVRFX0NIQU5ORUxfRkFJTEVEOiBDUkVBVEVfQ0hBTk5FTF9GQUlMRUQsXG4gIFVQREFURV9DSEFOTkVMX1NUQVJURUQ6IFVQREFURV9DSEFOTkVMX1NUQVJURUQsXG4gIFVQREFURV9DSEFOTkVMX0NPTVBMRVRFRDogVVBEQVRFX0NIQU5ORUxfQ09NUExFVEVELFxuICBVUERBVEVfQ0hBTk5FTF9GQUlMRUQ6IFVQREFURV9DSEFOTkVMX0ZBSUxFRCxcbiAgSU1QT1JUX0NIQU5ORUxfU1RBUlRFRDogSU1QT1JUX0NIQU5ORUxfU1RBUlRFRCxcbiAgSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVEOiBJTVBPUlRfQ0hBTk5FTF9DT01QTEVURUQsXG4gIElNUE9SVF9DSEFOTkVMX0ZBSUxFRDogSU1QT1JUX0NIQU5ORUxfRkFJTEVELFxuICBQVUJMSVNIX1NUQVJURUQ6IFBVQkxJU0hfU1RBUlRFRCxcbiAgUFVCTElTSF9DT01QTEVURUQ6IFBVQkxJU0hfQ09NUExFVEVELFxuICBQVUJMSVNIX0ZBSUxFRDogUFVCTElTSF9GQUlMRUQsXG4gIFNFVF9QTEFZSU5HX1VSSTogU0VUX1BMQVlJTkdfVVJJLFxuICBTRVRfQ09OVEVOVF9QT1NJVElPTjogU0VUX0NPTlRFTlRfUE9TSVRJT04sXG4gIFNFVF9DT05URU5UX0xBU1RfVklFV0VEOiBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCxcbiAgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSTogQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSxcbiAgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTDogQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTCxcbiAgQ0xBSU1fU0VBUkNIX1NUQVJURUQ6IENMQUlNX1NFQVJDSF9TVEFSVEVELFxuICBDTEFJTV9TRUFSQ0hfQ09NUExFVEVEOiBDTEFJTV9TRUFSQ0hfQ09NUExFVEVELFxuICBDTEFJTV9TRUFSQ0hfRkFJTEVEOiBDTEFJTV9TRUFSQ0hfRkFJTEVELFxuICBDTEFJTV9TRUFSQ0hfQllfVEFHU19TVEFSVEVEOiBDTEFJTV9TRUFSQ0hfQllfVEFHU19TVEFSVEVELFxuICBDTEFJTV9TRUFSQ0hfQllfVEFHU19DT01QTEVURUQ6IENMQUlNX1NFQVJDSF9CWV9UQUdTX0NPTVBMRVRFRCxcbiAgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfRkFJTEVEOiBDTEFJTV9TRUFSQ0hfQllfVEFHU19GQUlMRUQsXG4gIENMQUlNX1JFUE9TVF9TVEFSVEVEOiBDTEFJTV9SRVBPU1RfU1RBUlRFRCxcbiAgQ0xBSU1fUkVQT1NUX0NPTVBMRVRFRDogQ0xBSU1fUkVQT1NUX0NPTVBMRVRFRCxcbiAgQ0xBSU1fUkVQT1NUX0ZBSUxFRDogQ0xBSU1fUkVQT1NUX0ZBSUxFRCxcbiAgQ0xFQVJfUkVQT1NUX0VSUk9SOiBDTEVBUl9SRVBPU1RfRVJST1IsXG4gIENPTU1FTlRfTElTVF9TVEFSVEVEOiBDT01NRU5UX0xJU1RfU1RBUlRFRCxcbiAgQ09NTUVOVF9MSVNUX0NPTVBMRVRFRDogQ09NTUVOVF9MSVNUX0NPTVBMRVRFRCxcbiAgQ09NTUVOVF9MSVNUX0ZBSUxFRDogQ09NTUVOVF9MSVNUX0ZBSUxFRCxcbiAgQ09NTUVOVF9DUkVBVEVfU1RBUlRFRDogQ09NTUVOVF9DUkVBVEVfU1RBUlRFRCxcbiAgQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVEOiBDT01NRU5UX0NSRUFURV9DT01QTEVURUQsXG4gIENPTU1FTlRfQ1JFQVRFX0ZBSUxFRDogQ09NTUVOVF9DUkVBVEVfRkFJTEVELFxuICBDT01NRU5UX0FCQU5ET05fU1RBUlRFRDogQ09NTUVOVF9BQkFORE9OX1NUQVJURUQsXG4gIENPTU1FTlRfQUJBTkRPTl9DT01QTEVURUQ6IENPTU1FTlRfQUJBTkRPTl9DT01QTEVURUQsXG4gIENPTU1FTlRfQUJBTkRPTl9GQUlMRUQ6IENPTU1FTlRfQUJBTkRPTl9GQUlMRUQsXG4gIENPTU1FTlRfVVBEQVRFX1NUQVJURUQ6IENPTU1FTlRfVVBEQVRFX1NUQVJURUQsXG4gIENPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRDogQ09NTUVOVF9VUERBVEVfQ09NUExFVEVELFxuICBDT01NRU5UX1VQREFURV9GQUlMRUQ6IENPTU1FTlRfVVBEQVRFX0ZBSUxFRCxcbiAgQ09NTUVOVF9ISURFX1NUQVJURUQ6IENPTU1FTlRfSElERV9TVEFSVEVELFxuICBDT01NRU5UX0hJREVfQ09NUExFVEVEOiBDT01NRU5UX0hJREVfQ09NUExFVEVELFxuICBDT01NRU5UX0hJREVfRkFJTEVEOiBDT01NRU5UX0hJREVfRkFJTEVELFxuICBGSUxFX0xJU1RfU1RBUlRFRDogRklMRV9MSVNUX1NUQVJURUQsXG4gIEZJTEVfTElTVF9TVUNDRUVERUQ6IEZJTEVfTElTVF9TVUNDRUVERUQsXG4gIEZFVENIX0ZJTEVfSU5GT19TVEFSVEVEOiBGRVRDSF9GSUxFX0lORk9fU1RBUlRFRCxcbiAgRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRDogRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRCxcbiAgRkVUQ0hfRklMRV9JTkZPX0ZBSUxFRDogRkVUQ0hfRklMRV9JTkZPX0ZBSUxFRCxcbiAgTE9BRElOR19WSURFT19TVEFSVEVEOiBMT0FESU5HX1ZJREVPX1NUQVJURUQsXG4gIExPQURJTkdfVklERU9fQ09NUExFVEVEOiBMT0FESU5HX1ZJREVPX0NPTVBMRVRFRCxcbiAgTE9BRElOR19WSURFT19GQUlMRUQ6IExPQURJTkdfVklERU9fRkFJTEVELFxuICBET1dOTE9BRElOR19TVEFSVEVEOiBET1dOTE9BRElOR19TVEFSVEVELFxuICBET1dOTE9BRElOR19QUk9HUkVTU0VEOiBET1dOTE9BRElOR19QUk9HUkVTU0VELFxuICBET1dOTE9BRElOR19DT01QTEVURUQ6IERPV05MT0FESU5HX0NPTVBMRVRFRCxcbiAgRE9XTkxPQURJTkdfQ0FOQ0VMRUQ6IERPV05MT0FESU5HX0NBTkNFTEVELFxuICBQTEFZX1ZJREVPX1NUQVJURUQ6IFBMQVlfVklERU9fU1RBUlRFRCxcbiAgRkVUQ0hfQVZBSUxBQklMSVRZX1NUQVJURUQ6IEZFVENIX0FWQUlMQUJJTElUWV9TVEFSVEVELFxuICBGRVRDSF9BVkFJTEFCSUxJVFlfQ09NUExFVEVEOiBGRVRDSF9BVkFJTEFCSUxJVFlfQ09NUExFVEVELFxuICBGSUxFX0RFTEVURTogRklMRV9ERUxFVEUsXG4gIFNFVF9GSUxFX0xJU1RfU09SVDogU0VUX0ZJTEVfTElTVF9TT1JULFxuICBQVVJDSEFTRV9VUklfU1RBUlRFRDogUFVSQ0hBU0VfVVJJX1NUQVJURUQsXG4gIFBVUkNIQVNFX1VSSV9DT01QTEVURUQ6IFBVUkNIQVNFX1VSSV9DT01QTEVURUQsXG4gIFBVUkNIQVNFX1VSSV9GQUlMRUQ6IFBVUkNIQVNFX1VSSV9GQUlMRUQsXG4gIERFTEVURV9QVVJDSEFTRURfVVJJOiBERUxFVEVfUFVSQ0hBU0VEX1VSSSxcbiAgU0VBUkNIX1NUQVJUOiBTRUFSQ0hfU1RBUlQsXG4gIFNFQVJDSF9TVUNDRVNTOiBTRUFSQ0hfU1VDQ0VTUyxcbiAgU0VBUkNIX0ZBSUw6IFNFQVJDSF9GQUlMLFxuICBSRVNPTFZFRF9TRUFSQ0hfU1RBUlQ6IFJFU09MVkVEX1NFQVJDSF9TVEFSVCxcbiAgUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1M6IFJFU09MVkVEX1NFQVJDSF9TVUNDRVNTLFxuICBSRVNPTFZFRF9TRUFSQ0hfRkFJTDogUkVTT0xWRURfU0VBUkNIX0ZBSUwsXG4gIFVQREFURV9TRUFSQ0hfUVVFUlk6IFVQREFURV9TRUFSQ0hfUVVFUlksXG4gIFVQREFURV9TRUFSQ0hfT1BUSU9OUzogVVBEQVRFX1NFQVJDSF9PUFRJT05TLFxuICBVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TOiBVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TLFxuICBTRUFSQ0hfRk9DVVM6IFNFQVJDSF9GT0NVUyxcbiAgU0VBUkNIX0JMVVI6IFNFQVJDSF9CTFVSLFxuICBEQUVNT05fU0VUVElOR1NfUkVDRUlWRUQ6IERBRU1PTl9TRVRUSU5HU19SRUNFSVZFRCxcbiAgREFFTU9OX1NUQVRVU19SRUNFSVZFRDogREFFTU9OX1NUQVRVU19SRUNFSVZFRCxcbiAgU0hBUkVEX1BSRUZFUkVOQ0VfU0VUOiBTSEFSRURfUFJFRkVSRU5DRV9TRVQsXG4gIFNBVkVfQ1VTVE9NX1dBTExFVF9TRVJWRVJTOiBTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUyxcbiAgQ0xJRU5UX1NFVFRJTkdfQ0hBTkdFRDogQ0xJRU5UX1NFVFRJTkdfQ0hBTkdFRCxcbiAgVVBEQVRFX0lTX05JR0hUOiBVUERBVEVfSVNfTklHSFQsXG4gIEFVVEhFTlRJQ0FUSU9OX1NUQVJURUQ6IEFVVEhFTlRJQ0FUSU9OX1NUQVJURUQsXG4gIEFVVEhFTlRJQ0FUSU9OX1NVQ0NFU1M6IEFVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MsXG4gIEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkU6IEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUsXG4gIFVTRVJfRU1BSUxfREVDTElORTogVVNFUl9FTUFJTF9ERUNMSU5FLFxuICBVU0VSX0VNQUlMX05FV19TVEFSVEVEOiBVU0VSX0VNQUlMX05FV19TVEFSVEVELFxuICBVU0VSX0VNQUlMX05FV19TVUNDRVNTOiBVU0VSX0VNQUlMX05FV19TVUNDRVNTLFxuICBVU0VSX0VNQUlMX05FV19FWElTVFM6IFVTRVJfRU1BSUxfTkVXX0VYSVNUUyxcbiAgVVNFUl9FTUFJTF9ORVdfRkFJTFVSRTogVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSxcbiAgVVNFUl9FTUFJTF9WRVJJRllfU0VUOiBVU0VSX0VNQUlMX1ZFUklGWV9TRVQsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQ6IFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1M6IFVTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX0ZBSUxVUkU6IFVTRVJfRU1BSUxfVkVSSUZZX0ZBSUxVUkUsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZOiBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWSxcbiAgVVNFUl9QSE9ORV9SRVNFVDogVVNFUl9QSE9ORV9SRVNFVCxcbiAgVVNFUl9QSE9ORV9ORVdfU1RBUlRFRDogVVNFUl9QSE9ORV9ORVdfU1RBUlRFRCxcbiAgVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUzogVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyxcbiAgVVNFUl9QSE9ORV9ORVdfRkFJTFVSRTogVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSxcbiAgVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRDogVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRCxcbiAgVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUzogVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUyxcbiAgVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRTogVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRDogVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRCxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUzogVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRTogVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSxcbiAgVVNFUl9GRVRDSF9TVEFSVEVEOiBVU0VSX0ZFVENIX1NUQVJURUQsXG4gIFVTRVJfRkVUQ0hfU1VDQ0VTUzogVVNFUl9GRVRDSF9TVUNDRVNTLFxuICBVU0VSX0ZFVENIX0ZBSUxVUkU6IFVTRVJfRkVUQ0hfRkFJTFVSRSxcbiAgVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURUQ6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVELFxuICBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUzogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NVQ0NFU1MsXG4gIFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSxcbiAgVVNFUl9JTlZJVEVfTkVXX1NUQVJURUQ6IFVTRVJfSU5WSVRFX05FV19TVEFSVEVELFxuICBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUzogVVNFUl9JTlZJVEVfTkVXX1NVQ0NFU1MsXG4gIFVTRVJfSU5WSVRFX05FV19GQUlMVVJFOiBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSxcbiAgRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1M6IEZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTLFxuICBGRVRDSF9SRVdBUkRTX1NUQVJURUQ6IEZFVENIX1JFV0FSRFNfU1RBUlRFRCxcbiAgRkVUQ0hfUkVXQVJEU19DT01QTEVURUQ6IEZFVENIX1JFV0FSRFNfQ09NUExFVEVELFxuICBDTEFJTV9SRVdBUkRfU1RBUlRFRDogQ0xBSU1fUkVXQVJEX1NUQVJURUQsXG4gIENMQUlNX1JFV0FSRF9TVUNDRVNTOiBDTEFJTV9SRVdBUkRfU1VDQ0VTUyxcbiAgQ0xBSU1fUkVXQVJEX0ZBSUxVUkU6IENMQUlNX1JFV0FSRF9GQUlMVVJFLFxuICBDTEFJTV9SRVdBUkRfQ0xFQVJfRVJST1I6IENMQUlNX1JFV0FSRF9DTEVBUl9FUlJPUixcbiAgRkVUQ0hfUkVXQVJEX0NPTlRFTlRfQ09NUExFVEVEOiBGRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQsXG4gIERPV05MT0FEX0xBTkdVQUdFX1NVQ0NFRURFRDogRE9XTkxPQURfTEFOR1VBR0VfU1VDQ0VFREVELFxuICBET1dOTE9BRF9MQU5HVUFHRV9GQUlMRUQ6IERPV05MT0FEX0xBTkdVQUdFX0ZBSUxFRCxcbiAgQ0hBTk5FTF9TVUJTQ1JJQkU6IENIQU5ORUxfU1VCU0NSSUJFLFxuICBDSEFOTkVMX1VOU1VCU0NSSUJFOiBDSEFOTkVMX1VOU1VCU0NSSUJFLFxuICBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TOiBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TLFxuICBTRVRfU1VCU0NSSVBUSU9OX0xBVEVTVDogU0VUX1NVQlNDUklQVElPTl9MQVRFU1QsXG4gIFNFVF9TVUJTQ1JJUFRJT05fTk9USUZJQ0FUSU9OOiBTRVRfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTixcbiAgU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TOiBTRVRfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTlMsXG4gIENIRUNLX1NVQlNDUklQVElPTl9TVEFSVEVEOiBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCxcbiAgQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRDogQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRCxcbiAgQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkU6IENIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFLFxuICBDTEVBUl9QVUJMSVNIOiBDTEVBUl9QVUJMSVNILFxuICBVUERBVEVfUFVCTElTSF9GT1JNOiBVUERBVEVfUFVCTElTSF9GT1JNLFxuICBQVUJMSVNIX1NUQVJUOiBQVUJMSVNIX1NUQVJULFxuICBQVUJMSVNIX1NVQ0NFU1M6IFBVQkxJU0hfU1VDQ0VTUyxcbiAgUFVCTElTSF9GQUlMOiBQVUJMSVNIX0ZBSUwsXG4gIENMRUFSX1BVQkxJU0hfRVJST1I6IENMRUFSX1BVQkxJU0hfRVJST1IsXG4gIFJFTU9WRV9QRU5ESU5HX1BVQkxJU0g6IFJFTU9WRV9QRU5ESU5HX1BVQkxJU0gsXG4gIERPX1BSRVBBUkVfRURJVDogRE9fUFJFUEFSRV9FRElULFxuICBDUkVBVEVfTk9USUZJQ0FUSU9OOiBDUkVBVEVfTk9USUZJQ0FUSU9OLFxuICBFRElUX05PVElGSUNBVElPTjogRURJVF9OT1RJRklDQVRJT04sXG4gIERFTEVURV9OT1RJRklDQVRJT046IERFTEVURV9OT1RJRklDQVRJT04sXG4gIERJU01JU1NfTk9USUZJQ0FUSU9OOiBESVNNSVNTX05PVElGSUNBVElPTixcbiAgQ1JFQVRFX1RPQVNUOiBDUkVBVEVfVE9BU1QsXG4gIERJU01JU1NfVE9BU1Q6IERJU01JU1NfVE9BU1QsXG4gIENSRUFURV9FUlJPUjogQ1JFQVRFX0VSUk9SLFxuICBESVNNSVNTX0VSUk9SOiBESVNNSVNTX0VSUk9SLFxuICBGRVRDSF9EQVRFOiBGRVRDSF9EQVRFLFxuICBGRVRDSF9DT1NUX0lORk9fU1RBUlRFRDogRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQsXG4gIEZFVENIX0NPU1RfSU5GT19DT01QTEVURUQ6IEZFVENIX0NPU1RfSU5GT19DT01QTEVURUQsXG4gIEZFVENIX0NPU1RfSU5GT19GQUlMRUQ6IEZFVENIX0NPU1RfSU5GT19GQUlMRUQsXG4gIFRPR0dMRV9UQUdfRk9MTE9XOiBUT0dHTEVfVEFHX0ZPTExPVyxcbiAgVEFHX0FERDogVEFHX0FERCxcbiAgVEFHX0RFTEVURTogVEFHX0RFTEVURSxcbiAgVE9HR0xFX0JMT0NLX0NIQU5ORUw6IFRPR0dMRV9CTE9DS19DSEFOTkVMLFxuICBVU0VSX1NUQVRFX1BPUFVMQVRFOiBVU0VSX1NUQVRFX1BPUFVMQVRFXG59KTtcblxuY29uc3QgQ0NfTElDRU5TRVMgPSBbe1xuICB2YWx1ZTogJ0NyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwnLFxuICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL2xlZ2FsY29kZSdcbn0sIHtcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwnLFxuICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wL2xlZ2FsY29kZSdcbn0sIHtcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vRGVyaXZhdGl2ZXMgNC4wIEludGVybmF0aW9uYWwnLFxuICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmQvNC4wL2xlZ2FsY29kZSdcbn0sIHtcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgNC4wIEludGVybmF0aW9uYWwnLFxuICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvNC4wL2xlZ2FsY29kZSdcbn0sIHtcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCcsXG4gIHVybDogJ2h0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1zYS80LjAvbGVnYWxjb2RlJ1xufSwge1xuICB2YWx1ZTogJ0NyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2YXRpdmVzIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC9sZWdhbGNvZGUnXG59XTtcblxuY29uc3QgTk9ORSA9ICdOb25lJztcbmNvbnN0IFBVQkxJQ19ET01BSU4gPSAnUHVibGljIERvbWFpbic7XG5jb25zdCBPVEhFUiA9ICdvdGhlcic7XG5jb25zdCBDT1BZUklHSFQgPSAnY29weXJpZ2h0JztcblxudmFyIGxpY2Vuc2VzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBDQ19MSUNFTlNFUzogQ0NfTElDRU5TRVMsXG4gIE5PTkU6IE5PTkUsXG4gIFBVQkxJQ19ET01BSU46IFBVQkxJQ19ET01BSU4sXG4gIE9USEVSOiBPVEhFUixcbiAgQ09QWVJJR0hUOiBDT1BZUklHSFRcbn0pO1xuXG5jb25zdCBBVVRIID0gJ2F1dGgnO1xuY29uc3QgQkFDS1VQID0gJ2JhY2t1cCc7XG5jb25zdCBDSEFOTkVMID0gJ2NoYW5uZWwnO1xuY29uc3QgRElTQ09WRVIgPSAnZGlzY292ZXInO1xuY29uc3QgRklMRSA9ICdmaWxlJztcbmNvbnN0IERPV05MT0FERUQgPSAnZG93bmxvYWRlZCc7XG5jb25zdCBQVUJMSVNIRUQgPSAncHVibGlzaGVkJztcbmNvbnN0IEdFVF9DUkVESVRTID0gJ2dldGNyZWRpdHMnO1xuY29uc3QgSEVMUCA9ICdoZWxwJztcbmNvbnN0IElOVklURSA9ICdpbnZpdGUnO1xuY29uc3QgUFVCTElTSCA9ICdwdWJsaXNoJztcbmNvbnN0IFJFUE9SVCA9ICdyZXBvcnQnO1xuY29uc3QgUkVXQVJEUyA9ICdyZXdhcmRzJztcbmNvbnN0IFNFQVJDSCA9ICdzZWFyY2gnO1xuY29uc3QgU0VORF9DUkVESVRTID0gJ3NlbmQnO1xuY29uc3QgU0VUVElOR1MgPSAnc2V0dGluZ3MnO1xuY29uc3QgU0hPVyA9ICdzaG93JztcbmNvbnN0IFNVQlNDUklQVElPTlMgPSAnc3Vic2NyaXB0aW9ucyc7XG5jb25zdCBUUkFOU0FDVElPTl9ISVNUT1JZID0gJ2hpc3RvcnknO1xuY29uc3QgSElTVE9SWSA9ICd1c2VyX2hpc3RvcnknO1xuY29uc3QgV0FMTEVUID0gJ3dhbGxldCc7XG5cbnZhciBwYWdlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgQVVUSDogQVVUSCxcbiAgQkFDS1VQOiBCQUNLVVAsXG4gIENIQU5ORUw6IENIQU5ORUwsXG4gIERJU0NPVkVSOiBESVNDT1ZFUixcbiAgRklMRTogRklMRSxcbiAgRE9XTkxPQURFRDogRE9XTkxPQURFRCxcbiAgUFVCTElTSEVEOiBQVUJMSVNIRUQsXG4gIEdFVF9DUkVESVRTOiBHRVRfQ1JFRElUUyxcbiAgSEVMUDogSEVMUCxcbiAgSU5WSVRFOiBJTlZJVEUsXG4gIFBVQkxJU0g6IFBVQkxJU0gsXG4gIFJFUE9SVDogUkVQT1JULFxuICBSRVdBUkRTOiBSRVdBUkRTLFxuICBTRUFSQ0g6IFNFQVJDSCxcbiAgU0VORF9DUkVESVRTOiBTRU5EX0NSRURJVFMsXG4gIFNFVFRJTkdTOiBTRVRUSU5HUyxcbiAgU0hPVzogU0hPVyxcbiAgU1VCU0NSSVBUSU9OUzogU1VCU0NSSVBUSU9OUyxcbiAgVFJBTlNBQ1RJT05fSElTVE9SWTogVFJBTlNBQ1RJT05fSElTVE9SWSxcbiAgSElTVE9SWTogSElTVE9SWSxcbiAgV0FMTEVUOiBXQUxMRVRcbn0pO1xuXG4vKiBoYXJkY29kZWQgbmFtZXMgc3RpbGwgZXhpc3QgZm9yIHRoZXNlIGluIHJlZHVjZXJzL3NldHRpbmdzLmpzIC0gb25seSBkaXNjb3ZlcmVkIHdoZW4gZGVidWdnaW5nICovXG4vKiBNYW55IFNFVFRJTkdTIGFyZSBzdG9yZWQgaW4gdGhlIGxvY2FsU3RvcmFnZSBieSB0aGVpciBuYW1lIC1cbiAgICBiZSBjYXJlZnVsIGFib3V0IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBhIFNFVFRJTkdTIGNvbnN0YW50LCBhcyBkb2luZyBzbyBjYW4gaW52YWxpZGF0ZSBleGlzdGluZyBTRVRUSU5HUyAqL1xuXG5jb25zdCBTSE9XX05TRlcgPSAnc2hvd05zZncnO1xuY29uc3QgQ1JFRElUX1JFUVVJUkVEX0FDS05PV0xFREdFRCA9ICdjcmVkaXRfcmVxdWlyZWRfYWNrbm93bGVkZ2VkJztcbmNvbnN0IE5FV19VU0VSX0FDS05PV0xFREdFRCA9ICd3ZWxjb21lX2Fja25vd2xlZGdlZCc7XG5jb25zdCBFTUFJTF9DT0xMRUNUSU9OX0FDS05PV0xFREdFRCA9ICdlbWFpbF9jb2xsZWN0aW9uX2Fja25vd2xlZGdlZCc7XG5jb25zdCBJTlZJVEVfQUNLTk9XTEVER0VEID0gJ2ludml0ZV9hY2tub3dsZWRnZWQnO1xuY29uc3QgTEFOR1VBR0UgPSAnbGFuZ3VhZ2UnO1xuY29uc3QgU0hPV19NQVRVUkUgPSAnc2hvd19tYXR1cmUnO1xuY29uc3QgU0hPV19SRVBPU1RTID0gJ3Nob3dfcmVwb3N0cyc7XG5jb25zdCBTSE9XX0FOT05ZTU9VUyA9ICdzaG93X2Fub255bW91cyc7XG5jb25zdCBTSE9XX1VOQVZBSUxBQkxFID0gJ3Nob3dfdW5hdmFpbGFibGUnO1xuY29uc3QgSU5TVEFOVF9QVVJDSEFTRV9FTkFCTEVEID0gJ2luc3RhbnRfcHVyY2hhc2VfZW5hYmxlZCc7XG5jb25zdCBJTlNUQU5UX1BVUkNIQVNFX01BWCA9ICdpbnN0YW50X3B1cmNoYXNlX21heCc7XG5jb25zdCBUSEVNRSA9ICd0aGVtZSc7XG5jb25zdCBUSEVNRVMgPSAndGhlbWVzJztcbmNvbnN0IEFVVE9NQVRJQ19EQVJLX01PREVfRU5BQkxFRCA9ICdhdXRvbWF0aWNfZGFya19tb2RlX2VuYWJsZWQnO1xuY29uc3QgQVVUT1BMQVkgPSAnYXV0b3BsYXknO1xuY29uc3QgT1NfTk9USUZJQ0FUSU9OU19FTkFCTEVEID0gJ29zX25vdGlmaWNhdGlvbnNfZW5hYmxlZCc7XG5jb25zdCBBVVRPX0RPV05MT0FEID0gJ2F1dG9fZG93bmxvYWQnO1xuY29uc3QgQVVUT19MQVVOQ0ggPSAnYXV0b19sYXVuY2gnO1xuY29uc3QgU1VQUE9SVF9PUFRJT04gPSAnc3VwcG9ydF9vcHRpb24nO1xuY29uc3QgSElERV9CQUxBTkNFID0gJ2hpZGVfYmFsYW5jZSc7XG5jb25zdCBISURFX1NQTEFTSF9BTklNQVRJT04gPSAnaGlkZV9zcGxhc2hfYW5pbWF0aW9uJztcbmNvbnN0IEZMT0FUSU5HX1BMQVlFUiA9ICdmbG9hdGluZ19wbGF5ZXInO1xuY29uc3QgREFSS19NT0RFX1RJTUVTID0gJ2RhcmtfbW9kZV90aW1lcyc7XG5jb25zdCBFTkFCTEVfU1lOQyA9ICdlbmFibGVfc3luYyc7XG5cbi8vIG1vYmlsZSBzZXR0aW5nc1xuY29uc3QgQkFDS0dST1VORF9QTEFZX0VOQUJMRUQgPSAnYmFja2dyb3VuZFBsYXlFbmFibGVkJztcbmNvbnN0IEZPUkVHUk9VTkRfTk9USUZJQ0FUSU9OX0VOQUJMRUQgPSAnZm9yZWdyb3VuZE5vdGlmaWNhdGlvbkVuYWJsZWQnO1xuY29uc3QgS0VFUF9EQUVNT05fUlVOTklORyA9ICdrZWVwRGFlbW9uUnVubmluZyc7XG5jb25zdCBTSE9XX1VSSV9CQVJfU1VHR0VTVElPTlMgPSAnc2hvd1VyaUJhclN1Z2dlc3Rpb25zJztcbmNvbnN0IFJFQ0VJVkVfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTlMgPSAncmVjZWl2ZVN1YnNjcmlwdGlvbk5vdGlmaWNhdGlvbnMnO1xuY29uc3QgUkVDRUlWRV9SRVdBUkRfTk9USUZJQ0FUSU9OUyA9ICdyZWNlaXZlUmV3YXJkTm90aWZpY2F0aW9ucyc7XG5jb25zdCBSRUNFSVZFX0lOVEVSRVNUU19OT1RJRklDQVRJT05TID0gJ3JlY2VpdmVJbnRlcmVzdHNOb3RpZmljYXRpb25zJztcbmNvbnN0IFJFQ0VJVkVfQ1JFQVRPUl9OT1RJRklDQVRJT05TID0gJ3JlY2VpdmVDcmVhdG9yTm90aWZpY2F0aW9ucyc7XG5cbnZhciBzZXR0aW5ncyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgU0hPV19OU0ZXOiBTSE9XX05TRlcsXG4gIENSRURJVF9SRVFVSVJFRF9BQ0tOT1dMRURHRUQ6IENSRURJVF9SRVFVSVJFRF9BQ0tOT1dMRURHRUQsXG4gIE5FV19VU0VSX0FDS05PV0xFREdFRDogTkVXX1VTRVJfQUNLTk9XTEVER0VELFxuICBFTUFJTF9DT0xMRUNUSU9OX0FDS05PV0xFREdFRDogRU1BSUxfQ09MTEVDVElPTl9BQ0tOT1dMRURHRUQsXG4gIElOVklURV9BQ0tOT1dMRURHRUQ6IElOVklURV9BQ0tOT1dMRURHRUQsXG4gIExBTkdVQUdFOiBMQU5HVUFHRSxcbiAgU0hPV19NQVRVUkU6IFNIT1dfTUFUVVJFLFxuICBTSE9XX1JFUE9TVFM6IFNIT1dfUkVQT1NUUyxcbiAgU0hPV19BTk9OWU1PVVM6IFNIT1dfQU5PTllNT1VTLFxuICBTSE9XX1VOQVZBSUxBQkxFOiBTSE9XX1VOQVZBSUxBQkxFLFxuICBJTlNUQU5UX1BVUkNIQVNFX0VOQUJMRUQ6IElOU1RBTlRfUFVSQ0hBU0VfRU5BQkxFRCxcbiAgSU5TVEFOVF9QVVJDSEFTRV9NQVg6IElOU1RBTlRfUFVSQ0hBU0VfTUFYLFxuICBUSEVNRTogVEhFTUUsXG4gIFRIRU1FUzogVEhFTUVTLFxuICBBVVRPTUFUSUNfREFSS19NT0RFX0VOQUJMRUQ6IEFVVE9NQVRJQ19EQVJLX01PREVfRU5BQkxFRCxcbiAgQVVUT1BMQVk6IEFVVE9QTEFZLFxuICBPU19OT1RJRklDQVRJT05TX0VOQUJMRUQ6IE9TX05PVElGSUNBVElPTlNfRU5BQkxFRCxcbiAgQVVUT19ET1dOTE9BRDogQVVUT19ET1dOTE9BRCxcbiAgQVVUT19MQVVOQ0g6IEFVVE9fTEFVTkNILFxuICBTVVBQT1JUX09QVElPTjogU1VQUE9SVF9PUFRJT04sXG4gIEhJREVfQkFMQU5DRTogSElERV9CQUxBTkNFLFxuICBISURFX1NQTEFTSF9BTklNQVRJT046IEhJREVfU1BMQVNIX0FOSU1BVElPTixcbiAgRkxPQVRJTkdfUExBWUVSOiBGTE9BVElOR19QTEFZRVIsXG4gIERBUktfTU9ERV9USU1FUzogREFSS19NT0RFX1RJTUVTLFxuICBFTkFCTEVfU1lOQzogRU5BQkxFX1NZTkMsXG4gIEJBQ0tHUk9VTkRfUExBWV9FTkFCTEVEOiBCQUNLR1JPVU5EX1BMQVlfRU5BQkxFRCxcbiAgRk9SRUdST1VORF9OT1RJRklDQVRJT05fRU5BQkxFRDogRk9SRUdST1VORF9OT1RJRklDQVRJT05fRU5BQkxFRCxcbiAgS0VFUF9EQUVNT05fUlVOTklORzogS0VFUF9EQUVNT05fUlVOTklORyxcbiAgU0hPV19VUklfQkFSX1NVR0dFU1RJT05TOiBTSE9XX1VSSV9CQVJfU1VHR0VTVElPTlMsXG4gIFJFQ0VJVkVfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTlM6IFJFQ0VJVkVfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTlMsXG4gIFJFQ0VJVkVfUkVXQVJEX05PVElGSUNBVElPTlM6IFJFQ0VJVkVfUkVXQVJEX05PVElGSUNBVElPTlMsXG4gIFJFQ0VJVkVfSU5URVJFU1RTX05PVElGSUNBVElPTlM6IFJFQ0VJVkVfSU5URVJFU1RTX05PVElGSUNBVElPTlMsXG4gIFJFQ0VJVkVfQ1JFQVRPUl9OT1RJRklDQVRJT05TOiBSRUNFSVZFX0NSRUFUT1JfTk9USUZJQ0FUSU9OU1xufSk7XG5cbmNvbnN0IERBVEVfTkVXID0gJ2RhdGVOZXcnO1xuY29uc3QgREFURV9PTEQgPSAnZGF0ZU9sZCc7XG5jb25zdCBUSVRMRSA9ICd0aXRsZSc7XG5jb25zdCBGSUxFTkFNRSA9ICdmaWxlbmFtZSc7XG5cbnZhciBzb3J0X29wdGlvbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIERBVEVfTkVXOiBEQVRFX05FVyxcbiAgREFURV9PTEQ6IERBVEVfT0xELFxuICBUSVRMRTogVElUTEUsXG4gIEZJTEVOQU1FOiBGSUxFTkFNRVxufSk7XG5cbmNvbnN0IEFQSV9ET1dOID0gJ2FwaURvd24nO1xuY29uc3QgUkVBRFkgPSAncmVhZHknO1xuY29uc3QgSU5fUFJPR1JFU1MgPSAnaW5Qcm9ncmVzcyc7XG5jb25zdCBDT01QTEVURSA9ICdjb21wbGV0ZSc7XG5jb25zdCBNQU5VQUwgPSAnbWFudWFsJztcblxudmFyIHRodW1ibmFpbF91cGxvYWRfc3RhdHVzZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIEFQSV9ET1dOOiBBUElfRE9XTixcbiAgUkVBRFk6IFJFQURZLFxuICBJTl9QUk9HUkVTUzogSU5fUFJPR1JFU1MsXG4gIENPTVBMRVRFOiBDT01QTEVURSxcbiAgTUFOVUFMOiBNQU5VQUxcbn0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuY29uc3QgQUxMID0gJ2FsbCc7XG5jb25zdCBTUEVORCA9ICdzcGVuZCc7XG5jb25zdCBSRUNFSVZFID0gJ3JlY2VpdmUnO1xuY29uc3QgUFVCTElTSCQxID0gJ3B1Ymxpc2gnO1xuY29uc3QgQ0hBTk5FTCQxID0gJ2NoYW5uZWwnO1xuY29uc3QgVElQID0gJ3RpcCc7XG5jb25zdCBTVVBQT1JUID0gJ3N1cHBvcnQnO1xuY29uc3QgVVBEQVRFID0gJ3VwZGF0ZSc7XG5jb25zdCBBQkFORE9OID0gJ2FiYW5kb24nO1xuXG52YXIgdHJhbnNhY3Rpb25fdHlwZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIEFMTDogQUxMLFxuICBTUEVORDogU1BFTkQsXG4gIFJFQ0VJVkU6IFJFQ0VJVkUsXG4gIFBVQkxJU0g6IFBVQkxJU0gkMSxcbiAgQ0hBTk5FTDogQ0hBTk5FTCQxLFxuICBUSVA6IFRJUCxcbiAgU1VQUE9SVDogU1VQUE9SVCxcbiAgVVBEQVRFOiBVUERBVEUsXG4gIEFCQU5ET046IEFCQU5ET05cbn0pO1xuXG4vLyBQQUdFIFNJWkVcbmNvbnN0IFBBR0VfU0laRSQxID0gNTA7XG5jb25zdCBMQVRFU1RfUEFHRV9TSVpFID0gMjA7XG5cbnZhciB0cmFuc2FjdGlvbl9saXN0ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBQQUdFX1NJWkU6IFBBR0VfU0laRSQxLFxuICBMQVRFU1RfUEFHRV9TSVpFOiBMQVRFU1RfUEFHRV9TSVpFXG59KTtcblxuY29uc3QgU1BFRUNIX1NUQVRVUyA9ICdodHRwczovL3NwZWUuY2gvYXBpL2NvbmZpZy9zaXRlL3B1Ymxpc2hpbmcnO1xuY29uc3QgU1BFRUNIX1BVQkxJU0ggPSAnaHR0cHM6Ly9zcGVlLmNoL2FwaS9jbGFpbS9wdWJsaXNoJztcblxudmFyIHNwZWVjaF91cmxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBTUEVFQ0hfU1RBVFVTOiBTUEVFQ0hfU1RBVFVTLFxuICBTUEVFQ0hfUFVCTElTSDogU1BFRUNIX1BVQkxJU0hcbn0pO1xuXG5jb25zdCBBTk5PVU5DRV9IRUFEX0FORF9TRF9PTkxZID0gJ2Fubm91bmNlX2hlYWRfYW5kX3NkX29ubHknO1xuY29uc3QgQVBJID0gJ2FwaSc7XG5jb25zdCBCTE9CX0RPV05MT0FEX1RJTUVPVVQgPSAnYmxvYl9kb3dubG9hZF90aW1lb3V0JztcbmNvbnN0IEJMT0JfTFJVX0NBQ0hFX1NJWkUgPSAnYmxvYl9scnVfY2FjaGVfc2l6ZSc7XG5jb25zdCBCTE9DS0NIQUlOX05BTUUgPSAnYmxvY2tjaGFpbl9uYW1lJztcbmNvbnN0IENBQ0hFX1RJTUUgPSAnY2FjaGVfdGltZSc7XG5jb25zdCBDT0lOX1NFTEVDVElPTl9TVFJBVEVHWSA9ICdjb2luX3NlbGVjdGlvbl9zdHJhdGVneSc7XG5jb25zdCBDT01NRU5UX1NFUlZFUiA9ICdjb21tZW50X3NlcnZlcic7XG5jb25zdCBDT01QT05FTlRTX1RPX1NLSVAgPSAnY29tcG9uZW50c190b19za2lwJztcbmNvbnN0IENPTkNVUlJFTlRfQkxPQl9BTk5PVU5DRVJTID0gJ2NvbmN1cnJlbnRfYmxvYl9hbm5vdW5jZXJzJztcbmNvbnN0IENPTkNVUlJFTlRfUkVGTEVDVE9SX1VQTE9BRFMgPSAnY29uY3VycmVudF9yZWZsZWN0b3JfdXBsb2Fkcyc7XG5jb25zdCBDT05GSUcgPSAnY29uZmlnJztcbmNvbnN0IERBVEFfRElSID0gJ2RhdGFfZGlyJztcbmNvbnN0IERPV05MT0FEX0RJUiA9ICdkb3dubG9hZF9kaXInO1xuY29uc3QgRE9XTkxPQURfVElNRU9VVCA9ICdkb3dubG9hZF90aW1lb3V0JztcbmNvbnN0IEZJWEVEX1BFRVJfREVMQVkgPSAnZml4ZWRfcGVlcl9kZWxheSc7XG5jb25zdCBLTk9XTl9ESFRfTk9ERVMgPSAna25vd25fZGh0X25vZGVzJztcbmNvbnN0IExCUllVTV9TRVJWRVJTID0gJ2xicnl1bV9zZXJ2ZXJzJztcbmNvbnN0IE1BWF9DT05ORUNUSU9OU19QRVJfRE9XTkxPQUQgPSAnbWF4X2Nvbm5lY3Rpb25zX3Blcl9kb3dubG9hZCc7XG5jb25zdCBNQVhfS0VZX0ZFRSA9ICdtYXhfa2V5X2ZlZSc7XG5jb25zdCBERUZBVUxUX1dBTExFVCA9ICdkZWZhdWx0X3dhbGxldCc7XG5jb25zdCBORVRXT1JLX0lOVEVSRkFDRSA9ICduZXR3b3JrX2ludGVyZmFjZSc7XG5jb25zdCBOT0RFX1JQQ19USU1FT1VUID0gJ25vZGVfcnBjX3RpbWVvdXQnO1xuY29uc3QgUEVFUl9DT05ORUNUX1RJTUVPVVQgPSAncGVlcl9jb25uZWN0X3RpbWVvdXQnO1xuY29uc3QgUkVGTEVDVF9TVFJFQU1TID0gJ3JlZmxlY3Rfc3RyZWFtcyc7XG5jb25zdCBSRUZMRUNUT1JfU0VSVkVSUyA9ICdyZWZsZWN0b3Jfc2VydmVycyc7XG5jb25zdCBTM19IRUFERVJTX0RFUFRIID0gJ3MzX2hlYWRlcnNfZGVwdGgnO1xuY29uc3QgU0FWRV9CTE9CUyA9ICdzYXZlX2Jsb2JzJztcbmNvbnN0IFNBVkVfRklMRVMgPSAnc2F2ZV9maWxlcyc7XG5jb25zdCBTSEFSRV9VU0FHRV9EQVRBID0gJ3NoYXJlX3VzYWdlX2RhdGEnO1xuY29uc3QgU1BMSVRfQlVDS0VUU19VTkRFUl9JTkRFWCA9ICdzcGxpdF9idWNrZXRzX3VuZGVyX2luZGV4JztcbmNvbnN0IFNUUkVBTUlOR19HRVQgPSAnc3RyZWFtaW5nX2dldCc7XG5jb25zdCBTVFJFQU1JTkdfU0VSVkVSID0gJ3N0cmVhbWluZ19zZXJ2ZXInO1xuY29uc3QgVENQX1BPUlQgPSAndGNwX3BvcnQnO1xuY29uc3QgVFJBQ0tfQkFORFdJRFRIID0gJ3RyYWNrX2JhbmR3aWR0aCc7XG5jb25zdCBVRFBfUE9SVCA9ICd1ZHBfcG9ydCc7XG5jb25zdCBVU0VfVVBOUCA9ICd1c2VfdXBucCc7XG5jb25zdCBXQUxMRVRfRElSID0gJ3dhbGxldF9kaXInO1xuY29uc3QgV0FMTEVUUyA9ICd3YWxsZXRzJztcblxudmFyIGRhZW1vbl9zZXR0aW5ncyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgQU5OT1VOQ0VfSEVBRF9BTkRfU0RfT05MWTogQU5OT1VOQ0VfSEVBRF9BTkRfU0RfT05MWSxcbiAgQVBJOiBBUEksXG4gIEJMT0JfRE9XTkxPQURfVElNRU9VVDogQkxPQl9ET1dOTE9BRF9USU1FT1VULFxuICBCTE9CX0xSVV9DQUNIRV9TSVpFOiBCTE9CX0xSVV9DQUNIRV9TSVpFLFxuICBCTE9DS0NIQUlOX05BTUU6IEJMT0NLQ0hBSU5fTkFNRSxcbiAgQ0FDSEVfVElNRTogQ0FDSEVfVElNRSxcbiAgQ09JTl9TRUxFQ1RJT05fU1RSQVRFR1k6IENPSU5fU0VMRUNUSU9OX1NUUkFURUdZLFxuICBDT01NRU5UX1NFUlZFUjogQ09NTUVOVF9TRVJWRVIsXG4gIENPTVBPTkVOVFNfVE9fU0tJUDogQ09NUE9ORU5UU19UT19TS0lQLFxuICBDT05DVVJSRU5UX0JMT0JfQU5OT1VOQ0VSUzogQ09OQ1VSUkVOVF9CTE9CX0FOTk9VTkNFUlMsXG4gIENPTkNVUlJFTlRfUkVGTEVDVE9SX1VQTE9BRFM6IENPTkNVUlJFTlRfUkVGTEVDVE9SX1VQTE9BRFMsXG4gIENPTkZJRzogQ09ORklHLFxuICBEQVRBX0RJUjogREFUQV9ESVIsXG4gIERPV05MT0FEX0RJUjogRE9XTkxPQURfRElSLFxuICBET1dOTE9BRF9USU1FT1VUOiBET1dOTE9BRF9USU1FT1VULFxuICBGSVhFRF9QRUVSX0RFTEFZOiBGSVhFRF9QRUVSX0RFTEFZLFxuICBLTk9XTl9ESFRfTk9ERVM6IEtOT1dOX0RIVF9OT0RFUyxcbiAgTEJSWVVNX1NFUlZFUlM6IExCUllVTV9TRVJWRVJTLFxuICBNQVhfQ09OTkVDVElPTlNfUEVSX0RPV05MT0FEOiBNQVhfQ09OTkVDVElPTlNfUEVSX0RPV05MT0FELFxuICBNQVhfS0VZX0ZFRTogTUFYX0tFWV9GRUUsXG4gIERFRkFVTFRfV0FMTEVUOiBERUZBVUxUX1dBTExFVCxcbiAgTkVUV09SS19JTlRFUkZBQ0U6IE5FVFdPUktfSU5URVJGQUNFLFxuICBOT0RFX1JQQ19USU1FT1VUOiBOT0RFX1JQQ19USU1FT1VULFxuICBQRUVSX0NPTk5FQ1RfVElNRU9VVDogUEVFUl9DT05ORUNUX1RJTUVPVVQsXG4gIFJFRkxFQ1RfU1RSRUFNUzogUkVGTEVDVF9TVFJFQU1TLFxuICBSRUZMRUNUT1JfU0VSVkVSUzogUkVGTEVDVE9SX1NFUlZFUlMsXG4gIFMzX0hFQURFUlNfREVQVEg6IFMzX0hFQURFUlNfREVQVEgsXG4gIFNBVkVfQkxPQlM6IFNBVkVfQkxPQlMsXG4gIFNBVkVfRklMRVM6IFNBVkVfRklMRVMsXG4gIFNIQVJFX1VTQUdFX0RBVEE6IFNIQVJFX1VTQUdFX0RBVEEsXG4gIFNQTElUX0JVQ0tFVFNfVU5ERVJfSU5ERVg6IFNQTElUX0JVQ0tFVFNfVU5ERVJfSU5ERVgsXG4gIFNUUkVBTUlOR19HRVQ6IFNUUkVBTUlOR19HRVQsXG4gIFNUUkVBTUlOR19TRVJWRVI6IFNUUkVBTUlOR19TRVJWRVIsXG4gIFRDUF9QT1JUOiBUQ1BfUE9SVCxcbiAgVFJBQ0tfQkFORFdJRFRIOiBUUkFDS19CQU5EV0lEVEgsXG4gIFVEUF9QT1JUOiBVRFBfUE9SVCxcbiAgVVNFX1VQTlA6IFVTRV9VUE5QLFxuICBXQUxMRVRfRElSOiBXQUxMRVRfRElSLFxuICBXQUxMRVRTOiBXQUxMRVRTXG59KTtcblxuLypcbiAqIEhvdyB0byB1c2UgdGhpcyBmaWxlOlxuICogU2V0dGluZ3MgZXhwb3J0ZWQgZnJvbSBoZXJlIHdpbGwgdHJpZ2dlciB0aGUgc2V0dGluZyB0byBiZVxuICogc2VudCB0byB0aGUgcHJlZmVyZW5jZSBtaWRkbGV3YXJlIHdoZW4gc2V0IHVzaW5nIHRoZVxuICogdXN1YWwgc2V0RGFlbW9uU2V0dGluZ3MgYW5kIGNsZWFyRGFlbW9uU2V0dGluZ3MgbWV0aG9kcy5cbiAqXG4gKiBTZWUgcmVkdXgvc2V0dGluZ3MvYWN0aW9ucyBpbiB0aGUgYXBwIGZvciB3aGVyZSB0aGlzIGlzIHVzZWQuXG4gKi9cblxuY29uc3QgV0FMTEVUX1NFUlZFUlMgPSBMQlJZVU1fU0VSVkVSUztcbmNvbnN0IFNIQVJFX1VTQUdFX0RBVEEkMSA9IFNIQVJFX1VTQUdFX0RBVEE7XG5cbnZhciBzaGFyZWRfcHJlZmVyZW5jZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIFdBTExFVF9TRVJWRVJTOiBXQUxMRVRfU0VSVkVSUyxcbiAgU0hBUkVfVVNBR0VfREFUQTogU0hBUkVfVVNBR0VfREFUQSQxXG59KTtcblxuY29uc3QgU0VBUkNIX1RZUEVTID0ge1xuICBGSUxFOiAnZmlsZScsXG4gIENIQU5ORUw6ICdjaGFubmVsJyxcbiAgU0VBUkNIOiAnc2VhcmNoJyxcbiAgVEFHOiAndGFnJ1xufTtcblxuY29uc3QgU0VBUkNIX09QVElPTlMgPSB7XG4gIFJFU1VMVF9DT1VOVDogJ3NpemUnLFxuICBDTEFJTV9UWVBFOiAnY2xhaW1UeXBlJyxcbiAgSU5DTFVERV9GSUxFUzogJ2ZpbGUnLFxuICBJTkNMVURFX0NIQU5ORUxTOiAnY2hhbm5lbCcsXG4gIElOQ0xVREVfRklMRVNfQU5EX0NIQU5ORUxTOiAnZmlsZSxjaGFubmVsJyxcbiAgTUVESUFfQVVESU86ICdhdWRpbycsXG4gIE1FRElBX1ZJREVPOiAndmlkZW8nLFxuICBNRURJQV9URVhUOiAndGV4dCcsXG4gIE1FRElBX0lNQUdFOiAnaW1hZ2UnLFxuICBNRURJQV9BUFBMSUNBVElPTjogJ2FwcGxpY2F0aW9uJ1xufTtcblxuY29uc3QgREVGQVVMVF9GT0xMT1dFRF9UQUdTID0gWydhcnQnLCAnYXV0b21vdGl2ZScsICdibG9ja2NoYWluJywgJ2NvbWVkeScsICdlY29ub21pY3MnLCAnZWR1Y2F0aW9uJywgJ2dhbWluZycsICdtdXNpYycsICduZXdzJywgJ3NjaWVuY2UnLCAnc3BvcnRzJywgJ3RlY2hub2xvZ3knXTtcblxuY29uc3QgTUFUVVJFX1RBR1MgPSBbJ3Bvcm4nLCAnbnNmdycsICdtYXR1cmUnLCAneHh4J107XG5cbmNvbnN0IERFRkFVTFRfS05PV05fVEFHUyA9IFsnZnJlZSBzcGVlY2gnLCAnY2Vuc29yc2hpcCcsICdnYW1pbmcnLCAncG9wIGN1bHR1cmUnLCAnZW50ZXJ0YWlubWVudCcsICd0ZWNobm9sb2d5JywgJ211c2ljJywgJ2Z1bm55JywgJ2VkdWNhdGlvbicsICdsZWFybmluZycsICduZXdzJywgJ2dhbWVwbGF5JywgJ25hdHVyZScsICdiZWxpZWZzJywgJ2NvbWVkeScsICdnYW1lcycsICdmaWxtICYgYW5pbWF0aW9uJywgJ2dhbWUnLCAnd2VhcG9ucycsICdibG9ja2NoYWluJywgJ3ZpZGVvIGdhbWUnLCAnc3BvcnRzJywgJ3dhbGt0aHJvdWdoJywgJ2FydCcsICdwYycsICdtaW5lY3JhZnQnLCAncGxheXRocm91Z2gnLCAnZWNvbm9taWNzJywgJ2F1dG9tb3RpdmUnLCAncGxheScsICd0dXRvcmlhbCcsICd0d2l0Y2gnLCAnaG93IHRvJywgJ3BzNCcsICdiaXRjb2luJywgJ2ZvcnRuaXRlJywgJ2NvbW1lbnRhcnknLCAnbGV0cyBwbGF5JywgJ2Z1bicsICdwb2xpdGljcycsICd0cmF2ZWwnLCAnZm9vZCcsICdzY2llbmNlJywgJ3hib3gnLCAnbGliZXJhbCcsICdkZW1vY3JhdCcsICdwcm9ncmVzc2l2ZScsICdzdXJ2aXZhbCcsICdub24tcHJvZml0cycsICdhY3RpdmlzbScsICdjcnlwdG9jdXJyZW5jeScsICdwbGF5c3RhdGlvbicsICduaW50ZW5kbycsICdnb3Zlcm5tZW50JywgJ3N0ZWFtJywgJ3BvZGNhc3QnLCAnZ2FtZXInLCAnaG9ycm9yJywgJ2NvbnNlcnZhdGl2ZScsICdyZWFjdGlvbicsICd0cmFpbGVyJywgJ2xvdmUnLCAnY25uJywgJ3JlcHVibGljYW4nLCAncG9saXRpY2FsJywgJ2hhbmdvdXRzb25haXInLCAnaG9hJywgJ21zbmJjJywgJ2NicycsICdhbmltZScsICdkb25hbGQgdHJ1bXAnLCAnZmljdGlvbicsICdmb3ggbmV3cycsICdjcnlwdG8nLCAnZXRoZXJldW0nLCAnY2FsbCBvZiBkdXR5JywgJ2FuZHJvaWQnLCAnbXVsdGlwbGF5ZXInLCAnZXBpYycsICdycGcnLCAnYWR2ZW50dXJlJywgJ3NlY3VsYXIgdGFsaycsICdidGMnLCAnYXRoZWlzdCcsICdhdGhlaXNtJywgJ3ZpZGVvIGdhbWVzJywgJ3BzMycsICdjb2QnLCAnb25saW5lJywgJ2Fnbm9zdGljJywgJ21vdmllJywgJ2ZwcycsICdsZXRzJywgJ21vZCcsICd3b3JsZCcsICdyZXZpZXdzJywgJ3NoYXJlZmFjdG9yeScsICdzcGFjZScsICdwb2tlbW9uJywgJ3N0cmVhbScsICdoaWxhcmlvdXMnLCAnbG9sJywgJ3NvbnknLCAnZ29kJywgJ2RhbmNlJywgJ3B2cCcsICd0ZWNoJywgJ3N0cmF0ZWd5JywgJ3pvbWJpZXMnLCAnZmFpbCcsICdmaWxtJywgJ3hib3gzNjAnLCAnYW5pbWF0aW9uJywgJ3VuYm94aW5nJywgJ21vbmV5JywgJ3d3ZScsICdtb2RzJywgJ2luZGllJywgJ3B1YmcnLCAnaW9zJywgJ2hpc3RvcnknLCAncmFwJywgJ21vYmlsZScsICd0cnVtcCcsICdoYWNrJywgJ2ZsYXQgZWFydGgnLCAndHJhcCcsICdodW1vcicsICd2bG9nZ2luZycsICdmb3gnLCAnbmV3cyByYWRpbycsICdmYWNlYm9vaycsICdlZG0nLCAnZml0bmVzcycsICd2YXBpbmcnLCAnaGlwIGhvcCcsICdzZWN1bGFyJywgJ2plc3VzJywgJ3NvbmcnLCAndmFwZScsICdndWl0YXInLCAncmVtaXgnLCAnbWluaW5nJywgJ2RhaWx5JywgJ2RpeScsICdwZXRzJywgJ3ZpZGVvZ2FtZScsICdkZWF0aCcsICdmdW5ueSBtb21lbnRzJywgJ3JlbGlnaW9uJywgJ21lZGlhJywgJ3ZpcmFsJywgJ3dhcicsICduYmMnLCAnZnJlZWRvbScsICdnb2xkJywgJ2ZhbWlseScsICdtZW1lJywgJ3pvbWJpZScsICdwaG90b2dyYXBoeScsICdjaGlsbCcsICdzbmlwZXInLCAnY29tcHV0ZXInLCAnaXBob25lJywgJ2RyYWdvbicsICdiaWJsZScsICdwcm8nLCAnb3ZlcndhdGNoJywgJ2xpdGVjb2luJywgJ2d0YScsICdob3VzZScsICdmaXJlJywgJ2Jhc3MnLCAndHJ1dGgnLCAnY3Jhc2gnLCAnbWFyaW8nLCAnbGVhZ3VlIG9mIGxlZ2VuZHMnLCAnd2lpJywgJ21tb3JwZycsICdoZWFsdGgnLCAnbWFydmVsJywgJ3JhY2luZycsICdhcHBsZScsICdpbnN0cnVtZW50YWwnLCAnZWFydGgnLCAnZGVzdGlueScsICdzYXRpcmUnLCAncmFjZScsICd0cmFpbmluZycsICdlbGVjdHJvbmljJywgJ2Jvc3MnLCAncm9ibG94JywgJ2ZhbWlseSBmcmllbmRseScsICdjYWxpZm9ybmlhJywgJ3JlYWN0JywgJ2NocmlzdGlhbicsICdtbW8nLCAndHdpdHRlcicsICdoZWxwJywgJ3N0YXInLCAnY2FycycsICdyYW5kb20nLCAndG9wIDEwJywgJ25pbmphJywgJ2d1bnMnLCAnbGludXgnLCAnbGVzc29ucycsICd2ZWdhbicsICdmdXR1cmUnLCAnZG90YSAyJywgJ3N0dWRpbycsICdzdGFyIHdhcnMnLCAnc2hvb3RpbmcnLCAnbmFzYScsICdyb2NrJywgJ2xlYWd1ZScsICdzdWJzY3JpYmUnLCAnd2F0ZXInLCAnZ3RhIHYnLCAnY2FyJywgJ3NhbXN1bmcnLCAnbXVzaWMgdmlkZW8nLCAnc2t5cmltJywgJ2RvZycsICdjb21pY3MnLCAnc2hvb3RlciBnYW1lJywgJ2JvMycsICdoYWxsb3dlZW4nLCAnbGliZXJ0eScsICdldGgnLCAnY29uc3BpcmFjeScsICdrbmlmZScsICdmYXNoaW9uJywgJ3N0b3JpZXMnLCAndmFwb3InLCAnbnZpZGlhJywgJ2N1dGUnLCAnYmVhdCcsICduaW50ZW5kbyBzd2l0Y2gnLCAnZmFudGFzeScsICdjaHJpc3RtYXMnLCAnd29ybGQgb2Ygd2FyY3JhZnQnLCAnaW5kdXN0cnknLCAnY2FydG9vbicsICdnYXJkZW4nLCAnYW5pbWFscycsICd3aW5kb3dzJywgJ2hhcHB5JywgJ21hZ2ljJywgJ21lbWVzJywgJ2Rlc2lnbicsICd0YWN0aWNhbCcsICdmYWxsb3V0IDQnLCAncHV6emxlJywgJ3Bhcm9keScsICdydicsICdiZWF0cycsICdidWlsZGluZycsICdkaXNuZXknLCAnZHJvbmUnLCAncHMyJywgJ2JlYWNoJywgJ21ldGFsJywgJ2NocmlzdGlhbml0eScsICdidXNpbmVzcycsICdtaXgnLCAnYm8yJywgJ2NvdmVyJywgJ3NlbmF0ZScsICc0aycsICd1bml0ZWQgc3RhdGVzJywgJ2ZpbmFsJywgJ2hlcm8nLCAncGxheWluZycsICdkbGMnLCAndWJpc29mdCcsICdoYWxvJywgJ3BjIGdhbWluZycsICdyYXcnLCAnaW52ZXN0aW5nJywgJ29ubGluZSBsZWFybmluZycsICdzb2Z0d2FyZScsICdhcmsnLCAnbW9qYW5nJywgJ2NvbnNvbGUnLCAnYmF0dGxlIHJveWFsZScsICdjYW5vbicsICdtaWNyb3NvZnQnLCAnY2FtcGluZycsICd1Zm8nLCAncHJvZ3Jlc3NpdmUgdGFsaycsICdzd2l0Y2gnLCAnZnB2JywgJ2FyY2FkZScsICdzY2hvb2wnLCAnZHJpdmluZycsICdib2R5YnVpbGRpbmcnLCAnZHJhbWEnLCAncmV0cm8nLCAnc2NpZW5jZSBmaWN0aW9uJywgJ2VnZ3MnLCAnYXVzdHJhbGlhJywgJ21vZGRlZCcsICdyYWluYm93JywgJ2dhbWVycycsICdyZXNpZGVudCBldmlsJywgJ2RyYXdpbmcnLCAnYnJhc2lsJywgJ2VuZ2xhbmQnLCAnaGlsbGFyeSBjbGludG9uJywgJ3NpbmdpbmcnLCAnZmluYWwgZmFudGFzeScsICdoaXBob3AnLCAndmlkZW8gYmxvZycsICdtYXR1cmUnLCAncXVhZCcsICdub29iJywgJ3NpbXVsYXRpb24nLCAnaWxsdW1pbmF0aScsICdwb2V0cnknLCAnZGF5eicsICdtYW5nYScsICdob3d0bycsICdpbnNhbmUnLCAncHJlc3MnLCAnc3BlY2lhbCcsICdjaHVyY2gnLCAnaWNvJywgJ3dlaXJkJywgJ2xpYmVydGFyaWFuJywgJ2NyYWZ0aW5nJywgJ2xldmVsJywgJ2NvbWljJywgJ3NhbmRib3gnLCAnZGFpbHkgdmxvZycsICdvdXRkb29yJywgJ2JsYWNrIG9wcycsICdzb3VuZCcsICdjaHJpc3QnLCAnZHV0eScsICdqdXZlbmlsZSBmaWN0aW9uJywgJ3BjIGdhbWUnLCAnaG93LXRvJywgJ3d3MicsICdjcmVlcHknLCAnYXJ0aXN0JywgJ2dhbGF4eScsICdkZXN0aW55IDInLCAnbmV3IG11c2ljJywgJ3F1ZXN0JywgJ2xlZScsICdwYWNtYW4nLCAnc3VwZXIgc21hc2ggYnJvcycsICdkYXknLCAnc3Vydml2YWwgaG9ycm9yJywgJ3BhdHJlb24nLCAnYml0Y29pbiBwcmljZScsICd0cmVuZGluZycsICdvcGVuIHdvcmxkJywgJ3dpaSB1JywgJ2RvcGUnLCAncmVhcGVyJywgJ3NuaXBpbmcnLCAnZHVic3RlcCcsICd0cnVjaycsICdwbGFuZXQnLCAnZGMnLCAnYW1hem9uJywgJ3NwaXJpdHVhbGl0eScsICd1bml2ZXJzZScsICd2aWRlbyBnYW1lIGN1bHR1cmUnLCAnY29tbXVuaXR5JywgJ2NhdCcsICdhbGllbnMnLCAndG91cmlzbScsICdhbHRjb2lucycsICdzdHlsZScsICd0cmF2ZWwgdHJhaWxlcicsICdyZGEnLCAnZ3VuJywgJ3NlY3JldCcsICdmYXIgY3J5IDUnLCAnYXV0bycsICdjdWx0dXJlJywgJ2RqJywgJ213MicsICdsb3JkJywgJ2Z1bGwgdGltZSBydmluZycsICdyb2xlLXBsYXlpbmcgZ2FtZScsICdwcmFuaycsICdncmFuZCB0aGVmdCBhdXRvJywgJ21hc3RlcicsICd3cmVzdGxpbmcnLCAnc2NpLWZpJywgJ3dvcmtvdXQnLCAnZ2hvc3QnLCAnZmFrZSBuZXdzJywgJ3NpbGx5JywgJ3NlYXNvbicsICdibzQnLCAndHJhZGluZycsICdleHRyZW1lJywgJ2Vjb25vbXknLCAnY29tYmF0JywgJ3BsYXlzJywgJ211c2xpbScsICdwdWJnIG1vYmlsZScsICdjbGlwcycsICdibzEnLCAncGF5cGFsJywgJ3NpbXMnLCAnZXhwbG9yYXRpb24nLCAnbGlnaHQnLCAncmlwcGxlJywgJ3BhcmFub3JtYWwnLCAnZm9vdGJhbGwnLCAnY2FwY29tJywgJ3J0YScsICdkaXNjb3JkJywgJ2JhdG1hbicsICdwbGF5ZXInLCAnc2VydmVyJywgJ2FuYXJjaHknLCAnbWlsaXRhcnknLCAncGxheWxpc3QnLCAnY29zcGxheScsICdydiBwYXJrJywgJ3JhbnQnLCAnZWRpdCcsICdnZXJtYW55JywgJ3JlYWRpbmcnLCAnY2hyaXMnLCAnZmxhc2gnLCAnbG9vdCcsICdiaXRjb2luIGdyYXRpcycsICdnYW1lIHJldmlld3MnLCAnbW92aWVzJywgJ3N0dXBpZCcsICdsYXRlc3QgbmV3cycsICdzcXVhZCBnYW1lcGxheScsICdndXJ1JywgJ3RpbWVsYXBzZScsICdibGFjayBvcHMgMycsICdob2xpZGF5JywgJ3NvdWwnLCAnbW90aXZhdGlvbicsICdtdzMnLCAndmFjYXRpb24nLCAnc2VnYScsICcxOXRoIGNlbnR1cnknLCAncG9wJywgJ3NpbXMgNCcsICdwb3N0JywgJ3Ntb2snLCAnaXNsYW5kJywgJ3Njb3RsYW5kJywgJ3BhbGFkaW5zJywgJ3dhcnJpb3InLCAnY3JlZXB5cGFzdGEnLCAncm9sZS1wbGF5aW5nJywgJ3NvbGFyJywgJ3ZyJywgJ2FuaW1hbCcsICdwZWFjZScsICdjb25zY2lvdXNuZXNzJywgJ2RvdGEnLCAnYXVkaW8nLCAnbWFzcyBlZmZlY3QnLCAnaHVtb3VyJywgJ2ZpcnN0IGxvb2snLCAndmlkZW9nYW1lcycsICdmdXR1cmUgYmFzcycsICdmcmVlc3R5bGUnLCAnaGFyZGNvcmUnLCAncG9ydHVnYWwnLCAnZGFudGRtJywgJ3RlYXNlcicsICdsYnJ5J107XG5cbi8vICAgICAgXG5cbmNvbnN0IENIRUNLX0RBRU1PTl9TVEFSVEVEX1RSWV9OVU1CRVIgPSAyMDA7XG4vL1xuLy8gQmFzaWMgTEJSWSBzZGsgY29ubmVjdGlvbiBjb25maWdcbi8vIE9mZmVycyBhIHByb3h5IHRvIGNhbGwgTEJSWSBzZGsgbWV0aG9kc1xuXG4vL1xuY29uc3QgTGJyeSA9IHtcbiAgaXNDb25uZWN0ZWQ6IGZhbHNlLFxuICBjb25uZWN0UHJvbWlzZTogbnVsbCxcbiAgZGFlbW9uQ29ubmVjdGlvblN0cmluZzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTI3OScsXG4gIGFsdGVybmF0ZUNvbm5lY3Rpb25TdHJpbmc6ICcnLFxuICBtZXRob2RzVXNpbmdBbHRlcm5hdGVDb25uZWN0aW9uU3RyaW5nOiBbXSxcbiAgYXBpUmVxdWVzdEhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uLXJwYycgfSxcblxuICAvLyBBbGxvdyBvdmVycmlkaW5nIGRhZW1vbiBjb25uZWN0aW9uIHN0cmluZyAoZS5nLiB0byBgL2FwaS9wcm94eWAgZm9yIGxicnl3ZWIpXG4gIHNldERhZW1vbkNvbm5lY3Rpb25TdHJpbmc6IHZhbHVlID0+IHtcbiAgICBMYnJ5LmRhZW1vbkNvbm5lY3Rpb25TdHJpbmcgPSB2YWx1ZTtcbiAgfSxcblxuICBzZXRBcGlIZWFkZXI6IChrZXksIHZhbHVlKSA9PiB7XG4gICAgTGJyeS5hcGlSZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oTGJyeS5hcGlSZXF1ZXN0SGVhZGVycywgeyBba2V5XTogdmFsdWUgfSk7XG4gIH0sXG5cbiAgdW5zZXRBcGlIZWFkZXI6IGtleSA9PiB7XG4gICAgT2JqZWN0LmtleXMoTGJyeS5hcGlSZXF1ZXN0SGVhZGVycykuaW5jbHVkZXMoa2V5KSAmJiBkZWxldGUgTGJyeS5hcGlSZXF1ZXN0SGVhZGVyc1sna2V5J107XG4gIH0sXG4gIC8vIEFsbG93IG92ZXJyaWRpbmcgTGJyeSBtZXRob2RzXG4gIG92ZXJyaWRlczoge30sXG4gIHNldE92ZXJyaWRlOiAobWV0aG9kTmFtZSwgbmV3TWV0aG9kKSA9PiB7XG4gICAgTGJyeS5vdmVycmlkZXNbbWV0aG9kTmFtZV0gPSBuZXdNZXRob2Q7XG4gIH0sXG4gIGdldEFwaVJlcXVlc3RIZWFkZXJzOiAoKSA9PiBMYnJ5LmFwaVJlcXVlc3RIZWFkZXJzLFxuXG4gIC8vIFJldHVybnMgYSBodW1hbiByZWFkYWJsZSBtZWRpYSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50IHR5cGUgb3IgZXh0ZW5zaW9uIG9mIGEgZmlsZSB0aGF0IGlzIHJldHVybmVkIGJ5IHRoZSBzZGtcbiAgZ2V0TWVkaWFUeXBlOiAoY29udGVudFR5cGUsIGZpbGVOYW1lKSA9PiB7XG4gICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICBjb25zdCBmb3JtYXRzID0gW1svXFwuKG1wNHxtNHZ8d2VibXxmbHZ8ZjR2fG9ndikkL2ksICd2aWRlbyddLCBbL1xcLihtcDN8bTRhfGFhY3x3YXZ8ZmxhY3xvZ2d8b3B1cykkL2ksICdhdWRpbyddLCBbL1xcLihqcGVnfGpwZ3xwbmd8Z2lmfHN2ZykkL2ksICdpbWFnZSddLCBbL1xcLihofGdvfGphfGphdmF8anN8anN4fGN8Y3BwfGNzfGNzc3xyYnxzY3NzfHNofHBocHxweSkkL2ksICdzY3JpcHQnXSwgWy9cXC4oaHRtbHxqc29ufGNzdnx0eHR8bG9nfG1kfG1hcmtkb3dufGRvY3h8cGRmfHhtbHx5bWx8eWFtbCkkL2ksICdkb2N1bWVudCddLCBbL1xcLihwZGZ8b2RmfGRvY3xkb2N4fGVwdWJ8b3JnfHJ0ZikkL2ksICdlLWJvb2snXSwgWy9cXC4oc3RsfG9ianxmYnh8Z2NvZGUpJC9pLCAnM0QtZmlsZSddLCBbL1xcLihjYnJ8Y2J0fGNieikkL2ksICdjb21pYy1ib29rJ10sIFsvXFwuKGxicnkpJC9pLCAnYXBwbGljYXRpb24nXV07XG5cbiAgICAgIGNvbnN0IHJlcyA9IGZvcm1hdHMucmVkdWNlKChyZXQsIHRlc3RwYWlyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGVzdHBhaXJbMF0udGVzdChyZXQpKSB7XG4gICAgICAgICAgY2FzZSB0cnVlOlxuICAgICAgICAgICAgcmV0dXJuIHRlc3RwYWlyWzFdO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICB9LCBmaWxlTmFtZSk7XG4gICAgICByZXR1cm4gcmVzID09PSBmaWxlTmFtZSA/ICd1bmtub3duJyA6IHJlcztcbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gKC9eW14vXSsvLmV4ZWMoY29udGVudFR5cGUpWzBdXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAndW5rbm93bic7XG4gIH0sXG5cbiAgLy9cbiAgLy8gTGJyeSBTREsgTWV0aG9kc1xuICAvLyBodHRwczovL2xicnkudGVjaC9hcGkvc2RrXG4gIC8vXG4gIHN0YXR1czogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnc3RhdHVzJywgcGFyYW1zKSxcbiAgc3RvcDogKCkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N0b3AnLCB7fSksXG4gIHZlcnNpb246ICgpID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd2ZXJzaW9uJywge30pLFxuXG4gIC8vIENsYWltIGZldGNoaW5nIGFuZCBtYW5pcHVsYXRpb25cbiAgcmVzb2x2ZTogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdyZXNvbHZlJywgcGFyYW1zKSxcbiAgZ2V0OiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2dldCcsIHBhcmFtcyksXG4gIGNsYWltX3NlYXJjaDogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjbGFpbV9zZWFyY2gnLCBwYXJhbXMpLFxuICBjbGFpbV9saXN0OiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NsYWltX2xpc3QnLCBwYXJhbXMpLFxuICBjaGFubmVsX2NyZWF0ZTogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjaGFubmVsX2NyZWF0ZScsIHBhcmFtcyksXG4gIGNoYW5uZWxfdXBkYXRlOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NoYW5uZWxfdXBkYXRlJywgcGFyYW1zKSxcbiAgY2hhbm5lbF9pbXBvcnQ6IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY2hhbm5lbF9pbXBvcnQnLCBwYXJhbXMpLFxuICBjaGFubmVsX2xpc3Q6IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY2hhbm5lbF9saXN0JywgcGFyYW1zKSxcbiAgc3RyZWFtX2FiYW5kb246IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnc3RyZWFtX2FiYW5kb24nLCBwYXJhbXMpLFxuICBzdHJlYW1fbGlzdDogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdHJlYW1fbGlzdCcsIHBhcmFtcyksXG4gIGNoYW5uZWxfYWJhbmRvbjogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjaGFubmVsX2FiYW5kb24nLCBwYXJhbXMpLFxuICBzdXBwb3J0X2NyZWF0ZTogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdXBwb3J0X2NyZWF0ZScsIHBhcmFtcyksXG4gIHN1cHBvcnRfbGlzdDogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdXBwb3J0X2xpc3QnLCBwYXJhbXMpLFxuICBzdHJlYW1fcmVwb3N0OiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N0cmVhbV9yZXBvc3QnLCBwYXJhbXMpLFxuXG4gIC8vIEZpbGUgZmV0Y2hpbmcgYW5kIG1hbmlwdWxhdGlvblxuICBmaWxlX2xpc3Q6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2ZpbGVfbGlzdCcsIHBhcmFtcyksXG4gIGZpbGVfZGVsZXRlOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdmaWxlX2RlbGV0ZScsIHBhcmFtcyksXG4gIGZpbGVfc2V0X3N0YXR1czogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnZmlsZV9zZXRfc3RhdHVzJywgcGFyYW1zKSxcbiAgYmxvYl9kZWxldGU6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2Jsb2JfZGVsZXRlJywgcGFyYW1zKSxcbiAgYmxvYl9saXN0OiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdibG9iX2xpc3QnLCBwYXJhbXMpLFxuXG4gIC8vIFdhbGxldCB1dGlsaXRpZXNcbiAgd2FsbGV0X2JhbGFuY2U6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9iYWxhbmNlJywgcGFyYW1zKSxcbiAgd2FsbGV0X2RlY3J5cHQ6ICgpID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd3YWxsZXRfZGVjcnlwdCcsIHt9KSxcbiAgd2FsbGV0X2VuY3J5cHQ6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9lbmNyeXB0JywgcGFyYW1zKSxcbiAgd2FsbGV0X3VubG9jazogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnd2FsbGV0X3VubG9jaycsIHBhcmFtcyksXG4gIHdhbGxldF9saXN0OiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd3YWxsZXRfbGlzdCcsIHBhcmFtcyksXG4gIHdhbGxldF9zZW5kOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd3YWxsZXRfc2VuZCcsIHBhcmFtcyksXG4gIHdhbGxldF9zdGF0dXM6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9zdGF0dXMnLCBwYXJhbXMpLFxuICBhZGRyZXNzX2lzX21pbmU6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2FkZHJlc3NfaXNfbWluZScsIHBhcmFtcyksXG4gIGFkZHJlc3NfdW51c2VkOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdhZGRyZXNzX3VudXNlZCcsIHBhcmFtcyksXG4gIGFkZHJlc3NfbGlzdDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnYWRkcmVzc19saXN0JywgcGFyYW1zKSxcbiAgdHJhbnNhY3Rpb25fbGlzdDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgndHJhbnNhY3Rpb25fbGlzdCcsIHBhcmFtcyksXG4gIHV0eG9fcmVsZWFzZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgndXR4b19yZWxlYXNlJywgcGFyYW1zKSxcbiAgc3VwcG9ydF9hYmFuZG9uOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdXBwb3J0X2FiYW5kb24nLCBwYXJhbXMpLFxuXG4gIHN5bmNfaGFzaDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnc3luY19oYXNoJywgcGFyYW1zKSxcbiAgc3luY19hcHBseTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnc3luY19hcHBseScsIHBhcmFtcyksXG5cbiAgLy8gUHJlZmVyZW5jZXNcbiAgcHJlZmVyZW5jZV9nZXQ6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3ByZWZlcmVuY2VfZ2V0JywgcGFyYW1zKSxcbiAgcHJlZmVyZW5jZV9zZXQ6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3ByZWZlcmVuY2Vfc2V0JywgcGFyYW1zKSxcblxuICAvLyBDb21tZW50c1xuICBjb21tZW50X2xpc3Q6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NvbW1lbnRfbGlzdCcsIHBhcmFtcyksXG4gIGNvbW1lbnRfY3JlYXRlOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjb21tZW50X2NyZWF0ZScsIHBhcmFtcyksXG4gIGNvbW1lbnRfaGlkZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY29tbWVudF9oaWRlJywgcGFyYW1zKSxcbiAgY29tbWVudF9hYmFuZG9uOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjb21tZW50X2FiYW5kb24nLCBwYXJhbXMpLFxuICBjb21tZW50X3VwZGF0ZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY29tbWVudF91cGRhdGUnLCBwYXJhbXMpLFxuXG4gIC8vIENvbm5lY3QgdG8gdGhlIHNka1xuICBjb25uZWN0OiAoKSA9PiB7XG4gICAgaWYgKExicnkuY29ubmVjdFByb21pc2UgPT09IG51bGwpIHtcbiAgICAgIExicnkuY29ubmVjdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCB0cnlOdW0gPSAwO1xuICAgICAgICAvLyBDaGVjayBldmVyeSBoYWxmIHNlY29uZCB0byBzZWUgaWYgdGhlIGRhZW1vbiBpcyBhY2NlcHRpbmcgY29ubmVjdGlvbnNcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tEYWVtb25TdGFydGVkKCkge1xuICAgICAgICAgIHRyeU51bSArPSAxO1xuICAgICAgICAgIExicnkuc3RhdHVzKCkudGhlbihyZXNvbHZlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJ5TnVtIDw9IENIRUNLX0RBRU1PTl9TVEFSVEVEX1RSWV9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0RhZW1vblN0YXJ0ZWQsIHRyeU51bSA8IDUwID8gNDAwIDogMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVbmFibGUgdG8gY29ubmVjdCB0byBMQlJZJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tEYWVtb25TdGFydGVkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGbG93IHRoaW5rcyB0aGlzIGNvdWxkIGJlIGVtcHR5LCBidXQgaXQgd2lsbCBhbHdheXMgcmV1dHVybiBhIHByb21pc2VcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIExicnkuY29ubmVjdFByb21pc2U7XG4gIH0sXG5cbiAgcHVibGlzaDogKHBhcmFtcyA9IHt9KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKExicnkub3ZlcnJpZGVzLnB1Ymxpc2gpIHtcbiAgICAgIExicnkub3ZlcnJpZGVzLnB1Ymxpc2gocGFyYW1zKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaUNhbGwoJ3B1Ymxpc2gnLCBwYXJhbXMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfVxuICB9KVxufTtcblxuZnVuY3Rpb24gY2hlY2tBbmRQYXJzZShyZXNwb25zZSkge1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5qc29uKCkudGhlbihqc29uID0+IHtcbiAgICBsZXQgZXJyb3I7XG4gICAgaWYgKGpzb24uZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHR5cGVvZiBqc29uLmVycm9yID09PSAnb2JqZWN0JyA/IGpzb24uZXJyb3IubWVzc2FnZSA6IGpzb24uZXJyb3I7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignUHJvdG9jb2wgZXJyb3Igd2l0aCB1bmtub3duIHJlc3BvbnNlIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBpQ2FsbChtZXRob2QsIHBhcmFtcywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIGNvbnN0IGNvdW50ZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiBMYnJ5LmFwaVJlcXVlc3RIZWFkZXJzLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgbWV0aG9kLFxuICAgICAgcGFyYW1zLFxuICAgICAgaWQ6IGNvdW50ZXJcbiAgICB9KVxuICB9O1xuXG4gIGNvbnN0IGNvbm5lY3Rpb25TdHJpbmcgPSBMYnJ5Lm1ldGhvZHNVc2luZ0FsdGVybmF0ZUNvbm5lY3Rpb25TdHJpbmcuaW5jbHVkZXMobWV0aG9kKSA/IExicnkuYWx0ZXJuYXRlQ29ubmVjdGlvblN0cmluZyA6IExicnkuZGFlbW9uQ29ubmVjdGlvblN0cmluZztcbiAgcmV0dXJuIGZldGNoKGNvbm5lY3Rpb25TdHJpbmcgKyAnP209JyArIG1ldGhvZCwgb3B0aW9ucykudGhlbihjaGVja0FuZFBhcnNlKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBjb25zdCBlcnJvciA9IHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuZXJyb3I7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZS5yZXN1bHQpO1xuICB9KS5jYXRjaChyZWplY3QpO1xufVxuXG5mdW5jdGlvbiBkYWVtb25DYWxsV2l0aFJlc3VsdChuYW1lLCBwYXJhbXMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFwaUNhbGwobmFtZSwgcGFyYW1zLCByZXN1bHQgPT4ge1xuICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0sIHJlamVjdCk7XG4gIH0pO1xufVxuXG4vLyBUaGlzIGlzIG9ubHkgZm9yIGEgZmFsbGJhY2tcbi8vIElmIHRoZXJlIGlzIGEgTGJyeSBtZXRob2QgdGhhdCBpcyBiZWluZyBjYWxsZWQgYnkgYW4gYXBwLCBpdCBzaG91bGQgYmUgYWRkZWQgdG8gL2Zsb3ctdHlwZWQvTGJyeS5qc1xuY29uc3QgbGJyeVByb3h5ID0gbmV3IFByb3h5KExicnksIHtcbiAgZ2V0KHRhcmdldCwgbmFtZSkge1xuICAgIGlmIChuYW1lIGluIHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHBhcmFtcyA9IHt9KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBhcGlDYWxsKG5hbWUsIHBhcmFtcywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbi8vICAgICAgXG5cbmNvbnN0IERFRkFVTFRfU0VBUkNIX1JFU1VMVF9GUk9NID0gMDtcbmNvbnN0IERFRkFVTFRfU0VBUkNIX1NJWkUgPSAyMDtcblxuZnVuY3Rpb24gcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZykge1xuICBpZiAocXVlcnlTdHJpbmcgPT09ICcnKSByZXR1cm4ge307XG4gIGNvbnN0IHBhcnRzID0gcXVlcnlTdHJpbmcuc3BsaXQoJz8nKS5wb3AoKS5zcGxpdCgnJicpLm1hcChwID0+IHAuc3BsaXQoJz0nKSk7XG5cbiAgY29uc3QgcGFyYW1zID0ge307XG4gIHBhcnRzLmZvckVhY2goYXJyYXkgPT4ge1xuICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IGFycmF5O1xuICAgIHBhcmFtc1tmaXJzdF0gPSBzZWNvbmQ7XG4gIH0pO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKHBhcmFtcykge1xuICBpZiAoIXBhcmFtcykgcmV0dXJuICcnO1xuXG4gIGNvbnN0IHBhcnRzID0gW107XG4gIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1zLCBrZXkpICYmIHBhcmFtc1trZXldKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2tleX09JHtwYXJhbXNba2V5XX1gKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcmJyk7XG59XG5cbmNvbnN0IGdldFNlYXJjaFF1ZXJ5U3RyaW5nID0gKHF1ZXJ5LCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgZW5jb2RlZFF1ZXJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KTtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBbYHM9JHtlbmNvZGVkUXVlcnl9YCwgYHNpemU9JHtvcHRpb25zLnNpemUgfHwgREVGQVVMVF9TRUFSQ0hfU0laRX1gLCBgZnJvbT0ke29wdGlvbnMuZnJvbSB8fCBERUZBVUxUX1NFQVJDSF9SRVNVTFRfRlJPTX1gXTtcbiAgY29uc3QgeyBpc0JhY2tncm91bmRTZWFyY2ggfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGluY2x1ZGVVc2VyT3B0aW9ucyA9IHR5cGVvZiBpc0JhY2tncm91bmRTZWFyY2ggPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiAhaXNCYWNrZ3JvdW5kU2VhcmNoO1xuXG4gIGlmIChpbmNsdWRlVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGFpbVR5cGUgPSBvcHRpb25zW1NFQVJDSF9PUFRJT05TLkNMQUlNX1RZUEVdO1xuICAgIGlmIChjbGFpbVR5cGUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYGNsYWltVHlwZT0ke2NsYWltVHlwZX1gKTtcblxuICAgICAgLy8gSWYgdGhleSBhcmUgb25seSBzZWFyY2hpbmcgZm9yIGNoYW5uZWxzLCBzdHJpcCBvdXQgdGhlIG1lZGlhIGluZm9cbiAgICAgIGlmICghY2xhaW1UeXBlLmluY2x1ZGVzKFNFQVJDSF9PUFRJT05TLklOQ0xVREVfQ0hBTk5FTFMpKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYG1lZGlhVHlwZT0ke1tTRUFSQ0hfT1BUSU9OUy5NRURJQV9GSUxFLCBTRUFSQ0hfT1BUSU9OUy5NRURJQV9BVURJTywgU0VBUkNIX09QVElPTlMuTUVESUFfVklERU8sIFNFQVJDSF9PUFRJT05TLk1FRElBX1RFWFQsIFNFQVJDSF9PUFRJT05TLk1FRElBX0lNQUdFLCBTRUFSQ0hfT1BUSU9OUy5NRURJQV9BUFBMSUNBVElPTl0ucmVkdWNlKChhY2MsIGN1cnJlbnRPcHRpb24pID0+IG9wdGlvbnNbY3VycmVudE9wdGlvbl0gPyBgJHthY2N9JHtjdXJyZW50T3B0aW9ufSxgIDogYWNjLCAnJyl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSB7fTtcbiAgY29uc3QgeyByZWxhdGVkX3RvIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IG5zZncgfSA9IG9wdGlvbnM7XG4gIGlmIChyZWxhdGVkX3RvKSBhZGRpdGlvbmFsT3B0aW9uc1sncmVsYXRlZF90byddID0gcmVsYXRlZF90bztcbiAgaWYgKHR5cGVvZiBuc2Z3ICE9PSAndW5kZWZpbmVkJykgYWRkaXRpb25hbE9wdGlvbnNbJ25zZncnXSA9IG5zZnc7XG5cbiAgaWYgKGFkZGl0aW9uYWxPcHRpb25zKSB7XG4gICAgT2JqZWN0LmtleXMoYWRkaXRpb25hbE9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGFkZGl0aW9uYWxPcHRpb25zW2tleV07XG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke2tleX09JHtvcHRpb259YCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlQYXJhbXMuam9pbignJicpO1xufTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuY29uc3QgY2hhbm5lbE5hbWVNaW5MZW5ndGggPSAxO1xuY29uc3QgY2xhaW1JZE1heExlbmd0aCA9IDQwO1xuXG4vLyBzZWUgaHR0cHM6Ly9zcGVjLmxicnkuY29tLyN1cmxzXG5jb25zdCByZWdleEludmFsaWRVUkkgPSAvWyA9JiM6JEAlPzsvXFxcXFwiPD4lXFx7XFx9fF5+W1xcXWBcXHV7MDAwMH0tXFx1ezAwMDh9XFx1ezAwMGJ9LVxcdXswMDBjfVxcdXswMDBlfS1cXHV7MDAxRn1cXHV7RDgwMH0tXFx1e0RGRkZ9XFx1e0ZGRkV9LVxcdXtGRkZGfV0vdTtcbmNvbnN0IHJlZ2V4QWRkcmVzcyA9IC9eKGJ8cikoPz1bXjBPSWxdezMyLDMzfSlbMC05QS1aYS16XXszMiwzM30kLztcbmNvbnN0IHJlZ2V4UGFydFByb3RvY29sID0gJ14oKD86bGJyeTovLyk/KSc7XG5jb25zdCByZWdleFBhcnRTdHJlYW1PckNoYW5uZWxOYW1lID0gJyhbXjokIy9dKiknO1xuY29uc3QgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IgPSAnKFs6JCNdPykoW14vXSopJztcbmNvbnN0IHF1ZXJ5U3RyaW5nQnJlYWtlciA9ICdeKFtcXFxcU10rKShbP11bXFxcXFNdKiknO1xuY29uc3Qgc2VwYXJhdGVRdWVyeXN0cmluZyA9IG5ldyBSZWdFeHAocXVlcnlTdHJpbmdCcmVha2VyKTtcblxuLyoqXG4gKiBQYXJzZXMgYSBMQlJZIG5hbWUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBUaHJvd3MgZXJyb3JzIHdpdGggdXNlci1mcmllbmRseVxuICogbWVzc2FnZXMgZm9yIGludmFsaWQgbmFtZXMuXG4gKlxuICogUmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCBrZXlzOlxuICogICAtIHBhdGggKHN0cmluZylcbiAqICAgLSBpc0NoYW5uZWwgKGJvb2xlYW4pXG4gKiAgIC0gc3RyZWFtTmFtZSAoc3RyaW5nLCBpZiBwcmVzZW50KVxuICogICAtIHN0cmVhbUNsYWltSWQgKHN0cmluZywgaWYgcHJlc2VudClcbiAqICAgLSBjaGFubmVsTmFtZSAoc3RyaW5nLCBpZiBwcmVzZW50KVxuICogICAtIGNoYW5uZWxDbGFpbUlkIChzdHJpbmcsIGlmIHByZXNlbnQpXG4gKiAgIC0gcHJpbWFyeUNsYWltU2VxdWVuY2UgKGludCwgaWYgcHJlc2VudClcbiAqICAgLSBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlIChpbnQsIGlmIHByZXNlbnQpXG4gKiAgIC0gcHJpbWFyeUJpZFBvc2l0aW9uIChpbnQsIGlmIHByZXNlbnQpXG4gKiAgIC0gc2Vjb25kYXJ5QmlkUG9zaXRpb24gKGludCwgaWYgcHJlc2VudClcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVVSSShVUkwsIHJlcXVpcmVQcm90byA9IGZhbHNlKSB7XG4gIC8vIEJyZWFrIGludG8gY29tcG9uZW50cy4gRW1wdHkgc3ViLW1hdGNoZXMgYXJlIGNvbnZlcnRlZCB0byBudWxsXG5cbiAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFBhcnRQcm90b2NvbCArIC8vIHByb3RvY29sXG4gIHJlZ2V4UGFydFN0cmVhbU9yQ2hhbm5lbE5hbWUgKyAvLyBzdHJlYW0gb3IgY2hhbm5lbCBuYW1lIChzdG9wcyBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIG9yIGVuZClcbiAgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IgKyAvLyBtb2RpZmllciBzZXBhcmF0b3IsIG1vZGlmaWVyIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAnKC8/KScgKyAvLyBwYXRoIHNlcGFyYXRvciwgdGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIChvcHRpb25hbCkgc2xhc2ggdG8gc2VwYXJhdGUgdGhlIHN0cmVhbSBhbmQgY2hhbm5lbCBwYXJ0c1xuICByZWdleFBhcnRTdHJlYW1PckNoYW5uZWxOYW1lICsgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IpO1xuICAvLyBjaG9wIG9mZiB0aGUgcXVlcnlzdHJpbmcgZmlyc3RcbiAgbGV0IFFTU3RyaXBwZWRVUkwsIHFzO1xuICBjb25zdCBxc1JlZ2V4UmVzdWx0ID0gc2VwYXJhdGVRdWVyeXN0cmluZy5leGVjKFVSTCk7XG4gIGlmIChxc1JlZ2V4UmVzdWx0KSB7XG4gICAgW1FTU3RyaXBwZWRVUkwsIHFzXSA9IHFzUmVnZXhSZXN1bHQuc2xpY2UoMSkubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICB9XG5cbiAgY29uc3QgY2xlYW5VUkwgPSBRU1N0cmlwcGVkVVJMIHx8IFVSTDtcbiAgY29uc3QgcmVnZXhNYXRjaCA9IGNvbXBvbmVudHNSZWdleC5leGVjKGNsZWFuVVJMKSB8fCBbXTtcbiAgY29uc3QgW3Byb3RvLCAuLi5yZXN0XSA9IHJlZ2V4TWF0Y2guc2xpY2UoMSkubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICBjb25zdCBwYXRoID0gcmVzdC5qb2luKCcnKTtcbiAgY29uc3QgW3N0cmVhbU5hbWVPckNoYW5uZWxOYW1lLCBwcmltYXJ5TW9kU2VwYXJhdG9yLCBwcmltYXJ5TW9kVmFsdWUsIHBhdGhTZXAsIHBvc3NpYmxlU3RyZWFtTmFtZSwgc2Vjb25kYXJ5TW9kU2VwYXJhdG9yLCBzZWNvbmRhcnlNb2RWYWx1ZV0gPSByZXN0O1xuXG4gIC8vIFZhbGlkYXRlIHByb3RvY29sXG4gIGlmIChyZXF1aXJlUHJvdG8gJiYgIXByb3RvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdMQlJZIFVSTHMgbXVzdCBpbmNsdWRlIGEgcHJvdG9jb2wgcHJlZml4IChsYnJ5Oi8vKS4nKSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gIGlmICghc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoX18oJ1VSTCBkb2VzIG5vdCBpbmNsdWRlIG5hbWUuJykpO1xuICB9XG5cbiAgcmVzdC5mb3JFYWNoKHVybFBpZWNlID0+IHtcbiAgICBpZiAodXJsUGllY2UgJiYgdXJsUGllY2UuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgY29uc29sZS5lcnJvcignVVJMIGNhbiBub3QgaW5jbHVkZSBhIHNwYWNlJyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpbmNsdWRlc0NoYW5uZWwgPSBzdHJlYW1OYW1lT3JDaGFubmVsTmFtZS5zdGFydHNXaXRoKCdAJyk7XG4gIGNvbnN0IGlzQ2hhbm5lbCA9IHN0cmVhbU5hbWVPckNoYW5uZWxOYW1lLnN0YXJ0c1dpdGgoJ0AnKSAmJiAhcG9zc2libGVTdHJlYW1OYW1lO1xuICBjb25zdCBjaGFubmVsTmFtZSA9IGluY2x1ZGVzQ2hhbm5lbCAmJiBzdHJlYW1OYW1lT3JDaGFubmVsTmFtZS5zbGljZSgxKTtcblxuICBpZiAoaW5jbHVkZXNDaGFubmVsKSB7XG4gICAgaWYgKCFjaGFubmVsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKF9fKCdObyBjaGFubmVsIG5hbWUgYWZ0ZXIgQC4nKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWxOYW1lLmxlbmd0aCA8IGNoYW5uZWxOYW1lTWluTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoX18oYENoYW5uZWwgbmFtZXMgbXVzdCBiZSBhdCBsZWFzdCAlY2hhbm5lbE5hbWVNaW5MZW5ndGglIGNoYXJhY3RlcnMuYCwge1xuICAgICAgICBjaGFubmVsTmFtZU1pbkxlbmd0aFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG1vZGlmaWVyXG4gIGNvbnN0IFtwcmltYXJ5Q2xhaW1JZCwgcHJpbWFyeUNsYWltU2VxdWVuY2UsIHByaW1hcnlCaWRQb3NpdGlvbl0gPSBwYXJzZVVSSU1vZGlmaWVyKHByaW1hcnlNb2RTZXBhcmF0b3IsIHByaW1hcnlNb2RWYWx1ZSk7XG4gIGNvbnN0IFtzZWNvbmRhcnlDbGFpbUlkLCBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLCBzZWNvbmRhcnlCaWRQb3NpdGlvbl0gPSBwYXJzZVVSSU1vZGlmaWVyKHNlY29uZGFyeU1vZFNlcGFyYXRvciwgc2Vjb25kYXJ5TW9kVmFsdWUpO1xuICBjb25zdCBzdHJlYW1OYW1lID0gaW5jbHVkZXNDaGFubmVsID8gcG9zc2libGVTdHJlYW1OYW1lIDogc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWU7XG4gIGNvbnN0IHN0cmVhbUNsYWltSWQgPSBpbmNsdWRlc0NoYW5uZWwgPyBzZWNvbmRhcnlDbGFpbUlkIDogcHJpbWFyeUNsYWltSWQ7XG4gIGNvbnN0IGNoYW5uZWxDbGFpbUlkID0gaW5jbHVkZXNDaGFubmVsICYmIHByaW1hcnlDbGFpbUlkO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgaXNDaGFubmVsLFxuICAgIHBhdGhcbiAgfSwgc3RyZWFtTmFtZSA/IHsgc3RyZWFtTmFtZSB9IDoge30sIHN0cmVhbUNsYWltSWQgPyB7IHN0cmVhbUNsYWltSWQgfSA6IHt9LCBjaGFubmVsTmFtZSA/IHsgY2hhbm5lbE5hbWUgfSA6IHt9LCBjaGFubmVsQ2xhaW1JZCA/IHsgY2hhbm5lbENsYWltSWQgfSA6IHt9LCBwcmltYXJ5Q2xhaW1TZXF1ZW5jZSA/IHsgcHJpbWFyeUNsYWltU2VxdWVuY2U6IHBhcnNlSW50KHByaW1hcnlDbGFpbVNlcXVlbmNlLCAxMCkgfSA6IHt9LCBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlID8geyBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlOiBwYXJzZUludChzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLCAxMCkgfSA6IHt9LCBwcmltYXJ5QmlkUG9zaXRpb24gPyB7IHByaW1hcnlCaWRQb3NpdGlvbjogcGFyc2VJbnQocHJpbWFyeUJpZFBvc2l0aW9uLCAxMCkgfSA6IHt9LCBzZWNvbmRhcnlCaWRQb3NpdGlvbiA/IHsgc2Vjb25kYXJ5QmlkUG9zaXRpb246IHBhcnNlSW50KHNlY29uZGFyeUJpZFBvc2l0aW9uLCAxMCkgfSA6IHt9LCB7XG5cbiAgICAvLyBUaGUgdmFsdWVzIGJlbG93IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgbmV3IHVzZXMgb2YgcGFyc2VVUklcbiAgICAvLyBUaGV5IHdpbGwgbm90IHdvcmsgcHJvcGVybHkgd2l0aCBjYW5vbmljYWxfdXJsc1xuICAgIGNsYWltTmFtZTogc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWUsXG4gICAgY2xhaW1JZDogcHJpbWFyeUNsYWltSWRcbiAgfSwgc3RyZWFtTmFtZSA/IHsgY29udGVudE5hbWU6IHN0cmVhbU5hbWUgfSA6IHt9LCBxcyA/IHsgcXVlcnlTdHJpbmc6IHFzIH0gOiB7fSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJJTW9kaWZpZXIobW9kU2VwZXJhdG9yLCBtb2RWYWx1ZSkge1xuICBsZXQgY2xhaW1JZDtcbiAgbGV0IGNsYWltU2VxdWVuY2U7XG4gIGxldCBiaWRQb3NpdGlvbjtcblxuICBpZiAobW9kU2VwZXJhdG9yKSB7XG4gICAgaWYgKCFtb2RWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKF9fKGBObyBtb2RpZmllciBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgJW1vZFNlcGVyYXRvciUuYCwgeyBtb2RTZXBlcmF0b3IgfSkpO1xuICAgIH1cblxuICAgIGlmIChtb2RTZXBlcmF0b3IgPT09ICcjJykge1xuICAgICAgY2xhaW1JZCA9IG1vZFZhbHVlO1xuICAgIH0gZWxzZSBpZiAobW9kU2VwZXJhdG9yID09PSAnOicpIHtcbiAgICAgIGNsYWltU2VxdWVuY2UgPSBtb2RWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG1vZFNlcGVyYXRvciA9PT0gJyQnKSB7XG4gICAgICBiaWRQb3NpdGlvbiA9IG1vZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjbGFpbUlkICYmIChjbGFpbUlkLmxlbmd0aCA+IGNsYWltSWRNYXhMZW5ndGggfHwgIWNsYWltSWQubWF0Y2goL15bMC05YS1mXSskLykpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKGBJbnZhbGlkIGNsYWltIElEICVjbGFpbUlkJS5gLCB7IGNsYWltSWQgfSkpO1xuICB9XG5cbiAgaWYgKGNsYWltU2VxdWVuY2UgJiYgIWNsYWltU2VxdWVuY2UubWF0Y2goL14tP1sxLTldWzAtOV0qJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdDbGFpbSBzZXF1ZW5jZSBtdXN0IGJlIGEgbnVtYmVyLicpKTtcbiAgfVxuXG4gIGlmIChiaWRQb3NpdGlvbiAmJiAhYmlkUG9zaXRpb24ubWF0Y2goL14tP1sxLTldWzAtOV0qJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdCaWQgcG9zaXRpb24gbXVzdCBiZSBhIG51bWJlci4nKSk7XG4gIH1cblxuICByZXR1cm4gW2NsYWltSWQsIGNsYWltU2VxdWVuY2UsIGJpZFBvc2l0aW9uXTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBvYmplY3QgaW4gdGhlIHNhbWUgZm9ybWF0IHJldHVybmVkIGJ5IHBhcnNlKCkgYW5kIGJ1aWxkcyBhIFVSSS5cbiAqXG4gKiBUaGUgY2hhbm5lbE5hbWUga2V5IHdpbGwgYWNjZXB0IG5hbWVzIHdpdGggb3Igd2l0aG91dCB0aGUgQCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJJKFVybE9iaiwgaW5jbHVkZVByb3RvID0gdHJ1ZSwgcHJvdG9EZWZhdWx0ID0gJ2xicnk6Ly8nKSB7XG4gIGNvbnN0IHtcbiAgICBzdHJlYW1OYW1lLFxuICAgIHN0cmVhbUNsYWltSWQsXG4gICAgY2hhbm5lbE5hbWUsXG4gICAgY2hhbm5lbENsYWltSWQsXG4gICAgcHJpbWFyeUNsYWltU2VxdWVuY2UsXG4gICAgcHJpbWFyeUJpZFBvc2l0aW9uLFxuICAgIHNlY29uZGFyeUNsYWltU2VxdWVuY2UsXG4gICAgc2Vjb25kYXJ5QmlkUG9zaXRpb25cbiAgfSA9IFVybE9iaixcbiAgICAgICAgZGVwcmVjYXRlZFBhcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKFVybE9iaiwgWydzdHJlYW1OYW1lJywgJ3N0cmVhbUNsYWltSWQnLCAnY2hhbm5lbE5hbWUnLCAnY2hhbm5lbENsYWltSWQnLCAncHJpbWFyeUNsYWltU2VxdWVuY2UnLCAncHJpbWFyeUJpZFBvc2l0aW9uJywgJ3NlY29uZGFyeUNsYWltU2VxdWVuY2UnLCAnc2Vjb25kYXJ5QmlkUG9zaXRpb24nXSk7XG4gIGNvbnN0IHsgY2xhaW1JZCwgY2xhaW1OYW1lLCBjb250ZW50TmFtZSB9ID0gZGVwcmVjYXRlZFBhcnRzO1xuXG4gIGlmICghY2xhaW1OYW1lICYmICFjaGFubmVsTmFtZSAmJiAhc3RyZWFtTmFtZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoX18oXCInY2xhaW1OYW1lJywgJ2NoYW5uZWxOYW1lJywgYW5kICdzdHJlYW1OYW1lJyBhcmUgYWxsIGVtcHR5LiBPbmUgbXVzdCBiZSBwcmVzZW50IHRvIGJ1aWxkIGEgdXJsLlwiKSk7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZWRDaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lICYmIChjaGFubmVsTmFtZS5zdGFydHNXaXRoKCdAJykgPyBjaGFubmVsTmFtZSA6IGBAJHtjaGFubmVsTmFtZX1gKTtcbiAgY29uc3QgcHJpbWFyeUNsYWltTmFtZSA9IGNsYWltTmFtZSB8fCBjb250ZW50TmFtZSB8fCBmb3JtYXR0ZWRDaGFubmVsTmFtZSB8fCBzdHJlYW1OYW1lO1xuICBjb25zdCBwcmltYXJ5Q2xhaW1JZCA9IGNsYWltSWQgfHwgKGZvcm1hdHRlZENoYW5uZWxOYW1lID8gY2hhbm5lbENsYWltSWQgOiBzdHJlYW1DbGFpbUlkKTtcbiAgY29uc3Qgc2Vjb25kYXJ5Q2xhaW1OYW1lID0gIWNsYWltTmFtZSAmJiBjb250ZW50TmFtZSB8fCAoZm9ybWF0dGVkQ2hhbm5lbE5hbWUgPyBzdHJlYW1OYW1lIDogbnVsbCk7XG4gIGNvbnN0IHNlY29uZGFyeUNsYWltSWQgPSBzZWNvbmRhcnlDbGFpbU5hbWUgJiYgc3RyZWFtQ2xhaW1JZDtcblxuICByZXR1cm4gKGluY2x1ZGVQcm90byA/IHByb3RvRGVmYXVsdCA6ICcnKSArXG4gIC8vIHByaW1hcnlDbGFpbU5hbWUgd2lsbCBhbHdheXMgZXhpc3QgaGVyZSBiZWNhdXNlIHdlIHRocm93IGFib3ZlIGlmIHRoZXJlIGlzIG5vIFwibmFtZVwiIHZhbHVlIHBhc3NlZCBpblxuICAvLyAkRmxvd0ZpeE1lXG4gIHByaW1hcnlDbGFpbU5hbWUgKyAocHJpbWFyeUNsYWltSWQgPyBgIyR7cHJpbWFyeUNsYWltSWR9YCA6ICcnKSArIChwcmltYXJ5Q2xhaW1TZXF1ZW5jZSA/IGA6JHtwcmltYXJ5Q2xhaW1TZXF1ZW5jZX1gIDogJycpICsgKHByaW1hcnlCaWRQb3NpdGlvbiA/IGAke3ByaW1hcnlCaWRQb3NpdGlvbn1gIDogJycpICsgKHNlY29uZGFyeUNsYWltTmFtZSA/IGAvJHtzZWNvbmRhcnlDbGFpbU5hbWV9YCA6ICcnKSArIChzZWNvbmRhcnlDbGFpbUlkID8gYCMke3NlY29uZGFyeUNsYWltSWR9YCA6ICcnKSArIChzZWNvbmRhcnlDbGFpbVNlcXVlbmNlID8gYDoke3NlY29uZGFyeUNsYWltU2VxdWVuY2V9YCA6ICcnKSArIChzZWNvbmRhcnlCaWRQb3NpdGlvbiA/IGAke3NlY29uZGFyeUJpZFBvc2l0aW9ufWAgOiAnJyk7XG59XG5cbi8qIFRha2VzIGEgcGFyc2VhYmxlIExCUlkgVVJMIGFuZCBjb252ZXJ0cyBpdCB0byBzdGFuZGFyZCwgY2Fub25pY2FsIGZvcm1hdCAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVVJJKFVSTCkge1xuICBjb25zdCB7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uXG4gIH0gPSBwYXJzZVVSSShVUkwpO1xuXG4gIHJldHVybiBidWlsZFVSSSh7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1VSSVZhbGlkKFVSTCkge1xuICB0cnkge1xuICAgIHBhcnNlVVJJKG5vcm1hbGl6ZVVSSShVUkwpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lVmFsaWQoY2xhaW1OYW1lKSB7XG4gIHJldHVybiAhcmVnZXhJbnZhbGlkVVJJLnRlc3QoY2xhaW1OYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNVUklDbGFpbWFibGUoVVJMKSB7XG4gIGxldCBwYXJ0cztcbiAgdHJ5IHtcbiAgICBwYXJ0cyA9IHBhcnNlVVJJKG5vcm1hbGl6ZVVSSShVUkwpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcGFydHMgJiYgcGFydHMuc3RyZWFtTmFtZSAmJiAhcGFydHMuc3RyZWFtQ2xhaW1JZCAmJiAhcGFydHMuaXNDaGFubmVsO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9TaGFyZUxpbmsoVVJMKSB7XG4gIGNvbnN0IHtcbiAgICBzdHJlYW1OYW1lLFxuICAgIHN0cmVhbUNsYWltSWQsXG4gICAgY2hhbm5lbE5hbWUsXG4gICAgY2hhbm5lbENsYWltSWQsXG4gICAgcHJpbWFyeUJpZFBvc2l0aW9uLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uLFxuICAgIHNlY29uZGFyeUNsYWltU2VxdWVuY2VcbiAgfSA9IHBhcnNlVVJJKFVSTCk7XG4gIHJldHVybiBidWlsZFVSSSh7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBwcmltYXJ5Q2xhaW1TZXF1ZW5jZSxcbiAgICBzZWNvbmRhcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlXG4gIH0sIHRydWUsICdodHRwczovL29wZW4ubGJyeS5jb20vJyk7XG59XG5cbnZhciBfZXh0ZW5kcyQxID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3Qgc2VsZWN0U3RhdGUgPSBzdGF0ZSA9PiBzdGF0ZS5zZWFyY2g7XG5cbmNvbnN0IHNlbGVjdFNlYXJjaFZhbHVlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnNlYXJjaFF1ZXJ5KTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoT3B0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5vcHRpb25zKTtcblxuY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuc3VnZ2VzdGlvbnMpO1xuXG5jb25zdCBzZWxlY3RJc1NlYXJjaGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5zZWFyY2hpbmcpO1xuXG5jb25zdCBzZWxlY3RTZWFyY2hVcmlzQnlRdWVyeSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS51cmlzQnlRdWVyeSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RTZWFyY2hVcmlzID0gcXVlcnkgPT5cbi8vIHJlcGxhY2Ugc3RhdGVtZW50IGJlbG93IGlzIGtpbmQgb2YgdWdseSwgYW5kIHJlcGVhdGVkIGluIGRvU2VhcmNoIGFjdGlvblxucmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U2VhcmNoVXJpc0J5UXVlcnksIGJ5UXVlcnkgPT4gYnlRdWVyeVtxdWVyeSA/IHF1ZXJ5LnJlcGxhY2UoL15sYnJ5OlxcL1xcLy9pLCAnJykucmVwbGFjZSgvXFwvLywgJyAnKSA6IHF1ZXJ5XSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUucmVzb2x2ZWRSZXN1bHRzQnlRdWVyeSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUucmVzb2x2ZWRSZXN1bHRzQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHMgPSBxdWVyeSA9PlxuLy8gcmVwbGFjZSBzdGF0ZW1lbnQgYmVsb3cgaXMga2luZCBvZiB1Z2x5LCBhbmQgcmVwZWF0ZWQgaW4gZG9TZWFyY2ggYWN0aW9uXG5yZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNCeVF1ZXJ5LCBieVF1ZXJ5ID0+IGJ5UXVlcnlbcXVlcnkgPyBxdWVyeS5yZXBsYWNlKC9ebGJyeTpcXC9cXC8vaSwgJycpLnJlcGxhY2UoL1xcLy8sICcgJykgOiBxdWVyeV0pO1xuXG5jb25zdCBtYWtlU2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzTGFzdFBhZ2VSZWFjaGVkID0gcXVlcnkgPT5cbi8vIHJlcGxhY2Ugc3RhdGVtZW50IGJlbG93IGlzIGtpbmQgb2YgdWdseSwgYW5kIHJlcGVhdGVkIGluIGRvU2VhcmNoIGFjdGlvblxucmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCwgYnlRdWVyeSA9PiBieVF1ZXJ5W3F1ZXJ5ID8gcXVlcnkucmVwbGFjZSgvXmxicnk6XFwvXFwvL2ksICcnKS5yZXBsYWNlKC9cXC8vLCAnICcpIDogcXVlcnldKTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoQmFyRm9jdXNlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5mb2N1c2VkKTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoU3VnZ2VzdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTZWFyY2hWYWx1ZSwgc2VsZWN0U3VnZ2VzdGlvbnMsIChxdWVyeSwgc3VnZ2VzdGlvbnMpID0+IHtcbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBxdWVyeUlzUHJlZml4ID0gcXVlcnkgPT09ICdsYnJ5OicgfHwgcXVlcnkgPT09ICdsYnJ5Oi8nIHx8IHF1ZXJ5ID09PSAnbGJyeTovLycgfHwgcXVlcnkgPT09ICdsYnJ5Oi8vQCc7XG5cbiAgaWYgKHF1ZXJ5SXNQcmVmaXgpIHtcbiAgICAvLyBJZiBpdCBpcyBhIHByZWZpeCwgd2FpdCB1bnRpbCBzb21ldGhpbmcgZWxzZSBjb21lcyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG9cbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSBpZiAocXVlcnkuc3RhcnRzV2l0aCgnbGJyeTovLycpKSB7XG4gICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggYSBwcmVmaXgsIGRvbid0IHNob3cgYW55IGF1dG9jb21wbGV0ZSByZXN1bHRzXG4gICAgLy8gVGhleSBhcmUgcHJvYmFibHkgdHlwaW5nL3Bhc3RpbmcgaW4gYSBsYnJ5IHVyaVxuICAgIHJldHVybiBbe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogcXVlcnlbN10gPT09ICdAJyA/IFNFQVJDSF9UWVBFUy5DSEFOTkVMIDogU0VBUkNIX1RZUEVTLkZJTEVcbiAgICB9XTtcbiAgfVxuXG4gIGxldCBzZWFyY2hTdWdnZXN0aW9ucyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHVyaSA9IG5vcm1hbGl6ZVVSSShxdWVyeSk7XG4gICAgY29uc3QgeyBjaGFubmVsTmFtZSwgc3RyZWFtTmFtZSwgaXNDaGFubmVsIH0gPSBwYXJzZVVSSSh1cmkpO1xuICAgIHNlYXJjaFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogU0VBUkNIX1RZUEVTLlNFQVJDSFxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiB1cmksXG4gICAgICBzaG9ydGhhbmQ6IGlzQ2hhbm5lbCA/IGNoYW5uZWxOYW1lIDogc3RyZWFtTmFtZSxcbiAgICAgIHR5cGU6IGlzQ2hhbm5lbCA/IFNFQVJDSF9UWVBFUy5DSEFOTkVMIDogU0VBUkNIX1RZUEVTLkZJTEVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNlYXJjaFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogU0VBUkNIX1RZUEVTLlNFQVJDSFxuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgdmFsdWU6IHF1ZXJ5LFxuICAgIHR5cGU6IFNFQVJDSF9UWVBFUy5UQUdcbiAgfSk7XG5cbiAgY29uc3QgYXBpU3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1txdWVyeV0gfHwgW107XG4gIGlmIChhcGlTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICBzZWFyY2hTdWdnZXN0aW9ucyA9IHNlYXJjaFN1Z2dlc3Rpb25zLmNvbmNhdChhcGlTdWdnZXN0aW9ucy5maWx0ZXIoc3VnZ2VzdGlvbiA9PiBzdWdnZXN0aW9uICE9PSBxdWVyeSkubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgLy8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBjaGFubmVsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmkgPSBub3JtYWxpemVVUkkoc3VnZ2VzdGlvbik7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbE5hbWUsIHN0cmVhbU5hbWUsIGlzQ2hhbm5lbCB9ID0gcGFyc2VVUkkodXJpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB1cmksXG4gICAgICAgICAgc2hvcnRoYW5kOiBpc0NoYW5uZWwgPyBjaGFubmVsTmFtZSA6IHN0cmVhbU5hbWUsXG4gICAgICAgICAgdHlwZTogaXNDaGFubmVsID8gU0VBUkNIX1RZUEVTLkNIQU5ORUwgOiBTRUFSQ0hfVFlQRVMuRklMRVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBzZWFyY2ggcmVzdWx0IGluY2x1ZGVzIHNvbWUgY2hhcmFjdGVyIHRoYXQgaXNuJ3QgdmFsaWQgaW4gY2xhaW0gbmFtZXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogc3VnZ2VzdGlvbixcbiAgICAgICAgICB0eXBlOiBTRUFSQ0hfVFlQRVMuU0VBUkNIXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaFN1Z2dlc3Rpb25zO1xufSk7XG5cbi8vIENyZWF0ZXMgYSBxdWVyeSBzdHJpbmcgYmFzZWQgb24gdGhlIHN0YXRlIGluIHRoZSBzZWFyY2ggcmVkdWNlclxuLy8gQ2FuIGJlIG92ZXJyaWRlZCBieSBwYXNzaW5nIGluIGN1c3RvbSBzaXplcy9mcm9tIHZhbHVlcyBmb3Igb3RoZXIgYXJlYXMgcGFnaW5hdGlvblxuXG5cbmNvbnN0IG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zID0gKGN1c3RvbVF1ZXJ5LCBvcHRpb25zKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTZWFyY2hWYWx1ZSwgc2VsZWN0U2VhcmNoT3B0aW9ucywgKHF1ZXJ5LCBkZWZhdWx0T3B0aW9ucykgPT4ge1xuICBjb25zdCBzZWFyY2hPcHRpb25zID0gX2V4dGVuZHMkMSh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IGdldFNlYXJjaFF1ZXJ5U3RyaW5nKGN1c3RvbVF1ZXJ5IHx8IHF1ZXJ5LCBzZWFyY2hPcHRpb25zKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIHVuZGVyc2NvcmUncyBkZWVwIGVxdWFsIGZ1bmN0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvdW5kZXJzY29yZS5qcyNMMTE4OVxuXG5mdW5jdGlvbiBpc0VxdWFsKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gIH1cblxuICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICBpZiAoIWFyZUFycmF5cykge1xuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLFxuICAgICAgICBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKHR5cGVvZiBhQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmIHR5cGVvZiBiQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKSAmJiAnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucHVzaChhKTtcbiAgYlN0YWNrLnB1c2goYik7XG5cbiAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gIGlmIChhcmVBcnJheXMpIHtcbiAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGEpLFxuICAgICAgICBrZXk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBpc0VxdWFsKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucG9wKCk7XG4gIGJTdGFjay5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwYXRoKTtcbn1cbi8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIF9leHRlbmRzJDIgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBleHRyYWN0VXNlclN0YXRlKHJhd09iaikge1xuICBpZiAocmF3T2JqICYmIHJhd09iai52ZXJzaW9uID09PSAnMC4xJyAmJiByYXdPYmoudmFsdWUpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25zLFxuICAgICAgdGFncyxcbiAgICAgIGJsb2NrZWQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIGFwcF93ZWxjb21lX3ZlcnNpb24sXG4gICAgICBzaGFyaW5nXzNQXG4gICAgfSA9IHJhd09iai52YWx1ZTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyQyKHt9LCBzdWJzY3JpcHRpb25zID8geyBzdWJzY3JpcHRpb25zIH0gOiB7fSwgdGFncyA/IHsgdGFncyB9IDoge30sIGJsb2NrZWQgPyB7IGJsb2NrZWQgfSA6IHt9LCBzZXR0aW5ncyA/IHsgc2V0dGluZ3MgfSA6IHt9LCBhcHBfd2VsY29tZV92ZXJzaW9uID8geyBhcHBfd2VsY29tZV92ZXJzaW9uIH0gOiB7fSwgc2hhcmluZ18zUCA/IHsgc2hhcmluZ18zUCB9IDoge30pO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBkb1BvcHVsYXRlU2hhcmVkVXNlclN0YXRlKHNoYXJlZFNldHRpbmdzKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9ucyxcbiAgICAgIHRhZ3MsXG4gICAgICBibG9ja2VkLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBhcHBfd2VsY29tZV92ZXJzaW9uLFxuICAgICAgc2hhcmluZ18zUFxuICAgIH0gPSBleHRyYWN0VXNlclN0YXRlKHNoYXJlZFNldHRpbmdzKTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1NUQVRFX1BPUFVMQVRFLFxuICAgICAgZGF0YToge1xuICAgICAgICBzdWJzY3JpcHRpb25zLFxuICAgICAgICB0YWdzLFxuICAgICAgICBibG9ja2VkLFxuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgd2VsY29tZVZlcnNpb246IGFwcF93ZWxjb21lX3ZlcnNpb24sXG4gICAgICAgIGFsbG93QW5hbHl0aWNzOiBzaGFyaW5nXzNQXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvUHJlZmVyZW5jZVNldChrZXksIHZhbHVlLCB2ZXJzaW9uLCBzdWNjZXNzLCBmYWlsKSB7XG4gIGNvbnN0IHByZWZlcmVuY2UgPSB7XG4gICAgdHlwZTogdHlwZW9mIHZhbHVlLFxuICAgIHZlcnNpb24sXG4gICAgdmFsdWVcbiAgfTtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtleSxcbiAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkocHJlZmVyZW5jZSlcbiAgfTtcblxuICBsYnJ5UHJveHkucHJlZmVyZW5jZV9zZXQob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgc3VjY2VzcyhwcmVmZXJlbmNlKTtcbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIGlmIChmYWlsKSB7XG4gICAgICBmYWlsKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZG9QcmVmZXJlbmNlR2V0KGtleSwgc3VjY2VzcywgZmFpbCkge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtleVxuICB9O1xuXG4gIGxicnlQcm94eS5wcmVmZXJlbmNlX2dldChvcHRpb25zKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgcHJlZmVyZW5jZSA9IHJlc3VsdFtrZXldO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MocHJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3MobnVsbCk7XG4gIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgaWYgKGZhaWwpIHtcbiAgICAgIGZhaWwoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyAgICAgIFxuXG5jb25zdCBTSEFSRURfUFJFRkVSRU5DRV9LRVkgPSAnc2hhcmVkJztcbmNvbnN0IFNIQVJFRF9QUkVGRVJFTkNFX1ZFUlNJT04gPSAnMC4xJztcbmxldCBvbGRTaGFyZWQgPSB7fTtcblxuY29uc3QgYnVpbGRTaGFyZWRTdGF0ZU1pZGRsZXdhcmUgPSAoYWN0aW9ucywgc2hhcmVkU3RhdGVGaWx0ZXJzLCBzaGFyZWRTdGF0ZUNiKSA9PiAoeyBnZXRTdGF0ZSwgZGlzcGF0Y2ggfSkgPT4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICBjb25zdCBjdXJyZW50U3RhdGUgPSBnZXRTdGF0ZSgpO1xuXG4gIC8vIFdlIGRvbid0IGNhcmUgaWYgc3luYyBpcyBkaXNhYmxlZCBoZXJlLCB3ZSBhbHdheXMgd2FudCB0byBiYWNrdXAgcHJlZmVyZW5jZXMgdG8gdGhlIHdhbGxldFxuICBpZiAoIWFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKSB7XG4gICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvblJlc3VsdCA9IG5leHQoYWN0aW9uKTtcbiAgLy8gQ2FsbCBgZ2V0U3RhdGVgIGFmdGVyIGNhbGxpbmcgYG5leHRgIHRvIGVuc3VyZSB0aGUgc3RhdGUgaGFzIHVwZGF0ZWQgaW4gcmVzcG9uc2UgdG8gdGhlIGFjdGlvblxuICBjb25zdCBuZXh0U3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBzaGFyZWQgPSB7fTtcblxuICBPYmplY3Qua2V5cyhzaGFyZWRTdGF0ZUZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzaGFyZWRTdGF0ZUZpbHRlcnNba2V5XTtcbiAgICBjb25zdCB7IHNvdXJjZSwgcHJvcGVydHksIHRyYW5zZm9ybSB9ID0gZmlsdGVyO1xuICAgIGxldCB2YWx1ZSA9IG5leHRTdGF0ZVtzb3VyY2VdW3Byb3BlcnR5XTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2hhcmVkW2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgaWYgKCFpc0VxdWFsKG9sZFNoYXJlZCwgc2hhcmVkKSkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGlmIHRoZSBwcmVmZXJlbmNlIGNoYW5nZWQgZnJvbSBsYXN0IGNhbGwgaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgIG9sZFNoYXJlZCA9IHNoYXJlZDtcbiAgICBkb1ByZWZlcmVuY2VTZXQoU0hBUkVEX1BSRUZFUkVOQ0VfS0VZLCBzaGFyZWQsIFNIQVJFRF9QUkVGRVJFTkNFX1ZFUlNJT04pO1xuICB9XG5cbiAgaWYgKHNoYXJlZFN0YXRlQ2IpIHtcbiAgICAvLyBQYXNzIGRpc3BhdGNoIHRvIHRoZSBjYWxsYmFjayB0byBjb25zdW1lcnMgY2FuIGRpc3BhdGNoIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gcHJlZmVyZW5jZSBzZXRcbiAgICBzaGFyZWRTdGF0ZUNiKHsgZGlzcGF0Y2gsIGdldFN0YXRlIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvblJlc3VsdDtcbn07XG5cbi8vICAgICAgXG5cbmZ1bmN0aW9uIGRvVG9hc3QocGFyYW1zKSB7XG4gIGlmICghcGFyYW1zKSB7XG4gICAgdGhyb3cgRXJyb3IoXCIncGFyYW1zJyBvYmplY3QgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgdG9hc3Qgbm90aWZpY2F0aW9uXCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBDUkVBVEVfVE9BU1QsXG4gICAgZGF0YToge1xuICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgIHBhcmFtc1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9EaXNtaXNzVG9hc3QoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRElTTUlTU19UT0FTVFxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0Vycm9yKGVycm9yKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQ1JFQVRFX0VSUk9SLFxuICAgIGRhdGE6IHtcbiAgICAgIGVycm9yXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0Rpc21pc3NFcnJvcigpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBESVNNSVNTX0VSUk9SXG4gIH07XG59XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDEgPSBzdGF0ZSA9PiBzdGF0ZS53YWxsZXQgfHwge307XG5cbmNvbnN0IHNlbGVjdFdhbGxldFN0YXRlID0gc2VsZWN0U3RhdGUkMTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0SXNFbmNyeXB0ZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRJc0VuY3J5cHRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldEVuY3J5cHRQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0RW5jcnlwdFBlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRFbmNyeXB0U3VjY2VlZGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0RW5jcnlwdFN1Y2NlZGVkKTtcblxuY29uc3Qgc2VsZWN0UGVuZGluZ1N1cHBvcnRUcmFuc2FjdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5wZW5kaW5nU3VwcG9ydFRyYW5zYWN0aW9ucyk7XG5cbmNvbnN0IHNlbGVjdEFiYW5kb25DbGFpbVN1cHBvcnRFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmFiYW5kb25DbGFpbVN1cHBvcnRFcnJvcik7XG5cbmNvbnN0IG1ha2VTZWxlY3RQZW5kaW5nQW1vdW50QnlVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1JZHNCeVVyaSwgc2VsZWN0UGVuZGluZ1N1cHBvcnRUcmFuc2FjdGlvbnMsIChjbGFpbUlkc0J5VXJpLCBwZW5kaW5nU3VwcG9ydHMpID0+IHtcbiAgY29uc3QgdXJpRW50cnkgPSBPYmplY3QuZW50cmllcyhjbGFpbUlkc0J5VXJpKS5maW5kKChbdSwgY2lkXSkgPT4gdSA9PT0gdXJpKTtcbiAgY29uc3QgY2xhaW1JZCA9IHVyaUVudHJ5ICYmIHVyaUVudHJ5WzFdO1xuICBjb25zdCBwZW5kaW5nU3VwcG9ydCA9IGNsYWltSWQgJiYgcGVuZGluZ1N1cHBvcnRzW2NsYWltSWRdO1xuICByZXR1cm4gcGVuZGluZ1N1cHBvcnQgPyBwZW5kaW5nU3VwcG9ydC5lZmZlY3RpdmUgOiB1bmRlZmluZWQ7XG59KTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0RW5jcnlwdFJlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldEVuY3J5cHRSZXN1bHQpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXREZWNyeXB0UGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldERlY3J5cHRQZW5kaW5nKTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0RGVjcnlwdFN1Y2NlZWRlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldERlY3J5cHRTdWNjZWRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldERlY3J5cHRSZXN1bHQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXREZWNyeXB0UmVzdWx0KTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0VW5sb2NrUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldFVubG9ja1BlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRVbmxvY2tTdWNjZWVkZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRVbmxvY2tTdWNjZWRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldFVubG9ja1Jlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldFVubG9ja1Jlc3VsdCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldExvY2tQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0TG9ja1BlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRMb2NrU3VjY2VlZGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0TG9ja1N1Y2NlZGVkKTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0TG9ja1Jlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldExvY2tSZXN1bHQpO1xuXG5jb25zdCBzZWxlY3RCYWxhbmNlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUuYmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFRvdGFsQmFsYW5jZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnRvdGFsQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFJlc2VydmVkQmFsYW5jZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnJlc2VydmVkQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdENsYWltc0JhbGFuY2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5jbGFpbXNCYWxhbmNlKTtcblxuY29uc3Qgc2VsZWN0U3VwcG9ydHNCYWxhbmNlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUuc3VwcG9ydHNCYWxhbmNlKTtcblxuY29uc3Qgc2VsZWN0VGlwc0JhbGFuY2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50aXBzQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFRyYW5zYWN0aW9uc0J5SWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50cmFuc2FjdGlvbnMgfHwge30pO1xuXG5jb25zdCBzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5zdXBwb3J0cyB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdFRvdGFsU3VwcG9ydHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQsIGJ5T3V0cG9pbnQgPT4ge1xuICBsZXQgdG90YWwgPSBwYXJzZUZsb2F0KCcwLjAnKTtcblxuICBPYmplY3QudmFsdWVzKGJ5T3V0cG9pbnQpLmZvckVhY2goc3VwcG9ydCA9PiB7XG4gICAgY29uc3QgeyBhbW91bnQgfSA9IHN1cHBvcnQ7XG4gICAgdG90YWwgPSBhbW91bnQgPyB0b3RhbCArIHBhcnNlRmxvYXQoYW1vdW50KSA6IHRvdGFsO1xuICB9KTtcblxuICByZXR1cm4gdG90YWw7XG59KTtcblxuY29uc3Qgc2VsZWN0VHJhbnNhY3Rpb25JdGVtcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uc0J5SWQsIGJ5SWQgPT4ge1xuICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gIE9iamVjdC5rZXlzKGJ5SWQpLmZvckVhY2godHhpZCA9PiB7XG4gICAgY29uc3QgdHggPSBieUlkW3R4aWRdO1xuXG4gICAgLy8gaWdub3JlIGR1c3QvZmVlc1xuICAgIC8vIGl0IGlzIGZlZSBvbmx5IHR4biBpZiBhbGwgaW5mb3MgYXJlIGFsc28gZW1wdHlcbiAgICBpZiAoTWF0aC5hYnModHgudmFsdWUpID09PSBNYXRoLmFicyh0eC5mZWUpICYmIHR4LmNsYWltX2luZm8ubGVuZ3RoID09PSAwICYmIHR4LnN1cHBvcnRfaW5mby5sZW5ndGggPT09IDAgJiYgdHgudXBkYXRlX2luZm8ubGVuZ3RoID09PSAwICYmIHR4LmFiYW5kb25faW5mby5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBlbmQgPSBbXTtcblxuICAgIGFwcGVuZC5wdXNoKC4uLnR4LmNsYWltX2luZm8ubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgdHgsIGl0ZW0sIHtcbiAgICAgIHR5cGU6IGl0ZW0uY2xhaW1fbmFtZVswXSA9PT0gJ0AnID8gQ0hBTk5FTCQxIDogUFVCTElTSCQxXG4gICAgfSkpKTtcbiAgICBhcHBlbmQucHVzaCguLi50eC5zdXBwb3J0X2luZm8ubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgdHgsIGl0ZW0sIHtcbiAgICAgIHR5cGU6ICFpdGVtLmlzX3RpcCA/IFNVUFBPUlQgOiBUSVBcbiAgICB9KSkpO1xuICAgIGFwcGVuZC5wdXNoKC4uLnR4LnVwZGF0ZV9pbmZvLm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oe30sIHR4LCBpdGVtLCB7IHR5cGU6IFVQREFURSB9KSkpO1xuICAgIGFwcGVuZC5wdXNoKC4uLnR4LmFiYW5kb25faW5mby5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHt9LCB0eCwgaXRlbSwgeyB0eXBlOiBBQkFORE9OIH0pKSk7XG5cbiAgICBpZiAoIWFwcGVuZC5sZW5ndGgpIHtcbiAgICAgIGFwcGVuZC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIHR4LCB7XG4gICAgICAgIHR5cGU6IHR4LnZhbHVlIDwgMCA/IFNQRU5EIDogUkVDRUlWRVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGl0ZW1zLnB1c2goLi4uYXBwZW5kLm1hcChpdGVtID0+IHtcbiAgICAgIC8vIHZhbHVlIG9uIHRyYW5zYWN0aW9uLCBhbW91bnQgb24gb3V0cG9pbnRcbiAgICAgIC8vIGFtb3VudCBpcyBhbHdheXMgcG9zaXRpdmUsIGJ1dCBzaG91bGQgbWF0Y2ggc2lnbiBvZiB2YWx1ZVxuICAgICAgY29uc3QgYmFsYW5jZURlbHRhID0gcGFyc2VGbG9hdChpdGVtLmJhbGFuY2VfZGVsdGEpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGl0ZW0udmFsdWUpO1xuICAgICAgY29uc3QgYW1vdW50ID0gYmFsYW5jZURlbHRhIHx8IHZhbHVlO1xuICAgICAgY29uc3QgZmVlID0gcGFyc2VGbG9hdCh0eC5mZWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eGlkLFxuICAgICAgICB0aW1lc3RhbXA6IHR4LnRpbWVzdGFtcCxcbiAgICAgICAgZGF0ZTogdHgudGltZXN0YW1wID8gbmV3IERhdGUoTnVtYmVyKHR4LnRpbWVzdGFtcCkgKiAxMDAwKSA6IG51bGwsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgZmVlLFxuICAgICAgICBjbGFpbV9pZDogaXRlbS5jbGFpbV9pZCxcbiAgICAgICAgY2xhaW1fbmFtZTogaXRlbS5jbGFpbV9uYW1lLFxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUgfHwgU1BFTkQsXG4gICAgICAgIG5vdXQ6IGl0ZW0ubm91dCxcbiAgICAgICAgY29uZmlybWF0aW9uczogdHguY29uZmlybWF0aW9uc1xuICAgICAgfTtcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJldHVybiBpdGVtcy5zb3J0KCh0eDEsIHR4MikgPT4ge1xuICAgIGlmICghdHgxLnRpbWVzdGFtcCAmJiAhdHgyLnRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmICghdHgxLnRpbWVzdGFtcCAmJiB0eDIudGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmICh0eDEudGltZXN0YW1wICYmICF0eDIudGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHgyLnRpbWVzdGFtcCAtIHR4MS50aW1lc3RhbXA7XG4gIH0pO1xufSk7XG5cbmNvbnN0IHNlbGVjdFJlY2VudFRyYW5zYWN0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMsIHRyYW5zYWN0aW9ucyA9PiB7XG4gIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKCk7XG4gIHRocmVzaG9sZC5zZXREYXRlKHRocmVzaG9sZC5nZXREYXRlKCkgLSA3KTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9ucy5maWx0ZXIodHJhbnNhY3Rpb24gPT4ge1xuICAgIGlmICghdHJhbnNhY3Rpb24uZGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIHBlbmRpbmcgdHJhbnNhY3Rpb25cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uZGF0ZSA+IHRocmVzaG9sZDtcbiAgfSk7XG59KTtcblxuY29uc3Qgc2VsZWN0SGFzVHJhbnNhY3Rpb25zID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VHJhbnNhY3Rpb25JdGVtcywgdHJhbnNhY3Rpb25zID0+IHRyYW5zYWN0aW9ucyAmJiB0cmFuc2FjdGlvbnMubGVuZ3RoID4gMCk7XG5cbmNvbnN0IHNlbGVjdElzRmV0Y2hpbmdUcmFuc2FjdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ1RyYW5zYWN0aW9ucyk7XG5cbmNvbnN0IHNlbGVjdElzU2VuZGluZ1N1cHBvcnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5zZW5kaW5nU3VwcG9ydCk7XG5cbmNvbnN0IHNlbGVjdFJlY2VpdmVBZGRyZXNzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUucmVjZWl2ZUFkZHJlc3MpO1xuXG5jb25zdCBzZWxlY3RHZXR0aW5nTmV3QWRkcmVzcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmdldHRpbmdOZXdBZGRyZXNzKTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmRyYWZ0VHJhbnNhY3Rpb24gfHwge30pO1xuXG5jb25zdCBzZWxlY3REcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiwgZHJhZnQgPT4gZHJhZnQuYW1vdW50KTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkFkZHJlc3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3REcmFmdFRyYW5zYWN0aW9uLCBkcmFmdCA9PiBkcmFmdC5hZGRyZXNzKTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiwgZHJhZnQgPT4gZHJhZnQuZXJyb3IpO1xuXG5jb25zdCBzZWxlY3RCbG9ja3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5ibG9ja3MpO1xuXG5jb25zdCBzZWxlY3RDdXJyZW50SGVpZ2h0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUubGF0ZXN0QmxvY2spO1xuXG5jb25zdCBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50cmFuc2FjdGlvbkxpc3RGaWx0ZXIgfHwgJycpO1xuXG5jb25zdCBzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMsIHNlbGVjdFRyYW5zYWN0aW9uTGlzdEZpbHRlciwgKHRyYW5zYWN0aW9ucywgZmlsdGVyKSA9PiB7XG4gIHJldHVybiB0cmFuc2FjdGlvbnMuZmlsdGVyKHRyYW5zYWN0aW9uID0+IHtcbiAgICByZXR1cm4gZmlsdGVyID09PSBBTEwgfHwgZmlsdGVyID09PSB0cmFuc2FjdGlvbi50eXBlO1xuICB9KTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbnNGb3JQYWdlID0gKHBhZ2UgPSAxKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucywgZmlsdGVyZWRUcmFuc2FjdGlvbnMgPT4ge1xuICBjb25zdCBzdGFydCA9IChOdW1iZXIocGFnZSkgLSAxKSAqIE51bWJlcihQQUdFX1NJWkUkMSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihwYWdlKSAqIE51bWJlcihQQUdFX1NJWkUkMSk7XG4gIHJldHVybiBmaWx0ZXJlZFRyYW5zYWN0aW9ucyAmJiBmaWx0ZXJlZFRyYW5zYWN0aW9ucy5sZW5ndGggPyBmaWx0ZXJlZFRyYW5zYWN0aW9ucy5zbGljZShzdGFydCwgZW5kKSA6IFtdO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RMYXRlc3RUcmFuc2FjdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RUcmFuc2FjdGlvbkl0ZW1zLCB0cmFuc2FjdGlvbnMgPT4ge1xuICByZXR1cm4gdHJhbnNhY3Rpb25zICYmIHRyYW5zYWN0aW9ucy5sZW5ndGggPyB0cmFuc2FjdGlvbnMuc2xpY2UoMCwgTEFURVNUX1BBR0VfU0laRSkgOiBbXTtcbn0pO1xuXG5jb25zdCBzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9uQ291bnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucywgZmlsdGVyZWRUcmFuc2FjdGlvbnMgPT4gZmlsdGVyZWRUcmFuc2FjdGlvbnMubGVuZ3RoKTtcblxuY29uc3Qgc2VsZWN0SXNXYWxsZXRSZWNvbm5lY3RpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRSZWNvbm5lY3RpbmcpO1xuXG52YXIgX2V4dGVuZHMkMyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5jb25zdCBtYXR1cmVUYWdNYXAgPSBNQVRVUkVfVEFHUy5yZWR1Y2UoKGFjYywgdGFnKSA9PiBfZXh0ZW5kcyQzKHt9LCBhY2MsIHsgW3RhZ106IHRydWUgfSksIHt9KTtcblxuY29uc3QgaXNDbGFpbU5zZncgPSBjbGFpbSA9PiB7XG4gIGlmICghY2xhaW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNsYWltIHBhc3NlZCB0byBpc0NsYWltTnNmdygpJyk7XG4gIH1cblxuICBpZiAoIWNsYWltLnZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGFncyA9IGNsYWltLnZhbHVlLnRhZ3MgfHwgW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHRhZyA9IHRhZ3NbaV0udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobWF0dXJlVGFnTWFwW3RhZ10pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleShvcHRpb25zKSB7XG4gIC8vIElnbm9yZSBwYWdlIGJlY2F1c2Ugd2UgZG9uJ3QgY2FyZSB3aGF0IHRoZSBsYXN0IHBhZ2Ugc2VhcmNoZWQgd2FzLCB3ZSB3YW50IGV2ZXJ5dGhpbmdcbiAgLy8gSWdub3JlIHJlbGVhc2VfdGltZSBiZWNhdXNlIHRoYXQgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoZW4geW91IGNhbGwgY2xhaW1fc2VhcmNoIGV4OiByZWxlYXNlX3RpbWU6IFwiPjEyMzQ0NTY3XCJcbiAgY29uc3QgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKG9wdGlvbnMsIFsncGFnZScsICdyZWxlYXNlX3RpbWUnXSk7XG4gIGNvbnN0IHF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkocmVzdCk7XG4gIHJldHVybiBxdWVyeTtcbn1cblxudmFyIF9leHRlbmRzJDQgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuY29uc3Qgc2VsZWN0U3RhdGUkMiA9IHN0YXRlID0+IHN0YXRlLmNsYWltcyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0Q2xhaW1zQnlJZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmJ5SWQgfHwge30pO1xuXG5jb25zdCBzZWxlY3RDbGFpbUlkc0J5VXJpID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuY2xhaW1zQnlVcmkgfHwge30pO1xuXG5jb25zdCBzZWxlY3RDdXJyZW50Q2hhbm5lbFBhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5jdXJyZW50Q2hhbm5lbFBhZ2UgfHwgMSk7XG5cbmNvbnN0IHNlbGVjdENyZWF0aW5nQ2hhbm5lbCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmNyZWF0aW5nQ2hhbm5lbCk7XG5cbmNvbnN0IHNlbGVjdENyZWF0ZUNoYW5uZWxFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmNyZWF0ZUNoYW5uZWxFcnJvcik7XG5cbmNvbnN0IHNlbGVjdFJlcG9zdExvYWRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZXBvc3RMb2FkaW5nKTtcblxuY29uc3Qgc2VsZWN0UmVwb3N0RXJyb3IgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZXBvc3RFcnJvcik7XG5cbmNvbnN0IHNlbGVjdENsYWltc0J5VXJpID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc2VsZWN0Q2xhaW1zQnlJZCwgKHN0YXRlLCBieUlkKSA9PiB7XG4gIGNvbnN0IGJ5VXJpID0gc3RhdGUuY2xhaW1zQnlVcmkgfHwge307XG4gIGNvbnN0IGNsYWltcyA9IHt9O1xuXG4gIE9iamVjdC5rZXlzKGJ5VXJpKS5mb3JFYWNoKHVyaSA9PiB7XG4gICAgY29uc3QgY2xhaW1JZCA9IGJ5VXJpW3VyaV07XG5cbiAgICAvLyBOT1RFIHJldHVybmluZyBhIG51bGwgY2xhaW0gYWxsb3dzIHVzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhblxuICAgIC8vIHVuZGVmaW5lZCAobmV2ZXIgZmV0Y2hlZCBjbGFpbSkgYW5kIG9uZSB3aGljaCBqdXN0IGRvZXNuJ3QgZXhpc3QuIE5vdFxuICAgIC8vIHRoZSBjbGVhbmVzdCBzb2x1dGlvbiBidXQgY291bGRuJ3QgdGhpbmsgb2YgYW55dGhpbmcgYmV0dGVyIHJpZ2h0IG5vd1xuICAgIGlmIChjbGFpbUlkID09PSBudWxsKSB7XG4gICAgICBjbGFpbXNbdXJpXSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYWltc1t1cmldID0gYnlJZFtjbGFpbUlkXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjbGFpbXM7XG59KTtcblxuY29uc3Qgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsIHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0UGVuZGluZ0J5SWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5wZW5kaW5nQnlJZCB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdFBlbmRpbmdDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBPYmplY3QudmFsdWVzKHN0YXRlLnBlbmRpbmdCeUlkIHx8IFtdKSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbUlzUGVuZGluZyA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RQZW5kaW5nQnlJZCwgcGVuZGluZ0J5SWQgPT4ge1xuICBsZXQgY2xhaW1JZDtcblxuICB0cnkge1xuICAgIGNvbnN0IHsgaXNDaGFubmVsLCBjaGFubmVsQ2xhaW1JZCwgc3RyZWFtQ2xhaW1JZCB9ID0gcGFyc2VVUkkodXJpKTtcbiAgICBjbGFpbUlkID0gaXNDaGFubmVsID8gY2hhbm5lbENsYWltSWQgOiBzdHJlYW1DbGFpbUlkO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGlmIChjbGFpbUlkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4ocGVuZGluZ0J5SWRbY2xhaW1JZF0pO1xuICB9XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFBlbmRpbmdCeVVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RQZW5kaW5nQnlJZCwgcGVuZGluZ0J5SWQgPT4ge1xuICBjb25zdCB7IGlzQ2hhbm5lbCwgY2hhbm5lbENsYWltSWQsIHN0cmVhbUNsYWltSWQgfSA9IHBhcnNlVVJJKHVyaSk7XG4gIGNvbnN0IGNsYWltSWQgPSBpc0NoYW5uZWwgPyBjaGFubmVsQ2xhaW1JZCA6IHN0cmVhbUNsYWltSWQ7XG4gIHJldHVybiBwZW5kaW5nQnlJZFtjbGFpbUlkXTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkgPSAodXJpLCByZXR1cm5SZXBvc3QgPSB0cnVlKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeVVyaSwgc2VsZWN0UGVuZGluZ0J5SWQsIChieVVyaSwgcGVuZGluZ0J5SWQpID0+IHtcbiAgLy8gQ2hlY2sgaWYgYSBjbGFpbSBpcyBwZW5kaW5nIGZpcnN0XG4gIC8vIEl0IHdvbid0IGJlIGluIGNsYWltc0J5VXJpIGJlY2F1c2UgcmVzb2x2aW5nIGl0IHdpbGwgcmV0dXJuIG5vdGhpbmdcblxuICBsZXQgdmFsaWQ7XG4gIGxldCBjaGFubmVsQ2xhaW1JZDtcbiAgbGV0IHN0cmVhbUNsYWltSWQ7XG4gIGxldCBpc0NoYW5uZWw7XG4gIHRyeSB7XG4gICAgKHsgaXNDaGFubmVsLCBjaGFubmVsQ2xhaW1JZCwgc3RyZWFtQ2xhaW1JZCB9ID0gcGFyc2VVUkkodXJpKSk7XG4gICAgdmFsaWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGlmICh2YWxpZCAmJiBieVVyaSkge1xuICAgIGNvbnN0IGNsYWltSWQgPSBpc0NoYW5uZWwgPyBjaGFubmVsQ2xhaW1JZCA6IHN0cmVhbUNsYWltSWQ7XG4gICAgY29uc3QgcGVuZGluZ0NsYWltID0gcGVuZGluZ0J5SWRbY2xhaW1JZF07XG5cbiAgICBpZiAocGVuZGluZ0NsYWltKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ0NsYWltO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltID0gYnlVcmlbbm9ybWFsaXplVVJJKHVyaSldO1xuICAgIGlmIChjbGFpbSA9PT0gdW5kZWZpbmVkIHx8IGNsYWltID09PSBudWxsKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIHRoZSBjbGFpbSBhcyBpcyBzbyBhcHBzIGNhbiBjaGVjayBpZiBpdCdzIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIChudWxsKSBvciBzdGlsbCBuZWVkcyB0byBiZSByZXNvbHZlZCAodW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGNsYWltO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9zdGVkQ2xhaW0gPSBjbGFpbS5yZXBvc3RlZF9jbGFpbTtcbiAgICBpZiAocmVwb3N0ZWRDbGFpbSAmJiByZXR1cm5SZXBvc3QpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWxVcmwgPSBjbGFpbS5zaWduaW5nX2NoYW5uZWwgJiYgY2xhaW0uc2lnbmluZ19jaGFubmVsLmNhbm9uaWNhbF91cmw7XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyQ0KHt9LCByZXBvc3RlZENsYWltLCB7XG4gICAgICAgIHJlcG9zdF91cmw6IHVyaSxcbiAgICAgICAgcmVwb3N0X2NoYW5uZWxfdXJsOiBjaGFubmVsVXJsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNsYWltO1xuICAgIH1cbiAgfVxufSk7XG5cbmNvbnN0IHNlbGVjdE15Q2xhaW1zUmF3ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc2VsZWN0Q2xhaW1zQnlJZCwgKHN0YXRlLCBieUlkKSA9PiB7XG4gIGNvbnN0IGlkcyA9IHN0YXRlLm15Q2xhaW1zO1xuICBpZiAoIWlkcykge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBjbGFpbXMgPSBbXTtcbiAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgIGlmIChieUlkW2lkXSkge1xuICAgICAgLy8gSSdtIG5vdCBzdXJlIHdoeSB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSwgYnV0IGl0IG91Z2h0IHRvIGJlIGEgcXVpY2sgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9pc3N1ZXMvNTQ0XG4gICAgICBjbGFpbXMucHVzaChieUlkW2lkXSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsYWltcztcbn0pO1xuXG5jb25zdCBzZWxlY3RBYmFuZG9uaW5nSWRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gT2JqZWN0LmtleXMoc3RhdGUuYWJhbmRvbmluZ0J5SWQgfHwge30pKTtcblxuY29uc3Qgc2VsZWN0TXlBY3RpdmVDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1Jhdywgc2VsZWN0QWJhbmRvbmluZ0lkcywgKGNsYWltcywgYWJhbmRvbmluZ0lkcykgPT4gbmV3IFNldChjbGFpbXMgJiYgY2xhaW1zLm1hcChjbGFpbSA9PiBjbGFpbS5jbGFpbV9pZCkuZmlsdGVyKGNsYWltSWQgPT4gT2JqZWN0LmtleXMoYWJhbmRvbmluZ0lkcykuaW5kZXhPZihjbGFpbUlkKSA9PT0gLTEpKSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbUlzTWluZSA9IHJhd1VyaSA9PiB7XG4gIGxldCB1cmk7XG4gIHRyeSB7XG4gICAgdXJpID0gbm9ybWFsaXplVVJJKHJhd1VyaSk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgcmV0dXJuIHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltc0J5VXJpLCBzZWxlY3RNeUFjdGl2ZUNsYWltcywgKGNsYWltcywgbXlDbGFpbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VVUkkodXJpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYWltcyAmJiBjbGFpbXNbdXJpXSAmJiBjbGFpbXNbdXJpXS5jbGFpbV9pZCAmJiBteUNsYWltcy5oYXMoY2xhaW1zW3VyaV0uY2xhaW1faWQpO1xuICB9KTtcbn07XG5cbmNvbnN0IHNlbGVjdEFsbEZldGNoaW5nQ2hhbm5lbENsYWltcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nQ2hhbm5lbENsYWltcyB8fCB7fSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RGZXRjaGluZ0NoYW5uZWxDbGFpbXMgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0QWxsRmV0Y2hpbmdDaGFubmVsQ2xhaW1zLCBmZXRjaGluZyA9PiBmZXRjaGluZyAmJiBmZXRjaGluZ1t1cmldKTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltc0luQ2hhbm5lbEZvclBhZ2UgPSAodXJpLCBwYWdlKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeUlkLCBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwsIChieUlkLCBhbGxDbGFpbXMpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIGNvbnN0IGNsYWltSWRzID0gYnlDaGFubmVsW3BhZ2UgfHwgMV07XG5cbiAgaWYgKCFjbGFpbUlkcykgcmV0dXJuIGNsYWltSWRzO1xuXG4gIHJldHVybiBjbGFpbUlkcy5tYXAoY2xhaW1JZCA9PiBieUlkW2NsYWltSWRdKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxDbGFpbXNJbkNoYW5uZWxTZWFyY2ggPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLCAoYnlJZCwgYWxsQ2xhaW1zKSA9PiB7XG4gIGNvbnN0IGJ5Q2hhbm5lbCA9IGFsbENsYWltc1t1cmldIHx8IHt9O1xuICByZXR1cm4gYnlDaGFubmVsWydpdGVtQ291bnQnXTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeUlkLCBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwsIChieUlkLCBhbGxDbGFpbXMpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIHJldHVybiBieUNoYW5uZWxbJ3BhZ2VDb3VudCddO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbXNJbkNoYW5uZWxGb3JDdXJyZW50UGFnZVN0YXRlID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltc0J5SWQsIHNlbGVjdEFsbENsYWltc0J5Q2hhbm5lbCwgc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlLCAoYnlJZCwgYWxsQ2xhaW1zLCBwYWdlKSA9PiB7XG4gIGNvbnN0IGJ5Q2hhbm5lbCA9IGFsbENsYWltc1t1cmldIHx8IHt9O1xuICBjb25zdCBjbGFpbUlkcyA9IGJ5Q2hhbm5lbFtwYWdlIHx8IDFdO1xuXG4gIGlmICghY2xhaW1JZHMpIHJldHVybiBjbGFpbUlkcztcblxuICByZXR1cm4gY2xhaW1JZHMubWFwKGNsYWltSWQgPT4gYnlJZFtjbGFpbUlkXSk7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY2xhaW0gJiYgY2xhaW0udmFsdWU7XG4gIHJldHVybiBtZXRhZGF0YSB8fCAoY2xhaW0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGwpO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkgPSAodXJpLCBrZXkpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSh1cmkpLCBtZXRhZGF0YSA9PiB7XG4gIHJldHVybiBtZXRhZGF0YSA/IG1ldGFkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFRpdGxlRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSh1cmkpLCBtZXRhZGF0YSA9PiBtZXRhZGF0YSAmJiBtZXRhZGF0YS50aXRsZSk7XG5cbmNvbnN0IG1ha2VTZWxlY3REYXRlRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNsYWltICYmIGNsYWltLnZhbHVlICYmIChjbGFpbS52YWx1ZS5yZWxlYXNlX3RpbWUgPyBjbGFpbS52YWx1ZS5yZWxlYXNlX3RpbWUgKiAxMDAwIDogY2xhaW0ubWV0YSAmJiBjbGFpbS5tZXRhLmNyZWF0aW9uX3RpbWVzdGFtcCA/IGNsYWltLm1ldGEuY3JlYXRpb25fdGltZXN0YW1wICogMTAwMCA6IG51bGwpO1xuICBpZiAoIXRpbWVzdGFtcCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gIHJldHVybiBkYXRlT2JqO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RBbW91bnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IHtcbiAgcmV0dXJuIGNsYWltICYmIGNsYWltLmFtb3VudDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IHtcbiAgY29uc3Qgc291cmNlID0gY2xhaW0gJiYgY2xhaW0udmFsdWUgJiYgY2xhaW0udmFsdWUuc291cmNlO1xuICByZXR1cm4gc291cmNlID8gc291cmNlLm1lZGlhX3R5cGUgOiB1bmRlZmluZWQ7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBjb25zdCB0aHVtYm5haWwgPSBjbGFpbSAmJiBjbGFpbS52YWx1ZSAmJiBjbGFpbS52YWx1ZS50aHVtYm5haWw7XG4gIHJldHVybiB0aHVtYm5haWwgJiYgdGh1bWJuYWlsLnVybCA/IHRodW1ibmFpbC51cmwudHJpbSgpIDogdW5kZWZpbmVkO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDb3ZlckZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBjb25zdCBjb3ZlciA9IGNsYWltICYmIGNsYWltLnZhbHVlICYmIGNsYWltLnZhbHVlLmNvdmVyO1xuICByZXR1cm4gY292ZXIgJiYgY292ZXIudXJsID8gY292ZXIudXJsLnRyaW0oKSA6IHVuZGVmaW5lZDtcbn0pO1xuXG5jb25zdCBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmlzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUFjdGl2ZUNsYWltcywgc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWJhbmRvbmluZ0lkcywgc2VsZWN0UGVuZGluZ0NsYWltcywgKG15Q2xhaW1JZHMsIGJ5SWQsIGFiYW5kb25pbmdJZHMsIHBlbmRpbmdDbGFpbXMpID0+IHtcbiAgY29uc3QgY2xhaW1zID0gW107XG5cbiAgbXlDbGFpbUlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBjb25zdCBjbGFpbSA9IGJ5SWRbaWRdO1xuXG4gICAgaWYgKGNsYWltICYmIGFiYW5kb25pbmdJZHMuaW5kZXhPZihpZCkgPT09IC0xKSBjbGFpbXMucHVzaChjbGFpbSk7XG4gIH0pO1xuXG4gIHJldHVybiBbLi4uY2xhaW1zLCAuLi5wZW5kaW5nQ2xhaW1zXTtcbn0pO1xuXG5jb25zdCBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdE15Q2xhaW1zLCBteUNsYWltcyA9PiBteUNsYWltcy5maWx0ZXIoY2xhaW0gPT4gIWNsYWltLm5hbWUubWF0Y2goL15ALykpLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wIC0gYi50aW1lc3RhbXApKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbVVyaXNXaXRob3V0Q2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscywgbXlDbGFpbXMgPT4ge1xuICByZXR1cm4gbXlDbGFpbXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLmhlaWdodCA8IDEpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2UgaWYgKGIuaGVpZ2h0IDwgMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wO1xuICAgIH1cbiAgfSkubWFwKGNsYWltID0+IHtcbiAgICByZXR1cm4gY2xhaW0uY2Fub25pY2FsX3VybCB8fCBjbGFpbS5wZXJtYW5lbnRfdXJsO1xuICB9KTtcbn0pO1xuXG5jb25zdCBzZWxlY3RBbGxNeUNsYWltc0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1JhdywgY2xhaW1zID0+IG5ldyBTZXQoY2xhaW1zICYmIGNsYWltcy5sZW5ndGggPyBjbGFpbXMubWFwKGNsYWltID0+IGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gKSA6IG51bGwpKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbXNPdXRwb2ludHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltcywgbXlDbGFpbXMgPT4ge1xuICBjb25zdCBvdXRwb2ludHMgPSBbXTtcblxuICBteUNsYWltcy5mb3JFYWNoKGNsYWltID0+IG91dHBvaW50cy5wdXNoKGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gKSk7XG5cbiAgcmV0dXJuIG91dHBvaW50cztcbn0pO1xuXG5jb25zdCBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ015Q2hhbm5lbHMpO1xuXG5jb25zdCBzZWxlY3RNeUNoYW5uZWxDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzZWxlY3RDbGFpbXNCeUlkLCAoc3RhdGUsIGJ5SWQpID0+IHtcbiAgY29uc3QgaWRzID0gc3RhdGUubXlDaGFubmVsQ2xhaW1zO1xuICBpZiAoIWlkcykge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBjbGFpbXMgPSBbXTtcbiAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgIGlmIChieUlkW2lkXSkge1xuICAgICAgLy8gSSdtIG5vdCBzdXJlIHdoeSB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSwgYnV0IGl0IG91Z2h0IHRvIGJlIGEgcXVpY2sgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9pc3N1ZXMvNTQ0XG4gICAgICBjbGFpbXMucHVzaChieUlkW2lkXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2xhaW1zO1xufSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmluZ1VyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZXNvbHZpbmdVcmlzIHx8IFtdKTtcblxuY29uc3Qgc2VsZWN0Q2hhbm5lbEltcG9ydFBlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5wZW5kaW5nQ2hhbm5lbEltcG9ydCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXNvbHZpbmdVcmlzLCByZXNvbHZpbmdVcmlzID0+IHJlc29sdmluZ1VyaXMgJiYgcmVzb2x2aW5nVXJpcy5pbmRleE9mKHVyaSkgIT09IC0xKTtcblxuY29uc3Qgc2VsZWN0UGxheWluZ1VyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBsYXlpbmdVcmkpO1xuXG5jb25zdCBzZWxlY3RDaGFubmVsQ2xhaW1Db3VudHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5jaGFubmVsQ2xhaW1Db3VudHMgfHwge30pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2hhbm5lbENsYWltQ291bnRzLCBieVVyaSA9PiBieVVyaSAmJiBieVVyaVt1cmldKTtcblxuY29uc3QgbWFrZVNlbGVjdFRvdGFsUGFnZXNGb3JDaGFubmVsID0gKHVyaSwgcGFnZVNpemUgPSAxMCkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2hhbm5lbENsYWltQ291bnRzLCBieVVyaSA9PiBieVVyaSAmJiBieVVyaVt1cmldICYmIE1hdGguY2VpbChieVVyaVt1cmldIC8gcGFnZVNpemUpKTtcblxuY29uc3QgbWFrZVNlbGVjdE5zZndDb3VudEZyb21VcmlzID0gdXJpcyA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeVVyaSwgY2xhaW1zID0+IHVyaXMucmVkdWNlKChhY2MsIHVyaSkgPT4ge1xuICBjb25zdCBjbGFpbSA9IGNsYWltc1t1cmldO1xuICBpZiAoY2xhaW0gJiYgaXNDbGFpbU5zZncoY2xhaW0pKSB7XG4gICAgcmV0dXJuIGFjYyArIDE7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIDApKTtcblxuY29uc3QgbWFrZVNlbGVjdE5zZndDb3VudEZvckNoYW5uZWwgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLCBzZWxlY3RDdXJyZW50Q2hhbm5lbFBhZ2UsIChieUlkLCBhbGxDbGFpbXMsIHBhZ2UpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIGNvbnN0IGNsYWltSWRzID0gYnlDaGFubmVsW3BhZ2UgfHwgMV07XG5cbiAgaWYgKCFjbGFpbUlkcykgcmV0dXJuIDA7XG5cbiAgcmV0dXJuIGNsYWltSWRzLnJlZHVjZSgoYWNjLCBjbGFpbUlkKSA9PiB7XG4gICAgY29uc3QgY2xhaW0gPSBieUlkW2NsYWltSWRdO1xuICAgIGlmIChpc0NsYWltTnNmdyhjbGFpbSkpIHtcbiAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCAwKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0T21pdHRlZENvdW50Rm9yQ2hhbm5lbCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwodXJpKSwgbWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoKHVyaSksIChjbGFpbXNJbkNoYW5uZWwsIGNsYWltc0luU2VhcmNoKSA9PiB7XG4gIGlmIChjbGFpbXNJbkNoYW5uZWwgJiYgdHlwZW9mIGNsYWltc0luU2VhcmNoID09PSAnbnVtYmVyJyAmJiBjbGFpbXNJblNlYXJjaCA+PSAwKSB7XG4gICAgcmV0dXJuIGNsYWltc0luQ2hhbm5lbCAtIGNsYWltc0luU2VhcmNoO1xuICB9IGVsc2UgcmV0dXJuIDA7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltSXNOc2Z3ID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLFxuLy8gRXZlbnR1YWxseSB0aGVzZSB3aWxsIGNvbWUgZnJvbSBzb21lIGxpc3Qgb2YgdGFncyB0aGF0IGFyZSBjb25zaWRlcmVkIGFkdWx0XG4vLyBPciBwb3NzaWJseSBjb21lIGZyb20gdXNlcnMgc2V0dGluZ3Mgb2Ygd2hhdCB0YWdzIHRoZXkgd2FudCB0byBoaWRlXG4vLyBGb3Igbm93LCB0aGVyZSBpcyBqdXN0IGEgaGFyZCBjb2RlZCBsaXN0IG9mIHRhZ3MgaW5zaWRlIGBpc0NsYWltTnNmd2Bcbi8vIHNlbGVjdE5hdWdodHlUYWdzKCksXG5jbGFpbSA9PiB7XG4gIGlmICghY2xhaW0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNDbGFpbU5zZncoY2xhaW0pO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZWNvbW1lbmRlZENvbnRlbnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIHNlbGVjdFNlYXJjaFVyaXNCeVF1ZXJ5LCBtYWtlU2VsZWN0Q2xhaW1Jc05zZncodXJpKSwgKGNsYWltLCBzZWFyY2hVcmlzQnlRdWVyeSwgaXNNYXR1cmUpID0+IHtcbiAgY29uc3QgYXRWYW5pdHlVUkkgPSAhdXJpLmluY2x1ZGVzKCcjJyk7XG5cbiAgbGV0IHJlY29tbWVuZGVkQ29udGVudDtcbiAgaWYgKGNsYWltKSB7XG4gICAgLy8gYWx3YXlzIGdyYWIgZnVsbCBVUkwgLSB0aGlzIGNhbiBjaGFuZ2Ugb25jZSBzZWFyY2ggcmV0dXJucyBjYW5vbmljYWxcbiAgICBjb25zdCBjdXJyZW50VXJpID0gYnVpbGRVUkkoeyBzdHJlYW1DbGFpbUlkOiBjbGFpbS5jbGFpbV9pZCwgc3RyZWFtTmFtZTogY2xhaW0ubmFtZSB9KTtcblxuICAgIGNvbnN0IHsgdGl0bGUgfSA9IGNsYWltLnZhbHVlO1xuXG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHJlbGF0ZWRfdG86IGNsYWltLmNsYWltX2lkLCBpc0JhY2tncm91bmRTZWFyY2g6IHRydWUgfTtcblxuICAgIGlmICghaXNNYXR1cmUpIHtcbiAgICAgIG9wdGlvbnNbJ25zZncnXSA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hRdWVyeSA9IGdldFNlYXJjaFF1ZXJ5U3RyaW5nKHRpdGxlLnJlcGxhY2UoL1xcLy8sICcgJyksIG9wdGlvbnMpO1xuXG4gICAgbGV0IHNlYXJjaFVyaXMgPSBzZWFyY2hVcmlzQnlRdWVyeVtzZWFyY2hRdWVyeV07XG4gICAgaWYgKHNlYXJjaFVyaXMpIHtcbiAgICAgIHNlYXJjaFVyaXMgPSBzZWFyY2hVcmlzLmZpbHRlcihzZWFyY2hVcmkgPT4gc2VhcmNoVXJpICE9PSBjdXJyZW50VXJpKTtcbiAgICAgIHJlY29tbWVuZGVkQ29udGVudCA9IHNlYXJjaFVyaXM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY29tbWVuZGVkQ29udGVudDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0Rmlyc3RSZWNvbW1lbmRlZEZpbGVGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdFJlY29tbWVuZGVkQ29udGVudEZvclVyaSh1cmkpLCByZWNvbW1lbmRlZENvbnRlbnQgPT4gcmVjb21tZW5kZWRDb250ZW50ID8gcmVjb21tZW5kZWRDb250ZW50WzBdIDogbnVsbCk7XG5cbi8vIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgY2hhbm5lbCB1cmkgZm9yIGEgZ2l2ZW4gY2xhaW0gdXJpXG4vLyBhY2NlcHRzIGEgcmVndWxhciBjbGFpbSB1cmkgbGJyeTovL3NvbWV0aGluZ1xuLy8gcmV0dXJucyB0aGUgY2hhbm5lbCB1cmkgdGhhdCBjcmVhdGVkIHRoaXMgY2xhaW0gbGJyeTovL0BjaGFubmVsXG5jb25zdCBtYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpID0gKHVyaSwgaW5jbHVkZVByZWZpeCA9IGZhbHNlKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBpZiAoIWNsYWltIHx8ICFjbGFpbS5zaWduaW5nX2NoYW5uZWwgfHwgIWNsYWltLmlzX2NoYW5uZWxfc2lnbmF0dXJlX3ZhbGlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGNhbm9uaWNhbF91cmw6IGNhbm9uaWNhbFVybCwgcGVybWFuZW50X3VybDogcGVybWFuZW50VXJsIH0gPSBjbGFpbS5zaWduaW5nX2NoYW5uZWw7XG5cbiAgaWYgKGNhbm9uaWNhbFVybCkge1xuICAgIHJldHVybiBpbmNsdWRlUHJlZml4ID8gY2Fub25pY2FsVXJsIDogY2Fub25pY2FsVXJsLnNsaWNlKCdsYnJ5Oi8vJy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbmNsdWRlUHJlZml4ID8gcGVybWFuZW50VXJsIDogcGVybWFuZW50VXJsLnNsaWNlKCdsYnJ5Oi8vJy5sZW5ndGgpO1xuICB9XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFRhZ3NGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpKHVyaSksIG1ldGFkYXRhID0+IHtcbiAgcmV0dXJuIG1ldGFkYXRhICYmIG1ldGFkYXRhLnRhZ3MgfHwgW107XG59KTtcblxuY29uc3Qgc2VsZWN0RmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2ggPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSwgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnkgPT4gQm9vbGVhbihPYmplY3Qua2V5cyhmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSkubGVuZ3RoKSk7XG5cbmNvbnN0IHNlbGVjdENsYWltU2VhcmNoQnlRdWVyeSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmNsYWltU2VhcmNoQnlRdWVyeSB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdENsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmNsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCB8fCB7fSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RTaG9ydFVybEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4gY2xhaW0gJiYgY2xhaW0uc2hvcnRfdXJsKTtcblxuY29uc3QgbWFrZVNlbGVjdENhbm9uaWNhbFVybEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4gY2xhaW0gJiYgY2xhaW0uY2Fub25pY2FsX3VybCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RQZXJtYW5lbnRVcmxGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IGNsYWltICYmIGNsYWltLnBlcm1hbmVudF91cmwpO1xuXG5jb25zdCBtYWtlU2VsZWN0U3VwcG9ydHNGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3VwcG9ydHNCeU91dHBvaW50LCBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgKGJ5T3V0cG9pbnQsIGNsYWltKSA9PiB7XG4gIGlmICghY2xhaW0gfHwgIWNsYWltLmlzX21pbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgY2xhaW1faWQ6IGNsYWltSWQgfSA9IGNsYWltO1xuICBsZXQgdG90YWwgPSAwO1xuXG4gIE9iamVjdC52YWx1ZXMoYnlPdXRwb2ludCkuZm9yRWFjaChzdXBwb3J0ID0+IHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgY29uc3QgeyBjbGFpbV9pZCwgYW1vdW50IH0gPSBzdXBwb3J0O1xuICAgIHRvdGFsID0gY2xhaW1faWQgPT09IGNsYWltSWQgJiYgYW1vdW50ID8gdG90YWwgKyBwYXJzZUZsb2F0KGFtb3VudCkgOiB0b3RhbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHRvdGFsO1xufSk7XG5cbmNvbnN0IHNlbGVjdFVwZGF0aW5nQ2hhbm5lbCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnVwZGF0aW5nQ2hhbm5lbCk7XG5cbmNvbnN0IHNlbGVjdFVwZGF0ZUNoYW5uZWxFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnVwZGF0ZUNoYW5uZWxFcnJvcik7XG5cbmNvbnN0IG1ha2VTZWxlY3RNeVN0cmVhbVVybHNGb3JQYWdlID0gKHBhZ2UgPSAxKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltVXJpc1dpdGhvdXRDaGFubmVscywgdXJscyA9PiB7XG4gIGNvbnN0IHN0YXJ0ID0gKE51bWJlcihwYWdlKSAtIDEpICogTnVtYmVyKFBBR0VfU0laRSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihwYWdlKSAqIE51bWJlcihQQUdFX1NJWkUpO1xuXG4gIHJldHVybiB1cmxzICYmIHVybHMubGVuZ3RoID8gdXJscy5zbGljZShzdGFydCwgZW5kKSA6IFtdO1xufSk7XG5cbmNvbnN0IHNlbGVjdE15U3RyZWFtVXJsc0NvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0TXlDbGFpbVVyaXNXaXRob3V0Q2hhbm5lbHMsIGNoYW5uZWxzID0+IGNoYW5uZWxzLmxlbmd0aCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9ICh1cmksIHNpemUsIGNsYWltSWQsIGNsYWltTmFtZSwgY2xhaW1UaXRsZSkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnksIG1ha2VTZWxlY3RDbGFpbUlzTnNmdyh1cmkpLCAoY2xhaW0sIHJlc29sdmVkUmVzdWx0c0J5UXVlcnksIGlzTWF0dXJlKSA9PiB7XG4gIGNvbnN0IGF0VmFuaXR5VVJJID0gIXVyaS5pbmNsdWRlcygnIycpO1xuXG4gIGxldCBjdXJyZW50VXJpO1xuICBsZXQgcmVjb21tZW5kZWRDb250ZW50O1xuICBsZXQgdGl0bGU7XG4gIGlmIChjbGFpbSkge1xuICAgIC8vIGFsd2F5cyBncmFiIGZ1bGwgVVJMIC0gdGhpcyBjYW4gY2hhbmdlIG9uY2Ugc2VhcmNoIHJldHVybnMgY2Fub25pY2FsXG4gICAgY3VycmVudFVyaSA9IGJ1aWxkVVJJKHsgc3RyZWFtQ2xhaW1JZDogY2xhaW0uY2xhaW1faWQsIHN0cmVhbU5hbWU6IGNsYWltLm5hbWUgfSk7XG4gICAgdGl0bGUgPSBjbGFpbS52YWx1ZSA/IGNsYWltLnZhbHVlLnRpdGxlIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBmb3IgY2FzZXMgb24gbW9iaWxlIHdoZXJlIHRoZSBjbGFpbSBtYXkgbm90IGhhdmUgYmVlbiByZXNvbHZlZCAoKVxuICAgIGN1cnJlbnRVcmkgPSBidWlsZFVSSSh7IHN0cmVhbUNsYWltSWQ6IGNsYWltSWQsIHN0cmVhbU5hbWU6IGNsYWltTmFtZSB9KTtcbiAgICB0aXRsZSA9IGNsYWltVGl0bGU7XG4gIH1cblxuICBpZiAoIXRpdGxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcmVsYXRlZF90bzogY2xhaW0gPyBjbGFpbS5jbGFpbV9pZCA6IGNsYWltSWQsIHNpemUsIGlzQmFja2dyb3VuZFNlYXJjaDogZmFsc2UgfTtcblxuICBjb25zdCBzZWFyY2hRdWVyeSA9IGdldFNlYXJjaFF1ZXJ5U3RyaW5nKHRpdGxlLnJlcGxhY2UoL1xcLy8sICcgJyksIG9wdGlvbnMpO1xuICBsZXQgcmVzdWx0cyA9IHJlc29sdmVkUmVzdWx0c0J5UXVlcnlbc2VhcmNoUXVlcnldO1xuICBpZiAocmVzdWx0cykge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gYnVpbGRVUkkoeyBzdHJlYW1DbGFpbUlkOiByZXN1bHQuY2xhaW1JZCwgc3RyZWFtTmFtZTogcmVzdWx0Lm5hbWUgfSkgIT09IGN1cnJlbnRVcmkpO1xuICAgIHJlY29tbWVuZGVkQ29udGVudCA9IHJlc3VsdHM7XG4gIH1cblxuICByZXR1cm4gcmVjb21tZW5kZWRDb250ZW50O1xufSk7XG5cbmZ1bmN0aW9uIG51bWJlcldpdGhDb21tYXMoeCkge1xuICB2YXIgcGFydHMgPSB4LnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcbiAgcGFydHNbMF0gPSBwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpO1xuICByZXR1cm4gcGFydHMuam9pbignLicpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRDcmVkaXRzKGFtb3VudCwgcHJlY2lzaW9uLCBzaG9ydEZvcm1hdCA9IGZhbHNlKSB7XG4gIGxldCBhY3R1YWxBbW91bnQgPSBwYXJzZUZsb2F0KGFtb3VudCk7XG4gIGxldCBhY3R1YWxQcmVjaXNpb24gPSBwYXJzZUZsb2F0KHByZWNpc2lvbik7XG4gIGxldCBzdWZmaXggPSAnJztcblxuICBpZiAoTnVtYmVyLmlzTmFOKGFjdHVhbEFtb3VudCkgfHwgYWN0dWFsQW1vdW50ID09PSAwKSByZXR1cm4gJzAnO1xuXG4gIGlmIChhY3R1YWxBbW91bnQgPj0gMTAwMDAwMCkge1xuICAgIGlmIChwcmVjaXNpb24gPD0gNykge1xuICAgICAgaWYgKHNob3J0Rm9ybWF0KSB7XG4gICAgICAgIGFjdHVhbEFtb3VudCA9IGFjdHVhbEFtb3VudCAvIDEwMDAwMDA7XG4gICAgICAgIHN1ZmZpeCA9ICdNJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbFByZWNpc2lvbiAtPSA3O1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChhY3R1YWxBbW91bnQgPj0gMTAwMCkge1xuICAgIGlmIChwcmVjaXNpb24gPD0gNCkge1xuICAgICAgaWYgKHNob3J0Rm9ybWF0KSB7XG4gICAgICAgIGFjdHVhbEFtb3VudCA9IGFjdHVhbEFtb3VudCAvIDEwMDA7XG4gICAgICAgIHN1ZmZpeCA9ICdLJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbFByZWNpc2lvbiAtPSA0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudW1iZXJXaXRoQ29tbWFzKGFjdHVhbEFtb3VudC50b0ZpeGVkKGFjdHVhbFByZWNpc2lvbiA+PSAwID8gYWN0dWFsUHJlY2lzaW9uIDogMSkucmVwbGFjZSgvXFwuKjArJC8sICcnKSkgKyBzdWZmaXg7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxQcmljZShhbW91bnQsIHByZWNpc2lvbiA9IDEpIHtcbiAgbGV0IGZvcm1hdGVkID0gJyc7XG5cbiAgY29uc3QgcXVhbnRpdHkgPSBhbW91bnQudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICBjb25zdCBmcmFjdGlvbiA9IHF1YW50aXR5WzFdO1xuXG4gIGlmIChmcmFjdGlvbikge1xuICAgIGNvbnN0IGRlY2ltYWxzID0gZnJhY3Rpb24uc3BsaXQoJycpO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVjaW1hbHMuZmlsdGVyKG51bWJlciA9PiBudW1iZXIgIT09ICcwJylbMF07XG4gICAgY29uc3QgaW5kZXggPSBkZWNpbWFscy5pbmRleE9mKGZpcnN0KTtcblxuICAgIC8vIFNldCBmb3JtYXQgZnJhY3Rpb25cbiAgICBmb3JtYXRlZCA9IGAuJHtmcmFjdGlvbi5zdWJzdHJpbmcoMCwgaW5kZXggKyBwcmVjaXNpb24pfWA7XG4gIH1cblxuICByZXR1cm4gcGFyc2VGbG9hdChxdWFudGl0eVswXSArIGZvcm1hdGVkKTtcbn1cblxuZnVuY3Rpb24gY3JlZGl0c1RvU3RyaW5nKGFtb3VudCkge1xuICBjb25zdCBjcmVkaXRTdHJpbmcgPSBwYXJzZUZsb2F0KGFtb3VudCkudG9GaXhlZCg4KTtcbiAgcmV0dXJuIGNyZWRpdFN0cmluZztcbn1cblxubGV0IHdhbGxldEJhbGFuY2VQcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvVXBkYXRlQmFsYW5jZSgpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB3YWxsZXQ6IHsgdG90YWxCYWxhbmNlOiB0b3RhbEluU3RvcmUgfVxuICAgIH0gPSBnZXRTdGF0ZSgpO1xuXG4gICAgaWYgKHdhbGxldEJhbGFuY2VQcm9taXNlID09PSBudWxsKSB7XG4gICAgICB3YWxsZXRCYWxhbmNlUHJvbWlzZSA9IGxicnlQcm94eS53YWxsZXRfYmFsYW5jZSgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB3YWxsZXRCYWxhbmNlUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgeyBhdmFpbGFibGUsIHJlc2VydmVkLCByZXNlcnZlZF9zdWJ0b3RhbHMsIHRvdGFsIH0gPSByZXNwb25zZTtcbiAgICAgICAgY29uc3QgeyBjbGFpbXMsIHN1cHBvcnRzLCB0aXBzIH0gPSByZXNlcnZlZF9zdWJ0b3RhbHM7XG4gICAgICAgIGNvbnN0IHRvdGFsRmxvYXQgPSBwYXJzZUZsb2F0KHRvdGFsKTtcblxuICAgICAgICBpZiAodG90YWxJblN0b3JlICE9PSB0b3RhbEZsb2F0KSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogVVBEQVRFX0JBTEFOQ0UsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHRvdGFsQmFsYW5jZTogdG90YWxGbG9hdCxcbiAgICAgICAgICAgICAgYmFsYW5jZTogcGFyc2VGbG9hdChhdmFpbGFibGUpLFxuICAgICAgICAgICAgICByZXNlcnZlZEJhbGFuY2U6IHBhcnNlRmxvYXQocmVzZXJ2ZWQpLFxuICAgICAgICAgICAgICBjbGFpbXNCYWxhbmNlOiBwYXJzZUZsb2F0KGNsYWltcyksXG4gICAgICAgICAgICAgIHN1cHBvcnRzQmFsYW5jZTogcGFyc2VGbG9hdChzdXBwb3J0cyksXG4gICAgICAgICAgICAgIHRpcHNCYWxhbmNlOiBwYXJzZUZsb2F0KHRpcHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgd2FsbGV0QmFsYW5jZVByb21pc2UgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdhbGxldEJhbGFuY2VQcm9taXNlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0JhbGFuY2VTdWJzY3JpYmUoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goZG9VcGRhdGVCYWxhbmNlKCkpO1xuICAgIHNldEludGVydmFsKCgpID0+IGRpc3BhdGNoKGRvVXBkYXRlQmFsYW5jZSgpKSwgNTAwMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvRmV0Y2hUcmFuc2FjdGlvbnMocGFnZSA9IDEsIHBhZ2VTaXplID0gOTk5OTkpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaChkb0ZldGNoU3VwcG9ydHMoKSk7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfVFJBTlNBQ1RJT05TX1NUQVJURURcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS51dHhvX3JlbGVhc2UoKS50aGVuKCgpID0+IGxicnlQcm94eS50cmFuc2FjdGlvbl9saXN0KHsgcGFnZSwgcGFnZV9zaXplOiBwYWdlU2l6ZSB9KSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9UUkFOU0FDVElPTlNfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiByZXN1bHQuaXRlbXNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvRmV0Y2hTdXBwb3J0cyhwYWdlID0gMSwgcGFnZVNpemUgPSA5OTk5OSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1NVUFBPUlRTX1NUQVJURURcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS5zdXBwb3J0X2xpc3QoeyBwYWdlLCBwYWdlX3NpemU6IHBhZ2VTaXplIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc3VwcG9ydHM6IHJlc3VsdC5pdGVtc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9HZXROZXdBZGRyZXNzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEdFVF9ORVdfQUREUkVTU19TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkuYWRkcmVzc191bnVzZWQoKS50aGVuKGFkZHJlc3MgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBHRVRfTkVXX0FERFJFU1NfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7IGFkZHJlc3MgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ2hlY2tBZGRyZXNzSXNNaW5lKGFkZHJlc3MpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBDSEVDS19BRERSRVNTX0lTX01JTkVfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgbGJyeVByb3h5LmFkZHJlc3NfaXNfbWluZSh7IGFkZHJlc3MgfSkudGhlbihpc01pbmUgPT4ge1xuICAgICAgaWYgKCFpc01pbmUpIGRpc3BhdGNoKGRvR2V0TmV3QWRkcmVzcygpKTtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDSEVDS19BRERSRVNTX0lTX01JTkVfQ09NUExFVEVEXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9TZW5kRHJhZnRUcmFuc2FjdGlvbihhZGRyZXNzLCBhbW91bnQpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgYmFsYW5jZSA9IHNlbGVjdEJhbGFuY2Uoc3RhdGUpO1xuXG4gICAgaWYgKGJhbGFuY2UgLSBhbW91bnQgPD0gMCkge1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIHRpdGxlOiAnSW5zdWZmaWNpZW50IGNyZWRpdHMnLFxuICAgICAgICBtZXNzYWdlOiAnSW5zdWZmaWNpZW50IGNyZWRpdHMnXG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU0VORF9UUkFOU0FDVElPTl9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzQ2FsbGJhY2sgPSByZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UudHhpZCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogU0VORF9UUkFOU0FDVElPTl9DT01QTEVURURcbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6IGBZb3Ugc2VudCAke2Ftb3VudH0gTEJDYCxcbiAgICAgICAgICBsaW5rVGV4dDogJ0hpc3RvcnknLFxuICAgICAgICAgIGxpbmtUYXJnZXQ6ICcvd2FsbGV0J1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogU0VORF9UUkFOU0FDVElPTl9GQUlMRUQsXG4gICAgICAgICAgZGF0YTogeyBlcnJvcjogcmVzcG9uc2UgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1RyYW5zYWN0aW9uIGZhaWxlZCcsXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yQ2FsbGJhY2sgPSBlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNFTkRfVFJBTlNBQ1RJT05fRkFJTEVELFxuICAgICAgICBkYXRhOiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH1cbiAgICAgIH0pO1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdUcmFuc2FjdGlvbiBmYWlsZWQnLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIGxicnlQcm94eS53YWxsZXRfc2VuZCh7XG4gICAgICBhZGRyZXNzZXM6IFthZGRyZXNzXSxcbiAgICAgIGFtb3VudDogY3JlZGl0c1RvU3RyaW5nKGFtb3VudClcbiAgICB9KS50aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2V0RHJhZnRUcmFuc2FjdGlvbkFtb3VudChhbW91bnQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5ULFxuICAgIGRhdGE6IHsgYW1vdW50IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9TZXREcmFmdFRyYW5zYWN0aW9uQWRkcmVzcyhhZGRyZXNzKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1MsXG4gICAgZGF0YTogeyBhZGRyZXNzIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9TZW5kVGlwKGFtb3VudCwgY2xhaW1JZCwgaXNTdXBwb3J0LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgYmFsYW5jZSA9IHNlbGVjdEJhbGFuY2Uoc3RhdGUpO1xuICAgIGNvbnN0IG15Q2xhaW1zID0gc2VsZWN0TXlDbGFpbXNSYXcoc3RhdGUpO1xuXG4gICAgY29uc3Qgc2hvdWxkU3VwcG9ydCA9IGlzU3VwcG9ydCB8fCAobXlDbGFpbXMgPyBteUNsYWltcy5maW5kKGNsYWltID0+IGNsYWltLmNsYWltX2lkID09PSBjbGFpbUlkKSA6IGZhbHNlKTtcblxuICAgIGlmIChiYWxhbmNlIC0gYW1vdW50IDw9IDApIHtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiBfXygnSW5zdWZmaWNpZW50IGNyZWRpdHMnKSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogc2hvdWxkU3VwcG9ydCA/IF9fKCdZb3UgZGVwb3NpdGVkICVhbW91bnQlIExCQyBhcyBhIHN1cHBvcnQhJywgeyBhbW91bnQgfSkgOiBfXygnWW91IHNlbnQgJWFtb3VudCUgTEJDIGFzIGEgdGlwLCBNYWhhbG8hJywgeyBhbW91bnQgfSksXG4gICAgICAgIGxpbmtUZXh0OiBfXygnSGlzdG9yeScpLFxuICAgICAgICBsaW5rVGFyZ2V0OiBfXygnL3dhbGxldCcpXG4gICAgICB9KSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU1VQUE9SVF9UUkFOU0FDVElPTl9DT01QTEVURURcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvciA9IGVyciA9PiB7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogX18oYFRoZXJlIHdhcyBhbiBlcnJvciBzZW5kaW5nIHN1cHBvcnQgZnVuZHMuYCksXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU1VQUE9SVF9UUkFOU0FDVElPTl9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkuc3VwcG9ydF9jcmVhdGUoe1xuICAgICAgY2xhaW1faWQ6IGNsYWltSWQsXG4gICAgICBhbW91bnQ6IGNyZWRpdHNUb1N0cmluZyhhbW91bnQpLFxuICAgICAgdGlwOiAhc2hvdWxkU3VwcG9ydCxcbiAgICAgIGJsb2NraW5nOiB0cnVlXG4gICAgfSkudGhlbihzdWNjZXNzLCBlcnJvcik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ2xlYXJTdXBwb3J0KCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IENMRUFSX1NVUFBPUlRfVFJBTlNBQ1RJT05cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9XYWxsZXRFbmNyeXB0KG5ld1Bhc3N3b3JkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogV0FMTEVUX0VOQ1JZUFRfU1RBUlRcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS53YWxsZXRfZW5jcnlwdCh7IG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogV0FMTEVUX0VOQ1JZUFRfQ09NUExFVEVELFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBXQUxMRVRfRU5DUllQVF9GQUlMRUQsXG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1dhbGxldFVubG9jayhwYXNzd29yZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFdBTExFVF9VTkxPQ0tfU1RBUlRcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS53YWxsZXRfdW5sb2NrKHsgcGFzc3dvcmQgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogV0FMTEVUX1VOTE9DS19DT01QTEVURUQsXG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFdBTExFVF9VTkxPQ0tfRkFJTEVELFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9TdXBwb3J0QWJhbmRvbkZvckNsYWltKGNsYWltSWQsIGNsYWltVHlwZSwga2VlcCwgcHJldmlldykge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFCQU5ET05fQ0xBSU1fU1VQUE9SVF9QUkVWSUVXXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBQkFORE9OX0NMQUlNX1NVUFBPUlRfU1RBUlRFRFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyBjbGFpbV9pZDogY2xhaW1JZCB9O1xuICAgIGlmIChwcmV2aWV3KSBwYXJhbXNbJ3ByZXZpZXcnXSA9IHRydWU7XG4gICAgaWYgKGtlZXApIHBhcmFtc1sna2VlcCddID0ga2VlcDtcbiAgICByZXR1cm4gbGJyeVByb3h5LnN1cHBvcnRfYWJhbmRvbihwYXJhbXMpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmICghcHJldmlldykge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQUJBTkRPTl9DTEFJTV9TVVBQT1JUX0NPTVBMRVRFRCxcbiAgICAgICAgICBkYXRhOiB7IGNsYWltSWQsIHR4aWQ6IHJlcy50eGlkLCBlZmZlY3RpdmU6IHJlcy5vdXRwdXRzWzBdLmFtb3VudCwgdHlwZTogY2xhaW1UeXBlIH0gLy8gYWRkIHRvIHBlbmRpbmdTdXBwb3J0VHJhbnNhY3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goZG9DaGVja1BlbmRpbmdUeHMoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBQkFORE9OX0NMQUlNX1NVUFBPUlRfRkFJTEVELFxuICAgICAgICBkYXRhOiBlLm1lc3NhZ2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1dhbGxldFJlY29ubmVjdCgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBXQUxMRVRfUkVTVEFSVFxuICAgIH0pO1xuICAgIC8vIHRoaXMgYmFzaWNhbGx5IHJldHVybnMgbnVsbCB3aGVuIGl0J3MgZG9uZS4gOihcbiAgICAvLyBtaWdodCBiZSBnb29kIHRvICBkaXNwYXRjaCBBQ1RJT05TLldBTExFVF9SRVNUQVJURURcbiAgICBsYnJ5UHJveHkud2FsbGV0X3JlY29ubmVjdCgpLnRoZW4oKCkgPT4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogV0FMTEVUX1JFU1RBUlRfQ09NUExFVEVEXG4gICAgfSkpO1xuICB9O1xufVxuZnVuY3Rpb24gZG9XYWxsZXREZWNyeXB0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFdBTExFVF9ERUNSWVBUX1NUQVJUXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkud2FsbGV0X2RlY3J5cHQoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBXQUxMRVRfREVDUllQVF9DT01QTEVURUQsXG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFdBTExFVF9ERUNSWVBUX0ZBSUxFRCxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvV2FsbGV0U3RhdHVzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFdBTExFVF9TVEFUVVNfU1RBUlRcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS53YWxsZXRfc3RhdHVzKCkudGhlbihzdGF0dXMgPT4ge1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogV0FMTEVUX1NUQVRVU19DT01QTEVURUQsXG4gICAgICAgICAgcmVzdWx0OiBzdGF0dXMuaXNfZW5jcnlwdGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1NldFRyYW5zYWN0aW9uTGlzdEZpbHRlcihmaWx0ZXJPcHRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTRVRfVFJBTlNBQ1RJT05fTElTVF9GSUxURVIsXG4gICAgZGF0YTogZmlsdGVyT3B0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvVXBkYXRlQmxvY2tIZWlnaHQoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiBsYnJ5UHJveHkuc3RhdHVzKCkudGhlbihzdGF0dXMgPT4ge1xuICAgIGlmIChzdGF0dXMud2FsbGV0KSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9DVVJSRU5UX0hFSUdIVCxcbiAgICAgICAgZGF0YTogc3RhdHVzLndhbGxldC5ibG9ja3NcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIENhbGxzIHRyYW5zYWN0aW9uX3Nob3cgb24gdHhlcyB1bnRpbCBhbnkgcGVuZGluZyB0eGVzIGFyZSBjb25maXJtZWRcbmNvbnN0IGRvQ2hlY2tQZW5kaW5nVHhzID0gKCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IHBlbmRpbmdUeHNCeUlkID0gc2VsZWN0UGVuZGluZ1N1cHBvcnRUcmFuc2FjdGlvbnMoc3RhdGUpOyAvLyB7fVxuICBpZiAoIU9iamVjdC5rZXlzKHBlbmRpbmdUeHNCeUlkKS5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHR4Q2hlY2tJbnRlcnZhbDtcbiAgY29uc3QgY2hlY2tUeExpc3QgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHBlbmRpbmdUeHMgPSBzZWxlY3RQZW5kaW5nU3VwcG9ydFRyYW5zYWN0aW9ucyhzdGF0ZSk7IC8vIHt9XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCBuZXdQZW5kaW5nVHhlcyA9IHt9O1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldChbXSk7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBPYmplY3QuZW50cmllcyhwZW5kaW5nVHhzKS5mb3JFYWNoKChbY2xhaW0sIGRhdGFdKSA9PiB7XG4gICAgICBwcm9taXNlcy5wdXNoKGxicnlQcm94eS50cmFuc2FjdGlvbl9zaG93KHsgdHhpZDogZGF0YS50eGlkIH0pKTtcbiAgICAgIHR5cGVzLmFkZChkYXRhLnR5cGUpO1xuICAgIH0pO1xuXG4gICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odHhTaG93cyA9PiB7XG4gICAgICB0eFNob3dzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5oZWlnaHQgPD0gMCkge1xuICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhwZW5kaW5nVHhzKTtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGVudHJpZXMuZmluZChlbnRyeSA9PiBlbnRyeVsxXS50eGlkID09PSByZXN1bHQudHhpZCk7XG4gICAgICAgICAgbmV3UGVuZGluZ1R4ZXNbbWF0Y2hbMF1dID0gbWF0Y2hbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFBFTkRJTkdfU1VQUE9SVFNfVVBEQVRFRCxcbiAgICAgICAgICBkYXRhOiBuZXdQZW5kaW5nVHhlc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVzLmhhcygnY2hhbm5lbCcpKSB7XG4gICAgICAgICAgZGlzcGF0Y2goZG9GZXRjaENoYW5uZWxMaXN0TWluZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZXMuaGFzKCdzdHJlYW0nKSkge1xuICAgICAgICAgIGRpc3BhdGNoKGRvRmV0Y2hDbGFpbUxpc3RNaW5lKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXMobmV3UGVuZGluZ1R4ZXMpLmxlbmd0aCA9PT0gMCkgY2xlYXJJbnRlcnZhbCh0eENoZWNrSW50ZXJ2YWwpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhwZW5kaW5nVHhzQnlJZCkubGVuZ3RoKSB7XG4gICAgICBjbGVhckludGVydmFsKHR4Q2hlY2tJbnRlcnZhbCk7XG4gICAgfVxuICB9O1xuXG4gIHR4Q2hlY2tJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjaGVja1R4TGlzdCgpO1xuICB9LCAzMDAwMCk7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWR1eC9pc3N1ZXMvOTExXG5mdW5jdGlvbiBiYXRjaEFjdGlvbnMoLi4uYWN0aW9ucykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCQVRDSF9BQ1RJT05TJyxcbiAgICBhY3Rpb25zXG4gIH07XG59XG5cbnZhciBfZXh0ZW5kcyQ1ID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gZG9SZXNvbHZlVXJpcyh1cmlzLCByZXR1cm5DYWNoZWRDbGFpbXMgPSBmYWxzZSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVcmlzID0gdXJpcy5tYXAobm9ybWFsaXplVVJJKTtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG5cbiAgICBjb25zdCByZXNvbHZpbmdVcmlzID0gc2VsZWN0UmVzb2x2aW5nVXJpcyhzdGF0ZSk7XG4gICAgY29uc3QgY2xhaW1zQnlVcmkgPSBzZWxlY3RDbGFpbXNCeVVyaShzdGF0ZSk7XG4gICAgY29uc3QgdXJpc1RvUmVzb2x2ZSA9IG5vcm1hbGl6ZWRVcmlzLmZpbHRlcih1cmkgPT4ge1xuICAgICAgaWYgKHJlc29sdmluZ1VyaXMuaW5jbHVkZXModXJpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5DYWNoZWRDbGFpbXMgPyAhY2xhaW1zQnlVcmlbdXJpXSA6IHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAodXJpc1RvUmVzb2x2ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBSRVNPTFZFX1VSSVNfU1RBUlRFRCxcbiAgICAgIGRhdGE6IHsgdXJpczogbm9ybWFsaXplZFVyaXMgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzb2x2ZUluZm8gPSB7fTtcblxuICAgIGxicnlQcm94eS5yZXNvbHZlKHsgdXJsczogdXJpc1RvUmVzb2x2ZSB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFt1cmksIHVyaVJlc29sdmVJbmZvXSkgPT4ge1xuICAgICAgICBjb25zdCBmYWxsYmFja1Jlc29sdmVJbmZvID0ge1xuICAgICAgICAgIHN0cmVhbTogbnVsbCxcbiAgICAgICAgICBjbGFpbXNJbkNoYW5uZWw6IG51bGwsXG4gICAgICAgICAgY2hhbm5lbDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEZsb3cgaGFzIHRlcnJpYmxlIE9iamVjdC5lbnRyaWVzIHN1cHBvcnRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIyMjFcbiAgICAgICAgaWYgKHVyaVJlc29sdmVJbmZvKSB7XG4gICAgICAgICAgaWYgKHVyaVJlc29sdmVJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlSW5mb1t1cmldID0gX2V4dGVuZHMkNSh7fSwgZmFsbGJhY2tSZXNvbHZlSW5mbyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGlmICh1cmlSZXNvbHZlSW5mby52YWx1ZV90eXBlID09PSAnY2hhbm5lbCcpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmNoYW5uZWwgPSB1cmlSZXNvbHZlSW5mbztcbiAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgICByZXN1bHQuY2xhaW1zSW5DaGFubmVsID0gdXJpUmVzb2x2ZUluZm8ubWV0YS5jbGFpbXNfaW5fY2hhbm5lbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5zdHJlYW0gPSB1cmlSZXNvbHZlSW5mbztcbiAgICAgICAgICAgICAgaWYgKHVyaVJlc29sdmVJbmZvLnNpZ25pbmdfY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jaGFubmVsID0gdXJpUmVzb2x2ZUluZm8uc2lnbmluZ19jaGFubmVsO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jbGFpbXNJbkNoYW5uZWwgPSB1cmlSZXNvbHZlSW5mby5zaWduaW5nX2NoYW5uZWwubWV0YSAmJiB1cmlSZXNvbHZlSW5mby5zaWduaW5nX2NoYW5uZWwubWV0YS5jbGFpbXNfaW5fY2hhbm5lbCB8fCAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICByZXNvbHZlSW5mb1t1cmldID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogUkVTT0xWRV9VUklTX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YTogeyByZXNvbHZlSW5mbyB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9SZXNvbHZlVXJpKHVyaSkge1xuICByZXR1cm4gZG9SZXNvbHZlVXJpcyhbdXJpXSk7XG59XG5cbmZ1bmN0aW9uIGRvRmV0Y2hDbGFpbUxpc3RNaW5lKHBhZ2UgPSAxLCBwYWdlU2l6ZSA9IDk5OTk5LCByZXNvbHZlID0gdHJ1ZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgbGJyeVByb3h5LmNsYWltX2xpc3QoeyBwYWdlLCBwYWdlX3NpemU6IHBhZ2VTaXplLCBjbGFpbV90eXBlOiBbJ3N0cmVhbScsICdyZXBvc3QnXSwgcmVzb2x2ZSB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBjbGFpbXMgPSByZXN1bHQuaXRlbXM7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9BYmFuZG9uQ2xhaW0odHhpZCwgbm91dCkge1xuICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuXG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IG15Q2xhaW1zID0gc2VsZWN0TXlDbGFpbXNSYXcoc3RhdGUpO1xuICAgIGNvbnN0IG15U3VwcG9ydHMgPSBzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQoc3RhdGUpO1xuXG4gICAgLy8gQSB1c2VyIGNvdWxkIGJlIHRyeWluZyB0byBhYmFuZG9uIGEgc3VwcG9ydCBvciBvbmUgb2YgdGhlaXIgY2xhaW1zXG4gICAgY29uc3QgY2xhaW1Ub0FiYW5kb24gPSBteUNsYWltcy5maW5kKGNsYWltID0+IGNsYWltLnR4aWQgPT09IHR4aWQgJiYgY2xhaW0ubm91dCA9PT0gbm91dCk7XG4gICAgY29uc3Qgc3VwcG9ydFRvQWJhbmRvbiA9IG15U3VwcG9ydHNbb3V0cG9pbnRdO1xuXG4gICAgaWYgKCFjbGFpbVRvQWJhbmRvbiAmJiAhc3VwcG9ydFRvQWJhbmRvbikge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gYXNzb2NpYXRlZCBzdXBwb3J0IG9yIGNsYWltIHdpdGggdHhpZDogJywgdHhpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGNsYWltVG9BYmFuZG9uID8geyBjbGFpbUlkOiBjbGFpbVRvQWJhbmRvbi5jbGFpbV9pZCB9IDogeyBvdXRwb2ludDogYCR7c3VwcG9ydFRvQWJhbmRvbi50eGlkfToke3N1cHBvcnRUb0FiYW5kb24ubm91dH1gIH07XG5cbiAgICBjb25zdCBpc0NsYWltID0gISFjbGFpbVRvQWJhbmRvbjtcbiAgICBjb25zdCBzdGFydGVkQWN0aW9uVHlwZSA9IGlzQ2xhaW0gPyBBQkFORE9OX0NMQUlNX1NUQVJURUQgOiBBQkFORE9OX1NVUFBPUlRfU1RBUlRFRDtcbiAgICBjb25zdCBjb21wbGV0ZWRBY3Rpb25UeXBlID0gaXNDbGFpbSA/IEFCQU5ET05fQ0xBSU1fU1VDQ0VFREVEIDogQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRDtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IHN0YXJ0ZWRBY3Rpb25UeXBlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXJyb3JDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiBpc0NsYWltID8gJ0Vycm9yIGFiYW5kb25pbmcgeW91ciBjbGFpbS9zdXBwb3J0JyA6ICdFcnJvciB1bmxvY2tpbmcgeW91ciB0aXAnLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogY29tcGxldGVkQWN0aW9uVHlwZSxcbiAgICAgICAgZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBhYmFuZG9uTWVzc2FnZTtcbiAgICAgIGlmIChpc0NsYWltKSB7XG4gICAgICAgIGFiYW5kb25NZXNzYWdlID0gJ1N1Y2Nlc3NmdWxseSBhYmFuZG9uZWQgeW91ciBjbGFpbS4nO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0VG9BYmFuZG9uKSB7XG4gICAgICAgIGFiYW5kb25NZXNzYWdlID0gJ1N1Y2Nlc3NmdWxseSBhYmFuZG9uZWQgeW91ciBzdXBwb3J0Lic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhYmFuZG9uTWVzc2FnZSA9ICdTdWNjZXNzZnVsbHkgdW5sb2NrZWQgeW91ciB0aXAhJztcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IGFiYW5kb25NZXNzYWdlXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIEFmdGVyIGFiYW5kb25pbmcsIGZldGNoIHRyYW5zYWN0aW9ucyB0byBzaG93IHRoZSBuZXcgYWJhbmRvbiB0cmFuc2FjdGlvblxuICAgICAgLy8gT25seSBmZXRjaCB0aGUgbGF0ZXN0IGZldyB0cmFuc2FjdGlvbnMgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBvbGQgb25lc1xuICAgICAgLy8gTm90IHZlcnkgcm9idXN0LCBidXQgYmV0dGVyIHRoYW4gY2FsbGluZyB0aGUgZW50aXJlIGxpc3QgZm9yIGxhcmdlIHdhbGxldHNcbiAgICAgIGNvbnN0IHBhZ2UgPSAxO1xuICAgICAgY29uc3QgcGFnZVNpemUgPSAxMDtcbiAgICAgIGRpc3BhdGNoKGRvRmV0Y2hUcmFuc2FjdGlvbnMocGFnZSwgcGFnZVNpemUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWJhbmRvblBhcmFtcyA9IHtcbiAgICAgIHR4aWQsXG4gICAgICBub3V0LFxuICAgICAgYmxvY2tpbmc6IHRydWVcbiAgICB9O1xuXG4gICAgbGV0IG1ldGhvZDtcbiAgICBpZiAoc3VwcG9ydFRvQWJhbmRvbikge1xuICAgICAgbWV0aG9kID0gJ3N1cHBvcnRfYWJhbmRvbic7XG4gICAgfSBlbHNlIGlmIChjbGFpbVRvQWJhbmRvbikge1xuICAgICAgY29uc3QgeyBuYW1lOiBjbGFpbU5hbWUgfSA9IGNsYWltVG9BYmFuZG9uO1xuICAgICAgbWV0aG9kID0gY2xhaW1OYW1lLnN0YXJ0c1dpdGgoJ0AnKSA/ICdjaGFubmVsX2FiYW5kb24nIDogJ3N0cmVhbV9hYmFuZG9uJztcbiAgICB9XG5cbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gXCJtZXRob2RcIiBjaG9zZW4gZm9yIGNsYWltIG9yIHN1cHBvcnQgYWJhbmRvbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxicnlQcm94eVttZXRob2RdKGFiYW5kb25QYXJhbXMpLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9GZXRjaENsYWltc0J5Q2hhbm5lbCh1cmksIHBhZ2UgPSAxKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCxcbiAgICAgIGRhdGE6IHsgdXJpLCBwYWdlIH1cbiAgICB9KTtcblxuICAgIGxicnlQcm94eS5jbGFpbV9zZWFyY2goe1xuICAgICAgY2hhbm5lbDogdXJpLFxuICAgICAgdmFsaWRfY2hhbm5lbF9zaWduYXR1cmU6IHRydWUsXG4gICAgICBwYWdlOiBwYWdlIHx8IDEsXG4gICAgICBvcmRlcl9ieTogWydyZWxlYXNlX3RpbWUnXVxuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IHsgaXRlbXM6IGNsYWltcywgdG90YWxfaXRlbXM6IGNsYWltc0luQ2hhbm5lbCwgcGFnZTogcmV0dXJuZWRQYWdlIH0gPSByZXN1bHQ7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpLFxuICAgICAgICAgIGNsYWltc0luQ2hhbm5lbCxcbiAgICAgICAgICBjbGFpbXM6IGNsYWltcyB8fCBbXSxcbiAgICAgICAgICBwYWdlOiByZXR1cm5lZFBhZ2UgfHwgdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0NyZWF0ZUNoYW5uZWwobmFtZSwgYW1vdW50LCBvcHRpb25hbFBhcmFtcykge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENSRUFURV9DSEFOTkVMX1NUQVJURURcbiAgICB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZVBhcmFtcyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBiaWQ6IGNyZWRpdHNUb1N0cmluZyhhbW91bnQpLFxuICAgICAgYmxvY2tpbmc6IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICBpZiAob3B0aW9uYWxQYXJhbXMudGl0bGUpIHtcbiAgICAgICAgY3JlYXRlUGFyYW1zLnRpdGxlID0gb3B0aW9uYWxQYXJhbXMudGl0bGU7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxQYXJhbXMuY292ZXJVcmwpIHtcbiAgICAgICAgY3JlYXRlUGFyYW1zLmNvdmVyX3VybCA9IG9wdGlvbmFsUGFyYW1zLmNvdmVyVXJsO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zLnRodW1ibmFpbFVybCkge1xuICAgICAgICBjcmVhdGVQYXJhbXMudGh1bWJuYWlsX3VybCA9IG9wdGlvbmFsUGFyYW1zLnRodW1ibmFpbFVybDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy5kZXNjcmlwdGlvbikge1xuICAgICAgICBjcmVhdGVQYXJhbXMuZGVzY3JpcHRpb24gPSBvcHRpb25hbFBhcmFtcy5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy53ZWJzaXRlKSB7XG4gICAgICAgIGNyZWF0ZVBhcmFtcy53ZWJzaXRlX3VybCA9IG9wdGlvbmFsUGFyYW1zLndlYnNpdGU7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxQYXJhbXMuZW1haWwpIHtcbiAgICAgICAgY3JlYXRlUGFyYW1zLmVtYWlsID0gb3B0aW9uYWxQYXJhbXMuZW1haWw7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxQYXJhbXMudGFncykge1xuICAgICAgICBjcmVhdGVQYXJhbXMudGFncyA9IG9wdGlvbmFsUGFyYW1zLnRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxicnlQcm94eS5jaGFubmVsX2NyZWF0ZShjcmVhdGVQYXJhbXMpXG4gICAgLy8gb3V0cHV0c1swXSBpcyB0aGUgY2VydGlmaWNhdGVcbiAgICAvLyBvdXRwdXRzWzFdIGlzIHRoZSBjaGFuZ2UgZnJvbSB0aGUgdHgsIG5vdCBpbiB0aGUgYXBwIGN1cnJlbnRseVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsQ2xhaW0gPSByZXN1bHQub3V0cHV0c1swXTtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7IGNoYW5uZWxDbGFpbSB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFubmVsQ2xhaW07XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDUkVBVEVfQ0hBTk5FTF9GQUlMRUQsXG4gICAgICAgIGRhdGE6IGVycm9yLm1lc3NhZ2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1VwZGF0ZUNoYW5uZWwocGFyYW1zKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX0NIQU5ORUxfU1RBUlRFRFxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBteUNoYW5uZWxzID0gc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKTtcbiAgICBjb25zdCBjaGFubmVsQ2xhaW0gPSBteUNoYW5uZWxzLmZpbmQobXlDaGFubmVsID0+IG15Q2hhbm5lbC5jbGFpbV9pZCA9PT0gcGFyYW1zLmNsYWltX2lkKTtcblxuICAgIGNvbnN0IHVwZGF0ZVBhcmFtcyA9IHtcbiAgICAgIGNsYWltX2lkOiBwYXJhbXMuY2xhaW1faWQsXG4gICAgICBiaWQ6IGNyZWRpdHNUb1N0cmluZyhwYXJhbXMuYW1vdW50KSxcbiAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICBjb3Zlcl91cmw6IHBhcmFtcy5jb3ZlclVybCxcbiAgICAgIHRodW1ibmFpbF91cmw6IHBhcmFtcy50aHVtYm5haWxVcmwsXG4gICAgICBkZXNjcmlwdGlvbjogcGFyYW1zLmRlc2NyaXB0aW9uLFxuICAgICAgd2Vic2l0ZV91cmw6IHBhcmFtcy53ZWJzaXRlLFxuICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgIHRhZ3M6IFtdLFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIGxhbmd1YWdlczogW10sXG4gICAgICBsb2NhdGlvbnM6IFtdLFxuICAgICAgYmxvY2tpbmc6IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy50YWdzKSB7XG4gICAgICB1cGRhdGVQYXJhbXMudGFncyA9IHBhcmFtcy50YWdzLm1hcCh0YWcgPT4gdGFnLm5hbWUpO1xuICAgIH1cblxuICAgIC8vIHdlJ2xsIG5lZWQgdG8gcmVtb3ZlIHRoZXNlIG9uY2Ugd2UgYWRkIGxvY2F0aW9ucy9jaGFubmVscyB0byBjaGFubmVsIHBhZ2UgZWRpdC9jcmVhdGUgb3B0aW9uc1xuXG4gICAgaWYgKGNoYW5uZWxDbGFpbSAmJiBjaGFubmVsQ2xhaW0udmFsdWUgJiYgY2hhbm5lbENsYWltLnZhbHVlLmxvY2F0aW9ucykge1xuICAgICAgdXBkYXRlUGFyYW1zLmxvY2F0aW9ucyA9IGNoYW5uZWxDbGFpbS52YWx1ZS5sb2NhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWxDbGFpbSAmJiBjaGFubmVsQ2xhaW0udmFsdWUgJiYgY2hhbm5lbENsYWltLnZhbHVlLmxhbmd1YWdlcykge1xuICAgICAgdXBkYXRlUGFyYW1zLmxhbmd1YWdlcyA9IGNoYW5uZWxDbGFpbS52YWx1ZS5sYW5ndWFnZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxicnlQcm94eS5jaGFubmVsX3VwZGF0ZSh1cGRhdGVQYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWxDbGFpbSA9IHJlc3VsdC5vdXRwdXRzWzBdO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVUERBVEVfQ0hBTk5FTF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHsgY2hhbm5lbENsYWltIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX0NIQU5ORUxfRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvSW1wb3J0Q2hhbm5lbChjZXJ0aWZpY2F0ZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IElNUE9SVF9DSEFOTkVMX1NUQVJURURcbiAgICB9KTtcblxuICAgIHJldHVybiBsYnJ5UHJveHkuY2hhbm5lbF9pbXBvcnQoeyBjaGFubmVsX2RhdGE6IGNlcnRpZmljYXRlIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVEXG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IElNUE9SVF9DSEFOTkVMX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogZXJyb3JcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoQ2hhbm5lbExpc3RNaW5lKHBhZ2UgPSAxLCBwYWdlU2l6ZSA9IDk5OTk5LCByZXNvbHZlID0gdHJ1ZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0NIQU5ORUxfTElTVF9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBjYWxsYmFjayA9IHJlc3BvbnNlID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YTogeyBjbGFpbXM6IHJlc3BvbnNlLml0ZW1zIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBsYnJ5UHJveHkuY2hhbm5lbF9saXN0KHsgcGFnZSwgcGFnZV9zaXplOiBwYWdlU2l6ZSwgcmVzb2x2ZSB9KS50aGVuKGNhbGxiYWNrKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9DbGFpbVNlYXJjaChvcHRpb25zID0ge1xuICBub190b3RhbHM6IHRydWUsXG4gIHBhZ2Vfc2l6ZTogMTAsXG4gIHBhZ2U6IDFcbn0pIHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXkob3B0aW9ucyk7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQ0xBSU1fU0VBUkNIX1NUQVJURUQsXG4gICAgICBkYXRhOiB7IHF1ZXJ5OiBxdWVyeSB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlSW5mbyA9IHt9O1xuICAgICAgY29uc3QgdXJscyA9IFtdO1xuICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKHN0cmVhbSA9PiB7XG4gICAgICAgIHJlc29sdmVJbmZvW3N0cmVhbS5jYW5vbmljYWxfdXJsXSA9IHsgc3RyZWFtIH07XG4gICAgICAgIHVybHMucHVzaChzdHJlYW0uY2Fub25pY2FsX3VybCk7XG4gICAgICB9KTtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDTEFJTV9TRUFSQ0hfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgcmVzb2x2ZUluZm8sXG4gICAgICAgICAgdXJscyxcbiAgICAgICAgICBhcHBlbmQ6IG9wdGlvbnMucGFnZSAmJiBvcHRpb25zLnBhZ2UgIT09IDEsXG4gICAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZV9zaXplXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gZXJyID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ0xBSU1fU0VBUkNIX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyBxdWVyeSB9LFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGJyeVByb3h5LmNsYWltX3NlYXJjaChvcHRpb25zKS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1JlcG9zdChvcHRpb25zKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ0xBSU1fUkVQT1NUX1NUQVJURURcbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBzdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHJlcG9zdENsYWltID0gcmVzcG9uc2Uub3V0cHV0c1swXTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IENMQUlNX1JFUE9TVF9DT01QTEVURUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgb3JpZ2luYWxDbGFpbUlkOiBvcHRpb25zLmNsYWltX2lkLFxuICAgICAgICAgICAgcmVwb3N0Q2xhaW1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpc3BhdGNoKGRvRmV0Y2hDbGFpbUxpc3RNaW5lKDEsIDEwKSk7XG4gICAgICAgIHJlc29sdmUocmVwb3N0Q2xhaW0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKGVycm9yKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBDTEFJTV9SRVBPU1RfRkFJTEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbGJyeVByb3h5LnN0cmVhbV9yZXBvc3Qob3B0aW9ucykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9DbGVhclJlcG9zdEVycm9yKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IENMRUFSX1JFUE9TVF9FUlJPUlxuICB9O1xufVxuXG5jb25zdCBzZWxlY3RTdGF0ZSQzID0gc3RhdGUgPT4gc3RhdGUuZmlsZUluZm8gfHwge307XG5cbmNvbnN0IHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQzLCBzdGF0ZSA9PiBzdGF0ZS5ieU91dHBvaW50IHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMywgc3RhdGUgPT4gc3RhdGUuaXNGZXRjaGluZ0ZpbGVMaXN0KTtcblxuY29uc3Qgc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0RG93bmxvYWRlZE9yUHVibGlzaGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0LCBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSwgKGlzRmV0Y2hpbmdGaWxlTGlzdCwgaXNGZXRjaGluZ0NsYWltTGlzdE1pbmUpID0+IGlzRmV0Y2hpbmdGaWxlTGlzdCB8fCBpc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeVVyaSwgc2VsZWN0RmlsZUluZm9zQnlPdXRwb2ludCwgKGNsYWltcywgYnlPdXRwb2ludCkgPT4ge1xuICBjb25zdCBjbGFpbSA9IGNsYWltc1t1cmldO1xuICBjb25zdCBvdXRwb2ludCA9IGNsYWltID8gYCR7Y2xhaW0udHhpZH06JHtjbGFpbS5ub3V0fWAgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBvdXRwb2ludCA/IGJ5T3V0cG9pbnRbb3V0cG9pbnRdIDogdW5kZWZpbmVkO1xufSk7XG5cbmNvbnN0IHNlbGVjdERvd25sb2FkaW5nQnlPdXRwb2ludCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmRvd25sb2FkaW5nQnlPdXRwb2ludCB8fCB7fSk7XG5cbmNvbnN0IG1ha2VTZWxlY3REb3dubG9hZGluZ0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQsIG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSh1cmkpLCAoYnlPdXRwb2ludCwgZmlsZUluZm8pID0+IHtcbiAgaWYgKCFmaWxlSW5mbykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gYnlPdXRwb2ludFtmaWxlSW5mby5vdXRwb2ludF07XG59KTtcblxuY29uc3Qgc2VsZWN0VXJpc0xvYWRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQzLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZyB8fCB7fSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RMb2FkaW5nRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVyaXNMb2FkaW5nLCBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgKGZldGNoaW5nQnlPdXRwb2ludCwgY2xhaW0pID0+IHtcbiAgaWYgKCFjbGFpbSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgdHhpZCwgbm91dCB9ID0gY2xhaW07XG4gIGNvbnN0IG91dHBvaW50ID0gYCR7dHhpZH06JHtub3V0fWA7XG4gIGNvbnN0IGlzRmV0Y2hpbmcgPSBmZXRjaGluZ0J5T3V0cG9pbnRbb3V0cG9pbnRdO1xuICByZXR1cm4gaXNGZXRjaGluZztcbn0pO1xuXG5jb25zdCBzZWxlY3RGaWxlSW5mb3NEb3dubG9hZGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RmlsZUluZm9zQnlPdXRwb2ludCwgc2VsZWN0TXlDbGFpbXMsIChieU91dHBvaW50LCBteUNsYWltcykgPT4gT2JqZWN0LnZhbHVlcyhieU91dHBvaW50KS5yZXZlcnNlKCkuZmlsdGVyKGZpbGVJbmZvID0+IHtcbiAgY29uc3QgbXlDbGFpbUlkcyA9IG15Q2xhaW1zLm1hcChjbGFpbSA9PiBjbGFpbS5jbGFpbV9pZCk7XG5cbiAgcmV0dXJuIGZpbGVJbmZvICYmIG15Q2xhaW1JZHMuaW5kZXhPZihmaWxlSW5mby5jbGFpbV9pZCkgPT09IC0xICYmIChmaWxlSW5mby5jb21wbGV0ZWQgfHwgZmlsZUluZm8ud3JpdHRlbl9ieXRlcyA+IDAgfHwgZmlsZUluZm8uYmxvYnNfY29tcGxldGVkID4gMCk7XG59KSk7XG5cbi8vIGV4cG9ydCBjb25zdCBzZWxlY3RGaWxlSW5mb0ZvclVyaSA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbi8vICAgY29uc3QgY2xhaW1zID0gc2VsZWN0Q2xhaW1zQnlVcmkoc3RhdGUpLFxuLy8gICAgIGNsYWltID0gY2xhaW1zW3Byb3BzLnVyaV0sXG4vLyAgICAgZmlsZUluZm9zID0gc2VsZWN0QWxsRmlsZUluZm9zKHN0YXRlKSxcbi8vICAgICBvdXRwb2ludCA9IGNsYWltID8gYCR7Y2xhaW0udHhpZH06JHtjbGFpbS5ub3V0fWAgOiB1bmRlZmluZWQ7XG5cbi8vICAgcmV0dXJuIG91dHBvaW50ICYmIGZpbGVJbmZvcyA/IGZpbGVJbmZvc1tvdXRwb2ludF0gOiB1bmRlZmluZWQ7XG4vLyB9O1xuXG5jb25zdCBzZWxlY3REb3dubG9hZGluZ0ZpbGVJbmZvcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdERvd25sb2FkaW5nQnlPdXRwb2ludCwgc2VsZWN0RmlsZUluZm9zQnlPdXRwb2ludCwgKGRvd25sb2FkaW5nQnlPdXRwb2ludCwgZmlsZUluZm9zQnlPdXRwb2ludCkgPT4ge1xuICBjb25zdCBvdXRwb2ludHMgPSBPYmplY3Qua2V5cyhkb3dubG9hZGluZ0J5T3V0cG9pbnQpO1xuICBjb25zdCBmaWxlSW5mb3MgPSBbXTtcblxuICBvdXRwb2ludHMuZm9yRWFjaChvdXRwb2ludCA9PiB7XG4gICAgY29uc3QgZmlsZUluZm8gPSBmaWxlSW5mb3NCeU91dHBvaW50W291dHBvaW50XTtcblxuICAgIGlmIChmaWxlSW5mbykgZmlsZUluZm9zLnB1c2goZmlsZUluZm8pO1xuICB9KTtcblxuICByZXR1cm4gZmlsZUluZm9zO1xufSk7XG5cbmNvbnN0IHNlbGVjdFRvdGFsRG93bmxvYWRQcm9ncmVzcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdERvd25sb2FkaW5nRmlsZUluZm9zLCBmaWxlSW5mb3MgPT4ge1xuICBjb25zdCBwcm9ncmVzcyA9IFtdO1xuXG4gIGZpbGVJbmZvcy5mb3JFYWNoKGZpbGVJbmZvID0+IHtcbiAgICBwcm9ncmVzcy5wdXNoKGZpbGVJbmZvLndyaXR0ZW5fYnl0ZXMgLyBmaWxlSW5mby50b3RhbF9ieXRlcyAqIDEwMCk7XG4gIH0pO1xuXG4gIGNvbnN0IHRvdGFsUHJvZ3Jlc3MgPSBwcm9ncmVzcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICBpZiAoZmlsZUluZm9zLmxlbmd0aCA+IDApIHJldHVybiB0b3RhbFByb2dyZXNzIC8gZmlsZUluZm9zLmxlbmd0aCAvIDEwMC4wO1xuICByZXR1cm4gLTE7XG59KTtcblxuY29uc3Qgc2VsZWN0RmlsZUxpc3RQdWJsaXNoZWRTb3J0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMywgc3RhdGUgPT4gc3RhdGUuZmlsZUxpc3RQdWJsaXNoZWRTb3J0KTtcblxuY29uc3Qgc2VsZWN0RmlsZUxpc3REb3dubG9hZGVkU29ydCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmZpbGVMaXN0RG93bmxvYWRlZFNvcnQpO1xuXG5jb25zdCBzZWxlY3REb3dubG9hZGVkVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZpbGVJbmZvc0Rvd25sb2FkZWQsXG4vLyBXZSBzaG91bGQgdXNlIHBlcm1hbWVudF91cmwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QgaW4gZmlsZV9saXN0XG5pbmZvID0+IGluZm8uc2xpY2UoKS5tYXAoY2xhaW0gPT4gYGxicnk6Ly8ke2NsYWltLmNsYWltX25hbWV9IyR7Y2xhaW0uY2xhaW1faWR9YCkpO1xuXG5jb25zdCBtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSh1cmkpLCBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkodXJpKSwgKGZpbGVJbmZvLCBjb250ZW50VHlwZSkgPT4ge1xuICBpZiAoIWZpbGVJbmZvICYmICFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmaWxlTmFtZSA9IGZpbGVJbmZvICYmIGZpbGVJbmZvLmZpbGVfbmFtZTtcbiAgcmV0dXJuIGxicnlQcm94eS5nZXRNZWRpYVR5cGUoY29udGVudFR5cGUsIGZpbGVOYW1lKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VXJpSXNTdHJlYW1hYmxlID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RNZWRpYVR5cGVGb3JVcmkodXJpKSwgbWVkaWFUeXBlID0+IHtcbiAgY29uc3QgaXNTdHJlYW1hYmxlID0gWydhdWRpbycsICd2aWRlbycsICdpbWFnZSddLmluZGV4T2YobWVkaWFUeXBlKSAhPT0gLTE7XG4gIHJldHVybiBpc1N0cmVhbWFibGU7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdERvd25sb2FkUGF0aEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKSwgZmlsZUluZm8gPT4ge1xuICByZXR1cm4gZmlsZUluZm8gJiYgZmlsZUluZm8uZG93bmxvYWRfcGF0aDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0RmlsZVBhcnRseURvd25sb2FkZWQgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSksIGZpbGVJbmZvID0+IHtcbiAgaWYgKCFmaWxlSW5mbykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlSW5mby53cml0dGVuX2J5dGVzID4gMCB8fCBmaWxlSW5mby5ibG9ic19jb21wbGV0ZWQgPiAwO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RGaWxlTmFtZUZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKSwgZmlsZUluZm8gPT4ge1xuICByZXR1cm4gZmlsZUluZm8gJiYgZmlsZUluZm8uZmlsZV9uYW1lO1xufSk7XG5cbmNvbnN0IHNlbGVjdERvd25sb2FkVXJsc0NvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RG93bmxvYWRlZFVyaXMsIHVyaXMgPT4gdXJpcy5sZW5ndGgpO1xuXG5mdW5jdGlvbiBmaWx0ZXJGaWxlSW5mb3MoZmlsZUluZm9zLCBxdWVyeSkge1xuICBpZiAocXVlcnkpIHtcbiAgICBjb25zdCBxdWVyeU1hdGNoUmVnRXhwID0gbmV3IFJlZ0V4cChxdWVyeSwgJ2knKTtcbiAgICByZXR1cm4gZmlsZUluZm9zLmZpbHRlcihmaWxlSW5mbyA9PiB7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhIH0gPSBmaWxlSW5mbztcbiAgICAgIHJldHVybiBtZXRhZGF0YS50aXRsZSAmJiBtZXRhZGF0YS50aXRsZS5tYXRjaChxdWVyeU1hdGNoUmVnRXhwKSB8fCBmaWxlSW5mby5jaGFubmVsX25hbWUgJiYgZmlsZUluZm8uY2hhbm5lbF9uYW1lLm1hdGNoKHF1ZXJ5TWF0Y2hSZWdFeHApIHx8IGZpbGVJbmZvLmNsYWltX25hbWUgJiYgZmlsZUluZm8uY2xhaW1fbmFtZS5tYXRjaChxdWVyeU1hdGNoUmVnRXhwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxlSW5mb3M7XG59XG5cbmNvbnN0IG1ha2VTZWxlY3RTZWFyY2hEb3dubG9hZFVybHNGb3JQYWdlID0gKHF1ZXJ5LCBwYWdlID0gMSkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RmlsZUluZm9zRG93bmxvYWRlZCwgZmlsZUluZm9zID0+IHtcbiAgY29uc3QgbWF0Y2hpbmdGaWxlSW5mb3MgPSBmaWx0ZXJGaWxlSW5mb3MoZmlsZUluZm9zLCBxdWVyeSk7XG4gIGNvbnN0IHN0YXJ0ID0gKE51bWJlcihwYWdlKSAtIDEpICogTnVtYmVyKFBBR0VfU0laRSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihwYWdlKSAqIE51bWJlcihQQUdFX1NJWkUpO1xuXG4gIHJldHVybiBtYXRjaGluZ0ZpbGVJbmZvcyAmJiBtYXRjaGluZ0ZpbGVJbmZvcy5sZW5ndGggPyBtYXRjaGluZ0ZpbGVJbmZvcy5zbGljZShzdGFydCwgZW5kKS5tYXAoZmlsZUluZm8gPT4gYnVpbGRVUkkoe1xuICAgIHN0cmVhbU5hbWU6IGZpbGVJbmZvLmNsYWltX25hbWUsXG4gICAgY2hhbm5lbE5hbWU6IGZpbGVJbmZvLmNoYW5uZWxfbmFtZSxcbiAgICBjaGFubmVsQ2xhaW1JZDogZmlsZUluZm8uY2hhbm5lbF9jbGFpbV9pZFxuICB9KSkgOiBbXTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzQ291bnQgPSBxdWVyeSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWxlSW5mb3NEb3dubG9hZGVkLCBmaWxlSW5mb3MgPT4ge1xuICByZXR1cm4gZmlsZUluZm9zICYmIGZpbGVJbmZvcy5sZW5ndGggPyBmaWx0ZXJGaWxlSW5mb3MoZmlsZUluZm9zLCBxdWVyeSkubGVuZ3RoIDogMDtcbn0pO1xuXG4vLyAgICAgIFxuXG5jb25zdCBzZWxlY3RTdGF0ZSQ0ID0gc3RhdGUgPT4gc3RhdGUuZmlsZSB8fCB7fTtcblxuY29uc3Qgc2VsZWN0UHVyY2hhc2VVcmlFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ0LCBzdGF0ZSA9PiBzdGF0ZS5wdXJjaGFzZVVyaUVycm9yTWVzc2FnZSk7XG5cbmNvbnN0IHNlbGVjdEZhaWxlZFB1cmNoYXNlVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDQsIHN0YXRlID0+IHN0YXRlLmZhaWxlZFB1cmNoYXNlVXJpcyk7XG5cbmNvbnN0IHNlbGVjdFB1cmNoYXNlZFVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ0LCBzdGF0ZSA9PiBzdGF0ZS5wdXJjaGFzZWRVcmlzKTtcblxuY29uc3Qgc2VsZWN0TGFzdFB1cmNoYXNlZFVyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDQsIHN0YXRlID0+IHN0YXRlLnB1cmNoYXNlZFVyaXMubGVuZ3RoID4gMCA/IHN0YXRlLnB1cmNoYXNlZFVyaXNbc3RhdGUucHVyY2hhc2VkVXJpcy5sZW5ndGggLSAxXSA6IG51bGwpO1xuXG5jb25zdCBtYWtlU2VsZWN0U3RyZWFtaW5nVXJsRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSh1cmkpLCBmaWxlSW5mbyA9PiB7XG4gIHJldHVybiBmaWxlSW5mbyAmJiBmaWxlSW5mby5zdHJlYW1pbmdfdXJsO1xufSk7XG5cbi8vICAgICAgXG5cbmZ1bmN0aW9uIGRvRmlsZUdldCh1cmksIHNhdmVGaWxlID0gdHJ1ZSwgb25TdWNjZXNzKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHsgbm91dCwgdHhpZCB9ID0gbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSkoc3RhdGUpO1xuICAgIGNvbnN0IG91dHBvaW50ID0gYCR7dHhpZH06JHtub3V0fWA7XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9GSUxFX0lORk9fU1RBUlRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgb3V0cG9pbnRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNldCBzYXZlX2ZpbGUgYXJndW1lbnQgdG8gVHJ1ZSB0byBzYXZlIHRoZSBmaWxlIChvbGQgYmVoYXZpb3VyKVxuICAgIGxicnlQcm94eS5nZXQoeyB1cmksIHNhdmVfZmlsZTogc2F2ZUZpbGUgfSkudGhlbihzdHJlYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzdHJlYW1JbmZvID09PSBudWxsIHx8IHR5cGVvZiBzdHJlYW1JbmZvICE9PSAnb2JqZWN0JyB8fCBzdHJlYW1JbmZvLmVycm9yID09PSAnVGltZW91dCc7XG5cbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBGRVRDSF9GSUxFX0lORk9fRkFJTEVELFxuICAgICAgICAgIGRhdGE6IHsgb3V0cG9pbnQgfVxuICAgICAgICB9KTtcblxuICAgICAgICBkaXNwYXRjaChkb1RvYXN0KHsgbWVzc2FnZTogYEZpbGUgdGltZW91dCBmb3IgdXJpICR7dXJpfWAsIGlzRXJyb3I6IHRydWUgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcHVyY2hhc2Ugd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFBVUkNIQVNFX1VSSV9DT01QTEVURUQsXG4gICAgICAgICAgZGF0YTogeyB1cmkgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZmlsZUluZm86IHN0cmVhbUluZm8sXG4gICAgICAgICAgICBvdXRwb2ludDogc3RyZWFtSW5mby5vdXRwb2ludFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgIG9uU3VjY2VzcyhzdHJlYW1JbmZvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogUFVSQ0hBU0VfVVJJX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyB1cmkgfVxuICAgICAgfSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfRklMRV9JTkZPX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyBvdXRwb2ludCB9XG4gICAgICB9KTtcblxuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gdmlldyAke3VyaX0sIHBsZWFzZSB0cnkgYWdhaW4uIElmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cywgdmlzaXQgaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvc3VwcG9ydCBmb3Igc3VwcG9ydC5gLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvUHVyY2hhc2VVcmkodXJpLCBjb3N0SW5mbywgc2F2ZUZpbGUgPSB0cnVlLCBvblN1Y2Nlc3MpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBQVVJDSEFTRV9VUklfU1RBUlRFRCxcbiAgICAgIGRhdGE6IHsgdXJpIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBiYWxhbmNlID0gc2VsZWN0QmFsYW5jZShzdGF0ZSk7XG4gICAgY29uc3QgZmlsZUluZm8gPSBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKShzdGF0ZSk7XG4gICAgY29uc3QgZG93bmxvYWRpbmdCeU91dHBvaW50ID0gc2VsZWN0RG93bmxvYWRpbmdCeU91dHBvaW50KHN0YXRlKTtcbiAgICBjb25zdCBhbHJlYWR5RG93bmxvYWRpbmcgPSBmaWxlSW5mbyAmJiAhIWRvd25sb2FkaW5nQnlPdXRwb2ludFtmaWxlSW5mby5vdXRwb2ludF07XG4gICAgY29uc3QgYWxyZWFkeVN0cmVhbWluZyA9IG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmkodXJpKShzdGF0ZSk7XG5cbiAgICBpZiAoIXNhdmVGaWxlICYmIChhbHJlYWR5RG93bmxvYWRpbmcgfHwgYWxyZWFkeVN0cmVhbWluZykpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogUFVSQ0hBU0VfVVJJX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyB1cmksIGVycm9yOiBgQWxyZWFkeSBmZXRjaGluZyB1cmk6ICR7dXJpfWAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb3N0IH0gPSBjb3N0SW5mbztcbiAgICBpZiAocGFyc2VGbG9hdChjb3N0KSA+IGJhbGFuY2UpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogUFVSQ0hBU0VfVVJJX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyB1cmksIGVycm9yOiAnSW5zdWZmaWNpZW50IGNyZWRpdHMnIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKGRvRmlsZUdldCh1cmksIHNhdmVGaWxlLCBvblN1Y2Nlc3MpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9EZWxldGVQdXJjaGFzZWRVcmkodXJpKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogREVMRVRFX1BVUkNIQVNFRF9VUkksXG4gICAgZGF0YTogeyB1cmkgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoRmlsZUluZm8odXJpKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNsYWltID0gc2VsZWN0Q2xhaW1zQnlVcmkoc3RhdGUpW3VyaV07XG4gICAgY29uc3Qgb3V0cG9pbnQgPSBjbGFpbSA/IGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gIDogbnVsbDtcbiAgICBjb25zdCBhbHJlYWR5RmV0Y2hpbmcgPSAhIXNlbGVjdFVyaXNMb2FkaW5nKHN0YXRlKVt1cmldO1xuXG4gICAgaWYgKCFhbHJlYWR5RmV0Y2hpbmcpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfRklMRV9JTkZPX1NUQVJURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwb2ludFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGJyeVByb3h5LmZpbGVfbGlzdCh7IG91dHBvaW50LCBmdWxsX3N0YXR1czogdHJ1ZSwgcGFnZTogMSwgcGFnZV9zaXplOiAxIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBpdGVtczogZmlsZUluZm9zIH0gPSByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGZpbGVJbmZvID0gZmlsZUluZm9zWzBdO1xuXG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBGRVRDSF9GSUxFX0lORk9fQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG91dHBvaW50LFxuICAgICAgICAgICAgZmlsZUluZm86IGZpbGVJbmZvIHx8IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZpbGVMaXN0KHBhZ2UgPSAxLCBwYWdlU2l6ZSA9IDk5OTk5KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBzZWxlY3RJc0ZldGNoaW5nRmlsZUxpc3Qoc3RhdGUpO1xuXG4gICAgaWYgKCFpc0ZldGNoaW5nKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZJTEVfTElTVF9TVEFSVEVEXG4gICAgICB9KTtcblxuICAgICAgbGJyeVByb3h5LmZpbGVfbGlzdCh7IHBhZ2UsIHBhZ2Vfc2l6ZTogcGFnZVNpemUgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGl0ZW1zOiBmaWxlSW5mb3MgfSA9IHJlc3VsdDtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEZJTEVfTElTVF9TVUNDRUVERUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZmlsZUluZm9zOiBmaWxlSW5mb3NcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoRmlsZUluZm9zQW5kUHVibGlzaGVkQ2xhaW1zKCkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBpc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSA9IHNlbGVjdElzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lKHN0YXRlKTtcbiAgICBjb25zdCBpc0ZldGNoaW5nRmlsZUluZm8gPSBzZWxlY3RJc0ZldGNoaW5nRmlsZUxpc3Qoc3RhdGUpO1xuXG4gICAgaWYgKCFpc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSkgZGlzcGF0Y2goZG9GZXRjaENsYWltTGlzdE1pbmUoKSk7XG4gICAgaWYgKCFpc0ZldGNoaW5nRmlsZUluZm8pIGRpc3BhdGNoKGRvRmlsZUxpc3QoKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2V0RmlsZUxpc3RTb3J0KHBhZ2UsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX0ZJTEVfTElTVF9TT1JULFxuICAgIGRhdGE6IHsgcGFnZSwgdmFsdWUgfVxuICB9O1xufVxuXG52YXIgX2V4dGVuZHMkNiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQyKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5jb25zdCBzZWxlY3RTdGF0ZSQ1ID0gc3RhdGUgPT4gc3RhdGUucHVibGlzaCB8fCB7fTtcblxuLy8gSXMgdGhlIGN1cnJlbnQgdXJpIHRoZSBzYW1lIGFzIHRoZSB1cmkgdGhleSBjbGlja2VkIFwiZWRpdFwiIG9uXG5jb25zdCBzZWxlY3RJc1N0aWxsRWRpdGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDUsIHB1Ymxpc2hTdGF0ZSA9PiB7XG4gIGNvbnN0IHsgZWRpdGluZ1VSSSwgdXJpIH0gPSBwdWJsaXNoU3RhdGU7XG5cbiAgaWYgKCFlZGl0aW5nVVJJIHx8ICF1cmkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNDaGFubmVsOiBjdXJyZW50SXNDaGFubmVsLFxuICAgIHN0cmVhbU5hbWU6IGN1cnJlbnRDbGFpbU5hbWUsXG4gICAgY2hhbm5lbE5hbWU6IGN1cnJlbnRDb250ZW50TmFtZVxuICB9ID0gcGFyc2VVUkkodXJpKTtcbiAgY29uc3Qge1xuICAgIGlzQ2hhbm5lbDogZWRpdElzQ2hhbm5lbCxcbiAgICBzdHJlYW1OYW1lOiBlZGl0Q2xhaW1OYW1lLFxuICAgIGNoYW5uZWxOYW1lOiBlZGl0Q29udGVudE5hbWVcbiAgfSA9IHBhcnNlVVJJKGVkaXRpbmdVUkkpO1xuXG4gIC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXMvY3VycmVudCB1c2Ugb2YgYSBjaGFubmVsLCB3ZSBuZWVkIHRvIGNvbXBhcmUgZGlmZmVyZW50IHRoaW5nc1xuICAvLyBleDogZ29pbmcgZnJvbSBhIGNoYW5uZWwgdG8gYW5vbnltb3VzLCB0aGUgbmV3IHVyaSB3b24ndCByZXR1cm4gY29udGVudE5hbWUsIHNvIHdlIG5lZWQgdG8gdXNlIGNsYWltTmFtZVxuICBjb25zdCBjdXJyZW50TmFtZSA9IGN1cnJlbnRJc0NoYW5uZWwgPyBjdXJyZW50Q29udGVudE5hbWUgOiBjdXJyZW50Q2xhaW1OYW1lO1xuICBjb25zdCBlZGl0TmFtZSA9IGVkaXRJc0NoYW5uZWwgPyBlZGl0Q29udGVudE5hbWUgOiBlZGl0Q2xhaW1OYW1lO1xuICByZXR1cm4gY3VycmVudE5hbWUgPT09IGVkaXROYW1lO1xufSk7XG5cbmNvbnN0IHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNSwgc2VsZWN0SXNTdGlsbEVkaXRpbmcsIChzdGF0ZSwgaXNTdGlsbEVkaXRpbmcpID0+IHtcbiAgY29uc3QgeyBwZW5kaW5nUHVibGlzaCwgbGFuZ3VhZ2UsIGxhbmd1YWdlcyB9ID0gc3RhdGUsXG4gICAgICAgIGZvcm1WYWx1ZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMihzdGF0ZSwgWydwZW5kaW5nUHVibGlzaCcsICdsYW5ndWFnZScsICdsYW5ndWFnZXMnXSk7XG5cbiAgbGV0IGFjdHVhbExhbmd1YWdlO1xuICAvLyBTZXRzIGRlZmF1bHQgaWYgZWRpdGluZyBhIGNsYWltIHdpdGggYSBzZXQgbGFuZ3VhZ2VcbiAgaWYgKCFsYW5ndWFnZSAmJiBpc1N0aWxsRWRpdGluZyAmJiBsYW5ndWFnZXMgJiYgbGFuZ3VhZ2VzWzBdKSB7XG4gICAgYWN0dWFsTGFuZ3VhZ2UgPSBsYW5ndWFnZXNbMF07XG4gIH0gZWxzZSB7XG4gICAgYWN0dWFsTGFuZ3VhZ2UgPSBsYW5ndWFnZSB8fCAnZW4nO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyQ2KHt9LCBmb3JtVmFsdWVzLCB7IGxhbmd1YWdlOiBhY3R1YWxMYW5ndWFnZSB9KTtcbn0pO1xuY29uc3QgbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUgPSBpdGVtID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDUsIHN0YXRlID0+IHN0YXRlW2l0ZW1dKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbUZvclVyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzLCBzZWxlY3RJc1N0aWxsRWRpdGluZywgc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0TXlDbGFpbXNXaXRob3V0Q2hhbm5lbHMsICh7IGVkaXRpbmdVUkksIHVyaSB9LCBpc1N0aWxsRWRpdGluZywgY2xhaW1zQnlJZCwgbXlDbGFpbXMpID0+IHtcbiAgY29uc3QgeyBjaGFubmVsTmFtZTogY29udGVudE5hbWUsIHN0cmVhbU5hbWU6IGNsYWltTmFtZSB9ID0gcGFyc2VVUkkodXJpKTtcbiAgY29uc3QgeyBzdHJlYW1DbGFpbUlkOiBlZGl0Q2xhaW1JZCB9ID0gcGFyc2VVUkkoZWRpdGluZ1VSSSk7XG5cbiAgLy8gSWYgaXNTdGlsbEVkaXRpbmdcbiAgLy8gVGhleSBjbGlja2VkIFwiZWRpdFwiIGZyb20gdGhlIGZpbGUgcGFnZVxuICAvLyBUaGV5IGhhdmVuJ3QgY2hhbmdlZCB0aGUgY2hhbm5lbC9uYW1lIGFmdGVyIGNsaWNraW5nIGVkaXRcbiAgLy8gR2V0IHRoZSBjbGFpbSBzbyB0aGV5IGNhbiBlZGl0IHdpdGhvdXQgcmUtdXBsb2FkaW5nIGEgbmV3IGZpbGVcbiAgcmV0dXJuIGlzU3RpbGxFZGl0aW5nID8gY2xhaW1zQnlJZFtlZGl0Q2xhaW1JZF0gOiBteUNsYWltcy5maW5kKGNsYWltID0+ICFjb250ZW50TmFtZSA/IGNsYWltLm5hbWUgPT09IGNsYWltTmFtZSA6IGNsYWltLm5hbWUgPT09IGNvbnRlbnROYW1lIHx8IGNsYWltLm5hbWUgPT09IGNsYWltTmFtZSk7XG59KTtcblxuY29uc3Qgc2VsZWN0SXNSZXNvbHZpbmdQdWJsaXNoVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDUsIHNlbGVjdFJlc29sdmluZ1VyaXMsICh7IHVyaSwgbmFtZSB9LCByZXNvbHZpbmdVcmlzKSA9PiB7XG4gIGlmICh1cmkpIHtcbiAgICBjb25zdCBpc1Jlc29sdmluZ1VyaSA9IHJlc29sdmluZ1VyaXMuaW5jbHVkZXModXJpKTtcbiAgICBjb25zdCB7IGlzQ2hhbm5lbCB9ID0gcGFyc2VVUkkodXJpKTtcblxuICAgIGxldCBpc1Jlc29sdmluZ1Nob3J0VXJpO1xuICAgIGlmIChpc0NoYW5uZWwgJiYgbmFtZSkge1xuICAgICAgY29uc3Qgc2hvcnRVcmkgPSBidWlsZFVSSSh7IHN0cmVhbU5hbWU6IG5hbWUgfSk7XG4gICAgICBpc1Jlc29sdmluZ1Nob3J0VXJpID0gcmVzb2x2aW5nVXJpcy5pbmNsdWRlcyhzaG9ydFVyaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzUmVzb2x2aW5nVXJpIHx8IGlzUmVzb2x2aW5nU2hvcnRVcmk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59KTtcblxuY29uc3Qgc2VsZWN0VGFrZU92ZXJBbW91bnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ1LCBzZWxlY3RNeUNsYWltRm9yVXJpLCBzZWxlY3RDbGFpbXNCeVVyaSwgKHsgbmFtZSB9LCBteUNsYWltRm9yVXJpLCBjbGFpbXNCeVVyaSkgPT4ge1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgd2lubmluZyBjbGFpbSBmb3IgdGhlIHNob3J0IHVyaVxuICBjb25zdCBzaG9ydFVyaSA9IGJ1aWxkVVJJKHsgc3RyZWFtTmFtZTogbmFtZSB9KTtcbiAgY29uc3QgY2xhaW1Gb3JTaG9ydFVyaSA9IGNsYWltc0J5VXJpW3Nob3J0VXJpXTtcblxuICBpZiAoIW15Q2xhaW1Gb3JVcmkgJiYgY2xhaW1Gb3JTaG9ydFVyaSkge1xuICAgIHJldHVybiBjbGFpbUZvclNob3J0VXJpLm1ldGEuZWZmZWN0aXZlX2Ftb3VudDtcbiAgfSBlbHNlIGlmIChteUNsYWltRm9yVXJpICYmIGNsYWltRm9yU2hvcnRVcmkpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnkvaXNzdWVzLzE0NzZcbiAgICAvLyBXZSBzaG91bGQgY2hlY2sgdGhlIGN1cnJlbnQgZWZmZWN0aXZlX2Ftb3VudCBvbiBteSBjbGFpbSB0byBzZWUgaG93IG11Y2ggYWRkaXRpb25hbCBsYmNcbiAgICAvLyBpcyBuZWVkZWQgdG8gd2luIHRoZSBjbGFpbS4gQ3VycmVudGx5IHRoaXMgaXMgbm90IHBvc3NpYmxlIGR1cmluZyBhIHRha2VvdmVyLlxuICAgIC8vIFdpdGggdGhpcywgd2UgY291bGQgc2F5IHNvbWV0aGluZyBsaWtlLCBcIllvdSBoYXZlIHggbGJjIGluIHN1cHBvcnQsIGlmIHlvdSBiaWQgeSBhZGRpdGlvbmFsIExCQyB5b3Ugd2lsbCBjb250cm9sIHRoZSBjbGFpbVwiXG4gICAgLy8gRm9yIG5vdyBqdXN0IGlnbm9yZSBzdXBwb3J0cy4gV2Ugd2lsbCBqdXN0IHNob3cgdGhlIHdpbm5pbmcgY2xhaW0ncyBiaWQgYW1vdW50XG4gICAgcmV0dXJuIGNsYWltRm9yU2hvcnRVcmkubWV0YS5lZmZlY3RpdmVfYW1vdW50IHx8IGNsYWltRm9yU2hvcnRVcmkuYW1vdW50O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59KTtcblxudmFyIF9leHRlbmRzJDcgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBkb1Jlc2V0VGh1bWJuYWlsU3RhdHVzID0gKCkgPT4gZGlzcGF0Y2ggPT4ge1xuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICBkYXRhOiB7XG4gICAgICB0aHVtYm5haWxQYXRoOiAnJ1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZldGNoKFNQRUVDSF9TVEFUVVMpLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpLnRoZW4oc3RhdHVzID0+IHtcbiAgICBpZiAoc3RhdHVzLmRpc2FibGVkKSB7XG4gICAgICB0aHJvdyBFcnJvcigpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVUERBVEVfUFVCTElTSF9GT1JNLFxuICAgICAgZGF0YToge1xuICAgICAgICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IFJFQURZLFxuICAgICAgICB0aHVtYm5haWw6ICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH0pLmNhdGNoKCgpID0+IGRpc3BhdGNoKHtcbiAgICB0eXBlOiBVUERBVEVfUFVCTElTSF9GT1JNLFxuICAgIGRhdGE6IHtcbiAgICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogQVBJX0RPV04sXG4gICAgICB0aHVtYm5haWw6ICcnXG4gICAgfVxuICB9KSk7XG59O1xuXG5jb25zdCBkb0NsZWFyUHVibGlzaCA9ICgpID0+IGRpc3BhdGNoID0+IHtcbiAgZGlzcGF0Y2goeyB0eXBlOiBDTEVBUl9QVUJMSVNIIH0pO1xuICByZXR1cm4gZGlzcGF0Y2goZG9SZXNldFRodW1ibmFpbFN0YXR1cygpKTtcbn07XG5cbmNvbnN0IGRvVXBkYXRlUHVibGlzaEZvcm0gPSBwdWJsaXNoRm9ybVZhbHVlID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgZGF0YTogX2V4dGVuZHMkNyh7fSwgcHVibGlzaEZvcm1WYWx1ZSlcbn0pO1xuXG5jb25zdCBkb1VwbG9hZFRodW1ibmFpbCA9IChmaWxlUGF0aCwgdGh1bWJuYWlsQmxvYiwgZnNBZGFwdGVyLCBmcywgcGF0aCkgPT4gZGlzcGF0Y2ggPT4ge1xuICBsZXQgdGh1bWJuYWlsLCBmaWxlRXh0LCBmaWxlTmFtZSwgZmlsZVR5cGU7XG5cbiAgY29uc3QgbWFrZWlkID0gKCkgPT4ge1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgY29uc3QgcG9zc2libGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkgKz0gMSkgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNjIpKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfTtcblxuICBjb25zdCB1cGxvYWRFcnJvciA9IChlcnJvciA9ICcnKSA9PiB7XG4gICAgZGlzcGF0Y2goYmF0Y2hBY3Rpb25zKHtcbiAgICAgIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogUkVBRFksXG4gICAgICAgIHRodW1ibmFpbDogJycsXG4gICAgICAgIG5zZnc6IGZhbHNlXG4gICAgICB9XG4gICAgfSwgZG9FcnJvcihlcnJvcikpKTtcbiAgfTtcblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICBkYXRhOiB7IHVwbG9hZFRodW1ibmFpbFN0YXR1czogSU5fUFJPR1JFU1MgfVxuICB9KTtcblxuICBpZiAoZnNBZGFwdGVyICYmIGZzQWRhcHRlci5yZWFkRmlsZSAmJiBmaWxlUGF0aCkge1xuICAgIGZzQWRhcHRlci5yZWFkRmlsZShmaWxlUGF0aCwgJ2Jhc2U2NCcpLnRoZW4oYmFzZTY0SW1hZ2UgPT4ge1xuICAgICAgZmlsZUV4dCA9ICdwbmcnO1xuICAgICAgZmlsZU5hbWUgPSAndGh1bWJuYWlsLnBuZyc7XG4gICAgICBmaWxlVHlwZSA9ICdpbWFnZS9wbmcnO1xuXG4gICAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBuYW1lID0gbWFrZWlkKCk7XG4gICAgICBkYXRhLmFwcGVuZCgnbmFtZScsIG5hbWUpO1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCB7IHVyaTogJ2ZpbGU6Ly8nICsgZmlsZVBhdGgsIHR5cGU6IGZpbGVUeXBlLCBuYW1lOiBmaWxlTmFtZSB9KTtcblxuICAgICAgcmV0dXJuIGZldGNoKFNQRUVDSF9QVUJMSVNILCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhXG4gICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSkudGhlbihqc29uID0+IGpzb24uc3VjY2VzcyA/IGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogQ09NUExFVEUsXG4gICAgICAgICAgdGh1bWJuYWlsOiBgJHtqc29uLmRhdGEudXJsfS4ke2ZpbGVFeHR9YFxuICAgICAgICB9XG4gICAgICB9KSA6IHVwbG9hZEVycm9yKGpzb24ubWVzc2FnZSkpLmNhdGNoKGVyciA9PiB1cGxvYWRFcnJvcihlcnIubWVzc2FnZSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWxlUGF0aCAmJiBmcyAmJiBwYXRoKSB7XG4gICAgICB0aHVtYm5haWwgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgpO1xuICAgICAgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XG4gICAgICBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xuICAgICAgZmlsZVR5cGUgPSBgaW1hZ2UvJHtmaWxlRXh0LnNsaWNlKDEpfWA7XG4gICAgfSBlbHNlIGlmICh0aHVtYm5haWxCbG9iKSB7XG4gICAgICBmaWxlRXh0ID0gYC4ke3RodW1ibmFpbEJsb2IudHlwZSAmJiB0aHVtYm5haWxCbG9iLnR5cGUuc3BsaXQoJy8nKVsxXX1gO1xuICAgICAgZmlsZU5hbWUgPSB0aHVtYm5haWxCbG9iLm5hbWU7XG4gICAgICBmaWxlVHlwZSA9IHRodW1ibmFpbEJsb2IudHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IG5hbWUgPSBtYWtlaWQoKTtcbiAgICBjb25zdCBmaWxlID0gdGh1bWJuYWlsQmxvYiB8fCB0aHVtYm5haWwgJiYgbmV3IEZpbGUoW3RodW1ibmFpbF0sIGZpbGVOYW1lLCB7IHR5cGU6IGZpbGVUeXBlIH0pO1xuICAgIGRhdGEuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG5cbiAgICByZXR1cm4gZmV0Y2goU1BFRUNIX1BVQkxJU0gsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZGF0YVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKS50aGVuKGpzb24gPT4ganNvbi5zdWNjZXNzID8gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzOiBDT01QTEVURSxcbiAgICAgICAgdGh1bWJuYWlsOiBgJHtqc29uLmRhdGEudXJsfSR7ZmlsZUV4dH1gXG4gICAgICB9XG4gICAgfSkgOiB1cGxvYWRFcnJvcihqc29uLm1lc3NhZ2UpKS5jYXRjaChlcnIgPT4gdXBsb2FkRXJyb3IoZXJyLm1lc3NhZ2UpKTtcbiAgfVxufTtcblxuY29uc3QgZG9QcmVwYXJlRWRpdCA9IChjbGFpbSwgdXJpLCBmaWxlSW5mbywgZnMpID0+IGRpc3BhdGNoID0+IHtcbiAgY29uc3QgeyBuYW1lLCBhbW91bnQsIHZhbHVlID0ge30gfSA9IGNsYWltO1xuICBjb25zdCBjaGFubmVsTmFtZSA9IGNsYWltICYmIGNsYWltLnNpZ25pbmdfY2hhbm5lbCAmJiBjbGFpbS5zaWduaW5nX2NoYW5uZWwubmFtZSB8fCBudWxsO1xuICBjb25zdCB7XG4gICAgYXV0aG9yLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIC8vIHVzZSBzYW1lIHZhbHVlcyBhcyBkZWZhdWx0IHN0YXRlXG4gICAgLy8gZmVlIHdpbGwgYmUgdW5kZWZpbmVkIGZvciBmcmVlIGNvbnRlbnRcbiAgICBmZWUgPSB7XG4gICAgICBhbW91bnQ6ICcwJyxcbiAgICAgIGN1cnJlbmN5OiAnTEJDJ1xuICAgIH0sXG4gICAgbGFuZ3VhZ2VzLFxuICAgIGxpY2Vuc2UsXG4gICAgbGljZW5zZV91cmw6IGxpY2Vuc2VVcmwsXG4gICAgdGh1bWJuYWlsLFxuICAgIHRpdGxlLFxuICAgIHRhZ3NcbiAgfSA9IHZhbHVlO1xuXG4gIGNvbnN0IHB1Ymxpc2hEYXRhID0ge1xuICAgIG5hbWUsXG4gICAgYmlkOiBhbW91bnQsXG4gICAgY29udGVudElzRnJlZTogZmVlLmFtb3VudCA9PT0gJzAnLFxuICAgIGF1dGhvcixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBmZWUsXG4gICAgbGFuZ3VhZ2VzLFxuICAgIHRodW1ibmFpbDogdGh1bWJuYWlsID8gdGh1bWJuYWlsLnVybCA6IG51bGwsXG4gICAgdGl0bGUsXG4gICAgdXJpLFxuICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogdGh1bWJuYWlsID8gTUFOVUFMIDogdW5kZWZpbmVkLFxuICAgIGxpY2Vuc2VVcmwsXG4gICAgbnNmdzogaXNDbGFpbU5zZncoY2xhaW0pLFxuICAgIHRhZ3M6IHRhZ3MgPyB0YWdzLm1hcCh0YWcgPT4gKHsgbmFtZTogdGFnIH0pKSA6IFtdXG4gIH07XG5cbiAgLy8gTWFrZSBzdXJlIGN1c3RvbSBsaWNlbnNlcyBhcmUgbWFwcGVkIHByb3Blcmx5XG4gIC8vIElmIHRoZSBsaWNlbnNlIGlzbid0IG9uZSBvZiB0aGUgc3RhbmRhcmQgbGljZW5zZXMsIG1hcCB0aGUgY3VzdG9tIGxpY2Vuc2UgYW5kIGRlc2NyaXB0aW9uL3VybFxuICBpZiAoIUNDX0xJQ0VOU0VTLnNvbWUoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IGxpY2Vuc2UpKSB7XG4gICAgaWYgKCFsaWNlbnNlIHx8IGxpY2Vuc2UgPT09IE5PTkUgfHwgbGljZW5zZSA9PT0gUFVCTElDX0RPTUFJTikge1xuICAgICAgcHVibGlzaERhdGEubGljZW5zZVR5cGUgPSBsaWNlbnNlO1xuICAgIH0gZWxzZSBpZiAobGljZW5zZSAmJiAhbGljZW5zZVVybCAmJiBsaWNlbnNlICE9PSBOT05FKSB7XG4gICAgICBwdWJsaXNoRGF0YS5saWNlbnNlVHlwZSA9IENPUFlSSUdIVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHVibGlzaERhdGEubGljZW5zZVR5cGUgPSBPVEhFUjtcbiAgICB9XG5cbiAgICBwdWJsaXNoRGF0YS5vdGhlckxpY2Vuc2VEZXNjcmlwdGlvbiA9IGxpY2Vuc2U7XG4gIH0gZWxzZSB7XG4gICAgcHVibGlzaERhdGEubGljZW5zZVR5cGUgPSBsaWNlbnNlO1xuICB9XG4gIGlmIChjaGFubmVsTmFtZSkge1xuICAgIHB1Ymxpc2hEYXRhWydjaGFubmVsJ10gPSBjaGFubmVsTmFtZTtcbiAgfVxuXG4gIGRpc3BhdGNoKHsgdHlwZTogRE9fUFJFUEFSRV9FRElULCBkYXRhOiBwdWJsaXNoRGF0YSB9KTtcbn07XG5cbmNvbnN0IGRvUHVibGlzaCA9IChzdWNjZXNzLCBmYWlsKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGRpc3BhdGNoKHsgdHlwZTogUFVCTElTSF9TVEFSVCB9KTtcblxuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IG15Q2xhaW1Gb3JVcmkgPSBzZWxlY3RNeUNsYWltRm9yVXJpKHN0YXRlKTtcbiAgY29uc3QgbXlDaGFubmVscyA9IHNlbGVjdE15Q2hhbm5lbENsYWltcyhzdGF0ZSk7XG4gIGNvbnN0IG15Q2xhaW1zID0gc2VsZWN0TXlDbGFpbXNXaXRob3V0Q2hhbm5lbHMoc3RhdGUpO1xuICAvLyBnZXQgcmVkdXggcHVibGlzaCBmb3JtXG4gIGNvbnN0IHB1Ymxpc2hEYXRhID0gc2VsZWN0UHVibGlzaEZvcm1WYWx1ZXMoc3RhdGUpO1xuXG4gIC8vIGRlc3RydWN0dXJlIHRoZSBkYXRhIHZhbHVlc1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBiaWQsXG4gICAgZmlsZVBhdGgsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbGFuZ3VhZ2UsXG4gICAgbGljZW5zZSxcbiAgICBsaWNlbnNlVXJsLFxuICAgIGxpY2Vuc2VUeXBlLFxuICAgIG90aGVyTGljZW5zZURlc2NyaXB0aW9uLFxuICAgIHRodW1ibmFpbCxcbiAgICBjaGFubmVsLFxuICAgIHRpdGxlLFxuICAgIGNvbnRlbnRJc0ZyZWUsXG4gICAgZmVlLFxuICAgIHVyaSxcbiAgICB0YWdzLFxuICAgIGxvY2F0aW9ucyxcbiAgICBvcHRpbWl6ZVxuICB9ID0gcHVibGlzaERhdGE7XG4gIC8vIEhhbmRsZSBzY2VuYXJpbyB3aGVyZSB3ZSBoYXZlIGEgY2xhaW0gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIGNoYW5uZWwgd2UgYXJlIHB1Ymxpc2hpbmcgd2l0aC5cbiAgY29uc3QgbXlDbGFpbUZvclVyaUVkaXRpbmcgPSBteUNsYWltRm9yVXJpICYmIG15Q2xhaW1Gb3JVcmkubmFtZSA9PT0gbmFtZSA/IG15Q2xhaW1Gb3JVcmkgOiBudWxsO1xuXG4gIGxldCBwdWJsaXNoaW5nTGljZW5zZTtcbiAgc3dpdGNoIChsaWNlbnNlVHlwZSkge1xuICAgIGNhc2UgQ09QWVJJR0hUOlxuICAgIGNhc2UgT1RIRVI6XG4gICAgICBwdWJsaXNoaW5nTGljZW5zZSA9IG90aGVyTGljZW5zZURlc2NyaXB0aW9uO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHB1Ymxpc2hpbmdMaWNlbnNlID0gbGljZW5zZVR5cGU7XG4gIH1cblxuICAvLyBnZXQgdGhlIGNsYWltIGlkIGZyb20gdGhlIGNoYW5uZWwgbmFtZSwgd2Ugd2lsbCB1c2UgdGhhdCBpbnN0ZWFkXG4gIGNvbnN0IG5hbWVkQ2hhbm5lbENsYWltID0gbXlDaGFubmVscyA/IG15Q2hhbm5lbHMuZmluZChteUNoYW5uZWwgPT4gbXlDaGFubmVsLm5hbWUgPT09IGNoYW5uZWwpIDogbnVsbDtcbiAgY29uc3QgY2hhbm5lbElkID0gbmFtZWRDaGFubmVsQ2xhaW0gPyBuYW1lZENoYW5uZWxDbGFpbS5jbGFpbV9pZCA6ICcnO1xuXG4gIGNvbnN0IHB1Ymxpc2hQYXlsb2FkID0ge1xuICAgIG5hbWUsXG4gICAgdGl0bGUsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbG9jYXRpb25zOiBbXSxcbiAgICBiaWQ6IGNyZWRpdHNUb1N0cmluZyhiaWQpLFxuICAgIGxhbmd1YWdlczogW2xhbmd1YWdlXSxcbiAgICB0YWdzOiB0YWdzICYmIHRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSksXG4gICAgdGh1bWJuYWlsX3VybDogdGh1bWJuYWlsLFxuICAgIGJsb2NraW5nOiB0cnVlXG4gIH07XG4gIC8vIFRlbXBvcmFyeSBzb2x1dGlvbiB0byBrZWVwIHRoZSBzYW1lIHB1Ymxpc2ggZmxvdyB3aXRoIHRoZSBuZXcgdGFncyBhcGlcbiAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIGFsbG93IHVzZXJzIHRvIGVudGVyIHRoZWlyIG93biB0YWdzIG9uIHB1Ymxpc2hcbiAgLy8gYG5zZndgIHdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZFxuXG4gIGlmIChwdWJsaXNoaW5nTGljZW5zZSkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLmxpY2Vuc2UgPSBwdWJsaXNoaW5nTGljZW5zZTtcbiAgfVxuXG4gIGlmIChsaWNlbnNlVXJsKSB7XG4gICAgcHVibGlzaFBheWxvYWQubGljZW5zZV91cmwgPSBsaWNlbnNlVXJsO1xuICB9XG5cbiAgaWYgKHRodW1ibmFpbCkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLnRodW1ibmFpbF91cmwgPSB0aHVtYm5haWw7XG4gIH1cblxuICAvLyBTZXQgcmVsZWFzZSB0aW1lIHRvIGN1cnJldCBkYXRlLiBPbiBlZGl0cywga2VlcCBvcmlnaW5hbCByZWxlYXNlL3RyYW5zYWN0aW9uIHRpbWUgYXMgcmVsZWFzZV90aW1lXG4gIGlmIChteUNsYWltRm9yVXJpRWRpdGluZyAmJiBteUNsYWltRm9yVXJpRWRpdGluZy52YWx1ZS5yZWxlYXNlX3RpbWUpIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5yZWxlYXNlX3RpbWUgPSBOdW1iZXIobXlDbGFpbUZvclVyaS52YWx1ZS5yZWxlYXNlX3RpbWUpO1xuICB9IGVsc2UgaWYgKG15Q2xhaW1Gb3JVcmlFZGl0aW5nICYmIG15Q2xhaW1Gb3JVcmlFZGl0aW5nLnRpbWVzdGFtcCkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLnJlbGVhc2VfdGltZSA9IE51bWJlcihteUNsYWltRm9yVXJpRWRpdGluZy50aW1lc3RhbXApO1xuICB9IGVsc2Uge1xuICAgIHB1Ymxpc2hQYXlsb2FkLnJlbGVhc2VfdGltZSA9IE51bWJlcihNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSk7XG4gIH1cblxuICBpZiAoY2hhbm5lbElkKSB7XG4gICAgcHVibGlzaFBheWxvYWQuY2hhbm5lbF9pZCA9IGNoYW5uZWxJZDtcbiAgfVxuXG4gIGlmIChteUNsYWltRm9yVXJpRWRpdGluZyAmJiBteUNsYWltRm9yVXJpRWRpdGluZy52YWx1ZSAmJiBteUNsYWltRm9yVXJpRWRpdGluZy52YWx1ZS5sb2NhdGlvbnMpIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5sb2NhdGlvbnMgPSBteUNsYWltRm9yVXJpRWRpdGluZy52YWx1ZS5sb2NhdGlvbnM7XG4gIH1cblxuICBpZiAoIWNvbnRlbnRJc0ZyZWUgJiYgZmVlICYmIGZlZS5jdXJyZW5jeSAmJiBOdW1iZXIoZmVlLmFtb3VudCkgPiAwKSB7XG4gICAgcHVibGlzaFBheWxvYWQuZmVlX2N1cnJlbmN5ID0gZmVlLmN1cnJlbmN5O1xuICAgIHB1Ymxpc2hQYXlsb2FkLmZlZV9hbW91bnQgPSBjcmVkaXRzVG9TdHJpbmcoZmVlLmFtb3VudCk7XG4gIH1cblxuICBpZiAob3B0aW1pemUpIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5vcHRpbWl6ZV9maWxlID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIE9ubHkgcGFzcyBmaWxlIG9uIG5ldyB1cGxvYWRzLCBub3QgbWV0YWRhdGEgb25seSBlZGl0cy5cbiAgLy8gVGhlIHNkayB3aWxsIGZpZ3VyZSBpdCBvdXRcbiAgaWYgKGZpbGVQYXRoKSBwdWJsaXNoUGF5bG9hZC5maWxlX3BhdGggPSBmaWxlUGF0aDtcblxuICByZXR1cm4gbGJyeVByb3h5LnB1Ymxpc2gocHVibGlzaFBheWxvYWQpLnRoZW4oc3VjY2VzcywgZmFpbCk7XG59O1xuXG4vLyBDYWxscyBjbGFpbV9saXN0X21pbmUgdW50aWwgYW55IHBlbmRpbmcgcHVibGlzaGVzIGFyZSBjb25maXJtZWRcbmNvbnN0IGRvQ2hlY2tQZW5kaW5nUHVibGlzaGVzID0gb25Db25maXJtZWQgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IHBlbmRpbmdCeUlkID0gc2VsZWN0UGVuZGluZ0J5SWQoc3RhdGUpO1xuXG4gIGlmICghT2JqZWN0LmtleXMocGVuZGluZ0J5SWQpLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwdWJsaXNoQ2hlY2tJbnRlcnZhbDtcblxuICBjb25zdCBjaGVja0ZpbGVMaXN0ID0gKCkgPT4ge1xuICAgIGxicnlQcm94eS5zdHJlYW1fbGlzdCh7IHBhZ2U6IDEsIHBhZ2Vfc2l6ZTogMTAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgY2xhaW1zID0gcmVzdWx0Lml0ZW1zO1xuXG4gICAgICBjbGFpbXMuZm9yRWFjaChjbGFpbSA9PiB7XG4gICAgICAgIC8vIElmIGl0J3MgY29uZmlybWVkLCBjaGVjayBpZiBpdCB3YXMgcGVuZGluZyBwcmV2aW91c2x5XG4gICAgICAgIGlmIChjbGFpbS5jb25maXJtYXRpb25zID4gMCAmJiBwZW5kaW5nQnlJZFtjbGFpbS5jbGFpbV9pZF0pIHtcbiAgICAgICAgICBkZWxldGUgcGVuZGluZ0J5SWRbY2xhaW0uY2xhaW1faWRdO1xuICAgICAgICAgIGlmIChvbkNvbmZpcm1lZCkge1xuICAgICAgICAgICAgb25Db25maXJtZWQoY2xhaW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltc1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhwZW5kaW5nQnlJZCkubGVuZ3RoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocHVibGlzaENoZWNrSW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHB1Ymxpc2hDaGVja0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNoZWNrRmlsZUxpc3QoKTtcbiAgfSwgMzAwMDApO1xufTtcblxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4vLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuZnVuY3Rpb24gZGVib3VjZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgbGV0IHRpbWVvdXQ7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcztcbiAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzO1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgIGlmIChjYWxsTm93KSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9O1xufVxuXG4vLyAgICAgIFxuZnVuY3Rpb24gaGFuZGxlRmV0Y2hSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgPyBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UuanNvbigpKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KSk7XG59XG5cbnZhciBfZXh0ZW5kcyQ4ID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgREVCT1VOQ0VEX1NFQVJDSF9TVUdHRVNUSU9OX01TID0gMzAwO1xuXG4vLyBXZSBjYW4ndCB1c2UgZW52J3MgYmVjYXVzZSB0aGV5IGFyZW4ndCBwYXNzZWQgaW50byBub2RlX21vZHVsZXNcbmxldCBDT05ORUNUSU9OX1NUUklORyA9ICdodHRwczovL2xpZ2h0aG91c2UubGJyeS5jb20vJztcblxuY29uc3Qgc2V0U2VhcmNoQXBpID0gZW5kcG9pbnQgPT4ge1xuICBDT05ORUNUSU9OX1NUUklORyA9IGVuZHBvaW50LnJlcGxhY2UoL1xcLyokLywgJy8nKTsgLy8gZXhhY3RseSBvbmUgc2xhc2ggYXQgdGhlIGVuZDtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFN1Z2dlc3Rpb25zID0gdmFsdWUgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRyaW0oKTtcblxuICAvLyBzdHJpcCBvdXQgYW55IGJhc2ljIHN0dWZmIGZvciBtb3JlIGFjY3VyYXRlIHNlYXJjaCByZXN1bHRzXG4gIGxldCBzZWFyY2hWYWx1ZSA9IHF1ZXJ5LnJlcGxhY2UoL2xicnk6XFwvXFwvL2csICcnKS5yZXBsYWNlKC8tL2csICcgJyk7XG4gIGlmIChzZWFyY2hWYWx1ZS5pbmNsdWRlcygnIycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgbW9yZSByb2J1c3QsIGJ1dCBJIHRoaW5rIGl0J3MgZmluZSBmb3Igbm93XG4gICAgLy8gUmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgIyB0byBnZXQgcmlkIG9mIHRoZSBjbGFpbSBpZFxuICAgIHNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUuc3Vic3RyaW5nKDAsIHNlYXJjaFZhbHVlLmluZGV4T2YoJyMnKSk7XG4gIH1cblxuICBjb25zdCBzdWdnZXN0aW9ucyA9IHNlbGVjdFN1Z2dlc3Rpb25zKGdldFN0YXRlKCkpO1xuICBpZiAoc3VnZ2VzdGlvbnNbc2VhcmNoVmFsdWVdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmV0Y2goYCR7Q09OTkVDVElPTl9TVFJJTkd9YXV0b2NvbXBsZXRlP3M9JHtzZWFyY2hWYWx1ZX1gKS50aGVuKGhhbmRsZUZldGNoUmVzcG9uc2UpLnRoZW4oYXBpU3VnZ2VzdGlvbnMgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVQREFURV9TRUFSQ0hfU1VHR0VTVElPTlMsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHF1ZXJ5OiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGFwaVN1Z2dlc3Rpb25zXG4gICAgICB9XG4gICAgfSk7XG4gIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyBJZiB0aGUgZmV0Y2ggZmFpbHMsIGRvIG5vdGhpbmdcbiAgICAvLyBCYXNpYyBzZWFyY2ggc3VnZ2VzdGlvbnMgYXJlIGFscmVhZHkgcG9wdWxhdGVkIGF0IHRoaXMgcG9pbnRcbiAgfSk7XG59O1xuXG5jb25zdCB0aHJvdHRsZWRTZWFyY2hTdWdnZXN0aW9ucyA9IGRlYm91Y2UoKGRpc3BhdGNoLCBxdWVyeSkgPT4ge1xuICBkaXNwYXRjaChnZXRTZWFyY2hTdWdnZXN0aW9ucyhxdWVyeSkpO1xufSwgREVCT1VOQ0VEX1NFQVJDSF9TVUdHRVNUSU9OX01TKTtcblxuY29uc3QgZG9VcGRhdGVTZWFyY2hRdWVyeSA9IChxdWVyeSwgc2hvdWxkU2tpcFN1Z2dlc3Rpb25zKSA9PiBkaXNwYXRjaCA9PiB7XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBVUERBVEVfU0VBUkNIX1FVRVJZLFxuICAgIGRhdGE6IHsgcXVlcnkgfVxuICB9KTtcblxuICAvLyBEb24ndCBmZXRjaCBuZXcgc3VnZ2VzdGlvbnMgaWYgdGhlIHVzZXIganVzdCBhZGRlZCBhIHNwYWNlXG4gIGlmICghcXVlcnkuZW5kc1dpdGgoJyAnKSB8fCAhc2hvdWxkU2tpcFN1Z2dlc3Rpb25zKSB7XG4gICAgdGhyb3R0bGVkU2VhcmNoU3VnZ2VzdGlvbnMoZGlzcGF0Y2gsIHF1ZXJ5KTtcbiAgfVxufTtcblxuY29uc3QgZG9TZWFyY2ggPSAocmF3UXVlcnksIHNlYXJjaE9wdGlvbnMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3QgcXVlcnkgPSByYXdRdWVyeS5yZXBsYWNlKC9ebGJyeTpcXC9cXC8vaSwgJycpLnJlcGxhY2UoL1xcLy8sICcgJyk7XG4gIGNvbnN0IHJlc29sdmVSZXN1bHRzID0gc2VhcmNoT3B0aW9ucyAmJiBzZWFyY2hPcHRpb25zLnJlc29sdmVSZXN1bHRzO1xuICBjb25zdCBpc0JhY2tncm91bmRTZWFyY2ggPSBzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMuaXNCYWNrZ3JvdW5kU2VhcmNoIHx8IGZhbHNlO1xuXG4gIGlmICghcXVlcnkpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBTRUFSQ0hfRkFJTFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICBsZXQgcXVlcnlXaXRoT3B0aW9ucyA9IG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zKHF1ZXJ5LCBzZWFyY2hPcHRpb25zKShzdGF0ZSk7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciBzb21ldGhpbmcsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgY29uc3QgdXJpc0ZvclF1ZXJ5ID0gbWFrZVNlbGVjdFNlYXJjaFVyaXMocXVlcnlXaXRoT3B0aW9ucykoc3RhdGUpO1xuICBpZiAodXJpc0ZvclF1ZXJ5ICYmICEhdXJpc0ZvclF1ZXJ5Lmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBTRUFSQ0hfU1RBUlRcbiAgfSk7XG5cbiAgLy8gSWYgdGhlIHVzZXIgaXMgb24gdGhlIGZpbGUgcGFnZSB3aXRoIGEgcHJlLXBvcHVsYXRlZCB1cmkgYW5kIHRoZXkgc2VsZWN0XG4gIC8vIHRoZSBzZWFyY2ggb3B0aW9uIHdpdGhvdXQgdHlwaW5nIGFueXRoaW5nLCBzZWFyY2hRdWVyeSB3aWxsIGJlIGVtcHR5XG4gIC8vIFdlIG5lZWQgdG8gcG9wdWxhdGUgaXQgc28gdGhlIGlucHV0IGlzIGZpbGxlZCBvbiB0aGUgc2VhcmNoIHBhZ2VcbiAgLy8gaXNCYWNrZ3JvdW5kU2VhcmNoIG1lYW5zIHRoZSBzZWFyY2ggaXMgaGFwcGVuaW5nIGluIHRoZSBiYWNrZ3JvdW5kLCBkb24ndCB1cGRhdGUgdGhlIHNlYXJjaCBxdWVyeVxuICBpZiAoIXN0YXRlLnNlYXJjaC5zZWFyY2hRdWVyeSAmJiAhaXNCYWNrZ3JvdW5kU2VhcmNoKSB7XG4gICAgZGlzcGF0Y2goZG9VcGRhdGVTZWFyY2hRdWVyeShxdWVyeSkpO1xuICB9XG5cbiAgZmV0Y2goYCR7Q09OTkVDVElPTl9TVFJJTkd9c2VhcmNoPyR7cXVlcnlXaXRoT3B0aW9uc31gKS50aGVuKGhhbmRsZUZldGNoUmVzcG9uc2UpLnRoZW4oZGF0YSA9PiB7XG4gICAgY29uc3QgdXJpcyA9IFtdO1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbXTtcblxuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGNsYWltSWQgfSA9IHJlc3VsdDtcbiAgICAgICAgY29uc3QgdXJsT2JqID0ge307XG5cbiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgdXJsT2JqLmNoYW5uZWxOYW1lID0gbmFtZTtcbiAgICAgICAgICB1cmxPYmouY2hhbm5lbENsYWltSWQgPSBjbGFpbUlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybE9iai5zdHJlYW1OYW1lID0gbmFtZTtcbiAgICAgICAgICB1cmxPYmouc3RyZWFtQ2xhaW1JZCA9IGNsYWltSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVSSSh1cmxPYmopO1xuICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdHMpIHtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goZG9SZXNvbHZlVXJpKHVybCkpO1xuICAgICAgICB9XG4gICAgICAgIHVyaXMucHVzaCh1cmwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IFNFQVJDSF9TVUNDRVNTLFxuICAgICAgZGF0YToge1xuICAgICAgICBxdWVyeTogcXVlcnlXaXRoT3B0aW9ucyxcbiAgICAgICAgdXJpc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRpc3BhdGNoKGJhdGNoQWN0aW9ucyguLi5hY3Rpb25zKSk7XG4gIH0pLmNhdGNoKGUgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFQVJDSF9GQUlMXG4gICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgZG9SZXNvbHZlZFNlYXJjaCA9IChyYXdRdWVyeSwgc2l6ZSwgLy8gb25seSBwYXNzIGluIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgdXNlcnMgc2V0dGluZyAoZXg6IHJlbGF0ZWQgY29udGVudClcbmZyb20sIGlzQmFja2dyb3VuZFNlYXJjaCA9IGZhbHNlLCBvcHRpb25zID0ge30sIG5zZncpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3QgcXVlcnkgPSByYXdRdWVyeS5yZXBsYWNlKC9ebGJyeTpcXC9cXC8vaSwgJycpLnJlcGxhY2UoL1xcLy8sICcgJyk7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFJFU09MVkVEX1NFQVJDSF9GQUlMXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uc1dpdGhGcm9tID0gX2V4dGVuZHMkOCh7fSwgc2l6ZSA/IHsgc2l6ZSB9IDoge30sIGZyb20gPyB7IGZyb20gfSA6IHt9LCB7XG4gICAgaXNCYWNrZ3JvdW5kU2VhcmNoXG4gIH0sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG9wdGlvbnNXaXRob3V0RnJvbSA9IF9leHRlbmRzJDgoe30sIHNpemUgPyB7IHNpemUgfSA6IHt9LCB7XG4gICAgaXNCYWNrZ3JvdW5kU2VhcmNoXG4gIH0sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICBsZXQgcXVlcnlXaXRoT3B0aW9ucyA9IG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zKHF1ZXJ5LCBvcHRpb25zV2l0aEZyb20pKHN0YXRlKTtcblxuICAvLyBtYWtlIGZyb20gbnVsbCBzbyB0aGF0IHdlIGNhbiBtYWludGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBxdWVyeSBmb3IgbXVsdGlwbGUgcGFnZXMgYW5kIHNpbXBseSBhcHBlbmQgdGhlIGZvdW5kIHJlc3VsdHNcbiAgbGV0IHF1ZXJ5V2l0aG91dEZyb20gPSBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucyhxdWVyeSwgb3B0aW9uc1dpdGhvdXRGcm9tKShzdGF0ZSk7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciBzb21ldGhpbmcsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgLy8gVE9ETzogVHdlYWsgdGhpcyBjaGVjayBmb3IgbXVsdGlwbGUgcGFnZSByZXN1bHRzXG4gIC8qIGNvbnN0IHJlc3VsdHNGb3JRdWVyeSA9IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHMocXVlcnlXaXRoT3B0aW9ucykoc3RhdGUpO1xuICBpZiAocmVzdWx0c0ZvclF1ZXJ5ICYmIHJlc3VsdHNGb3JRdWVyeS5sZW5ndGggJiYgcmVzdWx0c0ZvclF1ZXJ5Lmxlbmd0aCA+IChmcm9tICogc2l6ZSkpIHtcbiAgICByZXR1cm47XG4gIH0gKi9cblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogUkVTT0xWRURfU0VBUkNIX1NUQVJUXG4gIH0pO1xuXG4gIGlmICghc3RhdGUuc2VhcmNoLnNlYXJjaFF1ZXJ5ICYmICFpc0JhY2tncm91bmRTZWFyY2gpIHtcbiAgICBkaXNwYXRjaChkb1VwZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gIH1cblxuICBjb25zdCBmZXRjaFVybCA9IG5zZncgPyBgJHtDT05ORUNUSU9OX1NUUklOR31zZWFyY2g/cmVzb2x2ZT10cnVlJiR7cXVlcnlXaXRoT3B0aW9uc31gIDogYCR7Q09OTkVDVElPTl9TVFJJTkd9c2VhcmNoP3Jlc29sdmU9dHJ1ZSZuc2Z3PWZhbHNlJiR7cXVlcnlXaXRoT3B0aW9uc31gO1xuICBmZXRjaChmZXRjaFVybCkudGhlbihoYW5kbGVGZXRjaFJlc3BvbnNlKS50aGVuKGRhdGEgPT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFJFU09MVkVEX1NFQVJDSF9TVUNDRVNTLFxuICAgICAgZGF0YToge1xuICAgICAgICBxdWVyeTogcXVlcnlXaXRob3V0RnJvbSxcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgcGFnZVNpemU6IHNpemUsXG4gICAgICAgIGFwcGVuZDogcGFyc2VJbnQoZnJvbSwgMTApID4gcGFyc2VJbnQoc2l6ZSwgMTApIC0gMVxuICAgICAgfVxuICAgIH0pO1xuICB9KS5jYXRjaChlID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBSRVNPTFZFRF9TRUFSQ0hfRkFJTFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IGRvRm9jdXNTZWFyY2hJbnB1dCA9ICgpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogU0VBUkNIX0ZPQ1VTXG59KTtcblxuY29uc3QgZG9CbHVyU2VhcmNoSW5wdXQgPSAoKSA9PiBkaXNwYXRjaCA9PiBkaXNwYXRjaCh7XG4gIHR5cGU6IFNFQVJDSF9CTFVSXG59KTtcblxuY29uc3QgZG9VcGRhdGVTZWFyY2hPcHRpb25zID0gKG5ld09wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3Qgc2VhcmNoVmFsdWUgPSBzZWxlY3RTZWFyY2hWYWx1ZShzdGF0ZSk7XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFVQREFURV9TRUFSQ0hfT1BUSU9OUyxcbiAgICBkYXRhOiBuZXdPcHRpb25zXG4gIH0pO1xuXG4gIGlmIChzZWFyY2hWYWx1ZSkge1xuICAgIC8vIEFmdGVyIHVwZGF0aW5nLCBwZXJmb3JtIGEgc2VhcmNoIHdpdGggdGhlIG5ldyBvcHRpb25zXG4gICAgZGlzcGF0Y2goZG9TZWFyY2goc2VhcmNoVmFsdWUsIGFkZGl0aW9uYWxPcHRpb25zKSk7XG4gIH1cbn07XG5cbi8vICAgICAgXG5cbmZ1bmN0aW9uIHNhdmVQb3NpdGlvbihjbGFpbUlkLCBvdXRwb2ludCwgcG9zaXRpb24pIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBTRVRfQ09OVEVOVF9QT1NJVElPTixcbiAgICAgIGRhdGE6IHsgY2xhaW1JZCwgb3V0cG9pbnQsIHBvc2l0aW9uIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuLy8gICAgICBcblxuY29uc3QgZG9Ub2dnbGVUYWdGb2xsb3cgPSBuYW1lID0+ICh7XG4gIHR5cGU6IFRPR0dMRV9UQUdfRk9MTE9XLFxuICBkYXRhOiB7XG4gICAgbmFtZVxuICB9XG59KTtcblxuY29uc3QgZG9BZGRUYWcgPSBuYW1lID0+ICh7XG4gIHR5cGU6IFRBR19BREQsXG4gIGRhdGE6IHtcbiAgICBuYW1lXG4gIH1cbn0pO1xuXG5jb25zdCBkb0RlbGV0ZVRhZyA9IG5hbWUgPT4gKHtcbiAgdHlwZTogVEFHX0RFTEVURSxcbiAgZGF0YToge1xuICAgIG5hbWVcbiAgfVxufSk7XG5cbi8vICAgICAgXG5cbmZ1bmN0aW9uIGRvQ29tbWVudExpc3QodXJpLCBwYWdlID0gMSwgcGFnZVNpemUgPSA5OTk5OSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBjbGFpbSA9IHNlbGVjdENsYWltc0J5VXJpKHN0YXRlKVt1cmldO1xuICAgIGNvbnN0IGNsYWltSWQgPSBjbGFpbSA/IGNsYWltLmNsYWltX2lkIDogbnVsbDtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENPTU1FTlRfTElTVF9TVEFSVEVEXG4gICAgfSk7XG4gICAgbGJyeVByb3h5LmNvbW1lbnRfbGlzdCh7XG4gICAgICBjbGFpbV9pZDogY2xhaW1JZCxcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlX3NpemU6IHBhZ2VTaXplXG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgeyBpdGVtczogY29tbWVudHMgfSA9IHJlc3VsdDtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ09NTUVOVF9MSVNUX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbW1lbnRzLFxuICAgICAgICAgIGNsYWltSWQ6IGNsYWltSWQsXG4gICAgICAgICAgdXJpOiB1cmlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX0xJU1RfRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ29tbWVudENyZWF0ZShjb21tZW50ID0gJycsIGNsYWltX2lkID0gJycsIGNoYW5uZWwsIHBhcmVudF9pZCkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBDT01NRU5UX0NSRUFURV9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBteUNoYW5uZWxzID0gc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKTtcbiAgICBjb25zdCBuYW1lZENoYW5uZWxDbGFpbSA9IG15Q2hhbm5lbHMgJiYgbXlDaGFubmVscy5maW5kKG15Q2hhbm5lbCA9PiBteUNoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCk7XG4gICAgY29uc3QgY2hhbm5lbF9pZCA9IG5hbWVkQ2hhbm5lbENsYWltLmNsYWltX2lkO1xuXG4gICAgaWYgKGNoYW5uZWxfaWQgPT0gbnVsbCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX0NSRUFURV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnQ2hhbm5lbCBjYW5ub3QgYmUgYW5vbnltb3VzLCBwbGVhc2Ugc2VsZWN0IGEgY2hhbm5lbCBhbmQgdHJ5IGFnYWluLicsXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGJyeVByb3h5LmNvbW1lbnRfY3JlYXRlKHtcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnQsXG4gICAgICBjbGFpbV9pZDogY2xhaW1faWQsXG4gICAgICBjaGFubmVsX2lkOiBjaGFubmVsX2lkLFxuICAgICAgcGFyZW50X2lkOiBwYXJlbnRfaWRcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfQ1JFQVRFX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbW1lbnQ6IHJlc3VsdCxcbiAgICAgICAgICBjbGFpbUlkOiBjbGFpbV9pZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfQ1JFQVRFX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogZXJyb3JcbiAgICAgIH0pO1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gY3JlYXRlIGNvbW1lbnQsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0NvbW1lbnRIaWRlKGNvbW1lbnRfaWQpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBDT01NRU5UX0hJREVfU1RBUlRFRFxuICAgIH0pO1xuICAgIHJldHVybiBsYnJ5UHJveHkuY29tbWVudF9oaWRlKHtcbiAgICAgIGNvbW1lbnRfaWRzOiBbY29tbWVudF9pZF1cbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfSElERV9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX0hJREVfRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBoaWRlIHRoaXMgY29tbWVudCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ29tbWVudEFiYW5kb24oY29tbWVudF9pZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENPTU1FTlRfQUJBTkRPTl9TVEFSVEVEXG4gICAgfSk7XG4gICAgcmV0dXJuIGxicnlQcm94eS5jb21tZW50X2FiYW5kb24oe1xuICAgICAgY29tbWVudF9pZDogY29tbWVudF9pZFxuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIC8vIENvbW1lbnQgbWF5IG5vdCBiZSBkZWxldGVkIGlmIHRoZSBzaWduaW5nIGNoYW5uZWwgY2FuJ3QgYmUgc2lnbmVkLlxuICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgY2hhbm5lbCB3YXMgcmVjZW50bHkgY3JlYXRlZCBvciBhYmFuZG9uZWQuXG4gICAgICBpZiAocmVzdWx0LmFiYW5kb25lZCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQ09NTUVOVF9BQkFORE9OX0NPTVBMRVRFRCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjb21tZW50X2lkOiBjb21tZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBDT01NRU5UX0FCQU5ET05fRkFJTEVEXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgICBtZXNzYWdlOiAnWW91ciBjaGFubmVsIGlzIHN0aWxsIGJlaW5nIHNldHVwLCB0cnkgYWdhaW4gaW4gYSBmZXcgbW9tZW50cy4nLFxuICAgICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ09NTUVOVF9BQkFORE9OX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogZXJyb3JcbiAgICAgIH0pO1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gZGVsZXRlIHRoaXMgY29tbWVudCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ29tbWVudFVwZGF0ZShjb21tZW50X2lkLCBjb21tZW50KSB7XG4gIC8vIGlmIHRoZXkgcHJvdmlkZWQgYW4gZW1wdHkgc3RyaW5nLCB0aGV5IG11c3QgaGF2ZSB3YW50ZWQgdG8gYWJhbmRvblxuICBpZiAoY29tbWVudCA9PT0gJycpIHtcbiAgICByZXR1cm4gZG9Db21tZW50QWJhbmRvbihjb21tZW50X2lkKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX1VQREFURV9TVEFSVEVEXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsYnJ5UHJveHkuY29tbWVudF91cGRhdGUoe1xuICAgICAgICBjb21tZW50X2lkOiBjb21tZW50X2lkLFxuICAgICAgICBjb21tZW50OiBjb21tZW50XG4gICAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IENPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgY29tbWVudDogcmVzdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGhlIHJlc3VsdCB3aWxsIHJldHVybiBudWxsXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogQ09NTUVOVF9VUERBVEVfRkFJTEVEXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnWW91ciBjaGFubmVsIGlzIHN0aWxsIGJlaW5nIHNldHVwLCB0cnkgYWdhaW4gaW4gYSBmZXcgbW9tZW50cy4nLFxuICAgICAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogQ09NTUVOVF9VUERBVEVfRkFJTEVELFxuICAgICAgICAgIGRhdGE6IGVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIGVkaXQgdGhpcyBjb21tZW50LCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbi8vICAgICAgXG5cbmNvbnN0IGRvVG9nZ2xlQmxvY2tDaGFubmVsID0gdXJpID0+ICh7XG4gIHR5cGU6IFRPR0dMRV9CTE9DS19DSEFOTkVMLFxuICBkYXRhOiB7XG4gICAgdXJpXG4gIH1cbn0pO1xuXG52YXIgX2V4dGVuZHMkOSA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmNvbnN0IHJlZHVjZXJzID0ge307XG5jb25zdCBkZWZhdWx0U3RhdGUgPSB7XG4gIGJ5SWQ6IHt9LFxuICBjbGFpbXNCeVVyaToge30sXG4gIHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbDoge30sXG4gIGNoYW5uZWxDbGFpbUNvdW50czoge30sXG4gIGZldGNoaW5nQ2hhbm5lbENsYWltczoge30sXG4gIHJlc29sdmluZ1VyaXM6IFtdLFxuICAvLyBUaGlzIHNob3VsZCBub3QgYmUgYSBTZXRcbiAgLy8gU3RvcmluZyBzZXRzIGluIHJlZHVjZXJzIGNhbiBjYXVzZSBpc3N1ZXNcbiAgbXlDaGFubmVsQ2xhaW1zOiB1bmRlZmluZWQsXG4gIG15Q2xhaW1zOiB1bmRlZmluZWQsXG4gIGZldGNoaW5nTXlDaGFubmVsczogZmFsc2UsXG4gIGFiYW5kb25pbmdCeUlkOiB7fSxcbiAgcGVuZGluZ0J5SWQ6IHt9LFxuICBjbGFpbVNlYXJjaEVycm9yOiBmYWxzZSxcbiAgY2xhaW1TZWFyY2hCeVF1ZXJ5OiB7fSxcbiAgY2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkOiB7fSxcbiAgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnk6IHt9LFxuICB1cGRhdGVDaGFubmVsRXJyb3I6ICcnLFxuICB1cGRhdGluZ0NoYW5uZWw6IGZhbHNlLFxuICBjcmVhdGluZ0NoYW5uZWw6IGZhbHNlLFxuICBjcmVhdGVDaGFubmVsRXJyb3I6IHVuZGVmaW5lZCxcbiAgcGVuZGluZ0NoYW5uZWxJbXBvcnQ6IGZhbHNlLFxuICByZXBvc3RMb2FkaW5nOiBmYWxzZSxcbiAgcmVwb3N0RXJyb3I6IHVuZGVmaW5lZFxufTtcblxuZnVuY3Rpb24gaGFuZGxlQ2xhaW1BY3Rpb24oc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7XG4gICAgcmVzb2x2ZUluZm9cbiAgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBieVVyaSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltc0J5VXJpKTtcbiAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICBjb25zdCBjaGFubmVsQ2xhaW1Db3VudHMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jaGFubmVsQ2xhaW1Db3VudHMpO1xuICBsZXQgbmV3UmVzb2x2aW5nVXJscyA9IG5ldyBTZXQoc3RhdGUucmVzb2x2aW5nVXJpcyk7XG5cbiAgT2JqZWN0LmVudHJpZXMocmVzb2x2ZUluZm8pLmZvckVhY2goKFt1cmwsIHJlc29sdmVSZXNwb25zZV0pID0+IHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgY29uc3QgeyBjbGFpbXNJbkNoYW5uZWwsIHN0cmVhbSwgY2hhbm5lbCB9ID0gcmVzb2x2ZVJlc3BvbnNlO1xuICAgIGlmIChjbGFpbXNJbkNoYW5uZWwpIHtcbiAgICAgIGNoYW5uZWxDbGFpbUNvdW50c1t1cmxdID0gY2xhaW1zSW5DaGFubmVsO1xuICAgICAgY2hhbm5lbENsYWltQ291bnRzW2NoYW5uZWwuY2Fub25pY2FsX3VybF0gPSBjbGFpbXNJbkNoYW5uZWw7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbSkge1xuICAgICAgYnlJZFtzdHJlYW0uY2xhaW1faWRdID0gc3RyZWFtO1xuICAgICAgYnlVcmlbdXJsXSA9IHN0cmVhbS5jbGFpbV9pZDtcblxuICAgICAgLy8gSWYgdXJsIGlzbid0IGEgY2Fub25pY2FsX3VybCwgbWFrZSBzdXJlIHRoYXQgaXMgYWRkZWQgdG9vXG4gICAgICBieVVyaVtzdHJlYW0uY2Fub25pY2FsX3VybF0gPSBzdHJlYW0uY2xhaW1faWQ7XG5cbiAgICAgIC8vIEFsc28gYWRkIHRoZSBwZXJtYW5lbnRfdXJsIGhlcmUgdW50aWwgbGlnaHRob3VzZSByZXR1cm5zIGNhbm9uaWNhbF91cmwgZm9yIHNlYXJjaCByZXN1bHRzXG4gICAgICBieVVyaVtzdHJlYW0ucGVybWFuZW50X3VybF0gPSBzdHJlYW0uY2xhaW1faWQ7XG4gICAgICBuZXdSZXNvbHZpbmdVcmxzLmRlbGV0ZShzdHJlYW0uY2Fub25pY2FsX3VybCk7XG4gICAgICBuZXdSZXNvbHZpbmdVcmxzLmRlbGV0ZShzdHJlYW0ucGVybWFuZW50X3VybCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgIGJ5VXJpW3VybF0gPSBjaGFubmVsLmNsYWltX2lkO1xuICAgICAgfVxuXG4gICAgICBieUlkW2NoYW5uZWwuY2xhaW1faWRdID0gY2hhbm5lbDtcbiAgICAgIC8vIEFsc28gYWRkIHRoZSBwZXJtYW5lbnRfdXJsIGhlcmUgdW50aWwgbGlnaHRob3VzZSByZXR1cm5zIGNhbm9uaWNhbF91cmwgZm9yIHNlYXJjaCByZXN1bHRzXG4gICAgICBieVVyaVtjaGFubmVsLnBlcm1hbmVudF91cmxdID0gY2hhbm5lbC5jbGFpbV9pZDtcbiAgICAgIGJ5VXJpW2NoYW5uZWwuY2Fub25pY2FsX3VybF0gPSBjaGFubmVsLmNsYWltX2lkO1xuICAgICAgbmV3UmVzb2x2aW5nVXJscy5kZWxldGUoY2hhbm5lbC5jYW5vbmljYWxfdXJsKTtcbiAgICAgIG5ld1Jlc29sdmluZ1VybHMuZGVsZXRlKGNoYW5uZWwucGVybWFuZW50X3VybCk7XG4gICAgfVxuXG4gICAgbmV3UmVzb2x2aW5nVXJscy5kZWxldGUodXJsKTtcbiAgICBpZiAoIXN0cmVhbSAmJiAhY2hhbm5lbCkge1xuICAgICAgYnlVcmlbdXJsXSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBieUlkLFxuICAgIGNsYWltc0J5VXJpOiBieVVyaSxcbiAgICBjaGFubmVsQ2xhaW1Db3VudHMsXG4gICAgcmVzb2x2aW5nVXJpczogQXJyYXkuZnJvbShuZXdSZXNvbHZpbmdVcmxzKVxuICB9KTtcbn1cblxucmVkdWNlcnNbUkVTT0xWRV9VUklTX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmlzIH0gPSBhY3Rpb24uZGF0YTtcblxuICBjb25zdCBvbGRSZXNvbHZpbmcgPSBzdGF0ZS5yZXNvbHZpbmdVcmlzIHx8IFtdO1xuICBjb25zdCBuZXdSZXNvbHZpbmcgPSBvbGRSZXNvbHZpbmcuc2xpY2UoKTtcblxuICB1cmlzLmZvckVhY2godXJpID0+IHtcbiAgICBpZiAoIW5ld1Jlc29sdmluZy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgICBuZXdSZXNvbHZpbmcucHVzaCh1cmkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgcmVzb2x2aW5nVXJpczogbmV3UmVzb2x2aW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnNbUkVTT0xWRV9VUklTX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICByZXR1cm4gX2V4dGVuZHMkOSh7fSwgaGFuZGxlQ2xhaW1BY3Rpb24oc3RhdGUsIGFjdGlvbikpO1xufTtcblxucmVkdWNlcnNbRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaXNGZXRjaGluZ0NsYWltTGlzdE1pbmU6IHRydWVcbn0pO1xuXG5yZWR1Y2Vyc1tGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgY2xhaW1zIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICBjb25zdCBieVVyaSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltc0J5VXJpKTtcbiAgY29uc3QgcGVuZGluZ0J5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5wZW5kaW5nQnlJZCk7XG4gIGxldCBteUNsYWltSWRzID0gbmV3IFNldChzdGF0ZS5teUNsYWltcyk7XG5cbiAgY2xhaW1zLmZvckVhY2goY2xhaW0gPT4ge1xuICAgIGNvbnN0IHVyaSA9IGJ1aWxkVVJJKHsgc3RyZWFtTmFtZTogY2xhaW0ubmFtZSwgc3RyZWFtQ2xhaW1JZDogY2xhaW0uY2xhaW1faWQgfSk7XG4gICAgY29uc3QgeyBjbGFpbV9pZDogY2xhaW1JZCB9ID0gY2xhaW07XG4gICAgaWYgKGNsYWltLnR5cGUgJiYgY2xhaW0udHlwZS5tYXRjaCgvY2xhaW18dXBkYXRlLykpIHtcbiAgICAgIGlmIChjbGFpbS5jb25maXJtYXRpb25zIDwgMSkge1xuICAgICAgICBwZW5kaW5nQnlJZFtjbGFpbUlkXSA9IGNsYWltO1xuICAgICAgICBkZWxldGUgYnlJZFtjbGFpbUlkXTtcbiAgICAgICAgZGVsZXRlIGJ5VXJpW2NsYWltSWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnlJZFtjbGFpbUlkXSA9IGNsYWltO1xuICAgICAgICBieVVyaVt1cmldID0gY2xhaW1JZDtcbiAgICAgIH1cbiAgICAgIG15Q2xhaW1JZHMuYWRkKGNsYWltSWQpO1xuICAgICAgaWYgKHBlbmRpbmdCeUlkW2NsYWltSWRdICYmIGNsYWltLmNvbmZpcm1hdGlvbnMgPiAwKSB7XG4gICAgICAgIGRlbGV0ZSBwZW5kaW5nQnlJZFtjbGFpbUlkXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFJlbW92ZSBvbGQgcGVuZGluZyBwdWJsaXNoZXNcbiAgT2JqZWN0LnZhbHVlcyhwZW5kaW5nQnlJZClcbiAgLy8gJEZsb3dGaXhNZVxuICAuZmlsdGVyKHBlbmRpbmdDbGFpbSA9PiBieUlkW3BlbmRpbmdDbGFpbS5jbGFpbV9pZF0pLmZvckVhY2gocGVuZGluZ0NsYWltID0+IHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgZGVsZXRlIHBlbmRpbmdCeUlkW3BlbmRpbmdDbGFpbS5jbGFpbV9pZF07XG4gIH0pO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGlzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lOiBmYWxzZSxcbiAgICBteUNsYWltczogbXlDbGFpbUlkcyxcbiAgICBieUlkLFxuICAgIGNsYWltc0J5VXJpOiBieVVyaSxcbiAgICBwZW5kaW5nQnlJZFxuICB9KTtcbn07XG5cbnJlZHVjZXJzW0ZFVENIX0NIQU5ORUxfTElTVF9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7IGZldGNoaW5nTXlDaGFubmVsczogdHJ1ZSB9KTtcblxucmVkdWNlcnNbRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGNsYWltcyB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG15Q2xhaW1zID0gc3RhdGUubXlDbGFpbXMgfHwgW107XG4gIGxldCBteUNsYWltSWRzID0gbmV3IFNldChzdGF0ZS5teUNsYWltcyk7XG4gIGNvbnN0IHBlbmRpbmdCeUlkID0gT2JqZWN0LmFzc2lnbihzdGF0ZS5wZW5kaW5nQnlJZCk7XG4gIGxldCBteUNoYW5uZWxDbGFpbXM7XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgYnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbXNCeVVyaSk7XG4gIGNvbnN0IGNoYW5uZWxDbGFpbUNvdW50cyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNoYW5uZWxDbGFpbUNvdW50cyk7XG5cbiAgaWYgKCFjbGFpbXMubGVuZ3RoKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIG15Q2hhbm5lbENsYWltcyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbXlDaGFubmVsQ2xhaW1zID0gbmV3IFNldChzdGF0ZS5teUNoYW5uZWxDbGFpbXMpO1xuICAgIGNsYWltcy5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgIGNvbnN0IHsgY2xhaW1zX2luX2NoYW5uZWw6IGNsYWltc0luQ2hhbm5lbCB9ID0gY2xhaW0ubWV0YTtcbiAgICAgIGNvbnN0IHsgY2Fub25pY2FsX3VybDogY2Fub25pY2FsVXJsLCBwZXJtYW5lbnRfdXJsOiBwZXJtYW5lbnRVcmwsIGNsYWltX2lkOiBjbGFpbUlkIH0gPSBjbGFpbTtcblxuICAgICAgYnlVcmlbY2Fub25pY2FsVXJsXSA9IGNsYWltSWQ7XG4gICAgICBieVVyaVtwZXJtYW5lbnRVcmxdID0gY2xhaW1JZDtcbiAgICAgIGNoYW5uZWxDbGFpbUNvdW50c1tjYW5vbmljYWxVcmxdID0gY2xhaW1zSW5DaGFubmVsO1xuICAgICAgY2hhbm5lbENsYWltQ291bnRzW3Blcm1hbmVudFVybF0gPSBjbGFpbXNJbkNoYW5uZWw7XG5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIG15Q2hhbm5lbENsYWltcy5hZGQoY2xhaW1JZCk7XG4gICAgICBpZiAoIWJ5SWRbY2xhaW1JZF0pIHtcbiAgICAgICAgYnlJZFtjbGFpbUlkXSA9IGNsYWltO1xuICAgICAgfVxuXG4gICAgICBteUNsYWltSWRzLmFkZChjbGFpbUlkKTtcbiAgICAgIGlmIChwZW5kaW5nQnlJZFtjbGFpbUlkXSAmJiBjbGFpbS5jb25maXJtYXRpb25zID4gMCkge1xuICAgICAgICBkZWxldGUgcGVuZGluZ0J5SWRbY2xhaW1JZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChwZW5kaW5nQnlJZFtjbGFpbUlkXSAmJiBjbGFpbS5jb25maXJtYXRpb25zID4gMCkge1xuICAgICAgICBkZWxldGUgcGVuZGluZ0J5SWRbY2xhaW1JZF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBieUlkLFxuICAgIGNsYWltc0J5VXJpOiBieVVyaSxcbiAgICBjaGFubmVsQ2xhaW1Db3VudHMsXG4gICAgZmV0Y2hpbmdNeUNoYW5uZWxzOiBmYWxzZSxcbiAgICBteUNoYW5uZWxDbGFpbXMsXG4gICAgbXlDbGFpbXM6IG15Q2xhaW1JZHNcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgdXJpLCBwYWdlIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmdDaGFubmVsQ2xhaW1zKTtcblxuICBmZXRjaGluZ0NoYW5uZWxDbGFpbXNbdXJpXSA9IHBhZ2U7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zLFxuICAgIGN1cnJlbnRDaGFubmVsUGFnZTogcGFnZVxuICB9KTtcbn07XG5cbnJlZHVjZXJzW0ZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgdXJpLFxuICAgIGNsYWltcyxcbiAgICBjbGFpbXNJbkNoYW5uZWwsXG4gICAgcGFnZSxcbiAgICB0b3RhbFBhZ2VzXG4gIH0gPSBhY3Rpb24uZGF0YTtcblxuICAvLyBieUNoYW5uZWwga2VlcHMgY2xhaW1fc2VhcmNoIHJlbGV2YW50IHJlc3VsdHMgYnkgcGFnZS4gSWYgdGhlIHRvdGFsIGNoYW5nZXMsIGVyYXNlIGl0LlxuICBjb25zdCBjaGFubmVsQ2xhaW1Db3VudHMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jaGFubmVsQ2xhaW1Db3VudHMpO1xuXG4gIGNvbnN0IHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbCk7XG4gIC8vIGNoZWNrIGlmIGNvdW50IGhhcyBjaGFuZ2VkIC0gdGhhdCBtZWFucyBjYWNoZWQgcGFnaW5hdGlvbiB3aWxsIGJlIHdyb25nLCBzbyBjbGVhciBpdFxuICBjb25zdCBwcmV2aW91c0NvdW50ID0gcGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsW3VyaV0gJiYgcGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsW3VyaV1bJ2l0ZW1Db3VudCddO1xuICBjb25zdCBieUNoYW5uZWwgPSBjbGFpbXNJbkNoYW5uZWwgPT09IHByZXZpb3VzQ291bnQgPyBPYmplY3QuYXNzaWduKHt9LCBwYWdpbmF0ZWRDbGFpbXNCeUNoYW5uZWxbdXJpXSkgOiB7fTtcbiAgY29uc3QgYWxsQ2xhaW1JZHMgPSBuZXcgU2V0KGJ5Q2hhbm5lbC5hbGwpO1xuICBjb25zdCBjdXJyZW50UGFnZUNsYWltSWRzID0gW107XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmdDaGFubmVsQ2xhaW1zKTtcbiAgY29uc3QgY2xhaW1zQnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbXNCeVVyaSk7XG5cbiAgaWYgKGNsYWltcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xhaW1zLmZvckVhY2goY2xhaW0gPT4ge1xuICAgICAgYWxsQ2xhaW1JZHMuYWRkKGNsYWltLmNsYWltX2lkKTtcbiAgICAgIGN1cnJlbnRQYWdlQ2xhaW1JZHMucHVzaChjbGFpbS5jbGFpbV9pZCk7XG4gICAgICBieUlkW2NsYWltLmNsYWltX2lkXSA9IGNsYWltO1xuICAgICAgY2xhaW1zQnlVcmlbY2xhaW0uY2Fub25pY2FsX3VybF0gPSBjbGFpbS5jbGFpbV9pZDtcbiAgICB9KTtcbiAgfVxuXG4gIGJ5Q2hhbm5lbC5hbGwgPSBhbGxDbGFpbUlkcztcbiAgYnlDaGFubmVsLnBhZ2VDb3VudCA9IHRvdGFsUGFnZXM7XG4gIGJ5Q2hhbm5lbC5pdGVtQ291bnQgPSBjbGFpbXNJbkNoYW5uZWw7XG4gIGJ5Q2hhbm5lbFtwYWdlXSA9IGN1cnJlbnRQYWdlQ2xhaW1JZHM7XG4gIHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbFt1cmldID0gYnlDaGFubmVsO1xuICBkZWxldGUgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zW3VyaV07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgcGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsLFxuICAgIGJ5SWQsXG4gICAgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zLFxuICAgIGNsYWltc0J5VXJpLFxuICAgIGNoYW5uZWxDbGFpbUNvdW50cyxcbiAgICBjdXJyZW50Q2hhbm5lbFBhZ2U6IHBhZ2VcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQkFORE9OX0NMQUlNX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjbGFpbUlkIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgYWJhbmRvbmluZ0J5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hYmFuZG9uaW5nQnlJZCk7XG5cbiAgYWJhbmRvbmluZ0J5SWRbY2xhaW1JZF0gPSB0cnVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGFiYW5kb25pbmdCeUlkXG4gIH0pO1xufTtcblxucmVkdWNlcnNbQUJBTkRPTl9DTEFJTV9TVUNDRUVERURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjbGFpbUlkIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICBjb25zdCBuZXdNeUNsYWltcyA9IHN0YXRlLm15Q2xhaW1zID8gc3RhdGUubXlDbGFpbXMuc2xpY2UoKSA6IFtdO1xuICBjb25zdCBjbGFpbXNCeVVyaSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltc0J5VXJpKTtcblxuICBPYmplY3Qua2V5cyhjbGFpbXNCeVVyaSkuZm9yRWFjaCh1cmkgPT4ge1xuICAgIGlmIChjbGFpbXNCeVVyaVt1cmldID09PSBjbGFpbUlkKSB7XG4gICAgICBkZWxldGUgY2xhaW1zQnlVcmlbdXJpXTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBteUNsYWltcyA9IG5ld015Q2xhaW1zLmZpbHRlcihpID0+IGkuY2xhaW1faWQgJiYgaS5jbGFpbV9pZCAhPT0gY2xhaW1JZCk7XG4gIGRlbGV0ZSBieUlkW2NsYWltSWRdO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIG15Q2xhaW1zLFxuICAgIGJ5SWQsXG4gICAgY2xhaW1zQnlVcmlcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEXSA9IHN0YXRlID0+IF9leHRlbmRzJDkoe30sIHN0YXRlLCB7XG4gIGNyZWF0aW5nQ2hhbm5lbDogdHJ1ZSxcbiAgY3JlYXRlQ2hhbm5lbEVycm9yOiBudWxsXG59KTtcblxucmVkdWNlcnNbQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGNoYW5uZWxDbGFpbSA9IGFjdGlvbi5kYXRhLmNoYW5uZWxDbGFpbTtcbiAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICBjb25zdCBwZW5kaW5nQnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnBlbmRpbmdCeUlkKTtcbiAgY29uc3QgbXlDaGFubmVsQ2xhaW1zID0gbmV3IFNldChzdGF0ZS5teUNoYW5uZWxDbGFpbXMpO1xuXG4gIGJ5SWRbY2hhbm5lbENsYWltLmNsYWltX2lkXSA9IGNoYW5uZWxDbGFpbTtcbiAgcGVuZGluZ0J5SWRbY2hhbm5lbENsYWltLmNsYWltX2lkXSA9IGNoYW5uZWxDbGFpbTtcbiAgbXlDaGFubmVsQ2xhaW1zLmFkZChjaGFubmVsQ2xhaW0uY2xhaW1faWQpO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGJ5SWQsXG4gICAgcGVuZGluZ0J5SWQsXG4gICAgbXlDaGFubmVsQ2xhaW1zLFxuICAgIGNyZWF0aW5nQ2hhbm5lbDogZmFsc2VcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tDUkVBVEVfQ0hBTk5FTF9GQUlMRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgY3JlYXRpbmdDaGFubmVsOiBmYWxzZSxcbiAgICBjcmVhdGVDaGFubmVsRXJyb3I6IGFjdGlvbi5kYXRhXG4gIH0pO1xufTtcblxucmVkdWNlcnNbVVBEQVRFX0NIQU5ORUxfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICB1cGRhdGVDaGFubmVsRXJyb3I6ICcnLFxuICAgIHVwZGF0aW5nQ2hhbm5lbDogdHJ1ZVxuICB9KTtcbn07XG5cbnJlZHVjZXJzW1VQREFURV9DSEFOTkVMX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBjaGFubmVsQ2xhaW0gPSBhY3Rpb24uZGF0YS5jaGFubmVsQ2xhaW07XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcblxuICBieUlkW2NoYW5uZWxDbGFpbS5jbGFpbV9pZF0gPSBjaGFubmVsQ2xhaW07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlJZCxcbiAgICB1cGRhdGVDaGFubmVsRXJyb3I6ICcnLFxuICAgIHVwZGF0aW5nQ2hhbm5lbDogZmFsc2VcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tVUERBVEVfQ0hBTk5FTF9GQUlMRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgdXBkYXRlQ2hhbm5lbEVycm9yOiBhY3Rpb24uZGF0YS5tZXNzYWdlLFxuICAgIHVwZGF0aW5nQ2hhbm5lbDogZmFsc2VcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tJTVBPUlRfQ0hBTk5FTF9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7IHBlbmRpbmdDaGFubmVsSW1wb3J0czogdHJ1ZSB9KTtcblxucmVkdWNlcnNbSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7IHBlbmRpbmdDaGFubmVsSW1wb3J0czogZmFsc2UgfSk7XG5cbnJlZHVjZXJzW0NMQUlNX1NFQVJDSF9TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnkpO1xuICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeVthY3Rpb24uZGF0YS5xdWVyeV0gPSB0cnVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5XG4gIH0pO1xufTtcblxucmVkdWNlcnNbQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5KTtcbiAgY29uc3QgY2xhaW1TZWFyY2hCeVF1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2xhaW1TZWFyY2hCeVF1ZXJ5KTtcbiAgY29uc3QgY2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkKTtcbiAgY29uc3QgeyBhcHBlbmQsIHF1ZXJ5LCB1cmxzLCBwYWdlU2l6ZSB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgaWYgKGFwcGVuZCkge1xuICAgIC8vIHRvZG86IGNoZWNrIGZvciBkdXBsaWNhdGUgdXJscyB3aGVuIGNvbmNhdGVuYXRpbmc/XG4gICAgY2xhaW1TZWFyY2hCeVF1ZXJ5W3F1ZXJ5XSA9IGNsYWltU2VhcmNoQnlRdWVyeVtxdWVyeV0gJiYgY2xhaW1TZWFyY2hCeVF1ZXJ5W3F1ZXJ5XS5sZW5ndGggPyBjbGFpbVNlYXJjaEJ5UXVlcnlbcXVlcnldLmNvbmNhdCh1cmxzKSA6IHVybHM7XG4gIH0gZWxzZSB7XG4gICAgY2xhaW1TZWFyY2hCeVF1ZXJ5W3F1ZXJ5XSA9IHVybHM7XG4gIH1cblxuICAvLyB0aGUgcmV0dXJuZWQgbnVtYmVyIG9mIHVybHMgaXMgbGVzcyB0aGFuIHRoZSBwYWdlIHNpemUsIHNvIHdlJ3JlIG9uIHRoZSBsYXN0IHBhZ2VcbiAgY2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkW3F1ZXJ5XSA9IHVybHMubGVuZ3RoIDwgcGFnZVNpemU7XG5cbiAgZGVsZXRlIGZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5W3F1ZXJ5XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIF9leHRlbmRzJDkoe30sIGhhbmRsZUNsYWltQWN0aW9uKHN0YXRlLCBhY3Rpb24pLCB7XG4gICAgY2xhaW1TZWFyY2hCeVF1ZXJ5LFxuICAgIGNsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCxcbiAgICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeVxuICB9KSk7XG59O1xuXG5yZWR1Y2Vyc1tDTEFJTV9TRUFSQ0hfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgcXVlcnkgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBjbGFpbVNlYXJjaEJ5UXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbVNlYXJjaEJ5UXVlcnkpO1xuICBjb25zdCBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5KTtcblxuICBkZWxldGUgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnlbcXVlcnldO1xuICBjbGFpbVNlYXJjaEJ5UXVlcnlbcXVlcnldID0gbnVsbDtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSxcbiAgICBjbGFpbVNlYXJjaEJ5UXVlcnlcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tDTEFJTV9SRVBPU1RfU1RBUlRFRF0gPSBzdGF0ZSA9PiB7XG4gIHJldHVybiBfZXh0ZW5kcyQ5KHt9LCBzdGF0ZSwge1xuICAgIHJlcG9zdExvYWRpbmc6IHRydWUsXG4gICAgcmVwb3N0RXJyb3I6IG51bGxcbiAgfSk7XG59O1xucmVkdWNlcnNbQ0xBSU1fUkVQT1NUX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IG9yaWdpbmFsQ2xhaW1JZCwgcmVwb3N0Q2xhaW0gfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBieUlkID0gX2V4dGVuZHMkOSh7fSwgc3RhdGUuYnlJZCk7XG4gIGNvbnN0IGNsYWltc0J5VXJpID0gX2V4dGVuZHMkOSh7fSwgc3RhdGUuY2xhaW1zQnlVcmkpO1xuICBjb25zdCBjbGFpbVRoYXRXYXNSZXBvc3RlZCA9IGJ5SWRbb3JpZ2luYWxDbGFpbUlkXTtcblxuICBjb25zdCByZXBvc3RTdHViID0gX2V4dGVuZHMkOSh7fSwgcmVwb3N0Q2xhaW0sIHsgcmVwb3N0ZWRfY2xhaW06IGNsYWltVGhhdFdhc1JlcG9zdGVkIH0pO1xuICBieUlkW3JlcG9zdFN0dWIuY2xhaW1faWRdID0gcmVwb3N0U3R1YjtcbiAgY2xhaW1zQnlVcmlbcmVwb3N0U3R1Yi5wZXJtYW5lbnRfdXJsXSA9IHJlcG9zdFN0dWIuY2xhaW1faWQ7XG5cbiAgcmV0dXJuIF9leHRlbmRzJDkoe30sIHN0YXRlLCB7XG4gICAgYnlJZCxcbiAgICBjbGFpbXNCeVVyaSxcbiAgICByZXBvc3RMb2FkaW5nOiBmYWxzZSxcbiAgICByZXBvc3RFcnJvcjogbnVsbFxuICB9KTtcbn07XG5yZWR1Y2Vyc1tDTEFJTV9SRVBPU1RfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgZXJyb3IgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIHJldHVybiBfZXh0ZW5kcyQ5KHt9LCBzdGF0ZSwge1xuICAgIHJlcG9zdExvYWRpbmc6IGZhbHNlLFxuICAgIHJlcG9zdEVycm9yOiBlcnJvclxuICB9KTtcbn07XG5yZWR1Y2Vyc1tDTEVBUl9SRVBPU1RfRVJST1JdID0gc3RhdGUgPT4ge1xuICByZXR1cm4gX2V4dGVuZHMkOSh7fSwgc3RhdGUsIHtcbiAgICByZXBvc3RFcnJvcjogbnVsbFxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNsYWltc1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnNbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLy8gdXRpbCBmb3IgY3JlYXRpbmcgcmVkdWNlcnNcbi8vIGJhc2VkIG9mZiBvZiByZWR1eC1hY3Rpb25zXG4vLyBodHRwczovL3JlZHV4LWFjdGlvbnMuanMub3JnL2RvY3MvYXBpL2hhbmRsZUFjdGlvbi5odG1sI2hhbmRsZWFjdGlvbnNcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmNvbnN0IGhhbmRsZUFjdGlvbnMgPSAoYWN0aW9uTWFwLCBkZWZhdWx0U3RhdGUpID0+IChzdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBhY3Rpb25NYXBbYWN0aW9uLnR5cGVdO1xuXG4gIGlmIChoYW5kbGVyKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgLy8ganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGhhbmRsZXJcbiAgLy8gcmV0dXJuaW5nIGEgY29weSBoZXJlIGJyZWFrcyByZWR1eC1wZXJzaXN0XG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbnZhciBfZXh0ZW5kcyRhID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDEgPSB7XG4gIGNvbW1lbnRCeUlkOiB7fSwgLy8gY29tbWVudElkIC0+IENvbW1lbnRcbiAgYnlJZDoge30sIC8vIENsYWltSUQgLT4gbGlzdCBvZiBjb21tZW50c1xuICBjb21tZW50c0J5VXJpOiB7fSwgLy8gVVJJIC0+IGNsYWltSWRcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgbXlDb21tZW50czogdW5kZWZpbmVkXG59O1xuXG5jb25zdCBjb21tZW50UmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbQ09NTUVOVF9DUkVBVEVfU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogdHJ1ZVxuICB9KSxcblxuICBbQ09NTUVOVF9DUkVBVEVfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZVxuICB9KSxcblxuICBbQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGNvbW1lbnQsIGNsYWltSWQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGNvbW1lbnRCeUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY29tbWVudEJ5SWQpO1xuICAgIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgICBjb25zdCBjb21tZW50cyA9IGJ5SWRbY2xhaW1JZF07XG4gICAgY29uc3QgbmV3Q29tbWVudElkcyA9IGNvbW1lbnRzLnNsaWNlKCk7XG5cbiAgICAvLyBhZGQgdGhlIGNvbW1lbnQgYnkgaXRzIElEXG4gICAgY29tbWVudEJ5SWRbY29tbWVudC5jb21tZW50X2lkXSA9IGNvbW1lbnQ7XG5cbiAgICAvLyBwdXNoIHRoZSBjb21tZW50X2lkIHRvIHRoZSB0b3Agb2YgSUQgbGlzdFxuICAgIG5ld0NvbW1lbnRJZHMudW5zaGlmdChjb21tZW50LmNvbW1lbnRfaWQpO1xuICAgIGJ5SWRbY2xhaW1JZF0gPSBuZXdDb21tZW50SWRzO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgICBjb21tZW50QnlJZCxcbiAgICAgIGJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG5cbiAgW0NPTU1FTlRfTElTVF9TVEFSVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHsgaXNMb2FkaW5nOiB0cnVlIH0pLFxuXG4gIFtDT01NRU5UX0xJU1RfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGNvbW1lbnRzLCBjbGFpbUlkLCB1cmkgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgY29uc3QgY29tbWVudEJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50QnlJZCk7XG4gICAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICAgIGNvbnN0IGNvbW1lbnRzQnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50c0J5VXJpKTtcblxuICAgIGlmIChjb21tZW50cykge1xuICAgICAgLy8gd2UgdXNlIGFuIEFycmF5IHRvIHByZXNlcnZlIG9yZGVyIG9mIGxpc3RpbmdcbiAgICAgIC8vIGluIHJlYWxpdHkgdGhpcyBkb2Vzbid0IG1hdHRlciBhbmQgd2UgY2FuIGp1c3RcbiAgICAgIC8vIHNvcnQgY29tbWVudHMgYnkgdGhlaXIgdGltZXN0YW1wXG4gICAgICBjb25zdCBjb21tZW50SWRzID0gQXJyYXkoY29tbWVudHMubGVuZ3RoKTtcblxuICAgICAgLy8gbWFwIHRoZSBjb21tZW50X2lkcyB0byB0aGUgbmV3IGNvbW1lbnRzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbW1lbnRJZHNbaV0gPSBjb21tZW50c1tpXS5jb21tZW50X2lkO1xuICAgICAgICBjb21tZW50QnlJZFtjb21tZW50SWRzW2ldXSA9IGNvbW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICBieUlkW2NsYWltSWRdID0gY29tbWVudElkcztcbiAgICAgIGNvbW1lbnRzQnlVcmlbdXJpXSA9IGNsYWltSWQ7XG4gICAgfVxuICAgIHJldHVybiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgICAgYnlJZCxcbiAgICAgIGNvbW1lbnRCeUlkLFxuICAgICAgY29tbWVudHNCeVVyaSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9KTtcbiAgfSxcblxuICBbQ09NTUVOVF9MSVNUX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogZmFsc2VcbiAgfSksXG4gIFtDT01NRU5UX0FCQU5ET05fU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogdHJ1ZVxuICB9KSxcbiAgW0NPTU1FTlRfQUJBTkRPTl9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgY29tbWVudF9pZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgY29tbWVudEJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50QnlJZCk7XG4gICAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuXG4gICAgLy8gdG8gcmVtb3ZlIHRoZSBjb21tZW50IGFuZCBpdHMgcmVmZXJlbmNlc1xuICAgIGNvbnN0IGNsYWltSWQgPSBjb21tZW50QnlJZFtjb21tZW50X2lkXS5jbGFpbV9pZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5SWRbY2xhaW1JZF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChieUlkW2NsYWltSWRdW2ldID09PSBjb21tZW50X2lkKSB7XG4gICAgICAgIGJ5SWRbY2xhaW1JZF0uc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIGNvbW1lbnRCeUlkW2NvbW1lbnRfaWRdO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgICBjb21tZW50QnlJZCxcbiAgICAgIGJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIC8vIGRvIG5vdGhpbmdcbiAgW0NPTU1FTlRfQUJBTkRPTl9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pLFxuICAvLyBkbyBub3RoaW5nXG4gIFtDT01NRU5UX1VQREFURV9TVEFSVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiB0cnVlXG4gIH0pLFxuICAvLyByZXBsYWNlIGV4aXN0aW5nIGNvbW1lbnQgd2l0aCBjb21tZW50IHJldHVybmVkIGhlcmUgdW5kZXIgaXRzIGNvbW1lbnRfaWRcbiAgW0NPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBjb21tZW50IH0gPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBjb21tZW50QnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNvbW1lbnRCeUlkKTtcbiAgICBjb21tZW50QnlJZFtjb21tZW50LmNvbW1lbnRfaWRdID0gY29tbWVudDtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgICAgY29tbWVudEJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIC8vIG5vdGhpbmcgY2FuIGJlIGRvbmUgaGVyZVxuICBbQ09NTUVOVF9VUERBVEVfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZVxuICB9KSxcbiAgLy8gbm90aGluZyBjYW4gcmVhbGx5IGJlIGRvbmUgaGVyZVxuICBbQ09NTUVOVF9ISURFX1NUQVJURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IHRydWVcbiAgfSksXG4gIFtDT01NRU5UX0hJREVfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7IC8vIHRvZG86IGFkZCBIaWRkZW5Db21tZW50cyBzdGF0ZSAmIGNyZWF0ZSBzZWxlY3RvcnNcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pLFxuICAvLyBub3RoaW5nIGNhbiBiZSBkb25lIGhlcmVcbiAgW0NPTU1FTlRfSElERV9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pXG59LCBkZWZhdWx0U3RhdGUkMSk7XG5cbnZhciBfZXh0ZW5kcyRiID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgcmVkdWNlcnMkMSA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDIgPSB7XG4gIHBvc2l0aW9uczoge31cbn07XG5cbnJlZHVjZXJzJDFbU0VUX0NPTlRFTlRfUE9TSVRJT05dID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjbGFpbUlkLCBvdXRwb2ludCwgcG9zaXRpb24gfSA9IGFjdGlvbi5kYXRhO1xuICByZXR1cm4gX2V4dGVuZHMkYih7fSwgc3RhdGUsIHtcbiAgICBwb3NpdGlvbnM6IF9leHRlbmRzJGIoe30sIHN0YXRlLnBvc2l0aW9ucywge1xuICAgICAgW2NsYWltSWRdOiBfZXh0ZW5kcyRiKHt9LCBzdGF0ZS5wb3NpdGlvbnNbY2xhaW1JZF0sIHtcbiAgICAgICAgW291dHBvaW50XTogcG9zaXRpb25cbiAgICAgIH0pXG4gICAgfSlcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjb250ZW50UmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSQyLCBhY3Rpb24pIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzJDFbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuY29uc3QgcmVkdWNlcnMkMiA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDMgPSB7XG4gIGZpbGVMaXN0UHVibGlzaGVkU29ydDogREFURV9ORVcsXG4gIGZpbGVMaXN0RG93bmxvYWRlZFNvcnQ6IERBVEVfTkVXXG59O1xuXG5yZWR1Y2VycyQyW0ZJTEVfTElTVF9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGlzRmV0Y2hpbmdGaWxlTGlzdDogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbRklMRV9MSVNUX1NVQ0NFRURFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGZpbGVJbmZvcyB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgcGVuZGluZ0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5wZW5kaW5nQnlPdXRwb2ludCk7XG5cbiAgZmlsZUluZm9zLmZvckVhY2goZmlsZUluZm8gPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGZpbGVJbmZvO1xuXG4gICAgaWYgKG91dHBvaW50KSBuZXdCeU91dHBvaW50W2ZpbGVJbmZvLm91dHBvaW50XSA9IGZpbGVJbmZvO1xuICB9KTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBpc0ZldGNoaW5nRmlsZUxpc3Q6IGZhbHNlLFxuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnQsXG4gICAgcGVuZGluZ0J5T3V0cG9pbnRcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0ZFVENIX0ZJTEVfSU5GT19TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcblxuICBuZXdGZXRjaGluZ1tvdXRwb2ludF0gPSB0cnVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nOiBuZXdGZXRjaGluZ1xuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGZpbGVJbmZvLCBvdXRwb2ludCB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3QgbmV3QnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5T3V0cG9pbnQpO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcblxuICBuZXdCeU91dHBvaW50W291dHBvaW50XSA9IGZpbGVJbmZvO1xuICBkZWxldGUgbmV3RmV0Y2hpbmdbb3V0cG9pbnRdO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnQsXG4gICAgZmV0Y2hpbmc6IG5ld0ZldGNoaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltGRVRDSF9GSUxFX0lORk9fRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcbiAgZGVsZXRlIG5ld0ZldGNoaW5nW291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZzogbmV3RmV0Y2hpbmdcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0RPV05MT0FESU5HX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmksIG91dHBvaW50LCBmaWxlSW5mbyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3QgbmV3QnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5T3V0cG9pbnQpO1xuICBjb25zdCBuZXdEb3dubG9hZGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmRvd25sb2FkaW5nQnlPdXRwb2ludCk7XG5cbiAgbmV3RG93bmxvYWRpbmdbb3V0cG9pbnRdID0gdHJ1ZTtcbiAgbmV3QnlPdXRwb2ludFtvdXRwb2ludF0gPSBmaWxlSW5mbztcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nLFxuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnRcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0RPV05MT0FESU5HX1BST0dSRVNTRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBvdXRwb2ludCwgZmlsZUluZm8gfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgbmV3RG93bmxvYWRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kb3dubG9hZGluZ0J5T3V0cG9pbnQpO1xuXG4gIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdID0gZmlsZUluZm87XG4gIG5ld0Rvd25sb2FkaW5nW291dHBvaW50XSA9IHRydWU7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlPdXRwb2ludDogbmV3QnlPdXRwb2ludCxcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltET1dOTE9BRElOR19DQU5DRUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSwgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0Rvd25sb2FkaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZG93bmxvYWRpbmdCeU91dHBvaW50KTtcbiAgZGVsZXRlIG5ld0Rvd25sb2FkaW5nW291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltET1dOTE9BRElOR19DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBvdXRwb2ludCwgZmlsZUluZm8gfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgbmV3RG93bmxvYWRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kb3dubG9hZGluZ0J5T3V0cG9pbnQpO1xuXG4gIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdID0gZmlsZUluZm87XG4gIGRlbGV0ZSBuZXdEb3dubG9hZGluZ1tvdXRwb2ludF07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlPdXRwb2ludDogbmV3QnlPdXRwb2ludCxcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltGSUxFX0RFTEVURV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IG91dHBvaW50IH0gPSBhY3Rpb24uZGF0YTtcblxuICBjb25zdCBuZXdCeU91dHBvaW50ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlPdXRwb2ludCk7XG4gIGNvbnN0IGRvd25sb2FkaW5nQnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmRvd25sb2FkaW5nQnlPdXRwb2ludCk7XG5cbiAgZGVsZXRlIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdO1xuICBkZWxldGUgZG93bmxvYWRpbmdCeU91dHBvaW50W291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBieU91dHBvaW50OiBuZXdCeU91dHBvaW50LFxuICAgIGRvd25sb2FkaW5nQnlPdXRwb2ludFxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbU0VUX0ZJTEVfTElTVF9TT1JUXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBhZ2VTb3J0U3RhdGVzID0ge1xuICAgIFtQVUJMSVNIRURdOiAnZmlsZUxpc3RQdWJsaXNoZWRTb3J0JyxcbiAgICBbRE9XTkxPQURFRF06ICdmaWxlTGlzdERvd25sb2FkZWRTb3J0J1xuICB9O1xuICBjb25zdCBwYWdlU29ydFN0YXRlID0gcGFnZVNvcnRTdGF0ZXNbYWN0aW9uLmRhdGEucGFnZV07XG4gIGNvbnN0IHsgdmFsdWUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIFtwYWdlU29ydFN0YXRlXTogdmFsdWVcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBmaWxlSW5mb1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkMywgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQyW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbnZhciBfZXh0ZW5kcyRjID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgcmVkdWNlcnMkMyA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDQgPSB7XG4gIGZhaWxlZFB1cmNoYXNlVXJpczogW10sXG4gIHB1cmNoYXNlZFVyaXM6IFtdLFxuICBwdXJjaGFzZVVyaUVycm9yTWVzc2FnZTogJydcbn07XG5cbnJlZHVjZXJzJDNbUFVSQ0hBU0VfVVJJX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmkgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGYWlsZWRQdXJjaGFzZVVyaXMgPSBzdGF0ZS5mYWlsZWRQdXJjaGFzZVVyaXMuc2xpY2UoKTtcbiAgaWYgKG5ld0ZhaWxlZFB1cmNoYXNlVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3RmFpbGVkUHVyY2hhc2VVcmlzLnNwbGljZShuZXdGYWlsZWRQdXJjaGFzZVVyaXMuaW5kZXhPZih1cmkpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyRjKHt9LCBzdGF0ZSwge1xuICAgIGZhaWxlZFB1cmNoYXNlVXJpczogbmV3RmFpbGVkUHVyY2hhc2VVcmlzLFxuICAgIHB1cmNoYXNlVXJpRXJyb3JNZXNzYWdlOiAnJ1xuICB9KTtcbn07XG5cbnJlZHVjZXJzJDNbUFVSQ0hBU0VfVVJJX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld1B1cmNoYXNlZFVyaXMgPSBzdGF0ZS5wdXJjaGFzZWRVcmlzLnNsaWNlKCk7XG4gIGNvbnN0IG5ld0ZhaWxlZFB1cmNoYXNlVXJpcyA9IHN0YXRlLmZhaWxlZFB1cmNoYXNlVXJpcy5zbGljZSgpO1xuXG4gIGlmICghbmV3UHVyY2hhc2VkVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3UHVyY2hhc2VkVXJpcy5wdXNoKHVyaSk7XG4gIH1cbiAgaWYgKG5ld0ZhaWxlZFB1cmNoYXNlVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3RmFpbGVkUHVyY2hhc2VVcmlzLnNwbGljZShuZXdGYWlsZWRQdXJjaGFzZVVyaXMuaW5kZXhPZih1cmkpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyRjKHt9LCBzdGF0ZSwge1xuICAgIGZhaWxlZFB1cmNoYXNlVXJpczogbmV3RmFpbGVkUHVyY2hhc2VVcmlzLFxuICAgIHB1cmNoYXNlZFVyaXM6IG5ld1B1cmNoYXNlZFVyaXMsXG4gICAgcHVyY2hhc2VVcmlFcnJvck1lc3NhZ2U6ICcnXG4gIH0pO1xufTtcblxucmVkdWNlcnMkM1tQVVJDSEFTRV9VUklfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgdXJpLCBlcnJvciB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld0ZhaWxlZFB1cmNoYXNlVXJpcyA9IHN0YXRlLmZhaWxlZFB1cmNoYXNlVXJpcy5zbGljZSgpO1xuXG4gIGlmICghbmV3RmFpbGVkUHVyY2hhc2VVcmlzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICBuZXdGYWlsZWRQdXJjaGFzZVVyaXMucHVzaCh1cmkpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzJGMoe30sIHN0YXRlLCB7XG4gICAgZmFpbGVkUHVyY2hhc2VVcmlzOiBuZXdGYWlsZWRQdXJjaGFzZVVyaXMsXG4gICAgcHVyY2hhc2VVcmlFcnJvck1lc3NhZ2U6IGVycm9yXG4gIH0pO1xufTtcblxucmVkdWNlcnMkM1tERUxFVEVfUFVSQ0hBU0VEX1VSSV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld1B1cmNoYXNlZFVyaXMgPSBzdGF0ZS5wdXJjaGFzZWRVcmlzLnNsaWNlKCk7XG4gIGlmIChuZXdQdXJjaGFzZWRVcmlzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICBuZXdQdXJjaGFzZWRVcmlzLnNwbGljZShuZXdQdXJjaGFzZWRVcmlzLmluZGV4T2YodXJpKSwgMSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMkYyh7fSwgc3RhdGUsIHtcbiAgICBwdXJjaGFzZWRVcmlzOiBuZXdQdXJjaGFzZWRVcmlzXG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZmlsZVJlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkNCwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQzW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbnZhciBfZXh0ZW5kcyRkID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDUgPSB7XG4gIG5vdGlmaWNhdGlvbnM6IFtdLFxuICB0b2FzdHM6IFtdLFxuICBlcnJvcnM6IFtdXG59O1xuXG5jb25zdCBub3RpZmljYXRpb25zUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICAvLyBUb2FzdHNcbiAgW0NSRUFURV9UT0FTVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgdG9hc3QgPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBuZXdUb2FzdHMgPSBzdGF0ZS50b2FzdHMuc2xpY2UoKTtcbiAgICBuZXdUb2FzdHMucHVzaCh0b2FzdCk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIHRvYXN0czogbmV3VG9hc3RzXG4gICAgfSk7XG4gIH0sXG4gIFtESVNNSVNTX1RPQVNUXTogc3RhdGUgPT4ge1xuICAgIGNvbnN0IG5ld1RvYXN0cyA9IHN0YXRlLnRvYXN0cy5zbGljZSgpO1xuICAgIG5ld1RvYXN0cy5zaGlmdCgpO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGQoe30sIHN0YXRlLCB7XG4gICAgICB0b2FzdHM6IG5ld1RvYXN0c1xuICAgIH0pO1xuICB9LFxuXG4gIC8vIE5vdGlmaWNhdGlvbnNcbiAgW0NSRUFURV9OT1RJRklDQVRJT05dOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld05vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG4gICAgbmV3Tm90aWZpY2F0aW9ucy5wdXNoKG5vdGlmaWNhdGlvbik7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIG5vdGlmaWNhdGlvbnM6IG5ld05vdGlmaWNhdGlvbnNcbiAgICB9KTtcbiAgfSxcbiAgLy8gVXNlZCB0byBtYXJrIG5vdGlmaWNhdGlvbnMgYXMgcmVhZC9kaXNtaXNzZWRcbiAgW0VESVRfTk9USUZJQ0FUSU9OXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IG5vdGlmaWNhdGlvbiB9ID0gYWN0aW9uLmRhdGE7XG4gICAgbGV0IG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG5cbiAgICBub3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5tYXAocGFzdE5vdGlmaWNhdGlvbiA9PiBwYXN0Tm90aWZpY2F0aW9uLmlkID09PSBub3RpZmljYXRpb24uaWQgPyBub3RpZmljYXRpb24gOiBwYXN0Tm90aWZpY2F0aW9uKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgbm90aWZpY2F0aW9uc1xuICAgIH0pO1xuICB9LFxuICBbREVMRVRFX05PVElGSUNBVElPTl06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgbGV0IG5ld05vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG4gICAgbmV3Tm90aWZpY2F0aW9ucyA9IG5ld05vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiBub3RpZmljYXRpb24uaWQgIT09IGlkKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgbm90aWZpY2F0aW9uczogbmV3Tm90aWZpY2F0aW9uc1xuICAgIH0pO1xuICB9LFxuXG4gIC8vIEVycm9yc1xuICBbQ1JFQVRFX0VSUk9SXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0Vycm9ycyA9IHN0YXRlLmVycm9ycy5zbGljZSgpO1xuICAgIG5ld0Vycm9ycy5wdXNoKGVycm9yKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgZXJyb3JzOiBuZXdFcnJvcnNcbiAgICB9KTtcbiAgfSxcbiAgW0RJU01JU1NfRVJST1JdOiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgbmV3RXJyb3JzID0gc3RhdGUuZXJyb3JzLnNsaWNlKCk7XG4gICAgbmV3RXJyb3JzLnNoaWZ0KCk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIGVycm9yczogbmV3RXJyb3JzXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ1KTtcblxudmFyIF9leHRlbmRzJGUgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuY29uc3QgZGVmYXVsdFN0YXRlJDYgPSB7XG4gIGVkaXRpbmdVUkk6IHVuZGVmaW5lZCxcbiAgZmlsZVBhdGg6IHVuZGVmaW5lZCxcbiAgZmlsZUR1cjogMCxcbiAgZmlsZVNpemU6IDAsXG4gIGZpbGVWaWQ6IGZhbHNlLFxuICBjb250ZW50SXNGcmVlOiB0cnVlLFxuICBmZWU6IHtcbiAgICBhbW91bnQ6IDEsXG4gICAgY3VycmVuY3k6ICdMQkMnXG4gIH0sXG4gIHRpdGxlOiAnJyxcbiAgdGh1bWJuYWlsX3VybDogJycsXG4gIHRodW1ibmFpbFBhdGg6ICcnLFxuICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IEFQSV9ET1dOLFxuICBkZXNjcmlwdGlvbjogJycsXG4gIGxhbmd1YWdlOiAnJyxcbiAgbnNmdzogZmFsc2UsXG4gIGNoYW5uZWw6IENIQU5ORUxfQU5PTllNT1VTLFxuICBjaGFubmVsSWQ6ICcnLFxuICBuYW1lOiAnJyxcbiAgbmFtZUVycm9yOiB1bmRlZmluZWQsXG4gIGJpZDogMC4xLFxuICBiaWRFcnJvcjogdW5kZWZpbmVkLFxuICBsaWNlbnNlVHlwZTogJ05vbmUnLFxuICBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbjogJ0FsbCByaWdodHMgcmVzZXJ2ZWQnLFxuICBsaWNlbnNlVXJsOiAnJyxcbiAgdGFnczogW10sXG4gIHB1Ymxpc2hpbmc6IGZhbHNlLFxuICBwdWJsaXNoU3VjY2VzczogZmFsc2UsXG4gIHB1Ymxpc2hFcnJvcjogdW5kZWZpbmVkLFxuICBvcHRpbWl6ZTogZmFsc2Vcbn07XG5cbmNvbnN0IHB1Ymxpc2hSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtVUERBVEVfUFVCTElTSF9GT1JNXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGFjdGlvbjtcbiAgICByZXR1cm4gX2V4dGVuZHMkZSh7fSwgc3RhdGUsIGRhdGEpO1xuICB9LFxuICBbQ0xFQVJfUFVCTElTSF06IHN0YXRlID0+IF9leHRlbmRzJGUoe30sIGRlZmF1bHRTdGF0ZSQ2LCB7XG4gICAgYmlkOiBzdGF0ZS5iaWQsXG4gICAgb3B0aW1pemU6IHN0YXRlLm9wdGltaXplXG4gIH0pLFxuICBbUFVCTElTSF9TVEFSVF06IHN0YXRlID0+IF9leHRlbmRzJGUoe30sIHN0YXRlLCB7XG4gICAgcHVibGlzaGluZzogdHJ1ZSxcbiAgICBwdWJsaXNoU3VjY2VzczogZmFsc2VcbiAgfSksXG4gIFtQVUJMSVNIX0ZBSUxdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRlKHt9LCBzdGF0ZSwge1xuICAgIHB1Ymxpc2hpbmc6IGZhbHNlXG4gIH0pLFxuICBbUFVCTElTSF9TVUNDRVNTXTogc3RhdGUgPT4gX2V4dGVuZHMkZSh7fSwgc3RhdGUsIHtcbiAgICBwdWJsaXNoaW5nOiBmYWxzZSxcbiAgICBwdWJsaXNoU3VjY2VzczogdHJ1ZVxuICB9KSxcbiAgW0RPX1BSRVBBUkVfRURJVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcHVibGlzaERhdGEgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMyhhY3Rpb24uZGF0YSwgW10pO1xuICAgIGNvbnN0IHsgY2hhbm5lbCwgbmFtZSwgdXJpIH0gPSBwdWJsaXNoRGF0YTtcblxuICAgIC8vIFRoZSBzaG9ydCB1cmkgaXMgd2hhdCBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJcbiAgICAvLyBUaGUgZWRpdGluZ1VyaSBpcyB0aGUgZnVsbCB1cmkgd2l0aCBjbGFpbSBpZFxuICAgIGNvbnN0IHNob3J0VXJpID0gYnVpbGRVUkkoe1xuICAgICAgY2hhbm5lbE5hbWU6IGNoYW5uZWwsXG4gICAgICBzdHJlYW1OYW1lOiBuYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZSh7fSwgZGVmYXVsdFN0YXRlJDYsIHB1Ymxpc2hEYXRhLCB7XG4gICAgICBlZGl0aW5nVVJJOiB1cmksXG4gICAgICB1cmk6IHNob3J0VXJpXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ2KTtcblxudmFyIF9leHRlbmRzJGYgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkNyA9IHtcbiAgaXNBY3RpdmU6IGZhbHNlLCAvLyBkb2VzIHRoZSB1c2VyIGhhdmUgYW55IHR5cGVkIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICBmb2N1c2VkOiBmYWxzZSwgLy8gaXMgdGhlIHNlYXJjaCBpbnB1dCBmb2N1c2VkXG4gIHNlYXJjaFF1ZXJ5OiAnJywgLy8gbmVlZHMgdG8gYmUgYW4gZW1wdHkgc3RyaW5nIGZvciBpbnB1dCBmb2N1c2luZ1xuICBvcHRpb25zOiB7XG4gICAgW1NFQVJDSF9PUFRJT05TLlJFU1VMVF9DT1VOVF06IDMwLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5DTEFJTV9UWVBFXTogU0VBUkNIX09QVElPTlMuSU5DTFVERV9GSUxFU19BTkRfQ0hBTk5FTFMsXG4gICAgW1NFQVJDSF9PUFRJT05TLk1FRElBX0FVRElPXTogdHJ1ZSxcbiAgICBbU0VBUkNIX09QVElPTlMuTUVESUFfVklERU9dOiB0cnVlLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5NRURJQV9URVhUXTogdHJ1ZSxcbiAgICBbU0VBUkNIX09QVElPTlMuTUVESUFfSU1BR0VdOiB0cnVlLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5NRURJQV9BUFBMSUNBVElPTl06IHRydWVcbiAgfSxcbiAgc3VnZ2VzdGlvbnM6IHt9LFxuICB1cmlzQnlRdWVyeToge30sXG4gIHJlc29sdmVkUmVzdWx0c0J5UXVlcnk6IHt9LFxuICByZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkOiB7fVxufTtcblxuY29uc3Qgc2VhcmNoUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbU0VBUkNIX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IHRydWVcbiAgfSksXG4gIFtTRUFSQ0hfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeSwgdXJpcyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICAgIHNlYXJjaGluZzogZmFsc2UsXG4gICAgICB1cmlzQnlRdWVyeTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXJpc0J5UXVlcnksIHsgW3F1ZXJ5XTogdXJpcyB9KVxuICAgIH0pO1xuICB9LFxuXG4gIFtTRUFSQ0hfRkFJTF06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc2VhcmNoaW5nOiBmYWxzZVxuICB9KSxcblxuICBbUkVTT0xWRURfU0VBUkNIX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IHRydWVcbiAgfSksXG4gIFtSRVNPTFZFRF9TRUFSQ0hfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlc29sdmVkUmVzdWx0c0J5UXVlcnkpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkKTtcbiAgICBjb25zdCB7IGFwcGVuZCwgcXVlcnksIHJlc3VsdHMsIHBhZ2VTaXplIH0gPSBhY3Rpb24uZGF0YTtcblxuICAgIGlmIChhcHBlbmQpIHtcbiAgICAgIC8vIHRvZG86IGNoZWNrIGZvciBkdXBsaWNhdGVzIHdoZW4gY29uY2F0ZW5hdGluZz9cbiAgICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnlbcXVlcnldID0gcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0gJiYgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0ubGVuZ3RoID8gcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0uY29uY2F0KHJlc3VsdHMpIDogcmVzdWx0cztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0gPSByZXN1bHRzO1xuICAgIH1cblxuICAgIC8vIHRoZSByZXR1cm5lZCBudW1iZXIgb2YgdXJscyBpcyBsZXNzIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgc28gd2UncmUgb24gdGhlIGxhc3QgcGFnZVxuICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWRbcXVlcnldID0gcmVzdWx0cy5sZW5ndGggPCBwYWdlU2l6ZTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRmKHt9LCBzdGF0ZSwge1xuICAgICAgc2VhcmNoaW5nOiBmYWxzZSxcbiAgICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnksXG4gICAgICByZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkXG4gICAgfSk7XG4gIH0sXG5cbiAgW1JFU09MVkVEX1NFQVJDSF9GQUlMXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IGZhbHNlXG4gIH0pLFxuXG4gIFtVUERBVEVfU0VBUkNIX1FVRVJZXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc2VhcmNoUXVlcnk6IGFjdGlvbi5kYXRhLnF1ZXJ5LFxuICAgIGlzQWN0aXZlOiB0cnVlXG4gIH0pLFxuXG4gIFtVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc3VnZ2VzdGlvbnM6IF9leHRlbmRzJGYoe30sIHN0YXRlLnN1Z2dlc3Rpb25zLCB7XG4gICAgICBbYWN0aW9uLmRhdGEucXVlcnldOiBhY3Rpb24uZGF0YS5zdWdnZXN0aW9uc1xuICAgIH0pXG4gIH0pLFxuXG4gIC8vIHNldHMgaXNBY3RpdmUgdG8gZmFsc2Ugc28gdGhlIHVyaSB3aWxsIGJlIHBvcHVsYXRlZCBjb3JyZWN0bHkgaWYgdGhlXG4gIC8vIHVzZXIgaXMgb24gYSBmaWxlIHBhZ2UuIFRoZSBzZWFyY2ggcXVlcnkgd2lsbCBzdGlsbCBiZSBwcmVzZW50IG9uIGFueVxuICAvLyBvdGhlciBwYWdlXG4gIFtESVNNSVNTX05PVElGSUNBVElPTl06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgaXNBY3RpdmU6IGZhbHNlXG4gIH0pLFxuXG4gIFtTRUFSQ0hfRk9DVVNdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRmKHt9LCBzdGF0ZSwge1xuICAgIGZvY3VzZWQ6IHRydWVcbiAgfSksXG4gIFtTRUFSQ0hfQkxVUl06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgZm9jdXNlZDogZmFsc2VcbiAgfSksXG4gIFtVUERBVEVfU0VBUkNIX09QVElPTlNdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3B0aW9uczogb2xkT3B0aW9ucyB9ID0gc3RhdGU7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBfZXh0ZW5kcyRmKHt9LCBvbGRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICByZXR1cm4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDcpO1xuXG52YXIgX2V4dGVuZHMkZyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRLbm93blRhZ3MoKSB7XG4gIHJldHVybiBERUZBVUxUX0ZPTExPV0VEX1RBR1MuY29uY2F0KERFRkFVTFRfS05PV05fVEFHUykucmVkdWNlKCh0YWdzTWFwLCB0YWcpID0+IF9leHRlbmRzJGcoe30sIHRhZ3NNYXAsIHtcbiAgICBbdGFnXTogeyBuYW1lOiB0YWcgfVxuICB9KSwge30pO1xufVxuXG5jb25zdCBkZWZhdWx0U3RhdGUkOCA9IHtcbiAgZm9sbG93ZWRUYWdzOiBbXSxcbiAga25vd25UYWdzOiBnZXREZWZhdWx0S25vd25UYWdzKClcbn07XG5cbmNvbnN0IHRhZ3NSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtUT0dHTEVfVEFHX0ZPTExPV106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmb2xsb3dlZFRhZ3MgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICBsZXQgbmV3Rm9sbG93ZWRUYWdzID0gZm9sbG93ZWRUYWdzLnNsaWNlKCk7XG5cbiAgICBpZiAobmV3Rm9sbG93ZWRUYWdzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICBuZXdGb2xsb3dlZFRhZ3MgPSBuZXdGb2xsb3dlZFRhZ3MuZmlsdGVyKHRhZyA9PiB0YWcgIT09IG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdGb2xsb3dlZFRhZ3MucHVzaChuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZyh7fSwgc3RhdGUsIHtcbiAgICAgIGZvbGxvd2VkVGFnczogbmV3Rm9sbG93ZWRUYWdzXG4gICAgfSk7XG4gIH0sXG5cbiAgW1RBR19BRERdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsga25vd25UYWdzIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgbGV0IG5ld0tub3duVGFncyA9IF9leHRlbmRzJGcoe30sIGtub3duVGFncyk7XG4gICAgbmV3S25vd25UYWdzW25hbWVdID0geyBuYW1lIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZyh7fSwgc3RhdGUsIHtcbiAgICAgIGtub3duVGFnczogbmV3S25vd25UYWdzXG4gICAgfSk7XG4gIH0sXG5cbiAgW1RBR19ERUxFVEVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsga25vd25UYWdzLCBmb2xsb3dlZFRhZ3MgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICBsZXQgbmV3S25vd25UYWdzID0gX2V4dGVuZHMkZyh7fSwga25vd25UYWdzKTtcbiAgICBkZWxldGUgbmV3S25vd25UYWdzW25hbWVdO1xuICAgIGNvbnN0IG5ld0ZvbGxvd2VkVGFncyA9IGZvbGxvd2VkVGFncy5maWx0ZXIodGFnID0+IHRhZyAhPT0gbmFtZSk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZyh7fSwgc3RhdGUsIHtcbiAgICAgIGtub3duVGFnczogbmV3S25vd25UYWdzLFxuICAgICAgZm9sbG93ZWRUYWdzOiBuZXdGb2xsb3dlZFRhZ3NcbiAgICB9KTtcbiAgfSxcbiAgW1VTRVJfU1RBVEVfUE9QVUxBVEVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgdGFncyB9ID0gYWN0aW9uLmRhdGE7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFncykpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyRnKHt9LCBzdGF0ZSwge1xuICAgICAgICBmb2xsb3dlZFRhZ3M6IHRhZ3NcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gX2V4dGVuZHMkZyh7fSwgc3RhdGUpO1xuICB9XG59LCBkZWZhdWx0U3RhdGUkOCk7XG5cbnZhciBfZXh0ZW5kcyRoID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDkgPSB7XG4gIGJsb2NrZWRDaGFubmVsczogW11cbn07XG5cbmNvbnN0IGJsb2NrZWRSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtUT0dHTEVfQkxPQ0tfQ0hBTk5FTF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBibG9ja2VkQ2hhbm5lbHMgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgdXJpIH0gPSBhY3Rpb24uZGF0YTtcbiAgICBsZXQgbmV3QmxvY2tlZENoYW5uZWxzID0gYmxvY2tlZENoYW5uZWxzLnNsaWNlKCk7XG5cbiAgICBpZiAobmV3QmxvY2tlZENoYW5uZWxzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICAgIG5ld0Jsb2NrZWRDaGFubmVscyA9IG5ld0Jsb2NrZWRDaGFubmVscy5maWx0ZXIoaWQgPT4gaWQgIT09IHVyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jsb2NrZWRDaGFubmVscy5wdXNoKHVyaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrZWRDaGFubmVsczogbmV3QmxvY2tlZENoYW5uZWxzXG4gICAgfTtcbiAgfSxcbiAgW1VTRVJfU1RBVEVfUE9QVUxBVEVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgYmxvY2tlZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgcmV0dXJuIF9leHRlbmRzJGgoe30sIHN0YXRlLCB7XG4gICAgICBibG9ja2VkQ2hhbm5lbHM6IGJsb2NrZWQgJiYgYmxvY2tlZC5sZW5ndGggPyBibG9ja2VkIDogc3RhdGUuYmxvY2tlZENoYW5uZWxzXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ5KTtcblxudmFyIF9leHRlbmRzJGkgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBidWlsZERyYWZ0VHJhbnNhY3Rpb24gPSAoKSA9PiAoe1xuICBhbW91bnQ6IHVuZGVmaW5lZCxcbiAgYWRkcmVzczogdW5kZWZpbmVkXG59KTtcblxuLy8gVE9ETzogU3BsaXQgaW50byBjb21tb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB0eXBlc1xuLy8gU2VlIGRldGFpbHMgaW4gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5L2lzc3Vlcy8xMzA3XG5cblxuY29uc3QgZGVmYXVsdFN0YXRlJGEgPSB7XG4gIGJhbGFuY2U6IHVuZGVmaW5lZCxcbiAgdG90YWxCYWxhbmNlOiB1bmRlZmluZWQsXG4gIHJlc2VydmVkQmFsYW5jZTogdW5kZWZpbmVkLFxuICBjbGFpbXNCYWxhbmNlOiB1bmRlZmluZWQsXG4gIHN1cHBvcnRzQmFsYW5jZTogdW5kZWZpbmVkLFxuICB0aXBzQmFsYW5jZTogdW5kZWZpbmVkLFxuICBsYXRlc3RCbG9jazogdW5kZWZpbmVkLFxuICB0cmFuc2FjdGlvbnM6IHt9LFxuICBmZXRjaGluZ1RyYW5zYWN0aW9uczogZmFsc2UsXG4gIHN1cHBvcnRzOiB7fSxcbiAgZmV0Y2hpbmdTdXBwb3J0czogZmFsc2UsXG4gIGFiYW5kb25pbmdTdXBwb3J0c0J5T3V0cG9pbnQ6IHt9LFxuICBnZXR0aW5nTmV3QWRkcmVzczogZmFsc2UsXG4gIGRyYWZ0VHJhbnNhY3Rpb246IGJ1aWxkRHJhZnRUcmFuc2FjdGlvbigpLFxuICBzZW5kaW5nU3VwcG9ydDogZmFsc2UsXG4gIHdhbGxldElzRW5jcnlwdGVkOiBmYWxzZSxcbiAgd2FsbGV0RW5jcnlwdFBlbmRpbmc6IGZhbHNlLFxuICB3YWxsZXRFbmNyeXB0U3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldEVuY3J5cHRSZXN1bHQ6IG51bGwsXG4gIHdhbGxldERlY3J5cHRQZW5kaW5nOiBmYWxzZSxcbiAgd2FsbGV0RGVjcnlwdFN1Y2NlZGVkOiBudWxsLFxuICB3YWxsZXREZWNyeXB0UmVzdWx0OiBudWxsLFxuICB3YWxsZXRVbmxvY2tQZW5kaW5nOiBmYWxzZSxcbiAgd2FsbGV0VW5sb2NrU3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldFVubG9ja1Jlc3VsdDogbnVsbCxcbiAgd2FsbGV0TG9ja1BlbmRpbmc6IGZhbHNlLFxuICB3YWxsZXRMb2NrU3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldExvY2tSZXN1bHQ6IG51bGwsXG4gIHRyYW5zYWN0aW9uTGlzdEZpbHRlcjogJ2FsbCcsXG4gIHdhbGxldFJlY29ubmVjdGluZzogZmFsc2UsXG4gIHBlbmRpbmdTdXBwb3J0VHJhbnNhY3Rpb25zOiB7fSxcbiAgYWJhbmRvbkNsYWltU3VwcG9ydEVycm9yOiB1bmRlZmluZWRcbn07XG5cbmNvbnN0IHdhbGxldFJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX1RSQU5TQUNUSU9OU19TVEFSVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZ1RyYW5zYWN0aW9uczogdHJ1ZVxuICB9KSxcblxuICBbRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgYnlJZCA9IF9leHRlbmRzJGkoe30sIHN0YXRlLnRyYW5zYWN0aW9ucyk7XG5cbiAgICBjb25zdCB7IHRyYW5zYWN0aW9ucyB9ID0gYWN0aW9uLmRhdGE7XG4gICAgdHJhbnNhY3Rpb25zLmZvckVhY2godHJhbnNhY3Rpb24gPT4ge1xuICAgICAgYnlJZFt0cmFuc2FjdGlvbi50eGlkXSA9IHRyYW5zYWN0aW9uO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICB0cmFuc2FjdGlvbnM6IGJ5SWQsXG4gICAgICBmZXRjaGluZ1RyYW5zYWN0aW9uczogZmFsc2VcbiAgICB9KTtcbiAgfSxcblxuICBbRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgZmV0Y2hpbmdTdXBwb3J0czogdHJ1ZVxuICB9KSxcblxuICBbRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBieU91dHBvaW50ID0gc3RhdGUuc3VwcG9ydHM7XG4gICAgY29uc3QgeyBzdXBwb3J0cyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICBzdXBwb3J0cy5mb3JFYWNoKHRyYW5zYWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgdHhpZCwgbm91dCB9ID0gdHJhbnNhY3Rpb247XG4gICAgICBieU91dHBvaW50W2Ake3R4aWR9OiR7bm91dH1gXSA9IHRyYW5zYWN0aW9uO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IHN1cHBvcnRzOiBieU91dHBvaW50LCBmZXRjaGluZ1N1cHBvcnRzOiBmYWxzZSB9KTtcbiAgfSxcblxuICBbQUJBTkRPTl9TVVBQT1JUX1NUQVJURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGN1cnJlbnRseUFiYW5kb25pbmcgPSBzdGF0ZS5hYmFuZG9uaW5nU3VwcG9ydHNCeU91dHBvaW50O1xuXG4gICAgY3VycmVudGx5QWJhbmRvbmluZ1tvdXRwb2ludF0gPSB0cnVlO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBhYmFuZG9uaW5nU3VwcG9ydHNCeU91dHBvaW50OiBjdXJyZW50bHlBYmFuZG9uaW5nXG4gICAgfSk7XG4gIH0sXG5cbiAgW0FCQU5ET05fU1VQUE9SVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGJ5T3V0cG9pbnQgPSBzdGF0ZS5zdXBwb3J0cztcbiAgICBjb25zdCBjdXJyZW50bHlBYmFuZG9uaW5nID0gc3RhdGUuYWJhbmRvbmluZ1N1cHBvcnRzQnlPdXRwb2ludDtcblxuICAgIGRlbGV0ZSBjdXJyZW50bHlBYmFuZG9uaW5nW291dHBvaW50XTtcbiAgICBkZWxldGUgYnlPdXRwb2ludFtvdXRwb2ludF07XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICAgIHN1cHBvcnRzOiBieU91dHBvaW50LFxuICAgICAgYWJhbmRvbmluZ1N1cHBvcnRzQnlJZDogY3VycmVudGx5QWJhbmRvbmluZ1xuICAgIH0pO1xuICB9LFxuXG4gIFtBQkFORE9OX0NMQUlNX1NVUFBPUlRfU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBhYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3I6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9LFxuXG4gIFtBQkFORE9OX0NMQUlNX1NVUFBPUlRfUFJFVklFV106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBhYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3I6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9LFxuXG4gIFtBQkFORE9OX0NMQUlNX1NVUFBPUlRfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGNsYWltSWQsIHR5cGUsIHR4aWQsIGVmZmVjdGl2ZSB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgcGVuZGluZ3R4cyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnBlbmRpbmdTdXBwb3J0VHJhbnNhY3Rpb25zKTtcblxuICAgIHBlbmRpbmd0eHNbY2xhaW1JZF0gPSB7IHR4aWQsIHR5cGUsIGVmZmVjdGl2ZSB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBwZW5kaW5nU3VwcG9ydFRyYW5zYWN0aW9uczogcGVuZGluZ3R4cyxcbiAgICAgIGFiYW5kb25DbGFpbVN1cHBvcnRFcnJvcjogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH0sXG5cbiAgW0FCQU5ET05fQ0xBSU1fU1VQUE9SVF9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgICAgYWJhbmRvbkNsYWltU3VwcG9ydEVycm9yOiBhY3Rpb24uZGF0YVxuICAgIH0pO1xuICB9LFxuXG4gIFtQRU5ESU5HX1NVUFBPUlRTX1VQREFURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBwZW5kaW5nU3VwcG9ydFRyYW5zYWN0aW9uczogYWN0aW9uLmRhdGFcbiAgICB9KTtcbiAgfSxcblxuICBbR0VUX05FV19BRERSRVNTX1NUQVJURURdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIGdldHRpbmdOZXdBZGRyZXNzOiB0cnVlXG4gIH0pLFxuXG4gIFtHRVRfTkVXX0FERFJFU1NfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IGdldHRpbmdOZXdBZGRyZXNzOiBmYWxzZSwgcmVjZWl2ZUFkZHJlc3M6IGFkZHJlc3MgfSk7XG4gIH0sXG5cbiAgW1VQREFURV9CQUxBTkNFXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgdG90YWxCYWxhbmNlOiBhY3Rpb24uZGF0YS50b3RhbEJhbGFuY2UsXG4gICAgYmFsYW5jZTogYWN0aW9uLmRhdGEuYmFsYW5jZSxcbiAgICByZXNlcnZlZEJhbGFuY2U6IGFjdGlvbi5kYXRhLnJlc2VydmVkQmFsYW5jZSxcbiAgICBjbGFpbXNCYWxhbmNlOiBhY3Rpb24uZGF0YS5jbGFpbXNCYWxhbmNlLFxuICAgIHN1cHBvcnRzQmFsYW5jZTogYWN0aW9uLmRhdGEuc3VwcG9ydHNCYWxhbmNlLFxuICAgIHRpcHNCYWxhbmNlOiBhY3Rpb24uZGF0YS50aXBzQmFsYW5jZVxuICB9KSxcblxuICBbQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURURdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIGNoZWNraW5nQWRkcmVzc093bmVyc2hpcDogdHJ1ZVxuICB9KSxcblxuICBbQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgY2hlY2tpbmdBZGRyZXNzT3duZXJzaGlwOiBmYWxzZVxuICB9KSxcblxuICBbU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FNT1VOVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb2xkRHJhZnQgPSBzdGF0ZS5kcmFmdFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG5ld0RyYWZ0ID0gX2V4dGVuZHMkaSh7fSwgb2xkRHJhZnQsIHsgYW1vdW50OiBwYXJzZUZsb2F0KGFjdGlvbi5kYXRhLmFtb3VudCkgfSk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHsgZHJhZnRUcmFuc2FjdGlvbjogbmV3RHJhZnQgfSk7XG4gIH0sXG5cbiAgW1NFVF9EUkFGVF9UUkFOU0FDVElPTl9BRERSRVNTXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBvbGREcmFmdCA9IHN0YXRlLmRyYWZ0VHJhbnNhY3Rpb247XG4gICAgY29uc3QgbmV3RHJhZnQgPSBfZXh0ZW5kcyRpKHt9LCBvbGREcmFmdCwgeyBhZGRyZXNzOiBhY3Rpb24uZGF0YS5hZGRyZXNzIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IGRyYWZ0VHJhbnNhY3Rpb246IG5ld0RyYWZ0IH0pO1xuICB9LFxuXG4gIFtTRU5EX1RSQU5TQUNUSU9OX1NUQVJURURdOiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgbmV3RHJhZnRUcmFuc2FjdGlvbiA9IF9leHRlbmRzJGkoe30sIHN0YXRlLmRyYWZ0VHJhbnNhY3Rpb24sIHsgc2VuZGluZzogdHJ1ZSB9KTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwgeyBkcmFmdFRyYW5zYWN0aW9uOiBuZXdEcmFmdFRyYW5zYWN0aW9uIH0pO1xuICB9LFxuXG4gIFtTRU5EX1RSQU5TQUNUSU9OX0NPTVBMRVRFRF06IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZHJhZnRUcmFuc2FjdGlvbjogYnVpbGREcmFmdFRyYW5zYWN0aW9uKClcbiAgfSksXG5cbiAgW1NFTkRfVFJBTlNBQ1RJT05fRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBuZXdEcmFmdFRyYW5zYWN0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZHJhZnRUcmFuc2FjdGlvbiwge1xuICAgICAgc2VuZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogYWN0aW9uLmRhdGEuZXJyb3JcbiAgICB9KTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwgeyBkcmFmdFRyYW5zYWN0aW9uOiBuZXdEcmFmdFRyYW5zYWN0aW9uIH0pO1xuICB9LFxuXG4gIFtTVVBQT1JUX1RSQU5TQUNUSU9OX1NUQVJURURdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHNlbmRpbmdTdXBwb3J0OiB0cnVlXG4gIH0pLFxuXG4gIFtTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgc2VuZGluZ1N1cHBvcnQ6IGZhbHNlXG4gIH0pLFxuXG4gIFtTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIGVycm9yOiBhY3Rpb24uZGF0YS5lcnJvcixcbiAgICBzZW5kaW5nU3VwcG9ydDogZmFsc2VcbiAgfSksXG5cbiAgW0NMRUFSX1NVUFBPUlRfVFJBTlNBQ1RJT05dOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHNlbmRpbmdTdXBwb3J0OiBmYWxzZVxuICB9KSxcblxuICBbV0FMTEVUX1NUQVRVU19DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRJc0VuY3J5cHRlZDogYWN0aW9uLnJlc3VsdFxuICB9KSxcblxuICBbV0FMTEVUX0VOQ1JZUFRfU1RBUlRdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldEVuY3J5cHRQZW5kaW5nOiB0cnVlLFxuICAgIHdhbGxldEVuY3J5cHRTdWNjZWRlZDogbnVsbCxcbiAgICB3YWxsZXRFbmNyeXB0UmVzdWx0OiBudWxsXG4gIH0pLFxuXG4gIFtXQUxMRVRfRU5DUllQVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRFbmNyeXB0UGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0RW5jcnlwdFN1Y2NlZGVkOiB0cnVlLFxuICAgIHdhbGxldEVuY3J5cHRSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9FTkNSWVBUX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldEVuY3J5cHRQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRFbmNyeXB0U3VjY2VkZWQ6IGZhbHNlLFxuICAgIHdhbGxldEVuY3J5cHRSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9ERUNSWVBUX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXREZWNyeXB0UGVuZGluZzogdHJ1ZSxcbiAgICB3YWxsZXREZWNyeXB0U3VjY2VkZWQ6IG51bGwsXG4gICAgd2FsbGV0RGVjcnlwdFJlc3VsdDogbnVsbFxuICB9KSxcblxuICBbV0FMTEVUX0RFQ1JZUFRfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0RGVjcnlwdFBlbmRpbmc6IGZhbHNlLFxuICAgIHdhbGxldERlY3J5cHRTdWNjZWRlZDogdHJ1ZSxcbiAgICB3YWxsZXREZWNyeXB0UmVzdWx0OiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtXQUxMRVRfREVDUllQVF9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXREZWNyeXB0UGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0RGVjcnlwdFN1Y2NlZGVkOiBmYWxzZSxcbiAgICB3YWxsZXREZWNyeXB0UmVzdWx0OiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtXQUxMRVRfVU5MT0NLX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRVbmxvY2tQZW5kaW5nOiB0cnVlLFxuICAgIHdhbGxldFVubG9ja1N1Y2NlZGVkOiBudWxsLFxuICAgIHdhbGxldFVubG9ja1Jlc3VsdDogbnVsbFxuICB9KSxcblxuICBbV0FMTEVUX1VOTE9DS19DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRVbmxvY2tQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRVbmxvY2tTdWNjZWRlZDogdHJ1ZSxcbiAgICB3YWxsZXRVbmxvY2tSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9VTkxPQ0tfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0VW5sb2NrUGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0VW5sb2NrU3VjY2VkZWQ6IGZhbHNlLFxuICAgIHdhbGxldFVubG9ja1Jlc3VsdDogYWN0aW9uLnJlc3VsdFxuICB9KSxcblxuICBbV0FMTEVUX0xPQ0tfU1RBUlRdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldExvY2tQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRMb2NrU3VjY2VkZWQ6IG51bGwsXG4gICAgd2FsbGV0TG9ja1Jlc3VsdDogbnVsbFxuICB9KSxcblxuICBbV0FMTEVUX0xPQ0tfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0TG9ja1BlbmRpbmc6IGZhbHNlLFxuICAgIHdhbGxldExvY2tTdWNjZWRlZDogdHJ1ZSxcbiAgICB3YWxsZXRMb2NrUmVzdWx0OiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtXQUxMRVRfTE9DS19GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRMb2NrUGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0TG9ja1N1Y2NlZGVkOiBmYWxzZSxcbiAgICB3YWxsZXRMb2NrUmVzdWx0OiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtTRVRfVFJBTlNBQ1RJT05fTElTVF9GSUxURVJdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB0cmFuc2FjdGlvbkxpc3RGaWx0ZXI6IGFjdGlvbi5kYXRhXG4gIH0pLFxuXG4gIFtVUERBVEVfQ1VSUkVOVF9IRUlHSFRdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICBsYXRlc3RCbG9jazogYWN0aW9uLmRhdGFcbiAgfSksXG4gIFtXQUxMRVRfUkVTVEFSVF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0UmVjb25uZWN0aW5nOiB0cnVlXG4gIH0pLFxuXG4gIFtXQUxMRVRfUkVTVEFSVF9DT01QTEVURURdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldFJlY29ubmVjdGluZzogZmFsc2VcbiAgfSlcbn0sIGRlZmF1bHRTdGF0ZSRhKTtcblxuLy8gICAgICBcblxuY29uc3Qgc2VsZWN0U3RhdGUkNiA9IHN0YXRlID0+IHN0YXRlLmNvbnRlbnQgfHwge307XG5cbmNvbnN0IG1ha2VTZWxlY3RDb250ZW50UG9zaXRpb25Gb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNiwgbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIChzdGF0ZSwgY2xhaW0pID0+IHtcbiAgaWYgKCFjbGFpbSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG91dHBvaW50ID0gYCR7Y2xhaW0udHhpZH06JHtjbGFpbS5ub3V0fWA7XG4gIGNvbnN0IGlkID0gY2xhaW0uY2xhaW1faWQ7XG4gIHJldHVybiBzdGF0ZS5wb3NpdGlvbnNbaWRdID8gc3RhdGUucG9zaXRpb25zW2lkXVtvdXRwb2ludF0gOiBudWxsO1xufSk7XG5cbnZhciBfZXh0ZW5kcyRqID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3Qgc2VsZWN0U3RhdGUkNyA9IHN0YXRlID0+IHN0YXRlLm5vdGlmaWNhdGlvbnMgfHwge307XG5cbmNvbnN0IHNlbGVjdFRvYXN0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNywgc3RhdGUgPT4ge1xuICBpZiAoc3RhdGUudG9hc3RzLmxlbmd0aCkge1xuICAgIGNvbnN0IHsgaWQsIHBhcmFtcyB9ID0gc3RhdGUudG9hc3RzWzBdO1xuICAgIHJldHVybiBfZXh0ZW5kcyRqKHtcbiAgICAgIGlkXG4gICAgfSwgcGFyYW1zKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSk7XG5cbmNvbnN0IHNlbGVjdEVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNywgc3RhdGUgPT4ge1xuICBpZiAoc3RhdGUuZXJyb3JzLmxlbmd0aCkge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHN0YXRlLmVycm9yc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59KTtcblxuLy8gICAgICBcblxuY29uc3Qgc2VsZWN0U3RhdGUkOCA9IHN0YXRlID0+IHN0YXRlLmNvbW1lbnRzIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RDb21tZW50c0J5SWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ4LCBzdGF0ZSA9PiBzdGF0ZS5jb21tZW50QnlJZCB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdENvbW1lbnRzQnlDbGFpbUlkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOCwgc2VsZWN0Q29tbWVudHNCeUlkLCAoc3RhdGUsIGJ5SWQpID0+IHtcbiAgY29uc3QgYnlDbGFpbUlkID0gc3RhdGUuYnlJZCB8fCB7fTtcbiAgY29uc3QgY29tbWVudHMgPSB7fTtcblxuICAvLyByZXBsYWNlIGV2ZXJ5IGNvbW1lbnRfaWQgaW4gdGhlIGxpc3Qgd2l0aCB0aGUgYWN0dWFsIGNvbW1lbnQgb2JqZWN0XG4gIE9iamVjdC5rZXlzKGJ5Q2xhaW1JZCkuZm9yRWFjaChjbGFpbUlkID0+IHtcbiAgICBjb25zdCBjb21tZW50SWRzID0gYnlDbGFpbUlkW2NsYWltSWRdO1xuXG4gICAgY29tbWVudHNbY2xhaW1JZF0gPSBBcnJheShjb21tZW50SWRzID09PSBudWxsID8gMCA6IGNvbW1lbnRJZHMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnRJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbW1lbnRzW2NsYWltSWRdW2ldID0gYnlJZFtjb21tZW50SWRzW2ldXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb21tZW50cztcbn0pO1xuXG4vLyBwcmV2aW91c2x5IHRoaXMgdXNlZCBhIG1hcHBpbmcgZnJvbSBjbGFpbUlkIC0+IEFycmF5PENvbW1lbnRzPlxuLyogZXhwb3J0IGNvbnN0IHNlbGVjdENvbW1lbnRzQnlJZCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuYnlJZCB8fCB7fVxuKTsgKi9cbmNvbnN0IHNlbGVjdENvbW1lbnRzQnlVcmkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ4LCBzdGF0ZSA9PiB7XG4gIGNvbnN0IGJ5VXJpID0gc3RhdGUuY29tbWVudHNCeVVyaSB8fCB7fTtcbiAgY29uc3QgY29tbWVudHMgPSB7fTtcbiAgT2JqZWN0LmtleXMoYnlVcmkpLmZvckVhY2godXJpID0+IHtcbiAgICBjb25zdCBjbGFpbUlkID0gYnlVcmlbdXJpXTtcbiAgICBpZiAoY2xhaW1JZCA9PT0gbnVsbCkge1xuICAgICAgY29tbWVudHNbdXJpXSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1lbnRzW3VyaV0gPSBjbGFpbUlkO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbW1lbnRzO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDb21tZW50c0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDb21tZW50c0J5Q2xhaW1JZCwgc2VsZWN0Q29tbWVudHNCeVVyaSwgKGJ5Q2xhaW1JZCwgYnlVcmkpID0+IHtcbiAgY29uc3QgY2xhaW1JZCA9IGJ5VXJpW3VyaV07XG4gIHJldHVybiBieUNsYWltSWQgJiYgYnlDbGFpbUlkW2NsYWltSWRdO1xufSk7XG5cbi8vIHRvZG86IGFsbG93IFNESyB0byByZXRyaWV2ZSB1c2VyIGNvbW1lbnRzIHRocm91Z2ggY29tbWVudF9saXN0XG4vLyB0b2RvOiBpbXBsZW1lbnQgc2VsZWN0b3JzIGZvciBzZWxlY3RpbmcgY29tbWVudHMgb3duZWQgYnkgdXNlclxuXG4vLyAgICAgIFxuXG5jb25zdCBzZWxlY3RTdGF0ZSQ5ID0gc3RhdGUgPT4gc3RhdGUudGFncyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0S25vd25UYWdzQnlOYW1lID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUua25vd25UYWdzKTtcblxuY29uc3Qgc2VsZWN0Rm9sbG93ZWRUYWdzTGlzdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLmZvbGxvd2VkVGFncy5maWx0ZXIodGFnID0+IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnKSk7XG5cbmNvbnN0IHNlbGVjdEZvbGxvd2VkVGFncyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZvbGxvd2VkVGFnc0xpc3QsIGZvbGxvd2VkVGFncyA9PiBmb2xsb3dlZFRhZ3MubWFwKHRhZyA9PiAoeyBuYW1lOiB0YWcudG9Mb3dlckNhc2UoKSB9KSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpO1xuXG5jb25zdCBzZWxlY3RVbmZvbGxvd2VkVGFncyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEtub3duVGFnc0J5TmFtZSwgc2VsZWN0Rm9sbG93ZWRUYWdzTGlzdCwgKHRhZ3NCeU5hbWUsIGZvbGxvd2VkVGFncykgPT4ge1xuICBjb25zdCBmb2xsb3dlZFRhZ3NTZXQgPSBuZXcgU2V0KGZvbGxvd2VkVGFncyk7XG4gIGxldCB0YWdzVG9SZXR1cm4gPSBbXTtcbiAgT2JqZWN0LmtleXModGFnc0J5TmFtZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICghZm9sbG93ZWRUYWdzU2V0LmhhcyhrZXkpKSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IHRhZ3NCeU5hbWVba2V5XTtcbiAgICAgIHRhZ3NUb1JldHVybi5wdXNoKHsgbmFtZTogbmFtZS50b0xvd2VyQ2FzZSgpIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRhZ3NUb1JldHVybjtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0SXNGb2xsb3dpbmdUYWcgPSB0YWcgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Rm9sbG93ZWRUYWdzLCBmb2xsb3dlZFRhZ3MgPT4ge1xuICByZXR1cm4gZm9sbG93ZWRUYWdzLnNvbWUoZm9sbG93ZWRUYWcgPT4gZm9sbG93ZWRUYWcubmFtZSA9PT0gdGFnLnRvTG93ZXJDYXNlKCkpO1xufSk7XG5cbi8vICAgICAgXG5cbmNvbnN0IHNlbGVjdFN0YXRlJGEgPSBzdGF0ZSA9PiBzdGF0ZS5ibG9ja2VkIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RCbG9ja2VkQ2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSRhLCBzdGF0ZSA9PiBzdGF0ZS5ibG9ja2VkQ2hhbm5lbHMpO1xuXG5jb25zdCBzZWxlY3RCbG9ja2VkQ2hhbm5lbHNDb3VudCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEJsb2NrZWRDaGFubmVscywgc3RhdGUgPT4gc3RhdGUubGVuZ3RoKTtcblxuY29uc3Qgc2VsZWN0Q2hhbm5lbElzQmxvY2tlZCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RCbG9ja2VkQ2hhbm5lbHMsIHN0YXRlID0+IHtcbiAgcmV0dXJuIHN0YXRlLmluY2x1ZGVzKHVyaSk7XG59KTtcblxuZXhwb3J0cy5BQ1RJT05TID0gYWN0aW9uX3R5cGVzO1xuZXhwb3J0cy5DTEFJTV9WQUxVRVMgPSBjbGFpbTtcbmV4cG9ydHMuREFFTU9OX1NFVFRJTkdTID0gZGFlbW9uX3NldHRpbmdzO1xuZXhwb3J0cy5ERUZBVUxUX0ZPTExPV0VEX1RBR1MgPSBERUZBVUxUX0ZPTExPV0VEX1RBR1M7XG5leHBvcnRzLkRFRkFVTFRfS05PV05fVEFHUyA9IERFRkFVTFRfS05PV05fVEFHUztcbmV4cG9ydHMuTElDRU5TRVMgPSBsaWNlbnNlcztcbmV4cG9ydHMuTGJyeSA9IGxicnlQcm94eTtcbmV4cG9ydHMuTUFUVVJFX1RBR1MgPSBNQVRVUkVfVEFHUztcbmV4cG9ydHMuUEFHRVMgPSBwYWdlcztcbmV4cG9ydHMuU0VBUkNIX09QVElPTlMgPSBTRUFSQ0hfT1BUSU9OUztcbmV4cG9ydHMuU0VBUkNIX1RZUEVTID0gU0VBUkNIX1RZUEVTO1xuZXhwb3J0cy5TRVRUSU5HUyA9IHNldHRpbmdzO1xuZXhwb3J0cy5TSEFSRURfUFJFRkVSRU5DRVMgPSBzaGFyZWRfcHJlZmVyZW5jZXM7XG5leHBvcnRzLlNPUlRfT1BUSU9OUyA9IHNvcnRfb3B0aW9ucztcbmV4cG9ydHMuU1BFRUNIX1VSTFMgPSBzcGVlY2hfdXJscztcbmV4cG9ydHMuVEhVTUJOQUlMX1NUQVRVU0VTID0gdGh1bWJuYWlsX3VwbG9hZF9zdGF0dXNlcztcbmV4cG9ydHMuVFJBTlNBQ1RJT05TID0gdHJhbnNhY3Rpb25fdHlwZXM7XG5leHBvcnRzLlRYX0xJU1QgPSB0cmFuc2FjdGlvbl9saXN0O1xuZXhwb3J0cy5hcGlDYWxsID0gYXBpQ2FsbDtcbmV4cG9ydHMuYmF0Y2hBY3Rpb25zID0gYmF0Y2hBY3Rpb25zO1xuZXhwb3J0cy5ibG9ja2VkUmVkdWNlciA9IGJsb2NrZWRSZWR1Y2VyO1xuZXhwb3J0cy5idWlsZFNoYXJlZFN0YXRlTWlkZGxld2FyZSA9IGJ1aWxkU2hhcmVkU3RhdGVNaWRkbGV3YXJlO1xuZXhwb3J0cy5idWlsZFVSSSA9IGJ1aWxkVVJJO1xuZXhwb3J0cy5jbGFpbXNSZWR1Y2VyID0gY2xhaW1zUmVkdWNlcjtcbmV4cG9ydHMuY29tbWVudFJlZHVjZXIgPSBjb21tZW50UmVkdWNlcjtcbmV4cG9ydHMuY29udGVudFJlZHVjZXIgPSBjb250ZW50UmVkdWNlcjtcbmV4cG9ydHMuY29udmVydFRvU2hhcmVMaW5rID0gY29udmVydFRvU2hhcmVMaW5rO1xuZXhwb3J0cy5jcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXkgPSBjcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXk7XG5leHBvcnRzLmNyZWRpdHNUb1N0cmluZyA9IGNyZWRpdHNUb1N0cmluZztcbmV4cG9ydHMuZG9BYmFuZG9uQ2xhaW0gPSBkb0FiYW5kb25DbGFpbTtcbmV4cG9ydHMuZG9BZGRUYWcgPSBkb0FkZFRhZztcbmV4cG9ydHMuZG9CYWxhbmNlU3Vic2NyaWJlID0gZG9CYWxhbmNlU3Vic2NyaWJlO1xuZXhwb3J0cy5kb0JsdXJTZWFyY2hJbnB1dCA9IGRvQmx1clNlYXJjaElucHV0O1xuZXhwb3J0cy5kb0NoZWNrQWRkcmVzc0lzTWluZSA9IGRvQ2hlY2tBZGRyZXNzSXNNaW5lO1xuZXhwb3J0cy5kb0NoZWNrUGVuZGluZ1B1Ymxpc2hlcyA9IGRvQ2hlY2tQZW5kaW5nUHVibGlzaGVzO1xuZXhwb3J0cy5kb0NsYWltU2VhcmNoID0gZG9DbGFpbVNlYXJjaDtcbmV4cG9ydHMuZG9DbGVhclB1Ymxpc2ggPSBkb0NsZWFyUHVibGlzaDtcbmV4cG9ydHMuZG9DbGVhclJlcG9zdEVycm9yID0gZG9DbGVhclJlcG9zdEVycm9yO1xuZXhwb3J0cy5kb0NsZWFyU3VwcG9ydCA9IGRvQ2xlYXJTdXBwb3J0O1xuZXhwb3J0cy5kb0NvbW1lbnRBYmFuZG9uID0gZG9Db21tZW50QWJhbmRvbjtcbmV4cG9ydHMuZG9Db21tZW50Q3JlYXRlID0gZG9Db21tZW50Q3JlYXRlO1xuZXhwb3J0cy5kb0NvbW1lbnRIaWRlID0gZG9Db21tZW50SGlkZTtcbmV4cG9ydHMuZG9Db21tZW50TGlzdCA9IGRvQ29tbWVudExpc3Q7XG5leHBvcnRzLmRvQ29tbWVudFVwZGF0ZSA9IGRvQ29tbWVudFVwZGF0ZTtcbmV4cG9ydHMuZG9DcmVhdGVDaGFubmVsID0gZG9DcmVhdGVDaGFubmVsO1xuZXhwb3J0cy5kb0RlbGV0ZVB1cmNoYXNlZFVyaSA9IGRvRGVsZXRlUHVyY2hhc2VkVXJpO1xuZXhwb3J0cy5kb0RlbGV0ZVRhZyA9IGRvRGVsZXRlVGFnO1xuZXhwb3J0cy5kb0Rpc21pc3NFcnJvciA9IGRvRGlzbWlzc0Vycm9yO1xuZXhwb3J0cy5kb0Rpc21pc3NUb2FzdCA9IGRvRGlzbWlzc1RvYXN0O1xuZXhwb3J0cy5kb0Vycm9yID0gZG9FcnJvcjtcbmV4cG9ydHMuZG9GZXRjaENoYW5uZWxMaXN0TWluZSA9IGRvRmV0Y2hDaGFubmVsTGlzdE1pbmU7XG5leHBvcnRzLmRvRmV0Y2hDbGFpbUxpc3RNaW5lID0gZG9GZXRjaENsYWltTGlzdE1pbmU7XG5leHBvcnRzLmRvRmV0Y2hDbGFpbXNCeUNoYW5uZWwgPSBkb0ZldGNoQ2xhaW1zQnlDaGFubmVsO1xuZXhwb3J0cy5kb0ZldGNoRmlsZUluZm8gPSBkb0ZldGNoRmlsZUluZm87XG5leHBvcnRzLmRvRmV0Y2hGaWxlSW5mb3NBbmRQdWJsaXNoZWRDbGFpbXMgPSBkb0ZldGNoRmlsZUluZm9zQW5kUHVibGlzaGVkQ2xhaW1zO1xuZXhwb3J0cy5kb0ZldGNoVHJhbnNhY3Rpb25zID0gZG9GZXRjaFRyYW5zYWN0aW9ucztcbmV4cG9ydHMuZG9GaWxlR2V0ID0gZG9GaWxlR2V0O1xuZXhwb3J0cy5kb0ZpbGVMaXN0ID0gZG9GaWxlTGlzdDtcbmV4cG9ydHMuZG9Gb2N1c1NlYXJjaElucHV0ID0gZG9Gb2N1c1NlYXJjaElucHV0O1xuZXhwb3J0cy5kb0dldE5ld0FkZHJlc3MgPSBkb0dldE5ld0FkZHJlc3M7XG5leHBvcnRzLmRvSW1wb3J0Q2hhbm5lbCA9IGRvSW1wb3J0Q2hhbm5lbDtcbmV4cG9ydHMuZG9Qb3B1bGF0ZVNoYXJlZFVzZXJTdGF0ZSA9IGRvUG9wdWxhdGVTaGFyZWRVc2VyU3RhdGU7XG5leHBvcnRzLmRvUHJlZmVyZW5jZUdldCA9IGRvUHJlZmVyZW5jZUdldDtcbmV4cG9ydHMuZG9QcmVmZXJlbmNlU2V0ID0gZG9QcmVmZXJlbmNlU2V0O1xuZXhwb3J0cy5kb1ByZXBhcmVFZGl0ID0gZG9QcmVwYXJlRWRpdDtcbmV4cG9ydHMuZG9QdWJsaXNoID0gZG9QdWJsaXNoO1xuZXhwb3J0cy5kb1B1cmNoYXNlVXJpID0gZG9QdXJjaGFzZVVyaTtcbmV4cG9ydHMuZG9SZXBvc3QgPSBkb1JlcG9zdDtcbmV4cG9ydHMuZG9SZXNldFRodW1ibmFpbFN0YXR1cyA9IGRvUmVzZXRUaHVtYm5haWxTdGF0dXM7XG5leHBvcnRzLmRvUmVzb2x2ZVVyaSA9IGRvUmVzb2x2ZVVyaTtcbmV4cG9ydHMuZG9SZXNvbHZlVXJpcyA9IGRvUmVzb2x2ZVVyaXM7XG5leHBvcnRzLmRvUmVzb2x2ZWRTZWFyY2ggPSBkb1Jlc29sdmVkU2VhcmNoO1xuZXhwb3J0cy5kb1NlYXJjaCA9IGRvU2VhcmNoO1xuZXhwb3J0cy5kb1NlbmREcmFmdFRyYW5zYWN0aW9uID0gZG9TZW5kRHJhZnRUcmFuc2FjdGlvbjtcbmV4cG9ydHMuZG9TZW5kVGlwID0gZG9TZW5kVGlwO1xuZXhwb3J0cy5kb1NldERyYWZ0VHJhbnNhY3Rpb25BZGRyZXNzID0gZG9TZXREcmFmdFRyYW5zYWN0aW9uQWRkcmVzcztcbmV4cG9ydHMuZG9TZXREcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gZG9TZXREcmFmdFRyYW5zYWN0aW9uQW1vdW50O1xuZXhwb3J0cy5kb1NldEZpbGVMaXN0U29ydCA9IGRvU2V0RmlsZUxpc3RTb3J0O1xuZXhwb3J0cy5kb1NldFRyYW5zYWN0aW9uTGlzdEZpbHRlciA9IGRvU2V0VHJhbnNhY3Rpb25MaXN0RmlsdGVyO1xuZXhwb3J0cy5kb1N1cHBvcnRBYmFuZG9uRm9yQ2xhaW0gPSBkb1N1cHBvcnRBYmFuZG9uRm9yQ2xhaW07XG5leHBvcnRzLmRvVG9hc3QgPSBkb1RvYXN0O1xuZXhwb3J0cy5kb1RvZ2dsZUJsb2NrQ2hhbm5lbCA9IGRvVG9nZ2xlQmxvY2tDaGFubmVsO1xuZXhwb3J0cy5kb1RvZ2dsZVRhZ0ZvbGxvdyA9IGRvVG9nZ2xlVGFnRm9sbG93O1xuZXhwb3J0cy5kb1VwZGF0ZUJhbGFuY2UgPSBkb1VwZGF0ZUJhbGFuY2U7XG5leHBvcnRzLmRvVXBkYXRlQmxvY2tIZWlnaHQgPSBkb1VwZGF0ZUJsb2NrSGVpZ2h0O1xuZXhwb3J0cy5kb1VwZGF0ZUNoYW5uZWwgPSBkb1VwZGF0ZUNoYW5uZWw7XG5leHBvcnRzLmRvVXBkYXRlUHVibGlzaEZvcm0gPSBkb1VwZGF0ZVB1Ymxpc2hGb3JtO1xuZXhwb3J0cy5kb1VwZGF0ZVNlYXJjaE9wdGlvbnMgPSBkb1VwZGF0ZVNlYXJjaE9wdGlvbnM7XG5leHBvcnRzLmRvVXBkYXRlU2VhcmNoUXVlcnkgPSBkb1VwZGF0ZVNlYXJjaFF1ZXJ5O1xuZXhwb3J0cy5kb1VwbG9hZFRodW1ibmFpbCA9IGRvVXBsb2FkVGh1bWJuYWlsO1xuZXhwb3J0cy5kb1dhbGxldERlY3J5cHQgPSBkb1dhbGxldERlY3J5cHQ7XG5leHBvcnRzLmRvV2FsbGV0RW5jcnlwdCA9IGRvV2FsbGV0RW5jcnlwdDtcbmV4cG9ydHMuZG9XYWxsZXRSZWNvbm5lY3QgPSBkb1dhbGxldFJlY29ubmVjdDtcbmV4cG9ydHMuZG9XYWxsZXRTdGF0dXMgPSBkb1dhbGxldFN0YXR1cztcbmV4cG9ydHMuZG9XYWxsZXRVbmxvY2sgPSBkb1dhbGxldFVubG9jaztcbmV4cG9ydHMuZmlsZUluZm9SZWR1Y2VyID0gZmlsZUluZm9SZWR1Y2VyO1xuZXhwb3J0cy5maWxlUmVkdWNlciA9IGZpbGVSZWR1Y2VyO1xuZXhwb3J0cy5mb3JtYXRDcmVkaXRzID0gZm9ybWF0Q3JlZGl0cztcbmV4cG9ydHMuZm9ybWF0RnVsbFByaWNlID0gZm9ybWF0RnVsbFByaWNlO1xuZXhwb3J0cy5pc0NsYWltTnNmdyA9IGlzQ2xhaW1Oc2Z3O1xuZXhwb3J0cy5pc05hbWVWYWxpZCA9IGlzTmFtZVZhbGlkO1xuZXhwb3J0cy5pc1VSSUNsYWltYWJsZSA9IGlzVVJJQ2xhaW1hYmxlO1xuZXhwb3J0cy5pc1VSSVZhbGlkID0gaXNVUklWYWxpZDtcbmV4cG9ydHMubWFrZVNlbGVjdEFtb3VudEZvclVyaSA9IG1ha2VTZWxlY3RBbW91bnRGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RDYW5vbmljYWxVcmxGb3JVcmkgPSBtYWtlU2VsZWN0Q2Fub25pY2FsVXJsRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpID0gbWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltRm9yVXJpID0gbWFrZVNlbGVjdENsYWltRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2xhaW1Jc01pbmUgPSBtYWtlU2VsZWN0Q2xhaW1Jc01pbmU7XG5leHBvcnRzLm1ha2VTZWxlY3RDbGFpbUlzTnNmdyA9IG1ha2VTZWxlY3RDbGFpbUlzTnNmdztcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltSXNQZW5kaW5nID0gbWFrZVNlbGVjdENsYWltSXNQZW5kaW5nO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yQ3VycmVudFBhZ2VTdGF0ZSA9IG1ha2VTZWxlY3RDbGFpbXNJbkNoYW5uZWxGb3JDdXJyZW50UGFnZVN0YXRlO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yUGFnZSA9IG1ha2VTZWxlY3RDbGFpbXNJbkNoYW5uZWxGb3JQYWdlO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q29tbWVudHNGb3JVcmkgPSBtYWtlU2VsZWN0Q29tbWVudHNGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RDb250ZW50UG9zaXRpb25Gb3JVcmkgPSBtYWtlU2VsZWN0Q29udGVudFBvc2l0aW9uRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkgPSBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RDb3ZlckZvclVyaSA9IG1ha2VTZWxlY3RDb3ZlckZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdERhdGVGb3JVcmkgPSBtYWtlU2VsZWN0RGF0ZUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdERvd25sb2FkUGF0aEZvclVyaSA9IG1ha2VTZWxlY3REb3dubG9hZFBhdGhGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3REb3dubG9hZGluZ0ZvclVyaSA9IG1ha2VTZWxlY3REb3dubG9hZGluZ0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdEZldGNoaW5nQ2hhbm5lbENsYWltcyA9IG1ha2VTZWxlY3RGZXRjaGluZ0NoYW5uZWxDbGFpbXM7XG5leHBvcnRzLm1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSA9IG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdEZpbGVOYW1lRm9yVXJpID0gbWFrZVNlbGVjdEZpbGVOYW1lRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0RmlsZVBhcnRseURvd25sb2FkZWQgPSBtYWtlU2VsZWN0RmlsZVBhcnRseURvd25sb2FkZWQ7XG5leHBvcnRzLm1ha2VTZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9uc0ZvclBhZ2UgPSBtYWtlU2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbnNGb3JQYWdlO1xuZXhwb3J0cy5tYWtlU2VsZWN0Rmlyc3RSZWNvbW1lbmRlZEZpbGVGb3JVcmkgPSBtYWtlU2VsZWN0Rmlyc3RSZWNvbW1lbmRlZEZpbGVGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RJc0ZvbGxvd2luZ1RhZyA9IG1ha2VTZWxlY3RJc0ZvbGxvd2luZ1RhZztcbmV4cG9ydHMubWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nID0gbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nO1xuZXhwb3J0cy5tYWtlU2VsZWN0TGF0ZXN0VHJhbnNhY3Rpb25zID0gbWFrZVNlbGVjdExhdGVzdFRyYW5zYWN0aW9ucztcbmV4cG9ydHMubWFrZVNlbGVjdExvYWRpbmdGb3JVcmkgPSBtYWtlU2VsZWN0TG9hZGluZ0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdE1lZGlhVHlwZUZvclVyaSA9IG1ha2VTZWxlY3RNZWRpYVR5cGVGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSA9IG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdE1ldGFkYXRhSXRlbUZvclVyaSA9IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RNeVN0cmVhbVVybHNGb3JQYWdlID0gbWFrZVNlbGVjdE15U3RyZWFtVXJsc0ZvclBhZ2U7XG5leHBvcnRzLm1ha2VTZWxlY3ROc2Z3Q291bnRGb3JDaGFubmVsID0gbWFrZVNlbGVjdE5zZndDb3VudEZvckNoYW5uZWw7XG5leHBvcnRzLm1ha2VTZWxlY3ROc2Z3Q291bnRGcm9tVXJpcyA9IG1ha2VTZWxlY3ROc2Z3Q291bnRGcm9tVXJpcztcbmV4cG9ydHMubWFrZVNlbGVjdE9taXR0ZWRDb3VudEZvckNoYW5uZWwgPSBtYWtlU2VsZWN0T21pdHRlZENvdW50Rm9yQ2hhbm5lbDtcbmV4cG9ydHMubWFrZVNlbGVjdFBlbmRpbmdBbW91bnRCeVVyaSA9IG1ha2VTZWxlY3RQZW5kaW5nQW1vdW50QnlVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RQZW5kaW5nQnlVcmkgPSBtYWtlU2VsZWN0UGVuZGluZ0J5VXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0UGVybWFuZW50VXJsRm9yVXJpID0gbWFrZVNlbGVjdFBlcm1hbmVudFVybEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUgPSBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZTtcbmV4cG9ydHMubWFrZVNlbGVjdFF1ZXJ5V2l0aE9wdGlvbnMgPSBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucztcbmV4cG9ydHMubWFrZVNlbGVjdFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9IG1ha2VTZWxlY3RSZWNvbW1lbmRlZENvbnRlbnRGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9IG1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0cyA9IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHM7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNMYXN0UGFnZVJlYWNoZWQgPSBtYWtlU2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzTGFzdFBhZ2VSZWFjaGVkO1xuZXhwb3J0cy5tYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzQ291bnQgPSBtYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzQ291bnQ7XG5leHBvcnRzLm1ha2VTZWxlY3RTZWFyY2hEb3dubG9hZFVybHNGb3JQYWdlID0gbWFrZVNlbGVjdFNlYXJjaERvd25sb2FkVXJsc0ZvclBhZ2U7XG5leHBvcnRzLm1ha2VTZWxlY3RTZWFyY2hVcmlzID0gbWFrZVNlbGVjdFNlYXJjaFVyaXM7XG5leHBvcnRzLm1ha2VTZWxlY3RTaG9ydFVybEZvclVyaSA9IG1ha2VTZWxlY3RTaG9ydFVybEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaSA9IG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RTdXBwb3J0c0ZvclVyaSA9IG1ha2VTZWxlY3RTdXBwb3J0c0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRhZ3NGb3JVcmkgPSBtYWtlU2VsZWN0VGFnc0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSA9IG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RUaXRsZUZvclVyaSA9IG1ha2VTZWxlY3RUaXRsZUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoID0gbWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoO1xuZXhwb3J0cy5tYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwgPSBtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWw7XG5leHBvcnRzLm1ha2VTZWxlY3RUb3RhbFBhZ2VzRm9yQ2hhbm5lbCA9IG1ha2VTZWxlY3RUb3RhbFBhZ2VzRm9yQ2hhbm5lbDtcbmV4cG9ydHMubWFrZVNlbGVjdFRvdGFsUGFnZXNJbkNoYW5uZWxTZWFyY2ggPSBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaDtcbmV4cG9ydHMubWFrZVNlbGVjdFVyaUlzU3RyZWFtYWJsZSA9IG1ha2VTZWxlY3RVcmlJc1N0cmVhbWFibGU7XG5leHBvcnRzLm5vcm1hbGl6ZVVSSSA9IG5vcm1hbGl6ZVVSSTtcbmV4cG9ydHMubm90aWZpY2F0aW9uc1JlZHVjZXIgPSBub3RpZmljYXRpb25zUmVkdWNlcjtcbmV4cG9ydHMucGFyc2VRdWVyeVBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXM7XG5leHBvcnRzLnBhcnNlVVJJID0gcGFyc2VVUkk7XG5leHBvcnRzLnB1Ymxpc2hSZWR1Y2VyID0gcHVibGlzaFJlZHVjZXI7XG5leHBvcnRzLnJlZ2V4QWRkcmVzcyA9IHJlZ2V4QWRkcmVzcztcbmV4cG9ydHMucmVnZXhJbnZhbGlkVVJJID0gcmVnZXhJbnZhbGlkVVJJO1xuZXhwb3J0cy5zYXZlUG9zaXRpb24gPSBzYXZlUG9zaXRpb247XG5leHBvcnRzLnNlYXJjaFJlZHVjZXIgPSBzZWFyY2hSZWR1Y2VyO1xuZXhwb3J0cy5zZWxlY3RBYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3IgPSBzZWxlY3RBYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3I7XG5leHBvcnRzLnNlbGVjdEFiYW5kb25pbmdJZHMgPSBzZWxlY3RBYmFuZG9uaW5nSWRzO1xuZXhwb3J0cy5zZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwgPSBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWw7XG5leHBvcnRzLnNlbGVjdEFsbEZldGNoaW5nQ2hhbm5lbENsYWltcyA9IHNlbGVjdEFsbEZldGNoaW5nQ2hhbm5lbENsYWltcztcbmV4cG9ydHMuc2VsZWN0QWxsTXlDbGFpbXNCeU91dHBvaW50ID0gc2VsZWN0QWxsTXlDbGFpbXNCeU91dHBvaW50O1xuZXhwb3J0cy5zZWxlY3RCYWxhbmNlID0gc2VsZWN0QmFsYW5jZTtcbmV4cG9ydHMuc2VsZWN0QmxvY2tlZENoYW5uZWxzID0gc2VsZWN0QmxvY2tlZENoYW5uZWxzO1xuZXhwb3J0cy5zZWxlY3RCbG9ja2VkQ2hhbm5lbHNDb3VudCA9IHNlbGVjdEJsb2NrZWRDaGFubmVsc0NvdW50O1xuZXhwb3J0cy5zZWxlY3RCbG9ja3MgPSBzZWxlY3RCbG9ja3M7XG5leHBvcnRzLnNlbGVjdENoYW5uZWxDbGFpbUNvdW50cyA9IHNlbGVjdENoYW5uZWxDbGFpbUNvdW50cztcbmV4cG9ydHMuc2VsZWN0Q2hhbm5lbEltcG9ydFBlbmRpbmcgPSBzZWxlY3RDaGFubmVsSW1wb3J0UGVuZGluZztcbmV4cG9ydHMuc2VsZWN0Q2hhbm5lbElzQmxvY2tlZCA9IHNlbGVjdENoYW5uZWxJc0Jsb2NrZWQ7XG5leHBvcnRzLnNlbGVjdENsYWltSWRzQnlVcmkgPSBzZWxlY3RDbGFpbUlkc0J5VXJpO1xuZXhwb3J0cy5zZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnkgPSBzZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnk7XG5leHBvcnRzLnNlbGVjdENsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCA9IHNlbGVjdENsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZDtcbmV4cG9ydHMuc2VsZWN0Q2xhaW1zQmFsYW5jZSA9IHNlbGVjdENsYWltc0JhbGFuY2U7XG5leHBvcnRzLnNlbGVjdENsYWltc0J5SWQgPSBzZWxlY3RDbGFpbXNCeUlkO1xuZXhwb3J0cy5zZWxlY3RDbGFpbXNCeVVyaSA9IHNlbGVjdENsYWltc0J5VXJpO1xuZXhwb3J0cy5zZWxlY3RDcmVhdGVDaGFubmVsRXJyb3IgPSBzZWxlY3RDcmVhdGVDaGFubmVsRXJyb3I7XG5leHBvcnRzLnNlbGVjdENyZWF0aW5nQ2hhbm5lbCA9IHNlbGVjdENyZWF0aW5nQ2hhbm5lbDtcbmV4cG9ydHMuc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlID0gc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlO1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZFVybHNDb3VudCA9IHNlbGVjdERvd25sb2FkVXJsc0NvdW50O1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZGVkVXJpcyA9IHNlbGVjdERvd25sb2FkZWRVcmlzO1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQgPSBzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQ7XG5leHBvcnRzLnNlbGVjdERvd25sb2FkaW5nRmlsZUluZm9zID0gc2VsZWN0RG93bmxvYWRpbmdGaWxlSW5mb3M7XG5leHBvcnRzLnNlbGVjdERyYWZ0VHJhbnNhY3Rpb24gPSBzZWxlY3REcmFmdFRyYW5zYWN0aW9uO1xuZXhwb3J0cy5zZWxlY3REcmFmdFRyYW5zYWN0aW9uQWRkcmVzcyA9IHNlbGVjdERyYWZ0VHJhbnNhY3Rpb25BZGRyZXNzO1xuZXhwb3J0cy5zZWxlY3REcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkFtb3VudDtcbmV4cG9ydHMuc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yID0gc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yO1xuZXhwb3J0cy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuZXhwb3J0cy5zZWxlY3RGYWlsZWRQdXJjaGFzZVVyaXMgPSBzZWxlY3RGYWlsZWRQdXJjaGFzZVVyaXM7XG5leHBvcnRzLnNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2ggPSBzZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IHNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5O1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMgPSBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHM7XG5leHBvcnRzLnNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQgPSBzZWxlY3RGaWxlSW5mb3NCeU91dHBvaW50O1xuZXhwb3J0cy5zZWxlY3RGaWxlSW5mb3NEb3dubG9hZGVkID0gc2VsZWN0RmlsZUluZm9zRG93bmxvYWRlZDtcbmV4cG9ydHMuc2VsZWN0RmlsZUxpc3REb3dubG9hZGVkU29ydCA9IHNlbGVjdEZpbGVMaXN0RG93bmxvYWRlZFNvcnQ7XG5leHBvcnRzLnNlbGVjdEZpbGVMaXN0UHVibGlzaGVkU29ydCA9IHNlbGVjdEZpbGVMaXN0UHVibGlzaGVkU29ydDtcbmV4cG9ydHMuc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50ID0gc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50O1xuZXhwb3J0cy5zZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucyA9IHNlbGVjdEZpbHRlcmVkVHJhbnNhY3Rpb25zO1xuZXhwb3J0cy5zZWxlY3RGb2xsb3dlZFRhZ3MgPSBzZWxlY3RGb2xsb3dlZFRhZ3M7XG5leHBvcnRzLnNlbGVjdEZvbGxvd2VkVGFnc0xpc3QgPSBzZWxlY3RGb2xsb3dlZFRhZ3NMaXN0O1xuZXhwb3J0cy5zZWxlY3RHZXR0aW5nTmV3QWRkcmVzcyA9IHNlbGVjdEdldHRpbmdOZXdBZGRyZXNzO1xuZXhwb3J0cy5zZWxlY3RIYXNUcmFuc2FjdGlvbnMgPSBzZWxlY3RIYXNUcmFuc2FjdGlvbnM7XG5leHBvcnRzLnNlbGVjdElzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lID0gc2VsZWN0SXNGZXRjaGluZ0NsYWltTGlzdE1pbmU7XG5leHBvcnRzLnNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdCA9IHNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdDtcbmV4cG9ydHMuc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0RG93bmxvYWRlZE9yUHVibGlzaGVkID0gc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0RG93bmxvYWRlZE9yUHVibGlzaGVkO1xuZXhwb3J0cy5zZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zID0gc2VsZWN0SXNGZXRjaGluZ1RyYW5zYWN0aW9ucztcbmV4cG9ydHMuc2VsZWN0SXNSZXNvbHZpbmdQdWJsaXNoVXJpcyA9IHNlbGVjdElzUmVzb2x2aW5nUHVibGlzaFVyaXM7XG5leHBvcnRzLnNlbGVjdElzU2VhcmNoaW5nID0gc2VsZWN0SXNTZWFyY2hpbmc7XG5leHBvcnRzLnNlbGVjdElzU2VuZGluZ1N1cHBvcnQgPSBzZWxlY3RJc1NlbmRpbmdTdXBwb3J0O1xuZXhwb3J0cy5zZWxlY3RJc1N0aWxsRWRpdGluZyA9IHNlbGVjdElzU3RpbGxFZGl0aW5nO1xuZXhwb3J0cy5zZWxlY3RJc1dhbGxldFJlY29ubmVjdGluZyA9IHNlbGVjdElzV2FsbGV0UmVjb25uZWN0aW5nO1xuZXhwb3J0cy5zZWxlY3RMYXN0UHVyY2hhc2VkVXJpID0gc2VsZWN0TGFzdFB1cmNoYXNlZFVyaTtcbmV4cG9ydHMuc2VsZWN0TXlBY3RpdmVDbGFpbXMgPSBzZWxlY3RNeUFjdGl2ZUNsYWltcztcbmV4cG9ydHMuc2VsZWN0TXlDaGFubmVsQ2xhaW1zID0gc2VsZWN0TXlDaGFubmVsQ2xhaW1zO1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltRm9yVXJpID0gc2VsZWN0TXlDbGFpbUZvclVyaTtcbmV4cG9ydHMuc2VsZWN0TXlDbGFpbVVyaXNXaXRob3V0Q2hhbm5lbHMgPSBzZWxlY3RNeUNsYWltVXJpc1dpdGhvdXRDaGFubmVscztcbmV4cG9ydHMuc2VsZWN0TXlDbGFpbXMgPSBzZWxlY3RNeUNsYWltcztcbmV4cG9ydHMuc2VsZWN0TXlDbGFpbXNPdXRwb2ludHMgPSBzZWxlY3RNeUNsYWltc091dHBvaW50cztcbmV4cG9ydHMuc2VsZWN0TXlDbGFpbXNSYXcgPSBzZWxlY3RNeUNsYWltc1JhdztcbmV4cG9ydHMuc2VsZWN0TXlDbGFpbXNXaXRob3V0Q2hhbm5lbHMgPSBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscztcbmV4cG9ydHMuc2VsZWN0TXlTdHJlYW1VcmxzQ291bnQgPSBzZWxlY3RNeVN0cmVhbVVybHNDb3VudDtcbmV4cG9ydHMuc2VsZWN0UGVuZGluZ0J5SWQgPSBzZWxlY3RQZW5kaW5nQnlJZDtcbmV4cG9ydHMuc2VsZWN0UGVuZGluZ0NsYWltcyA9IHNlbGVjdFBlbmRpbmdDbGFpbXM7XG5leHBvcnRzLnNlbGVjdFBlbmRpbmdTdXBwb3J0VHJhbnNhY3Rpb25zID0gc2VsZWN0UGVuZGluZ1N1cHBvcnRUcmFuc2FjdGlvbnM7XG5leHBvcnRzLnNlbGVjdFBsYXlpbmdVcmkgPSBzZWxlY3RQbGF5aW5nVXJpO1xuZXhwb3J0cy5zZWxlY3RQdWJsaXNoRm9ybVZhbHVlcyA9IHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzO1xuZXhwb3J0cy5zZWxlY3RQdXJjaGFzZVVyaUVycm9yTWVzc2FnZSA9IHNlbGVjdFB1cmNoYXNlVXJpRXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RQdXJjaGFzZWRVcmlzID0gc2VsZWN0UHVyY2hhc2VkVXJpcztcbmV4cG9ydHMuc2VsZWN0UmVjZWl2ZUFkZHJlc3MgPSBzZWxlY3RSZWNlaXZlQWRkcmVzcztcbmV4cG9ydHMuc2VsZWN0UmVjZW50VHJhbnNhY3Rpb25zID0gc2VsZWN0UmVjZW50VHJhbnNhY3Rpb25zO1xuZXhwb3J0cy5zZWxlY3RSZXBvc3RFcnJvciA9IHNlbGVjdFJlcG9zdEVycm9yO1xuZXhwb3J0cy5zZWxlY3RSZXBvc3RMb2FkaW5nID0gc2VsZWN0UmVwb3N0TG9hZGluZztcbmV4cG9ydHMuc2VsZWN0UmVzZXJ2ZWRCYWxhbmNlID0gc2VsZWN0UmVzZXJ2ZWRCYWxhbmNlO1xuZXhwb3J0cy5zZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNCeVF1ZXJ5ID0gc2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzQnlRdWVyeTtcbmV4cG9ydHMuc2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCA9IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQ7XG5leHBvcnRzLnNlbGVjdFJlc29sdmluZ1VyaXMgPSBzZWxlY3RSZXNvbHZpbmdVcmlzO1xuZXhwb3J0cy5zZWxlY3RTZWFyY2hCYXJGb2N1c2VkID0gc2VsZWN0U2VhcmNoQmFyRm9jdXNlZDtcbmV4cG9ydHMuc2VsZWN0U2VhcmNoT3B0aW9ucyA9IHNlbGVjdFNlYXJjaE9wdGlvbnM7XG5leHBvcnRzLnNlbGVjdFNlYXJjaFN0YXRlID0gc2VsZWN0U3RhdGU7XG5leHBvcnRzLnNlbGVjdFNlYXJjaFN1Z2dlc3Rpb25zID0gc2VsZWN0U2VhcmNoU3VnZ2VzdGlvbnM7XG5leHBvcnRzLnNlbGVjdFNlYXJjaFVyaXNCeVF1ZXJ5ID0gc2VsZWN0U2VhcmNoVXJpc0J5UXVlcnk7XG5leHBvcnRzLnNlbGVjdFNlYXJjaFZhbHVlID0gc2VsZWN0U2VhcmNoVmFsdWU7XG5leHBvcnRzLnNlbGVjdFN1cHBvcnRzQmFsYW5jZSA9IHNlbGVjdFN1cHBvcnRzQmFsYW5jZTtcbmV4cG9ydHMuc2VsZWN0U3VwcG9ydHNCeU91dHBvaW50ID0gc2VsZWN0U3VwcG9ydHNCeU91dHBvaW50O1xuZXhwb3J0cy5zZWxlY3RUYWtlT3ZlckFtb3VudCA9IHNlbGVjdFRha2VPdmVyQW1vdW50O1xuZXhwb3J0cy5zZWxlY3RUaXBzQmFsYW5jZSA9IHNlbGVjdFRpcHNCYWxhbmNlO1xuZXhwb3J0cy5zZWxlY3RUb2FzdCA9IHNlbGVjdFRvYXN0O1xuZXhwb3J0cy5zZWxlY3RUb3RhbEJhbGFuY2UgPSBzZWxlY3RUb3RhbEJhbGFuY2U7XG5leHBvcnRzLnNlbGVjdFRvdGFsRG93bmxvYWRQcm9ncmVzcyA9IHNlbGVjdFRvdGFsRG93bmxvYWRQcm9ncmVzcztcbmV4cG9ydHMuc2VsZWN0VG90YWxTdXBwb3J0cyA9IHNlbGVjdFRvdGFsU3VwcG9ydHM7XG5leHBvcnRzLnNlbGVjdFRyYW5zYWN0aW9uSXRlbXMgPSBzZWxlY3RUcmFuc2FjdGlvbkl0ZW1zO1xuZXhwb3J0cy5zZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIgPSBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXI7XG5leHBvcnRzLnNlbGVjdFRyYW5zYWN0aW9uc0J5SWQgPSBzZWxlY3RUcmFuc2FjdGlvbnNCeUlkO1xuZXhwb3J0cy5zZWxlY3RVbmZvbGxvd2VkVGFncyA9IHNlbGVjdFVuZm9sbG93ZWRUYWdzO1xuZXhwb3J0cy5zZWxlY3RVcGRhdGVDaGFubmVsRXJyb3IgPSBzZWxlY3RVcGRhdGVDaGFubmVsRXJyb3I7XG5leHBvcnRzLnNlbGVjdFVwZGF0aW5nQ2hhbm5lbCA9IHNlbGVjdFVwZGF0aW5nQ2hhbm5lbDtcbmV4cG9ydHMuc2VsZWN0VXJpc0xvYWRpbmcgPSBzZWxlY3RVcmlzTG9hZGluZztcbmV4cG9ydHMuc2VsZWN0V2FsbGV0RGVjcnlwdFBlbmRpbmcgPSBzZWxlY3RXYWxsZXREZWNyeXB0UGVuZGluZztcbmV4cG9ydHMuc2VsZWN0V2FsbGV0RGVjcnlwdFJlc3VsdCA9IHNlbGVjdFdhbGxldERlY3J5cHRSZXN1bHQ7XG5leHBvcnRzLnNlbGVjdFdhbGxldERlY3J5cHRTdWNjZWVkZWQgPSBzZWxlY3RXYWxsZXREZWNyeXB0U3VjY2VlZGVkO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRFbmNyeXB0UGVuZGluZyA9IHNlbGVjdFdhbGxldEVuY3J5cHRQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRFbmNyeXB0UmVzdWx0ID0gc2VsZWN0V2FsbGV0RW5jcnlwdFJlc3VsdDtcbmV4cG9ydHMuc2VsZWN0V2FsbGV0RW5jcnlwdFN1Y2NlZWRlZCA9IHNlbGVjdFdhbGxldEVuY3J5cHRTdWNjZWVkZWQ7XG5leHBvcnRzLnNlbGVjdFdhbGxldElzRW5jcnlwdGVkID0gc2VsZWN0V2FsbGV0SXNFbmNyeXB0ZWQ7XG5leHBvcnRzLnNlbGVjdFdhbGxldFN0YXRlID0gc2VsZWN0V2FsbGV0U3RhdGU7XG5leHBvcnRzLnNlbGVjdFdhbGxldFVubG9ja1BlbmRpbmcgPSBzZWxlY3RXYWxsZXRVbmxvY2tQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRVbmxvY2tSZXN1bHQgPSBzZWxlY3RXYWxsZXRVbmxvY2tSZXN1bHQ7XG5leHBvcnRzLnNlbGVjdFdhbGxldFVubG9ja1N1Y2NlZWRlZCA9IHNlbGVjdFdhbGxldFVubG9ja1N1Y2NlZWRlZDtcbmV4cG9ydHMuc2V0U2VhcmNoQXBpID0gc2V0U2VhcmNoQXBpO1xuZXhwb3J0cy50YWdzUmVkdWNlciA9IHRhZ3NSZWR1Y2VyO1xuZXhwb3J0cy50b1F1ZXJ5U3RyaW5nID0gdG9RdWVyeVN0cmluZztcbmV4cG9ydHMud2FsbGV0UmVkdWNlciA9IHdhbGxldFJlZHVjZXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN09BO0FBZ1BBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBd0JBO0FBQ0E7QUFBQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpDQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBWUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2Q0E7QUEwQ0E7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQWFBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQVZBO0FBYUE7QUFDQTtBQWRBO0FBaUJBO0FBQ0E7QUFsQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUF5QkE7QUFBQTtBQXpCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFEQTtBQVFBO0FBWEE7QUFhQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBL0NBO0FBa0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBdERBO0FBdURBO0FBQUE7QUF2REE7QUF3REE7QUFBQTtBQXhEQTtBQTBEQTtBQUNBO0FBQUE7QUEzREE7QUE0REE7QUFBQTtBQTVEQTtBQTZEQTtBQUFBO0FBN0RBO0FBOERBO0FBQUE7QUE5REE7QUErREE7QUFBQTtBQS9EQTtBQWdFQTtBQUFBO0FBaEVBO0FBaUVBO0FBQUE7QUFqRUE7QUFrRUE7QUFBQTtBQWxFQTtBQW1FQTtBQUFBO0FBbkVBO0FBb0VBO0FBQUE7QUFwRUE7QUFxRUE7QUFBQTtBQXJFQTtBQXNFQTtBQUFBO0FBdEVBO0FBdUVBO0FBQUE7QUF2RUE7QUF3RUE7QUFBQTtBQXhFQTtBQTBFQTtBQUNBO0FBQUE7QUFBQTtBQTNFQTtBQTRFQTtBQUFBO0FBQUE7QUE1RUE7QUE2RUE7QUFBQTtBQUFBO0FBN0VBO0FBOEVBO0FBQUE7QUFBQTtBQTlFQTtBQStFQTtBQUFBO0FBQUE7QUEvRUE7QUFpRkE7QUFDQTtBQUFBO0FBQUE7QUFsRkE7QUFtRkE7QUFBQTtBQW5GQTtBQW9GQTtBQUFBO0FBQUE7QUFwRkE7QUFxRkE7QUFBQTtBQUFBO0FBckZBO0FBc0ZBO0FBQUE7QUFBQTtBQXRGQTtBQXVGQTtBQUFBO0FBQUE7QUF2RkE7QUF3RkE7QUFBQTtBQUFBO0FBeEZBO0FBeUZBO0FBQUE7QUFBQTtBQXpGQTtBQTBGQTtBQUFBO0FBQUE7QUExRkE7QUEyRkE7QUFBQTtBQUFBO0FBM0ZBO0FBNEZBO0FBQUE7QUFBQTtBQTVGQTtBQTZGQTtBQUFBO0FBQUE7QUE3RkE7QUE4RkE7QUFBQTtBQUFBO0FBOUZBO0FBZ0dBO0FBQUE7QUFBQTtBQWhHQTtBQWlHQTtBQUFBO0FBQUE7QUFqR0E7QUFtR0E7QUFDQTtBQUFBO0FBQUE7QUFwR0E7QUFxR0E7QUFBQTtBQUFBO0FBckdBO0FBdUdBO0FBQ0E7QUFBQTtBQUFBO0FBeEdBO0FBeUdBO0FBQUE7QUFBQTtBQXpHQTtBQTBHQTtBQUFBO0FBQUE7QUExR0E7QUEyR0E7QUFBQTtBQUFBO0FBM0dBO0FBNEdBO0FBQUE7QUFBQTtBQTVHQTtBQThHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFkQTtBQUZBO0FBcUJBO0FBQ0E7QUFDQTtBQURBO0FBcklBO0FBd0lBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQUFBO0FBeElBO0FBQ0E7QUFnSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFUQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7QUFBQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBL0JBO0FBQ0E7QUFpQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFpQkE7QUFqQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWlCQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBb0JBO0FBQ0E7QUF2QkE7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFsREE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQUtBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFGQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUhBO0FBTkE7QUFZQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFqRUE7QUFxRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUpBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBckJBO0FBQ0E7QUF1QkE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdENBO0FBeUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBbkRBO0FBQ0E7QUFDQTtBQXFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5RUE7QUFDQTtBQUNBO0FBK0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUZBO0FBVEE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQW5DQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFGQTtBQUtBO0FBUkE7QUFXQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFSQTtBQTFCQTtBQWlEQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBcERBO0FBaUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBSEE7QUFZQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBYUE7QUFqQkE7QUFvQkE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQVZBO0FBQUE7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBdENBO0FBQUE7QUFDQTtBQXdDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFiQTtBQWdCQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFOQTtBQUNBO0FBZ0JBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQU5BO0FBQUE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBTkE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBQUE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFIQTtBQU1BO0FBVEE7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBU0E7QUFUQTtBQURBO0FBY0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUxBO0FBUUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBZEE7QUFpQkE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFOQTtBQUFBO0FBQ0E7QUFjQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQUE7QUFDQTtBQVlBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUFBQTtBQUNBO0FBOEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBWEE7QUFBQTtBQUNBO0FBYUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFHQTtBQUhBO0FBTUE7QUFkQTtBQUFBO0FBQ0E7QUFnQkE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQUE7QUFDQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFGQTtBQVdBO0FBbkJBO0FBcUJBO0FBckJBO0FBdUJBO0FBQ0E7QUFDQTtBQS9CQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBTkE7QUFlQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBTEE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFMQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFIQTtBQUxBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUpBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQW5CQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFMQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBRkE7QUFqREE7QUFzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBckRBO0FBNERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQVhBO0FBTEE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBWEE7QUFMQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQVZBO0FBZEE7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQU5BO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFYQTtBQUxBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFOQTtBQUxBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTkE7QUFBQTtBQVVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBUEE7QUFEQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdkJBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBeENBO0FBQ0E7QUEwQ0E7QUFDQTtBQURBO0FBbERBO0FBQUE7QUFDQTtBQUNBO0FBc0RBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUE1QkE7QUErQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBaENBO0FBekJBO0FBK0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBSEE7QUFOQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUF4QkE7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUVBO0FBZ0ZBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUtBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFGQTtBQVJBO0FBTkE7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWZBO0FBbkNBO0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUFBO0FBQUE7QUF6QkE7QUFDQTtBQUNBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFGQTtBQVBBO0FBdENBO0FBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQUxBO0FBTEE7QUFnQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFaQTtBQWNBO0FBQ0E7QUFDQTtBQUlBO0FBSEE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFGQTtBQVJBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQWxDQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUE1QkE7QUFGQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBUkE7QUFBQTtBQUNBO0FBVUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBSEE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBSEE7QUFNQTtBQVZBO0FBYUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFWQTtBQWFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBTEE7QUFBQTtBQUNBO0FBV0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQXZDQTtBQWJBO0FBMERBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQTlCQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUpBO0FBWUE7QUExQkE7QUE0QkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBRkE7QUFTQTtBQWxCQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQW1CQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUF0QkE7QUF5QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVhBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFSQTtBQVdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWlCQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBc0JBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUxBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFaQTtBQVJBO0FBQUE7QUFDQTtBQTRCQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQURBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBSEE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUhBO0FBU0E7QUFUQTtBQVhBO0FBREE7QUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUhBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFIQTtBQVNBO0FBVEE7QUFVQTtBQWhGQTtBQUFBO0FBQ0E7QUFrRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFGQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWRBO0FBa0JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXhEQTtBQUFBO0FBQ0E7QUEwREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUErQkE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFRQTtBQUNBO0FBVEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhFQTtBQUNBO0FBQ0E7QUEwRUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxHQTtBQXNHQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBekdBO0FBQUE7QUFDQTtBQUNBO0FBMkdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBdEJBO0FBREE7QUFDQTtBQTBCQTtBQUNBO0FBREE7QUFyQ0E7QUFBQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQURBO0FBVUE7QUFWQTtBQWhCQTtBQUFBO0FBQ0E7QUE2QkE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFUQTtBQUFBO0FBQ0E7QUFXQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWxCQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBaENBO0FBa0NBO0FBQ0E7QUFEQTtBQWxDQTtBQWxDQTtBQUFBO0FBQ0E7QUF5RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUFBOzs7OztBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUZBO0FBVEE7QUFtQkE7QUFDQTtBQURBO0FBbkJBO0FBMUNBO0FBQUE7QUFDQTtBQWtFQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFBQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFBQTtBQUNBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFOQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFoQkE7QUFSQTtBQThCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU5BO0FBY0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQWxCQTtBQXRCQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBWkE7QUFKQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBUUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQXBCQTtBQXNCQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBMUJBO0FBSkE7QUFvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQXBCQTtBQXNCQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBMUJBO0FBSkE7QUFvQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQUNBO0FBMEJBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFyQ0E7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFEQTtBQVpBO0FBQ0E7QUFnQkE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBdkJBO0FBQ0E7QUEwQkE7QUFBQTtBQUVBO0FBRkE7QUFHQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQWxDQTtBQUNBO0FBMENBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBekNBO0FBQ0E7QUFrREE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFOQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBdENBO0FBQ0E7QUErQ0E7QUFBQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBREE7QUFOQTtBQUNBO0FBVUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFkQTtBQUNBO0FBb0JBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVZBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU5BO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUpBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFWQTtBQUNBO0FBQ0E7QUFZQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWxCQTtBQUNBO0FBd0JBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVZBO0FBQ0E7QUFnQkE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBU0E7QUFDQTtBQUNBO0FBREE7QUFWQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQURBO0FBTEE7QUFTQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBdkJBO0FBOEJBO0FBQUE7QUFBQTtBQTlCQTtBQWdDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBdERBO0FBOERBO0FBQ0E7QUFEQTtBQTlEQTtBQWlFQTtBQUNBO0FBREE7QUFqRUE7QUFvRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFuRkE7QUEwRkE7QUFDQTtBQURBO0FBMUZBO0FBOEZBO0FBQ0E7QUFEQTtBQTlGQTtBQWtHQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQXZHQTtBQTZHQTtBQUNBO0FBREE7QUE3R0E7QUFpSEE7QUFDQTtBQURBO0FBakhBO0FBb0hBO0FBQUE7QUFDQTtBQURBO0FBcEhBO0FBd0hBO0FBQ0E7QUFEQTtBQXhIQTtBQUNBO0FBNEhBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFVQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFYQTtBQUNBO0FBaUJBO0FBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQURBO0FBTkE7QUFDQTtBQVVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUxBO0FBQ0E7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFUQTtBQUNBO0FBY0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBTkE7QUFDQTtBQVVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBTEE7QUFRQTtBQVJBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBUEE7QUFDQTtBQVlBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVpBO0FBQ0E7QUFrQkE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQVJBO0FBQ0E7QUFhQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBUEE7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBUEE7QUFZQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBZkE7QUFzQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBMUJBO0FBK0JBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFyQ0E7QUF5Q0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQTlDQTtBQXFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUF6REE7QUE4REE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQWpFQTtBQUNBO0FBc0VBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0JBO0FBa0NBO0FBQ0E7QUFFQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFhQTtBQUNBO0FBREE7QUFiQTtBQWdCQTtBQUNBO0FBQ0E7QUFGQTtBQWhCQTtBQXFCQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUEvQkE7QUFDQTtBQXFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBbUJBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQVBBO0FBYUE7QUFDQTtBQURBO0FBYkE7QUFpQkE7QUFDQTtBQURBO0FBakJBO0FBcUJBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBVEE7QUFDQTtBQUNBO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBbkNBO0FBMENBO0FBQ0E7QUFEQTtBQTFDQTtBQThDQTtBQUNBO0FBQ0E7QUFGQTtBQTlDQTtBQW1EQTtBQUNBO0FBREE7QUFuREE7QUE0REE7QUFDQTtBQURBO0FBNURBO0FBZ0VBO0FBQ0E7QUFEQTtBQWhFQTtBQW1FQTtBQUNBO0FBREE7QUFuRUE7QUFzRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQTFFQTtBQUNBO0FBK0VBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQWJBO0FBa0JBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUF6QkE7QUE4QkE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQXRDQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFsREE7QUFDQTtBQXFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFaQTtBQWdCQTtBQUVBO0FBQ0E7QUFEQTtBQWxCQTtBQUNBO0FBdUJBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQU1BO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFEQTtBQUlBO0FB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QUNBO0FBQ0E7QUFGQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBT0E7QUFWQTtBQUNBO0FBWUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lbry-redux/dist/bundle.es.js\n"); - -/***/ }), - -/***/ "../node_modules/lbryinc/dist/bundle.es.js": -/*!*************************************************!*\ - !*** ../node_modules/lbryinc/dist/bundle.es.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__, Buffer) {\n\nvar _handleActions, _handleActions2, _handleActions3, _handleActions4, _handleActions5, _handleActions6;\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && _typeof(ex) === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar lbryRedux = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n\nvar querystring = _interopDefault(__webpack_require__(/*! querystring */ \"../node_modules/querystring-es3/index.js\"));\n\nvar reselect = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\"); // User\n\n\nvar GENERATE_AUTH_TOKEN_FAILURE = 'GENERATE_AUTH_TOKEN_FAILURE';\nvar GENERATE_AUTH_TOKEN_STARTED = 'GENERATE_AUTH_TOKEN_STARTED';\nvar GENERATE_AUTH_TOKEN_SUCCESS = 'GENERATE_AUTH_TOKEN_SUCCESS';\nvar AUTHENTICATION_STARTED = 'AUTHENTICATION_STARTED';\nvar AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS';\nvar AUTHENTICATION_FAILURE = 'AUTHENTICATION_FAILURE';\nvar USER_EMAIL_DECLINE = 'USER_EMAIL_DECLINE';\nvar USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_STARTED';\nvar USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS';\nvar USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS';\nvar USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE';\nvar USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET';\nvar USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED';\nvar USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS';\nvar USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY_STARTED = 'USER_EMAIL_VERIFY_RETRY_STARTED';\nvar USER_EMAIL_VERIFY_RETRY_FAILURE = 'USER_EMAIL_VERIFY_RETRY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY_SUCCESS = 'USER_EMAIL_VERIFY_RETRY_SUCCESS';\nvar USER_PHONE_RESET = 'USER_PHONE_RESET';\nvar USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED';\nvar USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS';\nvar USER_PHONE_NEW_FAILURE = 'USER_PHONE_NEW_FAILURE';\nvar USER_PHONE_VERIFY_STARTED = 'USER_PHONE_VERIFY_STARTED';\nvar USER_PHONE_VERIFY_SUCCESS = 'USER_PHONE_VERIFY_SUCCESS';\nvar USER_PHONE_VERIFY_FAILURE = 'USER_PHONE_VERIFY_FAILURE';\nvar USER_IDENTITY_VERIFY_STARTED = 'USER_IDENTITY_VERIFY_STARTED';\nvar USER_IDENTITY_VERIFY_SUCCESS = 'USER_IDENTITY_VERIFY_SUCCESS';\nvar USER_IDENTITY_VERIFY_FAILURE = 'USER_IDENTITY_VERIFY_FAILURE';\nvar USER_FETCH_STARTED = 'USER_FETCH_STARTED';\nvar USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS';\nvar USER_FETCH_FAILURE = 'USER_FETCH_FAILURE';\nvar USER_INVITE_STATUS_FETCH_STARTED = 'USER_INVITE_STATUS_FETCH_STARTED';\nvar USER_INVITE_STATUS_FETCH_SUCCESS = 'USER_INVITE_STATUS_FETCH_SUCCESS';\nvar USER_INVITE_STATUS_FETCH_FAILURE = 'USER_INVITE_STATUS_FETCH_FAILURE';\nvar USER_INVITE_NEW_STARTED = 'USER_INVITE_NEW_STARTED';\nvar USER_INVITE_NEW_SUCCESS = 'USER_INVITE_NEW_SUCCESS';\nvar USER_INVITE_NEW_FAILURE = 'USER_INVITE_NEW_FAILURE';\nvar FETCH_ACCESS_TOKEN_SUCCESS = 'FETCH_ACCESS_TOKEN_SUCCESS';\nvar USER_YOUTUBE_IMPORT_STARTED = 'USER_YOUTUBE_IMPORT_STARTED';\nvar USER_YOUTUBE_IMPORT_FAILURE = 'USER_YOUTUBE_IMPORT_FAILURE';\nvar USER_YOUTUBE_IMPORT_SUCCESS = 'USER_YOUTUBE_IMPORT_SUCCESS';\nvar USER_SET_REFERRER_STARTED = 'USER_SET_REFERRER_STARTED';\nvar USER_SET_REFERRER_SUCCESS = 'USER_SET_REFERRER_SUCCESS';\nvar USER_SET_REFERRER_FAILURE = 'USER_SET_REFERRER_FAILURE';\nvar USER_SET_REFERRER_RESET = 'USER_SET_REFERRER_RESET'; // Claims\n\nvar FETCH_FEATURED_CONTENT_STARTED = 'FETCH_FEATURED_CONTENT_STARTED';\nvar FETCH_FEATURED_CONTENT_COMPLETED = 'FETCH_FEATURED_CONTENT_COMPLETED';\nvar FETCH_TRENDING_CONTENT_STARTED = 'FETCH_TRENDING_CONTENT_STARTED';\nvar FETCH_TRENDING_CONTENT_COMPLETED = 'FETCH_TRENDING_CONTENT_COMPLETED';\nvar RESOLVE_URIS_STARTED = 'RESOLVE_URIS_STARTED';\nvar RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED';\nvar FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED';\nvar FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED';\nvar FETCH_CHANNEL_CLAIM_COUNT_STARTED = 'FETCH_CHANNEL_CLAIM_COUNT_STARTED';\nvar FETCH_CHANNEL_CLAIM_COUNT_COMPLETED = 'FETCH_CHANNEL_CLAIM_COUNT_COMPLETED';\nvar FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED';\nvar FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED';\nvar ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED';\nvar ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED';\nvar FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED';\nvar FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED';\nvar CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED';\nvar CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED';\nvar PUBLISH_STARTED = 'PUBLISH_STARTED';\nvar PUBLISH_COMPLETED = 'PUBLISH_COMPLETED';\nvar PUBLISH_FAILED = 'PUBLISH_FAILED';\nvar SET_PLAYING_URI = 'SET_PLAYING_URI';\nvar SET_CONTENT_POSITION = 'SET_CONTENT_POSITION';\nvar SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED';\nvar CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI';\nvar CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL'; // Subscriptions\n\nvar CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE';\nvar CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE';\nvar CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS = 'CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS';\nvar CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS = 'CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS';\nvar HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS';\nvar SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST';\nvar UPDATE_SUBSCRIPTION_UNREADS = 'UPDATE_SUBSCRIPTION_UNREADS';\nvar REMOVE_SUBSCRIPTION_UNREADS = 'REMOVE_SUBSCRIPTION_UNREADS';\nvar CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED';\nvar CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED';\nvar CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE';\nvar FETCH_SUBSCRIPTIONS_START = 'FETCH_SUBSCRIPTIONS_START';\nvar FETCH_SUBSCRIPTIONS_FAIL = 'FETCH_SUBSCRIPTIONS_FAIL';\nvar FETCH_SUBSCRIPTIONS_SUCCESS = 'FETCH_SUBSCRIPTIONS_SUCCESS';\nvar SET_VIEW_MODE = 'SET_VIEW_MODE';\nvar GET_SUGGESTED_SUBSCRIPTIONS_START = 'GET_SUGGESTED_SUBSCRIPTIONS_START';\nvar GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS = 'GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS';\nvar GET_SUGGESTED_SUBSCRIPTIONS_FAIL = 'GET_SUGGESTED_SUBSCRIPTIONS_FAIL';\nvar SUBSCRIPTION_FIRST_RUN_COMPLETED = 'SUBSCRIPTION_FIRST_RUN_COMPLETED';\nvar VIEW_SUGGESTED_SUBSCRIPTIONS = 'VIEW_SUGGESTED_SUBSCRIPTIONS'; // Blacklist\n\nvar FETCH_BLACK_LISTED_CONTENT_STARTED = 'FETCH_BLACK_LISTED_CONTENT_STARTED';\nvar FETCH_BLACK_LISTED_CONTENT_COMPLETED = 'FETCH_BLACK_LISTED_CONTENT_COMPLETED';\nvar FETCH_BLACK_LISTED_CONTENT_FAILED = 'FETCH_BLACK_LISTED_CONTENT_FAILED';\nvar BLACK_LISTED_CONTENT_SUBSCRIBE = 'BLACK_LISTED_CONTENT_SUBSCRIBE'; // Filtered list\n\nvar FETCH_FILTERED_CONTENT_STARTED = 'FETCH_FILTERED_CONTENT_STARTED';\nvar FETCH_FILTERED_CONTENT_COMPLETED = 'FETCH_FILTERED_CONTENT_COMPLETED';\nvar FETCH_FILTERED_CONTENT_FAILED = 'FETCH_FILTERED_CONTENT_FAILED';\nvar FILTERED_CONTENT_SUBSCRIBE = 'FILTERED_CONTENT_SUBSCRIBE'; // Cost Info\n\nvar FETCH_COST_INFO_STARTED = 'FETCH_COST_INFO_STARTED';\nvar FETCH_COST_INFO_COMPLETED = 'FETCH_COST_INFO_COMPLETED'; // Stats\n\nvar FETCH_VIEW_COUNT_STARTED = 'FETCH_VIEW_COUNT_STARTED';\nvar FETCH_VIEW_COUNT_FAILED = 'FETCH_VIEW_COUNT_FAILED';\nvar FETCH_VIEW_COUNT_COMPLETED = 'FETCH_VIEW_COUNT_COMPLETED';\nvar FETCH_SUB_COUNT_STARTED = 'FETCH_SUB_COUNT_STARTED';\nvar FETCH_SUB_COUNT_FAILED = 'FETCH_SUB_COUNT_FAILED';\nvar FETCH_SUB_COUNT_COMPLETED = 'FETCH_SUB_COUNT_COMPLETED'; // Cross-device Sync\n\nvar GET_SYNC_STARTED = 'GET_SYNC_STARTED';\nvar GET_SYNC_COMPLETED = 'GET_SYNC_COMPLETED';\nvar GET_SYNC_FAILED = 'GET_SYNC_FAILED';\nvar SET_SYNC_STARTED = 'SET_SYNC_STARTED';\nvar SET_SYNC_FAILED = 'SET_SYNC_FAILED';\nvar SET_SYNC_COMPLETED = 'SET_SYNC_COMPLETED';\nvar SET_DEFAULT_ACCOUNT = 'SET_DEFAULT_ACCOUNT';\nvar SYNC_APPLY_STARTED = 'SYNC_APPLY_STARTED';\nvar SYNC_APPLY_COMPLETED = 'SYNC_APPLY_COMPLETED';\nvar SYNC_APPLY_FAILED = 'SYNC_APPLY_FAILED';\nvar SYNC_APPLY_BAD_PASSWORD = 'SYNC_APPLY_BAD_PASSWORD';\nvar SYNC_RESET = 'SYNC_RESET'; // Lbry.tv\n\nvar UPDATE_UPLOAD_PROGRESS = 'UPDATE_UPLOAD_PROGRESS';\nvar action_types = /*#__PURE__*/Object.freeze({\n GENERATE_AUTH_TOKEN_FAILURE: GENERATE_AUTH_TOKEN_FAILURE,\n GENERATE_AUTH_TOKEN_STARTED: GENERATE_AUTH_TOKEN_STARTED,\n GENERATE_AUTH_TOKEN_SUCCESS: GENERATE_AUTH_TOKEN_SUCCESS,\n AUTHENTICATION_STARTED: AUTHENTICATION_STARTED,\n AUTHENTICATION_SUCCESS: AUTHENTICATION_SUCCESS,\n AUTHENTICATION_FAILURE: AUTHENTICATION_FAILURE,\n USER_EMAIL_DECLINE: USER_EMAIL_DECLINE,\n USER_EMAIL_NEW_STARTED: USER_EMAIL_NEW_STARTED,\n USER_EMAIL_NEW_SUCCESS: USER_EMAIL_NEW_SUCCESS,\n USER_EMAIL_NEW_EXISTS: USER_EMAIL_NEW_EXISTS,\n USER_EMAIL_NEW_FAILURE: USER_EMAIL_NEW_FAILURE,\n USER_EMAIL_VERIFY_SET: USER_EMAIL_VERIFY_SET,\n USER_EMAIL_VERIFY_STARTED: USER_EMAIL_VERIFY_STARTED,\n USER_EMAIL_VERIFY_SUCCESS: USER_EMAIL_VERIFY_SUCCESS,\n USER_EMAIL_VERIFY_FAILURE: USER_EMAIL_VERIFY_FAILURE,\n USER_EMAIL_VERIFY_RETRY_STARTED: USER_EMAIL_VERIFY_RETRY_STARTED,\n USER_EMAIL_VERIFY_RETRY_FAILURE: USER_EMAIL_VERIFY_RETRY_FAILURE,\n USER_EMAIL_VERIFY_RETRY_SUCCESS: USER_EMAIL_VERIFY_RETRY_SUCCESS,\n USER_PHONE_RESET: USER_PHONE_RESET,\n USER_PHONE_NEW_STARTED: USER_PHONE_NEW_STARTED,\n USER_PHONE_NEW_SUCCESS: USER_PHONE_NEW_SUCCESS,\n USER_PHONE_NEW_FAILURE: USER_PHONE_NEW_FAILURE,\n USER_PHONE_VERIFY_STARTED: USER_PHONE_VERIFY_STARTED,\n USER_PHONE_VERIFY_SUCCESS: USER_PHONE_VERIFY_SUCCESS,\n USER_PHONE_VERIFY_FAILURE: USER_PHONE_VERIFY_FAILURE,\n USER_IDENTITY_VERIFY_STARTED: USER_IDENTITY_VERIFY_STARTED,\n USER_IDENTITY_VERIFY_SUCCESS: USER_IDENTITY_VERIFY_SUCCESS,\n USER_IDENTITY_VERIFY_FAILURE: USER_IDENTITY_VERIFY_FAILURE,\n USER_FETCH_STARTED: USER_FETCH_STARTED,\n USER_FETCH_SUCCESS: USER_FETCH_SUCCESS,\n USER_FETCH_FAILURE: USER_FETCH_FAILURE,\n USER_INVITE_STATUS_FETCH_STARTED: USER_INVITE_STATUS_FETCH_STARTED,\n USER_INVITE_STATUS_FETCH_SUCCESS: USER_INVITE_STATUS_FETCH_SUCCESS,\n USER_INVITE_STATUS_FETCH_FAILURE: USER_INVITE_STATUS_FETCH_FAILURE,\n USER_INVITE_NEW_STARTED: USER_INVITE_NEW_STARTED,\n USER_INVITE_NEW_SUCCESS: USER_INVITE_NEW_SUCCESS,\n USER_INVITE_NEW_FAILURE: USER_INVITE_NEW_FAILURE,\n FETCH_ACCESS_TOKEN_SUCCESS: FETCH_ACCESS_TOKEN_SUCCESS,\n USER_YOUTUBE_IMPORT_STARTED: USER_YOUTUBE_IMPORT_STARTED,\n USER_YOUTUBE_IMPORT_FAILURE: USER_YOUTUBE_IMPORT_FAILURE,\n USER_YOUTUBE_IMPORT_SUCCESS: USER_YOUTUBE_IMPORT_SUCCESS,\n USER_SET_REFERRER_STARTED: USER_SET_REFERRER_STARTED,\n USER_SET_REFERRER_SUCCESS: USER_SET_REFERRER_SUCCESS,\n USER_SET_REFERRER_FAILURE: USER_SET_REFERRER_FAILURE,\n USER_SET_REFERRER_RESET: USER_SET_REFERRER_RESET,\n FETCH_FEATURED_CONTENT_STARTED: FETCH_FEATURED_CONTENT_STARTED,\n FETCH_FEATURED_CONTENT_COMPLETED: FETCH_FEATURED_CONTENT_COMPLETED,\n FETCH_TRENDING_CONTENT_STARTED: FETCH_TRENDING_CONTENT_STARTED,\n FETCH_TRENDING_CONTENT_COMPLETED: FETCH_TRENDING_CONTENT_COMPLETED,\n RESOLVE_URIS_STARTED: RESOLVE_URIS_STARTED,\n RESOLVE_URIS_COMPLETED: RESOLVE_URIS_COMPLETED,\n FETCH_CHANNEL_CLAIMS_STARTED: FETCH_CHANNEL_CLAIMS_STARTED,\n FETCH_CHANNEL_CLAIMS_COMPLETED: FETCH_CHANNEL_CLAIMS_COMPLETED,\n FETCH_CHANNEL_CLAIM_COUNT_STARTED: FETCH_CHANNEL_CLAIM_COUNT_STARTED,\n FETCH_CHANNEL_CLAIM_COUNT_COMPLETED: FETCH_CHANNEL_CLAIM_COUNT_COMPLETED,\n FETCH_CLAIM_LIST_MINE_STARTED: FETCH_CLAIM_LIST_MINE_STARTED,\n FETCH_CLAIM_LIST_MINE_COMPLETED: FETCH_CLAIM_LIST_MINE_COMPLETED,\n ABANDON_CLAIM_STARTED: ABANDON_CLAIM_STARTED,\n ABANDON_CLAIM_SUCCEEDED: ABANDON_CLAIM_SUCCEEDED,\n FETCH_CHANNEL_LIST_STARTED: FETCH_CHANNEL_LIST_STARTED,\n FETCH_CHANNEL_LIST_COMPLETED: FETCH_CHANNEL_LIST_COMPLETED,\n CREATE_CHANNEL_STARTED: CREATE_CHANNEL_STARTED,\n CREATE_CHANNEL_COMPLETED: CREATE_CHANNEL_COMPLETED,\n PUBLISH_STARTED: PUBLISH_STARTED,\n PUBLISH_COMPLETED: PUBLISH_COMPLETED,\n PUBLISH_FAILED: PUBLISH_FAILED,\n SET_PLAYING_URI: SET_PLAYING_URI,\n SET_CONTENT_POSITION: SET_CONTENT_POSITION,\n SET_CONTENT_LAST_VIEWED: SET_CONTENT_LAST_VIEWED,\n CLEAR_CONTENT_HISTORY_URI: CLEAR_CONTENT_HISTORY_URI,\n CLEAR_CONTENT_HISTORY_ALL: CLEAR_CONTENT_HISTORY_ALL,\n CHANNEL_SUBSCRIBE: CHANNEL_SUBSCRIBE,\n CHANNEL_UNSUBSCRIBE: CHANNEL_UNSUBSCRIBE,\n CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS: CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS,\n CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS: CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS,\n HAS_FETCHED_SUBSCRIPTIONS: HAS_FETCHED_SUBSCRIPTIONS,\n SET_SUBSCRIPTION_LATEST: SET_SUBSCRIPTION_LATEST,\n UPDATE_SUBSCRIPTION_UNREADS: UPDATE_SUBSCRIPTION_UNREADS,\n REMOVE_SUBSCRIPTION_UNREADS: REMOVE_SUBSCRIPTION_UNREADS,\n CHECK_SUBSCRIPTION_STARTED: CHECK_SUBSCRIPTION_STARTED,\n CHECK_SUBSCRIPTION_COMPLETED: CHECK_SUBSCRIPTION_COMPLETED,\n CHECK_SUBSCRIPTIONS_SUBSCRIBE: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n FETCH_SUBSCRIPTIONS_START: FETCH_SUBSCRIPTIONS_START,\n FETCH_SUBSCRIPTIONS_FAIL: FETCH_SUBSCRIPTIONS_FAIL,\n FETCH_SUBSCRIPTIONS_SUCCESS: FETCH_SUBSCRIPTIONS_SUCCESS,\n SET_VIEW_MODE: SET_VIEW_MODE,\n GET_SUGGESTED_SUBSCRIPTIONS_START: GET_SUGGESTED_SUBSCRIPTIONS_START,\n GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS: GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS,\n GET_SUGGESTED_SUBSCRIPTIONS_FAIL: GET_SUGGESTED_SUBSCRIPTIONS_FAIL,\n SUBSCRIPTION_FIRST_RUN_COMPLETED: SUBSCRIPTION_FIRST_RUN_COMPLETED,\n VIEW_SUGGESTED_SUBSCRIPTIONS: VIEW_SUGGESTED_SUBSCRIPTIONS,\n FETCH_BLACK_LISTED_CONTENT_STARTED: FETCH_BLACK_LISTED_CONTENT_STARTED,\n FETCH_BLACK_LISTED_CONTENT_COMPLETED: FETCH_BLACK_LISTED_CONTENT_COMPLETED,\n FETCH_BLACK_LISTED_CONTENT_FAILED: FETCH_BLACK_LISTED_CONTENT_FAILED,\n BLACK_LISTED_CONTENT_SUBSCRIBE: BLACK_LISTED_CONTENT_SUBSCRIBE,\n FETCH_FILTERED_CONTENT_STARTED: FETCH_FILTERED_CONTENT_STARTED,\n FETCH_FILTERED_CONTENT_COMPLETED: FETCH_FILTERED_CONTENT_COMPLETED,\n FETCH_FILTERED_CONTENT_FAILED: FETCH_FILTERED_CONTENT_FAILED,\n FILTERED_CONTENT_SUBSCRIBE: FILTERED_CONTENT_SUBSCRIBE,\n FETCH_COST_INFO_STARTED: FETCH_COST_INFO_STARTED,\n FETCH_COST_INFO_COMPLETED: FETCH_COST_INFO_COMPLETED,\n FETCH_VIEW_COUNT_STARTED: FETCH_VIEW_COUNT_STARTED,\n FETCH_VIEW_COUNT_FAILED: FETCH_VIEW_COUNT_FAILED,\n FETCH_VIEW_COUNT_COMPLETED: FETCH_VIEW_COUNT_COMPLETED,\n FETCH_SUB_COUNT_STARTED: FETCH_SUB_COUNT_STARTED,\n FETCH_SUB_COUNT_FAILED: FETCH_SUB_COUNT_FAILED,\n FETCH_SUB_COUNT_COMPLETED: FETCH_SUB_COUNT_COMPLETED,\n GET_SYNC_STARTED: GET_SYNC_STARTED,\n GET_SYNC_COMPLETED: GET_SYNC_COMPLETED,\n GET_SYNC_FAILED: GET_SYNC_FAILED,\n SET_SYNC_STARTED: SET_SYNC_STARTED,\n SET_SYNC_FAILED: SET_SYNC_FAILED,\n SET_SYNC_COMPLETED: SET_SYNC_COMPLETED,\n SET_DEFAULT_ACCOUNT: SET_DEFAULT_ACCOUNT,\n SYNC_APPLY_STARTED: SYNC_APPLY_STARTED,\n SYNC_APPLY_COMPLETED: SYNC_APPLY_COMPLETED,\n SYNC_APPLY_FAILED: SYNC_APPLY_FAILED,\n SYNC_APPLY_BAD_PASSWORD: SYNC_APPLY_BAD_PASSWORD,\n SYNC_RESET: SYNC_RESET,\n UPDATE_UPLOAD_PROGRESS: UPDATE_UPLOAD_PROGRESS\n});\nvar NOT_TRANSFERRED = 'not_transferred';\nvar PENDING_TRANSFER = 'pending_transfer';\nvar COMPLETED_TRANSFER = 'completed_transfer';\nvar youtube = /*#__PURE__*/Object.freeze({\n NOT_TRANSFERRED: NOT_TRANSFERRED,\n PENDING_TRANSFER: PENDING_TRANSFER,\n COMPLETED_TRANSFER: COMPLETED_TRANSFER\n});\nvar ALREADY_CLAIMED = 'once the invite reward has been claimed the referrer cannot be changed';\nvar REFERRER_NOT_FOUND = 'A lbry.tv account could not be found for the referrer you provided.';\nvar errors = /*#__PURE__*/Object.freeze({\n ALREADY_CLAIMED: ALREADY_CLAIMED,\n REFERRER_NOT_FOUND: REFERRER_NOT_FOUND\n});\nvar Lbryio = {\n enabled: true,\n authenticationPromise: null,\n exchangePromise: null,\n exchangeLastFetched: null,\n CONNECTION_STRING: 'https://api.lbry.com/'\n};\nvar EXCHANGE_RATE_TIMEOUT = 20 * 60 * 1000; // We can't use env's because they aren't passed into node_modules\n\nLbryio.setLocalApi = function (endpoint) {\n Lbryio.CONNECTION_STRING = endpoint.replace(/\\/*$/, '/'); // exactly one slash at the end;\n};\n\nLbryio.call = function (resource, action) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var method = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'get';\n\n if (!Lbryio.enabled) {\n return Promise.reject(new Error(__('LBRY internal API is disabled')));\n }\n\n if (!(method === 'get' || method === 'post')) {\n return Promise.reject(new Error(__('Invalid method')));\n }\n\n function checkAndParse(response) {\n if (response.status >= 200 && response.status < 300) {\n return response.json();\n }\n\n return response.json().then(function (json) {\n var error;\n\n if (json.error) {\n error = new Error(json.error);\n } else {\n error = new Error('Unknown API error signature');\n }\n\n error.response = response; // This is primarily a hack used in actions/user.js\n\n return Promise.reject(error);\n });\n }\n\n function makeRequest(url, options) {\n return fetch(url, options).then(checkAndParse);\n }\n\n return Lbryio.getAuthToken().then(function (token) {\n var fullParams = _objectSpread({\n auth_token: token\n }, params);\n\n Object.keys(fullParams).forEach(function (key) {\n var value = fullParams[key];\n\n if (_typeof(value) === 'object') {\n fullParams[key] = JSON.stringify(value);\n }\n });\n var qs = querystring.stringify(fullParams);\n var url = \"\".concat(Lbryio.CONNECTION_STRING).concat(resource, \"/\").concat(action, \"?\").concat(qs);\n var options = {\n method: 'GET'\n };\n\n if (method === 'post') {\n options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: qs\n };\n url = \"\".concat(Lbryio.CONNECTION_STRING).concat(resource, \"/\").concat(action);\n }\n\n return makeRequest(url, options).then(function (response) {\n return response.data;\n });\n });\n};\n\nLbryio.authToken = null;\n\nLbryio.getAuthToken = function () {\n return new Promise(function (resolve) {\n if (Lbryio.authToken) {\n resolve(Lbryio.authToken);\n } else if (Lbryio.overrides.getAuthToken) {\n Lbryio.overrides.getAuthToken().then(function (token) {\n resolve(token);\n });\n } else if (typeof window !== 'undefined') {\n var _window = window,\n store = _window.store;\n\n if (store) {\n var state = store.getState();\n var token = state.auth ? state.auth.authToken : null;\n Lbryio.authToken = token;\n resolve(token);\n }\n\n resolve(null);\n } else {\n resolve(null);\n }\n });\n};\n\nLbryio.getCurrentUser = function () {\n return Lbryio.call('user', 'me');\n};\n\nLbryio.authenticate = function () {\n if (!Lbryio.enabled) {\n return new Promise(function (resolve) {\n resolve({\n id: 1,\n language: 'en',\n primary_email: 'disabled@lbry.io',\n has_verified_email: true,\n is_identity_verified: true,\n is_reward_approved: false\n });\n });\n }\n\n if (Lbryio.authenticationPromise === null) {\n Lbryio.authenticationPromise = new Promise(function (resolve, reject) {\n Lbryio.getAuthToken().then(function (token) {\n if (!token || token.length > 60) {\n return false;\n } // check that token works\n\n\n return Lbryio.getCurrentUser().then(function (user) {\n return user;\n })[\"catch\"](function () {\n return false;\n });\n }).then(function (user) {\n if (user) {\n return user;\n }\n\n return lbryRedux.Lbry.status().then(function (status) {\n if (Lbryio.overrides.setAuthToken) {\n return Lbryio.overrides.setAuthToken(status);\n } // simply call the logic to create a new user, and obtain the auth token\n\n\n return new Promise(function (res, rej) {\n Lbryio.call('user', 'new', {\n auth_token: '',\n language: 'en',\n app_id: status.installation_id\n }, 'post').then(function (response) {\n if (!response.auth_token) {\n throw new Error('auth_token was not set in the response');\n }\n\n var _window2 = window,\n store = _window2.store;\n\n if (store) {\n store.dispatch({\n type: GENERATE_AUTH_TOKEN_SUCCESS,\n data: {\n authToken: response.auth_token\n }\n });\n }\n\n Lbryio.authToken = response.auth_token;\n res(response);\n })[\"catch\"](function (error) {\n return rej(error);\n });\n });\n });\n }).then(function (user) {\n if (!user) {\n return Lbryio.getCurrentUser();\n }\n\n return user;\n }).then(resolve, reject);\n });\n }\n\n return Lbryio.authenticationPromise;\n};\n\nLbryio.getStripeToken = function () {\n return Lbryio.CONNECTION_STRING.startsWith('http://localhost:') ? 'pk_test_NoL1JWL7i1ipfhVId5KfDZgo' : 'pk_live_e8M4dRNnCCbmpZzduEUZBgJO';\n};\n\nLbryio.getExchangeRates = function () {\n if (!Lbryio.exchangeLastFetched || Date.now() - Lbryio.exchangeLastFetched > EXCHANGE_RATE_TIMEOUT) {\n Lbryio.exchangePromise = new Promise(function (resolve, reject) {\n Lbryio.call('lbc', 'exchange_rate', {}, 'get', true).then(function (_ref) {\n var LBC_USD = _ref.lbc_usd,\n LBC_BTC = _ref.lbc_btc,\n BTC_USD = _ref.btc_usd;\n var rates = {\n LBC_USD: LBC_USD,\n LBC_BTC: LBC_BTC,\n BTC_USD: BTC_USD\n };\n resolve(rates);\n })[\"catch\"](reject);\n });\n Lbryio.exchangeLastFetched = Date.now();\n }\n\n return Lbryio.exchangePromise;\n}; // Allow overriding lbryio methods\n// The desktop app will need to use it for getAuthToken because we use electron's ipcRenderer\n\n\nLbryio.overrides = {};\n\nLbryio.setOverride = function (methodName, newMethod) {\n Lbryio.overrides[methodName] = newMethod;\n};\n\nvar rewards = {};\nrewards.TYPE_NEW_DEVELOPER = 'new_developer';\nrewards.TYPE_NEW_USER = 'new_user';\nrewards.TYPE_CONFIRM_EMAIL = 'email_provided';\nrewards.TYPE_FIRST_CHANNEL = 'new_channel';\nrewards.TYPE_FIRST_STREAM = 'first_stream';\nrewards.TYPE_MANY_DOWNLOADS = 'many_downloads';\nrewards.TYPE_FIRST_PUBLISH = 'first_publish';\nrewards.TYPE_REFERRAL = 'referrer';\nrewards.TYPE_REFEREE = 'referee';\nrewards.TYPE_REWARD_CODE = 'reward_code';\nrewards.TYPE_SUBSCRIPTION = 'subscription';\nrewards.YOUTUBE_CREATOR = 'youtube_creator';\nrewards.TYPE_DAILY_VIEW = 'daily_view';\nrewards.TYPE_NEW_ANDROID = 'new_android';\n\nrewards.claimReward = function (type, rewardParams) {\n function requestReward(resolve, reject, params) {\n if (!Lbryio.enabled) {\n reject(new Error(__('Rewards are not enabled.')));\n return;\n }\n\n Lbryio.call('reward', 'claim', params, 'post').then(function (reward) {\n var message = reward.reward_notification || \"You have claimed a \".concat(reward.reward_amount, \" LBC reward.\"); // Display global notice\n\n var action = lbryRedux.doToast({\n message: message,\n linkText: __('Show All'),\n linkTarget: '/rewards'\n });\n window.store.dispatch(action);\n\n if (rewards.callbacks.claimRewardSuccess) {\n rewards.callbacks.claimRewardSuccess();\n }\n\n resolve(reward);\n }, reject);\n }\n\n return new Promise(function (resolve, reject) {\n lbryRedux.Lbry.address_unused().then(function (address) {\n var params = _objectSpread({\n reward_type: type,\n wallet_address: address\n }, rewardParams);\n\n switch (type) {\n case rewards.TYPE_FIRST_CHANNEL:\n lbryRedux.Lbry.channel_list({\n page: 1,\n page_size: 10\n }).then(function (claims) {\n var claim = claims.items && claims.items.find(function (foundClaim) {\n return foundClaim.name.length && foundClaim.name[0] === '@' && foundClaim.txid.length && foundClaim.type === 'claim';\n });\n\n if (claim) {\n params.transaction_id = claim.txid;\n requestReward(resolve, reject, params);\n } else {\n reject(new Error(__('Please create a channel identity first.')));\n }\n })[\"catch\"](reject);\n break;\n\n case rewards.TYPE_FIRST_PUBLISH:\n lbryRedux.Lbry.stream_list({\n page: 1,\n page_size: 10\n }).then(function (claims) {\n var claim = claims.items && claims.items.find(function (foundClaim) {\n return foundClaim.name.length && foundClaim.name[0] !== '@' && foundClaim.txid.length && foundClaim.type === 'claim';\n });\n\n if (claim) {\n params.transaction_id = claim.txid;\n requestReward(resolve, reject, params);\n } else {\n reject(claims.length ? new Error(__('Please publish something and wait for confirmation by the network to claim this reward.')) : new Error(__('Please publish something to claim this reward.')));\n }\n })[\"catch\"](reject);\n break;\n\n case rewards.TYPE_FIRST_STREAM:\n case rewards.TYPE_NEW_USER:\n default:\n requestReward(resolve, reject, params);\n }\n });\n });\n};\n\nrewards.callbacks = {\n // Set any callbacks that require code not found in this project\n claimRewardSuccess: null,\n claimFirstRewardSuccess: null,\n rewardApprovalRequired: null\n};\n\nrewards.setCallback = function (name, method) {\n rewards.callbacks[name] = method;\n};\n\nvar VIEW_ALL = 'view_all';\nvar DOWNLOADING = 'DOWNLOADING';\nvar NOTIFY_ONLY = 'NOTIFY_ONLY;'; // Suggested types\n\nvar SUGGESTED_TOP_SUBSCRIBED = 'top_subscribed';\nvar SUGGESTED_FEATURED = 'featured'; // util for creating reducers\n// based off of redux-actions\n// https://redux-actions.js.org/docs/api/handleAction.html#handleactions\n// eslint-disable-next-line import/prefer-default-export\n\nvar handleActions = function handleActions(actionMap, defaultState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = actionMap[action.type];\n\n if (handler) {\n var newState = handler(state, action);\n return Object.assign({}, state, newState);\n } // just return the original state if no handler\n // returning a copy here breaks redux-persist\n\n\n return state;\n };\n}; // \n\n\nvar defaultState = {\n enabledChannelNotifications: [],\n subscriptions: [],\n latest: {},\n unread: {},\n suggested: {},\n loading: false,\n viewMode: VIEW_ALL,\n loadingSuggested: false,\n firstRunCompleted: false,\n showSuggestedSubs: false\n};\nvar subscriptions = handleActions((_handleActions = {}, _defineProperty(_handleActions, CHANNEL_SUBSCRIBE, function (state, action) {\n var newSubscription = action.data;\n var newSubscriptions = state.subscriptions.slice();\n\n if (!newSubscriptions.some(function (sub) {\n return sub.uri === newSubscription.uri;\n })) {\n newSubscriptions.unshift(newSubscription);\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, CHANNEL_UNSUBSCRIBE, function (state, action) {\n var subscriptionToRemove = action.data;\n var newSubscriptions = state.subscriptions.slice().filter(function (subscription) {\n return subscription.channelName !== subscriptionToRemove.channelName;\n }); // Check if we need to remove it from the 'unread' state\n\n var unread = state.unread;\n\n if (unread[subscriptionToRemove.uri]) {\n delete unread[subscriptionToRemove.uri];\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, unread),\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, SET_SUBSCRIPTION_LATEST, function (state, action) {\n var _action$data = action.data,\n subscription = _action$data.subscription,\n uri = _action$data.uri;\n var newLatest = Object.assign({}, state.latest);\n newLatest[subscription.uri] = uri;\n return _objectSpread({}, state, {\n latest: newLatest\n });\n}), _defineProperty(_handleActions, UPDATE_SUBSCRIPTION_UNREADS, function (state, action) {\n var _action$data2 = action.data,\n channel = _action$data2.channel,\n uris = _action$data2.uris,\n type = _action$data2.type;\n return _objectSpread({}, state, {\n unread: _objectSpread({}, state.unread, _defineProperty({}, channel, {\n uris: uris,\n type: type\n }))\n });\n}), _defineProperty(_handleActions, REMOVE_SUBSCRIPTION_UNREADS, function (state, action) {\n var _action$data3 = action.data,\n channel = _action$data3.channel,\n uris = _action$data3.uris; // If no channel is passed in, remove all unreads\n\n var newUnread;\n\n if (channel) {\n newUnread = _objectSpread({}, state.unread);\n\n if (!uris) {\n delete newUnread[channel];\n } else {\n newUnread[channel].uris = uris;\n }\n } else {\n newUnread = {};\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, newUnread)\n });\n}), _defineProperty(_handleActions, CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS, function (state, action) {\n var channelName = action.data;\n var newEnabledChannelNotifications = state.enabledChannelNotifications.slice();\n\n if (channelName && channelName.trim().length > 0 && newEnabledChannelNotifications.indexOf(channelName) === -1) {\n newEnabledChannelNotifications.push(channelName);\n }\n\n return _objectSpread({}, state, {\n enabledChannelNotifications: newEnabledChannelNotifications\n });\n}), _defineProperty(_handleActions, CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS, function (state, action) {\n var channelName = action.data;\n var newEnabledChannelNotifications = state.enabledChannelNotifications.slice();\n var index = newEnabledChannelNotifications.indexOf(channelName);\n\n if (index > -1) {\n newEnabledChannelNotifications.splice(index, 1);\n }\n\n return _objectSpread({}, state, {\n enabledChannelNotifications: newEnabledChannelNotifications\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_START, function (state) {\n return _objectSpread({}, state, {\n loading: true\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_FAIL, function (state) {\n return _objectSpread({}, state, {\n loading: false\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_SUCCESS, function (state, action) {\n return _objectSpread({}, state, {\n loading: false,\n subscriptions: action.data\n });\n}), _defineProperty(_handleActions, SET_VIEW_MODE, function (state, action) {\n return _objectSpread({}, state, {\n viewMode: action.data\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_START, function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: true\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS, function (state, action) {\n return _objectSpread({}, state, {\n suggested: action.data,\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_FAIL, function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, SUBSCRIPTION_FIRST_RUN_COMPLETED, function (state) {\n return _objectSpread({}, state, {\n firstRunCompleted: true\n });\n}), _defineProperty(_handleActions, VIEW_SUGGESTED_SUBSCRIPTIONS, function (state) {\n return _objectSpread({}, state, {\n showSuggestedSubs: true\n });\n}), _defineProperty(_handleActions, lbryRedux.ACTIONS.USER_STATE_POPULATE, function (state, action) {\n var subscriptions = action.data.subscriptions;\n var newSubscriptions;\n\n if (!subscriptions) {\n newSubscriptions = state.subscriptions;\n } else {\n var parsedSubscriptions = subscriptions.map(function (uri) {\n var _lbryRedux$parseURI = lbryRedux.parseURI(uri),\n channelName = _lbryRedux$parseURI.channelName;\n\n return {\n uri: uri,\n channelName: \"@\".concat(channelName)\n };\n });\n\n if (!state.subscriptions || !state.subscriptions.length) {\n newSubscriptions = parsedSubscriptions;\n } else {\n var map = {};\n newSubscriptions = parsedSubscriptions.concat(state.subscriptions).filter(function (sub) {\n return map[sub.uri] ? false : map[sub.uri] = true;\n }, {});\n }\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _handleActions), defaultState);\n\nfunction swapKeyAndValue(dict) {\n var ret = {}; // eslint-disable-next-line no-restricted-syntax\n\n for (var key in dict) {\n if (dict.hasOwnProperty(key)) {\n ret[dict[key]] = key;\n }\n }\n\n return ret;\n}\n\nvar selectState = function selectState(state) {\n return state.subscriptions || {};\n}; // Returns the list of channel uris a user is subscribed to\n\n\nvar selectSubscriptions = reselect.createSelector(selectState, function (state) {\n return state.subscriptions;\n}); // Fetching list of users subscriptions\n\nvar selectIsFetchingSubscriptions = reselect.createSelector(selectState, function (state) {\n return state.loading;\n}); // The current view mode on the subscriptions page\n\nvar selectViewMode = reselect.createSelector(selectState, function (state) {\n return state.viewMode;\n}); // Suggested subscriptions from internal apis\n\nvar selectSuggested = reselect.createSelector(selectState, function (state) {\n return state.suggested;\n});\nvar selectIsFetchingSuggested = reselect.createSelector(selectState, function (state) {\n return state.loadingSuggested;\n});\nvar selectSuggestedChannels = reselect.createSelector(selectSubscriptions, selectSuggested, function (userSubscriptions, suggested) {\n if (!suggested) {\n return null;\n } // Swap the key/value because we will use the uri for everything, this just makes it easier\n // suggested is returned from the api with the form:\n // {\n // featured: { \"Channel label\": uri, ... },\n // top_subscribed: { \"@channel\": uri, ... }\n // top_bid: { \"@channel\": uri, ... }\n // }\n // To properly compare the suggested subscriptions from our current subscribed channels\n // We only care about the uri, not the label\n // We also only care about top_subscribed and featured\n // top_bid could just be porn or a channel with no content\n\n\n var topSubscribedSuggestions = swapKeyAndValue(suggested[SUGGESTED_TOP_SUBSCRIBED]);\n var featuredSuggestions = swapKeyAndValue(suggested[SUGGESTED_FEATURED]); // Make sure there are no duplicates\n // If a uri isn't already in the suggested object, add it\n\n var suggestedChannels = _objectSpread({}, topSubscribedSuggestions);\n\n Object.keys(featuredSuggestions).forEach(function (uri) {\n if (!suggestedChannels[uri]) {\n var channelLabel = featuredSuggestions[uri];\n suggestedChannels[uri] = channelLabel;\n }\n });\n userSubscriptions.forEach(function (_ref2) {\n var uri = _ref2.uri; // Note to passer bys:\n // Maybe we should just remove the `lbry://` prefix from subscription uris\n // Most places don't store them like that\n\n var subscribedUri = uri.slice('lbry://'.length);\n\n if (suggestedChannels[subscribedUri]) {\n delete suggestedChannels[subscribedUri];\n }\n });\n return Object.keys(suggestedChannels).map(function (uri) {\n return {\n uri: uri,\n label: suggestedChannels[uri]\n };\n }).slice(0, 5);\n});\nvar selectFirstRunCompleted = reselect.createSelector(selectState, function (state) {\n return state.firstRunCompleted;\n});\nvar selectShowSuggestedSubs = reselect.createSelector(selectState, function (state) {\n return state.showSuggestedSubs;\n}); // Fetching any claims that are a part of a users subscriptions\n\nvar selectSubscriptionsBeingFetched = reselect.createSelector(selectSubscriptions, lbryRedux.selectAllFetchingChannelClaims, function (subscriptions, fetchingChannelClaims) {\n var fetchingSubscriptionMap = {};\n subscriptions.forEach(function (sub) {\n var isFetching = fetchingChannelClaims && fetchingChannelClaims[sub.uri];\n\n if (isFetching) {\n fetchingSubscriptionMap[sub.uri] = true;\n }\n });\n return fetchingSubscriptionMap;\n});\nvar selectUnreadByChannel = reselect.createSelector(selectState, function (state) {\n return state.unread;\n}); // Returns the current total of unread subscriptions\n\nvar selectUnreadAmount = reselect.createSelector(selectUnreadByChannel, function (unreadByChannel) {\n var unreadChannels = Object.keys(unreadByChannel);\n var badges = 0;\n\n if (!unreadChannels.length) {\n return badges;\n }\n\n unreadChannels.forEach(function (channel) {\n badges += unreadByChannel[channel].uris.length;\n });\n return badges;\n}); // Returns the uris with channels as an array with the channel with the newest content first\n// If you just want the `unread` state, use selectUnread\n\nvar selectUnreadSubscriptions = reselect.createSelector(selectUnreadAmount, selectUnreadByChannel, lbryRedux.selectClaimsByUri, function (unreadAmount, unreadByChannel, claimsByUri) {\n // determine which channel has the newest content\n var unreadList = [];\n\n if (!unreadAmount) {\n return unreadList;\n }\n\n var channelUriList = Object.keys(unreadByChannel); // There is only one channel with unread notifications\n\n if (unreadAmount === 1) {\n channelUriList.forEach(function (channel) {\n var unreadChannel = {\n channel: channel,\n uris: unreadByChannel[channel].uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n }\n\n channelUriList.sort(function (channel1, channel2) {\n var latestUriFromChannel1 = unreadByChannel[channel1].uris[0];\n var latestClaimFromChannel1 = claimsByUri[latestUriFromChannel1] || {};\n var latestUriFromChannel2 = unreadByChannel[channel2].uris[0];\n var latestClaimFromChannel2 = claimsByUri[latestUriFromChannel2] || {};\n var latestHeightFromChannel1 = latestClaimFromChannel1.height || 0;\n var latestHeightFromChannel2 = latestClaimFromChannel2.height || 0;\n\n if (latestHeightFromChannel1 !== latestHeightFromChannel2) {\n return latestHeightFromChannel2 - latestHeightFromChannel1;\n }\n\n return 0;\n }).forEach(function (channel) {\n var unreadSubscription = unreadByChannel[channel];\n var unreadChannel = {\n channel: channel,\n uris: unreadSubscription.uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n}); // Returns all unread subscriptions for a uri passed in\n\nvar makeSelectUnreadByChannel = function makeSelectUnreadByChannel(uri) {\n return reselect.createSelector(selectUnreadByChannel, function (unread) {\n return unread[uri];\n });\n}; // Returns the first page of claims for every channel a user is subscribed to\n\n\nvar selectSubscriptionClaims = reselect.createSelector(lbryRedux.selectAllClaimsByChannel, lbryRedux.selectClaimsById, selectSubscriptions, selectUnreadByChannel, function (channelIds, allClaims, savedSubscriptions, unreadByChannel) {\n // no claims loaded yet\n if (!Object.keys(channelIds).length) {\n return [];\n }\n\n var fetchedSubscriptions = [];\n savedSubscriptions.forEach(function (subscription) {\n var channelClaims = []; // if subscribed channel has content\n\n if (channelIds[subscription.uri] && channelIds[subscription.uri]['1']) {\n // This will need to be more robust, we will want to be able to load more than the first page\n // Strip out any ids that will be shown as notifications\n var pageOneChannelIds = channelIds[subscription.uri]['1']; // we have the channel ids and the corresponding claims\n // loop over the list of ids and grab the claim\n\n pageOneChannelIds.forEach(function (id) {\n var grabbedClaim = allClaims[id];\n\n if (unreadByChannel[subscription.uri] && unreadByChannel[subscription.uri].uris.some(function (uri) {\n return uri.includes(id);\n })) {\n grabbedClaim.isNew = true;\n }\n\n channelClaims = channelClaims.concat([grabbedClaim]);\n });\n }\n\n fetchedSubscriptions = fetchedSubscriptions.concat(channelClaims);\n });\n return fetchedSubscriptions;\n}); // Returns true if a user is subscribed to the channel associated with the uri passed in\n// Accepts content or channel uris\n\nvar makeSelectIsSubscribed = function makeSelectIsSubscribed(uri) {\n return reselect.createSelector(selectSubscriptions, lbryRedux.makeSelectChannelForClaimUri(uri, true), function (subscriptions, channelUri) {\n if (channelUri) {\n return subscriptions.some(function (sub) {\n return sub.uri === channelUri;\n });\n } // If we couldn't get a channel uri from the claim uri, the uri passed in might be a channel already\n\n\n var _lbryRedux$parseURI2 = lbryRedux.parseURI(uri),\n isChannel = _lbryRedux$parseURI2.isChannel;\n\n if (isChannel) {\n var uriWithPrefix = uri.startsWith('lbry://') ? uri : \"lbry://\".concat(uri);\n return subscriptions.some(function (sub) {\n return sub.uri === uriWithPrefix;\n });\n }\n\n return false;\n });\n};\n\nvar makeSelectIsNew = function makeSelectIsNew(uri) {\n return reselect.createSelector(makeSelectIsSubscribed(uri), lbryRedux.makeSelectChannelForClaimUri(uri), selectUnreadByChannel, function (isSubscribed, channel, unreadByChannel) {\n if (!isSubscribed) {\n return false;\n }\n\n var unreadForChannel = unreadByChannel[\"lbry://\".concat(channel)];\n\n if (unreadForChannel) {\n return unreadForChannel.uris.includes(uri);\n }\n\n return false; // If they are subscribed, check to see if this uri is in the list of unreads\n });\n};\n\nvar selectEnabledChannelNotifications = reselect.createSelector(selectState, function (state) {\n return state.enabledChannelNotifications;\n});\nvar persistShape = {\n version: '0',\n shared: {}\n};\n\nfunction userStateSyncMiddleware() {\n return function (_ref3) {\n var getState = _ref3.getState;\n return function (next) {\n return function (action) {\n if (action.type === CHANNEL_SUBSCRIBE || action.type === CHANNEL_UNSUBSCRIBE || action.type === lbryRedux.ACTIONS.TOGGLE_TAG_FOLLOW) {\n var newShape = _objectSpread({}, persistShape);\n\n var state = getState();\n\n var _subscriptions = selectSubscriptions(state).map(function (_ref4) {\n var uri = _ref4.uri;\n return uri;\n });\n\n var tags = lbryRedux.selectFollowedTags(state);\n newShape.shared.subscriptions = _subscriptions;\n newShape.shared.tags = tags;\n var uri = action.data.uri;\n\n if (action.type === CHANNEL_SUBSCRIBE) {\n var newSubscriptions = _subscriptions.slice();\n\n newSubscriptions.push(uri);\n newShape.shared.subscriptions = newSubscriptions;\n } else if (action.type === CHANNEL_UNSUBSCRIBE) {\n var _newSubscriptions = _subscriptions.slice();\n\n _newSubscriptions = _newSubscriptions.filter(function (subscribedUri) {\n return subscribedUri !== uri;\n });\n newShape.shared.subscriptions = _newSubscriptions;\n } else {\n var toggledTag = action.data.name;\n var followedTags = lbryRedux.selectFollowedTags(state).map(function (_ref5) {\n var name = _ref5.name;\n return name;\n });\n var isFollowing = lbryRedux.makeSelectIsFollowingTag(toggledTag)(state);\n var newTags = followedTags.slice();\n\n if (isFollowing) {\n newTags = newTags.filter(function (followedTag) {\n return followedTag.name !== toggledTag;\n });\n } else {\n newTags.push(toggledTag);\n }\n\n newShape.shared.tags = newTags;\n }\n\n Lbryio.call('user_settings', 'set', {\n settings: newShape\n });\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar apiBaseUrl = 'https://www.transifex.com/api/2/project';\nvar resource = 'app-strings';\n\nfunction doTransifexUpload(contents, project, token, success, fail) {\n var url = \"\".concat(apiBaseUrl, \"/\").concat(project, \"/resources/\");\n var updateUrl = \"\".concat(apiBaseUrl, \"/\").concat(project, \"/resource/\").concat(resource, \"/content/\");\n var headers = {\n Authorization: \"Basic \".concat(Buffer.from(\"api:\".concat(token)).toString('base64')),\n 'Content-Type': 'application/json'\n };\n var req = {\n accept_translations: true,\n i18n_type: 'KEYVALUEJSON',\n name: resource,\n slug: resource,\n content: contents\n };\n\n function handleResponse(text) {\n var json;\n\n try {\n // transifex api returns Python dicts for some reason.\n // Any way to get the api to return valid JSON?\n json = JSON.parse(text);\n } catch (e) {// ignore\n }\n\n if (success) {\n success(json || text);\n }\n }\n\n function handleError(err) {\n if (fail) {\n fail(err.message ? err.message : 'Could not upload strings resource to Transifex');\n }\n } // check if the resource exists\n\n\n fetch(updateUrl, {\n headers: headers\n }).then(function (response) {\n return response.json();\n }).then(function () {\n // perform an update\n fetch(updateUrl, {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify({\n content: contents\n })\n }).then(function (response) {\n if (response.status !== 200 && response.status !== 201) {\n throw new Error('failed to update transifex');\n }\n\n return response.text();\n }).then(handleResponse)[\"catch\"](handleError);\n })[\"catch\"](function () {\n // resource doesn't exist, create a fresh resource\n fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(req)\n }).then(function (response) {\n if (response.status !== 200 && response.status !== 201) {\n throw new Error('failed to upload to transifex');\n }\n\n return response.text();\n }).then(handleResponse)[\"catch\"](handleError);\n });\n}\n\nfunction doGenerateAuthToken(installationId) {\n return function (dispatch) {\n dispatch({\n type: GENERATE_AUTH_TOKEN_STARTED\n });\n Lbryio.call('user', 'new', {\n auth_token: '',\n language: 'en',\n app_id: installationId\n }, 'post').then(function (response) {\n if (!response.auth_token) {\n dispatch({\n type: GENERATE_AUTH_TOKEN_FAILURE\n });\n } else {\n dispatch({\n type: GENERATE_AUTH_TOKEN_SUCCESS,\n data: {\n authToken: response.auth_token\n }\n });\n }\n })[\"catch\"](function () {\n dispatch({\n type: GENERATE_AUTH_TOKEN_FAILURE\n });\n });\n };\n}\n\nvar selectState$1 = function selectState$1(state) {\n return state.rewards || {};\n};\n\nvar selectUnclaimedRewardsByType = reselect.createSelector(selectState$1, function (state) {\n return state.unclaimedRewardsByType;\n});\nvar selectClaimedRewardsById = reselect.createSelector(selectState$1, function (state) {\n return state.claimedRewardsById;\n});\nvar selectClaimedRewards = reselect.createSelector(selectClaimedRewardsById, function (byId) {\n return Object.values(byId) || [];\n});\nvar selectClaimedRewardsByTransactionId = reselect.createSelector(selectClaimedRewards, function (rewards) {\n return rewards.reduce(function (mapParam, reward) {\n var map = mapParam;\n map[reward.transaction_id] = reward;\n return map;\n }, {});\n});\nvar selectUnclaimedRewards = reselect.createSelector(selectState$1, function (state) {\n return state.unclaimedRewards;\n});\nvar selectFetchingRewards = reselect.createSelector(selectState$1, function (state) {\n return !!state.fetching;\n});\nvar selectUnclaimedRewardValue = reselect.createSelector(selectUnclaimedRewards, function (rewards) {\n return rewards.reduce(function (sum, reward) {\n return sum + reward.reward_amount;\n }, 0);\n});\nvar selectClaimsPendingByType = reselect.createSelector(selectState$1, function (state) {\n return state.claimPendingByType;\n});\n\nvar selectIsClaimRewardPending = function selectIsClaimRewardPending(state, props) {\n return selectClaimsPendingByType(state, props)[props.reward_type];\n};\n\nvar makeSelectIsRewardClaimPending = function makeSelectIsRewardClaimPending() {\n return reselect.createSelector(selectIsClaimRewardPending, function (isClaiming) {\n return isClaiming;\n });\n};\n\nvar selectClaimErrorsByType = reselect.createSelector(selectState$1, function (state) {\n return state.claimErrorsByType;\n});\n\nvar selectClaimRewardError = function selectClaimRewardError(state, props) {\n return selectClaimErrorsByType(state, props)[props.reward_type];\n};\n\nvar makeSelectClaimRewardError = function makeSelectClaimRewardError() {\n return reselect.createSelector(selectClaimRewardError, function (errorMessage) {\n return errorMessage;\n });\n};\n\nvar selectRewardByType = function selectRewardByType(state, rewardType) {\n return selectUnclaimedRewards(state).find(function (reward) {\n return reward.reward_type === rewardType;\n });\n};\n\nvar makeSelectRewardByType = function makeSelectRewardByType() {\n return reselect.createSelector(selectRewardByType, function (reward) {\n return reward;\n });\n};\n\nvar selectRewardByClaimCode = function selectRewardByClaimCode(state, claimCode) {\n return selectUnclaimedRewards(state).find(function (reward) {\n return reward.claim_code === claimCode;\n });\n};\n\nvar makeSelectRewardByClaimCode = function makeSelectRewardByClaimCode() {\n return reselect.createSelector(selectRewardByClaimCode, function (reward) {\n return reward;\n });\n};\n\nvar makeSelectRewardAmountByType = function makeSelectRewardAmountByType() {\n return reselect.createSelector(selectRewardByType, function (reward) {\n return reward ? reward.reward_amount : 0;\n });\n};\n\nvar selectRewardContentClaimIds = reselect.createSelector(selectState$1, function (state) {\n return state.rewardedContentClaimIds;\n});\nvar selectReferralReward = reselect.createSelector(selectUnclaimedRewards, function (unclaimedRewards) {\n return unclaimedRewards.filter(function (reward) {\n return reward.reward_type === rewards.TYPE_REFERRAL;\n })[0];\n});\n\nvar selectState$2 = function selectState$2(state) {\n return state.user || {};\n};\n\nvar selectAuthenticationIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.authenticationIsPending;\n});\nvar selectUserIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.userIsPending;\n});\nvar selectUser = reselect.createSelector(selectState$2, function (state) {\n return state.user;\n});\nvar selectEmailAlreadyExists = reselect.createSelector(selectState$2, function (state) {\n return state.emailAlreadyExists;\n});\nvar selectResendingVerificationEmail = reselect.createSelector(selectState$2, function (state) {\n return state.resendingVerificationEmail;\n});\nvar selectUserEmail = reselect.createSelector(selectUser, function (user) {\n return user ? user.primary_email : null;\n});\nvar selectUserPhone = reselect.createSelector(selectUser, function (user) {\n return user ? user.phone_number : null;\n});\nvar selectUserCountryCode = reselect.createSelector(selectUser, function (user) {\n return user ? user.country_code : null;\n});\nvar selectEmailToVerify = reselect.createSelector(selectState$2, selectUserEmail, function (state, userEmail) {\n return state.emailToVerify || userEmail;\n});\nvar selectPhoneToVerify = reselect.createSelector(selectState$2, selectUserPhone, function (state, userPhone) {\n return state.phoneToVerify || userPhone;\n});\nvar selectYoutubeChannels = reselect.createSelector(selectUser, function (user) {\n return user ? user.youtube_channels : null;\n});\nvar selectUserIsRewardApproved = reselect.createSelector(selectUser, function (user) {\n return user && user.is_reward_approved;\n});\nvar selectEmailNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.emailNewIsPending;\n});\nvar selectEmailNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.emailNewErrorMessage;\n});\nvar selectPhoneNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.phoneNewErrorMessage;\n});\nvar selectEmailVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.emailVerifyIsPending;\n});\nvar selectEmailVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.emailVerifyErrorMessage;\n});\nvar selectPhoneNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.phoneNewIsPending;\n});\nvar selectPhoneVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.phoneVerifyIsPending;\n});\nvar selectPhoneVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.phoneVerifyErrorMessage;\n});\nvar selectIdentityVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.identityVerifyIsPending;\n});\nvar selectIdentityVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.identityVerifyErrorMessage;\n});\nvar selectUserVerifiedEmail = reselect.createSelector(selectUser, function (user) {\n return user && user.has_verified_email;\n});\nvar selectUserIsVerificationCandidate = reselect.createSelector(selectUser, function (user) {\n return user && (!user.has_verified_email || !user.is_identity_verified);\n});\nvar selectAccessToken = reselect.createSelector(selectState$2, function (state) {\n return state.accessToken;\n});\nvar selectUserInviteStatusIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.inviteStatusIsPending;\n});\nvar selectUserInvitesRemaining = reselect.createSelector(selectState$2, function (state) {\n return state.invitesRemaining;\n});\nvar selectUserInvitees = reselect.createSelector(selectState$2, function (state) {\n return state.invitees;\n});\nvar selectUserInviteStatusFailed = reselect.createSelector(selectUserInvitesRemaining, function () {\n return selectUserInvitesRemaining === null;\n});\nvar selectUserInviteNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.inviteNewIsPending;\n});\nvar selectUserInviteNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.inviteNewErrorMessage;\n});\nvar selectUserInviteReferralLink = reselect.createSelector(selectState$2, function (state) {\n return state.referralLink;\n});\nvar selectUserInviteReferralCode = reselect.createSelector(selectState$2, function (state) {\n return state.referralCode ? state.referralCode[0] : '';\n});\nvar selectYouTubeImportPending = reselect.createSelector(selectState$2, function (state) {\n return state.youtubeChannelImportPending;\n});\nvar selectYouTubeImportError = reselect.createSelector(selectState$2, function (state) {\n return state.youtubeChannelImportErrorMessage;\n});\nvar selectSetReferrerPending = reselect.createSelector(selectState$2, function (state) {\n return state.referrerSetIsPending;\n});\nvar selectSetReferrerError = reselect.createSelector(selectState$2, function (state) {\n return state.referrerSetError;\n});\nvar selectYouTubeImportVideosComplete = reselect.createSelector(selectState$2, function (state) {\n var total = state.youtubeChannelImportTotal;\n var complete = state.youtubeChannelImportComplete || 0;\n\n if (total) {\n return [complete, total];\n }\n});\n\nfunction doFetchInviteStatus() {\n return function (dispatch) {\n dispatch({\n type: USER_INVITE_STATUS_FETCH_STARTED\n });\n Promise.all([Lbryio.call('user', 'invite_status'), Lbryio.call('user_referral_code', 'list')]).then(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n status = _ref7[0],\n code = _ref7[1];\n\n dispatch(doRewardList());\n dispatch({\n type: USER_INVITE_STATUS_FETCH_SUCCESS,\n data: {\n invitesRemaining: status.invites_remaining ? status.invites_remaining : 0,\n invitees: status.invitees,\n referralLink: \"\".concat(Lbryio.CONNECTION_STRING, \"user/refer?r=\").concat(code),\n referralCode: code\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_INVITE_STATUS_FETCH_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doInstallNew(appVersion) {\n var os = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var firebaseToken = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var callbackForUsersWhoAreSharingData = arguments.length > 3 ? arguments[3] : undefined;\n var payload = {\n app_version: appVersion\n };\n\n if (firebaseToken) {\n payload.firebase_token = firebaseToken;\n }\n\n lbryRedux.Lbry.status().then(function (status) {\n payload.app_id = status.installation_id;\n payload.node_id = status.lbry_id;\n lbryRedux.Lbry.version().then(function (version) {\n payload.daemon_version = version.lbrynet_version;\n payload.operating_system = os || version.os_system;\n payload.platform = version.platform;\n Lbryio.call('install', 'new', payload);\n\n if (callbackForUsersWhoAreSharingData) {\n callbackForUsersWhoAreSharingData(status);\n }\n });\n });\n}\n\nfunction doInstallNewWithParams(appVersion, installationId, nodeId, lbrynetVersion, os, platform) {\n var firebaseToken = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n return function (dispatch) {\n var payload = {\n app_version: appVersion\n };\n\n if (firebaseToken) {\n payload.firebase_token = firebaseToken;\n }\n\n payload.app_id = installationId;\n payload.node_id = nodeId;\n payload.daemon_version = lbrynetVersion;\n payload.operating_system = os;\n payload.platform = platform;\n Lbryio.call('install', 'new', payload);\n };\n} // TODO: Call doInstallNew separately so we don't have to pass appVersion and os_system params?\n\n\nfunction doAuthenticate(appVersion) {\n var os = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var firebaseToken = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var shareUsageData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var callbackForUsersWhoAreSharingData = arguments.length > 4 ? arguments[4] : undefined;\n var callInstall = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n return function (dispatch) {\n dispatch({\n type: AUTHENTICATION_STARTED\n });\n Lbryio.authenticate().then(function (user) {\n Lbryio.getAuthToken().then(function (token) {\n dispatch({\n type: AUTHENTICATION_SUCCESS,\n data: {\n user: user,\n accessToken: token\n }\n });\n\n if (shareUsageData) {\n dispatch(doRewardList());\n dispatch(doFetchInviteStatus());\n\n if (callInstall) {\n doInstallNew(appVersion, os, firebaseToken, callbackForUsersWhoAreSharingData);\n }\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: AUTHENTICATION_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserFetch() {\n return function (dispatch) {\n dispatch({\n type: USER_FETCH_STARTED\n });\n Lbryio.getCurrentUser().then(function (user) {\n dispatch(doRewardList());\n dispatch({\n type: USER_FETCH_SUCCESS,\n data: {\n user: user\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_FETCH_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserCheckEmailVerified() {\n // This will happen in the background so we don't need loading booleans\n return function (dispatch) {\n Lbryio.getCurrentUser().then(function (user) {\n if (user.has_verified_email) {\n dispatch(doRewardList());\n dispatch({\n type: USER_FETCH_SUCCESS,\n data: {\n user: user\n }\n });\n }\n });\n };\n}\n\nfunction doUserPhoneReset() {\n return {\n type: USER_PHONE_RESET\n };\n}\n\nfunction doUserPhoneNew(phone, countryCode) {\n return function (dispatch) {\n dispatch({\n type: USER_PHONE_NEW_STARTED,\n data: {\n phone: phone,\n country_code: countryCode\n }\n });\n\n var success = function success() {\n dispatch({\n type: USER_PHONE_NEW_SUCCESS,\n data: {\n phone: phone\n }\n });\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_PHONE_NEW_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user', 'phone_number_new', {\n phone_number: phone,\n country_code: countryCode\n }, 'post').then(success, failure);\n };\n}\n\nfunction doUserPhoneVerifyFailure(error) {\n return {\n type: USER_PHONE_VERIFY_FAILURE,\n data: {\n error: error\n }\n };\n}\n\nfunction doUserPhoneVerify(verificationCode) {\n return function (dispatch, getState) {\n var phoneNumber = selectPhoneToVerify(getState());\n var countryCode = selectUserCountryCode(getState());\n dispatch({\n type: USER_PHONE_VERIFY_STARTED,\n code: verificationCode\n });\n Lbryio.call('user', 'phone_number_confirm', {\n verification_code: verificationCode,\n phone_number: phoneNumber,\n country_code: countryCode\n }, 'post').then(function (user) {\n if (user.is_identity_verified) {\n dispatch({\n type: USER_PHONE_VERIFY_SUCCESS,\n data: {\n user: user\n }\n });\n dispatch(doClaimRewardType(rewards.TYPE_NEW_USER));\n }\n })[\"catch\"](function (error) {\n return dispatch(doUserPhoneVerifyFailure(error));\n });\n };\n}\n\nfunction doUserEmailToVerify(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_VERIFY_SET,\n data: {\n email: email\n }\n });\n };\n}\n\nfunction doUserEmailNew(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_NEW_STARTED,\n email: email\n });\n\n var success = function success() {\n dispatch({\n type: USER_EMAIL_NEW_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(doUserFetch());\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_EMAIL_NEW_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user_email', 'new', {\n email: email,\n send_verification_email: true\n }, 'post')[\"catch\"](function (error) {\n if (error.response && error.response.status === 409) {\n dispatch({\n type: USER_EMAIL_NEW_EXISTS\n });\n return Lbryio.call('user_email', 'resend_token', {\n email: email,\n only_if_expired: true\n }, 'post').then(success, failure);\n }\n\n throw error;\n }).then(success, failure);\n };\n}\n\nfunction doUserResendVerificationEmail(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_STARTED\n });\n\n var success = function success() {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_SUCCESS\n });\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user_email', 'resend_token', {\n email: email\n }, 'post')[\"catch\"](function (error) {\n if (error.response && error.response.status === 409) {\n throw error;\n }\n }).then(success, failure);\n };\n}\n\nfunction doUserEmailVerifyFailure(error) {\n return {\n type: USER_EMAIL_VERIFY_FAILURE,\n data: {\n error: error\n }\n };\n}\n\nfunction doUserEmailVerify(verificationToken, recaptcha) {\n return function (dispatch, getState) {\n var email = selectEmailToVerify(getState());\n dispatch({\n type: USER_EMAIL_VERIFY_STARTED,\n code: verificationToken,\n recaptcha: recaptcha\n });\n Lbryio.call('user_email', 'confirm', {\n verification_token: verificationToken,\n email: email,\n recaptcha: recaptcha\n }, 'post').then(function (userEmail) {\n if (userEmail.is_verified) {\n dispatch({\n type: USER_EMAIL_VERIFY_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(doUserFetch());\n } else {\n throw new Error('Your email is still not verified.'); // shouldn't happen\n }\n })[\"catch\"](function (error) {\n return dispatch(doUserEmailVerifyFailure(error));\n });\n };\n}\n\nfunction doFetchAccessToken() {\n return function (dispatch) {\n var success = function success(token) {\n return dispatch({\n type: FETCH_ACCESS_TOKEN_SUCCESS,\n data: {\n token: token\n }\n });\n };\n\n Lbryio.getAuthToken().then(success);\n };\n}\n\nfunction doUserIdentityVerify(stripeToken) {\n return function (dispatch) {\n dispatch({\n type: USER_IDENTITY_VERIFY_STARTED,\n token: stripeToken\n });\n Lbryio.call('user', 'verify_identity', {\n stripe_token: stripeToken\n }, 'post').then(function (user) {\n if (user.is_identity_verified) {\n dispatch({\n type: USER_IDENTITY_VERIFY_SUCCESS,\n data: {\n user: user\n }\n });\n dispatch(doClaimRewardType(rewards.TYPE_NEW_USER));\n } else {\n throw new Error('Your identity is still not verified. This should not happen.'); // shouldn't happen\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_IDENTITY_VERIFY_FAILURE,\n data: {\n error: error.toString()\n }\n });\n });\n };\n}\n\nfunction doUserInviteNew(email) {\n return function (dispatch) {\n dispatch({\n type: USER_INVITE_NEW_STARTED\n });\n return Lbryio.call('user', 'invite', {\n email: email\n }, 'post').then(function (success) {\n dispatch({\n type: USER_INVITE_NEW_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(lbryRedux.doToast({\n message: __(\"Invite sent to \".concat(email))\n }));\n dispatch(doFetchInviteStatus());\n return success;\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_INVITE_NEW_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserSetReferrerReset() {\n return function (dispatch) {\n dispatch({\n type: USER_SET_REFERRER_RESET\n });\n };\n}\n\nfunction doUserSetReferrer(referrer, shouldClaim) {\n return function _callee(dispatch, getState) {\n var claim, referrerCode, _lbryRedux$parseURI3, isChannel, uri, response;\n\n return regeneratorRuntime.async(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n dispatch({\n type: USER_SET_REFERRER_STARTED\n });\n _lbryRedux$parseURI3 = lbryRedux.parseURI(referrer), isChannel = _lbryRedux$parseURI3.isChannel;\n\n if (!isChannel) {\n _context.next = 17;\n break;\n }\n\n uri = \"lbry://\".concat(referrer);\n claim = lbryRedux.makeSelectClaimForUri(uri)(getState());\n\n if (claim) {\n _context.next = 16;\n break;\n }\n\n _context.prev = 6;\n _context.next = 9;\n return regeneratorRuntime.awrap(lbryRedux.Lbry.resolve({\n urls: [uri]\n }));\n\n case 9:\n response = _context.sent;\n claim = response && response[uri];\n _context.next = 16;\n break;\n\n case 13:\n _context.prev = 13;\n _context.t0 = _context[\"catch\"](6);\n dispatch({\n type: USER_SET_REFERRER_FAILURE,\n data: {\n error: _context.t0\n }\n });\n\n case 16:\n referrerCode = claim && claim.permanent_url && claim.permanent_url.replace('lbry://', '');\n\n case 17:\n if (!referrerCode) {\n referrerCode = referrer;\n }\n\n _context.prev = 18;\n _context.next = 21;\n return regeneratorRuntime.awrap(Lbryio.call('user', 'referral', {\n referrer: referrerCode\n }, 'post'));\n\n case 21:\n dispatch({\n type: USER_SET_REFERRER_SUCCESS\n });\n\n if (shouldClaim) {\n dispatch(doClaimRewardType(rewards.TYPE_REFEREE));\n dispatch(doUserFetch());\n } else {\n dispatch(doUserFetch());\n }\n\n _context.next = 28;\n break;\n\n case 25:\n _context.prev = 25;\n _context.t1 = _context[\"catch\"](18);\n dispatch({\n type: USER_SET_REFERRER_FAILURE,\n data: {\n error: _context.t1\n }\n });\n\n case 28:\n case \"end\":\n return _context.stop();\n }\n }\n }, null, null, [[6, 13], [18, 25]]);\n };\n}\n\nfunction doClaimYoutubeChannels() {\n return function (dispatch) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_STARTED\n });\n var transferResponse;\n return lbryRedux.Lbry.address_list({\n page: 1,\n page_size: 99999\n }).then(function (addressList) {\n return addressList.items.sort(function (a, b) {\n return a.used_times - b.used_times;\n })[0];\n }).then(function (address) {\n return Lbryio.call('yt', 'transfer', {\n address: address.address,\n public_key: address.pubkey\n }).then(function (response) {\n if (response && response.length) {\n transferResponse = response;\n return Promise.all(response.map(function (channelMeta) {\n if (channelMeta && channelMeta.channel && channelMeta.channel.channel_certificate) {\n return lbryRedux.Lbry.channel_import({\n channel_data: channelMeta.channel.channel_certificate\n });\n }\n\n return null;\n })).then(function () {\n var actions = [{\n type: USER_YOUTUBE_IMPORT_SUCCESS,\n data: transferResponse\n }];\n actions.push(doUserFetch());\n actions.push(lbryRedux.doFetchChannelListMine());\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n });\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_FAILURE,\n data: String(error)\n });\n });\n };\n}\n\nfunction doCheckYoutubeTransfer() {\n return function (dispatch) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_STARTED\n });\n return Lbryio.call('yt', 'transfer').then(function (response) {\n if (response && response.length) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_SUCCESS,\n data: response\n });\n } else {\n throw new Error();\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_FAILURE,\n data: String(error)\n });\n });\n };\n}\n\nfunction doRewardList() {\n return function (dispatch) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_STARTED\n });\n Lbryio.call('reward', 'list', {\n multiple_rewards_per_type: true\n }).then(function (userRewards) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED,\n data: {\n userRewards: userRewards\n }\n });\n })[\"catch\"](function () {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED,\n data: {\n userRewards: []\n }\n });\n });\n };\n}\n\nfunction doClaimRewardType(rewardType) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function (dispatch, getState) {\n var state = getState();\n var userIsRewardApproved = selectUserIsRewardApproved(state);\n var unclaimedRewards = selectUnclaimedRewards(state);\n var reward = rewardType === rewards.TYPE_REWARD_CODE || rewardType === rewards.TYPE_NEW_ANDROID ? {\n reward_type: rewards.TYPE_REWARD_CODE\n } : unclaimedRewards.find(function (ur) {\n return ur.reward_type === rewardType;\n }); // Try to claim the email reward right away, even if we haven't called reward_list yet\n\n if (rewardType !== rewards.TYPE_REWARD_CODE || rewardType !== rewards.TYPE_CONFIRM_EMAIL || rewardType !== rewards.TYPE_DAILY_VIEW || rewardType !== rewards.TYPE_NEW_ANDROID) {\n if (!reward || reward.transaction_id) {\n // already claimed or doesn't exist, do nothing\n return;\n }\n }\n\n if (!userIsRewardApproved && rewardType !== rewards.TYPE_CONFIRM_EMAIL && rewardType !== rewards.TYPE_REWARD_CODE && rewardType !== rewards.TYPE_NEW_ANDROID) {\n if (!options || !options.failSilently && rewards.callbacks.rewardApprovalRequested) {\n rewards.callbacks.rewardApprovalRequested();\n }\n\n return;\n } // Set `claim_code` so the api knows which reward to give if there are multiple of the same type\n\n\n var params = options.params || {};\n\n if (!params.claim_code) {\n params.claim_code = reward.claim_code;\n }\n\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_STARTED,\n data: {\n reward: reward\n }\n });\n\n var success = function success(successReward) {\n // Temporary timeout to ensure the sdk has the correct balance after claiming a reward\n setTimeout(function () {\n dispatch(lbryRedux.doUpdateBalance()).then(function () {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_SUCCESS,\n data: {\n reward: successReward\n }\n });\n\n if (successReward.reward_type === rewards.TYPE_NEW_USER && rewards.callbacks.claimFirstRewardSuccess) {\n rewards.callbacks.claimFirstRewardSuccess();\n } else if (successReward.reward_type === rewards.TYPE_REFERRAL) {\n dispatch(doFetchInviteStatus());\n }\n\n dispatch(doRewardList());\n\n if (options.callback) {\n options.callback();\n }\n });\n }, 2000);\n };\n\n var failure = function failure(error) {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_FAILURE,\n data: {\n reward: reward,\n error: !options || !options.failSilently ? error : undefined\n }\n });\n\n if (options.notifyError) {\n dispatch(lbryRedux.doToast({\n message: error.message,\n isError: true\n }));\n }\n\n if (options.callback) {\n options.callback(error);\n }\n };\n\n return rewards.claimReward(rewardType, params).then(success, failure);\n };\n}\n\nfunction doClaimEligiblePurchaseRewards() {\n return function (dispatch, getState) {\n var state = getState();\n var unclaimedRewards = selectUnclaimedRewards(state);\n var userIsRewardApproved = selectUserIsRewardApproved(state);\n\n if (!userIsRewardApproved || !Lbryio.enabled) {\n return;\n }\n\n if (unclaimedRewards.find(function (ur) {\n return ur.reward_type === rewards.TYPE_FIRST_STREAM;\n })) {\n dispatch(doClaimRewardType(rewards.TYPE_FIRST_STREAM));\n } else {\n [rewards.TYPE_MANY_DOWNLOADS, rewards.TYPE_DAILY_VIEW].forEach(function (type) {\n dispatch(doClaimRewardType(type, {\n failSilently: true\n }));\n });\n }\n };\n}\n\nfunction doClaimRewardClearError(reward) {\n return function (dispatch) {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_CLEAR_ERROR,\n data: {\n reward: reward\n }\n });\n };\n}\n\nfunction doFetchRewardedContent() {\n return function (dispatch) {\n var success = function success(nameToClaimId) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED,\n data: {\n claimIds: Object.values(nameToClaimId),\n success: true\n }\n });\n };\n\n var failure = function failure() {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED,\n data: {\n claimIds: [],\n success: false\n }\n });\n };\n\n Lbryio.call('reward', 'list_featured').then(success, failure);\n };\n}\n\nvar PAGE_SIZE = 20; // \n\nvar CHECK_SUBSCRIPTIONS_INTERVAL = 15 * 60 * 1000;\n\nvar doSetViewMode = function doSetViewMode(viewMode) {\n return function (dispatch) {\n return dispatch({\n type: SET_VIEW_MODE,\n data: viewMode\n });\n };\n};\n\nvar setSubscriptionLatest = function setSubscriptionLatest(subscription, uri) {\n return function (dispatch) {\n return dispatch({\n type: SET_SUBSCRIPTION_LATEST,\n data: {\n subscription: subscription,\n uri: uri\n }\n });\n };\n}; // Populate a channels unread subscriptions or update the type\n\n\nvar doUpdateUnreadSubscriptions = function doUpdateUnreadSubscriptions(channelUri, uris, type) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = selectUnreadByChannel(state);\n var currentUnreadForChannel = unreadByChannel[channelUri];\n var newUris = [];\n var newType = null;\n\n if (!currentUnreadForChannel) {\n newUris = uris;\n newType = type;\n } else {\n if (uris) {\n // If a channel currently has no unread uris, just add them all\n if (!currentUnreadForChannel.uris || !currentUnreadForChannel.uris.length) {\n newUris = uris;\n } else {\n // They already have unreads and now there are new ones\n // Add the new ones to the beginning of the list\n // Make sure there are no duplicates\n var currentUnreadUris = currentUnreadForChannel.uris;\n newUris = uris.filter(function (uri) {\n return !currentUnreadUris.includes(uri);\n }).concat(currentUnreadUris);\n }\n } else {\n newUris = currentUnreadForChannel.uris;\n }\n\n newType = type || currentUnreadForChannel.type;\n }\n\n dispatch({\n type: UPDATE_SUBSCRIPTION_UNREADS,\n data: {\n channel: channelUri,\n uris: newUris,\n type: newType\n }\n });\n };\n}; // Remove multiple files (or all) from a channels unread subscriptions\n\n\nvar doRemoveUnreadSubscriptions = function doRemoveUnreadSubscriptions(channelUri, readUris) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = selectUnreadByChannel(state); // If no channel is passed in, remove all unread subscriptions from all channels\n\n if (!channelUri) {\n return dispatch({\n type: REMOVE_SUBSCRIPTION_UNREADS,\n data: {\n channel: null\n }\n });\n }\n\n var currentChannelUnread = unreadByChannel[channelUri];\n\n if (!currentChannelUnread || !currentChannelUnread.uris) {\n // Channel passed in doesn't have any unreads\n return null;\n } // For each uri passed in, remove it from the list of unread uris\n // If no uris are passed in, remove them all\n\n\n var newUris;\n\n if (readUris) {\n var urisToRemoveMap = readUris.reduce(function (acc, val) {\n return _objectSpread({}, acc, _defineProperty({}, val, true));\n }, {});\n var filteredUris = currentChannelUnread.uris.filter(function (uri) {\n return !urisToRemoveMap[uri];\n });\n newUris = filteredUris.length ? filteredUris : null;\n } else {\n newUris = null;\n }\n\n return dispatch({\n type: REMOVE_SUBSCRIPTION_UNREADS,\n data: {\n channel: channelUri,\n uris: newUris\n }\n });\n };\n}; // Remove a single file from a channels unread subscriptions\n\n\nvar doRemoveUnreadSubscription = function doRemoveUnreadSubscription(channelUri, readUri) {\n return function (dispatch) {\n dispatch(doRemoveUnreadSubscriptions(channelUri, [readUri]));\n };\n};\n\nvar doCheckSubscription = function doCheckSubscription(subscriptionUri, shouldNotify) {\n return function (dispatch, getState) {\n // no dispatching FETCH_CHANNEL_CLAIMS_STARTED; causes loading issues on <SubscriptionsPage>\n var state = getState();\n var savedSubscription = state.subscriptions.subscriptions.find(function (sub) {\n return sub.uri === subscriptionUri;\n });\n var subscriptionLatest = state.subscriptions.latest[subscriptionUri];\n\n if (!savedSubscription) {\n throw Error(\"Trying to find new content for \".concat(subscriptionUri, \" but it doesn't exist in your subscriptions\"));\n } // We may be duplicating calls here. Can this logic be baked into doFetchClaimsByChannel?\n\n\n lbryRedux.Lbry.claim_search({\n channel: subscriptionUri,\n valid_channel_signature: true,\n order_by: ['release_time'],\n page: 1,\n page_size: PAGE_SIZE\n }).then(function (claimListByChannel) {\n var claimsInChannel = claimListByChannel.items; // may happen if subscribed to an abandoned channel or an empty channel\n\n if (!claimsInChannel || !claimsInChannel.length) {\n return;\n } // Determine if the latest subscription currently saved is actually the latest subscription\n\n\n var latestIndex = claimsInChannel.findIndex(function (claim) {\n return claim.permanent_url === subscriptionLatest;\n }); // If latest is -1, it is a newly subscribed channel or there have been 10+ claims published since last viewed\n\n var latestIndexToNotify = latestIndex === -1 ? 10 : latestIndex; // If latest is 0, nothing has changed\n // Do not download/notify about new content, it would download/notify 10 claims per channel\n\n if (latestIndex !== 0 && subscriptionLatest) {\n var downloadCount = 0;\n var newUnread = [];\n claimsInChannel.slice(0, latestIndexToNotify).forEach(function (claim) {\n var uri = claim.permanent_url;\n\n if (shouldNotify) {\n newUnread.push(uri);\n }\n });\n dispatch(doUpdateUnreadSubscriptions(subscriptionUri, newUnread, downloadCount > 0 ? DOWNLOADING : NOTIFY_ONLY));\n } // Set the latest piece of content for a channel\n // This allows the app to know if there has been new content since it was last set\n\n\n var latest = claimsInChannel[0];\n dispatch(setSubscriptionLatest({\n channelName: latest.signing_channel.name,\n uri: latest.signing_channel.permanent_url\n }, latest.permanent_url)); // calling FETCH_CHANNEL_CLAIMS_COMPLETED after not calling STARTED\n // means it will delete a non-existant fetchingChannelClaims[uri]\n\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_COMPLETED,\n data: {\n uri: subscriptionUri,\n claims: claimsInChannel || [],\n page: 1\n }\n });\n });\n };\n};\n\nvar doChannelSubscribe = function doChannelSubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState = getState(),\n daemonSettings = _getState.settings.daemonSettings;\n\n var isSharingData = daemonSettings ? daemonSettings.share_usage_data : true;\n var subscriptionUri = subscription.uri;\n\n if (!subscriptionUri.startsWith('lbry://')) {\n throw Error(\"Subscription uris must inclue the \\\"lbry://\\\" prefix.\\nTried to subscribe to \".concat(subscriptionUri));\n }\n\n dispatch({\n type: CHANNEL_SUBSCRIBE,\n data: subscription\n }); // if the user isn't sharing data, keep the subscriptions entirely in the app\n\n if (isSharingData) {\n var _lbryRedux$parseURI4 = lbryRedux.parseURI(subscription.uri),\n channelClaimId = _lbryRedux$parseURI4.channelClaimId; // They are sharing data, we can store their subscriptions in our internal database\n\n\n Lbryio.call('subscription', 'new', {\n channel_name: subscription.channelName,\n claim_id: channelClaimId\n });\n dispatch(doClaimRewardType(rewards.TYPE_SUBSCRIPTION, {\n failSilently: true\n }));\n }\n\n dispatch(doCheckSubscription(subscription.uri, true));\n };\n};\n\nvar doChannelUnsubscribe = function doChannelUnsubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState2 = getState(),\n daemonSettings = _getState2.settings.daemonSettings;\n\n var isSharingData = daemonSettings ? daemonSettings.share_usage_data : true;\n dispatch({\n type: CHANNEL_UNSUBSCRIBE,\n data: subscription\n });\n\n if (isSharingData) {\n var _lbryRedux$parseURI5 = lbryRedux.parseURI(subscription.uri),\n channelClaimId = _lbryRedux$parseURI5.channelClaimId;\n\n Lbryio.call('subscription', 'delete', {\n claim_id: channelClaimId\n });\n }\n };\n};\n\nvar doCheckSubscriptions = function doCheckSubscriptions() {\n return function (dispatch, getState) {\n var state = getState();\n var subscriptions = selectSubscriptions(state);\n subscriptions.forEach(function (sub) {\n dispatch(doCheckSubscription(sub.uri, true));\n });\n };\n};\n\nvar doFetchMySubscriptions = function doFetchMySubscriptions() {\n return function (dispatch, getState) {\n var state = getState();\n var reduxSubscriptions = state.subscriptions.subscriptions; // default to true if daemonSettings not found\n\n var isSharingData = state.settings && state.settings.daemonSettings ? state.settings.daemonSettings.share_usage_data : true;\n\n if (!isSharingData && isSharingData !== undefined) {\n // They aren't sharing their data, subscriptions will be handled by persisted redux state\n return;\n } // most of this logic comes from scenarios where the db isn't synced with redux\n // this will happen if the user stops sharing data\n\n\n dispatch({\n type: FETCH_SUBSCRIPTIONS_START\n });\n Lbryio.call('subscription', 'list').then(function (dbSubscriptions) {\n var storedSubscriptions = dbSubscriptions || []; // User has no subscriptions in db or redux\n\n if (!storedSubscriptions.length && (!reduxSubscriptions || !reduxSubscriptions.length)) {\n return [];\n } // There is some mismatch between redux state and db state\n // If something is in the db, but not in redux, add it to redux\n // If something is in redux, but not in the db, add it to the db\n\n\n if (storedSubscriptions.length !== reduxSubscriptions.length) {\n var dbSubMap = {};\n var reduxSubMap = {};\n var subsNotInDB = [];\n var subscriptionsToReturn = reduxSubscriptions.slice();\n storedSubscriptions.forEach(function (sub) {\n dbSubMap[sub.claim_id] = 1;\n });\n reduxSubscriptions.forEach(function (sub) {\n var _lbryRedux$parseURI6 = lbryRedux.parseURI(sub.uri),\n channelClaimId = _lbryRedux$parseURI6.channelClaimId;\n\n reduxSubMap[channelClaimId] = 1;\n });\n storedSubscriptions.forEach(function (sub) {\n if (!reduxSubMap[sub.claim_id]) {\n var uri = \"lbry://\".concat(sub.channel_name, \"#\").concat(sub.claim_id);\n subscriptionsToReturn.push({\n uri: uri,\n channelName: sub.channel_name\n });\n }\n });\n return Promise.all(subsNotInDB.map(function (payload) {\n return Lbryio.call('subscription', 'new', payload);\n })).then(function () {\n return subscriptionsToReturn;\n })[\"catch\"](function () {\n return (// let it fail, we will try again when the navigate to the subscriptions page\n subscriptionsToReturn\n );\n });\n } // DB is already synced, just return the subscriptions in redux\n\n\n return reduxSubscriptions;\n }).then(function (subscriptions) {\n dispatch({\n type: FETCH_SUBSCRIPTIONS_SUCCESS,\n data: subscriptions\n });\n dispatch(lbryRedux.doResolveUris(subscriptions.map(function (_ref8) {\n var uri = _ref8.uri;\n return uri;\n })));\n dispatch(doCheckSubscriptions());\n })[\"catch\"](function () {\n dispatch({\n type: FETCH_SUBSCRIPTIONS_FAIL\n });\n });\n };\n};\n\nvar doCheckSubscriptionsInit = function doCheckSubscriptionsInit() {\n return function (dispatch) {\n // doCheckSubscriptionsInit is called by doDaemonReady\n // setTimeout below is a hack to ensure redux is hydrated when subscriptions are checked\n // this will be replaced with <PersistGate> which reqiures a package upgrade\n setTimeout(function () {\n return dispatch(doFetchMySubscriptions());\n }, 5000);\n var checkSubscriptionsTimer = setInterval(function () {\n return dispatch(doCheckSubscriptions());\n }, CHECK_SUBSCRIPTIONS_INTERVAL);\n dispatch({\n type: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n data: {\n checkSubscriptionsTimer: checkSubscriptionsTimer\n }\n });\n setInterval(function () {\n return dispatch(doCheckSubscriptions());\n }, CHECK_SUBSCRIPTIONS_INTERVAL);\n };\n};\n\nvar doFetchRecommendedSubscriptions = function doFetchRecommendedSubscriptions() {\n return function (dispatch) {\n dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_START\n });\n return Lbryio.call('subscription', 'suggest').then(function (suggested) {\n return dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS,\n data: suggested\n });\n })[\"catch\"](function (error) {\n return dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_FAIL,\n error: error\n });\n });\n };\n};\n\nvar doCompleteFirstRun = function doCompleteFirstRun() {\n return function (dispatch) {\n return dispatch({\n type: SUBSCRIPTION_FIRST_RUN_COMPLETED\n });\n };\n};\n\nvar doShowSuggestedSubs = function doShowSuggestedSubs() {\n return function (dispatch) {\n return dispatch({\n type: VIEW_SUGGESTED_SUBSCRIPTIONS\n });\n };\n};\n\nvar doChannelSubscriptionEnableNotifications = function doChannelSubscriptionEnableNotifications(channelName) {\n return function (dispatch) {\n return dispatch({\n type: CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS,\n data: channelName\n });\n };\n};\n\nvar doChannelSubscriptionDisableNotifications = function doChannelSubscriptionDisableNotifications(channelName) {\n return function (dispatch) {\n return dispatch({\n type: CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS,\n data: channelName\n });\n };\n};\n\nfunction doFetchCostInfoForUri(uri) {\n return function (dispatch, getState) {\n var state = getState();\n var claim = lbryRedux.selectClaimsByUri(state)[uri];\n if (!claim) return;\n\n function resolve(costInfo) {\n dispatch({\n type: FETCH_COST_INFO_COMPLETED,\n data: {\n uri: uri,\n costInfo: costInfo\n }\n });\n }\n\n var fee = claim.value ? claim.value.fee : undefined;\n\n if (fee === undefined) {\n resolve({\n cost: 0,\n includesData: true\n });\n } else if (fee.currency === 'LBC') {\n resolve({\n cost: fee.amount,\n includesData: true\n });\n } else {\n Lbryio.getExchangeRates().then(function (_ref9) {\n var LBC_USD = _ref9.LBC_USD;\n resolve({\n cost: fee.amount / LBC_USD,\n includesData: true\n });\n });\n }\n };\n}\n\nvar CHECK_BLACK_LISTED_CONTENT_INTERVAL = 60 * 60 * 1000;\n\nfunction doFetchBlackListedOutpoints() {\n return function (dispatch) {\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_STARTED\n });\n\n var success = function success(_ref10) {\n var outpoints = _ref10.outpoints;\n var splitOutpoints = [];\n\n if (outpoints) {\n outpoints.forEach(function (outpoint, index) {\n var _outpoint$split = outpoint.split(':'),\n _outpoint$split2 = _slicedToArray(_outpoint$split, 2),\n txid = _outpoint$split2[0],\n nout = _outpoint$split2[1];\n\n splitOutpoints[index] = {\n txid: txid,\n nout: Number.parseInt(nout, 10)\n };\n });\n }\n\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_COMPLETED,\n data: {\n outpoints: splitOutpoints,\n success: true\n }\n });\n };\n\n var failure = function failure(_ref11) {\n var error = _ref11.error;\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_FAILED,\n data: {\n error: error,\n success: false\n }\n });\n };\n\n Lbryio.call('file', 'list_blocked').then(success, failure);\n };\n}\n\nfunction doBlackListedOutpointsSubscribe() {\n return function (dispatch) {\n dispatch(doFetchBlackListedOutpoints());\n setInterval(function () {\n return dispatch(doFetchBlackListedOutpoints());\n }, CHECK_BLACK_LISTED_CONTENT_INTERVAL);\n };\n}\n\nvar CHECK_FILTERED_CONTENT_INTERVAL = 60 * 60 * 1000;\n\nfunction doFetchFilteredOutpoints() {\n return function (dispatch) {\n dispatch({\n type: FETCH_FILTERED_CONTENT_STARTED\n });\n\n var success = function success(_ref12) {\n var outpoints = _ref12.outpoints;\n var formattedOutpoints = [];\n\n if (outpoints) {\n formattedOutpoints = outpoints.map(function (outpoint) {\n var _outpoint$split3 = outpoint.split(':'),\n _outpoint$split4 = _slicedToArray(_outpoint$split3, 2),\n txid = _outpoint$split4[0],\n nout = _outpoint$split4[1];\n\n return {\n txid: txid,\n nout: Number.parseInt(nout, 10)\n };\n });\n }\n\n dispatch({\n type: FETCH_FILTERED_CONTENT_COMPLETED,\n data: {\n outpoints: formattedOutpoints\n }\n });\n };\n\n var failure = function failure(_ref13) {\n var error = _ref13.error;\n dispatch({\n type: FETCH_FILTERED_CONTENT_FAILED,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('file', 'list_filtered').then(success, failure);\n };\n}\n\nfunction doFilteredOutpointsSubscribe() {\n return function (dispatch) {\n dispatch(doFetchFilteredOutpoints());\n setInterval(function () {\n return dispatch(doFetchFilteredOutpoints());\n }, CHECK_FILTERED_CONTENT_INTERVAL);\n };\n}\n\nfunction doFetchFeaturedUris() {\n var offloadResolve = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return function (dispatch) {\n dispatch({\n type: FETCH_FEATURED_CONTENT_STARTED\n });\n\n var success = function success(_ref14) {\n var Uris = _ref14.Uris;\n var urisToResolve = [];\n Object.keys(Uris).forEach(function (category) {\n urisToResolve = [].concat(_toConsumableArray(urisToResolve), _toConsumableArray(Uris[category]));\n });\n var actions = [{\n type: FETCH_FEATURED_CONTENT_COMPLETED,\n data: {\n uris: Uris,\n success: true\n }\n }];\n\n if (urisToResolve.length && !offloadResolve) {\n actions.push(lbryRedux.doResolveUris(urisToResolve));\n }\n\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n };\n\n var failure = function failure() {\n dispatch({\n type: FETCH_FEATURED_CONTENT_COMPLETED,\n data: {\n uris: {}\n }\n });\n };\n\n Lbryio.call('file', 'list_homepage').then(success, failure);\n };\n}\n\nfunction doFetchTrendingUris() {\n return function (dispatch) {\n dispatch({\n type: FETCH_TRENDING_CONTENT_STARTED\n });\n\n var success = function success(data) {\n var urisToResolve = data.map(function (uri) {\n return uri.url;\n });\n var actions = [lbryRedux.doResolveUris(urisToResolve), {\n type: FETCH_TRENDING_CONTENT_COMPLETED,\n data: {\n uris: data,\n success: true\n }\n }];\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n };\n\n var failure = function failure() {\n dispatch({\n type: FETCH_TRENDING_CONTENT_COMPLETED,\n data: {\n uris: []\n }\n });\n };\n\n Lbryio.call('file', 'list_trending').then(success, failure);\n };\n} // \n\n\nvar doFetchViewCount = function doFetchViewCount(claimId) {\n return function (dispatch) {\n dispatch({\n type: FETCH_VIEW_COUNT_STARTED\n });\n return Lbryio.call('file', 'view_count', {\n claim_id: claimId\n }).then(function (result) {\n var viewCount = result[0];\n dispatch({\n type: FETCH_VIEW_COUNT_COMPLETED,\n data: {\n claimId: claimId,\n viewCount: viewCount\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: FETCH_VIEW_COUNT_FAILED,\n data: error\n });\n });\n };\n};\n\nvar doFetchSubCount = function doFetchSubCount(claimId) {\n return function (dispatch) {\n dispatch({\n type: FETCH_SUB_COUNT_STARTED\n });\n return Lbryio.call('subscription', 'sub_count', {\n claim_id: claimId\n }).then(function (result) {\n var subCount = result[0];\n dispatch({\n type: FETCH_SUB_COUNT_COMPLETED,\n data: {\n claimId: claimId,\n subCount: subCount\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: FETCH_SUB_COUNT_FAILED,\n data: error\n });\n });\n };\n};\n\nfunction doSetDefaultAccount(success, failure) {\n return function (dispatch) {\n dispatch({\n type: SET_DEFAULT_ACCOUNT\n });\n lbryRedux.Lbry.account_list().then(function (accountList) {\n var accounts = accountList.lbc_mainnet;\n var defaultId;\n\n for (var i = 0; i < accounts.length; ++i) {\n if (accounts[i].satoshis > 0) {\n defaultId = accounts[i].id;\n break;\n }\n } // In a case where there's no balance on either account\n // assume the second (which is created after sync) as default\n\n\n if (!defaultId && accounts.length > 1) {\n defaultId = accounts[1].id;\n } // Set the default account\n\n\n if (defaultId) {\n lbryRedux.Lbry.account_set({\n account_id: defaultId,\n \"default\": true\n }).then(function () {\n if (success) {\n success();\n }\n })[\"catch\"](function (err) {\n if (failure) {\n failure(err);\n }\n });\n } else if (failure) {\n // no default account to set\n failure('Could not set a default account'); // fail\n }\n })[\"catch\"](function (err) {\n if (failure) {\n failure(err);\n }\n });\n };\n}\n\nfunction doSetSync(oldHash, newHash, data) {\n return function (dispatch) {\n dispatch({\n type: SET_SYNC_STARTED\n });\n return Lbryio.call('sync', 'set', {\n old_hash: oldHash,\n new_hash: newHash,\n data: data\n }, 'post').then(function (response) {\n if (!response.hash) {\n throw Error('No hash returned for sync/set.');\n }\n\n return dispatch({\n type: SET_SYNC_COMPLETED,\n data: {\n syncHash: response.hash\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: SET_SYNC_FAILED,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doGetSync(passedPassword, callback) {\n var password = passedPassword === null || passedPassword === undefined ? '' : passedPassword;\n\n function handleCallback(error, hasNewData) {\n if (callback) {\n if (typeof callback !== 'function') {\n throw new Error('Second argument passed to \"doGetSync\" must be a function');\n }\n\n callback(error, hasNewData);\n }\n }\n\n return function (dispatch) {\n dispatch({\n type: GET_SYNC_STARTED\n });\n var data = {};\n lbryRedux.Lbry.wallet_status().then(function (status) {\n if (status.is_locked) {\n return lbryRedux.Lbry.wallet_unlock({\n password: password\n });\n } // Wallet is already unlocked\n\n\n return true;\n }).then(function (isUnlocked) {\n if (isUnlocked) {\n return lbryRedux.Lbry.sync_hash();\n }\n\n data.unlockFailed = true;\n throw new Error();\n }).then(function (hash) {\n return Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post');\n }).then(function (response) {\n var syncHash = response.hash;\n data.syncHash = syncHash;\n data.syncData = response.data;\n data.changed = response.changed;\n data.hasSyncedWallet = true;\n\n if (response.changed) {\n return lbryRedux.Lbry.sync_apply({\n password: password,\n data: response.data,\n blocking: true\n });\n }\n }).then(function (response) {\n if (!response) {\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n handleCallback(null, data.changed);\n return;\n }\n\n var walletHash = response.hash,\n walletData = response.data;\n\n if (walletHash !== data.syncHash) {\n // different local hash, need to synchronise\n dispatch(doSetSync(data.syncHash, walletHash, walletData));\n }\n\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n handleCallback(null, data.changed);\n })[\"catch\"](function (syncAttemptError) {\n if (data.unlockFailed) {\n dispatch({\n type: GET_SYNC_FAILED,\n data: {\n error: syncAttemptError\n }\n });\n\n if (password !== '') {\n dispatch({\n type: SYNC_APPLY_BAD_PASSWORD\n });\n }\n\n handleCallback(syncAttemptError);\n } else if (data.hasSyncedWallet) {\n var error = 'Error getting synced wallet';\n dispatch({\n type: GET_SYNC_FAILED,\n data: {\n error: error\n }\n }); // Temp solution until we have a bad password error code\n // Don't fail on blank passwords so we don't show a \"password error\" message\n // before users have ever entered a password\n\n if (password !== '') {\n dispatch({\n type: SYNC_APPLY_BAD_PASSWORD\n });\n }\n\n handleCallback(error);\n } else {\n // user doesn't have a synced wallet\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: {\n hasSyncedWallet: false,\n syncHash: null\n }\n }); // call sync_apply to get data to sync\n // first time sync. use any string for old hash\n\n lbryRedux.Lbry.sync_apply({\n password: password\n }).then(function (_ref15) {\n var walletHash = _ref15.hash,\n syncApplyData = _ref15.data;\n dispatch(doSetSync('', walletHash, syncApplyData, password));\n handleCallback();\n })[\"catch\"](function (syncApplyError) {\n handleCallback(syncApplyError);\n });\n }\n });\n };\n}\n\nfunction doSyncApply(syncHash, syncData, password) {\n return function (dispatch) {\n dispatch({\n type: SYNC_APPLY_STARTED\n });\n lbryRedux.Lbry.sync_apply({\n password: password,\n data: syncData\n }).then(function (_ref16) {\n var walletHash = _ref16.hash,\n walletData = _ref16.data;\n dispatch({\n type: SYNC_APPLY_COMPLETED\n });\n\n if (walletHash !== syncHash) {\n // different local hash, need to synchronise\n dispatch(doSetSync(syncHash, walletHash, walletData));\n }\n })[\"catch\"](function () {\n dispatch({\n type: SYNC_APPLY_FAILED,\n data: {\n error: 'Invalid password specified. Please enter the password for your previously synchronised wallet.'\n }\n });\n });\n };\n}\n\nfunction doCheckSync() {\n return function (dispatch) {\n dispatch({\n type: GET_SYNC_STARTED\n });\n lbryRedux.Lbry.sync_hash().then(function (hash) {\n Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post').then(function (response) {\n var data = {\n hasSyncedWallet: true,\n syncHash: response.hash,\n syncData: response.data,\n hashChanged: response.changed\n };\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n })[\"catch\"](function () {\n // user doesn't have a synced wallet\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: {\n hasSyncedWallet: false,\n syncHash: null\n }\n });\n });\n });\n };\n}\n\nfunction doResetSync() {\n return function (dispatch) {\n return new Promise(function (resolve) {\n dispatch({\n type: SYNC_RESET\n });\n resolve();\n });\n };\n}\n\nfunction doSyncEncryptAndDecrypt(oldPassword, newPassword, encrypt) {\n return function (dispatch) {\n var data = {};\n return lbryRedux.Lbry.sync_hash().then(function (hash) {\n return Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post');\n }).then(function (syncGetResponse) {\n data.oldHash = syncGetResponse.hash;\n return lbryRedux.Lbry.sync_apply({\n password: oldPassword,\n data: syncGetResponse.data\n });\n }).then(function () {\n if (encrypt) {\n dispatch(lbryRedux.doWalletEncrypt(newPassword));\n } else {\n dispatch(lbryRedux.doWalletDecrypt());\n }\n }).then(function () {\n return lbryRedux.Lbry.sync_apply({\n password: newPassword\n });\n }).then(function (syncApplyResponse) {\n if (syncApplyResponse.hash !== data.oldHash) {\n return dispatch(doSetSync(data.oldHash, syncApplyResponse.hash, syncApplyResponse.data));\n }\n })[\"catch\"](console.error);\n };\n} // \n\n\nvar doUpdateUploadProgress = function doUpdateUploadProgress(progress, params, xhr) {\n return function (dispatch) {\n return dispatch({\n type: UPDATE_UPLOAD_PROGRESS,\n data: {\n progress: progress,\n params: params,\n xhr: xhr\n }\n });\n };\n};\n\nvar reducers = {};\nvar defaultState$1 = {\n authenticating: false\n};\n\nreducers[GENERATE_AUTH_TOKEN_FAILURE] = function (state) {\n return Object.assign({}, state, {\n authToken: null,\n authenticating: false\n });\n};\n\nreducers[GENERATE_AUTH_TOKEN_STARTED] = function (state) {\n return Object.assign({}, state, {\n authenticating: true\n });\n};\n\nreducers[GENERATE_AUTH_TOKEN_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n authToken: action.data.authToken,\n authenticating: false\n });\n};\n\nfunction authReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$1;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$1 = {};\nvar defaultState$2 = {\n fetching: false,\n claimedRewardsById: {},\n // id => reward\n unclaimedRewards: [],\n claimPendingByType: {},\n claimErrorsByType: {},\n rewardedContentClaimIds: []\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARDS_STARTED] = function (state) {\n return Object.assign({}, state, {\n fetching: true\n });\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED] = function (state, action) {\n var userRewards = action.data.userRewards;\n var unclaimedRewards = [];\n var claimedRewards = {};\n userRewards.forEach(function (reward) {\n if (reward.transaction_id) {\n claimedRewards[reward.id] = reward;\n } else {\n unclaimedRewards.push(reward);\n }\n });\n return Object.assign({}, state, {\n claimedRewardsById: claimedRewards,\n unclaimedRewards: unclaimedRewards,\n fetching: false\n });\n};\n\nfunction setClaimRewardState(state, reward, isClaiming) {\n var errorMessage = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var newClaimPendingByType = Object.assign({}, state.claimPendingByType);\n var newClaimErrorsByType = Object.assign({}, state.claimErrorsByType); // Currently, for multiple rewards of the same type, they will both show \"claiming\" when one is beacuse we track this by `reward_type`\n // To fix this we will need to use `claim_code` instead, and change all selectors to match\n\n if (isClaiming) {\n newClaimPendingByType[reward.reward_type] = isClaiming;\n } else {\n delete newClaimPendingByType[reward.reward_type];\n }\n\n if (errorMessage) {\n newClaimErrorsByType[reward.reward_type] = errorMessage;\n } else {\n delete newClaimErrorsByType[reward.reward_type];\n }\n\n return Object.assign({}, state, {\n claimPendingByType: newClaimPendingByType,\n claimErrorsByType: newClaimErrorsByType\n });\n}\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_STARTED] = function (state, action) {\n var reward = action.data.reward;\n return setClaimRewardState(state, reward, true, '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_SUCCESS] = function (state, action) {\n var reward = action.data.reward;\n var unclaimedRewards = state.unclaimedRewards;\n var index = unclaimedRewards.findIndex(function (ur) {\n return ur.claim_code === reward.claim_code;\n });\n unclaimedRewards.splice(index, 1);\n var claimedRewardsById = state.claimedRewardsById;\n claimedRewardsById[reward.id] = reward;\n\n var newState = _objectSpread({}, state, {\n unclaimedRewards: _toConsumableArray(unclaimedRewards),\n claimedRewardsById: _objectSpread({}, claimedRewardsById)\n });\n\n return setClaimRewardState(newState, reward, false, '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_FAILURE] = function (state, action) {\n var _action$data4 = action.data,\n reward = _action$data4.reward,\n error = _action$data4.error;\n return setClaimRewardState(state, reward, false, error ? error.message : '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_CLEAR_ERROR] = function (state, action) {\n var reward = action.data.reward;\n return setClaimRewardState(state, reward, state.claimPendingByType[reward.reward_type], '');\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED] = function (state, action) {\n var claimIds = action.data.claimIds;\n return Object.assign({}, state, {\n rewardedContentClaimIds: claimIds\n });\n};\n\nfunction rewardsReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$2;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$1[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$2 = {};\nvar defaultState$3 = {\n authenticationIsPending: false,\n userIsPending: false,\n emailNewIsPending: false,\n emailNewErrorMessage: '',\n emailToVerify: '',\n emailAlreadyExists: false,\n resendingVerificationEmail: false,\n inviteNewErrorMessage: '',\n inviteNewIsPending: false,\n inviteStatusIsPending: false,\n invitesRemaining: undefined,\n invitees: undefined,\n referralLink: undefined,\n referralCode: undefined,\n user: undefined,\n accessToken: undefined,\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: '',\n referrerSetIsPending: false,\n referrerSetError: ''\n};\n\nreducers$2[AUTHENTICATION_STARTED] = function (state) {\n return Object.assign({}, state, {\n authenticationIsPending: true,\n userIsPending: true,\n accessToken: defaultState$3.accessToken\n });\n};\n\nreducers$2[AUTHENTICATION_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n authenticationIsPending: false,\n userIsPending: false,\n accessToken: action.data.accessToken,\n user: action.data.user\n });\n};\n\nreducers$2[AUTHENTICATION_FAILURE] = function (state) {\n return Object.assign({}, state, {\n authenticationIsPending: false,\n userIsPending: false,\n user: null\n });\n};\n\nreducers$2[USER_FETCH_STARTED] = function (state) {\n return Object.assign({}, state, {\n userIsPending: true\n });\n};\n\nreducers$2[USER_FETCH_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n userIsPending: false,\n user: action.data.user,\n emailToVerify: action.data.user.has_verified_email ? null : state.emailToVerify\n });\n};\n\nreducers$2[USER_FETCH_FAILURE] = function (state) {\n return Object.assign({}, state, {\n userIsPending: true,\n user: null\n });\n};\n\nreducers$2[USER_PHONE_NEW_STARTED] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.country_code = action.data.country_code;\n return Object.assign({}, state, {\n phoneNewIsPending: true,\n phoneNewErrorMessage: '',\n user: user\n });\n};\n\nreducers$2[USER_PHONE_NEW_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n phoneToVerify: action.data.phone,\n phoneNewIsPending: false\n });\n};\n\nreducers$2[USER_PHONE_RESET] = function (state) {\n return Object.assign({}, state, {\n phoneToVerify: null\n });\n};\n\nreducers$2[USER_PHONE_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n phoneNewIsPending: false,\n phoneNewErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n phoneVerifyIsPending: true,\n phoneVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n phoneToVerify: '',\n phoneVerifyIsPending: false,\n user: action.data.user\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n phoneVerifyIsPending: false,\n phoneVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_NEW_STARTED] = function (state) {\n return Object.assign({}, state, {\n emailNewIsPending: true,\n emailNewErrorMessage: '',\n emailAlreadyExists: false\n });\n};\n\nreducers$2[USER_EMAIL_NEW_SUCCESS] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.primary_email = action.data.email;\n return Object.assign({}, state, {\n emailToVerify: action.data.email,\n emailNewIsPending: false,\n user: user\n });\n};\n\nreducers$2[USER_EMAIL_NEW_EXISTS] = function (state) {\n return Object.assign({}, state, {\n emailAlreadyExists: true\n });\n};\n\nreducers$2[USER_EMAIL_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n emailNewIsPending: false,\n emailNewErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n emailVerifyIsPending: true,\n emailVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_SUCCESS] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.primary_email = action.data.email;\n return Object.assign({}, state, {\n emailToVerify: '',\n emailVerifyIsPending: false,\n user: user\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n emailVerifyIsPending: false,\n emailVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_SET] = function (state, action) {\n return Object.assign({}, state, {\n emailToVerify: action.data.email\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n identityVerifyIsPending: true,\n identityVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n identityVerifyIsPending: false,\n identityVerifyErrorMessage: '',\n user: action.data.user\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n identityVerifyIsPending: false,\n identityVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[FETCH_ACCESS_TOKEN_SUCCESS] = function (state, action) {\n var token = action.data.token;\n return Object.assign({}, state, {\n accessToken: token\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_STARTED] = function (state) {\n return Object.assign({}, state, {\n inviteStatusIsPending: true\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n inviteStatusIsPending: false,\n invitesRemaining: action.data.invitesRemaining,\n invitees: action.data.invitees,\n referralLink: action.data.referralLink,\n referralCode: action.data.referralCode\n });\n};\n\nreducers$2[USER_INVITE_NEW_STARTED] = function (state) {\n return Object.assign({}, state, {\n inviteNewIsPending: true,\n inviteNewErrorMessage: ''\n });\n};\n\nreducers$2[USER_INVITE_NEW_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n inviteNewIsPending: false,\n inviteNewErrorMessage: ''\n });\n};\n\nreducers$2[USER_INVITE_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n inviteNewIsPending: false,\n inviteNewErrorMessage: action.data.error.message\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_FAILURE] = function (state) {\n return Object.assign({}, state, {\n inviteStatusIsPending: false,\n invitesRemaining: null,\n invitees: null\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_STARTED] = function (state) {\n return Object.assign({}, state, {\n youtubeChannelImportPending: true,\n youtubeChannelImportErrorMessage: ''\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_SUCCESS] = function (state, action) {\n var total = action.data.reduce(function (acc, value) {\n return acc + value.total_published_videos;\n }, 0);\n var complete = action.data.reduce(function (acc, value) {\n return acc + value.total_transferred;\n }, 0);\n return Object.assign({}, state, {\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: '',\n youtubeChannelImportTotal: total,\n youtubeChannelImportComplete: complete\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: action.data\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_STARTED] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: true\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: false\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_FAILURE] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: false\n });\n};\n\nreducers$2[USER_SET_REFERRER_STARTED] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: true,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nreducers$2[USER_SET_REFERRER_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nreducers$2[USER_SET_REFERRER_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: action.data.error.message\n });\n};\n\nreducers$2[USER_SET_REFERRER_RESET] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nfunction userReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$3;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$2[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar defaultState$4 = {\n fetching: {},\n byUri: {}\n};\nvar costInfoReducer = handleActions((_handleActions2 = {}, _defineProperty(_handleActions2, FETCH_COST_INFO_STARTED, function (state, action) {\n var uri = action.data.uri;\n var newFetching = Object.assign({}, state.fetching);\n newFetching[uri] = true;\n return _objectSpread({}, state, {\n fetching: newFetching\n });\n}), _defineProperty(_handleActions2, FETCH_COST_INFO_COMPLETED, function (state, action) {\n var _action$data5 = action.data,\n uri = _action$data5.uri,\n costInfo = _action$data5.costInfo;\n var newByUri = Object.assign({}, state.byUri);\n var newFetching = Object.assign({}, state.fetching);\n newByUri[uri] = costInfo;\n delete newFetching[uri];\n return _objectSpread({}, state, {\n byUri: newByUri,\n fetching: newFetching\n });\n}), _handleActions2), defaultState$4);\nvar defaultState$5 = {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: undefined,\n blackListedOutpoints: undefined\n};\nvar blacklistReducer = handleActions((_handleActions3 = {}, _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: true\n });\n}), _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_COMPLETED, function (state, action) {\n var _action$data6 = action.data,\n outpoints = _action$data6.outpoints,\n success = _action$data6.success;\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: success,\n blackListedOutpoints: outpoints\n });\n}), _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_FAILED, function (state, action) {\n var _action$data7 = action.data,\n error = _action$data7.error,\n success = _action$data7.success;\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: success,\n fetchingBlackListedOutpointsError: error\n });\n}), _handleActions3), defaultState$5);\nvar defaultState$6 = {\n loading: false,\n filteredOutpoints: undefined\n};\nvar filteredReducer = handleActions((_handleActions4 = {}, _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n loading: true\n });\n}), _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_COMPLETED, function (state, action) {\n var outpoints = action.data.outpoints;\n return _objectSpread({}, state, {\n loading: false,\n filteredOutpoints: outpoints\n });\n}), _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_FAILED, function (state, action) {\n var error = action.data.error;\n return _objectSpread({}, state, {\n loading: false,\n fetchingFilteredOutpointsError: error\n });\n}), _handleActions4), defaultState$6);\nvar defaultState$7 = {\n fetchingFeaturedContent: false,\n fetchingFeaturedContentFailed: false,\n featuredUris: undefined,\n fetchingTrendingContent: false,\n fetchingTrendingContentFailed: false,\n trendingUris: undefined\n};\nvar homepageReducer = handleActions((_handleActions5 = {}, _defineProperty(_handleActions5, FETCH_FEATURED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingFeaturedContent: true\n });\n}), _defineProperty(_handleActions5, FETCH_FEATURED_CONTENT_COMPLETED, function (state, action) {\n var _action$data8 = action.data,\n uris = _action$data8.uris,\n success = _action$data8.success;\n return _objectSpread({}, state, {\n fetchingFeaturedContent: false,\n fetchingFeaturedContentFailed: !success,\n featuredUris: uris\n });\n}), _defineProperty(_handleActions5, FETCH_TRENDING_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingTrendingContent: true\n });\n}), _defineProperty(_handleActions5, FETCH_TRENDING_CONTENT_COMPLETED, function (state, action) {\n var _action$data9 = action.data,\n uris = _action$data9.uris,\n success = _action$data9.success;\n return _objectSpread({}, state, {\n fetchingTrendingContent: false,\n fetchingTrendingContentFailed: !success,\n trendingUris: uris\n });\n}), _handleActions5), defaultState$7);\nvar defaultState$8 = {\n fetchingViewCount: false,\n viewCountError: undefined,\n viewCountById: {},\n fetchingSubCount: false,\n subCountError: undefined,\n subCountById: {}\n};\nvar statsReducer = handleActions((_handleActions6 = {}, _defineProperty(_handleActions6, FETCH_VIEW_COUNT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingViewCount: true\n });\n}), _defineProperty(_handleActions6, FETCH_VIEW_COUNT_FAILED, function (state, action) {\n return _objectSpread({}, state, {\n viewCountError: action.data\n });\n}), _defineProperty(_handleActions6, FETCH_VIEW_COUNT_COMPLETED, function (state, action) {\n var _action$data10 = action.data,\n claimId = _action$data10.claimId,\n viewCount = _action$data10.viewCount;\n\n var viewCountById = _objectSpread({}, state.viewCountById, _defineProperty({}, claimId, viewCount));\n\n return _objectSpread({}, state, {\n fetchingViewCount: false,\n viewCountById: viewCountById\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingSubCount: true\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_FAILED, function (state, action) {\n return _objectSpread({}, state, {\n subCountError: action.data\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_COMPLETED, function (state, action) {\n var _action$data11 = action.data,\n claimId = _action$data11.claimId,\n subCount = _action$data11.subCount;\n\n var subCountById = _objectSpread({}, state.subCountById, _defineProperty({}, claimId, subCount));\n\n return _objectSpread({}, state, {\n fetchingSubCount: false,\n subCountById: subCountById\n });\n}), _handleActions6), defaultState$8);\nvar reducers$3 = {};\nvar defaultState$9 = {\n hasSyncedWallet: false,\n syncHash: null,\n syncData: null,\n setSyncErrorMessage: null,\n getSyncErrorMessage: null,\n syncApplyErrorMessage: '',\n syncApplyIsPending: false,\n syncApplyPasswordError: false,\n getSyncIsPending: false,\n setSyncIsPending: false,\n hashChanged: false\n};\n\nreducers$3[GET_SYNC_STARTED] = function (state) {\n return Object.assign({}, state, {\n getSyncIsPending: true,\n getSyncErrorMessage: null\n });\n};\n\nreducers$3[GET_SYNC_COMPLETED] = function (state, action) {\n return Object.assign({}, state, {\n syncHash: action.data.syncHash,\n syncData: action.data.syncData,\n hasSyncedWallet: action.data.hasSyncedWallet,\n getSyncIsPending: false,\n hashChanged: action.data.hashChanged\n });\n};\n\nreducers$3[GET_SYNC_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n getSyncIsPending: false,\n getSyncErrorMessage: action.data.error\n });\n};\n\nreducers$3[SET_SYNC_STARTED] = function (state) {\n return Object.assign({}, state, {\n setSyncIsPending: true,\n setSyncErrorMessage: null\n });\n};\n\nreducers$3[SET_SYNC_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n setSyncIsPending: false,\n setSyncErrorMessage: action.data.error\n });\n};\n\nreducers$3[SET_SYNC_COMPLETED] = function (state, action) {\n return Object.assign({}, state, {\n setSyncIsPending: false,\n setSyncErrorMessage: null,\n hasSyncedWallet: true,\n // sync was successful, so the user has a synced wallet at this point\n syncHash: action.data.syncHash\n });\n};\n\nreducers$3[SYNC_APPLY_STARTED] = function (state) {\n return Object.assign({}, state, {\n syncApplyPasswordError: false,\n syncApplyIsPending: true,\n syncApplyErrorMessage: ''\n });\n};\n\nreducers$3[SYNC_APPLY_COMPLETED] = function (state) {\n return Object.assign({}, state, {\n syncApplyIsPending: false,\n syncApplyErrorMessage: ''\n });\n};\n\nreducers$3[SYNC_APPLY_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n syncApplyIsPending: false,\n syncApplyErrorMessage: action.data.error\n });\n};\n\nreducers$3[SYNC_APPLY_BAD_PASSWORD] = function (state) {\n return Object.assign({}, state, {\n syncApplyPasswordError: true\n });\n};\n\nreducers$3[SYNC_RESET] = function () {\n return defaultState$9;\n};\n\nfunction syncReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$9;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$3[action.type];\n if (handler) return handler(state, action);\n return state;\n} // \n\n/*\ntest mock:\n currentUploads: {\n 'test#upload': {\n progress: 50,\n params: {\n name: 'steve',\n thumbnail_url: 'https://dev2.spee.ch/4/KMNtoSZ009fawGz59VG8PrID.jpeg',\n },\n },\n },\n */\n\n\nvar reducers$4 = {};\nvar defaultState$a = {\n currentUploads: {}\n};\n\nreducers$4[UPDATE_UPLOAD_PROGRESS] = function (state, action) {\n var _action$data12 = action.data,\n progress = _action$data12.progress,\n params = _action$data12.params,\n xhr = _action$data12.xhr;\n var key = params.channel ? \"\".concat(params.name, \"#\").concat(params.channel) : \"\".concat(params.name, \"#anonymous\");\n var currentUploads;\n\n if (!progress) {\n currentUploads = Object.assign({}, state.currentUploads);\n Object.keys(currentUploads).forEach(function (k) {\n if (k === key) {\n delete currentUploads[key];\n }\n });\n } else {\n currentUploads = Object.assign({}, state.currentUploads);\n currentUploads[key] = {\n progress: progress,\n params: params,\n xhr: xhr\n };\n }\n\n return _objectSpread({}, state, {\n currentUploads: currentUploads\n });\n};\n\nfunction lbrytvReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$a;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$4[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar selectState$3 = function selectState$3(state) {\n return state.auth || {};\n};\n\nvar selectAuthToken = reselect.createSelector(selectState$3, function (state) {\n return state.authToken;\n});\nvar selectIsAuthenticating = reselect.createSelector(selectState$3, function (state) {\n return state.authenticating;\n});\n\nvar selectState$4 = function selectState$4(state) {\n return state.costInfo || {};\n};\n\nvar selectAllCostInfoByUri = reselect.createSelector(selectState$4, function (state) {\n return state.byUri || {};\n});\n\nvar makeSelectCostInfoForUri = function makeSelectCostInfoForUri(uri) {\n return reselect.createSelector(selectAllCostInfoByUri, function (costInfos) {\n return costInfos && costInfos[uri];\n });\n};\n\nvar selectFetchingCostInfo = reselect.createSelector(selectState$4, function (state) {\n return state.fetching || {};\n});\n\nvar makeSelectFetchingCostInfoForUri = function makeSelectFetchingCostInfoForUri(uri) {\n return reselect.createSelector(selectFetchingCostInfo, function (fetchingByUri) {\n return fetchingByUri && fetchingByUri[uri];\n });\n};\n\nvar selectState$5 = function selectState$5(state) {\n return state.blacklist || {};\n};\n\nvar selectBlackListedOutpoints = reselect.createSelector(selectState$5, function (state) {\n return state.blackListedOutpoints;\n});\n\nvar selectState$6 = function selectState$6(state) {\n return state.filtered || {};\n};\n\nvar selectFilteredOutpoints = reselect.createSelector(selectState$6, function (state) {\n return state.filteredOutpoints;\n});\n\nvar selectState$7 = function selectState$7(state) {\n return state.homepage || {};\n};\n\nvar selectFeaturedUris = reselect.createSelector(selectState$7, function (state) {\n return state.featuredUris;\n});\nvar selectFetchingFeaturedUris = reselect.createSelector(selectState$7, function (state) {\n return state.fetchingFeaturedContent;\n});\nvar selectTrendingUris = reselect.createSelector(selectState$7, function (state) {\n return state.trendingUris;\n});\nvar selectFetchingTrendingUris = reselect.createSelector(selectState$7, function (state) {\n return state.fetchingTrendingContent;\n});\n\nvar selectState$8 = function selectState$8(state) {\n return state.stats || {};\n};\n\nvar selectViewCount = reselect.createSelector(selectState$8, function (state) {\n return state.viewCountById;\n});\nvar selectSubCount = reselect.createSelector(selectState$8, function (state) {\n return state.subCountById;\n});\n\nvar makeSelectViewCountForUri = function makeSelectViewCountForUri(uri) {\n return reselect.createSelector(lbryRedux.makeSelectClaimForUri(uri), selectViewCount, function (claim, viewCountById) {\n return claim ? viewCountById[claim.claim_id] || 0 : 0;\n });\n};\n\nvar makeSelectSubCountForUri = function makeSelectSubCountForUri(uri) {\n return reselect.createSelector(lbryRedux.makeSelectClaimForUri(uri), selectSubCount, function (claim, subCountById) {\n return claim ? subCountById[claim.claim_id] || 0 : 0;\n });\n};\n\nvar selectState$9 = function selectState$9(state) {\n return state.sync || {};\n};\n\nvar selectHasSyncedWallet = reselect.createSelector(selectState$9, function (state) {\n return state.hasSyncedWallet;\n});\nvar selectSyncHash = reselect.createSelector(selectState$9, function (state) {\n return state.syncHash;\n});\nvar selectSyncData = reselect.createSelector(selectState$9, function (state) {\n return state.syncData;\n});\nvar selectSetSyncErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.setSyncErrorMessage;\n});\nvar selectGetSyncErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.getSyncErrorMessage;\n});\nvar selectGetSyncIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.getSyncIsPending;\n});\nvar selectSetSyncIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.setSyncIsPending;\n});\nvar selectHashChanged = reselect.createSelector(selectState$9, function (state) {\n return state.hashChanged;\n});\nvar selectSyncApplyIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyIsPending;\n});\nvar selectSyncApplyErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyErrorMessage;\n});\nvar selectSyncApplyPasswordError = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyPasswordError;\n});\n\nvar selectState$a = function selectState$a(state) {\n return state.lbrytv || {};\n};\n\nvar selectCurrentUploads = reselect.createSelector(selectState$a, function (state) {\n return state.currentUploads;\n});\nvar selectUploadCount = reselect.createSelector(selectCurrentUploads, function (currentUploads) {\n return currentUploads && Object.keys(currentUploads).length;\n});\nexports.ERRORS = errors;\nexports.LBRYINC_ACTIONS = action_types;\nexports.Lbryio = Lbryio;\nexports.YOUTUBE_STATUSES = youtube;\nexports.authReducer = authReducer;\nexports.blacklistReducer = blacklistReducer;\nexports.costInfoReducer = costInfoReducer;\nexports.doAuthenticate = doAuthenticate;\nexports.doBlackListedOutpointsSubscribe = doBlackListedOutpointsSubscribe;\nexports.doChannelSubscribe = doChannelSubscribe;\nexports.doChannelSubscriptionDisableNotifications = doChannelSubscriptionDisableNotifications;\nexports.doChannelSubscriptionEnableNotifications = doChannelSubscriptionEnableNotifications;\nexports.doChannelUnsubscribe = doChannelUnsubscribe;\nexports.doCheckSubscription = doCheckSubscription;\nexports.doCheckSubscriptions = doCheckSubscriptions;\nexports.doCheckSubscriptionsInit = doCheckSubscriptionsInit;\nexports.doCheckSync = doCheckSync;\nexports.doCheckYoutubeTransfer = doCheckYoutubeTransfer;\nexports.doClaimEligiblePurchaseRewards = doClaimEligiblePurchaseRewards;\nexports.doClaimRewardClearError = doClaimRewardClearError;\nexports.doClaimRewardType = doClaimRewardType;\nexports.doClaimYoutubeChannels = doClaimYoutubeChannels;\nexports.doCompleteFirstRun = doCompleteFirstRun;\nexports.doFetchAccessToken = doFetchAccessToken;\nexports.doFetchCostInfoForUri = doFetchCostInfoForUri;\nexports.doFetchFeaturedUris = doFetchFeaturedUris;\nexports.doFetchInviteStatus = doFetchInviteStatus;\nexports.doFetchMySubscriptions = doFetchMySubscriptions;\nexports.doFetchRecommendedSubscriptions = doFetchRecommendedSubscriptions;\nexports.doFetchRewardedContent = doFetchRewardedContent;\nexports.doFetchSubCount = doFetchSubCount;\nexports.doFetchTrendingUris = doFetchTrendingUris;\nexports.doFetchViewCount = doFetchViewCount;\nexports.doFilteredOutpointsSubscribe = doFilteredOutpointsSubscribe;\nexports.doGenerateAuthToken = doGenerateAuthToken;\nexports.doGetSync = doGetSync;\nexports.doInstallNew = doInstallNew;\nexports.doInstallNewWithParams = doInstallNewWithParams;\nexports.doRemoveUnreadSubscription = doRemoveUnreadSubscription;\nexports.doRemoveUnreadSubscriptions = doRemoveUnreadSubscriptions;\nexports.doResetSync = doResetSync;\nexports.doRewardList = doRewardList;\nexports.doSetDefaultAccount = doSetDefaultAccount;\nexports.doSetSync = doSetSync;\nexports.doSetViewMode = doSetViewMode;\nexports.doShowSuggestedSubs = doShowSuggestedSubs;\nexports.doSyncApply = doSyncApply;\nexports.doSyncEncryptAndDecrypt = doSyncEncryptAndDecrypt;\nexports.doTransifexUpload = doTransifexUpload;\nexports.doUpdateUnreadSubscriptions = doUpdateUnreadSubscriptions;\nexports.doUpdateUploadProgress = doUpdateUploadProgress;\nexports.doUserCheckEmailVerified = doUserCheckEmailVerified;\nexports.doUserEmailNew = doUserEmailNew;\nexports.doUserEmailToVerify = doUserEmailToVerify;\nexports.doUserEmailVerify = doUserEmailVerify;\nexports.doUserEmailVerifyFailure = doUserEmailVerifyFailure;\nexports.doUserFetch = doUserFetch;\nexports.doUserIdentityVerify = doUserIdentityVerify;\nexports.doUserInviteNew = doUserInviteNew;\nexports.doUserPhoneNew = doUserPhoneNew;\nexports.doUserPhoneReset = doUserPhoneReset;\nexports.doUserPhoneVerify = doUserPhoneVerify;\nexports.doUserPhoneVerifyFailure = doUserPhoneVerifyFailure;\nexports.doUserResendVerificationEmail = doUserResendVerificationEmail;\nexports.doUserSetReferrer = doUserSetReferrer;\nexports.doUserSetReferrerReset = doUserSetReferrerReset;\nexports.filteredReducer = filteredReducer;\nexports.homepageReducer = homepageReducer;\nexports.lbrytvReducer = lbrytvReducer;\nexports.makeSelectClaimRewardError = makeSelectClaimRewardError;\nexports.makeSelectCostInfoForUri = makeSelectCostInfoForUri;\nexports.makeSelectFetchingCostInfoForUri = makeSelectFetchingCostInfoForUri;\nexports.makeSelectIsNew = makeSelectIsNew;\nexports.makeSelectIsRewardClaimPending = makeSelectIsRewardClaimPending;\nexports.makeSelectIsSubscribed = makeSelectIsSubscribed;\nexports.makeSelectRewardAmountByType = makeSelectRewardAmountByType;\nexports.makeSelectRewardByClaimCode = makeSelectRewardByClaimCode;\nexports.makeSelectRewardByType = makeSelectRewardByType;\nexports.makeSelectSubCountForUri = makeSelectSubCountForUri;\nexports.makeSelectUnreadByChannel = makeSelectUnreadByChannel;\nexports.makeSelectViewCountForUri = makeSelectViewCountForUri;\nexports.rewards = rewards;\nexports.rewardsReducer = rewardsReducer;\nexports.selectAccessToken = selectAccessToken;\nexports.selectAllCostInfoByUri = selectAllCostInfoByUri;\nexports.selectAuthToken = selectAuthToken;\nexports.selectAuthenticationIsPending = selectAuthenticationIsPending;\nexports.selectBlackListedOutpoints = selectBlackListedOutpoints;\nexports.selectClaimErrorsByType = selectClaimErrorsByType;\nexports.selectClaimedRewards = selectClaimedRewards;\nexports.selectClaimedRewardsById = selectClaimedRewardsById;\nexports.selectClaimedRewardsByTransactionId = selectClaimedRewardsByTransactionId;\nexports.selectClaimsPendingByType = selectClaimsPendingByType;\nexports.selectCurrentUploads = selectCurrentUploads;\nexports.selectEmailAlreadyExists = selectEmailAlreadyExists;\nexports.selectEmailNewErrorMessage = selectEmailNewErrorMessage;\nexports.selectEmailNewIsPending = selectEmailNewIsPending;\nexports.selectEmailToVerify = selectEmailToVerify;\nexports.selectEmailVerifyErrorMessage = selectEmailVerifyErrorMessage;\nexports.selectEmailVerifyIsPending = selectEmailVerifyIsPending;\nexports.selectEnabledChannelNotifications = selectEnabledChannelNotifications;\nexports.selectFeaturedUris = selectFeaturedUris;\nexports.selectFetchingCostInfo = selectFetchingCostInfo;\nexports.selectFetchingFeaturedUris = selectFetchingFeaturedUris;\nexports.selectFetchingRewards = selectFetchingRewards;\nexports.selectFetchingTrendingUris = selectFetchingTrendingUris;\nexports.selectFilteredOutpoints = selectFilteredOutpoints;\nexports.selectFirstRunCompleted = selectFirstRunCompleted;\nexports.selectGetSyncErrorMessage = selectGetSyncErrorMessage;\nexports.selectGetSyncIsPending = selectGetSyncIsPending;\nexports.selectHasSyncedWallet = selectHasSyncedWallet;\nexports.selectHashChanged = selectHashChanged;\nexports.selectIdentityVerifyErrorMessage = selectIdentityVerifyErrorMessage;\nexports.selectIdentityVerifyIsPending = selectIdentityVerifyIsPending;\nexports.selectIsAuthenticating = selectIsAuthenticating;\nexports.selectIsFetchingSubscriptions = selectIsFetchingSubscriptions;\nexports.selectIsFetchingSuggested = selectIsFetchingSuggested;\nexports.selectPhoneNewErrorMessage = selectPhoneNewErrorMessage;\nexports.selectPhoneNewIsPending = selectPhoneNewIsPending;\nexports.selectPhoneToVerify = selectPhoneToVerify;\nexports.selectPhoneVerifyErrorMessage = selectPhoneVerifyErrorMessage;\nexports.selectPhoneVerifyIsPending = selectPhoneVerifyIsPending;\nexports.selectReferralReward = selectReferralReward;\nexports.selectResendingVerificationEmail = selectResendingVerificationEmail;\nexports.selectRewardContentClaimIds = selectRewardContentClaimIds;\nexports.selectSetReferrerError = selectSetReferrerError;\nexports.selectSetReferrerPending = selectSetReferrerPending;\nexports.selectSetSyncErrorMessage = selectSetSyncErrorMessage;\nexports.selectSetSyncIsPending = selectSetSyncIsPending;\nexports.selectShowSuggestedSubs = selectShowSuggestedSubs;\nexports.selectSubscriptionClaims = selectSubscriptionClaims;\nexports.selectSubscriptions = selectSubscriptions;\nexports.selectSubscriptionsBeingFetched = selectSubscriptionsBeingFetched;\nexports.selectSuggested = selectSuggested;\nexports.selectSuggestedChannels = selectSuggestedChannels;\nexports.selectSyncApplyErrorMessage = selectSyncApplyErrorMessage;\nexports.selectSyncApplyIsPending = selectSyncApplyIsPending;\nexports.selectSyncApplyPasswordError = selectSyncApplyPasswordError;\nexports.selectSyncData = selectSyncData;\nexports.selectSyncHash = selectSyncHash;\nexports.selectTrendingUris = selectTrendingUris;\nexports.selectUnclaimedRewardValue = selectUnclaimedRewardValue;\nexports.selectUnclaimedRewards = selectUnclaimedRewards;\nexports.selectUnclaimedRewardsByType = selectUnclaimedRewardsByType;\nexports.selectUnreadAmount = selectUnreadAmount;\nexports.selectUnreadByChannel = selectUnreadByChannel;\nexports.selectUnreadSubscriptions = selectUnreadSubscriptions;\nexports.selectUploadCount = selectUploadCount;\nexports.selectUser = selectUser;\nexports.selectUserCountryCode = selectUserCountryCode;\nexports.selectUserEmail = selectUserEmail;\nexports.selectUserInviteNewErrorMessage = selectUserInviteNewErrorMessage;\nexports.selectUserInviteNewIsPending = selectUserInviteNewIsPending;\nexports.selectUserInviteReferralCode = selectUserInviteReferralCode;\nexports.selectUserInviteReferralLink = selectUserInviteReferralLink;\nexports.selectUserInviteStatusFailed = selectUserInviteStatusFailed;\nexports.selectUserInviteStatusIsPending = selectUserInviteStatusIsPending;\nexports.selectUserInvitees = selectUserInvitees;\nexports.selectUserInvitesRemaining = selectUserInvitesRemaining;\nexports.selectUserIsPending = selectUserIsPending;\nexports.selectUserIsRewardApproved = selectUserIsRewardApproved;\nexports.selectUserIsVerificationCandidate = selectUserIsVerificationCandidate;\nexports.selectUserPhone = selectUserPhone;\nexports.selectUserVerifiedEmail = selectUserVerifiedEmail;\nexports.selectViewMode = selectViewMode;\nexports.selectYouTubeImportError = selectYouTubeImportError;\nexports.selectYouTubeImportPending = selectYouTubeImportPending;\nexports.selectYouTubeImportVideosComplete = selectYouTubeImportVideosComplete;\nexports.selectYoutubeChannels = selectYoutubeChannels;\nexports.setSubscriptionLatest = setSubscriptionLatest;\nexports.statsReducer = statsReducer;\nexports.subscriptionsReducer = subscriptions;\nexports.syncReducer = syncReducer;\nexports.userReducer = userReducer;\nexports.userStateSyncMiddleware = userStateSyncMiddleware;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"], __webpack_require__(/*! ./../../buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xicnlpbmMvZGlzdC9idW5kbGUuZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xicnlpbmMvZGlzdC9idW5kbGUuZXMuanM/NDQ5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgbGJyeVJlZHV4ID0gcmVxdWlyZSgnbGJyeS1yZWR1eCcpO1xudmFyIHF1ZXJ5c3RyaW5nID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJykpO1xudmFyIHJlc2VsZWN0ID0gcmVxdWlyZSgncmVzZWxlY3QnKTtcblxuLy8gVXNlclxuY29uc3QgR0VORVJBVEVfQVVUSF9UT0tFTl9GQUlMVVJFID0gJ0dFTkVSQVRFX0FVVEhfVE9LRU5fRkFJTFVSRSc7XG5jb25zdCBHRU5FUkFURV9BVVRIX1RPS0VOX1NUQVJURUQgPSAnR0VORVJBVEVfQVVUSF9UT0tFTl9TVEFSVEVEJztcbmNvbnN0IEdFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTUyA9ICdHRU5FUkFURV9BVVRIX1RPS0VOX1NVQ0NFU1MnO1xuY29uc3QgQVVUSEVOVElDQVRJT05fU1RBUlRFRCA9ICdBVVRIRU5USUNBVElPTl9TVEFSVEVEJztcbmNvbnN0IEFVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MgPSAnQVVUSEVOVElDQVRJT05fU1VDQ0VTUyc7XG5jb25zdCBBVVRIRU5USUNBVElPTl9GQUlMVVJFID0gJ0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUnO1xuY29uc3QgVVNFUl9FTUFJTF9ERUNMSU5FID0gJ1VTRVJfRU1BSUxfREVDTElORSc7XG5jb25zdCBVU0VSX0VNQUlMX05FV19TVEFSVEVEID0gJ1VTRVJfRU1BSUxfTkVXX1NUQVJURUQnO1xuY29uc3QgVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyA9ICdVU0VSX0VNQUlMX05FV19TVUNDRVNTJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX0VYSVNUUyA9ICdVU0VSX0VNQUlMX05FV19FWElTVFMnO1xuY29uc3QgVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSA9ICdVU0VSX0VNQUlMX05FV19GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1NFVCA9ICdVU0VSX0VNQUlMX1ZFUklGWV9TRVQnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVEJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MgPSAnVVNFUl9FTUFJTF9WRVJJRllfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFID0gJ1VTRVJfRU1BSUxfVkVSSUZZX0ZBSUxVUkUnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVEFSVEVEJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVUNDRVNTID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9QSE9ORV9SRVNFVCA9ICdVU0VSX1BIT05FX1JFU0VUJztcbmNvbnN0IFVTRVJfUEhPTkVfTkVXX1NUQVJURUQgPSAnVVNFUl9QSE9ORV9ORVdfU1RBUlRFRCc7XG5jb25zdCBVU0VSX1BIT05FX05FV19TVUNDRVNTID0gJ1VTRVJfUEhPTkVfTkVXX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSA9ICdVU0VSX1BIT05FX05FV19GQUlMVVJFJztcbmNvbnN0IFVTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQgPSAnVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfUEhPTkVfVkVSSUZZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSA9ICdVU0VSX1BIT05FX1ZFUklGWV9GQUlMVVJFJztcbmNvbnN0IFVTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQgPSAnVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfSURFTlRJVFlfVkVSSUZZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSA9ICdVU0VSX0lERU5USVRZX1ZFUklGWV9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRkVUQ0hfU1RBUlRFRCA9ICdVU0VSX0ZFVENIX1NUQVJURUQnO1xuY29uc3QgVVNFUl9GRVRDSF9TVUNDRVNTID0gJ1VTRVJfRkVUQ0hfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0ZFVENIX0ZBSUxVUkUgPSAnVVNFUl9GRVRDSF9GQUlMVVJFJztcbmNvbnN0IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVEID0gJ1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVEJztcbmNvbnN0IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTID0gJ1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTJztcbmNvbnN0IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFID0gJ1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFJztcbmNvbnN0IFVTRVJfSU5WSVRFX05FV19TVEFSVEVEID0gJ1VTRVJfSU5WSVRFX05FV19TVEFSVEVEJztcbmNvbnN0IFVTRVJfSU5WSVRFX05FV19TVUNDRVNTID0gJ1VTRVJfSU5WSVRFX05FV19TVUNDRVNTJztcbmNvbnN0IFVTRVJfSU5WSVRFX05FV19GQUlMVVJFID0gJ1VTRVJfSU5WSVRFX05FV19GQUlMVVJFJztcbmNvbnN0IEZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTID0gJ0ZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTJztcbmNvbnN0IFVTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRCA9ICdVU0VSX1lPVVRVQkVfSU1QT1JUX1NUQVJURUQnO1xuY29uc3QgVVNFUl9ZT1VUVUJFX0lNUE9SVF9GQUlMVVJFID0gJ1VTRVJfWU9VVFVCRV9JTVBPUlRfRkFJTFVSRSc7XG5jb25zdCBVU0VSX1lPVVRVQkVfSU1QT1JUX1NVQ0NFU1MgPSAnVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTJztcbmNvbnN0IFVTRVJfU0VUX1JFRkVSUkVSX1NUQVJURUQgPSAnVVNFUl9TRVRfUkVGRVJSRVJfU1RBUlRFRCc7XG5jb25zdCBVU0VSX1NFVF9SRUZFUlJFUl9TVUNDRVNTID0gJ1VTRVJfU0VUX1JFRkVSUkVSX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9TRVRfUkVGRVJSRVJfRkFJTFVSRSA9ICdVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFJztcbmNvbnN0IFVTRVJfU0VUX1JFRkVSUkVSX1JFU0VUID0gJ1VTRVJfU0VUX1JFRkVSUkVSX1JFU0VUJzsgLy8gQ2xhaW1zXG5cbmNvbnN0IEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfU1RBUlRFRCA9ICdGRVRDSF9GRUFUVVJFRF9DT05URU5UX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9TVEFSVEVEID0gJ0ZFVENIX1RSRU5ESU5HX0NPTlRFTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRCc7XG5jb25zdCBSRVNPTFZFX1VSSVNfU1RBUlRFRCA9ICdSRVNPTFZFX1VSSVNfU1RBUlRFRCc7XG5jb25zdCBSRVNPTFZFX1VSSVNfQ09NUExFVEVEID0gJ1JFU09MVkVfVVJJU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEJztcbmNvbnN0IEZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9TVEFSVEVEID0gJ0ZFVENIX0NIQU5ORUxfQ0xBSU1fQ09VTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEID0gJ0ZFVENIX0NMQUlNX0xJU1RfTUlORV9DT01QTEVURUQnO1xuY29uc3QgQUJBTkRPTl9DTEFJTV9TVEFSVEVEID0gJ0FCQU5ET05fQ0xBSU1fU1RBUlRFRCc7XG5jb25zdCBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCA9ICdBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEID0gJ0ZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQnO1xuY29uc3QgQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCA9ICdDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEJztcbmNvbnN0IENSRUFURV9DSEFOTkVMX0NPTVBMRVRFRCA9ICdDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQnO1xuY29uc3QgUFVCTElTSF9TVEFSVEVEID0gJ1BVQkxJU0hfU1RBUlRFRCc7XG5jb25zdCBQVUJMSVNIX0NPTVBMRVRFRCA9ICdQVUJMSVNIX0NPTVBMRVRFRCc7XG5jb25zdCBQVUJMSVNIX0ZBSUxFRCA9ICdQVUJMSVNIX0ZBSUxFRCc7XG5jb25zdCBTRVRfUExBWUlOR19VUkkgPSAnU0VUX1BMQVlJTkdfVVJJJztcbmNvbnN0IFNFVF9DT05URU5UX1BPU0lUSU9OID0gJ1NFVF9DT05URU5UX1BPU0lUSU9OJztcbmNvbnN0IFNFVF9DT05URU5UX0xBU1RfVklFV0VEID0gJ1NFVF9DT05URU5UX0xBU1RfVklFV0VEJztcbmNvbnN0IENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkkgPSAnQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSc7XG5jb25zdCBDTEVBUl9DT05URU5UX0hJU1RPUllfQUxMID0gJ0NMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwnOyAvLyBTdWJzY3JpcHRpb25zXG5cbmNvbnN0IENIQU5ORUxfU1VCU0NSSUJFID0gJ0NIQU5ORUxfU1VCU0NSSUJFJztcbmNvbnN0IENIQU5ORUxfVU5TVUJTQ1JJQkUgPSAnQ0hBTk5FTF9VTlNVQlNDUklCRSc7XG5jb25zdCBDSEFOTkVMX1NVQlNDUklQVElPTl9FTkFCTEVfTk9USUZJQ0FUSU9OUyA9ICdDSEFOTkVMX1NVQlNDUklQVElPTl9FTkFCTEVfTk9USUZJQ0FUSU9OUyc7XG5jb25zdCBDSEFOTkVMX1NVQlNDUklQVElPTl9ESVNBQkxFX05PVElGSUNBVElPTlMgPSAnQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRElTQUJMRV9OT1RJRklDQVRJT05TJztcbmNvbnN0IEhBU19GRVRDSEVEX1NVQlNDUklQVElPTlMgPSAnSEFTX0ZFVENIRURfU1VCU0NSSVBUSU9OUyc7XG5jb25zdCBTRVRfU1VCU0NSSVBUSU9OX0xBVEVTVCA9ICdTRVRfU1VCU0NSSVBUSU9OX0xBVEVTVCc7XG5jb25zdCBVUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFMgPSAnVVBEQVRFX1NVQlNDUklQVElPTl9VTlJFQURTJztcbmNvbnN0IFJFTU9WRV9TVUJTQ1JJUFRJT05fVU5SRUFEUyA9ICdSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMnO1xuY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OX1NUQVJURUQgPSAnQ0hFQ0tfU1VCU0NSSVBUSU9OX1NUQVJURUQnO1xuY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRCA9ICdDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVEJztcbmNvbnN0IENIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFID0gJ0NIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFJztcbmNvbnN0IEZFVENIX1NVQlNDUklQVElPTlNfU1RBUlQgPSAnRkVUQ0hfU1VCU0NSSVBUSU9OU19TVEFSVCc7XG5jb25zdCBGRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUwgPSAnRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMJztcbmNvbnN0IEZFVENIX1NVQlNDUklQVElPTlNfU1VDQ0VTUyA9ICdGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MnO1xuY29uc3QgU0VUX1ZJRVdfTU9ERSA9ICdTRVRfVklFV19NT0RFJztcbmNvbnN0IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVCA9ICdHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1RBUlQnO1xuY29uc3QgR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MgPSAnR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MnO1xuY29uc3QgR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX0ZBSUwgPSAnR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX0ZBSUwnO1xuY29uc3QgU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURUQgPSAnU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURUQnO1xuY29uc3QgVklFV19TVUdHRVNURURfU1VCU0NSSVBUSU9OUyA9ICdWSUVXX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TJzsgLy8gQmxhY2tsaXN0XG5cbmNvbnN0IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX1NUQVJURUQgPSAnRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0ZBSUxFRCA9ICdGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRUQnO1xuY29uc3QgQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1VCU0NSSUJFID0gJ0JMQUNLX0xJU1RFRF9DT05URU5UX1NVQlNDUklCRSc7IC8vIEZpbHRlcmVkIGxpc3RcblxuY29uc3QgRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9TVEFSVEVEID0gJ0ZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9GSUxURVJFRF9DT05URU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9GSUxURVJFRF9DT05URU5UX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9GSUxURVJFRF9DT05URU5UX0ZBSUxFRCA9ICdGRVRDSF9GSUxURVJFRF9DT05URU5UX0ZBSUxFRCc7XG5jb25zdCBGSUxURVJFRF9DT05URU5UX1NVQlNDUklCRSA9ICdGSUxURVJFRF9DT05URU5UX1NVQlNDUklCRSc7IC8vIENvc3QgSW5mb1xuXG5jb25zdCBGRVRDSF9DT1NUX0lORk9fU1RBUlRFRCA9ICdGRVRDSF9DT1NUX0lORk9fU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEID0gJ0ZFVENIX0NPU1RfSU5GT19DT01QTEVURUQnOyAvLyBTdGF0c1xuXG5jb25zdCBGRVRDSF9WSUVXX0NPVU5UX1NUQVJURUQgPSAnRkVUQ0hfVklFV19DT1VOVF9TVEFSVEVEJztcbmNvbnN0IEZFVENIX1ZJRVdfQ09VTlRfRkFJTEVEID0gJ0ZFVENIX1ZJRVdfQ09VTlRfRkFJTEVEJztcbmNvbnN0IEZFVENIX1ZJRVdfQ09VTlRfQ09NUExFVEVEID0gJ0ZFVENIX1ZJRVdfQ09VTlRfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX1NVQl9DT1VOVF9TVEFSVEVEID0gJ0ZFVENIX1NVQl9DT1VOVF9TVEFSVEVEJztcbmNvbnN0IEZFVENIX1NVQl9DT1VOVF9GQUlMRUQgPSAnRkVUQ0hfU1VCX0NPVU5UX0ZBSUxFRCc7XG5jb25zdCBGRVRDSF9TVUJfQ09VTlRfQ09NUExFVEVEID0gJ0ZFVENIX1NVQl9DT1VOVF9DT01QTEVURUQnOyAvLyBDcm9zcy1kZXZpY2UgU3luY1xuXG5jb25zdCBHRVRfU1lOQ19TVEFSVEVEID0gJ0dFVF9TWU5DX1NUQVJURUQnO1xuY29uc3QgR0VUX1NZTkNfQ09NUExFVEVEID0gJ0dFVF9TWU5DX0NPTVBMRVRFRCc7XG5jb25zdCBHRVRfU1lOQ19GQUlMRUQgPSAnR0VUX1NZTkNfRkFJTEVEJztcbmNvbnN0IFNFVF9TWU5DX1NUQVJURUQgPSAnU0VUX1NZTkNfU1RBUlRFRCc7XG5jb25zdCBTRVRfU1lOQ19GQUlMRUQgPSAnU0VUX1NZTkNfRkFJTEVEJztcbmNvbnN0IFNFVF9TWU5DX0NPTVBMRVRFRCA9ICdTRVRfU1lOQ19DT01QTEVURUQnO1xuY29uc3QgU0VUX0RFRkFVTFRfQUNDT1VOVCA9ICdTRVRfREVGQVVMVF9BQ0NPVU5UJztcbmNvbnN0IFNZTkNfQVBQTFlfU1RBUlRFRCA9ICdTWU5DX0FQUExZX1NUQVJURUQnO1xuY29uc3QgU1lOQ19BUFBMWV9DT01QTEVURUQgPSAnU1lOQ19BUFBMWV9DT01QTEVURUQnO1xuY29uc3QgU1lOQ19BUFBMWV9GQUlMRUQgPSAnU1lOQ19BUFBMWV9GQUlMRUQnO1xuY29uc3QgU1lOQ19BUFBMWV9CQURfUEFTU1dPUkQgPSAnU1lOQ19BUFBMWV9CQURfUEFTU1dPUkQnO1xuY29uc3QgU1lOQ19SRVNFVCA9ICdTWU5DX1JFU0VUJzsgLy8gTGJyeS50dlxuXG5jb25zdCBVUERBVEVfVVBMT0FEX1BST0dSRVNTID0gJ1VQREFURV9VUExPQURfUFJPR1JFU1MnO1xuXG52YXIgYWN0aW9uX3R5cGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkU6IEdFTkVSQVRFX0FVVEhfVE9LRU5fRkFJTFVSRSxcbiAgR0VORVJBVEVfQVVUSF9UT0tFTl9TVEFSVEVEOiBHRU5FUkFURV9BVVRIX1RPS0VOX1NUQVJURUQsXG4gIEdFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTUzogR0VORVJBVEVfQVVUSF9UT0tFTl9TVUNDRVNTLFxuICBBVVRIRU5USUNBVElPTl9TVEFSVEVEOiBBVVRIRU5USUNBVElPTl9TVEFSVEVELFxuICBBVVRIRU5USUNBVElPTl9TVUNDRVNTOiBBVVRIRU5USUNBVElPTl9TVUNDRVNTLFxuICBBVVRIRU5USUNBVElPTl9GQUlMVVJFOiBBVVRIRU5USUNBVElPTl9GQUlMVVJFLFxuICBVU0VSX0VNQUlMX0RFQ0xJTkU6IFVTRVJfRU1BSUxfREVDTElORSxcbiAgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRDogVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCxcbiAgVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUzogVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyxcbiAgVVNFUl9FTUFJTF9ORVdfRVhJU1RTOiBVU0VSX0VNQUlMX05FV19FWElTVFMsXG4gIFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkU6IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX1NFVDogVVNFUl9FTUFJTF9WRVJJRllfU0VULFxuICBVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVEOiBVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVELFxuICBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTOiBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFOiBVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVEFSVEVEOiBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVEFSVEVELFxuICBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9GQUlMVVJFOiBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9GQUlMVVJFLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVUNDRVNTOiBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVUNDRVNTLFxuICBVU0VSX1BIT05FX1JFU0VUOiBVU0VSX1BIT05FX1JFU0VULFxuICBVU0VSX1BIT05FX05FV19TVEFSVEVEOiBVU0VSX1BIT05FX05FV19TVEFSVEVELFxuICBVU0VSX1BIT05FX05FV19TVUNDRVNTOiBVU0VSX1BIT05FX05FV19TVUNDRVNTLFxuICBVU0VSX1BIT05FX05FV19GQUlMVVJFOiBVU0VSX1BIT05FX05FV19GQUlMVVJFLFxuICBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVEOiBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVELFxuICBVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTOiBVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTLFxuICBVU0VSX1BIT05FX1ZFUklGWV9GQUlMVVJFOiBVU0VSX1BIT05FX1ZFUklGWV9GQUlMVVJFLFxuICBVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVEOiBVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVELFxuICBVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTOiBVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTLFxuICBVU0VSX0lERU5USVRZX1ZFUklGWV9GQUlMVVJFOiBVU0VSX0lERU5USVRZX1ZFUklGWV9GQUlMVVJFLFxuICBVU0VSX0ZFVENIX1NUQVJURUQ6IFVTRVJfRkVUQ0hfU1RBUlRFRCxcbiAgVVNFUl9GRVRDSF9TVUNDRVNTOiBVU0VSX0ZFVENIX1NVQ0NFU1MsXG4gIFVTRVJfRkVUQ0hfRkFJTFVSRTogVVNFUl9GRVRDSF9GQUlMVVJFLFxuICBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRDogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURUQsXG4gIFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyxcbiAgVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX0ZBSUxVUkU6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFLFxuICBVU0VSX0lOVklURV9ORVdfU1RBUlRFRDogVVNFUl9JTlZJVEVfTkVXX1NUQVJURUQsXG4gIFVTRVJfSU5WSVRFX05FV19TVUNDRVNTOiBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyxcbiAgVVNFUl9JTlZJVEVfTkVXX0ZBSUxVUkU6IFVTRVJfSU5WSVRFX05FV19GQUlMVVJFLFxuICBGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUzogRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1MsXG4gIFVTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRDogVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVEFSVEVELFxuICBVU0VSX1lPVVRVQkVfSU1QT1JUX0ZBSUxVUkU6IFVTRVJfWU9VVFVCRV9JTVBPUlRfRkFJTFVSRSxcbiAgVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTOiBVU0VSX1lPVVRVQkVfSU1QT1JUX1NVQ0NFU1MsXG4gIFVTRVJfU0VUX1JFRkVSUkVSX1NUQVJURUQ6IFVTRVJfU0VUX1JFRkVSUkVSX1NUQVJURUQsXG4gIFVTRVJfU0VUX1JFRkVSUkVSX1NVQ0NFU1M6IFVTRVJfU0VUX1JFRkVSUkVSX1NVQ0NFU1MsXG4gIFVTRVJfU0VUX1JFRkVSUkVSX0ZBSUxVUkU6IFVTRVJfU0VUX1JFRkVSUkVSX0ZBSUxVUkUsXG4gIFVTRVJfU0VUX1JFRkVSUkVSX1JFU0VUOiBVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVCxcbiAgRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9TVEFSVEVEOiBGRVRDSF9GRUFUVVJFRF9DT05URU5UX1NUQVJURUQsXG4gIEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVEOiBGRVRDSF9GRUFUVVJFRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9TVEFSVEVEOiBGRVRDSF9UUkVORElOR19DT05URU5UX1NUQVJURUQsXG4gIEZFVENIX1RSRU5ESU5HX0NPTlRFTlRfQ09NUExFVEVEOiBGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRCxcbiAgUkVTT0xWRV9VUklTX1NUQVJURUQ6IFJFU09MVkVfVVJJU19TVEFSVEVELFxuICBSRVNPTFZFX1VSSVNfQ09NUExFVEVEOiBSRVNPTFZFX1VSSVNfQ09NUExFVEVELFxuICBGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVELFxuICBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQ6IEZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9TVEFSVEVEOiBGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX1NUQVJURUQsXG4gIEZFVENIX0NIQU5ORUxfQ0xBSU1fQ09VTlRfQ09NUExFVEVEOiBGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX0NPTVBMRVRFRCxcbiAgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQ6IEZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVELFxuICBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEOiBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVELFxuICBBQkFORE9OX0NMQUlNX1NUQVJURUQ6IEFCQU5ET05fQ0xBSU1fU1RBUlRFRCxcbiAgQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQ6IEFCQU5ET05fQ0xBSU1fU1VDQ0VFREVELFxuICBGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRDogRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQsXG4gIEZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQ6IEZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQsXG4gIENSRUFURV9DSEFOTkVMX1NUQVJURUQ6IENSRUFURV9DSEFOTkVMX1NUQVJURUQsXG4gIENSRUFURV9DSEFOTkVMX0NPTVBMRVRFRDogQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVELFxuICBQVUJMSVNIX1NUQVJURUQ6IFBVQkxJU0hfU1RBUlRFRCxcbiAgUFVCTElTSF9DT01QTEVURUQ6IFBVQkxJU0hfQ09NUExFVEVELFxuICBQVUJMSVNIX0ZBSUxFRDogUFVCTElTSF9GQUlMRUQsXG4gIFNFVF9QTEFZSU5HX1VSSTogU0VUX1BMQVlJTkdfVVJJLFxuICBTRVRfQ09OVEVOVF9QT1NJVElPTjogU0VUX0NPTlRFTlRfUE9TSVRJT04sXG4gIFNFVF9DT05URU5UX0xBU1RfVklFV0VEOiBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCxcbiAgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSTogQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSxcbiAgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTDogQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTCxcbiAgQ0hBTk5FTF9TVUJTQ1JJQkU6IENIQU5ORUxfU1VCU0NSSUJFLFxuICBDSEFOTkVMX1VOU1VCU0NSSUJFOiBDSEFOTkVMX1VOU1VCU0NSSUJFLFxuICBDSEFOTkVMX1NVQlNDUklQVElPTl9FTkFCTEVfTk9USUZJQ0FUSU9OUzogQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRU5BQkxFX05PVElGSUNBVElPTlMsXG4gIENIQU5ORUxfU1VCU0NSSVBUSU9OX0RJU0FCTEVfTk9USUZJQ0FUSU9OUzogQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRElTQUJMRV9OT1RJRklDQVRJT05TLFxuICBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TOiBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TLFxuICBTRVRfU1VCU0NSSVBUSU9OX0xBVEVTVDogU0VUX1NVQlNDUklQVElPTl9MQVRFU1QsXG4gIFVQREFURV9TVUJTQ1JJUFRJT05fVU5SRUFEUzogVVBEQVRFX1NVQlNDUklQVElPTl9VTlJFQURTLFxuICBSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFM6IFJFTU9WRV9TVUJTQ1JJUFRJT05fVU5SRUFEUyxcbiAgQ0hFQ0tfU1VCU0NSSVBUSU9OX1NUQVJURUQ6IENIRUNLX1NVQlNDUklQVElPTl9TVEFSVEVELFxuICBDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVEOiBDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVELFxuICBDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRTogQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUsXG4gIEZFVENIX1NVQlNDUklQVElPTlNfU1RBUlQ6IEZFVENIX1NVQlNDUklQVElPTlNfU1RBUlQsXG4gIEZFVENIX1NVQlNDUklQVElPTlNfRkFJTDogRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMLFxuICBGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1M6IEZFVENIX1NVQlNDUklQVElPTlNfU1VDQ0VTUyxcbiAgU0VUX1ZJRVdfTU9ERTogU0VUX1ZJRVdfTU9ERSxcbiAgR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NUQVJUOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1RBUlQsXG4gIEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1VDQ0VTUyxcbiAgR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX0ZBSUw6IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMLFxuICBTVUJTQ1JJUFRJT05fRklSU1RfUlVOX0NPTVBMRVRFRDogU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURUQsXG4gIFZJRVdfU1VHR0VTVEVEX1NVQlNDUklQVElPTlM6IFZJRVdfU1VHR0VTVEVEX1NVQlNDUklQVElPTlMsXG4gIEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX1NUQVJURUQ6IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX1NUQVJURUQsXG4gIEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0NPTVBMRVRFRDogRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfQ09NUExFVEVELFxuICBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRUQ6IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0ZBSUxFRCxcbiAgQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1VCU0NSSUJFOiBCTEFDS19MSVNURURfQ09OVEVOVF9TVUJTQ1JJQkUsXG4gIEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRDogRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9TVEFSVEVELFxuICBGRVRDSF9GSUxURVJFRF9DT05URU5UX0NPTVBMRVRFRDogRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9DT01QTEVURUQsXG4gIEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfRkFJTEVEOiBGRVRDSF9GSUxURVJFRF9DT05URU5UX0ZBSUxFRCxcbiAgRklMVEVSRURfQ09OVEVOVF9TVUJTQ1JJQkU6IEZJTFRFUkVEX0NPTlRFTlRfU1VCU0NSSUJFLFxuICBGRVRDSF9DT1NUX0lORk9fU1RBUlRFRDogRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQsXG4gIEZFVENIX0NPU1RfSU5GT19DT01QTEVURUQ6IEZFVENIX0NPU1RfSU5GT19DT01QTEVURUQsXG4gIEZFVENIX1ZJRVdfQ09VTlRfU1RBUlRFRDogRkVUQ0hfVklFV19DT1VOVF9TVEFSVEVELFxuICBGRVRDSF9WSUVXX0NPVU5UX0ZBSUxFRDogRkVUQ0hfVklFV19DT1VOVF9GQUlMRUQsXG4gIEZFVENIX1ZJRVdfQ09VTlRfQ09NUExFVEVEOiBGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRCxcbiAgRkVUQ0hfU1VCX0NPVU5UX1NUQVJURUQ6IEZFVENIX1NVQl9DT1VOVF9TVEFSVEVELFxuICBGRVRDSF9TVUJfQ09VTlRfRkFJTEVEOiBGRVRDSF9TVUJfQ09VTlRfRkFJTEVELFxuICBGRVRDSF9TVUJfQ09VTlRfQ09NUExFVEVEOiBGRVRDSF9TVUJfQ09VTlRfQ09NUExFVEVELFxuICBHRVRfU1lOQ19TVEFSVEVEOiBHRVRfU1lOQ19TVEFSVEVELFxuICBHRVRfU1lOQ19DT01QTEVURUQ6IEdFVF9TWU5DX0NPTVBMRVRFRCxcbiAgR0VUX1NZTkNfRkFJTEVEOiBHRVRfU1lOQ19GQUlMRUQsXG4gIFNFVF9TWU5DX1NUQVJURUQ6IFNFVF9TWU5DX1NUQVJURUQsXG4gIFNFVF9TWU5DX0ZBSUxFRDogU0VUX1NZTkNfRkFJTEVELFxuICBTRVRfU1lOQ19DT01QTEVURUQ6IFNFVF9TWU5DX0NPTVBMRVRFRCxcbiAgU0VUX0RFRkFVTFRfQUNDT1VOVDogU0VUX0RFRkFVTFRfQUNDT1VOVCxcbiAgU1lOQ19BUFBMWV9TVEFSVEVEOiBTWU5DX0FQUExZX1NUQVJURUQsXG4gIFNZTkNfQVBQTFlfQ09NUExFVEVEOiBTWU5DX0FQUExZX0NPTVBMRVRFRCxcbiAgU1lOQ19BUFBMWV9GQUlMRUQ6IFNZTkNfQVBQTFlfRkFJTEVELFxuICBTWU5DX0FQUExZX0JBRF9QQVNTV09SRDogU1lOQ19BUFBMWV9CQURfUEFTU1dPUkQsXG4gIFNZTkNfUkVTRVQ6IFNZTkNfUkVTRVQsXG4gIFVQREFURV9VUExPQURfUFJPR1JFU1M6IFVQREFURV9VUExPQURfUFJPR1JFU1Ncbn0pO1xuXG5jb25zdCBOT1RfVFJBTlNGRVJSRUQgPSAnbm90X3RyYW5zZmVycmVkJztcbmNvbnN0IFBFTkRJTkdfVFJBTlNGRVIgPSAncGVuZGluZ190cmFuc2Zlcic7XG5jb25zdCBDT01QTEVURURfVFJBTlNGRVIgPSAnY29tcGxldGVkX3RyYW5zZmVyJztcblxudmFyIHlvdXR1YmUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIE5PVF9UUkFOU0ZFUlJFRDogTk9UX1RSQU5TRkVSUkVELFxuICBQRU5ESU5HX1RSQU5TRkVSOiBQRU5ESU5HX1RSQU5TRkVSLFxuICBDT01QTEVURURfVFJBTlNGRVI6IENPTVBMRVRFRF9UUkFOU0ZFUlxufSk7XG5cbmNvbnN0IEFMUkVBRFlfQ0xBSU1FRCA9ICdvbmNlIHRoZSBpbnZpdGUgcmV3YXJkIGhhcyBiZWVuIGNsYWltZWQgdGhlIHJlZmVycmVyIGNhbm5vdCBiZSBjaGFuZ2VkJztcbmNvbnN0IFJFRkVSUkVSX05PVF9GT1VORCA9ICdBIGxicnkudHYgYWNjb3VudCBjb3VsZCBub3QgYmUgZm91bmQgZm9yIHRoZSByZWZlcnJlciB5b3UgcHJvdmlkZWQuJztcblxudmFyIGVycm9ycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgQUxSRUFEWV9DTEFJTUVEOiBBTFJFQURZX0NMQUlNRUQsXG4gIFJFRkVSUkVSX05PVF9GT1VORDogUkVGRVJSRVJfTk9UX0ZPVU5EXG59KTtcblxuY29uc3QgTGJyeWlvID0ge1xuICBlbmFibGVkOiB0cnVlLFxuICBhdXRoZW50aWNhdGlvblByb21pc2U6IG51bGwsXG4gIGV4Y2hhbmdlUHJvbWlzZTogbnVsbCxcbiAgZXhjaGFuZ2VMYXN0RmV0Y2hlZDogbnVsbCxcbiAgQ09OTkVDVElPTl9TVFJJTkc6ICdodHRwczovL2FwaS5sYnJ5LmNvbS8nXG59O1xuY29uc3QgRVhDSEFOR0VfUkFURV9USU1FT1VUID0gMjAgKiA2MCAqIDEwMDA7IC8vIFdlIGNhbid0IHVzZSBlbnYncyBiZWNhdXNlIHRoZXkgYXJlbid0IHBhc3NlZCBpbnRvIG5vZGVfbW9kdWxlc1xuXG5MYnJ5aW8uc2V0TG9jYWxBcGkgPSBlbmRwb2ludCA9PiB7XG4gIExicnlpby5DT05ORUNUSU9OX1NUUklORyA9IGVuZHBvaW50LnJlcGxhY2UoL1xcLyokLywgJy8nKTsgLy8gZXhhY3RseSBvbmUgc2xhc2ggYXQgdGhlIGVuZDtcbn07XG5cbkxicnlpby5jYWxsID0gKHJlc291cmNlLCBhY3Rpb24sIHBhcmFtcyA9IHt9LCBtZXRob2QgPSAnZ2V0JykgPT4ge1xuICBpZiAoIUxicnlpby5lbmFibGVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihfXygnTEJSWSBpbnRlcm5hbCBBUEkgaXMgZGlzYWJsZWQnKSkpO1xuICB9XG5cbiAgaWYgKCEobWV0aG9kID09PSAnZ2V0JyB8fCBtZXRob2QgPT09ICdwb3N0JykpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKF9fKCdJbnZhbGlkIG1ldGhvZCcpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0FuZFBhcnNlKHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCkudGhlbihqc29uID0+IHtcbiAgICAgIGxldCBlcnJvcjtcblxuICAgICAgaWYgKGpzb24uZXJyb3IpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoanNvbi5lcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignVW5rbm93biBBUEkgZXJyb3Igc2lnbmF0dXJlJyk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7IC8vIFRoaXMgaXMgcHJpbWFyaWx5IGEgaGFjayB1c2VkIGluIGFjdGlvbnMvdXNlci5qc1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZVJlcXVlc3QodXJsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucykudGhlbihjaGVja0FuZFBhcnNlKTtcbiAgfVxuXG4gIHJldHVybiBMYnJ5aW8uZ2V0QXV0aFRva2VuKCkudGhlbih0b2tlbiA9PiB7XG4gICAgY29uc3QgZnVsbFBhcmFtcyA9IHtcbiAgICAgIGF1dGhfdG9rZW46IHRva2VuLFxuICAgICAgLi4ucGFyYW1zXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhmdWxsUGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZ1bGxQYXJhbXNba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZnVsbFBhcmFtc1trZXldID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHFzID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KGZ1bGxQYXJhbXMpO1xuICAgIGxldCB1cmwgPSBgJHtMYnJ5aW8uQ09OTkVDVElPTl9TVFJJTkd9JHtyZXNvdXJjZX0vJHthY3Rpb259PyR7cXN9YDtcbiAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCdcbiAgICB9O1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBxc1xuICAgICAgfTtcbiAgICAgIHVybCA9IGAke0xicnlpby5DT05ORUNUSU9OX1NUUklOR30ke3Jlc291cmNlfS8ke2FjdGlvbn1gO1xuICAgIH1cblxuICAgIHJldHVybiBtYWtlUmVxdWVzdCh1cmwsIG9wdGlvbnMpLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSk7XG4gIH0pO1xufTtcblxuTGJyeWlvLmF1dGhUb2tlbiA9IG51bGw7XG5cbkxicnlpby5nZXRBdXRoVG9rZW4gPSAoKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgaWYgKExicnlpby5hdXRoVG9rZW4pIHtcbiAgICByZXNvbHZlKExicnlpby5hdXRoVG9rZW4pO1xuICB9IGVsc2UgaWYgKExicnlpby5vdmVycmlkZXMuZ2V0QXV0aFRva2VuKSB7XG4gICAgTGJyeWlvLm92ZXJyaWRlcy5nZXRBdXRoVG9rZW4oKS50aGVuKHRva2VuID0+IHtcbiAgICAgIHJlc29sdmUodG9rZW4pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gd2luZG93O1xuXG4gICAgaWYgKHN0b3JlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCB0b2tlbiA9IHN0YXRlLmF1dGggPyBzdGF0ZS5hdXRoLmF1dGhUb2tlbiA6IG51bGw7XG4gICAgICBMYnJ5aW8uYXV0aFRva2VuID0gdG9rZW47XG4gICAgICByZXNvbHZlKHRva2VuKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHJlc29sdmUobnVsbCk7XG4gIH1cbn0pO1xuXG5MYnJ5aW8uZ2V0Q3VycmVudFVzZXIgPSAoKSA9PiBMYnJ5aW8uY2FsbCgndXNlcicsICdtZScpO1xuXG5MYnJ5aW8uYXV0aGVudGljYXRlID0gKCkgPT4ge1xuICBpZiAoIUxicnlpby5lbmFibGVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICAgICAgcHJpbWFyeV9lbWFpbDogJ2Rpc2FibGVkQGxicnkuaW8nLFxuICAgICAgICBoYXNfdmVyaWZpZWRfZW1haWw6IHRydWUsXG4gICAgICAgIGlzX2lkZW50aXR5X3ZlcmlmaWVkOiB0cnVlLFxuICAgICAgICBpc19yZXdhcmRfYXBwcm92ZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChMYnJ5aW8uYXV0aGVudGljYXRpb25Qcm9taXNlID09PSBudWxsKSB7XG4gICAgTGJyeWlvLmF1dGhlbnRpY2F0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIExicnlpby5nZXRBdXRoVG9rZW4oKS50aGVuKHRva2VuID0+IHtcbiAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi5sZW5ndGggPiA2MCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSAvLyBjaGVjayB0aGF0IHRva2VuIHdvcmtzXG5cblxuICAgICAgICByZXR1cm4gTGJyeWlvLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHVzZXIpLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgICAgIH0pLnRoZW4odXNlciA9PiB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGJyeVJlZHV4Lkxicnkuc3RhdHVzKCkudGhlbihzdGF0dXMgPT4ge1xuICAgICAgICAgIGlmIChMYnJ5aW8ub3ZlcnJpZGVzLnNldEF1dGhUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIExicnlpby5vdmVycmlkZXMuc2V0QXV0aFRva2VuKHN0YXR1cyk7XG4gICAgICAgICAgfSAvLyBzaW1wbHkgY2FsbCB0aGUgbG9naWMgdG8gY3JlYXRlIGEgbmV3IHVzZXIsIGFuZCBvYnRhaW4gdGhlIGF1dGggdG9rZW5cblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgTGJyeWlvLmNhbGwoJ3VzZXInLCAnbmV3Jywge1xuICAgICAgICAgICAgICBhdXRoX3Rva2VuOiAnJyxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgICAgICAgICAgIGFwcF9pZDogc3RhdHVzLmluc3RhbGxhdGlvbl9pZFxuICAgICAgICAgICAgfSwgJ3Bvc3QnKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5hdXRoX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdXRoX3Rva2VuIHdhcyBub3Qgc2V0IGluIHRoZSByZXNwb25zZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHN0b3JlXG4gICAgICAgICAgICAgIH0gPSB3aW5kb3c7XG5cbiAgICAgICAgICAgICAgaWYgKHN0b3JlKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgdHlwZTogR0VORVJBVEVfQVVUSF9UT0tFTl9TVUNDRVNTLFxuICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhdXRoVG9rZW46IHJlc3BvbnNlLmF1dGhfdG9rZW5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIExicnlpby5hdXRoVG9rZW4gPSByZXNwb25zZS5hdXRoX3Rva2VuO1xuICAgICAgICAgICAgICByZXMocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqKGVycm9yKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkudGhlbih1c2VyID0+IHtcbiAgICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgICAgcmV0dXJuIExicnlpby5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICB9KS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gTGJyeWlvLmF1dGhlbnRpY2F0aW9uUHJvbWlzZTtcbn07XG5cbkxicnlpby5nZXRTdHJpcGVUb2tlbiA9ICgpID0+IExicnlpby5DT05ORUNUSU9OX1NUUklORy5zdGFydHNXaXRoKCdodHRwOi8vbG9jYWxob3N0OicpID8gJ3BrX3Rlc3RfTm9MMUpXTDdpMWlwZmhWSWQ1S2ZEWmdvJyA6ICdwa19saXZlX2U4TTRkUk5uQ0NibXBaemR1RVVaQmdKTyc7XG5cbkxicnlpby5nZXRFeGNoYW5nZVJhdGVzID0gKCkgPT4ge1xuICBpZiAoIUxicnlpby5leGNoYW5nZUxhc3RGZXRjaGVkIHx8IERhdGUubm93KCkgLSBMYnJ5aW8uZXhjaGFuZ2VMYXN0RmV0Y2hlZCA+IEVYQ0hBTkdFX1JBVEVfVElNRU9VVCkge1xuICAgIExicnlpby5leGNoYW5nZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBMYnJ5aW8uY2FsbCgnbGJjJywgJ2V4Y2hhbmdlX3JhdGUnLCB7fSwgJ2dldCcsIHRydWUpLnRoZW4oKHtcbiAgICAgICAgbGJjX3VzZDogTEJDX1VTRCxcbiAgICAgICAgbGJjX2J0YzogTEJDX0JUQyxcbiAgICAgICAgYnRjX3VzZDogQlRDX1VTRFxuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCByYXRlcyA9IHtcbiAgICAgICAgICBMQkNfVVNELFxuICAgICAgICAgIExCQ19CVEMsXG4gICAgICAgICAgQlRDX1VTRFxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlKHJhdGVzKTtcbiAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gICAgTGJyeWlvLmV4Y2hhbmdlTGFzdEZldGNoZWQgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcmV0dXJuIExicnlpby5leGNoYW5nZVByb21pc2U7XG59OyAvLyBBbGxvdyBvdmVycmlkaW5nIGxicnlpbyBtZXRob2RzXG4vLyBUaGUgZGVza3RvcCBhcHAgd2lsbCBuZWVkIHRvIHVzZSBpdCBmb3IgZ2V0QXV0aFRva2VuIGJlY2F1c2Ugd2UgdXNlIGVsZWN0cm9uJ3MgaXBjUmVuZGVyZXJcblxuXG5MYnJ5aW8ub3ZlcnJpZGVzID0ge307XG5cbkxicnlpby5zZXRPdmVycmlkZSA9IChtZXRob2ROYW1lLCBuZXdNZXRob2QpID0+IHtcbiAgTGJyeWlvLm92ZXJyaWRlc1ttZXRob2ROYW1lXSA9IG5ld01ldGhvZDtcbn07XG5cbmNvbnN0IHJld2FyZHMgPSB7fTtcbnJld2FyZHMuVFlQRV9ORVdfREVWRUxPUEVSID0gJ25ld19kZXZlbG9wZXInO1xucmV3YXJkcy5UWVBFX05FV19VU0VSID0gJ25ld191c2VyJztcbnJld2FyZHMuVFlQRV9DT05GSVJNX0VNQUlMID0gJ2VtYWlsX3Byb3ZpZGVkJztcbnJld2FyZHMuVFlQRV9GSVJTVF9DSEFOTkVMID0gJ25ld19jaGFubmVsJztcbnJld2FyZHMuVFlQRV9GSVJTVF9TVFJFQU0gPSAnZmlyc3Rfc3RyZWFtJztcbnJld2FyZHMuVFlQRV9NQU5ZX0RPV05MT0FEUyA9ICdtYW55X2Rvd25sb2Fkcyc7XG5yZXdhcmRzLlRZUEVfRklSU1RfUFVCTElTSCA9ICdmaXJzdF9wdWJsaXNoJztcbnJld2FyZHMuVFlQRV9SRUZFUlJBTCA9ICdyZWZlcnJlcic7XG5yZXdhcmRzLlRZUEVfUkVGRVJFRSA9ICdyZWZlcmVlJztcbnJld2FyZHMuVFlQRV9SRVdBUkRfQ09ERSA9ICdyZXdhcmRfY29kZSc7XG5yZXdhcmRzLlRZUEVfU1VCU0NSSVBUSU9OID0gJ3N1YnNjcmlwdGlvbic7XG5yZXdhcmRzLllPVVRVQkVfQ1JFQVRPUiA9ICd5b3V0dWJlX2NyZWF0b3InO1xucmV3YXJkcy5UWVBFX0RBSUxZX1ZJRVcgPSAnZGFpbHlfdmlldyc7XG5yZXdhcmRzLlRZUEVfTkVXX0FORFJPSUQgPSAnbmV3X2FuZHJvaWQnO1xuXG5yZXdhcmRzLmNsYWltUmV3YXJkID0gKHR5cGUsIHJld2FyZFBhcmFtcykgPT4ge1xuICBmdW5jdGlvbiByZXF1ZXN0UmV3YXJkKHJlc29sdmUsIHJlamVjdCwgcGFyYW1zKSB7XG4gICAgaWYgKCFMYnJ5aW8uZW5hYmxlZCkge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihfXygnUmV3YXJkcyBhcmUgbm90IGVuYWJsZWQuJykpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBMYnJ5aW8uY2FsbCgncmV3YXJkJywgJ2NsYWltJywgcGFyYW1zLCAncG9zdCcpLnRoZW4ocmV3YXJkID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXdhcmQucmV3YXJkX25vdGlmaWNhdGlvbiB8fCBgWW91IGhhdmUgY2xhaW1lZCBhICR7cmV3YXJkLnJld2FyZF9hbW91bnR9IExCQyByZXdhcmQuYDsgLy8gRGlzcGxheSBnbG9iYWwgbm90aWNlXG5cbiAgICAgIGNvbnN0IGFjdGlvbiA9IGxicnlSZWR1eC5kb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbGlua1RleHQ6IF9fKCdTaG93IEFsbCcpLFxuICAgICAgICBsaW5rVGFyZ2V0OiAnL3Jld2FyZHMnXG4gICAgICB9KTtcbiAgICAgIHdpbmRvdy5zdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xuXG4gICAgICBpZiAocmV3YXJkcy5jYWxsYmFja3MuY2xhaW1SZXdhcmRTdWNjZXNzKSB7XG4gICAgICAgIHJld2FyZHMuY2FsbGJhY2tzLmNsYWltUmV3YXJkU3VjY2VzcygpO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHJld2FyZCk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGJyeVJlZHV4LkxicnkuYWRkcmVzc191bnVzZWQoKS50aGVuKGFkZHJlc3MgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICByZXdhcmRfdHlwZTogdHlwZSxcbiAgICAgICAgd2FsbGV0X2FkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIC4uLnJld2FyZFBhcmFtc1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmV3YXJkcy5UWVBFX0ZJUlNUX0NIQU5ORUw6XG4gICAgICAgICAgbGJyeVJlZHV4LkxicnkuY2hhbm5lbF9saXN0KHtcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBwYWdlX3NpemU6IDEwXG4gICAgICAgICAgfSkudGhlbihjbGFpbXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhaW0gPSBjbGFpbXMuaXRlbXMgJiYgY2xhaW1zLml0ZW1zLmZpbmQoZm91bmRDbGFpbSA9PiBmb3VuZENsYWltLm5hbWUubGVuZ3RoICYmIGZvdW5kQ2xhaW0ubmFtZVswXSA9PT0gJ0AnICYmIGZvdW5kQ2xhaW0udHhpZC5sZW5ndGggJiYgZm91bmRDbGFpbS50eXBlID09PSAnY2xhaW0nKTtcblxuICAgICAgICAgICAgaWYgKGNsYWltKSB7XG4gICAgICAgICAgICAgIHBhcmFtcy50cmFuc2FjdGlvbl9pZCA9IGNsYWltLnR4aWQ7XG4gICAgICAgICAgICAgIHJlcXVlc3RSZXdhcmQocmVzb2x2ZSwgcmVqZWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihfXygnUGxlYXNlIGNyZWF0ZSBhIGNoYW5uZWwgaWRlbnRpdHkgZmlyc3QuJykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgcmV3YXJkcy5UWVBFX0ZJUlNUX1BVQkxJU0g6XG4gICAgICAgICAgbGJyeVJlZHV4Lkxicnkuc3RyZWFtX2xpc3Qoe1xuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogMTBcbiAgICAgICAgICB9KS50aGVuKGNsYWltcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGFpbSA9IGNsYWltcy5pdGVtcyAmJiBjbGFpbXMuaXRlbXMuZmluZChmb3VuZENsYWltID0+IGZvdW5kQ2xhaW0ubmFtZS5sZW5ndGggJiYgZm91bmRDbGFpbS5uYW1lWzBdICE9PSAnQCcgJiYgZm91bmRDbGFpbS50eGlkLmxlbmd0aCAmJiBmb3VuZENsYWltLnR5cGUgPT09ICdjbGFpbScpO1xuXG4gICAgICAgICAgICBpZiAoY2xhaW0pIHtcbiAgICAgICAgICAgICAgcGFyYW1zLnRyYW5zYWN0aW9uX2lkID0gY2xhaW0udHhpZDtcbiAgICAgICAgICAgICAgcmVxdWVzdFJld2FyZChyZXNvbHZlLCByZWplY3QsIHBhcmFtcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QoY2xhaW1zLmxlbmd0aCA/IG5ldyBFcnJvcihfXygnUGxlYXNlIHB1Ymxpc2ggc29tZXRoaW5nIGFuZCB3YWl0IGZvciBjb25maXJtYXRpb24gYnkgdGhlIG5ldHdvcmsgdG8gY2xhaW0gdGhpcyByZXdhcmQuJykpIDogbmV3IEVycm9yKF9fKCdQbGVhc2UgcHVibGlzaCBzb21ldGhpbmcgdG8gY2xhaW0gdGhpcyByZXdhcmQuJykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgcmV3YXJkcy5UWVBFX0ZJUlNUX1NUUkVBTTpcbiAgICAgICAgY2FzZSByZXdhcmRzLlRZUEVfTkVXX1VTRVI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVxdWVzdFJld2FyZChyZXNvbHZlLCByZWplY3QsIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxucmV3YXJkcy5jYWxsYmFja3MgPSB7XG4gIC8vIFNldCBhbnkgY2FsbGJhY2tzIHRoYXQgcmVxdWlyZSBjb2RlIG5vdCBmb3VuZCBpbiB0aGlzIHByb2plY3RcbiAgY2xhaW1SZXdhcmRTdWNjZXNzOiBudWxsLFxuICBjbGFpbUZpcnN0UmV3YXJkU3VjY2VzczogbnVsbCxcbiAgcmV3YXJkQXBwcm92YWxSZXF1aXJlZDogbnVsbFxufTtcblxucmV3YXJkcy5zZXRDYWxsYmFjayA9IChuYW1lLCBtZXRob2QpID0+IHtcbiAgcmV3YXJkcy5jYWxsYmFja3NbbmFtZV0gPSBtZXRob2Q7XG59O1xuXG5jb25zdCBWSUVXX0FMTCA9ICd2aWV3X2FsbCc7XG5cbmNvbnN0IERPV05MT0FESU5HID0gJ0RPV05MT0FESU5HJztcbmNvbnN0IE5PVElGWV9PTkxZID0gJ05PVElGWV9PTkxZOyc7IC8vIFN1Z2dlc3RlZCB0eXBlc1xuY29uc3QgU1VHR0VTVEVEX1RPUF9TVUJTQ1JJQkVEID0gJ3RvcF9zdWJzY3JpYmVkJztcbmNvbnN0IFNVR0dFU1RFRF9GRUFUVVJFRCA9ICdmZWF0dXJlZCc7XG5cbi8vIHV0aWwgZm9yIGNyZWF0aW5nIHJlZHVjZXJzXG4vLyBiYXNlZCBvZmYgb2YgcmVkdXgtYWN0aW9uc1xuLy8gaHR0cHM6Ly9yZWR1eC1hY3Rpb25zLmpzLm9yZy9kb2NzL2FwaS9oYW5kbGVBY3Rpb24uaHRtbCNoYW5kbGVhY3Rpb25zXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuY29uc3QgaGFuZGxlQWN0aW9ucyA9IChhY3Rpb25NYXAsIGRlZmF1bHRTdGF0ZSkgPT4gKHN0YXRlID0gZGVmYXVsdFN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IGFjdGlvbk1hcFthY3Rpb24udHlwZV07XG5cbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXdTdGF0ZSk7XG4gIH0gLy8ganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGhhbmRsZXJcbiAgLy8gcmV0dXJuaW5nIGEgY29weSBoZXJlIGJyZWFrcyByZWR1eC1wZXJzaXN0XG5cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vLyAgICAgIFxuY29uc3QgZGVmYXVsdFN0YXRlID0ge1xuICBlbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnM6IFtdLFxuICBzdWJzY3JpcHRpb25zOiBbXSxcbiAgbGF0ZXN0OiB7fSxcbiAgdW5yZWFkOiB7fSxcbiAgc3VnZ2VzdGVkOiB7fSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIHZpZXdNb2RlOiBWSUVXX0FMTCxcbiAgbG9hZGluZ1N1Z2dlc3RlZDogZmFsc2UsXG4gIGZpcnN0UnVuQ29tcGxldGVkOiBmYWxzZSxcbiAgc2hvd1N1Z2dlc3RlZFN1YnM6IGZhbHNlXG59O1xudmFyIHN1YnNjcmlwdGlvbnMgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0NIQU5ORUxfU1VCU0NSSUJFXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBuZXdTdWJzY3JpcHRpb24gPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBuZXdTdWJzY3JpcHRpb25zID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5zbGljZSgpO1xuXG4gICAgaWYgKCFuZXdTdWJzY3JpcHRpb25zLnNvbWUoc3ViID0+IHN1Yi51cmkgPT09IG5ld1N1YnNjcmlwdGlvbi51cmkpKSB7XG4gICAgICBuZXdTdWJzY3JpcHRpb25zLnVuc2hpZnQobmV3U3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IG5ld1N1YnNjcmlwdGlvbnNcbiAgICB9O1xuICB9LFxuICBbQ0hBTk5FTF9VTlNVQlNDUklCRV06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uVG9SZW1vdmUgPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBuZXdTdWJzY3JpcHRpb25zID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5zbGljZSgpLmZpbHRlcihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLmNoYW5uZWxOYW1lICE9PSBzdWJzY3JpcHRpb25Ub1JlbW92ZS5jaGFubmVsTmFtZSk7IC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlICd1bnJlYWQnIHN0YXRlXG5cbiAgICBjb25zdCB7XG4gICAgICB1bnJlYWRcbiAgICB9ID0gc3RhdGU7XG5cbiAgICBpZiAodW5yZWFkW3N1YnNjcmlwdGlvblRvUmVtb3ZlLnVyaV0pIHtcbiAgICAgIGRlbGV0ZSB1bnJlYWRbc3Vic2NyaXB0aW9uVG9SZW1vdmUudXJpXTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIHVucmVhZDogeyAuLi51bnJlYWRcbiAgICAgIH0sXG4gICAgICBzdWJzY3JpcHRpb25zOiBuZXdTdWJzY3JpcHRpb25zXG4gICAgfTtcbiAgfSxcbiAgW1NFVF9TVUJTQ1JJUFRJT05fTEFURVNUXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICB1cmlcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3TGF0ZXN0ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUubGF0ZXN0KTtcbiAgICBuZXdMYXRlc3Rbc3Vic2NyaXB0aW9uLnVyaV0gPSB1cmk7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBsYXRlc3Q6IG5ld0xhdGVzdFxuICAgIH07XG4gIH0sXG4gIFtVUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFNdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICB1cmlzLFxuICAgICAgdHlwZVxuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIHVucmVhZDogeyAuLi5zdGF0ZS51bnJlYWQsXG4gICAgICAgIFtjaGFubmVsXToge1xuICAgICAgICAgIHVyaXMsXG4gICAgICAgICAgdHlwZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgW1JFTU9WRV9TVUJTQ1JJUFRJT05fVU5SRUFEU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hhbm5lbCxcbiAgICAgIHVyaXNcbiAgICB9ID0gYWN0aW9uLmRhdGE7IC8vIElmIG5vIGNoYW5uZWwgaXMgcGFzc2VkIGluLCByZW1vdmUgYWxsIHVucmVhZHNcblxuICAgIGxldCBuZXdVbnJlYWQ7XG5cbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgbmV3VW5yZWFkID0geyAuLi5zdGF0ZS51bnJlYWRcbiAgICAgIH07XG5cbiAgICAgIGlmICghdXJpcykge1xuICAgICAgICBkZWxldGUgbmV3VW5yZWFkW2NoYW5uZWxdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VW5yZWFkW2NoYW5uZWxdLnVyaXMgPSB1cmlzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdVbnJlYWQgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIHVucmVhZDogeyAuLi5uZXdVbnJlYWRcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBbQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRU5BQkxFX05PVElGSUNBVElPTlNdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IGNoYW5uZWxOYW1lID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zID0gc3RhdGUuZW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zLnNsaWNlKCk7XG5cbiAgICBpZiAoY2hhbm5lbE5hbWUgJiYgY2hhbm5lbE5hbWUudHJpbSgpLmxlbmd0aCA+IDAgJiYgbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zLmluZGV4T2YoY2hhbm5lbE5hbWUpID09PSAtMSkge1xuICAgICAgbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zLnB1c2goY2hhbm5lbE5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zOiBuZXdFbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnNcbiAgICB9O1xuICB9LFxuICBbQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRElTQUJMRV9OT1RJRklDQVRJT05TXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucyA9IHN0YXRlLmVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5zbGljZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zLmluZGV4T2YoY2hhbm5lbE5hbWUpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zOiBuZXdFbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnNcbiAgICB9O1xuICB9LFxuICBbRkVUQ0hfU1VCU0NSSVBUSU9OU19TVEFSVF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGxvYWRpbmc6IHRydWVcbiAgfSksXG4gIFtGRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUxdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nOiBmYWxzZVxuICB9KSxcbiAgW0ZFVENIX1NVQlNDUklQVElPTlNfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICBzdWJzY3JpcHRpb25zOiBhY3Rpb24uZGF0YVxuICB9KSxcbiAgW1NFVF9WSUVXX01PREVdOiAoc3RhdGUsIGFjdGlvbikgPT4gKHsgLi4uc3RhdGUsXG4gICAgdmlld01vZGU6IGFjdGlvbi5kYXRhXG4gIH0pLFxuICBbR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NUQVJUXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgbG9hZGluZ1N1Z2dlc3RlZDogdHJ1ZVxuICB9KSxcbiAgW0dFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTXTogKHN0YXRlLCBhY3Rpb24pID0+ICh7IC4uLnN0YXRlLFxuICAgIHN1Z2dlc3RlZDogYWN0aW9uLmRhdGEsXG4gICAgbG9hZGluZ1N1Z2dlc3RlZDogZmFsc2VcbiAgfSksXG4gIFtHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfRkFJTF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IGZhbHNlXG4gIH0pLFxuICBbU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURURdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBmaXJzdFJ1bkNvbXBsZXRlZDogdHJ1ZVxuICB9KSxcbiAgW1ZJRVdfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBzaG93U3VnZ2VzdGVkU3ViczogdHJ1ZVxuICB9KSxcbiAgW2xicnlSZWR1eC5BQ1RJT05TLlVTRVJfU1RBVEVfUE9QVUxBVEVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHN1YnNjcmlwdGlvbnNcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgbGV0IG5ld1N1YnNjcmlwdGlvbnM7XG5cbiAgICBpZiAoIXN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIG5ld1N1YnNjcmlwdGlvbnMgPSBzdGF0ZS5zdWJzY3JpcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJzZWRTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5tYXAodXJpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgIH0gPSBsYnJ5UmVkdXgucGFyc2VVUkkodXJpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1cmksXG4gICAgICAgICAgY2hhbm5lbE5hbWU6IGBAJHtjaGFubmVsTmFtZX1gXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFzdGF0ZS5zdWJzY3JpcHRpb25zIHx8ICFzdGF0ZS5zdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBuZXdTdWJzY3JpcHRpb25zID0gcGFyc2VkU3Vic2NyaXB0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgICAgICBuZXdTdWJzY3JpcHRpb25zID0gcGFyc2VkU3Vic2NyaXB0aW9ucy5jb25jYXQoc3RhdGUuc3Vic2NyaXB0aW9ucykuZmlsdGVyKHN1YiA9PiB7XG4gICAgICAgICAgcmV0dXJuIG1hcFtzdWIudXJpXSA/IGZhbHNlIDogbWFwW3N1Yi51cmldID0gdHJ1ZTtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgc3Vic2NyaXB0aW9uczogbmV3U3Vic2NyaXB0aW9uc1xuICAgIH07XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSk7XG5cbmZ1bmN0aW9uIHN3YXBLZXlBbmRWYWx1ZShkaWN0KSB7XG4gIGNvbnN0IHJldCA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuICBmb3IgKGNvbnN0IGtleSBpbiBkaWN0KSB7XG4gICAgaWYgKGRpY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0W2RpY3Rba2V5XV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuY29uc3Qgc2VsZWN0U3RhdGUgPSBzdGF0ZSA9PiBzdGF0ZS5zdWJzY3JpcHRpb25zIHx8IHt9OyAvLyBSZXR1cm5zIHRoZSBsaXN0IG9mIGNoYW5uZWwgdXJpcyBhIHVzZXIgaXMgc3Vic2NyaWJlZCB0b1xuXG5cbmNvbnN0IHNlbGVjdFN1YnNjcmlwdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuc3Vic2NyaXB0aW9ucyk7IC8vIEZldGNoaW5nIGxpc3Qgb2YgdXNlcnMgc3Vic2NyaXB0aW9uc1xuXG5jb25zdCBzZWxlY3RJc0ZldGNoaW5nU3Vic2NyaXB0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5sb2FkaW5nKTsgLy8gVGhlIGN1cnJlbnQgdmlldyBtb2RlIG9uIHRoZSBzdWJzY3JpcHRpb25zIHBhZ2VcblxuY29uc3Qgc2VsZWN0Vmlld01vZGUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUudmlld01vZGUpOyAvLyBTdWdnZXN0ZWQgc3Vic2NyaXB0aW9ucyBmcm9tIGludGVybmFsIGFwaXNcblxuY29uc3Qgc2VsZWN0U3VnZ2VzdGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnN1Z2dlc3RlZCk7XG5jb25zdCBzZWxlY3RJc0ZldGNoaW5nU3VnZ2VzdGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLmxvYWRpbmdTdWdnZXN0ZWQpO1xuY29uc3Qgc2VsZWN0U3VnZ2VzdGVkQ2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdWJzY3JpcHRpb25zLCBzZWxlY3RTdWdnZXN0ZWQsICh1c2VyU3Vic2NyaXB0aW9ucywgc3VnZ2VzdGVkKSA9PiB7XG4gIGlmICghc3VnZ2VzdGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gU3dhcCB0aGUga2V5L3ZhbHVlIGJlY2F1c2Ugd2Ugd2lsbCB1c2UgdGhlIHVyaSBmb3IgZXZlcnl0aGluZywgdGhpcyBqdXN0IG1ha2VzIGl0IGVhc2llclxuICAvLyBzdWdnZXN0ZWQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYXBpIHdpdGggdGhlIGZvcm06XG4gIC8vIHtcbiAgLy8gICBmZWF0dXJlZDogeyBcIkNoYW5uZWwgbGFiZWxcIjogdXJpLCAuLi4gfSxcbiAgLy8gICB0b3Bfc3Vic2NyaWJlZDogeyBcIkBjaGFubmVsXCI6IHVyaSwgLi4uIH1cbiAgLy8gICB0b3BfYmlkOiB7IFwiQGNoYW5uZWxcIjogdXJpLCAuLi4gfVxuICAvLyB9XG4gIC8vIFRvIHByb3Blcmx5IGNvbXBhcmUgdGhlIHN1Z2dlc3RlZCBzdWJzY3JpcHRpb25zIGZyb20gb3VyIGN1cnJlbnQgc3Vic2NyaWJlZCBjaGFubmVsc1xuICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHVyaSwgbm90IHRoZSBsYWJlbFxuICAvLyBXZSBhbHNvIG9ubHkgY2FyZSBhYm91dCB0b3Bfc3Vic2NyaWJlZCBhbmQgZmVhdHVyZWRcbiAgLy8gdG9wX2JpZCBjb3VsZCBqdXN0IGJlIHBvcm4gb3IgYSBjaGFubmVsIHdpdGggbm8gY29udGVudFxuXG5cbiAgY29uc3QgdG9wU3Vic2NyaWJlZFN1Z2dlc3Rpb25zID0gc3dhcEtleUFuZFZhbHVlKHN1Z2dlc3RlZFtTVUdHRVNURURfVE9QX1NVQlNDUklCRURdKTtcbiAgY29uc3QgZmVhdHVyZWRTdWdnZXN0aW9ucyA9IHN3YXBLZXlBbmRWYWx1ZShzdWdnZXN0ZWRbU1VHR0VTVEVEX0ZFQVRVUkVEXSk7IC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlc1xuICAvLyBJZiBhIHVyaSBpc24ndCBhbHJlYWR5IGluIHRoZSBzdWdnZXN0ZWQgb2JqZWN0LCBhZGQgaXRcblxuICBjb25zdCBzdWdnZXN0ZWRDaGFubmVscyA9IHsgLi4udG9wU3Vic2NyaWJlZFN1Z2dlc3Rpb25zXG4gIH07XG4gIE9iamVjdC5rZXlzKGZlYXR1cmVkU3VnZ2VzdGlvbnMpLmZvckVhY2godXJpID0+IHtcbiAgICBpZiAoIXN1Z2dlc3RlZENoYW5uZWxzW3VyaV0pIHtcbiAgICAgIGNvbnN0IGNoYW5uZWxMYWJlbCA9IGZlYXR1cmVkU3VnZ2VzdGlvbnNbdXJpXTtcbiAgICAgIHN1Z2dlc3RlZENoYW5uZWxzW3VyaV0gPSBjaGFubmVsTGFiZWw7XG4gICAgfVxuICB9KTtcbiAgdXNlclN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoe1xuICAgIHVyaVxuICB9KSA9PiB7XG4gICAgLy8gTm90ZSB0byBwYXNzZXIgYnlzOlxuICAgIC8vIE1heWJlIHdlIHNob3VsZCBqdXN0IHJlbW92ZSB0aGUgYGxicnk6Ly9gIHByZWZpeCBmcm9tIHN1YnNjcmlwdGlvbiB1cmlzXG4gICAgLy8gTW9zdCBwbGFjZXMgZG9uJ3Qgc3RvcmUgdGhlbSBsaWtlIHRoYXRcbiAgICBjb25zdCBzdWJzY3JpYmVkVXJpID0gdXJpLnNsaWNlKCdsYnJ5Oi8vJy5sZW5ndGgpO1xuXG4gICAgaWYgKHN1Z2dlc3RlZENoYW5uZWxzW3N1YnNjcmliZWRVcmldKSB7XG4gICAgICBkZWxldGUgc3VnZ2VzdGVkQ2hhbm5lbHNbc3Vic2NyaWJlZFVyaV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN1Z2dlc3RlZENoYW5uZWxzKS5tYXAodXJpID0+ICh7XG4gICAgdXJpLFxuICAgIGxhYmVsOiBzdWdnZXN0ZWRDaGFubmVsc1t1cmldXG4gIH0pKS5zbGljZSgwLCA1KTtcbn0pO1xuY29uc3Qgc2VsZWN0Rmlyc3RSdW5Db21wbGV0ZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuZmlyc3RSdW5Db21wbGV0ZWQpO1xuY29uc3Qgc2VsZWN0U2hvd1N1Z2dlc3RlZFN1YnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuc2hvd1N1Z2dlc3RlZFN1YnMpOyAvLyBGZXRjaGluZyBhbnkgY2xhaW1zIHRoYXQgYXJlIGEgcGFydCBvZiBhIHVzZXJzIHN1YnNjcmlwdGlvbnNcblxuY29uc3Qgc2VsZWN0U3Vic2NyaXB0aW9uc0JlaW5nRmV0Y2hlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN1YnNjcmlwdGlvbnMsIGxicnlSZWR1eC5zZWxlY3RBbGxGZXRjaGluZ0NoYW5uZWxDbGFpbXMsIChzdWJzY3JpcHRpb25zLCBmZXRjaGluZ0NoYW5uZWxDbGFpbXMpID0+IHtcbiAgY29uc3QgZmV0Y2hpbmdTdWJzY3JpcHRpb25NYXAgPSB7fTtcbiAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgY29uc3QgaXNGZXRjaGluZyA9IGZldGNoaW5nQ2hhbm5lbENsYWltcyAmJiBmZXRjaGluZ0NoYW5uZWxDbGFpbXNbc3ViLnVyaV07XG5cbiAgICBpZiAoaXNGZXRjaGluZykge1xuICAgICAgZmV0Y2hpbmdTdWJzY3JpcHRpb25NYXBbc3ViLnVyaV0gPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmZXRjaGluZ1N1YnNjcmlwdGlvbk1hcDtcbn0pO1xuY29uc3Qgc2VsZWN0VW5yZWFkQnlDaGFubmVsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnVucmVhZCk7IC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdG90YWwgb2YgdW5yZWFkIHN1YnNjcmlwdGlvbnNcblxuY29uc3Qgc2VsZWN0VW5yZWFkQW1vdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VW5yZWFkQnlDaGFubmVsLCB1bnJlYWRCeUNoYW5uZWwgPT4ge1xuICBjb25zdCB1bnJlYWRDaGFubmVscyA9IE9iamVjdC5rZXlzKHVucmVhZEJ5Q2hhbm5lbCk7XG4gIGxldCBiYWRnZXMgPSAwO1xuXG4gIGlmICghdW5yZWFkQ2hhbm5lbHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhZGdlcztcbiAgfVxuXG4gIHVucmVhZENoYW5uZWxzLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgYmFkZ2VzICs9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsXS51cmlzLmxlbmd0aDtcbiAgfSk7XG4gIHJldHVybiBiYWRnZXM7XG59KTsgLy8gUmV0dXJucyB0aGUgdXJpcyB3aXRoIGNoYW5uZWxzIGFzIGFuIGFycmF5IHdpdGggdGhlIGNoYW5uZWwgd2l0aCB0aGUgbmV3ZXN0IGNvbnRlbnQgZmlyc3Rcbi8vIElmIHlvdSBqdXN0IHdhbnQgdGhlIGB1bnJlYWRgIHN0YXRlLCB1c2Ugc2VsZWN0VW5yZWFkXG5cbmNvbnN0IHNlbGVjdFVucmVhZFN1YnNjcmlwdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVbnJlYWRBbW91bnQsIHNlbGVjdFVucmVhZEJ5Q2hhbm5lbCwgbGJyeVJlZHV4LnNlbGVjdENsYWltc0J5VXJpLCAodW5yZWFkQW1vdW50LCB1bnJlYWRCeUNoYW5uZWwsIGNsYWltc0J5VXJpKSA9PiB7XG4gIC8vIGRldGVybWluZSB3aGljaCBjaGFubmVsIGhhcyB0aGUgbmV3ZXN0IGNvbnRlbnRcbiAgY29uc3QgdW5yZWFkTGlzdCA9IFtdO1xuXG4gIGlmICghdW5yZWFkQW1vdW50KSB7XG4gICAgcmV0dXJuIHVucmVhZExpc3Q7XG4gIH1cblxuICBjb25zdCBjaGFubmVsVXJpTGlzdCA9IE9iamVjdC5rZXlzKHVucmVhZEJ5Q2hhbm5lbCk7IC8vIFRoZXJlIGlzIG9ubHkgb25lIGNoYW5uZWwgd2l0aCB1bnJlYWQgbm90aWZpY2F0aW9uc1xuXG4gIGlmICh1bnJlYWRBbW91bnQgPT09IDEpIHtcbiAgICBjaGFubmVsVXJpTGlzdC5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3QgdW5yZWFkQ2hhbm5lbCA9IHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdXJpczogdW5yZWFkQnlDaGFubmVsW2NoYW5uZWxdLnVyaXNcbiAgICAgIH07XG4gICAgICB1bnJlYWRMaXN0LnB1c2godW5yZWFkQ2hhbm5lbCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVucmVhZExpc3Q7XG4gIH1cblxuICBjaGFubmVsVXJpTGlzdC5zb3J0KChjaGFubmVsMSwgY2hhbm5lbDIpID0+IHtcbiAgICBjb25zdCBsYXRlc3RVcmlGcm9tQ2hhbm5lbDEgPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbDFdLnVyaXNbMF07XG4gICAgY29uc3QgbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDEgPSBjbGFpbXNCeVVyaVtsYXRlc3RVcmlGcm9tQ2hhbm5lbDFdIHx8IHt9O1xuICAgIGNvbnN0IGxhdGVzdFVyaUZyb21DaGFubmVsMiA9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsMl0udXJpc1swXTtcbiAgICBjb25zdCBsYXRlc3RDbGFpbUZyb21DaGFubmVsMiA9IGNsYWltc0J5VXJpW2xhdGVzdFVyaUZyb21DaGFubmVsMl0gfHwge307XG4gICAgY29uc3QgbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwxID0gbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDEuaGVpZ2h0IHx8IDA7XG4gICAgY29uc3QgbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwyID0gbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDIuaGVpZ2h0IHx8IDA7XG5cbiAgICBpZiAobGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwxICE9PSBsYXRlc3RIZWlnaHRGcm9tQ2hhbm5lbDIpIHtcbiAgICAgIHJldHVybiBsYXRlc3RIZWlnaHRGcm9tQ2hhbm5lbDIgLSBsYXRlc3RIZWlnaHRGcm9tQ2hhbm5lbDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgY29uc3QgdW5yZWFkU3Vic2NyaXB0aW9uID0gdW5yZWFkQnlDaGFubmVsW2NoYW5uZWxdO1xuICAgIGNvbnN0IHVucmVhZENoYW5uZWwgPSB7XG4gICAgICBjaGFubmVsLFxuICAgICAgdXJpczogdW5yZWFkU3Vic2NyaXB0aW9uLnVyaXNcbiAgICB9O1xuICAgIHVucmVhZExpc3QucHVzaCh1bnJlYWRDaGFubmVsKTtcbiAgfSk7XG4gIHJldHVybiB1bnJlYWRMaXN0O1xufSk7IC8vIFJldHVybnMgYWxsIHVucmVhZCBzdWJzY3JpcHRpb25zIGZvciBhIHVyaSBwYXNzZWQgaW5cblxuY29uc3QgbWFrZVNlbGVjdFVucmVhZEJ5Q2hhbm5lbCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVbnJlYWRCeUNoYW5uZWwsIHVucmVhZCA9PiB1bnJlYWRbdXJpXSk7IC8vIFJldHVybnMgdGhlIGZpcnN0IHBhZ2Ugb2YgY2xhaW1zIGZvciBldmVyeSBjaGFubmVsIGEgdXNlciBpcyBzdWJzY3JpYmVkIHRvXG5cbmNvbnN0IHNlbGVjdFN1YnNjcmlwdGlvbkNsYWltcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKGxicnlSZWR1eC5zZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwsIGxicnlSZWR1eC5zZWxlY3RDbGFpbXNCeUlkLCBzZWxlY3RTdWJzY3JpcHRpb25zLCBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsIChjaGFubmVsSWRzLCBhbGxDbGFpbXMsIHNhdmVkU3Vic2NyaXB0aW9ucywgdW5yZWFkQnlDaGFubmVsKSA9PiB7XG4gIC8vIG5vIGNsYWltcyBsb2FkZWQgeWV0XG4gIGlmICghT2JqZWN0LmtleXMoY2hhbm5lbElkcykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IGZldGNoZWRTdWJzY3JpcHRpb25zID0gW107XG4gIHNhdmVkU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgbGV0IGNoYW5uZWxDbGFpbXMgPSBbXTsgLy8gaWYgc3Vic2NyaWJlZCBjaGFubmVsIGhhcyBjb250ZW50XG5cbiAgICBpZiAoY2hhbm5lbElkc1tzdWJzY3JpcHRpb24udXJpXSAmJiBjaGFubmVsSWRzW3N1YnNjcmlwdGlvbi51cmldWycxJ10pIHtcbiAgICAgIC8vIFRoaXMgd2lsbCBuZWVkIHRvIGJlIG1vcmUgcm9idXN0LCB3ZSB3aWxsIHdhbnQgdG8gYmUgYWJsZSB0byBsb2FkIG1vcmUgdGhhbiB0aGUgZmlyc3QgcGFnZVxuICAgICAgLy8gU3RyaXAgb3V0IGFueSBpZHMgdGhhdCB3aWxsIGJlIHNob3duIGFzIG5vdGlmaWNhdGlvbnNcbiAgICAgIGNvbnN0IHBhZ2VPbmVDaGFubmVsSWRzID0gY2hhbm5lbElkc1tzdWJzY3JpcHRpb24udXJpXVsnMSddOyAvLyB3ZSBoYXZlIHRoZSBjaGFubmVsIGlkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2xhaW1zXG4gICAgICAvLyBsb29wIG92ZXIgdGhlIGxpc3Qgb2YgaWRzIGFuZCBncmFiIHRoZSBjbGFpbVxuXG4gICAgICBwYWdlT25lQ2hhbm5lbElkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgY29uc3QgZ3JhYmJlZENsYWltID0gYWxsQ2xhaW1zW2lkXTtcblxuICAgICAgICBpZiAodW5yZWFkQnlDaGFubmVsW3N1YnNjcmlwdGlvbi51cmldICYmIHVucmVhZEJ5Q2hhbm5lbFtzdWJzY3JpcHRpb24udXJpXS51cmlzLnNvbWUodXJpID0+IHVyaS5pbmNsdWRlcyhpZCkpKSB7XG4gICAgICAgICAgZ3JhYmJlZENsYWltLmlzTmV3ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5uZWxDbGFpbXMgPSBjaGFubmVsQ2xhaW1zLmNvbmNhdChbZ3JhYmJlZENsYWltXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaGVkU3Vic2NyaXB0aW9ucyA9IGZldGNoZWRTdWJzY3JpcHRpb25zLmNvbmNhdChjaGFubmVsQ2xhaW1zKTtcbiAgfSk7XG4gIHJldHVybiBmZXRjaGVkU3Vic2NyaXB0aW9ucztcbn0pOyAvLyBSZXR1cm5zIHRydWUgaWYgYSB1c2VyIGlzIHN1YnNjcmliZWQgdG8gdGhlIGNoYW5uZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cmkgcGFzc2VkIGluXG4vLyBBY2NlcHRzIGNvbnRlbnQgb3IgY2hhbm5lbCB1cmlzXG5cbmNvbnN0IG1ha2VTZWxlY3RJc1N1YnNjcmliZWQgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3Vic2NyaXB0aW9ucywgbGJyeVJlZHV4Lm1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmkodXJpLCB0cnVlKSwgKHN1YnNjcmlwdGlvbnMsIGNoYW5uZWxVcmkpID0+IHtcbiAgaWYgKGNoYW5uZWxVcmkpIHtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9ucy5zb21lKHN1YiA9PiBzdWIudXJpID09PSBjaGFubmVsVXJpKTtcbiAgfSAvLyBJZiB3ZSBjb3VsZG4ndCBnZXQgYSBjaGFubmVsIHVyaSBmcm9tIHRoZSBjbGFpbSB1cmksIHRoZSB1cmkgcGFzc2VkIGluIG1pZ2h0IGJlIGEgY2hhbm5lbCBhbHJlYWR5XG5cblxuICBjb25zdCB7XG4gICAgaXNDaGFubmVsXG4gIH0gPSBsYnJ5UmVkdXgucGFyc2VVUkkodXJpKTtcblxuICBpZiAoaXNDaGFubmVsKSB7XG4gICAgY29uc3QgdXJpV2l0aFByZWZpeCA9IHVyaS5zdGFydHNXaXRoKCdsYnJ5Oi8vJykgPyB1cmkgOiBgbGJyeTovLyR7dXJpfWA7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbnMuc29tZShzdWIgPT4gc3ViLnVyaSA9PT0gdXJpV2l0aFByZWZpeCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59KTtcbmNvbnN0IG1ha2VTZWxlY3RJc05ldyA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0SXNTdWJzY3JpYmVkKHVyaSksIGxicnlSZWR1eC5tYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpKHVyaSksIHNlbGVjdFVucmVhZEJ5Q2hhbm5lbCwgKGlzU3Vic2NyaWJlZCwgY2hhbm5lbCwgdW5yZWFkQnlDaGFubmVsKSA9PiB7XG4gIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdW5yZWFkRm9yQ2hhbm5lbCA9IHVucmVhZEJ5Q2hhbm5lbFtgbGJyeTovLyR7Y2hhbm5lbH1gXTtcblxuICBpZiAodW5yZWFkRm9yQ2hhbm5lbCkge1xuICAgIHJldHVybiB1bnJlYWRGb3JDaGFubmVsLnVyaXMuaW5jbHVkZXModXJpKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTsgLy8gSWYgdGhleSBhcmUgc3Vic2NyaWJlZCwgY2hlY2sgdG8gc2VlIGlmIHRoaXMgdXJpIGlzIGluIHRoZSBsaXN0IG9mIHVucmVhZHNcbn0pO1xuY29uc3Qgc2VsZWN0RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLmVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucyk7XG5cbmNvbnN0IHBlcnNpc3RTaGFwZSA9IHtcbiAgdmVyc2lvbjogJzAnLFxuICBzaGFyZWQ6IHt9XG59O1xuZnVuY3Rpb24gdXNlclN0YXRlU3luY01pZGRsZXdhcmUoKSB7XG4gIHJldHVybiAoe1xuICAgIGdldFN0YXRlXG4gIH0pID0+IG5leHQgPT4gYWN0aW9uID0+IHtcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IENIQU5ORUxfU1VCU0NSSUJFIHx8IGFjdGlvbi50eXBlID09PSBDSEFOTkVMX1VOU1VCU0NSSUJFIHx8IGFjdGlvbi50eXBlID09PSBsYnJ5UmVkdXguQUNUSU9OUy5UT0dHTEVfVEFHX0ZPTExPVykge1xuICAgICAgY29uc3QgbmV3U2hhcGUgPSB7IC4uLnBlcnNpc3RTaGFwZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBzZWxlY3RTdWJzY3JpcHRpb25zKHN0YXRlKS5tYXAoKHtcbiAgICAgICAgdXJpXG4gICAgICB9KSA9PiB1cmkpO1xuICAgICAgY29uc3QgdGFncyA9IGxicnlSZWR1eC5zZWxlY3RGb2xsb3dlZFRhZ3Moc3RhdGUpO1xuICAgICAgbmV3U2hhcGUuc2hhcmVkLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zO1xuICAgICAgbmV3U2hhcGUuc2hhcmVkLnRhZ3MgPSB0YWdzO1xuICAgICAgY29uc3Qge1xuICAgICAgICB1cmlcbiAgICAgIH0gPSBhY3Rpb24uZGF0YTtcblxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBDSEFOTkVMX1NVQlNDUklCRSkge1xuICAgICAgICBjb25zdCBuZXdTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5zbGljZSgpO1xuICAgICAgICBuZXdTdWJzY3JpcHRpb25zLnB1c2godXJpKTtcbiAgICAgICAgbmV3U2hhcGUuc2hhcmVkLnN1YnNjcmlwdGlvbnMgPSBuZXdTdWJzY3JpcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gQ0hBTk5FTF9VTlNVQlNDUklCRSkge1xuICAgICAgICBsZXQgbmV3U3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMuc2xpY2UoKTtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucyA9IG5ld1N1YnNjcmlwdGlvbnMuZmlsdGVyKHN1YnNjcmliZWRVcmkgPT4gc3Vic2NyaWJlZFVyaSAhPT0gdXJpKTtcbiAgICAgICAgbmV3U2hhcGUuc2hhcmVkLnN1YnNjcmlwdGlvbnMgPSBuZXdTdWJzY3JpcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG9nZ2xlZFRhZyA9IGFjdGlvbi5kYXRhLm5hbWU7XG4gICAgICAgIGNvbnN0IGZvbGxvd2VkVGFncyA9IGxicnlSZWR1eC5zZWxlY3RGb2xsb3dlZFRhZ3Moc3RhdGUpLm1hcCgoe1xuICAgICAgICAgIG5hbWVcbiAgICAgICAgfSkgPT4gbmFtZSk7XG4gICAgICAgIGNvbnN0IGlzRm9sbG93aW5nID0gbGJyeVJlZHV4Lm1ha2VTZWxlY3RJc0ZvbGxvd2luZ1RhZyh0b2dnbGVkVGFnKShzdGF0ZSk7XG4gICAgICAgIGxldCBuZXdUYWdzID0gZm9sbG93ZWRUYWdzLnNsaWNlKCk7XG5cbiAgICAgICAgaWYgKGlzRm9sbG93aW5nKSB7XG4gICAgICAgICAgbmV3VGFncyA9IG5ld1RhZ3MuZmlsdGVyKGZvbGxvd2VkVGFnID0+IGZvbGxvd2VkVGFnLm5hbWUgIT09IHRvZ2dsZWRUYWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1RhZ3MucHVzaCh0b2dnbGVkVGFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1NoYXBlLnNoYXJlZC50YWdzID0gbmV3VGFncztcbiAgICAgIH1cblxuICAgICAgTGJyeWlvLmNhbGwoJ3VzZXJfc2V0dGluZ3MnLCAnc2V0Jywge1xuICAgICAgICBzZXR0aW5nczogbmV3U2hhcGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gIH07XG59XG5cbmNvbnN0IGFwaUJhc2VVcmwgPSAnaHR0cHM6Ly93d3cudHJhbnNpZmV4LmNvbS9hcGkvMi9wcm9qZWN0JztcbmNvbnN0IHJlc291cmNlID0gJ2FwcC1zdHJpbmdzJztcbmZ1bmN0aW9uIGRvVHJhbnNpZmV4VXBsb2FkKGNvbnRlbnRzLCBwcm9qZWN0LCB0b2tlbiwgc3VjY2VzcywgZmFpbCkge1xuICBjb25zdCB1cmwgPSBgJHthcGlCYXNlVXJsfS8ke3Byb2plY3R9L3Jlc291cmNlcy9gO1xuICBjb25zdCB1cGRhdGVVcmwgPSBgJHthcGlCYXNlVXJsfS8ke3Byb2plY3R9L3Jlc291cmNlLyR7cmVzb3VyY2V9L2NvbnRlbnQvYDtcbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYXBpOiR7dG9rZW59YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICB9O1xuICBjb25zdCByZXEgPSB7XG4gICAgYWNjZXB0X3RyYW5zbGF0aW9uczogdHJ1ZSxcbiAgICBpMThuX3R5cGU6ICdLRVlWQUxVRUpTT04nLFxuICAgIG5hbWU6IHJlc291cmNlLFxuICAgIHNsdWc6IHJlc291cmNlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRzXG4gIH07XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UodGV4dCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIHRyYW5zaWZleCBhcGkgcmV0dXJucyBQeXRob24gZGljdHMgZm9yIHNvbWUgcmVhc29uLlxuICAgICAgLy8gQW55IHdheSB0byBnZXQgdGhlIGFwaSB0byByZXR1cm4gdmFsaWQgSlNPTj9cbiAgICAgIGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGUpIHsvLyBpZ25vcmVcbiAgICB9XG5cbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2Vzcyhqc29uIHx8IHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycikge1xuICAgIGlmIChmYWlsKSB7XG4gICAgICBmYWlsKGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiAnQ291bGQgbm90IHVwbG9hZCBzdHJpbmdzIHJlc291cmNlIHRvIFRyYW5zaWZleCcpO1xuICAgIH1cbiAgfSAvLyBjaGVjayBpZiB0aGUgcmVzb3VyY2UgZXhpc3RzXG5cblxuICBmZXRjaCh1cGRhdGVVcmwsIHtcbiAgICBoZWFkZXJzXG4gIH0pLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKS50aGVuKCgpID0+IHtcbiAgICAvLyBwZXJmb3JtIGFuIHVwZGF0ZVxuICAgIGZldGNoKHVwZGF0ZVVybCwge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRzXG4gICAgICB9KVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwZGF0ZSB0cmFuc2lmZXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICB9KS50aGVuKGhhbmRsZVJlc3BvbnNlKS5jYXRjaChoYW5kbGVFcnJvcik7XG4gIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyByZXNvdXJjZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgYSBmcmVzaCByZXNvdXJjZVxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxKVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCB0byB0cmFuc2lmZXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICB9KS50aGVuKGhhbmRsZVJlc3BvbnNlKS5jYXRjaChoYW5kbGVFcnJvcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkb0dlbmVyYXRlQXV0aFRva2VuKGluc3RhbGxhdGlvbklkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogR0VORVJBVEVfQVVUSF9UT0tFTl9TVEFSVEVEXG4gICAgfSk7XG4gICAgTGJyeWlvLmNhbGwoJ3VzZXInLCAnbmV3Jywge1xuICAgICAgYXV0aF90b2tlbjogJycsXG4gICAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICAgIGFwcF9pZDogaW5zdGFsbGF0aW9uSWRcbiAgICB9LCAncG9zdCcpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCFyZXNwb25zZS5hdXRoX3Rva2VuKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VORVJBVEVfQVVUSF9UT0tFTl9TVUNDRVNTLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGF1dGhUb2tlbjogcmVzcG9uc2UuYXV0aF90b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5jb25zdCBzZWxlY3RTdGF0ZSQxID0gc3RhdGUgPT4gc3RhdGUucmV3YXJkcyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0VW5jbGFpbWVkUmV3YXJkc0J5VHlwZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnVuY2xhaW1lZFJld2FyZHNCeVR5cGUpO1xuY29uc3Qgc2VsZWN0Q2xhaW1lZFJld2FyZHNCeUlkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUuY2xhaW1lZFJld2FyZHNCeUlkKTtcbmNvbnN0IHNlbGVjdENsYWltZWRSZXdhcmRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1lZFJld2FyZHNCeUlkLCBieUlkID0+IE9iamVjdC52YWx1ZXMoYnlJZCkgfHwgW10pO1xuY29uc3Qgc2VsZWN0Q2xhaW1lZFJld2FyZHNCeVRyYW5zYWN0aW9uSWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbWVkUmV3YXJkcywgcmV3YXJkcyA9PiByZXdhcmRzLnJlZHVjZSgobWFwUGFyYW0sIHJld2FyZCkgPT4ge1xuICBjb25zdCBtYXAgPSBtYXBQYXJhbTtcbiAgbWFwW3Jld2FyZC50cmFuc2FjdGlvbl9pZF0gPSByZXdhcmQ7XG4gIHJldHVybiBtYXA7XG59LCB7fSkpO1xuY29uc3Qgc2VsZWN0VW5jbGFpbWVkUmV3YXJkcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnVuY2xhaW1lZFJld2FyZHMpO1xuY29uc3Qgc2VsZWN0RmV0Y2hpbmdSZXdhcmRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gISFzdGF0ZS5mZXRjaGluZyk7XG5jb25zdCBzZWxlY3RVbmNsYWltZWRSZXdhcmRWYWx1ZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVuY2xhaW1lZFJld2FyZHMsIHJld2FyZHMgPT4gcmV3YXJkcy5yZWR1Y2UoKHN1bSwgcmV3YXJkKSA9PiBzdW0gKyByZXdhcmQucmV3YXJkX2Ftb3VudCwgMCkpO1xuY29uc3Qgc2VsZWN0Q2xhaW1zUGVuZGluZ0J5VHlwZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmNsYWltUGVuZGluZ0J5VHlwZSk7XG5cbmNvbnN0IHNlbGVjdElzQ2xhaW1SZXdhcmRQZW5kaW5nID0gKHN0YXRlLCBwcm9wcykgPT4gc2VsZWN0Q2xhaW1zUGVuZGluZ0J5VHlwZShzdGF0ZSwgcHJvcHMpW3Byb3BzLnJld2FyZF90eXBlXTtcblxuY29uc3QgbWFrZVNlbGVjdElzUmV3YXJkQ2xhaW1QZW5kaW5nID0gKCkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0SXNDbGFpbVJld2FyZFBlbmRpbmcsIGlzQ2xhaW1pbmcgPT4gaXNDbGFpbWluZyk7XG5jb25zdCBzZWxlY3RDbGFpbUVycm9yc0J5VHlwZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmNsYWltRXJyb3JzQnlUeXBlKTtcblxuY29uc3Qgc2VsZWN0Q2xhaW1SZXdhcmRFcnJvciA9IChzdGF0ZSwgcHJvcHMpID0+IHNlbGVjdENsYWltRXJyb3JzQnlUeXBlKHN0YXRlLCBwcm9wcylbcHJvcHMucmV3YXJkX3R5cGVdO1xuXG5jb25zdCBtYWtlU2VsZWN0Q2xhaW1SZXdhcmRFcnJvciA9ICgpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltUmV3YXJkRXJyb3IsIGVycm9yTWVzc2FnZSA9PiBlcnJvck1lc3NhZ2UpO1xuXG5jb25zdCBzZWxlY3RSZXdhcmRCeVR5cGUgPSAoc3RhdGUsIHJld2FyZFR5cGUpID0+IHNlbGVjdFVuY2xhaW1lZFJld2FyZHMoc3RhdGUpLmZpbmQocmV3YXJkID0+IHJld2FyZC5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkVHlwZSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXdhcmRCeVR5cGUgPSAoKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXdhcmRCeVR5cGUsIHJld2FyZCA9PiByZXdhcmQpO1xuXG5jb25zdCBzZWxlY3RSZXdhcmRCeUNsYWltQ29kZSA9IChzdGF0ZSwgY2xhaW1Db2RlKSA9PiBzZWxlY3RVbmNsYWltZWRSZXdhcmRzKHN0YXRlKS5maW5kKHJld2FyZCA9PiByZXdhcmQuY2xhaW1fY29kZSA9PT0gY2xhaW1Db2RlKTtcblxuY29uc3QgbWFrZVNlbGVjdFJld2FyZEJ5Q2xhaW1Db2RlID0gKCkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0UmV3YXJkQnlDbGFpbUNvZGUsIHJld2FyZCA9PiByZXdhcmQpO1xuY29uc3QgbWFrZVNlbGVjdFJld2FyZEFtb3VudEJ5VHlwZSA9ICgpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFJld2FyZEJ5VHlwZSwgcmV3YXJkID0+IHJld2FyZCA/IHJld2FyZC5yZXdhcmRfYW1vdW50IDogMCk7XG5jb25zdCBzZWxlY3RSZXdhcmRDb250ZW50Q2xhaW1JZHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5yZXdhcmRlZENvbnRlbnRDbGFpbUlkcyk7XG5jb25zdCBzZWxlY3RSZWZlcnJhbFJld2FyZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVuY2xhaW1lZFJld2FyZHMsIHVuY2xhaW1lZFJld2FyZHMgPT4gdW5jbGFpbWVkUmV3YXJkcy5maWx0ZXIocmV3YXJkID0+IHJld2FyZC5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkcy5UWVBFX1JFRkVSUkFMKVswXSk7XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDIgPSBzdGF0ZSA9PiBzdGF0ZS51c2VyIHx8IHt9O1xuY29uc3Qgc2VsZWN0QXV0aGVudGljYXRpb25Jc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5hdXRoZW50aWNhdGlvbklzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RVc2VySXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUudXNlcklzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RVc2VyID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUudXNlcik7XG5jb25zdCBzZWxlY3RFbWFpbEFscmVhZHlFeGlzdHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5lbWFpbEFscmVhZHlFeGlzdHMpO1xuY29uc3Qgc2VsZWN0UmVzZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbCk7XG5jb25zdCBzZWxlY3RVc2VyRW1haWwgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VyLCB1c2VyID0+IHVzZXIgPyB1c2VyLnByaW1hcnlfZW1haWwgOiBudWxsKTtcbmNvbnN0IHNlbGVjdFVzZXJQaG9uZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVzZXIsIHVzZXIgPT4gdXNlciA/IHVzZXIucGhvbmVfbnVtYmVyIDogbnVsbCk7XG5jb25zdCBzZWxlY3RVc2VyQ291bnRyeUNvZGUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VyLCB1c2VyID0+IHVzZXIgPyB1c2VyLmNvdW50cnlfY29kZSA6IG51bGwpO1xuY29uc3Qgc2VsZWN0RW1haWxUb1ZlcmlmeSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHNlbGVjdFVzZXJFbWFpbCwgKHN0YXRlLCB1c2VyRW1haWwpID0+IHN0YXRlLmVtYWlsVG9WZXJpZnkgfHwgdXNlckVtYWlsKTtcbmNvbnN0IHNlbGVjdFBob25lVG9WZXJpZnkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzZWxlY3RVc2VyUGhvbmUsIChzdGF0ZSwgdXNlclBob25lKSA9PiBzdGF0ZS5waG9uZVRvVmVyaWZ5IHx8IHVzZXJQaG9uZSk7XG5jb25zdCBzZWxlY3RZb3V0dWJlQ2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VyLCB1c2VyID0+IHVzZXIgPyB1c2VyLnlvdXR1YmVfY2hhbm5lbHMgOiBudWxsKTtcbmNvbnN0IHNlbGVjdFVzZXJJc1Jld2FyZEFwcHJvdmVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyICYmIHVzZXIuaXNfcmV3YXJkX2FwcHJvdmVkKTtcbmNvbnN0IHNlbGVjdEVtYWlsTmV3SXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuZW1haWxOZXdJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0RW1haWxOZXdFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5lbWFpbE5ld0Vycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RQaG9uZU5ld0Vycm9yTWVzc2FnZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBob25lTmV3RXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdEVtYWlsVmVyaWZ5SXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuZW1haWxWZXJpZnlJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0RW1haWxWZXJpZnlFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5lbWFpbFZlcmlmeUVycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RQaG9uZU5ld0lzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBob25lTmV3SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFBob25lVmVyaWZ5SXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucGhvbmVWZXJpZnlJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0UGhvbmVWZXJpZnlFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5waG9uZVZlcmlmeUVycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RJZGVudGl0eVZlcmlmeUlzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmlkZW50aXR5VmVyaWZ5SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdElkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuaWRlbnRpdHlWZXJpZnlFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VyLCB1c2VyID0+IHVzZXIgJiYgdXNlci5oYXNfdmVyaWZpZWRfZW1haWwpO1xuY29uc3Qgc2VsZWN0VXNlcklzVmVyaWZpY2F0aW9uQ2FuZGlkYXRlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyICYmICghdXNlci5oYXNfdmVyaWZpZWRfZW1haWwgfHwgIXVzZXIuaXNfaWRlbnRpdHlfdmVyaWZpZWQpKTtcbmNvbnN0IHNlbGVjdEFjY2Vzc1Rva2VuID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuYWNjZXNzVG9rZW4pO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZVN0YXR1c0lzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmludml0ZVN0YXR1c0lzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RVc2VySW52aXRlc1JlbWFpbmluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmludml0ZXNSZW1haW5pbmcpO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZWVzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuaW52aXRlZXMpO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZVN0YXR1c0ZhaWxlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVzZXJJbnZpdGVzUmVtYWluaW5nLCAoKSA9PiBzZWxlY3RVc2VySW52aXRlc1JlbWFpbmluZyA9PT0gbnVsbCk7XG5jb25zdCBzZWxlY3RVc2VySW52aXRlTmV3SXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuaW52aXRlTmV3SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFVzZXJJbnZpdGVOZXdFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5pbnZpdGVOZXdFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZVJlZmVycmFsTGluayA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnJlZmVycmFsTGluayk7XG5jb25zdCBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxDb2RlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucmVmZXJyYWxDb2RlID8gc3RhdGUucmVmZXJyYWxDb2RlWzBdIDogJycpO1xuY29uc3Qgc2VsZWN0WW91VHViZUltcG9ydFBlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS55b3V0dWJlQ2hhbm5lbEltcG9ydFBlbmRpbmcpO1xuY29uc3Qgc2VsZWN0WW91VHViZUltcG9ydEVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUueW91dHViZUNoYW5uZWxJbXBvcnRFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0U2V0UmVmZXJyZXJQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucmVmZXJyZXJTZXRJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0U2V0UmVmZXJyZXJFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnJlZmVycmVyU2V0RXJyb3IpO1xuY29uc3Qgc2VsZWN0WW91VHViZUltcG9ydFZpZGVvc0NvbXBsZXRlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4ge1xuICBjb25zdCB0b3RhbCA9IHN0YXRlLnlvdXR1YmVDaGFubmVsSW1wb3J0VG90YWw7XG4gIGNvbnN0IGNvbXBsZXRlID0gc3RhdGUueW91dHViZUNoYW5uZWxJbXBvcnRDb21wbGV0ZSB8fCAwO1xuXG4gIGlmICh0b3RhbCkge1xuICAgIHJldHVybiBbY29tcGxldGUsIHRvdGFsXTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGRvRmV0Y2hJbnZpdGVTdGF0dXMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURURcbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChbTGJyeWlvLmNhbGwoJ3VzZXInLCAnaW52aXRlX3N0YXR1cycpLCBMYnJ5aW8uY2FsbCgndXNlcl9yZWZlcnJhbF9jb2RlJywgJ2xpc3QnKV0pLnRoZW4oKFtzdGF0dXMsIGNvZGVdKSA9PiB7XG4gICAgICBkaXNwYXRjaChkb1Jld2FyZExpc3QoKSk7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaW52aXRlc1JlbWFpbmluZzogc3RhdHVzLmludml0ZXNfcmVtYWluaW5nID8gc3RhdHVzLmludml0ZXNfcmVtYWluaW5nIDogMCxcbiAgICAgICAgICBpbnZpdGVlczogc3RhdHVzLmludml0ZWVzLFxuICAgICAgICAgIHJlZmVycmFsTGluazogYCR7TGJyeWlvLkNPTk5FQ1RJT05fU1RSSU5HfXVzZXIvcmVmZXI/cj0ke2NvZGV9YCxcbiAgICAgICAgICByZWZlcnJhbENvZGU6IGNvZGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9JbnN0YWxsTmV3KGFwcFZlcnNpb24sIG9zID0gbnVsbCwgZmlyZWJhc2VUb2tlbiA9IG51bGwsIGNhbGxiYWNrRm9yVXNlcnNXaG9BcmVTaGFyaW5nRGF0YSkge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIGFwcF92ZXJzaW9uOiBhcHBWZXJzaW9uXG4gIH07XG5cbiAgaWYgKGZpcmViYXNlVG9rZW4pIHtcbiAgICBwYXlsb2FkLmZpcmViYXNlX3Rva2VuID0gZmlyZWJhc2VUb2tlbjtcbiAgfVxuXG4gIGxicnlSZWR1eC5MYnJ5LnN0YXR1cygpLnRoZW4oc3RhdHVzID0+IHtcbiAgICBwYXlsb2FkLmFwcF9pZCA9IHN0YXR1cy5pbnN0YWxsYXRpb25faWQ7XG4gICAgcGF5bG9hZC5ub2RlX2lkID0gc3RhdHVzLmxicnlfaWQ7XG4gICAgbGJyeVJlZHV4LkxicnkudmVyc2lvbigpLnRoZW4odmVyc2lvbiA9PiB7XG4gICAgICBwYXlsb2FkLmRhZW1vbl92ZXJzaW9uID0gdmVyc2lvbi5sYnJ5bmV0X3ZlcnNpb247XG4gICAgICBwYXlsb2FkLm9wZXJhdGluZ19zeXN0ZW0gPSBvcyB8fCB2ZXJzaW9uLm9zX3N5c3RlbTtcbiAgICAgIHBheWxvYWQucGxhdGZvcm0gPSB2ZXJzaW9uLnBsYXRmb3JtO1xuICAgICAgTGJyeWlvLmNhbGwoJ2luc3RhbGwnLCAnbmV3JywgcGF5bG9hZCk7XG5cbiAgICAgIGlmIChjYWxsYmFja0ZvclVzZXJzV2hvQXJlU2hhcmluZ0RhdGEpIHtcbiAgICAgICAgY2FsbGJhY2tGb3JVc2Vyc1dob0FyZVNoYXJpbmdEYXRhKHN0YXR1cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZG9JbnN0YWxsTmV3V2l0aFBhcmFtcyhhcHBWZXJzaW9uLCBpbnN0YWxsYXRpb25JZCwgbm9kZUlkLCBsYnJ5bmV0VmVyc2lvbiwgb3MsIHBsYXRmb3JtLCBmaXJlYmFzZVRva2VuID0gbnVsbCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBhcHBfdmVyc2lvbjogYXBwVmVyc2lvblxuICAgIH07XG5cbiAgICBpZiAoZmlyZWJhc2VUb2tlbikge1xuICAgICAgcGF5bG9hZC5maXJlYmFzZV90b2tlbiA9IGZpcmViYXNlVG9rZW47XG4gICAgfVxuXG4gICAgcGF5bG9hZC5hcHBfaWQgPSBpbnN0YWxsYXRpb25JZDtcbiAgICBwYXlsb2FkLm5vZGVfaWQgPSBub2RlSWQ7XG4gICAgcGF5bG9hZC5kYWVtb25fdmVyc2lvbiA9IGxicnluZXRWZXJzaW9uO1xuICAgIHBheWxvYWQub3BlcmF0aW5nX3N5c3RlbSA9IG9zO1xuICAgIHBheWxvYWQucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICBMYnJ5aW8uY2FsbCgnaW5zdGFsbCcsICduZXcnLCBwYXlsb2FkKTtcbiAgfTtcbn0gLy8gVE9ETzogQ2FsbCBkb0luc3RhbGxOZXcgc2VwYXJhdGVseSBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgYXBwVmVyc2lvbiBhbmQgb3Nfc3lzdGVtIHBhcmFtcz9cblxuZnVuY3Rpb24gZG9BdXRoZW50aWNhdGUoYXBwVmVyc2lvbiwgb3MgPSBudWxsLCBmaXJlYmFzZVRva2VuID0gbnVsbCwgc2hhcmVVc2FnZURhdGEgPSB0cnVlLCBjYWxsYmFja0ZvclVzZXJzV2hvQXJlU2hhcmluZ0RhdGEsIGNhbGxJbnN0YWxsID0gdHJ1ZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFVVEhFTlRJQ0FUSU9OX1NUQVJURURcbiAgICB9KTtcbiAgICBMYnJ5aW8uYXV0aGVudGljYXRlKCkudGhlbih1c2VyID0+IHtcbiAgICAgIExicnlpby5nZXRBdXRoVG9rZW4oKS50aGVuKHRva2VuID0+IHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNoYXJlVXNhZ2VEYXRhKSB7XG4gICAgICAgICAgZGlzcGF0Y2goZG9SZXdhcmRMaXN0KCkpO1xuICAgICAgICAgIGRpc3BhdGNoKGRvRmV0Y2hJbnZpdGVTdGF0dXMoKSk7XG5cbiAgICAgICAgICBpZiAoY2FsbEluc3RhbGwpIHtcbiAgICAgICAgICAgIGRvSW5zdGFsbE5ldyhhcHBWZXJzaW9uLCBvcywgZmlyZWJhc2VUb2tlbiwgY2FsbGJhY2tGb3JVc2Vyc1dob0FyZVNoYXJpbmdEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQVVUSEVOVElDQVRJT05fRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyRmV0Y2goKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9GRVRDSF9TVEFSVEVEXG4gICAgfSk7XG4gICAgTGJyeWlvLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgIGRpc3BhdGNoKGRvUmV3YXJkTGlzdCgpKTtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9GRVRDSF9TVUNDRVNTLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRkVUQ0hfRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyQ2hlY2tFbWFpbFZlcmlmaWVkKCkge1xuICAvLyBUaGlzIHdpbGwgaGFwcGVuIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHdlIGRvbid0IG5lZWQgbG9hZGluZyBib29sZWFuc1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIExicnlpby5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XG4gICAgICBpZiAodXNlci5oYXNfdmVyaWZpZWRfZW1haWwpIHtcbiAgICAgICAgZGlzcGF0Y2goZG9SZXdhcmRMaXN0KCkpO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVVNFUl9GRVRDSF9TVUNDRVNTLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyUGhvbmVSZXNldCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVU0VSX1BIT05FX1JFU0VUXG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJQaG9uZU5ldyhwaG9uZSwgY291bnRyeUNvZGUpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1BIT05FX05FV19TVEFSVEVELFxuICAgICAgZGF0YToge1xuICAgICAgICBwaG9uZSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBjb3VudHJ5Q29kZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHBob25lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX1BIT05FX05FV19GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCd1c2VyJywgJ3Bob25lX251bWJlcl9uZXcnLCB7XG4gICAgICBwaG9uZV9udW1iZXI6IHBob25lLFxuICAgICAgY291bnRyeV9jb2RlOiBjb3VudHJ5Q29kZVxuICAgIH0sICdwb3N0JykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlclBob25lVmVyaWZ5RmFpbHVyZShlcnJvcikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUsXG4gICAgZGF0YToge1xuICAgICAgZXJyb3JcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJQaG9uZVZlcmlmeSh2ZXJpZmljYXRpb25Db2RlKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBzZWxlY3RQaG9uZVRvVmVyaWZ5KGdldFN0YXRlKCkpO1xuICAgIGNvbnN0IGNvdW50cnlDb2RlID0gc2VsZWN0VXNlckNvdW50cnlDb2RlKGdldFN0YXRlKCkpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQsXG4gICAgICBjb2RlOiB2ZXJpZmljYXRpb25Db2RlXG4gICAgfSk7XG4gICAgTGJyeWlvLmNhbGwoJ3VzZXInLCAncGhvbmVfbnVtYmVyX2NvbmZpcm0nLCB7XG4gICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIHBob25lX251bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgICBjb3VudHJ5X2NvZGU6IGNvdW50cnlDb2RlXG4gICAgfSwgJ3Bvc3QnKS50aGVuKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIuaXNfaWRlbnRpdHlfdmVyaWZpZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFVTRVJfUEhPTkVfVkVSSUZZX1NVQ0NFU1MsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdXNlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvQ2xhaW1SZXdhcmRUeXBlKHJld2FyZHMuVFlQRV9ORVdfVVNFUikpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IGRpc3BhdGNoKGRvVXNlclBob25lVmVyaWZ5RmFpbHVyZShlcnJvcikpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlckVtYWlsVG9WZXJpZnkoZW1haWwpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX0VNQUlMX1ZFUklGWV9TRVQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVtYWlsXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJFbWFpbE5ldyhlbWFpbCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfRU1BSUxfTkVXX1NUQVJURUQsXG4gICAgICBlbWFpbFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVtYWlsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGlzcGF0Y2goZG9Vc2VyRmV0Y2goKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSBlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgTGJyeWlvLmNhbGwoJ3VzZXJfZW1haWwnLCAnbmV3Jywge1xuICAgICAgZW1haWwsXG4gICAgICBzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbDogdHJ1ZVxuICAgIH0sICdwb3N0JykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaWYgKGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBVU0VSX0VNQUlMX05FV19FWElTVFNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBMYnJ5aW8uY2FsbCgndXNlcl9lbWFpbCcsICdyZXNlbmRfdG9rZW4nLCB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgb25seV9pZl9leHBpcmVkOiB0cnVlXG4gICAgICAgIH0sICdwb3N0JykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSkudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlclJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsKGVtYWlsKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1VDQ0VTU1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSBlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgTGJyeWlvLmNhbGwoJ3VzZXJfZW1haWwnLCAncmVzZW5kX3Rva2VuJywge1xuICAgICAgZW1haWxcbiAgICB9LCAncG9zdCcpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyRW1haWxWZXJpZnlGYWlsdXJlKGVycm9yKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSxcbiAgICBkYXRhOiB7XG4gICAgICBlcnJvclxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlckVtYWlsVmVyaWZ5KHZlcmlmaWNhdGlvblRva2VuLCByZWNhcHRjaGEpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBlbWFpbCA9IHNlbGVjdEVtYWlsVG9WZXJpZnkoZ2V0U3RhdGUoKSk7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCxcbiAgICAgIGNvZGU6IHZlcmlmaWNhdGlvblRva2VuLFxuICAgICAgcmVjYXB0Y2hhXG4gICAgfSk7XG4gICAgTGJyeWlvLmNhbGwoJ3VzZXJfZW1haWwnLCAnY29uZmlybScsIHtcbiAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICBlbWFpbCxcbiAgICAgIHJlY2FwdGNoYVxuICAgIH0sICdwb3N0JykudGhlbih1c2VyRW1haWwgPT4ge1xuICAgICAgaWYgKHVzZXJFbWFpbC5pc192ZXJpZmllZCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfU1VDQ0VTUyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBlbWFpbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvVXNlckZldGNoKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGVtYWlsIGlzIHN0aWxsIG5vdCB2ZXJpZmllZC4nKTsgLy8gc2hvdWxkbid0IGhhcHBlblxuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IGRpc3BhdGNoKGRvVXNlckVtYWlsVmVyaWZ5RmFpbHVyZShlcnJvcikpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvRmV0Y2hBY2Nlc3NUb2tlbigpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBjb25zdCBzdWNjZXNzID0gdG9rZW4gPT4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1MsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRva2VuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBMYnJ5aW8uZ2V0QXV0aFRva2VuKCkudGhlbihzdWNjZXNzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlcklkZW50aXR5VmVyaWZ5KHN0cmlwZVRva2VuKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRCxcbiAgICAgIHRva2VuOiBzdHJpcGVUb2tlblxuICAgIH0pO1xuICAgIExicnlpby5jYWxsKCd1c2VyJywgJ3ZlcmlmeV9pZGVudGl0eScsIHtcbiAgICAgIHN0cmlwZV90b2tlbjogc3RyaXBlVG9rZW5cbiAgICB9LCAncG9zdCcpLnRoZW4odXNlciA9PiB7XG4gICAgICBpZiAodXNlci5pc19pZGVudGl0eV92ZXJpZmllZCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB1c2VyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkcy5UWVBFX05FV19VU0VSKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgaWRlbnRpdHkgaXMgc3RpbGwgbm90IHZlcmlmaWVkLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLicpOyAvLyBzaG91bGRuJ3QgaGFwcGVuXG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0lERU5USVRZX1ZFUklGWV9GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJJbnZpdGVOZXcoZW1haWwpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX0lOVklURV9ORVdfU1RBUlRFRFxuICAgIH0pO1xuICAgIHJldHVybiBMYnJ5aW8uY2FsbCgndXNlcicsICdpbnZpdGUnLCB7XG4gICAgICBlbWFpbFxuICAgIH0sICdwb3N0JykudGhlbihzdWNjZXNzID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9JTlZJVEVfTkVXX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlbWFpbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGxicnlSZWR1eC5kb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogX18oYEludml0ZSBzZW50IHRvICR7ZW1haWx9YClcbiAgICAgIH0pKTtcbiAgICAgIGRpc3BhdGNoKGRvRmV0Y2hJbnZpdGVTdGF0dXMoKSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfSU5WSVRFX05FV19GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJTZXRSZWZlcnJlclJlc2V0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfU0VUX1JFRkVSUkVSX1JFU0VUXG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJTZXRSZWZlcnJlcihyZWZlcnJlciwgc2hvdWxkQ2xhaW0pIHtcbiAgcmV0dXJuIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1NFVF9SRUZFUlJFUl9TVEFSVEVEXG4gICAgfSk7XG4gICAgbGV0IGNsYWltO1xuICAgIGxldCByZWZlcnJlckNvZGU7XG4gICAgY29uc3Qge1xuICAgICAgaXNDaGFubmVsXG4gICAgfSA9IGxicnlSZWR1eC5wYXJzZVVSSShyZWZlcnJlcik7XG5cbiAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICBjb25zdCB1cmkgPSBgbGJyeTovLyR7cmVmZXJyZXJ9YDtcbiAgICAgIGNsYWltID0gbGJyeVJlZHV4Lm1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpKGdldFN0YXRlKCkpO1xuXG4gICAgICBpZiAoIWNsYWltKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsYnJ5UmVkdXguTGJyeS5yZXNvbHZlKHtcbiAgICAgICAgICAgIHVybHM6IFt1cmldXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2xhaW0gPSByZXNwb25zZSAmJiByZXNwb25zZVt1cmldO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFVTRVJfU0VUX1JFRkVSUkVSX0ZBSUxVUkUsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmZXJyZXJDb2RlID0gY2xhaW0gJiYgY2xhaW0ucGVybWFuZW50X3VybCAmJiBjbGFpbS5wZXJtYW5lbnRfdXJsLnJlcGxhY2UoJ2xicnk6Ly8nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyZWZlcnJlckNvZGUpIHtcbiAgICAgIHJlZmVycmVyQ29kZSA9IHJlZmVycmVyO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBMYnJ5aW8uY2FsbCgndXNlcicsICdyZWZlcnJhbCcsIHtcbiAgICAgICAgcmVmZXJyZXI6IHJlZmVycmVyQ29kZVxuICAgICAgfSwgJ3Bvc3QnKTtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9TRVRfUkVGRVJSRVJfU1VDQ0VTU1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzaG91bGRDbGFpbSkge1xuICAgICAgICBkaXNwYXRjaChkb0NsYWltUmV3YXJkVHlwZShyZXdhcmRzLlRZUEVfUkVGRVJFRSkpO1xuICAgICAgICBkaXNwYXRjaChkb1VzZXJGZXRjaCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKGRvVXNlckZldGNoKCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfU0VUX1JFRkVSUkVSX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBkb0NsYWltWW91dHViZUNoYW5uZWxzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRFxuICAgIH0pO1xuICAgIGxldCB0cmFuc2ZlclJlc3BvbnNlO1xuICAgIHJldHVybiBsYnJ5UmVkdXguTGJyeS5hZGRyZXNzX2xpc3Qoe1xuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2Vfc2l6ZTogOTk5OTlcbiAgICB9KS50aGVuKGFkZHJlc3NMaXN0ID0+IGFkZHJlc3NMaXN0Lml0ZW1zLnNvcnQoKGEsIGIpID0+IGEudXNlZF90aW1lcyAtIGIudXNlZF90aW1lcylbMF0pLnRoZW4oYWRkcmVzcyA9PiBMYnJ5aW8uY2FsbCgneXQnLCAndHJhbnNmZXInLCB7XG4gICAgICBhZGRyZXNzOiBhZGRyZXNzLmFkZHJlc3MsXG4gICAgICBwdWJsaWNfa2V5OiBhZGRyZXNzLnB1YmtleVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICB0cmFuc2ZlclJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXNwb25zZS5tYXAoY2hhbm5lbE1ldGEgPT4ge1xuICAgICAgICAgIGlmIChjaGFubmVsTWV0YSAmJiBjaGFubmVsTWV0YS5jaGFubmVsICYmIGNoYW5uZWxNZXRhLmNoYW5uZWwuY2hhbm5lbF9jZXJ0aWZpY2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxicnlSZWR1eC5MYnJ5LmNoYW5uZWxfaW1wb3J0KHtcbiAgICAgICAgICAgICAgY2hhbm5lbF9kYXRhOiBjaGFubmVsTWV0YS5jaGFubmVsLmNoYW5uZWxfY2VydGlmaWNhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IFt7XG4gICAgICAgICAgICB0eXBlOiBVU0VSX1lPVVRVQkVfSU1QT1JUX1NVQ0NFU1MsXG4gICAgICAgICAgICBkYXRhOiB0cmFuc2ZlclJlc3BvbnNlXG4gICAgICAgICAgfV07XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKGRvVXNlckZldGNoKCkpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChsYnJ5UmVkdXguZG9GZXRjaENoYW5uZWxMaXN0TWluZSgpKTtcbiAgICAgICAgICBkaXNwYXRjaChsYnJ5UmVkdXguYmF0Y2hBY3Rpb25zKC4uLmFjdGlvbnMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9ZT1VUVUJFX0lNUE9SVF9GQUlMVVJFLFxuICAgICAgICBkYXRhOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvQ2hlY2tZb3V0dWJlVHJhbnNmZXIoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVEFSVEVEXG4gICAgfSk7XG4gICAgcmV0dXJuIExicnlpby5jYWxsKCd5dCcsICd0cmFuc2ZlcicpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTLFxuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX1lPVVRVQkVfSU1QT1JUX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IFN0cmluZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1Jld2FyZExpc3QoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuRkVUQ0hfUkVXQVJEU19TVEFSVEVEXG4gICAgfSk7XG4gICAgTGJyeWlvLmNhbGwoJ3Jld2FyZCcsICdsaXN0Jywge1xuICAgICAgbXVsdGlwbGVfcmV3YXJkc19wZXJfdHlwZTogdHJ1ZVxuICAgIH0pLnRoZW4odXNlclJld2FyZHMgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRTX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVzZXJSZXdhcmRzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuRkVUQ0hfUkVXQVJEU19DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1c2VyUmV3YXJkczogW11cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0NsYWltUmV3YXJkVHlwZShyZXdhcmRUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgdXNlcklzUmV3YXJkQXBwcm92ZWQgPSBzZWxlY3RVc2VySXNSZXdhcmRBcHByb3ZlZChzdGF0ZSk7XG4gICAgY29uc3QgdW5jbGFpbWVkUmV3YXJkcyA9IHNlbGVjdFVuY2xhaW1lZFJld2FyZHMoc3RhdGUpO1xuICAgIGNvbnN0IHJld2FyZCA9IHJld2FyZFR5cGUgPT09IHJld2FyZHMuVFlQRV9SRVdBUkRfQ09ERSB8fCByZXdhcmRUeXBlID09PSByZXdhcmRzLlRZUEVfTkVXX0FORFJPSUQgPyB7XG4gICAgICByZXdhcmRfdHlwZTogcmV3YXJkcy5UWVBFX1JFV0FSRF9DT0RFXG4gICAgfSA6IHVuY2xhaW1lZFJld2FyZHMuZmluZCh1ciA9PiB1ci5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkVHlwZSk7IC8vIFRyeSB0byBjbGFpbSB0aGUgZW1haWwgcmV3YXJkIHJpZ2h0IGF3YXksIGV2ZW4gaWYgd2UgaGF2ZW4ndCBjYWxsZWQgcmV3YXJkX2xpc3QgeWV0XG5cbiAgICBpZiAocmV3YXJkVHlwZSAhPT0gcmV3YXJkcy5UWVBFX1JFV0FSRF9DT0RFIHx8IHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9DT05GSVJNX0VNQUlMIHx8IHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9EQUlMWV9WSUVXIHx8IHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9ORVdfQU5EUk9JRCkge1xuICAgICAgaWYgKCFyZXdhcmQgfHwgcmV3YXJkLnRyYW5zYWN0aW9uX2lkKSB7XG4gICAgICAgIC8vIGFscmVhZHkgY2xhaW1lZCBvciBkb2Vzbid0IGV4aXN0LCBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXVzZXJJc1Jld2FyZEFwcHJvdmVkICYmIHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9DT05GSVJNX0VNQUlMICYmIHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9SRVdBUkRfQ09ERSAmJiByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfTkVXX0FORFJPSUQpIHtcbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5mYWlsU2lsZW50bHkgJiYgcmV3YXJkcy5jYWxsYmFja3MucmV3YXJkQXBwcm92YWxSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV3YXJkcy5jYWxsYmFja3MucmV3YXJkQXBwcm92YWxSZXF1ZXN0ZWQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU2V0IGBjbGFpbV9jb2RlYCBzbyB0aGUgYXBpIGtub3dzIHdoaWNoIHJld2FyZCB0byBnaXZlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvZiB0aGUgc2FtZSB0eXBlXG5cblxuICAgIGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXG4gICAgaWYgKCFwYXJhbXMuY2xhaW1fY29kZSkge1xuICAgICAgcGFyYW1zLmNsYWltX2NvZGUgPSByZXdhcmQuY2xhaW1fY29kZTtcbiAgICB9XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBsYnJ5UmVkdXguQUNUSU9OUy5DTEFJTV9SRVdBUkRfU1RBUlRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmV3YXJkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gc3VjY2Vzc1Jld2FyZCA9PiB7XG4gICAgICAvLyBUZW1wb3JhcnkgdGltZW91dCB0byBlbnN1cmUgdGhlIHNkayBoYXMgdGhlIGNvcnJlY3QgYmFsYW5jZSBhZnRlciBjbGFpbWluZyBhIHJld2FyZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKGxicnlSZWR1eC5kb1VwZGF0ZUJhbGFuY2UoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX1NVQ0NFU1MsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHJld2FyZDogc3VjY2Vzc1Jld2FyZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHN1Y2Nlc3NSZXdhcmQucmV3YXJkX3R5cGUgPT09IHJld2FyZHMuVFlQRV9ORVdfVVNFUiAmJiByZXdhcmRzLmNhbGxiYWNrcy5jbGFpbUZpcnN0UmV3YXJkU3VjY2Vzcykge1xuICAgICAgICAgICAgcmV3YXJkcy5jYWxsYmFja3MuY2xhaW1GaXJzdFJld2FyZFN1Y2Nlc3MoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1Y2Nlc3NSZXdhcmQucmV3YXJkX3R5cGUgPT09IHJld2FyZHMuVFlQRV9SRUZFUlJBTCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goZG9GZXRjaEludml0ZVN0YXR1cygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaChkb1Jld2FyZExpc3QoKSk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5jYWxsYmFjaykge1xuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAyMDAwKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbHVyZSA9IGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByZXdhcmQsXG4gICAgICAgICAgZXJyb3I6ICFvcHRpb25zIHx8ICFvcHRpb25zLmZhaWxTaWxlbnRseSA/IGVycm9yIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3B0aW9ucy5ub3RpZnlFcnJvcikge1xuICAgICAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9Ub2FzdCh7XG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucy5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiByZXdhcmRzLmNsYWltUmV3YXJkKHJld2FyZFR5cGUsIHBhcmFtcykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvQ2xhaW1FbGlnaWJsZVB1cmNoYXNlUmV3YXJkcygpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgdW5jbGFpbWVkUmV3YXJkcyA9IHNlbGVjdFVuY2xhaW1lZFJld2FyZHMoc3RhdGUpO1xuICAgIGNvbnN0IHVzZXJJc1Jld2FyZEFwcHJvdmVkID0gc2VsZWN0VXNlcklzUmV3YXJkQXBwcm92ZWQoc3RhdGUpO1xuXG4gICAgaWYgKCF1c2VySXNSZXdhcmRBcHByb3ZlZCB8fCAhTGJyeWlvLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodW5jbGFpbWVkUmV3YXJkcy5maW5kKHVyID0+IHVyLnJld2FyZF90eXBlID09PSByZXdhcmRzLlRZUEVfRklSU1RfU1RSRUFNKSkge1xuICAgICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkcy5UWVBFX0ZJUlNUX1NUUkVBTSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBbcmV3YXJkcy5UWVBFX01BTllfRE9XTkxPQURTLCByZXdhcmRzLlRZUEVfREFJTFlfVklFV10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUodHlwZSwge1xuICAgICAgICAgIGZhaWxTaWxlbnRseTogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBkb0NsYWltUmV3YXJkQ2xlYXJFcnJvcihyZXdhcmQpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBsYnJ5UmVkdXguQUNUSU9OUy5DTEFJTV9SRVdBUkRfQ0xFQVJfRVJST1IsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJld2FyZFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9GZXRjaFJld2FyZGVkQ29udGVudCgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBjb25zdCBzdWNjZXNzID0gbmFtZVRvQ2xhaW1JZCA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkZFVENIX1JFV0FSRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltSWRzOiBPYmplY3QudmFsdWVzKG5hbWVUb0NsYWltSWQpLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkZFVENIX1JFV0FSRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltSWRzOiBbXSxcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgTGJyeWlvLmNhbGwoJ3Jld2FyZCcsICdsaXN0X2ZlYXR1cmVkJykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cblxuY29uc3QgUEFHRV9TSVpFID0gMjA7XG5cbi8vICAgICAgXG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05TX0lOVEVSVkFMID0gMTUgKiA2MCAqIDEwMDA7XG5jb25zdCBkb1NldFZpZXdNb2RlID0gdmlld01vZGUgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBTRVRfVklFV19NT0RFLFxuICBkYXRhOiB2aWV3TW9kZVxufSk7XG5jb25zdCBzZXRTdWJzY3JpcHRpb25MYXRlc3QgPSAoc3Vic2NyaXB0aW9uLCB1cmkpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogU0VUX1NVQlNDUklQVElPTl9MQVRFU1QsXG4gIGRhdGE6IHtcbiAgICBzdWJzY3JpcHRpb24sXG4gICAgdXJpXG4gIH1cbn0pOyAvLyBQb3B1bGF0ZSBhIGNoYW5uZWxzIHVucmVhZCBzdWJzY3JpcHRpb25zIG9yIHVwZGF0ZSB0aGUgdHlwZVxuXG5jb25zdCBkb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnMgPSAoY2hhbm5lbFVyaSwgdXJpcywgdHlwZSkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IHVucmVhZEJ5Q2hhbm5lbCA9IHNlbGVjdFVucmVhZEJ5Q2hhbm5lbChzdGF0ZSk7XG4gIGNvbnN0IGN1cnJlbnRVbnJlYWRGb3JDaGFubmVsID0gdW5yZWFkQnlDaGFubmVsW2NoYW5uZWxVcmldO1xuICBsZXQgbmV3VXJpcyA9IFtdO1xuICBsZXQgbmV3VHlwZSA9IG51bGw7XG5cbiAgaWYgKCFjdXJyZW50VW5yZWFkRm9yQ2hhbm5lbCkge1xuICAgIG5ld1VyaXMgPSB1cmlzO1xuICAgIG5ld1R5cGUgPSB0eXBlO1xuICB9IGVsc2Uge1xuICAgIGlmICh1cmlzKSB7XG4gICAgICAvLyBJZiBhIGNoYW5uZWwgY3VycmVudGx5IGhhcyBubyB1bnJlYWQgdXJpcywganVzdCBhZGQgdGhlbSBhbGxcbiAgICAgIGlmICghY3VycmVudFVucmVhZEZvckNoYW5uZWwudXJpcyB8fCAhY3VycmVudFVucmVhZEZvckNoYW5uZWwudXJpcy5sZW5ndGgpIHtcbiAgICAgICAgbmV3VXJpcyA9IHVyaXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGV5IGFscmVhZHkgaGF2ZSB1bnJlYWRzIGFuZCBub3cgdGhlcmUgYXJlIG5ldyBvbmVzXG4gICAgICAgIC8vIEFkZCB0aGUgbmV3IG9uZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXNcbiAgICAgICAgY29uc3QgY3VycmVudFVucmVhZFVyaXMgPSBjdXJyZW50VW5yZWFkRm9yQ2hhbm5lbC51cmlzO1xuICAgICAgICBuZXdVcmlzID0gdXJpcy5maWx0ZXIodXJpID0+ICFjdXJyZW50VW5yZWFkVXJpcy5pbmNsdWRlcyh1cmkpKS5jb25jYXQoY3VycmVudFVucmVhZFVyaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdVcmlzID0gY3VycmVudFVucmVhZEZvckNoYW5uZWwudXJpcztcbiAgICB9XG5cbiAgICBuZXdUeXBlID0gdHlwZSB8fCBjdXJyZW50VW5yZWFkRm9yQ2hhbm5lbC50eXBlO1xuICB9XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFVQREFURV9TVUJTQ1JJUFRJT05fVU5SRUFEUyxcbiAgICBkYXRhOiB7XG4gICAgICBjaGFubmVsOiBjaGFubmVsVXJpLFxuICAgICAgdXJpczogbmV3VXJpcyxcbiAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICB9XG4gIH0pO1xufTsgLy8gUmVtb3ZlIG11bHRpcGxlIGZpbGVzIChvciBhbGwpIGZyb20gYSBjaGFubmVscyB1bnJlYWQgc3Vic2NyaXB0aW9uc1xuXG5jb25zdCBkb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbnMgPSAoY2hhbm5lbFVyaSwgcmVhZFVyaXMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCB1bnJlYWRCeUNoYW5uZWwgPSBzZWxlY3RVbnJlYWRCeUNoYW5uZWwoc3RhdGUpOyAvLyBJZiBubyBjaGFubmVsIGlzIHBhc3NlZCBpbiwgcmVtb3ZlIGFsbCB1bnJlYWQgc3Vic2NyaXB0aW9ucyBmcm9tIGFsbCBjaGFubmVsc1xuXG4gIGlmICghY2hhbm5lbFVyaSkge1xuICAgIHJldHVybiBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNoYW5uZWw6IG51bGxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRDaGFubmVsVW5yZWFkID0gdW5yZWFkQnlDaGFubmVsW2NoYW5uZWxVcmldO1xuXG4gIGlmICghY3VycmVudENoYW5uZWxVbnJlYWQgfHwgIWN1cnJlbnRDaGFubmVsVW5yZWFkLnVyaXMpIHtcbiAgICAvLyBDaGFubmVsIHBhc3NlZCBpbiBkb2Vzbid0IGhhdmUgYW55IHVucmVhZHNcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBGb3IgZWFjaCB1cmkgcGFzc2VkIGluLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiB1bnJlYWQgdXJpc1xuICAvLyBJZiBubyB1cmlzIGFyZSBwYXNzZWQgaW4sIHJlbW92ZSB0aGVtIGFsbFxuXG5cbiAgbGV0IG5ld1VyaXM7XG5cbiAgaWYgKHJlYWRVcmlzKSB7XG4gICAgY29uc3QgdXJpc1RvUmVtb3ZlTWFwID0gcmVhZFVyaXMucmVkdWNlKChhY2MsIHZhbCkgPT4gKHsgLi4uYWNjLFxuICAgICAgW3ZhbF06IHRydWVcbiAgICB9KSwge30pO1xuICAgIGNvbnN0IGZpbHRlcmVkVXJpcyA9IGN1cnJlbnRDaGFubmVsVW5yZWFkLnVyaXMuZmlsdGVyKHVyaSA9PiAhdXJpc1RvUmVtb3ZlTWFwW3VyaV0pO1xuICAgIG5ld1VyaXMgPSBmaWx0ZXJlZFVyaXMubGVuZ3RoID8gZmlsdGVyZWRVcmlzIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBuZXdVcmlzID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaCh7XG4gICAgdHlwZTogUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTLFxuICAgIGRhdGE6IHtcbiAgICAgIGNoYW5uZWw6IGNoYW5uZWxVcmksXG4gICAgICB1cmlzOiBuZXdVcmlzXG4gICAgfVxuICB9KTtcbn07IC8vIFJlbW92ZSBhIHNpbmdsZSBmaWxlIGZyb20gYSBjaGFubmVscyB1bnJlYWQgc3Vic2NyaXB0aW9uc1xuXG5jb25zdCBkb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbiA9IChjaGFubmVsVXJpLCByZWFkVXJpKSA9PiBkaXNwYXRjaCA9PiB7XG4gIGRpc3BhdGNoKGRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9ucyhjaGFubmVsVXJpLCBbcmVhZFVyaV0pKTtcbn07XG5jb25zdCBkb0NoZWNrU3Vic2NyaXB0aW9uID0gKHN1YnNjcmlwdGlvblVyaSwgc2hvdWxkTm90aWZ5KSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIC8vIG5vIGRpc3BhdGNoaW5nIEZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQ7IGNhdXNlcyBsb2FkaW5nIGlzc3VlcyBvbiA8U3Vic2NyaXB0aW9uc1BhZ2U+XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICBjb25zdCBzYXZlZFN1YnNjcmlwdGlvbiA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc3Vic2NyaXB0aW9ucy5maW5kKHN1YiA9PiBzdWIudXJpID09PSBzdWJzY3JpcHRpb25VcmkpO1xuICBjb25zdCBzdWJzY3JpcHRpb25MYXRlc3QgPSBzdGF0ZS5zdWJzY3JpcHRpb25zLmxhdGVzdFtzdWJzY3JpcHRpb25VcmldO1xuXG4gIGlmICghc2F2ZWRTdWJzY3JpcHRpb24pIHtcbiAgICB0aHJvdyBFcnJvcihgVHJ5aW5nIHRvIGZpbmQgbmV3IGNvbnRlbnQgZm9yICR7c3Vic2NyaXB0aW9uVXJpfSBidXQgaXQgZG9lc24ndCBleGlzdCBpbiB5b3VyIHN1YnNjcmlwdGlvbnNgKTtcbiAgfSAvLyBXZSBtYXkgYmUgZHVwbGljYXRpbmcgY2FsbHMgaGVyZS4gQ2FuIHRoaXMgbG9naWMgYmUgYmFrZWQgaW50byBkb0ZldGNoQ2xhaW1zQnlDaGFubmVsP1xuXG5cbiAgbGJyeVJlZHV4LkxicnkuY2xhaW1fc2VhcmNoKHtcbiAgICBjaGFubmVsOiBzdWJzY3JpcHRpb25VcmksXG4gICAgdmFsaWRfY2hhbm5lbF9zaWduYXR1cmU6IHRydWUsXG4gICAgb3JkZXJfYnk6IFsncmVsZWFzZV90aW1lJ10sXG4gICAgcGFnZTogMSxcbiAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICB9KS50aGVuKGNsYWltTGlzdEJ5Q2hhbm5lbCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgaXRlbXM6IGNsYWltc0luQ2hhbm5lbFxuICAgIH0gPSBjbGFpbUxpc3RCeUNoYW5uZWw7IC8vIG1heSBoYXBwZW4gaWYgc3Vic2NyaWJlZCB0byBhbiBhYmFuZG9uZWQgY2hhbm5lbCBvciBhbiBlbXB0eSBjaGFubmVsXG5cbiAgICBpZiAoIWNsYWltc0luQ2hhbm5lbCB8fCAhY2xhaW1zSW5DaGFubmVsLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIGlmIHRoZSBsYXRlc3Qgc3Vic2NyaXB0aW9uIGN1cnJlbnRseSBzYXZlZCBpcyBhY3R1YWxseSB0aGUgbGF0ZXN0IHN1YnNjcmlwdGlvblxuXG5cbiAgICBjb25zdCBsYXRlc3RJbmRleCA9IGNsYWltc0luQ2hhbm5lbC5maW5kSW5kZXgoY2xhaW0gPT4gY2xhaW0ucGVybWFuZW50X3VybCA9PT0gc3Vic2NyaXB0aW9uTGF0ZXN0KTsgLy8gSWYgbGF0ZXN0IGlzIC0xLCBpdCBpcyBhIG5ld2x5IHN1YnNjcmliZWQgY2hhbm5lbCBvciB0aGVyZSBoYXZlIGJlZW4gMTArIGNsYWltcyBwdWJsaXNoZWQgc2luY2UgbGFzdCB2aWV3ZWRcblxuICAgIGNvbnN0IGxhdGVzdEluZGV4VG9Ob3RpZnkgPSBsYXRlc3RJbmRleCA9PT0gLTEgPyAxMCA6IGxhdGVzdEluZGV4OyAvLyBJZiBsYXRlc3QgaXMgMCwgbm90aGluZyBoYXMgY2hhbmdlZFxuICAgIC8vIERvIG5vdCBkb3dubG9hZC9ub3RpZnkgYWJvdXQgbmV3IGNvbnRlbnQsIGl0IHdvdWxkIGRvd25sb2FkL25vdGlmeSAxMCBjbGFpbXMgcGVyIGNoYW5uZWxcblxuICAgIGlmIChsYXRlc3RJbmRleCAhPT0gMCAmJiBzdWJzY3JpcHRpb25MYXRlc3QpIHtcbiAgICAgIGxldCBkb3dubG9hZENvdW50ID0gMDtcbiAgICAgIGNvbnN0IG5ld1VucmVhZCA9IFtdO1xuICAgICAgY2xhaW1zSW5DaGFubmVsLnNsaWNlKDAsIGxhdGVzdEluZGV4VG9Ob3RpZnkpLmZvckVhY2goY2xhaW0gPT4ge1xuICAgICAgICBjb25zdCB1cmkgPSBjbGFpbS5wZXJtYW5lbnRfdXJsO1xuXG4gICAgICAgIGlmIChzaG91bGROb3RpZnkpIHtcbiAgICAgICAgICBuZXdVbnJlYWQucHVzaCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGRvVXBkYXRlVW5yZWFkU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25VcmksIG5ld1VucmVhZCwgZG93bmxvYWRDb3VudCA+IDAgPyBET1dOTE9BRElORyA6IE5PVElGWV9PTkxZKSk7XG4gICAgfSAvLyBTZXQgdGhlIGxhdGVzdCBwaWVjZSBvZiBjb250ZW50IGZvciBhIGNoYW5uZWxcbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgYXBwIHRvIGtub3cgaWYgdGhlcmUgaGFzIGJlZW4gbmV3IGNvbnRlbnQgc2luY2UgaXQgd2FzIGxhc3Qgc2V0XG5cblxuICAgIGNvbnN0IGxhdGVzdCA9IGNsYWltc0luQ2hhbm5lbFswXTtcbiAgICBkaXNwYXRjaChzZXRTdWJzY3JpcHRpb25MYXRlc3Qoe1xuICAgICAgY2hhbm5lbE5hbWU6IGxhdGVzdC5zaWduaW5nX2NoYW5uZWwubmFtZSxcbiAgICAgIHVyaTogbGF0ZXN0LnNpZ25pbmdfY2hhbm5lbC5wZXJtYW5lbnRfdXJsXG4gICAgfSwgbGF0ZXN0LnBlcm1hbmVudF91cmwpKTsgLy8gY2FsbGluZyBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQgYWZ0ZXIgbm90IGNhbGxpbmcgU1RBUlRFRFxuICAgIC8vIG1lYW5zIGl0IHdpbGwgZGVsZXRlIGEgbm9uLWV4aXN0YW50IGZldGNoaW5nQ2hhbm5lbENsYWltc1t1cmldXG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHVyaTogc3Vic2NyaXB0aW9uVXJpLFxuICAgICAgICBjbGFpbXM6IGNsYWltc0luQ2hhbm5lbCB8fCBbXSxcbiAgICAgICAgcGFnZTogMVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkb0NoYW5uZWxTdWJzY3JpYmUgPSBzdWJzY3JpcHRpb24gPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCB7XG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIGRhZW1vblNldHRpbmdzXG4gICAgfVxuICB9ID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgaXNTaGFyaW5nRGF0YSA9IGRhZW1vblNldHRpbmdzID8gZGFlbW9uU2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSA6IHRydWU7XG4gIGNvbnN0IHN1YnNjcmlwdGlvblVyaSA9IHN1YnNjcmlwdGlvbi51cmk7XG5cbiAgaWYgKCFzdWJzY3JpcHRpb25Vcmkuc3RhcnRzV2l0aCgnbGJyeTovLycpKSB7XG4gICAgdGhyb3cgRXJyb3IoYFN1YnNjcmlwdGlvbiB1cmlzIG11c3QgaW5jbHVlIHRoZSBcImxicnk6Ly9cIiBwcmVmaXguXFxuVHJpZWQgdG8gc3Vic2NyaWJlIHRvICR7c3Vic2NyaXB0aW9uVXJpfWApO1xuICB9XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IENIQU5ORUxfU1VCU0NSSUJFLFxuICAgIGRhdGE6IHN1YnNjcmlwdGlvblxuICB9KTsgLy8gaWYgdGhlIHVzZXIgaXNuJ3Qgc2hhcmluZyBkYXRhLCBrZWVwIHRoZSBzdWJzY3JpcHRpb25zIGVudGlyZWx5IGluIHRoZSBhcHBcblxuICBpZiAoaXNTaGFyaW5nRGF0YSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxDbGFpbUlkXG4gICAgfSA9IGxicnlSZWR1eC5wYXJzZVVSSShzdWJzY3JpcHRpb24udXJpKTsgLy8gVGhleSBhcmUgc2hhcmluZyBkYXRhLCB3ZSBjYW4gc3RvcmUgdGhlaXIgc3Vic2NyaXB0aW9ucyBpbiBvdXIgaW50ZXJuYWwgZGF0YWJhc2VcblxuICAgIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnbmV3Jywge1xuICAgICAgY2hhbm5lbF9uYW1lOiBzdWJzY3JpcHRpb24uY2hhbm5lbE5hbWUsXG4gICAgICBjbGFpbV9pZDogY2hhbm5lbENsYWltSWRcbiAgICB9KTtcbiAgICBkaXNwYXRjaChkb0NsYWltUmV3YXJkVHlwZShyZXdhcmRzLlRZUEVfU1VCU0NSSVBUSU9OLCB7XG4gICAgICBmYWlsU2lsZW50bHk6IHRydWVcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwYXRjaChkb0NoZWNrU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbi51cmksIHRydWUpKTtcbn07XG5jb25zdCBkb0NoYW5uZWxVbnN1YnNjcmliZSA9IHN1YnNjcmlwdGlvbiA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzZXR0aW5nczoge1xuICAgICAgZGFlbW9uU2V0dGluZ3NcbiAgICB9XG4gIH0gPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBpc1NoYXJpbmdEYXRhID0gZGFlbW9uU2V0dGluZ3MgPyBkYWVtb25TZXR0aW5ncy5zaGFyZV91c2FnZV9kYXRhIDogdHJ1ZTtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IENIQU5ORUxfVU5TVUJTQ1JJQkUsXG4gICAgZGF0YTogc3Vic2NyaXB0aW9uXG4gIH0pO1xuXG4gIGlmIChpc1NoYXJpbmdEYXRhKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hhbm5lbENsYWltSWRcbiAgICB9ID0gbGJyeVJlZHV4LnBhcnNlVVJJKHN1YnNjcmlwdGlvbi51cmkpO1xuICAgIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnZGVsZXRlJywge1xuICAgICAgY2xhaW1faWQ6IGNoYW5uZWxDbGFpbUlkXG4gICAgfSk7XG4gIH1cbn07XG5jb25zdCBkb0NoZWNrU3Vic2NyaXB0aW9ucyA9ICgpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSk7XG4gIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgIGRpc3BhdGNoKGRvQ2hlY2tTdWJzY3JpcHRpb24oc3ViLnVyaSwgdHJ1ZSkpO1xuICB9KTtcbn07XG5jb25zdCBkb0ZldGNoTXlTdWJzY3JpcHRpb25zID0gKCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IHtcbiAgICBzdWJzY3JpcHRpb25zOiByZWR1eFN1YnNjcmlwdGlvbnNcbiAgfSA9IHN0YXRlLnN1YnNjcmlwdGlvbnM7IC8vIGRlZmF1bHQgdG8gdHJ1ZSBpZiBkYWVtb25TZXR0aW5ncyBub3QgZm91bmRcblxuICBjb25zdCBpc1NoYXJpbmdEYXRhID0gc3RhdGUuc2V0dGluZ3MgJiYgc3RhdGUuc2V0dGluZ3MuZGFlbW9uU2V0dGluZ3MgPyBzdGF0ZS5zZXR0aW5ncy5kYWVtb25TZXR0aW5ncy5zaGFyZV91c2FnZV9kYXRhIDogdHJ1ZTtcblxuICBpZiAoIWlzU2hhcmluZ0RhdGEgJiYgaXNTaGFyaW5nRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVGhleSBhcmVuJ3Qgc2hhcmluZyB0aGVpciBkYXRhLCBzdWJzY3JpcHRpb25zIHdpbGwgYmUgaGFuZGxlZCBieSBwZXJzaXN0ZWQgcmVkdXggc3RhdGVcbiAgICByZXR1cm47XG4gIH0gLy8gbW9zdCBvZiB0aGlzIGxvZ2ljIGNvbWVzIGZyb20gc2NlbmFyaW9zIHdoZXJlIHRoZSBkYiBpc24ndCBzeW5jZWQgd2l0aCByZWR1eFxuICAvLyB0aGlzIHdpbGwgaGFwcGVuIGlmIHRoZSB1c2VyIHN0b3BzIHNoYXJpbmcgZGF0YVxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEZFVENIX1NVQlNDUklQVElPTlNfU1RBUlRcbiAgfSk7XG4gIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnbGlzdCcpLnRoZW4oZGJTdWJzY3JpcHRpb25zID0+IHtcbiAgICBjb25zdCBzdG9yZWRTdWJzY3JpcHRpb25zID0gZGJTdWJzY3JpcHRpb25zIHx8IFtdOyAvLyBVc2VyIGhhcyBubyBzdWJzY3JpcHRpb25zIGluIGRiIG9yIHJlZHV4XG5cbiAgICBpZiAoIXN0b3JlZFN1YnNjcmlwdGlvbnMubGVuZ3RoICYmICghcmVkdXhTdWJzY3JpcHRpb25zIHx8ICFyZWR1eFN1YnNjcmlwdGlvbnMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gLy8gVGhlcmUgaXMgc29tZSBtaXNtYXRjaCBiZXR3ZWVuIHJlZHV4IHN0YXRlIGFuZCBkYiBzdGF0ZVxuICAgIC8vIElmIHNvbWV0aGluZyBpcyBpbiB0aGUgZGIsIGJ1dCBub3QgaW4gcmVkdXgsIGFkZCBpdCB0byByZWR1eFxuICAgIC8vIElmIHNvbWV0aGluZyBpcyBpbiByZWR1eCwgYnV0IG5vdCBpbiB0aGUgZGIsIGFkZCBpdCB0byB0aGUgZGJcblxuXG4gICAgaWYgKHN0b3JlZFN1YnNjcmlwdGlvbnMubGVuZ3RoICE9PSByZWR1eFN1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkYlN1Yk1hcCA9IHt9O1xuICAgICAgY29uc3QgcmVkdXhTdWJNYXAgPSB7fTtcbiAgICAgIGNvbnN0IHN1YnNOb3RJbkRCID0gW107XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25zVG9SZXR1cm4gPSByZWR1eFN1YnNjcmlwdGlvbnMuc2xpY2UoKTtcbiAgICAgIHN0b3JlZFN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICBkYlN1Yk1hcFtzdWIuY2xhaW1faWRdID0gMTtcbiAgICAgIH0pO1xuICAgICAgcmVkdXhTdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNoYW5uZWxDbGFpbUlkXG4gICAgICAgIH0gPSBsYnJ5UmVkdXgucGFyc2VVUkkoc3ViLnVyaSk7XG4gICAgICAgIHJlZHV4U3ViTWFwW2NoYW5uZWxDbGFpbUlkXSA9IDE7XG4gICAgICB9KTtcbiAgICAgIHN0b3JlZFN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICBpZiAoIXJlZHV4U3ViTWFwW3N1Yi5jbGFpbV9pZF0pIHtcbiAgICAgICAgICBjb25zdCB1cmkgPSBgbGJyeTovLyR7c3ViLmNoYW5uZWxfbmFtZX0jJHtzdWIuY2xhaW1faWR9YDtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zVG9SZXR1cm4ucHVzaCh7XG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBjaGFubmVsTmFtZTogc3ViLmNoYW5uZWxfbmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzdWJzTm90SW5EQi5tYXAocGF5bG9hZCA9PiBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ25ldycsIHBheWxvYWQpKSkudGhlbigoKSA9PiBzdWJzY3JpcHRpb25zVG9SZXR1cm4pLmNhdGNoKCgpID0+IC8vIGxldCBpdCBmYWlsLCB3ZSB3aWxsIHRyeSBhZ2FpbiB3aGVuIHRoZSBuYXZpZ2F0ZSB0byB0aGUgc3Vic2NyaXB0aW9ucyBwYWdlXG4gICAgICBzdWJzY3JpcHRpb25zVG9SZXR1cm4pO1xuICAgIH0gLy8gREIgaXMgYWxyZWFkeSBzeW5jZWQsIGp1c3QgcmV0dXJuIHRoZSBzdWJzY3JpcHRpb25zIGluIHJlZHV4XG5cblxuICAgIHJldHVybiByZWR1eFN1YnNjcmlwdGlvbnM7XG4gIH0pLnRoZW4oc3Vic2NyaXB0aW9ucyA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfU1VCU0NSSVBUSU9OU19TVUNDRVNTLFxuICAgICAgZGF0YTogc3Vic2NyaXB0aW9uc1xuICAgIH0pO1xuICAgIGRpc3BhdGNoKGxicnlSZWR1eC5kb1Jlc29sdmVVcmlzKHN1YnNjcmlwdGlvbnMubWFwKCh7XG4gICAgICB1cmlcbiAgICB9KSA9PiB1cmkpKSk7XG4gICAgZGlzcGF0Y2goZG9DaGVja1N1YnNjcmlwdGlvbnMoKSk7XG4gIH0pLmNhdGNoKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUxcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZG9DaGVja1N1YnNjcmlwdGlvbnNJbml0ID0gKCkgPT4gZGlzcGF0Y2ggPT4ge1xuICAvLyBkb0NoZWNrU3Vic2NyaXB0aW9uc0luaXQgaXMgY2FsbGVkIGJ5IGRvRGFlbW9uUmVhZHlcbiAgLy8gc2V0VGltZW91dCBiZWxvdyBpcyBhIGhhY2sgdG8gZW5zdXJlIHJlZHV4IGlzIGh5ZHJhdGVkIHdoZW4gc3Vic2NyaXB0aW9ucyBhcmUgY2hlY2tlZFxuICAvLyB0aGlzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCA8UGVyc2lzdEdhdGU+IHdoaWNoIHJlcWl1cmVzIGEgcGFja2FnZSB1cGdyYWRlXG4gIHNldFRpbWVvdXQoKCkgPT4gZGlzcGF0Y2goZG9GZXRjaE15U3Vic2NyaXB0aW9ucygpKSwgNTAwMCk7XG4gIGNvbnN0IGNoZWNrU3Vic2NyaXB0aW9uc1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gZGlzcGF0Y2goZG9DaGVja1N1YnNjcmlwdGlvbnMoKSksIENIRUNLX1NVQlNDUklQVElPTlNfSU5URVJWQUwpO1xuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUsXG4gICAgZGF0YToge1xuICAgICAgY2hlY2tTdWJzY3JpcHRpb25zVGltZXJcbiAgICB9XG4gIH0pO1xuICBzZXRJbnRlcnZhbCgoKSA9PiBkaXNwYXRjaChkb0NoZWNrU3Vic2NyaXB0aW9ucygpKSwgQ0hFQ0tfU1VCU0NSSVBUSU9OU19JTlRFUlZBTCk7XG59O1xuY29uc3QgZG9GZXRjaFJlY29tbWVuZGVkU3Vic2NyaXB0aW9ucyA9ICgpID0+IGRpc3BhdGNoID0+IHtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVFxuICB9KTtcbiAgcmV0dXJuIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnc3VnZ2VzdCcpLnRoZW4oc3VnZ2VzdGVkID0+IGRpc3BhdGNoKHtcbiAgICB0eXBlOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1VDQ0VTUyxcbiAgICBkYXRhOiBzdWdnZXN0ZWRcbiAgfSkpLmNhdGNoKGVycm9yID0+IGRpc3BhdGNoKHtcbiAgICB0eXBlOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfRkFJTCxcbiAgICBlcnJvclxuICB9KSk7XG59O1xuY29uc3QgZG9Db21wbGV0ZUZpcnN0UnVuID0gKCkgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBTVUJTQ1JJUFRJT05fRklSU1RfUlVOX0NPTVBMRVRFRFxufSk7XG5jb25zdCBkb1Nob3dTdWdnZXN0ZWRTdWJzID0gKCkgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBWSUVXX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TXG59KTtcbmNvbnN0IGRvQ2hhbm5lbFN1YnNjcmlwdGlvbkVuYWJsZU5vdGlmaWNhdGlvbnMgPSBjaGFubmVsTmFtZSA9PiBkaXNwYXRjaCA9PiBkaXNwYXRjaCh7XG4gIHR5cGU6IENIQU5ORUxfU1VCU0NSSVBUSU9OX0VOQUJMRV9OT1RJRklDQVRJT05TLFxuICBkYXRhOiBjaGFubmVsTmFtZVxufSk7XG5jb25zdCBkb0NoYW5uZWxTdWJzY3JpcHRpb25EaXNhYmxlTm90aWZpY2F0aW9ucyA9IGNoYW5uZWxOYW1lID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRElTQUJMRV9OT1RJRklDQVRJT05TLFxuICBkYXRhOiBjaGFubmVsTmFtZVxufSk7XG5cbmZ1bmN0aW9uIGRvRmV0Y2hDb3N0SW5mb0ZvclVyaSh1cmkpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgY2xhaW0gPSBsYnJ5UmVkdXguc2VsZWN0Q2xhaW1zQnlVcmkoc3RhdGUpW3VyaV07XG4gICAgaWYgKCFjbGFpbSkgcmV0dXJuO1xuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZShjb3N0SW5mbykge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpLFxuICAgICAgICAgIGNvc3RJbmZvXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZlZSA9IGNsYWltLnZhbHVlID8gY2xhaW0udmFsdWUuZmVlIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZlZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgY29zdDogMCxcbiAgICAgICAgaW5jbHVkZXNEYXRhOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZlZS5jdXJyZW5jeSA9PT0gJ0xCQycpIHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBjb3N0OiBmZWUuYW1vdW50LFxuICAgICAgICBpbmNsdWRlc0RhdGE6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBMYnJ5aW8uZ2V0RXhjaGFuZ2VSYXRlcygpLnRoZW4oKHtcbiAgICAgICAgTEJDX1VTRFxuICAgICAgfSkgPT4ge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBjb3N0OiBmZWUuYW1vdW50IC8gTEJDX1VTRCxcbiAgICAgICAgICBpbmNsdWRlc0RhdGE6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IENIRUNLX0JMQUNLX0xJU1RFRF9DT05URU5UX0lOVEVSVkFMID0gNjAgKiA2MCAqIDEwMDA7XG5mdW5jdGlvbiBkb0ZldGNoQmxhY2tMaXN0ZWRPdXRwb2ludHMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICh7XG4gICAgICBvdXRwb2ludHNcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBzcGxpdE91dHBvaW50cyA9IFtdO1xuXG4gICAgICBpZiAob3V0cG9pbnRzKSB7XG4gICAgICAgIG91dHBvaW50cy5mb3JFYWNoKChvdXRwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBbdHhpZCwgbm91dF0gPSBvdXRwb2ludC5zcGxpdCgnOicpO1xuICAgICAgICAgIHNwbGl0T3V0cG9pbnRzW2luZGV4XSA9IHtcbiAgICAgICAgICAgIHR4aWQsXG4gICAgICAgICAgICBub3V0OiBOdW1iZXIucGFyc2VJbnQobm91dCwgMTApXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cG9pbnRzOiBzcGxpdE91dHBvaW50cyxcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gKHtcbiAgICAgIGVycm9yXG4gICAgfSkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgTGJyeWlvLmNhbGwoJ2ZpbGUnLCAnbGlzdF9ibG9ja2VkJykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvQmxhY2tMaXN0ZWRPdXRwb2ludHNTdWJzY3JpYmUoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goZG9GZXRjaEJsYWNrTGlzdGVkT3V0cG9pbnRzKCkpO1xuICAgIHNldEludGVydmFsKCgpID0+IGRpc3BhdGNoKGRvRmV0Y2hCbGFja0xpc3RlZE91dHBvaW50cygpKSwgQ0hFQ0tfQkxBQ0tfTElTVEVEX0NPTlRFTlRfSU5URVJWQUwpO1xuICB9O1xufVxuXG5jb25zdCBDSEVDS19GSUxURVJFRF9DT05URU5UX0lOVEVSVkFMID0gNjAgKiA2MCAqIDEwMDA7XG5mdW5jdGlvbiBkb0ZldGNoRmlsdGVyZWRPdXRwb2ludHMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gKHtcbiAgICAgIG91dHBvaW50c1xuICAgIH0pID0+IHtcbiAgICAgIGxldCBmb3JtYXR0ZWRPdXRwb2ludHMgPSBbXTtcblxuICAgICAgaWYgKG91dHBvaW50cykge1xuICAgICAgICBmb3JtYXR0ZWRPdXRwb2ludHMgPSBvdXRwb2ludHMubWFwKG91dHBvaW50ID0+IHtcbiAgICAgICAgICBjb25zdCBbdHhpZCwgbm91dF0gPSBvdXRwb2ludC5zcGxpdCgnOicpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eGlkLFxuICAgICAgICAgICAgbm91dDogTnVtYmVyLnBhcnNlSW50KG5vdXQsIDEwKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cG9pbnRzOiBmb3JtYXR0ZWRPdXRwb2ludHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSAoe1xuICAgICAgZXJyb3JcbiAgICB9KSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfRkFJTEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCdmaWxlJywgJ2xpc3RfZmlsdGVyZWQnKS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9O1xufVxuZnVuY3Rpb24gZG9GaWx0ZXJlZE91dHBvaW50c1N1YnNjcmliZSgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaChkb0ZldGNoRmlsdGVyZWRPdXRwb2ludHMoKSk7XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4gZGlzcGF0Y2goZG9GZXRjaEZpbHRlcmVkT3V0cG9pbnRzKCkpLCBDSEVDS19GSUxURVJFRF9DT05URU5UX0lOVEVSVkFMKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9GZXRjaEZlYXR1cmVkVXJpcyhvZmZsb2FkUmVzb2x2ZSA9IGZhbHNlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gKHtcbiAgICAgIFVyaXNcbiAgICB9KSA9PiB7XG4gICAgICBsZXQgdXJpc1RvUmVzb2x2ZSA9IFtdO1xuICAgICAgT2JqZWN0LmtleXMoVXJpcykuZm9yRWFjaChjYXRlZ29yeSA9PiB7XG4gICAgICAgIHVyaXNUb1Jlc29sdmUgPSBbLi4udXJpc1RvUmVzb2x2ZSwgLi4uVXJpc1tjYXRlZ29yeV1dO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3Rpb25zID0gW3tcbiAgICAgICAgdHlwZTogRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmlzOiBVcmlzLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfVxuICAgICAgfV07XG5cbiAgICAgIGlmICh1cmlzVG9SZXNvbHZlLmxlbmd0aCAmJiAhb2ZmbG9hZFJlc29sdmUpIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKGxicnlSZWR1eC5kb1Jlc29sdmVVcmlzKHVyaXNUb1Jlc29sdmUpKTtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmJhdGNoQWN0aW9ucyguLi5hY3Rpb25zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpczoge31cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCdmaWxlJywgJ2xpc3RfaG9tZXBhZ2UnKS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9O1xufVxuZnVuY3Rpb24gZG9GZXRjaFRyZW5kaW5nVXJpcygpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9UUkVORElOR19DT05URU5UX1NUQVJURURcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IHVyaXNUb1Jlc29sdmUgPSBkYXRhLm1hcCh1cmkgPT4gdXJpLnVybCk7XG4gICAgICBjb25zdCBhY3Rpb25zID0gW2xicnlSZWR1eC5kb1Jlc29sdmVVcmlzKHVyaXNUb1Jlc29sdmUpLCB7XG4gICAgICAgIHR5cGU6IEZFVENIX1RSRU5ESU5HX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpczogZGF0YSxcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmJhdGNoQWN0aW9ucyguLi5hY3Rpb25zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX1RSRU5ESU5HX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpczogW11cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCdmaWxlJywgJ2xpc3RfdHJlbmRpbmcnKS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9O1xufVxuXG4vLyAgICAgIFxuY29uc3QgZG9GZXRjaFZpZXdDb3VudCA9IGNsYWltSWQgPT4gZGlzcGF0Y2ggPT4ge1xuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogRkVUQ0hfVklFV19DT1VOVF9TVEFSVEVEXG4gIH0pO1xuICByZXR1cm4gTGJyeWlvLmNhbGwoJ2ZpbGUnLCAndmlld19jb3VudCcsIHtcbiAgICBjbGFpbV9pZDogY2xhaW1JZFxuICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgY29uc3Qgdmlld0NvdW50ID0gcmVzdWx0WzBdO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1ZJRVdfQ09VTlRfQ09NUExFVEVELFxuICAgICAgZGF0YToge1xuICAgICAgICBjbGFpbUlkLFxuICAgICAgICB2aWV3Q291bnRcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1ZJRVdfQ09VTlRfRkFJTEVELFxuICAgICAgZGF0YTogZXJyb3JcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZG9GZXRjaFN1YkNvdW50ID0gY2xhaW1JZCA9PiBkaXNwYXRjaCA9PiB7XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBGRVRDSF9TVUJfQ09VTlRfU1RBUlRFRFxuICB9KTtcbiAgcmV0dXJuIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnc3ViX2NvdW50Jywge1xuICAgIGNsYWltX2lkOiBjbGFpbUlkXG4gIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICBjb25zdCBzdWJDb3VudCA9IHJlc3VsdFswXTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9TVUJfQ09VTlRfQ09NUExFVEVELFxuICAgICAgZGF0YToge1xuICAgICAgICBjbGFpbUlkLFxuICAgICAgICBzdWJDb3VudFxuICAgICAgfVxuICAgIH0pO1xuICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfU1VCX0NPVU5UX0ZBSUxFRCxcbiAgICAgIGRhdGE6IGVycm9yXG4gICAgfSk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9TZXREZWZhdWx0QWNjb3VudChzdWNjZXNzLCBmYWlsdXJlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU0VUX0RFRkFVTFRfQUNDT1VOVFxuICAgIH0pO1xuICAgIGxicnlSZWR1eC5MYnJ5LmFjY291bnRfbGlzdCgpLnRoZW4oYWNjb3VudExpc3QgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYmNfbWFpbm5ldDogYWNjb3VudHNcbiAgICAgIH0gPSBhY2NvdW50TGlzdDtcbiAgICAgIGxldCBkZWZhdWx0SWQ7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjb3VudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFjY291bnRzW2ldLnNhdG9zaGlzID4gMCkge1xuICAgICAgICAgIGRlZmF1bHRJZCA9IGFjY291bnRzW2ldLmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IC8vIEluIGEgY2FzZSB3aGVyZSB0aGVyZSdzIG5vIGJhbGFuY2Ugb24gZWl0aGVyIGFjY291bnRcbiAgICAgIC8vIGFzc3VtZSB0aGUgc2Vjb25kICh3aGljaCBpcyBjcmVhdGVkIGFmdGVyIHN5bmMpIGFzIGRlZmF1bHRcblxuXG4gICAgICBpZiAoIWRlZmF1bHRJZCAmJiBhY2NvdW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlZmF1bHRJZCA9IGFjY291bnRzWzFdLmlkO1xuICAgICAgfSAvLyBTZXQgdGhlIGRlZmF1bHQgYWNjb3VudFxuXG5cbiAgICAgIGlmIChkZWZhdWx0SWQpIHtcbiAgICAgICAgbGJyeVJlZHV4LkxicnkuYWNjb3VudF9zZXQoe1xuICAgICAgICAgIGFjY291bnRfaWQ6IGRlZmF1bHRJZCxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICBzdWNjZXNzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGlmIChmYWlsdXJlKSB7XG4gICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZmFpbHVyZSkge1xuICAgICAgICAvLyBubyBkZWZhdWx0IGFjY291bnQgdG8gc2V0XG4gICAgICAgIGZhaWx1cmUoJ0NvdWxkIG5vdCBzZXQgYSBkZWZhdWx0IGFjY291bnQnKTsgLy8gZmFpbFxuICAgICAgfVxuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBpZiAoZmFpbHVyZSkge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1NldFN5bmMob2xkSGFzaCwgbmV3SGFzaCwgZGF0YSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFVF9TWU5DX1NUQVJURURcbiAgICB9KTtcbiAgICByZXR1cm4gTGJyeWlvLmNhbGwoJ3N5bmMnLCAnc2V0Jywge1xuICAgICAgb2xkX2hhc2g6IG9sZEhhc2gsXG4gICAgICBuZXdfaGFzaDogbmV3SGFzaCxcbiAgICAgIGRhdGFcbiAgICB9LCAncG9zdCcpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCFyZXNwb25zZS5oYXNoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdObyBoYXNoIHJldHVybmVkIGZvciBzeW5jL3NldC4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc3luY0hhc2g6IHJlc3BvbnNlLmhhc2hcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTRVRfU1lOQ19GQUlMRUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvR2V0U3luYyhwYXNzZWRQYXNzd29yZCwgY2FsbGJhY2spIHtcbiAgY29uc3QgcGFzc3dvcmQgPSBwYXNzZWRQYXNzd29yZCA9PT0gbnVsbCB8fCBwYXNzZWRQYXNzd29yZCA9PT0gdW5kZWZpbmVkID8gJycgOiBwYXNzZWRQYXNzd29yZDtcblxuICBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhlcnJvciwgaGFzTmV3RGF0YSkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY29uZCBhcmd1bWVudCBwYXNzZWQgdG8gXCJkb0dldFN5bmNcIiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soZXJyb3IsIGhhc05ld0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogR0VUX1NZTkNfU1RBUlRFRFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBsYnJ5UmVkdXguTGJyeS53YWxsZXRfc3RhdHVzKCkudGhlbihzdGF0dXMgPT4ge1xuICAgICAgaWYgKHN0YXR1cy5pc19sb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIGxicnlSZWR1eC5MYnJ5LndhbGxldF91bmxvY2soe1xuICAgICAgICAgIHBhc3N3b3JkXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBXYWxsZXQgaXMgYWxyZWFkeSB1bmxvY2tlZFxuXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pLnRoZW4oaXNVbmxvY2tlZCA9PiB7XG4gICAgICBpZiAoaXNVbmxvY2tlZCkge1xuICAgICAgICByZXR1cm4gbGJyeVJlZHV4Lkxicnkuc3luY19oYXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEudW5sb2NrRmFpbGVkID0gdHJ1ZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0pLnRoZW4oaGFzaCA9PiBMYnJ5aW8uY2FsbCgnc3luYycsICdnZXQnLCB7XG4gICAgICBoYXNoXG4gICAgfSwgJ3Bvc3QnKSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBjb25zdCBzeW5jSGFzaCA9IHJlc3BvbnNlLmhhc2g7XG4gICAgICBkYXRhLnN5bmNIYXNoID0gc3luY0hhc2g7XG4gICAgICBkYXRhLnN5bmNEYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGRhdGEuY2hhbmdlZCA9IHJlc3BvbnNlLmNoYW5nZWQ7XG4gICAgICBkYXRhLmhhc1N5bmNlZFdhbGxldCA9IHRydWU7XG5cbiAgICAgIGlmIChyZXNwb25zZS5jaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiBsYnJ5UmVkdXguTGJyeS5zeW5jX2FwcGx5KHtcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgIGJsb2NraW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgICAgIGhhbmRsZUNhbGxiYWNrKG51bGwsIGRhdGEuY2hhbmdlZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBoYXNoOiB3YWxsZXRIYXNoLFxuICAgICAgICBkYXRhOiB3YWxsZXREYXRhXG4gICAgICB9ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmICh3YWxsZXRIYXNoICE9PSBkYXRhLnN5bmNIYXNoKSB7XG4gICAgICAgIC8vIGRpZmZlcmVudCBsb2NhbCBoYXNoLCBuZWVkIHRvIHN5bmNocm9uaXNlXG4gICAgICAgIGRpc3BhdGNoKGRvU2V0U3luYyhkYXRhLnN5bmNIYXNoLCB3YWxsZXRIYXNoLCB3YWxsZXREYXRhKSk7XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogR0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICBkYXRhXG4gICAgICB9KTtcbiAgICAgIGhhbmRsZUNhbGxiYWNrKG51bGwsIGRhdGEuY2hhbmdlZCk7XG4gICAgfSkuY2F0Y2goc3luY0F0dGVtcHRFcnJvciA9PiB7XG4gICAgICBpZiAoZGF0YS51bmxvY2tGYWlsZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEdFVF9TWU5DX0ZBSUxFRCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBlcnJvcjogc3luY0F0dGVtcHRFcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBhc3N3b3JkICE9PSAnJykge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFNZTkNfQVBQTFlfQkFEX1BBU1NXT1JEXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVDYWxsYmFjayhzeW5jQXR0ZW1wdEVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5oYXNTeW5jZWRXYWxsZXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnRXJyb3IgZ2V0dGluZyBzeW5jZWQgd2FsbGV0JztcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEdFVF9TWU5DX0ZBSUxFRCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vIFRlbXAgc29sdXRpb24gdW50aWwgd2UgaGF2ZSBhIGJhZCBwYXNzd29yZCBlcnJvciBjb2RlXG4gICAgICAgIC8vIERvbid0IGZhaWwgb24gYmxhbmsgcGFzc3dvcmRzIHNvIHdlIGRvbid0IHNob3cgYSBcInBhc3N3b3JkIGVycm9yXCIgbWVzc2FnZVxuICAgICAgICAvLyBiZWZvcmUgdXNlcnMgaGF2ZSBldmVyIGVudGVyZWQgYSBwYXNzd29yZFxuXG4gICAgICAgIGlmIChwYXNzd29yZCAhPT0gJycpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBTWU5DX0FQUExZX0JBRF9QQVNTV09SRFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlQ2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgYSBzeW5jZWQgd2FsbGV0XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRVRfU1lOQ19DT01QTEVURUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaGFzU3luY2VkV2FsbGV0OiBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNIYXNoOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gY2FsbCBzeW5jX2FwcGx5IHRvIGdldCBkYXRhIHRvIHN5bmNcbiAgICAgICAgLy8gZmlyc3QgdGltZSBzeW5jLiB1c2UgYW55IHN0cmluZyBmb3Igb2xkIGhhc2hcblxuICAgICAgICBsYnJ5UmVkdXguTGJyeS5zeW5jX2FwcGx5KHtcbiAgICAgICAgICBwYXNzd29yZFxuICAgICAgICB9KS50aGVuKCh7XG4gICAgICAgICAgaGFzaDogd2FsbGV0SGFzaCxcbiAgICAgICAgICBkYXRhOiBzeW5jQXBwbHlEYXRhXG4gICAgICAgIH0pID0+IHtcbiAgICAgICAgICBkaXNwYXRjaChkb1NldFN5bmMoJycsIHdhbGxldEhhc2gsIHN5bmNBcHBseURhdGEsIHBhc3N3b3JkKSk7XG4gICAgICAgICAgaGFuZGxlQ2FsbGJhY2soKTtcbiAgICAgICAgfSkuY2F0Y2goc3luY0FwcGx5RXJyb3IgPT4ge1xuICAgICAgICAgIGhhbmRsZUNhbGxiYWNrKHN5bmNBcHBseUVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1N5bmNBcHBseShzeW5jSGFzaCwgc3luY0RhdGEsIHBhc3N3b3JkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU1lOQ19BUFBMWV9TVEFSVEVEXG4gICAgfSk7XG4gICAgbGJyeVJlZHV4Lkxicnkuc3luY19hcHBseSh7XG4gICAgICBwYXNzd29yZCxcbiAgICAgIGRhdGE6IHN5bmNEYXRhXG4gICAgfSkudGhlbigoe1xuICAgICAgaGFzaDogd2FsbGV0SGFzaCxcbiAgICAgIGRhdGE6IHdhbGxldERhdGFcbiAgICB9KSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNZTkNfQVBQTFlfQ09NUExFVEVEXG4gICAgICB9KTtcblxuICAgICAgaWYgKHdhbGxldEhhc2ggIT09IHN5bmNIYXNoKSB7XG4gICAgICAgIC8vIGRpZmZlcmVudCBsb2NhbCBoYXNoLCBuZWVkIHRvIHN5bmNocm9uaXNlXG4gICAgICAgIGRpc3BhdGNoKGRvU2V0U3luYyhzeW5jSGFzaCwgd2FsbGV0SGFzaCwgd2FsbGV0RGF0YSkpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU1lOQ19BUFBMWV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvcjogJ0ludmFsaWQgcGFzc3dvcmQgc3BlY2lmaWVkLiBQbGVhc2UgZW50ZXIgdGhlIHBhc3N3b3JkIGZvciB5b3VyIHByZXZpb3VzbHkgc3luY2hyb25pc2VkIHdhbGxldC4nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9DaGVja1N5bmMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogR0VUX1NZTkNfU1RBUlRFRFxuICAgIH0pO1xuICAgIGxicnlSZWR1eC5MYnJ5LnN5bmNfaGFzaCgpLnRoZW4oaGFzaCA9PiB7XG4gICAgICBMYnJ5aW8uY2FsbCgnc3luYycsICdnZXQnLCB7XG4gICAgICAgIGhhc2hcbiAgICAgIH0sICdwb3N0JykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgaGFzU3luY2VkV2FsbGV0OiB0cnVlLFxuICAgICAgICAgIHN5bmNIYXNoOiByZXNwb25zZS5oYXNoLFxuICAgICAgICAgIHN5bmNEYXRhOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgIGhhc2hDaGFuZ2VkOiByZXNwb25zZS5jaGFuZ2VkXG4gICAgICAgIH07XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRVRfU1lOQ19DT01QTEVURUQsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgYSBzeW5jZWQgd2FsbGV0XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRVRfU1lOQ19DT01QTEVURUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaGFzU3luY2VkV2FsbGV0OiBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNIYXNoOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9SZXNldFN5bmMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBTWU5DX1JFU0VUXG4gICAgfSk7XG4gICAgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRvU3luY0VuY3J5cHRBbmREZWNyeXB0KG9sZFBhc3N3b3JkLCBuZXdQYXNzd29yZCwgZW5jcnlwdCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICByZXR1cm4gbGJyeVJlZHV4Lkxicnkuc3luY19oYXNoKCkudGhlbihoYXNoID0+IExicnlpby5jYWxsKCdzeW5jJywgJ2dldCcsIHtcbiAgICAgIGhhc2hcbiAgICB9LCAncG9zdCcpKS50aGVuKHN5bmNHZXRSZXNwb25zZSA9PiB7XG4gICAgICBkYXRhLm9sZEhhc2ggPSBzeW5jR2V0UmVzcG9uc2UuaGFzaDtcbiAgICAgIHJldHVybiBsYnJ5UmVkdXguTGJyeS5zeW5jX2FwcGx5KHtcbiAgICAgICAgcGFzc3dvcmQ6IG9sZFBhc3N3b3JkLFxuICAgICAgICBkYXRhOiBzeW5jR2V0UmVzcG9uc2UuZGF0YVxuICAgICAgfSk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9XYWxsZXRFbmNyeXB0KG5ld1Bhc3N3b3JkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9XYWxsZXREZWNyeXB0KCkpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4gbGJyeVJlZHV4Lkxicnkuc3luY19hcHBseSh7XG4gICAgICBwYXNzd29yZDogbmV3UGFzc3dvcmRcbiAgICB9KSkudGhlbihzeW5jQXBwbHlSZXNwb25zZSA9PiB7XG4gICAgICBpZiAoc3luY0FwcGx5UmVzcG9uc2UuaGFzaCAhPT0gZGF0YS5vbGRIYXNoKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChkb1NldFN5bmMoZGF0YS5vbGRIYXNoLCBzeW5jQXBwbHlSZXNwb25zZS5oYXNoLCBzeW5jQXBwbHlSZXNwb25zZS5kYXRhKSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gIH07XG59XG5cbi8vICAgICAgXG5jb25zdCBkb1VwZGF0ZVVwbG9hZFByb2dyZXNzID0gKHByb2dyZXNzLCBwYXJhbXMsIHhocikgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBVUERBVEVfVVBMT0FEX1BST0dSRVNTLFxuICBkYXRhOiB7XG4gICAgcHJvZ3Jlc3MsXG4gICAgcGFyYW1zLFxuICAgIHhoclxuICB9XG59KTtcblxuY29uc3QgcmVkdWNlcnMgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSQxID0ge1xuICBhdXRoZW50aWNhdGluZzogZmFsc2Vcbn07XG5cbnJlZHVjZXJzW0dFTkVSQVRFX0FVVEhfVE9LRU5fRkFJTFVSRV0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBhdXRoVG9rZW46IG51bGwsXG4gIGF1dGhlbnRpY2F0aW5nOiBmYWxzZVxufSk7XG5cbnJlZHVjZXJzW0dFTkVSQVRFX0FVVEhfVE9LRU5fU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBhdXRoZW50aWNhdGluZzogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzW0dFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgYXV0aFRva2VuOiBhY3Rpb24uZGF0YS5hdXRoVG9rZW4sXG4gIGF1dGhlbnRpY2F0aW5nOiBmYWxzZVxufSk7XG5cbmZ1bmN0aW9uIGF1dGhSZWR1Y2VyKHN0YXRlID0gZGVmYXVsdFN0YXRlJDEsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnNbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuY29uc3QgcmVkdWNlcnMkMSA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDIgPSB7XG4gIGZldGNoaW5nOiBmYWxzZSxcbiAgY2xhaW1lZFJld2FyZHNCeUlkOiB7fSxcbiAgLy8gaWQgPT4gcmV3YXJkXG4gIHVuY2xhaW1lZFJld2FyZHM6IFtdLFxuICBjbGFpbVBlbmRpbmdCeVR5cGU6IHt9LFxuICBjbGFpbUVycm9yc0J5VHlwZToge30sXG4gIHJld2FyZGVkQ29udGVudENsYWltSWRzOiBbXVxufTtcblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRTX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZmV0Y2hpbmc6IHRydWVcbn0pO1xuXG5yZWR1Y2VycyQxW2xicnlSZWR1eC5BQ1RJT05TLkZFVENIX1JFV0FSRFNfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB1c2VyUmV3YXJkc1xuICB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IHVuY2xhaW1lZFJld2FyZHMgPSBbXTtcbiAgY29uc3QgY2xhaW1lZFJld2FyZHMgPSB7fTtcbiAgdXNlclJld2FyZHMuZm9yRWFjaChyZXdhcmQgPT4ge1xuICAgIGlmIChyZXdhcmQudHJhbnNhY3Rpb25faWQpIHtcbiAgICAgIGNsYWltZWRSZXdhcmRzW3Jld2FyZC5pZF0gPSByZXdhcmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuY2xhaW1lZFJld2FyZHMucHVzaChyZXdhcmQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGNsYWltZWRSZXdhcmRzQnlJZDogY2xhaW1lZFJld2FyZHMsXG4gICAgdW5jbGFpbWVkUmV3YXJkcyxcbiAgICBmZXRjaGluZzogZmFsc2VcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzZXRDbGFpbVJld2FyZFN0YXRlKHN0YXRlLCByZXdhcmQsIGlzQ2xhaW1pbmcsIGVycm9yTWVzc2FnZSA9ICcnKSB7XG4gIGNvbnN0IG5ld0NsYWltUGVuZGluZ0J5VHlwZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltUGVuZGluZ0J5VHlwZSk7XG4gIGNvbnN0IG5ld0NsYWltRXJyb3JzQnlUeXBlID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2xhaW1FcnJvcnNCeVR5cGUpOyAvLyBDdXJyZW50bHksIGZvciBtdWx0aXBsZSByZXdhcmRzIG9mIHRoZSBzYW1lIHR5cGUsIHRoZXkgd2lsbCBib3RoIHNob3cgXCJjbGFpbWluZ1wiIHdoZW4gb25lIGlzIGJlYWN1c2Ugd2UgdHJhY2sgdGhpcyBieSBgcmV3YXJkX3R5cGVgXG4gIC8vIFRvIGZpeCB0aGlzIHdlIHdpbGwgbmVlZCB0byB1c2UgYGNsYWltX2NvZGVgIGluc3RlYWQsIGFuZCBjaGFuZ2UgYWxsIHNlbGVjdG9ycyB0byBtYXRjaFxuXG4gIGlmIChpc0NsYWltaW5nKSB7XG4gICAgbmV3Q2xhaW1QZW5kaW5nQnlUeXBlW3Jld2FyZC5yZXdhcmRfdHlwZV0gPSBpc0NsYWltaW5nO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBuZXdDbGFpbVBlbmRpbmdCeVR5cGVbcmV3YXJkLnJld2FyZF90eXBlXTtcbiAgfVxuXG4gIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICBuZXdDbGFpbUVycm9yc0J5VHlwZVtyZXdhcmQucmV3YXJkX3R5cGVdID0gZXJyb3JNZXNzYWdlO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBuZXdDbGFpbUVycm9yc0J5VHlwZVtyZXdhcmQucmV3YXJkX3R5cGVdO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgY2xhaW1QZW5kaW5nQnlUeXBlOiBuZXdDbGFpbVBlbmRpbmdCeVR5cGUsXG4gICAgY2xhaW1FcnJvcnNCeVR5cGU6IG5ld0NsYWltRXJyb3JzQnlUeXBlXG4gIH0pO1xufVxuXG5yZWR1Y2VycyQxW2xicnlSZWR1eC5BQ1RJT05TLkNMQUlNX1JFV0FSRF9TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXdhcmRcbiAgfSA9IGFjdGlvbi5kYXRhO1xuICByZXR1cm4gc2V0Q2xhaW1SZXdhcmRTdGF0ZShzdGF0ZSwgcmV3YXJkLCB0cnVlLCAnJyk7XG59O1xuXG5yZWR1Y2VycyQxW2xicnlSZWR1eC5BQ1RJT05TLkNMQUlNX1JFV0FSRF9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXdhcmRcbiAgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCB7XG4gICAgdW5jbGFpbWVkUmV3YXJkc1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IGluZGV4ID0gdW5jbGFpbWVkUmV3YXJkcy5maW5kSW5kZXgodXIgPT4gdXIuY2xhaW1fY29kZSA9PT0gcmV3YXJkLmNsYWltX2NvZGUpO1xuICB1bmNsYWltZWRSZXdhcmRzLnNwbGljZShpbmRleCwgMSk7XG4gIGNvbnN0IHtcbiAgICBjbGFpbWVkUmV3YXJkc0J5SWRcbiAgfSA9IHN0YXRlO1xuICBjbGFpbWVkUmV3YXJkc0J5SWRbcmV3YXJkLmlkXSA9IHJld2FyZDtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlLFxuICAgIHVuY2xhaW1lZFJld2FyZHM6IFsuLi51bmNsYWltZWRSZXdhcmRzXSxcbiAgICBjbGFpbWVkUmV3YXJkc0J5SWQ6IHsgLi4uY2xhaW1lZFJld2FyZHNCeUlkXG4gICAgfVxuICB9O1xuICByZXR1cm4gc2V0Q2xhaW1SZXdhcmRTdGF0ZShuZXdTdGF0ZSwgcmV3YXJkLCBmYWxzZSwgJycpO1xufTtcblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5DTEFJTV9SRVdBUkRfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgcmV3YXJkLFxuICAgIGVycm9yXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgcmV0dXJuIHNldENsYWltUmV3YXJkU3RhdGUoc3RhdGUsIHJld2FyZCwgZmFsc2UsIGVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnKTtcbn07XG5cbnJlZHVjZXJzJDFbbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX0NMRUFSX0VSUk9SXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXdhcmRcbiAgfSA9IGFjdGlvbi5kYXRhO1xuICByZXR1cm4gc2V0Q2xhaW1SZXdhcmRTdGF0ZShzdGF0ZSwgcmV3YXJkLCBzdGF0ZS5jbGFpbVBlbmRpbmdCeVR5cGVbcmV3YXJkLnJld2FyZF90eXBlXSwgJycpO1xufTtcblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYWltSWRzXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgcmV3YXJkZWRDb250ZW50Q2xhaW1JZHM6IGNsYWltSWRzXG4gIH0pO1xufTtcblxuZnVuY3Rpb24gcmV3YXJkc1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkMiwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQxW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbmNvbnN0IHJlZHVjZXJzJDIgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSQzID0ge1xuICBhdXRoZW50aWNhdGlvbklzUGVuZGluZzogZmFsc2UsXG4gIHVzZXJJc1BlbmRpbmc6IGZhbHNlLFxuICBlbWFpbE5ld0lzUGVuZGluZzogZmFsc2UsXG4gIGVtYWlsTmV3RXJyb3JNZXNzYWdlOiAnJyxcbiAgZW1haWxUb1ZlcmlmeTogJycsXG4gIGVtYWlsQWxyZWFkeUV4aXN0czogZmFsc2UsXG4gIHJlc2VuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsOiBmYWxzZSxcbiAgaW52aXRlTmV3RXJyb3JNZXNzYWdlOiAnJyxcbiAgaW52aXRlTmV3SXNQZW5kaW5nOiBmYWxzZSxcbiAgaW52aXRlU3RhdHVzSXNQZW5kaW5nOiBmYWxzZSxcbiAgaW52aXRlc1JlbWFpbmluZzogdW5kZWZpbmVkLFxuICBpbnZpdGVlczogdW5kZWZpbmVkLFxuICByZWZlcnJhbExpbms6IHVuZGVmaW5lZCxcbiAgcmVmZXJyYWxDb2RlOiB1bmRlZmluZWQsXG4gIHVzZXI6IHVuZGVmaW5lZCxcbiAgYWNjZXNzVG9rZW46IHVuZGVmaW5lZCxcbiAgeW91dHViZUNoYW5uZWxJbXBvcnRQZW5kaW5nOiBmYWxzZSxcbiAgeW91dHViZUNoYW5uZWxJbXBvcnRFcnJvck1lc3NhZ2U6ICcnLFxuICByZWZlcnJlclNldElzUGVuZGluZzogZmFsc2UsXG4gIHJlZmVycmVyU2V0RXJyb3I6ICcnXG59O1xuXG5yZWR1Y2VycyQyW0FVVEhFTlRJQ0FUSU9OX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgYXV0aGVudGljYXRpb25Jc1BlbmRpbmc6IHRydWUsXG4gIHVzZXJJc1BlbmRpbmc6IHRydWUsXG4gIGFjY2Vzc1Rva2VuOiBkZWZhdWx0U3RhdGUkMy5hY2Nlc3NUb2tlblxufSk7XG5cbnJlZHVjZXJzJDJbQVVUSEVOVElDQVRJT05fU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgYXV0aGVudGljYXRpb25Jc1BlbmRpbmc6IGZhbHNlLFxuICB1c2VySXNQZW5kaW5nOiBmYWxzZSxcbiAgYWNjZXNzVG9rZW46IGFjdGlvbi5kYXRhLmFjY2Vzc1Rva2VuLFxuICB1c2VyOiBhY3Rpb24uZGF0YS51c2VyXG59KTtcblxucmVkdWNlcnMkMltBVVRIRU5USUNBVElPTl9GQUlMVVJFXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGF1dGhlbnRpY2F0aW9uSXNQZW5kaW5nOiBmYWxzZSxcbiAgdXNlcklzUGVuZGluZzogZmFsc2UsXG4gIHVzZXI6IG51bGxcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfRkVUQ0hfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICB1c2VySXNQZW5kaW5nOiB0cnVlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0ZFVENIX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHVzZXJJc1BlbmRpbmc6IGZhbHNlLFxuICB1c2VyOiBhY3Rpb24uZGF0YS51c2VyLFxuICBlbWFpbFRvVmVyaWZ5OiBhY3Rpb24uZGF0YS51c2VyLmhhc192ZXJpZmllZF9lbWFpbCA/IG51bGwgOiBzdGF0ZS5lbWFpbFRvVmVyaWZ5XG59KTtcblxucmVkdWNlcnMkMltVU0VSX0ZFVENIX0ZBSUxVUkVdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgdXNlcklzUGVuZGluZzogdHJ1ZSxcbiAgdXNlcjogbnVsbFxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9ORVdfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB1c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlcik7XG4gIHVzZXIuY291bnRyeV9jb2RlID0gYWN0aW9uLmRhdGEuY291bnRyeV9jb2RlO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBwaG9uZU5ld0lzUGVuZGluZzogdHJ1ZSxcbiAgICBwaG9uZU5ld0Vycm9yTWVzc2FnZTogJycsXG4gICAgdXNlclxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9ORVdfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVUb1ZlcmlmeTogYWN0aW9uLmRhdGEucGhvbmUsXG4gIHBob25lTmV3SXNQZW5kaW5nOiBmYWxzZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9SRVNFVF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBwaG9uZVRvVmVyaWZ5OiBudWxsXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1BIT05FX05FV19GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBwaG9uZU5ld0lzUGVuZGluZzogZmFsc2UsXG4gIHBob25lTmV3RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBwaG9uZVZlcmlmeUlzUGVuZGluZzogdHJ1ZSxcbiAgcGhvbmVWZXJpZnlFcnJvck1lc3NhZ2U6ICcnXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBwaG9uZVRvVmVyaWZ5OiAnJyxcbiAgcGhvbmVWZXJpZnlJc1BlbmRpbmc6IGZhbHNlLFxuICB1c2VyOiBhY3Rpb24uZGF0YS51c2VyXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1BIT05FX1ZFUklGWV9GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBwaG9uZVZlcmlmeUlzUGVuZGluZzogZmFsc2UsXG4gIHBob25lVmVyaWZ5RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9ORVdfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBlbWFpbE5ld0lzUGVuZGluZzogdHJ1ZSxcbiAgZW1haWxOZXdFcnJvck1lc3NhZ2U6ICcnLFxuICBlbWFpbEFscmVhZHlFeGlzdHM6IGZhbHNlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX05FV19TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51c2VyKTtcbiAgdXNlci5wcmltYXJ5X2VtYWlsID0gYWN0aW9uLmRhdGEuZW1haWw7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGVtYWlsVG9WZXJpZnk6IGFjdGlvbi5kYXRhLmVtYWlsLFxuICAgIGVtYWlsTmV3SXNQZW5kaW5nOiBmYWxzZSxcbiAgICB1c2VyXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX05FV19FWElTVFNdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxBbHJlYWR5RXhpc3RzOiB0cnVlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX05FV19GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBlbWFpbE5ld0lzUGVuZGluZzogZmFsc2UsXG4gIGVtYWlsTmV3RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBlbWFpbFZlcmlmeUlzUGVuZGluZzogdHJ1ZSxcbiAgZW1haWxWZXJpZnlFcnJvck1lc3NhZ2U6ICcnXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51c2VyKTtcbiAgdXNlci5wcmltYXJ5X2VtYWlsID0gYWN0aW9uLmRhdGEuZW1haWw7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGVtYWlsVG9WZXJpZnk6ICcnLFxuICAgIGVtYWlsVmVyaWZ5SXNQZW5kaW5nOiBmYWxzZSxcbiAgICB1c2VyXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBlbWFpbFZlcmlmeUlzUGVuZGluZzogZmFsc2UsXG4gIGVtYWlsVmVyaWZ5RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfU0VUXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBlbWFpbFRvVmVyaWZ5OiBhY3Rpb24uZGF0YS5lbWFpbFxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBpZGVudGl0eVZlcmlmeUlzUGVuZGluZzogdHJ1ZSxcbiAgaWRlbnRpdHlWZXJpZnlFcnJvck1lc3NhZ2U6ICcnXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBpZGVudGl0eVZlcmlmeUlzUGVuZGluZzogZmFsc2UsXG4gIGlkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlOiAnJyxcbiAgdXNlcjogYWN0aW9uLmRhdGEudXNlclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaWRlbnRpdHlWZXJpZnlJc1BlbmRpbmc6IGZhbHNlLFxuICBpZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW0ZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0b2tlblxuICB9ID0gYWN0aW9uLmRhdGE7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGFjY2Vzc1Rva2VuOiB0b2tlblxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaW52aXRlU3RhdHVzSXNQZW5kaW5nOiB0cnVlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaW52aXRlU3RhdHVzSXNQZW5kaW5nOiBmYWxzZSxcbiAgaW52aXRlc1JlbWFpbmluZzogYWN0aW9uLmRhdGEuaW52aXRlc1JlbWFpbmluZyxcbiAgaW52aXRlZXM6IGFjdGlvbi5kYXRhLmludml0ZWVzLFxuICByZWZlcnJhbExpbms6IGFjdGlvbi5kYXRhLnJlZmVycmFsTGluayxcbiAgcmVmZXJyYWxDb2RlOiBhY3Rpb24uZGF0YS5yZWZlcnJhbENvZGVcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSU5WSVRFX05FV19TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZU5ld0lzUGVuZGluZzogdHJ1ZSxcbiAgaW52aXRlTmV3RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JTlZJVEVfTkVXX1NVQ0NFU1NdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaW52aXRlTmV3SXNQZW5kaW5nOiBmYWxzZSxcbiAgaW52aXRlTmV3RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JTlZJVEVfTkVXX0ZBSUxVUkVdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZU5ld0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZU5ld0Vycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3IubWVzc2FnZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX0ZBSUxVUkVdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaW52aXRlU3RhdHVzSXNQZW5kaW5nOiBmYWxzZSxcbiAgaW52aXRlc1JlbWFpbmluZzogbnVsbCxcbiAgaW52aXRlZXM6IG51bGxcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICB5b3V0dWJlQ2hhbm5lbEltcG9ydFBlbmRpbmc6IHRydWUsXG4gIHlvdXR1YmVDaGFubmVsSW1wb3J0RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHRvdGFsID0gYWN0aW9uLmRhdGEucmVkdWNlKChhY2MsIHZhbHVlKSA9PiBhY2MgKyB2YWx1ZS50b3RhbF9wdWJsaXNoZWRfdmlkZW9zLCAwKTtcbiAgY29uc3QgY29tcGxldGUgPSBhY3Rpb24uZGF0YS5yZWR1Y2UoKGFjYywgdmFsdWUpID0+IGFjYyArIHZhbHVlLnRvdGFsX3RyYW5zZmVycmVkLCAwKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgeW91dHViZUNoYW5uZWxJbXBvcnRQZW5kaW5nOiBmYWxzZSxcbiAgICB5b3V0dWJlQ2hhbm5lbEltcG9ydEVycm9yTWVzc2FnZTogJycsXG4gICAgeW91dHViZUNoYW5uZWxJbXBvcnRUb3RhbDogdG90YWwsXG4gICAgeW91dHViZUNoYW5uZWxJbXBvcnRDb21wbGV0ZTogY29tcGxldGVcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW1VTRVJfWU9VVFVCRV9JTVBPUlRfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgeW91dHViZUNoYW5uZWxJbXBvcnRQZW5kaW5nOiBmYWxzZSxcbiAgeW91dHViZUNoYW5uZWxJbXBvcnRFcnJvck1lc3NhZ2U6IGFjdGlvbi5kYXRhXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHJlc2VuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsOiB0cnVlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVUNDRVNTXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHJlc2VuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsOiBmYWxzZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfRkFJTFVSRV0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICByZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbDogZmFsc2Vcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfU0VUX1JFRkVSUkVSX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcmVmZXJyZXJTZXRJc1BlbmRpbmc6IHRydWUsXG4gIHJlZmVycmVyU2V0RXJyb3I6IGRlZmF1bHRTdGF0ZSQzLnJlZmVycmVyU2V0RXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfU0VUX1JFRkVSUkVSX1NVQ0NFU1NdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcmVmZXJyZXJTZXRJc1BlbmRpbmc6IGZhbHNlLFxuICByZWZlcnJlclNldEVycm9yOiBkZWZhdWx0U3RhdGUkMy5yZWZlcnJlclNldEVycm9yXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICByZWZlcnJlclNldElzUGVuZGluZzogZmFsc2UsXG4gIHJlZmVycmVyU2V0RXJyb3I6IGFjdGlvbi5kYXRhLmVycm9yLm1lc3NhZ2Vcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfU0VUX1JFRkVSUkVSX1JFU0VUXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHJlZmVycmVyU2V0SXNQZW5kaW5nOiBmYWxzZSxcbiAgcmVmZXJyZXJTZXRFcnJvcjogZGVmYXVsdFN0YXRlJDMucmVmZXJyZXJTZXRFcnJvclxufSk7XG5cbmZ1bmN0aW9uIHVzZXJSZWR1Y2VyKHN0YXRlID0gZGVmYXVsdFN0YXRlJDMsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnMkMlthY3Rpb24udHlwZV07XG4gIGlmIChoYW5kbGVyKSByZXR1cm4gaGFuZGxlcihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5jb25zdCBkZWZhdWx0U3RhdGUkNCA9IHtcbiAgZmV0Y2hpbmc6IHt9LFxuICBieVVyaToge31cbn07XG5jb25zdCBjb3N0SW5mb1JlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX0NPU1RfSU5GT19TVEFSVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmlcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3RmV0Y2hpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5mZXRjaGluZyk7XG4gICAgbmV3RmV0Y2hpbmdbdXJpXSA9IHRydWU7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBmZXRjaGluZzogbmV3RmV0Y2hpbmdcbiAgICB9O1xuICB9LFxuICBbRkVUQ0hfQ09TVF9JTkZPX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdXJpLFxuICAgICAgY29zdEluZm9cbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3QnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieVVyaSk7XG4gICAgY29uc3QgbmV3RmV0Y2hpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5mZXRjaGluZyk7XG4gICAgbmV3QnlVcmlbdXJpXSA9IGNvc3RJbmZvO1xuICAgIGRlbGV0ZSBuZXdGZXRjaGluZ1t1cmldO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgYnlVcmk6IG5ld0J5VXJpLFxuICAgICAgZmV0Y2hpbmc6IG5ld0ZldGNoaW5nXG4gICAgfTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDQpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkNSA9IHtcbiAgZmV0Y2hpbmdCbGFja0xpc3RlZE91dHBvaW50czogZmFsc2UsXG4gIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHNTdWNjZWVkOiB1bmRlZmluZWQsXG4gIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiB1bmRlZmluZWRcbn07XG5jb25zdCBibGFja2xpc3RSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9TVEFSVEVEXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgZmV0Y2hpbmdCbGFja0xpc3RlZE91dHBvaW50czogdHJ1ZVxuICB9KSxcbiAgW0ZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3V0cG9pbnRzLFxuICAgICAgc3VjY2Vzc1xuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHM6IGZhbHNlLFxuICAgICAgZmV0Y2hpbmdCbGFja0xpc3RlZE91dHBvaW50c1N1Y2NlZWQ6IHN1Y2Nlc3MsXG4gICAgICBibGFja0xpc3RlZE91dHBvaW50czogb3V0cG9pbnRzXG4gICAgfTtcbiAgfSxcbiAgW0ZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3IsXG4gICAgICBzdWNjZXNzXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmdCbGFja0xpc3RlZE91dHBvaW50czogZmFsc2UsXG4gICAgICBmZXRjaGluZ0JsYWNrTGlzdGVkT3V0cG9pbnRzU3VjY2VlZDogc3VjY2VzcyxcbiAgICAgIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHNFcnJvcjogZXJyb3JcbiAgICB9O1xuICB9XG59LCBkZWZhdWx0U3RhdGUkNSk7XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZSQ2ID0ge1xuICBsb2FkaW5nOiBmYWxzZSxcbiAgZmlsdGVyZWRPdXRwb2ludHM6IHVuZGVmaW5lZFxufTtcbmNvbnN0IGZpbHRlcmVkUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9TVEFSVEVEXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgbG9hZGluZzogdHJ1ZVxuICB9KSxcbiAgW0ZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvdXRwb2ludHNcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIGZpbHRlcmVkT3V0cG9pbnRzOiBvdXRwb2ludHNcbiAgICB9O1xuICB9LFxuICBbRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVycm9yXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBmZXRjaGluZ0ZpbHRlcmVkT3V0cG9pbnRzRXJyb3I6IGVycm9yXG4gICAgfTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDYpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkNyA9IHtcbiAgZmV0Y2hpbmdGZWF0dXJlZENvbnRlbnQ6IGZhbHNlLFxuICBmZXRjaGluZ0ZlYXR1cmVkQ29udGVudEZhaWxlZDogZmFsc2UsXG4gIGZlYXR1cmVkVXJpczogdW5kZWZpbmVkLFxuICBmZXRjaGluZ1RyZW5kaW5nQ29udGVudDogZmFsc2UsXG4gIGZldGNoaW5nVHJlbmRpbmdDb250ZW50RmFpbGVkOiBmYWxzZSxcbiAgdHJlbmRpbmdVcmlzOiB1bmRlZmluZWRcbn07XG5jb25zdCBob21lcGFnZVJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGZldGNoaW5nRmVhdHVyZWRDb250ZW50OiB0cnVlXG4gIH0pLFxuICBbRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVyaXMsXG4gICAgICBzdWNjZXNzXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmdGZWF0dXJlZENvbnRlbnQ6IGZhbHNlLFxuICAgICAgZmV0Y2hpbmdGZWF0dXJlZENvbnRlbnRGYWlsZWQ6ICFzdWNjZXNzLFxuICAgICAgZmVhdHVyZWRVcmlzOiB1cmlzXG4gICAgfTtcbiAgfSxcbiAgW0ZFVENIX1RSRU5ESU5HX0NPTlRFTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGZldGNoaW5nVHJlbmRpbmdDb250ZW50OiB0cnVlXG4gIH0pLFxuICBbRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVyaXMsXG4gICAgICBzdWNjZXNzXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmdUcmVuZGluZ0NvbnRlbnQ6IGZhbHNlLFxuICAgICAgZmV0Y2hpbmdUcmVuZGluZ0NvbnRlbnRGYWlsZWQ6ICFzdWNjZXNzLFxuICAgICAgdHJlbmRpbmdVcmlzOiB1cmlzXG4gICAgfTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDcpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkOCA9IHtcbiAgZmV0Y2hpbmdWaWV3Q291bnQ6IGZhbHNlLFxuICB2aWV3Q291bnRFcnJvcjogdW5kZWZpbmVkLFxuICB2aWV3Q291bnRCeUlkOiB7fSxcbiAgZmV0Y2hpbmdTdWJDb3VudDogZmFsc2UsXG4gIHN1YkNvdW50RXJyb3I6IHVuZGVmaW5lZCxcbiAgc3ViQ291bnRCeUlkOiB7fVxufTtcbmNvbnN0IHN0YXRzUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbRkVUQ0hfVklFV19DT1VOVF9TVEFSVEVEXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgZmV0Y2hpbmdWaWV3Q291bnQ6IHRydWVcbiAgfSksXG4gIFtGRVRDSF9WSUVXX0NPVU5UX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiAoeyAuLi5zdGF0ZSxcbiAgICB2aWV3Q291bnRFcnJvcjogYWN0aW9uLmRhdGFcbiAgfSksXG4gIFtGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhaW1JZCxcbiAgICAgIHZpZXdDb3VudFxuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCB2aWV3Q291bnRCeUlkID0geyAuLi5zdGF0ZS52aWV3Q291bnRCeUlkLFxuICAgICAgW2NsYWltSWRdOiB2aWV3Q291bnRcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmdWaWV3Q291bnQ6IGZhbHNlLFxuICAgICAgdmlld0NvdW50QnlJZFxuICAgIH07XG4gIH0sXG4gIFtGRVRDSF9TVUJfQ09VTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGZldGNoaW5nU3ViQ291bnQ6IHRydWVcbiAgfSksXG4gIFtGRVRDSF9TVUJfQ09VTlRfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+ICh7IC4uLnN0YXRlLFxuICAgIHN1YkNvdW50RXJyb3I6IGFjdGlvbi5kYXRhXG4gIH0pLFxuICBbRkVUQ0hfU1VCX0NPVU5UX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhaW1JZCxcbiAgICAgIHN1YkNvdW50XG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IHN1YkNvdW50QnlJZCA9IHsgLi4uc3RhdGUuc3ViQ291bnRCeUlkLFxuICAgICAgW2NsYWltSWRdOiBzdWJDb3VudFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBmZXRjaGluZ1N1YkNvdW50OiBmYWxzZSxcbiAgICAgIHN1YkNvdW50QnlJZFxuICAgIH07XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ4KTtcblxuY29uc3QgcmVkdWNlcnMkMyA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDkgPSB7XG4gIGhhc1N5bmNlZFdhbGxldDogZmFsc2UsXG4gIHN5bmNIYXNoOiBudWxsLFxuICBzeW5jRGF0YTogbnVsbCxcbiAgc2V0U3luY0Vycm9yTWVzc2FnZTogbnVsbCxcbiAgZ2V0U3luY0Vycm9yTWVzc2FnZTogbnVsbCxcbiAgc3luY0FwcGx5RXJyb3JNZXNzYWdlOiAnJyxcbiAgc3luY0FwcGx5SXNQZW5kaW5nOiBmYWxzZSxcbiAgc3luY0FwcGx5UGFzc3dvcmRFcnJvcjogZmFsc2UsXG4gIGdldFN5bmNJc1BlbmRpbmc6IGZhbHNlLFxuICBzZXRTeW5jSXNQZW5kaW5nOiBmYWxzZSxcbiAgaGFzaENoYW5nZWQ6IGZhbHNlXG59O1xuXG5yZWR1Y2VycyQzW0dFVF9TWU5DX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZ2V0U3luY0lzUGVuZGluZzogdHJ1ZSxcbiAgZ2V0U3luY0Vycm9yTWVzc2FnZTogbnVsbFxufSk7XG5cbnJlZHVjZXJzJDNbR0VUX1NZTkNfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBzeW5jSGFzaDogYWN0aW9uLmRhdGEuc3luY0hhc2gsXG4gIHN5bmNEYXRhOiBhY3Rpb24uZGF0YS5zeW5jRGF0YSxcbiAgaGFzU3luY2VkV2FsbGV0OiBhY3Rpb24uZGF0YS5oYXNTeW5jZWRXYWxsZXQsXG4gIGdldFN5bmNJc1BlbmRpbmc6IGZhbHNlLFxuICBoYXNoQ2hhbmdlZDogYWN0aW9uLmRhdGEuaGFzaENoYW5nZWRcbn0pO1xuXG5yZWR1Y2VycyQzW0dFVF9TWU5DX0ZBSUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZ2V0U3luY0lzUGVuZGluZzogZmFsc2UsXG4gIGdldFN5bmNFcnJvck1lc3NhZ2U6IGFjdGlvbi5kYXRhLmVycm9yXG59KTtcblxucmVkdWNlcnMkM1tTRVRfU1lOQ19TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHNldFN5bmNJc1BlbmRpbmc6IHRydWUsXG4gIHNldFN5bmNFcnJvck1lc3NhZ2U6IG51bGxcbn0pO1xuXG5yZWR1Y2VycyQzW1NFVF9TWU5DX0ZBSUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc2V0U3luY0lzUGVuZGluZzogZmFsc2UsXG4gIHNldFN5bmNFcnJvck1lc3NhZ2U6IGFjdGlvbi5kYXRhLmVycm9yXG59KTtcblxucmVkdWNlcnMkM1tTRVRfU1lOQ19DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHNldFN5bmNJc1BlbmRpbmc6IGZhbHNlLFxuICBzZXRTeW5jRXJyb3JNZXNzYWdlOiBudWxsLFxuICBoYXNTeW5jZWRXYWxsZXQ6IHRydWUsXG4gIC8vIHN5bmMgd2FzIHN1Y2Nlc3NmdWwsIHNvIHRoZSB1c2VyIGhhcyBhIHN5bmNlZCB3YWxsZXQgYXQgdGhpcyBwb2ludFxuICBzeW5jSGFzaDogYWN0aW9uLmRhdGEuc3luY0hhc2hcbn0pO1xuXG5yZWR1Y2VycyQzW1NZTkNfQVBQTFlfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBzeW5jQXBwbHlQYXNzd29yZEVycm9yOiBmYWxzZSxcbiAgc3luY0FwcGx5SXNQZW5kaW5nOiB0cnVlLFxuICBzeW5jQXBwbHlFcnJvck1lc3NhZ2U6ICcnXG59KTtcblxucmVkdWNlcnMkM1tTWU5DX0FQUExZX0NPTVBMRVRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBzeW5jQXBwbHlJc1BlbmRpbmc6IGZhbHNlLFxuICBzeW5jQXBwbHlFcnJvck1lc3NhZ2U6ICcnXG59KTtcblxucmVkdWNlcnMkM1tTWU5DX0FQUExZX0ZBSUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc3luY0FwcGx5SXNQZW5kaW5nOiBmYWxzZSxcbiAgc3luY0FwcGx5RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDNbU1lOQ19BUFBMWV9CQURfUEFTU1dPUkRdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc3luY0FwcGx5UGFzc3dvcmRFcnJvcjogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDNbU1lOQ19SRVNFVF0gPSAoKSA9PiBkZWZhdWx0U3RhdGUkOTtcblxuZnVuY3Rpb24gc3luY1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkOSwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQzW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8vICAgICAgXG4vKlxudGVzdCBtb2NrOlxuICBjdXJyZW50VXBsb2Fkczoge1xuICAgICd0ZXN0I3VwbG9hZCc6IHtcbiAgICAgIHByb2dyZXNzOiA1MCxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBuYW1lOiAnc3RldmUnLFxuICAgICAgICB0aHVtYm5haWxfdXJsOiAnaHR0cHM6Ly9kZXYyLnNwZWUuY2gvNC9LTU50b1NaMDA5ZmF3R3o1OVZHOFBySUQuanBlZycsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gKi9cblxuY29uc3QgcmVkdWNlcnMkNCA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJGEgPSB7XG4gIGN1cnJlbnRVcGxvYWRzOiB7fVxufTtcblxucmVkdWNlcnMkNFtVUERBVEVfVVBMT0FEX1BST0dSRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9ncmVzcyxcbiAgICBwYXJhbXMsXG4gICAgeGhyXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3Qga2V5ID0gcGFyYW1zLmNoYW5uZWwgPyBgJHtwYXJhbXMubmFtZX0jJHtwYXJhbXMuY2hhbm5lbH1gIDogYCR7cGFyYW1zLm5hbWV9I2Fub255bW91c2A7XG4gIGxldCBjdXJyZW50VXBsb2FkcztcblxuICBpZiAoIXByb2dyZXNzKSB7XG4gICAgY3VycmVudFVwbG9hZHMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jdXJyZW50VXBsb2Fkcyk7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudFVwbG9hZHMpLmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayA9PT0ga2V5KSB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50VXBsb2Fkc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGN1cnJlbnRVcGxvYWRzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY3VycmVudFVwbG9hZHMpO1xuICAgIGN1cnJlbnRVcGxvYWRzW2tleV0gPSB7XG4gICAgICBwcm9ncmVzcyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHhoclxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICBjdXJyZW50VXBsb2Fkc1xuICB9O1xufTtcblxuZnVuY3Rpb24gbGJyeXR2UmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSRhLCBhY3Rpb24pIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzJDRbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuY29uc3Qgc2VsZWN0U3RhdGUkMyA9IHN0YXRlID0+IHN0YXRlLmF1dGggfHwge307XG5cbmNvbnN0IHNlbGVjdEF1dGhUb2tlbiA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmF1dGhUb2tlbik7XG5jb25zdCBzZWxlY3RJc0F1dGhlbnRpY2F0aW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMywgc3RhdGUgPT4gc3RhdGUuYXV0aGVudGljYXRpbmcpO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ0ID0gc3RhdGUgPT4gc3RhdGUuY29zdEluZm8gfHwge307XG5jb25zdCBzZWxlY3RBbGxDb3N0SW5mb0J5VXJpID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNCwgc3RhdGUgPT4gc3RhdGUuYnlVcmkgfHwge30pO1xuY29uc3QgbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEFsbENvc3RJbmZvQnlVcmksIGNvc3RJbmZvcyA9PiBjb3N0SW5mb3MgJiYgY29zdEluZm9zW3VyaV0pO1xuY29uc3Qgc2VsZWN0RmV0Y2hpbmdDb3N0SW5mbyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDQsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nIHx8IHt9KTtcbmNvbnN0IG1ha2VTZWxlY3RGZXRjaGluZ0Nvc3RJbmZvRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZldGNoaW5nQ29zdEluZm8sIGZldGNoaW5nQnlVcmkgPT4gZmV0Y2hpbmdCeVVyaSAmJiBmZXRjaGluZ0J5VXJpW3VyaV0pO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ1ID0gc3RhdGUgPT4gc3RhdGUuYmxhY2tsaXN0IHx8IHt9O1xuY29uc3Qgc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ1LCBzdGF0ZSA9PiBzdGF0ZS5ibGFja0xpc3RlZE91dHBvaW50cyk7XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDYgPSBzdGF0ZSA9PiBzdGF0ZS5maWx0ZXJlZCB8fCB7fTtcbmNvbnN0IHNlbGVjdEZpbHRlcmVkT3V0cG9pbnRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNiwgc3RhdGUgPT4gc3RhdGUuZmlsdGVyZWRPdXRwb2ludHMpO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ3ID0gc3RhdGUgPT4gc3RhdGUuaG9tZXBhZ2UgfHwge307XG5cbmNvbnN0IHNlbGVjdEZlYXR1cmVkVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDcsIHN0YXRlID0+IHN0YXRlLmZlYXR1cmVkVXJpcyk7XG5jb25zdCBzZWxlY3RGZXRjaGluZ0ZlYXR1cmVkVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDcsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nRmVhdHVyZWRDb250ZW50KTtcbmNvbnN0IHNlbGVjdFRyZW5kaW5nVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDcsIHN0YXRlID0+IHN0YXRlLnRyZW5kaW5nVXJpcyk7XG5jb25zdCBzZWxlY3RGZXRjaGluZ1RyZW5kaW5nVXJpcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDcsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nVHJlbmRpbmdDb250ZW50KTtcblxuY29uc3Qgc2VsZWN0U3RhdGUkOCA9IHN0YXRlID0+IHN0YXRlLnN0YXRzIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RWaWV3Q291bnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ4LCBzdGF0ZSA9PiBzdGF0ZS52aWV3Q291bnRCeUlkKTtcbmNvbnN0IHNlbGVjdFN1YkNvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOCwgc3RhdGUgPT4gc3RhdGUuc3ViQ291bnRCeUlkKTtcbmNvbnN0IG1ha2VTZWxlY3RWaWV3Q291bnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobGJyeVJlZHV4Lm1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBzZWxlY3RWaWV3Q291bnQsIChjbGFpbSwgdmlld0NvdW50QnlJZCkgPT4gY2xhaW0gPyB2aWV3Q291bnRCeUlkW2NsYWltLmNsYWltX2lkXSB8fCAwIDogMCk7XG5jb25zdCBtYWtlU2VsZWN0U3ViQ291bnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobGJyeVJlZHV4Lm1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBzZWxlY3RTdWJDb3VudCwgKGNsYWltLCBzdWJDb3VudEJ5SWQpID0+IGNsYWltID8gc3ViQ291bnRCeUlkW2NsYWltLmNsYWltX2lkXSB8fCAwIDogMCk7XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDkgPSBzdGF0ZSA9PiBzdGF0ZS5zeW5jIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RIYXNTeW5jZWRXYWxsZXQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5oYXNTeW5jZWRXYWxsZXQpO1xuY29uc3Qgc2VsZWN0U3luY0hhc2ggPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5zeW5jSGFzaCk7XG5jb25zdCBzZWxlY3RTeW5jRGF0YSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLnN5bmNEYXRhKTtcbmNvbnN0IHNlbGVjdFNldFN5bmNFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5zZXRTeW5jRXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdEdldFN5bmNFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5nZXRTeW5jRXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdEdldFN5bmNJc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5nZXRTeW5jSXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFNldFN5bmNJc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5zZXRTeW5jSXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdEhhc2hDaGFuZ2VkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuaGFzaENoYW5nZWQpO1xuY29uc3Qgc2VsZWN0U3luY0FwcGx5SXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuc3luY0FwcGx5SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFN5bmNBcHBseUVycm9yTWVzc2FnZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLnN5bmNBcHBseUVycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RTeW5jQXBwbHlQYXNzd29yZEVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuc3luY0FwcGx5UGFzc3dvcmRFcnJvcik7XG5cbmNvbnN0IHNlbGVjdFN0YXRlJGEgPSBzdGF0ZSA9PiBzdGF0ZS5sYnJ5dHYgfHwge307XG5cbmNvbnN0IHNlbGVjdEN1cnJlbnRVcGxvYWRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkYSwgc3RhdGUgPT4gc3RhdGUuY3VycmVudFVwbG9hZHMpO1xuY29uc3Qgc2VsZWN0VXBsb2FkQ291bnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDdXJyZW50VXBsb2FkcywgY3VycmVudFVwbG9hZHMgPT4gY3VycmVudFVwbG9hZHMgJiYgT2JqZWN0LmtleXMoY3VycmVudFVwbG9hZHMpLmxlbmd0aCk7XG5cbmV4cG9ydHMuRVJST1JTID0gZXJyb3JzO1xuZXhwb3J0cy5MQlJZSU5DX0FDVElPTlMgPSBhY3Rpb25fdHlwZXM7XG5leHBvcnRzLkxicnlpbyA9IExicnlpbztcbmV4cG9ydHMuWU9VVFVCRV9TVEFUVVNFUyA9IHlvdXR1YmU7XG5leHBvcnRzLmF1dGhSZWR1Y2VyID0gYXV0aFJlZHVjZXI7XG5leHBvcnRzLmJsYWNrbGlzdFJlZHVjZXIgPSBibGFja2xpc3RSZWR1Y2VyO1xuZXhwb3J0cy5jb3N0SW5mb1JlZHVjZXIgPSBjb3N0SW5mb1JlZHVjZXI7XG5leHBvcnRzLmRvQXV0aGVudGljYXRlID0gZG9BdXRoZW50aWNhdGU7XG5leHBvcnRzLmRvQmxhY2tMaXN0ZWRPdXRwb2ludHNTdWJzY3JpYmUgPSBkb0JsYWNrTGlzdGVkT3V0cG9pbnRzU3Vic2NyaWJlO1xuZXhwb3J0cy5kb0NoYW5uZWxTdWJzY3JpYmUgPSBkb0NoYW5uZWxTdWJzY3JpYmU7XG5leHBvcnRzLmRvQ2hhbm5lbFN1YnNjcmlwdGlvbkRpc2FibGVOb3RpZmljYXRpb25zID0gZG9DaGFubmVsU3Vic2NyaXB0aW9uRGlzYWJsZU5vdGlmaWNhdGlvbnM7XG5leHBvcnRzLmRvQ2hhbm5lbFN1YnNjcmlwdGlvbkVuYWJsZU5vdGlmaWNhdGlvbnMgPSBkb0NoYW5uZWxTdWJzY3JpcHRpb25FbmFibGVOb3RpZmljYXRpb25zO1xuZXhwb3J0cy5kb0NoYW5uZWxVbnN1YnNjcmliZSA9IGRvQ2hhbm5lbFVuc3Vic2NyaWJlO1xuZXhwb3J0cy5kb0NoZWNrU3Vic2NyaXB0aW9uID0gZG9DaGVja1N1YnNjcmlwdGlvbjtcbmV4cG9ydHMuZG9DaGVja1N1YnNjcmlwdGlvbnMgPSBkb0NoZWNrU3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuZG9DaGVja1N1YnNjcmlwdGlvbnNJbml0ID0gZG9DaGVja1N1YnNjcmlwdGlvbnNJbml0O1xuZXhwb3J0cy5kb0NoZWNrU3luYyA9IGRvQ2hlY2tTeW5jO1xuZXhwb3J0cy5kb0NoZWNrWW91dHViZVRyYW5zZmVyID0gZG9DaGVja1lvdXR1YmVUcmFuc2ZlcjtcbmV4cG9ydHMuZG9DbGFpbUVsaWdpYmxlUHVyY2hhc2VSZXdhcmRzID0gZG9DbGFpbUVsaWdpYmxlUHVyY2hhc2VSZXdhcmRzO1xuZXhwb3J0cy5kb0NsYWltUmV3YXJkQ2xlYXJFcnJvciA9IGRvQ2xhaW1SZXdhcmRDbGVhckVycm9yO1xuZXhwb3J0cy5kb0NsYWltUmV3YXJkVHlwZSA9IGRvQ2xhaW1SZXdhcmRUeXBlO1xuZXhwb3J0cy5kb0NsYWltWW91dHViZUNoYW5uZWxzID0gZG9DbGFpbVlvdXR1YmVDaGFubmVscztcbmV4cG9ydHMuZG9Db21wbGV0ZUZpcnN0UnVuID0gZG9Db21wbGV0ZUZpcnN0UnVuO1xuZXhwb3J0cy5kb0ZldGNoQWNjZXNzVG9rZW4gPSBkb0ZldGNoQWNjZXNzVG9rZW47XG5leHBvcnRzLmRvRmV0Y2hDb3N0SW5mb0ZvclVyaSA9IGRvRmV0Y2hDb3N0SW5mb0ZvclVyaTtcbmV4cG9ydHMuZG9GZXRjaEZlYXR1cmVkVXJpcyA9IGRvRmV0Y2hGZWF0dXJlZFVyaXM7XG5leHBvcnRzLmRvRmV0Y2hJbnZpdGVTdGF0dXMgPSBkb0ZldGNoSW52aXRlU3RhdHVzO1xuZXhwb3J0cy5kb0ZldGNoTXlTdWJzY3JpcHRpb25zID0gZG9GZXRjaE15U3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuZG9GZXRjaFJlY29tbWVuZGVkU3Vic2NyaXB0aW9ucyA9IGRvRmV0Y2hSZWNvbW1lbmRlZFN1YnNjcmlwdGlvbnM7XG5leHBvcnRzLmRvRmV0Y2hSZXdhcmRlZENvbnRlbnQgPSBkb0ZldGNoUmV3YXJkZWRDb250ZW50O1xuZXhwb3J0cy5kb0ZldGNoU3ViQ291bnQgPSBkb0ZldGNoU3ViQ291bnQ7XG5leHBvcnRzLmRvRmV0Y2hUcmVuZGluZ1VyaXMgPSBkb0ZldGNoVHJlbmRpbmdVcmlzO1xuZXhwb3J0cy5kb0ZldGNoVmlld0NvdW50ID0gZG9GZXRjaFZpZXdDb3VudDtcbmV4cG9ydHMuZG9GaWx0ZXJlZE91dHBvaW50c1N1YnNjcmliZSA9IGRvRmlsdGVyZWRPdXRwb2ludHNTdWJzY3JpYmU7XG5leHBvcnRzLmRvR2VuZXJhdGVBdXRoVG9rZW4gPSBkb0dlbmVyYXRlQXV0aFRva2VuO1xuZXhwb3J0cy5kb0dldFN5bmMgPSBkb0dldFN5bmM7XG5leHBvcnRzLmRvSW5zdGFsbE5ldyA9IGRvSW5zdGFsbE5ldztcbmV4cG9ydHMuZG9JbnN0YWxsTmV3V2l0aFBhcmFtcyA9IGRvSW5zdGFsbE5ld1dpdGhQYXJhbXM7XG5leHBvcnRzLmRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9uID0gZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb247XG5leHBvcnRzLmRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9ucyA9IGRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuZG9SZXNldFN5bmMgPSBkb1Jlc2V0U3luYztcbmV4cG9ydHMuZG9SZXdhcmRMaXN0ID0gZG9SZXdhcmRMaXN0O1xuZXhwb3J0cy5kb1NldERlZmF1bHRBY2NvdW50ID0gZG9TZXREZWZhdWx0QWNjb3VudDtcbmV4cG9ydHMuZG9TZXRTeW5jID0gZG9TZXRTeW5jO1xuZXhwb3J0cy5kb1NldFZpZXdNb2RlID0gZG9TZXRWaWV3TW9kZTtcbmV4cG9ydHMuZG9TaG93U3VnZ2VzdGVkU3VicyA9IGRvU2hvd1N1Z2dlc3RlZFN1YnM7XG5leHBvcnRzLmRvU3luY0FwcGx5ID0gZG9TeW5jQXBwbHk7XG5leHBvcnRzLmRvU3luY0VuY3J5cHRBbmREZWNyeXB0ID0gZG9TeW5jRW5jcnlwdEFuZERlY3J5cHQ7XG5leHBvcnRzLmRvVHJhbnNpZmV4VXBsb2FkID0gZG9UcmFuc2lmZXhVcGxvYWQ7XG5leHBvcnRzLmRvVXBkYXRlVW5yZWFkU3Vic2NyaXB0aW9ucyA9IGRvVXBkYXRlVW5yZWFkU3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuZG9VcGRhdGVVcGxvYWRQcm9ncmVzcyA9IGRvVXBkYXRlVXBsb2FkUHJvZ3Jlc3M7XG5leHBvcnRzLmRvVXNlckNoZWNrRW1haWxWZXJpZmllZCA9IGRvVXNlckNoZWNrRW1haWxWZXJpZmllZDtcbmV4cG9ydHMuZG9Vc2VyRW1haWxOZXcgPSBkb1VzZXJFbWFpbE5ldztcbmV4cG9ydHMuZG9Vc2VyRW1haWxUb1ZlcmlmeSA9IGRvVXNlckVtYWlsVG9WZXJpZnk7XG5leHBvcnRzLmRvVXNlckVtYWlsVmVyaWZ5ID0gZG9Vc2VyRW1haWxWZXJpZnk7XG5leHBvcnRzLmRvVXNlckVtYWlsVmVyaWZ5RmFpbHVyZSA9IGRvVXNlckVtYWlsVmVyaWZ5RmFpbHVyZTtcbmV4cG9ydHMuZG9Vc2VyRmV0Y2ggPSBkb1VzZXJGZXRjaDtcbmV4cG9ydHMuZG9Vc2VySWRlbnRpdHlWZXJpZnkgPSBkb1VzZXJJZGVudGl0eVZlcmlmeTtcbmV4cG9ydHMuZG9Vc2VySW52aXRlTmV3ID0gZG9Vc2VySW52aXRlTmV3O1xuZXhwb3J0cy5kb1VzZXJQaG9uZU5ldyA9IGRvVXNlclBob25lTmV3O1xuZXhwb3J0cy5kb1VzZXJQaG9uZVJlc2V0ID0gZG9Vc2VyUGhvbmVSZXNldDtcbmV4cG9ydHMuZG9Vc2VyUGhvbmVWZXJpZnkgPSBkb1VzZXJQaG9uZVZlcmlmeTtcbmV4cG9ydHMuZG9Vc2VyUGhvbmVWZXJpZnlGYWlsdXJlID0gZG9Vc2VyUGhvbmVWZXJpZnlGYWlsdXJlO1xuZXhwb3J0cy5kb1VzZXJSZXNlbmRWZXJpZmljYXRpb25FbWFpbCA9IGRvVXNlclJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuZXhwb3J0cy5kb1VzZXJTZXRSZWZlcnJlciA9IGRvVXNlclNldFJlZmVycmVyO1xuZXhwb3J0cy5kb1VzZXJTZXRSZWZlcnJlclJlc2V0ID0gZG9Vc2VyU2V0UmVmZXJyZXJSZXNldDtcbmV4cG9ydHMuZmlsdGVyZWRSZWR1Y2VyID0gZmlsdGVyZWRSZWR1Y2VyO1xuZXhwb3J0cy5ob21lcGFnZVJlZHVjZXIgPSBob21lcGFnZVJlZHVjZXI7XG5leHBvcnRzLmxicnl0dlJlZHVjZXIgPSBsYnJ5dHZSZWR1Y2VyO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2xhaW1SZXdhcmRFcnJvciA9IG1ha2VTZWxlY3RDbGFpbVJld2FyZEVycm9yO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkgPSBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RGZXRjaGluZ0Nvc3RJbmZvRm9yVXJpID0gbWFrZVNlbGVjdEZldGNoaW5nQ29zdEluZm9Gb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RJc05ldyA9IG1ha2VTZWxlY3RJc05ldztcbmV4cG9ydHMubWFrZVNlbGVjdElzUmV3YXJkQ2xhaW1QZW5kaW5nID0gbWFrZVNlbGVjdElzUmV3YXJkQ2xhaW1QZW5kaW5nO1xuZXhwb3J0cy5tYWtlU2VsZWN0SXNTdWJzY3JpYmVkID0gbWFrZVNlbGVjdElzU3Vic2NyaWJlZDtcbmV4cG9ydHMubWFrZVNlbGVjdFJld2FyZEFtb3VudEJ5VHlwZSA9IG1ha2VTZWxlY3RSZXdhcmRBbW91bnRCeVR5cGU7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXdhcmRCeUNsYWltQ29kZSA9IG1ha2VTZWxlY3RSZXdhcmRCeUNsYWltQ29kZTtcbmV4cG9ydHMubWFrZVNlbGVjdFJld2FyZEJ5VHlwZSA9IG1ha2VTZWxlY3RSZXdhcmRCeVR5cGU7XG5leHBvcnRzLm1ha2VTZWxlY3RTdWJDb3VudEZvclVyaSA9IG1ha2VTZWxlY3RTdWJDb3VudEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFVucmVhZEJ5Q2hhbm5lbCA9IG1ha2VTZWxlY3RVbnJlYWRCeUNoYW5uZWw7XG5leHBvcnRzLm1ha2VTZWxlY3RWaWV3Q291bnRGb3JVcmkgPSBtYWtlU2VsZWN0Vmlld0NvdW50Rm9yVXJpO1xuZXhwb3J0cy5yZXdhcmRzID0gcmV3YXJkcztcbmV4cG9ydHMucmV3YXJkc1JlZHVjZXIgPSByZXdhcmRzUmVkdWNlcjtcbmV4cG9ydHMuc2VsZWN0QWNjZXNzVG9rZW4gPSBzZWxlY3RBY2Nlc3NUb2tlbjtcbmV4cG9ydHMuc2VsZWN0QWxsQ29zdEluZm9CeVVyaSA9IHNlbGVjdEFsbENvc3RJbmZvQnlVcmk7XG5leHBvcnRzLnNlbGVjdEF1dGhUb2tlbiA9IHNlbGVjdEF1dGhUb2tlbjtcbmV4cG9ydHMuc2VsZWN0QXV0aGVudGljYXRpb25Jc1BlbmRpbmcgPSBzZWxlY3RBdXRoZW50aWNhdGlvbklzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMgPSBzZWxlY3RCbGFja0xpc3RlZE91dHBvaW50cztcbmV4cG9ydHMuc2VsZWN0Q2xhaW1FcnJvcnNCeVR5cGUgPSBzZWxlY3RDbGFpbUVycm9yc0J5VHlwZTtcbmV4cG9ydHMuc2VsZWN0Q2xhaW1lZFJld2FyZHMgPSBzZWxlY3RDbGFpbWVkUmV3YXJkcztcbmV4cG9ydHMuc2VsZWN0Q2xhaW1lZFJld2FyZHNCeUlkID0gc2VsZWN0Q2xhaW1lZFJld2FyZHNCeUlkO1xuZXhwb3J0cy5zZWxlY3RDbGFpbWVkUmV3YXJkc0J5VHJhbnNhY3Rpb25JZCA9IHNlbGVjdENsYWltZWRSZXdhcmRzQnlUcmFuc2FjdGlvbklkO1xuZXhwb3J0cy5zZWxlY3RDbGFpbXNQZW5kaW5nQnlUeXBlID0gc2VsZWN0Q2xhaW1zUGVuZGluZ0J5VHlwZTtcbmV4cG9ydHMuc2VsZWN0Q3VycmVudFVwbG9hZHMgPSBzZWxlY3RDdXJyZW50VXBsb2FkcztcbmV4cG9ydHMuc2VsZWN0RW1haWxBbHJlYWR5RXhpc3RzID0gc2VsZWN0RW1haWxBbHJlYWR5RXhpc3RzO1xuZXhwb3J0cy5zZWxlY3RFbWFpbE5ld0Vycm9yTWVzc2FnZSA9IHNlbGVjdEVtYWlsTmV3RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RFbWFpbE5ld0lzUGVuZGluZyA9IHNlbGVjdEVtYWlsTmV3SXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RFbWFpbFRvVmVyaWZ5ID0gc2VsZWN0RW1haWxUb1ZlcmlmeTtcbmV4cG9ydHMuc2VsZWN0RW1haWxWZXJpZnlFcnJvck1lc3NhZ2UgPSBzZWxlY3RFbWFpbFZlcmlmeUVycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0RW1haWxWZXJpZnlJc1BlbmRpbmcgPSBzZWxlY3RFbWFpbFZlcmlmeUlzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zID0gc2VsZWN0RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zO1xuZXhwb3J0cy5zZWxlY3RGZWF0dXJlZFVyaXMgPSBzZWxlY3RGZWF0dXJlZFVyaXM7XG5leHBvcnRzLnNlbGVjdEZldGNoaW5nQ29zdEluZm8gPSBzZWxlY3RGZXRjaGluZ0Nvc3RJbmZvO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ0ZlYXR1cmVkVXJpcyA9IHNlbGVjdEZldGNoaW5nRmVhdHVyZWRVcmlzO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ1Jld2FyZHMgPSBzZWxlY3RGZXRjaGluZ1Jld2FyZHM7XG5leHBvcnRzLnNlbGVjdEZldGNoaW5nVHJlbmRpbmdVcmlzID0gc2VsZWN0RmV0Y2hpbmdUcmVuZGluZ1VyaXM7XG5leHBvcnRzLnNlbGVjdEZpbHRlcmVkT3V0cG9pbnRzID0gc2VsZWN0RmlsdGVyZWRPdXRwb2ludHM7XG5leHBvcnRzLnNlbGVjdEZpcnN0UnVuQ29tcGxldGVkID0gc2VsZWN0Rmlyc3RSdW5Db21wbGV0ZWQ7XG5leHBvcnRzLnNlbGVjdEdldFN5bmNFcnJvck1lc3NhZ2UgPSBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RHZXRTeW5jSXNQZW5kaW5nID0gc2VsZWN0R2V0U3luY0lzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0SGFzU3luY2VkV2FsbGV0ID0gc2VsZWN0SGFzU3luY2VkV2FsbGV0O1xuZXhwb3J0cy5zZWxlY3RIYXNoQ2hhbmdlZCA9IHNlbGVjdEhhc2hDaGFuZ2VkO1xuZXhwb3J0cy5zZWxlY3RJZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZSA9IHNlbGVjdElkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RJZGVudGl0eVZlcmlmeUlzUGVuZGluZyA9IHNlbGVjdElkZW50aXR5VmVyaWZ5SXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RJc0F1dGhlbnRpY2F0aW5nID0gc2VsZWN0SXNBdXRoZW50aWNhdGluZztcbmV4cG9ydHMuc2VsZWN0SXNGZXRjaGluZ1N1YnNjcmlwdGlvbnMgPSBzZWxlY3RJc0ZldGNoaW5nU3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuc2VsZWN0SXNGZXRjaGluZ1N1Z2dlc3RlZCA9IHNlbGVjdElzRmV0Y2hpbmdTdWdnZXN0ZWQ7XG5leHBvcnRzLnNlbGVjdFBob25lTmV3RXJyb3JNZXNzYWdlID0gc2VsZWN0UGhvbmVOZXdFcnJvck1lc3NhZ2U7XG5leHBvcnRzLnNlbGVjdFBob25lTmV3SXNQZW5kaW5nID0gc2VsZWN0UGhvbmVOZXdJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFBob25lVG9WZXJpZnkgPSBzZWxlY3RQaG9uZVRvVmVyaWZ5O1xuZXhwb3J0cy5zZWxlY3RQaG9uZVZlcmlmeUVycm9yTWVzc2FnZSA9IHNlbGVjdFBob25lVmVyaWZ5RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RQaG9uZVZlcmlmeUlzUGVuZGluZyA9IHNlbGVjdFBob25lVmVyaWZ5SXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RSZWZlcnJhbFJld2FyZCA9IHNlbGVjdFJlZmVycmFsUmV3YXJkO1xuZXhwb3J0cy5zZWxlY3RSZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9IHNlbGVjdFJlc2VuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsO1xuZXhwb3J0cy5zZWxlY3RSZXdhcmRDb250ZW50Q2xhaW1JZHMgPSBzZWxlY3RSZXdhcmRDb250ZW50Q2xhaW1JZHM7XG5leHBvcnRzLnNlbGVjdFNldFJlZmVycmVyRXJyb3IgPSBzZWxlY3RTZXRSZWZlcnJlckVycm9yO1xuZXhwb3J0cy5zZWxlY3RTZXRSZWZlcnJlclBlbmRpbmcgPSBzZWxlY3RTZXRSZWZlcnJlclBlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFNldFN5bmNFcnJvck1lc3NhZ2UgPSBzZWxlY3RTZXRTeW5jRXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RTZXRTeW5jSXNQZW5kaW5nID0gc2VsZWN0U2V0U3luY0lzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0U2hvd1N1Z2dlc3RlZFN1YnMgPSBzZWxlY3RTaG93U3VnZ2VzdGVkU3VicztcbmV4cG9ydHMuc2VsZWN0U3Vic2NyaXB0aW9uQ2xhaW1zID0gc2VsZWN0U3Vic2NyaXB0aW9uQ2xhaW1zO1xuZXhwb3J0cy5zZWxlY3RTdWJzY3JpcHRpb25zID0gc2VsZWN0U3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuc2VsZWN0U3Vic2NyaXB0aW9uc0JlaW5nRmV0Y2hlZCA9IHNlbGVjdFN1YnNjcmlwdGlvbnNCZWluZ0ZldGNoZWQ7XG5leHBvcnRzLnNlbGVjdFN1Z2dlc3RlZCA9IHNlbGVjdFN1Z2dlc3RlZDtcbmV4cG9ydHMuc2VsZWN0U3VnZ2VzdGVkQ2hhbm5lbHMgPSBzZWxlY3RTdWdnZXN0ZWRDaGFubmVscztcbmV4cG9ydHMuc2VsZWN0U3luY0FwcGx5RXJyb3JNZXNzYWdlID0gc2VsZWN0U3luY0FwcGx5RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RTeW5jQXBwbHlJc1BlbmRpbmcgPSBzZWxlY3RTeW5jQXBwbHlJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFN5bmNBcHBseVBhc3N3b3JkRXJyb3IgPSBzZWxlY3RTeW5jQXBwbHlQYXNzd29yZEVycm9yO1xuZXhwb3J0cy5zZWxlY3RTeW5jRGF0YSA9IHNlbGVjdFN5bmNEYXRhO1xuZXhwb3J0cy5zZWxlY3RTeW5jSGFzaCA9IHNlbGVjdFN5bmNIYXNoO1xuZXhwb3J0cy5zZWxlY3RUcmVuZGluZ1VyaXMgPSBzZWxlY3RUcmVuZGluZ1VyaXM7XG5leHBvcnRzLnNlbGVjdFVuY2xhaW1lZFJld2FyZFZhbHVlID0gc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWU7XG5leHBvcnRzLnNlbGVjdFVuY2xhaW1lZFJld2FyZHMgPSBzZWxlY3RVbmNsYWltZWRSZXdhcmRzO1xuZXhwb3J0cy5zZWxlY3RVbmNsYWltZWRSZXdhcmRzQnlUeXBlID0gc2VsZWN0VW5jbGFpbWVkUmV3YXJkc0J5VHlwZTtcbmV4cG9ydHMuc2VsZWN0VW5yZWFkQW1vdW50ID0gc2VsZWN0VW5yZWFkQW1vdW50O1xuZXhwb3J0cy5zZWxlY3RVbnJlYWRCeUNoYW5uZWwgPSBzZWxlY3RVbnJlYWRCeUNoYW5uZWw7XG5leHBvcnRzLnNlbGVjdFVucmVhZFN1YnNjcmlwdGlvbnMgPSBzZWxlY3RVbnJlYWRTdWJzY3JpcHRpb25zO1xuZXhwb3J0cy5zZWxlY3RVcGxvYWRDb3VudCA9IHNlbGVjdFVwbG9hZENvdW50O1xuZXhwb3J0cy5zZWxlY3RVc2VyID0gc2VsZWN0VXNlcjtcbmV4cG9ydHMuc2VsZWN0VXNlckNvdW50cnlDb2RlID0gc2VsZWN0VXNlckNvdW50cnlDb2RlO1xuZXhwb3J0cy5zZWxlY3RVc2VyRW1haWwgPSBzZWxlY3RVc2VyRW1haWw7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVOZXdFcnJvck1lc3NhZ2UgPSBzZWxlY3RVc2VySW52aXRlTmV3RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RVc2VySW52aXRlTmV3SXNQZW5kaW5nID0gc2VsZWN0VXNlckludml0ZU5ld0lzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0VXNlckludml0ZVJlZmVycmFsQ29kZSA9IHNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbENvZGU7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbExpbmsgPSBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxMaW5rO1xuZXhwb3J0cy5zZWxlY3RVc2VySW52aXRlU3RhdHVzRmFpbGVkID0gc2VsZWN0VXNlckludml0ZVN0YXR1c0ZhaWxlZDtcbmV4cG9ydHMuc2VsZWN0VXNlckludml0ZVN0YXR1c0lzUGVuZGluZyA9IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVlcyA9IHNlbGVjdFVzZXJJbnZpdGVlcztcbmV4cG9ydHMuc2VsZWN0VXNlckludml0ZXNSZW1haW5pbmcgPSBzZWxlY3RVc2VySW52aXRlc1JlbWFpbmluZztcbmV4cG9ydHMuc2VsZWN0VXNlcklzUGVuZGluZyA9IHNlbGVjdFVzZXJJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFVzZXJJc1Jld2FyZEFwcHJvdmVkID0gc2VsZWN0VXNlcklzUmV3YXJkQXBwcm92ZWQ7XG5leHBvcnRzLnNlbGVjdFVzZXJJc1ZlcmlmaWNhdGlvbkNhbmRpZGF0ZSA9IHNlbGVjdFVzZXJJc1ZlcmlmaWNhdGlvbkNhbmRpZGF0ZTtcbmV4cG9ydHMuc2VsZWN0VXNlclBob25lID0gc2VsZWN0VXNlclBob25lO1xuZXhwb3J0cy5zZWxlY3RVc2VyVmVyaWZpZWRFbWFpbCA9IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsO1xuZXhwb3J0cy5zZWxlY3RWaWV3TW9kZSA9IHNlbGVjdFZpZXdNb2RlO1xuZXhwb3J0cy5zZWxlY3RZb3VUdWJlSW1wb3J0RXJyb3IgPSBzZWxlY3RZb3VUdWJlSW1wb3J0RXJyb3I7XG5leHBvcnRzLnNlbGVjdFlvdVR1YmVJbXBvcnRQZW5kaW5nID0gc2VsZWN0WW91VHViZUltcG9ydFBlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFlvdVR1YmVJbXBvcnRWaWRlb3NDb21wbGV0ZSA9IHNlbGVjdFlvdVR1YmVJbXBvcnRWaWRlb3NDb21wbGV0ZTtcbmV4cG9ydHMuc2VsZWN0WW91dHViZUNoYW5uZWxzID0gc2VsZWN0WW91dHViZUNoYW5uZWxzO1xuZXhwb3J0cy5zZXRTdWJzY3JpcHRpb25MYXRlc3QgPSBzZXRTdWJzY3JpcHRpb25MYXRlc3Q7XG5leHBvcnRzLnN0YXRzUmVkdWNlciA9IHN0YXRzUmVkdWNlcjtcbmV4cG9ydHMuc3Vic2NyaXB0aW9uc1JlZHVjZXIgPSBzdWJzY3JpcHRpb25zO1xuZXhwb3J0cy5zeW5jUmVkdWNlciA9IHN5bmNSZWR1Y2VyO1xuZXhwb3J0cy51c2VyUmVkdWNlciA9IHVzZXJSZWR1Y2VyO1xuZXhwb3J0cy51c2VyU3RhdGVTeW5jTWlkZGxld2FyZSA9IHVzZXJTdGF0ZVN5bmNNaWRkbGV3YXJlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4SEE7QUEySEE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQTdCQTtBQWpDQTtBQUNBO0FBaUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBREE7QUFJQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBdEJBO0FBQUE7QUFDQTtBQXdCQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFEQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUF3QkE7QUF4QkE7QUFEQTtBQU5BO0FBWkE7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5EQTtBQURBO0FBdURBO0FBQ0E7QUFDQTtBQXhFQTtBQUNBO0FBMEVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFWQTtBQURBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQ0E7QUFQQTtBQURBO0FBekJBO0FBQ0E7QUEwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQUE7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFUQTtBQWNBO0FBQ0E7QUFBQTtBQUZBO0FBQ0E7QUFEQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFIQTtBQXpCQTtBQStCQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBdENBO0FBMENBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUZBO0FBaERBO0FBeURBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQTlFQTtBQW9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQTNGQTtBQWdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBeEdBO0FBNEdBO0FBQ0E7QUFEQTtBQTVHQTtBQStHQTtBQUNBO0FBREE7QUEvR0E7QUFrSEE7QUFDQTtBQUNBO0FBRkE7QUFsSEE7QUFzSEE7QUFDQTtBQURBO0FBdEhBO0FBeUhBO0FBQ0E7QUFEQTtBQXpIQTtBQTRIQTtBQUNBO0FBQ0E7QUFGQTtBQTVIQTtBQWdJQTtBQUNBO0FBREE7QUFoSUE7QUFtSUE7QUFDQTtBQURBO0FBbklBO0FBc0lBO0FBQ0E7QUFEQTtBQXRJQTtBQXlJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUFDQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBdEtBO0FBQ0E7QUEyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQXhDQTtBQTZDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBVEE7QUFXQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFuQkE7QUFxQkE7QUExQ0E7QUFDQTtBQTRDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQXBCQTtBQXNCQTtBQTdCQTtBQStCQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBQUE7QUFDQTtBQWdCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQUE7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQTdDQTtBQUZBO0FBQUE7QUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakNBO0FBQ0E7QUFDQTtBQW1DQTtBQUNBO0FBREE7QUFFQTtBQUZBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUpBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQW5CQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFoQkE7QUFrQkE7QUFDQTtBQURBO0FBbEJBO0FBSkE7QUEyQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7QUFGQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQVpBO0FBSkE7QUF3QkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBSEE7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBREE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBcEJBO0FBSkE7QUFnQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBRkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFUQTtBQUpBO0FBcUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQVRBO0FBREE7QUFhQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQTNCQTtBQWdDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFiQTtBQWNBO0FBZEE7QUFQQTtBQXVCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFkQTtBQXpCQTtBQTBDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUNBO0FBUUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTEE7QUFwQkE7QUE0QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQVBBO0FBU0E7QUFDQTtBQWZBO0FBZ0JBO0FBaEJBO0FBUEE7QUF5QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQ0E7QUFNQTtBQVJBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFQQTtBQVNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQWZBO0FBTEE7QUE0QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFmQTtBQUpBO0FBMkJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQWlCQTtBQURBO0FBQ0E7QUFqQkE7QUFnQkE7QUFHQTtBQW5CQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUF0QkE7QUE4QkE7QUFDQTtBQS9CQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQXBDQTtBQUFBO0FBQUE7QUF1Q0E7QUFEQTtBQUNBO0FBdkNBO0FBeUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFuREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBckRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNERBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQXZCQTtBQUhBO0FBNEJBO0FBQ0E7QUFDQTtBQUZBO0FBNUJBO0FBTEE7QUF1Q0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUZBO0FBVkE7QUFKQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUhBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBVkE7QUFKQTtBQXNCQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFOQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFDQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFDQTtBQU1BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7QUFEQTtBQUZBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7QUFDQTtBQW9CQTtBQXBGQTtBQXNGQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBakJBO0FBbUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFEQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQURBO0FBQ0E7QUFTQTtBQXJCQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBN0JBO0FBQUE7QUFDQTtBQUNBO0FBcUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQWxDQTtBQUFBO0FBQ0E7QUFDQTtBQXlDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFWQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQXpCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUEzQ0E7QUFaQTtBQUFBO0FBQ0E7QUFnRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQWhDQTtBQUFBO0FBQ0E7QUFpQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFuQkE7QUFBQTtBQUNBO0FBb0JBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFQQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQWpDQTtBQUNBO0FBQ0E7QUFvQ0E7QUF0Q0E7QUF3Q0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBL0NBO0FBaURBO0FBQ0E7QUFEQTtBQWpEQTtBQWxCQTtBQUFBO0FBQ0E7QUF1RUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQUE7QUFBQTtBQVpBO0FBQUE7QUFDQTtBQWFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBSkE7QUFBQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFRQTtBQXBDQTtBQXNDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBZkE7QUFDQTtBQXVCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFIQTtBQUNBO0FBV0E7QUF6Q0E7QUEyQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFmQTtBQUNBO0FBc0JBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFIQTtBQUNBO0FBVUE7QUF2Q0E7QUF5Q0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBQ0E7QUFRQTtBQXBDQTtBQXNDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFDQTtBQVFBO0FBMUJBO0FBOEJBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBSkE7QUFZQTtBQUNBO0FBQ0E7QUFGQTtBQVpBO0FBSkE7QUFBQTtBQUNBO0FBcUJBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBSkE7QUFZQTtBQUNBO0FBQ0E7QUFGQTtBQVpBO0FBSkE7QUFBQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQVZBO0FBREE7QUFjQTtBQUNBO0FBQ0E7QUFwQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBeENBO0FBSkE7QUErQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFUQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFoQkE7QUFKQTtBQTRCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFDQTtBQU1BO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWdCQTtBQUNBO0FBREE7QUFoQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUEvQkE7QUFpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFBQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUF4REE7QUEwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQVRBO0FBV0E7QUFqSEE7QUFMQTtBQXlIQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFoQkE7QUFKQTtBQTRCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFUQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFmQTtBQURBO0FBSkE7QUE4QkE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSkE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUpBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQWJBO0FBY0E7QUFDQTtBQURBO0FBZEE7QUFpQkE7QUFDQTtBQUNBO0FBbkJBO0FBRkE7QUEwQkE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFiQTtBQUNBO0FBbUJBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUpBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUFDQTtBQVJBO0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQWxCQTtBQUNBO0FBb0JBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFMQTtBQUNBO0FBT0E7QUFBQTtBQUlBO0FBSkE7QUFDQTtBQU1BO0FBQUE7QUFJQTtBQUNBO0FBREE7QUFKQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFzQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBSUE7QUFDQTtBQURBO0FBSkE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFIQTtBQUNBO0FBVUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBUEE7QUFXQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBcEJBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVRBO0FBZUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQXBCQTtBQTRCQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFhQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBakJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVRBO0FBZUE7QUFDQTtBQURBO0FBZkE7QUFrQkE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQXZCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUpBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFmQTtBQW9CQTtBQUNBO0FBREE7QUFwQkE7QUF1QkE7QUFDQTtBQURBO0FBdkJBO0FBMEJBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBbENBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQWFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXpCQTtBQUNBO0FBNkJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lbryinc/dist/bundle.es.js\n"); - -/***/ }), - -/***/ "../node_modules/localforage/dist/localforage.js": -/*!*******************************************************!*\ - !*** ../node_modules/localforage/dist/localforage.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;function _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n/*!\n localForage -- Offline Storage, Improved\n Version 1.7.3\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n\n\n(function (f) {\n if (( false ? undefined : _typeof2(exports)) === \"object\" && typeof module !== \"undefined\") {\n module.exports = f();\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (f),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else { var g; }\n})(function () {\n var define, module, exports;\n return function e(t, n, r) {\n function s(o, u) {\n if (!n[o]) {\n if (!t[o]) {\n var a = typeof require == \"function\" && require;\n if (!u && a) return require(o, !0);\n if (i) return i(o, !0);\n var f = new Error(\"Cannot find module '\" + o + \"'\");\n throw f.code = \"MODULE_NOT_FOUND\", f;\n }\n\n var l = n[o] = {\n exports: {}\n };\n t[o][0].call(l.exports, function (e) {\n var n = t[o][1][e];\n return s(n ? n : e);\n }, l, l.exports, e, t, n, r);\n }\n\n return n[o].exports;\n }\n\n var i = typeof require == \"function\" && require;\n\n for (var o = 0; o < r.length; o++) {\n s(r[o]);\n }\n\n return s;\n }({\n 1: [function (_dereq_, module, exports) {\n (function (global) {\n 'use strict';\n\n var Mutation = global.MutationObserver || global.WebKitMutationObserver;\n var scheduleDrain;\n {\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n\n scheduleDrain = function scheduleDrain() {\n element.data = called = ++called % 2;\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n\n scheduleDrain = function scheduleDrain() {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function scheduleDrain() {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n\n scriptEl.onreadystatechange = function () {\n nextTick();\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function scheduleDrain() {\n setTimeout(nextTick, 0);\n };\n }\n }\n var draining;\n var queue = []; //named nextTick for less confusing stack traces\n\n function nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n\n while (++i < len) {\n oldQueue[i]();\n }\n\n len = queue.length;\n }\n\n draining = false;\n }\n\n module.exports = immediate;\n\n function immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n }\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n }, {}],\n 2: [function (_dereq_, module, exports) {\n 'use strict';\n\n var immediate = _dereq_(1);\n /* istanbul ignore next */\n\n\n function INTERNAL() {}\n\n var handlers = {};\n var REJECTED = ['REJECTED'];\n var FULFILLED = ['FULFILLED'];\n var PENDING = ['PENDING'];\n module.exports = Promise;\n\n function Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n }\n\n Promise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n };\n\n Promise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED || typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n\n var promise = new this.constructor(INTERNAL);\n\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n };\n\n function QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n }\n\n QueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n };\n\n QueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n };\n\n QueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n };\n\n QueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n };\n\n function unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n }\n\n handlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n\n return self;\n };\n\n handlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n\n return self;\n };\n\n function getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n\n if (obj && (_typeof2(obj) === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n }\n\n function safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n\n function onError(value) {\n if (called) {\n return;\n }\n\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n\n if (result.status === 'error') {\n onError(result.value);\n }\n }\n\n function tryCatch(func, value) {\n var out = {};\n\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n\n return out;\n }\n\n Promise.resolve = resolve;\n\n function resolve(value) {\n if (value instanceof this) {\n return value;\n }\n\n return handlers.resolve(new this(INTERNAL), value);\n }\n\n Promise.reject = reject;\n\n function reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n }\n\n Promise.all = all;\n\n function all(iterable) {\n var self = this;\n\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n\n return promise;\n\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n\n function resolveFromAll(outValue) {\n values[i] = outValue;\n\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n }\n\n Promise.race = race;\n\n function race(iterable) {\n var self = this;\n\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n\n return promise;\n\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n }\n }, {\n \"1\": 1\n }],\n 3: [function (_dereq_, module, exports) {\n (function (global) {\n 'use strict';\n\n if (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n }\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n }, {\n \"2\": 2\n }],\n 4: [function (_dereq_, module, exports) {\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n }\n\n var idb = getIDB();\n\n function isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb) {\n return false;\n } // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n\n\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1; // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' && // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n } // Abstracts constructing a Blob object, so it also works in older\n // browsers that don't support the native Blob constructor. (i.e.\n // old QtWebKit versions, at least).\n // Abstracts constructing a Blob object, so it also works in older\n // browsers that don't support the native Blob constructor. (i.e.\n // old QtWebKit versions, at least).\n\n\n function createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n\n return builder.getBlob(properties.type);\n }\n } // This is CommonJS because lie is an external dependency, so Rollup\n // can just ignore it.\n\n\n if (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n }\n\n var Promise$1 = Promise;\n\n function executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n }\n\n function executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n }\n\n function normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n }\n\n function getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n } // Some code originally from async_storage.js in\n // [Gaia](https://github.com/mozilla-b2g/gaia).\n\n\n var DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\n var supportsBlobs = void 0;\n var dbContexts = {};\n var toString = Object.prototype.toString; // Transaction Modes\n\n var READ_ONLY = 'readonly';\n var READ_WRITE = 'readwrite'; // Transform a binary string to an array buffer, because otherwise\n // weird stuff happens when you try to work with the binary string directly.\n // It is known.\n // From http://stackoverflow.com/questions/14967647/ (continues on next line)\n // encode-decode-image-with-base64-breaks-image (2013-04-21)\n\n function _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return buf;\n } //\n // Blobs are not supported in all versions of IndexedDB, notably\n // Chrome <37 and Android <5. In those versions, storing a blob will throw.\n //\n // Various other blob bugs exist in Chrome v37-42 (inclusive).\n // Detecting them is expensive and confusing to users, and Chrome 37-42\n // is at very low usage worldwide, so we do a hacky userAgent check instead.\n //\n // content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n // 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n // FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n //\n // Code borrowed from PouchDB. See:\n // https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n //\n\n\n function _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//); // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n }\n\n function _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n }\n\n function _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name]; // Create a deferred object representing the current database operation.\n\n var deferredOperation = {};\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n }); // Enqueue the deferred operation.\n\n dbContext.deferredOperations.push(deferredOperation); // Chain its promise to the database readiness.\n\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n }\n\n function _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name]; // Dequeue a deferred operation.\n\n var deferredOperation = dbContext.deferredOperations.pop(); // Resolve its promise (which is part of the database readiness\n // chain of promises).\n\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n }\n\n function _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name]; // Dequeue a deferred operation.\n\n var deferredOperation = dbContext.deferredOperations.pop(); // Reject its promise (which is part of the database readiness\n // chain of promises).\n\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n }\n\n function _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n\n try {\n db.createObjectStore(dbInfo.storeName);\n\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n\n _advanceReadiness(dbInfo);\n };\n });\n }\n\n function _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n }\n\n function _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n }\n\n function _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n } // Align the versions to prevent errors.\n\n\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n } // encode a blob for indexeddb engines that don't support blobs\n\n\n function _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n\n reader.readAsBinaryString(blob);\n });\n } // decode an encoded blob\n\n\n function _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n\n return createBlob([arrayBuff], {\n type: encodedBlob.type\n });\n } // is this one of our fancy encoded blobs?\n\n\n function _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n } // Specialize the default `ready()` function by making it dependent\n // on the current database operations. Thus, the driver will be actually\n // ready when it's been initialized (default) *and* there are no pending\n // operations on the database (initiated by some other instances).\n\n\n function _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n } // Try to establish a new db connection to replace the\n // current one which is broken (i.e. experiencing\n // InvalidStateError while creating a transaction).\n\n\n function _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n\n forage._dbInfo.db = null;\n }\n }\n\n dbInfo.db = null;\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n\n throw err;\n });\n } // FF doesn't like Promises (micro-tasks) and IDDB store operations,\n // so we have to do it with callbacks\n\n\n function createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n } // Reopen the database for upgrading.\n\n\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n }\n\n function createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n } // Open the IndexedDB database (automatically creates one if one didn't\n // previously exist), using any options set in the config.\n\n\n function _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n } // Get the current context of the database;\n\n\n var dbContext = dbContexts[dbInfo.name]; // ...or create a new context.\n\n if (!dbContext) {\n dbContext = createDbContext(); // Register the new context in the global container.\n\n dbContexts[dbInfo.name] = dbContext;\n } // Register itself as a running localForage in the current context.\n\n\n dbContext.forages.push(self); // Replace the default `ready()` function with the specialized one.\n\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n } // Create an array of initialization states of the related localForages.\n\n\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n } // Take a snapshot of the related localForages.\n\n\n var forages = dbContext.forages.slice(0); // Initialize the connection process only when\n // all the related localForages aren't pending.\n\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db; // Get the connection or open a new one without upgrade.\n\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo; // Share the final connection amongst related localForages.\n\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n }\n\n function getItem(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n\n if (value === undefined) {\n value = null;\n }\n\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n } // Iterate over all items stored in database.\n\n\n function iterate(iterator, callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n\n var result = iterator(value, cursor.key, iterationNumber++); // when the iterator callback retuns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function setItem(key, value, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n\n return _encodeBlob(value);\n });\n }\n\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName); // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function removeItem(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName); // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n\n var req = store[\"delete\"](key);\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n }; // The request will be also be aborted if we've exceeded our storage\n // space.\n\n\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function clear(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function length(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function key(n, callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function keys(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n db.close();\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n\n if (db) {\n db.close();\n }\n\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n\n if (db) {\n db.close();\n }\n\n resolve(db);\n };\n });\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n db.close();\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n }\n\n var asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n };\n\n function isWebSQLValid() {\n return typeof openDatabase === 'function';\n } // Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n // it to Base64, so this is how we store it to prevent very strange errors with less\n // verbose ways of binary <-> string data storage.\n\n\n var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var BLOB_TYPE_PREFIX = '~~local_forage_type~';\n var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n var SERIALIZED_MARKER = '__lfsc__:';\n var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; // OMG the serializations!\n\n var TYPE_ARRAYBUFFER = 'arbf';\n var TYPE_BLOB = 'blob';\n var TYPE_INT8ARRAY = 'si08';\n var TYPE_UINT8ARRAY = 'ui08';\n var TYPE_UINT8CLAMPEDARRAY = 'uic8';\n var TYPE_INT16ARRAY = 'si16';\n var TYPE_INT32ARRAY = 'si32';\n var TYPE_UINT16ARRAY = 'ur16';\n var TYPE_UINT32ARRAY = 'ui32';\n var TYPE_FLOAT32ARRAY = 'fl32';\n var TYPE_FLOAT64ARRAY = 'fl64';\n var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n var toString$1 = Object.prototype.toString;\n\n function stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n /*jslint bitwise: true */\n\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n\n return buffer;\n } // Converts a buffer to a string to store, serialized, in the backend\n // storage library.\n\n\n function bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n } // Serialize a value, afterwards executing a callback (which usually\n // instructs the `setItem()` callback/promise to be executed). This is how\n // we store binary data with localStorage.\n\n\n function serialize(value, callback) {\n var valueType = '';\n\n if (value) {\n valueType = toString$1.call(value);\n } // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n\n\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n callback(null, e);\n }\n }\n } // Deserialize data we've inserted into a value column/field. We place\n // special markers into our strings to mark them as encoded; this isn't\n // as nice as a meta field, but it's the only sane thing we can do whilst\n // keeping localStorage support intact.\n //\n // Oftentimes this will just deserialize JSON content, but if we have a\n // special marker (SERIALIZED_MARKER, defined above), we will extract\n // some kind of arraybuffer/binary data/typed array out of the string.\n\n\n function deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n } // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n\n\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n var blobType; // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n\n var buffer = stringToBuffer(serializedString); // Return the right type based on the code/type set during\n // serialization.\n\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n\n case TYPE_BLOB:\n return createBlob([buffer], {\n type: blobType\n });\n\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n\n default:\n throw new Error('Unkown type: ' + type);\n }\n }\n\n var localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n };\n /*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\n function createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n } // Open the WebSQL database (automatically creates one if one didn't\n // previously exist), using any options set in the config.\n\n\n function _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n } // Create our key/value table if it doesn't exist.\n\n\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n }\n\n function tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n }\n\n function getItem$1(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null; // Check to see if this is serialized content we need to\n // unpack.\n\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function iterate$1(iterator, callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value; // Check to see if this is serialized content\n // we need to unpack.\n\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1); // void(0) prevents problems with redefinition\n // of `undefined`.\n\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function _setItem(key, value, callback, retriesLeft) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n } // Save the original value to pass to the callback.\n\n\n var originalValue = value;\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n }\n\n function removeItem$1(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n } // Deletes every item in the table.\n // TODO: Find out if this resets the AUTO_INCREMENT number.\n\n\n function clear$1(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n } // Does a simple `COUNT(key)` to get the number of items stored in\n // localForage.\n\n\n function length$1(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n } // Return the key located at key index X; essentially gets the key from a\n // `WHERE id = ?`. This is the most efficient way I can think to implement\n // this rarely-used (in my experience) part of the API, but it can seem\n // inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n // the ID of each key will change every time it's updated. Perhaps a stored\n // procedure for the `setItem()` SQL would solve this problem?\n // TODO: Don't change ID on `setItem()`.\n\n\n function key$1(n, callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function keys$1(callback) {\n var self = this;\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n executeCallback(promise, callback);\n return promise;\n } // https://www.w3.org/TR/webdatabase/#databases\n // > There is no way to enumerate or delete the databases available for an origin from this API.\n\n\n function getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n }\n\n function dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n }\n\n var webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n };\n\n function isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage && // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n }\n\n function _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n\n return keyPrefix;\n } // Check if localStorage throws when saving an item\n\n\n function checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n return false;\n } catch (e) {\n return true;\n }\n } // Check if localStorage is usable and allows to save an item\n // This method checks if localStorage is usable in Safari Private Browsing\n // mode, or in any other case where the available quota for localStorage\n // is 0 and there wasn't any saved items yet.\n\n\n function _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n } // Config the localStorage backend, using options set in the config.\n\n\n function _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n return Promise$1.resolve();\n } // Remove all keys from the datastore, effectively destroying all data in\n // the app's key/value store!\n\n\n function clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n executeCallback(promise, callback);\n return promise;\n } // Retrieve an item from the store. Unlike the original async_storage\n // library in Gaia, we don't modify return values at all. If a key's value\n // is `undefined`, we pass that value to the callback function.\n\n\n function getItem$2(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key); // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n executeCallback(promise, callback);\n return promise;\n } // Iterate over all items in the store.\n\n\n function iterate$2(iterator, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length; // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n\n var value = localStorage.getItem(key); // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n executeCallback(promise, callback);\n return promise;\n } // Same as localStorage's key() method, except takes a callback.\n\n\n function key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n } // Remove the prefix from the key, if a key is found.\n\n\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n executeCallback(promise, callback);\n return promise;\n } // Supply the number of keys in the datastore to the callback function.\n\n\n function length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n executeCallback(promise, callback);\n return promise;\n } // Remove an item from the store, nice and simple.\n\n\n function removeItem$2(key, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n executeCallback(promise, callback);\n return promise;\n } // Set a key's value and run an optional callback once the value is set.\n // Unlike Gaia's implementation, the callback function is passed the value,\n // in case you want to operate on that value only after you're sure it\n // saved, or something like that.\n\n\n function setItem$2(key, value, callback) {\n var self = this;\n key = normalizeKey(key);\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n } // Save the original value to pass to the callback.\n\n\n var originalValue = value;\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n\n reject(e);\n }\n }\n });\n });\n });\n executeCallback(promise, callback);\n return promise;\n }\n\n function dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n options = typeof options !== 'function' && options || {};\n\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n }\n\n var localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n };\n\n var sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n };\n\n var includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n\n i++;\n }\n\n return false;\n };\n\n var isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }; // Drivers are stored here when `defineDriver()` is called.\n // They are shared across all instances of localForage.\n\n\n var DefinedDrivers = {};\n var DriverSupport = {};\n var DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n };\n var DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n var OptionalDriverMethods = ['dropInstance'];\n var LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n var DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n };\n\n function callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n }\n\n function extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n }\n\n var LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n } // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n } // after all config options are set and\n // the driver option is used, try setting it\n\n\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n }; // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver'); // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i]; // when the property is there,\n // it should be a method even when optional\n\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support; // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n\n setDriverToConfig();\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n self._dbInfo = null;\n self._ready = null;\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n } // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n\n\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n\n self._wrapLibraryMethodsWithReady();\n\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n }(); // The actual localForage object that we expose as a module or via a\n // global. It's extended by pulling in one of our other libraries.\n\n\n var localforage_js = new LocalForage();\n module.exports = localforage_js;\n }, {\n \"3\": 3\n }]\n }, {}, [4])(4);\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanM/NjlhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAgICBsb2NhbEZvcmFnZSAtLSBPZmZsaW5lIFN0b3JhZ2UsIEltcHJvdmVkXG4gICAgVmVyc2lvbiAxLjcuM1xuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbWltaWMgUG91Y2hEQiBoZXJlO1xuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB0ZXN0IGZvciBvcGVuRGF0YWJhc2UgYmVjYXVzZSBJRSBNb2JpbGUgaWRlbnRpZmllcyBpdHNlbGZcbiAgICAgICAgLy8gYXMgU2FmYXJpLiBPaCB0aGUgbHVsei4uLlxuICAgICAgICB2YXIgaXNTYWZhcmkgPSB0eXBlb2Ygb3BlbkRhdGFiYXNlICE9PSAndW5kZWZpbmVkJyAmJiAvKFNhZmFyaXxpUGhvbmV8aVBhZHxpUG9kKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhL0JsYWNrQmVycnkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuICAgICAgICB2YXIgaGFzRmV0Y2ggPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgZmV0Y2gudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSAhPT0gLTE7XG5cbiAgICAgICAgLy8gU2FmYXJpIDwxMC4xIGRvZXMgbm90IG1lZXQgb3VyIHJlcXVpcmVtZW50cyBmb3IgSURCIHN1cHBvcnQgKCM1NTcyKVxuICAgICAgICAvLyBzaW5jZSBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXRcbiAgICAgICAgcmV0dXJuICghaXNTYWZhcmkgfHwgaGFzRmV0Y2gpICYmIHR5cGVvZiBpbmRleGVkREIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIC8vIHNvbWUgb3V0ZGF0ZWQgaW1wbGVtZW50YXRpb25zIG9mIElEQiB0aGF0IGFwcGVhciBvbiBTYW1zdW5nXG4gICAgICAgIC8vIGFuZCBIVEMgQW5kcm9pZCBkZXZpY2VzIDw0LjQgYXJlIG1pc3NpbmcgSURCS2V5UmFuZ2VcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTI4XG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvaXNzdWVzLzI3MlxuICAgICAgICB0eXBlb2YgSURCS2V5UmFuZ2UgIT09ICd1bmRlZmluZWQnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gQWJzdHJhY3RzIGNvbnN0cnVjdGluZyBhIEJsb2Igb2JqZWN0LCBzbyBpdCBhbHNvIHdvcmtzIGluIG9sZGVyXG4vLyBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlIG5hdGl2ZSBCbG9iIGNvbnN0cnVjdG9yLiAoaS5lLlxuLy8gb2xkIFF0V2ViS2l0IHZlcnNpb25zLCBhdCBsZWFzdCkuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2IocGFydHMsIHByb3BlcnRpZXMpIHtcbiAgICAvKiBnbG9iYWwgQmxvYkJ1aWxkZXIsTVNCbG9iQnVpbGRlcixNb3pCbG9iQnVpbGRlcixXZWJLaXRCbG9iQnVpbGRlciAqL1xuICAgIHBhcnRzID0gcGFydHMgfHwgW107XG4gICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLm5hbWUgIT09ICdUeXBlRXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBCdWlsZGVyID0gdHlwZW9mIEJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IEJsb2JCdWlsZGVyIDogdHlwZW9mIE1TQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gTVNCbG9iQnVpbGRlciA6IHR5cGVvZiBNb3pCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNb3pCbG9iQnVpbGRlciA6IFdlYktpdEJsb2JCdWlsZGVyO1xuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKHByb3BlcnRpZXMudHlwZSk7XG4gICAgfVxufVxuXG4vLyBUaGlzIGlzIENvbW1vbkpTIGJlY2F1c2UgbGllIGlzIGFuIGV4dGVybmFsIGRlcGVuZGVuY3ksIHNvIFJvbGx1cFxuLy8gY2FuIGp1c3QgaWdub3JlIGl0LlxuaWYgKHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEluIHRoZSBcIm5vcHJvbWlzZXNcIiBidWlsZCB0aGlzIHdpbGwganVzdCB0aHJvdyBpZiB5b3UgZG9uJ3QgaGF2ZVxuICAgIC8vIGEgZ2xvYmFsIHByb21pc2Ugb2JqZWN0LCBidXQgaXQgd291bGQgdGhyb3cgYW55d2F5IGxhdGVyLlxuICAgIF9kZXJlcV8oMyk7XG59XG52YXIgUHJvbWlzZSQxID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXJyb3JDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlW1wiY2F0Y2hcIl0oZXJyb3JDYWxsYmFjayk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVLZXkoa2V5KSB7XG4gICAgLy8gQ2FzdCB0aGUga2V5IHRvIGEgc3RyaW5nLCBhcyB0aGF0J3MgYWxsIHdlIGNhbiBzZXQgYXMgYSBrZXkuXG4gICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihrZXkgKyAnIHVzZWQgYXMgYSBrZXksIGJ1dCBpdCBpcyBub3QgYSBzdHJpbmcuJyk7XG4gICAgICAgIGtleSA9IFN0cmluZyhrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG59XG5cbmZ1bmN0aW9uIGdldENhbGxiYWNrKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICYmIHR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbn1cblxuLy8gU29tZSBjb2RlIG9yaWdpbmFsbHkgZnJvbSBhc3luY19zdG9yYWdlLmpzIGluXG4vLyBbR2FpYV0oaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEtYjJnL2dhaWEpLlxuXG52YXIgREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSA9ICdsb2NhbC1mb3JhZ2UtZGV0ZWN0LWJsb2Itc3VwcG9ydCc7XG52YXIgc3VwcG9ydHNCbG9icyA9IHZvaWQgMDtcbnZhciBkYkNvbnRleHRzID0ge307XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBUcmFuc2FjdGlvbiBNb2Rlc1xudmFyIFJFQURfT05MWSA9ICdyZWFkb25seSc7XG52YXIgUkVBRF9XUklURSA9ICdyZWFkd3JpdGUnO1xuXG4vLyBUcmFuc2Zvcm0gYSBiaW5hcnkgc3RyaW5nIHRvIGFuIGFycmF5IGJ1ZmZlciwgYmVjYXVzZSBvdGhlcndpc2Vcbi8vIHdlaXJkIHN0dWZmIGhhcHBlbnMgd2hlbiB5b3UgdHJ5IHRvIHdvcmsgd2l0aCB0aGUgYmluYXJ5IHN0cmluZyBkaXJlY3RseS5cbi8vIEl0IGlzIGtub3duLlxuLy8gRnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE0OTY3NjQ3LyAoY29udGludWVzIG9uIG5leHQgbGluZSlcbi8vIGVuY29kZS1kZWNvZGUtaW1hZ2Utd2l0aC1iYXNlNjQtYnJlYWtzLWltYWdlICgyMDEzLTA0LTIxKVxuZnVuY3Rpb24gX2JpblN0cmluZ1RvQXJyYXlCdWZmZXIoYmluKSB7XG4gICAgdmFyIGxlbmd0aCA9IGJpbi5sZW5ndGg7XG4gICAgdmFyIGJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gYmluLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cbi8vXG4vLyBCbG9icyBhcmUgbm90IHN1cHBvcnRlZCBpbiBhbGwgdmVyc2lvbnMgb2YgSW5kZXhlZERCLCBub3RhYmx5XG4vLyBDaHJvbWUgPDM3IGFuZCBBbmRyb2lkIDw1LiBJbiB0aG9zZSB2ZXJzaW9ucywgc3RvcmluZyBhIGJsb2Igd2lsbCB0aHJvdy5cbi8vXG4vLyBWYXJpb3VzIG90aGVyIGJsb2IgYnVncyBleGlzdCBpbiBDaHJvbWUgdjM3LTQyIChpbmNsdXNpdmUpLlxuLy8gRGV0ZWN0aW5nIHRoZW0gaXMgZXhwZW5zaXZlIGFuZCBjb25mdXNpbmcgdG8gdXNlcnMsIGFuZCBDaHJvbWUgMzctNDJcbi8vIGlzIGF0IHZlcnkgbG93IHVzYWdlIHdvcmxkd2lkZSwgc28gd2UgZG8gYSBoYWNreSB1c2VyQWdlbnQgY2hlY2sgaW5zdGVhZC5cbi8vXG4vLyBjb250ZW50LXR5cGUgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDA4MTIwXG4vLyA0MDQgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3OTE2XG4vLyBGaWxlUmVhZGVyIGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0NzgzNlxuLy9cbi8vIENvZGUgYm9ycm93ZWQgZnJvbSBQb3VjaERCLiBTZWU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcG91Y2hkYi9wb3VjaGRiL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL25vZGVfbW9kdWxlcy9wb3VjaGRiLWFkYXB0ZXItaWRiL3NyYy9ibG9iU3VwcG9ydC5qc1xuLy9cbmZ1bmN0aW9uIF9jaGVja0Jsb2JTdXBwb3J0V2l0aG91dENhY2hpbmcoaWRiKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgdmFyIHR4biA9IGlkYi50cmFuc2FjdGlvbihERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFLCBSRUFEX1dSSVRFKTtcbiAgICAgICAgdmFyIGJsb2IgPSBjcmVhdGVCbG9iKFsnJ10pO1xuICAgICAgICB0eG4ub2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSkucHV0KGJsb2IsICdrZXknKTtcblxuICAgICAgICB0eG4ub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gYWJvcnRzIG5vdyBpdHMgZHVlIHRvIG5vdCBiZWluZyBhYmxlIHRvXG4gICAgICAgICAgICAvLyB3cml0ZSB0byB0aGUgZGF0YWJhc2UsIGxpa2VseSBkdWUgdG8gdGhlIGRpc2sgYmVpbmcgZnVsbFxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHR4bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRDaHJvbWUgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICAgICAgICAgIHZhciBtYXRjaGVkRWRnZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8vKTtcbiAgICAgICAgICAgIC8vIE1TIEVkZ2UgcHJldGVuZHMgdG8gYmUgQ2hyb21lIDQyOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9oaDg2OTMwMSUyOHY9dnMuODUlMjkuYXNweFxuICAgICAgICAgICAgcmVzb2x2ZShtYXRjaGVkRWRnZSB8fCAhbWF0Y2hlZENocm9tZSB8fCBwYXJzZUludChtYXRjaGVkQ2hyb21lWzFdLCAxMCkgPj0gNDMpO1xuICAgICAgICB9O1xuICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGVycm9yLCBzbyBhc3N1bWUgdW5zdXBwb3J0ZWRcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnQoaWRiKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBwb3J0c0Jsb2JzID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKHN1cHBvcnRzQmxvYnMpO1xuICAgIH1cbiAgICByZXR1cm4gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN1cHBvcnRzQmxvYnMgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQmxvYnM7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBDcmVhdGUgYSBkZWZlcnJlZCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSB7fTtcblxuICAgIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIC8vIEVucXVldWUgdGhlIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnB1c2goZGVmZXJyZWRPcGVyYXRpb24pO1xuXG4gICAgLy8gQ2hhaW4gaXRzIHByb21pc2UgdG8gdGhlIGRhdGFiYXNlIHJlYWRpbmVzcy5cbiAgICBpZiAoIWRiQ29udGV4dC5kYlJlYWR5KSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkYkNvbnRleHQuZGJSZWFkeSA9IGRiQ29udGV4dC5kYlJlYWR5LnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2FkdmFuY2VSZWFkaW5lc3MoZGJJbmZvKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVzb2x2ZSBpdHMgcHJvbWlzZSAod2hpY2ggaXMgcGFydCBvZiB0aGUgZGF0YWJhc2UgcmVhZGluZXNzXG4gICAgLy8gY2hhaW4gb2YgcHJvbWlzZXMpLlxuICAgIGlmIChkZWZlcnJlZE9wZXJhdGlvbikge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlKCk7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdFJlYWRpbmVzcyhkYkluZm8sIGVycikge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIERlcXVldWUgYSBkZWZlcnJlZCBvcGVyYXRpb24uXG4gICAgdmFyIGRlZmVycmVkT3BlcmF0aW9uID0gZGJDb250ZXh0LmRlZmVycmVkT3BlcmF0aW9ucy5wb3AoKTtcblxuICAgIC8vIFJlamVjdCBpdHMgcHJvbWlzZSAod2hpY2ggaXMgcGFydCBvZiB0aGUgZGF0YWJhc2UgcmVhZGluZXNzXG4gICAgLy8gY2hhaW4gb2YgcHJvbWlzZXMpLlxuICAgIGlmIChkZWZlcnJlZE9wZXJhdGlvbikge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIHVwZ3JhZGVOZWVkZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gfHwgY3JlYXRlRGJDb250ZXh0KCk7XG5cbiAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICBfZGVmZXJSZWFkaW5lc3MoZGJJbmZvKTtcbiAgICAgICAgICAgICAgICBkYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGJJbmZvLmRiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYkFyZ3MgPSBbZGJJbmZvLm5hbWVdO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBkYkFyZ3MucHVzaChkYkluZm8udmVyc2lvbik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3BlbnJlcSA9IGlkYi5vcGVuLmFwcGx5KGlkYiwgZGJBcmdzKTtcblxuICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgb3BlbnJlcS5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKGRiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5vbGRWZXJzaW9uIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZGVkIHdoZW4gc3VwcG9ydCBmb3IgYmxvYiBzaGltcyB3YXMgYWRkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdDb25zdHJhaW50RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSBcIicgKyBkYkluZm8ubmFtZSArICdcIicgKyAnIGhhcyBiZWVuIHVwZ3JhZGVkIGZyb20gdmVyc2lvbiAnICsgZS5vbGRWZXJzaW9uICsgJyB0byB2ZXJzaW9uICcgKyBlLm5ld1ZlcnNpb24gKyAnLCBidXQgdGhlIHN0b3JhZ2UgXCInICsgZGJJbmZvLnN0b3JlTmFtZSArICdcIiBhbHJlYWR5IGV4aXN0cy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZW5yZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZWplY3Qob3BlbnJlcS5lcnJvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgb3BlbnJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXNvbHZlKG9wZW5yZXEucmVzdWx0KTtcbiAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKGRiSW5mbyk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKSB7XG4gICAgcmV0dXJuIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIHRydWUpO1xufVxuXG5mdW5jdGlvbiBfaXNVcGdyYWRlTmVlZGVkKGRiSW5mbywgZGVmYXVsdFZlcnNpb24pIHtcbiAgICBpZiAoIWRiSW5mby5kYikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNOZXdTdG9yZSA9ICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKTtcbiAgICB2YXIgaXNEb3duZ3JhZGUgPSBkYkluZm8udmVyc2lvbiA8IGRiSW5mby5kYi52ZXJzaW9uO1xuICAgIHZhciBpc1VwZ3JhZGUgPSBkYkluZm8udmVyc2lvbiA+IGRiSW5mby5kYi52ZXJzaW9uO1xuXG4gICAgaWYgKGlzRG93bmdyYWRlKSB7XG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIG5vdCB0aGUgZGVmYXVsdCBvbmVcbiAgICAgICAgLy8gdGhlbiB3YXJuIGZvciBpbXBvc3NpYmxlIGRvd25ncmFkZS5cbiAgICAgICAgaWYgKGRiSW5mby52ZXJzaW9uICE9PSBkZWZhdWx0VmVyc2lvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGF0YWJhc2UgXCInICsgZGJJbmZvLm5hbWUgKyAnXCInICsgXCIgY2FuJ3QgYmUgZG93bmdyYWRlZCBmcm9tIHZlcnNpb24gXCIgKyBkYkluZm8uZGIudmVyc2lvbiArICcgdG8gdmVyc2lvbiAnICsgZGJJbmZvLnZlcnNpb24gKyAnLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsaWduIHRoZSB2ZXJzaW9ucyB0byBwcmV2ZW50IGVycm9ycy5cbiAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoaXNVcGdyYWRlIHx8IGlzTmV3U3RvcmUpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN0b3JlIGlzIG5ldyB0aGVuIGluY3JlbWVudCB0aGUgdmVyc2lvbiAoaWYgbmVlZGVkKS5cbiAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gXCJ1cGdyYWRlbmVlZGVkXCIgZXZlbnQgd2hpY2ggaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gZm9yIGNyZWF0aW5nIGEgc3RvcmUuXG4gICAgICAgIGlmIChpc05ld1N0b3JlKSB7XG4gICAgICAgICAgICB2YXIgaW5jVmVyc2lvbiA9IGRiSW5mby5kYi52ZXJzaW9uICsgMTtcbiAgICAgICAgICAgIGlmIChpbmNWZXJzaW9uID4gZGJJbmZvLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBkYkluZm8udmVyc2lvbiA9IGluY1ZlcnNpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGVuY29kZSBhIGJsb2IgZm9yIGluZGV4ZWRkYiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBibG9ic1xuZnVuY3Rpb24gX2VuY29kZUJsb2IoYmxvYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBiYXNlNjQgPSBidG9hKGUudGFyZ2V0LnJlc3VsdCB8fCAnJyk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBfX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0LFxuICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7XG4gICAgfSk7XG59XG5cbi8vIGRlY29kZSBhbiBlbmNvZGVkIGJsb2JcbmZ1bmN0aW9uIF9kZWNvZGVCbG9iKGVuY29kZWRCbG9iKSB7XG4gICAgdmFyIGFycmF5QnVmZiA9IF9iaW5TdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoZW5jb2RlZEJsb2IuZGF0YSkpO1xuICAgIHJldHVybiBjcmVhdGVCbG9iKFthcnJheUJ1ZmZdLCB7IHR5cGU6IGVuY29kZWRCbG9iLnR5cGUgfSk7XG59XG5cbi8vIGlzIHRoaXMgb25lIG9mIG91ciBmYW5jeSBlbmNvZGVkIGJsb2JzP1xuZnVuY3Rpb24gX2lzRW5jb2RlZEJsb2IodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iO1xufVxuXG4vLyBTcGVjaWFsaXplIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiBieSBtYWtpbmcgaXQgZGVwZW5kZW50XG4vLyBvbiB0aGUgY3VycmVudCBkYXRhYmFzZSBvcGVyYXRpb25zLiBUaHVzLCB0aGUgZHJpdmVyIHdpbGwgYmUgYWN0dWFsbHlcbi8vIHJlYWR5IHdoZW4gaXQncyBiZWVuIGluaXRpYWxpemVkIChkZWZhdWx0KSAqYW5kKiB0aGVyZSBhcmUgbm8gcGVuZGluZ1xuLy8gb3BlcmF0aW9ucyBvbiB0aGUgZGF0YWJhc2UgKGluaXRpYXRlZCBieSBzb21lIG90aGVyIGluc3RhbmNlcykuXG5mdW5jdGlvbiBfZnVsbHlSZWFkeShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5faW5pdFJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW3NlbGYuX2RiSW5mby5uYW1lXTtcblxuICAgICAgICBpZiAoZGJDb250ZXh0ICYmIGRiQ29udGV4dC5kYlJlYWR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZGJDb250ZXh0LmRiUmVhZHk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gVHJ5IHRvIGVzdGFibGlzaCBhIG5ldyBkYiBjb25uZWN0aW9uIHRvIHJlcGxhY2UgdGhlXG4vLyBjdXJyZW50IG9uZSB3aGljaCBpcyBicm9rZW4gKGkuZS4gZXhwZXJpZW5jaW5nXG4vLyBJbnZhbGlkU3RhdGVFcnJvciB3aGlsZSBjcmVhdGluZyBhIHRyYW5zYWN0aW9uKS5cbmZ1bmN0aW9uIF90cnlSZWNvbm5lY3QoZGJJbmZvKSB7XG4gICAgX2RlZmVyUmVhZGluZXNzKGRiSW5mbyk7XG5cbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgaWYgKGZvcmFnZS5fZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRiSW5mby5kYiA9IG51bGw7XG5cbiAgICByZXR1cm4gX2dldE9yaWdpbmFsQ29ubmVjdGlvbihkYkluZm8pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiO1xuICAgICAgICBpZiAoX2lzVXBncmFkZU5lZWRlZChkYkluZm8pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAvLyBzdG9yZSB0aGUgbGF0ZXN0IGRiIHJlZmVyZW5jZVxuICAgICAgICAvLyBpbiBjYXNlIHRoZSBkYiB3YXMgdXBncmFkZWRcbiAgICAgICAgZGJJbmZvLmRiID0gZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yYWdlc1tpXS5fZGJJbmZvLmRiID0gZGI7XG4gICAgICAgIH1cbiAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgX3JlamVjdFJlYWRpbmVzcyhkYkluZm8sIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbn1cblxuLy8gRkYgZG9lc24ndCBsaWtlIFByb21pc2VzIChtaWNyby10YXNrcykgYW5kIElEREIgc3RvcmUgb3BlcmF0aW9ucyxcbi8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgd2l0aCBjYWxsYmFja3NcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMpIHtcbiAgICBpZiAocmV0cmllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHJpZXMgPSAxO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHZhciB0eCA9IGRiSW5mby5kYi50cmFuc2FjdGlvbihkYkluZm8uc3RvcmVOYW1lLCBtb2RlKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdHgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmV0cmllcyA+IDAgJiYgKCFkYkluZm8uZGIgfHwgZXJyLm5hbWUgPT09ICdJbnZhbGlkU3RhdGVFcnJvcicgfHwgZXJyLm5hbWUgPT09ICdOb3RGb3VuZEVycm9yJykpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicgJiYgIWRiSW5mby5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGRiSW5mby5zdG9yZU5hbWUpICYmIGRiSW5mby52ZXJzaW9uIDw9IGRiSW5mby5kYi52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBkYiB2ZXJzaW9uLCB0byBjcmVhdGUgdGhlIG5ldyBPYmplY3RTdG9yZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYkluZm8udmVyc2lvbiA9IGRiSW5mby5kYi52ZXJzaW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90cnlSZWNvbm5lY3QoZGJJbmZvKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oZGJJbmZvLCBtb2RlLCBjYWxsYmFjaywgcmV0cmllcyAtIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRGJDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8vIFJ1bm5pbmcgbG9jYWxGb3JhZ2VzIHNoYXJpbmcgYSBkYXRhYmFzZS5cbiAgICAgICAgZm9yYWdlczogW10sXG4gICAgICAgIC8vIFNoYXJlZCBkYXRhYmFzZS5cbiAgICAgICAgZGI6IG51bGwsXG4gICAgICAgIC8vIERhdGFiYXNlIHJlYWRpbmVzcyAocHJvbWlzZSkuXG4gICAgICAgIGRiUmVhZHk6IG51bGwsXG4gICAgICAgIC8vIERlZmVycmVkIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlLlxuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbnM6IFtdXG4gICAgfTtcbn1cblxuLy8gT3BlbiB0aGUgSW5kZXhlZERCIGRhdGFiYXNlIChhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgb25lIGlmIG9uZSBkaWRuJ3Rcbi8vIHByZXZpb3VzbHkgZXhpc3QpLCB1c2luZyBhbnkgb3B0aW9ucyBzZXQgaW4gdGhlIGNvbmZpZy5cbmZ1bmN0aW9uIF9pbml0U3RvcmFnZShvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7XG4gICAgICAgIGRiOiBudWxsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgZGJJbmZvW2ldID0gb3B0aW9uc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250ZXh0IG9mIHRoZSBkYXRhYmFzZTtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyAuLi5vciBjcmVhdGUgYSBuZXcgY29udGV4dC5cbiAgICBpZiAoIWRiQ29udGV4dCkge1xuICAgICAgICBkYkNvbnRleHQgPSBjcmVhdGVEYkNvbnRleHQoKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBjb250ZXh0IGluIHRoZSBnbG9iYWwgY29udGFpbmVyLlxuICAgICAgICBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSA9IGRiQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBydW5uaW5nIGxvY2FsRm9yYWdlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gICAgZGJDb250ZXh0LmZvcmFnZXMucHVzaChzZWxmKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGRlZmF1bHQgYHJlYWR5KClgIGZ1bmN0aW9uIHdpdGggdGhlIHNwZWNpYWxpemVkIG9uZS5cbiAgICBpZiAoIXNlbGYuX2luaXRSZWFkeSkge1xuICAgICAgICBzZWxmLl9pbml0UmVhZHkgPSBzZWxmLnJlYWR5O1xuICAgICAgICBzZWxmLnJlYWR5ID0gX2Z1bGx5UmVhZHk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIGluaXRpYWxpemF0aW9uIHN0YXRlcyBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGluaXRQcm9taXNlcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gaWdub3JlRXJyb3JzKCkge1xuICAgICAgICAvLyBEb24ndCBoYW5kbGUgZXJyb3JzIGhlcmUsXG4gICAgICAgIC8vIGp1c3QgbWFrZXMgc3VyZSByZWxhdGVkIGxvY2FsRm9yYWdlcyBhcmVuJ3QgcGVuZGluZy5cbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYkNvbnRleHQuZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZm9yYWdlID0gZGJDb250ZXh0LmZvcmFnZXNbal07XG4gICAgICAgIGlmIChmb3JhZ2UgIT09IHNlbGYpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHdhaXQgZm9yIGl0c2VsZi4uLlxuICAgICAgICAgICAgaW5pdFByb21pc2VzLnB1c2goZm9yYWdlLl9pbml0UmVhZHkoKVtcImNhdGNoXCJdKGlnbm9yZUVycm9ycykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGFrZSBhIHNuYXBzaG90IG9mIHRoZSByZWxhdGVkIGxvY2FsRm9yYWdlcy5cbiAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzLnNsaWNlKDApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29ubmVjdGlvbiBwcm9jZXNzIG9ubHkgd2hlblxuICAgIC8vIGFsbCB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgcmV0dXJuIFByb21pc2UkMS5hbGwoaW5pdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGJJbmZvLmRiID0gZGJDb250ZXh0LmRiO1xuICAgICAgICAvLyBHZXQgdGhlIGNvbm5lY3Rpb24gb3Igb3BlbiBhIG5ldyBvbmUgd2l0aG91dCB1cGdyYWRlLlxuICAgICAgICByZXR1cm4gX2dldE9yaWdpbmFsQ29ubmVjdGlvbihkYkluZm8pO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiO1xuICAgICAgICBpZiAoX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIHNlbGYuX2RlZmF1bHRDb25maWcudmVyc2lvbikpIHtcbiAgICAgICAgICAgIC8vIFJlb3BlbiB0aGUgZGF0YWJhc2UgZm9yIHVwZ3JhZGluZy5cbiAgICAgICAgICAgIHJldHVybiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRiO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgICAgIC8vIFNoYXJlIHRoZSBmaW5hbCBjb25uZWN0aW9uIGFtb25nc3QgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZm9yYWdlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNba107XG4gICAgICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZiBpcyBhbHJlYWR5IHVwLXRvLWRhdGUuXG4gICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBkYkluZm8uZGI7XG4gICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8udmVyc2lvbiA9IGRiSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW0oa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc0VuY29kZWRCbG9iKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX2RlY29kZUJsb2IodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gSXRlcmF0ZSBvdmVyIGFsbCBpdGVtcyBzdG9yZWQgaW4gZGF0YWJhc2UuXG5mdW5jdGlvbiBpdGVyYXRlKGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUub3BlbkN1cnNvcigpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjdXJzb3IudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc0VuY29kZWRCbG9iKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yKHZhbHVlLCBjdXJzb3Iua2V5LCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBpdGVyYXRvciBjYWxsYmFjayByZXR1bnMgYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5vbi1gdW5kZWZpbmVkYCkgdmFsdWUsIHRoZW4gd2Ugc3RvcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBpdGVyYXRpb24gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcltcImNvbnRpbnVlXCJdKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZGJJbmZvO1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBpZiAodG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydChkYkluZm8uZGIpLnRoZW4oZnVuY3Rpb24gKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9iU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZW5jb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiB3ZSBkb24ndCBfc2F2ZV8gbnVsbCBpcyBiZWNhdXNlIElFIDEwIGRvZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90IHN1cHBvcnQgc2F2aW5nIHRoZSBgbnVsbGAgdHlwZSBpbiBJbmRleGVkREIuIEhvd1xuICAgICAgICAgICAgICAgICAgICAvLyBpcm9uaWMsIGdpdmVuIHRoZSBidWcgYmVsb3chXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvaXNzdWVzLzE2MVxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcblxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdCB0byB1bmRlZmluZWQgc28gdGhlIHZhbHVlIHBhc3NlZCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2svcHJvbWlzZSBpcyB0aGUgc2FtZSBhcyB3aGF0IG9uZSB3b3VsZCBnZXQgb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBgZ2V0SXRlbSgpYCBsYXRlci4gVGhpcyBsZWFkcyB0byBzb21lIHdlaXJkbmVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHNldEl0ZW0oJ2ZvbycsIHVuZGVmaW5lZCkgd2lsbCByZXR1cm4gYG51bGxgKSwgYnV0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBteSBmYXVsdCBsb2NhbFN0b3JhZ2UgaXMgb3VyIGJhc2VsaW5lIGFuZCB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdlaXJkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBhIEdydW50IHRhc2sgdG8gbWFrZSB0aGlzIHNhZmUgZm9yIElFIGFuZCBzb21lXG4gICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb25zIG9mIEFuZHJvaWQgKGluY2x1ZGluZyB0aG9zZSB1c2VkIGJ5IENvcmRvdmEpLlxuICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxseSBJRSB3b24ndCBsaWtlIGAuZGVsZXRlKClgIGFuZCB3aWxsIGluc2lzdCBvblxuICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyBgWydkZWxldGUnXSgpYCwgYnV0IHdlIGhhdmUgYSBidWlsZCBzdGVwIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgLy8gZml4ZXMgdGhpcyBmb3IgdXMgbm93LlxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmVbXCJkZWxldGVcIl0oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Qgd2lsbCBiZSBhbHNvIGJlIGFib3J0ZWQgaWYgd2UndmUgZXhjZWVkZWQgb3VyIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BhY2UuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGNsZWFyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX1dSSVRFLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY2xlYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBsZW5ndGgoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLmNvdW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5KG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFkdmFuY2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuQ3Vyc29yKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoZXJlIHdlcmVuJ3QgZW5vdWdoIGtleXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdGhlIGZpcnN0IGtleSwgcmV0dXJuIGl0IGlmIHRoYXQncyB3aGF0IHRoZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YW50ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJzb3Iua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZHZhbmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFzayB0aGUgY3Vyc29yIHRvIHNraXAgYWhlYWQgblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWNvcmRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5hZHZhbmNlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3ZlIGdvdCB0aGUgbnRoIGtleS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJzb3Iua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyhjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUub3BlbkN1cnNvcigpO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gcmVxLnJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGtleXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBkcm9wSW5zdGFuY2Uob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGlzQ3VycmVudERiID0gb3B0aW9ucy5uYW1lID09PSBjdXJyZW50Q29uZmlnLm5hbWUgJiYgc2VsZi5fZGJJbmZvLmRiO1xuXG4gICAgICAgIHZhciBkYlByb21pc2UgPSBpc0N1cnJlbnREYiA/IFByb21pc2UkMS5yZXNvbHZlKHNlbGYuX2RiSW5mby5kYikgOiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tvcHRpb25zLm5hbWVdO1xuICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcbiAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yYWdlc1tpXS5fZGJJbmZvLmRiID0gZGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5zdG9yZU5hbWUpIHtcbiAgICAgICAgICAgIHByb21pc2UgPSBkYlByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICBfZGVmZXJSZWFkaW5lc3Mob3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tvcHRpb25zLm5hbWVdO1xuICAgICAgICAgICAgICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wREJQcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBpZGIuZGVsZXRlRGF0YWJhc2Uob3B0aW9ucy5uYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGIgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGIgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRyb3BEQlByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2FkdmFuY2VSZWFkaW5lc3MoX2ZvcmFnZS5fZGJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAoX3JlamVjdFJlYWRpbmVzcyhvcHRpb25zLCBlcnIpIHx8IFByb21pc2UkMS5yZXNvbHZlKCkpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb21pc2UgPSBkYlByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMob3B0aW9ucy5zdG9yZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IGRiLnZlcnNpb24gKyAxO1xuXG4gICAgICAgICAgICAgICAgX2RlZmVyUmVhZGluZXNzKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuXG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8udmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BPYmplY3RQcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBpZGIub3BlbihvcHRpb25zLm5hbWUsIG5ld1ZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKG9wdGlvbnMuc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wT2JqZWN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgICAgICBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3JhZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZvcmFnZTIgPSBmb3JhZ2VzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ZvcmFnZTIuX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2FkdmFuY2VSZWFkaW5lc3MoX2ZvcmFnZTIuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgYXN5bmNTdG9yYWdlID0ge1xuICAgIF9kcml2ZXI6ICdhc3luY1N0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlLFxuICAgIF9zdXBwb3J0OiBpc0luZGV4ZWREQlZhbGlkKCksXG4gICAgaXRlcmF0ZTogaXRlcmF0ZSxcbiAgICBnZXRJdGVtOiBnZXRJdGVtLFxuICAgIHNldEl0ZW06IHNldEl0ZW0sXG4gICAgcmVtb3ZlSXRlbTogcmVtb3ZlSXRlbSxcbiAgICBjbGVhcjogY2xlYXIsXG4gICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAga2V5OiBrZXksXG4gICAga2V5czoga2V5cyxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZVxufTtcblxuZnVuY3Rpb24gaXNXZWJTUUxWYWxpZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9wZW5EYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLy8gU2FkbHksIHRoZSBiZXN0IHdheSB0byBzYXZlIGJpbmFyeSBkYXRhIGluIFdlYlNRTC9sb2NhbFN0b3JhZ2UgaXMgc2VyaWFsaXppbmdcbi8vIGl0IHRvIEJhc2U2NCwgc28gdGhpcyBpcyBob3cgd2Ugc3RvcmUgaXQgdG8gcHJldmVudCB2ZXJ5IHN0cmFuZ2UgZXJyb3JzIHdpdGggbGVzc1xuLy8gdmVyYm9zZSB3YXlzIG9mIGJpbmFyeSA8LT4gc3RyaW5nIGRhdGEgc3RvcmFnZS5cbnZhciBCQVNFX0NIQVJTID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG52YXIgQkxPQl9UWVBFX1BSRUZJWCA9ICd+fmxvY2FsX2ZvcmFnZV90eXBlfic7XG52YXIgQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCA9IC9efn5sb2NhbF9mb3JhZ2VfdHlwZX4oW15+XSspfi87XG5cbnZhciBTRVJJQUxJWkVEX01BUktFUiA9ICdfX2xmc2NfXzonO1xudmFyIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCA9IFNFUklBTElaRURfTUFSS0VSLmxlbmd0aDtcblxuLy8gT01HIHRoZSBzZXJpYWxpemF0aW9ucyFcbnZhciBUWVBFX0FSUkFZQlVGRkVSID0gJ2FyYmYnO1xudmFyIFRZUEVfQkxPQiA9ICdibG9iJztcbnZhciBUWVBFX0lOVDhBUlJBWSA9ICdzaTA4JztcbnZhciBUWVBFX1VJTlQ4QVJSQVkgPSAndWkwOCc7XG52YXIgVFlQRV9VSU5UOENMQU1QRURBUlJBWSA9ICd1aWM4JztcbnZhciBUWVBFX0lOVDE2QVJSQVkgPSAnc2kxNic7XG52YXIgVFlQRV9JTlQzMkFSUkFZID0gJ3NpMzInO1xudmFyIFRZUEVfVUlOVDE2QVJSQVkgPSAndXIxNic7XG52YXIgVFlQRV9VSU5UMzJBUlJBWSA9ICd1aTMyJztcbnZhciBUWVBFX0ZMT0FUMzJBUlJBWSA9ICdmbDMyJztcbnZhciBUWVBFX0ZMT0FUNjRBUlJBWSA9ICdmbDY0JztcbnZhciBUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCA9IFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCArIFRZUEVfQVJSQVlCVUZGRVIubGVuZ3RoO1xuXG52YXIgdG9TdHJpbmckMSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICAvLyBGaWxsIHRoZSBzdHJpbmcgaW50byBhIEFycmF5QnVmZmVyLlxuICAgIHZhciBidWZmZXJMZW5ndGggPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAqIDAuNzU7XG4gICAgdmFyIGxlbiA9IHNlcmlhbGl6ZWRTdHJpbmcubGVuZ3RoO1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gMDtcbiAgICB2YXIgZW5jb2RlZDEsIGVuY29kZWQyLCBlbmNvZGVkMywgZW5jb2RlZDQ7XG5cbiAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIGlmIChzZXJpYWxpemVkU3RyaW5nW3NlcmlhbGl6ZWRTdHJpbmcubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ1ZmZlckxlbmd0aCk7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgICAgICBlbmNvZGVkMSA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2ldKTtcbiAgICAgICAgZW5jb2RlZDIgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMV0pO1xuICAgICAgICBlbmNvZGVkMyA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAyXSk7XG4gICAgICAgIGVuY29kZWQ0ID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDNdKTtcblxuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJ5dGVzW3ArK10gPSBlbmNvZGVkMSA8PCAyIHwgZW5jb2RlZDIgPj4gNDtcbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMiAmIDE1KSA8PCA0IHwgZW5jb2RlZDMgPj4gMjtcbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMyAmIDMpIDw8IDYgfCBlbmNvZGVkNCAmIDYzO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyO1xufVxuXG4vLyBDb252ZXJ0cyBhIGJ1ZmZlciB0byBhIHN0cmluZyB0byBzdG9yZSwgc2VyaWFsaXplZCwgaW4gdGhlIGJhY2tlbmRcbi8vIHN0b3JhZ2UgbGlicmFyeS5cbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcikge1xuICAgIC8vIGJhc2U2NC1hcnJheWJ1ZmZlclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgdmFyIGJhc2U2NFN0cmluZyA9ICcnO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIC8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cbiAgICAgICAgYmFzZTY0U3RyaW5nICs9IEJBU0VfQ0hBUlNbYnl0ZXNbaV0gPj4gMl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTWyhieXRlc1tpXSAmIDMpIDw8IDQgfCBieXRlc1tpICsgMV0gPj4gNF07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTWyhieXRlc1tpICsgMV0gJiAxNSkgPDwgMiB8IGJ5dGVzW2kgKyAyXSA+PiA2XTtcbiAgICAgICAgYmFzZTY0U3RyaW5nICs9IEJBU0VfQ0hBUlNbYnl0ZXNbaSArIDJdICYgNjNdO1xuICAgIH1cblxuICAgIGlmIChieXRlcy5sZW5ndGggJSAzID09PSAyKSB7XG4gICAgICAgIGJhc2U2NFN0cmluZyA9IGJhc2U2NFN0cmluZy5zdWJzdHJpbmcoMCwgYmFzZTY0U3RyaW5nLmxlbmd0aCAtIDEpICsgJz0nO1xuICAgIH0gZWxzZSBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMSkge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAyKSArICc9PSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U2NFN0cmluZztcbn1cblxuLy8gU2VyaWFsaXplIGEgdmFsdWUsIGFmdGVyd2FyZHMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgKHdoaWNoIHVzdWFsbHlcbi8vIGluc3RydWN0cyB0aGUgYHNldEl0ZW0oKWAgY2FsbGJhY2svcHJvbWlzZSB0byBiZSBleGVjdXRlZCkuIFRoaXMgaXMgaG93XG4vLyB3ZSBzdG9yZSBiaW5hcnkgZGF0YSB3aXRoIGxvY2FsU3RvcmFnZS5cbmZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgdmFsdWVUeXBlID0gJyc7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlVHlwZSA9IHRvU3RyaW5nJDEuY2FsbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2Fubm90IHVzZSBgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcmAgb3Igc3VjaCBoZXJlLCBhcyB0aGVzZVxuICAgIC8vIGNoZWNrcyBmYWlsIHdoZW4gcnVubmluZyB0aGUgdGVzdHMgdXNpbmcgY2FzcGVyLmpzLi4uXG4gICAgLy9cbiAgICAvLyBUT0RPOiBTZWUgd2h5IHRob3NlIHRlc3RzIGZhaWwgYW5kIHVzZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICBpZiAodmFsdWUgJiYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyB8fCB2YWx1ZS5idWZmZXIgJiYgdG9TdHJpbmckMS5jYWxsKHZhbHVlLmJ1ZmZlcikgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpKSB7XG4gICAgICAgIC8vIENvbnZlcnQgYmluYXJ5IGFycmF5cyB0byBhIHN0cmluZyBhbmQgcHJlZml4IHRoZSBzdHJpbmcgd2l0aFxuICAgICAgICAvLyBhIHNwZWNpYWwgbWFya2VyLlxuICAgICAgICB2YXIgYnVmZmVyO1xuICAgICAgICB2YXIgbWFya2VyID0gU0VSSUFMSVpFRF9NQVJLRVI7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHZhbHVlO1xuICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfQVJSQVlCVUZGRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZS5idWZmZXI7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDhBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQ4QVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQ4Q0xBTVBFREFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDE2QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDE2QVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDE2QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDMyQVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfRkxPQVQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfRkxPQVQ2NEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgdHlwZSBmb3IgQmluYXJ5QXJyYXknKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhtYXJrZXIgKyBidWZmZXJUb1N0cmluZyhidWZmZXIpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgIC8vIENvbnZlciB0aGUgYmxvYiB0byBhIGJpbmFyeUFycmF5IGFuZCB0aGVuIHRvIGEgc3RyaW5nLlxuICAgICAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBCYWNrd2FyZHMtY29tcGF0aWJsZSBwcmVmaXggZm9yIHRoZSBibG9iIHR5cGUuXG4gICAgICAgICAgICB2YXIgc3RyID0gQkxPQl9UWVBFX1BSRUZJWCArIHZhbHVlLnR5cGUgKyAnficgKyBidWZmZXJUb1N0cmluZyh0aGlzLnJlc3VsdCk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKFNFUklBTElaRURfTUFSS0VSICsgVFlQRV9CTE9CICsgc3RyKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkbid0IGNvbnZlcnQgdmFsdWUgaW50byBhIEpTT04gc3RyaW5nOiBcIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gRGVzZXJpYWxpemUgZGF0YSB3ZSd2ZSBpbnNlcnRlZCBpbnRvIGEgdmFsdWUgY29sdW1uL2ZpZWxkLiBXZSBwbGFjZVxuLy8gc3BlY2lhbCBtYXJrZXJzIGludG8gb3VyIHN0cmluZ3MgdG8gbWFyayB0aGVtIGFzIGVuY29kZWQ7IHRoaXMgaXNuJ3Rcbi8vIGFzIG5pY2UgYXMgYSBtZXRhIGZpZWxkLCBidXQgaXQncyB0aGUgb25seSBzYW5lIHRoaW5nIHdlIGNhbiBkbyB3aGlsc3Rcbi8vIGtlZXBpbmcgbG9jYWxTdG9yYWdlIHN1cHBvcnQgaW50YWN0LlxuLy9cbi8vIE9mdGVudGltZXMgdGhpcyB3aWxsIGp1c3QgZGVzZXJpYWxpemUgSlNPTiBjb250ZW50LCBidXQgaWYgd2UgaGF2ZSBhXG4vLyBzcGVjaWFsIG1hcmtlciAoU0VSSUFMSVpFRF9NQVJLRVIsIGRlZmluZWQgYWJvdmUpLCB3ZSB3aWxsIGV4dHJhY3Rcbi8vIHNvbWUga2luZCBvZiBhcnJheWJ1ZmZlci9iaW5hcnkgZGF0YS90eXBlZCBhcnJheSBvdXQgb2YgdGhlIHN0cmluZy5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXJrZWQgdGhpcyBzdHJpbmcgYXMgYmVpbmcgc3BlY2lhbGx5IHNlcmlhbGl6ZWQgKGkuZS5cbiAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiBzZXJpYWxpemVkIEpTT04pLCB3ZSBjYW4ganVzdCByZXR1cm4gaXQgYW5kIGJlXG4gICAgLy8gZG9uZSB3aXRoIGl0LlxuICAgIGlmICh2YWx1ZS5zdWJzdHJpbmcoMCwgU0VSSUFMSVpFRF9NQVJLRVJfTEVOR1RIKSAhPT0gU0VSSUFMSVpFRF9NQVJLRVIpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBkZWFscyB3aXRoIGRlc2VyaWFsaXppbmcgc29tZSBraW5kIG9mIEJsb2Igb3JcbiAgICAvLyBUeXBlZEFycmF5LiBGaXJzdCB3ZSBzZXBhcmF0ZSBvdXQgdGhlIHR5cGUgb2YgZGF0YSB3ZSdyZSBkZWFsaW5nXG4gICAgLy8gd2l0aCBmcm9tIHRoZSBkYXRhIGl0c2VsZi5cbiAgICB2YXIgc2VyaWFsaXplZFN0cmluZyA9IHZhbHVlLnN1YnN0cmluZyhUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCk7XG4gICAgdmFyIHR5cGUgPSB2YWx1ZS5zdWJzdHJpbmcoU0VSSUFMSVpFRF9NQVJLRVJfTEVOR1RILCBUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCk7XG5cbiAgICB2YXIgYmxvYlR5cGU7XG4gICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgYmxvYiB0eXBlIHNlcmlhbGl6YXRpb24gc3RyYXRlZ3kuXG4gICAgLy8gREJzIGNyZWF0ZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBsb2NhbEZvcmFnZSB3aWxsIHNpbXBseSBub3QgaGF2ZSB0aGUgYmxvYiB0eXBlLlxuICAgIGlmICh0eXBlID09PSBUWVBFX0JMT0IgJiYgQkxPQl9UWVBFX1BSRUZJWF9SRUdFWC50ZXN0KHNlcmlhbGl6ZWRTdHJpbmcpKSB7XG4gICAgICAgIHZhciBtYXRjaGVyID0gc2VyaWFsaXplZFN0cmluZy5tYXRjaChCTE9CX1RZUEVfUFJFRklYX1JFR0VYKTtcbiAgICAgICAgYmxvYlR5cGUgPSBtYXRjaGVyWzFdO1xuICAgICAgICBzZXJpYWxpemVkU3RyaW5nID0gc2VyaWFsaXplZFN0cmluZy5zdWJzdHJpbmcobWF0Y2hlclswXS5sZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgYnVmZmVyID0gc3RyaW5nVG9CdWZmZXIoc2VyaWFsaXplZFN0cmluZyk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHJpZ2h0IHR5cGUgYmFzZWQgb24gdGhlIGNvZGUvdHlwZSBzZXQgZHVyaW5nXG4gICAgLy8gc2VyaWFsaXphdGlvbi5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUWVBFX0FSUkFZQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgY2FzZSBUWVBFX0JMT0I6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBibG9iVHlwZSB9KTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UOEFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UOENMQU1QRURBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDE2QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MTZBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfSU5UMzJBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9GTE9BVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQ2NEFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgICB9XG59XG5cbnZhciBsb2NhbGZvcmFnZVNlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgZGVzZXJpYWxpemU6IGRlc2VyaWFsaXplLFxuICAgIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcbiAgICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmdcbn07XG5cbi8qXG4gKiBJbmNsdWRlcyBjb2RlIGZyb206XG4gKlxuICogYmFzZTY0LWFycmF5YnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmlrbGFzdmgvYmFzZTY0LWFycmF5YnVmZmVyXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIE5pa2xhcyB2b24gSGVydHplblxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbCgnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJyArIGRiSW5mby5zdG9yZU5hbWUgKyAnICcgKyAnKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGtleSB1bmlxdWUsIHZhbHVlKScsIFtdLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG59XG5cbi8vIE9wZW4gdGhlIFdlYlNRTCBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2UkMShvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7XG4gICAgICAgIGRiOiBudWxsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgZGJJbmZvW2ldID0gdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdzdHJpbmcnID8gb3B0aW9uc1tpXS50b1N0cmluZygpIDogb3B0aW9uc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkYkluZm9Qcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIC8vIE9wZW4gdGhlIGRhdGFiYXNlOyB0aGUgb3BlbkRhdGFiYXNlIEFQSSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgLy8gY3JlYXRlIGl0IGZvciB1cyBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGJJbmZvLmRiID0gb3BlbkRhdGFiYXNlKGRiSW5mby5uYW1lLCBTdHJpbmcoZGJJbmZvLnZlcnNpb24pLCBkYkluZm8uZGVzY3JpcHRpb24sIGRiSW5mby5zaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBvdXIga2V5L3ZhbHVlIHRhYmxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZGJJbmZvLnNlcmlhbGl6ZXIgPSBsb2NhbGZvcmFnZVNlcmlhbGl6ZXI7XG4gICAgcmV0dXJuIGRiSW5mb1Byb21pc2U7XG59XG5cbmZ1bmN0aW9uIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCBzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgdC5leGVjdXRlU3FsKHNxbFN0YXRlbWVudCwgYXJncywgY2FsbGJhY2ssIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gZXJyb3IuU1lOVEFYX0VSUikge1xuICAgICAgICAgICAgdC5leGVjdXRlU3FsKCdTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgJyArIFwiV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lID0gP1wiLCBbZGJJbmZvLnN0b3JlTmFtZV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLnJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0YWJsZSBpcyBtaXNzaW5nICh3YXMgZGVsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLy8gcmUtY3JlYXRlIGl0IHRhYmxlIGFuZCByZXRyeVxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKHNxbFN0YXRlbWVudCwgYXJncywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2sodCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSwgZXJyb3JDYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBrZXkgPSA/IExJTUlUIDEnLCBba2V5XSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5sZW5ndGggPyByZXN1bHRzLnJvd3MuaXRlbSgwKS52YWx1ZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgc2VyaWFsaXplZCBjb250ZW50IHdlIG5lZWQgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkYkluZm8uc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGUkMShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuXG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCAqIEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlc3VsdHMucm93cztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJvd3MubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcm93cy5pdGVtKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB1bnBhY2suXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCBpdGVtLmtleSwgaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2b2lkKDApIHByZXZlbnRzIHByb2JsZW1zIHdpdGggcmVkZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBgdW5kZWZpbmVkYC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gX3NldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2ssIHJldHJpZXNMZWZ0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUaGUgbG9jYWxTdG9yYWdlIEFQSSBkb2Vzbid0IHJldHVybiB1bmRlZmluZWQgdmFsdWVzIGluIGFuXG4gICAgICAgICAgICAvLyBcImV4cGVjdGVkXCIgd2F5LCBzbyB1bmRlZmluZWQgaXMgYWx3YXlzIGNhc3QgdG8gbnVsbCBpbiBhbGxcbiAgICAgICAgICAgIC8vIGRyaXZlcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdJTlNFUlQgT1IgUkVQTEFDRSBJTlRPICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhrZXksIHZhbHVlKSBWQUxVRVMgKD8sID8pJywgW2tleSwgdmFsdWVdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gZmFpbGVkOyBjaGVja1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2VlIGlmIGl0J3MgYSBxdW90YSBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcWxFcnJvci5jb2RlID09PSBzcWxFcnJvci5RVU9UQV9FUlIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWplY3QgdGhlIGNhbGxiYWNrIG91dHJpZ2h0IGZvciBub3csIGJ1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlLXJ1biB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgdXNlciBhY2NlcHRzIHRoZSBwcm9tcHQgdG8gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZSBzdG9yYWdlIG9uIFNhZmFyaSwgdGhpcyBlcnJvciB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmUgY2FsbGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHJlLXJ1biB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJpZXNMZWZ0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF9zZXRJdGVtLmFwcGx5KHNlbGYsIFtrZXksIG9yaWdpbmFsVmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCAtIDFdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNxbEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0kMShrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBfc2V0SXRlbS5hcHBseSh0aGlzLCBba2V5LCB2YWx1ZSwgY2FsbGJhY2ssIDFdKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbSQxKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ0RFTEVURSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBrZXkgPSA/JywgW2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERlbGV0ZXMgZXZlcnkgaXRlbSBpbiB0aGUgdGFibGUuXG4vLyBUT0RPOiBGaW5kIG91dCBpZiB0aGlzIHJlc2V0cyB0aGUgQVVUT19JTkNSRU1FTlQgbnVtYmVyLlxuZnVuY3Rpb24gY2xlYXIkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ0RFTEVURSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gRG9lcyBhIHNpbXBsZSBgQ09VTlQoa2V5KWAgdG8gZ2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluXG4vLyBsb2NhbEZvcmFnZS5cbmZ1bmN0aW9uIGxlbmd0aCQxKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIC8vIEFoaGgsIFNRTCBtYWtlcyB0aGlzIG9uZSBzb29vb29vIGVhc3kuXG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgQ09VTlQoa2V5KSBhcyBjIEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLml0ZW0oMCkuYztcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFJldHVybiB0aGUga2V5IGxvY2F0ZWQgYXQga2V5IGluZGV4IFg7IGVzc2VudGlhbGx5IGdldHMgdGhlIGtleSBmcm9tIGFcbi8vIGBXSEVSRSBpZCA9ID9gLiBUaGlzIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgSSBjYW4gdGhpbmsgdG8gaW1wbGVtZW50XG4vLyB0aGlzIHJhcmVseS11c2VkIChpbiBteSBleHBlcmllbmNlKSBwYXJ0IG9mIHRoZSBBUEksIGJ1dCBpdCBjYW4gc2VlbVxuLy8gaW5jb25zaXN0ZW50LCBiZWNhdXNlIHdlIGRvIGBJTlNFUlQgT1IgUkVQTEFDRSBJTlRPYCBvbiBgc2V0SXRlbSgpYCwgc29cbi8vIHRoZSBJRCBvZiBlYWNoIGtleSB3aWxsIGNoYW5nZSBldmVyeSB0aW1lIGl0J3MgdXBkYXRlZC4gUGVyaGFwcyBhIHN0b3JlZFxuLy8gcHJvY2VkdXJlIGZvciB0aGUgYHNldEl0ZW0oKWAgU1FMIHdvdWxkIHNvbHZlIHRoaXMgcHJvYmxlbT9cbi8vIFRPRE86IERvbid0IGNoYW5nZSBJRCBvbiBgc2V0SXRlbSgpYC5cbmZ1bmN0aW9uIGtleSQxKG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIGtleSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBpZCA9ID8gTElNSVQgMScsIFtuICsgMV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkua2V5IDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGtleXMkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChyZXN1bHRzLnJvd3MuaXRlbShpKS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZGF0YWJhc2UvI2RhdGFiYXNlc1xuLy8gPiBUaGVyZSBpcyBubyB3YXkgdG8gZW51bWVyYXRlIG9yIGRlbGV0ZSB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmb3IgYW4gb3JpZ2luIGZyb20gdGhpcyBBUEkuXG5mdW5jdGlvbiBnZXRBbGxTdG9yZU5hbWVzKGRiKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgdC5leGVjdXRlU3FsKCdTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgJyArIFwiV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lIDw+ICdfX1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18nXCIsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZU5hbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGRiOiBkYixcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lczogc3RvcmVOYW1lc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoc3FsRXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBkcm9wSW5zdGFuY2UkMShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgdmFyIGRiO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gY3VycmVudENvbmZpZy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBkYiByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBkYiA9IHNlbGYuX2RiSW5mby5kYjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGIgPSBvcGVuRGF0YWJhc2Uob3B0aW9ucy5uYW1lLCAnJywgJycsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gZHJvcCBhbGwgZGF0YWJhc2UgdGFibGVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShnZXRBbGxTdG9yZU5hbWVzKGRiKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IFtvcHRpb25zLnN0b3JlTmFtZV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAob3BlcmF0aW9uSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZHJvcFRhYmxlKHN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyArIHN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb3BlcmF0aW9uSW5mby5zdG9yZU5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLnB1c2goZHJvcFRhYmxlKG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZSQxLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoc3FsRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNxbEVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgd2ViU1FMU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnd2ViU1FMU3RvcmFnZScsXG4gICAgX2luaXRTdG9yYWdlOiBfaW5pdFN0b3JhZ2UkMSxcbiAgICBfc3VwcG9ydDogaXNXZWJTUUxWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUkMSxcbiAgICBnZXRJdGVtOiBnZXRJdGVtJDEsXG4gICAgc2V0SXRlbTogc2V0SXRlbSQxLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0kMSxcbiAgICBjbGVhcjogY2xlYXIkMSxcbiAgICBsZW5ndGg6IGxlbmd0aCQxLFxuICAgIGtleToga2V5JDEsXG4gICAga2V5czoga2V5cyQxLFxuICAgIGRyb3BJbnN0YW5jZTogZHJvcEluc3RhbmNlJDFcbn07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTdG9yYWdlVmFsaWQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnICYmICdzZXRJdGVtJyBpbiBsb2NhbFN0b3JhZ2UgJiZcbiAgICAgICAgLy8gaW4gSUU4IHR5cGVvZiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSA9PT0gJ29iamVjdCdcbiAgICAgICAgISFsb2NhbFN0b3JhZ2Uuc2V0SXRlbTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRLZXlQcmVmaXgob3B0aW9ucywgZGVmYXVsdENvbmZpZykge1xuICAgIHZhciBrZXlQcmVmaXggPSBvcHRpb25zLm5hbWUgKyAnLyc7XG5cbiAgICBpZiAob3B0aW9ucy5zdG9yZU5hbWUgIT09IGRlZmF1bHRDb25maWcuc3RvcmVOYW1lKSB7XG4gICAgICAgIGtleVByZWZpeCArPSBvcHRpb25zLnN0b3JlTmFtZSArICcvJztcbiAgICB9XG4gICAgcmV0dXJuIGtleVByZWZpeDtcbn1cblxuLy8gQ2hlY2sgaWYgbG9jYWxTdG9yYWdlIHRocm93cyB3aGVuIHNhdmluZyBhbiBpdGVtXG5mdW5jdGlvbiBjaGVja0lmTG9jYWxTdG9yYWdlVGhyb3dzKCkge1xuICAgIHZhciBsb2NhbFN0b3JhZ2VUZXN0S2V5ID0gJ19sb2NhbGZvcmFnZV9zdXBwb3J0X3Rlc3QnO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlVGVzdEtleSwgdHJ1ZSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXkpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLy8gQ2hlY2sgaWYgbG9jYWxTdG9yYWdlIGlzIHVzYWJsZSBhbmQgYWxsb3dzIHRvIHNhdmUgYW4gaXRlbVxuLy8gVGhpcyBtZXRob2QgY2hlY2tzIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgaW4gU2FmYXJpIFByaXZhdGUgQnJvd3Npbmdcbi8vIG1vZGUsIG9yIGluIGFueSBvdGhlciBjYXNlIHdoZXJlIHRoZSBhdmFpbGFibGUgcXVvdGEgZm9yIGxvY2FsU3RvcmFnZVxuLy8gaXMgMCBhbmQgdGhlcmUgd2Fzbid0IGFueSBzYXZlZCBpdGVtcyB5ZXQuXG5mdW5jdGlvbiBfaXNMb2NhbFN0b3JhZ2VVc2FibGUoKSB7XG4gICAgcmV0dXJuICFjaGVja0lmTG9jYWxTdG9yYWdlVGhyb3dzKCkgfHwgbG9jYWxTdG9yYWdlLmxlbmd0aCA+IDA7XG59XG5cbi8vIENvbmZpZyB0aGUgbG9jYWxTdG9yYWdlIGJhY2tlbmQsIHVzaW5nIG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2UkMihvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7fTtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkYkluZm8ua2V5UHJlZml4ID0gX2dldEtleVByZWZpeChvcHRpb25zLCBzZWxmLl9kZWZhdWx0Q29uZmlnKTtcblxuICAgIGlmICghX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZWplY3QoKTtcbiAgICB9XG5cbiAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgZGJJbmZvLnNlcmlhbGl6ZXIgPSBsb2NhbGZvcmFnZVNlcmlhbGl6ZXI7XG5cbiAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKTtcbn1cblxuLy8gUmVtb3ZlIGFsbCBrZXlzIGZyb20gdGhlIGRhdGFzdG9yZSwgZWZmZWN0aXZlbHkgZGVzdHJveWluZyBhbGwgZGF0YSBpblxuLy8gdGhlIGFwcCdzIGtleS92YWx1ZSBzdG9yZSFcbmZ1bmN0aW9uIGNsZWFyJDIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBrZXlQcmVmaXggPSBzZWxmLl9kYkluZm8ua2V5UHJlZml4O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBsb2NhbFN0b3JhZ2UubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFJldHJpZXZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUuIFVubGlrZSB0aGUgb3JpZ2luYWwgYXN5bmNfc3RvcmFnZVxuLy8gbGlicmFyeSBpbiBHYWlhLCB3ZSBkb24ndCBtb2RpZnkgcmV0dXJuIHZhbHVlcyBhdCBhbGwuIElmIGEga2V5J3MgdmFsdWVcbi8vIGlzIGB1bmRlZmluZWRgLCB3ZSBwYXNzIHRoYXQgdmFsdWUgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0SXRlbSQyKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG5cbiAgICAgICAgLy8gSWYgYSByZXN1bHQgd2FzIGZvdW5kLCBwYXJzZSBpdCBmcm9tIHRoZSBzZXJpYWxpemVkXG4gICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGUga2V5XG4gICAgICAgIC8vIGlzIGxpa2VseSB1bmRlZmluZWQgYW5kIHdlJ2xsIHBhc3MgaXQgc3RyYWlnaHQgdG8gdGhlXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBkYkluZm8uc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgaW4gdGhlIHN0b3JlLlxuZnVuY3Rpb24gaXRlcmF0ZSQyKGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gZGJJbmZvLmtleVByZWZpeDtcbiAgICAgICAgdmFyIGtleVByZWZpeExlbmd0aCA9IGtleVByZWZpeC5sZW5ndGg7XG4gICAgICAgIHZhciBsZW5ndGggPSBsb2NhbFN0b3JhZ2UubGVuZ3RoO1xuXG4gICAgICAgIC8vIFdlIHVzZSBhIGRlZGljYXRlZCBpdGVyYXRvciBpbnN0ZWFkIG9mIHRoZSBgaWAgdmFyaWFibGUgYmVsb3dcbiAgICAgICAgLy8gc28gb3RoZXIga2V5cyB3ZSBmZXRjaCBpbiBsb2NhbFN0b3JhZ2UgYXJlbid0IGNvdW50ZWQgaW5cbiAgICAgICAgLy8gdGhlIGBpdGVyYXRpb25OdW1iZXJgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYGl0ZXJhdGUoKWBcbiAgICAgICAgLy8gY2FsbGJhY2suXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZTogZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDM1I2Rpc2N1c3Npb25fcjM4MDYxNTMwXG4gICAgICAgIHZhciBpdGVyYXRpb25OdW1iZXIgPSAxO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cbiAgICAgICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAgICAgLy8gc3RyaW5nIGludG8gYSBKUyBvYmplY3QuIElmIHJlc3VsdCBpc24ndCB0cnV0aHksIHRoZVxuICAgICAgICAgICAgLy8ga2V5IGlzIGxpa2VseSB1bmRlZmluZWQgYW5kIHdlJ2xsIHBhc3MgaXQgc3RyYWlnaHRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZSA9IGl0ZXJhdG9yKHZhbHVlLCBrZXkuc3Vic3RyaW5nKGtleVByZWZpeExlbmd0aCksIGl0ZXJhdGlvbk51bWJlcisrKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFNhbWUgYXMgbG9jYWxTdG9yYWdlJ3Mga2V5KCkgbWV0aG9kLCBleGNlcHQgdGFrZXMgYSBjYWxsYmFjay5cbmZ1bmN0aW9uIGtleSQyKG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmtleShuKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHByZWZpeCBmcm9tIHRoZSBrZXksIGlmIGEga2V5IGlzIGZvdW5kLlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgIHZhciBsZW5ndGggPSBsb2NhbFN0b3JhZ2UubGVuZ3RoO1xuICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtS2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtS2V5LmluZGV4T2YoZGJJbmZvLmtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goaXRlbUtleS5zdWJzdHJpbmcoZGJJbmZvLmtleVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gU3VwcGx5IHRoZSBudW1iZXIgb2Yga2V5cyBpbiB0aGUgZGF0YXN0b3JlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGxlbmd0aCQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5rZXlzKCkudGhlbihmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBzdG9yZSwgbmljZSBhbmQgc2ltcGxlLlxuZnVuY3Rpb24gcmVtb3ZlSXRlbSQyKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFNldCBhIGtleSdzIHZhbHVlIGFuZCBydW4gYW4gb3B0aW9uYWwgY2FsbGJhY2sgb25jZSB0aGUgdmFsdWUgaXMgc2V0LlxuLy8gVW5saWtlIEdhaWEncyBpbXBsZW1lbnRhdGlvbiwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgdmFsdWUsXG4vLyBpbiBjYXNlIHlvdSB3YW50IHRvIG9wZXJhdGUgb24gdGhhdCB2YWx1ZSBvbmx5IGFmdGVyIHlvdSdyZSBzdXJlIGl0XG4vLyBzYXZlZCwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC5cbmZ1bmN0aW9uIHNldEl0ZW0kMihrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdW5kZWZpbmVkIHZhbHVlcyB0byBudWxsLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlLCBmdW5jdGlvbiAodmFsdWUsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsU3RvcmFnZSBjYXBhY2l0eSBleGNlZWRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBhIHNwZWNpZmljIGVycm9yL2V2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1F1b3RhRXhjZWVkZWRFcnJvcicgfHwgZS5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDIob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBjdXJyZW50Q29uZmlnLm5hbWU7XG4gICAgICAgIG9wdGlvbnMuc3RvcmVOYW1lID0gb3B0aW9ucy5zdG9yZU5hbWUgfHwgY3VycmVudENvbmZpZy5zdG9yZU5hbWU7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgIHByb21pc2UgPSBQcm9taXNlJDEucmVqZWN0KCdJbnZhbGlkIGFyZ3VtZW50cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcHRpb25zLm5hbWUgKyAnLycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChrZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBsb2NhbFN0b3JhZ2UubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgbG9jYWxTdG9yYWdlV3JhcHBlciA9IHtcbiAgICBfZHJpdmVyOiAnbG9jYWxTdG9yYWdlV3JhcHBlcicsXG4gICAgX2luaXRTdG9yYWdlOiBfaW5pdFN0b3JhZ2UkMixcbiAgICBfc3VwcG9ydDogaXNMb2NhbFN0b3JhZ2VWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUkMixcbiAgICBnZXRJdGVtOiBnZXRJdGVtJDIsXG4gICAgc2V0SXRlbTogc2V0SXRlbSQyLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0kMixcbiAgICBjbGVhcjogY2xlYXIkMixcbiAgICBsZW5ndGg6IGxlbmd0aCQyLFxuICAgIGtleToga2V5JDIsXG4gICAga2V5czoga2V5cyQyLFxuICAgIGRyb3BJbnN0YW5jZTogZHJvcEluc3RhbmNlJDJcbn07XG5cbnZhciBzYW1lVmFsdWUgPSBmdW5jdGlvbiBzYW1lVmFsdWUoeCwgeSkge1xuICAgIHJldHVybiB4ID09PSB5IHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeSA9PT0gJ251bWJlcicgJiYgaXNOYU4oeCkgJiYgaXNOYU4oeSk7XG59O1xuXG52YXIgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgc2VhcmNoRWxlbWVudCkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIGlmIChzYW1lVmFsdWUoYXJyYXlbaV0sIHNlYXJjaEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG4vLyBEcml2ZXJzIGFyZSBzdG9yZWQgaGVyZSB3aGVuIGBkZWZpbmVEcml2ZXIoKWAgaXMgY2FsbGVkLlxuLy8gVGhleSBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mIGxvY2FsRm9yYWdlLlxudmFyIERlZmluZWREcml2ZXJzID0ge307XG5cbnZhciBEcml2ZXJTdXBwb3J0ID0ge307XG5cbnZhciBEZWZhdWx0RHJpdmVycyA9IHtcbiAgICBJTkRFWEVEREI6IGFzeW5jU3RvcmFnZSxcbiAgICBXRUJTUUw6IHdlYlNRTFN0b3JhZ2UsXG4gICAgTE9DQUxTVE9SQUdFOiBsb2NhbFN0b3JhZ2VXcmFwcGVyXG59O1xuXG52YXIgRGVmYXVsdERyaXZlck9yZGVyID0gW0RlZmF1bHREcml2ZXJzLklOREVYRUREQi5fZHJpdmVyLCBEZWZhdWx0RHJpdmVycy5XRUJTUUwuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuTE9DQUxTVE9SQUdFLl9kcml2ZXJdO1xuXG52YXIgT3B0aW9uYWxEcml2ZXJNZXRob2RzID0gWydkcm9wSW5zdGFuY2UnXTtcblxudmFyIExpYnJhcnlNZXRob2RzID0gWydjbGVhcicsICdnZXRJdGVtJywgJ2l0ZXJhdGUnLCAna2V5JywgJ2tleXMnLCAnbGVuZ3RoJywgJ3JlbW92ZUl0ZW0nLCAnc2V0SXRlbSddLmNvbmNhdChPcHRpb25hbERyaXZlck1ldGhvZHMpO1xuXG52YXIgRGVmYXVsdENvbmZpZyA9IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZHJpdmVyOiBEZWZhdWx0RHJpdmVyT3JkZXIuc2xpY2UoKSxcbiAgICBuYW1lOiAnbG9jYWxmb3JhZ2UnLFxuICAgIC8vIERlZmF1bHQgREIgc2l6ZSBpcyBfSlVTVCBVTkRFUl8gNU1CLCBhcyBpdCdzIHRoZSBoaWdoZXN0IHNpemVcbiAgICAvLyB3ZSBjYW4gdXNlIHdpdGhvdXQgYSBwcm9tcHQuXG4gICAgc2l6ZTogNDk4MDczNixcbiAgICBzdG9yZU5hbWU6ICdrZXl2YWx1ZXBhaXJzJyxcbiAgICB2ZXJzaW9uOiAxLjBcbn07XG5cbmZ1bmN0aW9uIGNhbGxXaGVuUmVhZHkobG9jYWxGb3JhZ2VJbnN0YW5jZSwgbGlicmFyeU1ldGhvZCkge1xuICAgIGxvY2FsRm9yYWdlSW5zdGFuY2VbbGlicmFyeU1ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGxvY2FsRm9yYWdlSW5zdGFuY2UucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdLmFwcGx5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIF9hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgaWYgKGFyZykge1xuICAgICAgICAgICAgZm9yICh2YXIgX2tleSBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGFyZ1tfa2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzWzBdW19rZXldID0gYXJnW19rZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbn1cblxudmFyIExvY2FsRm9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvY2FsRm9yYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsRm9yYWdlKTtcblxuICAgICAgICBmb3IgKHZhciBkcml2ZXJUeXBlS2V5IGluIERlZmF1bHREcml2ZXJzKSB7XG4gICAgICAgICAgICBpZiAoRGVmYXVsdERyaXZlcnMuaGFzT3duUHJvcGVydHkoZHJpdmVyVHlwZUtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyID0gRGVmYXVsdERyaXZlcnNbZHJpdmVyVHlwZUtleV07XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB0aGlzW2RyaXZlclR5cGVLZXldID0gZHJpdmVyTmFtZTtcblxuICAgICAgICAgICAgICAgIGlmICghRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciB0aGUgcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgZHJpdmVycyBjYW4gYmUgZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIGJsb2NraW5nIG1hbm5lclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURyaXZlcihkcml2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb25maWcgPSBleHRlbmQoe30sIERlZmF1bHRDb25maWcpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBleHRlbmQoe30sIHRoaXMuX2RlZmF1bHRDb25maWcsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9kcml2ZXJTZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pbml0RHJpdmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGJJbmZvID0gbnVsbDtcblxuICAgICAgICB0aGlzLl93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKTtcbiAgICAgICAgdGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcilbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGFueSBjb25maWcgdmFsdWVzIGZvciBsb2NhbEZvcmFnZTsgY2FuIGJlIGNhbGxlZCBhbnl0aW1lIGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBBUEkgY2FsbCAoZS5nLiBgZ2V0SXRlbWAsIGBzZXRJdGVtYCkuXG4gICAgLy8gV2UgbG9vcCB0aHJvdWdoIG9wdGlvbnMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ1xuICAgIC8vIHZhbHVlcy5cblxuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmNvbmZpZyA9IGZ1bmN0aW9uIGNvbmZpZyhvcHRpb25zKSB7XG4gICAgICAgIC8vIElmIHRoZSBvcHRpb25zIGFyZ3VtZW50IGlzIGFuIG9iamVjdCwgd2UgdXNlIGl0IHRvIHNldCB2YWx1ZXMuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2UgcmV0dXJuIGVpdGhlciBhIHNwZWNpZmllZCBjb25maWcgdmFsdWUgb3IgYWxsXG4gICAgICAgIC8vIGNvbmZpZyB2YWx1ZXMuXG4gICAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9wdGlvbnMpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIElmIGxvY2FsZm9yYWdlIGlzIHJlYWR5IGFuZCBmdWxseSBpbml0aWFsaXplZCwgd2UgY2FuJ3Qgc2V0XG4gICAgICAgICAgICAvLyBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gdmFsdWVzLiBJbnN0ZWFkLCB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFwiQ2FuJ3QgY2FsbCBjb25maWcoKSBhZnRlciBsb2NhbGZvcmFnZSBcIiArICdoYXMgYmVlbiB1c2VkLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gJ3N0b3JlTmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IG9wdGlvbnNbaV0ucmVwbGFjZSgvXFxXL2csICdfJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICd2ZXJzaW9uJyAmJiB0eXBlb2Ygb3B0aW9uc1tpXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignRGF0YWJhc2UgdmVyc2lvbiBtdXN0IGJlIGEgbnVtYmVyLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFmdGVyIGFsbCBjb25maWcgb3B0aW9ucyBhcmUgc2V0IGFuZFxuICAgICAgICAgICAgLy8gdGhlIGRyaXZlciBvcHRpb24gaXMgdXNlZCwgdHJ5IHNldHRpbmcgaXRcbiAgICAgICAgICAgIGlmICgnZHJpdmVyJyBpbiBvcHRpb25zICYmIG9wdGlvbnMuZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWdbb3B0aW9uc107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIFVzZWQgdG8gZGVmaW5lIGEgY3VzdG9tIGRyaXZlciwgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mXG4gICAgLy8gbG9jYWxGb3JhZ2UuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5kZWZpbmVEcml2ZXIgPSBmdW5jdGlvbiBkZWZpbmVEcml2ZXIoZHJpdmVyT2JqZWN0LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyTmFtZSA9IGRyaXZlck9iamVjdC5fZHJpdmVyO1xuICAgICAgICAgICAgICAgIHZhciBjb21wbGlhbmNlRXJyb3IgPSBuZXcgRXJyb3IoJ0N1c3RvbSBkcml2ZXIgbm90IGNvbXBsaWFudDsgc2VlICcgKyAnaHR0cHM6Ly9tb3ppbGxhLmdpdGh1Yi5pby9sb2NhbEZvcmFnZS8jZGVmaW5lZHJpdmVyJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBBIGRyaXZlciBuYW1lIHNob3VsZCBiZSBkZWZpbmVkIGFuZCBub3Qgb3ZlcmxhcCB3aXRoIHRoZVxuICAgICAgICAgICAgICAgIC8vIGxpYnJhcnktZGVmaW5lZCwgZGVmYXVsdCBkcml2ZXJzLlxuICAgICAgICAgICAgICAgIGlmICghZHJpdmVyT2JqZWN0Ll9kcml2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGNvbXBsaWFuY2VFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyTWV0aG9kcyA9IExpYnJhcnlNZXRob2RzLmNvbmNhdCgnX2luaXRTdG9yYWdlJyk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlck1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZE5hbWUgPSBkcml2ZXJNZXRob2RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHByb3BlcnR5IGlzIHRoZXJlLFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBzaG91bGQgYmUgYSBtZXRob2QgZXZlbiB3aGVuIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlcXVpcmVkID0gIWluY2x1ZGVzKE9wdGlvbmFsRHJpdmVyTWV0aG9kcywgZHJpdmVyTWV0aG9kTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaXNSZXF1aXJlZCB8fCBkcml2ZXJPYmplY3RbZHJpdmVyTWV0aG9kTmFtZV0pICYmIHR5cGVvZiBkcml2ZXJPYmplY3RbZHJpdmVyTWV0aG9kTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzID0gZnVuY3Rpb24gY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2ROb3RJbXBsZW1lbnRlZEZhY3RvcnkgPSBmdW5jdGlvbiBtZXRob2ROb3RJbXBsZW1lbnRlZEZhY3RvcnkobWV0aG9kTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ01ldGhvZCAnICsgbWV0aG9kTmFtZSArICcgaXMgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBjdXJyZW50IGRyaXZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9sZW4gPSBPcHRpb25hbERyaXZlck1ldGhvZHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbERyaXZlck1ldGhvZCA9IE9wdGlvbmFsRHJpdmVyTWV0aG9kc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdFtvcHRpb25hbERyaXZlck1ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdID0gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG9wdGlvbmFsRHJpdmVyTWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25maWd1cmVNaXNzaW5nTWV0aG9kcygpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldERyaXZlclN1cHBvcnQgPSBmdW5jdGlvbiBzZXREcml2ZXJTdXBwb3J0KHN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1JlZGVmaW5pbmcgTG9jYWxGb3JhZ2UgZHJpdmVyOiAnICsgZHJpdmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPSBkcml2ZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIERyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV0gPSBzdXBwb3J0O1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCB1c2UgYSB0aGVuLCBzbyB0aGF0IHdlIGNhbiBkZWZpbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZHJpdmVycyB0aGF0IGhhdmUgc2ltcGxlIF9zdXBwb3J0IG1ldGhvZHNcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoJ19zdXBwb3J0JyBpbiBkcml2ZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyaXZlck9iamVjdC5fc3VwcG9ydCAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJPYmplY3QuX3N1cHBvcnQoKS50aGVuKHNldERyaXZlclN1cHBvcnQsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KCEhZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclN1cHBvcnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhwcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZHJpdmVyID0gZnVuY3Rpb24gZHJpdmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyIHx8IG51bGw7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5nZXREcml2ZXIgPSBmdW5jdGlvbiBnZXREcml2ZXIoZHJpdmVyTmFtZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGdldERyaXZlclByb21pc2UgPSBEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSA/IFByb21pc2UkMS5yZXNvbHZlKERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSA6IFByb21pc2UkMS5yZWplY3QobmV3IEVycm9yKCdEcml2ZXIgbm90IGZvdW5kLicpKTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKGdldERyaXZlclByb21pc2UsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIGdldERyaXZlclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5nZXRTZXJpYWxpemVyID0gZnVuY3Rpb24gZ2V0U2VyaWFsaXplcihjYWxsYmFjaykge1xuICAgICAgICB2YXIgc2VyaWFsaXplclByb21pc2UgPSBQcm9taXNlJDEucmVzb2x2ZShsb2NhbGZvcmFnZVNlcmlhbGl6ZXIpO1xuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHNlcmlhbGl6ZXJQcm9taXNlLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gcmVhZHkoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHZhciBwcm9taXNlID0gc2VsZi5fZHJpdmVyU2V0LnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX3JlYWR5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcmVhZHkgPSBzZWxmLl9pbml0RHJpdmVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhwcm9taXNlLCBjYWxsYmFjaywgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLnNldERyaXZlciA9IGZ1bmN0aW9uIHNldERyaXZlcihkcml2ZXJzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGRyaXZlcnMpKSB7XG4gICAgICAgICAgICBkcml2ZXJzID0gW2RyaXZlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSB0aGlzLl9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHNldERyaXZlclRvQ29uZmlnKCkge1xuICAgICAgICAgICAgc2VsZi5fY29uZmlnLmRyaXZlciA9IHNlbGYuZHJpdmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBleHRlbmRTZWxmV2l0aERyaXZlcihkcml2ZXIpIHtcbiAgICAgICAgICAgIHNlbGYuX2V4dGVuZChkcml2ZXIpO1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcblxuICAgICAgICAgICAgc2VsZi5fcmVhZHkgPSBzZWxmLl9pbml0U3RvcmFnZShzZWxmLl9jb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5pdERyaXZlcihzdXBwb3J0ZWREcml2ZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50RHJpdmVySW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZHJpdmVyUHJvbWlzZUxvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RHJpdmVySW5kZXggPCBzdXBwb3J0ZWREcml2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBzdXBwb3J0ZWREcml2ZXJzW2N1cnJlbnREcml2ZXJJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RHJpdmVySW5kZXgrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RHJpdmVyKGRyaXZlck5hbWUpLnRoZW4oZXh0ZW5kU2VsZldpdGhEcml2ZXIpW1wiY2F0Y2hcIl0oZHJpdmVyUHJvbWlzZUxvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlclNldCA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBkcml2ZXJQcm9taXNlTG9vcCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzXG4gICAgICAgIC8vIHNvIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBpbiBvcmRlciB0byBhdm9pZCBhIHBvc3NpYmxlXG4gICAgICAgIC8vIHJhY2UgY29uZGl0aW9uIHRvIHNldCBfZGJJbmZvXG4gICAgICAgIHZhciBvbGREcml2ZXJTZXREb25lID0gdGhpcy5fZHJpdmVyU2V0ICE9PSBudWxsID8gdGhpcy5fZHJpdmVyU2V0W1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG4gICAgICAgIH0pIDogUHJvbWlzZSQxLnJlc29sdmUoKTtcblxuICAgICAgICB0aGlzLl9kcml2ZXJTZXQgPSBvbGREcml2ZXJTZXREb25lLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBzdXBwb3J0ZWREcml2ZXJzWzBdO1xuICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RHJpdmVyKGRyaXZlck5hbWUpLnRoZW4oZnVuY3Rpb24gKGRyaXZlcikge1xuICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IGRyaXZlci5fZHJpdmVyO1xuICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5pdERyaXZlciA9IGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuJyk7XG4gICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9kcml2ZXJTZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3ModGhpcy5fZHJpdmVyU2V0LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcml2ZXJTZXQ7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zdXBwb3J0cyA9IGZ1bmN0aW9uIHN1cHBvcnRzKGRyaXZlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhRHJpdmVyU3VwcG9ydFtkcml2ZXJOYW1lXTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLl9leHRlbmQgPSBmdW5jdGlvbiBfZXh0ZW5kKGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcykge1xuICAgICAgICBleHRlbmQodGhpcywgbGlicmFyeU1ldGhvZHNBbmRQcm9wZXJ0aWVzKTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLl9nZXRTdXBwb3J0ZWREcml2ZXJzID0gZnVuY3Rpb24gX2dldFN1cHBvcnRlZERyaXZlcnMoZHJpdmVycykge1xuICAgICAgICB2YXIgc3VwcG9ydGVkRHJpdmVycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZHJpdmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VwcG9ydHMoZHJpdmVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzdXBwb3J0ZWREcml2ZXJzLnB1c2goZHJpdmVyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZERyaXZlcnM7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5ID0gZnVuY3Rpb24gX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpIHtcbiAgICAgICAgLy8gQWRkIGEgc3R1YiBmb3IgZWFjaCBkcml2ZXIgQVBJIG1ldGhvZCB0aGF0IGRlbGF5cyB0aGUgY2FsbCB0byB0aGVcbiAgICAgICAgLy8gY29ycmVzcG9uZGluZyBkcml2ZXIgbWV0aG9kIHVudGlsIGxvY2FsRm9yYWdlIGlzIHJlYWR5LiBUaGVzZSBzdHVic1xuICAgICAgICAvLyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBkcml2ZXIgbWV0aG9kcyBhcyBzb29uIGFzIHRoZSBkcml2ZXIgaXNcbiAgICAgICAgLy8gbG9hZGVkLCBzbyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBpbXBhY3QuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBMaWJyYXJ5TWV0aG9kcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2FsbFdoZW5SZWFkeSh0aGlzLCBMaWJyYXJ5TWV0aG9kc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmNyZWF0ZUluc3RhbmNlID0gZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsRm9yYWdlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gTG9jYWxGb3JhZ2U7XG59KCk7XG5cbi8vIFRoZSBhY3R1YWwgbG9jYWxGb3JhZ2Ugb2JqZWN0IHRoYXQgd2UgZXhwb3NlIGFzIGEgbW9kdWxlIG9yIHZpYSBhXG4vLyBnbG9iYWwuIEl0J3MgZXh0ZW5kZWQgYnkgcHVsbGluZyBpbiBvbmUgb2Ygb3VyIG90aGVyIGxpYnJhcmllcy5cblxuXG52YXIgbG9jYWxmb3JhZ2VfanMgPSBuZXcgTG9jYWxGb3JhZ2UoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2NhbGZvcmFnZV9qcztcblxufSx7XCIzXCI6M31dfSx7fSxbNF0pKDQpXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7O0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFIQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU1BO0FBWkE7QUFEQTtBQWdCQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckVBO0FBREE7QUF5RUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFsQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBN1BBO0FBK1BBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUF1QkE7QUFDQTtBQXpEQTtBQTZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWxGQTtBQXNGQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvSEE7QUFtSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUExSkE7QUE4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBTEE7QUFiQTtBQXFCQTtBQXJCQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVdBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQTVDQTtBQWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpXQTtBQUNBO0FBQ0E7QUFtV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFDQTtBQU9BO0FBWEE7QUF0V0E7QUFDQTtBQUNBO0FBb1hBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXhYQTtBQUNBO0FBQ0E7QUEwWEE7QUFDQTtBQTdYQTtBQWlZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFoWkE7QUFvWkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUFBO0FBaEJBO0FBcmFBO0FBMGJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFEQTtBQVZBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQTFkQTtBQXVlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQTVCQTtBQUNBO0FBQ0E7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBQ0E7QUFDQTtBQStDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFEQTtBQWZBO0FBbUJBO0FBQ0E7QUF6QkE7QUFEQTtBQURBO0FBZ0NBO0FBQ0E7QUE3bEJBO0FBQ0E7QUFDQTtBQStsQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQXBCQTtBQUNBO0FBc0JBO0FBQ0E7QUFEQTtBQTVCQTtBQWdDQTtBQUNBO0FBdENBO0FBREE7QUFEQTtBQTZDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQUFBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUZBO0FBMUJBO0FBK0JBO0FBQ0E7QUFyQ0E7QUFaQTtBQUZBO0FBd0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFiQTtBQWlCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQWxCQTtBQXVCQTtBQUNBO0FBN0JBO0FBREE7QUFEQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQVJBO0FBYUE7QUFDQTtBQW5CQTtBQURBO0FBREE7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBUkE7QUFZQTtBQUNBO0FBbEJBO0FBREE7QUFEQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBdkJBO0FBQ0E7QUF5QkE7QUFDQTtBQURBO0FBL0JBO0FBbUNBO0FBQ0E7QUF6Q0E7QUFEQTtBQVBBO0FBc0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFEQTtBQWpCQTtBQXFCQTtBQUNBO0FBM0JBO0FBREE7QUFEQTtBQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBWEE7QUFvQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQVJBO0FBaENBO0FBREE7QUE2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWRBO0FBcUJBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQVRBO0FBeENBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQTlqQ0E7QUFra0NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF6bkNBO0FBNm5DQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFscENBO0FBc3BDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQUNBO0FBTUE7QUFYQTtBQWFBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBMXRDQTtBQTh0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBeEJBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUE3eUNBO0FBaXpDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUpBO0FBREE7QUFWQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFPQTtBQUNBO0FBVEE7QUFEQTtBQWFBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBWEE7QUFEQTtBQUZBO0FBREE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBMEJBO0FBMUJBO0FBREE7QUFIQTtBQURBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF0QkE7QUF3QkE7QUE1QkE7QUFaQTtBQURBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFEQTtBQUZBO0FBREE7QUFhQTtBQUNBO0FBbGdEQTtBQXNnREE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFIQTtBQURBO0FBRkE7QUFEQTtBQWFBO0FBQ0E7QUF4aERBO0FBNGhEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFKQTtBQUZBO0FBRkE7QUFEQTtBQWVBO0FBQ0E7QUFoakRBO0FBb2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUpBO0FBREE7QUFGQTtBQURBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQVRBO0FBREE7QUFGQTtBQURBO0FBbUJBO0FBQ0E7QUF0bURBO0FBMG1EQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBUEE7QUFZQTtBQVpBO0FBREE7QUFnQkE7QUFoQkE7QUFEQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUhBO0FBaEJBO0FBc0JBO0FBdEJBO0FBREE7QUFuQkE7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBRUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXB1REE7QUFDQTtBQUNBO0FBc3VEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUpBO0FBTUE7QUFDQTtBQWx2REE7QUFzdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBMXZEQTtBQUNBO0FBQ0E7QUE0dkRBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBaHhEQTtBQW94REE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFZQTtBQUNBO0FBcHlEQTtBQXd5REE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWVBO0FBQ0E7QUEvekRBO0FBQ0E7QUFDQTtBQWkwREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQ0E7QUFxQ0E7QUFDQTtBQTUyREE7QUFDQTtBQUNBO0FBODJEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFlQTtBQUNBO0FBejVEQTtBQUNBO0FBQ0E7QUEyNURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBcDZEQTtBQUNBO0FBQ0E7QUFzNkRBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQW43REE7QUF1N0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWZBO0FBRkE7QUFWQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBeGlFQTtBQTRpRUE7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUEzQkE7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQW9CQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBMkJBO0FBREE7QUFHQTtBQUNBO0FBdEVBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFoRUE7QUFrRUE7QUFDQTtBQXBFQTtBQXVFQTtBQUNBO0FBekVBO0FBQ0E7QUEyRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQVpBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBdEJBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBTEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBa0JBO0FBQ0E7QUF4RUE7QUFDQTtBQTBFQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQTE0RUE7QUE4NEVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFuNUVBO0FBcTVFQTtBQUFBO0FBcnVGQTtBQUFBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/localforage/dist/localforage.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_DataView.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_DataView.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n\n/* Built-in method references that are verified to be native. */\n\nvar DataView = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'DataView');\n/* harmony default export */ __webpack_exports__[\"default\"] = (DataView);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanM/ZmI1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRhVmlldztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_DataView.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Hash.js": -/*!******************************************!*\ - !*** ../node_modules/lodash-es/_Hash.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _hashClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_hashClear.js */ \"../node_modules/lodash-es/_hashClear.js\");\n/* harmony import */ var _hashDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_hashDelete.js */ \"../node_modules/lodash-es/_hashDelete.js\");\n/* harmony import */ var _hashGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_hashGet.js */ \"../node_modules/lodash-es/_hashGet.js\");\n/* harmony import */ var _hashHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_hashHas.js */ \"../node_modules/lodash-es/_hashHas.js\");\n/* harmony import */ var _hashSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_hashSet.js */ \"../node_modules/lodash-es/_hashSet.js\");\n\n\n\n\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = _hashClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nHash.prototype['delete'] = _hashDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nHash.prototype.get = _hashGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nHash.prototype.has = _hashHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nHash.prototype.set = _hashSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (Hash);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fSGFzaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19IYXNoLmpzPzBiMGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Hash.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_ListCache.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_ListCache.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _listCacheClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_listCacheClear.js */ \"../node_modules/lodash-es/_listCacheClear.js\");\n/* harmony import */ var _listCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_listCacheDelete.js */ \"../node_modules/lodash-es/_listCacheDelete.js\");\n/* harmony import */ var _listCacheGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_listCacheGet.js */ \"../node_modules/lodash-es/_listCacheGet.js\");\n/* harmony import */ var _listCacheHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_listCacheHas.js */ \"../node_modules/lodash-es/_listCacheHas.js\");\n/* harmony import */ var _listCacheSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_listCacheSet.js */ \"../node_modules/lodash-es/_listCacheSet.js\");\n\n\n\n\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = _listCacheClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nListCache.prototype['delete'] = _listCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nListCache.prototype.get = _listCacheGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nListCache.prototype.has = _listCacheHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nListCache.prototype.set = _listCacheSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (ListCache);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTGlzdENhY2hlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcz84NjZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsaXN0Q2FjaGVDbGVhciBmcm9tICcuL19saXN0Q2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbGlzdENhY2hlRGVsZXRlIGZyb20gJy4vX2xpc3RDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbGlzdENhY2hlR2V0IGZyb20gJy4vX2xpc3RDYWNoZUdldC5qcyc7XG5pbXBvcnQgbGlzdENhY2hlSGFzIGZyb20gJy4vX2xpc3RDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbGlzdENhY2hlU2V0IGZyb20gJy4vX2xpc3RDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdENhY2hlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_ListCache.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Map.js": -/*!*****************************************!*\ - !*** ../node_modules/lodash-es/_Map.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n\n/* Built-in method references that are verified to be native. */\n\nvar Map = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Map');\n/* harmony default export */ __webpack_exports__[\"default\"] = (Map);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcz8xY2RmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Map.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_MapCache.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_MapCache.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mapCacheClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_mapCacheClear.js */ \"../node_modules/lodash-es/_mapCacheClear.js\");\n/* harmony import */ var _mapCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_mapCacheDelete.js */ \"../node_modules/lodash-es/_mapCacheDelete.js\");\n/* harmony import */ var _mapCacheGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_mapCacheGet.js */ \"../node_modules/lodash-es/_mapCacheGet.js\");\n/* harmony import */ var _mapCacheHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_mapCacheHas.js */ \"../node_modules/lodash-es/_mapCacheHas.js\");\n/* harmony import */ var _mapCacheSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_mapCacheSet.js */ \"../node_modules/lodash-es/_mapCacheSet.js\");\n\n\n\n\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = _mapCacheClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nMapCache.prototype['delete'] = _mapCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nMapCache.prototype.get = _mapCacheGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nMapCache.prototype.has = _mapCacheHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nMapCache.prototype.set = _mapCacheSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (MapCache);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwQ2FjaGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwQ2FjaGUuanM/M2Q4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWFwQ2FjaGVDbGVhciBmcm9tICcuL19tYXBDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBtYXBDYWNoZURlbGV0ZSBmcm9tICcuL19tYXBDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVHZXQgZnJvbSAnLi9fbWFwQ2FjaGVHZXQuanMnO1xuaW1wb3J0IG1hcENhY2hlSGFzIGZyb20gJy4vX21hcENhY2hlSGFzLmpzJztcbmltcG9ydCBtYXBDYWNoZVNldCBmcm9tICcuL19tYXBDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBDYWNoZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_MapCache.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Promise.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_Promise.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n\n/* Built-in method references that are verified to be native. */\n\nvar Promise = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Promise');\n/* harmony default export */ __webpack_exports__[\"default\"] = (Promise);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fUHJvbWlzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19Qcm9taXNlLmpzPzBjZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Promise.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Set.js": -/*!*****************************************!*\ - !*** ../node_modules/lodash-es/_Set.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n\n/* Built-in method references that are verified to be native. */\n\nvar Set = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Set');\n/* harmony default export */ __webpack_exports__[\"default\"] = (Set);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldC5qcz9jY2I0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxuZXhwb3J0IGRlZmF1bHQgU2V0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Set.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_SetCache.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_SetCache.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MapCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_MapCache.js */ \"../node_modules/lodash-es/_MapCache.js\");\n/* harmony import */ var _setCacheAdd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_setCacheAdd.js */ \"../node_modules/lodash-es/_setCacheAdd.js\");\n/* harmony import */ var _setCacheHas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_setCacheHas.js */ \"../node_modules/lodash-es/_setCacheHas.js\");\n\n\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n\n while (++index < length) {\n this.add(values[index]);\n }\n} // Add methods to `SetCache`.\n\n\nSetCache.prototype.add = SetCache.prototype.push = _setCacheAdd_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nSetCache.prototype.has = _setCacheHas_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (SetCache);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0Q2FjaGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0Q2FjaGUuanM/ZWRiNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuaW1wb3J0IHNldENhY2hlQWRkIGZyb20gJy4vX3NldENhY2hlQWRkLmpzJztcbmltcG9ydCBzZXRDYWNoZUhhcyBmcm9tICcuL19zZXRDYWNoZUhhcy5qcyc7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuZXhwb3J0IGRlZmF1bHQgU2V0Q2FjaGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_SetCache.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Stack.js": -/*!*******************************************!*\ - !*** ../node_modules/lodash-es/_Stack.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _stackClear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_stackClear.js */ \"../node_modules/lodash-es/_stackClear.js\");\n/* harmony import */ var _stackDelete_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_stackDelete.js */ \"../node_modules/lodash-es/_stackDelete.js\");\n/* harmony import */ var _stackGet_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_stackGet.js */ \"../node_modules/lodash-es/_stackGet.js\");\n/* harmony import */ var _stackHas_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_stackHas.js */ \"../node_modules/lodash-es/_stackHas.js\");\n/* harmony import */ var _stackSet_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_stackSet.js */ \"../node_modules/lodash-es/_stackSet.js\");\n\n\n\n\n\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction Stack(entries) {\n var data = this.__data__ = new _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](entries);\n this.size = data.size;\n} // Add methods to `Stack`.\n\n\nStack.prototype.clear = _stackClear_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nStack.prototype['delete'] = _stackDelete_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nStack.prototype.get = _stackGet_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nStack.prototype.has = _stackHas_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nStack.prototype.set = _stackSet_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (Stack);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3RhY2suanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3RhY2suanM/MjY5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgc3RhY2tDbGVhciBmcm9tICcuL19zdGFja0NsZWFyLmpzJztcbmltcG9ydCBzdGFja0RlbGV0ZSBmcm9tICcuL19zdGFja0RlbGV0ZS5qcyc7XG5pbXBvcnQgc3RhY2tHZXQgZnJvbSAnLi9fc3RhY2tHZXQuanMnO1xuaW1wb3J0IHN0YWNrSGFzIGZyb20gJy4vX3N0YWNrSGFzLmpzJztcbmltcG9ydCBzdGFja1NldCBmcm9tICcuL19zdGFja1NldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuZXhwb3J0IGRlZmF1bHQgU3RhY2s7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Stack.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Symbol.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/_Symbol.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n/** Built-in value references. */\n\nvar _Symbol = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Symbol;\n/* harmony default export */ __webpack_exports__[\"default\"] = (_Symbol);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcz9iYTIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Symbol.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_Uint8Array.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_Uint8Array.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n/** Built-in value references. */\n\nvar Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Uint8Array;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Uint8Array);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fVWludDhBcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzP2FmMDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_Uint8Array.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_WeakMap.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_WeakMap.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n\n/* Built-in method references that are verified to be native. */\n\nvar WeakMap = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'WeakMap');\n/* harmony default export */ __webpack_exports__[\"default\"] = (WeakMap);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fV2Vha01hcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19XZWFrTWFwLmpzPzdiMmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_WeakMap.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_arrayFilter.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_arrayFilter.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (arrayFilter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanM/YTU2OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RmlsdGVyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_arrayFilter.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_arrayLikeKeys.js": -/*!***************************************************!*\ - !*** ../node_modules/lodash-es/_arrayLikeKeys.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseTimes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseTimes.js */ \"../node_modules/lodash-es/_baseTimes.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArguments.js */ \"../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isBuffer.js */ \"../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_isIndex.js */ \"../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isTypedArray.js */ \"../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = Object(_isArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value),\n isArg = !isArr && Object(_isArguments_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value),\n isBuff = !isArr && !isArg && Object(_isBuffer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value),\n isType = !isArr && !isArg && !isBuff && Object(_isTypedArray_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? Object(_baseTimes_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n Object(_isIndex_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (arrayLikeKeys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzP2FlYzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_arrayLikeKeys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_arrayMap.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_arrayMap.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (arrayMap);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanM/Yjg0NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_arrayMap.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_arrayPush.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_arrayPush.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (arrayPush);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5UHVzaC5qcz8yZTZiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlQdXNoO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7OztBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_arrayPush.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_arraySome.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_arraySome.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (arraySome);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5U29tZS5qcz9hNTMxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U29tZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_arraySome.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_assignValue.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_assignValue.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseAssignValue.js */ \"../node_modules/lodash-es/_baseAssignValue.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eq.js */ \"../node_modules/lodash-es/eq.js\");\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n\n if (!(hasOwnProperty.call(object, key) && Object(_eq_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(objValue, value)) || value === undefined && !(key in object)) {\n Object(_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key, value);\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (assignValue);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanM/MzdiNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_assignValue.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_assocIndexOf.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_assocIndexOf.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eq.js */ \"../node_modules/lodash-es/eq.js\");\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (Object(_eq_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (assocIndexOf);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzb2NJbmRleE9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcz9hMmEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NJbmRleE9mO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_assocIndexOf.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseAssignValue.js": -/*!*****************************************************!*\ - !*** ../node_modules/lodash-es/_baseAssignValue.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defineProperty.js */ \"../node_modules/lodash-es/_defineProperty.js\");\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n Object(_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseAssignValue);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcz84MWJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseAssignValue.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseFor.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_baseFor.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createBaseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createBaseFor.js */ \"../node_modules/lodash-es/_createBaseFor.js\");\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n\nvar baseFor = Object(_createBaseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseFor);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRm9yLmpzPzgwZTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7OztBQVdBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseFor.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseGet.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_baseGet.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_castPath.js */ \"../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n\nfunction baseGet(object, path) {\n path = Object(_castPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path, object);\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[Object(_toKey_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path[index++])];\n }\n\n return index && index == length ? object : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseGet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0LmpzPzMwOWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseGet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseGetAllKeys.js": -/*!****************************************************!*\ - !*** ../node_modules/lodash-es/_baseGetAllKeys.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayPush.js */ \"../node_modules/lodash-es/_arrayPush.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return Object(_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object) ? result : Object(_arrayPush_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(result, symbolsFunc(object));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseGetAllKeys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanM/ZjYyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseGetAllKeys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseGetTag.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_baseGetTag.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _getRawTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getRawTag.js */ \"../node_modules/lodash-es/_getRawTag.js\");\n/* harmony import */ var _objectToString_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_objectToString.js */ \"../node_modules/lodash-es/_objectToString.js\");\n\n\n\n/** `Object#toString` result references. */\n\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n/** Built-in value references. */\n\nvar symToStringTag = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? Object(_getRawTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) : Object(_objectToString_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseGetTag);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzPzg5ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseGetTag.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseHasIn.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_baseHasIn.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseHasIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VIYXNJbi5qcz9hMGExIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSGFzSW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseHasIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsArguments.js": -/*!*****************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsArguments.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\n\n\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\nfunction baseIsArguments(value) {\n return Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) == argsTag;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsArguments);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcz81NTkwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsArguments.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsEqual.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsEqual.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsEqualDeep_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsEqualDeep.js */ \"../node_modules/lodash-es/_baseIsEqualDeep.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\n\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && !Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(other)) {\n return value !== value && other !== other;\n }\n\n return Object(_baseIsEqualDeep_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsEqual);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanM/NWU5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsEqual.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsEqualDeep.js": -/*!*****************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsEqualDeep.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Stack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Stack.js */ \"../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _equalArrays_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_equalArrays.js */ \"../node_modules/lodash-es/_equalArrays.js\");\n/* harmony import */ var _equalByTag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_equalByTag.js */ \"../node_modules/lodash-es/_equalByTag.js\");\n/* harmony import */ var _equalObjects_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_equalObjects.js */ \"../node_modules/lodash-es/_equalObjects.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_getTag.js */ \"../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isBuffer.js */ \"../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./isTypedArray.js */ \"../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = Object(_isArray_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(object),\n othIsArr = Object(_isArray_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(other),\n objTag = objIsArr ? arrayTag : Object(_getTag_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object),\n othTag = othIsArr ? arrayTag : Object(_getTag_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && Object(_isBuffer_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(object)) {\n if (!Object(_isBuffer_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]());\n return objIsArr || Object(_isTypedArray_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(object) ? Object(_equalArrays_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, other, bitmask, customizer, equalFunc, stack) : Object(_equalByTag_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]());\n return Object(_equalObjects_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsEqualDeep);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsRGVlcC5qcz84NzljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IGVxdWFsQnlUYWcgZnJvbSAnLi9fZXF1YWxCeVRhZy5qcyc7XG5pbXBvcnQgZXF1YWxPYmplY3RzIGZyb20gJy4vX2VxdWFsT2JqZWN0cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNFcXVhbERlZXA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsEqualDeep.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsMatch.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsMatch.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Stack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Stack.js */ \"../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _baseIsEqual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIsEqual.js */ \"../node_modules/lodash-es/_baseIsEqual.js\");\n\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n\n object = Object(object);\n\n while (index--) {\n var data = matchData[index];\n\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false;\n }\n }\n\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n\n if (!(result === undefined ? Object(_baseIsEqual_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsMatch);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanM/YjdhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hdGNoO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFHQTs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsMatch.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsNative.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsNative.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isFunction_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction.js */ \"../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isMasked_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isMasked.js */ \"../node_modules/lodash-es/_isMasked.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isObject.js */ \"../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _toSource_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_toSource.js */ \"../node_modules/lodash-es/_toSource.js\");\n\n\n\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\nfunction baseIsNative(value) {\n if (!Object(_isObject_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) || Object(_isMasked_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n return false;\n }\n\n var pattern = Object(_isFunction_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) ? reIsNative : reIsHostCtor;\n return pattern.test(Object(_toSource_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsNative);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcz9jNWU4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNNYXNrZWQgZnJvbSAnLi9faXNNYXNrZWQuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTmF0aXZlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBS0E7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsNative.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIsTypedArray.js": -/*!******************************************************!*\ - !*** ../node_modules/lodash-es/_baseIsTypedArray.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isLength.js */ \"../node_modules/lodash-es/isLength.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\nfunction baseIsTypedArray(value) {\n return Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) && Object(_isLength_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value.length) && !!typedArrayTags[Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIsTypedArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzPzBkZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBU0E7Ozs7Ozs7O0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIsTypedArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseIteratee.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_baseIteratee.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseMatches_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseMatches.js */ \"../node_modules/lodash-es/_baseMatches.js\");\n/* harmony import */ var _baseMatchesProperty_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseMatchesProperty.js */ \"../node_modules/lodash-es/_baseMatchesProperty.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./identity.js */ \"../node_modules/lodash-es/identity.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _property_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./property.js */ \"../node_modules/lodash-es/property.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n\n if (value == null) {\n return _identity_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n }\n\n if (_typeof(value) == 'object') {\n return Object(_isArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value) ? Object(_baseMatchesProperty_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value[0], value[1]) : Object(_baseMatches_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n }\n\n return Object(_property_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseIteratee);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUl0ZXJhdGVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJdGVyYXRlZS5qcz9iMzFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlTWF0Y2hlcyBmcm9tICcuL19iYXNlTWF0Y2hlcy5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJdGVyYXRlZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseIteratee.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseKeys.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_baseKeys.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isPrototype.js */ \"../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _nativeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_nativeKeys.js */ \"../node_modules/lodash-es/_nativeKeys.js\");\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeys(object) {\n if (!Object(_isPrototype_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return Object(_nativeKeys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseKeys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanM/YzFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXMgZnJvbSAnLi9fbmF0aXZlS2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseKeys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseKeysIn.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_baseKeysIn.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isPrototype.js */ \"../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _nativeKeysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_nativeKeysIn.js */ \"../node_modules/lodash-es/_nativeKeysIn.js\");\n\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeysIn(object) {\n if (!Object(_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return Object(_nativeKeysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object);\n }\n\n var isProto = Object(_isPrototype_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseKeysIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzP2JkYWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseKeysIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseMatches.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_baseMatches.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsMatch_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsMatch.js */ \"../node_modules/lodash-es/_baseIsMatch.js\");\n/* harmony import */ var _getMatchData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getMatchData.js */ \"../node_modules/lodash-es/_getMatchData.js\");\n/* harmony import */ var _matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_matchesStrictComparable.js */ \"../node_modules/lodash-es/_matchesStrictComparable.js\");\n\n\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n\nfunction baseMatches(source) {\n var matchData = Object(_getMatchData_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(source);\n\n if (matchData.length == 1 && matchData[0][2]) {\n return Object(_matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(matchData[0][0], matchData[0][1]);\n }\n\n return function (object) {\n return object === source || Object(_baseIsMatch_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, source, matchData);\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseMatches);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanM/ODRkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzTWF0Y2ggZnJvbSAnLi9fYmFzZUlzTWF0Y2guanMnO1xuaW1wb3J0IGdldE1hdGNoRGF0YSBmcm9tICcuL19nZXRNYXRjaERhdGEuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXRjaGVzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseMatches.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseMatchesProperty.js": -/*!*********************************************************!*\ - !*** ../node_modules/lodash-es/_baseMatchesProperty.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsEqual_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsEqual.js */ \"../node_modules/lodash-es/_baseIsEqual.js\");\n/* harmony import */ var _get_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get.js */ \"../node_modules/lodash-es/get.js\");\n/* harmony import */ var _hasIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hasIn.js */ \"../node_modules/lodash-es/hasIn.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_isKey.js */ \"../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _isStrictComparable_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_isStrictComparable.js */ \"../node_modules/lodash-es/_isStrictComparable.js\");\n/* harmony import */ var _matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_matchesStrictComparable.js */ \"../node_modules/lodash-es/_matchesStrictComparable.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n\nfunction baseMatchesProperty(path, srcValue) {\n if (Object(_isKey_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(path) && Object(_isStrictComparable_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(srcValue)) {\n return Object(_matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Object(_toKey_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(path), srcValue);\n }\n\n return function (object) {\n var objValue = Object(_get_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, path);\n return objValue === undefined && objValue === srcValue ? Object(_hasIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, path) : Object(_baseIsEqual_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseMatchesProperty);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzPzZiYTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcbmltcG9ydCBnZXQgZnJvbSAnLi9nZXQuanMnO1xuaW1wb3J0IGhhc0luIGZyb20gJy4vaGFzSW4uanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBpc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9faXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseMatchesProperty.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_basePickBy.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_basePickBy.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../node_modules/lodash-es/_baseGet.js\");\n/* harmony import */ var _baseSet_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseSet.js */ \"../node_modules/lodash-es/_baseSet.js\");\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_castPath.js */ \"../node_modules/lodash-es/_castPath.js\");\n\n\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = Object(_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n\n if (predicate(value, path)) {\n Object(_baseSet_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(result, Object(_castPath_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path, object), value);\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (basePickBy);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2tCeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUGlja0J5LmpzPzA4MzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5pbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcbmltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgIGBfLnBpY2tCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICByZXN1bHQgPSB7fTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBwYXRoID0gcGF0aHNbaW5kZXhdLFxuICAgICAgICB2YWx1ZSA9IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcblxuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIHBhdGgpKSB7XG4gICAgICBiYXNlU2V0KHJlc3VsdCwgY2FzdFBhdGgocGF0aCwgb2JqZWN0KSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUGlja0J5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_basePickBy.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseProperty.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_baseProperty.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseProperty);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eS5qcz81OTQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseProperty.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_basePropertyDeep.js": -/*!******************************************************!*\ - !*** ../node_modules/lodash-es/_basePropertyDeep.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../node_modules/lodash-es/_baseGet.js\");\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n\nfunction basePropertyDeep(path) {\n return function (object) {\n return Object(_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (basePropertyDeep);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5RGVlcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzP2FiNmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlEZWVwO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_basePropertyDeep.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseSet.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_baseSet.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assignValue.js */ \"../node_modules/lodash-es/_assignValue.js\");\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_castPath.js */ \"../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_isIndex.js */ \"../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isObject.js */ \"../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n\nfunction baseSet(object, path, value, customizer) {\n if (!Object(_isObject_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object)) {\n return object;\n }\n\n path = Object(_castPath_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path, object);\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = Object(_toKey_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\n if (newValue === undefined) {\n newValue = Object(_isObject_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(objValue) ? objValue : Object(_isIndex_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path[index + 1]) ? [] : {};\n }\n }\n\n Object(_assignValue_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nested, key, newValue);\n nested = nested[key];\n }\n\n return object;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseSet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0LmpzPzMwM2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pLFxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgdmFyIG9ialZhbHVlID0gbmVzdGVkW2tleV07XG4gICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IGlzT2JqZWN0KG9ialZhbHVlKVxuICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseSet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseSlice.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_baseSlice.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n\n end = end > length ? length : end;\n\n if (end < 0) {\n end += length;\n }\n\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n\n while (++index < length) {\n result[index] = array[index + start];\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseSlice);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNsaWNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTbGljZS5qcz80ZjVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNsaWNlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseSlice.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseTimes.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_baseTimes.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseTimes);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUaW1lcy5qcz9kZDJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseTimes.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseToString.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_baseToString.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayMap.js */ \"../node_modules/lodash-es/_arrayMap.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isSymbol.js */ \"../node_modules/lodash-es/isSymbol.js\");\n\n\n\n\n/** Used as references for various `Number` constants. */\n\nvar INFINITY = 1 / 0;\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n\n if (Object(_isArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return Object(_arrayMap_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value, baseToString) + '';\n }\n\n if (Object(_isSymbol_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseToString);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcz83NzJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVG9TdHJpbmc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseToString.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseUnary.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_baseUnary.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseUnary);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcz81YWMxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseUnary.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_baseUnset.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_baseUnset.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_castPath.js */ \"../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _last_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./last.js */ \"../node_modules/lodash-es/last.js\");\n/* harmony import */ var _parent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_parent.js */ \"../node_modules/lodash-es/_parent.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n\nfunction baseUnset(object, path) {\n path = Object(_castPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path, object);\n object = Object(_parent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, path);\n return object == null || delete object[Object(_toKey_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Object(_last_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path))];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (baseUnset);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuc2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbnNldC5qcz8yZTg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuaW1wb3J0IHBhcmVudCBmcm9tICcuL19wYXJlbnQuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVW5zZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_baseUnset.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_cacheHas.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_cacheHas.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cacheHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanM/MGY4MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FjaGVIYXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_cacheHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_castFunction.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_castFunction.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../node_modules/lodash-es/identity.js\");\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n\nfunction castFunction(value) {\n return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (castFunction);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdEZ1bmN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nhc3RGdW5jdGlvbi5qcz85NDVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdEZ1bmN0aW9uO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_castFunction.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_castPath.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_castPath.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isKey.js */ \"../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _stringToPath_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_stringToPath.js */ \"../node_modules/lodash-es/_stringToPath.js\");\n/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./toString.js */ \"../node_modules/lodash-es/toString.js\");\n\n\n\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n\nfunction castPath(value, object) {\n if (Object(_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return value;\n }\n\n return Object(_isKey_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value, object) ? [value] : Object(_stringToPath_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Object(_toString_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (castPath);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanM/MGIwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_castPath.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_coreJsData.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_coreJsData.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n\n/** Used to detect overreaching core-js shims. */\n\nvar coreJsData = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]['__core-js_shared__'];\n/* harmony default export */ __webpack_exports__[\"default\"] = (coreJsData);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzPzVjNmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_coreJsData.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_createBaseFor.js": -/*!***************************************************!*\ - !*** ../node_modules/lodash-es/_createBaseFor.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n\n return object;\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (createBaseFor);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQmFzZUZvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRm9yLmpzP2RlMGYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJhc2VGb3I7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBY0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_createBaseFor.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_defineProperty.js": -/*!****************************************************!*\ - !*** ../node_modules/lodash-es/_defineProperty.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n\n\nvar defineProperty = function () {\n try {\n var func = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (defineProperty);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanM/ZGM2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVQcm9wZXJ0eTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_defineProperty.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_equalArrays.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_equalArrays.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _SetCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_SetCache.js */ \"../node_modules/lodash-es/_SetCache.js\");\n/* harmony import */ var _arraySome_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arraySome.js */ \"../node_modules/lodash-es/_arraySome.js\");\n/* harmony import */ var _cacheHas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_cacheHas.js */ \"../node_modules/lodash-es/_cacheHas.js\");\n\n\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(array);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new _SetCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!Object(_arraySome_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(other, function (othValue, othIndex) {\n if (!Object(_cacheHas_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (equalArrays);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxBcnJheXMuanM/ZjcwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2V0Q2FjaGUgZnJvbSAnLi9fU2V0Q2FjaGUuanMnO1xuaW1wb3J0IGFycmF5U29tZSBmcm9tICcuL19hcnJheVNvbWUuanMnO1xuaW1wb3J0IGNhY2hlSGFzIGZyb20gJy4vX2NhY2hlSGFzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgaWYgKHN0YWNrZWQgJiYgc3RhY2suZ2V0KG90aGVyKSkge1xuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxBcnJheXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFHQTs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQVRBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_equalArrays.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_equalByTag.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_equalByTag.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Uint8Array.js */ \"../node_modules/lodash-es/_Uint8Array.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eq.js */ \"../node_modules/lodash-es/eq.js\");\n/* harmony import */ var _equalArrays_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_equalArrays.js */ \"../node_modules/lodash-es/_equalArrays.js\");\n/* harmony import */ var _mapToArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_mapToArray.js */ \"../node_modules/lodash-es/_mapToArray.js\");\n/* harmony import */ var _setToArray_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_setToArray.js */ \"../node_modules/lodash-es/_setToArray.js\");\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */\n\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](object), new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return Object(_eq_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = _mapToArray_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = _setToArray_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = Object(_equalArrays_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (equalByTag);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEJ5VGFnLmpzPzhjNTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxCeVRhZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNURBO0FBQ0E7QUE0REE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_equalByTag.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_equalObjects.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_equalObjects.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getAllKeys.js */ \"../node_modules/lodash-es/_getAllKeys.js\");\n\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = Object(_getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object),\n objLength = objProps.length,\n othProps = Object(_getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (equalObjects);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxPYmplY3RzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcz8xNzRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFDQTtBQWdCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFOQTtBQUNBO0FBQ0E7QUFTQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_equalObjects.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_freeGlobal.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_freeGlobal.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/** Detect free variable `global` from Node.js. */\n\n\nvar freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n/* harmony default export */ __webpack_exports__[\"default\"] = (freeGlobal);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzPzJjOTgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_freeGlobal.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getAllKeys.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_getAllKeys.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetAllKeys.js */ \"../node_modules/lodash-es/_baseGetAllKeys.js\");\n/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getSymbols.js */ \"../node_modules/lodash-es/_getSymbols.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keys.js */ \"../node_modules/lodash-es/keys.js\");\n\n\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\nfunction getAllKeys(object) {\n return Object(_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, _keys_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _getSymbols_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getAllKeys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRBbGxLZXlzLmpzPzBhODkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRBbGxLZXlzIGZyb20gJy4vX2Jhc2VHZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getAllKeys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getAllKeysIn.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_getAllKeysIn.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetAllKeys.js */ \"../node_modules/lodash-es/_baseGetAllKeys.js\");\n/* harmony import */ var _getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getSymbolsIn.js */ \"../node_modules/lodash-es/_getSymbolsIn.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keysIn.js */ \"../node_modules/lodash-es/keysIn.js\");\n\n\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\nfunction getAllKeysIn(object) {\n return Object(_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, _keysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getAllKeysIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5c0luLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldEFsbEtleXNJbi5qcz8wMDUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9sc0luIGZyb20gJy4vX2dldFN5bWJvbHNJbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5c0luO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getAllKeysIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getMapData.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_getMapData.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isKeyable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isKeyable.js */ \"../node_modules/lodash-es/_isKeyable.js\");\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return Object(_isKeyable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getMapData);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzPzIwYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzS2V5YWJsZSBmcm9tICcuL19pc0tleWFibGUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE1hcERhdGE7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getMapData.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getMatchData.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_getMatchData.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isStrictComparable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isStrictComparable.js */ \"../node_modules/lodash-es/_isStrictComparable.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keys.js */ \"../node_modules/lodash-es/keys.js\");\n\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n\nfunction getMatchData(object) {\n var result = Object(_keys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n result[length] = [key, value, Object(_isStrictComparable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)];\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getMatchData);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE1hdGNoRGF0YS5qcz9iZDdjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9faXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRNYXRjaERhdGE7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getMatchData.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getNative.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_getNative.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsNative.js */ \"../node_modules/lodash-es/_baseIsNative.js\");\n/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getValue.js */ \"../node_modules/lodash-es/_getValue.js\");\n\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\nfunction getNative(object, key) {\n var value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key);\n return Object(_baseIsNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) ? value : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getNative);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcz9jMGIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlSXNOYXRpdmUgZnJvbSAnLi9fYmFzZUlzTmF0aXZlLmpzJztcbmltcG9ydCBnZXRWYWx1ZSBmcm9tICcuL19nZXRWYWx1ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE5hdGl2ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getNative.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getPrototype.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_getPrototype.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_overArg.js */ \"../node_modules/lodash-es/_overArg.js\");\n\n/** Built-in value references. */\n\nvar getPrototype = Object(_overArg_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object.getPrototypeOf, Object);\n/* harmony default export */ __webpack_exports__[\"default\"] = (getPrototype);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcz8wYmNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getPrototype.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getRawTag.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_getRawTag.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../node_modules/lodash-es/_Symbol.js\");\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getRawTag);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcz9lNzE5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7QUFLQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getRawTag.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getSymbols.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_getSymbols.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayFilter.js */ \"../node_modules/lodash-es/_arrayFilter.js\");\n/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stubArray.js */ \"../node_modules/lodash-es/stubArray.js\");\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return Object(_arrayFilter_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (getSymbols);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRTeW1ib2xzLmpzPzI1Y2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBzdHViQXJyYXkgZnJvbSAnLi9zdHViQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFMQTtBQVVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getSymbols.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getSymbolsIn.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_getSymbolsIn.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayPush.js */ \"../node_modules/lodash-es/_arrayPush.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getPrototype.js */ \"../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getSymbols.js */ \"../node_modules/lodash-es/_getSymbols.js\");\n/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stubArray.js */ \"../node_modules/lodash-es/stubArray.js\");\n\n\n\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbolsIn = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"] : function (object) {\n var result = [];\n\n while (object) {\n Object(_arrayPush_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(result, Object(_getSymbols_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object));\n object = Object(_getPrototype_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n }\n\n return result;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (getSymbolsIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9sc0luLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHNJbi5qcz85MzJhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHNJbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFTQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getSymbolsIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getTag.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/_getTag.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _DataView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_DataView.js */ \"../node_modules/lodash-es/_DataView.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Map.js */ \"../node_modules/lodash-es/_Map.js\");\n/* harmony import */ var _Promise_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_Promise.js */ \"../node_modules/lodash-es/_Promise.js\");\n/* harmony import */ var _Set_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_Set.js */ \"../node_modules/lodash-es/_Set.js\");\n/* harmony import */ var _WeakMap_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_WeakMap.js */ \"../node_modules/lodash-es/_WeakMap.js\");\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _toSource_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_toSource.js */ \"../node_modules/lodash-es/_toSource.js\");\n\n\n\n\n\n\n\n/** `Object#toString` result references. */\n\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_DataView_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n mapCtorString = Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n promiseCtorString = Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_Promise_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n setCtorString = Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_Set_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n weakMapCtorString = Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_WeakMap_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = _baseGetTag_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (_DataView_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && getTag(new _DataView_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](new ArrayBuffer(1))) != dataViewTag || _Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] && getTag(new _Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]()) != mapTag || _Promise_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] && getTag(_Promise_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].resolve()) != promiseTag || _Set_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"] && getTag(new _Set_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]()) != setTag || _WeakMap_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"] && getTag(new _WeakMap_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? Object(_toSource_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getTag);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFRhZy5qcz9lYTFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEYXRhVmlldyBmcm9tICcuL19EYXRhVmlldy5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL19Qcm9taXNlLmpzJztcbmltcG9ydCBTZXQgZnJvbSAnLi9fU2V0LmpzJztcbmltcG9ydCBXZWFrTWFwIGZyb20gJy4vX1dlYWtNYXAuanMnO1xuaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRUYWc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BOzs7Ozs7OztBQU9BO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUFBO0FBZEE7QUFnQkE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getTag.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_getValue.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_getValue.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getValue);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanM/YjM0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VmFsdWU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_getValue.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hasPath.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_hasPath.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_castPath.js */ \"../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArguments.js */ \"../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_isIndex.js */ \"../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isLength.js */ \"../node_modules/lodash-es/isLength.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n\nfunction hasPath(object, path, hasFunc) {\n path = Object(_castPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path, object);\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = Object(_toKey_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(path[index]);\n\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n\n object = object[key];\n }\n\n if (result || ++index != length) {\n return result;\n }\n\n length = object == null ? 0 : object.length;\n return !!length && Object(_isLength_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(length) && Object(_isIndex_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(key, length) && (Object(_isArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object) || Object(_isArguments_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hasPath);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzUGF0aC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNQYXRoLmpzPzdkODciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNQYXRoO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hasPath.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hashClear.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_hashClear.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../node_modules/lodash-es/_nativeCreate.js\");\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\nfunction hashClear() {\n this.__data__ = _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? Object(_nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(null) : {};\n this.size = 0;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hashClear);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hDbGVhci5qcz9lMWQwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hDbGVhcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hashClear.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hashDelete.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_hashDelete.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hashDelete);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoRGVsZXRlLmpzPzcyZTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hashDelete.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hashGet.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_hashGet.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../node_modules/lodash-es/_nativeCreate.js\");\n\n/** Used to stand-in for `undefined` hash values. */\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (_nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hashGet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEdldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoR2V0LmpzPzg4ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hHZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hashGet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hashHas.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_hashHas.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../node_modules/lodash-es/_nativeCreate.js\");\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction hashHas(key) {\n var data = this.__data__;\n return _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hashHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEhhcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoSGFzLmpzPzNjOTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hashHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_hashSet.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_hashSet.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../node_modules/lodash-es/_nativeCreate.js\");\n\n/** Used to stand-in for `undefined` hash values. */\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hashSet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaFNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoU2V0LmpzP2I4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaFNldDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_hashSet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isIndex.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_isIndex.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/** Used as references for various `Number` constants. */\n\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\nfunction isIndex(value, length) {\n var type = _typeof(value);\n\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isIndex);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzPzZkNmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUlBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isIndex.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isKey.js": -/*!*******************************************!*\ - !*** ../node_modules/lodash-es/_isKey.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isSymbol.js */ \"../node_modules/lodash-es/isSymbol.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n/** Used to match property names within property paths. */\n\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n\nfunction isKey(value, object) {\n if (Object(_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return false;\n }\n\n var type = _typeof(value);\n\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || Object(_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n return true;\n }\n\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isKey);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanM/YTQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzS2V5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isKey.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isKeyable.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/_isKeyable.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\n\nfunction isKeyable(value) {\n var type = _typeof(value);\n\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isKeyable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXlhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcz9kMWEyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNLZXlhYmxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isKeyable.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isMasked.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_isMasked.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_coreJsData.js */ \"../node_modules/lodash-es/_coreJsData.js\");\n\n/** Used to detect methods masquerading as native. */\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(_coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keys && _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isMasked);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanM/ZjAzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isMasked.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isPrototype.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_isPrototype.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isPrototype);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isPrototype.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_isStrictComparable.js": -/*!********************************************************!*\ - !*** ../node_modules/lodash-es/_isStrictComparable.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../node_modules/lodash-es/isObject.js\");\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n\nfunction isStrictComparable(value) {\n return value === value && !Object(_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isStrictComparable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNTdHJpY3RDb21wYXJhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcz9iMzg3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmljdENvbXBhcmFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_isStrictComparable.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_listCacheClear.js": -/*!****************************************************!*\ - !*** ../node_modules/lodash-es/_listCacheClear.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (listCacheClear);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlQ2xlYXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlQ2xlYXIuanM/ODYwYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUNsZWFyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_listCacheClear.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_listCacheDelete.js": -/*!*****************************************************!*\ - !*** ../node_modules/lodash-es/_listCacheDelete.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../node_modules/lodash-es/_assocIndexOf.js\");\n\n/** Used for built-in method references. */\n\nvar arrayProto = Array.prototype;\n/** Built-in value references. */\n\nvar splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = Object(_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (listCacheDelete);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZURlbGV0ZS5qcz80OGVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVEZWxldGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_listCacheDelete.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_listCacheGet.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_listCacheGet.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../node_modules/lodash-es/_assocIndexOf.js\");\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = Object(_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (listCacheGet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcz83ZDgxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_listCacheGet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_listCacheHas.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_listCacheHas.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../node_modules/lodash-es/_assocIndexOf.js\");\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction listCacheHas(key) {\n return Object(_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this.__data__, key) > -1;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (listCacheHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlSGFzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUhhcy5qcz84OTBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUhhcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_listCacheHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_listCacheSet.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_listCacheSet.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../node_modules/lodash-es/_assocIndexOf.js\");\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = Object(_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (listCacheSet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlU2V0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZVNldC5qcz9iN2Y2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVTZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_listCacheSet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapCacheClear.js": -/*!***************************************************!*\ - !*** ../node_modules/lodash-es/_mapCacheClear.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Hash_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Hash.js */ \"../node_modules/lodash-es/_Hash.js\");\n/* harmony import */ var _ListCache_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_ListCache.js */ \"../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_Map.js */ \"../node_modules/lodash-es/_Map.js\");\n\n\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new _Hash_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](),\n 'map': new (_Map_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] || _ListCache_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n 'string': new _Hash_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]()\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapCacheClear);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVDbGVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUNsZWFyLmpzP2JiZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhhc2ggZnJvbSAnLi9fSGFzaC5qcyc7XG5pbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVDbGVhcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapCacheClear.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapCacheDelete.js": -/*!****************************************************!*\ - !*** ../node_modules/lodash-es/_mapCacheDelete.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../node_modules/lodash-es/_getMapData.js\");\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction mapCacheDelete(key) {\n var result = Object(_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapCacheDelete);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanM/NTY1NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlRGVsZXRlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapCacheDelete.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapCacheGet.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_mapCacheGet.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../node_modules/lodash-es/_getMapData.js\");\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction mapCacheGet(key) {\n return Object(_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key).get(key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapCacheGet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVHZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVHZXQuanM/MTkxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUdldDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapCacheGet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapCacheHas.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_mapCacheHas.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../node_modules/lodash-es/_getMapData.js\");\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction mapCacheHas(key) {\n return Object(_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key).has(key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapCacheHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVIYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVIYXMuanM/YTJmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVIYXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapCacheHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapCacheSet.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_mapCacheSet.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../node_modules/lodash-es/_getMapData.js\");\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\nfunction mapCacheSet(key, value) {\n var data = Object(_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapCacheSet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanM/MTQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZVNldDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapCacheSet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_mapToArray.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_mapToArray.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (mapToArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwVG9BcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBUb0FycmF5LmpzPzY3NDIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwVG9BcnJheTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_mapToArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_matchesStrictComparable.js": -/*!*************************************************************!*\ - !*** ../node_modules/lodash-es/_matchesStrictComparable.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function (object) {\n if (object == null) {\n return false;\n }\n\n return object[key] === srcValue && (srcValue !== undefined || key in Object(object));\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (matchesStrictComparable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanM/ZjFmZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBT0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_matchesStrictComparable.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_memoizeCapped.js": -/*!***************************************************!*\ - !*** ../node_modules/lodash-es/_memoizeCapped.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _memoize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./memoize.js */ \"../node_modules/lodash-es/memoize.js\");\n\n/** Used as the maximum memoize cache size. */\n\nvar MAX_MEMOIZE_SIZE = 500;\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n\nfunction memoizeCapped(func) {\n var result = Object(_memoize_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n\n return key;\n });\n var cache = result.cache;\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (memoizeCapped);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWVtb2l6ZUNhcHBlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tZW1vaXplQ2FwcGVkLmpzPzE0ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplQ2FwcGVkO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_memoizeCapped.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_nativeCreate.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_nativeCreate.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../node_modules/lodash-es/_getNative.js\");\n\n/* Built-in method references that are verified to be native. */\n\nvar nativeCreate = Object(_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object, 'create');\n/* harmony default export */ __webpack_exports__[\"default\"] = (nativeCreate);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcz9hYjNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_nativeCreate.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_nativeKeys.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_nativeKeys.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_overArg.js */ \"../node_modules/lodash-es/_overArg.js\");\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeKeys = Object(_overArg_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object.keys, Object);\n/* harmony default export */ __webpack_exports__[\"default\"] = (nativeKeys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzPzI1ZDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_nativeKeys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_nativeKeysIn.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_nativeKeysIn.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (nativeKeysIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcz8xYjBhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_nativeKeysIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_nodeUtil.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_nodeUtil.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_freeGlobal.js */ \"../node_modules/lodash-es/_freeGlobal.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n/** Detect free variable `exports`. */\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && ( false ? undefined : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (nodeUtil);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/harmony-module.js */ \"../node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanM/Y2VjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgbm9kZVV0aWw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFUQTtBQURBO0FBQ0E7QUFhQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_nodeUtil.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_objectToString.js": -/*!****************************************************!*\ - !*** ../node_modules/lodash-es/_objectToString.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (objectToString);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanM/MmJjOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7QUFLQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_objectToString.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_overArg.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/_overArg.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (overArg);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzPzYyZjIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_overArg.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_parent.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/_parent.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../node_modules/lodash-es/_baseGet.js\");\n/* harmony import */ var _baseSlice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseSlice.js */ \"../node_modules/lodash-es/_baseSlice.js\");\n\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n\nfunction parent(object, path) {\n return path.length < 2 ? object : Object(_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, Object(_baseSlice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path, 0, -1));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (parent);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcGFyZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3BhcmVudC5qcz8zZjk5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcmVudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_parent.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_root.js": -/*!******************************************!*\ - !*** ../node_modules/lodash-es/_root.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_freeGlobal.js */ \"../node_modules/lodash-es/_freeGlobal.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n/** Detect free variable `self`. */\n\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] || freeSelf || Function('return this')();\n/* harmony default export */ __webpack_exports__[\"default\"] = (root);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzPzEwODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_root.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_setCacheAdd.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_setCacheAdd.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (setCacheAdd);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanM/Njg0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0Q2FjaGVBZGQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_setCacheAdd.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_setCacheHas.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_setCacheHas.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (setCacheHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVIYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVIYXMuanM/YzRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlSGFzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_setCacheHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_setToArray.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_setToArray.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (setToArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9BcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb0FycmF5LmpzP2FmNTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9BcnJheTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_setToArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stackClear.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/_stackClear.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../node_modules/lodash-es/_ListCache.js\");\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\nfunction stackClear() {\n this.__data__ = new _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n this.size = 0;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stackClear);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tDbGVhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0NsZWFyLmpzP2ZhZWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0NsZWFyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stackClear.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stackDelete.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/_stackDelete.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stackDelete);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tEZWxldGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tEZWxldGUuanM/ZTQxMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrRGVsZXRlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stackDelete.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stackGet.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_stackGet.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stackGet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tHZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tHZXQuanM/M2E1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrR2V0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stackGet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stackHas.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_stackHas.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stackHas);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanM/NzU2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0hhcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stackHas.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stackSet.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_stackSet.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Map.js */ \"../node_modules/lodash-es/_Map.js\");\n/* harmony import */ var _MapCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_MapCache.js */ \"../node_modules/lodash-es/_MapCache.js\");\n\n\n\n/** Used as the size to enable large array optimizations. */\n\nvar LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n var pairs = data.__data__;\n\n if (!_Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new _MapCache_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stackSet);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tTZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tTZXQuanM/ZmYyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stackSet.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_stringToPath.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/_stringToPath.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _memoizeCapped_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_memoizeCapped.js */ \"../node_modules/lodash-es/_memoizeCapped.js\");\n\n/** Used to match property names within property paths. */\n\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n/** Used to match backslashes in property paths. */\n\nvar reEscapeChar = /\\\\(\\\\)?/g;\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n\nvar stringToPath = Object(_memoizeCapped_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function (string) {\n var result = [];\n\n if (string.charCodeAt(0) === 46\n /* . */\n ) {\n result.push('');\n }\n\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (stringToPath);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nVG9QYXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcz9lNzBhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZW1vaXplQ2FwcGVkIGZyb20gJy4vX21lbW9pemVDYXBwZWQuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ1RvUGF0aDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFSQTtBQVdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_stringToPath.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_toKey.js": -/*!*******************************************!*\ - !*** ../node_modules/lodash-es/_toKey.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isSymbol.js */ \"../node_modules/lodash-es/isSymbol.js\");\n\n/** Used as references for various `Number` constants. */\n\nvar INFINITY = 1 / 0;\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n\nfunction toKey(value) {\n if (typeof value == 'string' || Object(_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return value;\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (toKey);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanM/YWRhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_toKey.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/_toSource.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/_toSource.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (toSource);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanM/Yjc4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU291cmNlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/_toSource.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/eq.js": -/*!***************************************!*\ - !*** ../node_modules/lodash-es/eq.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (eq);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzP2Q0ZGQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/eq.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/forIn.js": -/*!******************************************!*\ - !*** ../node_modules/lodash-es/forIn.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseFor.js */ \"../node_modules/lodash-es/_baseFor.js\");\n/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_castFunction.js */ \"../node_modules/lodash-es/_castFunction.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keysIn.js */ \"../node_modules/lodash-es/keysIn.js\");\n\n\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n\nfunction forIn(object, iteratee) {\n return object == null ? object : Object(_baseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, Object(_castFunction_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratee), _keysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (forIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JJbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZvckluLmpzPzg5MmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkE7QUFDQTtBQUdBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/forIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/get.js": -/*!****************************************!*\ - !*** ../node_modules/lodash-es/get.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../node_modules/lodash-es/_baseGet.js\");\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : Object(_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (get);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanM/MDAyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUdldCBmcm9tICcuL19iYXNlR2V0LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/get.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/hasIn.js": -/*!******************************************!*\ - !*** ../node_modules/lodash-es/hasIn.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseHasIn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseHasIn.js */ \"../node_modules/lodash-es/_baseHasIn.js\");\n/* harmony import */ var _hasPath_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_hasPath.js */ \"../node_modules/lodash-es/_hasPath.js\");\n\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n\nfunction hasIn(object, path) {\n return object != null && Object(_hasPath_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, path, _baseHasIn_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hasIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXNJbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2hhc0luLmpzPzQ1ZDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VIYXNJbiBmcm9tICcuL19iYXNlSGFzSW4uanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzSW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/hasIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/identity.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/identity.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (identity);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzPzAxYzMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/identity.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isArguments.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/isArguments.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsArguments.js */ \"../node_modules/lodash-es/_baseIsArguments.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\n\n\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\nvar isArguments = Object(_baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function () {\n return arguments;\n}()) ? _baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : function (value) {\n return Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (isArguments);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzPzAwMWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isArguments.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isArray.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/isArray.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n/* harmony default export */ __webpack_exports__[\"default\"] = (isArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcz80YmVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isArrayLike.js": -/*!************************************************!*\ - !*** ../node_modules/lodash-es/isArrayLike.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _isFunction_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isFunction.js */ \"../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isLength.js */ \"../node_modules/lodash-es/isLength.js\");\n\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\nfunction isArrayLike(value) {\n return value != null && Object(_isLength_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value.length) && !Object(_isFunction_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isArrayLike);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzPzcwYzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isArrayLike.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isBuffer.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/isBuffer.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../node_modules/lodash-es/_root.js\");\n/* harmony import */ var _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stubFalse.js */ \"../node_modules/lodash-es/stubFalse.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n/** Detect free variable `exports`. */\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && ( false ? undefined : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Buffer : undefined;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\nvar isBuffer = nativeIsBuffer || _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (isBuffer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/harmony-module.js */ \"../node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzPzI4MWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5pbXBvcnQgc3R1YkZhbHNlIGZyb20gJy4vc3R1YkZhbHNlLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCBpc0J1ZmZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isBuffer.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isEmpty.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/isEmpty.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseKeys.js */ \"../node_modules/lodash-es/_baseKeys.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getTag.js */ \"../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArguments.js */ \"../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isArray.js */ \"../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isArrayLike.js */ \"../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isBuffer.js */ \"../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_isPrototype.js */ \"../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./isTypedArray.js */ \"../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n\n/** `Object#toString` result references. */\n\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n\n if (Object(_isArrayLike_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value) && (Object(_isArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value) || typeof value == 'string' || typeof value.splice == 'function' || Object(_isBuffer_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value) || Object(_isTypedArray_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(value) || Object(_isArguments_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value))) {\n return !value.length;\n }\n\n var tag = Object(_getTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n\n if (Object(_isPrototype_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(value)) {\n return !Object(_baseKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value).length;\n }\n\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isEmpty);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VtcHR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFbXB0eS5qcz9mNTVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0VtcHR5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isEmpty.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isFunction.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash-es/isFunction.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObject.js */ \"../node_modules/lodash-es/isObject.js\");\n\n\n/** `Object#toString` result references. */\n\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\nfunction isFunction(value) {\n if (!Object(_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isFunction);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcz9hZTViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isFunction.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isLength.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/isLength.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isLength);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzPzBlNjUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isLength.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isObject.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/isObject.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return value != null && (type == 'object' || type == 'function');\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzPzdmMGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isObject.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isObjectLike.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/isObjectLike.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return value != null && _typeof(value) == 'object';\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isObjectLike);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanM/MTc4YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isObjectLike.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isPlainObject.js": -/*!**************************************************!*\ - !*** ../node_modules/lodash-es/isPlainObject.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getPrototype.js */ \"../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\n\nvar objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to infer the `Object` constructor. */\n\nvar objectCtorString = funcToString.call(Object);\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n\nfunction isPlainObject(value) {\n if (!Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) || Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) != objectTag) {\n return false;\n }\n\n var proto = Object(_getPrototype_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n\n if (proto === null) {\n return true;\n }\n\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isPlainObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcz9mOTcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isPlainObject.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isSymbol.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/isSymbol.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../node_modules/lodash-es/isObjectLike.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n/** `Object#toString` result references. */\n\nvar symbolTag = '[object Symbol]';\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\nfunction isSymbol(value) {\n return _typeof(value) == 'symbol' || Object(_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && Object(_baseGetTag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) == symbolTag;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isSymbol);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzPzc2OWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isSymbol.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/isTypedArray.js": -/*!*************************************************!*\ - !*** ../node_modules/lodash-es/isTypedArray.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseIsTypedArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsTypedArray.js */ \"../node_modules/lodash-es/_baseIsTypedArray.js\");\n/* harmony import */ var _baseUnary_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseUnary.js */ \"../node_modules/lodash-es/_baseUnary.js\");\n/* harmony import */ var _nodeUtil_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_nodeUtil.js */ \"../node_modules/lodash-es/_nodeUtil.js\");\n\n\n\n/* Node.js helper references. */\n\nvar nodeIsTypedArray = _nodeUtil_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] && _nodeUtil_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\nvar isTypedArray = nodeIsTypedArray ? Object(_baseUnary_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodeIsTypedArray) : _baseIsTypedArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (isTypedArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanM/YWEyMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/isTypedArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/keys.js": -/*!*****************************************!*\ - !*** ../node_modules/lodash-es/keys.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayLikeKeys.js */ \"../node_modules/lodash-es/_arrayLikeKeys.js\");\n/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseKeys.js */ \"../node_modules/lodash-es/_baseKeys.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArrayLike.js */ \"../node_modules/lodash-es/isArrayLike.js\");\n\n\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\nfunction keys(object) {\n return Object(_isArrayLike_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object) ? Object(_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object) : Object(_baseKeys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (keys);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcz8yOTkwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/keys.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/keysIn.js": -/*!*******************************************!*\ - !*** ../node_modules/lodash-es/keysIn.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayLikeKeys.js */ \"../node_modules/lodash-es/_arrayLikeKeys.js\");\n/* harmony import */ var _baseKeysIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseKeysIn.js */ \"../node_modules/lodash-es/_baseKeysIn.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArrayLike.js */ \"../node_modules/lodash-es/isArrayLike.js\");\n\n\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n\nfunction keysIn(object) {\n return Object(_isArrayLike_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object) ? Object(_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, true) : Object(_baseKeysIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (keysIn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanM/MTMyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/keysIn.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/last.js": -/*!*****************************************!*\ - !*** ../node_modules/lodash-es/last.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (last);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sYXN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbGFzdC5qcz8yNGQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/last.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/memoize.js": -/*!********************************************!*\ - !*** ../node_modules/lodash-es/memoize.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MapCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_MapCache.js */ \"../node_modules/lodash-es/_MapCache.js\");\n\n/** Error message constants. */\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n\n memoized.cache = new (memoize.Cache || _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n return memoized;\n} // Expose `MapCache`.\n\n\nmemoize.Cache = _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (memoize);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZW1vaXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVtb2l6ZS5qcz81OTJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXBDYWNoZSBmcm9tICcuL19NYXBDYWNoZS5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQVdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/memoize.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/pickBy.js": -/*!*******************************************!*\ - !*** ../node_modules/lodash-es/pickBy.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayMap.js */ \"../node_modules/lodash-es/_arrayMap.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _basePickBy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_basePickBy.js */ \"../node_modules/lodash-es/_basePickBy.js\");\n/* harmony import */ var _getAllKeysIn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_getAllKeysIn.js */ \"../node_modules/lodash-es/_getAllKeysIn.js\");\n\n\n\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n\n var props = Object(_arrayMap_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_getAllKeysIn_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object), function (prop) {\n return [prop];\n });\n predicate = Object(_baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(predicate);\n return Object(_basePickBy_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, props, function (value, path) {\n return predicate(value, path[0]);\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (pickBy);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9waWNrQnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9waWNrQnkuanM/MGVjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VQaWNrQnkgZnJvbSAnLi9fYmFzZVBpY2tCeS5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGBvYmplY3RgIHByb3BlcnRpZXMgYHByZWRpY2F0ZWAgcmV0dXJuc1xuICogdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICB2YXIgcHJvcHMgPSBhcnJheU1hcChnZXRBbGxLZXlzSW4ob2JqZWN0KSwgZnVuY3Rpb24ocHJvcCkge1xuICAgIHJldHVybiBbcHJvcF07XG4gIH0pO1xuICBwcmVkaWNhdGUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gcHJlZGljYXRlKHZhbHVlLCBwYXRoWzBdKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBpY2tCeTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/pickBy.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/property.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/property.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseProperty.js */ \"../node_modules/lodash-es/_baseProperty.js\");\n/* harmony import */ var _basePropertyDeep_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_basePropertyDeep.js */ \"../node_modules/lodash-es/_basePropertyDeep.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_isKey.js */ \"../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_toKey.js */ \"../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n\nfunction property(path) {\n return Object(_isKey_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path) ? Object(_baseProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_toKey_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(path)) : Object(_basePropertyDeep_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (property);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3Byb3BlcnR5LmpzP2VjNmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuaW1wb3J0IGJhc2VQcm9wZXJ0eURlZXAgZnJvbSAnLi9fYmFzZVByb3BlcnR5RGVlcC5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwcm9wZXJ0eTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/property.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/set.js": -/*!****************************************!*\ - !*** ../node_modules/lodash-es/set.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseSet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseSet.js */ \"../node_modules/lodash-es/_baseSet.js\");\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n\nfunction set(object, path, value) {\n return object == null ? object : Object(_baseSet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path, value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (set);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zZXQuanM/MzFmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAqIGBwYXRoYCBjcmVhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gKiAvLyA9PiA0XG4gKlxuICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICogLy8gPT4gNVxuICovXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/set.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/stubArray.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/stubArray.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stubArray);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViQXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViQXJyYXkuanM/MjhmMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViQXJyYXk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/stubArray.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/stubFalse.js": -/*!**********************************************!*\ - !*** ../node_modules/lodash-es/stubFalse.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stubFalse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanM/MjhiMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/stubFalse.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/toString.js": -/*!*********************************************!*\ - !*** ../node_modules/lodash-es/toString.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseToString.js */ \"../node_modules/lodash-es/_baseToString.js\");\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n\nfunction toString(value) {\n return value == null ? '' : Object(_baseToString_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (toString);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1N0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzP2JmNjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU3RyaW5nO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/toString.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash-es/unset.js": -/*!******************************************!*\ - !*** ../node_modules/lodash-es/unset.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _baseUnset_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseUnset.js */ \"../node_modules/lodash-es/_baseUnset.js\");\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n\nfunction unset(object, path) {\n return object == null ? true : Object(_baseUnset_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (unset);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bnNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3Vuc2V0LmpzP2ZjNzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VVbnNldCBmcm9tICcuL19iYXNlVW5zZXQuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gKiBfLnVuc2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gKlxuICogXy51bnNldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAqL1xuZnVuY3Rpb24gdW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHRydWUgOiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5zZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash-es/unset.js\n"); - -/***/ }), - -/***/ "../node_modules/lodash.toarray/index.js": -/*!***********************************************!*\ - !*** ../node_modules/lodash.toarray/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\n\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/** Used to compose unicode character classes. */\n\nvar rsAstralRange = \"\\\\ud800-\\\\udfff\",\n rsComboMarksRange = \"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23\",\n rsComboSymbolsRange = \"\\\\u20d0-\\\\u20f0\",\n rsVarRange = \"\\\\ufe0e\\\\ufe0f\";\n/** Used to compose unicode capture groups. */\n\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsFitz = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n rsSurrPair = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n rsZWJ = \"\\\\u200d\";\n/** Used to compose unicode regexes. */\n\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n}\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\nfunction asciiToArray(string) {\n return string.split('');\n}\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n\n\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n\n\nfunction baseValues(object, props) {\n return arrayMap(props, function (key) {\n return object[key];\n });\n}\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\n\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n\n\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\n\n\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n\n return result;\n}\n/**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\nfunction iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n\n return result;\n}\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n\n\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n\n\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n\n\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\nfunction stringToArray(string) {\n return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);\n}\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n/** Used for built-in method references. */\n\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to detect overreaching core-js shims. */\n\nvar coreJsData = root['__core-js_shared__'];\n/** Used to detect methods masquerading as native. */\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/** Used to resolve the decompiled source of functions. */\n\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/** Built-in value references. */\n\nvar _Symbol = root.Symbol,\n iteratorSymbol = _Symbol ? _Symbol.iterator : undefined,\n propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeKeys = overArg(Object.keys, Object);\n/* Built-in method references that are verified to be native. */\n\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n\n\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n array || (array = Array(length));\n\n while (++index < length) {\n array[index] = source[index];\n }\n\n return array;\n}\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\n\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\n\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\n\nvar isArray = Array.isArray;\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n\n\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\n\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && _typeof(value) == 'object';\n}\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n\n\nfunction isString(value) {\n return typeof value == 'string' || !isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag;\n}\n/**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n\n\nfunction toArray(value) {\n if (!value) {\n return [];\n }\n\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n\n if (iteratorSymbol && value[iteratorSymbol]) {\n return iteratorToArray(value[iteratorSymbol]());\n }\n\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;\n return func(value);\n}\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n\n\nfunction values(object) {\n return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = toArray;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC50b2FycmF5L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gudG9hcnJheS9pbmRleC5qcz85OTI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTIzJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZjAnLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib01hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlICsgJ10nLFxuICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbnZhciByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggW3N0cmluZyBzeW1ib2xzXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlKS4gKi9cbnZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QgaW4gSUUgPCA5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlKSB7XG4gIC8vIE1hbnkgaG9zdCBvYmplY3RzIGFyZSBgT2JqZWN0YCBvYmplY3RzIHRoYXQgY2FuIGNvZXJjZSB0byBzdHJpbmdzXG4gIC8vIGRlc3BpdGUgaGF2aW5nIGltcHJvcGVybHkgZGVmaW5lZCBgdG9TdHJpbmdgIG1ldGhvZHMuXG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gISEodmFsdWUgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBpdGVyYXRvcmAgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBpdGVyYXRvclRvQXJyYXkoaXRlcmF0b3IpIHtcbiAgdmFyIGRhdGEsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoIShkYXRhID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sLFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkLFxuICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxuICAgIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxuICAgIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXG4gICAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAvLyBTYWZhcmkgOC4xIG1ha2VzIGBhcmd1bWVudHMuY2FsbGVlYCBlbnVtZXJhYmxlIGluIHN0cmljdCBtb2RlLlxuICAvLyBTYWZhcmkgOSBtYWtlcyBgYXJndW1lbnRzLmxlbmd0aGAgZW51bWVyYWJsZSBpbiBzdHJpY3QgbW9kZS5cbiAgdmFyIHJlc3VsdCA9IChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpXG4gICAgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpXG4gICAgOiBbXTtcblxuICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCxcbiAgICAgIHNraXBJbmRleGVzID0gISFsZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoa2V5ID09ICdsZW5ndGgnIHx8IGlzSW5kZXgoa2V5LCBsZW5ndGgpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0hvc3RPYmplY3QodmFsdWUpKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExLFxuLy8gZm9yIGRhdGEgdmlld3MgaW4gRWRnZSA8IDE0LCBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcy5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgcmVJc1VpbnQudGVzdCh2YWx1ZSkpICYmXG4gICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIC8vIFNhZmFyaSA4LjEgbWFrZXMgYGFyZ3VtZW50cy5jYWxsZWVgIGVudW1lcmFibGUgaW4gc3RyaWN0IG1vZGUuXG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgKCFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgfHwgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJnc1RhZyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDgtOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gaXNPYmplY3QodmFsdWUpID8gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy50b0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICpcbiAqIF8udG9BcnJheSgxKTtcbiAqIC8vID0+IFtdXG4gKlxuICogXy50b0FycmF5KG51bGwpO1xuICogLy8gPT4gW11cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICB9XG4gIGlmIChpdGVyYXRvclN5bWJvbCAmJiB2YWx1ZVtpdGVyYXRvclN5bWJvbF0pIHtcbiAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW2l0ZXJhdG9yU3ltYm9sXSgpKTtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgcmV0dXJuIGZ1bmModmFsdWUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPyBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUVBOzs7OztBQUlBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBR0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUFBO0FBRUE7Ozs7OztBQUtBO0FBRUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBR0E7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQUE7QUFkQTtBQWdCQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBR0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBO0FBQ0E7QUFFQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/lodash.toarray/index.js\n"); - -/***/ }), - -/***/ "../node_modules/longest-streak/index.js": -/*!***********************************************!*\ - !*** ../node_modules/longest-streak/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = longestStreak; // Get the count of the longest repeating streak of `character` in `value`.\n\nfunction longestStreak(value, character) {\n var count = 0;\n var maximum = 0;\n var expected;\n var index;\n\n if (typeof character !== 'string' || character.length !== 1) {\n throw new Error('Expected character');\n }\n\n value = String(value);\n index = value.indexOf(character);\n expected = index;\n\n while (index !== -1) {\n count++;\n\n if (index === expected) {\n if (count > maximum) {\n maximum = count;\n }\n } else {\n count = 1;\n }\n\n expected = index + 1;\n index = value.indexOf(character, expected);\n }\n\n return maximum;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2xvbmdlc3Qtc3RyZWFrL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9sb25nZXN0LXN0cmVhay9pbmRleC5qcz8wYTJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvbmdlc3RTdHJlYWtcblxuLy8gR2V0IHRoZSBjb3VudCBvZiB0aGUgbG9uZ2VzdCByZXBlYXRpbmcgc3RyZWFrIG9mIGBjaGFyYWN0ZXJgIGluIGB2YWx1ZWAuXG5mdW5jdGlvbiBsb25nZXN0U3RyZWFrKHZhbHVlLCBjaGFyYWN0ZXIpIHtcbiAgdmFyIGNvdW50ID0gMFxuICB2YXIgbWF4aW11bSA9IDBcbiAgdmFyIGV4cGVjdGVkXG4gIHZhciBpbmRleFxuXG4gIGlmICh0eXBlb2YgY2hhcmFjdGVyICE9PSAnc3RyaW5nJyB8fCBjaGFyYWN0ZXIubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBjaGFyYWN0ZXInKVxuICB9XG5cbiAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIGluZGV4ID0gdmFsdWUuaW5kZXhPZihjaGFyYWN0ZXIpXG4gIGV4cGVjdGVkID0gaW5kZXhcblxuICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgY291bnQrK1xuXG4gICAgaWYgKGluZGV4ID09PSBleHBlY3RlZCkge1xuICAgICAgaWYgKGNvdW50ID4gbWF4aW11bSkge1xuICAgICAgICBtYXhpbXVtID0gY291bnRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAxXG4gICAgfVxuXG4gICAgZXhwZWN0ZWQgPSBpbmRleCArIDFcbiAgICBpbmRleCA9IHZhbHVlLmluZGV4T2YoY2hhcmFjdGVyLCBleHBlY3RlZClcbiAgfVxuXG4gIHJldHVybiBtYXhpbXVtXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/longest-streak/index.js\n"); - -/***/ }), - -/***/ "../node_modules/lz-string/libs/lz-string.js": -/*!***************************************************!*\ - !*** ../node_modules/lz-string/libs/lz-string.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = function () {\n // private property\n var f = String.fromCharCode;\n var keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\n var baseReverseDic = {};\n\n function getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n\n for (var i = 0; i < alphabet.length; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n\n return baseReverseDic[alphabet][character];\n }\n\n var LZString = {\n compressToBase64: function compressToBase64(input) {\n if (input == null) return \"\";\n\n var res = LZString._compress(input, 6, function (a) {\n return keyStrBase64.charAt(a);\n });\n\n switch (res.length % 4) {\n // To produce valid Base64\n default: // When could this happen ?\n\n case 0:\n return res;\n\n case 1:\n return res + \"===\";\n\n case 2:\n return res + \"==\";\n\n case 3:\n return res + \"=\";\n }\n },\n decompressFromBase64: function decompressFromBase64(input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function (index) {\n return getBaseValue(keyStrBase64, input.charAt(index));\n });\n },\n compressToUTF16: function compressToUTF16(input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function (a) {\n return f(a + 32);\n }) + \" \";\n },\n decompressFromUTF16: function decompressFromUTF16(compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function (index) {\n return compressed.charCodeAt(index) - 32;\n });\n },\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function compressToUint8Array(uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf = new Uint8Array(compressed.length * 2); // 2 bytes per character\n\n for (var i = 0, TotalLen = compressed.length; i < TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i * 2] = current_value >>> 8;\n buf[i * 2 + 1] = current_value % 256;\n }\n\n return buf;\n },\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array: function decompressFromUint8Array(compressed) {\n if (compressed === null || compressed === undefined) {\n return LZString.decompress(compressed);\n } else {\n var buf = new Array(compressed.length / 2); // 2 bytes per character\n\n for (var i = 0, TotalLen = buf.length; i < TotalLen; i++) {\n buf[i] = compressed[i * 2] * 256 + compressed[i * 2 + 1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n }\n },\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function compressToEncodedURIComponent(input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function (a) {\n return keyStrUriSafe.charAt(a);\n });\n },\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent: function decompressFromEncodedURIComponent(input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function (index) {\n return getBaseValue(keyStrUriSafe, input.charAt(index));\n });\n },\n compress: function compress(uncompressed) {\n return LZString._compress(uncompressed, 16, function (a) {\n return f(a);\n });\n },\n _compress: function _compress(uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i,\n value,\n context_dictionary = {},\n context_dictionaryToCreate = {},\n context_c = \"\",\n context_wc = \"\",\n context_w = \"\",\n context_enlargeIn = 2,\n // Compensate for the first entry which should not count\n context_dictSize = 3,\n context_numBits = 2,\n context_data = [],\n context_data_val = 0,\n context_data_position = 0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n\n if (!Object.prototype.hasOwnProperty.call(context_dictionary, context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n\n if (Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n\n value = context_w.charCodeAt(0);\n\n for (i = 0; i < 8; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n } else {\n value = 1;\n\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1 | value;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = 0;\n }\n\n value = context_w.charCodeAt(0);\n\n for (i = 0; i < 16; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n }\n\n context_enlargeIn--;\n\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n }\n\n context_enlargeIn--;\n\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n } // Add wc to the dictionary.\n\n\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n } // Output the code for w.\n\n\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n\n value = context_w.charCodeAt(0);\n\n for (i = 0; i < 8; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n } else {\n value = 1;\n\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1 | value;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = 0;\n }\n\n value = context_w.charCodeAt(0);\n\n for (i = 0; i < 16; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n }\n\n context_enlargeIn--;\n\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n }\n }\n\n context_enlargeIn--;\n\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n } // Mark the end of the stream\n\n\n value = 2;\n\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1 | value & 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n\n value = value >> 1;\n } // Flush the last char\n\n\n while (true) {\n context_data_val = context_data_val << 1;\n\n if (context_data_position == bitsPerChar - 1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n } else context_data_position++;\n }\n\n return context_data.join('');\n },\n decompress: function decompress(compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function (index) {\n return compressed.charCodeAt(index);\n });\n },\n _decompress: function _decompress(length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits,\n resb,\n maxpower,\n power,\n c,\n data = {\n val: getNextValue(0),\n position: resetValue,\n index: 1\n };\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2, 2);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2, 8);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n c = f(bits);\n break;\n\n case 1:\n bits = 0;\n maxpower = Math.pow(2, 16);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n c = f(bits);\n break;\n\n case 2:\n return \"\";\n }\n\n dictionary[3] = c;\n w = c;\n result.push(c);\n\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2, numBits);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2, 8);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize - 1;\n enlargeIn--;\n break;\n\n case 1:\n bits = 0;\n maxpower = Math.pow(2, 16);\n power = 1;\n\n while (power != maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n\n bits |= (resb > 0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize - 1;\n enlargeIn--;\n break;\n\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n\n result.push(entry); // Add w+entry[0] to the dictionary.\n\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n }\n }\n };\n return LZString;\n}();\n\nif (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return LZString;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL2x6LXN0cmluZy9saWJzL2x6LXN0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbHotc3RyaW5nL2xpYnMvbHotc3RyaW5nLmpzPzBmZTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDEzIFBpZXJveHkgPHBpZXJveHlAcGllcm94eS5uZXQ+XG4vLyBUaGlzIHdvcmsgaXMgZnJlZS4gWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBXVEZQTCwgVmVyc2lvbiAyXG4vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgTElDRU5TRS50eHQgb3IgaHR0cDovL3d3dy53dGZwbC5uZXQvXG4vL1xuLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHRoZSBob21lIHBhZ2U6XG4vLyBodHRwOi8vcGllcm94eS5uZXQvYmxvZy9wYWdlcy9sei1zdHJpbmcvdGVzdGluZy5odG1sXG4vL1xuLy8gTFotYmFzZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtLCB2ZXJzaW9uIDEuNC40XG52YXIgTFpTdHJpbmcgPSAoZnVuY3Rpb24oKSB7XG5cbi8vIHByaXZhdGUgcHJvcGVydHlcbnZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciBrZXlTdHJCYXNlNjQgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCI7XG52YXIga2V5U3RyVXJpU2FmZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLSRcIjtcbnZhciBiYXNlUmV2ZXJzZURpYyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRCYXNlVmFsdWUoYWxwaGFiZXQsIGNoYXJhY3Rlcikge1xuICBpZiAoIWJhc2VSZXZlcnNlRGljW2FscGhhYmV0XSkge1xuICAgIGJhc2VSZXZlcnNlRGljW2FscGhhYmV0XSA9IHt9O1xuICAgIGZvciAodmFyIGk9MCA7IGk8YWxwaGFiZXQubGVuZ3RoIDsgaSsrKSB7XG4gICAgICBiYXNlUmV2ZXJzZURpY1thbHBoYWJldF1bYWxwaGFiZXQuY2hhckF0KGkpXSA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlUmV2ZXJzZURpY1thbHBoYWJldF1bY2hhcmFjdGVyXTtcbn1cblxudmFyIExaU3RyaW5nID0ge1xuICBjb21wcmVzc1RvQmFzZTY0IDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09IG51bGwpIHJldHVybiBcIlwiO1xuICAgIHZhciByZXMgPSBMWlN0cmluZy5fY29tcHJlc3MoaW5wdXQsIDYsIGZ1bmN0aW9uKGEpe3JldHVybiBrZXlTdHJCYXNlNjQuY2hhckF0KGEpO30pO1xuICAgIHN3aXRjaCAocmVzLmxlbmd0aCAlIDQpIHsgLy8gVG8gcHJvZHVjZSB2YWxpZCBCYXNlNjRcbiAgICBkZWZhdWx0OiAvLyBXaGVuIGNvdWxkIHRoaXMgaGFwcGVuID9cbiAgICBjYXNlIDAgOiByZXR1cm4gcmVzO1xuICAgIGNhc2UgMSA6IHJldHVybiByZXMrXCI9PT1cIjtcbiAgICBjYXNlIDIgOiByZXR1cm4gcmVzK1wiPT1cIjtcbiAgICBjYXNlIDMgOiByZXR1cm4gcmVzK1wiPVwiO1xuICAgIH1cbiAgfSxcblxuICBkZWNvbXByZXNzRnJvbUJhc2U2NCA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIGlmIChpbnB1dCA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgICBpZiAoaW5wdXQgPT0gXCJcIikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIExaU3RyaW5nLl9kZWNvbXByZXNzKGlucHV0Lmxlbmd0aCwgMzIsIGZ1bmN0aW9uKGluZGV4KSB7IHJldHVybiBnZXRCYXNlVmFsdWUoa2V5U3RyQmFzZTY0LCBpbnB1dC5jaGFyQXQoaW5kZXgpKTsgfSk7XG4gIH0sXG5cbiAgY29tcHJlc3NUb1VURjE2IDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09IG51bGwpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBMWlN0cmluZy5fY29tcHJlc3MoaW5wdXQsIDE1LCBmdW5jdGlvbihhKXtyZXR1cm4gZihhKzMyKTt9KSArIFwiIFwiO1xuICB9LFxuXG4gIGRlY29tcHJlc3NGcm9tVVRGMTY6IGZ1bmN0aW9uIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNvbXByZXNzZWQgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gICAgaWYgKGNvbXByZXNzZWQgPT0gXCJcIikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIExaU3RyaW5nLl9kZWNvbXByZXNzKGNvbXByZXNzZWQubGVuZ3RoLCAxNjM4NCwgZnVuY3Rpb24oaW5kZXgpIHsgcmV0dXJuIGNvbXByZXNzZWQuY2hhckNvZGVBdChpbmRleCkgLSAzMjsgfSk7XG4gIH0sXG5cbiAgLy9jb21wcmVzcyBpbnRvIHVpbnQ4YXJyYXkgKFVDUy0yIGJpZyBlbmRpYW4gZm9ybWF0KVxuICBjb21wcmVzc1RvVWludDhBcnJheTogZnVuY3Rpb24gKHVuY29tcHJlc3NlZCkge1xuICAgIHZhciBjb21wcmVzc2VkID0gTFpTdHJpbmcuY29tcHJlc3ModW5jb21wcmVzc2VkKTtcbiAgICB2YXIgYnVmPW5ldyBVaW50OEFycmF5KGNvbXByZXNzZWQubGVuZ3RoKjIpOyAvLyAyIGJ5dGVzIHBlciBjaGFyYWN0ZXJcblxuICAgIGZvciAodmFyIGk9MCwgVG90YWxMZW49Y29tcHJlc3NlZC5sZW5ndGg7IGk8VG90YWxMZW47IGkrKykge1xuICAgICAgdmFyIGN1cnJlbnRfdmFsdWUgPSBjb21wcmVzc2VkLmNoYXJDb2RlQXQoaSk7XG4gICAgICBidWZbaSoyXSA9IGN1cnJlbnRfdmFsdWUgPj4+IDg7XG4gICAgICBidWZbaSoyKzFdID0gY3VycmVudF92YWx1ZSAlIDI1NjtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfSxcblxuICAvL2RlY29tcHJlc3MgZnJvbSB1aW50OGFycmF5IChVQ1MtMiBiaWcgZW5kaWFuIGZvcm1hdClcbiAgZGVjb21wcmVzc0Zyb21VaW50OEFycmF5OmZ1bmN0aW9uIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNvbXByZXNzZWQ9PT1udWxsIHx8IGNvbXByZXNzZWQ9PT11bmRlZmluZWQpe1xuICAgICAgICByZXR1cm4gTFpTdHJpbmcuZGVjb21wcmVzcyhjb21wcmVzc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYnVmPW5ldyBBcnJheShjb21wcmVzc2VkLmxlbmd0aC8yKTsgLy8gMiBieXRlcyBwZXIgY2hhcmFjdGVyXG4gICAgICAgIGZvciAodmFyIGk9MCwgVG90YWxMZW49YnVmLmxlbmd0aDsgaTxUb3RhbExlbjsgaSsrKSB7XG4gICAgICAgICAgYnVmW2ldPWNvbXByZXNzZWRbaSoyXSoyNTYrY29tcHJlc3NlZFtpKjIrMV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGJ1Zi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZihjKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTFpTdHJpbmcuZGVjb21wcmVzcyhyZXN1bHQuam9pbignJykpO1xuXG4gICAgfVxuXG4gIH0sXG5cblxuICAvL2NvbXByZXNzIGludG8gYSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IFVSSSBlbmNvZGVkXG4gIGNvbXByZXNzVG9FbmNvZGVkVVJJQ29tcG9uZW50OiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIExaU3RyaW5nLl9jb21wcmVzcyhpbnB1dCwgNiwgZnVuY3Rpb24oYSl7cmV0dXJuIGtleVN0clVyaVNhZmUuY2hhckF0KGEpO30pO1xuICB9LFxuXG4gIC8vZGVjb21wcmVzcyBmcm9tIGFuIG91dHB1dCBvZiBjb21wcmVzc1RvRW5jb2RlZFVSSUNvbXBvbmVudFxuICBkZWNvbXByZXNzRnJvbUVuY29kZWRVUklDb21wb25lbnQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09IG51bGwpIHJldHVybiBcIlwiO1xuICAgIGlmIChpbnB1dCA9PSBcIlwiKSByZXR1cm4gbnVsbDtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoLyAvZywgXCIrXCIpO1xuICAgIHJldHVybiBMWlN0cmluZy5fZGVjb21wcmVzcyhpbnB1dC5sZW5ndGgsIDMyLCBmdW5jdGlvbihpbmRleCkgeyByZXR1cm4gZ2V0QmFzZVZhbHVlKGtleVN0clVyaVNhZmUsIGlucHV0LmNoYXJBdChpbmRleCkpOyB9KTtcbiAgfSxcblxuICBjb21wcmVzczogZnVuY3Rpb24gKHVuY29tcHJlc3NlZCkge1xuICAgIHJldHVybiBMWlN0cmluZy5fY29tcHJlc3ModW5jb21wcmVzc2VkLCAxNiwgZnVuY3Rpb24oYSl7cmV0dXJuIGYoYSk7fSk7XG4gIH0sXG4gIF9jb21wcmVzczogZnVuY3Rpb24gKHVuY29tcHJlc3NlZCwgYml0c1BlckNoYXIsIGdldENoYXJGcm9tSW50KSB7XG4gICAgaWYgKHVuY29tcHJlc3NlZCA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgaSwgdmFsdWUsXG4gICAgICAgIGNvbnRleHRfZGljdGlvbmFyeT0ge30sXG4gICAgICAgIGNvbnRleHRfZGljdGlvbmFyeVRvQ3JlYXRlPSB7fSxcbiAgICAgICAgY29udGV4dF9jPVwiXCIsXG4gICAgICAgIGNvbnRleHRfd2M9XCJcIixcbiAgICAgICAgY29udGV4dF93PVwiXCIsXG4gICAgICAgIGNvbnRleHRfZW5sYXJnZUluPSAyLCAvLyBDb21wZW5zYXRlIGZvciB0aGUgZmlyc3QgZW50cnkgd2hpY2ggc2hvdWxkIG5vdCBjb3VudFxuICAgICAgICBjb250ZXh0X2RpY3RTaXplPSAzLFxuICAgICAgICBjb250ZXh0X251bUJpdHM9IDIsXG4gICAgICAgIGNvbnRleHRfZGF0YT1bXSxcbiAgICAgICAgY29udGV4dF9kYXRhX3ZhbD0wLFxuICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb249MCxcbiAgICAgICAgaWk7XG5cbiAgICBmb3IgKGlpID0gMDsgaWkgPCB1bmNvbXByZXNzZWQubGVuZ3RoOyBpaSArPSAxKSB7XG4gICAgICBjb250ZXh0X2MgPSB1bmNvbXByZXNzZWQuY2hhckF0KGlpKTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRleHRfZGljdGlvbmFyeSxjb250ZXh0X2MpKSB7XG4gICAgICAgIGNvbnRleHRfZGljdGlvbmFyeVtjb250ZXh0X2NdID0gY29udGV4dF9kaWN0U2l6ZSsrO1xuICAgICAgICBjb250ZXh0X2RpY3Rpb25hcnlUb0NyZWF0ZVtjb250ZXh0X2NdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dF93YyA9IGNvbnRleHRfdyArIGNvbnRleHRfYztcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGV4dF9kaWN0aW9uYXJ5LGNvbnRleHRfd2MpKSB7XG4gICAgICAgIGNvbnRleHRfdyA9IGNvbnRleHRfd2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRleHRfZGljdGlvbmFyeVRvQ3JlYXRlLGNvbnRleHRfdykpIHtcbiAgICAgICAgICBpZiAoY29udGV4dF93LmNoYXJDb2RlQXQoMCk8MjU2KSB7XG4gICAgICAgICAgICBmb3IgKGk9MCA7IGk8Y29udGV4dF9udW1CaXRzIDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAoY29udGV4dF9kYXRhX3ZhbCA8PCAxKTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9PSBiaXRzUGVyQ2hhci0xKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICBjb250ZXh0X2RhdGEucHVzaChnZXRDaGFyRnJvbUludChjb250ZXh0X2RhdGFfdmFsKSk7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3ZhbCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gY29udGV4dF93LmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBmb3IgKGk9MCA7IGk8OCA7IGkrKykge1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCAodmFsdWUmMSk7XG4gICAgICAgICAgICAgIGlmIChjb250ZXh0X2RhdGFfcG9zaXRpb24gPT0gYml0c1BlckNoYXItMSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhLnB1c2goZ2V0Q2hhckZyb21JbnQoY29udGV4dF9kYXRhX3ZhbCkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSAxO1xuICAgICAgICAgICAgZm9yIChpPTAgOyBpPGNvbnRleHRfbnVtQml0cyA7IGkrKykge1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCB2YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9PWJpdHNQZXJDaGFyLTEpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfZGF0YS5wdXNoKGdldENoYXJGcm9tSW50KGNvbnRleHRfZGF0YV92YWwpKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24rKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRleHRfdy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgZm9yIChpPTAgOyBpPDE2IDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAoY29udGV4dF9kYXRhX3ZhbCA8PCAxKSB8ICh2YWx1ZSYxKTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9PSBiaXRzUGVyQ2hhci0xKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICBjb250ZXh0X2RhdGEucHVzaChnZXRDaGFyRnJvbUludChjb250ZXh0X2RhdGFfdmFsKSk7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3ZhbCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0X2VubGFyZ2VJbi0tO1xuICAgICAgICAgIGlmIChjb250ZXh0X2VubGFyZ2VJbiA9PSAwKSB7XG4gICAgICAgICAgICBjb250ZXh0X2VubGFyZ2VJbiA9IE1hdGgucG93KDIsIGNvbnRleHRfbnVtQml0cyk7XG4gICAgICAgICAgICBjb250ZXh0X251bUJpdHMrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIGNvbnRleHRfZGljdGlvbmFyeVRvQ3JlYXRlW2NvbnRleHRfd107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBjb250ZXh0X2RpY3Rpb25hcnlbY29udGV4dF93XTtcbiAgICAgICAgICBmb3IgKGk9MCA7IGk8Y29udGV4dF9udW1CaXRzIDsgaSsrKSB7XG4gICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCAodmFsdWUmMSk7XG4gICAgICAgICAgICBpZiAoY29udGV4dF9kYXRhX3Bvc2l0aW9uID09IGJpdHNQZXJDaGFyLTEpIHtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhLnB1c2goZ2V0Q2hhckZyb21JbnQoY29udGV4dF9kYXRhX3ZhbCkpO1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiAxO1xuICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dF9lbmxhcmdlSW4tLTtcbiAgICAgICAgaWYgKGNvbnRleHRfZW5sYXJnZUluID09IDApIHtcbiAgICAgICAgICBjb250ZXh0X2VubGFyZ2VJbiA9IE1hdGgucG93KDIsIGNvbnRleHRfbnVtQml0cyk7XG4gICAgICAgICAgY29udGV4dF9udW1CaXRzKys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHdjIHRvIHRoZSBkaWN0aW9uYXJ5LlxuICAgICAgICBjb250ZXh0X2RpY3Rpb25hcnlbY29udGV4dF93Y10gPSBjb250ZXh0X2RpY3RTaXplKys7XG4gICAgICAgIGNvbnRleHRfdyA9IFN0cmluZyhjb250ZXh0X2MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE91dHB1dCB0aGUgY29kZSBmb3Igdy5cbiAgICBpZiAoY29udGV4dF93ICE9PSBcIlwiKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRleHRfZGljdGlvbmFyeVRvQ3JlYXRlLGNvbnRleHRfdykpIHtcbiAgICAgICAgaWYgKGNvbnRleHRfdy5jaGFyQ29kZUF0KDApPDI1Nikge1xuICAgICAgICAgIGZvciAoaT0wIDsgaTxjb250ZXh0X251bUJpdHMgOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAoY29udGV4dF9kYXRhX3ZhbCA8PCAxKTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0X2RhdGFfcG9zaXRpb24gPT0gYml0c1BlckNoYXItMSkge1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGEucHVzaChnZXRDaGFyRnJvbUludChjb250ZXh0X2RhdGFfdmFsKSk7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gY29udGV4dF93LmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgZm9yIChpPTAgOyBpPDggOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAoY29udGV4dF9kYXRhX3ZhbCA8PCAxKSB8ICh2YWx1ZSYxKTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0X2RhdGFfcG9zaXRpb24gPT0gYml0c1BlckNoYXItMSkge1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGEucHVzaChnZXRDaGFyRnJvbUludChjb250ZXh0X2RhdGFfdmFsKSk7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gMTtcbiAgICAgICAgICBmb3IgKGk9MCA7IGk8Y29udGV4dF9udW1CaXRzIDsgaSsrKSB7XG4gICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0X2RhdGFfcG9zaXRpb24gPT0gYml0c1BlckNoYXItMSkge1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGEucHVzaChnZXRDaGFyRnJvbUludChjb250ZXh0X2RhdGFfdmFsKSk7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV92YWwgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gY29udGV4dF93LmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgZm9yIChpPTAgOyBpPDE2IDsgaSsrKSB7XG4gICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCAodmFsdWUmMSk7XG4gICAgICAgICAgICBpZiAoY29udGV4dF9kYXRhX3Bvc2l0aW9uID09IGJpdHNQZXJDaGFyLTEpIHtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgY29udGV4dF9kYXRhLnB1c2goZ2V0Q2hhckZyb21JbnQoY29udGV4dF9kYXRhX3ZhbCkpO1xuICAgICAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0X2VubGFyZ2VJbi0tO1xuICAgICAgICBpZiAoY29udGV4dF9lbmxhcmdlSW4gPT0gMCkge1xuICAgICAgICAgIGNvbnRleHRfZW5sYXJnZUluID0gTWF0aC5wb3coMiwgY29udGV4dF9udW1CaXRzKTtcbiAgICAgICAgICBjb250ZXh0X251bUJpdHMrKztcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgY29udGV4dF9kaWN0aW9uYXJ5VG9DcmVhdGVbY29udGV4dF93XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gY29udGV4dF9kaWN0aW9uYXJ5W2NvbnRleHRfd107XG4gICAgICAgIGZvciAoaT0wIDsgaTxjb250ZXh0X251bUJpdHMgOyBpKyspIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCAodmFsdWUmMSk7XG4gICAgICAgICAgaWYgKGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9PSBiaXRzUGVyQ2hhci0xKSB7XG4gICAgICAgICAgICBjb250ZXh0X2RhdGFfcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgY29udGV4dF9kYXRhLnB1c2goZ2V0Q2hhckZyb21JbnQoY29udGV4dF9kYXRhX3ZhbCkpO1xuICAgICAgICAgICAgY29udGV4dF9kYXRhX3ZhbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+IDE7XG4gICAgICAgIH1cblxuXG4gICAgICB9XG4gICAgICBjb250ZXh0X2VubGFyZ2VJbi0tO1xuICAgICAgaWYgKGNvbnRleHRfZW5sYXJnZUluID09IDApIHtcbiAgICAgICAgY29udGV4dF9lbmxhcmdlSW4gPSBNYXRoLnBvdygyLCBjb250ZXh0X251bUJpdHMpO1xuICAgICAgICBjb250ZXh0X251bUJpdHMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIHN0cmVhbVxuICAgIHZhbHVlID0gMjtcbiAgICBmb3IgKGk9MCA7IGk8Y29udGV4dF9udW1CaXRzIDsgaSsrKSB7XG4gICAgICBjb250ZXh0X2RhdGFfdmFsID0gKGNvbnRleHRfZGF0YV92YWwgPDwgMSkgfCAodmFsdWUmMSk7XG4gICAgICBpZiAoY29udGV4dF9kYXRhX3Bvc2l0aW9uID09IGJpdHNQZXJDaGFyLTEpIHtcbiAgICAgICAgY29udGV4dF9kYXRhX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgY29udGV4dF9kYXRhLnB1c2goZ2V0Q2hhckZyb21JbnQoY29udGV4dF9kYXRhX3ZhbCkpO1xuICAgICAgICBjb250ZXh0X2RhdGFfdmFsID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB2YWx1ZSA+PiAxO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIHRoZSBsYXN0IGNoYXJcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29udGV4dF9kYXRhX3ZhbCA9IChjb250ZXh0X2RhdGFfdmFsIDw8IDEpO1xuICAgICAgaWYgKGNvbnRleHRfZGF0YV9wb3NpdGlvbiA9PSBiaXRzUGVyQ2hhci0xKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YS5wdXNoKGdldENoYXJGcm9tSW50KGNvbnRleHRfZGF0YV92YWwpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlbHNlIGNvbnRleHRfZGF0YV9wb3NpdGlvbisrO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dF9kYXRhLmpvaW4oJycpO1xuICB9LFxuXG4gIGRlY29tcHJlc3M6IGZ1bmN0aW9uIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNvbXByZXNzZWQgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gICAgaWYgKGNvbXByZXNzZWQgPT0gXCJcIikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIExaU3RyaW5nLl9kZWNvbXByZXNzKGNvbXByZXNzZWQubGVuZ3RoLCAzMjc2OCwgZnVuY3Rpb24oaW5kZXgpIHsgcmV0dXJuIGNvbXByZXNzZWQuY2hhckNvZGVBdChpbmRleCk7IH0pO1xuICB9LFxuXG4gIF9kZWNvbXByZXNzOiBmdW5jdGlvbiAobGVuZ3RoLCByZXNldFZhbHVlLCBnZXROZXh0VmFsdWUpIHtcbiAgICB2YXIgZGljdGlvbmFyeSA9IFtdLFxuICAgICAgICBuZXh0LFxuICAgICAgICBlbmxhcmdlSW4gPSA0LFxuICAgICAgICBkaWN0U2l6ZSA9IDQsXG4gICAgICAgIG51bUJpdHMgPSAzLFxuICAgICAgICBlbnRyeSA9IFwiXCIsXG4gICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICBpLFxuICAgICAgICB3LFxuICAgICAgICBiaXRzLCByZXNiLCBtYXhwb3dlciwgcG93ZXIsXG4gICAgICAgIGMsXG4gICAgICAgIGRhdGEgPSB7dmFsOmdldE5leHRWYWx1ZSgwKSwgcG9zaXRpb246cmVzZXRWYWx1ZSwgaW5kZXg6MX07XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBkaWN0aW9uYXJ5W2ldID0gaTtcbiAgICB9XG5cbiAgICBiaXRzID0gMDtcbiAgICBtYXhwb3dlciA9IE1hdGgucG93KDIsMik7XG4gICAgcG93ZXI9MTtcbiAgICB3aGlsZSAocG93ZXIhPW1heHBvd2VyKSB7XG4gICAgICByZXNiID0gZGF0YS52YWwgJiBkYXRhLnBvc2l0aW9uO1xuICAgICAgZGF0YS5wb3NpdGlvbiA+Pj0gMTtcbiAgICAgIGlmIChkYXRhLnBvc2l0aW9uID09IDApIHtcbiAgICAgICAgZGF0YS5wb3NpdGlvbiA9IHJlc2V0VmFsdWU7XG4gICAgICAgIGRhdGEudmFsID0gZ2V0TmV4dFZhbHVlKGRhdGEuaW5kZXgrKyk7XG4gICAgICB9XG4gICAgICBiaXRzIHw9IChyZXNiPjAgPyAxIDogMCkgKiBwb3dlcjtcbiAgICAgIHBvd2VyIDw8PSAxO1xuICAgIH1cblxuICAgIHN3aXRjaCAobmV4dCA9IGJpdHMpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICBtYXhwb3dlciA9IE1hdGgucG93KDIsOCk7XG4gICAgICAgICAgcG93ZXI9MTtcbiAgICAgICAgICB3aGlsZSAocG93ZXIhPW1heHBvd2VyKSB7XG4gICAgICAgICAgICByZXNiID0gZGF0YS52YWwgJiBkYXRhLnBvc2l0aW9uO1xuICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA+Pj0gMTtcbiAgICAgICAgICAgIGlmIChkYXRhLnBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA9IHJlc2V0VmFsdWU7XG4gICAgICAgICAgICAgIGRhdGEudmFsID0gZ2V0TmV4dFZhbHVlKGRhdGEuaW5kZXgrKyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaXRzIHw9IChyZXNiPjAgPyAxIDogMCkgKiBwb3dlcjtcbiAgICAgICAgICAgIHBvd2VyIDw8PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgYyA9IGYoYml0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIG1heHBvd2VyID0gTWF0aC5wb3coMiwxNik7XG4gICAgICAgICAgcG93ZXI9MTtcbiAgICAgICAgICB3aGlsZSAocG93ZXIhPW1heHBvd2VyKSB7XG4gICAgICAgICAgICByZXNiID0gZGF0YS52YWwgJiBkYXRhLnBvc2l0aW9uO1xuICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA+Pj0gMTtcbiAgICAgICAgICAgIGlmIChkYXRhLnBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA9IHJlc2V0VmFsdWU7XG4gICAgICAgICAgICAgIGRhdGEudmFsID0gZ2V0TmV4dFZhbHVlKGRhdGEuaW5kZXgrKyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaXRzIHw9IChyZXNiPjAgPyAxIDogMCkgKiBwb3dlcjtcbiAgICAgICAgICAgIHBvd2VyIDw8PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgYyA9IGYoYml0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZGljdGlvbmFyeVszXSA9IGM7XG4gICAgdyA9IGM7XG4gICAgcmVzdWx0LnB1c2goYyk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChkYXRhLmluZGV4ID4gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBiaXRzID0gMDtcbiAgICAgIG1heHBvd2VyID0gTWF0aC5wb3coMixudW1CaXRzKTtcbiAgICAgIHBvd2VyPTE7XG4gICAgICB3aGlsZSAocG93ZXIhPW1heHBvd2VyKSB7XG4gICAgICAgIHJlc2IgPSBkYXRhLnZhbCAmIGRhdGEucG9zaXRpb247XG4gICAgICAgIGRhdGEucG9zaXRpb24gPj49IDE7XG4gICAgICAgIGlmIChkYXRhLnBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uID0gcmVzZXRWYWx1ZTtcbiAgICAgICAgICBkYXRhLnZhbCA9IGdldE5leHRWYWx1ZShkYXRhLmluZGV4KyspO1xuICAgICAgICB9XG4gICAgICAgIGJpdHMgfD0gKHJlc2I+MCA/IDEgOiAwKSAqIHBvd2VyO1xuICAgICAgICBwb3dlciA8PD0gMTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjID0gYml0cykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgbWF4cG93ZXIgPSBNYXRoLnBvdygyLDgpO1xuICAgICAgICAgIHBvd2VyPTE7XG4gICAgICAgICAgd2hpbGUgKHBvd2VyIT1tYXhwb3dlcikge1xuICAgICAgICAgICAgcmVzYiA9IGRhdGEudmFsICYgZGF0YS5wb3NpdGlvbjtcbiAgICAgICAgICAgIGRhdGEucG9zaXRpb24gPj49IDE7XG4gICAgICAgICAgICBpZiAoZGF0YS5wb3NpdGlvbiA9PSAwKSB7XG4gICAgICAgICAgICAgIGRhdGEucG9zaXRpb24gPSByZXNldFZhbHVlO1xuICAgICAgICAgICAgICBkYXRhLnZhbCA9IGdldE5leHRWYWx1ZShkYXRhLmluZGV4KyspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYml0cyB8PSAocmVzYj4wID8gMSA6IDApICogcG93ZXI7XG4gICAgICAgICAgICBwb3dlciA8PD0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWN0aW9uYXJ5W2RpY3RTaXplKytdID0gZihiaXRzKTtcbiAgICAgICAgICBjID0gZGljdFNpemUtMTtcbiAgICAgICAgICBlbmxhcmdlSW4tLTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIG1heHBvd2VyID0gTWF0aC5wb3coMiwxNik7XG4gICAgICAgICAgcG93ZXI9MTtcbiAgICAgICAgICB3aGlsZSAocG93ZXIhPW1heHBvd2VyKSB7XG4gICAgICAgICAgICByZXNiID0gZGF0YS52YWwgJiBkYXRhLnBvc2l0aW9uO1xuICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA+Pj0gMTtcbiAgICAgICAgICAgIGlmIChkYXRhLnBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICAgICAgZGF0YS5wb3NpdGlvbiA9IHJlc2V0VmFsdWU7XG4gICAgICAgICAgICAgIGRhdGEudmFsID0gZ2V0TmV4dFZhbHVlKGRhdGEuaW5kZXgrKyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaXRzIHw9IChyZXNiPjAgPyAxIDogMCkgKiBwb3dlcjtcbiAgICAgICAgICAgIHBvd2VyIDw8PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkaWN0aW9uYXJ5W2RpY3RTaXplKytdID0gZihiaXRzKTtcbiAgICAgICAgICBjID0gZGljdFNpemUtMTtcbiAgICAgICAgICBlbmxhcmdlSW4tLTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmxhcmdlSW4gPT0gMCkge1xuICAgICAgICBlbmxhcmdlSW4gPSBNYXRoLnBvdygyLCBudW1CaXRzKTtcbiAgICAgICAgbnVtQml0cysrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGljdGlvbmFyeVtjXSkge1xuICAgICAgICBlbnRyeSA9IGRpY3Rpb25hcnlbY107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYyA9PT0gZGljdFNpemUpIHtcbiAgICAgICAgICBlbnRyeSA9IHcgKyB3LmNoYXJBdCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuXG4gICAgICAvLyBBZGQgdytlbnRyeVswXSB0byB0aGUgZGljdGlvbmFyeS5cbiAgICAgIGRpY3Rpb25hcnlbZGljdFNpemUrK10gPSB3ICsgZW50cnkuY2hhckF0KDApO1xuICAgICAgZW5sYXJnZUluLS07XG5cbiAgICAgIHcgPSBlbnRyeTtcblxuICAgICAgaWYgKGVubGFyZ2VJbiA9PSAwKSB7XG4gICAgICAgIGVubGFyZ2VJbiA9IE1hdGgucG93KDIsIG51bUJpdHMpO1xuICAgICAgICBudW1CaXRzKys7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cbn07XG4gIHJldHVybiBMWlN0cmluZztcbn0pKCk7XG5cbmlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIExaU3RyaW5nOyB9KTtcbn0gZWxzZSBpZiggdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlICE9IG51bGwgKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gTFpTdHJpbmdcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFKQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWhCQTtBQW1CQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBckJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQTNCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF4Q0E7QUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQTNEQTtBQWdFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFuRUE7QUFzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQTNFQTtBQThFQTtBQUNBO0FBQUE7QUFBQTtBQS9FQTtBQWlGQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF0QkE7QUF3QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXZEQTtBQXlEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQTVFQTtBQUNBO0FBQ0E7QUE2RUE7QUFDQTtBQUNBO0FBM0dBO0FBQ0E7QUFDQTtBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF0QkE7QUF3QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXZEQTtBQXlEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBNUxBO0FBQ0E7QUFDQTtBQThMQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBMU1BO0FBQ0E7QUFDQTtBQTRNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQXZTQTtBQTBTQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUE3U0E7QUFnVEE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBbENBO0FBQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBdkNBO0FBQ0E7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBaGRBO0FBa2RBO0FBcGVBO0FBQ0E7QUFzZUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/lz-string/libs/lz-string.js\n"); - -/***/ }), - -/***/ "../node_modules/m3u8-parser/dist/m3u8-parser.es.js": -/*!**********************************************************!*\ - !*** ../node_modules/m3u8-parser/dist/m3u8-parser.es.js ***! - \**********************************************************/ -/*! exports provided: LineStream, ParseStream, Parser */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LineStream\", function() { return LineStream; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ParseStream\", function() { return ParseStream; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Parser\", function() { return Parser; });\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! global/window */ \"../node_modules/global/window.js\");\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(global_window__WEBPACK_IMPORTED_MODULE_0__);\n/*! @name m3u8-parser @version 4.4.0 @license Apache-2.0 */\n\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implementation that handles event dispatching.\n *\n * @class Stream\n */\n\n\nvar Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n var _proto = Stream.prototype;\n\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */\n ;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */\n ;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n var i;\n var length;\n var args;\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n length = callbacks.length;\n\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = Array.prototype.slice.call(arguments, 1);\n length = callbacks.length;\n\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */\n ;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n ;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\n\n\nvar LineStream = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(LineStream, _Stream);\n\n function LineStream() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.buffer = '';\n return _this;\n }\n /**\n * Add new data to be parsed.\n *\n * @param {string} data the text to process\n */\n\n\n var _proto = LineStream.prototype;\n\n _proto.push = function push(data) {\n var nextNewline;\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n };\n\n return LineStream;\n}(Stream);\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\n\n\nvar attributeSeparator = function attributeSeparator() {\n var key = '[^=]*';\n var value = '\"[^\"]*\"|[^,]*';\n var keyvalue = '(?:' + key + ')=(?:' + value + ')';\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n/**\n * Parse attributes from a line given the separator\n *\n * @param {string} attributes the attribute line to parse\n */\n\n\nvar parseAttributes = function parseAttributes(attributes) {\n // split the string using attributes as the separator\n var attrs = attributes.split(attributeSeparator());\n var result = {};\n var i = attrs.length;\n var attr;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n } // split the key and value\n\n\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); // trim whitespace and remove optional quotes around the value\n\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n\n return result;\n};\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\n\nvar ParseStream = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(ParseStream, _Stream);\n\n function ParseStream() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.customParsers = [];\n _this.tagMappers = [];\n return _this;\n }\n /**\n * Parses an additional line of input.\n *\n * @param {string} line a single line of an M3U8 file to parse\n */\n\n\n var _proto = ParseStream.prototype;\n\n _proto.push = function push(line) {\n var _this2 = this;\n\n var match;\n var event; // strip whitespace\n\n line = line.trim();\n\n if (line.length === 0) {\n // ignore empty lines\n return;\n } // URIs\n\n\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n } // map tags\n\n\n var newLines = this.tagMappers.reduce(function (acc, mapper) {\n var mappedLine = mapper(line); // skip if unchanged\n\n if (mappedLine === line) {\n return acc;\n }\n\n return acc.concat([mappedLine]);\n }, [line]);\n newLines.forEach(function (newLine) {\n for (var i = 0; i < _this2.customParsers.length; i++) {\n if (_this2.customParsers[i].call(_this2, newLine)) {\n return;\n }\n } // Comments\n\n\n if (newLine.indexOf('#EXT') !== 0) {\n _this2.trigger('data', {\n type: 'comment',\n text: newLine.slice(1)\n });\n\n return;\n } // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n\n\n newLine = newLine.replace('\\r', ''); // Tags\n\n match = /^#EXTM3U/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n\n return;\n }\n\n match = /^#EXTINF:?([0-9\\.]*)?,?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n\n if (match[2]) {\n event.title = match[2];\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'totalduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MEDIA-SEQUENCE:?(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n\n if (match[1]) {\n event.playlistType = match[1];\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'byterange'\n };\n\n if (match[1]) {\n event.length = parseInt(match[1], 10);\n }\n\n if (match[2]) {\n event.offset = parseInt(match[2], 10);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MAP:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n var attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n\n if (attributes.BYTERANGE) {\n var _attributes$BYTERANGE = attributes.BYTERANGE.split('@'),\n length = _attributes$BYTERANGE[0],\n offset = _attributes$BYTERANGE[1];\n\n event.byterange = {};\n\n if (length) {\n event.byterange.length = parseInt(length, 10);\n }\n\n if (offset) {\n event.byterange.offset = parseInt(offset, 10);\n }\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n var split = event.attributes.RESOLUTION.split('x');\n var resolution = {};\n\n if (split[0]) {\n resolution.width = parseInt(split[0], 10);\n }\n\n if (split[1]) {\n resolution.height = parseInt(split[1], 10);\n }\n\n event.attributes.RESOLUTION = resolution;\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-MEDIA:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-ENDLIST/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY/.exec(newLine);\n\n if (match) {\n _this2.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n\n return;\n }\n\n match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-KEY:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]); // parse the IV string into a Uint32Array\n\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-START:?(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'start'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']);\n event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n }\n\n match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n _this2.trigger('data', event);\n\n return;\n } // unknown tag type\n\n\n _this2.trigger('data', {\n type: 'tag',\n data: newLine.slice(4)\n });\n });\n }\n /**\n * Add a parser for custom headers\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n ;\n\n _proto.addParser = function addParser(_ref) {\n var _this3 = this;\n\n var expression = _ref.expression,\n customType = _ref.customType,\n dataParser = _ref.dataParser,\n segment = _ref.segment;\n\n if (typeof dataParser !== 'function') {\n dataParser = function dataParser(line) {\n return line;\n };\n }\n\n this.customParsers.push(function (line) {\n var match = expression.exec(line);\n\n if (match) {\n _this3.trigger('data', {\n type: 'custom',\n data: dataParser(line),\n customType: customType,\n segment: segment\n });\n\n return true;\n }\n });\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n ;\n\n _proto.addTagMapper = function addTagMapper(_ref2) {\n var expression = _ref2.expression,\n map = _ref2.map;\n\n var mapFn = function mapFn(line) {\n if (expression.test(line)) {\n return map(line);\n }\n\n return line;\n };\n\n this.tagMappers.push(mapFn);\n };\n\n return ParseStream;\n}(Stream);\n\nfunction decodeB64ToUint8Array(b64Text) {\n var decodedString = global_window__WEBPACK_IMPORTED_MODULE_0___default.a.atob(b64Text || '');\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @extends Stream\n */\n\n\nvar Parser = /*#__PURE__*/function (_Stream) {\n _inheritsLoose(Parser, _Stream);\n\n function Parser() {\n var _this;\n\n _this = _Stream.call(this) || this;\n _this.lineStream = new LineStream();\n _this.parseStream = new ParseStream();\n\n _this.lineStream.pipe(_this.parseStream);\n /* eslint-disable consistent-this */\n\n\n var self = _assertThisInitialized(_this);\n /* eslint-enable consistent-this */\n\n\n var uris = [];\n var currentUri = {}; // if specified, the active EXT-X-MAP definition\n\n var currentMap; // if specified, the active decryption key\n\n var _key;\n\n var noop = function noop() {};\n\n var defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n }; // This is the Widevine UUID from DASH IF IOP. The same exact string is\n // used in MPDs with Widevine encrypted streams.\n\n var widevineUuid = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; // group segments into numbered timelines delineated by discontinuities\n\n var currentTimeline = 0; // the manifest is empty until the parse stream begins delivering data\n\n _this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n segments: []\n }; // update the manifest with the m3u8 entry from the parse stream\n\n _this.parseStream.on('data', function (entry) {\n var mediaGroup;\n var rendition;\n ({\n tag: function tag() {\n // switch based on the tag type\n (({\n 'allow-cache': function allowCache() {\n this.manifest.allowCache = entry.allowed;\n\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n byterange: function byterange() {\n var byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n this.trigger('info', {\n message: 'defaulting offset to zero'\n });\n entry.offset = 0;\n }\n }\n\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n },\n endlist: function endlist() {\n this.manifest.endList = true;\n },\n inf: function inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n key: function key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n } // clear the active encryption key\n\n\n if (entry.attributes.METHOD === 'NONE') {\n _key = null;\n return;\n }\n\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n } // check if the content is encrypted for Widevine\n // Widevine/HLS spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_HLS.pdf\n\n\n if (entry.attributes.KEYFORMAT === widevineUuid) {\n var VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'];\n\n if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {\n this.trigger('warn', {\n message: 'invalid key method provided for Widevine'\n });\n return;\n }\n\n if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') {\n this.trigger('warn', {\n message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'\n });\n }\n\n if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') {\n this.trigger('warn', {\n message: 'invalid key URI provided for Widevine'\n });\n return;\n }\n\n if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === '0x')) {\n this.trigger('warn', {\n message: 'invalid key ID provided for Widevine'\n });\n return;\n } // if Widevine key attributes are valid, store them as `contentProtection`\n // on the manifest to emulate Widevine tag structure in a DASH mpd\n\n\n this.manifest.contentProtection = {\n 'com.widevine.alpha': {\n attributes: {\n schemeIdUri: entry.attributes.KEYFORMAT,\n // remove '0x' from the key id string\n keyId: entry.attributes.KEYID.substring(2)\n },\n // decode the base64-encoded PSSH box\n pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1])\n }\n };\n return;\n }\n\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n } // setup an encryption key for upcoming segments\n\n\n _key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n _key.iv = entry.attributes.IV;\n }\n },\n 'media-sequence': function mediaSequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.mediaSequence = entry.number;\n },\n 'discontinuity-sequence': function discontinuitySequence() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n 'playlist-type': function playlistType() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n\n this.manifest.playlistType = entry.playlistType;\n },\n map: function map() {\n currentMap = {};\n\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n },\n 'stream-inf': function streamInf() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n\n _extends(currentUri.attributes, entry.attributes);\n },\n media: function media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n } // find the media group, creating defaults as necessary\n\n\n var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; // collect the rendition metadata\n\n rendition = {\n \"default\": /yes/i.test(entry.attributes.DEFAULT)\n };\n\n if (rendition[\"default\"]) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n } // insert the new rendition\n\n\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n discontinuity: function discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n 'program-date-time': function programDateTime() {\n if (typeof this.manifest.dateTimeString === 'undefined') {\n // PROGRAM-DATE-TIME is a media-segment tag, but for backwards\n // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag\n // to the manifest object\n // TODO: Consider removing this in future major version\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n }\n\n currentUri.dateTimeString = entry.dateTimeString;\n currentUri.dateTimeObject = entry.dateTimeObject;\n },\n targetduration: function targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.targetDuration = entry.duration;\n },\n totalduration: function totalduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid total duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.totalDuration = entry.duration;\n },\n start: function start() {\n if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) {\n this.trigger('warn', {\n message: 'ignoring start declaration without appropriate attribute list'\n });\n return;\n }\n\n this.manifest.start = {\n timeOffset: entry.attributes['TIME-OFFSET'],\n precise: entry.attributes.PRECISE\n };\n },\n 'cue-out': function cueOut() {\n currentUri.cueOut = entry.data;\n },\n 'cue-out-cont': function cueOutCont() {\n currentUri.cueOutCont = entry.data;\n },\n 'cue-in': function cueIn() {\n currentUri.cueIn = entry.data;\n }\n })[entry.tagType] || noop).call(self);\n },\n uri: function uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri); // if no explicit duration was declared, use the target duration\n\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n } // annotate with encryption information, if necessary\n\n\n if (_key) {\n currentUri.key = _key;\n }\n\n currentUri.timeline = currentTimeline; // annotate with initialization segment information, if necessary\n\n if (currentMap) {\n currentUri.map = currentMap;\n } // prepare for the next URI\n\n\n currentUri = {};\n },\n comment: function comment() {// comments are not important for playback\n },\n custom: function custom() {\n // if this is segment-level data attach the output to the segment\n if (entry.segment) {\n currentUri.custom = currentUri.custom || {};\n currentUri.custom[entry.customType] = entry.data; // if this is manifest-level data attach to the top level manifest object\n } else {\n this.manifest.custom = this.manifest.custom || {};\n this.manifest.custom[entry.customType] = entry.data;\n }\n }\n })[entry.type].call(self);\n });\n\n return _this;\n }\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {string} chunk a potentially incomplete portion of the manifest\n */\n\n\n var _proto = Parser.prototype;\n\n _proto.push = function push(chunk) {\n this.lineStream.push(chunk);\n }\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n ;\n\n _proto.end = function end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n }\n /**\n * Add an additional parser for non-standard tags\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.type the type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n ;\n\n _proto.addParser = function addParser(options) {\n this.parseStream.addParser(options);\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n ;\n\n _proto.addTagMapper = function addTagMapper(options) {\n this.parseStream.addTagMapper(options);\n };\n\n return Parser;\n}(Stream);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL20zdTgtcGFyc2VyL2Rpc3QvbTN1OC1wYXJzZXIuZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL20zdTgtcGFyc2VyL2Rpc3QvbTN1OC1wYXJzZXIuZXMuanM/MmM3YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgQG5hbWUgbTN1OC1wYXJzZXIgQHZlcnNpb24gNC40LjAgQGxpY2Vuc2UgQXBhY2hlLTIuMCAqL1xuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBmaWxlIHN0cmVhbS5qc1xuICovXG5cbi8qKlxuICogQSBsaWdodHdlaWdodCByZWFkYWJsZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gdGhhdCBoYW5kbGVzIGV2ZW50IGRpc3BhdGNoaW5nLlxuICpcbiAqIEBjbGFzcyBTdHJlYW1cbiAqL1xudmFyIFN0cmVhbSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0cmVhbSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIGV2ZW50IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgdGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhbiBldmVudCBvZlxuICAgKiB0aGUgc3BlY2lmaWVkIHR5cGUgb2NjdXJzXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFN0cmVhbS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc1t0eXBlXSA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIGV2ZW50IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgIGEgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIGZvciB0aGlzXG4gICAqIHR5cGUgb2YgZXZlbnQgdGhyb3VnaCBgb25gXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IGlmIHdlIGNvdWxkIHR1cm4gaXQgb2ZmIG9yIG5vdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbiBvZmYodHlwZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5saXN0ZW5lcnNbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgfVxuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgb24gdGhpcyBzdHJlYW0uIEFueSBhZGRpdGlvbmFsXG4gICAqIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBldmVudCBuYW1lXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRyaWdnZXIgPSBmdW5jdGlvbiB0cmlnZ2VyKHR5cGUpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnNbdHlwZV07XG4gICAgdmFyIGk7XG4gICAgdmFyIGxlbmd0aDtcbiAgICB2YXIgYXJncztcblxuICAgIGlmICghY2FsbGJhY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTbGljaW5nIHRoZSBhcmd1bWVudHMgb24gZXZlcnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZFxuICAgIC8vIGNhbiBhZGQgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygb3ZlcmhlYWQuIEF2b2lkIHRoZVxuICAgIC8vIGludGVybWVkaWF0ZSBvYmplY3QgY3JlYXRpb24gZm9yIHRoZSBjb21tb24gY2FzZSBvZiBhXG4gICAgLy8gc2luZ2xlIGNhbGxiYWNrIGFyZ3VtZW50XG5cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICBsZW5ndGggPSBjYWxsYmFja3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICBsZW5ndGggPSBjYWxsYmFja3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHN0cmVhbSBhbmQgY2xlYW5zIHVwLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKiBGb3J3YXJkcyBhbGwgYGRhdGFgIGV2ZW50cyBvbiB0aGlzIHN0cmVhbSB0byB0aGUgZGVzdGluYXRpb24gc3RyZWFtLiBUaGVcbiAgICogZGVzdGluYXRpb24gc3RyZWFtIHNob3VsZCBwcm92aWRlIGEgbWV0aG9kIGBwdXNoYCB0byByZWNlaXZlIHRoZSBkYXRhXG4gICAqIGV2ZW50cyBhcyB0aGV5IGFycml2ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJlYW19IGRlc3RpbmF0aW9uIHRoZSBzdHJlYW0gdGhhdCB3aWxsIHJlY2VpdmUgYWxsIGBkYXRhYCBldmVudHNcbiAgICogQHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvc3RyZWFtLmh0bWwjc3RyZWFtX3JlYWRhYmxlX3BpcGVfZGVzdGluYXRpb25fb3B0aW9uc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5waXBlID0gZnVuY3Rpb24gcGlwZShkZXN0aW5hdGlvbikge1xuICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgZGVzdGluYXRpb24ucHVzaChkYXRhKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU3RyZWFtO1xufSgpO1xuXG4vKipcbiAqIEEgc3RyZWFtIHRoYXQgYnVmZmVycyBzdHJpbmcgaW5wdXQgYW5kIGdlbmVyYXRlcyBhIGBkYXRhYCBldmVudCBmb3IgZWFjaFxuICogbGluZS5cbiAqXG4gKiBAY2xhc3MgTGluZVN0cmVhbVxuICogQGV4dGVuZHMgU3RyZWFtXG4gKi9cblxudmFyIExpbmVTdHJlYW0gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9TdHJlYW0pIHtcbiAgX2luaGVyaXRzTG9vc2UoTGluZVN0cmVhbSwgX1N0cmVhbSk7XG5cbiAgZnVuY3Rpb24gTGluZVN0cmVhbSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdHJlYW0uY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmJ1ZmZlciA9ICcnO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkIG5ldyBkYXRhIHRvIGJlIHBhcnNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgdGhlIHRleHQgdG8gcHJvY2Vzc1xuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBMaW5lU3RyZWFtLnByb3RvdHlwZTtcblxuICBfcHJvdG8ucHVzaCA9IGZ1bmN0aW9uIHB1c2goZGF0YSkge1xuICAgIHZhciBuZXh0TmV3bGluZTtcbiAgICB0aGlzLmJ1ZmZlciArPSBkYXRhO1xuICAgIG5leHROZXdsaW5lID0gdGhpcy5idWZmZXIuaW5kZXhPZignXFxuJyk7XG5cbiAgICBmb3IgKDsgbmV4dE5ld2xpbmUgPiAtMTsgbmV4dE5ld2xpbmUgPSB0aGlzLmJ1ZmZlci5pbmRleE9mKCdcXG4nKSkge1xuICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgdGhpcy5idWZmZXIuc3Vic3RyaW5nKDAsIG5leHROZXdsaW5lKSk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YnN0cmluZyhuZXh0TmV3bGluZSArIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTGluZVN0cmVhbTtcbn0oU3RyZWFtKTtcblxuLyoqXG4gKiBcImZvcmdpdmluZ1wiIGF0dHJpYnV0ZSBsaXN0IHBzdWVkby1ncmFtbWFyOlxuICogYXR0cmlidXRlcyAtPiBrZXl2YWx1ZSAoJywnIGtleXZhbHVlKSpcbiAqIGtleXZhbHVlICAgLT4ga2V5ICc9JyB2YWx1ZVxuICoga2V5ICAgICAgICAtPiBbXj1dKlxuICogdmFsdWUgICAgICAtPiAnXCInIFteXCJdKiAnXCInIHwgW14sXSpcbiAqL1xuXG52YXIgYXR0cmlidXRlU2VwYXJhdG9yID0gZnVuY3Rpb24gYXR0cmlidXRlU2VwYXJhdG9yKCkge1xuICB2YXIga2V5ID0gJ1tePV0qJztcbiAgdmFyIHZhbHVlID0gJ1wiW15cIl0qXCJ8W14sXSonO1xuICB2YXIga2V5dmFsdWUgPSAnKD86JyArIGtleSArICcpPSg/OicgKyB2YWx1ZSArICcpJztcbiAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol58LCkoJyArIGtleXZhbHVlICsgJyknKTtcbn07XG4vKipcbiAqIFBhcnNlIGF0dHJpYnV0ZXMgZnJvbSBhIGxpbmUgZ2l2ZW4gdGhlIHNlcGFyYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVzIHRoZSBhdHRyaWJ1dGUgbGluZSB0byBwYXJzZVxuICovXG5cblxudmFyIHBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gIC8vIHNwbGl0IHRoZSBzdHJpbmcgdXNpbmcgYXR0cmlidXRlcyBhcyB0aGUgc2VwYXJhdG9yXG4gIHZhciBhdHRycyA9IGF0dHJpYnV0ZXMuc3BsaXQoYXR0cmlidXRlU2VwYXJhdG9yKCkpO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBpID0gYXR0cnMubGVuZ3RoO1xuICB2YXIgYXR0cjtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgLy8gZmlsdGVyIG91dCB1bm1hdGNoZWQgcG9ydGlvbnMgb2YgdGhlIHN0cmluZ1xuICAgIGlmIChhdHRyc1tpXSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gc3BsaXQgdGhlIGtleSBhbmQgdmFsdWVcblxuXG4gICAgYXR0ciA9IC8oW149XSopPSguKikvLmV4ZWMoYXR0cnNbaV0pLnNsaWNlKDEpOyAvLyB0cmltIHdoaXRlc3BhY2UgYW5kIHJlbW92ZSBvcHRpb25hbCBxdW90ZXMgYXJvdW5kIHRoZSB2YWx1ZVxuXG4gICAgYXR0clswXSA9IGF0dHJbMF0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuICAgIGF0dHJbMV0gPSBhdHRyWzFdLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICBhdHRyWzFdID0gYXR0clsxXS5yZXBsYWNlKC9eWydcIl0oLiopWydcIl0kL2csICckMScpO1xuICAgIHJlc3VsdFthdHRyWzBdXSA9IGF0dHJbMV07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogQSBsaW5lLWxldmVsIE0zVTggcGFyc2VyIGV2ZW50IHN0cmVhbS4gSXQgZXhwZWN0cyB0byByZWNlaXZlIGlucHV0IG9uZVxuICogbGluZSBhdCBhIHRpbWUgYW5kIHBlcmZvcm1zIGEgY29udGV4dC1mcmVlIHBhcnNlIG9mIGl0cyBjb250ZW50cy4gQSBzdHJlYW1cbiAqIGludGVycHJldGF0aW9uIG9mIGEgbWFuaWZlc3QgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgbWFuaWZlc3QgaXMgZXhwZWN0ZWQgdG9cbiAqIGJlIHRvbyBsYXJnZSB0byBmaXQgY29tZm9ydGFibHkgaW50byBtZW1vcnkgb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBpbnB1dFxuICogaXMgbm90IGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IG11Y2ggZWFzaWVyIHRvIHdvcmtcbiAqIHdpdGggYSByZWd1bGFyIGBQYXJzZXJgIG9iamVjdC5cbiAqXG4gKiBQcm9kdWNlcyBgZGF0YWAgZXZlbnRzIHdpdGggYW4gb2JqZWN0IHRoYXQgY2FwdHVyZXMgdGhlIHBhcnNlcidzXG4gKiBpbnRlcnByZXRhdGlvbiBvZiB0aGUgaW5wdXQuIFRoYXQgb2JqZWN0IGhhcyBhIHByb3BlcnR5IGB0YWdgIHRoYXQgaXMgb25lXG4gKiBvZiBgdXJpYCwgYGNvbW1lbnRgLCBvciBgdGFnYC4gVVJJcyBvbmx5IGhhdmUgYSBzaW5nbGUgYWRkaXRpb25hbFxuICogcHJvcGVydHksIGBsaW5lYCwgd2hpY2ggY2FwdHVyZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBpbnB1dCB3aXRob3V0XG4gKiBpbnRlcnByZXRhdGlvbi4gQ29tbWVudHMgc2ltaWxhcmx5IGhhdmUgYSBzaW5nbGUgYWRkaXRpb25hbCBwcm9wZXJ0eVxuICogYHRleHRgIHdoaWNoIGlzIHRoZSBpbnB1dCB3aXRob3V0IHRoZSBsZWFkaW5nIGAjYC5cbiAqXG4gKiBUYWdzIGFsd2F5cyBoYXZlIGEgcHJvcGVydHkgYHRhZ1R5cGVgIHdoaWNoIGlzIHRoZSBsb3dlci1jYXNlZCB2ZXJzaW9uIG9mXG4gKiB0aGUgTTNVOCBkaXJlY3RpdmUgd2l0aG91dCB0aGUgYCNFWFRgIG9yIGAjRVhULVgtYCBwcmVmaXguIEZvciBpbnN0YW5jZSxcbiAqIGAjRVhULVgtTUVESUEtU0VRVUVOQ0VgIGJlY29tZXMgYG1lZGlhLXNlcXVlbmNlYCB3aGVuIHBhcnNlZC4gVW5yZWNvZ25pemVkXG4gKiB0YWdzIGFyZSBnaXZlbiB0aGUgdGFnIHR5cGUgYHVua25vd25gIGFuZCBhIHNpbmdsZSBhZGRpdGlvbmFsIHByb3BlcnR5XG4gKiBgZGF0YWAgd2l0aCB0aGUgcmVtYWluZGVyIG9mIHRoZSBpbnB1dC5cbiAqXG4gKiBAY2xhc3MgUGFyc2VTdHJlYW1cbiAqIEBleHRlbmRzIFN0cmVhbVxuICovXG5cblxudmFyIFBhcnNlU3RyZWFtID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfU3RyZWFtKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBhcnNlU3RyZWFtLCBfU3RyZWFtKTtcblxuICBmdW5jdGlvbiBQYXJzZVN0cmVhbSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdHJlYW0uY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmN1c3RvbVBhcnNlcnMgPSBbXTtcbiAgICBfdGhpcy50YWdNYXBwZXJzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gYWRkaXRpb25hbCBsaW5lIG9mIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGluZSBhIHNpbmdsZSBsaW5lIG9mIGFuIE0zVTggZmlsZSB0byBwYXJzZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQYXJzZVN0cmVhbS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnB1c2ggPSBmdW5jdGlvbiBwdXNoKGxpbmUpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgZXZlbnQ7IC8vIHN0cmlwIHdoaXRlc3BhY2VcblxuICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcblxuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gaWdub3JlIGVtcHR5IGxpbmVzXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBVUklzXG5cblxuICAgIGlmIChsaW5lWzBdICE9PSAnIycpIHtcbiAgICAgIHRoaXMudHJpZ2dlcignZGF0YScsIHtcbiAgICAgICAgdHlwZTogJ3VyaScsXG4gICAgICAgIHVyaTogbGluZVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBtYXAgdGFnc1xuXG5cbiAgICB2YXIgbmV3TGluZXMgPSB0aGlzLnRhZ01hcHBlcnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG1hcHBlcikge1xuICAgICAgdmFyIG1hcHBlZExpbmUgPSBtYXBwZXIobGluZSk7IC8vIHNraXAgaWYgdW5jaGFuZ2VkXG5cbiAgICAgIGlmIChtYXBwZWRMaW5lID09PSBsaW5lKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2MuY29uY2F0KFttYXBwZWRMaW5lXSk7XG4gICAgfSwgW2xpbmVdKTtcbiAgICBuZXdMaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChuZXdMaW5lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzMi5jdXN0b21QYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChfdGhpczIuY3VzdG9tUGFyc2Vyc1tpXS5jYWxsKF90aGlzMiwgbmV3TGluZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ29tbWVudHNcblxuXG4gICAgICBpZiAobmV3TGluZS5pbmRleE9mKCcjRVhUJykgIT09IDApIHtcbiAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ2RhdGEnLCB7XG4gICAgICAgICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgICAgICAgIHRleHQ6IG5ld0xpbmUuc2xpY2UoMSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBzdHJpcCBvZmYgYW55IGNhcnJpYWdlIHJldHVybnMgaGVyZSBzbyB0aGUgcmVnZXggbWF0Y2hpbmdcbiAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB0byBhY2NvdW50IGZvciB0aGVtLlxuXG5cbiAgICAgIG5ld0xpbmUgPSBuZXdMaW5lLnJlcGxhY2UoJ1xccicsICcnKTsgLy8gVGFnc1xuXG4gICAgICBtYXRjaCA9IC9eI0VYVE0zVS8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdtM3UnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFRJTkY6PyhbMC05XFwuXSopPyw/KC4qKT8kLy5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ2luZidcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC5kdXJhdGlvbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgZXZlbnQudGl0bGUgPSBtYXRjaFsyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1UQVJHRVREVVJBVElPTjo/KFswLTkuXSopPy8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICd0YXJnZXRkdXJhdGlvbidcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC5kdXJhdGlvbiA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jWkVOLVRPVEFMLURVUkFUSU9OOj8oWzAtOS5dKik/Ly5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ3RvdGFsZHVyYXRpb24nXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ2RhdGEnLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaCA9IC9eI0VYVC1YLVZFUlNJT046PyhbMC05Ll0qKT8vLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAndmVyc2lvbidcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC52ZXJzaW9uID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1NRURJQS1TRVFVRU5DRTo/KFxcLT9bMC05Ll0qKT8vLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAnbWVkaWEtc2VxdWVuY2UnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQubnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1ESVNDT05USU5VSVRZLVNFUVVFTkNFOj8oXFwtP1swLTkuXSopPy8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdkaXNjb250aW51aXR5LXNlcXVlbmNlJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgICAgIGV2ZW50Lm51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtUExBWUxJU1QtVFlQRTo/KC4qKT8kLy5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ3BsYXlsaXN0LXR5cGUnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQucGxheWxpc3RUeXBlID0gbWF0Y2hbMV07XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtQllURVJBTkdFOj8oWzAtOS5dKik/QD8oWzAtOS5dKik/Ly5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ2J5dGVyYW5nZSdcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC5sZW5ndGggPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgZXZlbnQub2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1BTExPVy1DQUNIRTo/KFlFU3xOTyk/Ly5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ2FsbG93LWNhY2hlJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgICAgIGV2ZW50LmFsbG93ZWQgPSAhL05PLy50ZXN0KG1hdGNoWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1NQVA6PyguKikkLy5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ21hcCdcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhtYXRjaFsxXSk7XG5cbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5VUkkpIHtcbiAgICAgICAgICAgIGV2ZW50LnVyaSA9IGF0dHJpYnV0ZXMuVVJJO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLkJZVEVSQU5HRSkge1xuICAgICAgICAgICAgdmFyIF9hdHRyaWJ1dGVzJEJZVEVSQU5HRSA9IGF0dHJpYnV0ZXMuQllURVJBTkdFLnNwbGl0KCdAJyksXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2F0dHJpYnV0ZXMkQllURVJBTkdFWzBdLFxuICAgICAgICAgICAgICAgIG9mZnNldCA9IF9hdHRyaWJ1dGVzJEJZVEVSQU5HRVsxXTtcblxuICAgICAgICAgICAgZXZlbnQuYnl0ZXJhbmdlID0ge307XG5cbiAgICAgICAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZXZlbnQuYnl0ZXJhbmdlLmxlbmd0aCA9IHBhcnNlSW50KGxlbmd0aCwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2Zmc2V0KSB7XG4gICAgICAgICAgICAgIGV2ZW50LmJ5dGVyYW5nZS5vZmZzZXQgPSBwYXJzZUludChvZmZzZXQsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtU1RSRUFNLUlORjo/KC4qKSQvLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAnc3RyZWFtLWluZidcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzID0gcGFyc2VBdHRyaWJ1dGVzKG1hdGNoWzFdKTtcblxuICAgICAgICAgIGlmIChldmVudC5hdHRyaWJ1dGVzLlJFU09MVVRJT04pIHtcbiAgICAgICAgICAgIHZhciBzcGxpdCA9IGV2ZW50LmF0dHJpYnV0ZXMuUkVTT0xVVElPTi5zcGxpdCgneCcpO1xuICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSB7fTtcblxuICAgICAgICAgICAgaWYgKHNwbGl0WzBdKSB7XG4gICAgICAgICAgICAgIHJlc29sdXRpb24ud2lkdGggPSBwYXJzZUludChzcGxpdFswXSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3BsaXRbMV0pIHtcbiAgICAgICAgICAgICAgcmVzb2x1dGlvbi5oZWlnaHQgPSBwYXJzZUludChzcGxpdFsxXSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLlJFU09MVVRJT04gPSByZXNvbHV0aW9uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5hdHRyaWJ1dGVzLkJBTkRXSURUSCkge1xuICAgICAgICAgICAgZXZlbnQuYXR0cmlidXRlcy5CQU5EV0lEVEggPSBwYXJzZUludChldmVudC5hdHRyaWJ1dGVzLkJBTkRXSURUSCwgMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5hdHRyaWJ1dGVzWydQUk9HUkFNLUlEJ10pIHtcbiAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXNbJ1BST0dSQU0tSUQnXSA9IHBhcnNlSW50KGV2ZW50LmF0dHJpYnV0ZXNbJ1BST0dSQU0tSUQnXSwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1NRURJQTo/KC4qKSQvLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAnbWVkaWEnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQuYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtRU5ETElTVC8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdlbmRsaXN0J1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtRElTQ09OVElOVUlUWS8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdkaXNjb250aW51aXR5J1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtUFJPR1JBTS1EQVRFLVRJTUU6PyguKikkLy5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ3Byb2dyYW0tZGF0ZS10aW1lJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgICAgIGV2ZW50LmRhdGVUaW1lU3RyaW5nID0gbWF0Y2hbMV07XG4gICAgICAgICAgZXZlbnQuZGF0ZVRpbWVPYmplY3QgPSBuZXcgRGF0ZShtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtS0VZOj8oLiopJC8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdrZXknXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQuYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhtYXRjaFsxXSk7IC8vIHBhcnNlIHRoZSBJViBzdHJpbmcgaW50byBhIFVpbnQzMkFycmF5XG5cbiAgICAgICAgICBpZiAoZXZlbnQuYXR0cmlidXRlcy5JVikge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmF0dHJpYnV0ZXMuSVYuc3Vic3RyaW5nKDAsIDIpLnRvTG93ZXJDYXNlKCkgPT09ICcweCcpIHtcbiAgICAgICAgICAgICAgZXZlbnQuYXR0cmlidXRlcy5JViA9IGV2ZW50LmF0dHJpYnV0ZXMuSVYuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLklWID0gZXZlbnQuYXR0cmlidXRlcy5JVi5tYXRjaCgvLns4fS9nKTtcbiAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXMuSVZbMF0gPSBwYXJzZUludChldmVudC5hdHRyaWJ1dGVzLklWWzBdLCAxNik7XG4gICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLklWWzFdID0gcGFyc2VJbnQoZXZlbnQuYXR0cmlidXRlcy5JVlsxXSwgMTYpO1xuICAgICAgICAgICAgZXZlbnQuYXR0cmlidXRlcy5JVlsyXSA9IHBhcnNlSW50KGV2ZW50LmF0dHJpYnV0ZXMuSVZbMl0sIDE2KTtcbiAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXMuSVZbM10gPSBwYXJzZUludChldmVudC5hdHRyaWJ1dGVzLklWWzNdLCAxNik7XG4gICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLklWID0gbmV3IFVpbnQzMkFycmF5KGV2ZW50LmF0dHJpYnV0ZXMuSVYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi50cmlnZ2VyKCdkYXRhJywgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSAvXiNFWFQtWC1TVEFSVDo/KC4qKSQvLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAnc3RhcnQnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgZXZlbnQuYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhtYXRjaFsxXSk7XG4gICAgICAgICAgZXZlbnQuYXR0cmlidXRlc1snVElNRS1PRkZTRVQnXSA9IHBhcnNlRmxvYXQoZXZlbnQuYXR0cmlidXRlc1snVElNRS1PRkZTRVQnXSk7XG4gICAgICAgICAgZXZlbnQuYXR0cmlidXRlcy5QUkVDSVNFID0gL1lFUy8udGVzdChldmVudC5hdHRyaWJ1dGVzLlBSRUNJU0UpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ2RhdGEnLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaCA9IC9eI0VYVC1YLUNVRS1PVVQtQ09OVDo/KC4qKT8kLy5leGVjKG5ld0xpbmUpO1xuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgICAgdGFnVHlwZTogJ2N1ZS1vdXQtY29udCdcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICBldmVudC5kYXRhID0gbWF0Y2hbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQuZGF0YSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ2RhdGEnLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaCA9IC9eI0VYVC1YLUNVRS1PVVQ6PyguKik/JC8uZXhlYyhuZXdMaW5lKTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgIHRhZ1R5cGU6ICdjdWUtb3V0J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgICAgIGV2ZW50LmRhdGEgPSBtYXRjaFsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC5kYXRhID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoID0gL14jRVhULVgtQ1VFLUlOOj8oLiopPyQvLmV4ZWMobmV3TGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiAndGFnJyxcbiAgICAgICAgICB0YWdUeXBlOiAnY3VlLWluJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgICAgIGV2ZW50LmRhdGEgPSBtYXRjaFsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC5kYXRhID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHVua25vd24gdGFnIHR5cGVcblxuXG4gICAgICBfdGhpczIudHJpZ2dlcignZGF0YScsIHtcbiAgICAgICAgdHlwZTogJ3RhZycsXG4gICAgICAgIGRhdGE6IG5ld0xpbmUuc2xpY2UoNClcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwYXJzZXIgZm9yIGN1c3RvbSBoZWFkZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMgICAgICAgICAgICAgIGEgbWFwIG9mIG9wdGlvbnMgZm9yIHRoZSBhZGRlZCBwYXJzZXJcbiAgICogQHBhcmFtIHtSZWdFeHB9ICAgb3B0aW9ucy5leHByZXNzaW9uICAgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGN1c3RvbSBoZWFkZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgb3B0aW9ucy5jdXN0b21UeXBlICAgdGhlIGN1c3RvbSB0eXBlIHRvIHJlZ2lzdGVyIHRvIHRoZSBvdXRwdXRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZGF0YVBhcnNlcl0gZnVuY3Rpb24gdG8gcGFyc2UgdGhlIGxpbmUgaW50byBhbiBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMuc2VnbWVudF0gICAgc2hvdWxkIHRhZyBkYXRhIGJlIGF0dGFjaGVkIHRvIHRoZSBzZWdtZW50IG9iamVjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRQYXJzZXIgPSBmdW5jdGlvbiBhZGRQYXJzZXIoX3JlZikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBfcmVmLmV4cHJlc3Npb24sXG4gICAgICAgIGN1c3RvbVR5cGUgPSBfcmVmLmN1c3RvbVR5cGUsXG4gICAgICAgIGRhdGFQYXJzZXIgPSBfcmVmLmRhdGFQYXJzZXIsXG4gICAgICAgIHNlZ21lbnQgPSBfcmVmLnNlZ21lbnQ7XG5cbiAgICBpZiAodHlwZW9mIGRhdGFQYXJzZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRhdGFQYXJzZXIgPSBmdW5jdGlvbiBkYXRhUGFyc2VyKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY3VzdG9tUGFyc2Vycy5wdXNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBleHByZXNzaW9uLmV4ZWMobGluZSk7XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBfdGhpczMudHJpZ2dlcignZGF0YScsIHtcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICBkYXRhOiBkYXRhUGFyc2VyKGxpbmUpLFxuICAgICAgICAgIGN1c3RvbVR5cGU6IGN1c3RvbVR5cGUsXG4gICAgICAgICAgc2VnbWVudDogc2VnbWVudFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGhlYWRlciBtYXBwZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1JlZ0V4cH0gICBvcHRpb25zLmV4cHJlc3Npb24gICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgY3VzdG9tIGhlYWRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLm1hcCAgICAgICAgICBmdW5jdGlvbiB0byB0cmFuc2xhdGUgdGFnIGludG8gYSBkaWZmZXJlbnQgdGFnXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFkZFRhZ01hcHBlciA9IGZ1bmN0aW9uIGFkZFRhZ01hcHBlcihfcmVmMikge1xuICAgIHZhciBleHByZXNzaW9uID0gX3JlZjIuZXhwcmVzc2lvbixcbiAgICAgICAgbWFwID0gX3JlZjIubWFwO1xuXG4gICAgdmFyIG1hcEZuID0gZnVuY3Rpb24gbWFwRm4obGluZSkge1xuICAgICAgaWYgKGV4cHJlc3Npb24udGVzdChsaW5lKSkge1xuICAgICAgICByZXR1cm4gbWFwKGxpbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9O1xuXG4gICAgdGhpcy50YWdNYXBwZXJzLnB1c2gobWFwRm4pO1xuICB9O1xuXG4gIHJldHVybiBQYXJzZVN0cmVhbTtcbn0oU3RyZWFtKTtcblxuZnVuY3Rpb24gZGVjb2RlQjY0VG9VaW50OEFycmF5KGI2NFRleHQpIHtcbiAgdmFyIGRlY29kZWRTdHJpbmcgPSB3aW5kb3cuYXRvYihiNjRUZXh0IHx8ICcnKTtcbiAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZGVjb2RlZFN0cmluZy5sZW5ndGgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjb2RlZFN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgIGFycmF5W2ldID0gZGVjb2RlZFN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIEEgcGFyc2VyIGZvciBNM1U4IGZpbGVzLiBUaGUgY3VycmVudCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgaW5wdXQgaXNcbiAqIGV4cG9zZWQgYXMgYSBwcm9wZXJ0eSBgbWFuaWZlc3RgIG9uIHBhcnNlciBvYmplY3RzLiBJdCdzIGp1c3QgdHdvIGxpbmVzIHRvXG4gKiBjcmVhdGUgYW5kIHBhcnNlIGEgbWFuaWZlc3Qgb25jZSB5b3UgaGF2ZSB0aGUgY29udGVudHMgYXZhaWxhYmxlIGFzIGEgc3RyaW5nOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcGFyc2VyID0gbmV3IG0zdTguUGFyc2VyKCk7XG4gKiBwYXJzZXIucHVzaCh4aHIucmVzcG9uc2VUZXh0KTtcbiAqIGBgYFxuICpcbiAqIE5ldyBpbnB1dCBjYW4gbGF0ZXIgYmUgYXBwbGllZCB0byB1cGRhdGUgdGhlIG1hbmlmZXN0IG9iamVjdCBieSBjYWxsaW5nXG4gKiBgcHVzaGAgYWdhaW4uXG4gKlxuICogVGhlIHBhcnNlciBhdHRlbXB0cyB0byBjcmVhdGUgYSB1c2FibGUgbWFuaWZlc3Qgb2JqZWN0IGV2ZW4gaWYgdGhlXG4gKiB1bmRlcmx5aW5nIGlucHV0IGlzIHNvbWV3aGF0IG5vbnNlbnNpY2FsLiBJdCBlbWl0cyBgaW5mb2AgYW5kIGB3YXJuaW5nYFxuICogZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UgaWYgaXQgZW5jb3VudGVycyBpbnB1dCB0aGF0IHNlZW1zIGludmFsaWQgb3JcbiAqIHJlcXVpcmVzIHNvbWUgcHJvcGVydHkgb2YgdGhlIG1hbmlmZXN0IG9iamVjdCB0byBiZSBkZWZhdWx0ZWQuXG4gKlxuICogQGNsYXNzIFBhcnNlclxuICogQGV4dGVuZHMgU3RyZWFtXG4gKi9cblxudmFyIFBhcnNlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1N0cmVhbSkge1xuICBfaW5oZXJpdHNMb29zZShQYXJzZXIsIF9TdHJlYW0pO1xuXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdHJlYW0uY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmxpbmVTdHJlYW0gPSBuZXcgTGluZVN0cmVhbSgpO1xuICAgIF90aGlzLnBhcnNlU3RyZWFtID0gbmV3IFBhcnNlU3RyZWFtKCk7XG5cbiAgICBfdGhpcy5saW5lU3RyZWFtLnBpcGUoX3RoaXMucGFyc2VTdHJlYW0pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtdGhpcyAqL1xuXG5cbiAgICB2YXIgc2VsZiA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpO1xuICAgIC8qIGVzbGludC1lbmFibGUgY29uc2lzdGVudC10aGlzICovXG5cblxuICAgIHZhciB1cmlzID0gW107XG4gICAgdmFyIGN1cnJlbnRVcmkgPSB7fTsgLy8gaWYgc3BlY2lmaWVkLCB0aGUgYWN0aXZlIEVYVC1YLU1BUCBkZWZpbml0aW9uXG5cbiAgICB2YXIgY3VycmVudE1hcDsgLy8gaWYgc3BlY2lmaWVkLCB0aGUgYWN0aXZlIGRlY3J5cHRpb24ga2V5XG5cbiAgICB2YXIgX2tleTtcblxuICAgIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4gICAgdmFyIGRlZmF1bHRNZWRpYUdyb3VwcyA9IHtcbiAgICAgICdBVURJTyc6IHt9LFxuICAgICAgJ1ZJREVPJzoge30sXG4gICAgICAnQ0xPU0VELUNBUFRJT05TJzoge30sXG4gICAgICAnU1VCVElUTEVTJzoge31cbiAgICB9OyAvLyBUaGlzIGlzIHRoZSBXaWRldmluZSBVVUlEIGZyb20gREFTSCBJRiBJT1AuIFRoZSBzYW1lIGV4YWN0IHN0cmluZyBpc1xuICAgIC8vIHVzZWQgaW4gTVBEcyB3aXRoIFdpZGV2aW5lIGVuY3J5cHRlZCBzdHJlYW1zLlxuXG4gICAgdmFyIHdpZGV2aW5lVXVpZCA9ICd1cm46dXVpZDplZGVmOGJhOS03OWQ2LTRhY2UtYTNjOC0yN2RjZDUxZDIxZWQnOyAvLyBncm91cCBzZWdtZW50cyBpbnRvIG51bWJlcmVkIHRpbWVsaW5lcyBkZWxpbmVhdGVkIGJ5IGRpc2NvbnRpbnVpdGllc1xuXG4gICAgdmFyIGN1cnJlbnRUaW1lbGluZSA9IDA7IC8vIHRoZSBtYW5pZmVzdCBpcyBlbXB0eSB1bnRpbCB0aGUgcGFyc2Ugc3RyZWFtIGJlZ2lucyBkZWxpdmVyaW5nIGRhdGFcblxuICAgIF90aGlzLm1hbmlmZXN0ID0ge1xuICAgICAgYWxsb3dDYWNoZTogdHJ1ZSxcbiAgICAgIGRpc2NvbnRpbnVpdHlTdGFydHM6IFtdLFxuICAgICAgc2VnbWVudHM6IFtdXG4gICAgfTsgLy8gdXBkYXRlIHRoZSBtYW5pZmVzdCB3aXRoIHRoZSBtM3U4IGVudHJ5IGZyb20gdGhlIHBhcnNlIHN0cmVhbVxuXG4gICAgX3RoaXMucGFyc2VTdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIHZhciBtZWRpYUdyb3VwO1xuICAgICAgdmFyIHJlbmRpdGlvbjtcbiAgICAgICh7XG4gICAgICAgIHRhZzogZnVuY3Rpb24gdGFnKCkge1xuICAgICAgICAgIC8vIHN3aXRjaCBiYXNlZCBvbiB0aGUgdGFnIHR5cGVcbiAgICAgICAgICAoKHtcbiAgICAgICAgICAgICdhbGxvdy1jYWNoZSc6IGZ1bmN0aW9uIGFsbG93Q2FjaGUoKSB7XG4gICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuYWxsb3dDYWNoZSA9IGVudHJ5LmFsbG93ZWQ7XG5cbiAgICAgICAgICAgICAgaWYgKCEoJ2FsbG93ZWQnIGluIGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW5mbycsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWZhdWx0aW5nIGFsbG93Q2FjaGUgdG8gWUVTJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuYWxsb3dDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBieXRlcmFuZ2U6IGZ1bmN0aW9uIGJ5dGVyYW5nZSgpIHtcbiAgICAgICAgICAgICAgdmFyIGJ5dGVyYW5nZSA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBlbnRyeSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRVcmkuYnl0ZXJhbmdlID0gYnl0ZXJhbmdlO1xuICAgICAgICAgICAgICAgIGJ5dGVyYW5nZS5sZW5ndGggPSBlbnRyeS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAoISgnb2Zmc2V0JyBpbiBlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW5mbycsIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2RlZmF1bHRpbmcgb2Zmc2V0IHRvIHplcm8nXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCdvZmZzZXQnIGluIGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFVyaS5ieXRlcmFuZ2UgPSBieXRlcmFuZ2U7XG4gICAgICAgICAgICAgICAgYnl0ZXJhbmdlLm9mZnNldCA9IGVudHJ5Lm9mZnNldDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZGxpc3Q6IGZ1bmN0aW9uIGVuZGxpc3QoKSB7XG4gICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuZW5kTGlzdCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5mOiBmdW5jdGlvbiBpbmYoKSB7XG4gICAgICAgICAgICAgIGlmICghKCdtZWRpYVNlcXVlbmNlJyBpbiB0aGlzLm1hbmlmZXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QubWVkaWFTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdpbmZvJywge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2RlZmF1bHRpbmcgbWVkaWEgc2VxdWVuY2UgdG8gemVybydcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghKCdkaXNjb250aW51aXR5U2VxdWVuY2UnIGluIHRoaXMubWFuaWZlc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC5kaXNjb250aW51aXR5U2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW5mbycsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWZhdWx0aW5nIGRpc2NvbnRpbnVpdHkgc2VxdWVuY2UgdG8gemVybydcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbnRyeS5kdXJhdGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VXJpLmR1cmF0aW9uID0gZW50cnkuZHVyYXRpb247XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuZHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VXJpLmR1cmF0aW9uID0gMC4wMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2luZm8nLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAndXBkYXRpbmcgemVybyBzZWdtZW50IGR1cmF0aW9uIHRvIGEgc21hbGwgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0LnNlZ21lbnRzID0gdXJpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IGZ1bmN0aW9uIGtleSgpIHtcbiAgICAgICAgICAgICAgaWYgKCFlbnRyeS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd3YXJuJywge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2lnbm9yaW5nIGtleSBkZWNsYXJhdGlvbiB3aXRob3V0IGF0dHJpYnV0ZSBsaXN0J1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfSAvLyBjbGVhciB0aGUgYWN0aXZlIGVuY3J5cHRpb24ga2V5XG5cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcy5NRVRIT0QgPT09ICdOT05FJykge1xuICAgICAgICAgICAgICAgIF9rZXkgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghZW50cnkuYXR0cmlidXRlcy5VUkkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaWdub3Jpbmcga2V5IGRlY2xhcmF0aW9uIHdpdGhvdXQgVVJJJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfSAvLyBjaGVjayBpZiB0aGUgY29udGVudCBpcyBlbmNyeXB0ZWQgZm9yIFdpZGV2aW5lXG4gICAgICAgICAgICAgIC8vIFdpZGV2aW5lL0hMUyBzcGVjOiBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vd3Zkb2NzL1dpZGV2aW5lX0RSTV9ITFMucGRmXG5cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcy5LRVlGT1JNQVQgPT09IHdpZGV2aW5lVXVpZCkge1xuICAgICAgICAgICAgICAgIHZhciBWQUxJRF9NRVRIT0RTID0gWydTQU1QTEUtQUVTJywgJ1NBTVBMRS1BRVMtQ1RSJywgJ1NBTVBMRS1BRVMtQ0VOQyddO1xuXG4gICAgICAgICAgICAgICAgaWYgKFZBTElEX01FVEhPRFMuaW5kZXhPZihlbnRyeS5hdHRyaWJ1dGVzLk1FVEhPRCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGtleSBtZXRob2QgcHJvdmlkZWQgZm9yIFdpZGV2aW5lJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMuTUVUSE9EID09PSAnU0FNUExFLUFFUy1DRU5DJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd3YXJuJywge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnU0FNUExFLUFFUy1DRU5DIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgU0FNUExFLUFFUy1DVFIgaW5zdGVhZCdcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzLlVSSS5zdWJzdHJpbmcoMCwgMjMpICE9PSAnZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGtleSBVUkkgcHJvdmlkZWQgZm9yIFdpZGV2aW5lJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcy5LRVlJRCAmJiBlbnRyeS5hdHRyaWJ1dGVzLktFWUlELnN1YnN0cmluZygwLCAyKSA9PT0gJzB4JykpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQga2V5IElEIHByb3ZpZGVkIGZvciBXaWRldmluZSdcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gLy8gaWYgV2lkZXZpbmUga2V5IGF0dHJpYnV0ZXMgYXJlIHZhbGlkLCBzdG9yZSB0aGVtIGFzIGBjb250ZW50UHJvdGVjdGlvbmBcbiAgICAgICAgICAgICAgICAvLyBvbiB0aGUgbWFuaWZlc3QgdG8gZW11bGF0ZSBXaWRldmluZSB0YWcgc3RydWN0dXJlIGluIGEgREFTSCBtcGRcblxuXG4gICAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC5jb250ZW50UHJvdGVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICdjb20ud2lkZXZpbmUuYWxwaGEnOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzY2hlbWVJZFVyaTogZW50cnkuYXR0cmlidXRlcy5LRVlGT1JNQVQsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlICcweCcgZnJvbSB0aGUga2V5IGlkIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgIGtleUlkOiBlbnRyeS5hdHRyaWJ1dGVzLktFWUlELnN1YnN0cmluZygyKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGJhc2U2NC1lbmNvZGVkIFBTU0ggYm94XG4gICAgICAgICAgICAgICAgICAgIHBzc2g6IGRlY29kZUI2NFRvVWludDhBcnJheShlbnRyeS5hdHRyaWJ1dGVzLlVSSS5zcGxpdCgnLCcpWzFdKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeS5hdHRyaWJ1dGVzLk1FVEhPRCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWZhdWx0aW5nIGtleSBtZXRob2QgdG8gQUVTLTEyOCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSAvLyBzZXR1cCBhbiBlbmNyeXB0aW9uIGtleSBmb3IgdXBjb21pbmcgc2VnbWVudHNcblxuXG4gICAgICAgICAgICAgIF9rZXkgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBlbnRyeS5hdHRyaWJ1dGVzLk1FVEhPRCB8fCAnQUVTLTEyOCcsXG4gICAgICAgICAgICAgICAgdXJpOiBlbnRyeS5hdHRyaWJ1dGVzLlVSSVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkuYXR0cmlidXRlcy5JViAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBfa2V5Lml2ID0gZW50cnkuYXR0cmlidXRlcy5JVjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtZWRpYS1zZXF1ZW5jZSc6IGZ1bmN0aW9uIG1lZGlhU2VxdWVuY2UoKSB7XG4gICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoZW50cnkubnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpZ25vcmluZyBpbnZhbGlkIG1lZGlhIHNlcXVlbmNlOiAnICsgZW50cnkubnVtYmVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC5tZWRpYVNlcXVlbmNlID0gZW50cnkubnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkaXNjb250aW51aXR5LXNlcXVlbmNlJzogZnVuY3Rpb24gZGlzY29udGludWl0eVNlcXVlbmNlKCkge1xuICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGVudHJ5Lm51bWJlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaWdub3JpbmcgaW52YWxpZCBkaXNjb250aW51aXR5IHNlcXVlbmNlOiAnICsgZW50cnkubnVtYmVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC5kaXNjb250aW51aXR5U2VxdWVuY2UgPSBlbnRyeS5udW1iZXI7XG4gICAgICAgICAgICAgIGN1cnJlbnRUaW1lbGluZSA9IGVudHJ5Lm51bWJlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncGxheWxpc3QtdHlwZSc6IGZ1bmN0aW9uIHBsYXlsaXN0VHlwZSgpIHtcbiAgICAgICAgICAgICAgaWYgKCEvVk9EfEVWRU5ULy50ZXN0KGVudHJ5LnBsYXlsaXN0VHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaWdub3JpbmcgdW5rbm93biBwbGF5bGlzdCB0eXBlOiAnICsgZW50cnkucGxheWxpc3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0LnBsYXlsaXN0VHlwZSA9IGVudHJ5LnBsYXlsaXN0VHlwZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXA6IGZ1bmN0aW9uIG1hcCgpIHtcbiAgICAgICAgICAgICAgY3VycmVudE1hcCA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChlbnRyeS51cmkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50TWFwLnVyaSA9IGVudHJ5LnVyaTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbnRyeS5ieXRlcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50TWFwLmJ5dGVyYW5nZSA9IGVudHJ5LmJ5dGVyYW5nZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzdHJlYW0taW5mJzogZnVuY3Rpb24gc3RyZWFtSW5mKCkge1xuICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0LnBsYXlsaXN0cyA9IHVyaXM7XG4gICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QubWVkaWFHcm91cHMgPSB0aGlzLm1hbmlmZXN0Lm1lZGlhR3JvdXBzIHx8IGRlZmF1bHRNZWRpYUdyb3VwcztcblxuICAgICAgICAgICAgICBpZiAoIWVudHJ5LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3dhcm4nLCB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaWdub3JpbmcgZW1wdHkgc3RyZWFtLWluZiBhdHRyaWJ1dGVzJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghY3VycmVudFVyaS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFVyaS5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfZXh0ZW5kcyhjdXJyZW50VXJpLmF0dHJpYnV0ZXMsIGVudHJ5LmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lZGlhOiBmdW5jdGlvbiBtZWRpYSgpIHtcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC5tZWRpYUdyb3VwcyA9IHRoaXMubWFuaWZlc3QubWVkaWFHcm91cHMgfHwgZGVmYXVsdE1lZGlhR3JvdXBzO1xuXG4gICAgICAgICAgICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiYgZW50cnkuYXR0cmlidXRlcy5UWVBFICYmIGVudHJ5LmF0dHJpYnV0ZXNbJ0dST1VQLUlEJ10gJiYgZW50cnkuYXR0cmlidXRlcy5OQU1FKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpZ25vcmluZyBpbmNvbXBsZXRlIG9yIG1pc3NpbmcgbWVkaWEgZ3JvdXAnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9IC8vIGZpbmQgdGhlIG1lZGlhIGdyb3VwLCBjcmVhdGluZyBkZWZhdWx0cyBhcyBuZWNlc3NhcnlcblxuXG4gICAgICAgICAgICAgIHZhciBtZWRpYUdyb3VwVHlwZSA9IHRoaXMubWFuaWZlc3QubWVkaWFHcm91cHNbZW50cnkuYXR0cmlidXRlcy5UWVBFXTtcbiAgICAgICAgICAgICAgbWVkaWFHcm91cFR5cGVbZW50cnkuYXR0cmlidXRlc1snR1JPVVAtSUQnXV0gPSBtZWRpYUdyb3VwVHlwZVtlbnRyeS5hdHRyaWJ1dGVzWydHUk9VUC1JRCddXSB8fCB7fTtcbiAgICAgICAgICAgICAgbWVkaWFHcm91cCA9IG1lZGlhR3JvdXBUeXBlW2VudHJ5LmF0dHJpYnV0ZXNbJ0dST1VQLUlEJ11dOyAvLyBjb2xsZWN0IHRoZSByZW5kaXRpb24gbWV0YWRhdGFcblxuICAgICAgICAgICAgICByZW5kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogL3llcy9pLnRlc3QoZW50cnkuYXR0cmlidXRlcy5ERUZBVUxUKVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChyZW5kaXRpb24uZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIHJlbmRpdGlvbi5hdXRvc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW5kaXRpb24uYXV0b3NlbGVjdCA9IC95ZXMvaS50ZXN0KGVudHJ5LmF0dHJpYnV0ZXMuQVVUT1NFTEVDVCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcy5MQU5HVUFHRSkge1xuICAgICAgICAgICAgICAgIHJlbmRpdGlvbi5sYW5ndWFnZSA9IGVudHJ5LmF0dHJpYnV0ZXMuTEFOR1VBR0U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcy5VUkkpIHtcbiAgICAgICAgICAgICAgICByZW5kaXRpb24udXJpID0gZW50cnkuYXR0cmlidXRlcy5VUkk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlc1snSU5TVFJFQU0tSUQnXSkge1xuICAgICAgICAgICAgICAgIHJlbmRpdGlvbi5pbnN0cmVhbUlkID0gZW50cnkuYXR0cmlidXRlc1snSU5TVFJFQU0tSUQnXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzLkNIQVJBQ1RFUklTVElDUykge1xuICAgICAgICAgICAgICAgIHJlbmRpdGlvbi5jaGFyYWN0ZXJpc3RpY3MgPSBlbnRyeS5hdHRyaWJ1dGVzLkNIQVJBQ1RFUklTVElDUztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzLkZPUkNFRCkge1xuICAgICAgICAgICAgICAgIHJlbmRpdGlvbi5mb3JjZWQgPSAveWVzL2kudGVzdChlbnRyeS5hdHRyaWJ1dGVzLkZPUkNFRCk7XG4gICAgICAgICAgICAgIH0gLy8gaW5zZXJ0IHRoZSBuZXcgcmVuZGl0aW9uXG5cblxuICAgICAgICAgICAgICBtZWRpYUdyb3VwW2VudHJ5LmF0dHJpYnV0ZXMuTkFNRV0gPSByZW5kaXRpb247XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzY29udGludWl0eTogZnVuY3Rpb24gZGlzY29udGludWl0eSgpIHtcbiAgICAgICAgICAgICAgY3VycmVudFRpbWVsaW5lICs9IDE7XG4gICAgICAgICAgICAgIGN1cnJlbnRVcmkuZGlzY29udGludWl0eSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuZGlzY29udGludWl0eVN0YXJ0cy5wdXNoKHVyaXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncHJvZ3JhbS1kYXRlLXRpbWUnOiBmdW5jdGlvbiBwcm9ncmFtRGF0ZVRpbWUoKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5tYW5pZmVzdC5kYXRlVGltZVN0cmluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBQUk9HUkFNLURBVEUtVElNRSBpcyBhIG1lZGlhLXNlZ21lbnQgdGFnLCBidXQgZm9yIGJhY2t3YXJkc1xuICAgICAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHksIHdlIGFkZCB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSBQUk9HUkFNLURBVEUtVElNRSB0YWdcbiAgICAgICAgICAgICAgICAvLyB0byB0aGUgbWFuaWZlc3Qgb2JqZWN0XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBpbiBmdXR1cmUgbWFqb3IgdmVyc2lvblxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuZGF0ZVRpbWVTdHJpbmcgPSBlbnRyeS5kYXRlVGltZVN0cmluZztcbiAgICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0LmRhdGVUaW1lT2JqZWN0ID0gZW50cnkuZGF0ZVRpbWVPYmplY3Q7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50VXJpLmRhdGVUaW1lU3RyaW5nID0gZW50cnkuZGF0ZVRpbWVTdHJpbmc7XG4gICAgICAgICAgICAgIGN1cnJlbnRVcmkuZGF0ZVRpbWVPYmplY3QgPSBlbnRyeS5kYXRlVGltZU9iamVjdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YXJnZXRkdXJhdGlvbjogZnVuY3Rpb24gdGFyZ2V0ZHVyYXRpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoZW50cnkuZHVyYXRpb24pIHx8IGVudHJ5LmR1cmF0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpZ25vcmluZyBpbnZhbGlkIHRhcmdldCBkdXJhdGlvbjogJyArIGVudHJ5LmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdC50YXJnZXREdXJhdGlvbiA9IGVudHJ5LmR1cmF0aW9uO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsZHVyYXRpb246IGZ1bmN0aW9uIHRvdGFsZHVyYXRpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoZW50cnkuZHVyYXRpb24pIHx8IGVudHJ5LmR1cmF0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpZ25vcmluZyBpbnZhbGlkIHRvdGFsIGR1cmF0aW9uOiAnICsgZW50cnkuZHVyYXRpb25cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLm1hbmlmZXN0LnRvdGFsRHVyYXRpb24gPSBlbnRyeS5kdXJhdGlvbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgICAgICAgIGlmICghZW50cnkuYXR0cmlidXRlcyB8fCBpc05hTihlbnRyeS5hdHRyaWJ1dGVzWydUSU1FLU9GRlNFVCddKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpZ25vcmluZyBzdGFydCBkZWNsYXJhdGlvbiB3aXRob3V0IGFwcHJvcHJpYXRlIGF0dHJpYnV0ZSBsaXN0J1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Quc3RhcnQgPSB7XG4gICAgICAgICAgICAgICAgdGltZU9mZnNldDogZW50cnkuYXR0cmlidXRlc1snVElNRS1PRkZTRVQnXSxcbiAgICAgICAgICAgICAgICBwcmVjaXNlOiBlbnRyeS5hdHRyaWJ1dGVzLlBSRUNJU0VcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnY3VlLW91dCc6IGZ1bmN0aW9uIGN1ZU91dCgpIHtcbiAgICAgICAgICAgICAgY3VycmVudFVyaS5jdWVPdXQgPSBlbnRyeS5kYXRhO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjdWUtb3V0LWNvbnQnOiBmdW5jdGlvbiBjdWVPdXRDb250KCkge1xuICAgICAgICAgICAgICBjdXJyZW50VXJpLmN1ZU91dENvbnQgPSBlbnRyeS5kYXRhO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjdWUtaW4nOiBmdW5jdGlvbiBjdWVJbigpIHtcbiAgICAgICAgICAgICAgY3VycmVudFVyaS5jdWVJbiA9IGVudHJ5LmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlbZW50cnkudGFnVHlwZV0gfHwgbm9vcCkuY2FsbChzZWxmKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXJpOiBmdW5jdGlvbiB1cmkoKSB7XG4gICAgICAgICAgY3VycmVudFVyaS51cmkgPSBlbnRyeS51cmk7XG4gICAgICAgICAgdXJpcy5wdXNoKGN1cnJlbnRVcmkpOyAvLyBpZiBubyBleHBsaWNpdCBkdXJhdGlvbiB3YXMgZGVjbGFyZWQsIHVzZSB0aGUgdGFyZ2V0IGR1cmF0aW9uXG5cbiAgICAgICAgICBpZiAodGhpcy5tYW5pZmVzdC50YXJnZXREdXJhdGlvbiAmJiAhKCdkdXJhdGlvbicgaW4gY3VycmVudFVyaSkpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybicsIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ2RlZmF1bHRpbmcgc2VnbWVudCBkdXJhdGlvbiB0byB0aGUgdGFyZ2V0IGR1cmF0aW9uJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyZW50VXJpLmR1cmF0aW9uID0gdGhpcy5tYW5pZmVzdC50YXJnZXREdXJhdGlvbjtcbiAgICAgICAgICB9IC8vIGFubm90YXRlIHdpdGggZW5jcnlwdGlvbiBpbmZvcm1hdGlvbiwgaWYgbmVjZXNzYXJ5XG5cblxuICAgICAgICAgIGlmIChfa2V5KSB7XG4gICAgICAgICAgICBjdXJyZW50VXJpLmtleSA9IF9rZXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFVyaS50aW1lbGluZSA9IGN1cnJlbnRUaW1lbGluZTsgLy8gYW5ub3RhdGUgd2l0aCBpbml0aWFsaXphdGlvbiBzZWdtZW50IGluZm9ybWF0aW9uLCBpZiBuZWNlc3NhcnlcblxuICAgICAgICAgIGlmIChjdXJyZW50TWFwKSB7XG4gICAgICAgICAgICBjdXJyZW50VXJpLm1hcCA9IGN1cnJlbnRNYXA7XG4gICAgICAgICAgfSAvLyBwcmVwYXJlIGZvciB0aGUgbmV4dCBVUklcblxuXG4gICAgICAgICAgY3VycmVudFVyaSA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBjb21tZW50OiBmdW5jdGlvbiBjb21tZW50KCkgey8vIGNvbW1lbnRzIGFyZSBub3QgaW1wb3J0YW50IGZvciBwbGF5YmFja1xuICAgICAgICB9LFxuICAgICAgICBjdXN0b206IGZ1bmN0aW9uIGN1c3RvbSgpIHtcbiAgICAgICAgICAvLyBpZiB0aGlzIGlzIHNlZ21lbnQtbGV2ZWwgZGF0YSBhdHRhY2ggdGhlIG91dHB1dCB0byB0aGUgc2VnbWVudFxuICAgICAgICAgIGlmIChlbnRyeS5zZWdtZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50VXJpLmN1c3RvbSA9IGN1cnJlbnRVcmkuY3VzdG9tIHx8IHt9O1xuICAgICAgICAgICAgY3VycmVudFVyaS5jdXN0b21bZW50cnkuY3VzdG9tVHlwZV0gPSBlbnRyeS5kYXRhOyAvLyBpZiB0aGlzIGlzIG1hbmlmZXN0LWxldmVsIGRhdGEgYXR0YWNoIHRvIHRoZSB0b3AgbGV2ZWwgbWFuaWZlc3Qgb2JqZWN0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFuaWZlc3QuY3VzdG9tID0gdGhpcy5tYW5pZmVzdC5jdXN0b20gfHwge307XG4gICAgICAgICAgICB0aGlzLm1hbmlmZXN0LmN1c3RvbVtlbnRyeS5jdXN0b21UeXBlXSA9IGVudHJ5LmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVtlbnRyeS50eXBlXS5jYWxsKHNlbGYpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgaW5wdXQgc3RyaW5nIGFuZCB1cGRhdGUgdGhlIG1hbmlmZXN0IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rIGEgcG90ZW50aWFsbHkgaW5jb21wbGV0ZSBwb3J0aW9uIG9mIHRoZSBtYW5pZmVzdFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5wdXNoID0gZnVuY3Rpb24gcHVzaChjaHVuaykge1xuICAgIHRoaXMubGluZVN0cmVhbS5wdXNoKGNodW5rKTtcbiAgfVxuICAvKipcbiAgICogRmx1c2ggYW55IHJlbWFpbmluZyBpbnB1dC4gVGhpcyBjYW4gYmUgaGFuZHkgaWYgdGhlIGxhc3QgbGluZSBvZiBhbiBNM1U4XG4gICAqIG1hbmlmZXN0IGRpZCBub3QgY29udGFpbiBhIHRyYWlsaW5nIG5ld2xpbmUgYnV0IHRoZSBmaWxlIGhhcyBiZWVuXG4gICAqIGNvbXBsZXRlbHkgcmVjZWl2ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVuZCA9IGZ1bmN0aW9uIGVuZCgpIHtcbiAgICAvLyBmbHVzaCBhbnkgYnVmZmVyZWQgaW5wdXRcbiAgICB0aGlzLmxpbmVTdHJlYW0ucHVzaCgnXFxuJyk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiBhZGRpdGlvbmFsIHBhcnNlciBmb3Igbm9uLXN0YW5kYXJkIHRhZ3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgb3B0aW9ucyAgICAgICAgICAgICAgYSBtYXAgb2Ygb3B0aW9ucyBmb3IgdGhlIGFkZGVkIHBhcnNlclxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gICBvcHRpb25zLmV4cHJlc3Npb24gICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgY3VzdG9tIGhlYWRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBvcHRpb25zLnR5cGUgICAgICAgICB0aGUgdHlwZSB0byByZWdpc3RlciB0byB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmRhdGFQYXJzZXJdIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBsaW5lIGludG8gYW4gb2JqZWN0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIFtvcHRpb25zLnNlZ21lbnRdICAgIHNob3VsZCB0YWcgZGF0YSBiZSBhdHRhY2hlZCB0byB0aGUgc2VnbWVudCBvYmplY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkUGFyc2VyID0gZnVuY3Rpb24gYWRkUGFyc2VyKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBhcnNlU3RyZWFtLmFkZFBhcnNlcihvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGhlYWRlciBtYXBwZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1JlZ0V4cH0gICBvcHRpb25zLmV4cHJlc3Npb24gICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgY3VzdG9tIGhlYWRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLm1hcCAgICAgICAgICBmdW5jdGlvbiB0byB0cmFuc2xhdGUgdGFnIGludG8gYSBkaWZmZXJlbnQgdGFnXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFkZFRhZ01hcHBlciA9IGZ1bmN0aW9uIGFkZFRhZ01hcHBlcihvcHRpb25zKSB7XG4gICAgdGhpcy5wYXJzZVN0cmVhbS5hZGRUYWdNYXBwZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oU3RyZWFtKTtcblxuZXhwb3J0IHsgTGluZVN0cmVhbSwgUGFyc2VTdHJlYW0sIFBhcnNlciB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7Ozs7Ozs7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFQQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFUQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBN0JBO0FBQ0E7QUFpQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBSEE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBeEdBO0FBMkdBOzs7Ozs7Ozs7QUFRQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQTlCQTtBQWlDQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBd0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQW5CQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5YUE7QUFDQTtBQUNBO0FBZ2JBO0FBQ0E7QUFDQTtBQUZBO0FBbGJBO0FBdWJBO0FBQ0E7Ozs7Ozs7OztBQXhkQTtBQUNBO0FBa2VBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQVpBO0FBY0E7QUFDQTs7Ozs7OztBQTdCQTtBQUNBO0FBcUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBWkE7QUFDQTtBQWNBO0FBNWlCQTtBQUNBO0FBOGlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3QkE7QUErQkE7QUFDQTtBQWhDQTtBQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUE1REE7QUE4REE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFsQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUEzQkE7QUE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBUEE7QUFEQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBdEVBO0FBQ0E7QUFDQTtBQTBFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBakpBO0FBbUpBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQTNKQTtBQTZKQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRLQTtBQXdLQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFoTEE7QUFrTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzTEE7QUE2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1TUE7QUE4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQVBBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExQ0E7QUFDQTtBQUNBO0FBNENBO0FBNVBBO0FBOFBBO0FBQ0E7QUFDQTtBQUNBO0FBalFBO0FBbVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlRQTtBQWdSQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUF4UkE7QUEwUkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBbFNBO0FBb1NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQTVTQTtBQWlUQTtBQUNBO0FBbFRBO0FBb1RBO0FBQ0E7QUFyVEE7QUF1VEE7QUFDQTtBQUNBO0FBelRBO0FBSEE7QUErVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBQ0E7QUFxQkE7QUF0VkE7QUF3VkE7QUF4VkE7QUEwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFuV0E7QUFIQTtBQUNBO0FBeVdBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFIQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBSkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSEE7QUFDQTtBQVdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUEzY0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/m3u8-parser/dist/m3u8-parser.es.js\n"); - -/***/ }), - -/***/ "../node_modules/markdown-escapes/index.js": -/*!*************************************************!*\ - !*** ../node_modules/markdown-escapes/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = escapes;\nvar defaults = ['\\\\', '`', '*', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!', '_', '>'];\nvar gfm = defaults.concat(['~', '|']);\nvar commonmark = gfm.concat(['\\n', '\"', '$', '%', '&', \"'\", ',', '/', ':', ';', '<', '=', '?', '@', '^']);\nescapes[\"default\"] = defaults;\nescapes.gfm = gfm;\nescapes.commonmark = commonmark; // Get markdown escapes.\n\nfunction escapes(options) {\n var settings = options || {};\n\n if (settings.commonmark) {\n return commonmark;\n }\n\n return settings.gfm ? gfm : defaults;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtkb3duLWVzY2FwZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtkb3duLWVzY2FwZXMvaW5kZXguanM/NWRlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVzXG5cbnZhciBkZWZhdWx0cyA9IFtcbiAgJ1xcXFwnLFxuICAnYCcsXG4gICcqJyxcbiAgJ3snLFxuICAnfScsXG4gICdbJyxcbiAgJ10nLFxuICAnKCcsXG4gICcpJyxcbiAgJyMnLFxuICAnKycsXG4gICctJyxcbiAgJy4nLFxuICAnIScsXG4gICdfJyxcbiAgJz4nXG5dXG5cbnZhciBnZm0gPSBkZWZhdWx0cy5jb25jYXQoWyd+JywgJ3wnXSlcblxudmFyIGNvbW1vbm1hcmsgPSBnZm0uY29uY2F0KFtcbiAgJ1xcbicsXG4gICdcIicsXG4gICckJyxcbiAgJyUnLFxuICAnJicsXG4gIFwiJ1wiLFxuICAnLCcsXG4gICcvJyxcbiAgJzonLFxuICAnOycsXG4gICc8JyxcbiAgJz0nLFxuICAnPycsXG4gICdAJyxcbiAgJ14nXG5dKVxuXG5lc2NhcGVzLmRlZmF1bHQgPSBkZWZhdWx0c1xuZXNjYXBlcy5nZm0gPSBnZm1cbmVzY2FwZXMuY29tbW9ubWFyayA9IGNvbW1vbm1hcmtcblxuLy8gR2V0IG1hcmtkb3duIGVzY2FwZXMuXG5mdW5jdGlvbiBlc2NhcGVzKG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmIChzZXR0aW5ncy5jb21tb25tYXJrKSB7XG4gICAgcmV0dXJuIGNvbW1vbm1hcmtcbiAgfVxuXG4gIHJldHVybiBzZXR0aW5ncy5nZm0gPyBnZm0gOiBkZWZhdWx0c1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQW1CQTtBQUVBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/markdown-escapes/index.js\n"); - -/***/ }), - -/***/ "../node_modules/markdown-table/index.js": -/*!***********************************************!*\ - !*** ../node_modules/markdown-table/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = markdownTable;\nvar dotRe = /\\./;\nvar lastDotRe = /\\.[^.]*$/; // Characters.\n\nvar space = ' ';\nvar lineFeed = '\\n';\nvar dash = '-';\nvar dot = '.';\nvar colon = ':';\nvar lowercaseC = 'c';\nvar lowercaseL = 'l';\nvar lowercaseR = 'r';\nvar verticalBar = '|';\nvar minCellSize = 3; // Create a table from a matrix of strings.\n\nfunction markdownTable(table, options) {\n var settings = options || {};\n var delimiter = settings.delimiter;\n var start = settings.start;\n var end = settings.end;\n var alignment = settings.align;\n var calculateStringLength = settings.stringLength || lengthNoop;\n var cellCount = 0;\n var rowIndex = -1;\n var rowLength = table.length;\n var sizes = [];\n var align;\n var rule;\n var rows;\n var row;\n var cells;\n var index;\n var position;\n var size;\n var value;\n var spacing;\n var before;\n var after;\n alignment = alignment ? alignment.concat() : [];\n\n if (delimiter === null || delimiter === undefined) {\n delimiter = space + verticalBar + space;\n }\n\n if (start === null || start === undefined) {\n start = verticalBar + space;\n }\n\n if (end === null || end === undefined) {\n end = space + verticalBar;\n }\n\n while (++rowIndex < rowLength) {\n row = table[rowIndex];\n index = -1;\n\n if (row.length > cellCount) {\n cellCount = row.length;\n }\n\n while (++index < cellCount) {\n position = row[index] ? dotindex(row[index]) : null;\n\n if (!sizes[index]) {\n sizes[index] = minCellSize;\n }\n\n if (position > sizes[index]) {\n sizes[index] = position;\n }\n }\n }\n\n if (typeof alignment === 'string') {\n alignment = pad(cellCount, alignment).split('');\n } // Make sure only valid alignments are used.\n\n\n index = -1;\n\n while (++index < cellCount) {\n align = alignment[index];\n\n if (typeof align === 'string') {\n align = align.charAt(0).toLowerCase();\n }\n\n if (align !== lowercaseL && align !== lowercaseR && align !== lowercaseC && align !== dot) {\n align = '';\n }\n\n alignment[index] = align;\n }\n\n rowIndex = -1;\n rows = [];\n\n while (++rowIndex < rowLength) {\n row = table[rowIndex];\n index = -1;\n cells = [];\n\n while (++index < cellCount) {\n value = row[index];\n value = stringify(value);\n\n if (alignment[index] === dot) {\n position = dotindex(value);\n size = sizes[index] + (dotRe.test(value) ? 0 : 1) - (calculateStringLength(value) - position);\n cells[index] = value + pad(size - 1);\n } else {\n cells[index] = value;\n }\n }\n\n rows[rowIndex] = cells;\n }\n\n sizes = [];\n rowIndex = -1;\n\n while (++rowIndex < rowLength) {\n cells = rows[rowIndex];\n index = -1;\n\n while (++index < cellCount) {\n value = cells[index];\n\n if (!sizes[index]) {\n sizes[index] = minCellSize;\n }\n\n size = calculateStringLength(value);\n\n if (size > sizes[index]) {\n sizes[index] = size;\n }\n }\n }\n\n rowIndex = -1;\n\n while (++rowIndex < rowLength) {\n cells = rows[rowIndex];\n index = -1;\n\n if (settings.pad !== false) {\n while (++index < cellCount) {\n value = cells[index];\n position = sizes[index] - (calculateStringLength(value) || 0);\n spacing = pad(position);\n\n if (alignment[index] === lowercaseR || alignment[index] === dot) {\n value = spacing + value;\n } else if (alignment[index] === lowercaseC) {\n position /= 2;\n\n if (position % 1 === 0) {\n before = position;\n after = position;\n } else {\n before = position + 0.5;\n after = position - 0.5;\n }\n\n value = pad(before) + value + pad(after);\n } else {\n value += spacing;\n }\n\n cells[index] = value;\n }\n }\n\n rows[rowIndex] = cells.join(delimiter);\n }\n\n if (settings.rule !== false) {\n index = -1;\n rule = [];\n\n while (++index < cellCount) {\n // When `pad` is false, make the rule the same size as the first row.\n if (settings.pad === false) {\n value = table[0][index];\n spacing = calculateStringLength(stringify(value));\n spacing = spacing > minCellSize ? spacing : minCellSize;\n } else {\n spacing = sizes[index];\n }\n\n align = alignment[index]; // When `align` is left, don't add colons.\n\n value = align === lowercaseR || align === '' ? dash : colon;\n value += pad(spacing - 2, dash);\n value += align !== lowercaseL && align !== '' ? colon : dash;\n rule[index] = value;\n }\n\n rows.splice(1, 0, rule.join(delimiter));\n }\n\n return start + rows.join(end + lineFeed + start) + end;\n}\n\nfunction stringify(value) {\n return value === null || value === undefined ? '' : String(value);\n} // Get the length of `value`.\n\n\nfunction lengthNoop(value) {\n return String(value).length;\n} // Get a string consisting of `length` `character`s.\n\n\nfunction pad(length, character) {\n return new Array(length + 1).join(character || space);\n} // Get the position of the last dot in `value`.\n\n\nfunction dotindex(value) {\n var match = lastDotRe.exec(value);\n return match ? match.index + 1 : value.length;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtkb3duLXRhYmxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tYXJrZG93bi10YWJsZS9pbmRleC5qcz9kMDA5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcmtkb3duVGFibGVcblxudmFyIGRvdFJlID0gL1xcLi9cbnZhciBsYXN0RG90UmUgPSAvXFwuW14uXSokL1xuXG4vLyBDaGFyYWN0ZXJzLlxudmFyIHNwYWNlID0gJyAnXG52YXIgbGluZUZlZWQgPSAnXFxuJ1xudmFyIGRhc2ggPSAnLSdcbnZhciBkb3QgPSAnLidcbnZhciBjb2xvbiA9ICc6J1xudmFyIGxvd2VyY2FzZUMgPSAnYydcbnZhciBsb3dlcmNhc2VMID0gJ2wnXG52YXIgbG93ZXJjYXNlUiA9ICdyJ1xudmFyIHZlcnRpY2FsQmFyID0gJ3wnXG5cbnZhciBtaW5DZWxsU2l6ZSA9IDNcblxuLy8gQ3JlYXRlIGEgdGFibGUgZnJvbSBhIG1hdHJpeCBvZiBzdHJpbmdzLlxuZnVuY3Rpb24gbWFya2Rvd25UYWJsZSh0YWJsZSwgb3B0aW9ucykge1xuICB2YXIgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBkZWxpbWl0ZXIgPSBzZXR0aW5ncy5kZWxpbWl0ZXJcbiAgdmFyIHN0YXJ0ID0gc2V0dGluZ3Muc3RhcnRcbiAgdmFyIGVuZCA9IHNldHRpbmdzLmVuZFxuICB2YXIgYWxpZ25tZW50ID0gc2V0dGluZ3MuYWxpZ25cbiAgdmFyIGNhbGN1bGF0ZVN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aCB8fCBsZW5ndGhOb29wXG4gIHZhciBjZWxsQ291bnQgPSAwXG4gIHZhciByb3dJbmRleCA9IC0xXG4gIHZhciByb3dMZW5ndGggPSB0YWJsZS5sZW5ndGhcbiAgdmFyIHNpemVzID0gW11cbiAgdmFyIGFsaWduXG4gIHZhciBydWxlXG4gIHZhciByb3dzXG4gIHZhciByb3dcbiAgdmFyIGNlbGxzXG4gIHZhciBpbmRleFxuICB2YXIgcG9zaXRpb25cbiAgdmFyIHNpemVcbiAgdmFyIHZhbHVlXG4gIHZhciBzcGFjaW5nXG4gIHZhciBiZWZvcmVcbiAgdmFyIGFmdGVyXG5cbiAgYWxpZ25tZW50ID0gYWxpZ25tZW50ID8gYWxpZ25tZW50LmNvbmNhdCgpIDogW11cblxuICBpZiAoZGVsaW1pdGVyID09PSBudWxsIHx8IGRlbGltaXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsaW1pdGVyID0gc3BhY2UgKyB2ZXJ0aWNhbEJhciArIHNwYWNlXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IG51bGwgfHwgc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gdmVydGljYWxCYXIgKyBzcGFjZVxuICB9XG5cbiAgaWYgKGVuZCA9PT0gbnVsbCB8fCBlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHNwYWNlICsgdmVydGljYWxCYXJcbiAgfVxuXG4gIHdoaWxlICgrK3Jvd0luZGV4IDwgcm93TGVuZ3RoKSB7XG4gICAgcm93ID0gdGFibGVbcm93SW5kZXhdXG5cbiAgICBpbmRleCA9IC0xXG5cbiAgICBpZiAocm93Lmxlbmd0aCA+IGNlbGxDb3VudCkge1xuICAgICAgY2VsbENvdW50ID0gcm93Lmxlbmd0aFxuICAgIH1cblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2VsbENvdW50KSB7XG4gICAgICBwb3NpdGlvbiA9IHJvd1tpbmRleF0gPyBkb3RpbmRleChyb3dbaW5kZXhdKSA6IG51bGxcblxuICAgICAgaWYgKCFzaXplc1tpbmRleF0pIHtcbiAgICAgICAgc2l6ZXNbaW5kZXhdID0gbWluQ2VsbFNpemVcbiAgICAgIH1cblxuICAgICAgaWYgKHBvc2l0aW9uID4gc2l6ZXNbaW5kZXhdKSB7XG4gICAgICAgIHNpemVzW2luZGV4XSA9IHBvc2l0aW9uXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBhbGlnbm1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYWxpZ25tZW50ID0gcGFkKGNlbGxDb3VudCwgYWxpZ25tZW50KS5zcGxpdCgnJylcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvbmx5IHZhbGlkIGFsaWdubWVudHMgYXJlIHVzZWQuXG4gIGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGNlbGxDb3VudCkge1xuICAgIGFsaWduID0gYWxpZ25tZW50W2luZGV4XVxuXG4gICAgaWYgKHR5cGVvZiBhbGlnbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFsaWduID0gYWxpZ24uY2hhckF0KDApLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhbGlnbiAhPT0gbG93ZXJjYXNlTCAmJlxuICAgICAgYWxpZ24gIT09IGxvd2VyY2FzZVIgJiZcbiAgICAgIGFsaWduICE9PSBsb3dlcmNhc2VDICYmXG4gICAgICBhbGlnbiAhPT0gZG90XG4gICAgKSB7XG4gICAgICBhbGlnbiA9ICcnXG4gICAgfVxuXG4gICAgYWxpZ25tZW50W2luZGV4XSA9IGFsaWduXG4gIH1cblxuICByb3dJbmRleCA9IC0xXG4gIHJvd3MgPSBbXVxuXG4gIHdoaWxlICgrK3Jvd0luZGV4IDwgcm93TGVuZ3RoKSB7XG4gICAgcm93ID0gdGFibGVbcm93SW5kZXhdXG5cbiAgICBpbmRleCA9IC0xXG4gICAgY2VsbHMgPSBbXVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBjZWxsQ291bnQpIHtcbiAgICAgIHZhbHVlID0gcm93W2luZGV4XVxuXG4gICAgICB2YWx1ZSA9IHN0cmluZ2lmeSh2YWx1ZSlcblxuICAgICAgaWYgKGFsaWdubWVudFtpbmRleF0gPT09IGRvdCkge1xuICAgICAgICBwb3NpdGlvbiA9IGRvdGluZGV4KHZhbHVlKVxuXG4gICAgICAgIHNpemUgPVxuICAgICAgICAgIHNpemVzW2luZGV4XSArXG4gICAgICAgICAgKGRvdFJlLnRlc3QodmFsdWUpID8gMCA6IDEpIC1cbiAgICAgICAgICAoY2FsY3VsYXRlU3RyaW5nTGVuZ3RoKHZhbHVlKSAtIHBvc2l0aW9uKVxuXG4gICAgICAgIGNlbGxzW2luZGV4XSA9IHZhbHVlICsgcGFkKHNpemUgLSAxKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbHNbaW5kZXhdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3dzW3Jvd0luZGV4XSA9IGNlbGxzXG4gIH1cblxuICBzaXplcyA9IFtdXG4gIHJvd0luZGV4ID0gLTFcblxuICB3aGlsZSAoKytyb3dJbmRleCA8IHJvd0xlbmd0aCkge1xuICAgIGNlbGxzID0gcm93c1tyb3dJbmRleF1cblxuICAgIGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2VsbENvdW50KSB7XG4gICAgICB2YWx1ZSA9IGNlbGxzW2luZGV4XVxuXG4gICAgICBpZiAoIXNpemVzW2luZGV4XSkge1xuICAgICAgICBzaXplc1tpbmRleF0gPSBtaW5DZWxsU2l6ZVxuICAgICAgfVxuXG4gICAgICBzaXplID0gY2FsY3VsYXRlU3RyaW5nTGVuZ3RoKHZhbHVlKVxuXG4gICAgICBpZiAoc2l6ZSA+IHNpemVzW2luZGV4XSkge1xuICAgICAgICBzaXplc1tpbmRleF0gPSBzaXplXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcm93SW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK3Jvd0luZGV4IDwgcm93TGVuZ3RoKSB7XG4gICAgY2VsbHMgPSByb3dzW3Jvd0luZGV4XVxuXG4gICAgaW5kZXggPSAtMVxuXG4gICAgaWYgKHNldHRpbmdzLnBhZCAhPT0gZmFsc2UpIHtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgY2VsbENvdW50KSB7XG4gICAgICAgIHZhbHVlID0gY2VsbHNbaW5kZXhdXG5cbiAgICAgICAgcG9zaXRpb24gPSBzaXplc1tpbmRleF0gLSAoY2FsY3VsYXRlU3RyaW5nTGVuZ3RoKHZhbHVlKSB8fCAwKVxuICAgICAgICBzcGFjaW5nID0gcGFkKHBvc2l0aW9uKVxuXG4gICAgICAgIGlmIChhbGlnbm1lbnRbaW5kZXhdID09PSBsb3dlcmNhc2VSIHx8IGFsaWdubWVudFtpbmRleF0gPT09IGRvdCkge1xuICAgICAgICAgIHZhbHVlID0gc3BhY2luZyArIHZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50W2luZGV4XSA9PT0gbG93ZXJjYXNlQykge1xuICAgICAgICAgIHBvc2l0aW9uIC89IDJcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiAlIDEgPT09IDApIHtcbiAgICAgICAgICAgIGJlZm9yZSA9IHBvc2l0aW9uXG4gICAgICAgICAgICBhZnRlciA9IHBvc2l0aW9uXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlZm9yZSA9IHBvc2l0aW9uICsgMC41XG4gICAgICAgICAgICBhZnRlciA9IHBvc2l0aW9uIC0gMC41XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFsdWUgPSBwYWQoYmVmb3JlKSArIHZhbHVlICsgcGFkKGFmdGVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlICs9IHNwYWNpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGNlbGxzW2luZGV4XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcm93c1tyb3dJbmRleF0gPSBjZWxscy5qb2luKGRlbGltaXRlcilcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5ydWxlICE9PSBmYWxzZSkge1xuICAgIGluZGV4ID0gLTFcbiAgICBydWxlID0gW11cblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2VsbENvdW50KSB7XG4gICAgICAvLyBXaGVuIGBwYWRgIGlzIGZhbHNlLCBtYWtlIHRoZSBydWxlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGZpcnN0IHJvdy5cbiAgICAgIGlmIChzZXR0aW5ncy5wYWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHZhbHVlID0gdGFibGVbMF1baW5kZXhdXG4gICAgICAgIHNwYWNpbmcgPSBjYWxjdWxhdGVTdHJpbmdMZW5ndGgoc3RyaW5naWZ5KHZhbHVlKSlcbiAgICAgICAgc3BhY2luZyA9IHNwYWNpbmcgPiBtaW5DZWxsU2l6ZSA/IHNwYWNpbmcgOiBtaW5DZWxsU2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BhY2luZyA9IHNpemVzW2luZGV4XVxuICAgICAgfVxuXG4gICAgICBhbGlnbiA9IGFsaWdubWVudFtpbmRleF1cblxuICAgICAgLy8gV2hlbiBgYWxpZ25gIGlzIGxlZnQsIGRvbid0IGFkZCBjb2xvbnMuXG4gICAgICB2YWx1ZSA9IGFsaWduID09PSBsb3dlcmNhc2VSIHx8IGFsaWduID09PSAnJyA/IGRhc2ggOiBjb2xvblxuICAgICAgdmFsdWUgKz0gcGFkKHNwYWNpbmcgLSAyLCBkYXNoKVxuICAgICAgdmFsdWUgKz0gYWxpZ24gIT09IGxvd2VyY2FzZUwgJiYgYWxpZ24gIT09ICcnID8gY29sb24gOiBkYXNoXG5cbiAgICAgIHJ1bGVbaW5kZXhdID0gdmFsdWVcbiAgICB9XG5cbiAgICByb3dzLnNwbGljZSgxLCAwLCBydWxlLmpvaW4oZGVsaW1pdGVyKSlcbiAgfVxuXG4gIHJldHVybiBzdGFydCArIHJvd3Muam9pbihlbmQgKyBsaW5lRmVlZCArIHN0YXJ0KSArIGVuZFxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2YWx1ZSlcbn1cblxuLy8gR2V0IHRoZSBsZW5ndGggb2YgYHZhbHVlYC5cbmZ1bmN0aW9uIGxlbmd0aE5vb3AodmFsdWUpIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkubGVuZ3RoXG59XG5cbi8vIEdldCBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGBsZW5ndGhgIGBjaGFyYWN0ZXJgcy5cbmZ1bmN0aW9uIHBhZChsZW5ndGgsIGNoYXJhY3Rlcikge1xuICByZXR1cm4gbmV3IEFycmF5KGxlbmd0aCArIDEpLmpvaW4oY2hhcmFjdGVyIHx8IHNwYWNlKVxufVxuXG4vLyBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGRvdCBpbiBgdmFsdWVgLlxuZnVuY3Rpb24gZG90aW5kZXgodmFsdWUpIHtcbiAgdmFyIG1hdGNoID0gbGFzdERvdFJlLmV4ZWModmFsdWUpXG5cbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2guaW5kZXggKyAxIDogdmFsdWUubGVuZ3RoXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3REE7QUFDQTtBQUNBO0FBK0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/markdown-table/index.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/InlineLexer.js": -/*!*************************************************!*\ - !*** ../node_modules/marked/src/InlineLexer.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nvar Renderer = __webpack_require__(/*! ./Renderer.js */ \"../node_modules/marked/src/Renderer.js\");\n\nvar _require = __webpack_require__(/*! ./defaults.js */ \"../node_modules/marked/src/defaults.js\"),\n defaults = _require.defaults;\n\nvar _require2 = __webpack_require__(/*! ./rules.js */ \"../node_modules/marked/src/rules.js\"),\n inline = _require2.inline;\n\nvar _require3 = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n findClosingBracket = _require3.findClosingBracket,\n escape = _require3.escape;\n/**\n * Inline Lexer & Compiler\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function InlineLexer(links, options) {\n _classCallCheck(this, InlineLexer);\n\n this.options = options || defaults;\n this.links = links;\n this.rules = inline.normal;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.pedantic) {\n this.rules = inline.pedantic;\n } else if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n }\n }\n /**\n * Expose Inline Rules\n */\n\n\n _createClass(InlineLexer, [{\n key: \"output\",\n\n /**\n * Lexing/Compiling\n */\n value: function output(src) {\n var out = '',\n link,\n text,\n href,\n title,\n cap,\n prevCapZero;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += escape(cap[1]);\n continue;\n } // tag\n\n\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^<a /i.test(cap[0])) {\n this.inLink = true;\n } else if (this.inLink && /^<\\/a>/i.test(cap[0])) {\n this.inLink = false;\n }\n\n if (!this.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.inRawBlock = true;\n } else if (this.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.inRawBlock = false;\n }\n\n src = src.substring(cap[0].length);\n out += this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];\n continue;\n } // link\n\n\n if (cap = this.rules.link.exec(src)) {\n var lastParenIndex = findClosingBracket(cap[2], '()');\n\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n\n src = src.substring(cap[0].length);\n this.inLink = true;\n href = cap[2];\n\n if (this.options.pedantic) {\n link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n } else {\n title = '';\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim().replace(/^<([\\s\\S]*)>$/, '$1');\n out += this.outputLink(cap, {\n href: InlineLexer.escapes(href),\n title: InlineLexer.escapes(title)\n });\n this.inLink = false;\n continue;\n } // reflink, nolink\n\n\n if ((cap = this.rules.reflink.exec(src)) || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n } // strong\n\n\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));\n continue;\n } // em\n\n\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));\n continue;\n } // code\n\n\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2].trim(), true));\n continue;\n } // br\n\n\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n } // del (gfm)\n\n\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n } // autolink\n\n\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n\n if (cap[2] === '@') {\n text = escape(this.mangle(cap[1]));\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n out += this.renderer.link(href, null, text);\n continue;\n } // url (gfm)\n\n\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n\n text = escape(cap[0]);\n\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n\n src = src.substring(cap[0].length);\n out += this.renderer.link(href, null, text);\n continue;\n } // text\n\n\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n\n if (this.inRawBlock) {\n out += this.renderer.text(this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]);\n } else {\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n }\n\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n }\n }, {\n key: \"outputLink\",\n\n /**\n * Compile Link\n */\n value: function outputLink(cap, link) {\n var href = link.href,\n title = link.title ? escape(link.title) : null;\n return cap[0].charAt(0) !== '!' ? this.renderer.link(href, title, this.output(cap[1])) : this.renderer.image(href, title, escape(cap[1]));\n }\n /**\n * Smartypants Transformations\n */\n\n }, {\n key: \"smartypants\",\n value: function smartypants(text) {\n if (!this.options.smartypants) return text;\n return text // em-dashes\n .replace(/---/g, \"\\u2014\") // en-dashes\n .replace(/--/g, \"\\u2013\") // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\") // closing singles & apostrophes\n .replace(/'/g, \"\\u2019\") // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\") // closing doubles\n .replace(/\"/g, \"\\u201D\") // ellipses\n .replace(/\\.{3}/g, \"\\u2026\");\n }\n /**\n * Mangle Links\n */\n\n }, {\n key: \"mangle\",\n value: function mangle(text) {\n if (!this.options.mangle) return text;\n var l = text.length;\n var out = '',\n i = 0,\n ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n\n out += '&#' + ch + ';';\n }\n\n return out;\n }\n }], [{\n key: \"output\",\n\n /**\n * Static Lexing/Compiling Method\n */\n value: function output(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n }\n }, {\n key: \"escapes\",\n value: function escapes(text) {\n return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;\n }\n }, {\n key: \"rules\",\n get: function get() {\n return inline;\n }\n }]);\n\n return InlineLexer;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSW5saW5lTGV4ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSW5saW5lTGV4ZXIuanM/ZmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBSZW5kZXJlciA9IHJlcXVpcmUoJy4vUmVuZGVyZXIuanMnKTtcbmNvbnN0IHsgZGVmYXVsdHMgfSA9IHJlcXVpcmUoJy4vZGVmYXVsdHMuanMnKTtcbmNvbnN0IHsgaW5saW5lIH0gPSByZXF1aXJlKCcuL3J1bGVzLmpzJyk7XG5jb25zdCB7XG4gIGZpbmRDbG9zaW5nQnJhY2tldCxcbiAgZXNjYXBlXG59ID0gcmVxdWlyZSgnLi9oZWxwZXJzLmpzJyk7XG5cbi8qKlxuICogSW5saW5lIExleGVyICYgQ29tcGlsZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBJbmxpbmVMZXhlciB7XG4gIGNvbnN0cnVjdG9yKGxpbmtzLCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBkZWZhdWx0cztcbiAgICB0aGlzLmxpbmtzID0gbGlua3M7XG4gICAgdGhpcy5ydWxlcyA9IGlubGluZS5ub3JtYWw7XG4gICAgdGhpcy5vcHRpb25zLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IG5ldyBSZW5kZXJlcigpO1xuICAgIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gICAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYgKCF0aGlzLmxpbmtzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VucyBhcnJheSByZXF1aXJlcyBhIGBsaW5rc2AgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5wZWRhbnRpYztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtzKSB7XG4gICAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuYnJlYWtzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5nZm07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9zZSBJbmxpbmUgUnVsZXNcbiAgICovXG4gIHN0YXRpYyBnZXQgcnVsZXMoKSB7XG4gICAgcmV0dXJuIGlubGluZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgTGV4aW5nL0NvbXBpbGluZyBNZXRob2RcbiAgICovXG4gIHN0YXRpYyBvdXRwdXQoc3JjLCBsaW5rcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGlubGluZSA9IG5ldyBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGlubGluZS5vdXRwdXQoc3JjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXhpbmcvQ29tcGlsaW5nXG4gICAqL1xuICBvdXRwdXQoc3JjKSB7XG4gICAgbGV0IG91dCA9ICcnLFxuICAgICAgbGluayxcbiAgICAgIHRleHQsXG4gICAgICBocmVmLFxuICAgICAgdGl0bGUsXG4gICAgICBjYXAsXG4gICAgICBwcmV2Q2FwWmVybztcblxuICAgIHdoaWxlIChzcmMpIHtcbiAgICAgIC8vIGVzY2FwZVxuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvdXQgKz0gZXNjYXBlKGNhcFsxXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLnRhZy5leGVjKHNyYykpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluTGluayAmJiAvXjxhIC9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgIHRoaXMuaW5MaW5rID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluTGluayAmJiAvXjxcXC9hPi9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmluUmF3QmxvY2sgJiYgL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgIHRoaXMuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pblJhd0Jsb2NrICYmIC9ePFxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaS50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgICB0aGlzLmluUmF3QmxvY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIG91dCArPSB0aGlzLm9wdGlvbnMuc2FuaXRpemVcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXJcbiAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNhbml0aXplcihjYXBbMF0pXG4gICAgICAgICAgICA6IGVzY2FwZShjYXBbMF0pXG4gICAgICAgICAgOiBjYXBbMF07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBsaW5rXG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saW5rLmV4ZWMoc3JjKSkge1xuICAgICAgICBjb25zdCBsYXN0UGFyZW5JbmRleCA9IGZpbmRDbG9zaW5nQnJhY2tldChjYXBbMl0sICcoKScpO1xuICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPiAtMSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gY2FwWzBdLmluZGV4T2YoJyEnKSA9PT0gMCA/IDUgOiA0O1xuICAgICAgICAgIGNvbnN0IGxpbmtMZW4gPSBzdGFydCArIGNhcFsxXS5sZW5ndGggKyBsYXN0UGFyZW5JbmRleDtcbiAgICAgICAgICBjYXBbMl0gPSBjYXBbMl0uc3Vic3RyaW5nKDAsIGxhc3RQYXJlbkluZGV4KTtcbiAgICAgICAgICBjYXBbMF0gPSBjYXBbMF0uc3Vic3RyaW5nKDAsIGxpbmtMZW4pLnRyaW0oKTtcbiAgICAgICAgICBjYXBbM10gPSAnJztcbiAgICAgICAgfVxuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICAgIGhyZWYgPSBjYXBbMl07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICBsaW5rID0gL14oW14nXCJdKlteXFxzXSlcXHMrKFsnXCJdKSguKilcXDIvLmV4ZWMoaHJlZik7XG5cbiAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgaHJlZiA9IGxpbmtbMV07XG4gICAgICAgICAgICB0aXRsZSA9IGxpbmtbM107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpdGxlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlID0gY2FwWzNdID8gY2FwWzNdLnNsaWNlKDEsIC0xKSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIGhyZWYgPSBocmVmLnRyaW0oKS5yZXBsYWNlKC9ePChbXFxzXFxTXSopPiQvLCAnJDEnKTtcbiAgICAgICAgb3V0ICs9IHRoaXMub3V0cHV0TGluayhjYXAsIHtcbiAgICAgICAgICBocmVmOiBJbmxpbmVMZXhlci5lc2NhcGVzKGhyZWYpLFxuICAgICAgICAgIHRpdGxlOiBJbmxpbmVMZXhlci5lc2NhcGVzKHRpdGxlKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbkxpbmsgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlZmxpbmssIG5vbGlua1xuICAgICAgaWYgKChjYXAgPSB0aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhzcmMpKVxuICAgICAgICAgIHx8IChjYXAgPSB0aGlzLnJ1bGVzLm5vbGluay5leGVjKHNyYykpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGxpbmsgPSAoY2FwWzJdIHx8IGNhcFsxXSkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICAgICAgICBsaW5rID0gdGhpcy5saW5rc1tsaW5rLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAoIWxpbmsgfHwgIWxpbmsuaHJlZikge1xuICAgICAgICAgIG91dCArPSBjYXBbMF0uY2hhckF0KDApO1xuICAgICAgICAgIHNyYyA9IGNhcFswXS5zdWJzdHJpbmcoMSkgKyBzcmM7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbkxpbmsgPSB0cnVlO1xuICAgICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgbGluayk7XG4gICAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdHJvbmdcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLnN0cm9uZy5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGNhcFs0XSB8fCBjYXBbM10gfHwgY2FwWzJdIHx8IGNhcFsxXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZW1cbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmVtLmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChjYXBbNl0gfHwgY2FwWzVdIHx8IGNhcFs0XSB8fCBjYXBbM10gfHwgY2FwWzJdIHx8IGNhcFsxXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY29kZVxuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuY29kZS5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuY29kZXNwYW4oZXNjYXBlKGNhcFsyXS50cmltKCksIHRydWUpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGJyXG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5ici5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuYnIoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlbCAoZ2ZtKVxuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZGVsLmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoY2FwWzFdKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhdXRvbGlua1xuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGlmIChjYXBbMl0gPT09ICdAJykge1xuICAgICAgICAgIHRleHQgPSBlc2NhcGUodGhpcy5tYW5nbGUoY2FwWzFdKSk7XG4gICAgICAgICAgaHJlZiA9ICdtYWlsdG86JyArIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMV0pO1xuICAgICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB1cmwgKGdmbSlcbiAgICAgIGlmICghdGhpcy5pbkxpbmsgJiYgKGNhcCA9IHRoaXMucnVsZXMudXJsLmV4ZWMoc3JjKSkpIHtcbiAgICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMF0pO1xuICAgICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRvIGV4dGVuZGVkIGF1dG9saW5rIHBhdGggdmFsaWRhdGlvblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHByZXZDYXBaZXJvID0gY2FwWzBdO1xuICAgICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5fYmFja3BlZGFsLmV4ZWMoY2FwWzBdKVswXTtcbiAgICAgICAgICB9IHdoaWxlIChwcmV2Q2FwWmVybyAhPT0gY2FwWzBdKTtcbiAgICAgICAgICB0ZXh0ID0gZXNjYXBlKGNhcFswXSk7XG4gICAgICAgICAgaWYgKGNhcFsxXSA9PT0gJ3d3dy4nKSB7XG4gICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly8nICsgdGV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHJlZiA9IHRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXh0XG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy50ZXh0LmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBpZiAodGhpcy5pblJhd0Jsb2NrKSB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIudGV4dCh0aGlzLm9wdGlvbnMuc2FuaXRpemUgPyAodGhpcy5vcHRpb25zLnNhbml0aXplciA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIoY2FwWzBdKSA6IGVzY2FwZShjYXBbMF0pKSA6IGNhcFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIudGV4dChlc2NhcGUodGhpcy5zbWFydHlwYW50cyhjYXBbMF0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHN0YXRpYyBlc2NhcGVzKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dCA/IHRleHQucmVwbGFjZShJbmxpbmVMZXhlci5ydWxlcy5fZXNjYXBlcywgJyQxJykgOiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBpbGUgTGlua1xuICAgKi9cbiAgb3V0cHV0TGluayhjYXAsIGxpbmspIHtcbiAgICBjb25zdCBocmVmID0gbGluay5ocmVmLFxuICAgICAgdGl0bGUgPSBsaW5rLnRpdGxlID8gZXNjYXBlKGxpbmsudGl0bGUpIDogbnVsbDtcblxuICAgIHJldHVybiBjYXBbMF0uY2hhckF0KDApICE9PSAnISdcbiAgICAgID8gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIHRpdGxlLCB0aGlzLm91dHB1dChjYXBbMV0pKVxuICAgICAgOiB0aGlzLnJlbmRlcmVyLmltYWdlKGhyZWYsIHRpdGxlLCBlc2NhcGUoY2FwWzFdKSk7XG4gIH1cblxuICAvKipcbiAgICogU21hcnR5cGFudHMgVHJhbnNmb3JtYXRpb25zXG4gICAqL1xuICBzbWFydHlwYW50cyh0ZXh0KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnR5cGFudHMpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAvLyBlbS1kYXNoZXNcbiAgICAgIC5yZXBsYWNlKC8tLS0vZywgJ1xcdTIwMTQnKVxuICAgICAgLy8gZW4tZGFzaGVzXG4gICAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgICAgLy8gb3BlbmluZyBzaW5nbGVzXG4gICAgICAucmVwbGFjZSgvKF58Wy1cXHUyMDE0LyhcXFt7XCJcXHNdKScvZywgJyQxXFx1MjAxOCcpXG4gICAgICAvLyBjbG9zaW5nIHNpbmdsZXMgJiBhcG9zdHJvcGhlc1xuICAgICAgLnJlcGxhY2UoLycvZywgJ1xcdTIwMTknKVxuICAgICAgLy8gb3BlbmluZyBkb3VibGVzXG4gICAgICAucmVwbGFjZSgvKF58Wy1cXHUyMDE0LyhcXFt7XFx1MjAxOFxcc10pXCIvZywgJyQxXFx1MjAxYycpXG4gICAgICAvLyBjbG9zaW5nIGRvdWJsZXNcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnXFx1MjAxZCcpXG4gICAgICAvLyBlbGxpcHNlc1xuICAgICAgLnJlcGxhY2UoL1xcLnszfS9nLCAnXFx1MjAyNicpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmdsZSBMaW5rc1xuICAgKi9cbiAgbWFuZ2xlKHRleHQpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5tYW5nbGUpIHJldHVybiB0ZXh0O1xuICAgIGNvbnN0IGwgPSB0ZXh0Lmxlbmd0aDtcbiAgICBsZXQgb3V0ID0gJycsXG4gICAgICBpID0gMCxcbiAgICAgIGNoO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjUpIHtcbiAgICAgICAgY2ggPSAneCcgKyBjaC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyYjJyArIGNoICsgJzsnO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFGQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUF4QkE7QUFBQTtBQUNBO0FBc0NBOzs7QUF2Q0E7QUEyQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBM0JBO0FBQ0E7QUFDQTtBQTZCQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBN0RBO0FBQ0E7QUFDQTtBQStEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUE5RUE7QUFDQTtBQUNBO0FBZ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBckZBO0FBQ0E7QUFDQTtBQXVGQTtBQUNBO0FBQ0E7QUFDQTtBQTVGQTtBQUNBO0FBQ0E7QUE4RkE7QUFDQTtBQUNBO0FBQ0E7QUFuR0E7QUFDQTtBQUNBO0FBcUdBO0FBQ0E7QUFDQTtBQUNBO0FBMUdBO0FBQ0E7QUFDQTtBQTRHQTtBQUNBO0FBQ0E7QUFDQTtBQWpIQTtBQUNBO0FBQ0E7QUFtSEE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUEvSEE7QUFDQTtBQUNBO0FBaUlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUF0SkE7QUFDQTtBQUNBO0FBd0pBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN05BO0FBQUE7QUFDQTtBQWtPQTs7O0FBbk9BO0FBdU9BO0FBQUE7QUFHQTtBQUdBO0FBRUE7Ozs7QUEvT0E7QUFBQTtBQUFBO0FBbVBBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBO0FBRUE7Ozs7QUFyUUE7QUFBQTtBQUFBO0FBeVFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhSQTtBQUFBO0FBQ0E7QUE4QkE7OztBQS9CQTtBQW1DQTtBQUNBO0FBQ0E7QUFyQ0E7QUFBQTtBQUFBO0FBZ09BO0FBQ0E7QUFqT0E7QUFBQTtBQUFBO0FBNEJBO0FBQ0E7QUE3QkE7QUFDQTtBQURBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/marked/src/InlineLexer.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/Lexer.js": -/*!*******************************************!*\ - !*** ../node_modules/marked/src/Lexer.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nvar _require = __webpack_require__(/*! ./defaults.js */ \"../node_modules/marked/src/defaults.js\"),\n defaults = _require.defaults;\n\nvar _require2 = __webpack_require__(/*! ./rules.js */ \"../node_modules/marked/src/rules.js\"),\n block = _require2.block;\n\nvar _require3 = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n rtrim = _require3.rtrim,\n splitCells = _require3.splitCells,\n escape = _require3.escape;\n/**\n * Block Lexer\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function Lexer(options) {\n _classCallCheck(this, Lexer);\n\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults;\n this.rules = block.normal;\n\n if (this.options.pedantic) {\n this.rules = block.pedantic;\n } else if (this.options.gfm) {\n this.rules = block.gfm;\n }\n }\n /**\n * Expose Block Rules\n */\n\n\n _createClass(Lexer, [{\n key: \"lex\",\n\n /**\n * Preprocessing\n */\n value: function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n').replace(/\\t/g, ' ');\n return this.token(src, true);\n }\n }, {\n key: \"token\",\n\n /**\n * Lexing\n */\n value: function token(src, top) {\n src = src.replace(/^ +$/gm, '');\n var next, loose, cap, bull, b, item, listStart, listItems, t, space, i, tag, l, isordered, istask, ischecked;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n } // code\n\n\n if (cap = this.rules.code.exec(src)) {\n var lastToken = this.tokens[this.tokens.length - 1];\n src = src.substring(cap[0].length); // An indented code block cannot interrupt a paragraph.\n\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.text += '\\n' + cap[0].trimRight();\n } else {\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim(cap, '\\n') : cap\n });\n }\n\n continue;\n } // fences\n\n\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2] ? cap[2].trim() : cap[2],\n text: cap[3] || ''\n });\n continue;\n } // heading\n\n\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n } // table no leading pipe (gfm)\n\n\n if (cap = this.rules.nptable.exec(src)) {\n item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n src = src.substring(cap[0].length);\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = splitCells(item.cells[i], item.header.length);\n }\n\n this.tokens.push(item);\n continue;\n }\n } // hr\n\n\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n } // blockquote\n\n\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'blockquote_start'\n });\n cap = cap[0].replace(/^ *> ?/gm, ''); // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n\n this.token(cap, top);\n this.tokens.push({\n type: 'blockquote_end'\n });\n continue;\n } // list\n\n\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n isordered = bull.length > 1;\n listStart = {\n type: 'list_start',\n ordered: isordered,\n start: isordered ? +bull : '',\n loose: false\n };\n this.tokens.push(listStart); // Get each top-level item.\n\n cap = cap[0].match(this.rules.item);\n listItems = [];\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i]; // Remove the list item's bullet\n // so it is seen as the next token.\n\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) */, ''); // Outdent whatever the\n // list item contains. Hacky.\n\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, '');\n } // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n\n\n if (i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n\n if (bull.length > 1 ? b.length === 1 : b.length > 1 || this.options.smartLists && b !== bull) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n } // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n\n\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n listStart.loose = true;\n } // Check for task list items\n\n\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n\n t = {\n type: 'list_item_start',\n task: istask,\n checked: ischecked,\n loose: loose\n };\n listItems.push(t);\n this.tokens.push(t); // Recurse.\n\n this.token(item, false);\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n if (listStart.loose) {\n l = listItems.length;\n i = 0;\n\n for (; i < l; i++) {\n listItems[i].loose = true;\n }\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n continue;\n } // html\n\n\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize ? 'paragraph' : 'html',\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]\n });\n continue;\n } // def\n\n\n if (top && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n\n if (!this.tokens.links[tag]) {\n this.tokens.links[tag] = {\n href: cap[2],\n title: cap[3]\n };\n }\n\n continue;\n } // table (gfm)\n\n\n if (cap = this.rules.table.exec(src)) {\n item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n src = src.substring(cap[0].length);\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = splitCells(item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''), item.header.length);\n }\n\n this.tokens.push(item);\n continue;\n }\n } // lheading\n\n\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n } // top-level paragraph\n\n\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1]\n });\n continue;\n } // text\n\n\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n }\n }], [{\n key: \"lex\",\n\n /**\n * Static Lex Method\n */\n value: function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n }, {\n key: \"rules\",\n get: function get() {\n return block;\n }\n }]);\n\n return Lexer;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvTGV4ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvTGV4ZXIuanM/ZTcyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IGRlZmF1bHRzIH0gPSByZXF1aXJlKCcuL2RlZmF1bHRzLmpzJyk7XG5jb25zdCB7IGJsb2NrIH0gPSByZXF1aXJlKCcuL3J1bGVzLmpzJyk7XG5jb25zdCB7XG4gIHJ0cmltLFxuICBzcGxpdENlbGxzLFxuICBlc2NhcGVcbn0gPSByZXF1aXJlKCcuL2hlbHBlcnMuanMnKTtcblxuLyoqXG4gKiBCbG9jayBMZXhlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIExleGVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5zID0gW107XG4gICAgdGhpcy50b2tlbnMubGlua3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgZGVmYXVsdHM7XG4gICAgdGhpcy5ydWxlcyA9IGJsb2NrLm5vcm1hbDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay5wZWRhbnRpYztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay5nZm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9zZSBCbG9jayBSdWxlc1xuICAgKi9cbiAgc3RhdGljIGdldCBydWxlcygpIHtcbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIExleCBNZXRob2RcbiAgICovXG4gIHN0YXRpYyBsZXgoc3JjLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIGxleGVyLmxleChzcmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcmVwcm9jZXNzaW5nXG4gICAqL1xuICBsZXgoc3JjKSB7XG4gICAgc3JjID0gc3JjXG4gICAgICAucmVwbGFjZSgvXFxyXFxufFxcci9nLCAnXFxuJylcbiAgICAgIC5yZXBsYWNlKC9cXHQvZywgJyAgICAnKTtcblxuICAgIHJldHVybiB0aGlzLnRva2VuKHNyYywgdHJ1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIExleGluZ1xuICAgKi9cbiAgdG9rZW4oc3JjLCB0b3ApIHtcbiAgICBzcmMgPSBzcmMucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICAgIGxldCBuZXh0LFxuICAgICAgbG9vc2UsXG4gICAgICBjYXAsXG4gICAgICBidWxsLFxuICAgICAgYixcbiAgICAgIGl0ZW0sXG4gICAgICBsaXN0U3RhcnQsXG4gICAgICBsaXN0SXRlbXMsXG4gICAgICB0LFxuICAgICAgc3BhY2UsXG4gICAgICBpLFxuICAgICAgdGFnLFxuICAgICAgbCxcbiAgICAgIGlzb3JkZXJlZCxcbiAgICAgIGlzdGFzayxcbiAgICAgIGlzY2hlY2tlZDtcblxuICAgIHdoaWxlIChzcmMpIHtcbiAgICAgIC8vIG5ld2xpbmVcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGlmIChjYXBbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3NwYWNlJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvZGVcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmNvZGUuZXhlYyhzcmMpKSB7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICAvLyBBbiBpbmRlbnRlZCBjb2RlIGJsb2NrIGNhbm5vdCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGguXG4gICAgICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyBjYXBbMF0udHJpbVJpZ2h0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwID0gY2FwWzBdLnJlcGxhY2UoL14gezR9L2dtLCAnJyk7XG4gICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgICAgICBjb2RlQmxvY2tTdHlsZTogJ2luZGVudGVkJyxcbiAgICAgICAgICAgIHRleHQ6ICF0aGlzLm9wdGlvbnMucGVkYW50aWNcbiAgICAgICAgICAgICAgPyBydHJpbShjYXAsICdcXG4nKVxuICAgICAgICAgICAgICA6IGNhcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBmZW5jZXNcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmZlbmNlcy5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgIGxhbmc6IGNhcFsyXSA/IGNhcFsyXS50cmltKCkgOiBjYXBbMl0sXG4gICAgICAgICAgdGV4dDogY2FwWzNdIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaGVhZGluZ1xuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaGVhZGluZy5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICAgIGRlcHRoOiBjYXBbMV0ubGVuZ3RoLFxuICAgICAgICAgIHRleHQ6IGNhcFsyXVxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhYmxlIG5vIGxlYWRpbmcgcGlwZSAoZ2ZtKVxuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubnB0YWJsZS5leGVjKHNyYykpIHtcbiAgICAgICAgaXRlbSA9IHtcbiAgICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICAgIGhlYWRlcjogc3BsaXRDZWxscyhjYXBbMV0ucmVwbGFjZSgvXiAqfCAqXFx8ICokL2csICcnKSksXG4gICAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICAgIGNlbGxzOiBjYXBbM10gPyBjYXBbM10ucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJykgOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLmFsaWduLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgICBpdGVtLmFsaWduW2ldID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHtcbiAgICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rICokLy50ZXN0KGl0ZW0uYWxpZ25baV0pKSB7XG4gICAgICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnbGVmdCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVtLmFsaWduW2ldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbS5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXRlbS5jZWxsc1tpXSA9IHNwbGl0Q2VsbHMoaXRlbS5jZWxsc1tpXSwgaXRlbS5oZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKGl0ZW0pO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaHJcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhyLmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnaHInXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYmxvY2txdW90ZVxuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYmxvY2txdW90ZS5leGVjKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYmxvY2txdW90ZV9zdGFydCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2FwID0gY2FwWzBdLnJlcGxhY2UoL14gKj4gPy9nbSwgJycpO1xuXG4gICAgICAgIC8vIFBhc3MgYHRvcGAgdG8ga2VlcCB0aGUgY3VycmVudFxuICAgICAgICAvLyBcInRvcGxldmVsXCIgc3RhdGUuIFRoaXMgaXMgZXhhY3RseVxuICAgICAgICAvLyBob3cgbWFya2Rvd24ucGwgd29ya3MuXG4gICAgICAgIHRoaXMudG9rZW4oY2FwLCB0b3ApO1xuXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdibG9ja3F1b3RlX2VuZCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGxpc3RcbiAgICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmxpc3QuZXhlYyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGJ1bGwgPSBjYXBbMl07XG4gICAgICAgIGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcblxuICAgICAgICBsaXN0U3RhcnQgPSB7XG4gICAgICAgICAgdHlwZTogJ2xpc3Rfc3RhcnQnLFxuICAgICAgICAgIG9yZGVyZWQ6IGlzb3JkZXJlZCxcbiAgICAgICAgICBzdGFydDogaXNvcmRlcmVkID8gK2J1bGwgOiAnJyxcbiAgICAgICAgICBsb29zZTogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKGxpc3RTdGFydCk7XG5cbiAgICAgICAgLy8gR2V0IGVhY2ggdG9wLWxldmVsIGl0ZW0uXG4gICAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pO1xuXG4gICAgICAgIGxpc3RJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0ID0gZmFsc2U7XG4gICAgICAgIGwgPSBjYXAubGVuZ3RoO1xuICAgICAgICBpID0gMDtcblxuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGl0ZW0gPSBjYXBbaV07XG5cbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxpc3QgaXRlbSdzIGJ1bGxldFxuICAgICAgICAgIC8vIHNvIGl0IGlzIHNlZW4gYXMgdGhlIG5leHQgdG9rZW4uXG4gICAgICAgICAgc3BhY2UgPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9eICooWyorLV18XFxkK1xcLikgKi8sICcnKTtcblxuICAgICAgICAgIC8vIE91dGRlbnQgd2hhdGV2ZXIgdGhlXG4gICAgICAgICAgLy8gbGlzdCBpdGVtIGNvbnRhaW5zLiBIYWNreS5cbiAgICAgICAgICBpZiAofml0ZW0uaW5kZXhPZignXFxuICcpKSB7XG4gICAgICAgICAgICBzcGFjZSAtPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgICAgIGl0ZW0gPSAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgICAgID8gaXRlbS5yZXBsYWNlKG5ldyBSZWdFeHAoJ14gezEsJyArIHNwYWNlICsgJ30nLCAnZ20nKSwgJycpXG4gICAgICAgICAgICAgIDogaXRlbS5yZXBsYWNlKC9eIHsxLDR9L2dtLCAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5leHQgbGlzdCBpdGVtIGJlbG9uZ3MgaGVyZS5cbiAgICAgICAgICAvLyBCYWNrcGVkYWwgaWYgaXQgZG9lcyBub3QgYmVsb25nIGluIHRoaXMgbGlzdC5cbiAgICAgICAgICBpZiAoaSAhPT0gbCAtIDEpIHtcbiAgICAgICAgICAgIGIgPSBibG9jay5idWxsZXQuZXhlYyhjYXBbaSArIDFdKVswXTtcbiAgICAgICAgICAgIGlmIChidWxsLmxlbmd0aCA+IDEgPyBiLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICA6IChiLmxlbmd0aCA+IDEgfHwgKHRoaXMub3B0aW9ucy5zbWFydExpc3RzICYmIGIgIT09IGJ1bGwpKSkge1xuICAgICAgICAgICAgICBzcmMgPSBjYXAuc2xpY2UoaSArIDEpLmpvaW4oJ1xcbicpICsgc3JjO1xuICAgICAgICAgICAgICBpID0gbCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaXRlbSBpcyBsb29zZSBvciBub3QuXG4gICAgICAgICAgLy8gVXNlOiAvKF58XFxuKSg/ISApW15cXG5dK1xcblxcbig/IVxccyokKS9cbiAgICAgICAgICAvLyBmb3IgZGlzY291bnQgYmVoYXZpb3IuXG4gICAgICAgICAgbG9vc2UgPSBuZXh0IHx8IC9cXG5cXG4oPyFcXHMqJCkvLnRlc3QoaXRlbSk7XG4gICAgICAgICAgaWYgKGkgIT09IGwgLSAxKSB7XG4gICAgICAgICAgICBuZXh0ID0gaXRlbS5jaGFyQXQoaXRlbS5sZW5ndGggLSAxKSA9PT0gJ1xcbic7XG4gICAgICAgICAgICBpZiAoIWxvb3NlKSBsb29zZSA9IG5leHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxvb3NlKSB7XG4gICAgICAgICAgICBsaXN0U3RhcnQubG9vc2UgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGZvciB0YXNrIGxpc3QgaXRlbXNcbiAgICAgICAgICBpc3Rhc2sgPSAvXlxcW1sgeFhdXFxdIC8udGVzdChpdGVtKTtcbiAgICAgICAgICBpc2NoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGlzdGFzaykge1xuICAgICAgICAgICAgaXNjaGVja2VkID0gaXRlbVsxXSAhPT0gJyAnO1xuICAgICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW1fc3RhcnQnLFxuICAgICAgICAgICAgdGFzazogaXN0YXNrLFxuICAgICAgICAgICAgY2hlY2tlZDogaXNjaGVja2VkLFxuICAgICAgICAgICAgbG9vc2U6IGxvb3NlXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGxpc3RJdGVtcy5wdXNoKHQpO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godCk7XG5cbiAgICAgICAgICAvLyBSZWN1cnNlLlxuICAgICAgICAgIHRoaXMudG9rZW4oaXRlbSwgZmFsc2UpO1xuXG4gICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnbGlzdF9pdGVtX2VuZCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0U3RhcnQubG9vc2UpIHtcbiAgICAgICAgICBsID0gbGlzdEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICBpID0gMDtcbiAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbGlzdEl0ZW1zW2ldLmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnbGlzdF9lbmQnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBodG1sXG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5odG1sLmV4ZWMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiB0aGlzLm9wdGlvbnMuc2FuaXRpemVcbiAgICAgICAgICAgID8gJ3BhcmFncmFwaCdcbiAgICAgICAgICAgIDogJ2h0bWwnLFxuICAgICAgICAgIHByZTogIXRoaXMub3B0aW9ucy5zYW5pdGl6ZXJcbiAgICAgICAgICAgICYmIChjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnKSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLm9wdGlvbnMuc2FuaXRpemUgPyAodGhpcy5vcHRpb25zLnNhbml0aXplciA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIoY2FwWzBdKSA6IGVzY2FwZShjYXBbMF0pKSA6IGNhcFswXVxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlZlxuICAgICAgaWYgKHRvcCAmJiAoY2FwID0gdGhpcy5ydWxlcy5kZWYuZXhlYyhzcmMpKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBpZiAoY2FwWzNdKSBjYXBbM10gPSBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKTtcbiAgICAgICAgdGFnID0gY2FwWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICAgICAgICBpZiAoIXRoaXMudG9rZW5zLmxpbmtzW3RhZ10pIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5saW5rc1t0YWddID0ge1xuICAgICAgICAgICAgaHJlZjogY2FwWzJdLFxuICAgICAgICAgICAgdGl0bGU6IGNhcFszXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhYmxlIChnZm0pXG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy50YWJsZS5leGVjKHNyYykpIHtcbiAgICAgICAgaXRlbSA9IHtcbiAgICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICAgIGhlYWRlcjogc3BsaXRDZWxscyhjYXBbMV0ucmVwbGFjZSgvXiAqfCAqXFx8ICokL2csICcnKSksXG4gICAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICAgIGNlbGxzOiBjYXBbM10gPyBjYXBbM10ucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJykgOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLmFsaWduLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgICBpdGVtLmFsaWduW2ldID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHtcbiAgICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rICokLy50ZXN0KGl0ZW0uYWxpZ25baV0pKSB7XG4gICAgICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnbGVmdCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVtLmFsaWduW2ldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbS5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXRlbS5jZWxsc1tpXSA9IHNwbGl0Q2VsbHMoXG4gICAgICAgICAgICAgIGl0ZW0uY2VsbHNbaV0ucmVwbGFjZSgvXiAqXFx8ICp8ICpcXHwgKiQvZywgJycpLFxuICAgICAgICAgICAgICBpdGVtLmhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBsaGVhZGluZ1xuICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgICBkZXB0aDogY2FwWzJdLmNoYXJBdCgwKSA9PT0gJz0nID8gMSA6IDIsXG4gICAgICAgICAgdGV4dDogY2FwWzFdXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdG9wLWxldmVsIHBhcmFncmFwaFxuICAgICAgaWYgKHRvcCAmJiAoY2FwID0gdGhpcy5ydWxlcy5wYXJhZ3JhcGguZXhlYyhzcmMpKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICB0ZXh0OiBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICAgID8gY2FwWzFdLnNsaWNlKDAsIC0xKVxuICAgICAgICAgICAgOiBjYXBbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXh0XG4gICAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy50ZXh0LmV4ZWMoc3JjKSkge1xuICAgICAgICAvLyBUb3AtbGV2ZWwgc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUuXG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBjYXBbMF1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfTtcbn07XG4i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\n//# sourceURL=webpack-internal:///../node_modules/marked/src/Lexer.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/Parser.js": -/*!********************************************!*\ - !*** ../node_modules/marked/src/Parser.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nvar Renderer = __webpack_require__(/*! ./Renderer.js */ \"../node_modules/marked/src/Renderer.js\");\n\nvar Slugger = __webpack_require__(/*! ./Slugger.js */ \"../node_modules/marked/src/Slugger.js\");\n\nvar InlineLexer = __webpack_require__(/*! ./InlineLexer.js */ \"../node_modules/marked/src/InlineLexer.js\");\n\nvar TextRenderer = __webpack_require__(/*! ./TextRenderer.js */ \"../node_modules/marked/src/TextRenderer.js\");\n\nvar _require = __webpack_require__(/*! ./defaults.js */ \"../node_modules/marked/src/defaults.js\"),\n defaults = _require.defaults;\n\nvar _require2 = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n merge = _require2.merge,\n unescape = _require2.unescape;\n/**\n * Parsing & Compiling\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function Parser(options) {\n _classCallCheck(this, Parser);\n\n this.tokens = [];\n this.token = null;\n this.options = options || defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.slugger = new Slugger();\n }\n /**\n * Static Parse Method\n */\n\n\n _createClass(Parser, [{\n key: \"parse\",\n\n /**\n * Parse Loop\n */\n value: function parse(tokens) {\n this.inline = new InlineLexer(tokens.links, this.options); // use an InlineLexer with a TextRenderer to extract pure text\n\n this.inlineText = new InlineLexer(tokens.links, merge({}, this.options, {\n renderer: new TextRenderer()\n }));\n this.tokens = tokens.reverse();\n var out = '';\n\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n }\n }, {\n key: \"next\",\n\n /**\n * Next Token\n */\n value: function next() {\n this.token = this.tokens.pop();\n return this.token;\n }\n }, {\n key: \"peek\",\n\n /**\n * Preview Next Token\n */\n value: function peek() {\n return this.tokens[this.tokens.length - 1] || 0;\n }\n }, {\n key: \"parseText\",\n\n /**\n * Parse Text Tokens\n */\n value: function parseText() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n }\n }, {\n key: \"tok\",\n\n /**\n * Parse Current Token\n */\n value: function tok() {\n var body = '';\n\n switch (this.token.type) {\n case 'space':\n {\n return '';\n }\n\n case 'hr':\n {\n return this.renderer.hr();\n }\n\n case 'heading':\n {\n return this.renderer.heading(this.inline.output(this.token.text), this.token.depth, unescape(this.inlineText.output(this.token.text)), this.slugger);\n }\n\n case 'code':\n {\n return this.renderer.code(this.token.text, this.token.lang, this.token.escaped);\n }\n\n case 'table':\n {\n var header = '',\n i,\n row,\n cell,\n j; // header\n\n cell = '';\n\n for (i = 0; i < this.token.header.length; i++) {\n cell += this.renderer.tablecell(this.inline.output(this.token.header[i]), {\n header: true,\n align: this.token.align[i]\n });\n }\n\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n cell = '';\n\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(this.inline.output(row[j]), {\n header: false,\n align: this.token.align[j]\n });\n }\n\n body += this.renderer.tablerow(cell);\n }\n\n return this.renderer.table(header, body);\n }\n\n case 'blockquote_start':\n {\n body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n\n case 'list_start':\n {\n body = '';\n var ordered = this.token.ordered,\n start = this.token.start;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered, start);\n }\n\n case 'list_item_start':\n {\n body = '';\n var loose = this.token.loose;\n var checked = this.token.checked;\n var task = this.token.task;\n\n if (this.token.task) {\n if (loose) {\n if (this.peek().type === 'text') {\n var nextToken = this.peek();\n nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text;\n } else {\n this.tokens.push({\n type: 'text',\n text: this.renderer.checkbox(checked)\n });\n }\n } else {\n body += this.renderer.checkbox(checked);\n }\n }\n\n while (this.next().type !== 'list_item_end') {\n body += !loose && this.token.type === 'text' ? this.parseText() : this.tok();\n }\n\n return this.renderer.listitem(body, task, checked);\n }\n\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n return this.renderer.html(this.token.text);\n }\n\n case 'paragraph':\n {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n\n case 'text':\n {\n return this.renderer.paragraph(this.parseText());\n }\n\n default:\n {\n var errMsg = 'Token with \"' + this.token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.log(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n }], [{\n key: \"parse\",\n value: function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n }]);\n\n return Parser;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvUGFyc2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1BhcnNlci5qcz8yYjFlIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFJlbmRlcmVyID0gcmVxdWlyZSgnLi9SZW5kZXJlci5qcycpO1xuY29uc3QgU2x1Z2dlciA9IHJlcXVpcmUoJy4vU2x1Z2dlci5qcycpO1xuY29uc3QgSW5saW5lTGV4ZXIgPSByZXF1aXJlKCcuL0lubGluZUxleGVyLmpzJyk7XG5jb25zdCBUZXh0UmVuZGVyZXIgPSByZXF1aXJlKCcuL1RleHRSZW5kZXJlci5qcycpO1xuY29uc3QgeyBkZWZhdWx0cyB9ID0gcmVxdWlyZSgnLi9kZWZhdWx0cy5qcycpO1xuY29uc3Qge1xuICBtZXJnZSxcbiAgdW5lc2NhcGVcbn0gPSByZXF1aXJlKCcuL2hlbHBlcnMuanMnKTtcblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5zID0gW107XG4gICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBkZWZhdWx0cztcbiAgICB0aGlzLm9wdGlvbnMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXIgfHwgbmV3IFJlbmRlcmVyKCk7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlcjtcbiAgICB0aGlzLnJlbmRlcmVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5zbHVnZ2VyID0gbmV3IFNsdWdnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgUGFyc2UgTWV0aG9kXG4gICAqL1xuICBzdGF0aWMgcGFyc2UodG9rZW5zLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIExvb3BcbiAgICovXG4gIHBhcnNlKHRva2Vucykge1xuICAgIHRoaXMuaW5saW5lID0gbmV3IElubGluZUxleGVyKHRva2Vucy5saW5rcywgdGhpcy5vcHRpb25zKTtcbiAgICAvLyB1c2UgYW4gSW5saW5lTGV4ZXIgd2l0aCBhIFRleHRSZW5kZXJlciB0byBleHRyYWN0IHB1cmUgdGV4dFxuICAgIHRoaXMuaW5saW5lVGV4dCA9IG5ldyBJbmxpbmVMZXhlcihcbiAgICAgIHRva2Vucy5saW5rcyxcbiAgICAgIG1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHsgcmVuZGVyZXI6IG5ldyBUZXh0UmVuZGVyZXIoKSB9KVxuICAgICk7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnMucmV2ZXJzZSgpO1xuXG4gICAgbGV0IG91dCA9ICcnO1xuICAgIHdoaWxlICh0aGlzLm5leHQoKSkge1xuICAgICAgb3V0ICs9IHRoaXMudG9rKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvKipcbiAgICogTmV4dCBUb2tlblxuICAgKi9cbiAgbmV4dCgpIHtcbiAgICB0aGlzLnRva2VuID0gdGhpcy50b2tlbnMucG9wKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFByZXZpZXcgTmV4dCBUb2tlblxuICAgKi9cbiAgcGVlaygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoIC0gMV0gfHwgMDtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgVGV4dCBUb2tlbnNcbiAgICovXG4gIHBhcnNlVGV4dCgpIHtcbiAgICBsZXQgYm9keSA9IHRoaXMudG9rZW4udGV4dDtcblxuICAgIHdoaWxlICh0aGlzLnBlZWsoKS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIGJvZHkgKz0gJ1xcbicgKyB0aGlzLm5leHQoKS50ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlubGluZS5vdXRwdXQoYm9keSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIEN1cnJlbnQgVG9rZW5cbiAgICovXG4gIHRvaygpIHtcbiAgICBsZXQgYm9keSA9ICcnO1xuICAgIHN3aXRjaCAodGhpcy50b2tlbi50eXBlKSB7XG4gICAgICBjYXNlICdzcGFjZSc6IHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgY2FzZSAnaHInOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7XG4gICAgICB9XG4gICAgICBjYXNlICdoZWFkaW5nJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKFxuICAgICAgICAgIHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLFxuICAgICAgICAgIHRoaXMudG9rZW4uZGVwdGgsXG4gICAgICAgICAgdW5lc2NhcGUodGhpcy5pbmxpbmVUZXh0Lm91dHB1dCh0aGlzLnRva2VuLnRleHQpKSxcbiAgICAgICAgICB0aGlzLnNsdWdnZXIpO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29kZSc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsXG4gICAgICAgICAgdGhpcy50b2tlbi5sYW5nLFxuICAgICAgICAgIHRoaXMudG9rZW4uZXNjYXBlZCk7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgbGV0IGhlYWRlciA9ICcnLFxuICAgICAgICAgIGksXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNlbGwsXG4gICAgICAgICAgajtcblxuICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjZWxsICs9IHRoaXMucmVuZGVyZXIudGFibGVjZWxsKFxuICAgICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2ldKSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0cnVlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltpXSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXIgKz0gdGhpcy5yZW5kZXJlci50YWJsZXJvdyhjZWxsKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b2tlbi5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJvdyA9IHRoaXMudG9rZW4uY2VsbHNbaV07XG5cbiAgICAgICAgICBjZWxsID0gJyc7XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbChcbiAgICAgICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHJvd1tqXSksXG4gICAgICAgICAgICAgIHsgaGVhZGVyOiBmYWxzZSwgYWxpZ246IHRoaXMudG9rZW4uYWxpZ25bal0gfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBib2R5ICs9IHRoaXMucmVuZGVyZXIudGFibGVyb3coY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaGVhZGVyLCBib2R5KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGVfc3RhcnQnOiB7XG4gICAgICAgIGJvZHkgPSAnJztcblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2Jsb2NrcXVvdGVfZW5kJykge1xuICAgICAgICAgIGJvZHkgKz0gdGhpcy50b2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoYm9keSk7XG4gICAgICB9XG4gICAgICBjYXNlICdsaXN0X3N0YXJ0Jzoge1xuICAgICAgICBib2R5ID0gJyc7XG4gICAgICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnRva2VuLm9yZGVyZWQsXG4gICAgICAgICAgc3RhcnQgPSB0aGlzLnRva2VuLnN0YXJ0O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnbGlzdF9lbmQnKSB7XG4gICAgICAgICAgYm9keSArPSB0aGlzLnRvaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdChib2R5LCBvcmRlcmVkLCBzdGFydCk7XG4gICAgICB9XG4gICAgICBjYXNlICdsaXN0X2l0ZW1fc3RhcnQnOiB7XG4gICAgICAgIGJvZHkgPSAnJztcbiAgICAgICAgY29uc3QgbG9vc2UgPSB0aGlzLnRva2VuLmxvb3NlO1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGhpcy50b2tlbi5jaGVja2VkO1xuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy50b2tlbi50YXNrO1xuXG4gICAgICAgIGlmICh0aGlzLnRva2VuLnRhc2spIHtcbiAgICAgICAgICBpZiAobG9vc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgICAgICAgICAgIG5leHRUb2tlbi50ZXh0ID0gdGhpcy5yZW5kZXJlci5jaGVja2JveChjaGVja2VkKSArICcgJyArIG5leHRUb2tlbi50ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMucmVuZGVyZXIuY2hlY2tib3goY2hlY2tlZClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgKz0gdGhpcy5yZW5kZXJlci5jaGVja2JveChjaGVja2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfaXRlbV9lbmQnKSB7XG4gICAgICAgICAgYm9keSArPSAhbG9vc2UgJiYgdGhpcy50b2tlbi50eXBlID09PSAndGV4dCdcbiAgICAgICAgICAgID8gdGhpcy5wYXJzZVRleHQoKVxuICAgICAgICAgICAgOiB0aGlzLnRvaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGJvZHksIHRhc2ssIGNoZWNrZWQpO1xuICAgICAgfVxuICAgICAgY2FzZSAnaHRtbCc6IHtcbiAgICAgICAgLy8gVE9ETyBwYXJzZSBpbmxpbmUgY29udGVudCBpZiBwYXJhbWV0ZXIgbWFya2Rvd249MVxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKHRoaXMudG9rZW4udGV4dCk7XG4gICAgICB9XG4gICAgICBjYXNlICdwYXJhZ3JhcGgnOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7XG4gICAgICB9XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9ICdUb2tlbiB3aXRoIFwiJyArIHRoaXMudG9rZW4udHlwZSArICdcIiB0eXBlIHdhcyBub3QgZm91bmQuJztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUZBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFYQTtBQUFBO0FBQ0E7QUFrQkE7OztBQW5CQTtBQXVCQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckNBO0FBQUE7QUFDQTtBQXNDQTs7O0FBdkNBO0FBMkNBO0FBQ0E7QUFDQTtBQTdDQTtBQUFBO0FBQ0E7QUE4Q0E7OztBQS9DQTtBQW1EQTtBQUNBO0FBcERBO0FBQUE7QUFDQTtBQXFEQTs7O0FBdERBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqRUE7QUFBQTtBQUNBO0FBa0VBOzs7QUFuRUE7QUF1RUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFySEE7QUF1SEE7QUEvTEE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFEQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/marked/src/Parser.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/Renderer.js": -/*!**********************************************!*\ - !*** ../node_modules/marked/src/Renderer.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nvar _require = __webpack_require__(/*! ./defaults.js */ \"../node_modules/marked/src/defaults.js\"),\n defaults = _require.defaults;\n\nvar _require2 = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n cleanUrl = _require2.cleanUrl,\n escape = _require2.escape;\n/**\n * Renderer\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function Renderer(options) {\n _classCallCheck(this, Renderer);\n\n this.options = options || defaults;\n }\n\n _createClass(Renderer, [{\n key: \"code\",\n value: function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n\n if (!lang) {\n return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>';\n }\n\n return '<pre><code class=\"' + this.options.langPrefix + escape(lang, true) + '\">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\\n';\n }\n }, {\n key: \"blockquote\",\n value: function blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n }, {\n key: \"html\",\n value: function html(_html) {\n return _html;\n }\n }, {\n key: \"heading\",\n value: function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h' + level + ' id=\"' + this.options.headerPrefix + slugger.slug(raw) + '\">' + text + '</h' + level + '>\\n';\n } // ignore IDs\n\n\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n }, {\n key: \"hr\",\n value: function hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n }, {\n key: \"list\",\n value: function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n }, {\n key: \"listitem\",\n value: function listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n }, {\n key: \"checkbox\",\n value: function checkbox(checked) {\n return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n }\n }, {\n key: \"paragraph\",\n value: function paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n }, {\n key: \"table\",\n value: function table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n }\n }, {\n key: \"tablerow\",\n value: function tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n }, {\n key: \"tablecell\",\n value: function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? '<' + type + ' align=\"' + flags.align + '\">' : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n }, {\n key: \"strong\",\n // span level renderer\n value: function strong(text) {\n return '<strong>' + text + '</strong>';\n }\n }, {\n key: \"em\",\n value: function em(text) {\n return '<em>' + text + '</em>';\n }\n }, {\n key: \"codespan\",\n value: function codespan(text) {\n return '<code>' + text + '</code>';\n }\n }, {\n key: \"br\",\n value: function br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n }, {\n key: \"del\",\n value: function del(text) {\n return '<del>' + text + '</del>';\n }\n }, {\n key: \"link\",\n value: function link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<a href=\"' + escape(href) + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n }\n }, {\n key: \"image\",\n value: function image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n }, {\n key: \"text\",\n value: function text(_text) {\n return _text;\n }\n }]);\n\n return Renderer;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvUmVuZGVyZXIuanM/N2RmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IGRlZmF1bHRzIH0gPSByZXF1aXJlKCcuL2RlZmF1bHRzLmpzJyk7XG5jb25zdCB7XG4gIGNsZWFuVXJsLFxuICBlc2NhcGVcbn0gPSByZXF1aXJlKCcuL2hlbHBlcnMuanMnKTtcblxuLyoqXG4gKiBSZW5kZXJlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgZGVmYXVsdHM7XG4gIH1cblxuICBjb2RlKGNvZGUsIGluZm9zdHJpbmcsIGVzY2FwZWQpIHtcbiAgICBjb25zdCBsYW5nID0gKGluZm9zdHJpbmcgfHwgJycpLm1hdGNoKC9cXFMqLylbMF07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG91dCA9IHRoaXMub3B0aW9ucy5oaWdobGlnaHQoY29kZSwgbGFuZyk7XG4gICAgICBpZiAob3V0ICE9IG51bGwgJiYgb3V0ICE9PSBjb2RlKSB7XG4gICAgICAgIGVzY2FwZWQgPSB0cnVlO1xuICAgICAgICBjb2RlID0gb3V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGFuZykge1xuICAgICAgcmV0dXJuICc8cHJlPjxjb2RlPidcbiAgICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGUoY29kZSwgdHJ1ZSkpXG4gICAgICAgICsgJzwvY29kZT48L3ByZT4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHByZT48Y29kZSBjbGFzcz1cIidcbiAgICAgICsgdGhpcy5vcHRpb25zLmxhbmdQcmVmaXhcbiAgICAgICsgZXNjYXBlKGxhbmcsIHRydWUpXG4gICAgICArICdcIj4nXG4gICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICAgICsgJzwvY29kZT48L3ByZT5cXG4nO1xuICB9O1xuXG4gIGJsb2NrcXVvdGUocXVvdGUpIHtcbiAgICByZXR1cm4gJzxibG9ja3F1b3RlPlxcbicgKyBxdW90ZSArICc8L2Jsb2NrcXVvdGU+XFxuJztcbiAgfTtcblxuICBodG1sKGh0bWwpIHtcbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICBoZWFkaW5nKHRleHQsIGxldmVsLCByYXcsIHNsdWdnZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhlYWRlcklkcykge1xuICAgICAgcmV0dXJuICc8aCdcbiAgICAgICAgKyBsZXZlbFxuICAgICAgICArICcgaWQ9XCInXG4gICAgICAgICsgdGhpcy5vcHRpb25zLmhlYWRlclByZWZpeFxuICAgICAgICArIHNsdWdnZXIuc2x1ZyhyYXcpXG4gICAgICAgICsgJ1wiPidcbiAgICAgICAgKyB0ZXh0XG4gICAgICAgICsgJzwvaCdcbiAgICAgICAgKyBsZXZlbFxuICAgICAgICArICc+XFxuJztcbiAgICB9XG4gICAgLy8gaWdub3JlIElEc1xuICAgIHJldHVybiAnPGgnICsgbGV2ZWwgKyAnPicgKyB0ZXh0ICsgJzwvaCcgKyBsZXZlbCArICc+XFxuJztcbiAgfTtcblxuICBocigpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sID8gJzxoci8+XFxuJyA6ICc8aHI+XFxuJztcbiAgfTtcblxuICBsaXN0KGJvZHksIG9yZGVyZWQsIHN0YXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJyxcbiAgICAgIHN0YXJ0YXR0ID0gKG9yZGVyZWQgJiYgc3RhcnQgIT09IDEpID8gKCcgc3RhcnQ9XCInICsgc3RhcnQgKyAnXCInKSA6ICcnO1xuICAgIHJldHVybiAnPCcgKyB0eXBlICsgc3RhcnRhdHQgKyAnPlxcbicgKyBib2R5ICsgJzwvJyArIHR5cGUgKyAnPlxcbic7XG4gIH07XG5cbiAgbGlzdGl0ZW0odGV4dCkge1xuICAgIHJldHVybiAnPGxpPicgKyB0ZXh0ICsgJzwvbGk+XFxuJztcbiAgfTtcblxuICBjaGVja2JveChjaGVja2VkKSB7XG4gICAgcmV0dXJuICc8aW5wdXQgJ1xuICAgICAgKyAoY2hlY2tlZCA/ICdjaGVja2VkPVwiXCIgJyA6ICcnKVxuICAgICAgKyAnZGlzYWJsZWQ9XCJcIiB0eXBlPVwiY2hlY2tib3hcIidcbiAgICAgICsgKHRoaXMub3B0aW9ucy54aHRtbCA/ICcgLycgOiAnJylcbiAgICAgICsgJz4gJztcbiAgfTtcblxuICBwYXJhZ3JhcGgodGV4dCkge1xuICAgIHJldHVybiAnPHA+JyArIHRleHQgKyAnPC9wPlxcbic7XG4gIH07XG5cbiAgdGFibGUoaGVhZGVyLCBib2R5KSB7XG4gICAgaWYgKGJvZHkpIGJvZHkgPSAnPHRib2R5PicgKyBib2R5ICsgJzwvdGJvZHk+JztcblxuICAgIHJldHVybiAnPHRhYmxlPlxcbidcbiAgICAgICsgJzx0aGVhZD5cXG4nXG4gICAgICArIGhlYWRlclxuICAgICAgKyAnPC90aGVhZD5cXG4nXG4gICAgICArIGJvZHlcbiAgICAgICsgJzwvdGFibGU+XFxuJztcbiAgfTtcblxuICB0YWJsZXJvdyhjb250ZW50KSB7XG4gICAgcmV0dXJuICc8dHI+XFxuJyArIGNvbnRlbnQgKyAnPC90cj5cXG4nO1xuICB9O1xuXG4gIHRhYmxlY2VsbChjb250ZW50LCBmbGFncykge1xuICAgIGNvbnN0IHR5cGUgPSBmbGFncy5oZWFkZXIgPyAndGgnIDogJ3RkJztcbiAgICBjb25zdCB0YWcgPSBmbGFncy5hbGlnblxuICAgICAgPyAnPCcgKyB0eXBlICsgJyBhbGlnbj1cIicgKyBmbGFncy5hbGlnbiArICdcIj4nXG4gICAgICA6ICc8JyArIHR5cGUgKyAnPic7XG4gICAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbiAgfTtcblxuICAvLyBzcGFuIGxldmVsIHJlbmRlcmVyXG4gIHN0cm9uZyh0ZXh0KSB7XG4gICAgcmV0dXJuICc8c3Ryb25nPicgKyB0ZXh0ICsgJzwvc3Ryb25nPic7XG4gIH07XG5cbiAgZW0odGV4dCkge1xuICAgIHJldHVybiAnPGVtPicgKyB0ZXh0ICsgJzwvZW0+JztcbiAgfTtcblxuICBjb2Rlc3Bhbih0ZXh0KSB7XG4gICAgcmV0dXJuICc8Y29kZT4nICsgdGV4dCArICc8L2NvZGU+JztcbiAgfTtcblxuICBicigpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sID8gJzxici8+JyA6ICc8YnI+JztcbiAgfTtcblxuICBkZWwodGV4dCkge1xuICAgIHJldHVybiAnPGRlbD4nICsgdGV4dCArICc8L2RlbD4nO1xuICB9O1xuXG4gIGxpbmsoaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgICBocmVmID0gY2xlYW5VcmwodGhpcy5vcHRpb25zLnNhbml0aXplLCB0aGlzLm9wdGlvbnMuYmFzZVVybCwgaHJlZik7XG4gICAgaWYgKGhyZWYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBsZXQgb3V0ID0gJzxhIGhyZWY9XCInICsgZXNjYXBlKGhyZWYpICsgJ1wiJztcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgICB9XG4gICAgb3V0ICs9ICc+JyArIHRleHQgKyAnPC9hPic7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBpbWFnZShocmVmLCB0aXRsZSwgdGV4dCkge1xuICAgIGhyZWYgPSBjbGVhblVybCh0aGlzLm9wdGlvbnMuc2FuaXRpemUsIHRoaXMub3B0aW9ucy5iYXNlVXJsLCBocmVmKTtcbiAgICBpZiAoaHJlZiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgbGV0IG91dCA9ICc8aW1nIHNyYz1cIicgKyBocmVmICsgJ1wiIGFsdD1cIicgKyB0ZXh0ICsgJ1wiJztcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgICB9XG4gICAgb3V0ICs9IHRoaXMub3B0aW9ucy54aHRtbCA/ICcvPicgOiAnPic7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICB0ZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUZBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBTUE7QUEzQkE7QUFBQTtBQUFBO0FBOEJBO0FBQ0E7QUEvQkE7QUFBQTtBQUFBO0FBa0NBO0FBQ0E7QUFuQ0E7QUFBQTtBQUFBO0FBc0NBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBcERBO0FBQUE7QUFBQTtBQXVEQTtBQUNBO0FBeERBO0FBQUE7QUFBQTtBQTJEQTtBQUFBO0FBRUE7QUFDQTtBQTlEQTtBQUFBO0FBQUE7QUFpRUE7QUFDQTtBQWxFQTtBQUFBO0FBQUE7QUFxRUE7QUFLQTtBQTFFQTtBQUFBO0FBQUE7QUE2RUE7QUFDQTtBQTlFQTtBQUFBO0FBQUE7QUFpRkE7QUFFQTtBQU1BO0FBekZBO0FBQUE7QUFBQTtBQTRGQTtBQUNBO0FBN0ZBO0FBQUE7QUFBQTtBQWdHQTtBQUNBO0FBR0E7QUFDQTtBQXJHQTtBQUFBO0FBdUdBO0FBdkdBO0FBeUdBO0FBQ0E7QUExR0E7QUFBQTtBQUFBO0FBNkdBO0FBQ0E7QUE5R0E7QUFBQTtBQUFBO0FBaUhBO0FBQ0E7QUFsSEE7QUFBQTtBQUFBO0FBcUhBO0FBQ0E7QUF0SEE7QUFBQTtBQUFBO0FBeUhBO0FBQ0E7QUExSEE7QUFBQTtBQUFBO0FBNkhBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXZJQTtBQUFBO0FBQUE7QUEwSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBckpBO0FBQUE7QUFBQTtBQXdKQTtBQUNBO0FBekpBO0FBQ0E7QUFEQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/marked/src/Renderer.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/Slugger.js": -/*!*********************************************!*\ - !*** ../node_modules/marked/src/Slugger.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n/**\n * Slugger generates header id\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function Slugger() {\n _classCallCheck(this, Slugger);\n\n this.seen = {};\n }\n /**\n * Convert string to unique id\n */\n\n\n _createClass(Slugger, [{\n key: \"slug\",\n value: function slug(value) {\n var slug = value.toLowerCase().trim().replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n\n if (this.seen.hasOwnProperty(slug)) {\n var originalSlug = slug;\n\n do {\n this.seen[originalSlug]++;\n slug = originalSlug + '-' + this.seen[originalSlug];\n } while (this.seen.hasOwnProperty(slug));\n }\n\n this.seen[slug] = 0;\n return slug;\n }\n }]);\n\n return Slugger;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvU2x1Z2dlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWFya2VkL3NyYy9TbHVnZ2VyLmpzP2QwNmUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTbHVnZ2VyIGdlbmVyYXRlcyBoZWFkZXIgaWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTbHVnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZWVuID0ge307XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBzdHJpbmcgdG8gdW5pcXVlIGlkXG4gICAqL1xuICBzbHVnKHZhbHVlKSB7XG4gICAgbGV0IHNsdWcgPSB2YWx1ZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9bXFx1MjAwMC1cXHUyMDZGXFx1MkUwMC1cXHUyRTdGXFxcXCchXCIjJCUmKCkqKywuLzo7PD0+P0BbXFxdXmB7fH1+XS9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9cXHMvZywgJy0nKTtcblxuICAgIGlmICh0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoc2x1ZykpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2x1ZyA9IHNsdWc7XG4gICAgICBkbyB7XG4gICAgICAgIHRoaXMuc2VlbltvcmlnaW5hbFNsdWddKys7XG4gICAgICAgIHNsdWcgPSBvcmlnaW5hbFNsdWcgKyAnLScgKyB0aGlzLnNlZW5bb3JpZ2luYWxTbHVnXTtcbiAgICAgIH0gd2hpbGUgKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShzbHVnKSk7XG4gICAgfVxuICAgIHRoaXMuc2VlbltzbHVnXSA9IDA7XG5cbiAgICByZXR1cm4gc2x1ZztcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7OztBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUxBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUF6QkE7QUFDQTtBQURBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/marked/src/Slugger.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/TextRenderer.js": -/*!**************************************************!*\ - !*** ../node_modules/marked/src/TextRenderer.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\n\n\nmodule.exports = /*#__PURE__*/function () {\n function TextRenderer() {\n _classCallCheck(this, TextRenderer);\n }\n\n _createClass(TextRenderer, [{\n key: \"strong\",\n // no need for block level renderers\n value: function strong(text) {\n return text;\n }\n }, {\n key: \"em\",\n value: function em(text) {\n return text;\n }\n }, {\n key: \"codespan\",\n value: function codespan(text) {\n return text;\n }\n }, {\n key: \"del\",\n value: function del(text) {\n return text;\n }\n }, {\n key: \"text\",\n value: function text(_text) {\n return _text;\n }\n }, {\n key: \"link\",\n value: function link(href, title, text) {\n return '' + text;\n }\n }, {\n key: \"image\",\n value: function image(href, title, text) {\n return '' + text;\n }\n }, {\n key: \"br\",\n value: function br() {\n return '';\n }\n }]);\n\n return TextRenderer;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvVGV4dFJlbmRlcmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1RleHRSZW5kZXJlci5qcz8xNzZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGV4dFJlbmRlcmVyXG4gKiByZXR1cm5zIG9ubHkgdGhlIHRleHR1YWwgcGFydCBvZiB0aGUgdG9rZW5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0UmVuZGVyZXIge1xuICAvLyBubyBuZWVkIGZvciBibG9jayBsZXZlbCByZW5kZXJlcnNcbiAgc3Ryb25nKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGVtKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGNvZGVzcGFuKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGRlbCh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB0ZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGxpbmsoaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgICByZXR1cm4gJycgKyB0ZXh0O1xuICB9XG5cbiAgaW1hZ2UoaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgICByZXR1cm4gJycgKyB0ZXh0O1xuICB9XG5cbiAgYnIoKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQWhCQTtBQUFBO0FBQUE7QUFtQkE7QUFDQTtBQXBCQTtBQUFBO0FBQUE7QUF1QkE7QUFDQTtBQXhCQTtBQUFBO0FBQUE7QUEyQkE7QUFDQTtBQTVCQTtBQUFBO0FBQUE7QUErQkE7QUFDQTtBQWhDQTtBQUNBO0FBREE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/marked/src/TextRenderer.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/defaults.js": -/*!**********************************************!*\ - !*** ../node_modules/marked/src/defaults.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults: getDefaults,\n changeDefaults: changeDefaults\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvZGVmYXVsdHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvZGVmYXVsdHMuanM/NmUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBnZXREZWZhdWx0cygpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVXJsOiBudWxsLFxuICAgIGJyZWFrczogZmFsc2UsXG4gICAgZ2ZtOiB0cnVlLFxuICAgIGhlYWRlcklkczogdHJ1ZSxcbiAgICBoZWFkZXJQcmVmaXg6ICcnLFxuICAgIGhpZ2hsaWdodDogbnVsbCxcbiAgICBsYW5nUHJlZml4OiAnbGFuZ3VhZ2UtJyxcbiAgICBtYW5nbGU6IHRydWUsXG4gICAgcGVkYW50aWM6IGZhbHNlLFxuICAgIHJlbmRlcmVyOiBudWxsLFxuICAgIHNhbml0aXplOiBmYWxzZSxcbiAgICBzYW5pdGl6ZXI6IG51bGwsXG4gICAgc2lsZW50OiBmYWxzZSxcbiAgICBzbWFydExpc3RzOiBmYWxzZSxcbiAgICBzbWFydHlwYW50czogZmFsc2UsXG4gICAgeGh0bWw6IGZhbHNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZURlZmF1bHRzKG5ld0RlZmF1bHRzKSB7XG4gIG1vZHVsZS5leHBvcnRzLmRlZmF1bHRzID0gbmV3RGVmYXVsdHM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZWZhdWx0czogZ2V0RGVmYXVsdHMoKSxcbiAgZ2V0RGVmYXVsdHMsXG4gIGNoYW5nZURlZmF1bHRzXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/marked/src/defaults.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/helpers.js": -/*!*********************************************!*\ - !*** ../node_modules/marked/src/helpers.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Helpers\n */\nvar escapeTest = /[&<>\"']/;\nvar escapeReplace = /[&<>\"']/g;\nvar escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nvar escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nvar escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\n\nvar getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n};\n\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nvar unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n\n return '';\n });\n}\n\nvar caret = /(^|[^\\[])\\^/g;\n\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nvar nonWordAndColonTest = /[^\\w:]/g;\nvar originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n\n return href;\n}\n\nvar baseUrls = {};\nvar justDomain = /^[^:]+:\\/*[^/]*$/;\nvar protocol = /^([^:]+:)[\\s\\S]*$/;\nvar domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nvar noopTest = {\n exec: function noopTest() {}\n};\n\nfunction merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n\n return cells;\n} // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\n\n\nfunction rtrim(str, c, invert) {\n var l = str.length;\n\n if (l === 0) {\n return '';\n } // Length of suffix matching the invert condition.\n\n\n var suffLen = 0; // Step left until we fail to match the invert condition.\n\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n var l = str.length;\n var level = 0,\n i = 0;\n\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n\n if (level < 0) {\n return i;\n }\n }\n }\n\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\nmodule.exports = {\n escape: escape,\n unescape: unescape,\n edit: edit,\n cleanUrl: cleanUrl,\n resolveUrl: resolveUrl,\n noopTest: noopTest,\n merge: merge,\n splitCells: splitCells,\n rtrim: rtrim,\n findClosingBracket: findClosingBracket,\n checkSanitizeDeprecation: checkSanitizeDeprecation\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvaGVscGVycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWFya2VkL3NyYy9oZWxwZXJzLmpzPzAyNDMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWxwZXJzXG4gKi9cbmNvbnN0IGVzY2FwZVRlc3QgPSAvWyY8PlwiJ10vO1xuY29uc3QgZXNjYXBlUmVwbGFjZSA9IC9bJjw+XCInXS9nO1xuY29uc3QgZXNjYXBlVGVzdE5vRW5jb2RlID0gL1s8PlwiJ118Jig/ISM/XFx3KzspLztcbmNvbnN0IGVzY2FwZVJlcGxhY2VOb0VuY29kZSA9IC9bPD5cIiddfCYoPyEjP1xcdys7KS9nO1xuY29uc3QgZXNjYXBlUmVwbGFjZW1lbnRzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnXG59O1xuY29uc3QgZ2V0RXNjYXBlUmVwbGFjZW1lbnQgPSAoY2gpID0+IGVzY2FwZVJlcGxhY2VtZW50c1tjaF07XG5mdW5jdGlvbiBlc2NhcGUoaHRtbCwgZW5jb2RlKSB7XG4gIGlmIChlbmNvZGUpIHtcbiAgICBpZiAoZXNjYXBlVGVzdC50ZXN0KGh0bWwpKSB7XG4gICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKGVzY2FwZVJlcGxhY2UsIGdldEVzY2FwZVJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVzY2FwZVRlc3ROb0VuY29kZS50ZXN0KGh0bWwpKSB7XG4gICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKGVzY2FwZVJlcGxhY2VOb0VuY29kZSwgZ2V0RXNjYXBlUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBodG1sO1xufVxuXG5jb25zdCB1bmVzY2FwZVRlc3QgPSAvJigjKD86XFxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/OlxcdyspKTs/L2lnO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShodG1sKSB7XG4gIC8vIGV4cGxpY2l0bHkgbWF0Y2ggZGVjaW1hbCwgaGV4LCBhbmQgbmFtZWQgSFRNTCBlbnRpdGllc1xuICByZXR1cm4gaHRtbC5yZXBsYWNlKHVuZXNjYXBlVGVzdCwgKF8sIG4pID0+IHtcbiAgICBuID0gbi50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuID09PSAnY29sb24nKSByZXR1cm4gJzonO1xuICAgIGlmIChuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICByZXR1cm4gbi5jaGFyQXQoMSkgPT09ICd4J1xuICAgICAgICA/IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobi5zdWJzdHJpbmcoMiksIDE2KSlcbiAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSk7XG59XG5cbmNvbnN0IGNhcmV0ID0gLyhefFteXFxbXSlcXF4vZztcbmZ1bmN0aW9uIGVkaXQocmVnZXgsIG9wdCkge1xuICByZWdleCA9IHJlZ2V4LnNvdXJjZSB8fCByZWdleDtcbiAgb3B0ID0gb3B0IHx8ICcnO1xuICBjb25zdCBvYmogPSB7XG4gICAgcmVwbGFjZTogKG5hbWUsIHZhbCkgPT4ge1xuICAgICAgdmFsID0gdmFsLnNvdXJjZSB8fCB2YWw7XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZShjYXJldCwgJyQxJyk7XG4gICAgICByZWdleCA9IHJlZ2V4LnJlcGxhY2UobmFtZSwgdmFsKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBnZXRSZWdleDogKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsIG9wdCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub25Xb3JkQW5kQ29sb25UZXN0ID0gL1teXFx3Ol0vZztcbmNvbnN0IG9yaWdpbkluZGVwZW5kZW50VXJsID0gL14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtcbmZ1bmN0aW9uIGNsZWFuVXJsKHNhbml0aXplLCBiYXNlLCBocmVmKSB7XG4gIGlmIChzYW5pdGl6ZSkge1xuICAgIGxldCBwcm90O1xuICAgIHRyeSB7XG4gICAgICBwcm90ID0gZGVjb2RlVVJJQ29tcG9uZW50KHVuZXNjYXBlKGhyZWYpKVxuICAgICAgICAucmVwbGFjZShub25Xb3JkQW5kQ29sb25UZXN0LCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm90LmluZGV4T2YoJ2phdmFzY3JpcHQ6JykgPT09IDAgfHwgcHJvdC5pbmRleE9mKCd2YnNjcmlwdDonKSA9PT0gMCB8fCBwcm90LmluZGV4T2YoJ2RhdGE6JykgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoYmFzZSAmJiAhb3JpZ2luSW5kZXBlbmRlbnRVcmwudGVzdChocmVmKSkge1xuICAgIGhyZWYgPSByZXNvbHZlVXJsKGJhc2UsIGhyZWYpO1xuICB9XG4gIHRyeSB7XG4gICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKC8lMjUvZywgJyUnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBocmVmO1xufVxuXG5jb25zdCBiYXNlVXJscyA9IHt9O1xuY29uc3QganVzdERvbWFpbiA9IC9eW146XSs6XFwvKlteL10qJC87XG5jb25zdCBwcm90b2NvbCA9IC9eKFteOl0rOilbXFxzXFxTXSokLztcbmNvbnN0IGRvbWFpbiA9IC9eKFteOl0rOlxcLypbXi9dKilbXFxzXFxTXSokLztcblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlLCBocmVmKSB7XG4gIGlmICghYmFzZVVybHNbJyAnICsgYmFzZV0pIHtcbiAgICAvLyB3ZSBjYW4gaWdub3JlIGV2ZXJ5dGhpbmcgaW4gYmFzZSBhZnRlciB0aGUgbGFzdCBzbGFzaCBvZiBpdHMgcGF0aCBjb21wb25lbnQsXG4gICAgLy8gYnV0IHdlIG1pZ2h0IG5lZWQgdG8gYWRkIF90aGF0X1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tM1xuICAgIGlmIChqdXN0RG9tYWluLnRlc3QoYmFzZSkpIHtcbiAgICAgIGJhc2VVcmxzWycgJyArIGJhc2VdID0gYmFzZSArICcvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVVybHNbJyAnICsgYmFzZV0gPSBydHJpbShiYXNlLCAnLycsIHRydWUpO1xuICAgIH1cbiAgfVxuICBiYXNlID0gYmFzZVVybHNbJyAnICsgYmFzZV07XG4gIGNvbnN0IHJlbGF0aXZlQmFzZSA9IGJhc2UuaW5kZXhPZignOicpID09PSAtMTtcblxuICBpZiAoaHJlZi5zdWJzdHJpbmcoMCwgMikgPT09ICcvLycpIHtcbiAgICBpZiAocmVsYXRpdmVCYXNlKSB7XG4gICAgICByZXR1cm4gaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UucmVwbGFjZShwcm90b2NvbCwgJyQxJykgKyBocmVmO1xuICB9IGVsc2UgaWYgKGhyZWYuY2hhckF0KDApID09PSAnLycpIHtcbiAgICBpZiAocmVsYXRpdmVCYXNlKSB7XG4gICAgICByZXR1cm4gaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UucmVwbGFjZShkb21haW4sICckMScpICsgaHJlZjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZSArIGhyZWY7XG4gIH1cbn1cblxuY29uc3Qgbm9vcFRlc3QgPSB7IGV4ZWM6IGZ1bmN0aW9uIG5vb3BUZXN0KCkge30gfTtcblxuZnVuY3Rpb24gbWVyZ2Uob2JqKSB7XG4gIGxldCBpID0gMSxcbiAgICB0YXJnZXQsXG4gICAga2V5O1xuXG4gIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGFyZ2V0ID0gYXJndW1lbnRzW2ldO1xuICAgIGZvciAoa2V5IGluIHRhcmdldCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSB0YXJnZXRba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBzcGxpdENlbGxzKHRhYmxlUm93LCBjb3VudCkge1xuICAvLyBlbnN1cmUgdGhhdCBldmVyeSBjZWxsLWRlbGltaXRpbmcgcGlwZSBoYXMgYSBzcGFjZVxuICAvLyBiZWZvcmUgaXQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhbiBlc2NhcGVkIHBpcGVcbiAgY29uc3Qgcm93ID0gdGFibGVSb3cucmVwbGFjZSgvXFx8L2csIChtYXRjaCwgb2Zmc2V0LCBzdHIpID0+IHtcbiAgICAgIGxldCBlc2NhcGVkID0gZmFsc2UsXG4gICAgICAgIGN1cnIgPSBvZmZzZXQ7XG4gICAgICB3aGlsZSAoLS1jdXJyID49IDAgJiYgc3RyW2N1cnJdID09PSAnXFxcXCcpIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgIC8vIG9kZCBudW1iZXIgb2Ygc2xhc2hlcyBtZWFucyB8IGlzIGVzY2FwZWRcbiAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgYWxvbmVcbiAgICAgICAgcmV0dXJuICd8JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBzcGFjZSBiZWZvcmUgdW5lc2NhcGVkIHxcbiAgICAgICAgcmV0dXJuICcgfCc7XG4gICAgICB9XG4gICAgfSksXG4gICAgY2VsbHMgPSByb3cuc3BsaXQoLyBcXHwvKTtcbiAgbGV0IGkgPSAwO1xuXG4gIGlmIChjZWxscy5sZW5ndGggPiBjb3VudCkge1xuICAgIGNlbGxzLnNwbGljZShjb3VudCk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KSBjZWxscy5wdXNoKCcnKTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBwZXIgdGhlIGdmbSBzcGVjXG4gICAgY2VsbHNbaV0gPSBjZWxsc1tpXS50cmltKCkucmVwbGFjZSgvXFxcXFxcfC9nLCAnfCcpO1xuICB9XG4gIHJldHVybiBjZWxscztcbn1cblxuLy8gUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbi8vIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4vLyBpbnZlcnQ6IFJlbW92ZSBzdWZmaXggb2Ygbm9uLWMgY2hhcnMgaW5zdGVhZC4gRGVmYXVsdCBmYWxzZXkuXG5mdW5jdGlvbiBydHJpbShzdHIsIGMsIGludmVydCkge1xuICBjb25zdCBsID0gc3RyLmxlbmd0aDtcbiAgaWYgKGwgPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBMZW5ndGggb2Ygc3VmZml4IG1hdGNoaW5nIHRoZSBpbnZlcnQgY29uZGl0aW9uLlxuICBsZXQgc3VmZkxlbiA9IDA7XG5cbiAgLy8gU3RlcCBsZWZ0IHVudGlsIHdlIGZhaWwgdG8gbWF0Y2ggdGhlIGludmVydCBjb25kaXRpb24uXG4gIHdoaWxlIChzdWZmTGVuIDwgbCkge1xuICAgIGNvbnN0IGN1cnJDaGFyID0gc3RyLmNoYXJBdChsIC0gc3VmZkxlbiAtIDEpO1xuICAgIGlmIChjdXJyQ2hhciA9PT0gYyAmJiAhaW52ZXJ0KSB7XG4gICAgICBzdWZmTGVuKys7XG4gICAgfSBlbHNlIGlmIChjdXJyQ2hhciAhPT0gYyAmJiBpbnZlcnQpIHtcbiAgICAgIHN1ZmZMZW4rKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHIoMCwgbCAtIHN1ZmZMZW4pO1xufVxuXG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0JyYWNrZXQoc3RyLCBiKSB7XG4gIGlmIChzdHIuaW5kZXhPZihiWzFdKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgY29uc3QgbCA9IHN0ci5sZW5ndGg7XG4gIGxldCBsZXZlbCA9IDAsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gJ1xcXFwnKSB7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09IGJbMF0pIHtcbiAgICAgIGxldmVsKys7XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09IGJbMV0pIHtcbiAgICAgIGxldmVsLS07XG4gICAgICBpZiAobGV2ZWwgPCAwKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGNoZWNrU2FuaXRpemVEZXByZWNhdGlvbihvcHQpIHtcbiAgaWYgKG9wdCAmJiBvcHQuc2FuaXRpemUgJiYgIW9wdC5zaWxlbnQpIHtcbiAgICBjb25zb2xlLndhcm4oJ21hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMnKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXNjYXBlLFxuICB1bmVzY2FwZSxcbiAgZWRpdCxcbiAgY2xlYW5VcmwsXG4gIHJlc29sdmVVcmwsXG4gIG5vb3BUZXN0LFxuICBtZXJnZSxcbiAgc3BsaXRDZWxscyxcbiAgcnRyaW0sXG4gIGZpbmRDbG9zaW5nQnJhY2tldCxcbiAgY2hlY2tTYW5pdGl6ZURlcHJlY2F0aW9uXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBWEE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/marked/src/helpers.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/marked.js": -/*!********************************************!*\ - !*** ../node_modules/marked/src/marked.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar Lexer = __webpack_require__(/*! ./Lexer.js */ \"../node_modules/marked/src/Lexer.js\");\n\nvar Parser = __webpack_require__(/*! ./Parser.js */ \"../node_modules/marked/src/Parser.js\");\n\nvar Renderer = __webpack_require__(/*! ./Renderer.js */ \"../node_modules/marked/src/Renderer.js\");\n\nvar TextRenderer = __webpack_require__(/*! ./TextRenderer.js */ \"../node_modules/marked/src/TextRenderer.js\");\n\nvar InlineLexer = __webpack_require__(/*! ./InlineLexer.js */ \"../node_modules/marked/src/InlineLexer.js\");\n\nvar Slugger = __webpack_require__(/*! ./Slugger.js */ \"../node_modules/marked/src/Slugger.js\");\n\nvar _require = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n merge = _require.merge,\n checkSanitizeDeprecation = _require.checkSanitizeDeprecation,\n escape = _require.escape;\n\nvar _require2 = __webpack_require__(/*! ./defaults.js */ \"../node_modules/marked/src/defaults.js\"),\n getDefaults = _require2.getDefaults,\n changeDefaults = _require2.changeDefaults,\n defaults = _require2.defaults;\n/**\n * Marked\n */\n\n\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (callback || typeof opt === 'function') {\n var _ret = function () {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n var highlight = opt.highlight;\n var tokens,\n pending,\n i = 0;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return {\n v: callback(e)\n };\n }\n\n pending = tokens.length;\n\n var done = function done(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n return err ? callback(err) : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return {\n v: done()\n };\n }\n\n delete opt.highlight;\n if (!pending) return {\n v: done()\n };\n\n for (; i < tokens.length; i++) {\n (function (token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n\n return highlight(token.text, token.lang, function (err, code) {\n if (err) return done(err);\n\n if (code == null || code === token.text) {\n return --pending || done();\n }\n\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return {\n v: void 0\n };\n }();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n try {\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if ((opt || marked.defaults).silent) {\n return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n}\n/**\n * Options\n */\n\n\nmarked.options = marked.setOptions = function (opt) {\n merge(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\nmarked.defaults = defaults;\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\nmarked.Slugger = Slugger;\nmarked.parse = marked;\nmodule.exports = marked;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvbWFya2VkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL21hcmtlZC5qcz81OGQ4Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExleGVyID0gcmVxdWlyZSgnLi9MZXhlci5qcycpO1xuY29uc3QgUGFyc2VyID0gcmVxdWlyZSgnLi9QYXJzZXIuanMnKTtcbmNvbnN0IFJlbmRlcmVyID0gcmVxdWlyZSgnLi9SZW5kZXJlci5qcycpO1xuY29uc3QgVGV4dFJlbmRlcmVyID0gcmVxdWlyZSgnLi9UZXh0UmVuZGVyZXIuanMnKTtcbmNvbnN0IElubGluZUxleGVyID0gcmVxdWlyZSgnLi9JbmxpbmVMZXhlci5qcycpO1xuY29uc3QgU2x1Z2dlciA9IHJlcXVpcmUoJy4vU2x1Z2dlci5qcycpO1xuY29uc3Qge1xuICBtZXJnZSxcbiAgY2hlY2tTYW5pdGl6ZURlcHJlY2F0aW9uLFxuICBlc2NhcGVcbn0gPSByZXF1aXJlKCcuL2hlbHBlcnMuanMnKTtcbmNvbnN0IHtcbiAgZ2V0RGVmYXVsdHMsXG4gIGNoYW5nZURlZmF1bHRzLFxuICBkZWZhdWx0c1xufSA9IHJlcXVpcmUoJy4vZGVmYXVsdHMuanMnKTtcblxuLyoqXG4gKiBNYXJrZWRcbiAqL1xuZnVuY3Rpb24gbWFya2VkKHNyYywgb3B0LCBjYWxsYmFjaykge1xuICAvLyB0aHJvdyBlcnJvciBpbiBjYXNlIG9mIG5vbiBzdHJpbmcgaW5wdXRcbiAgaWYgKHR5cGVvZiBzcmMgPT09ICd1bmRlZmluZWQnIHx8IHNyYyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICB9XG4gIGlmICh0eXBlb2Ygc3JjICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignbWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICdcbiAgICAgICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNyYykgKyAnLCBzdHJpbmcgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChjYWxsYmFjayB8fCB0eXBlb2Ygb3B0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sgPSBvcHQ7XG4gICAgICBvcHQgPSBudWxsO1xuICAgIH1cblxuICAgIG9wdCA9IG1lcmdlKHt9LCBtYXJrZWQuZGVmYXVsdHMsIG9wdCB8fCB7fSk7XG4gICAgY2hlY2tTYW5pdGl6ZURlcHJlY2F0aW9uKG9wdCk7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gb3B0LmhpZ2hsaWdodDtcbiAgICBsZXQgdG9rZW5zLFxuICAgICAgcGVuZGluZyxcbiAgICAgIGkgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRva2VucyA9IExleGVyLmxleChzcmMsIG9wdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgIH1cblxuICAgIHBlbmRpbmcgPSB0b2tlbnMubGVuZ3RoO1xuXG4gICAgY29uc3QgZG9uZSA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBvcHQuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG91dDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0ID0gUGFyc2VyLnBhcnNlKHRva2Vucywgb3B0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyID0gZTtcbiAgICAgIH1cblxuICAgICAgb3B0LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcblxuICAgICAgcmV0dXJuIGVyclxuICAgICAgICA/IGNhbGxiYWNrKGVycilcbiAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvdXQpO1xuICAgIH07XG5cbiAgICBpZiAoIWhpZ2hsaWdodCB8fCBoaWdobGlnaHQubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgb3B0LmhpZ2hsaWdodDtcblxuICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUoKTtcblxuICAgIGZvciAoOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xuICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQodG9rZW4udGV4dCwgdG9rZW4ubGFuZywgZnVuY3Rpb24oZXJyLCBjb2RlKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IHRva2VuLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbi50ZXh0ID0gY29kZTtcbiAgICAgICAgICB0b2tlbi5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKHRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgb3B0ID0gbWVyZ2Uoe30sIG1hcmtlZC5kZWZhdWx0cywgb3B0IHx8IHt9KTtcbiAgICBjaGVja1Nhbml0aXplRGVwcmVjYXRpb24ob3B0KTtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKExleGVyLmxleChzcmMsIG9wdCksIG9wdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlLm1lc3NhZ2UgKz0gJ1xcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLic7XG4gICAgaWYgKChvcHQgfHwgbWFya2VkLmRlZmF1bHRzKS5zaWxlbnQpIHtcbiAgICAgIHJldHVybiAnPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+J1xuICAgICAgICArIGVzY2FwZShlLm1lc3NhZ2UgKyAnJywgdHJ1ZSlcbiAgICAgICAgKyAnPC9wcmU+JztcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnNcbiAqL1xuXG5tYXJrZWQub3B0aW9ucyA9XG5tYXJrZWQuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdCkge1xuICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7XG4gIGNoYW5nZURlZmF1bHRzKG1hcmtlZC5kZWZhdWx0cyk7XG4gIHJldHVybiBtYXJrZWQ7XG59O1xuXG5tYXJrZWQuZ2V0RGVmYXVsdHMgPSBnZXREZWZhdWx0cztcblxubWFya2VkLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5cbi8qKlxuICogRXhwb3NlXG4gKi9cblxubWFya2VkLlBhcnNlciA9IFBhcnNlcjtcbm1hcmtlZC5wYXJzZXIgPSBQYXJzZXIucGFyc2U7XG5cbm1hcmtlZC5SZW5kZXJlciA9IFJlbmRlcmVyO1xubWFya2VkLlRleHRSZW5kZXJlciA9IFRleHRSZW5kZXJlcjtcblxubWFya2VkLkxleGVyID0gTGV4ZXI7XG5tYXJrZWQubGV4ZXIgPSBMZXhlci5sZXg7XG5cbm1hcmtlZC5JbmxpbmVMZXhlciA9IElubGluZUxleGVyO1xubWFya2VkLmlubGluZUxleGVyID0gSW5saW5lTGV4ZXIub3V0cHV0O1xuXG5tYXJrZWQuU2x1Z2dlciA9IFNsdWdnZXI7XG5cbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcblxubW9kdWxlLmV4cG9ydHMgPSBtYXJrZWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUhBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFIQTtBQUNBO0FBQ0E7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBaEJBO0FBQ0E7QUFvQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFKQTtBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFuRUE7QUFDQTtBQURBO0FBb0VBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFFQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/marked/src/marked.js\n"); - -/***/ }), - -/***/ "../node_modules/marked/src/rules.js": -/*!*******************************************!*\ - !*** ../node_modules/marked/src/rules.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _require = __webpack_require__(/*! ./helpers.js */ \"../node_modules/marked/src/helpers.js\"),\n noopTest = _require.noopTest,\n edit = _require.edit,\n merge = _require.merge;\n/**\n * Block-Level Grammar\n */\n\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: /^ {0,3}(`{3,}|~{3,})([^`~\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6}) +([^\\n]*?)(?: +#+)? *(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?\\\\?>\\\\n*' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?>\\\\n*' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\\\\n*' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest,\n table: noopTest,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();\nblock.bullet = /(?:[*+-]|\\d{1,9}\\.)/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?!\\1bull ?)[^\\n]*)*/;\nblock.item = edit(block.item, 'gm').replace(/bull/g, block.bullet).getRegex();\nblock.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?-->/;\nblock.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nblock.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} +').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n.replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n.getRegex();\nblock.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n nptable: /^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:.*[^>\\n ].*(?:\\n|$))*)\\n*|$)/,\n table: /^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n((?: *[^>\\n ].*(?:\\n|$))*)\\n*|$)/\n});\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge({}, block.normal, {\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *(?:#+ *)?(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n});\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n strong: /^__([^\\s_])__(?!_)|^\\*\\*([^\\s*])\\*\\*(?!\\*)|^__([^\\s][\\s\\S]*?[^\\s])__(?!_)|^\\*\\*([^\\s][\\s\\S]*?[^\\s])\\*\\*(?!\\*)/,\n em: /^_([^\\s_])_(?!_)|^\\*([^\\s*<\\[])\\*(?!\\*)|^_([^\\s<][\\s\\S]*?[^\\s_])_(?!_|[^\\spunctuation])|^_([^\\s_<][\\s\\S]*?[^\\s])_(?!_|[^\\spunctuation])|^\\*([^\\s<\"][\\s\\S]*?[^\\s\\*])\\*(?!\\*|[^\\spunctuation])|^\\*([^\\s*\"<\\[][\\s\\S]*?[^\\s])\\*(?!\\*)/,\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*]|\\b_|$)|[^ ](?= {2,}\\n))|(?= {2,}\\n))/\n}; // list of punctuation marks from common mark spec\n// without ` and ] to workaround Rule 17 (inline code blocks/links)\n\ninline._punctuation = '!\"#$%&\\'()*+,\\\\-./:;<=>?@\\\\[^_{|}~';\ninline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\ninline.tag = edit(inline.tag).replace('comment', block._comment).replace('attribute', inline._attribute).getRegex();\ninline._label = /(?:\\[[^\\[\\]]*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\[<>]?|[^\\s<>\\\\])*>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\ninline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\ninline.reflink = edit(inline.reflink).replace('label', inline._label).getRegex();\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n});\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^~+(?=\\S)([\\s\\S]*?\\S)~+/,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*~]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?= {2,}\\n|[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\ninline.gfm.url = edit(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n});\nmodule.exports = {\n block: block,\n inline: inline\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvcnVsZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvcnVsZXMuanM/MjczOCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7XG4gIG5vb3BUZXN0LFxuICBlZGl0LFxuICBtZXJnZVxufSA9IHJlcXVpcmUoJy4vaGVscGVycy5qcycpO1xuXG4vKipcbiAqIEJsb2NrLUxldmVsIEdyYW1tYXJcbiAqL1xuY29uc3QgYmxvY2sgPSB7XG4gIG5ld2xpbmU6IC9eXFxuKy8sXG4gIGNvZGU6IC9eKCB7NH1bXlxcbl0rXFxuKikrLyxcbiAgZmVuY2VzOiAvXiB7MCwzfShgezMsfXx+ezMsfSkoW15gflxcbl0qKVxcbig/OnwoW1xcc1xcU10qPylcXG4pKD86IHswLDN9XFwxW35gXSogKig/Olxcbit8JCl8JCkvLFxuICBocjogL14gezAsM30oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpLyxcbiAgaGVhZGluZzogL14gezAsM30oI3sxLDZ9KSArKFteXFxuXSo/KSg/OiArIyspPyAqKD86XFxuK3wkKS8sXG4gIGJsb2NrcXVvdGU6IC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cXG5dKikoPzpcXG58JCkpKy8sXG4gIGxpc3Q6IC9eKCB7MCwzfSkoYnVsbCkgW1xcc1xcU10rPyg/OmhyfGRlZnxcXG57Mix9KD8hICkoPyFcXDFidWxsIClcXG4qfFxccyokKS8sXG4gIGh0bWw6ICdeIHswLDN9KD86JyAvLyBvcHRpb25hbCBpbmRlbnRhdGlvblxuICAgICsgJzwoc2NyaXB0fHByZXxzdHlsZSlbXFxcXHM+XVtcXFxcc1xcXFxTXSo/KD86PC9cXFxcMT5bXlxcXFxuXSpcXFxcbit8JCknIC8vICgxKVxuICAgICsgJ3xjb21tZW50W15cXFxcbl0qKFxcXFxuK3wkKScgLy8gKDIpXG4gICAgKyAnfDxcXFxcP1tcXFxcc1xcXFxTXSo/XFxcXD8+XFxcXG4qJyAvLyAoMylcbiAgICArICd8PCFbQS1aXVtcXFxcc1xcXFxTXSo/PlxcXFxuKicgLy8gKDQpXG4gICAgKyAnfDwhXFxcXFtDREFUQVxcXFxbW1xcXFxzXFxcXFNdKj9cXFxcXVxcXFxdPlxcXFxuKicgLy8gKDUpXG4gICAgKyAnfDwvPyh0YWcpKD86ICt8XFxcXG58Lz8+KVtcXFxcc1xcXFxTXSo/KD86XFxcXG57Mix9fCQpJyAvLyAoNilcbiAgICArICd8PCg/IXNjcmlwdHxwcmV8c3R5bGUpKFthLXpdW1xcXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzpcXFxcbnsyLH18JCknIC8vICg3KSBvcGVuIHRhZ1xuICAgICsgJ3w8Lyg/IXNjcmlwdHxwcmV8c3R5bGUpW2Etel1bXFxcXHctXSpcXFxccyo+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzpcXFxcbnsyLH18JCknIC8vICg3KSBjbG9zaW5nIHRhZ1xuICAgICsgJyknLFxuICBkZWY6IC9eIHswLDN9XFxbKGxhYmVsKVxcXTogKlxcbj8gKjw/KFteXFxzPl0rKT4/KD86KD86ICtcXG4/ICp8ICpcXG4gKikodGl0bGUpKT8gKig/Olxcbit8JCkvLFxuICBucHRhYmxlOiBub29wVGVzdCxcbiAgdGFibGU6IG5vb3BUZXN0LFxuICBsaGVhZGluZzogL14oW15cXG5dKylcXG4gezAsM30oPSt8LSspICooPzpcXG4rfCQpLyxcbiAgLy8gcmVnZXggdGVtcGxhdGUsIHBsYWNlaG9sZGVycyB3aWxsIGJlIHJlcGxhY2VkIGFjY29yZGluZyB0byBkaWZmZXJlbnQgcGFyYWdyYXBoXG4gIC8vIGludGVycnVwdGlvbiBydWxlcyBvZiBjb21tb25tYXJrIGFuZCB0aGUgb3JpZ2luYWwgbWFya2Rvd24gc3BlYzpcbiAgX3BhcmFncmFwaDogL14oW15cXG5dKyg/Olxcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sKVteXFxuXSspKikvLFxuICB0ZXh0OiAvXlteXFxuXSsvXG59O1xuXG5ibG9jay5fbGFiZWwgPSAvKD8hXFxzKlxcXSkoPzpcXFxcW1xcW1xcXV18W15cXFtcXF1dKSsvO1xuYmxvY2suX3RpdGxlID0gLyg/OlwiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCdbXidcXG5dKig/OlxcblteJ1xcbl0rKSpcXG4/J3xcXChbXigpXSpcXCkpLztcbmJsb2NrLmRlZiA9IGVkaXQoYmxvY2suZGVmKVxuICAucmVwbGFjZSgnbGFiZWwnLCBibG9jay5fbGFiZWwpXG4gIC5yZXBsYWNlKCd0aXRsZScsIGJsb2NrLl90aXRsZSlcbiAgLmdldFJlZ2V4KCk7XG5cbmJsb2NrLmJ1bGxldCA9IC8oPzpbKistXXxcXGR7MSw5fVxcLikvO1xuYmxvY2suaXRlbSA9IC9eKCAqKShidWxsKSA/W15cXG5dKig/Olxcbig/IVxcMWJ1bGwgPylbXlxcbl0qKSovO1xuYmxvY2suaXRlbSA9IGVkaXQoYmxvY2suaXRlbSwgJ2dtJylcbiAgLnJlcGxhY2UoL2J1bGwvZywgYmxvY2suYnVsbGV0KVxuICAuZ2V0UmVnZXgoKTtcblxuYmxvY2subGlzdCA9IGVkaXQoYmxvY2subGlzdClcbiAgLnJlcGxhY2UoL2J1bGwvZywgYmxvY2suYnVsbGV0KVxuICAucmVwbGFjZSgnaHInLCAnXFxcXG4rKD89XFxcXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFxcXCogKil7Myx9KSg/OlxcXFxuK3wkKSknKVxuICAucmVwbGFjZSgnZGVmJywgJ1xcXFxuKyg/PScgKyBibG9jay5kZWYuc291cmNlICsgJyknKVxuICAuZ2V0UmVnZXgoKTtcblxuYmxvY2suX3RhZyA9ICdhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbidcbiAgKyAnfGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9uJ1xuICArICd8ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZSdcbiAgKyAnfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb24nXG4gICsgJ3xwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHInXG4gICsgJ3x0cmFja3x1bCc7XG5ibG9jay5fY29tbWVudCA9IC88IS0tKD8hLT8+KVtcXHNcXFNdKj8tLT4vO1xuYmxvY2suaHRtbCA9IGVkaXQoYmxvY2suaHRtbCwgJ2knKVxuICAucmVwbGFjZSgnY29tbWVudCcsIGJsb2NrLl9jb21tZW50KVxuICAucmVwbGFjZSgndGFnJywgYmxvY2suX3RhZylcbiAgLnJlcGxhY2UoJ2F0dHJpYnV0ZScsIC8gK1thLXpBLVo6X11bXFx3LjotXSooPzogKj0gKlwiW15cIlxcbl0qXCJ8ICo9IConW14nXFxuXSonfCAqPSAqW15cXHNcIic9PD5gXSspPy8pXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5wYXJhZ3JhcGggPSBlZGl0KGJsb2NrLl9wYXJhZ3JhcGgpXG4gIC5yZXBsYWNlKCdocicsIGJsb2NrLmhyKVxuICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0gKycpXG4gIC5yZXBsYWNlKCd8bGhlYWRpbmcnLCAnJykgLy8gc2V0ZXggaGVhZGluZ3MgZG9uJ3QgaW50ZXJydXB0IGNvbW1vbm1hcmsgcGFyYWdyYXBoc1xuICAucmVwbGFjZSgnYmxvY2txdW90ZScsICcgezAsM30+JylcbiAgLnJlcGxhY2UoJ2ZlbmNlcycsICcgezAsM30oPzpgezMsfXx+ezMsfSlbXmBcXFxcbl0qXFxcXG4nKVxuICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSkgJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXwhLS0pJylcbiAgLnJlcGxhY2UoJ3RhZycsIGJsb2NrLl90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5ibG9ja3F1b3RlID0gZWRpdChibG9jay5ibG9ja3F1b3RlKVxuICAucmVwbGFjZSgncGFyYWdyYXBoJywgYmxvY2sucGFyYWdyYXBoKVxuICAuZ2V0UmVnZXgoKTtcblxuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLm5vcm1hbCA9IG1lcmdlKHt9LCBibG9jayk7XG5cbi8qKlxuICogR0ZNIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5ibG9jay5nZm0gPSBtZXJnZSh7fSwgYmxvY2subm9ybWFsLCB7XG4gIG5wdGFibGU6IC9eICooW158XFxuIF0uKlxcfC4qKVxcbiAqKFstOl0rICpcXHxbLXwgOl0qKSg/OlxcbigoPzouKltePlxcbiBdLiooPzpcXG58JCkpKilcXG4qfCQpLyxcbiAgdGFibGU6IC9eICpcXHwoLispXFxuICpcXHw/KCAqWy06XStbLXwgOl0qKSg/OlxcbigoPzogKltePlxcbiBdLiooPzpcXG58JCkpKilcXG4qfCQpL1xufSk7XG5cbi8qKlxuICogUGVkYW50aWMgZ3JhbW1hciAob3JpZ2luYWwgSm9obiBHcnViZXIncyBsb29zZSBtYXJrZG93biBzcGVjaWZpY2F0aW9uKVxuICovXG5cbmJsb2NrLnBlZGFudGljID0gbWVyZ2Uoe30sIGJsb2NrLm5vcm1hbCwge1xuICBodG1sOiBlZGl0KFxuICAgICdeICooPzpjb21tZW50ICooPzpcXFxcbnxcXFxccyokKSdcbiAgICArICd8PCh0YWcpW1xcXFxzXFxcXFNdKz88L1xcXFwxPiAqKD86XFxcXG57Mix9fFxcXFxzKiQpJyAvLyBjbG9zZWQgdGFnXG4gICAgKyAnfDx0YWcoPzpcIlteXCJdKlwifFxcJ1teXFwnXSpcXCd8XFxcXHNbXlxcJ1wiLz5cXFxcc10qKSo/Lz8+ICooPzpcXFxcbnsyLH18XFxcXHMqJCkpJylcbiAgICAucmVwbGFjZSgnY29tbWVudCcsIGJsb2NrLl9jb21tZW50KVxuICAgIC5yZXBsYWNlKC90YWcvZywgJyg/ISg/OidcbiAgICAgICsgJ2F8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWInXG4gICAgICArICd8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKSdcbiAgICAgICsgJ1xcXFxiKVxcXFx3Kyg/ITp8W15cXFxcd1xcXFxzQF0qQClcXFxcYicpXG4gICAgLmdldFJlZ2V4KCksXG4gIGRlZjogL14gKlxcWyhbXlxcXV0rKVxcXTogKjw/KFteXFxzPl0rKT4/KD86ICsoW1wiKF1bXlxcbl0rW1wiKV0pKT8gKig/Olxcbit8JCkvLFxuICBoZWFkaW5nOiAvXiAqKCN7MSw2fSkgKihbXlxcbl0rPykgKig/OiMrICopPyg/Olxcbit8JCkvLFxuICBmZW5jZXM6IG5vb3BUZXN0LCAvLyBmZW5jZXMgbm90IHN1cHBvcnRlZFxuICBwYXJhZ3JhcGg6IGVkaXQoYmxvY2subm9ybWFsLl9wYXJhZ3JhcGgpXG4gICAgLnJlcGxhY2UoJ2hyJywgYmxvY2suaHIpXG4gICAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnICojezEsNn0gKlteXFxuXScpXG4gICAgLnJlcGxhY2UoJ2xoZWFkaW5nJywgYmxvY2subGhlYWRpbmcpXG4gICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgLnJlcGxhY2UoJ3xmZW5jZXMnLCAnJylcbiAgICAucmVwbGFjZSgnfGxpc3QnLCAnJylcbiAgICAucmVwbGFjZSgnfGh0bWwnLCAnJylcbiAgICAuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogSW5saW5lLUxldmVsIEdyYW1tYXJcbiAqL1xuY29uc3QgaW5saW5lID0ge1xuICBlc2NhcGU6IC9eXFxcXChbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFxcW1xcXVxcXFxeX2B7fH1+XSkvLFxuICBhdXRvbGluazogL148KHNjaGVtZTpbXlxcc1xceDAwLVxceDFmPD5dKnxlbWFpbCk+LyxcbiAgdXJsOiBub29wVGVzdCxcbiAgdGFnOiAnXmNvbW1lbnQnXG4gICAgKyAnfF48L1thLXpBLVpdW1xcXFx3Oi1dKlxcXFxzKj4nIC8vIHNlbGYtY2xvc2luZyB0YWdcbiAgICArICd8XjxbYS16QS1aXVtcXFxcdy1dKig/OmF0dHJpYnV0ZSkqP1xcXFxzKi8/PicgLy8gb3BlbiB0YWdcbiAgICArICd8XjxcXFxcP1tcXFxcc1xcXFxTXSo/XFxcXD8+JyAvLyBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCBlLmcuIDw/cGhwID8+XG4gICAgKyAnfF48IVthLXpBLVpdK1xcXFxzW1xcXFxzXFxcXFNdKj8+JyAvLyBkZWNsYXJhdGlvbiwgZS5nLiA8IURPQ1RZUEUgaHRtbD5cbiAgICArICd8XjwhXFxcXFtDREFUQVxcXFxbW1xcXFxzXFxcXFNdKj9cXFxcXVxcXFxdPicsIC8vIENEQVRBIHNlY3Rpb25cbiAgbGluazogL14hP1xcWyhsYWJlbClcXF1cXChcXHMqKGhyZWYpKD86XFxzKyh0aXRsZSkpP1xccypcXCkvLFxuICByZWZsaW5rOiAvXiE/XFxbKGxhYmVsKVxcXVxcWyg/IVxccypcXF0pKCg/OlxcXFxbXFxbXFxdXT98W15cXFtcXF1cXFxcXSkrKVxcXS8sXG4gIG5vbGluazogL14hP1xcWyg/IVxccypcXF0pKCg/OlxcW1teXFxbXFxdXSpcXF18XFxcXFtcXFtcXF1dfFteXFxbXFxdXSkqKVxcXSg/OlxcW1xcXSk/LyxcbiAgc3Ryb25nOiAvXl9fKFteXFxzX10pX18oPyFfKXxeXFwqXFwqKFteXFxzKl0pXFwqXFwqKD8hXFwqKXxeX18oW15cXHNdW1xcc1xcU10qP1teXFxzXSlfXyg/IV8pfF5cXCpcXCooW15cXHNdW1xcc1xcU10qP1teXFxzXSlcXCpcXCooPyFcXCopLyxcbiAgZW06IC9eXyhbXlxcc19dKV8oPyFfKXxeXFwqKFteXFxzKjxcXFtdKVxcKig/IVxcKil8Xl8oW15cXHM8XVtcXHNcXFNdKj9bXlxcc19dKV8oPyFffFteXFxzcHVuY3R1YXRpb25dKXxeXyhbXlxcc188XVtcXHNcXFNdKj9bXlxcc10pXyg/IV98W15cXHNwdW5jdHVhdGlvbl0pfF5cXCooW15cXHM8XCJdW1xcc1xcU10qP1teXFxzXFwqXSlcXCooPyFcXCp8W15cXHNwdW5jdHVhdGlvbl0pfF5cXCooW15cXHMqXCI8XFxbXVtcXHNcXFNdKj9bXlxcc10pXFwqKD8hXFwqKS8sXG4gIGNvZGU6IC9eKGArKShbXmBdfFteYF1bXFxzXFxTXSo/W15gXSlcXDEoPyFgKS8sXG4gIGJyOiAvXiggezIsfXxcXFxcKVxcbig/IVxccyokKS8sXG4gIGRlbDogbm9vcFRlc3QsXG4gIHRleHQ6IC9eKGArfFteYF0pKD86W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKl18XFxiX3wkKXxbXiBdKD89IHsyLH1cXG4pKXwoPz0gezIsfVxcbikpL1xufTtcblxuLy8gbGlzdCBvZiBwdW5jdHVhdGlvbiBtYXJrcyBmcm9tIGNvbW1vbiBtYXJrIHNwZWNcbi8vIHdpdGhvdXQgYCBhbmQgXSB0byB3b3JrYXJvdW5kIFJ1bGUgMTcgKGlubGluZSBjb2RlIGJsb2Nrcy9saW5rcylcbmlubGluZS5fcHVuY3R1YXRpb24gPSAnIVwiIyQlJlxcJygpKissXFxcXC0uLzo7PD0+P0BcXFxcW15fe3x9fic7XG5pbmxpbmUuZW0gPSBlZGl0KGlubGluZS5lbSkucmVwbGFjZSgvcHVuY3R1YXRpb24vZywgaW5saW5lLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtcblxuaW5saW5lLl9lc2NhcGVzID0gL1xcXFwoWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BcXFtcXF1cXFxcXl9ge3x9fl0pL2c7XG5cbmlubGluZS5fc2NoZW1lID0gL1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vO1xuaW5saW5lLl9lbWFpbCA9IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvO1xuaW5saW5lLmF1dG9saW5rID0gZWRpdChpbmxpbmUuYXV0b2xpbmspXG4gIC5yZXBsYWNlKCdzY2hlbWUnLCBpbmxpbmUuX3NjaGVtZSlcbiAgLnJlcGxhY2UoJ2VtYWlsJywgaW5saW5lLl9lbWFpbClcbiAgLmdldFJlZ2V4KCk7XG5cbmlubGluZS5fYXR0cmlidXRlID0gL1xccytbYS16QS1aOl9dW1xcdy46LV0qKD86XFxzKj1cXHMqXCJbXlwiXSpcInxcXHMqPVxccyonW14nXSonfFxccyo9XFxzKlteXFxzXCInPTw+YF0rKT8vO1xuXG5pbmxpbmUudGFnID0gZWRpdChpbmxpbmUudGFnKVxuICAucmVwbGFjZSgnY29tbWVudCcsIGJsb2NrLl9jb21tZW50KVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgaW5saW5lLl9hdHRyaWJ1dGUpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUuX2xhYmVsID0gLyg/OlxcW1teXFxbXFxdXSpcXF18XFxcXC58YFteYF0qYHxbXlxcW1xcXVxcXFxgXSkqPy87XG5pbmxpbmUuX2hyZWYgPSAvPCg/OlxcXFxbPD5dP3xbXlxcczw+XFxcXF0pKj58W15cXHNcXHgwMC1cXHgxZl0qLztcbmlubGluZS5fdGl0bGUgPSAvXCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwnP3xbXidcXFxcXSkqJ3xcXCgoPzpcXFxcXFwpP3xbXilcXFxcXSkqXFwpLztcblxuaW5saW5lLmxpbmsgPSBlZGl0KGlubGluZS5saW5rKVxuICAucmVwbGFjZSgnbGFiZWwnLCBpbmxpbmUuX2xhYmVsKVxuICAucmVwbGFjZSgnaHJlZicsIGlubGluZS5faHJlZilcbiAgLnJlcGxhY2UoJ3RpdGxlJywgaW5saW5lLl90aXRsZSlcbiAgLmdldFJlZ2V4KCk7XG5cbmlubGluZS5yZWZsaW5rID0gZWRpdChpbmxpbmUucmVmbGluaylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgLmdldFJlZ2V4KCk7XG5cbi8qKlxuICogTm9ybWFsIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLm5vcm1hbCA9IG1lcmdlKHt9LCBpbmxpbmUpO1xuXG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLnBlZGFudGljID0gbWVyZ2Uoe30sIGlubGluZS5ub3JtYWwsIHtcbiAgc3Ryb25nOiAvXl9fKD89XFxTKShbXFxzXFxTXSo/XFxTKV9fKD8hXyl8XlxcKlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCpcXCooPyFcXCopLyxcbiAgZW06IC9eXyg/PVxcUykoW1xcc1xcU10qP1xcUylfKD8hXyl8XlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCooPyFcXCopLyxcbiAgbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcKCguKj8pXFwpLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBpbmxpbmUuX2xhYmVsKVxuICAgIC5nZXRSZWdleCgpLFxuICByZWZsaW5rOiBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFxzKlxcWyhbXlxcXV0qKVxcXS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgICAuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogR0ZNIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLmdmbSA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7XG4gIGVzY2FwZTogZWRpdChpbmxpbmUuZXNjYXBlKS5yZXBsYWNlKCddKScsICd+fF0pJykuZ2V0UmVnZXgoKSxcbiAgX2V4dGVuZGVkX2VtYWlsOiAvW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XFwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLFxuICB1cmw6IC9eKCg/OmZ0cHxodHRwcz8pOlxcL1xcL3x3d3dcXC4pKD86W2EtekEtWjAtOVxcLV0rXFwuPykrW15cXHM8XSp8XmVtYWlsLyxcbiAgX2JhY2twZWRhbDogLyg/OltePyEuLDo7Kl9+KCkmXSt8XFwoW14pXSpcXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl9+KV0rKD8hJCkpKy8sXG4gIGRlbDogL15+Kyg/PVxcUykoW1xcc1xcU10qP1xcUyl+Ky8sXG4gIHRleHQ6IC9eKGArfFteYF0pKD86W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKn5dfFxcYl98aHR0cHM/OlxcL1xcL3xmdHA6XFwvXFwvfHd3d1xcLnwkKXxbXiBdKD89IHsyLH1cXG4pfFteYS16QS1aMC05LiEjJCUmJyorXFwvPT9fYHtcXHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXStAKSl8KD89IHsyLH1cXG58W2EtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXStAKSkvXG59KTtcblxuaW5saW5lLmdmbS51cmwgPSBlZGl0KGlubGluZS5nZm0udXJsLCAnaScpXG4gIC5yZXBsYWNlKCdlbWFpbCcsIGlubGluZS5nZm0uX2V4dGVuZGVkX2VtYWlsKVxuICAuZ2V0UmVnZXgoKTtcbi8qKlxuICogR0ZNICsgTGluZSBCcmVha3MgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5pbmxpbmUuYnJlYWtzID0gbWVyZ2Uoe30sIGlubGluZS5nZm0sIHtcbiAgYnI6IGVkaXQoaW5saW5lLmJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICB0ZXh0OiBlZGl0KGlubGluZS5nZm0udGV4dClcbiAgICAucmVwbGFjZSgnXFxcXGJfJywgJ1xcXFxiX3wgezIsfVxcXFxuJylcbiAgICAucmVwbGFjZSgvXFx7MixcXH0vZywgJyonKVxuICAgIC5nZXRSZWdleCgpXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJsb2NrLFxuICBpbmxpbmVcbn07XG4iXSwibWFwcGluZ3MiOiJBQUlBO0FBSEE7QUFDQTtBQUNBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTRCQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFJQTtBQU1BO0FBTUE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFJQTs7OztBQUlBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUtBOzs7O0FBSUE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBeUJBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7QUFzQkE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBSUE7Ozs7QUFJQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQU5BO0FBV0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFHQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBUUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/marked/src/rules.js\n"); - -/***/ }), - -/***/ "../node_modules/md-attr-parser/dist/index.js": -/*!****************************************************!*\ - !*** ../node_modules/md-attr-parser/dist/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(" // A valid output which means nothing has been parsed.\n// Used as error return / invalid output\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar nothingHappend = {\n prop: {},\n eaten: ''\n};\nvar defaultConfig = {\n defaultValue: function defaultValue() {\n return undefined;\n } // Its a function\n\n};\n\nfunction parse(value, indexNext, userConfig) {\n // Main function\n var letsEat = '';\n var stopOnBrace = false;\n var errorDetected = false;\n\n var config = _objectSpread({}, defaultConfig, {}, userConfig); // Make defaultValue a function if it isn't\n\n\n if (typeof config.defaultValue !== 'function') {\n var defaultValue = config.defaultValue;\n\n config.defaultValue = function () {\n return defaultValue;\n };\n }\n\n var prop = {};\n /* They are at least one label and at best two */\n\n /* ekqsdf <- one label\n * qsdfqsfd=qsdfqsdf <- two */\n\n var labelFirst = '';\n var labelSecond;\n\n if (indexNext === undefined) {\n indexNext = 0;\n }\n /* 3 types :\n * .azcv <- class\n * #poi <- id\n * dfgh=zert <- key\n * jkj <- this is also a key but with a user defined value (default is undefined)\n * jkj= <- this is also a key but with a empty value\n */\n\n\n var type;\n var forbidenCharacters = '\\n\\r{}'; // A function that detect if it's time to end the parsing\n\n var shouldStop = function shouldStop() {\n if (indexNext >= value.length || forbidenCharacters.indexOf(value[indexNext]) > -1) {\n if (stopOnBrace && value[indexNext] !== '}') {\n errorDetected = true;\n }\n\n return true;\n }\n\n return value[indexNext] === '}' && stopOnBrace;\n };\n\n var eaten = ''; // Couple of functions that parse same kinds of characters\n // Used to parse spaces or identifiers\n\n var eat = function eat(chars) {\n eaten = '';\n\n while (indexNext < value.length && forbidenCharacters.indexOf(value.charAt(indexNext)) < 0 && chars.indexOf(value.charAt(indexNext)) >= 0) {\n letsEat += value.charAt(indexNext);\n eaten += value.charAt(indexNext);\n indexNext++;\n }\n\n return shouldStop();\n };\n\n var eatUntil = function eatUntil(chars) {\n eaten = '';\n\n while (indexNext < value.length && forbidenCharacters.indexOf(value.charAt(indexNext)) < 0 && chars.indexOf(value.charAt(indexNext)) < 0) {\n letsEat += value.charAt(indexNext);\n eaten += value.charAt(indexNext);\n indexNext++;\n } // Ugly but keep the main loop readable\n // Set the label it should set\n\n\n if (labelFirst) {\n labelSecond = eaten;\n } else {\n labelFirst = eaten;\n }\n\n return shouldStop();\n }; // In quote, every character is valid except the unescaped quotes and CR or LF\n // Same function for single and double quote\n\n\n var eatInQuote = function eatInQuote(quote) {\n eaten = ''; // First check so value[indexNext-1] will always be valid\n\n if (value[indexNext] === quote) {\n return;\n }\n\n while (indexNext < value.length && !(quote === value[indexNext] && value[indexNext - 1] !== '\\\\') && value[indexNext] !== '\\n' && value[indexNext] !== '\\r') {\n letsEat += value.charAt(indexNext);\n eaten += value.charAt(indexNext);\n indexNext++;\n } // If we encounter an EOL, there is an error\n // We are waiting for a quote\n\n\n if (value[indexNext] === '\\n' || value[indexNext] === '\\r' || indexNext >= value.length) {\n errorDetected = true;\n return true;\n } // Ugly but keep the main loop readable\n\n\n if (labelFirst) {\n labelSecond = eaten.replace(/\\\\\"/g, '\"');\n } else {\n labelFirst = eaten.replace(/\\\\\"/g, '\"');\n }\n\n return shouldStop();\n }; // It's really common to eat only one character so let's make it a function\n\n\n var eatOne = function eatOne(c, skipStopCheck) {\n // Miam !\n letsEat += c;\n indexNext++;\n return skipStopCheck ? false : shouldStop();\n }; // Common parsing of quotes\n\n\n var eatQuote = function eatQuote(q) {\n eatOne(q, true);\n eatInQuote(q, true);\n\n if (value.charAt(indexNext) !== q) {\n return nothingHappend;\n }\n\n if (eatOne(q)) {\n return -1;\n }\n };\n\n var idSetByKey = false;\n\n var addAttribute = function addAttribute() {\n switch (type) {\n case 'id':\n // ID\n if (idSetByKey) {\n prop.id = labelFirst;\n idSetByKey = false;\n } else {\n prop.id = prop.id || labelFirst;\n }\n\n break;\n\n case 'class':\n if (!prop[\"class\"]) {\n prop[\"class\"] = [];\n }\n\n if (prop[\"class\"].indexOf(labelFirst) < 0) {\n prop[\"class\"].push(labelFirst);\n }\n\n break;\n\n case 'key':\n if (!labelFirst) {\n return nothingHappend;\n }\n\n if (!(labelFirst in prop)) {\n if (labelSecond === undefined) {\n // Here, we have an attribute without value\n // so it's user defined\n prop[labelFirst] = config.defaultValue(labelFirst);\n } else {\n prop[labelFirst] = labelFirst === 'class' ? [labelSecond] : labelSecond;\n }\n\n if (labelFirst === 'id') {\n idSetByKey = true;\n }\n } else if (labelFirst === 'class' && Boolean(labelSecond)) {\n prop[\"class\"].push(labelSecond);\n }\n\n break;\n\n default:\n }\n\n type = undefined;\n labelFirst = '';\n labelSecond = undefined;\n };\n /** *********************** Start parsing ************************ */\n // Let's check for leading spaces first\n\n\n eat(' \\t\\v');\n\n if (value[indexNext] === '{') {\n eatOne('{');\n stopOnBrace = true;\n }\n\n while (!shouldStop()) {\n // Main loop which extract attributes\n if (eat(' \\t\\v')) {\n break;\n }\n\n if (value.charAt(indexNext) === '.') {\n // Classes\n type = 'class';\n\n if (eatOne('.')) {\n errorDetected = true;\n break;\n }\n } else if (value.charAt(indexNext) === '#') {\n // ID\n type = 'id';\n\n if (eatOne('#')) {\n errorDetected = true;\n break;\n }\n } else {\n // Key\n type = 'key';\n } // Extract name\n\n\n if (eatUntil('=\\t\\b\\v  ') || !labelFirst) {\n break;\n }\n\n if (value.charAt(indexNext) === '=' && type === 'key') {\n // Set labelSecond\n if (eatOne('=')) {\n break;\n }\n\n if (value.charAt(indexNext) === '\"') {\n var ret = eatQuote('\"');\n\n if (ret === -1) {\n break;\n } else if (ret === nothingHappend) {\n return nothingHappend;\n }\n } else if (value.charAt(indexNext) === '\\'') {\n var _ret = eatQuote('\\'');\n\n if (_ret === -1) {\n break;\n } else if (_ret === nothingHappend) {\n return nothingHappend;\n }\n } else if (eatUntil(' \\t\\n\\r\\v=}')) {\n break;\n }\n } // Add the parsed attribute to the output prop with the ad hoc type\n\n\n addAttribute();\n }\n\n addAttribute();\n\n if (stopOnBrace) {\n if (indexNext < value.length && value[indexNext] === '}') {\n stopOnBrace = false;\n eatOne('}');\n } else {\n return nothingHappend;\n }\n }\n\n return errorDetected ? nothingHappend : {\n prop: prop,\n eaten: letsEat\n };\n}\n\nmodule.exports = parse;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kLWF0dHItcGFyc2VyL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kLWF0dHItcGFyc2VyL2Rpc3QvaW5kZXguanM/NDJiYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7IC8vIEEgdmFsaWQgb3V0cHV0IHdoaWNoIG1lYW5zIG5vdGhpbmcgaGFzIGJlZW4gcGFyc2VkLlxuLy8gVXNlZCBhcyBlcnJvciByZXR1cm4gLyBpbnZhbGlkIG91dHB1dFxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoc291cmNlLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgbm90aGluZ0hhcHBlbmQgPSB7XG4gIHByb3A6IHt9LFxuICBlYXRlbjogJydcbn07XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBJdHMgYSBmdW5jdGlvblxuXG59O1xuXG5mdW5jdGlvbiBwYXJzZSh2YWx1ZSwgaW5kZXhOZXh0LCB1c2VyQ29uZmlnKSB7XG4gIC8vIE1haW4gZnVuY3Rpb25cbiAgdmFyIGxldHNFYXQgPSAnJztcbiAgdmFyIHN0b3BPbkJyYWNlID0gZmFsc2U7XG4gIHZhciBlcnJvckRldGVjdGVkID0gZmFsc2U7XG5cbiAgdmFyIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRDb25maWcsIHt9LCB1c2VyQ29uZmlnKTsgLy8gTWFrZSBkZWZhdWx0VmFsdWUgYSBmdW5jdGlvbiBpZiBpdCBpc24ndFxuXG5cbiAgaWYgKHR5cGVvZiBjb25maWcuZGVmYXVsdFZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGNvbmZpZy5kZWZhdWx0VmFsdWU7XG5cbiAgICBjb25maWcuZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIHByb3AgPSB7fTtcbiAgLyogVGhleSBhcmUgYXQgbGVhc3Qgb25lIGxhYmVsIGFuZCBhdCBiZXN0IHR3byAqL1xuXG4gIC8qIGVrcXNkZiA8LSBvbmUgbGFiZWxcbiAgICogcXNkZnFzZmQ9cXNkZnFzZGYgPC0gdHdvICovXG5cbiAgdmFyIGxhYmVsRmlyc3QgPSAnJztcbiAgdmFyIGxhYmVsU2Vjb25kO1xuXG4gIGlmIChpbmRleE5leHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGluZGV4TmV4dCA9IDA7XG4gIH1cbiAgLyogMyB0eXBlcyA6XG4gICAqIC5hemN2IDwtIGNsYXNzXG4gICAqICNwb2kgPC0gaWRcbiAgICogZGZnaD16ZXJ0IDwtIGtleVxuICAgKiBqa2ogPC0gdGhpcyBpcyBhbHNvIGEga2V5IGJ1dCB3aXRoIGEgdXNlciBkZWZpbmVkIHZhbHVlIChkZWZhdWx0IGlzIHVuZGVmaW5lZClcbiAgICogamtqPSA8LSB0aGlzIGlzIGFsc28gYSBrZXkgYnV0IHdpdGggYSBlbXB0eSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciB0eXBlO1xuICB2YXIgZm9yYmlkZW5DaGFyYWN0ZXJzID0gJ1xcblxccnt9JzsgLy8gQSBmdW5jdGlvbiB0aGF0IGRldGVjdCBpZiBpdCdzIHRpbWUgdG8gZW5kIHRoZSBwYXJzaW5nXG5cbiAgdmFyIHNob3VsZFN0b3AgPSBmdW5jdGlvbiBzaG91bGRTdG9wKCkge1xuICAgIGlmIChpbmRleE5leHQgPj0gdmFsdWUubGVuZ3RoIHx8IGZvcmJpZGVuQ2hhcmFjdGVycy5pbmRleE9mKHZhbHVlW2luZGV4TmV4dF0pID4gLTEpIHtcbiAgICAgIGlmIChzdG9wT25CcmFjZSAmJiB2YWx1ZVtpbmRleE5leHRdICE9PSAnfScpIHtcbiAgICAgICAgZXJyb3JEZXRlY3RlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVtpbmRleE5leHRdID09PSAnfScgJiYgc3RvcE9uQnJhY2U7XG4gIH07XG5cbiAgdmFyIGVhdGVuID0gJyc7IC8vIENvdXBsZSBvZiBmdW5jdGlvbnMgdGhhdCBwYXJzZSBzYW1lIGtpbmRzIG9mIGNoYXJhY3RlcnNcbiAgLy8gVXNlZCB0byBwYXJzZSBzcGFjZXMgb3IgaWRlbnRpZmllcnNcblxuICB2YXIgZWF0ID0gZnVuY3Rpb24gZWF0KGNoYXJzKSB7XG4gICAgZWF0ZW4gPSAnJztcblxuICAgIHdoaWxlIChpbmRleE5leHQgPCB2YWx1ZS5sZW5ndGggJiYgZm9yYmlkZW5DaGFyYWN0ZXJzLmluZGV4T2YodmFsdWUuY2hhckF0KGluZGV4TmV4dCkpIDwgMCAmJiBjaGFycy5pbmRleE9mKHZhbHVlLmNoYXJBdChpbmRleE5leHQpKSA+PSAwKSB7XG4gICAgICBsZXRzRWF0ICs9IHZhbHVlLmNoYXJBdChpbmRleE5leHQpO1xuICAgICAgZWF0ZW4gKz0gdmFsdWUuY2hhckF0KGluZGV4TmV4dCk7XG4gICAgICBpbmRleE5leHQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkU3RvcCgpO1xuICB9O1xuXG4gIHZhciBlYXRVbnRpbCA9IGZ1bmN0aW9uIGVhdFVudGlsKGNoYXJzKSB7XG4gICAgZWF0ZW4gPSAnJztcblxuICAgIHdoaWxlIChpbmRleE5leHQgPCB2YWx1ZS5sZW5ndGggJiYgZm9yYmlkZW5DaGFyYWN0ZXJzLmluZGV4T2YodmFsdWUuY2hhckF0KGluZGV4TmV4dCkpIDwgMCAmJiBjaGFycy5pbmRleE9mKHZhbHVlLmNoYXJBdChpbmRleE5leHQpKSA8IDApIHtcbiAgICAgIGxldHNFYXQgKz0gdmFsdWUuY2hhckF0KGluZGV4TmV4dCk7XG4gICAgICBlYXRlbiArPSB2YWx1ZS5jaGFyQXQoaW5kZXhOZXh0KTtcbiAgICAgIGluZGV4TmV4dCsrO1xuICAgIH0gLy8gVWdseSBidXQga2VlcCB0aGUgbWFpbiBsb29wIHJlYWRhYmxlXG4gICAgLy8gU2V0IHRoZSBsYWJlbCBpdCBzaG91bGQgc2V0XG5cblxuICAgIGlmIChsYWJlbEZpcnN0KSB7XG4gICAgICBsYWJlbFNlY29uZCA9IGVhdGVuO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYWJlbEZpcnN0ID0gZWF0ZW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFN0b3AoKTtcbiAgfTsgLy8gSW4gcXVvdGUsIGV2ZXJ5IGNoYXJhY3RlciBpcyB2YWxpZCBleGNlcHQgdGhlIHVuZXNjYXBlZCBxdW90ZXMgYW5kIENSIG9yIExGXG4gIC8vIFNhbWUgZnVuY3Rpb24gZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlXG5cblxuICB2YXIgZWF0SW5RdW90ZSA9IGZ1bmN0aW9uIGVhdEluUXVvdGUocXVvdGUpIHtcbiAgICBlYXRlbiA9ICcnOyAvLyBGaXJzdCBjaGVjayBzbyB2YWx1ZVtpbmRleE5leHQtMV0gd2lsbCBhbHdheXMgYmUgdmFsaWRcblxuICAgIGlmICh2YWx1ZVtpbmRleE5leHRdID09PSBxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleE5leHQgPCB2YWx1ZS5sZW5ndGggJiYgIShxdW90ZSA9PT0gdmFsdWVbaW5kZXhOZXh0XSAmJiB2YWx1ZVtpbmRleE5leHQgLSAxXSAhPT0gJ1xcXFwnKSAmJiB2YWx1ZVtpbmRleE5leHRdICE9PSAnXFxuJyAmJiB2YWx1ZVtpbmRleE5leHRdICE9PSAnXFxyJykge1xuICAgICAgbGV0c0VhdCArPSB2YWx1ZS5jaGFyQXQoaW5kZXhOZXh0KTtcbiAgICAgIGVhdGVuICs9IHZhbHVlLmNoYXJBdChpbmRleE5leHQpO1xuICAgICAgaW5kZXhOZXh0Kys7XG4gICAgfSAvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gRU9MLCB0aGVyZSBpcyBhbiBlcnJvclxuICAgIC8vIFdlIGFyZSB3YWl0aW5nIGZvciBhIHF1b3RlXG5cblxuICAgIGlmICh2YWx1ZVtpbmRleE5leHRdID09PSAnXFxuJyB8fCB2YWx1ZVtpbmRleE5leHRdID09PSAnXFxyJyB8fCBpbmRleE5leHQgPj0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICBlcnJvckRldGVjdGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gVWdseSBidXQga2VlcCB0aGUgbWFpbiBsb29wIHJlYWRhYmxlXG5cblxuICAgIGlmIChsYWJlbEZpcnN0KSB7XG4gICAgICBsYWJlbFNlY29uZCA9IGVhdGVuLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFiZWxGaXJzdCA9IGVhdGVuLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkU3RvcCgpO1xuICB9OyAvLyBJdCdzIHJlYWxseSBjb21tb24gdG8gZWF0IG9ubHkgb25lIGNoYXJhY3RlciBzbyBsZXQncyBtYWtlIGl0IGEgZnVuY3Rpb25cblxuXG4gIHZhciBlYXRPbmUgPSBmdW5jdGlvbiBlYXRPbmUoYywgc2tpcFN0b3BDaGVjaykge1xuICAgIC8vIE1pYW0gIVxuICAgIGxldHNFYXQgKz0gYztcbiAgICBpbmRleE5leHQrKztcbiAgICByZXR1cm4gc2tpcFN0b3BDaGVjayA/IGZhbHNlIDogc2hvdWxkU3RvcCgpO1xuICB9OyAvLyBDb21tb24gcGFyc2luZyBvZiBxdW90ZXNcblxuXG4gIHZhciBlYXRRdW90ZSA9IGZ1bmN0aW9uIGVhdFF1b3RlKHEpIHtcbiAgICBlYXRPbmUocSwgdHJ1ZSk7XG4gICAgZWF0SW5RdW90ZShxLCB0cnVlKTtcblxuICAgIGlmICh2YWx1ZS5jaGFyQXQoaW5kZXhOZXh0KSAhPT0gcSkge1xuICAgICAgcmV0dXJuIG5vdGhpbmdIYXBwZW5kO1xuICAgIH1cblxuICAgIGlmIChlYXRPbmUocSkpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlkU2V0QnlLZXkgPSBmYWxzZTtcblxuICB2YXIgYWRkQXR0cmlidXRlID0gZnVuY3Rpb24gYWRkQXR0cmlidXRlKCkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaWQnOlxuICAgICAgICAvLyBJRFxuICAgICAgICBpZiAoaWRTZXRCeUtleSkge1xuICAgICAgICAgIHByb3AuaWQgPSBsYWJlbEZpcnN0O1xuICAgICAgICAgIGlkU2V0QnlLZXkgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wLmlkID0gcHJvcC5pZCB8fCBsYWJlbEZpcnN0O1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgICAgaWYgKCFwcm9wW1wiY2xhc3NcIl0pIHtcbiAgICAgICAgICBwcm9wW1wiY2xhc3NcIl0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wW1wiY2xhc3NcIl0uaW5kZXhPZihsYWJlbEZpcnN0KSA8IDApIHtcbiAgICAgICAgICBwcm9wW1wiY2xhc3NcIl0ucHVzaChsYWJlbEZpcnN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdrZXknOlxuICAgICAgICBpZiAoIWxhYmVsRmlyc3QpIHtcbiAgICAgICAgICByZXR1cm4gbm90aGluZ0hhcHBlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShsYWJlbEZpcnN0IGluIHByb3ApKSB7XG4gICAgICAgICAgaWYgKGxhYmVsU2Vjb25kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIEhlcmUsIHdlIGhhdmUgYW4gYXR0cmlidXRlIHdpdGhvdXQgdmFsdWVcbiAgICAgICAgICAgIC8vIHNvIGl0J3MgdXNlciBkZWZpbmVkXG4gICAgICAgICAgICBwcm9wW2xhYmVsRmlyc3RdID0gY29uZmlnLmRlZmF1bHRWYWx1ZShsYWJlbEZpcnN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvcFtsYWJlbEZpcnN0XSA9IGxhYmVsRmlyc3QgPT09ICdjbGFzcycgPyBbbGFiZWxTZWNvbmRdIDogbGFiZWxTZWNvbmQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhYmVsRmlyc3QgPT09ICdpZCcpIHtcbiAgICAgICAgICAgIGlkU2V0QnlLZXkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsYWJlbEZpcnN0ID09PSAnY2xhc3MnICYmIEJvb2xlYW4obGFiZWxTZWNvbmQpKSB7XG4gICAgICAgICAgcHJvcFtcImNsYXNzXCJdLnB1c2gobGFiZWxTZWNvbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuXG4gICAgdHlwZSA9IHVuZGVmaW5lZDtcbiAgICBsYWJlbEZpcnN0ID0gJyc7XG4gICAgbGFiZWxTZWNvbmQgPSB1bmRlZmluZWQ7XG4gIH07XG4gIC8qKiAqKioqKioqKioqKioqKioqKioqKioqKiBTdGFydCBwYXJzaW5nICoqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuICAvLyBMZXQncyBjaGVjayBmb3IgbGVhZGluZyBzcGFjZXMgZmlyc3RcblxuXG4gIGVhdCgnIFxcdFxcdicpO1xuXG4gIGlmICh2YWx1ZVtpbmRleE5leHRdID09PSAneycpIHtcbiAgICBlYXRPbmUoJ3snKTtcbiAgICBzdG9wT25CcmFjZSA9IHRydWU7XG4gIH1cblxuICB3aGlsZSAoIXNob3VsZFN0b3AoKSkge1xuICAgIC8vIE1haW4gbG9vcCB3aGljaCBleHRyYWN0IGF0dHJpYnV0ZXNcbiAgICBpZiAoZWF0KCcgXFx0XFx2JykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5jaGFyQXQoaW5kZXhOZXh0KSA9PT0gJy4nKSB7XG4gICAgICAvLyBDbGFzc2VzXG4gICAgICB0eXBlID0gJ2NsYXNzJztcblxuICAgICAgaWYgKGVhdE9uZSgnLicpKSB7XG4gICAgICAgIGVycm9yRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmNoYXJBdChpbmRleE5leHQpID09PSAnIycpIHtcbiAgICAgIC8vIElEXG4gICAgICB0eXBlID0gJ2lkJztcblxuICAgICAgaWYgKGVhdE9uZSgnIycpKSB7XG4gICAgICAgIGVycm9yRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gS2V5XG4gICAgICB0eXBlID0gJ2tleSc7XG4gICAgfSAvLyBFeHRyYWN0IG5hbWVcblxuXG4gICAgaWYgKGVhdFVudGlsKCc9XFx0XFxiXFx2IMKgJykgfHwgIWxhYmVsRmlyc3QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5jaGFyQXQoaW5kZXhOZXh0KSA9PT0gJz0nICYmIHR5cGUgPT09ICdrZXknKSB7XG4gICAgICAvLyBTZXQgbGFiZWxTZWNvbmRcbiAgICAgIGlmIChlYXRPbmUoJz0nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlLmNoYXJBdChpbmRleE5leHQpID09PSAnXCInKSB7XG4gICAgICAgIHZhciByZXQgPSBlYXRRdW90ZSgnXCInKTtcblxuICAgICAgICBpZiAocmV0ID09PSAtMSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHJldCA9PT0gbm90aGluZ0hhcHBlbmQpIHtcbiAgICAgICAgICByZXR1cm4gbm90aGluZ0hhcHBlbmQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuY2hhckF0KGluZGV4TmV4dCkgPT09ICdcXCcnKSB7XG4gICAgICAgIHZhciBfcmV0ID0gZWF0UXVvdGUoJ1xcJycpO1xuXG4gICAgICAgIGlmIChfcmV0ID09PSAtMSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKF9yZXQgPT09IG5vdGhpbmdIYXBwZW5kKSB7XG4gICAgICAgICAgcmV0dXJuIG5vdGhpbmdIYXBwZW5kO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVhdFVudGlsKCcgXFx0XFxuXFxyXFx2PX0nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIEFkZCB0aGUgcGFyc2VkIGF0dHJpYnV0ZSB0byB0aGUgb3V0cHV0IHByb3Agd2l0aCB0aGUgYWQgaG9jIHR5cGVcblxuXG4gICAgYWRkQXR0cmlidXRlKCk7XG4gIH1cblxuICBhZGRBdHRyaWJ1dGUoKTtcblxuICBpZiAoc3RvcE9uQnJhY2UpIHtcbiAgICBpZiAoaW5kZXhOZXh0IDwgdmFsdWUubGVuZ3RoICYmIHZhbHVlW2luZGV4TmV4dF0gPT09ICd9Jykge1xuICAgICAgc3RvcE9uQnJhY2UgPSBmYWxzZTtcbiAgICAgIGVhdE9uZSgnfScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm90aGluZ0hhcHBlbmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9yRGV0ZWN0ZWQgPyBub3RoaW5nSGFwcGVuZCA6IHtcbiAgICBwcm9wOiBwcm9wLFxuICAgIGVhdGVuOiBsZXRzRWF0XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQURBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFyRkE7QUF1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFDQTtBQW1CQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQXJIQTtBQUNBO0FBQ0E7QUF1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdIQTtBQUNBO0FBQ0E7QUErSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUNBO0FBQ0E7QUFnREE7QUFDQTtBQUNBO0FBcERBO0FBc0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQXhCQTtBQUNBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQXhEQTtBQUNBO0FBQ0E7QUEwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/md-attr-parser/dist/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-compact/index.js": -/*!***************************************************!*\ - !*** ../node_modules/mdast-util-compact/index.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nmodule.exports = compact; // Make an mdast tree compact by merging adjacent text nodes.\n\nfunction compact(tree, commonmark) {\n visit(tree, visitor);\n return tree;\n\n function visitor(child, index, parent) {\n var siblings = parent ? parent.children : [];\n var prev = index && siblings[index - 1];\n\n if (prev && child.type === prev.type && mergeable(prev, commonmark) && mergeable(child, commonmark)) {\n if (child.value) {\n prev.value += child.value;\n }\n\n if (child.children) {\n prev.children = prev.children.concat(child.children);\n }\n\n siblings.splice(index, 1);\n\n if (prev.position && child.position) {\n prev.position.end = child.position.end;\n }\n\n return index;\n }\n }\n}\n\nfunction mergeable(node, commonmark) {\n var start;\n var end;\n\n if (node.type === 'text') {\n if (!node.position) {\n return true;\n }\n\n start = node.position.start;\n end = node.position.end; // Only merge nodes which occupy the same size as their `value`.\n\n return start.line !== end.line || end.column - start.column === node.value.length;\n }\n\n return commonmark && node.type === 'blockquote';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtY29tcGFjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1jb21wYWN0L2luZGV4LmpzPzNlMDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbnZhciB2aXNpdCA9IHJlcXVpcmUoJ3VuaXN0LXV0aWwtdmlzaXQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhY3RcblxuLy8gTWFrZSBhbiBtZGFzdCB0cmVlIGNvbXBhY3QgYnkgbWVyZ2luZyBhZGphY2VudCB0ZXh0IG5vZGVzLlxuZnVuY3Rpb24gY29tcGFjdCh0cmVlLCBjb21tb25tYXJrKSB7XG4gIHZpc2l0KHRyZWUsIHZpc2l0b3IpXG5cbiAgcmV0dXJuIHRyZWVcblxuICBmdW5jdGlvbiB2aXNpdG9yKGNoaWxkLCBpbmRleCwgcGFyZW50KSB7XG4gICAgdmFyIHNpYmxpbmdzID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogW11cbiAgICB2YXIgcHJldiA9IGluZGV4ICYmIHNpYmxpbmdzW2luZGV4IC0gMV1cblxuICAgIGlmIChcbiAgICAgIHByZXYgJiZcbiAgICAgIGNoaWxkLnR5cGUgPT09IHByZXYudHlwZSAmJlxuICAgICAgbWVyZ2VhYmxlKHByZXYsIGNvbW1vbm1hcmspICYmXG4gICAgICBtZXJnZWFibGUoY2hpbGQsIGNvbW1vbm1hcmspXG4gICAgKSB7XG4gICAgICBpZiAoY2hpbGQudmFsdWUpIHtcbiAgICAgICAgcHJldi52YWx1ZSArPSBjaGlsZC52YWx1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcHJldi5jaGlsZHJlbiA9IHByZXYuY2hpbGRyZW4uY29uY2F0KGNoaWxkLmNoaWxkcmVuKVxuICAgICAgfVxuXG4gICAgICBzaWJsaW5ncy5zcGxpY2UoaW5kZXgsIDEpXG5cbiAgICAgIGlmIChwcmV2LnBvc2l0aW9uICYmIGNoaWxkLnBvc2l0aW9uKSB7XG4gICAgICAgIHByZXYucG9zaXRpb24uZW5kID0gY2hpbGQucG9zaXRpb24uZW5kXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZWFibGUobm9kZSwgY29tbW9ubWFyaykge1xuICB2YXIgc3RhcnRcbiAgdmFyIGVuZFxuXG4gIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGlmICghbm9kZS5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzdGFydCA9IG5vZGUucG9zaXRpb24uc3RhcnRcbiAgICBlbmQgPSBub2RlLnBvc2l0aW9uLmVuZFxuXG4gICAgLy8gT25seSBtZXJnZSBub2RlcyB3aGljaCBvY2N1cHkgdGhlIHNhbWUgc2l6ZSBhcyB0aGVpciBgdmFsdWVgLlxuICAgIHJldHVybiAoXG4gICAgICBzdGFydC5saW5lICE9PSBlbmQubGluZSB8fCBlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1uID09PSBub2RlLnZhbHVlLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb21tb25tYXJrICYmIG5vZGUudHlwZSA9PT0gJ2Jsb2NrcXVvdGUnXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-compact/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-definitions/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/mdast-util-definitions/index.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nmodule.exports = getDefinitionFactory;\nvar own = {}.hasOwnProperty; // Get a definition in `node` by `identifier`.\n\nfunction getDefinitionFactory(node, options) {\n return getterFactory(gather(node, options));\n} // Gather all definitions in `node`\n\n\nfunction gather(node, options) {\n var cache = {};\n\n if (!node || !node.type) {\n throw new Error('mdast-util-definitions expected node');\n }\n\n visit(node, 'definition', options && options.commonmark ? commonmark : normal);\n return cache;\n\n function commonmark(definition) {\n var id = normalise(definition.identifier);\n\n if (!own.call(cache, id)) {\n cache[id] = definition;\n }\n }\n\n function normal(definition) {\n cache[normalise(definition.identifier)] = definition;\n }\n} // Factory to get a node from the given definition-cache.\n\n\nfunction getterFactory(cache) {\n return getter; // Get a node from the bound definition-cache.\n\n function getter(identifier) {\n var id = identifier && normalise(identifier);\n return id && own.call(cache, id) ? cache[id] : null;\n }\n}\n\nfunction normalise(identifier) {\n return identifier.toUpperCase();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZGVmaW5pdGlvbnMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZGVmaW5pdGlvbnMvaW5kZXguanM/Y2MxNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIHZpc2l0ID0gcmVxdWlyZSgndW5pc3QtdXRpbC12aXNpdCcpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGVmaW5pdGlvbkZhY3RvcnlcblxudmFyIG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8vIEdldCBhIGRlZmluaXRpb24gaW4gYG5vZGVgIGJ5IGBpZGVudGlmaWVyYC5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25GYWN0b3J5KG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGdldHRlckZhY3RvcnkoZ2F0aGVyKG5vZGUsIG9wdGlvbnMpKVxufVxuXG4vLyBHYXRoZXIgYWxsIGRlZmluaXRpb25zIGluIGBub2RlYFxuZnVuY3Rpb24gZ2F0aGVyKG5vZGUsIG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlID0ge31cblxuICBpZiAoIW5vZGUgfHwgIW5vZGUudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWRhc3QtdXRpbC1kZWZpbml0aW9ucyBleHBlY3RlZCBub2RlJylcbiAgfVxuXG4gIHZpc2l0KG5vZGUsICdkZWZpbml0aW9uJywgb3B0aW9ucyAmJiBvcHRpb25zLmNvbW1vbm1hcmsgPyBjb21tb25tYXJrIDogbm9ybWFsKVxuXG4gIHJldHVybiBjYWNoZVxuXG4gIGZ1bmN0aW9uIGNvbW1vbm1hcmsoZGVmaW5pdGlvbikge1xuICAgIHZhciBpZCA9IG5vcm1hbGlzZShkZWZpbml0aW9uLmlkZW50aWZpZXIpXG4gICAgaWYgKCFvd24uY2FsbChjYWNoZSwgaWQpKSB7XG4gICAgICBjYWNoZVtpZF0gPSBkZWZpbml0aW9uXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsKGRlZmluaXRpb24pIHtcbiAgICBjYWNoZVtub3JtYWxpc2UoZGVmaW5pdGlvbi5pZGVudGlmaWVyKV0gPSBkZWZpbml0aW9uXG4gIH1cbn1cblxuLy8gRmFjdG9yeSB0byBnZXQgYSBub2RlIGZyb20gdGhlIGdpdmVuIGRlZmluaXRpb24tY2FjaGUuXG5mdW5jdGlvbiBnZXR0ZXJGYWN0b3J5KGNhY2hlKSB7XG4gIHJldHVybiBnZXR0ZXJcblxuICAvLyBHZXQgYSBub2RlIGZyb20gdGhlIGJvdW5kIGRlZmluaXRpb24tY2FjaGUuXG4gIGZ1bmN0aW9uIGdldHRlcihpZGVudGlmaWVyKSB7XG4gICAgdmFyIGlkID0gaWRlbnRpZmllciAmJiBub3JtYWxpc2UoaWRlbnRpZmllcilcbiAgICByZXR1cm4gaWQgJiYgb3duLmNhbGwoY2FjaGUsIGlkKSA/IGNhY2hlW2lkXSA6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpc2UoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci50b1VwcGVyQ2FzZSgpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-definitions/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/index.js": -/*!***************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/index.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = __webpack_require__(/*! ./lib */ \"../node_modules/mdast-util-to-hast/lib/index.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2luZGV4LmpzPzRmMTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliJylcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/all.js": -/*!*****************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/all.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = all;\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar one = __webpack_require__(/*! ./one */ \"../node_modules/mdast-util-to-hast/lib/one.js\");\n\nfunction all(h, parent) {\n var nodes = parent.children || [];\n var length = nodes.length;\n var values = [];\n var index = -1;\n var result;\n var head;\n\n while (++index < length) {\n result = one(h, nodes[index], parent);\n\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (result.value) {\n result.value = trim.left(result.value);\n }\n\n head = result.children && result.children[0];\n\n if (head && head.value) {\n head.value = trim.left(head.value);\n }\n }\n\n values = values.concat(result);\n }\n }\n\n return values;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2FsbC5qcz9jNjc2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFsbFxuXG52YXIgdHJpbSA9IHJlcXVpcmUoJ3RyaW0nKVxudmFyIG9uZSA9IHJlcXVpcmUoJy4vb25lJylcblxuZnVuY3Rpb24gYWxsKGgsIHBhcmVudCkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4gfHwgW11cbiAgdmFyIGxlbmd0aCA9IG5vZGVzLmxlbmd0aFxuICB2YXIgdmFsdWVzID0gW11cbiAgdmFyIGluZGV4ID0gLTFcbiAgdmFyIHJlc3VsdFxuICB2YXIgaGVhZFxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gb25lKGgsIG5vZGVzW2luZGV4XSwgcGFyZW50KVxuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKGluZGV4ICYmIG5vZGVzW2luZGV4IC0gMV0udHlwZSA9PT0gJ2JyZWFrJykge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdHJpbS5sZWZ0KHJlc3VsdC52YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGhlYWQgPSByZXN1bHQuY2hpbGRyZW4gJiYgcmVzdWx0LmNoaWxkcmVuWzBdXG5cbiAgICAgICAgaWYgKGhlYWQgJiYgaGVhZC52YWx1ZSkge1xuICAgICAgICAgIGhlYWQudmFsdWUgPSB0cmltLmxlZnQoaGVhZC52YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHJlc3VsdClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/all.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/footer.js": -/*!********************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/footer.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = generateFootnotes;\n\nvar thematicBreak = __webpack_require__(/*! ./handlers/thematic-break */ \"../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js\");\n\nvar list = __webpack_require__(/*! ./handlers/list */ \"../node_modules/mdast-util-to-hast/lib/handlers/list.js\");\n\nvar wrap = __webpack_require__(/*! ./wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nfunction generateFootnotes(h) {\n var footnotes = h.footnotes;\n var length = footnotes.length;\n var index = -1;\n var listItems = [];\n var def;\n\n if (!length) {\n return null;\n }\n\n while (++index < length) {\n def = footnotes[index];\n listItems[index] = {\n type: 'listItem',\n data: {\n hProperties: {\n id: 'fn-' + def.identifier\n }\n },\n children: def.children.concat({\n type: 'link',\n url: '#fnref-' + def.identifier,\n data: {\n hProperties: {\n className: ['footnote-backref']\n }\n },\n children: [{\n type: 'text',\n value: '↩'\n }]\n }),\n position: def.position\n };\n }\n\n return h(null, 'div', {\n className: ['footnotes']\n }, wrap([thematicBreak(h), list(h, {\n type: 'list',\n ordered: true,\n children: listItems\n })], true));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvZm9vdGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcz81MWJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlRm9vdG5vdGVzXG5cbnZhciB0aGVtYXRpY0JyZWFrID0gcmVxdWlyZSgnLi9oYW5kbGVycy90aGVtYXRpYy1icmVhaycpXG52YXIgbGlzdCA9IHJlcXVpcmUoJy4vaGFuZGxlcnMvbGlzdCcpXG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vd3JhcCcpXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRm9vdG5vdGVzKGgpIHtcbiAgdmFyIGZvb3Rub3RlcyA9IGguZm9vdG5vdGVzXG4gIHZhciBsZW5ndGggPSBmb290bm90ZXMubGVuZ3RoXG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciBsaXN0SXRlbXMgPSBbXVxuICB2YXIgZGVmXG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBkZWYgPSBmb290bm90ZXNbaW5kZXhdXG5cbiAgICBsaXN0SXRlbXNbaW5kZXhdID0ge1xuICAgICAgdHlwZTogJ2xpc3RJdGVtJyxcbiAgICAgIGRhdGE6IHtoUHJvcGVydGllczoge2lkOiAnZm4tJyArIGRlZi5pZGVudGlmaWVyfX0sXG4gICAgICBjaGlsZHJlbjogZGVmLmNoaWxkcmVuLmNvbmNhdCh7XG4gICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgdXJsOiAnI2ZucmVmLScgKyBkZWYuaWRlbnRpZmllcixcbiAgICAgICAgZGF0YToge2hQcm9wZXJ0aWVzOiB7Y2xhc3NOYW1lOiBbJ2Zvb3Rub3RlLWJhY2tyZWYnXX19LFxuICAgICAgICBjaGlsZHJlbjogW3t0eXBlOiAndGV4dCcsIHZhbHVlOiAn4oapJ31dXG4gICAgICB9KSxcbiAgICAgIHBvc2l0aW9uOiBkZWYucG9zaXRpb25cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaChcbiAgICBudWxsLFxuICAgICdkaXYnLFxuICAgIHtjbGFzc05hbWU6IFsnZm9vdG5vdGVzJ119LFxuICAgIHdyYXAoXG4gICAgICBbXG4gICAgICAgIHRoZW1hdGljQnJlYWsoaCksXG4gICAgICAgIGxpc3QoaCwge1xuICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICBvcmRlcmVkOiB0cnVlLFxuICAgICAgICAgIGNoaWxkcmVuOiBsaXN0SXRlbXNcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICB0cnVlXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBTUE7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFIQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/footer.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js": -/*!*********************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = blockquote;\n\nvar wrap = __webpack_require__(/*! ../wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction blockquote(h, node) {\n return h(node, 'blockquote', wrap(all(h, node), true));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9ibG9ja3F1b3RlLmpzPzJlZjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gYmxvY2txdW90ZVxuXG52YXIgd3JhcCA9IHJlcXVpcmUoJy4uL3dyYXAnKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4uL2FsbCcpXG5cbmZ1bmN0aW9uIGJsb2NrcXVvdGUoaCwgbm9kZSkge1xuICByZXR1cm4gaChub2RlLCAnYmxvY2txdW90ZScsIHdyYXAoYWxsKGgsIG5vZGUpLCB0cnVlKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/break.js": -/*!****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/break.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = hardBreak;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nfunction hardBreak(h, node) {\n return [h(node, 'br'), u('text', '\\n')];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYnJlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYnJlYWsuanM/MTdmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBoYXJkQnJlYWtcblxudmFyIHUgPSByZXF1aXJlKCd1bmlzdC1idWlsZGVyJylcblxuZnVuY3Rpb24gaGFyZEJyZWFrKGgsIG5vZGUpIHtcbiAgcmV0dXJuIFtoKG5vZGUsICdicicpLCB1KCd0ZXh0JywgJ1xcbicpXVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/break.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/code.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/code.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = code;\n\nvar detab = __webpack_require__(/*! detab */ \"../node_modules/detab/index.js\");\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nfunction code(h, node) {\n var value = node.value ? detab(node.value + '\\n') : '';\n var lang = node.lang && node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/);\n var props = {};\n\n if (lang) {\n props.className = ['language-' + lang];\n }\n\n return h(node.position, 'pre', [h(node, 'code', props, [u('text', value)])]);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzPzI0NzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY29kZVxuXG52YXIgZGV0YWIgPSByZXF1aXJlKCdkZXRhYicpXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxuXG5mdW5jdGlvbiBjb2RlKGgsIG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gbm9kZS52YWx1ZSA/IGRldGFiKG5vZGUudmFsdWUgKyAnXFxuJykgOiAnJ1xuICB2YXIgbGFuZyA9IG5vZGUubGFuZyAmJiBub2RlLmxhbmcubWF0Y2goL15bXiBcXHRdKyg/PVsgXFx0XXwkKS8pXG4gIHZhciBwcm9wcyA9IHt9XG5cbiAgaWYgKGxhbmcpIHtcbiAgICBwcm9wcy5jbGFzc05hbWUgPSBbJ2xhbmd1YWdlLScgKyBsYW5nXVxuICB9XG5cbiAgcmV0dXJuIGgobm9kZS5wb3NpdGlvbiwgJ3ByZScsIFtoKG5vZGUsICdjb2RlJywgcHJvcHMsIFt1KCd0ZXh0JywgdmFsdWUpXSldKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/code.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/delete.js": -/*!*****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/delete.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = strikethrough;\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction strikethrough(h, node) {\n return h(node, 'del', all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2RlbGV0ZS5qcz82NjA3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmlrZXRocm91Z2hcblxudmFyIGFsbCA9IHJlcXVpcmUoJy4uL2FsbCcpXG5cbmZ1bmN0aW9uIHN0cmlrZXRocm91Z2goaCwgbm9kZSkge1xuICByZXR1cm4gaChub2RlLCAnZGVsJywgYWxsKGgsIG5vZGUpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/delete.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js": -/*!*******************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = emphasis;\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction emphasis(h, node) {\n return h(node, 'em', all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZW1waGFzaXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZW1waGFzaXMuanM/MmIxOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBlbXBoYXNpc1xuXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gZW1waGFzaXMoaCwgbm9kZSkge1xuICByZXR1cm4gaChub2RlLCAnZW0nLCBhbGwoaCwgbm9kZSkpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js": -/*!*****************************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js ***! - \*****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = footnoteReference;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nfunction footnoteReference(h, node) {\n var identifier = node.identifier;\n return h(node.position, 'sup', {\n id: 'fnref-' + identifier\n }, [h(node, 'a', {\n href: '#fn-' + identifier,\n className: ['footnote-ref']\n }, [u('text', identifier)])]);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcz9hNDkzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvb3Rub3RlUmVmZXJlbmNlXG5cbnZhciB1ID0gcmVxdWlyZSgndW5pc3QtYnVpbGRlcicpXG5cbmZ1bmN0aW9uIGZvb3Rub3RlUmVmZXJlbmNlKGgsIG5vZGUpIHtcbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmlkZW50aWZpZXJcblxuICByZXR1cm4gaChub2RlLnBvc2l0aW9uLCAnc3VwJywge2lkOiAnZm5yZWYtJyArIGlkZW50aWZpZXJ9LCBbXG4gICAgaChub2RlLCAnYScsIHtocmVmOiAnI2ZuLScgKyBpZGVudGlmaWVyLCBjbGFzc05hbWU6IFsnZm9vdG5vdGUtcmVmJ119LCBbXG4gICAgICB1KCd0ZXh0JywgaWRlbnRpZmllcilcbiAgICBdKVxuICBdKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/footnote.js": -/*!*******************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/footnote.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = footnote;\n\nvar footnoteReference = __webpack_require__(/*! ./footnote-reference */ \"../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js\");\n\nfunction footnote(h, node) {\n var identifiers = [];\n var identifier = 1;\n var footnotes = h.footnotes;\n var length = footnotes.length;\n var index = -1;\n\n while (++index < length) {\n identifiers[index] = footnotes[index].identifier;\n }\n\n while (identifiers.indexOf(String(identifier)) !== -1) {\n identifier++;\n }\n\n identifier = String(identifier);\n footnotes.push({\n type: 'footnoteDefinition',\n identifier: identifier,\n children: [{\n type: 'paragraph',\n children: node.children\n }],\n position: node.position\n });\n return footnoteReference(h, {\n type: 'footnoteReference',\n identifier: identifier,\n position: node.position\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUuanM/NDhhNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmb290bm90ZVxuXG52YXIgZm9vdG5vdGVSZWZlcmVuY2UgPSByZXF1aXJlKCcuL2Zvb3Rub3RlLXJlZmVyZW5jZScpXG5cbmZ1bmN0aW9uIGZvb3Rub3RlKGgsIG5vZGUpIHtcbiAgdmFyIGlkZW50aWZpZXJzID0gW11cbiAgdmFyIGlkZW50aWZpZXIgPSAxXG4gIHZhciBmb290bm90ZXMgPSBoLmZvb3Rub3Rlc1xuICB2YXIgbGVuZ3RoID0gZm9vdG5vdGVzLmxlbmd0aFxuICB2YXIgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWRlbnRpZmllcnNbaW5kZXhdID0gZm9vdG5vdGVzW2luZGV4XS5pZGVudGlmaWVyXG4gIH1cblxuICB3aGlsZSAoaWRlbnRpZmllcnMuaW5kZXhPZihTdHJpbmcoaWRlbnRpZmllcikpICE9PSAtMSkge1xuICAgIGlkZW50aWZpZXIrK1xuICB9XG5cbiAgaWRlbnRpZmllciA9IFN0cmluZyhpZGVudGlmaWVyKVxuXG4gIGZvb3Rub3Rlcy5wdXNoKHtcbiAgICB0eXBlOiAnZm9vdG5vdGVEZWZpbml0aW9uJyxcbiAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgIGNoaWxkcmVuOiBbe3R5cGU6ICdwYXJhZ3JhcGgnLCBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbn1dLFxuICAgIHBvc2l0aW9uOiBub2RlLnBvc2l0aW9uXG4gIH0pXG5cbiAgcmV0dXJuIGZvb3Rub3RlUmVmZXJlbmNlKGgsIHtcbiAgICB0eXBlOiAnZm9vdG5vdGVSZWZlcmVuY2UnLFxuICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgcG9zaXRpb246IG5vZGUucG9zaXRpb25cbiAgfSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/footnote.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/heading.js": -/*!******************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/heading.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = heading;\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction heading(h, node) {\n return h(node, 'h' + node.depth, all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9oZWFkaW5nLmpzP2YyMDMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gaGVhZGluZ1xuXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gaGVhZGluZyhoLCBub2RlKSB7XG4gIHJldHVybiBoKG5vZGUsICdoJyArIG5vZGUuZGVwdGgsIGFsbChoLCBub2RlKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/heading.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/html.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/html.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = html;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\"); // Return either a `raw` node, in dangerous mode, or nothing.\n\n\nfunction html(h, node) {\n return h.dangerous ? h.augment(node, u('raw', node.value)) : null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9odG1sLmpzP2QyMzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gaHRtbFxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxuXG4vLyBSZXR1cm4gZWl0aGVyIGEgYHJhd2Agbm9kZSwgaW4gZGFuZ2Vyb3VzIG1vZGUsIG9yIG5vdGhpbmcuXG5mdW5jdGlvbiBodG1sKGgsIG5vZGUpIHtcbiAgcmV0dXJuIGguZGFuZ2Vyb3VzID8gaC5hdWdtZW50KG5vZGUsIHUoJ3JhdycsIG5vZGUudmFsdWUpKSA6IG51bGxcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/html.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js": -/*!**************************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = imageReference;\n\nvar normalize = __webpack_require__(/*! mdurl/encode */ \"../node_modules/mdurl/encode.js\");\n\nvar revert = __webpack_require__(/*! ../revert */ \"../node_modules/mdast-util-to-hast/lib/revert.js\");\n\nfunction imageReference(h, node) {\n var def = h.definition(node.identifier);\n var props;\n\n if (!def) {\n return revert(h, node);\n }\n\n props = {\n src: normalize(def.url || ''),\n alt: node.alt\n };\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title;\n }\n\n return h(node, 'img', props);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UtcmVmZXJlbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcz9iMTM2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGltYWdlUmVmZXJlbmNlXG5cbnZhciBub3JtYWxpemUgPSByZXF1aXJlKCdtZHVybC9lbmNvZGUnKVxudmFyIHJldmVydCA9IHJlcXVpcmUoJy4uL3JldmVydCcpXG5cbmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlKGgsIG5vZGUpIHtcbiAgdmFyIGRlZiA9IGguZGVmaW5pdGlvbihub2RlLmlkZW50aWZpZXIpXG4gIHZhciBwcm9wc1xuXG4gIGlmICghZGVmKSB7XG4gICAgcmV0dXJuIHJldmVydChoLCBub2RlKVxuICB9XG5cbiAgcHJvcHMgPSB7c3JjOiBub3JtYWxpemUoZGVmLnVybCB8fCAnJyksIGFsdDogbm9kZS5hbHR9XG5cbiAgaWYgKGRlZi50aXRsZSAhPT0gbnVsbCAmJiBkZWYudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BzLnRpdGxlID0gZGVmLnRpdGxlXG4gIH1cblxuICByZXR1cm4gaChub2RlLCAnaW1nJywgcHJvcHMpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/image.js": -/*!****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/image.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar normalize = __webpack_require__(/*! mdurl/encode */ \"../node_modules/mdurl/encode.js\");\n\nmodule.exports = image;\n\nfunction image(h, node) {\n var props = {\n src: normalize(node.url),\n alt: node.alt\n };\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title;\n }\n\n return h(node, 'img', props);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanM/MzNkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIG5vcm1hbGl6ZSA9IHJlcXVpcmUoJ21kdXJsL2VuY29kZScpXG5cbm1vZHVsZS5leHBvcnRzID0gaW1hZ2VcblxuZnVuY3Rpb24gaW1hZ2UoaCwgbm9kZSkge1xuICB2YXIgcHJvcHMgPSB7c3JjOiBub3JtYWxpemUobm9kZS51cmwpLCBhbHQ6IG5vZGUuYWx0fVxuXG4gIGlmIChub2RlLnRpdGxlICE9PSBudWxsICYmIG5vZGUudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BzLnRpdGxlID0gbm9kZS50aXRsZVxuICB9XG5cbiAgcmV0dXJuIGgobm9kZSwgJ2ltZycsIHByb3BzKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/image.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/index.js": -/*!****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/index.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = {\n blockquote: __webpack_require__(/*! ./blockquote */ \"../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js\"),\n \"break\": __webpack_require__(/*! ./break */ \"../node_modules/mdast-util-to-hast/lib/handlers/break.js\"),\n code: __webpack_require__(/*! ./code */ \"../node_modules/mdast-util-to-hast/lib/handlers/code.js\"),\n \"delete\": __webpack_require__(/*! ./delete */ \"../node_modules/mdast-util-to-hast/lib/handlers/delete.js\"),\n emphasis: __webpack_require__(/*! ./emphasis */ \"../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js\"),\n footnoteReference: __webpack_require__(/*! ./footnote-reference */ \"../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js\"),\n footnote: __webpack_require__(/*! ./footnote */ \"../node_modules/mdast-util-to-hast/lib/handlers/footnote.js\"),\n heading: __webpack_require__(/*! ./heading */ \"../node_modules/mdast-util-to-hast/lib/handlers/heading.js\"),\n html: __webpack_require__(/*! ./html */ \"../node_modules/mdast-util-to-hast/lib/handlers/html.js\"),\n imageReference: __webpack_require__(/*! ./image-reference */ \"../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js\"),\n image: __webpack_require__(/*! ./image */ \"../node_modules/mdast-util-to-hast/lib/handlers/image.js\"),\n inlineCode: __webpack_require__(/*! ./inline-code */ \"../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js\"),\n linkReference: __webpack_require__(/*! ./link-reference */ \"../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js\"),\n link: __webpack_require__(/*! ./link */ \"../node_modules/mdast-util-to-hast/lib/handlers/link.js\"),\n listItem: __webpack_require__(/*! ./list-item */ \"../node_modules/mdast-util-to-hast/lib/handlers/list-item.js\"),\n list: __webpack_require__(/*! ./list */ \"../node_modules/mdast-util-to-hast/lib/handlers/list.js\"),\n paragraph: __webpack_require__(/*! ./paragraph */ \"../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js\"),\n root: __webpack_require__(/*! ./root */ \"../node_modules/mdast-util-to-hast/lib/handlers/root.js\"),\n strong: __webpack_require__(/*! ./strong */ \"../node_modules/mdast-util-to-hast/lib/handlers/strong.js\"),\n table: __webpack_require__(/*! ./table */ \"../node_modules/mdast-util-to-hast/lib/handlers/table.js\"),\n text: __webpack_require__(/*! ./text */ \"../node_modules/mdast-util-to-hast/lib/handlers/text.js\"),\n thematicBreak: __webpack_require__(/*! ./thematic-break */ \"../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js\"),\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}; // Return nothing for nodes which are ignored.\n\nfunction ignore() {\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanM/NmRjZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJsb2NrcXVvdGU6IHJlcXVpcmUoJy4vYmxvY2txdW90ZScpLFxuICBicmVhazogcmVxdWlyZSgnLi9icmVhaycpLFxuICBjb2RlOiByZXF1aXJlKCcuL2NvZGUnKSxcbiAgZGVsZXRlOiByZXF1aXJlKCcuL2RlbGV0ZScpLFxuICBlbXBoYXNpczogcmVxdWlyZSgnLi9lbXBoYXNpcycpLFxuICBmb290bm90ZVJlZmVyZW5jZTogcmVxdWlyZSgnLi9mb290bm90ZS1yZWZlcmVuY2UnKSxcbiAgZm9vdG5vdGU6IHJlcXVpcmUoJy4vZm9vdG5vdGUnKSxcbiAgaGVhZGluZzogcmVxdWlyZSgnLi9oZWFkaW5nJyksXG4gIGh0bWw6IHJlcXVpcmUoJy4vaHRtbCcpLFxuICBpbWFnZVJlZmVyZW5jZTogcmVxdWlyZSgnLi9pbWFnZS1yZWZlcmVuY2UnKSxcbiAgaW1hZ2U6IHJlcXVpcmUoJy4vaW1hZ2UnKSxcbiAgaW5saW5lQ29kZTogcmVxdWlyZSgnLi9pbmxpbmUtY29kZScpLFxuICBsaW5rUmVmZXJlbmNlOiByZXF1aXJlKCcuL2xpbmstcmVmZXJlbmNlJyksXG4gIGxpbms6IHJlcXVpcmUoJy4vbGluaycpLFxuICBsaXN0SXRlbTogcmVxdWlyZSgnLi9saXN0LWl0ZW0nKSxcbiAgbGlzdDogcmVxdWlyZSgnLi9saXN0JyksXG4gIHBhcmFncmFwaDogcmVxdWlyZSgnLi9wYXJhZ3JhcGgnKSxcbiAgcm9vdDogcmVxdWlyZSgnLi9yb290JyksXG4gIHN0cm9uZzogcmVxdWlyZSgnLi9zdHJvbmcnKSxcbiAgdGFibGU6IHJlcXVpcmUoJy4vdGFibGUnKSxcbiAgdGV4dDogcmVxdWlyZSgnLi90ZXh0JyksXG4gIHRoZW1hdGljQnJlYWs6IHJlcXVpcmUoJy4vdGhlbWF0aWMtYnJlYWsnKSxcbiAgdG9tbDogaWdub3JlLFxuICB5YW1sOiBpZ25vcmUsXG4gIGRlZmluaXRpb246IGlnbm9yZSxcbiAgZm9vdG5vdGVEZWZpbml0aW9uOiBpZ25vcmVcbn1cblxuLy8gUmV0dXJuIG5vdGhpbmcgZm9yIG5vZGVzIHdoaWNoIGFyZSBpZ25vcmVkLlxuZnVuY3Rpb24gaWdub3JlKCkge1xuICByZXR1cm4gbnVsbFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBO0FBQ0E7QUE2QkE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js": -/*!**********************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = inlineCode;\n\nvar collapse = __webpack_require__(/*! collapse-white-space */ \"../node_modules/collapse-white-space/index.js\");\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nfunction inlineCode(h, node) {\n return h(node, 'code', [u('text', collapse(node.value))]);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5saW5lLWNvZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5saW5lLWNvZGUuanM/MzQzMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBpbmxpbmVDb2RlXG5cbnZhciBjb2xsYXBzZSA9IHJlcXVpcmUoJ2NvbGxhcHNlLXdoaXRlLXNwYWNlJylcbnZhciB1ID0gcmVxdWlyZSgndW5pc3QtYnVpbGRlcicpXG5cbmZ1bmN0aW9uIGlubGluZUNvZGUoaCwgbm9kZSkge1xuICByZXR1cm4gaChub2RlLCAnY29kZScsIFt1KCd0ZXh0JywgY29sbGFwc2Uobm9kZS52YWx1ZSkpXSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js": -/*!*************************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = linkReference;\n\nvar normalize = __webpack_require__(/*! mdurl/encode */ \"../node_modules/mdurl/encode.js\");\n\nvar revert = __webpack_require__(/*! ../revert */ \"../node_modules/mdast-util-to-hast/lib/revert.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction linkReference(h, node) {\n var def = h.definition(node.identifier);\n var props;\n\n if (!def) {\n return revert(h, node);\n }\n\n props = {\n href: normalize(def.url || '')\n };\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title;\n }\n\n return h(node, 'a', props, all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay1yZWZlcmVuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay1yZWZlcmVuY2UuanM/ZjllYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5rUmVmZXJlbmNlXG5cbnZhciBub3JtYWxpemUgPSByZXF1aXJlKCdtZHVybC9lbmNvZGUnKVxudmFyIHJldmVydCA9IHJlcXVpcmUoJy4uL3JldmVydCcpXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gbGlua1JlZmVyZW5jZShoLCBub2RlKSB7XG4gIHZhciBkZWYgPSBoLmRlZmluaXRpb24obm9kZS5pZGVudGlmaWVyKVxuICB2YXIgcHJvcHNcblxuICBpZiAoIWRlZikge1xuICAgIHJldHVybiByZXZlcnQoaCwgbm9kZSlcbiAgfVxuXG4gIHByb3BzID0ge2hyZWY6IG5vcm1hbGl6ZShkZWYudXJsIHx8ICcnKX1cblxuICBpZiAoZGVmLnRpdGxlICE9PSBudWxsICYmIGRlZi50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvcHMudGl0bGUgPSBkZWYudGl0bGVcbiAgfVxuXG4gIHJldHVybiBoKG5vZGUsICdhJywgcHJvcHMsIGFsbChoLCBub2RlKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/link.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/link.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar normalize = __webpack_require__(/*! mdurl/encode */ \"../node_modules/mdurl/encode.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nmodule.exports = link;\n\nfunction link(h, node) {\n var props = {\n href: normalize(node.url)\n };\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title;\n }\n\n return h(node, 'a', props, all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzP2Y2OTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbnZhciBub3JtYWxpemUgPSByZXF1aXJlKCdtZHVybC9lbmNvZGUnKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4uL2FsbCcpXG5cbm1vZHVsZS5leHBvcnRzID0gbGlua1xuXG5mdW5jdGlvbiBsaW5rKGgsIG5vZGUpIHtcbiAgdmFyIHByb3BzID0ge2hyZWY6IG5vcm1hbGl6ZShub2RlLnVybCl9XG5cbiAgaWYgKG5vZGUudGl0bGUgIT09IG51bGwgJiYgbm9kZS50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvcHMudGl0bGUgPSBub2RlLnRpdGxlXG4gIH1cblxuICByZXR1cm4gaChub2RlLCAnYScsIHByb3BzLCBhbGwoaCwgbm9kZSkpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/link.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/list-item.js": -/*!********************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/list-item.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = listItem;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar wrap = __webpack_require__(/*! ../wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction listItem(h, node, parent) {\n var children = node.children;\n var head = children[0];\n var props = {};\n var single = false;\n var result;\n var container;\n\n if ((!parent || !parent.loose) && children.length === 1 && head.type === 'paragraph') {\n single = true;\n }\n\n result = all(h, single ? head : node);\n\n if (typeof node.checked === 'boolean') {\n if (!single && (!head || head.type !== 'paragraph')) {\n result.unshift(h(null, 'p', []));\n }\n\n container = single ? result : result[0].children;\n\n if (container.length !== 0) {\n container.unshift(u('text', ' '));\n }\n\n container.unshift(h(null, 'input', {\n type: 'checkbox',\n checked: node.checked,\n disabled: true\n })); // According to github-markdown-css, this class hides bullet.\n\n props.className = ['task-list-item'];\n }\n\n if (!single && result.length !== 0) {\n result = wrap(result, true);\n }\n\n return h(node, 'li', props, result);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC1pdGVtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcz85NWYwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RJdGVtXG5cbnZhciB1ID0gcmVxdWlyZSgndW5pc3QtYnVpbGRlcicpXG52YXIgd3JhcCA9IHJlcXVpcmUoJy4uL3dyYXAnKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4uL2FsbCcpXG5cbmZ1bmN0aW9uIGxpc3RJdGVtKGgsIG5vZGUsIHBhcmVudCkge1xuICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuXG4gIHZhciBoZWFkID0gY2hpbGRyZW5bMF1cbiAgdmFyIHByb3BzID0ge31cbiAgdmFyIHNpbmdsZSA9IGZhbHNlXG4gIHZhciByZXN1bHRcbiAgdmFyIGNvbnRhaW5lclxuXG4gIGlmIChcbiAgICAoIXBhcmVudCB8fCAhcGFyZW50Lmxvb3NlKSAmJlxuICAgIGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgIGhlYWQudHlwZSA9PT0gJ3BhcmFncmFwaCdcbiAgKSB7XG4gICAgc2luZ2xlID0gdHJ1ZVxuICB9XG5cbiAgcmVzdWx0ID0gYWxsKGgsIHNpbmdsZSA/IGhlYWQgOiBub2RlKVxuXG4gIGlmICh0eXBlb2Ygbm9kZS5jaGVja2VkID09PSAnYm9vbGVhbicpIHtcbiAgICBpZiAoIXNpbmdsZSAmJiAoIWhlYWQgfHwgaGVhZC50eXBlICE9PSAncGFyYWdyYXBoJykpIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KGgobnVsbCwgJ3AnLCBbXSkpXG4gICAgfVxuXG4gICAgY29udGFpbmVyID0gc2luZ2xlID8gcmVzdWx0IDogcmVzdWx0WzBdLmNoaWxkcmVuXG5cbiAgICBpZiAoY29udGFpbmVyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgY29udGFpbmVyLnVuc2hpZnQodSgndGV4dCcsICcgJykpXG4gICAgfVxuXG4gICAgY29udGFpbmVyLnVuc2hpZnQoXG4gICAgICBoKG51bGwsICdpbnB1dCcsIHtcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgY2hlY2tlZDogbm9kZS5jaGVja2VkLFxuICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApXG5cbiAgICAvLyBBY2NvcmRpbmcgdG8gZ2l0aHViLW1hcmtkb3duLWNzcywgdGhpcyBjbGFzcyBoaWRlcyBidWxsZXQuXG4gICAgcHJvcHMuY2xhc3NOYW1lID0gWyd0YXNrLWxpc3QtaXRlbSddXG4gIH1cblxuICBpZiAoIXNpbmdsZSAmJiByZXN1bHQubGVuZ3RoICE9PSAwKSB7XG4gICAgcmVzdWx0ID0gd3JhcChyZXN1bHQsIHRydWUpXG4gIH1cblxuICByZXR1cm4gaChub2RlLCAnbGknLCBwcm9wcywgcmVzdWx0KVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/list-item.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/list.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/list.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = list;\n\nvar wrap = __webpack_require__(/*! ../wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction list(h, node) {\n var props = {};\n var name = node.ordered ? 'ol' : 'ul';\n\n if (typeof node.start === 'number' && node.start !== 1) {\n props.start = node.start;\n }\n\n return h(node, name, props, wrap(all(h, node), true));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LmpzP2E2NzEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdFxuXG52YXIgd3JhcCA9IHJlcXVpcmUoJy4uL3dyYXAnKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4uL2FsbCcpXG5cbmZ1bmN0aW9uIGxpc3QoaCwgbm9kZSkge1xuICB2YXIgcHJvcHMgPSB7fVxuICB2YXIgbmFtZSA9IG5vZGUub3JkZXJlZCA/ICdvbCcgOiAndWwnXG5cbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ID09PSAnbnVtYmVyJyAmJiBub2RlLnN0YXJ0ICE9PSAxKSB7XG4gICAgcHJvcHMuc3RhcnQgPSBub2RlLnN0YXJ0XG4gIH1cblxuICByZXR1cm4gaChub2RlLCBuYW1lLCBwcm9wcywgd3JhcChhbGwoaCwgbm9kZSksIHRydWUpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/list.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js": -/*!********************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = paragraph;\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction paragraph(h, node) {\n return h(node, 'p', all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcGFyYWdyYXBoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcz8zMzYwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFncmFwaFxuXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gcGFyYWdyYXBoKGgsIG5vZGUpIHtcbiAgcmV0dXJuIGgobm9kZSwgJ3AnLCBhbGwoaCwgbm9kZSkpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/root.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/root.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = root;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar wrap = __webpack_require__(/*! ../wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction root(h, node) {\n return h.augment(node, u('root', wrap(all(h, node))));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcm9vdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzP2U1NmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdFxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxudmFyIHdyYXAgPSByZXF1aXJlKCcuLi93cmFwJylcbnZhciBhbGwgPSByZXF1aXJlKCcuLi9hbGwnKVxuXG5mdW5jdGlvbiByb290KGgsIG5vZGUpIHtcbiAgcmV0dXJuIGguYXVnbWVudChub2RlLCB1KCdyb290Jywgd3JhcChhbGwoaCwgbm9kZSkpKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/root.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/strong.js": -/*!*****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/strong.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = strong;\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction strong(h, node) {\n return h(node, 'strong', all(h, node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3N0cm9uZy5qcz9hMzIwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cm9uZ1xuXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gc3Ryb25nKGgsIG5vZGUpIHtcbiAgcmV0dXJuIGgobm9kZSwgJ3N0cm9uZycsIGFsbChoLCBub2RlKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/strong.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/table.js": -/*!****************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/table.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = table;\n\nvar position = __webpack_require__(/*! unist-util-position */ \"../node_modules/unist-util-position/index.js\");\n\nvar wrap = __webpack_require__(/*! ../wrap */ \"../node_modules/mdast-util-to-hast/lib/wrap.js\");\n\nvar all = __webpack_require__(/*! ../all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nfunction table(h, node) {\n var rows = node.children;\n var index = rows.length;\n var align = node.align;\n var alignLength = align.length;\n var result = [];\n var pos;\n var row;\n var out;\n var name;\n var cell;\n\n while (index--) {\n row = rows[index].children;\n name = index === 0 ? 'th' : 'td';\n pos = alignLength;\n out = [];\n\n while (pos--) {\n cell = row[pos];\n out[pos] = h(cell, name, {\n align: align[pos]\n }, cell ? all(h, cell) : []);\n }\n\n result[index] = h(rows[index], 'tr', wrap(out, true));\n }\n\n return h(node, 'table', wrap([h(result[0].position, 'thead', wrap([result[0]], true)), h({\n start: position.start(result[1]),\n end: position.end(result[result.length - 1])\n }, 'tbody', wrap(result.slice(1), true))], true));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanM/ZWNiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB0YWJsZVxuXG52YXIgcG9zaXRpb24gPSByZXF1aXJlKCd1bmlzdC11dGlsLXBvc2l0aW9uJylcbnZhciB3cmFwID0gcmVxdWlyZSgnLi4vd3JhcCcpXG52YXIgYWxsID0gcmVxdWlyZSgnLi4vYWxsJylcblxuZnVuY3Rpb24gdGFibGUoaCwgbm9kZSkge1xuICB2YXIgcm93cyA9IG5vZGUuY2hpbGRyZW5cbiAgdmFyIGluZGV4ID0gcm93cy5sZW5ndGhcbiAgdmFyIGFsaWduID0gbm9kZS5hbGlnblxuICB2YXIgYWxpZ25MZW5ndGggPSBhbGlnbi5sZW5ndGhcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciBwb3NcbiAgdmFyIHJvd1xuICB2YXIgb3V0XG4gIHZhciBuYW1lXG4gIHZhciBjZWxsXG5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICByb3cgPSByb3dzW2luZGV4XS5jaGlsZHJlblxuICAgIG5hbWUgPSBpbmRleCA9PT0gMCA/ICd0aCcgOiAndGQnXG4gICAgcG9zID0gYWxpZ25MZW5ndGhcbiAgICBvdXQgPSBbXVxuXG4gICAgd2hpbGUgKHBvcy0tKSB7XG4gICAgICBjZWxsID0gcm93W3Bvc11cbiAgICAgIG91dFtwb3NdID0gaChjZWxsLCBuYW1lLCB7YWxpZ246IGFsaWduW3Bvc119LCBjZWxsID8gYWxsKGgsIGNlbGwpIDogW10pXG4gICAgfVxuXG4gICAgcmVzdWx0W2luZGV4XSA9IGgocm93c1tpbmRleF0sICd0cicsIHdyYXAob3V0LCB0cnVlKSlcbiAgfVxuXG4gIHJldHVybiBoKFxuICAgIG5vZGUsXG4gICAgJ3RhYmxlJyxcbiAgICB3cmFwKFxuICAgICAgW1xuICAgICAgICBoKHJlc3VsdFswXS5wb3NpdGlvbiwgJ3RoZWFkJywgd3JhcChbcmVzdWx0WzBdXSwgdHJ1ZSkpLFxuICAgICAgICBoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXJ0OiBwb3NpdGlvbi5zdGFydChyZXN1bHRbMV0pLFxuICAgICAgICAgICAgZW5kOiBwb3NpdGlvbi5lbmQocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSlcbiAgICAgICAgICB9LFxuICAgICAgICAgICd0Ym9keScsXG4gICAgICAgICAgd3JhcChyZXN1bHQuc2xpY2UoMSksIHRydWUpXG4gICAgICAgIClcbiAgICAgIF0sXG4gICAgICB0cnVlXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFGQTtBQVdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/table.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/text.js": -/*!***************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/text.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = text;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar trimLines = __webpack_require__(/*! trim-lines */ \"../node_modules/trim-lines/index.js\");\n\nfunction text(h, node) {\n return h.augment(node, u('text', trimLines(node.value)));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90ZXh0LmpzPzIxZTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gdGV4dFxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxudmFyIHRyaW1MaW5lcyA9IHJlcXVpcmUoJ3RyaW0tbGluZXMnKVxuXG5mdW5jdGlvbiB0ZXh0KGgsIG5vZGUpIHtcbiAgcmV0dXJuIGguYXVnbWVudChub2RlLCB1KCd0ZXh0JywgdHJpbUxpbmVzKG5vZGUudmFsdWUpKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/text.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js": -/*!*************************************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = thematicBreak;\n\nfunction thematicBreak(h, node) {\n return h(node, 'hr');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanM/ZGM1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB0aGVtYXRpY0JyZWFrXG5cbmZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoaCwgbm9kZSkge1xuICByZXR1cm4gaChub2RlLCAnaHInKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/index.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = toHast;\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nvar position = __webpack_require__(/*! unist-util-position */ \"../node_modules/unist-util-position/index.js\");\n\nvar generated = __webpack_require__(/*! unist-util-generated */ \"../node_modules/unist-util-generated/index.js\");\n\nvar definitions = __webpack_require__(/*! mdast-util-definitions */ \"../node_modules/mdast-util-definitions/index.js\");\n\nvar one = __webpack_require__(/*! ./one */ \"../node_modules/mdast-util-to-hast/lib/one.js\");\n\nvar footer = __webpack_require__(/*! ./footer */ \"../node_modules/mdast-util-to-hast/lib/footer.js\");\n\nvar handlers = __webpack_require__(/*! ./handlers */ \"../node_modules/mdast-util-to-hast/lib/handlers/index.js\"); // Factory to transform.\n\n\nfunction factory(tree, options) {\n var settings = options || {};\n var dangerous = settings.allowDangerousHTML;\n h.dangerous = dangerous;\n h.definition = definitions(tree, settings);\n h.footnotes = [];\n h.augment = augment;\n h.handlers = xtend(handlers, settings.handlers || {});\n visit(tree, 'footnoteDefinition', visitor);\n return h; // Finalise the created `right`, a hast node, from `left`, an mdast node.\n\n function augment(left, right) {\n var data;\n var ctx; // Handle `data.hName`, `data.hProperties, `hChildren`.\n\n if (left && 'data' in left) {\n data = left.data;\n\n if (right.type === 'element' && data.hName) {\n right.tagName = data.hName;\n }\n\n if (right.type === 'element' && data.hProperties) {\n right.properties = xtend(right.properties, data.hProperties);\n }\n\n if (right.children && data.hChildren) {\n right.children = data.hChildren;\n }\n }\n\n ctx = left && left.position ? left : {\n position: left\n };\n\n if (!generated(ctx)) {\n right.position = {\n start: position.start(ctx),\n end: position.end(ctx)\n };\n }\n\n return right;\n } // Create an element for a `node`.\n\n\n function h(node, tagName, props, children) {\n if ((children === undefined || children === null) && _typeof(props) === 'object' && 'length' in props) {\n children = props;\n props = {};\n }\n\n return augment(node, {\n type: 'element',\n tagName: tagName,\n properties: props || {},\n children: children || []\n });\n }\n\n function visitor(definition) {\n h.footnotes.push(definition);\n }\n} // Transform `tree`, which is an mdast node, to a hast node.\n\n\nfunction toHast(tree, options) {\n var h = factory(tree, options);\n var node = one(h, tree);\n var footnotes = footer(h);\n\n if (node && node.children && footnotes) {\n node.children = node.children.concat(u('text', '\\n'), footnotes);\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanM/MjUxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB0b0hhc3RcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxudmFyIHUgPSByZXF1aXJlKCd1bmlzdC1idWlsZGVyJylcbnZhciB2aXNpdCA9IHJlcXVpcmUoJ3VuaXN0LXV0aWwtdmlzaXQnKVxudmFyIHBvc2l0aW9uID0gcmVxdWlyZSgndW5pc3QtdXRpbC1wb3NpdGlvbicpXG52YXIgZ2VuZXJhdGVkID0gcmVxdWlyZSgndW5pc3QtdXRpbC1nZW5lcmF0ZWQnKVxudmFyIGRlZmluaXRpb25zID0gcmVxdWlyZSgnbWRhc3QtdXRpbC1kZWZpbml0aW9ucycpXG52YXIgb25lID0gcmVxdWlyZSgnLi9vbmUnKVxudmFyIGZvb3RlciA9IHJlcXVpcmUoJy4vZm9vdGVyJylcbnZhciBoYW5kbGVycyA9IHJlcXVpcmUoJy4vaGFuZGxlcnMnKVxuXG4vLyBGYWN0b3J5IHRvIHRyYW5zZm9ybS5cbmZ1bmN0aW9uIGZhY3RvcnkodHJlZSwgb3B0aW9ucykge1xuICB2YXIgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBkYW5nZXJvdXMgPSBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0hUTUxcblxuICBoLmRhbmdlcm91cyA9IGRhbmdlcm91c1xuICBoLmRlZmluaXRpb24gPSBkZWZpbml0aW9ucyh0cmVlLCBzZXR0aW5ncylcbiAgaC5mb290bm90ZXMgPSBbXVxuICBoLmF1Z21lbnQgPSBhdWdtZW50XG4gIGguaGFuZGxlcnMgPSB4dGVuZChoYW5kbGVycywgc2V0dGluZ3MuaGFuZGxlcnMgfHwge30pXG5cbiAgdmlzaXQodHJlZSwgJ2Zvb3Rub3RlRGVmaW5pdGlvbicsIHZpc2l0b3IpXG5cbiAgcmV0dXJuIGhcblxuICAvLyBGaW5hbGlzZSB0aGUgY3JlYXRlZCBgcmlnaHRgLCBhIGhhc3Qgbm9kZSwgZnJvbSBgbGVmdGAsIGFuIG1kYXN0IG5vZGUuXG4gIGZ1bmN0aW9uIGF1Z21lbnQobGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgZGF0YVxuICAgIHZhciBjdHhcblxuICAgIC8vIEhhbmRsZSBgZGF0YS5oTmFtZWAsIGBkYXRhLmhQcm9wZXJ0aWVzLCBgaENoaWxkcmVuYC5cbiAgICBpZiAobGVmdCAmJiAnZGF0YScgaW4gbGVmdCkge1xuICAgICAgZGF0YSA9IGxlZnQuZGF0YVxuXG4gICAgICBpZiAocmlnaHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmIGRhdGEuaE5hbWUpIHtcbiAgICAgICAgcmlnaHQudGFnTmFtZSA9IGRhdGEuaE5hbWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJpZ2h0LnR5cGUgPT09ICdlbGVtZW50JyAmJiBkYXRhLmhQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJpZ2h0LnByb3BlcnRpZXMgPSB4dGVuZChyaWdodC5wcm9wZXJ0aWVzLCBkYXRhLmhQcm9wZXJ0aWVzKVxuICAgICAgfVxuXG4gICAgICBpZiAocmlnaHQuY2hpbGRyZW4gJiYgZGF0YS5oQ2hpbGRyZW4pIHtcbiAgICAgICAgcmlnaHQuY2hpbGRyZW4gPSBkYXRhLmhDaGlsZHJlblxuICAgICAgfVxuICAgIH1cblxuICAgIGN0eCA9IGxlZnQgJiYgbGVmdC5wb3NpdGlvbiA/IGxlZnQgOiB7cG9zaXRpb246IGxlZnR9XG5cbiAgICBpZiAoIWdlbmVyYXRlZChjdHgpKSB7XG4gICAgICByaWdodC5wb3NpdGlvbiA9IHtcbiAgICAgICAgc3RhcnQ6IHBvc2l0aW9uLnN0YXJ0KGN0eCksXG4gICAgICAgIGVuZDogcG9zaXRpb24uZW5kKGN0eClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmlnaHRcbiAgfVxuXG4gIC8vIENyZWF0ZSBhbiBlbGVtZW50IGZvciBhIGBub2RlYC5cbiAgZnVuY3Rpb24gaChub2RlLCB0YWdOYW1lLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICBpZiAoXG4gICAgICAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCBjaGlsZHJlbiA9PT0gbnVsbCkgJiZcbiAgICAgIHR5cGVvZiBwcm9wcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdsZW5ndGgnIGluIHByb3BzXG4gICAgKSB7XG4gICAgICBjaGlsZHJlbiA9IHByb3BzXG4gICAgICBwcm9wcyA9IHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1Z21lbnQobm9kZSwge1xuICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BzIHx8IHt9LFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuIHx8IFtdXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc2l0b3IoZGVmaW5pdGlvbikge1xuICAgIGguZm9vdG5vdGVzLnB1c2goZGVmaW5pdGlvbilcbiAgfVxufVxuXG4vLyBUcmFuc2Zvcm0gYHRyZWVgLCB3aGljaCBpcyBhbiBtZGFzdCBub2RlLCB0byBhIGhhc3Qgbm9kZS5cbmZ1bmN0aW9uIHRvSGFzdCh0cmVlLCBvcHRpb25zKSB7XG4gIHZhciBoID0gZmFjdG9yeSh0cmVlLCBvcHRpb25zKVxuICB2YXIgbm9kZSA9IG9uZShoLCB0cmVlKVxuICB2YXIgZm9vdG5vdGVzID0gZm9vdGVyKGgpXG5cbiAgaWYgKG5vZGUgJiYgbm9kZS5jaGlsZHJlbiAmJiBmb290bm90ZXMpIHtcbiAgICBub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5jb25jYXQodSgndGV4dCcsICdcXG4nKSwgZm9vdG5vdGVzKVxuICB9XG5cbiAgcmV0dXJuIG5vZGVcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQTdDQTtBQUNBO0FBQ0E7QUErQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/one.js": -/*!*****************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/one.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = one;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar all = __webpack_require__(/*! ./all */ \"../node_modules/mdast-util-to-hast/lib/all.js\");\n\nvar own = {}.hasOwnProperty; // Transform an unknown node.\n\nfunction unknown(h, node) {\n if (text(node)) {\n return h.augment(node, u('text', node.value));\n }\n\n return h(node, 'div', all(h, node));\n} // Visit a node.\n\n\nfunction one(h, node, parent) {\n var type = node && node.type;\n var fn = own.call(h.handlers, type) ? h.handlers[type] : null; // Fail on non-nodes.\n\n if (!type) {\n throw new Error('Expected node, got `' + node + '`');\n }\n\n return (typeof fn === 'function' ? fn : unknown)(h, node, parent);\n} // Check if the node should be renderered a text node.\n\n\nfunction text(node) {\n var data = node.data || {};\n\n if (own.call(data, 'hName') || own.call(data, 'hProperties') || own.call(data, 'hChildren')) {\n return false;\n }\n\n return 'value' in node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvb25lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL29uZS5qcz85NmFlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZVxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4vYWxsJylcblxudmFyIG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8vIFRyYW5zZm9ybSBhbiB1bmtub3duIG5vZGUuXG5mdW5jdGlvbiB1bmtub3duKGgsIG5vZGUpIHtcbiAgaWYgKHRleHQobm9kZSkpIHtcbiAgICByZXR1cm4gaC5hdWdtZW50KG5vZGUsIHUoJ3RleHQnLCBub2RlLnZhbHVlKSlcbiAgfVxuXG4gIHJldHVybiBoKG5vZGUsICdkaXYnLCBhbGwoaCwgbm9kZSkpXG59XG5cbi8vIFZpc2l0IGEgbm9kZS5cbmZ1bmN0aW9uIG9uZShoLCBub2RlLCBwYXJlbnQpIHtcbiAgdmFyIHR5cGUgPSBub2RlICYmIG5vZGUudHlwZVxuICB2YXIgZm4gPSBvd24uY2FsbChoLmhhbmRsZXJzLCB0eXBlKSA/IGguaGFuZGxlcnNbdHlwZV0gOiBudWxsXG5cbiAgLy8gRmFpbCBvbiBub24tbm9kZXMuXG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbm9kZSwgZ290IGAnICsgbm9kZSArICdgJylcbiAgfVxuXG4gIHJldHVybiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gZm4gOiB1bmtub3duKShoLCBub2RlLCBwYXJlbnQpXG59XG5cbi8vIENoZWNrIGlmIHRoZSBub2RlIHNob3VsZCBiZSByZW5kZXJlcmVkIGEgdGV4dCBub2RlLlxuZnVuY3Rpb24gdGV4dChub2RlKSB7XG4gIHZhciBkYXRhID0gbm9kZS5kYXRhIHx8IHt9XG5cbiAgaWYgKFxuICAgIG93bi5jYWxsKGRhdGEsICdoTmFtZScpIHx8XG4gICAgb3duLmNhbGwoZGF0YSwgJ2hQcm9wZXJ0aWVzJykgfHxcbiAgICBvd24uY2FsbChkYXRhLCAnaENoaWxkcmVuJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gJ3ZhbHVlJyBpbiBub2RlXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/one.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/revert.js": -/*!********************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/revert.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = revert;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\");\n\nvar all = __webpack_require__(/*! ./all */ \"../node_modules/mdast-util-to-hast/lib/all.js\"); // Return the content of a reference without definition as markdown.\n\n\nfunction revert(h, node) {\n var subtype = node.referenceType;\n var suffix = ']';\n var contents;\n var head;\n var tail;\n\n if (subtype === 'collapsed') {\n suffix += '[]';\n } else if (subtype === 'full') {\n suffix += '[' + node.identifier + ']';\n }\n\n if (node.type === 'imageReference') {\n return u('text', '![' + node.alt + suffix);\n }\n\n contents = all(h, node);\n head = contents[0];\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value;\n } else {\n contents.unshift(u('text', '['));\n }\n\n tail = contents[contents.length - 1];\n\n if (tail && tail.type === 'text') {\n tail.value += suffix;\n } else {\n contents.push(u('text', suffix));\n }\n\n return contents;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvcmV2ZXJ0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcz9jMzExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJldmVydFxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxudmFyIGFsbCA9IHJlcXVpcmUoJy4vYWxsJylcblxuLy8gUmV0dXJuIHRoZSBjb250ZW50IG9mIGEgcmVmZXJlbmNlIHdpdGhvdXQgZGVmaW5pdGlvbiBhcyBtYXJrZG93bi5cbmZ1bmN0aW9uIHJldmVydChoLCBub2RlKSB7XG4gIHZhciBzdWJ0eXBlID0gbm9kZS5yZWZlcmVuY2VUeXBlXG4gIHZhciBzdWZmaXggPSAnXSdcbiAgdmFyIGNvbnRlbnRzXG4gIHZhciBoZWFkXG4gIHZhciB0YWlsXG5cbiAgaWYgKHN1YnR5cGUgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgc3VmZml4ICs9ICdbXSdcbiAgfSBlbHNlIGlmIChzdWJ0eXBlID09PSAnZnVsbCcpIHtcbiAgICBzdWZmaXggKz0gJ1snICsgbm9kZS5pZGVudGlmaWVyICsgJ10nXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09PSAnaW1hZ2VSZWZlcmVuY2UnKSB7XG4gICAgcmV0dXJuIHUoJ3RleHQnLCAnIVsnICsgbm9kZS5hbHQgKyBzdWZmaXgpXG4gIH1cblxuICBjb250ZW50cyA9IGFsbChoLCBub2RlKVxuICBoZWFkID0gY29udGVudHNbMF1cblxuICBpZiAoaGVhZCAmJiBoZWFkLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGhlYWQudmFsdWUgPSAnWycgKyBoZWFkLnZhbHVlXG4gIH0gZWxzZSB7XG4gICAgY29udGVudHMudW5zaGlmdCh1KCd0ZXh0JywgJ1snKSlcbiAgfVxuXG4gIHRhaWwgPSBjb250ZW50c1tjb250ZW50cy5sZW5ndGggLSAxXVxuXG4gIGlmICh0YWlsICYmIHRhaWwudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgdGFpbC52YWx1ZSArPSBzdWZmaXhcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50cy5wdXNoKHUoJ3RleHQnLCBzdWZmaXgpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRzXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/revert.js\n"); - -/***/ }), - -/***/ "../node_modules/mdast-util-to-hast/lib/wrap.js": -/*!******************************************************!*\ - !*** ../node_modules/mdast-util-to-hast/lib/wrap.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = wrap;\n\nvar u = __webpack_require__(/*! unist-builder */ \"../node_modules/unist-builder/index.js\"); // Wrap `nodes` with newlines between each entry. Optionally adds newlines at\n// the start and end.\n\n\nfunction wrap(nodes, loose) {\n var result = [];\n var index = -1;\n var length = nodes.length;\n\n if (loose) {\n result.push(u('text', '\\n'));\n }\n\n while (++index < length) {\n if (index) {\n result.push(u('text', '\\n'));\n }\n\n result.push(nodes[index]);\n }\n\n if (loose && nodes.length !== 0) {\n result.push(u('text', '\\n'));\n }\n\n return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvd3JhcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi93cmFwLmpzPzIzNDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcFxuXG52YXIgdSA9IHJlcXVpcmUoJ3VuaXN0LWJ1aWxkZXInKVxuXG4vLyBXcmFwIGBub2Rlc2Agd2l0aCBuZXdsaW5lcyBiZXR3ZWVuIGVhY2ggZW50cnkuICBPcHRpb25hbGx5IGFkZHMgbmV3bGluZXMgYXRcbi8vIHRoZSBzdGFydCBhbmQgZW5kLlxuZnVuY3Rpb24gd3JhcChub2RlcywgbG9vc2UpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGhcblxuICBpZiAobG9vc2UpIHtcbiAgICByZXN1bHQucHVzaCh1KCd0ZXh0JywgJ1xcbicpKVxuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaW5kZXgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHUoJ3RleHQnLCAnXFxuJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2gobm9kZXNbaW5kZXhdKVxuICB9XG5cbiAgaWYgKGxvb3NlICYmIG5vZGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKHUoJ3RleHQnLCAnXFxuJykpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mdast-util-to-hast/lib/wrap.js\n"); - -/***/ }), - -/***/ "../node_modules/mdurl/encode.js": -/*!***************************************!*\ - !*** ../node_modules/mdurl/encode.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar encodeCache = {}; // Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\n\nfunction getEncodeCache(exclude) {\n var i,\n ch,\n cache = encodeCache[exclude];\n\n if (cache) {\n return cache;\n }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n} // Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\n\n\nfunction encode(string, exclude, keepEscaped) {\n var i,\n l,\n code,\n nextCode,\n cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25\n /* % */\n && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\nmodule.exports = encode;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21kdXJsL2VuY29kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWR1cmwvZW5jb2RlLmpzP2FiMjYiXSwic291cmNlc0NvbnRlbnQiOlsiXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIGVuY29kZUNhY2hlID0ge307XG5cblxuLy8gQ3JlYXRlIGEgbG9va3VwIGFycmF5IHdoZXJlIGFueXRoaW5nIGJ1dCBjaGFyYWN0ZXJzIGluIGBjaGFyc2Agc3RyaW5nXG4vLyBhbmQgYWxwaGFudW1lcmljIGNoYXJzIGlzIHBlcmNlbnQtZW5jb2RlZC5cbi8vXG5mdW5jdGlvbiBnZXRFbmNvZGVDYWNoZShleGNsdWRlKSB7XG4gIHZhciBpLCBjaCwgY2FjaGUgPSBlbmNvZGVDYWNoZVtleGNsdWRlXTtcbiAgaWYgKGNhY2hlKSB7IHJldHVybiBjYWNoZTsgfVxuXG4gIGNhY2hlID0gZW5jb2RlQ2FjaGVbZXhjbHVkZV0gPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHtcbiAgICBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG5cbiAgICBpZiAoL15bMC05YS16XSQvaS50ZXN0KGNoKSkge1xuICAgICAgLy8gYWx3YXlzIGFsbG93IHVuZW5jb2RlZCBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xuICAgICAgY2FjaGUucHVzaChjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlLnB1c2goJyUnICsgKCcwJyArIGkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkpLnNsaWNlKC0yKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGV4Y2x1ZGUubGVuZ3RoOyBpKyspIHtcbiAgICBjYWNoZVtleGNsdWRlLmNoYXJDb2RlQXQoaSldID0gZXhjbHVkZVtpXTtcbiAgfVxuXG4gIHJldHVybiBjYWNoZTtcbn1cblxuXG4vLyBFbmNvZGUgdW5zYWZlIGNoYXJhY3RlcnMgd2l0aCBwZXJjZW50LWVuY29kaW5nLCBza2lwcGluZyBhbHJlYWR5XG4vLyBlbmNvZGVkIHNlcXVlbmNlcy5cbi8vXG4vLyAgLSBzdHJpbmcgICAgICAgLSBzdHJpbmcgdG8gZW5jb2RlXG4vLyAgLSBleGNsdWRlICAgICAgLSBsaXN0IG9mIGNoYXJhY3RlcnMgdG8gaWdub3JlIChpbiBhZGRpdGlvbiB0byBhLXpBLVowLTkpXG4vLyAgLSBrZWVwRXNjYXBlZCAgLSBkb24ndCBlbmNvZGUgJyUnIGluIGEgY29ycmVjdCBlc2NhcGUgc2VxdWVuY2UgKGRlZmF1bHQ6IHRydWUpXG4vL1xuZnVuY3Rpb24gZW5jb2RlKHN0cmluZywgZXhjbHVkZSwga2VlcEVzY2FwZWQpIHtcbiAgdmFyIGksIGwsIGNvZGUsIG5leHRDb2RlLCBjYWNoZSxcbiAgICAgIHJlc3VsdCA9ICcnO1xuXG4gIGlmICh0eXBlb2YgZXhjbHVkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBlbmNvZGUoc3RyaW5nLCBrZWVwRXNjYXBlZClcbiAgICBrZWVwRXNjYXBlZCAgPSBleGNsdWRlO1xuICAgIGV4Y2x1ZGUgPSBlbmNvZGUuZGVmYXVsdENoYXJzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZWVwRXNjYXBlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBrZWVwRXNjYXBlZCA9IHRydWU7XG4gIH1cblxuICBjYWNoZSA9IGdldEVuY29kZUNhY2hlKGV4Y2x1ZGUpO1xuXG4gIGZvciAoaSA9IDAsIGwgPSBzdHJpbmcubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29kZSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgaWYgKGtlZXBFc2NhcGVkICYmIGNvZGUgPT09IDB4MjUgLyogJSAqLyAmJiBpICsgMiA8IGwpIHtcbiAgICAgIGlmICgvXlswLTlhLWZdezJ9JC9pLnRlc3Qoc3RyaW5nLnNsaWNlKGkgKyAxLCBpICsgMykpKSB7XG4gICAgICAgIHJlc3VsdCArPSBzdHJpbmcuc2xpY2UoaSwgaSArIDMpO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlIDwgMTI4KSB7XG4gICAgICByZXN1bHQgKz0gY2FjaGVbY29kZV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY29kZSA+PSAweEQ4MDAgJiYgY29kZSA8PSAweERGRkYpIHtcbiAgICAgIGlmIChjb2RlID49IDB4RDgwMCAmJiBjb2RlIDw9IDB4REJGRiAmJiBpICsgMSA8IGwpIHtcbiAgICAgICAgbmV4dENvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgIGlmIChuZXh0Q29kZSA+PSAweERDMDAgJiYgbmV4dENvZGUgPD0gMHhERkZGKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdbaV0gKyBzdHJpbmdbaSArIDFdKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSAnJUVGJUJGJUJEJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdCArPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nW2ldKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmVuY29kZS5kZWZhdWx0Q2hhcnMgICA9IFwiOy8/OkAmPSskLC1fLiF+KicoKSNcIjtcbmVuY29kZS5jb21wb25lbnRDaGFycyA9IFwiLV8uIX4qJygpXCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBlbmNvZGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mdurl/encode.js\n"); - -/***/ }), - -/***/ "../node_modules/mini-create-react-context/dist/esm/index.js": -/*!*******************************************************************!*\ - !*** ../node_modules/mini-create-react-context/dist/esm/index.js ***! - \*******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/inheritsLoose */ \"../node_modules/@babel/runtime/helpers/inheritsLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var gud__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! gud */ \"../node_modules/gud/index.js\");\n/* harmony import */ var gud__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(gud__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-warning */ \"../node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\n\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + gud__WEBPACK_IMPORTED_MODULE_3___default()() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default()(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (undefined !== 'production') {\n Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default()(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext || createReactContext;\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21pbmktY3JlYXRlLXJlYWN0LWNvbnRleHQvZGlzdC9lc20vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21pbmktY3JlYXRlLXJlYWN0LWNvbnRleHQvZGlzdC9lc20vaW5kZXguanM/YzMwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGd1ZCBmcm9tICdndWQnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAndGlueS13YXJuaW5nJztcblxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbmZ1bmN0aW9uIG9iamVjdElzKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFdmVudEVtaXR0ZXIodmFsdWUpIHtcbiAgdmFyIGhhbmRsZXJzID0gW107XG4gIHJldHVybiB7XG4gICAgb246IGZ1bmN0aW9uIG9uKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgfSxcbiAgICBvZmY6IGZ1bmN0aW9uIG9mZihoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVycyA9IGhhbmRsZXJzLmZpbHRlcihmdW5jdGlvbiAoaCkge1xuICAgICAgICByZXR1cm4gaCAhPT0gaGFuZGxlcjtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChuZXdWYWx1ZSwgY2hhbmdlZEJpdHMpIHtcbiAgICAgIHZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyKHZhbHVlLCBjaGFuZ2VkQml0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlblswXSA6IGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWFjdENvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICB2YXIgX1Byb3ZpZGVyJGNoaWxkQ29udGV4LCBfQ29uc3VtZXIkY29udGV4dFR5cGU7XG5cbiAgdmFyIGNvbnRleHRQcm9wID0gJ19fY3JlYXRlLXJlYWN0LWNvbnRleHQtJyArIGd1ZCgpICsgJ19fJztcblxuICB2YXIgUHJvdmlkZXIgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gUHJvdmlkZXIoKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5lbWl0dGVyID0gY3JlYXRlRXZlbnRFbWl0dGVyKF90aGlzLnByb3BzLnZhbHVlKTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvID0gUHJvdmlkZXIucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW2NvbnRleHRQcm9wXSA9IHRoaXMuZW1pdHRlciwgX3JlZjtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IG5leHRQcm9wcy52YWx1ZSkge1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBuZXh0UHJvcHMudmFsdWU7XG4gICAgICAgIHZhciBjaGFuZ2VkQml0cztcblxuICAgICAgICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgIGNoYW5nZWRCaXRzID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGN1bGF0ZUNoYW5nZWRCaXRzKG9sZFZhbHVlLCBuZXdWYWx1ZSkgOiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybmluZygoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpID09PSBjaGFuZ2VkQml0cywgJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJyArIGNoYW5nZWRCaXRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFuZ2VkQml0cyB8PSAwO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZWRCaXRzICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuc2V0KG5leHRQcm9wcy52YWx1ZSwgY2hhbmdlZEJpdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfTtcblxuICAgIHJldHVybiBQcm92aWRlcjtcbiAgfShDb21wb25lbnQpO1xuXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbY29udGV4dFByb3BdID0gUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLCBfUHJvdmlkZXIkY2hpbGRDb250ZXgpO1xuXG4gIHZhciBDb25zdW1lciA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG4gICAgX2luaGVyaXRzTG9vc2UoQ29uc3VtZXIsIF9Db21wb25lbnQyKTtcblxuICAgIGZ1bmN0aW9uIENvbnN1bWVyKCkge1xuICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgX3RoaXMyID0gX0NvbXBvbmVudDIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMyLnN0YXRlID0ge1xuICAgICAgICB2YWx1ZTogX3RoaXMyLmdldFZhbHVlKClcbiAgICAgIH07XG5cbiAgICAgIF90aGlzMi5vblVwZGF0ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgdmFyIG9ic2VydmVkQml0cyA9IF90aGlzMi5vYnNlcnZlZEJpdHMgfCAwO1xuXG4gICAgICAgIGlmICgob2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBfdGhpczIuZ2V0VmFsdWUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXMyO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8yID0gQ29uc3VtZXIucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvMi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSBuZXh0UHJvcHMub2JzZXJ2ZWRCaXRzO1xuICAgICAgdGhpcy5vYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHMgPT09IHVuZGVmaW5lZCB8fCBvYnNlcnZlZEJpdHMgPT09IG51bGwgPyBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgOiBvYnNlcnZlZEJpdHM7XG4gICAgfTtcblxuICAgIF9wcm90bzIuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRbY29udGV4dFByb3BdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0ub24odGhpcy5vblVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSB0aGlzLnByb3BzLm9ic2VydmVkQml0cztcbiAgICAgIHRoaXMub2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzID09PSB1bmRlZmluZWQgfHwgb2JzZXJ2ZWRCaXRzID09PSBudWxsID8gTUFYX1NJR05FRF8zMV9CSVRfSU5UIDogb2JzZXJ2ZWRCaXRzO1xuICAgIH07XG5cbiAgICBfcHJvdG8yLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0W2NvbnRleHRQcm9wXSkge1xuICAgICAgICB0aGlzLmNvbnRleHRbY29udGV4dFByb3BdLm9mZih0aGlzLm9uVXBkYXRlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvMi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgaWYgKHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0uZ2V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8yLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBvbmx5Q2hpbGQodGhpcy5wcm9wcy5jaGlsZHJlbikodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBDb25zdW1lcjtcbiAgfShDb21wb25lbnQpO1xuXG4gIENvbnN1bWVyLmNvbnRleHRUeXBlcyA9IChfQ29uc3VtZXIkY29udGV4dFR5cGUgPSB7fSwgX0NvbnN1bWVyJGNvbnRleHRUeXBlW2NvbnRleHRQcm9wXSA9IFByb3BUeXBlcy5vYmplY3QsIF9Db25zdW1lciRjb250ZXh0VHlwZSk7XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IFByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBDb25zdW1lclxuICB9O1xufVxuXG52YXIgaW5kZXggPSBSZWFjdC5jcmVhdGVDb250ZXh0IHx8IGNyZWF0ZVJlYWN0Q29udGV4dDtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFMQTtBQVNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQUNBO0FBdUJBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUEvQ0E7QUFDQTtBQWlEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQTFEQTtBQUNBO0FBNERBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mini-create-react-context/dist/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/moment/moment.js": -/*!****************************************!*\ - !*** ../node_modules/moment/moment.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} //! moment.js\n\n\n;\n\n(function (global, factory) {\n ( false ? undefined : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;\n})(this, function () {\n 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n } // This is done to register the method called with moment()\n // without creating circular dependencies.\n\n\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [],\n i;\n\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n\n return m._pf;\n }\n\n var some;\n\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function some(fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n\n if (m._strict) {\n isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n } // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n\n\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false; // Moment prototype object\n\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\n if (!this.isValid()) {\n this._d = new Date(NaN);\n } // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n\n\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n } // compare two arrays, return the number of differences\n\n\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n diffs++;\n }\n }\n\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n\n if (firstTime) {\n var args = [];\n var arg;\n\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n\n if (_typeof(arguments[i]) === 'object') {\n arg += '\\n[' + i + '] ';\n\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n\n args.push(arg);\n }\n\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n firstTime = false;\n }\n\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set(config) {\n var prop, i;\n\n for (i in config) {\n prop = config[i];\n\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n\n this._config = config; // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n\n this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function keys(obj) {\n var i,\n res = [];\n\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L'\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years'\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n\n for (var u in unitsObj) {\n units.push({\n unit: u,\n priority: priorities[u]\n });\n }\n\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n var formatFunctions = {};\n var formatTokenFunctions = {}; // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n\n if (typeof callback === 'string') {\n func = function func() {\n return this[callback]();\n };\n }\n\n if (token) {\n formatTokenFunctions[token] = func;\n }\n\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n\n return output;\n };\n } // format date using native date object\n\n\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n\n var match2 = /\\d\\d/; // 00 - 99\n\n var match3 = /\\d{3}/; // 000 - 999\n\n var match4 = /\\d{4}/; // 0000 - 9999\n\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n\n var match1to2 = /\\d\\d?/; // 0 - 99\n\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n\n var match1to3 = /\\d{1,3}/; // 0 - 999\n\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n var regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\n\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback;\n\n if (typeof token === 'string') {\n token = [token];\n }\n\n if (isNumber(callback)) {\n func = function func(input, array) {\n array[callback] = toInt(input);\n };\n }\n\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8; // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES\n\n addUnitAlias('year', 'y'); // PRIORITIES\n\n addUnitPriority('year', 1); // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n }); // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n } // HOOKS\n\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n }; // MOMENTS\n\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n } // MOMENTS\n\n\n function stringGet(units) {\n units = normalizeUnits(units);\n\n if (isFunction(this[units])) {\n return this[units]();\n }\n\n return this;\n }\n\n function stringSet(units, value) {\n if (_typeof(units) === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n\n return this;\n }\n\n function mod(n, x) {\n return (n % x + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function indexOf(o) {\n // I know\n var i;\n\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n } // FORMATTING\n\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n }); // ALIASES\n\n addUnitAlias('month', 'M'); // PRIORITY\n\n addUnitPriority('month', 8); // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.\n\n\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n }); // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months) ? this._months : this._months['standalone'];\n }\n\n return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n }\n\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n } // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n\n\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n } // test the regex\n\n\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n } // MOMENTS\n\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value); // TODO: Another silent failure?\n\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n\n return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n\n return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n } // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n\n\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date; // the date constructor remaps years 0-99 to 1900-1999\n\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date; // the Date.UTC function remaps years 0-99 to 1900-1999\n\n if (y < 100 && y >= 0) {\n var args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset\n\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n } // start-of-first-week - start-of-year\n\n\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\n\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n } // FORMATTING\n\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W'); // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5); // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }); // HELPERS\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0,\n // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n } // MOMENTS\n\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n } // FORMATTING\n\n\n addFormatToken('d', 0, 'do', 'day');\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E'); // PRIORITY\n\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11); // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid\n\n\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n }); // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n\n return isNaN(input) ? null : input;\n } // LOCALES\n\n\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\n function localeWeekdaysShort(m) {\n return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\n function localeWeekdaysMin(m) {\n return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n } // test the regex\n\n\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n } // MOMENTS\n\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n } // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n\n return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n\n return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n\n return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n } // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n\n\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n } // FORMATTING\n\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false); // ALIASES\n\n addUnitAlias('hour', 'h'); // PRIORITY\n\n addUnitPriority('hour', 13); // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n }); // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n } // MOMENTS\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n\n\n var getSetHour = makeGetSet('Hours', true);\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n week: defaultLocaleWeek,\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n meridiemParse: defaultLocaleMeridiemParse\n }; // internal storage for locale config files\n\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n } // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\n\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n\n if (locale) {\n return locale;\n }\n\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n\n j--;\n }\n\n i++;\n }\n\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null; // TODO: Find a better way to register and load all the locales in Node\n\n if (!locales[name] && typeof module !== 'undefined' && module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n !(function webpackMissingModule() { var e = new Error(\"Cannot find module 'undefined'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n\n return locales[name];\n } // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n\n\n function getSetGlobalLocale(key, values) {\n var data;\n\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n } // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n\n\n getSetGlobalLocale(name);\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig; // MERGE\n\n tmpLocale = loadLocale(name);\n\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale; // backwards compat for now: also set the locale\n\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n\n return locales[name];\n } // returns locale data\n\n\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n\n if (locale) {\n return locale;\n }\n\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n } // Pick the first defined of two or three arguments.\n\n\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n\n if (b != null) {\n return b;\n }\n\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n } // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n\n\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays\n\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n } //if the day of the year is set, figure out what it is\n\n\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n } // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n\n\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n } // Zero out whatever was not defaulted, including time\n\n\n for (; i < 7; i++) {\n config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n } // Check for 24:00:00.000\n\n\n if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n } // check for mismatching day of week\n\n\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n w = config._w;\n\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n var curWeek = weekOfYear(createLocal(), dow, doy);\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.\n\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n } // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\n\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n var isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/]]; // iso time formats and regexes\n\n var isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]];\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i; // date from iso format\n\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n } // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\n\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n } // date and time from ref 2822 format\n\n\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n config._d = createUTCDate.apply(null, config._a);\n\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n } // date from iso format or fallback\n\n\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n } // Final attempt, use Input Fallback\n\n\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged and will be removed in an upcoming major release. Please refer to ' + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }); // constant that refers to the ISO standard\n\n hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form\n\n\n hooks.RFC_2822 = function () {}; // date from string and format string\n\n\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n\n config._a = [];\n getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n } // don't parse if it's not a known token\n\n\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n } // add remaining unparsed input length to the string\n\n\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n } // clear _12h flag if hour is <= 12\n\n\n if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem; // handle meridiem\n\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n\n if (isPm && hour < 12) {\n hour += 12;\n }\n\n if (!isPm && hour === 12) {\n hour = 0;\n }\n\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n } // date from string and array of format strings\n\n\n function configFromStringAndArray(config) {\n var tempConfig, bestMoment, scoreToBeat, i, currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n } // if there is any input that was not parsed add a penalty for that format\n\n\n currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens\n\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || format === undefined && input === '') {\n return createInvalid({\n nullInput: true\n });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n input = undefined;\n } // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n\n\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n });\n var prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }); // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n\n function pickBy(fn, moments) {\n var res, i;\n\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n\n if (!moments.length) {\n return createLocal();\n }\n\n res = moments[0];\n\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n\n return res;\n } // TODO: Use [].sort instead?\n\n\n function min() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isAfter', args);\n }\n\n var now = function now() {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove\n\n this._milliseconds = +milliseconds + seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n\n this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n\n this._months = +months + quarters * 3 + years * 12;\n this._data = {};\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n } // FORMATTING\n\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', ''); // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n }); // HELPERS\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n } // Return a moment from input, that is local/utc/zone equivalent to model.\n\n\n function cloneWithOffset(input, model) {\n var res, diff;\n\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.\n\n res._d.setTime(res._d.valueOf() + diff);\n\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n } // HOOKS\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n\n\n hooks.updateOffset = function () {}; // MOMENTS\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n\n\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n\n this._offset = input;\n this._isUTC = true;\n\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n\n input = input ? createLocal(input).utcOffset() : 0;\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n } // ASP.NET json date format regex\n\n\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/; // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign)\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (_typeof(duration) === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it\n\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n\n if (!(base.isValid() && other.isValid())) {\n return {\n milliseconds: 0,\n months: 0\n };\n }\n\n other = cloneWithOffset(other, base);\n\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n } // TODO: remove 'name' arg after deprecation is removed\n\n\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp; //invert the arguments, but complain about it\n\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val;\n val = period;\n period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n\n case 'month':\n output = monthDiff(this, that);\n break;\n\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n\n case 'second':\n output = (this - that) / 1e3;\n break;\n // 1000\n\n case 'minute':\n output = (this - that) / 6e4;\n break;\n // 1000 * 60\n\n case 'hour':\n output = (this - that) / 36e5;\n break;\n // 1000 * 60 * 60\n\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break;\n // 1000 * 60 * 60 * 24, negate dst\n\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break;\n // 1000 * 60 * 60 * 24 * 7, negate dst\n\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month\n\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month\n\n adjust = (b - anchor) / (anchor2 - anchor);\n } //check for negative zero, return zero if negative zero\n\n\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n\n\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n\n var func = 'moment';\n var zone = '';\n\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n\n var prefix = '[' + func + '(\"]';\n var year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n to: this,\n from: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n from: this,\n to: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n } // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n\n\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n\n return this;\n }\n }\n\n var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n });\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000;\n var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):\n\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time;\n units = normalizeUnits(units);\n\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time;\n units = normalizeUnits(units);\n\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n } // FORMATTING\n\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG'); // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1); // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n }); // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n } // FORMATTING\n\n\n addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES\n\n addUnitAlias('quarter', 'Q'); // PRIORITY\n\n addUnitPriority('quarter', 7); // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n }); // MOMENTS\n\n function getSetQuarter(input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n } // FORMATTING\n\n\n addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES\n\n addUnitAlias('date', 'D'); // PRIORITY\n\n addUnitPriority('date', 9); // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n });\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n }); // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD'); // PRIORITY\n\n addUnitPriority('dayOfYear', 4); // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n }); // HELPERS\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n } // FORMATTING\n\n\n addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES\n\n addUnitAlias('minute', 'm'); // PRIORITY\n\n addUnitPriority('minute', 14); // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE); // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false); // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES\n\n addUnitAlias('second', 's'); // PRIORITY\n\n addUnitPriority('second', 15); // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND); // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false); // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n }); // ALIASES\n\n addUnitAlias('millisecond', 'ms'); // PRIORITY\n\n addUnitPriority('millisecond', 16); // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n var token;\n\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n } // MOMENTS\n\n\n var getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n\n return out;\n } // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n\n\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function ordinal(number) {\n var b = number % 10,\n output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n return number + output;\n }\n }); // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n return duration._bubble();\n } // supports only 2.0-style add(1, 's') or add(duration)\n\n\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n } // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\n\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays; // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n\n if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n } // The following code bubbles up values, see the tests for\n // examples of what that means.\n\n\n data.milliseconds = milliseconds % 1000;\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n days += absFloor(hours / 24); // convert days to months\n\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year\n\n years = absFloor(months / 12);\n months %= 12;\n data.days = days;\n data.months = months;\n data.years = years;\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n\n var days;\n var months;\n var milliseconds = this._milliseconds;\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n\n switch (units) {\n case 'month':\n return months;\n\n case 'quarter':\n return months / 3;\n\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n\n case 'day':\n return days + milliseconds / 864e5;\n\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n } // TODO: Use this.as('ms')?\n\n\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n\n return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month\n M: 11 // months to year\n\n }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n var a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days] || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n } // This function allows you to set the rounding function for relative time strings\n\n\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n\n return false;\n } // This function allows you to set a threshold for relative time strings\n\n\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n\n if (limit === undefined) {\n return thresholds[threshold];\n }\n\n thresholds[threshold] = limit;\n\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n\n return true;\n }\n\n function humanize(withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years; // 3600 seconds -> 60 minutes -> 1 hour\n\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60; // 12 months -> 1 year\n\n years = absFloor(months / 12);\n months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n return totalSign + 'P' + (Y ? ymSign + Y + 'Y' : '') + (M ? ymSign + M + 'M' : '') + (D ? daysSign + D + 'D' : '') + (h || m || s ? 'T' : '') + (h ? hmsSign + h + 'H' : '') + (m ? hmsSign + m + 'M' : '') + (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang; // Side effect imports\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf'); // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n }); // Side effect imports\n\n hooks.version = '2.24.0';\n setHookCallback(createLocal);\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats\n\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD',\n // <input type=\"date\" />\n TIME: 'HH:mm',\n // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss',\n // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS',\n // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW',\n // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n\n };\n return hooks;\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanM/NGUyMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzICgpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrIChjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSwgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VucyAgICA6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQgICAgIDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdyAgICAgICAgOiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXIgICA6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRNb250aCAgICA6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXNvICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHMgOiBbXSxcbiAgICAgICAgICAgIG1lcmlkaWVtICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICByZmMyODIyICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaCA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHZhciBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGlzTm93VmFsaWQgPSAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPSBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkIChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudCAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgYXJnO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2Fybihtc2cgKyAnXFxuQXJndW1lbnRzOiAnICsgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgKyAnXFxuJyArIChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCAoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArICgvXFxkezEsMn0vKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciAoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFMgIDogJ2g6bW06c3MgQScsXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcbiAgICAgICAgTCAgICA6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEwgICA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0IChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zbGljZSgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJztcbiAgICB2YXIgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbCAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgcGFzdCAgIDogJyVzIGFnbycsXG4gICAgICAgIHMgIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbSAgOiAnYSBtaW51dGUnLFxuICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXG4gICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgZCAgOiAnYSBkYXknLFxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgTSAgOiAnYSBtb250aCcsXG4gICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXG4gICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUgKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiAoaXNGdW5jdGlvbihvdXRwdXQpKSA/XG4gICAgICAgICAgICBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSA6XG4gICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlIChkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyAodW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZycgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW107XG4gICAgICAgIGZvciAodmFyIHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIHVuaXRzLnB1c2goe3VuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdfSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgKyBhYnNOdW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nO1xuXG4gICAgdmFyIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2c7XG5cbiAgICB2YXIgZm9ybWF0RnVuY3Rpb25zID0ge307XG5cbiAgICB2YXIgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbiAodG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdG9rZW4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksIGksIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJywgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKSA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID0gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKGxvY2FsRm9ybWF0dGluZ1Rva2VucywgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxICAgICAgICAgPSAvXFxkLzsgICAgICAgICAgICAvLyAgICAgICAwIC0gOVxuICAgIHZhciBtYXRjaDIgICAgICAgICA9IC9cXGRcXGQvOyAgICAgICAgICAvLyAgICAgIDAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzICAgICAgICAgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XG4gICAgdmFyIG1hdGNoNCAgICAgICAgID0gL1xcZHs0fS87ICAgICAgICAgLy8gICAgMDAwMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2g2ICAgICAgICAgPSAvWystXT9cXGR7Nn0vOyAgICAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMiAgICAgID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxuICAgIHZhciBtYXRjaDN0bzQgICAgICA9IC9cXGRcXGRcXGRcXGQ/LzsgICAgIC8vICAgICA5OTkgLSA5OTk5XG4gICAgdmFyIG1hdGNoNXRvNiAgICAgID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vOyAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMyAgICAgID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxuICAgIHZhciBtYXRjaDF0bzQgICAgICA9IC9cXGR7MSw0fS87ICAgICAgIC8vICAgICAgIDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoMXRvNiAgICAgID0gL1srLV0/XFxkezEsNn0vOyAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuXG4gICAgdmFyIG1hdGNoVW5zaWduZWQgID0gL1xcZCsvOyAgICAgICAgICAgLy8gICAgICAgMCAtIGluZlxuICAgIHZhciBtYXRjaFNpZ25lZCAgICA9IC9bKy1dP1xcZCsvOyAgICAgIC8vICAgIC1pbmYgLSBpbmZcblxuICAgIHZhciBtYXRjaE9mZnNldCAgICA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naTsgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgdmFyIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naTsgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcblxuICAgIHZhciBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbiAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgdmFyIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pO1xuXG4gICAgdmFyIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4gKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KSA/IHJlZ2V4IDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuICh0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUocy5yZXBsYWNlKCdcXFxcJywgJycpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSwgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMDtcbiAgICB2YXIgTU9OVEggPSAxO1xuICAgIHZhciBEQVRFID0gMjtcbiAgICB2YXIgSE9VUiA9IDM7XG4gICAgdmFyIE1JTlVURSA9IDQ7XG4gICAgdmFyIFNFQ09ORCA9IDU7XG4gICAgdmFyIE1JTExJU0VDT05EID0gNjtcbiAgICB2YXIgV0VFSyA9IDc7XG4gICAgdmFyIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyAnJyArIHkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsICAgNF0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsICA1XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQgKHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0IChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKCkgP1xuICAgICAgICAgICAgbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEgKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdGdWxsWWVhcicgJiYgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJiBtb20ubW9udGgoKSA9PT0gMSAmJiBtb20uZGF0ZSgpID09PSAyOSkge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSwgbW9tLm1vbnRoKCksIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQgKHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMSA/IChpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCkgOiAoMzEgLSBtb2RNb250aCAlIDcgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy87XG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHMgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0IChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydCA6XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldIDpcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0W01PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgaWksIG1vbSwgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZSAobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU1NJyAmJiB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU0nICYmIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aCAobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoICgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sIGxvbmdQaWVjZXMgPSBbXSwgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlICh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSAoeSkge1xuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlaywgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsgKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMgKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMgKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzIDpcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzWyhtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpKSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgcmV0dXJuIChtID09PSB0cnVlKSA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiAobSkgPyB3ZWVrZGF5c1ttLmRheSgpXSA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydCAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogKG0pID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbiAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IChtKSA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSAod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGRkZCcgJiYgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZCcgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZCcgJiYgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLCBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb20sIG1pbnAsIHNob3J0cCwgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICBzaG9ydHAgPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICBsb25ncCA9IHRoaXMud2Vla2RheXMobW9tLCAnJyk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtICh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgbG93ZXJjYXNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQ7XG4gICAgICAgIHZhciBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTSAoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2k7XG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAvLyB0aGlzIHJ1bGUuXG4gICAgdmFyIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZVxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fTtcbiAgICB2YXIgbG9jYWxlRmFtaWxpZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCwgaiwgbmV4dCwgbG9jYWxlLCBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5sZW5ndGggPj0gaiAmJiBjb21wYXJlQXJyYXlzKHNwbGl0LCBuZXh0LCB0cnVlKSA+PSBqIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGw7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmICghbG9jYWxlc1tuYW1lXSAmJiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICB2YXIgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUgKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9jYWxlICcgKyBrZXkgKyAgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUgKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZSgnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCB0bXBMb2NhbGUsIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93IChtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdztcbiAgICAgICAgdmFyIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSAgICAgICA8IDAgfHwgYVtNT05USF0gICAgICAgPiAxMSAgPyBNT05USCA6XG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XG4gICAgICAgICAgICAgICAgYVtIT1VSXSAgICAgICAgPCAwIHx8IGFbSE9VUl0gICAgICAgID4gMjQgfHwgKGFbSE9VUl0gPT09IDI0ICYmIChhW01JTlVURV0gIT09IDAgfHwgYVtTRUNPTkRdICE9PSAwIHx8IGFbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDpcbiAgICAgICAgICAgICAgICBhW01JTlVURV0gICAgICA8IDAgfHwgYVtNSU5VVEVdICAgICAgPiA1OSAgPyBNSU5VVEUgOlxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XG4gICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5ID8gTUlMTElTRUNPTkQgOlxuICAgICAgICAgICAgICAgIC0xO1xuXG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJiAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSkpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSwgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkgKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgZGF0ZSwgaW5wdXQgPSBbXSwgY3VycmVudERhdGUsIGV4cGVjdGVkV2Vla2RheSwgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8IGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVEMgPyBjb25maWcuX2QuZ2V0VVRDRGF5KCkgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJiBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5KSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3c7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LkdHLCBjb25maWcuX2FbWUVBUl0sIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhcik7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgdmFyIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG4gICAgdmFyIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xuXG4gICAgdmFyIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy87XG5cbiAgICB2YXIgaXNvRGF0ZXMgPSBbXG4gICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgLy8gWVlZWU1NIGlzIE5PVCBhbGxvd2VkIGJ5IHRoZSBzdGFuZGFyZFxuICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L11cbiAgICBdO1xuXG4gICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgIHZhciBpc29UaW1lcyA9IFtcbiAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIJywgL1xcZFxcZC9dXG4gICAgXTtcblxuICAgIHZhciBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKFxcLT9cXGQrKS9pO1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQsIHR6Rm9ybWF0O1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcblxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgdmFyIHJmYzI4MjIgPSAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvO1xuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyh5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cXChbXildKlxcKXxbXFxuXFx0XS9nLCAnICcpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpLnJlcGxhY2UoL15cXHNcXHMqLywgJycpLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbnRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUocGFyc2VkSW5wdXRbMF0sIHBhcnNlZElucHV0WzFdLCBwYXJzZWRJbnB1dFsyXSkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG9ic09mZnNldHMgPSB7XG4gICAgICAgIFVUOiAwLFxuICAgICAgICBHTVQ6IDAsXG4gICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgUFNUOiAtOCAqIDYwXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApO1xuICAgICAgICAgICAgdmFyIG0gPSBobSAlIDEwMCwgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB2YXIgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKG1hdGNoWzRdLCBtYXRjaFszXSwgbWF0Y2hbMl0sIG1hdGNoWzVdLCBtYXRjaFs2XSwgbWF0Y2hbN10pO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0IG9yIGZhbGxiYWNrXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuXG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICdkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byAnICtcbiAgICAgICAgJ2h0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLCBwYXJzZWRJbnB1dCwgdG9rZW5zLCB0b2tlbiwgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMDtcblxuICAgICAgICB0b2tlbnMgPSBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fCBbXSlbMF07XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndG9rZW4nLCB0b2tlbiwgJ3BhcnNlZElucHV0JywgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICAvLyAgICAgICAgICdyZWdleCcsIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9IHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKGNvbmZpZy5fbG9jYWxlLCBjb25maWcuX2FbSE9VUl0sIGNvbmZpZy5fbWVyaWRpZW0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAgKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG5cbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmIChzY29yZVRvQmVhdCA9PSBudWxsIHx8IGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFtpLnllYXIsIGkubW9udGgsIGkuZGF5IHx8IGkuZGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnIChjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHtudWxsSW5wdXQ6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbCAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdmFyIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXggKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICsobmV3IERhdGUoKSk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmICghKGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiYgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlcmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbiAoZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9ICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgK1xuICAgICAgICAgICAgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICtcbiAgICAgICAgICAgIHF1YXJ0ZXJzICogMyArXG4gICAgICAgICAgICB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCAodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgICAgICB2YXIgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICsgc2VwYXJhdG9yICsgemVyb0ZpbGwofn4ob2Zmc2V0KSAlIDYwLCAyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsICBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKTtcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2h1bmsgICA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgdmFyIHBhcnRzICAgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICB2YXIgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgP1xuICAgICAgICAgIDAgOlxuICAgICAgICAgIHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID0gKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpID8gaW5wdXQudmFsdWVPZigpIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQgKG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkgLyAxNSkgKiAxNTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0IChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksIDEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUgKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldCAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQgKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXihcXC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKylcXDooXFxkKykoPzpcXDooXFxkKykoXFwuXFxkKik/KT8kLztcblxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICB2YXIgaXNvUmVnZXggPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24gKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtcyA6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZCAgOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNICA6IGlucHV0Ll9tb250aHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSBpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5ICA6IDAsXG4gICAgICAgICAgICAgICAgZCAgOiB0b0ludChtYXRjaFtEQVRFXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIGggIDogdG9JbnQobWF0Y2hbSE9VUl0pICAgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBtICA6IHRvSW50KG1hdGNoW01JTlVURV0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgcyAgOiB0b0ludChtYXRjaFtTRUNPTkRdKSAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zIDogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5IDogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE0gOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkIDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbSA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzIDogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiYgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLCBjcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPSBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICtcbiAgICAgICAgICAgIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICsoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7bWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCAnbW9tZW50KCkuJyArIG5hbWUgICsgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICsgbmFtZSArICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDsgdmFsID0gcGVyaW9kOyBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gK3ZhbCA6IHZhbDtcbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0IChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkICAgICAgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyk7XG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02ID8gJ3NhbWVFbHNlJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IC0xID8gJ2xhc3RXZWVrJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDAgPyAnbGFzdERheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAxID8gJ3NhbWVEYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMiA/ICduZXh0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDcgPyAnbmV4dFdlZWsnIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxICh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZSc7XG5cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdHMgJiYgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKSA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdykgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2VlbiAoZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKGluY2x1c2l2aXR5WzBdID09PSAnKCcgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cykgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cykgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsXG4gICAgICAgICAgICB6b25lRGVsdGEsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzOyBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDsgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6IG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZTtcbiAgICAgICAgdmFyIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnO1xuICAgICAgICB2YXIgem9uZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHZhciB5ZWFyID0gKDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgdmFyIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHZhciBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7ZnJvbTogdGhpcywgdG86IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwO1xuICAgIHZhciBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05EO1xuICAgIHZhciBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURTtcbiAgICB2YXIgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKGRpdmlkZW5kICUgZGl2aXNvciArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YgKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mICh1bml0cykge1xuICAgICAgICB2YXIgdGltZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMgKyAzLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDcpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgNykgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9IT1VSIC0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICgodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXggKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFttLnllYXIoKSwgbS5tb250aCgpLCBtLmRhdGUoKSwgbS5ob3VyKCksIG0ubWludXRlKCksIG0uc2Vjb25kKCksIG0ubWlsbGlzZWNvbmQoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QgKCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzICgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQgKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuICh0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgICAgICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMuaXNvV2VlaygpLCB0aGlzLmlzb1dlZWtkYXkoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIgKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyICgpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKSA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgdGhpcy5tb250aCgpICUgMyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID9cbiAgICAgICAgICAobG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlKSA6XG4gICAgICAgICAgbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCAgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyIChpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID0gTWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNSkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIGRheU9mWWVhciksICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdzZWNvbmQnLCAncycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnc2Vjb25kJywgMTUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbGxpc2Vjb25kJywgMTYpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsICAgIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsICAgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsICBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW47XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgICAgICAgICAgICAgICA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciAgICAgICAgICA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgICAgICAgICAgICAgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmICAgICAgICAgICAgICA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgICAgICAgICAgICAgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgICAgICAgICAgICA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tICAgICAgICAgICAgICA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyAgICAgICAgICAgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvICAgICAgICAgICAgICAgID0gdG87XG4gICAgcHJvdG8udG9Ob3cgICAgICAgICAgICAgPSB0b05vdztcbiAgICBwcm90by5nZXQgICAgICAgICAgICAgICA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgICAgICAgICA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyICAgICAgICAgICA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgICAgICAgICAgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gICAgICAgICA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgICAgICAgICAgICA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyICAgICA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgICAgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkICAgICAgICAgICA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nICAgICAgICAgICAgICA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlICAgICAgICAgICAgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSAgICAgICAgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyAgICAgID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCAgICAgICAgICAgICAgID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgICAgICAgICAgID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCAgICAgICAgICA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgICAgICAgICAgID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCAgICAgICAgICA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSAgICAgICAgICAgID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCAgICAgICAgICAgPSBpbnNwZWN0O1xuICAgIHByb3RvLnRvSlNPTiAgICAgICAgICAgID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nICAgICAgICAgID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCAgICAgICAgICAgICAgPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgICAgICAgICAgID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgICAgICA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by55ZWFyICAgICAgID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciAgICA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCAgICAgICA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayAgICAgICAgICAgPSBwcm90by53ZWVrcyAgICAgICAgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgICAgICAgID0gcHJvdG8uaXNvV2Vla3MgICAgID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciAgICA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uZGF0ZSAgICAgICA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ICAgICAgICA9IHByb3RvLmRheXMgICAgICAgICAgICAgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSAgICA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciAgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgICAgICAgICAgICA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgICAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgICAgICAgICAgICA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgICAgICAgICAgICAgICAgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsICAgICAgICAgICAgICA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgICAgICAgICAgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyAgICAgICAgICAgICAgICA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzICA9IGRlcHJlY2F0ZSgnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLCBnZXRTZXREYXlPZk1vbnRoKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsIGdldFNldE1vbnRoKTtcbiAgICBwcm90by55ZWFycyAgPSBkZXByZWNhdGUoJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLCBnZXRTZXRZZWFyKTtcbiAgICBwcm90by56b25lICAgPSBkZXByZWNhdGUoJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJywgZ2V0U2V0Wm9uZSk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKCdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJywgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXggKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdCAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciAgICAgICAgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ICA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgICAgID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsICAgICAgICAgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgICAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lICAgID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSAgICAgID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCAgICAgICAgICAgICA9IHNldDtcblxuICAgIHByb3RvJDEubW9udGhzICAgICAgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ICAgICAgID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ICA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyAgICAgICA9ICAgICAgICBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggICAgICAgPSAgICAgICAgd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCAgPSAgICAgICAgd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCAgICA9ICAgICAgICB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMSAoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG4gICAgICAgIHZhciB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbCAoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzIChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0IChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0IChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbiAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0b0ludChudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKCdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsIGdldFNldEdsb2JhbExvY2FsZSk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLCBnZXRMb2NhbGUpO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgICA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzICAgICAgICAgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgICAgICAgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgICA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyAgICAgICAgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyAgICAgICAgID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxIChkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICAgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMSAoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbCAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlICgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcbiAgICAgICAgdmFyIGRheXMgICAgICAgICA9IHRoaXMuX2RheXM7XG4gICAgICAgIHZhciBtb250aHMgICAgICAgPSB0aGlzLl9tb250aHM7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgc2Vjb25kcywgbWludXRlcywgaG91cnMsIHllYXJzLCBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoISgobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApKSkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzICAgICAgICAgICA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgICAgICA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzICAgICAgICAgICA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyAgICAgID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzICAgICAgICAgICAgID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyAgICAgICAgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgICA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzICA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyAoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gZGF5cyAqIDQ4MDAgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzIChtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiBtb250aHMgKiAxNDYwOTcgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzICh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzO1xuICAgICAgICB2YXIgbW9udGhzO1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOiAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6IHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOiAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnICAgOiByZXR1cm4gZGF5cyAvIDcgICAgICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cicgICA6IHJldHVybiBkYXlzICogMjQgICAgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZScgOiByZXR1cm4gZGF5cyAqIDE0NDAgICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6IHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcbiAgICB2YXIgYXNTZWNvbmRzICAgICAgPSBtYWtlQXMoJ3MnKTtcbiAgICB2YXIgYXNNaW51dGVzICAgICAgPSBtYWtlQXMoJ20nKTtcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcbiAgICB2YXIgYXNEYXlzICAgICAgICAgPSBtYWtlQXMoJ2QnKTtcbiAgICB2YXIgYXNXZWVrcyAgICAgICAgPSBtYWtlQXMoJ3cnKTtcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcbiAgICB2YXIgYXNRdWFydGVycyAgICAgPSBtYWtlQXMoJ1EnKTtcbiAgICB2YXIgYXNZZWFycyAgICAgICAgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyk7XG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcbiAgICB2YXIgbWludXRlcyAgICAgID0gbWFrZUdldHRlcignbWludXRlcycpO1xuICAgIHZhciBob3VycyAgICAgICAgPSBtYWtlR2V0dGVyKCdob3VycycpO1xuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XG4gICAgdmFyIG1vbnRocyAgICAgICA9IG1ha2VHZXR0ZXIoJ21vbnRocycpO1xuICAgIHZhciB5ZWFycyAgICAgICAgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MgKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIHZhciB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsICAgICAgICAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgIHMgOiA0NSwgICAgICAgICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtIDogNDUsICAgICAgICAgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgIGggOiAyMiwgICAgICAgICAvLyBob3VycyB0byBkYXlcbiAgICAgICAgZCA6IDI2LCAgICAgICAgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTSA6IDExICAgICAgICAgIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpO1xuICAgICAgICB2YXIgc2Vjb25kcyAgPSByb3VuZChkdXJhdGlvbi5hcygncycpKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XG4gICAgICAgIHZhciBob3VycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpO1xuICAgICAgICB2YXIgZGF5cyAgICAgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKTtcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XG4gICAgICAgIHZhciB5ZWFycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpO1xuXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgICAmJiBbJ3NzJywgc2Vjb25kc10gfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDw9IDEgICAgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAgICYmIFsnbW0nLCBtaW51dGVzXSB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDwgdGhyZXNob2xkcy5oICAgJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8PSAxICAgICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPCB0aHJlc2hvbGRzLmQgICAmJiBbJ2RkJywgZGF5c10gICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDw9IDEgICAgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAgICYmIFsnTU0nLCBtb250aHNdICB8fFxuICAgICAgICAgICAgICAgIHllYXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcgKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yocm91bmRpbmdGdW5jdGlvbikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZSAod2l0aFN1ZmZpeCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoKHggPiAwKSAtICh4IDwgMCkpIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDA7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBhYnMkMSh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGFicyQxKHRoaXMuX21vbnRocyk7XG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICB2YXIgWSA9IHllYXJzO1xuICAgICAgICB2YXIgTSA9IG1vbnRocztcbiAgICAgICAgdmFyIEQgPSBkYXlzO1xuICAgICAgICB2YXIgaCA9IGhvdXJzO1xuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XG4gICAgICAgIHZhciBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gdG90YWxTaWduICsgJ1AnICtcbiAgICAgICAgICAgIChZID8geW1TaWduICsgWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IHltU2lnbiArIE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBkYXlzU2lnbiArIEQgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGggPyBobXNTaWduICsgaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IGhtc1NpZ24gKyBtICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgICAgICAgID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzICAgICAgICAgICAgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgICAgICAgICAgICA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgICAgICAgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgICAgICAgICAgICAgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgICAgICA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyAgICAgID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzICAgICAgICAgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzICAgICAgICA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyAgICAgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyAgICAgICAgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiAgICAgICAgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lICAgICAgICAgID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCAgICAgICAgICAgID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiAgICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCB0b0lTT1N0cmluZyQxKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQsIDEwKSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI0LjAnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuICAgICAgICAgICAgICAgICAgICA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICBob29rcy5tYXggICAgICAgICAgICAgICAgICAgPSBtYXg7XG4gICAgaG9va3Mubm93ICAgICAgICAgICAgICAgICAgID0gbm93O1xuICAgIGhvb2tzLnV0YyAgICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlICAgICAgICAgICAgICAgID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSAgICAgICAgICAgICAgICA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkICAgICAgICAgICAgICAgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzICAgICAgICAgICAgICA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluICAgICAgICAgICA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgICAgICAgICAgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlICAgICAgICAgID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgICAgICAgICAgICAgICA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgICAgICAgICA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nICA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCAgICAgICAgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgICAgICAgICAgICAgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBVUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBNUtBO0FBZ0xBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBelFBO0FBQ0E7QUFDQTtBQTJRQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXZCQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUEva0JBO0FBQ0E7QUFDQTtBQXVsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFwQkE7QUFDQTtBQUNBO0FBNHBCQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBdnZCQTtBQUNBO0FBMnZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqd0JBO0FBQ0E7QUFDQTtBQW93QkE7QUFDQTtBQXZ3QkE7QUFDQTtBQUNBO0FBMHdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUEzeUJBO0FBQ0E7QUFDQTtBQTh5QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBcDJCQTtBQUNBO0FBQ0E7QUF1MkJBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFsM0JBO0FBQ0E7QUFzM0JBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQW41QkE7QUFDQTtBQXU1QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQXovQkE7QUFDQTtBQUNBO0FBNC9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZ0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBaHBDQTtBQUNBO0FBQ0E7QUFrcENBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQTFwQ0E7QUFDQTtBQUNBO0FBNHBDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUE5c0NBO0FBQ0E7QUFDQTtBQWl0Q0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBeHVDQTtBQTZ1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3dkNBO0FBQ0E7QUFDQTtBQWd3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXp3Q0E7QUFDQTtBQUNBO0FBNHdDQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFwMENBO0FBQ0E7QUF3MENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTkxQ0E7QUFDQTtBQUNBO0FBZzJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBLzlDQTtBQUNBO0FBQ0E7QUFrK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBcUJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUE3bURBO0FBQ0E7QUFDQTtBQWduREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6dERBO0FBQ0E7QUE2dERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUExdURBO0FBZ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFqQkE7QUFDQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoeERBO0FBb3hEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQUE7QUExekRBO0FBOHpEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQU5BO0FBUUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBaENBO0FBc0NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQTNDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF0NkRBO0FBQ0E7QUFDQTtBQXc2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoK0RBO0FBQ0E7QUFDQTtBQWsrREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBcC9EQTtBQXcvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4QkE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQWpDQTtBQUNBO0FBQ0E7QUFtQ0E7QUFDQTtBQXRDQTtBQUNBO0FBQ0E7QUF3Q0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNURBO0FBQ0E7QUFDQTtBQThEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUF0bkVBO0FBMG5FQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQVVBO0FBQ0E7QUFLQTtBQVlBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF4Q0E7QUEwQ0E7QUFDQTtBQWh0RUE7QUFDQTtBQUNBO0FBa3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQTF4RUE7QUFDQTtBQUNBO0FBNHhFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBL3lFQTtBQUNBO0FBQ0E7QUFpekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBbkJBO0FBQ0E7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBbjFFQTtBQUNBO0FBdTFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFYQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFVQTtBQUNBO0FBOUNBO0FBQ0E7QUFDQTtBQWdEQTtBQUNBO0FBQUE7QUFDQTtBQXBEQTtBQUNBO0FBQ0E7QUFzREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBNTdFQTtBQUNBO0FBQ0E7QUE4N0VBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUpBO0FBTUE7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFWQTtBQWFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVJBO0FBWUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQTVtRkE7QUFpbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbm9GQTtBQUNBO0FBQ0E7QUFxb0ZBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBcnVGQTtBQUNBO0FBQ0E7QUF3dUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL3ZGQTtBQW93RkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQXB4RkE7QUFDQTtBQUNBO0FBd3hGQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM3lGQTtBQWd6RkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUExQkE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWo4RkE7QUFDQTtBQUNBO0FBbThGQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFGQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBRkE7QUFXQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsakdBO0FBQ0E7QUFDQTtBQW9qR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXIwR0E7QUF5MEdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQS9CQTtBQUNBO0FBaUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUEvQkE7QUFDQTtBQWlDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXRoSEE7QUFDQTtBQUNBO0FBK2hIQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBN2tIQTtBQUNBO0FBaWxIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBN25IQTtBQUNBO0FBQ0E7QUFnb0hBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQWhwSEE7QUFDQTtBQW9wSEE7QUFDQTtBQXRwSEE7QUFDQTtBQUNBO0FBeXBIQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFqckhBO0FBQ0E7QUFxckhBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQXhzSEE7QUE2c0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqdEhBO0FBQ0E7QUFDQTtBQW90SEE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBM3hIQTtBQUNBO0FBZ3lIQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXZ6SEE7QUFDQTtBQUNBO0FBeXpIQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE5OUhBO0FBaytIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBVEE7QUFDQTtBQWFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQTVrSUE7QUFDQTtBQUNBO0FBOGtJQTtBQUNBO0FBamxJQTtBQUNBO0FBQ0E7QUFtbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQWJBO0FBaUJBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFIQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBUkE7QUFVQTtBQTFySUE7QUFDQTtBQUNBO0FBNHJJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUE1eElBO0FBQ0E7QUFDQTtBQTh4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXh5SUE7QUFDQTtBQUNBO0FBMHlJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUE5N0lBO0FBQ0E7QUFtOElBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQXIvSUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/moment/moment.js\n"); - -/***/ }), - -/***/ "../node_modules/mpd-parser/dist/mpd-parser.es.js": -/*!********************************************************!*\ - !*** ../node_modules/mpd-parser/dist/mpd-parser.es.js ***! - \********************************************************/ -/*! exports provided: VERSION, parse, parseUTCTiming */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VERSION\", function() { return VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parse\", function() { return parse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseUTCTiming\", function() { return parseUTCTiming; });\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! global/window */ \"../node_modules/global/window.js\");\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(global_window__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/*! @name mpd-parser @version 0.8.1 @license Apache-2.0 */\n\n\n\nvar version = \"0.8.1\";\n\nvar isObject = function isObject(obj) {\n return !!obj && _typeof(obj) === 'object';\n};\n\nvar merge = function merge() {\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n\n return objects.reduce(function (result, source) {\n Object.keys(source).forEach(function (key) {\n if (Array.isArray(result[key]) && Array.isArray(source[key])) {\n result[key] = result[key].concat(source[key]);\n } else if (isObject(result[key]) && isObject(source[key])) {\n result[key] = merge(result[key], source[key]);\n } else {\n result[key] = source[key];\n }\n });\n return result;\n }, {});\n};\n\nvar values = function values(o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n};\n\nvar range = function range(start, end) {\n var result = [];\n\n for (var i = start; i < end; i++) {\n result.push(i);\n }\n\n return result;\n};\n\nvar flatten = function flatten(lists) {\n return lists.reduce(function (x, y) {\n return x.concat(y);\n }, []);\n};\n\nvar from = function from(list) {\n if (!list.length) {\n return [];\n }\n\n var result = [];\n\n for (var i = 0; i < list.length; i++) {\n result.push(list[i]);\n }\n\n return result;\n};\n\nvar findIndexes = function findIndexes(l, key) {\n return l.reduce(function (a, e, i) {\n if (e[key]) {\n a.push(i);\n }\n\n return a;\n }, []);\n};\n\nvar errors = {\n INVALID_NUMBER_OF_PERIOD: 'INVALID_NUMBER_OF_PERIOD',\n DASH_EMPTY_MANIFEST: 'DASH_EMPTY_MANIFEST',\n DASH_INVALID_XML: 'DASH_INVALID_XML',\n NO_BASE_URL: 'NO_BASE_URL',\n MISSING_SEGMENT_INFORMATION: 'MISSING_SEGMENT_INFORMATION',\n SEGMENT_TIME_UNSPECIFIED: 'SEGMENT_TIME_UNSPECIFIED',\n UNSUPPORTED_UTC_TIMING_SCHEME: 'UNSUPPORTED_UTC_TIMING_SCHEME'\n};\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n\nvar urlToolkit = createCommonjsModule(function (module, exports) {\n // see https://tools.ietf.org/html/rfc1808\n\n /* jshint ignore:start */\n (function (root) {\n /* jshint ignore:end */\n var URL_REGEX = /^((?:[a-zA-Z0-9+\\-.]+:)?)(\\/\\/[^\\/?#]*)?((?:[^\\/\\?#]*\\/)*.*?)??(;.*?)?(\\?.*?)?(#.*?)?$/;\n var FIRST_SEGMENT_REGEX = /^([^\\/?#]*)(.*)$/;\n var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/).*?(?=\\/)/g;\n var URLToolkit = {\n // jshint ignore:line\n // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n // E.g\n // With opts.alwaysNormalize = false (default, spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n // With opts.alwaysNormalize = true (not spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n buildAbsoluteURL: function buildAbsoluteURL(baseURL, relativeURL, opts) {\n opts = opts || {}; // remove any remaining space and CRLF\n\n baseURL = baseURL.trim();\n relativeURL = relativeURL.trim();\n\n if (!relativeURL) {\n // 2a) If the embedded URL is entirely empty, it inherits the\n // entire base URL (i.e., is set equal to the base URL)\n // and we are done.\n if (!opts.alwaysNormalize) {\n return baseURL;\n }\n\n var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n\n if (!basePartsForNormalise) {\n throw new Error('Error trying to parse base URL.');\n }\n\n basePartsForNormalise.path = URLToolkit.normalizePath(basePartsForNormalise.path);\n return URLToolkit.buildURLFromParts(basePartsForNormalise);\n }\n\n var relativeParts = URLToolkit.parseURL(relativeURL);\n\n if (!relativeParts) {\n throw new Error('Error trying to parse relative URL.');\n }\n\n if (relativeParts.scheme) {\n // 2b) If the embedded URL starts with a scheme name, it is\n // interpreted as an absolute URL and we are done.\n if (!opts.alwaysNormalize) {\n return relativeURL;\n }\n\n relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n return URLToolkit.buildURLFromParts(relativeParts);\n }\n\n var baseParts = URLToolkit.parseURL(baseURL);\n\n if (!baseParts) {\n throw new Error('Error trying to parse base URL.');\n }\n\n if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n baseParts.netLoc = pathParts[1];\n baseParts.path = pathParts[2];\n }\n\n if (baseParts.netLoc && !baseParts.path) {\n baseParts.path = '/';\n }\n\n var builtParts = {\n // 2c) Otherwise, the embedded URL inherits the scheme of\n // the base URL.\n scheme: baseParts.scheme,\n netLoc: relativeParts.netLoc,\n path: null,\n params: relativeParts.params,\n query: relativeParts.query,\n fragment: relativeParts.fragment\n };\n\n if (!relativeParts.netLoc) {\n // 3) If the embedded URL's <net_loc> is non-empty, we skip to\n // Step 7. Otherwise, the embedded URL inherits the <net_loc>\n // (if any) of the base URL.\n builtParts.netLoc = baseParts.netLoc; // 4) If the embedded URL path is preceded by a slash \"/\", the\n // path is not relative and we skip to Step 7.\n\n if (relativeParts.path[0] !== '/') {\n if (!relativeParts.path) {\n // 5) If the embedded URL path is empty (and not preceded by a\n // slash), then the embedded URL inherits the base URL path\n builtParts.path = baseParts.path; // 5a) if the embedded URL's <params> is non-empty, we skip to\n // step 7; otherwise, it inherits the <params> of the base\n // URL (if any) and\n\n if (!relativeParts.params) {\n builtParts.params = baseParts.params; // 5b) if the embedded URL's <query> is non-empty, we skip to\n // step 7; otherwise, it inherits the <query> of the base\n // URL (if any) and we skip to step 7.\n\n if (!relativeParts.query) {\n builtParts.query = baseParts.query;\n }\n }\n } else {\n // 6) The last segment of the base URL's path (anything\n // following the rightmost slash \"/\", or the entire path if no\n // slash is present) is removed and the embedded URL's path is\n // appended in its place.\n var baseURLPath = baseParts.path;\n var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) + relativeParts.path;\n builtParts.path = URLToolkit.normalizePath(newPath);\n }\n }\n }\n\n if (builtParts.path === null) {\n builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path;\n }\n\n return URLToolkit.buildURLFromParts(builtParts);\n },\n parseURL: function parseURL(url) {\n var parts = URL_REGEX.exec(url);\n\n if (!parts) {\n return null;\n }\n\n return {\n scheme: parts[1] || '',\n netLoc: parts[2] || '',\n path: parts[3] || '',\n params: parts[4] || '',\n query: parts[5] || '',\n fragment: parts[6] || ''\n };\n },\n normalizePath: function normalizePath(path) {\n // The following operations are\n // then applied, in order, to the new path:\n // 6a) All occurrences of \"./\", where \".\" is a complete path\n // segment, are removed.\n // 6b) If the path ends with \".\" as a complete path segment,\n // that \".\" is removed.\n path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, ''); // 6c) All occurrences of \"<segment>/../\", where <segment> is a\n // complete path segment not equal to \"..\", are removed.\n // Removal of these path segments is performed iteratively,\n // removing the leftmost matching pattern on each iteration,\n // until no matching pattern remains.\n // 6d) If the path ends with \"<segment>/..\", where <segment> is a\n // complete path segment not equal to \"..\", that\n // \"<segment>/..\" is removed.\n\n while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length) {} // jshint ignore:line\n\n\n return path.split('').reverse().join('');\n },\n buildURLFromParts: function buildURLFromParts(parts) {\n return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment;\n }\n };\n /* jshint ignore:start */\n\n module.exports = URLToolkit;\n })(commonjsGlobal);\n /* jshint ignore:end */\n\n});\n\nvar resolveUrl = function resolveUrl(baseUrl, relativeUrl) {\n // return early if we don't need to resolve\n if (/^[a-z]+:/i.test(relativeUrl)) {\n return relativeUrl;\n } // if the base URL is relative then combine with the current location\n\n\n if (!/\\/\\//i.test(baseUrl)) {\n baseUrl = urlToolkit.buildAbsoluteURL(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.location.href, baseUrl);\n }\n\n return urlToolkit.buildAbsoluteURL(baseUrl, relativeUrl);\n};\n/**\n * @typedef {Object} SingleUri\n * @property {string} uri - relative location of segment\n * @property {string} resolvedUri - resolved location of segment\n * @property {Object} byterange - Object containing information on how to make byte range\n * requests following byte-range-spec per RFC2616.\n * @property {String} byterange.length - length of range request\n * @property {String} byterange.offset - byte offset of range request\n *\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1\n */\n\n/**\n * Converts a URLType node (5.3.9.2.3 Table 13) to a segment object\n * that conforms to how m3u8-parser is structured\n *\n * @see https://github.com/videojs/m3u8-parser\n *\n * @param {string} baseUrl - baseUrl provided by <BaseUrl> nodes\n * @param {string} source - source url for segment\n * @param {string} range - optional range used for range calls,\n * follows RFC 2616, Clause 14.35.1\n * @return {SingleUri} full segment information transformed into a format similar\n * to m3u8-parser\n */\n\n\nvar urlTypeToSegment = function urlTypeToSegment(_ref) {\n var _ref$baseUrl = _ref.baseUrl,\n baseUrl = _ref$baseUrl === void 0 ? '' : _ref$baseUrl,\n _ref$source = _ref.source,\n source = _ref$source === void 0 ? '' : _ref$source,\n _ref$range = _ref.range,\n range = _ref$range === void 0 ? '' : _ref$range,\n _ref$indexRange = _ref.indexRange,\n indexRange = _ref$indexRange === void 0 ? '' : _ref$indexRange;\n var segment = {\n uri: source,\n resolvedUri: resolveUrl(baseUrl || '', source)\n };\n\n if (range || indexRange) {\n var rangeStr = range ? range : indexRange;\n var ranges = rangeStr.split('-');\n var startRange = parseInt(ranges[0], 10);\n var endRange = parseInt(ranges[1], 10); // byterange should be inclusive according to\n // RFC 2616, Clause 14.35.1\n\n segment.byterange = {\n length: endRange - startRange + 1,\n offset: startRange\n };\n }\n\n return segment;\n};\n\nvar byteRangeToString = function byteRangeToString(byterange) {\n // `endRange` is one less than `offset + length` because the HTTP range\n // header uses inclusive ranges\n var endRange = byterange.offset + byterange.length - 1;\n return byterange.offset + \"-\" + endRange;\n};\n/**\n * Functions for calculating the range of available segments in static and dynamic\n * manifests.\n */\n\n\nvar segmentRange = {\n /**\n * Returns the entire range of available segments for a static MPD\n *\n * @param {Object} attributes\n * Inheritied MPD attributes\n * @return {{ start: number, end: number }}\n * The start and end numbers for available segments\n */\n \"static\": function _static(attributes) {\n var duration = attributes.duration,\n _attributes$timescale = attributes.timescale,\n timescale = _attributes$timescale === void 0 ? 1 : _attributes$timescale,\n sourceDuration = attributes.sourceDuration;\n return {\n start: 0,\n end: Math.ceil(sourceDuration / (duration / timescale))\n };\n },\n\n /**\n * Returns the current live window range of available segments for a dynamic MPD\n *\n * @param {Object} attributes\n * Inheritied MPD attributes\n * @return {{ start: number, end: number }}\n * The start and end numbers for available segments\n */\n dynamic: function dynamic(attributes) {\n var NOW = attributes.NOW,\n clientOffset = attributes.clientOffset,\n availabilityStartTime = attributes.availabilityStartTime,\n _attributes$timescale2 = attributes.timescale,\n timescale = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2,\n duration = attributes.duration,\n _attributes$start = attributes.start,\n start = _attributes$start === void 0 ? 0 : _attributes$start,\n _attributes$minimumUp = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp,\n _attributes$timeShift = attributes.timeShiftBufferDepth,\n timeShiftBufferDepth = _attributes$timeShift === void 0 ? Infinity : _attributes$timeShift;\n var now = (NOW + clientOffset) / 1000;\n var periodStartWC = availabilityStartTime + start;\n var periodEndWC = now + minimumUpdatePeriod;\n var periodDuration = periodEndWC - periodStartWC;\n var segmentCount = Math.ceil(periodDuration * timescale / duration);\n var availableStart = Math.floor((now - periodStartWC - timeShiftBufferDepth) * timescale / duration);\n var availableEnd = Math.floor((now - periodStartWC) * timescale / duration);\n return {\n start: Math.max(0, availableStart),\n end: Math.min(segmentCount, availableEnd)\n };\n }\n};\n/**\n * Maps a range of numbers to objects with information needed to build the corresponding\n * segment list\n *\n * @name toSegmentsCallback\n * @function\n * @param {number} number\n * Number of the segment\n * @param {number} index\n * Index of the number in the range list\n * @return {{ number: Number, duration: Number, timeline: Number, time: Number }}\n * Object with segment timing and duration info\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping a range of numbers to\n * information needed to build the segment list.\n *\n * @param {Object} attributes\n * Inherited MPD attributes\n * @return {toSegmentsCallback}\n * Callback map function\n */\n\nvar toSegments = function toSegments(attributes) {\n return function (number, index) {\n var duration = attributes.duration,\n _attributes$timescale3 = attributes.timescale,\n timescale = _attributes$timescale3 === void 0 ? 1 : _attributes$timescale3,\n periodIndex = attributes.periodIndex,\n _attributes$startNumb = attributes.startNumber,\n startNumber = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb;\n return {\n number: startNumber + number,\n duration: duration / timescale,\n timeline: periodIndex,\n time: index * duration\n };\n };\n};\n/**\n * Returns a list of objects containing segment timing and duration info used for\n * building the list of segments. This uses the @duration attribute specified\n * in the MPD manifest to derive the range of segments.\n *\n * @param {Object} attributes\n * Inherited MPD attributes\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\n\nvar parseByDuration = function parseByDuration(attributes) {\n var _attributes$type = attributes.type,\n type = _attributes$type === void 0 ? 'static' : _attributes$type,\n duration = attributes.duration,\n _attributes$timescale4 = attributes.timescale,\n timescale = _attributes$timescale4 === void 0 ? 1 : _attributes$timescale4,\n sourceDuration = attributes.sourceDuration;\n\n var _segmentRange$type = segmentRange[type](attributes),\n start = _segmentRange$type.start,\n end = _segmentRange$type.end;\n\n var segments = range(start, end).map(toSegments(attributes));\n\n if (type === 'static') {\n var index = segments.length - 1; // final segment may be less than full segment duration\n\n segments[index].duration = sourceDuration - duration / timescale * index;\n }\n\n return segments;\n};\n/**\n * Translates SegmentBase into a set of segments.\n * (DASH SPEC Section 5.3.9.3.2) contains a set of <SegmentURL> nodes. Each\n * node should be translated into segment.\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @return {Object.<Array>} list of segments\n */\n\n\nvar segmentsFromBase = function segmentsFromBase(attributes) {\n var baseUrl = attributes.baseUrl,\n _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ,\n sourceDuration = attributes.sourceDuration,\n _attributes$timescale = attributes.timescale,\n timescale = _attributes$timescale === void 0 ? 1 : _attributes$timescale,\n _attributes$indexRang = attributes.indexRange,\n indexRange = _attributes$indexRang === void 0 ? '' : _attributes$indexRang,\n duration = attributes.duration; // base url is required for SegmentBase to work, per spec (Section 5.3.9.2.1)\n\n if (!baseUrl) {\n throw new Error(errors.NO_BASE_URL);\n }\n\n var initSegment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: initialization.sourceURL,\n range: initialization.range\n });\n var segment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: baseUrl,\n indexRange: indexRange\n });\n segment.map = initSegment; // If there is a duration, use it, otherwise use the given duration of the source\n // (since SegmentBase is only for one total segment)\n\n if (duration) {\n var segmentTimeInfo = parseByDuration(attributes);\n\n if (segmentTimeInfo.length) {\n segment.duration = segmentTimeInfo[0].duration;\n segment.timeline = segmentTimeInfo[0].timeline;\n }\n } else if (sourceDuration) {\n segment.duration = sourceDuration / timescale;\n segment.timeline = 0;\n } // This is used for mediaSequence\n\n\n segment.number = 0;\n return [segment];\n};\n/**\n * Given a playlist, a sidx box, and a baseUrl, update the segment list of the playlist\n * according to the sidx information given.\n *\n * playlist.sidx has metadadata about the sidx where-as the sidx param\n * is the parsed sidx box itself.\n *\n * @param {Object} playlist the playlist to update the sidx information for\n * @param {Object} sidx the parsed sidx box\n * @return {Object} the playlist object with the updated sidx information\n */\n\n\nvar addSegmentsToPlaylist = function addSegmentsToPlaylist(playlist, sidx, baseUrl) {\n // Retain init segment information\n var initSegment = playlist.sidx.map ? playlist.sidx.map : null; // Retain source duration from initial master manifest parsing\n\n var sourceDuration = playlist.sidx.duration; // Retain source timeline\n\n var timeline = playlist.timeline || 0;\n var sidxByteRange = playlist.sidx.byterange;\n var sidxEnd = sidxByteRange.offset + sidxByteRange.length; // Retain timescale of the parsed sidx\n\n var timescale = sidx.timescale; // referenceType 1 refers to other sidx boxes\n\n var mediaReferences = sidx.references.filter(function (r) {\n return r.referenceType !== 1;\n });\n var segments = []; // firstOffset is the offset from the end of the sidx box\n\n var startIndex = sidxEnd + sidx.firstOffset;\n\n for (var i = 0; i < mediaReferences.length; i++) {\n var reference = sidx.references[i]; // size of the referenced (sub)segment\n\n var size = reference.referencedSize; // duration of the referenced (sub)segment, in the timescale\n // this will be converted to seconds when generating segments\n\n var duration = reference.subsegmentDuration; // should be an inclusive range\n\n var endIndex = startIndex + size - 1;\n var indexRange = startIndex + \"-\" + endIndex;\n var attributes = {\n baseUrl: baseUrl,\n timescale: timescale,\n timeline: timeline,\n // this is used in parseByDuration\n periodIndex: timeline,\n duration: duration,\n sourceDuration: sourceDuration,\n indexRange: indexRange\n };\n var segment = segmentsFromBase(attributes)[0];\n\n if (initSegment) {\n segment.map = initSegment;\n }\n\n segments.push(segment);\n startIndex += size;\n }\n\n playlist.segments = segments;\n return playlist;\n};\n\nvar mergeDiscontiguousPlaylists = function mergeDiscontiguousPlaylists(playlists) {\n var mergedPlaylists = values(playlists.reduce(function (acc, playlist) {\n // assuming playlist IDs are the same across periods\n // TODO: handle multiperiod where representation sets are not the same\n // across periods\n var name = playlist.attributes.id + (playlist.attributes.lang || ''); // Periods after first\n\n if (acc[name]) {\n var _acc$name$segments; // first segment of subsequent periods signal a discontinuity\n\n\n if (playlist.segments[0]) {\n playlist.segments[0].discontinuity = true;\n }\n\n (_acc$name$segments = acc[name].segments).push.apply(_acc$name$segments, playlist.segments); // bubble up contentProtection, this assumes all DRM content\n // has the same contentProtection\n\n\n if (playlist.attributes.contentProtection) {\n acc[name].attributes.contentProtection = playlist.attributes.contentProtection;\n }\n } else {\n // first Period\n acc[name] = playlist;\n }\n\n return acc;\n }, {}));\n return mergedPlaylists.map(function (playlist) {\n playlist.discontinuityStarts = findIndexes(playlist.segments, 'discontinuity');\n return playlist;\n });\n};\n\nvar addSegmentInfoFromSidx = function addSegmentInfoFromSidx(playlists, sidxMapping) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n if (!Object.keys(sidxMapping).length) {\n return playlists;\n }\n\n for (var i in playlists) {\n var playlist = playlists[i];\n\n if (!playlist.sidx) {\n continue;\n }\n\n var sidxKey = playlist.sidx.uri + '-' + byteRangeToString(playlist.sidx.byterange);\n var sidxMatch = sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx;\n\n if (playlist.sidx && sidxMatch) {\n addSegmentsToPlaylist(playlist, sidxMatch, playlist.sidx.resolvedUri);\n }\n }\n\n return playlists;\n};\n\nvar formatAudioPlaylist = function formatAudioPlaylist(_ref) {\n var _attributes;\n\n var attributes = _ref.attributes,\n segments = _ref.segments,\n sidx = _ref.sidx;\n var playlist = {\n attributes: (_attributes = {\n NAME: attributes.id,\n BANDWIDTH: attributes.bandwidth,\n CODECS: attributes.codecs\n }, _attributes['PROGRAM-ID'] = 1, _attributes),\n uri: '',\n endList: (attributes.type || 'static') === 'static',\n timeline: attributes.periodIndex,\n resolvedUri: '',\n targetDuration: attributes.duration,\n segments: segments,\n mediaSequence: segments.length ? segments[0].number : 1\n };\n\n if (attributes.contentProtection) {\n playlist.contentProtection = attributes.contentProtection;\n }\n\n if (sidx) {\n playlist.sidx = sidx;\n }\n\n return playlist;\n};\n\nvar formatVttPlaylist = function formatVttPlaylist(_ref2) {\n var _attributes2;\n\n var attributes = _ref2.attributes,\n segments = _ref2.segments;\n\n if (typeof segments === 'undefined') {\n // vtt tracks may use single file in BaseURL\n segments = [{\n uri: attributes.baseUrl,\n timeline: attributes.periodIndex,\n resolvedUri: attributes.baseUrl || '',\n duration: attributes.sourceDuration,\n number: 0\n }]; // targetDuration should be the same duration as the only segment\n\n attributes.duration = attributes.sourceDuration;\n }\n\n return {\n attributes: (_attributes2 = {\n NAME: attributes.id,\n BANDWIDTH: attributes.bandwidth\n }, _attributes2['PROGRAM-ID'] = 1, _attributes2),\n uri: '',\n endList: (attributes.type || 'static') === 'static',\n timeline: attributes.periodIndex,\n resolvedUri: attributes.baseUrl || '',\n targetDuration: attributes.duration,\n segments: segments,\n mediaSequence: segments.length ? segments[0].number : 1\n };\n};\n\nvar organizeAudioPlaylists = function organizeAudioPlaylists(playlists, sidxMapping) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n var mainPlaylist;\n var formattedPlaylists = playlists.reduce(function (a, playlist) {\n var role = playlist.attributes.role && playlist.attributes.role.value || '';\n var language = playlist.attributes.lang || '';\n var label = 'main';\n\n if (language) {\n var roleLabel = role ? \" (\" + role + \")\" : '';\n label = \"\" + playlist.attributes.lang + roleLabel;\n } // skip if we already have the highest quality audio for a language\n\n\n if (a[label] && a[label].playlists[0].attributes.BANDWIDTH > playlist.attributes.bandwidth) {\n return a;\n }\n\n a[label] = {\n language: language,\n autoselect: true,\n \"default\": role === 'main',\n playlists: addSegmentInfoFromSidx([formatAudioPlaylist(playlist)], sidxMapping),\n uri: ''\n };\n\n if (typeof mainPlaylist === 'undefined' && role === 'main') {\n mainPlaylist = playlist;\n mainPlaylist[\"default\"] = true;\n }\n\n return a;\n }, {}); // if no playlists have role \"main\", mark the first as main\n\n if (!mainPlaylist) {\n var firstLabel = Object.keys(formattedPlaylists)[0];\n formattedPlaylists[firstLabel][\"default\"] = true;\n }\n\n return formattedPlaylists;\n};\n\nvar organizeVttPlaylists = function organizeVttPlaylists(playlists, sidxMapping) {\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n return playlists.reduce(function (a, playlist) {\n var label = playlist.attributes.lang || 'text'; // skip if we already have subtitles\n\n if (a[label]) {\n return a;\n }\n\n a[label] = {\n language: label,\n \"default\": false,\n autoselect: false,\n playlists: addSegmentInfoFromSidx([formatVttPlaylist(playlist)], sidxMapping),\n uri: ''\n };\n return a;\n }, {});\n};\n\nvar formatVideoPlaylist = function formatVideoPlaylist(_ref3) {\n var _attributes3;\n\n var attributes = _ref3.attributes,\n segments = _ref3.segments,\n sidx = _ref3.sidx;\n var playlist = {\n attributes: (_attributes3 = {\n NAME: attributes.id,\n AUDIO: 'audio',\n SUBTITLES: 'subs',\n RESOLUTION: {\n width: attributes.width,\n height: attributes.height\n },\n CODECS: attributes.codecs,\n BANDWIDTH: attributes.bandwidth\n }, _attributes3['PROGRAM-ID'] = 1, _attributes3),\n uri: '',\n endList: (attributes.type || 'static') === 'static',\n timeline: attributes.periodIndex,\n resolvedUri: '',\n targetDuration: attributes.duration,\n segments: segments,\n mediaSequence: segments.length ? segments[0].number : 1\n };\n\n if (attributes.contentProtection) {\n playlist.contentProtection = attributes.contentProtection;\n }\n\n if (sidx) {\n playlist.sidx = sidx;\n }\n\n return playlist;\n};\n\nvar toM3u8 = function toM3u8(dashPlaylists, sidxMapping) {\n var _mediaGroups;\n\n if (sidxMapping === void 0) {\n sidxMapping = {};\n }\n\n if (!dashPlaylists.length) {\n return {};\n } // grab all master attributes\n\n\n var _dashPlaylists$0$attr = dashPlaylists[0].attributes,\n duration = _dashPlaylists$0$attr.sourceDuration,\n _dashPlaylists$0$attr2 = _dashPlaylists$0$attr.minimumUpdatePeriod,\n minimumUpdatePeriod = _dashPlaylists$0$attr2 === void 0 ? 0 : _dashPlaylists$0$attr2;\n\n var videoOnly = function videoOnly(_ref4) {\n var attributes = _ref4.attributes;\n return attributes.mimeType === 'video/mp4' || attributes.contentType === 'video';\n };\n\n var audioOnly = function audioOnly(_ref5) {\n var attributes = _ref5.attributes;\n return attributes.mimeType === 'audio/mp4' || attributes.contentType === 'audio';\n };\n\n var vttOnly = function vttOnly(_ref6) {\n var attributes = _ref6.attributes;\n return attributes.mimeType === 'text/vtt' || attributes.contentType === 'text';\n };\n\n var videoPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(videoOnly)).map(formatVideoPlaylist);\n var audioPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(audioOnly));\n var vttPlaylists = dashPlaylists.filter(vttOnly);\n var master = {\n allowCache: true,\n discontinuityStarts: [],\n segments: [],\n endList: true,\n mediaGroups: (_mediaGroups = {\n AUDIO: {},\n VIDEO: {}\n }, _mediaGroups['CLOSED-CAPTIONS'] = {}, _mediaGroups.SUBTITLES = {}, _mediaGroups),\n uri: '',\n duration: duration,\n playlists: addSegmentInfoFromSidx(videoPlaylists, sidxMapping),\n minimumUpdatePeriod: minimumUpdatePeriod * 1000\n };\n\n if (audioPlaylists.length) {\n master.mediaGroups.AUDIO.audio = organizeAudioPlaylists(audioPlaylists, sidxMapping);\n }\n\n if (vttPlaylists.length) {\n master.mediaGroups.SUBTITLES.subs = organizeVttPlaylists(vttPlaylists, sidxMapping);\n }\n\n return master;\n};\n/**\n * Calculates the R (repetition) value for a live stream (for the final segment\n * in a manifest where the r value is negative 1)\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {number} time\n * current time (typically the total time up until the final segment)\n * @param {number} duration\n * duration property for the given <S />\n *\n * @return {number}\n * R value to reach the end of the given period\n */\n\n\nvar getLiveRValue = function getLiveRValue(attributes, time, duration) {\n var NOW = attributes.NOW,\n clientOffset = attributes.clientOffset,\n availabilityStartTime = attributes.availabilityStartTime,\n _attributes$timescale = attributes.timescale,\n timescale = _attributes$timescale === void 0 ? 1 : _attributes$timescale,\n _attributes$start = attributes.start,\n start = _attributes$start === void 0 ? 0 : _attributes$start,\n _attributes$minimumUp = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp;\n var now = (NOW + clientOffset) / 1000;\n var periodStartWC = availabilityStartTime + start;\n var periodEndWC = now + minimumUpdatePeriod;\n var periodDuration = periodEndWC - periodStartWC;\n return Math.ceil((periodDuration * timescale - time) / duration);\n};\n/**\n * Uses information provided by SegmentTemplate.SegmentTimeline to determine segment\n * timing and duration\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n *\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\n\nvar parseByTimeline = function parseByTimeline(attributes, segmentTimeline) {\n var _attributes$type = attributes.type,\n type = _attributes$type === void 0 ? 'static' : _attributes$type,\n _attributes$minimumUp2 = attributes.minimumUpdatePeriod,\n minimumUpdatePeriod = _attributes$minimumUp2 === void 0 ? 0 : _attributes$minimumUp2,\n _attributes$media = attributes.media,\n media = _attributes$media === void 0 ? '' : _attributes$media,\n sourceDuration = attributes.sourceDuration,\n _attributes$timescale2 = attributes.timescale,\n timescale = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2,\n _attributes$startNumb = attributes.startNumber,\n startNumber = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb,\n timeline = attributes.periodIndex;\n var segments = [];\n var time = -1;\n\n for (var sIndex = 0; sIndex < segmentTimeline.length; sIndex++) {\n var S = segmentTimeline[sIndex];\n var duration = S.d;\n var repeat = S.r || 0;\n var segmentTime = S.t || 0;\n\n if (time < 0) {\n // first segment\n time = segmentTime;\n }\n\n if (segmentTime && segmentTime > time) {\n // discontinuity\n // TODO: How to handle this type of discontinuity\n // timeline++ here would treat it like HLS discontuity and content would\n // get appended without gap\n // E.G.\n // <S t=\"0\" d=\"1\" />\n // <S d=\"1\" />\n // <S d=\"1\" />\n // <S t=\"5\" d=\"1\" />\n // would have $Time$ values of [0, 1, 2, 5]\n // should this be appened at time positions [0, 1, 2, 3],(#EXT-X-DISCONTINUITY)\n // or [0, 1, 2, gap, gap, 5]? (#EXT-X-GAP)\n // does the value of sourceDuration consider this when calculating arbitrary\n // negative @r repeat value?\n // E.G. Same elements as above with this added at the end\n // <S d=\"1\" r=\"-1\" />\n // with a sourceDuration of 10\n // Would the 2 gaps be included in the time duration calculations resulting in\n // 8 segments with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9] or 10 segments\n // with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9, 10, 11] ?\n time = segmentTime;\n }\n\n var count = void 0;\n\n if (repeat < 0) {\n var nextS = sIndex + 1;\n\n if (nextS === segmentTimeline.length) {\n // last segment\n if (type === 'dynamic' && minimumUpdatePeriod > 0 && media.indexOf('$Number$') > 0) {\n count = getLiveRValue(attributes, time, duration);\n } else {\n // TODO: This may be incorrect depending on conclusion of TODO above\n count = (sourceDuration * timescale - time) / duration;\n }\n } else {\n count = (segmentTimeline[nextS].t - time) / duration;\n }\n } else {\n count = repeat + 1;\n }\n\n var end = startNumber + segments.length + count;\n var number = startNumber + segments.length;\n\n while (number < end) {\n segments.push({\n number: number,\n duration: duration / timescale,\n time: time,\n timeline: timeline\n });\n time += duration;\n number++;\n }\n }\n\n return segments;\n};\n\nvar identifierPattern = /\\$([A-z]*)(?:(%0)([0-9]+)d)?\\$/g;\n/**\n * Replaces template identifiers with corresponding values. To be used as the callback\n * for String.prototype.replace\n *\n * @name replaceCallback\n * @function\n * @param {string} match\n * Entire match of identifier\n * @param {string} identifier\n * Name of matched identifier\n * @param {string} format\n * Format tag string. Its presence indicates that padding is expected\n * @param {string} width\n * Desired length of the replaced value. Values less than this width shall be left\n * zero padded\n * @return {string}\n * Replacement for the matched identifier\n */\n\n/**\n * Returns a function to be used as a callback for String.prototype.replace to replace\n * template identifiers\n *\n * @param {Obect} values\n * Object containing values that shall be used to replace known identifiers\n * @param {number} values.RepresentationID\n * Value of the Representation@id attribute\n * @param {number} values.Number\n * Number of the corresponding segment\n * @param {number} values.Bandwidth\n * Value of the Representation@bandwidth attribute.\n * @param {number} values.Time\n * Timestamp value of the corresponding segment\n * @return {replaceCallback}\n * Callback to be used with String.prototype.replace to replace identifiers\n */\n\nvar identifierReplacement = function identifierReplacement(values) {\n return function (match, identifier, format, width) {\n if (match === '$$') {\n // escape sequence\n return '$';\n }\n\n if (typeof values[identifier] === 'undefined') {\n return match;\n }\n\n var value = '' + values[identifier];\n\n if (identifier === 'RepresentationID') {\n // Format tag shall not be present with RepresentationID\n return value;\n }\n\n if (!format) {\n width = 1;\n } else {\n width = parseInt(width, 10);\n }\n\n if (value.length >= width) {\n return value;\n }\n\n return \"\" + new Array(width - value.length + 1).join('0') + value;\n };\n};\n/**\n * Constructs a segment url from a template string\n *\n * @param {string} url\n * Template string to construct url from\n * @param {Obect} values\n * Object containing values that shall be used to replace known identifiers\n * @param {number} values.RepresentationID\n * Value of the Representation@id attribute\n * @param {number} values.Number\n * Number of the corresponding segment\n * @param {number} values.Bandwidth\n * Value of the Representation@bandwidth attribute.\n * @param {number} values.Time\n * Timestamp value of the corresponding segment\n * @return {string}\n * Segment url with identifiers replaced\n */\n\n\nvar constructTemplateUrl = function constructTemplateUrl(url, values) {\n return url.replace(identifierPattern, identifierReplacement(values));\n};\n/**\n * Generates a list of objects containing timing and duration information about each\n * segment needed to generate segment uris and the complete segment object\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {{number: number, duration: number, time: number, timeline: number}[]}\n * List of Objects with segment timing and duration info\n */\n\n\nvar parseTemplateInfo = function parseTemplateInfo(attributes, segmentTimeline) {\n if (!attributes.duration && !segmentTimeline) {\n // if neither @duration or SegmentTimeline are present, then there shall be exactly\n // one media segment\n return [{\n number: attributes.startNumber || 1,\n duration: attributes.sourceDuration,\n time: 0,\n timeline: attributes.periodIndex\n }];\n }\n\n if (attributes.duration) {\n return parseByDuration(attributes);\n }\n\n return parseByTimeline(attributes, segmentTimeline);\n};\n/**\n * Generates a list of segments using information provided by the SegmentTemplate element\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {Object[]}\n * List of segment objects\n */\n\n\nvar segmentsFromTemplate = function segmentsFromTemplate(attributes, segmentTimeline) {\n var templateValues = {\n RepresentationID: attributes.id,\n Bandwidth: attributes.bandwidth || 0\n };\n var _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {\n sourceURL: '',\n range: ''\n } : _attributes$initializ;\n var mapSegment = urlTypeToSegment({\n baseUrl: attributes.baseUrl,\n source: constructTemplateUrl(initialization.sourceURL, templateValues),\n range: initialization.range\n });\n var segments = parseTemplateInfo(attributes, segmentTimeline);\n return segments.map(function (segment) {\n templateValues.Number = segment.number;\n templateValues.Time = segment.time;\n var uri = constructTemplateUrl(attributes.media || '', templateValues);\n return {\n uri: uri,\n timeline: segment.timeline,\n duration: segment.duration,\n resolvedUri: resolveUrl(attributes.baseUrl || '', uri),\n map: mapSegment,\n number: segment.number\n };\n });\n};\n/**\n * Converts a <SegmentUrl> (of type URLType from the DASH spec 5.3.9.2 Table 14)\n * to an object that matches the output of a segment in videojs/mpd-parser\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object} segmentUrl\n * <SegmentURL> node to translate into a segment object\n * @return {Object} translated segment object\n */\n\n\nvar SegmentURLToSegmentObject = function SegmentURLToSegmentObject(attributes, segmentUrl) {\n var baseUrl = attributes.baseUrl,\n _attributes$initializ = attributes.initialization,\n initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ;\n var initSegment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: initialization.sourceURL,\n range: initialization.range\n });\n var segment = urlTypeToSegment({\n baseUrl: baseUrl,\n source: segmentUrl.media,\n range: segmentUrl.mediaRange\n });\n segment.map = initSegment;\n return segment;\n};\n/**\n * Generates a list of segments using information provided by the SegmentList element\n * SegmentList (DASH SPEC Section 5.3.9.3.2) contains a set of <SegmentURL> nodes. Each\n * node should be translated into segment.\n *\n * @param {Object} attributes\n * Object containing all inherited attributes from parent elements with attribute\n * names as keys\n * @param {Object[]|undefined} segmentTimeline\n * List of objects representing the attributes of each S element contained within\n * the SegmentTimeline element\n * @return {Object.<Array>} list of segments\n */\n\n\nvar segmentsFromList = function segmentsFromList(attributes, segmentTimeline) {\n var duration = attributes.duration,\n _attributes$segmentUr = attributes.segmentUrls,\n segmentUrls = _attributes$segmentUr === void 0 ? [] : _attributes$segmentUr; // Per spec (5.3.9.2.1) no way to determine segment duration OR\n // if both SegmentTimeline and @duration are defined, it is outside of spec.\n\n if (!duration && !segmentTimeline || duration && segmentTimeline) {\n throw new Error(errors.SEGMENT_TIME_UNSPECIFIED);\n }\n\n var segmentUrlMap = segmentUrls.map(function (segmentUrlObject) {\n return SegmentURLToSegmentObject(attributes, segmentUrlObject);\n });\n var segmentTimeInfo;\n\n if (duration) {\n segmentTimeInfo = parseByDuration(attributes);\n }\n\n if (segmentTimeline) {\n segmentTimeInfo = parseByTimeline(attributes, segmentTimeline);\n }\n\n var segments = segmentTimeInfo.map(function (segmentTime, index) {\n if (segmentUrlMap[index]) {\n var segment = segmentUrlMap[index];\n segment.timeline = segmentTime.timeline;\n segment.duration = segmentTime.duration;\n segment.number = segmentTime.number;\n return segment;\n } // Since we're mapping we should get rid of any blank segments (in case\n // the given SegmentTimeline is handling for more elements than we have\n // SegmentURLs for).\n\n }).filter(function (segment) {\n return segment;\n });\n return segments;\n};\n\nvar generateSegments = function generateSegments(_ref) {\n var attributes = _ref.attributes,\n segmentInfo = _ref.segmentInfo;\n var segmentAttributes;\n var segmentsFn;\n\n if (segmentInfo.template) {\n segmentsFn = segmentsFromTemplate;\n segmentAttributes = merge(attributes, segmentInfo.template);\n } else if (segmentInfo.base) {\n segmentsFn = segmentsFromBase;\n segmentAttributes = merge(attributes, segmentInfo.base);\n } else if (segmentInfo.list) {\n segmentsFn = segmentsFromList;\n segmentAttributes = merge(attributes, segmentInfo.list);\n }\n\n var segmentsInfo = {\n attributes: attributes\n };\n\n if (!segmentsFn) {\n return segmentsInfo;\n }\n\n var segments = segmentsFn(segmentAttributes, segmentInfo.timeline); // The @duration attribute will be used to determin the playlist's targetDuration which\n // must be in seconds. Since we've generated the segment list, we no longer need\n // @duration to be in @timescale units, so we can convert it here.\n\n if (segmentAttributes.duration) {\n var _segmentAttributes = segmentAttributes,\n duration = _segmentAttributes.duration,\n _segmentAttributes$ti = _segmentAttributes.timescale,\n timescale = _segmentAttributes$ti === void 0 ? 1 : _segmentAttributes$ti;\n segmentAttributes.duration = duration / timescale;\n } else if (segments.length) {\n // if there is no @duration attribute, use the largest segment duration as\n // as target duration\n segmentAttributes.duration = segments.reduce(function (max, segment) {\n return Math.max(max, Math.ceil(segment.duration));\n }, 0);\n } else {\n segmentAttributes.duration = 0;\n }\n\n segmentsInfo.attributes = segmentAttributes;\n segmentsInfo.segments = segments; // This is a sidx box without actual segment information\n\n if (segmentInfo.base && segmentAttributes.indexRange) {\n segmentsInfo.sidx = segments[0];\n segmentsInfo.segments = [];\n }\n\n return segmentsInfo;\n};\n\nvar toPlaylists = function toPlaylists(representations) {\n return representations.map(generateSegments);\n};\n\nvar findChildren = function findChildren(element, name) {\n return from(element.childNodes).filter(function (_ref) {\n var tagName = _ref.tagName;\n return tagName === name;\n });\n};\n\nvar getContent = function getContent(element) {\n return element.textContent.trim();\n};\n\nvar parseDuration = function parseDuration(str) {\n var SECONDS_IN_YEAR = 365 * 24 * 60 * 60;\n var SECONDS_IN_MONTH = 30 * 24 * 60 * 60;\n var SECONDS_IN_DAY = 24 * 60 * 60;\n var SECONDS_IN_HOUR = 60 * 60;\n var SECONDS_IN_MIN = 60; // P10Y10M10DT10H10M10.1S\n\n var durationRegex = /P(?:(\\d*)Y)?(?:(\\d*)M)?(?:(\\d*)D)?(?:T(?:(\\d*)H)?(?:(\\d*)M)?(?:([\\d.]*)S)?)?/;\n var match = durationRegex.exec(str);\n\n if (!match) {\n return 0;\n }\n\n var _match$slice = match.slice(1),\n year = _match$slice[0],\n month = _match$slice[1],\n day = _match$slice[2],\n hour = _match$slice[3],\n minute = _match$slice[4],\n second = _match$slice[5];\n\n return parseFloat(year || 0) * SECONDS_IN_YEAR + parseFloat(month || 0) * SECONDS_IN_MONTH + parseFloat(day || 0) * SECONDS_IN_DAY + parseFloat(hour || 0) * SECONDS_IN_HOUR + parseFloat(minute || 0) * SECONDS_IN_MIN + parseFloat(second || 0);\n};\n\nvar parseDate = function parseDate(str) {\n // Date format without timezone according to ISO 8601\n // YYY-MM-DDThh:mm:ss.ssssss\n var dateRegex = /^\\d+-\\d+-\\d+T\\d+:\\d+:\\d+(\\.\\d+)?$/; // If the date string does not specifiy a timezone, we must specifiy UTC. This is\n // expressed by ending with 'Z'\n\n if (dateRegex.test(str)) {\n str += 'Z';\n }\n\n return Date.parse(str);\n};\n\nvar parsers = {\n /**\n * Specifies the duration of the entire Media Presentation. Format is a duration string\n * as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n mediaPresentationDuration: function mediaPresentationDuration(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the Segment availability start time for all Segments referred to in this\n * MPD. For a dynamic manifest, it specifies the anchor for the earliest availability\n * time. Format is a date string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The date as seconds from unix epoch\n */\n availabilityStartTime: function availabilityStartTime(value) {\n return parseDate(value) / 1000;\n },\n\n /**\n * Specifies the smallest period between potential changes to the MPD. Format is a\n * duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n minimumUpdatePeriod: function minimumUpdatePeriod(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the duration of the smallest time shifting buffer for any Representation\n * in the MPD. Format is a duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n timeShiftBufferDepth: function timeShiftBufferDepth(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the PeriodStart time of the Period relative to the availabilityStarttime.\n * Format is a duration string as specified in ISO 8601\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The duration in seconds\n */\n start: function start(value) {\n return parseDuration(value);\n },\n\n /**\n * Specifies the width of the visual presentation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed width\n */\n width: function width(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the height of the visual presentation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed height\n */\n height: function height(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the bitrate of the representation\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed bandwidth\n */\n bandwidth: function bandwidth(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the number of the first Media Segment in this Representation in the Period\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed number\n */\n startNumber: function startNumber(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the timescale in units per seconds\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The aprsed timescale\n */\n timescale: function timescale(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the constant approximate Segment duration\n * NOTE: The <Period> element also contains an @duration attribute. This duration\n * specifies the duration of the Period. This attribute is currently not\n * supported by the rest of the parser, however we still check for it to prevent\n * errors.\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed duration\n */\n duration: function duration(value) {\n var parsedValue = parseInt(value, 10);\n\n if (isNaN(parsedValue)) {\n return parseDuration(value);\n }\n\n return parsedValue;\n },\n\n /**\n * Specifies the Segment duration, in units of the value of the @timescale.\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed duration\n */\n d: function d(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the MPD start time, in @timescale units, the first Segment in the series\n * starts relative to the beginning of the Period\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed time\n */\n t: function t(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Specifies the repeat count of the number of following contiguous Segments with the\n * same duration expressed by the value of @d\n *\n * @param {string} value\n * value of attribute as a string\n * @return {number}\n * The parsed number\n */\n r: function r(value) {\n return parseInt(value, 10);\n },\n\n /**\n * Default parser for all other attributes. Acts as a no-op and just returns the value\n * as a string\n *\n * @param {string} value\n * value of attribute as a string\n * @return {string}\n * Unparsed value\n */\n DEFAULT: function DEFAULT(value) {\n return value;\n }\n};\n/**\n * Gets all the attributes and values of the provided node, parses attributes with known\n * types, and returns an object with attribute names mapped to values.\n *\n * @param {Node} el\n * The node to parse attributes from\n * @return {Object}\n * Object with all attributes of el parsed\n */\n\nvar parseAttributes = function parseAttributes(el) {\n if (!(el && el.attributes)) {\n return {};\n }\n\n return from(el.attributes).reduce(function (a, e) {\n var parseFn = parsers[e.name] || parsers.DEFAULT;\n a[e.name] = parseFn(e.value);\n return a;\n }, {});\n};\n\nfunction decodeB64ToUint8Array(b64Text) {\n var decodedString = global_window__WEBPACK_IMPORTED_MODULE_0___default.a.atob(b64Text);\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}\n\nvar keySystemsMap = {\n 'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b': 'org.w3.clearkey',\n 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed': 'com.widevine.alpha',\n 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready',\n 'urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb': 'com.adobe.primetime'\n};\n/**\n * Builds a list of urls that is the product of the reference urls and BaseURL values\n *\n * @param {string[]} referenceUrls\n * List of reference urls to resolve to\n * @param {Node[]} baseUrlElements\n * List of BaseURL nodes from the mpd\n * @return {string[]}\n * List of resolved urls\n */\n\nvar buildBaseUrls = function buildBaseUrls(referenceUrls, baseUrlElements) {\n if (!baseUrlElements.length) {\n return referenceUrls;\n }\n\n return flatten(referenceUrls.map(function (reference) {\n return baseUrlElements.map(function (baseUrlElement) {\n return resolveUrl(reference, getContent(baseUrlElement));\n });\n }));\n};\n/**\n * Contains all Segment information for its containing AdaptationSet\n *\n * @typedef {Object} SegmentInformation\n * @property {Object|undefined} template\n * Contains the attributes for the SegmentTemplate node\n * @property {Object[]|undefined} timeline\n * Contains a list of atrributes for each S node within the SegmentTimeline node\n * @property {Object|undefined} list\n * Contains the attributes for the SegmentList node\n * @property {Object|undefined} base\n * Contains the attributes for the SegmentBase node\n */\n\n/**\n * Returns all available Segment information contained within the AdaptationSet node\n *\n * @param {Node} adaptationSet\n * The AdaptationSet node to get Segment information from\n * @return {SegmentInformation}\n * The Segment information contained within the provided AdaptationSet\n */\n\n\nvar getSegmentInformation = function getSegmentInformation(adaptationSet) {\n var segmentTemplate = findChildren(adaptationSet, 'SegmentTemplate')[0];\n var segmentList = findChildren(adaptationSet, 'SegmentList')[0];\n var segmentUrls = segmentList && findChildren(segmentList, 'SegmentURL').map(function (s) {\n return merge({\n tag: 'SegmentURL'\n }, parseAttributes(s));\n });\n var segmentBase = findChildren(adaptationSet, 'SegmentBase')[0];\n var segmentTimelineParentNode = segmentList || segmentTemplate;\n var segmentTimeline = segmentTimelineParentNode && findChildren(segmentTimelineParentNode, 'SegmentTimeline')[0];\n var segmentInitializationParentNode = segmentList || segmentBase || segmentTemplate;\n var segmentInitialization = segmentInitializationParentNode && findChildren(segmentInitializationParentNode, 'Initialization')[0]; // SegmentTemplate is handled slightly differently, since it can have both\n // @initialization and an <Initialization> node. @initialization can be templated,\n // while the node can have a url and range specified. If the <SegmentTemplate> has\n // both @initialization and an <Initialization> subelement we opt to override with\n // the node, as this interaction is not defined in the spec.\n\n var template = segmentTemplate && parseAttributes(segmentTemplate);\n\n if (template && segmentInitialization) {\n template.initialization = segmentInitialization && parseAttributes(segmentInitialization);\n } else if (template && template.initialization) {\n // If it is @initialization we convert it to an object since this is the format that\n // later functions will rely on for the initialization segment. This is only valid\n // for <SegmentTemplate>\n template.initialization = {\n sourceURL: template.initialization\n };\n }\n\n var segmentInfo = {\n template: template,\n timeline: segmentTimeline && findChildren(segmentTimeline, 'S').map(function (s) {\n return parseAttributes(s);\n }),\n list: segmentList && merge(parseAttributes(segmentList), {\n segmentUrls: segmentUrls,\n initialization: parseAttributes(segmentInitialization)\n }),\n base: segmentBase && merge(parseAttributes(segmentBase), {\n initialization: parseAttributes(segmentInitialization)\n })\n };\n Object.keys(segmentInfo).forEach(function (key) {\n if (!segmentInfo[key]) {\n delete segmentInfo[key];\n }\n });\n return segmentInfo;\n};\n/**\n * Contains Segment information and attributes needed to construct a Playlist object\n * from a Representation\n *\n * @typedef {Object} RepresentationInformation\n * @property {SegmentInformation} segmentInfo\n * Segment information for this Representation\n * @property {Object} attributes\n * Inherited attributes for this Representation\n */\n\n/**\n * Maps a Representation node to an object containing Segment information and attributes\n *\n * @name inheritBaseUrlsCallback\n * @function\n * @param {Node} representation\n * Representation node from the mpd\n * @return {RepresentationInformation}\n * Representation information needed to construct a Playlist object\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping Representation nodes to\n * Segment information and attributes using inherited BaseURL nodes.\n *\n * @param {Object} adaptationSetAttributes\n * Contains attributes inherited by the AdaptationSet\n * @param {string[]} adaptationSetBaseUrls\n * Contains list of resolved base urls inherited by the AdaptationSet\n * @param {SegmentInformation} adaptationSetSegmentInfo\n * Contains Segment information for the AdaptationSet\n * @return {inheritBaseUrlsCallback}\n * Callback map function\n */\n\n\nvar inheritBaseUrls = function inheritBaseUrls(adaptationSetAttributes, adaptationSetBaseUrls, adaptationSetSegmentInfo) {\n return function (representation) {\n var repBaseUrlElements = findChildren(representation, 'BaseURL');\n var repBaseUrls = buildBaseUrls(adaptationSetBaseUrls, repBaseUrlElements);\n var attributes = merge(adaptationSetAttributes, parseAttributes(representation));\n var representationSegmentInfo = getSegmentInformation(representation);\n return repBaseUrls.map(function (baseUrl) {\n return {\n segmentInfo: merge(adaptationSetSegmentInfo, representationSegmentInfo),\n attributes: merge(attributes, {\n baseUrl: baseUrl\n })\n };\n });\n };\n};\n/**\n * Tranforms a series of content protection nodes to\n * an object containing pssh data by key system\n *\n * @param {Node[]} contentProtectionNodes\n * Content protection nodes\n * @return {Object}\n * Object containing pssh data by key system\n */\n\n\nvar generateKeySystemInformation = function generateKeySystemInformation(contentProtectionNodes) {\n return contentProtectionNodes.reduce(function (acc, node) {\n var attributes = parseAttributes(node);\n var keySystem = keySystemsMap[attributes.schemeIdUri];\n\n if (keySystem) {\n acc[keySystem] = {\n attributes: attributes\n };\n var psshNode = findChildren(node, 'cenc:pssh')[0];\n\n if (psshNode) {\n var pssh = getContent(psshNode);\n var psshBuffer = pssh && decodeB64ToUint8Array(pssh);\n acc[keySystem].pssh = psshBuffer;\n }\n }\n\n return acc;\n }, {});\n};\n/**\n * Maps an AdaptationSet node to a list of Representation information objects\n *\n * @name toRepresentationsCallback\n * @function\n * @param {Node} adaptationSet\n * AdaptationSet node from the mpd\n * @return {RepresentationInformation[]}\n * List of objects containing Representaion information\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping AdaptationSet nodes to a list of\n * Representation information objects\n *\n * @param {Object} periodAttributes\n * Contains attributes inherited by the Period\n * @param {string[]} periodBaseUrls\n * Contains list of resolved base urls inherited by the Period\n * @param {string[]} periodSegmentInfo\n * Contains Segment Information at the period level\n * @return {toRepresentationsCallback}\n * Callback map function\n */\n\n\nvar toRepresentations = function toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo) {\n return function (adaptationSet) {\n var adaptationSetAttributes = parseAttributes(adaptationSet);\n var adaptationSetBaseUrls = buildBaseUrls(periodBaseUrls, findChildren(adaptationSet, 'BaseURL'));\n var role = findChildren(adaptationSet, 'Role')[0];\n var roleAttributes = {\n role: parseAttributes(role)\n };\n var attrs = merge(periodAttributes, adaptationSetAttributes, roleAttributes);\n var contentProtection = generateKeySystemInformation(findChildren(adaptationSet, 'ContentProtection'));\n\n if (Object.keys(contentProtection).length) {\n attrs = merge(attrs, {\n contentProtection: contentProtection\n });\n }\n\n var segmentInfo = getSegmentInformation(adaptationSet);\n var representations = findChildren(adaptationSet, 'Representation');\n var adaptationSetSegmentInfo = merge(periodSegmentInfo, segmentInfo);\n return flatten(representations.map(inheritBaseUrls(attrs, adaptationSetBaseUrls, adaptationSetSegmentInfo)));\n };\n};\n/**\n * Maps an Period node to a list of Representation inforamtion objects for all\n * AdaptationSet nodes contained within the Period\n *\n * @name toAdaptationSetsCallback\n * @function\n * @param {Node} period\n * Period node from the mpd\n * @param {number} periodIndex\n * Index of the Period within the mpd\n * @return {RepresentationInformation[]}\n * List of objects containing Representaion information\n */\n\n/**\n * Returns a callback for Array.prototype.map for mapping Period nodes to a list of\n * Representation information objects\n *\n * @param {Object} mpdAttributes\n * Contains attributes inherited by the mpd\n * @param {string[]} mpdBaseUrls\n * Contains list of resolved base urls inherited by the mpd\n * @return {toAdaptationSetsCallback}\n * Callback map function\n */\n\n\nvar toAdaptationSets = function toAdaptationSets(mpdAttributes, mpdBaseUrls) {\n return function (period, index) {\n var periodBaseUrls = buildBaseUrls(mpdBaseUrls, findChildren(period, 'BaseURL'));\n var periodAtt = parseAttributes(period);\n var parsedPeriodId = parseInt(periodAtt.id, 10); // fallback to mapping index if Period@id is not a number\n\n var periodIndex = global_window__WEBPACK_IMPORTED_MODULE_0___default.a.isNaN(parsedPeriodId) ? index : parsedPeriodId;\n var periodAttributes = merge(mpdAttributes, {\n periodIndex: periodIndex\n });\n var adaptationSets = findChildren(period, 'AdaptationSet');\n var periodSegmentInfo = getSegmentInformation(period);\n return flatten(adaptationSets.map(toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo)));\n };\n};\n/**\n * Traverses the mpd xml tree to generate a list of Representation information objects\n * that have inherited attributes from parent nodes\n *\n * @param {Node} mpd\n * The root node of the mpd\n * @param {Object} options\n * Available options for inheritAttributes\n * @param {string} options.manifestUri\n * The uri source of the mpd\n * @param {number} options.NOW\n * Current time per DASH IOP. Default is current time in ms since epoch\n * @param {number} options.clientOffset\n * Client time difference from NOW (in milliseconds)\n * @return {RepresentationInformation[]}\n * List of objects containing Representation information\n */\n\n\nvar inheritAttributes = function inheritAttributes(mpd, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$manifestUri = _options.manifestUri,\n manifestUri = _options$manifestUri === void 0 ? '' : _options$manifestUri,\n _options$NOW = _options.NOW,\n NOW = _options$NOW === void 0 ? Date.now() : _options$NOW,\n _options$clientOffset = _options.clientOffset,\n clientOffset = _options$clientOffset === void 0 ? 0 : _options$clientOffset;\n var periods = findChildren(mpd, 'Period');\n\n if (!periods.length) {\n throw new Error(errors.INVALID_NUMBER_OF_PERIOD);\n }\n\n var mpdAttributes = parseAttributes(mpd);\n var mpdBaseUrls = buildBaseUrls([manifestUri], findChildren(mpd, 'BaseURL'));\n mpdAttributes.sourceDuration = mpdAttributes.mediaPresentationDuration || 0;\n mpdAttributes.NOW = NOW;\n mpdAttributes.clientOffset = clientOffset;\n return flatten(periods.map(toAdaptationSets(mpdAttributes, mpdBaseUrls)));\n};\n\nvar stringToMpdXml = function stringToMpdXml(manifestString) {\n if (manifestString === '') {\n throw new Error(errors.DASH_EMPTY_MANIFEST);\n }\n\n var parser = new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.DOMParser();\n var xml = parser.parseFromString(manifestString, 'application/xml');\n var mpd = xml && xml.documentElement.tagName === 'MPD' ? xml.documentElement : null;\n\n if (!mpd || mpd && mpd.getElementsByTagName('parsererror').length > 0) {\n throw new Error(errors.DASH_INVALID_XML);\n }\n\n return mpd;\n};\n/**\n * Parses the manifest for a UTCTiming node, returning the nodes attributes if found\n *\n * @param {string} mpd\n * XML string of the MPD manifest\n * @return {Object|null}\n * Attributes of UTCTiming node specified in the manifest. Null if none found\n */\n\n\nvar parseUTCTimingScheme = function parseUTCTimingScheme(mpd) {\n var UTCTimingNode = findChildren(mpd, 'UTCTiming')[0];\n\n if (!UTCTimingNode) {\n return null;\n }\n\n var attributes = parseAttributes(UTCTimingNode);\n\n switch (attributes.schemeIdUri) {\n case 'urn:mpeg:dash:utc:http-head:2014':\n case 'urn:mpeg:dash:utc:http-head:2012':\n attributes.method = 'HEAD';\n break;\n\n case 'urn:mpeg:dash:utc:http-xsdate:2014':\n case 'urn:mpeg:dash:utc:http-iso:2014':\n case 'urn:mpeg:dash:utc:http-xsdate:2012':\n case 'urn:mpeg:dash:utc:http-iso:2012':\n attributes.method = 'GET';\n break;\n\n case 'urn:mpeg:dash:utc:direct:2014':\n case 'urn:mpeg:dash:utc:direct:2012':\n attributes.method = 'DIRECT';\n attributes.value = Date.parse(attributes.value);\n break;\n\n case 'urn:mpeg:dash:utc:http-ntp:2014':\n case 'urn:mpeg:dash:utc:ntp:2014':\n case 'urn:mpeg:dash:utc:sntp:2014':\n default:\n throw new Error(errors.UNSUPPORTED_UTC_TIMING_SCHEME);\n }\n\n return attributes;\n};\n\nvar VERSION = version;\n\nvar parse = function parse(manifestString, options) {\n if (options === void 0) {\n options = {};\n }\n\n return toM3u8(toPlaylists(inheritAttributes(stringToMpdXml(manifestString), options)), options.sidxMapping);\n};\n/**\n * Parses the manifest for a UTCTiming node, returning the nodes attributes if found\n *\n * @param {string} manifestString\n * XML string of the MPD manifest\n * @return {Object|null}\n * Attributes of UTCTiming node specified in the manifest. Null if none found\n */\n\n\nvar parseUTCTiming = function parseUTCTiming(manifestString) {\n return parseUTCTimingScheme(stringToMpdXml(manifestString));\n};\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL21wZC1wYXJzZXIvZGlzdC9tcGQtcGFyc2VyLmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tcGQtcGFyc2VyL2Rpc3QvbXBkLXBhcnNlci5lcy5qcz9iOTVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBAbmFtZSBtcGQtcGFyc2VyIEB2ZXJzaW9uIDAuOC4xIEBsaWNlbnNlIEFwYWNoZS0yLjAgKi9cbmltcG9ydCB3aW5kb3ckMSBmcm9tICdnbG9iYWwvd2luZG93JztcblxudmFyIHZlcnNpb24gPSBcIjAuOC4xXCI7XG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9iamVjdHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgb2JqZWN0c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBzb3VyY2UpIHtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoc291cmNlW2tleV0pKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gcmVzdWx0W2tleV0uY29uY2F0KHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocmVzdWx0W2tleV0pICYmIGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn07XG52YXIgdmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvW2tdO1xuICB9KTtcbn07XG5cbnZhciByYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgcmVzdWx0LnB1c2goaSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBmbGF0dGVuID0gZnVuY3Rpb24gZmxhdHRlbihsaXN0cykge1xuICByZXR1cm4gbGlzdHMucmVkdWNlKGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHguY29uY2F0KHkpO1xuICB9LCBbXSk7XG59O1xudmFyIGZyb20gPSBmdW5jdGlvbiBmcm9tKGxpc3QpIHtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQucHVzaChsaXN0W2ldKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIGZpbmRJbmRleGVzID0gZnVuY3Rpb24gZmluZEluZGV4ZXMobCwga2V5KSB7XG4gIHJldHVybiBsLnJlZHVjZShmdW5jdGlvbiAoYSwgZSwgaSkge1xuICAgIGlmIChlW2tleV0pIHtcbiAgICAgIGEucHVzaChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfSwgW10pO1xufTtcblxudmFyIGVycm9ycyA9IHtcbiAgSU5WQUxJRF9OVU1CRVJfT0ZfUEVSSU9EOiAnSU5WQUxJRF9OVU1CRVJfT0ZfUEVSSU9EJyxcbiAgREFTSF9FTVBUWV9NQU5JRkVTVDogJ0RBU0hfRU1QVFlfTUFOSUZFU1QnLFxuICBEQVNIX0lOVkFMSURfWE1MOiAnREFTSF9JTlZBTElEX1hNTCcsXG4gIE5PX0JBU0VfVVJMOiAnTk9fQkFTRV9VUkwnLFxuICBNSVNTSU5HX1NFR01FTlRfSU5GT1JNQVRJT046ICdNSVNTSU5HX1NFR01FTlRfSU5GT1JNQVRJT04nLFxuICBTRUdNRU5UX1RJTUVfVU5TUEVDSUZJRUQ6ICdTRUdNRU5UX1RJTUVfVU5TUEVDSUZJRUQnLFxuICBVTlNVUFBPUlRFRF9VVENfVElNSU5HX1NDSEVNRTogJ1VOU1VQUE9SVEVEX1VUQ19USU1JTkdfU0NIRU1FJ1xufTtcblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZm4sIG1vZHVsZSkge1xuXHRyZXR1cm4gbW9kdWxlID0geyBleHBvcnRzOiB7fSB9LCBmbihtb2R1bGUsIG1vZHVsZS5leHBvcnRzKSwgbW9kdWxlLmV4cG9ydHM7XG59XG5cbnZhciB1cmxUb29sa2l0ID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuLy8gc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxODA4XG5cbi8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbihmdW5jdGlvbihyb290KSB7IFxuLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICB2YXIgVVJMX1JFR0VYID0gL14oKD86W2EtekEtWjAtOStcXC0uXSs6KT8pKFxcL1xcL1teXFwvPyNdKik/KCg/OlteXFwvXFw/I10qXFwvKSouKj8pPz8oOy4qPyk/KFxcPy4qPyk/KCMuKj8pPyQvO1xuICB2YXIgRklSU1RfU0VHTUVOVF9SRUdFWCA9IC9eKFteXFwvPyNdKikoLiopJC87XG4gIHZhciBTTEFTSF9ET1RfUkVHRVggPSAvKD86XFwvfF4pXFwuKD89XFwvKS9nO1xuICB2YXIgU0xBU0hfRE9UX0RPVF9SRUdFWCA9IC8oPzpcXC98XilcXC5cXC5cXC8oPyFcXC5cXC5cXC8pLio/KD89XFwvKS9nO1xuXG4gIHZhciBVUkxUb29sa2l0ID0geyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAvLyBJZiBvcHRzLmFsd2F5c05vcm1hbGl6ZSBpcyB0cnVlIHRoZW4gdGhlIHBhdGggd2lsbCBhbHdheXMgYmUgbm9ybWFsaXplZCBldmVuIHdoZW4gaXQgc3RhcnRzIHdpdGggLyBvciAvL1xuICAgIC8vIEUuZ1xuICAgIC8vIFdpdGggb3B0cy5hbHdheXNOb3JtYWxpemUgPSBmYWxzZSAoZGVmYXVsdCwgc3BlYyBjb21wbGlhbnQpXG4gICAgLy8gaHR0cDovL2EuY29tL2IvY2QgKyAvZS9mLy4uL2cgPT4gaHR0cDovL2EuY29tL2UvZi8uLi9nXG4gICAgLy8gV2l0aCBvcHRzLmFsd2F5c05vcm1hbGl6ZSA9IHRydWUgKG5vdCBzcGVjIGNvbXBsaWFudClcbiAgICAvLyBodHRwOi8vYS5jb20vYi9jZCArIC9lL2YvLi4vZyA9PiBodHRwOi8vYS5jb20vZS9nXG4gICAgYnVpbGRBYnNvbHV0ZVVSTDogZnVuY3Rpb24oYmFzZVVSTCwgcmVsYXRpdmVVUkwsIG9wdHMpIHtcbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgLy8gcmVtb3ZlIGFueSByZW1haW5pbmcgc3BhY2UgYW5kIENSTEZcbiAgICAgIGJhc2VVUkwgPSBiYXNlVVJMLnRyaW0oKTtcbiAgICAgIHJlbGF0aXZlVVJMID0gcmVsYXRpdmVVUkwudHJpbSgpO1xuICAgICAgaWYgKCFyZWxhdGl2ZVVSTCkge1xuICAgICAgICAvLyAyYSkgSWYgdGhlIGVtYmVkZGVkIFVSTCBpcyBlbnRpcmVseSBlbXB0eSwgaXQgaW5oZXJpdHMgdGhlXG4gICAgICAgIC8vIGVudGlyZSBiYXNlIFVSTCAoaS5lLiwgaXMgc2V0IGVxdWFsIHRvIHRoZSBiYXNlIFVSTClcbiAgICAgICAgLy8gYW5kIHdlIGFyZSBkb25lLlxuICAgICAgICBpZiAoIW9wdHMuYWx3YXlzTm9ybWFsaXplKSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VVUkw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJhc2VQYXJ0c0Zvck5vcm1hbGlzZSA9IFVSTFRvb2xraXQucGFyc2VVUkwoYmFzZVVSTCk7XG4gICAgICAgIGlmICghYmFzZVBhcnRzRm9yTm9ybWFsaXNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgYmFzZSBVUkwuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYmFzZVBhcnRzRm9yTm9ybWFsaXNlLnBhdGggPSBVUkxUb29sa2l0Lm5vcm1hbGl6ZVBhdGgoYmFzZVBhcnRzRm9yTm9ybWFsaXNlLnBhdGgpO1xuICAgICAgICByZXR1cm4gVVJMVG9vbGtpdC5idWlsZFVSTEZyb21QYXJ0cyhiYXNlUGFydHNGb3JOb3JtYWxpc2UpO1xuICAgICAgfVxuICAgICAgdmFyIHJlbGF0aXZlUGFydHMgPSBVUkxUb29sa2l0LnBhcnNlVVJMKHJlbGF0aXZlVVJMKTtcbiAgICAgIGlmICghcmVsYXRpdmVQYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSByZWxhdGl2ZSBVUkwuJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVsYXRpdmVQYXJ0cy5zY2hlbWUpIHtcbiAgICAgICAgLy8gMmIpIElmIHRoZSBlbWJlZGRlZCBVUkwgc3RhcnRzIHdpdGggYSBzY2hlbWUgbmFtZSwgaXQgaXNcbiAgICAgICAgLy8gaW50ZXJwcmV0ZWQgYXMgYW4gYWJzb2x1dGUgVVJMIGFuZCB3ZSBhcmUgZG9uZS5cbiAgICAgICAgaWYgKCFvcHRzLmFsd2F5c05vcm1hbGl6ZSkge1xuICAgICAgICAgIHJldHVybiByZWxhdGl2ZVVSTDtcbiAgICAgICAgfVxuICAgICAgICByZWxhdGl2ZVBhcnRzLnBhdGggPSBVUkxUb29sa2l0Lm5vcm1hbGl6ZVBhdGgocmVsYXRpdmVQYXJ0cy5wYXRoKTtcbiAgICAgICAgcmV0dXJuIFVSTFRvb2xraXQuYnVpbGRVUkxGcm9tUGFydHMocmVsYXRpdmVQYXJ0cyk7XG4gICAgICB9XG4gICAgICB2YXIgYmFzZVBhcnRzID0gVVJMVG9vbGtpdC5wYXJzZVVSTChiYXNlVVJMKTtcbiAgICAgIGlmICghYmFzZVBhcnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGJhc2UgVVJMLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFiYXNlUGFydHMubmV0TG9jICYmIGJhc2VQYXJ0cy5wYXRoICYmIGJhc2VQYXJ0cy5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgICAgLy8gSWYgbmV0TG9jIG1pc3NpbmcgYW5kIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgYXNzdW1lIGV2ZXJ0aGluZyBiZWZvcmUgdGhlIGZpcnN0ICcvJyBpcyB0aGUgbmV0TG9jXG4gICAgICAgIC8vIFRoaXMgY2F1c2VzICdleGFtcGxlLmNvbS9hJyB0byBiZSBoYW5kbGVkIGFzICcvL2V4YW1wbGUuY29tL2EnIGluc3RlYWQgb2YgJy9leGFtcGxlLmNvbS9hJ1xuICAgICAgICB2YXIgcGF0aFBhcnRzID0gRklSU1RfU0VHTUVOVF9SRUdFWC5leGVjKGJhc2VQYXJ0cy5wYXRoKTtcbiAgICAgICAgYmFzZVBhcnRzLm5ldExvYyA9IHBhdGhQYXJ0c1sxXTtcbiAgICAgICAgYmFzZVBhcnRzLnBhdGggPSBwYXRoUGFydHNbMl07XG4gICAgICB9XG4gICAgICBpZiAoYmFzZVBhcnRzLm5ldExvYyAmJiAhYmFzZVBhcnRzLnBhdGgpIHtcbiAgICAgICAgYmFzZVBhcnRzLnBhdGggPSAnLyc7XG4gICAgICB9XG4gICAgICB2YXIgYnVpbHRQYXJ0cyA9IHtcbiAgICAgICAgLy8gMmMpIE90aGVyd2lzZSwgdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgc2NoZW1lIG9mXG4gICAgICAgIC8vIHRoZSBiYXNlIFVSTC5cbiAgICAgICAgc2NoZW1lOiBiYXNlUGFydHMuc2NoZW1lLFxuICAgICAgICBuZXRMb2M6IHJlbGF0aXZlUGFydHMubmV0TG9jLFxuICAgICAgICBwYXRoOiBudWxsLFxuICAgICAgICBwYXJhbXM6IHJlbGF0aXZlUGFydHMucGFyYW1zLFxuICAgICAgICBxdWVyeTogcmVsYXRpdmVQYXJ0cy5xdWVyeSxcbiAgICAgICAgZnJhZ21lbnQ6IHJlbGF0aXZlUGFydHMuZnJhZ21lbnRcbiAgICAgIH07XG4gICAgICBpZiAoIXJlbGF0aXZlUGFydHMubmV0TG9jKSB7XG4gICAgICAgIC8vIDMpIElmIHRoZSBlbWJlZGRlZCBVUkwncyA8bmV0X2xvYz4gaXMgbm9uLWVtcHR5LCB3ZSBza2lwIHRvXG4gICAgICAgIC8vIFN0ZXAgNy4gIE90aGVyd2lzZSwgdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgPG5ldF9sb2M+XG4gICAgICAgIC8vIChpZiBhbnkpIG9mIHRoZSBiYXNlIFVSTC5cbiAgICAgICAgYnVpbHRQYXJ0cy5uZXRMb2MgPSBiYXNlUGFydHMubmV0TG9jO1xuICAgICAgICAvLyA0KSBJZiB0aGUgZW1iZWRkZWQgVVJMIHBhdGggaXMgcHJlY2VkZWQgYnkgYSBzbGFzaCBcIi9cIiwgdGhlXG4gICAgICAgIC8vIHBhdGggaXMgbm90IHJlbGF0aXZlIGFuZCB3ZSBza2lwIHRvIFN0ZXAgNy5cbiAgICAgICAgaWYgKHJlbGF0aXZlUGFydHMucGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhcnRzLnBhdGgpIHtcbiAgICAgICAgICAgIC8vIDUpIElmIHRoZSBlbWJlZGRlZCBVUkwgcGF0aCBpcyBlbXB0eSAoYW5kIG5vdCBwcmVjZWRlZCBieSBhXG4gICAgICAgICAgICAvLyBzbGFzaCksIHRoZW4gdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgYmFzZSBVUkwgcGF0aFxuICAgICAgICAgICAgYnVpbHRQYXJ0cy5wYXRoID0gYmFzZVBhcnRzLnBhdGg7XG4gICAgICAgICAgICAvLyA1YSkgaWYgdGhlIGVtYmVkZGVkIFVSTCdzIDxwYXJhbXM+IGlzIG5vbi1lbXB0eSwgd2Ugc2tpcCB0b1xuICAgICAgICAgICAgLy8gc3RlcCA3OyBvdGhlcndpc2UsIGl0IGluaGVyaXRzIHRoZSA8cGFyYW1zPiBvZiB0aGUgYmFzZVxuICAgICAgICAgICAgLy8gVVJMIChpZiBhbnkpIGFuZFxuICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhcnRzLnBhcmFtcykge1xuICAgICAgICAgICAgICBidWlsdFBhcnRzLnBhcmFtcyA9IGJhc2VQYXJ0cy5wYXJhbXM7XG4gICAgICAgICAgICAgIC8vIDViKSBpZiB0aGUgZW1iZWRkZWQgVVJMJ3MgPHF1ZXJ5PiBpcyBub24tZW1wdHksIHdlIHNraXAgdG9cbiAgICAgICAgICAgICAgLy8gc3RlcCA3OyBvdGhlcndpc2UsIGl0IGluaGVyaXRzIHRoZSA8cXVlcnk+IG9mIHRoZSBiYXNlXG4gICAgICAgICAgICAgIC8vIFVSTCAoaWYgYW55KSBhbmQgd2Ugc2tpcCB0byBzdGVwIDcuXG4gICAgICAgICAgICAgIGlmICghcmVsYXRpdmVQYXJ0cy5xdWVyeSkge1xuICAgICAgICAgICAgICAgIGJ1aWx0UGFydHMucXVlcnkgPSBiYXNlUGFydHMucXVlcnk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gNikgVGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgYmFzZSBVUkwncyBwYXRoIChhbnl0aGluZ1xuICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSByaWdodG1vc3Qgc2xhc2ggXCIvXCIsIG9yIHRoZSBlbnRpcmUgcGF0aCBpZiBub1xuICAgICAgICAgICAgLy8gc2xhc2ggaXMgcHJlc2VudCkgaXMgcmVtb3ZlZCBhbmQgdGhlIGVtYmVkZGVkIFVSTCdzIHBhdGggaXNcbiAgICAgICAgICAgIC8vIGFwcGVuZGVkIGluIGl0cyBwbGFjZS5cbiAgICAgICAgICAgIHZhciBiYXNlVVJMUGF0aCA9IGJhc2VQYXJ0cy5wYXRoO1xuICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBiYXNlVVJMUGF0aC5zdWJzdHJpbmcoMCwgYmFzZVVSTFBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmVQYXJ0cy5wYXRoO1xuICAgICAgICAgICAgYnVpbHRQYXJ0cy5wYXRoID0gVVJMVG9vbGtpdC5ub3JtYWxpemVQYXRoKG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJ1aWx0UGFydHMucGF0aCA9PT0gbnVsbCkge1xuICAgICAgICBidWlsdFBhcnRzLnBhdGggPSBvcHRzLmFsd2F5c05vcm1hbGl6ZSA/IFVSTFRvb2xraXQubm9ybWFsaXplUGF0aChyZWxhdGl2ZVBhcnRzLnBhdGgpIDogcmVsYXRpdmVQYXJ0cy5wYXRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFVSTFRvb2xraXQuYnVpbGRVUkxGcm9tUGFydHMoYnVpbHRQYXJ0cyk7XG4gICAgfSxcbiAgICBwYXJzZVVSTDogZnVuY3Rpb24odXJsKSB7XG4gICAgICB2YXIgcGFydHMgPSBVUkxfUkVHRVguZXhlYyh1cmwpO1xuICAgICAgaWYgKCFwYXJ0cykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZTogcGFydHNbMV0gfHwgJycsXG4gICAgICAgIG5ldExvYzogcGFydHNbMl0gfHwgJycsXG4gICAgICAgIHBhdGg6IHBhcnRzWzNdIHx8ICcnLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdIHx8ICcnLFxuICAgICAgICBxdWVyeTogcGFydHNbNV0gfHwgJycsXG4gICAgICAgIGZyYWdtZW50OiBwYXJ0c1s2XSB8fCAnJ1xuICAgICAgfTtcbiAgICB9LFxuICAgIG5vcm1hbGl6ZVBhdGg6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmVcbiAgICAgIC8vIHRoZW4gYXBwbGllZCwgaW4gb3JkZXIsIHRvIHRoZSBuZXcgcGF0aDpcbiAgICAgIC8vIDZhKSBBbGwgb2NjdXJyZW5jZXMgb2YgXCIuL1wiLCB3aGVyZSBcIi5cIiBpcyBhIGNvbXBsZXRlIHBhdGhcbiAgICAgIC8vIHNlZ21lbnQsIGFyZSByZW1vdmVkLlxuICAgICAgLy8gNmIpIElmIHRoZSBwYXRoIGVuZHMgd2l0aCBcIi5cIiBhcyBhIGNvbXBsZXRlIHBhdGggc2VnbWVudCxcbiAgICAgIC8vIHRoYXQgXCIuXCIgaXMgcmVtb3ZlZC5cbiAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykucmVwbGFjZShTTEFTSF9ET1RfUkVHRVgsICcnKTtcbiAgICAgIC8vIDZjKSBBbGwgb2NjdXJyZW5jZXMgb2YgXCI8c2VnbWVudD4vLi4vXCIsIHdoZXJlIDxzZWdtZW50PiBpcyBhXG4gICAgICAvLyBjb21wbGV0ZSBwYXRoIHNlZ21lbnQgbm90IGVxdWFsIHRvIFwiLi5cIiwgYXJlIHJlbW92ZWQuXG4gICAgICAvLyBSZW1vdmFsIG9mIHRoZXNlIHBhdGggc2VnbWVudHMgaXMgcGVyZm9ybWVkIGl0ZXJhdGl2ZWx5LFxuICAgICAgLy8gcmVtb3ZpbmcgdGhlIGxlZnRtb3N0IG1hdGNoaW5nIHBhdHRlcm4gb24gZWFjaCBpdGVyYXRpb24sXG4gICAgICAvLyB1bnRpbCBubyBtYXRjaGluZyBwYXR0ZXJuIHJlbWFpbnMuXG4gICAgICAvLyA2ZCkgSWYgdGhlIHBhdGggZW5kcyB3aXRoIFwiPHNlZ21lbnQ+Ly4uXCIsIHdoZXJlIDxzZWdtZW50PiBpcyBhXG4gICAgICAvLyBjb21wbGV0ZSBwYXRoIHNlZ21lbnQgbm90IGVxdWFsIHRvIFwiLi5cIiwgdGhhdFxuICAgICAgLy8gXCI8c2VnbWVudD4vLi5cIiBpcyByZW1vdmVkLlxuICAgICAgd2hpbGUgKHBhdGgubGVuZ3RoICE9PSAocGF0aCA9IHBhdGgucmVwbGFjZShTTEFTSF9ET1RfRE9UX1JFR0VYLCAnJykpLmxlbmd0aCkge30gLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICByZXR1cm4gcGF0aC5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgIH0sXG4gICAgYnVpbGRVUkxGcm9tUGFydHM6IGZ1bmN0aW9uKHBhcnRzKSB7XG4gICAgICByZXR1cm4gcGFydHMuc2NoZW1lICsgcGFydHMubmV0TG9jICsgcGFydHMucGF0aCArIHBhcnRzLnBhcmFtcyArIHBhcnRzLnF1ZXJ5ICsgcGFydHMuZnJhZ21lbnQ7XG4gICAgfVxuICB9O1xuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIG1vZHVsZS5leHBvcnRzID0gVVJMVG9vbGtpdDtcbn0pKGNvbW1vbmpzR2xvYmFsKTtcbi8qIGpzaGludCBpZ25vcmU6ZW5kICovXG59KTtcblxudmFyIHJlc29sdmVVcmwgPSBmdW5jdGlvbiByZXNvbHZlVXJsKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIHJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBuZWVkIHRvIHJlc29sdmVcbiAgaWYgKC9eW2Etel0rOi9pLnRlc3QocmVsYXRpdmVVcmwpKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlVXJsO1xuICB9IC8vIGlmIHRoZSBiYXNlIFVSTCBpcyByZWxhdGl2ZSB0aGVuIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCBsb2NhdGlvblxuXG5cbiAgaWYgKCEvXFwvXFwvL2kudGVzdChiYXNlVXJsKSkge1xuICAgIGJhc2VVcmwgPSB1cmxUb29sa2l0LmJ1aWxkQWJzb2x1dGVVUkwod2luZG93JDEubG9jYXRpb24uaHJlZiwgYmFzZVVybCk7XG4gIH1cblxuICByZXR1cm4gdXJsVG9vbGtpdC5idWlsZEFic29sdXRlVVJMKGJhc2VVcmwsIHJlbGF0aXZlVXJsKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2luZ2xlVXJpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJpIC0gcmVsYXRpdmUgbG9jYXRpb24gb2Ygc2VnbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlc29sdmVkVXJpIC0gcmVzb2x2ZWQgbG9jYXRpb24gb2Ygc2VnbWVudFxuICogQHByb3BlcnR5IHtPYmplY3R9IGJ5dGVyYW5nZSAtIE9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIGhvdyB0byBtYWtlIGJ5dGUgcmFuZ2VcbiAqICAgcmVxdWVzdHMgZm9sbG93aW5nIGJ5dGUtcmFuZ2Utc3BlYyBwZXIgUkZDMjYxNi5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBieXRlcmFuZ2UubGVuZ3RoIC0gbGVuZ3RoIG9mIHJhbmdlIHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBieXRlcmFuZ2Uub2Zmc2V0IC0gYnl0ZSBvZmZzZXQgb2YgcmFuZ2UgcmVxdWVzdFxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQuaHRtbCNzZWMxNC4zNS4xXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFVSTFR5cGUgbm9kZSAoNS4zLjkuMi4zIFRhYmxlIDEzKSB0byBhIHNlZ21lbnQgb2JqZWN0XG4gKiB0aGF0IGNvbmZvcm1zIHRvIGhvdyBtM3U4LXBhcnNlciBpcyBzdHJ1Y3R1cmVkXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy9tM3U4LXBhcnNlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVXJsIC0gYmFzZVVybCBwcm92aWRlZCBieSA8QmFzZVVybD4gbm9kZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBzb3VyY2UgdXJsIGZvciBzZWdtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2UgLSBvcHRpb25hbCByYW5nZSB1c2VkIGZvciByYW5nZSBjYWxscyxcbiAqICAgZm9sbG93cyAgUkZDIDI2MTYsIENsYXVzZSAxNC4zNS4xXG4gKiBAcmV0dXJuIHtTaW5nbGVVcml9IGZ1bGwgc2VnbWVudCBpbmZvcm1hdGlvbiB0cmFuc2Zvcm1lZCBpbnRvIGEgZm9ybWF0IHNpbWlsYXJcbiAqICAgdG8gbTN1OC1wYXJzZXJcbiAqL1xuXG52YXIgdXJsVHlwZVRvU2VnbWVudCA9IGZ1bmN0aW9uIHVybFR5cGVUb1NlZ21lbnQoX3JlZikge1xuICB2YXIgX3JlZiRiYXNlVXJsID0gX3JlZi5iYXNlVXJsLFxuICAgICAgYmFzZVVybCA9IF9yZWYkYmFzZVVybCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJGJhc2VVcmwsXG4gICAgICBfcmVmJHNvdXJjZSA9IF9yZWYuc291cmNlLFxuICAgICAgc291cmNlID0gX3JlZiRzb3VyY2UgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRzb3VyY2UsXG4gICAgICBfcmVmJHJhbmdlID0gX3JlZi5yYW5nZSxcbiAgICAgIHJhbmdlID0gX3JlZiRyYW5nZSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHJhbmdlLFxuICAgICAgX3JlZiRpbmRleFJhbmdlID0gX3JlZi5pbmRleFJhbmdlLFxuICAgICAgaW5kZXhSYW5nZSA9IF9yZWYkaW5kZXhSYW5nZSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJGluZGV4UmFuZ2U7XG4gIHZhciBzZWdtZW50ID0ge1xuICAgIHVyaTogc291cmNlLFxuICAgIHJlc29sdmVkVXJpOiByZXNvbHZlVXJsKGJhc2VVcmwgfHwgJycsIHNvdXJjZSlcbiAgfTtcblxuICBpZiAocmFuZ2UgfHwgaW5kZXhSYW5nZSkge1xuICAgIHZhciByYW5nZVN0ciA9IHJhbmdlID8gcmFuZ2UgOiBpbmRleFJhbmdlO1xuICAgIHZhciByYW5nZXMgPSByYW5nZVN0ci5zcGxpdCgnLScpO1xuICAgIHZhciBzdGFydFJhbmdlID0gcGFyc2VJbnQocmFuZ2VzWzBdLCAxMCk7XG4gICAgdmFyIGVuZFJhbmdlID0gcGFyc2VJbnQocmFuZ2VzWzFdLCAxMCk7IC8vIGJ5dGVyYW5nZSBzaG91bGQgYmUgaW5jbHVzaXZlIGFjY29yZGluZyB0b1xuICAgIC8vIFJGQyAyNjE2LCBDbGF1c2UgMTQuMzUuMVxuXG4gICAgc2VnbWVudC5ieXRlcmFuZ2UgPSB7XG4gICAgICBsZW5ndGg6IGVuZFJhbmdlIC0gc3RhcnRSYW5nZSArIDEsXG4gICAgICBvZmZzZXQ6IHN0YXJ0UmFuZ2VcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnQ7XG59O1xudmFyIGJ5dGVSYW5nZVRvU3RyaW5nID0gZnVuY3Rpb24gYnl0ZVJhbmdlVG9TdHJpbmcoYnl0ZXJhbmdlKSB7XG4gIC8vIGBlbmRSYW5nZWAgaXMgb25lIGxlc3MgdGhhbiBgb2Zmc2V0ICsgbGVuZ3RoYCBiZWNhdXNlIHRoZSBIVFRQIHJhbmdlXG4gIC8vIGhlYWRlciB1c2VzIGluY2x1c2l2ZSByYW5nZXNcbiAgdmFyIGVuZFJhbmdlID0gYnl0ZXJhbmdlLm9mZnNldCArIGJ5dGVyYW5nZS5sZW5ndGggLSAxO1xuICByZXR1cm4gYnl0ZXJhbmdlLm9mZnNldCArIFwiLVwiICsgZW5kUmFuZ2U7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgdGhlIHJhbmdlIG9mIGF2YWlsYWJsZSBzZWdtZW50cyBpbiBzdGF0aWMgYW5kIGR5bmFtaWNcbiAqIG1hbmlmZXN0cy5cbiAqL1xuXG52YXIgc2VnbWVudFJhbmdlID0ge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgZW50aXJlIHJhbmdlIG9mIGF2YWlsYWJsZSBzZWdtZW50cyBmb3IgYSBzdGF0aWMgTVBEXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gICAqICAgICAgICBJbmhlcml0aWVkIE1QRCBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm4ge3sgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgfX1cbiAgICogICAgICAgICBUaGUgc3RhcnQgYW5kIGVuZCBudW1iZXJzIGZvciBhdmFpbGFibGUgc2VnbWVudHNcbiAgICovXG4gIHN0YXRpYzogZnVuY3Rpb24gX3N0YXRpYyhhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIGR1cmF0aW9uID0gYXR0cmlidXRlcy5kdXJhdGlvbixcbiAgICAgICAgX2F0dHJpYnV0ZXMkdGltZXNjYWxlID0gYXR0cmlidXRlcy50aW1lc2NhbGUsXG4gICAgICAgIHRpbWVzY2FsZSA9IF9hdHRyaWJ1dGVzJHRpbWVzY2FsZSA9PT0gdm9pZCAwID8gMSA6IF9hdHRyaWJ1dGVzJHRpbWVzY2FsZSxcbiAgICAgICAgc291cmNlRHVyYXRpb24gPSBhdHRyaWJ1dGVzLnNvdXJjZUR1cmF0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogMCxcbiAgICAgIGVuZDogTWF0aC5jZWlsKHNvdXJjZUR1cmF0aW9uIC8gKGR1cmF0aW9uIC8gdGltZXNjYWxlKSlcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxpdmUgd2luZG93IHJhbmdlIG9mIGF2YWlsYWJsZSBzZWdtZW50cyBmb3IgYSBkeW5hbWljIE1QRFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICAgKiAgICAgICAgSW5oZXJpdGllZCBNUEQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHt7IHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyIH19XG4gICAqICAgICAgICAgVGhlIHN0YXJ0IGFuZCBlbmQgbnVtYmVycyBmb3IgYXZhaWxhYmxlIHNlZ21lbnRzXG4gICAqL1xuICBkeW5hbWljOiBmdW5jdGlvbiBkeW5hbWljKGF0dHJpYnV0ZXMpIHtcbiAgICB2YXIgTk9XID0gYXR0cmlidXRlcy5OT1csXG4gICAgICAgIGNsaWVudE9mZnNldCA9IGF0dHJpYnV0ZXMuY2xpZW50T2Zmc2V0LFxuICAgICAgICBhdmFpbGFiaWxpdHlTdGFydFRpbWUgPSBhdHRyaWJ1dGVzLmF2YWlsYWJpbGl0eVN0YXJ0VGltZSxcbiAgICAgICAgX2F0dHJpYnV0ZXMkdGltZXNjYWxlMiA9IGF0dHJpYnV0ZXMudGltZXNjYWxlLFxuICAgICAgICB0aW1lc2NhbGUgPSBfYXR0cmlidXRlcyR0aW1lc2NhbGUyID09PSB2b2lkIDAgPyAxIDogX2F0dHJpYnV0ZXMkdGltZXNjYWxlMixcbiAgICAgICAgZHVyYXRpb24gPSBhdHRyaWJ1dGVzLmR1cmF0aW9uLFxuICAgICAgICBfYXR0cmlidXRlcyRzdGFydCA9IGF0dHJpYnV0ZXMuc3RhcnQsXG4gICAgICAgIHN0YXJ0ID0gX2F0dHJpYnV0ZXMkc3RhcnQgPT09IHZvaWQgMCA/IDAgOiBfYXR0cmlidXRlcyRzdGFydCxcbiAgICAgICAgX2F0dHJpYnV0ZXMkbWluaW11bVVwID0gYXR0cmlidXRlcy5taW5pbXVtVXBkYXRlUGVyaW9kLFxuICAgICAgICBtaW5pbXVtVXBkYXRlUGVyaW9kID0gX2F0dHJpYnV0ZXMkbWluaW11bVVwID09PSB2b2lkIDAgPyAwIDogX2F0dHJpYnV0ZXMkbWluaW11bVVwLFxuICAgICAgICBfYXR0cmlidXRlcyR0aW1lU2hpZnQgPSBhdHRyaWJ1dGVzLnRpbWVTaGlmdEJ1ZmZlckRlcHRoLFxuICAgICAgICB0aW1lU2hpZnRCdWZmZXJEZXB0aCA9IF9hdHRyaWJ1dGVzJHRpbWVTaGlmdCA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfYXR0cmlidXRlcyR0aW1lU2hpZnQ7XG4gICAgdmFyIG5vdyA9IChOT1cgKyBjbGllbnRPZmZzZXQpIC8gMTAwMDtcbiAgICB2YXIgcGVyaW9kU3RhcnRXQyA9IGF2YWlsYWJpbGl0eVN0YXJ0VGltZSArIHN0YXJ0O1xuICAgIHZhciBwZXJpb2RFbmRXQyA9IG5vdyArIG1pbmltdW1VcGRhdGVQZXJpb2Q7XG4gICAgdmFyIHBlcmlvZER1cmF0aW9uID0gcGVyaW9kRW5kV0MgLSBwZXJpb2RTdGFydFdDO1xuICAgIHZhciBzZWdtZW50Q291bnQgPSBNYXRoLmNlaWwocGVyaW9kRHVyYXRpb24gKiB0aW1lc2NhbGUgLyBkdXJhdGlvbik7XG4gICAgdmFyIGF2YWlsYWJsZVN0YXJ0ID0gTWF0aC5mbG9vcigobm93IC0gcGVyaW9kU3RhcnRXQyAtIHRpbWVTaGlmdEJ1ZmZlckRlcHRoKSAqIHRpbWVzY2FsZSAvIGR1cmF0aW9uKTtcbiAgICB2YXIgYXZhaWxhYmxlRW5kID0gTWF0aC5mbG9vcigobm93IC0gcGVyaW9kU3RhcnRXQykgKiB0aW1lc2NhbGUgLyBkdXJhdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBNYXRoLm1heCgwLCBhdmFpbGFibGVTdGFydCksXG4gICAgICBlbmQ6IE1hdGgubWluKHNlZ21lbnRDb3VudCwgYXZhaWxhYmxlRW5kKVxuICAgIH07XG4gIH1cbn07XG4vKipcbiAqIE1hcHMgYSByYW5nZSBvZiBudW1iZXJzIHRvIG9iamVjdHMgd2l0aCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHNlZ21lbnQgbGlzdFxuICpcbiAqIEBuYW1lIHRvU2VnbWVudHNDYWxsYmFja1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyXG4gKiAgICAgICAgTnVtYmVyIG9mIHRoZSBzZWdtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqICAgICAgICBJbmRleCBvZiB0aGUgbnVtYmVyIGluIHRoZSByYW5nZSBsaXN0XG4gKiBAcmV0dXJuIHt7IG51bWJlcjogTnVtYmVyLCBkdXJhdGlvbjogTnVtYmVyLCB0aW1lbGluZTogTnVtYmVyLCB0aW1lOiBOdW1iZXIgfX1cbiAqICAgICAgICAgT2JqZWN0IHdpdGggc2VnbWVudCB0aW1pbmcgYW5kIGR1cmF0aW9uIGluZm9cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBjYWxsYmFjayBmb3IgQXJyYXkucHJvdG90eXBlLm1hcCBmb3IgbWFwcGluZyBhIHJhbmdlIG9mIG51bWJlcnMgdG9cbiAqIGluZm9ybWF0aW9uIG5lZWRlZCB0byBidWlsZCB0aGUgc2VnbWVudCBsaXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiAgICAgICAgSW5oZXJpdGVkIE1QRCBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHt0b1NlZ21lbnRzQ2FsbGJhY2t9XG4gKiAgICAgICAgIENhbGxiYWNrIG1hcCBmdW5jdGlvblxuICovXG5cbnZhciB0b1NlZ21lbnRzID0gZnVuY3Rpb24gdG9TZWdtZW50cyhhdHRyaWJ1dGVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCBpbmRleCkge1xuICAgIHZhciBkdXJhdGlvbiA9IGF0dHJpYnV0ZXMuZHVyYXRpb24sXG4gICAgICAgIF9hdHRyaWJ1dGVzJHRpbWVzY2FsZTMgPSBhdHRyaWJ1dGVzLnRpbWVzY2FsZSxcbiAgICAgICAgdGltZXNjYWxlID0gX2F0dHJpYnV0ZXMkdGltZXNjYWxlMyA9PT0gdm9pZCAwID8gMSA6IF9hdHRyaWJ1dGVzJHRpbWVzY2FsZTMsXG4gICAgICAgIHBlcmlvZEluZGV4ID0gYXR0cmlidXRlcy5wZXJpb2RJbmRleCxcbiAgICAgICAgX2F0dHJpYnV0ZXMkc3RhcnROdW1iID0gYXR0cmlidXRlcy5zdGFydE51bWJlcixcbiAgICAgICAgc3RhcnROdW1iZXIgPSBfYXR0cmlidXRlcyRzdGFydE51bWIgPT09IHZvaWQgMCA/IDEgOiBfYXR0cmlidXRlcyRzdGFydE51bWI7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bWJlcjogc3RhcnROdW1iZXIgKyBudW1iZXIsXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gLyB0aW1lc2NhbGUsXG4gICAgICB0aW1lbGluZTogcGVyaW9kSW5kZXgsXG4gICAgICB0aW1lOiBpbmRleCAqIGR1cmF0aW9uXG4gICAgfTtcbiAgfTtcbn07XG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBzZWdtZW50IHRpbWluZyBhbmQgZHVyYXRpb24gaW5mbyB1c2VkIGZvclxuICogYnVpbGRpbmcgdGhlIGxpc3Qgb2Ygc2VnbWVudHMuIFRoaXMgdXNlcyB0aGUgQGR1cmF0aW9uIGF0dHJpYnV0ZSBzcGVjaWZpZWRcbiAqIGluIHRoZSBNUEQgbWFuaWZlc3QgdG8gZGVyaXZlIHRoZSByYW5nZSBvZiBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogICAgICAgIEluaGVyaXRlZCBNUEQgYXR0cmlidXRlc1xuICogQHJldHVybiB7e251bWJlcjogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHRpbWVsaW5lOiBudW1iZXJ9W119XG4gKiAgICAgICAgIExpc3Qgb2YgT2JqZWN0cyB3aXRoIHNlZ21lbnQgdGltaW5nIGFuZCBkdXJhdGlvbiBpbmZvXG4gKi9cblxudmFyIHBhcnNlQnlEdXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlQnlEdXJhdGlvbihhdHRyaWJ1dGVzKSB7XG4gIHZhciBfYXR0cmlidXRlcyR0eXBlID0gYXR0cmlidXRlcy50eXBlLFxuICAgICAgdHlwZSA9IF9hdHRyaWJ1dGVzJHR5cGUgPT09IHZvaWQgMCA/ICdzdGF0aWMnIDogX2F0dHJpYnV0ZXMkdHlwZSxcbiAgICAgIGR1cmF0aW9uID0gYXR0cmlidXRlcy5kdXJhdGlvbixcbiAgICAgIF9hdHRyaWJ1dGVzJHRpbWVzY2FsZTQgPSBhdHRyaWJ1dGVzLnRpbWVzY2FsZSxcbiAgICAgIHRpbWVzY2FsZSA9IF9hdHRyaWJ1dGVzJHRpbWVzY2FsZTQgPT09IHZvaWQgMCA/IDEgOiBfYXR0cmlidXRlcyR0aW1lc2NhbGU0LFxuICAgICAgc291cmNlRHVyYXRpb24gPSBhdHRyaWJ1dGVzLnNvdXJjZUR1cmF0aW9uO1xuXG4gIHZhciBfc2VnbWVudFJhbmdlJHR5cGUgPSBzZWdtZW50UmFuZ2VbdHlwZV0oYXR0cmlidXRlcyksXG4gICAgICBzdGFydCA9IF9zZWdtZW50UmFuZ2UkdHlwZS5zdGFydCxcbiAgICAgIGVuZCA9IF9zZWdtZW50UmFuZ2UkdHlwZS5lbmQ7XG5cbiAgdmFyIHNlZ21lbnRzID0gcmFuZ2Uoc3RhcnQsIGVuZCkubWFwKHRvU2VnbWVudHMoYXR0cmlidXRlcykpO1xuXG4gIGlmICh0eXBlID09PSAnc3RhdGljJykge1xuICAgIHZhciBpbmRleCA9IHNlZ21lbnRzLmxlbmd0aCAtIDE7IC8vIGZpbmFsIHNlZ21lbnQgbWF5IGJlIGxlc3MgdGhhbiBmdWxsIHNlZ21lbnQgZHVyYXRpb25cblxuICAgIHNlZ21lbnRzW2luZGV4XS5kdXJhdGlvbiA9IHNvdXJjZUR1cmF0aW9uIC0gZHVyYXRpb24gLyB0aW1lc2NhbGUgKiBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyBTZWdtZW50QmFzZSBpbnRvIGEgc2V0IG9mIHNlZ21lbnRzLlxuICogKERBU0ggU1BFQyBTZWN0aW9uIDUuMy45LjMuMikgY29udGFpbnMgYSBzZXQgb2YgPFNlZ21lbnRVUkw+IG5vZGVzLiAgRWFjaFxuICogbm9kZSBzaG91bGQgYmUgdHJhbnNsYXRlZCBpbnRvIHNlZ21lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqICAgT2JqZWN0IGNvbnRhaW5pbmcgYWxsIGluaGVyaXRlZCBhdHRyaWJ1dGVzIGZyb20gcGFyZW50IGVsZW1lbnRzIHdpdGggYXR0cmlidXRlXG4gKiAgIG5hbWVzIGFzIGtleXNcbiAqIEByZXR1cm4ge09iamVjdC48QXJyYXk+fSBsaXN0IG9mIHNlZ21lbnRzXG4gKi9cblxudmFyIHNlZ21lbnRzRnJvbUJhc2UgPSBmdW5jdGlvbiBzZWdtZW50c0Zyb21CYXNlKGF0dHJpYnV0ZXMpIHtcbiAgdmFyIGJhc2VVcmwgPSBhdHRyaWJ1dGVzLmJhc2VVcmwsXG4gICAgICBfYXR0cmlidXRlcyRpbml0aWFsaXogPSBhdHRyaWJ1dGVzLmluaXRpYWxpemF0aW9uLFxuICAgICAgaW5pdGlhbGl6YXRpb24gPSBfYXR0cmlidXRlcyRpbml0aWFsaXogPT09IHZvaWQgMCA/IHt9IDogX2F0dHJpYnV0ZXMkaW5pdGlhbGl6LFxuICAgICAgc291cmNlRHVyYXRpb24gPSBhdHRyaWJ1dGVzLnNvdXJjZUR1cmF0aW9uLFxuICAgICAgX2F0dHJpYnV0ZXMkdGltZXNjYWxlID0gYXR0cmlidXRlcy50aW1lc2NhbGUsXG4gICAgICB0aW1lc2NhbGUgPSBfYXR0cmlidXRlcyR0aW1lc2NhbGUgPT09IHZvaWQgMCA/IDEgOiBfYXR0cmlidXRlcyR0aW1lc2NhbGUsXG4gICAgICBfYXR0cmlidXRlcyRpbmRleFJhbmcgPSBhdHRyaWJ1dGVzLmluZGV4UmFuZ2UsXG4gICAgICBpbmRleFJhbmdlID0gX2F0dHJpYnV0ZXMkaW5kZXhSYW5nID09PSB2b2lkIDAgPyAnJyA6IF9hdHRyaWJ1dGVzJGluZGV4UmFuZyxcbiAgICAgIGR1cmF0aW9uID0gYXR0cmlidXRlcy5kdXJhdGlvbjsgLy8gYmFzZSB1cmwgaXMgcmVxdWlyZWQgZm9yIFNlZ21lbnRCYXNlIHRvIHdvcmssIHBlciBzcGVjIChTZWN0aW9uIDUuMy45LjIuMSlcblxuICBpZiAoIWJhc2VVcmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzLk5PX0JBU0VfVVJMKTtcbiAgfVxuXG4gIHZhciBpbml0U2VnbWVudCA9IHVybFR5cGVUb1NlZ21lbnQoe1xuICAgIGJhc2VVcmw6IGJhc2VVcmwsXG4gICAgc291cmNlOiBpbml0aWFsaXphdGlvbi5zb3VyY2VVUkwsXG4gICAgcmFuZ2U6IGluaXRpYWxpemF0aW9uLnJhbmdlXG4gIH0pO1xuICB2YXIgc2VnbWVudCA9IHVybFR5cGVUb1NlZ21lbnQoe1xuICAgIGJhc2VVcmw6IGJhc2VVcmwsXG4gICAgc291cmNlOiBiYXNlVXJsLFxuICAgIGluZGV4UmFuZ2U6IGluZGV4UmFuZ2VcbiAgfSk7XG4gIHNlZ21lbnQubWFwID0gaW5pdFNlZ21lbnQ7IC8vIElmIHRoZXJlIGlzIGEgZHVyYXRpb24sIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgZ2l2ZW4gZHVyYXRpb24gb2YgdGhlIHNvdXJjZVxuICAvLyAoc2luY2UgU2VnbWVudEJhc2UgaXMgb25seSBmb3Igb25lIHRvdGFsIHNlZ21lbnQpXG5cbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgdmFyIHNlZ21lbnRUaW1lSW5mbyA9IHBhcnNlQnlEdXJhdGlvbihhdHRyaWJ1dGVzKTtcblxuICAgIGlmIChzZWdtZW50VGltZUluZm8ubGVuZ3RoKSB7XG4gICAgICBzZWdtZW50LmR1cmF0aW9uID0gc2VnbWVudFRpbWVJbmZvWzBdLmR1cmF0aW9uO1xuICAgICAgc2VnbWVudC50aW1lbGluZSA9IHNlZ21lbnRUaW1lSW5mb1swXS50aW1lbGluZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc291cmNlRHVyYXRpb24pIHtcbiAgICBzZWdtZW50LmR1cmF0aW9uID0gc291cmNlRHVyYXRpb24gLyB0aW1lc2NhbGU7XG4gICAgc2VnbWVudC50aW1lbGluZSA9IDA7XG4gIH0gLy8gVGhpcyBpcyB1c2VkIGZvciBtZWRpYVNlcXVlbmNlXG5cblxuICBzZWdtZW50Lm51bWJlciA9IDA7XG4gIHJldHVybiBbc2VnbWVudF07XG59O1xuLyoqXG4gKiBHaXZlbiBhIHBsYXlsaXN0LCBhIHNpZHggYm94LCBhbmQgYSBiYXNlVXJsLCB1cGRhdGUgdGhlIHNlZ21lbnQgbGlzdCBvZiB0aGUgcGxheWxpc3RcbiAqIGFjY29yZGluZyB0byB0aGUgc2lkeCBpbmZvcm1hdGlvbiBnaXZlbi5cbiAqXG4gKiBwbGF5bGlzdC5zaWR4IGhhcyBtZXRhZGFkYXRhIGFib3V0IHRoZSBzaWR4IHdoZXJlLWFzIHRoZSBzaWR4IHBhcmFtXG4gKiBpcyB0aGUgcGFyc2VkIHNpZHggYm94IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgdGhlIHBsYXlsaXN0IHRvIHVwZGF0ZSB0aGUgc2lkeCBpbmZvcm1hdGlvbiBmb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBzaWR4IHRoZSBwYXJzZWQgc2lkeCBib3hcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBsYXlsaXN0IG9iamVjdCB3aXRoIHRoZSB1cGRhdGVkIHNpZHggaW5mb3JtYXRpb25cbiAqL1xuXG52YXIgYWRkU2VnbWVudHNUb1BsYXlsaXN0ID0gZnVuY3Rpb24gYWRkU2VnbWVudHNUb1BsYXlsaXN0KHBsYXlsaXN0LCBzaWR4LCBiYXNlVXJsKSB7XG4gIC8vIFJldGFpbiBpbml0IHNlZ21lbnQgaW5mb3JtYXRpb25cbiAgdmFyIGluaXRTZWdtZW50ID0gcGxheWxpc3Quc2lkeC5tYXAgPyBwbGF5bGlzdC5zaWR4Lm1hcCA6IG51bGw7IC8vIFJldGFpbiBzb3VyY2UgZHVyYXRpb24gZnJvbSBpbml0aWFsIG1hc3RlciBtYW5pZmVzdCBwYXJzaW5nXG5cbiAgdmFyIHNvdXJjZUR1cmF0aW9uID0gcGxheWxpc3Quc2lkeC5kdXJhdGlvbjsgLy8gUmV0YWluIHNvdXJjZSB0aW1lbGluZVxuXG4gIHZhciB0aW1lbGluZSA9IHBsYXlsaXN0LnRpbWVsaW5lIHx8IDA7XG4gIHZhciBzaWR4Qnl0ZVJhbmdlID0gcGxheWxpc3Quc2lkeC5ieXRlcmFuZ2U7XG4gIHZhciBzaWR4RW5kID0gc2lkeEJ5dGVSYW5nZS5vZmZzZXQgKyBzaWR4Qnl0ZVJhbmdlLmxlbmd0aDsgLy8gUmV0YWluIHRpbWVzY2FsZSBvZiB0aGUgcGFyc2VkIHNpZHhcblxuICB2YXIgdGltZXNjYWxlID0gc2lkeC50aW1lc2NhbGU7IC8vIHJlZmVyZW5jZVR5cGUgMSByZWZlcnMgdG8gb3RoZXIgc2lkeCBib3hlc1xuXG4gIHZhciBtZWRpYVJlZmVyZW5jZXMgPSBzaWR4LnJlZmVyZW5jZXMuZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgcmV0dXJuIHIucmVmZXJlbmNlVHlwZSAhPT0gMTtcbiAgfSk7XG4gIHZhciBzZWdtZW50cyA9IFtdOyAvLyBmaXJzdE9mZnNldCBpcyB0aGUgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgc2lkeCBib3hcblxuICB2YXIgc3RhcnRJbmRleCA9IHNpZHhFbmQgKyBzaWR4LmZpcnN0T2Zmc2V0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFSZWZlcmVuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlZmVyZW5jZSA9IHNpZHgucmVmZXJlbmNlc1tpXTsgLy8gc2l6ZSBvZiB0aGUgcmVmZXJlbmNlZCAoc3ViKXNlZ21lbnRcblxuICAgIHZhciBzaXplID0gcmVmZXJlbmNlLnJlZmVyZW5jZWRTaXplOyAvLyBkdXJhdGlvbiBvZiB0aGUgcmVmZXJlbmNlZCAoc3ViKXNlZ21lbnQsIGluICB0aGUgIHRpbWVzY2FsZVxuICAgIC8vIHRoaXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2Vjb25kcyB3aGVuIGdlbmVyYXRpbmcgc2VnbWVudHNcblxuICAgIHZhciBkdXJhdGlvbiA9IHJlZmVyZW5jZS5zdWJzZWdtZW50RHVyYXRpb247IC8vIHNob3VsZCBiZSBhbiBpbmNsdXNpdmUgcmFuZ2VcblxuICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBzaXplIC0gMTtcbiAgICB2YXIgaW5kZXhSYW5nZSA9IHN0YXJ0SW5kZXggKyBcIi1cIiArIGVuZEluZGV4O1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgYmFzZVVybDogYmFzZVVybCxcbiAgICAgIHRpbWVzY2FsZTogdGltZXNjYWxlLFxuICAgICAgdGltZWxpbmU6IHRpbWVsaW5lLFxuICAgICAgLy8gdGhpcyBpcyB1c2VkIGluIHBhcnNlQnlEdXJhdGlvblxuICAgICAgcGVyaW9kSW5kZXg6IHRpbWVsaW5lLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgICAgc291cmNlRHVyYXRpb246IHNvdXJjZUR1cmF0aW9uLFxuICAgICAgaW5kZXhSYW5nZTogaW5kZXhSYW5nZVxuICAgIH07XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c0Zyb21CYXNlKGF0dHJpYnV0ZXMpWzBdO1xuXG4gICAgaWYgKGluaXRTZWdtZW50KSB7XG4gICAgICBzZWdtZW50Lm1hcCA9IGluaXRTZWdtZW50O1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gICAgc3RhcnRJbmRleCArPSBzaXplO1xuICB9XG5cbiAgcGxheWxpc3Quc2VnbWVudHMgPSBzZWdtZW50cztcbiAgcmV0dXJuIHBsYXlsaXN0O1xufTtcblxudmFyIG1lcmdlRGlzY29udGlndW91c1BsYXlsaXN0cyA9IGZ1bmN0aW9uIG1lcmdlRGlzY29udGlndW91c1BsYXlsaXN0cyhwbGF5bGlzdHMpIHtcbiAgdmFyIG1lcmdlZFBsYXlsaXN0cyA9IHZhbHVlcyhwbGF5bGlzdHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYXlsaXN0KSB7XG4gICAgLy8gYXNzdW1pbmcgcGxheWxpc3QgSURzIGFyZSB0aGUgc2FtZSBhY3Jvc3MgcGVyaW9kc1xuICAgIC8vIFRPRE86IGhhbmRsZSBtdWx0aXBlcmlvZCB3aGVyZSByZXByZXNlbnRhdGlvbiBzZXRzIGFyZSBub3QgdGhlIHNhbWVcbiAgICAvLyBhY3Jvc3MgcGVyaW9kc1xuICAgIHZhciBuYW1lID0gcGxheWxpc3QuYXR0cmlidXRlcy5pZCArIChwbGF5bGlzdC5hdHRyaWJ1dGVzLmxhbmcgfHwgJycpOyAvLyBQZXJpb2RzIGFmdGVyIGZpcnN0XG5cbiAgICBpZiAoYWNjW25hbWVdKSB7XG4gICAgICB2YXIgX2FjYyRuYW1lJHNlZ21lbnRzO1xuXG4gICAgICAvLyBmaXJzdCBzZWdtZW50IG9mIHN1YnNlcXVlbnQgcGVyaW9kcyBzaWduYWwgYSBkaXNjb250aW51aXR5XG4gICAgICBpZiAocGxheWxpc3Quc2VnbWVudHNbMF0pIHtcbiAgICAgICAgcGxheWxpc3Quc2VnbWVudHNbMF0uZGlzY29udGludWl0eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIChfYWNjJG5hbWUkc2VnbWVudHMgPSBhY2NbbmFtZV0uc2VnbWVudHMpLnB1c2guYXBwbHkoX2FjYyRuYW1lJHNlZ21lbnRzLCBwbGF5bGlzdC5zZWdtZW50cyk7IC8vIGJ1YmJsZSB1cCBjb250ZW50UHJvdGVjdGlvbiwgdGhpcyBhc3N1bWVzIGFsbCBEUk0gY29udGVudFxuICAgICAgLy8gaGFzIHRoZSBzYW1lIGNvbnRlbnRQcm90ZWN0aW9uXG5cblxuICAgICAgaWYgKHBsYXlsaXN0LmF0dHJpYnV0ZXMuY29udGVudFByb3RlY3Rpb24pIHtcbiAgICAgICAgYWNjW25hbWVdLmF0dHJpYnV0ZXMuY29udGVudFByb3RlY3Rpb24gPSBwbGF5bGlzdC5hdHRyaWJ1dGVzLmNvbnRlbnRQcm90ZWN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaXJzdCBQZXJpb2RcbiAgICAgIGFjY1tuYW1lXSA9IHBsYXlsaXN0O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KSk7XG4gIHJldHVybiBtZXJnZWRQbGF5bGlzdHMubWFwKGZ1bmN0aW9uIChwbGF5bGlzdCkge1xuICAgIHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTdGFydHMgPSBmaW5kSW5kZXhlcyhwbGF5bGlzdC5zZWdtZW50cywgJ2Rpc2NvbnRpbnVpdHknKTtcbiAgICByZXR1cm4gcGxheWxpc3Q7XG4gIH0pO1xufTtcblxudmFyIGFkZFNlZ21lbnRJbmZvRnJvbVNpZHggPSBmdW5jdGlvbiBhZGRTZWdtZW50SW5mb0Zyb21TaWR4KHBsYXlsaXN0cywgc2lkeE1hcHBpbmcpIHtcbiAgaWYgKHNpZHhNYXBwaW5nID09PSB2b2lkIDApIHtcbiAgICBzaWR4TWFwcGluZyA9IHt9O1xuICB9XG5cbiAgaWYgKCFPYmplY3Qua2V5cyhzaWR4TWFwcGluZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHBsYXlsaXN0cztcbiAgfVxuXG4gIGZvciAodmFyIGkgaW4gcGxheWxpc3RzKSB7XG4gICAgdmFyIHBsYXlsaXN0ID0gcGxheWxpc3RzW2ldO1xuXG4gICAgaWYgKCFwbGF5bGlzdC5zaWR4KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgc2lkeEtleSA9IHBsYXlsaXN0LnNpZHgudXJpICsgJy0nICsgYnl0ZVJhbmdlVG9TdHJpbmcocGxheWxpc3Quc2lkeC5ieXRlcmFuZ2UpO1xuICAgIHZhciBzaWR4TWF0Y2ggPSBzaWR4TWFwcGluZ1tzaWR4S2V5XSAmJiBzaWR4TWFwcGluZ1tzaWR4S2V5XS5zaWR4O1xuXG4gICAgaWYgKHBsYXlsaXN0LnNpZHggJiYgc2lkeE1hdGNoKSB7XG4gICAgICBhZGRTZWdtZW50c1RvUGxheWxpc3QocGxheWxpc3QsIHNpZHhNYXRjaCwgcGxheWxpc3Quc2lkeC5yZXNvbHZlZFVyaSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBsYXlsaXN0cztcbn07XG5cbnZhciBmb3JtYXRBdWRpb1BsYXlsaXN0ID0gZnVuY3Rpb24gZm9ybWF0QXVkaW9QbGF5bGlzdChfcmVmKSB7XG4gIHZhciBfYXR0cmlidXRlcztcblxuICB2YXIgYXR0cmlidXRlcyA9IF9yZWYuYXR0cmlidXRlcyxcbiAgICAgIHNlZ21lbnRzID0gX3JlZi5zZWdtZW50cyxcbiAgICAgIHNpZHggPSBfcmVmLnNpZHg7XG4gIHZhciBwbGF5bGlzdCA9IHtcbiAgICBhdHRyaWJ1dGVzOiAoX2F0dHJpYnV0ZXMgPSB7XG4gICAgICBOQU1FOiBhdHRyaWJ1dGVzLmlkLFxuICAgICAgQkFORFdJRFRIOiBhdHRyaWJ1dGVzLmJhbmR3aWR0aCxcbiAgICAgIENPREVDUzogYXR0cmlidXRlcy5jb2RlY3NcbiAgICB9LCBfYXR0cmlidXRlc1snUFJPR1JBTS1JRCddID0gMSwgX2F0dHJpYnV0ZXMpLFxuICAgIHVyaTogJycsXG4gICAgZW5kTGlzdDogKGF0dHJpYnV0ZXMudHlwZSB8fCAnc3RhdGljJykgPT09ICdzdGF0aWMnLFxuICAgIHRpbWVsaW5lOiBhdHRyaWJ1dGVzLnBlcmlvZEluZGV4LFxuICAgIHJlc29sdmVkVXJpOiAnJyxcbiAgICB0YXJnZXREdXJhdGlvbjogYXR0cmlidXRlcy5kdXJhdGlvbixcbiAgICBzZWdtZW50czogc2VnbWVudHMsXG4gICAgbWVkaWFTZXF1ZW5jZTogc2VnbWVudHMubGVuZ3RoID8gc2VnbWVudHNbMF0ubnVtYmVyIDogMVxuICB9O1xuXG4gIGlmIChhdHRyaWJ1dGVzLmNvbnRlbnRQcm90ZWN0aW9uKSB7XG4gICAgcGxheWxpc3QuY29udGVudFByb3RlY3Rpb24gPSBhdHRyaWJ1dGVzLmNvbnRlbnRQcm90ZWN0aW9uO1xuICB9XG5cbiAgaWYgKHNpZHgpIHtcbiAgICBwbGF5bGlzdC5zaWR4ID0gc2lkeDtcbiAgfVxuXG4gIHJldHVybiBwbGF5bGlzdDtcbn07XG52YXIgZm9ybWF0VnR0UGxheWxpc3QgPSBmdW5jdGlvbiBmb3JtYXRWdHRQbGF5bGlzdChfcmVmMikge1xuICB2YXIgX2F0dHJpYnV0ZXMyO1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcyxcbiAgICAgIHNlZ21lbnRzID0gX3JlZjIuc2VnbWVudHM7XG5cbiAgaWYgKHR5cGVvZiBzZWdtZW50cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyB2dHQgdHJhY2tzIG1heSB1c2Ugc2luZ2xlIGZpbGUgaW4gQmFzZVVSTFxuICAgIHNlZ21lbnRzID0gW3tcbiAgICAgIHVyaTogYXR0cmlidXRlcy5iYXNlVXJsLFxuICAgICAgdGltZWxpbmU6IGF0dHJpYnV0ZXMucGVyaW9kSW5kZXgsXG4gICAgICByZXNvbHZlZFVyaTogYXR0cmlidXRlcy5iYXNlVXJsIHx8ICcnLFxuICAgICAgZHVyYXRpb246IGF0dHJpYnV0ZXMuc291cmNlRHVyYXRpb24sXG4gICAgICBudW1iZXI6IDBcbiAgICB9XTsgLy8gdGFyZ2V0RHVyYXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGR1cmF0aW9uIGFzIHRoZSBvbmx5IHNlZ21lbnRcblxuICAgIGF0dHJpYnV0ZXMuZHVyYXRpb24gPSBhdHRyaWJ1dGVzLnNvdXJjZUR1cmF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiAoX2F0dHJpYnV0ZXMyID0ge1xuICAgICAgTkFNRTogYXR0cmlidXRlcy5pZCxcbiAgICAgIEJBTkRXSURUSDogYXR0cmlidXRlcy5iYW5kd2lkdGhcbiAgICB9LCBfYXR0cmlidXRlczJbJ1BST0dSQU0tSUQnXSA9IDEsIF9hdHRyaWJ1dGVzMiksXG4gICAgdXJpOiAnJyxcbiAgICBlbmRMaXN0OiAoYXR0cmlidXRlcy50eXBlIHx8ICdzdGF0aWMnKSA9PT0gJ3N0YXRpYycsXG4gICAgdGltZWxpbmU6IGF0dHJpYnV0ZXMucGVyaW9kSW5kZXgsXG4gICAgcmVzb2x2ZWRVcmk6IGF0dHJpYnV0ZXMuYmFzZVVybCB8fCAnJyxcbiAgICB0YXJnZXREdXJhdGlvbjogYXR0cmlidXRlcy5kdXJhdGlvbixcbiAgICBzZWdtZW50czogc2VnbWVudHMsXG4gICAgbWVkaWFTZXF1ZW5jZTogc2VnbWVudHMubGVuZ3RoID8gc2VnbWVudHNbMF0ubnVtYmVyIDogMVxuICB9O1xufTtcbnZhciBvcmdhbml6ZUF1ZGlvUGxheWxpc3RzID0gZnVuY3Rpb24gb3JnYW5pemVBdWRpb1BsYXlsaXN0cyhwbGF5bGlzdHMsIHNpZHhNYXBwaW5nKSB7XG4gIGlmIChzaWR4TWFwcGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc2lkeE1hcHBpbmcgPSB7fTtcbiAgfVxuXG4gIHZhciBtYWluUGxheWxpc3Q7XG4gIHZhciBmb3JtYXR0ZWRQbGF5bGlzdHMgPSBwbGF5bGlzdHMucmVkdWNlKGZ1bmN0aW9uIChhLCBwbGF5bGlzdCkge1xuICAgIHZhciByb2xlID0gcGxheWxpc3QuYXR0cmlidXRlcy5yb2xlICYmIHBsYXlsaXN0LmF0dHJpYnV0ZXMucm9sZS52YWx1ZSB8fCAnJztcbiAgICB2YXIgbGFuZ3VhZ2UgPSBwbGF5bGlzdC5hdHRyaWJ1dGVzLmxhbmcgfHwgJyc7XG4gICAgdmFyIGxhYmVsID0gJ21haW4nO1xuXG4gICAgaWYgKGxhbmd1YWdlKSB7XG4gICAgICB2YXIgcm9sZUxhYmVsID0gcm9sZSA/IFwiIChcIiArIHJvbGUgKyBcIilcIiA6ICcnO1xuICAgICAgbGFiZWwgPSBcIlwiICsgcGxheWxpc3QuYXR0cmlidXRlcy5sYW5nICsgcm9sZUxhYmVsO1xuICAgIH0gLy8gc2tpcCBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIGhpZ2hlc3QgcXVhbGl0eSBhdWRpbyBmb3IgYSBsYW5ndWFnZVxuXG5cbiAgICBpZiAoYVtsYWJlbF0gJiYgYVtsYWJlbF0ucGxheWxpc3RzWzBdLmF0dHJpYnV0ZXMuQkFORFdJRFRIID4gcGxheWxpc3QuYXR0cmlidXRlcy5iYW5kd2lkdGgpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGFbbGFiZWxdID0ge1xuICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgYXV0b3NlbGVjdDogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IHJvbGUgPT09ICdtYWluJyxcbiAgICAgIHBsYXlsaXN0czogYWRkU2VnbWVudEluZm9Gcm9tU2lkeChbZm9ybWF0QXVkaW9QbGF5bGlzdChwbGF5bGlzdCldLCBzaWR4TWFwcGluZyksXG4gICAgICB1cmk6ICcnXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgbWFpblBsYXlsaXN0ID09PSAndW5kZWZpbmVkJyAmJiByb2xlID09PSAnbWFpbicpIHtcbiAgICAgIG1haW5QbGF5bGlzdCA9IHBsYXlsaXN0O1xuICAgICAgbWFpblBsYXlsaXN0LmRlZmF1bHQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9LCB7fSk7IC8vIGlmIG5vIHBsYXlsaXN0cyBoYXZlIHJvbGUgXCJtYWluXCIsIG1hcmsgdGhlIGZpcnN0IGFzIG1haW5cblxuICBpZiAoIW1haW5QbGF5bGlzdCkge1xuICAgIHZhciBmaXJzdExhYmVsID0gT2JqZWN0LmtleXMoZm9ybWF0dGVkUGxheWxpc3RzKVswXTtcbiAgICBmb3JtYXR0ZWRQbGF5bGlzdHNbZmlyc3RMYWJlbF0uZGVmYXVsdCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0dGVkUGxheWxpc3RzO1xufTtcbnZhciBvcmdhbml6ZVZ0dFBsYXlsaXN0cyA9IGZ1bmN0aW9uIG9yZ2FuaXplVnR0UGxheWxpc3RzKHBsYXlsaXN0cywgc2lkeE1hcHBpbmcpIHtcbiAgaWYgKHNpZHhNYXBwaW5nID09PSB2b2lkIDApIHtcbiAgICBzaWR4TWFwcGluZyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBsYXlsaXN0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIHBsYXlsaXN0KSB7XG4gICAgdmFyIGxhYmVsID0gcGxheWxpc3QuYXR0cmlidXRlcy5sYW5nIHx8ICd0ZXh0JzsgLy8gc2tpcCBpZiB3ZSBhbHJlYWR5IGhhdmUgc3VidGl0bGVzXG5cbiAgICBpZiAoYVtsYWJlbF0pIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGFbbGFiZWxdID0ge1xuICAgICAgbGFuZ3VhZ2U6IGxhYmVsLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBhdXRvc2VsZWN0OiBmYWxzZSxcbiAgICAgIHBsYXlsaXN0czogYWRkU2VnbWVudEluZm9Gcm9tU2lkeChbZm9ybWF0VnR0UGxheWxpc3QocGxheWxpc3QpXSwgc2lkeE1hcHBpbmcpLFxuICAgICAgdXJpOiAnJ1xuICAgIH07XG4gICAgcmV0dXJuIGE7XG4gIH0sIHt9KTtcbn07XG52YXIgZm9ybWF0VmlkZW9QbGF5bGlzdCA9IGZ1bmN0aW9uIGZvcm1hdFZpZGVvUGxheWxpc3QoX3JlZjMpIHtcbiAgdmFyIF9hdHRyaWJ1dGVzMztcblxuICB2YXIgYXR0cmlidXRlcyA9IF9yZWYzLmF0dHJpYnV0ZXMsXG4gICAgICBzZWdtZW50cyA9IF9yZWYzLnNlZ21lbnRzLFxuICAgICAgc2lkeCA9IF9yZWYzLnNpZHg7XG4gIHZhciBwbGF5bGlzdCA9IHtcbiAgICBhdHRyaWJ1dGVzOiAoX2F0dHJpYnV0ZXMzID0ge1xuICAgICAgTkFNRTogYXR0cmlidXRlcy5pZCxcbiAgICAgIEFVRElPOiAnYXVkaW8nLFxuICAgICAgU1VCVElUTEVTOiAnc3VicycsXG4gICAgICBSRVNPTFVUSU9OOiB7XG4gICAgICAgIHdpZHRoOiBhdHRyaWJ1dGVzLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGF0dHJpYnV0ZXMuaGVpZ2h0XG4gICAgICB9LFxuICAgICAgQ09ERUNTOiBhdHRyaWJ1dGVzLmNvZGVjcyxcbiAgICAgIEJBTkRXSURUSDogYXR0cmlidXRlcy5iYW5kd2lkdGhcbiAgICB9LCBfYXR0cmlidXRlczNbJ1BST0dSQU0tSUQnXSA9IDEsIF9hdHRyaWJ1dGVzMyksXG4gICAgdXJpOiAnJyxcbiAgICBlbmRMaXN0OiAoYXR0cmlidXRlcy50eXBlIHx8ICdzdGF0aWMnKSA9PT0gJ3N0YXRpYycsXG4gICAgdGltZWxpbmU6IGF0dHJpYnV0ZXMucGVyaW9kSW5kZXgsXG4gICAgcmVzb2x2ZWRVcmk6ICcnLFxuICAgIHRhcmdldER1cmF0aW9uOiBhdHRyaWJ1dGVzLmR1cmF0aW9uLFxuICAgIHNlZ21lbnRzOiBzZWdtZW50cyxcbiAgICBtZWRpYVNlcXVlbmNlOiBzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50c1swXS5udW1iZXIgOiAxXG4gIH07XG5cbiAgaWYgKGF0dHJpYnV0ZXMuY29udGVudFByb3RlY3Rpb24pIHtcbiAgICBwbGF5bGlzdC5jb250ZW50UHJvdGVjdGlvbiA9IGF0dHJpYnV0ZXMuY29udGVudFByb3RlY3Rpb247XG4gIH1cblxuICBpZiAoc2lkeCkge1xuICAgIHBsYXlsaXN0LnNpZHggPSBzaWR4O1xuICB9XG5cbiAgcmV0dXJuIHBsYXlsaXN0O1xufTtcbnZhciB0b00zdTggPSBmdW5jdGlvbiB0b00zdTgoZGFzaFBsYXlsaXN0cywgc2lkeE1hcHBpbmcpIHtcbiAgdmFyIF9tZWRpYUdyb3VwcztcblxuICBpZiAoc2lkeE1hcHBpbmcgPT09IHZvaWQgMCkge1xuICAgIHNpZHhNYXBwaW5nID0ge307XG4gIH1cblxuICBpZiAoIWRhc2hQbGF5bGlzdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9IC8vIGdyYWIgYWxsIG1hc3RlciBhdHRyaWJ1dGVzXG5cblxuICB2YXIgX2Rhc2hQbGF5bGlzdHMkMCRhdHRyID0gZGFzaFBsYXlsaXN0c1swXS5hdHRyaWJ1dGVzLFxuICAgICAgZHVyYXRpb24gPSBfZGFzaFBsYXlsaXN0cyQwJGF0dHIuc291cmNlRHVyYXRpb24sXG4gICAgICBfZGFzaFBsYXlsaXN0cyQwJGF0dHIyID0gX2Rhc2hQbGF5bGlzdHMkMCRhdHRyLm1pbmltdW1VcGRhdGVQZXJpb2QsXG4gICAgICBtaW5pbXVtVXBkYXRlUGVyaW9kID0gX2Rhc2hQbGF5bGlzdHMkMCRhdHRyMiA9PT0gdm9pZCAwID8gMCA6IF9kYXNoUGxheWxpc3RzJDAkYXR0cjI7XG5cbiAgdmFyIHZpZGVvT25seSA9IGZ1bmN0aW9uIHZpZGVvT25seShfcmVmNCkge1xuICAgIHZhciBhdHRyaWJ1dGVzID0gX3JlZjQuYXR0cmlidXRlcztcbiAgICByZXR1cm4gYXR0cmlidXRlcy5taW1lVHlwZSA9PT0gJ3ZpZGVvL21wNCcgfHwgYXR0cmlidXRlcy5jb250ZW50VHlwZSA9PT0gJ3ZpZGVvJztcbiAgfTtcblxuICB2YXIgYXVkaW9Pbmx5ID0gZnVuY3Rpb24gYXVkaW9Pbmx5KF9yZWY1KSB7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBfcmVmNS5hdHRyaWJ1dGVzO1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLm1pbWVUeXBlID09PSAnYXVkaW8vbXA0JyB8fCBhdHRyaWJ1dGVzLmNvbnRlbnRUeXBlID09PSAnYXVkaW8nO1xuICB9O1xuXG4gIHZhciB2dHRPbmx5ID0gZnVuY3Rpb24gdnR0T25seShfcmVmNikge1xuICAgIHZhciBhdHRyaWJ1dGVzID0gX3JlZjYuYXR0cmlidXRlcztcbiAgICByZXR1cm4gYXR0cmlidXRlcy5taW1lVHlwZSA9PT0gJ3RleHQvdnR0JyB8fCBhdHRyaWJ1dGVzLmNvbnRlbnRUeXBlID09PSAndGV4dCc7XG4gIH07XG5cbiAgdmFyIHZpZGVvUGxheWxpc3RzID0gbWVyZ2VEaXNjb250aWd1b3VzUGxheWxpc3RzKGRhc2hQbGF5bGlzdHMuZmlsdGVyKHZpZGVvT25seSkpLm1hcChmb3JtYXRWaWRlb1BsYXlsaXN0KTtcbiAgdmFyIGF1ZGlvUGxheWxpc3RzID0gbWVyZ2VEaXNjb250aWd1b3VzUGxheWxpc3RzKGRhc2hQbGF5bGlzdHMuZmlsdGVyKGF1ZGlvT25seSkpO1xuICB2YXIgdnR0UGxheWxpc3RzID0gZGFzaFBsYXlsaXN0cy5maWx0ZXIodnR0T25seSk7XG4gIHZhciBtYXN0ZXIgPSB7XG4gICAgYWxsb3dDYWNoZTogdHJ1ZSxcbiAgICBkaXNjb250aW51aXR5U3RhcnRzOiBbXSxcbiAgICBzZWdtZW50czogW10sXG4gICAgZW5kTGlzdDogdHJ1ZSxcbiAgICBtZWRpYUdyb3VwczogKF9tZWRpYUdyb3VwcyA9IHtcbiAgICAgIEFVRElPOiB7fSxcbiAgICAgIFZJREVPOiB7fVxuICAgIH0sIF9tZWRpYUdyb3Vwc1snQ0xPU0VELUNBUFRJT05TJ10gPSB7fSwgX21lZGlhR3JvdXBzLlNVQlRJVExFUyA9IHt9LCBfbWVkaWFHcm91cHMpLFxuICAgIHVyaTogJycsXG4gICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgIHBsYXlsaXN0czogYWRkU2VnbWVudEluZm9Gcm9tU2lkeCh2aWRlb1BsYXlsaXN0cywgc2lkeE1hcHBpbmcpLFxuICAgIG1pbmltdW1VcGRhdGVQZXJpb2Q6IG1pbmltdW1VcGRhdGVQZXJpb2QgKiAxMDAwXG4gIH07XG5cbiAgaWYgKGF1ZGlvUGxheWxpc3RzLmxlbmd0aCkge1xuICAgIG1hc3Rlci5tZWRpYUdyb3Vwcy5BVURJTy5hdWRpbyA9IG9yZ2FuaXplQXVkaW9QbGF5bGlzdHMoYXVkaW9QbGF5bGlzdHMsIHNpZHhNYXBwaW5nKTtcbiAgfVxuXG4gIGlmICh2dHRQbGF5bGlzdHMubGVuZ3RoKSB7XG4gICAgbWFzdGVyLm1lZGlhR3JvdXBzLlNVQlRJVExFUy5zdWJzID0gb3JnYW5pemVWdHRQbGF5bGlzdHModnR0UGxheWxpc3RzLCBzaWR4TWFwcGluZyk7XG4gIH1cblxuICByZXR1cm4gbWFzdGVyO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBSIChyZXBldGl0aW9uKSB2YWx1ZSBmb3IgYSBsaXZlIHN0cmVhbSAoZm9yIHRoZSBmaW5hbCBzZWdtZW50XG4gKiBpbiBhIG1hbmlmZXN0IHdoZXJlIHRoZSByIHZhbHVlIGlzIG5lZ2F0aXZlIDEpXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqICAgICAgICBPYmplY3QgY29udGFpbmluZyBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVcbiAqICAgICAgICBuYW1lcyBhcyBrZXlzXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZVxuICogICAgICAgIGN1cnJlbnQgdGltZSAodHlwaWNhbGx5IHRoZSB0b3RhbCB0aW1lIHVwIHVudGlsIHRoZSBmaW5hbCBzZWdtZW50KVxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uXG4gKiAgICAgICAgZHVyYXRpb24gcHJvcGVydHkgZm9yIHRoZSBnaXZlbiA8UyAvPlxuICpcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgICAgICBSIHZhbHVlIHRvIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHBlcmlvZFxuICovXG52YXIgZ2V0TGl2ZVJWYWx1ZSA9IGZ1bmN0aW9uIGdldExpdmVSVmFsdWUoYXR0cmlidXRlcywgdGltZSwgZHVyYXRpb24pIHtcbiAgdmFyIE5PVyA9IGF0dHJpYnV0ZXMuTk9XLFxuICAgICAgY2xpZW50T2Zmc2V0ID0gYXR0cmlidXRlcy5jbGllbnRPZmZzZXQsXG4gICAgICBhdmFpbGFiaWxpdHlTdGFydFRpbWUgPSBhdHRyaWJ1dGVzLmF2YWlsYWJpbGl0eVN0YXJ0VGltZSxcbiAgICAgIF9hdHRyaWJ1dGVzJHRpbWVzY2FsZSA9IGF0dHJpYnV0ZXMudGltZXNjYWxlLFxuICAgICAgdGltZXNjYWxlID0gX2F0dHJpYnV0ZXMkdGltZXNjYWxlID09PSB2b2lkIDAgPyAxIDogX2F0dHJpYnV0ZXMkdGltZXNjYWxlLFxuICAgICAgX2F0dHJpYnV0ZXMkc3RhcnQgPSBhdHRyaWJ1dGVzLnN0YXJ0LFxuICAgICAgc3RhcnQgPSBfYXR0cmlidXRlcyRzdGFydCA9PT0gdm9pZCAwID8gMCA6IF9hdHRyaWJ1dGVzJHN0YXJ0LFxuICAgICAgX2F0dHJpYnV0ZXMkbWluaW11bVVwID0gYXR0cmlidXRlcy5taW5pbXVtVXBkYXRlUGVyaW9kLFxuICAgICAgbWluaW11bVVwZGF0ZVBlcmlvZCA9IF9hdHRyaWJ1dGVzJG1pbmltdW1VcCA9PT0gdm9pZCAwID8gMCA6IF9hdHRyaWJ1dGVzJG1pbmltdW1VcDtcbiAgdmFyIG5vdyA9IChOT1cgKyBjbGllbnRPZmZzZXQpIC8gMTAwMDtcbiAgdmFyIHBlcmlvZFN0YXJ0V0MgPSBhdmFpbGFiaWxpdHlTdGFydFRpbWUgKyBzdGFydDtcbiAgdmFyIHBlcmlvZEVuZFdDID0gbm93ICsgbWluaW11bVVwZGF0ZVBlcmlvZDtcbiAgdmFyIHBlcmlvZER1cmF0aW9uID0gcGVyaW9kRW5kV0MgLSBwZXJpb2RTdGFydFdDO1xuICByZXR1cm4gTWF0aC5jZWlsKChwZXJpb2REdXJhdGlvbiAqIHRpbWVzY2FsZSAtIHRpbWUpIC8gZHVyYXRpb24pO1xufTtcbi8qKlxuICogVXNlcyBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBTZWdtZW50VGVtcGxhdGUuU2VnbWVudFRpbWVsaW5lIHRvIGRldGVybWluZSBzZWdtZW50XG4gKiB0aW1pbmcgYW5kIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqICAgICAgICBPYmplY3QgY29udGFpbmluZyBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVcbiAqICAgICAgICBuYW1lcyBhcyBrZXlzXG4gKiBAcGFyYW0ge09iamVjdFtdfSBzZWdtZW50VGltZWxpbmVcbiAqICAgICAgICBMaXN0IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGVhY2ggUyBlbGVtZW50IGNvbnRhaW5lZCB3aXRoaW5cbiAqXG4gKiBAcmV0dXJuIHt7bnVtYmVyOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIsIHRpbWU6IG51bWJlciwgdGltZWxpbmU6IG51bWJlcn1bXX1cbiAqICAgICAgICAgTGlzdCBvZiBPYmplY3RzIHdpdGggc2VnbWVudCB0aW1pbmcgYW5kIGR1cmF0aW9uIGluZm9cbiAqL1xuXG5cbnZhciBwYXJzZUJ5VGltZWxpbmUgPSBmdW5jdGlvbiBwYXJzZUJ5VGltZWxpbmUoYXR0cmlidXRlcywgc2VnbWVudFRpbWVsaW5lKSB7XG4gIHZhciBfYXR0cmlidXRlcyR0eXBlID0gYXR0cmlidXRlcy50eXBlLFxuICAgICAgdHlwZSA9IF9hdHRyaWJ1dGVzJHR5cGUgPT09IHZvaWQgMCA/ICdzdGF0aWMnIDogX2F0dHJpYnV0ZXMkdHlwZSxcbiAgICAgIF9hdHRyaWJ1dGVzJG1pbmltdW1VcDIgPSBhdHRyaWJ1dGVzLm1pbmltdW1VcGRhdGVQZXJpb2QsXG4gICAgICBtaW5pbXVtVXBkYXRlUGVyaW9kID0gX2F0dHJpYnV0ZXMkbWluaW11bVVwMiA9PT0gdm9pZCAwID8gMCA6IF9hdHRyaWJ1dGVzJG1pbmltdW1VcDIsXG4gICAgICBfYXR0cmlidXRlcyRtZWRpYSA9IGF0dHJpYnV0ZXMubWVkaWEsXG4gICAgICBtZWRpYSA9IF9hdHRyaWJ1dGVzJG1lZGlhID09PSB2b2lkIDAgPyAnJyA6IF9hdHRyaWJ1dGVzJG1lZGlhLFxuICAgICAgc291cmNlRHVyYXRpb24gPSBhdHRyaWJ1dGVzLnNvdXJjZUR1cmF0aW9uLFxuICAgICAgX2F0dHJpYnV0ZXMkdGltZXNjYWxlMiA9IGF0dHJpYnV0ZXMudGltZXNjYWxlLFxuICAgICAgdGltZXNjYWxlID0gX2F0dHJpYnV0ZXMkdGltZXNjYWxlMiA9PT0gdm9pZCAwID8gMSA6IF9hdHRyaWJ1dGVzJHRpbWVzY2FsZTIsXG4gICAgICBfYXR0cmlidXRlcyRzdGFydE51bWIgPSBhdHRyaWJ1dGVzLnN0YXJ0TnVtYmVyLFxuICAgICAgc3RhcnROdW1iZXIgPSBfYXR0cmlidXRlcyRzdGFydE51bWIgPT09IHZvaWQgMCA/IDEgOiBfYXR0cmlidXRlcyRzdGFydE51bWIsXG4gICAgICB0aW1lbGluZSA9IGF0dHJpYnV0ZXMucGVyaW9kSW5kZXg7XG4gIHZhciBzZWdtZW50cyA9IFtdO1xuICB2YXIgdGltZSA9IC0xO1xuXG4gIGZvciAodmFyIHNJbmRleCA9IDA7IHNJbmRleCA8IHNlZ21lbnRUaW1lbGluZS5sZW5ndGg7IHNJbmRleCsrKSB7XG4gICAgdmFyIFMgPSBzZWdtZW50VGltZWxpbmVbc0luZGV4XTtcbiAgICB2YXIgZHVyYXRpb24gPSBTLmQ7XG4gICAgdmFyIHJlcGVhdCA9IFMuciB8fCAwO1xuICAgIHZhciBzZWdtZW50VGltZSA9IFMudCB8fCAwO1xuXG4gICAgaWYgKHRpbWUgPCAwKSB7XG4gICAgICAvLyBmaXJzdCBzZWdtZW50XG4gICAgICB0aW1lID0gc2VnbWVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRUaW1lICYmIHNlZ21lbnRUaW1lID4gdGltZSkge1xuICAgICAgLy8gZGlzY29udGludWl0eVxuICAgICAgLy8gVE9ETzogSG93IHRvIGhhbmRsZSB0aGlzIHR5cGUgb2YgZGlzY29udGludWl0eVxuICAgICAgLy8gdGltZWxpbmUrKyBoZXJlIHdvdWxkIHRyZWF0IGl0IGxpa2UgSExTIGRpc2NvbnR1aXR5IGFuZCBjb250ZW50IHdvdWxkXG4gICAgICAvLyBnZXQgYXBwZW5kZWQgd2l0aG91dCBnYXBcbiAgICAgIC8vIEUuRy5cbiAgICAgIC8vICA8UyB0PVwiMFwiIGQ9XCIxXCIgLz5cbiAgICAgIC8vICA8UyBkPVwiMVwiIC8+XG4gICAgICAvLyAgPFMgZD1cIjFcIiAvPlxuICAgICAgLy8gIDxTIHQ9XCI1XCIgZD1cIjFcIiAvPlxuICAgICAgLy8gd291bGQgaGF2ZSAkVGltZSQgdmFsdWVzIG9mIFswLCAxLCAyLCA1XVxuICAgICAgLy8gc2hvdWxkIHRoaXMgYmUgYXBwZW5lZCBhdCB0aW1lIHBvc2l0aW9ucyBbMCwgMSwgMiwgM10sKCNFWFQtWC1ESVNDT05USU5VSVRZKVxuICAgICAgLy8gb3IgWzAsIDEsIDIsIGdhcCwgZ2FwLCA1XT8gKCNFWFQtWC1HQVApXG4gICAgICAvLyBkb2VzIHRoZSB2YWx1ZSBvZiBzb3VyY2VEdXJhdGlvbiBjb25zaWRlciB0aGlzIHdoZW4gY2FsY3VsYXRpbmcgYXJiaXRyYXJ5XG4gICAgICAvLyBuZWdhdGl2ZSBAciByZXBlYXQgdmFsdWU/XG4gICAgICAvLyBFLkcuIFNhbWUgZWxlbWVudHMgYXMgYWJvdmUgd2l0aCB0aGlzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICAgIC8vICA8UyBkPVwiMVwiIHI9XCItMVwiIC8+XG4gICAgICAvLyAgd2l0aCBhIHNvdXJjZUR1cmF0aW9uIG9mIDEwXG4gICAgICAvLyBXb3VsZCB0aGUgMiBnYXBzIGJlIGluY2x1ZGVkIGluIHRoZSB0aW1lIGR1cmF0aW9uIGNhbGN1bGF0aW9ucyByZXN1bHRpbmcgaW5cbiAgICAgIC8vIDggc2VnbWVudHMgd2l0aCAkVGltZSQgdmFsdWVzIG9mIFswLCAxLCAyLCA1LCA2LCA3LCA4LCA5XSBvciAxMCBzZWdtZW50c1xuICAgICAgLy8gd2l0aCAkVGltZSQgdmFsdWVzIG9mIFswLCAxLCAyLCA1LCA2LCA3LCA4LCA5LCAxMCwgMTFdID9cbiAgICAgIHRpbWUgPSBzZWdtZW50VGltZTtcbiAgICB9XG5cbiAgICB2YXIgY291bnQgPSB2b2lkIDA7XG5cbiAgICBpZiAocmVwZWF0IDwgMCkge1xuICAgICAgdmFyIG5leHRTID0gc0luZGV4ICsgMTtcblxuICAgICAgaWYgKG5leHRTID09PSBzZWdtZW50VGltZWxpbmUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxhc3Qgc2VnbWVudFxuICAgICAgICBpZiAodHlwZSA9PT0gJ2R5bmFtaWMnICYmIG1pbmltdW1VcGRhdGVQZXJpb2QgPiAwICYmIG1lZGlhLmluZGV4T2YoJyROdW1iZXIkJykgPiAwKSB7XG4gICAgICAgICAgY291bnQgPSBnZXRMaXZlUlZhbHVlKGF0dHJpYnV0ZXMsIHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIG1heSBiZSBpbmNvcnJlY3QgZGVwZW5kaW5nIG9uIGNvbmNsdXNpb24gb2YgVE9ETyBhYm92ZVxuICAgICAgICAgIGNvdW50ID0gKHNvdXJjZUR1cmF0aW9uICogdGltZXNjYWxlIC0gdGltZSkgLyBkdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQgPSAoc2VnbWVudFRpbWVsaW5lW25leHRTXS50IC0gdGltZSkgLyBkdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSByZXBlYXQgKyAxO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSBzdGFydE51bWJlciArIHNlZ21lbnRzLmxlbmd0aCArIGNvdW50O1xuICAgIHZhciBudW1iZXIgPSBzdGFydE51bWJlciArIHNlZ21lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChudW1iZXIgPCBlbmQpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uIC8gdGltZXNjYWxlLFxuICAgICAgICB0aW1lOiB0aW1lLFxuICAgICAgICB0aW1lbGluZTogdGltZWxpbmVcbiAgICAgIH0pO1xuICAgICAgdGltZSArPSBkdXJhdGlvbjtcbiAgICAgIG51bWJlcisrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn07XG5cbnZhciBpZGVudGlmaWVyUGF0dGVybiA9IC9cXCQoW0Etel0qKSg/OiglMCkoWzAtOV0rKWQpP1xcJC9nO1xuLyoqXG4gKiBSZXBsYWNlcyB0ZW1wbGF0ZSBpZGVudGlmaWVycyB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUbyBiZSB1c2VkIGFzIHRoZSBjYWxsYmFja1xuICogZm9yIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICpcbiAqIEBuYW1lIHJlcGxhY2VDYWxsYmFja1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hcbiAqICAgICAgICBFbnRpcmUgbWF0Y2ggb2YgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqICAgICAgICBOYW1lIG9mIG1hdGNoZWQgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICogICAgICAgIEZvcm1hdCB0YWcgc3RyaW5nLiBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBpcyBleHBlY3RlZFxuICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoXG4gKiAgICAgICAgRGVzaXJlZCBsZW5ndGggb2YgdGhlIHJlcGxhY2VkIHZhbHVlLiBWYWx1ZXMgbGVzcyB0aGFuIHRoaXMgd2lkdGggc2hhbGwgYmUgbGVmdFxuICogICAgICAgIHplcm8gcGFkZGVkXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFJlcGxhY2VtZW50IGZvciB0aGUgbWF0Y2hlZCBpZGVudGlmaWVyXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIGZvciBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UgdG8gcmVwbGFjZVxuICogdGVtcGxhdGUgaWRlbnRpZmllcnNcbiAqXG4gKiBAcGFyYW0ge09iZWN0fSB2YWx1ZXNcbiAqICAgICAgICBPYmplY3QgY29udGFpbmluZyB2YWx1ZXMgdGhhdCBzaGFsbCBiZSB1c2VkIHRvIHJlcGxhY2Uga25vd24gaWRlbnRpZmllcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZXMuUmVwcmVzZW50YXRpb25JRFxuICogICAgICAgIFZhbHVlIG9mIHRoZSBSZXByZXNlbnRhdGlvbkBpZCBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZXMuTnVtYmVyXG4gKiAgICAgICAgTnVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZXMuQmFuZHdpZHRoXG4gKiAgICAgICAgVmFsdWUgb2YgdGhlIFJlcHJlc2VudGF0aW9uQGJhbmR3aWR0aCBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVzLlRpbWVcbiAqICAgICAgICBUaW1lc3RhbXAgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudFxuICogQHJldHVybiB7cmVwbGFjZUNhbGxiYWNrfVxuICogICAgICAgICBDYWxsYmFjayB0byBiZSB1c2VkIHdpdGggU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlIHRvIHJlcGxhY2UgaWRlbnRpZmllcnNcbiAqL1xuXG52YXIgaWRlbnRpZmllclJlcGxhY2VtZW50ID0gZnVuY3Rpb24gaWRlbnRpZmllclJlcGxhY2VtZW50KHZhbHVlcykge1xuICByZXR1cm4gZnVuY3Rpb24gKG1hdGNoLCBpZGVudGlmaWVyLCBmb3JtYXQsIHdpZHRoKSB7XG4gICAgaWYgKG1hdGNoID09PSAnJCQnKSB7XG4gICAgICAvLyBlc2NhcGUgc2VxdWVuY2VcbiAgICAgIHJldHVybiAnJCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZXNbaWRlbnRpZmllcl0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gJycgKyB2YWx1ZXNbaWRlbnRpZmllcl07XG5cbiAgICBpZiAoaWRlbnRpZmllciA9PT0gJ1JlcHJlc2VudGF0aW9uSUQnKSB7XG4gICAgICAvLyBGb3JtYXQgdGFnIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdpdGggUmVwcmVzZW50YXRpb25JRFxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICB3aWR0aCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcGFyc2VJbnQod2lkdGgsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID49IHdpZHRoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIgKyBuZXcgQXJyYXkod2lkdGggLSB2YWx1ZS5sZW5ndGggKyAxKS5qb2luKCcwJykgKyB2YWx1ZTtcbiAgfTtcbn07XG4vKipcbiAqIENvbnN0cnVjdHMgYSBzZWdtZW50IHVybCBmcm9tIGEgdGVtcGxhdGUgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogICAgICAgIFRlbXBsYXRlIHN0cmluZyB0byBjb25zdHJ1Y3QgdXJsIGZyb21cbiAqIEBwYXJhbSB7T2JlY3R9IHZhbHVlc1xuICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHZhbHVlcyB0aGF0IHNoYWxsIGJlIHVzZWQgdG8gcmVwbGFjZSBrbm93biBpZGVudGlmaWVyc1xuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlcy5SZXByZXNlbnRhdGlvbklEXG4gKiAgICAgICAgVmFsdWUgb2YgdGhlIFJlcHJlc2VudGF0aW9uQGlkIGF0dHJpYnV0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlcy5OdW1iZXJcbiAqICAgICAgICBOdW1iZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlcy5CYW5kd2lkdGhcbiAqICAgICAgICBWYWx1ZSBvZiB0aGUgUmVwcmVzZW50YXRpb25AYmFuZHdpZHRoIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZXMuVGltZVxuICogICAgICAgIFRpbWVzdGFtcCB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWdtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFNlZ21lbnQgdXJsIHdpdGggaWRlbnRpZmllcnMgcmVwbGFjZWRcbiAqL1xuXG52YXIgY29uc3RydWN0VGVtcGxhdGVVcmwgPSBmdW5jdGlvbiBjb25zdHJ1Y3RUZW1wbGF0ZVVybCh1cmwsIHZhbHVlcykge1xuICByZXR1cm4gdXJsLnJlcGxhY2UoaWRlbnRpZmllclBhdHRlcm4sIGlkZW50aWZpZXJSZXBsYWNlbWVudCh2YWx1ZXMpKTtcbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRpbWluZyBhbmQgZHVyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgZWFjaFxuICogc2VnbWVudCBuZWVkZWQgdG8gZ2VuZXJhdGUgc2VnbWVudCB1cmlzIGFuZCB0aGUgY29tcGxldGUgc2VnbWVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogICAgICAgIE9iamVjdCBjb250YWluaW5nIGFsbCBpbmhlcml0ZWQgYXR0cmlidXRlcyBmcm9tIHBhcmVudCBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZVxuICogICAgICAgIG5hbWVzIGFzIGtleXNcbiAqIEBwYXJhbSB7T2JqZWN0W118dW5kZWZpbmVkfSBzZWdtZW50VGltZWxpbmVcbiAqICAgICAgICBMaXN0IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGVhY2ggUyBlbGVtZW50IGNvbnRhaW5lZCB3aXRoaW5cbiAqICAgICAgICB0aGUgU2VnbWVudFRpbWVsaW5lIGVsZW1lbnRcbiAqIEByZXR1cm4ge3tudW1iZXI6IG51bWJlciwgZHVyYXRpb246IG51bWJlciwgdGltZTogbnVtYmVyLCB0aW1lbGluZTogbnVtYmVyfVtdfVxuICogICAgICAgICBMaXN0IG9mIE9iamVjdHMgd2l0aCBzZWdtZW50IHRpbWluZyBhbmQgZHVyYXRpb24gaW5mb1xuICovXG5cbnZhciBwYXJzZVRlbXBsYXRlSW5mbyA9IGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVJbmZvKGF0dHJpYnV0ZXMsIHNlZ21lbnRUaW1lbGluZSkge1xuICBpZiAoIWF0dHJpYnV0ZXMuZHVyYXRpb24gJiYgIXNlZ21lbnRUaW1lbGluZSkge1xuICAgIC8vIGlmIG5laXRoZXIgQGR1cmF0aW9uIG9yIFNlZ21lbnRUaW1lbGluZSBhcmUgcHJlc2VudCwgdGhlbiB0aGVyZSBzaGFsbCBiZSBleGFjdGx5XG4gICAgLy8gb25lIG1lZGlhIHNlZ21lbnRcbiAgICByZXR1cm4gW3tcbiAgICAgIG51bWJlcjogYXR0cmlidXRlcy5zdGFydE51bWJlciB8fCAxLFxuICAgICAgZHVyYXRpb246IGF0dHJpYnV0ZXMuc291cmNlRHVyYXRpb24sXG4gICAgICB0aW1lOiAwLFxuICAgICAgdGltZWxpbmU6IGF0dHJpYnV0ZXMucGVyaW9kSW5kZXhcbiAgICB9XTtcbiAgfVxuXG4gIGlmIChhdHRyaWJ1dGVzLmR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnNlQnlEdXJhdGlvbihhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUJ5VGltZWxpbmUoYXR0cmlidXRlcywgc2VnbWVudFRpbWVsaW5lKTtcbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2Ygc2VnbWVudHMgdXNpbmcgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIFNlZ21lbnRUZW1wbGF0ZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcbiAqICAgICAgICBPYmplY3QgY29udGFpbmluZyBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVcbiAqICAgICAgICBuYW1lcyBhcyBrZXlzXG4gKiBAcGFyYW0ge09iamVjdFtdfHVuZGVmaW5lZH0gc2VnbWVudFRpbWVsaW5lXG4gKiAgICAgICAgTGlzdCBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgYXR0cmlidXRlcyBvZiBlYWNoIFMgZWxlbWVudCBjb250YWluZWQgd2l0aGluXG4gKiAgICAgICAgdGhlIFNlZ21lbnRUaW1lbGluZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3RbXX1cbiAqICAgICAgICAgTGlzdCBvZiBzZWdtZW50IG9iamVjdHNcbiAqL1xuXG52YXIgc2VnbWVudHNGcm9tVGVtcGxhdGUgPSBmdW5jdGlvbiBzZWdtZW50c0Zyb21UZW1wbGF0ZShhdHRyaWJ1dGVzLCBzZWdtZW50VGltZWxpbmUpIHtcbiAgdmFyIHRlbXBsYXRlVmFsdWVzID0ge1xuICAgIFJlcHJlc2VudGF0aW9uSUQ6IGF0dHJpYnV0ZXMuaWQsXG4gICAgQmFuZHdpZHRoOiBhdHRyaWJ1dGVzLmJhbmR3aWR0aCB8fCAwXG4gIH07XG4gIHZhciBfYXR0cmlidXRlcyRpbml0aWFsaXogPSBhdHRyaWJ1dGVzLmluaXRpYWxpemF0aW9uLFxuICAgICAgaW5pdGlhbGl6YXRpb24gPSBfYXR0cmlidXRlcyRpbml0aWFsaXogPT09IHZvaWQgMCA/IHtcbiAgICBzb3VyY2VVUkw6ICcnLFxuICAgIHJhbmdlOiAnJ1xuICB9IDogX2F0dHJpYnV0ZXMkaW5pdGlhbGl6O1xuICB2YXIgbWFwU2VnbWVudCA9IHVybFR5cGVUb1NlZ21lbnQoe1xuICAgIGJhc2VVcmw6IGF0dHJpYnV0ZXMuYmFzZVVybCxcbiAgICBzb3VyY2U6IGNvbnN0cnVjdFRlbXBsYXRlVXJsKGluaXRpYWxpemF0aW9uLnNvdXJjZVVSTCwgdGVtcGxhdGVWYWx1ZXMpLFxuICAgIHJhbmdlOiBpbml0aWFsaXphdGlvbi5yYW5nZVxuICB9KTtcbiAgdmFyIHNlZ21lbnRzID0gcGFyc2VUZW1wbGF0ZUluZm8oYXR0cmlidXRlcywgc2VnbWVudFRpbWVsaW5lKTtcbiAgcmV0dXJuIHNlZ21lbnRzLm1hcChmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgIHRlbXBsYXRlVmFsdWVzLk51bWJlciA9IHNlZ21lbnQubnVtYmVyO1xuICAgIHRlbXBsYXRlVmFsdWVzLlRpbWUgPSBzZWdtZW50LnRpbWU7XG4gICAgdmFyIHVyaSA9IGNvbnN0cnVjdFRlbXBsYXRlVXJsKGF0dHJpYnV0ZXMubWVkaWEgfHwgJycsIHRlbXBsYXRlVmFsdWVzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXJpOiB1cmksXG4gICAgICB0aW1lbGluZTogc2VnbWVudC50aW1lbGluZSxcbiAgICAgIGR1cmF0aW9uOiBzZWdtZW50LmR1cmF0aW9uLFxuICAgICAgcmVzb2x2ZWRVcmk6IHJlc29sdmVVcmwoYXR0cmlidXRlcy5iYXNlVXJsIHx8ICcnLCB1cmkpLFxuICAgICAgbWFwOiBtYXBTZWdtZW50LFxuICAgICAgbnVtYmVyOiBzZWdtZW50Lm51bWJlclxuICAgIH07XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIDxTZWdtZW50VXJsPiAob2YgdHlwZSBVUkxUeXBlIGZyb20gdGhlIERBU0ggc3BlYyA1LjMuOS4yIFRhYmxlIDE0KVxuICogdG8gYW4gb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgb3V0cHV0IG9mIGEgc2VnbWVudCBpbiB2aWRlb2pzL21wZC1wYXJzZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xuICogICBPYmplY3QgY29udGFpbmluZyBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVcbiAqICAgbmFtZXMgYXMga2V5c1xuICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnRVcmxcbiAqICAgPFNlZ21lbnRVUkw+IG5vZGUgdG8gdHJhbnNsYXRlIGludG8gYSBzZWdtZW50IG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSB0cmFuc2xhdGVkIHNlZ21lbnQgb2JqZWN0XG4gKi9cblxudmFyIFNlZ21lbnRVUkxUb1NlZ21lbnRPYmplY3QgPSBmdW5jdGlvbiBTZWdtZW50VVJMVG9TZWdtZW50T2JqZWN0KGF0dHJpYnV0ZXMsIHNlZ21lbnRVcmwpIHtcbiAgdmFyIGJhc2VVcmwgPSBhdHRyaWJ1dGVzLmJhc2VVcmwsXG4gICAgICBfYXR0cmlidXRlcyRpbml0aWFsaXogPSBhdHRyaWJ1dGVzLmluaXRpYWxpemF0aW9uLFxuICAgICAgaW5pdGlhbGl6YXRpb24gPSBfYXR0cmlidXRlcyRpbml0aWFsaXogPT09IHZvaWQgMCA/IHt9IDogX2F0dHJpYnV0ZXMkaW5pdGlhbGl6O1xuICB2YXIgaW5pdFNlZ21lbnQgPSB1cmxUeXBlVG9TZWdtZW50KHtcbiAgICBiYXNlVXJsOiBiYXNlVXJsLFxuICAgIHNvdXJjZTogaW5pdGlhbGl6YXRpb24uc291cmNlVVJMLFxuICAgIHJhbmdlOiBpbml0aWFsaXphdGlvbi5yYW5nZVxuICB9KTtcbiAgdmFyIHNlZ21lbnQgPSB1cmxUeXBlVG9TZWdtZW50KHtcbiAgICBiYXNlVXJsOiBiYXNlVXJsLFxuICAgIHNvdXJjZTogc2VnbWVudFVybC5tZWRpYSxcbiAgICByYW5nZTogc2VnbWVudFVybC5tZWRpYVJhbmdlXG4gIH0pO1xuICBzZWdtZW50Lm1hcCA9IGluaXRTZWdtZW50O1xuICByZXR1cm4gc2VnbWVudDtcbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2Ygc2VnbWVudHMgdXNpbmcgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIFNlZ21lbnRMaXN0IGVsZW1lbnRcbiAqIFNlZ21lbnRMaXN0IChEQVNIIFNQRUMgU2VjdGlvbiA1LjMuOS4zLjIpIGNvbnRhaW5zIGEgc2V0IG9mIDxTZWdtZW50VVJMPiBub2Rlcy4gIEVhY2hcbiAqIG5vZGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgaW50byBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiAgIE9iamVjdCBjb250YWluaW5nIGFsbCBpbmhlcml0ZWQgYXR0cmlidXRlcyBmcm9tIHBhcmVudCBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZVxuICogICBuYW1lcyBhcyBrZXlzXG4gKiBAcGFyYW0ge09iamVjdFtdfHVuZGVmaW5lZH0gc2VnbWVudFRpbWVsaW5lXG4gKiAgICAgICAgTGlzdCBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgYXR0cmlidXRlcyBvZiBlYWNoIFMgZWxlbWVudCBjb250YWluZWQgd2l0aGluXG4gKiAgICAgICAgdGhlIFNlZ21lbnRUaW1lbGluZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3QuPEFycmF5Pn0gbGlzdCBvZiBzZWdtZW50c1xuICovXG5cblxudmFyIHNlZ21lbnRzRnJvbUxpc3QgPSBmdW5jdGlvbiBzZWdtZW50c0Zyb21MaXN0KGF0dHJpYnV0ZXMsIHNlZ21lbnRUaW1lbGluZSkge1xuICB2YXIgZHVyYXRpb24gPSBhdHRyaWJ1dGVzLmR1cmF0aW9uLFxuICAgICAgX2F0dHJpYnV0ZXMkc2VnbWVudFVyID0gYXR0cmlidXRlcy5zZWdtZW50VXJscyxcbiAgICAgIHNlZ21lbnRVcmxzID0gX2F0dHJpYnV0ZXMkc2VnbWVudFVyID09PSB2b2lkIDAgPyBbXSA6IF9hdHRyaWJ1dGVzJHNlZ21lbnRVcjsgLy8gUGVyIHNwZWMgKDUuMy45LjIuMSkgbm8gd2F5IHRvIGRldGVybWluZSBzZWdtZW50IGR1cmF0aW9uIE9SXG4gIC8vIGlmIGJvdGggU2VnbWVudFRpbWVsaW5lIGFuZCBAZHVyYXRpb24gYXJlIGRlZmluZWQsIGl0IGlzIG91dHNpZGUgb2Ygc3BlYy5cblxuICBpZiAoIWR1cmF0aW9uICYmICFzZWdtZW50VGltZWxpbmUgfHwgZHVyYXRpb24gJiYgc2VnbWVudFRpbWVsaW5lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5TRUdNRU5UX1RJTUVfVU5TUEVDSUZJRUQpO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRVcmxNYXAgPSBzZWdtZW50VXJscy5tYXAoZnVuY3Rpb24gKHNlZ21lbnRVcmxPYmplY3QpIHtcbiAgICByZXR1cm4gU2VnbWVudFVSTFRvU2VnbWVudE9iamVjdChhdHRyaWJ1dGVzLCBzZWdtZW50VXJsT2JqZWN0KTtcbiAgfSk7XG4gIHZhciBzZWdtZW50VGltZUluZm87XG5cbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgc2VnbWVudFRpbWVJbmZvID0gcGFyc2VCeUR1cmF0aW9uKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRUaW1lbGluZSkge1xuICAgIHNlZ21lbnRUaW1lSW5mbyA9IHBhcnNlQnlUaW1lbGluZShhdHRyaWJ1dGVzLCBzZWdtZW50VGltZWxpbmUpO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gc2VnbWVudFRpbWVJbmZvLm1hcChmdW5jdGlvbiAoc2VnbWVudFRpbWUsIGluZGV4KSB7XG4gICAgaWYgKHNlZ21lbnRVcmxNYXBbaW5kZXhdKSB7XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRVcmxNYXBbaW5kZXhdO1xuICAgICAgc2VnbWVudC50aW1lbGluZSA9IHNlZ21lbnRUaW1lLnRpbWVsaW5lO1xuICAgICAgc2VnbWVudC5kdXJhdGlvbiA9IHNlZ21lbnRUaW1lLmR1cmF0aW9uO1xuICAgICAgc2VnbWVudC5udW1iZXIgPSBzZWdtZW50VGltZS5udW1iZXI7XG4gICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9IC8vIFNpbmNlIHdlJ3JlIG1hcHBpbmcgd2Ugc2hvdWxkIGdldCByaWQgb2YgYW55IGJsYW5rIHNlZ21lbnRzIChpbiBjYXNlXG4gICAgLy8gdGhlIGdpdmVuIFNlZ21lbnRUaW1lbGluZSBpcyBoYW5kbGluZyBmb3IgbW9yZSBlbGVtZW50cyB0aGFuIHdlIGhhdmVcbiAgICAvLyBTZWdtZW50VVJMcyBmb3IpLlxuXG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgIHJldHVybiBzZWdtZW50O1xuICB9KTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xufTtcblxudmFyIGdlbmVyYXRlU2VnbWVudHMgPSBmdW5jdGlvbiBnZW5lcmF0ZVNlZ21lbnRzKF9yZWYpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBfcmVmLmF0dHJpYnV0ZXMsXG4gICAgICBzZWdtZW50SW5mbyA9IF9yZWYuc2VnbWVudEluZm87XG4gIHZhciBzZWdtZW50QXR0cmlidXRlcztcbiAgdmFyIHNlZ21lbnRzRm47XG5cbiAgaWYgKHNlZ21lbnRJbmZvLnRlbXBsYXRlKSB7XG4gICAgc2VnbWVudHNGbiA9IHNlZ21lbnRzRnJvbVRlbXBsYXRlO1xuICAgIHNlZ21lbnRBdHRyaWJ1dGVzID0gbWVyZ2UoYXR0cmlidXRlcywgc2VnbWVudEluZm8udGVtcGxhdGUpO1xuICB9IGVsc2UgaWYgKHNlZ21lbnRJbmZvLmJhc2UpIHtcbiAgICBzZWdtZW50c0ZuID0gc2VnbWVudHNGcm9tQmFzZTtcbiAgICBzZWdtZW50QXR0cmlidXRlcyA9IG1lcmdlKGF0dHJpYnV0ZXMsIHNlZ21lbnRJbmZvLmJhc2UpO1xuICB9IGVsc2UgaWYgKHNlZ21lbnRJbmZvLmxpc3QpIHtcbiAgICBzZWdtZW50c0ZuID0gc2VnbWVudHNGcm9tTGlzdDtcbiAgICBzZWdtZW50QXR0cmlidXRlcyA9IG1lcmdlKGF0dHJpYnV0ZXMsIHNlZ21lbnRJbmZvLmxpc3QpO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzSW5mbyA9IHtcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzXG4gIH07XG5cbiAgaWYgKCFzZWdtZW50c0ZuKSB7XG4gICAgcmV0dXJuIHNlZ21lbnRzSW5mbztcbiAgfVxuXG4gIHZhciBzZWdtZW50cyA9IHNlZ21lbnRzRm4oc2VnbWVudEF0dHJpYnV0ZXMsIHNlZ21lbnRJbmZvLnRpbWVsaW5lKTsgLy8gVGhlIEBkdXJhdGlvbiBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluIHRoZSBwbGF5bGlzdCdzIHRhcmdldER1cmF0aW9uIHdoaWNoXG4gIC8vIG11c3QgYmUgaW4gc2Vjb25kcy4gU2luY2Ugd2UndmUgZ2VuZXJhdGVkIHRoZSBzZWdtZW50IGxpc3QsIHdlIG5vIGxvbmdlciBuZWVkXG4gIC8vIEBkdXJhdGlvbiB0byBiZSBpbiBAdGltZXNjYWxlIHVuaXRzLCBzbyB3ZSBjYW4gY29udmVydCBpdCBoZXJlLlxuXG4gIGlmIChzZWdtZW50QXR0cmlidXRlcy5kdXJhdGlvbikge1xuICAgIHZhciBfc2VnbWVudEF0dHJpYnV0ZXMgPSBzZWdtZW50QXR0cmlidXRlcyxcbiAgICAgICAgZHVyYXRpb24gPSBfc2VnbWVudEF0dHJpYnV0ZXMuZHVyYXRpb24sXG4gICAgICAgIF9zZWdtZW50QXR0cmlidXRlcyR0aSA9IF9zZWdtZW50QXR0cmlidXRlcy50aW1lc2NhbGUsXG4gICAgICAgIHRpbWVzY2FsZSA9IF9zZWdtZW50QXR0cmlidXRlcyR0aSA9PT0gdm9pZCAwID8gMSA6IF9zZWdtZW50QXR0cmlidXRlcyR0aTtcbiAgICBzZWdtZW50QXR0cmlidXRlcy5kdXJhdGlvbiA9IGR1cmF0aW9uIC8gdGltZXNjYWxlO1xuICB9IGVsc2UgaWYgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgIC8vIGlmIHRoZXJlIGlzIG5vIEBkdXJhdGlvbiBhdHRyaWJ1dGUsIHVzZSB0aGUgbGFyZ2VzdCBzZWdtZW50IGR1cmF0aW9uIGFzXG4gICAgLy8gYXMgdGFyZ2V0IGR1cmF0aW9uXG4gICAgc2VnbWVudEF0dHJpYnV0ZXMuZHVyYXRpb24gPSBzZWdtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKG1heCwgc2VnbWVudCkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KG1heCwgTWF0aC5jZWlsKHNlZ21lbnQuZHVyYXRpb24pKTtcbiAgICB9LCAwKTtcbiAgfSBlbHNlIHtcbiAgICBzZWdtZW50QXR0cmlidXRlcy5kdXJhdGlvbiA9IDA7XG4gIH1cblxuICBzZWdtZW50c0luZm8uYXR0cmlidXRlcyA9IHNlZ21lbnRBdHRyaWJ1dGVzO1xuICBzZWdtZW50c0luZm8uc2VnbWVudHMgPSBzZWdtZW50czsgLy8gVGhpcyBpcyBhIHNpZHggYm94IHdpdGhvdXQgYWN0dWFsIHNlZ21lbnQgaW5mb3JtYXRpb25cblxuICBpZiAoc2VnbWVudEluZm8uYmFzZSAmJiBzZWdtZW50QXR0cmlidXRlcy5pbmRleFJhbmdlKSB7XG4gICAgc2VnbWVudHNJbmZvLnNpZHggPSBzZWdtZW50c1swXTtcbiAgICBzZWdtZW50c0luZm8uc2VnbWVudHMgPSBbXTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50c0luZm87XG59O1xudmFyIHRvUGxheWxpc3RzID0gZnVuY3Rpb24gdG9QbGF5bGlzdHMocmVwcmVzZW50YXRpb25zKSB7XG4gIHJldHVybiByZXByZXNlbnRhdGlvbnMubWFwKGdlbmVyYXRlU2VnbWVudHMpO1xufTtcblxudmFyIGZpbmRDaGlsZHJlbiA9IGZ1bmN0aW9uIGZpbmRDaGlsZHJlbihlbGVtZW50LCBuYW1lKSB7XG4gIHJldHVybiBmcm9tKGVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHRhZ05hbWUgPSBfcmVmLnRhZ05hbWU7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT09IG5hbWU7XG4gIH0pO1xufTtcbnZhciBnZXRDb250ZW50ID0gZnVuY3Rpb24gZ2V0Q29udGVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50LnRyaW0oKTtcbn07XG5cbnZhciBwYXJzZUR1cmF0aW9uID0gZnVuY3Rpb24gcGFyc2VEdXJhdGlvbihzdHIpIHtcbiAgdmFyIFNFQ09ORFNfSU5fWUVBUiA9IDM2NSAqIDI0ICogNjAgKiA2MDtcbiAgdmFyIFNFQ09ORFNfSU5fTU9OVEggPSAzMCAqIDI0ICogNjAgKiA2MDtcbiAgdmFyIFNFQ09ORFNfSU5fREFZID0gMjQgKiA2MCAqIDYwO1xuICB2YXIgU0VDT05EU19JTl9IT1VSID0gNjAgKiA2MDtcbiAgdmFyIFNFQ09ORFNfSU5fTUlOID0gNjA7IC8vIFAxMFkxME0xMERUMTBIMTBNMTAuMVNcblxuICB2YXIgZHVyYXRpb25SZWdleCA9IC9QKD86KFxcZCopWSk/KD86KFxcZCopTSk/KD86KFxcZCopRCk/KD86VCg/OihcXGQqKUgpPyg/OihcXGQqKU0pPyg/OihbXFxkLl0qKVMpPyk/LztcbiAgdmFyIG1hdGNoID0gZHVyYXRpb25SZWdleC5leGVjKHN0cik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIF9tYXRjaCRzbGljZSA9IG1hdGNoLnNsaWNlKDEpLFxuICAgICAgeWVhciA9IF9tYXRjaCRzbGljZVswXSxcbiAgICAgIG1vbnRoID0gX21hdGNoJHNsaWNlWzFdLFxuICAgICAgZGF5ID0gX21hdGNoJHNsaWNlWzJdLFxuICAgICAgaG91ciA9IF9tYXRjaCRzbGljZVszXSxcbiAgICAgIG1pbnV0ZSA9IF9tYXRjaCRzbGljZVs0XSxcbiAgICAgIHNlY29uZCA9IF9tYXRjaCRzbGljZVs1XTtcblxuICByZXR1cm4gcGFyc2VGbG9hdCh5ZWFyIHx8IDApICogU0VDT05EU19JTl9ZRUFSICsgcGFyc2VGbG9hdChtb250aCB8fCAwKSAqIFNFQ09ORFNfSU5fTU9OVEggKyBwYXJzZUZsb2F0KGRheSB8fCAwKSAqIFNFQ09ORFNfSU5fREFZICsgcGFyc2VGbG9hdChob3VyIHx8IDApICogU0VDT05EU19JTl9IT1VSICsgcGFyc2VGbG9hdChtaW51dGUgfHwgMCkgKiBTRUNPTkRTX0lOX01JTiArIHBhcnNlRmxvYXQoc2Vjb25kIHx8IDApO1xufTtcbnZhciBwYXJzZURhdGUgPSBmdW5jdGlvbiBwYXJzZURhdGUoc3RyKSB7XG4gIC8vIERhdGUgZm9ybWF0IHdpdGhvdXQgdGltZXpvbmUgYWNjb3JkaW5nIHRvIElTTyA4NjAxXG4gIC8vIFlZWS1NTS1ERFRoaDptbTpzcy5zc3Nzc3NcbiAgdmFyIGRhdGVSZWdleCA9IC9eXFxkKy1cXGQrLVxcZCtUXFxkKzpcXGQrOlxcZCsoXFwuXFxkKyk/JC87IC8vIElmIHRoZSBkYXRlIHN0cmluZyBkb2VzIG5vdCBzcGVjaWZpeSBhIHRpbWV6b25lLCB3ZSBtdXN0IHNwZWNpZml5IFVUQy4gVGhpcyBpc1xuICAvLyBleHByZXNzZWQgYnkgZW5kaW5nIHdpdGggJ1onXG5cbiAgaWYgKGRhdGVSZWdleC50ZXN0KHN0cikpIHtcbiAgICBzdHIgKz0gJ1onO1xuICB9XG5cbiAgcmV0dXJuIERhdGUucGFyc2Uoc3RyKTtcbn07XG5cbnZhciBwYXJzZXJzID0ge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgZW50aXJlIE1lZGlhIFByZXNlbnRhdGlvbi4gRm9ybWF0IGlzIGEgZHVyYXRpb24gc3RyaW5nXG4gICAqIGFzIHNwZWNpZmllZCBpbiBJU08gODYwMVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogICAgICAgIHZhbHVlIG9mIGF0dHJpYnV0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHNcbiAgICovXG4gIG1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb246IGZ1bmN0aW9uIG1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VEdXJhdGlvbih2YWx1ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgU2VnbWVudCBhdmFpbGFiaWxpdHkgc3RhcnQgdGltZSBmb3IgYWxsIFNlZ21lbnRzIHJlZmVycmVkIHRvIGluIHRoaXNcbiAgICogTVBELiBGb3IgYSBkeW5hbWljIG1hbmlmZXN0LCBpdCBzcGVjaWZpZXMgdGhlIGFuY2hvciBmb3IgdGhlIGVhcmxpZXN0IGF2YWlsYWJpbGl0eVxuICAgKiB0aW1lLiBGb3JtYXQgaXMgYSBkYXRlIHN0cmluZyBhcyBzcGVjaWZpZWQgaW4gSVNPIDg2MDFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqICAgICAgICB2YWx1ZSBvZiBhdHRyaWJ1dGUgYXMgYSBzdHJpbmdcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBkYXRlIGFzIHNlY29uZHMgZnJvbSB1bml4IGVwb2NoXG4gICAqL1xuICBhdmFpbGFiaWxpdHlTdGFydFRpbWU6IGZ1bmN0aW9uIGF2YWlsYWJpbGl0eVN0YXJ0VGltZSh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZURhdGUodmFsdWUpIC8gMTAwMDtcbiAgfSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzbWFsbGVzdCBwZXJpb2QgYmV0d2VlbiBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgTVBELiBGb3JtYXQgaXMgYVxuICAgKiBkdXJhdGlvbiBzdHJpbmcgYXMgc3BlY2lmaWVkIGluIElTTyA4NjAxXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kc1xuICAgKi9cbiAgbWluaW11bVVwZGF0ZVBlcmlvZDogZnVuY3Rpb24gbWluaW11bVVwZGF0ZVBlcmlvZCh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUR1cmF0aW9uKHZhbHVlKTtcbiAgfSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgc21hbGxlc3QgdGltZSBzaGlmdGluZyBidWZmZXIgZm9yIGFueSBSZXByZXNlbnRhdGlvblxuICAgKiBpbiB0aGUgTVBELiBGb3JtYXQgaXMgYSBkdXJhdGlvbiBzdHJpbmcgYXMgc3BlY2lmaWVkIGluIElTTyA4NjAxXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kc1xuICAgKi9cbiAgdGltZVNoaWZ0QnVmZmVyRGVwdGg6IGZ1bmN0aW9uIHRpbWVTaGlmdEJ1ZmZlckRlcHRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRHVyYXRpb24odmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIFBlcmlvZFN0YXJ0IHRpbWUgb2YgdGhlIFBlcmlvZCByZWxhdGl2ZSB0byB0aGUgYXZhaWxhYmlsaXR5U3RhcnR0aW1lLlxuICAgKiBGb3JtYXQgaXMgYSBkdXJhdGlvbiBzdHJpbmcgYXMgc3BlY2lmaWVkIGluIElTTyA4NjAxXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kc1xuICAgKi9cbiAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRHVyYXRpb24odmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSB2aXN1YWwgcHJlc2VudGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgcGFyc2VkIHdpZHRoXG4gICAqL1xuICB3aWR0aDogZnVuY3Rpb24gd2lkdGgodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgdGhlIHZpc3VhbCBwcmVzZW50YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqICAgICAgICB2YWx1ZSBvZiBhdHRyaWJ1dGUgYXMgYSBzdHJpbmdcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBwYXJzZWQgaGVpZ2h0XG4gICAqL1xuICBoZWlnaHQ6IGZ1bmN0aW9uIGhlaWdodCh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGJpdHJhdGUgb2YgdGhlIHJlcHJlc2VudGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgcGFyc2VkIGJhbmR3aWR0aFxuICAgKi9cbiAgYmFuZHdpZHRoOiBmdW5jdGlvbiBiYW5kd2lkdGgodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IE1lZGlhIFNlZ21lbnQgaW4gdGhpcyBSZXByZXNlbnRhdGlvbiBpbiB0aGUgUGVyaW9kXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgcGFyc2VkIG51bWJlclxuICAgKi9cbiAgc3RhcnROdW1iZXI6IGZ1bmN0aW9uIHN0YXJ0TnVtYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGltZXNjYWxlIGluIHVuaXRzIHBlciBzZWNvbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgdmFsdWUgb2YgYXR0cmlidXRlIGFzIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgYXByc2VkIHRpbWVzY2FsZVxuICAgKi9cbiAgdGltZXNjYWxlOiBmdW5jdGlvbiB0aW1lc2NhbGUodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSxcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBjb25zdGFudCBhcHByb3hpbWF0ZSBTZWdtZW50IGR1cmF0aW9uXG4gICAqIE5PVEU6IFRoZSA8UGVyaW9kPiBlbGVtZW50IGFsc28gY29udGFpbnMgYW4gQGR1cmF0aW9uIGF0dHJpYnV0ZS4gVGhpcyBkdXJhdGlvblxuICAgKiAgICAgICBzcGVjaWZpZXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBQZXJpb2QuIFRoaXMgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBub3RcbiAgICogICAgICAgc3VwcG9ydGVkIGJ5IHRoZSByZXN0IG9mIHRoZSBwYXJzZXIsIGhvd2V2ZXIgd2Ugc3RpbGwgY2hlY2sgZm9yIGl0IHRvIHByZXZlbnRcbiAgICogICAgICAgZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogICAgICAgIHZhbHVlIG9mIGF0dHJpYnV0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIHBhcnNlZCBkdXJhdGlvblxuICAgKi9cbiAgZHVyYXRpb246IGZ1bmN0aW9uIGR1cmF0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHBhcnNlZFZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcblxuICAgIGlmIChpc05hTihwYXJzZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZUR1cmF0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgU2VnbWVudCBkdXJhdGlvbiwgaW4gdW5pdHMgb2YgdGhlIHZhbHVlIG9mIHRoZSBAdGltZXNjYWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogICAgICAgIHZhbHVlIG9mIGF0dHJpYnV0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIHBhcnNlZCBkdXJhdGlvblxuICAgKi9cbiAgZDogZnVuY3Rpb24gZCh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIE1QRCBzdGFydCB0aW1lLCBpbiBAdGltZXNjYWxlIHVuaXRzLCB0aGUgZmlyc3QgU2VnbWVudCBpbiB0aGUgc2VyaWVzXG4gICAqIHN0YXJ0cyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBQZXJpb2RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqICAgICAgICB2YWx1ZSBvZiBhdHRyaWJ1dGUgYXMgYSBzdHJpbmdcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBwYXJzZWQgdGltZVxuICAgKi9cbiAgdDogZnVuY3Rpb24gdCh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHJlcGVhdCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZvbGxvd2luZyBjb250aWd1b3VzIFNlZ21lbnRzIHdpdGggdGhlXG4gICAqIHNhbWUgZHVyYXRpb24gZXhwcmVzc2VkIGJ5IHRoZSB2YWx1ZSBvZiBAZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogICAgICAgIHZhbHVlIG9mIGF0dHJpYnV0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIHBhcnNlZCBudW1iZXJcbiAgICovXG4gIHI6IGZ1bmN0aW9uIHIodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSxcblxuICAvKipcbiAgICogRGVmYXVsdCBwYXJzZXIgZm9yIGFsbCBvdGhlciBhdHRyaWJ1dGVzLiBBY3RzIGFzIGEgbm8tb3AgYW5kIGp1c3QgcmV0dXJucyB0aGUgdmFsdWVcbiAgICogYXMgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqICAgICAgICB2YWx1ZSBvZiBhdHRyaWJ1dGUgYXMgYSBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFVucGFyc2VkIHZhbHVlXG4gICAqL1xuICBERUZBVUxUOiBmdW5jdGlvbiBERUZBVUxUKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuLyoqXG4gKiBHZXRzIGFsbCB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWVzIG9mIHRoZSBwcm92aWRlZCBub2RlLCBwYXJzZXMgYXR0cmlidXRlcyB3aXRoIGtub3duXG4gKiB0eXBlcywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlIG5hbWVzIG1hcHBlZCB0byB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBlbFxuICogICAgICAgIFRoZSBub2RlIHRvIHBhcnNlIGF0dHJpYnV0ZXMgZnJvbVxuICogQHJldHVybiB7T2JqZWN0fVxuICogICAgICAgICBPYmplY3Qgd2l0aCBhbGwgYXR0cmlidXRlcyBvZiBlbCBwYXJzZWRcbiAqL1xuXG52YXIgcGFyc2VBdHRyaWJ1dGVzID0gZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVzKGVsKSB7XG4gIGlmICghKGVsICYmIGVsLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGZyb20oZWwuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uIChhLCBlKSB7XG4gICAgdmFyIHBhcnNlRm4gPSBwYXJzZXJzW2UubmFtZV0gfHwgcGFyc2Vycy5ERUZBVUxUO1xuICAgIGFbZS5uYW1lXSA9IHBhcnNlRm4oZS52YWx1ZSk7XG4gICAgcmV0dXJuIGE7XG4gIH0sIHt9KTtcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUI2NFRvVWludDhBcnJheShiNjRUZXh0KSB7XG4gIHZhciBkZWNvZGVkU3RyaW5nID0gd2luZG93JDEuYXRvYihiNjRUZXh0KTtcbiAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZGVjb2RlZFN0cmluZy5sZW5ndGgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjb2RlZFN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgIGFycmF5W2ldID0gZGVjb2RlZFN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG52YXIga2V5U3lzdGVtc01hcCA9IHtcbiAgJ3Vybjp1dWlkOjEwNzdlZmVjLWMwYjItNGQwMi1hY2UzLTNjMWU1MmUyZmI0Yic6ICdvcmcudzMuY2xlYXJrZXknLFxuICAndXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkJzogJ2NvbS53aWRldmluZS5hbHBoYScsXG4gICd1cm46dXVpZDo5YTA0ZjA3OS05ODQwLTQyODYtYWI5Mi1lNjViZTA4ODVmOTUnOiAnY29tLm1pY3Jvc29mdC5wbGF5cmVhZHknLFxuICAndXJuOnV1aWQ6ZjIzOWU3NjktZWZhMy00ODUwLTljMTYtYTkwM2M2OTMyZWZiJzogJ2NvbS5hZG9iZS5wcmltZXRpbWUnXG59O1xuLyoqXG4gKiBCdWlsZHMgYSBsaXN0IG9mIHVybHMgdGhhdCBpcyB0aGUgcHJvZHVjdCBvZiB0aGUgcmVmZXJlbmNlIHVybHMgYW5kIEJhc2VVUkwgdmFsdWVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcmVmZXJlbmNlVXJsc1xuICogICAgICAgIExpc3Qgb2YgcmVmZXJlbmNlIHVybHMgdG8gcmVzb2x2ZSB0b1xuICogQHBhcmFtIHtOb2RlW119IGJhc2VVcmxFbGVtZW50c1xuICogICAgICAgIExpc3Qgb2YgQmFzZVVSTCBub2RlcyBmcm9tIHRoZSBtcGRcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICogICAgICAgICBMaXN0IG9mIHJlc29sdmVkIHVybHNcbiAqL1xuXG52YXIgYnVpbGRCYXNlVXJscyA9IGZ1bmN0aW9uIGJ1aWxkQmFzZVVybHMocmVmZXJlbmNlVXJscywgYmFzZVVybEVsZW1lbnRzKSB7XG4gIGlmICghYmFzZVVybEVsZW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiByZWZlcmVuY2VVcmxzO1xuICB9XG5cbiAgcmV0dXJuIGZsYXR0ZW4ocmVmZXJlbmNlVXJscy5tYXAoZnVuY3Rpb24gKHJlZmVyZW5jZSkge1xuICAgIHJldHVybiBiYXNlVXJsRWxlbWVudHMubWFwKGZ1bmN0aW9uIChiYXNlVXJsRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVVcmwocmVmZXJlbmNlLCBnZXRDb250ZW50KGJhc2VVcmxFbGVtZW50KSk7XG4gICAgfSk7XG4gIH0pKTtcbn07XG4vKipcbiAqIENvbnRhaW5zIGFsbCBTZWdtZW50IGluZm9ybWF0aW9uIGZvciBpdHMgY29udGFpbmluZyBBZGFwdGF0aW9uU2V0XG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VnbWVudEluZm9ybWF0aW9uXG4gKiBAcHJvcGVydHkge09iamVjdHx1bmRlZmluZWR9IHRlbXBsYXRlXG4gKiAgICAgICAgICAgQ29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBTZWdtZW50VGVtcGxhdGUgbm9kZVxuICogQHByb3BlcnR5IHtPYmplY3RbXXx1bmRlZmluZWR9IHRpbWVsaW5lXG4gKiAgICAgICAgICAgQ29udGFpbnMgYSBsaXN0IG9mIGF0cnJpYnV0ZXMgZm9yIGVhY2ggUyBub2RlIHdpdGhpbiB0aGUgU2VnbWVudFRpbWVsaW5lIG5vZGVcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fHVuZGVmaW5lZH0gbGlzdFxuICogICAgICAgICAgIENvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgU2VnbWVudExpc3Qgbm9kZVxuICogQHByb3BlcnR5IHtPYmplY3R8dW5kZWZpbmVkfSBiYXNlXG4gKiAgICAgICAgICAgQ29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBTZWdtZW50QmFzZSBub2RlXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBhdmFpbGFibGUgU2VnbWVudCBpbmZvcm1hdGlvbiBjb250YWluZWQgd2l0aGluIHRoZSBBZGFwdGF0aW9uU2V0IG5vZGVcbiAqXG4gKiBAcGFyYW0ge05vZGV9IGFkYXB0YXRpb25TZXRcbiAqICAgICAgICBUaGUgQWRhcHRhdGlvblNldCBub2RlIHRvIGdldCBTZWdtZW50IGluZm9ybWF0aW9uIGZyb21cbiAqIEByZXR1cm4ge1NlZ21lbnRJbmZvcm1hdGlvbn1cbiAqICAgICAgICAgVGhlIFNlZ21lbnQgaW5mb3JtYXRpb24gY29udGFpbmVkIHdpdGhpbiB0aGUgcHJvdmlkZWQgQWRhcHRhdGlvblNldFxuICovXG5cbnZhciBnZXRTZWdtZW50SW5mb3JtYXRpb24gPSBmdW5jdGlvbiBnZXRTZWdtZW50SW5mb3JtYXRpb24oYWRhcHRhdGlvblNldCkge1xuICB2YXIgc2VnbWVudFRlbXBsYXRlID0gZmluZENoaWxkcmVuKGFkYXB0YXRpb25TZXQsICdTZWdtZW50VGVtcGxhdGUnKVswXTtcbiAgdmFyIHNlZ21lbnRMaXN0ID0gZmluZENoaWxkcmVuKGFkYXB0YXRpb25TZXQsICdTZWdtZW50TGlzdCcpWzBdO1xuICB2YXIgc2VnbWVudFVybHMgPSBzZWdtZW50TGlzdCAmJiBmaW5kQ2hpbGRyZW4oc2VnbWVudExpc3QsICdTZWdtZW50VVJMJykubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIG1lcmdlKHtcbiAgICAgIHRhZzogJ1NlZ21lbnRVUkwnXG4gICAgfSwgcGFyc2VBdHRyaWJ1dGVzKHMpKTtcbiAgfSk7XG4gIHZhciBzZWdtZW50QmFzZSA9IGZpbmRDaGlsZHJlbihhZGFwdGF0aW9uU2V0LCAnU2VnbWVudEJhc2UnKVswXTtcbiAgdmFyIHNlZ21lbnRUaW1lbGluZVBhcmVudE5vZGUgPSBzZWdtZW50TGlzdCB8fCBzZWdtZW50VGVtcGxhdGU7XG4gIHZhciBzZWdtZW50VGltZWxpbmUgPSBzZWdtZW50VGltZWxpbmVQYXJlbnROb2RlICYmIGZpbmRDaGlsZHJlbihzZWdtZW50VGltZWxpbmVQYXJlbnROb2RlLCAnU2VnbWVudFRpbWVsaW5lJylbMF07XG4gIHZhciBzZWdtZW50SW5pdGlhbGl6YXRpb25QYXJlbnROb2RlID0gc2VnbWVudExpc3QgfHwgc2VnbWVudEJhc2UgfHwgc2VnbWVudFRlbXBsYXRlO1xuICB2YXIgc2VnbWVudEluaXRpYWxpemF0aW9uID0gc2VnbWVudEluaXRpYWxpemF0aW9uUGFyZW50Tm9kZSAmJiBmaW5kQ2hpbGRyZW4oc2VnbWVudEluaXRpYWxpemF0aW9uUGFyZW50Tm9kZSwgJ0luaXRpYWxpemF0aW9uJylbMF07IC8vIFNlZ21lbnRUZW1wbGF0ZSBpcyBoYW5kbGVkIHNsaWdodGx5IGRpZmZlcmVudGx5LCBzaW5jZSBpdCBjYW4gaGF2ZSBib3RoXG4gIC8vIEBpbml0aWFsaXphdGlvbiBhbmQgYW4gPEluaXRpYWxpemF0aW9uPiBub2RlLiAgQGluaXRpYWxpemF0aW9uIGNhbiBiZSB0ZW1wbGF0ZWQsXG4gIC8vIHdoaWxlIHRoZSBub2RlIGNhbiBoYXZlIGEgdXJsIGFuZCByYW5nZSBzcGVjaWZpZWQuICBJZiB0aGUgPFNlZ21lbnRUZW1wbGF0ZT4gaGFzXG4gIC8vIGJvdGggQGluaXRpYWxpemF0aW9uIGFuZCBhbiA8SW5pdGlhbGl6YXRpb24+IHN1YmVsZW1lbnQgd2Ugb3B0IHRvIG92ZXJyaWRlIHdpdGhcbiAgLy8gdGhlIG5vZGUsIGFzIHRoaXMgaW50ZXJhY3Rpb24gaXMgbm90IGRlZmluZWQgaW4gdGhlIHNwZWMuXG5cbiAgdmFyIHRlbXBsYXRlID0gc2VnbWVudFRlbXBsYXRlICYmIHBhcnNlQXR0cmlidXRlcyhzZWdtZW50VGVtcGxhdGUpO1xuXG4gIGlmICh0ZW1wbGF0ZSAmJiBzZWdtZW50SW5pdGlhbGl6YXRpb24pIHtcbiAgICB0ZW1wbGF0ZS5pbml0aWFsaXphdGlvbiA9IHNlZ21lbnRJbml0aWFsaXphdGlvbiAmJiBwYXJzZUF0dHJpYnV0ZXMoc2VnbWVudEluaXRpYWxpemF0aW9uKTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZSAmJiB0ZW1wbGF0ZS5pbml0aWFsaXphdGlvbikge1xuICAgIC8vIElmIGl0IGlzIEBpbml0aWFsaXphdGlvbiB3ZSBjb252ZXJ0IGl0IHRvIGFuIG9iamVjdCBzaW5jZSB0aGlzIGlzIHRoZSBmb3JtYXQgdGhhdFxuICAgIC8vIGxhdGVyIGZ1bmN0aW9ucyB3aWxsIHJlbHkgb24gZm9yIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50LiAgVGhpcyBpcyBvbmx5IHZhbGlkXG4gICAgLy8gZm9yIDxTZWdtZW50VGVtcGxhdGU+XG4gICAgdGVtcGxhdGUuaW5pdGlhbGl6YXRpb24gPSB7XG4gICAgICBzb3VyY2VVUkw6IHRlbXBsYXRlLmluaXRpYWxpemF0aW9uXG4gICAgfTtcbiAgfVxuXG4gIHZhciBzZWdtZW50SW5mbyA9IHtcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsXG4gICAgdGltZWxpbmU6IHNlZ21lbnRUaW1lbGluZSAmJiBmaW5kQ2hpbGRyZW4oc2VnbWVudFRpbWVsaW5lLCAnUycpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHBhcnNlQXR0cmlidXRlcyhzKTtcbiAgICB9KSxcbiAgICBsaXN0OiBzZWdtZW50TGlzdCAmJiBtZXJnZShwYXJzZUF0dHJpYnV0ZXMoc2VnbWVudExpc3QpLCB7XG4gICAgICBzZWdtZW50VXJsczogc2VnbWVudFVybHMsXG4gICAgICBpbml0aWFsaXphdGlvbjogcGFyc2VBdHRyaWJ1dGVzKHNlZ21lbnRJbml0aWFsaXphdGlvbilcbiAgICB9KSxcbiAgICBiYXNlOiBzZWdtZW50QmFzZSAmJiBtZXJnZShwYXJzZUF0dHJpYnV0ZXMoc2VnbWVudEJhc2UpLCB7XG4gICAgICBpbml0aWFsaXphdGlvbjogcGFyc2VBdHRyaWJ1dGVzKHNlZ21lbnRJbml0aWFsaXphdGlvbilcbiAgICB9KVxuICB9O1xuICBPYmplY3Qua2V5cyhzZWdtZW50SW5mbykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFzZWdtZW50SW5mb1trZXldKSB7XG4gICAgICBkZWxldGUgc2VnbWVudEluZm9ba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VnbWVudEluZm87XG59O1xuLyoqXG4gKiBDb250YWlucyBTZWdtZW50IGluZm9ybWF0aW9uIGFuZCBhdHRyaWJ1dGVzIG5lZWRlZCB0byBjb25zdHJ1Y3QgYSBQbGF5bGlzdCBvYmplY3RcbiAqIGZyb20gYSBSZXByZXNlbnRhdGlvblxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcHJlc2VudGF0aW9uSW5mb3JtYXRpb25cbiAqIEBwcm9wZXJ0eSB7U2VnbWVudEluZm9ybWF0aW9ufSBzZWdtZW50SW5mb1xuICogICAgICAgICAgIFNlZ21lbnQgaW5mb3JtYXRpb24gZm9yIHRoaXMgUmVwcmVzZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gKiAgICAgICAgICAgSW5oZXJpdGVkIGF0dHJpYnV0ZXMgZm9yIHRoaXMgUmVwcmVzZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIE1hcHMgYSBSZXByZXNlbnRhdGlvbiBub2RlIHRvIGFuIG9iamVjdCBjb250YWluaW5nIFNlZ21lbnQgaW5mb3JtYXRpb24gYW5kIGF0dHJpYnV0ZXNcbiAqXG4gKiBAbmFtZSBpbmhlcml0QmFzZVVybHNDYWxsYmFja1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge05vZGV9IHJlcHJlc2VudGF0aW9uXG4gKiAgICAgICAgUmVwcmVzZW50YXRpb24gbm9kZSBmcm9tIHRoZSBtcGRcbiAqIEByZXR1cm4ge1JlcHJlc2VudGF0aW9uSW5mb3JtYXRpb259XG4gKiAgICAgICAgIFJlcHJlc2VudGF0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgYSBQbGF5bGlzdCBvYmplY3RcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBjYWxsYmFjayBmb3IgQXJyYXkucHJvdG90eXBlLm1hcCBmb3IgbWFwcGluZyBSZXByZXNlbnRhdGlvbiBub2RlcyB0b1xuICogU2VnbWVudCBpbmZvcm1hdGlvbiBhbmQgYXR0cmlidXRlcyB1c2luZyBpbmhlcml0ZWQgQmFzZVVSTCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRhcHRhdGlvblNldEF0dHJpYnV0ZXNcbiAqICAgICAgICBDb250YWlucyBhdHRyaWJ1dGVzIGluaGVyaXRlZCBieSB0aGUgQWRhcHRhdGlvblNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gYWRhcHRhdGlvblNldEJhc2VVcmxzXG4gKiAgICAgICAgQ29udGFpbnMgbGlzdCBvZiByZXNvbHZlZCBiYXNlIHVybHMgaW5oZXJpdGVkIGJ5IHRoZSBBZGFwdGF0aW9uU2V0XG4gKiBAcGFyYW0ge1NlZ21lbnRJbmZvcm1hdGlvbn0gYWRhcHRhdGlvblNldFNlZ21lbnRJbmZvXG4gKiAgICAgICAgQ29udGFpbnMgU2VnbWVudCBpbmZvcm1hdGlvbiBmb3IgdGhlIEFkYXB0YXRpb25TZXRcbiAqIEByZXR1cm4ge2luaGVyaXRCYXNlVXJsc0NhbGxiYWNrfVxuICogICAgICAgICBDYWxsYmFjayBtYXAgZnVuY3Rpb25cbiAqL1xuXG52YXIgaW5oZXJpdEJhc2VVcmxzID0gZnVuY3Rpb24gaW5oZXJpdEJhc2VVcmxzKGFkYXB0YXRpb25TZXRBdHRyaWJ1dGVzLCBhZGFwdGF0aW9uU2V0QmFzZVVybHMsIGFkYXB0YXRpb25TZXRTZWdtZW50SW5mbykge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcHJlc2VudGF0aW9uKSB7XG4gICAgdmFyIHJlcEJhc2VVcmxFbGVtZW50cyA9IGZpbmRDaGlsZHJlbihyZXByZXNlbnRhdGlvbiwgJ0Jhc2VVUkwnKTtcbiAgICB2YXIgcmVwQmFzZVVybHMgPSBidWlsZEJhc2VVcmxzKGFkYXB0YXRpb25TZXRCYXNlVXJscywgcmVwQmFzZVVybEVsZW1lbnRzKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IG1lcmdlKGFkYXB0YXRpb25TZXRBdHRyaWJ1dGVzLCBwYXJzZUF0dHJpYnV0ZXMocmVwcmVzZW50YXRpb24pKTtcbiAgICB2YXIgcmVwcmVzZW50YXRpb25TZWdtZW50SW5mbyA9IGdldFNlZ21lbnRJbmZvcm1hdGlvbihyZXByZXNlbnRhdGlvbik7XG4gICAgcmV0dXJuIHJlcEJhc2VVcmxzLm1hcChmdW5jdGlvbiAoYmFzZVVybCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VnbWVudEluZm86IG1lcmdlKGFkYXB0YXRpb25TZXRTZWdtZW50SW5mbywgcmVwcmVzZW50YXRpb25TZWdtZW50SW5mbyksXG4gICAgICAgIGF0dHJpYnV0ZXM6IG1lcmdlKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICBiYXNlVXJsOiBiYXNlVXJsXG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xufTtcbi8qKlxuICogVHJhbmZvcm1zIGEgc2VyaWVzIG9mIGNvbnRlbnQgcHJvdGVjdGlvbiBub2RlcyB0b1xuICogYW4gb2JqZWN0IGNvbnRhaW5pbmcgcHNzaCBkYXRhIGJ5IGtleSBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0ge05vZGVbXX0gY29udGVudFByb3RlY3Rpb25Ob2Rlc1xuICogICAgICAgIENvbnRlbnQgcHJvdGVjdGlvbiBub2Rlc1xuICogQHJldHVybiB7T2JqZWN0fVxuICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHBzc2ggZGF0YSBieSBrZXkgc3lzdGVtXG4gKi9cblxudmFyIGdlbmVyYXRlS2V5U3lzdGVtSW5mb3JtYXRpb24gPSBmdW5jdGlvbiBnZW5lcmF0ZUtleVN5c3RlbUluZm9ybWF0aW9uKGNvbnRlbnRQcm90ZWN0aW9uTm9kZXMpIHtcbiAgcmV0dXJuIGNvbnRlbnRQcm90ZWN0aW9uTm9kZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5vZGUpIHtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhub2RlKTtcbiAgICB2YXIga2V5U3lzdGVtID0ga2V5U3lzdGVtc01hcFthdHRyaWJ1dGVzLnNjaGVtZUlkVXJpXTtcblxuICAgIGlmIChrZXlTeXN0ZW0pIHtcbiAgICAgIGFjY1trZXlTeXN0ZW1dID0ge1xuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzXG4gICAgICB9O1xuICAgICAgdmFyIHBzc2hOb2RlID0gZmluZENoaWxkcmVuKG5vZGUsICdjZW5jOnBzc2gnKVswXTtcblxuICAgICAgaWYgKHBzc2hOb2RlKSB7XG4gICAgICAgIHZhciBwc3NoID0gZ2V0Q29udGVudChwc3NoTm9kZSk7XG4gICAgICAgIHZhciBwc3NoQnVmZmVyID0gcHNzaCAmJiBkZWNvZGVCNjRUb1VpbnQ4QXJyYXkocHNzaCk7XG4gICAgICAgIGFjY1trZXlTeXN0ZW1dLnBzc2ggPSBwc3NoQnVmZmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG4vKipcbiAqIE1hcHMgYW4gQWRhcHRhdGlvblNldCBub2RlIHRvIGEgbGlzdCBvZiBSZXByZXNlbnRhdGlvbiBpbmZvcm1hdGlvbiBvYmplY3RzXG4gKlxuICogQG5hbWUgdG9SZXByZXNlbnRhdGlvbnNDYWxsYmFja1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge05vZGV9IGFkYXB0YXRpb25TZXRcbiAqICAgICAgICBBZGFwdGF0aW9uU2V0IG5vZGUgZnJvbSB0aGUgbXBkXG4gKiBAcmV0dXJuIHtSZXByZXNlbnRhdGlvbkluZm9ybWF0aW9uW119XG4gKiAgICAgICAgIExpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIFJlcHJlc2VudGFpb24gaW5mb3JtYXRpb25cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBjYWxsYmFjayBmb3IgQXJyYXkucHJvdG90eXBlLm1hcCBmb3IgbWFwcGluZyBBZGFwdGF0aW9uU2V0IG5vZGVzIHRvIGEgbGlzdCBvZlxuICogUmVwcmVzZW50YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0c1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwZXJpb2RBdHRyaWJ1dGVzXG4gKiAgICAgICAgQ29udGFpbnMgYXR0cmlidXRlcyBpbmhlcml0ZWQgYnkgdGhlIFBlcmlvZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGVyaW9kQmFzZVVybHNcbiAqICAgICAgICBDb250YWlucyBsaXN0IG9mIHJlc29sdmVkIGJhc2UgdXJscyBpbmhlcml0ZWQgYnkgdGhlIFBlcmlvZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGVyaW9kU2VnbWVudEluZm9cbiAqICAgICAgICBDb250YWlucyBTZWdtZW50IEluZm9ybWF0aW9uIGF0IHRoZSBwZXJpb2QgbGV2ZWxcbiAqIEByZXR1cm4ge3RvUmVwcmVzZW50YXRpb25zQ2FsbGJhY2t9XG4gKiAgICAgICAgIENhbGxiYWNrIG1hcCBmdW5jdGlvblxuICovXG5cblxudmFyIHRvUmVwcmVzZW50YXRpb25zID0gZnVuY3Rpb24gdG9SZXByZXNlbnRhdGlvbnMocGVyaW9kQXR0cmlidXRlcywgcGVyaW9kQmFzZVVybHMsIHBlcmlvZFNlZ21lbnRJbmZvKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYWRhcHRhdGlvblNldCkge1xuICAgIHZhciBhZGFwdGF0aW9uU2V0QXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhhZGFwdGF0aW9uU2V0KTtcbiAgICB2YXIgYWRhcHRhdGlvblNldEJhc2VVcmxzID0gYnVpbGRCYXNlVXJscyhwZXJpb2RCYXNlVXJscywgZmluZENoaWxkcmVuKGFkYXB0YXRpb25TZXQsICdCYXNlVVJMJykpO1xuICAgIHZhciByb2xlID0gZmluZENoaWxkcmVuKGFkYXB0YXRpb25TZXQsICdSb2xlJylbMF07XG4gICAgdmFyIHJvbGVBdHRyaWJ1dGVzID0ge1xuICAgICAgcm9sZTogcGFyc2VBdHRyaWJ1dGVzKHJvbGUpXG4gICAgfTtcbiAgICB2YXIgYXR0cnMgPSBtZXJnZShwZXJpb2RBdHRyaWJ1dGVzLCBhZGFwdGF0aW9uU2V0QXR0cmlidXRlcywgcm9sZUF0dHJpYnV0ZXMpO1xuICAgIHZhciBjb250ZW50UHJvdGVjdGlvbiA9IGdlbmVyYXRlS2V5U3lzdGVtSW5mb3JtYXRpb24oZmluZENoaWxkcmVuKGFkYXB0YXRpb25TZXQsICdDb250ZW50UHJvdGVjdGlvbicpKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjb250ZW50UHJvdGVjdGlvbikubGVuZ3RoKSB7XG4gICAgICBhdHRycyA9IG1lcmdlKGF0dHJzLCB7XG4gICAgICAgIGNvbnRlbnRQcm90ZWN0aW9uOiBjb250ZW50UHJvdGVjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHNlZ21lbnRJbmZvID0gZ2V0U2VnbWVudEluZm9ybWF0aW9uKGFkYXB0YXRpb25TZXQpO1xuICAgIHZhciByZXByZXNlbnRhdGlvbnMgPSBmaW5kQ2hpbGRyZW4oYWRhcHRhdGlvblNldCwgJ1JlcHJlc2VudGF0aW9uJyk7XG4gICAgdmFyIGFkYXB0YXRpb25TZXRTZWdtZW50SW5mbyA9IG1lcmdlKHBlcmlvZFNlZ21lbnRJbmZvLCBzZWdtZW50SW5mbyk7XG4gICAgcmV0dXJuIGZsYXR0ZW4ocmVwcmVzZW50YXRpb25zLm1hcChpbmhlcml0QmFzZVVybHMoYXR0cnMsIGFkYXB0YXRpb25TZXRCYXNlVXJscywgYWRhcHRhdGlvblNldFNlZ21lbnRJbmZvKSkpO1xuICB9O1xufTtcbi8qKlxuICogTWFwcyBhbiBQZXJpb2Qgbm9kZSB0byBhIGxpc3Qgb2YgUmVwcmVzZW50YXRpb24gaW5mb3JhbXRpb24gb2JqZWN0cyBmb3IgYWxsXG4gKiBBZGFwdGF0aW9uU2V0IG5vZGVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFBlcmlvZFxuICpcbiAqIEBuYW1lIHRvQWRhcHRhdGlvblNldHNDYWxsYmFja1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge05vZGV9IHBlcmlvZFxuICogICAgICAgIFBlcmlvZCBub2RlIGZyb20gdGhlIG1wZFxuICogQHBhcmFtIHtudW1iZXJ9IHBlcmlvZEluZGV4XG4gKiAgICAgICAgSW5kZXggb2YgdGhlIFBlcmlvZCB3aXRoaW4gdGhlIG1wZFxuICogQHJldHVybiB7UmVwcmVzZW50YXRpb25JbmZvcm1hdGlvbltdfVxuICogICAgICAgICBMaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBSZXByZXNlbnRhaW9uIGluZm9ybWF0aW9uXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgZm9yIEFycmF5LnByb3RvdHlwZS5tYXAgZm9yIG1hcHBpbmcgUGVyaW9kIG5vZGVzIHRvIGEgbGlzdCBvZlxuICogUmVwcmVzZW50YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0c1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBtcGRBdHRyaWJ1dGVzXG4gKiAgICAgICAgQ29udGFpbnMgYXR0cmlidXRlcyBpbmhlcml0ZWQgYnkgdGhlIG1wZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gbXBkQmFzZVVybHNcbiAqICAgICAgICBDb250YWlucyBsaXN0IG9mIHJlc29sdmVkIGJhc2UgdXJscyBpbmhlcml0ZWQgYnkgdGhlIG1wZFxuICogQHJldHVybiB7dG9BZGFwdGF0aW9uU2V0c0NhbGxiYWNrfVxuICogICAgICAgICBDYWxsYmFjayBtYXAgZnVuY3Rpb25cbiAqL1xuXG52YXIgdG9BZGFwdGF0aW9uU2V0cyA9IGZ1bmN0aW9uIHRvQWRhcHRhdGlvblNldHMobXBkQXR0cmlidXRlcywgbXBkQmFzZVVybHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwZXJpb2QsIGluZGV4KSB7XG4gICAgdmFyIHBlcmlvZEJhc2VVcmxzID0gYnVpbGRCYXNlVXJscyhtcGRCYXNlVXJscywgZmluZENoaWxkcmVuKHBlcmlvZCwgJ0Jhc2VVUkwnKSk7XG4gICAgdmFyIHBlcmlvZEF0dCA9IHBhcnNlQXR0cmlidXRlcyhwZXJpb2QpO1xuICAgIHZhciBwYXJzZWRQZXJpb2RJZCA9IHBhcnNlSW50KHBlcmlvZEF0dC5pZCwgMTApOyAvLyBmYWxsYmFjayB0byBtYXBwaW5nIGluZGV4IGlmIFBlcmlvZEBpZCBpcyBub3QgYSBudW1iZXJcblxuICAgIHZhciBwZXJpb2RJbmRleCA9IHdpbmRvdyQxLmlzTmFOKHBhcnNlZFBlcmlvZElkKSA/IGluZGV4IDogcGFyc2VkUGVyaW9kSWQ7XG4gICAgdmFyIHBlcmlvZEF0dHJpYnV0ZXMgPSBtZXJnZShtcGRBdHRyaWJ1dGVzLCB7XG4gICAgICBwZXJpb2RJbmRleDogcGVyaW9kSW5kZXhcbiAgICB9KTtcbiAgICB2YXIgYWRhcHRhdGlvblNldHMgPSBmaW5kQ2hpbGRyZW4ocGVyaW9kLCAnQWRhcHRhdGlvblNldCcpO1xuICAgIHZhciBwZXJpb2RTZWdtZW50SW5mbyA9IGdldFNlZ21lbnRJbmZvcm1hdGlvbihwZXJpb2QpO1xuICAgIHJldHVybiBmbGF0dGVuKGFkYXB0YXRpb25TZXRzLm1hcCh0b1JlcHJlc2VudGF0aW9ucyhwZXJpb2RBdHRyaWJ1dGVzLCBwZXJpb2RCYXNlVXJscywgcGVyaW9kU2VnbWVudEluZm8pKSk7XG4gIH07XG59O1xuLyoqXG4gKiBUcmF2ZXJzZXMgdGhlIG1wZCB4bWwgdHJlZSB0byBnZW5lcmF0ZSBhIGxpc3Qgb2YgUmVwcmVzZW50YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0c1xuICogdGhhdCBoYXZlIGluaGVyaXRlZCBhdHRyaWJ1dGVzIGZyb20gcGFyZW50IG5vZGVzXG4gKlxuICogQHBhcmFtIHtOb2RlfSBtcGRcbiAqICAgICAgICBUaGUgcm9vdCBub2RlIG9mIHRoZSBtcGRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiAgICAgICAgQXZhaWxhYmxlIG9wdGlvbnMgZm9yIGluaGVyaXRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tYW5pZmVzdFVyaVxuICogICAgICAgIFRoZSB1cmkgc291cmNlIG9mIHRoZSBtcGRcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLk5PV1xuICogICAgICAgIEN1cnJlbnQgdGltZSBwZXIgREFTSCBJT1AuICBEZWZhdWx0IGlzIGN1cnJlbnQgdGltZSBpbiBtcyBzaW5jZSBlcG9jaFxuICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMuY2xpZW50T2Zmc2V0XG4gKiAgICAgICAgQ2xpZW50IHRpbWUgZGlmZmVyZW5jZSBmcm9tIE5PVyAoaW4gbWlsbGlzZWNvbmRzKVxuICogQHJldHVybiB7UmVwcmVzZW50YXRpb25JbmZvcm1hdGlvbltdfVxuICogICAgICAgICBMaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBSZXByZXNlbnRhdGlvbiBpbmZvcm1hdGlvblxuICovXG5cbnZhciBpbmhlcml0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIGluaGVyaXRBdHRyaWJ1dGVzKG1wZCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJG1hbmlmZXN0VXJpID0gX29wdGlvbnMubWFuaWZlc3RVcmksXG4gICAgICBtYW5pZmVzdFVyaSA9IF9vcHRpb25zJG1hbmlmZXN0VXJpID09PSB2b2lkIDAgPyAnJyA6IF9vcHRpb25zJG1hbmlmZXN0VXJpLFxuICAgICAgX29wdGlvbnMkTk9XID0gX29wdGlvbnMuTk9XLFxuICAgICAgTk9XID0gX29wdGlvbnMkTk9XID09PSB2b2lkIDAgPyBEYXRlLm5vdygpIDogX29wdGlvbnMkTk9XLFxuICAgICAgX29wdGlvbnMkY2xpZW50T2Zmc2V0ID0gX29wdGlvbnMuY2xpZW50T2Zmc2V0LFxuICAgICAgY2xpZW50T2Zmc2V0ID0gX29wdGlvbnMkY2xpZW50T2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkY2xpZW50T2Zmc2V0O1xuICB2YXIgcGVyaW9kcyA9IGZpbmRDaGlsZHJlbihtcGQsICdQZXJpb2QnKTtcblxuICBpZiAoIXBlcmlvZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5JTlZBTElEX05VTUJFUl9PRl9QRVJJT0QpO1xuICB9XG5cbiAgdmFyIG1wZEF0dHJpYnV0ZXMgPSBwYXJzZUF0dHJpYnV0ZXMobXBkKTtcbiAgdmFyIG1wZEJhc2VVcmxzID0gYnVpbGRCYXNlVXJscyhbbWFuaWZlc3RVcmldLCBmaW5kQ2hpbGRyZW4obXBkLCAnQmFzZVVSTCcpKTtcbiAgbXBkQXR0cmlidXRlcy5zb3VyY2VEdXJhdGlvbiA9IG1wZEF0dHJpYnV0ZXMubWVkaWFQcmVzZW50YXRpb25EdXJhdGlvbiB8fCAwO1xuICBtcGRBdHRyaWJ1dGVzLk5PVyA9IE5PVztcbiAgbXBkQXR0cmlidXRlcy5jbGllbnRPZmZzZXQgPSBjbGllbnRPZmZzZXQ7XG4gIHJldHVybiBmbGF0dGVuKHBlcmlvZHMubWFwKHRvQWRhcHRhdGlvblNldHMobXBkQXR0cmlidXRlcywgbXBkQmFzZVVybHMpKSk7XG59O1xuXG52YXIgc3RyaW5nVG9NcGRYbWwgPSBmdW5jdGlvbiBzdHJpbmdUb01wZFhtbChtYW5pZmVzdFN0cmluZykge1xuICBpZiAobWFuaWZlc3RTdHJpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5EQVNIX0VNUFRZX01BTklGRVNUKTtcbiAgfVxuXG4gIHZhciBwYXJzZXIgPSBuZXcgd2luZG93JDEuRE9NUGFyc2VyKCk7XG4gIHZhciB4bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKG1hbmlmZXN0U3RyaW5nLCAnYXBwbGljYXRpb24veG1sJyk7XG4gIHZhciBtcGQgPSB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudC50YWdOYW1lID09PSAnTVBEJyA/IHhtbC5kb2N1bWVudEVsZW1lbnQgOiBudWxsO1xuXG4gIGlmICghbXBkIHx8IG1wZCAmJiBtcGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhcnNlcmVycm9yJykubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMuREFTSF9JTlZBTElEX1hNTCk7XG4gIH1cblxuICByZXR1cm4gbXBkO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIG1hbmlmZXN0IGZvciBhIFVUQ1RpbWluZyBub2RlLCByZXR1cm5pbmcgdGhlIG5vZGVzIGF0dHJpYnV0ZXMgaWYgZm91bmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXBkXG4gKiAgICAgICAgWE1MIHN0cmluZyBvZiB0aGUgTVBEIG1hbmlmZXN0XG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH1cbiAqICAgICAgICAgQXR0cmlidXRlcyBvZiBVVENUaW1pbmcgbm9kZSBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LiBOdWxsIGlmIG5vbmUgZm91bmRcbiAqL1xuXG52YXIgcGFyc2VVVENUaW1pbmdTY2hlbWUgPSBmdW5jdGlvbiBwYXJzZVVUQ1RpbWluZ1NjaGVtZShtcGQpIHtcbiAgdmFyIFVUQ1RpbWluZ05vZGUgPSBmaW5kQ2hpbGRyZW4obXBkLCAnVVRDVGltaW5nJylbMF07XG5cbiAgaWYgKCFVVENUaW1pbmdOb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhVVENUaW1pbmdOb2RlKTtcblxuICBzd2l0Y2ggKGF0dHJpYnV0ZXMuc2NoZW1lSWRVcmkpIHtcbiAgICBjYXNlICd1cm46bXBlZzpkYXNoOnV0YzpodHRwLWhlYWQ6MjAxNCc6XG4gICAgY2FzZSAndXJuOm1wZWc6ZGFzaDp1dGM6aHR0cC1oZWFkOjIwMTInOlxuICAgICAgYXR0cmlidXRlcy5tZXRob2QgPSAnSEVBRCc7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOmh0dHAteHNkYXRlOjIwMTQnOlxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOmh0dHAtaXNvOjIwMTQnOlxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOmh0dHAteHNkYXRlOjIwMTInOlxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOmh0dHAtaXNvOjIwMTInOlxuICAgICAgYXR0cmlidXRlcy5tZXRob2QgPSAnR0VUJztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXJuOm1wZWc6ZGFzaDp1dGM6ZGlyZWN0OjIwMTQnOlxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOmRpcmVjdDoyMDEyJzpcbiAgICAgIGF0dHJpYnV0ZXMubWV0aG9kID0gJ0RJUkVDVCc7XG4gICAgICBhdHRyaWJ1dGVzLnZhbHVlID0gRGF0ZS5wYXJzZShhdHRyaWJ1dGVzLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXJuOm1wZWc6ZGFzaDp1dGM6aHR0cC1udHA6MjAxNCc6XG4gICAgY2FzZSAndXJuOm1wZWc6ZGFzaDp1dGM6bnRwOjIwMTQnOlxuICAgIGNhc2UgJ3VybjptcGVnOmRhc2g6dXRjOnNudHA6MjAxNCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMuVU5TVVBQT1JURURfVVRDX1RJTUlOR19TQ0hFTUUpO1xuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG52YXIgVkVSU0lPTiA9IHZlcnNpb247XG52YXIgcGFyc2UgPSBmdW5jdGlvbiBwYXJzZShtYW5pZmVzdFN0cmluZywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHRvTTN1OCh0b1BsYXlsaXN0cyhpbmhlcml0QXR0cmlidXRlcyhzdHJpbmdUb01wZFhtbChtYW5pZmVzdFN0cmluZyksIG9wdGlvbnMpKSwgb3B0aW9ucy5zaWR4TWFwcGluZyk7XG59O1xuLyoqXG4gKiBQYXJzZXMgdGhlIG1hbmlmZXN0IGZvciBhIFVUQ1RpbWluZyBub2RlLCByZXR1cm5pbmcgdGhlIG5vZGVzIGF0dHJpYnV0ZXMgaWYgZm91bmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFuaWZlc3RTdHJpbmdcbiAqICAgICAgICBYTUwgc3RyaW5nIG9mIHRoZSBNUEQgbWFuaWZlc3RcbiAqIEByZXR1cm4ge09iamVjdHxudWxsfVxuICogICAgICAgICBBdHRyaWJ1dGVzIG9mIFVUQ1RpbWluZyBub2RlIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QuIE51bGwgaWYgbm9uZSBmb3VuZFxuICovXG5cbnZhciBwYXJzZVVUQ1RpbWluZyA9IGZ1bmN0aW9uIHBhcnNlVVRDVGltaW5nKG1hbmlmZXN0U3RyaW5nKSB7XG4gIHJldHVybiBwYXJzZVVUQ1RpbWluZ1NjaGVtZShzdHJpbmdUb01wZFhtbChtYW5pZmVzdFN0cmluZykpO1xufTtcblxuZXhwb3J0IHsgVkVSU0lPTiwgcGFyc2UsIHBhcnNlVVRDVGltaW5nIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBU0E7QUFWQTtBQUxBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQURBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXJHQTtBQXVHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUE1R0E7QUFxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQXRJQTtBQXdJQTtBQUNBO0FBQ0E7QUExSUE7QUE2SUE7QUFDQTtBQUFBO0FBdEpBO0FBd0pBO0FBQ0E7QUE3SkE7QUFDQTtBQThKQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWNBOzs7Ozs7Ozs7Ozs7QUFZQTs7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUEzQkE7QUFDQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTs7Ozs7O0FBS0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFkQTtBQUNBO0FBbUJBOzs7Ozs7OztBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBcERBO0FBc0RBOzs7Ozs7Ozs7Ozs7OztBQWNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVBBO0FBREE7QUFnQkE7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQXVCQTs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQXJDQTtBQUNBO0FBQ0E7QUF1Q0E7QUFDQTtBQTFDQTtBQTRDQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxEQTtBQUNBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQTRCQTtBQUNBO0FBQ0E7QUFGQTtBQTdCQTtBQUNBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQ0E7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQW5CQTtBQUNBO0FBZ0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUFDQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExQ0E7QUFDQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBZEE7QUFMQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFEQTtBQTZEQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEZBO0FBQ0E7QUF3RkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQkE7QUFEQTtBQStCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkE7QUFDQTtBQURBO0FBR0E7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFFQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFKQTtBQWhCQTtBQStCQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBZkE7QUFpQkE7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQVpBO0FBY0E7QUFyQ0E7QUFDQTtBQXVDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyREE7QUFDQTtBQXNEQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBS0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBdEJBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFZQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBWEE7QUFDQTtBQWFBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQXpCQTtBQUNBO0FBMkJBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBdENBO0FBQ0E7QUF3Q0E7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFuREE7QUFDQTtBQXFEQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQWhFQTtBQUNBO0FBa0VBOzs7Ozs7OztBQVFBO0FBQ0E7QUE1RUE7QUFDQTtBQThFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBeEZBO0FBQ0E7QUEwRkE7Ozs7Ozs7O0FBUUE7QUFDQTtBQXBHQTtBQUNBO0FBc0dBOzs7Ozs7OztBQVFBO0FBQ0E7QUFoSEE7QUFDQTtBQWtIQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBNUhBO0FBQ0E7QUE4SEE7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsSkE7QUFDQTtBQW9KQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBOUpBO0FBQ0E7QUFnS0E7Ozs7Ozs7OztBQVNBO0FBQ0E7QUEzS0E7QUFDQTtBQTZLQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQXhMQTtBQUNBO0FBMExBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUF0TUE7QUF3TUE7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUxBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFMQTtBQVdBOzs7Ozs7Ozs7Ozs7OztBQWNBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFUQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQWpEQTtBQW1EQTs7Ozs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUxBO0FBREE7QUFnQkE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFEQTtBQXFCQTs7Ozs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBREE7QUF1QkE7Ozs7Ozs7Ozs7Ozs7O0FBY0E7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQVhBO0FBREE7QUFlQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFnQkE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQXlCQTtBQW5DQTtBQUNBO0FBcUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQURBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mpd-parser/dist/mpd-parser.es.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/aac/utils.js": -/*!***********************************************!*\ - !*** ../node_modules/mux.js/lib/aac/utils.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */\n\n\nvar ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n\nvar isLikelyAacData = function isLikelyAacData(data) {\n if (data[0] === 'I'.charCodeAt(0) && data[1] === 'D'.charCodeAt(0) && data[2] === '3'.charCodeAt(0)) {\n return true;\n }\n\n return false;\n};\n\nvar parseSyncSafeInteger = function parseSyncSafeInteger(data) {\n return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3];\n}; // return a percent-encoded representation of the specified byte range\n// @see http://en.wikipedia.org/wiki/Percent-encoding\n\n\nvar percentEncode = function percentEncode(bytes, start, end) {\n var i,\n result = '';\n\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n\n return result;\n}; // return the string representation of the specified byte range,\n// interpreted as ISO-8859-1.\n\n\nvar parseIso88591 = function parseIso88591(bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n};\n\nvar parseId3TagSize = function parseId3TagSize(header, byteIndex) {\n var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9],\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4;\n\n if (footerPresent) {\n return returnSize + 20;\n }\n\n return returnSize + 10;\n};\n\nvar parseAdtsSize = function parseAdtsSize(header, byteIndex) {\n var lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n return highTwo | middle | lowThree;\n};\n\nvar parseType = function parseType(header, byteIndex) {\n if (header[byteIndex] === 'I'.charCodeAt(0) && header[byteIndex + 1] === 'D'.charCodeAt(0) && header[byteIndex + 2] === '3'.charCodeAt(0)) {\n return 'timed-metadata';\n } else if (header[byteIndex] & 0xff === 0xff && (header[byteIndex + 1] & 0xf0) === 0xf0) {\n return 'audio';\n }\n\n return null;\n};\n\nvar parseSampleRate = function parseSampleRate(packet) {\n var i = 0;\n\n while (i + 5 < packet.length) {\n if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n\n return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2];\n }\n\n return null;\n};\n\nvar parseAacTimestamp = function parseAacTimestamp(packet) {\n var frameStart, frameSize, frame, frameHeader; // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n\n if (packet[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger(packet.subarray(10, 14));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8));\n\n if (frameSize < 1) {\n return null;\n }\n\n frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]);\n\n if (frameHeader === 'PRIV') {\n frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10);\n\n for (var i = 0; i < frame.byteLength; i++) {\n if (frame[i] === 0) {\n var owner = parseIso88591(frame, 0, i);\n\n if (owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.subarray(i + 1);\n var size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n return size;\n }\n\n break;\n }\n }\n }\n\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < packet.byteLength);\n\n return null;\n};\n\nmodule.exports = {\n isLikelyAacData: isLikelyAacData,\n parseId3TagSize: parseId3TagSize,\n parseAdtsSize: parseAdtsSize,\n parseType: parseType,\n parseSampleRate: parseSampleRate,\n parseAacTimestamp: parseAacTimestamp\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvYWFjL3V0aWxzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL2FhYy91dGlscy5qcz9hYWJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogVXRpbGl0aWVzIHRvIGRldGVjdCBiYXNpYyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSBhYm91dCBBYWMgZGF0YS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQURUU19TQU1QTElOR19GUkVRVUVOQ0lFUyA9IFtcbiAgOTYwMDAsXG4gIDg4MjAwLFxuICA2NDAwMCxcbiAgNDgwMDAsXG4gIDQ0MTAwLFxuICAzMjAwMCxcbiAgMjQwMDAsXG4gIDIyMDUwLFxuICAxNjAwMCxcbiAgMTIwMDAsXG4gIDExMDI1LFxuICA4MDAwLFxuICA3MzUwXG5dO1xuXG52YXIgaXNMaWtlbHlBYWNEYXRhID0gZnVuY3Rpb24oZGF0YSkge1xuICBpZiAoKGRhdGFbMF0gPT09ICdJJy5jaGFyQ29kZUF0KDApKSAmJlxuICAgICAgKGRhdGFbMV0gPT09ICdEJy5jaGFyQ29kZUF0KDApKSAmJlxuICAgICAgKGRhdGFbMl0gPT09ICczJy5jaGFyQ29kZUF0KDApKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwYXJzZVN5bmNTYWZlSW50ZWdlciA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgcmV0dXJuIChkYXRhWzBdIDw8IDIxKSB8XG4gICAgICAgICAgKGRhdGFbMV0gPDwgMTQpIHxcbiAgICAgICAgICAoZGF0YVsyXSA8PCA3KSB8XG4gICAgICAgICAgKGRhdGFbM10pO1xufTtcblxuLy8gcmV0dXJuIGEgcGVyY2VudC1lbmNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgYnl0ZSByYW5nZVxuLy8gQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BlcmNlbnQtZW5jb2RpbmdcbnZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24oYnl0ZXMsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGksIHJlc3VsdCA9ICcnO1xuICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgcmVzdWx0ICs9ICclJyArICgnMDAnICsgYnl0ZXNbaV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIHJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgYnl0ZSByYW5nZSxcbi8vIGludGVycHJldGVkIGFzIElTTy04ODU5LTEuXG52YXIgcGFyc2VJc284ODU5MSA9IGZ1bmN0aW9uKGJ5dGVzLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB1bmVzY2FwZShwZXJjZW50RW5jb2RlKGJ5dGVzLCBzdGFydCwgZW5kKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxufTtcblxudmFyIHBhcnNlSWQzVGFnU2l6ZSA9IGZ1bmN0aW9uKGhlYWRlciwgYnl0ZUluZGV4KSB7XG4gIHZhclxuICAgIHJldHVyblNpemUgPSAoaGVhZGVyW2J5dGVJbmRleCArIDZdIDw8IDIxKSB8XG4gICAgICAgICAgICAgICAgIChoZWFkZXJbYnl0ZUluZGV4ICsgN10gPDwgMTQpIHxcbiAgICAgICAgICAgICAgICAgKGhlYWRlcltieXRlSW5kZXggKyA4XSA8PCA3KSB8XG4gICAgICAgICAgICAgICAgIChoZWFkZXJbYnl0ZUluZGV4ICsgOV0pLFxuICAgIGZsYWdzID0gaGVhZGVyW2J5dGVJbmRleCArIDVdLFxuICAgIGZvb3RlclByZXNlbnQgPSAoZmxhZ3MgJiAxNikgPj4gNDtcblxuICBpZiAoZm9vdGVyUHJlc2VudCkge1xuICAgIHJldHVybiByZXR1cm5TaXplICsgMjA7XG4gIH1cbiAgcmV0dXJuIHJldHVyblNpemUgKyAxMDtcbn07XG5cbnZhciBwYXJzZUFkdHNTaXplID0gZnVuY3Rpb24oaGVhZGVyLCBieXRlSW5kZXgpIHtcbiAgdmFyXG4gICAgbG93VGhyZWUgPSAoaGVhZGVyW2J5dGVJbmRleCArIDVdICYgMHhFMCkgPj4gNSxcbiAgICBtaWRkbGUgPSBoZWFkZXJbYnl0ZUluZGV4ICsgNF0gPDwgMyxcbiAgICBoaWdoVHdvID0gaGVhZGVyW2J5dGVJbmRleCArIDNdICYgMHgzIDw8IDExO1xuXG4gIHJldHVybiAoaGlnaFR3byB8IG1pZGRsZSkgfCBsb3dUaHJlZTtcbn07XG5cbnZhciBwYXJzZVR5cGUgPSBmdW5jdGlvbihoZWFkZXIsIGJ5dGVJbmRleCkge1xuICBpZiAoKGhlYWRlcltieXRlSW5kZXhdID09PSAnSScuY2hhckNvZGVBdCgwKSkgJiZcbiAgICAgIChoZWFkZXJbYnl0ZUluZGV4ICsgMV0gPT09ICdEJy5jaGFyQ29kZUF0KDApKSAmJlxuICAgICAgKGhlYWRlcltieXRlSW5kZXggKyAyXSA9PT0gJzMnLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgcmV0dXJuICd0aW1lZC1tZXRhZGF0YSc7XG4gIH0gZWxzZSBpZiAoKGhlYWRlcltieXRlSW5kZXhdICYgMHhmZiA9PT0gMHhmZikgJiZcbiAgICAgICAgICAgICAoKGhlYWRlcltieXRlSW5kZXggKyAxXSAmIDB4ZjApID09PSAweGYwKSkge1xuICAgIHJldHVybiAnYXVkaW8nO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIHBhcnNlU2FtcGxlUmF0ZSA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgKyA1IDwgcGFja2V0Lmxlbmd0aCkge1xuICAgIGlmIChwYWNrZXRbaV0gIT09IDB4RkYgfHwgKHBhY2tldFtpICsgMV0gJiAweEY2KSAhPT0gMHhGMCkge1xuICAgICAgLy8gSWYgYSB2YWxpZCBoZWFkZXIgd2FzIG5vdCBmb3VuZCwgIGp1bXAgb25lIGZvcndhcmQgYW5kIGF0dGVtcHQgdG9cbiAgICAgIC8vIGZpbmQgYSB2YWxpZCBBRFRTIGhlYWRlciBzdGFydGluZyBhdCB0aGUgbmV4dCBieXRlXG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIEFEVFNfU0FNUExJTkdfRlJFUVVFTkNJRVNbKHBhY2tldFtpICsgMl0gJiAweDNjKSA+Pj4gMl07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBwYXJzZUFhY1RpbWVzdGFtcCA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICB2YXIgZnJhbWVTdGFydCwgZnJhbWVTaXplLCBmcmFtZSwgZnJhbWVIZWFkZXI7XG5cbiAgLy8gZmluZCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGZyYW1lIGFuZCB0aGUgZW5kIG9mIHRoZSB0YWdcbiAgZnJhbWVTdGFydCA9IDEwO1xuICBpZiAocGFja2V0WzVdICYgMHg0MCkge1xuICAgIC8vIGFkdmFuY2UgdGhlIGZyYW1lIHN0YXJ0IHBhc3QgdGhlIGV4dGVuZGVkIGhlYWRlclxuICAgIGZyYW1lU3RhcnQgKz0gNDsgLy8gaGVhZGVyIHNpemUgZmllbGRcbiAgICBmcmFtZVN0YXJ0ICs9IHBhcnNlU3luY1NhZmVJbnRlZ2VyKHBhY2tldC5zdWJhcnJheSgxMCwgMTQpKTtcbiAgfVxuXG4gIC8vIHBhcnNlIG9uZSBvciBtb3JlIElEMyBmcmFtZXNcbiAgLy8gaHR0cDovL2lkMy5vcmcvaWQzdjIuMy4wI0lEM3YyX2ZyYW1lX292ZXJ2aWV3XG4gIGRvIHtcbiAgICAvLyBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGlzIGZyYW1lXG4gICAgZnJhbWVTaXplID0gcGFyc2VTeW5jU2FmZUludGVnZXIocGFja2V0LnN1YmFycmF5KGZyYW1lU3RhcnQgKyA0LCBmcmFtZVN0YXJ0ICsgOCkpO1xuICAgIGlmIChmcmFtZVNpemUgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnJhbWVIZWFkZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhY2tldFtmcmFtZVN0YXJ0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0W2ZyYW1lU3RhcnQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0W2ZyYW1lU3RhcnQgKyAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0W2ZyYW1lU3RhcnQgKyAzXSk7XG5cbiAgICBpZiAoZnJhbWVIZWFkZXIgPT09ICdQUklWJykge1xuICAgICAgZnJhbWUgPSBwYWNrZXQuc3ViYXJyYXkoZnJhbWVTdGFydCArIDEwLCBmcmFtZVN0YXJ0ICsgZnJhbWVTaXplICsgMTApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZnJhbWVbaV0gPT09IDApIHtcbiAgICAgICAgICB2YXIgb3duZXIgPSBwYXJzZUlzbzg4NTkxKGZyYW1lLCAwLCBpKTtcbiAgICAgICAgICBpZiAob3duZXIgPT09ICdjb20uYXBwbGUuc3RyZWFtaW5nLnRyYW5zcG9ydFN0cmVhbVRpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgIHZhciBkID0gZnJhbWUuc3ViYXJyYXkoaSArIDEpO1xuICAgICAgICAgICAgdmFyIHNpemUgPSAoKGRbM10gJiAweDAxKSAgPDwgMzApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgKGRbNF0gIDw8IDIyKSB8XG4gICAgICAgICAgICAgICAgICAgICAgIChkWzVdIDw8IDE0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgIChkWzZdIDw8IDYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgKGRbN10gPj4+IDIpO1xuICAgICAgICAgICAgc2l6ZSAqPSA0O1xuICAgICAgICAgICAgc2l6ZSArPSBkWzddICYgMHgwMztcblxuICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnJhbWVTdGFydCArPSAxMDsgLy8gYWR2YW5jZSBwYXN0IHRoZSBmcmFtZSBoZWFkZXJcbiAgICBmcmFtZVN0YXJ0ICs9IGZyYW1lU2l6ZTsgLy8gYWR2YW5jZSBwYXN0IHRoZSBmcmFtZSBib2R5XG4gIH0gd2hpbGUgKGZyYW1lU3RhcnQgPCBwYWNrZXQuYnl0ZUxlbmd0aCk7XG4gIHJldHVybiBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzTGlrZWx5QWFjRGF0YTogaXNMaWtlbHlBYWNEYXRhLFxuICBwYXJzZUlkM1RhZ1NpemU6IHBhcnNlSWQzVGFnU2l6ZSxcbiAgcGFyc2VBZHRzU2l6ZTogcGFyc2VBZHRzU2l6ZSxcbiAgcGFyc2VUeXBlOiBwYXJzZVR5cGUsXG4gIHBhcnNlU2FtcGxlUmF0ZTogcGFyc2VTYW1wbGVSYXRlLFxuICBwYXJzZUFhY1RpbWVzdGFtcDogcGFyc2VBYWNUaW1lc3RhbXBcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFEQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBU0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBQ0E7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUtBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFHQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFZQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFuQ0E7QUFDQTtBQW9DQTtBQWxEQTtBQUNBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/aac/utils.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/m2ts/caption-stream.js": -/*!*********************************************************!*\ - !*** ../node_modules/mux.js/lib/m2ts/caption-stream.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */\n // -----------------\n// Link To Transport\n// -----------------\n\nvar Stream = __webpack_require__(/*! ../utils/stream */ \"../node_modules/mux.js/lib/utils/stream.js\");\n\nvar cea708Parser = __webpack_require__(/*! ../tools/caption-packet-parser */ \"../node_modules/mux.js/lib/tools/caption-packet-parser.js\");\n\nvar CaptionStream = function CaptionStream() {\n CaptionStream.prototype.init.call(this);\n this.captionPackets_ = [];\n this.ccStreams_ = [new Cea608Stream(0, 0), // eslint-disable-line no-use-before-define\n new Cea608Stream(0, 1), // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 0), // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 1) // eslint-disable-line no-use-before-define\n ];\n this.reset(); // forward data and done events from CCs to this CaptionStream\n\n this.ccStreams_.forEach(function (cc) {\n cc.on('data', this.trigger.bind(this, 'data'));\n cc.on('partialdone', this.trigger.bind(this, 'partialdone'));\n cc.on('done', this.trigger.bind(this, 'done'));\n }, this);\n};\n\nCaptionStream.prototype = new Stream();\n\nCaptionStream.prototype.push = function (event) {\n var sei, userData, newCaptionPackets; // only examine SEI NALs\n\n if (event.nalUnitType !== 'sei_rbsp') {\n return;\n } // parse the sei\n\n\n sei = cea708Parser.parseSei(event.escapedRBSP); // ignore everything but user_data_registered_itu_t_t35\n\n if (sei.payloadType !== cea708Parser.USER_DATA_REGISTERED_ITU_T_T35) {\n return;\n } // parse out the user data payload\n\n\n userData = cea708Parser.parseUserData(sei); // ignore unrecognized userData\n\n if (!userData) {\n return;\n } // Sometimes, the same segment # will be downloaded twice. To stop the\n // caption data from being processed twice, we track the latest dts we've\n // received and ignore everything with a dts before that. However, since\n // data for a specific dts can be split across packets on either side of\n // a segment boundary, we need to make sure we *don't* ignore the packets\n // from the *next* segment that have dts === this.latestDts_. By constantly\n // tracking the number of packets received with dts === this.latestDts_, we\n // know how many should be ignored once we start receiving duplicates.\n\n\n if (event.dts < this.latestDts_) {\n // We've started getting older data, so set the flag.\n this.ignoreNextEqualDts_ = true;\n return;\n } else if (event.dts === this.latestDts_ && this.ignoreNextEqualDts_) {\n this.numSameDts_--;\n\n if (!this.numSameDts_) {\n // We've received the last duplicate packet, time to start processing again\n this.ignoreNextEqualDts_ = false;\n }\n\n return;\n } // parse out CC data packets and save them for later\n\n\n newCaptionPackets = cea708Parser.parseCaptionPackets(event.pts, userData);\n this.captionPackets_ = this.captionPackets_.concat(newCaptionPackets);\n\n if (this.latestDts_ !== event.dts) {\n this.numSameDts_ = 0;\n }\n\n this.numSameDts_++;\n this.latestDts_ = event.dts;\n};\n\nCaptionStream.prototype.flushCCStreams = function (flushType) {\n this.ccStreams_.forEach(function (cc) {\n return flushType === 'flush' ? cc.flush() : cc.partialFlush();\n }, this);\n};\n\nCaptionStream.prototype.flushStream = function (flushType) {\n // make sure we actually parsed captions before proceeding\n if (!this.captionPackets_.length) {\n this.flushCCStreams(flushType);\n return;\n } // In Chrome, the Array#sort function is not stable so add a\n // presortIndex that we can use to ensure we get a stable-sort\n\n\n this.captionPackets_.forEach(function (elem, idx) {\n elem.presortIndex = idx;\n }); // sort caption byte-pairs based on their PTS values\n\n this.captionPackets_.sort(function (a, b) {\n if (a.pts === b.pts) {\n return a.presortIndex - b.presortIndex;\n }\n\n return a.pts - b.pts;\n });\n this.captionPackets_.forEach(function (packet) {\n if (packet.type < 2) {\n // Dispatch packet to the right Cea608Stream\n this.dispatchCea608Packet(packet);\n } // this is where an 'else' would go for a dispatching packets\n // to a theoretical Cea708Stream that handles SERVICEn data\n\n }, this);\n this.captionPackets_.length = 0;\n this.flushCCStreams(flushType);\n};\n\nCaptionStream.prototype.flush = function () {\n return this.flushStream('flush');\n}; // Only called if handling partial data\n\n\nCaptionStream.prototype.partialFlush = function () {\n return this.flushStream('partialFlush');\n};\n\nCaptionStream.prototype.reset = function () {\n this.latestDts_ = null;\n this.ignoreNextEqualDts_ = false;\n this.numSameDts_ = 0;\n this.activeCea608Channel_ = [null, null];\n this.ccStreams_.forEach(function (ccStream) {\n ccStream.reset();\n });\n}; // From the CEA-608 spec:\n\n/*\n * When XDS sub-packets are interleaved with other services, the end of each sub-packet shall be followed\n * by a control pair to change to a different service. When any of the control codes from 0x10 to 0x1F is\n * used to begin a control code pair, it indicates the return to captioning or Text data. The control code pair\n * and subsequent data should then be processed according to the FCC rules. It may be necessary for the\n * line 21 data encoder to automatically insert a control code pair (i.e. RCL, RU2, RU3, RU4, RDC, or RTD)\n * to switch to captioning or Text.\n*/\n// With that in mind, we ignore any data between an XDS control code and a\n// subsequent closed-captioning control code.\n\n\nCaptionStream.prototype.dispatchCea608Packet = function (packet) {\n // NOTE: packet.type is the CEA608 field\n if (this.setsTextOrXDSActive(packet)) {\n this.activeCea608Channel_[packet.type] = null;\n } else if (this.setsChannel1Active(packet)) {\n this.activeCea608Channel_[packet.type] = 0;\n } else if (this.setsChannel2Active(packet)) {\n this.activeCea608Channel_[packet.type] = 1;\n }\n\n if (this.activeCea608Channel_[packet.type] === null) {\n // If we haven't received anything to set the active channel, or the\n // packets are Text/XDS data, discard the data; we don't want jumbled\n // captions\n return;\n }\n\n this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet);\n};\n\nCaptionStream.prototype.setsChannel1Active = function (packet) {\n return (packet.ccData & 0x7800) === 0x1000;\n};\n\nCaptionStream.prototype.setsChannel2Active = function (packet) {\n return (packet.ccData & 0x7800) === 0x1800;\n};\n\nCaptionStream.prototype.setsTextOrXDSActive = function (packet) {\n return (packet.ccData & 0x7100) === 0x0100 || (packet.ccData & 0x78fe) === 0x102a || (packet.ccData & 0x78fe) === 0x182a;\n}; // ----------------------\n// Session to Application\n// ----------------------\n// This hash maps non-ASCII, special, and extended character codes to their\n// proper Unicode equivalent. The first keys that are only a single byte\n// are the non-standard ASCII characters, which simply map the CEA608 byte\n// to the standard ASCII/Unicode. The two-byte keys that follow are the CEA608\n// character codes, but have their MSB bitmasked with 0x03 so that a lookup\n// can be performed regardless of the field and data channel on which the\n// character code was received.\n\n\nvar CHARACTER_TRANSLATION = {\n 0x2a: 0xe1,\n // á\n 0x5c: 0xe9,\n // é\n 0x5e: 0xed,\n // í\n 0x5f: 0xf3,\n // ó\n 0x60: 0xfa,\n // ú\n 0x7b: 0xe7,\n // ç\n 0x7c: 0xf7,\n // ÷\n 0x7d: 0xd1,\n // Ñ\n 0x7e: 0xf1,\n // ñ\n 0x7f: 0x2588,\n // █\n 0x0130: 0xae,\n // ®\n 0x0131: 0xb0,\n // °\n 0x0132: 0xbd,\n // ½\n 0x0133: 0xbf,\n // ¿\n 0x0134: 0x2122,\n // ™\n 0x0135: 0xa2,\n // ¢\n 0x0136: 0xa3,\n // £\n 0x0137: 0x266a,\n // ♪\n 0x0138: 0xe0,\n // à\n 0x0139: 0xa0,\n //\n 0x013a: 0xe8,\n // è\n 0x013b: 0xe2,\n // â\n 0x013c: 0xea,\n // ê\n 0x013d: 0xee,\n // î\n 0x013e: 0xf4,\n // ô\n 0x013f: 0xfb,\n // û\n 0x0220: 0xc1,\n // Á\n 0x0221: 0xc9,\n // É\n 0x0222: 0xd3,\n // Ó\n 0x0223: 0xda,\n // Ú\n 0x0224: 0xdc,\n // Ü\n 0x0225: 0xfc,\n // ü\n 0x0226: 0x2018,\n // ‘\n 0x0227: 0xa1,\n // ¡\n 0x0228: 0x2a,\n // *\n 0x0229: 0x27,\n // '\n 0x022a: 0x2014,\n // —\n 0x022b: 0xa9,\n // ©\n 0x022c: 0x2120,\n // ℠\n 0x022d: 0x2022,\n // •\n 0x022e: 0x201c,\n // “\n 0x022f: 0x201d,\n // ”\n 0x0230: 0xc0,\n // À\n 0x0231: 0xc2,\n // Â\n 0x0232: 0xc7,\n // Ç\n 0x0233: 0xc8,\n // È\n 0x0234: 0xca,\n // Ê\n 0x0235: 0xcb,\n // Ë\n 0x0236: 0xeb,\n // ë\n 0x0237: 0xce,\n // Î\n 0x0238: 0xcf,\n // Ï\n 0x0239: 0xef,\n // ï\n 0x023a: 0xd4,\n // Ô\n 0x023b: 0xd9,\n // Ù\n 0x023c: 0xf9,\n // ù\n 0x023d: 0xdb,\n // Û\n 0x023e: 0xab,\n // «\n 0x023f: 0xbb,\n // »\n 0x0320: 0xc3,\n // Ã\n 0x0321: 0xe3,\n // ã\n 0x0322: 0xcd,\n // Í\n 0x0323: 0xcc,\n // Ì\n 0x0324: 0xec,\n // ì\n 0x0325: 0xd2,\n // Ò\n 0x0326: 0xf2,\n // ò\n 0x0327: 0xd5,\n // Õ\n 0x0328: 0xf5,\n // õ\n 0x0329: 0x7b,\n // {\n 0x032a: 0x7d,\n // }\n 0x032b: 0x5c,\n // \\\n 0x032c: 0x5e,\n // ^\n 0x032d: 0x5f,\n // _\n 0x032e: 0x7c,\n // |\n 0x032f: 0x7e,\n // ~\n 0x0330: 0xc4,\n // Ä\n 0x0331: 0xe4,\n // ä\n 0x0332: 0xd6,\n // Ö\n 0x0333: 0xf6,\n // ö\n 0x0334: 0xdf,\n // ß\n 0x0335: 0xa5,\n // ¥\n 0x0336: 0xa4,\n // ¤\n 0x0337: 0x2502,\n // │\n 0x0338: 0xc5,\n // Å\n 0x0339: 0xe5,\n // å\n 0x033a: 0xd8,\n // Ø\n 0x033b: 0xf8,\n // ø\n 0x033c: 0x250c,\n // ┌\n 0x033d: 0x2510,\n // ┐\n 0x033e: 0x2514,\n // └\n 0x033f: 0x2518 // ┘\n\n};\n\nvar getCharFromCode = function getCharFromCode(code) {\n if (code === null) {\n return '';\n }\n\n code = CHARACTER_TRANSLATION[code] || code;\n return String.fromCharCode(code);\n}; // the index of the last row in a CEA-608 display buffer\n\n\nvar BOTTOM_ROW = 14; // This array is used for mapping PACs -> row #, since there's no way of\n// getting it through bit logic.\n\nvar ROWS = [0x1100, 0x1120, 0x1200, 0x1220, 0x1500, 0x1520, 0x1600, 0x1620, 0x1700, 0x1720, 0x1000, 0x1300, 0x1320, 0x1400, 0x1420]; // CEA-608 captions are rendered onto a 34x15 matrix of character\n// cells. The \"bottom\" row is the last element in the outer array.\n\nvar createDisplayBuffer = function createDisplayBuffer() {\n var result = [],\n i = BOTTOM_ROW + 1;\n\n while (i--) {\n result.push('');\n }\n\n return result;\n};\n\nvar Cea608Stream = function Cea608Stream(field, dataChannel) {\n Cea608Stream.prototype.init.call(this);\n this.field_ = field || 0;\n this.dataChannel_ = dataChannel || 0;\n this.name_ = 'CC' + ((this.field_ << 1 | this.dataChannel_) + 1);\n this.setConstants();\n this.reset();\n\n this.push = function (packet) {\n var data, swap, char0, char1, text; // remove the parity bits\n\n data = packet.ccData & 0x7f7f; // ignore duplicate control codes; the spec demands they're sent twice\n\n if (data === this.lastControlCode_) {\n this.lastControlCode_ = null;\n return;\n } // Store control codes\n\n\n if ((data & 0xf000) === 0x1000) {\n this.lastControlCode_ = data;\n } else if (data !== this.PADDING_) {\n this.lastControlCode_ = null;\n }\n\n char0 = data >>> 8;\n char1 = data & 0xff;\n\n if (data === this.PADDING_) {\n return;\n } else if (data === this.RESUME_CAPTION_LOADING_) {\n this.mode_ = 'popOn';\n } else if (data === this.END_OF_CAPTION_) {\n // If an EOC is received while in paint-on mode, the displayed caption\n // text should be swapped to non-displayed memory as if it was a pop-on\n // caption. Because of that, we should explicitly switch back to pop-on\n // mode\n this.mode_ = 'popOn';\n this.clearFormatting(packet.pts); // if a caption was being displayed, it's gone now\n\n this.flushDisplayed(packet.pts); // flip memory\n\n swap = this.displayed_;\n this.displayed_ = this.nonDisplayed_;\n this.nonDisplayed_ = swap; // start measuring the time to display the caption\n\n this.startPts_ = packet.pts;\n } else if (data === this.ROLL_UP_2_ROWS_) {\n this.rollUpRows_ = 2;\n this.setRollUp(packet.pts);\n } else if (data === this.ROLL_UP_3_ROWS_) {\n this.rollUpRows_ = 3;\n this.setRollUp(packet.pts);\n } else if (data === this.ROLL_UP_4_ROWS_) {\n this.rollUpRows_ = 4;\n this.setRollUp(packet.pts);\n } else if (data === this.CARRIAGE_RETURN_) {\n this.clearFormatting(packet.pts);\n this.flushDisplayed(packet.pts);\n this.shiftRowsUp_();\n this.startPts_ = packet.pts;\n } else if (data === this.BACKSPACE_) {\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1);\n } else {\n this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1);\n }\n } else if (data === this.ERASE_DISPLAYED_MEMORY_) {\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) {\n this.nonDisplayed_ = createDisplayBuffer();\n } else if (data === this.RESUME_DIRECT_CAPTIONING_) {\n if (this.mode_ !== 'paintOn') {\n // NOTE: This should be removed when proper caption positioning is\n // implemented\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n }\n\n this.mode_ = 'paintOn';\n this.startPts_ = packet.pts; // Append special characters to caption text\n } else if (this.isSpecialCharacter(char0, char1)) {\n // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++; // Append extended characters to caption text\n } else if (this.isExtCharacter(char0, char1)) {\n // Extended characters always follow their \"non-extended\" equivalents.\n // IE if a \"è\" is desired, you'll always receive \"eè\"; non-compliant\n // decoders are supposed to drop the \"è\", while compliant decoders\n // backspace the \"e\" and insert \"è\".\n // Delete the previous character\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1);\n } else {\n this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1);\n } // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n\n\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++; // Process mid-row codes\n } else if (this.isMidRowCode(char0, char1)) {\n // Attributes are not additive, so clear all formatting\n this.clearFormatting(packet.pts); // According to the standard, mid-row codes\n // should be replaced with spaces, so add one now\n\n this[this.mode_](packet.pts, ' ');\n this.column_++;\n\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n\n if ((char1 & 0x1) === 0x1) {\n this.addFormatting(packet.pts, ['u']);\n } // Detect offset control codes and adjust cursor\n\n } else if (this.isOffsetControlCode(char0, char1)) {\n // Cursor position is set by indent PAC (see below) in 4-column\n // increments, with an additional offset code of 1-3 to reach any\n // of the 32 columns specified by CEA-608. So all we need to do\n // here is increment the column cursor by the given offset.\n this.column_ += char1 & 0x03; // Detect PACs (Preamble Address Codes)\n } else if (this.isPAC(char0, char1)) {\n // There's no logic for PAC -> row mapping, so we have to just\n // find the row code in an array and use its index :(\n var row = ROWS.indexOf(data & 0x1f20); // Configure the caption window if we're in roll-up mode\n\n if (this.mode_ === 'rollUp') {\n // This implies that the base row is incorrectly set.\n // As per the recommendation in CEA-608(Base Row Implementation), defer to the number\n // of roll-up rows set.\n if (row - this.rollUpRows_ + 1 < 0) {\n row = this.rollUpRows_ - 1;\n }\n\n this.setRollUp(packet.pts, row);\n }\n\n if (row !== this.row_) {\n // formatting is only persistent for current row\n this.clearFormatting(packet.pts);\n this.row_ = row;\n } // All PACs can apply underline, so detect and apply\n // (All odd-numbered second bytes set underline)\n\n\n if (char1 & 0x1 && this.formatting_.indexOf('u') === -1) {\n this.addFormatting(packet.pts, ['u']);\n }\n\n if ((data & 0x10) === 0x10) {\n // We've got an indent level code. Each successive even number\n // increments the column cursor by 4, so we can get the desired\n // column position by bit-shifting to the right (to get n/2)\n // and multiplying by 4.\n this.column_ = ((data & 0xe) >> 1) * 4;\n }\n\n if (this.isColorPAC(char1)) {\n // it's a color code, though we only support white, which\n // can be either normal or italicized. white italics can be\n // either 0x4e or 0x6e depending on the row, so we just\n // bitwise-and with 0xe to see if italics should be turned on\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n } // We have a normal character in char0, and possibly one in char1\n\n } else if (this.isNormalChar(char0)) {\n if (char1 === 0x00) {\n char1 = null;\n }\n\n text = getCharFromCode(char0);\n text += getCharFromCode(char1);\n this[this.mode_](packet.pts, text);\n this.column_ += text.length;\n } // finish data processing\n\n };\n};\n\nCea608Stream.prototype = new Stream(); // Trigger a cue point that captures the current state of the\n// display buffer\n\nCea608Stream.prototype.flushDisplayed = function (pts) {\n var content = this.displayed_ // remove spaces from the start and end of the string\n .map(function (row) {\n try {\n return row.trim();\n } catch (e) {\n // Ordinarily, this shouldn't happen. However, caption\n // parsing errors should not throw exceptions and\n // break playback.\n // eslint-disable-next-line no-console\n console.error('Skipping malformed caption.');\n return '';\n }\n }) // combine all text rows to display in one cue\n .join('\\n') // and remove blank rows from the start and end, but not the middle\n .replace(/^\\n+|\\n+$/g, '');\n\n if (content.length) {\n this.trigger('data', {\n startPts: this.startPts_,\n endPts: pts,\n text: content,\n stream: this.name_\n });\n }\n};\n/**\n * Zero out the data, used for startup and on seek\n */\n\n\nCea608Stream.prototype.reset = function () {\n this.mode_ = 'popOn'; // When in roll-up mode, the index of the last row that will\n // actually display captions. If a caption is shifted to a row\n // with a lower index than this, it is cleared from the display\n // buffer\n\n this.topRow_ = 0;\n this.startPts_ = 0;\n this.displayed_ = createDisplayBuffer();\n this.nonDisplayed_ = createDisplayBuffer();\n this.lastControlCode_ = null; // Track row and column for proper line-breaking and spacing\n\n this.column_ = 0;\n this.row_ = BOTTOM_ROW;\n this.rollUpRows_ = 2; // This variable holds currently-applied formatting\n\n this.formatting_ = [];\n};\n/**\n * Sets up control code and related constants for this instance\n */\n\n\nCea608Stream.prototype.setConstants = function () {\n // The following attributes have these uses:\n // ext_ : char0 for mid-row codes, and the base for extended\n // chars (ext_+0, ext_+1, and ext_+2 are char0s for\n // extended codes)\n // control_: char0 for control codes, except byte-shifted to the\n // left so that we can do this.control_ | CONTROL_CODE\n // offset_: char0 for tab offset codes\n //\n // It's also worth noting that control codes, and _only_ control codes,\n // differ between field 1 and field2. Field 2 control codes are always\n // their field 1 value plus 1. That's why there's the \"| field\" on the\n // control value.\n if (this.dataChannel_ === 0) {\n this.BASE_ = 0x10;\n this.EXT_ = 0x11;\n this.CONTROL_ = (0x14 | this.field_) << 8;\n this.OFFSET_ = 0x17;\n } else if (this.dataChannel_ === 1) {\n this.BASE_ = 0x18;\n this.EXT_ = 0x19;\n this.CONTROL_ = (0x1c | this.field_) << 8;\n this.OFFSET_ = 0x1f;\n } // Constants for the LSByte command codes recognized by Cea608Stream. This\n // list is not exhaustive. For a more comprehensive listing and semantics see\n // http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf\n // Padding\n\n\n this.PADDING_ = 0x0000; // Pop-on Mode\n\n this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 0x20;\n this.END_OF_CAPTION_ = this.CONTROL_ | 0x2f; // Roll-up Mode\n\n this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 0x25;\n this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 0x26;\n this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 0x27;\n this.CARRIAGE_RETURN_ = this.CONTROL_ | 0x2d; // paint-on mode\n\n this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 0x29; // Erasure\n\n this.BACKSPACE_ = this.CONTROL_ | 0x21;\n this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2c;\n this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2e;\n};\n/**\n * Detects if the 2-byte packet data is a special character\n *\n * Special characters have a second byte in the range 0x30 to 0x3f,\n * with the first byte being 0x11 (for data channel 1) or 0x19 (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an special character\n */\n\n\nCea608Stream.prototype.isSpecialCharacter = function (char0, char1) {\n return char0 === this.EXT_ && char1 >= 0x30 && char1 <= 0x3f;\n};\n/**\n * Detects if the 2-byte packet data is an extended character\n *\n * Extended characters have a second byte in the range 0x20 to 0x3f,\n * with the first byte being 0x12 or 0x13 (for data channel 1) or\n * 0x1a or 0x1b (for data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an extended character\n */\n\n\nCea608Stream.prototype.isExtCharacter = function (char0, char1) {\n return (char0 === this.EXT_ + 1 || char0 === this.EXT_ + 2) && char1 >= 0x20 && char1 <= 0x3f;\n};\n/**\n * Detects if the 2-byte packet is a mid-row code\n *\n * Mid-row codes have a second byte in the range 0x20 to 0x2f, with\n * the first byte being 0x11 (for data channel 1) or 0x19 (for data\n * channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a mid-row code\n */\n\n\nCea608Stream.prototype.isMidRowCode = function (char0, char1) {\n return char0 === this.EXT_ && char1 >= 0x20 && char1 <= 0x2f;\n};\n/**\n * Detects if the 2-byte packet is an offset control code\n *\n * Offset control codes have a second byte in the range 0x21 to 0x23,\n * with the first byte being 0x17 (for data channel 1) or 0x1f (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an offset control code\n */\n\n\nCea608Stream.prototype.isOffsetControlCode = function (char0, char1) {\n return char0 === this.OFFSET_ && char1 >= 0x21 && char1 <= 0x23;\n};\n/**\n * Detects if the 2-byte packet is a Preamble Address Code\n *\n * PACs have a first byte in the range 0x10 to 0x17 (for data channel 1)\n * or 0x18 to 0x1f (for data channel 2), with the second byte in the\n * range 0x40 to 0x7f.\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a PAC\n */\n\n\nCea608Stream.prototype.isPAC = function (char0, char1) {\n return char0 >= this.BASE_ && char0 < this.BASE_ + 8 && char1 >= 0x40 && char1 <= 0x7f;\n};\n/**\n * Detects if a packet's second byte is in the range of a PAC color code\n *\n * PAC color codes have the second byte be in the range 0x40 to 0x4f, or\n * 0x60 to 0x6f.\n *\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the byte is a color PAC\n */\n\n\nCea608Stream.prototype.isColorPAC = function (char1) {\n return char1 >= 0x40 && char1 <= 0x4f || char1 >= 0x60 && char1 <= 0x7f;\n};\n/**\n * Detects if a single byte is in the range of a normal character\n *\n * Normal text bytes are in the range 0x20 to 0x7f.\n *\n * @param {Integer} char The byte\n * @return {Boolean} Whether the byte is a normal character\n */\n\n\nCea608Stream.prototype.isNormalChar = function (_char) {\n return _char >= 0x20 && _char <= 0x7f;\n};\n/**\n * Configures roll-up\n *\n * @param {Integer} pts Current PTS\n * @param {Integer} newBaseRow Used by PACs to slide the current window to\n * a new position\n */\n\n\nCea608Stream.prototype.setRollUp = function (pts, newBaseRow) {\n // Reset the base row to the bottom row when switching modes\n if (this.mode_ !== 'rollUp') {\n this.row_ = BOTTOM_ROW;\n this.mode_ = 'rollUp'; // Spec says to wipe memories when switching to roll-up\n\n this.flushDisplayed(pts);\n this.nonDisplayed_ = createDisplayBuffer();\n this.displayed_ = createDisplayBuffer();\n }\n\n if (newBaseRow !== undefined && newBaseRow !== this.row_) {\n // move currently displayed captions (up or down) to the new base row\n for (var i = 0; i < this.rollUpRows_; i++) {\n this.displayed_[newBaseRow - i] = this.displayed_[this.row_ - i];\n this.displayed_[this.row_ - i] = '';\n }\n }\n\n if (newBaseRow === undefined) {\n newBaseRow = this.row_;\n }\n\n this.topRow_ = newBaseRow - this.rollUpRows_ + 1;\n}; // Adds the opening HTML tag for the passed character to the caption text,\n// and keeps track of it for later closing\n\n\nCea608Stream.prototype.addFormatting = function (pts, format) {\n this.formatting_ = this.formatting_.concat(format);\n var text = format.reduce(function (text, format) {\n return text + '<' + format + '>';\n }, '');\n this[this.mode_](pts, text);\n}; // Adds HTML closing tags for current formatting to caption text and\n// clears remembered formatting\n\n\nCea608Stream.prototype.clearFormatting = function (pts) {\n if (!this.formatting_.length) {\n return;\n }\n\n var text = this.formatting_.reverse().reduce(function (text, format) {\n return text + '</' + format + '>';\n }, '');\n this.formatting_ = [];\n this[this.mode_](pts, text);\n}; // Mode Implementations\n\n\nCea608Stream.prototype.popOn = function (pts, text) {\n var baseRow = this.nonDisplayed_[this.row_]; // buffer characters\n\n baseRow += text;\n this.nonDisplayed_[this.row_] = baseRow;\n};\n\nCea608Stream.prototype.rollUp = function (pts, text) {\n var baseRow = this.displayed_[this.row_];\n baseRow += text;\n this.displayed_[this.row_] = baseRow;\n};\n\nCea608Stream.prototype.shiftRowsUp_ = function () {\n var i; // clear out inactive rows\n\n for (i = 0; i < this.topRow_; i++) {\n this.displayed_[i] = '';\n }\n\n for (i = this.row_ + 1; i < BOTTOM_ROW + 1; i++) {\n this.displayed_[i] = '';\n } // shift displayed rows up\n\n\n for (i = this.topRow_; i < this.row_; i++) {\n this.displayed_[i] = this.displayed_[i + 1];\n } // clear out the bottom row\n\n\n this.displayed_[this.row_] = '';\n};\n\nCea608Stream.prototype.paintOn = function (pts, text) {\n var baseRow = this.displayed_[this.row_];\n baseRow += text;\n this.displayed_[this.row_] = baseRow;\n}; // exports\n\n\nmodule.exports = {\n CaptionStream: CaptionStream,\n Cea608Stream: Cea608Stream\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbTJ0cy9jYXB0aW9uLXN0cmVhbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbXV4LmpzL2xpYi9tMnRzL2NhcHRpb24tc3RyZWFtLmpzP2I5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtdXguanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEJyaWdodGNvdmVcbiAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqXG4gKiBSZWFkcyBpbi1iYW5kIGNhcHRpb24gaW5mb3JtYXRpb24gZnJvbSBhIHZpZGVvIGVsZW1lbnRhcnlcbiAqIHN0cmVhbS4gQ2FwdGlvbnMgbXVzdCBmb2xsb3cgdGhlIENFQS03MDggc3RhbmRhcmQgZm9yIGluamVjdGlvblxuICogaW50byBhbiBNUEVHLTIgdHJhbnNwb3J0IHN0cmVhbXMuXG4gKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NFQS03MDhcbiAqIEBzZWUgaHR0cHM6Ly93d3cuZ3BvLmdvdi9mZHN5cy9wa2cvQ0ZSLTIwMDctdGl0bGU0Ny12b2wxL3BkZi9DRlItMjAwNy10aXRsZTQ3LXZvbDEtc2VjMTUtMTE5LnBkZlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExpbmsgVG8gVHJhbnNwb3J0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi4vdXRpbHMvc3RyZWFtJyk7XG52YXIgY2VhNzA4UGFyc2VyID0gcmVxdWlyZSgnLi4vdG9vbHMvY2FwdGlvbi1wYWNrZXQtcGFyc2VyJyk7XG5cbnZhciBDYXB0aW9uU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cbiAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuY2FwdGlvblBhY2tldHNfID0gW107XG5cbiAgdGhpcy5jY1N0cmVhbXNfID0gW1xuICAgIG5ldyBDZWE2MDhTdHJlYW0oMCwgMCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBuZXcgQ2VhNjA4U3RyZWFtKDAsIDEpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgbmV3IENlYTYwOFN0cmVhbSgxLCAwKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIG5ldyBDZWE2MDhTdHJlYW0oMSwgMSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBdO1xuXG4gIHRoaXMucmVzZXQoKTtcblxuICAvLyBmb3J3YXJkIGRhdGEgYW5kIGRvbmUgZXZlbnRzIGZyb20gQ0NzIHRvIHRoaXMgQ2FwdGlvblN0cmVhbVxuICB0aGlzLmNjU3RyZWFtc18uZm9yRWFjaChmdW5jdGlvbihjYykge1xuICAgIGNjLm9uKCdkYXRhJywgdGhpcy50cmlnZ2VyLmJpbmQodGhpcywgJ2RhdGEnKSk7XG4gICAgY2Mub24oJ3BhcnRpYWxkb25lJywgdGhpcy50cmlnZ2VyLmJpbmQodGhpcywgJ3BhcnRpYWxkb25lJykpO1xuICAgIGNjLm9uKCdkb25lJywgdGhpcy50cmlnZ2VyLmJpbmQodGhpcywgJ2RvbmUnKSk7XG4gIH0sIHRoaXMpO1xuXG59O1xuXG5DYXB0aW9uU3RyZWFtLnByb3RvdHlwZSA9IG5ldyBTdHJlYW0oKTtcbkNhcHRpb25TdHJlYW0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihldmVudCkge1xuICB2YXIgc2VpLCB1c2VyRGF0YSwgbmV3Q2FwdGlvblBhY2tldHM7XG5cbiAgLy8gb25seSBleGFtaW5lIFNFSSBOQUxzXG4gIGlmIChldmVudC5uYWxVbml0VHlwZSAhPT0gJ3NlaV9yYnNwJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHBhcnNlIHRoZSBzZWlcbiAgc2VpID0gY2VhNzA4UGFyc2VyLnBhcnNlU2VpKGV2ZW50LmVzY2FwZWRSQlNQKTtcblxuICAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgdXNlcl9kYXRhX3JlZ2lzdGVyZWRfaXR1X3RfdDM1XG4gIGlmIChzZWkucGF5bG9hZFR5cGUgIT09IGNlYTcwOFBhcnNlci5VU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBvdXQgdGhlIHVzZXIgZGF0YSBwYXlsb2FkXG4gIHVzZXJEYXRhID0gY2VhNzA4UGFyc2VyLnBhcnNlVXNlckRhdGEoc2VpKTtcblxuICAvLyBpZ25vcmUgdW5yZWNvZ25pemVkIHVzZXJEYXRhXG4gIGlmICghdXNlckRhdGEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTb21ldGltZXMsIHRoZSBzYW1lIHNlZ21lbnQgIyB3aWxsIGJlIGRvd25sb2FkZWQgdHdpY2UuIFRvIHN0b3AgdGhlXG4gIC8vIGNhcHRpb24gZGF0YSBmcm9tIGJlaW5nIHByb2Nlc3NlZCB0d2ljZSwgd2UgdHJhY2sgdGhlIGxhdGVzdCBkdHMgd2UndmVcbiAgLy8gcmVjZWl2ZWQgYW5kIGlnbm9yZSBldmVyeXRoaW5nIHdpdGggYSBkdHMgYmVmb3JlIHRoYXQuIEhvd2V2ZXIsIHNpbmNlXG4gIC8vIGRhdGEgZm9yIGEgc3BlY2lmaWMgZHRzIGNhbiBiZSBzcGxpdCBhY3Jvc3MgcGFja2V0cyBvbiBlaXRoZXIgc2lkZSBvZlxuICAvLyBhIHNlZ21lbnQgYm91bmRhcnksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlICpkb24ndCogaWdub3JlIHRoZSBwYWNrZXRzXG4gIC8vIGZyb20gdGhlICpuZXh0KiBzZWdtZW50IHRoYXQgaGF2ZSBkdHMgPT09IHRoaXMubGF0ZXN0RHRzXy4gQnkgY29uc3RhbnRseVxuICAvLyB0cmFja2luZyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBkdHMgPT09IHRoaXMubGF0ZXN0RHRzXywgd2VcbiAgLy8ga25vdyBob3cgbWFueSBzaG91bGQgYmUgaWdub3JlZCBvbmNlIHdlIHN0YXJ0IHJlY2VpdmluZyBkdXBsaWNhdGVzLlxuICBpZiAoZXZlbnQuZHRzIDwgdGhpcy5sYXRlc3REdHNfKSB7XG4gICAgLy8gV2UndmUgc3RhcnRlZCBnZXR0aW5nIG9sZGVyIGRhdGEsIHNvIHNldCB0aGUgZmxhZy5cbiAgICB0aGlzLmlnbm9yZU5leHRFcXVhbER0c18gPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICgoZXZlbnQuZHRzID09PSB0aGlzLmxhdGVzdER0c18pICYmICh0aGlzLmlnbm9yZU5leHRFcXVhbER0c18pKSB7XG4gICAgdGhpcy5udW1TYW1lRHRzXy0tO1xuICAgIGlmICghdGhpcy5udW1TYW1lRHRzXykge1xuICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgdGhlIGxhc3QgZHVwbGljYXRlIHBhY2tldCwgdGltZSB0byBzdGFydCBwcm9jZXNzaW5nIGFnYWluXG4gICAgICB0aGlzLmlnbm9yZU5leHRFcXVhbER0c18gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcGFyc2Ugb3V0IENDIGRhdGEgcGFja2V0cyBhbmQgc2F2ZSB0aGVtIGZvciBsYXRlclxuICBuZXdDYXB0aW9uUGFja2V0cyA9IGNlYTcwOFBhcnNlci5wYXJzZUNhcHRpb25QYWNrZXRzKGV2ZW50LnB0cywgdXNlckRhdGEpO1xuICB0aGlzLmNhcHRpb25QYWNrZXRzXyA9IHRoaXMuY2FwdGlvblBhY2tldHNfLmNvbmNhdChuZXdDYXB0aW9uUGFja2V0cyk7XG4gIGlmICh0aGlzLmxhdGVzdER0c18gIT09IGV2ZW50LmR0cykge1xuICAgIHRoaXMubnVtU2FtZUR0c18gPSAwO1xuICB9XG4gIHRoaXMubnVtU2FtZUR0c18rKztcbiAgdGhpcy5sYXRlc3REdHNfID0gZXZlbnQuZHRzO1xufTtcblxuQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuZmx1c2hDQ1N0cmVhbXMgPSBmdW5jdGlvbihmbHVzaFR5cGUpIHtcbiAgdGhpcy5jY1N0cmVhbXNfLmZvckVhY2goZnVuY3Rpb24oY2MpIHtcbiAgICByZXR1cm4gZmx1c2hUeXBlID09PSAnZmx1c2gnID8gY2MuZmx1c2goKSA6IGNjLnBhcnRpYWxGbHVzaCgpO1xuICB9LCB0aGlzKTtcbn07XG5cbkNhcHRpb25TdHJlYW0ucHJvdG90eXBlLmZsdXNoU3RyZWFtID0gZnVuY3Rpb24oZmx1c2hUeXBlKSB7XG4gIC8vIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBwYXJzZWQgY2FwdGlvbnMgYmVmb3JlIHByb2NlZWRpbmdcbiAgaWYgKCF0aGlzLmNhcHRpb25QYWNrZXRzXy5sZW5ndGgpIHtcbiAgICB0aGlzLmZsdXNoQ0NTdHJlYW1zKGZsdXNoVHlwZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSW4gQ2hyb21lLCB0aGUgQXJyYXkjc29ydCBmdW5jdGlvbiBpcyBub3Qgc3RhYmxlIHNvIGFkZCBhXG4gIC8vIHByZXNvcnRJbmRleCB0aGF0IHdlIGNhbiB1c2UgdG8gZW5zdXJlIHdlIGdldCBhIHN0YWJsZS1zb3J0XG4gIHRoaXMuY2FwdGlvblBhY2tldHNfLmZvckVhY2goZnVuY3Rpb24oZWxlbSwgaWR4KSB7XG4gICAgZWxlbS5wcmVzb3J0SW5kZXggPSBpZHg7XG4gIH0pO1xuXG4gIC8vIHNvcnQgY2FwdGlvbiBieXRlLXBhaXJzIGJhc2VkIG9uIHRoZWlyIFBUUyB2YWx1ZXNcbiAgdGhpcy5jYXB0aW9uUGFja2V0c18uc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgaWYgKGEucHRzID09PSBiLnB0cykge1xuICAgICAgcmV0dXJuIGEucHJlc29ydEluZGV4IC0gYi5wcmVzb3J0SW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBhLnB0cyAtIGIucHRzO1xuICB9KTtcblxuICB0aGlzLmNhcHRpb25QYWNrZXRzXy5mb3JFYWNoKGZ1bmN0aW9uKHBhY2tldCkge1xuICAgIGlmIChwYWNrZXQudHlwZSA8IDIpIHtcbiAgICAgIC8vIERpc3BhdGNoIHBhY2tldCB0byB0aGUgcmlnaHQgQ2VhNjA4U3RyZWFtXG4gICAgICB0aGlzLmRpc3BhdGNoQ2VhNjA4UGFja2V0KHBhY2tldCk7XG4gICAgfVxuICAgIC8vIHRoaXMgaXMgd2hlcmUgYW4gJ2Vsc2UnIHdvdWxkIGdvIGZvciBhIGRpc3BhdGNoaW5nIHBhY2tldHNcbiAgICAvLyB0byBhIHRoZW9yZXRpY2FsIENlYTcwOFN0cmVhbSB0aGF0IGhhbmRsZXMgU0VSVklDRW4gZGF0YVxuICB9LCB0aGlzKTtcblxuICB0aGlzLmNhcHRpb25QYWNrZXRzXy5sZW5ndGggPSAwO1xuICB0aGlzLmZsdXNoQ0NTdHJlYW1zKGZsdXNoVHlwZSk7XG59O1xuXG5DYXB0aW9uU3RyZWFtLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5mbHVzaFN0cmVhbSgnZmx1c2gnKTtcbn07XG5cbi8vIE9ubHkgY2FsbGVkIGlmIGhhbmRsaW5nIHBhcnRpYWwgZGF0YVxuQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUucGFydGlhbEZsdXNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZsdXNoU3RyZWFtKCdwYXJ0aWFsRmx1c2gnKTtcbn07XG5cbkNhcHRpb25TdHJlYW0ucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubGF0ZXN0RHRzXyA9IG51bGw7XG4gIHRoaXMuaWdub3JlTmV4dEVxdWFsRHRzXyA9IGZhbHNlO1xuICB0aGlzLm51bVNhbWVEdHNfID0gMDtcbiAgdGhpcy5hY3RpdmVDZWE2MDhDaGFubmVsXyA9IFtudWxsLCBudWxsXTtcbiAgdGhpcy5jY1N0cmVhbXNfLmZvckVhY2goZnVuY3Rpb24oY2NTdHJlYW0pIHtcbiAgICBjY1N0cmVhbS5yZXNldCgpO1xuICB9KTtcbn07XG5cbi8vIEZyb20gdGhlIENFQS02MDggc3BlYzpcbi8qXG4gKiBXaGVuIFhEUyBzdWItcGFja2V0cyBhcmUgaW50ZXJsZWF2ZWQgd2l0aCBvdGhlciBzZXJ2aWNlcywgdGhlIGVuZCBvZiBlYWNoIHN1Yi1wYWNrZXQgc2hhbGwgYmUgZm9sbG93ZWRcbiAqIGJ5IGEgY29udHJvbCBwYWlyIHRvIGNoYW5nZSB0byBhIGRpZmZlcmVudCBzZXJ2aWNlLiBXaGVuIGFueSBvZiB0aGUgY29udHJvbCBjb2RlcyBmcm9tIDB4MTAgdG8gMHgxRiBpc1xuICogdXNlZCB0byBiZWdpbiBhIGNvbnRyb2wgY29kZSBwYWlyLCBpdCBpbmRpY2F0ZXMgdGhlIHJldHVybiB0byBjYXB0aW9uaW5nIG9yIFRleHQgZGF0YS4gVGhlIGNvbnRyb2wgY29kZSBwYWlyXG4gKiBhbmQgc3Vic2VxdWVudCBkYXRhIHNob3VsZCB0aGVuIGJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIEZDQyBydWxlcy4gSXQgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgdGhlXG4gKiBsaW5lIDIxIGRhdGEgZW5jb2RlciB0byBhdXRvbWF0aWNhbGx5IGluc2VydCBhIGNvbnRyb2wgY29kZSBwYWlyIChpLmUuIFJDTCwgUlUyLCBSVTMsIFJVNCwgUkRDLCBvciBSVEQpXG4gKiB0byBzd2l0Y2ggdG8gY2FwdGlvbmluZyBvciBUZXh0LlxuKi9cbi8vIFdpdGggdGhhdCBpbiBtaW5kLCB3ZSBpZ25vcmUgYW55IGRhdGEgYmV0d2VlbiBhbiBYRFMgY29udHJvbCBjb2RlIGFuZCBhXG4vLyBzdWJzZXF1ZW50IGNsb3NlZC1jYXB0aW9uaW5nIGNvbnRyb2wgY29kZS5cbkNhcHRpb25TdHJlYW0ucHJvdG90eXBlLmRpc3BhdGNoQ2VhNjA4UGFja2V0ID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIC8vIE5PVEU6IHBhY2tldC50eXBlIGlzIHRoZSBDRUE2MDggZmllbGRcbiAgaWYgKHRoaXMuc2V0c1RleHRPclhEU0FjdGl2ZShwYWNrZXQpKSB7XG4gICAgdGhpcy5hY3RpdmVDZWE2MDhDaGFubmVsX1twYWNrZXQudHlwZV0gPSBudWxsO1xuICB9IGVsc2UgaWYgKHRoaXMuc2V0c0NoYW5uZWwxQWN0aXZlKHBhY2tldCkpIHtcbiAgICB0aGlzLmFjdGl2ZUNlYTYwOENoYW5uZWxfW3BhY2tldC50eXBlXSA9IDA7XG4gIH0gZWxzZSBpZiAodGhpcy5zZXRzQ2hhbm5lbDJBY3RpdmUocGFja2V0KSkge1xuICAgIHRoaXMuYWN0aXZlQ2VhNjA4Q2hhbm5lbF9bcGFja2V0LnR5cGVdID0gMTtcbiAgfVxuICBpZiAodGhpcy5hY3RpdmVDZWE2MDhDaGFubmVsX1twYWNrZXQudHlwZV0gPT09IG51bGwpIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHJlY2VpdmVkIGFueXRoaW5nIHRvIHNldCB0aGUgYWN0aXZlIGNoYW5uZWwsIG9yIHRoZVxuICAgIC8vIHBhY2tldHMgYXJlIFRleHQvWERTIGRhdGEsIGRpc2NhcmQgdGhlIGRhdGE7IHdlIGRvbid0IHdhbnQganVtYmxlZFxuICAgIC8vIGNhcHRpb25zXG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuY2NTdHJlYW1zX1socGFja2V0LnR5cGUgPDwgMSkgKyB0aGlzLmFjdGl2ZUNlYTYwOENoYW5uZWxfW3BhY2tldC50eXBlXV0ucHVzaChwYWNrZXQpO1xufTtcblxuQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuc2V0c0NoYW5uZWwxQWN0aXZlID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHJldHVybiAoKHBhY2tldC5jY0RhdGEgJiAweDc4MDApID09PSAweDEwMDApO1xufTtcbkNhcHRpb25TdHJlYW0ucHJvdG90eXBlLnNldHNDaGFubmVsMkFjdGl2ZSA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICByZXR1cm4gKChwYWNrZXQuY2NEYXRhICYgMHg3ODAwKSA9PT0gMHgxODAwKTtcbn07XG5DYXB0aW9uU3RyZWFtLnByb3RvdHlwZS5zZXRzVGV4dE9yWERTQWN0aXZlID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHJldHVybiAoKHBhY2tldC5jY0RhdGEgJiAweDcxMDApID09PSAweDAxMDApIHx8XG4gICAgKChwYWNrZXQuY2NEYXRhICYgMHg3OGZlKSA9PT0gMHgxMDJhKSB8fFxuICAgICgocGFja2V0LmNjRGF0YSAmIDB4NzhmZSkgPT09IDB4MTgyYSk7XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXNzaW9uIHRvIEFwcGxpY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRoaXMgaGFzaCBtYXBzIG5vbi1BU0NJSSwgc3BlY2lhbCwgYW5kIGV4dGVuZGVkIGNoYXJhY3RlciBjb2RlcyB0byB0aGVpclxuLy8gcHJvcGVyIFVuaWNvZGUgZXF1aXZhbGVudC4gVGhlIGZpcnN0IGtleXMgdGhhdCBhcmUgb25seSBhIHNpbmdsZSBieXRlXG4vLyBhcmUgdGhlIG5vbi1zdGFuZGFyZCBBU0NJSSBjaGFyYWN0ZXJzLCB3aGljaCBzaW1wbHkgbWFwIHRoZSBDRUE2MDggYnl0ZVxuLy8gdG8gdGhlIHN0YW5kYXJkIEFTQ0lJL1VuaWNvZGUuIFRoZSB0d28tYnl0ZSBrZXlzIHRoYXQgZm9sbG93IGFyZSB0aGUgQ0VBNjA4XG4vLyBjaGFyYWN0ZXIgY29kZXMsIGJ1dCBoYXZlIHRoZWlyIE1TQiBiaXRtYXNrZWQgd2l0aCAweDAzIHNvIHRoYXQgYSBsb29rdXBcbi8vIGNhbiBiZSBwZXJmb3JtZWQgcmVnYXJkbGVzcyBvZiB0aGUgZmllbGQgYW5kIGRhdGEgY2hhbm5lbCBvbiB3aGljaCB0aGVcbi8vIGNoYXJhY3RlciBjb2RlIHdhcyByZWNlaXZlZC5cbnZhciBDSEFSQUNURVJfVFJBTlNMQVRJT04gPSB7XG4gIDB4MmE6IDB4ZTEsICAgICAvLyDDoVxuICAweDVjOiAweGU5LCAgICAgLy8gw6lcbiAgMHg1ZTogMHhlZCwgICAgIC8vIMOtXG4gIDB4NWY6IDB4ZjMsICAgICAvLyDDs1xuICAweDYwOiAweGZhLCAgICAgLy8gw7pcbiAgMHg3YjogMHhlNywgICAgIC8vIMOnXG4gIDB4N2M6IDB4ZjcsICAgICAvLyDDt1xuICAweDdkOiAweGQxLCAgICAgLy8gw5FcbiAgMHg3ZTogMHhmMSwgICAgIC8vIMOxXG4gIDB4N2Y6IDB4MjU4OCwgICAvLyDilohcbiAgMHgwMTMwOiAweGFlLCAgIC8vIMKuXG4gIDB4MDEzMTogMHhiMCwgICAvLyDCsFxuICAweDAxMzI6IDB4YmQsICAgLy8gwr1cbiAgMHgwMTMzOiAweGJmLCAgIC8vIMK/XG4gIDB4MDEzNDogMHgyMTIyLCAvLyDihKJcbiAgMHgwMTM1OiAweGEyLCAgIC8vIMKiXG4gIDB4MDEzNjogMHhhMywgICAvLyDCo1xuICAweDAxMzc6IDB4MjY2YSwgLy8g4pmqXG4gIDB4MDEzODogMHhlMCwgICAvLyDDoFxuICAweDAxMzk6IDB4YTAsICAgLy9cbiAgMHgwMTNhOiAweGU4LCAgIC8vIMOoXG4gIDB4MDEzYjogMHhlMiwgICAvLyDDolxuICAweDAxM2M6IDB4ZWEsICAgLy8gw6pcbiAgMHgwMTNkOiAweGVlLCAgIC8vIMOuXG4gIDB4MDEzZTogMHhmNCwgICAvLyDDtFxuICAweDAxM2Y6IDB4ZmIsICAgLy8gw7tcbiAgMHgwMjIwOiAweGMxLCAgIC8vIMOBXG4gIDB4MDIyMTogMHhjOSwgICAvLyDDiVxuICAweDAyMjI6IDB4ZDMsICAgLy8gw5NcbiAgMHgwMjIzOiAweGRhLCAgIC8vIMOaXG4gIDB4MDIyNDogMHhkYywgICAvLyDDnFxuICAweDAyMjU6IDB4ZmMsICAgLy8gw7xcbiAgMHgwMjI2OiAweDIwMTgsIC8vIOKAmFxuICAweDAyMjc6IDB4YTEsICAgLy8gwqFcbiAgMHgwMjI4OiAweDJhLCAgIC8vICpcbiAgMHgwMjI5OiAweDI3LCAgIC8vICdcbiAgMHgwMjJhOiAweDIwMTQsIC8vIOKAlFxuICAweDAyMmI6IDB4YTksICAgLy8gwqlcbiAgMHgwMjJjOiAweDIxMjAsIC8vIOKEoFxuICAweDAyMmQ6IDB4MjAyMiwgLy8g4oCiXG4gIDB4MDIyZTogMHgyMDFjLCAvLyDigJxcbiAgMHgwMjJmOiAweDIwMWQsIC8vIOKAnVxuICAweDAyMzA6IDB4YzAsICAgLy8gw4BcbiAgMHgwMjMxOiAweGMyLCAgIC8vIMOCXG4gIDB4MDIzMjogMHhjNywgICAvLyDDh1xuICAweDAyMzM6IDB4YzgsICAgLy8gw4hcbiAgMHgwMjM0OiAweGNhLCAgIC8vIMOKXG4gIDB4MDIzNTogMHhjYiwgICAvLyDDi1xuICAweDAyMzY6IDB4ZWIsICAgLy8gw6tcbiAgMHgwMjM3OiAweGNlLCAgIC8vIMOOXG4gIDB4MDIzODogMHhjZiwgICAvLyDDj1xuICAweDAyMzk6IDB4ZWYsICAgLy8gw69cbiAgMHgwMjNhOiAweGQ0LCAgIC8vIMOUXG4gIDB4MDIzYjogMHhkOSwgICAvLyDDmVxuICAweDAyM2M6IDB4ZjksICAgLy8gw7lcbiAgMHgwMjNkOiAweGRiLCAgIC8vIMObXG4gIDB4MDIzZTogMHhhYiwgICAvLyDCq1xuICAweDAyM2Y6IDB4YmIsICAgLy8gwrtcbiAgMHgwMzIwOiAweGMzLCAgIC8vIMODXG4gIDB4MDMyMTogMHhlMywgICAvLyDDo1xuICAweDAzMjI6IDB4Y2QsICAgLy8gw41cbiAgMHgwMzIzOiAweGNjLCAgIC8vIMOMXG4gIDB4MDMyNDogMHhlYywgICAvLyDDrFxuICAweDAzMjU6IDB4ZDIsICAgLy8gw5JcbiAgMHgwMzI2OiAweGYyLCAgIC8vIMOyXG4gIDB4MDMyNzogMHhkNSwgICAvLyDDlVxuICAweDAzMjg6IDB4ZjUsICAgLy8gw7VcbiAgMHgwMzI5OiAweDdiLCAgIC8vIHtcbiAgMHgwMzJhOiAweDdkLCAgIC8vIH1cbiAgMHgwMzJiOiAweDVjLCAgIC8vIFxcXG4gIDB4MDMyYzogMHg1ZSwgICAvLyBeXG4gIDB4MDMyZDogMHg1ZiwgICAvLyBfXG4gIDB4MDMyZTogMHg3YywgICAvLyB8XG4gIDB4MDMyZjogMHg3ZSwgICAvLyB+XG4gIDB4MDMzMDogMHhjNCwgICAvLyDDhFxuICAweDAzMzE6IDB4ZTQsICAgLy8gw6RcbiAgMHgwMzMyOiAweGQ2LCAgIC8vIMOWXG4gIDB4MDMzMzogMHhmNiwgICAvLyDDtlxuICAweDAzMzQ6IDB4ZGYsICAgLy8gw59cbiAgMHgwMzM1OiAweGE1LCAgIC8vIMKlXG4gIDB4MDMzNjogMHhhNCwgICAvLyDCpFxuICAweDAzMzc6IDB4MjUwMiwgLy8g4pSCXG4gIDB4MDMzODogMHhjNSwgICAvLyDDhVxuICAweDAzMzk6IDB4ZTUsICAgLy8gw6VcbiAgMHgwMzNhOiAweGQ4LCAgIC8vIMOYXG4gIDB4MDMzYjogMHhmOCwgICAvLyDDuFxuICAweDAzM2M6IDB4MjUwYywgLy8g4pSMXG4gIDB4MDMzZDogMHgyNTEwLCAvLyDilJBcbiAgMHgwMzNlOiAweDI1MTQsIC8vIOKUlFxuICAweDAzM2Y6IDB4MjUxOCAgLy8g4pSYXG59O1xuXG52YXIgZ2V0Q2hhckZyb21Db2RlID0gZnVuY3Rpb24oY29kZSkge1xuICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb2RlID0gQ0hBUkFDVEVSX1RSQU5TTEFUSU9OW2NvZGVdIHx8IGNvZGU7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufTtcblxuLy8gdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJvdyBpbiBhIENFQS02MDggZGlzcGxheSBidWZmZXJcbnZhciBCT1RUT01fUk9XID0gMTQ7XG5cbi8vIFRoaXMgYXJyYXkgaXMgdXNlZCBmb3IgbWFwcGluZyBQQUNzIC0+IHJvdyAjLCBzaW5jZSB0aGVyZSdzIG5vIHdheSBvZlxuLy8gZ2V0dGluZyBpdCB0aHJvdWdoIGJpdCBsb2dpYy5cbnZhciBST1dTID0gWzB4MTEwMCwgMHgxMTIwLCAweDEyMDAsIDB4MTIyMCwgMHgxNTAwLCAweDE1MjAsIDB4MTYwMCwgMHgxNjIwLFxuICAgICAgICAgICAgMHgxNzAwLCAweDE3MjAsIDB4MTAwMCwgMHgxMzAwLCAweDEzMjAsIDB4MTQwMCwgMHgxNDIwXTtcblxuLy8gQ0VBLTYwOCBjYXB0aW9ucyBhcmUgcmVuZGVyZWQgb250byBhIDM0eDE1IG1hdHJpeCBvZiBjaGFyYWN0ZXJcbi8vIGNlbGxzLiBUaGUgXCJib3R0b21cIiByb3cgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgb3V0ZXIgYXJyYXkuXG52YXIgY3JlYXRlRGlzcGxheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzdWx0ID0gW10sIGkgPSBCT1RUT01fUk9XICsgMTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIENlYTYwOFN0cmVhbSA9IGZ1bmN0aW9uKGZpZWxkLCBkYXRhQ2hhbm5lbCkge1xuICBDZWE2MDhTdHJlYW0ucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuICB0aGlzLmZpZWxkXyA9IGZpZWxkIHx8IDA7XG4gIHRoaXMuZGF0YUNoYW5uZWxfID0gZGF0YUNoYW5uZWwgfHwgMDtcblxuICB0aGlzLm5hbWVfID0gJ0NDJyArICgoKHRoaXMuZmllbGRfIDw8IDEpIHwgdGhpcy5kYXRhQ2hhbm5lbF8pICsgMSk7XG5cbiAgdGhpcy5zZXRDb25zdGFudHMoKTtcbiAgdGhpcy5yZXNldCgpO1xuXG4gIHRoaXMucHVzaCA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICAgIHZhciBkYXRhLCBzd2FwLCBjaGFyMCwgY2hhcjEsIHRleHQ7XG4gICAgLy8gcmVtb3ZlIHRoZSBwYXJpdHkgYml0c1xuICAgIGRhdGEgPSBwYWNrZXQuY2NEYXRhICYgMHg3ZjdmO1xuXG4gICAgLy8gaWdub3JlIGR1cGxpY2F0ZSBjb250cm9sIGNvZGVzOyB0aGUgc3BlYyBkZW1hbmRzIHRoZXkncmUgc2VudCB0d2ljZVxuICAgIGlmIChkYXRhID09PSB0aGlzLmxhc3RDb250cm9sQ29kZV8pIHtcbiAgICAgIHRoaXMubGFzdENvbnRyb2xDb2RlXyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgY29udHJvbCBjb2Rlc1xuICAgIGlmICgoZGF0YSAmIDB4ZjAwMCkgPT09IDB4MTAwMCkge1xuICAgICAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT09IHRoaXMuUEFERElOR18pIHtcbiAgICAgIHRoaXMubGFzdENvbnRyb2xDb2RlXyA9IG51bGw7XG4gICAgfVxuXG4gICAgY2hhcjAgPSBkYXRhID4+PiA4O1xuICAgIGNoYXIxID0gZGF0YSAmIDB4ZmY7XG5cbiAgICBpZiAoZGF0YSA9PT0gdGhpcy5QQURESU5HXykge1xuICAgICAgcmV0dXJuO1xuXG4gICAgfSBlbHNlIGlmIChkYXRhID09PSB0aGlzLlJFU1VNRV9DQVBUSU9OX0xPQURJTkdfKSB7XG4gICAgICB0aGlzLm1vZGVfID0gJ3BvcE9uJztcblxuICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5FTkRfT0ZfQ0FQVElPTl8pIHtcbiAgICAgIC8vIElmIGFuIEVPQyBpcyByZWNlaXZlZCB3aGlsZSBpbiBwYWludC1vbiBtb2RlLCB0aGUgZGlzcGxheWVkIGNhcHRpb25cbiAgICAgIC8vIHRleHQgc2hvdWxkIGJlIHN3YXBwZWQgdG8gbm9uLWRpc3BsYXllZCBtZW1vcnkgYXMgaWYgaXQgd2FzIGEgcG9wLW9uXG4gICAgICAvLyBjYXB0aW9uLiBCZWNhdXNlIG9mIHRoYXQsIHdlIHNob3VsZCBleHBsaWNpdGx5IHN3aXRjaCBiYWNrIHRvIHBvcC1vblxuICAgICAgLy8gbW9kZVxuICAgICAgdGhpcy5tb2RlXyA9ICdwb3BPbic7XG4gICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZyhwYWNrZXQucHRzKTtcbiAgICAgIC8vIGlmIGEgY2FwdGlvbiB3YXMgYmVpbmcgZGlzcGxheWVkLCBpdCdzIGdvbmUgbm93XG4gICAgICB0aGlzLmZsdXNoRGlzcGxheWVkKHBhY2tldC5wdHMpO1xuXG4gICAgICAvLyBmbGlwIG1lbW9yeVxuICAgICAgc3dhcCA9IHRoaXMuZGlzcGxheWVkXztcbiAgICAgIHRoaXMuZGlzcGxheWVkXyA9IHRoaXMubm9uRGlzcGxheWVkXztcbiAgICAgIHRoaXMubm9uRGlzcGxheWVkXyA9IHN3YXA7XG5cbiAgICAgIC8vIHN0YXJ0IG1lYXN1cmluZyB0aGUgdGltZSB0byBkaXNwbGF5IHRoZSBjYXB0aW9uXG4gICAgICB0aGlzLnN0YXJ0UHRzXyA9IHBhY2tldC5wdHM7XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuUk9MTF9VUF8yX1JPV1NfKSB7XG4gICAgICB0aGlzLnJvbGxVcFJvd3NfID0gMjtcbiAgICAgIHRoaXMuc2V0Um9sbFVwKHBhY2tldC5wdHMpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5ST0xMX1VQXzNfUk9XU18pIHtcbiAgICAgIHRoaXMucm9sbFVwUm93c18gPSAzO1xuICAgICAgdGhpcy5zZXRSb2xsVXAocGFja2V0LnB0cyk7XG4gICAgfSBlbHNlIGlmIChkYXRhID09PSB0aGlzLlJPTExfVVBfNF9ST1dTXykge1xuICAgICAgdGhpcy5yb2xsVXBSb3dzXyA9IDQ7XG4gICAgICB0aGlzLnNldFJvbGxVcChwYWNrZXQucHRzKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuQ0FSUklBR0VfUkVUVVJOXykge1xuICAgICAgdGhpcy5jbGVhckZvcm1hdHRpbmcocGFja2V0LnB0cyk7XG4gICAgICB0aGlzLmZsdXNoRGlzcGxheWVkKHBhY2tldC5wdHMpO1xuICAgICAgdGhpcy5zaGlmdFJvd3NVcF8oKTtcbiAgICAgIHRoaXMuc3RhcnRQdHNfID0gcGFja2V0LnB0cztcblxuICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5CQUNLU1BBQ0VfKSB7XG4gICAgICBpZiAodGhpcy5tb2RlXyA9PT0gJ3BvcE9uJykge1xuICAgICAgICB0aGlzLm5vbkRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IHRoaXMubm9uRGlzcGxheWVkX1t0aGlzLnJvd19dLnNsaWNlKDAsIC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dID0gdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X10uc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5FUkFTRV9ESVNQTEFZRURfTUVNT1JZXykge1xuICAgICAgdGhpcy5mbHVzaERpc3BsYXllZChwYWNrZXQucHRzKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkXyA9IGNyZWF0ZURpc3BsYXlCdWZmZXIoKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuRVJBU0VfTk9OX0RJU1BMQVlFRF9NRU1PUllfKSB7XG4gICAgICB0aGlzLm5vbkRpc3BsYXllZF8gPSBjcmVhdGVEaXNwbGF5QnVmZmVyKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuUkVTVU1FX0RJUkVDVF9DQVBUSU9OSU5HXykge1xuICAgICAgaWYgKHRoaXMubW9kZV8gIT09ICdwYWludE9uJykge1xuICAgICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gcHJvcGVyIGNhcHRpb24gcG9zaXRpb25pbmcgaXNcbiAgICAgICAgLy8gaW1wbGVtZW50ZWRcbiAgICAgICAgdGhpcy5mbHVzaERpc3BsYXllZChwYWNrZXQucHRzKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlXyA9ICdwYWludE9uJztcbiAgICAgIHRoaXMuc3RhcnRQdHNfID0gcGFja2V0LnB0cztcblxuICAgIC8vIEFwcGVuZCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gY2FwdGlvbiB0ZXh0XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU3BlY2lhbENoYXJhY3RlcihjaGFyMCwgY2hhcjEpKSB7XG4gICAgICAvLyBCaXRtYXNrIGNoYXIwIHNvIHRoYXQgd2UgY2FuIGFwcGx5IGNoYXJhY3RlciB0cmFuc2Zvcm1hdGlvbnNcbiAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgZmllbGQgYW5kIGRhdGEgY2hhbm5lbC5cbiAgICAgIC8vIFRoZW4gYnl0ZS1zaGlmdCB0byB0aGUgbGVmdCBhbmQgT1Igd2l0aCBjaGFyMSBzbyB3ZSBjYW4gcGFzcyB0aGVcbiAgICAgIC8vIGVudGlyZSBjaGFyYWN0ZXIgY29kZSB0byBgZ2V0Q2hhckZyb21Db2RlYC5cbiAgICAgIGNoYXIwID0gKGNoYXIwICYgMHgwMykgPDwgODtcbiAgICAgIHRleHQgPSBnZXRDaGFyRnJvbUNvZGUoY2hhcjAgfCBjaGFyMSk7XG4gICAgICB0aGlzW3RoaXMubW9kZV9dKHBhY2tldC5wdHMsIHRleHQpO1xuICAgICAgdGhpcy5jb2x1bW5fKys7XG5cbiAgICAvLyBBcHBlbmQgZXh0ZW5kZWQgY2hhcmFjdGVycyB0byBjYXB0aW9uIHRleHRcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHRDaGFyYWN0ZXIoY2hhcjAsIGNoYXIxKSkge1xuICAgICAgLy8gRXh0ZW5kZWQgY2hhcmFjdGVycyBhbHdheXMgZm9sbG93IHRoZWlyIFwibm9uLWV4dGVuZGVkXCIgZXF1aXZhbGVudHMuXG4gICAgICAvLyBJRSBpZiBhIFwiw6hcIiBpcyBkZXNpcmVkLCB5b3UnbGwgYWx3YXlzIHJlY2VpdmUgXCJlw6hcIjsgbm9uLWNvbXBsaWFudFxuICAgICAgLy8gZGVjb2RlcnMgYXJlIHN1cHBvc2VkIHRvIGRyb3AgdGhlIFwiw6hcIiwgd2hpbGUgY29tcGxpYW50IGRlY29kZXJzXG4gICAgICAvLyBiYWNrc3BhY2UgdGhlIFwiZVwiIGFuZCBpbnNlcnQgXCLDqFwiLlxuXG4gICAgICAvLyBEZWxldGUgdGhlIHByZXZpb3VzIGNoYXJhY3RlclxuICAgICAgaWYgKHRoaXMubW9kZV8gPT09ICdwb3BPbicpIHtcbiAgICAgICAgdGhpcy5ub25EaXNwbGF5ZWRfW3RoaXMucm93X10gPSB0aGlzLm5vbkRpc3BsYXllZF9bdGhpcy5yb3dfXS5zbGljZSgwLCAtMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cblxuICAgICAgLy8gQml0bWFzayBjaGFyMCBzbyB0aGF0IHdlIGNhbiBhcHBseSBjaGFyYWN0ZXIgdHJhbnNmb3JtYXRpb25zXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGZpZWxkIGFuZCBkYXRhIGNoYW5uZWwuXG4gICAgICAvLyBUaGVuIGJ5dGUtc2hpZnQgdG8gdGhlIGxlZnQgYW5kIE9SIHdpdGggY2hhcjEgc28gd2UgY2FuIHBhc3MgdGhlXG4gICAgICAvLyBlbnRpcmUgY2hhcmFjdGVyIGNvZGUgdG8gYGdldENoYXJGcm9tQ29kZWAuXG4gICAgICBjaGFyMCA9IChjaGFyMCAmIDB4MDMpIDw8IDg7XG4gICAgICB0ZXh0ID0gZ2V0Q2hhckZyb21Db2RlKGNoYXIwIHwgY2hhcjEpO1xuICAgICAgdGhpc1t0aGlzLm1vZGVfXShwYWNrZXQucHRzLCB0ZXh0KTtcbiAgICAgIHRoaXMuY29sdW1uXysrO1xuXG4gICAgLy8gUHJvY2VzcyBtaWQtcm93IGNvZGVzXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzTWlkUm93Q29kZShjaGFyMCwgY2hhcjEpKSB7XG4gICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBub3QgYWRkaXRpdmUsIHNvIGNsZWFyIGFsbCBmb3JtYXR0aW5nXG4gICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZyhwYWNrZXQucHRzKTtcblxuICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCwgbWlkLXJvdyBjb2Rlc1xuICAgICAgLy8gc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggc3BhY2VzLCBzbyBhZGQgb25lIG5vd1xuICAgICAgdGhpc1t0aGlzLm1vZGVfXShwYWNrZXQucHRzLCAnICcpO1xuICAgICAgdGhpcy5jb2x1bW5fKys7XG5cbiAgICAgIGlmICgoY2hhcjEgJiAweGUpID09PSAweGUpIHtcbiAgICAgICAgdGhpcy5hZGRGb3JtYXR0aW5nKHBhY2tldC5wdHMsIFsnaSddKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChjaGFyMSAmIDB4MSkgPT09IDB4MSkge1xuICAgICAgICB0aGlzLmFkZEZvcm1hdHRpbmcocGFja2V0LnB0cywgWyd1J10pO1xuICAgICAgfVxuXG4gICAgLy8gRGV0ZWN0IG9mZnNldCBjb250cm9sIGNvZGVzIGFuZCBhZGp1c3QgY3Vyc29yXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzT2Zmc2V0Q29udHJvbENvZGUoY2hhcjAsIGNoYXIxKSkge1xuICAgICAgLy8gQ3Vyc29yIHBvc2l0aW9uIGlzIHNldCBieSBpbmRlbnQgUEFDIChzZWUgYmVsb3cpIGluIDQtY29sdW1uXG4gICAgICAvLyBpbmNyZW1lbnRzLCB3aXRoIGFuIGFkZGl0aW9uYWwgb2Zmc2V0IGNvZGUgb2YgMS0zIHRvIHJlYWNoIGFueVxuICAgICAgLy8gb2YgdGhlIDMyIGNvbHVtbnMgc3BlY2lmaWVkIGJ5IENFQS02MDguIFNvIGFsbCB3ZSBuZWVkIHRvIGRvXG4gICAgICAvLyBoZXJlIGlzIGluY3JlbWVudCB0aGUgY29sdW1uIGN1cnNvciBieSB0aGUgZ2l2ZW4gb2Zmc2V0LlxuICAgICAgdGhpcy5jb2x1bW5fICs9IChjaGFyMSAmIDB4MDMpO1xuXG4gICAgLy8gRGV0ZWN0IFBBQ3MgKFByZWFtYmxlIEFkZHJlc3MgQ29kZXMpXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUEFDKGNoYXIwLCBjaGFyMSkpIHtcblxuICAgICAgLy8gVGhlcmUncyBubyBsb2dpYyBmb3IgUEFDIC0+IHJvdyBtYXBwaW5nLCBzbyB3ZSBoYXZlIHRvIGp1c3RcbiAgICAgIC8vIGZpbmQgdGhlIHJvdyBjb2RlIGluIGFuIGFycmF5IGFuZCB1c2UgaXRzIGluZGV4IDooXG4gICAgICB2YXIgcm93ID0gUk9XUy5pbmRleE9mKGRhdGEgJiAweDFmMjApO1xuXG4gICAgICAvLyBDb25maWd1cmUgdGhlIGNhcHRpb24gd2luZG93IGlmIHdlJ3JlIGluIHJvbGwtdXAgbW9kZVxuICAgICAgaWYgKHRoaXMubW9kZV8gPT09ICdyb2xsVXAnKSB7XG4gICAgICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBiYXNlIHJvdyBpcyBpbmNvcnJlY3RseSBzZXQuXG4gICAgICAgIC8vIEFzIHBlciB0aGUgcmVjb21tZW5kYXRpb24gaW4gQ0VBLTYwOChCYXNlIFJvdyBJbXBsZW1lbnRhdGlvbiksIGRlZmVyIHRvIHRoZSBudW1iZXJcbiAgICAgICAgLy8gb2Ygcm9sbC11cCByb3dzIHNldC5cbiAgICAgICAgaWYgKHJvdyAtIHRoaXMucm9sbFVwUm93c18gKyAxIDwgMCkge1xuICAgICAgICAgIHJvdyA9IHRoaXMucm9sbFVwUm93c18gLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRSb2xsVXAocGFja2V0LnB0cywgcm93KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvdyAhPT0gdGhpcy5yb3dfKSB7XG4gICAgICAgIC8vIGZvcm1hdHRpbmcgaXMgb25seSBwZXJzaXN0ZW50IGZvciBjdXJyZW50IHJvd1xuICAgICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZyhwYWNrZXQucHRzKTtcbiAgICAgICAgdGhpcy5yb3dfID0gcm93O1xuICAgICAgfVxuICAgICAgLy8gQWxsIFBBQ3MgY2FuIGFwcGx5IHVuZGVybGluZSwgc28gZGV0ZWN0IGFuZCBhcHBseVxuICAgICAgLy8gKEFsbCBvZGQtbnVtYmVyZWQgc2Vjb25kIGJ5dGVzIHNldCB1bmRlcmxpbmUpXG4gICAgICBpZiAoKGNoYXIxICYgMHgxKSAmJiAodGhpcy5mb3JtYXR0aW5nXy5pbmRleE9mKCd1JykgPT09IC0xKSkge1xuICAgICAgICAgIHRoaXMuYWRkRm9ybWF0dGluZyhwYWNrZXQucHRzLCBbJ3UnXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoZGF0YSAmIDB4MTApID09PSAweDEwKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGdvdCBhbiBpbmRlbnQgbGV2ZWwgY29kZS4gRWFjaCBzdWNjZXNzaXZlIGV2ZW4gbnVtYmVyXG4gICAgICAgIC8vIGluY3JlbWVudHMgdGhlIGNvbHVtbiBjdXJzb3IgYnkgNCwgc28gd2UgY2FuIGdldCB0aGUgZGVzaXJlZFxuICAgICAgICAvLyBjb2x1bW4gcG9zaXRpb24gYnkgYml0LXNoaWZ0aW5nIHRvIHRoZSByaWdodCAodG8gZ2V0IG4vMilcbiAgICAgICAgLy8gYW5kIG11bHRpcGx5aW5nIGJ5IDQuXG4gICAgICAgIHRoaXMuY29sdW1uXyA9ICgoZGF0YSAmIDB4ZSkgPj4gMSkgKiA0O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0NvbG9yUEFDKGNoYXIxKSkge1xuICAgICAgICAvLyBpdCdzIGEgY29sb3IgY29kZSwgdGhvdWdoIHdlIG9ubHkgc3VwcG9ydCB3aGl0ZSwgd2hpY2hcbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBub3JtYWwgb3IgaXRhbGljaXplZC4gd2hpdGUgaXRhbGljcyBjYW4gYmVcbiAgICAgICAgLy8gZWl0aGVyIDB4NGUgb3IgMHg2ZSBkZXBlbmRpbmcgb24gdGhlIHJvdywgc28gd2UganVzdFxuICAgICAgICAvLyBiaXR3aXNlLWFuZCB3aXRoIDB4ZSB0byBzZWUgaWYgaXRhbGljcyBzaG91bGQgYmUgdHVybmVkIG9uXG4gICAgICAgIGlmICgoY2hhcjEgJiAweGUpID09PSAweGUpIHtcbiAgICAgICAgICB0aGlzLmFkZEZvcm1hdHRpbmcocGFja2V0LnB0cywgWydpJ10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAvLyBXZSBoYXZlIGEgbm9ybWFsIGNoYXJhY3RlciBpbiBjaGFyMCwgYW5kIHBvc3NpYmx5IG9uZSBpbiBjaGFyMVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc05vcm1hbENoYXIoY2hhcjApKSB7XG4gICAgICBpZiAoY2hhcjEgPT09IDB4MDApIHtcbiAgICAgICAgY2hhcjEgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGV4dCA9IGdldENoYXJGcm9tQ29kZShjaGFyMCk7XG4gICAgICB0ZXh0ICs9IGdldENoYXJGcm9tQ29kZShjaGFyMSk7XG4gICAgICB0aGlzW3RoaXMubW9kZV9dKHBhY2tldC5wdHMsIHRleHQpO1xuICAgICAgdGhpcy5jb2x1bW5fICs9IHRleHQubGVuZ3RoO1xuXG4gICAgfSAvLyBmaW5pc2ggZGF0YSBwcm9jZXNzaW5nXG5cbiAgfTtcbn07XG5DZWE2MDhTdHJlYW0ucHJvdG90eXBlID0gbmV3IFN0cmVhbSgpO1xuLy8gVHJpZ2dlciBhIGN1ZSBwb2ludCB0aGF0IGNhcHR1cmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZVxuLy8gZGlzcGxheSBidWZmZXJcbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuZmx1c2hEaXNwbGF5ZWQgPSBmdW5jdGlvbihwdHMpIHtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLmRpc3BsYXllZF9cbiAgICAvLyByZW1vdmUgc3BhY2VzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHN0cmluZ1xuICAgIC5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LnRyaW0oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gT3JkaW5hcmlseSwgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBIb3dldmVyLCBjYXB0aW9uXG4gICAgICAgIC8vIHBhcnNpbmcgZXJyb3JzIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9ucyBhbmRcbiAgICAgICAgLy8gYnJlYWsgcGxheWJhY2suXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NraXBwaW5nIG1hbGZvcm1lZCBjYXB0aW9uLicpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBjb21iaW5lIGFsbCB0ZXh0IHJvd3MgdG8gZGlzcGxheSBpbiBvbmUgY3VlXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLy8gYW5kIHJlbW92ZSBibGFuayByb3dzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQsIGJ1dCBub3QgdGhlIG1pZGRsZVxuICAgIC5yZXBsYWNlKC9eXFxuK3xcXG4rJC9nLCAnJyk7XG5cbiAgaWYgKGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgdGhpcy50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgc3RhcnRQdHM6IHRoaXMuc3RhcnRQdHNfLFxuICAgICAgZW5kUHRzOiBwdHMsXG4gICAgICB0ZXh0OiBjb250ZW50LFxuICAgICAgc3RyZWFtOiB0aGlzLm5hbWVfXG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogWmVybyBvdXQgdGhlIGRhdGEsIHVzZWQgZm9yIHN0YXJ0dXAgYW5kIG9uIHNlZWtcbiAqL1xuQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm1vZGVfID0gJ3BvcE9uJztcbiAgLy8gV2hlbiBpbiByb2xsLXVwIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCByb3cgdGhhdCB3aWxsXG4gIC8vIGFjdHVhbGx5IGRpc3BsYXkgY2FwdGlvbnMuIElmIGEgY2FwdGlvbiBpcyBzaGlmdGVkIHRvIGEgcm93XG4gIC8vIHdpdGggYSBsb3dlciBpbmRleCB0aGFuIHRoaXMsIGl0IGlzIGNsZWFyZWQgZnJvbSB0aGUgZGlzcGxheVxuICAvLyBidWZmZXJcbiAgdGhpcy50b3BSb3dfID0gMDtcbiAgdGhpcy5zdGFydFB0c18gPSAwO1xuICB0aGlzLmRpc3BsYXllZF8gPSBjcmVhdGVEaXNwbGF5QnVmZmVyKCk7XG4gIHRoaXMubm9uRGlzcGxheWVkXyA9IGNyZWF0ZURpc3BsYXlCdWZmZXIoKTtcbiAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gbnVsbDtcblxuICAvLyBUcmFjayByb3cgYW5kIGNvbHVtbiBmb3IgcHJvcGVyIGxpbmUtYnJlYWtpbmcgYW5kIHNwYWNpbmdcbiAgdGhpcy5jb2x1bW5fID0gMDtcbiAgdGhpcy5yb3dfID0gQk9UVE9NX1JPVztcbiAgdGhpcy5yb2xsVXBSb3dzXyA9IDI7XG5cbiAgLy8gVGhpcyB2YXJpYWJsZSBob2xkcyBjdXJyZW50bHktYXBwbGllZCBmb3JtYXR0aW5nXG4gIHRoaXMuZm9ybWF0dGluZ18gPSBbXTtcbn07XG5cbi8qKlxuICogU2V0cyB1cCBjb250cm9sIGNvZGUgYW5kIHJlbGF0ZWQgY29uc3RhbnRzIGZvciB0aGlzIGluc3RhbmNlXG4gKi9cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuc2V0Q29uc3RhbnRzID0gZnVuY3Rpb24oKSB7XG4gIC8vIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBoYXZlIHRoZXNlIHVzZXM6XG4gIC8vIGV4dF8gOiAgICBjaGFyMCBmb3IgbWlkLXJvdyBjb2RlcywgYW5kIHRoZSBiYXNlIGZvciBleHRlbmRlZFxuICAvLyAgICAgICAgICAgY2hhcnMgKGV4dF8rMCwgZXh0XysxLCBhbmQgZXh0XysyIGFyZSBjaGFyMHMgZm9yXG4gIC8vICAgICAgICAgICBleHRlbmRlZCBjb2RlcylcbiAgLy8gY29udHJvbF86IGNoYXIwIGZvciBjb250cm9sIGNvZGVzLCBleGNlcHQgYnl0ZS1zaGlmdGVkIHRvIHRoZVxuICAvLyAgICAgICAgICAgbGVmdCBzbyB0aGF0IHdlIGNhbiBkbyB0aGlzLmNvbnRyb2xfIHwgQ09OVFJPTF9DT0RFXG4gIC8vIG9mZnNldF86ICBjaGFyMCBmb3IgdGFiIG9mZnNldCBjb2Rlc1xuICAvL1xuICAvLyBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgY29udHJvbCBjb2RlcywgYW5kIF9vbmx5XyBjb250cm9sIGNvZGVzLFxuICAvLyBkaWZmZXIgYmV0d2VlbiBmaWVsZCAxIGFuZCBmaWVsZDIuIEZpZWxkIDIgY29udHJvbCBjb2RlcyBhcmUgYWx3YXlzXG4gIC8vIHRoZWlyIGZpZWxkIDEgdmFsdWUgcGx1cyAxLiBUaGF0J3Mgd2h5IHRoZXJlJ3MgdGhlIFwifCBmaWVsZFwiIG9uIHRoZVxuICAvLyBjb250cm9sIHZhbHVlLlxuICBpZiAodGhpcy5kYXRhQ2hhbm5lbF8gPT09IDApIHtcbiAgICB0aGlzLkJBU0VfICAgICA9IDB4MTA7XG4gICAgdGhpcy5FWFRfICAgICAgPSAweDExO1xuICAgIHRoaXMuQ09OVFJPTF8gID0gKDB4MTQgfCB0aGlzLmZpZWxkXykgPDwgODtcbiAgICB0aGlzLk9GRlNFVF8gICA9IDB4MTc7XG4gIH0gZWxzZSBpZiAodGhpcy5kYXRhQ2hhbm5lbF8gPT09IDEpIHtcbiAgICB0aGlzLkJBU0VfICAgICA9IDB4MTg7XG4gICAgdGhpcy5FWFRfICAgICAgPSAweDE5O1xuICAgIHRoaXMuQ09OVFJPTF8gID0gKDB4MWMgfCB0aGlzLmZpZWxkXykgPDwgODtcbiAgICB0aGlzLk9GRlNFVF8gICA9IDB4MWY7XG4gIH1cblxuICAvLyBDb25zdGFudHMgZm9yIHRoZSBMU0J5dGUgY29tbWFuZCBjb2RlcyByZWNvZ25pemVkIGJ5IENlYTYwOFN0cmVhbS4gVGhpc1xuICAvLyBsaXN0IGlzIG5vdCBleGhhdXN0aXZlLiBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdGluZyBhbmQgc2VtYW50aWNzIHNlZVxuICAvLyBodHRwOi8vd3d3Lmdwby5nb3YvZmRzeXMvcGtnL0NGUi0yMDEwLXRpdGxlNDctdm9sMS9wZGYvQ0ZSLTIwMTAtdGl0bGU0Ny12b2wxLXNlYzE1LTExOS5wZGZcbiAgLy8gUGFkZGluZ1xuICB0aGlzLlBBRERJTkdfICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDtcbiAgLy8gUG9wLW9uIE1vZGVcbiAgdGhpcy5SRVNVTUVfQ0FQVElPTl9MT0FESU5HXyAgICAgPSB0aGlzLkNPTlRST0xfIHwgMHgyMDtcbiAgdGhpcy5FTkRfT0ZfQ0FQVElPTl8gICAgICAgICAgICAgPSB0aGlzLkNPTlRST0xfIHwgMHgyZjtcbiAgLy8gUm9sbC11cCBNb2RlXG4gIHRoaXMuUk9MTF9VUF8yX1JPV1NfICAgICAgICAgICAgID0gdGhpcy5DT05UUk9MXyB8IDB4MjU7XG4gIHRoaXMuUk9MTF9VUF8zX1JPV1NfICAgICAgICAgICAgID0gdGhpcy5DT05UUk9MXyB8IDB4MjY7XG4gIHRoaXMuUk9MTF9VUF80X1JPV1NfICAgICAgICAgICAgID0gdGhpcy5DT05UUk9MXyB8IDB4Mjc7XG4gIHRoaXMuQ0FSUklBR0VfUkVUVVJOXyAgICAgICAgICAgID0gdGhpcy5DT05UUk9MXyB8IDB4MmQ7XG4gIC8vIHBhaW50LW9uIG1vZGVcbiAgdGhpcy5SRVNVTUVfRElSRUNUX0NBUFRJT05JTkdfICAgPSB0aGlzLkNPTlRST0xfIHwgMHgyOTtcbiAgLy8gRXJhc3VyZVxuICB0aGlzLkJBQ0tTUEFDRV8gICAgICAgICAgICAgICAgICA9IHRoaXMuQ09OVFJPTF8gfCAweDIxO1xuICB0aGlzLkVSQVNFX0RJU1BMQVlFRF9NRU1PUllfICAgICA9IHRoaXMuQ09OVFJPTF8gfCAweDJjO1xuICB0aGlzLkVSQVNFX05PTl9ESVNQTEFZRURfTUVNT1JZXyA9IHRoaXMuQ09OVFJPTF8gfCAweDJlO1xufTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSAyLWJ5dGUgcGFja2V0IGRhdGEgaXMgYSBzcGVjaWFsIGNoYXJhY3RlclxuICpcbiAqIFNwZWNpYWwgY2hhcmFjdGVycyBoYXZlIGEgc2Vjb25kIGJ5dGUgaW4gdGhlIHJhbmdlIDB4MzAgdG8gMHgzZixcbiAqIHdpdGggdGhlIGZpcnN0IGJ5dGUgYmVpbmcgMHgxMSAoZm9yIGRhdGEgY2hhbm5lbCAxKSBvciAweDE5IChmb3JcbiAqIGRhdGEgY2hhbm5lbCAyKS5cbiAqXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMCBUaGUgZmlyc3QgYnl0ZVxuICogQHBhcmFtICB7SW50ZWdlcn0gY2hhcjEgVGhlIHNlY29uZCBieXRlXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICBXaGV0aGVyIHRoZSAyIGJ5dGVzIGFyZSBhbiBzcGVjaWFsIGNoYXJhY3RlclxuICovXG5DZWE2MDhTdHJlYW0ucHJvdG90eXBlLmlzU3BlY2lhbENoYXJhY3RlciA9IGZ1bmN0aW9uKGNoYXIwLCBjaGFyMSkge1xuICByZXR1cm4gKGNoYXIwID09PSB0aGlzLkVYVF8gJiYgY2hhcjEgPj0gMHgzMCAmJiBjaGFyMSA8PSAweDNmKTtcbn07XG5cbi8qKlxuICogRGV0ZWN0cyBpZiB0aGUgMi1ieXRlIHBhY2tldCBkYXRhIGlzIGFuIGV4dGVuZGVkIGNoYXJhY3RlclxuICpcbiAqIEV4dGVuZGVkIGNoYXJhY3RlcnMgaGF2ZSBhIHNlY29uZCBieXRlIGluIHRoZSByYW5nZSAweDIwIHRvIDB4M2YsXG4gKiB3aXRoIHRoZSBmaXJzdCBieXRlIGJlaW5nIDB4MTIgb3IgMHgxMyAoZm9yIGRhdGEgY2hhbm5lbCAxKSBvclxuICogMHgxYSBvciAweDFiIChmb3IgZGF0YSBjaGFubmVsIDIpLlxuICpcbiAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIwIFRoZSBmaXJzdCBieXRlXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIDIgYnl0ZXMgYXJlIGFuIGV4dGVuZGVkIGNoYXJhY3RlclxuICovXG5DZWE2MDhTdHJlYW0ucHJvdG90eXBlLmlzRXh0Q2hhcmFjdGVyID0gZnVuY3Rpb24oY2hhcjAsIGNoYXIxKSB7XG4gIHJldHVybiAoKGNoYXIwID09PSAodGhpcy5FWFRfICsgMSkgfHwgY2hhcjAgPT09ICh0aGlzLkVYVF8gKyAyKSkgJiZcbiAgICAoY2hhcjEgPj0gMHgyMCAmJiBjaGFyMSA8PSAweDNmKSk7XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGhlIDItYnl0ZSBwYWNrZXQgaXMgYSBtaWQtcm93IGNvZGVcbiAqXG4gKiBNaWQtcm93IGNvZGVzIGhhdmUgYSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmFuZ2UgMHgyMCB0byAweDJmLCB3aXRoXG4gKiB0aGUgZmlyc3QgYnl0ZSBiZWluZyAweDExIChmb3IgZGF0YSBjaGFubmVsIDEpIG9yIDB4MTkgKGZvciBkYXRhXG4gKiBjaGFubmVsIDIpLlxuICpcbiAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIwIFRoZSBmaXJzdCBieXRlXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIDIgYnl0ZXMgYXJlIGEgbWlkLXJvdyBjb2RlXG4gKi9cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNNaWRSb3dDb2RlID0gZnVuY3Rpb24oY2hhcjAsIGNoYXIxKSB7XG4gIHJldHVybiAoY2hhcjAgPT09IHRoaXMuRVhUXyAmJiAoY2hhcjEgPj0gMHgyMCAmJiBjaGFyMSA8PSAweDJmKSk7XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGhlIDItYnl0ZSBwYWNrZXQgaXMgYW4gb2Zmc2V0IGNvbnRyb2wgY29kZVxuICpcbiAqIE9mZnNldCBjb250cm9sIGNvZGVzIGhhdmUgYSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmFuZ2UgMHgyMSB0byAweDIzLFxuICogd2l0aCB0aGUgZmlyc3QgYnl0ZSBiZWluZyAweDE3IChmb3IgZGF0YSBjaGFubmVsIDEpIG9yIDB4MWYgKGZvclxuICogZGF0YSBjaGFubmVsIDIpLlxuICpcbiAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIwIFRoZSBmaXJzdCBieXRlXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIDIgYnl0ZXMgYXJlIGFuIG9mZnNldCBjb250cm9sIGNvZGVcbiAqL1xuQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pc09mZnNldENvbnRyb2xDb2RlID0gZnVuY3Rpb24oY2hhcjAsIGNoYXIxKSB7XG4gIHJldHVybiAoY2hhcjAgPT09IHRoaXMuT0ZGU0VUXyAmJiAoY2hhcjEgPj0gMHgyMSAmJiBjaGFyMSA8PSAweDIzKSk7XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgdGhlIDItYnl0ZSBwYWNrZXQgaXMgYSBQcmVhbWJsZSBBZGRyZXNzIENvZGVcbiAqXG4gKiBQQUNzIGhhdmUgYSBmaXJzdCBieXRlIGluIHRoZSByYW5nZSAweDEwIHRvIDB4MTcgKGZvciBkYXRhIGNoYW5uZWwgMSlcbiAqIG9yIDB4MTggdG8gMHgxZiAoZm9yIGRhdGEgY2hhbm5lbCAyKSwgd2l0aCB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlXG4gKiByYW5nZSAweDQwIHRvIDB4N2YuXG4gKlxuICogQHBhcmFtICB7SW50ZWdlcn0gY2hhcjAgVGhlIGZpcnN0IGJ5dGVcbiAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIxIFRoZSBzZWNvbmQgYnl0ZVxuICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgV2hldGhlciB0aGUgMiBieXRlcyBhcmUgYSBQQUNcbiAqL1xuQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pc1BBQyA9IGZ1bmN0aW9uKGNoYXIwLCBjaGFyMSkge1xuICByZXR1cm4gKGNoYXIwID49IHRoaXMuQkFTRV8gJiYgY2hhcjAgPCAodGhpcy5CQVNFXyArIDgpICYmXG4gICAgKGNoYXIxID49IDB4NDAgJiYgY2hhcjEgPD0gMHg3ZikpO1xufTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIGEgcGFja2V0J3Mgc2Vjb25kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIG9mIGEgUEFDIGNvbG9yIGNvZGVcbiAqXG4gKiBQQUMgY29sb3IgY29kZXMgaGF2ZSB0aGUgc2Vjb25kIGJ5dGUgYmUgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg0Ziwgb3JcbiAqIDB4NjAgdG8gMHg2Zi5cbiAqXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIGJ5dGUgaXMgYSBjb2xvciBQQUNcbiAqL1xuQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pc0NvbG9yUEFDID0gZnVuY3Rpb24oY2hhcjEpIHtcbiAgcmV0dXJuICgoY2hhcjEgPj0gMHg0MCAmJiBjaGFyMSA8PSAweDRmKSB8fCAoY2hhcjEgPj0gMHg2MCAmJiBjaGFyMSA8PSAweDdmKSk7XG59O1xuXG4vKipcbiAqIERldGVjdHMgaWYgYSBzaW5nbGUgYnl0ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgYSBub3JtYWwgY2hhcmFjdGVyXG4gKlxuICogTm9ybWFsIHRleHQgYnl0ZXMgYXJlIGluIHRoZSByYW5nZSAweDIwIHRvIDB4N2YuXG4gKlxuICogQHBhcmFtICB7SW50ZWdlcn0gY2hhciAgVGhlIGJ5dGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIGJ5dGUgaXMgYSBub3JtYWwgY2hhcmFjdGVyXG4gKi9cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNOb3JtYWxDaGFyID0gZnVuY3Rpb24oY2hhcikge1xuICByZXR1cm4gKGNoYXIgPj0gMHgyMCAmJiBjaGFyIDw9IDB4N2YpO1xufTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHJvbGwtdXBcbiAqXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBwdHMgICAgICAgICBDdXJyZW50IFBUU1xuICogQHBhcmFtICB7SW50ZWdlcn0gbmV3QmFzZVJvdyAgVXNlZCBieSBQQUNzIHRvIHNsaWRlIHRoZSBjdXJyZW50IHdpbmRvdyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgcG9zaXRpb25cbiAqL1xuQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5zZXRSb2xsVXAgPSBmdW5jdGlvbihwdHMsIG5ld0Jhc2VSb3cpIHtcbiAgLy8gUmVzZXQgdGhlIGJhc2Ugcm93IHRvIHRoZSBib3R0b20gcm93IHdoZW4gc3dpdGNoaW5nIG1vZGVzXG4gIGlmICh0aGlzLm1vZGVfICE9PSAncm9sbFVwJykge1xuICAgIHRoaXMucm93XyA9IEJPVFRPTV9ST1c7XG4gICAgdGhpcy5tb2RlXyA9ICdyb2xsVXAnO1xuICAgIC8vIFNwZWMgc2F5cyB0byB3aXBlIG1lbW9yaWVzIHdoZW4gc3dpdGNoaW5nIHRvIHJvbGwtdXBcbiAgICB0aGlzLmZsdXNoRGlzcGxheWVkKHB0cyk7XG4gICAgdGhpcy5ub25EaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgIHRoaXMuZGlzcGxheWVkXyA9IGNyZWF0ZURpc3BsYXlCdWZmZXIoKTtcbiAgfVxuXG4gIGlmIChuZXdCYXNlUm93ICE9PSB1bmRlZmluZWQgJiYgbmV3QmFzZVJvdyAhPT0gdGhpcy5yb3dfKSB7XG4gICAgLy8gbW92ZSBjdXJyZW50bHkgZGlzcGxheWVkIGNhcHRpb25zICh1cCBvciBkb3duKSB0byB0aGUgbmV3IGJhc2Ugcm93XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvbGxVcFJvd3NfOyBpKyspIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkX1tuZXdCYXNlUm93IC0gaV0gPSB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfIC0gaV07XG4gICAgICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfIC0gaV0gPSAnJztcbiAgICB9XG4gIH1cblxuICBpZiAobmV3QmFzZVJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbmV3QmFzZVJvdyA9IHRoaXMucm93XztcbiAgfVxuXG4gIHRoaXMudG9wUm93XyA9IG5ld0Jhc2VSb3cgLSB0aGlzLnJvbGxVcFJvd3NfICsgMTtcbn07XG5cbi8vIEFkZHMgdGhlIG9wZW5pbmcgSFRNTCB0YWcgZm9yIHRoZSBwYXNzZWQgY2hhcmFjdGVyIHRvIHRoZSBjYXB0aW9uIHRleHQsXG4vLyBhbmQga2VlcHMgdHJhY2sgb2YgaXQgZm9yIGxhdGVyIGNsb3NpbmdcbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuYWRkRm9ybWF0dGluZyA9IGZ1bmN0aW9uKHB0cywgZm9ybWF0KSB7XG4gIHRoaXMuZm9ybWF0dGluZ18gPSB0aGlzLmZvcm1hdHRpbmdfLmNvbmNhdChmb3JtYXQpO1xuICB2YXIgdGV4dCA9IGZvcm1hdC5yZWR1Y2UoZnVuY3Rpb24odGV4dCwgZm9ybWF0KSB7XG4gICAgcmV0dXJuIHRleHQgKyAnPCcgKyBmb3JtYXQgKyAnPic7XG4gIH0sICcnKTtcbiAgdGhpc1t0aGlzLm1vZGVfXShwdHMsIHRleHQpO1xufTtcblxuLy8gQWRkcyBIVE1MIGNsb3NpbmcgdGFncyBmb3IgY3VycmVudCBmb3JtYXR0aW5nIHRvIGNhcHRpb24gdGV4dCBhbmRcbi8vIGNsZWFycyByZW1lbWJlcmVkIGZvcm1hdHRpbmdcbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuY2xlYXJGb3JtYXR0aW5nID0gZnVuY3Rpb24ocHRzKSB7XG4gIGlmICghdGhpcy5mb3JtYXR0aW5nXy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHRleHQgPSB0aGlzLmZvcm1hdHRpbmdfLnJldmVyc2UoKS5yZWR1Y2UoZnVuY3Rpb24odGV4dCwgZm9ybWF0KSB7XG4gICAgcmV0dXJuIHRleHQgKyAnPC8nICsgZm9ybWF0ICsgJz4nO1xuICB9LCAnJyk7XG4gIHRoaXMuZm9ybWF0dGluZ18gPSBbXTtcbiAgdGhpc1t0aGlzLm1vZGVfXShwdHMsIHRleHQpO1xufTtcblxuLy8gTW9kZSBJbXBsZW1lbnRhdGlvbnNcbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUucG9wT24gPSBmdW5jdGlvbihwdHMsIHRleHQpIHtcbiAgdmFyIGJhc2VSb3cgPSB0aGlzLm5vbkRpc3BsYXllZF9bdGhpcy5yb3dfXTtcblxuICAvLyBidWZmZXIgY2hhcmFjdGVyc1xuICBiYXNlUm93ICs9IHRleHQ7XG4gIHRoaXMubm9uRGlzcGxheWVkX1t0aGlzLnJvd19dID0gYmFzZVJvdztcbn07XG5cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUucm9sbFVwID0gZnVuY3Rpb24ocHRzLCB0ZXh0KSB7XG4gIHZhciBiYXNlUm93ID0gdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X107XG5cbiAgYmFzZVJvdyArPSB0ZXh0O1xuICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IGJhc2VSb3c7XG5cbn07XG5cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUuc2hpZnRSb3dzVXBfID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpO1xuICAvLyBjbGVhciBvdXQgaW5hY3RpdmUgcm93c1xuICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b3BSb3dfOyBpKyspIHtcbiAgICB0aGlzLmRpc3BsYXllZF9baV0gPSAnJztcbiAgfVxuICBmb3IgKGkgPSB0aGlzLnJvd18gKyAxOyBpIDwgQk9UVE9NX1JPVyArIDE7IGkrKykge1xuICAgIHRoaXMuZGlzcGxheWVkX1tpXSA9ICcnO1xuICB9XG4gIC8vIHNoaWZ0IGRpc3BsYXllZCByb3dzIHVwXG4gIGZvciAoaSA9IHRoaXMudG9wUm93XzsgaSA8IHRoaXMucm93XzsgaSsrKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRfW2ldID0gdGhpcy5kaXNwbGF5ZWRfW2kgKyAxXTtcbiAgfVxuICAvLyBjbGVhciBvdXQgdGhlIGJvdHRvbSByb3dcbiAgdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X10gPSAnJztcbn07XG5cbkNlYTYwOFN0cmVhbS5wcm90b3R5cGUucGFpbnRPbiA9IGZ1bmN0aW9uKHB0cywgdGV4dCkge1xuICB2YXIgYmFzZVJvdyA9IHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dO1xuXG4gIGJhc2VSb3cgKz0gdGV4dDtcbiAgdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X10gPSBiYXNlUm93O1xufTtcblxuLy8gZXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhcHRpb25TdHJlYW06IENhcHRpb25TdHJlYW0sXG4gIENlYTYwOFN0cmVhbTogQ2VhNjA4U3RyZWFtXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBYUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWhCQTtBQUNBO0FBdUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFiQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBRUE7QUFDQTtBQXJCQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTFDQTtBQUNBO0FBQ0E7QUE0Q0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBcERBO0FBQ0E7QUFzREE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQVZBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBL0JBO0FBQ0E7QUFpQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUxBO0FBQ0E7QUFVQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQTNGQTtBQUNBO0FBNEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFHQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFoQkE7QUFtQkE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQVZBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBd0JBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQURBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBd0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1Q0E7QUFDQTtBQURBO0FBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF0TUE7QUFDQTtBQURBO0FBWEE7QUFDQTtBQXNOQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBQUE7QUFBQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUEzQkE7QUE4QkE7Ozs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWxCQTtBQXFCQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQ0E7QUE4Q0E7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBREE7QUFJQTs7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFEQTtBQUtBOzs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBREE7QUFJQTs7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFEQTtBQUtBOzs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFEQTtBQUlBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXZCQTtBQTJCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUpBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFQQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBWUE7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFFQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/m2ts/caption-stream.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/m2ts/probe.js": -/*!************************************************!*\ - !*** ../node_modules/mux.js/lib/m2ts/probe.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about TS Segments.\n */\n\n\nvar StreamTypes = __webpack_require__(/*! ./stream-types.js */ \"../node_modules/mux.js/lib/m2ts/stream-types.js\");\n\nvar parsePid = function parsePid(packet) {\n var pid = packet[1] & 0x1f;\n pid <<= 8;\n pid |= packet[2];\n return pid;\n};\n\nvar parsePayloadUnitStartIndicator = function parsePayloadUnitStartIndicator(packet) {\n return !!(packet[1] & 0x40);\n};\n\nvar parseAdaptionField = function parseAdaptionField(packet) {\n var offset = 0; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[4] + 1;\n }\n\n return offset;\n};\n\nvar parseType = function parseType(packet, pmtPid) {\n var pid = parsePid(packet);\n\n if (pid === 0) {\n return 'pat';\n } else if (pid === pmtPid) {\n return 'pmt';\n } else if (pmtPid) {\n return 'pes';\n }\n\n return null;\n};\n\nvar parsePat = function parsePat(packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n var offset = 4 + parseAdaptionField(packet);\n\n if (pusi) {\n offset += packet[offset] + 1;\n }\n\n return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11];\n};\n\nvar parsePmt = function parsePmt(packet) {\n var programMapTable = {};\n var pusi = parsePayloadUnitStartIndicator(packet);\n var payloadOffset = 4 + parseAdaptionField(packet);\n\n if (pusi) {\n payloadOffset += packet[payloadOffset] + 1;\n } // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n\n if (!(packet[payloadOffset + 5] & 0x01)) {\n return;\n }\n\n var sectionLength, tableEnd, programInfoLength; // the mapping table ends at the end of the current section\n\n sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11]; // advance the offset to the first entry in the mapping table\n\n var offset = 12 + programInfoLength;\n\n while (offset < tableEnd) {\n var i = payloadOffset + offset; // add an entry that maps the elementary_pid to the stream_type\n\n programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i]; // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5;\n }\n\n return programMapTable;\n};\n\nvar parsePesType = function parsePesType(packet, programMapTable) {\n var pid = parsePid(packet);\n var type = programMapTable[pid];\n\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n return 'video';\n\n case StreamTypes.ADTS_STREAM_TYPE:\n return 'audio';\n\n case StreamTypes.METADATA_STREAM_TYPE:\n return 'timed-metadata';\n\n default:\n return null;\n }\n};\n\nvar parsePesTime = function parsePesTime(packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n\n if (!pusi) {\n return null;\n }\n\n var offset = 4 + parseAdaptionField(packet);\n\n if (offset >= packet.byteLength) {\n // From the H 222.0 MPEG-TS spec\n // \"For transport stream packets carrying PES packets, stuffing is needed when there\n // is insufficient PES packet data to completely fill the transport stream packet\n // payload bytes. Stuffing is accomplished by defining an adaptation field longer than\n // the sum of the lengths of the data elements in it, so that the payload bytes\n // remaining after the adaptation field exactly accommodates the available PES packet\n // data.\"\n //\n // If the offset is >= the length of the packet, then the packet contains no data\n // and instead is just adaption field stuffing bytes\n return null;\n }\n\n var pes = null;\n var ptsDtsFlags; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = packet[offset + 7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n pes = {}; // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n\n pes.pts = (packet[offset + 9] & 0x0E) << 27 | (packet[offset + 10] & 0xFF) << 20 | (packet[offset + 11] & 0xFE) << 12 | (packet[offset + 12] & 0xFF) << 5 | (packet[offset + 13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n\n if (ptsDtsFlags & 0x40) {\n pes.dts = (packet[offset + 14] & 0x0E) << 27 | (packet[offset + 15] & 0xFF) << 20 | (packet[offset + 16] & 0xFE) << 12 | (packet[offset + 17] & 0xFF) << 5 | (packet[offset + 18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n\n return pes;\n};\n\nvar parseNalUnitType = function parseNalUnitType(type) {\n switch (type) {\n case 0x05:\n return 'slice_layer_without_partitioning_rbsp_idr';\n\n case 0x06:\n return 'sei_rbsp';\n\n case 0x07:\n return 'seq_parameter_set_rbsp';\n\n case 0x08:\n return 'pic_parameter_set_rbsp';\n\n case 0x09:\n return 'access_unit_delimiter_rbsp';\n\n default:\n return null;\n }\n};\n\nvar videoPacketContainsKeyFrame = function videoPacketContainsKeyFrame(packet) {\n var offset = 4 + parseAdaptionField(packet);\n var frameBuffer = packet.subarray(offset);\n var frameI = 0;\n var frameSyncPoint = 0;\n var foundKeyFrame = false;\n var nalType; // advance the sync point to a NAL start, if necessary\n\n for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) {\n if (frameBuffer[frameSyncPoint + 2] === 1) {\n // the sync point is properly aligned\n frameI = frameSyncPoint + 5;\n break;\n }\n }\n\n while (frameI < frameBuffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (frameBuffer[frameI]) {\n case 0:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0) {\n frameI += 2;\n break;\n } else if (frameBuffer[frameI - 2] !== 0) {\n frameI++;\n break;\n }\n\n if (frameSyncPoint + 3 !== frameI - 2) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n } // drop trailing zeroes\n\n\n do {\n frameI++;\n } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length);\n\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n\n case 1:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) {\n frameI += 3;\n break;\n }\n\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n frameI += 3;\n break;\n }\n }\n\n frameBuffer = frameBuffer.subarray(frameSyncPoint);\n frameI -= frameSyncPoint;\n frameSyncPoint = 0; // parse the final nal\n\n if (frameBuffer && frameBuffer.byteLength > 3) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n\n return foundKeyFrame;\n};\n\nmodule.exports = {\n parseType: parseType,\n parsePat: parsePat,\n parsePmt: parsePmt,\n parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator,\n parsePesType: parsePesType,\n parsePesTime: parsePesTime,\n videoPacketContainsKeyFrame: videoPacketContainsKeyFrame\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbTJ0cy9wcm9iZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbXV4LmpzL2xpYi9tMnRzL3Byb2JlLmpzP2YzMTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtdXguanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEJyaWdodGNvdmVcbiAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqXG4gKiBVdGlsaXRpZXMgdG8gZGV0ZWN0IGJhc2ljIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIGFib3V0IFRTIFNlZ21lbnRzLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTdHJlYW1UeXBlcyA9IHJlcXVpcmUoJy4vc3RyZWFtLXR5cGVzLmpzJyk7XG5cbnZhciBwYXJzZVBpZCA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICB2YXIgcGlkID0gcGFja2V0WzFdICYgMHgxZjtcbiAgcGlkIDw8PSA4O1xuICBwaWQgfD0gcGFja2V0WzJdO1xuICByZXR1cm4gcGlkO1xufTtcblxudmFyIHBhcnNlUGF5bG9hZFVuaXRTdGFydEluZGljYXRvciA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICByZXR1cm4gISEocGFja2V0WzFdICYgMHg0MCk7XG59O1xuXG52YXIgcGFyc2VBZGFwdGlvbkZpZWxkID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHZhciBvZmZzZXQgPSAwO1xuICAvLyBpZiBhbiBhZGFwdGlvbiBmaWVsZCBpcyBwcmVzZW50LCBpdHMgbGVuZ3RoIGlzIHNwZWNpZmllZCBieSB0aGVcbiAgLy8gZmlmdGggYnl0ZSBvZiB0aGUgVFMgcGFja2V0IGhlYWRlci4gVGhlIGFkYXB0YXRpb24gZmllbGQgaXNcbiAgLy8gdXNlZCB0byBhZGQgc3R1ZmZpbmcgdG8gUEVTIHBhY2tldHMgdGhhdCBkb24ndCBmaWxsIGEgY29tcGxldGVcbiAgLy8gVFMgcGFja2V0LCBhbmQgdG8gc3BlY2lmeSBzb21lIGZvcm1zIG9mIHRpbWluZyBhbmQgY29udHJvbCBkYXRhXG4gIC8vIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSB1c2UuXG4gIGlmICgoKHBhY2tldFszXSAmIDB4MzApID4+PiA0KSA+IDB4MDEpIHtcbiAgICBvZmZzZXQgKz0gcGFja2V0WzRdICsgMTtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufTtcblxudmFyIHBhcnNlVHlwZSA9IGZ1bmN0aW9uKHBhY2tldCwgcG10UGlkKSB7XG4gIHZhciBwaWQgPSBwYXJzZVBpZChwYWNrZXQpO1xuICBpZiAocGlkID09PSAwKSB7XG4gICAgcmV0dXJuICdwYXQnO1xuICB9IGVsc2UgaWYgKHBpZCA9PT0gcG10UGlkKSB7XG4gICAgcmV0dXJuICdwbXQnO1xuICB9IGVsc2UgaWYgKHBtdFBpZCkge1xuICAgIHJldHVybiAncGVzJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBwYXJzZVBhdCA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICB2YXIgcHVzaSA9IHBhcnNlUGF5bG9hZFVuaXRTdGFydEluZGljYXRvcihwYWNrZXQpO1xuICB2YXIgb2Zmc2V0ID0gNCArIHBhcnNlQWRhcHRpb25GaWVsZChwYWNrZXQpO1xuXG4gIGlmIChwdXNpKSB7XG4gICAgb2Zmc2V0ICs9IHBhY2tldFtvZmZzZXRdICsgMTtcbiAgfVxuXG4gIHJldHVybiAocGFja2V0W29mZnNldCArIDEwXSAmIDB4MWYpIDw8IDggfCBwYWNrZXRbb2Zmc2V0ICsgMTFdO1xufTtcblxudmFyIHBhcnNlUG10ID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHZhciBwcm9ncmFtTWFwVGFibGUgPSB7fTtcbiAgdmFyIHB1c2kgPSBwYXJzZVBheWxvYWRVbml0U3RhcnRJbmRpY2F0b3IocGFja2V0KTtcbiAgdmFyIHBheWxvYWRPZmZzZXQgPSA0ICsgcGFyc2VBZGFwdGlvbkZpZWxkKHBhY2tldCk7XG5cbiAgaWYgKHB1c2kpIHtcbiAgICBwYXlsb2FkT2Zmc2V0ICs9IHBhY2tldFtwYXlsb2FkT2Zmc2V0XSArIDE7XG4gIH1cblxuICAvLyBQTVRzIGNhbiBiZSBzZW50IGFoZWFkIG9mIHRoZSB0aW1lIHdoZW4gdGhleSBzaG91bGQgYWN0dWFsbHlcbiAgLy8gdGFrZSBlZmZlY3QuIFdlIGRvbid0IGJlbGlldmUgdGhpcyBzaG91bGQgZXZlciBiZSB0aGUgY2FzZVxuICAvLyBmb3IgSExTIGJ1dCB3ZSdsbCBpZ25vcmUgXCJmb3J3YXJkXCIgUE1UIGRlY2xhcmF0aW9ucyBpZiB3ZSBzZWVcbiAgLy8gdGhlbS4gRnV0dXJlIFBNVCBkZWNsYXJhdGlvbnMgaGF2ZSB0aGUgY3VycmVudF9uZXh0X2luZGljYXRvclxuICAvLyBzZXQgdG8gemVyby5cbiAgaWYgKCEocGFja2V0W3BheWxvYWRPZmZzZXQgKyA1XSAmIDB4MDEpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlY3Rpb25MZW5ndGgsIHRhYmxlRW5kLCBwcm9ncmFtSW5mb0xlbmd0aDtcbiAgLy8gdGhlIG1hcHBpbmcgdGFibGUgZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHNlY3Rpb25cbiAgc2VjdGlvbkxlbmd0aCA9IChwYWNrZXRbcGF5bG9hZE9mZnNldCArIDFdICYgMHgwZikgPDwgOCB8IHBhY2tldFtwYXlsb2FkT2Zmc2V0ICsgMl07XG4gIHRhYmxlRW5kID0gMyArIHNlY3Rpb25MZW5ndGggLSA0O1xuXG4gIC8vIHRvIGRldGVybWluZSB3aGVyZSB0aGUgdGFibGUgaXMsIHdlIGhhdmUgdG8gZmlndXJlIG91dCBob3dcbiAgLy8gbG9uZyB0aGUgcHJvZ3JhbSBpbmZvIGRlc2NyaXB0b3JzIGFyZVxuICBwcm9ncmFtSW5mb0xlbmd0aCA9IChwYWNrZXRbcGF5bG9hZE9mZnNldCArIDEwXSAmIDB4MGYpIDw8IDggfCBwYWNrZXRbcGF5bG9hZE9mZnNldCArIDExXTtcblxuICAvLyBhZHZhbmNlIHRoZSBvZmZzZXQgdG8gdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBtYXBwaW5nIHRhYmxlXG4gIHZhciBvZmZzZXQgPSAxMiArIHByb2dyYW1JbmZvTGVuZ3RoO1xuICB3aGlsZSAob2Zmc2V0IDwgdGFibGVFbmQpIHtcbiAgICB2YXIgaSA9IHBheWxvYWRPZmZzZXQgKyBvZmZzZXQ7XG4gICAgLy8gYWRkIGFuIGVudHJ5IHRoYXQgbWFwcyB0aGUgZWxlbWVudGFyeV9waWQgdG8gdGhlIHN0cmVhbV90eXBlXG4gICAgcHJvZ3JhbU1hcFRhYmxlWyhwYWNrZXRbaSArIDFdICYgMHgxRikgPDwgOCB8IHBhY2tldFtpICsgMl1dID0gcGFja2V0W2ldO1xuXG4gICAgLy8gbW92ZSB0byB0aGUgbmV4dCB0YWJsZSBlbnRyeVxuICAgIC8vIHNraXAgcGFzdCB0aGUgZWxlbWVudGFyeSBzdHJlYW0gZGVzY3JpcHRvcnMsIGlmIHByZXNlbnRcbiAgICBvZmZzZXQgKz0gKChwYWNrZXRbaSArIDNdICYgMHgwRikgPDwgOCB8IHBhY2tldFtpICsgNF0pICsgNTtcbiAgfVxuICByZXR1cm4gcHJvZ3JhbU1hcFRhYmxlO1xufTtcblxudmFyIHBhcnNlUGVzVHlwZSA9IGZ1bmN0aW9uKHBhY2tldCwgcHJvZ3JhbU1hcFRhYmxlKSB7XG4gIHZhciBwaWQgPSBwYXJzZVBpZChwYWNrZXQpO1xuICB2YXIgdHlwZSA9IHByb2dyYW1NYXBUYWJsZVtwaWRdO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFN0cmVhbVR5cGVzLkgyNjRfU1RSRUFNX1RZUEU6XG4gICAgICByZXR1cm4gJ3ZpZGVvJztcbiAgICBjYXNlIFN0cmVhbVR5cGVzLkFEVFNfU1RSRUFNX1RZUEU6XG4gICAgICByZXR1cm4gJ2F1ZGlvJztcbiAgICBjYXNlIFN0cmVhbVR5cGVzLk1FVEFEQVRBX1NUUkVBTV9UWVBFOlxuICAgICAgcmV0dXJuICd0aW1lZC1tZXRhZGF0YSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG52YXIgcGFyc2VQZXNUaW1lID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHZhciBwdXNpID0gcGFyc2VQYXlsb2FkVW5pdFN0YXJ0SW5kaWNhdG9yKHBhY2tldCk7XG4gIGlmICghcHVzaSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9mZnNldCA9IDQgKyBwYXJzZUFkYXB0aW9uRmllbGQocGFja2V0KTtcblxuICBpZiAob2Zmc2V0ID49IHBhY2tldC5ieXRlTGVuZ3RoKSB7XG4gICAgLy8gRnJvbSB0aGUgSCAyMjIuMCBNUEVHLVRTIHNwZWNcbiAgICAvLyBcIkZvciB0cmFuc3BvcnQgc3RyZWFtIHBhY2tldHMgY2FycnlpbmcgUEVTIHBhY2tldHMsIHN0dWZmaW5nIGlzIG5lZWRlZCB3aGVuIHRoZXJlXG4gICAgLy8gIGlzIGluc3VmZmljaWVudCBQRVMgcGFja2V0IGRhdGEgdG8gY29tcGxldGVseSBmaWxsIHRoZSB0cmFuc3BvcnQgc3RyZWFtIHBhY2tldFxuICAgIC8vICBwYXlsb2FkIGJ5dGVzLiBTdHVmZmluZyBpcyBhY2NvbXBsaXNoZWQgYnkgZGVmaW5pbmcgYW4gYWRhcHRhdGlvbiBmaWVsZCBsb25nZXIgdGhhblxuICAgIC8vICB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIHRoZSBkYXRhIGVsZW1lbnRzIGluIGl0LCBzbyB0aGF0IHRoZSBwYXlsb2FkIGJ5dGVzXG4gICAgLy8gIHJlbWFpbmluZyBhZnRlciB0aGUgYWRhcHRhdGlvbiBmaWVsZCBleGFjdGx5IGFjY29tbW9kYXRlcyB0aGUgYXZhaWxhYmxlIFBFUyBwYWNrZXRcbiAgICAvLyAgZGF0YS5cIlxuICAgIC8vXG4gICAgLy8gSWYgdGhlIG9mZnNldCBpcyA+PSB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQsIHRoZW4gdGhlIHBhY2tldCBjb250YWlucyBubyBkYXRhXG4gICAgLy8gYW5kIGluc3RlYWQgaXMganVzdCBhZGFwdGlvbiBmaWVsZCBzdHVmZmluZyBieXRlc1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHBlcyA9IG51bGw7XG4gIHZhciBwdHNEdHNGbGFncztcblxuICAvLyBQRVMgcGFja2V0cyBtYXkgYmUgYW5ub3RhdGVkIHdpdGggYSBQVFMgdmFsdWUsIG9yIGEgUFRTIHZhbHVlXG4gIC8vIGFuZCBhIERUUyB2YWx1ZS4gRGV0ZXJtaW5lIHdoYXQgY29tYmluYXRpb24gb2YgdmFsdWVzIGlzXG4gIC8vIGF2YWlsYWJsZSB0byB3b3JrIHdpdGguXG4gIHB0c0R0c0ZsYWdzID0gcGFja2V0W29mZnNldCArIDddO1xuXG4gIC8vIFBUUyBhbmQgRFRTIGFyZSBub3JtYWxseSBzdG9yZWQgYXMgYSAzMy1iaXQgbnVtYmVyLiAgSmF2YXNjcmlwdFxuICAvLyBwZXJmb3JtcyBhbGwgYml0d2lzZSBvcGVyYXRpb25zIG9uIDMyLWJpdCBpbnRlZ2VycyBidXQgamF2YXNjcmlwdFxuICAvLyBzdXBwb3J0cyBhIG11Y2ggZ3JlYXRlciByYW5nZSAoNTItYml0cykgb2YgaW50ZWdlciB1c2luZyBzdGFuZGFyZFxuICAvLyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucy5cbiAgLy8gV2UgY29uc3RydWN0IGEgMzEtYml0IHZhbHVlIHVzaW5nIGJpdHdpc2Ugb3BlcmF0b3JzIG92ZXIgdGhlIDMxXG4gIC8vIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhbmQgdGhlbiBtdWx0aXBseSBieSA0IChlcXVhbCB0byBhIGxlZnQtc2hpZnRcbiAgLy8gb2YgMikgYmVmb3JlIHdlIGFkZCB0aGUgZmluYWwgMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZVxuICAvLyB0aW1lc3RhbXAgKGVxdWFsIHRvIGFuIE9SLilcbiAgaWYgKHB0c0R0c0ZsYWdzICYgMHhDMCkge1xuICAgIHBlcyA9IHt9O1xuICAgIC8vIHRoZSBQVFMgYW5kIERUUyBhcmUgbm90IHdyaXR0ZW4gb3V0IGRpcmVjdGx5LiBGb3IgaW5mb3JtYXRpb25cbiAgICAvLyBvbiBob3cgdGhleSBhcmUgZW5jb2RlZCwgc2VlXG4gICAgLy8gaHR0cDovL2R2ZC5zb3VyY2Vmb3JnZS5uZXQvZHZkaW5mby9wZXMtaGRyLmh0bWxcbiAgICBwZXMucHRzID0gKHBhY2tldFtvZmZzZXQgKyA5XSAmIDB4MEUpIDw8IDI3IHxcbiAgICAgIChwYWNrZXRbb2Zmc2V0ICsgMTBdICYgMHhGRikgPDwgMjAgfFxuICAgICAgKHBhY2tldFtvZmZzZXQgKyAxMV0gJiAweEZFKSA8PCAxMiB8XG4gICAgICAocGFja2V0W29mZnNldCArIDEyXSAmIDB4RkYpIDw8ICA1IHxcbiAgICAgIChwYWNrZXRbb2Zmc2V0ICsgMTNdICYgMHhGRSkgPj4+ICAzO1xuICAgIHBlcy5wdHMgKj0gNDsgLy8gTGVmdCBzaGlmdCBieSAyXG4gICAgcGVzLnB0cyArPSAocGFja2V0W29mZnNldCArIDEzXSAmIDB4MDYpID4+PiAxOyAvLyBPUiBieSB0aGUgdHdvIExTQnNcbiAgICBwZXMuZHRzID0gcGVzLnB0cztcbiAgICBpZiAocHRzRHRzRmxhZ3MgJiAweDQwKSB7XG4gICAgICBwZXMuZHRzID0gKHBhY2tldFtvZmZzZXQgKyAxNF0gJiAweDBFKSA8PCAyNyB8XG4gICAgICAgIChwYWNrZXRbb2Zmc2V0ICsgMTVdICYgMHhGRikgPDwgMjAgfFxuICAgICAgICAocGFja2V0W29mZnNldCArIDE2XSAmIDB4RkUpIDw8IDEyIHxcbiAgICAgICAgKHBhY2tldFtvZmZzZXQgKyAxN10gJiAweEZGKSA8PCA1IHxcbiAgICAgICAgKHBhY2tldFtvZmZzZXQgKyAxOF0gJiAweEZFKSA+Pj4gMztcbiAgICAgIHBlcy5kdHMgKj0gNDsgLy8gTGVmdCBzaGlmdCBieSAyXG4gICAgICBwZXMuZHRzICs9IChwYWNrZXRbb2Zmc2V0ICsgMThdICYgMHgwNikgPj4+IDE7IC8vIE9SIGJ5IHRoZSB0d28gTFNCc1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGVzO1xufTtcblxudmFyIHBhcnNlTmFsVW5pdFR5cGUgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgMHgwNTpcbiAgICAgIHJldHVybiAnc2xpY2VfbGF5ZXJfd2l0aG91dF9wYXJ0aXRpb25pbmdfcmJzcF9pZHInO1xuICAgIGNhc2UgMHgwNjpcbiAgICAgIHJldHVybiAnc2VpX3Jic3AnO1xuICAgIGNhc2UgMHgwNzpcbiAgICAgIHJldHVybiAnc2VxX3BhcmFtZXRlcl9zZXRfcmJzcCc7XG4gICAgY2FzZSAweDA4OlxuICAgICAgcmV0dXJuICdwaWNfcGFyYW1ldGVyX3NldF9yYnNwJztcbiAgICBjYXNlIDB4MDk6XG4gICAgICByZXR1cm4gJ2FjY2Vzc191bml0X2RlbGltaXRlcl9yYnNwJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbnZhciB2aWRlb1BhY2tldENvbnRhaW5zS2V5RnJhbWUgPSBmdW5jdGlvbihwYWNrZXQpIHtcbiAgdmFyIG9mZnNldCA9IDQgKyBwYXJzZUFkYXB0aW9uRmllbGQocGFja2V0KTtcbiAgdmFyIGZyYW1lQnVmZmVyID0gcGFja2V0LnN1YmFycmF5KG9mZnNldCk7XG4gIHZhciBmcmFtZUkgPSAwO1xuICB2YXIgZnJhbWVTeW5jUG9pbnQgPSAwO1xuICB2YXIgZm91bmRLZXlGcmFtZSA9IGZhbHNlO1xuICB2YXIgbmFsVHlwZTtcblxuICAvLyBhZHZhbmNlIHRoZSBzeW5jIHBvaW50IHRvIGEgTkFMIHN0YXJ0LCBpZiBuZWNlc3NhcnlcbiAgZm9yICg7IGZyYW1lU3luY1BvaW50IDwgZnJhbWVCdWZmZXIuYnl0ZUxlbmd0aCAtIDM7IGZyYW1lU3luY1BvaW50KyspIHtcbiAgICBpZiAoZnJhbWVCdWZmZXJbZnJhbWVTeW5jUG9pbnQgKyAyXSA9PT0gMSkge1xuICAgICAgLy8gdGhlIHN5bmMgcG9pbnQgaXMgcHJvcGVybHkgYWxpZ25lZFxuICAgICAgZnJhbWVJID0gZnJhbWVTeW5jUG9pbnQgKyA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKGZyYW1lSSA8IGZyYW1lQnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAvLyBsb29rIGF0IHRoZSBjdXJyZW50IGJ5dGUgdG8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mXG4gICAgLy8gYSBOQUwgdW5pdCBib3VuZGFyeVxuICAgIHN3aXRjaCAoZnJhbWVCdWZmZXJbZnJhbWVJXSkge1xuICAgIGNhc2UgMDpcbiAgICAgIC8vIHNraXAgcGFzdCBub24tc3luYyBzZXF1ZW5jZXNcbiAgICAgIGlmIChmcmFtZUJ1ZmZlcltmcmFtZUkgLSAxXSAhPT0gMCkge1xuICAgICAgICBmcmFtZUkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGZyYW1lQnVmZmVyW2ZyYW1lSSAtIDJdICE9PSAwKSB7XG4gICAgICAgIGZyYW1lSSsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lU3luY1BvaW50ICsgMyAhPT0gZnJhbWVJIC0gMikge1xuICAgICAgICBuYWxUeXBlID0gcGFyc2VOYWxVbml0VHlwZShmcmFtZUJ1ZmZlcltmcmFtZVN5bmNQb2ludCArIDNdICYgMHgxZik7XG4gICAgICAgIGlmIChuYWxUeXBlID09PSAnc2xpY2VfbGF5ZXJfd2l0aG91dF9wYXJ0aXRpb25pbmdfcmJzcF9pZHInKSB7XG4gICAgICAgICAgZm91bmRLZXlGcmFtZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZHJvcCB0cmFpbGluZyB6ZXJvZXNcbiAgICAgIGRvIHtcbiAgICAgICAgZnJhbWVJKys7XG4gICAgICB9IHdoaWxlIChmcmFtZUJ1ZmZlcltmcmFtZUldICE9PSAxICYmIGZyYW1lSSA8IGZyYW1lQnVmZmVyLmxlbmd0aCk7XG4gICAgICBmcmFtZVN5bmNQb2ludCA9IGZyYW1lSSAtIDI7XG4gICAgICBmcmFtZUkgKz0gMztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIC8vIHNraXAgcGFzdCBub24tc3luYyBzZXF1ZW5jZXNcbiAgICAgIGlmIChmcmFtZUJ1ZmZlcltmcmFtZUkgLSAxXSAhPT0gMCB8fFxuICAgICAgICAgIGZyYW1lQnVmZmVyW2ZyYW1lSSAtIDJdICE9PSAwKSB7XG4gICAgICAgIGZyYW1lSSArPSAzO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbmFsVHlwZSA9IHBhcnNlTmFsVW5pdFR5cGUoZnJhbWVCdWZmZXJbZnJhbWVTeW5jUG9pbnQgKyAzXSAmIDB4MWYpO1xuICAgICAgaWYgKG5hbFR5cGUgPT09ICdzbGljZV9sYXllcl93aXRob3V0X3BhcnRpdGlvbmluZ19yYnNwX2lkcicpIHtcbiAgICAgICAgZm91bmRLZXlGcmFtZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBmcmFtZVN5bmNQb2ludCA9IGZyYW1lSSAtIDI7XG4gICAgICBmcmFtZUkgKz0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB0aGUgY3VycmVudCBieXRlIGlzbid0IGEgb25lIG9yIHplcm8sIHNvIGl0IGNhbm5vdCBiZSBwYXJ0XG4gICAgICAvLyBvZiBhIHN5bmMgc2VxdWVuY2VcbiAgICAgIGZyYW1lSSArPSAzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGZyYW1lQnVmZmVyID0gZnJhbWVCdWZmZXIuc3ViYXJyYXkoZnJhbWVTeW5jUG9pbnQpO1xuICBmcmFtZUkgLT0gZnJhbWVTeW5jUG9pbnQ7XG4gIGZyYW1lU3luY1BvaW50ID0gMDtcbiAgLy8gcGFyc2UgdGhlIGZpbmFsIG5hbFxuICBpZiAoZnJhbWVCdWZmZXIgJiYgZnJhbWVCdWZmZXIuYnl0ZUxlbmd0aCA+IDMpIHtcbiAgICBuYWxUeXBlID0gcGFyc2VOYWxVbml0VHlwZShmcmFtZUJ1ZmZlcltmcmFtZVN5bmNQb2ludCArIDNdICYgMHgxZik7XG4gICAgaWYgKG5hbFR5cGUgPT09ICdzbGljZV9sYXllcl93aXRob3V0X3BhcnRpdGlvbmluZ19yYnNwX2lkcicpIHtcbiAgICAgIGZvdW5kS2V5RnJhbWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3VuZEtleUZyYW1lO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VUeXBlOiBwYXJzZVR5cGUsXG4gIHBhcnNlUGF0OiBwYXJzZVBhdCxcbiAgcGFyc2VQbXQ6IHBhcnNlUG10LFxuICBwYXJzZVBheWxvYWRVbml0U3RhcnRJbmRpY2F0b3I6IHBhcnNlUGF5bG9hZFVuaXRTdGFydEluZGljYXRvcixcbiAgcGFyc2VQZXNUeXBlOiBwYXJzZVBlc1R5cGUsXG4gIHBhcnNlUGVzVGltZTogcGFyc2VQZXNUaW1lLFxuICB2aWRlb1BhY2tldENvbnRhaW5zS2V5RnJhbWU6IHZpZGVvUGFja2V0Q29udGFpbnNLZXlGcmFtZVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXRDQTtBQUNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFIQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE3REE7QUFDQTtBQStEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVpBO0FBREE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFkQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUNBO0FBOENBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlFQTtBQUNBO0FBaUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/m2ts/probe.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/m2ts/stream-types.js": -/*!*******************************************************!*\ - !*** ../node_modules/mux.js/lib/m2ts/stream-types.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n\nmodule.exports = {\n H264_STREAM_TYPE: 0x1B,\n ADTS_STREAM_TYPE: 0x0F,\n METADATA_STREAM_TYPE: 0x15\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbTJ0cy9zdHJlYW0tdHlwZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbTJ0cy9zdHJlYW0tdHlwZXMuanM/NzliNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG11eC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICogTGljZW5zZWQgQXBhY2hlLTIuMCBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy9tdXguanMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIMjY0X1NUUkVBTV9UWVBFOiAweDFCLFxuICBBRFRTX1NUUkVBTV9UWVBFOiAweDBGLFxuICBNRVRBREFUQV9TVFJFQU1fVFlQRTogMHgxNVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/m2ts/stream-types.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/m2ts/timestamp-rollover-stream.js": -/*!********************************************************************!*\ - !*** ../node_modules/mux.js/lib/m2ts/timestamp-rollover-stream.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Accepts program elementary stream (PES) data events and corrects\n * decode and presentation time stamps to account for a rollover\n * of the 33 bit value.\n */\n\n\nvar Stream = __webpack_require__(/*! ../utils/stream */ \"../node_modules/mux.js/lib/utils/stream.js\");\n\nvar MAX_TS = 8589934592;\nvar RO_THRESH = 4294967296;\nvar TYPE_SHARED = 'shared';\n\nvar handleRollover = function handleRollover(value, reference) {\n var direction = 1;\n\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp and we detect a\n // timestamp rollover, this means the roll over is happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover occurred. The reference\n // point will be set to a small number, e.g. 1. The user then seeks backwards over the\n // rollover point. In loading this segment, the timestamp values will be very large,\n // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust\n // the time stamp to be `value - 2^33`.\n direction = -1;\n } // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will\n // cause an incorrect adjustment.\n\n\n while (Math.abs(reference - value) > RO_THRESH) {\n value += direction * MAX_TS;\n }\n\n return value;\n};\n\nvar TimestampRolloverStream = function TimestampRolloverStream(type) {\n var lastDTS, referenceDTS;\n TimestampRolloverStream.prototype.init.call(this); // The \"shared\" type is used in cases where a stream will contain muxed\n // video and audio. We could use `undefined` here, but having a string\n // makes debugging a little clearer.\n\n this.type_ = type || TYPE_SHARED;\n\n this.push = function (data) {\n // Any \"shared\" rollover streams will accept _all_ data. Otherwise,\n // streams will only accept data that matches their type.\n if (this.type_ !== TYPE_SHARED && data.type !== this.type_) {\n return;\n }\n\n if (referenceDTS === undefined) {\n referenceDTS = data.dts;\n }\n\n data.dts = handleRollover(data.dts, referenceDTS);\n data.pts = handleRollover(data.pts, referenceDTS);\n lastDTS = data.dts;\n this.trigger('data', data);\n };\n\n this.flush = function () {\n referenceDTS = lastDTS;\n this.trigger('done');\n };\n\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n\n this.discontinuity = function () {\n referenceDTS = void 0;\n lastDTS = void 0;\n };\n\n this.reset = function () {\n this.discontinuity();\n this.trigger('reset');\n };\n};\n\nTimestampRolloverStream.prototype = new Stream();\nmodule.exports = {\n TimestampRolloverStream: TimestampRolloverStream,\n handleRollover: handleRollover\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbTJ0cy90aW1lc3RhbXAtcm9sbG92ZXItc3RyZWFtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL20ydHMvdGltZXN0YW1wLXJvbGxvdmVyLXN0cmVhbS5qcz8zOTc1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogQWNjZXB0cyBwcm9ncmFtIGVsZW1lbnRhcnkgc3RyZWFtIChQRVMpIGRhdGEgZXZlbnRzIGFuZCBjb3JyZWN0c1xuICogZGVjb2RlIGFuZCBwcmVzZW50YXRpb24gdGltZSBzdGFtcHMgdG8gYWNjb3VudCBmb3IgYSByb2xsb3ZlclxuICogb2YgdGhlIDMzIGJpdCB2YWx1ZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuLi91dGlscy9zdHJlYW0nKTtcblxudmFyIE1BWF9UUyA9IDg1ODk5MzQ1OTI7XG5cbnZhciBST19USFJFU0ggPSA0Mjk0OTY3Mjk2O1xuXG52YXIgVFlQRV9TSEFSRUQgPSAnc2hhcmVkJztcblxudmFyIGhhbmRsZVJvbGxvdmVyID0gZnVuY3Rpb24odmFsdWUsIHJlZmVyZW5jZSkge1xuICB2YXIgZGlyZWN0aW9uID0gMTtcblxuICBpZiAodmFsdWUgPiByZWZlcmVuY2UpIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCB0aW1lc3RhbXAgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG91ciByZWZlcmVuY2UgdGltZXN0YW1wIGFuZCB3ZSBkZXRlY3QgYVxuICAgIC8vIHRpbWVzdGFtcCByb2xsb3ZlciwgdGhpcyBtZWFucyB0aGUgcm9sbCBvdmVyIGlzIGhhcHBlbmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLlxuICAgIC8vIEV4YW1wbGUgc2NlbmFyaW86IEVudGVyIGEgbG9uZyBzdHJlYW0vdmlkZW8ganVzdCBhZnRlciBhIHJvbGxvdmVyIG9jY3VycmVkLiBUaGUgcmVmZXJlbmNlXG4gICAgLy8gcG9pbnQgd2lsbCBiZSBzZXQgdG8gYSBzbWFsbCBudW1iZXIsIGUuZy4gMS4gVGhlIHVzZXIgdGhlbiBzZWVrcyBiYWNrd2FyZHMgb3ZlciB0aGVcbiAgICAvLyByb2xsb3ZlciBwb2ludC4gSW4gbG9hZGluZyB0aGlzIHNlZ21lbnQsIHRoZSB0aW1lc3RhbXAgdmFsdWVzIHdpbGwgYmUgdmVyeSBsYXJnZSxcbiAgICAvLyBlLmcuIDJeMzMgLSAxLiBTaW5jZSB0aGlzIGNvbWVzIGJlZm9yZSB0aGUgZGF0YSB3ZSBsb2FkZWQgcHJldmlvdXNseSwgd2Ugd2FudCB0byBhZGp1c3RcbiAgICAvLyB0aGUgdGltZSBzdGFtcCB0byBiZSBgdmFsdWUgLSAyXjMzYC5cbiAgICBkaXJlY3Rpb24gPSAtMTtcbiAgfVxuXG4gIC8vIE5vdGU6IEEgc2VlayBmb3J3YXJkcyBvciBiYWNrIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBST19USFJFU0ggKDJeMzIsIH4xMyBob3Vycykgd2lsbFxuICAvLyBjYXVzZSBhbiBpbmNvcnJlY3QgYWRqdXN0bWVudC5cbiAgd2hpbGUgKE1hdGguYWJzKHJlZmVyZW5jZSAtIHZhbHVlKSA+IFJPX1RIUkVTSCkge1xuICAgIHZhbHVlICs9IChkaXJlY3Rpb24gKiBNQVhfVFMpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIFRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgbGFzdERUUywgcmVmZXJlbmNlRFRTO1xuXG4gIFRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7XG5cbiAgLy8gVGhlIFwic2hhcmVkXCIgdHlwZSBpcyB1c2VkIGluIGNhc2VzIHdoZXJlIGEgc3RyZWFtIHdpbGwgY29udGFpbiBtdXhlZFxuICAvLyB2aWRlbyBhbmQgYXVkaW8uIFdlIGNvdWxkIHVzZSBgdW5kZWZpbmVkYCBoZXJlLCBidXQgaGF2aW5nIGEgc3RyaW5nXG4gIC8vIG1ha2VzIGRlYnVnZ2luZyBhIGxpdHRsZSBjbGVhcmVyLlxuICB0aGlzLnR5cGVfID0gdHlwZSB8fCBUWVBFX1NIQVJFRDtcblxuICB0aGlzLnB1c2ggPSBmdW5jdGlvbihkYXRhKSB7XG5cbiAgICAvLyBBbnkgXCJzaGFyZWRcIiByb2xsb3ZlciBzdHJlYW1zIHdpbGwgYWNjZXB0IF9hbGxfIGRhdGEuIE90aGVyd2lzZSxcbiAgICAvLyBzdHJlYW1zIHdpbGwgb25seSBhY2NlcHQgZGF0YSB0aGF0IG1hdGNoZXMgdGhlaXIgdHlwZS5cbiAgICBpZiAodGhpcy50eXBlXyAhPT0gVFlQRV9TSEFSRUQgJiYgZGF0YS50eXBlICE9PSB0aGlzLnR5cGVfKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHJlZmVyZW5jZURUUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZlcmVuY2VEVFMgPSBkYXRhLmR0cztcbiAgICB9XG5cbiAgICBkYXRhLmR0cyA9IGhhbmRsZVJvbGxvdmVyKGRhdGEuZHRzLCByZWZlcmVuY2VEVFMpO1xuICAgIGRhdGEucHRzID0gaGFuZGxlUm9sbG92ZXIoZGF0YS5wdHMsIHJlZmVyZW5jZURUUyk7XG5cbiAgICBsYXN0RFRTID0gZGF0YS5kdHM7XG5cbiAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBkYXRhKTtcbiAgfTtcblxuICB0aGlzLmZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgcmVmZXJlbmNlRFRTID0gbGFzdERUUztcbiAgICB0aGlzLnRyaWdnZXIoJ2RvbmUnKTtcbiAgfTtcblxuICB0aGlzLmVuZFRpbWVsaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMudHJpZ2dlcignZW5kZWR0aW1lbGluZScpO1xuICB9O1xuXG4gIHRoaXMuZGlzY29udGludWl0eSA9IGZ1bmN0aW9uKCkge1xuICAgIHJlZmVyZW5jZURUUyA9IHZvaWQgMDtcbiAgICBsYXN0RFRTID0gdm9pZCAwO1xuICB9O1xuXG4gIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRpc2NvbnRpbnVpdHkoKTtcbiAgICB0aGlzLnRyaWdnZXIoJ3Jlc2V0Jyk7XG4gIH07XG59O1xuXG5UaW1lc3RhbXBSb2xsb3ZlclN0cmVhbS5wcm90b3R5cGUgPSBuZXcgU3RyZWFtKCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbTogVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0sXG4gIGhhbmRsZVJvbGxvdmVyOiBoYW5kbGVSb2xsb3ZlclxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFzQkE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQWpCQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBN0NBO0FBQ0E7QUFrREE7QUFFQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/m2ts/timestamp-rollover-stream.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/mp4/caption-parser.js": -/*!********************************************************!*\ - !*** ../node_modules/mux.js/lib/mp4/caption-parser.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band CEA-708 captions out of FMP4 segments.\n * @see https://en.wikipedia.org/wiki/CEA-708\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar discardEmulationPreventionBytes = __webpack_require__(/*! ../tools/caption-packet-parser */ \"../node_modules/mux.js/lib/tools/caption-packet-parser.js\").discardEmulationPreventionBytes;\n\nvar CaptionStream = __webpack_require__(/*! ../m2ts/caption-stream */ \"../node_modules/mux.js/lib/m2ts/caption-stream.js\").CaptionStream;\n\nvar probe = __webpack_require__(/*! ./probe */ \"../node_modules/mux.js/lib/mp4/probe.js\");\n\nvar inspect = __webpack_require__(/*! ../tools/mp4-inspector */ \"../node_modules/mux.js/lib/tools/mp4-inspector.js\");\n/**\n * Maps an offset in the mdat to a sample based on the the size of the samples.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Number} offset - The offset into the mdat\n * @param {Object[]} samples - An array of samples, parsed using `parseSamples`\n * @return {?Object} The matching sample, or null if no match was found.\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n\nvar mapToSample = function mapToSample(offset, samples) {\n var approximateOffset = offset;\n\n for (var i = 0; i < samples.length; i++) {\n var sample = samples[i];\n\n if (approximateOffset < sample.size) {\n return sample;\n }\n\n approximateOffset -= sample.size;\n }\n\n return null;\n};\n/**\n * Finds SEI nal units contained in a Media Data Box.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Uint8Array} avcStream - The bytes of the mdat\n * @param {Object[]} samples - The samples parsed out by `parseSamples`\n * @param {Number} trackId - The trackId of this video track\n * @return {Object[]} seiNals - the parsed SEI NALUs found.\n * The contents of the seiNal should match what is expected by\n * CaptionStream.push (nalUnitType, size, data, escapedRBSP, pts, dts)\n *\n * @see ISO-BMFF-12/2015, Section 8.1.1\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n **/\n\n\nvar findSeiNals = function findSeiNals(avcStream, samples, trackId) {\n var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = [],\n seiNal,\n i,\n length,\n lastMatchedSample;\n\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4; // Bail if this doesn't appear to be an H264 stream\n\n if (length <= 0) {\n continue;\n }\n\n switch (avcStream[i] & 0x1F) {\n case 0x06:\n var data = avcStream.subarray(i + 1, i + 1 + length);\n var matchingSample = mapToSample(i, samples);\n seiNal = {\n nalUnitType: 'sei_rbsp',\n size: length,\n data: data,\n escapedRBSP: discardEmulationPreventionBytes(data),\n trackId: trackId\n };\n\n if (matchingSample) {\n seiNal.pts = matchingSample.pts;\n seiNal.dts = matchingSample.dts;\n lastMatchedSample = matchingSample;\n } else {\n // If a matching sample cannot be found, use the last\n // sample's values as they should be as close as possible\n seiNal.pts = lastMatchedSample.pts;\n seiNal.dts = lastMatchedSample.dts;\n }\n\n result.push(seiNal);\n break;\n\n default:\n break;\n }\n }\n\n return result;\n};\n/**\n * Parses sample information out of Track Run Boxes and calculates\n * the absolute presentation and decode timestamps of each sample.\n *\n * @param {Array<Uint8Array>} truns - The Trun Run boxes to be parsed\n * @param {Number} baseMediaDecodeTime - base media decode time from tfdt\n @see ISO-BMFF-12/2015, Section 8.8.12\n * @param {Object} tfhd - The parsed Track Fragment Header\n * @see inspect.parseTfhd\n * @return {Object[]} the parsed samples\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n\nvar parseSamples = function parseSamples(truns, baseMediaDecodeTime, tfhd) {\n var currentDts = baseMediaDecodeTime;\n var defaultSampleDuration = tfhd.defaultSampleDuration || 0;\n var defaultSampleSize = tfhd.defaultSampleSize || 0;\n var trackId = tfhd.trackId;\n var allSamples = [];\n truns.forEach(function (trun) {\n // Note: We currently do not parse the sample table as well\n // as the trun. It's possible some sources will require this.\n // moov > trak > mdia > minf > stbl\n var trackRun = inspect.parseTrun(trun);\n var samples = trackRun.samples;\n samples.forEach(function (sample) {\n if (sample.duration === undefined) {\n sample.duration = defaultSampleDuration;\n }\n\n if (sample.size === undefined) {\n sample.size = defaultSampleSize;\n }\n\n sample.trackId = trackId;\n sample.dts = currentDts;\n\n if (sample.compositionTimeOffset === undefined) {\n sample.compositionTimeOffset = 0;\n }\n\n sample.pts = currentDts + sample.compositionTimeOffset;\n currentDts += sample.duration;\n });\n allSamples = allSamples.concat(samples);\n });\n return allSamples;\n};\n/**\n * Parses out caption nals from an FMP4 segment's video tracks.\n *\n * @param {Uint8Array} segment - The bytes of a single segment\n * @param {Number} videoTrackId - The trackId of a video track in the segment\n * @return {Object.<Number, Object[]>} A mapping of video trackId to\n * a list of seiNals found in that track\n **/\n\n\nvar parseCaptionNals = function parseCaptionNals(segment, videoTrackId) {\n // To get the samples\n var trafs = probe.findBox(segment, ['moof', 'traf']); // To get SEI NAL units\n\n var mdats = probe.findBox(segment, ['mdat']);\n var captionNals = {};\n var mdatTrafPairs = []; // Pair up each traf with a mdat as moofs and mdats are in pairs\n\n mdats.forEach(function (mdat, index) {\n var matchingTraf = trafs[index];\n mdatTrafPairs.push({\n mdat: mdat,\n traf: matchingTraf\n });\n });\n mdatTrafPairs.forEach(function (pair) {\n var mdat = pair.mdat;\n var traf = pair.traf;\n var tfhd = probe.findBox(traf, ['tfhd']); // Exactly 1 tfhd per traf\n\n var headerInfo = inspect.parseTfhd(tfhd[0]);\n var trackId = headerInfo.trackId;\n var tfdt = probe.findBox(traf, ['tfdt']); // Either 0 or 1 tfdt per traf\n\n var baseMediaDecodeTime = tfdt.length > 0 ? inspect.parseTfdt(tfdt[0]).baseMediaDecodeTime : 0;\n var truns = probe.findBox(traf, ['trun']);\n var samples;\n var seiNals; // Only parse video data for the chosen video track\n\n if (videoTrackId === trackId && truns.length > 0) {\n samples = parseSamples(truns, baseMediaDecodeTime, headerInfo);\n seiNals = findSeiNals(mdat, samples, trackId);\n\n if (!captionNals[trackId]) {\n captionNals[trackId] = [];\n }\n\n captionNals[trackId] = captionNals[trackId].concat(seiNals);\n }\n });\n return captionNals;\n};\n/**\n * Parses out inband captions from an MP4 container and returns\n * caption objects that can be used by WebVTT and the TextTrack API.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VTTCue\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack\n * Assumes that `probe.getVideoTrackIds` and `probe.timescale` have been called first\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number} trackId - The id of the video track to parse\n * @param {Number} timescale - The timescale for the video track from the init segment\n *\n * @return {?Object[]} parsedCaptions - A list of captions or null if no video tracks\n * @return {Number} parsedCaptions[].startTime - The time to show the caption in seconds\n * @return {Number} parsedCaptions[].endTime - The time to stop showing the caption in seconds\n * @return {String} parsedCaptions[].text - The visible content of the caption\n **/\n\n\nvar parseEmbeddedCaptions = function parseEmbeddedCaptions(segment, trackId, timescale) {\n var seiNals; // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n\n if (trackId === null) {\n return null;\n }\n\n seiNals = parseCaptionNals(segment, trackId);\n return {\n seiNals: seiNals[trackId],\n timescale: timescale\n };\n};\n/**\n * Converts SEI NALUs into captions that can be used by video.js\n **/\n\n\nvar CaptionParser = function CaptionParser() {\n var isInitialized = false;\n var captionStream; // Stores segments seen before trackId and timescale are set\n\n var segmentCache; // Stores video track ID of the track being parsed\n\n var trackId; // Stores the timescale of the track being parsed\n\n var timescale; // Stores captions parsed so far\n\n var parsedCaptions; // Stores whether we are receiving partial data or not\n\n var parsingPartial;\n /**\n * A method to indicate whether a CaptionParser has been initalized\n * @returns {Boolean}\n **/\n\n this.isInitialized = function () {\n return isInitialized;\n };\n /**\n * Initializes the underlying CaptionStream, SEI NAL parsing\n * and management, and caption collection\n **/\n\n\n this.init = function (options) {\n captionStream = new CaptionStream();\n isInitialized = true;\n parsingPartial = options ? options.isPartial : false; // Collect dispatched captions\n\n captionStream.on('data', function (event) {\n // Convert to seconds in the source's timescale\n event.startTime = event.startPts / timescale;\n event.endTime = event.endPts / timescale;\n parsedCaptions.captions.push(event);\n parsedCaptions.captionStreams[event.stream] = true;\n });\n };\n /**\n * Determines if a new video track will be selected\n * or if the timescale changed\n * @return {Boolean}\n **/\n\n\n this.isNewInit = function (videoTrackIds, timescales) {\n if (videoTrackIds && videoTrackIds.length === 0 || timescales && _typeof(timescales) === 'object' && Object.keys(timescales).length === 0) {\n return false;\n }\n\n return trackId !== videoTrackIds[0] || timescale !== timescales[trackId];\n };\n /**\n * Parses out SEI captions and interacts with underlying\n * CaptionStream to return dispatched captions\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number[]} videoTrackIds - A list of video tracks found in the init segment\n * @param {Object.<Number, Number>} timescales - The timescales found in the init segment\n * @see parseEmbeddedCaptions\n * @see m2ts/caption-stream.js\n **/\n\n\n this.parse = function (segment, videoTrackIds, timescales) {\n var parsedData;\n\n if (!this.isInitialized()) {\n return null; // This is not likely to be a video segment\n } else if (!videoTrackIds || !timescales) {\n return null;\n } else if (this.isNewInit(videoTrackIds, timescales)) {\n // Use the first video track only as there is no\n // mechanism to switch to other video tracks\n trackId = videoTrackIds[0];\n timescale = timescales[trackId]; // If an init segment has not been seen yet, hold onto segment\n // data until we have one.\n // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n } else if (trackId === null || !timescale) {\n segmentCache.push(segment);\n return null;\n } // Now that a timescale and trackId is set, parse cached segments\n\n\n while (segmentCache.length > 0) {\n var cachedSegment = segmentCache.shift();\n this.parse(cachedSegment, videoTrackIds, timescales);\n }\n\n parsedData = parseEmbeddedCaptions(segment, trackId, timescale);\n\n if (parsedData === null || !parsedData.seiNals) {\n return null;\n }\n\n this.pushNals(parsedData.seiNals); // Force the parsed captions to be dispatched\n\n this.flushStream();\n return parsedCaptions;\n };\n /**\n * Pushes SEI NALUs onto CaptionStream\n * @param {Object[]} nals - A list of SEI nals parsed using `parseCaptionNals`\n * Assumes that `parseCaptionNals` has been called first\n * @see m2ts/caption-stream.js\n **/\n\n\n this.pushNals = function (nals) {\n if (!this.isInitialized() || !nals || nals.length === 0) {\n return null;\n }\n\n nals.forEach(function (nal) {\n captionStream.push(nal);\n });\n };\n /**\n * Flushes underlying CaptionStream to dispatch processed, displayable captions\n * @see m2ts/caption-stream.js\n **/\n\n\n this.flushStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n\n if (!parsingPartial) {\n captionStream.flush();\n } else {\n captionStream.partialFlush();\n }\n };\n /**\n * Reset caption buckets for new data\n **/\n\n\n this.clearParsedCaptions = function () {\n parsedCaptions.captions = [];\n parsedCaptions.captionStreams = {};\n };\n /**\n * Resets underlying CaptionStream\n * @see m2ts/caption-stream.js\n **/\n\n\n this.resetCaptionStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n\n captionStream.reset();\n };\n /**\n * Convenience method to clear all captions flushed from the\n * CaptionStream and still being parsed\n * @see m2ts/caption-stream.js\n **/\n\n\n this.clearAllCaptions = function () {\n this.clearParsedCaptions();\n this.resetCaptionStream();\n };\n /**\n * Reset caption parser\n **/\n\n\n this.reset = function () {\n segmentCache = [];\n trackId = null;\n timescale = null;\n\n if (!parsedCaptions) {\n parsedCaptions = {\n captions: [],\n // CC1, CC2, CC3, CC4\n captionStreams: {}\n };\n } else {\n this.clearParsedCaptions();\n }\n\n this.resetCaptionStream();\n };\n\n this.reset();\n};\n\nmodule.exports = CaptionParser;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbXA0L2NhcHRpb24tcGFyc2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL21wNC9jYXB0aW9uLXBhcnNlci5qcz85Mjk2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogUmVhZHMgaW4tYmFuZCBDRUEtNzA4IGNhcHRpb25zIG91dCBvZiBGTVA0IHNlZ21lbnRzLlxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DRUEtNzA4XG4gKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgPSByZXF1aXJlKCcuLi90b29scy9jYXB0aW9uLXBhY2tldC1wYXJzZXInKS5kaXNjYXJkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzO1xudmFyIENhcHRpb25TdHJlYW0gPSByZXF1aXJlKCcuLi9tMnRzL2NhcHRpb24tc3RyZWFtJykuQ2FwdGlvblN0cmVhbTtcbnZhciBwcm9iZSA9IHJlcXVpcmUoJy4vcHJvYmUnKTtcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnLi4vdG9vbHMvbXA0LWluc3BlY3RvcicpO1xuXG4vKipcbiAgKiBNYXBzIGFuIG9mZnNldCBpbiB0aGUgbWRhdCB0byBhIHNhbXBsZSBiYXNlZCBvbiB0aGUgdGhlIHNpemUgb2YgdGhlIHNhbXBsZXMuXG4gICogQXNzdW1lcyB0aGF0IGBwYXJzZVNhbXBsZXNgIGhhcyBiZWVuIGNhbGxlZCBmaXJzdC5cbiAgKlxuICAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGludG8gdGhlIG1kYXRcbiAgKiBAcGFyYW0ge09iamVjdFtdfSBzYW1wbGVzIC0gQW4gYXJyYXkgb2Ygc2FtcGxlcywgcGFyc2VkIHVzaW5nIGBwYXJzZVNhbXBsZXNgXG4gICogQHJldHVybiB7P09iamVjdH0gVGhlIG1hdGNoaW5nIHNhbXBsZSwgb3IgbnVsbCBpZiBubyBtYXRjaCB3YXMgZm91bmQuXG4gICpcbiAgKiBAc2VlIElTTy1CTUZGLTEyLzIwMTUsIFNlY3Rpb24gOC44LjhcbiAqKi9cbnZhciBtYXBUb1NhbXBsZSA9IGZ1bmN0aW9uKG9mZnNldCwgc2FtcGxlcykge1xuICB2YXIgYXBwcm94aW1hdGVPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNhbXBsZSA9IHNhbXBsZXNbaV07XG5cbiAgICBpZiAoYXBwcm94aW1hdGVPZmZzZXQgPCBzYW1wbGUuc2l6ZSkge1xuICAgICAgcmV0dXJuIHNhbXBsZTtcbiAgICB9XG5cbiAgICBhcHByb3hpbWF0ZU9mZnNldCAtPSBzYW1wbGUuc2l6ZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gICogRmluZHMgU0VJIG5hbCB1bml0cyBjb250YWluZWQgaW4gYSBNZWRpYSBEYXRhIEJveC5cbiAgKiBBc3N1bWVzIHRoYXQgYHBhcnNlU2FtcGxlc2AgaGFzIGJlZW4gY2FsbGVkIGZpcnN0LlxuICAqXG4gICogQHBhcmFtIHtVaW50OEFycmF5fSBhdmNTdHJlYW0gLSBUaGUgYnl0ZXMgb2YgdGhlIG1kYXRcbiAgKiBAcGFyYW0ge09iamVjdFtdfSBzYW1wbGVzIC0gVGhlIHNhbXBsZXMgcGFyc2VkIG91dCBieSBgcGFyc2VTYW1wbGVzYFxuICAqIEBwYXJhbSB7TnVtYmVyfSB0cmFja0lkIC0gVGhlIHRyYWNrSWQgb2YgdGhpcyB2aWRlbyB0cmFja1xuICAqIEByZXR1cm4ge09iamVjdFtdfSBzZWlOYWxzIC0gdGhlIHBhcnNlZCBTRUkgTkFMVXMgZm91bmQuXG4gICogICBUaGUgY29udGVudHMgb2YgdGhlIHNlaU5hbCBzaG91bGQgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZCBieVxuICAqICAgQ2FwdGlvblN0cmVhbS5wdXNoIChuYWxVbml0VHlwZSwgc2l6ZSwgZGF0YSwgZXNjYXBlZFJCU1AsIHB0cywgZHRzKVxuICAqXG4gICogQHNlZSBJU08tQk1GRi0xMi8yMDE1LCBTZWN0aW9uIDguMS4xXG4gICogQHNlZSBSZWMuIElUVS1UIEguMjY0LCA3LjMuMi4zLjFcbiAqKi9cbnZhciBmaW5kU2VpTmFscyA9IGZ1bmN0aW9uKGF2Y1N0cmVhbSwgc2FtcGxlcywgdHJhY2tJZCkge1xuICB2YXJcbiAgICBhdmNWaWV3ID0gbmV3IERhdGFWaWV3KGF2Y1N0cmVhbS5idWZmZXIsIGF2Y1N0cmVhbS5ieXRlT2Zmc2V0LCBhdmNTdHJlYW0uYnl0ZUxlbmd0aCksXG4gICAgcmVzdWx0ID0gW10sXG4gICAgc2VpTmFsLFxuICAgIGksXG4gICAgbGVuZ3RoLFxuICAgIGxhc3RNYXRjaGVkU2FtcGxlO1xuXG4gIGZvciAoaSA9IDA7IGkgKyA0IDwgYXZjU3RyZWFtLmxlbmd0aDsgaSArPSBsZW5ndGgpIHtcbiAgICBsZW5ndGggPSBhdmNWaWV3LmdldFVpbnQzMihpKTtcbiAgICBpICs9IDQ7XG5cbiAgICAvLyBCYWlsIGlmIHRoaXMgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW4gSDI2NCBzdHJlYW1cbiAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYXZjU3RyZWFtW2ldICYgMHgxRikge1xuICAgIGNhc2UgMHgwNjpcbiAgICAgIHZhciBkYXRhID0gYXZjU3RyZWFtLnN1YmFycmF5KGkgKyAxLCBpICsgMSArIGxlbmd0aCk7XG4gICAgICB2YXIgbWF0Y2hpbmdTYW1wbGUgPSBtYXBUb1NhbXBsZShpLCBzYW1wbGVzKTtcblxuICAgICAgc2VpTmFsID0ge1xuICAgICAgICBuYWxVbml0VHlwZTogJ3NlaV9yYnNwJyxcbiAgICAgICAgc2l6ZTogbGVuZ3RoLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBlc2NhcGVkUkJTUDogZGlzY2FyZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhkYXRhKSxcbiAgICAgICAgdHJhY2tJZDogdHJhY2tJZFxuICAgICAgfTtcblxuICAgICAgaWYgKG1hdGNoaW5nU2FtcGxlKSB7XG4gICAgICAgIHNlaU5hbC5wdHMgPSBtYXRjaGluZ1NhbXBsZS5wdHM7XG4gICAgICAgIHNlaU5hbC5kdHMgPSBtYXRjaGluZ1NhbXBsZS5kdHM7XG4gICAgICAgIGxhc3RNYXRjaGVkU2FtcGxlID0gbWF0Y2hpbmdTYW1wbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG1hdGNoaW5nIHNhbXBsZSBjYW5ub3QgYmUgZm91bmQsIHVzZSB0aGUgbGFzdFxuICAgICAgICAvLyBzYW1wbGUncyB2YWx1ZXMgYXMgdGhleSBzaG91bGQgYmUgYXMgY2xvc2UgYXMgcG9zc2libGVcbiAgICAgICAgc2VpTmFsLnB0cyA9IGxhc3RNYXRjaGVkU2FtcGxlLnB0cztcbiAgICAgICAgc2VpTmFsLmR0cyA9IGxhc3RNYXRjaGVkU2FtcGxlLmR0cztcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goc2VpTmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gICogUGFyc2VzIHNhbXBsZSBpbmZvcm1hdGlvbiBvdXQgb2YgVHJhY2sgUnVuIEJveGVzIGFuZCBjYWxjdWxhdGVzXG4gICogdGhlIGFic29sdXRlIHByZXNlbnRhdGlvbiBhbmQgZGVjb2RlIHRpbWVzdGFtcHMgb2YgZWFjaCBzYW1wbGUuXG4gICpcbiAgKiBAcGFyYW0ge0FycmF5PFVpbnQ4QXJyYXk+fSB0cnVucyAtIFRoZSBUcnVuIFJ1biBib3hlcyB0byBiZSBwYXJzZWRcbiAgKiBAcGFyYW0ge051bWJlcn0gYmFzZU1lZGlhRGVjb2RlVGltZSAtIGJhc2UgbWVkaWEgZGVjb2RlIHRpbWUgZnJvbSB0ZmR0XG4gICAgICBAc2VlIElTTy1CTUZGLTEyLzIwMTUsIFNlY3Rpb24gOC44LjEyXG4gICogQHBhcmFtIHtPYmplY3R9IHRmaGQgLSBUaGUgcGFyc2VkIFRyYWNrIEZyYWdtZW50IEhlYWRlclxuICAqICAgQHNlZSBpbnNwZWN0LnBhcnNlVGZoZFxuICAqIEByZXR1cm4ge09iamVjdFtdfSB0aGUgcGFyc2VkIHNhbXBsZXNcbiAgKlxuICAqIEBzZWUgSVNPLUJNRkYtMTIvMjAxNSwgU2VjdGlvbiA4LjguOFxuICoqL1xudmFyIHBhcnNlU2FtcGxlcyA9IGZ1bmN0aW9uKHRydW5zLCBiYXNlTWVkaWFEZWNvZGVUaW1lLCB0ZmhkKSB7XG4gIHZhciBjdXJyZW50RHRzID0gYmFzZU1lZGlhRGVjb2RlVGltZTtcbiAgdmFyIGRlZmF1bHRTYW1wbGVEdXJhdGlvbiA9IHRmaGQuZGVmYXVsdFNhbXBsZUR1cmF0aW9uIHx8IDA7XG4gIHZhciBkZWZhdWx0U2FtcGxlU2l6ZSA9IHRmaGQuZGVmYXVsdFNhbXBsZVNpemUgfHwgMDtcbiAgdmFyIHRyYWNrSWQgPSB0ZmhkLnRyYWNrSWQ7XG4gIHZhciBhbGxTYW1wbGVzID0gW107XG5cbiAgdHJ1bnMuZm9yRWFjaChmdW5jdGlvbih0cnVuKSB7XG4gICAgLy8gTm90ZTogV2UgY3VycmVudGx5IGRvIG5vdCBwYXJzZSB0aGUgc2FtcGxlIHRhYmxlIGFzIHdlbGxcbiAgICAvLyBhcyB0aGUgdHJ1bi4gSXQncyBwb3NzaWJsZSBzb21lIHNvdXJjZXMgd2lsbCByZXF1aXJlIHRoaXMuXG4gICAgLy8gbW9vdiA+IHRyYWsgPiBtZGlhID4gbWluZiA+IHN0YmxcbiAgICB2YXIgdHJhY2tSdW4gPSBpbnNwZWN0LnBhcnNlVHJ1bih0cnVuKTtcbiAgICB2YXIgc2FtcGxlcyA9IHRyYWNrUnVuLnNhbXBsZXM7XG5cbiAgICBzYW1wbGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlKSB7XG4gICAgICBpZiAoc2FtcGxlLmR1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2FtcGxlLmR1cmF0aW9uID0gZGVmYXVsdFNhbXBsZUR1cmF0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKHNhbXBsZS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2FtcGxlLnNpemUgPSBkZWZhdWx0U2FtcGxlU2l6ZTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZS50cmFja0lkID0gdHJhY2tJZDtcbiAgICAgIHNhbXBsZS5kdHMgPSBjdXJyZW50RHRzO1xuICAgICAgaWYgKHNhbXBsZS5jb21wb3NpdGlvblRpbWVPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzYW1wbGUuY29tcG9zaXRpb25UaW1lT2Zmc2V0ID0gMDtcbiAgICAgIH1cbiAgICAgIHNhbXBsZS5wdHMgPSBjdXJyZW50RHRzICsgc2FtcGxlLmNvbXBvc2l0aW9uVGltZU9mZnNldDtcblxuICAgICAgY3VycmVudER0cyArPSBzYW1wbGUuZHVyYXRpb247XG4gICAgfSk7XG5cbiAgICBhbGxTYW1wbGVzID0gYWxsU2FtcGxlcy5jb25jYXQoc2FtcGxlcyk7XG4gIH0pO1xuXG4gIHJldHVybiBhbGxTYW1wbGVzO1xufTtcblxuLyoqXG4gICogUGFyc2VzIG91dCBjYXB0aW9uIG5hbHMgZnJvbSBhbiBGTVA0IHNlZ21lbnQncyB2aWRlbyB0cmFja3MuXG4gICpcbiAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHNlZ21lbnQgLSBUaGUgYnl0ZXMgb2YgYSBzaW5nbGUgc2VnbWVudFxuICAqIEBwYXJhbSB7TnVtYmVyfSB2aWRlb1RyYWNrSWQgLSBUaGUgdHJhY2tJZCBvZiBhIHZpZGVvIHRyYWNrIGluIHRoZSBzZWdtZW50XG4gICogQHJldHVybiB7T2JqZWN0LjxOdW1iZXIsIE9iamVjdFtdPn0gQSBtYXBwaW5nIG9mIHZpZGVvIHRyYWNrSWQgdG9cbiAgKiAgIGEgbGlzdCBvZiBzZWlOYWxzIGZvdW5kIGluIHRoYXQgdHJhY2tcbiAqKi9cbnZhciBwYXJzZUNhcHRpb25OYWxzID0gZnVuY3Rpb24oc2VnbWVudCwgdmlkZW9UcmFja0lkKSB7XG4gIC8vIFRvIGdldCB0aGUgc2FtcGxlc1xuICB2YXIgdHJhZnMgPSBwcm9iZS5maW5kQm94KHNlZ21lbnQsIFsnbW9vZicsICd0cmFmJ10pO1xuICAvLyBUbyBnZXQgU0VJIE5BTCB1bml0c1xuICB2YXIgbWRhdHMgPSBwcm9iZS5maW5kQm94KHNlZ21lbnQsIFsnbWRhdCddKTtcbiAgdmFyIGNhcHRpb25OYWxzID0ge307XG4gIHZhciBtZGF0VHJhZlBhaXJzID0gW107XG5cbiAgLy8gUGFpciB1cCBlYWNoIHRyYWYgd2l0aCBhIG1kYXQgYXMgbW9vZnMgYW5kIG1kYXRzIGFyZSBpbiBwYWlyc1xuICBtZGF0cy5mb3JFYWNoKGZ1bmN0aW9uKG1kYXQsIGluZGV4KSB7XG4gICAgdmFyIG1hdGNoaW5nVHJhZiA9IHRyYWZzW2luZGV4XTtcbiAgICBtZGF0VHJhZlBhaXJzLnB1c2goe1xuICAgICAgbWRhdDogbWRhdCxcbiAgICAgIHRyYWY6IG1hdGNoaW5nVHJhZlxuICAgIH0pO1xuICB9KTtcblxuICBtZGF0VHJhZlBhaXJzLmZvckVhY2goZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciBtZGF0ID0gcGFpci5tZGF0O1xuICAgIHZhciB0cmFmID0gcGFpci50cmFmO1xuICAgIHZhciB0ZmhkID0gcHJvYmUuZmluZEJveCh0cmFmLCBbJ3RmaGQnXSk7XG4gICAgLy8gRXhhY3RseSAxIHRmaGQgcGVyIHRyYWZcbiAgICB2YXIgaGVhZGVySW5mbyA9IGluc3BlY3QucGFyc2VUZmhkKHRmaGRbMF0pO1xuICAgIHZhciB0cmFja0lkID0gaGVhZGVySW5mby50cmFja0lkO1xuICAgIHZhciB0ZmR0ID0gcHJvYmUuZmluZEJveCh0cmFmLCBbJ3RmZHQnXSk7XG4gICAgLy8gRWl0aGVyIDAgb3IgMSB0ZmR0IHBlciB0cmFmXG4gICAgdmFyIGJhc2VNZWRpYURlY29kZVRpbWUgPSAodGZkdC5sZW5ndGggPiAwKSA/IGluc3BlY3QucGFyc2VUZmR0KHRmZHRbMF0pLmJhc2VNZWRpYURlY29kZVRpbWUgOiAwO1xuICAgIHZhciB0cnVucyA9IHByb2JlLmZpbmRCb3godHJhZiwgWyd0cnVuJ10pO1xuICAgIHZhciBzYW1wbGVzO1xuICAgIHZhciBzZWlOYWxzO1xuXG4gICAgLy8gT25seSBwYXJzZSB2aWRlbyBkYXRhIGZvciB0aGUgY2hvc2VuIHZpZGVvIHRyYWNrXG4gICAgaWYgKHZpZGVvVHJhY2tJZCA9PT0gdHJhY2tJZCAmJiB0cnVucy5sZW5ndGggPiAwKSB7XG4gICAgICBzYW1wbGVzID0gcGFyc2VTYW1wbGVzKHRydW5zLCBiYXNlTWVkaWFEZWNvZGVUaW1lLCBoZWFkZXJJbmZvKTtcblxuICAgICAgc2VpTmFscyA9IGZpbmRTZWlOYWxzKG1kYXQsIHNhbXBsZXMsIHRyYWNrSWQpO1xuXG4gICAgICBpZiAoIWNhcHRpb25OYWxzW3RyYWNrSWRdKSB7XG4gICAgICAgIGNhcHRpb25OYWxzW3RyYWNrSWRdID0gW107XG4gICAgICB9XG5cbiAgICAgIGNhcHRpb25OYWxzW3RyYWNrSWRdID0gY2FwdGlvbk5hbHNbdHJhY2tJZF0uY29uY2F0KHNlaU5hbHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNhcHRpb25OYWxzO1xufTtcblxuLyoqXG4gICogUGFyc2VzIG91dCBpbmJhbmQgY2FwdGlvbnMgZnJvbSBhbiBNUDQgY29udGFpbmVyIGFuZCByZXR1cm5zXG4gICogY2FwdGlvbiBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgYnkgV2ViVlRUIGFuZCB0aGUgVGV4dFRyYWNrIEFQSS5cbiAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WVFRDdWVcbiAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0VHJhY2tcbiAgKiBBc3N1bWVzIHRoYXQgYHByb2JlLmdldFZpZGVvVHJhY2tJZHNgIGFuZCBgcHJvYmUudGltZXNjYWxlYCBoYXZlIGJlZW4gY2FsbGVkIGZpcnN0XG4gICpcbiAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHNlZ21lbnQgLSBUaGUgZm1wNCBzZWdtZW50IGNvbnRhaW5pbmcgZW1iZWRkZWQgY2FwdGlvbnNcbiAgKiBAcGFyYW0ge051bWJlcn0gdHJhY2tJZCAtIFRoZSBpZCBvZiB0aGUgdmlkZW8gdHJhY2sgdG8gcGFyc2VcbiAgKiBAcGFyYW0ge051bWJlcn0gdGltZXNjYWxlIC0gVGhlIHRpbWVzY2FsZSBmb3IgdGhlIHZpZGVvIHRyYWNrIGZyb20gdGhlIGluaXQgc2VnbWVudFxuICAqXG4gICogQHJldHVybiB7P09iamVjdFtdfSBwYXJzZWRDYXB0aW9ucyAtIEEgbGlzdCBvZiBjYXB0aW9ucyBvciBudWxsIGlmIG5vIHZpZGVvIHRyYWNrc1xuICAqIEByZXR1cm4ge051bWJlcn0gcGFyc2VkQ2FwdGlvbnNbXS5zdGFydFRpbWUgLSBUaGUgdGltZSB0byBzaG93IHRoZSBjYXB0aW9uIGluIHNlY29uZHNcbiAgKiBAcmV0dXJuIHtOdW1iZXJ9IHBhcnNlZENhcHRpb25zW10uZW5kVGltZSAtIFRoZSB0aW1lIHRvIHN0b3Agc2hvd2luZyB0aGUgY2FwdGlvbiBpbiBzZWNvbmRzXG4gICogQHJldHVybiB7U3RyaW5nfSBwYXJzZWRDYXB0aW9uc1tdLnRleHQgLSBUaGUgdmlzaWJsZSBjb250ZW50IG9mIHRoZSBjYXB0aW9uXG4gKiovXG52YXIgcGFyc2VFbWJlZGRlZENhcHRpb25zID0gZnVuY3Rpb24oc2VnbWVudCwgdHJhY2tJZCwgdGltZXNjYWxlKSB7XG4gIHZhciBzZWlOYWxzO1xuXG4gIC8vIHRoZSBJU08tQk1GRiBzcGVjIHNheXMgdGhhdCB0cmFja0lkIGNhbid0IGJlIHplcm8sIGJ1dCB0aGVyZSdzIHNvbWUgYnJva2VuIGNvbnRlbnQgb3V0IHRoZXJlXG4gIGlmICh0cmFja0lkID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZWlOYWxzID0gcGFyc2VDYXB0aW9uTmFscyhzZWdtZW50LCB0cmFja0lkKTtcblxuICByZXR1cm4ge1xuICAgIHNlaU5hbHM6IHNlaU5hbHNbdHJhY2tJZF0sXG4gICAgdGltZXNjYWxlOiB0aW1lc2NhbGVcbiAgfTtcbn07XG5cbi8qKlxuICAqIENvbnZlcnRzIFNFSSBOQUxVcyBpbnRvIGNhcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgYnkgdmlkZW8uanNcbiAqKi9cbnZhciBDYXB0aW9uUGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHZhciBjYXB0aW9uU3RyZWFtO1xuXG4gIC8vIFN0b3JlcyBzZWdtZW50cyBzZWVuIGJlZm9yZSB0cmFja0lkIGFuZCB0aW1lc2NhbGUgYXJlIHNldFxuICB2YXIgc2VnbWVudENhY2hlO1xuICAvLyBTdG9yZXMgdmlkZW8gdHJhY2sgSUQgb2YgdGhlIHRyYWNrIGJlaW5nIHBhcnNlZFxuICB2YXIgdHJhY2tJZDtcbiAgLy8gU3RvcmVzIHRoZSB0aW1lc2NhbGUgb2YgdGhlIHRyYWNrIGJlaW5nIHBhcnNlZFxuICB2YXIgdGltZXNjYWxlO1xuICAvLyBTdG9yZXMgY2FwdGlvbnMgcGFyc2VkIHNvIGZhclxuICB2YXIgcGFyc2VkQ2FwdGlvbnM7XG4gIC8vIFN0b3JlcyB3aGV0aGVyIHdlIGFyZSByZWNlaXZpbmcgcGFydGlhbCBkYXRhIG9yIG5vdFxuICB2YXIgcGFyc2luZ1BhcnRpYWw7XG5cbiAgLyoqXG4gICAgKiBBIG1ldGhvZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgQ2FwdGlvblBhcnNlciBoYXMgYmVlbiBpbml0YWxpemVkXG4gICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICoqL1xuICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaXNJbml0aWFsaXplZDtcbiAgfTtcblxuICAvKipcbiAgICAqIEluaXRpYWxpemVzIHRoZSB1bmRlcmx5aW5nIENhcHRpb25TdHJlYW0sIFNFSSBOQUwgcGFyc2luZ1xuICAgICogYW5kIG1hbmFnZW1lbnQsIGFuZCBjYXB0aW9uIGNvbGxlY3Rpb25cbiAgICoqL1xuICB0aGlzLmluaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY2FwdGlvblN0cmVhbSA9IG5ldyBDYXB0aW9uU3RyZWFtKCk7XG4gICAgaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgcGFyc2luZ1BhcnRpYWwgPSBvcHRpb25zID8gb3B0aW9ucy5pc1BhcnRpYWwgOiBmYWxzZTtcblxuICAgIC8vIENvbGxlY3QgZGlzcGF0Y2hlZCBjYXB0aW9uc1xuICAgIGNhcHRpb25TdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgLy8gQ29udmVydCB0byBzZWNvbmRzIGluIHRoZSBzb3VyY2UncyB0aW1lc2NhbGVcbiAgICAgIGV2ZW50LnN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0UHRzIC8gdGltZXNjYWxlO1xuICAgICAgZXZlbnQuZW5kVGltZSA9IGV2ZW50LmVuZFB0cyAvIHRpbWVzY2FsZTtcblxuICAgICAgcGFyc2VkQ2FwdGlvbnMuY2FwdGlvbnMucHVzaChldmVudCk7XG4gICAgICBwYXJzZWRDYXB0aW9ucy5jYXB0aW9uU3RyZWFtc1tldmVudC5zdHJlYW1dID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICAqIERldGVybWluZXMgaWYgYSBuZXcgdmlkZW8gdHJhY2sgd2lsbCBiZSBzZWxlY3RlZFxuICAgICogb3IgaWYgdGhlIHRpbWVzY2FsZSBjaGFuZ2VkXG4gICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKiovXG4gIHRoaXMuaXNOZXdJbml0ID0gZnVuY3Rpb24odmlkZW9UcmFja0lkcywgdGltZXNjYWxlcykge1xuICAgIGlmICgodmlkZW9UcmFja0lkcyAmJiB2aWRlb1RyYWNrSWRzLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICAgKHRpbWVzY2FsZXMgJiYgdHlwZW9mIHRpbWVzY2FsZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgT2JqZWN0LmtleXModGltZXNjYWxlcykubGVuZ3RoID09PSAwKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFja0lkICE9PSB2aWRlb1RyYWNrSWRzWzBdIHx8XG4gICAgICB0aW1lc2NhbGUgIT09IHRpbWVzY2FsZXNbdHJhY2tJZF07XG4gIH07XG5cbiAgLyoqXG4gICAgKiBQYXJzZXMgb3V0IFNFSSBjYXB0aW9ucyBhbmQgaW50ZXJhY3RzIHdpdGggdW5kZXJseWluZ1xuICAgICogQ2FwdGlvblN0cmVhbSB0byByZXR1cm4gZGlzcGF0Y2hlZCBjYXB0aW9uc1xuICAgICpcbiAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gc2VnbWVudCAtIFRoZSBmbXA0IHNlZ21lbnQgY29udGFpbmluZyBlbWJlZGRlZCBjYXB0aW9uc1xuICAgICogQHBhcmFtIHtOdW1iZXJbXX0gdmlkZW9UcmFja0lkcyAtIEEgbGlzdCBvZiB2aWRlbyB0cmFja3MgZm91bmQgaW4gdGhlIGluaXQgc2VnbWVudFxuICAgICogQHBhcmFtIHtPYmplY3QuPE51bWJlciwgTnVtYmVyPn0gdGltZXNjYWxlcyAtIFRoZSB0aW1lc2NhbGVzIGZvdW5kIGluIHRoZSBpbml0IHNlZ21lbnRcbiAgICAqIEBzZWUgcGFyc2VFbWJlZGRlZENhcHRpb25zXG4gICAgKiBAc2VlIG0ydHMvY2FwdGlvbi1zdHJlYW0uanNcbiAgICoqL1xuICB0aGlzLnBhcnNlID0gZnVuY3Rpb24oc2VnbWVudCwgdmlkZW9UcmFja0lkcywgdGltZXNjYWxlcykge1xuICAgIHZhciBwYXJzZWREYXRhO1xuXG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBUaGlzIGlzIG5vdCBsaWtlbHkgdG8gYmUgYSB2aWRlbyBzZWdtZW50XG4gICAgfSBlbHNlIGlmICghdmlkZW9UcmFja0lkcyB8fCAhdGltZXNjYWxlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOZXdJbml0KHZpZGVvVHJhY2tJZHMsIHRpbWVzY2FsZXMpKSB7XG4gICAgICAvLyBVc2UgdGhlIGZpcnN0IHZpZGVvIHRyYWNrIG9ubHkgYXMgdGhlcmUgaXMgbm9cbiAgICAgIC8vIG1lY2hhbmlzbSB0byBzd2l0Y2ggdG8gb3RoZXIgdmlkZW8gdHJhY2tzXG4gICAgICB0cmFja0lkID0gdmlkZW9UcmFja0lkc1swXTtcbiAgICAgIHRpbWVzY2FsZSA9IHRpbWVzY2FsZXNbdHJhY2tJZF07XG5cbiAgICAvLyBJZiBhbiBpbml0IHNlZ21lbnQgaGFzIG5vdCBiZWVuIHNlZW4geWV0LCBob2xkIG9udG8gc2VnbWVudFxuICAgIC8vIGRhdGEgdW50aWwgd2UgaGF2ZSBvbmUuXG4gICAgLy8gdGhlIElTTy1CTUZGIHNwZWMgc2F5cyB0aGF0IHRyYWNrSWQgY2FuJ3QgYmUgemVybywgYnV0IHRoZXJlJ3Mgc29tZSBicm9rZW4gY29udGVudCBvdXQgdGhlcmVcbiAgICB9IGVsc2UgaWYgKHRyYWNrSWQgPT09IG51bGwgfHwgIXRpbWVzY2FsZSkge1xuICAgICAgc2VnbWVudENhY2hlLnB1c2goc2VnbWVudCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBOb3cgdGhhdCBhIHRpbWVzY2FsZSBhbmQgdHJhY2tJZCBpcyBzZXQsIHBhcnNlIGNhY2hlZCBzZWdtZW50c1xuICAgIHdoaWxlIChzZWdtZW50Q2FjaGUubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGNhY2hlZFNlZ21lbnQgPSBzZWdtZW50Q2FjaGUuc2hpZnQoKTtcblxuICAgICAgdGhpcy5wYXJzZShjYWNoZWRTZWdtZW50LCB2aWRlb1RyYWNrSWRzLCB0aW1lc2NhbGVzKTtcbiAgICB9XG5cbiAgICBwYXJzZWREYXRhID0gcGFyc2VFbWJlZGRlZENhcHRpb25zKHNlZ21lbnQsIHRyYWNrSWQsIHRpbWVzY2FsZSk7XG5cbiAgICBpZiAocGFyc2VkRGF0YSA9PT0gbnVsbCB8fCAhcGFyc2VkRGF0YS5zZWlOYWxzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hOYWxzKHBhcnNlZERhdGEuc2VpTmFscyk7XG4gICAgLy8gRm9yY2UgdGhlIHBhcnNlZCBjYXB0aW9ucyB0byBiZSBkaXNwYXRjaGVkXG4gICAgdGhpcy5mbHVzaFN0cmVhbSgpO1xuXG4gICAgcmV0dXJuIHBhcnNlZENhcHRpb25zO1xuICB9O1xuXG4gIC8qKlxuICAgICogUHVzaGVzIFNFSSBOQUxVcyBvbnRvIENhcHRpb25TdHJlYW1cbiAgICAqIEBwYXJhbSB7T2JqZWN0W119IG5hbHMgLSBBIGxpc3Qgb2YgU0VJIG5hbHMgcGFyc2VkIHVzaW5nIGBwYXJzZUNhcHRpb25OYWxzYFxuICAgICogQXNzdW1lcyB0aGF0IGBwYXJzZUNhcHRpb25OYWxzYCBoYXMgYmVlbiBjYWxsZWQgZmlyc3RcbiAgICAqIEBzZWUgbTJ0cy9jYXB0aW9uLXN0cmVhbS5qc1xuICAgICoqL1xuICB0aGlzLnB1c2hOYWxzID0gZnVuY3Rpb24obmFscykge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKCkgfHwgIW5hbHMgfHwgbmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5hbHMuZm9yRWFjaChmdW5jdGlvbihuYWwpIHtcbiAgICAgIGNhcHRpb25TdHJlYW0ucHVzaChuYWwpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgICogRmx1c2hlcyB1bmRlcmx5aW5nIENhcHRpb25TdHJlYW0gdG8gZGlzcGF0Y2ggcHJvY2Vzc2VkLCBkaXNwbGF5YWJsZSBjYXB0aW9uc1xuICAgICogQHNlZSBtMnRzL2NhcHRpb24tc3RyZWFtLmpzXG4gICAqKi9cbiAgdGhpcy5mbHVzaFN0cmVhbSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghcGFyc2luZ1BhcnRpYWwpIHtcbiAgICAgIGNhcHRpb25TdHJlYW0uZmx1c2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FwdGlvblN0cmVhbS5wYXJ0aWFsRmx1c2goKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAgKiBSZXNldCBjYXB0aW9uIGJ1Y2tldHMgZm9yIG5ldyBkYXRhXG4gICAqKi9cbiAgdGhpcy5jbGVhclBhcnNlZENhcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgcGFyc2VkQ2FwdGlvbnMuY2FwdGlvbnMgPSBbXTtcbiAgICBwYXJzZWRDYXB0aW9ucy5jYXB0aW9uU3RyZWFtcyA9IHt9O1xuICB9O1xuXG4gIC8qKlxuICAgICogUmVzZXRzIHVuZGVybHlpbmcgQ2FwdGlvblN0cmVhbVxuICAgICogQHNlZSBtMnRzL2NhcHRpb24tc3RyZWFtLmpzXG4gICAqKi9cbiAgdGhpcy5yZXNldENhcHRpb25TdHJlYW0gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjYXB0aW9uU3RyZWFtLnJlc2V0KCk7XG4gIH07XG5cbiAgLyoqXG4gICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gY2xlYXIgYWxsIGNhcHRpb25zIGZsdXNoZWQgZnJvbSB0aGVcbiAgICAqIENhcHRpb25TdHJlYW0gYW5kIHN0aWxsIGJlaW5nIHBhcnNlZFxuICAgICogQHNlZSBtMnRzL2NhcHRpb24tc3RyZWFtLmpzXG4gICAqKi9cbiAgdGhpcy5jbGVhckFsbENhcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbGVhclBhcnNlZENhcHRpb25zKCk7XG4gICAgdGhpcy5yZXNldENhcHRpb25TdHJlYW0oKTtcbiAgfTtcblxuICAvKipcbiAgICAqIFJlc2V0IGNhcHRpb24gcGFyc2VyXG4gICAqKi9cbiAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgIHNlZ21lbnRDYWNoZSA9IFtdO1xuICAgIHRyYWNrSWQgPSBudWxsO1xuICAgIHRpbWVzY2FsZSA9IG51bGw7XG5cbiAgICBpZiAoIXBhcnNlZENhcHRpb25zKSB7XG4gICAgICBwYXJzZWRDYXB0aW9ucyA9IHtcbiAgICAgICAgY2FwdGlvbnM6IFtdLFxuICAgICAgICAvLyBDQzEsIENDMiwgQ0MzLCBDQzRcbiAgICAgICAgY2FwdGlvblN0cmVhbXM6IHt9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VkQ2FwdGlvbnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q2FwdGlvblN0cmVhbSgpO1xuICB9O1xuXG4gIHRoaXMucmVzZXQoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FwdGlvblBhcnNlcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztBQVNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZ0JBOzs7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFqREE7QUFvREE7Ozs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQWRBO0FBaUJBO0FBeEJBO0FBMkJBO0FBbENBO0FBcUNBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBNEJBO0FBN0NBO0FBZ0RBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBVkE7QUFnQkE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFJQTtBQUNBO0FBREE7QUFJQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU5BO0FBTkE7QUFnQkE7Ozs7Ozs7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVdBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFLQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBckJBO0FBQ0E7QUFDQTtBQXVCQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUF6Q0E7QUE0Q0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUxBO0FBVUE7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBVEE7QUFZQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUtBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFLQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBQ0E7QUFpQkE7QUFwTUE7QUFDQTtBQXNNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/mp4/caption-parser.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/mp4/probe.js": -/*!***********************************************!*\ - !*** ../node_modules/mux.js/lib/mp4/probe.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about MP4s.\n */\n\n\nvar toUnsigned = __webpack_require__(/*! ../utils/bin */ \"../node_modules/mux.js/lib/utils/bin.js\").toUnsigned;\n\nvar toHexString = __webpack_require__(/*! ../utils/bin */ \"../node_modules/mux.js/lib/utils/bin.js\").toHexString;\n\nvar _findBox, parseType, timescale, startTime, getVideoTrackIds, getTracks; // Find the data for a box specified by its path\n\n\n_findBox = function findBox(data, path) {\n var results = [],\n i,\n size,\n type,\n end,\n subresults;\n\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n\n for (i = 0; i < data.byteLength;) {\n size = toUnsigned(data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3]);\n type = parseType(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength;\n\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, end));\n } else {\n // recursively search for the next box along the path\n subresults = _findBox(data.subarray(i + 8, end), path.slice(1));\n\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n\n i = end;\n } // we've finished searching all of data\n\n\n return results;\n};\n/**\n * Returns the string representation of an ASCII encoded four byte buffer.\n * @param buffer {Uint8Array} a four-byte buffer to translate\n * @return {string} the corresponding string\n */\n\n\nparseType = function parseType(buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n};\n/**\n * Parses an MP4 initialization segment and extracts the timescale\n * values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track ids to timescale values or null if\n * the init segment is malformed.\n */\n\n\ntimescale = function timescale(init) {\n var result = {},\n traks = _findBox(init, ['moov', 'trak']); // mdhd timescale\n\n\n return traks.reduce(function (result, trak) {\n var tkhd, version, index, id, mdhd;\n tkhd = _findBox(trak, ['tkhd'])[0];\n\n if (!tkhd) {\n return null;\n }\n\n version = tkhd[0];\n index = version === 0 ? 12 : 20;\n id = toUnsigned(tkhd[index] << 24 | tkhd[index + 1] << 16 | tkhd[index + 2] << 8 | tkhd[index + 3]);\n mdhd = _findBox(trak, ['mdia', 'mdhd'])[0];\n\n if (!mdhd) {\n return null;\n }\n\n version = mdhd[0];\n index = version === 0 ? 12 : 20;\n result[id] = toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n return result;\n }, result);\n};\n/**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\n\n\nstartTime = function startTime(timescale, fragment) {\n var trafs, baseTimes, result; // we need info from two childrend of each track fragment box\n\n trafs = _findBox(fragment, ['moof', 'traf']); // determine the start times for each track\n\n baseTimes = [].concat.apply([], trafs.map(function (traf) {\n return _findBox(traf, ['tfhd']).map(function (tfhd) {\n var id, scale, baseTime; // get the track id from the tfhd\n\n id = toUnsigned(tfhd[4] << 24 | tfhd[5] << 16 | tfhd[6] << 8 | tfhd[7]); // assume a 90kHz clock if no timescale was specified\n\n scale = timescale[id] || 90e3; // get the base media decode time from the tfdt\n\n baseTime = _findBox(traf, ['tfdt']).map(function (tfdt) {\n var version, result;\n version = tfdt[0];\n result = toUnsigned(tfdt[4] << 24 | tfdt[5] << 16 | tfdt[6] << 8 | tfdt[7]);\n\n if (version === 1) {\n result *= Math.pow(2, 32);\n result += toUnsigned(tfdt[8] << 24 | tfdt[9] << 16 | tfdt[10] << 8 | tfdt[11]);\n }\n\n return result;\n })[0];\n baseTime = baseTime || Infinity; // convert base time to seconds\n\n return baseTime / scale;\n });\n })); // return the minimum\n\n result = Math.min.apply(null, baseTimes);\n return isFinite(result) ? result : 0;\n};\n/**\n * Find the trackIds of the video tracks in this source.\n * Found by parsing the Handler Reference and Track Header Boxes:\n * moov > trak > mdia > hdlr\n * moov > trak > tkhd\n *\n * @param {Uint8Array} init - The bytes of the init segment for this source\n * @return {Number[]} A list of trackIds\n *\n * @see ISO-BMFF-12/2015, Section 8.4.3\n **/\n\n\ngetVideoTrackIds = function getVideoTrackIds(init) {\n var traks = _findBox(init, ['moov', 'trak']);\n\n var videoTrackIds = [];\n traks.forEach(function (trak) {\n var hdlrs = _findBox(trak, ['mdia', 'hdlr']);\n\n var tkhds = _findBox(trak, ['tkhd']);\n\n hdlrs.forEach(function (hdlr, index) {\n var handlerType = parseType(hdlr.subarray(8, 12));\n var tkhd = tkhds[index];\n var view;\n var version;\n var trackId;\n\n if (handlerType === 'vide') {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n version = view.getUint8(0);\n trackId = version === 0 ? view.getUint32(12) : view.getUint32(20);\n videoTrackIds.push(trackId);\n }\n });\n });\n return videoTrackIds;\n};\n/**\n * Get all the video, audio, and hint tracks from a non fragmented\n * mp4 segment\n */\n\n\ngetTracks = function getTracks(init) {\n var traks = _findBox(init, ['moov', 'trak']);\n\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {};\n\n var tkhd = _findBox(trak, ['tkhd'])[0];\n\n var view, version; // id\n\n if (tkhd) {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n version = view.getUint8(0);\n track.id = version === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n\n var hdlr = _findBox(trak, ['mdia', 'hdlr'])[0]; // type\n\n\n if (hdlr) {\n var type = parseType(hdlr.subarray(8, 12));\n\n if (type === 'vide') {\n track.type = 'video';\n } else if (type === 'soun') {\n track.type = 'audio';\n } else {\n track.type = type;\n }\n } // codec\n\n\n var stsd = _findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n\n if (stsd) {\n var sampleDescriptions = stsd.subarray(8); // gives the codec type string\n\n track.codec = parseType(sampleDescriptions.subarray(4, 8));\n\n var codecBox = _findBox(sampleDescriptions, [track.codec])[0];\n\n var codecConfig, codecConfigType;\n\n if (codecBox) {\n // https://tools.ietf.org/html/rfc6381#section-3.3\n if (/^[a-z]vc[1-9]$/i.test(track.codec)) {\n // we don't need anything but the \"config\" parameter of the\n // avc1 codecBox\n codecConfig = codecBox.subarray(78);\n codecConfigType = parseType(codecConfig.subarray(4, 8));\n\n if (codecConfigType === 'avcC' && codecConfig.length > 11) {\n track.codec += '.'; // left padded with zeroes for single digit hex\n // profile idc\n\n track.codec += toHexString(codecConfig[9]); // the byte containing the constraint_set flags\n\n track.codec += toHexString(codecConfig[10]); // level idc\n\n track.codec += toHexString(codecConfig[11]);\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'avc1.4d400d';\n }\n } else if (/^mp4[a,v]$/i.test(track.codec)) {\n // we do not need anything but the streamDescriptor of the mp4a codecBox\n codecConfig = codecBox.subarray(28);\n codecConfigType = parseType(codecConfig.subarray(4, 8));\n\n if (codecConfigType === 'esds' && codecConfig.length > 20 && codecConfig[19] !== 0) {\n track.codec += '.' + toHexString(codecConfig[19]); // this value is only a single digit\n\n track.codec += '.' + toHexString(codecConfig[20] >>> 2 & 0x3f).replace(/^0/, '');\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'mp4a.40.2';\n }\n } else {// TODO: show a warning? for unknown codec type\n }\n }\n }\n\n var mdhd = _findBox(trak, ['mdia', 'mdhd'])[0];\n\n if (mdhd && tkhd) {\n var index = version === 0 ? 12 : 20;\n track.timescale = toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n }\n\n tracks.push(track);\n });\n return tracks;\n};\n\nmodule.exports = {\n findBox: _findBox,\n parseType: parseType,\n timescale: timescale,\n startTime: startTime,\n videoTrackIds: getVideoTrackIds,\n tracks: getTracks\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvbXA0L3Byb2JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL21wNC9wcm9iZS5qcz83YmRjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogVXRpbGl0aWVzIHRvIGRldGVjdCBiYXNpYyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSBhYm91dCBNUDRzLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciB0b1Vuc2lnbmVkID0gcmVxdWlyZSgnLi4vdXRpbHMvYmluJykudG9VbnNpZ25lZDtcbnZhciB0b0hleFN0cmluZyA9IHJlcXVpcmUoJy4uL3V0aWxzL2JpbicpLnRvSGV4U3RyaW5nO1xudmFyIGZpbmRCb3gsIHBhcnNlVHlwZSwgdGltZXNjYWxlLCBzdGFydFRpbWUsIGdldFZpZGVvVHJhY2tJZHMsIGdldFRyYWNrcztcblxuLy8gRmluZCB0aGUgZGF0YSBmb3IgYSBib3ggc3BlY2lmaWVkIGJ5IGl0cyBwYXRoXG5maW5kQm94ID0gZnVuY3Rpb24oZGF0YSwgcGF0aCkge1xuICB2YXIgcmVzdWx0cyA9IFtdLFxuICAgICAgaSwgc2l6ZSwgdHlwZSwgZW5kLCBzdWJyZXN1bHRzO1xuXG4gIGlmICghcGF0aC5sZW5ndGgpIHtcbiAgICAvLyBzaG9ydC1jaXJjdWl0IHRoZSBzZWFyY2ggZm9yIGVtcHR5IHBhdGhzXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5ieXRlTGVuZ3RoOykge1xuICAgIHNpemUgID0gdG9VbnNpZ25lZChkYXRhW2ldICAgICA8PCAyNCB8XG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDFdIDw8IDE2IHxcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPDwgIDggfFxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAzXSk7XG5cbiAgICB0eXBlID0gcGFyc2VUeXBlKGRhdGEuc3ViYXJyYXkoaSArIDQsIGkgKyA4KSk7XG5cbiAgICBlbmQgPSBzaXplID4gMSA/IGkgKyBzaXplIDogZGF0YS5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKHR5cGUgPT09IHBhdGhbMF0pIHtcbiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBlbmQgb2YgdGhlIHBhdGggYW5kIHdlJ3ZlIGZvdW5kIHRoZSBib3ggd2Ugd2VyZVxuICAgICAgICAvLyBsb29raW5nIGZvclxuICAgICAgICByZXN1bHRzLnB1c2goZGF0YS5zdWJhcnJheShpICsgOCwgZW5kKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHRoZSBuZXh0IGJveCBhbG9uZyB0aGUgcGF0aFxuICAgICAgICBzdWJyZXN1bHRzID0gZmluZEJveChkYXRhLnN1YmFycmF5KGkgKyA4LCBlbmQpLCBwYXRoLnNsaWNlKDEpKTtcbiAgICAgICAgaWYgKHN1YnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KHN1YnJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGkgPSBlbmQ7XG4gIH1cblxuICAvLyB3ZSd2ZSBmaW5pc2hlZCBzZWFyY2hpbmcgYWxsIG9mIGRhdGFcbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBBU0NJSSBlbmNvZGVkIGZvdXIgYnl0ZSBidWZmZXIuXG4gKiBAcGFyYW0gYnVmZmVyIHtVaW50OEFycmF5fSBhIGZvdXItYnl0ZSBidWZmZXIgdG8gdHJhbnNsYXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZ1xuICovXG5wYXJzZVR5cGUgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbMF0pO1xuICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbMV0pO1xuICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbMl0pO1xuICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbM10pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBQYXJzZXMgYW4gTVA0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQgYW5kIGV4dHJhY3RzIHRoZSB0aW1lc2NhbGVcbiAqIHZhbHVlcyBmb3IgYW55IGRlY2xhcmVkIHRyYWNrcy4gVGltZXNjYWxlIHZhbHVlcyBpbmRpY2F0ZSB0aGVcbiAqIG51bWJlciBvZiBjbG9jayB0aWNrcyBwZXIgc2Vjb25kIHRvIGFzc3VtZSBmb3IgdGltZS1iYXNlZCB2YWx1ZXNcbiAqIGVsc2V3aGVyZSBpbiB0aGUgTVA0LlxuICpcbiAqIFRvIGRldGVybWluZSB0aGUgc3RhcnQgdGltZSBvZiBhbiBNUDQsIHlvdSBuZWVkIHR3byBwaWVjZXMgb2ZcbiAqIGluZm9ybWF0aW9uOiB0aGUgdGltZXNjYWxlIHVuaXQgYW5kIHRoZSBlYXJsaWVzdCBiYXNlIG1lZGlhIGRlY29kZVxuICogdGltZS4gTXVsdGlwbGUgdGltZXNjYWxlcyBjYW4gYmUgc3BlY2lmaWVkIHdpdGhpbiBhbiBNUDQgYnV0IHRoZVxuICogYmFzZSBtZWRpYSBkZWNvZGUgdGltZSBpcyBhbHdheXMgZXhwcmVzc2VkIGluIHRoZSB0aW1lc2NhbGUgZnJvbVxuICogdGhlIG1lZGlhIGhlYWRlciBib3ggZm9yIHRoZSB0cmFjazpcbiAqIGBgYFxuICogbW9vdiA+IHRyYWsgPiBtZGlhID4gbWRoZC50aW1lc2NhbGVcbiAqIGBgYFxuICogQHBhcmFtIGluaXQge1VpbnQ4QXJyYXl9IHRoZSBieXRlcyBvZiB0aGUgaW5pdCBzZWdtZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9IGEgaGFzaCBvZiB0cmFjayBpZHMgdG8gdGltZXNjYWxlIHZhbHVlcyBvciBudWxsIGlmXG4gKiB0aGUgaW5pdCBzZWdtZW50IGlzIG1hbGZvcm1lZC5cbiAqL1xudGltZXNjYWxlID0gZnVuY3Rpb24oaW5pdCkge1xuICB2YXJcbiAgICByZXN1bHQgPSB7fSxcbiAgICB0cmFrcyA9IGZpbmRCb3goaW5pdCwgWydtb292JywgJ3RyYWsnXSk7XG5cbiAgLy8gbWRoZCB0aW1lc2NhbGVcbiAgcmV0dXJuIHRyYWtzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIHRyYWspIHtcbiAgICB2YXIgdGtoZCwgdmVyc2lvbiwgaW5kZXgsIGlkLCBtZGhkO1xuXG4gICAgdGtoZCA9IGZpbmRCb3godHJhaywgWyd0a2hkJ10pWzBdO1xuICAgIGlmICghdGtoZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZlcnNpb24gPSB0a2hkWzBdO1xuICAgIGluZGV4ID0gdmVyc2lvbiA9PT0gMCA/IDEyIDogMjA7XG4gICAgaWQgPSB0b1Vuc2lnbmVkKHRraGRbaW5kZXhdICAgICA8PCAyNCB8XG4gICAgICAgICAgICAgICAgICAgIHRraGRbaW5kZXggKyAxXSA8PCAxNiB8XG4gICAgICAgICAgICAgICAgICAgIHRraGRbaW5kZXggKyAyXSA8PCAgOCB8XG4gICAgICAgICAgICAgICAgICAgIHRraGRbaW5kZXggKyAzXSk7XG5cbiAgICBtZGhkID0gZmluZEJveCh0cmFrLCBbJ21kaWEnLCAnbWRoZCddKVswXTtcbiAgICBpZiAoIW1kaGQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2ZXJzaW9uID0gbWRoZFswXTtcbiAgICBpbmRleCA9IHZlcnNpb24gPT09IDAgPyAxMiA6IDIwO1xuICAgIHJlc3VsdFtpZF0gPSB0b1Vuc2lnbmVkKG1kaGRbaW5kZXhdICAgICA8PCAyNCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRoZFtpbmRleCArIDFdIDw8IDE2IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZGhkW2luZGV4ICsgMl0gPDwgIDggfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kaGRbaW5kZXggKyAzXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgcmVzdWx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBiYXNlIG1lZGlhIGRlY29kZSBzdGFydCB0aW1lLCBpbiBzZWNvbmRzLCBmb3IgYW4gTVA0XG4gKiBmcmFnbWVudC4gSWYgbXVsdGlwbGUgZnJhZ21lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBlYXJsaWVzdCB0aW1lIGlzXG4gKiByZXR1cm5lZC5cbiAqXG4gKiBUaGUgYmFzZSBtZWRpYSBkZWNvZGUgdGltZSBjYW4gYmUgcGFyc2VkIGZyb20gdHJhY2sgZnJhZ21lbnRcbiAqIG1ldGFkYXRhOlxuICogYGBgXG4gKiBtb29mID4gdHJhZiA+IHRmZHQuYmFzZU1lZGlhRGVjb2RlVGltZVxuICogYGBgXG4gKiBJdCByZXF1aXJlcyB0aGUgdGltZXNjYWxlIHZhbHVlIGZyb20gdGhlIG1kaGQgdG8gaW50ZXJwcmV0LlxuICpcbiAqIEBwYXJhbSB0aW1lc2NhbGUge29iamVjdH0gYSBoYXNoIG9mIHRyYWNrIGlkcyB0byB0aW1lc2NhbGUgdmFsdWVzLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgZWFybGllc3QgYmFzZSBtZWRpYSBkZWNvZGUgc3RhcnQgdGltZSBmb3IgdGhlXG4gKiBmcmFnbWVudCwgaW4gc2Vjb25kc1xuICovXG5zdGFydFRpbWUgPSBmdW5jdGlvbih0aW1lc2NhbGUsIGZyYWdtZW50KSB7XG4gIHZhciB0cmFmcywgYmFzZVRpbWVzLCByZXN1bHQ7XG5cbiAgLy8gd2UgbmVlZCBpbmZvIGZyb20gdHdvIGNoaWxkcmVuZCBvZiBlYWNoIHRyYWNrIGZyYWdtZW50IGJveFxuICB0cmFmcyA9IGZpbmRCb3goZnJhZ21lbnQsIFsnbW9vZicsICd0cmFmJ10pO1xuXG4gIC8vIGRldGVybWluZSB0aGUgc3RhcnQgdGltZXMgZm9yIGVhY2ggdHJhY2tcbiAgYmFzZVRpbWVzID0gW10uY29uY2F0LmFwcGx5KFtdLCB0cmFmcy5tYXAoZnVuY3Rpb24odHJhZikge1xuICAgIHJldHVybiBmaW5kQm94KHRyYWYsIFsndGZoZCddKS5tYXAoZnVuY3Rpb24odGZoZCkge1xuICAgICAgdmFyIGlkLCBzY2FsZSwgYmFzZVRpbWU7XG5cbiAgICAgIC8vIGdldCB0aGUgdHJhY2sgaWQgZnJvbSB0aGUgdGZoZFxuICAgICAgaWQgPSB0b1Vuc2lnbmVkKHRmaGRbNF0gPDwgMjQgfFxuICAgICAgICAgICAgICAgICAgICAgIHRmaGRbNV0gPDwgMTYgfFxuICAgICAgICAgICAgICAgICAgICAgIHRmaGRbNl0gPDwgIDggfFxuICAgICAgICAgICAgICAgICAgICAgIHRmaGRbN10pO1xuICAgICAgLy8gYXNzdW1lIGEgOTBrSHogY2xvY2sgaWYgbm8gdGltZXNjYWxlIHdhcyBzcGVjaWZpZWRcbiAgICAgIHNjYWxlID0gdGltZXNjYWxlW2lkXSB8fCA5MGUzO1xuXG4gICAgICAvLyBnZXQgdGhlIGJhc2UgbWVkaWEgZGVjb2RlIHRpbWUgZnJvbSB0aGUgdGZkdFxuICAgICAgYmFzZVRpbWUgPSBmaW5kQm94KHRyYWYsIFsndGZkdCddKS5tYXAoZnVuY3Rpb24odGZkdCkge1xuICAgICAgICB2YXIgdmVyc2lvbiwgcmVzdWx0O1xuXG4gICAgICAgIHZlcnNpb24gPSB0ZmR0WzBdO1xuICAgICAgICByZXN1bHQgPSB0b1Vuc2lnbmVkKHRmZHRbNF0gPDwgMjQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmZHRbNV0gPDwgMTYgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmZHRbNl0gPDwgIDggfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmZHRbN10pO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gIDEpIHtcbiAgICAgICAgICByZXN1bHQgKj0gTWF0aC5wb3coMiwgMzIpO1xuICAgICAgICAgIHJlc3VsdCArPSB0b1Vuc2lnbmVkKHRmZHRbOF0gIDw8IDI0IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZmR0WzldICA8PCAxNiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZkdFsxMF0gPDwgIDggfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmZHRbMTFdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlbMF07XG4gICAgICBiYXNlVGltZSA9IGJhc2VUaW1lIHx8IEluZmluaXR5O1xuXG4gICAgICAvLyBjb252ZXJ0IGJhc2UgdGltZSB0byBzZWNvbmRzXG4gICAgICByZXR1cm4gYmFzZVRpbWUgLyBzY2FsZTtcbiAgICB9KTtcbiAgfSkpO1xuXG4gIC8vIHJldHVybiB0aGUgbWluaW11bVxuICByZXN1bHQgPSBNYXRoLm1pbi5hcHBseShudWxsLCBiYXNlVGltZXMpO1xuICByZXR1cm4gaXNGaW5pdGUocmVzdWx0KSA/IHJlc3VsdCA6IDA7XG59O1xuXG4vKipcbiAgKiBGaW5kIHRoZSB0cmFja0lkcyBvZiB0aGUgdmlkZW8gdHJhY2tzIGluIHRoaXMgc291cmNlLlxuICAqIEZvdW5kIGJ5IHBhcnNpbmcgdGhlIEhhbmRsZXIgUmVmZXJlbmNlIGFuZCBUcmFjayBIZWFkZXIgQm94ZXM6XG4gICogICBtb292ID4gdHJhayA+IG1kaWEgPiBoZGxyXG4gICogICBtb292ID4gdHJhayA+IHRraGRcbiAgKlxuICAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5pdCAtIFRoZSBieXRlcyBvZiB0aGUgaW5pdCBzZWdtZW50IGZvciB0aGlzIHNvdXJjZVxuICAqIEByZXR1cm4ge051bWJlcltdfSBBIGxpc3Qgb2YgdHJhY2tJZHNcbiAgKlxuICAqIEBzZWUgSVNPLUJNRkYtMTIvMjAxNSwgU2VjdGlvbiA4LjQuM1xuICoqL1xuZ2V0VmlkZW9UcmFja0lkcyA9IGZ1bmN0aW9uKGluaXQpIHtcbiAgdmFyIHRyYWtzID0gZmluZEJveChpbml0LCBbJ21vb3YnLCAndHJhayddKTtcbiAgdmFyIHZpZGVvVHJhY2tJZHMgPSBbXTtcblxuICB0cmFrcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWspIHtcbiAgICB2YXIgaGRscnMgPSBmaW5kQm94KHRyYWssIFsnbWRpYScsICdoZGxyJ10pO1xuICAgIHZhciB0a2hkcyA9IGZpbmRCb3godHJhaywgWyd0a2hkJ10pO1xuXG4gICAgaGRscnMuZm9yRWFjaChmdW5jdGlvbihoZGxyLCBpbmRleCkge1xuICAgICAgdmFyIGhhbmRsZXJUeXBlID0gcGFyc2VUeXBlKGhkbHIuc3ViYXJyYXkoOCwgMTIpKTtcbiAgICAgIHZhciB0a2hkID0gdGtoZHNbaW5kZXhdO1xuICAgICAgdmFyIHZpZXc7XG4gICAgICB2YXIgdmVyc2lvbjtcbiAgICAgIHZhciB0cmFja0lkO1xuXG4gICAgICBpZiAoaGFuZGxlclR5cGUgPT09ICd2aWRlJykge1xuICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KHRraGQuYnVmZmVyLCB0a2hkLmJ5dGVPZmZzZXQsIHRraGQuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHZlcnNpb24gPSB2aWV3LmdldFVpbnQ4KDApO1xuICAgICAgICB0cmFja0lkID0gKHZlcnNpb24gPT09IDApID8gdmlldy5nZXRVaW50MzIoMTIpIDogdmlldy5nZXRVaW50MzIoMjApO1xuXG4gICAgICAgIHZpZGVvVHJhY2tJZHMucHVzaCh0cmFja0lkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZpZGVvVHJhY2tJZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIHZpZGVvLCBhdWRpbywgYW5kIGhpbnQgdHJhY2tzIGZyb20gYSBub24gZnJhZ21lbnRlZFxuICogbXA0IHNlZ21lbnRcbiAqL1xuZ2V0VHJhY2tzID0gZnVuY3Rpb24oaW5pdCkge1xuICB2YXIgdHJha3MgPSBmaW5kQm94KGluaXQsIFsnbW9vdicsICd0cmFrJ10pO1xuICB2YXIgdHJhY2tzID0gW107XG5cbiAgdHJha3MuZm9yRWFjaChmdW5jdGlvbih0cmFrKSB7XG4gICAgdmFyIHRyYWNrID0ge307XG4gICAgdmFyIHRraGQgPSBmaW5kQm94KHRyYWssIFsndGtoZCddKVswXTtcbiAgICB2YXIgdmlldywgdmVyc2lvbjtcblxuICAgIC8vIGlkXG4gICAgaWYgKHRraGQpIHtcbiAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcodGtoZC5idWZmZXIsIHRraGQuYnl0ZU9mZnNldCwgdGtoZC5ieXRlTGVuZ3RoKTtcbiAgICAgIHZlcnNpb24gPSB2aWV3LmdldFVpbnQ4KDApO1xuXG4gICAgICB0cmFjay5pZCA9ICh2ZXJzaW9uID09PSAwKSA/IHZpZXcuZ2V0VWludDMyKDEyKSA6IHZpZXcuZ2V0VWludDMyKDIwKTtcbiAgICB9XG5cbiAgICB2YXIgaGRsciA9IGZpbmRCb3godHJhaywgWydtZGlhJywgJ2hkbHInXSlbMF07XG5cbiAgICAvLyB0eXBlXG4gICAgaWYgKGhkbHIpIHtcbiAgICAgIHZhciB0eXBlID0gcGFyc2VUeXBlKGhkbHIuc3ViYXJyYXkoOCwgMTIpKTtcblxuICAgICAgaWYgKHR5cGUgPT09ICd2aWRlJykge1xuICAgICAgICB0cmFjay50eXBlID0gJ3ZpZGVvJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NvdW4nKSB7XG4gICAgICAgIHRyYWNrLnR5cGUgPSAnYXVkaW8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2sudHlwZSA9IHR5cGU7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBjb2RlY1xuICAgIHZhciBzdHNkID0gZmluZEJveCh0cmFrLCBbJ21kaWEnLCAnbWluZicsICdzdGJsJywgJ3N0c2QnXSlbMF07XG5cbiAgICBpZiAoc3RzZCkge1xuICAgICAgdmFyIHNhbXBsZURlc2NyaXB0aW9ucyA9IHN0c2Quc3ViYXJyYXkoOCk7XG4gICAgICAvLyBnaXZlcyB0aGUgY29kZWMgdHlwZSBzdHJpbmdcbiAgICAgIHRyYWNrLmNvZGVjID0gcGFyc2VUeXBlKHNhbXBsZURlc2NyaXB0aW9ucy5zdWJhcnJheSg0LCA4KSk7XG5cbiAgICAgIHZhciBjb2RlY0JveCA9IGZpbmRCb3goc2FtcGxlRGVzY3JpcHRpb25zLCBbdHJhY2suY29kZWNdKVswXTtcbiAgICAgIHZhciBjb2RlY0NvbmZpZywgY29kZWNDb25maWdUeXBlO1xuXG4gICAgICBpZiAoY29kZWNCb3gpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzODEjc2VjdGlvbi0zLjNcbiAgICAgICAgaWYgKCgvXlthLXpddmNbMS05XSQvaSkudGVzdCh0cmFjay5jb2RlYykpIHtcbiAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGFueXRoaW5nIGJ1dCB0aGUgXCJjb25maWdcIiBwYXJhbWV0ZXIgb2YgdGhlXG4gICAgICAgICAgLy8gYXZjMSBjb2RlY0JveFxuICAgICAgICAgIGNvZGVjQ29uZmlnID0gY29kZWNCb3guc3ViYXJyYXkoNzgpO1xuICAgICAgICAgIGNvZGVjQ29uZmlnVHlwZSA9IHBhcnNlVHlwZShjb2RlY0NvbmZpZy5zdWJhcnJheSg0LCA4KSk7XG5cbiAgICAgICAgICBpZiAoY29kZWNDb25maWdUeXBlID09PSAnYXZjQycgJiYgY29kZWNDb25maWcubGVuZ3RoID4gMTEpIHtcbiAgICAgICAgICAgIHRyYWNrLmNvZGVjICs9ICcuJztcblxuICAgICAgICAgICAgLy8gbGVmdCBwYWRkZWQgd2l0aCB6ZXJvZXMgZm9yIHNpbmdsZSBkaWdpdCBoZXhcbiAgICAgICAgICAgIC8vIHByb2ZpbGUgaWRjXG4gICAgICAgICAgICB0cmFjay5jb2RlYyArPSAgdG9IZXhTdHJpbmcoY29kZWNDb25maWdbOV0pO1xuICAgICAgICAgICAgLy8gdGhlIGJ5dGUgY29udGFpbmluZyB0aGUgY29uc3RyYWludF9zZXQgZmxhZ3NcbiAgICAgICAgICAgIHRyYWNrLmNvZGVjICs9IHRvSGV4U3RyaW5nKGNvZGVjQ29uZmlnWzEwXSk7XG4gICAgICAgICAgICAvLyBsZXZlbCBpZGNcbiAgICAgICAgICAgIHRyYWNrLmNvZGVjICs9IHRvSGV4U3RyaW5nKGNvZGVjQ29uZmlnWzExXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3cgYSB3YXJuaW5nIHRoYXQgd2UgY291bGRuJ3QgcGFyc2UgdGhlIGNvZGVjXG4gICAgICAgICAgICAvLyBhbmQgYXJlIHVzaW5nIHRoZSBkZWZhdWx0XG4gICAgICAgICAgICB0cmFjay5jb2RlYyA9ICdhdmMxLjRkNDAwZCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCgvXm1wNFthLHZdJC9pKS50ZXN0KHRyYWNrLmNvZGVjKSkge1xuICAgICAgICAgIC8vIHdlIGRvIG5vdCBuZWVkIGFueXRoaW5nIGJ1dCB0aGUgc3RyZWFtRGVzY3JpcHRvciBvZiB0aGUgbXA0YSBjb2RlY0JveFxuICAgICAgICAgIGNvZGVjQ29uZmlnID0gY29kZWNCb3guc3ViYXJyYXkoMjgpO1xuICAgICAgICAgIGNvZGVjQ29uZmlnVHlwZSA9IHBhcnNlVHlwZShjb2RlY0NvbmZpZy5zdWJhcnJheSg0LCA4KSk7XG5cbiAgICAgICAgICBpZiAoY29kZWNDb25maWdUeXBlID09PSAnZXNkcycgJiYgY29kZWNDb25maWcubGVuZ3RoID4gMjAgJiYgY29kZWNDb25maWdbMTldICE9PSAwKSB7XG4gICAgICAgICAgICB0cmFjay5jb2RlYyArPSAnLicgKyB0b0hleFN0cmluZyhjb2RlY0NvbmZpZ1sxOV0pO1xuICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBpcyBvbmx5IGEgc2luZ2xlIGRpZ2l0XG4gICAgICAgICAgICB0cmFjay5jb2RlYyArPSAnLicgKyB0b0hleFN0cmluZygoY29kZWNDb25maWdbMjBdID4+PiAyKSAmIDB4M2YpLnJlcGxhY2UoL14wLywgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG93IGEgd2FybmluZyB0aGF0IHdlIGNvdWxkbid0IHBhcnNlIHRoZSBjb2RlY1xuICAgICAgICAgICAgLy8gYW5kIGFyZSB1c2luZyB0aGUgZGVmYXVsdFxuICAgICAgICAgICAgdHJhY2suY29kZWMgPSAnbXA0YS40MC4yJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVE9ETzogc2hvdyBhIHdhcm5pbmc/IGZvciB1bmtub3duIGNvZGVjIHR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtZGhkID0gZmluZEJveCh0cmFrLCBbJ21kaWEnLCAnbWRoZCddKVswXTtcblxuICAgIGlmIChtZGhkICYmIHRraGQpIHtcbiAgICAgIHZhciBpbmRleCA9IHZlcnNpb24gPT09IDAgPyAxMiA6IDIwO1xuXG4gICAgICB0cmFjay50aW1lc2NhbGUgPSB0b1Vuc2lnbmVkKG1kaGRbaW5kZXhdICAgICA8PCAyNCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kaGRbaW5kZXggKyAxXSA8PCAxNiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kaGRbaW5kZXggKyAyXSA8PCAgOCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kaGRbaW5kZXggKyAzXSk7XG4gICAgfVxuXG4gICAgdHJhY2tzLnB1c2godHJhY2spO1xuICB9KTtcblxuICByZXR1cm4gdHJhY2tzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbmRCb3g6IGZpbmRCb3gsXG4gIHBhcnNlVHlwZTogcGFyc2VUeXBlLFxuICB0aW1lc2NhbGU6IHRpbWVzY2FsZSxcbiAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gIHZpZGVvVHJhY2tJZHM6IGdldFZpZGVvVHJhY2tJZHMsXG4gIHRyYWNrczogZ2V0VHJhY2tzXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWhDQTtBQUNBO0FBQ0E7QUFrQ0E7QUFwQ0E7QUF1Q0E7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUF4QkE7QUFOQTtBQWtDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQWZBO0FBaUJBO0FBQ0E7QUFFQTtBQWhDQTtBQVJBO0FBQ0E7QUE0Q0E7QUFDQTtBQTlDQTtBQWlEQTs7Ozs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBYkE7QUFKQTtBQXFCQTtBQXpCQTtBQTRCQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBekJBO0FBQ0E7QUFDQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUE5RkE7QUFpR0E7QUFyR0E7QUFDQTtBQXVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/mp4/probe.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/tools/caption-packet-parser.js": -/*!*****************************************************************!*\ - !*** ../node_modules/mux.js/lib/tools/caption-packet-parser.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */\n // Supplemental enhancement information (SEI) NAL units have a\n// payload type field to indicate how they are to be\n// interpreted. CEAS-708 caption content is always transmitted with\n// payload type 0x04.\n\nvar USER_DATA_REGISTERED_ITU_T_T35 = 4,\n RBSP_TRAILING_BITS = 128;\n/**\n * Parse a supplemental enhancement information (SEI) NAL unit.\n * Stops parsing once a message of type ITU T T35 has been found.\n *\n * @param bytes {Uint8Array} the bytes of a SEI NAL unit\n * @return {object} the parsed SEI payload\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n */\n\nvar parseSei = function parseSei(bytes) {\n var i = 0,\n result = {\n payloadType: -1,\n payloadSize: 0\n },\n payloadType = 0,\n payloadSize = 0; // go through the sei_rbsp parsing each each individual sei_message\n\n while (i < bytes.byteLength) {\n // stop once we have hit the end of the sei_rbsp\n if (bytes[i] === RBSP_TRAILING_BITS) {\n break;\n } // Parse payload type\n\n\n while (bytes[i] === 0xFF) {\n payloadType += 255;\n i++;\n }\n\n payloadType += bytes[i++]; // Parse payload size\n\n while (bytes[i] === 0xFF) {\n payloadSize += 255;\n i++;\n }\n\n payloadSize += bytes[i++]; // this sei_message is a 608/708 caption so save it and break\n // there can only ever be one caption message in a frame's sei\n\n if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) {\n result.payloadType = payloadType;\n result.payloadSize = payloadSize;\n result.payload = bytes.subarray(i, i + payloadSize);\n break;\n } // skip the payload and parse the next message\n\n\n i += payloadSize;\n payloadType = 0;\n payloadSize = 0;\n }\n\n return result;\n}; // see ANSI/SCTE 128-1 (2013), section 8.1\n\n\nvar parseUserData = function parseUserData(sei) {\n // itu_t_t35_contry_code must be 181 (United States) for\n // captions\n if (sei.payload[0] !== 181) {\n return null;\n } // itu_t_t35_provider_code should be 49 (ATSC) for captions\n\n\n if ((sei.payload[1] << 8 | sei.payload[2]) !== 49) {\n return null;\n } // the user_identifier should be \"GA94\" to indicate ATSC1 data\n\n\n if (String.fromCharCode(sei.payload[3], sei.payload[4], sei.payload[5], sei.payload[6]) !== 'GA94') {\n return null;\n } // finally, user_data_type_code should be 0x03 for caption data\n\n\n if (sei.payload[7] !== 0x03) {\n return null;\n } // return the user_data_type_structure and strip the trailing\n // marker bits\n\n\n return sei.payload.subarray(8, sei.payload.length - 1);\n}; // see CEA-708-D, section 4.4\n\n\nvar parseCaptionPackets = function parseCaptionPackets(pts, userData) {\n var results = [],\n i,\n count,\n offset,\n data; // if this is just filler, return immediately\n\n if (!(userData[0] & 0x40)) {\n return results;\n } // parse out the cc_data_1 and cc_data_2 fields\n\n\n count = userData[0] & 0x1f;\n\n for (i = 0; i < count; i++) {\n offset = i * 3;\n data = {\n type: userData[offset + 2] & 0x03,\n pts: pts\n }; // capture cc data when cc_valid is 1\n\n if (userData[offset + 2] & 0x04) {\n data.ccData = userData[offset + 3] << 8 | userData[offset + 4];\n results.push(data);\n }\n }\n\n return results;\n};\n\nvar discardEmulationPreventionBytes = function discardEmulationPreventionBytes(data) {\n var length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength,\n newData; // Find all `Emulation Prevention Bytes`\n\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n } // Create a new array to hold the NAL unit data\n\n\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n emulationPreventionBytesPositions.shift();\n }\n\n newData[i] = data[sourceIndex];\n }\n\n return newData;\n}; // exports\n\n\nmodule.exports = {\n parseSei: parseSei,\n parseUserData: parseUserData,\n parseCaptionPackets: parseCaptionPackets,\n discardEmulationPreventionBytes: discardEmulationPreventionBytes,\n USER_DATA_REGISTERED_ITU_T_T35: USER_DATA_REGISTERED_ITU_T_T35\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdG9vbHMvY2FwdGlvbi1wYWNrZXQtcGFyc2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL3Rvb2xzL2NhcHRpb24tcGFja2V0LXBhcnNlci5qcz83Y2IxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogUmVhZHMgaW4tYmFuZCBjYXB0aW9uIGluZm9ybWF0aW9uIGZyb20gYSB2aWRlbyBlbGVtZW50YXJ5XG4gKiBzdHJlYW0uIENhcHRpb25zIG11c3QgZm9sbG93IHRoZSBDRUEtNzA4IHN0YW5kYXJkIGZvciBpbmplY3Rpb25cbiAqIGludG8gYW4gTVBFRy0yIHRyYW5zcG9ydCBzdHJlYW1zLlxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DRUEtNzA4XG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmdwby5nb3YvZmRzeXMvcGtnL0NGUi0yMDA3LXRpdGxlNDctdm9sMS9wZGYvQ0ZSLTIwMDctdGl0bGU0Ny12b2wxLXNlYzE1LTExOS5wZGZcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKSBOQUwgdW5pdHMgaGF2ZSBhXG4vLyBwYXlsb2FkIHR5cGUgZmllbGQgdG8gaW5kaWNhdGUgaG93IHRoZXkgYXJlIHRvIGJlXG4vLyBpbnRlcnByZXRlZC4gQ0VBUy03MDggY2FwdGlvbiBjb250ZW50IGlzIGFsd2F5cyB0cmFuc21pdHRlZCB3aXRoXG4vLyBwYXlsb2FkIHR5cGUgMHgwNC5cbnZhciBVU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzUgPSA0LFxuICAgIFJCU1BfVFJBSUxJTkdfQklUUyA9IDEyODtcblxuLyoqXG4gICogUGFyc2UgYSBzdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSkgTkFMIHVuaXQuXG4gICogU3RvcHMgcGFyc2luZyBvbmNlIGEgbWVzc2FnZSBvZiB0eXBlIElUVSBUIFQzNSBoYXMgYmVlbiBmb3VuZC5cbiAgKlxuICAqIEBwYXJhbSBieXRlcyB7VWludDhBcnJheX0gdGhlIGJ5dGVzIG9mIGEgU0VJIE5BTCB1bml0XG4gICogQHJldHVybiB7b2JqZWN0fSB0aGUgcGFyc2VkIFNFSSBwYXlsb2FkXG4gICogQHNlZSBSZWMuIElUVS1UIEguMjY0LCA3LjMuMi4zLjFcbiAgKi9cbnZhciBwYXJzZVNlaSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhclxuICAgIGkgPSAwLFxuICAgIHJlc3VsdCA9IHtcbiAgICAgIHBheWxvYWRUeXBlOiAtMSxcbiAgICAgIHBheWxvYWRTaXplOiAwXG4gICAgfSxcbiAgICBwYXlsb2FkVHlwZSA9IDAsXG4gICAgcGF5bG9hZFNpemUgPSAwO1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHNlaV9yYnNwIHBhcnNpbmcgZWFjaCBlYWNoIGluZGl2aWR1YWwgc2VpX21lc3NhZ2VcbiAgd2hpbGUgKGkgPCBieXRlcy5ieXRlTGVuZ3RoKSB7XG4gICAgLy8gc3RvcCBvbmNlIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgdGhlIHNlaV9yYnNwXG4gICAgaWYgKGJ5dGVzW2ldID09PSBSQlNQX1RSQUlMSU5HX0JJVFMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHBheWxvYWQgdHlwZVxuICAgIHdoaWxlIChieXRlc1tpXSA9PT0gMHhGRikge1xuICAgICAgcGF5bG9hZFR5cGUgKz0gMjU1O1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBwYXlsb2FkVHlwZSArPSBieXRlc1tpKytdO1xuXG4gICAgLy8gUGFyc2UgcGF5bG9hZCBzaXplXG4gICAgd2hpbGUgKGJ5dGVzW2ldID09PSAweEZGKSB7XG4gICAgICBwYXlsb2FkU2l6ZSArPSAyNTU7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHBheWxvYWRTaXplICs9IGJ5dGVzW2krK107XG5cbiAgICAvLyB0aGlzIHNlaV9tZXNzYWdlIGlzIGEgNjA4LzcwOCBjYXB0aW9uIHNvIHNhdmUgaXQgYW5kIGJyZWFrXG4gICAgLy8gdGhlcmUgY2FuIG9ubHkgZXZlciBiZSBvbmUgY2FwdGlvbiBtZXNzYWdlIGluIGEgZnJhbWUncyBzZWlcbiAgICBpZiAoIXJlc3VsdC5wYXlsb2FkICYmIHBheWxvYWRUeXBlID09PSBVU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzUpIHtcbiAgICAgIHJlc3VsdC5wYXlsb2FkVHlwZSA9IHBheWxvYWRUeXBlO1xuICAgICAgcmVzdWx0LnBheWxvYWRTaXplID0gcGF5bG9hZFNpemU7XG4gICAgICByZXN1bHQucGF5bG9hZCA9IGJ5dGVzLnN1YmFycmF5KGksIGkgKyBwYXlsb2FkU2l6ZSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBza2lwIHRoZSBwYXlsb2FkIGFuZCBwYXJzZSB0aGUgbmV4dCBtZXNzYWdlXG4gICAgaSArPSBwYXlsb2FkU2l6ZTtcbiAgICBwYXlsb2FkVHlwZSA9IDA7XG4gICAgcGF5bG9hZFNpemUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIHNlZSBBTlNJL1NDVEUgMTI4LTEgKDIwMTMpLCBzZWN0aW9uIDguMVxudmFyIHBhcnNlVXNlckRhdGEgPSBmdW5jdGlvbihzZWkpIHtcbiAgLy8gaXR1X3RfdDM1X2NvbnRyeV9jb2RlIG11c3QgYmUgMTgxIChVbml0ZWQgU3RhdGVzKSBmb3JcbiAgLy8gY2FwdGlvbnNcbiAgaWYgKHNlaS5wYXlsb2FkWzBdICE9PSAxODEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGl0dV90X3QzNV9wcm92aWRlcl9jb2RlIHNob3VsZCBiZSA0OSAoQVRTQykgZm9yIGNhcHRpb25zXG4gIGlmICgoKHNlaS5wYXlsb2FkWzFdIDw8IDgpIHwgc2VpLnBheWxvYWRbMl0pICE9PSA0OSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gdGhlIHVzZXJfaWRlbnRpZmllciBzaG91bGQgYmUgXCJHQTk0XCIgdG8gaW5kaWNhdGUgQVRTQzEgZGF0YVxuICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZShzZWkucGF5bG9hZFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VpLnBheWxvYWRbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlaS5wYXlsb2FkWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWkucGF5bG9hZFs2XSkgIT09ICdHQTk0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gZmluYWxseSwgdXNlcl9kYXRhX3R5cGVfY29kZSBzaG91bGQgYmUgMHgwMyBmb3IgY2FwdGlvbiBkYXRhXG4gIGlmIChzZWkucGF5bG9hZFs3XSAhPT0gMHgwMykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSB1c2VyX2RhdGFfdHlwZV9zdHJ1Y3R1cmUgYW5kIHN0cmlwIHRoZSB0cmFpbGluZ1xuICAvLyBtYXJrZXIgYml0c1xuICByZXR1cm4gc2VpLnBheWxvYWQuc3ViYXJyYXkoOCwgc2VpLnBheWxvYWQubGVuZ3RoIC0gMSk7XG59O1xuXG4vLyBzZWUgQ0VBLTcwOC1ELCBzZWN0aW9uIDQuNFxudmFyIHBhcnNlQ2FwdGlvblBhY2tldHMgPSBmdW5jdGlvbihwdHMsIHVzZXJEYXRhKSB7XG4gIHZhciByZXN1bHRzID0gW10sIGksIGNvdW50LCBvZmZzZXQsIGRhdGE7XG5cbiAgLy8gaWYgdGhpcyBpcyBqdXN0IGZpbGxlciwgcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmICghKHVzZXJEYXRhWzBdICYgMHg0MCkpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIHBhcnNlIG91dCB0aGUgY2NfZGF0YV8xIGFuZCBjY19kYXRhXzIgZmllbGRzXG4gIGNvdW50ID0gdXNlckRhdGFbMF0gJiAweDFmO1xuICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIG9mZnNldCA9IGkgKiAzO1xuICAgIGRhdGEgPSB7XG4gICAgICB0eXBlOiB1c2VyRGF0YVtvZmZzZXQgKyAyXSAmIDB4MDMsXG4gICAgICBwdHM6IHB0c1xuICAgIH07XG5cbiAgICAvLyBjYXB0dXJlIGNjIGRhdGEgd2hlbiBjY192YWxpZCBpcyAxXG4gICAgaWYgKHVzZXJEYXRhW29mZnNldCArIDJdICYgMHgwNCkge1xuICAgICAgZGF0YS5jY0RhdGEgPSAodXNlckRhdGFbb2Zmc2V0ICsgM10gPDwgOCkgfCB1c2VyRGF0YVtvZmZzZXQgKyA0XTtcbiAgICAgIHJlc3VsdHMucHVzaChkYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG52YXIgZGlzY2FyZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB2YXJcbiAgICAgIGxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aCxcbiAgICAgIGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucyA9IFtdLFxuICAgICAgaSA9IDEsXG4gICAgICBuZXdMZW5ndGgsIG5ld0RhdGE7XG5cbiAgICAvLyBGaW5kIGFsbCBgRW11bGF0aW9uIFByZXZlbnRpb24gQnl0ZXNgXG4gICAgd2hpbGUgKGkgPCBsZW5ndGggLSAyKSB7XG4gICAgICBpZiAoZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMHgwMykge1xuICAgICAgICBlbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNQb3NpdGlvbnMucHVzaChpICsgMik7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBFbXVsYXRpb24gUHJldmVudGlvbiBCeXRlcyB3ZXJlIGZvdW5kIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbFxuICAgIC8vIGFycmF5XG4gICAgaWYgKGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB0byBob2xkIHRoZSBOQUwgdW5pdCBkYXRhXG4gICAgbmV3TGVuZ3RoID0gbGVuZ3RoIC0gZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zLmxlbmd0aDtcbiAgICBuZXdEYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3TGVuZ3RoKTtcbiAgICB2YXIgc291cmNlSW5kZXggPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG5ld0xlbmd0aDsgc291cmNlSW5kZXgrKywgaSsrKSB7XG4gICAgICBpZiAoc291cmNlSW5kZXggPT09IGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9uc1swXSkge1xuICAgICAgICAvLyBTa2lwIHRoaXMgYnl0ZVxuICAgICAgICBzb3VyY2VJbmRleCsrO1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBwb3NpdGlvbiBpbmRleFxuICAgICAgICBlbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNQb3NpdGlvbnMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICAgIG5ld0RhdGFbaV0gPSBkYXRhW3NvdXJjZUluZGV4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RGF0YTtcbn07XG5cbi8vIGV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNlaTogcGFyc2VTZWksXG4gIHBhcnNlVXNlckRhdGE6IHBhcnNlVXNlckRhdGEsXG4gIHBhcnNlQ2FwdGlvblBhY2tldHM6IHBhcnNlQ2FwdGlvblBhY2tldHMsXG4gIGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXM6IGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMsXG4gIFVTRVJfREFUQV9SRUdJU1RFUkVEX0lUVV9UX1QzNTogVVNFUl9EQVRBX1JFR0lTVEVSRURfSVRVX1RfVDM1XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBYUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUZBO0FBRkE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBO0FBQ0E7QUFDQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5Q0E7QUFDQTtBQUNBO0FBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBVEE7QUFDQTtBQUNBO0FBV0E7QUFJQTtBQWpCQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQXRCQTtBQTBCQTtBQUNBO0FBQ0E7QUFEQTtBQTNCQTtBQUNBO0FBQ0E7QUE2QkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF2QkE7QUFDQTtBQXlCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBZEE7QUFrQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXBCQTtBQUNBO0FBQ0E7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF0Q0E7QUFDQTtBQUNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/tools/caption-packet-parser.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/tools/mp4-inspector.js": -/*!*********************************************************!*\ - !*** ../node_modules/mux.js/lib/tools/mp4-inspector.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Parse the internal MP4 structure into an equivalent javascript\n * object.\n */\n\n\nvar inspectMp4,\n _textifyMp,\n parseType = __webpack_require__(/*! ../mp4/probe */ \"../node_modules/mux.js/lib/mp4/probe.js\").parseType,\n parseMp4Date = function parseMp4Date(seconds) {\n return new Date(seconds * 1000 - 2082844800000);\n},\n parseSampleFlags = function parseSampleFlags(flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: flags[2] << 8 | flags[3]\n };\n},\n nalParse = function nalParse(avcStream) {\n var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = [],\n i,\n length;\n\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4; // bail if this doesn't appear to be an H264 stream\n\n if (length <= 0) {\n result.push('<span style=\\'color:red;\\'>MALFORMED DATA</span>');\n continue;\n }\n\n switch (avcStream[i] & 0x1F) {\n case 0x01:\n result.push('slice_layer_without_partitioning_rbsp');\n break;\n\n case 0x05:\n result.push('slice_layer_without_partitioning_rbsp_idr');\n break;\n\n case 0x06:\n result.push('sei_rbsp');\n break;\n\n case 0x07:\n result.push('seq_parameter_set_rbsp');\n break;\n\n case 0x08:\n result.push('pic_parameter_set_rbsp');\n break;\n\n case 0x09:\n result.push('access_unit_delimiter_rbsp');\n break;\n\n default:\n result.push('UNKNOWN NAL - ' + avcStream[i] & 0x1F);\n break;\n }\n }\n\n return result;\n},\n // registry of handlers for individual mp4 box types\nparse = {\n // codingname, not a first-class box type. stsd entries share the\n // same format as real boxes so the parsing infrastructure can be\n // shared\n avc1: function avc1(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n dataReferenceIndex: view.getUint16(6),\n width: view.getUint16(24),\n height: view.getUint16(26),\n horizresolution: view.getUint16(28) + view.getUint16(30) / 16,\n vertresolution: view.getUint16(32) + view.getUint16(34) / 16,\n frameCount: view.getUint16(40),\n depth: view.getUint16(74),\n config: inspectMp4(data.subarray(78, data.byteLength))\n };\n },\n avcC: function avcC(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n configurationVersion: data[0],\n avcProfileIndication: data[1],\n profileCompatibility: data[2],\n avcLevelIndication: data[3],\n lengthSizeMinusOne: data[4] & 0x03,\n sps: [],\n pps: []\n },\n numOfSequenceParameterSets = data[5] & 0x1f,\n numOfPictureParameterSets,\n nalSize,\n offset,\n i; // iterate past any SPSs\n\n offset = 6;\n\n for (i = 0; i < numOfSequenceParameterSets; i++) {\n nalSize = view.getUint16(offset);\n offset += 2;\n result.sps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));\n offset += nalSize;\n } // iterate past any PPSs\n\n\n numOfPictureParameterSets = data[offset];\n offset++;\n\n for (i = 0; i < numOfPictureParameterSets; i++) {\n nalSize = view.getUint16(offset);\n offset += 2;\n result.pps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));\n offset += nalSize;\n }\n\n return result;\n },\n btrt: function btrt(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n bufferSizeDB: view.getUint32(0),\n maxBitrate: view.getUint32(4),\n avgBitrate: view.getUint32(8)\n };\n },\n esds: function esds(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n esId: data[6] << 8 | data[7],\n streamPriority: data[8] & 0x1f,\n decoderConfig: {\n objectProfileIndication: data[11],\n streamType: data[12] >>> 2 & 0x3f,\n bufferSize: data[13] << 16 | data[14] << 8 | data[15],\n maxBitrate: data[16] << 24 | data[17] << 16 | data[18] << 8 | data[19],\n avgBitrate: data[20] << 24 | data[21] << 16 | data[22] << 8 | data[23],\n decoderConfigDescriptor: {\n tag: data[24],\n length: data[25],\n audioObjectType: data[26] >>> 3 & 0x1f,\n samplingFrequencyIndex: (data[26] & 0x07) << 1 | data[27] >>> 7 & 0x01,\n channelConfiguration: data[27] >>> 3 & 0x0f\n }\n }\n };\n },\n ftyp: function ftyp(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n majorBrand: parseType(data.subarray(0, 4)),\n minorVersion: view.getUint32(4),\n compatibleBrands: []\n },\n i = 8;\n\n while (i < data.byteLength) {\n result.compatibleBrands.push(parseType(data.subarray(i, i + 4)));\n i += 4;\n }\n\n return result;\n },\n dinf: function dinf(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n dref: function dref(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n dataReferences: inspectMp4(data.subarray(8))\n };\n },\n hdlr: function hdlr(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n handlerType: parseType(data.subarray(8, 12)),\n name: ''\n },\n i = 8; // parse out the name field\n\n for (i = 24; i < data.byteLength; i++) {\n if (data[i] === 0x00) {\n // the name field is null-terminated\n i++;\n break;\n }\n\n result.name += String.fromCharCode(data[i]);\n } // decode UTF-8 to javascript's internal representation\n // see http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html\n\n\n result.name = decodeURIComponent(escape(result.name));\n return result;\n },\n mdat: function mdat(data) {\n return {\n byteLength: data.byteLength,\n nals: nalParse(data)\n };\n },\n mdhd: function mdhd(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n language,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n language: ''\n };\n\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 4;\n result.timescale = view.getUint32(i);\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.timescale = view.getUint32(i);\n i += 4;\n result.duration = view.getUint32(i);\n }\n\n i += 4; // language is stored as an ISO-639-2/T code in an array of three 5-bit fields\n // each field is the packed difference between its ASCII value and 0x60\n\n language = view.getUint16(i);\n result.language += String.fromCharCode((language >> 10) + 0x60);\n result.language += String.fromCharCode(((language & 0x03e0) >> 5) + 0x60);\n result.language += String.fromCharCode((language & 0x1f) + 0x60);\n return result;\n },\n mdia: function mdia(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mfhd: function mfhd(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sequenceNumber: data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]\n };\n },\n minf: function minf(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n // codingname, not a first-class box type. stsd entries share the\n // same format as real boxes so the parsing infrastructure can be\n // shared\n mp4a: function mp4a(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n // 6 bytes reserved\n dataReferenceIndex: view.getUint16(6),\n // 4 + 4 bytes reserved\n channelcount: view.getUint16(16),\n samplesize: view.getUint16(18),\n // 2 bytes pre_defined\n // 2 bytes reserved\n samplerate: view.getUint16(24) + view.getUint16(26) / 65536\n }; // if there are more bytes to process, assume this is an ISO/IEC\n // 14496-14 MP4AudioSampleEntry and parse the ESDBox\n\n if (data.byteLength > 28) {\n result.streamDescriptor = inspectMp4(data.subarray(28))[0];\n }\n\n return result;\n },\n moof: function moof(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n moov: function moov(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mvex: function mvex(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mvhd: function mvhd(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4))\n };\n\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 4;\n result.timescale = view.getUint32(i);\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.timescale = view.getUint32(i);\n i += 4;\n result.duration = view.getUint32(i);\n }\n\n i += 4; // convert fixed-point, base 16 back to a number\n\n result.rate = view.getUint16(i) + view.getUint16(i + 2) / 16;\n i += 4;\n result.volume = view.getUint8(i) + view.getUint8(i + 1) / 8;\n i += 2;\n i += 2;\n i += 2 * 4;\n result.matrix = new Uint32Array(data.subarray(i, i + 9 * 4));\n i += 9 * 4;\n i += 6 * 4;\n result.nextTrackId = view.getUint32(i);\n return result;\n },\n pdin: function pdin(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n rate: view.getUint32(4),\n initialDelay: view.getUint32(8)\n };\n },\n sdtp: function sdtp(data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n i;\n\n for (i = 4; i < data.byteLength; i++) {\n result.samples.push({\n dependsOn: (data[i] & 0x30) >> 4,\n isDependedOn: (data[i] & 0x0c) >> 2,\n hasRedundancy: data[i] & 0x03\n });\n }\n\n return result;\n },\n sidx: function sidx(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n references: [],\n referenceId: view.getUint32(4),\n timescale: view.getUint32(8),\n earliestPresentationTime: view.getUint32(12),\n firstOffset: view.getUint32(16)\n },\n referenceCount = view.getUint16(22),\n i;\n\n for (i = 24; referenceCount; i += 12, referenceCount--) {\n result.references.push({\n referenceType: (data[i] & 0x80) >>> 7,\n referencedSize: view.getUint32(i) & 0x7FFFFFFF,\n subsegmentDuration: view.getUint32(i + 4),\n startsWithSap: !!(data[i + 8] & 0x80),\n sapType: (data[i + 8] & 0x70) >>> 4,\n sapDeltaTime: view.getUint32(i + 8) & 0x0FFFFFFF\n });\n }\n\n return result;\n },\n smhd: function smhd(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n balance: data[4] + data[5] / 256\n };\n },\n stbl: function stbl(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n stco: function stco(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n chunkOffsets: []\n },\n entryCount = view.getUint32(4),\n i;\n\n for (i = 8; entryCount; i += 4, entryCount--) {\n result.chunkOffsets.push(view.getUint32(i));\n }\n\n return result;\n },\n stsc: function stsc(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n entryCount = view.getUint32(4),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleToChunks: []\n },\n i;\n\n for (i = 8; entryCount; i += 12, entryCount--) {\n result.sampleToChunks.push({\n firstChunk: view.getUint32(i),\n samplesPerChunk: view.getUint32(i + 4),\n sampleDescriptionIndex: view.getUint32(i + 8)\n });\n }\n\n return result;\n },\n stsd: function stsd(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleDescriptions: inspectMp4(data.subarray(8))\n };\n },\n stsz: function stsz(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleSize: view.getUint32(4),\n entries: []\n },\n i;\n\n for (i = 12; i < data.byteLength; i += 4) {\n result.entries.push(view.getUint32(i));\n }\n\n return result;\n },\n stts: function stts(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n timeToSamples: []\n },\n entryCount = view.getUint32(4),\n i;\n\n for (i = 8; entryCount; i += 8, entryCount--) {\n result.timeToSamples.push({\n sampleCount: view.getUint32(i),\n sampleDelta: view.getUint32(i + 4)\n });\n }\n\n return result;\n },\n styp: function styp(data) {\n return parse.ftyp(data);\n },\n tfdt: function tfdt(data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n baseMediaDecodeTime: data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]\n };\n\n if (result.version === 1) {\n result.baseMediaDecodeTime *= Math.pow(2, 32);\n result.baseMediaDecodeTime += data[8] << 24 | data[9] << 16 | data[10] << 8 | data[11];\n }\n\n return result;\n },\n tfhd: function tfhd(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4)\n },\n baseDataOffsetPresent = result.flags[2] & 0x01,\n sampleDescriptionIndexPresent = result.flags[2] & 0x02,\n defaultSampleDurationPresent = result.flags[2] & 0x08,\n defaultSampleSizePresent = result.flags[2] & 0x10,\n defaultSampleFlagsPresent = result.flags[2] & 0x20,\n durationIsEmpty = result.flags[0] & 0x010000,\n defaultBaseIsMoof = result.flags[0] & 0x020000,\n i;\n i = 8;\n\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n // FIXME: should we read the full 64 bits?\n\n result.baseDataOffset = view.getUint32(12);\n i += 4;\n }\n\n if (sampleDescriptionIndexPresent) {\n result.sampleDescriptionIndex = view.getUint32(i);\n i += 4;\n }\n\n if (defaultSampleDurationPresent) {\n result.defaultSampleDuration = view.getUint32(i);\n i += 4;\n }\n\n if (defaultSampleSizePresent) {\n result.defaultSampleSize = view.getUint32(i);\n i += 4;\n }\n\n if (defaultSampleFlagsPresent) {\n result.defaultSampleFlags = view.getUint32(i);\n }\n\n if (durationIsEmpty) {\n result.durationIsEmpty = true;\n }\n\n if (!baseDataOffsetPresent && defaultBaseIsMoof) {\n result.baseDataOffsetIsMoof = true;\n }\n\n return result;\n },\n tkhd: function tkhd(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4))\n };\n\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n\n i += 4;\n result.trackId = view.getUint32(i);\n i += 4;\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.trackId = view.getUint32(i);\n i += 4;\n i += 4;\n result.duration = view.getUint32(i);\n }\n\n i += 4;\n i += 2 * 4;\n result.layer = view.getUint16(i);\n i += 2;\n result.alternateGroup = view.getUint16(i);\n i += 2; // convert fixed-point, base 16 back to a number\n\n result.volume = view.getUint8(i) + view.getUint8(i + 1) / 8;\n i += 2;\n i += 2;\n result.matrix = new Uint32Array(data.subarray(i, i + 9 * 4));\n i += 9 * 4;\n result.width = view.getUint16(i) + view.getUint16(i + 2) / 16;\n i += 4;\n result.height = view.getUint16(i) + view.getUint16(i + 2) / 16;\n return result;\n },\n traf: function traf(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n trak: function trak(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n trex: function trex(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4),\n defaultSampleDescriptionIndex: view.getUint32(8),\n defaultSampleDuration: view.getUint32(12),\n defaultSampleSize: view.getUint32(16),\n sampleDependsOn: data[20] & 0x03,\n sampleIsDependedOn: (data[21] & 0xc0) >> 6,\n sampleHasRedundancy: (data[21] & 0x30) >> 4,\n samplePaddingValue: (data[21] & 0x0e) >> 1,\n sampleIsDifferenceSample: !!(data[21] & 0x01),\n sampleDegradationPriority: view.getUint16(22)\n };\n },\n trun: function trun(data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n // Flag interpretation\n dataOffsetPresent = result.flags[2] & 0x01,\n // compare with 2nd byte of 0x1\n firstSampleFlagsPresent = result.flags[2] & 0x04,\n // compare with 2nd byte of 0x4\n sampleDurationPresent = result.flags[1] & 0x01,\n // compare with 2nd byte of 0x100\n sampleSizePresent = result.flags[1] & 0x02,\n // compare with 2nd byte of 0x200\n sampleFlagsPresent = result.flags[1] & 0x04,\n // compare with 2nd byte of 0x400\n sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,\n // compare with 2nd byte of 0x800\n sampleCount = view.getUint32(4),\n offset = 8,\n sample;\n\n if (dataOffsetPresent) {\n // 32 bit signed integer\n result.dataOffset = view.getInt32(offset);\n offset += 4;\n } // Overrides the flags for the first sample only. The order of\n // optional values will be: duration, size, compositionTimeOffset\n\n\n if (firstSampleFlagsPresent && sampleCount) {\n sample = {\n flags: parseSampleFlags(data.subarray(offset, offset + 4))\n };\n offset += 4;\n\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n\n if (sampleCompositionTimeOffsetPresent) {\n // Note: this should be a signed int if version is 1\n sample.compositionTimeOffset = view.getUint32(offset);\n offset += 4;\n }\n\n result.samples.push(sample);\n sampleCount--;\n }\n\n while (sampleCount--) {\n sample = {};\n\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n\n if (sampleFlagsPresent) {\n sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));\n offset += 4;\n }\n\n if (sampleCompositionTimeOffsetPresent) {\n // Note: this should be a signed int if version is 1\n sample.compositionTimeOffset = view.getUint32(offset);\n offset += 4;\n }\n\n result.samples.push(sample);\n }\n\n return result;\n },\n 'url ': function url(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4))\n };\n },\n vmhd: function vmhd(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n graphicsmode: view.getUint16(4),\n opcolor: new Uint16Array([view.getUint16(6), view.getUint16(8), view.getUint16(10)])\n };\n }\n};\n/**\n * Return a javascript array of box objects parsed from an ISO base\n * media file.\n * @param data {Uint8Array} the binary data of the media to be inspected\n * @return {array} a javascript array of potentially nested box objects\n */\n\n\ninspectMp4 = function inspectMp4(data) {\n var i = 0,\n result = [],\n view,\n size,\n type,\n end,\n box; // Convert data from Uint8Array to ArrayBuffer, to follow Dataview API\n\n var ab = new ArrayBuffer(data.length);\n var v = new Uint8Array(ab);\n\n for (var z = 0; z < data.length; ++z) {\n v[z] = data[z];\n }\n\n view = new DataView(ab);\n\n while (i < data.byteLength) {\n // parse box data\n size = view.getUint32(i);\n type = parseType(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength; // parse type-specific data\n\n box = (parse[type] || function (data) {\n return {\n data: data\n };\n })(data.subarray(i + 8, end));\n\n box.size = size;\n box.type = type; // store this box and move to the next\n\n result.push(box);\n i = end;\n }\n\n return result;\n};\n/**\n * Returns a textual representation of the javascript represtentation\n * of an MP4 file. You can use it as an alternative to\n * JSON.stringify() to compare inspected MP4s.\n * @param inspectedMp4 {array} the parsed array of boxes in an MP4\n * file\n * @param depth {number} (optional) the number of ancestor boxes of\n * the elements of inspectedMp4. Assumed to be zero if unspecified.\n * @return {string} a text representation of the parsed MP4\n */\n\n\n_textifyMp = function textifyMp4(inspectedMp4, depth) {\n var indent;\n depth = depth || 0;\n indent = new Array(depth * 2 + 1).join(' '); // iterate over all the boxes\n\n return inspectedMp4.map(function (box, index) {\n // list the box type first at the current indentation level\n return indent + box.type + '\\n' + // the type is already included and handle child boxes separately\n Object.keys(box).filter(function (key) {\n return key !== 'type' && key !== 'boxes'; // output all the box properties\n }).map(function (key) {\n var prefix = indent + ' ' + key + ': ',\n value = box[key]; // print out raw bytes as hexademical\n\n if (value instanceof Uint8Array || value instanceof Uint32Array) {\n var bytes = Array.prototype.slice.call(new Uint8Array(value.buffer, value.byteOffset, value.byteLength)).map(function (_byte) {\n return ' ' + ('00' + _byte.toString(16)).slice(-2);\n }).join('').match(/.{1,24}/g);\n\n if (!bytes) {\n return prefix + '<>';\n }\n\n if (bytes.length === 1) {\n return prefix + '<' + bytes.join('').slice(1) + '>';\n }\n\n return prefix + '<\\n' + bytes.map(function (line) {\n return indent + ' ' + line;\n }).join('\\n') + '\\n' + indent + ' >';\n } // stringify generic objects\n\n\n return prefix + JSON.stringify(value, null, 2).split('\\n').map(function (line, index) {\n if (index === 0) {\n return line;\n }\n\n return indent + ' ' + line;\n }).join('\\n');\n }).join('\\n') + ( // recursively textify the child boxes\n box.boxes ? '\\n' + _textifyMp(box.boxes, depth + 1) : '');\n }).join('\\n');\n};\n\nmodule.exports = {\n inspect: inspectMp4,\n textify: _textifyMp,\n parseTfdt: parse.tfdt,\n parseHdlr: parse.hdlr,\n parseTfhd: parse.tfhd,\n parseTrun: parse.trun,\n parseSidx: parse.sidx\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdG9vbHMvbXA0LWluc3BlY3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbXV4LmpzL2xpYi90b29scy9tcDQtaW5zcGVjdG9yLmpzP2QxNjYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtdXguanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEJyaWdodGNvdmVcbiAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqXG4gKiBQYXJzZSB0aGUgaW50ZXJuYWwgTVA0IHN0cnVjdHVyZSBpbnRvIGFuIGVxdWl2YWxlbnQgamF2YXNjcmlwdFxuICogb2JqZWN0LlxuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhclxuICBpbnNwZWN0TXA0LFxuICB0ZXh0aWZ5TXA0LFxuXG4gIHBhcnNlVHlwZSA9IHJlcXVpcmUoJy4uL21wNC9wcm9iZScpLnBhcnNlVHlwZSxcbiAgcGFyc2VNcDREYXRlID0gZnVuY3Rpb24oc2Vjb25kcykge1xuICAgIHJldHVybiBuZXcgRGF0ZShzZWNvbmRzICogMTAwMCAtIDIwODI4NDQ4MDAwMDApO1xuICB9LFxuICBwYXJzZVNhbXBsZUZsYWdzID0gZnVuY3Rpb24oZmxhZ3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMZWFkaW5nOiAoZmxhZ3NbMF0gJiAweDBjKSA+Pj4gMixcbiAgICAgIGRlcGVuZHNPbjogZmxhZ3NbMF0gJiAweDAzLFxuICAgICAgaXNEZXBlbmRlZE9uOiAoZmxhZ3NbMV0gJiAweGMwKSA+Pj4gNixcbiAgICAgIGhhc1JlZHVuZGFuY3k6IChmbGFnc1sxXSAmIDB4MzApID4+PiA0LFxuICAgICAgcGFkZGluZ1ZhbHVlOiAoZmxhZ3NbMV0gJiAweDBlKSA+Pj4gMSxcbiAgICAgIGlzTm9uU3luY1NhbXBsZTogZmxhZ3NbMV0gJiAweDAxLFxuICAgICAgZGVncmFkYXRpb25Qcmlvcml0eTogKGZsYWdzWzJdIDw8IDgpIHwgZmxhZ3NbM11cbiAgICB9O1xuICB9LFxuICBuYWxQYXJzZSA9IGZ1bmN0aW9uKGF2Y1N0cmVhbSkge1xuICAgIHZhclxuICAgICAgYXZjVmlldyA9IG5ldyBEYXRhVmlldyhhdmNTdHJlYW0uYnVmZmVyLCBhdmNTdHJlYW0uYnl0ZU9mZnNldCwgYXZjU3RyZWFtLmJ5dGVMZW5ndGgpLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBpLFxuICAgICAgbGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgKyA0IDwgYXZjU3RyZWFtLmxlbmd0aDsgaSArPSBsZW5ndGgpIHtcbiAgICAgIGxlbmd0aCA9IGF2Y1ZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgaSArPSA0O1xuXG4gICAgICAvLyBiYWlsIGlmIHRoaXMgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW4gSDI2NCBzdHJlYW1cbiAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICByZXN1bHQucHVzaCgnPHNwYW4gc3R5bGU9XFwnY29sb3I6cmVkO1xcJz5NQUxGT1JNRUQgREFUQTwvc3Bhbj4nKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoYXZjU3RyZWFtW2ldICYgMHgxRikge1xuICAgICAgY2FzZSAweDAxOlxuICAgICAgICByZXN1bHQucHVzaCgnc2xpY2VfbGF5ZXJfd2l0aG91dF9wYXJ0aXRpb25pbmdfcmJzcCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMHgwNTpcbiAgICAgICAgcmVzdWx0LnB1c2goJ3NsaWNlX2xheWVyX3dpdGhvdXRfcGFydGl0aW9uaW5nX3Jic3BfaWRyJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAweDA2OlxuICAgICAgICByZXN1bHQucHVzaCgnc2VpX3Jic3AnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDB4MDc6XG4gICAgICAgIHJlc3VsdC5wdXNoKCdzZXFfcGFyYW1ldGVyX3NldF9yYnNwJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAweDA4OlxuICAgICAgICByZXN1bHQucHVzaCgncGljX3BhcmFtZXRlcl9zZXRfcmJzcCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMHgwOTpcbiAgICAgICAgcmVzdWx0LnB1c2goJ2FjY2Vzc191bml0X2RlbGltaXRlcl9yYnNwJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0LnB1c2goJ1VOS05PV04gTkFMIC0gJyArIGF2Y1N0cmVhbVtpXSAmIDB4MUYpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcblxuICAvLyByZWdpc3RyeSBvZiBoYW5kbGVycyBmb3IgaW5kaXZpZHVhbCBtcDQgYm94IHR5cGVzXG4gIHBhcnNlID0ge1xuICAgIC8vIGNvZGluZ25hbWUsIG5vdCBhIGZpcnN0LWNsYXNzIGJveCB0eXBlLiBzdHNkIGVudHJpZXMgc2hhcmUgdGhlXG4gICAgLy8gc2FtZSBmb3JtYXQgYXMgcmVhbCBib3hlcyBzbyB0aGUgcGFyc2luZyBpbmZyYXN0cnVjdHVyZSBjYW4gYmVcbiAgICAvLyBzaGFyZWRcbiAgICBhdmMxOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YVJlZmVyZW5jZUluZGV4OiB2aWV3LmdldFVpbnQxNig2KSxcbiAgICAgICAgd2lkdGg6IHZpZXcuZ2V0VWludDE2KDI0KSxcbiAgICAgICAgaGVpZ2h0OiB2aWV3LmdldFVpbnQxNigyNiksXG4gICAgICAgIGhvcml6cmVzb2x1dGlvbjogdmlldy5nZXRVaW50MTYoMjgpICsgKHZpZXcuZ2V0VWludDE2KDMwKSAvIDE2KSxcbiAgICAgICAgdmVydHJlc29sdXRpb246IHZpZXcuZ2V0VWludDE2KDMyKSArICh2aWV3LmdldFVpbnQxNigzNCkgLyAxNiksXG4gICAgICAgIGZyYW1lQ291bnQ6IHZpZXcuZ2V0VWludDE2KDQwKSxcbiAgICAgICAgZGVwdGg6IHZpZXcuZ2V0VWludDE2KDc0KSxcbiAgICAgICAgY29uZmlnOiBpbnNwZWN0TXA0KGRhdGEuc3ViYXJyYXkoNzgsIGRhdGEuYnl0ZUxlbmd0aCkpXG4gICAgICB9O1xuICAgIH0sXG4gICAgYXZjQzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyXG4gICAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb25WZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICAgIGF2Y1Byb2ZpbGVJbmRpY2F0aW9uOiBkYXRhWzFdLFxuICAgICAgICAgIHByb2ZpbGVDb21wYXRpYmlsaXR5OiBkYXRhWzJdLFxuICAgICAgICAgIGF2Y0xldmVsSW5kaWNhdGlvbjogZGF0YVszXSxcbiAgICAgICAgICBsZW5ndGhTaXplTWludXNPbmU6IGRhdGFbNF0gJiAweDAzLFxuICAgICAgICAgIHNwczogW10sXG4gICAgICAgICAgcHBzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBudW1PZlNlcXVlbmNlUGFyYW1ldGVyU2V0cyA9IGRhdGFbNV0gJiAweDFmLFxuICAgICAgICBudW1PZlBpY3R1cmVQYXJhbWV0ZXJTZXRzLFxuICAgICAgICBuYWxTaXplLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGk7XG5cbiAgICAgIC8vIGl0ZXJhdGUgcGFzdCBhbnkgU1BTc1xuICAgICAgb2Zmc2V0ID0gNjtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1PZlNlcXVlbmNlUGFyYW1ldGVyU2V0czsgaSsrKSB7XG4gICAgICAgIG5hbFNpemUgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgcmVzdWx0LnNwcy5wdXNoKG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBuYWxTaXplKSkpO1xuICAgICAgICBvZmZzZXQgKz0gbmFsU2l6ZTtcbiAgICAgIH1cbiAgICAgIC8vIGl0ZXJhdGUgcGFzdCBhbnkgUFBTc1xuICAgICAgbnVtT2ZQaWN0dXJlUGFyYW1ldGVyU2V0cyA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG51bU9mUGljdHVyZVBhcmFtZXRlclNldHM7IGkrKykge1xuICAgICAgICBuYWxTaXplID0gdmlldy5nZXRVaW50MTYob2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgIHJlc3VsdC5wcHMucHVzaChuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbmFsU2l6ZSkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IG5hbFNpemU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgYnRydDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1ZmZlclNpemVEQjogdmlldy5nZXRVaW50MzIoMCksXG4gICAgICAgIG1heEJpdHJhdGU6IHZpZXcuZ2V0VWludDMyKDQpLFxuICAgICAgICBhdmdCaXRyYXRlOiB2aWV3LmdldFVpbnQzMig4KVxuICAgICAgfTtcbiAgICB9LFxuICAgIGVzZHM6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgZXNJZDogKGRhdGFbNl0gPDwgOCkgfCBkYXRhWzddLFxuICAgICAgICBzdHJlYW1Qcmlvcml0eTogZGF0YVs4XSAmIDB4MWYsXG4gICAgICAgIGRlY29kZXJDb25maWc6IHtcbiAgICAgICAgICBvYmplY3RQcm9maWxlSW5kaWNhdGlvbjogZGF0YVsxMV0sXG4gICAgICAgICAgc3RyZWFtVHlwZTogKGRhdGFbMTJdID4+PiAyKSAmIDB4M2YsXG4gICAgICAgICAgYnVmZmVyU2l6ZTogKGRhdGFbMTNdIDw8IDE2KSB8IChkYXRhWzE0XSA8PCA4KSB8IGRhdGFbMTVdLFxuICAgICAgICAgIG1heEJpdHJhdGU6IChkYXRhWzE2XSA8PCAyNCkgfFxuICAgICAgICAgICAgKGRhdGFbMTddIDw8IDE2KSB8XG4gICAgICAgICAgICAoZGF0YVsxOF0gPDwgIDgpIHxcbiAgICAgICAgICAgIGRhdGFbMTldLFxuICAgICAgICAgIGF2Z0JpdHJhdGU6IChkYXRhWzIwXSA8PCAyNCkgfFxuICAgICAgICAgICAgKGRhdGFbMjFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoZGF0YVsyMl0gPDwgIDgpIHxcbiAgICAgICAgICAgIGRhdGFbMjNdLFxuICAgICAgICAgIGRlY29kZXJDb25maWdEZXNjcmlwdG9yOiB7XG4gICAgICAgICAgICB0YWc6IGRhdGFbMjRdLFxuICAgICAgICAgICAgbGVuZ3RoOiBkYXRhWzI1XSxcbiAgICAgICAgICAgIGF1ZGlvT2JqZWN0VHlwZTogKGRhdGFbMjZdID4+PiAzKSAmIDB4MWYsXG4gICAgICAgICAgICBzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4OiAoKGRhdGFbMjZdICYgMHgwNykgPDwgMSkgfFxuICAgICAgICAgICAgICAoKGRhdGFbMjddID4+PiA3KSAmIDB4MDEpLFxuICAgICAgICAgICAgY2hhbm5lbENvbmZpZ3VyYXRpb246IChkYXRhWzI3XSA+Pj4gMykgJiAweDBmXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgZnR5cDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyXG4gICAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIG1ham9yQnJhbmQ6IHBhcnNlVHlwZShkYXRhLnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICBtaW5vclZlcnNpb246IHZpZXcuZ2V0VWludDMyKDQpLFxuICAgICAgICAgIGNvbXBhdGlibGVCcmFuZHM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGkgPSA4O1xuICAgICAgd2hpbGUgKGkgPCBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LmNvbXBhdGlibGVCcmFuZHMucHVzaChwYXJzZVR5cGUoZGF0YS5zdWJhcnJheShpLCBpICsgNCkpKTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGRpbmY6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveGVzOiBpbnNwZWN0TXA0KGRhdGEpXG4gICAgICB9O1xuICAgIH0sXG4gICAgZHJlZjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogZGF0YVswXSxcbiAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICBkYXRhUmVmZXJlbmNlczogaW5zcGVjdE1wNChkYXRhLnN1YmFycmF5KDgpKVxuICAgICAgfTtcbiAgICB9LFxuICAgIGhkbHI6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhclxuICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCksXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiB2aWV3LmdldFVpbnQ4KDApLFxuICAgICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgICBoYW5kbGVyVHlwZTogcGFyc2VUeXBlKGRhdGEuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICBuYW1lOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBpID0gODtcblxuICAgICAgLy8gcGFyc2Ugb3V0IHRoZSBuYW1lIGZpZWxkXG4gICAgICBmb3IgKGkgPSAyNDsgaSA8IGRhdGEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDAwKSB7XG4gICAgICAgICAgLy8gdGhlIG5hbWUgZmllbGQgaXMgbnVsbC10ZXJtaW5hdGVkXG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICAvLyBkZWNvZGUgVVRGLTggdG8gamF2YXNjcmlwdCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgICAvLyBzZWUgaHR0cDovL2VjbWFuYXV0LmJsb2dzcG90LmNvbS8yMDA2LzA3L2VuY29kaW5nLWRlY29kaW5nLXV0ZjgtaW4tamF2YXNjcmlwdC5odG1sXG4gICAgICByZXN1bHQubmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocmVzdWx0Lm5hbWUpKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIG1kYXQ6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ5dGVMZW5ndGg6IGRhdGEuYnl0ZUxlbmd0aCxcbiAgICAgICAgbmFsczogbmFsUGFyc2UoZGF0YSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBtZGhkOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXJcbiAgICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLFxuICAgICAgICBpID0gNCxcbiAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiB2aWV3LmdldFVpbnQ4KDApLFxuICAgICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgICBsYW5ndWFnZTogJydcbiAgICAgICAgfTtcbiAgICAgIGlmIChyZXN1bHQudmVyc2lvbiA9PT0gMSkge1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC5jcmVhdGlvblRpbWUgPSBwYXJzZU1wNERhdGUodmlldy5nZXRVaW50MzIoaSkpOyAvLyB0cnVuY2F0aW5nIHRvcCA0IGJ5dGVzXG4gICAgICAgIGkgKz0gODtcbiAgICAgICAgcmVzdWx0Lm1vZGlmaWNhdGlvblRpbWUgPSBwYXJzZU1wNERhdGUodmlldy5nZXRVaW50MzIoaSkpOyAvLyB0cnVuY2F0aW5nIHRvcCA0IGJ5dGVzXG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgcmVzdWx0LnRpbWVzY2FsZSA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgICBpICs9IDg7XG4gICAgICAgIHJlc3VsdC5kdXJhdGlvbiA9IHZpZXcuZ2V0VWludDMyKGkpOyAvLyB0cnVuY2F0aW5nIHRvcCA0IGJ5dGVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuY3JlYXRpb25UaW1lID0gcGFyc2VNcDREYXRlKHZpZXcuZ2V0VWludDMyKGkpKTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICByZXN1bHQubW9kaWZpY2F0aW9uVGltZSA9IHBhcnNlTXA0RGF0ZSh2aWV3LmdldFVpbnQzMihpKSk7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgcmVzdWx0LnRpbWVzY2FsZSA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC5kdXJhdGlvbiA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgfVxuICAgICAgaSArPSA0O1xuICAgICAgLy8gbGFuZ3VhZ2UgaXMgc3RvcmVkIGFzIGFuIElTTy02MzktMi9UIGNvZGUgaW4gYW4gYXJyYXkgb2YgdGhyZWUgNS1iaXQgZmllbGRzXG4gICAgICAvLyBlYWNoIGZpZWxkIGlzIHRoZSBwYWNrZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIGl0cyBBU0NJSSB2YWx1ZSBhbmQgMHg2MFxuICAgICAgbGFuZ3VhZ2UgPSB2aWV3LmdldFVpbnQxNihpKTtcbiAgICAgIHJlc3VsdC5sYW5ndWFnZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChsYW5ndWFnZSA+PiAxMCkgKyAweDYwKTtcbiAgICAgIHJlc3VsdC5sYW5ndWFnZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgobGFuZ3VhZ2UgJiAweDAzZTApID4+IDUpICsgMHg2MCk7XG4gICAgICByZXN1bHQubGFuZ3VhZ2UgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgobGFuZ3VhZ2UgJiAweDFmKSArIDB4NjApO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgbWRpYTogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm94ZXM6IGluc3BlY3RNcDQoZGF0YSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBtZmhkOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgIHNlcXVlbmNlTnVtYmVyOiAoZGF0YVs0XSA8PCAyNCkgfFxuICAgICAgICAgIChkYXRhWzVdIDw8IDE2KSB8XG4gICAgICAgICAgKGRhdGFbNl0gPDwgOCkgfFxuICAgICAgICAgIChkYXRhWzddKVxuICAgICAgfTtcbiAgICB9LFxuICAgIG1pbmY6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveGVzOiBpbnNwZWN0TXA0KGRhdGEpXG4gICAgICB9O1xuICAgIH0sXG4gICAgLy8gY29kaW5nbmFtZSwgbm90IGEgZmlyc3QtY2xhc3MgYm94IHR5cGUuIHN0c2QgZW50cmllcyBzaGFyZSB0aGVcbiAgICAvLyBzYW1lIGZvcm1hdCBhcyByZWFsIGJveGVzIHNvIHRoZSBwYXJzaW5nIGluZnJhc3RydWN0dXJlIGNhbiBiZVxuICAgIC8vIHNoYXJlZFxuICAgIG1wNGE6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhclxuICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCksXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAvLyA2IGJ5dGVzIHJlc2VydmVkXG4gICAgICAgICAgZGF0YVJlZmVyZW5jZUluZGV4OiB2aWV3LmdldFVpbnQxNig2KSxcbiAgICAgICAgICAvLyA0ICsgNCBieXRlcyByZXNlcnZlZFxuICAgICAgICAgIGNoYW5uZWxjb3VudDogdmlldy5nZXRVaW50MTYoMTYpLFxuICAgICAgICAgIHNhbXBsZXNpemU6IHZpZXcuZ2V0VWludDE2KDE4KSxcbiAgICAgICAgICAvLyAyIGJ5dGVzIHByZV9kZWZpbmVkXG4gICAgICAgICAgLy8gMiBieXRlcyByZXNlcnZlZFxuICAgICAgICAgIHNhbXBsZXJhdGU6IHZpZXcuZ2V0VWludDE2KDI0KSArICh2aWV3LmdldFVpbnQxNigyNikgLyA2NTUzNilcbiAgICAgICAgfTtcblxuICAgICAgLy8gaWYgdGhlcmUgYXJlIG1vcmUgYnl0ZXMgdG8gcHJvY2VzcywgYXNzdW1lIHRoaXMgaXMgYW4gSVNPL0lFQ1xuICAgICAgLy8gMTQ0OTYtMTQgTVA0QXVkaW9TYW1wbGVFbnRyeSBhbmQgcGFyc2UgdGhlIEVTREJveFxuICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IDI4KSB7XG4gICAgICAgIHJlc3VsdC5zdHJlYW1EZXNjcmlwdG9yID0gaW5zcGVjdE1wNChkYXRhLnN1YmFycmF5KDI4KSlbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgbW9vZjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm94ZXM6IGluc3BlY3RNcDQoZGF0YSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb292OiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib3hlczogaW5zcGVjdE1wNChkYXRhKVxuICAgICAgfTtcbiAgICB9LFxuICAgIG12ZXg6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveGVzOiBpbnNwZWN0TXA0KGRhdGEpXG4gICAgICB9O1xuICAgIH0sXG4gICAgbXZoZDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyXG4gICAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgaSA9IDQsXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiB2aWV3LmdldFVpbnQ4KDApLFxuICAgICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKVxuICAgICAgICB9O1xuXG4gICAgICBpZiAocmVzdWx0LnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICByZXN1bHQuY3JlYXRpb25UaW1lID0gcGFyc2VNcDREYXRlKHZpZXcuZ2V0VWludDMyKGkpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgICBpICs9IDg7XG4gICAgICAgIHJlc3VsdC5tb2RpZmljYXRpb25UaW1lID0gcGFyc2VNcDREYXRlKHZpZXcuZ2V0VWludDMyKGkpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC50aW1lc2NhbGUgPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAgICAgaSArPSA4O1xuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSB2aWV3LmdldFVpbnQzMihpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LmNyZWF0aW9uVGltZSA9IHBhcnNlTXA0RGF0ZSh2aWV3LmdldFVpbnQzMihpKSk7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgcmVzdWx0Lm1vZGlmaWNhdGlvblRpbWUgPSBwYXJzZU1wNERhdGUodmlldy5nZXRVaW50MzIoaSkpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC50aW1lc2NhbGUgPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAgIH1cbiAgICAgIGkgKz0gNDtcblxuICAgICAgLy8gY29udmVydCBmaXhlZC1wb2ludCwgYmFzZSAxNiBiYWNrIHRvIGEgbnVtYmVyXG4gICAgICByZXN1bHQucmF0ZSA9IHZpZXcuZ2V0VWludDE2KGkpICsgKHZpZXcuZ2V0VWludDE2KGkgKyAyKSAvIDE2KTtcbiAgICAgIGkgKz0gNDtcbiAgICAgIHJlc3VsdC52b2x1bWUgPSB2aWV3LmdldFVpbnQ4KGkpICsgKHZpZXcuZ2V0VWludDgoaSArIDEpIC8gOCk7XG4gICAgICBpICs9IDI7XG4gICAgICBpICs9IDI7XG4gICAgICBpICs9IDIgKiA0O1xuICAgICAgcmVzdWx0Lm1hdHJpeCA9IG5ldyBVaW50MzJBcnJheShkYXRhLnN1YmFycmF5KGksIGkgKyAoOSAqIDQpKSk7XG4gICAgICBpICs9IDkgKiA0O1xuICAgICAgaSArPSA2ICogNDtcbiAgICAgIHJlc3VsdC5uZXh0VHJhY2tJZCA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHBkaW46IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiB2aWV3LmdldFVpbnQ4KDApLFxuICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgIHJhdGU6IHZpZXcuZ2V0VWludDMyKDQpLFxuICAgICAgICBpbml0aWFsRGVsYXk6IHZpZXcuZ2V0VWludDMyKDgpXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2R0cDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgICBzYW1wbGVzOiBbXVxuICAgICAgICB9LCBpO1xuXG4gICAgICBmb3IgKGkgPSA0OyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnNhbXBsZXMucHVzaCh7XG4gICAgICAgICAgZGVwZW5kc09uOiAoZGF0YVtpXSAmIDB4MzApID4+IDQsXG4gICAgICAgICAgaXNEZXBlbmRlZE9uOiAoZGF0YVtpXSAmIDB4MGMpID4+IDIsXG4gICAgICAgICAgaGFzUmVkdW5kYW5jeTogZGF0YVtpXSAmIDB4MDNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc2lkeDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogW10sXG4gICAgICAgICAgICByZWZlcmVuY2VJZDogdmlldy5nZXRVaW50MzIoNCksXG4gICAgICAgICAgICB0aW1lc2NhbGU6IHZpZXcuZ2V0VWludDMyKDgpLFxuICAgICAgICAgICAgZWFybGllc3RQcmVzZW50YXRpb25UaW1lOiB2aWV3LmdldFVpbnQzMigxMiksXG4gICAgICAgICAgICBmaXJzdE9mZnNldDogdmlldy5nZXRVaW50MzIoMTYpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWZlcmVuY2VDb3VudCA9IHZpZXcuZ2V0VWludDE2KDIyKSxcbiAgICAgICAgICBpO1xuXG4gICAgICBmb3IgKGkgPSAyNDsgcmVmZXJlbmNlQ291bnQ7IGkgKz0gMTIsIHJlZmVyZW5jZUNvdW50LS0pIHtcbiAgICAgICAgcmVzdWx0LnJlZmVyZW5jZXMucHVzaCh7XG4gICAgICAgICAgcmVmZXJlbmNlVHlwZTogKGRhdGFbaV0gJiAweDgwKSA+Pj4gNyxcbiAgICAgICAgICByZWZlcmVuY2VkU2l6ZTogdmlldy5nZXRVaW50MzIoaSkgJiAweDdGRkZGRkZGLFxuICAgICAgICAgIHN1YnNlZ21lbnREdXJhdGlvbjogdmlldy5nZXRVaW50MzIoaSArIDQpLFxuICAgICAgICAgIHN0YXJ0c1dpdGhTYXA6ICEhKGRhdGFbaSArIDhdICYgMHg4MCksXG4gICAgICAgICAgc2FwVHlwZTogKGRhdGFbaSArIDhdICYgMHg3MCkgPj4+IDQsXG4gICAgICAgICAgc2FwRGVsdGFUaW1lOiB2aWV3LmdldFVpbnQzMihpICsgOCkgJiAweDBGRkZGRkZGXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc21oZDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogZGF0YVswXSxcbiAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICBiYWxhbmNlOiBkYXRhWzRdICsgKGRhdGFbNV0gLyAyNTYpXG4gICAgICB9O1xuICAgIH0sXG4gICAgc3RibDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm94ZXM6IGluc3BlY3RNcDQoZGF0YSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBzdGNvOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXJcbiAgICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLFxuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgdmVyc2lvbjogZGF0YVswXSxcbiAgICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgICAgY2h1bmtPZmZzZXRzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBlbnRyeUNvdW50ID0gdmlldy5nZXRVaW50MzIoNCksXG4gICAgICAgIGk7XG4gICAgICBmb3IgKGkgPSA4OyBlbnRyeUNvdW50OyBpICs9IDQsIGVudHJ5Q291bnQtLSkge1xuICAgICAgICByZXN1bHQuY2h1bmtPZmZzZXRzLnB1c2godmlldy5nZXRVaW50MzIoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHN0c2M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhclxuICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCksXG4gICAgICAgIGVudHJ5Q291bnQgPSB2aWV3LmdldFVpbnQzMig0KSxcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICAgIHNhbXBsZVRvQ2h1bmtzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBpO1xuICAgICAgZm9yIChpID0gODsgZW50cnlDb3VudDsgaSArPSAxMiwgZW50cnlDb3VudC0tKSB7XG4gICAgICAgIHJlc3VsdC5zYW1wbGVUb0NodW5rcy5wdXNoKHtcbiAgICAgICAgICBmaXJzdENodW5rOiB2aWV3LmdldFVpbnQzMihpKSxcbiAgICAgICAgICBzYW1wbGVzUGVyQ2h1bms6IHZpZXcuZ2V0VWludDMyKGkgKyA0KSxcbiAgICAgICAgICBzYW1wbGVEZXNjcmlwdGlvbkluZGV4OiB2aWV3LmdldFVpbnQzMihpICsgOClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc3RzZDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogZGF0YVswXSxcbiAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICBzYW1wbGVEZXNjcmlwdGlvbnM6IGluc3BlY3RNcDQoZGF0YS5zdWJhcnJheSg4KSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBzdHN6OiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXJcbiAgICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLFxuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgdmVyc2lvbjogZGF0YVswXSxcbiAgICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgICAgc2FtcGxlU2l6ZTogdmlldy5nZXRVaW50MzIoNCksXG4gICAgICAgICAgZW50cmllczogW11cbiAgICAgICAgfSxcbiAgICAgICAgaTtcbiAgICAgIGZvciAoaSA9IDEyOyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgcmVzdWx0LmVudHJpZXMucHVzaCh2aWV3LmdldFVpbnQzMihpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc3R0czogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyXG4gICAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICAgIHRpbWVUb1NhbXBsZXM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJ5Q291bnQgPSB2aWV3LmdldFVpbnQzMig0KSxcbiAgICAgICAgaTtcblxuICAgICAgZm9yIChpID0gODsgZW50cnlDb3VudDsgaSArPSA4LCBlbnRyeUNvdW50LS0pIHtcbiAgICAgICAgcmVzdWx0LnRpbWVUb1NhbXBsZXMucHVzaCh7XG4gICAgICAgICAgc2FtcGxlQ291bnQ6IHZpZXcuZ2V0VWludDMyKGkpLFxuICAgICAgICAgIHNhbXBsZURlbHRhOiB2aWV3LmdldFVpbnQzMihpICsgNClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc3R5cDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHBhcnNlLmZ0eXAoZGF0YSk7XG4gICAgfSxcbiAgICB0ZmR0OiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgIGJhc2VNZWRpYURlY29kZVRpbWU6IGRhdGFbNF0gPDwgMjQgfCBkYXRhWzVdIDw8IDE2IHwgZGF0YVs2XSA8PCA4IHwgZGF0YVs3XVxuICAgICAgfTtcbiAgICAgIGlmIChyZXN1bHQudmVyc2lvbiA9PT0gMSkge1xuICAgICAgICByZXN1bHQuYmFzZU1lZGlhRGVjb2RlVGltZSAqPSBNYXRoLnBvdygyLCAzMik7XG4gICAgICAgIHJlc3VsdC5iYXNlTWVkaWFEZWNvZGVUaW1lICs9IGRhdGFbOF0gPDwgMjQgfCBkYXRhWzldIDw8IDE2IHwgZGF0YVsxMF0gPDwgOCB8IGRhdGFbMTFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHRmaGQ6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhclxuICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCksXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgICB0cmFja0lkOiB2aWV3LmdldFVpbnQzMig0KVxuICAgICAgICB9LFxuICAgICAgICBiYXNlRGF0YU9mZnNldFByZXNlbnQgPSByZXN1bHQuZmxhZ3NbMl0gJiAweDAxLFxuICAgICAgICBzYW1wbGVEZXNjcmlwdGlvbkluZGV4UHJlc2VudCA9IHJlc3VsdC5mbGFnc1syXSAmIDB4MDIsXG4gICAgICAgIGRlZmF1bHRTYW1wbGVEdXJhdGlvblByZXNlbnQgPSByZXN1bHQuZmxhZ3NbMl0gJiAweDA4LFxuICAgICAgICBkZWZhdWx0U2FtcGxlU2l6ZVByZXNlbnQgPSByZXN1bHQuZmxhZ3NbMl0gJiAweDEwLFxuICAgICAgICBkZWZhdWx0U2FtcGxlRmxhZ3NQcmVzZW50ID0gcmVzdWx0LmZsYWdzWzJdICYgMHgyMCxcbiAgICAgICAgZHVyYXRpb25Jc0VtcHR5ID0gcmVzdWx0LmZsYWdzWzBdICYgMHgwMTAwMDAsXG4gICAgICAgIGRlZmF1bHRCYXNlSXNNb29mID0gIHJlc3VsdC5mbGFnc1swXSAmIDB4MDIwMDAwLFxuICAgICAgICBpO1xuXG4gICAgICBpID0gODtcbiAgICAgIGlmIChiYXNlRGF0YU9mZnNldFByZXNlbnQpIHtcbiAgICAgICAgaSArPSA0OyAvLyB0cnVuY2F0ZSB0b3AgNCBieXRlc1xuICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHJlYWQgdGhlIGZ1bGwgNjQgYml0cz9cbiAgICAgICAgcmVzdWx0LmJhc2VEYXRhT2Zmc2V0ID0gdmlldy5nZXRVaW50MzIoMTIpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICB9XG4gICAgICBpZiAoc2FtcGxlRGVzY3JpcHRpb25JbmRleFByZXNlbnQpIHtcbiAgICAgICAgcmVzdWx0LnNhbXBsZURlc2NyaXB0aW9uSW5kZXggPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRTYW1wbGVEdXJhdGlvblByZXNlbnQpIHtcbiAgICAgICAgcmVzdWx0LmRlZmF1bHRTYW1wbGVEdXJhdGlvbiA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFNhbXBsZVNpemVQcmVzZW50KSB7XG4gICAgICAgIHJlc3VsdC5kZWZhdWx0U2FtcGxlU2l6ZSA9IHZpZXcuZ2V0VWludDMyKGkpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFNhbXBsZUZsYWdzUHJlc2VudCkge1xuICAgICAgICByZXN1bHQuZGVmYXVsdFNhbXBsZUZsYWdzID0gdmlldy5nZXRVaW50MzIoaSk7XG4gICAgICB9XG4gICAgICBpZiAoZHVyYXRpb25Jc0VtcHR5KSB7XG4gICAgICAgIHJlc3VsdC5kdXJhdGlvbklzRW1wdHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFiYXNlRGF0YU9mZnNldFByZXNlbnQgJiYgZGVmYXVsdEJhc2VJc01vb2YpIHtcbiAgICAgICAgcmVzdWx0LmJhc2VEYXRhT2Zmc2V0SXNNb29mID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICB0a2hkOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXJcbiAgICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLFxuICAgICAgICBpID0gNCxcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIHZlcnNpb246IHZpZXcuZ2V0VWludDgoMCksXG4gICAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpXG4gICAgICAgIH07XG4gICAgICBpZiAocmVzdWx0LnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICByZXN1bHQuY3JlYXRpb25UaW1lID0gcGFyc2VNcDREYXRlKHZpZXcuZ2V0VWludDMyKGkpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgICBpICs9IDg7XG4gICAgICAgIHJlc3VsdC5tb2RpZmljYXRpb25UaW1lID0gcGFyc2VNcDREYXRlKHZpZXcuZ2V0VWludDMyKGkpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC50cmFja0lkID0gdmlldy5nZXRVaW50MzIoaSk7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgaSArPSA4O1xuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSB2aWV3LmdldFVpbnQzMihpKTsgLy8gdHJ1bmNhdGluZyB0b3AgNCBieXRlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LmNyZWF0aW9uVGltZSA9IHBhcnNlTXA0RGF0ZSh2aWV3LmdldFVpbnQzMihpKSk7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgcmVzdWx0Lm1vZGlmaWNhdGlvblRpbWUgPSBwYXJzZU1wNERhdGUodmlldy5nZXRVaW50MzIoaSkpO1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIHJlc3VsdC50cmFja0lkID0gdmlldy5nZXRVaW50MzIoaSk7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSB2aWV3LmdldFVpbnQzMihpKTtcbiAgICAgIH1cbiAgICAgIGkgKz0gNDtcbiAgICAgIGkgKz0gMiAqIDQ7XG4gICAgICByZXN1bHQubGF5ZXIgPSB2aWV3LmdldFVpbnQxNihpKTtcbiAgICAgIGkgKz0gMjtcbiAgICAgIHJlc3VsdC5hbHRlcm5hdGVHcm91cCA9IHZpZXcuZ2V0VWludDE2KGkpO1xuICAgICAgaSArPSAyO1xuICAgICAgLy8gY29udmVydCBmaXhlZC1wb2ludCwgYmFzZSAxNiBiYWNrIHRvIGEgbnVtYmVyXG4gICAgICByZXN1bHQudm9sdW1lID0gdmlldy5nZXRVaW50OChpKSArICh2aWV3LmdldFVpbnQ4KGkgKyAxKSAvIDgpO1xuICAgICAgaSArPSAyO1xuICAgICAgaSArPSAyO1xuICAgICAgcmVzdWx0Lm1hdHJpeCA9IG5ldyBVaW50MzJBcnJheShkYXRhLnN1YmFycmF5KGksIGkgKyAoOSAqIDQpKSk7XG4gICAgICBpICs9IDkgKiA0O1xuICAgICAgcmVzdWx0LndpZHRoID0gdmlldy5nZXRVaW50MTYoaSkgKyAodmlldy5nZXRVaW50MTYoaSArIDIpIC8gMTYpO1xuICAgICAgaSArPSA0O1xuICAgICAgcmVzdWx0LmhlaWdodCA9IHZpZXcuZ2V0VWludDE2KGkpICsgKHZpZXcuZ2V0VWludDE2KGkgKyAyKSAvIDE2KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICB0cmFmOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib3hlczogaW5zcGVjdE1wNChkYXRhKVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRyYWs6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveGVzOiBpbnNwZWN0TXA0KGRhdGEpXG4gICAgICB9O1xuICAgIH0sXG4gICAgdHJleDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKSxcbiAgICAgICAgdHJhY2tJZDogdmlldy5nZXRVaW50MzIoNCksXG4gICAgICAgIGRlZmF1bHRTYW1wbGVEZXNjcmlwdGlvbkluZGV4OiB2aWV3LmdldFVpbnQzMig4KSxcbiAgICAgICAgZGVmYXVsdFNhbXBsZUR1cmF0aW9uOiB2aWV3LmdldFVpbnQzMigxMiksXG4gICAgICAgIGRlZmF1bHRTYW1wbGVTaXplOiB2aWV3LmdldFVpbnQzMigxNiksXG4gICAgICAgIHNhbXBsZURlcGVuZHNPbjogZGF0YVsyMF0gJiAweDAzLFxuICAgICAgICBzYW1wbGVJc0RlcGVuZGVkT246IChkYXRhWzIxXSAmIDB4YzApID4+IDYsXG4gICAgICAgIHNhbXBsZUhhc1JlZHVuZGFuY3k6IChkYXRhWzIxXSAmIDB4MzApID4+IDQsXG4gICAgICAgIHNhbXBsZVBhZGRpbmdWYWx1ZTogKGRhdGFbMjFdICYgMHgwZSkgPj4gMSxcbiAgICAgICAgc2FtcGxlSXNEaWZmZXJlbmNlU2FtcGxlOiAhIShkYXRhWzIxXSAmIDB4MDEpLFxuICAgICAgICBzYW1wbGVEZWdyYWRhdGlvblByaW9yaXR5OiB2aWV3LmdldFVpbnQxNigyMilcbiAgICAgIH07XG4gICAgfSxcbiAgICB0cnVuOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXJcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgICAgZmxhZ3M6IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoMSwgNCkpLFxuICAgICAgICAgIHNhbXBsZXM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgLy8gRmxhZyBpbnRlcnByZXRhdGlvblxuICAgICAgICBkYXRhT2Zmc2V0UHJlc2VudCA9IHJlc3VsdC5mbGFnc1syXSAmIDB4MDEsIC8vIGNvbXBhcmUgd2l0aCAybmQgYnl0ZSBvZiAweDFcbiAgICAgICAgZmlyc3RTYW1wbGVGbGFnc1ByZXNlbnQgPSByZXN1bHQuZmxhZ3NbMl0gJiAweDA0LCAvLyBjb21wYXJlIHdpdGggMm5kIGJ5dGUgb2YgMHg0XG4gICAgICAgIHNhbXBsZUR1cmF0aW9uUHJlc2VudCA9IHJlc3VsdC5mbGFnc1sxXSAmIDB4MDEsIC8vIGNvbXBhcmUgd2l0aCAybmQgYnl0ZSBvZiAweDEwMFxuICAgICAgICBzYW1wbGVTaXplUHJlc2VudCA9IHJlc3VsdC5mbGFnc1sxXSAmIDB4MDIsIC8vIGNvbXBhcmUgd2l0aCAybmQgYnl0ZSBvZiAweDIwMFxuICAgICAgICBzYW1wbGVGbGFnc1ByZXNlbnQgPSByZXN1bHQuZmxhZ3NbMV0gJiAweDA0LCAvLyBjb21wYXJlIHdpdGggMm5kIGJ5dGUgb2YgMHg0MDBcbiAgICAgICAgc2FtcGxlQ29tcG9zaXRpb25UaW1lT2Zmc2V0UHJlc2VudCA9IHJlc3VsdC5mbGFnc1sxXSAmIDB4MDgsIC8vIGNvbXBhcmUgd2l0aCAybmQgYnl0ZSBvZiAweDgwMFxuICAgICAgICBzYW1wbGVDb3VudCA9IHZpZXcuZ2V0VWludDMyKDQpLFxuICAgICAgICBvZmZzZXQgPSA4LFxuICAgICAgICBzYW1wbGU7XG5cbiAgICAgIGlmIChkYXRhT2Zmc2V0UHJlc2VudCkge1xuICAgICAgICAvLyAzMiBiaXQgc2lnbmVkIGludGVnZXJcbiAgICAgICAgcmVzdWx0LmRhdGFPZmZzZXQgPSB2aWV3LmdldEludDMyKG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgfVxuXG4gICAgICAvLyBPdmVycmlkZXMgdGhlIGZsYWdzIGZvciB0aGUgZmlyc3Qgc2FtcGxlIG9ubHkuIFRoZSBvcmRlciBvZlxuICAgICAgLy8gb3B0aW9uYWwgdmFsdWVzIHdpbGwgYmU6IGR1cmF0aW9uLCBzaXplLCBjb21wb3NpdGlvblRpbWVPZmZzZXRcbiAgICAgIGlmIChmaXJzdFNhbXBsZUZsYWdzUHJlc2VudCAmJiBzYW1wbGVDb3VudCkge1xuICAgICAgICBzYW1wbGUgPSB7XG4gICAgICAgICAgZmxhZ3M6IHBhcnNlU2FtcGxlRmxhZ3MoZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDQpKVxuICAgICAgICB9O1xuICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgaWYgKHNhbXBsZUR1cmF0aW9uUHJlc2VudCkge1xuICAgICAgICAgIHNhbXBsZS5kdXJhdGlvbiA9IHZpZXcuZ2V0VWludDMyKG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbXBsZVNpemVQcmVzZW50KSB7XG4gICAgICAgICAgc2FtcGxlLnNpemUgPSB2aWV3LmdldFVpbnQzMihvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1wbGVDb21wb3NpdGlvblRpbWVPZmZzZXRQcmVzZW50KSB7XG4gICAgICAgICAgLy8gTm90ZTogdGhpcyBzaG91bGQgYmUgYSBzaWduZWQgaW50IGlmIHZlcnNpb24gaXMgMVxuICAgICAgICAgIHNhbXBsZS5jb21wb3NpdGlvblRpbWVPZmZzZXQgPSB2aWV3LmdldFVpbnQzMihvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zYW1wbGVzLnB1c2goc2FtcGxlKTtcbiAgICAgICAgc2FtcGxlQ291bnQtLTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHNhbXBsZUNvdW50LS0pIHtcbiAgICAgICAgc2FtcGxlID0ge307XG4gICAgICAgIGlmIChzYW1wbGVEdXJhdGlvblByZXNlbnQpIHtcbiAgICAgICAgICBzYW1wbGUuZHVyYXRpb24gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1wbGVTaXplUHJlc2VudCkge1xuICAgICAgICAgIHNhbXBsZS5zaXplID0gdmlldy5nZXRVaW50MzIob2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtcGxlRmxhZ3NQcmVzZW50KSB7XG4gICAgICAgICAgc2FtcGxlLmZsYWdzID0gcGFyc2VTYW1wbGVGbGFncyhkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgNCkpO1xuICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1wbGVDb21wb3NpdGlvblRpbWVPZmZzZXRQcmVzZW50KSB7XG4gICAgICAgICAgLy8gTm90ZTogdGhpcyBzaG91bGQgYmUgYSBzaWduZWQgaW50IGlmIHZlcnNpb24gaXMgMVxuICAgICAgICAgIHNhbXBsZS5jb21wb3NpdGlvblRpbWVPZmZzZXQgPSB2aWV3LmdldFVpbnQzMihvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zYW1wbGVzLnB1c2goc2FtcGxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAndXJsICc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IGRhdGFbMF0sXG4gICAgICAgIGZsYWdzOiBuZXcgVWludDhBcnJheShkYXRhLnN1YmFycmF5KDEsIDQpKVxuICAgICAgfTtcbiAgICB9LFxuICAgIHZtaGQ6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiBkYXRhWzBdLFxuICAgICAgICBmbGFnczogbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheSgxLCA0KSksXG4gICAgICAgIGdyYXBoaWNzbW9kZTogdmlldy5nZXRVaW50MTYoNCksXG4gICAgICAgIG9wY29sb3I6IG5ldyBVaW50MTZBcnJheShbdmlldy5nZXRVaW50MTYoNiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5nZXRVaW50MTYoOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5nZXRVaW50MTYoMTApXSlcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG5cbi8qKlxuICogUmV0dXJuIGEgamF2YXNjcmlwdCBhcnJheSBvZiBib3ggb2JqZWN0cyBwYXJzZWQgZnJvbSBhbiBJU08gYmFzZVxuICogbWVkaWEgZmlsZS5cbiAqIEBwYXJhbSBkYXRhIHtVaW50OEFycmF5fSB0aGUgYmluYXJ5IGRhdGEgb2YgdGhlIG1lZGlhIHRvIGJlIGluc3BlY3RlZFxuICogQHJldHVybiB7YXJyYXl9IGEgamF2YXNjcmlwdCBhcnJheSBvZiBwb3RlbnRpYWxseSBuZXN0ZWQgYm94IG9iamVjdHNcbiAqL1xuaW5zcGVjdE1wNCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdmFyXG4gICAgaSA9IDAsXG4gICAgcmVzdWx0ID0gW10sXG4gICAgdmlldyxcbiAgICBzaXplLFxuICAgIHR5cGUsXG4gICAgZW5kLFxuICAgIGJveDtcblxuICAvLyBDb252ZXJ0IGRhdGEgZnJvbSBVaW50OEFycmF5IHRvIEFycmF5QnVmZmVyLCB0byBmb2xsb3cgRGF0YXZpZXcgQVBJXG4gIHZhciBhYiA9IG5ldyBBcnJheUJ1ZmZlcihkYXRhLmxlbmd0aCk7XG4gIHZhciB2ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICBmb3IgKHZhciB6ID0gMDsgeiA8IGRhdGEubGVuZ3RoOyArK3opIHtcbiAgICAgIHZbel0gPSBkYXRhW3pdO1xuICB9XG4gIHZpZXcgPSBuZXcgRGF0YVZpZXcoYWIpO1xuXG4gIHdoaWxlIChpIDwgZGF0YS5ieXRlTGVuZ3RoKSB7XG4gICAgLy8gcGFyc2UgYm94IGRhdGFcbiAgICBzaXplID0gdmlldy5nZXRVaW50MzIoaSk7XG4gICAgdHlwZSA9ICBwYXJzZVR5cGUoZGF0YS5zdWJhcnJheShpICsgNCwgaSArIDgpKTtcbiAgICBlbmQgPSBzaXplID4gMSA/IGkgKyBzaXplIDogZGF0YS5ieXRlTGVuZ3RoO1xuXG4gICAgLy8gcGFyc2UgdHlwZS1zcGVjaWZpYyBkYXRhXG4gICAgYm94ID0gKHBhcnNlW3R5cGVdIHx8IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH07XG4gICAgfSkoZGF0YS5zdWJhcnJheShpICsgOCwgZW5kKSk7XG4gICAgYm94LnNpemUgPSBzaXplO1xuICAgIGJveC50eXBlID0gdHlwZTtcblxuICAgIC8vIHN0b3JlIHRoaXMgYm94IGFuZCBtb3ZlIHRvIHRoZSBuZXh0XG4gICAgcmVzdWx0LnB1c2goYm94KTtcbiAgICBpID0gZW5kO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBqYXZhc2NyaXB0IHJlcHJlc3RlbnRhdGlvblxuICogb2YgYW4gTVA0IGZpbGUuIFlvdSBjYW4gdXNlIGl0IGFzIGFuIGFsdGVybmF0aXZlIHRvXG4gKiBKU09OLnN0cmluZ2lmeSgpIHRvIGNvbXBhcmUgaW5zcGVjdGVkIE1QNHMuXG4gKiBAcGFyYW0gaW5zcGVjdGVkTXA0IHthcnJheX0gdGhlIHBhcnNlZCBhcnJheSBvZiBib3hlcyBpbiBhbiBNUDRcbiAqIGZpbGVcbiAqIEBwYXJhbSBkZXB0aCB7bnVtYmVyfSAob3B0aW9uYWwpIHRoZSBudW1iZXIgb2YgYW5jZXN0b3IgYm94ZXMgb2ZcbiAqIHRoZSBlbGVtZW50cyBvZiBpbnNwZWN0ZWRNcDQuIEFzc3VtZWQgdG8gYmUgemVybyBpZiB1bnNwZWNpZmllZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZWQgTVA0XG4gKi9cbnRleHRpZnlNcDQgPSBmdW5jdGlvbihpbnNwZWN0ZWRNcDQsIGRlcHRoKSB7XG4gIHZhciBpbmRlbnQ7XG4gIGRlcHRoID0gZGVwdGggfHwgMDtcbiAgaW5kZW50ID0gbmV3IEFycmF5KGRlcHRoICogMiArIDEpLmpvaW4oJyAnKTtcblxuICAvLyBpdGVyYXRlIG92ZXIgYWxsIHRoZSBib3hlc1xuICByZXR1cm4gaW5zcGVjdGVkTXA0Lm1hcChmdW5jdGlvbihib3gsIGluZGV4KSB7XG5cbiAgICAvLyBsaXN0IHRoZSBib3ggdHlwZSBmaXJzdCBhdCB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbFxuICAgIHJldHVybiBpbmRlbnQgKyBib3gudHlwZSArICdcXG4nICtcblxuICAgICAgLy8gdGhlIHR5cGUgaXMgYWxyZWFkeSBpbmNsdWRlZCBhbmQgaGFuZGxlIGNoaWxkIGJveGVzIHNlcGFyYXRlbHlcbiAgICAgIE9iamVjdC5rZXlzKGJveCkuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ICE9PSAndHlwZScgJiYga2V5ICE9PSAnYm94ZXMnO1xuXG4gICAgICAvLyBvdXRwdXQgYWxsIHRoZSBib3ggcHJvcGVydGllc1xuICAgICAgfSkubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICB2YXIgcHJlZml4ID0gaW5kZW50ICsgJyAgJyArIGtleSArICc6ICcsXG4gICAgICAgICAgICB2YWx1ZSA9IGJveFtrZXldO1xuXG4gICAgICAgIC8vIHByaW50IG91dCByYXcgYnl0ZXMgYXMgaGV4YWRlbWljYWxcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgdmFyIGJ5dGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQ4QXJyYXkodmFsdWUuYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKSlcbiAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihieXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcgJyArICgnMDAnICsgYnl0ZS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgfSkuam9pbignJykubWF0Y2goLy57MSwyNH0vZyk7XG4gICAgICAgICAgaWYgKCFieXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArICc8Pic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChieXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnPCcgKyBieXRlcy5qb2luKCcnKS5zbGljZSgxKSArICc+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCArICc8XFxuJyArIGJ5dGVzLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZW50ICsgJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykgKyAnXFxuJyArIGluZGVudCArICcgID4nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RyaW5naWZ5IGdlbmVyaWMgb2JqZWN0c1xuICAgICAgICByZXR1cm4gcHJlZml4ICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKVxuICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnQgKyAnICAnICsgbGluZTtcbiAgICAgICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICB9KS5qb2luKCdcXG4nKSArXG5cbiAgICAvLyByZWN1cnNpdmVseSB0ZXh0aWZ5IHRoZSBjaGlsZCBib3hlc1xuICAgIChib3guYm94ZXMgPyAnXFxuJyArIHRleHRpZnlNcDQoYm94LmJveGVzLCBkZXB0aCArIDEpIDogJycpO1xuICB9KS5qb2luKCdcXG4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbnNwZWN0OiBpbnNwZWN0TXA0LFxuICB0ZXh0aWZ5OiB0ZXh0aWZ5TXA0LFxuICBwYXJzZVRmZHQ6IHBhcnNlLnRmZHQsXG4gIHBhcnNlSGRscjogcGFyc2UuaGRscixcbiAgcGFyc2VUZmhkOiBwYXJzZS50ZmhkLFxuICBwYXJzZVRydW46IHBhcnNlLnRydW4sXG4gIHBhcnNlU2lkeDogcGFyc2Uuc2lkeFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBTkE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVRBO0FBQUE7QUFvQkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBckJBO0FBdUJBO0FBQ0E7QUFBQTtBQTNEQTtBQUFBO0FBK0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBTkE7QUFpQkE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWlCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQUNBO0FBQ0E7QUF5QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXBEQTtBQXNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQXhEQTtBQThEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFOQTtBQVpBO0FBTEE7QUEvREE7QUEyRkE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBeEdBO0FBMEdBO0FBQ0E7QUFDQTtBQURBO0FBM0dBO0FBK0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWhIQTtBQXNIQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFsQkE7QUFxQkE7QUFDQTtBQUNBO0FBREE7QUFFQTtBQTlJQTtBQWdKQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBakpBO0FBc0pBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQTFMQTtBQTRMQTtBQUNBO0FBQ0E7QUFEQTtBQTdMQTtBQWlNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFsTUE7QUEyTUE7QUFDQTtBQUNBO0FBREE7QUE1TUE7QUFnTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUF0T0E7QUF3T0E7QUFDQTtBQUNBO0FBREE7QUF6T0E7QUE2T0E7QUFDQTtBQUNBO0FBREE7QUE5T0E7QUFrUEE7QUFDQTtBQUNBO0FBREE7QUFuUEE7QUF1UEE7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL1JBO0FBaVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFuU0E7QUEwU0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQXpUQTtBQTJUQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBREE7QUFBQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBcFZBO0FBc1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQXZWQTtBQTZWQTtBQUNBO0FBQ0E7QUFEQTtBQTlWQTtBQWtXQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUEvV0E7QUFpWEE7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFsWUE7QUFvWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBcllBO0FBMllBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFGQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhaQTtBQTBaQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUEzYUE7QUE2YUE7QUFDQTtBQTlhQTtBQWdiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQTFiQTtBQTRiQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXplQTtBQTJlQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdGhCQTtBQXdoQkE7QUFDQTtBQUNBO0FBREE7QUF6aEJBO0FBNmhCQTtBQUNBO0FBQ0E7QUFEQTtBQTloQkE7QUFraUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBcGlCQTtBQW1qQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFBQTtBQVFBO0FBUkE7QUFTQTtBQVRBO0FBVUE7QUFWQTtBQVdBO0FBWEE7QUFZQTtBQVpBO0FBYUE7QUFiQTtBQWNBO0FBZEE7QUFBQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBMEJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXpuQkE7QUEybkJBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUE1bkJBO0FBaW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBUUE7QUEzb0JBO0FBK29CQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBckNBO0FBd0NBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBS0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFoQkE7QUFDQTtBQUNBO0FBb0JBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBM0JBO0FBcUNBO0FBM0NBO0FBTkE7QUFDQTtBQW9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/tools/mp4-inspector.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/tools/ts-inspector.js": -/*!********************************************************!*\ - !*** ../node_modules/mux.js/lib/tools/ts-inspector.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Parse mpeg2 transport stream packets to extract basic timing information\n */\n\n\nvar StreamTypes = __webpack_require__(/*! ../m2ts/stream-types.js */ \"../node_modules/mux.js/lib/m2ts/stream-types.js\");\n\nvar handleRollover = __webpack_require__(/*! ../m2ts/timestamp-rollover-stream.js */ \"../node_modules/mux.js/lib/m2ts/timestamp-rollover-stream.js\").handleRollover;\n\nvar probe = {};\nprobe.ts = __webpack_require__(/*! ../m2ts/probe.js */ \"../node_modules/mux.js/lib/m2ts/probe.js\");\nprobe.aac = __webpack_require__(/*! ../aac/utils.js */ \"../node_modules/mux.js/lib/aac/utils.js\");\n\nvar ONE_SECOND_IN_TS = __webpack_require__(/*! ../utils/clock */ \"../node_modules/mux.js/lib/utils/clock.js\").ONE_SECOND_IN_TS;\n\nvar MP2T_PACKET_LENGTH = 188,\n // bytes\nSYNC_BYTE = 0x47;\n/**\n * walks through segment data looking for pat and pmt packets to parse out\n * program map table information\n */\n\nvar parsePsi_ = function parsePsi_(bytes, pmt) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type;\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pat':\n if (!pmt.pid) {\n pmt.pid = probe.ts.parsePat(packet);\n }\n\n break;\n\n case 'pmt':\n if (!pmt.table) {\n pmt.table = probe.ts.parsePmt(packet);\n }\n\n break;\n\n default:\n break;\n } // Found the pat and pmt, we can stop walking the segment\n\n\n if (pmt.pid && pmt.table) {\n return;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n\n startIndex++;\n endIndex++;\n }\n};\n/**\n * walks through the segment data from the start and end to get timing information\n * for the first and last audio pes packets\n */\n\n\nvar parseAudioPes_ = function parseAudioPes_(bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed;\n var endLoop = false; // Start walking from start of segment to get first audio packet\n\n while (endIndex <= bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n\n break;\n\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last audio packet\n\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n\n break;\n\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n\n startIndex--;\n endIndex--;\n }\n};\n/**\n * walks through the segment data from the start and end to get timing information\n * for the first and last video pes packets as well as timing information for the first\n * key frame.\n */\n\n\nvar parseVideoPes_ = function parseVideoPes_(bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed,\n frame,\n i,\n pes;\n var endLoop = false;\n var currentFrame = {\n data: [],\n size: 0\n }; // Start walking from start of segment to get first video packet\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n\n if (pesType === 'video') {\n if (pusi && !endLoop) {\n parsed = probe.ts.parsePesTime(packet);\n\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n\n if (!result.firstKeyFrame) {\n if (pusi) {\n if (currentFrame.size !== 0) {\n frame = new Uint8Array(currentFrame.size);\n i = 0;\n\n while (currentFrame.data.length) {\n pes = currentFrame.data.shift();\n frame.set(pes, i);\n i += pes.byteLength;\n }\n\n if (probe.ts.videoPacketContainsKeyFrame(frame)) {\n var firstKeyFrame = probe.ts.parsePesTime(frame); // PTS/DTS may not be available. Simply *not* setting\n // the keyframe seems to work fine with HLS playback\n // and definitely preferable to a crash with TypeError...\n\n if (firstKeyFrame) {\n result.firstKeyFrame = firstKeyFrame;\n result.firstKeyFrame.type = 'video';\n } else {\n // eslint-disable-next-line\n console.warn('Failed to extract PTS/DTS from PES at first keyframe. ' + 'This could be an unusual TS segment, or else mux.js did not ' + 'parse your TS segment correctly. If you know your TS ' + 'segments do contain PTS/DTS on keyframes please file a bug ' + 'report! You can try ffprobe to double check for yourself.');\n }\n }\n\n currentFrame.size = 0;\n }\n }\n\n currentFrame.data.push(packet);\n currentFrame.size += packet.byteLength;\n }\n }\n\n break;\n\n default:\n break;\n }\n\n if (endLoop && result.firstKeyFrame) {\n break;\n }\n\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last video packet\n\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n\n if (pesType === 'video' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n\n break;\n\n default:\n break;\n }\n\n if (endLoop) {\n break;\n }\n\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n\n startIndex--;\n endIndex--;\n }\n};\n/**\n * Adjusts the timestamp information for the segment to account for\n * rollover and convert to seconds based on pes packet timescale (90khz clock)\n */\n\n\nvar adjustTimestamp_ = function adjustTimestamp_(segmentInfo, baseTimestamp) {\n if (segmentInfo.audio && segmentInfo.audio.length) {\n var audioBaseTimestamp = baseTimestamp;\n\n if (typeof audioBaseTimestamp === 'undefined') {\n audioBaseTimestamp = segmentInfo.audio[0].dts;\n }\n\n segmentInfo.audio.forEach(function (info) {\n info.dts = handleRollover(info.dts, audioBaseTimestamp);\n info.pts = handleRollover(info.pts, audioBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n }\n\n if (segmentInfo.video && segmentInfo.video.length) {\n var videoBaseTimestamp = baseTimestamp;\n\n if (typeof videoBaseTimestamp === 'undefined') {\n videoBaseTimestamp = segmentInfo.video[0].dts;\n }\n\n segmentInfo.video.forEach(function (info) {\n info.dts = handleRollover(info.dts, videoBaseTimestamp);\n info.pts = handleRollover(info.pts, videoBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n\n if (segmentInfo.firstKeyFrame) {\n var frame = segmentInfo.firstKeyFrame;\n frame.dts = handleRollover(frame.dts, videoBaseTimestamp);\n frame.pts = handleRollover(frame.pts, videoBaseTimestamp); // time in seconds\n\n frame.dtsTime = frame.dts / ONE_SECOND_IN_TS;\n frame.ptsTime = frame.dts / ONE_SECOND_IN_TS;\n }\n }\n};\n/**\n * inspects the aac data stream for start and end time information\n */\n\n\nvar inspectAac_ = function inspectAac_(bytes) {\n var endLoop = false,\n audioCount = 0,\n sampleRate = null,\n timestamp = null,\n frameSize = 0,\n byteIndex = 0,\n packet;\n\n while (bytes.length - byteIndex >= 3) {\n var type = probe.aac.parseType(bytes, byteIndex);\n\n switch (type) {\n case 'timed-metadata':\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (bytes.length - byteIndex < 10) {\n endLoop = true;\n break;\n }\n\n frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n\n if (timestamp === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n timestamp = probe.aac.parseAacTimestamp(packet);\n }\n\n byteIndex += frameSize;\n break;\n\n case 'audio':\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (bytes.length - byteIndex < 7) {\n endLoop = true;\n break;\n }\n\n frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n\n if (sampleRate === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n sampleRate = probe.aac.parseSampleRate(packet);\n }\n\n audioCount++;\n byteIndex += frameSize;\n break;\n\n default:\n byteIndex++;\n break;\n }\n\n if (endLoop) {\n return null;\n }\n }\n\n if (sampleRate === null || timestamp === null) {\n return null;\n }\n\n var audioTimescale = ONE_SECOND_IN_TS / sampleRate;\n var result = {\n audio: [{\n type: 'audio',\n dts: timestamp,\n pts: timestamp\n }, {\n type: 'audio',\n dts: timestamp + audioCount * 1024 * audioTimescale,\n pts: timestamp + audioCount * 1024 * audioTimescale\n }]\n };\n return result;\n};\n/**\n * inspects the transport stream segment data for start and end time information\n * of the audio and video tracks (when present) as well as the first key frame's\n * start time.\n */\n\n\nvar inspectTs_ = function inspectTs_(bytes) {\n var pmt = {\n pid: null,\n table: null\n };\n var result = {};\n parsePsi_(bytes, pmt);\n\n for (var pid in pmt.table) {\n if (pmt.table.hasOwnProperty(pid)) {\n var type = pmt.table[pid];\n\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n result.video = [];\n parseVideoPes_(bytes, pmt, result);\n\n if (result.video.length === 0) {\n delete result.video;\n }\n\n break;\n\n case StreamTypes.ADTS_STREAM_TYPE:\n result.audio = [];\n parseAudioPes_(bytes, pmt, result);\n\n if (result.audio.length === 0) {\n delete result.audio;\n }\n\n break;\n\n default:\n break;\n }\n }\n }\n\n return result;\n};\n/**\n * Inspects segment byte data and returns an object with start and end timing information\n *\n * @param {Uint8Array} bytes The segment byte data\n * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame\n * timestamps for rollover. This value must be in 90khz clock.\n * @return {Object} Object containing start and end frame timing info of segment.\n */\n\n\nvar inspect = function inspect(bytes, baseTimestamp) {\n var isAacData = probe.aac.isLikelyAacData(bytes);\n var result;\n\n if (isAacData) {\n result = inspectAac_(bytes);\n } else {\n result = inspectTs_(bytes);\n }\n\n if (!result || !result.audio && !result.video) {\n return null;\n }\n\n adjustTimestamp_(result, baseTimestamp);\n return result;\n};\n\nmodule.exports = {\n inspect: inspect,\n parseAudioPes_: parseAudioPes_\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdG9vbHMvdHMtaW5zcGVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL3Rvb2xzL3RzLWluc3BlY3Rvci5qcz80OGU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogUGFyc2UgbXBlZzIgdHJhbnNwb3J0IHN0cmVhbSBwYWNrZXRzIHRvIGV4dHJhY3QgYmFzaWMgdGltaW5nIGluZm9ybWF0aW9uXG4gKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIFN0cmVhbVR5cGVzID0gcmVxdWlyZSgnLi4vbTJ0cy9zdHJlYW0tdHlwZXMuanMnKTtcbnZhciBoYW5kbGVSb2xsb3ZlciA9IHJlcXVpcmUoJy4uL20ydHMvdGltZXN0YW1wLXJvbGxvdmVyLXN0cmVhbS5qcycpLmhhbmRsZVJvbGxvdmVyO1xudmFyIHByb2JlID0ge307XG5wcm9iZS50cyA9IHJlcXVpcmUoJy4uL20ydHMvcHJvYmUuanMnKTtcbnByb2JlLmFhYyA9IHJlcXVpcmUoJy4uL2FhYy91dGlscy5qcycpO1xudmFyIE9ORV9TRUNPTkRfSU5fVFMgPSByZXF1aXJlKCcuLi91dGlscy9jbG9jaycpLk9ORV9TRUNPTkRfSU5fVFM7XG5cbnZhclxuICBNUDJUX1BBQ0tFVF9MRU5HVEggPSAxODgsIC8vIGJ5dGVzXG4gIFNZTkNfQllURSA9IDB4NDc7XG5cbi8qKlxuICogd2Fsa3MgdGhyb3VnaCBzZWdtZW50IGRhdGEgbG9va2luZyBmb3IgcGF0IGFuZCBwbXQgcGFja2V0cyB0byBwYXJzZSBvdXRcbiAqIHByb2dyYW0gbWFwIHRhYmxlIGluZm9ybWF0aW9uXG4gKi9cbnZhciBwYXJzZVBzaV8gPSBmdW5jdGlvbihieXRlcywgcG10KSB7XG4gIHZhclxuICAgIHN0YXJ0SW5kZXggPSAwLFxuICAgIGVuZEluZGV4ID0gTVAyVF9QQUNLRVRfTEVOR1RILFxuICAgIHBhY2tldCwgdHlwZTtcblxuICB3aGlsZSAoZW5kSW5kZXggPCBieXRlcy5ieXRlTGVuZ3RoKSB7XG4gICAgLy8gTG9vayBmb3IgYSBwYWlyIG9mIHN0YXJ0IGFuZCBlbmQgc3luYyBieXRlcyBpbiB0aGUgZGF0YS4uXG4gICAgaWYgKGJ5dGVzW3N0YXJ0SW5kZXhdID09PSBTWU5DX0JZVEUgJiYgYnl0ZXNbZW5kSW5kZXhdID09PSBTWU5DX0JZVEUpIHtcbiAgICAgIC8vIFdlIGZvdW5kIGEgcGFja2V0XG4gICAgICBwYWNrZXQgPSBieXRlcy5zdWJhcnJheShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICB0eXBlID0gcHJvYmUudHMucGFyc2VUeXBlKHBhY2tldCwgcG10LnBpZCk7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdwYXQnOlxuICAgICAgICAgIGlmICghcG10LnBpZCkge1xuICAgICAgICAgICAgcG10LnBpZCA9IHByb2JlLnRzLnBhcnNlUGF0KHBhY2tldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwbXQnOlxuICAgICAgICAgIGlmICghcG10LnRhYmxlKSB7XG4gICAgICAgICAgICBwbXQudGFibGUgPSBwcm9iZS50cy5wYXJzZVBtdChwYWNrZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRm91bmQgdGhlIHBhdCBhbmQgcG10LCB3ZSBjYW4gc3RvcCB3YWxraW5nIHRoZSBzZWdtZW50XG4gICAgICBpZiAocG10LnBpZCAmJiBwbXQudGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGFydEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGVuZEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIHNvbWVob3cgYmVjb21lIGRlLXN5bmNocm9uaXplZCBhbmQgd2UgbmVlZCB0byBzdGVwXG4gICAgLy8gZm9yd2FyZCBvbmUgYnl0ZSBhdCBhIHRpbWUgdW50aWwgd2UgZmluZCBhIHBhaXIgb2Ygc3luYyBieXRlcyB0aGF0IGRlbm90ZVxuICAgIC8vIGEgcGFja2V0XG4gICAgc3RhcnRJbmRleCsrO1xuICAgIGVuZEluZGV4Kys7XG4gIH1cbn07XG5cbi8qKlxuICogd2Fsa3MgdGhyb3VnaCB0aGUgc2VnbWVudCBkYXRhIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgdG8gZ2V0IHRpbWluZyBpbmZvcm1hdGlvblxuICogZm9yIHRoZSBmaXJzdCBhbmQgbGFzdCBhdWRpbyBwZXMgcGFja2V0c1xuICovXG52YXIgcGFyc2VBdWRpb1Blc18gPSBmdW5jdGlvbihieXRlcywgcG10LCByZXN1bHQpIHtcbiAgdmFyXG4gICAgc3RhcnRJbmRleCA9IDAsXG4gICAgZW5kSW5kZXggPSBNUDJUX1BBQ0tFVF9MRU5HVEgsXG4gICAgcGFja2V0LCB0eXBlLCBwZXNUeXBlLCBwdXNpLCBwYXJzZWQ7XG5cbiAgdmFyIGVuZExvb3AgPSBmYWxzZTtcblxuICAvLyBTdGFydCB3YWxraW5nIGZyb20gc3RhcnQgb2Ygc2VnbWVudCB0byBnZXQgZmlyc3QgYXVkaW8gcGFja2V0XG4gIHdoaWxlIChlbmRJbmRleCA8PSBieXRlcy5ieXRlTGVuZ3RoKSB7XG4gICAgLy8gTG9vayBmb3IgYSBwYWlyIG9mIHN0YXJ0IGFuZCBlbmQgc3luYyBieXRlcyBpbiB0aGUgZGF0YS4uXG4gICAgaWYgKGJ5dGVzW3N0YXJ0SW5kZXhdID09PSBTWU5DX0JZVEUgJiZcbiAgICAgICAgKGJ5dGVzW2VuZEluZGV4XSA9PT0gU1lOQ19CWVRFIHx8IGVuZEluZGV4ID09PSBieXRlcy5ieXRlTGVuZ3RoKSkge1xuICAgICAgLy8gV2UgZm91bmQgYSBwYWNrZXRcbiAgICAgIHBhY2tldCA9IGJ5dGVzLnN1YmFycmF5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgIHR5cGUgPSBwcm9iZS50cy5wYXJzZVR5cGUocGFja2V0LCBwbXQucGlkKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3Blcyc6XG4gICAgICAgICAgcGVzVHlwZSA9IHByb2JlLnRzLnBhcnNlUGVzVHlwZShwYWNrZXQsIHBtdC50YWJsZSk7XG4gICAgICAgICAgcHVzaSA9IHByb2JlLnRzLnBhcnNlUGF5bG9hZFVuaXRTdGFydEluZGljYXRvcihwYWNrZXQpO1xuICAgICAgICAgIGlmIChwZXNUeXBlID09PSAnYXVkaW8nICYmIHB1c2kpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHByb2JlLnRzLnBhcnNlUGVzVGltZShwYWNrZXQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBwYXJzZWQudHlwZSA9ICdhdWRpbyc7XG4gICAgICAgICAgICAgIHJlc3VsdC5hdWRpby5wdXNoKHBhcnNlZCk7XG4gICAgICAgICAgICAgIGVuZExvb3AgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZExvb3ApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0SW5kZXggKz0gTVAyVF9QQUNLRVRfTEVOR1RIO1xuICAgICAgZW5kSW5kZXggKz0gTVAyVF9QQUNLRVRfTEVOR1RIO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgc29tZWhvdyBiZWNvbWUgZGUtc3luY2hyb25pemVkIGFuZCB3ZSBuZWVkIHRvIHN0ZXBcbiAgICAvLyBmb3J3YXJkIG9uZSBieXRlIGF0IGEgdGltZSB1bnRpbCB3ZSBmaW5kIGEgcGFpciBvZiBzeW5jIGJ5dGVzIHRoYXQgZGVub3RlXG4gICAgLy8gYSBwYWNrZXRcbiAgICBzdGFydEluZGV4Kys7XG4gICAgZW5kSW5kZXgrKztcbiAgfVxuXG4gIC8vIFN0YXJ0IHdhbGtpbmcgZnJvbSBlbmQgb2Ygc2VnbWVudCB0byBnZXQgbGFzdCBhdWRpbyBwYWNrZXRcbiAgZW5kSW5kZXggPSBieXRlcy5ieXRlTGVuZ3RoO1xuICBzdGFydEluZGV4ID0gZW5kSW5kZXggLSBNUDJUX1BBQ0tFVF9MRU5HVEg7XG4gIGVuZExvb3AgPSBmYWxzZTtcbiAgd2hpbGUgKHN0YXJ0SW5kZXggPj0gMCkge1xuICAgIC8vIExvb2sgZm9yIGEgcGFpciBvZiBzdGFydCBhbmQgZW5kIHN5bmMgYnl0ZXMgaW4gdGhlIGRhdGEuLlxuICAgIGlmIChieXRlc1tzdGFydEluZGV4XSA9PT0gU1lOQ19CWVRFICYmXG4gICAgICAgIChieXRlc1tlbmRJbmRleF0gPT09IFNZTkNfQllURSB8fCBlbmRJbmRleCA9PT0gYnl0ZXMuYnl0ZUxlbmd0aCkpIHtcbiAgICAgIC8vIFdlIGZvdW5kIGEgcGFja2V0XG4gICAgICBwYWNrZXQgPSBieXRlcy5zdWJhcnJheShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICB0eXBlID0gcHJvYmUudHMucGFyc2VUeXBlKHBhY2tldCwgcG10LnBpZCk7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdwZXMnOlxuICAgICAgICAgIHBlc1R5cGUgPSBwcm9iZS50cy5wYXJzZVBlc1R5cGUocGFja2V0LCBwbXQudGFibGUpO1xuICAgICAgICAgIHB1c2kgPSBwcm9iZS50cy5wYXJzZVBheWxvYWRVbml0U3RhcnRJbmRpY2F0b3IocGFja2V0KTtcbiAgICAgICAgICBpZiAocGVzVHlwZSA9PT0gJ2F1ZGlvJyAmJiBwdXNpKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwcm9iZS50cy5wYXJzZVBlc1RpbWUocGFja2V0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgcGFyc2VkLnR5cGUgPSAnYXVkaW8nO1xuICAgICAgICAgICAgICByZXN1bHQuYXVkaW8ucHVzaChwYXJzZWQpO1xuICAgICAgICAgICAgICBlbmRMb29wID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmRMb29wKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdGFydEluZGV4IC09IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGVuZEluZGV4IC09IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIHNvbWVob3cgYmVjb21lIGRlLXN5bmNocm9uaXplZCBhbmQgd2UgbmVlZCB0byBzdGVwXG4gICAgLy8gZm9yd2FyZCBvbmUgYnl0ZSBhdCBhIHRpbWUgdW50aWwgd2UgZmluZCBhIHBhaXIgb2Ygc3luYyBieXRlcyB0aGF0IGRlbm90ZVxuICAgIC8vIGEgcGFja2V0XG4gICAgc3RhcnRJbmRleC0tO1xuICAgIGVuZEluZGV4LS07XG4gIH1cbn07XG5cbi8qKlxuICogd2Fsa3MgdGhyb3VnaCB0aGUgc2VnbWVudCBkYXRhIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgdG8gZ2V0IHRpbWluZyBpbmZvcm1hdGlvblxuICogZm9yIHRoZSBmaXJzdCBhbmQgbGFzdCB2aWRlbyBwZXMgcGFja2V0cyBhcyB3ZWxsIGFzIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpcnN0XG4gKiBrZXkgZnJhbWUuXG4gKi9cbnZhciBwYXJzZVZpZGVvUGVzXyA9IGZ1bmN0aW9uKGJ5dGVzLCBwbXQsIHJlc3VsdCkge1xuICB2YXJcbiAgICBzdGFydEluZGV4ID0gMCxcbiAgICBlbmRJbmRleCA9IE1QMlRfUEFDS0VUX0xFTkdUSCxcbiAgICBwYWNrZXQsIHR5cGUsIHBlc1R5cGUsIHB1c2ksIHBhcnNlZCwgZnJhbWUsIGksIHBlcztcblxuICB2YXIgZW5kTG9vcCA9IGZhbHNlO1xuXG4gIHZhciBjdXJyZW50RnJhbWUgPSB7XG4gICAgZGF0YTogW10sXG4gICAgc2l6ZTogMFxuICB9O1xuXG4gIC8vIFN0YXJ0IHdhbGtpbmcgZnJvbSBzdGFydCBvZiBzZWdtZW50IHRvIGdldCBmaXJzdCB2aWRlbyBwYWNrZXRcbiAgd2hpbGUgKGVuZEluZGV4IDwgYnl0ZXMuYnl0ZUxlbmd0aCkge1xuICAgIC8vIExvb2sgZm9yIGEgcGFpciBvZiBzdGFydCBhbmQgZW5kIHN5bmMgYnl0ZXMgaW4gdGhlIGRhdGEuLlxuICAgIGlmIChieXRlc1tzdGFydEluZGV4XSA9PT0gU1lOQ19CWVRFICYmIGJ5dGVzW2VuZEluZGV4XSA9PT0gU1lOQ19CWVRFKSB7XG4gICAgICAvLyBXZSBmb3VuZCBhIHBhY2tldFxuICAgICAgcGFja2V0ID0gYnl0ZXMuc3ViYXJyYXkoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgdHlwZSA9IHByb2JlLnRzLnBhcnNlVHlwZShwYWNrZXQsIHBtdC5waWQpO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncGVzJzpcbiAgICAgICAgICBwZXNUeXBlID0gcHJvYmUudHMucGFyc2VQZXNUeXBlKHBhY2tldCwgcG10LnRhYmxlKTtcbiAgICAgICAgICBwdXNpID0gcHJvYmUudHMucGFyc2VQYXlsb2FkVW5pdFN0YXJ0SW5kaWNhdG9yKHBhY2tldCk7XG4gICAgICAgICAgaWYgKHBlc1R5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGlmIChwdXNpICYmICFlbmRMb29wKSB7XG4gICAgICAgICAgICAgIHBhcnNlZCA9IHByb2JlLnRzLnBhcnNlUGVzVGltZShwYWNrZXQpO1xuICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnR5cGUgPSAndmlkZW8nO1xuICAgICAgICAgICAgICAgIHJlc3VsdC52aWRlby5wdXNoKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgZW5kTG9vcCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LmZpcnN0S2V5RnJhbWUpIHtcbiAgICAgICAgICAgICAgaWYgKHB1c2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lLnNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgIGZyYW1lID0gbmV3IFVpbnQ4QXJyYXkoY3VycmVudEZyYW1lLnNpemUpO1xuICAgICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudEZyYW1lLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlcyA9IGN1cnJlbnRGcmFtZS5kYXRhLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lLnNldChwZXMsIGkpO1xuICAgICAgICAgICAgICAgICAgICBpICs9IHBlcy5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHByb2JlLnRzLnZpZGVvUGFja2V0Q29udGFpbnNLZXlGcmFtZShmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0S2V5RnJhbWUgPSBwcm9iZS50cy5wYXJzZVBlc1RpbWUoZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFBUUy9EVFMgbWF5IG5vdCBiZSBhdmFpbGFibGUuIFNpbXBseSAqbm90KiBzZXR0aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBrZXlmcmFtZSBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aCBITFMgcGxheWJhY2tcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRlZmluaXRlbHkgcHJlZmVyYWJsZSB0byBhIGNyYXNoIHdpdGggVHlwZUVycm9yLi4uXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEtleUZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpcnN0S2V5RnJhbWUgPSBmaXJzdEtleUZyYW1lO1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maXJzdEtleUZyYW1lLnR5cGUgPSAndmlkZW8nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZXh0cmFjdCBQVFMvRFRTIGZyb20gUEVTIGF0IGZpcnN0IGtleWZyYW1lLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIGNvdWxkIGJlIGFuIHVudXN1YWwgVFMgc2VnbWVudCwgb3IgZWxzZSBtdXguanMgZGlkIG5vdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXJzZSB5b3VyIFRTIHNlZ21lbnQgY29ycmVjdGx5LiBJZiB5b3Uga25vdyB5b3VyIFRTICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlZ21lbnRzIGRvIGNvbnRhaW4gUFRTL0RUUyBvbiBrZXlmcmFtZXMgcGxlYXNlIGZpbGUgYSBidWcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVwb3J0ISBZb3UgY2FuIHRyeSBmZnByb2JlIHRvIGRvdWJsZSBjaGVjayBmb3IgeW91cnNlbGYuJ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS5zaXplID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudEZyYW1lLmRhdGEucHVzaChwYWNrZXQpO1xuICAgICAgICAgICAgICBjdXJyZW50RnJhbWUuc2l6ZSArPSBwYWNrZXQuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmRMb29wICYmIHJlc3VsdC5maXJzdEtleUZyYW1lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdGFydEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGVuZEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIHNvbWVob3cgYmVjb21lIGRlLXN5bmNocm9uaXplZCBhbmQgd2UgbmVlZCB0byBzdGVwXG4gICAgLy8gZm9yd2FyZCBvbmUgYnl0ZSBhdCBhIHRpbWUgdW50aWwgd2UgZmluZCBhIHBhaXIgb2Ygc3luYyBieXRlcyB0aGF0IGRlbm90ZVxuICAgIC8vIGEgcGFja2V0XG4gICAgc3RhcnRJbmRleCsrO1xuICAgIGVuZEluZGV4Kys7XG4gIH1cblxuICAvLyBTdGFydCB3YWxraW5nIGZyb20gZW5kIG9mIHNlZ21lbnQgdG8gZ2V0IGxhc3QgdmlkZW8gcGFja2V0XG4gIGVuZEluZGV4ID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgc3RhcnRJbmRleCA9IGVuZEluZGV4IC0gTVAyVF9QQUNLRVRfTEVOR1RIO1xuICBlbmRMb29wID0gZmFsc2U7XG4gIHdoaWxlIChzdGFydEluZGV4ID49IDApIHtcbiAgICAvLyBMb29rIGZvciBhIHBhaXIgb2Ygc3RhcnQgYW5kIGVuZCBzeW5jIGJ5dGVzIGluIHRoZSBkYXRhLi5cbiAgICBpZiAoYnl0ZXNbc3RhcnRJbmRleF0gPT09IFNZTkNfQllURSAmJiBieXRlc1tlbmRJbmRleF0gPT09IFNZTkNfQllURSkge1xuICAgICAgLy8gV2UgZm91bmQgYSBwYWNrZXRcbiAgICAgIHBhY2tldCA9IGJ5dGVzLnN1YmFycmF5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgIHR5cGUgPSBwcm9iZS50cy5wYXJzZVR5cGUocGFja2V0LCBwbXQucGlkKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3Blcyc6XG4gICAgICAgICAgcGVzVHlwZSA9IHByb2JlLnRzLnBhcnNlUGVzVHlwZShwYWNrZXQsIHBtdC50YWJsZSk7XG4gICAgICAgICAgcHVzaSA9IHByb2JlLnRzLnBhcnNlUGF5bG9hZFVuaXRTdGFydEluZGljYXRvcihwYWNrZXQpO1xuICAgICAgICAgIGlmIChwZXNUeXBlID09PSAndmlkZW8nICYmIHB1c2kpIHtcbiAgICAgICAgICAgICAgcGFyc2VkID0gcHJvYmUudHMucGFyc2VQZXNUaW1lKHBhY2tldCk7XG4gICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQudHlwZSA9ICd2aWRlbyc7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZpZGVvLnB1c2gocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBlbmRMb29wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZExvb3ApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0SW5kZXggLT0gTVAyVF9QQUNLRVRfTEVOR1RIO1xuICAgICAgZW5kSW5kZXggLT0gTVAyVF9QQUNLRVRfTEVOR1RIO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgc29tZWhvdyBiZWNvbWUgZGUtc3luY2hyb25pemVkIGFuZCB3ZSBuZWVkIHRvIHN0ZXBcbiAgICAvLyBmb3J3YXJkIG9uZSBieXRlIGF0IGEgdGltZSB1bnRpbCB3ZSBmaW5kIGEgcGFpciBvZiBzeW5jIGJ5dGVzIHRoYXQgZGVub3RlXG4gICAgLy8gYSBwYWNrZXRcbiAgICBzdGFydEluZGV4LS07XG4gICAgZW5kSW5kZXgtLTtcbiAgfVxufTtcblxuLyoqXG4gKiBBZGp1c3RzIHRoZSB0aW1lc3RhbXAgaW5mb3JtYXRpb24gZm9yIHRoZSBzZWdtZW50IHRvIGFjY291bnQgZm9yXG4gKiByb2xsb3ZlciBhbmQgY29udmVydCB0byBzZWNvbmRzIGJhc2VkIG9uIHBlcyBwYWNrZXQgdGltZXNjYWxlICg5MGtoeiBjbG9jaylcbiAqL1xudmFyIGFkanVzdFRpbWVzdGFtcF8gPSBmdW5jdGlvbihzZWdtZW50SW5mbywgYmFzZVRpbWVzdGFtcCkge1xuICBpZiAoc2VnbWVudEluZm8uYXVkaW8gJiYgc2VnbWVudEluZm8uYXVkaW8ubGVuZ3RoKSB7XG4gICAgdmFyIGF1ZGlvQmFzZVRpbWVzdGFtcCA9IGJhc2VUaW1lc3RhbXA7XG4gICAgaWYgKHR5cGVvZiBhdWRpb0Jhc2VUaW1lc3RhbXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhdWRpb0Jhc2VUaW1lc3RhbXAgPSBzZWdtZW50SW5mby5hdWRpb1swXS5kdHM7XG4gICAgfVxuICAgIHNlZ21lbnRJbmZvLmF1ZGlvLmZvckVhY2goZnVuY3Rpb24oaW5mbykge1xuICAgICAgaW5mby5kdHMgPSBoYW5kbGVSb2xsb3ZlcihpbmZvLmR0cywgYXVkaW9CYXNlVGltZXN0YW1wKTtcbiAgICAgIGluZm8ucHRzID0gaGFuZGxlUm9sbG92ZXIoaW5mby5wdHMsIGF1ZGlvQmFzZVRpbWVzdGFtcCk7XG4gICAgICAvLyB0aW1lIGluIHNlY29uZHNcbiAgICAgIGluZm8uZHRzVGltZSA9IGluZm8uZHRzIC8gT05FX1NFQ09ORF9JTl9UUztcbiAgICAgIGluZm8ucHRzVGltZSA9IGluZm8ucHRzIC8gT05FX1NFQ09ORF9JTl9UUztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5mby52aWRlbyAmJiBzZWdtZW50SW5mby52aWRlby5sZW5ndGgpIHtcbiAgICB2YXIgdmlkZW9CYXNlVGltZXN0YW1wID0gYmFzZVRpbWVzdGFtcDtcbiAgICBpZiAodHlwZW9mIHZpZGVvQmFzZVRpbWVzdGFtcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZpZGVvQmFzZVRpbWVzdGFtcCA9IHNlZ21lbnRJbmZvLnZpZGVvWzBdLmR0cztcbiAgICB9XG4gICAgc2VnbWVudEluZm8udmlkZW8uZm9yRWFjaChmdW5jdGlvbihpbmZvKSB7XG4gICAgICBpbmZvLmR0cyA9IGhhbmRsZVJvbGxvdmVyKGluZm8uZHRzLCB2aWRlb0Jhc2VUaW1lc3RhbXApO1xuICAgICAgaW5mby5wdHMgPSBoYW5kbGVSb2xsb3ZlcihpbmZvLnB0cywgdmlkZW9CYXNlVGltZXN0YW1wKTtcbiAgICAgIC8vIHRpbWUgaW4gc2Vjb25kc1xuICAgICAgaW5mby5kdHNUaW1lID0gaW5mby5kdHMgLyBPTkVfU0VDT05EX0lOX1RTO1xuICAgICAgaW5mby5wdHNUaW1lID0gaW5mby5wdHMgLyBPTkVfU0VDT05EX0lOX1RTO1xuICAgIH0pO1xuICAgIGlmIChzZWdtZW50SW5mby5maXJzdEtleUZyYW1lKSB7XG4gICAgICB2YXIgZnJhbWUgPSBzZWdtZW50SW5mby5maXJzdEtleUZyYW1lO1xuICAgICAgZnJhbWUuZHRzID0gaGFuZGxlUm9sbG92ZXIoZnJhbWUuZHRzLCB2aWRlb0Jhc2VUaW1lc3RhbXApO1xuICAgICAgZnJhbWUucHRzID0gaGFuZGxlUm9sbG92ZXIoZnJhbWUucHRzLCB2aWRlb0Jhc2VUaW1lc3RhbXApO1xuICAgICAgLy8gdGltZSBpbiBzZWNvbmRzXG4gICAgICBmcmFtZS5kdHNUaW1lID0gZnJhbWUuZHRzIC8gT05FX1NFQ09ORF9JTl9UUztcbiAgICAgIGZyYW1lLnB0c1RpbWUgPSBmcmFtZS5kdHMgLyBPTkVfU0VDT05EX0lOX1RTO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBpbnNwZWN0cyB0aGUgYWFjIGRhdGEgc3RyZWFtIGZvciBzdGFydCBhbmQgZW5kIHRpbWUgaW5mb3JtYXRpb25cbiAqL1xudmFyIGluc3BlY3RBYWNfID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgdmFyXG4gICAgZW5kTG9vcCA9IGZhbHNlLFxuICAgIGF1ZGlvQ291bnQgPSAwLFxuICAgIHNhbXBsZVJhdGUgPSBudWxsLFxuICAgIHRpbWVzdGFtcCA9IG51bGwsXG4gICAgZnJhbWVTaXplID0gMCxcbiAgICBieXRlSW5kZXggPSAwLFxuICAgIHBhY2tldDtcblxuICB3aGlsZSAoYnl0ZXMubGVuZ3RoIC0gYnl0ZUluZGV4ID49IDMpIHtcbiAgICB2YXIgdHlwZSA9IHByb2JlLmFhYy5wYXJzZVR5cGUoYnl0ZXMsIGJ5dGVJbmRleCk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd0aW1lZC1tZXRhZGF0YSc6XG4gICAgICAgIC8vIEV4aXQgZWFybHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCB0byBwYXJzZVxuICAgICAgICAvLyB0aGUgSUQzIHRhZyBoZWFkZXJcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAtIGJ5dGVJbmRleCA8IDEwKSB7XG4gICAgICAgICAgZW5kTG9vcCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBmcmFtZVNpemUgPSBwcm9iZS5hYWMucGFyc2VJZDNUYWdTaXplKGJ5dGVzLCBieXRlSW5kZXgpO1xuXG4gICAgICAgIC8vIEV4aXQgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW4gdGhlIGJ1ZmZlclxuICAgICAgICAvLyB0byBlbWl0IGEgZnVsbCBwYWNrZXRcbiAgICAgICAgaWYgKGZyYW1lU2l6ZSA+IGJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgIGVuZExvb3AgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lc3RhbXAgPT09IG51bGwpIHtcbiAgICAgICAgICBwYWNrZXQgPSBieXRlcy5zdWJhcnJheShieXRlSW5kZXgsIGJ5dGVJbmRleCArIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgdGltZXN0YW1wID0gcHJvYmUuYWFjLnBhcnNlQWFjVGltZXN0YW1wKHBhY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZUluZGV4ICs9IGZyYW1lU2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIC8vIEV4aXQgZWFybHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCB0byBwYXJzZVxuICAgICAgICAvLyB0aGUgQURUUyBmcmFtZSBoZWFkZXJcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAtIGJ5dGVJbmRleCA8IDcpIHtcbiAgICAgICAgICBlbmRMb29wID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZyYW1lU2l6ZSA9IHByb2JlLmFhYy5wYXJzZUFkdHNTaXplKGJ5dGVzLCBieXRlSW5kZXgpO1xuXG4gICAgICAgIC8vIEV4aXQgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW4gdGhlIGJ1ZmZlclxuICAgICAgICAvLyB0byBlbWl0IGEgZnVsbCBwYWNrZXRcbiAgICAgICAgaWYgKGZyYW1lU2l6ZSA+IGJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgIGVuZExvb3AgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1wbGVSYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgcGFja2V0ID0gYnl0ZXMuc3ViYXJyYXkoYnl0ZUluZGV4LCBieXRlSW5kZXggKyBmcmFtZVNpemUpO1xuICAgICAgICAgIHNhbXBsZVJhdGUgPSBwcm9iZS5hYWMucGFyc2VTYW1wbGVSYXRlKHBhY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgYXVkaW9Db3VudCsrO1xuICAgICAgICBieXRlSW5kZXggKz0gZnJhbWVTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJ5dGVJbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGVuZExvb3ApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoc2FtcGxlUmF0ZSA9PT0gbnVsbCB8fCB0aW1lc3RhbXAgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhdWRpb1RpbWVzY2FsZSA9IE9ORV9TRUNPTkRfSU5fVFMgLyBzYW1wbGVSYXRlO1xuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgYXVkaW86IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2F1ZGlvJyxcbiAgICAgICAgZHRzOiB0aW1lc3RhbXAsXG4gICAgICAgIHB0czogdGltZXN0YW1wXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnYXVkaW8nLFxuICAgICAgICBkdHM6IHRpbWVzdGFtcCArIChhdWRpb0NvdW50ICogMTAyNCAqIGF1ZGlvVGltZXNjYWxlKSxcbiAgICAgICAgcHRzOiB0aW1lc3RhbXAgKyAoYXVkaW9Db3VudCAqIDEwMjQgKiBhdWRpb1RpbWVzY2FsZSlcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogaW5zcGVjdHMgdGhlIHRyYW5zcG9ydCBzdHJlYW0gc2VnbWVudCBkYXRhIGZvciBzdGFydCBhbmQgZW5kIHRpbWUgaW5mb3JtYXRpb25cbiAqIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzICh3aGVuIHByZXNlbnQpIGFzIHdlbGwgYXMgdGhlIGZpcnN0IGtleSBmcmFtZSdzXG4gKiBzdGFydCB0aW1lLlxuICovXG52YXIgaW5zcGVjdFRzXyA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIHZhciBwbXQgPSB7XG4gICAgcGlkOiBudWxsLFxuICAgIHRhYmxlOiBudWxsXG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIHBhcnNlUHNpXyhieXRlcywgcG10KTtcblxuICBmb3IgKHZhciBwaWQgaW4gcG10LnRhYmxlKSB7XG4gICAgaWYgKHBtdC50YWJsZS5oYXNPd25Qcm9wZXJ0eShwaWQpKSB7XG4gICAgICB2YXIgdHlwZSA9IHBtdC50YWJsZVtwaWRdO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgU3RyZWFtVHlwZXMuSDI2NF9TVFJFQU1fVFlQRTpcbiAgICAgICAgICByZXN1bHQudmlkZW8gPSBbXTtcbiAgICAgICAgICBwYXJzZVZpZGVvUGVzXyhieXRlcywgcG10LCByZXN1bHQpO1xuICAgICAgICAgIGlmIChyZXN1bHQudmlkZW8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgcmVzdWx0LnZpZGVvO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTdHJlYW1UeXBlcy5BRFRTX1NUUkVBTV9UWVBFOlxuICAgICAgICAgIHJlc3VsdC5hdWRpbyA9IFtdO1xuICAgICAgICAgIHBhcnNlQXVkaW9QZXNfKGJ5dGVzLCBwbXQsIHJlc3VsdCk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5hdWRpby5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZXN1bHQuYXVkaW87XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBJbnNwZWN0cyBzZWdtZW50IGJ5dGUgZGF0YSBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzdGFydCBhbmQgZW5kIHRpbWluZyBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgVGhlIHNlZ21lbnQgYnl0ZSBkYXRhXG4gKiBAcGFyYW0ge051bWJlcn0gYmFzZVRpbWVzdGFtcCBSZWxhdGl2ZSByZWZlcmVuY2UgdGltZXN0YW1wIHVzZWQgd2hlbiBhZGp1c3RpbmcgZnJhbWVcbiAqICB0aW1lc3RhbXBzIGZvciByb2xsb3Zlci4gVGhpcyB2YWx1ZSBtdXN0IGJlIGluIDkwa2h6IGNsb2NrLlxuICogQHJldHVybiB7T2JqZWN0fSBPYmplY3QgY29udGFpbmluZyBzdGFydCBhbmQgZW5kIGZyYW1lIHRpbWluZyBpbmZvIG9mIHNlZ21lbnQuXG4gKi9cbnZhciBpbnNwZWN0ID0gZnVuY3Rpb24oYnl0ZXMsIGJhc2VUaW1lc3RhbXApIHtcbiAgdmFyIGlzQWFjRGF0YSA9IHByb2JlLmFhYy5pc0xpa2VseUFhY0RhdGEoYnl0ZXMpO1xuXG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKGlzQWFjRGF0YSkge1xuICAgIHJlc3VsdCA9IGluc3BlY3RBYWNfKGJ5dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBpbnNwZWN0VHNfKGJ5dGVzKTtcbiAgfVxuXG4gIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmF1ZGlvICYmICFyZXN1bHQudmlkZW8pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhZGp1c3RUaW1lc3RhbXBfKHJlc3VsdCwgYmFzZVRpbWVzdGFtcCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbnNwZWN0OiBpbnNwZWN0LFxuICBwYXJzZUF1ZGlvUGVzXzogcGFyc2VBdWRpb1Blc19cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQVpBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBM0NBO0FBOENBOzs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0JBO0FBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQS9DQTtBQUNBO0FBQ0E7QUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBZEE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQS9CQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQTdGQTtBQWdHQTs7Ozs7OztBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBcERBO0FBQ0E7QUFzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwRUE7QUF3RUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBekZBO0FBQ0E7QUFDQTtBQTJGQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUJBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBdElBO0FBeUlBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBc0NBOzs7OztBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFoREE7QUFDQTtBQWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBUEE7QUFlQTtBQXZGQTtBQTBGQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQUE7QUFqQ0E7QUFvQ0E7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWpCQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/tools/ts-inspector.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/utils/bin.js": -/*!***********************************************!*\ - !*** ../node_modules/mux.js/lib/utils/bin.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\nvar toUnsigned = function toUnsigned(value) {\n return value >>> 0;\n};\n\nvar toHexString = function toHexString(value) {\n return ('00' + value.toString(16)).slice(-2);\n};\n\nmodule.exports = {\n toUnsigned: toUnsigned,\n toHexString: toHexString\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdXRpbHMvYmluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL3V0aWxzL2Jpbi5qcz9kZjA3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cbnZhciB0b1Vuc2lnbmVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID4+PiAwO1xufTtcblxudmFyIHRvSGV4U3RyaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICgnMDAnICsgdmFsdWUudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdG9VbnNpZ25lZDogdG9VbnNpZ25lZCxcbiAgdG9IZXhTdHJpbmc6IHRvSGV4U3RyaW5nXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBTUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/utils/bin.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/utils/clock.js": -/*!*************************************************!*\ - !*** ../node_modules/mux.js/lib/utils/clock.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\nvar ONE_SECOND_IN_TS = 90000,\n // 90kHz clock\nsecondsToVideoTs,\n secondsToAudioTs,\n videoTsToSeconds,\n audioTsToSeconds,\n audioTsToVideoTs,\n videoTsToAudioTs,\n metadataTsToSeconds;\n\nsecondsToVideoTs = function secondsToVideoTs(seconds) {\n return seconds * ONE_SECOND_IN_TS;\n};\n\nsecondsToAudioTs = function secondsToAudioTs(seconds, sampleRate) {\n return seconds * sampleRate;\n};\n\nvideoTsToSeconds = function videoTsToSeconds(timestamp) {\n return timestamp / ONE_SECOND_IN_TS;\n};\n\naudioTsToSeconds = function audioTsToSeconds(timestamp, sampleRate) {\n return timestamp / sampleRate;\n};\n\naudioTsToVideoTs = function audioTsToVideoTs(timestamp, sampleRate) {\n return secondsToVideoTs(audioTsToSeconds(timestamp, sampleRate));\n};\n\nvideoTsToAudioTs = function videoTsToAudioTs(timestamp, sampleRate) {\n return secondsToAudioTs(videoTsToSeconds(timestamp), sampleRate);\n};\n/**\n * Adjust ID3 tag or caption timing information by the timeline pts values\n * (if keepOriginalTimestamps is false) and convert to seconds\n */\n\n\nmetadataTsToSeconds = function metadataTsToSeconds(timestamp, timelineStartPts, keepOriginalTimestamps) {\n return videoTsToSeconds(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts);\n};\n\nmodule.exports = {\n ONE_SECOND_IN_TS: ONE_SECOND_IN_TS,\n secondsToVideoTs: secondsToVideoTs,\n secondsToAudioTs: secondsToAudioTs,\n videoTsToSeconds: videoTsToSeconds,\n audioTsToSeconds: audioTsToSeconds,\n audioTsToVideoTs: audioTsToVideoTs,\n videoTsToAudioTs: videoTsToAudioTs,\n metadataTsToSeconds: metadataTsToSeconds\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdXRpbHMvY2xvY2suanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdXRpbHMvY2xvY2suanM/OTIyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG11eC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICogTGljZW5zZWQgQXBhY2hlLTIuMCBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy9tdXguanMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG52YXJcbiAgT05FX1NFQ09ORF9JTl9UUyA9IDkwMDAwLCAvLyA5MGtIeiBjbG9ja1xuICBzZWNvbmRzVG9WaWRlb1RzLFxuICBzZWNvbmRzVG9BdWRpb1RzLFxuICB2aWRlb1RzVG9TZWNvbmRzLFxuICBhdWRpb1RzVG9TZWNvbmRzLFxuICBhdWRpb1RzVG9WaWRlb1RzLFxuICB2aWRlb1RzVG9BdWRpb1RzLFxuICBtZXRhZGF0YVRzVG9TZWNvbmRzO1xuXG5zZWNvbmRzVG9WaWRlb1RzID0gZnVuY3Rpb24oc2Vjb25kcykge1xuICByZXR1cm4gc2Vjb25kcyAqIE9ORV9TRUNPTkRfSU5fVFM7XG59O1xuXG5zZWNvbmRzVG9BdWRpb1RzID0gZnVuY3Rpb24oc2Vjb25kcywgc2FtcGxlUmF0ZSkge1xuICByZXR1cm4gc2Vjb25kcyAqIHNhbXBsZVJhdGU7XG59O1xuXG52aWRlb1RzVG9TZWNvbmRzID0gZnVuY3Rpb24odGltZXN0YW1wKSB7XG4gIHJldHVybiB0aW1lc3RhbXAgLyBPTkVfU0VDT05EX0lOX1RTO1xufTtcblxuYXVkaW9Uc1RvU2Vjb25kcyA9IGZ1bmN0aW9uKHRpbWVzdGFtcCwgc2FtcGxlUmF0ZSkge1xuICByZXR1cm4gdGltZXN0YW1wIC8gc2FtcGxlUmF0ZTtcbn07XG5cbmF1ZGlvVHNUb1ZpZGVvVHMgPSBmdW5jdGlvbih0aW1lc3RhbXAsIHNhbXBsZVJhdGUpIHtcbiAgcmV0dXJuIHNlY29uZHNUb1ZpZGVvVHMoYXVkaW9Uc1RvU2Vjb25kcyh0aW1lc3RhbXAsIHNhbXBsZVJhdGUpKTtcbn07XG5cbnZpZGVvVHNUb0F1ZGlvVHMgPSBmdW5jdGlvbih0aW1lc3RhbXAsIHNhbXBsZVJhdGUpIHtcbiAgcmV0dXJuIHNlY29uZHNUb0F1ZGlvVHModmlkZW9Uc1RvU2Vjb25kcyh0aW1lc3RhbXApLCBzYW1wbGVSYXRlKTtcbn07XG5cbi8qKlxuICogQWRqdXN0IElEMyB0YWcgb3IgY2FwdGlvbiB0aW1pbmcgaW5mb3JtYXRpb24gYnkgdGhlIHRpbWVsaW5lIHB0cyB2YWx1ZXNcbiAqIChpZiBrZWVwT3JpZ2luYWxUaW1lc3RhbXBzIGlzIGZhbHNlKSBhbmQgY29udmVydCB0byBzZWNvbmRzXG4gKi9cbm1ldGFkYXRhVHNUb1NlY29uZHMgPSBmdW5jdGlvbih0aW1lc3RhbXAsIHRpbWVsaW5lU3RhcnRQdHMsIGtlZXBPcmlnaW5hbFRpbWVzdGFtcHMpIHtcbiAgcmV0dXJuIHZpZGVvVHNUb1NlY29uZHMoa2VlcE9yaWdpbmFsVGltZXN0YW1wcyA/IHRpbWVzdGFtcCA6IHRpbWVzdGFtcCAtIHRpbWVsaW5lU3RhcnRQdHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE9ORV9TRUNPTkRfSU5fVFM6IE9ORV9TRUNPTkRfSU5fVFMsXG4gIHNlY29uZHNUb1ZpZGVvVHM6IHNlY29uZHNUb1ZpZGVvVHMsXG4gIHNlY29uZHNUb0F1ZGlvVHM6IHNlY29uZHNUb0F1ZGlvVHMsXG4gIHZpZGVvVHNUb1NlY29uZHM6IHZpZGVvVHNUb1NlY29uZHMsXG4gIGF1ZGlvVHNUb1NlY29uZHM6IGF1ZGlvVHNUb1NlY29uZHMsXG4gIGF1ZGlvVHNUb1ZpZGVvVHM6IGF1ZGlvVHNUb1ZpZGVvVHMsXG4gIHZpZGVvVHNUb0F1ZGlvVHM6IHZpZGVvVHNUb0F1ZGlvVHMsXG4gIG1ldGFkYXRhVHNUb1NlY29uZHM6IG1ldGFkYXRhVHNUb1NlY29uZHNcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFJQTs7Ozs7O0FBSUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/utils/clock.js\n"); - -/***/ }), - -/***/ "../node_modules/mux.js/lib/utils/stream.js": -/*!**************************************************!*\ - !*** ../node_modules/mux.js/lib/utils/stream.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A lightweight readable stream implemention that handles event dispatching.\n * Objects that inherit from streams should call init in their constructors.\n */\n\n\nvar Stream = function Stream() {\n this.init = function () {\n var listeners = {};\n /**\n * Add a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} the callback to be invoked when an event of\n * the specified type occurs\n */\n\n this.on = function (type, listener) {\n if (!listeners[type]) {\n listeners[type] = [];\n }\n\n listeners[type] = listeners[type].concat(listener);\n };\n /**\n * Remove a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} a function previously registered for this\n * type of event through `on`\n */\n\n\n this.off = function (type, listener) {\n var index;\n\n if (!listeners[type]) {\n return false;\n }\n\n index = listeners[type].indexOf(listener);\n listeners[type] = listeners[type].slice();\n listeners[type].splice(index, 1);\n return index > -1;\n };\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n * @param type {string} the event name\n */\n\n\n this.trigger = function (type) {\n var callbacks, i, length, args;\n callbacks = listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n length = callbacks.length;\n\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = [];\n i = arguments.length;\n\n for (i = 1; i < arguments.length; ++i) {\n args.push(arguments[i]);\n }\n\n length = callbacks.length;\n\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n };\n /**\n * Destroys the stream and cleans up.\n */\n\n\n this.dispose = function () {\n listeners = {};\n };\n };\n};\n/**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n * @param destination {stream} the stream that will receive all `data` events\n * @param autoFlush {boolean} if false, we will not call `flush` on the destination\n * when the current stream emits a 'done' event\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n\n\nStream.prototype.pipe = function (destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n this.on('done', function (flushSource) {\n destination.flush(flushSource);\n });\n this.on('partialdone', function (flushSource) {\n destination.partialFlush(flushSource);\n });\n this.on('endedtimeline', function (flushSource) {\n destination.endTimeline(flushSource);\n });\n this.on('reset', function (flushSource) {\n destination.reset(flushSource);\n });\n return destination;\n}; // Default stream functions that are expected to be overridden to perform\n// actual work. These are provided by the prototype as a sort of no-op\n// implementation so that we don't have to check for their existence in the\n// `pipe` function above.\n\n\nStream.prototype.push = function (data) {\n this.trigger('data', data);\n};\n\nStream.prototype.flush = function (flushSource) {\n this.trigger('done', flushSource);\n};\n\nStream.prototype.partialFlush = function (flushSource) {\n this.trigger('partialdone', flushSource);\n};\n\nStream.prototype.endTimeline = function (flushSource) {\n this.trigger('endedtimeline', flushSource);\n};\n\nStream.prototype.reset = function (flushSource) {\n this.trigger('reset', flushSource);\n};\n\nmodule.exports = Stream;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL211eC5qcy9saWIvdXRpbHMvc3RyZWFtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tdXguanMvbGliL3V0aWxzL3N0cmVhbS5qcz9lNGExIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbXV4LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCBBcGFjaGUtMi4wIGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL211eC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogQSBsaWdodHdlaWdodCByZWFkYWJsZSBzdHJlYW0gaW1wbGVtZW50aW9uIHRoYXQgaGFuZGxlcyBldmVudCBkaXNwYXRjaGluZy5cbiAqIE9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gc3RyZWFtcyBzaG91bGQgY2FsbCBpbml0IGluIHRoZWlyIGNvbnN0cnVjdG9ycy5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3RyZWFtID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsaXN0ZW5lcnMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICAgKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSB0aGUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSBsaXN0ZW5lciB7ZnVuY3Rpb259IHRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYW4gZXZlbnQgb2ZcbiAgICAgKiB0aGUgc3BlY2lmaWVkIHR5cGUgb2NjdXJzXG4gICAgICovXG4gICAgdGhpcy5vbiA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoIWxpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyc1t0eXBlXSA9IGxpc3RlbmVyc1t0eXBlXS5jb25jYXQobGlzdGVuZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHR5cGUge3N0cmluZ30gdGhlIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0gbGlzdGVuZXIge2Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBmb3IgdGhpc1xuICAgICAqIHR5cGUgb2YgZXZlbnQgdGhyb3VnaCBgb25gXG4gICAgICovXG4gICAgdGhpcy5vZmYgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGluZGV4O1xuICAgICAgaWYgKCFsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW5kZXggPSBsaXN0ZW5lcnNbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcnNbdHlwZV0uc2xpY2UoKTtcbiAgICAgIGxpc3RlbmVyc1t0eXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIGluZGV4ID4gLTE7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBvbiB0aGlzIHN0cmVhbS4gQW55IGFkZGl0aW9uYWxcbiAgICAgKiBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8gZXZlbnQgbGlzdGVuZXJzLlxuICAgICAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IHRoZSBldmVudCBuYW1lXG4gICAgICovXG4gICAgdGhpcy50cmlnZ2VyID0gZnVuY3Rpb24odHlwZSkge1xuICAgICAgdmFyIGNhbGxiYWNrcywgaSwgbGVuZ3RoLCBhcmdzO1xuICAgICAgY2FsbGJhY2tzID0gbGlzdGVuZXJzW3R5cGVdO1xuICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU2xpY2luZyB0aGUgYXJndW1lbnRzIG9uIGV2ZXJ5IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2RcbiAgICAgIC8vIGNhbiBhZGQgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygb3ZlcmhlYWQuIEF2b2lkIHRoZVxuICAgICAgLy8gaW50ZXJtZWRpYXRlIG9iamVjdCBjcmVhdGlvbiBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFcbiAgICAgIC8vIHNpbmdsZSBjYWxsYmFjayBhcmd1bWVudFxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNhbGxiYWNrc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIHN0cmVhbSBhbmQgY2xlYW5zIHVwLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgbGlzdGVuZXJzID0ge307XG4gICAgfTtcbiAgfTtcbn07XG5cbi8qKlxuICogRm9yd2FyZHMgYWxsIGBkYXRhYCBldmVudHMgb24gdGhpcyBzdHJlYW0gdG8gdGhlIGRlc3RpbmF0aW9uIHN0cmVhbS4gVGhlXG4gKiBkZXN0aW5hdGlvbiBzdHJlYW0gc2hvdWxkIHByb3ZpZGUgYSBtZXRob2QgYHB1c2hgIHRvIHJlY2VpdmUgdGhlIGRhdGFcbiAqIGV2ZW50cyBhcyB0aGV5IGFycml2ZS5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiB7c3RyZWFtfSB0aGUgc3RyZWFtIHRoYXQgd2lsbCByZWNlaXZlIGFsbCBgZGF0YWAgZXZlbnRzXG4gKiBAcGFyYW0gYXV0b0ZsdXNoIHtib29sZWFufSBpZiBmYWxzZSwgd2Ugd2lsbCBub3QgY2FsbCBgZmx1c2hgIG9uIHRoZSBkZXN0aW5hdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgY3VycmVudCBzdHJlYW0gZW1pdHMgYSAnZG9uZScgZXZlbnRcbiAqIEBzZWUgaHR0cDovL25vZGVqcy5vcmcvYXBpL3N0cmVhbS5odG1sI3N0cmVhbV9yZWFkYWJsZV9waXBlX2Rlc3RpbmF0aW9uX29wdGlvbnNcbiAqL1xuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdGluYXRpb24pIHtcbiAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICBkZXN0aW5hdGlvbi5wdXNoKGRhdGEpO1xuICB9KTtcblxuICB0aGlzLm9uKCdkb25lJywgZnVuY3Rpb24oZmx1c2hTb3VyY2UpIHtcbiAgICBkZXN0aW5hdGlvbi5mbHVzaChmbHVzaFNvdXJjZSk7XG4gIH0pO1xuXG4gIHRoaXMub24oJ3BhcnRpYWxkb25lJywgZnVuY3Rpb24oZmx1c2hTb3VyY2UpIHtcbiAgICBkZXN0aW5hdGlvbi5wYXJ0aWFsRmx1c2goZmx1c2hTb3VyY2UpO1xuICB9KTtcblxuICB0aGlzLm9uKCdlbmRlZHRpbWVsaW5lJywgZnVuY3Rpb24oZmx1c2hTb3VyY2UpIHtcbiAgICBkZXN0aW5hdGlvbi5lbmRUaW1lbGluZShmbHVzaFNvdXJjZSk7XG4gIH0pO1xuXG4gIHRoaXMub24oJ3Jlc2V0JywgZnVuY3Rpb24oZmx1c2hTb3VyY2UpIHtcbiAgICBkZXN0aW5hdGlvbi5yZXNldChmbHVzaFNvdXJjZSk7XG4gIH0pO1xuXG4gIHJldHVybiBkZXN0aW5hdGlvbjtcbn07XG5cbi8vIERlZmF1bHQgc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBvdmVycmlkZGVuIHRvIHBlcmZvcm1cbi8vIGFjdHVhbCB3b3JrLiBUaGVzZSBhcmUgcHJvdmlkZWQgYnkgdGhlIHByb3RvdHlwZSBhcyBhIHNvcnQgb2Ygbm8tb3Bcbi8vIGltcGxlbWVudGF0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3IgdGhlaXIgZXhpc3RlbmNlIGluIHRoZVxuLy8gYHBpcGVgIGZ1bmN0aW9uIGFib3ZlLlxuU3RyZWFtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBkYXRhKTtcbn07XG5cblN0cmVhbS5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihmbHVzaFNvdXJjZSkge1xuICB0aGlzLnRyaWdnZXIoJ2RvbmUnLCBmbHVzaFNvdXJjZSk7XG59O1xuXG5TdHJlYW0ucHJvdG90eXBlLnBhcnRpYWxGbHVzaCA9IGZ1bmN0aW9uKGZsdXNoU291cmNlKSB7XG4gIHRoaXMudHJpZ2dlcigncGFydGlhbGRvbmUnLCBmbHVzaFNvdXJjZSk7XG59O1xuXG5TdHJlYW0ucHJvdG90eXBlLmVuZFRpbWVsaW5lID0gZnVuY3Rpb24oZmx1c2hTb3VyY2UpIHtcbiAgdGhpcy50cmlnZ2VyKCdlbmRlZHRpbWVsaW5lJywgZmx1c2hTb3VyY2UpO1xufTtcblxuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGZsdXNoU291cmNlKSB7XG4gIHRoaXMudHJpZ2dlcigncmVzZXQnLCBmbHVzaFNvdXJjZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBMkJBOzs7OztBQUdBO0FBQ0E7QUFEQTtBQWpFQTtBQURBO0FBd0VBOzs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBSUE7QUFyQkE7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/mux.js/lib/utils/stream.js\n"); - -/***/ }), - -/***/ "../node_modules/node-emoji/index.js": -/*!*******************************************!*\ - !*** ../node_modules/node-emoji/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! ./lib/emoji */ \"../node_modules/node-emoji/lib/emoji.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL25vZGUtZW1vamkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL25vZGUtZW1vamkvaW5kZXguanM/ZjAyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2Vtb2ppJyk7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/node-emoji/index.js\n"); - -/***/ }), - -/***/ "../node_modules/node-emoji/lib/emoji.js": -/*!***********************************************!*\ - !*** ../node_modules/node-emoji/lib/emoji.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/*jslint node: true*/\nvar toArray = __webpack_require__(/*! lodash.toarray */ \"../node_modules/lodash.toarray/index.js\");\n\nvar emojiByName = __webpack_require__(/*! ./emoji.json */ \"../node_modules/node-emoji/lib/emoji.json\");\n\n\"use strict\";\n/**\n * regex to parse emoji in a string - finds emoji, e.g. :coffee:\n */\n\n\nvar emojiNameRegex = /:([a-zA-Z0-9_\\-\\+]+):/g;\n/**\n * regex to trim whitespace\n * use instead of String.prototype.trim() for IE8 support\n */\n\nvar trimSpaceRegex = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n/**\n * Removes colons on either side\n * of the string if present\n * @param {string} str\n * @return {string}\n */\n\nfunction stripColons(str) {\n var colonIndex = str.indexOf(':');\n\n if (colonIndex > -1) {\n // :emoji: (http://www.emoji-cheat-sheet.com/)\n if (colonIndex === str.length - 1) {\n str = str.substring(0, colonIndex);\n return stripColons(str);\n } else {\n str = str.substr(colonIndex + 1);\n return stripColons(str);\n }\n }\n\n return str;\n}\n/**\n * Adds colons to either side\n * of the string\n * @param {string} str\n * @return {string}\n */\n\n\nfunction wrapColons(str) {\n return typeof str === 'string' && str.length > 0 ? ':' + str + ':' : str;\n}\n/**\n * Ensure that the word is wrapped in colons\n * by only adding them, if they are not there.\n * @param {string} str\n * @return {string}\n */\n\n\nfunction ensureColons(str) {\n return typeof str === 'string' && str[0] !== ':' ? wrapColons(str) : str;\n} // Non spacing mark, some emoticons have them. It's the 'Variant Form',\n// which provides more information so that emoticons can be rendered as\n// more colorful graphics. FE0E is a unicode text version, where as FE0F\n// should be rendered as a graphical version. The code gracefully degrades.\n\n\nvar NON_SPACING_MARK = String.fromCharCode(65039); // 65039 - '️' - 0xFE0F;\n\nvar nonSpacingRegex = new RegExp(NON_SPACING_MARK, 'g'); // Remove the non-spacing-mark from the code, never send a stripped version\n// to the client, as it kills graphical emoticons.\n\nfunction stripNSB(code) {\n return code.replace(nonSpacingRegex, '');\n}\n\n; // Reversed hash table, where as emojiByName contains a { heart: '❤' }\n// dictionary emojiByCode contains { ❤: 'heart' }. The codes are normalized\n// to the text version.\n\nvar emojiByCode = Object.keys(emojiByName).reduce(function (h, k) {\n h[stripNSB(emojiByName[k])] = k;\n return h;\n}, {});\n/**\n * Emoji namespace\n */\n\nvar Emoji = {\n emoji: emojiByName\n};\n/**\n * get emoji code from name\n * @param {string} emoji\n * @return {string}\n */\n\nEmoji._get = function _get(emoji) {\n if (emojiByName.hasOwnProperty(emoji)) {\n return emojiByName[emoji];\n }\n\n return ensureColons(emoji);\n};\n/**\n * get emoji code from :emoji: string or name\n * @param {string} emoji\n * @return {string}\n */\n\n\nEmoji.get = function get(emoji) {\n emoji = stripColons(emoji);\n return Emoji._get(emoji);\n};\n/**\n * find the emoji by either code or name\n * @param {string} nameOrCode The emoji to find, either `coffee`, `:coffee:` or `☕`;\n * @return {object}\n */\n\n\nEmoji.find = function find(nameOrCode) {\n return Emoji.findByName(nameOrCode) || Emoji.findByCode(nameOrCode);\n};\n/**\n * find the emoji by name\n * @param {string} name The emoji to find either `coffee` or `:coffee:`;\n * @return {object}\n */\n\n\nEmoji.findByName = function findByName(name) {\n var stripped = stripColons(name);\n var emoji = emojiByName[stripped];\n return emoji ? {\n emoji: emoji,\n key: stripped\n } : undefined;\n};\n/**\n * find the emoji by code (emoji)\n * @param {string} code The emoji to find; for example `☕` or `☔`\n * @return {object}\n */\n\n\nEmoji.findByCode = function findByCode(code) {\n var stripped = stripNSB(code);\n var name = emojiByCode[stripped]; // lookup emoji to ensure the Variant Form is returned\n\n return name ? {\n emoji: emojiByName[name],\n key: name\n } : undefined;\n};\n/**\n * Check if an emoji is known by this library\n * @param {string} nameOrCode The emoji to validate, either `coffee`, `:coffee:` or `☕`;\n * @return {object}\n */\n\n\nEmoji.hasEmoji = function hasEmoji(nameOrCode) {\n return Emoji.hasEmojiByName(nameOrCode) || Emoji.hasEmojiByCode(nameOrCode);\n};\n/**\n * Check if an emoji with given name is known by this library\n * @param {string} name The emoji to validate either `coffee` or `:coffee:`;\n * @return {object}\n */\n\n\nEmoji.hasEmojiByName = function hasEmojiByName(name) {\n var result = Emoji.findByName(name);\n return !!result && result.key === stripColons(name);\n};\n/**\n * Check if a given emoji is known by this library\n * @param {string} code The emoji to validate; for example `☕` or `☔`\n * @return {object}\n */\n\n\nEmoji.hasEmojiByCode = function hasEmojiByCode(code) {\n var result = Emoji.findByCode(code);\n return !!result && stripNSB(result.emoji) === stripNSB(code);\n};\n/**\n * get emoji name from code\n * @param {string} emoji\n * @param {boolean} includeColons should the result include the ::\n * @return {string}\n */\n\n\nEmoji.which = function which(emoji_code, includeColons) {\n var code = stripNSB(emoji_code);\n var word = emojiByCode[code];\n return includeColons ? wrapColons(word) : word;\n};\n/**\n * emojify a string (replace :emoji: with an emoji)\n * @param {string} str\n * @param {function} on_missing (gets emoji name without :: and returns a proper emoji if no emoji was found)\n * @param {function} format (wrap the returned emoji in a custom element)\n * @return {string}\n */\n\n\nEmoji.emojify = function emojify(str, on_missing, format) {\n if (!str) return '';\n return str.split(emojiNameRegex) // parse emoji via regex\n .map(function parseEmoji(s, i) {\n // every second element is an emoji, e.g. \"test :fast_forward:\" -> [ \"test \", \"fast_forward\" ]\n if (i % 2 === 0) return s;\n\n var emoji = Emoji._get(s);\n\n var isMissing = emoji.indexOf(':') > -1;\n\n if (isMissing && typeof on_missing === 'function') {\n return on_missing(s);\n }\n\n if (!isMissing && typeof format === 'function') {\n return format(emoji, s);\n }\n\n return emoji;\n }).join('') // convert back to string\n ;\n};\n/**\n * return a random emoji\n * @return {string}\n */\n\n\nEmoji.random = function random() {\n var emojiKeys = Object.keys(emojiByName);\n var randomIndex = Math.floor(Math.random() * emojiKeys.length);\n var key = emojiKeys[randomIndex];\n\n var emoji = Emoji._get(key);\n\n return {\n key: key,\n emoji: emoji\n };\n};\n/**\n * return an collection of potential emoji matches\n * @param {string} str\n * @return {Array.<Object>}\n */\n\n\nEmoji.search = function search(str) {\n var emojiKeys = Object.keys(emojiByName);\n var matcher = stripColons(str);\n var matchingKeys = emojiKeys.filter(function (key) {\n return key.toString().indexOf(matcher) === 0;\n });\n return matchingKeys.map(function (key) {\n return {\n key: key,\n emoji: Emoji._get(key)\n };\n });\n};\n/**\n * unemojify a string (replace emoji with :emoji:)\n * @param {string} str\n * @return {string}\n */\n\n\nEmoji.unemojify = function unemojify(str) {\n if (!str) return '';\n var words = toArray(str);\n return words.map(function (word) {\n return Emoji.which(word, true) || word;\n }).join('');\n};\n/**\n * replace emojis with replacement value\n * @param {string} str\n * @param {function|string} the string or callback function to replace the emoji with\n * @param {boolean} should trailing whitespaces be cleaned? Defaults false\n * @return {string}\n */\n\n\nEmoji.replace = function replace(str, replacement, cleanSpaces) {\n if (!str) return '';\n var replace = typeof replacement === 'function' ? replacement : function () {\n return replacement;\n };\n var words = toArray(str);\n var replaced = words.map(function (word, idx) {\n var emoji = Emoji.findByCode(word);\n\n if (emoji && cleanSpaces && words[idx + 1] === ' ') {\n words[idx + 1] = '';\n }\n\n return emoji ? replace(emoji) : word;\n }).join('');\n return cleanSpaces ? replaced.replace(trimSpaceRegex, '') : replaced;\n};\n/**\n * remove all emojis from a string\n * @param {string} str\n * @return {string}\n */\n\n\nEmoji.strip = function strip(str) {\n return Emoji.replace(str, '', true);\n};\n\nmodule.exports = Emoji;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL25vZGUtZW1vamkvbGliL2Vtb2ppLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ub2RlLWVtb2ppL2xpYi9lbW9qaS5qcz81Y2JmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qanNsaW50IG5vZGU6IHRydWUqL1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gudG9hcnJheScpO1xudmFyIGVtb2ppQnlOYW1lID0gcmVxdWlyZSgnLi9lbW9qaS5qc29uJyk7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIHJlZ2V4IHRvIHBhcnNlIGVtb2ppIGluIGEgc3RyaW5nIC0gZmluZHMgZW1vamksIGUuZy4gOmNvZmZlZTpcbiAqL1xudmFyIGVtb2ppTmFtZVJlZ2V4ID0gLzooW2EtekEtWjAtOV9cXC1cXCtdKyk6L2c7XG5cbi8qKlxuICogcmVnZXggdG8gdHJpbSB3aGl0ZXNwYWNlXG4gKiB1c2UgaW5zdGVhZCBvZiBTdHJpbmcucHJvdG90eXBlLnRyaW0oKSBmb3IgSUU4IHN1cHBvcnRcbiAqL1xudmFyIHRyaW1TcGFjZVJlZ2V4ID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgY29sb25zIG9uIGVpdGhlciBzaWRlXG4gKiBvZiB0aGUgc3RyaW5nIGlmIHByZXNlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ29sb25zIChzdHIpIHtcbiAgdmFyIGNvbG9uSW5kZXggPSBzdHIuaW5kZXhPZignOicpO1xuICBpZiAoY29sb25JbmRleCA+IC0xKSB7XG4gICAgLy8gOmVtb2ppOiAoaHR0cDovL3d3dy5lbW9qaS1jaGVhdC1zaGVldC5jb20vKVxuICAgIGlmIChjb2xvbkluZGV4ID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogQWRkcyBjb2xvbnMgdG8gZWl0aGVyIHNpZGVcbiAqIG9mIHRoZSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd3JhcENvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyLmxlbmd0aCA+IDApID8gJzonICsgc3RyICsgJzonIDogc3RyO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSB3b3JkIGlzIHdyYXBwZWQgaW4gY29sb25zXG4gKiBieSBvbmx5IGFkZGluZyB0aGVtLCBpZiB0aGV5IGFyZSBub3QgdGhlcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyWzBdICE9PSAnOicpID8gd3JhcENvbG9ucyhzdHIpIDogc3RyO1xufVxuXG4vLyBOb24gc3BhY2luZyBtYXJrLCBzb21lIGVtb3RpY29ucyBoYXZlIHRoZW0uIEl0J3MgdGhlICdWYXJpYW50IEZvcm0nLFxuLy8gd2hpY2ggcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGlvbiBzbyB0aGF0IGVtb3RpY29ucyBjYW4gYmUgcmVuZGVyZWQgYXNcbi8vIG1vcmUgY29sb3JmdWwgZ3JhcGhpY3MuIEZFMEUgaXMgYSB1bmljb2RlIHRleHQgdmVyc2lvbiwgd2hlcmUgYXMgRkUwRlxuLy8gc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZ3JhcGhpY2FsIHZlcnNpb24uIFRoZSBjb2RlIGdyYWNlZnVsbHkgZGVncmFkZXMuXG52YXIgTk9OX1NQQUNJTkdfTUFSSyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjUwMzkpOyAvLyA2NTAzOSAtICfvuI8nIC0gMHhGRTBGO1xudmFyIG5vblNwYWNpbmdSZWdleCA9IG5ldyBSZWdFeHAoTk9OX1NQQUNJTkdfTUFSSywgJ2cnKVxuXG4vLyBSZW1vdmUgdGhlIG5vbi1zcGFjaW5nLW1hcmsgZnJvbSB0aGUgY29kZSwgbmV2ZXIgc2VuZCBhIHN0cmlwcGVkIHZlcnNpb25cbi8vIHRvIHRoZSBjbGllbnQsIGFzIGl0IGtpbGxzIGdyYXBoaWNhbCBlbW90aWNvbnMuXG5mdW5jdGlvbiBzdHJpcE5TQiAoY29kZSkge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKG5vblNwYWNpbmdSZWdleCwgJycpO1xufTtcblxuLy8gUmV2ZXJzZWQgaGFzaCB0YWJsZSwgd2hlcmUgYXMgZW1vamlCeU5hbWUgY29udGFpbnMgYSB7IGhlYXJ0OiAn4p2kJyB9XG4vLyBkaWN0aW9uYXJ5IGVtb2ppQnlDb2RlIGNvbnRhaW5zIHsg4p2kOiAnaGVhcnQnIH0uIFRoZSBjb2RlcyBhcmUgbm9ybWFsaXplZFxuLy8gdG8gdGhlIHRleHQgdmVyc2lvbi5cbnZhciBlbW9qaUJ5Q29kZSA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKS5yZWR1Y2UoZnVuY3Rpb24oaCxrKSB7XG4gIGhbc3RyaXBOU0IoZW1vamlCeU5hbWVba10pXSA9IGs7XG4gIHJldHVybiBoO1xufSwge30pO1xuXG4vKipcbiAqIEVtb2ppIG5hbWVzcGFjZVxuICovXG52YXIgRW1vamkgPSB7XG4gIGVtb2ppOiBlbW9qaUJ5TmFtZSxcbn07XG5cbi8qKlxuICogZ2V0IGVtb2ppIGNvZGUgZnJvbSBuYW1lXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGVtb2ppXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbkVtb2ppLl9nZXQgPSBmdW5jdGlvbiBfZ2V0IChlbW9qaSkge1xuICBpZiAoZW1vamlCeU5hbWUuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgcmV0dXJuIGVtb2ppQnlOYW1lW2Vtb2ppXTtcbiAgfVxuXG4gIHJldHVybiBlbnN1cmVDb2xvbnMoZW1vamkpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgY29kZSBmcm9tIDplbW9qaTogc3RyaW5nIG9yIG5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkuZ2V0ID0gZnVuY3Rpb24gZ2V0IChlbW9qaSkge1xuICBlbW9qaSA9IHN0cmlwQ29sb25zKGVtb2ppKTtcblxuICByZXR1cm4gRW1vamkuX2dldChlbW9qaSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IGVpdGhlciBjb2RlIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JDb2RlIFRoZSBlbW9qaSB0byBmaW5kLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmZpbmQgPSBmdW5jdGlvbiBmaW5kIChuYW1lT3JDb2RlKSB7XG4gIHJldHVybiBFbW9qaS5maW5kQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmZpbmRCeUNvZGUobmFtZU9yQ29kZSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBlbW9qaSB0byBmaW5kIGVpdGhlciBgY29mZmVlYCBvciBgOmNvZmZlZTpgO1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5FbW9qaS5maW5kQnlOYW1lID0gZnVuY3Rpb24gZmluZEJ5TmFtZSAobmFtZSkge1xuICB2YXIgc3RyaXBwZWQgPSBzdHJpcENvbG9ucyhuYW1lKTtcbiAgdmFyIGVtb2ppID0gZW1vamlCeU5hbWVbc3RyaXBwZWRdO1xuXG4gIHJldHVybiBlbW9qaSA/ICh7IGVtb2ppOiBlbW9qaSwga2V5OiBzdHJpcHBlZCB9KSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogZmluZCB0aGUgZW1vamkgYnkgY29kZSAoZW1vamkpXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgZW1vamkgdG8gZmluZDsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuZmluZEJ5Q29kZSA9IGZ1bmN0aW9uIGZpbmRCeUNvZGUgKGNvZGUpIHtcbiAgdmFyIHN0cmlwcGVkID0gc3RyaXBOU0IoY29kZSk7XG4gIHZhciBuYW1lID0gZW1vamlCeUNvZGVbc3RyaXBwZWRdO1xuXG4gIC8vIGxvb2t1cCBlbW9qaSB0byBlbnN1cmUgdGhlIFZhcmlhbnQgRm9ybSBpcyByZXR1cm5lZFxuICByZXR1cm4gbmFtZSA/ICh7IGVtb2ppOiBlbW9qaUJ5TmFtZVtuYW1lXSwga2V5OiBuYW1lIH0pIDogdW5kZWZpbmVkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVtb2ppIGlzIGtub3duIGJ5IHRoaXMgbGlicmFyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPckNvZGUgVGhlIGVtb2ppIHRvIHZhbGlkYXRlLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppID0gZnVuY3Rpb24gaGFzRW1vamkgKG5hbWVPckNvZGUpIHtcbiAgcmV0dXJuIEVtb2ppLmhhc0Vtb2ppQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmhhc0Vtb2ppQnlDb2RlKG5hbWVPckNvZGUpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlbW9qaSB3aXRoIGdpdmVuIG5hbWUgaXMga25vd24gYnkgdGhpcyBsaWJyYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZW1vamkgdG8gdmFsaWRhdGUgZWl0aGVyIGBjb2ZmZWVgIG9yIGA6Y29mZmVlOmA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppQnlOYW1lID0gZnVuY3Rpb24gaGFzRW1vamlCeU5hbWUgKG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IEVtb2ppLmZpbmRCeU5hbWUobmFtZSk7XG4gIHJldHVybiAhIXJlc3VsdCAmJiByZXN1bHQua2V5ID09PSBzdHJpcENvbG9ucyhuYW1lKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBlbW9qaSBpcyBrbm93biBieSB0aGlzIGxpYnJhcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBlbW9qaSB0byB2YWxpZGF0ZTsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuaGFzRW1vamlCeUNvZGUgPSBmdW5jdGlvbiBoYXNFbW9qaUJ5Q29kZSAoY29kZSkge1xuICB2YXIgcmVzdWx0ID0gRW1vamkuZmluZEJ5Q29kZShjb2RlKTtcbiAgcmV0dXJuICEhcmVzdWx0ICYmIHN0cmlwTlNCKHJlc3VsdC5lbW9qaSkgPT09IHN0cmlwTlNCKGNvZGUpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgbmFtZSBmcm9tIGNvZGVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1ZGVDb2xvbnMgc2hvdWxkIHRoZSByZXN1bHQgaW5jbHVkZSB0aGUgOjpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkud2hpY2ggPSBmdW5jdGlvbiB3aGljaCAoZW1vamlfY29kZSwgaW5jbHVkZUNvbG9ucykge1xuICB2YXIgY29kZSA9IHN0cmlwTlNCKGVtb2ppX2NvZGUpO1xuICB2YXIgd29yZCA9IGVtb2ppQnlDb2RlW2NvZGVdO1xuXG4gIHJldHVybiBpbmNsdWRlQ29sb25zID8gd3JhcENvbG9ucyh3b3JkKSA6IHdvcmQ7XG59O1xuXG4vKipcbiAqIGVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgOmVtb2ppOiB3aXRoIGFuIGVtb2ppKVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvbl9taXNzaW5nIChnZXRzIGVtb2ppIG5hbWUgd2l0aG91dCA6OiBhbmQgcmV0dXJucyBhIHByb3BlciBlbW9qaSBpZiBubyBlbW9qaSB3YXMgZm91bmQpXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZm9ybWF0ICh3cmFwIHRoZSByZXR1cm5lZCBlbW9qaSBpbiBhIGN1c3RvbSBlbGVtZW50KVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5lbW9qaWZ5ID0gZnVuY3Rpb24gZW1vamlmeSAoc3RyLCBvbl9taXNzaW5nLCBmb3JtYXQpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcblxuICByZXR1cm4gc3RyLnNwbGl0KGVtb2ppTmFtZVJlZ2V4KSAvLyBwYXJzZSBlbW9qaSB2aWEgcmVnZXhcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gcGFyc2VFbW9qaShzLCBpKSB7XG4gICAgICAgICAgICAgIC8vIGV2ZXJ5IHNlY29uZCBlbGVtZW50IGlzIGFuIGVtb2ppLCBlLmcuIFwidGVzdCA6ZmFzdF9mb3J3YXJkOlwiIC0+IFsgXCJ0ZXN0IFwiLCBcImZhc3RfZm9yd2FyZFwiIF1cbiAgICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSByZXR1cm4gcztcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gRW1vamkuX2dldChzKTtcbiAgICAgICAgICAgICAgdmFyIGlzTWlzc2luZyA9IGVtb2ppLmluZGV4T2YoJzonKSA+IC0xO1xuXG4gICAgICAgICAgICAgIGlmIChpc01pc3NpbmcgJiYgdHlwZW9mIG9uX21pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25fbWlzc2luZyhzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghaXNNaXNzaW5nICYmIHR5cGVvZiBmb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KGVtb2ppLCBzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBlbW9qaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJykgLy8gY29udmVydCBiYWNrIHRvIHN0cmluZ1xuICA7XG59O1xuXG4vKipcbiAqIHJldHVybiBhIHJhbmRvbSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5yYW5kb20gPSBmdW5jdGlvbiByYW5kb20gKCkge1xuICB2YXIgZW1vamlLZXlzID0gT2JqZWN0LmtleXMoZW1vamlCeU5hbWUpO1xuICB2YXIgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbW9qaUtleXMubGVuZ3RoKTtcbiAgdmFyIGtleSA9IGVtb2ppS2V5c1tyYW5kb21JbmRleF07XG4gIHZhciBlbW9qaSA9IEVtb2ppLl9nZXQoa2V5KTtcbiAgcmV0dXJuIHsga2V5OiBrZXksIGVtb2ppOiBlbW9qaSB9O1xufVxuXG4vKipcbiAqICByZXR1cm4gYW4gY29sbGVjdGlvbiBvZiBwb3RlbnRpYWwgZW1vamkgbWF0Y2hlc1xuICogIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqICBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAqL1xuRW1vamkuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoIChzdHIpIHtcbiAgdmFyIGVtb2ppS2V5cyA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKTtcbiAgdmFyIG1hdGNoZXIgPSBzdHJpcENvbG9ucyhzdHIpXG4gIHZhciBtYXRjaGluZ0tleXMgPSBlbW9qaUtleXMuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkudG9TdHJpbmcoKS5pbmRleE9mKG1hdGNoZXIpID09PSAwO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nS2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgZW1vamk6IEVtb2ppLl9nZXQoa2V5KSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiB1bmVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgZW1vamkgd2l0aCA6ZW1vamk6KVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkudW5lbW9qaWZ5ID0gZnVuY3Rpb24gdW5lbW9qaWZ5IChzdHIpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgdmFyIHdvcmRzID0gdG9BcnJheShzdHIpO1xuXG4gIHJldHVybiB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgIHJldHVybiBFbW9qaS53aGljaCh3b3JkLCB0cnVlKSB8fCB3b3JkO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogcmVwbGFjZSBlbW9qaXMgd2l0aCByZXBsYWNlbWVudCB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmd9IHRoZSBzdHJpbmcgb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aGUgZW1vamkgd2l0aFxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYmUgY2xlYW5lZD8gRGVmYXVsdHMgZmFsc2VcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKHN0ciwgcmVwbGFjZW1lbnQsIGNsZWFuU3BhY2VzKSB7XG4gIGlmICghc3RyKSByZXR1cm4gJyc7XG5cbiAgdmFyIHJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyByZXBsYWNlbWVudCA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVwbGFjZW1lbnQ7IH07XG4gIHZhciB3b3JkcyA9IHRvQXJyYXkoc3RyKTtcblxuICB2YXIgcmVwbGFjZWQgPSB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCwgaWR4KSB7XG4gICAgdmFyIGVtb2ppID0gRW1vamkuZmluZEJ5Q29kZSh3b3JkKTtcbiAgICBcbiAgICBpZiAoZW1vamkgJiYgY2xlYW5TcGFjZXMgJiYgd29yZHNbaWR4ICsgMV0gPT09ICcgJykge1xuICAgICAgd29yZHNbaWR4ICsgMV0gPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gZW1vamkgPyByZXBsYWNlKGVtb2ppKSA6IHdvcmQ7XG4gIH0pLmpvaW4oJycpO1xuXG4gIHJldHVybiBjbGVhblNwYWNlcyA/IHJlcGxhY2VkLnJlcGxhY2UodHJpbVNwYWNlUmVnZXgsICcnKSA6IHJlcGxhY2VkO1xufTtcblxuXG4vKipcbiAqIHJlbW92ZSBhbGwgZW1vamlzIGZyb20gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkuc3RyaXAgPSBmdW5jdGlvbiBzdHJpcCAoc3RyKSB7XG4gIHJldHVybiBFbW9qaS5yZXBsYWNlKHN0ciwgJycsIHRydWUpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbW9qaTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFFQTs7Ozs7QUFJQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBOzs7O0FBR0E7QUFDQTtBQURBO0FBSUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUUE7Ozs7Ozs7QUFLQTtBQUNBO0FBRUE7QUFIQTtBQU1BOzs7Ozs7O0FBS0E7QUFDQTtBQURBO0FBSUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBT0E7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBTEE7QUFTQTs7Ozs7OztBQUtBO0FBQ0E7QUFEQTtBQUlBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFLQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQU9BOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFBQTtBQUhBO0FBd0JBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTEE7QUFRQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU5BO0FBY0E7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFKQTtBQVNBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQWhCQTtBQW9CQTs7Ozs7OztBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/node-emoji/lib/emoji.js\n"); - -/***/ }), - -/***/ "../node_modules/node-emoji/lib/emoji.json": -/*!*************************************************!*\ - !*** ../node_modules/node-emoji/lib/emoji.json ***! - \*************************************************/ -/*! exports provided: 100, 1234, umbrella_with_rain_drops, coffee, aries, taurus, sagittarius, capricorn, aquarius, pisces, anchor, white_check_mark, sparkles, question, grey_question, grey_exclamation, exclamation, heavy_exclamation_mark, heavy_plus_sign, heavy_minus_sign, heavy_division_sign, hash, keycap_star, zero, one, two, three, four, five, six, seven, eight, nine, copyright, registered, mahjong, black_joker, a, b, o2, parking, ab, cl, cool, free, id, new, ng, ok, sos, up, vs, flag-ac, flag-ad, flag-ae, flag-af, flag-ag, flag-ai, flag-al, flag-am, flag-ao, flag-aq, flag-ar, flag-as, flag-at, flag-au, flag-aw, flag-ax, flag-az, flag-ba, flag-bb, flag-bd, flag-be, flag-bf, flag-bg, flag-bh, flag-bi, flag-bj, flag-bl, flag-bm, flag-bn, flag-bo, flag-bq, flag-br, flag-bs, flag-bt, flag-bv, flag-bw, flag-by, flag-bz, flag-ca, flag-cc, flag-cd, flag-cf, flag-cg, flag-ch, flag-ci, flag-ck, flag-cl, flag-cm, cn, flag-cn, flag-co, flag-cp, flag-cr, flag-cu, flag-cv, flag-cw, flag-cx, flag-cy, flag-cz, de, flag-de, flag-dg, flag-dj, flag-dk, flag-dm, flag-do, flag-dz, flag-ea, flag-ec, flag-ee, flag-eg, flag-eh, flag-er, es, flag-es, flag-et, flag-eu, flag-fi, flag-fj, flag-fk, flag-fm, flag-fo, fr, flag-fr, flag-ga, gb, uk, flag-gb, flag-gd, flag-ge, flag-gf, flag-gg, flag-gh, flag-gi, flag-gl, flag-gm, flag-gn, flag-gp, flag-gq, flag-gr, flag-gs, flag-gt, flag-gu, flag-gw, flag-gy, flag-hk, flag-hm, flag-hn, flag-hr, flag-ht, flag-hu, flag-ic, flag-id, flag-ie, flag-il, flag-im, flag-in, flag-io, flag-iq, flag-ir, flag-is, it, flag-it, flag-je, flag-jm, flag-jo, jp, flag-jp, flag-ke, flag-kg, flag-kh, flag-ki, flag-km, flag-kn, flag-kp, kr, flag-kr, flag-kw, flag-ky, flag-kz, flag-la, flag-lb, flag-lc, flag-li, flag-lk, flag-lr, flag-ls, flag-lt, flag-lu, flag-lv, flag-ly, flag-ma, flag-mc, flag-md, flag-me, flag-mf, flag-mg, flag-mh, flag-mk, flag-ml, flag-mm, flag-mn, flag-mo, flag-mp, flag-mq, flag-mr, flag-ms, flag-mt, flag-mu, flag-mv, flag-mw, flag-mx, flag-my, flag-mz, flag-na, flag-nc, flag-ne, flag-nf, flag-ng, flag-ni, flag-nl, flag-no, flag-np, flag-nr, flag-nu, flag-nz, flag-om, flag-pa, flag-pe, flag-pf, flag-pg, flag-ph, flag-pk, flag-pl, flag-pm, flag-pn, flag-pr, flag-ps, flag-pt, flag-pw, flag-py, flag-qa, flag-re, flag-ro, flag-rs, ru, flag-ru, flag-rw, flag-sa, flag-sb, flag-sc, flag-sd, flag-se, flag-sg, flag-sh, flag-si, flag-sj, flag-sk, flag-sl, flag-sm, flag-sn, flag-so, flag-sr, flag-ss, flag-st, flag-sv, flag-sx, flag-sy, flag-sz, flag-ta, flag-tc, flag-td, flag-tf, flag-tg, flag-th, flag-tj, flag-tk, flag-tl, flag-tm, flag-tn, flag-to, flag-tr, flag-tt, flag-tv, flag-tw, flag-tz, flag-ua, flag-ug, flag-um, flag-un, us, flag-us, flag-uy, flag-uz, flag-va, flag-vc, flag-ve, flag-vg, flag-vi, flag-vn, flag-vu, flag-wf, flag-ws, flag-xk, flag-ye, flag-yt, flag-za, flag-zm, flag-zw, koko, sa, u7121, u6307, u7981, u7a7a, u5408, u6e80, u6709, u6708, u7533, u5272, u55b6, ideograph_advantage, accept, cyclone, foggy, closed_umbrella, night_with_stars, sunrise_over_mountains, sunrise, city_sunset, city_sunrise, rainbow, bridge_at_night, ocean, volcano, milky_way, earth_africa, earth_americas, earth_asia, globe_with_meridians, new_moon, waxing_crescent_moon, first_quarter_moon, moon, waxing_gibbous_moon, full_moon, waning_gibbous_moon, last_quarter_moon, waning_crescent_moon, crescent_moon, new_moon_with_face, first_quarter_moon_with_face, last_quarter_moon_with_face, full_moon_with_face, sun_with_face, star2, stars, thermometer, mostly_sunny, sun_small_cloud, barely_sunny, sun_behind_cloud, partly_sunny_rain, sun_behind_rain_cloud, rain_cloud, snow_cloud, lightning, lightning_cloud, tornado, tornado_cloud, fog, wind_blowing_face, hotdog, taco, burrito, chestnut, seedling, evergreen_tree, deciduous_tree, palm_tree, cactus, hot_pepper, tulip, cherry_blossom, rose, hibiscus, sunflower, blossom, corn, ear_of_rice, herb, four_leaf_clover, maple_leaf, fallen_leaf, leaves, mushroom, tomato, eggplant, grapes, melon, watermelon, tangerine, lemon, banana, pineapple, apple, green_apple, pear, peach, cherries, strawberry, hamburger, pizza, meat_on_bone, poultry_leg, rice_cracker, rice_ball, rice, curry, ramen, spaghetti, bread, fries, sweet_potato, dango, oden, sushi, fried_shrimp, fish_cake, icecream, shaved_ice, ice_cream, doughnut, cookie, chocolate_bar, candy, lollipop, custard, honey_pot, cake, bento, stew, fried_egg, cooking, fork_and_knife, tea, sake, wine_glass, cocktail, tropical_drink, beer, beers, baby_bottle, knife_fork_plate, champagne, popcorn, ribbon, gift, birthday, jack_o_lantern, christmas_tree, santa, fireworks, sparkler, balloon, tada, confetti_ball, tanabata_tree, crossed_flags, bamboo, dolls, flags, wind_chime, rice_scene, school_satchel, mortar_board, medal, reminder_ribbon, studio_microphone, level_slider, control_knobs, film_frames, admission_tickets, carousel_horse, ferris_wheel, roller_coaster, fishing_pole_and_fish, microphone, movie_camera, cinema, headphones, art, tophat, circus_tent, ticket, clapper, performing_arts, video_game, dart, slot_machine, 8ball, game_die, bowling, flower_playing_cards, musical_note, notes, saxophone, guitar, musical_keyboard, trumpet, violin, musical_score, running_shirt_with_sash, tennis, ski, basketball, checkered_flag, snowboarder, woman-running, man-running, runner, running, woman-surfing, man-surfing, surfer, sports_medal, trophy, horse_racing, football, rugby_football, woman-swimming, man-swimming, swimmer, woman-lifting-weights, man-lifting-weights, weight_lifter, woman-golfing, man-golfing, golfer, racing_motorcycle, racing_car, cricket_bat_and_ball, volleyball, field_hockey_stick_and_ball, ice_hockey_stick_and_puck, table_tennis_paddle_and_ball, snow_capped_mountain, camping, beach_with_umbrella, building_construction, house_buildings, cityscape, derelict_house_building, classical_building, desert, desert_island, national_park, stadium, house, house_with_garden, office, post_office, european_post_office, hospital, bank, atm, hotel, love_hotel, convenience_store, school, department_store, factory, izakaya_lantern, lantern, japanese_castle, european_castle, rainbow-flag, waving_white_flag, flag-england, flag-scotland, flag-wales, waving_black_flag, rosette, label, badminton_racquet_and_shuttlecock, bow_and_arrow, amphora, skin-tone-2, skin-tone-3, skin-tone-4, skin-tone-5, skin-tone-6, rat, mouse2, ox, water_buffalo, cow2, tiger2, leopard, rabbit2, cat2, dragon, crocodile, whale2, snail, snake, racehorse, ram, goat, sheep, monkey, rooster, chicken, dog2, pig2, boar, elephant, octopus, shell, bug, ant, bee, honeybee, beetle, fish, tropical_fish, blowfish, turtle, hatching_chick, baby_chick, hatched_chick, bird, penguin, koala, poodle, dromedary_camel, camel, dolphin, flipper, mouse, cow, tiger, rabbit, cat, dragon_face, whale, horse, monkey_face, dog, pig, frog, hamster, wolf, bear, panda_face, pig_nose, feet, paw_prints, chipmunk, eyes, eye-in-speech-bubble, eye, ear, nose, lips, tongue, point_up_2, point_down, point_left, point_right, facepunch, punch, wave, ok_hand, +1, thumbsup, -1, thumbsdown, clap, open_hands, crown, womans_hat, eyeglasses, necktie, shirt, tshirt, jeans, dress, kimono, bikini, womans_clothes, purse, handbag, pouch, mans_shoe, shoe, athletic_shoe, high_heel, sandal, boot, footprints, bust_in_silhouette, busts_in_silhouette, boy, girl, male-farmer, male-cook, male-student, male-singer, male-artist, male-teacher, male-factory-worker, man-boy-boy, man-boy, man-girl-boy, man-girl-girl, man-girl, man-man-boy, man-man-boy-boy, man-man-girl, man-man-girl-boy, man-man-girl-girl, man-woman-boy, family, man-woman-boy-boy, man-woman-girl, man-woman-girl-boy, man-woman-girl-girl, male-technologist, male-office-worker, male-mechanic, male-scientist, male-astronaut, male-firefighter, male-doctor, male-judge, male-pilot, man-heart-man, man-kiss-man, man, female-farmer, female-cook, female-student, female-singer, female-artist, female-teacher, female-factory-worker, woman-boy-boy, woman-boy, woman-girl-boy, woman-girl-girl, woman-girl, woman-woman-boy, woman-woman-boy-boy, woman-woman-girl, woman-woman-girl-boy, woman-woman-girl-girl, female-technologist, female-office-worker, female-mechanic, female-scientist, female-astronaut, female-firefighter, female-doctor, female-judge, female-pilot, woman-heart-man, couple_with_heart, woman-heart-woman, woman-kiss-man, couplekiss, woman-kiss-woman, woman, couple, man_and_woman_holding_hands, two_men_holding_hands, two_women_holding_hands, female-police-officer, male-police-officer, cop, woman-with-bunny-ears-partying, dancers, man-with-bunny-ears-partying, bride_with_veil, blond-haired-woman, blond-haired-man, person_with_blond_hair, man_with_gua_pi_mao, woman-wearing-turban, man-wearing-turban, man_with_turban, older_man, older_woman, baby, female-construction-worker, male-construction-worker, construction_worker, princess, japanese_ogre, japanese_goblin, ghost, angel, alien, space_invader, imp, skull, woman-tipping-hand, information_desk_person, man-tipping-hand, female-guard, male-guard, guardsman, dancer, lipstick, nail_care, woman-getting-massage, massage, man-getting-massage, woman-getting-haircut, haircut, man-getting-haircut, barber, syringe, pill, kiss, love_letter, ring, gem, bouquet, wedding, heartbeat, broken_heart, two_hearts, sparkling_heart, heartpulse, cupid, blue_heart, green_heart, yellow_heart, purple_heart, gift_heart, revolving_hearts, heart_decoration, diamond_shape_with_a_dot_inside, bulb, anger, bomb, zzz, boom, collision, sweat_drops, droplet, dash, hankey, poop, shit, muscle, dizzy, speech_balloon, thought_balloon, white_flower, moneybag, currency_exchange, heavy_dollar_sign, credit_card, yen, dollar, euro, pound, money_with_wings, chart, seat, computer, briefcase, minidisc, floppy_disk, cd, dvd, file_folder, open_file_folder, page_with_curl, page_facing_up, date, calendar, card_index, chart_with_upwards_trend, chart_with_downwards_trend, bar_chart, clipboard, pushpin, round_pushpin, paperclip, straight_ruler, triangular_ruler, bookmark_tabs, ledger, notebook, notebook_with_decorative_cover, closed_book, book, open_book, green_book, blue_book, orange_book, books, name_badge, scroll, memo, pencil, telephone_receiver, pager, fax, satellite_antenna, loudspeaker, mega, outbox_tray, inbox_tray, package, e-mail, incoming_envelope, envelope_with_arrow, mailbox_closed, mailbox, mailbox_with_mail, mailbox_with_no_mail, postbox, postal_horn, newspaper, iphone, calling, vibration_mode, mobile_phone_off, no_mobile_phones, signal_strength, camera, camera_with_flash, video_camera, tv, radio, vhs, film_projector, prayer_beads, twisted_rightwards_arrows, repeat, repeat_one, arrows_clockwise, arrows_counterclockwise, low_brightness, high_brightness, mute, speaker, sound, loud_sound, battery, electric_plug, mag, mag_right, lock_with_ink_pen, closed_lock_with_key, key, lock, unlock, bell, no_bell, bookmark, link, radio_button, back, end, on, soon, top, underage, keycap_ten, capital_abcd, abcd, symbols, abc, fire, flashlight, wrench, hammer, nut_and_bolt, hocho, knife, gun, microscope, telescope, crystal_ball, six_pointed_star, beginner, trident, black_square_button, white_square_button, red_circle, large_blue_circle, large_orange_diamond, large_blue_diamond, small_orange_diamond, small_blue_diamond, small_red_triangle, small_red_triangle_down, arrow_up_small, arrow_down_small, om_symbol, dove_of_peace, kaaba, mosque, synagogue, menorah_with_nine_branches, clock1, clock2, clock3, clock4, clock5, clock6, clock7, clock8, clock9, clock10, clock11, clock12, clock130, clock230, clock330, clock430, clock530, clock630, clock730, clock830, clock930, clock1030, clock1130, clock1230, candle, mantelpiece_clock, hole, man_in_business_suit_levitating, female-detective, male-detective, sleuth_or_spy, dark_sunglasses, spider, spider_web, joystick, man_dancing, linked_paperclips, lower_left_ballpoint_pen, lower_left_fountain_pen, lower_left_paintbrush, lower_left_crayon, raised_hand_with_fingers_splayed, middle_finger, reversed_hand_with_middle_finger_extended, spock-hand, black_heart, desktop_computer, printer, three_button_mouse, trackball, frame_with_picture, card_index_dividers, card_file_box, file_cabinet, wastebasket, spiral_note_pad, spiral_calendar_pad, compression, old_key, rolled_up_newspaper, dagger_knife, speaking_head_in_silhouette, left_speech_bubble, right_anger_bubble, ballot_box_with_ballot, world_map, mount_fuji, tokyo_tower, statue_of_liberty, japan, moyai, grinning, grin, joy, smiley, smile, sweat_smile, laughing, satisfied, innocent, smiling_imp, wink, blush, yum, relieved, heart_eyes, sunglasses, smirk, neutral_face, expressionless, unamused, sweat, pensive, confused, confounded, kissing, kissing_heart, kissing_smiling_eyes, kissing_closed_eyes, stuck_out_tongue, stuck_out_tongue_winking_eye, stuck_out_tongue_closed_eyes, disappointed, worried, angry, rage, cry, persevere, triumph, disappointed_relieved, frowning, anguished, fearful, weary, sleepy, tired_face, grimacing, sob, open_mouth, hushed, cold_sweat, scream, astonished, flushed, sleeping, dizzy_face, no_mouth, mask, smile_cat, joy_cat, smiley_cat, heart_eyes_cat, smirk_cat, kissing_cat, pouting_cat, crying_cat_face, scream_cat, slightly_frowning_face, slightly_smiling_face, upside_down_face, face_with_rolling_eyes, woman-gesturing-no, no_good, man-gesturing-no, woman-gesturing-ok, ok_woman, man-gesturing-ok, woman-bowing, man-bowing, bow, see_no_evil, hear_no_evil, speak_no_evil, woman-raising-hand, raising_hand, man-raising-hand, raised_hands, woman-frowning, person_frowning, man-frowning, woman-pouting, person_with_pouting_face, man-pouting, pray, rocket, helicopter, steam_locomotive, railway_car, bullettrain_side, bullettrain_front, train2, metro, light_rail, station, tram, train, bus, oncoming_bus, trolleybus, busstop, minibus, ambulance, fire_engine, police_car, oncoming_police_car, taxi, oncoming_taxi, car, red_car, oncoming_automobile, blue_car, truck, articulated_lorry, tractor, monorail, mountain_railway, suspension_railway, mountain_cableway, aerial_tramway, ship, woman-rowing-boat, man-rowing-boat, rowboat, speedboat, traffic_light, vertical_traffic_light, construction, rotating_light, triangular_flag_on_post, door, no_entry_sign, smoking, no_smoking, put_litter_in_its_place, do_not_litter, potable_water, non-potable_water, bike, no_bicycles, woman-biking, man-biking, bicyclist, woman-mountain-biking, man-mountain-biking, mountain_bicyclist, woman-walking, man-walking, walking, no_pedestrians, children_crossing, mens, womens, restroom, baby_symbol, toilet, wc, shower, bath, bathtub, passport_control, customs, baggage_claim, left_luggage, couch_and_lamp, sleeping_accommodation, shopping_bags, bellhop_bell, bed, place_of_worship, octagonal_sign, shopping_trolley, hammer_and_wrench, shield, oil_drum, motorway, railway_track, motor_boat, small_airplane, airplane_departure, airplane_arriving, satellite, passenger_ship, scooter, motor_scooter, canoe, sled, flying_saucer, zipper_mouth_face, money_mouth_face, face_with_thermometer, nerd_face, thinking_face, face_with_head_bandage, robot_face, hugging_face, the_horns, sign_of_the_horns, call_me_hand, raised_back_of_hand, left-facing_fist, right-facing_fist, handshake, crossed_fingers, hand_with_index_and_middle_fingers_crossed, i_love_you_hand_sign, face_with_cowboy_hat, clown_face, nauseated_face, rolling_on_the_floor_laughing, drooling_face, lying_face, woman-facepalming, man-facepalming, face_palm, sneezing_face, face_with_raised_eyebrow, face_with_one_eyebrow_raised, star-struck, grinning_face_with_star_eyes, zany_face, grinning_face_with_one_large_and_one_small_eye, shushing_face, face_with_finger_covering_closed_lips, face_with_symbols_on_mouth, serious_face_with_symbols_covering_mouth, face_with_hand_over_mouth, smiling_face_with_smiling_eyes_and_hand_covering_mouth, face_vomiting, face_with_open_mouth_vomiting, exploding_head, shocked_face_with_exploding_head, pregnant_woman, breast-feeding, palms_up_together, selfie, prince, man_in_tuxedo, mrs_claus, mother_christmas, woman-shrugging, man-shrugging, shrug, woman-cartwheeling, man-cartwheeling, person_doing_cartwheel, woman-juggling, man-juggling, juggling, fencer, woman-wrestling, man-wrestling, wrestlers, woman-playing-water-polo, man-playing-water-polo, water_polo, woman-playing-handball, man-playing-handball, handball, wilted_flower, drum_with_drumsticks, clinking_glasses, tumbler_glass, spoon, goal_net, first_place_medal, second_place_medal, third_place_medal, boxing_glove, martial_arts_uniform, curling_stone, croissant, avocado, cucumber, bacon, potato, carrot, baguette_bread, green_salad, shallow_pan_of_food, stuffed_flatbread, egg, glass_of_milk, peanuts, kiwifruit, pancakes, dumpling, fortune_cookie, takeout_box, chopsticks, bowl_with_spoon, cup_with_straw, coconut, broccoli, pie, pretzel, cut_of_meat, sandwich, canned_food, crab, lion_face, scorpion, turkey, unicorn_face, eagle, duck, bat, shark, owl, fox_face, butterfly, deer, gorilla, lizard, rhinoceros, shrimp, squid, giraffe_face, zebra_face, hedgehog, sauropod, t-rex, cricket, cheese_wedge, face_with_monocle, adult, child, older_adult, bearded_person, person_with_headscarf, woman_in_steamy_room, man_in_steamy_room, person_in_steamy_room, woman_climbing, person_climbing, man_climbing, woman_in_lotus_position, person_in_lotus_position, man_in_lotus_position, female_mage, mage, male_mage, female_fairy, fairy, male_fairy, female_vampire, vampire, male_vampire, mermaid, merman, merperson, female_elf, male_elf, elf, female_genie, male_genie, genie, female_zombie, male_zombie, zombie, brain, orange_heart, billed_cap, scarf, gloves, coat, socks, bangbang, interrobang, tm, information_source, left_right_arrow, arrow_up_down, arrow_upper_left, arrow_upper_right, arrow_lower_right, arrow_lower_left, leftwards_arrow_with_hook, arrow_right_hook, watch, hourglass, keyboard, eject, fast_forward, rewind, arrow_double_up, arrow_double_down, black_right_pointing_double_triangle_with_vertical_bar, black_left_pointing_double_triangle_with_vertical_bar, black_right_pointing_triangle_with_double_vertical_bar, alarm_clock, stopwatch, timer_clock, hourglass_flowing_sand, double_vertical_bar, black_square_for_stop, black_circle_for_record, m, black_small_square, white_small_square, arrow_forward, arrow_backward, white_medium_square, black_medium_square, white_medium_small_square, black_medium_small_square, sunny, cloud, umbrella, snowman, comet, phone, telephone, ballot_box_with_check, shamrock, point_up, skull_and_crossbones, radioactive_sign, biohazard_sign, orthodox_cross, star_and_crescent, peace_symbol, yin_yang, wheel_of_dharma, white_frowning_face, relaxed, female_sign, male_sign, gemini, cancer, leo, virgo, libra, scorpius, spades, clubs, hearts, diamonds, hotsprings, recycle, wheelchair, hammer_and_pick, crossed_swords, medical_symbol, staff_of_aesculapius, scales, alembic, gear, atom_symbol, fleur_de_lis, warning, zap, white_circle, black_circle, coffin, funeral_urn, soccer, baseball, snowman_without_snow, partly_sunny, thunder_cloud_and_rain, ophiuchus, pick, helmet_with_white_cross, chains, no_entry, shinto_shrine, church, mountain, umbrella_on_ground, fountain, golf, ferry, boat, sailboat, skier, ice_skate, woman-bouncing-ball, man-bouncing-ball, person_with_ball, tent, fuelpump, scissors, airplane, email, envelope, fist, hand, raised_hand, v, writing_hand, pencil2, black_nib, heavy_check_mark, heavy_multiplication_x, latin_cross, star_of_david, eight_spoked_asterisk, eight_pointed_black_star, snowflake, sparkle, x, negative_squared_cross_mark, heavy_heart_exclamation_mark_ornament, heart, arrow_right, curly_loop, loop, arrow_heading_up, arrow_heading_down, arrow_left, arrow_up, arrow_down, black_large_square, white_large_square, star, o, wavy_dash, part_alternation_mark, congratulations, secret, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"100\\\":\\\"💯\\\",\\\"1234\\\":\\\"🔢\\\",\\\"umbrella_with_rain_drops\\\":\\\"☔\\\",\\\"coffee\\\":\\\"☕\\\",\\\"aries\\\":\\\"♈\\\",\\\"taurus\\\":\\\"♉\\\",\\\"sagittarius\\\":\\\"♐\\\",\\\"capricorn\\\":\\\"♑\\\",\\\"aquarius\\\":\\\"♒\\\",\\\"pisces\\\":\\\"♓\\\",\\\"anchor\\\":\\\"⚓\\\",\\\"white_check_mark\\\":\\\"✅\\\",\\\"sparkles\\\":\\\"✨\\\",\\\"question\\\":\\\"❓\\\",\\\"grey_question\\\":\\\"❔\\\",\\\"grey_exclamation\\\":\\\"❕\\\",\\\"exclamation\\\":\\\"❗\\\",\\\"heavy_exclamation_mark\\\":\\\"❗\\\",\\\"heavy_plus_sign\\\":\\\"➕\\\",\\\"heavy_minus_sign\\\":\\\"➖\\\",\\\"heavy_division_sign\\\":\\\"➗\\\",\\\"hash\\\":\\\"#️⃣\\\",\\\"keycap_star\\\":\\\"*️⃣\\\",\\\"zero\\\":\\\"0️⃣\\\",\\\"one\\\":\\\"1️⃣\\\",\\\"two\\\":\\\"2️⃣\\\",\\\"three\\\":\\\"3️⃣\\\",\\\"four\\\":\\\"4️⃣\\\",\\\"five\\\":\\\"5️⃣\\\",\\\"six\\\":\\\"6️⃣\\\",\\\"seven\\\":\\\"7️⃣\\\",\\\"eight\\\":\\\"8️⃣\\\",\\\"nine\\\":\\\"9️⃣\\\",\\\"copyright\\\":\\\"©️\\\",\\\"registered\\\":\\\"®️\\\",\\\"mahjong\\\":\\\"🀄\\\",\\\"black_joker\\\":\\\"🃏\\\",\\\"a\\\":\\\"🅰️\\\",\\\"b\\\":\\\"🅱️\\\",\\\"o2\\\":\\\"🅾️\\\",\\\"parking\\\":\\\"🅿️\\\",\\\"ab\\\":\\\"🆎\\\",\\\"cl\\\":\\\"🆑\\\",\\\"cool\\\":\\\"🆒\\\",\\\"free\\\":\\\"🆓\\\",\\\"id\\\":\\\"🆔\\\",\\\"new\\\":\\\"🆕\\\",\\\"ng\\\":\\\"🆖\\\",\\\"ok\\\":\\\"🆗\\\",\\\"sos\\\":\\\"🆘\\\",\\\"up\\\":\\\"🆙\\\",\\\"vs\\\":\\\"🆚\\\",\\\"flag-ac\\\":\\\"🇦🇨\\\",\\\"flag-ad\\\":\\\"🇦🇩\\\",\\\"flag-ae\\\":\\\"🇦🇪\\\",\\\"flag-af\\\":\\\"🇦🇫\\\",\\\"flag-ag\\\":\\\"🇦🇬\\\",\\\"flag-ai\\\":\\\"🇦🇮\\\",\\\"flag-al\\\":\\\"🇦🇱\\\",\\\"flag-am\\\":\\\"🇦🇲\\\",\\\"flag-ao\\\":\\\"🇦🇴\\\",\\\"flag-aq\\\":\\\"🇦🇶\\\",\\\"flag-ar\\\":\\\"🇦🇷\\\",\\\"flag-as\\\":\\\"🇦🇸\\\",\\\"flag-at\\\":\\\"🇦🇹\\\",\\\"flag-au\\\":\\\"🇦🇺\\\",\\\"flag-aw\\\":\\\"🇦🇼\\\",\\\"flag-ax\\\":\\\"🇦🇽\\\",\\\"flag-az\\\":\\\"🇦🇿\\\",\\\"flag-ba\\\":\\\"🇧🇦\\\",\\\"flag-bb\\\":\\\"🇧🇧\\\",\\\"flag-bd\\\":\\\"🇧🇩\\\",\\\"flag-be\\\":\\\"🇧🇪\\\",\\\"flag-bf\\\":\\\"🇧🇫\\\",\\\"flag-bg\\\":\\\"🇧🇬\\\",\\\"flag-bh\\\":\\\"🇧🇭\\\",\\\"flag-bi\\\":\\\"🇧🇮\\\",\\\"flag-bj\\\":\\\"🇧🇯\\\",\\\"flag-bl\\\":\\\"🇧🇱\\\",\\\"flag-bm\\\":\\\"🇧🇲\\\",\\\"flag-bn\\\":\\\"🇧🇳\\\",\\\"flag-bo\\\":\\\"🇧🇴\\\",\\\"flag-bq\\\":\\\"🇧🇶\\\",\\\"flag-br\\\":\\\"🇧🇷\\\",\\\"flag-bs\\\":\\\"🇧🇸\\\",\\\"flag-bt\\\":\\\"🇧🇹\\\",\\\"flag-bv\\\":\\\"🇧🇻\\\",\\\"flag-bw\\\":\\\"🇧🇼\\\",\\\"flag-by\\\":\\\"🇧🇾\\\",\\\"flag-bz\\\":\\\"🇧🇿\\\",\\\"flag-ca\\\":\\\"🇨🇦\\\",\\\"flag-cc\\\":\\\"🇨🇨\\\",\\\"flag-cd\\\":\\\"🇨🇩\\\",\\\"flag-cf\\\":\\\"🇨🇫\\\",\\\"flag-cg\\\":\\\"🇨🇬\\\",\\\"flag-ch\\\":\\\"🇨🇭\\\",\\\"flag-ci\\\":\\\"🇨🇮\\\",\\\"flag-ck\\\":\\\"🇨🇰\\\",\\\"flag-cl\\\":\\\"🇨🇱\\\",\\\"flag-cm\\\":\\\"🇨🇲\\\",\\\"cn\\\":\\\"🇨🇳\\\",\\\"flag-cn\\\":\\\"🇨🇳\\\",\\\"flag-co\\\":\\\"🇨🇴\\\",\\\"flag-cp\\\":\\\"🇨🇵\\\",\\\"flag-cr\\\":\\\"🇨🇷\\\",\\\"flag-cu\\\":\\\"🇨🇺\\\",\\\"flag-cv\\\":\\\"🇨🇻\\\",\\\"flag-cw\\\":\\\"🇨🇼\\\",\\\"flag-cx\\\":\\\"🇨🇽\\\",\\\"flag-cy\\\":\\\"🇨🇾\\\",\\\"flag-cz\\\":\\\"🇨🇿\\\",\\\"de\\\":\\\"🇩🇪\\\",\\\"flag-de\\\":\\\"🇩🇪\\\",\\\"flag-dg\\\":\\\"🇩🇬\\\",\\\"flag-dj\\\":\\\"🇩🇯\\\",\\\"flag-dk\\\":\\\"🇩🇰\\\",\\\"flag-dm\\\":\\\"🇩🇲\\\",\\\"flag-do\\\":\\\"🇩🇴\\\",\\\"flag-dz\\\":\\\"🇩🇿\\\",\\\"flag-ea\\\":\\\"🇪🇦\\\",\\\"flag-ec\\\":\\\"🇪🇨\\\",\\\"flag-ee\\\":\\\"🇪🇪\\\",\\\"flag-eg\\\":\\\"🇪🇬\\\",\\\"flag-eh\\\":\\\"🇪🇭\\\",\\\"flag-er\\\":\\\"🇪🇷\\\",\\\"es\\\":\\\"🇪🇸\\\",\\\"flag-es\\\":\\\"🇪🇸\\\",\\\"flag-et\\\":\\\"🇪🇹\\\",\\\"flag-eu\\\":\\\"🇪🇺\\\",\\\"flag-fi\\\":\\\"🇫🇮\\\",\\\"flag-fj\\\":\\\"🇫🇯\\\",\\\"flag-fk\\\":\\\"🇫🇰\\\",\\\"flag-fm\\\":\\\"🇫🇲\\\",\\\"flag-fo\\\":\\\"🇫🇴\\\",\\\"fr\\\":\\\"🇫🇷\\\",\\\"flag-fr\\\":\\\"🇫🇷\\\",\\\"flag-ga\\\":\\\"🇬🇦\\\",\\\"gb\\\":\\\"🇬🇧\\\",\\\"uk\\\":\\\"🇬🇧\\\",\\\"flag-gb\\\":\\\"🇬🇧\\\",\\\"flag-gd\\\":\\\"🇬🇩\\\",\\\"flag-ge\\\":\\\"🇬🇪\\\",\\\"flag-gf\\\":\\\"🇬🇫\\\",\\\"flag-gg\\\":\\\"🇬🇬\\\",\\\"flag-gh\\\":\\\"🇬🇭\\\",\\\"flag-gi\\\":\\\"🇬🇮\\\",\\\"flag-gl\\\":\\\"🇬🇱\\\",\\\"flag-gm\\\":\\\"🇬🇲\\\",\\\"flag-gn\\\":\\\"🇬🇳\\\",\\\"flag-gp\\\":\\\"🇬🇵\\\",\\\"flag-gq\\\":\\\"🇬🇶\\\",\\\"flag-gr\\\":\\\"🇬🇷\\\",\\\"flag-gs\\\":\\\"🇬🇸\\\",\\\"flag-gt\\\":\\\"🇬🇹\\\",\\\"flag-gu\\\":\\\"🇬🇺\\\",\\\"flag-gw\\\":\\\"🇬🇼\\\",\\\"flag-gy\\\":\\\"🇬🇾\\\",\\\"flag-hk\\\":\\\"🇭🇰\\\",\\\"flag-hm\\\":\\\"🇭🇲\\\",\\\"flag-hn\\\":\\\"🇭🇳\\\",\\\"flag-hr\\\":\\\"🇭🇷\\\",\\\"flag-ht\\\":\\\"🇭🇹\\\",\\\"flag-hu\\\":\\\"🇭🇺\\\",\\\"flag-ic\\\":\\\"🇮🇨\\\",\\\"flag-id\\\":\\\"🇮🇩\\\",\\\"flag-ie\\\":\\\"🇮🇪\\\",\\\"flag-il\\\":\\\"🇮🇱\\\",\\\"flag-im\\\":\\\"🇮🇲\\\",\\\"flag-in\\\":\\\"🇮🇳\\\",\\\"flag-io\\\":\\\"🇮🇴\\\",\\\"flag-iq\\\":\\\"🇮🇶\\\",\\\"flag-ir\\\":\\\"🇮🇷\\\",\\\"flag-is\\\":\\\"🇮🇸\\\",\\\"it\\\":\\\"🇮🇹\\\",\\\"flag-it\\\":\\\"🇮🇹\\\",\\\"flag-je\\\":\\\"🇯🇪\\\",\\\"flag-jm\\\":\\\"🇯🇲\\\",\\\"flag-jo\\\":\\\"🇯🇴\\\",\\\"jp\\\":\\\"🇯🇵\\\",\\\"flag-jp\\\":\\\"🇯🇵\\\",\\\"flag-ke\\\":\\\"🇰🇪\\\",\\\"flag-kg\\\":\\\"🇰🇬\\\",\\\"flag-kh\\\":\\\"🇰🇭\\\",\\\"flag-ki\\\":\\\"🇰🇮\\\",\\\"flag-km\\\":\\\"🇰🇲\\\",\\\"flag-kn\\\":\\\"🇰🇳\\\",\\\"flag-kp\\\":\\\"🇰🇵\\\",\\\"kr\\\":\\\"🇰🇷\\\",\\\"flag-kr\\\":\\\"🇰🇷\\\",\\\"flag-kw\\\":\\\"🇰🇼\\\",\\\"flag-ky\\\":\\\"🇰🇾\\\",\\\"flag-kz\\\":\\\"🇰🇿\\\",\\\"flag-la\\\":\\\"🇱🇦\\\",\\\"flag-lb\\\":\\\"🇱🇧\\\",\\\"flag-lc\\\":\\\"🇱🇨\\\",\\\"flag-li\\\":\\\"🇱🇮\\\",\\\"flag-lk\\\":\\\"🇱🇰\\\",\\\"flag-lr\\\":\\\"🇱🇷\\\",\\\"flag-ls\\\":\\\"🇱🇸\\\",\\\"flag-lt\\\":\\\"🇱🇹\\\",\\\"flag-lu\\\":\\\"🇱🇺\\\",\\\"flag-lv\\\":\\\"🇱🇻\\\",\\\"flag-ly\\\":\\\"🇱🇾\\\",\\\"flag-ma\\\":\\\"🇲🇦\\\",\\\"flag-mc\\\":\\\"🇲🇨\\\",\\\"flag-md\\\":\\\"🇲🇩\\\",\\\"flag-me\\\":\\\"🇲🇪\\\",\\\"flag-mf\\\":\\\"🇲🇫\\\",\\\"flag-mg\\\":\\\"🇲🇬\\\",\\\"flag-mh\\\":\\\"🇲🇭\\\",\\\"flag-mk\\\":\\\"🇲🇰\\\",\\\"flag-ml\\\":\\\"🇲🇱\\\",\\\"flag-mm\\\":\\\"🇲🇲\\\",\\\"flag-mn\\\":\\\"🇲🇳\\\",\\\"flag-mo\\\":\\\"🇲🇴\\\",\\\"flag-mp\\\":\\\"🇲🇵\\\",\\\"flag-mq\\\":\\\"🇲🇶\\\",\\\"flag-mr\\\":\\\"🇲🇷\\\",\\\"flag-ms\\\":\\\"🇲🇸\\\",\\\"flag-mt\\\":\\\"🇲🇹\\\",\\\"flag-mu\\\":\\\"🇲🇺\\\",\\\"flag-mv\\\":\\\"🇲🇻\\\",\\\"flag-mw\\\":\\\"🇲🇼\\\",\\\"flag-mx\\\":\\\"🇲🇽\\\",\\\"flag-my\\\":\\\"🇲🇾\\\",\\\"flag-mz\\\":\\\"🇲🇿\\\",\\\"flag-na\\\":\\\"🇳🇦\\\",\\\"flag-nc\\\":\\\"🇳🇨\\\",\\\"flag-ne\\\":\\\"🇳🇪\\\",\\\"flag-nf\\\":\\\"🇳🇫\\\",\\\"flag-ng\\\":\\\"🇳🇬\\\",\\\"flag-ni\\\":\\\"🇳🇮\\\",\\\"flag-nl\\\":\\\"🇳🇱\\\",\\\"flag-no\\\":\\\"🇳🇴\\\",\\\"flag-np\\\":\\\"🇳🇵\\\",\\\"flag-nr\\\":\\\"🇳🇷\\\",\\\"flag-nu\\\":\\\"🇳🇺\\\",\\\"flag-nz\\\":\\\"🇳🇿\\\",\\\"flag-om\\\":\\\"🇴🇲\\\",\\\"flag-pa\\\":\\\"🇵🇦\\\",\\\"flag-pe\\\":\\\"🇵🇪\\\",\\\"flag-pf\\\":\\\"🇵🇫\\\",\\\"flag-pg\\\":\\\"🇵🇬\\\",\\\"flag-ph\\\":\\\"🇵🇭\\\",\\\"flag-pk\\\":\\\"🇵🇰\\\",\\\"flag-pl\\\":\\\"🇵🇱\\\",\\\"flag-pm\\\":\\\"🇵🇲\\\",\\\"flag-pn\\\":\\\"🇵🇳\\\",\\\"flag-pr\\\":\\\"🇵🇷\\\",\\\"flag-ps\\\":\\\"🇵🇸\\\",\\\"flag-pt\\\":\\\"🇵🇹\\\",\\\"flag-pw\\\":\\\"🇵🇼\\\",\\\"flag-py\\\":\\\"🇵🇾\\\",\\\"flag-qa\\\":\\\"🇶🇦\\\",\\\"flag-re\\\":\\\"🇷🇪\\\",\\\"flag-ro\\\":\\\"🇷🇴\\\",\\\"flag-rs\\\":\\\"🇷🇸\\\",\\\"ru\\\":\\\"🇷🇺\\\",\\\"flag-ru\\\":\\\"🇷🇺\\\",\\\"flag-rw\\\":\\\"🇷🇼\\\",\\\"flag-sa\\\":\\\"🇸🇦\\\",\\\"flag-sb\\\":\\\"🇸🇧\\\",\\\"flag-sc\\\":\\\"🇸🇨\\\",\\\"flag-sd\\\":\\\"🇸🇩\\\",\\\"flag-se\\\":\\\"🇸🇪\\\",\\\"flag-sg\\\":\\\"🇸🇬\\\",\\\"flag-sh\\\":\\\"🇸🇭\\\",\\\"flag-si\\\":\\\"🇸🇮\\\",\\\"flag-sj\\\":\\\"🇸🇯\\\",\\\"flag-sk\\\":\\\"🇸🇰\\\",\\\"flag-sl\\\":\\\"🇸🇱\\\",\\\"flag-sm\\\":\\\"🇸🇲\\\",\\\"flag-sn\\\":\\\"🇸🇳\\\",\\\"flag-so\\\":\\\"🇸🇴\\\",\\\"flag-sr\\\":\\\"🇸🇷\\\",\\\"flag-ss\\\":\\\"🇸🇸\\\",\\\"flag-st\\\":\\\"🇸🇹\\\",\\\"flag-sv\\\":\\\"🇸🇻\\\",\\\"flag-sx\\\":\\\"🇸🇽\\\",\\\"flag-sy\\\":\\\"🇸🇾\\\",\\\"flag-sz\\\":\\\"🇸🇿\\\",\\\"flag-ta\\\":\\\"🇹🇦\\\",\\\"flag-tc\\\":\\\"🇹🇨\\\",\\\"flag-td\\\":\\\"🇹🇩\\\",\\\"flag-tf\\\":\\\"🇹🇫\\\",\\\"flag-tg\\\":\\\"🇹🇬\\\",\\\"flag-th\\\":\\\"🇹🇭\\\",\\\"flag-tj\\\":\\\"🇹🇯\\\",\\\"flag-tk\\\":\\\"🇹🇰\\\",\\\"flag-tl\\\":\\\"🇹🇱\\\",\\\"flag-tm\\\":\\\"🇹🇲\\\",\\\"flag-tn\\\":\\\"🇹🇳\\\",\\\"flag-to\\\":\\\"🇹🇴\\\",\\\"flag-tr\\\":\\\"🇹🇷\\\",\\\"flag-tt\\\":\\\"🇹🇹\\\",\\\"flag-tv\\\":\\\"🇹🇻\\\",\\\"flag-tw\\\":\\\"🇹🇼\\\",\\\"flag-tz\\\":\\\"🇹🇿\\\",\\\"flag-ua\\\":\\\"🇺🇦\\\",\\\"flag-ug\\\":\\\"🇺🇬\\\",\\\"flag-um\\\":\\\"🇺🇲\\\",\\\"flag-un\\\":\\\"🇺🇳\\\",\\\"us\\\":\\\"🇺🇸\\\",\\\"flag-us\\\":\\\"🇺🇸\\\",\\\"flag-uy\\\":\\\"🇺🇾\\\",\\\"flag-uz\\\":\\\"🇺🇿\\\",\\\"flag-va\\\":\\\"🇻🇦\\\",\\\"flag-vc\\\":\\\"🇻🇨\\\",\\\"flag-ve\\\":\\\"🇻🇪\\\",\\\"flag-vg\\\":\\\"🇻🇬\\\",\\\"flag-vi\\\":\\\"🇻🇮\\\",\\\"flag-vn\\\":\\\"🇻🇳\\\",\\\"flag-vu\\\":\\\"🇻🇺\\\",\\\"flag-wf\\\":\\\"🇼🇫\\\",\\\"flag-ws\\\":\\\"🇼🇸\\\",\\\"flag-xk\\\":\\\"🇽🇰\\\",\\\"flag-ye\\\":\\\"🇾🇪\\\",\\\"flag-yt\\\":\\\"🇾🇹\\\",\\\"flag-za\\\":\\\"🇿🇦\\\",\\\"flag-zm\\\":\\\"🇿🇲\\\",\\\"flag-zw\\\":\\\"🇿🇼\\\",\\\"koko\\\":\\\"🈁\\\",\\\"sa\\\":\\\"🈂️\\\",\\\"u7121\\\":\\\"🈚\\\",\\\"u6307\\\":\\\"🈯\\\",\\\"u7981\\\":\\\"🈲\\\",\\\"u7a7a\\\":\\\"🈳\\\",\\\"u5408\\\":\\\"🈴\\\",\\\"u6e80\\\":\\\"🈵\\\",\\\"u6709\\\":\\\"🈶\\\",\\\"u6708\\\":\\\"🈷️\\\",\\\"u7533\\\":\\\"🈸\\\",\\\"u5272\\\":\\\"🈹\\\",\\\"u55b6\\\":\\\"🈺\\\",\\\"ideograph_advantage\\\":\\\"🉐\\\",\\\"accept\\\":\\\"🉑\\\",\\\"cyclone\\\":\\\"🌀\\\",\\\"foggy\\\":\\\"🌁\\\",\\\"closed_umbrella\\\":\\\"🌂\\\",\\\"night_with_stars\\\":\\\"🌃\\\",\\\"sunrise_over_mountains\\\":\\\"🌄\\\",\\\"sunrise\\\":\\\"🌅\\\",\\\"city_sunset\\\":\\\"🌆\\\",\\\"city_sunrise\\\":\\\"🌇\\\",\\\"rainbow\\\":\\\"🌈\\\",\\\"bridge_at_night\\\":\\\"🌉\\\",\\\"ocean\\\":\\\"🌊\\\",\\\"volcano\\\":\\\"🌋\\\",\\\"milky_way\\\":\\\"🌌\\\",\\\"earth_africa\\\":\\\"🌍\\\",\\\"earth_americas\\\":\\\"🌎\\\",\\\"earth_asia\\\":\\\"🌏\\\",\\\"globe_with_meridians\\\":\\\"🌐\\\",\\\"new_moon\\\":\\\"🌑\\\",\\\"waxing_crescent_moon\\\":\\\"🌒\\\",\\\"first_quarter_moon\\\":\\\"🌓\\\",\\\"moon\\\":\\\"🌔\\\",\\\"waxing_gibbous_moon\\\":\\\"🌔\\\",\\\"full_moon\\\":\\\"🌕\\\",\\\"waning_gibbous_moon\\\":\\\"🌖\\\",\\\"last_quarter_moon\\\":\\\"🌗\\\",\\\"waning_crescent_moon\\\":\\\"🌘\\\",\\\"crescent_moon\\\":\\\"🌙\\\",\\\"new_moon_with_face\\\":\\\"🌚\\\",\\\"first_quarter_moon_with_face\\\":\\\"🌛\\\",\\\"last_quarter_moon_with_face\\\":\\\"🌜\\\",\\\"full_moon_with_face\\\":\\\"🌝\\\",\\\"sun_with_face\\\":\\\"🌞\\\",\\\"star2\\\":\\\"🌟\\\",\\\"stars\\\":\\\"🌠\\\",\\\"thermometer\\\":\\\"🌡️\\\",\\\"mostly_sunny\\\":\\\"🌤️\\\",\\\"sun_small_cloud\\\":\\\"🌤️\\\",\\\"barely_sunny\\\":\\\"🌥️\\\",\\\"sun_behind_cloud\\\":\\\"🌥️\\\",\\\"partly_sunny_rain\\\":\\\"🌦️\\\",\\\"sun_behind_rain_cloud\\\":\\\"🌦️\\\",\\\"rain_cloud\\\":\\\"🌧️\\\",\\\"snow_cloud\\\":\\\"🌨️\\\",\\\"lightning\\\":\\\"🌩️\\\",\\\"lightning_cloud\\\":\\\"🌩️\\\",\\\"tornado\\\":\\\"🌪️\\\",\\\"tornado_cloud\\\":\\\"🌪️\\\",\\\"fog\\\":\\\"🌫️\\\",\\\"wind_blowing_face\\\":\\\"🌬️\\\",\\\"hotdog\\\":\\\"🌭\\\",\\\"taco\\\":\\\"🌮\\\",\\\"burrito\\\":\\\"🌯\\\",\\\"chestnut\\\":\\\"🌰\\\",\\\"seedling\\\":\\\"🌱\\\",\\\"evergreen_tree\\\":\\\"🌲\\\",\\\"deciduous_tree\\\":\\\"🌳\\\",\\\"palm_tree\\\":\\\"🌴\\\",\\\"cactus\\\":\\\"🌵\\\",\\\"hot_pepper\\\":\\\"🌶️\\\",\\\"tulip\\\":\\\"🌷\\\",\\\"cherry_blossom\\\":\\\"🌸\\\",\\\"rose\\\":\\\"🌹\\\",\\\"hibiscus\\\":\\\"🌺\\\",\\\"sunflower\\\":\\\"🌻\\\",\\\"blossom\\\":\\\"🌼\\\",\\\"corn\\\":\\\"🌽\\\",\\\"ear_of_rice\\\":\\\"🌾\\\",\\\"herb\\\":\\\"🌿\\\",\\\"four_leaf_clover\\\":\\\"🍀\\\",\\\"maple_leaf\\\":\\\"🍁\\\",\\\"fallen_leaf\\\":\\\"🍂\\\",\\\"leaves\\\":\\\"🍃\\\",\\\"mushroom\\\":\\\"🍄\\\",\\\"tomato\\\":\\\"🍅\\\",\\\"eggplant\\\":\\\"🍆\\\",\\\"grapes\\\":\\\"🍇\\\",\\\"melon\\\":\\\"🍈\\\",\\\"watermelon\\\":\\\"🍉\\\",\\\"tangerine\\\":\\\"🍊\\\",\\\"lemon\\\":\\\"🍋\\\",\\\"banana\\\":\\\"🍌\\\",\\\"pineapple\\\":\\\"🍍\\\",\\\"apple\\\":\\\"🍎\\\",\\\"green_apple\\\":\\\"🍏\\\",\\\"pear\\\":\\\"🍐\\\",\\\"peach\\\":\\\"🍑\\\",\\\"cherries\\\":\\\"🍒\\\",\\\"strawberry\\\":\\\"🍓\\\",\\\"hamburger\\\":\\\"🍔\\\",\\\"pizza\\\":\\\"🍕\\\",\\\"meat_on_bone\\\":\\\"🍖\\\",\\\"poultry_leg\\\":\\\"🍗\\\",\\\"rice_cracker\\\":\\\"🍘\\\",\\\"rice_ball\\\":\\\"🍙\\\",\\\"rice\\\":\\\"🍚\\\",\\\"curry\\\":\\\"🍛\\\",\\\"ramen\\\":\\\"🍜\\\",\\\"spaghetti\\\":\\\"🍝\\\",\\\"bread\\\":\\\"🍞\\\",\\\"fries\\\":\\\"🍟\\\",\\\"sweet_potato\\\":\\\"🍠\\\",\\\"dango\\\":\\\"🍡\\\",\\\"oden\\\":\\\"🍢\\\",\\\"sushi\\\":\\\"🍣\\\",\\\"fried_shrimp\\\":\\\"🍤\\\",\\\"fish_cake\\\":\\\"🍥\\\",\\\"icecream\\\":\\\"🍦\\\",\\\"shaved_ice\\\":\\\"🍧\\\",\\\"ice_cream\\\":\\\"🍨\\\",\\\"doughnut\\\":\\\"🍩\\\",\\\"cookie\\\":\\\"🍪\\\",\\\"chocolate_bar\\\":\\\"🍫\\\",\\\"candy\\\":\\\"🍬\\\",\\\"lollipop\\\":\\\"🍭\\\",\\\"custard\\\":\\\"🍮\\\",\\\"honey_pot\\\":\\\"🍯\\\",\\\"cake\\\":\\\"🍰\\\",\\\"bento\\\":\\\"🍱\\\",\\\"stew\\\":\\\"🍲\\\",\\\"fried_egg\\\":\\\"🍳\\\",\\\"cooking\\\":\\\"🍳\\\",\\\"fork_and_knife\\\":\\\"🍴\\\",\\\"tea\\\":\\\"🍵\\\",\\\"sake\\\":\\\"🍶\\\",\\\"wine_glass\\\":\\\"🍷\\\",\\\"cocktail\\\":\\\"🍸\\\",\\\"tropical_drink\\\":\\\"🍹\\\",\\\"beer\\\":\\\"🍺\\\",\\\"beers\\\":\\\"🍻\\\",\\\"baby_bottle\\\":\\\"🍼\\\",\\\"knife_fork_plate\\\":\\\"🍽️\\\",\\\"champagne\\\":\\\"🍾\\\",\\\"popcorn\\\":\\\"🍿\\\",\\\"ribbon\\\":\\\"🎀\\\",\\\"gift\\\":\\\"🎁\\\",\\\"birthday\\\":\\\"🎂\\\",\\\"jack_o_lantern\\\":\\\"🎃\\\",\\\"christmas_tree\\\":\\\"🎄\\\",\\\"santa\\\":\\\"🎅\\\",\\\"fireworks\\\":\\\"🎆\\\",\\\"sparkler\\\":\\\"🎇\\\",\\\"balloon\\\":\\\"🎈\\\",\\\"tada\\\":\\\"🎉\\\",\\\"confetti_ball\\\":\\\"🎊\\\",\\\"tanabata_tree\\\":\\\"🎋\\\",\\\"crossed_flags\\\":\\\"🎌\\\",\\\"bamboo\\\":\\\"🎍\\\",\\\"dolls\\\":\\\"🎎\\\",\\\"flags\\\":\\\"🎏\\\",\\\"wind_chime\\\":\\\"🎐\\\",\\\"rice_scene\\\":\\\"🎑\\\",\\\"school_satchel\\\":\\\"🎒\\\",\\\"mortar_board\\\":\\\"🎓\\\",\\\"medal\\\":\\\"🎖️\\\",\\\"reminder_ribbon\\\":\\\"🎗️\\\",\\\"studio_microphone\\\":\\\"🎙️\\\",\\\"level_slider\\\":\\\"🎚️\\\",\\\"control_knobs\\\":\\\"🎛️\\\",\\\"film_frames\\\":\\\"🎞️\\\",\\\"admission_tickets\\\":\\\"🎟️\\\",\\\"carousel_horse\\\":\\\"🎠\\\",\\\"ferris_wheel\\\":\\\"🎡\\\",\\\"roller_coaster\\\":\\\"🎢\\\",\\\"fishing_pole_and_fish\\\":\\\"🎣\\\",\\\"microphone\\\":\\\"🎤\\\",\\\"movie_camera\\\":\\\"🎥\\\",\\\"cinema\\\":\\\"🎦\\\",\\\"headphones\\\":\\\"🎧\\\",\\\"art\\\":\\\"🎨\\\",\\\"tophat\\\":\\\"🎩\\\",\\\"circus_tent\\\":\\\"🎪\\\",\\\"ticket\\\":\\\"🎫\\\",\\\"clapper\\\":\\\"🎬\\\",\\\"performing_arts\\\":\\\"🎭\\\",\\\"video_game\\\":\\\"🎮\\\",\\\"dart\\\":\\\"🎯\\\",\\\"slot_machine\\\":\\\"🎰\\\",\\\"8ball\\\":\\\"🎱\\\",\\\"game_die\\\":\\\"🎲\\\",\\\"bowling\\\":\\\"🎳\\\",\\\"flower_playing_cards\\\":\\\"🎴\\\",\\\"musical_note\\\":\\\"🎵\\\",\\\"notes\\\":\\\"🎶\\\",\\\"saxophone\\\":\\\"🎷\\\",\\\"guitar\\\":\\\"🎸\\\",\\\"musical_keyboard\\\":\\\"🎹\\\",\\\"trumpet\\\":\\\"🎺\\\",\\\"violin\\\":\\\"🎻\\\",\\\"musical_score\\\":\\\"🎼\\\",\\\"running_shirt_with_sash\\\":\\\"🎽\\\",\\\"tennis\\\":\\\"🎾\\\",\\\"ski\\\":\\\"🎿\\\",\\\"basketball\\\":\\\"🏀\\\",\\\"checkered_flag\\\":\\\"🏁\\\",\\\"snowboarder\\\":\\\"🏂\\\",\\\"woman-running\\\":\\\"🏃‍♀️\\\",\\\"man-running\\\":\\\"🏃‍♂️\\\",\\\"runner\\\":\\\"🏃‍♂️\\\",\\\"running\\\":\\\"🏃‍♂️\\\",\\\"woman-surfing\\\":\\\"🏄‍♀️\\\",\\\"man-surfing\\\":\\\"🏄‍♂️\\\",\\\"surfer\\\":\\\"🏄‍♂️\\\",\\\"sports_medal\\\":\\\"🏅\\\",\\\"trophy\\\":\\\"🏆\\\",\\\"horse_racing\\\":\\\"🏇\\\",\\\"football\\\":\\\"🏈\\\",\\\"rugby_football\\\":\\\"🏉\\\",\\\"woman-swimming\\\":\\\"🏊‍♀️\\\",\\\"man-swimming\\\":\\\"🏊‍♂️\\\",\\\"swimmer\\\":\\\"🏊‍♂️\\\",\\\"woman-lifting-weights\\\":\\\"🏋️‍♀️\\\",\\\"man-lifting-weights\\\":\\\"🏋️‍♂️\\\",\\\"weight_lifter\\\":\\\"🏋️‍♂️\\\",\\\"woman-golfing\\\":\\\"🏌️‍♀️\\\",\\\"man-golfing\\\":\\\"🏌️‍♂️\\\",\\\"golfer\\\":\\\"🏌️‍♂️\\\",\\\"racing_motorcycle\\\":\\\"🏍️\\\",\\\"racing_car\\\":\\\"🏎️\\\",\\\"cricket_bat_and_ball\\\":\\\"🏏\\\",\\\"volleyball\\\":\\\"🏐\\\",\\\"field_hockey_stick_and_ball\\\":\\\"🏑\\\",\\\"ice_hockey_stick_and_puck\\\":\\\"🏒\\\",\\\"table_tennis_paddle_and_ball\\\":\\\"🏓\\\",\\\"snow_capped_mountain\\\":\\\"🏔️\\\",\\\"camping\\\":\\\"🏕️\\\",\\\"beach_with_umbrella\\\":\\\"🏖️\\\",\\\"building_construction\\\":\\\"🏗️\\\",\\\"house_buildings\\\":\\\"🏘️\\\",\\\"cityscape\\\":\\\"🏙️\\\",\\\"derelict_house_building\\\":\\\"🏚️\\\",\\\"classical_building\\\":\\\"🏛️\\\",\\\"desert\\\":\\\"🏜️\\\",\\\"desert_island\\\":\\\"🏝️\\\",\\\"national_park\\\":\\\"🏞️\\\",\\\"stadium\\\":\\\"🏟️\\\",\\\"house\\\":\\\"🏠\\\",\\\"house_with_garden\\\":\\\"🏡\\\",\\\"office\\\":\\\"🏢\\\",\\\"post_office\\\":\\\"🏣\\\",\\\"european_post_office\\\":\\\"🏤\\\",\\\"hospital\\\":\\\"🏥\\\",\\\"bank\\\":\\\"🏦\\\",\\\"atm\\\":\\\"🏧\\\",\\\"hotel\\\":\\\"🏨\\\",\\\"love_hotel\\\":\\\"🏩\\\",\\\"convenience_store\\\":\\\"🏪\\\",\\\"school\\\":\\\"🏫\\\",\\\"department_store\\\":\\\"🏬\\\",\\\"factory\\\":\\\"🏭\\\",\\\"izakaya_lantern\\\":\\\"🏮\\\",\\\"lantern\\\":\\\"🏮\\\",\\\"japanese_castle\\\":\\\"🏯\\\",\\\"european_castle\\\":\\\"🏰\\\",\\\"rainbow-flag\\\":\\\"🏳️‍🌈\\\",\\\"waving_white_flag\\\":\\\"🏳️\\\",\\\"flag-england\\\":\\\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\\\",\\\"flag-scotland\\\":\\\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\\\",\\\"flag-wales\\\":\\\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\\\",\\\"waving_black_flag\\\":\\\"🏴\\\",\\\"rosette\\\":\\\"🏵️\\\",\\\"label\\\":\\\"🏷️\\\",\\\"badminton_racquet_and_shuttlecock\\\":\\\"🏸\\\",\\\"bow_and_arrow\\\":\\\"🏹\\\",\\\"amphora\\\":\\\"🏺\\\",\\\"skin-tone-2\\\":\\\"🏻\\\",\\\"skin-tone-3\\\":\\\"🏼\\\",\\\"skin-tone-4\\\":\\\"🏽\\\",\\\"skin-tone-5\\\":\\\"🏾\\\",\\\"skin-tone-6\\\":\\\"🏿\\\",\\\"rat\\\":\\\"🐀\\\",\\\"mouse2\\\":\\\"🐁\\\",\\\"ox\\\":\\\"🐂\\\",\\\"water_buffalo\\\":\\\"🐃\\\",\\\"cow2\\\":\\\"🐄\\\",\\\"tiger2\\\":\\\"🐅\\\",\\\"leopard\\\":\\\"🐆\\\",\\\"rabbit2\\\":\\\"🐇\\\",\\\"cat2\\\":\\\"🐈\\\",\\\"dragon\\\":\\\"🐉\\\",\\\"crocodile\\\":\\\"🐊\\\",\\\"whale2\\\":\\\"🐋\\\",\\\"snail\\\":\\\"🐌\\\",\\\"snake\\\":\\\"🐍\\\",\\\"racehorse\\\":\\\"🐎\\\",\\\"ram\\\":\\\"🐏\\\",\\\"goat\\\":\\\"🐐\\\",\\\"sheep\\\":\\\"🐑\\\",\\\"monkey\\\":\\\"🐒\\\",\\\"rooster\\\":\\\"🐓\\\",\\\"chicken\\\":\\\"🐔\\\",\\\"dog2\\\":\\\"🐕\\\",\\\"pig2\\\":\\\"🐖\\\",\\\"boar\\\":\\\"🐗\\\",\\\"elephant\\\":\\\"🐘\\\",\\\"octopus\\\":\\\"🐙\\\",\\\"shell\\\":\\\"🐚\\\",\\\"bug\\\":\\\"🐛\\\",\\\"ant\\\":\\\"🐜\\\",\\\"bee\\\":\\\"🐝\\\",\\\"honeybee\\\":\\\"🐝\\\",\\\"beetle\\\":\\\"🐞\\\",\\\"fish\\\":\\\"🐟\\\",\\\"tropical_fish\\\":\\\"🐠\\\",\\\"blowfish\\\":\\\"🐡\\\",\\\"turtle\\\":\\\"🐢\\\",\\\"hatching_chick\\\":\\\"🐣\\\",\\\"baby_chick\\\":\\\"🐤\\\",\\\"hatched_chick\\\":\\\"🐥\\\",\\\"bird\\\":\\\"🐦\\\",\\\"penguin\\\":\\\"🐧\\\",\\\"koala\\\":\\\"🐨\\\",\\\"poodle\\\":\\\"🐩\\\",\\\"dromedary_camel\\\":\\\"🐪\\\",\\\"camel\\\":\\\"🐫\\\",\\\"dolphin\\\":\\\"🐬\\\",\\\"flipper\\\":\\\"🐬\\\",\\\"mouse\\\":\\\"🐭\\\",\\\"cow\\\":\\\"🐮\\\",\\\"tiger\\\":\\\"🐯\\\",\\\"rabbit\\\":\\\"🐰\\\",\\\"cat\\\":\\\"🐱\\\",\\\"dragon_face\\\":\\\"🐲\\\",\\\"whale\\\":\\\"🐳\\\",\\\"horse\\\":\\\"🐴\\\",\\\"monkey_face\\\":\\\"🐵\\\",\\\"dog\\\":\\\"🐶\\\",\\\"pig\\\":\\\"🐷\\\",\\\"frog\\\":\\\"🐸\\\",\\\"hamster\\\":\\\"🐹\\\",\\\"wolf\\\":\\\"🐺\\\",\\\"bear\\\":\\\"🐻\\\",\\\"panda_face\\\":\\\"🐼\\\",\\\"pig_nose\\\":\\\"🐽\\\",\\\"feet\\\":\\\"🐾\\\",\\\"paw_prints\\\":\\\"🐾\\\",\\\"chipmunk\\\":\\\"🐿️\\\",\\\"eyes\\\":\\\"👀\\\",\\\"eye-in-speech-bubble\\\":\\\"👁️‍🗨️\\\",\\\"eye\\\":\\\"👁️\\\",\\\"ear\\\":\\\"👂\\\",\\\"nose\\\":\\\"👃\\\",\\\"lips\\\":\\\"👄\\\",\\\"tongue\\\":\\\"👅\\\",\\\"point_up_2\\\":\\\"👆\\\",\\\"point_down\\\":\\\"👇\\\",\\\"point_left\\\":\\\"👈\\\",\\\"point_right\\\":\\\"👉\\\",\\\"facepunch\\\":\\\"👊\\\",\\\"punch\\\":\\\"👊\\\",\\\"wave\\\":\\\"👋\\\",\\\"ok_hand\\\":\\\"👌\\\",\\\"+1\\\":\\\"👍\\\",\\\"thumbsup\\\":\\\"👍\\\",\\\"-1\\\":\\\"👎\\\",\\\"thumbsdown\\\":\\\"👎\\\",\\\"clap\\\":\\\"👏\\\",\\\"open_hands\\\":\\\"👐\\\",\\\"crown\\\":\\\"👑\\\",\\\"womans_hat\\\":\\\"👒\\\",\\\"eyeglasses\\\":\\\"👓\\\",\\\"necktie\\\":\\\"👔\\\",\\\"shirt\\\":\\\"👕\\\",\\\"tshirt\\\":\\\"👕\\\",\\\"jeans\\\":\\\"👖\\\",\\\"dress\\\":\\\"👗\\\",\\\"kimono\\\":\\\"👘\\\",\\\"bikini\\\":\\\"👙\\\",\\\"womans_clothes\\\":\\\"👚\\\",\\\"purse\\\":\\\"👛\\\",\\\"handbag\\\":\\\"👜\\\",\\\"pouch\\\":\\\"👝\\\",\\\"mans_shoe\\\":\\\"👞\\\",\\\"shoe\\\":\\\"👞\\\",\\\"athletic_shoe\\\":\\\"👟\\\",\\\"high_heel\\\":\\\"👠\\\",\\\"sandal\\\":\\\"👡\\\",\\\"boot\\\":\\\"👢\\\",\\\"footprints\\\":\\\"👣\\\",\\\"bust_in_silhouette\\\":\\\"👤\\\",\\\"busts_in_silhouette\\\":\\\"👥\\\",\\\"boy\\\":\\\"👦\\\",\\\"girl\\\":\\\"👧\\\",\\\"male-farmer\\\":\\\"👨‍🌾\\\",\\\"male-cook\\\":\\\"👨‍🍳\\\",\\\"male-student\\\":\\\"👨‍🎓\\\",\\\"male-singer\\\":\\\"👨‍🎤\\\",\\\"male-artist\\\":\\\"👨‍🎨\\\",\\\"male-teacher\\\":\\\"👨‍🏫\\\",\\\"male-factory-worker\\\":\\\"👨‍🏭\\\",\\\"man-boy-boy\\\":\\\"👨‍👦‍👦\\\",\\\"man-boy\\\":\\\"👨‍👦\\\",\\\"man-girl-boy\\\":\\\"👨‍👧‍👦\\\",\\\"man-girl-girl\\\":\\\"👨‍👧‍👧\\\",\\\"man-girl\\\":\\\"👨‍👧\\\",\\\"man-man-boy\\\":\\\"👨‍👨‍👦\\\",\\\"man-man-boy-boy\\\":\\\"👨‍👨‍👦‍👦\\\",\\\"man-man-girl\\\":\\\"👨‍👨‍👧\\\",\\\"man-man-girl-boy\\\":\\\"👨‍👨‍👧‍👦\\\",\\\"man-man-girl-girl\\\":\\\"👨‍👨‍👧‍👧\\\",\\\"man-woman-boy\\\":\\\"👨‍👩‍👦\\\",\\\"family\\\":\\\"👨‍👩‍👦\\\",\\\"man-woman-boy-boy\\\":\\\"👨‍👩‍👦‍👦\\\",\\\"man-woman-girl\\\":\\\"👨‍👩‍👧\\\",\\\"man-woman-girl-boy\\\":\\\"👨‍👩‍👧‍👦\\\",\\\"man-woman-girl-girl\\\":\\\"👨‍👩‍👧‍👧\\\",\\\"male-technologist\\\":\\\"👨‍💻\\\",\\\"male-office-worker\\\":\\\"👨‍💼\\\",\\\"male-mechanic\\\":\\\"👨‍🔧\\\",\\\"male-scientist\\\":\\\"👨‍🔬\\\",\\\"male-astronaut\\\":\\\"👨‍🚀\\\",\\\"male-firefighter\\\":\\\"👨‍🚒\\\",\\\"male-doctor\\\":\\\"👨‍⚕️\\\",\\\"male-judge\\\":\\\"👨‍⚖️\\\",\\\"male-pilot\\\":\\\"👨‍✈️\\\",\\\"man-heart-man\\\":\\\"👨‍❤️‍👨\\\",\\\"man-kiss-man\\\":\\\"👨‍❤️‍💋‍👨\\\",\\\"man\\\":\\\"👨\\\",\\\"female-farmer\\\":\\\"👩‍🌾\\\",\\\"female-cook\\\":\\\"👩‍🍳\\\",\\\"female-student\\\":\\\"👩‍🎓\\\",\\\"female-singer\\\":\\\"👩‍🎤\\\",\\\"female-artist\\\":\\\"👩‍🎨\\\",\\\"female-teacher\\\":\\\"👩‍🏫\\\",\\\"female-factory-worker\\\":\\\"👩‍🏭\\\",\\\"woman-boy-boy\\\":\\\"👩‍👦‍👦\\\",\\\"woman-boy\\\":\\\"👩‍👦\\\",\\\"woman-girl-boy\\\":\\\"👩‍👧‍👦\\\",\\\"woman-girl-girl\\\":\\\"👩‍👧‍👧\\\",\\\"woman-girl\\\":\\\"👩‍👧\\\",\\\"woman-woman-boy\\\":\\\"👩‍👩‍👦\\\",\\\"woman-woman-boy-boy\\\":\\\"👩‍👩‍👦‍👦\\\",\\\"woman-woman-girl\\\":\\\"👩‍👩‍👧\\\",\\\"woman-woman-girl-boy\\\":\\\"👩‍👩‍👧‍👦\\\",\\\"woman-woman-girl-girl\\\":\\\"👩‍👩‍👧‍👧\\\",\\\"female-technologist\\\":\\\"👩‍💻\\\",\\\"female-office-worker\\\":\\\"👩‍💼\\\",\\\"female-mechanic\\\":\\\"👩‍🔧\\\",\\\"female-scientist\\\":\\\"👩‍🔬\\\",\\\"female-astronaut\\\":\\\"👩‍🚀\\\",\\\"female-firefighter\\\":\\\"👩‍🚒\\\",\\\"female-doctor\\\":\\\"👩‍⚕️\\\",\\\"female-judge\\\":\\\"👩‍⚖️\\\",\\\"female-pilot\\\":\\\"👩‍✈️\\\",\\\"woman-heart-man\\\":\\\"👩‍❤️‍👨\\\",\\\"couple_with_heart\\\":\\\"👩‍❤️‍👨\\\",\\\"woman-heart-woman\\\":\\\"👩‍❤️‍👩\\\",\\\"woman-kiss-man\\\":\\\"👩‍❤️‍💋‍👨\\\",\\\"couplekiss\\\":\\\"👩‍❤️‍💋‍👨\\\",\\\"woman-kiss-woman\\\":\\\"👩‍❤️‍💋‍👩\\\",\\\"woman\\\":\\\"👩\\\",\\\"couple\\\":\\\"👫\\\",\\\"man_and_woman_holding_hands\\\":\\\"👫\\\",\\\"two_men_holding_hands\\\":\\\"👬\\\",\\\"two_women_holding_hands\\\":\\\"👭\\\",\\\"female-police-officer\\\":\\\"👮‍♀️\\\",\\\"male-police-officer\\\":\\\"👮‍♂️\\\",\\\"cop\\\":\\\"👮‍♂️\\\",\\\"woman-with-bunny-ears-partying\\\":\\\"👯‍♀️\\\",\\\"dancers\\\":\\\"👯‍♀️\\\",\\\"man-with-bunny-ears-partying\\\":\\\"👯‍♂️\\\",\\\"bride_with_veil\\\":\\\"👰\\\",\\\"blond-haired-woman\\\":\\\"👱‍♀️\\\",\\\"blond-haired-man\\\":\\\"👱‍♂️\\\",\\\"person_with_blond_hair\\\":\\\"👱‍♂️\\\",\\\"man_with_gua_pi_mao\\\":\\\"👲\\\",\\\"woman-wearing-turban\\\":\\\"👳‍♀️\\\",\\\"man-wearing-turban\\\":\\\"👳‍♂️\\\",\\\"man_with_turban\\\":\\\"👳‍♂️\\\",\\\"older_man\\\":\\\"👴\\\",\\\"older_woman\\\":\\\"👵\\\",\\\"baby\\\":\\\"👶\\\",\\\"female-construction-worker\\\":\\\"👷‍♀️\\\",\\\"male-construction-worker\\\":\\\"👷‍♂️\\\",\\\"construction_worker\\\":\\\"👷‍♂️\\\",\\\"princess\\\":\\\"👸\\\",\\\"japanese_ogre\\\":\\\"👹\\\",\\\"japanese_goblin\\\":\\\"👺\\\",\\\"ghost\\\":\\\"👻\\\",\\\"angel\\\":\\\"👼\\\",\\\"alien\\\":\\\"👽\\\",\\\"space_invader\\\":\\\"👾\\\",\\\"imp\\\":\\\"👿\\\",\\\"skull\\\":\\\"💀\\\",\\\"woman-tipping-hand\\\":\\\"💁‍♀️\\\",\\\"information_desk_person\\\":\\\"💁‍♀️\\\",\\\"man-tipping-hand\\\":\\\"💁‍♂️\\\",\\\"female-guard\\\":\\\"💂‍♀️\\\",\\\"male-guard\\\":\\\"💂‍♂️\\\",\\\"guardsman\\\":\\\"💂‍♂️\\\",\\\"dancer\\\":\\\"💃\\\",\\\"lipstick\\\":\\\"💄\\\",\\\"nail_care\\\":\\\"💅\\\",\\\"woman-getting-massage\\\":\\\"💆‍♀️\\\",\\\"massage\\\":\\\"💆‍♀️\\\",\\\"man-getting-massage\\\":\\\"💆‍♂️\\\",\\\"woman-getting-haircut\\\":\\\"💇‍♀️\\\",\\\"haircut\\\":\\\"💇‍♀️\\\",\\\"man-getting-haircut\\\":\\\"💇‍♂️\\\",\\\"barber\\\":\\\"💈\\\",\\\"syringe\\\":\\\"💉\\\",\\\"pill\\\":\\\"💊\\\",\\\"kiss\\\":\\\"💋\\\",\\\"love_letter\\\":\\\"💌\\\",\\\"ring\\\":\\\"💍\\\",\\\"gem\\\":\\\"💎\\\",\\\"bouquet\\\":\\\"💐\\\",\\\"wedding\\\":\\\"💒\\\",\\\"heartbeat\\\":\\\"💓\\\",\\\"broken_heart\\\":\\\"💔\\\",\\\"two_hearts\\\":\\\"💕\\\",\\\"sparkling_heart\\\":\\\"💖\\\",\\\"heartpulse\\\":\\\"💗\\\",\\\"cupid\\\":\\\"💘\\\",\\\"blue_heart\\\":\\\"💙\\\",\\\"green_heart\\\":\\\"💚\\\",\\\"yellow_heart\\\":\\\"💛\\\",\\\"purple_heart\\\":\\\"💜\\\",\\\"gift_heart\\\":\\\"💝\\\",\\\"revolving_hearts\\\":\\\"💞\\\",\\\"heart_decoration\\\":\\\"💟\\\",\\\"diamond_shape_with_a_dot_inside\\\":\\\"💠\\\",\\\"bulb\\\":\\\"💡\\\",\\\"anger\\\":\\\"💢\\\",\\\"bomb\\\":\\\"💣\\\",\\\"zzz\\\":\\\"💤\\\",\\\"boom\\\":\\\"💥\\\",\\\"collision\\\":\\\"💥\\\",\\\"sweat_drops\\\":\\\"💦\\\",\\\"droplet\\\":\\\"💧\\\",\\\"dash\\\":\\\"💨\\\",\\\"hankey\\\":\\\"💩\\\",\\\"poop\\\":\\\"💩\\\",\\\"shit\\\":\\\"💩\\\",\\\"muscle\\\":\\\"💪\\\",\\\"dizzy\\\":\\\"💫\\\",\\\"speech_balloon\\\":\\\"💬\\\",\\\"thought_balloon\\\":\\\"💭\\\",\\\"white_flower\\\":\\\"💮\\\",\\\"moneybag\\\":\\\"💰\\\",\\\"currency_exchange\\\":\\\"💱\\\",\\\"heavy_dollar_sign\\\":\\\"💲\\\",\\\"credit_card\\\":\\\"💳\\\",\\\"yen\\\":\\\"💴\\\",\\\"dollar\\\":\\\"💵\\\",\\\"euro\\\":\\\"💶\\\",\\\"pound\\\":\\\"💷\\\",\\\"money_with_wings\\\":\\\"💸\\\",\\\"chart\\\":\\\"💹\\\",\\\"seat\\\":\\\"💺\\\",\\\"computer\\\":\\\"💻\\\",\\\"briefcase\\\":\\\"💼\\\",\\\"minidisc\\\":\\\"💽\\\",\\\"floppy_disk\\\":\\\"💾\\\",\\\"cd\\\":\\\"💿\\\",\\\"dvd\\\":\\\"📀\\\",\\\"file_folder\\\":\\\"📁\\\",\\\"open_file_folder\\\":\\\"📂\\\",\\\"page_with_curl\\\":\\\"📃\\\",\\\"page_facing_up\\\":\\\"📄\\\",\\\"date\\\":\\\"📅\\\",\\\"calendar\\\":\\\"📆\\\",\\\"card_index\\\":\\\"📇\\\",\\\"chart_with_upwards_trend\\\":\\\"📈\\\",\\\"chart_with_downwards_trend\\\":\\\"📉\\\",\\\"bar_chart\\\":\\\"📊\\\",\\\"clipboard\\\":\\\"📋\\\",\\\"pushpin\\\":\\\"📌\\\",\\\"round_pushpin\\\":\\\"📍\\\",\\\"paperclip\\\":\\\"📎\\\",\\\"straight_ruler\\\":\\\"📏\\\",\\\"triangular_ruler\\\":\\\"📐\\\",\\\"bookmark_tabs\\\":\\\"📑\\\",\\\"ledger\\\":\\\"📒\\\",\\\"notebook\\\":\\\"📓\\\",\\\"notebook_with_decorative_cover\\\":\\\"📔\\\",\\\"closed_book\\\":\\\"📕\\\",\\\"book\\\":\\\"📖\\\",\\\"open_book\\\":\\\"📖\\\",\\\"green_book\\\":\\\"📗\\\",\\\"blue_book\\\":\\\"📘\\\",\\\"orange_book\\\":\\\"📙\\\",\\\"books\\\":\\\"📚\\\",\\\"name_badge\\\":\\\"📛\\\",\\\"scroll\\\":\\\"📜\\\",\\\"memo\\\":\\\"📝\\\",\\\"pencil\\\":\\\"📝\\\",\\\"telephone_receiver\\\":\\\"📞\\\",\\\"pager\\\":\\\"📟\\\",\\\"fax\\\":\\\"📠\\\",\\\"satellite_antenna\\\":\\\"📡\\\",\\\"loudspeaker\\\":\\\"📢\\\",\\\"mega\\\":\\\"📣\\\",\\\"outbox_tray\\\":\\\"📤\\\",\\\"inbox_tray\\\":\\\"📥\\\",\\\"package\\\":\\\"📦\\\",\\\"e-mail\\\":\\\"📧\\\",\\\"incoming_envelope\\\":\\\"📨\\\",\\\"envelope_with_arrow\\\":\\\"📩\\\",\\\"mailbox_closed\\\":\\\"📪\\\",\\\"mailbox\\\":\\\"📫\\\",\\\"mailbox_with_mail\\\":\\\"📬\\\",\\\"mailbox_with_no_mail\\\":\\\"📭\\\",\\\"postbox\\\":\\\"📮\\\",\\\"postal_horn\\\":\\\"📯\\\",\\\"newspaper\\\":\\\"📰\\\",\\\"iphone\\\":\\\"📱\\\",\\\"calling\\\":\\\"📲\\\",\\\"vibration_mode\\\":\\\"📳\\\",\\\"mobile_phone_off\\\":\\\"📴\\\",\\\"no_mobile_phones\\\":\\\"📵\\\",\\\"signal_strength\\\":\\\"📶\\\",\\\"camera\\\":\\\"📷\\\",\\\"camera_with_flash\\\":\\\"📸\\\",\\\"video_camera\\\":\\\"📹\\\",\\\"tv\\\":\\\"📺\\\",\\\"radio\\\":\\\"📻\\\",\\\"vhs\\\":\\\"📼\\\",\\\"film_projector\\\":\\\"📽️\\\",\\\"prayer_beads\\\":\\\"📿\\\",\\\"twisted_rightwards_arrows\\\":\\\"🔀\\\",\\\"repeat\\\":\\\"🔁\\\",\\\"repeat_one\\\":\\\"🔂\\\",\\\"arrows_clockwise\\\":\\\"🔃\\\",\\\"arrows_counterclockwise\\\":\\\"🔄\\\",\\\"low_brightness\\\":\\\"🔅\\\",\\\"high_brightness\\\":\\\"🔆\\\",\\\"mute\\\":\\\"🔇\\\",\\\"speaker\\\":\\\"🔈\\\",\\\"sound\\\":\\\"🔉\\\",\\\"loud_sound\\\":\\\"🔊\\\",\\\"battery\\\":\\\"🔋\\\",\\\"electric_plug\\\":\\\"🔌\\\",\\\"mag\\\":\\\"🔍\\\",\\\"mag_right\\\":\\\"🔎\\\",\\\"lock_with_ink_pen\\\":\\\"🔏\\\",\\\"closed_lock_with_key\\\":\\\"🔐\\\",\\\"key\\\":\\\"🔑\\\",\\\"lock\\\":\\\"🔒\\\",\\\"unlock\\\":\\\"🔓\\\",\\\"bell\\\":\\\"🔔\\\",\\\"no_bell\\\":\\\"🔕\\\",\\\"bookmark\\\":\\\"🔖\\\",\\\"link\\\":\\\"🔗\\\",\\\"radio_button\\\":\\\"🔘\\\",\\\"back\\\":\\\"🔙\\\",\\\"end\\\":\\\"🔚\\\",\\\"on\\\":\\\"🔛\\\",\\\"soon\\\":\\\"🔜\\\",\\\"top\\\":\\\"🔝\\\",\\\"underage\\\":\\\"🔞\\\",\\\"keycap_ten\\\":\\\"🔟\\\",\\\"capital_abcd\\\":\\\"🔠\\\",\\\"abcd\\\":\\\"🔡\\\",\\\"symbols\\\":\\\"🔣\\\",\\\"abc\\\":\\\"🔤\\\",\\\"fire\\\":\\\"🔥\\\",\\\"flashlight\\\":\\\"🔦\\\",\\\"wrench\\\":\\\"🔧\\\",\\\"hammer\\\":\\\"🔨\\\",\\\"nut_and_bolt\\\":\\\"🔩\\\",\\\"hocho\\\":\\\"🔪\\\",\\\"knife\\\":\\\"🔪\\\",\\\"gun\\\":\\\"🔫\\\",\\\"microscope\\\":\\\"🔬\\\",\\\"telescope\\\":\\\"🔭\\\",\\\"crystal_ball\\\":\\\"🔮\\\",\\\"six_pointed_star\\\":\\\"🔯\\\",\\\"beginner\\\":\\\"🔰\\\",\\\"trident\\\":\\\"🔱\\\",\\\"black_square_button\\\":\\\"🔲\\\",\\\"white_square_button\\\":\\\"🔳\\\",\\\"red_circle\\\":\\\"🔴\\\",\\\"large_blue_circle\\\":\\\"🔵\\\",\\\"large_orange_diamond\\\":\\\"🔶\\\",\\\"large_blue_diamond\\\":\\\"🔷\\\",\\\"small_orange_diamond\\\":\\\"🔸\\\",\\\"small_blue_diamond\\\":\\\"🔹\\\",\\\"small_red_triangle\\\":\\\"🔺\\\",\\\"small_red_triangle_down\\\":\\\"🔻\\\",\\\"arrow_up_small\\\":\\\"🔼\\\",\\\"arrow_down_small\\\":\\\"🔽\\\",\\\"om_symbol\\\":\\\"🕉️\\\",\\\"dove_of_peace\\\":\\\"🕊️\\\",\\\"kaaba\\\":\\\"🕋\\\",\\\"mosque\\\":\\\"🕌\\\",\\\"synagogue\\\":\\\"🕍\\\",\\\"menorah_with_nine_branches\\\":\\\"🕎\\\",\\\"clock1\\\":\\\"🕐\\\",\\\"clock2\\\":\\\"🕑\\\",\\\"clock3\\\":\\\"🕒\\\",\\\"clock4\\\":\\\"🕓\\\",\\\"clock5\\\":\\\"🕔\\\",\\\"clock6\\\":\\\"🕕\\\",\\\"clock7\\\":\\\"🕖\\\",\\\"clock8\\\":\\\"🕗\\\",\\\"clock9\\\":\\\"🕘\\\",\\\"clock10\\\":\\\"🕙\\\",\\\"clock11\\\":\\\"🕚\\\",\\\"clock12\\\":\\\"🕛\\\",\\\"clock130\\\":\\\"🕜\\\",\\\"clock230\\\":\\\"🕝\\\",\\\"clock330\\\":\\\"🕞\\\",\\\"clock430\\\":\\\"🕟\\\",\\\"clock530\\\":\\\"🕠\\\",\\\"clock630\\\":\\\"🕡\\\",\\\"clock730\\\":\\\"🕢\\\",\\\"clock830\\\":\\\"🕣\\\",\\\"clock930\\\":\\\"🕤\\\",\\\"clock1030\\\":\\\"🕥\\\",\\\"clock1130\\\":\\\"🕦\\\",\\\"clock1230\\\":\\\"🕧\\\",\\\"candle\\\":\\\"🕯️\\\",\\\"mantelpiece_clock\\\":\\\"🕰️\\\",\\\"hole\\\":\\\"🕳️\\\",\\\"man_in_business_suit_levitating\\\":\\\"🕴️\\\",\\\"female-detective\\\":\\\"🕵️‍♀️\\\",\\\"male-detective\\\":\\\"🕵️‍♂️\\\",\\\"sleuth_or_spy\\\":\\\"🕵️‍♂️\\\",\\\"dark_sunglasses\\\":\\\"🕶️\\\",\\\"spider\\\":\\\"🕷️\\\",\\\"spider_web\\\":\\\"🕸️\\\",\\\"joystick\\\":\\\"🕹️\\\",\\\"man_dancing\\\":\\\"🕺\\\",\\\"linked_paperclips\\\":\\\"🖇️\\\",\\\"lower_left_ballpoint_pen\\\":\\\"🖊️\\\",\\\"lower_left_fountain_pen\\\":\\\"🖋️\\\",\\\"lower_left_paintbrush\\\":\\\"🖌️\\\",\\\"lower_left_crayon\\\":\\\"🖍️\\\",\\\"raised_hand_with_fingers_splayed\\\":\\\"🖐️\\\",\\\"middle_finger\\\":\\\"🖕\\\",\\\"reversed_hand_with_middle_finger_extended\\\":\\\"🖕\\\",\\\"spock-hand\\\":\\\"🖖\\\",\\\"black_heart\\\":\\\"🖤\\\",\\\"desktop_computer\\\":\\\"🖥️\\\",\\\"printer\\\":\\\"🖨️\\\",\\\"three_button_mouse\\\":\\\"🖱️\\\",\\\"trackball\\\":\\\"🖲️\\\",\\\"frame_with_picture\\\":\\\"🖼️\\\",\\\"card_index_dividers\\\":\\\"🗂️\\\",\\\"card_file_box\\\":\\\"🗃️\\\",\\\"file_cabinet\\\":\\\"🗄️\\\",\\\"wastebasket\\\":\\\"🗑️\\\",\\\"spiral_note_pad\\\":\\\"🗒️\\\",\\\"spiral_calendar_pad\\\":\\\"🗓️\\\",\\\"compression\\\":\\\"🗜️\\\",\\\"old_key\\\":\\\"🗝️\\\",\\\"rolled_up_newspaper\\\":\\\"🗞️\\\",\\\"dagger_knife\\\":\\\"🗡️\\\",\\\"speaking_head_in_silhouette\\\":\\\"🗣️\\\",\\\"left_speech_bubble\\\":\\\"🗨️\\\",\\\"right_anger_bubble\\\":\\\"🗯️\\\",\\\"ballot_box_with_ballot\\\":\\\"🗳️\\\",\\\"world_map\\\":\\\"🗺️\\\",\\\"mount_fuji\\\":\\\"🗻\\\",\\\"tokyo_tower\\\":\\\"🗼\\\",\\\"statue_of_liberty\\\":\\\"🗽\\\",\\\"japan\\\":\\\"🗾\\\",\\\"moyai\\\":\\\"🗿\\\",\\\"grinning\\\":\\\"😀\\\",\\\"grin\\\":\\\"😁\\\",\\\"joy\\\":\\\"😂\\\",\\\"smiley\\\":\\\"😃\\\",\\\"smile\\\":\\\"😄\\\",\\\"sweat_smile\\\":\\\"😅\\\",\\\"laughing\\\":\\\"😆\\\",\\\"satisfied\\\":\\\"😆\\\",\\\"innocent\\\":\\\"😇\\\",\\\"smiling_imp\\\":\\\"😈\\\",\\\"wink\\\":\\\"😉\\\",\\\"blush\\\":\\\"😊\\\",\\\"yum\\\":\\\"😋\\\",\\\"relieved\\\":\\\"😌\\\",\\\"heart_eyes\\\":\\\"😍\\\",\\\"sunglasses\\\":\\\"😎\\\",\\\"smirk\\\":\\\"😏\\\",\\\"neutral_face\\\":\\\"😐\\\",\\\"expressionless\\\":\\\"😑\\\",\\\"unamused\\\":\\\"😒\\\",\\\"sweat\\\":\\\"😓\\\",\\\"pensive\\\":\\\"😔\\\",\\\"confused\\\":\\\"😕\\\",\\\"confounded\\\":\\\"😖\\\",\\\"kissing\\\":\\\"😗\\\",\\\"kissing_heart\\\":\\\"😘\\\",\\\"kissing_smiling_eyes\\\":\\\"😙\\\",\\\"kissing_closed_eyes\\\":\\\"😚\\\",\\\"stuck_out_tongue\\\":\\\"😛\\\",\\\"stuck_out_tongue_winking_eye\\\":\\\"😜\\\",\\\"stuck_out_tongue_closed_eyes\\\":\\\"😝\\\",\\\"disappointed\\\":\\\"😞\\\",\\\"worried\\\":\\\"😟\\\",\\\"angry\\\":\\\"😠\\\",\\\"rage\\\":\\\"😡\\\",\\\"cry\\\":\\\"😢\\\",\\\"persevere\\\":\\\"😣\\\",\\\"triumph\\\":\\\"😤\\\",\\\"disappointed_relieved\\\":\\\"😥\\\",\\\"frowning\\\":\\\"😦\\\",\\\"anguished\\\":\\\"😧\\\",\\\"fearful\\\":\\\"😨\\\",\\\"weary\\\":\\\"😩\\\",\\\"sleepy\\\":\\\"😪\\\",\\\"tired_face\\\":\\\"😫\\\",\\\"grimacing\\\":\\\"😬\\\",\\\"sob\\\":\\\"😭\\\",\\\"open_mouth\\\":\\\"😮\\\",\\\"hushed\\\":\\\"😯\\\",\\\"cold_sweat\\\":\\\"😰\\\",\\\"scream\\\":\\\"😱\\\",\\\"astonished\\\":\\\"😲\\\",\\\"flushed\\\":\\\"😳\\\",\\\"sleeping\\\":\\\"😴\\\",\\\"dizzy_face\\\":\\\"😵\\\",\\\"no_mouth\\\":\\\"😶\\\",\\\"mask\\\":\\\"😷\\\",\\\"smile_cat\\\":\\\"😸\\\",\\\"joy_cat\\\":\\\"😹\\\",\\\"smiley_cat\\\":\\\"😺\\\",\\\"heart_eyes_cat\\\":\\\"😻\\\",\\\"smirk_cat\\\":\\\"😼\\\",\\\"kissing_cat\\\":\\\"😽\\\",\\\"pouting_cat\\\":\\\"😾\\\",\\\"crying_cat_face\\\":\\\"😿\\\",\\\"scream_cat\\\":\\\"🙀\\\",\\\"slightly_frowning_face\\\":\\\"🙁\\\",\\\"slightly_smiling_face\\\":\\\"🙂\\\",\\\"upside_down_face\\\":\\\"🙃\\\",\\\"face_with_rolling_eyes\\\":\\\"🙄\\\",\\\"woman-gesturing-no\\\":\\\"🙅‍♀️\\\",\\\"no_good\\\":\\\"🙅‍♀️\\\",\\\"man-gesturing-no\\\":\\\"🙅‍♂️\\\",\\\"woman-gesturing-ok\\\":\\\"🙆‍♀️\\\",\\\"ok_woman\\\":\\\"🙆‍♀️\\\",\\\"man-gesturing-ok\\\":\\\"🙆‍♂️\\\",\\\"woman-bowing\\\":\\\"🙇‍♀️\\\",\\\"man-bowing\\\":\\\"🙇‍♂️\\\",\\\"bow\\\":\\\"🙇‍♂️\\\",\\\"see_no_evil\\\":\\\"🙈\\\",\\\"hear_no_evil\\\":\\\"🙉\\\",\\\"speak_no_evil\\\":\\\"🙊\\\",\\\"woman-raising-hand\\\":\\\"🙋‍♀️\\\",\\\"raising_hand\\\":\\\"🙋‍♀️\\\",\\\"man-raising-hand\\\":\\\"🙋‍♂️\\\",\\\"raised_hands\\\":\\\"🙌\\\",\\\"woman-frowning\\\":\\\"🙍‍♀️\\\",\\\"person_frowning\\\":\\\"🙍‍♀️\\\",\\\"man-frowning\\\":\\\"🙍‍♂️\\\",\\\"woman-pouting\\\":\\\"🙎‍♀️\\\",\\\"person_with_pouting_face\\\":\\\"🙎‍♀️\\\",\\\"man-pouting\\\":\\\"🙎‍♂️\\\",\\\"pray\\\":\\\"🙏\\\",\\\"rocket\\\":\\\"🚀\\\",\\\"helicopter\\\":\\\"🚁\\\",\\\"steam_locomotive\\\":\\\"🚂\\\",\\\"railway_car\\\":\\\"🚃\\\",\\\"bullettrain_side\\\":\\\"🚄\\\",\\\"bullettrain_front\\\":\\\"🚅\\\",\\\"train2\\\":\\\"🚆\\\",\\\"metro\\\":\\\"🚇\\\",\\\"light_rail\\\":\\\"🚈\\\",\\\"station\\\":\\\"🚉\\\",\\\"tram\\\":\\\"🚊\\\",\\\"train\\\":\\\"🚋\\\",\\\"bus\\\":\\\"🚌\\\",\\\"oncoming_bus\\\":\\\"🚍\\\",\\\"trolleybus\\\":\\\"🚎\\\",\\\"busstop\\\":\\\"🚏\\\",\\\"minibus\\\":\\\"🚐\\\",\\\"ambulance\\\":\\\"🚑\\\",\\\"fire_engine\\\":\\\"🚒\\\",\\\"police_car\\\":\\\"🚓\\\",\\\"oncoming_police_car\\\":\\\"🚔\\\",\\\"taxi\\\":\\\"🚕\\\",\\\"oncoming_taxi\\\":\\\"🚖\\\",\\\"car\\\":\\\"🚗\\\",\\\"red_car\\\":\\\"🚗\\\",\\\"oncoming_automobile\\\":\\\"🚘\\\",\\\"blue_car\\\":\\\"🚙\\\",\\\"truck\\\":\\\"🚚\\\",\\\"articulated_lorry\\\":\\\"🚛\\\",\\\"tractor\\\":\\\"🚜\\\",\\\"monorail\\\":\\\"🚝\\\",\\\"mountain_railway\\\":\\\"🚞\\\",\\\"suspension_railway\\\":\\\"🚟\\\",\\\"mountain_cableway\\\":\\\"🚠\\\",\\\"aerial_tramway\\\":\\\"🚡\\\",\\\"ship\\\":\\\"🚢\\\",\\\"woman-rowing-boat\\\":\\\"🚣‍♀️\\\",\\\"man-rowing-boat\\\":\\\"🚣‍♂️\\\",\\\"rowboat\\\":\\\"🚣‍♂️\\\",\\\"speedboat\\\":\\\"🚤\\\",\\\"traffic_light\\\":\\\"🚥\\\",\\\"vertical_traffic_light\\\":\\\"🚦\\\",\\\"construction\\\":\\\"🚧\\\",\\\"rotating_light\\\":\\\"🚨\\\",\\\"triangular_flag_on_post\\\":\\\"🚩\\\",\\\"door\\\":\\\"🚪\\\",\\\"no_entry_sign\\\":\\\"🚫\\\",\\\"smoking\\\":\\\"🚬\\\",\\\"no_smoking\\\":\\\"🚭\\\",\\\"put_litter_in_its_place\\\":\\\"🚮\\\",\\\"do_not_litter\\\":\\\"🚯\\\",\\\"potable_water\\\":\\\"🚰\\\",\\\"non-potable_water\\\":\\\"🚱\\\",\\\"bike\\\":\\\"🚲\\\",\\\"no_bicycles\\\":\\\"🚳\\\",\\\"woman-biking\\\":\\\"🚴‍♀️\\\",\\\"man-biking\\\":\\\"🚴‍♂️\\\",\\\"bicyclist\\\":\\\"🚴‍♂️\\\",\\\"woman-mountain-biking\\\":\\\"🚵‍♀️\\\",\\\"man-mountain-biking\\\":\\\"🚵‍♂️\\\",\\\"mountain_bicyclist\\\":\\\"🚵‍♂️\\\",\\\"woman-walking\\\":\\\"🚶‍♀️\\\",\\\"man-walking\\\":\\\"🚶‍♂️\\\",\\\"walking\\\":\\\"🚶‍♂️\\\",\\\"no_pedestrians\\\":\\\"🚷\\\",\\\"children_crossing\\\":\\\"🚸\\\",\\\"mens\\\":\\\"🚹\\\",\\\"womens\\\":\\\"🚺\\\",\\\"restroom\\\":\\\"🚻\\\",\\\"baby_symbol\\\":\\\"🚼\\\",\\\"toilet\\\":\\\"🚽\\\",\\\"wc\\\":\\\"🚾\\\",\\\"shower\\\":\\\"🚿\\\",\\\"bath\\\":\\\"🛀\\\",\\\"bathtub\\\":\\\"🛁\\\",\\\"passport_control\\\":\\\"🛂\\\",\\\"customs\\\":\\\"🛃\\\",\\\"baggage_claim\\\":\\\"🛄\\\",\\\"left_luggage\\\":\\\"🛅\\\",\\\"couch_and_lamp\\\":\\\"🛋️\\\",\\\"sleeping_accommodation\\\":\\\"🛌\\\",\\\"shopping_bags\\\":\\\"🛍️\\\",\\\"bellhop_bell\\\":\\\"🛎️\\\",\\\"bed\\\":\\\"🛏️\\\",\\\"place_of_worship\\\":\\\"🛐\\\",\\\"octagonal_sign\\\":\\\"🛑\\\",\\\"shopping_trolley\\\":\\\"🛒\\\",\\\"hammer_and_wrench\\\":\\\"🛠️\\\",\\\"shield\\\":\\\"🛡️\\\",\\\"oil_drum\\\":\\\"🛢️\\\",\\\"motorway\\\":\\\"🛣️\\\",\\\"railway_track\\\":\\\"🛤️\\\",\\\"motor_boat\\\":\\\"🛥️\\\",\\\"small_airplane\\\":\\\"🛩️\\\",\\\"airplane_departure\\\":\\\"🛫\\\",\\\"airplane_arriving\\\":\\\"🛬\\\",\\\"satellite\\\":\\\"🛰️\\\",\\\"passenger_ship\\\":\\\"🛳️\\\",\\\"scooter\\\":\\\"🛴\\\",\\\"motor_scooter\\\":\\\"🛵\\\",\\\"canoe\\\":\\\"🛶\\\",\\\"sled\\\":\\\"🛷\\\",\\\"flying_saucer\\\":\\\"🛸\\\",\\\"zipper_mouth_face\\\":\\\"🤐\\\",\\\"money_mouth_face\\\":\\\"🤑\\\",\\\"face_with_thermometer\\\":\\\"🤒\\\",\\\"nerd_face\\\":\\\"🤓\\\",\\\"thinking_face\\\":\\\"🤔\\\",\\\"face_with_head_bandage\\\":\\\"🤕\\\",\\\"robot_face\\\":\\\"🤖\\\",\\\"hugging_face\\\":\\\"🤗\\\",\\\"the_horns\\\":\\\"🤘\\\",\\\"sign_of_the_horns\\\":\\\"🤘\\\",\\\"call_me_hand\\\":\\\"🤙\\\",\\\"raised_back_of_hand\\\":\\\"🤚\\\",\\\"left-facing_fist\\\":\\\"🤛\\\",\\\"right-facing_fist\\\":\\\"🤜\\\",\\\"handshake\\\":\\\"🤝\\\",\\\"crossed_fingers\\\":\\\"🤞\\\",\\\"hand_with_index_and_middle_fingers_crossed\\\":\\\"🤞\\\",\\\"i_love_you_hand_sign\\\":\\\"🤟\\\",\\\"face_with_cowboy_hat\\\":\\\"🤠\\\",\\\"clown_face\\\":\\\"🤡\\\",\\\"nauseated_face\\\":\\\"🤢\\\",\\\"rolling_on_the_floor_laughing\\\":\\\"🤣\\\",\\\"drooling_face\\\":\\\"🤤\\\",\\\"lying_face\\\":\\\"🤥\\\",\\\"woman-facepalming\\\":\\\"🤦‍♀️\\\",\\\"man-facepalming\\\":\\\"🤦‍♂️\\\",\\\"face_palm\\\":\\\"🤦\\\",\\\"sneezing_face\\\":\\\"🤧\\\",\\\"face_with_raised_eyebrow\\\":\\\"🤨\\\",\\\"face_with_one_eyebrow_raised\\\":\\\"🤨\\\",\\\"star-struck\\\":\\\"🤩\\\",\\\"grinning_face_with_star_eyes\\\":\\\"🤩\\\",\\\"zany_face\\\":\\\"🤪\\\",\\\"grinning_face_with_one_large_and_one_small_eye\\\":\\\"🤪\\\",\\\"shushing_face\\\":\\\"🤫\\\",\\\"face_with_finger_covering_closed_lips\\\":\\\"🤫\\\",\\\"face_with_symbols_on_mouth\\\":\\\"🤬\\\",\\\"serious_face_with_symbols_covering_mouth\\\":\\\"🤬\\\",\\\"face_with_hand_over_mouth\\\":\\\"🤭\\\",\\\"smiling_face_with_smiling_eyes_and_hand_covering_mouth\\\":\\\"🤭\\\",\\\"face_vomiting\\\":\\\"🤮\\\",\\\"face_with_open_mouth_vomiting\\\":\\\"🤮\\\",\\\"exploding_head\\\":\\\"🤯\\\",\\\"shocked_face_with_exploding_head\\\":\\\"🤯\\\",\\\"pregnant_woman\\\":\\\"🤰\\\",\\\"breast-feeding\\\":\\\"🤱\\\",\\\"palms_up_together\\\":\\\"🤲\\\",\\\"selfie\\\":\\\"🤳\\\",\\\"prince\\\":\\\"🤴\\\",\\\"man_in_tuxedo\\\":\\\"🤵\\\",\\\"mrs_claus\\\":\\\"🤶\\\",\\\"mother_christmas\\\":\\\"🤶\\\",\\\"woman-shrugging\\\":\\\"🤷‍♀️\\\",\\\"man-shrugging\\\":\\\"🤷‍♂️\\\",\\\"shrug\\\":\\\"🤷\\\",\\\"woman-cartwheeling\\\":\\\"🤸‍♀️\\\",\\\"man-cartwheeling\\\":\\\"🤸‍♂️\\\",\\\"person_doing_cartwheel\\\":\\\"🤸\\\",\\\"woman-juggling\\\":\\\"🤹‍♀️\\\",\\\"man-juggling\\\":\\\"🤹‍♂️\\\",\\\"juggling\\\":\\\"🤹\\\",\\\"fencer\\\":\\\"🤺\\\",\\\"woman-wrestling\\\":\\\"🤼‍♀️\\\",\\\"man-wrestling\\\":\\\"🤼‍♂️\\\",\\\"wrestlers\\\":\\\"🤼\\\",\\\"woman-playing-water-polo\\\":\\\"🤽‍♀️\\\",\\\"man-playing-water-polo\\\":\\\"🤽‍♂️\\\",\\\"water_polo\\\":\\\"🤽\\\",\\\"woman-playing-handball\\\":\\\"🤾‍♀️\\\",\\\"man-playing-handball\\\":\\\"🤾‍♂️\\\",\\\"handball\\\":\\\"🤾\\\",\\\"wilted_flower\\\":\\\"🥀\\\",\\\"drum_with_drumsticks\\\":\\\"🥁\\\",\\\"clinking_glasses\\\":\\\"🥂\\\",\\\"tumbler_glass\\\":\\\"🥃\\\",\\\"spoon\\\":\\\"🥄\\\",\\\"goal_net\\\":\\\"🥅\\\",\\\"first_place_medal\\\":\\\"🥇\\\",\\\"second_place_medal\\\":\\\"🥈\\\",\\\"third_place_medal\\\":\\\"🥉\\\",\\\"boxing_glove\\\":\\\"🥊\\\",\\\"martial_arts_uniform\\\":\\\"🥋\\\",\\\"curling_stone\\\":\\\"🥌\\\",\\\"croissant\\\":\\\"🥐\\\",\\\"avocado\\\":\\\"🥑\\\",\\\"cucumber\\\":\\\"🥒\\\",\\\"bacon\\\":\\\"🥓\\\",\\\"potato\\\":\\\"🥔\\\",\\\"carrot\\\":\\\"🥕\\\",\\\"baguette_bread\\\":\\\"🥖\\\",\\\"green_salad\\\":\\\"🥗\\\",\\\"shallow_pan_of_food\\\":\\\"🥘\\\",\\\"stuffed_flatbread\\\":\\\"🥙\\\",\\\"egg\\\":\\\"🥚\\\",\\\"glass_of_milk\\\":\\\"🥛\\\",\\\"peanuts\\\":\\\"🥜\\\",\\\"kiwifruit\\\":\\\"🥝\\\",\\\"pancakes\\\":\\\"🥞\\\",\\\"dumpling\\\":\\\"🥟\\\",\\\"fortune_cookie\\\":\\\"🥠\\\",\\\"takeout_box\\\":\\\"🥡\\\",\\\"chopsticks\\\":\\\"🥢\\\",\\\"bowl_with_spoon\\\":\\\"🥣\\\",\\\"cup_with_straw\\\":\\\"🥤\\\",\\\"coconut\\\":\\\"🥥\\\",\\\"broccoli\\\":\\\"🥦\\\",\\\"pie\\\":\\\"🥧\\\",\\\"pretzel\\\":\\\"🥨\\\",\\\"cut_of_meat\\\":\\\"🥩\\\",\\\"sandwich\\\":\\\"🥪\\\",\\\"canned_food\\\":\\\"🥫\\\",\\\"crab\\\":\\\"🦀\\\",\\\"lion_face\\\":\\\"🦁\\\",\\\"scorpion\\\":\\\"🦂\\\",\\\"turkey\\\":\\\"🦃\\\",\\\"unicorn_face\\\":\\\"🦄\\\",\\\"eagle\\\":\\\"🦅\\\",\\\"duck\\\":\\\"🦆\\\",\\\"bat\\\":\\\"🦇\\\",\\\"shark\\\":\\\"🦈\\\",\\\"owl\\\":\\\"🦉\\\",\\\"fox_face\\\":\\\"🦊\\\",\\\"butterfly\\\":\\\"🦋\\\",\\\"deer\\\":\\\"🦌\\\",\\\"gorilla\\\":\\\"🦍\\\",\\\"lizard\\\":\\\"🦎\\\",\\\"rhinoceros\\\":\\\"🦏\\\",\\\"shrimp\\\":\\\"🦐\\\",\\\"squid\\\":\\\"🦑\\\",\\\"giraffe_face\\\":\\\"🦒\\\",\\\"zebra_face\\\":\\\"🦓\\\",\\\"hedgehog\\\":\\\"🦔\\\",\\\"sauropod\\\":\\\"🦕\\\",\\\"t-rex\\\":\\\"🦖\\\",\\\"cricket\\\":\\\"🦗\\\",\\\"cheese_wedge\\\":\\\"🧀\\\",\\\"face_with_monocle\\\":\\\"🧐\\\",\\\"adult\\\":\\\"🧑\\\",\\\"child\\\":\\\"🧒\\\",\\\"older_adult\\\":\\\"🧓\\\",\\\"bearded_person\\\":\\\"🧔\\\",\\\"person_with_headscarf\\\":\\\"🧕\\\",\\\"woman_in_steamy_room\\\":\\\"🧖‍♀️\\\",\\\"man_in_steamy_room\\\":\\\"🧖‍♂️\\\",\\\"person_in_steamy_room\\\":\\\"🧖‍♂️\\\",\\\"woman_climbing\\\":\\\"🧗‍♀️\\\",\\\"person_climbing\\\":\\\"🧗‍♀️\\\",\\\"man_climbing\\\":\\\"🧗‍♂️\\\",\\\"woman_in_lotus_position\\\":\\\"🧘‍♀️\\\",\\\"person_in_lotus_position\\\":\\\"🧘‍♀️\\\",\\\"man_in_lotus_position\\\":\\\"🧘‍♂️\\\",\\\"female_mage\\\":\\\"🧙‍♀️\\\",\\\"mage\\\":\\\"🧙‍♀️\\\",\\\"male_mage\\\":\\\"🧙‍♂️\\\",\\\"female_fairy\\\":\\\"🧚‍♀️\\\",\\\"fairy\\\":\\\"🧚‍♀️\\\",\\\"male_fairy\\\":\\\"🧚‍♂️\\\",\\\"female_vampire\\\":\\\"🧛‍♀️\\\",\\\"vampire\\\":\\\"🧛‍♀️\\\",\\\"male_vampire\\\":\\\"🧛‍♂️\\\",\\\"mermaid\\\":\\\"🧜‍♀️\\\",\\\"merman\\\":\\\"🧜‍♂️\\\",\\\"merperson\\\":\\\"🧜‍♂️\\\",\\\"female_elf\\\":\\\"🧝‍♀️\\\",\\\"male_elf\\\":\\\"🧝‍♂️\\\",\\\"elf\\\":\\\"🧝‍♂️\\\",\\\"female_genie\\\":\\\"🧞‍♀️\\\",\\\"male_genie\\\":\\\"🧞‍♂️\\\",\\\"genie\\\":\\\"🧞‍♂️\\\",\\\"female_zombie\\\":\\\"🧟‍♀️\\\",\\\"male_zombie\\\":\\\"🧟‍♂️\\\",\\\"zombie\\\":\\\"🧟‍♂️\\\",\\\"brain\\\":\\\"🧠\\\",\\\"orange_heart\\\":\\\"🧡\\\",\\\"billed_cap\\\":\\\"🧢\\\",\\\"scarf\\\":\\\"🧣\\\",\\\"gloves\\\":\\\"🧤\\\",\\\"coat\\\":\\\"🧥\\\",\\\"socks\\\":\\\"🧦\\\",\\\"bangbang\\\":\\\"‼️\\\",\\\"interrobang\\\":\\\"⁉️\\\",\\\"tm\\\":\\\"™️\\\",\\\"information_source\\\":\\\"ℹ️\\\",\\\"left_right_arrow\\\":\\\"↔️\\\",\\\"arrow_up_down\\\":\\\"↕️\\\",\\\"arrow_upper_left\\\":\\\"↖️\\\",\\\"arrow_upper_right\\\":\\\"↗️\\\",\\\"arrow_lower_right\\\":\\\"↘️\\\",\\\"arrow_lower_left\\\":\\\"↙️\\\",\\\"leftwards_arrow_with_hook\\\":\\\"↩️\\\",\\\"arrow_right_hook\\\":\\\"↪️\\\",\\\"watch\\\":\\\"⌚\\\",\\\"hourglass\\\":\\\"⌛\\\",\\\"keyboard\\\":\\\"⌨️\\\",\\\"eject\\\":\\\"⏏️\\\",\\\"fast_forward\\\":\\\"⏩\\\",\\\"rewind\\\":\\\"⏪\\\",\\\"arrow_double_up\\\":\\\"⏫\\\",\\\"arrow_double_down\\\":\\\"⏬\\\",\\\"black_right_pointing_double_triangle_with_vertical_bar\\\":\\\"⏭️\\\",\\\"black_left_pointing_double_triangle_with_vertical_bar\\\":\\\"⏮️\\\",\\\"black_right_pointing_triangle_with_double_vertical_bar\\\":\\\"⏯️\\\",\\\"alarm_clock\\\":\\\"⏰\\\",\\\"stopwatch\\\":\\\"⏱️\\\",\\\"timer_clock\\\":\\\"⏲️\\\",\\\"hourglass_flowing_sand\\\":\\\"⏳\\\",\\\"double_vertical_bar\\\":\\\"⏸️\\\",\\\"black_square_for_stop\\\":\\\"⏹️\\\",\\\"black_circle_for_record\\\":\\\"⏺️\\\",\\\"m\\\":\\\"Ⓜ️\\\",\\\"black_small_square\\\":\\\"▪️\\\",\\\"white_small_square\\\":\\\"▫️\\\",\\\"arrow_forward\\\":\\\"▶️\\\",\\\"arrow_backward\\\":\\\"◀️\\\",\\\"white_medium_square\\\":\\\"◻️\\\",\\\"black_medium_square\\\":\\\"◼️\\\",\\\"white_medium_small_square\\\":\\\"◽\\\",\\\"black_medium_small_square\\\":\\\"◾\\\",\\\"sunny\\\":\\\"☀️\\\",\\\"cloud\\\":\\\"☁️\\\",\\\"umbrella\\\":\\\"☂️\\\",\\\"snowman\\\":\\\"☃️\\\",\\\"comet\\\":\\\"☄️\\\",\\\"phone\\\":\\\"☎️\\\",\\\"telephone\\\":\\\"☎️\\\",\\\"ballot_box_with_check\\\":\\\"☑️\\\",\\\"shamrock\\\":\\\"☘️\\\",\\\"point_up\\\":\\\"☝️\\\",\\\"skull_and_crossbones\\\":\\\"☠️\\\",\\\"radioactive_sign\\\":\\\"☢️\\\",\\\"biohazard_sign\\\":\\\"☣️\\\",\\\"orthodox_cross\\\":\\\"☦️\\\",\\\"star_and_crescent\\\":\\\"☪️\\\",\\\"peace_symbol\\\":\\\"☮️\\\",\\\"yin_yang\\\":\\\"☯️\\\",\\\"wheel_of_dharma\\\":\\\"☸️\\\",\\\"white_frowning_face\\\":\\\"☹️\\\",\\\"relaxed\\\":\\\"☺️\\\",\\\"female_sign\\\":\\\"♀️\\\",\\\"male_sign\\\":\\\"♂️\\\",\\\"gemini\\\":\\\"♊\\\",\\\"cancer\\\":\\\"♋\\\",\\\"leo\\\":\\\"♌\\\",\\\"virgo\\\":\\\"♍\\\",\\\"libra\\\":\\\"♎\\\",\\\"scorpius\\\":\\\"♏\\\",\\\"spades\\\":\\\"♠️\\\",\\\"clubs\\\":\\\"♣️\\\",\\\"hearts\\\":\\\"♥️\\\",\\\"diamonds\\\":\\\"♦️\\\",\\\"hotsprings\\\":\\\"♨️\\\",\\\"recycle\\\":\\\"♻️\\\",\\\"wheelchair\\\":\\\"♿\\\",\\\"hammer_and_pick\\\":\\\"⚒️\\\",\\\"crossed_swords\\\":\\\"⚔️\\\",\\\"medical_symbol\\\":\\\"⚕️\\\",\\\"staff_of_aesculapius\\\":\\\"⚕️\\\",\\\"scales\\\":\\\"⚖️\\\",\\\"alembic\\\":\\\"⚗️\\\",\\\"gear\\\":\\\"⚙️\\\",\\\"atom_symbol\\\":\\\"⚛️\\\",\\\"fleur_de_lis\\\":\\\"⚜️\\\",\\\"warning\\\":\\\"⚠️\\\",\\\"zap\\\":\\\"⚡\\\",\\\"white_circle\\\":\\\"⚪\\\",\\\"black_circle\\\":\\\"⚫\\\",\\\"coffin\\\":\\\"⚰️\\\",\\\"funeral_urn\\\":\\\"⚱️\\\",\\\"soccer\\\":\\\"⚽\\\",\\\"baseball\\\":\\\"⚾\\\",\\\"snowman_without_snow\\\":\\\"⛄\\\",\\\"partly_sunny\\\":\\\"⛅\\\",\\\"thunder_cloud_and_rain\\\":\\\"⛈️\\\",\\\"ophiuchus\\\":\\\"⛎\\\",\\\"pick\\\":\\\"⛏️\\\",\\\"helmet_with_white_cross\\\":\\\"⛑️\\\",\\\"chains\\\":\\\"⛓️\\\",\\\"no_entry\\\":\\\"⛔\\\",\\\"shinto_shrine\\\":\\\"⛩️\\\",\\\"church\\\":\\\"⛪\\\",\\\"mountain\\\":\\\"⛰️\\\",\\\"umbrella_on_ground\\\":\\\"⛱️\\\",\\\"fountain\\\":\\\"⛲\\\",\\\"golf\\\":\\\"⛳\\\",\\\"ferry\\\":\\\"⛴️\\\",\\\"boat\\\":\\\"⛵\\\",\\\"sailboat\\\":\\\"⛵\\\",\\\"skier\\\":\\\"⛷️\\\",\\\"ice_skate\\\":\\\"⛸️\\\",\\\"woman-bouncing-ball\\\":\\\"⛹️‍♀️\\\",\\\"man-bouncing-ball\\\":\\\"⛹️‍♂️\\\",\\\"person_with_ball\\\":\\\"⛹️‍♂️\\\",\\\"tent\\\":\\\"⛺\\\",\\\"fuelpump\\\":\\\"⛽\\\",\\\"scissors\\\":\\\"✂️\\\",\\\"airplane\\\":\\\"✈️\\\",\\\"email\\\":\\\"✉️\\\",\\\"envelope\\\":\\\"✉️\\\",\\\"fist\\\":\\\"✊\\\",\\\"hand\\\":\\\"✋\\\",\\\"raised_hand\\\":\\\"✋\\\",\\\"v\\\":\\\"✌️\\\",\\\"writing_hand\\\":\\\"✍️\\\",\\\"pencil2\\\":\\\"✏️\\\",\\\"black_nib\\\":\\\"✒️\\\",\\\"heavy_check_mark\\\":\\\"✔️\\\",\\\"heavy_multiplication_x\\\":\\\"✖️\\\",\\\"latin_cross\\\":\\\"✝️\\\",\\\"star_of_david\\\":\\\"✡️\\\",\\\"eight_spoked_asterisk\\\":\\\"✳️\\\",\\\"eight_pointed_black_star\\\":\\\"✴️\\\",\\\"snowflake\\\":\\\"❄️\\\",\\\"sparkle\\\":\\\"❇️\\\",\\\"x\\\":\\\"❌\\\",\\\"negative_squared_cross_mark\\\":\\\"❎\\\",\\\"heavy_heart_exclamation_mark_ornament\\\":\\\"❣️\\\",\\\"heart\\\":\\\"❤️\\\",\\\"arrow_right\\\":\\\"➡️\\\",\\\"curly_loop\\\":\\\"➰\\\",\\\"loop\\\":\\\"➿\\\",\\\"arrow_heading_up\\\":\\\"⤴️\\\",\\\"arrow_heading_down\\\":\\\"⤵️\\\",\\\"arrow_left\\\":\\\"⬅️\\\",\\\"arrow_up\\\":\\\"⬆️\\\",\\\"arrow_down\\\":\\\"⬇️\\\",\\\"black_large_square\\\":\\\"⬛\\\",\\\"white_large_square\\\":\\\"⬜\\\",\\\"star\\\":\\\"⭐\\\",\\\"o\\\":\\\"⭕\\\",\\\"wavy_dash\\\":\\\"〰️\\\",\\\"part_alternation_mark\\\":\\\"〽️\\\",\\\"congratulations\\\":\\\"㊗️\\\",\\\"secret\\\":\\\"㊙️\\\"}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL25vZGUtZW1vamkvbGliL2Vtb2ppLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/node-emoji/lib/emoji.json\n"); - -/***/ }), - -/***/ "../node_modules/node-libs-browser/node_modules/punycode/punycode.js": -/*!***************************************************************************!*\ - !*** ../node_modules/node-libs-browser/node_modules/punycode/punycode.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n\n\n;\n\n(function (root) {\n /** Detect free variables */\n var freeExports = ( false ? undefined : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n var freeModule = ( false ? undefined : _typeof(module)) == 'object' && module && !module.nodeType && module;\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global;\n\n if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n root = freeGlobal;\n }\n /**\n * The `punycode` object.\n * @name punycode\n * @type Object\n */\n\n\n var punycode,\n\n /** Highest positive signed 32-bit float value */\n maxInt = 2147483647,\n // aka. 0x7FFFFFFF or 2^31-1\n\n /** Bootstring parameters */\n base = 36,\n tMin = 1,\n tMax = 26,\n skew = 38,\n damp = 700,\n initialBias = 72,\n initialN = 128,\n // 0x80\n delimiter = '-',\n // '\\x2D'\n\n /** Regular expressions */\n regexPunycode = /^xn--/,\n regexNonASCII = /[^\\x20-\\x7E]/,\n // unprintable ASCII chars + non-ASCII chars\n regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n // RFC 3490 separators\n\n /** Error messages */\n errors = {\n 'overflow': 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input'\n },\n\n /** Convenience shortcuts */\n baseMinusTMin = base - tMin,\n floor = Math.floor,\n stringFromCharCode = String.fromCharCode,\n\n /** Temporary variable */\n key;\n /*--------------------------------------------------------------------------*/\n\n /**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\n\n function error(type) {\n throw new RangeError(errors[type]);\n }\n /**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\n\n\n function map(array, fn) {\n var length = array.length;\n var result = [];\n\n while (length--) {\n result[length] = fn(array[length]);\n }\n\n return result;\n }\n /**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\n\n\n function mapDomain(string, fn) {\n var parts = string.split('@');\n var result = '';\n\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@';\n string = parts[1];\n } // Avoid `split(regex)` for IE8 compatibility. See #17.\n\n\n string = string.replace(regexSeparators, '\\x2E');\n var labels = string.split('.');\n var encoded = map(labels, fn).join('.');\n return result + encoded;\n }\n /**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\n\n\n function ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n\n while (counter < length) {\n value = string.charCodeAt(counter++);\n\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n\n if ((extra & 0xFC00) == 0xDC00) {\n // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n\n return output;\n }\n /**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\n\n\n function ucs2encode(array) {\n return map(array, function (value) {\n var output = '';\n\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n\n output += stringFromCharCode(value);\n return output;\n }).join('');\n }\n /**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\n\n\n function basicToDigit(codePoint) {\n if (codePoint - 48 < 10) {\n return codePoint - 22;\n }\n\n if (codePoint - 65 < 26) {\n return codePoint - 65;\n }\n\n if (codePoint - 97 < 26) {\n return codePoint - 97;\n }\n\n return base;\n }\n /**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\n\n\n function digitToBasic(digit, flag) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n }\n /**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\n\n\n function adapt(delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n\n for (;\n /* no initialization */\n delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n }\n /**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\n\n\n function decode(input) {\n // Don't use UCS-2\n var output = [],\n inputLength = input.length,\n out,\n i = 0,\n n = initialN,\n bias = initialBias,\n basic,\n j,\n index,\n oldi,\n w,\n k,\n digit,\n t,\n\n /** Cached calculation results */\n baseMinusT; // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n\n if (basic < 0) {\n basic = 0;\n }\n\n for (j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic');\n }\n\n output.push(input.charCodeAt(j));\n } // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n\n for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)\n /* no final expression */\n {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n for (oldi = i, w = 1, k = base;;\n /* no condition */\n k += base) {\n if (index >= inputLength) {\n error('invalid-input');\n }\n\n digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error('overflow');\n }\n\n i += digit * w;\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (digit < t) {\n break;\n }\n\n baseMinusT = base - t;\n\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow');\n }\n\n w *= baseMinusT;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n\n if (floor(i / out) > maxInt - n) {\n error('overflow');\n }\n\n n += floor(i / out);\n i %= out; // Insert `n` at position `i` of the output\n\n output.splice(i++, 0, n);\n }\n\n return ucs2encode(output);\n }\n /**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\n\n\n function encode(input) {\n var n,\n delta,\n handledCPCount,\n basicLength,\n bias,\n j,\n m,\n q,\n k,\n t,\n currentValue,\n output = [],\n\n /** `inputLength` will hold the number of code points in `input`. */\n inputLength,\n\n /** Cached calculation results */\n handledCPCountPlusOne,\n baseMinusT,\n qMinusT; // Convert the input in UCS-2 to Unicode\n\n input = ucs2decode(input); // Cache the length\n\n inputLength = input.length; // Initialize the state\n\n n = initialN;\n delta = 0;\n bias = initialBias; // Handle the basic code points\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n // Finish the basic string - if it is not empty - with a delimiter\n\n if (basicLength) {\n output.push(delimiter);\n } // Main encoding loop:\n\n\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n for (m = maxInt, j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n // but guard against overflow\n\n\n handledCPCountPlusOne = handledCPCount + 1;\n\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow');\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < n && ++delta > maxInt) {\n error('overflow');\n }\n\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer\n for (q = delta, k = base;;\n /* no condition */\n k += base) {\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (q < t) {\n break;\n }\n\n qMinusT = q - t;\n baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n\n return output.join('');\n }\n /**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\n\n\n function toUnicode(input) {\n return mapDomain(input, function (string) {\n return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n });\n }\n /**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\n\n\n function toASCII(input) {\n return mapDomain(input, function (string) {\n return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n });\n }\n /*--------------------------------------------------------------------------*/\n\n /** Define the public API */\n\n\n punycode = {\n /**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n 'version': '1.4.1',\n\n /**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n 'ucs2': {\n 'decode': ucs2decode,\n 'encode': ucs2encode\n },\n 'decode': decode,\n 'encode': encode,\n 'toASCII': toASCII,\n 'toUnicode': toUnicode\n };\n /** Expose `punycode` */\n // Some AMD build optimizers, like r.js, check for specific condition patterns\n // like the following:\n\n if ( true && _typeof(__webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) == 'object' && __webpack_require__(/*! !webpack amd options */ \"../node_modules/webpack/buildin/amd-options.js\")) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return punycode;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (freeExports && freeModule) {\n if (module.exports == freeExports) {\n // in Node.js, io.js, or RingoJS v0.8.0+\n freeModule.exports = punycode;\n } else {\n // in Narwhal or RingoJS v0.7.0-\n for (key in punycode) {\n punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n }\n }\n } else {\n // in Rhino or a web browser\n root.punycode = punycode;\n }\n})(this);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzPzk2OTgiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZSB2MS40LjEgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJlxuXHRcdCFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHQhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKFxuXHRcdGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLnNlbGYgPT09IGZyZWVHbG9iYWxcblx0KSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXG5cdHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuXHQgKiBpdGVtLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXAoYXJyYXksIGZuKSB7XG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0XHR2YXIgcmVzdWx0ID0gW107XG5cdFx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuXHQgKiBhZGRyZXNzZXMuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuXHQgKiBjaGFyYWN0ZXIuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG5cdCAqIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0XHR2YXIgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHRcdC8vIHRoZSBsb2NhbCBwYXJ0IChpLmUuIGV2ZXJ5dGhpbmcgdXAgdG8gYEBgKSBpbnRhY3QuXG5cdFx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcblx0XHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHRcdH1cblx0XHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0XHR2YXIgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdFx0dmFyIGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRcdHJldHVybiByZXN1bHQgKyBlbmNvZGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcblx0ICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuXHQgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuXHQgKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcblx0ICogbWF0Y2hpbmcgVVRGLTE2LlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcblx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGRlY29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgY291bnRlciA9IDAsXG5cdFx0ICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0ICAgIHZhbHVlLFxuXHRcdCAgICBleHRyYTtcblx0XHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0XHQvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcblx0XHRcdFx0XHQvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZW5jb2RlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0XHRyZXR1cm4gbWFwKGFycmF5LCBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XG5cdFx0XHRcdHZhbHVlIC09IDB4MTAwMDA7XG5cdFx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlKTtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuXHQgKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0XHRpZiAoY29kZVBvaW50IC0gNDggPCAxMCkge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gNjUgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gOTcgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xuXHRcdH1cblx0XHRyZXR1cm4gYmFzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcblx0ICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcblx0ICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cblx0ICovXG5cdGZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCwgZmxhZykge1xuXHRcdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdFx0cmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuXHQgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuXHQgKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuXHQgKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuXHQgKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcblx0ICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG5cdCAqIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcblx0ICogVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3Jcblx0ICogZW1haWwgYWRkcmVzcy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS40LjEnLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiBmcmVlTW9kdWxlKSB7XG5cdFx0aWYgKG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzKSB7XG5cdFx0XHQvLyBpbiBOb2RlLmpzLCBpby5qcywgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUE7QUFiQTtBQUNBO0FBY0E7QUFDQTtBQWhCQTtBQUFBO0FBa0JBO0FBbEJBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBNUJBO0FBQUE7QUFDQTtBQStCQTtBQWhDQTtBQW1DQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQVVBO0FBRUE7Ozs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBYUE7QUFoQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFqQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBV0E7QUFaQTtBQUNBO0FBYUE7QUFkQTtBQUFBO0FBQUE7QUFDQTtBQW1CQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQTlDQTtBQUNBO0FBQ0E7QUFnREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUkE7QUFZQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFBQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFEQTtBQUFBO0FBTEE7QUFTQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQWpoQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/node-libs-browser/node_modules/punycode/punycode.js\n"); - -/***/ }), - -/***/ "../node_modules/object-assign/index.js": -/*!**********************************************!*\ - !*** ../node_modules/object-assign/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n if (val === null || val === undefined) {\n throw new TypeError('Object.assign cannot be called with null or undefined');\n }\n\n return Object(val);\n}\n\nfunction shouldUseNative() {\n try {\n if (!Object.assign) {\n return false;\n } // Detect buggy property enumeration order in older V8 versions.\n // https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\n\n var test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\n test1[5] = 'de';\n\n if (Object.getOwnPropertyNames(test1)[0] === '5') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test2 = {};\n\n for (var i = 0; i < 10; i++) {\n test2['_' + String.fromCharCode(i)] = i;\n }\n\n var order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n return test2[n];\n });\n\n if (order2.join('') !== '0123456789') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test3 = {};\n 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n test3[letter] = letter;\n });\n\n if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n return false;\n }\n\n return true;\n } catch (err) {\n // We don't expect any of the above to throw, but better to be safe.\n return false;\n }\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n var from;\n var to = toObject(target);\n var symbols;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n\n if (getOwnPropertySymbols) {\n symbols = getOwnPropertySymbols(from);\n\n for (var i = 0; i < symbols.length; i++) {\n if (propIsEnumerable.call(from, symbols[i])) {\n to[symbols[i]] = from[symbols[i]];\n }\n }\n }\n }\n\n return to;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanM/MjBiZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXBDQTtBQXNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/object-assign/index.js\n"); - -/***/ }), - -/***/ "../node_modules/object-keys/implementation.js": -/*!*****************************************************!*\ - !*** ../node_modules/object-keys/implementation.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar keysShim;\n\nif (!Object.keys) {\n // modified from https://github.com/es-shims/es5-shim\n var has = Object.prototype.hasOwnProperty;\n var toStr = Object.prototype.toString;\n\n var isArgs = __webpack_require__(/*! ./isArguments */ \"../node_modules/object-keys/isArguments.js\"); // eslint-disable-line global-require\n\n\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var hasDontEnumBug = !isEnumerable.call({\n toString: null\n }, 'toString');\n var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n var dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];\n\n var equalsConstructorPrototype = function equalsConstructorPrototype(o) {\n var ctor = o.constructor;\n return ctor && ctor.prototype === o;\n };\n\n var excludedKeys = {\n $applicationCache: true,\n $console: true,\n $external: true,\n $frame: true,\n $frameElement: true,\n $frames: true,\n $innerHeight: true,\n $innerWidth: true,\n $onmozfullscreenchange: true,\n $onmozfullscreenerror: true,\n $outerHeight: true,\n $outerWidth: true,\n $pageXOffset: true,\n $pageYOffset: true,\n $parent: true,\n $scrollLeft: true,\n $scrollTop: true,\n $scrollX: true,\n $scrollY: true,\n $self: true,\n $webkitIndexedDB: true,\n $webkitStorageInfo: true,\n $window: true\n };\n\n var hasAutomationEqualityBug = function () {\n /* global window */\n if (typeof window === 'undefined') {\n return false;\n }\n\n for (var k in window) {\n try {\n if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && _typeof(window[k]) === 'object') {\n try {\n equalsConstructorPrototype(window[k]);\n } catch (e) {\n return true;\n }\n }\n } catch (e) {\n return true;\n }\n }\n\n return false;\n }();\n\n var equalsConstructorPrototypeIfNotBuggy = function equalsConstructorPrototypeIfNotBuggy(o) {\n /* global window */\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n return equalsConstructorPrototype(o);\n }\n\n try {\n return equalsConstructorPrototype(o);\n } catch (e) {\n return false;\n }\n };\n\n keysShim = function keys(object) {\n var isObject = object !== null && _typeof(object) === 'object';\n var isFunction = toStr.call(object) === '[object Function]';\n var isArguments = isArgs(object);\n var isString = isObject && toStr.call(object) === '[object String]';\n var theKeys = [];\n\n if (!isObject && !isFunction && !isArguments) {\n throw new TypeError('Object.keys called on a non-object');\n }\n\n var skipProto = hasProtoEnumBug && isFunction;\n\n if (isString && object.length > 0 && !has.call(object, 0)) {\n for (var i = 0; i < object.length; ++i) {\n theKeys.push(String(i));\n }\n }\n\n if (isArguments && object.length > 0) {\n for (var j = 0; j < object.length; ++j) {\n theKeys.push(String(j));\n }\n } else {\n for (var name in object) {\n if (!(skipProto && name === 'prototype') && has.call(object, name)) {\n theKeys.push(String(name));\n }\n }\n }\n\n if (hasDontEnumBug) {\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n for (var k = 0; k < dontEnums.length; ++k) {\n if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n theKeys.push(dontEnums[k]);\n }\n }\n }\n\n return theKeys;\n };\n}\n\nmodule.exports = keysShim;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbXBsZW1lbnRhdGlvbi5qcz81NjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXZDQTtBQXlDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/object-keys/implementation.js\n"); - -/***/ }), - -/***/ "../node_modules/object-keys/index.js": -/*!********************************************!*\ - !*** ../node_modules/object-keys/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar slice = Array.prototype.slice;\n\nvar isArgs = __webpack_require__(/*! ./isArguments */ \"../node_modules/object-keys/isArguments.js\");\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) {\n return origKeys(o);\n} : __webpack_require__(/*! ./implementation */ \"../node_modules/object-keys/implementation.js\");\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n if (Object.keys) {\n var keysWorksWithArguments = function () {\n // Safari 5.0 bug\n var args = Object.keys(arguments);\n return args && args.length === arguments.length;\n }(1, 2);\n\n if (!keysWorksWithArguments) {\n Object.keys = function keys(object) {\n // eslint-disable-line func-name-matching\n if (isArgs(object)) {\n return originalKeys(slice.call(object));\n }\n\n return originalKeys(object);\n };\n }\n } else {\n Object.keys = keysShim;\n }\n\n return Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz81NzQ2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFNQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQUE7QUFsQkE7QUFDQTtBQW9CQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/object-keys/index.js\n"); - -/***/ }), - -/***/ "../node_modules/object-keys/isArguments.js": -/*!**************************************************!*\ - !*** ../node_modules/object-keys/isArguments.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n var str = toStr.call(value);\n var isArgs = str === '[object Arguments]';\n\n if (!isArgs) {\n isArgs = str !== '[object Array]' && value !== null && _typeof(value) === 'object' && typeof value.length === 'number' && value.length >= 0 && toStr.call(value.callee) === '[object Function]';\n }\n\n return isArgs;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2lzQXJndW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcz9hNjZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFYQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/object-keys/isArguments.js\n"); - -/***/ }), - -/***/ "../node_modules/os-browserify/browser.js": -/*!************************************************!*\ - !*** ../node_modules/os-browserify/browser.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports.endianness = function () {\n return 'LE';\n};\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname;\n } else return '';\n};\n\nexports.loadavg = function () {\n return [];\n};\n\nexports.uptime = function () {\n return 0;\n};\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () {\n return [];\n};\n\nexports.type = function () {\n return 'Browser';\n};\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n\n return '';\n};\n\nexports.networkInterfaces = exports.getNetworkInterfaces = function () {\n return {};\n};\n\nexports.arch = function () {\n return 'javascript';\n};\n\nexports.platform = function () {\n return 'browser';\n};\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n return '/';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL29zLWJyb3dzZXJpZnkvYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzPzlkZjkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5lbmRpYW5uZXNzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJ0xFJyB9O1xuXG5leHBvcnRzLmhvc3RuYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5ob3N0bmFtZVxuICAgIH1cbiAgICBlbHNlIHJldHVybiAnJztcbn07XG5cbmV4cG9ydHMubG9hZGF2ZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdIH07XG5cbmV4cG9ydHMudXB0aW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gMCB9O1xuXG5leHBvcnRzLmZyZWVtZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE51bWJlci5NQVhfVkFMVUU7XG59O1xuXG5leHBvcnRzLnRvdGFsbWVtID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBOdW1iZXIuTUFYX1ZBTFVFO1xufTtcblxuZXhwb3J0cy5jcHVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW10gfTtcblxuZXhwb3J0cy50eXBlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJ0Jyb3dzZXInIH07XG5cbmV4cG9ydHMucmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5hcHBWZXJzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnRzLm5ldHdvcmtJbnRlcmZhY2VzXG49IGV4cG9ydHMuZ2V0TmV0d29ya0ludGVyZmFjZXNcbj0gZnVuY3Rpb24gKCkgeyByZXR1cm4ge30gfTtcblxuZXhwb3J0cy5hcmNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJ2phdmFzY3JpcHQnIH07XG5cbmV4cG9ydHMucGxhdGZvcm0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnYnJvd3NlcicgfTtcblxuZXhwb3J0cy50bXBkaXIgPSBleHBvcnRzLnRtcERpciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJy90bXAnO1xufTtcblxuZXhwb3J0cy5FT0wgPSAnXFxuJztcblxuZXhwb3J0cy5ob21lZGlyID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gJy8nXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUVBO0FBRkE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/os-browserify/browser.js\n"); - -/***/ }), - -/***/ "../node_modules/parse-entities/decode-entity.browser.js": -/*!***************************************************************!*\ - !*** ../node_modules/parse-entities/decode-entity.browser.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/* eslint-env browser */\n\nvar el;\nvar semicolon = 59; // ';'\n\nmodule.exports = decodeEntity;\n\nfunction decodeEntity(characters) {\n var entity = '&' + characters + ';';\n\n var _char;\n\n el = el || document.createElement('i');\n el.innerHTML = entity;\n _char = el.textContent; // Some entities do not require the closing semicolon (`¬` - for instance),\n // which leads to situations where parsing the assumed entity of ¬it; will\n // result in the string `¬it;`. When we encounter a trailing semicolon after\n // parsing and the entity to decode was not a semicolon (`;`), we can\n // assume that the matching was incomplete\n\n if (_char.charCodeAt(_char.length - 1) === semicolon && characters !== 'semi') {\n return false;\n } // If the decoded string is equal to the input, the entity was not valid\n\n\n return _char === entity ? false : _char;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWVudGl0aWVzL2RlY29kZS1lbnRpdHkuYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcGFyc2UtZW50aXRpZXMvZGVjb2RlLWVudGl0eS5icm93c2VyLmpzPzBhNGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG52YXIgZWxcblxudmFyIHNlbWljb2xvbiA9IDU5IC8vICAnOydcblxubW9kdWxlLmV4cG9ydHMgPSBkZWNvZGVFbnRpdHlcblxuZnVuY3Rpb24gZGVjb2RlRW50aXR5KGNoYXJhY3RlcnMpIHtcbiAgdmFyIGVudGl0eSA9ICcmJyArIGNoYXJhY3RlcnMgKyAnOydcbiAgdmFyIGNoYXJcblxuICBlbCA9IGVsIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKVxuICBlbC5pbm5lckhUTUwgPSBlbnRpdHlcbiAgY2hhciA9IGVsLnRleHRDb250ZW50XG5cbiAgLy8gU29tZSBlbnRpdGllcyBkbyBub3QgcmVxdWlyZSB0aGUgY2xvc2luZyBzZW1pY29sb24gKGAmbm90YCAtIGZvciBpbnN0YW5jZSksXG4gIC8vIHdoaWNoIGxlYWRzIHRvIHNpdHVhdGlvbnMgd2hlcmUgcGFyc2luZyB0aGUgYXNzdW1lZCBlbnRpdHkgb2YgJm5vdGl0OyB3aWxsXG4gIC8vIHJlc3VsdCBpbiB0aGUgc3RyaW5nIGDCrGl0O2AuICBXaGVuIHdlIGVuY291bnRlciBhIHRyYWlsaW5nIHNlbWljb2xvbiBhZnRlclxuICAvLyBwYXJzaW5nIGFuZCB0aGUgZW50aXR5IHRvIGRlY29kZSB3YXMgbm90IGEgc2VtaWNvbG9uIChgJnNlbWk7YCksIHdlIGNhblxuICAvLyBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgd2FzIGluY29tcGxldGVcbiAgaWYgKGNoYXIuY2hhckNvZGVBdChjaGFyLmxlbmd0aCAtIDEpID09PSBzZW1pY29sb24gJiYgY2hhcmFjdGVycyAhPT0gJ3NlbWknKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiB0aGUgZGVjb2RlZCBzdHJpbmcgaXMgZXF1YWwgdG8gdGhlIGlucHV0LCB0aGUgZW50aXR5IHdhcyBub3QgdmFsaWRcbiAgcmV0dXJuIGNoYXIgPT09IGVudGl0eSA/IGZhbHNlIDogY2hhclxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBZEE7QUFDQTtBQUNBO0FBZ0JBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/parse-entities/decode-entity.browser.js\n"); - -/***/ }), - -/***/ "../node_modules/parse-entities/index.js": -/*!***********************************************!*\ - !*** ../node_modules/parse-entities/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar legacy = __webpack_require__(/*! character-entities-legacy */ \"../node_modules/character-entities-legacy/index.json\");\n\nvar invalid = __webpack_require__(/*! character-reference-invalid */ \"../node_modules/character-reference-invalid/index.json\");\n\nvar decimal = __webpack_require__(/*! is-decimal */ \"../node_modules/is-decimal/index.js\");\n\nvar hexadecimal = __webpack_require__(/*! is-hexadecimal */ \"../node_modules/is-hexadecimal/index.js\");\n\nvar alphanumerical = __webpack_require__(/*! is-alphanumerical */ \"../node_modules/is-alphanumerical/index.js\");\n\nvar decodeEntity = __webpack_require__(/*! ./decode-entity */ \"../node_modules/parse-entities/decode-entity.browser.js\");\n\nmodule.exports = parseEntities;\nvar own = {}.hasOwnProperty;\nvar fromCharCode = String.fromCharCode;\nvar noop = Function.prototype; // Default settings.\n\nvar defaults = {\n warning: null,\n reference: null,\n text: null,\n warningContext: null,\n referenceContext: null,\n textContext: null,\n position: {},\n additional: null,\n attribute: false,\n nonTerminated: true\n}; // Characters.\n\nvar tab = 9; // '\\t'\n\nvar lineFeed = 10; // '\\n'\n\nvar formFeed = 12; // '\\f'\n\nvar space = 32; // ' '\n\nvar ampersand = 38; // '&'\n\nvar semicolon = 59; // ';'\n\nvar lessThan = 60; // '<'\n\nvar equalsTo = 61; // '='\n\nvar numberSign = 35; // '#'\n\nvar uppercaseX = 88; // 'X'\n\nvar lowercaseX = 120; // 'x'\n\nvar replacementCharacter = 65533; // '�'\n// Reference types.\n\nvar name = 'named';\nvar hexa = 'hexadecimal';\nvar deci = 'decimal'; // Map of bases.\n\nvar bases = {};\nbases[hexa] = 16;\nbases[deci] = 10; // Map of types to tests.\n// Each type of character reference accepts different characters.\n// This test is used to detect whether a reference has ended (as the semicolon\n// is not strictly needed).\n\nvar tests = {};\ntests[name] = alphanumerical;\ntests[deci] = decimal;\ntests[hexa] = hexadecimal; // Warning types.\n\nvar namedNotTerminated = 1;\nvar numericNotTerminated = 2;\nvar namedEmpty = 3;\nvar numericEmpty = 4;\nvar namedUnknown = 5;\nvar numericDisallowed = 6;\nvar numericProhibited = 7; // Warning messages.\n\nvar messages = {};\nmessages[namedNotTerminated] = 'Named character references must be terminated by a semicolon';\nmessages[numericNotTerminated] = 'Numeric character references must be terminated by a semicolon';\nmessages[namedEmpty] = 'Named character references cannot be empty';\nmessages[numericEmpty] = 'Numeric character references cannot be empty';\nmessages[namedUnknown] = 'Named character references must be known';\nmessages[numericDisallowed] = 'Numeric character references cannot be disallowed';\nmessages[numericProhibited] = 'Numeric character references cannot be outside the permissible Unicode range'; // Wrap to ensure clean parameters are given to `parse`.\n\nfunction parseEntities(value, options) {\n var settings = {};\n var option;\n var key;\n\n if (!options) {\n options = {};\n }\n\n for (key in defaults) {\n option = options[key];\n settings[key] = option === null || option === undefined ? defaults[key] : option;\n }\n\n if (settings.position.indent || settings.position.start) {\n settings.indent = settings.position.indent || [];\n settings.position = settings.position.start;\n }\n\n return parse(value, settings);\n} // Parse entities.\n// eslint-disable-next-line complexity\n\n\nfunction parse(value, settings) {\n var additional = settings.additional;\n var nonTerminated = settings.nonTerminated;\n var handleText = settings.text;\n var handleReference = settings.reference;\n var handleWarning = settings.warning;\n var textContext = settings.textContext;\n var referenceContext = settings.referenceContext;\n var warningContext = settings.warningContext;\n var pos = settings.position;\n var indent = settings.indent || [];\n var length = value.length;\n var index = 0;\n var lines = -1;\n var column = pos.column || 1;\n var line = pos.line || 1;\n var queue = '';\n var result = [];\n var entityCharacters;\n var namedEntity;\n var terminated;\n var characters;\n var character;\n var reference;\n var following;\n var warning;\n var reason;\n var output;\n var entity;\n var begin;\n var start;\n var type;\n var test;\n var prev;\n var next;\n var diff;\n var end;\n\n if (typeof additional === 'string') {\n additional = additional.charCodeAt(0);\n } // Cache the current point.\n\n\n prev = now(); // Wrap `handleWarning`.\n\n warning = handleWarning ? parseError : noop; // Ensure the algorithm walks over the first character and the end (inclusive).\n\n index--;\n length++;\n\n while (++index < length) {\n // If the previous character was a newline.\n if (character === lineFeed) {\n column = indent[lines] || 1;\n }\n\n character = value.charCodeAt(index);\n\n if (character === ampersand) {\n following = value.charCodeAt(index + 1); // The behaviour depends on the identity of the next character.\n\n if (following === tab || following === lineFeed || following === formFeed || following === space || following === ampersand || following === lessThan || following !== following || additional && following === additional) {\n // Not a character reference.\n // No characters are consumed, and nothing is returned.\n // This is not an error, either.\n queue += fromCharCode(character);\n column++;\n continue;\n }\n\n start = index + 1;\n begin = start;\n end = start;\n\n if (following === numberSign) {\n // Numerical entity.\n end = ++begin; // The behaviour further depends on the next character.\n\n following = value.charCodeAt(end);\n\n if (following === uppercaseX || following === lowercaseX) {\n // ASCII hex digits.\n type = hexa;\n end = ++begin;\n } else {\n // ASCII digits.\n type = deci;\n }\n } else {\n // Named entity.\n type = name;\n }\n\n entityCharacters = '';\n entity = '';\n characters = '';\n test = tests[type];\n end--;\n\n while (++end < length) {\n following = value.charCodeAt(end);\n\n if (!test(following)) {\n break;\n }\n\n characters += fromCharCode(following); // Check if we can match a legacy named reference.\n // If so, we cache that as the last viable named reference.\n // This ensures we do not need to walk backwards later.\n\n if (type === name && own.call(legacy, characters)) {\n entityCharacters = characters;\n entity = legacy[characters];\n }\n }\n\n terminated = value.charCodeAt(end) === semicolon;\n\n if (terminated) {\n end++;\n namedEntity = type === name ? decodeEntity(characters) : false;\n\n if (namedEntity) {\n entityCharacters = characters;\n entity = namedEntity;\n }\n }\n\n diff = 1 + end - start;\n\n if (!terminated && !nonTerminated) {// Empty.\n } else if (!characters) {\n // An empty (possible) entity is valid, unless it’s numeric (thus an\n // ampersand followed by an octothorp).\n if (type !== name) {\n warning(numericEmpty, diff);\n }\n } else if (type === name) {\n // An ampersand followed by anything unknown, and not terminated, is\n // invalid.\n if (terminated && !entity) {\n warning(namedUnknown, 1);\n } else {\n // If theres something after an entity name which is not known, cap\n // the reference.\n if (entityCharacters !== characters) {\n end = begin + entityCharacters.length;\n diff = 1 + end - begin;\n terminated = false;\n } // If the reference is not terminated, warn.\n\n\n if (!terminated) {\n reason = entityCharacters ? namedNotTerminated : namedEmpty;\n\n if (settings.attribute) {\n following = value.charCodeAt(end);\n\n if (following === equalsTo) {\n warning(reason, diff);\n entity = null;\n } else if (alphanumerical(following)) {\n entity = null;\n } else {\n warning(reason, diff);\n }\n } else {\n warning(reason, diff);\n }\n }\n }\n\n reference = entity;\n } else {\n if (!terminated) {\n // All non-terminated numeric entities are not rendered, and trigger a\n // warning.\n warning(numericNotTerminated, diff);\n } // When terminated and number, parse as either hexadecimal or decimal.\n\n\n reference = parseInt(characters, bases[type]); // Trigger a warning when the parsed number is prohibited, and replace\n // with replacement character.\n\n if (prohibited(reference)) {\n warning(numericProhibited, diff);\n reference = fromCharCode(replacementCharacter);\n } else if (reference in invalid) {\n // Trigger a warning when the parsed number is disallowed, and replace\n // by an alternative.\n warning(numericDisallowed, diff);\n reference = invalid[reference];\n } else {\n // Parse the number.\n output = ''; // Trigger a warning when the parsed number should not be used.\n\n if (disallowed(reference)) {\n warning(numericDisallowed, diff);\n } // Stringify the number.\n\n\n if (reference > 0xffff) {\n reference -= 0x10000;\n output += fromCharCode(reference >>> (10 & 0x3ff) | 0xd800);\n reference = 0xdc00 | reference & 0x3ff;\n }\n\n reference = output + fromCharCode(reference);\n }\n } // Found it!\n // First eat the queued characters as normal text, then eat an entity.\n\n\n if (reference) {\n flush();\n prev = now();\n index = end - 1;\n column += end - start + 1;\n result.push(reference);\n next = now();\n next.offset++;\n\n if (handleReference) {\n handleReference.call(referenceContext, reference, {\n start: prev,\n end: next\n }, value.slice(start - 1, end));\n }\n\n prev = next;\n } else {\n // If we could not find a reference, queue the checked characters (as\n // normal characters), and move the pointer to their end.\n // This is possible because we can be certain neither newlines nor\n // ampersands are included.\n characters = value.slice(start - 1, end);\n queue += characters;\n column += characters.length;\n index = end - 1;\n }\n } else {\n // Handle anything other than an ampersand, including newlines and EOF.\n if (character === 10 // Line feed\n ) {\n line++;\n lines++;\n column = 0;\n }\n\n if (character === character) {\n queue += fromCharCode(character);\n column++;\n } else {\n flush();\n }\n }\n } // Return the reduced nodes, and any possible warnings.\n\n\n return result.join(''); // Get current position.\n\n function now() {\n return {\n line: line,\n column: column,\n offset: index + (pos.offset || 0)\n };\n } // “Throw” a parse-error: a warning.\n\n\n function parseError(code, offset) {\n var position = now();\n position.column += offset;\n position.offset += offset;\n handleWarning.call(warningContext, messages[code], position, code);\n } // Flush `queue` (normal text).\n // Macro invoked before each entity and at the end of `value`.\n // Does nothing when `queue` is empty.\n\n\n function flush() {\n if (queue) {\n result.push(queue);\n\n if (handleText) {\n handleText.call(textContext, queue, {\n start: prev,\n end: now()\n });\n }\n\n queue = '';\n }\n }\n} // Check if `character` is outside the permissible unicode range.\n\n\nfunction prohibited(code) {\n return code >= 0xd800 && code <= 0xdfff || code > 0x10ffff;\n} // Check if `character` is disallowed.\n\n\nfunction disallowed(code) {\n return code >= 0x0001 && code <= 0x0008 || code === 0x000b || code >= 0x000d && code <= 0x001f || code >= 0x007f && code <= 0x009f || code >= 0xfdd0 && code <= 0xfdef || (code & 0xffff) === 0xffff || (code & 0xffff) === 0xfffe;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWVudGl0aWVzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wYXJzZS1lbnRpdGllcy9pbmRleC5qcz82ZGJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeScpXG52YXIgaW52YWxpZCA9IHJlcXVpcmUoJ2NoYXJhY3Rlci1yZWZlcmVuY2UtaW52YWxpZCcpXG52YXIgZGVjaW1hbCA9IHJlcXVpcmUoJ2lzLWRlY2ltYWwnKVxudmFyIGhleGFkZWNpbWFsID0gcmVxdWlyZSgnaXMtaGV4YWRlY2ltYWwnKVxudmFyIGFscGhhbnVtZXJpY2FsID0gcmVxdWlyZSgnaXMtYWxwaGFudW1lcmljYWwnKVxudmFyIGRlY29kZUVudGl0eSA9IHJlcXVpcmUoJy4vZGVjb2RlLWVudGl0eScpXG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VFbnRpdGllc1xuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHlcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG52YXIgbm9vcCA9IEZ1bmN0aW9uLnByb3RvdHlwZVxuXG4vLyBEZWZhdWx0IHNldHRpbmdzLlxudmFyIGRlZmF1bHRzID0ge1xuICB3YXJuaW5nOiBudWxsLFxuICByZWZlcmVuY2U6IG51bGwsXG4gIHRleHQ6IG51bGwsXG4gIHdhcm5pbmdDb250ZXh0OiBudWxsLFxuICByZWZlcmVuY2VDb250ZXh0OiBudWxsLFxuICB0ZXh0Q29udGV4dDogbnVsbCxcbiAgcG9zaXRpb246IHt9LFxuICBhZGRpdGlvbmFsOiBudWxsLFxuICBhdHRyaWJ1dGU6IGZhbHNlLFxuICBub25UZXJtaW5hdGVkOiB0cnVlXG59XG5cbi8vIENoYXJhY3RlcnMuXG52YXIgdGFiID0gOSAvLyAnXFx0J1xudmFyIGxpbmVGZWVkID0gMTAgLy8gJ1xcbidcbnZhciBmb3JtRmVlZCA9IDEyIC8vICAnXFxmJ1xudmFyIHNwYWNlID0gMzIgLy8gJyAnXG52YXIgYW1wZXJzYW5kID0gMzggLy8gICcmJ1xudmFyIHNlbWljb2xvbiA9IDU5IC8vICAnOydcbnZhciBsZXNzVGhhbiA9IDYwIC8vICAnPCdcbnZhciBlcXVhbHNUbyA9IDYxIC8vICAnPSdcbnZhciBudW1iZXJTaWduID0gMzUgLy8gICcjJ1xudmFyIHVwcGVyY2FzZVggPSA4OCAvLyAgJ1gnXG52YXIgbG93ZXJjYXNlWCA9IDEyMCAvLyAgJ3gnXG52YXIgcmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSA2NTUzMyAvLyAn77+9J1xuXG4vLyBSZWZlcmVuY2UgdHlwZXMuXG52YXIgbmFtZSA9ICduYW1lZCdcbnZhciBoZXhhID0gJ2hleGFkZWNpbWFsJ1xudmFyIGRlY2kgPSAnZGVjaW1hbCdcblxuLy8gTWFwIG9mIGJhc2VzLlxudmFyIGJhc2VzID0ge31cblxuYmFzZXNbaGV4YV0gPSAxNlxuYmFzZXNbZGVjaV0gPSAxMFxuXG4vLyBNYXAgb2YgdHlwZXMgdG8gdGVzdHMuXG4vLyBFYWNoIHR5cGUgb2YgY2hhcmFjdGVyIHJlZmVyZW5jZSBhY2NlcHRzIGRpZmZlcmVudCBjaGFyYWN0ZXJzLlxuLy8gVGhpcyB0ZXN0IGlzIHVzZWQgdG8gZGV0ZWN0IHdoZXRoZXIgYSByZWZlcmVuY2UgaGFzIGVuZGVkIChhcyB0aGUgc2VtaWNvbG9uXG4vLyBpcyBub3Qgc3RyaWN0bHkgbmVlZGVkKS5cbnZhciB0ZXN0cyA9IHt9XG5cbnRlc3RzW25hbWVdID0gYWxwaGFudW1lcmljYWxcbnRlc3RzW2RlY2ldID0gZGVjaW1hbFxudGVzdHNbaGV4YV0gPSBoZXhhZGVjaW1hbFxuXG4vLyBXYXJuaW5nIHR5cGVzLlxudmFyIG5hbWVkTm90VGVybWluYXRlZCA9IDFcbnZhciBudW1lcmljTm90VGVybWluYXRlZCA9IDJcbnZhciBuYW1lZEVtcHR5ID0gM1xudmFyIG51bWVyaWNFbXB0eSA9IDRcbnZhciBuYW1lZFVua25vd24gPSA1XG52YXIgbnVtZXJpY0Rpc2FsbG93ZWQgPSA2XG52YXIgbnVtZXJpY1Byb2hpYml0ZWQgPSA3XG5cbi8vIFdhcm5pbmcgbWVzc2FnZXMuXG52YXIgbWVzc2FnZXMgPSB7fVxuXG5tZXNzYWdlc1tuYW1lZE5vdFRlcm1pbmF0ZWRdID1cbiAgJ05hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIG11c3QgYmUgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcbm1lc3NhZ2VzW251bWVyaWNOb3RUZXJtaW5hdGVkXSA9XG4gICdOdW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIG11c3QgYmUgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcbm1lc3NhZ2VzW25hbWVkRW1wdHldID0gJ05hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGNhbm5vdCBiZSBlbXB0eSdcbm1lc3NhZ2VzW251bWVyaWNFbXB0eV0gPSAnTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBjYW5ub3QgYmUgZW1wdHknXG5tZXNzYWdlc1tuYW1lZFVua25vd25dID0gJ05hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIG11c3QgYmUga25vd24nXG5tZXNzYWdlc1tudW1lcmljRGlzYWxsb3dlZF0gPVxuICAnTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBjYW5ub3QgYmUgZGlzYWxsb3dlZCdcbm1lc3NhZ2VzW251bWVyaWNQcm9oaWJpdGVkXSA9XG4gICdOdW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIGNhbm5vdCBiZSBvdXRzaWRlIHRoZSBwZXJtaXNzaWJsZSBVbmljb2RlIHJhbmdlJ1xuXG4vLyBXcmFwIHRvIGVuc3VyZSBjbGVhbiBwYXJhbWV0ZXJzIGFyZSBnaXZlbiB0byBgcGFyc2VgLlxuZnVuY3Rpb24gcGFyc2VFbnRpdGllcyh2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2V0dGluZ3MgPSB7fVxuICB2YXIgb3B0aW9uXG4gIHZhciBrZXlcblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIGZvciAoa2V5IGluIGRlZmF1bHRzKSB7XG4gICAgb3B0aW9uID0gb3B0aW9uc1trZXldXG4gICAgc2V0dGluZ3Nba2V5XSA9XG4gICAgICBvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB1bmRlZmluZWQgPyBkZWZhdWx0c1trZXldIDogb3B0aW9uXG4gIH1cblxuICBpZiAoc2V0dGluZ3MucG9zaXRpb24uaW5kZW50IHx8IHNldHRpbmdzLnBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgc2V0dGluZ3MuaW5kZW50ID0gc2V0dGluZ3MucG9zaXRpb24uaW5kZW50IHx8IFtdXG4gICAgc2V0dGluZ3MucG9zaXRpb24gPSBzZXR0aW5ncy5wb3NpdGlvbi5zdGFydFxuICB9XG5cbiAgcmV0dXJuIHBhcnNlKHZhbHVlLCBzZXR0aW5ncylcbn1cblxuLy8gUGFyc2UgZW50aXRpZXMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcGFyc2UodmFsdWUsIHNldHRpbmdzKSB7XG4gIHZhciBhZGRpdGlvbmFsID0gc2V0dGluZ3MuYWRkaXRpb25hbFxuICB2YXIgbm9uVGVybWluYXRlZCA9IHNldHRpbmdzLm5vblRlcm1pbmF0ZWRcbiAgdmFyIGhhbmRsZVRleHQgPSBzZXR0aW5ncy50ZXh0XG4gIHZhciBoYW5kbGVSZWZlcmVuY2UgPSBzZXR0aW5ncy5yZWZlcmVuY2VcbiAgdmFyIGhhbmRsZVdhcm5pbmcgPSBzZXR0aW5ncy53YXJuaW5nXG4gIHZhciB0ZXh0Q29udGV4dCA9IHNldHRpbmdzLnRleHRDb250ZXh0XG4gIHZhciByZWZlcmVuY2VDb250ZXh0ID0gc2V0dGluZ3MucmVmZXJlbmNlQ29udGV4dFxuICB2YXIgd2FybmluZ0NvbnRleHQgPSBzZXR0aW5ncy53YXJuaW5nQ29udGV4dFxuICB2YXIgcG9zID0gc2V0dGluZ3MucG9zaXRpb25cbiAgdmFyIGluZGVudCA9IHNldHRpbmdzLmluZGVudCB8fCBbXVxuICB2YXIgbGVuZ3RoID0gdmFsdWUubGVuZ3RoXG4gIHZhciBpbmRleCA9IDBcbiAgdmFyIGxpbmVzID0gLTFcbiAgdmFyIGNvbHVtbiA9IHBvcy5jb2x1bW4gfHwgMVxuICB2YXIgbGluZSA9IHBvcy5saW5lIHx8IDFcbiAgdmFyIHF1ZXVlID0gJydcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciBlbnRpdHlDaGFyYWN0ZXJzXG4gIHZhciBuYW1lZEVudGl0eVxuICB2YXIgdGVybWluYXRlZFxuICB2YXIgY2hhcmFjdGVyc1xuICB2YXIgY2hhcmFjdGVyXG4gIHZhciByZWZlcmVuY2VcbiAgdmFyIGZvbGxvd2luZ1xuICB2YXIgd2FybmluZ1xuICB2YXIgcmVhc29uXG4gIHZhciBvdXRwdXRcbiAgdmFyIGVudGl0eVxuICB2YXIgYmVnaW5cbiAgdmFyIHN0YXJ0XG4gIHZhciB0eXBlXG4gIHZhciB0ZXN0XG4gIHZhciBwcmV2XG4gIHZhciBuZXh0XG4gIHZhciBkaWZmXG4gIHZhciBlbmRcblxuICBpZiAodHlwZW9mIGFkZGl0aW9uYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgYWRkaXRpb25hbCA9IGFkZGl0aW9uYWwuY2hhckNvZGVBdCgwKVxuICB9XG5cbiAgLy8gQ2FjaGUgdGhlIGN1cnJlbnQgcG9pbnQuXG4gIHByZXYgPSBub3coKVxuXG4gIC8vIFdyYXAgYGhhbmRsZVdhcm5pbmdgLlxuICB3YXJuaW5nID0gaGFuZGxlV2FybmluZyA/IHBhcnNlRXJyb3IgOiBub29wXG5cbiAgLy8gRW5zdXJlIHRoZSBhbGdvcml0aG0gd2Fsa3Mgb3ZlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB0aGUgZW5kIChpbmNsdXNpdmUpLlxuICBpbmRleC0tXG4gIGxlbmd0aCsrXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAvLyBJZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyBhIG5ld2xpbmUuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gbGluZUZlZWQpIHtcbiAgICAgIGNvbHVtbiA9IGluZGVudFtsaW5lc10gfHwgMVxuICAgIH1cblxuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpXG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSBhbXBlcnNhbmQpIHtcbiAgICAgIGZvbGxvd2luZyA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXggKyAxKVxuXG4gICAgICAvLyBUaGUgYmVoYXZpb3VyIGRlcGVuZHMgb24gdGhlIGlkZW50aXR5IG9mIHRoZSBuZXh0IGNoYXJhY3Rlci5cbiAgICAgIGlmIChcbiAgICAgICAgZm9sbG93aW5nID09PSB0YWIgfHxcbiAgICAgICAgZm9sbG93aW5nID09PSBsaW5lRmVlZCB8fFxuICAgICAgICBmb2xsb3dpbmcgPT09IGZvcm1GZWVkIHx8XG4gICAgICAgIGZvbGxvd2luZyA9PT0gc3BhY2UgfHxcbiAgICAgICAgZm9sbG93aW5nID09PSBhbXBlcnNhbmQgfHxcbiAgICAgICAgZm9sbG93aW5nID09PSBsZXNzVGhhbiB8fFxuICAgICAgICBmb2xsb3dpbmcgIT09IGZvbGxvd2luZyB8fFxuICAgICAgICAoYWRkaXRpb25hbCAmJiBmb2xsb3dpbmcgPT09IGFkZGl0aW9uYWwpXG4gICAgICApIHtcbiAgICAgICAgLy8gTm90IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS5cbiAgICAgICAgLy8gTm8gY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCBhbiBlcnJvciwgZWl0aGVyLlxuICAgICAgICBxdWV1ZSArPSBmcm9tQ2hhckNvZGUoY2hhcmFjdGVyKVxuICAgICAgICBjb2x1bW4rK1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHN0YXJ0ID0gaW5kZXggKyAxXG4gICAgICBiZWdpbiA9IHN0YXJ0XG4gICAgICBlbmQgPSBzdGFydFxuXG4gICAgICBpZiAoZm9sbG93aW5nID09PSBudW1iZXJTaWduKSB7XG4gICAgICAgIC8vIE51bWVyaWNhbCBlbnRpdHkuXG4gICAgICAgIGVuZCA9ICsrYmVnaW5cblxuICAgICAgICAvLyBUaGUgYmVoYXZpb3VyIGZ1cnRoZXIgZGVwZW5kcyBvbiB0aGUgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGZvbGxvd2luZyA9IHZhbHVlLmNoYXJDb2RlQXQoZW5kKVxuXG4gICAgICAgIGlmIChmb2xsb3dpbmcgPT09IHVwcGVyY2FzZVggfHwgZm9sbG93aW5nID09PSBsb3dlcmNhc2VYKSB7XG4gICAgICAgICAgLy8gQVNDSUkgaGV4IGRpZ2l0cy5cbiAgICAgICAgICB0eXBlID0gaGV4YVxuICAgICAgICAgIGVuZCA9ICsrYmVnaW5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBU0NJSSBkaWdpdHMuXG4gICAgICAgICAgdHlwZSA9IGRlY2lcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTmFtZWQgZW50aXR5LlxuICAgICAgICB0eXBlID0gbmFtZVxuICAgICAgfVxuXG4gICAgICBlbnRpdHlDaGFyYWN0ZXJzID0gJydcbiAgICAgIGVudGl0eSA9ICcnXG4gICAgICBjaGFyYWN0ZXJzID0gJydcbiAgICAgIHRlc3QgPSB0ZXN0c1t0eXBlXVxuICAgICAgZW5kLS1cblxuICAgICAgd2hpbGUgKCsrZW5kIDwgbGVuZ3RoKSB7XG4gICAgICAgIGZvbGxvd2luZyA9IHZhbHVlLmNoYXJDb2RlQXQoZW5kKVxuXG4gICAgICAgIGlmICghdGVzdChmb2xsb3dpbmcpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJhY3RlcnMgKz0gZnJvbUNoYXJDb2RlKGZvbGxvd2luZylcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gbWF0Y2ggYSBsZWdhY3kgbmFtZWQgcmVmZXJlbmNlLlxuICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhhdCBhcyB0aGUgbGFzdCB2aWFibGUgbmFtZWQgcmVmZXJlbmNlLlxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZG8gbm90IG5lZWQgdG8gd2FsayBiYWNrd2FyZHMgbGF0ZXIuXG4gICAgICAgIGlmICh0eXBlID09PSBuYW1lICYmIG93bi5jYWxsKGxlZ2FjeSwgY2hhcmFjdGVycykpIHtcbiAgICAgICAgICBlbnRpdHlDaGFyYWN0ZXJzID0gY2hhcmFjdGVyc1xuICAgICAgICAgIGVudGl0eSA9IGxlZ2FjeVtjaGFyYWN0ZXJzXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRlcm1pbmF0ZWQgPSB2YWx1ZS5jaGFyQ29kZUF0KGVuZCkgPT09IHNlbWljb2xvblxuXG4gICAgICBpZiAodGVybWluYXRlZCkge1xuICAgICAgICBlbmQrK1xuXG4gICAgICAgIG5hbWVkRW50aXR5ID0gdHlwZSA9PT0gbmFtZSA/IGRlY29kZUVudGl0eShjaGFyYWN0ZXJzKSA6IGZhbHNlXG5cbiAgICAgICAgaWYgKG5hbWVkRW50aXR5KSB7XG4gICAgICAgICAgZW50aXR5Q2hhcmFjdGVycyA9IGNoYXJhY3RlcnNcbiAgICAgICAgICBlbnRpdHkgPSBuYW1lZEVudGl0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRpZmYgPSAxICsgZW5kIC0gc3RhcnRcblxuICAgICAgaWYgKCF0ZXJtaW5hdGVkICYmICFub25UZXJtaW5hdGVkKSB7XG4gICAgICAgIC8vIEVtcHR5LlxuICAgICAgfSBlbHNlIGlmICghY2hhcmFjdGVycykge1xuICAgICAgICAvLyBBbiBlbXB0eSAocG9zc2libGUpIGVudGl0eSBpcyB2YWxpZCwgdW5sZXNzIGl04oCZcyBudW1lcmljICh0aHVzIGFuXG4gICAgICAgIC8vIGFtcGVyc2FuZCBmb2xsb3dlZCBieSBhbiBvY3RvdGhvcnApLlxuICAgICAgICBpZiAodHlwZSAhPT0gbmFtZSkge1xuICAgICAgICAgIHdhcm5pbmcobnVtZXJpY0VtcHR5LCBkaWZmKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IG5hbWUpIHtcbiAgICAgICAgLy8gQW4gYW1wZXJzYW5kIGZvbGxvd2VkIGJ5IGFueXRoaW5nIHVua25vd24sIGFuZCBub3QgdGVybWluYXRlZCwgaXNcbiAgICAgICAgLy8gaW52YWxpZC5cbiAgICAgICAgaWYgKHRlcm1pbmF0ZWQgJiYgIWVudGl0eSkge1xuICAgICAgICAgIHdhcm5pbmcobmFtZWRVbmtub3duLCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlcyBzb21ldGhpbmcgYWZ0ZXIgYW4gZW50aXR5IG5hbWUgd2hpY2ggaXMgbm90IGtub3duLCBjYXBcbiAgICAgICAgICAvLyB0aGUgcmVmZXJlbmNlLlxuICAgICAgICAgIGlmIChlbnRpdHlDaGFyYWN0ZXJzICE9PSBjaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICBlbmQgPSBiZWdpbiArIGVudGl0eUNoYXJhY3RlcnMubGVuZ3RoXG4gICAgICAgICAgICBkaWZmID0gMSArIGVuZCAtIGJlZ2luXG4gICAgICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIG5vdCB0ZXJtaW5hdGVkLCB3YXJuLlxuICAgICAgICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICAgICAgcmVhc29uID0gZW50aXR5Q2hhcmFjdGVycyA/IG5hbWVkTm90VGVybWluYXRlZCA6IG5hbWVkRW1wdHlcblxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBmb2xsb3dpbmcgPSB2YWx1ZS5jaGFyQ29kZUF0KGVuZClcblxuICAgICAgICAgICAgICBpZiAoZm9sbG93aW5nID09PSBlcXVhbHNUbykge1xuICAgICAgICAgICAgICAgIHdhcm5pbmcocmVhc29uLCBkaWZmKVxuICAgICAgICAgICAgICAgIGVudGl0eSA9IG51bGxcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYW51bWVyaWNhbChmb2xsb3dpbmcpKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5ID0gbnVsbFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5pbmcocmVhc29uLCBkaWZmKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3YXJuaW5nKHJlYXNvbiwgZGlmZilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZWZlcmVuY2UgPSBlbnRpdHlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICAgIC8vIEFsbCBub24tdGVybWluYXRlZCBudW1lcmljIGVudGl0aWVzIGFyZSBub3QgcmVuZGVyZWQsIGFuZCB0cmlnZ2VyIGFcbiAgICAgICAgICAvLyB3YXJuaW5nLlxuICAgICAgICAgIHdhcm5pbmcobnVtZXJpY05vdFRlcm1pbmF0ZWQsIGRpZmYpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuIHRlcm1pbmF0ZWQgYW5kIG51bWJlciwgcGFyc2UgYXMgZWl0aGVyIGhleGFkZWNpbWFsIG9yIGRlY2ltYWwuXG4gICAgICAgIHJlZmVyZW5jZSA9IHBhcnNlSW50KGNoYXJhY3RlcnMsIGJhc2VzW3R5cGVdKVxuXG4gICAgICAgIC8vIFRyaWdnZXIgYSB3YXJuaW5nIHdoZW4gdGhlIHBhcnNlZCBudW1iZXIgaXMgcHJvaGliaXRlZCwgYW5kIHJlcGxhY2VcbiAgICAgICAgLy8gd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChwcm9oaWJpdGVkKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICB3YXJuaW5nKG51bWVyaWNQcm9oaWJpdGVkLCBkaWZmKVxuICAgICAgICAgIHJlZmVyZW5jZSA9IGZyb21DaGFyQ29kZShyZXBsYWNlbWVudENoYXJhY3RlcilcbiAgICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW4gaW52YWxpZCkge1xuICAgICAgICAgIC8vIFRyaWdnZXIgYSB3YXJuaW5nIHdoZW4gdGhlIHBhcnNlZCBudW1iZXIgaXMgZGlzYWxsb3dlZCwgYW5kIHJlcGxhY2VcbiAgICAgICAgICAvLyBieSBhbiBhbHRlcm5hdGl2ZS5cbiAgICAgICAgICB3YXJuaW5nKG51bWVyaWNEaXNhbGxvd2VkLCBkaWZmKVxuICAgICAgICAgIHJlZmVyZW5jZSA9IGludmFsaWRbcmVmZXJlbmNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnNlIHRoZSBudW1iZXIuXG4gICAgICAgICAgb3V0cHV0ID0gJydcblxuICAgICAgICAgIC8vIFRyaWdnZXIgYSB3YXJuaW5nIHdoZW4gdGhlIHBhcnNlZCBudW1iZXIgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICAgICAgICAgIGlmIChkaXNhbGxvd2VkKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIHdhcm5pbmcobnVtZXJpY0Rpc2FsbG93ZWQsIGRpZmYpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RyaW5naWZ5IHRoZSBudW1iZXIuXG4gICAgICAgICAgaWYgKHJlZmVyZW5jZSA+IDB4ZmZmZikge1xuICAgICAgICAgICAgcmVmZXJlbmNlIC09IDB4MTAwMDBcbiAgICAgICAgICAgIG91dHB1dCArPSBmcm9tQ2hhckNvZGUoKHJlZmVyZW5jZSA+Pj4gKDEwICYgMHgzZmYpKSB8IDB4ZDgwMClcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IDB4ZGMwMCB8IChyZWZlcmVuY2UgJiAweDNmZilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWZlcmVuY2UgPSBvdXRwdXQgKyBmcm9tQ2hhckNvZGUocmVmZXJlbmNlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgLy8gRmlyc3QgZWF0IHRoZSBxdWV1ZWQgY2hhcmFjdGVycyBhcyBub3JtYWwgdGV4dCwgdGhlbiBlYXQgYW4gZW50aXR5LlxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICBmbHVzaCgpXG5cbiAgICAgICAgcHJldiA9IG5vdygpXG4gICAgICAgIGluZGV4ID0gZW5kIC0gMVxuICAgICAgICBjb2x1bW4gKz0gZW5kIC0gc3RhcnQgKyAxXG4gICAgICAgIHJlc3VsdC5wdXNoKHJlZmVyZW5jZSlcbiAgICAgICAgbmV4dCA9IG5vdygpXG4gICAgICAgIG5leHQub2Zmc2V0KytcblxuICAgICAgICBpZiAoaGFuZGxlUmVmZXJlbmNlKSB7XG4gICAgICAgICAgaGFuZGxlUmVmZXJlbmNlLmNhbGwoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0LFxuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAge3N0YXJ0OiBwcmV2LCBlbmQ6IG5leHR9LFxuICAgICAgICAgICAgdmFsdWUuc2xpY2Uoc3RhcnQgLSAxLCBlbmQpXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldiA9IG5leHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBmaW5kIGEgcmVmZXJlbmNlLCBxdWV1ZSB0aGUgY2hlY2tlZCBjaGFyYWN0ZXJzIChhc1xuICAgICAgICAvLyBub3JtYWwgY2hhcmFjdGVycyksIGFuZCBtb3ZlIHRoZSBwb2ludGVyIHRvIHRoZWlyIGVuZC5cbiAgICAgICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHdlIGNhbiBiZSBjZXJ0YWluIG5laXRoZXIgbmV3bGluZXMgbm9yXG4gICAgICAgIC8vIGFtcGVyc2FuZHMgYXJlIGluY2x1ZGVkLlxuICAgICAgICBjaGFyYWN0ZXJzID0gdmFsdWUuc2xpY2Uoc3RhcnQgLSAxLCBlbmQpXG4gICAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcnNcbiAgICAgICAgY29sdW1uICs9IGNoYXJhY3RlcnMubGVuZ3RoXG4gICAgICAgIGluZGV4ID0gZW5kIC0gMVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiBhbXBlcnNhbmQsIGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgRU9GLlxuICAgICAgaWYgKFxuICAgICAgICBjaGFyYWN0ZXIgPT09IDEwIC8vIExpbmUgZmVlZFxuICAgICAgKSB7XG4gICAgICAgIGxpbmUrK1xuICAgICAgICBsaW5lcysrXG4gICAgICAgIGNvbHVtbiA9IDBcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gY2hhcmFjdGVyKSB7XG4gICAgICAgIHF1ZXVlICs9IGZyb21DaGFyQ29kZShjaGFyYWN0ZXIpXG4gICAgICAgIGNvbHVtbisrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbHVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSByZWR1Y2VkIG5vZGVzLCBhbmQgYW55IHBvc3NpYmxlIHdhcm5pbmdzLlxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpXG5cbiAgLy8gR2V0IGN1cnJlbnQgcG9zaXRpb24uXG4gIGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbGluZSxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgb2Zmc2V0OiBpbmRleCArIChwb3Mub2Zmc2V0IHx8IDApXG4gICAgfVxuICB9XG5cbiAgLy8g4oCcVGhyb3figJ0gYSBwYXJzZS1lcnJvcjogYSB3YXJuaW5nLlxuICBmdW5jdGlvbiBwYXJzZUVycm9yKGNvZGUsIG9mZnNldCkge1xuICAgIHZhciBwb3NpdGlvbiA9IG5vdygpXG5cbiAgICBwb3NpdGlvbi5jb2x1bW4gKz0gb2Zmc2V0XG4gICAgcG9zaXRpb24ub2Zmc2V0ICs9IG9mZnNldFxuXG4gICAgaGFuZGxlV2FybmluZy5jYWxsKHdhcm5pbmdDb250ZXh0LCBtZXNzYWdlc1tjb2RlXSwgcG9zaXRpb24sIGNvZGUpXG4gIH1cblxuICAvLyBGbHVzaCBgcXVldWVgIChub3JtYWwgdGV4dCkuXG4gIC8vIE1hY3JvIGludm9rZWQgYmVmb3JlIGVhY2ggZW50aXR5IGFuZCBhdCB0aGUgZW5kIG9mIGB2YWx1ZWAuXG4gIC8vIERvZXMgbm90aGluZyB3aGVuIGBxdWV1ZWAgaXMgZW1wdHkuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmIChxdWV1ZSkge1xuICAgICAgcmVzdWx0LnB1c2gocXVldWUpXG5cbiAgICAgIGlmIChoYW5kbGVUZXh0KSB7XG4gICAgICAgIGhhbmRsZVRleHQuY2FsbCh0ZXh0Q29udGV4dCwgcXVldWUsIHtzdGFydDogcHJldiwgZW5kOiBub3coKX0pXG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0gJydcbiAgICB9XG4gIH1cbn1cblxuLy8gQ2hlY2sgaWYgYGNoYXJhY3RlcmAgaXMgb3V0c2lkZSB0aGUgcGVybWlzc2libGUgdW5pY29kZSByYW5nZS5cbmZ1bmN0aW9uIHByb2hpYml0ZWQoY29kZSkge1xuICByZXR1cm4gKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkZmZmKSB8fCBjb2RlID4gMHgxMGZmZmZcbn1cblxuLy8gQ2hlY2sgaWYgYGNoYXJhY3RlcmAgaXMgZGlzYWxsb3dlZC5cbmZ1bmN0aW9uIGRpc2FsbG93ZWQoY29kZSkge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IDB4MDAwMSAmJiBjb2RlIDw9IDB4MDAwOCkgfHxcbiAgICBjb2RlID09PSAweDAwMGIgfHxcbiAgICAoY29kZSA+PSAweDAwMGQgJiYgY29kZSA8PSAweDAwMWYpIHx8XG4gICAgKGNvZGUgPj0gMHgwMDdmICYmIGNvZGUgPD0gMHgwMDlmKSB8fFxuICAgIChjb2RlID49IDB4ZmRkMCAmJiBjb2RlIDw9IDB4ZmRlZikgfHxcbiAgICAoY29kZSAmIDB4ZmZmZikgPT09IDB4ZmZmZiB8fFxuICAgIChjb2RlICYgMHhmZmZmKSA9PT0gMHhmZmZlXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQWFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2Q0E7QUFDQTtBQUNBO0FBeUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5DQTtBQXFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdktBO0FBMktBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBek1BO0FBMk1BO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQXRSQTtBQUNBO0FBQ0E7QUF3UkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQTlSQTtBQUNBO0FBQ0E7QUFvU0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQTVTQTtBQWdUQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/parse-entities/index.js\n"); - -/***/ }), - -/***/ "../node_modules/parse-headers/parse-headers.js": -/*!******************************************************!*\ - !*** ../node_modules/parse-headers/parse-headers.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var trim = function trim(string) {\n return string.replace(/^\\s+|\\s+$/g, '');\n},\n isArray = function isArray(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\nmodule.exports = function (headers) {\n if (!headers) return {};\n var result = {};\n var headersArr = trim(headers).split('\\n');\n\n for (var i = 0; i < headersArr.length; i++) {\n var row = headersArr[i];\n var index = row.indexOf(':'),\n key = trim(row.slice(0, index)).toLowerCase(),\n value = trim(row.slice(index + 1));\n\n if (typeof result[key] === 'undefined') {\n result[key] = value;\n } else if (isArray(result[key])) {\n result[key].push(value);\n } else {\n result[key] = [result[key], value];\n }\n }\n\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWhlYWRlcnMvcGFyc2UtaGVhZGVycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzPzEzNjgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRyaW0gPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgdmFyIGhlYWRlcnNBcnIgPSB0cmltKGhlYWRlcnMpLnNwbGl0KCdcXG4nKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVyc0Fyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciByb3cgPSBoZWFkZXJzQXJyW2ldXG4gICAgdmFyIGluZGV4ID0gcm93LmluZGV4T2YoJzonKVxuICAgICwga2V5ID0gdHJpbShyb3cuc2xpY2UoMCwgaW5kZXgpKS50b0xvd2VyQ2FzZSgpXG4gICAgLCB2YWx1ZSA9IHRyaW0ocm93LnNsaWNlKGluZGV4ICsgMSkpXG5cbiAgICBpZiAodHlwZW9mKHJlc3VsdFtrZXldKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkocmVzdWx0W2tleV0pKSB7XG4gICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IFsgcmVzdWx0W2tleV0sIHZhbHVlIF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBSUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/parse-headers/parse-headers.js\n"); - -/***/ }), - -/***/ "../node_modules/path-browserify/index.js": -/*!************************************************!*\ - !*** ../node_modules/path-browserify/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzPzQ3YzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLmRpcm5hbWUsIC5iYXNlbmFtZSwgYW5kIC5leHRuYW1lIG1ldGhvZHMgYXJlIGV4dHJhY3RlZCBmcm9tIE5vZGUuanMgdjguMTEuMSxcbi8vIGJhY2twb3J0ZWQgYW5kIHRyYW5zcGxpdGVkIHdpdGggQmFiZWwsIHdpdGggYmFja3dhcmRzLWNvbXBhdCBmaXhlc1xuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gcmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIGFycmF5IHdpdGggZGlyZWN0b3J5IG5hbWVzIHRoZXJlXG4vLyBtdXN0IGJlIG5vIHNsYXNoZXMsIGVtcHR5IGVsZW1lbnRzLCBvciBkZXZpY2UgbmFtZXMgKGM6XFwpIGluIHRoZSBhcnJheVxuLy8gKHNvIGFsc28gbm8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyAtIGl0IGRvZXMgbm90IGRpc3Rpbmd1aXNoXG4vLyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMpXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheShwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHtcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbiAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aCArICcnO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG4gIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yXG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIGhhc1Jvb3QgPyAnLycgOiAnLic7XG4gIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkge1xuICAgIC8vIHJldHVybiAnLy8nO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXQgZml4OlxuICAgIHJldHVybiAnLyc7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbn07XG5cbmZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGggKyAnJztcblxuICB2YXIgc3RhcnQgPSAwO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICB2YXIgaTtcblxuICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kID09PSAtMSkgcmV0dXJuICcnO1xuICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbn1cblxuLy8gVXNlcyBhIG1peGVkIGFwcHJvYWNoIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgYXMgZXh0IGJlaGF2aW9yIGNoYW5nZWRcbi8vIGluIG5ldyBOb2RlLmpzIHZlcnNpb25zLCBzbyBvbmx5IGJhc2VuYW1lKCkgYWJvdmUgaXMgYmFja3BvcnRlZCBoZXJlXG5leHBvcnRzLmJhc2VuYW1lID0gZnVuY3Rpb24gKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IGJhc2VuYW1lKHBhdGgpO1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGggKyAnJztcbiAgdmFyIHN0YXJ0RG90ID0gLTE7XG4gIHZhciBzdGFydFBhcnQgPSAwO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA0NiAvKi4qLykge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSlcbiAgICAgICAgICBzdGFydERvdCA9IGk7XG4gICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKVxuICAgICAgICAgIHByZURvdFN0YXRlID0gMTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fFxuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbn07XG5cbmZ1bmN0aW9uIGZpbHRlciAoeHMsIGYpIHtcbiAgICBpZiAoeHMuZmlsdGVyKSByZXR1cm4geHMuZmlsdGVyKGYpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmKHhzW2ldLCBpLCB4cykpIHJlcy5wdXNoKHhzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgLSBuZWdhdGl2ZSBpbmRleCBkb24ndCB3b3JrIGluIElFOFxudmFyIHN1YnN0ciA9ICdhYicuc3Vic3RyKC0xKSA9PT0gJ2InXG4gICAgPyBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7IHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pIH1cbiAgICA6IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSBzdHIubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pO1xuICAgIH1cbjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBbUJBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBSUE7QUExQkE7QUE4QkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQUNBO0FBQ0E7QUFrQkE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQUZBO0FBWUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQXRDQTtBQUNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUExQkE7QUFDQTtBQTRCQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE5Q0E7QUFDQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBSkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/path-browserify/index.js\n"); - -/***/ }), - -/***/ "../node_modules/pkcs7/dist/pkcs7.es.js": -/*!**********************************************!*\ - !*** ../node_modules/pkcs7/dist/pkcs7.es.js ***! - \**********************************************/ -/*! exports provided: pad, unpad, VERSION */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pad\", function() { return pad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unpad\", function() { return unpad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VERSION\", function() { return version; });\n/*\n * pkcs7.pad\n * https://github.com/brightcove/pkcs7\n *\n * Copyright (c) 2014 Brightcove\n * Licensed under the apache2 license.\n */\nvar PADDING = void 0;\n/**\n * Returns a new Uint8Array that is padded with PKCS#7 padding.\n * @param plaintext {Uint8Array} the input bytes before encryption\n * @return {Uint8Array} the padded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\n\nfunction pad(plaintext) {\n var padding = PADDING[plaintext.byteLength % 16 || 0];\n var result = new Uint8Array(plaintext.byteLength + padding.length);\n result.set(plaintext);\n result.set(padding, plaintext.byteLength);\n return result;\n} // pre-define the padding values\n\n\nPADDING = [[16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16], [15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15], [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14], [13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13], [12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], [11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11], [10, 10, 10, 10, 10, 10, 10, 10, 10, 10], [9, 9, 9, 9, 9, 9, 9, 9, 9], [8, 8, 8, 8, 8, 8, 8, 8], [7, 7, 7, 7, 7, 7, 7], [6, 6, 6, 6, 6, 6], [5, 5, 5, 5, 5], [4, 4, 4, 4], [3, 3, 3], [2, 2], [1]];\n/**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\n\nfunction unpad(padded) {\n return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);\n}\n\nvar version = \"1.0.2\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3BrY3M3L2Rpc3QvcGtjczcuZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3BrY3M3L2Rpc3QvcGtjczcuZXMuanM/Y2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogcGtjczcucGFkXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYnJpZ2h0Y292ZS9wa2NzN1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBCcmlnaHRjb3ZlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgYXBhY2hlMiBsaWNlbnNlLlxuICovXG5cbnZhciBQQURESU5HID0gdm9pZCAwO1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgVWludDhBcnJheSB0aGF0IGlzIHBhZGRlZCB3aXRoIFBLQ1MjNyBwYWRkaW5nLlxuICogQHBhcmFtIHBsYWludGV4dCB7VWludDhBcnJheX0gdGhlIGlucHV0IGJ5dGVzIGJlZm9yZSBlbmNyeXB0aW9uXG4gKiBAcmV0dXJuIHtVaW50OEFycmF5fSB0aGUgcGFkZGVkIGJ5dGVzXG4gKiBAc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NTJcbiAqL1xuZnVuY3Rpb24gcGFkKHBsYWludGV4dCkge1xuICB2YXIgcGFkZGluZyA9IFBBRERJTkdbcGxhaW50ZXh0LmJ5dGVMZW5ndGggJSAxNiB8fCAwXTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHBsYWludGV4dC5ieXRlTGVuZ3RoICsgcGFkZGluZy5sZW5ndGgpO1xuXG4gIHJlc3VsdC5zZXQocGxhaW50ZXh0KTtcbiAgcmVzdWx0LnNldChwYWRkaW5nLCBwbGFpbnRleHQuYnl0ZUxlbmd0aCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcHJlLWRlZmluZSB0aGUgcGFkZGluZyB2YWx1ZXNcblBBRERJTkcgPSBbWzE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2XSwgWzE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTVdLCBbMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0XSwgWzEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzXSwgWzEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTJdLCBbMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExXSwgWzEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwXSwgWzksIDksIDksIDksIDksIDksIDksIDksIDldLCBbOCwgOCwgOCwgOCwgOCwgOCwgOCwgOF0sIFs3LCA3LCA3LCA3LCA3LCA3LCA3XSwgWzYsIDYsIDYsIDYsIDYsIDZdLCBbNSwgNSwgNSwgNSwgNV0sIFs0LCA0LCA0LCA0XSwgWzMsIDMsIDNdLCBbMiwgMl0sIFsxXV07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3ViYXJyYXkgb2YgYSBVaW50OEFycmF5IHdpdGhvdXQgUEtDUyM3IHBhZGRpbmcuXG4gKiBAcGFyYW0gcGFkZGVkIHtVaW50OEFycmF5fSB1bmVuY3J5cHRlZCBieXRlcyB0aGF0IGhhdmUgYmVlbiBwYWRkZWRcbiAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9IHRoZSB1bnBhZGRlZCBieXRlc1xuICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjUyXG4gKi9cbmZ1bmN0aW9uIHVucGFkKHBhZGRlZCkge1xuICByZXR1cm4gcGFkZGVkLnN1YmFycmF5KDAsIHBhZGRlZC5ieXRlTGVuZ3RoIC0gcGFkZGVkW3BhZGRlZC5ieXRlTGVuZ3RoIC0gMV0pO1xufVxuXG52YXIgdmVyc2lvbiA9IFwiMS4wLjJcIjtcblxuZXhwb3J0IHsgcGFkLCB1bnBhZCwgdmVyc2lvbiBhcyBWRVJTSU9OIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFRQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/pkcs7/dist/pkcs7.es.js\n"); - -/***/ }), - -/***/ "../node_modules/process-nextick-args/index.js": -/*!*****************************************************!*\ - !*** ../node_modules/process-nextick-args/index.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nif (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = {\n nextTick: nextTick\n };\n} else {\n module.exports = process;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n\n var len = arguments.length;\n var args, i;\n\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n\n default:\n args = new Array(len - 1);\n i = 0;\n\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcz9iYTk1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fFxuICAgICFwcm9jZXNzLnZlcnNpb24gfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjAuJykgPT09IDAgfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuJykgPT09IDAgJiYgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLjguJykgIT09IDApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSB7IG5leHRUaWNrOiBuZXh0VGljayB9O1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzXG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrKGZuLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBhcmdzLCBpO1xuICBzd2l0Y2ggKGxlbikge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbik7XG4gIGNhc2UgMjpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tPbmUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEpO1xuICAgIH0pO1xuICBjYXNlIDM6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVHdvKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyKTtcbiAgICB9KTtcbiAgY2FzZSA0OlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1RocmVlKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB9KTtcbiAgZGVmYXVsdDpcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIGFyZ3NbaSsrXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrKCkge1xuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSk7XG4gIH1cbn1cblxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQXRCQTtBQTBCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/process-nextick-args/index.js\n"); - -/***/ }), - -/***/ "../node_modules/process/browser.js": -/*!******************************************!*\ - !*** ../node_modules/process/browser.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2U0OGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFsQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVZBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/process/browser.js\n"); - -/***/ }), - -/***/ "../node_modules/prop-types/checkPropTypes.js": -/*!****************************************************!*\ - !*** ../node_modules/prop-types/checkPropTypes.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar printWarning = function printWarning() {};\n\nif (undefined !== 'production') {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"../node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n\n var loggedTypeFailures = {};\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n printWarning = function printWarning(text) {\n var message = 'Warning: ' + text;\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\n\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (undefined !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + _typeof(typeSpecs[typeSpecName]) + '`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n\n if (error && !(error instanceof Error)) {\n printWarning((componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + _typeof(error) + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).');\n }\n\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n var stack = getStack ? getStack() : '';\n printWarning('Failed ' + location + ' type: ' + error.message + (stack != null ? stack : ''));\n }\n }\n }\n }\n}\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\n\n\ncheckPropTypes.resetWarningCache = function () {\n if (undefined !== 'production') {\n loggedTypeFailures = {};\n }\n};\n\nmodule.exports = checkPropTypes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanM/NmVjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBT0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFMQTtBQVlBO0FBRUE7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/prop-types/checkPropTypes.js\n"); - -/***/ }), - -/***/ "../node_modules/prop-types/factoryWithThrowingShims.js": -/*!**************************************************************!*\ - !*** ../node_modules/prop-types/factoryWithThrowingShims.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"../node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n\nfunction emptyFunction() {}\n\nfunction emptyFunctionWithReset() {}\n\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n ;\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n }\n\n ; // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcz8zNTJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQW1CQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBdEJBO0FBeUJBO0FBRUE7QUEvQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/prop-types/factoryWithThrowingShims.js\n"); - -/***/ }), - -/***/ "../node_modules/prop-types/factoryWithTypeCheckers.js": -/*!*************************************************************!*\ - !*** ../node_modules/prop-types/factoryWithTypeCheckers.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar ReactIs = __webpack_require__(/*! react-is */ \"../node_modules/react-is/index.js\");\n\nvar assign = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"../node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"../node_modules/prop-types/checkPropTypes.js\");\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\n\nvar printWarning = function printWarning() {};\n\nif (undefined !== 'production') {\n printWarning = function printWarning(text) {\n var message = 'Warning: ' + text;\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function (isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n\n var ANONYMOUS = '<<anonymous>>'; // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker\n };\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n\n /*eslint-disable no-self-compare*/\n\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n\n\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n } // Make `instanceof Error` still work for returned errors.\n\n\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (undefined !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n } else if (undefined !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n\n if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3) {\n printWarning('You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.');\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n\n var propValue = props[propName];\n\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n\n if (error instanceof Error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (undefined !== 'production') {\n if (arguments.length > 1) {\n printWarning('Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).');\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n\n if (type === 'symbol') {\n return String(value);\n }\n\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\n if (error instanceof Error) {\n return error;\n }\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n undefined !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (typeof checker !== 'function') {\n printWarning('Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.');\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n continue;\n }\n\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\n if (error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n } // We need to check all keys in case some are required but missing from\n // props.\n\n\n var allKeys = assign({}, props[propName], shapeTypes);\n\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' '));\n }\n\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\n if (error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (_typeof(propValue)) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n\n case 'boolean':\n return !propValue;\n\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n } // falsy value can't be a Symbol\n\n\n if (!propValue) {\n return false;\n } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\n\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n } // Fallback for non-spec compliant Symbols which are polyfilled.\n\n\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n } // Equivalent of `typeof` but with special handling for array and regexp.\n\n\n function getPropType(propValue) {\n var propType = _typeof(propValue);\n\n if (Array.isArray(propValue)) {\n return 'array';\n }\n\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n\n return propType;\n } // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n\n\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n\n var propType = getPropType(propValue);\n\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n\n return propType;\n } // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n\n\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n\n default:\n return type;\n }\n } // Returns class name of the object, if any.\n\n\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanM/YzUyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBT0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQXNCQTs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBOUhBO0FBQ0E7QUFDQTtBQStIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQTFDQTtBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQWJBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyZUE7QUFDQTtBQUNBO0FBdWVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdmZBO0FBMmZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBeGdCQTtBQTRnQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVEE7QUEvZ0JBO0FBQ0E7QUFDQTtBQTJoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBeGlCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/prop-types/factoryWithTypeCheckers.js\n"); - -/***/ }), - -/***/ "../node_modules/prop-types/index.js": -/*!*******************************************!*\ - !*** ../node_modules/prop-types/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nif (undefined !== 'production') {\n var ReactIs = __webpack_require__(/*! react-is */ \"../node_modules/react-is/index.js\"); // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n\n\n var throwOnDirectAccess = true;\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"../node_modules/prop-types/factoryWithTypeCheckers.js\")(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(/*! ./factoryWithThrowingShims */ \"../node_modules/prop-types/factoryWithThrowingShims.js\")();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanM/NWI0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUFPQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/prop-types/index.js\n"); - -/***/ }), - -/***/ "../node_modules/prop-types/lib/ReactPropTypesSecret.js": -/*!**************************************************************!*\ - !*** ../node_modules/prop-types/lib/ReactPropTypesSecret.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\nmodule.exports = ReactPropTypesSecret;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcz8xMzRkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/prop-types/lib/ReactPropTypesSecret.js\n"); - -/***/ }), - -/***/ "../node_modules/property-information/index.js": -/*!*****************************************************!*\ - !*** ../node_modules/property-information/index.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/* Expose. */\n\nmodule.exports = getPropertyInformation;\n/* Constants. */\n\nvar USE_ATTRIBUTE = 0x1;\nvar USE_PROPERTY = 0x2;\nvar BOOLEAN_VALUE = 0x8;\nvar NUMERIC_VALUE = 0x10;\nvar POSITIVE_NUMERIC_VALUE = 0x20 | 0x10;\nvar OVERLOADED_BOOLEAN_VALUE = 0x40;\nvar SPACE_SEPARATED = 0x80;\nvar COMMA_SEPARATED = 0x100;\n/* Map of properties. Names are camel-cased properties. */\n\nvar propertyConfig = {\n /* Standard Properties. */\n abbr: null,\n accept: COMMA_SEPARATED,\n acceptCharset: SPACE_SEPARATED,\n accessKey: SPACE_SEPARATED,\n action: null,\n allowFullScreen: USE_ATTRIBUTE | BOOLEAN_VALUE,\n allowTransparency: USE_ATTRIBUTE,\n alt: null,\n\n /* https://html.spec.whatwg.org/#attr-link-as */\n as: null,\n async: BOOLEAN_VALUE,\n autoComplete: SPACE_SEPARATED,\n autoFocus: BOOLEAN_VALUE,\n autoPlay: BOOLEAN_VALUE,\n capture: USE_ATTRIBUTE | BOOLEAN_VALUE,\n cellPadding: null,\n cellSpacing: null,\n challenge: USE_ATTRIBUTE,\n charSet: USE_ATTRIBUTE,\n checked: USE_PROPERTY | BOOLEAN_VALUE,\n cite: null,\n\n /* To set className on SVG elements, it's necessary to\n * use .setAttribute; this works on HTML elements too\n * in all browsers except IE8. */\n className: USE_ATTRIBUTE | SPACE_SEPARATED,\n cols: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n colSpan: null,\n command: null,\n content: null,\n contentEditable: null,\n contextMenu: USE_ATTRIBUTE,\n controls: USE_PROPERTY | BOOLEAN_VALUE,\n\n /* https://github.com/WICG/controls-list/blob/gh-pages/explainer.md */\n controlsList: SPACE_SEPARATED,\n coords: NUMERIC_VALUE | COMMA_SEPARATED,\n crossOrigin: null,\n\n /* For `<object />` acts as `src`. */\n data: null,\n dateTime: USE_ATTRIBUTE,\n \"default\": BOOLEAN_VALUE,\n defer: BOOLEAN_VALUE,\n dir: null,\n dirName: null,\n disabled: USE_ATTRIBUTE | BOOLEAN_VALUE,\n download: OVERLOADED_BOOLEAN_VALUE,\n draggable: null,\n dropzone: SPACE_SEPARATED,\n encType: null,\n form: USE_ATTRIBUTE,\n formAction: USE_ATTRIBUTE,\n formEncType: USE_ATTRIBUTE,\n formMethod: USE_ATTRIBUTE,\n formNoValidate: BOOLEAN_VALUE,\n formTarget: USE_ATTRIBUTE,\n frameBorder: USE_ATTRIBUTE,\n headers: SPACE_SEPARATED,\n height: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n hidden: USE_ATTRIBUTE | BOOLEAN_VALUE,\n high: NUMERIC_VALUE,\n href: null,\n hrefLang: null,\n htmlFor: SPACE_SEPARATED,\n httpEquiv: SPACE_SEPARATED,\n id: USE_PROPERTY,\n inputMode: USE_ATTRIBUTE,\n\n /* Web Components */\n is: USE_ATTRIBUTE,\n isMap: BOOLEAN_VALUE,\n keyParams: USE_ATTRIBUTE,\n keyType: USE_ATTRIBUTE,\n kind: null,\n label: null,\n lang: null,\n list: USE_ATTRIBUTE,\n loop: USE_PROPERTY | BOOLEAN_VALUE,\n low: NUMERIC_VALUE,\n manifest: USE_ATTRIBUTE,\n marginHeight: NUMERIC_VALUE,\n marginWidth: NUMERIC_VALUE,\n max: null,\n maxLength: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n media: USE_ATTRIBUTE,\n mediaGroup: null,\n menu: null,\n method: null,\n min: null,\n minLength: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n multiple: USE_PROPERTY | BOOLEAN_VALUE,\n muted: USE_PROPERTY | BOOLEAN_VALUE,\n name: null,\n nonce: null,\n noValidate: BOOLEAN_VALUE,\n open: BOOLEAN_VALUE,\n optimum: NUMERIC_VALUE,\n pattern: null,\n ping: SPACE_SEPARATED,\n placeholder: null,\n\n /* https://html.spec.whatwg.org/#attr-video-playsinline */\n playsInline: BOOLEAN_VALUE,\n poster: null,\n preload: null,\n\n /* https://html.spec.whatwg.org/#dom-head-profile */\n profile: null,\n radioGroup: null,\n readOnly: USE_PROPERTY | BOOLEAN_VALUE,\n\n /* https://html.spec.whatwg.org/#attr-link-referrerpolicy */\n referrerPolicy: null,\n\n /* `rel` is `relList` in DOM */\n rel: SPACE_SEPARATED | USE_ATTRIBUTE,\n required: BOOLEAN_VALUE,\n reversed: BOOLEAN_VALUE,\n role: USE_ATTRIBUTE,\n rows: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n rowSpan: POSITIVE_NUMERIC_VALUE,\n sandbox: SPACE_SEPARATED,\n scope: null,\n scoped: BOOLEAN_VALUE,\n scrolling: null,\n seamless: USE_ATTRIBUTE | BOOLEAN_VALUE,\n selected: USE_PROPERTY | BOOLEAN_VALUE,\n shape: null,\n size: USE_ATTRIBUTE | POSITIVE_NUMERIC_VALUE,\n sizes: USE_ATTRIBUTE | SPACE_SEPARATED,\n\n /* https://html.spec.whatwg.org/#attr-slot */\n slot: null,\n sortable: BOOLEAN_VALUE,\n sorted: SPACE_SEPARATED,\n span: POSITIVE_NUMERIC_VALUE,\n spellCheck: null,\n src: null,\n srcDoc: USE_PROPERTY,\n srcLang: null,\n srcSet: USE_ATTRIBUTE | COMMA_SEPARATED,\n start: NUMERIC_VALUE,\n step: null,\n style: null,\n summary: null,\n tabIndex: NUMERIC_VALUE,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: BOOLEAN_VALUE,\n useMap: null,\n value: USE_PROPERTY,\n volume: POSITIVE_NUMERIC_VALUE,\n width: USE_ATTRIBUTE | NUMERIC_VALUE,\n wmode: USE_ATTRIBUTE,\n wrap: null,\n\n /* Non-standard Properties. */\n\n /* `autoCapitalize` and `autoCorrect` are supported in\n * Mobile Safari for keyboard hints. */\n autoCapitalize: null,\n autoCorrect: null,\n\n /* `autoSave` allows WebKit/Blink to persist values of\n * input fields on page reloads */\n autoSave: null,\n\n /* `itemProp`, `itemScope`, `itemType` are for Microdata\n * support. See http://schema.org/docs/gs.html */\n itemProp: USE_ATTRIBUTE | SPACE_SEPARATED,\n itemScope: USE_ATTRIBUTE | BOOLEAN_VALUE,\n itemType: USE_ATTRIBUTE | SPACE_SEPARATED,\n\n /* `itemID` and `itemRef` are for Microdata support as well\n * but only specified in the the WHATWG spec document.\n * See https://html.spec.whatwg.org/multipage/\n * microdata.html#microdata-dom-api */\n itemID: USE_ATTRIBUTE,\n itemRef: USE_ATTRIBUTE | SPACE_SEPARATED,\n\n /* `property` is supported for OpenGraph in meta tags. */\n property: null,\n\n /* `results` show looking glass icon and recent searches\n * on input search fields in WebKit/Blink */\n results: null,\n\n /* IE-only attribute that specifies security\n * restrictions on an iframe as an alternative to the\n * sandbox attribute on IE < 10 */\n security: USE_ATTRIBUTE,\n\n /* IE-only attribute that controls focus behavior */\n unselectable: USE_ATTRIBUTE,\n\n /* Ancient. */\n xmlLang: USE_ATTRIBUTE,\n xmlBase: USE_ATTRIBUTE\n};\n/* Map of properties to attributes.\n * Names are lower-case properties.\n * Values are HTML attributes. */\n\nvar propertyToAttributeMapping = {\n xmlbase: 'xml:base',\n xmllang: 'xml:lang',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv',\n acceptcharset: 'accept-charset'\n};\n/* Expand config. */\n\nvar information = {};\nvar property;\nvar name;\nvar config;\ngetPropertyInformation.all = information;\n\nfor (property in propertyConfig) {\n name = lower(property);\n name = propertyToAttributeMapping[name] || name;\n config = propertyConfig[property];\n information[name] = {\n name: name,\n propertyName: property,\n mustUseAttribute: check(config, USE_ATTRIBUTE),\n mustUseProperty: check(config, USE_PROPERTY),\n \"boolean\": check(config, BOOLEAN_VALUE),\n overloadedBoolean: check(config, OVERLOADED_BOOLEAN_VALUE),\n numeric: check(config, NUMERIC_VALUE),\n positiveNumeric: check(config, POSITIVE_NUMERIC_VALUE),\n commaSeparated: check(config, COMMA_SEPARATED),\n spaceSeparated: check(config, SPACE_SEPARATED)\n };\n}\n/* Get a config for a property. */\n\n\nfunction getPropertyInformation(propertyName) {\n var insensitive = lower(propertyName);\n return information[propertyToAttributeMapping[insensitive] || insensitive];\n}\n/* Check a mask. */\n\n\nfunction check(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n/* Lower-case a string. */\n\n\nfunction lower(value) {\n return value.toLowerCase();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9pbmRleC5qcz9mYzljIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogRXhwb3NlLiAqL1xubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm9wZXJ0eUluZm9ybWF0aW9uO1xuXG4vKiBDb25zdGFudHMuICovXG52YXIgVVNFX0FUVFJJQlVURSA9IDB4MTtcbnZhciBVU0VfUFJPUEVSVFkgPSAweDI7XG52YXIgQk9PTEVBTl9WQUxVRSA9IDB4ODtcbnZhciBOVU1FUklDX1ZBTFVFID0gMHgxMDtcbnZhciBQT1NJVElWRV9OVU1FUklDX1ZBTFVFID0gMHgyMCB8IDB4MTA7XG52YXIgT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFID0gMHg0MDtcbnZhciBTUEFDRV9TRVBBUkFURUQgPSAweDgwO1xudmFyIENPTU1BX1NFUEFSQVRFRCA9IDB4MTAwO1xuXG4vKiBNYXAgb2YgcHJvcGVydGllcy4gTmFtZXMgYXJlIGNhbWVsLWNhc2VkIHByb3BlcnRpZXMuICovXG52YXIgcHJvcGVydHlDb25maWcgPSB7XG4gIC8qIFN0YW5kYXJkIFByb3BlcnRpZXMuICovXG4gIGFiYnI6IG51bGwsXG4gIGFjY2VwdDogQ09NTUFfU0VQQVJBVEVELFxuICBhY2NlcHRDaGFyc2V0OiBTUEFDRV9TRVBBUkFURUQsXG4gIGFjY2Vzc0tleTogU1BBQ0VfU0VQQVJBVEVELFxuICBhY3Rpb246IG51bGwsXG4gIGFsbG93RnVsbFNjcmVlbjogVVNFX0FUVFJJQlVURSB8IEJPT0xFQU5fVkFMVUUsXG4gIGFsbG93VHJhbnNwYXJlbmN5OiBVU0VfQVRUUklCVVRFLFxuICBhbHQ6IG51bGwsXG4gIC8qIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHItbGluay1hcyAqL1xuICBhczogbnVsbCxcbiAgYXN5bmM6IEJPT0xFQU5fVkFMVUUsXG4gIGF1dG9Db21wbGV0ZTogU1BBQ0VfU0VQQVJBVEVELFxuICBhdXRvRm9jdXM6IEJPT0xFQU5fVkFMVUUsXG4gIGF1dG9QbGF5OiBCT09MRUFOX1ZBTFVFLFxuICBjYXB0dXJlOiBVU0VfQVRUUklCVVRFIHwgQk9PTEVBTl9WQUxVRSxcbiAgY2VsbFBhZGRpbmc6IG51bGwsXG4gIGNlbGxTcGFjaW5nOiBudWxsLFxuICBjaGFsbGVuZ2U6IFVTRV9BVFRSSUJVVEUsXG4gIGNoYXJTZXQ6IFVTRV9BVFRSSUJVVEUsXG4gIGNoZWNrZWQ6IFVTRV9QUk9QRVJUWSB8IEJPT0xFQU5fVkFMVUUsXG4gIGNpdGU6IG51bGwsXG4gIC8qIFRvIHNldCBjbGFzc05hbWUgb24gU1ZHIGVsZW1lbnRzLCBpdCdzIG5lY2Vzc2FyeSB0b1xuICAgKiB1c2UgLnNldEF0dHJpYnV0ZTsgdGhpcyB3b3JrcyBvbiBIVE1MIGVsZW1lbnRzIHRvb1xuICAgKiBpbiBhbGwgYnJvd3NlcnMgZXhjZXB0IElFOC4gKi9cbiAgY2xhc3NOYW1lOiBVU0VfQVRUUklCVVRFIHwgU1BBQ0VfU0VQQVJBVEVELFxuICBjb2xzOiBVU0VfQVRUUklCVVRFIHwgUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgY29sU3BhbjogbnVsbCxcbiAgY29tbWFuZDogbnVsbCxcbiAgY29udGVudDogbnVsbCxcbiAgY29udGVudEVkaXRhYmxlOiBudWxsLFxuICBjb250ZXh0TWVudTogVVNFX0FUVFJJQlVURSxcbiAgY29udHJvbHM6IFVTRV9QUk9QRVJUWSB8IEJPT0xFQU5fVkFMVUUsXG4gIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2NvbnRyb2xzLWxpc3QvYmxvYi9naC1wYWdlcy9leHBsYWluZXIubWQgKi9cbiAgY29udHJvbHNMaXN0OiBTUEFDRV9TRVBBUkFURUQsXG4gIGNvb3JkczogTlVNRVJJQ19WQUxVRSB8IENPTU1BX1NFUEFSQVRFRCxcbiAgY3Jvc3NPcmlnaW46IG51bGwsXG4gIC8qIEZvciBgPG9iamVjdCAvPmAgYWN0cyBhcyBgc3JjYC4gKi9cbiAgZGF0YTogbnVsbCxcbiAgZGF0ZVRpbWU6IFVTRV9BVFRSSUJVVEUsXG4gIGRlZmF1bHQ6IEJPT0xFQU5fVkFMVUUsXG4gIGRlZmVyOiBCT09MRUFOX1ZBTFVFLFxuICBkaXI6IG51bGwsXG4gIGRpck5hbWU6IG51bGwsXG4gIGRpc2FibGVkOiBVU0VfQVRUUklCVVRFIHwgQk9PTEVBTl9WQUxVRSxcbiAgZG93bmxvYWQ6IE9WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxcbiAgZHJhZ2dhYmxlOiBudWxsLFxuICBkcm9wem9uZTogU1BBQ0VfU0VQQVJBVEVELFxuICBlbmNUeXBlOiBudWxsLFxuICBmb3JtOiBVU0VfQVRUUklCVVRFLFxuICBmb3JtQWN0aW9uOiBVU0VfQVRUUklCVVRFLFxuICBmb3JtRW5jVHlwZTogVVNFX0FUVFJJQlVURSxcbiAgZm9ybU1ldGhvZDogVVNFX0FUVFJJQlVURSxcbiAgZm9ybU5vVmFsaWRhdGU6IEJPT0xFQU5fVkFMVUUsXG4gIGZvcm1UYXJnZXQ6IFVTRV9BVFRSSUJVVEUsXG4gIGZyYW1lQm9yZGVyOiBVU0VfQVRUUklCVVRFLFxuICBoZWFkZXJzOiBTUEFDRV9TRVBBUkFURUQsXG4gIGhlaWdodDogVVNFX0FUVFJJQlVURSB8IFBPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gIGhpZGRlbjogVVNFX0FUVFJJQlVURSB8IEJPT0xFQU5fVkFMVUUsXG4gIGhpZ2g6IE5VTUVSSUNfVkFMVUUsXG4gIGhyZWY6IG51bGwsXG4gIGhyZWZMYW5nOiBudWxsLFxuICBodG1sRm9yOiBTUEFDRV9TRVBBUkFURUQsXG4gIGh0dHBFcXVpdjogU1BBQ0VfU0VQQVJBVEVELFxuICBpZDogVVNFX1BST1BFUlRZLFxuICBpbnB1dE1vZGU6IFVTRV9BVFRSSUJVVEUsXG4gIC8qIFdlYiBDb21wb25lbnRzICovXG4gIGlzOiBVU0VfQVRUUklCVVRFLFxuICBpc01hcDogQk9PTEVBTl9WQUxVRSxcbiAga2V5UGFyYW1zOiBVU0VfQVRUUklCVVRFLFxuICBrZXlUeXBlOiBVU0VfQVRUUklCVVRFLFxuICBraW5kOiBudWxsLFxuICBsYWJlbDogbnVsbCxcbiAgbGFuZzogbnVsbCxcbiAgbGlzdDogVVNFX0FUVFJJQlVURSxcbiAgbG9vcDogVVNFX1BST1BFUlRZIHwgQk9PTEVBTl9WQUxVRSxcbiAgbG93OiBOVU1FUklDX1ZBTFVFLFxuICBtYW5pZmVzdDogVVNFX0FUVFJJQlVURSxcbiAgbWFyZ2luSGVpZ2h0OiBOVU1FUklDX1ZBTFVFLFxuICBtYXJnaW5XaWR0aDogTlVNRVJJQ19WQUxVRSxcbiAgbWF4OiBudWxsLFxuICBtYXhMZW5ndGg6IFVTRV9BVFRSSUJVVEUgfCBQT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICBtZWRpYTogVVNFX0FUVFJJQlVURSxcbiAgbWVkaWFHcm91cDogbnVsbCxcbiAgbWVudTogbnVsbCxcbiAgbWV0aG9kOiBudWxsLFxuICBtaW46IG51bGwsXG4gIG1pbkxlbmd0aDogVVNFX0FUVFJJQlVURSB8IFBPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gIG11bHRpcGxlOiBVU0VfUFJPUEVSVFkgfCBCT09MRUFOX1ZBTFVFLFxuICBtdXRlZDogVVNFX1BST1BFUlRZIHwgQk9PTEVBTl9WQUxVRSxcbiAgbmFtZTogbnVsbCxcbiAgbm9uY2U6IG51bGwsXG4gIG5vVmFsaWRhdGU6IEJPT0xFQU5fVkFMVUUsXG4gIG9wZW46IEJPT0xFQU5fVkFMVUUsXG4gIG9wdGltdW06IE5VTUVSSUNfVkFMVUUsXG4gIHBhdHRlcm46IG51bGwsXG4gIHBpbmc6IFNQQUNFX1NFUEFSQVRFRCxcbiAgcGxhY2Vob2xkZXI6IG51bGwsXG4gIC8qIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHItdmlkZW8tcGxheXNpbmxpbmUgKi9cbiAgcGxheXNJbmxpbmU6IEJPT0xFQU5fVkFMVUUsXG4gIHBvc3RlcjogbnVsbCxcbiAgcHJlbG9hZDogbnVsbCxcbiAgLyogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWQtcHJvZmlsZSAqL1xuICBwcm9maWxlOiBudWxsLFxuICByYWRpb0dyb3VwOiBudWxsLFxuICByZWFkT25seTogVVNFX1BST1BFUlRZIHwgQk9PTEVBTl9WQUxVRSxcbiAgLyogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0ci1saW5rLXJlZmVycmVycG9saWN5ICovXG4gIHJlZmVycmVyUG9saWN5OiBudWxsLFxuICAvKiBgcmVsYCBpcyBgcmVsTGlzdGAgaW4gRE9NICovXG4gIHJlbDogU1BBQ0VfU0VQQVJBVEVEIHwgVVNFX0FUVFJJQlVURSxcbiAgcmVxdWlyZWQ6IEJPT0xFQU5fVkFMVUUsXG4gIHJldmVyc2VkOiBCT09MRUFOX1ZBTFVFLFxuICByb2xlOiBVU0VfQVRUUklCVVRFLFxuICByb3dzOiBVU0VfQVRUUklCVVRFIHwgUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgcm93U3BhbjogUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgc2FuZGJveDogU1BBQ0VfU0VQQVJBVEVELFxuICBzY29wZTogbnVsbCxcbiAgc2NvcGVkOiBCT09MRUFOX1ZBTFVFLFxuICBzY3JvbGxpbmc6IG51bGwsXG4gIHNlYW1sZXNzOiBVU0VfQVRUUklCVVRFIHwgQk9PTEVBTl9WQUxVRSxcbiAgc2VsZWN0ZWQ6IFVTRV9QUk9QRVJUWSB8IEJPT0xFQU5fVkFMVUUsXG4gIHNoYXBlOiBudWxsLFxuICBzaXplOiBVU0VfQVRUUklCVVRFIHwgUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgc2l6ZXM6IFVTRV9BVFRSSUJVVEUgfCBTUEFDRV9TRVBBUkFURUQsXG4gIC8qIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHItc2xvdCAqL1xuICBzbG90OiBudWxsLFxuICBzb3J0YWJsZTogQk9PTEVBTl9WQUxVRSxcbiAgc29ydGVkOiBTUEFDRV9TRVBBUkFURUQsXG4gIHNwYW46IFBPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gIHNwZWxsQ2hlY2s6IG51bGwsXG4gIHNyYzogbnVsbCxcbiAgc3JjRG9jOiBVU0VfUFJPUEVSVFksXG4gIHNyY0xhbmc6IG51bGwsXG4gIHNyY1NldDogVVNFX0FUVFJJQlVURSB8IENPTU1BX1NFUEFSQVRFRCxcbiAgc3RhcnQ6IE5VTUVSSUNfVkFMVUUsXG4gIHN0ZXA6IG51bGwsXG4gIHN0eWxlOiBudWxsLFxuICBzdW1tYXJ5OiBudWxsLFxuICB0YWJJbmRleDogTlVNRVJJQ19WQUxVRSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aXRsZTogbnVsbCxcbiAgdHJhbnNsYXRlOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB0eXBlTXVzdE1hdGNoOiBCT09MRUFOX1ZBTFVFLFxuICB1c2VNYXA6IG51bGwsXG4gIHZhbHVlOiBVU0VfUFJPUEVSVFksXG4gIHZvbHVtZTogUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgd2lkdGg6IFVTRV9BVFRSSUJVVEUgfCBOVU1FUklDX1ZBTFVFLFxuICB3bW9kZTogVVNFX0FUVFJJQlVURSxcbiAgd3JhcDogbnVsbCxcblxuICAvKiBOb24tc3RhbmRhcmQgUHJvcGVydGllcy4gKi9cblxuICAvKiBgYXV0b0NhcGl0YWxpemVgIGFuZCBgYXV0b0NvcnJlY3RgIGFyZSBzdXBwb3J0ZWQgaW5cbiAgICogTW9iaWxlIFNhZmFyaSBmb3Iga2V5Ym9hcmQgaGludHMuICovXG4gIGF1dG9DYXBpdGFsaXplOiBudWxsLFxuICBhdXRvQ29ycmVjdDogbnVsbCxcbiAgLyogYGF1dG9TYXZlYCBhbGxvd3MgV2ViS2l0L0JsaW5rIHRvIHBlcnNpc3QgdmFsdWVzIG9mXG4gICAqIGlucHV0IGZpZWxkcyBvbiBwYWdlIHJlbG9hZHMgKi9cbiAgYXV0b1NhdmU6IG51bGwsXG4gIC8qIGBpdGVtUHJvcGAsIGBpdGVtU2NvcGVgLCBgaXRlbVR5cGVgIGFyZSBmb3IgTWljcm9kYXRhXG4gICAqIHN1cHBvcnQuIFNlZSBodHRwOi8vc2NoZW1hLm9yZy9kb2NzL2dzLmh0bWwgKi9cbiAgaXRlbVByb3A6IFVTRV9BVFRSSUJVVEUgfCBTUEFDRV9TRVBBUkFURUQsXG4gIGl0ZW1TY29wZTogVVNFX0FUVFJJQlVURSB8IEJPT0xFQU5fVkFMVUUsXG4gIGl0ZW1UeXBlOiBVU0VfQVRUUklCVVRFIHwgU1BBQ0VfU0VQQVJBVEVELFxuICAvKiBgaXRlbUlEYCBhbmQgYGl0ZW1SZWZgIGFyZSBmb3IgTWljcm9kYXRhIHN1cHBvcnQgYXMgd2VsbFxuICAgKiBidXQgb25seSBzcGVjaWZpZWQgaW4gdGhlIHRoZSBXSEFUV0cgc3BlYyBkb2N1bWVudC5cbiAgICogU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL1xuICAgKiBtaWNyb2RhdGEuaHRtbCNtaWNyb2RhdGEtZG9tLWFwaSAqL1xuICBpdGVtSUQ6IFVTRV9BVFRSSUJVVEUsXG4gIGl0ZW1SZWY6IFVTRV9BVFRSSUJVVEUgfCBTUEFDRV9TRVBBUkFURUQsXG4gIC8qIGBwcm9wZXJ0eWAgaXMgc3VwcG9ydGVkIGZvciBPcGVuR3JhcGggaW4gbWV0YSB0YWdzLiAqL1xuICBwcm9wZXJ0eTogbnVsbCxcbiAgLyogYHJlc3VsdHNgIHNob3cgbG9va2luZyBnbGFzcyBpY29uIGFuZCByZWNlbnQgc2VhcmNoZXNcbiAgICogb24gaW5wdXQgc2VhcmNoIGZpZWxkcyBpbiBXZWJLaXQvQmxpbmsgKi9cbiAgcmVzdWx0czogbnVsbCxcbiAgLyogSUUtb25seSBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgc2VjdXJpdHlcbiAgICogcmVzdHJpY3Rpb25zIG9uIGFuIGlmcmFtZSBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGVcbiAgICogc2FuZGJveCBhdHRyaWJ1dGUgb24gSUUgPCAxMCAqL1xuICBzZWN1cml0eTogVVNFX0FUVFJJQlVURSxcbiAgLyogSUUtb25seSBhdHRyaWJ1dGUgdGhhdCBjb250cm9scyBmb2N1cyBiZWhhdmlvciAqL1xuICB1bnNlbGVjdGFibGU6IFVTRV9BVFRSSUJVVEUsXG5cbiAgLyogQW5jaWVudC4gKi9cbiAgeG1sTGFuZzogVVNFX0FUVFJJQlVURSxcbiAgeG1sQmFzZTogVVNFX0FUVFJJQlVURVxufTtcblxuLyogTWFwIG9mIHByb3BlcnRpZXMgdG8gYXR0cmlidXRlcy5cbiAqIE5hbWVzIGFyZSBsb3dlci1jYXNlIHByb3BlcnRpZXMuXG4gKiBWYWx1ZXMgYXJlIEhUTUwgYXR0cmlidXRlcy4gKi9cbnZhciBwcm9wZXJ0eVRvQXR0cmlidXRlTWFwcGluZyA9IHtcbiAgeG1sYmFzZTogJ3htbDpiYXNlJyxcbiAgeG1sbGFuZzogJ3htbDpsYW5nJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3MnLFxuICBodG1sZm9yOiAnZm9yJyxcbiAgaHR0cGVxdWl2OiAnaHR0cC1lcXVpdicsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHQtY2hhcnNldCdcbn07XG5cbi8qIEV4cGFuZCBjb25maWcuICovXG52YXIgaW5mb3JtYXRpb24gPSB7fTtcbnZhciBwcm9wZXJ0eTtcbnZhciBuYW1lO1xudmFyIGNvbmZpZztcblxuZ2V0UHJvcGVydHlJbmZvcm1hdGlvbi5hbGwgPSBpbmZvcm1hdGlvbjtcblxuZm9yIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eUNvbmZpZykge1xuICBuYW1lID0gbG93ZXIocHJvcGVydHkpO1xuICBuYW1lID0gcHJvcGVydHlUb0F0dHJpYnV0ZU1hcHBpbmdbbmFtZV0gfHwgbmFtZTtcbiAgY29uZmlnID0gcHJvcGVydHlDb25maWdbcHJvcGVydHldO1xuXG4gIGluZm9ybWF0aW9uW25hbWVdID0ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eSxcbiAgICBtdXN0VXNlQXR0cmlidXRlOiBjaGVjayhjb25maWcsIFVTRV9BVFRSSUJVVEUpLFxuICAgIG11c3RVc2VQcm9wZXJ0eTogY2hlY2soY29uZmlnLCBVU0VfUFJPUEVSVFkpLFxuICAgIGJvb2xlYW46IGNoZWNrKGNvbmZpZywgQk9PTEVBTl9WQUxVRSksXG4gICAgb3ZlcmxvYWRlZEJvb2xlYW46IGNoZWNrKGNvbmZpZywgT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKSxcbiAgICBudW1lcmljOiBjaGVjayhjb25maWcsIE5VTUVSSUNfVkFMVUUpLFxuICAgIHBvc2l0aXZlTnVtZXJpYzogY2hlY2soY29uZmlnLCBQT1NJVElWRV9OVU1FUklDX1ZBTFVFKSxcbiAgICBjb21tYVNlcGFyYXRlZDogY2hlY2soY29uZmlnLCBDT01NQV9TRVBBUkFURUQpLFxuICAgIHNwYWNlU2VwYXJhdGVkOiBjaGVjayhjb25maWcsIFNQQUNFX1NFUEFSQVRFRClcbiAgfTtcbn1cblxuLyogR2V0IGEgY29uZmlnIGZvciBhIHByb3BlcnR5LiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvcm1hdGlvbihwcm9wZXJ0eU5hbWUpIHtcbiAgdmFyIGluc2Vuc2l0aXZlID0gbG93ZXIocHJvcGVydHlOYW1lKTtcblxuICByZXR1cm4gaW5mb3JtYXRpb25bcHJvcGVydHlUb0F0dHJpYnV0ZU1hcHBpbmdbaW5zZW5zaXRpdmVdIHx8IGluc2Vuc2l0aXZlXTtcbn1cblxuLyogQ2hlY2sgYSBtYXNrLiAqL1xuZnVuY3Rpb24gY2hlY2sodmFsdWUsIGJpdG1hc2spIHtcbiAgcmV0dXJuICh2YWx1ZSAmIGJpdG1hc2spID09PSBiaXRtYXNrO1xufVxuXG4vKiBMb3dlci1jYXNlIGEgc3RyaW5nLiAqL1xuZnVuY3Rpb24gbG93ZXIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFBQTs7QUFFQTtBQUNBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBOztBQUVBO0FBQ0E7QUFBQTs7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFMQTtBQTZMQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/property-information/index.js\n"); - -/***/ }), - -/***/ "../node_modules/proxy-polyfill/proxy.js": -/*!***********************************************!*\ - !*** ../node_modules/proxy-polyfill/proxy.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {/*\n * Copyright 2016 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n(function (scope) {\n if (scope['Proxy']) {\n return;\n }\n\n var lastRevokeFn = null;\n /**\n * @param {*} o\n * @return {boolean} whether this is probably a (non-null) Object\n */\n\n function isObject(o) {\n return o ? _typeof(o) == 'object' || typeof o == 'function' : false;\n }\n /**\n * @constructor\n * @param {!Object} target\n * @param {{apply, construct, get, set}} handler\n */\n\n\n scope.Proxy = function (target, handler) {\n if (!isObject(target) || !isObject(handler)) {\n throw new TypeError('Cannot create proxy with a non-object as target or handler');\n } // Construct revoke function, and set lastRevokeFn so that Proxy.revocable can steal it.\n // The caller might get the wrong revoke function if a user replaces or wraps scope.Proxy\n // to call itself, but that seems unlikely especially when using the polyfill.\n\n\n var throwRevoked = function throwRevoked() {};\n\n lastRevokeFn = function lastRevokeFn() {\n throwRevoked = function throwRevoked(trap) {\n throw new TypeError(\"Cannot perform '\".concat(trap, \"' on a proxy that has been revoked\"));\n };\n }; // Fail on unsupported traps: Chrome doesn't do this, but ensure that users of the polyfill\n // are a bit more careful. Copy the internal parts of handler to prevent user changes.\n\n\n var unsafeHandler = handler;\n handler = {\n 'get': null,\n 'set': null,\n 'apply': null,\n 'construct': null\n };\n\n for (var k in unsafeHandler) {\n if (!(k in handler)) {\n throw new TypeError(\"Proxy polyfill does not support trap '\".concat(k, \"'\"));\n }\n\n handler[k] = unsafeHandler[k];\n }\n\n if (typeof unsafeHandler == 'function') {\n // Allow handler to be a function (which has an 'apply' method). This matches what is\n // probably a bug in native versions. It treats the apply call as a trap to be configured.\n handler.apply = unsafeHandler.apply.bind(unsafeHandler);\n } // Define proxy as this, or a Function (if either it's callable, or apply is set).\n // TODO(samthor): Closure compiler doesn't know about 'construct', attempts to rename it.\n\n\n var proxy = this;\n var isMethod = false;\n var targetIsFunction = typeof target == 'function';\n\n if (handler.apply || handler['construct'] || targetIsFunction) {\n proxy = function Proxy() {\n var usingNew = this && this.constructor === proxy;\n throwRevoked(usingNew ? 'construct' : 'apply');\n\n if (usingNew && handler['construct']) {\n return handler['construct'].call(this, target, arguments);\n } else if (!usingNew && handler.apply) {\n return handler.apply(target, this, arguments);\n } else if (targetIsFunction) {\n // since the target was a function, fallback to calling it directly.\n if (usingNew) {\n // inspired by answers to https://stackoverflow.com/q/1606797\n var all = Array.prototype.slice.call(arguments);\n all.unshift(target); // pass class as first arg to constructor, although irrelevant\n // nb. cast to convince Closure compiler that this is a constructor\n\n var f =\n /** @type {!Function} */\n target.bind.apply(target, all);\n return new f();\n }\n\n return target.apply(this, arguments);\n }\n\n throw new TypeError(usingNew ? 'not a constructor' : 'not a function');\n };\n\n isMethod = true;\n } // Create default getters/setters. Create different code paths as handler.get/handler.set can't\n // change after creation.\n\n\n var getter = handler.get ? function (prop) {\n throwRevoked('get');\n return handler.get(this, prop, proxy);\n } : function (prop) {\n throwRevoked('get');\n return this[prop];\n };\n var setter = handler.set ? function (prop, value) {\n throwRevoked('set');\n var status = handler.set(this, prop, value, proxy);\n\n if (!status) {// TODO(samthor): If the calling code is in strict mode, throw TypeError.\n // It's (sometimes) possible to work this out, if this code isn't strict- try to load the\n // callee, and if it's available, that code is non-strict. However, this isn't exhaustive.\n }\n } : function (prop, value) {\n throwRevoked('set');\n this[prop] = value;\n }; // Clone direct properties (i.e., not part of a prototype).\n\n var propertyNames = Object.getOwnPropertyNames(target);\n var propertyMap = {};\n propertyNames.forEach(function (prop) {\n if (isMethod && prop in proxy) {\n return; // ignore properties already here, e.g. 'bind', 'prototype' etc\n }\n\n var real = Object.getOwnPropertyDescriptor(target, prop);\n var desc = {\n enumerable: !!real.enumerable,\n get: getter.bind(target, prop),\n set: setter.bind(target, prop)\n };\n Object.defineProperty(proxy, prop, desc);\n propertyMap[prop] = true;\n }); // Set the prototype, or clone all prototype methods (always required if a getter is provided).\n // TODO(samthor): We don't allow prototype methods to be set. It's (even more) awkward.\n // An alternative here would be to _just_ clone methods to keep behavior consistent.\n\n var prototypeOk = true;\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(proxy, Object.getPrototypeOf(target));\n } else if (proxy.__proto__) {\n proxy.__proto__ = target.__proto__;\n } else {\n prototypeOk = false;\n }\n\n if (handler.get || !prototypeOk) {\n for (var _k in target) {\n if (propertyMap[_k]) {\n continue;\n }\n\n Object.defineProperty(proxy, _k, {\n get: getter.bind(target, _k)\n });\n }\n } // The Proxy polyfill cannot handle adding new properties. Seal the target and proxy.\n\n\n Object.seal(target);\n Object.seal(proxy);\n return proxy; // nb. if isMethod is true, proxy != this\n };\n\n scope.Proxy.revocable = function (target, handler) {\n var p = new scope.Proxy(target, handler);\n return {\n 'proxy': p,\n 'revoke': lastRevokeFn\n };\n };\n\n scope.Proxy['revocable'] = scope.Proxy.revocable;\n scope['Proxy'] = scope.Proxy;\n})( true && module['exports'] ? global : window);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Byb3h5LXBvbHlmaWxsL3Byb3h5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm94eS1wb2x5ZmlsbC9wcm94eS5qcz8yYjY5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90XG4gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZlxuICogdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuKGZ1bmN0aW9uKHNjb3BlKSB7XG4gIGlmIChzY29wZVsnUHJveHknXSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbGFzdFJldm9rZUZuID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhpcyBpcyBwcm9iYWJseSBhIChub24tbnVsbCkgT2JqZWN0XG4gICAqL1xuICBmdW5jdGlvbiBpc09iamVjdChvKSB7XG4gICAgcmV0dXJuIG8gPyAodHlwZW9mIG8gPT0gJ29iamVjdCcgfHwgdHlwZW9mIG8gPT0gJ2Z1bmN0aW9uJykgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHshT2JqZWN0fSB0YXJnZXRcbiAgICogQHBhcmFtIHt7YXBwbHksIGNvbnN0cnVjdCwgZ2V0LCBzZXR9fSBoYW5kbGVyXG4gICAqL1xuICBzY29wZS5Qcm94eSA9IGZ1bmN0aW9uKHRhcmdldCwgaGFuZGxlcikge1xuICAgIGlmICghaXNPYmplY3QodGFyZ2V0KSB8fCAhaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgcHJveHkgd2l0aCBhIG5vbi1vYmplY3QgYXMgdGFyZ2V0IG9yIGhhbmRsZXInKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgcmV2b2tlIGZ1bmN0aW9uLCBhbmQgc2V0IGxhc3RSZXZva2VGbiBzbyB0aGF0IFByb3h5LnJldm9jYWJsZSBjYW4gc3RlYWwgaXQuXG4gICAgLy8gVGhlIGNhbGxlciBtaWdodCBnZXQgdGhlIHdyb25nIHJldm9rZSBmdW5jdGlvbiBpZiBhIHVzZXIgcmVwbGFjZXMgb3Igd3JhcHMgc2NvcGUuUHJveHlcbiAgICAvLyB0byBjYWxsIGl0c2VsZiwgYnV0IHRoYXQgc2VlbXMgdW5saWtlbHkgZXNwZWNpYWxseSB3aGVuIHVzaW5nIHRoZSBwb2x5ZmlsbC5cbiAgICBsZXQgdGhyb3dSZXZva2VkID0gZnVuY3Rpb24oKSB7fTtcbiAgICBsYXN0UmV2b2tlRm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93UmV2b2tlZCA9IGZ1bmN0aW9uKHRyYXApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHBlcmZvcm0gJyR7dHJhcH0nIG9uIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkYCk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICAvLyBGYWlsIG9uIHVuc3VwcG9ydGVkIHRyYXBzOiBDaHJvbWUgZG9lc24ndCBkbyB0aGlzLCBidXQgZW5zdXJlIHRoYXQgdXNlcnMgb2YgdGhlIHBvbHlmaWxsXG4gICAgLy8gYXJlIGEgYml0IG1vcmUgY2FyZWZ1bC4gQ29weSB0aGUgaW50ZXJuYWwgcGFydHMgb2YgaGFuZGxlciB0byBwcmV2ZW50IHVzZXIgY2hhbmdlcy5cbiAgICBsZXQgdW5zYWZlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IHsnZ2V0JzogbnVsbCwgJ3NldCc6IG51bGwsICdhcHBseSc6IG51bGwsICdjb25zdHJ1Y3QnOiBudWxsfTtcbiAgICBmb3IgKGxldCBrIGluIHVuc2FmZUhhbmRsZXIpIHtcbiAgICAgIGlmICghKGsgaW4gaGFuZGxlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUHJveHkgcG9seWZpbGwgZG9lcyBub3Qgc3VwcG9ydCB0cmFwICcke2t9J2ApO1xuICAgICAgfVxuICAgICAgaGFuZGxlcltrXSA9IHVuc2FmZUhhbmRsZXJba107XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdW5zYWZlSGFuZGxlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBbGxvdyBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24gKHdoaWNoIGhhcyBhbiAnYXBwbHknIG1ldGhvZCkuIFRoaXMgbWF0Y2hlcyB3aGF0IGlzXG4gICAgICAvLyBwcm9iYWJseSBhIGJ1ZyBpbiBuYXRpdmUgdmVyc2lvbnMuIEl0IHRyZWF0cyB0aGUgYXBwbHkgY2FsbCBhcyBhIHRyYXAgdG8gYmUgY29uZmlndXJlZC5cbiAgICAgIGhhbmRsZXIuYXBwbHkgPSB1bnNhZmVIYW5kbGVyLmFwcGx5LmJpbmQodW5zYWZlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHByb3h5IGFzIHRoaXMsIG9yIGEgRnVuY3Rpb24gKGlmIGVpdGhlciBpdCdzIGNhbGxhYmxlLCBvciBhcHBseSBpcyBzZXQpLlxuICAgIC8vIFRPRE8oc2FtdGhvcik6IENsb3N1cmUgY29tcGlsZXIgZG9lc24ndCBrbm93IGFib3V0ICdjb25zdHJ1Y3QnLCBhdHRlbXB0cyB0byByZW5hbWUgaXQuXG4gICAgbGV0IHByb3h5ID0gdGhpcztcbiAgICBsZXQgaXNNZXRob2QgPSBmYWxzZTtcbiAgICBsZXQgdGFyZ2V0SXNGdW5jdGlvbiA9IHR5cGVvZiB0YXJnZXQgPT0gJ2Z1bmN0aW9uJztcbiAgICBpZiAoaGFuZGxlci5hcHBseSB8fCBoYW5kbGVyWydjb25zdHJ1Y3QnXSB8fCB0YXJnZXRJc0Z1bmN0aW9uKSB7XG4gICAgICBwcm94eSA9IGZ1bmN0aW9uIFByb3h5KCkge1xuICAgICAgICBsZXQgdXNpbmdOZXcgPSAodGhpcyAmJiB0aGlzLmNvbnN0cnVjdG9yID09PSBwcm94eSk7XG4gICAgICAgIHRocm93UmV2b2tlZCh1c2luZ05ldyA/ICdjb25zdHJ1Y3QnIDogJ2FwcGx5Jyk7XG5cbiAgICAgICAgaWYgKHVzaW5nTmV3ICYmIGhhbmRsZXJbJ2NvbnN0cnVjdCddKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXJbJ2NvbnN0cnVjdCddLmNhbGwodGhpcywgdGFyZ2V0LCBhcmd1bWVudHMpO1xuICAgICAgICB9IGVsc2UgaWYgKCF1c2luZ05ldyAmJiBoYW5kbGVyLmFwcGx5KSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIuYXBwbHkodGFyZ2V0LCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldElzRnVuY3Rpb24pIHtcbiAgICAgICAgICAvLyBzaW5jZSB0aGUgdGFyZ2V0IHdhcyBhIGZ1bmN0aW9uLCBmYWxsYmFjayB0byBjYWxsaW5nIGl0IGRpcmVjdGx5LlxuICAgICAgICAgIGlmICh1c2luZ05ldykge1xuICAgICAgICAgICAgLy8gaW5zcGlyZWQgYnkgYW5zd2VycyB0byBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTYwNjc5N1xuICAgICAgICAgICAgbGV0IGFsbCA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBhbGwudW5zaGlmdCh0YXJnZXQpOyAgLy8gcGFzcyBjbGFzcyBhcyBmaXJzdCBhcmcgdG8gY29uc3RydWN0b3IsIGFsdGhvdWdoIGlycmVsZXZhbnRcbiAgICAgICAgICAgIC8vIG5iLiBjYXN0IHRvIGNvbnZpbmNlIENsb3N1cmUgY29tcGlsZXIgdGhhdCB0aGlzIGlzIGEgY29uc3RydWN0b3JcbiAgICAgICAgICAgIGxldCBmID0gLyoqIEB0eXBlIHshRnVuY3Rpb259ICovICh0YXJnZXQuYmluZC5hcHBseSh0YXJnZXQsIGFsbCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBmKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHVzaW5nTmV3ID8gJ25vdCBhIGNvbnN0cnVjdG9yJyA6ICdub3QgYSBmdW5jdGlvbicpO1xuICAgICAgfTtcbiAgICAgIGlzTWV0aG9kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZGVmYXVsdCBnZXR0ZXJzL3NldHRlcnMuIENyZWF0ZSBkaWZmZXJlbnQgY29kZSBwYXRocyBhcyBoYW5kbGVyLmdldC9oYW5kbGVyLnNldCBjYW4ndFxuICAgIC8vIGNoYW5nZSBhZnRlciBjcmVhdGlvbi5cbiAgICBsZXQgZ2V0dGVyID0gaGFuZGxlci5nZXQgPyBmdW5jdGlvbihwcm9wKSB7XG4gICAgICB0aHJvd1Jldm9rZWQoJ2dldCcpO1xuICAgICAgcmV0dXJuIGhhbmRsZXIuZ2V0KHRoaXMsIHByb3AsIHByb3h5KTtcbiAgICB9IDogZnVuY3Rpb24ocHJvcCkge1xuICAgICAgdGhyb3dSZXZva2VkKCdnZXQnKTtcbiAgICAgIHJldHVybiB0aGlzW3Byb3BdO1xuICAgIH07XG4gICAgbGV0IHNldHRlciA9IGhhbmRsZXIuc2V0ID8gZnVuY3Rpb24ocHJvcCwgdmFsdWUpIHtcbiAgICAgIHRocm93UmV2b2tlZCgnc2V0Jyk7XG4gICAgICBsZXQgc3RhdHVzID0gaGFuZGxlci5zZXQodGhpcywgcHJvcCwgdmFsdWUsIHByb3h5KTtcbiAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgIC8vIFRPRE8oc2FtdGhvcik6IElmIHRoZSBjYWxsaW5nIGNvZGUgaXMgaW4gc3RyaWN0IG1vZGUsIHRocm93IFR5cGVFcnJvci5cbiAgICAgICAgLy8gSXQncyAoc29tZXRpbWVzKSBwb3NzaWJsZSB0byB3b3JrIHRoaXMgb3V0LCBpZiB0aGlzIGNvZGUgaXNuJ3Qgc3RyaWN0LSB0cnkgdG8gbG9hZCB0aGVcbiAgICAgICAgLy8gY2FsbGVlLCBhbmQgaWYgaXQncyBhdmFpbGFibGUsIHRoYXQgY29kZSBpcyBub24tc3RyaWN0LiBIb3dldmVyLCB0aGlzIGlzbid0IGV4aGF1c3RpdmUuXG4gICAgICB9XG4gICAgfSA6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7XG4gICAgICB0aHJvd1Jldm9rZWQoJ3NldCcpO1xuICAgICAgdGhpc1twcm9wXSA9IHZhbHVlO1xuICAgIH07XG5cbiAgICAvLyBDbG9uZSBkaXJlY3QgcHJvcGVydGllcyAoaS5lLiwgbm90IHBhcnQgb2YgYSBwcm90b3R5cGUpLlxuICAgIGxldCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgICBsZXQgcHJvcGVydHlNYXAgPSB7fTtcbiAgICBwcm9wZXJ0eU5hbWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgaWYgKGlzTWV0aG9kICYmIHByb3AgaW4gcHJveHkpIHtcbiAgICAgICAgcmV0dXJuOyAgLy8gaWdub3JlIHByb3BlcnRpZXMgYWxyZWFkeSBoZXJlLCBlLmcuICdiaW5kJywgJ3Byb3RvdHlwZScgZXRjXG4gICAgICB9XG4gICAgICBsZXQgcmVhbCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICAgIGxldCBkZXNjID0ge1xuICAgICAgICBlbnVtZXJhYmxlOiAhIXJlYWwuZW51bWVyYWJsZSxcbiAgICAgICAgZ2V0OiBnZXR0ZXIuYmluZCh0YXJnZXQsIHByb3ApLFxuICAgICAgICBzZXQ6IHNldHRlci5iaW5kKHRhcmdldCwgcHJvcCksXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBwcm9wLCBkZXNjKTtcbiAgICAgIHByb3BlcnR5TWFwW3Byb3BdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlLCBvciBjbG9uZSBhbGwgcHJvdG90eXBlIG1ldGhvZHMgKGFsd2F5cyByZXF1aXJlZCBpZiBhIGdldHRlciBpcyBwcm92aWRlZCkuXG4gICAgLy8gVE9ETyhzYW10aG9yKTogV2UgZG9uJ3QgYWxsb3cgcHJvdG90eXBlIG1ldGhvZHMgdG8gYmUgc2V0LiBJdCdzIChldmVuIG1vcmUpIGF3a3dhcmQuXG4gICAgLy8gQW4gYWx0ZXJuYXRpdmUgaGVyZSB3b3VsZCBiZSB0byBfanVzdF8gY2xvbmUgbWV0aG9kcyB0byBrZWVwIGJlaGF2aW9yIGNvbnNpc3RlbnQuXG4gICAgbGV0IHByb3RvdHlwZU9rID0gdHJ1ZTtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJveHksIE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpKTtcbiAgICB9IGVsc2UgaWYgKHByb3h5Ll9fcHJvdG9fXykge1xuICAgICAgcHJveHkuX19wcm90b19fID0gdGFyZ2V0Ll9fcHJvdG9fXztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvdG90eXBlT2sgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGhhbmRsZXIuZ2V0IHx8ICFwcm90b3R5cGVPaykge1xuICAgICAgZm9yIChsZXQgayBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5TWFwW2tdKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrLCB7Z2V0OiBnZXR0ZXIuYmluZCh0YXJnZXQsIGspfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIFByb3h5IHBvbHlmaWxsIGNhbm5vdCBoYW5kbGUgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzLiBTZWFsIHRoZSB0YXJnZXQgYW5kIHByb3h5LlxuICAgIE9iamVjdC5zZWFsKHRhcmdldCk7XG4gICAgT2JqZWN0LnNlYWwocHJveHkpO1xuXG4gICAgcmV0dXJuIHByb3h5OyAgLy8gbmIuIGlmIGlzTWV0aG9kIGlzIHRydWUsIHByb3h5ICE9IHRoaXNcbiAgfTtcblxuICBzY29wZS5Qcm94eS5yZXZvY2FibGUgPSBmdW5jdGlvbih0YXJnZXQsIGhhbmRsZXIpIHtcbiAgICBsZXQgcCA9IG5ldyBzY29wZS5Qcm94eSh0YXJnZXQsIGhhbmRsZXIpO1xuICAgIHJldHVybiB7J3Byb3h5JzogcCwgJ3Jldm9rZSc6IGxhc3RSZXZva2VGbn07XG4gIH07XG5cbiAgc2NvcGUuUHJveHlbJ3Jldm9jYWJsZSddID0gc2NvcGUuUHJveHkucmV2b2NhYmxlO1xuICBzY29wZVsnUHJveHknXSA9IHNjb3BlLlByb3h5O1xufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlWydleHBvcnRzJ10gPyBnbG9iYWwgOiB3aW5kb3cpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBVkE7QUFnQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQTVCQTtBQWdDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXBCQTtBQUNBO0FBcUJBO0FBM0RBO0FBK0RBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQWpGQTtBQUNBO0FBb0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQWxHQTtBQXNHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBdEhBO0FBQ0E7QUFDQTtBQXdIQTtBQUNBO0FBRUE7QUE3SEE7QUFDQTtBQStIQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQXpKQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/proxy-polyfill/proxy.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/8BitByte.js": -/*!*********************************************!*\ - !*** ../node_modules/qr.js/lib/8BitByte.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var mode = __webpack_require__(/*! ./mode */ \"../node_modules/qr.js/lib/mode.js\");\n\nfunction QR8bitByte(data) {\n this.mode = mode.MODE_8BIT_BYTE;\n this.data = data;\n}\n\nQR8bitByte.prototype = {\n getLength: function getLength(buffer) {\n return this.data.length;\n },\n write: function write(buffer) {\n for (var i = 0; i < this.data.length; i++) {\n // not JIS ...\n buffer.put(this.data.charCodeAt(i), 8);\n }\n }\n};\nmodule.exports = QR8bitByte;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi84Qml0Qnl0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcXIuanMvbGliLzhCaXRCeXRlLmpzP2ViNTQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG1vZGUgPSByZXF1aXJlKCcuL21vZGUnKTtcblxuZnVuY3Rpb24gUVI4Yml0Qnl0ZShkYXRhKSB7XG5cdHRoaXMubW9kZSA9IG1vZGUuTU9ERV84QklUX0JZVEU7XG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cblFSOGJpdEJ5dGUucHJvdG90eXBlID0ge1xuXG5cdGdldExlbmd0aCA6IGZ1bmN0aW9uKGJ1ZmZlcikge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xuXHR9LFxuXHRcblx0d3JpdGUgOiBmdW5jdGlvbihidWZmZXIpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly8gbm90IEpJUyAuLi5cblx0XHRcdGJ1ZmZlci5wdXQodGhpcy5kYXRhLmNoYXJDb2RlQXQoaSksIDgpO1xuXHRcdH1cblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRUjhiaXRCeXRlO1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/8BitByte.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/BitBuffer.js": -/*!**********************************************!*\ - !*** ../node_modules/qr.js/lib/BitBuffer.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function QRBitBuffer() {\n this.buffer = new Array();\n this.length = 0;\n}\n\nQRBitBuffer.prototype = {\n get: function get(index) {\n var bufIndex = Math.floor(index / 8);\n return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;\n },\n put: function put(num, length) {\n for (var i = 0; i < length; i++) {\n this.putBit((num >>> length - i - 1 & 1) == 1);\n }\n },\n getLengthInBits: function getLengthInBits() {\n return this.length;\n },\n putBit: function putBit(bit) {\n var bufIndex = Math.floor(this.length / 8);\n\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0);\n }\n\n if (bit) {\n this.buffer[bufIndex] |= 0x80 >>> this.length % 8;\n }\n\n this.length++;\n }\n};\nmodule.exports = QRBitBuffer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9CaXRCdWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9CaXRCdWZmZXIuanM/ZTcwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBRUkJpdEJ1ZmZlcigpIHtcblx0dGhpcy5idWZmZXIgPSBuZXcgQXJyYXkoKTtcblx0dGhpcy5sZW5ndGggPSAwO1xufVxuXG5RUkJpdEJ1ZmZlci5wcm90b3R5cGUgPSB7XG5cblx0Z2V0IDogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgYnVmSW5kZXggPSBNYXRoLmZsb29yKGluZGV4IC8gOCk7XG5cdFx0cmV0dXJuICggKHRoaXMuYnVmZmVyW2J1ZkluZGV4XSA+Pj4gKDcgLSBpbmRleCAlIDgpICkgJiAxKSA9PSAxO1xuXHR9LFxuXHRcblx0cHV0IDogZnVuY3Rpb24obnVtLCBsZW5ndGgpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnB1dEJpdCggKCAobnVtID4+PiAobGVuZ3RoIC0gaSAtIDEpICkgJiAxKSA9PSAxKTtcblx0XHR9XG5cdH0sXG5cdFxuXHRnZXRMZW5ndGhJbkJpdHMgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5sZW5ndGg7XG5cdH0sXG5cdFxuXHRwdXRCaXQgOiBmdW5jdGlvbihiaXQpIHtcblx0XG5cdFx0dmFyIGJ1ZkluZGV4ID0gTWF0aC5mbG9vcih0aGlzLmxlbmd0aCAvIDgpO1xuXHRcdGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPD0gYnVmSW5kZXgpIHtcblx0XHRcdHRoaXMuYnVmZmVyLnB1c2goMCk7XG5cdFx0fVxuXHRcblx0XHRpZiAoYml0KSB7XG5cdFx0XHR0aGlzLmJ1ZmZlcltidWZJbmRleF0gfD0gKDB4ODAgPj4+ICh0aGlzLmxlbmd0aCAlIDgpICk7XG5cdFx0fVxuXHRcblx0XHR0aGlzLmxlbmd0aCsrO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFFSQml0QnVmZmVyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFhQTtBQUNBO0FBZEE7QUFpQkE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3QkE7QUFnQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/BitBuffer.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/ErrorCorrectLevel.js": -/*!******************************************************!*\ - !*** ../node_modules/qr.js/lib/ErrorCorrectLevel.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n L: 1,\n M: 0,\n Q: 3,\n H: 2\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9FcnJvckNvcnJlY3RMZXZlbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcXIuanMvbGliL0Vycm9yQ29ycmVjdExldmVsLmpzPzNjODIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG5cdEwgOiAxLFxuXHRNIDogMCxcblx0USA6IDMsXG5cdEggOiAyXG59O1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/ErrorCorrectLevel.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/Polynomial.js": -/*!***********************************************!*\ - !*** ../node_modules/qr.js/lib/Polynomial.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var math = __webpack_require__(/*! ./math */ \"../node_modules/qr.js/lib/math.js\");\n\nfunction QRPolynomial(num, shift) {\n if (num.length == undefined) {\n throw new Error(num.length + \"/\" + shift);\n }\n\n var offset = 0;\n\n while (offset < num.length && num[offset] == 0) {\n offset++;\n }\n\n this.num = new Array(num.length - offset + shift);\n\n for (var i = 0; i < num.length - offset; i++) {\n this.num[i] = num[i + offset];\n }\n}\n\nQRPolynomial.prototype = {\n get: function get(index) {\n return this.num[index];\n },\n getLength: function getLength() {\n return this.num.length;\n },\n multiply: function multiply(e) {\n var num = new Array(this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < this.getLength(); i++) {\n for (var j = 0; j < e.getLength(); j++) {\n num[i + j] ^= math.gexp(math.glog(this.get(i)) + math.glog(e.get(j)));\n }\n }\n\n return new QRPolynomial(num, 0);\n },\n mod: function mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n\n var ratio = math.glog(this.get(0)) - math.glog(e.get(0));\n var num = new Array(this.getLength());\n\n for (var i = 0; i < this.getLength(); i++) {\n num[i] = this.get(i);\n }\n\n for (var i = 0; i < e.getLength(); i++) {\n num[i] ^= math.gexp(math.glog(e.get(i)) + ratio);\n } // recursive call\n\n\n return new QRPolynomial(num, 0).mod(e);\n }\n};\nmodule.exports = QRPolynomial;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9Qb2x5bm9taWFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xci5qcy9saWIvUG9seW5vbWlhbC5qcz8yMTI4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBtYXRoID0gcmVxdWlyZSgnLi9tYXRoJyk7XG5cbmZ1bmN0aW9uIFFSUG9seW5vbWlhbChudW0sIHNoaWZ0KSB7XG5cblx0aWYgKG51bS5sZW5ndGggPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKG51bS5sZW5ndGggKyBcIi9cIiArIHNoaWZ0KTtcblx0fVxuXG5cdHZhciBvZmZzZXQgPSAwO1xuXG5cdHdoaWxlIChvZmZzZXQgPCBudW0ubGVuZ3RoICYmIG51bVtvZmZzZXRdID09IDApIHtcblx0XHRvZmZzZXQrKztcblx0fVxuXG5cdHRoaXMubnVtID0gbmV3IEFycmF5KG51bS5sZW5ndGggLSBvZmZzZXQgKyBzaGlmdCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aCAtIG9mZnNldDsgaSsrKSB7XG5cdFx0dGhpcy5udW1baV0gPSBudW1baSArIG9mZnNldF07XG5cdH1cbn1cblxuUVJQb2x5bm9taWFsLnByb3RvdHlwZSA9IHtcblxuXHRnZXQgOiBmdW5jdGlvbihpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLm51bVtpbmRleF07XG5cdH0sXG5cdFxuXHRnZXRMZW5ndGggOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5udW0ubGVuZ3RoO1xuXHR9LFxuXHRcblx0bXVsdGlwbHkgOiBmdW5jdGlvbihlKSB7XG5cdFxuXHRcdHZhciBudW0gPSBuZXcgQXJyYXkodGhpcy5nZXRMZW5ndGgoKSArIGUuZ2V0TGVuZ3RoKCkgLSAxKTtcblx0XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdldExlbmd0aCgpOyBpKyspIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZS5nZXRMZW5ndGgoKTsgaisrKSB7XG5cdFx0XHRcdG51bVtpICsgal0gXj0gbWF0aC5nZXhwKG1hdGguZ2xvZyh0aGlzLmdldChpKSApICsgbWF0aC5nbG9nKGUuZ2V0KGopICkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFxuXHRcdHJldHVybiBuZXcgUVJQb2x5bm9taWFsKG51bSwgMCk7XG5cdH0sXG5cdFxuXHRtb2QgOiBmdW5jdGlvbihlKSB7XG5cdFxuXHRcdGlmICh0aGlzLmdldExlbmd0aCgpIC0gZS5nZXRMZW5ndGgoKSA8IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XG5cdFx0dmFyIHJhdGlvID0gbWF0aC5nbG9nKHRoaXMuZ2V0KDApICkgLSBtYXRoLmdsb2coZS5nZXQoMCkgKTtcblx0XG5cdFx0dmFyIG51bSA9IG5ldyBBcnJheSh0aGlzLmdldExlbmd0aCgpICk7XG5cdFx0XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdldExlbmd0aCgpOyBpKyspIHtcblx0XHRcdG51bVtpXSA9IHRoaXMuZ2V0KGkpO1xuXHRcdH1cblx0XHRcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGUuZ2V0TGVuZ3RoKCk7IGkrKykge1xuXHRcdFx0bnVtW2ldIF49IG1hdGguZ2V4cChtYXRoLmdsb2coZS5nZXQoaSkgKSArIHJhdGlvKTtcblx0XHR9XG5cdFxuXHRcdC8vIHJlY3Vyc2l2ZSBjYWxsXG5cdFx0cmV0dXJuIG5ldyBRUlBvbHlub21pYWwobnVtLCAwKS5tb2QoZSk7XG5cdH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUVJQb2x5bm9taWFsO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBUEE7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQXVCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFDQTtBQUNBO0FBaUJBO0FBQ0E7QUEzQ0E7QUE4Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/Polynomial.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/QRCode.js": -/*!*******************************************!*\ - !*** ../node_modules/qr.js/lib/QRCode.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var BitByte = __webpack_require__(/*! ./8BitByte */ \"../node_modules/qr.js/lib/8BitByte.js\");\n\nvar RSBlock = __webpack_require__(/*! ./RSBlock */ \"../node_modules/qr.js/lib/RSBlock.js\");\n\nvar BitBuffer = __webpack_require__(/*! ./BitBuffer */ \"../node_modules/qr.js/lib/BitBuffer.js\");\n\nvar util = __webpack_require__(/*! ./util */ \"../node_modules/qr.js/lib/util.js\");\n\nvar Polynomial = __webpack_require__(/*! ./Polynomial */ \"../node_modules/qr.js/lib/Polynomial.js\");\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = errorCorrectLevel;\n this.modules = null;\n this.moduleCount = 0;\n this.dataCache = null;\n this.dataList = [];\n} // for client side minification\n\n\nvar proto = QRCode.prototype;\n\nproto.addData = function (data) {\n var newData = new BitByte(data);\n this.dataList.push(newData);\n this.dataCache = null;\n};\n\nproto.isDark = function (row, col) {\n if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n throw new Error(row + \",\" + col);\n }\n\n return this.modules[row][col];\n};\n\nproto.getModuleCount = function () {\n return this.moduleCount;\n};\n\nproto.make = function () {\n // Calculate automatically typeNumber if provided is < 1\n if (this.typeNumber < 1) {\n var typeNumber = 1;\n\n for (typeNumber = 1; typeNumber < 40; typeNumber++) {\n var rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n var buffer = new BitBuffer();\n var totalDataCount = 0;\n\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n for (var i = 0; i < this.dataList.length; i++) {\n var data = this.dataList[i];\n buffer.put(data.mode, 4);\n buffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber));\n data.write(buffer);\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) break;\n }\n\n this.typeNumber = typeNumber;\n }\n\n this.makeImpl(false, this.getBestMaskPattern());\n};\n\nproto.makeImpl = function (test, maskPattern) {\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = new Array(this.moduleCount);\n\n for (var row = 0; row < this.moduleCount; row++) {\n this.modules[row] = new Array(this.moduleCount);\n\n for (var col = 0; col < this.moduleCount; col++) {\n this.modules[row][col] = null; //(col + row) % 3;\n }\n }\n\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n\n if (this.dataCache == null) {\n this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n }\n\n this.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function (row, col) {\n for (var r = -1; r <= 7; r++) {\n if (row + r <= -1 || this.moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c++) {\n if (col + c <= -1 || this.moduleCount <= col + c) continue;\n\n if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {\n this.modules[row + r][col + c] = true;\n } else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n};\n\nproto.getBestMaskPattern = function () {\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i++) {\n this.makeImpl(true, i);\n var lostPoint = util.getLostPoint(this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n};\n\nproto.createMovieClip = function (target_mc, instance_name, depth) {\n var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n var cs = 1;\n this.make();\n\n for (var row = 0; row < this.modules.length; row++) {\n var y = row * cs;\n\n for (var col = 0; col < this.modules[row].length; col++) {\n var x = col * cs;\n var dark = this.modules[row][col];\n\n if (dark) {\n qr_mc.beginFill(0, 100);\n qr_mc.moveTo(x, y);\n qr_mc.lineTo(x + cs, y);\n qr_mc.lineTo(x + cs, y + cs);\n qr_mc.lineTo(x, y + cs);\n qr_mc.endFill();\n }\n }\n }\n\n return qr_mc;\n};\n\nproto.setupTimingPattern = function () {\n for (var r = 8; r < this.moduleCount - 8; r++) {\n if (this.modules[r][6] != null) {\n continue;\n }\n\n this.modules[r][6] = r % 2 == 0;\n }\n\n for (var c = 8; c < this.moduleCount - 8; c++) {\n if (this.modules[6][c] != null) {\n continue;\n }\n\n this.modules[6][c] = c % 2 == 0;\n }\n};\n\nproto.setupPositionAdjustPattern = function () {\n var pos = util.getPatternPosition(this.typeNumber);\n\n for (var i = 0; i < pos.length; i++) {\n for (var j = 0; j < pos.length; j++) {\n var row = pos[i];\n var col = pos[j];\n\n if (this.modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r++) {\n for (var c = -2; c <= 2; c++) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {\n this.modules[row + r][col + c] = true;\n } else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n};\n\nproto.setupTypeNumber = function (test) {\n var bits = util.getBCHTypeNumber(this.typeNumber);\n\n for (var i = 0; i < 18; i++) {\n var mod = !test && (bits >> i & 1) == 1;\n this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i++) {\n var mod = !test && (bits >> i & 1) == 1;\n this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n};\n\nproto.setupTypeInfo = function (test, maskPattern) {\n var data = this.errorCorrectLevel << 3 | maskPattern;\n var bits = util.getBCHTypeInfo(data); // vertical\t\t\n\n for (var i = 0; i < 15; i++) {\n var mod = !test && (bits >> i & 1) == 1;\n\n if (i < 6) {\n this.modules[i][8] = mod;\n } else if (i < 8) {\n this.modules[i + 1][8] = mod;\n } else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n } // horizontal\n\n\n for (var i = 0; i < 15; i++) {\n var mod = !test && (bits >> i & 1) == 1;\n\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n } else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n } else {\n this.modules[8][15 - i - 1] = mod;\n }\n } // fixed module\n\n\n this.modules[this.moduleCount - 8][8] = !test;\n};\n\nproto.mapData = function (data, maskPattern) {\n var inc = -1;\n var row = this.moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n\n for (var col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) col--;\n\n while (true) {\n for (var c = 0; c < 2; c++) {\n if (this.modules[row][col - c] == null) {\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = (data[byteIndex] >>> bitIndex & 1) == 1;\n }\n\n var mask = util.getMask(maskPattern, row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n this.modules[row][col - c] = dark;\n bitIndex--;\n\n if (bitIndex == -1) {\n byteIndex++;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function (typeNumber, errorCorrectLevel, dataList) {\n var rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n var buffer = new BitBuffer();\n\n for (var i = 0; i < dataList.length; i++) {\n var data = dataList[i];\n buffer.put(data.mode, 4);\n buffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber));\n data.write(buffer);\n } // calc num max data.\n\n\n var totalDataCount = 0;\n\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error(\"code length overflow. (\" + buffer.getLengthInBits() + \">\" + totalDataCount * 8 + \")\");\n } // end code\n\n\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n } // padding\n\n\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n } // padding\n\n\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n\n buffer.put(QRCode.PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n\n buffer.put(QRCode.PAD1, 8);\n }\n\n return QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function (buffer, rsBlocks) {\n var offset = 0;\n var maxDcCount = 0;\n var maxEcCount = 0;\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r++) {\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i++) {\n dcdata[r][i] = 0xff & buffer.buffer[i + offset];\n }\n\n offset += dcCount;\n var rsPoly = util.getErrorCorrectPolynomial(ecCount);\n var rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n\n for (var i = 0; i < ecdata[r].length; i++) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n\n for (var i = 0; i < rsBlocks.length; i++) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i++) {\n for (var r = 0; r < rsBlocks.length; r++) {\n if (i < dcdata[r].length) {\n data[index++] = dcdata[r][i];\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i++) {\n for (var r = 0; r < rsBlocks.length; r++) {\n if (i < ecdata[r].length) {\n data[index++] = ecdata[r][i];\n }\n }\n }\n\n return data;\n};\n\nmodule.exports = QRCode;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9RUkNvZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9RUkNvZGUuanM/OTU1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQml0Qnl0ZSA9IHJlcXVpcmUoJy4vOEJpdEJ5dGUnKTtcbnZhciBSU0Jsb2NrID0gcmVxdWlyZSgnLi9SU0Jsb2NrJyk7XG52YXIgQml0QnVmZmVyID0gcmVxdWlyZSgnLi9CaXRCdWZmZXInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgUG9seW5vbWlhbCA9IHJlcXVpcmUoJy4vUG9seW5vbWlhbCcpO1xuXG5mdW5jdGlvbiBRUkNvZGUodHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwpIHtcblx0dGhpcy50eXBlTnVtYmVyID0gdHlwZU51bWJlcjtcblx0dGhpcy5lcnJvckNvcnJlY3RMZXZlbCA9IGVycm9yQ29ycmVjdExldmVsO1xuXHR0aGlzLm1vZHVsZXMgPSBudWxsO1xuXHR0aGlzLm1vZHVsZUNvdW50ID0gMDtcblx0dGhpcy5kYXRhQ2FjaGUgPSBudWxsO1xuXHR0aGlzLmRhdGFMaXN0ID0gW107XG59XG5cbi8vIGZvciBjbGllbnQgc2lkZSBtaW5pZmljYXRpb25cbnZhciBwcm90byA9IFFSQ29kZS5wcm90b3R5cGU7XG5cbnByb3RvLmFkZERhdGEgPSBmdW5jdGlvbihkYXRhKSB7XG5cdHZhciBuZXdEYXRhID0gbmV3IEJpdEJ5dGUoZGF0YSk7XG5cdHRoaXMuZGF0YUxpc3QucHVzaChuZXdEYXRhKTtcblx0dGhpcy5kYXRhQ2FjaGUgPSBudWxsO1xufTtcblxucHJvdG8uaXNEYXJrID0gZnVuY3Rpb24ocm93LCBjb2wpIHtcblx0aWYgKHJvdyA8IDAgfHwgdGhpcy5tb2R1bGVDb3VudCA8PSByb3cgfHwgY29sIDwgMCB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IGNvbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihyb3cgKyBcIixcIiArIGNvbCk7XG5cdH1cblx0cmV0dXJuIHRoaXMubW9kdWxlc1tyb3ddW2NvbF07XG59O1xuXG5wcm90by5nZXRNb2R1bGVDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5tb2R1bGVDb3VudDtcbn07XG5cbnByb3RvLm1ha2UgPSBmdW5jdGlvbigpIHtcblx0Ly8gQ2FsY3VsYXRlIGF1dG9tYXRpY2FsbHkgdHlwZU51bWJlciBpZiBwcm92aWRlZCBpcyA8IDFcblx0aWYgKHRoaXMudHlwZU51bWJlciA8IDEgKXtcblx0XHR2YXIgdHlwZU51bWJlciA9IDE7XG5cdFx0Zm9yICh0eXBlTnVtYmVyID0gMTsgdHlwZU51bWJlciA8IDQwOyB0eXBlTnVtYmVyKyspIHtcblx0XHRcdHZhciByc0Jsb2NrcyA9IFJTQmxvY2suZ2V0UlNCbG9ja3ModHlwZU51bWJlciwgdGhpcy5lcnJvckNvcnJlY3RMZXZlbCk7XG5cblx0XHRcdHZhciBidWZmZXIgPSBuZXcgQml0QnVmZmVyKCk7XG5cdFx0XHR2YXIgdG90YWxEYXRhQ291bnQgPSAwO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByc0Jsb2Nrcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR0b3RhbERhdGFDb3VudCArPSByc0Jsb2Nrc1tpXS5kYXRhQ291bnQ7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhTGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHRoaXMuZGF0YUxpc3RbaV07XG5cdFx0XHRcdGJ1ZmZlci5wdXQoZGF0YS5tb2RlLCA0KTtcblx0XHRcdFx0YnVmZmVyLnB1dChkYXRhLmdldExlbmd0aCgpLCB1dGlsLmdldExlbmd0aEluQml0cyhkYXRhLm1vZGUsIHR5cGVOdW1iZXIpICk7XG5cdFx0XHRcdGRhdGEud3JpdGUoYnVmZmVyKTtcblx0XHRcdH1cblx0XHRcdGlmIChidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKCkgPD0gdG90YWxEYXRhQ291bnQgKiA4KVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0dGhpcy50eXBlTnVtYmVyID0gdHlwZU51bWJlcjtcblx0fVxuXHR0aGlzLm1ha2VJbXBsKGZhbHNlLCB0aGlzLmdldEJlc3RNYXNrUGF0dGVybigpICk7XG59O1xuXG5wcm90by5tYWtlSW1wbCA9IGZ1bmN0aW9uKHRlc3QsIG1hc2tQYXR0ZXJuKSB7XG5cdFxuXHR0aGlzLm1vZHVsZUNvdW50ID0gdGhpcy50eXBlTnVtYmVyICogNCArIDE3O1xuXHR0aGlzLm1vZHVsZXMgPSBuZXcgQXJyYXkodGhpcy5tb2R1bGVDb3VudCk7XG5cdFxuXHRmb3IgKHZhciByb3cgPSAwOyByb3cgPCB0aGlzLm1vZHVsZUNvdW50OyByb3crKykge1xuXHRcdFxuXHRcdHRoaXMubW9kdWxlc1tyb3ddID0gbmV3IEFycmF5KHRoaXMubW9kdWxlQ291bnQpO1xuXHRcdFxuXHRcdGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IHRoaXMubW9kdWxlQ291bnQ7IGNvbCsrKSB7XG5cdFx0XHR0aGlzLm1vZHVsZXNbcm93XVtjb2xdID0gbnVsbDsvLyhjb2wgKyByb3cpICUgMztcblx0XHR9XG5cdH1cblxuXHR0aGlzLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4oMCwgMCk7XG5cdHRoaXMuc2V0dXBQb3NpdGlvblByb2JlUGF0dGVybih0aGlzLm1vZHVsZUNvdW50IC0gNywgMCk7XG5cdHRoaXMuc2V0dXBQb3NpdGlvblByb2JlUGF0dGVybigwLCB0aGlzLm1vZHVsZUNvdW50IC0gNyk7XG5cdHRoaXMuc2V0dXBQb3NpdGlvbkFkanVzdFBhdHRlcm4oKTtcblx0dGhpcy5zZXR1cFRpbWluZ1BhdHRlcm4oKTtcblx0dGhpcy5zZXR1cFR5cGVJbmZvKHRlc3QsIG1hc2tQYXR0ZXJuKTtcblx0XG5cdGlmICh0aGlzLnR5cGVOdW1iZXIgPj0gNykge1xuXHRcdHRoaXMuc2V0dXBUeXBlTnVtYmVyKHRlc3QpO1xuXHR9XG5cblx0aWYgKHRoaXMuZGF0YUNhY2hlID09IG51bGwpIHtcblx0XHR0aGlzLmRhdGFDYWNoZSA9IFFSQ29kZS5jcmVhdGVEYXRhKHRoaXMudHlwZU51bWJlciwgdGhpcy5lcnJvckNvcnJlY3RMZXZlbCwgdGhpcy5kYXRhTGlzdCk7XG5cdH1cblxuXHR0aGlzLm1hcERhdGEodGhpcy5kYXRhQ2FjaGUsIG1hc2tQYXR0ZXJuKTtcbn07XG5cbnByb3RvLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4gPSBmdW5jdGlvbihyb3csIGNvbCkgIHtcblx0XG5cdGZvciAodmFyIHIgPSAtMTsgciA8PSA3OyByKyspIHtcblx0XHRcblx0XHRpZiAocm93ICsgciA8PSAtMSB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IHJvdyArIHIpIGNvbnRpbnVlO1xuXHRcdFxuXHRcdGZvciAodmFyIGMgPSAtMTsgYyA8PSA3OyBjKyspIHtcblx0XHRcdFxuXHRcdFx0aWYgKGNvbCArIGMgPD0gLTEgfHwgdGhpcy5tb2R1bGVDb3VudCA8PSBjb2wgKyBjKSBjb250aW51ZTtcblx0XHRcdFxuXHRcdFx0aWYgKCAoMCA8PSByICYmIHIgPD0gNiAmJiAoYyA9PSAwIHx8IGMgPT0gNikgKVxuXHRcdFx0XHRcdHx8ICgwIDw9IGMgJiYgYyA8PSA2ICYmIChyID09IDAgfHwgciA9PSA2KSApXG5cdFx0XHRcdFx0fHwgKDIgPD0gciAmJiByIDw9IDQgJiYgMiA8PSBjICYmIGMgPD0gNCkgKSB7XG5cdFx0XHRcdHRoaXMubW9kdWxlc1tyb3cgKyByXVtjb2wgKyBjXSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1vZHVsZXNbcm93ICsgcl1bY29sICsgY10gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XHRcdFxuXHR9XHRcdFxufTtcblxucHJvdG8uZ2V0QmVzdE1hc2tQYXR0ZXJuID0gZnVuY3Rpb24oKSB7XG5cblx0dmFyIG1pbkxvc3RQb2ludCA9IDA7XG5cdHZhciBwYXR0ZXJuID0gMDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHRcdFxuXHRcdHRoaXMubWFrZUltcGwodHJ1ZSwgaSk7XG5cblx0XHR2YXIgbG9zdFBvaW50ID0gdXRpbC5nZXRMb3N0UG9pbnQodGhpcyk7XG5cblx0XHRpZiAoaSA9PSAwIHx8IG1pbkxvc3RQb2ludCA+ICBsb3N0UG9pbnQpIHtcblx0XHRcdG1pbkxvc3RQb2ludCA9IGxvc3RQb2ludDtcblx0XHRcdHBhdHRlcm4gPSBpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwYXR0ZXJuO1xufTtcblxucHJvdG8uY3JlYXRlTW92aWVDbGlwID0gZnVuY3Rpb24odGFyZ2V0X21jLCBpbnN0YW5jZV9uYW1lLCBkZXB0aCkge1xuXG5cdHZhciBxcl9tYyA9IHRhcmdldF9tYy5jcmVhdGVFbXB0eU1vdmllQ2xpcChpbnN0YW5jZV9uYW1lLCBkZXB0aCk7XG5cdHZhciBjcyA9IDE7XG5cblx0dGhpcy5tYWtlKCk7XG5cblx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgdGhpcy5tb2R1bGVzLmxlbmd0aDsgcm93KyspIHtcblx0XHRcblx0XHR2YXIgeSA9IHJvdyAqIGNzO1xuXHRcdFxuXHRcdGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IHRoaXMubW9kdWxlc1tyb3ddLmxlbmd0aDsgY29sKyspIHtcblxuXHRcdFx0dmFyIHggPSBjb2wgKiBjcztcblx0XHRcdHZhciBkYXJrID0gdGhpcy5tb2R1bGVzW3Jvd11bY29sXTtcblx0XHRcblx0XHRcdGlmIChkYXJrKSB7XG5cdFx0XHRcdHFyX21jLmJlZ2luRmlsbCgwLCAxMDApO1xuXHRcdFx0XHRxcl9tYy5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdHFyX21jLmxpbmVUbyh4ICsgY3MsIHkpO1xuXHRcdFx0XHRxcl9tYy5saW5lVG8oeCArIGNzLCB5ICsgY3MpO1xuXHRcdFx0XHRxcl9tYy5saW5lVG8oeCwgeSArIGNzKTtcblx0XHRcdFx0cXJfbWMuZW5kRmlsbCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRcblx0cmV0dXJuIHFyX21jO1xufTtcblxucHJvdG8uc2V0dXBUaW1pbmdQYXR0ZXJuID0gZnVuY3Rpb24oKSB7XG5cdFxuXHRmb3IgKHZhciByID0gODsgciA8IHRoaXMubW9kdWxlQ291bnQgLSA4OyByKyspIHtcblx0XHRpZiAodGhpcy5tb2R1bGVzW3JdWzZdICE9IG51bGwpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aGlzLm1vZHVsZXNbcl1bNl0gPSAociAlIDIgPT0gMCk7XG5cdH1cblxuXHRmb3IgKHZhciBjID0gODsgYyA8IHRoaXMubW9kdWxlQ291bnQgLSA4OyBjKyspIHtcblx0XHRpZiAodGhpcy5tb2R1bGVzWzZdW2NdICE9IG51bGwpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aGlzLm1vZHVsZXNbNl1bY10gPSAoYyAlIDIgPT0gMCk7XG5cdH1cbn07XG5cbnByb3RvLnNldHVwUG9zaXRpb25BZGp1c3RQYXR0ZXJuID0gZnVuY3Rpb24oKSB7XG5cblx0dmFyIHBvcyA9IHV0aWwuZ2V0UGF0dGVyblBvc2l0aW9uKHRoaXMudHlwZU51bWJlcik7XG5cdFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHBvcy5sZW5ndGg7IGkrKykge1xuXHRcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBvcy5sZW5ndGg7IGorKykge1xuXHRcdFxuXHRcdFx0dmFyIHJvdyA9IHBvc1tpXTtcblx0XHRcdHZhciBjb2wgPSBwb3Nbal07XG5cdFx0XHRcblx0XHRcdGlmICh0aGlzLm1vZHVsZXNbcm93XVtjb2xdICE9IG51bGwpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGZvciAodmFyIHIgPSAtMjsgciA8PSAyOyByKyspIHtcblx0XHRcdFxuXHRcdFx0XHRmb3IgKHZhciBjID0gLTI7IGMgPD0gMjsgYysrKSB7XG5cdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChyID09IC0yIHx8IHIgPT0gMiB8fCBjID09IC0yIHx8IGMgPT0gMlxuXHRcdFx0XHRcdFx0XHR8fCAociA9PSAwICYmIGMgPT0gMCkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1vZHVsZXNbcm93ICsgcl1bY29sICsgY10gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1vZHVsZXNbcm93ICsgcl1bY29sICsgY10gPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnByb3RvLnNldHVwVHlwZU51bWJlciA9IGZ1bmN0aW9uKHRlc3QpIHtcblxuXHR2YXIgYml0cyA9IHV0aWwuZ2V0QkNIVHlwZU51bWJlcih0aGlzLnR5cGVOdW1iZXIpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMTg7IGkrKykge1xuXHRcdHZhciBtb2QgPSAoIXRlc3QgJiYgKCAoYml0cyA+PiBpKSAmIDEpID09IDEpO1xuXHRcdHRoaXMubW9kdWxlc1tNYXRoLmZsb29yKGkgLyAzKV1baSAlIDMgKyB0aGlzLm1vZHVsZUNvdW50IC0gOCAtIDNdID0gbW9kO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxODsgaSsrKSB7XG5cdFx0dmFyIG1vZCA9ICghdGVzdCAmJiAoIChiaXRzID4+IGkpICYgMSkgPT0gMSk7XG5cdFx0dGhpcy5tb2R1bGVzW2kgJSAzICsgdGhpcy5tb2R1bGVDb3VudCAtIDggLSAzXVtNYXRoLmZsb29yKGkgLyAzKV0gPSBtb2Q7XG5cdH1cbn07XG5cbnByb3RvLnNldHVwVHlwZUluZm8gPSBmdW5jdGlvbih0ZXN0LCBtYXNrUGF0dGVybikge1xuXG5cdHZhciBkYXRhID0gKHRoaXMuZXJyb3JDb3JyZWN0TGV2ZWwgPDwgMykgfCBtYXNrUGF0dGVybjtcblx0dmFyIGJpdHMgPSB1dGlsLmdldEJDSFR5cGVJbmZvKGRhdGEpO1xuXG5cdC8vIHZlcnRpY2FsXHRcdFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IDE1OyBpKyspIHtcblxuXHRcdHZhciBtb2QgPSAoIXRlc3QgJiYgKCAoYml0cyA+PiBpKSAmIDEpID09IDEpO1xuXG5cdFx0aWYgKGkgPCA2KSB7XG5cdFx0XHR0aGlzLm1vZHVsZXNbaV1bOF0gPSBtb2Q7XG5cdFx0fSBlbHNlIGlmIChpIDwgOCkge1xuXHRcdFx0dGhpcy5tb2R1bGVzW2kgKyAxXVs4XSA9IG1vZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQgLSAxNSArIGldWzhdID0gbW9kO1xuXHRcdH1cblx0fVxuXG5cdC8vIGhvcml6b250YWxcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxNTsgaSsrKSB7XG5cblx0XHR2YXIgbW9kID0gKCF0ZXN0ICYmICggKGJpdHMgPj4gaSkgJiAxKSA9PSAxKTtcblx0XHRcblx0XHRpZiAoaSA8IDgpIHtcblx0XHRcdHRoaXMubW9kdWxlc1s4XVt0aGlzLm1vZHVsZUNvdW50IC0gaSAtIDFdID0gbW9kO1xuXHRcdH0gZWxzZSBpZiAoaSA8IDkpIHtcblx0XHRcdHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxICsgMV0gPSBtb2Q7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxXSA9IG1vZDtcblx0XHR9XG5cdH1cblxuXHQvLyBmaXhlZCBtb2R1bGVcblx0dGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQgLSA4XVs4XSA9ICghdGVzdCk7XG59O1xuXG5wcm90by5tYXBEYXRhID0gZnVuY3Rpb24oZGF0YSwgbWFza1BhdHRlcm4pIHtcblx0XG5cdHZhciBpbmMgPSAtMTtcblx0dmFyIHJvdyA9IHRoaXMubW9kdWxlQ291bnQgLSAxO1xuXHR2YXIgYml0SW5kZXggPSA3O1xuXHR2YXIgYnl0ZUluZGV4ID0gMDtcblx0XG5cdGZvciAodmFyIGNvbCA9IHRoaXMubW9kdWxlQ291bnQgLSAxOyBjb2wgPiAwOyBjb2wgLT0gMikge1xuXG5cdFx0aWYgKGNvbCA9PSA2KSBjb2wtLTtcblxuXHRcdHdoaWxlICh0cnVlKSB7XG5cblx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgMjsgYysrKSB7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAodGhpcy5tb2R1bGVzW3Jvd11bY29sIC0gY10gPT0gbnVsbCkge1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBkYXJrID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoYnl0ZUluZGV4IDwgZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGRhcmsgPSAoICggKGRhdGFbYnl0ZUluZGV4XSA+Pj4gYml0SW5kZXgpICYgMSkgPT0gMSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG1hc2sgPSB1dGlsLmdldE1hc2sobWFza1BhdHRlcm4sIHJvdywgY29sIC0gYyk7XG5cblx0XHRcdFx0XHRpZiAobWFzaykge1xuXHRcdFx0XHRcdFx0ZGFyayA9ICFkYXJrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHR0aGlzLm1vZHVsZXNbcm93XVtjb2wgLSBjXSA9IGRhcms7XG5cdFx0XHRcdFx0Yml0SW5kZXgtLTtcblxuXHRcdFx0XHRcdGlmIChiaXRJbmRleCA9PSAtMSkge1xuXHRcdFx0XHRcdFx0Ynl0ZUluZGV4Kys7XG5cdFx0XHRcdFx0XHRiaXRJbmRleCA9IDc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0cm93ICs9IGluYztcblxuXHRcdFx0aWYgKHJvdyA8IDAgfHwgdGhpcy5tb2R1bGVDb3VudCA8PSByb3cpIHtcblx0XHRcdFx0cm93IC09IGluYztcblx0XHRcdFx0aW5jID0gLWluYztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5RUkNvZGUuUEFEMCA9IDB4RUM7XG5RUkNvZGUuUEFEMSA9IDB4MTE7XG5cblFSQ29kZS5jcmVhdGVEYXRhID0gZnVuY3Rpb24odHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwsIGRhdGFMaXN0KSB7XG5cdFxuXHR2YXIgcnNCbG9ja3MgPSBSU0Jsb2NrLmdldFJTQmxvY2tzKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKTtcblx0XG5cdHZhciBidWZmZXIgPSBuZXcgQml0QnVmZmVyKCk7XG5cdFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGRhdGEgPSBkYXRhTGlzdFtpXTtcblx0XHRidWZmZXIucHV0KGRhdGEubW9kZSwgNCk7XG5cdFx0YnVmZmVyLnB1dChkYXRhLmdldExlbmd0aCgpLCB1dGlsLmdldExlbmd0aEluQml0cyhkYXRhLm1vZGUsIHR5cGVOdW1iZXIpICk7XG5cdFx0ZGF0YS53cml0ZShidWZmZXIpO1xuXHR9XG5cblx0Ly8gY2FsYyBudW0gbWF4IGRhdGEuXG5cdHZhciB0b3RhbERhdGFDb3VudCA9IDA7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcnNCbG9ja3MubGVuZ3RoOyBpKyspIHtcblx0XHR0b3RhbERhdGFDb3VudCArPSByc0Jsb2Nrc1tpXS5kYXRhQ291bnQ7XG5cdH1cblxuXHRpZiAoYnVmZmVyLmdldExlbmd0aEluQml0cygpID4gdG90YWxEYXRhQ291bnQgKiA4KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY29kZSBsZW5ndGggb3ZlcmZsb3cuIChcIlxuXHRcdFx0KyBidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKClcblx0XHRcdCsgXCI+XCJcblx0XHRcdCsgIHRvdGFsRGF0YUNvdW50ICogOFxuXHRcdFx0KyBcIilcIik7XG5cdH1cblxuXHQvLyBlbmQgY29kZVxuXHRpZiAoYnVmZmVyLmdldExlbmd0aEluQml0cygpICsgNCA8PSB0b3RhbERhdGFDb3VudCAqIDgpIHtcblx0XHRidWZmZXIucHV0KDAsIDQpO1xuXHR9XG5cblx0Ly8gcGFkZGluZ1xuXHR3aGlsZSAoYnVmZmVyLmdldExlbmd0aEluQml0cygpICUgOCAhPSAwKSB7XG5cdFx0YnVmZmVyLnB1dEJpdChmYWxzZSk7XG5cdH1cblxuXHQvLyBwYWRkaW5nXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0XG5cdFx0aWYgKGJ1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKSA+PSB0b3RhbERhdGFDb3VudCAqIDgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRidWZmZXIucHV0KFFSQ29kZS5QQUQwLCA4KTtcblx0XHRcblx0XHRpZiAoYnVmZmVyLmdldExlbmd0aEluQml0cygpID49IHRvdGFsRGF0YUNvdW50ICogOCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGJ1ZmZlci5wdXQoUVJDb2RlLlBBRDEsIDgpO1xuXHR9XG5cblx0cmV0dXJuIFFSQ29kZS5jcmVhdGVCeXRlcyhidWZmZXIsIHJzQmxvY2tzKTtcbn07XG5cblFSQ29kZS5jcmVhdGVCeXRlcyA9IGZ1bmN0aW9uKGJ1ZmZlciwgcnNCbG9ja3MpIHtcblxuXHR2YXIgb2Zmc2V0ID0gMDtcblx0XG5cdHZhciBtYXhEY0NvdW50ID0gMDtcblx0dmFyIG1heEVjQ291bnQgPSAwO1xuXHRcblx0dmFyIGRjZGF0YSA9IG5ldyBBcnJheShyc0Jsb2Nrcy5sZW5ndGgpO1xuXHR2YXIgZWNkYXRhID0gbmV3IEFycmF5KHJzQmxvY2tzLmxlbmd0aCk7XG5cdFxuXHRmb3IgKHZhciByID0gMDsgciA8IHJzQmxvY2tzLmxlbmd0aDsgcisrKSB7XG5cblx0XHR2YXIgZGNDb3VudCA9IHJzQmxvY2tzW3JdLmRhdGFDb3VudDtcblx0XHR2YXIgZWNDb3VudCA9IHJzQmxvY2tzW3JdLnRvdGFsQ291bnQgLSBkY0NvdW50O1xuXG5cdFx0bWF4RGNDb3VudCA9IE1hdGgubWF4KG1heERjQ291bnQsIGRjQ291bnQpO1xuXHRcdG1heEVjQ291bnQgPSBNYXRoLm1heChtYXhFY0NvdW50LCBlY0NvdW50KTtcblx0XHRcblx0XHRkY2RhdGFbcl0gPSBuZXcgQXJyYXkoZGNDb3VudCk7XG5cdFx0XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkY2RhdGFbcl0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGRjZGF0YVtyXVtpXSA9IDB4ZmYgJiBidWZmZXIuYnVmZmVyW2kgKyBvZmZzZXRdO1xuXHRcdH1cblx0XHRvZmZzZXQgKz0gZGNDb3VudDtcblx0XHRcblx0XHR2YXIgcnNQb2x5ID0gdXRpbC5nZXRFcnJvckNvcnJlY3RQb2x5bm9taWFsKGVjQ291bnQpO1xuXHRcdHZhciByYXdQb2x5ID0gbmV3IFBvbHlub21pYWwoZGNkYXRhW3JdLCByc1BvbHkuZ2V0TGVuZ3RoKCkgLSAxKTtcblxuXHRcdHZhciBtb2RQb2x5ID0gcmF3UG9seS5tb2QocnNQb2x5KTtcblx0XHRlY2RhdGFbcl0gPSBuZXcgQXJyYXkocnNQb2x5LmdldExlbmd0aCgpIC0gMSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlY2RhdGFbcl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtb2RJbmRleCA9IGkgKyBtb2RQb2x5LmdldExlbmd0aCgpIC0gZWNkYXRhW3JdLmxlbmd0aDtcblx0XHRcdGVjZGF0YVtyXVtpXSA9IChtb2RJbmRleCA+PSAwKT8gbW9kUG9seS5nZXQobW9kSW5kZXgpIDogMDtcblx0XHR9XG5cblx0fVxuXHRcblx0dmFyIHRvdGFsQ29kZUNvdW50ID0gMDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCByc0Jsb2Nrcy5sZW5ndGg7IGkrKykge1xuXHRcdHRvdGFsQ29kZUNvdW50ICs9IHJzQmxvY2tzW2ldLnRvdGFsQ291bnQ7XG5cdH1cblxuXHR2YXIgZGF0YSA9IG5ldyBBcnJheSh0b3RhbENvZGVDb3VudCk7XG5cdHZhciBpbmRleCA9IDA7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXhEY0NvdW50OyBpKyspIHtcblx0XHRmb3IgKHZhciByID0gMDsgciA8IHJzQmxvY2tzLmxlbmd0aDsgcisrKSB7XG5cdFx0XHRpZiAoaSA8IGRjZGF0YVtyXS5sZW5ndGgpIHtcblx0XHRcdFx0ZGF0YVtpbmRleCsrXSA9IGRjZGF0YVtyXVtpXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IG1heEVjQ291bnQ7IGkrKykge1xuXHRcdGZvciAodmFyIHIgPSAwOyByIDwgcnNCbG9ja3MubGVuZ3RoOyByKyspIHtcblx0XHRcdGlmIChpIDwgZWNkYXRhW3JdLmxlbmd0aCkge1xuXHRcdFx0XHRkYXRhW2luZGV4KytdID0gZWNkYXRhW3JdW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkYXRhO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRUkNvZGU7XG5cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQXhCQTtBQUNBO0FBMEJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQ0E7QUErQkE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQUNBO0FBb0JBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBbUJBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQUNBO0FBNkJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBZEE7QUFDQTtBQWdCQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUJBO0FBQ0E7QUE4QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFoQkE7QUFDQTtBQUNBO0FBa0JBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBOUJBO0FBQ0E7QUFDQTtBQWdDQTtBQWxDQTtBQUNBO0FBb0NBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBO0FBQ0E7QUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBQ0E7QUEwQkE7QUFDQTtBQTdCQTtBQUNBO0FBQ0E7QUErQkE7QUFDQTtBQWxDQTtBQUNBO0FBQ0E7QUFvQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBbkRBO0FBQ0E7QUFxREE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdEQTtBQUNBO0FBK0RBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/QRCode.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/RSBlock.js": -/*!********************************************!*\ - !*** ../node_modules/qr.js/lib/RSBlock.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("// ErrorCorrectLevel\nvar ECL = __webpack_require__(/*! ./ErrorCorrectLevel */ \"../node_modules/qr.js/lib/ErrorCorrectLevel.js\");\n\nfunction QRRSBlock(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [// L\n// M\n// Q\n// H\n// 1\n[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], // 2\n[1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], // 3\n[1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], // 4\t\t\n[1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], // 5\n[1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], // 6\n[2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], // 7\t\t\n[2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], // 8\n[2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], // 9\n[2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], // 10\t\t\n[2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], // 11\n[4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], // 12\n[2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], // 13\n[4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], // 14\n[3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], // 15\n[5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], // 16\n[5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], // 17\n[1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], // 18\n[5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], // 19\n[3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], // 20\n[3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], // 21\n[4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], // 22\n[2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], // 23\n[4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], // 24\n[6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], // 25\n[8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], // 26\n[10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], // 27\n[8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], // 28\n[3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], // 29\n[7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], // 30\n[5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], // 31\n[13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], // 32\n[17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], // 33\n[17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], // 34\n[13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], // 35\n[12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], // 36\n[6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], // 37\n[17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], // 38\n[4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], // 39\n[20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], // 40\n[19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];\n\nQRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {\n var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\n if (rsBlock == undefined) {\n throw new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n }\n\n var length = rsBlock.length / 3;\n var list = new Array();\n\n for (var i = 0; i < length; i++) {\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j++) {\n list.push(new QRRSBlock(totalCount, dataCount));\n }\n }\n\n return list;\n};\n\nQRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ECL.L:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\n case ECL.M:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\n case ECL.Q:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\n case ECL.H:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\n default:\n return undefined;\n }\n};\n\nmodule.exports = QRRSBlock;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9SU0Jsb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xci5qcy9saWIvUlNCbG9jay5qcz9iM2UwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEVycm9yQ29ycmVjdExldmVsXG52YXIgRUNMID0gcmVxdWlyZSgnLi9FcnJvckNvcnJlY3RMZXZlbCcpO1xuXG5mdW5jdGlvbiBRUlJTQmxvY2sodG90YWxDb3VudCwgZGF0YUNvdW50KSB7XG5cdHRoaXMudG90YWxDb3VudCA9IHRvdGFsQ291bnQ7XG5cdHRoaXMuZGF0YUNvdW50ICA9IGRhdGFDb3VudDtcbn1cblxuUVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFID0gW1xuXG5cdC8vIExcblx0Ly8gTVxuXHQvLyBRXG5cdC8vIEhcblxuXHQvLyAxXG5cdFsxLCAyNiwgMTldLFxuXHRbMSwgMjYsIDE2XSxcblx0WzEsIDI2LCAxM10sXG5cdFsxLCAyNiwgOV0sXG5cdFxuXHQvLyAyXG5cdFsxLCA0NCwgMzRdLFxuXHRbMSwgNDQsIDI4XSxcblx0WzEsIDQ0LCAyMl0sXG5cdFsxLCA0NCwgMTZdLFxuXG5cdC8vIDNcblx0WzEsIDcwLCA1NV0sXG5cdFsxLCA3MCwgNDRdLFxuXHRbMiwgMzUsIDE3XSxcblx0WzIsIDM1LCAxM10sXG5cblx0Ly8gNFx0XHRcblx0WzEsIDEwMCwgODBdLFxuXHRbMiwgNTAsIDMyXSxcblx0WzIsIDUwLCAyNF0sXG5cdFs0LCAyNSwgOV0sXG5cdFxuXHQvLyA1XG5cdFsxLCAxMzQsIDEwOF0sXG5cdFsyLCA2NywgNDNdLFxuXHRbMiwgMzMsIDE1LCAyLCAzNCwgMTZdLFxuXHRbMiwgMzMsIDExLCAyLCAzNCwgMTJdLFxuXHRcblx0Ly8gNlxuXHRbMiwgODYsIDY4XSxcblx0WzQsIDQzLCAyN10sXG5cdFs0LCA0MywgMTldLFxuXHRbNCwgNDMsIDE1XSxcblx0XG5cdC8vIDdcdFx0XG5cdFsyLCA5OCwgNzhdLFxuXHRbNCwgNDksIDMxXSxcblx0WzIsIDMyLCAxNCwgNCwgMzMsIDE1XSxcblx0WzQsIDM5LCAxMywgMSwgNDAsIDE0XSxcblx0XG5cdC8vIDhcblx0WzIsIDEyMSwgOTddLFxuXHRbMiwgNjAsIDM4LCAyLCA2MSwgMzldLFxuXHRbNCwgNDAsIDE4LCAyLCA0MSwgMTldLFxuXHRbNCwgNDAsIDE0LCAyLCA0MSwgMTVdLFxuXHRcblx0Ly8gOVxuXHRbMiwgMTQ2LCAxMTZdLFxuXHRbMywgNTgsIDM2LCAyLCA1OSwgMzddLFxuXHRbNCwgMzYsIDE2LCA0LCAzNywgMTddLFxuXHRbNCwgMzYsIDEyLCA0LCAzNywgMTNdLFxuXHRcblx0Ly8gMTBcdFx0XG5cdFsyLCA4NiwgNjgsIDIsIDg3LCA2OV0sXG5cdFs0LCA2OSwgNDMsIDEsIDcwLCA0NF0sXG5cdFs2LCA0MywgMTksIDIsIDQ0LCAyMF0sXG5cdFs2LCA0MywgMTUsIDIsIDQ0LCAxNl0sXG5cblx0Ly8gMTFcblx0WzQsIDEwMSwgODFdLFxuXHRbMSwgODAsIDUwLCA0LCA4MSwgNTFdLFxuXHRbNCwgNTAsIDIyLCA0LCA1MSwgMjNdLFxuXHRbMywgMzYsIDEyLCA4LCAzNywgMTNdLFxuXG5cdC8vIDEyXG5cdFsyLCAxMTYsIDkyLCAyLCAxMTcsIDkzXSxcblx0WzYsIDU4LCAzNiwgMiwgNTksIDM3XSxcblx0WzQsIDQ2LCAyMCwgNiwgNDcsIDIxXSxcblx0WzcsIDQyLCAxNCwgNCwgNDMsIDE1XSxcblxuXHQvLyAxM1xuXHRbNCwgMTMzLCAxMDddLFxuXHRbOCwgNTksIDM3LCAxLCA2MCwgMzhdLFxuXHRbOCwgNDQsIDIwLCA0LCA0NSwgMjFdLFxuXHRbMTIsIDMzLCAxMSwgNCwgMzQsIDEyXSxcblxuXHQvLyAxNFxuXHRbMywgMTQ1LCAxMTUsIDEsIDE0NiwgMTE2XSxcblx0WzQsIDY0LCA0MCwgNSwgNjUsIDQxXSxcblx0WzExLCAzNiwgMTYsIDUsIDM3LCAxN10sXG5cdFsxMSwgMzYsIDEyLCA1LCAzNywgMTNdLFxuXG5cdC8vIDE1XG5cdFs1LCAxMDksIDg3LCAxLCAxMTAsIDg4XSxcblx0WzUsIDY1LCA0MSwgNSwgNjYsIDQyXSxcblx0WzUsIDU0LCAyNCwgNywgNTUsIDI1XSxcblx0WzExLCAzNiwgMTJdLFxuXG5cdC8vIDE2XG5cdFs1LCAxMjIsIDk4LCAxLCAxMjMsIDk5XSxcblx0WzcsIDczLCA0NSwgMywgNzQsIDQ2XSxcblx0WzE1LCA0MywgMTksIDIsIDQ0LCAyMF0sXG5cdFszLCA0NSwgMTUsIDEzLCA0NiwgMTZdLFxuXG5cdC8vIDE3XG5cdFsxLCAxMzUsIDEwNywgNSwgMTM2LCAxMDhdLFxuXHRbMTAsIDc0LCA0NiwgMSwgNzUsIDQ3XSxcblx0WzEsIDUwLCAyMiwgMTUsIDUxLCAyM10sXG5cdFsyLCA0MiwgMTQsIDE3LCA0MywgMTVdLFxuXG5cdC8vIDE4XG5cdFs1LCAxNTAsIDEyMCwgMSwgMTUxLCAxMjFdLFxuXHRbOSwgNjksIDQzLCA0LCA3MCwgNDRdLFxuXHRbMTcsIDUwLCAyMiwgMSwgNTEsIDIzXSxcblx0WzIsIDQyLCAxNCwgMTksIDQzLCAxNV0sXG5cblx0Ly8gMTlcblx0WzMsIDE0MSwgMTEzLCA0LCAxNDIsIDExNF0sXG5cdFszLCA3MCwgNDQsIDExLCA3MSwgNDVdLFxuXHRbMTcsIDQ3LCAyMSwgNCwgNDgsIDIyXSxcblx0WzksIDM5LCAxMywgMTYsIDQwLCAxNF0sXG5cblx0Ly8gMjBcblx0WzMsIDEzNSwgMTA3LCA1LCAxMzYsIDEwOF0sXG5cdFszLCA2NywgNDEsIDEzLCA2OCwgNDJdLFxuXHRbMTUsIDU0LCAyNCwgNSwgNTUsIDI1XSxcblx0WzE1LCA0MywgMTUsIDEwLCA0NCwgMTZdLFxuXG5cdC8vIDIxXG5cdFs0LCAxNDQsIDExNiwgNCwgMTQ1LCAxMTddLFxuXHRbMTcsIDY4LCA0Ml0sXG5cdFsxNywgNTAsIDIyLCA2LCA1MSwgMjNdLFxuXHRbMTksIDQ2LCAxNiwgNiwgNDcsIDE3XSxcblxuXHQvLyAyMlxuXHRbMiwgMTM5LCAxMTEsIDcsIDE0MCwgMTEyXSxcblx0WzE3LCA3NCwgNDZdLFxuXHRbNywgNTQsIDI0LCAxNiwgNTUsIDI1XSxcblx0WzM0LCAzNywgMTNdLFxuXG5cdC8vIDIzXG5cdFs0LCAxNTEsIDEyMSwgNSwgMTUyLCAxMjJdLFxuXHRbNCwgNzUsIDQ3LCAxNCwgNzYsIDQ4XSxcblx0WzExLCA1NCwgMjQsIDE0LCA1NSwgMjVdLFxuXHRbMTYsIDQ1LCAxNSwgMTQsIDQ2LCAxNl0sXG5cblx0Ly8gMjRcblx0WzYsIDE0NywgMTE3LCA0LCAxNDgsIDExOF0sXG5cdFs2LCA3MywgNDUsIDE0LCA3NCwgNDZdLFxuXHRbMTEsIDU0LCAyNCwgMTYsIDU1LCAyNV0sXG5cdFszMCwgNDYsIDE2LCAyLCA0NywgMTddLFxuXG5cdC8vIDI1XG5cdFs4LCAxMzIsIDEwNiwgNCwgMTMzLCAxMDddLFxuXHRbOCwgNzUsIDQ3LCAxMywgNzYsIDQ4XSxcblx0WzcsIDU0LCAyNCwgMjIsIDU1LCAyNV0sXG5cdFsyMiwgNDUsIDE1LCAxMywgNDYsIDE2XSxcblxuXHQvLyAyNlxuXHRbMTAsIDE0MiwgMTE0LCAyLCAxNDMsIDExNV0sXG5cdFsxOSwgNzQsIDQ2LCA0LCA3NSwgNDddLFxuXHRbMjgsIDUwLCAyMiwgNiwgNTEsIDIzXSxcblx0WzMzLCA0NiwgMTYsIDQsIDQ3LCAxN10sXG5cblx0Ly8gMjdcblx0WzgsIDE1MiwgMTIyLCA0LCAxNTMsIDEyM10sXG5cdFsyMiwgNzMsIDQ1LCAzLCA3NCwgNDZdLFxuXHRbOCwgNTMsIDIzLCAyNiwgNTQsIDI0XSxcblx0WzEyLCA0NSwgMTUsIDI4LCA0NiwgMTZdLFxuXG5cdC8vIDI4XG5cdFszLCAxNDcsIDExNywgMTAsIDE0OCwgMTE4XSxcblx0WzMsIDczLCA0NSwgMjMsIDc0LCA0Nl0sXG5cdFs0LCA1NCwgMjQsIDMxLCA1NSwgMjVdLFxuXHRbMTEsIDQ1LCAxNSwgMzEsIDQ2LCAxNl0sXG5cblx0Ly8gMjlcblx0WzcsIDE0NiwgMTE2LCA3LCAxNDcsIDExN10sXG5cdFsyMSwgNzMsIDQ1LCA3LCA3NCwgNDZdLFxuXHRbMSwgNTMsIDIzLCAzNywgNTQsIDI0XSxcblx0WzE5LCA0NSwgMTUsIDI2LCA0NiwgMTZdLFxuXG5cdC8vIDMwXG5cdFs1LCAxNDUsIDExNSwgMTAsIDE0NiwgMTE2XSxcblx0WzE5LCA3NSwgNDcsIDEwLCA3NiwgNDhdLFxuXHRbMTUsIDU0LCAyNCwgMjUsIDU1LCAyNV0sXG5cdFsyMywgNDUsIDE1LCAyNSwgNDYsIDE2XSxcblxuXHQvLyAzMVxuXHRbMTMsIDE0NSwgMTE1LCAzLCAxNDYsIDExNl0sXG5cdFsyLCA3NCwgNDYsIDI5LCA3NSwgNDddLFxuXHRbNDIsIDU0LCAyNCwgMSwgNTUsIDI1XSxcblx0WzIzLCA0NSwgMTUsIDI4LCA0NiwgMTZdLFxuXG5cdC8vIDMyXG5cdFsxNywgMTQ1LCAxMTVdLFxuXHRbMTAsIDc0LCA0NiwgMjMsIDc1LCA0N10sXG5cdFsxMCwgNTQsIDI0LCAzNSwgNTUsIDI1XSxcblx0WzE5LCA0NSwgMTUsIDM1LCA0NiwgMTZdLFxuXG5cdC8vIDMzXG5cdFsxNywgMTQ1LCAxMTUsIDEsIDE0NiwgMTE2XSxcblx0WzE0LCA3NCwgNDYsIDIxLCA3NSwgNDddLFxuXHRbMjksIDU0LCAyNCwgMTksIDU1LCAyNV0sXG5cdFsxMSwgNDUsIDE1LCA0NiwgNDYsIDE2XSxcblxuXHQvLyAzNFxuXHRbMTMsIDE0NSwgMTE1LCA2LCAxNDYsIDExNl0sXG5cdFsxNCwgNzQsIDQ2LCAyMywgNzUsIDQ3XSxcblx0WzQ0LCA1NCwgMjQsIDcsIDU1LCAyNV0sXG5cdFs1OSwgNDYsIDE2LCAxLCA0NywgMTddLFxuXG5cdC8vIDM1XG5cdFsxMiwgMTUxLCAxMjEsIDcsIDE1MiwgMTIyXSxcblx0WzEyLCA3NSwgNDcsIDI2LCA3NiwgNDhdLFxuXHRbMzksIDU0LCAyNCwgMTQsIDU1LCAyNV0sXG5cdFsyMiwgNDUsIDE1LCA0MSwgNDYsIDE2XSxcblxuXHQvLyAzNlxuXHRbNiwgMTUxLCAxMjEsIDE0LCAxNTIsIDEyMl0sXG5cdFs2LCA3NSwgNDcsIDM0LCA3NiwgNDhdLFxuXHRbNDYsIDU0LCAyNCwgMTAsIDU1LCAyNV0sXG5cdFsyLCA0NSwgMTUsIDY0LCA0NiwgMTZdLFxuXG5cdC8vIDM3XG5cdFsxNywgMTUyLCAxMjIsIDQsIDE1MywgMTIzXSxcblx0WzI5LCA3NCwgNDYsIDE0LCA3NSwgNDddLFxuXHRbNDksIDU0LCAyNCwgMTAsIDU1LCAyNV0sXG5cdFsyNCwgNDUsIDE1LCA0NiwgNDYsIDE2XSxcblxuXHQvLyAzOFxuXHRbNCwgMTUyLCAxMjIsIDE4LCAxNTMsIDEyM10sXG5cdFsxMywgNzQsIDQ2LCAzMiwgNzUsIDQ3XSxcblx0WzQ4LCA1NCwgMjQsIDE0LCA1NSwgMjVdLFxuXHRbNDIsIDQ1LCAxNSwgMzIsIDQ2LCAxNl0sXG5cblx0Ly8gMzlcblx0WzIwLCAxNDcsIDExNywgNCwgMTQ4LCAxMThdLFxuXHRbNDAsIDc1LCA0NywgNywgNzYsIDQ4XSxcblx0WzQzLCA1NCwgMjQsIDIyLCA1NSwgMjVdLFxuXHRbMTAsIDQ1LCAxNSwgNjcsIDQ2LCAxNl0sXG5cblx0Ly8gNDBcblx0WzE5LCAxNDgsIDExOCwgNiwgMTQ5LCAxMTldLFxuXHRbMTgsIDc1LCA0NywgMzEsIDc2LCA0OF0sXG5cdFszNCwgNTQsIDI0LCAzNCwgNTUsIDI1XSxcblx0WzIwLCA0NSwgMTUsIDYxLCA0NiwgMTZdXG5dO1xuXG5RUlJTQmxvY2suZ2V0UlNCbG9ja3MgPSBmdW5jdGlvbih0eXBlTnVtYmVyLCBlcnJvckNvcnJlY3RMZXZlbCkge1xuXHRcblx0dmFyIHJzQmxvY2sgPSBRUlJTQmxvY2suZ2V0UnNCbG9ja1RhYmxlKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKTtcblx0XG5cdGlmIChyc0Jsb2NrID09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImJhZCBycyBibG9jayBAIHR5cGVOdW1iZXI6XCIgKyB0eXBlTnVtYmVyICsgXCIvZXJyb3JDb3JyZWN0TGV2ZWw6XCIgKyBlcnJvckNvcnJlY3RMZXZlbCk7XG5cdH1cblxuXHR2YXIgbGVuZ3RoID0gcnNCbG9jay5sZW5ndGggLyAzO1xuXHRcblx0dmFyIGxpc3QgPSBuZXcgQXJyYXkoKTtcblx0XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblxuXHRcdHZhciBjb3VudCA9IHJzQmxvY2tbaSAqIDMgKyAwXTtcblx0XHR2YXIgdG90YWxDb3VudCA9IHJzQmxvY2tbaSAqIDMgKyAxXTtcblx0XHR2YXIgZGF0YUNvdW50ICA9IHJzQmxvY2tbaSAqIDMgKyAyXTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuXHRcdFx0bGlzdC5wdXNoKG5ldyBRUlJTQmxvY2sodG90YWxDb3VudCwgZGF0YUNvdW50KSApO1x0XG5cdFx0fVxuXHR9XG5cdFxuXHRyZXR1cm4gbGlzdDtcbn1cblxuUVJSU0Jsb2NrLmdldFJzQmxvY2tUYWJsZSA9IGZ1bmN0aW9uKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKSB7XG5cblx0c3dpdGNoKGVycm9yQ29ycmVjdExldmVsKSB7XG5cdGNhc2UgRUNMLkwgOlxuXHRcdHJldHVybiBRUlJTQmxvY2suUlNfQkxPQ0tfVEFCTEVbKHR5cGVOdW1iZXIgLSAxKSAqIDQgKyAwXTtcblx0Y2FzZSBFQ0wuTSA6XG5cdFx0cmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlciAtIDEpICogNCArIDFdO1xuXHRjYXNlIEVDTC5RIDpcblx0XHRyZXR1cm4gUVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFWyh0eXBlTnVtYmVyIC0gMSkgKiA0ICsgMl07XG5cdGNhc2UgRUNMLkggOlxuXHRcdHJldHVybiBRUlJTQmxvY2suUlNfQkxPQ0tfVEFCTEVbKHR5cGVOdW1iZXIgLSAxKSAqIDQgKyAzXTtcblx0ZGVmYXVsdCA6XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFFSUlNCbG9jaztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQU1BO0FBTUE7QUFNQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkJBO0FBQ0E7QUF5QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQUZBO0FBQ0E7QUFlQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/RSBlock.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/math.js": -/*!*****************************************!*\ - !*** ../node_modules/qr.js/lib/math.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var QRMath = {\n glog: function glog(n) {\n if (n < 1) {\n throw new Error(\"glog(\" + n + \")\");\n }\n\n return QRMath.LOG_TABLE[n];\n },\n gexp: function gexp(n) {\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return QRMath.EXP_TABLE[n];\n },\n EXP_TABLE: new Array(256),\n LOG_TABLE: new Array(256)\n};\n\nfor (var i = 0; i < 8; i++) {\n QRMath.EXP_TABLE[i] = 1 << i;\n}\n\nfor (var i = 8; i < 256; i++) {\n QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];\n}\n\nfor (var i = 0; i < 255; i++) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n}\n\nmodule.exports = QRMath;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9tYXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xci5qcy9saWIvbWF0aC5qcz9mN2MzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBRUk1hdGggPSB7XG5cblx0Z2xvZyA6IGZ1bmN0aW9uKG4pIHtcblx0XG5cdFx0aWYgKG4gPCAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJnbG9nKFwiICsgbiArIFwiKVwiKTtcblx0XHR9XG5cdFx0XG5cdFx0cmV0dXJuIFFSTWF0aC5MT0dfVEFCTEVbbl07XG5cdH0sXG5cdFxuXHRnZXhwIDogZnVuY3Rpb24obikge1xuXHRcblx0XHR3aGlsZSAobiA8IDApIHtcblx0XHRcdG4gKz0gMjU1O1xuXHRcdH1cblx0XG5cdFx0d2hpbGUgKG4gPj0gMjU2KSB7XG5cdFx0XHRuIC09IDI1NTtcblx0XHR9XG5cdFxuXHRcdHJldHVybiBRUk1hdGguRVhQX1RBQkxFW25dO1xuXHR9LFxuXHRcblx0RVhQX1RBQkxFIDogbmV3IEFycmF5KDI1NiksXG5cdFxuXHRMT0dfVEFCTEUgOiBuZXcgQXJyYXkoMjU2KVxuXG59O1xuXHRcbmZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFFSTWF0aC5FWFBfVEFCTEVbaV0gPSAxIDw8IGk7XG59XG5mb3IgKHZhciBpID0gODsgaSA8IDI1NjsgaSsrKSB7XG5cdFFSTWF0aC5FWFBfVEFCTEVbaV0gPSBRUk1hdGguRVhQX1RBQkxFW2kgLSA0XVxuXHRcdF4gUVJNYXRoLkVYUF9UQUJMRVtpIC0gNV1cblx0XHReIFFSTWF0aC5FWFBfVEFCTEVbaSAtIDZdXG5cdFx0XiBRUk1hdGguRVhQX1RBQkxFW2kgLSA4XTtcbn1cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcblx0UVJNYXRoLkxPR19UQUJMRVtRUk1hdGguRVhQX1RBQkxFW2ldIF0gPSBpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFFSTWF0aDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBd0JBO0FBRUE7QUExQkE7QUFDQTtBQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/math.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/mode.js": -/*!*****************************************!*\ - !*** ../node_modules/qr.js/lib/mode.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n MODE_NUMBER: 1 << 0,\n MODE_ALPHA_NUM: 1 << 1,\n MODE_8BIT_BYTE: 1 << 2,\n MODE_KANJI: 1 << 3\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi9tb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xci5qcy9saWIvbW9kZS5qcz9hMGI1Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuXHRNT0RFX05VTUJFUiA6XHRcdDEgPDwgMCxcblx0TU9ERV9BTFBIQV9OVU0gOiBcdDEgPDwgMSxcblx0TU9ERV84QklUX0JZVEUgOiBcdDEgPDwgMixcblx0TU9ERV9LQU5KSSA6XHRcdDEgPDwgM1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/mode.js\n"); - -/***/ }), - -/***/ "../node_modules/qr.js/lib/util.js": -/*!*****************************************!*\ - !*** ../node_modules/qr.js/lib/util.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var Mode = __webpack_require__(/*! ./mode */ \"../node_modules/qr.js/lib/mode.js\");\n\nvar Polynomial = __webpack_require__(/*! ./Polynomial */ \"../node_modules/qr.js/lib/Polynomial.js\");\n\nvar math = __webpack_require__(/*! ./math */ \"../node_modules/qr.js/lib/math.js\");\n\nvar QRMaskPattern = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n};\nvar QRUtil = {\n PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],\n G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0,\n G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0,\n G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1,\n getBCHTypeInfo: function getBCHTypeInfo(data) {\n var d = data << 10;\n\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);\n }\n\n return (data << 10 | d) ^ QRUtil.G15_MASK;\n },\n getBCHTypeNumber: function getBCHTypeNumber(data) {\n var d = data << 12;\n\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);\n }\n\n return data << 12 | d;\n },\n getBCHDigit: function getBCHDigit(data) {\n var digit = 0;\n\n while (data != 0) {\n digit++;\n data >>>= 1;\n }\n\n return digit;\n },\n getPatternPosition: function getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n getMask: function getMask(maskPattern, i, j) {\n switch (maskPattern) {\n case QRMaskPattern.PATTERN000:\n return (i + j) % 2 == 0;\n\n case QRMaskPattern.PATTERN001:\n return i % 2 == 0;\n\n case QRMaskPattern.PATTERN010:\n return j % 3 == 0;\n\n case QRMaskPattern.PATTERN011:\n return (i + j) % 3 == 0;\n\n case QRMaskPattern.PATTERN100:\n return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;\n\n case QRMaskPattern.PATTERN101:\n return i * j % 2 + i * j % 3 == 0;\n\n case QRMaskPattern.PATTERN110:\n return (i * j % 2 + i * j % 3) % 2 == 0;\n\n case QRMaskPattern.PATTERN111:\n return (i * j % 3 + (i + j) % 2) % 2 == 0;\n\n default:\n throw new Error(\"bad maskPattern:\" + maskPattern);\n }\n },\n getErrorCorrectPolynomial: function getErrorCorrectPolynomial(errorCorrectLength) {\n var a = new Polynomial([1], 0);\n\n for (var i = 0; i < errorCorrectLength; i++) {\n a = a.multiply(new Polynomial([1, math.gexp(i)], 0));\n }\n\n return a;\n },\n getLengthInBits: function getLengthInBits(mode, type) {\n if (1 <= type && type < 10) {\n // 1 - 9\n switch (mode) {\n case Mode.MODE_NUMBER:\n return 10;\n\n case Mode.MODE_ALPHA_NUM:\n return 9;\n\n case Mode.MODE_8BIT_BYTE:\n return 8;\n\n case Mode.MODE_KANJI:\n return 8;\n\n default:\n throw new Error(\"mode:\" + mode);\n }\n } else if (type < 27) {\n // 10 - 26\n switch (mode) {\n case Mode.MODE_NUMBER:\n return 12;\n\n case Mode.MODE_ALPHA_NUM:\n return 11;\n\n case Mode.MODE_8BIT_BYTE:\n return 16;\n\n case Mode.MODE_KANJI:\n return 10;\n\n default:\n throw new Error(\"mode:\" + mode);\n }\n } else if (type < 41) {\n // 27 - 40\n switch (mode) {\n case Mode.MODE_NUMBER:\n return 14;\n\n case Mode.MODE_ALPHA_NUM:\n return 13;\n\n case Mode.MODE_8BIT_BYTE:\n return 16;\n\n case Mode.MODE_KANJI:\n return 12;\n\n default:\n throw new Error(\"mode:\" + mode);\n }\n } else {\n throw new Error(\"type:\" + type);\n }\n },\n getLostPoint: function getLostPoint(qrCode) {\n var moduleCount = qrCode.getModuleCount();\n var lostPoint = 0; // LEVEL1\n\n for (var row = 0; row < moduleCount; row++) {\n for (var col = 0; col < moduleCount; col++) {\n var sameCount = 0;\n var dark = qrCode.isDark(row, col);\n\n for (var r = -1; r <= 1; r++) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c++) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount++;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n } // LEVEL2\n\n\n for (var row = 0; row < moduleCount - 1; row++) {\n for (var col = 0; col < moduleCount - 1; col++) {\n var count = 0;\n if (qrCode.isDark(row, col)) count++;\n if (qrCode.isDark(row + 1, col)) count++;\n if (qrCode.isDark(row, col + 1)) count++;\n if (qrCode.isDark(row + 1, col + 1)) count++;\n\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n } // LEVEL3\n\n\n for (var row = 0; row < moduleCount; row++) {\n for (var col = 0; col < moduleCount - 6; col++) {\n if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col++) {\n for (var row = 0; row < moduleCount - 6; row++) {\n if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n } // LEVEL4\n\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col++) {\n for (var row = 0; row < moduleCount; row++) {\n if (qrCode.isDark(row, col)) {\n darkCount++;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n};\nmodule.exports = QRUtil;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyLmpzL2xpYi91dGlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xci5qcy9saWIvdXRpbC5qcz8yZTY2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBNb2RlID0gcmVxdWlyZSgnLi9tb2RlJyk7XG52YXIgUG9seW5vbWlhbCA9IHJlcXVpcmUoJy4vUG9seW5vbWlhbCcpO1xudmFyIG1hdGggPSByZXF1aXJlKCcuL21hdGgnKTtcblxudmFyIFFSTWFza1BhdHRlcm4gPSB7XG5cdFBBVFRFUk4wMDAgOiAwLFxuXHRQQVRURVJOMDAxIDogMSxcblx0UEFUVEVSTjAxMCA6IDIsXG5cdFBBVFRFUk4wMTEgOiAzLFxuXHRQQVRURVJOMTAwIDogNCxcblx0UEFUVEVSTjEwMSA6IDUsXG5cdFBBVFRFUk4xMTAgOiA2LFxuXHRQQVRURVJOMTExIDogN1xufTtcblxudmFyIFFSVXRpbCA9IHtcblxuICAgIFBBVFRFUk5fUE9TSVRJT05fVEFCTEUgOiBbXG5cdCAgICBbXSxcblx0ICAgIFs2LCAxOF0sXG5cdCAgICBbNiwgMjJdLFxuXHQgICAgWzYsIDI2XSxcblx0ICAgIFs2LCAzMF0sXG5cdCAgICBbNiwgMzRdLFxuXHQgICAgWzYsIDIyLCAzOF0sXG5cdCAgICBbNiwgMjQsIDQyXSxcblx0ICAgIFs2LCAyNiwgNDZdLFxuXHQgICAgWzYsIDI4LCA1MF0sXG5cdCAgICBbNiwgMzAsIDU0XSxcdFx0XG5cdCAgICBbNiwgMzIsIDU4XSxcblx0ICAgIFs2LCAzNCwgNjJdLFxuXHQgICAgWzYsIDI2LCA0NiwgNjZdLFxuXHQgICAgWzYsIDI2LCA0OCwgNzBdLFxuXHQgICAgWzYsIDI2LCA1MCwgNzRdLFxuXHQgICAgWzYsIDMwLCA1NCwgNzhdLFxuXHQgICAgWzYsIDMwLCA1NiwgODJdLFxuXHQgICAgWzYsIDMwLCA1OCwgODZdLFxuXHQgICAgWzYsIDM0LCA2MiwgOTBdLFxuXHQgICAgWzYsIDI4LCA1MCwgNzIsIDk0XSxcblx0ICAgIFs2LCAyNiwgNTAsIDc0LCA5OF0sXG5cdCAgICBbNiwgMzAsIDU0LCA3OCwgMTAyXSxcblx0ICAgIFs2LCAyOCwgNTQsIDgwLCAxMDZdLFxuXHQgICAgWzYsIDMyLCA1OCwgODQsIDExMF0sXG5cdCAgICBbNiwgMzAsIDU4LCA4NiwgMTE0XSxcblx0ICAgIFs2LCAzNCwgNjIsIDkwLCAxMThdLFxuXHQgICAgWzYsIDI2LCA1MCwgNzQsIDk4LCAxMjJdLFxuXHQgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2XSxcblx0ICAgIFs2LCAyNiwgNTIsIDc4LCAxMDQsIDEzMF0sXG5cdCAgICBbNiwgMzAsIDU2LCA4MiwgMTA4LCAxMzRdLFxuXHQgICAgWzYsIDM0LCA2MCwgODYsIDExMiwgMTM4XSxcblx0ICAgIFs2LCAzMCwgNTgsIDg2LCAxMTQsIDE0Ml0sXG5cdCAgICBbNiwgMzQsIDYyLCA5MCwgMTE4LCAxNDZdLFxuXHQgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2LCAxNTBdLFxuXHQgICAgWzYsIDI0LCA1MCwgNzYsIDEwMiwgMTI4LCAxNTRdLFxuXHQgICAgWzYsIDI4LCA1NCwgODAsIDEwNiwgMTMyLCAxNThdLFxuXHQgICAgWzYsIDMyLCA1OCwgODQsIDExMCwgMTM2LCAxNjJdLFxuXHQgICAgWzYsIDI2LCA1NCwgODIsIDExMCwgMTM4LCAxNjZdLFxuXHQgICAgWzYsIDMwLCA1OCwgODYsIDExNCwgMTQyLCAxNzBdXG4gICAgXSxcblxuICAgIEcxNSA6ICgxIDw8IDEwKSB8ICgxIDw8IDgpIHwgKDEgPDwgNSkgfCAoMSA8PCA0KSB8ICgxIDw8IDIpIHwgKDEgPDwgMSkgfCAoMSA8PCAwKSxcbiAgICBHMTggOiAoMSA8PCAxMikgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMCkgfCAoMSA8PCA5KSB8ICgxIDw8IDgpIHwgKDEgPDwgNSkgfCAoMSA8PCAyKSB8ICgxIDw8IDApLFxuICAgIEcxNV9NQVNLIDogKDEgPDwgMTQpIHwgKDEgPDwgMTIpIHwgKDEgPDwgMTApXHR8ICgxIDw8IDQpIHwgKDEgPDwgMSksXG5cbiAgICBnZXRCQ0hUeXBlSW5mbyA6IGZ1bmN0aW9uKGRhdGEpIHtcblx0ICAgIHZhciBkID0gZGF0YSA8PCAxMDtcblx0ICAgIHdoaWxlIChRUlV0aWwuZ2V0QkNIRGlnaXQoZCkgLSBRUlV0aWwuZ2V0QkNIRGlnaXQoUVJVdGlsLkcxNSkgPj0gMCkge1xuXHRcdCAgICBkIF49IChRUlV0aWwuRzE1IDw8IChRUlV0aWwuZ2V0QkNIRGlnaXQoZCkgLSBRUlV0aWwuZ2V0QkNIRGlnaXQoUVJVdGlsLkcxNSkgKSApOyBcdFxuXHQgICAgfVxuXHQgICAgcmV0dXJuICggKGRhdGEgPDwgMTApIHwgZCkgXiBRUlV0aWwuRzE1X01BU0s7XG4gICAgfSxcblxuICAgIGdldEJDSFR5cGVOdW1iZXIgOiBmdW5jdGlvbihkYXRhKSB7XG5cdCAgICB2YXIgZCA9IGRhdGEgPDwgMTI7XG5cdCAgICB3aGlsZSAoUVJVdGlsLmdldEJDSERpZ2l0KGQpIC0gUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTgpID49IDApIHtcblx0XHQgICAgZCBePSAoUVJVdGlsLkcxOCA8PCAoUVJVdGlsLmdldEJDSERpZ2l0KGQpIC0gUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTgpICkgKTsgXHRcblx0ICAgIH1cblx0ICAgIHJldHVybiAoZGF0YSA8PCAxMikgfCBkO1xuICAgIH0sXG5cbiAgICBnZXRCQ0hEaWdpdCA6IGZ1bmN0aW9uKGRhdGEpIHtcblxuXHQgICAgdmFyIGRpZ2l0ID0gMDtcblxuXHQgICAgd2hpbGUgKGRhdGEgIT0gMCkge1xuXHRcdCAgICBkaWdpdCsrO1xuXHRcdCAgICBkYXRhID4+Pj0gMTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGRpZ2l0O1xuICAgIH0sXG5cbiAgICBnZXRQYXR0ZXJuUG9zaXRpb24gOiBmdW5jdGlvbih0eXBlTnVtYmVyKSB7XG5cdCAgICByZXR1cm4gUVJVdGlsLlBBVFRFUk5fUE9TSVRJT05fVEFCTEVbdHlwZU51bWJlciAtIDFdO1xuICAgIH0sXG5cbiAgICBnZXRNYXNrIDogZnVuY3Rpb24obWFza1BhdHRlcm4sIGksIGopIHtcblx0ICAgIFxuXHQgICAgc3dpdGNoIChtYXNrUGF0dGVybikge1xuXHRcdCAgICBcblx0ICAgIGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMDAwIDogcmV0dXJuIChpICsgaikgJSAyID09IDA7XG5cdCAgICBjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjAwMSA6IHJldHVybiBpICUgMiA9PSAwO1xuXHQgICAgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4wMTAgOiByZXR1cm4gaiAlIDMgPT0gMDtcblx0ICAgIGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMDExIDogcmV0dXJuIChpICsgaikgJSAzID09IDA7XG5cdCAgICBjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjEwMCA6IHJldHVybiAoTWF0aC5mbG9vcihpIC8gMikgKyBNYXRoLmZsb29yKGogLyAzKSApICUgMiA9PSAwO1xuXHQgICAgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4xMDEgOiByZXR1cm4gKGkgKiBqKSAlIDIgKyAoaSAqIGopICUgMyA9PSAwO1xuXHQgICAgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4xMTAgOiByZXR1cm4gKCAoaSAqIGopICUgMiArIChpICogaikgJSAzKSAlIDIgPT0gMDtcblx0ICAgIGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMTExIDogcmV0dXJuICggKGkgKiBqKSAlIDMgKyAoaSArIGopICUgMikgJSAyID09IDA7XG5cblx0ICAgIGRlZmF1bHQgOlxuXHRcdCAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbWFza1BhdHRlcm46XCIgKyBtYXNrUGF0dGVybik7XG5cdCAgICB9XG4gICAgfSxcblxuICAgIGdldEVycm9yQ29ycmVjdFBvbHlub21pYWwgOiBmdW5jdGlvbihlcnJvckNvcnJlY3RMZW5ndGgpIHtcblxuXHQgICAgdmFyIGEgPSBuZXcgUG9seW5vbWlhbChbMV0sIDApO1xuXG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yQ29ycmVjdExlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIGEgPSBhLm11bHRpcGx5KG5ldyBQb2x5bm9taWFsKFsxLCBtYXRoLmdleHAoaSldLCAwKSApO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gYTtcbiAgICB9LFxuXG4gICAgZ2V0TGVuZ3RoSW5CaXRzIDogZnVuY3Rpb24obW9kZSwgdHlwZSkge1xuXG5cdCAgICBpZiAoMSA8PSB0eXBlICYmIHR5cGUgPCAxMCkge1xuXG5cdFx0ICAgIC8vIDEgLSA5XG5cblx0XHQgICAgc3dpdGNoKG1vZGUpIHtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfTlVNQkVSIFx0OiByZXR1cm4gMTA7XG5cdFx0ICAgIGNhc2UgTW9kZS5NT0RFX0FMUEhBX05VTSBcdDogcmV0dXJuIDk7XG5cdFx0ICAgIGNhc2UgTW9kZS5NT0RFXzhCSVRfQllURVx0OiByZXR1cm4gODtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfS0FOSkkgIFx0OiByZXR1cm4gODtcblx0XHQgICAgZGVmYXVsdCA6XG5cdFx0XHQgICAgdGhyb3cgbmV3IEVycm9yKFwibW9kZTpcIiArIG1vZGUpO1xuXHRcdCAgICB9XG5cblx0ICAgIH0gZWxzZSBpZiAodHlwZSA8IDI3KSB7XG5cblx0XHQgICAgLy8gMTAgLSAyNlxuXG5cdFx0ICAgIHN3aXRjaChtb2RlKSB7XG5cdFx0ICAgIGNhc2UgTW9kZS5NT0RFX05VTUJFUiBcdDogcmV0dXJuIDEyO1xuXHRcdCAgICBjYXNlIE1vZGUuTU9ERV9BTFBIQV9OVU0gXHQ6IHJldHVybiAxMTtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfOEJJVF9CWVRFXHQ6IHJldHVybiAxNjtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfS0FOSkkgIFx0OiByZXR1cm4gMTA7XG5cdFx0ICAgIGRlZmF1bHQgOlxuXHRcdFx0ICAgIHRocm93IG5ldyBFcnJvcihcIm1vZGU6XCIgKyBtb2RlKTtcblx0XHQgICAgfVxuXG5cdCAgICB9IGVsc2UgaWYgKHR5cGUgPCA0MSkge1xuXG5cdFx0ICAgIC8vIDI3IC0gNDBcblxuXHRcdCAgICBzd2l0Y2gobW9kZSkge1xuXHRcdCAgICBjYXNlIE1vZGUuTU9ERV9OVU1CRVIgXHQ6IHJldHVybiAxNDtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfQUxQSEFfTlVNXHQ6IHJldHVybiAxMztcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfOEJJVF9CWVRFXHQ6IHJldHVybiAxNjtcblx0XHQgICAgY2FzZSBNb2RlLk1PREVfS0FOSkkgIFx0OiByZXR1cm4gMTI7XG5cdFx0ICAgIGRlZmF1bHQgOlxuXHRcdFx0ICAgIHRocm93IG5ldyBFcnJvcihcIm1vZGU6XCIgKyBtb2RlKTtcblx0XHQgICAgfVxuXG5cdCAgICB9IGVsc2Uge1xuXHRcdCAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlOlwiICsgdHlwZSk7XG5cdCAgICB9XG4gICAgfSxcblxuICAgIGdldExvc3RQb2ludCA6IGZ1bmN0aW9uKHFyQ29kZSkge1xuXHQgICAgXG5cdCAgICB2YXIgbW9kdWxlQ291bnQgPSBxckNvZGUuZ2V0TW9kdWxlQ291bnQoKTtcblx0ICAgIFxuXHQgICAgdmFyIGxvc3RQb2ludCA9IDA7XG5cdCAgICBcblx0ICAgIC8vIExFVkVMMVxuXHQgICAgXG5cdCAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtb2R1bGVDb3VudDsgcm93KyspIHtcblxuXHRcdCAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBtb2R1bGVDb3VudDsgY29sKyspIHtcblxuXHRcdFx0ICAgIHZhciBzYW1lQ291bnQgPSAwO1xuXHRcdFx0ICAgIHZhciBkYXJrID0gcXJDb2RlLmlzRGFyayhyb3csIGNvbCk7XG5cblx0XHRcdFx0Zm9yICh2YXIgciA9IC0xOyByIDw9IDE7IHIrKykge1xuXG5cdFx0XHRcdCAgICBpZiAocm93ICsgciA8IDAgfHwgbW9kdWxlQ291bnQgPD0gcm93ICsgcikge1xuXHRcdFx0XHRcdCAgICBjb250aW51ZTtcblx0XHRcdFx0ICAgIH1cblxuXHRcdFx0XHQgICAgZm9yICh2YXIgYyA9IC0xOyBjIDw9IDE7IGMrKykge1xuXG5cdFx0XHRcdFx0ICAgIGlmIChjb2wgKyBjIDwgMCB8fCBtb2R1bGVDb3VudCA8PSBjb2wgKyBjKSB7XG5cdFx0XHRcdFx0XHQgICAgY29udGludWU7XG5cdFx0XHRcdFx0ICAgIH1cblxuXHRcdFx0XHRcdCAgICBpZiAociA9PSAwICYmIGMgPT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgIGNvbnRpbnVlO1xuXHRcdFx0XHRcdCAgICB9XG5cblx0XHRcdFx0XHQgICAgaWYgKGRhcmsgPT0gcXJDb2RlLmlzRGFyayhyb3cgKyByLCBjb2wgKyBjKSApIHtcblx0XHRcdFx0XHRcdCAgICBzYW1lQ291bnQrKztcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0ICAgIH1cblxuXHRcdFx0ICAgIGlmIChzYW1lQ291bnQgPiA1KSB7XG5cdFx0XHRcdCAgICBsb3N0UG9pbnQgKz0gKDMgKyBzYW1lQ291bnQgLSA1KTtcblx0XHRcdCAgICB9XG5cdFx0ICAgIH1cblx0ICAgIH1cblxuXHQgICAgLy8gTEVWRUwyXG5cblx0ICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG1vZHVsZUNvdW50IC0gMTsgcm93KyspIHtcblx0XHQgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbW9kdWxlQ291bnQgLSAxOyBjb2wrKykge1xuXHRcdFx0ICAgIHZhciBjb3VudCA9IDA7XG5cdFx0XHQgICAgaWYgKHFyQ29kZS5pc0Rhcmsocm93LCAgICAgY29sICAgICkgKSBjb3VudCsrO1xuXHRcdFx0ICAgIGlmIChxckNvZGUuaXNEYXJrKHJvdyArIDEsIGNvbCAgICApICkgY291bnQrKztcblx0XHRcdCAgICBpZiAocXJDb2RlLmlzRGFyayhyb3csICAgICBjb2wgKyAxKSApIGNvdW50Kys7XG5cdFx0XHQgICAgaWYgKHFyQ29kZS5pc0Rhcmsocm93ICsgMSwgY29sICsgMSkgKSBjb3VudCsrO1xuXHRcdFx0ICAgIGlmIChjb3VudCA9PSAwIHx8IGNvdW50ID09IDQpIHtcblx0XHRcdFx0ICAgIGxvc3RQb2ludCArPSAzO1xuXHRcdFx0ICAgIH1cblx0XHQgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBMRVZFTDNcblxuXHQgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9kdWxlQ291bnQ7IHJvdysrKSB7XG5cdFx0ICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50IC0gNjsgY29sKyspIHtcblx0XHRcdCAgICBpZiAocXJDb2RlLmlzRGFyayhyb3csIGNvbClcblx0XHRcdFx0XHQgICAgJiYgIXFyQ29kZS5pc0Rhcmsocm93LCBjb2wgKyAxKVxuXHRcdFx0XHRcdCAgICAmJiAgcXJDb2RlLmlzRGFyayhyb3csIGNvbCArIDIpXG5cdFx0XHRcdFx0ICAgICYmICBxckNvZGUuaXNEYXJrKHJvdywgY29sICsgMylcblx0XHRcdFx0XHQgICAgJiYgIHFyQ29kZS5pc0Rhcmsocm93LCBjb2wgKyA0KVxuXHRcdFx0XHRcdCAgICAmJiAhcXJDb2RlLmlzRGFyayhyb3csIGNvbCArIDUpXG5cdFx0XHRcdFx0ICAgICYmICBxckNvZGUuaXNEYXJrKHJvdywgY29sICsgNikgKSB7XG5cdFx0XHRcdCAgICBsb3N0UG9pbnQgKz0gNDA7XG5cdFx0XHQgICAgfVxuXHRcdCAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50OyBjb2wrKykge1xuXHRcdCAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtb2R1bGVDb3VudCAtIDY7IHJvdysrKSB7XG5cdFx0XHQgICAgaWYgKHFyQ29kZS5pc0Rhcmsocm93LCBjb2wpXG5cdFx0XHRcdFx0ICAgICYmICFxckNvZGUuaXNEYXJrKHJvdyArIDEsIGNvbClcblx0XHRcdFx0XHQgICAgJiYgIHFyQ29kZS5pc0Rhcmsocm93ICsgMiwgY29sKVxuXHRcdFx0XHRcdCAgICAmJiAgcXJDb2RlLmlzRGFyayhyb3cgKyAzLCBjb2wpXG5cdFx0XHRcdFx0ICAgICYmICBxckNvZGUuaXNEYXJrKHJvdyArIDQsIGNvbClcblx0XHRcdFx0XHQgICAgJiYgIXFyQ29kZS5pc0Rhcmsocm93ICsgNSwgY29sKVxuXHRcdFx0XHRcdCAgICAmJiAgcXJDb2RlLmlzRGFyayhyb3cgKyA2LCBjb2wpICkge1xuXHRcdFx0XHQgICAgbG9zdFBvaW50ICs9IDQwO1xuXHRcdFx0ICAgIH1cblx0XHQgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBMRVZFTDRcblx0ICAgIFxuXHQgICAgdmFyIGRhcmtDb3VudCA9IDA7XG5cblx0ICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50OyBjb2wrKykge1xuXHRcdCAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtb2R1bGVDb3VudDsgcm93KyspIHtcblx0XHRcdCAgICBpZiAocXJDb2RlLmlzRGFyayhyb3csIGNvbCkgKSB7XG5cdFx0XHRcdCAgICBkYXJrQ291bnQrKztcblx0XHRcdCAgICB9XG5cdFx0ICAgIH1cblx0ICAgIH1cblx0ICAgIFxuXHQgICAgdmFyIHJhdGlvID0gTWF0aC5hYnMoMTAwICogZGFya0NvdW50IC8gbW9kdWxlQ291bnQgLyBtb2R1bGVDb3VudCAtIDUwKSAvIDU7XG5cdCAgICBsb3N0UG9pbnQgKz0gcmF0aW8gKiAxMDtcblxuXHQgICAgcmV0dXJuIGxvc3RQb2ludDtcdFx0XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRUlV0aWw7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFFQTtBQTJDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdERBO0FBeURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE5REE7QUFpRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUVBO0FBNkVBO0FBQ0E7QUE5RUE7QUFpRkE7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQW5GQTtBQW1HQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0dBO0FBOEdBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBSkE7QUFlQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBSkE7QUFlQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBSkE7QUFjQTtBQUNBO0FBekpBO0FBNEpBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhDQTtBQUNBO0FBQ0E7QUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBdkRBO0FBQ0E7QUFDQTtBQTBEQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBckZBO0FBQ0E7QUFDQTtBQXdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBcFFBO0FBdVFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/qr.js/lib/util.js\n"); - -/***/ }), - -/***/ "../node_modules/qrcode.react/lib/index.js": -/*!*************************************************!*\ - !*** ../node_modules/qrcode.react/lib/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar React = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar PropTypes = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\"); // qr.js doesn't handle error level of zero (M) so we need to do it right,\n// thus the deep require.\n\n\nvar QRCodeImpl = __webpack_require__(/*! qr.js/lib/QRCode */ \"../node_modules/qr.js/lib/QRCode.js\");\n\nvar ErrorCorrectLevel = __webpack_require__(/*! qr.js/lib/ErrorCorrectLevel */ \"../node_modules/qr.js/lib/ErrorCorrectLevel.js\");\n\nfunction getBackingStorePixelRatio(ctx) {\n return (// $FlowFixMe\n ctx.webkitBackingStorePixelRatio || // $FlowFixMe\n ctx.mozBackingStorePixelRatio || // $FlowFixMe\n ctx.msBackingStorePixelRatio || // $FlowFixMe\n ctx.oBackingStorePixelRatio || // $FlowFixMe\n ctx.backingStorePixelRatio || 1\n );\n} // Convert from UTF-16, forcing the use of byte-mode encoding in our QR Code.\n// This allows us to encode Hanji, Kanji, emoji, etc. Ideally we'd do more\n// detection and not resort to byte-mode if possible, but we're trading off\n// a smaller library for a smaller amount of data we can potentially encode.\n// Based on http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/\n\n\nfunction convertStr(str) {\n var out = '';\n\n for (var i = 0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n\n if (charcode < 0x0080) {\n out += String.fromCharCode(charcode);\n } else if (charcode < 0x0800) {\n out += String.fromCharCode(0xc0 | charcode >> 6);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else if (charcode < 0xd800 || charcode >= 0xe000) {\n out += String.fromCharCode(0xe0 | charcode >> 12);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else {\n // This is a surrogate pair, so we'll reconsitute the pieces and work\n // from that\n i++;\n charcode = 0x10000 + ((charcode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff);\n out += String.fromCharCode(0xf0 | charcode >> 18);\n out += String.fromCharCode(0x80 | charcode >> 12 & 0x3f);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n }\n }\n\n return out;\n}\n\nvar DEFAULT_PROPS = {\n size: 128,\n level: 'L',\n bgColor: '#FFFFFF',\n fgColor: '#000000'\n};\nvar PROP_TYPES = {\n value: PropTypes.string.isRequired,\n size: PropTypes.number,\n level: PropTypes.oneOf(['L', 'M', 'Q', 'H']),\n bgColor: PropTypes.string,\n fgColor: PropTypes.string\n};\n\nvar QRCodeCanvas = /*#__PURE__*/function (_React$Component) {\n _inherits(QRCodeCanvas, _React$Component);\n\n function QRCodeCanvas() {\n var _ref;\n\n var _temp, _this;\n\n _classCallCheck(this, QRCodeCanvas);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _possibleConstructorReturn(_this, (_temp = _this = _possibleConstructorReturn(this, (_ref = QRCodeCanvas.__proto__ || Object.getPrototypeOf(QRCodeCanvas)).call.apply(_ref, [this].concat(args))), Object.defineProperty(_assertThisInitialized(_this), \"_canvas\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: void 0\n }), _temp));\n }\n\n _createClass(QRCodeCanvas, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n var _this2 = this;\n\n return Object.keys(QRCodeCanvas.propTypes).some(function (k) {\n return _this2.props[k] !== nextProps[k];\n });\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.update();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: \"update\",\n value: function update() {\n var _props = this.props,\n value = _props.value,\n size = _props.size,\n level = _props.level,\n bgColor = _props.bgColor,\n fgColor = _props.fgColor; // We'll use type===-1 to force QRCode to automatically pick the best type\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n\n if (this._canvas != null) {\n var canvas = this._canvas;\n var ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return;\n }\n\n var cells = qrcode.modules;\n\n if (cells === null) {\n return;\n }\n\n var tileW = size / cells.length;\n var tileH = size / cells.length;\n var scale = (window.devicePixelRatio || 1) / getBackingStorePixelRatio(ctx);\n canvas.height = canvas.width = size * scale;\n ctx.scale(scale, scale);\n cells.forEach(function (row, rdx) {\n row.forEach(function (cell, cdx) {\n ctx && (ctx.fillStyle = cell ? fgColor : bgColor);\n var w = Math.ceil((cdx + 1) * tileW) - Math.floor(cdx * tileW);\n var h = Math.ceil((rdx + 1) * tileH) - Math.floor(rdx * tileH);\n ctx && ctx.fillRect(Math.round(cdx * tileW), Math.round(rdx * tileH), w, h);\n });\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n var _props2 = this.props,\n value = _props2.value,\n size = _props2.size,\n level = _props2.level,\n bgColor = _props2.bgColor,\n fgColor = _props2.fgColor,\n style = _props2.style,\n otherProps = _objectWithoutProperties(_props2, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"style\"]);\n\n var canvasStyle = _extends({\n height: size,\n width: size\n }, style);\n\n return React.createElement(\"canvas\", _extends({\n style: canvasStyle,\n height: size,\n width: size,\n ref: function ref(_ref2) {\n return _this3._canvas = _ref2;\n }\n }, otherProps));\n }\n }]);\n\n return QRCodeCanvas;\n}(React.Component);\n\nObject.defineProperty(QRCodeCanvas, \"defaultProps\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: DEFAULT_PROPS\n});\nObject.defineProperty(QRCodeCanvas, \"propTypes\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: PROP_TYPES\n});\n\nvar QRCodeSVG = /*#__PURE__*/function (_React$Component2) {\n _inherits(QRCodeSVG, _React$Component2);\n\n function QRCodeSVG() {\n _classCallCheck(this, QRCodeSVG);\n\n return _possibleConstructorReturn(this, (QRCodeSVG.__proto__ || Object.getPrototypeOf(QRCodeSVG)).apply(this, arguments));\n }\n\n _createClass(QRCodeSVG, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n var _this4 = this;\n\n return Object.keys(QRCodeCanvas.propTypes).some(function (k) {\n return _this4.props[k] !== nextProps[k];\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _props3 = this.props,\n value = _props3.value,\n size = _props3.size,\n level = _props3.level,\n bgColor = _props3.bgColor,\n fgColor = _props3.fgColor,\n otherProps = _objectWithoutProperties(_props3, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\"]); // We'll use type===-1 to force QRCode to automatically pick the best type\n\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n var cells = qrcode.modules;\n\n if (cells === null) {\n return;\n } // Drawing strategy: instead of a rect per module, we're going to create a\n // single path for the dark modules and layer that on top of a light rect,\n // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\n // way faster than DOM ops.\n // For level 1, 441 nodes -> 2\n // For level 40, 31329 -> 2\n\n\n var ops = [];\n cells.forEach(function (row, y) {\n var lastIsDark = false;\n var start = null;\n row.forEach(function (cell, x) {\n if (!cell && start !== null) {\n // M0 0h7v1H0z injects the space with the move and dropd the comma,\n // saving a char per operation\n ops.push(\"M\".concat(start, \" \").concat(y, \"h\").concat(x - start, \"v1H\").concat(start, \"z\"));\n start = null;\n return;\n } // end of row, clean up or skip\n\n\n if (x === row.length - 1) {\n if (!cell) {\n // We would have closed the op above already so this can only mean\n // 2+ light modules in a row.\n return;\n }\n\n if (start === null) {\n // Just a single dark module.\n ops.push(\"M\".concat(x, \",\").concat(y, \" h1v1H\").concat(x, \"z\"));\n } else {\n // Otherwise finish the current line.\n ops.push(\"M\".concat(start, \",\").concat(y, \" h\").concat(x + 1 - start, \"v1H\").concat(start, \"z\"));\n }\n\n return;\n }\n\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return React.createElement(\"svg\", _extends({\n shapeRendering: \"crispEdges\",\n height: size,\n width: size,\n viewBox: \"0 0 \".concat(cells.length, \" \").concat(cells.length)\n }, otherProps), React.createElement(\"path\", {\n fill: bgColor,\n d: \"M0,0 h\".concat(cells.length, \"v\").concat(cells.length, \"H0z\")\n }), React.createElement(\"path\", {\n fill: fgColor,\n d: ops.join('')\n }));\n }\n }]);\n\n return QRCodeSVG;\n}(React.Component);\n\nObject.defineProperty(QRCodeSVG, \"defaultProps\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: DEFAULT_PROPS\n});\nObject.defineProperty(QRCodeSVG, \"propTypes\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: PROP_TYPES\n});\n\nvar QRCode = function QRCode(props) {\n var renderAs = props.renderAs,\n otherProps = _objectWithoutProperties(props, [\"renderAs\"]);\n\n var Component = renderAs === 'svg' ? QRCodeSVG : QRCodeCanvas;\n return React.createElement(Component, otherProps);\n};\n\nQRCode.defaultProps = _extends({\n renderAs: 'canvas'\n}, DEFAULT_PROPS);\nmodule.exports = QRCode;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3FyY29kZS5yZWFjdC9saWIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3FyY29kZS5yZWFjdC9saWIvaW5kZXguanM/MzMzZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBQcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7IC8vIHFyLmpzIGRvZXNuJ3QgaGFuZGxlIGVycm9yIGxldmVsIG9mIHplcm8gKE0pIHNvIHdlIG5lZWQgdG8gZG8gaXQgcmlnaHQsXG4vLyB0aHVzIHRoZSBkZWVwIHJlcXVpcmUuXG5cblxudmFyIFFSQ29kZUltcGwgPSByZXF1aXJlKCdxci5qcy9saWIvUVJDb2RlJyk7XG5cbnZhciBFcnJvckNvcnJlY3RMZXZlbCA9IHJlcXVpcmUoJ3FyLmpzL2xpYi9FcnJvckNvcnJlY3RMZXZlbCcpO1xuXG5mdW5jdGlvbiBnZXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvKGN0eCkge1xuICByZXR1cm4gKC8vICRGbG93Rml4TWVcbiAgICBjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCAvLyAkRmxvd0ZpeE1lXG4gICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgLy8gJEZsb3dGaXhNZVxuICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgLy8gJEZsb3dGaXhNZVxuICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCAvLyAkRmxvd0ZpeE1lXG4gICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgMVxuICApO1xufSAvLyBDb252ZXJ0IGZyb20gVVRGLTE2LCBmb3JjaW5nIHRoZSB1c2Ugb2YgYnl0ZS1tb2RlIGVuY29kaW5nIGluIG91ciBRUiBDb2RlLlxuLy8gVGhpcyBhbGxvd3MgdXMgdG8gZW5jb2RlIEhhbmppLCBLYW5qaSwgZW1vamksIGV0Yy4gSWRlYWxseSB3ZSdkIGRvIG1vcmVcbi8vIGRldGVjdGlvbiBhbmQgbm90IHJlc29ydCB0byBieXRlLW1vZGUgaWYgcG9zc2libGUsIGJ1dCB3ZSdyZSB0cmFkaW5nIG9mZlxuLy8gYSBzbWFsbGVyIGxpYnJhcnkgZm9yIGEgc21hbGxlciBhbW91bnQgb2YgZGF0YSB3ZSBjYW4gcG90ZW50aWFsbHkgZW5jb2RlLlxuLy8gQmFzZWQgb24gaHR0cDovL2pvbmlzYWxvbmVuLmNvbS8yMDEyL2Zyb20tdXRmLTE2LXRvLXV0Zi04LWluLWphdmFzY3JpcHQvXG5cblxuZnVuY3Rpb24gY29udmVydFN0cihzdHIpIHtcbiAgdmFyIG91dCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoYXJjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICBpZiAoY2hhcmNvZGUgPCAweDAwODApIHtcbiAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJjb2RlKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJjb2RlIDwgMHgwODAwKSB7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgY2hhcmNvZGUgPj4gNik7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgY2hhcmNvZGUgJiAweDNmKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJjb2RlIDwgMHhkODAwIHx8IGNoYXJjb2RlID49IDB4ZTAwMCkge1xuICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhlMCB8IGNoYXJjb2RlID4+IDEyKTtcbiAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCBjaGFyY29kZSA+PiA2ICYgMHgzZik7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgY2hhcmNvZGUgJiAweDNmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhIHN1cnJvZ2F0ZSBwYWlyLCBzbyB3ZSdsbCByZWNvbnNpdHV0ZSB0aGUgcGllY2VzIGFuZCB3b3JrXG4gICAgICAvLyBmcm9tIHRoYXRcbiAgICAgIGkrKztcbiAgICAgIGNoYXJjb2RlID0gMHgxMDAwMCArICgoY2hhcmNvZGUgJiAweDNmZikgPDwgMTAgfCBzdHIuY2hhckNvZGVBdChpKSAmIDB4M2ZmKTtcbiAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCBjaGFyY29kZSA+PiAxOCk7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgY2hhcmNvZGUgPj4gMTIgJiAweDNmKTtcbiAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCBjaGFyY29kZSA+PiA2ICYgMHgzZik7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgY2hhcmNvZGUgJiAweDNmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG52YXIgREVGQVVMVF9QUk9QUyA9IHtcbiAgc2l6ZTogMTI4LFxuICBsZXZlbDogJ0wnLFxuICBiZ0NvbG9yOiAnI0ZGRkZGRicsXG4gIGZnQ29sb3I6ICcjMDAwMDAwJ1xufTtcbnZhciBQUk9QX1RZUEVTID0ge1xuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsZXZlbDogUHJvcFR5cGVzLm9uZU9mKFsnTCcsICdNJywgJ1EnLCAnSCddKSxcbiAgYmdDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZmdDb2xvcjogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudmFyIFFSQ29kZUNhbnZhcyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUVJDb2RlQ2FudmFzLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBRUkNvZGVDYW52YXMoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFFSQ29kZUNhbnZhcyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCAoX3RlbXAgPSBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gUVJDb2RlQ2FudmFzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUVJDb2RlQ2FudmFzKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfY2FudmFzXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICB9KSwgX3RlbXApKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhRUkNvZGVDYW52YXMsIFt7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKFFSQ29kZUNhbnZhcy5wcm9wVHlwZXMpLnNvbWUoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wc1trXSAhPT0gbmV4dFByb3BzW2tdO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB2YWx1ZSA9IF9wcm9wcy52YWx1ZSxcbiAgICAgICAgICBzaXplID0gX3Byb3BzLnNpemUsXG4gICAgICAgICAgbGV2ZWwgPSBfcHJvcHMubGV2ZWwsXG4gICAgICAgICAgYmdDb2xvciA9IF9wcm9wcy5iZ0NvbG9yLFxuICAgICAgICAgIGZnQ29sb3IgPSBfcHJvcHMuZmdDb2xvcjsgLy8gV2UnbGwgdXNlIHR5cGU9PT0tMSB0byBmb3JjZSBRUkNvZGUgdG8gYXV0b21hdGljYWxseSBwaWNrIHRoZSBiZXN0IHR5cGVcblxuICAgICAgdmFyIHFyY29kZSA9IG5ldyBRUkNvZGVJbXBsKC0xLCBFcnJvckNvcnJlY3RMZXZlbFtsZXZlbF0pO1xuICAgICAgcXJjb2RlLmFkZERhdGEoY29udmVydFN0cih2YWx1ZSkpO1xuICAgICAgcXJjb2RlLm1ha2UoKTtcblxuICAgICAgaWYgKHRoaXMuX2NhbnZhcyAhPSBudWxsKSB7XG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjZWxscyA9IHFyY29kZS5tb2R1bGVzO1xuXG4gICAgICAgIGlmIChjZWxscyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0aWxlVyA9IHNpemUgLyBjZWxscy5sZW5ndGg7XG4gICAgICAgIHZhciB0aWxlSCA9IHNpemUgLyBjZWxscy5sZW5ndGg7XG4gICAgICAgIHZhciBzY2FsZSA9ICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvIGdldEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8oY3R4KTtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGNhbnZhcy53aWR0aCA9IHNpemUgKiBzY2FsZTtcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgIGNlbGxzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgcmR4KSB7XG4gICAgICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwsIGNkeCkge1xuICAgICAgICAgICAgY3R4ICYmIChjdHguZmlsbFN0eWxlID0gY2VsbCA/IGZnQ29sb3IgOiBiZ0NvbG9yKTtcbiAgICAgICAgICAgIHZhciB3ID0gTWF0aC5jZWlsKChjZHggKyAxKSAqIHRpbGVXKSAtIE1hdGguZmxvb3IoY2R4ICogdGlsZVcpO1xuICAgICAgICAgICAgdmFyIGggPSBNYXRoLmNlaWwoKHJkeCArIDEpICogdGlsZUgpIC0gTWF0aC5mbG9vcihyZHggKiB0aWxlSCk7XG4gICAgICAgICAgICBjdHggJiYgY3R4LmZpbGxSZWN0KE1hdGgucm91bmQoY2R4ICogdGlsZVcpLCBNYXRoLnJvdW5kKHJkeCAqIHRpbGVIKSwgdywgaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB2YWx1ZSA9IF9wcm9wczIudmFsdWUsXG4gICAgICAgICAgc2l6ZSA9IF9wcm9wczIuc2l6ZSxcbiAgICAgICAgICBsZXZlbCA9IF9wcm9wczIubGV2ZWwsXG4gICAgICAgICAgYmdDb2xvciA9IF9wcm9wczIuYmdDb2xvcixcbiAgICAgICAgICBmZ0NvbG9yID0gX3Byb3BzMi5mZ0NvbG9yLFxuICAgICAgICAgIHN0eWxlID0gX3Byb3BzMi5zdHlsZSxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczIsIFtcInZhbHVlXCIsIFwic2l6ZVwiLCBcImxldmVsXCIsIFwiYmdDb2xvclwiLCBcImZnQ29sb3JcIiwgXCJzdHlsZVwiXSk7XG5cbiAgICAgIHZhciBjYW52YXNTdHlsZSA9IF9leHRlbmRzKHtcbiAgICAgICAgaGVpZ2h0OiBzaXplLFxuICAgICAgICB3aWR0aDogc2l6ZVxuICAgICAgfSwgc3R5bGUpO1xuXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBjYW52YXNTdHlsZSxcbiAgICAgICAgaGVpZ2h0OiBzaXplLFxuICAgICAgICB3aWR0aDogc2l6ZSxcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZjIpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLl9jYW52YXMgPSBfcmVmMjtcbiAgICAgICAgfVxuICAgICAgfSwgb3RoZXJQcm9wcykpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBRUkNvZGVDYW52YXM7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShRUkNvZGVDYW52YXMsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogdHJ1ZSxcbiAgdmFsdWU6IERFRkFVTFRfUFJPUFNcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFSQ29kZUNhbnZhcywgXCJwcm9wVHlwZXNcIiwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiB0cnVlLFxuICB2YWx1ZTogUFJPUF9UWVBFU1xufSk7XG5cbnZhciBRUkNvZGVTVkcgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhRUkNvZGVTVkcsIF9SZWFjdCRDb21wb25lbnQyKTtcblxuICBmdW5jdGlvbiBRUkNvZGVTVkcoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFFSQ29kZVNWRyk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFFSQ29kZVNWRy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFFSQ29kZVNWRykpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFFSQ29kZVNWRywgW3tcbiAgICBrZXk6IFwic2hvdWxkQ29tcG9uZW50VXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoUVJDb2RlQ2FudmFzLnByb3BUeXBlcykuc29tZShmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gX3RoaXM0LnByb3BzW2tdICE9PSBuZXh0UHJvcHNba107XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB2YWx1ZSA9IF9wcm9wczMudmFsdWUsXG4gICAgICAgICAgc2l6ZSA9IF9wcm9wczMuc2l6ZSxcbiAgICAgICAgICBsZXZlbCA9IF9wcm9wczMubGV2ZWwsXG4gICAgICAgICAgYmdDb2xvciA9IF9wcm9wczMuYmdDb2xvcixcbiAgICAgICAgICBmZ0NvbG9yID0gX3Byb3BzMy5mZ0NvbG9yLFxuICAgICAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzMywgW1widmFsdWVcIiwgXCJzaXplXCIsIFwibGV2ZWxcIiwgXCJiZ0NvbG9yXCIsIFwiZmdDb2xvclwiXSk7IC8vIFdlJ2xsIHVzZSB0eXBlPT09LTEgdG8gZm9yY2UgUVJDb2RlIHRvIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgYmVzdCB0eXBlXG5cblxuICAgICAgdmFyIHFyY29kZSA9IG5ldyBRUkNvZGVJbXBsKC0xLCBFcnJvckNvcnJlY3RMZXZlbFtsZXZlbF0pO1xuICAgICAgcXJjb2RlLmFkZERhdGEoY29udmVydFN0cih2YWx1ZSkpO1xuICAgICAgcXJjb2RlLm1ha2UoKTtcbiAgICAgIHZhciBjZWxscyA9IHFyY29kZS5tb2R1bGVzO1xuXG4gICAgICBpZiAoY2VsbHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEcmF3aW5nIHN0cmF0ZWd5OiBpbnN0ZWFkIG9mIGEgcmVjdCBwZXIgbW9kdWxlLCB3ZSdyZSBnb2luZyB0byBjcmVhdGUgYVxuICAgICAgLy8gc2luZ2xlIHBhdGggZm9yIHRoZSBkYXJrIG1vZHVsZXMgYW5kIGxheWVyIHRoYXQgb24gdG9wIG9mIGEgbGlnaHQgcmVjdCxcbiAgICAgIC8vIGZvciBhIHRvdGFsIG9mIDIgRE9NIG5vZGVzLiBXZSBwYXkgYSBiaXQgbW9yZSBpbiBzdHJpbmcgY29uY2F0IGJ1dCB0aGF0J3NcbiAgICAgIC8vIHdheSBmYXN0ZXIgdGhhbiBET00gb3BzLlxuICAgICAgLy8gRm9yIGxldmVsIDEsIDQ0MSBub2RlcyAtPiAyXG4gICAgICAvLyBGb3IgbGV2ZWwgNDAsIDMxMzI5IC0+IDJcblxuXG4gICAgICB2YXIgb3BzID0gW107XG4gICAgICBjZWxscy5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIHkpIHtcbiAgICAgICAgdmFyIGxhc3RJc0RhcmsgPSBmYWxzZTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbnVsbDtcbiAgICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwsIHgpIHtcbiAgICAgICAgICBpZiAoIWNlbGwgJiYgc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIE0wIDBoN3YxSDB6IGluamVjdHMgdGhlIHNwYWNlIHdpdGggdGhlIG1vdmUgYW5kIGRyb3BkIHRoZSBjb21tYSxcbiAgICAgICAgICAgIC8vIHNhdmluZyBhIGNoYXIgcGVyIG9wZXJhdGlvblxuICAgICAgICAgICAgb3BzLnB1c2goXCJNXCIuY29uY2F0KHN0YXJ0LCBcIiBcIikuY29uY2F0KHksIFwiaFwiKS5jb25jYXQoeCAtIHN0YXJ0LCBcInYxSFwiKS5jb25jYXQoc3RhcnQsIFwielwiKSk7XG4gICAgICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSAvLyBlbmQgb2Ygcm93LCBjbGVhbiB1cCBvciBza2lwXG5cblxuICAgICAgICAgIGlmICh4ID09PSByb3cubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgY2xvc2VkIHRoZSBvcCBhYm92ZSBhbHJlYWR5IHNvIHRoaXMgY2FuIG9ubHkgbWVhblxuICAgICAgICAgICAgICAvLyAyKyBsaWdodCBtb2R1bGVzIGluIGEgcm93LlxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBKdXN0IGEgc2luZ2xlIGRhcmsgbW9kdWxlLlxuICAgICAgICAgICAgICBvcHMucHVzaChcIk1cIi5jb25jYXQoeCwgXCIsXCIpLmNvbmNhdCh5LCBcIiBoMXYxSFwiKS5jb25jYXQoeCwgXCJ6XCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBmaW5pc2ggdGhlIGN1cnJlbnQgbGluZS5cbiAgICAgICAgICAgICAgb3BzLnB1c2goXCJNXCIuY29uY2F0KHN0YXJ0LCBcIixcIikuY29uY2F0KHksIFwiIGhcIikuY29uY2F0KHggKyAxIC0gc3RhcnQsIFwidjFIXCIpLmNvbmNhdChzdGFydCwgXCJ6XCIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjZWxsICYmIHN0YXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydCA9IHg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICBzaGFwZVJlbmRlcmluZzogXCJjcmlzcEVkZ2VzXCIsXG4gICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIFwiLmNvbmNhdChjZWxscy5sZW5ndGgsIFwiIFwiKS5jb25jYXQoY2VsbHMubGVuZ3RoKVxuICAgICAgfSwgb3RoZXJQcm9wcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogYmdDb2xvcixcbiAgICAgICAgZDogXCJNMCwwIGhcIi5jb25jYXQoY2VsbHMubGVuZ3RoLCBcInZcIikuY29uY2F0KGNlbGxzLmxlbmd0aCwgXCJIMHpcIilcbiAgICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IGZnQ29sb3IsXG4gICAgICAgIGQ6IG9wcy5qb2luKCcnKVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBRUkNvZGVTVkc7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShRUkNvZGVTVkcsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogdHJ1ZSxcbiAgdmFsdWU6IERFRkFVTFRfUFJPUFNcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFSQ29kZVNWRywgXCJwcm9wVHlwZXNcIiwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiB0cnVlLFxuICB2YWx1ZTogUFJPUF9UWVBFU1xufSk7XG5cbnZhciBRUkNvZGUgPSBmdW5jdGlvbiBRUkNvZGUocHJvcHMpIHtcbiAgdmFyIHJlbmRlckFzID0gcHJvcHMucmVuZGVyQXMsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJyZW5kZXJBc1wiXSk7XG5cbiAgdmFyIENvbXBvbmVudCA9IHJlbmRlckFzID09PSAnc3ZnJyA/IFFSQ29kZVNWRyA6IFFSQ29kZUNhbnZhcztcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBvdGhlclByb3BzKTtcbn07XG5cblFSQ29kZS5kZWZhdWx0UHJvcHMgPSBfZXh0ZW5kcyh7XG4gIHJlbmRlckFzOiAnY2FudmFzJ1xufSwgREVGQVVMVF9QUk9QUyk7XG5tb2R1bGUuZXhwb3J0cyA9IFFSQ29kZTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQURBO0FBUUE7QUFDQTtBQTFDQTtBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUEzQkE7QUFDQTtBQTZCQTtBQWxIQTtBQUNBO0FBb0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUJBO0FBSEE7QUFvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUE1RUE7QUFDQTtBQThFQTtBQWpHQTtBQUNBO0FBbUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFEQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/qrcode.react/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/querystring-es3/decode.js": -/*!*************************************************!*\ - !*** ../node_modules/querystring-es3/decode.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n // If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function (qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n var maxKeys = 1000;\n\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length; // maxKeys <= 0 means that we should not limit keys count\n\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr,\n vstr,\n k,\n v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanM/MzBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaERBO0FBQ0E7QUFrREE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/querystring-es3/decode.js\n"); - -/***/ }), - -/***/ "../node_modules/querystring-es3/encode.js": -/*!*************************************************!*\ - !*** ../node_modules/querystring-es3/encode.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar stringifyPrimitive = function stringifyPrimitive(v) {\n switch (_typeof(v)) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function (obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n\n if (obj === null) {\n obj = undefined;\n }\n\n if (_typeof(obj) === 'object') {\n return map(objectKeys(obj), function (k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n\n if (isArray(obj[k])) {\n return map(obj[k], function (v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map(xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n\n return res;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanM/NGM3NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQURBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUFDQTtBQXlCQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/querystring-es3/encode.js\n"); - -/***/ }), - -/***/ "../node_modules/querystring-es3/index.js": -/*!************************************************!*\ - !*** ../node_modules/querystring-es3/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nexports.decode = exports.parse = __webpack_require__(/*! ./decode */ \"../node_modules/querystring-es3/decode.js\");\nexports.encode = exports.stringify = __webpack_require__(/*! ./encode */ \"../node_modules/querystring-es3/encode.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzPzUwYTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/querystring-es3/index.js\n"); - -/***/ }), - -/***/ "../node_modules/rc-progress/es/Circle.js": -/*!************************************************!*\ - !*** ../node_modules/rc-progress/es/Circle.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _enhancer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./enhancer */ \"../node_modules/rc-progress/es/enhancer.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ \"../node_modules/rc-progress/es/types.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n/* eslint react/prop-types: 0 */\n\n\n\n\n\n\nvar gradientSeed = 0;\n\nfunction stripPercentToNumber(percent) {\n return +percent.replace('%', '');\n}\n\nfunction toArray(symArray) {\n return Array.isArray(symArray) ? symArray : [symArray];\n}\n\nfunction getPathStyles(offset, percent, strokeColor, strokeWidth) {\n var gapDegree = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var gapPosition = arguments.length > 5 ? arguments[5] : undefined;\n var radius = 50 - strokeWidth / 2;\n var beginPositionX = 0;\n var beginPositionY = -radius;\n var endPositionX = 0;\n var endPositionY = -2 * radius;\n\n switch (gapPosition) {\n case 'left':\n beginPositionX = -radius;\n beginPositionY = 0;\n endPositionX = 2 * radius;\n endPositionY = 0;\n break;\n\n case 'right':\n beginPositionX = radius;\n beginPositionY = 0;\n endPositionX = -2 * radius;\n endPositionY = 0;\n break;\n\n case 'bottom':\n beginPositionY = radius;\n endPositionY = 2 * radius;\n break;\n\n default:\n }\n\n var pathString = \"M 50,50 m \".concat(beginPositionX, \",\").concat(beginPositionY, \"\\n a \").concat(radius, \",\").concat(radius, \" 0 1 1 \").concat(endPositionX, \",\").concat(-endPositionY, \"\\n a \").concat(radius, \",\").concat(radius, \" 0 1 1 \").concat(-endPositionX, \",\").concat(endPositionY);\n var len = Math.PI * 2 * radius;\n var pathStyle = {\n stroke: strokeColor,\n strokeDasharray: \"\".concat(percent / 100 * (len - gapDegree), \"px \").concat(len, \"px\"),\n strokeDashoffset: \"-\".concat(gapDegree / 2 + offset / 100 * (len - gapDegree), \"px\"),\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s' // eslint-disable-line\n\n };\n return {\n pathString: pathString,\n pathStyle: pathStyle\n };\n}\n\nvar Circle = /*#__PURE__*/function (_Component) {\n _inherits(Circle, _Component);\n\n function Circle() {\n var _this;\n\n _classCallCheck(this, Circle);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Circle).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"paths\", {});\n\n _defineProperty(_assertThisInitialized(_this), \"gradientId\", 0);\n\n _this.gradientId = gradientSeed;\n gradientSeed += 1;\n return _this;\n }\n\n _createClass(Circle, [{\n key: \"getStokeList\",\n value: function getStokeList() {\n var _this2 = this;\n\n var _this$props = this.props,\n prefixCls = _this$props.prefixCls,\n percent = _this$props.percent,\n strokeColor = _this$props.strokeColor,\n strokeWidth = _this$props.strokeWidth,\n strokeLinecap = _this$props.strokeLinecap,\n gapDegree = _this$props.gapDegree,\n gapPosition = _this$props.gapPosition;\n var percentList = toArray(percent);\n var strokeColorList = toArray(strokeColor);\n var stackPtg = 0;\n return percentList.map(function (ptg, index) {\n var color = strokeColorList[index] || strokeColorList[strokeColorList.length - 1];\n var stroke = Object.prototype.toString.call(color) === '[object Object]' ? \"url(#\".concat(prefixCls, \"-gradient-\").concat(_this2.gradientId, \")\") : '';\n\n var _getPathStyles = getPathStyles(stackPtg, ptg, color, strokeWidth, gapDegree, gapPosition),\n pathString = _getPathStyles.pathString,\n pathStyle = _getPathStyles.pathStyle;\n\n stackPtg += ptg;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", {\n key: index,\n className: \"\".concat(prefixCls, \"-circle-path\"),\n d: pathString,\n stroke: stroke,\n strokeLinecap: strokeLinecap,\n strokeWidth: ptg === 0 ? 0 : strokeWidth,\n fillOpacity: \"0\",\n style: pathStyle,\n ref: function ref(path) {\n _this2.paths[index] = path;\n }\n });\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n prefixCls = _this$props2.prefixCls,\n strokeWidth = _this$props2.strokeWidth,\n trailWidth = _this$props2.trailWidth,\n gapDegree = _this$props2.gapDegree,\n gapPosition = _this$props2.gapPosition,\n trailColor = _this$props2.trailColor,\n strokeLinecap = _this$props2.strokeLinecap,\n style = _this$props2.style,\n className = _this$props2.className,\n strokeColor = _this$props2.strokeColor,\n restProps = _objectWithoutProperties(_this$props2, [\"prefixCls\", \"strokeWidth\", \"trailWidth\", \"gapDegree\", \"gapPosition\", \"trailColor\", \"strokeLinecap\", \"style\", \"className\", \"strokeColor\"]);\n\n var _getPathStyles2 = getPathStyles(0, 100, trailColor, strokeWidth, gapDegree, gapPosition),\n pathString = _getPathStyles2.pathString,\n pathStyle = _getPathStyles2.pathStyle;\n\n delete restProps.percent;\n var strokeColorList = toArray(strokeColor);\n var gradient = strokeColorList.find(function (color) {\n return Object.prototype.toString.call(color) === '[object Object]';\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"svg\", _extends({\n className: \"\".concat(prefixCls, \"-circle \").concat(className),\n viewBox: \"0 0 100 100\",\n style: style\n }, restProps), gradient && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"defs\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"linearGradient\", {\n id: \"\".concat(prefixCls, \"-gradient-\").concat(this.gradientId),\n x1: \"100%\",\n y1: \"0%\",\n x2: \"0%\",\n y2: \"0%\"\n }, Object.keys(gradient).sort(function (a, b) {\n return stripPercentToNumber(a) - stripPercentToNumber(b);\n }).map(function (key, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"stop\", {\n key: index,\n offset: key,\n stopColor: gradient[key]\n });\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-circle-trail\"),\n d: pathString,\n stroke: trailColor,\n strokeLinecap: strokeLinecap,\n strokeWidth: trailWidth || strokeWidth,\n fillOpacity: \"0\",\n style: pathStyle\n }), this.getStokeList().reverse());\n }\n }]);\n\n return Circle;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\nCircle.propTypes = _objectSpread({}, _types__WEBPACK_IMPORTED_MODULE_3__[\"propTypes\"], {\n gapPosition: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['top', 'bottom', 'left', 'right'])\n});\nCircle.defaultProps = _objectSpread({}, _types__WEBPACK_IMPORTED_MODULE_3__[\"defaultProps\"], {\n gapPosition: 'top'\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_enhancer__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Circle));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL0NpcmNsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmMtcHJvZ3Jlc3MvZXMvQ2lyY2xlLmpzPzdjZGEiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKHNvdXJjZSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZW5oYW5jZXIgZnJvbSAnLi9lbmhhbmNlcic7XG5pbXBvcnQgeyBwcm9wVHlwZXMsIGRlZmF1bHRQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xudmFyIGdyYWRpZW50U2VlZCA9IDA7XG5cbmZ1bmN0aW9uIHN0cmlwUGVyY2VudFRvTnVtYmVyKHBlcmNlbnQpIHtcbiAgcmV0dXJuICtwZXJjZW50LnJlcGxhY2UoJyUnLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkoc3ltQXJyYXkpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3ltQXJyYXkpID8gc3ltQXJyYXkgOiBbc3ltQXJyYXldO1xufVxuXG5mdW5jdGlvbiBnZXRQYXRoU3R5bGVzKG9mZnNldCwgcGVyY2VudCwgc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoKSB7XG4gIHZhciBnYXBEZWdyZWUgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XG4gIHZhciBnYXBQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogdW5kZWZpbmVkO1xuICB2YXIgcmFkaXVzID0gNTAgLSBzdHJva2VXaWR0aCAvIDI7XG4gIHZhciBiZWdpblBvc2l0aW9uWCA9IDA7XG4gIHZhciBiZWdpblBvc2l0aW9uWSA9IC1yYWRpdXM7XG4gIHZhciBlbmRQb3NpdGlvblggPSAwO1xuICB2YXIgZW5kUG9zaXRpb25ZID0gLTIgKiByYWRpdXM7XG5cbiAgc3dpdGNoIChnYXBQb3NpdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgYmVnaW5Qb3NpdGlvblggPSAtcmFkaXVzO1xuICAgICAgYmVnaW5Qb3NpdGlvblkgPSAwO1xuICAgICAgZW5kUG9zaXRpb25YID0gMiAqIHJhZGl1cztcbiAgICAgIGVuZFBvc2l0aW9uWSA9IDA7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGJlZ2luUG9zaXRpb25YID0gcmFkaXVzO1xuICAgICAgYmVnaW5Qb3NpdGlvblkgPSAwO1xuICAgICAgZW5kUG9zaXRpb25YID0gLTIgKiByYWRpdXM7XG4gICAgICBlbmRQb3NpdGlvblkgPSAwO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgYmVnaW5Qb3NpdGlvblkgPSByYWRpdXM7XG4gICAgICBlbmRQb3NpdGlvblkgPSAyICogcmFkaXVzO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICB9XG5cbiAgdmFyIHBhdGhTdHJpbmcgPSBcIk0gNTAsNTAgbSBcIi5jb25jYXQoYmVnaW5Qb3NpdGlvblgsIFwiLFwiKS5jb25jYXQoYmVnaW5Qb3NpdGlvblksIFwiXFxuICAgYSBcIikuY29uY2F0KHJhZGl1cywgXCIsXCIpLmNvbmNhdChyYWRpdXMsIFwiIDAgMSAxIFwiKS5jb25jYXQoZW5kUG9zaXRpb25YLCBcIixcIikuY29uY2F0KC1lbmRQb3NpdGlvblksIFwiXFxuICAgYSBcIikuY29uY2F0KHJhZGl1cywgXCIsXCIpLmNvbmNhdChyYWRpdXMsIFwiIDAgMSAxIFwiKS5jb25jYXQoLWVuZFBvc2l0aW9uWCwgXCIsXCIpLmNvbmNhdChlbmRQb3NpdGlvblkpO1xuICB2YXIgbGVuID0gTWF0aC5QSSAqIDIgKiByYWRpdXM7XG4gIHZhciBwYXRoU3R5bGUgPSB7XG4gICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcbiAgICBzdHJva2VEYXNoYXJyYXk6IFwiXCIuY29uY2F0KHBlcmNlbnQgLyAxMDAgKiAobGVuIC0gZ2FwRGVncmVlKSwgXCJweCBcIikuY29uY2F0KGxlbiwgXCJweFwiKSxcbiAgICBzdHJva2VEYXNob2Zmc2V0OiBcIi1cIi5jb25jYXQoZ2FwRGVncmVlIC8gMiArIG9mZnNldCAvIDEwMCAqIChsZW4gLSBnYXBEZWdyZWUpLCBcInB4XCIpLFxuICAgIHRyYW5zaXRpb246ICdzdHJva2UtZGFzaG9mZnNldCAuM3MgZWFzZSAwcywgc3Ryb2tlLWRhc2hhcnJheSAuM3MgZWFzZSAwcywgc3Ryb2tlIC4zcywgc3Ryb2tlLXdpZHRoIC4wNnMgZWFzZSAuM3MnIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICB9O1xuICByZXR1cm4ge1xuICAgIHBhdGhTdHJpbmc6IHBhdGhTdHJpbmcsXG4gICAgcGF0aFN0eWxlOiBwYXRoU3R5bGVcbiAgfTtcbn1cblxudmFyIENpcmNsZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ2lyY2xlLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDaXJjbGUoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENpcmNsZSk7XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihDaXJjbGUpLmNhbGwodGhpcykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhdGhzXCIsIHt9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJncmFkaWVudElkXCIsIDApO1xuXG4gICAgX3RoaXMuZ3JhZGllbnRJZCA9IGdyYWRpZW50U2VlZDtcbiAgICBncmFkaWVudFNlZWQgKz0gMTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2lyY2xlLCBbe1xuICAgIGtleTogXCJnZXRTdG9rZUxpc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Rva2VMaXN0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgcHJlZml4Q2xzID0gX3RoaXMkcHJvcHMucHJlZml4Q2xzLFxuICAgICAgICAgIHBlcmNlbnQgPSBfdGhpcyRwcm9wcy5wZXJjZW50LFxuICAgICAgICAgIHN0cm9rZUNvbG9yID0gX3RoaXMkcHJvcHMuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlV2lkdGggPSBfdGhpcyRwcm9wcy5zdHJva2VXaWR0aCxcbiAgICAgICAgICBzdHJva2VMaW5lY2FwID0gX3RoaXMkcHJvcHMuc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgICBnYXBEZWdyZWUgPSBfdGhpcyRwcm9wcy5nYXBEZWdyZWUsXG4gICAgICAgICAgZ2FwUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5nYXBQb3NpdGlvbjtcbiAgICAgIHZhciBwZXJjZW50TGlzdCA9IHRvQXJyYXkocGVyY2VudCk7XG4gICAgICB2YXIgc3Ryb2tlQ29sb3JMaXN0ID0gdG9BcnJheShzdHJva2VDb2xvcik7XG4gICAgICB2YXIgc3RhY2tQdGcgPSAwO1xuICAgICAgcmV0dXJuIHBlcmNlbnRMaXN0Lm1hcChmdW5jdGlvbiAocHRnLCBpbmRleCkge1xuICAgICAgICB2YXIgY29sb3IgPSBzdHJva2VDb2xvckxpc3RbaW5kZXhdIHx8IHN0cm9rZUNvbG9yTGlzdFtzdHJva2VDb2xvckxpc3QubGVuZ3RoIC0gMV07XG4gICAgICAgIHZhciBzdHJva2UgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29sb3IpID09PSAnW29iamVjdCBPYmplY3RdJyA/IFwidXJsKCNcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ncmFkaWVudC1cIikuY29uY2F0KF90aGlzMi5ncmFkaWVudElkLCBcIilcIikgOiAnJztcblxuICAgICAgICB2YXIgX2dldFBhdGhTdHlsZXMgPSBnZXRQYXRoU3R5bGVzKHN0YWNrUHRnLCBwdGcsIGNvbG9yLCBzdHJva2VXaWR0aCwgZ2FwRGVncmVlLCBnYXBQb3NpdGlvbiksXG4gICAgICAgICAgICBwYXRoU3RyaW5nID0gX2dldFBhdGhTdHlsZXMucGF0aFN0cmluZyxcbiAgICAgICAgICAgIHBhdGhTdHlsZSA9IF9nZXRQYXRoU3R5bGVzLnBhdGhTdHlsZTtcblxuICAgICAgICBzdGFja1B0ZyArPSBwdGc7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2lyY2xlLXBhdGhcIiksXG4gICAgICAgICAgZDogcGF0aFN0cmluZyxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VMaW5lY2FwOiBzdHJva2VMaW5lY2FwLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiBwdGcgPT09IDAgPyAwIDogc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgZmlsbE9wYWNpdHk6IFwiMFwiLFxuICAgICAgICAgIHN0eWxlOiBwYXRoU3R5bGUsXG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYocGF0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnBhdGhzW2luZGV4XSA9IHBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgcHJlZml4Q2xzID0gX3RoaXMkcHJvcHMyLnByZWZpeENscyxcbiAgICAgICAgICBzdHJva2VXaWR0aCA9IF90aGlzJHByb3BzMi5zdHJva2VXaWR0aCxcbiAgICAgICAgICB0cmFpbFdpZHRoID0gX3RoaXMkcHJvcHMyLnRyYWlsV2lkdGgsXG4gICAgICAgICAgZ2FwRGVncmVlID0gX3RoaXMkcHJvcHMyLmdhcERlZ3JlZSxcbiAgICAgICAgICBnYXBQb3NpdGlvbiA9IF90aGlzJHByb3BzMi5nYXBQb3NpdGlvbixcbiAgICAgICAgICB0cmFpbENvbG9yID0gX3RoaXMkcHJvcHMyLnRyYWlsQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcCA9IF90aGlzJHByb3BzMi5zdHJva2VMaW5lY2FwLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IgPSBfdGhpcyRwcm9wczIuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1wicHJlZml4Q2xzXCIsIFwic3Ryb2tlV2lkdGhcIiwgXCJ0cmFpbFdpZHRoXCIsIFwiZ2FwRGVncmVlXCIsIFwiZ2FwUG9zaXRpb25cIiwgXCJ0cmFpbENvbG9yXCIsIFwic3Ryb2tlTGluZWNhcFwiLCBcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwic3Ryb2tlQ29sb3JcIl0pO1xuXG4gICAgICB2YXIgX2dldFBhdGhTdHlsZXMyID0gZ2V0UGF0aFN0eWxlcygwLCAxMDAsIHRyYWlsQ29sb3IsIHN0cm9rZVdpZHRoLCBnYXBEZWdyZWUsIGdhcFBvc2l0aW9uKSxcbiAgICAgICAgICBwYXRoU3RyaW5nID0gX2dldFBhdGhTdHlsZXMyLnBhdGhTdHJpbmcsXG4gICAgICAgICAgcGF0aFN0eWxlID0gX2dldFBhdGhTdHlsZXMyLnBhdGhTdHlsZTtcblxuICAgICAgZGVsZXRlIHJlc3RQcm9wcy5wZXJjZW50O1xuICAgICAgdmFyIHN0cm9rZUNvbG9yTGlzdCA9IHRvQXJyYXkoc3Ryb2tlQ29sb3IpO1xuICAgICAgdmFyIGdyYWRpZW50ID0gc3Ryb2tlQ29sb3JMaXN0LmZpbmQoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29sb3IpID09PSAnW29iamVjdCBPYmplY3RdJztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2lyY2xlIFwiKS5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTAwIDEwMFwiLFxuICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgIH0sIHJlc3RQcm9wcyksIGdyYWRpZW50ICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWdyYWRpZW50LVwiKS5jb25jYXQodGhpcy5ncmFkaWVudElkKSxcbiAgICAgICAgeDE6IFwiMTAwJVwiLFxuICAgICAgICB5MTogXCIwJVwiLFxuICAgICAgICB4MjogXCIwJVwiLFxuICAgICAgICB5MjogXCIwJVwiXG4gICAgICB9LCBPYmplY3Qua2V5cyhncmFkaWVudCkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gc3RyaXBQZXJjZW50VG9OdW1iZXIoYSkgLSBzdHJpcFBlcmNlbnRUb051bWJlcihiKTtcbiAgICAgIH0pLm1hcChmdW5jdGlvbiAoa2V5LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInN0b3BcIiwge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgb2Zmc2V0OiBrZXksXG4gICAgICAgICAgc3RvcENvbG9yOiBncmFkaWVudFtrZXldXG4gICAgICAgIH0pO1xuICAgICAgfSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2lyY2xlLXRyYWlsXCIpLFxuICAgICAgICBkOiBwYXRoU3RyaW5nLFxuICAgICAgICBzdHJva2U6IHRyYWlsQ29sb3IsXG4gICAgICAgIHN0cm9rZUxpbmVjYXA6IHN0cm9rZUxpbmVjYXAsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0cmFpbFdpZHRoIHx8IHN0cm9rZVdpZHRoLFxuICAgICAgICBmaWxsT3BhY2l0eTogXCIwXCIsXG4gICAgICAgIHN0eWxlOiBwYXRoU3R5bGVcbiAgICAgIH0pLCB0aGlzLmdldFN0b2tlTGlzdCgpLnJldmVyc2UoKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENpcmNsZTtcbn0oQ29tcG9uZW50KTtcblxuQ2lyY2xlLnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoe30sIHByb3BUeXBlcywge1xuICBnYXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0J10pXG59KTtcbkNpcmNsZS5kZWZhdWx0UHJvcHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0UHJvcHMsIHtcbiAgZ2FwUG9zaXRpb246ICd0b3AnXG59KTtcbmV4cG9ydCBkZWZhdWx0IGVuaGFuY2VyKENpcmNsZSk7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFUQTtBQXVCQTtBQXZDQTtBQXlDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFiQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFwREE7QUFDQTtBQXNEQTtBQWxIQTtBQUNBO0FBb0hBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/rc-progress/es/Circle.js\n"); - -/***/ }), - -/***/ "../node_modules/rc-progress/es/Line.js": -/*!**********************************************!*\ - !*** ../node_modules/rc-progress/es/Line.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _enhancer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enhancer */ \"../node_modules/rc-progress/es/enhancer.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types */ \"../node_modules/rc-progress/es/types.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar Line = /*#__PURE__*/function (_Component) {\n _inherits(Line, _Component);\n\n function Line() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Line);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Line)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"paths\", {});\n\n return _this;\n }\n\n _createClass(Line, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n className = _this$props.className,\n percent = _this$props.percent,\n prefixCls = _this$props.prefixCls,\n strokeColor = _this$props.strokeColor,\n strokeLinecap = _this$props.strokeLinecap,\n strokeWidth = _this$props.strokeWidth,\n style = _this$props.style,\n trailColor = _this$props.trailColor,\n trailWidth = _this$props.trailWidth,\n transition = _this$props.transition,\n restProps = _objectWithoutProperties(_this$props, [\"className\", \"percent\", \"prefixCls\", \"strokeColor\", \"strokeLinecap\", \"strokeWidth\", \"style\", \"trailColor\", \"trailWidth\", \"transition\"]);\n\n delete restProps.gapPosition;\n var percentList = Array.isArray(percent) ? percent : [percent];\n var strokeColorList = Array.isArray(strokeColor) ? strokeColor : [strokeColor];\n var center = strokeWidth / 2;\n var right = 100 - strokeWidth / 2;\n var pathString = \"M \".concat(strokeLinecap === 'round' ? center : 0, \",\").concat(center, \"\\n L \").concat(strokeLinecap === 'round' ? right : 100, \",\").concat(center);\n var viewBoxString = \"0 0 100 \".concat(strokeWidth);\n var stackPtg = 0;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"svg\", _extends({\n className: \"\".concat(prefixCls, \"-line \").concat(className),\n viewBox: viewBoxString,\n preserveAspectRatio: \"none\",\n style: style\n }, restProps), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-line-trail\"),\n d: pathString,\n strokeLinecap: strokeLinecap,\n stroke: trailColor,\n strokeWidth: trailWidth || strokeWidth,\n fillOpacity: \"0\"\n }), percentList.map(function (ptg, index) {\n var pathStyle = {\n strokeDasharray: \"\".concat(ptg, \"px, 100px\"),\n strokeDashoffset: \"-\".concat(stackPtg, \"px\"),\n transition: transition || 'stroke-dashoffset 0.3s ease 0s, stroke-dasharray .3s ease 0s, stroke 0.3s linear'\n };\n var color = strokeColorList[index] || strokeColorList[strokeColorList.length - 1];\n stackPtg += ptg;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"path\", {\n key: index,\n className: \"\".concat(prefixCls, \"-line-path\"),\n d: pathString,\n strokeLinecap: strokeLinecap,\n stroke: color,\n strokeWidth: strokeWidth,\n fillOpacity: \"0\",\n ref: function ref(path) {\n _this2.paths[index] = path;\n },\n style: pathStyle\n });\n }));\n }\n }]);\n\n return Line;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\nLine.propTypes = _types__WEBPACK_IMPORTED_MODULE_2__[\"propTypes\"];\nLine.defaultProps = _types__WEBPACK_IMPORTED_MODULE_2__[\"defaultProps\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_enhancer__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Line));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL0xpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL0xpbmUuanM/OGVjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZW5oYW5jZXIgZnJvbSAnLi9lbmhhbmNlcic7XG5pbXBvcnQgeyBwcm9wVHlwZXMsIGRlZmF1bHRQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG52YXIgTGluZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGluZSwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTGluZSgpIHtcbiAgICB2YXIgX2dldFByb3RvdHlwZU9mMjtcblxuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfZ2V0UHJvdG90eXBlT2YyID0gX2dldFByb3RvdHlwZU9mKExpbmUpKS5jYWxsLmFwcGx5KF9nZXRQcm90b3R5cGVPZjIsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwYXRoc1wiLCB7fSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGluZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBwZXJjZW50ID0gX3RoaXMkcHJvcHMucGVyY2VudCxcbiAgICAgICAgICBwcmVmaXhDbHMgPSBfdGhpcyRwcm9wcy5wcmVmaXhDbHMsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IgPSBfdGhpcyRwcm9wcy5zdHJva2VDb2xvcixcbiAgICAgICAgICBzdHJva2VMaW5lY2FwID0gX3RoaXMkcHJvcHMuc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgICBzdHJva2VXaWR0aCA9IF90aGlzJHByb3BzLnN0cm9rZVdpZHRoLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgICAgdHJhaWxDb2xvciA9IF90aGlzJHByb3BzLnRyYWlsQ29sb3IsXG4gICAgICAgICAgdHJhaWxXaWR0aCA9IF90aGlzJHByb3BzLnRyYWlsV2lkdGgsXG4gICAgICAgICAgdHJhbnNpdGlvbiA9IF90aGlzJHByb3BzLnRyYW5zaXRpb24sXG4gICAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJwZXJjZW50XCIsIFwicHJlZml4Q2xzXCIsIFwic3Ryb2tlQ29sb3JcIiwgXCJzdHJva2VMaW5lY2FwXCIsIFwic3Ryb2tlV2lkdGhcIiwgXCJzdHlsZVwiLCBcInRyYWlsQ29sb3JcIiwgXCJ0cmFpbFdpZHRoXCIsIFwidHJhbnNpdGlvblwiXSk7XG5cbiAgICAgIGRlbGV0ZSByZXN0UHJvcHMuZ2FwUG9zaXRpb247XG4gICAgICB2YXIgcGVyY2VudExpc3QgPSBBcnJheS5pc0FycmF5KHBlcmNlbnQpID8gcGVyY2VudCA6IFtwZXJjZW50XTtcbiAgICAgIHZhciBzdHJva2VDb2xvckxpc3QgPSBBcnJheS5pc0FycmF5KHN0cm9rZUNvbG9yKSA/IHN0cm9rZUNvbG9yIDogW3N0cm9rZUNvbG9yXTtcbiAgICAgIHZhciBjZW50ZXIgPSBzdHJva2VXaWR0aCAvIDI7XG4gICAgICB2YXIgcmlnaHQgPSAxMDAgLSBzdHJva2VXaWR0aCAvIDI7XG4gICAgICB2YXIgcGF0aFN0cmluZyA9IFwiTSBcIi5jb25jYXQoc3Ryb2tlTGluZWNhcCA9PT0gJ3JvdW5kJyA/IGNlbnRlciA6IDAsIFwiLFwiKS5jb25jYXQoY2VudGVyLCBcIlxcbiAgICAgICAgICAgTCBcIikuY29uY2F0KHN0cm9rZUxpbmVjYXAgPT09ICdyb3VuZCcgPyByaWdodCA6IDEwMCwgXCIsXCIpLmNvbmNhdChjZW50ZXIpO1xuICAgICAgdmFyIHZpZXdCb3hTdHJpbmcgPSBcIjAgMCAxMDAgXCIuY29uY2F0KHN0cm9rZVdpZHRoKTtcbiAgICAgIHZhciBzdGFja1B0ZyA9IDA7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1saW5lIFwiKS5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgdmlld0JveDogdmlld0JveFN0cmluZyxcbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCIsXG4gICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgfSwgcmVzdFByb3BzKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbGluZS10cmFpbFwiKSxcbiAgICAgICAgZDogcGF0aFN0cmluZyxcbiAgICAgICAgc3Ryb2tlTGluZWNhcDogc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgc3Ryb2tlOiB0cmFpbENvbG9yLFxuICAgICAgICBzdHJva2VXaWR0aDogdHJhaWxXaWR0aCB8fCBzdHJva2VXaWR0aCxcbiAgICAgICAgZmlsbE9wYWNpdHk6IFwiMFwiXG4gICAgICB9KSwgcGVyY2VudExpc3QubWFwKGZ1bmN0aW9uIChwdGcsIGluZGV4KSB7XG4gICAgICAgIHZhciBwYXRoU3R5bGUgPSB7XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBcIlwiLmNvbmNhdChwdGcsIFwicHgsIDEwMHB4XCIpLFxuICAgICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IFwiLVwiLmNvbmNhdChzdGFja1B0ZywgXCJweFwiKSxcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uIHx8ICdzdHJva2UtZGFzaG9mZnNldCAwLjNzIGVhc2UgMHMsIHN0cm9rZS1kYXNoYXJyYXkgLjNzIGVhc2UgMHMsIHN0cm9rZSAwLjNzIGxpbmVhcidcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNvbG9yID0gc3Ryb2tlQ29sb3JMaXN0W2luZGV4XSB8fCBzdHJva2VDb2xvckxpc3Rbc3Ryb2tlQ29sb3JMaXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICBzdGFja1B0ZyArPSBwdGc7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbGluZS1wYXRoXCIpLFxuICAgICAgICAgIGQ6IHBhdGhTdHJpbmcsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgICBzdHJva2U6IGNvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiBzdHJva2VXaWR0aCxcbiAgICAgICAgICBmaWxsT3BhY2l0eTogXCIwXCIsXG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYocGF0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnBhdGhzW2luZGV4XSA9IHBhdGg7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHlsZTogcGF0aFN0eWxlXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaW5lO1xufShDb21wb25lbnQpO1xuXG5MaW5lLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbkxpbmUuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgZW5oYW5jZXIoTGluZSk7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBWEE7QUFwQkE7QUFrQ0E7QUE1REE7QUFDQTtBQThEQTtBQXBGQTtBQUNBO0FBc0ZBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/rc-progress/es/Line.js\n"); - -/***/ }), - -/***/ "../node_modules/rc-progress/es/enhancer.js": -/*!**************************************************!*\ - !*** ../node_modules/rc-progress/es/enhancer.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nvar enhancer = function enhancer(WrappedComponent) {\n return (/*#__PURE__*/function (_WrappedComponent) {\n _inherits(Progress, _WrappedComponent);\n\n function Progress() {\n _classCallCheck(this, Progress);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Progress).apply(this, arguments));\n }\n\n _createClass(Progress, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var _this = this;\n\n var now = Date.now();\n var updated = false;\n Object.keys(this.paths).forEach(function (key) {\n var path = _this.paths[key];\n\n if (!path) {\n return;\n }\n\n updated = true;\n var pathStyle = path.style;\n pathStyle.transitionDuration = '.3s, .3s, .3s, .06s';\n\n if (_this.prevTimeStamp && now - _this.prevTimeStamp < 100) {\n pathStyle.transitionDuration = '0s, 0s';\n }\n });\n\n if (updated) {\n this.prevTimeStamp = Date.now();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return _get(_getPrototypeOf(Progress.prototype), \"render\", this).call(this);\n }\n }]);\n\n return Progress;\n }(WrappedComponent)\n );\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (enhancer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL2VuaGFuY2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yYy1wcm9ncmVzcy9lcy9lbmhhbmNlci5qcz8xMGExIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7IF9nZXQgPSBSZWZsZWN0LmdldDsgfSBlbHNlIHsgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTsgaWYgKCFiYXNlKSByZXR1cm47IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7IGlmIChkZXNjLmdldCkgeyByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7IH0gcmV0dXJuIGRlc2MudmFsdWU7IH07IH0gcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTsgfVxuXG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7IHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7IG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhazsgfSByZXR1cm4gb2JqZWN0OyB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxudmFyIGVuaGFuY2VyID0gZnVuY3Rpb24gZW5oYW5jZXIoV3JhcHBlZENvbXBvbmVudCkge1xuICByZXR1cm4gKFxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoX1dyYXBwZWRDb21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0cyhQcm9ncmVzcywgX1dyYXBwZWRDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBQcm9ncmVzcygpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb2dyZXNzKTtcblxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFByb2dyZXNzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cblxuICAgICAgX2NyZWF0ZUNsYXNzKFByb2dyZXNzLCBbe1xuICAgICAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHZhciB1cGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5wYXRocykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IF90aGlzLnBhdGhzW2tleV07XG5cbiAgICAgICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHBhdGhTdHlsZSA9IHBhdGguc3R5bGU7XG4gICAgICAgICAgICBwYXRoU3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJy4zcywgLjNzLCAuM3MsIC4wNnMnO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJldlRpbWVTdGFtcCAmJiBub3cgLSBfdGhpcy5wcmV2VGltZVN0YW1wIDwgMTAwKSB7XG4gICAgICAgICAgICAgIHBhdGhTdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMsIDBzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lU3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFByb2dyZXNzLnByb3RvdHlwZSksIFwicmVuZGVyXCIsIHRoaXMpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIFByb2dyZXNzO1xuICAgIH0oV3JhcHBlZENvbXBvbmVudClcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVuaGFuY2VyOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQTNDQTtBQUZBO0FBREE7QUFDQTtBQWtEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/rc-progress/es/enhancer.js\n"); - -/***/ }), - -/***/ "../node_modules/rc-progress/es/index.js": -/*!***********************************************!*\ - !*** ../node_modules/rc-progress/es/index.js ***! - \***********************************************/ -/*! exports provided: Line, Circle, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Line__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Line */ \"../node_modules/rc-progress/es/Line.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return _Line__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Circle */ \"../node_modules/rc-progress/es/Circle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Circle\", function() { return _Circle__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n Line: _Line__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n Circle: _Circle__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yYy1wcm9ncmVzcy9lcy9pbmRleC5qcz81YjIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaW5lIGZyb20gJy4vTGluZSc7XG5pbXBvcnQgQ2lyY2xlIGZyb20gJy4vQ2lyY2xlJztcbmV4cG9ydCB7IExpbmUsIENpcmNsZSB9O1xuZXhwb3J0IGRlZmF1bHQge1xuICBMaW5lOiBMaW5lLFxuICBDaXJjbGU6IENpcmNsZVxufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/rc-progress/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/rc-progress/es/types.js": -/*!***********************************************!*\ - !*** ../node_modules/rc-progress/es/types.js ***! - \***********************************************/ -/*! exports provided: defaultProps, propTypes */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultProps\", function() { return defaultProps; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propTypes\", function() { return propTypes; });\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__);\n\nvar defaultProps = {\n className: '',\n percent: 0,\n prefixCls: 'rc-progress',\n strokeColor: '#2db7f5',\n strokeLinecap: 'round',\n strokeWidth: 1,\n style: {},\n trailColor: '#D9D9D9',\n trailWidth: 1\n};\nvar mixedType = prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string]);\nvar propTypes = {\n className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n percent: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([mixedType, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(mixedType)]),\n prefixCls: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n strokeColor: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object])), prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object]),\n strokeLinecap: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(['butt', 'round', 'square']),\n strokeWidth: mixedType,\n style: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object,\n trailColor: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,\n trailWidth: mixedType\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JjLXByb2dyZXNzL2VzL3R5cGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yYy1wcm9ncmVzcy9lcy90eXBlcy5qcz83OTJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5leHBvcnQgdmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgcGVyY2VudDogMCxcbiAgcHJlZml4Q2xzOiAncmMtcHJvZ3Jlc3MnLFxuICBzdHJva2VDb2xvcjogJyMyZGI3ZjUnLFxuICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICBzdHJva2VXaWR0aDogMSxcbiAgc3R5bGU6IHt9LFxuICB0cmFpbENvbG9yOiAnI0Q5RDlEOScsXG4gIHRyYWlsV2lkdGg6IDFcbn07XG52YXIgbWl4ZWRUeXBlID0gUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pO1xuZXhwb3J0IHZhciBwcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGVyY2VudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbbWl4ZWRUeXBlLCBQcm9wVHlwZXMuYXJyYXlPZihtaXhlZFR5cGUpXSksXG4gIHByZWZpeENsczogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3Ryb2tlQ29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgc3Ryb2tlTGluZWNhcDogUHJvcFR5cGVzLm9uZU9mKFsnYnV0dCcsICdyb3VuZCcsICdzcXVhcmUnXSksXG4gIHN0cm9rZVdpZHRoOiBtaXhlZFR5cGUsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0cmFpbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFpbFdpZHRoOiBtaXhlZFR5cGVcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/rc-progress/es/types.js\n"); - -/***/ }), - -/***/ "../node_modules/react-async-script/lib/esm/async-script-loader.js": -/*!*************************************************************************!*\ - !*** ../node_modules/react-async-script/lib/esm/async-script-loader.js ***! - \*************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return makeAsyncScript; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! hoist-non-react-statics */ \"../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__);\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\n\n\n\nvar SCRIPT_MAP = {}; // A counter used to generate a unique id for each component that uses the function\n\nvar idCount = 0;\nfunction makeAsyncScript(getScriptURL, options) {\n options = options || {};\n return function wrapWithAsyncScript(WrappedComponent) {\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n\n var AsyncScriptLoader = /*#__PURE__*/function (_Component) {\n _inheritsLoose(AsyncScriptLoader, _Component);\n\n function AsyncScriptLoader(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this.state = {};\n _this.__scriptURL = \"\";\n return _this;\n }\n\n var _proto = AsyncScriptLoader.prototype;\n\n _proto.asyncScriptLoaderGetScriptLoaderID = function asyncScriptLoaderGetScriptLoaderID() {\n if (!this.__scriptLoaderID) {\n this.__scriptLoaderID = \"async-script-loader-\" + idCount++;\n }\n\n return this.__scriptLoaderID;\n };\n\n _proto.setupScriptURL = function setupScriptURL() {\n this.__scriptURL = typeof getScriptURL === \"function\" ? getScriptURL() : getScriptURL;\n return this.__scriptURL;\n };\n\n _proto.asyncScriptLoaderHandleLoad = function asyncScriptLoaderHandleLoad(state) {\n var _this2 = this; // use reacts setState callback to fire props.asyncScriptOnLoad with new state/entry\n\n\n this.setState(state, function () {\n return _this2.props.asyncScriptOnLoad && _this2.props.asyncScriptOnLoad(_this2.state);\n });\n };\n\n _proto.asyncScriptLoaderTriggerOnScriptLoaded = function asyncScriptLoaderTriggerOnScriptLoaded() {\n var mapEntry = SCRIPT_MAP[this.__scriptURL];\n\n if (!mapEntry || !mapEntry.loaded) {\n throw new Error(\"Script is not loaded.\");\n }\n\n for (var obsKey in mapEntry.observers) {\n mapEntry.observers[obsKey](mapEntry);\n }\n\n delete window[options.callbackName];\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this3 = this;\n\n var scriptURL = this.setupScriptURL();\n var key = this.asyncScriptLoaderGetScriptLoaderID();\n var _options = options,\n globalName = _options.globalName,\n callbackName = _options.callbackName,\n scriptId = _options.scriptId; // check if global object already attached to window\n\n if (globalName && typeof window[globalName] !== \"undefined\") {\n SCRIPT_MAP[scriptURL] = {\n loaded: true,\n observers: {}\n };\n } // check if script loading already\n\n\n if (SCRIPT_MAP[scriptURL]) {\n var entry = SCRIPT_MAP[scriptURL]; // if loaded or errored then \"finish\"\n\n if (entry && (entry.loaded || entry.errored)) {\n this.asyncScriptLoaderHandleLoad(entry);\n return;\n } // if still loading then callback to observer queue\n\n\n entry.observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n return;\n }\n /*\n * hasn't started loading\n * start the \"magic\"\n * setup script to load and observers\n */\n\n\n var observers = {};\n\n observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n SCRIPT_MAP[scriptURL] = {\n loaded: false,\n observers: observers\n };\n var script = document.createElement(\"script\");\n script.src = scriptURL;\n script.async = true;\n\n if (scriptId) {\n script.id = scriptId;\n }\n\n var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(func) {\n if (SCRIPT_MAP[scriptURL]) {\n var mapEntry = SCRIPT_MAP[scriptURL];\n var observersMap = mapEntry.observers;\n\n for (var obsKey in observersMap) {\n if (func(observersMap[obsKey])) {\n delete observersMap[obsKey];\n }\n }\n }\n };\n\n if (callbackName && typeof window !== \"undefined\") {\n window[callbackName] = function () {\n return _this3.asyncScriptLoaderTriggerOnScriptLoaded();\n };\n }\n\n script.onload = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.loaded = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n if (callbackName) {\n return false;\n }\n\n observer(mapEntry);\n return true;\n });\n }\n };\n\n script.onerror = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.errored = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n observer(mapEntry);\n return true;\n });\n }\n };\n\n document.body.appendChild(script);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Remove tag script\n var scriptURL = this.__scriptURL;\n\n if (options.removeOnUnmount === true) {\n var allScripts = document.getElementsByTagName(\"script\");\n\n for (var i = 0; i < allScripts.length; i += 1) {\n if (allScripts[i].src.indexOf(scriptURL) > -1) {\n if (allScripts[i].parentNode) {\n allScripts[i].parentNode.removeChild(allScripts[i]);\n }\n }\n }\n } // Clean the observer entry\n\n\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()];\n\n if (options.removeOnUnmount === true) {\n delete SCRIPT_MAP[scriptURL];\n }\n }\n };\n\n _proto.render = function render() {\n var globalName = options.globalName; // remove asyncScriptOnLoad from childProps\n\n var _this$props = this.props,\n asyncScriptOnLoad = _this$props.asyncScriptOnLoad,\n forwardedRef = _this$props.forwardedRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"asyncScriptOnLoad\", \"forwardedRef\"]); // eslint-disable-line no-unused-vars\n\n\n if (globalName && typeof window !== \"undefined\") {\n childProps[globalName] = typeof window[globalName] !== \"undefined\" ? window[globalName] : undefined;\n }\n\n childProps.ref = forwardedRef;\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(WrappedComponent, childProps);\n };\n\n return AsyncScriptLoader;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]); // Note the second param \"ref\" provided by React.forwardRef.\n // We can pass it along to AsyncScriptLoader as a regular prop, e.g. \"forwardedRef\"\n // And it can then be attached to the Component.\n\n\n var ForwardedComponent = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function (props, ref) {\n return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(AsyncScriptLoader, _extends({}, props, {\n forwardedRef: ref\n }));\n });\n ForwardedComponent.displayName = \"AsyncScriptLoader(\" + wrappedComponentName + \")\";\n ForwardedComponent.propTypes = {\n asyncScriptOnLoad: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n };\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(ForwardedComponent, WrappedComponent);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWFzeW5jLXNjcmlwdC9saWIvZXNtL2FzeW5jLXNjcmlwdC1sb2FkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWFzeW5jLXNjcmlwdC9saWIvZXNtL2FzeW5jLXNjcmlwdC1sb2FkZXIuanM/ZGFhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQsIGZvcndhcmRSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSBcImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI7XG52YXIgU0NSSVBUX01BUCA9IHt9OyAvLyBBIGNvdW50ZXIgdXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgZWFjaCBjb21wb25lbnQgdGhhdCB1c2VzIHRoZSBmdW5jdGlvblxuXG52YXIgaWRDb3VudCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQXN5bmNTY3JpcHQoZ2V0U2NyaXB0VVJMLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhBc3luY1NjcmlwdChXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgdmFyIHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgXCJDb21wb25lbnRcIjtcblxuICAgIHZhciBBc3luY1NjcmlwdExvYWRlciA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShBc3luY1NjcmlwdExvYWRlciwgX0NvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIEFzeW5jU2NyaXB0TG9hZGVyKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgX3RoaXMuX19zY3JpcHRVUkwgPSBcIlwiO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcHJvdG8gPSBBc3luY1NjcmlwdExvYWRlci5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5hc3luY1NjcmlwdExvYWRlckdldFNjcmlwdExvYWRlcklEID0gZnVuY3Rpb24gYXN5bmNTY3JpcHRMb2FkZXJHZXRTY3JpcHRMb2FkZXJJRCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fc2NyaXB0TG9hZGVySUQpIHtcbiAgICAgICAgICB0aGlzLl9fc2NyaXB0TG9hZGVySUQgPSBcImFzeW5jLXNjcmlwdC1sb2FkZXItXCIgKyBpZENvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fX3NjcmlwdExvYWRlcklEO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnNldHVwU2NyaXB0VVJMID0gZnVuY3Rpb24gc2V0dXBTY3JpcHRVUkwoKSB7XG4gICAgICAgIHRoaXMuX19zY3JpcHRVUkwgPSB0eXBlb2YgZ2V0U2NyaXB0VVJMID09PSBcImZ1bmN0aW9uXCIgPyBnZXRTY3JpcHRVUkwoKSA6IGdldFNjcmlwdFVSTDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19zY3JpcHRVUkw7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uYXN5bmNTY3JpcHRMb2FkZXJIYW5kbGVMb2FkID0gZnVuY3Rpb24gYXN5bmNTY3JpcHRMb2FkZXJIYW5kbGVMb2FkKHN0YXRlKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIC8vIHVzZSByZWFjdHMgc2V0U3RhdGUgY2FsbGJhY2sgdG8gZmlyZSBwcm9wcy5hc3luY1NjcmlwdE9uTG9hZCB3aXRoIG5ldyBzdGF0ZS9lbnRyeVxuICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy5hc3luY1NjcmlwdE9uTG9hZCAmJiBfdGhpczIucHJvcHMuYXN5bmNTY3JpcHRPbkxvYWQoX3RoaXMyLnN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uYXN5bmNTY3JpcHRMb2FkZXJUcmlnZ2VyT25TY3JpcHRMb2FkZWQgPSBmdW5jdGlvbiBhc3luY1NjcmlwdExvYWRlclRyaWdnZXJPblNjcmlwdExvYWRlZCgpIHtcbiAgICAgICAgdmFyIG1hcEVudHJ5ID0gU0NSSVBUX01BUFt0aGlzLl9fc2NyaXB0VVJMXTtcblxuICAgICAgICBpZiAoIW1hcEVudHJ5IHx8ICFtYXBFbnRyeS5sb2FkZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY3JpcHQgaXMgbm90IGxvYWRlZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBvYnNLZXkgaW4gbWFwRW50cnkub2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgbWFwRW50cnkub2JzZXJ2ZXJzW29ic0tleV0obWFwRW50cnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHdpbmRvd1tvcHRpb25zLmNhbGxiYWNrTmFtZV07XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHNjcmlwdFVSTCA9IHRoaXMuc2V0dXBTY3JpcHRVUkwoKTtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuYXN5bmNTY3JpcHRMb2FkZXJHZXRTY3JpcHRMb2FkZXJJRCgpO1xuICAgICAgICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgICAgICAgZ2xvYmFsTmFtZSA9IF9vcHRpb25zLmdsb2JhbE5hbWUsXG4gICAgICAgICAgICBjYWxsYmFja05hbWUgPSBfb3B0aW9ucy5jYWxsYmFja05hbWUsXG4gICAgICAgICAgICBzY3JpcHRJZCA9IF9vcHRpb25zLnNjcmlwdElkOyAvLyBjaGVjayBpZiBnbG9iYWwgb2JqZWN0IGFscmVhZHkgYXR0YWNoZWQgdG8gd2luZG93XG5cbiAgICAgICAgaWYgKGdsb2JhbE5hbWUgJiYgdHlwZW9mIHdpbmRvd1tnbG9iYWxOYW1lXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIFNDUklQVF9NQVBbc2NyaXB0VVJMXSA9IHtcbiAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgIG9ic2VydmVyczoge31cbiAgICAgICAgICB9O1xuICAgICAgICB9IC8vIGNoZWNrIGlmIHNjcmlwdCBsb2FkaW5nIGFscmVhZHlcblxuXG4gICAgICAgIGlmIChTQ1JJUFRfTUFQW3NjcmlwdFVSTF0pIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBTQ1JJUFRfTUFQW3NjcmlwdFVSTF07IC8vIGlmIGxvYWRlZCBvciBlcnJvcmVkIHRoZW4gXCJmaW5pc2hcIlxuXG4gICAgICAgICAgaWYgKGVudHJ5ICYmIChlbnRyeS5sb2FkZWQgfHwgZW50cnkuZXJyb3JlZCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXN5bmNTY3JpcHRMb2FkZXJIYW5kbGVMb2FkKGVudHJ5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IC8vIGlmIHN0aWxsIGxvYWRpbmcgdGhlbiBjYWxsYmFjayB0byBvYnNlcnZlciBxdWV1ZVxuXG5cbiAgICAgICAgICBlbnRyeS5vYnNlcnZlcnNba2V5XSA9IGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5hc3luY1NjcmlwdExvYWRlckhhbmRsZUxvYWQoZW50cnkpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgICogaGFzbid0IHN0YXJ0ZWQgbG9hZGluZ1xuICAgICAgICAgKiBzdGFydCB0aGUgXCJtYWdpY1wiXG4gICAgICAgICAqIHNldHVwIHNjcmlwdCB0byBsb2FkIGFuZCBvYnNlcnZlcnNcbiAgICAgICAgICovXG5cblxuICAgICAgICB2YXIgb2JzZXJ2ZXJzID0ge307XG5cbiAgICAgICAgb2JzZXJ2ZXJzW2tleV0gPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLmFzeW5jU2NyaXB0TG9hZGVySGFuZGxlTG9hZChlbnRyeSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgU0NSSVBUX01BUFtzY3JpcHRVUkxdID0ge1xuICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgb2JzZXJ2ZXJzOiBvYnNlcnZlcnNcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRVUkw7XG4gICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNjcmlwdElkKSB7XG4gICAgICAgICAgc2NyaXB0LmlkID0gc2NyaXB0SWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FsbE9ic2VydmVyRnVuY0FuZFJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gY2FsbE9ic2VydmVyRnVuY0FuZFJlbW92ZU9ic2VydmVyKGZ1bmMpIHtcbiAgICAgICAgICBpZiAoU0NSSVBUX01BUFtzY3JpcHRVUkxdKSB7XG4gICAgICAgICAgICB2YXIgbWFwRW50cnkgPSBTQ1JJUFRfTUFQW3NjcmlwdFVSTF07XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzTWFwID0gbWFwRW50cnkub2JzZXJ2ZXJzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBvYnNLZXkgaW4gb2JzZXJ2ZXJzTWFwKSB7XG4gICAgICAgICAgICAgIGlmIChmdW5jKG9ic2VydmVyc01hcFtvYnNLZXldKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYnNlcnZlcnNNYXBbb2JzS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2FsbGJhY2tOYW1lICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB3aW5kb3dbY2FsbGJhY2tOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMuYXN5bmNTY3JpcHRMb2FkZXJUcmlnZ2VyT25TY3JpcHRMb2FkZWQoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgbWFwRW50cnkgPSBTQ1JJUFRfTUFQW3NjcmlwdFVSTF07XG5cbiAgICAgICAgICBpZiAobWFwRW50cnkpIHtcbiAgICAgICAgICAgIG1hcEVudHJ5LmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsT2JzZXJ2ZXJGdW5jQW5kUmVtb3ZlT2JzZXJ2ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgICAgIGlmIChjYWxsYmFja05hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvYnNlcnZlcihtYXBFbnRyeSk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBtYXBFbnRyeSA9IFNDUklQVF9NQVBbc2NyaXB0VVJMXTtcblxuICAgICAgICAgIGlmIChtYXBFbnRyeSkge1xuICAgICAgICAgICAgbWFwRW50cnkuZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsT2JzZXJ2ZXJGdW5jQW5kUmVtb3ZlT2JzZXJ2ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyKG1hcEVudHJ5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0YWcgc2NyaXB0XG4gICAgICAgIHZhciBzY3JpcHRVUkwgPSB0aGlzLl9fc2NyaXB0VVJMO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnJlbW92ZU9uVW5tb3VudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhciBhbGxTY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFNjcmlwdHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhbGxTY3JpcHRzW2ldLnNyYy5pbmRleE9mKHNjcmlwdFVSTCkgPiAtMSkge1xuICAgICAgICAgICAgICBpZiAoYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGFsbFNjcmlwdHNbaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIENsZWFuIHRoZSBvYnNlcnZlciBlbnRyeVxuXG5cbiAgICAgICAgdmFyIG1hcEVudHJ5ID0gU0NSSVBUX01BUFtzY3JpcHRVUkxdO1xuXG4gICAgICAgIGlmIChtYXBFbnRyeSkge1xuICAgICAgICAgIGRlbGV0ZSBtYXBFbnRyeS5vYnNlcnZlcnNbdGhpcy5hc3luY1NjcmlwdExvYWRlckdldFNjcmlwdExvYWRlcklEKCldO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlT25Vbm1vdW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWxldGUgU0NSSVBUX01BUFtzY3JpcHRVUkxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIGdsb2JhbE5hbWUgPSBvcHRpb25zLmdsb2JhbE5hbWU7IC8vIHJlbW92ZSBhc3luY1NjcmlwdE9uTG9hZCBmcm9tIGNoaWxkUHJvcHNcblxuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgYXN5bmNTY3JpcHRPbkxvYWQgPSBfdGhpcyRwcm9wcy5hc3luY1NjcmlwdE9uTG9hZCxcbiAgICAgICAgICAgIGZvcndhcmRlZFJlZiA9IF90aGlzJHByb3BzLmZvcndhcmRlZFJlZixcbiAgICAgICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiYXN5bmNTY3JpcHRPbkxvYWRcIiwgXCJmb3J3YXJkZWRSZWZcIl0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cblxuICAgICAgICBpZiAoZ2xvYmFsTmFtZSAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgY2hpbGRQcm9wc1tnbG9iYWxOYW1lXSA9IHR5cGVvZiB3aW5kb3dbZ2xvYmFsTmFtZV0gIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbZ2xvYmFsTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZFByb3BzLnJlZiA9IGZvcndhcmRlZFJlZjtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgY2hpbGRQcm9wcyk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQXN5bmNTY3JpcHRMb2FkZXI7XG4gICAgfShDb21wb25lbnQpOyAvLyBOb3RlIHRoZSBzZWNvbmQgcGFyYW0gXCJyZWZcIiBwcm92aWRlZCBieSBSZWFjdC5mb3J3YXJkUmVmLlxuICAgIC8vIFdlIGNhbiBwYXNzIGl0IGFsb25nIHRvIEFzeW5jU2NyaXB0TG9hZGVyIGFzIGEgcmVndWxhciBwcm9wLCBlLmcuIFwiZm9yd2FyZGVkUmVmXCJcbiAgICAvLyBBbmQgaXQgY2FuIHRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIENvbXBvbmVudC5cblxuXG4gICAgdmFyIEZvcndhcmRlZENvbXBvbmVudCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFzeW5jU2NyaXB0TG9hZGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgZm9yd2FyZGVkUmVmOiByZWZcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBGb3J3YXJkZWRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBcIkFzeW5jU2NyaXB0TG9hZGVyKFwiICsgd3JhcHBlZENvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgICBGb3J3YXJkZWRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgICAgYXN5bmNTY3JpcHRPbkxvYWQ6IFByb3BUeXBlcy5mdW5jXG4gICAgfTtcbiAgICByZXR1cm4gaG9pc3RTdGF0aWNzKEZvcndhcmRlZENvbXBvbmVudCwgV3JhcHBlZENvbXBvbmVudCk7XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFYQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFUQTtBQUNBO0FBV0E7QUF6R0E7QUFDQTtBQTJHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBQ0E7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQWdCQTtBQTNNQTtBQTZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBL05BO0FBaU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-async-script/lib/esm/async-script-loader.js\n"); - -/***/ }), - -/***/ "../node_modules/react-confetti/dist/react-confetti.min.js": -/*!*****************************************************************!*\ - !*** ../node_modules/react-confetti/dist/react-confetti.min.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n!function (t, e) {\n \"object\" == ( false ? undefined : _typeof(exports)) && \"object\" == ( false ? undefined : _typeof(module)) ? module.exports = e(__webpack_require__(/*! react */ \"../node_modules/react/index.js\")) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! react */ \"../node_modules/react/index.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (e),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;\n}(\"undefined\" != typeof self ? self : this, function (t) {\n return function (t) {\n var e = {};\n\n function n(r) {\n if (e[r]) return e[r].exports;\n var i = e[r] = {\n i: r,\n l: !1,\n exports: {}\n };\n return t[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports;\n }\n\n return n.m = t, n.c = e, n.d = function (t, e, r) {\n n.o(t, e) || Object.defineProperty(t, e, {\n enumerable: !0,\n get: r\n });\n }, n.r = function (t) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(t, \"__esModule\", {\n value: !0\n });\n }, n.t = function (t, e) {\n if (1 & e && (t = n(t)), 8 & e) return t;\n if (4 & e && \"object\" == _typeof(t) && t && t.__esModule) return t;\n var r = Object.create(null);\n if (n.r(r), Object.defineProperty(r, \"default\", {\n enumerable: !0,\n value: t\n }), 2 & e && \"string\" != typeof t) for (var i in t) {\n n.d(r, i, function (e) {\n return t[e];\n }.bind(null, i));\n }\n return r;\n }, n.n = function (t) {\n var e = t && t.__esModule ? function () {\n return t[\"default\"];\n } : function () {\n return t;\n };\n return n.d(e, \"a\", e), e;\n }, n.o = function (t, e) {\n return Object.prototype.hasOwnProperty.call(t, e);\n }, n.p = \"\", n(n.s = 2);\n }([function (e, n) {\n e.exports = t;\n }, function (t, e, n) {\n \"use strict\";\n\n var r = {\n linear: function linear(t, e, n, r) {\n return (n - e) * t / r + e;\n },\n easeInQuad: function easeInQuad(t, e, n, r) {\n return (n - e) * (t /= r) * t + e;\n },\n easeOutQuad: function easeOutQuad(t, e, n, r) {\n return -(n - e) * (t /= r) * (t - 2) + e;\n },\n easeInOutQuad: function easeInOutQuad(t, e, n, r) {\n var i = n - e;\n return (t /= r / 2) < 1 ? i / 2 * t * t + e : -i / 2 * (--t * (t - 2) - 1) + e;\n },\n easeInCubic: function easeInCubic(t, e, n, r) {\n return (n - e) * (t /= r) * t * t + e;\n },\n easeOutCubic: function easeOutCubic(t, e, n, r) {\n return (n - e) * ((t = t / r - 1) * t * t + 1) + e;\n },\n easeInOutCubic: function easeInOutCubic(t, e, n, r) {\n var i = n - e;\n return (t /= r / 2) < 1 ? i / 2 * t * t * t + e : i / 2 * ((t -= 2) * t * t + 2) + e;\n },\n easeInQuart: function easeInQuart(t, e, n, r) {\n return (n - e) * (t /= r) * t * t * t + e;\n },\n easeOutQuart: function easeOutQuart(t, e, n, r) {\n return -(n - e) * ((t = t / r - 1) * t * t * t - 1) + e;\n },\n easeInOutQuart: function easeInOutQuart(t, e, n, r) {\n var i = n - e;\n return (t /= r / 2) < 1 ? i / 2 * t * t * t * t + e : -i / 2 * ((t -= 2) * t * t * t - 2) + e;\n },\n easeInQuint: function easeInQuint(t, e, n, r) {\n return (n - e) * (t /= r) * t * t * t * t + e;\n },\n easeOutQuint: function easeOutQuint(t, e, n, r) {\n return (n - e) * ((t = t / r - 1) * t * t * t * t + 1) + e;\n },\n easeInOutQuint: function easeInOutQuint(t, e, n, r) {\n var i = n - e;\n return (t /= r / 2) < 1 ? i / 2 * t * t * t * t * t + e : i / 2 * ((t -= 2) * t * t * t * t + 2) + e;\n },\n easeInSine: function easeInSine(t, e, n, r) {\n var i = n - e;\n return -i * Math.cos(t / r * (Math.PI / 2)) + i + e;\n },\n easeOutSine: function easeOutSine(t, e, n, r) {\n return (n - e) * Math.sin(t / r * (Math.PI / 2)) + e;\n },\n easeInOutSine: function easeInOutSine(t, e, n, r) {\n return -(n - e) / 2 * (Math.cos(Math.PI * t / r) - 1) + e;\n },\n easeInExpo: function easeInExpo(t, e, n, r) {\n return 0 == t ? e : (n - e) * Math.pow(2, 10 * (t / r - 1)) + e;\n },\n easeOutExpo: function easeOutExpo(t, e, n, r) {\n var i = n - e;\n return t == r ? e + i : i * (1 - Math.pow(2, -10 * t / r)) + e;\n },\n easeInOutExpo: function easeInOutExpo(t, e, n, r) {\n var i = n - e;\n return 0 === t ? e : t === r ? e + i : (t /= r / 2) < 1 ? i / 2 * Math.pow(2, 10 * (t - 1)) + e : i / 2 * (2 - Math.pow(2, -10 * --t)) + e;\n },\n easeInCirc: function easeInCirc(t, e, n, r) {\n return -(n - e) * (Math.sqrt(1 - (t /= r) * t) - 1) + e;\n },\n easeOutCirc: function easeOutCirc(t, e, n, r) {\n return (n - e) * Math.sqrt(1 - (t = t / r - 1) * t) + e;\n },\n easeInOutCirc: function easeInOutCirc(t, e, n, r) {\n var i = n - e;\n return (t /= r / 2) < 1 ? -i / 2 * (Math.sqrt(1 - t * t) - 1) + e : i / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + e;\n },\n easeInElastic: function easeInElastic(t, e, n, r) {\n var i,\n o,\n a,\n c = n - e;\n return a = 1.70158, 0 === t ? e : 1 == (t /= r) ? e + c : ((o = 0) || (o = .3 * r), (i = c) < Math.abs(c) ? (i = c, a = o / 4) : a = o / (2 * Math.PI) * Math.asin(c / i), -i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * r - a) * (2 * Math.PI) / o) + e);\n },\n easeOutElastic: function easeOutElastic(t, e, n, r) {\n var i,\n o,\n a,\n c = n - e;\n return a = 1.70158, 0 === t ? e : 1 == (t /= r) ? e + c : ((o = 0) || (o = .3 * r), (i = c) < Math.abs(c) ? (i = c, a = o / 4) : a = o / (2 * Math.PI) * Math.asin(c / i), i * Math.pow(2, -10 * t) * Math.sin((t * r - a) * (2 * Math.PI) / o) + c + e);\n },\n easeInOutElastic: function easeInOutElastic(t, e, n, r) {\n var i,\n o,\n a,\n c = n - e;\n return a = 1.70158, 0 === t ? e : 2 == (t /= r / 2) ? e + c : ((o = 0) || (o = r * (.3 * 1.5)), (i = c) < Math.abs(c) ? (i = c, a = o / 4) : a = o / (2 * Math.PI) * Math.asin(c / i), t < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * r - a) * (2 * Math.PI) / o) * -.5 + e : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * r - a) * (2 * Math.PI) / o) * .5 + c + e);\n },\n easeInBack: function easeInBack(t, e, n, r, i) {\n return void 0 === i && (i = 1.70158), (n - e) * (t /= r) * t * ((i + 1) * t - i) + e;\n },\n easeOutBack: function easeOutBack(t, e, n, r, i) {\n return void 0 === i && (i = 1.70158), (n - e) * ((t = t / r - 1) * t * ((i + 1) * t + i) + 1) + e;\n },\n easeInOutBack: function easeInOutBack(t, e, n, r, i) {\n var o = n - e;\n return void 0 === i && (i = 1.70158), (t /= r / 2) < 1 ? o / 2 * (t * t * ((1 + (i *= 1.525)) * t - i)) + e : o / 2 * ((t -= 2) * t * ((1 + (i *= 1.525)) * t + i) + 2) + e;\n },\n easeInBounce: function easeInBounce(t, e, n, i) {\n var o = n - e;\n return o - r.easeOutBounce(i - t, 0, o, i) + e;\n },\n easeOutBounce: function easeOutBounce(t, e, n, r) {\n var i = n - e;\n return (t /= r) < 1 / 2.75 ? i * (7.5625 * t * t) + e : t < 2 / 2.75 ? i * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + e : t < 2.5 / 2.75 ? i * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + e : i * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + e;\n },\n easeInOutBounce: function easeInOutBounce(t, e, n, i) {\n var o = n - e;\n return t < i / 2 ? .5 * r.easeInBounce(2 * t, 0, o, i) + e : .5 * r.easeOutBounce(2 * t - i, 0, o, i) + .5 * o + e;\n }\n };\n t.exports = r;\n }, function (t, e, n) {\n t.exports = n(3);\n }, function (t, e, n) {\n \"use strict\";\n\n n.r(e);\n var r,\n i,\n o = n(0),\n a = n.n(o),\n c = n(1),\n s = n.n(c);\n\n function u(t, e) {\n return t + Math.random() * (e - t);\n }\n\n function f(t, e) {\n for (var n = 0; n < e.length; n++) {\n var r = e[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(t, r.key, r);\n }\n }\n\n function h(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n }\n\n !function (t) {\n t[t.Circle = 0] = \"Circle\", t[t.Square = 1] = \"Square\", t[t.Strip = 2] = \"Strip\";\n }(r || (r = {})), function (t) {\n t[t.Positive = 1] = \"Positive\", t[t.Negative = -1] = \"Negative\";\n }(i || (i = {}));\n\n var l = function () {\n function t(e, n, r, o) {\n !function (t, e) {\n if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, t), h(this, \"context\", void 0), h(this, \"radius\", void 0), h(this, \"x\", void 0), h(this, \"y\", void 0), h(this, \"w\", void 0), h(this, \"h\", void 0), h(this, \"vx\", void 0), h(this, \"vy\", void 0), h(this, \"shape\", void 0), h(this, \"angle\", void 0), h(this, \"angularSpin\", void 0), h(this, \"color\", void 0), h(this, \"rotateY\", void 0), h(this, \"rotationDirection\", void 0), h(this, \"getOptions\", void 0), this.getOptions = n;\n var a,\n c,\n s = this.getOptions(),\n f = s.colors,\n l = s.initialVelocityX,\n p = s.initialVelocityY;\n this.context = e, this.x = r, this.y = o, this.w = u(5, 20), this.h = u(5, 20), this.radius = u(5, 10), this.vx = u(-l, l), this.vy = u(-p, 0), this.shape = (a = 0, c = 2, Math.floor(a + Math.random() * (c - a + 1))), this.angle = u(0, 360) * Math.PI / 180, this.angularSpin = u(-.2, .2), this.color = f[Math.floor(Math.random() * f.length)], this.rotateY = u(0, 1), this.rotationDirection = u(0, 1) ? i.Positive : i.Negative;\n }\n\n var e, n, o;\n return e = t, (n = [{\n key: \"update\",\n value: function value() {\n var t = this.getOptions(),\n e = t.gravity,\n n = t.wind,\n o = t.friction,\n a = t.opacity,\n c = t.drawShape;\n this.x += this.vx, this.y += this.vy, this.vy += e, this.vx += n, this.vx *= o, this.vy *= o, this.rotateY >= 1 && this.rotationDirection === i.Positive ? this.rotationDirection = i.Negative : this.rotateY <= -1 && this.rotationDirection === i.Negative && (this.rotationDirection = i.Positive);\n var s = .1 * this.rotationDirection;\n if (this.rotateY += s, this.angle += this.angularSpin, this.context.save(), this.context.translate(this.x, this.y), this.context.rotate(this.angle), this.context.scale(1, this.rotateY), this.context.rotate(this.angle), this.context.beginPath(), this.context.fillStyle = this.color, this.context.strokeStyle = this.color, this.context.globalAlpha = a, this.context.lineCap = \"round\", this.context.lineWidth = 2, c && \"function\" == typeof c) c.call(this, this.context);else switch (this.shape) {\n case r.Circle:\n this.context.beginPath(), this.context.arc(0, 0, this.radius, 0, 2 * Math.PI), this.context.fill();\n break;\n\n case r.Square:\n this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);\n break;\n\n case r.Strip:\n this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);\n }\n this.context.closePath(), this.context.restore();\n }\n }]) && f(e.prototype, n), o && f(e, o), t;\n }();\n\n function p(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n }\n\n var v = function t(e, n) {\n var r = this;\n !function (t, e) {\n if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, t), p(this, \"canvas\", void 0), p(this, \"context\", void 0), p(this, \"getOptions\", void 0), p(this, \"x\", 0), p(this, \"y\", 0), p(this, \"w\", 0), p(this, \"h\", 0), p(this, \"lastNumberOfPieces\", 0), p(this, \"tweenInitTime\", Date.now()), p(this, \"particles\", []), p(this, \"particlesGenerated\", 0), p(this, \"removeParticleAt\", function (t) {\n r.particles.splice(t, 1);\n }), p(this, \"getParticle\", function () {\n var t = u(r.x, r.w + r.x),\n e = u(r.y, r.h + r.y);\n return new l(r.context, r.getOptions, t, e);\n }), p(this, \"animate\", function () {\n var t = r.canvas,\n e = r.context,\n n = r.particlesGenerated,\n i = r.lastNumberOfPieces,\n o = r.getOptions(),\n a = o.run,\n c = o.recycle,\n s = o.numberOfPieces,\n u = o.debug,\n f = o.tweenFunction,\n h = o.tweenDuration;\n if (!a) return !1;\n var l = r.particles.length,\n p = c ? l : n,\n v = Date.now();\n\n if (p < s) {\n i !== s && (r.tweenInitTime = v, r.lastNumberOfPieces = s);\n\n for (var y = r.tweenInitTime, d = f(v - y > h ? h : Math.max(0, v - y), p, s, h), b = Math.round(d - p), g = 0; g < b; g++) {\n r.particles.push(r.getParticle());\n }\n\n r.particlesGenerated += b;\n }\n\n return u && (e.font = \"12px sans-serif\", e.fillStyle = \"#333\", e.textAlign = \"right\", e.fillText(\"Particles: \".concat(l), t.width - 10, t.height - 20)), r.particles.forEach(function (e, n) {\n e.update(), (e.y > t.height || e.y < -100 || e.x > t.width + 100 || e.x < -100) && (c && p <= s ? r.particles[n] = r.getParticle() : r.removeParticleAt(n));\n }), l > 0 || p < s;\n }), this.canvas = e;\n var i = this.canvas.getContext(\"2d\");\n if (!i) throw new Error(\"Could not get canvas context\");\n this.context = i, this.getOptions = n;\n };\n\n function y(t, e) {\n var n = Object.keys(t);\n\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(t);\n e && (r = r.filter(function (e) {\n return Object.getOwnPropertyDescriptor(t, e).enumerable;\n })), n.push.apply(n, r);\n }\n\n return n;\n }\n\n function d(t, e) {\n for (var n = 0; n < e.length; n++) {\n var r = e[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(t, r.key, r);\n }\n }\n\n function b(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n }\n\n var g = {\n width: \"undefined\" != typeof window ? window.innerWidth : 300,\n height: \"undefined\" != typeof window ? window.innerHeight : 200,\n numberOfPieces: 200,\n friction: .99,\n wind: 0,\n gravity: .1,\n initialVelocityX: 4,\n initialVelocityY: 10,\n colors: [\"#f44336\", \"#e91e63\", \"#9c27b0\", \"#673ab7\", \"#3f51b5\", \"#2196f3\", \"#03a9f4\", \"#00bcd4\", \"#009688\", \"#4CAF50\", \"#8BC34A\", \"#CDDC39\", \"#FFEB3B\", \"#FFC107\", \"#FF9800\", \"#FF5722\", \"#795548\"],\n opacity: 1,\n debug: !1,\n tweenFunction: s.a.easeInOutQuad,\n tweenDuration: 5e3,\n recycle: !0,\n run: !0\n },\n O = function () {\n function t(e, n) {\n var r = this;\n !function (t, e) {\n if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, t), b(this, \"canvas\", void 0), b(this, \"context\", void 0), b(this, \"_options\", void 0), b(this, \"generator\", void 0), b(this, \"rafId\", void 0), b(this, \"setOptionsWithDefaults\", function (t) {\n var e = {\n confettiSource: {\n x: 0,\n y: 0,\n w: r.canvas.width,\n h: 0\n }\n };\n r._options = function (t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = null != arguments[e] ? arguments[e] : {};\n e % 2 ? y(n, !0).forEach(function (e) {\n b(t, e, n[e]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(n).forEach(function (e) {\n Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));\n });\n }\n\n return t;\n }({}, e, {}, g, {}, t), Object.assign(r, t.confettiSource);\n }), b(this, \"update\", function () {\n var t = r.options,\n e = t.run,\n n = t.onConfettiComplete,\n i = r.canvas,\n o = r.context;\n e && (o.fillStyle = \"white\", o.clearRect(0, 0, i.width, i.height)), r.generator.animate() ? r.rafId = requestAnimationFrame(r.update) : (n && \"function\" == typeof n && r.generator.particlesGenerated > 0 && n.call(r, r), r._options.run = !1);\n }), b(this, \"reset\", function () {\n r.generator && r.generator.particlesGenerated > 0 && (r.generator.particlesGenerated = 0, r.generator.particles = [], r.generator.lastNumberOfPieces = 0);\n }), b(this, \"stop\", function () {\n r.options = {\n run: !1\n }, r.rafId && (cancelAnimationFrame(r.rafId), r.rafId = void 0);\n }), this.canvas = e;\n var i = this.canvas.getContext(\"2d\");\n if (!i) throw new Error(\"Could not get canvas context\");\n this.context = i, this.generator = new v(this.canvas, function () {\n return r.options;\n }), this.options = n, this.update();\n }\n\n var e, n, r;\n return e = t, (n = [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(t) {\n var e = this._options && this._options.run,\n n = this._options && this._options.recycle;\n this.setOptionsWithDefaults(t), this.generator && (Object.assign(this.generator, this.options.confettiSource), \"boolean\" == typeof t.recycle && t.recycle && !1 === n && (this.generator.lastNumberOfPieces = this.generator.particles.length)), \"boolean\" == typeof t.run && t.run && !1 === e && this.update();\n }\n }]) && d(e.prototype, n), r && d(e, r), t;\n }();\n\n function w(t) {\n return function (t) {\n if (Array.isArray(t)) {\n for (var e = 0, n = new Array(t.length); e < t.length; e++) {\n n[e] = t[e];\n }\n\n return n;\n }\n }(t) || function (t) {\n if (Symbol.iterator in Object(t) || \"[object Arguments]\" === Object.prototype.toString.call(t)) return Array.from(t);\n }(t) || function () {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }();\n }\n\n function m(t) {\n return (m = \"function\" == typeof Symbol && \"symbol\" == _typeof(Symbol.iterator) ? function (t) {\n return _typeof(t);\n } : function (t) {\n return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : _typeof(t);\n })(t);\n }\n\n function x() {\n return (x = Object.assign || function (t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e];\n\n for (var r in n) {\n Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]);\n }\n }\n\n return t;\n }).apply(this, arguments);\n }\n\n function P(t, e) {\n var n = Object.keys(t);\n\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(t);\n e && (r = r.filter(function (e) {\n return Object.getOwnPropertyDescriptor(t, e).enumerable;\n })), n.push.apply(n, r);\n }\n\n return n;\n }\n\n function j(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = null != arguments[e] ? arguments[e] : {};\n e % 2 ? P(n, !0).forEach(function (e) {\n D(t, e, n[e]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : P(n).forEach(function (e) {\n Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));\n });\n }\n\n return t;\n }\n\n function M(t, e) {\n return function (t) {\n if (Array.isArray(t)) return t;\n }(t) || function (t, e) {\n var n = [],\n r = !0,\n i = !1,\n o = void 0;\n\n try {\n for (var a, c = t[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !e || n.length !== e); r = !0) {\n ;\n }\n } catch (t) {\n i = !0, o = t;\n } finally {\n try {\n r || null == c[\"return\"] || c[\"return\"]();\n } finally {\n if (i) throw o;\n }\n }\n\n return n;\n }(t, e) || function () {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }();\n }\n\n function I(t, e) {\n for (var n = 0; n < e.length; n++) {\n var r = e[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(t, r.key, r);\n }\n }\n\n function S(t) {\n return (S = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n })(t);\n }\n\n function C(t) {\n if (void 0 === t) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return t;\n }\n\n function E(t, e) {\n return (E = Object.setPrototypeOf || function (t, e) {\n return t.__proto__ = e, t;\n })(t, e);\n }\n\n function D(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n }\n\n n.d(e, \"ReactConfetti\", function () {\n return A;\n });\n\n var _ = function (t) {\n function e(t) {\n var n, r;\n !function (t, e) {\n if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, e);\n\n for (var i = arguments.length, o = new Array(i > 1 ? i - 1 : 0), c = 1; c < i; c++) {\n o[c - 1] = arguments[c];\n }\n\n return r = function (t, e) {\n return !e || \"object\" !== m(e) && \"function\" != typeof e ? C(t) : e;\n }(this, (n = S(e)).call.apply(n, [this, t].concat(o))), D(C(r), \"canvas\", a.a.createRef()), D(C(r), \"confetti\", void 0), r.canvas = t.canvasRef || a.a.createRef(), r;\n }\n\n var n, r, i;\n return function (t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), e && E(t, e);\n }(e, o[\"Component\"]), n = e, (r = [{\n key: \"componentDidMount\",\n value: function value() {\n if (this.canvas.current) {\n var t = k(this.props)[0];\n this.confetti = new O(this.canvas.current, t);\n }\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function value(t) {\n var e = k(t)[0];\n this.confetti && (this.confetti.options = e);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function value() {\n this.confetti && this.confetti.stop(), this.confetti = void 0;\n }\n }, {\n key: \"render\",\n value: function value() {\n var t = M(k(this.props), 2),\n e = t[0],\n n = t[1],\n r = j({\n zIndex: 2,\n position: \"absolute\",\n pointerEvents: \"none\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }, n.style);\n return a.a.createElement(\"canvas\", x({\n width: e.width,\n height: e.height,\n ref: this.canvas\n }, n, {\n style: r\n }));\n }\n }]) && I(n.prototype, r), i && I(n, i), e;\n }();\n\n function k(t) {\n var e = {},\n n = {},\n r = [].concat(w(Object.keys(g)), [\"confettiSource\", \"drawShape\", \"onConfettiComplete\"]),\n i = [\"canvasRef\"];\n\n for (var o in t) {\n var a = t[o];\n r.includes(o) ? e[o] = a : i.includes(o) ? i[o] = a : n[o] = a;\n }\n\n return [e, n, {}];\n }\n\n D(_, \"defaultProps\", j({}, g)), D(_, \"displayName\", \"ReactConfetti\");\n var A = a.a.forwardRef(function (t, e) {\n return a.a.createElement(_, x({\n canvasRef: e\n }, t));\n });\n e[\"default\"] = A;\n }])[\"default\"];\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvbmZldHRpL2Rpc3QvcmVhY3QtY29uZmV0dGkubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL1JlYWN0Q29uZmV0dGkvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uPzA1YWEiLCJ3ZWJwYWNrOi8vL1JlYWN0Q29uZmV0dGkvd2VicGFjay9ib290c3RyYXA/ZGY4MSIsIndlYnBhY2s6Ly8vd2VicGFjazovUmVhY3RDb25mZXR0aS9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9P2FhZDAiLCJ3ZWJwYWNrOi8vL1JlYWN0Q29uZmV0dGkvbm9kZV9tb2R1bGVzL3R3ZWVuLWZ1bmN0aW9ucy9pbmRleC5qcz83YmIwIiwid2VicGFjazovLy9SZWFjdENvbmZldHRpL3NyYy9QYXJ0aWNsZS50cz85OTEwIiwid2VicGFjazovLy9SZWFjdENvbmZldHRpL3NyYy91dGlscy50cz8wYWUwIiwid2VicGFjazovLy9SZWFjdENvbmZldHRpL3NyYy9QYXJ0aWNsZUdlbmVyYXRvci50cz9iYzYxIiwid2VicGFjazovLy9SZWFjdENvbmZldHRpL3NyYy9Db25mZXR0aS50cz9jYmFkIiwid2VicGFjazovLy9SZWFjdENvbmZldHRpL3NyYy9SZWFjdENvbmZldHRpLnRzeD80NmYwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Q29uZmV0dGlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RDb25mZXR0aVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsIid1c2Ugc3RyaWN0JztcblxuLy8gdDogY3VycmVudCB0aW1lLCBiOiBiZWdpbm5pbmcgdmFsdWUsIF9jOiBmaW5hbCB2YWx1ZSwgZDogdG90YWwgZHVyYXRpb25cbnZhciB0d2VlbkZ1bmN0aW9ucyA9IHtcbiAgbGluZWFyOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiBjICogdCAvIGQgKyBiO1xuICB9LFxuICBlYXNlSW5RdWFkOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiBjICogKHQgLz0gZCkgKiB0ICsgYjtcbiAgfSxcbiAgZWFzZU91dFF1YWQ6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgcmV0dXJuIC1jICogKHQgLz0gZCkgKiAodCAtIDIpICsgYjtcbiAgfSxcbiAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICBpZiAoKHQgLz0gZCAvIDIpIDwgMSkge1xuICAgICAgcmV0dXJuIGMgLyAyICogdCAqIHQgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gLWMgLyAyICogKCgtLXQpICogKHQgLSAyKSAtIDEpICsgYjtcbiAgICB9XG4gIH0sXG4gIGVhc2VJbkN1YmljOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiBjICogKHQgLz0gZCkgKiB0ICogdCArIGI7XG4gIH0sXG4gIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogdCArIDEpICsgYjtcbiAgfSxcbiAgZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpIHtcbiAgICAgIHJldHVybiBjIC8gMiAqIHQgKiB0ICogdCArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjIC8gMiAqICgodCAtPSAyKSAqIHQgKiB0ICsgMikgKyBiO1xuICAgIH1cbiAgfSxcbiAgZWFzZUluUXVhcnQ6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgcmV0dXJuIGMgKiAodCAvPSBkKSAqIHQgKiB0ICogdCArIGI7XG4gIH0sXG4gIGVhc2VPdXRRdWFydDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICByZXR1cm4gLWMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKiB0IC0gMSkgKyBiO1xuICB9LFxuICBlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICBpZiAoKHQgLz0gZCAvIDIpIDwgMSkge1xuICAgICAgcmV0dXJuIGMgLyAyICogdCAqIHQgKiB0ICogdCArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtYyAvIDIgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgLSAyKSArIGI7XG4gICAgfVxuICB9LFxuICBlYXNlSW5RdWludDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCAqIHQgKiB0ICogdCArIGI7XG4gIH0sXG4gIGVhc2VPdXRRdWludDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogdCAqIHQgKiB0ICsgMSkgKyBiO1xuICB9LFxuICBlYXNlSW5PdXRRdWludDogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICBpZiAoKHQgLz0gZCAvIDIpIDwgMSkge1xuICAgICAgcmV0dXJuIGMgLyAyICogdCAqIHQgKiB0ICogdCAqIHQgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYyAvIDIgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgKiB0ICsgMikgKyBiO1xuICAgIH1cbiAgfSxcbiAgZWFzZUluU2luZTogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICByZXR1cm4gLWMgKiBNYXRoLmNvcyh0IC8gZCAqIChNYXRoLlBJIC8gMikpICsgYyArIGI7XG4gIH0sXG4gIGVhc2VPdXRTaW5lOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiBjICogTWF0aC5zaW4odCAvIGQgKiAoTWF0aC5QSSAvIDIpKSArIGI7XG4gIH0sXG4gIGVhc2VJbk91dFNpbmU6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgcmV0dXJuIC1jIC8gMiAqIChNYXRoLmNvcyhNYXRoLlBJICogdCAvIGQpIC0gMSkgKyBiO1xuICB9LFxuICBlYXNlSW5FeHBvOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiAodD09MCkgPyBiIDogYyAqIE1hdGgucG93KDIsIDEwICogKHQvZCAtIDEpKSArIGI7XG4gIH0sXG4gIGVhc2VPdXRFeHBvOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiAodD09ZCkgPyBiK2MgOiBjICogKC1NYXRoLnBvdygyLCAtMTAgKiB0L2QpICsgMSkgKyBiO1xuICB9LFxuICBlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIGlmICh0ID09PSAwKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9XG4gICAgaWYgKHQgPT09IGQpIHtcbiAgICAgIHJldHVybiBiICsgYztcbiAgICB9XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpIHtcbiAgICAgIHJldHVybiBjIC8gMiAqIE1hdGgucG93KDIsIDEwICogKHQgLSAxKSkgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYyAvIDIgKiAoLU1hdGgucG93KDIsIC0xMCAqIC0tdCkgKyAyKSArIGI7XG4gICAgfVxuICB9LFxuICBlYXNlSW5DaXJjOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiAtYyAqIChNYXRoLnNxcnQoMSAtICh0IC89IGQpICogdCkgLSAxKSArIGI7XG4gIH0sXG4gIGVhc2VPdXRDaXJjOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodCA9IHQgLyBkIC0gMSkgKiB0KSArIGI7XG4gIH0sXG4gIGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpIHtcbiAgICAgIHJldHVybiAtYyAvIDIgKiAoTWF0aC5zcXJ0KDEgLSB0ICogdCkgLSAxKSArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjIC8gMiAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKSArIGI7XG4gICAgfVxuICB9LFxuICBlYXNlSW5FbGFzdGljOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHZhciBhLCBwLCBzO1xuICAgIHMgPSAxLjcwMTU4O1xuICAgIHAgPSAwO1xuICAgIGEgPSBjO1xuICAgIGlmICh0ID09PSAwKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IGVsc2UgaWYgKCh0IC89IGQpID09PSAxKSB7XG4gICAgICByZXR1cm4gYiArIGM7XG4gICAgfVxuICAgIGlmICghcCkge1xuICAgICAgcCA9IGQgKiAwLjM7XG4gICAgfVxuICAgIGlmIChhIDwgTWF0aC5hYnMoYykpIHtcbiAgICAgIGEgPSBjO1xuICAgICAgcyA9IHAgLyA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oYyAvIGEpO1xuICAgIH1cbiAgICByZXR1cm4gLShhICogTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAqIGQgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSkgKyBiO1xuICB9LFxuICBlYXNlT3V0RWxhc3RpYzogZnVuY3Rpb24odCwgYiwgX2MsIGQpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICB2YXIgYSwgcCwgcztcbiAgICBzID0gMS43MDE1ODtcbiAgICBwID0gMDtcbiAgICBhID0gYztcbiAgICBpZiAodCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfSBlbHNlIGlmICgodCAvPSBkKSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGIgKyBjO1xuICAgIH1cbiAgICBpZiAoIXApIHtcbiAgICAgIHAgPSBkICogMC4zO1xuICAgIH1cbiAgICBpZiAoYSA8IE1hdGguYWJzKGMpKSB7XG4gICAgICBhID0gYztcbiAgICAgIHMgPSBwIC8gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKGMgLyBhKTtcbiAgICB9XG4gICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKCh0ICogZCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgYyArIGI7XG4gIH0sXG4gIGVhc2VJbk91dEVsYXN0aWM6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgdmFyIGEsIHAsIHM7XG4gICAgcyA9IDEuNzAxNTg7XG4gICAgcCA9IDA7XG4gICAgYSA9IGM7XG4gICAgaWYgKHQgPT09IDApIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH0gZWxzZSBpZiAoKHQgLz0gZCAvIDIpID09PSAyKSB7XG4gICAgICByZXR1cm4gYiArIGM7XG4gICAgfVxuICAgIGlmICghcCkge1xuICAgICAgcCA9IGQgKiAoMC4zICogMS41KTtcbiAgICB9XG4gICAgaWYgKGEgPCBNYXRoLmFicyhjKSkge1xuICAgICAgYSA9IGM7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjIC8gYSk7XG4gICAgfVxuICAgIGlmICh0IDwgMSkge1xuICAgICAgcmV0dXJuIC0wLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgKiBkIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpICsgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAqIGQgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSAqIDAuNSArIGMgKyBiO1xuICAgIH1cbiAgfSxcbiAgZWFzZUluQmFjazogZnVuY3Rpb24odCwgYiwgX2MsIGQsIHMpIHtcbiAgICB2YXIgYyA9IF9jIC0gYjtcbiAgICBpZiAocyA9PT0gdm9pZCAwKSB7XG4gICAgICBzID0gMS43MDE1ODtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAodCAvPSBkKSAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKSArIGI7XG4gIH0sXG4gIGVhc2VPdXRCYWNrOiBmdW5jdGlvbih0LCBiLCBfYywgZCwgcykge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIGlmIChzID09PSB2b2lkIDApIHtcbiAgICAgIHMgPSAxLjcwMTU4O1xuICAgIH1cbiAgICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxKSArIGI7XG4gIH0sXG4gIGVhc2VJbk91dEJhY2s6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkLCBzKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgaWYgKHMgPT09IHZvaWQgMCkge1xuICAgICAgcyA9IDEuNzAxNTg7XG4gICAgfVxuICAgIGlmICgodCAvPSBkIC8gMikgPCAxKSB7XG4gICAgICByZXR1cm4gYyAvIDIgKiAodCAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCAtIHMpKSArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjIC8gMiAqICgodCAtPSAyKSAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCArIHMpICsgMikgKyBiO1xuICAgIH1cbiAgfSxcbiAgZWFzZUluQm91bmNlOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIHZhciB2O1xuICAgIHYgPSB0d2VlbkZ1bmN0aW9ucy5lYXNlT3V0Qm91bmNlKGQgLSB0LCAwLCBjLCBkKTtcbiAgICByZXR1cm4gYyAtIHYgKyBiO1xuICB9LFxuICBlYXNlT3V0Qm91bmNlOiBmdW5jdGlvbih0LCBiLCBfYywgZCkge1xuICAgIHZhciBjID0gX2MgLSBiO1xuICAgIGlmICgodCAvPSBkKSA8IDEgLyAyLjc1KSB7XG4gICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiB0ICogdCkgKyBiO1xuICAgIH0gZWxzZSBpZiAodCA8IDIgLyAyLjc1KSB7XG4gICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiAodCAtPSAxLjUgLyAyLjc1KSAqIHQgKyAwLjc1KSArIGI7XG4gICAgfSBlbHNlIGlmICh0IDwgMi41IC8gMi43NSkge1xuICAgICAgcmV0dXJuIGMgKiAoNy41NjI1ICogKHQgLT0gMi4yNSAvIDIuNzUpICogdCArIDAuOTM3NSkgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiAodCAtPSAyLjYyNSAvIDIuNzUpICogdCArIDAuOTg0Mzc1KSArIGI7XG4gICAgfVxuICB9LFxuICBlYXNlSW5PdXRCb3VuY2U6IGZ1bmN0aW9uKHQsIGIsIF9jLCBkKSB7XG4gICAgdmFyIGMgPSBfYyAtIGI7XG4gICAgdmFyIHY7XG4gICAgaWYgKHQgPCBkIC8gMikge1xuICAgICAgdiA9IHR3ZWVuRnVuY3Rpb25zLmVhc2VJbkJvdW5jZSh0ICogMiwgMCwgYywgZCk7XG4gICAgICByZXR1cm4gdiAqIDAuNSArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYgPSB0d2VlbkZ1bmN0aW9ucy5lYXNlT3V0Qm91bmNlKHQgKiAyIC0gZCwgMCwgYywgZCk7XG4gICAgICByZXR1cm4gdiAqIDAuNSArIGMgKiAwLjUgKyBiO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB0d2VlbkZ1bmN0aW9ucztcbiIsImltcG9ydCB7IHJhbmRvbVJhbmdlLCByYW5kb21JbnQsIGRlZ3JlZXNUb1JhZHMgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSUNvbmZldHRpT3B0aW9ucyB9IGZyb20gJy4vQ29uZmV0dGknXG5cbmV4cG9ydCBlbnVtIFBhcnRpY2xlU2hhcGUge1xuICBDaXJjbGUgPSAwLFxuICBTcXVhcmUsXG4gIFN0cmlwLFxufVxuXG5lbnVtIFJvdGF0aW9uRGlyZWN0aW9uIHtcbiAgUG9zaXRpdmUgPSAxLFxuICBOZWdhdGl2ZSA9IC0xLFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0aWNsZSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZ2V0T3B0aW9uczogKCkgPT4gSUNvbmZldHRpT3B0aW9ucywgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLmdldE9wdGlvbnMgPSBnZXRPcHRpb25zXG4gICAgY29uc3Qge1xuICAgICAgY29sb3JzLFxuICAgICAgaW5pdGlhbFZlbG9jaXR5WCxcbiAgICAgIGluaXRpYWxWZWxvY2l0eVksXG4gICAgfSA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICAgIHRoaXMueCA9IHhcbiAgICB0aGlzLnkgPSB5XG4gICAgdGhpcy53ID0gcmFuZG9tUmFuZ2UoNSwgMjApXG4gICAgdGhpcy5oID0gcmFuZG9tUmFuZ2UoNSwgMjApXG4gICAgdGhpcy5yYWRpdXMgPSByYW5kb21SYW5nZSg1LCAxMClcbiAgICB0aGlzLnZ4ID0gcmFuZG9tUmFuZ2UoLWluaXRpYWxWZWxvY2l0eVgsIGluaXRpYWxWZWxvY2l0eVgpXG4gICAgdGhpcy52eSA9IHJhbmRvbVJhbmdlKC1pbml0aWFsVmVsb2NpdHlZLCAwKVxuICAgIHRoaXMuc2hhcGUgPSByYW5kb21JbnQoMCwgMilcbiAgICB0aGlzLmFuZ2xlID0gZGVncmVlc1RvUmFkcyhyYW5kb21SYW5nZSgwLCAzNjApKVxuICAgIHRoaXMuYW5ndWxhclNwaW4gPSByYW5kb21SYW5nZSgtMC4yLCAwLjIpXG4gICAgdGhpcy5jb2xvciA9IGNvbG9yc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb2xvcnMubGVuZ3RoKV1cbiAgICB0aGlzLnJvdGF0ZVkgPSByYW5kb21SYW5nZSgwLCAxKVxuICAgIHRoaXMucm90YXRpb25EaXJlY3Rpb24gPSByYW5kb21SYW5nZSgwLCAxKSA/IFJvdGF0aW9uRGlyZWN0aW9uLlBvc2l0aXZlIDogUm90YXRpb25EaXJlY3Rpb24uTmVnYXRpdmVcbiAgfVxuXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuXG4gIHJhZGl1czogbnVtYmVyXG5cbiAgeDogbnVtYmVyXG5cbiAgeTogbnVtYmVyXG5cbiAgdzogbnVtYmVyXG5cbiAgaDogbnVtYmVyXG5cbiAgdng6IG51bWJlclxuXG4gIHZ5OiBudW1iZXJcblxuICBzaGFwZTogUGFydGljbGVTaGFwZVxuXG4gIGFuZ2xlOiBudW1iZXJcblxuICBhbmd1bGFyU3BpbjogbnVtYmVyXG5cbiAgY29sb3I6IHN0cmluZ1xuXG4gIC8vIEFjdHVhbGx5IHVzZWQgYXMgc2NhbGVZIHRvIHNpbXVsYXRlIHJvdGF0aW9uIGNoZWFwbHlcbiAgcm90YXRlWTogbnVtYmVyXG5cbiAgcm90YXRpb25EaXJlY3Rpb246IFJvdGF0aW9uRGlyZWN0aW9uXG5cbiAgZ2V0T3B0aW9uczogKCkgPT4gSUNvbmZldHRpT3B0aW9uc1xuXG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBncmF2aXR5LFxuICAgICAgd2luZCxcbiAgICAgIGZyaWN0aW9uLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIGRyYXdTaGFwZSxcbiAgICB9ID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICB0aGlzLnggKz0gdGhpcy52eFxuICAgIHRoaXMueSArPSB0aGlzLnZ5XG4gICAgdGhpcy52eSArPSBncmF2aXR5XG4gICAgdGhpcy52eCArPSB3aW5kXG4gICAgdGhpcy52eCAqPSBmcmljdGlvblxuICAgIHRoaXMudnkgKj0gZnJpY3Rpb25cbiAgICBpZih0aGlzLnJvdGF0ZVkgPj0gMSAmJiB0aGlzLnJvdGF0aW9uRGlyZWN0aW9uID09PSBSb3RhdGlvbkRpcmVjdGlvbi5Qb3NpdGl2ZSkge1xuICAgICAgdGhpcy5yb3RhdGlvbkRpcmVjdGlvbiA9IFJvdGF0aW9uRGlyZWN0aW9uLk5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmKHRoaXMucm90YXRlWSA8PSAtMSAmJiB0aGlzLnJvdGF0aW9uRGlyZWN0aW9uID09PSBSb3RhdGlvbkRpcmVjdGlvbi5OZWdhdGl2ZSkge1xuICAgICAgdGhpcy5yb3RhdGlvbkRpcmVjdGlvbiA9IFJvdGF0aW9uRGlyZWN0aW9uLlBvc2l0aXZlXG4gICAgfVxuXG4gICAgY29uc3Qgcm90YXRlRGVsdGEgPSAwLjEgKiB0aGlzLnJvdGF0aW9uRGlyZWN0aW9uXG5cbiAgICB0aGlzLnJvdGF0ZVkgKz0gcm90YXRlRGVsdGFcbiAgICB0aGlzLmFuZ2xlICs9IHRoaXMuYW5ndWxhclNwaW5cbiAgICB0aGlzLmNvbnRleHQuc2F2ZSgpXG4gICAgdGhpcy5jb250ZXh0LnRyYW5zbGF0ZSh0aGlzLngsIHRoaXMueSlcbiAgICB0aGlzLmNvbnRleHQucm90YXRlKHRoaXMuYW5nbGUpXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKDEsIHRoaXMucm90YXRlWSlcbiAgICB0aGlzLmNvbnRleHQucm90YXRlKHRoaXMuYW5nbGUpXG4gICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3JcbiAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLmNvbG9yXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eVxuICAgIHRoaXMuY29udGV4dC5saW5lQ2FwID0gJ3JvdW5kJ1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSAyXG4gICAgaWYoZHJhd1NoYXBlICYmIHR5cGVvZiBkcmF3U2hhcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdTaGFwZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoKHRoaXMuc2hhcGUpIHtcbiAgICAgICAgY2FzZSBQYXJ0aWNsZVNoYXBlLkNpcmNsZToge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgICAgIHRoaXMuY29udGV4dC5hcmMoMCwgMCwgdGhpcy5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKVxuICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsKClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGFydGljbGVTaGFwZS5TcXVhcmU6IHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoLXRoaXMudyAvIDIsIC10aGlzLmggLyAyLCB0aGlzLncsIHRoaXMuaClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGFydGljbGVTaGFwZS5TdHJpcDoge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCgtdGhpcy53IC8gNiwgLXRoaXMuaCAvIDIsIHRoaXMudyAvIDMsIHRoaXMuaClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29udGV4dC5jbG9zZVBhdGgoKVxuICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKClcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi9Qb2ludCdcbmltcG9ydCB7IElSZWN0IH0gZnJvbSAnLi9SZWN0J1xuaW1wb3J0IHsgSUNpcmNsZSB9IGZyb20gJy4vQ2lyY2xlJ1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybSh2YWx1ZTogbnVtYmVyLCBtaW46bnVtYmVyLCBtYXg6IG51bWJlcikge1xuICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKGxub3JtOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICByZXR1cm4gKChtYXggLSBtaW4pICogbG5vcm0pICsgbWluXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAodmFsdWU6IG51bWJlciwgc291cmNlTWluOiBudW1iZXIsIHNvdXJjZU1heDogbnVtYmVyLCBkZXN0TWluOiBudW1iZXIsIGRlc3RNYXg6IG51bWJlcikge1xuICByZXR1cm4gbGVycChub3JtKHZhbHVlLCBzb3VyY2VNaW4sIHNvdXJjZU1heCksIGRlc3RNaW4sIGRlc3RNYXgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBNYXRoLm1pbihtaW4sIG1heCkpLCBNYXRoLm1heChtaW4sIG1heCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShwMDogSVBvaW50LCBwMTogSVBvaW50KSB7XG4gIGNvbnN0IGR4ID0gcDEueCAtIHAwLnhcbiAgY29uc3QgZHkgPSBwMS55IC0gcDAueVxuICByZXR1cm4gTWF0aC5zcXJ0KChkeCAqIGR4KSArIChkeSAqIGR5KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlWFkoeDA6IG51bWJlciwgeTA6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlcikge1xuICBjb25zdCBkeCA9IHgxIC0geDBcbiAgY29uc3QgZHkgPSB5MSAtIHkwXG4gIHJldHVybiBNYXRoLnNxcnQoKGR4ICogZHgpICsgKGR5ICogZHkpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlQ29sbGlzaW9uKGMwOiBJQ2lyY2xlLCBjMTogSUNpcmNsZSkge1xuICByZXR1cm4gZGlzdGFuY2UoYzAsIGMxKSA8PSBjMC5yYWRpdXMgKyBjMS5yYWRpdXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZVBvaW50Q29sbGlzaW9uKHg6IG51bWJlciwgeTpudW1iZXIsIGNpcmNsZTogSUNpcmNsZSkge1xuICByZXR1cm4gZGlzdGFuY2VYWSh4LCB5LCBjaXJjbGUueCwgY2lyY2xlLnkpIDwgY2lyY2xlLnJhZGl1c1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5SYW5nZSh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgcmV0dXJuIHZhbHVlID49IE1hdGgubWluKG1pbiwgbWF4KSAmJiB2YWx1ZSA8PSBNYXRoLm1heChtaW4sIG1heClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50SW5SZWN0KHA6IElQb2ludCwgcmVjdDogSVJlY3QpIHtcbiAgcmV0dXJuIGluUmFuZ2UocC54LCByZWN0LngsIHJlY3QueCArIHJlY3QudykgJiZcbiAgICBpblJhbmdlKHAueSwgcmVjdC55LCByZWN0LnkgKyByZWN0LmgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUludGVyc2VjdChtaW4wOiBudW1iZXIsIG1heDA6IG51bWJlciwgbWluMTogbnVtYmVyLCBtYXgxOiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbjAsIG1heDApID49IE1hdGgubWluKG1pbjEsIG1heDEpICYmXG4gICAgTWF0aC5taW4obWluMCwgbWF4MCkgPD0gTWF0aC5tYXgobWluMSwgbWF4MSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocjA6IElSZWN0LCByMTogSVJlY3QpIHtcbiAgcmV0dXJuIHJhbmdlSW50ZXJzZWN0KHIwLngsIHIwLnggKyByMC53LCByMS54LCByMS54ICsgcjEudykgJiZcbiAgICByYW5nZUludGVyc2VjdChyMC55LCByMC55ICsgcjAuaCwgcjEueSwgcjEueSArIHIxLmgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWdyZWVzVG9SYWRzKGRlZ3JlZXM6IG51bWJlcikge1xuICByZXR1cm4gZGVncmVlcyAqIE1hdGguUEkgLyAxODBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhZHNUb0RlZ3JlZXMocmFkaWFuczogbnVtYmVyKSB7XG4gIHJldHVybiAocmFkaWFucyAqIDE4MCkgLyBNYXRoLlBJXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21SYW5nZShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgcmV0dXJuIG1pbiArIChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21JbnQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKG1pbiArIChNYXRoLnJhbmRvbSgpICogKChtYXggLSBtaW4pICsgMSkpKVxufVxuIiwiaW1wb3J0IHsgSUNvbmZldHRpT3B0aW9ucyB9IGZyb20gJy4vQ29uZmV0dGknXG5pbXBvcnQgeyBJUmVjdCB9IGZyb20gJy4vUmVjdCdcbmltcG9ydCBQYXJ0aWNsZSBmcm9tICcuL1BhcnRpY2xlJ1xuaW1wb3J0IHsgcmFuZG9tUmFuZ2UgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElQYXJ0aWNsZUdlbmVyYXRvciBleHRlbmRzIElSZWN0IHtcbiAgcmVtb3ZlUGFydGljbGVBdDogKGluZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgZ2V0UGFydGljbGU6ICgpID0+IHZvaWRcbiAgYW5pbWF0ZTogKCkgPT4gYm9vbGVhblxuICBwYXJ0aWNsZXM6IFBhcnRpY2xlW11cbiAgcGFydGljbGVzR2VuZXJhdGVkOiBudW1iZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydGljbGVHZW5lcmF0b3IgaW1wbGVtZW50cyBJUGFydGljbGVHZW5lcmF0b3Ige1xuICBjb25zdHJ1Y3RvcihjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBnZXRPcHRpb25zOiAoKSA9PiBJQ29uZmV0dGlPcHRpb25zKSB7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXNcbiAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG4gICAgaWYoIWN0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGNhbnZhcyBjb250ZXh0JylcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0ID0gY3R4XG4gICAgdGhpcy5nZXRPcHRpb25zID0gZ2V0T3B0aW9uc1xuICB9XG5cbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudFxuXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuXG4gIGdldE9wdGlvbnM6ICgpID0+IElDb25mZXR0aU9wdGlvbnNcblxuICB4OiBudW1iZXIgPSAwXG5cbiAgeTogbnVtYmVyID0gMFxuXG4gIHc6IG51bWJlciA9IDBcblxuICBoOiBudW1iZXIgPSAwXG5cbiAgbGFzdE51bWJlck9mUGllY2VzOiBudW1iZXIgPSAwXG5cbiAgdHdlZW5Jbml0VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKVxuXG4gIHBhcnRpY2xlczogUGFydGljbGVbXSA9IFtdXG5cbiAgcGFydGljbGVzR2VuZXJhdGVkOiBudW1iZXIgPSAwXG5cbiAgcmVtb3ZlUGFydGljbGVBdCA9IChpOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnBhcnRpY2xlcy5zcGxpY2UoaSwgMSlcbiAgfVxuXG4gIGdldFBhcnRpY2xlID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1BhcnRpY2xlWCA9IHJhbmRvbVJhbmdlKHRoaXMueCwgdGhpcy53ICsgdGhpcy54KVxuICAgIGNvbnN0IG5ld1BhcnRpY2xlWSA9IHJhbmRvbVJhbmdlKHRoaXMueSwgdGhpcy5oICsgdGhpcy55KVxuICAgIHJldHVybiBuZXcgUGFydGljbGUodGhpcy5jb250ZXh0LCB0aGlzLmdldE9wdGlvbnMsIG5ld1BhcnRpY2xlWCwgbmV3UGFydGljbGVZKVxuICB9XG5cbiAgYW5pbWF0ZSA9ICgpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgcGFydGljbGVzR2VuZXJhdGVkLFxuICAgICAgbGFzdE51bWJlck9mUGllY2VzLFxuICAgIH0gPSB0aGlzXG4gICAgY29uc3Qge1xuICAgICAgcnVuLFxuICAgICAgcmVjeWNsZSxcbiAgICAgIG51bWJlck9mUGllY2VzLFxuICAgICAgZGVidWcsXG4gICAgICB0d2VlbkZ1bmN0aW9uLFxuICAgICAgdHdlZW5EdXJhdGlvbixcbiAgICB9ID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBpZighcnVuKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBuUCA9IHRoaXMucGFydGljbGVzLmxlbmd0aFxuICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gcmVjeWNsZSA/IG5QIDogcGFydGljbGVzR2VuZXJhdGVkXG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAvLyBJbml0aWFsIHBvcHVsYXRpb25cbiAgICBpZihhY3RpdmVDb3VudCA8IG51bWJlck9mUGllY2VzKSB7XG4gICAgICAvLyBVc2UgdGhlIG51bWJlck9mUGllY2VzIHByb3AgYXMgYSBrZXkgdG8gcmVzZXQgdGhlIGVhc2luZyB0aW1pbmdcbiAgICAgIGlmKGxhc3ROdW1iZXJPZlBpZWNlcyAhPT0gbnVtYmVyT2ZQaWVjZXMpIHtcbiAgICAgICAgdGhpcy50d2VlbkluaXRUaW1lID0gbm93XG4gICAgICAgIHRoaXMubGFzdE51bWJlck9mUGllY2VzID0gbnVtYmVyT2ZQaWVjZXNcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdHdlZW5Jbml0VGltZSB9ID0gdGhpc1xuICAgICAgLy8gQWRkIG1vcmUgdGhhbiBvbmUgcGllY2UgcGVyIGxvb3AsIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIHBpZWNlcyB3b3VsZFxuICAgICAgLy8gYmUgbGltaXR0ZWQgYnkgdGhlIFJBRiBmcmFtZXJhdGVcbiAgICAgIGNvbnN0IHByb2dyZXNzVGltZSA9IG5vdyAtIHR3ZWVuSW5pdFRpbWUgPiB0d2VlbkR1cmF0aW9uXG4gICAgICAgID8gdHdlZW5EdXJhdGlvblxuICAgICAgICA6IE1hdGgubWF4KDAsIG5vdyAtIHR3ZWVuSW5pdFRpbWUpXG4gICAgICBjb25zdCB0d2VlbmVkVmFsID0gdHdlZW5GdW5jdGlvbihwcm9ncmVzc1RpbWUsIGFjdGl2ZUNvdW50LCBudW1iZXJPZlBpZWNlcywgdHdlZW5EdXJhdGlvbilcbiAgICAgIGNvbnN0IG51bVRvQWRkID0gTWF0aC5yb3VuZCh0d2VlbmVkVmFsIC0gYWN0aXZlQ291bnQpXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtVG9BZGQ7IGkrKykge1xuICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHRoaXMuZ2V0UGFydGljbGUoKSlcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGljbGVzR2VuZXJhdGVkICs9IG51bVRvQWRkXG4gICAgfVxuICAgIGlmKGRlYnVnKSB7XG4gICAgICAvLyBEcmF3IGRlYnVnIHRleHRcbiAgICAgIGNvbnRleHQuZm9udCA9ICcxMnB4IHNhbnMtc2VyaWYnXG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMzMzJ1xuICAgICAgY29udGV4dC50ZXh0QWxpZ24gPSAncmlnaHQnXG4gICAgICBjb250ZXh0LmZpbGxUZXh0KGBQYXJ0aWNsZXM6ICR7blB9YCwgY2FudmFzLndpZHRoIC0gMTAsIGNhbnZhcy5oZWlnaHQgLSAyMClcbiAgICB9XG5cbiAgICAvLyBNYWludGFpbiB0aGUgcG9wdWxhdGlvblxuICAgIHRoaXMucGFydGljbGVzLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgIC8vIFVwZGF0ZSBlYWNoIHBhcnRpY2xlJ3MgcG9zaXRpb25cbiAgICAgIHAudXBkYXRlKClcbiAgICAgIC8vIFBydW5lIHRoZSBvZmYtY2FudmFzIHBhcnRpY2xlc1xuICAgICAgaWYocC55ID4gY2FudmFzLmhlaWdodCB8fCBwLnkgPCAtMTAwIHx8IHAueCA+IGNhbnZhcy53aWR0aCArIDEwMCB8fCBwLnggPCAtMTAwKSB7XG4gICAgICAgIGlmKHJlY3ljbGUgJiYgYWN0aXZlQ291bnQgPD0gbnVtYmVyT2ZQaWVjZXMpIHtcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBwYXJ0aWNsZSB3aXRoIGEgYnJhbmQgbmV3IG9uZVxuICAgICAgICAgIHRoaXMucGFydGljbGVzW2ldID0gdGhpcy5nZXRQYXJ0aWNsZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVQYXJ0aWNsZUF0KGkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuUCA+IDAgfHwgYWN0aXZlQ291bnQgPCBudW1iZXJPZlBpZWNlc1xuICB9XG59XG4iLCJpbXBvcnQgdHdlZW5zIGZyb20gJ3R3ZWVuLWZ1bmN0aW9ucydcbmltcG9ydCB7IElSZWN0IH0gZnJvbSAnLi9SZWN0J1xuaW1wb3J0IFBhcnRpY2xlR2VuZXJhdG9yIGZyb20gJy4vUGFydGljbGVHZW5lcmF0b3InXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZldHRpT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgY29tcG9uZW50XG4gICAqIEBkZWZhdWx0IHdpbmRvdy53aWR0aFxuICAgKi9cbiAgd2lkdGg6IG51bWJlclxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBjb21wb25lbnRcbiAgICogQGRlZmF1bHQgd2luZG93LmhlaWdodFxuICAgKi9cbiAgaGVpZ2h0OiBudW1iZXJcbiAgLyoqXG4gICAqIE1heCBudW1iZXIgb2YgY29uZmV0dGkgcGllY2VzIHRvIHJlbmRlci5cbiAgICogQGRlZmF1bHQgMjAwXG4gICAqL1xuICBudW1iZXJPZlBpZWNlczogbnVtYmVyXG4gIC8qKlxuICAgKiBTbG93cyBtb3ZlbWVudCBvZiBwaWVjZXMuIChsb3dlciBudW1iZXIgPSBzbG93ZXIgY29uZmV0dGkpXG4gICAqIEBkZWZhdWx0IDAuOTlcbiAgICovXG4gIGZyaWN0aW9uOiBudW1iZXJcbiAgLyoqXG4gICAqIEJsb3dzIGNvbmZldHRpIGFsb25nIHRoZSBYIGF4aXMuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHdpbmQ6IG51bWJlclxuICAvKipcbiAgICogSG93IGZhc3QgaXQgZmFsbHMgKHBpeGVscyBwZXIgZnJhbWUpXG4gICAqIEBkZWZhdWx0IDAuMVxuICAgKi9cbiAgZ3Jhdml0eTogbnVtYmVyXG4gIC8qKlxuICAgKiBIb3cgZmFzdCB0aGUgY29uZmV0dGkgaXMgZW1pdHRlZCBob3Jpem9udGFsbHlcbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgaW5pdGlhbFZlbG9jaXR5WDogbnVtYmVyXG4gIC8qKlxuICAgKiBIb3cgZmFzdCB0aGUgY29uZmV0dGkgaXMgZW1pdHRlZCB2ZXJ0aWNhbGx5XG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICBpbml0aWFsVmVsb2NpdHlZOiBudW1iZXJcbiAgLyoqXG4gICAqIEFycmF5IG9mIGNvbG9ycyB0byBjaG9vc2UgZnJvbS5cbiAgICovXG4gIGNvbG9yczogc3RyaW5nW11cbiAgLyoqXG4gICAqIE9wYWNpdHkgb2YgdGhlIGNvbmZldHRpLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBvcGFjaXR5OiBudW1iZXJcbiAgLyoqXG4gICAqIElmIGZhbHNlLCBvbmx5IG51bWJlck9mUGllY2VzIHdpbGwgYmUgZW1pdHRlZCBhbmQgdGhlbiBzdG9wcy4gSWYgdHJ1ZSwgd2hlbiBhIGNvbmZldHRvIGdvZXMgb2Zmc2NyZWVuLCBhIG5ldyBvbmUgd2lsbCBiZSBlbWl0dGVkLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWN5Y2xlOiBib29sZWFuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgc3RvcHMgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBsb29wLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBydW46IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJlbmRlcnMgc29tZSBkZWJ1ZyB0ZXh0IG9uIHRoZSBjYW52YXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1ZzogYm9vbGVhblxuICAvKipcbiAgICogQSBSZWN0IGRlZmluaW5nIHRoZSBhcmVhIHdoZXJlIHRoZSBjb25mZXR0aSB3aWxsIHNwYXduLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgeDogMCxcbiAgICogICB5OiAwLFxuICAgKiAgIHc6IGNhbnZhcy53aWR0aCxcbiAgICogICBoOiAwXG4gICAqIH1cbiAgICovXG4gIGNvbmZldHRpU291cmNlOiBJUmVjdFxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHJhdGUgYXQgd2hpY2ggY29uZmV0dGkgaXMgc3Bhd25lZC5cbiAgICogQGRlZmF1bHQgZWFzZUluT3V0UXVhZFxuICAgKi9cbiAgdHdlZW5GdW5jdGlvbjogKGN1cnJlbnRUaW1lOiBudW1iZXIsIGN1cnJlbnRWYWx1ZTogbnVtYmVyLCB0YXJnZXRWYWx1ZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBzPzogbnVtYmVyKSA9PiBudW1iZXJcbiAgLyoqXG4gICAqIE51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gc3Bhd24gbnVtYmVyT2ZQaWVjZXMuXG4gICAqIEBkZWZhdWx0IDUwMDBcbiAgICovXG4gIHR3ZWVuRHVyYXRpb246IG51bWJlclxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gZHJhdyB5b3VyIG93biBjb25mZXR0aSBzaGFwZXMuXG4gICAqL1xuICBkcmF3U2hhcGU/OiAoY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBhbGwgY29uZmV0dGkgaGFzIGZhbGxlbiBvZmYtY2FudmFzLlxuICAgKi9cbiAgb25Db25mZXR0aUNvbXBsZXRlPzogKGNvbmZldHRpSW5zdGFuY2U/OiBDb25mZXR0aSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgY29uZmV0dGlEZWZhdWx0czogUGljazxJQ29uZmV0dGlPcHRpb25zLCBFeGNsdWRlPGtleW9mIElDb25mZXR0aU9wdGlvbnMsICdjb25mZXR0aVNvdXJjZSc+PiA9IHtcbiAgd2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAzMDAsXG4gIGhlaWdodDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiAyMDAsXG4gIG51bWJlck9mUGllY2VzOiAyMDAsXG4gIGZyaWN0aW9uOiAwLjk5LFxuICB3aW5kOiAwLFxuICBncmF2aXR5OiAwLjEsXG4gIGluaXRpYWxWZWxvY2l0eVg6IDQsXG4gIGluaXRpYWxWZWxvY2l0eVk6IDEwLFxuICBjb2xvcnM6IFtcbiAgICAnI2Y0NDMzNicsICcjZTkxZTYzJywgJyM5YzI3YjAnLCAnIzY3M2FiNycsICcjM2Y1MWI1JyxcbiAgICAnIzIxOTZmMycsICcjMDNhOWY0JywgJyMwMGJjZDQnLCAnIzAwOTY4OCcsICcjNENBRjUwJyxcbiAgICAnIzhCQzM0QScsICcjQ0REQzM5JywgJyNGRkVCM0InLCAnI0ZGQzEwNycsICcjRkY5ODAwJyxcbiAgICAnI0ZGNTcyMicsICcjNzk1NTQ4JyxcbiAgXSxcbiAgb3BhY2l0eTogMS4wLFxuICBkZWJ1ZzogZmFsc2UsXG4gIHR3ZWVuRnVuY3Rpb246IHR3ZWVucy5lYXNlSW5PdXRRdWFkLFxuICB0d2VlbkR1cmF0aW9uOiA1MDAwLFxuICByZWN5Y2xlOiB0cnVlLFxuICBydW46IHRydWUsXG59XG5cbmV4cG9ydCBjbGFzcyBDb25mZXR0aSB7XG4gIGNvbnN0cnVjdG9yKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIG9wdHM6IFBhcnRpYWw8SUNvbmZldHRpT3B0aW9ucz4pIHtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhc1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJylcbiAgICBpZighY3R4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgY2FudmFzIGNvbnRleHQnKVxuICAgIH1cbiAgICB0aGlzLmNvbnRleHQgPSBjdHhcblxuICAgIHRoaXMuZ2VuZXJhdG9yID0gbmV3IFBhcnRpY2xlR2VuZXJhdG9yKHRoaXMuY2FudmFzLCAoKSA9PiAodGhpcy5vcHRpb25zIGFzIElDb25mZXR0aU9wdGlvbnMpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdHNcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cblxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50XG5cbiAgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG5cbiAgX29wdGlvbnMhOiBJQ29uZmV0dGlPcHRpb25zXG5cbiAgZ2VuZXJhdG9yOiBQYXJ0aWNsZUdlbmVyYXRvclxuXG4gIHJhZklkPzogbnVtYmVyXG5cbiAgZ2V0IG9wdGlvbnMoKTogUGFydGlhbDxJQ29uZmV0dGlPcHRpb25zPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNcbiAgfVxuXG4gIHNldCBvcHRpb25zKG9wdHM6IFBhcnRpYWw8SUNvbmZldHRpT3B0aW9ucz4pIHtcbiAgICBjb25zdCBsYXN0UnVuU3RhdGUgPSB0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMucnVuXG4gICAgY29uc3QgbGFzdFJlY3ljbGVTdGF0ZSA9IHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5yZWN5Y2xlXG4gICAgdGhpcy5zZXRPcHRpb25zV2l0aERlZmF1bHRzKG9wdHMpXG4gICAgaWYodGhpcy5nZW5lcmF0b3IpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5nZW5lcmF0b3IsIHRoaXMub3B0aW9ucy5jb25mZXR0aVNvdXJjZSlcbiAgICAgIGlmKHR5cGVvZiBvcHRzLnJlY3ljbGUgPT09ICdib29sZWFuJyAmJiBvcHRzLnJlY3ljbGUgJiYgbGFzdFJlY3ljbGVTdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0b3IubGFzdE51bWJlck9mUGllY2VzID0gdGhpcy5nZW5lcmF0b3IucGFydGljbGVzLmxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgICBpZih0eXBlb2Ygb3B0cy5ydW4gPT09ICdib29sZWFuJyAmJiBvcHRzLnJ1biAmJiBsYXN0UnVuU3RhdGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9uc1dpdGhEZWZhdWx0cyA9IChvcHRzOiBQYXJ0aWFsPElDb25mZXR0aU9wdGlvbnM+KSA9PiB7XG4gICAgY29uc3QgY29tcHV0ZWRDb25mZXR0aURlZmF1bHRzID0ge1xuICAgICAgY29uZmV0dGlTb3VyY2U6IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgdzogdGhpcy5jYW52YXMud2lkdGgsXG4gICAgICAgIGg6IDAsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLl9vcHRpb25zID0geyAuLi5jb21wdXRlZENvbmZldHRpRGVmYXVsdHMsIC4uLmNvbmZldHRpRGVmYXVsdHMsIC4uLm9wdHMgfVxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0cy5jb25mZXR0aVNvdXJjZSlcbiAgfVxuXG4gIHVwZGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHJ1bixcbiAgICAgICAgb25Db25mZXR0aUNvbXBsZXRlLFxuICAgICAgfSxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgfSA9IHRoaXNcbiAgICBpZihydW4pIHtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3doaXRlJ1xuICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KVxuICAgIH1cbiAgICBpZih0aGlzLmdlbmVyYXRvci5hbmltYXRlKCkpIHtcbiAgICAgIHRoaXMucmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy51cGRhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9uQ29uZmV0dGlDb21wbGV0ZSAmJiB0eXBlb2Ygb25Db25mZXR0aUNvbXBsZXRlID09PSAnZnVuY3Rpb24nICYmIHRoaXMuZ2VuZXJhdG9yLnBhcnRpY2xlc0dlbmVyYXRlZCA+IDApIHtcbiAgICAgICAgb25Db25mZXR0aUNvbXBsZXRlLmNhbGwodGhpcywgdGhpcylcbiAgICAgIH1cbiAgICAgIHRoaXMuX29wdGlvbnMucnVuID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXNldCA9ICgpID0+IHtcbiAgICBpZih0aGlzLmdlbmVyYXRvciAmJiB0aGlzLmdlbmVyYXRvci5wYXJ0aWNsZXNHZW5lcmF0ZWQgPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRvci5wYXJ0aWNsZXNHZW5lcmF0ZWQgPSAwXG4gICAgICB0aGlzLmdlbmVyYXRvci5wYXJ0aWNsZXMgPSBbXVxuICAgICAgdGhpcy5nZW5lcmF0b3IubGFzdE51bWJlck9mUGllY2VzID0gMFxuICAgIH1cbiAgfVxuXG4gIHN0b3AgPSAoKSA9PiB7XG4gICAgdGhpcy5vcHRpb25zID0geyBydW46IGZhbHNlIH1cbiAgICBpZih0aGlzLnJhZklkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJhZklkKVxuICAgICAgdGhpcy5yYWZJZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb25mZXR0aVxuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgQ2FudmFzSFRNTEF0dHJpYnV0ZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBDb25mZXR0aSwgeyBJQ29uZmV0dGlPcHRpb25zLCBjb25mZXR0aURlZmF1bHRzIH0gZnJvbSAnLi9Db25mZXR0aSdcblxuZXhwb3J0IHR5cGUgUmVmID0gSFRNTENhbnZhc0VsZW1lbnRcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSBQYXJ0aWFsPElDb25mZXR0aU9wdGlvbnM+ICYgQ2FudmFzSFRNTEF0dHJpYnV0ZXM8SFRNTENhbnZhc0VsZW1lbnQ+ICYge1xuICBjYW52YXNSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MQ2FudmFzRWxlbWVudD5cbn1cblxuY2xhc3MgUmVhY3RDb25mZXR0aUludGVybmFsIGV4dGVuZHMgQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyByZWFkb25seSBkZWZhdWx0UHJvcHMgPSB7XG4gICAgLi4uY29uZmV0dGlEZWZhdWx0cyxcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBkaXNwbGF5TmFtZSA9ICdSZWFjdENvbmZldHRpJ1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcywgLi4ucmVzdDogYW55W10pIHtcbiAgICBzdXBlcihwcm9wcywgLi4ucmVzdClcbiAgICB0aGlzLmNhbnZhcyA9IHByb3BzLmNhbnZhc1JlZiB8fCBSZWFjdC5jcmVhdGVSZWY8SFRNTENhbnZhc0VsZW1lbnQ+KClcbiAgfVxuXG4gIGNhbnZhczogUmVhY3QuUmVmT2JqZWN0PEhUTUxDYW52YXNFbGVtZW50PiA9IFJlYWN0LmNyZWF0ZVJlZigpXG5cbiAgY29uZmV0dGk/OiBDb25mZXR0aVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmKHRoaXMuY2FudmFzLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBleHRyYWN0Q2FudmFzUHJvcHModGhpcy5wcm9wcylbMF1cbiAgICAgIHRoaXMuY29uZmV0dGkgPSBuZXcgQ29uZmV0dGkodGhpcy5jYW52YXMuY3VycmVudCwgb3B0cylcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogUHJvcHMpIHtcbiAgICBjb25zdCBjb25mZXR0aU9wdGlvbnMgPSBleHRyYWN0Q2FudmFzUHJvcHMobmV4dFByb3BzKVswXVxuICAgIGlmKHRoaXMuY29uZmV0dGkpIHtcbiAgICAgIHRoaXMuY29uZmV0dGkub3B0aW9ucyA9IGNvbmZldHRpT3B0aW9ucyBhcyBJQ29uZmV0dGlPcHRpb25zXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYodGhpcy5jb25mZXR0aSkge1xuICAgICAgdGhpcy5jb25mZXR0aS5zdG9wKClcbiAgICB9XG4gICAgdGhpcy5jb25mZXR0aSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IFtjb25mZXR0aU9wdGlvbnMsIHBhc3NlZFByb3BzXSA9IGV4dHJhY3RDYW52YXNQcm9wcyh0aGlzLnByb3BzKVxuICAgIGNvbnN0IGNhbnZhc1N0eWxlcyA9IHtcbiAgICAgIHpJbmRleDogMixcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnIGFzICdhYnNvbHV0ZScsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgYXMgJ25vbmUnLFxuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgLi4ucGFzc2VkUHJvcHMuc3R5bGUsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Y2FudmFzXG4gICAgICAgIHdpZHRoPXtjb25mZXR0aU9wdGlvbnMud2lkdGh9XG4gICAgICAgIGhlaWdodD17Y29uZmV0dGlPcHRpb25zLmhlaWdodH1cbiAgICAgICAgcmVmPXt0aGlzLmNhbnZhc31cbiAgICAgICAgey4uLnBhc3NlZFByb3BzfVxuICAgICAgICBzdHlsZT17Y2FudmFzU3R5bGVzfVxuICAgICAgLz5cbiAgICApXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlZnMge1xuICBba2V5OiBzdHJpbmddOiBSZWFjdC5SZWY8SFRNTEVsZW1lbnQ+XG59XG5mdW5jdGlvbiBleHRyYWN0Q2FudmFzUHJvcHMocHJvcHM6IFBhcnRpYWw8SUNvbmZldHRpT3B0aW9ucz4gfCBhbnkpOiBbUGFydGlhbDxJQ29uZmV0dGlPcHRpb25zPiwgUGFydGlhbDxDYW52YXNIVE1MQXR0cmlidXRlczxIVE1MQ2FudmFzRWxlbWVudD4+LCBSZWZzXSB7XG4gIGNvbnN0IGNvbmZldHRpT3B0aW9uczogUGFydGlhbDxJQ29uZmV0dGlPcHRpb25zPiA9IHt9XG4gIGNvbnN0IHJlZnM6IFJlZnMgPSB7fVxuICBjb25zdCByZXN0OiBhbnkgPSB7fVxuICBjb25zdCBjb25mZXR0aU9wdGlvbktleXMgPSBbLi4uT2JqZWN0LmtleXMoY29uZmV0dGlEZWZhdWx0cyksICdjb25mZXR0aVNvdXJjZScsICdkcmF3U2hhcGUnLCAnb25Db25mZXR0aUNvbXBsZXRlJ11cbiAgY29uc3QgcmVmUHJvcHMgPSBbJ2NhbnZhc1JlZiddXG4gIGZvcihjb25zdCBwcm9wIGluIHByb3BzKSB7XG4gICAgY29uc3QgdmFsID0gcHJvcHNbcHJvcCBhcyBzdHJpbmddXG4gICAgaWYoY29uZmV0dGlPcHRpb25LZXlzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBjb25mZXR0aU9wdGlvbnNbcHJvcCBhcyBrZXlvZiBJQ29uZmV0dGlPcHRpb25zXSA9IHZhbFxuICAgIH0gZWxzZSBpZihyZWZQcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgcmVmUHJvcHNbcHJvcCBhcyBhbnldID0gdmFsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RbcHJvcF0gPSB2YWxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtjb25mZXR0aU9wdGlvbnMsIHJlc3QsIHJlZnNdXG59XG5cbmV4cG9ydCBjb25zdCBSZWFjdENvbmZldHRpID0gUmVhY3QuZm9yd2FyZFJlZjxSZWYsIFByb3BzPigocHJvcHMsIHJlZikgPT4gKFxuICA8UmVhY3RDb25mZXR0aUludGVybmFsIGNhbnZhc1JlZj17cmVmfSB7Li4ucHJvcHN9IC8+XG4pKVxuXG5leHBvcnQgZGVmYXVsdCBSZWFjdENvbmZldHRpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFVQTtBQ1RBO0FBQ0E7QUFFQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWFBO0FBMERBO0FB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\n//# sourceURL=webpack-internal:///../node_modules/react-confetti/dist/react-confetti.min.js\n"); - -/***/ }), - -/***/ "../node_modules/react-draggable/dist/react-draggable.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-draggable/dist/react-draggable.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n(function (global, factory) {\n ( false ? undefined : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory(__webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\"), __webpack_require__(/*! react */ \"../node_modules/react/index.js\")) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\"), __webpack_require__(/*! react */ \"../node_modules/react/index.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;\n})(this, function (ReactDOM, React) {\n 'use strict';\n\n ReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM;\n React = React && React.hasOwnProperty('default') ? React['default'] : React;\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n\n function makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n }\n /**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\n\n\n var emptyFunction = function emptyFunction() {};\n\n emptyFunction.thatReturns = makeEmptyFunction;\n emptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n emptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n emptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\n emptyFunction.thatReturnsThis = function () {\n return this;\n };\n\n emptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n };\n\n var emptyFunction_1 = emptyFunction;\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n /**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\n var validateFormat = function validateFormat(format) {};\n\n {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n }\n\n function invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n }\n\n var invariant_1 = invariant;\n /**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n var warning = emptyFunction_1;\n {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n }\n var warning_1 = warning;\n /*\n object-assign\n (c) Sindre Sorhus\n @license MIT\n */\n\n /* eslint-disable no-unused-vars */\n\n var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n function toObject(val) {\n if (val === null || val === undefined) {\n throw new TypeError('Object.assign cannot be called with null or undefined');\n }\n\n return Object(val);\n }\n\n function shouldUseNative() {\n try {\n if (!Object.assign) {\n return false;\n } // Detect buggy property enumeration order in older V8 versions.\n // https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\n\n var test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\n test1[5] = 'de';\n\n if (Object.getOwnPropertyNames(test1)[0] === '5') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test2 = {};\n\n for (var i = 0; i < 10; i++) {\n test2['_' + String.fromCharCode(i)] = i;\n }\n\n var order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n return test2[n];\n });\n\n if (order2.join('') !== '0123456789') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test3 = {};\n 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n test3[letter] = letter;\n });\n\n if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n return false;\n }\n\n return true;\n } catch (err) {\n // We don't expect any of the above to throw, but better to be safe.\n return false;\n }\n }\n\n var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n var from;\n var to = toObject(target);\n var symbols;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n\n if (getOwnPropertySymbols) {\n symbols = getOwnPropertySymbols(from);\n\n for (var i = 0; i < symbols.length; i++) {\n if (propIsEnumerable.call(from, symbols[i])) {\n to[symbols[i]] = from[symbols[i]];\n }\n }\n }\n }\n\n return to;\n };\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n var ReactPropTypesSecret_1 = ReactPropTypesSecret;\n {\n var invariant$1 = invariant_1;\n var warning$1 = warning_1;\n var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n var loggedTypeFailures = {};\n }\n /**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\n\n function checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, _typeof(typeSpecs[typeSpecName]));\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n } catch (ex) {\n error = ex;\n }\n\n warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, _typeof(error));\n\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n var stack = getStack ? getStack() : '';\n warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n }\n }\n }\n }\n }\n\n var checkPropTypes_1 = checkPropTypes;\n\n var factoryWithTypeCheckers = function factoryWithTypeCheckers(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n\n var ANONYMOUS = '<<anonymous>>'; // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker\n };\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n\n /*eslint-disable no-self-compare*/\n\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n\n\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n } // Make `instanceof Error` still work for returned errors.\n\n\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret_1) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n invariant_1(false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n } else if ( true && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n\n if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3) {\n warning_1(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName);\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction_1.thatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n\n var propValue = props[propName];\n\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n\n if (error instanceof Error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.');\n return emptyFunction_1.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\n if (error instanceof Error) {\n return error;\n }\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.');\n return emptyFunction_1.thatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (typeof checker !== 'function') {\n warning_1(false, 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received %s at index %s.', getPostfixForTypeWarning(checker), i);\n return emptyFunction_1.thatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n continue;\n }\n\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\n if (error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n } // We need to check all keys in case some are required but missing from\n // props.\n\n\n var allKeys = objectAssign({}, props[propName], shapeTypes);\n\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' '));\n }\n\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\n if (error) {\n return error;\n }\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (_typeof(propValue)) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n\n case 'boolean':\n return !propValue;\n\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\n\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n } // Fallback for non-spec compliant Symbols which are polyfilled.\n\n\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n } // Equivalent of `typeof` but with special handling for array and regexp.\n\n\n function getPropType(propValue) {\n var propType = _typeof(propValue);\n\n if (Array.isArray(propValue)) {\n return 'array';\n }\n\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n\n return propType;\n } // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n\n\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n\n var propType = getPropType(propValue);\n\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n\n return propType;\n } // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n\n\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n\n default:\n return type;\n }\n } // Returns class name of the object, if any.\n\n\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes_1;\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n };\n\n var propTypes = createCommonjsModule(function (module) {\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n {\n var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol[\"for\"] && Symbol[\"for\"]('react.element') || 0xeac7;\n\n var isValidElement = function isValidElement(object) {\n return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }; // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n\n\n var throwOnDirectAccess = true;\n module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess);\n }\n });\n var classnames = createCommonjsModule(function (module) {\n /*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n */\n\n /* global define */\n (function () {\n var hasOwn = {}.hasOwnProperty;\n\n function classNames() {\n var classes = [];\n\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n\n var argType = _typeof(arg);\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg)) {\n classes.push(classNames.apply(null, arg));\n } else if (argType === 'object') {\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n }\n\n if ( true && module.exports) {\n module.exports = classNames;\n } else if (false) {} else {\n window.classNames = classNames;\n }\n })();\n }); // @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\n\n function findInArray(array\n /*: Array<any> | TouchList*/\n , callback\n /*: Function*/\n )\n /*: any*/\n {\n for (var i = 0, length = array.length; i < length; i++) {\n if (callback.apply(callback, [array[i], i, array])) return array[i];\n }\n }\n\n function isFunction(func\n /*: any*/\n )\n /*: boolean*/\n {\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n }\n\n function isNum(num\n /*: any*/\n )\n /*: boolean*/\n {\n return typeof num === 'number' && !isNaN(num);\n }\n\n function _int(a\n /*: string*/\n )\n /*: number*/\n {\n return parseInt(a, 10);\n }\n\n function dontSetMe(props\n /*: Object*/\n , propName\n /*: string*/\n , componentName\n /*: string*/\n ) {\n if (props[propName]) {\n return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.');\n }\n }\n\n var prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\n function getPrefix()\n /*: string*/\n {\n var prop\n /*: string*/\n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform'; // Checking specifically for 'window.document' is for pseudo-browser server-side\n // environments that define 'window' as the global context.\n // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n\n if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n var style = window.document.documentElement.style;\n if (prop in style) return '';\n\n for (var i = 0; i < prefixes.length; i++) {\n if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n }\n\n return '';\n }\n\n function browserPrefixToKey(prop\n /*: string*/\n , prefix\n /*: string*/\n )\n /*: string*/\n {\n return prefix ? '' + prefix + kebabToTitleCase(prop) : prop;\n }\n\n function kebabToTitleCase(str\n /*: string*/\n )\n /*: string*/\n {\n var out = '';\n var shouldCapitalize = true;\n\n for (var i = 0; i < str.length; i++) {\n if (shouldCapitalize) {\n out += str[i].toUpperCase();\n shouldCapitalize = false;\n } else if (str[i] === '-') {\n shouldCapitalize = true;\n } else {\n out += str[i];\n }\n }\n\n return out;\n } // Default export is the prefix itself, like 'Moz', 'Webkit', etc\n // Note that you may have to re-test for certain things; for instance, Chrome 50\n // can handle unprefixed `transform`, but not unprefixed `user-select`\n\n\n var browserPrefix = getPrefix();\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n };\n\n var possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n };\n\n var slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n /*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\n\n\n var matchesSelectorFunc = '';\n\n function matchesSelector(el\n /*: Node*/\n , selector\n /*: string*/\n )\n /*: boolean*/\n {\n if (!matchesSelectorFunc) {\n matchesSelectorFunc = findInArray(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n // $FlowIgnore: Doesn't think elements are indexable\n return isFunction(el[method]);\n });\n } // Might not be found entirely (not an Element?) - in that case, bail\n // $FlowIgnore: Doesn't think elements are indexable\n\n\n if (!isFunction(el[matchesSelectorFunc])) return false; // $FlowIgnore: Doesn't think elements are indexable\n\n return el[matchesSelectorFunc](selector);\n } // Works up the tree to the draggable itself attempting to match selector.\n\n\n function matchesSelectorAndParentsTo(el\n /*: Node*/\n , selector\n /*: string*/\n , baseNode\n /*: Node*/\n )\n /*: boolean*/\n {\n var node = el;\n\n do {\n if (matchesSelector(node, selector)) return true;\n if (node === baseNode) return false;\n node = node.parentNode;\n } while (node);\n\n return false;\n }\n\n function addEvent(el\n /*: ?Node*/\n , event\n /*: string*/\n , handler\n /*: Function*/\n )\n /*: void*/\n {\n if (!el) {\n return;\n }\n\n if (el.attachEvent) {\n el.attachEvent('on' + event, handler);\n } else if (el.addEventListener) {\n el.addEventListener(event, handler, true);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = handler;\n }\n }\n\n function removeEvent(el\n /*: ?Node*/\n , event\n /*: string*/\n , handler\n /*: Function*/\n )\n /*: void*/\n {\n if (!el) {\n return;\n }\n\n if (el.detachEvent) {\n el.detachEvent('on' + event, handler);\n } else if (el.removeEventListener) {\n el.removeEventListener(event, handler, true);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = null;\n }\n }\n\n function outerHeight(node\n /*: HTMLElement*/\n )\n /*: number*/\n {\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetTop which is including margin. See getBoundPosition\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height += _int(computedStyle.borderTopWidth);\n height += _int(computedStyle.borderBottomWidth);\n return height;\n }\n\n function outerWidth(node\n /*: HTMLElement*/\n )\n /*: number*/\n {\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetLeft which is including margin. See getBoundPosition\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width += _int(computedStyle.borderLeftWidth);\n width += _int(computedStyle.borderRightWidth);\n return width;\n }\n\n function innerHeight(node\n /*: HTMLElement*/\n )\n /*: number*/\n {\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height -= _int(computedStyle.paddingTop);\n height -= _int(computedStyle.paddingBottom);\n return height;\n }\n\n function innerWidth(node\n /*: HTMLElement*/\n )\n /*: number*/\n {\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width -= _int(computedStyle.paddingLeft);\n width -= _int(computedStyle.paddingRight);\n return width;\n } // Get from offsetParent\n\n\n function offsetXYFromParent(evt\n /*: {clientX: number, clientY: number}*/\n , offsetParent\n /*: HTMLElement*/\n )\n /*: ControlPosition*/\n {\n var isBody = offsetParent === offsetParent.ownerDocument.body;\n var offsetParentRect = isBody ? {\n left: 0,\n top: 0\n } : offsetParent.getBoundingClientRect();\n var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;\n var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;\n return {\n x: x,\n y: y\n };\n }\n\n function createCSSTransform(controlPos\n /*: ControlPosition*/\n , positionOffset\n /*: PositionOffsetControlPosition*/\n )\n /*: Object*/\n {\n var translation = getTranslation(controlPos, positionOffset, 'px');\n return defineProperty({}, browserPrefixToKey('transform', browserPrefix), translation);\n }\n\n function createSVGTransform(controlPos\n /*: ControlPosition*/\n , positionOffset\n /*: PositionOffsetControlPosition*/\n )\n /*: string*/\n {\n var translation = getTranslation(controlPos, positionOffset, '');\n return translation;\n }\n\n function getTranslation(_ref2, positionOffset\n /*: PositionOffsetControlPosition*/\n , unitSuffix\n /*: string*/\n )\n /*: string*/\n {\n var x = _ref2.x,\n y = _ref2.y;\n var translation = 'translate(' + x + unitSuffix + ',' + y + unitSuffix + ')';\n\n if (positionOffset) {\n var defaultX = '' + (typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n var defaultY = '' + (typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n translation = 'translate(' + defaultX + ', ' + defaultY + ')' + translation;\n }\n\n return translation;\n }\n\n function getTouch(e\n /*: MouseTouchEvent*/\n , identifier\n /*: number*/\n )\n /*: ?{clientX: number, clientY: number}*/\n {\n return e.targetTouches && findInArray(e.targetTouches, function (t) {\n return identifier === t.identifier;\n }) || e.changedTouches && findInArray(e.changedTouches, function (t) {\n return identifier === t.identifier;\n });\n }\n\n function getTouchIdentifier(e\n /*: MouseTouchEvent*/\n )\n /*: ?number*/\n {\n if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n } // User-select Hacks:\n //\n // Useful for preventing blue highlights all over everything when dragging.\n // Note we're passing `document` b/c we could be iframed\n\n\n function addUserSelectStyles(doc\n /*: ?Document*/\n ) {\n if (!doc) return;\n var styleEl = doc.getElementById('react-draggable-style-el');\n\n if (!styleEl) {\n styleEl = doc.createElement('style');\n styleEl.type = 'text/css';\n styleEl.id = 'react-draggable-style-el';\n styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n doc.getElementsByTagName('head')[0].appendChild(styleEl);\n }\n\n if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n }\n\n function removeUserSelectStyles(doc\n /*: ?Document*/\n ) {\n try {\n if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection'); // $FlowIgnore: IE\n\n if (doc.selection) {\n // $FlowIgnore: IE\n doc.selection.empty();\n } else {\n window.getSelection().removeAllRanges(); // remove selection caused by scroll\n }\n } catch (e) {// probably IE\n }\n }\n\n function styleHacks()\n /*: Object*/\n {\n var childStyle\n /*: Object*/\n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // Workaround IE pointer events; see #51\n // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278\n\n return _extends({\n touchAction: 'none'\n }, childStyle);\n }\n\n function addClassName(el\n /*: HTMLElement*/\n , className\n /*: string*/\n ) {\n if (el.classList) {\n el.classList.add(className);\n } else {\n if (!el.className.match(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)'))) {\n el.className += ' ' + className;\n }\n }\n }\n\n function removeClassName(el\n /*: HTMLElement*/\n , className\n /*: string*/\n ) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)', 'g'), '');\n }\n }\n /*:: import type Draggable from '../Draggable';*/\n\n /*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n\n /*:: import type DraggableCore from '../DraggableCore';*/\n\n\n function getBoundPosition(draggable\n /*: Draggable*/\n , x\n /*: number*/\n , y\n /*: number*/\n )\n /*: [number, number]*/\n {\n // If no bounds, short-circuit and move on\n if (!draggable.props.bounds) return [x, y]; // Clone new bounds\n\n var bounds = draggable.props.bounds;\n bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n var node = findDOMNode(draggable);\n\n if (typeof bounds === 'string') {\n var ownerDocument = node.ownerDocument;\n var ownerWindow = ownerDocument.defaultView;\n var boundNode = void 0;\n\n if (bounds === 'parent') {\n boundNode = node.parentNode;\n } else {\n boundNode = ownerDocument.querySelector(bounds);\n }\n\n if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n }\n\n var nodeStyle = ownerWindow.getComputedStyle(node);\n var boundNodeStyle = ownerWindow.getComputedStyle(boundNode); // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\n bounds = {\n left: -node.offsetLeft + _int(boundNodeStyle.paddingLeft) + _int(nodeStyle.marginLeft),\n top: -node.offsetTop + _int(boundNodeStyle.paddingTop) + _int(nodeStyle.marginTop),\n right: innerWidth(boundNode) - outerWidth(node) - node.offsetLeft + _int(boundNodeStyle.paddingRight) - _int(nodeStyle.marginRight),\n bottom: innerHeight(boundNode) - outerHeight(node) - node.offsetTop + _int(boundNodeStyle.paddingBottom) - _int(nodeStyle.marginBottom)\n };\n } // Keep x and y below right and bottom limits...\n\n\n if (isNum(bounds.right)) x = Math.min(x, bounds.right);\n if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom); // But above left and top limits.\n\n if (isNum(bounds.left)) x = Math.max(x, bounds.left);\n if (isNum(bounds.top)) y = Math.max(y, bounds.top);\n return [x, y];\n }\n\n function snapToGrid(grid\n /*: [number, number]*/\n , pendingX\n /*: number*/\n , pendingY\n /*: number*/\n )\n /*: [number, number]*/\n {\n var x = Math.round(pendingX / grid[0]) * grid[0];\n var y = Math.round(pendingY / grid[1]) * grid[1];\n return [x, y];\n }\n\n function canDragX(draggable\n /*: Draggable*/\n )\n /*: boolean*/\n {\n return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n }\n\n function canDragY(draggable\n /*: Draggable*/\n )\n /*: boolean*/\n {\n return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n } // Get {x, y} positions from event.\n\n\n function getControlPosition(e\n /*: MouseTouchEvent*/\n , touchIdentifier\n /*: ?number*/\n , draggableCore\n /*: DraggableCore*/\n )\n /*: ?ControlPosition*/\n {\n var touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null;\n if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\n var node = findDOMNode(draggableCore); // User can provide an offsetParent if desired.\n\n var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n return offsetXYFromParent(touchObj || e, offsetParent);\n } // Create an data object exposed by <DraggableCore>'s events\n\n\n function createCoreData(draggable\n /*: DraggableCore*/\n , x\n /*: number*/\n , y\n /*: number*/\n )\n /*: DraggableData*/\n {\n var state = draggable.state;\n var isStart = !isNum(state.lastX);\n var node = findDOMNode(draggable);\n\n if (isStart) {\n // If this is our first move, use the x and y as last coords.\n return {\n node: node,\n deltaX: 0,\n deltaY: 0,\n lastX: x,\n lastY: y,\n x: x,\n y: y\n };\n } else {\n // Otherwise calculate proper values.\n return {\n node: node,\n deltaX: x - state.lastX,\n deltaY: y - state.lastY,\n lastX: state.lastX,\n lastY: state.lastY,\n x: x,\n y: y\n };\n }\n } // Create an data exposed by <Draggable>'s events\n\n\n function createDraggableData(draggable\n /*: Draggable*/\n , coreData\n /*: DraggableData*/\n )\n /*: DraggableData*/\n {\n var scale = draggable.props.scale;\n return {\n node: coreData.node,\n x: draggable.state.x + coreData.deltaX / scale,\n y: draggable.state.y + coreData.deltaY / scale,\n deltaX: coreData.deltaX / scale,\n deltaY: coreData.deltaY / scale,\n lastX: draggable.state.x,\n lastY: draggable.state.y\n };\n } // A lot faster than stringify/parse\n\n\n function cloneBounds(bounds\n /*: Bounds*/\n )\n /*: Bounds*/\n {\n return {\n left: bounds.left,\n top: bounds.top,\n right: bounds.right,\n bottom: bounds.bottom\n };\n }\n\n function findDOMNode(draggable\n /*: Draggable | DraggableCore*/\n )\n /*: HTMLElement*/\n {\n var node = ReactDOM.findDOMNode(draggable);\n\n if (!node) {\n throw new Error('<DraggableCore>: Unmounted during event!');\n } // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\n\n return node;\n }\n /*eslint no-console:0*/\n\n\n function log() {}\n /*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n // Simple abstraction for dragging events names.\n\n /*:: import type {Element as ReactElement} from 'react';*/\n\n\n var eventsFor = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n }; // Default to mouse events.\n\n var dragEventFor = eventsFor.mouse;\n /*:: type DraggableCoreState = {\n dragging: boolean,\n lastX: number,\n lastY: number,\n touchIdentifier: ?number\n };*/\n\n /*:: export type DraggableBounds = {\n left: number,\n right: number,\n top: number,\n bottom: number,\n };*/\n\n /*:: export type DraggableData = {\n node: HTMLElement,\n x: number, y: number,\n deltaX: number, deltaY: number,\n lastX: number, lastY: number,\n };*/\n\n /*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\n /*:: export type ControlPosition = {x: number, y: number};*/\n\n /*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n //\n // Define <DraggableCore>.\n //\n // <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n // work well with libraries that require more control over the element.\n //\n\n /*:: export type DraggableCoreProps = {\n allowAnyClick: boolean,\n cancel: string,\n children: ReactElement<any>,\n disabled: boolean,\n enableUserSelectHack: boolean,\n offsetParent: HTMLElement,\n grid: [number, number],\n handle: string,\n onStart: DraggableEventHandler,\n onDrag: DraggableEventHandler,\n onStop: DraggableEventHandler,\n onMouseDown: (e: MouseEvent) => void,\n };*/\n\n var DraggableCore = function (_React$Component) {\n inherits(DraggableCore, _React$Component);\n\n function DraggableCore() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, DraggableCore);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n dragging: false,\n // Used while dragging to determine deltas.\n lastX: NaN,\n lastY: NaN,\n touchIdentifier: null\n }, _this.handleDragStart = function (e) {\n // Make it possible to attach event handlers on top of this one.\n _this.props.onMouseDown(e); // Only accept left-clicks.\n\n\n if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false; // Get nodes. Be sure to grab relative document (could be iframed)\n\n var thisNode = ReactDOM.findDOMNode(_this);\n\n if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n throw new Error('<DraggableCore> not mounted on DragStart!');\n }\n\n var ownerDocument = thisNode.ownerDocument; // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !matchesSelectorAndParentsTo(e.target, _this.props.handle, thisNode) || _this.props.cancel && matchesSelectorAndParentsTo(e.target, _this.props.cancel, thisNode)) {\n return;\n } // Set touch identifier in component state if this is a touch event. This allows us to\n // distinguish between individual touches on multitouch screens by identifying which\n // touchpoint was set to this element.\n\n\n var touchIdentifier = getTouchIdentifier(e);\n\n _this.setState({\n touchIdentifier: touchIdentifier\n }); // Get the current drag point from the event. This is used as the offset.\n\n\n var position = getControlPosition(e, touchIdentifier, _this);\n if (position == null) return; // not possible but satisfies flow\n\n var x = position.x,\n y = position.y; // Create an event object with all the data parents need to make a decision here.\n\n var coreEvent = createCoreData(_this, x, y); // Call event handler. If it returns explicit false, cancel.\n\n log('calling', _this.props.onStart);\n\n var shouldUpdate = _this.props.onStart(e, coreEvent);\n\n if (shouldUpdate === false) return; // Add a style to the body to disable user-select. This prevents text from\n // being selected all over the page.\n\n if (_this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument); // Initiate dragging. Set the current x and y as offsets\n // so we know how much we've moved during the drag. This allows us\n // to drag elements around even if they have been moved, without issue.\n\n _this.setState({\n dragging: true,\n lastX: x,\n lastY: y\n }); // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n // this element. We use different events depending on whether or not we have detected that this\n // is a touch-capable device.\n\n\n addEvent(ownerDocument, dragEventFor.move, _this.handleDrag);\n addEvent(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n }, _this.handleDrag = function (e) {\n // Prevent scrolling on mobile devices, like ipad/iphone.\n if (e.type === 'touchmove') e.preventDefault(); // Get the current drag point from the event. This is used as the offset.\n\n var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n if (position == null) return;\n var x = position.x,\n y = position.y; // Snap to grid if prop has been provided\n\n if (Array.isArray(_this.props.grid)) {\n var _deltaX = x - _this.state.lastX,\n _deltaY = y - _this.state.lastY;\n\n var _snapToGrid = snapToGrid(_this.props.grid, _deltaX, _deltaY);\n\n var _snapToGrid2 = slicedToArray(_snapToGrid, 2);\n\n _deltaX = _snapToGrid2[0];\n _deltaY = _snapToGrid2[1];\n if (!_deltaX && !_deltaY) return; // skip useless drag\n\n x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY;\n }\n\n var coreEvent = createCoreData(_this, x, y); // Call event handler. If it returns explicit false, trigger end.\n\n var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\n if (shouldUpdate === false) {\n try {\n // $FlowIgnore\n _this.handleDragStop(new MouseEvent('mouseup'));\n } catch (err) {\n // Old browsers\n var event = document.createEvent('MouseEvents')\n /*: any*/\n ; // I see why this insanity was deprecated\n // $FlowIgnore\n\n event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n _this.handleDragStop(event);\n }\n\n return;\n }\n\n _this.setState({\n lastX: x,\n lastY: y\n });\n }, _this.handleDragStop = function (e) {\n if (!_this.state.dragging) return;\n var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n if (position == null) return;\n var x = position.x,\n y = position.y;\n var coreEvent = createCoreData(_this, x, y);\n var thisNode = ReactDOM.findDOMNode(_this);\n\n if (thisNode) {\n // Remove user-select hack\n if (_this.props.enableUserSelectHack) removeUserSelectStyles(thisNode.ownerDocument);\n } // Reset the el.\n\n\n _this.setState({\n dragging: false,\n lastX: NaN,\n lastY: NaN\n }); // Call event handler\n\n\n _this.props.onStop(e, coreEvent);\n\n if (thisNode) {\n removeEvent(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n removeEvent(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n }\n }, _this.onMouseDown = function (e) {\n dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n return _this.handleDragStart(e);\n }, _this.onMouseUp = function (e) {\n dragEventFor = eventsFor.mouse;\n return _this.handleDragStop(e);\n }, _this.onTouchStart = function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStart(e);\n }, _this.onTouchEnd = function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStop(e);\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n createClass(DraggableCore, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n var thisNode = ReactDOM.findDOMNode(this);\n\n if (thisNode) {\n var ownerDocument = thisNode.ownerDocument;\n removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag);\n removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n if (this.props.enableUserSelectHack) removeUserSelectStyles(ownerDocument);\n }\n } // Same as onMouseDown (start drag), but now consider this a touch device.\n\n }, {\n key: 'render',\n value: function render() {\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return React.cloneElement(React.Children.only(this.props.children), {\n style: styleHacks(this.props.children.props.style),\n // Note: mouseMove handler is attached to document so it will still function\n // when the user drags quickly and leaves the bounds of the element.\n onMouseDown: this.onMouseDown,\n onTouchStart: this.onTouchStart,\n onMouseUp: this.onMouseUp,\n onTouchEnd: this.onTouchEnd\n });\n }\n }]);\n return DraggableCore;\n }(React.Component);\n\n DraggableCore.displayName = 'DraggableCore';\n DraggableCore.propTypes = {\n /**\n * `allowAnyClick` allows dragging using any mouse button.\n * By default, we only accept the left button.\n *\n * Defaults to `false`.\n */\n allowAnyClick: propTypes.bool,\n\n /**\n * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n * with the exception of `onMouseDown`, will not fire.\n */\n disabled: propTypes.bool,\n\n /**\n * By default, we add 'user-select:none' attributes to the document body\n * to prevent ugly text selection during drag. If this is causing problems\n * for your app, set this to `false`.\n */\n enableUserSelectHack: propTypes.bool,\n\n /**\n * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n * instead of using the parent node.\n */\n offsetParent: function offsetParent(props\n /*: DraggableCoreProps*/\n , propName\n /*: $Keys<DraggableCoreProps>*/\n ) {\n if (props[propName] && props[propName].nodeType !== 1) {\n throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n }\n },\n\n /**\n * `grid` specifies the x and y that dragging should snap to.\n */\n grid: propTypes.arrayOf(propTypes.number),\n\n /**\n * `scale` specifies the scale of the area you are dragging inside of. It allows\n * the drag deltas to scale correctly with how far zoomed in/out you are.\n */\n scale: propTypes.number,\n\n /**\n * `handle` specifies a selector to be used as the handle that initiates drag.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * <Draggable handle=\".handle\">\n * <div>\n * <div className=\"handle\">Click me to drag</div>\n * <div>This is some other content</div>\n * </div>\n * </Draggable>\n * );\n * }\n * });\n * ```\n */\n handle: propTypes.string,\n\n /**\n * `cancel` specifies a selector to be used to prevent drag initialization.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return(\n * <Draggable cancel=\".cancel\">\n * <div>\n * <div className=\"cancel\">You can't drag from here</div>\n * <div>Dragging here works fine</div>\n * </div>\n * </Draggable>\n * );\n * }\n * });\n * ```\n */\n cancel: propTypes.string,\n\n /**\n * Called when dragging starts.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onStart: propTypes.func,\n\n /**\n * Called while dragging.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onDrag: propTypes.func,\n\n /**\n * Called when dragging stops.\n * If this function returns the boolean false, the drag will remain active.\n */\n onStop: propTypes.func,\n\n /**\n * A workaround option which can be passed if onMouseDown needs to be accessed,\n * since it'll always be blocked (as there is internal use of onMouseDown)\n */\n onMouseDown: propTypes.func,\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: dontSetMe,\n style: dontSetMe,\n transform: dontSetMe\n };\n DraggableCore.defaultProps = {\n allowAnyClick: false,\n // by default only accept left click\n cancel: null,\n disabled: false,\n enableUserSelectHack: true,\n offsetParent: null,\n handle: null,\n grid: null,\n transform: null,\n onStart: function onStart() {},\n onDrag: function onDrag() {},\n onStop: function onStop() {},\n onMouseDown: function onMouseDown() {}\n };\n /*:: import type {DraggableEventHandler} from './utils/types';*/\n\n /*:: import type {Element as ReactElement} from 'react';*/\n\n /*:: type DraggableState = {\n dragging: boolean,\n dragged: boolean,\n x: number, y: number,\n slackX: number, slackY: number,\n isElementSVG: boolean\n };*/\n //\n // Define <Draggable>\n //\n\n /*:: export type DraggableProps = {\n ...$Exact<DraggableCoreProps>,\n axis: 'both' | 'x' | 'y' | 'none',\n bounds: DraggableBounds | string | false,\n defaultClassName: string,\n defaultClassNameDragging: string,\n defaultClassNameDragged: string,\n defaultPosition: ControlPosition,\n positionOffset: PositionOffsetControlPosition,\n position: ControlPosition,\n scale: number\n };*/\n\n var Draggable = function (_React$Component) {\n inherits(Draggable, _React$Component);\n\n function Draggable(props\n /*: DraggableProps*/\n ) {\n classCallCheck(this, Draggable);\n\n var _this = possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props));\n\n _this.onDragStart = function (e, coreData) {\n // Short-circuit if user's callback killed it.\n var shouldStart = _this.props.onStart(e, createDraggableData(_this, coreData)); // Kills start event on core as well, so move handlers are never bound.\n\n\n if (shouldStart === false) return false;\n\n _this.setState({\n dragging: true,\n dragged: true\n });\n };\n\n _this.onDrag = function (e, coreData) {\n if (!_this.state.dragging) return false;\n var uiData = createDraggableData(_this, coreData);\n var newState\n /*: $Shape<DraggableState>*/\n = {\n x: uiData.x,\n y: uiData.y\n }; // Keep within bounds.\n\n if (_this.props.bounds) {\n // Save original x and y.\n var _x = newState.x,\n _y = newState.y; // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n\n newState.x += _this.state.slackX;\n newState.y += _this.state.slackY; // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n var _getBoundPosition = getBoundPosition(_this, newState.x, newState.y),\n _getBoundPosition2 = slicedToArray(_getBoundPosition, 2),\n newStateX = _getBoundPosition2[0],\n newStateY = _getBoundPosition2[1];\n\n newState.x = newStateX;\n newState.y = newStateY; // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\n newState.slackX = _this.state.slackX + (_x - newState.x);\n newState.slackY = _this.state.slackY + (_y - newState.y); // Update the event we fire to reflect what really happened after bounds took effect.\n\n uiData.x = newState.x;\n uiData.y = newState.y;\n uiData.deltaX = newState.x - _this.state.x;\n uiData.deltaY = newState.y - _this.state.y;\n } // Short-circuit if user's callback killed it.\n\n\n var shouldUpdate = _this.props.onDrag(e, uiData);\n\n if (shouldUpdate === false) return false;\n\n _this.setState(newState);\n };\n\n _this.onDragStop = function (e, coreData) {\n if (!_this.state.dragging) return false; // Short-circuit if user's callback killed it.\n\n var shouldStop = _this.props.onStop(e, createDraggableData(_this, coreData));\n\n if (shouldStop === false) return false;\n var newState\n /*: $Shape<DraggableState>*/\n = {\n dragging: false,\n slackX: 0,\n slackY: 0\n }; // If this is a controlled component, the result of this operation will be to\n // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\n var controlled = Boolean(_this.props.position);\n\n if (controlled) {\n var _this$props$position = _this.props.position,\n _x2 = _this$props$position.x,\n _y2 = _this$props$position.y;\n newState.x = _x2;\n newState.y = _y2;\n }\n\n _this.setState(newState);\n };\n\n _this.state = {\n // Whether or not we are currently dragging.\n dragging: false,\n // Whether or not we have been dragged before.\n dragged: false,\n // Current transform x and y.\n x: props.position ? props.position.x : props.defaultPosition.x,\n y: props.position ? props.position.y : props.defaultPosition.y,\n // Used for compensating for out-of-bounds drags\n slackX: 0,\n slackY: 0,\n // Can only determine if SVG after mounting\n isElementSVG: false\n };\n\n if (props.position && !(props.onDrag || props.onStop)) {\n // eslint-disable-next-line no-console\n console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n }\n\n return _this;\n }\n\n createClass(Draggable, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // Check to see if the element passed is an instanceof SVGElement\n if (typeof window.SVGElement !== 'undefined' && ReactDOM.findDOMNode(this) instanceof window.SVGElement) {\n this.setState({\n isElementSVG: true\n });\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps\n /*: Object*/\n ) {\n // Set x/y if position has changed\n if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) {\n this.setState({\n x: nextProps.position.x,\n y: nextProps.position.y\n });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.setState({\n dragging: false\n }); // prevents invariant if unmounted while dragging\n }\n }, {\n key: 'render',\n value: function render()\n /*: ReactElement<any>*/\n {\n var _classNames;\n\n var style = {},\n svgTransform = null; // If this is controlled, we don't want to move it - unless it's dragging.\n\n var controlled = Boolean(this.props.position);\n var draggable = !controlled || this.state.dragging;\n var position = this.props.position || this.props.defaultPosition;\n var transformOpts = {\n // Set left if horizontal drag is enabled\n x: canDragX(this) && draggable ? this.state.x : position.x,\n // Set top if vertical drag is enabled\n y: canDragY(this) && draggable ? this.state.y : position.y\n }; // If this element was SVG, we use the `transform` attribute.\n\n if (this.state.isElementSVG) {\n svgTransform = createSVGTransform(transformOpts, this.props.positionOffset);\n } else {\n // Add a CSS transform to move the element around. This allows us to move the element around\n // without worrying about whether or not it is relatively or absolutely positioned.\n // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n // has a clean slate.\n style = createCSSTransform(transformOpts, this.props.positionOffset);\n }\n\n var _props = this.props,\n defaultClassName = _props.defaultClassName,\n defaultClassNameDragging = _props.defaultClassNameDragging,\n defaultClassNameDragged = _props.defaultClassNameDragged;\n var children = React.Children.only(this.props.children); // Mark with class while dragging\n\n var className = classnames(children.props.className || '', defaultClassName, (_classNames = {}, defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames)); // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\n return React.createElement(DraggableCore, _extends({}, this.props, {\n onStart: this.onDragStart,\n onDrag: this.onDrag,\n onStop: this.onDragStop\n }), React.cloneElement(children, {\n className: className,\n style: _extends({}, children.props.style, style),\n transform: svgTransform\n }));\n }\n }]);\n return Draggable;\n }(React.Component);\n\n Draggable.displayName = 'Draggable';\n Draggable.propTypes = _extends({}, DraggableCore.propTypes, {\n /**\n * `axis` determines which axis the draggable can move.\n *\n * Note that all callbacks will still return data as normal. This only\n * controls flushing to the DOM.\n *\n * 'both' allows movement horizontally and vertically.\n * 'x' limits movement to horizontal axis.\n * 'y' limits movement to vertical axis.\n * 'none' limits all movement.\n *\n * Defaults to 'both'.\n */\n axis: propTypes.oneOf(['both', 'x', 'y', 'none']),\n\n /**\n * `bounds` determines the range of movement available to the element.\n * Available values are:\n *\n * 'parent' restricts movement within the Draggable's parent node.\n *\n * Alternatively, pass an object with the following properties, all of which are optional:\n *\n * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n *\n * All values are in px.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * <Draggable bounds={{right: 300, bottom: 300}}>\n * <div>Content</div>\n * </Draggable>\n * );\n * }\n * });\n * ```\n */\n bounds: propTypes.oneOfType([propTypes.shape({\n left: propTypes.number,\n right: propTypes.number,\n top: propTypes.number,\n bottom: propTypes.number\n }), propTypes.string, propTypes.oneOf([false])]),\n defaultClassName: propTypes.string,\n defaultClassNameDragging: propTypes.string,\n defaultClassNameDragged: propTypes.string,\n\n /**\n * `defaultPosition` specifies the x and y that the dragged item should start at\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * <Draggable defaultPosition={{x: 25, y: 25}}>\n * <div>I start with transformX: 25px and transformY: 25px;</div>\n * </Draggable>\n * );\n * }\n * });\n * ```\n */\n defaultPosition: propTypes.shape({\n x: propTypes.number,\n y: propTypes.number\n }),\n positionOffset: propTypes.shape({\n x: propTypes.oneOfType([propTypes.number, propTypes.string]),\n y: propTypes.oneOfType([propTypes.number, propTypes.string])\n }),\n\n /**\n * `position`, if present, defines the current position of the element.\n *\n * This is similar to how form elements in React work - if no `position` is supplied, the component\n * is uncontrolled.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * <Draggable position={{x: 25, y: 25}}>\n * <div>I start with transformX: 25px and transformY: 25px;</div>\n * </Draggable>\n * );\n * }\n * });\n * ```\n */\n position: propTypes.shape({\n x: propTypes.number,\n y: propTypes.number\n }),\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: dontSetMe,\n style: dontSetMe,\n transform: dontSetMe\n });\n Draggable.defaultProps = _extends({}, DraggableCore.defaultProps, {\n axis: 'both',\n bounds: false,\n defaultClassName: 'react-draggable',\n defaultClassNameDragging: 'react-draggable-dragging',\n defaultClassNameDragged: 'react-draggable-dragged',\n defaultPosition: {\n x: 0,\n y: 0\n },\n position: null,\n scale: 1\n }); // Previous versions of this lib exported <Draggable> as the root export. As to not break\n // them, or TypeScript, we export *both* as the root and as 'default'.\n // See https://github.com/mzabriskie/react-draggable/pull/254\n // and https://github.com/mzabriskie/react-draggable/issues/266\n\n Draggable[\"default\"] = Draggable;\n Draggable.DraggableCore = DraggableCore;\n return Draggable;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRyYWdnYWJsZS9kaXN0L3JlYWN0LWRyYWdnYWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcz9lODFiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzPzI4MDkiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzP2Q1NzUiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzPzIwYmUiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcz8xMzRkIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcz82ZWM0Iiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcz9jNTJmIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcz81YjQwIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcz9mMDk3Iiwid2VicGFjazovLy8uLi9saWIvdXRpbHMvc2hpbXMuanM/ZjRhYyIsIndlYnBhY2s6Ly8vLi4vbGliL3V0aWxzL2dldFByZWZpeC5qcz8zNjFkIiwid2VicGFjazovLy8uLi9saWIvdXRpbHMvZG9tRm5zLmpzP2QzZGUiLCJ3ZWJwYWNrOi8vLy4uL2xpYi91dGlscy9wb3NpdGlvbkZucy5qcz8wYjdkIiwid2VicGFjazovLy8uLi9saWIvdXRpbHMvbG9nLmpzP2ZiZmYiLCJ3ZWJwYWNrOi8vLy4uL2xpYi9EcmFnZ2FibGVDb3JlLmpzPzliNDEiLCJ3ZWJwYWNrOi8vLy4uL2xpYi9EcmFnZ2FibGUuanM/OTA0ZiIsIndlYnBhY2s6Ly8vLi4vbGliL3VtZC5qcz84YTViIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIFxuICovXG5cbmZ1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhcmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuZCBkaXNjYXJkcyBpbnB1dHM7IGl0IGhhcyBubyBzaWRlIGVmZmVjdHMuIFRoaXMgaXNcbiAqIHByaW1hcmlseSB1c2VmdWwgaWRpb21hdGljYWxseSBmb3Igb3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5kcG9pbnRzIHdoaWNoXG4gKiBhbHdheXMgbmVlZCB0byBiZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFja3MgYSBudWxsLWNhbGwgaWRpb20gYWxhIENvY29hLlxuICovXG52YXIgZW1wdHlGdW5jdGlvbiA9IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fTtcblxuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyA9IG1ha2VFbXB0eUZ1bmN0aW9uO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlID0gbWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWUgPSBtYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsID0gbWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50ID0gZnVuY3Rpb24gKGFyZykge1xuICByZXR1cm4gYXJnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO1xuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9lbXB0eUZ1bmN0aW9uJyk7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gZW1wdHlGdW5jdGlvbjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDApIHtcbiAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9wdHlwZSBjaGVjay5cbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nOyIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG4gIHZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAndGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCVzYC4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSk7XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJyxcbiAgICAgICAgICAgICAgcHJvcEZ1bGxOYW1lLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJXMgYXQgaW5kZXggJXMuJyxcbiAgICAgICAgICBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlciksXG4gICAgICAgICAgaVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZykpO1xuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8vIEBmbG93XG4vLyBAY3JlZGl0cyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9yb2dvemhuaWtvZmYvYTQzY2ZlZDI3YzQxZTRlNjhjZGNcbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5BcnJheShhcnJheTogQXJyYXk8YW55PiB8IFRvdWNoTGlzdCwgY2FsbGJhY2s6IEZ1bmN0aW9uKTogYW55IHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNhbGxiYWNrLmFwcGx5KGNhbGxiYWNrLCBbYXJyYXlbaV0sIGksIGFycmF5XSkpIHJldHVybiBhcnJheVtpXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmdW5jKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtKG51bTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbnVtID09PSAnbnVtYmVyJyAmJiAhaXNOYU4obnVtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludChhOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQoYSwgMTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9udFNldE1lKHByb3BzOiBPYmplY3QsIHByb3BOYW1lOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU6IHN0cmluZykge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgSW52YWxpZCBwcm9wICR7cHJvcE5hbWV9IHBhc3NlZCB0byAke2NvbXBvbmVudE5hbWV9IC0gZG8gbm90IHNldCB0aGlzLCBzZXQgaXQgb24gdGhlIGNoaWxkLmApO1xuICB9XG59XG4iLCIvLyBAZmxvd1xuY29uc3QgcHJlZml4ZXMgPSBbJ01veicsICdXZWJraXQnLCAnTycsICdtcyddO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWZpeChwcm9wOiBzdHJpbmc9J3RyYW5zZm9ybScpOiBzdHJpbmcge1xuICAvLyBDaGVja2luZyBzcGVjaWZpY2FsbHkgZm9yICd3aW5kb3cuZG9jdW1lbnQnIGlzIGZvciBwc2V1ZG8tYnJvd3NlciBzZXJ2ZXItc2lkZVxuICAvLyBlbnZpcm9ubWVudHMgdGhhdCBkZWZpbmUgJ3dpbmRvdycgYXMgdGhlIGdsb2JhbCBjb250ZXh0LlxuICAvLyBFLmcuIFJlYWN0LXJhaWxzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtcmFpbHMvcHVsbC84NClcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJyc7XG5cbiAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xuXG4gIGlmIChwcm9wIGluIHN0eWxlKSByZXR1cm4gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChicm93c2VyUHJlZml4VG9LZXkocHJvcCwgcHJlZml4ZXNbaV0pIGluIHN0eWxlKSByZXR1cm4gcHJlZml4ZXNbaV07XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyUHJlZml4VG9LZXkocHJvcDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwcmVmaXggPyBgJHtwcmVmaXh9JHtrZWJhYlRvVGl0bGVDYXNlKHByb3ApfWAgOiBwcm9wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlclByZWZpeFRvU3R5bGUocHJvcDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwcmVmaXggPyBgLSR7cHJlZml4LnRvTG93ZXJDYXNlKCl9LSR7cHJvcH1gIDogcHJvcDtcbn1cblxuZnVuY3Rpb24ga2ViYWJUb1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJztcbiAgbGV0IHNob3VsZENhcGl0YWxpemUgPSB0cnVlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzaG91bGRDYXBpdGFsaXplKSB7XG4gICAgICBvdXQgKz0gc3RyW2ldLnRvVXBwZXJDYXNlKCk7XG4gICAgICBzaG91bGRDYXBpdGFsaXplID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09ICctJykge1xuICAgICAgc2hvdWxkQ2FwaXRhbGl6ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSBzdHJbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8vIERlZmF1bHQgZXhwb3J0IGlzIHRoZSBwcmVmaXggaXRzZWxmLCBsaWtlICdNb3onLCAnV2Via2l0JywgZXRjXG4vLyBOb3RlIHRoYXQgeW91IG1heSBoYXZlIHRvIHJlLXRlc3QgZm9yIGNlcnRhaW4gdGhpbmdzOyBmb3IgaW5zdGFuY2UsIENocm9tZSA1MFxuLy8gY2FuIGhhbmRsZSB1bnByZWZpeGVkIGB0cmFuc2Zvcm1gLCBidXQgbm90IHVucHJlZml4ZWQgYHVzZXItc2VsZWN0YFxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJlZml4KCk7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtmaW5kSW5BcnJheSwgaXNGdW5jdGlvbiwgaW50fSBmcm9tICcuL3NoaW1zJztcbmltcG9ydCBicm93c2VyUHJlZml4LCB7YnJvd3NlclByZWZpeFRvS2V5fSBmcm9tICcuL2dldFByZWZpeCc7XG5cbmltcG9ydCB0eXBlIHtDb250cm9sUG9zaXRpb24sIFBvc2l0aW9uT2Zmc2V0Q29udHJvbFBvc2l0aW9uLCBNb3VzZVRvdWNoRXZlbnR9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgbWF0Y2hlc1NlbGVjdG9yRnVuYyA9ICcnO1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcihlbDogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIW1hdGNoZXNTZWxlY3RvckZ1bmMpIHtcbiAgICBtYXRjaGVzU2VsZWN0b3JGdW5jID0gZmluZEluQXJyYXkoW1xuICAgICAgJ21hdGNoZXMnLFxuICAgICAgJ3dlYmtpdE1hdGNoZXNTZWxlY3RvcicsXG4gICAgICAnbW96TWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICdtc01hdGNoZXNTZWxlY3RvcicsXG4gICAgICAnb01hdGNoZXNTZWxlY3RvcidcbiAgICBdLCBmdW5jdGlvbihtZXRob2Qpe1xuICAgICAgLy8gJEZsb3dJZ25vcmU6IERvZXNuJ3QgdGhpbmsgZWxlbWVudHMgYXJlIGluZGV4YWJsZVxuICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWxbbWV0aG9kXSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBNaWdodCBub3QgYmUgZm91bmQgZW50aXJlbHkgKG5vdCBhbiBFbGVtZW50PykgLSBpbiB0aGF0IGNhc2UsIGJhaWxcbiAgLy8gJEZsb3dJZ25vcmU6IERvZXNuJ3QgdGhpbmsgZWxlbWVudHMgYXJlIGluZGV4YWJsZVxuICBpZiAoIWlzRnVuY3Rpb24oZWxbbWF0Y2hlc1NlbGVjdG9yRnVuY10pKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gJEZsb3dJZ25vcmU6IERvZXNuJ3QgdGhpbmsgZWxlbWVudHMgYXJlIGluZGV4YWJsZVxuICByZXR1cm4gZWxbbWF0Y2hlc1NlbGVjdG9yRnVuY10oc2VsZWN0b3IpO1xufVxuXG4vLyBXb3JrcyB1cCB0aGUgdHJlZSB0byB0aGUgZHJhZ2dhYmxlIGl0c2VsZiBhdHRlbXB0aW5nIHRvIG1hdGNoIHNlbGVjdG9yLlxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvckFuZFBhcmVudHNUbyhlbDogTm9kZSwgc2VsZWN0b3I6IHN0cmluZywgYmFzZU5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgbGV0IG5vZGUgPSBlbDtcbiAgZG8ge1xuICAgIGlmIChtYXRjaGVzU2VsZWN0b3Iobm9kZSwgc2VsZWN0b3IpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobm9kZSA9PT0gYmFzZU5vZGUpIHJldHVybiBmYWxzZTtcbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9IHdoaWxlIChub2RlKTtcblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudChlbDogP05vZGUsIGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmICghZWwpIHsgcmV0dXJuOyB9XG4gIGlmIChlbC5hdHRhY2hFdmVudCkge1xuICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgaGFuZGxlcik7XG4gIH0gZWxzZSBpZiAoZWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vICRGbG93SWdub3JlOiBEb2Vzbid0IHRoaW5rIGVsZW1lbnRzIGFyZSBpbmRleGFibGVcbiAgICBlbFsnb24nICsgZXZlbnRdID0gaGFuZGxlcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZWw6ID9Ob2RlLCBldmVudDogc3RyaW5nLCBoYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAoIWVsKSB7IHJldHVybjsgfVxuICBpZiAoZWwuZGV0YWNoRXZlbnQpIHtcbiAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGhhbmRsZXIpO1xuICB9IGVsc2UgaWYgKGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyAkRmxvd0lnbm9yZTogRG9lc24ndCB0aGluayBlbGVtZW50cyBhcmUgaW5kZXhhYmxlXG4gICAgZWxbJ29uJyArIGV2ZW50XSA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dGVySGVpZ2h0KG5vZGU6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgLy8gVGhpcyBpcyBkZWxpYmVyYXRlbHkgZXhjbHVkaW5nIG1hcmdpbiBmb3Igb3VyIGNhbGN1bGF0aW9ucywgc2luY2Ugd2UgYXJlIHVzaW5nXG4gIC8vIG9mZnNldFRvcCB3aGljaCBpcyBpbmNsdWRpbmcgbWFyZ2luLiBTZWUgZ2V0Qm91bmRQb3NpdGlvblxuICBsZXQgaGVpZ2h0ID0gbm9kZS5jbGllbnRIZWlnaHQ7XG4gIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgaGVpZ2h0ICs9IGludChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKTtcbiAgaGVpZ2h0ICs9IGludChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKTtcbiAgcmV0dXJuIGhlaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dGVyV2lkdGgobm9kZTogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAvLyBUaGlzIGlzIGRlbGliZXJhdGVseSBleGNsdWRpbmcgbWFyZ2luIGZvciBvdXIgY2FsY3VsYXRpb25zLCBzaW5jZSB3ZSBhcmUgdXNpbmdcbiAgLy8gb2Zmc2V0TGVmdCB3aGljaCBpcyBpbmNsdWRpbmcgbWFyZ2luLiBTZWUgZ2V0Qm91bmRQb3NpdGlvblxuICBsZXQgd2lkdGggPSBub2RlLmNsaWVudFdpZHRoO1xuICBjb25zdCBjb21wdXRlZFN0eWxlID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gIHdpZHRoICs9IGludChjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCk7XG4gIHdpZHRoICs9IGludChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICByZXR1cm4gd2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5uZXJIZWlnaHQobm9kZTogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICBsZXQgaGVpZ2h0ID0gbm9kZS5jbGllbnRIZWlnaHQ7XG4gIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgaGVpZ2h0IC09IGludChjb21wdXRlZFN0eWxlLnBhZGRpbmdUb3ApO1xuICBoZWlnaHQgLT0gaW50KGNvbXB1dGVkU3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gIHJldHVybiBoZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbm5lcldpZHRoKG5vZGU6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IHdpZHRoID0gbm9kZS5jbGllbnRXaWR0aDtcbiAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICB3aWR0aCAtPSBpbnQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdCk7XG4gIHdpZHRoIC09IGludChjb21wdXRlZFN0eWxlLnBhZGRpbmdSaWdodCk7XG4gIHJldHVybiB3aWR0aDtcbn1cblxuLy8gR2V0IGZyb20gb2Zmc2V0UGFyZW50XG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0WFlGcm9tUGFyZW50KGV2dDoge2NsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyfSwgb2Zmc2V0UGFyZW50OiBIVE1MRWxlbWVudCk6IENvbnRyb2xQb3NpdGlvbiB7XG4gIGNvbnN0IGlzQm9keSA9IG9mZnNldFBhcmVudCA9PT0gb2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50UmVjdCA9IGlzQm9keSA/IHtsZWZ0OiAwLCB0b3A6IDB9IDogb2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHggPSBldnQuY2xpZW50WCArIG9mZnNldFBhcmVudC5zY3JvbGxMZWZ0IC0gb2Zmc2V0UGFyZW50UmVjdC5sZWZ0O1xuICBjb25zdCB5ID0gZXZ0LmNsaWVudFkgKyBvZmZzZXRQYXJlbnQuc2Nyb2xsVG9wIC0gb2Zmc2V0UGFyZW50UmVjdC50b3A7XG5cbiAgcmV0dXJuIHt4LCB5fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNTU1RyYW5zZm9ybShjb250cm9sUG9zOiBDb250cm9sUG9zaXRpb24sIHBvc2l0aW9uT2Zmc2V0OiBQb3NpdGlvbk9mZnNldENvbnRyb2xQb3NpdGlvbik6IE9iamVjdCB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uID0gZ2V0VHJhbnNsYXRpb24oY29udHJvbFBvcywgcG9zaXRpb25PZmZzZXQsICdweCcpO1xuICByZXR1cm4ge1ticm93c2VyUHJlZml4VG9LZXkoJ3RyYW5zZm9ybScsIGJyb3dzZXJQcmVmaXgpXTogdHJhbnNsYXRpb24gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNWR1RyYW5zZm9ybShjb250cm9sUG9zOiBDb250cm9sUG9zaXRpb24sIHBvc2l0aW9uT2Zmc2V0OiBQb3NpdGlvbk9mZnNldENvbnRyb2xQb3NpdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uID0gZ2V0VHJhbnNsYXRpb24oY29udHJvbFBvcywgcG9zaXRpb25PZmZzZXQsICcnKTtcbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uKHt4LCB5fTogQ29udHJvbFBvc2l0aW9uLCBwb3NpdGlvbk9mZnNldDogUG9zaXRpb25PZmZzZXRDb250cm9sUG9zaXRpb24sIHVuaXRTdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCB0cmFuc2xhdGlvbiA9IGB0cmFuc2xhdGUoJHt4fSR7dW5pdFN1ZmZpeH0sJHt5fSR7dW5pdFN1ZmZpeH0pYDtcbiAgaWYgKHBvc2l0aW9uT2Zmc2V0KSB7XG4gICAgY29uc3QgZGVmYXVsdFggPSBgJHsodHlwZW9mIHBvc2l0aW9uT2Zmc2V0LnggPT09ICdzdHJpbmcnKSA/IHBvc2l0aW9uT2Zmc2V0LnggOiBwb3NpdGlvbk9mZnNldC54ICsgdW5pdFN1ZmZpeH1gO1xuICAgIGNvbnN0IGRlZmF1bHRZID0gYCR7KHR5cGVvZiBwb3NpdGlvbk9mZnNldC55ID09PSAnc3RyaW5nJykgPyBwb3NpdGlvbk9mZnNldC55IDogcG9zaXRpb25PZmZzZXQueSArIHVuaXRTdWZmaXh9YDtcbiAgICB0cmFuc2xhdGlvbiA9IGB0cmFuc2xhdGUoJHtkZWZhdWx0WH0sICR7ZGVmYXVsdFl9KWAgKyB0cmFuc2xhdGlvbjtcbiAgfVxuICByZXR1cm4gdHJhbnNsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaChlOiBNb3VzZVRvdWNoRXZlbnQsIGlkZW50aWZpZXI6IG51bWJlcik6ID97Y2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXJ9IHtcbiAgcmV0dXJuIChlLnRhcmdldFRvdWNoZXMgJiYgZmluZEluQXJyYXkoZS50YXJnZXRUb3VjaGVzLCB0ID0+IGlkZW50aWZpZXIgPT09IHQuaWRlbnRpZmllcikpIHx8XG4gICAgICAgICAoZS5jaGFuZ2VkVG91Y2hlcyAmJiBmaW5kSW5BcnJheShlLmNoYW5nZWRUb3VjaGVzLCB0ID0+IGlkZW50aWZpZXIgPT09IHQuaWRlbnRpZmllcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG91Y2hJZGVudGlmaWVyKGU6IE1vdXNlVG91Y2hFdmVudCk6ID9udW1iZXIge1xuICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlc1swXSkgcmV0dXJuIGUudGFyZ2V0VG91Y2hlc1swXS5pZGVudGlmaWVyO1xuICBpZiAoZS5jaGFuZ2VkVG91Y2hlcyAmJiBlLmNoYW5nZWRUb3VjaGVzWzBdKSByZXR1cm4gZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyO1xufVxuXG4vLyBVc2VyLXNlbGVjdCBIYWNrczpcbi8vXG4vLyBVc2VmdWwgZm9yIHByZXZlbnRpbmcgYmx1ZSBoaWdobGlnaHRzIGFsbCBvdmVyIGV2ZXJ5dGhpbmcgd2hlbiBkcmFnZ2luZy5cblxuLy8gTm90ZSB3ZSdyZSBwYXNzaW5nIGBkb2N1bWVudGAgYi9jIHdlIGNvdWxkIGJlIGlmcmFtZWRcbmV4cG9ydCBmdW5jdGlvbiBhZGRVc2VyU2VsZWN0U3R5bGVzKGRvYzogP0RvY3VtZW50KSB7XG4gIGlmICghZG9jKSByZXR1cm47XG4gIGxldCBzdHlsZUVsID0gZG9jLmdldEVsZW1lbnRCeUlkKCdyZWFjdC1kcmFnZ2FibGUtc3R5bGUtZWwnKTtcbiAgaWYgKCFzdHlsZUVsKSB7XG4gICAgc3R5bGVFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgc3R5bGVFbC5pZCA9ICdyZWFjdC1kcmFnZ2FibGUtc3R5bGUtZWwnO1xuICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gJy5yZWFjdC1kcmFnZ2FibGUtdHJhbnNwYXJlbnQtc2VsZWN0aW9uICo6Oi1tb3otc2VsZWN0aW9uIHthbGw6IGluaGVyaXQ7fVxcbic7XG4gICAgc3R5bGVFbC5pbm5lckhUTUwgKz0gJy5yZWFjdC1kcmFnZ2FibGUtdHJhbnNwYXJlbnQtc2VsZWN0aW9uICo6OnNlbGVjdGlvbiB7YWxsOiBpbmhlcml0O31cXG4nO1xuICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWwpO1xuICB9XG4gIGlmIChkb2MuYm9keSkgYWRkQ2xhc3NOYW1lKGRvYy5ib2R5LCAncmVhY3QtZHJhZ2dhYmxlLXRyYW5zcGFyZW50LXNlbGVjdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVXNlclNlbGVjdFN0eWxlcyhkb2M6ID9Eb2N1bWVudCkge1xuICB0cnkge1xuICAgIGlmIChkb2MgJiYgZG9jLmJvZHkpIHJlbW92ZUNsYXNzTmFtZShkb2MuYm9keSwgJ3JlYWN0LWRyYWdnYWJsZS10cmFuc3BhcmVudC1zZWxlY3Rpb24nKTtcbiAgICAvLyAkRmxvd0lnbm9yZTogSUVcbiAgICBpZiAoZG9jLnNlbGVjdGlvbikge1xuICAgICAgLy8gJEZsb3dJZ25vcmU6IElFXG4gICAgICBkb2Muc2VsZWN0aW9uLmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsgIC8vIHJlbW92ZSBzZWxlY3Rpb24gY2F1c2VkIGJ5IHNjcm9sbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHByb2JhYmx5IElFXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlSGFja3MoY2hpbGRTdHlsZTogT2JqZWN0ID0ge30pOiBPYmplY3Qge1xuICAvLyBXb3JrYXJvdW5kIElFIHBvaW50ZXIgZXZlbnRzOyBzZWUgIzUxXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9temFicmlza2llL3JlYWN0LWRyYWdnYWJsZS9pc3N1ZXMvNTEjaXNzdWVjb21tZW50LTEwMzQ4ODI3OFxuICByZXR1cm4ge1xuICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICAgLi4uY2hpbGRTdHlsZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ2xhc3NOYW1lKGVsOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWVsLmNsYXNzTmFtZS5tYXRjaChuZXcgUmVnRXhwKGAoPzpefFxcXFxzKSR7Y2xhc3NOYW1lfSg/IVxcXFxTKWApKSkge1xuICAgICAgZWwuY2xhc3NOYW1lICs9IGAgJHtjbGFzc05hbWV9YDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbDogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cChgKD86XnxcXFxccykke2NsYXNzTmFtZX0oPyFcXFxcUylgLCAnZycpLCAnJyk7XG4gIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQge2lzTnVtLCBpbnR9IGZyb20gJy4vc2hpbXMnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQge2dldFRvdWNoLCBpbm5lcldpZHRoLCBpbm5lckhlaWdodCwgb2Zmc2V0WFlGcm9tUGFyZW50LCBvdXRlcldpZHRoLCBvdXRlckhlaWdodH0gZnJvbSAnLi9kb21GbnMnO1xuXG5pbXBvcnQgdHlwZSBEcmFnZ2FibGUgZnJvbSAnLi4vRHJhZ2dhYmxlJztcbmltcG9ydCB0eXBlIHtCb3VuZHMsIENvbnRyb2xQb3NpdGlvbiwgRHJhZ2dhYmxlRGF0YSwgTW91c2VUb3VjaEV2ZW50fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIERyYWdnYWJsZUNvcmUgZnJvbSAnLi4vRHJhZ2dhYmxlQ29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3VuZFBvc2l0aW9uKGRyYWdnYWJsZTogRHJhZ2dhYmxlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAvLyBJZiBubyBib3VuZHMsIHNob3J0LWNpcmN1aXQgYW5kIG1vdmUgb25cbiAgaWYgKCFkcmFnZ2FibGUucHJvcHMuYm91bmRzKSByZXR1cm4gW3gsIHldO1xuXG4gIC8vIENsb25lIG5ldyBib3VuZHNcbiAgbGV0IHtib3VuZHN9ID0gZHJhZ2dhYmxlLnByb3BzO1xuICBib3VuZHMgPSB0eXBlb2YgYm91bmRzID09PSAnc3RyaW5nJyA/IGJvdW5kcyA6IGNsb25lQm91bmRzKGJvdW5kcyk7XG4gIGNvbnN0IG5vZGUgPSBmaW5kRE9NTm9kZShkcmFnZ2FibGUpO1xuXG4gIGlmICh0eXBlb2YgYm91bmRzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHtvd25lckRvY3VtZW50fSA9IG5vZGU7XG4gICAgY29uc3Qgb3duZXJXaW5kb3cgPSBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIGxldCBib3VuZE5vZGU7XG4gICAgaWYgKGJvdW5kcyA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIGJvdW5kTm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmROb2RlID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGJvdW5kcyk7XG4gICAgfVxuICAgIGlmICghKGJvdW5kTm9kZSBpbnN0YW5jZW9mIG93bmVyV2luZG93LkhUTUxFbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgc2VsZWN0b3IgXCInICsgYm91bmRzICsgJ1wiIGNvdWxkIG5vdCBmaW5kIGFuIGVsZW1lbnQuJyk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVTdHlsZSA9IG93bmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgY29uc3QgYm91bmROb2RlU3R5bGUgPSBvd25lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJvdW5kTm9kZSk7XG4gICAgLy8gQ29tcHV0ZSBib3VuZHMuIFRoaXMgaXMgYSBwYWluIHdpdGggcGFkZGluZyBhbmQgb2Zmc2V0cyBidXQgdGhpcyBnZXRzIGl0IGV4YWN0bHkgcmlnaHQuXG4gICAgYm91bmRzID0ge1xuICAgICAgbGVmdDogLW5vZGUub2Zmc2V0TGVmdCArIGludChib3VuZE5vZGVTdHlsZS5wYWRkaW5nTGVmdCkgKyBpbnQobm9kZVN0eWxlLm1hcmdpbkxlZnQpLFxuICAgICAgdG9wOiAtbm9kZS5vZmZzZXRUb3AgKyBpbnQoYm91bmROb2RlU3R5bGUucGFkZGluZ1RvcCkgKyBpbnQobm9kZVN0eWxlLm1hcmdpblRvcCksXG4gICAgICByaWdodDogaW5uZXJXaWR0aChib3VuZE5vZGUpIC0gb3V0ZXJXaWR0aChub2RlKSAtIG5vZGUub2Zmc2V0TGVmdCArXG4gICAgICAgIGludChib3VuZE5vZGVTdHlsZS5wYWRkaW5nUmlnaHQpIC0gaW50KG5vZGVTdHlsZS5tYXJnaW5SaWdodCksXG4gICAgICBib3R0b206IGlubmVySGVpZ2h0KGJvdW5kTm9kZSkgLSBvdXRlckhlaWdodChub2RlKSAtIG5vZGUub2Zmc2V0VG9wICtcbiAgICAgICAgaW50KGJvdW5kTm9kZVN0eWxlLnBhZGRpbmdCb3R0b20pIC0gaW50KG5vZGVTdHlsZS5tYXJnaW5Cb3R0b20pXG4gICAgfTtcbiAgfVxuXG4gIC8vIEtlZXAgeCBhbmQgeSBiZWxvdyByaWdodCBhbmQgYm90dG9tIGxpbWl0cy4uLlxuICBpZiAoaXNOdW0oYm91bmRzLnJpZ2h0KSkgeCA9IE1hdGgubWluKHgsIGJvdW5kcy5yaWdodCk7XG4gIGlmIChpc051bShib3VuZHMuYm90dG9tKSkgeSA9IE1hdGgubWluKHksIGJvdW5kcy5ib3R0b20pO1xuXG4gIC8vIEJ1dCBhYm92ZSBsZWZ0IGFuZCB0b3AgbGltaXRzLlxuICBpZiAoaXNOdW0oYm91bmRzLmxlZnQpKSB4ID0gTWF0aC5tYXgoeCwgYm91bmRzLmxlZnQpO1xuICBpZiAoaXNOdW0oYm91bmRzLnRvcCkpIHkgPSBNYXRoLm1heCh5LCBib3VuZHMudG9wKTtcblxuICByZXR1cm4gW3gsIHldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvR3JpZChncmlkOiBbbnVtYmVyLCBudW1iZXJdLCBwZW5kaW5nWDogbnVtYmVyLCBwZW5kaW5nWTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHggPSBNYXRoLnJvdW5kKHBlbmRpbmdYIC8gZ3JpZFswXSkgKiBncmlkWzBdO1xuICBjb25zdCB5ID0gTWF0aC5yb3VuZChwZW5kaW5nWSAvIGdyaWRbMV0pICogZ3JpZFsxXTtcbiAgcmV0dXJuIFt4LCB5XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbkRyYWdYKGRyYWdnYWJsZTogRHJhZ2dhYmxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBkcmFnZ2FibGUucHJvcHMuYXhpcyA9PT0gJ2JvdGgnIHx8IGRyYWdnYWJsZS5wcm9wcy5heGlzID09PSAneCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5EcmFnWShkcmFnZ2FibGU6IERyYWdnYWJsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZHJhZ2dhYmxlLnByb3BzLmF4aXMgPT09ICdib3RoJyB8fCBkcmFnZ2FibGUucHJvcHMuYXhpcyA9PT0gJ3knO1xufVxuXG4vLyBHZXQge3gsIHl9IHBvc2l0aW9ucyBmcm9tIGV2ZW50LlxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xQb3NpdGlvbihlOiBNb3VzZVRvdWNoRXZlbnQsIHRvdWNoSWRlbnRpZmllcjogP251bWJlciwgZHJhZ2dhYmxlQ29yZTogRHJhZ2dhYmxlQ29yZSk6ID9Db250cm9sUG9zaXRpb24ge1xuICBjb25zdCB0b3VjaE9iaiA9IHR5cGVvZiB0b3VjaElkZW50aWZpZXIgPT09ICdudW1iZXInID8gZ2V0VG91Y2goZSwgdG91Y2hJZGVudGlmaWVyKSA6IG51bGw7XG4gIGlmICh0eXBlb2YgdG91Y2hJZGVudGlmaWVyID09PSAnbnVtYmVyJyAmJiAhdG91Y2hPYmopIHJldHVybiBudWxsOyAvLyBub3QgdGhlIHJpZ2h0IHRvdWNoXG4gIGNvbnN0IG5vZGUgPSBmaW5kRE9NTm9kZShkcmFnZ2FibGVDb3JlKTtcbiAgLy8gVXNlciBjYW4gcHJvdmlkZSBhbiBvZmZzZXRQYXJlbnQgaWYgZGVzaXJlZC5cbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gZHJhZ2dhYmxlQ29yZS5wcm9wcy5vZmZzZXRQYXJlbnQgfHwgbm9kZS5vZmZzZXRQYXJlbnQgfHwgbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIHJldHVybiBvZmZzZXRYWUZyb21QYXJlbnQodG91Y2hPYmogfHwgZSwgb2Zmc2V0UGFyZW50KTtcbn1cblxuLy8gQ3JlYXRlIGFuIGRhdGEgb2JqZWN0IGV4cG9zZWQgYnkgPERyYWdnYWJsZUNvcmU+J3MgZXZlbnRzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29yZURhdGEoZHJhZ2dhYmxlOiBEcmFnZ2FibGVDb3JlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IERyYWdnYWJsZURhdGEge1xuICBjb25zdCBzdGF0ZSA9IGRyYWdnYWJsZS5zdGF0ZTtcbiAgY29uc3QgaXNTdGFydCA9ICFpc051bShzdGF0ZS5sYXN0WCk7XG4gIGNvbnN0IG5vZGUgPSBmaW5kRE9NTm9kZShkcmFnZ2FibGUpO1xuXG4gIGlmIChpc1N0YXJ0KSB7XG4gICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgbW92ZSwgdXNlIHRoZSB4IGFuZCB5IGFzIGxhc3QgY29vcmRzLlxuICAgIHJldHVybiB7XG4gICAgICBub2RlLFxuICAgICAgZGVsdGFYOiAwLCBkZWx0YVk6IDAsXG4gICAgICBsYXN0WDogeCwgbGFzdFk6IHksXG4gICAgICB4LCB5LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIGNhbGN1bGF0ZSBwcm9wZXIgdmFsdWVzLlxuICAgIHJldHVybiB7XG4gICAgICBub2RlLFxuICAgICAgZGVsdGFYOiB4IC0gc3RhdGUubGFzdFgsIGRlbHRhWTogeSAtIHN0YXRlLmxhc3RZLFxuICAgICAgbGFzdFg6IHN0YXRlLmxhc3RYLCBsYXN0WTogc3RhdGUubGFzdFksXG4gICAgICB4LCB5LFxuICAgIH07XG4gIH1cbn1cblxuLy8gQ3JlYXRlIGFuIGRhdGEgZXhwb3NlZCBieSA8RHJhZ2dhYmxlPidzIGV2ZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURyYWdnYWJsZURhdGEoZHJhZ2dhYmxlOiBEcmFnZ2FibGUsIGNvcmVEYXRhOiBEcmFnZ2FibGVEYXRhKTogRHJhZ2dhYmxlRGF0YSB7XG4gIGNvbnN0IHNjYWxlID0gZHJhZ2dhYmxlLnByb3BzLnNjYWxlO1xuICByZXR1cm4ge1xuICAgIG5vZGU6IGNvcmVEYXRhLm5vZGUsXG4gICAgeDogZHJhZ2dhYmxlLnN0YXRlLnggKyAoY29yZURhdGEuZGVsdGFYIC8gc2NhbGUpLFxuICAgIHk6IGRyYWdnYWJsZS5zdGF0ZS55ICsgKGNvcmVEYXRhLmRlbHRhWSAvIHNjYWxlKSxcbiAgICBkZWx0YVg6IChjb3JlRGF0YS5kZWx0YVggLyBzY2FsZSksXG4gICAgZGVsdGFZOiAoY29yZURhdGEuZGVsdGFZIC8gc2NhbGUpLFxuICAgIGxhc3RYOiBkcmFnZ2FibGUuc3RhdGUueCxcbiAgICBsYXN0WTogZHJhZ2dhYmxlLnN0YXRlLnlcbiAgfTtcbn1cblxuLy8gQSBsb3QgZmFzdGVyIHRoYW4gc3RyaW5naWZ5L3BhcnNlXG5mdW5jdGlvbiBjbG9uZUJvdW5kcyhib3VuZHM6IEJvdW5kcyk6IEJvdW5kcyB7XG4gIHJldHVybiB7XG4gICAgbGVmdDogYm91bmRzLmxlZnQsXG4gICAgdG9wOiBib3VuZHMudG9wLFxuICAgIHJpZ2h0OiBib3VuZHMucmlnaHQsXG4gICAgYm90dG9tOiBib3VuZHMuYm90dG9tXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGRyYWdnYWJsZTogRHJhZ2dhYmxlIHwgRHJhZ2dhYmxlQ29yZSk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3Qgbm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKGRyYWdnYWJsZSk7XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignPERyYWdnYWJsZUNvcmU+OiBVbm1vdW50ZWQgZHVyaW5nIGV2ZW50IScpO1xuICB9XG4gIC8vICRGbG93SWdub3JlIHdlIGNhbid0IGFzc2VydCBvbiBIVE1MRWxlbWVudCBkdWUgdG8gdGVzdHMuLi4gRklYTUVcbiAgcmV0dXJuIG5vZGU7XG59XG4iLCIvLyBAZmxvd1xuLyplc2xpbnQgbm8tY29uc29sZTowKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvZyguLi5hcmdzOiBhbnkpIHtcbiAgaWYgKHByb2Nlc3MuZW52LkRSQUdHQUJMRV9ERUJVRykgY29uc29sZS5sb2coLi4uYXJncyk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7bWF0Y2hlc1NlbGVjdG9yQW5kUGFyZW50c1RvLCBhZGRFdmVudCwgcmVtb3ZlRXZlbnQsIGFkZFVzZXJTZWxlY3RTdHlsZXMsIGdldFRvdWNoSWRlbnRpZmllcixcbiAgICAgICAgcmVtb3ZlVXNlclNlbGVjdFN0eWxlcywgc3R5bGVIYWNrc30gZnJvbSAnLi91dGlscy9kb21GbnMnO1xuaW1wb3J0IHtjcmVhdGVDb3JlRGF0YSwgZ2V0Q29udHJvbFBvc2l0aW9uLCBzbmFwVG9HcmlkfSBmcm9tICcuL3V0aWxzL3Bvc2l0aW9uRm5zJztcbmltcG9ydCB7ZG9udFNldE1lfSBmcm9tICcuL3V0aWxzL3NoaW1zJztcbmltcG9ydCBsb2cgZnJvbSAnLi91dGlscy9sb2cnO1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRIYW5kbGVyLCBNb3VzZVRvdWNoRXZlbnR9IGZyb20gJy4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0VsZW1lbnQgYXMgUmVhY3RFbGVtZW50fSBmcm9tICdyZWFjdCc7XG5cbi8vIFNpbXBsZSBhYnN0cmFjdGlvbiBmb3IgZHJhZ2dpbmcgZXZlbnRzIG5hbWVzLlxuY29uc3QgZXZlbnRzRm9yID0ge1xuICB0b3VjaDoge1xuICAgIHN0YXJ0OiAndG91Y2hzdGFydCcsXG4gICAgbW92ZTogJ3RvdWNobW92ZScsXG4gICAgc3RvcDogJ3RvdWNoZW5kJ1xuICB9LFxuICBtb3VzZToge1xuICAgIHN0YXJ0OiAnbW91c2Vkb3duJyxcbiAgICBtb3ZlOiAnbW91c2Vtb3ZlJyxcbiAgICBzdG9wOiAnbW91c2V1cCdcbiAgfVxufTtcblxuLy8gRGVmYXVsdCB0byBtb3VzZSBldmVudHMuXG5sZXQgZHJhZ0V2ZW50Rm9yID0gZXZlbnRzRm9yLm1vdXNlO1xuXG50eXBlIERyYWdnYWJsZUNvcmVTdGF0ZSA9IHtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4sXG4gIGxhc3RYOiBudW1iZXIsXG4gIGxhc3RZOiBudW1iZXIsXG4gIHRvdWNoSWRlbnRpZmllcjogP251bWJlclxufTtcblxuZXhwb3J0IHR5cGUgRHJhZ2dhYmxlQm91bmRzID0ge1xuICBsZWZ0OiBudW1iZXIsXG4gIHJpZ2h0OiBudW1iZXIsXG4gIHRvcDogbnVtYmVyLFxuICBib3R0b206IG51bWJlcixcbn07XG5cbmV4cG9ydCB0eXBlIERyYWdnYWJsZURhdGEgPSB7XG4gIG5vZGU6IEhUTUxFbGVtZW50LFxuICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyLFxuICBsYXN0WDogbnVtYmVyLCBsYXN0WTogbnVtYmVyLFxufTtcblxuZXhwb3J0IHR5cGUgRHJhZ2dhYmxlRXZlbnRIYW5kbGVyID0gKGU6IE1vdXNlRXZlbnQsIGRhdGE6IERyYWdnYWJsZURhdGEpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xQb3NpdGlvbiA9IHt4OiBudW1iZXIsIHk6IG51bWJlcn07XG5leHBvcnQgdHlwZSBQb3NpdGlvbk9mZnNldENvbnRyb2xQb3NpdGlvbiA9IHt4OiBudW1iZXJ8c3RyaW5nLCB5OiBudW1iZXJ8c3RyaW5nfTtcblxuZXhwb3J0IHR5cGUgRHJhZ2dhYmxlQ29yZVByb3BzID0ge1xuICBhbGxvd0FueUNsaWNrOiBib29sZWFuLFxuICBjYW5jZWw6IHN0cmluZyxcbiAgY2hpbGRyZW46IFJlYWN0RWxlbWVudDxhbnk+LFxuICBkaXNhYmxlZDogYm9vbGVhbixcbiAgZW5hYmxlVXNlclNlbGVjdEhhY2s6IGJvb2xlYW4sXG4gIG9mZnNldFBhcmVudDogSFRNTEVsZW1lbnQsXG4gIGdyaWQ6IFtudW1iZXIsIG51bWJlcl0sXG4gIGhhbmRsZTogc3RyaW5nLFxuICBvblN0YXJ0OiBEcmFnZ2FibGVFdmVudEhhbmRsZXIsXG4gIG9uRHJhZzogRHJhZ2dhYmxlRXZlbnRIYW5kbGVyLFxuICBvblN0b3A6IERyYWdnYWJsZUV2ZW50SGFuZGxlcixcbiAgb25Nb3VzZURvd246IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkLFxufTtcblxuLy9cbi8vIERlZmluZSA8RHJhZ2dhYmxlQ29yZT4uXG4vL1xuLy8gPERyYWdnYWJsZUNvcmU+IGlzIGZvciBhZHZhbmNlZCB1c2FnZSBvZiA8RHJhZ2dhYmxlPi4gSXQgbWFpbnRhaW5zIG1pbmltYWwgaW50ZXJuYWwgc3RhdGUgc28gaXQgY2FuXG4vLyB3b3JrIHdlbGwgd2l0aCBsaWJyYXJpZXMgdGhhdCByZXF1aXJlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBlbGVtZW50LlxuLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZ2dhYmxlQ29yZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxEcmFnZ2FibGVDb3JlUHJvcHMsIERyYWdnYWJsZUNvcmVTdGF0ZT4ge1xuXG4gIHN0YXRpYyBkaXNwbGF5TmFtZSA9ICdEcmFnZ2FibGVDb3JlJztcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC8qKlxuICAgICAqIGBhbGxvd0FueUNsaWNrYCBhbGxvd3MgZHJhZ2dpbmcgdXNpbmcgYW55IG1vdXNlIGJ1dHRvbi5cbiAgICAgKiBCeSBkZWZhdWx0LCB3ZSBvbmx5IGFjY2VwdCB0aGUgbGVmdCBidXR0b24uXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAqL1xuICAgIGFsbG93QW55Q2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogYGRpc2FibGVkYCwgaWYgdHJ1ZSwgc3RvcHMgdGhlIDxEcmFnZ2FibGU+IGZyb20gZHJhZ2dpbmcuIEFsbCBoYW5kbGVycyxcbiAgICAgKiB3aXRoIHRoZSBleGNlcHRpb24gb2YgYG9uTW91c2VEb3duYCwgd2lsbCBub3QgZmlyZS5cbiAgICAgKi9cbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB3ZSBhZGQgJ3VzZXItc2VsZWN0Om5vbmUnIGF0dHJpYnV0ZXMgdG8gdGhlIGRvY3VtZW50IGJvZHlcbiAgICAgKiB0byBwcmV2ZW50IHVnbHkgdGV4dCBzZWxlY3Rpb24gZHVyaW5nIGRyYWcuIElmIHRoaXMgaXMgY2F1c2luZyBwcm9ibGVtc1xuICAgICAqIGZvciB5b3VyIGFwcCwgc2V0IHRoaXMgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICBlbmFibGVVc2VyU2VsZWN0SGFjazogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBgb2Zmc2V0UGFyZW50YCwgaWYgc2V0LCB1c2VzIHRoZSBwYXNzZWQgRE9NIG5vZGUgdG8gY29tcHV0ZSBkcmFnIG9mZnNldHNcbiAgICAgKiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwYXJlbnQgbm9kZS5cbiAgICAgKi9cbiAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKHByb3BzOiBEcmFnZ2FibGVDb3JlUHJvcHMsIHByb3BOYW1lOiAkS2V5czxEcmFnZ2FibGVDb3JlUHJvcHM+KSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdICYmIHByb3BzW3Byb3BOYW1lXS5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyYWdnYWJsZVxcJ3Mgb2Zmc2V0UGFyZW50IG11c3QgYmUgYSBET00gTm9kZS4nKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogYGdyaWRgIHNwZWNpZmllcyB0aGUgeCBhbmQgeSB0aGF0IGRyYWdnaW5nIHNob3VsZCBzbmFwIHRvLlxuICAgICAqL1xuICAgIGdyaWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuICAgIFxuICAgIC8qKlxuICAgICAqIGBzY2FsZWAgc3BlY2lmaWVzIHRoZSBzY2FsZSBvZiB0aGUgYXJlYSB5b3UgYXJlIGRyYWdnaW5nIGluc2lkZSBvZi4gSXQgYWxsb3dzXG4gICAgICogdGhlIGRyYWcgZGVsdGFzIHRvIHNjYWxlIGNvcnJlY3RseSB3aXRoIGhvdyBmYXIgem9vbWVkIGluL291dCB5b3UgYXJlLlxuICAgICAqL1xuICAgIHNjYWxlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gICAgLyoqXG4gICAgICogYGhhbmRsZWAgc3BlY2lmaWVzIGEgc2VsZWN0b3IgdG8gYmUgdXNlZCBhcyB0aGUgaGFuZGxlIHRoYXQgaW5pdGlhdGVzIGRyYWcuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogICBsZXQgQXBwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgICAqICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgcmV0dXJuIChcbiAgICAgKiAgICAgICAgICAgIDxEcmFnZ2FibGUgaGFuZGxlPVwiLmhhbmRsZVwiPlxuICAgICAqICAgICAgICAgICAgICA8ZGl2PlxuICAgICAqICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoYW5kbGVcIj5DbGljayBtZSB0byBkcmFnPC9kaXY+XG4gICAgICogICAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgaXMgc29tZSBvdGhlciBjb250ZW50PC9kaXY+XG4gICAgICogICAgICAgICAgICAgIDwvZGl2PlxuICAgICAqICAgICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgKiAgICAgICAgICk7XG4gICAgICogICAgICAgfVxuICAgICAqICAgfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgaGFuZGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogYGNhbmNlbGAgc3BlY2lmaWVzIGEgc2VsZWN0b3IgdG8gYmUgdXNlZCB0byBwcmV2ZW50IGRyYWcgaW5pdGlhbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogICBsZXQgQXBwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgICAqICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgICByZXR1cm4oXG4gICAgICogICAgICAgICAgICAgICA8RHJhZ2dhYmxlIGNhbmNlbD1cIi5jYW5jZWxcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYW5jZWxcIj5Zb3UgY2FuJ3QgZHJhZyBmcm9tIGhlcmU8L2Rpdj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIDxkaXY+RHJhZ2dpbmcgaGVyZSB3b3JrcyBmaW5lPC9kaXY+XG4gICAgICogICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICogICAgICAgICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgKiAgICAgICAgICAgKTtcbiAgICAgKiAgICAgICB9XG4gICAgICogICB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjYW5jZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBkcmFnZ2luZyBzdGFydHMuXG4gICAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBib29sZWFuIGZhbHNlLCBkcmFnZ2luZyB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoaWxlIGRyYWdnaW5nLlxuICAgICAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYm9vbGVhbiBmYWxzZSwgZHJhZ2dpbmcgd2lsbCBiZSBjYW5jZWxlZC5cbiAgICAgKi9cbiAgICBvbkRyYWc6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gZHJhZ2dpbmcgc3RvcHMuXG4gICAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBib29sZWFuIGZhbHNlLCB0aGUgZHJhZyB3aWxsIHJlbWFpbiBhY3RpdmUuXG4gICAgICovXG4gICAgb25TdG9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAqIEEgd29ya2Fyb3VuZCBvcHRpb24gd2hpY2ggY2FuIGJlIHBhc3NlZCBpZiBvbk1vdXNlRG93biBuZWVkcyB0byBiZSBhY2Nlc3NlZCxcbiAgICAgKiBzaW5jZSBpdCdsbCBhbHdheXMgYmUgYmxvY2tlZCAoYXMgdGhlcmUgaXMgaW50ZXJuYWwgdXNlIG9mIG9uTW91c2VEb3duKVxuICAgICAqL1xuICAgIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGJlIGRlZmluZWQgb24gdGhlIGNoaWxkLCBub3QgaGVyZS5cbiAgICAgKi9cbiAgICBjbGFzc05hbWU6IGRvbnRTZXRNZSxcbiAgICBzdHlsZTogZG9udFNldE1lLFxuICAgIHRyYW5zZm9ybTogZG9udFNldE1lXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhbGxvd0FueUNsaWNrOiBmYWxzZSwgLy8gYnkgZGVmYXVsdCBvbmx5IGFjY2VwdCBsZWZ0IGNsaWNrXG4gICAgY2FuY2VsOiBudWxsLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlbmFibGVVc2VyU2VsZWN0SGFjazogdHJ1ZSxcbiAgICBvZmZzZXRQYXJlbnQ6IG51bGwsXG4gICAgaGFuZGxlOiBudWxsLFxuICAgIGdyaWQ6IG51bGwsXG4gICAgdHJhbnNmb3JtOiBudWxsLFxuICAgIG9uU3RhcnQ6IGZ1bmN0aW9uKCl7fSxcbiAgICBvbkRyYWc6IGZ1bmN0aW9uKCl7fSxcbiAgICBvblN0b3A6IGZ1bmN0aW9uKCl7fSxcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24oKXt9XG4gIH07XG5cbiAgc3RhdGUgPSB7XG4gICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgIC8vIFVzZWQgd2hpbGUgZHJhZ2dpbmcgdG8gZGV0ZXJtaW5lIGRlbHRhcy5cbiAgICBsYXN0WDogTmFOLCBsYXN0WTogTmFOLFxuICAgIHRvdWNoSWRlbnRpZmllcjogbnVsbFxuICB9O1xuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIC8vIFJlbW92ZSBhbnkgbGVmdG92ZXIgZXZlbnQgaGFuZGxlcnMuIFJlbW92ZSBib3RoIHRvdWNoIGFuZCBtb3VzZSBoYW5kbGVycyBpbiBjYXNlXG4gICAgLy8gc29tZSBicm93c2VyIHF1aXJrIGNhdXNlZCBhIHRvdWNoIGV2ZW50IHRvIGZpcmUgZHVyaW5nIGEgbW91c2UgbW92ZSwgb3IgdmljZSB2ZXJzYS5cbiAgICBjb25zdCB0aGlzTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIGlmICh0aGlzTm9kZSkge1xuICAgICAgY29uc3Qge293bmVyRG9jdW1lbnR9ID0gdGhpc05vZGU7XG4gICAgICByZW1vdmVFdmVudChvd25lckRvY3VtZW50LCBldmVudHNGb3IubW91c2UubW92ZSwgdGhpcy5oYW5kbGVEcmFnKTtcbiAgICAgIHJlbW92ZUV2ZW50KG93bmVyRG9jdW1lbnQsIGV2ZW50c0Zvci50b3VjaC5tb3ZlLCB0aGlzLmhhbmRsZURyYWcpO1xuICAgICAgcmVtb3ZlRXZlbnQob3duZXJEb2N1bWVudCwgZXZlbnRzRm9yLm1vdXNlLnN0b3AsIHRoaXMuaGFuZGxlRHJhZ1N0b3ApO1xuICAgICAgcmVtb3ZlRXZlbnQob3duZXJEb2N1bWVudCwgZXZlbnRzRm9yLnRvdWNoLnN0b3AsIHRoaXMuaGFuZGxlRHJhZ1N0b3ApO1xuICAgICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlVXNlclNlbGVjdEhhY2spIHJlbW92ZVVzZXJTZWxlY3RTdHlsZXMob3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRHJhZ1N0YXJ0OiBFdmVudEhhbmRsZXI8TW91c2VUb3VjaEV2ZW50PiA9IChlKSA9PiB7XG4gICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBhdHRhY2ggZXZlbnQgaGFuZGxlcnMgb24gdG9wIG9mIHRoaXMgb25lLlxuICAgIHRoaXMucHJvcHMub25Nb3VzZURvd24oZSk7XG5cbiAgICAvLyBPbmx5IGFjY2VwdCBsZWZ0LWNsaWNrcy5cbiAgICBpZiAoIXRoaXMucHJvcHMuYWxsb3dBbnlDbGljayAmJiB0eXBlb2YgZS5idXR0b24gPT09ICdudW1iZXInICYmIGUuYnV0dG9uICE9PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBHZXQgbm9kZXMuIEJlIHN1cmUgdG8gZ3JhYiByZWxhdGl2ZSBkb2N1bWVudCAoY291bGQgYmUgaWZyYW1lZClcbiAgICBjb25zdCB0aGlzTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIGlmICghdGhpc05vZGUgfHwgIXRoaXNOb2RlLm93bmVyRG9jdW1lbnQgfHwgIXRoaXNOb2RlLm93bmVyRG9jdW1lbnQuYm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCc8RHJhZ2dhYmxlQ29yZT4gbm90IG1vdW50ZWQgb24gRHJhZ1N0YXJ0IScpO1xuICAgIH1cbiAgICBjb25zdCB7b3duZXJEb2N1bWVudH0gPSB0aGlzTm9kZTtcblxuICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgaGFuZGxlIG9yIGNhbmNlbCBwcm9wIHdhcyBwcm92aWRlZCBhbmQgc2VsZWN0b3IgZG9lc24ndCBtYXRjaC5cbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgKCEoZS50YXJnZXQgaW5zdGFuY2VvZiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lk5vZGUpKSB8fFxuICAgICAgKHRoaXMucHJvcHMuaGFuZGxlICYmICFtYXRjaGVzU2VsZWN0b3JBbmRQYXJlbnRzVG8oZS50YXJnZXQsIHRoaXMucHJvcHMuaGFuZGxlLCB0aGlzTm9kZSkpIHx8XG4gICAgICAodGhpcy5wcm9wcy5jYW5jZWwgJiYgbWF0Y2hlc1NlbGVjdG9yQW5kUGFyZW50c1RvKGUudGFyZ2V0LCB0aGlzLnByb3BzLmNhbmNlbCwgdGhpc05vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCB0b3VjaCBpZGVudGlmaWVyIGluIGNvbXBvbmVudCBzdGF0ZSBpZiB0aGlzIGlzIGEgdG91Y2ggZXZlbnQuIFRoaXMgYWxsb3dzIHVzIHRvXG4gICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbmRpdmlkdWFsIHRvdWNoZXMgb24gbXVsdGl0b3VjaCBzY3JlZW5zIGJ5IGlkZW50aWZ5aW5nIHdoaWNoXG4gICAgLy8gdG91Y2hwb2ludCB3YXMgc2V0IHRvIHRoaXMgZWxlbWVudC5cbiAgICBjb25zdCB0b3VjaElkZW50aWZpZXIgPSBnZXRUb3VjaElkZW50aWZpZXIoZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7dG91Y2hJZGVudGlmaWVyfSk7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZHJhZyBwb2ludCBmcm9tIHRoZSBldmVudC4gVGhpcyBpcyB1c2VkIGFzIHRoZSBvZmZzZXQuXG4gICAgY29uc3QgcG9zaXRpb24gPSBnZXRDb250cm9sUG9zaXRpb24oZSwgdG91Y2hJZGVudGlmaWVyLCB0aGlzKTtcbiAgICBpZiAocG9zaXRpb24gPT0gbnVsbCkgcmV0dXJuOyAvLyBub3QgcG9zc2libGUgYnV0IHNhdGlzZmllcyBmbG93XG4gICAgY29uc3Qge3gsIHl9ID0gcG9zaXRpb247XG5cbiAgICAvLyBDcmVhdGUgYW4gZXZlbnQgb2JqZWN0IHdpdGggYWxsIHRoZSBkYXRhIHBhcmVudHMgbmVlZCB0byBtYWtlIGEgZGVjaXNpb24gaGVyZS5cbiAgICBjb25zdCBjb3JlRXZlbnQgPSBjcmVhdGVDb3JlRGF0YSh0aGlzLCB4LCB5KTtcblxuICAgIGxvZygnRHJhZ2dhYmxlQ29yZTogaGFuZGxlRHJhZ1N0YXJ0OiAlaicsIGNvcmVFdmVudCk7XG5cbiAgICAvLyBDYWxsIGV2ZW50IGhhbmRsZXIuIElmIGl0IHJldHVybnMgZXhwbGljaXQgZmFsc2UsIGNhbmNlbC5cbiAgICBsb2coJ2NhbGxpbmcnLCB0aGlzLnByb3BzLm9uU3RhcnQpO1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9IHRoaXMucHJvcHMub25TdGFydChlLCBjb3JlRXZlbnQpO1xuICAgIGlmIChzaG91bGRVcGRhdGUgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAvLyBBZGQgYSBzdHlsZSB0byB0aGUgYm9keSB0byBkaXNhYmxlIHVzZXItc2VsZWN0LiBUaGlzIHByZXZlbnRzIHRleHQgZnJvbVxuICAgIC8vIGJlaW5nIHNlbGVjdGVkIGFsbCBvdmVyIHRoZSBwYWdlLlxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZVVzZXJTZWxlY3RIYWNrKSBhZGRVc2VyU2VsZWN0U3R5bGVzKG93bmVyRG9jdW1lbnQpO1xuXG4gICAgLy8gSW5pdGlhdGUgZHJhZ2dpbmcuIFNldCB0aGUgY3VycmVudCB4IGFuZCB5IGFzIG9mZnNldHNcbiAgICAvLyBzbyB3ZSBrbm93IGhvdyBtdWNoIHdlJ3ZlIG1vdmVkIGR1cmluZyB0aGUgZHJhZy4gVGhpcyBhbGxvd3MgdXNcbiAgICAvLyB0byBkcmFnIGVsZW1lbnRzIGFyb3VuZCBldmVuIGlmIHRoZXkgaGF2ZSBiZWVuIG1vdmVkLCB3aXRob3V0IGlzc3VlLlxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZHJhZ2dpbmc6IHRydWUsXG5cbiAgICAgIGxhc3RYOiB4LFxuICAgICAgbGFzdFk6IHlcbiAgICB9KTtcblxuICAgIC8vIEFkZCBldmVudHMgdG8gdGhlIGRvY3VtZW50IGRpcmVjdGx5IHNvIHdlIGNhdGNoIHdoZW4gdGhlIHVzZXIncyBtb3VzZS90b3VjaCBtb3ZlcyBvdXRzaWRlIG9mXG4gICAgLy8gdGhpcyBlbGVtZW50LiBXZSB1c2UgZGlmZmVyZW50IGV2ZW50cyBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3Qgd2UgaGF2ZSBkZXRlY3RlZCB0aGF0IHRoaXNcbiAgICAvLyBpcyBhIHRvdWNoLWNhcGFibGUgZGV2aWNlLlxuICAgIGFkZEV2ZW50KG93bmVyRG9jdW1lbnQsIGRyYWdFdmVudEZvci5tb3ZlLCB0aGlzLmhhbmRsZURyYWcpO1xuICAgIGFkZEV2ZW50KG93bmVyRG9jdW1lbnQsIGRyYWdFdmVudEZvci5zdG9wLCB0aGlzLmhhbmRsZURyYWdTdG9wKTtcbiAgfTtcblxuICBoYW5kbGVEcmFnOiBFdmVudEhhbmRsZXI8TW91c2VUb3VjaEV2ZW50PiA9IChlKSA9PiB7XG5cbiAgICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvbiBtb2JpbGUgZGV2aWNlcywgbGlrZSBpcGFkL2lwaG9uZS5cbiAgICBpZiAoZS50eXBlID09PSAndG91Y2htb3ZlJykgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGRyYWcgcG9pbnQgZnJvbSB0aGUgZXZlbnQuIFRoaXMgaXMgdXNlZCBhcyB0aGUgb2Zmc2V0LlxuICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0Q29udHJvbFBvc2l0aW9uKGUsIHRoaXMuc3RhdGUudG91Y2hJZGVudGlmaWVyLCB0aGlzKTtcbiAgICBpZiAocG9zaXRpb24gPT0gbnVsbCkgcmV0dXJuO1xuICAgIGxldCB7eCwgeX0gPSBwb3NpdGlvbjtcblxuICAgIC8vIFNuYXAgdG8gZ3JpZCBpZiBwcm9wIGhhcyBiZWVuIHByb3ZpZGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5ncmlkKSkge1xuICAgICAgbGV0IGRlbHRhWCA9IHggLSB0aGlzLnN0YXRlLmxhc3RYLCBkZWx0YVkgPSB5IC0gdGhpcy5zdGF0ZS5sYXN0WTtcbiAgICAgIFtkZWx0YVgsIGRlbHRhWV0gPSBzbmFwVG9HcmlkKHRoaXMucHJvcHMuZ3JpZCwgZGVsdGFYLCBkZWx0YVkpO1xuICAgICAgaWYgKCFkZWx0YVggJiYgIWRlbHRhWSkgcmV0dXJuOyAvLyBza2lwIHVzZWxlc3MgZHJhZ1xuICAgICAgeCA9IHRoaXMuc3RhdGUubGFzdFggKyBkZWx0YVgsIHkgPSB0aGlzLnN0YXRlLmxhc3RZICsgZGVsdGFZO1xuICAgIH1cblxuICAgIGNvbnN0IGNvcmVFdmVudCA9IGNyZWF0ZUNvcmVEYXRhKHRoaXMsIHgsIHkpO1xuXG4gICAgbG9nKCdEcmFnZ2FibGVDb3JlOiBoYW5kbGVEcmFnOiAlaicsIGNvcmVFdmVudCk7XG5cbiAgICAvLyBDYWxsIGV2ZW50IGhhbmRsZXIuIElmIGl0IHJldHVybnMgZXhwbGljaXQgZmFsc2UsIHRyaWdnZXIgZW5kLlxuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9IHRoaXMucHJvcHMub25EcmFnKGUsIGNvcmVFdmVudCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vICRGbG93SWdub3JlXG4gICAgICAgIHRoaXMuaGFuZGxlRHJhZ1N0b3AobmV3IE1vdXNlRXZlbnQoJ21vdXNldXAnKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gT2xkIGJyb3dzZXJzXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gKChkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTogYW55KTogTW91c2VUb3VjaEV2ZW50KTtcbiAgICAgICAgLy8gSSBzZWUgd2h5IHRoaXMgaW5zYW5pdHkgd2FzIGRlcHJlY2F0ZWRcbiAgICAgICAgLy8gJEZsb3dJZ25vcmVcbiAgICAgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoJ21vdXNldXAnLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVEcmFnU3RvcChldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBsYXN0WDogeCxcbiAgICAgIGxhc3RZOiB5XG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlRHJhZ1N0b3A6IEV2ZW50SGFuZGxlcjxNb3VzZVRvdWNoRXZlbnQ+ID0gKGUpID0+IHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuZHJhZ2dpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0Q29udHJvbFBvc2l0aW9uKGUsIHRoaXMuc3RhdGUudG91Y2hJZGVudGlmaWVyLCB0aGlzKTtcbiAgICBpZiAocG9zaXRpb24gPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHt4LCB5fSA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IGNvcmVFdmVudCA9IGNyZWF0ZUNvcmVEYXRhKHRoaXMsIHgsIHkpO1xuXG4gICAgY29uc3QgdGhpc05vZGUgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICBpZiAodGhpc05vZGUpIHtcbiAgICAgIC8vIFJlbW92ZSB1c2VyLXNlbGVjdCBoYWNrXG4gICAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVVc2VyU2VsZWN0SGFjaykgcmVtb3ZlVXNlclNlbGVjdFN0eWxlcyh0aGlzTm9kZS5vd25lckRvY3VtZW50KTtcbiAgICB9XG5cbiAgICBsb2coJ0RyYWdnYWJsZUNvcmU6IGhhbmRsZURyYWdTdG9wOiAlaicsIGNvcmVFdmVudCk7XG5cbiAgICAvLyBSZXNldCB0aGUgZWwuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkcmFnZ2luZzogZmFsc2UsXG4gICAgICBsYXN0WDogTmFOLFxuICAgICAgbGFzdFk6IE5hTlxuICAgIH0pO1xuXG4gICAgLy8gQ2FsbCBldmVudCBoYW5kbGVyXG4gICAgdGhpcy5wcm9wcy5vblN0b3AoZSwgY29yZUV2ZW50KTtcblxuICAgIGlmICh0aGlzTm9kZSkge1xuICAgICAgLy8gUmVtb3ZlIGV2ZW50IGhhbmRsZXJzXG4gICAgICBsb2coJ0RyYWdnYWJsZUNvcmU6IFJlbW92aW5nIGhhbmRsZXJzJyk7XG4gICAgICByZW1vdmVFdmVudCh0aGlzTm9kZS5vd25lckRvY3VtZW50LCBkcmFnRXZlbnRGb3IubW92ZSwgdGhpcy5oYW5kbGVEcmFnKTtcbiAgICAgIHJlbW92ZUV2ZW50KHRoaXNOb2RlLm93bmVyRG9jdW1lbnQsIGRyYWdFdmVudEZvci5zdG9wLCB0aGlzLmhhbmRsZURyYWdTdG9wKTtcbiAgICB9XG4gIH07XG5cbiAgb25Nb3VzZURvd246IEV2ZW50SGFuZGxlcjxNb3VzZVRvdWNoRXZlbnQ+ID0gKGUpID0+IHtcbiAgICBkcmFnRXZlbnRGb3IgPSBldmVudHNGb3IubW91c2U7IC8vIG9uIHRvdWNoc2NyZWVuIGxhcHRvcHMgd2UgY291bGQgc3dpdGNoIGJhY2sgdG8gbW91c2VcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZURyYWdTdGFydChlKTtcbiAgfTtcblxuICBvbk1vdXNlVXA6IEV2ZW50SGFuZGxlcjxNb3VzZVRvdWNoRXZlbnQ+ID0gKGUpID0+IHtcbiAgICBkcmFnRXZlbnRGb3IgPSBldmVudHNGb3IubW91c2U7XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVEcmFnU3RvcChlKTtcbiAgfTtcblxuICAvLyBTYW1lIGFzIG9uTW91c2VEb3duIChzdGFydCBkcmFnKSwgYnV0IG5vdyBjb25zaWRlciB0aGlzIGEgdG91Y2ggZGV2aWNlLlxuICBvblRvdWNoU3RhcnQ6IEV2ZW50SGFuZGxlcjxNb3VzZVRvdWNoRXZlbnQ+ID0gKGUpID0+IHtcbiAgICAvLyBXZSdyZSBvbiBhIHRvdWNoIGRldmljZSBub3csIHNvIGNoYW5nZSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICBkcmFnRXZlbnRGb3IgPSBldmVudHNGb3IudG91Y2g7XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVEcmFnU3RhcnQoZSk7XG4gIH07XG5cbiAgb25Ub3VjaEVuZDogRXZlbnRIYW5kbGVyPE1vdXNlVG91Y2hFdmVudD4gPSAoZSkgPT4ge1xuICAgIC8vIFdlJ3JlIG9uIGEgdG91Y2ggZGV2aWNlIG5vdywgc28gY2hhbmdlIHRoZSBldmVudCBoYW5kbGVyc1xuICAgIGRyYWdFdmVudEZvciA9IGV2ZW50c0Zvci50b3VjaDtcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZURyYWdTdG9wKGUpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBSZXVzZSB0aGUgY2hpbGQgcHJvdmlkZWRcbiAgICAvLyBUaGlzIG1ha2VzIGl0IGZsZXhpYmxlIHRvIHVzZSB3aGF0ZXZlciBlbGVtZW50IGlzIHdhbnRlZCAoZGl2LCB1bCwgZXRjKVxuICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKSwge1xuICAgICAgc3R5bGU6IHN0eWxlSGFja3ModGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcy5zdHlsZSksXG5cbiAgICAgIC8vIE5vdGU6IG1vdXNlTW92ZSBoYW5kbGVyIGlzIGF0dGFjaGVkIHRvIGRvY3VtZW50IHNvIGl0IHdpbGwgc3RpbGwgZnVuY3Rpb25cbiAgICAgIC8vIHdoZW4gdGhlIHVzZXIgZHJhZ3MgcXVpY2tseSBhbmQgbGVhdmVzIHRoZSBib3VuZHMgb2YgdGhlIGVsZW1lbnQuXG4gICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93bixcbiAgICAgIG9uVG91Y2hTdGFydDogdGhpcy5vblRvdWNoU3RhcnQsXG4gICAgICBvbk1vdXNlVXA6IHRoaXMub25Nb3VzZVVwLFxuICAgICAgb25Ub3VjaEVuZDogdGhpcy5vblRvdWNoRW5kXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge2NyZWF0ZUNTU1RyYW5zZm9ybSwgY3JlYXRlU1ZHVHJhbnNmb3JtfSBmcm9tICcuL3V0aWxzL2RvbUZucyc7XG5pbXBvcnQge2NhbkRyYWdYLCBjYW5EcmFnWSwgY3JlYXRlRHJhZ2dhYmxlRGF0YSwgZ2V0Qm91bmRQb3NpdGlvbn0gZnJvbSAnLi91dGlscy9wb3NpdGlvbkZucyc7XG5pbXBvcnQge2RvbnRTZXRNZX0gZnJvbSAnLi91dGlscy9zaGltcyc7XG5pbXBvcnQgRHJhZ2dhYmxlQ29yZSBmcm9tICcuL0RyYWdnYWJsZUNvcmUnO1xuaW1wb3J0IHR5cGUge0NvbnRyb2xQb3NpdGlvbiwgUG9zaXRpb25PZmZzZXRDb250cm9sUG9zaXRpb24sIERyYWdnYWJsZUJvdW5kcywgRHJhZ2dhYmxlQ29yZVByb3BzfSBmcm9tICcuL0RyYWdnYWJsZUNvcmUnO1xuaW1wb3J0IGxvZyBmcm9tICcuL3V0aWxzL2xvZyc7XG5pbXBvcnQgdHlwZSB7RHJhZ2dhYmxlRXZlbnRIYW5kbGVyfSBmcm9tICcuL3V0aWxzL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFbGVtZW50IGFzIFJlYWN0RWxlbWVudH0gZnJvbSAncmVhY3QnO1xuXG50eXBlIERyYWdnYWJsZVN0YXRlID0ge1xuICBkcmFnZ2luZzogYm9vbGVhbixcbiAgZHJhZ2dlZDogYm9vbGVhbixcbiAgeDogbnVtYmVyLCB5OiBudW1iZXIsXG4gIHNsYWNrWDogbnVtYmVyLCBzbGFja1k6IG51bWJlcixcbiAgaXNFbGVtZW50U1ZHOiBib29sZWFuXG59O1xuXG5leHBvcnQgdHlwZSBEcmFnZ2FibGVQcm9wcyA9IHtcbiAgLi4uJEV4YWN0PERyYWdnYWJsZUNvcmVQcm9wcz4sXG4gIGF4aXM6ICdib3RoJyB8ICd4JyB8ICd5JyB8ICdub25lJyxcbiAgYm91bmRzOiBEcmFnZ2FibGVCb3VuZHMgfCBzdHJpbmcgfCBmYWxzZSxcbiAgZGVmYXVsdENsYXNzTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dpbmc6IHN0cmluZyxcbiAgZGVmYXVsdENsYXNzTmFtZURyYWdnZWQ6IHN0cmluZyxcbiAgZGVmYXVsdFBvc2l0aW9uOiBDb250cm9sUG9zaXRpb24sXG4gIHBvc2l0aW9uT2Zmc2V0OiBQb3NpdGlvbk9mZnNldENvbnRyb2xQb3NpdGlvbixcbiAgcG9zaXRpb246IENvbnRyb2xQb3NpdGlvbixcbiAgc2NhbGU6IG51bWJlclxufTtcblxuLy9cbi8vIERlZmluZSA8RHJhZ2dhYmxlPlxuLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZ2dhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PERyYWdnYWJsZVByb3BzLCBEcmFnZ2FibGVTdGF0ZT4ge1xuXG4gIHN0YXRpYyBkaXNwbGF5TmFtZSA9ICdEcmFnZ2FibGUnO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLy8gQWNjZXB0cyBhbGwgcHJvcHMgPERyYWdnYWJsZUNvcmU+IGFjY2VwdHMuXG4gICAgLi4uRHJhZ2dhYmxlQ29yZS5wcm9wVHlwZXMsXG5cbiAgICAvKipcbiAgICAgKiBgYXhpc2AgZGV0ZXJtaW5lcyB3aGljaCBheGlzIHRoZSBkcmFnZ2FibGUgY2FuIG1vdmUuXG4gICAgICpcbiAgICAgKiAgTm90ZSB0aGF0IGFsbCBjYWxsYmFja3Mgd2lsbCBzdGlsbCByZXR1cm4gZGF0YSBhcyBub3JtYWwuIFRoaXMgb25seVxuICAgICAqICBjb250cm9scyBmbHVzaGluZyB0byB0aGUgRE9NLlxuICAgICAqXG4gICAgICogJ2JvdGgnIGFsbG93cyBtb3ZlbWVudCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuXG4gICAgICogJ3gnIGxpbWl0cyBtb3ZlbWVudCB0byBob3Jpem9udGFsIGF4aXMuXG4gICAgICogJ3knIGxpbWl0cyBtb3ZlbWVudCB0byB2ZXJ0aWNhbCBheGlzLlxuICAgICAqICdub25lJyBsaW1pdHMgYWxsIG1vdmVtZW50LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gJ2JvdGgnLlxuICAgICAqL1xuICAgIGF4aXM6IFByb3BUeXBlcy5vbmVPZihbJ2JvdGgnLCAneCcsICd5JywgJ25vbmUnXSksXG5cbiAgICAvKipcbiAgICAgKiBgYm91bmRzYCBkZXRlcm1pbmVzIHRoZSByYW5nZSBvZiBtb3ZlbWVudCBhdmFpbGFibGUgdG8gdGhlIGVsZW1lbnQuXG4gICAgICogQXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICpcbiAgICAgKiAncGFyZW50JyByZXN0cmljdHMgbW92ZW1lbnQgd2l0aGluIHRoZSBEcmFnZ2FibGUncyBwYXJlbnQgbm9kZS5cbiAgICAgKlxuICAgICAqIEFsdGVybmF0aXZlbHksIHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLCBhbGwgb2Ygd2hpY2ggYXJlIG9wdGlvbmFsOlxuICAgICAqXG4gICAgICoge2xlZnQ6IExFRlRfQk9VTkQsIHJpZ2h0OiBSSUdIVF9CT1VORCwgYm90dG9tOiBCT1RUT01fQk9VTkQsIHRvcDogVE9QX0JPVU5EfVxuICAgICAqXG4gICAgICogQWxsIHZhbHVlcyBhcmUgaW4gcHguXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogICBsZXQgQXBwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgICAqICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgcmV0dXJuIChcbiAgICAgKiAgICAgICAgICAgIDxEcmFnZ2FibGUgYm91bmRzPXt7cmlnaHQ6IDMwMCwgYm90dG9tOiAzMDB9fT5cbiAgICAgKiAgICAgICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICogICAgICAgICAgIDwvRHJhZ2dhYmxlPlxuICAgICAqICAgICAgICAgKTtcbiAgICAgKiAgICAgICB9XG4gICAgICogICB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBib3VuZHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgbGVmdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgcmlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHRvcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgYm90dG9tOiBQcm9wVHlwZXMubnVtYmVyXG4gICAgICB9KSxcbiAgICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSlcbiAgICBdKSxcblxuICAgIGRlZmF1bHRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdENsYXNzTmFtZURyYWdnaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHRDbGFzc05hbWVEcmFnZ2VkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogYGRlZmF1bHRQb3NpdGlvbmAgc3BlY2lmaWVzIHRoZSB4IGFuZCB5IHRoYXQgdGhlIGRyYWdnZWQgaXRlbSBzaG91bGQgc3RhcnQgYXRcbiAgICAgKlxuICAgICAqIEV4YW1wbGU6XG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiAgICAgIGxldCBBcHAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAgICogICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICogICAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlIGRlZmF1bHRQb3NpdGlvbj17e3g6IDI1LCB5OiAyNX19PlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIDxkaXY+SSBzdGFydCB3aXRoIHRyYW5zZm9ybVg6IDI1cHggYW5kIHRyYW5zZm9ybVk6IDI1cHg7PC9kaXY+XG4gICAgICogICAgICAgICAgICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgKiAgICAgICAgICAgICAgKTtcbiAgICAgKiAgICAgICAgICB9XG4gICAgICogICAgICB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWZhdWx0UG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgeTogUHJvcFR5cGVzLm51bWJlclxuICAgIH0pLFxuICAgIHBvc2l0aW9uT2Zmc2V0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgICAgeTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBgcG9zaXRpb25gLCBpZiBwcmVzZW50LCBkZWZpbmVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogIFRoaXMgaXMgc2ltaWxhciB0byBob3cgZm9ybSBlbGVtZW50cyBpbiBSZWFjdCB3b3JrIC0gaWYgbm8gYHBvc2l0aW9uYCBpcyBzdXBwbGllZCwgdGhlIGNvbXBvbmVudFxuICAgICAqICBpcyB1bmNvbnRyb2xsZWQuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogICAgICBsZXQgQXBwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgICAqICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAqICAgICAgICAgICAgICAgICAgPERyYWdnYWJsZSBwb3NpdGlvbj17e3g6IDI1LCB5OiAyNX19PlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIDxkaXY+SSBzdGFydCB3aXRoIHRyYW5zZm9ybVg6IDI1cHggYW5kIHRyYW5zZm9ybVk6IDI1cHg7PC9kaXY+XG4gICAgICogICAgICAgICAgICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgKiAgICAgICAgICAgICAgKTtcbiAgICAgKiAgICAgICAgICB9XG4gICAgICogICAgICB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICB5OiBQcm9wVHlwZXMubnVtYmVyXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZWZpbmVkIG9uIHRoZSBjaGlsZCwgbm90IGhlcmUuXG4gICAgICovXG4gICAgY2xhc3NOYW1lOiBkb250U2V0TWUsXG4gICAgc3R5bGU6IGRvbnRTZXRNZSxcbiAgICB0cmFuc2Zvcm06IGRvbnRTZXRNZVxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgLi4uRHJhZ2dhYmxlQ29yZS5kZWZhdWx0UHJvcHMsXG4gICAgYXhpczogJ2JvdGgnLFxuICAgIGJvdW5kczogZmFsc2UsXG4gICAgZGVmYXVsdENsYXNzTmFtZTogJ3JlYWN0LWRyYWdnYWJsZScsXG4gICAgZGVmYXVsdENsYXNzTmFtZURyYWdnaW5nOiAncmVhY3QtZHJhZ2dhYmxlLWRyYWdnaW5nJyxcbiAgICBkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dlZDogJ3JlYWN0LWRyYWdnYWJsZS1kcmFnZ2VkJyxcbiAgICBkZWZhdWx0UG9zaXRpb246IHt4OiAwLCB5OiAwfSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBzY2FsZTogMVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEcmFnZ2FibGVQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VycmVudGx5IGRyYWdnaW5nLlxuICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuXG4gICAgICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGJlZW4gZHJhZ2dlZCBiZWZvcmUuXG4gICAgICBkcmFnZ2VkOiBmYWxzZSxcblxuICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0geCBhbmQgeS5cbiAgICAgIHg6IHByb3BzLnBvc2l0aW9uID8gcHJvcHMucG9zaXRpb24ueCA6IHByb3BzLmRlZmF1bHRQb3NpdGlvbi54LFxuICAgICAgeTogcHJvcHMucG9zaXRpb24gPyBwcm9wcy5wb3NpdGlvbi55IDogcHJvcHMuZGVmYXVsdFBvc2l0aW9uLnksXG5cbiAgICAgIC8vIFVzZWQgZm9yIGNvbXBlbnNhdGluZyBmb3Igb3V0LW9mLWJvdW5kcyBkcmFnc1xuICAgICAgc2xhY2tYOiAwLCBzbGFja1k6IDAsXG5cbiAgICAgIC8vIENhbiBvbmx5IGRldGVybWluZSBpZiBTVkcgYWZ0ZXIgbW91bnRpbmdcbiAgICAgIGlzRWxlbWVudFNWRzogZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLnBvc2l0aW9uICYmICEocHJvcHMub25EcmFnIHx8IHByb3BzLm9uU3RvcCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oJ0EgYHBvc2l0aW9uYCB3YXMgYXBwbGllZCB0byB0aGlzIDxEcmFnZ2FibGU+LCB3aXRob3V0IGRyYWcgaGFuZGxlcnMuIFRoaXMgd2lsbCBtYWtlIHRoaXMgJyArXG4gICAgICAgICdjb21wb25lbnQgZWZmZWN0aXZlbHkgdW5kcmFnZ2FibGUuIFBsZWFzZSBhdHRhY2ggYG9uRHJhZ2Agb3IgYG9uU3RvcGAgaGFuZGxlcnMgc28geW91IGNhbiBhZGp1c3QgdGhlICcgK1xuICAgICAgICAnYHBvc2l0aW9uYCBvZiB0aGlzIGVsZW1lbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBlbGVtZW50IHBhc3NlZCBpcyBhbiBpbnN0YW5jZW9mIFNWR0VsZW1lbnRcbiAgICBpZih0eXBlb2Ygd2luZG93LlNWR0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc0VsZW1lbnRTVkc6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHM6IE9iamVjdCkge1xuICAgIC8vIFNldCB4L3kgaWYgcG9zaXRpb24gaGFzIGNoYW5nZWRcbiAgICBpZiAobmV4dFByb3BzLnBvc2l0aW9uICYmXG4gICAgICAgICghdGhpcy5wcm9wcy5wb3NpdGlvbiB8fFxuICAgICAgICAgIG5leHRQcm9wcy5wb3NpdGlvbi54ICE9PSB0aGlzLnByb3BzLnBvc2l0aW9uLnggfHxcbiAgICAgICAgICBuZXh0UHJvcHMucG9zaXRpb24ueSAhPT0gdGhpcy5wcm9wcy5wb3NpdGlvbi55XG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHg6IG5leHRQcm9wcy5wb3NpdGlvbi54LCB5OiBuZXh0UHJvcHMucG9zaXRpb24ueSB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZzogZmFsc2V9KTsgLy8gcHJldmVudHMgaW52YXJpYW50IGlmIHVubW91bnRlZCB3aGlsZSBkcmFnZ2luZ1xuICB9XG5cbiAgb25EcmFnU3RhcnQ6IERyYWdnYWJsZUV2ZW50SGFuZGxlciA9IChlLCBjb3JlRGF0YSkgPT4ge1xuICAgIGxvZygnRHJhZ2dhYmxlOiBvbkRyYWdTdGFydDogJWonLCBjb3JlRGF0YSk7XG5cbiAgICAvLyBTaG9ydC1jaXJjdWl0IGlmIHVzZXIncyBjYWxsYmFjayBraWxsZWQgaXQuXG4gICAgY29uc3Qgc2hvdWxkU3RhcnQgPSB0aGlzLnByb3BzLm9uU3RhcnQoZSwgY3JlYXRlRHJhZ2dhYmxlRGF0YSh0aGlzLCBjb3JlRGF0YSkpO1xuICAgIC8vIEtpbGxzIHN0YXJ0IGV2ZW50IG9uIGNvcmUgYXMgd2VsbCwgc28gbW92ZSBoYW5kbGVycyBhcmUgbmV2ZXIgYm91bmQuXG4gICAgaWYgKHNob3VsZFN0YXJ0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ2dpbmc6IHRydWUsIGRyYWdnZWQ6IHRydWV9KTtcbiAgfTtcblxuICBvbkRyYWc6IERyYWdnYWJsZUV2ZW50SGFuZGxlciA9IChlLCBjb3JlRGF0YSkgPT4ge1xuICAgIGlmICghdGhpcy5zdGF0ZS5kcmFnZ2luZykgcmV0dXJuIGZhbHNlO1xuICAgIGxvZygnRHJhZ2dhYmxlOiBvbkRyYWc6ICVqJywgY29yZURhdGEpO1xuXG4gICAgY29uc3QgdWlEYXRhID0gY3JlYXRlRHJhZ2dhYmxlRGF0YSh0aGlzLCBjb3JlRGF0YSk7XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogJFNoYXBlPERyYWdnYWJsZVN0YXRlPiA9IHtcbiAgICAgIHg6IHVpRGF0YS54LFxuICAgICAgeTogdWlEYXRhLnlcbiAgICB9O1xuXG4gICAgLy8gS2VlcCB3aXRoaW4gYm91bmRzLlxuICAgIGlmICh0aGlzLnByb3BzLmJvdW5kcykge1xuICAgICAgLy8gU2F2ZSBvcmlnaW5hbCB4IGFuZCB5LlxuICAgICAgY29uc3Qge3gsIHl9ID0gbmV3U3RhdGU7XG5cbiAgICAgIC8vIEFkZCBzbGFjayB0byB0aGUgdmFsdWVzIHVzZWQgdG8gY2FsY3VsYXRlIGJvdW5kIHBvc2l0aW9uLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgaWZcbiAgICAgIC8vIHdlIHN0YXJ0IHJlbW92aW5nIHNsYWNrLCB0aGUgZWxlbWVudCB3b24ndCByZWFjdCB0byBpdCByaWdodCBhd2F5IHVudGlsIGl0J3MgYmVlblxuICAgICAgLy8gY29tcGxldGVseSByZW1vdmVkLlxuICAgICAgbmV3U3RhdGUueCArPSB0aGlzLnN0YXRlLnNsYWNrWDtcbiAgICAgIG5ld1N0YXRlLnkgKz0gdGhpcy5zdGF0ZS5zbGFja1k7XG5cbiAgICAgIC8vIEdldCBib3VuZCBwb3NpdGlvbi4gVGhpcyB3aWxsIGNlaWwvZmxvb3IgdGhlIHggYW5kIHkgd2l0aGluIHRoZSBib3VuZGFyaWVzLlxuICAgICAgY29uc3QgW25ld1N0YXRlWCwgbmV3U3RhdGVZXSA9IGdldEJvdW5kUG9zaXRpb24odGhpcywgbmV3U3RhdGUueCwgbmV3U3RhdGUueSk7XG4gICAgICBuZXdTdGF0ZS54ID0gbmV3U3RhdGVYO1xuICAgICAgbmV3U3RhdGUueSA9IG5ld1N0YXRlWTtcblxuICAgICAgLy8gUmVjYWxjdWxhdGUgc2xhY2sgYnkgbm90aW5nIGhvdyBtdWNoIHdhcyBzaGF2ZWQgYnkgdGhlIGJvdW5kUG9zaXRpb24gaGFuZGxlci5cbiAgICAgIG5ld1N0YXRlLnNsYWNrWCA9IHRoaXMuc3RhdGUuc2xhY2tYICsgKHggLSBuZXdTdGF0ZS54KTtcbiAgICAgIG5ld1N0YXRlLnNsYWNrWSA9IHRoaXMuc3RhdGUuc2xhY2tZICsgKHkgLSBuZXdTdGF0ZS55KTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBldmVudCB3ZSBmaXJlIHRvIHJlZmxlY3Qgd2hhdCByZWFsbHkgaGFwcGVuZWQgYWZ0ZXIgYm91bmRzIHRvb2sgZWZmZWN0LlxuICAgICAgdWlEYXRhLnggPSBuZXdTdGF0ZS54O1xuICAgICAgdWlEYXRhLnkgPSBuZXdTdGF0ZS55O1xuICAgICAgdWlEYXRhLmRlbHRhWCA9IG5ld1N0YXRlLnggLSB0aGlzLnN0YXRlLng7XG4gICAgICB1aURhdGEuZGVsdGFZID0gbmV3U3RhdGUueSAtIHRoaXMuc3RhdGUueTtcbiAgICB9XG5cbiAgICAvLyBTaG9ydC1jaXJjdWl0IGlmIHVzZXIncyBjYWxsYmFjayBraWxsZWQgaXQuXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID0gdGhpcy5wcm9wcy5vbkRyYWcoZSwgdWlEYXRhKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gIH07XG5cbiAgb25EcmFnU3RvcDogRHJhZ2dhYmxlRXZlbnRIYW5kbGVyID0gKGUsIGNvcmVEYXRhKSA9PiB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmRyYWdnaW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTaG9ydC1jaXJjdWl0IGlmIHVzZXIncyBjYWxsYmFjayBraWxsZWQgaXQuXG4gICAgY29uc3Qgc2hvdWxkU3RvcCA9IHRoaXMucHJvcHMub25TdG9wKGUsIGNyZWF0ZURyYWdnYWJsZURhdGEodGhpcywgY29yZURhdGEpKTtcbiAgICBpZiAoc2hvdWxkU3RvcCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIGxvZygnRHJhZ2dhYmxlOiBvbkRyYWdTdG9wOiAlaicsIGNvcmVEYXRhKTtcblxuICAgIGNvbnN0IG5ld1N0YXRlOiAkU2hhcGU8RHJhZ2dhYmxlU3RhdGU+ID0ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgc2xhY2tYOiAwLFxuICAgICAgc2xhY2tZOiAwXG4gICAgfTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIGNvbXBvbmVudCwgdGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbiB3aWxsIGJlIHRvXG4gICAgLy8gcmV2ZXJ0IGJhY2sgdG8gdGhlIG9sZCBwb3NpdGlvbi4gV2UgZXhwZWN0IGEgaGFuZGxlciBvbiBgb25EcmFnU3RvcGAsIGF0IHRoZSBsZWFzdC5cbiAgICBjb25zdCBjb250cm9sbGVkID0gQm9vbGVhbih0aGlzLnByb3BzLnBvc2l0aW9uKTtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgY29uc3Qge3gsIHl9ID0gdGhpcy5wcm9wcy5wb3NpdGlvbjtcbiAgICAgIG5ld1N0YXRlLnggPSB4O1xuICAgICAgbmV3U3RhdGUueSA9IHk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IFJlYWN0RWxlbWVudDxhbnk+IHtcbiAgICBsZXQgc3R5bGUgPSB7fSwgc3ZnVHJhbnNmb3JtID0gbnVsbDtcblxuICAgIC8vIElmIHRoaXMgaXMgY29udHJvbGxlZCwgd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIGl0IC0gdW5sZXNzIGl0J3MgZHJhZ2dpbmcuXG4gICAgY29uc3QgY29udHJvbGxlZCA9IEJvb2xlYW4odGhpcy5wcm9wcy5wb3NpdGlvbik7XG4gICAgY29uc3QgZHJhZ2dhYmxlID0gIWNvbnRyb2xsZWQgfHwgdGhpcy5zdGF0ZS5kcmFnZ2luZztcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wcm9wcy5wb3NpdGlvbiB8fCB0aGlzLnByb3BzLmRlZmF1bHRQb3NpdGlvbjtcbiAgICBjb25zdCB0cmFuc2Zvcm1PcHRzID0ge1xuICAgICAgLy8gU2V0IGxlZnQgaWYgaG9yaXpvbnRhbCBkcmFnIGlzIGVuYWJsZWRcbiAgICAgIHg6IGNhbkRyYWdYKHRoaXMpICYmIGRyYWdnYWJsZSA/XG4gICAgICAgIHRoaXMuc3RhdGUueCA6XG4gICAgICAgIHBvc2l0aW9uLngsXG5cbiAgICAgIC8vIFNldCB0b3AgaWYgdmVydGljYWwgZHJhZyBpcyBlbmFibGVkXG4gICAgICB5OiBjYW5EcmFnWSh0aGlzKSAmJiBkcmFnZ2FibGUgP1xuICAgICAgICB0aGlzLnN0YXRlLnkgOlxuICAgICAgICBwb3NpdGlvbi55XG4gICAgfTtcblxuICAgIC8vIElmIHRoaXMgZWxlbWVudCB3YXMgU1ZHLCB3ZSB1c2UgdGhlIGB0cmFuc2Zvcm1gIGF0dHJpYnV0ZS5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0VsZW1lbnRTVkcpIHtcbiAgICAgIHN2Z1RyYW5zZm9ybSA9IGNyZWF0ZVNWR1RyYW5zZm9ybSh0cmFuc2Zvcm1PcHRzLCB0aGlzLnByb3BzLnBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIGEgQ1NTIHRyYW5zZm9ybSB0byBtb3ZlIHRoZSBlbGVtZW50IGFyb3VuZC4gVGhpcyBhbGxvd3MgdXMgdG8gbW92ZSB0aGUgZWxlbWVudCBhcm91bmRcbiAgICAgIC8vIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaXMgcmVsYXRpdmVseSBvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuXG4gICAgICAvLyBJZiB0aGUgaXRlbSB5b3UgYXJlIGRyYWdnaW5nIGFscmVhZHkgaGFzIGEgdHJhbnNmb3JtIHNldCwgd3JhcCBpdCBpbiBhIDxzcGFuPiBzbyA8RHJhZ2dhYmxlPlxuICAgICAgLy8gaGFzIGEgY2xlYW4gc2xhdGUuXG4gICAgICBzdHlsZSA9IGNyZWF0ZUNTU1RyYW5zZm9ybSh0cmFuc2Zvcm1PcHRzLCB0aGlzLnByb3BzLnBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0Q2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdENsYXNzTmFtZURyYWdnaW5nLFxuICAgICAgZGVmYXVsdENsYXNzTmFtZURyYWdnZWRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcblxuICAgIC8vIE1hcmsgd2l0aCBjbGFzcyB3aGlsZSBkcmFnZ2luZ1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoKGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSB8fCAnJyksIGRlZmF1bHRDbGFzc05hbWUsIHtcbiAgICAgIFtkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dpbmddOiB0aGlzLnN0YXRlLmRyYWdnaW5nLFxuICAgICAgW2RlZmF1bHRDbGFzc05hbWVEcmFnZ2VkXTogdGhpcy5zdGF0ZS5kcmFnZ2VkXG4gICAgfSk7XG5cbiAgICAvLyBSZXVzZSB0aGUgY2hpbGQgcHJvdmlkZWRcbiAgICAvLyBUaGlzIG1ha2VzIGl0IGZsZXhpYmxlIHRvIHVzZSB3aGF0ZXZlciBlbGVtZW50IGlzIHdhbnRlZCAoZGl2LCB1bCwgZXRjKVxuICAgIHJldHVybiAoXG4gICAgICA8RHJhZ2dhYmxlQ29yZSB7Li4udGhpcy5wcm9wc30gb25TdGFydD17dGhpcy5vbkRyYWdTdGFydH0gb25EcmFnPXt0aGlzLm9uRHJhZ30gb25TdG9wPXt0aGlzLm9uRHJhZ1N0b3B9PlxuICAgICAgICB7UmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgc3R5bGU6IHsuLi5jaGlsZHJlbi5wcm9wcy5zdHlsZSwgLi4uc3R5bGV9LFxuICAgICAgICAgIHRyYW5zZm9ybTogc3ZnVHJhbnNmb3JtXG4gICAgICAgIH0pfVxuICAgICAgPC9EcmFnZ2FibGVDb3JlPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBEcmFnZ2FibGUgZnJvbSAnLi9EcmFnZ2FibGUnO1xuaW1wb3J0IERyYWdnYWJsZUNvcmUgZnJvbSAnLi9EcmFnZ2FibGVDb3JlJztcblxuLy8gUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBsaWIgZXhwb3J0ZWQgPERyYWdnYWJsZT4gYXMgdGhlIHJvb3QgZXhwb3J0LiBBcyB0byBub3QgYnJlYWtcbi8vIHRoZW0sIG9yIFR5cGVTY3JpcHQsIHdlIGV4cG9ydCAqYm90aCogYXMgdGhlIHJvb3QgYW5kIGFzICdkZWZhdWx0Jy5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXphYnJpc2tpZS9yZWFjdC1kcmFnZ2FibGUvcHVsbC8yNTRcbi8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vbXphYnJpc2tpZS9yZWFjdC1kcmFnZ2FibGUvaXNzdWVzLzI2NlxuRHJhZ2dhYmxlLmRlZmF1bHQgPSBEcmFnZ2FibGU7XG5EcmFnZ2FibGUuRHJhZ2dhYmxlQ29yZSA9IERyYWdnYWJsZUNvcmU7XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdnYWJsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBREE7QUFHQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQ25DQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUNqQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7OztBQUlBO0FBSkE7QUFaQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUFFQTtBQzdEQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBOzs7O0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXBDQTs7QUF1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FDaEVBOzs7Ozs7O0FBU0E7QUFFQTtBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTs7O0FBR0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBOzs7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDMUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaURBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQkE7Ozs7Ozs7O0FBMEJBOztBQUVBOzs7QUFHQTtBQUhBOztBQU1BO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBN0hBO0FBQ0E7QUFDQTtBQThIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRkE7O0FBVUE7QUFDQTtBQUFBO0FBR0E7QUFFQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUpBOzs7O0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBOztBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBMUNBO0FBNENBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQVJBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6Y0E7QUFDQTtBQUNBO0FBMmNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBM2RBOzs7O0FBZ2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBNWVBOzs7O0FBaWZBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVRBO0FBbmZBO0FBQ0E7QUFDQTtBQStmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBM2dCQTtBQUNBOztBQ2xCQTs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQVBBOzs7O0FBY0E7QUFDQTtBQUtBOzs7QUMzQkE7Ozs7Ozs7QUFPQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQSwwQkFFQTtBQU1BO0FBQ0E7QUF2Q0E7QUNOQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDeEJBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6Q0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFSQTtBQUZBO0FBZUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFSQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDOUxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUxBO0FBeEJBO0FBQ0E7QUFDQTtBQWlDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQUZBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSkE7QUFNQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUNySUE7QUFDQTtBQUNBO0FBREE7O0FDV0E7QUFDQTs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQUNBO0FBYUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOzs7Ozs7Ozs7Ozs7OztBQTBJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFKQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFJQTtBQW5CQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0JBO0FBQUE7QUFDQTtBQWlDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFQQTtBQUFBO0FBQ0E7QUFVQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUdBO0FBRUE7QUFDQTtBQUpBO0FBQUE7QUFNQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFYQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBOzs7OztBQXRMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQThKQTtBQUNBOzs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTs7O0FBdFZBO0FBQ0E7QUFEQTtBQUFBO0FBS0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQ0E7QUErQkE7OztBQUdBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQXBIQTtBQUpBO0FBNEhBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7Ozs7Ozs7Ozs7OztBQ3RLQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7O0FBdUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUF1REE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE1REE7QUFDQTtBQURBO0FBZ0VBO0FBR0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQ0E7QUFDQTtBQXFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBekdBO0FBQ0E7QUFEQTtBQTZHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFmQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUEzQkE7QUEyQkE7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7Ozs7QUFxRkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQVBBO0FBQ0E7QUFZQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlCQTtBQUFBO0FBQUE7QUFBQTtBQXFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7OztBQXRVQTtBQUNBO0FBREE7QUFBQTtBQVFBOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBOzs7QUFHQTtBQUNBO0FBQ0E7QUFsSEE7QUFOQTtBQTZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBUkE7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-draggable/dist/react-draggable.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/components/OutboundLink.js": -/*!********************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/components/OutboundLink.js ***! - \********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return OutboundLink; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_console_warn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/console/warn */ \"../node_modules/react-ga/dist/esm/utils/console/warn.js\");\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar NEWTAB = '_blank';\nvar MIDDLECLICK = 1;\n\nvar OutboundLink = /*#__PURE__*/function (_Component) {\n _inherits(OutboundLink, _Component);\n\n function OutboundLink() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, OutboundLink);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(OutboundLink)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"handleClick\", function (event) {\n var _this$props = _this.props,\n target = _this$props.target,\n eventLabel = _this$props.eventLabel,\n to = _this$props.to,\n onClick = _this$props.onClick,\n trackerNames = _this$props.trackerNames;\n var eventMeta = {\n label: eventLabel\n };\n var sameTarget = target !== NEWTAB;\n var normalClick = !(event.ctrlKey || event.shiftKey || event.metaKey || event.button === MIDDLECLICK);\n\n if (sameTarget && normalClick) {\n event.preventDefault();\n OutboundLink.trackLink(eventMeta, function () {\n window.location.href = to;\n }, trackerNames);\n } else {\n OutboundLink.trackLink(eventMeta, function () {}, trackerNames);\n }\n\n if (onClick) {\n onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(OutboundLink, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n href = _this$props2.to,\n oldProps = _objectWithoutProperties(_this$props2, [\"to\"]);\n\n var props = _objectSpread({}, oldProps, {\n href: href,\n onClick: this.handleClick\n });\n\n if (this.props.target === NEWTAB) {\n props.rel = 'noopener noreferrer';\n }\n\n delete props.eventLabel;\n delete props.trackerNames;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement('a', props);\n }\n }]);\n\n return OutboundLink;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n_defineProperty(OutboundLink, \"trackLink\", function () {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_2__[\"default\"])('ga tracking not enabled');\n});\n\n_defineProperty(OutboundLink, \"propTypes\", {\n eventLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n target: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n to: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n trackerNames: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string)\n});\n\n_defineProperty(OutboundLink, \"defaultProps\", {\n target: null,\n to: null,\n onClick: null,\n trackerNames: null\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL2NvbXBvbmVudHMvT3V0Ym91bmRMaW5rLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1nYS9kaXN0L2VzbS9jb21wb25lbnRzL091dGJvdW5kTGluay5qcz82ZGQyIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhzb3VyY2UsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB3YXJuIGZyb20gJy4uL3V0aWxzL2NvbnNvbGUvd2Fybic7XG52YXIgTkVXVEFCID0gJ19ibGFuayc7XG52YXIgTUlERExFQ0xJQ0sgPSAxO1xuXG52YXIgT3V0Ym91bmRMaW5rID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhPdXRib3VuZExpbmssIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE91dGJvdW5kTGluaygpIHtcbiAgICB2YXIgX2dldFByb3RvdHlwZU9mMjtcblxuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPdXRib3VuZExpbmspO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9nZXRQcm90b3R5cGVPZjIgPSBfZ2V0UHJvdG90eXBlT2YoT3V0Ym91bmRMaW5rKSkuY2FsbC5hcHBseShfZ2V0UHJvdG90eXBlT2YyLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICB0YXJnZXQgPSBfdGhpcyRwcm9wcy50YXJnZXQsXG4gICAgICAgICAgZXZlbnRMYWJlbCA9IF90aGlzJHByb3BzLmV2ZW50TGFiZWwsXG4gICAgICAgICAgdG8gPSBfdGhpcyRwcm9wcy50byxcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMub25DbGljayxcbiAgICAgICAgICB0cmFja2VyTmFtZXMgPSBfdGhpcyRwcm9wcy50cmFja2VyTmFtZXM7XG4gICAgICB2YXIgZXZlbnRNZXRhID0ge1xuICAgICAgICBsYWJlbDogZXZlbnRMYWJlbFxuICAgICAgfTtcbiAgICAgIHZhciBzYW1lVGFyZ2V0ID0gdGFyZ2V0ICE9PSBORVdUQUI7XG4gICAgICB2YXIgbm9ybWFsQ2xpY2sgPSAhKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5idXR0b24gPT09IE1JRERMRUNMSUNLKTtcblxuICAgICAgaWYgKHNhbWVUYXJnZXQgJiYgbm9ybWFsQ2xpY2spIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgT3V0Ym91bmRMaW5rLnRyYWNrTGluayhldmVudE1ldGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRvO1xuICAgICAgICB9LCB0cmFja2VyTmFtZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT3V0Ym91bmRMaW5rLnRyYWNrTGluayhldmVudE1ldGEsIGZ1bmN0aW9uICgpIHt9LCB0cmFja2VyTmFtZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhPdXRib3VuZExpbmssIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBocmVmID0gX3RoaXMkcHJvcHMyLnRvLFxuICAgICAgICAgIG9sZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1widG9cIl0pO1xuXG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBvbGRQcm9wcywge1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMudGFyZ2V0ID09PSBORVdUQUIpIHtcbiAgICAgICAgcHJvcHMucmVsID0gJ25vb3BlbmVyIG5vcmVmZXJyZXInO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgcHJvcHMuZXZlbnRMYWJlbDtcbiAgICAgIGRlbGV0ZSBwcm9wcy50cmFja2VyTmFtZXM7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgnYScsIHByb3BzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gT3V0Ym91bmRMaW5rO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoT3V0Ym91bmRMaW5rLCBcInRyYWNrTGlua1wiLCBmdW5jdGlvbiAoKSB7XG4gIHdhcm4oJ2dhIHRyYWNraW5nIG5vdCBlbmFibGVkJyk7XG59KTtcblxuX2RlZmluZVByb3BlcnR5KE91dGJvdW5kTGluaywgXCJwcm9wVHlwZXNcIiwge1xuICBldmVudExhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdG86IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICB0cmFja2VyTmFtZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXG59KTtcblxuX2RlZmluZVByb3BlcnR5KE91dGJvdW5kTGluaywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICB0YXJnZXQ6IG51bGwsXG4gIHRvOiBudWxsLFxuICBvbkNsaWNrOiBudWxsLFxuICB0cmFja2VyTmFtZXM6IG51bGxcbn0pO1xuXG5leHBvcnQgeyBPdXRib3VuZExpbmsgYXMgZGVmYXVsdCB9OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBcUJBO0FBcEVBO0FBQ0E7QUFzRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/components/OutboundLink.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/core.js": -/*!*************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/core.js ***! - \*************************************************/ -/*! exports provided: initialize, ga, set, send, pageview, modalview, timing, event, exception, plugin, outboundLink, testModeAPI, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initialize\", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ga\", function() { return ga; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"set\", function() { return set; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"send\", function() { return send; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pageview\", function() { return pageview; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modalview\", function() { return modalview; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timing\", function() { return timing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"event\", function() { return event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"exception\", function() { return exception; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"plugin\", function() { return plugin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"outboundLink\", function() { return outboundLink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"testModeAPI\", function() { return testModeAPI; });\n/* harmony import */ var _utils_format__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/format */ \"../node_modules/react-ga/dist/esm/utils/format.js\");\n/* harmony import */ var _utils_removeLeadingSlash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/removeLeadingSlash */ \"../node_modules/react-ga/dist/esm/utils/removeLeadingSlash.js\");\n/* harmony import */ var _utils_trim__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/trim */ \"../node_modules/react-ga/dist/esm/utils/trim.js\");\n/* harmony import */ var _utils_loadGA__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/loadGA */ \"../node_modules/react-ga/dist/esm/utils/loadGA.js\");\n/* harmony import */ var _utils_console_warn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/console/warn */ \"../node_modules/react-ga/dist/esm/utils/console/warn.js\");\n/* harmony import */ var _utils_console_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/console/log */ \"../node_modules/react-ga/dist/esm/utils/console/log.js\");\n/* harmony import */ var _utils_testModeAPI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/testModeAPI */ \"../node_modules/react-ga/dist/esm/utils/testModeAPI.js\");\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n/**\n * React Google Analytics Module\n *\n * @package react-ga\n * @author Adam Lofting <adam@mozillafoundation.org>\n * Atul Varma <atul@mozillafoundation.org>\n */\n\n/**\n * Utilities\n */\n\n\n\n\n\n\n\n\n\n\nvar _isNotBrowser = typeof window === 'undefined' || typeof document === 'undefined';\n\nvar _debug = false;\nvar _titleCase = true;\nvar _testMode = false;\nvar _alwaysSendToDefaultTracker = true;\n\nvar internalGa = function internalGa() {\n var _window;\n\n if (_testMode) return _utils_testModeAPI__WEBPACK_IMPORTED_MODULE_6__[\"default\"].ga.apply(_utils_testModeAPI__WEBPACK_IMPORTED_MODULE_6__[\"default\"], arguments);\n if (_isNotBrowser) return false;\n if (!window.ga) return Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually');\n return (_window = window).ga.apply(_window, arguments);\n};\n\nfunction _format(s) {\n return Object(_utils_format__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(s, _titleCase);\n}\n\nfunction _gaCommand(trackerNames) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var command = args[0];\n\n if (typeof internalGa === 'function') {\n if (typeof command !== 'string') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('ga command must be a string');\n return;\n }\n\n if (_alwaysSendToDefaultTracker || !Array.isArray(trackerNames)) internalGa.apply(void 0, args);\n\n if (Array.isArray(trackerNames)) {\n trackerNames.forEach(function (name) {\n internalGa.apply(void 0, _toConsumableArray([\"\".concat(name, \".\").concat(command)].concat(args.slice(1))));\n });\n }\n }\n}\n\nfunction _initialize(gaTrackingID, options) {\n if (!gaTrackingID) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('gaTrackingID is required in initialize()');\n return;\n }\n\n if (options) {\n if (options.debug && options.debug === true) {\n _debug = true;\n }\n\n if (options.titleCase === false) {\n _titleCase = false;\n }\n\n if (options.useExistingGa) {\n return;\n }\n }\n\n if (options && options.gaOptions) {\n internalGa('create', gaTrackingID, options.gaOptions);\n } else {\n internalGa('create', gaTrackingID, 'auto');\n }\n}\n\nfunction initialize(configsOrTrackingId, options) {\n if (options && options.testMode === true) {\n _testMode = true;\n } else {\n if (_isNotBrowser) {\n return false;\n }\n\n if (!options || options.standardImplementation !== true) Object(_utils_loadGA__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(options);\n }\n\n _alwaysSendToDefaultTracker = options && typeof options.alwaysSendToDefaultTracker === 'boolean' ? options.alwaysSendToDefaultTracker : true;\n\n if (Array.isArray(configsOrTrackingId)) {\n configsOrTrackingId.forEach(function (config) {\n if (_typeof(config) !== 'object') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('All configs must be an object');\n return;\n }\n\n _initialize(config.trackingId, config);\n });\n } else {\n _initialize(configsOrTrackingId, options);\n }\n\n return true;\n}\n/**\n * ga:\n * Returns the original GA object.\n */\n\nfunction ga() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length > 0) {\n internalGa.apply(void 0, args);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('called ga(\\'arguments\\');');\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with arguments: \".concat(JSON.stringify(args)));\n }\n }\n\n return window.ga;\n}\n/**\n * set:\n * GA tracker set method\n * @param {Object} fieldsObject - a field/value pair or a group of field/value pairs on the tracker\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction set(fieldsObject, trackerNames) {\n if (!fieldsObject) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`fieldsObject` is required in .set()');\n return;\n }\n\n if (_typeof(fieldsObject) !== 'object') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Expected `fieldsObject` arg to be an Object');\n return;\n }\n\n if (Object.keys(fieldsObject).length === 0) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('empty `fieldsObject` given to .set()');\n }\n\n _gaCommand(trackerNames, 'set', fieldsObject);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('called ga(\\'set\\', fieldsObject);');\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with fieldsObject: \".concat(JSON.stringify(fieldsObject)));\n }\n}\n/**\n * send:\n * Clone of the low level `ga.send` method\n * WARNING: No validations will be applied to this\n * @param {Object} fieldObject - field object for tracking different analytics\n * @param {Array} trackerNames - trackers to send the command to\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction send(fieldObject, trackerNames) {\n _gaCommand(trackerNames, 'send', fieldObject);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('called ga(\\'send\\', fieldObject);');\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with fieldObject: \".concat(JSON.stringify(fieldObject)));\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with trackers: \".concat(JSON.stringify(trackerNames)));\n }\n}\n/**\n * pageview:\n * Basic GA pageview tracking\n * @param {String} path - the current page page e.g. '/about'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n * @param {String} title - (optional) the page title e. g. 'My Website'\n */\n\nfunction pageview(rawPath, trackerNames, title) {\n if (!rawPath) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('path is required in .pageview()');\n return;\n }\n\n var path = Object(_utils_trim__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(rawPath);\n\n if (path === '') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('path cannot be an empty string in .pageview()');\n return;\n }\n\n var extraFields = {};\n\n if (title) {\n extraFields.title = title;\n }\n\n if (typeof ga === 'function') {\n _gaCommand(trackerNames, 'send', _objectSpread({\n hitType: 'pageview',\n page: path\n }, extraFields));\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('called ga(\\'send\\', \\'pageview\\', path);');\n var extraLog = '';\n\n if (title) {\n extraLog = \" and title: \".concat(title);\n }\n\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with path: \".concat(path).concat(extraLog));\n }\n }\n}\n/**\n * modalview:\n * a proxy to basic GA pageview tracking to consistently track\n * modal views that are an equivalent UX to a traditional pageview\n * @param {String} modalName e.g. 'add-or-edit-club'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction modalview(rawModalName, trackerNames) {\n if (!rawModalName) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('modalName is required in .modalview(modalName)');\n return;\n }\n\n var modalName = Object(_utils_removeLeadingSlash__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_utils_trim__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(rawModalName));\n\n if (modalName === '') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('modalName cannot be an empty string or a single / in .modalview()');\n return;\n }\n\n if (typeof ga === 'function') {\n var path = \"/modal/\".concat(modalName);\n\n _gaCommand(trackerNames, 'send', 'pageview', path);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('called ga(\\'send\\', \\'pageview\\', path);');\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with path: \".concat(path));\n }\n }\n}\n/**\n * timing:\n * GA timing\n * @param args.category {String} required\n * @param args.variable {String} required\n * @param args.value {Int} required\n * @param args.label {String} required\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction timing() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref.category,\n variable = _ref.variable,\n value = _ref.value,\n label = _ref.label;\n\n var trackerNames = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof ga === 'function') {\n if (!category || !variable || !value || typeof value !== 'number') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('args.category, args.variable ' + 'AND args.value are required in timing() ' + 'AND args.value has to be a number');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'timing',\n timingCategory: _format(category),\n timingVar: _format(variable),\n timingValue: value\n };\n\n if (label) {\n fieldObject.timingLabel = _format(label);\n }\n\n send(fieldObject, trackerNames);\n }\n}\n/**\n * event:\n * GA event tracking\n * @param args.category {String} required\n * @param args.action {String} required\n * @param args.label {String} optional\n * @param args.value {Int} optional\n * @param args.nonInteraction {boolean} optional\n * @param args.transport {string} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction event() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref2.category,\n action = _ref2.action,\n label = _ref2.label,\n value = _ref2.value,\n nonInteraction = _ref2.nonInteraction,\n transport = _ref2.transport,\n args = _objectWithoutProperties(_ref2, [\"category\", \"action\", \"label\", \"value\", \"nonInteraction\", \"transport\"]);\n\n var trackerNames = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!category || !action) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('args.category AND args.action are required in event()');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'event',\n eventCategory: _format(category),\n eventAction: _format(action)\n }; // Optional Fields\n\n if (label) {\n fieldObject.eventLabel = _format(label);\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value !== 'number') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Expected `args.value` arg to be a Number.');\n } else {\n fieldObject.eventValue = value;\n }\n }\n\n if (typeof nonInteraction !== 'undefined') {\n if (typeof nonInteraction !== 'boolean') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`args.nonInteraction` must be a boolean.');\n } else {\n fieldObject.nonInteraction = nonInteraction;\n }\n }\n\n if (typeof transport !== 'undefined') {\n if (typeof transport !== 'string') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`args.transport` must be a string.');\n } else {\n if (['beacon', 'xhr', 'image'].indexOf(transport) === -1) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`args.transport` must be either one of these values: `beacon`, `xhr` or `image`');\n }\n\n fieldObject.transport = transport;\n }\n }\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'dimension'.length) === 'dimension';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'metric'.length) === 'metric';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n }); // Send to GA\n\n send(fieldObject, trackerNames);\n }\n}\n/**\n * exception:\n * GA exception tracking\n * @param args.description {String} optional\n * @param args.fatal {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nfunction exception(_ref3, trackerNames) {\n var description = _ref3.description,\n fatal = _ref3.fatal;\n\n if (typeof ga === 'function') {\n // Required Fields\n var fieldObject = {\n hitType: 'exception'\n }; // Optional Fields\n\n if (description) {\n fieldObject.exDescription = _format(description);\n }\n\n if (typeof fatal !== 'undefined') {\n if (typeof fatal !== 'boolean') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`args.fatal` must be a boolean.');\n } else {\n fieldObject.exFatal = fatal;\n }\n } // Send to GA\n\n\n send(fieldObject, trackerNames);\n }\n}\nvar plugin = {\n /**\n * require:\n * GA requires a plugin\n * @param name {String} e.g. 'ecommerce' or 'myplugin'\n * @param options {Object} optional e.g {path: '/log', debug: true}\n * @param trackerName {String} optional e.g 'trackerName'\n */\n require: function require(rawName, options, trackerName) {\n if (typeof ga === 'function') {\n // Required Fields\n if (!rawName) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`name` is required in .require()');\n return;\n }\n\n var name = Object(_utils_trim__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(rawName);\n\n if (name === '') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('`name` cannot be an empty string in .require()');\n return;\n }\n\n var requireString = trackerName ? \"\".concat(trackerName, \".require\") : 'require'; // Optional Fields\n\n if (options) {\n if (_typeof(options) !== 'object') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Expected `options` arg to be an Object');\n return;\n }\n\n if (Object.keys(options).length === 0) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Empty `options` given to .require()');\n }\n\n ga(requireString, name, options);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"called ga('require', '\".concat(name, \"', \").concat(JSON.stringify(options)));\n }\n } else {\n ga(requireString, name);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"called ga('require', '\".concat(name, \"');\"));\n }\n }\n }\n },\n\n /**\n * execute:\n * GA execute action for plugin\n * Takes variable number of arguments\n * @param pluginName {String} e.g. 'ecommerce' or 'myplugin'\n * @param action {String} e.g. 'addItem' or 'myCustomAction'\n * @param actionType {String} optional e.g. 'detail'\n * @param payload {Object} optional e.g { id: '1x5e', name : 'My product to track' }\n */\n execute: function execute(pluginName, action) {\n var payload;\n var actionType;\n\n if ((arguments.length <= 2 ? 0 : arguments.length - 2) === 1) {\n payload = arguments.length <= 2 ? undefined : arguments[2];\n } else {\n actionType = arguments.length <= 2 ? undefined : arguments[2];\n payload = arguments.length <= 3 ? undefined : arguments[3];\n }\n\n if (typeof ga === 'function') {\n if (typeof pluginName !== 'string') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Expected `pluginName` arg to be a String.');\n } else if (typeof action !== 'string') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('Expected `action` arg to be a String.');\n } else {\n var command = \"\".concat(pluginName, \":\").concat(action);\n payload = payload || null;\n\n if (actionType && payload) {\n ga(command, actionType, payload);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"called ga('\".concat(command, \"');\"));\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"actionType: \\\"\".concat(actionType, \"\\\" with payload: \").concat(JSON.stringify(payload)));\n }\n } else if (payload) {\n ga(command, payload);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"called ga('\".concat(command, \"');\"));\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"with payload: \".concat(JSON.stringify(payload)));\n }\n } else {\n ga(command);\n\n if (_debug) {\n Object(_utils_console_log__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"called ga('\".concat(command, \"');\"));\n }\n }\n }\n }\n }\n};\n/**\n * outboundLink:\n * GA outboundLink tracking\n * @param args.label {String} e.g. url, or 'Create an Account'\n * @param {function} hitCallback - Called after processing a hit.\n */\n\nfunction outboundLink(args, hitCallback, trackerNames) {\n if (typeof hitCallback !== 'function') {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('hitCallback function is required');\n return;\n }\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!args || !args.label) {\n Object(_utils_console_warn__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('args.label is required in outboundLink()');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'event',\n eventCategory: 'Outbound',\n eventAction: 'Click',\n eventLabel: _format(args.label)\n };\n var safetyCallbackCalled = false;\n\n var safetyCallback = function safetyCallback() {\n // This prevents a delayed response from GA\n // causing hitCallback from being fired twice\n safetyCallbackCalled = true;\n hitCallback();\n }; // Using a timeout to ensure the execution of critical application code\n // in the case when the GA server might be down\n // or an ad blocker prevents sending the data\n // register safety net timeout:\n\n\n var t = setTimeout(safetyCallback, 250);\n\n var clearableCallbackForGA = function clearableCallbackForGA() {\n clearTimeout(t);\n\n if (!safetyCallbackCalled) {\n hitCallback();\n }\n };\n\n fieldObject.hitCallback = clearableCallbackForGA; // Send to GA\n\n send(fieldObject, trackerNames);\n } else {\n // if ga is not defined, return the callback so the application\n // continues to work as expected\n setTimeout(hitCallback, 0);\n }\n}\nvar testModeAPI = _utils_testModeAPI__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n initialize: initialize,\n ga: ga,\n set: set,\n send: send,\n pageview: pageview,\n modalview: modalview,\n timing: timing,\n event: event,\n exception: exception,\n plugin: plugin,\n outboundLink: outboundLink,\n testModeAPI: _utils_testModeAPI__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL2NvcmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL2NvcmUuanM/OTIxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoc291cmNlLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG4vKipcbiAqIFJlYWN0IEdvb2dsZSBBbmFseXRpY3MgTW9kdWxlXG4gKlxuICogQHBhY2thZ2UgcmVhY3QtZ2FcbiAqIEBhdXRob3IgIEFkYW0gTG9mdGluZyA8YWRhbUBtb3ppbGxhZm91bmRhdGlvbi5vcmc+XG4gKiAgICAgICAgICBBdHVsIFZhcm1hIDxhdHVsQG1vemlsbGFmb3VuZGF0aW9uLm9yZz5cbiAqL1xuXG4vKipcbiAqIFV0aWxpdGllc1xuICovXG5pbXBvcnQgZm9ybWF0IGZyb20gJy4vdXRpbHMvZm9ybWF0JztcbmltcG9ydCByZW1vdmVMZWFkaW5nU2xhc2ggZnJvbSAnLi91dGlscy9yZW1vdmVMZWFkaW5nU2xhc2gnO1xuaW1wb3J0IHRyaW0gZnJvbSAnLi91dGlscy90cmltJztcbmltcG9ydCBsb2FkR0EgZnJvbSAnLi91dGlscy9sb2FkR0EnO1xuaW1wb3J0IHdhcm4gZnJvbSAnLi91dGlscy9jb25zb2xlL3dhcm4nO1xuaW1wb3J0IGxvZyBmcm9tICcuL3V0aWxzL2NvbnNvbGUvbG9nJztcbmltcG9ydCBUZXN0TW9kZUFQSSBmcm9tICcuL3V0aWxzL3Rlc3RNb2RlQVBJJztcblxudmFyIF9pc05vdEJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnO1xuXG52YXIgX2RlYnVnID0gZmFsc2U7XG52YXIgX3RpdGxlQ2FzZSA9IHRydWU7XG52YXIgX3Rlc3RNb2RlID0gZmFsc2U7XG52YXIgX2Fsd2F5c1NlbmRUb0RlZmF1bHRUcmFja2VyID0gdHJ1ZTtcblxudmFyIGludGVybmFsR2EgPSBmdW5jdGlvbiBpbnRlcm5hbEdhKCkge1xuICB2YXIgX3dpbmRvdztcblxuICBpZiAoX3Rlc3RNb2RlKSByZXR1cm4gVGVzdE1vZGVBUEkuZ2EuYXBwbHkoVGVzdE1vZGVBUEksIGFyZ3VtZW50cyk7XG4gIGlmIChfaXNOb3RCcm93c2VyKSByZXR1cm4gZmFsc2U7XG4gIGlmICghd2luZG93LmdhKSByZXR1cm4gd2FybignUmVhY3RHQS5pbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGZpcnN0IG9yIEdvb2dsZUFuYWx5dGljcyBzaG91bGQgYmUgbG9hZGVkIG1hbnVhbGx5Jyk7XG4gIHJldHVybiAoX3dpbmRvdyA9IHdpbmRvdykuZ2EuYXBwbHkoX3dpbmRvdywgYXJndW1lbnRzKTtcbn07XG5cbmZ1bmN0aW9uIF9mb3JtYXQocykge1xuICByZXR1cm4gZm9ybWF0KHMsIF90aXRsZUNhc2UpO1xufVxuXG5mdW5jdGlvbiBfZ2FDb21tYW5kKHRyYWNrZXJOYW1lcykge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IGFyZ3NbMF07XG5cbiAgaWYgKHR5cGVvZiBpbnRlcm5hbEdhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBjb21tYW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgd2FybignZ2EgY29tbWFuZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKF9hbHdheXNTZW5kVG9EZWZhdWx0VHJhY2tlciB8fCAhQXJyYXkuaXNBcnJheSh0cmFja2VyTmFtZXMpKSBpbnRlcm5hbEdhLmFwcGx5KHZvaWQgMCwgYXJncyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmFja2VyTmFtZXMpKSB7XG4gICAgICB0cmFja2VyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpbnRlcm5hbEdhLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KFtcIlwiLmNvbmNhdChuYW1lLCBcIi5cIikuY29uY2F0KGNvbW1hbmQpXS5jb25jYXQoYXJncy5zbGljZSgxKSkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfaW5pdGlhbGl6ZShnYVRyYWNraW5nSUQsIG9wdGlvbnMpIHtcbiAgaWYgKCFnYVRyYWNraW5nSUQpIHtcbiAgICB3YXJuKCdnYVRyYWNraW5nSUQgaXMgcmVxdWlyZWQgaW4gaW5pdGlhbGl6ZSgpJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5kZWJ1ZyAmJiBvcHRpb25zLmRlYnVnID09PSB0cnVlKSB7XG4gICAgICBfZGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnRpdGxlQ2FzZSA9PT0gZmFsc2UpIHtcbiAgICAgIF90aXRsZUNhc2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51c2VFeGlzdGluZ0dhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nYU9wdGlvbnMpIHtcbiAgICBpbnRlcm5hbEdhKCdjcmVhdGUnLCBnYVRyYWNraW5nSUQsIG9wdGlvbnMuZ2FPcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbEdhKCdjcmVhdGUnLCBnYVRyYWNraW5nSUQsICdhdXRvJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemUoY29uZmlnc09yVHJhY2tpbmdJZCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRlc3RNb2RlID09PSB0cnVlKSB7XG4gICAgX3Rlc3RNb2RlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoX2lzTm90QnJvd3Nlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnN0YW5kYXJkSW1wbGVtZW50YXRpb24gIT09IHRydWUpIGxvYWRHQShvcHRpb25zKTtcbiAgfVxuXG4gIF9hbHdheXNTZW5kVG9EZWZhdWx0VHJhY2tlciA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuYWx3YXlzU2VuZFRvRGVmYXVsdFRyYWNrZXIgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuYWx3YXlzU2VuZFRvRGVmYXVsdFRyYWNrZXIgOiB0cnVlO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZ3NPclRyYWNraW5nSWQpKSB7XG4gICAgY29uZmlnc09yVHJhY2tpbmdJZC5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgIGlmIChfdHlwZW9mKGNvbmZpZykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHdhcm4oJ0FsbCBjb25maWdzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX2luaXRpYWxpemUoY29uZmlnLnRyYWNraW5nSWQsIGNvbmZpZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgX2luaXRpYWxpemUoY29uZmlnc09yVHJhY2tpbmdJZCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogZ2E6XG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBHQSBvYmplY3QuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdhKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgaW50ZXJuYWxHYS5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuXG4gICAgaWYgKF9kZWJ1Zykge1xuICAgICAgbG9nKCdjYWxsZWQgZ2EoXFwnYXJndW1lbnRzXFwnKTsnKTtcbiAgICAgIGxvZyhcIndpdGggYXJndW1lbnRzOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYXJncykpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2luZG93LmdhO1xufVxuLyoqXG4gKiBzZXQ6XG4gKiBHQSB0cmFja2VyIHNldCBtZXRob2RcbiAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHNPYmplY3QgLSBhIGZpZWxkL3ZhbHVlIHBhaXIgb3IgYSBncm91cCBvZiBmaWVsZC92YWx1ZSBwYWlycyBvbiB0aGUgdHJhY2tlclxuICogQHBhcmFtIHtBcnJheX0gdHJhY2tlck5hbWVzIC0gKG9wdGlvbmFsKSBhIGxpc3Qgb2YgZXh0cmEgdHJhY2tlcnMgdG8gcnVuIHRoZSBjb21tYW5kIG9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChmaWVsZHNPYmplY3QsIHRyYWNrZXJOYW1lcykge1xuICBpZiAoIWZpZWxkc09iamVjdCkge1xuICAgIHdhcm4oJ2BmaWVsZHNPYmplY3RgIGlzIHJlcXVpcmVkIGluIC5zZXQoKScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChfdHlwZW9mKGZpZWxkc09iamVjdCkgIT09ICdvYmplY3QnKSB7XG4gICAgd2FybignRXhwZWN0ZWQgYGZpZWxkc09iamVjdGAgYXJnIHRvIGJlIGFuIE9iamVjdCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhmaWVsZHNPYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuICAgIHdhcm4oJ2VtcHR5IGBmaWVsZHNPYmplY3RgIGdpdmVuIHRvIC5zZXQoKScpO1xuICB9XG5cbiAgX2dhQ29tbWFuZCh0cmFja2VyTmFtZXMsICdzZXQnLCBmaWVsZHNPYmplY3QpO1xuXG4gIGlmIChfZGVidWcpIHtcbiAgICBsb2coJ2NhbGxlZCBnYShcXCdzZXRcXCcsIGZpZWxkc09iamVjdCk7Jyk7XG4gICAgbG9nKFwid2l0aCBmaWVsZHNPYmplY3Q6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShmaWVsZHNPYmplY3QpKSk7XG4gIH1cbn1cbi8qKlxuICogc2VuZDpcbiAqIENsb25lIG9mIHRoZSBsb3cgbGV2ZWwgYGdhLnNlbmRgIG1ldGhvZFxuICogV0FSTklORzogTm8gdmFsaWRhdGlvbnMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXNcbiAqIEBwYXJhbSAge09iamVjdH0gZmllbGRPYmplY3QgLSBmaWVsZCBvYmplY3QgZm9yIHRyYWNraW5nIGRpZmZlcmVudCBhbmFseXRpY3NcbiAqIEBwYXJhbSAge0FycmF5fSB0cmFja2VyTmFtZXMgLSB0cmFja2VycyB0byBzZW5kIHRoZSBjb21tYW5kIHRvXG4gKiBAcGFyYW0ge0FycmF5fSB0cmFja2VyTmFtZXMgLSAob3B0aW9uYWwpIGEgbGlzdCBvZiBleHRyYSB0cmFja2VycyB0byBydW4gdGhlIGNvbW1hbmQgb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChmaWVsZE9iamVjdCwgdHJhY2tlck5hbWVzKSB7XG4gIF9nYUNvbW1hbmQodHJhY2tlck5hbWVzLCAnc2VuZCcsIGZpZWxkT2JqZWN0KTtcblxuICBpZiAoX2RlYnVnKSB7XG4gICAgbG9nKCdjYWxsZWQgZ2EoXFwnc2VuZFxcJywgZmllbGRPYmplY3QpOycpO1xuICAgIGxvZyhcIndpdGggZmllbGRPYmplY3Q6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShmaWVsZE9iamVjdCkpKTtcbiAgICBsb2coXCJ3aXRoIHRyYWNrZXJzOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodHJhY2tlck5hbWVzKSkpO1xuICB9XG59XG4vKipcbiAqIHBhZ2V2aWV3OlxuICogQmFzaWMgR0EgcGFnZXZpZXcgdHJhY2tpbmdcbiAqIEBwYXJhbSAge1N0cmluZ30gcGF0aCAtIHRoZSBjdXJyZW50IHBhZ2UgcGFnZSBlLmcuICcvYWJvdXQnXG4gKiBAcGFyYW0ge0FycmF5fSB0cmFja2VyTmFtZXMgLSAob3B0aW9uYWwpIGEgbGlzdCBvZiBleHRyYSB0cmFja2VycyB0byBydW4gdGhlIGNvbW1hbmQgb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB0aXRsZSAtIChvcHRpb25hbCkgdGhlIHBhZ2UgdGl0bGUgZS4gZy4gJ015IFdlYnNpdGUnXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2V2aWV3KHJhd1BhdGgsIHRyYWNrZXJOYW1lcywgdGl0bGUpIHtcbiAgaWYgKCFyYXdQYXRoKSB7XG4gICAgd2FybigncGF0aCBpcyByZXF1aXJlZCBpbiAucGFnZXZpZXcoKScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXRoID0gdHJpbShyYXdQYXRoKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICB3YXJuKCdwYXRoIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcgaW4gLnBhZ2V2aWV3KCknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXh0cmFGaWVsZHMgPSB7fTtcblxuICBpZiAodGl0bGUpIHtcbiAgICBleHRyYUZpZWxkcy50aXRsZSA9IHRpdGxlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF9nYUNvbW1hbmQodHJhY2tlck5hbWVzLCAnc2VuZCcsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgaGl0VHlwZTogJ3BhZ2V2aWV3JyxcbiAgICAgIHBhZ2U6IHBhdGhcbiAgICB9LCBleHRyYUZpZWxkcykpO1xuXG4gICAgaWYgKF9kZWJ1Zykge1xuICAgICAgbG9nKCdjYWxsZWQgZ2EoXFwnc2VuZFxcJywgXFwncGFnZXZpZXdcXCcsIHBhdGgpOycpO1xuICAgICAgdmFyIGV4dHJhTG9nID0gJyc7XG5cbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICBleHRyYUxvZyA9IFwiIGFuZCB0aXRsZTogXCIuY29uY2F0KHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgbG9nKFwid2l0aCBwYXRoOiBcIi5jb25jYXQocGF0aCkuY29uY2F0KGV4dHJhTG9nKSk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIG1vZGFsdmlldzpcbiAqIGEgcHJveHkgdG8gYmFzaWMgR0EgcGFnZXZpZXcgdHJhY2tpbmcgdG8gY29uc2lzdGVudGx5IHRyYWNrXG4gKiBtb2RhbCB2aWV3cyB0aGF0IGFyZSBhbiBlcXVpdmFsZW50IFVYIHRvIGEgdHJhZGl0aW9uYWwgcGFnZXZpZXdcbiAqIEBwYXJhbSAge1N0cmluZ30gbW9kYWxOYW1lIGUuZy4gJ2FkZC1vci1lZGl0LWNsdWInXG4gKiBAcGFyYW0ge0FycmF5fSB0cmFja2VyTmFtZXMgLSAob3B0aW9uYWwpIGEgbGlzdCBvZiBleHRyYSB0cmFja2VycyB0byBydW4gdGhlIGNvbW1hbmQgb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kYWx2aWV3KHJhd01vZGFsTmFtZSwgdHJhY2tlck5hbWVzKSB7XG4gIGlmICghcmF3TW9kYWxOYW1lKSB7XG4gICAgd2FybignbW9kYWxOYW1lIGlzIHJlcXVpcmVkIGluIC5tb2RhbHZpZXcobW9kYWxOYW1lKScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RhbE5hbWUgPSByZW1vdmVMZWFkaW5nU2xhc2godHJpbShyYXdNb2RhbE5hbWUpKTtcblxuICBpZiAobW9kYWxOYW1lID09PSAnJykge1xuICAgIHdhcm4oJ21vZGFsTmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc2luZ2xlIC8gaW4gLm1vZGFsdmlldygpJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBwYXRoID0gXCIvbW9kYWwvXCIuY29uY2F0KG1vZGFsTmFtZSk7XG5cbiAgICBfZ2FDb21tYW5kKHRyYWNrZXJOYW1lcywgJ3NlbmQnLCAncGFnZXZpZXcnLCBwYXRoKTtcblxuICAgIGlmIChfZGVidWcpIHtcbiAgICAgIGxvZygnY2FsbGVkIGdhKFxcJ3NlbmRcXCcsIFxcJ3BhZ2V2aWV3XFwnLCBwYXRoKTsnKTtcbiAgICAgIGxvZyhcIndpdGggcGF0aDogXCIuY29uY2F0KHBhdGgpKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogdGltaW5nOlxuICogR0EgdGltaW5nXG4gKiBAcGFyYW0gYXJncy5jYXRlZ29yeSB7U3RyaW5nfSByZXF1aXJlZFxuICogQHBhcmFtIGFyZ3MudmFyaWFibGUge1N0cmluZ30gcmVxdWlyZWRcbiAqIEBwYXJhbSBhcmdzLnZhbHVlICB7SW50fSAgcmVxdWlyZWRcbiAqIEBwYXJhbSBhcmdzLmxhYmVsICB7U3RyaW5nfSByZXF1aXJlZFxuICogQHBhcmFtIHtBcnJheX0gdHJhY2tlck5hbWVzIC0gKG9wdGlvbmFsKSBhIGxpc3Qgb2YgZXh0cmEgdHJhY2tlcnMgdG8gcnVuIHRoZSBjb21tYW5kIG9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWluZygpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgY2F0ZWdvcnkgPSBfcmVmLmNhdGVnb3J5LFxuICAgICAgdmFyaWFibGUgPSBfcmVmLnZhcmlhYmxlLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsO1xuXG4gIHZhciB0cmFja2VyTmFtZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICBpZiAodHlwZW9mIGdhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCFjYXRlZ29yeSB8fCAhdmFyaWFibGUgfHwgIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHdhcm4oJ2FyZ3MuY2F0ZWdvcnksIGFyZ3MudmFyaWFibGUgJyArICdBTkQgYXJncy52YWx1ZSBhcmUgcmVxdWlyZWQgaW4gdGltaW5nKCkgJyArICdBTkQgYXJncy52YWx1ZSBoYXMgdG8gYmUgYSBudW1iZXInKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFJlcXVpcmVkIEZpZWxkc1xuXG5cbiAgICB2YXIgZmllbGRPYmplY3QgPSB7XG4gICAgICBoaXRUeXBlOiAndGltaW5nJyxcbiAgICAgIHRpbWluZ0NhdGVnb3J5OiBfZm9ybWF0KGNhdGVnb3J5KSxcbiAgICAgIHRpbWluZ1ZhcjogX2Zvcm1hdCh2YXJpYWJsZSksXG4gICAgICB0aW1pbmdWYWx1ZTogdmFsdWVcbiAgICB9O1xuXG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBmaWVsZE9iamVjdC50aW1pbmdMYWJlbCA9IF9mb3JtYXQobGFiZWwpO1xuICAgIH1cblxuICAgIHNlbmQoZmllbGRPYmplY3QsIHRyYWNrZXJOYW1lcyk7XG4gIH1cbn1cbi8qKlxuICogZXZlbnQ6XG4gKiBHQSBldmVudCB0cmFja2luZ1xuICogQHBhcmFtIGFyZ3MuY2F0ZWdvcnkge1N0cmluZ30gcmVxdWlyZWRcbiAqIEBwYXJhbSBhcmdzLmFjdGlvbiB7U3RyaW5nfSByZXF1aXJlZFxuICogQHBhcmFtIGFyZ3MubGFiZWwge1N0cmluZ30gb3B0aW9uYWxcbiAqIEBwYXJhbSBhcmdzLnZhbHVlIHtJbnR9IG9wdGlvbmFsXG4gKiBAcGFyYW0gYXJncy5ub25JbnRlcmFjdGlvbiB7Ym9vbGVhbn0gb3B0aW9uYWxcbiAqIEBwYXJhbSBhcmdzLnRyYW5zcG9ydCB7c3RyaW5nfSBvcHRpb25hbFxuICogQHBhcmFtIHtBcnJheX0gdHJhY2tlck5hbWVzIC0gKG9wdGlvbmFsKSBhIGxpc3Qgb2YgZXh0cmEgdHJhY2tlcnMgdG8gcnVuIHRoZSBjb21tYW5kIG9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50KCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgY2F0ZWdvcnkgPSBfcmVmMi5jYXRlZ29yeSxcbiAgICAgIGFjdGlvbiA9IF9yZWYyLmFjdGlvbixcbiAgICAgIGxhYmVsID0gX3JlZjIubGFiZWwsXG4gICAgICB2YWx1ZSA9IF9yZWYyLnZhbHVlLFxuICAgICAgbm9uSW50ZXJhY3Rpb24gPSBfcmVmMi5ub25JbnRlcmFjdGlvbixcbiAgICAgIHRyYW5zcG9ydCA9IF9yZWYyLnRyYW5zcG9ydCxcbiAgICAgIGFyZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcImNhdGVnb3J5XCIsIFwiYWN0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiLCBcIm5vbkludGVyYWN0aW9uXCIsIFwidHJhbnNwb3J0XCJdKTtcblxuICB2YXIgdHJhY2tlck5hbWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHR5cGVvZiBnYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFNpbXBsZSBWYWxpZGF0aW9uXG4gICAgaWYgKCFjYXRlZ29yeSB8fCAhYWN0aW9uKSB7XG4gICAgICB3YXJuKCdhcmdzLmNhdGVnb3J5IEFORCBhcmdzLmFjdGlvbiBhcmUgcmVxdWlyZWQgaW4gZXZlbnQoKScpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUmVxdWlyZWQgRmllbGRzXG5cblxuICAgIHZhciBmaWVsZE9iamVjdCA9IHtcbiAgICAgIGhpdFR5cGU6ICdldmVudCcsXG4gICAgICBldmVudENhdGVnb3J5OiBfZm9ybWF0KGNhdGVnb3J5KSxcbiAgICAgIGV2ZW50QWN0aW9uOiBfZm9ybWF0KGFjdGlvbilcbiAgICB9OyAvLyBPcHRpb25hbCBGaWVsZHNcblxuICAgIGlmIChsYWJlbCkge1xuICAgICAgZmllbGRPYmplY3QuZXZlbnRMYWJlbCA9IF9mb3JtYXQobGFiZWwpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB3YXJuKCdFeHBlY3RlZCBgYXJncy52YWx1ZWAgYXJnIHRvIGJlIGEgTnVtYmVyLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmllbGRPYmplY3QuZXZlbnRWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9uSW50ZXJhY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIG5vbkludGVyYWN0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgd2FybignYGFyZ3Mubm9uSW50ZXJhY3Rpb25gIG11c3QgYmUgYSBib29sZWFuLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmllbGRPYmplY3Qubm9uSW50ZXJhY3Rpb24gPSBub25JbnRlcmFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRyYW5zcG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdHJhbnNwb3J0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB3YXJuKCdgYXJncy50cmFuc3BvcnRgIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoWydiZWFjb24nLCAneGhyJywgJ2ltYWdlJ10uaW5kZXhPZih0cmFuc3BvcnQpID09PSAtMSkge1xuICAgICAgICAgIHdhcm4oJ2BhcmdzLnRyYW5zcG9ydGAgbXVzdCBiZSBlaXRoZXIgb25lIG9mIHRoZXNlIHZhbHVlczogYGJlYWNvbmAsIGB4aHJgIG9yIGBpbWFnZWAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkT2JqZWN0LnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhhcmdzKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGtleS5zdWJzdHIoMCwgJ2RpbWVuc2lvbicubGVuZ3RoKSA9PT0gJ2RpbWVuc2lvbic7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBmaWVsZE9iamVjdFtrZXldID0gYXJnc1trZXldO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKGFyZ3MpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5LnN1YnN0cigwLCAnbWV0cmljJy5sZW5ndGgpID09PSAnbWV0cmljJztcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZpZWxkT2JqZWN0W2tleV0gPSBhcmdzW2tleV07XG4gICAgfSk7IC8vIFNlbmQgdG8gR0FcblxuICAgIHNlbmQoZmllbGRPYmplY3QsIHRyYWNrZXJOYW1lcyk7XG4gIH1cbn1cbi8qKlxuICogZXhjZXB0aW9uOlxuICogR0EgZXhjZXB0aW9uIHRyYWNraW5nXG4gKiBAcGFyYW0gYXJncy5kZXNjcmlwdGlvbiB7U3RyaW5nfSBvcHRpb25hbFxuICogQHBhcmFtIGFyZ3MuZmF0YWwge2Jvb2xlYW59IG9wdGlvbmFsXG4gKiBAcGFyYW0ge0FycmF5fSB0cmFja2VyTmFtZXMgLSAob3B0aW9uYWwpIGEgbGlzdCBvZiBleHRyYSB0cmFja2VycyB0byBydW4gdGhlIGNvbW1hbmQgb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhjZXB0aW9uKF9yZWYzLCB0cmFja2VyTmFtZXMpIHtcbiAgdmFyIGRlc2NyaXB0aW9uID0gX3JlZjMuZGVzY3JpcHRpb24sXG4gICAgICBmYXRhbCA9IF9yZWYzLmZhdGFsO1xuXG4gIGlmICh0eXBlb2YgZ2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBSZXF1aXJlZCBGaWVsZHNcbiAgICB2YXIgZmllbGRPYmplY3QgPSB7XG4gICAgICBoaXRUeXBlOiAnZXhjZXB0aW9uJ1xuICAgIH07IC8vIE9wdGlvbmFsIEZpZWxkc1xuXG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBmaWVsZE9iamVjdC5leERlc2NyaXB0aW9uID0gX2Zvcm1hdChkZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYXRhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgZmF0YWwgIT09ICdib29sZWFuJykge1xuICAgICAgICB3YXJuKCdgYXJncy5mYXRhbGAgbXVzdCBiZSBhIGJvb2xlYW4uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZE9iamVjdC5leEZhdGFsID0gZmF0YWw7XG4gICAgICB9XG4gICAgfSAvLyBTZW5kIHRvIEdBXG5cblxuICAgIHNlbmQoZmllbGRPYmplY3QsIHRyYWNrZXJOYW1lcyk7XG4gIH1cbn1cbmV4cG9ydCB2YXIgcGx1Z2luID0ge1xuICAvKipcbiAgICogcmVxdWlyZTpcbiAgICogR0EgcmVxdWlyZXMgYSBwbHVnaW5cbiAgICogQHBhcmFtIG5hbWUge1N0cmluZ30gZS5nLiAnZWNvbW1lcmNlJyBvciAnbXlwbHVnaW4nXG4gICAqIEBwYXJhbSBvcHRpb25zIHtPYmplY3R9IG9wdGlvbmFsIGUuZyB7cGF0aDogJy9sb2cnLCBkZWJ1ZzogdHJ1ZX1cbiAgICogQHBhcmFtIHRyYWNrZXJOYW1lIHtTdHJpbmd9IG9wdGlvbmFsIGUuZyAndHJhY2tlck5hbWUnXG4gICAqL1xuICByZXF1aXJlOiBmdW5jdGlvbiByZXF1aXJlKHJhd05hbWUsIG9wdGlvbnMsIHRyYWNrZXJOYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBnYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUmVxdWlyZWQgRmllbGRzXG4gICAgICBpZiAoIXJhd05hbWUpIHtcbiAgICAgICAgd2FybignYG5hbWVgIGlzIHJlcXVpcmVkIGluIC5yZXF1aXJlKCknKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IHRyaW0ocmF3TmFtZSk7XG5cbiAgICAgIGlmIChuYW1lID09PSAnJykge1xuICAgICAgICB3YXJuKCdgbmFtZWAgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZyBpbiAucmVxdWlyZSgpJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlcXVpcmVTdHJpbmcgPSB0cmFja2VyTmFtZSA/IFwiXCIuY29uY2F0KHRyYWNrZXJOYW1lLCBcIi5yZXF1aXJlXCIpIDogJ3JlcXVpcmUnOyAvLyBPcHRpb25hbCBGaWVsZHNcblxuICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKF90eXBlb2Yob3B0aW9ucykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgd2FybignRXhwZWN0ZWQgYG9wdGlvbnNgIGFyZyB0byBiZSBhbiBPYmplY3QnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgd2FybignRW1wdHkgYG9wdGlvbnNgIGdpdmVuIHRvIC5yZXF1aXJlKCknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdhKHJlcXVpcmVTdHJpbmcsIG5hbWUsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChfZGVidWcpIHtcbiAgICAgICAgICBsb2coXCJjYWxsZWQgZ2EoJ3JlcXVpcmUnLCAnXCIuY29uY2F0KG5hbWUsIFwiJywgXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShvcHRpb25zKSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnYShyZXF1aXJlU3RyaW5nLCBuYW1lKTtcblxuICAgICAgICBpZiAoX2RlYnVnKSB7XG4gICAgICAgICAgbG9nKFwiY2FsbGVkIGdhKCdyZXF1aXJlJywgJ1wiLmNvbmNhdChuYW1lLCBcIicpO1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIGV4ZWN1dGU6XG4gICAqIEdBIGV4ZWN1dGUgYWN0aW9uIGZvciBwbHVnaW5cbiAgICogVGFrZXMgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7U3RyaW5nfSBlLmcuICdlY29tbWVyY2UnIG9yICdteXBsdWdpbidcbiAgICogQHBhcmFtIGFjdGlvbiB7U3RyaW5nfSBlLmcuICdhZGRJdGVtJyBvciAnbXlDdXN0b21BY3Rpb24nXG4gICAqIEBwYXJhbSBhY3Rpb25UeXBlIHtTdHJpbmd9IG9wdGlvbmFsIGUuZy4gJ2RldGFpbCdcbiAgICogQHBhcmFtIHBheWxvYWQge09iamVjdH0gb3B0aW9uYWwgZS5nIHsgaWQ6ICcxeDVlJywgbmFtZSA6ICdNeSBwcm9kdWN0IHRvIHRyYWNrJyB9XG4gICAqL1xuICBleGVjdXRlOiBmdW5jdGlvbiBleGVjdXRlKHBsdWdpbk5hbWUsIGFjdGlvbikge1xuICAgIHZhciBwYXlsb2FkO1xuICAgIHZhciBhY3Rpb25UeXBlO1xuXG4gICAgaWYgKChhcmd1bWVudHMubGVuZ3RoIDw9IDIgPyAwIDogYXJndW1lbnRzLmxlbmd0aCAtIDIpID09PSAxKSB7XG4gICAgICBwYXlsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb25UeXBlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzJdO1xuICAgICAgcGF5bG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMyA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1szXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHBsdWdpbk5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHdhcm4oJ0V4cGVjdGVkIGBwbHVnaW5OYW1lYCBhcmcgdG8gYmUgYSBTdHJpbmcuJyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3Rpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHdhcm4oJ0V4cGVjdGVkIGBhY3Rpb25gIGFyZyB0byBiZSBhIFN0cmluZy4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjb21tYW5kID0gXCJcIi5jb25jYXQocGx1Z2luTmFtZSwgXCI6XCIpLmNvbmNhdChhY3Rpb24pO1xuICAgICAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCBudWxsO1xuXG4gICAgICAgIGlmIChhY3Rpb25UeXBlICYmIHBheWxvYWQpIHtcbiAgICAgICAgICBnYShjb21tYW5kLCBhY3Rpb25UeXBlLCBwYXlsb2FkKTtcblxuICAgICAgICAgIGlmIChfZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhcImNhbGxlZCBnYSgnXCIuY29uY2F0KGNvbW1hbmQsIFwiJyk7XCIpKTtcbiAgICAgICAgICAgIGxvZyhcImFjdGlvblR5cGU6IFxcXCJcIi5jb25jYXQoYWN0aW9uVHlwZSwgXCJcXFwiIHdpdGggcGF5bG9hZDogXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkKSB7XG4gICAgICAgICAgZ2EoY29tbWFuZCwgcGF5bG9hZCk7XG5cbiAgICAgICAgICBpZiAoX2RlYnVnKSB7XG4gICAgICAgICAgICBsb2coXCJjYWxsZWQgZ2EoJ1wiLmNvbmNhdChjb21tYW5kLCBcIicpO1wiKSk7XG4gICAgICAgICAgICBsb2coXCJ3aXRoIHBheWxvYWQ6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnYShjb21tYW5kKTtcblxuICAgICAgICAgIGlmIChfZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhcImNhbGxlZCBnYSgnXCIuY29uY2F0KGNvbW1hbmQsIFwiJyk7XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKipcbiAqIG91dGJvdW5kTGluazpcbiAqIEdBIG91dGJvdW5kTGluayB0cmFja2luZ1xuICogQHBhcmFtIGFyZ3MubGFiZWwge1N0cmluZ30gZS5nLiB1cmwsIG9yICdDcmVhdGUgYW4gQWNjb3VudCdcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGhpdENhbGxiYWNrIC0gQ2FsbGVkIGFmdGVyIHByb2Nlc3NpbmcgYSBoaXQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG91dGJvdW5kTGluayhhcmdzLCBoaXRDYWxsYmFjaywgdHJhY2tlck5hbWVzKSB7XG4gIGlmICh0eXBlb2YgaGl0Q2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB3YXJuKCdoaXRDYWxsYmFjayBmdW5jdGlvbiBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBTaW1wbGUgVmFsaWRhdGlvblxuICAgIGlmICghYXJncyB8fCAhYXJncy5sYWJlbCkge1xuICAgICAgd2FybignYXJncy5sYWJlbCBpcyByZXF1aXJlZCBpbiBvdXRib3VuZExpbmsoKScpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUmVxdWlyZWQgRmllbGRzXG5cblxuICAgIHZhciBmaWVsZE9iamVjdCA9IHtcbiAgICAgIGhpdFR5cGU6ICdldmVudCcsXG4gICAgICBldmVudENhdGVnb3J5OiAnT3V0Ym91bmQnLFxuICAgICAgZXZlbnRBY3Rpb246ICdDbGljaycsXG4gICAgICBldmVudExhYmVsOiBfZm9ybWF0KGFyZ3MubGFiZWwpXG4gICAgfTtcbiAgICB2YXIgc2FmZXR5Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcblxuICAgIHZhciBzYWZldHlDYWxsYmFjayA9IGZ1bmN0aW9uIHNhZmV0eUNhbGxiYWNrKCkge1xuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBhIGRlbGF5ZWQgcmVzcG9uc2UgZnJvbSBHQVxuICAgICAgLy8gY2F1c2luZyBoaXRDYWxsYmFjayBmcm9tIGJlaW5nIGZpcmVkIHR3aWNlXG4gICAgICBzYWZldHlDYWxsYmFja0NhbGxlZCA9IHRydWU7XG4gICAgICBoaXRDYWxsYmFjaygpO1xuICAgIH07IC8vIFVzaW5nIGEgdGltZW91dCB0byBlbnN1cmUgdGhlIGV4ZWN1dGlvbiBvZiBjcml0aWNhbCBhcHBsaWNhdGlvbiBjb2RlXG4gICAgLy8gaW4gdGhlIGNhc2Ugd2hlbiB0aGUgR0Egc2VydmVyIG1pZ2h0IGJlIGRvd25cbiAgICAvLyBvciBhbiBhZCBibG9ja2VyIHByZXZlbnRzIHNlbmRpbmcgdGhlIGRhdGFcbiAgICAvLyByZWdpc3RlciBzYWZldHkgbmV0IHRpbWVvdXQ6XG5cblxuICAgIHZhciB0ID0gc2V0VGltZW91dChzYWZldHlDYWxsYmFjaywgMjUwKTtcblxuICAgIHZhciBjbGVhcmFibGVDYWxsYmFja0ZvckdBID0gZnVuY3Rpb24gY2xlYXJhYmxlQ2FsbGJhY2tGb3JHQSgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0KTtcblxuICAgICAgaWYgKCFzYWZldHlDYWxsYmFja0NhbGxlZCkge1xuICAgICAgICBoaXRDYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmaWVsZE9iamVjdC5oaXRDYWxsYmFjayA9IGNsZWFyYWJsZUNhbGxiYWNrRm9yR0E7IC8vIFNlbmQgdG8gR0FcblxuICAgIHNlbmQoZmllbGRPYmplY3QsIHRyYWNrZXJOYW1lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgZ2EgaXMgbm90IGRlZmluZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgc28gdGhlIGFwcGxpY2F0aW9uXG4gICAgLy8gY29udGludWVzIHRvIHdvcmsgYXMgZXhwZWN0ZWRcbiAgICBzZXRUaW1lb3V0KGhpdENhbGxiYWNrLCAwKTtcbiAgfVxufVxuZXhwb3J0IHZhciB0ZXN0TW9kZUFQSSA9IFRlc3RNb2RlQVBJO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxuICBnYTogZ2EsXG4gIHNldDogc2V0LFxuICBzZW5kOiBzZW5kLFxuICBwYWdldmlldzogcGFnZXZpZXcsXG4gIG1vZGFsdmlldzogbW9kYWx2aWV3LFxuICB0aW1pbmc6IHRpbWluZyxcbiAgZXZlbnQ6IGV2ZW50LFxuICBleGNlcHRpb246IGV4Y2VwdGlvbixcbiAgcGx1Z2luOiBwbHVnaW4sXG4gIG91dGJvdW5kTGluazogb3V0Ym91bmRMaW5rLFxuICB0ZXN0TW9kZUFQSTogVGVzdE1vZGVBUElcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFFQTs7Ozs7Ozs7QUFRQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQURBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBdERBO0FBQ0E7QUF3REE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQWZBO0FBQ0E7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBO0FBQ0E7QUFpREE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0R0E7QUF3R0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBdkNBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/core.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/index.js": -/*!**************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/index.js ***! - \**************************************************/ -/*! exports provided: initialize, ga, set, send, pageview, modalview, timing, event, exception, plugin, outboundLink, testModeAPI, OutboundLink, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initialize\", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ga\", function() { return ga; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"set\", function() { return set; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"send\", function() { return send; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pageview\", function() { return pageview; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modalview\", function() { return modalview; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timing\", function() { return timing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"event\", function() { return event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"exception\", function() { return exception; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"plugin\", function() { return plugin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"outboundLink\", function() { return outboundLink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"testModeAPI\", function() { return testModeAPI; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OutboundLink\", function() { return OutboundLink; });\n/* harmony import */ var _components_OutboundLink__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/OutboundLink */ \"../node_modules/react-ga/dist/esm/components/OutboundLink.js\");\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core */ \"../node_modules/react-ga/dist/esm/core.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\nvar initialize = _core__WEBPACK_IMPORTED_MODULE_1__[\"initialize\"];\nvar ga = _core__WEBPACK_IMPORTED_MODULE_1__[\"ga\"];\nvar set = _core__WEBPACK_IMPORTED_MODULE_1__[\"set\"];\nvar send = _core__WEBPACK_IMPORTED_MODULE_1__[\"send\"];\nvar pageview = _core__WEBPACK_IMPORTED_MODULE_1__[\"pageview\"];\nvar modalview = _core__WEBPACK_IMPORTED_MODULE_1__[\"modalview\"];\nvar timing = _core__WEBPACK_IMPORTED_MODULE_1__[\"timing\"];\nvar event = _core__WEBPACK_IMPORTED_MODULE_1__[\"event\"];\nvar exception = _core__WEBPACK_IMPORTED_MODULE_1__[\"exception\"];\nvar plugin = _core__WEBPACK_IMPORTED_MODULE_1__[\"plugin\"];\nvar outboundLink = _core__WEBPACK_IMPORTED_MODULE_1__[\"outboundLink\"];\nvar testModeAPI = _core__WEBPACK_IMPORTED_MODULE_1__[\"testModeAPI\"];\n_components_OutboundLink__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origTrackLink = _components_OutboundLink__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trackLink;\n_components_OutboundLink__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trackLink = _core__WEBPACK_IMPORTED_MODULE_1__[\"outboundLink\"];\nvar OutboundLink = _components_OutboundLink__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (_objectSpread({}, _core__WEBPACK_IMPORTED_MODULE_1__, {\n OutboundLink: OutboundLink\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1nYS9kaXN0L2VzbS9pbmRleC5qcz8xOThlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhzb3VyY2UsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCBVbmJvdW5kT3V0Ym91bmRMaW5rIGZyb20gJy4vY29tcG9uZW50cy9PdXRib3VuZExpbmsnO1xuaW1wb3J0ICogYXMgRGVmYXVsdHMgZnJvbSAnLi9jb3JlJztcbmV4cG9ydCB2YXIgaW5pdGlhbGl6ZSA9IERlZmF1bHRzLmluaXRpYWxpemU7XG5leHBvcnQgdmFyIGdhID0gRGVmYXVsdHMuZ2E7XG5leHBvcnQgdmFyIHNldCA9IERlZmF1bHRzLnNldDtcbmV4cG9ydCB2YXIgc2VuZCA9IERlZmF1bHRzLnNlbmQ7XG5leHBvcnQgdmFyIHBhZ2V2aWV3ID0gRGVmYXVsdHMucGFnZXZpZXc7XG5leHBvcnQgdmFyIG1vZGFsdmlldyA9IERlZmF1bHRzLm1vZGFsdmlldztcbmV4cG9ydCB2YXIgdGltaW5nID0gRGVmYXVsdHMudGltaW5nO1xuZXhwb3J0IHZhciBldmVudCA9IERlZmF1bHRzLmV2ZW50O1xuZXhwb3J0IHZhciBleGNlcHRpb24gPSBEZWZhdWx0cy5leGNlcHRpb247XG5leHBvcnQgdmFyIHBsdWdpbiA9IERlZmF1bHRzLnBsdWdpbjtcbmV4cG9ydCB2YXIgb3V0Ym91bmRMaW5rID0gRGVmYXVsdHMub3V0Ym91bmRMaW5rO1xuZXhwb3J0IHZhciB0ZXN0TW9kZUFQSSA9IERlZmF1bHRzLnRlc3RNb2RlQVBJO1xuVW5ib3VuZE91dGJvdW5kTGluay5vcmlnVHJhY2tMaW5rID0gVW5ib3VuZE91dGJvdW5kTGluay50cmFja0xpbms7XG5VbmJvdW5kT3V0Ym91bmRMaW5rLnRyYWNrTGluayA9IERlZmF1bHRzLm91dGJvdW5kTGluaztcbmV4cG9ydCB2YXIgT3V0Ym91bmRMaW5rID0gVW5ib3VuZE91dGJvdW5kTGluaztcbmV4cG9ydCBkZWZhdWx0IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHRzLCB7XG4gIE91dGJvdW5kTGluazogT3V0Ym91bmRMaW5rXG59KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/console/log.js": -/*!**************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/console/log.js ***! - \**************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return log; });\nfunction log(s) {\n console.info('[react-ga]', s);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL2NvbnNvbGUvbG9nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1nYS9kaXN0L2VzbS91dGlscy9jb25zb2xlL2xvZy5qcz85Y2M3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvZyhzKSB7XG4gIGNvbnNvbGUuaW5mbygnW3JlYWN0LWdhXScsIHMpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/console/log.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/console/warn.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/console/warn.js ***! - \***************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return warn; });\nfunction warn(s) {\n console.warn('[react-ga]', s);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL2NvbnNvbGUvd2Fybi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9lc20vdXRpbHMvY29uc29sZS93YXJuLmpzPzVlZDAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2FybihzKSB7XG4gIGNvbnNvbGUud2FybignW3JlYWN0LWdhXScsIHMpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/console/warn.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/format.js": -/*!*********************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/format.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return format; });\n/* harmony import */ var _mightBeEmail__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mightBeEmail */ \"../node_modules/react-ga/dist/esm/utils/mightBeEmail.js\");\n/* harmony import */ var _toTitleCase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toTitleCase */ \"../node_modules/react-ga/dist/esm/utils/toTitleCase.js\");\n/* harmony import */ var _console_warn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./console/warn */ \"../node_modules/react-ga/dist/esm/utils/console/warn.js\");\n\n\n\nvar redacted = 'REDACTED (Potential Email Address)';\nfunction format(s, titleCase) {\n if (Object(_mightBeEmail__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(s)) {\n Object(_console_warn__WEBPACK_IMPORTED_MODULE_2__[\"default\"])('This arg looks like an email address, redacting.');\n return redacted;\n }\n\n if (titleCase) {\n return Object(_toTitleCase__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(s);\n }\n\n return s;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL2Zvcm1hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9lc20vdXRpbHMvZm9ybWF0LmpzPzdkMTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pZ2h0QmVFbWFpbCBmcm9tICcuL21pZ2h0QmVFbWFpbCc7XG5pbXBvcnQgdG9UaXRsZUNhc2UgZnJvbSAnLi90b1RpdGxlQ2FzZSc7XG5pbXBvcnQgd2FybiBmcm9tICcuL2NvbnNvbGUvd2Fybic7XG52YXIgcmVkYWN0ZWQgPSAnUkVEQUNURUQgKFBvdGVudGlhbCBFbWFpbCBBZGRyZXNzKSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQocywgdGl0bGVDYXNlKSB7XG4gIGlmIChtaWdodEJlRW1haWwocykpIHtcbiAgICB3YXJuKCdUaGlzIGFyZyBsb29rcyBsaWtlIGFuIGVtYWlsIGFkZHJlc3MsIHJlZGFjdGluZy4nKTtcbiAgICByZXR1cm4gcmVkYWN0ZWQ7XG4gIH1cblxuICBpZiAodGl0bGVDYXNlKSB7XG4gICAgcmV0dXJuIHRvVGl0bGVDYXNlKHMpO1xuICB9XG5cbiAgcmV0dXJuIHM7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/format.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/loadGA.js": -/*!*********************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/loadGA.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (options) {\n var gaAddress = 'https://www.google-analytics.com/analytics.js';\n\n if (options && options.gaAddress) {\n gaAddress = options.gaAddress;\n } else if (options && options.debug) {\n gaAddress = 'https://www.google-analytics.com/analytics_debug.js';\n } // https://developers.google.com/analytics/devguides/collection/analyticsjs/\n\n /* eslint-disable */\n\n\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n }, i[r].l = 1 * new Date();\n a = s.createElement(o), m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', gaAddress, 'ga');\n /* eslint-enable */\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL2xvYWRHQS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9lc20vdXRpbHMvbG9hZEdBLmpzPzM2NzQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIGdhQWRkcmVzcyA9ICdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2FBZGRyZXNzKSB7XG4gICAgZ2FBZGRyZXNzID0gb3B0aW9ucy5nYUFkZHJlc3M7XG4gIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnKSB7XG4gICAgZ2FBZGRyZXNzID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljc19kZWJ1Zy5qcyc7XG4gIH0gLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vYW5hbHl0aWNzL2Rldmd1aWRlcy9jb2xsZWN0aW9uL2FuYWx5dGljc2pzL1xuXG4gIC8qIGVzbGludC1kaXNhYmxlICovXG5cblxuICAoZnVuY3Rpb24gKGksIHMsIG8sIGcsIHIsIGEsIG0pIHtcbiAgICBpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXSA9IHI7XG4gICAgaVtyXSA9IGlbcl0gfHwgZnVuY3Rpb24gKCkge1xuICAgICAgKGlbcl0ucSA9IGlbcl0ucSB8fCBbXSkucHVzaChhcmd1bWVudHMpO1xuICAgIH0sIGlbcl0ubCA9IDEgKiBuZXcgRGF0ZSgpO1xuICAgIGEgPSBzLmNyZWF0ZUVsZW1lbnQobyksIG0gPSBzLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO1xuICAgIGEuYXN5bmMgPSAxO1xuICAgIGEuc3JjID0gZztcbiAgICBtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsIG0pO1xuICB9KSh3aW5kb3csIGRvY3VtZW50LCAnc2NyaXB0JywgZ2FBZGRyZXNzLCAnZ2EnKTtcbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/loadGA.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/mightBeEmail.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/mightBeEmail.js ***! - \***************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return mightBeEmail; });\n// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nfunction mightBeEmail(s) {\n // There's no point trying to validate rfc822 fully, just look for ...@...\n return typeof s === 'string' && s.indexOf('@') !== -1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL21pZ2h0QmVFbWFpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9lc20vdXRpbHMvbWlnaHRCZUVtYWlsLmpzPzQxZTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU2VlIGlmIHMgY291bGQgYmUgYW4gZW1haWwgYWRkcmVzcy4gV2UgZG9uJ3Qgd2FudCB0byBzZW5kIHBlcnNvbmFsIGRhdGEgbGlrZSBlbWFpbC5cbi8vIGh0dHBzOi8vc3VwcG9ydC5nb29nbGUuY29tL2FuYWx5dGljcy9hbnN3ZXIvMjc5NTk4Mz9obD1lblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWlnaHRCZUVtYWlsKHMpIHtcbiAgLy8gVGhlcmUncyBubyBwb2ludCB0cnlpbmcgdG8gdmFsaWRhdGUgcmZjODIyIGZ1bGx5LCBqdXN0IGxvb2sgZm9yIC4uLkAuLi5cbiAgcmV0dXJuIHR5cGVvZiBzID09PSAnc3RyaW5nJyAmJiBzLmluZGV4T2YoJ0AnKSAhPT0gLTE7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/mightBeEmail.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/removeLeadingSlash.js": -/*!*********************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/removeLeadingSlash.js ***! - \*********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return removeLeadingSlash; });\nfunction removeLeadingSlash(string) {\n if (string.substring(0, 1) === '/') {\n return string.substring(1);\n }\n\n return string;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL3JlbW92ZUxlYWRpbmdTbGFzaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9lc20vdXRpbHMvcmVtb3ZlTGVhZGluZ1NsYXNoLmpzPzRiMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlTGVhZGluZ1NsYXNoKHN0cmluZykge1xuICBpZiAoc3RyaW5nLnN1YnN0cmluZygwLCAxKSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMSk7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/removeLeadingSlash.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/testModeAPI.js": -/*!**************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/testModeAPI.js ***! - \**************************************************************/ -/*! exports provided: gaCalls, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gaCalls\", function() { return gaCalls; });\nvar gaCalls = [];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n calls: gaCalls,\n ga: function ga() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n gaCalls.push([].concat(args));\n },\n resetCalls: function resetCalls() {\n gaCalls.length = 0;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL3Rlc3RNb2RlQVBJLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1nYS9kaXN0L2VzbS91dGlscy90ZXN0TW9kZUFQSS5qcz8wNWQyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgZ2FDYWxscyA9IFtdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBjYWxsczogZ2FDYWxscyxcbiAgZ2E6IGZ1bmN0aW9uIGdhKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBnYUNhbGxzLnB1c2goW10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcbiAgcmVzZXRDYWxsczogZnVuY3Rpb24gcmVzZXRDYWxscygpIHtcbiAgICBnYUNhbGxzLmxlbmd0aCA9IDA7XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFYQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/testModeAPI.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/toTitleCase.js": -/*!**************************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/toTitleCase.js ***! - \**************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return toTitleCase; });\n/* harmony import */ var _trim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./trim */ \"../node_modules/react-ga/dist/esm/utils/trim.js\");\n/**\n * To Title Case 2.1 - http://individed.com/code/to-title-case/\n * Copyright 2008-2013 David Gouch. Licensed under the MIT License.\n * https://github.com/gouch/to-title-case\n */\n\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\nfunction toTitleCase(string) {\n return Object(_trim__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(string).replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n\n return match.charAt(0).toUpperCase() + match.substr(1);\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL3RvVGl0bGVDYXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1nYS9kaXN0L2VzbS91dGlscy90b1RpdGxlQ2FzZS5qcz8wOTQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVG8gVGl0bGUgQ2FzZSAyLjEgLSBodHRwOi8vaW5kaXZpZGVkLmNvbS9jb2RlL3RvLXRpdGxlLWNhc2UvXG4gKiBDb3B5cmlnaHQgMjAwOC0yMDEzIERhdmlkIEdvdWNoLiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ291Y2gvdG8tdGl0bGUtY2FzZVxuICovXG5pbXBvcnQgdHJpbSBmcm9tICcuL3RyaW0nO1xudmFyIHNtYWxsV29yZHMgPSAvXihhfGFufGFuZHxhc3xhdHxidXR8Ynl8ZW58Zm9yfGlmfGlufG5vcnxvZnxvbnxvcnxwZXJ8dGhlfHRvfHZzP1xcLj98dmlhKSQvaTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVGl0bGVDYXNlKHN0cmluZykge1xuICByZXR1cm4gdHJpbShzdHJpbmcpLnJlcGxhY2UoL1tBLVphLXowLTlcXHUwMEMwLVxcdTAwRkZdK1teXFxzLV0qL2csIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgsIHRpdGxlKSB7XG4gICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCArIG1hdGNoLmxlbmd0aCAhPT0gdGl0bGUubGVuZ3RoICYmIG1hdGNoLnNlYXJjaChzbWFsbFdvcmRzKSA+IC0xICYmIHRpdGxlLmNoYXJBdChpbmRleCAtIDIpICE9PSAnOicgJiYgKHRpdGxlLmNoYXJBdChpbmRleCArIG1hdGNoLmxlbmd0aCkgIT09ICctJyB8fCB0aXRsZS5jaGFyQXQoaW5kZXggLSAxKSA9PT0gJy0nKSAmJiB0aXRsZS5jaGFyQXQoaW5kZXggLSAxKS5zZWFyY2goL1teXFxzLV0vKSA8IDApIHtcbiAgICAgIHJldHVybiBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaC5zdWJzdHIoMSkuc2VhcmNoKC9bQS1aXXxcXC4uLykgPiAtMSkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG1hdGNoLnN1YnN0cigxKTtcbiAgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/toTitleCase.js\n"); - -/***/ }), - -/***/ "../node_modules/react-ga/dist/esm/utils/trim.js": -/*!*******************************************************!*\ - !*** ../node_modules/react-ga/dist/esm/utils/trim.js ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return trim; });\n// GA strings need to have leading/trailing whitespace trimmed, and not all\n// browsers have String.prototoype.trim().\nfunction trim(s) {\n return s.replace(/^\\s+|\\s+$/g, '');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL3RyaW0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdhL2Rpc3QvZXNtL3V0aWxzL3RyaW0uanM/YjVmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHQSBzdHJpbmdzIG5lZWQgdG8gaGF2ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZCwgYW5kIG5vdCBhbGxcbi8vIGJyb3dzZXJzIGhhdmUgU3RyaW5nLnByb3RvdG95cGUudHJpbSgpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJpbShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-ga/dist/esm/utils/trim.js\n"); - -/***/ }), - -/***/ "../node_modules/react-google-recaptcha/lib/esm/index.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-google-recaptcha/lib/esm/index.js ***! - \***************************************************************/ -/*! exports provided: default, ReCAPTCHA */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _recaptcha_wrapper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./recaptcha-wrapper */ \"../node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js\");\n/* harmony import */ var _recaptcha__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./recaptcha */ \"../node_modules/react-google-recaptcha/lib/esm/recaptcha.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReCAPTCHA\", function() { return _recaptcha__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_recaptcha_wrapper__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEvbGliL2VzbS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ29vZ2xlLXJlY2FwdGNoYS9saWIvZXNtL2luZGV4LmpzPzhlN2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlY2FwdGNoYVdyYXBwZXIgZnJvbSBcIi4vcmVjYXB0Y2hhLXdyYXBwZXJcIjtcbmltcG9ydCBSZUNBUFRDSEEgZnJvbSBcIi4vcmVjYXB0Y2hhXCI7XG5leHBvcnQgZGVmYXVsdCBSZWNhcHRjaGFXcmFwcGVyO1xuZXhwb3J0IHsgUmVDQVBUQ0hBIH07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-google-recaptcha/lib/esm/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js": -/*!***************************************************************************!*\ - !*** ../node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _recaptcha__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./recaptcha */ \"../node_modules/react-google-recaptcha/lib/esm/recaptcha.js\");\n/* harmony import */ var react_async_script__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-async-script */ \"../node_modules/react-async-script/lib/esm/async-script-loader.js\");\n\n\nvar callbackName = \"onloadcallback\";\nvar globalName = \"grecaptcha\";\n\nfunction getOptions() {\n return typeof window !== \"undefined\" && window.recaptchaOptions || {};\n}\n\nfunction getURL() {\n var dynamicOptions = getOptions();\n var hostname = dynamicOptions.useRecaptchaNet ? \"recaptcha.net\" : \"www.google.com\";\n return \"https://\" + hostname + \"/recaptcha/api.js?onload=\" + callbackName + \"&render=explicit\";\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_async_script__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(getURL, {\n callbackName: callbackName,\n globalName: globalName\n})(_recaptcha__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEvbGliL2VzbS9yZWNhcHRjaGEtd3JhcHBlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZ29vZ2xlLXJlY2FwdGNoYS9saWIvZXNtL3JlY2FwdGNoYS13cmFwcGVyLmpzPzY3YTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlQ0FQVENIQSBmcm9tIFwiLi9yZWNhcHRjaGFcIjtcbmltcG9ydCBtYWtlQXN5bmNTY3JpcHRMb2FkZXIgZnJvbSBcInJlYWN0LWFzeW5jLXNjcmlwdFwiO1xudmFyIGNhbGxiYWNrTmFtZSA9IFwib25sb2FkY2FsbGJhY2tcIjtcbnZhciBnbG9iYWxOYW1lID0gXCJncmVjYXB0Y2hhXCI7XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5yZWNhcHRjaGFPcHRpb25zIHx8IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRVUkwoKSB7XG4gIHZhciBkeW5hbWljT3B0aW9ucyA9IGdldE9wdGlvbnMoKTtcbiAgdmFyIGhvc3RuYW1lID0gZHluYW1pY09wdGlvbnMudXNlUmVjYXB0Y2hhTmV0ID8gXCJyZWNhcHRjaGEubmV0XCIgOiBcInd3dy5nb29nbGUuY29tXCI7XG4gIHJldHVybiBcImh0dHBzOi8vXCIgKyBob3N0bmFtZSArIFwiL3JlY2FwdGNoYS9hcGkuanM/b25sb2FkPVwiICsgY2FsbGJhY2tOYW1lICsgXCImcmVuZGVyPWV4cGxpY2l0XCI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1ha2VBc3luY1NjcmlwdExvYWRlcihnZXRVUkwsIHtcbiAgY2FsbGJhY2tOYW1lOiBjYWxsYmFja05hbWUsXG4gIGdsb2JhbE5hbWU6IGdsb2JhbE5hbWVcbn0pKFJlQ0FQVENIQSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js\n"); - -/***/ }), - -/***/ "../node_modules/react-google-recaptcha/lib/esm/recaptcha.js": -/*!*******************************************************************!*\ - !*** ../node_modules/react-google-recaptcha/lib/esm/recaptcha.js ***! - \*******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReCAPTCHA; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\n\n\n\nvar ReCAPTCHA = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ReCAPTCHA, _React$Component);\n\n function ReCAPTCHA() {\n var _this;\n\n _this = _React$Component.call(this) || this;\n _this.handleExpired = _this.handleExpired.bind(_assertThisInitialized(_this));\n _this.handleErrored = _this.handleErrored.bind(_assertThisInitialized(_this));\n _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _this.handleRecaptchaRef = _this.handleRecaptchaRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = ReCAPTCHA.prototype;\n\n _proto.getValue = function getValue() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this.props.grecaptcha.getResponse(this._widgetId);\n }\n\n return null;\n };\n\n _proto.getWidgetId = function getWidgetId() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this._widgetId;\n }\n\n return null;\n };\n\n _proto.execute = function execute() {\n var grecaptcha = this.props.grecaptcha;\n\n if (grecaptcha && this._widgetId !== undefined) {\n return grecaptcha.execute(this._widgetId);\n } else {\n this._executeRequested = true;\n }\n };\n\n _proto.reset = function reset() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n this.props.grecaptcha.reset(this._widgetId);\n }\n };\n\n _proto.handleExpired = function handleExpired() {\n if (this.props.onExpired) {\n this.props.onExpired();\n } else {\n this.handleChange(null);\n }\n };\n\n _proto.handleErrored = function handleErrored() {\n if (this.props.onErrored) this.props.onErrored();\n };\n\n _proto.handleChange = function handleChange(token) {\n if (this.props.onChange) this.props.onChange(token);\n };\n\n _proto.explicitRender = function explicitRender() {\n if (this.props.grecaptcha && this.props.grecaptcha.render && this._widgetId === undefined) {\n var wrapper = document.createElement(\"div\");\n this._widgetId = this.props.grecaptcha.render(wrapper, {\n sitekey: this.props.sitekey,\n callback: this.handleChange,\n theme: this.props.theme,\n type: this.props.type,\n tabindex: this.props.tabindex,\n \"expired-callback\": this.handleExpired,\n \"error-callback\": this.handleErrored,\n size: this.props.size,\n stoken: this.props.stoken,\n hl: this.props.hl,\n badge: this.props.badge\n });\n this.captcha.appendChild(wrapper);\n }\n\n if (this._executeRequested && this.props.grecaptcha && this._widgetId !== undefined) {\n this._executeRequested = false;\n this.execute();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.explicitRender();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.explicitRender();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._widgetId !== undefined) {\n this.delayOfCaptchaIframeRemoving();\n this.reset();\n }\n };\n\n _proto.delayOfCaptchaIframeRemoving = function delayOfCaptchaIframeRemoving() {\n var temporaryNode = document.createElement(\"div\");\n document.body.appendChild(temporaryNode);\n temporaryNode.style.display = \"none\"; // move of the recaptcha to a temporary node\n\n while (this.captcha.firstChild) {\n temporaryNode.appendChild(this.captcha.firstChild);\n } // delete the temporary node after reset will be done\n\n\n setTimeout(function () {\n document.body.removeChild(temporaryNode);\n }, 5000);\n };\n\n _proto.handleRecaptchaRef = function handleRecaptchaRef(elem) {\n this.captcha = elem;\n };\n\n _proto.render = function render() {\n // consume properties owned by the reCATPCHA, pass the rest to the div so the user can style it.\n\n /* eslint-disable no-unused-vars */\n var _this$props = this.props,\n sitekey = _this$props.sitekey,\n onChange = _this$props.onChange,\n theme = _this$props.theme,\n type = _this$props.type,\n tabindex = _this$props.tabindex,\n onExpired = _this$props.onExpired,\n onErrored = _this$props.onErrored,\n size = _this$props.size,\n stoken = _this$props.stoken,\n grecaptcha = _this$props.grecaptcha,\n badge = _this$props.badge,\n hl = _this$props.hl,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"sitekey\", \"onChange\", \"theme\", \"type\", \"tabindex\", \"onExpired\", \"onErrored\", \"size\", \"stoken\", \"grecaptcha\", \"badge\", \"hl\"]);\n /* eslint-enable no-unused-vars */\n\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({}, childProps, {\n ref: this.handleRecaptchaRef\n }));\n };\n\n return ReCAPTCHA;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n\nReCAPTCHA.displayName = \"ReCAPTCHA\";\nReCAPTCHA.propTypes = {\n sitekey: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n grecaptcha: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n theme: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([\"dark\", \"light\"]),\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([\"image\", \"audio\"]),\n tabindex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n onExpired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onErrored: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([\"compact\", \"normal\", \"invisible\"]),\n stoken: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n hl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n badge: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([\"bottomright\", \"bottomleft\", \"inline\"])\n};\nReCAPTCHA.defaultProps = {\n onChange: function onChange() {},\n theme: \"light\",\n type: \"image\",\n tabindex: 0,\n size: \"normal\",\n badge: \"bottomright\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEvbGliL2VzbS9yZWNhcHRjaGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEvbGliL2VzbS9yZWNhcHRjaGEuanM/MjA4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG52YXIgUmVDQVBUQ0hBID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlQ0FQVENIQSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVDQVBUQ0hBKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuaGFuZGxlRXhwaXJlZCA9IF90aGlzLmhhbmRsZUV4cGlyZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgX3RoaXMuaGFuZGxlRXJyb3JlZCA9IF90aGlzLmhhbmRsZUVycm9yZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgX3RoaXMuaGFuZGxlQ2hhbmdlID0gX3RoaXMuaGFuZGxlQ2hhbmdlLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIF90aGlzLmhhbmRsZVJlY2FwdGNoYVJlZiA9IF90aGlzLmhhbmRsZVJlY2FwdGNoYVJlZi5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVDQVBUQ0hBLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5ncmVjYXB0Y2hhICYmIHRoaXMuX3dpZGdldElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmdyZWNhcHRjaGEuZ2V0UmVzcG9uc2UodGhpcy5fd2lkZ2V0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9wcm90by5nZXRXaWRnZXRJZCA9IGZ1bmN0aW9uIGdldFdpZGdldElkKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmdyZWNhcHRjaGEgJiYgdGhpcy5fd2lkZ2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dpZGdldElkO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgZ3JlY2FwdGNoYSA9IHRoaXMucHJvcHMuZ3JlY2FwdGNoYTtcblxuICAgIGlmIChncmVjYXB0Y2hhICYmIHRoaXMuX3dpZGdldElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBncmVjYXB0Y2hhLmV4ZWN1dGUodGhpcy5fd2lkZ2V0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leGVjdXRlUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZ3JlY2FwdGNoYSAmJiB0aGlzLl93aWRnZXRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnByb3BzLmdyZWNhcHRjaGEucmVzZXQodGhpcy5fd2lkZ2V0SWQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlRXhwaXJlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4cGlyZWQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25FeHBpcmVkKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRXhwaXJlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmhhbmRsZUVycm9yZWQgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcmVkKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uRXJyb3JlZCkgdGhpcy5wcm9wcy5vbkVycm9yZWQoKTtcbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHRva2VuKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodG9rZW4pO1xuICB9O1xuXG4gIF9wcm90by5leHBsaWNpdFJlbmRlciA9IGZ1bmN0aW9uIGV4cGxpY2l0UmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmdyZWNhcHRjaGEgJiYgdGhpcy5wcm9wcy5ncmVjYXB0Y2hhLnJlbmRlciAmJiB0aGlzLl93aWRnZXRJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLl93aWRnZXRJZCA9IHRoaXMucHJvcHMuZ3JlY2FwdGNoYS5yZW5kZXIod3JhcHBlciwge1xuICAgICAgICBzaXRla2V5OiB0aGlzLnByb3BzLnNpdGVrZXksXG4gICAgICAgIGNhbGxiYWNrOiB0aGlzLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgdGhlbWU6IHRoaXMucHJvcHMudGhlbWUsXG4gICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgdGFiaW5kZXg6IHRoaXMucHJvcHMudGFiaW5kZXgsXG4gICAgICAgIFwiZXhwaXJlZC1jYWxsYmFja1wiOiB0aGlzLmhhbmRsZUV4cGlyZWQsXG4gICAgICAgIFwiZXJyb3ItY2FsbGJhY2tcIjogdGhpcy5oYW5kbGVFcnJvcmVkLFxuICAgICAgICBzaXplOiB0aGlzLnByb3BzLnNpemUsXG4gICAgICAgIHN0b2tlbjogdGhpcy5wcm9wcy5zdG9rZW4sXG4gICAgICAgIGhsOiB0aGlzLnByb3BzLmhsLFxuICAgICAgICBiYWRnZTogdGhpcy5wcm9wcy5iYWRnZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNhcHRjaGEuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQgJiYgdGhpcy5wcm9wcy5ncmVjYXB0Y2hhICYmIHRoaXMuX3dpZGdldElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXhlY3V0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmV4cGxpY2l0UmVuZGVyKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLmV4cGxpY2l0UmVuZGVyKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuX3dpZGdldElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVsYXlPZkNhcHRjaGFJZnJhbWVSZW1vdmluZygpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZGVsYXlPZkNhcHRjaGFJZnJhbWVSZW1vdmluZyA9IGZ1bmN0aW9uIGRlbGF5T2ZDYXB0Y2hhSWZyYW1lUmVtb3ZpbmcoKSB7XG4gICAgdmFyIHRlbXBvcmFyeU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcG9yYXJ5Tm9kZSk7XG4gICAgdGVtcG9yYXJ5Tm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IC8vIG1vdmUgb2YgdGhlIHJlY2FwdGNoYSB0byBhIHRlbXBvcmFyeSBub2RlXG5cbiAgICB3aGlsZSAodGhpcy5jYXB0Y2hhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRlbXBvcmFyeU5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jYXB0Y2hhLmZpcnN0Q2hpbGQpO1xuICAgIH0gLy8gZGVsZXRlIHRoZSB0ZW1wb3Jhcnkgbm9kZSBhZnRlciByZXNldCB3aWxsIGJlIGRvbmVcblxuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBvcmFyeU5vZGUpO1xuICAgIH0sIDUwMDApO1xuICB9O1xuXG4gIF9wcm90by5oYW5kbGVSZWNhcHRjaGFSZWYgPSBmdW5jdGlvbiBoYW5kbGVSZWNhcHRjaGFSZWYoZWxlbSkge1xuICAgIHRoaXMuY2FwdGNoYSA9IGVsZW07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAvLyBjb25zdW1lIHByb3BlcnRpZXMgb3duZWQgYnkgdGhlIHJlQ0FUUENIQSwgcGFzcyB0aGUgcmVzdCB0byB0aGUgZGl2IHNvIHRoZSB1c2VyIGNhbiBzdHlsZSBpdC5cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc2l0ZWtleSA9IF90aGlzJHByb3BzLnNpdGVrZXksXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wcy50eXBlLFxuICAgICAgICB0YWJpbmRleCA9IF90aGlzJHByb3BzLnRhYmluZGV4LFxuICAgICAgICBvbkV4cGlyZWQgPSBfdGhpcyRwcm9wcy5vbkV4cGlyZWQsXG4gICAgICAgIG9uRXJyb3JlZCA9IF90aGlzJHByb3BzLm9uRXJyb3JlZCxcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgIHN0b2tlbiA9IF90aGlzJHByb3BzLnN0b2tlbixcbiAgICAgICAgZ3JlY2FwdGNoYSA9IF90aGlzJHByb3BzLmdyZWNhcHRjaGEsXG4gICAgICAgIGJhZGdlID0gX3RoaXMkcHJvcHMuYmFkZ2UsXG4gICAgICAgIGhsID0gX3RoaXMkcHJvcHMuaGwsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wic2l0ZWtleVwiLCBcIm9uQ2hhbmdlXCIsIFwidGhlbWVcIiwgXCJ0eXBlXCIsIFwidGFiaW5kZXhcIiwgXCJvbkV4cGlyZWRcIiwgXCJvbkVycm9yZWRcIiwgXCJzaXplXCIsIFwic3Rva2VuXCIsIFwiZ3JlY2FwdGNoYVwiLCBcImJhZGdlXCIsIFwiaGxcIl0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe30sIGNoaWxkUHJvcHMsIHtcbiAgICAgIHJlZjogdGhpcy5oYW5kbGVSZWNhcHRjaGFSZWZcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlQ0FQVENIQTtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0IHsgUmVDQVBUQ0hBIGFzIGRlZmF1bHQgfTtcblJlQ0FQVENIQS5kaXNwbGF5TmFtZSA9IFwiUmVDQVBUQ0hBXCI7XG5SZUNBUFRDSEEucHJvcFR5cGVzID0ge1xuICBzaXRla2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ3JlY2FwdGNoYTogUHJvcFR5cGVzLm9iamVjdCxcbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZihbXCJkYXJrXCIsIFwibGlnaHRcIl0pLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaW1hZ2VcIiwgXCJhdWRpb1wiXSksXG4gIHRhYmluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBvbkV4cGlyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbkVycm9yZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wiY29tcGFjdFwiLCBcIm5vcm1hbFwiLCBcImludmlzaWJsZVwiXSksXG4gIHN0b2tlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJhZGdlOiBQcm9wVHlwZXMub25lT2YoW1wiYm90dG9tcmlnaHRcIiwgXCJib3R0b21sZWZ0XCIsIFwiaW5saW5lXCJdKVxufTtcblJlQ0FQVENIQS5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSgpIHt9LFxuICB0aGVtZTogXCJsaWdodFwiLFxuICB0eXBlOiBcImltYWdlXCIsXG4gIHRhYmluZGV4OiAwLFxuICBzaXplOiBcIm5vcm1hbFwiLFxuICBiYWRnZTogXCJib3R0b21yaWdodFwiXG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQUNBO0FBd0JBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQURBO0FBVkE7QUFDQTtBQWNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBckJBO0FBQ0E7QUF5QkE7QUFySkE7QUFDQTtBQXVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-google-recaptcha/lib/esm/recaptcha.js\n"); - -/***/ }), - -/***/ "../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js": -/*!********************************************************************************!*\ - !*** ../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js ***! - \********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _interopDefault(e) {\n return e && \"object\" == _typeof(e) && \"default\" in e ? e[\"default\"] : e;\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: !0\n});\n\nvar React = _interopDefault(__webpack_require__(/*! react */ \"../node_modules/react/index.js\"));\n\nfunction AppContainer(e) {\n return AppContainer.warnAboutHMRDisabled && (AppContainer.warnAboutHMRDisabled = !0, console.error(\"React-Hot-Loader: misconfiguration detected, using production version in non-production environment.\"), console.error(\"React-Hot-Loader: Hot Module Replacement is not enabled.\")), React.Children.only(e.children);\n}\n\nAppContainer.warnAboutHMRDisabled = !1;\n\nvar hot = function e() {\n return e.shouldWrapWithAppContainer ? function (e) {\n return function (n) {\n return React.createElement(AppContainer, null, React.createElement(e, n));\n };\n } : function (e) {\n return e;\n };\n};\n\nhot.shouldWrapWithAppContainer = !1;\n\nvar areComponentsEqual = function areComponentsEqual(e, n) {\n return e === n;\n},\n setConfig = function setConfig() {},\n cold = function cold(e) {\n return e;\n},\n configureComponent = function configureComponent() {};\n\nexports.AppContainer = AppContainer, exports.hot = hot, exports.areComponentsEqual = areComponentsEqual, exports.setConfig = setConfig, exports.cold = cold, exports.configureComponent = configureComponent;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdC1sb2FkZXIvZGlzdC9yZWFjdC1ob3QtbG9hZGVyLnByb2R1Y3Rpb24ubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3QtbG9hZGVyL2Rpc3QvcmVhY3QtaG90LWxvYWRlci5wcm9kdWN0aW9uLm1pbi5qcz9iY2FiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO2Z1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lLmRlZmF1bHQ6ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgUmVhY3Q9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZnVuY3Rpb24gQXBwQ29udGFpbmVyKGUpe3JldHVybiBBcHBDb250YWluZXIud2FybkFib3V0SE1SRGlzYWJsZWQmJihBcHBDb250YWluZXIud2FybkFib3V0SE1SRGlzYWJsZWQ9ITAsY29uc29sZS5lcnJvcihcIlJlYWN0LUhvdC1Mb2FkZXI6IG1pc2NvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQsIHVzaW5nIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBub24tcHJvZHVjdGlvbiBlbnZpcm9ubWVudC5cIiksY29uc29sZS5lcnJvcihcIlJlYWN0LUhvdC1Mb2FkZXI6IEhvdCBNb2R1bGUgUmVwbGFjZW1lbnQgaXMgbm90IGVuYWJsZWQuXCIpKSxSZWFjdC5DaGlsZHJlbi5vbmx5KGUuY2hpbGRyZW4pfUFwcENvbnRhaW5lci53YXJuQWJvdXRITVJEaXNhYmxlZD0hMTt2YXIgaG90PWZ1bmN0aW9uIGUoKXtyZXR1cm4gZS5zaG91bGRXcmFwV2l0aEFwcENvbnRhaW5lcj9mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwQ29udGFpbmVyLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudChlLG4pKX19OmZ1bmN0aW9uKGUpe3JldHVybiBlfX07aG90LnNob3VsZFdyYXBXaXRoQXBwQ29udGFpbmVyPSExO3ZhciBhcmVDb21wb25lbnRzRXF1YWw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PW59LHNldENvbmZpZz1mdW5jdGlvbigpe30sY29sZD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sY29uZmlndXJlQ29tcG9uZW50PWZ1bmN0aW9uKCl7fTtleHBvcnRzLkFwcENvbnRhaW5lcj1BcHBDb250YWluZXIsZXhwb3J0cy5ob3Q9aG90LGV4cG9ydHMuYXJlQ29tcG9uZW50c0VxdWFsPWFyZUNvbXBvbmVudHNFcXVhbCxleHBvcnRzLnNldENvbmZpZz1zZXRDb25maWcsZXhwb3J0cy5jb2xkPWNvbGQsZXhwb3J0cy5jb25maWd1cmVDb21wb25lbnQ9Y29uZmlndXJlQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/react-hot-loader/index.js": -/*!*************************************************!*\ - !*** ../node_modules/react-hot-loader/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./dist/react-hot-loader.production.min.js */ \"../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js\");\n} else if (undefined === 'test') {\n module.exports = __webpack_require__(/*! ./dist/react-hot-loader.production.min.js */ \"../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js\");\n} else if (typeof window === 'undefined') {\n // this is just server environment\n module.exports = __webpack_require__(/*! ./dist/react-hot-loader.production.min.js */ \"../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js\");\n} else if (true) {\n module.exports = __webpack_require__(/*! ./dist/react-hot-loader.production.min.js */ \"../node_modules/react-hot-loader/dist/react-hot-loader.production.min.js\");\n module.exports.AppContainer.warnAboutHMRDisabled = true;\n module.exports.hot.shouldWrapWithAppContainer = true;\n} else { var jsFeaturesPresent, evalError, evalAllowed; }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdC1sb2FkZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdC1sb2FkZXIvaW5kZXguanM/NjVhZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kaXN0L3JlYWN0LWhvdC1sb2FkZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9yZWFjdC1ob3QtbG9hZGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIHRoaXMgaXMganVzdCBzZXJ2ZXIgZW52aXJvbm1lbnRcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Rpc3QvcmVhY3QtaG90LWxvYWRlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIGlmICghbW9kdWxlLmhvdCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9yZWFjdC1ob3QtbG9hZGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG4gIG1vZHVsZS5leHBvcnRzLkFwcENvbnRhaW5lci53YXJuQWJvdXRITVJEaXNhYmxlZCA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzLmhvdC5zaG91bGRXcmFwV2l0aEFwcENvbnRhaW5lciA9IHRydWU7XG59IGVsc2Uge1xuICB2YXIgZXZhbEFsbG93ZWQgPSBmYWxzZTtcbiAgdmFyIGV2YWxFcnJvciA9IG51bGw7XG4gIHRyeSB7XG4gICAgZXZhbCgnZXZhbEFsbG93ZWQgPSB0cnVlJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBldmFsIG5vdCBhbGxvd2VkIGR1ZSB0byBDU1BcbiAgICBldmFsRXJyb3IgPSBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6ICd1bmtub3duIHJlYXNvbic7XG4gIH1cblxuICAvLyBUT0RPOiBkb250IHVzZSBldmFsIHRvIHVwZGF0ZSBtZXRob2RzLiBzZWUgIzEyNzNcbiAgLy8gUkhMIG5lZWRzIHNldFByb3RvdHlwZU9mIHRvIG9wZXJhdGUgQ29tcG9uZW50IGluaGVyaXRhbmNlLCBhbmQgZXZhbCB0byBwYXRjaCBtZXRob2RzXG4gIHZhciBqc0ZlYXR1cmVzUHJlc2VudCA9ICEhT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuXG4gIGlmICghanNGZWF0dXJlc1ByZXNlbnQgfHwgIWV2YWxBbGxvd2VkKSB7XG4gICAgLy8gd2UgYXJlIG5vdCBpbiBwcm9kIG1vZGUsIGJ1dCBSSEwgY291bGQgbm90IGJlIGFjdGl2YXRlZFxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdSZWFjdC1Ib3QtTG9hZGVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudDonLFxuICAgICAgW1xuICAgICAgICAhanNGZWF0dXJlc1ByZXNlbnQgJiYgXCJzb21lIEpTIGZlYXR1cmVzIGFyZSBtaXNzaW5nXCIsXG4gICAgICAgICFldmFsQWxsb3dlZCAmJiBcImBldmFsYCBpcyBub3QgYWxsb3dlZChcIiArIGV2YWxFcnJvciArIFwiKVwiXG4gICAgICBdLmpvaW4oJywnKSxcbiAgICAgICcuJ1xuICAgICk7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Rpc3QvcmVhY3QtaG90LWxvYWRlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gd2luZG93LnJlYWN0SG90TG9hZGVyR2xvYmFsID0gcmVxdWlyZSgnLi9kaXN0L3JlYWN0LWhvdC1sb2FkZXIuZGV2ZWxvcG1lbnQuanMnKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-hot-loader/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-hot-loader/root.js": -/*!************************************************!*\ - !*** ../node_modules/react-hot-loader/root.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("if (undefined !== 'production') {\n var hot = __webpack_require__(/*! ./index */ \"../node_modules/react-hot-loader/index.js\").hot;\n\n if (false) { var parent, cache; } // setup hot for caller\n\n\n exports.hot = hot(parent);\n} else {\n // prod mode\n exports.hot = function (a) {\n return a;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdC1sb2FkZXIvcm9vdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90LWxvYWRlci9yb290LmpzP2Y5YTgiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhvdCA9IHJlcXVpcmUoJy4vaW5kZXgnKS5ob3Q7XG4gIGlmIChtb2R1bGUuaG90KSB7XG4gICAgdmFyIGNhY2hlID0gcmVxdWlyZS5jYWNoZTtcblxuICAgIGlmICghbW9kdWxlLnBhcmVudHMgfHwgbW9kdWxlLnBhcmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZWFjdC1Ib3QtTG9hZGVyOiBgcmVhY3QtaG90LWxvYWRlci9yb290YCBpcyBub3Qgc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1c2UgYGltcG9ydCB7aG90fSBmcm9tIFwicmVhY3QtaG90LWxvYWRlclwiYCBpbnN0ZWFkJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gYWNjZXNzIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSBjYWNoZVttb2R1bGUucGFyZW50c1swXV07XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlYWN0LUhvdC1Mb2FkZXI6IGByZWFjdC1ob3QtbG9hZGVyL3Jvb3RgIGlzIG5vdCBzdXBwb3J0ZWQgb24geW91ciBzeXN0ZW0uICcgK1xuICAgICAgICAnUGxlYXNlIHVzZSBgaW1wb3J0IHtob3R9IGZyb20gXCJyZWFjdC1ob3QtbG9hZGVyXCJgIGluc3RlYWQnXG4gICAgICApO1xuICAgIH1cbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIGEgY2FjaGVcbiAgICBkZWxldGUgY2FjaGVbbW9kdWxlLmlkXTtcbiAgfVxuICAvLyBzZXR1cCBob3QgZm9yIGNhbGxlclxuICBleHBvcnRzLmhvdCA9IGhvdChwYXJlbnQpO1xufSBlbHNlIHtcbiAgLy8gcHJvZCBtb2RlXG4gIGV4cG9ydHMuaG90ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUEsbUNBRkE7QUFDQTtBQUNBO0FBcUJBO0FBdkJBO0FBeUJBO0FBQ0E7QUFDQTtBQURBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-hot-loader/root.js\n"); - -/***/ }), - -/***/ "../node_modules/react-is/cjs/react-is.development.js": -/*!************************************************************!*\ - !*** ../node_modules/react-is/cjs/react-is.development.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.13.0\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nif (undefined !== \"production\") {\n (function () {\n 'use strict'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n\n var hasSymbol = typeof Symbol === 'function' && Symbol[\"for\"];\n var REACT_ELEMENT_TYPE = hasSymbol ? Symbol[\"for\"]('react.element') : 0xeac7;\n var REACT_PORTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.portal') : 0xeaca;\n var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol[\"for\"]('react.fragment') : 0xeacb;\n var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.strict_mode') : 0xeacc;\n var REACT_PROFILER_TYPE = hasSymbol ? Symbol[\"for\"]('react.profiler') : 0xead2;\n var REACT_PROVIDER_TYPE = hasSymbol ? Symbol[\"for\"]('react.provider') : 0xeacd;\n var REACT_CONTEXT_TYPE = hasSymbol ? Symbol[\"for\"]('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n // (unstable) APIs that have been removed. Can we remove the symbols?\n\n var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.async_mode') : 0xeacf;\n var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.concurrent_mode') : 0xeacf;\n var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol[\"for\"]('react.forward_ref') : 0xead0;\n var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense') : 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense_list') : 0xead8;\n var REACT_MEMO_TYPE = hasSymbol ? Symbol[\"for\"]('react.memo') : 0xead3;\n var REACT_LAZY_TYPE = hasSymbol ? Symbol[\"for\"]('react.lazy') : 0xead4;\n var REACT_BLOCK_TYPE = hasSymbol ? Symbol[\"for\"]('react.block') : 0xead9;\n var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.fundamental') : 0xead5;\n var REACT_RESPONDER_TYPE = hasSymbol ? Symbol[\"for\"]('react.responder') : 0xead6;\n var REACT_SCOPE_TYPE = hasSymbol ? Symbol[\"for\"]('react.scope') : 0xead7;\n\n function isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || _typeof(type) === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n }\n\n function typeOf(object) {\n if (_typeof(object) === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n } // AsyncMode is deprecated along with isAsyncMode\n\n\n var AsyncMode = REACT_ASYNC_MODE_TYPE;\n var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\n function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n }\n\n function isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n }\n\n function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n }\n\n function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n }\n\n function isElement(object) {\n return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n\n function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n }\n\n function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n }\n\n function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n }\n\n function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n }\n\n function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n }\n\n function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n }\n\n function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n }\n\n function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n }\n\n exports.AsyncMode = AsyncMode;\n exports.ConcurrentMode = ConcurrentMode;\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzPzEzOGIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4wXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQVNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFiQTtBQUNBO0FBeUJBO0FBQ0E7QUEvQkE7QUFpQ0E7QUFDQTtBQUNBO0FBdkVBO0FBQ0E7QUFDQTtBQXdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwS0E7QUFzS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-is/cjs/react-is.development.js\n"); - -/***/ }), - -/***/ "../node_modules/react-is/cjs/react-is.production.min.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-is/cjs/react-is.production.min.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.13.0\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar b = \"function\" === typeof Symbol && Symbol[\"for\"],\n c = b ? Symbol[\"for\"](\"react.element\") : 60103,\n d = b ? Symbol[\"for\"](\"react.portal\") : 60106,\n e = b ? Symbol[\"for\"](\"react.fragment\") : 60107,\n f = b ? Symbol[\"for\"](\"react.strict_mode\") : 60108,\n g = b ? Symbol[\"for\"](\"react.profiler\") : 60114,\n h = b ? Symbol[\"for\"](\"react.provider\") : 60109,\n k = b ? Symbol[\"for\"](\"react.context\") : 60110,\n l = b ? Symbol[\"for\"](\"react.async_mode\") : 60111,\n m = b ? Symbol[\"for\"](\"react.concurrent_mode\") : 60111,\n n = b ? Symbol[\"for\"](\"react.forward_ref\") : 60112,\n p = b ? Symbol[\"for\"](\"react.suspense\") : 60113,\n q = b ? Symbol[\"for\"](\"react.suspense_list\") : 60120,\n r = b ? Symbol[\"for\"](\"react.memo\") : 60115,\n t = b ? Symbol[\"for\"](\"react.lazy\") : 60116,\n v = b ? Symbol[\"for\"](\"react.block\") : 60121,\n w = b ? Symbol[\"for\"](\"react.fundamental\") : 60117,\n x = b ? Symbol[\"for\"](\"react.responder\") : 60118,\n y = b ? Symbol[\"for\"](\"react.scope\") : 60119;\n\nfunction z(a) {\n if (\"object\" === _typeof(a) && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return \"object\" === _typeof(a) && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === _typeof(a) && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzP2Y0YWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4wXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBU0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-is/cjs/react-is.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/react-is/index.js": -/*!*****************************************!*\ - !*** ../node_modules/react-is/index.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./cjs/react-is.production.min.js */ \"../node_modules/react-is/cjs/react-is.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"../node_modules/react-is/cjs/react-is.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcz9jNTUzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-is/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js": -/*!*****************************************************************************!*\ - !*** ../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js ***! - \*****************************************************************************/ -/*! exports provided: polyfill */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"polyfill\", function() { return polyfill; });\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n } // Binding \"this\" is important for shallow renderer support.\n\n\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(prevProps, prevState);\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n} // React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\n\n\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (typeof Component.getDerivedStateFromProps !== 'function' && typeof prototype.getSnapshotBeforeUpdate !== 'function') {\n return Component;\n } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n\n\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var componentName = Component.displayName || Component.name;\n var newApiName = typeof Component.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n throw Error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + componentName + ' uses ' + newApiName + ' but also contains the following legacy lifecycles:' + (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') + (foundWillReceivePropsName !== null ? '\\n ' + foundWillReceivePropsName : '') + (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') + '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-async-component-lifecycle-hooks');\n } // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n } // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n\n\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error('Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype');\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(prevProps, prevState, maybeSnapshot) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag ? this.__reactInternalSnapshot : maybeSnapshot;\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0L3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0LmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5lcy5qcz8zNDY0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAvLyBDYWxsIHRoaXMuY29uc3RydWN0b3IuZ0RTRlAgdG8gc3VwcG9ydCBzdWItY2xhc3Nlcy5cbiAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gIGlmIChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgLy8gQ2FsbCB0aGlzLmNvbnN0cnVjdG9yLmdEU0ZQIHRvIHN1cHBvcnQgc3ViLWNsYXNzZXMuXG4gIC8vIFVzZSB0aGUgc2V0U3RhdGUoKSB1cGRhdGVyIHRvIGVuc3VyZSBzdGF0ZSBpc24ndCBzdGFsZSBpbiBjZXJ0YWluIGVkZ2UgY2FzZXMuXG4gIGZ1bmN0aW9uIHVwZGF0ZXIocHJldlN0YXRlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gc3RhdGUgOiBudWxsO1xuICB9XG4gIC8vIEJpbmRpbmcgXCJ0aGlzXCIgaXMgaW1wb3J0YW50IGZvciBzaGFsbG93IHJlbmRlcmVyIHN1cHBvcnQuXG4gIHRoaXMuc2V0U3RhdGUodXBkYXRlci5iaW5kKHRoaXMpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICB0cnkge1xuICAgIHZhciBwcmV2UHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHZhciBwcmV2U3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZyA9IHRydWU7XG4gICAgdGhpcy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdCA9IHRoaXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGVcbiAgICApO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucHJvcHMgPSBwcmV2UHJvcHM7XG4gICAgdGhpcy5zdGF0ZSA9IHByZXZTdGF0ZTtcbiAgfVxufVxuXG4vLyBSZWFjdCBtYXkgd2FybiBhYm91dCBjV00vY1dSUC9jV1UgbWV0aG9kcyBiZWluZyBkZXByZWNhdGVkLlxuLy8gQWRkIGEgZmxhZyB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncyBmb3IgdGhpcyBzcGVjaWFsIGNhc2UuXG5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyA9IHRydWU7XG5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcblxuZnVuY3Rpb24gcG9seWZpbGwoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuXG4gIGlmICghcHJvdG90eXBlIHx8ICFwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgcG9seWZpbGwgY2xhc3MgY29tcG9uZW50cycpO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAvLyBFcnJvciBpZiBhbnkgb2YgdGhlc2UgbGlmZWN5Y2xlcyBhcmUgcHJlc2VudCxcbiAgLy8gQmVjYXVzZSB0aGV5IHdvdWxkIHdvcmsgZGlmZmVyZW50bHkgYmV0d2VlbiBvbGRlciBhbmQgbmV3ZXIgKDE2LjMrKSB2ZXJzaW9ucyBvZiBSZWFjdC5cbiAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuICBpZiAodHlwZW9mIHByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb3RvdHlwZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgfVxuICBpZiAoXG4gICAgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8XG4gICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fFxuICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGxcbiAgKSB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWU7XG4gICAgdmFyIG5ld0FwaU5hbWUgPVxuICAgICAgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknXG4gICAgICAgIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAnVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArXG4gICAgICAgIGNvbXBvbmVudE5hbWUgK1xuICAgICAgICAnIHVzZXMgJyArXG4gICAgICAgIG5ld0FwaU5hbWUgK1xuICAgICAgICAnIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JyArXG4gICAgICAgIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyAnXFxuICAnICsgZm91bmRXaWxsTW91bnROYW1lIDogJycpICtcbiAgICAgICAgKGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGxcbiAgICAgICAgICA/ICdcXG4gICcgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lXG4gICAgICAgICAgOiAnJykgK1xuICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/ICdcXG4gICcgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpICtcbiAgICAgICAgJ1xcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1hc3luYy1jb21wb25lbnQtbGlmZWN5Y2xlLWhvb2tzJ1xuICAgICk7XG4gIH1cblxuICAvLyBSZWFjdCA8PSAxNi4yIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dNIGFuZCBjV1JQIHRvIGludm9rZSB0aGUgbmV3IHN0YXRpYyBsaWZlY3ljbGUuXG4gIC8vIE5ld2VyIHZlcnNpb25zIG9mIFJlYWN0IHdpbGwgaWdub3JlIHRoZXNlIGxpZmVjeWNsZXMgaWYgZ0RTRlAgZXhpc3RzLlxuICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gY29tcG9uZW50V2lsbE1vdW50O1xuICAgIHByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcztcbiAgfVxuXG4gIC8vIFJlYWN0IDw9IDE2LjIgZG9lcyBub3Qgc3VwcG9ydCBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS5cbiAgLy8gQXMgYSB3b3JrYXJvdW5kLCB1c2UgY1dVIHRvIGludm9rZSB0aGUgbmV3IGxpZmVjeWNsZS5cbiAgLy8gTmV3ZXIgdmVyc2lvbnMgb2YgUmVhY3Qgd2lsbCBpZ25vcmUgdGhhdCBsaWZlY3ljbGUgaWYgZ1NCVSBleGlzdHMuXG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgcG9seWZpbGwgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBmb3IgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBkZWZpbmUgY29tcG9uZW50RGlkVXBkYXRlKCkgb24gdGhlIHByb3RvdHlwZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBjb21wb25lbnRXaWxsVXBkYXRlO1xuXG4gICAgdmFyIGNvbXBvbmVudERpZFVwZGF0ZSA9IHByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU7XG5cbiAgICBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlUG9seWZpbGwoXG4gICAgICBwcmV2UHJvcHMsXG4gICAgICBwcmV2U3RhdGUsXG4gICAgICBtYXliZVNuYXBzaG90XG4gICAgKSB7XG4gICAgICAvLyAxNi4zKyB3aWxsIG5vdCBleGVjdXRlIG91ciB3aWxsLXVwZGF0ZSBtZXRob2Q7XG4gICAgICAvLyBJdCB3aWxsIHBhc3MgYSBzbmFwc2hvdCB2YWx1ZSB0byBkaWQtdXBkYXRlIHRob3VnaC5cbiAgICAgIC8vIE9sZGVyIHZlcnNpb25zIHdpbGwgcmVxdWlyZSBvdXIgcG9seWZpbGxlZCB3aWxsLXVwZGF0ZSB2YWx1ZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIGJ1dCBjYW4ndCBqdXN0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgXCJtYXliZVNuYXBzaG90XCIsXG4gICAgICAvLyBCZWNhdXNlIGZvciA8PSAxNS54IHZlcnNpb25zIHRoaXMgbWlnaHQgYmUgYSBcInByZXZDb250ZXh0XCIgb2JqZWN0LlxuICAgICAgLy8gV2UgYWxzbyBjYW4ndCBqdXN0IGNoZWNrIFwiX19yZWFjdEludGVybmFsU25hcHNob3RcIixcbiAgICAgIC8vIEJlY2F1c2UgZ2V0LXNuYXBzaG90IG1pZ2h0IHJldHVybiBhIGZhbHN5IHZhbHVlLlxuICAgICAgLy8gU28gY2hlY2sgZm9yIHRoZSBleHBsaWNpdCBfX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEZsYWcgZmxhZyB0byBkZXRlcm1pbmUgYmVoYXZpb3IuXG4gICAgICB2YXIgc25hcHNob3QgPSB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZ1xuICAgICAgICA/IHRoaXMuX19yZWFjdEludGVybmFsU25hcHNob3RcbiAgICAgICAgOiBtYXliZVNuYXBzaG90O1xuXG4gICAgICBjb21wb25lbnREaWRVcGRhdGUuY2FsbCh0aGlzLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gQ29tcG9uZW50O1xufVxuXG5leHBvcnQgeyBwb2x5ZmlsbCB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFYQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFLQTtBQTlDQTtBQStEQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQW5FQTtBQXVFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBakJBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/components/Modal.js": -/*!***********************************************************!*\ - !*** ../node_modules/react-modal/lib/components/Modal.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bodyOpenClassName = exports.portalClassName = undefined;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ModalPortal = __webpack_require__(/*! ./ModalPortal */ \"../node_modules/react-modal/lib/components/ModalPortal.js\");\n\nvar _ModalPortal2 = _interopRequireDefault(_ModalPortal);\n\nvar _ariaAppHider = __webpack_require__(/*! ../helpers/ariaAppHider */ \"../node_modules/react-modal/lib/helpers/ariaAppHider.js\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _safeHTMLElement = __webpack_require__(/*! ../helpers/safeHTMLElement */ \"../node_modules/react-modal/lib/helpers/safeHTMLElement.js\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _reactLifecyclesCompat = __webpack_require__(/*! react-lifecycles-compat */ \"../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js\");\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj[\"default\"] = obj;\n return newObj;\n }\n}\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar portalClassName = exports.portalClassName = \"ReactModalPortal\";\nvar bodyOpenClassName = exports.bodyOpenClassName = \"ReactModal__Body--open\";\nvar isReact16 = _reactDom2[\"default\"].createPortal !== undefined;\n\nvar getCreatePortal = function getCreatePortal() {\n return isReact16 ? _reactDom2[\"default\"].createPortal : _reactDom2[\"default\"].unstable_renderSubtreeIntoContainer;\n};\n\nfunction getParentElement(parentSelector) {\n return parentSelector();\n}\n\nvar Modal = function (_Component) {\n _inherits(Modal, _Component);\n\n function Modal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Modal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Modal.__proto__ || Object.getPrototypeOf(Modal)).call.apply(_ref, [this].concat(args))), _this), _this.removePortal = function () {\n !isReact16 && _reactDom2[\"default\"].unmountComponentAtNode(_this.node);\n var parent = getParentElement(_this.props.parentSelector);\n\n if (parent) {\n parent.removeChild(_this.node);\n } else {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"parentSelector\" prop did not returned any DOM ' + \"element. Make sure that the parent element is unmounted to \" + \"avoid any memory leaks.\");\n }\n }, _this.portalRef = function (ref) {\n _this.portal = ref;\n }, _this.renderPortal = function (props) {\n var createPortal = getCreatePortal();\n var portal = createPortal(_this, _react2[\"default\"].createElement(_ModalPortal2[\"default\"], _extends({\n defaultStyles: Modal.defaultStyles\n }, props)), _this.node);\n\n _this.portalRef(portal);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_safeHTMLElement.canUseDOM) return;\n\n if (!isReact16) {\n this.node = document.createElement(\"div\");\n }\n\n this.node.className = this.props.portalClassName;\n var parent = getParentElement(this.props.parentSelector);\n parent.appendChild(this.node);\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps) {\n var prevParent = getParentElement(prevProps.parentSelector);\n var nextParent = getParentElement(this.props.parentSelector);\n return {\n prevParent: prevParent,\n nextParent: nextParent\n };\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, _, snapshot) {\n if (!_safeHTMLElement.canUseDOM) return;\n var _props = this.props,\n isOpen = _props.isOpen,\n portalClassName = _props.portalClassName;\n\n if (prevProps.portalClassName !== portalClassName) {\n this.node.className = portalClassName;\n }\n\n var prevParent = snapshot.prevParent,\n nextParent = snapshot.nextParent;\n\n if (nextParent !== prevParent) {\n prevParent.removeChild(this.node);\n nextParent.appendChild(this.node);\n } // Stop unnecessary renders if modal is remaining closed\n\n\n if (!prevProps.isOpen && !isOpen) return;\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_safeHTMLElement.canUseDOM || !this.node || !this.portal) return;\n var state = this.portal.state;\n var now = Date.now();\n var closesAt = state.isOpen && this.props.closeTimeoutMS && (state.closesAt || now + this.props.closeTimeoutMS);\n\n if (closesAt) {\n if (!state.beforeClose) {\n this.portal.closeWithTimeout();\n }\n\n setTimeout(this.removePortal, closesAt - now);\n } else {\n this.removePortal();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!_safeHTMLElement.canUseDOM || !isReact16) {\n return null;\n }\n\n if (!this.node && isReact16) {\n this.node = document.createElement(\"div\");\n }\n\n var createPortal = getCreatePortal();\n return createPortal(_react2[\"default\"].createElement(_ModalPortal2[\"default\"], _extends({\n ref: this.portalRef,\n defaultStyles: Modal.defaultStyles\n }, this.props)), this.node);\n }\n }], [{\n key: \"setAppElement\",\n value: function setAppElement(element) {\n ariaAppHider.setElement(element);\n }\n /* eslint-disable react/no-unused-prop-types */\n\n /* eslint-enable react/no-unused-prop-types */\n\n }]);\n\n return Modal;\n}(_react.Component);\n\nModal.propTypes = {\n isOpen: _propTypes2[\"default\"].bool.isRequired,\n style: _propTypes2[\"default\"].shape({\n content: _propTypes2[\"default\"].object,\n overlay: _propTypes2[\"default\"].object\n }),\n portalClassName: _propTypes2[\"default\"].string,\n bodyOpenClassName: _propTypes2[\"default\"].string,\n htmlOpenClassName: _propTypes2[\"default\"].string,\n className: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].string, _propTypes2[\"default\"].shape({\n base: _propTypes2[\"default\"].string.isRequired,\n afterOpen: _propTypes2[\"default\"].string.isRequired,\n beforeClose: _propTypes2[\"default\"].string.isRequired\n })]),\n overlayClassName: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].string, _propTypes2[\"default\"].shape({\n base: _propTypes2[\"default\"].string.isRequired,\n afterOpen: _propTypes2[\"default\"].string.isRequired,\n beforeClose: _propTypes2[\"default\"].string.isRequired\n })]),\n appElement: _propTypes2[\"default\"].instanceOf(_safeHTMLElement2[\"default\"]),\n onAfterOpen: _propTypes2[\"default\"].func,\n onRequestClose: _propTypes2[\"default\"].func,\n closeTimeoutMS: _propTypes2[\"default\"].number,\n ariaHideApp: _propTypes2[\"default\"].bool,\n shouldFocusAfterRender: _propTypes2[\"default\"].bool,\n shouldCloseOnOverlayClick: _propTypes2[\"default\"].bool,\n shouldReturnFocusAfterClose: _propTypes2[\"default\"].bool,\n parentSelector: _propTypes2[\"default\"].func,\n aria: _propTypes2[\"default\"].object,\n data: _propTypes2[\"default\"].object,\n role: _propTypes2[\"default\"].string,\n contentLabel: _propTypes2[\"default\"].string,\n shouldCloseOnEsc: _propTypes2[\"default\"].bool,\n overlayRef: _propTypes2[\"default\"].func,\n contentRef: _propTypes2[\"default\"].func\n};\nModal.defaultProps = {\n isOpen: false,\n portalClassName: portalClassName,\n bodyOpenClassName: bodyOpenClassName,\n role: \"dialog\",\n ariaHideApp: true,\n closeTimeoutMS: 0,\n shouldFocusAfterRender: true,\n shouldCloseOnEsc: true,\n shouldCloseOnOverlayClick: true,\n shouldReturnFocusAfterClose: true,\n parentSelector: function parentSelector() {\n return document.body;\n }\n};\nModal.defaultStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.75)\"\n },\n content: {\n position: \"absolute\",\n top: \"40px\",\n left: \"40px\",\n right: \"40px\",\n bottom: \"40px\",\n border: \"1px solid #ccc\",\n background: \"#fff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\"\n }\n};\n(0, _reactLifecyclesCompat.polyfill)(Modal);\nexports[\"default\"] = Modal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9jb21wb25lbnRzL01vZGFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvY29tcG9uZW50cy9Nb2RhbC5qcz83ZDU1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2R5T3BlbkNsYXNzTmFtZSA9IGV4cG9ydHMucG9ydGFsQ2xhc3NOYW1lID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX01vZGFsUG9ydGFsID0gcmVxdWlyZShcIi4vTW9kYWxQb3J0YWxcIik7XG5cbnZhciBfTW9kYWxQb3J0YWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfTW9kYWxQb3J0YWwpO1xuXG52YXIgX2FyaWFBcHBIaWRlciA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2FyaWFBcHBIaWRlclwiKTtcblxudmFyIGFyaWFBcHBIaWRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9hcmlhQXBwSGlkZXIpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3NhZmVIVE1MRWxlbWVudFwiKTtcblxudmFyIF9zYWZlSFRNTEVsZW1lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2FmZUhUTUxFbGVtZW50KTtcblxudmFyIF9yZWFjdExpZmVjeWNsZXNDb21wYXQgPSByZXF1aXJlKFwicmVhY3QtbGlmZWN5Y2xlcy1jb21wYXRcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmouZGVmYXVsdCA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIHBvcnRhbENsYXNzTmFtZSA9IGV4cG9ydHMucG9ydGFsQ2xhc3NOYW1lID0gXCJSZWFjdE1vZGFsUG9ydGFsXCI7XG52YXIgYm9keU9wZW5DbGFzc05hbWUgPSBleHBvcnRzLmJvZHlPcGVuQ2xhc3NOYW1lID0gXCJSZWFjdE1vZGFsX19Cb2R5LS1vcGVuXCI7XG5cbnZhciBpc1JlYWN0MTYgPSBfcmVhY3REb20yLmRlZmF1bHQuY3JlYXRlUG9ydGFsICE9PSB1bmRlZmluZWQ7XG5cbnZhciBnZXRDcmVhdGVQb3J0YWwgPSBmdW5jdGlvbiBnZXRDcmVhdGVQb3J0YWwoKSB7XG4gIHJldHVybiBpc1JlYWN0MTYgPyBfcmVhY3REb20yLmRlZmF1bHQuY3JlYXRlUG9ydGFsIDogX3JlYWN0RG9tMi5kZWZhdWx0LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xufTtcblxuZnVuY3Rpb24gZ2V0UGFyZW50RWxlbWVudChwYXJlbnRTZWxlY3Rvcikge1xuICByZXR1cm4gcGFyZW50U2VsZWN0b3IoKTtcbn1cblxudmFyIE1vZGFsID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1vZGFsLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNb2RhbCgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9kYWwpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IE1vZGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTW9kYWwpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5yZW1vdmVQb3J0YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNSZWFjdDE2ICYmIF9yZWFjdERvbTIuZGVmYXVsdC51bm1vdW50Q29tcG9uZW50QXROb2RlKF90aGlzLm5vZGUpO1xuICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudEVsZW1lbnQoX3RoaXMucHJvcHMucGFyZW50U2VsZWN0b3IpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoX3RoaXMubm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWN0LU1vZGFsOiBcInBhcmVudFNlbGVjdG9yXCIgcHJvcCBkaWQgbm90IHJldHVybmVkIGFueSBET00gJyArIFwiZWxlbWVudC4gTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBlbGVtZW50IGlzIHVubW91bnRlZCB0byBcIiArIFwiYXZvaWQgYW55IG1lbW9yeSBsZWFrcy5cIik7XG4gICAgICB9XG4gICAgfSwgX3RoaXMucG9ydGFsUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucG9ydGFsID0gcmVmO1xuICAgIH0sIF90aGlzLnJlbmRlclBvcnRhbCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNyZWF0ZVBvcnRhbCA9IGdldENyZWF0ZVBvcnRhbCgpO1xuICAgICAgdmFyIHBvcnRhbCA9IGNyZWF0ZVBvcnRhbChfdGhpcywgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX01vZGFsUG9ydGFsMi5kZWZhdWx0LCBfZXh0ZW5kcyh7IGRlZmF1bHRTdHlsZXM6IE1vZGFsLmRlZmF1bHRTdHlsZXMgfSwgcHJvcHMpKSwgX3RoaXMubm9kZSk7XG4gICAgICBfdGhpcy5wb3J0YWxSZWYocG9ydGFsKTtcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNb2RhbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NKSByZXR1cm47XG5cbiAgICAgIGlmICghaXNSZWFjdDE2KSB7XG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm5vZGUuY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5wb3J0YWxDbGFzc05hbWU7XG5cbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHRoaXMucHJvcHMucGFyZW50U2VsZWN0b3IpO1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMubm9kZSk7XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHByZXZQYXJlbnQgPSBnZXRQYXJlbnRFbGVtZW50KHByZXZQcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICB2YXIgbmV4dFBhcmVudCA9IGdldFBhcmVudEVsZW1lbnQodGhpcy5wcm9wcy5wYXJlbnRTZWxlY3Rvcik7XG4gICAgICByZXR1cm4geyBwcmV2UGFyZW50OiBwcmV2UGFyZW50LCBuZXh0UGFyZW50OiBuZXh0UGFyZW50IH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBfLCBzbmFwc2hvdCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSkgcmV0dXJuO1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNPcGVuID0gX3Byb3BzLmlzT3BlbixcbiAgICAgICAgICBwb3J0YWxDbGFzc05hbWUgPSBfcHJvcHMucG9ydGFsQ2xhc3NOYW1lO1xuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMucG9ydGFsQ2xhc3NOYW1lICE9PSBwb3J0YWxDbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy5ub2RlLmNsYXNzTmFtZSA9IHBvcnRhbENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZQYXJlbnQgPSBzbmFwc2hvdC5wcmV2UGFyZW50LFxuICAgICAgICAgIG5leHRQYXJlbnQgPSBzbmFwc2hvdC5uZXh0UGFyZW50O1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gcHJldlBhcmVudCkge1xuICAgICAgICBwcmV2UGFyZW50LnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG4gICAgICAgIG5leHRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB1bm5lY2Vzc2FyeSByZW5kZXJzIGlmIG1vZGFsIGlzIHJlbWFpbmluZyBjbG9zZWRcbiAgICAgIGlmICghcHJldlByb3BzLmlzT3BlbiAmJiAhaXNPcGVuKSByZXR1cm47XG5cbiAgICAgICFpc1JlYWN0MTYgJiYgdGhpcy5yZW5kZXJQb3J0YWwodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKCFfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSB8fCAhdGhpcy5ub2RlIHx8ICF0aGlzLnBvcnRhbCkgcmV0dXJuO1xuXG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBvcnRhbC5zdGF0ZTtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdmFyIGNsb3Nlc0F0ID0gc3RhdGUuaXNPcGVuICYmIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMgJiYgKHN0YXRlLmNsb3Nlc0F0IHx8IG5vdyArIHRoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVMpO1xuXG4gICAgICBpZiAoY2xvc2VzQXQpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5iZWZvcmVDbG9zZSkge1xuICAgICAgICAgIHRoaXMucG9ydGFsLmNsb3NlV2l0aFRpbWVvdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5yZW1vdmVQb3J0YWwsIGNsb3Nlc0F0IC0gbm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9ydGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICBpZiAoIV9zYWZlSFRNTEVsZW1lbnQuY2FuVXNlRE9NIHx8ICFpc1JlYWN0MTYpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlICYmIGlzUmVhY3QxNikge1xuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3JlYXRlUG9ydGFsID0gZ2V0Q3JlYXRlUG9ydGFsKCk7XG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsKF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9Nb2RhbFBvcnRhbDIuZGVmYXVsdCwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucG9ydGFsUmVmLFxuICAgICAgICBkZWZhdWx0U3R5bGVzOiBNb2RhbC5kZWZhdWx0U3R5bGVzXG4gICAgICB9LCB0aGlzLnByb3BzKSksIHRoaXMubm9kZSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwic2V0QXBwRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBcHBFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGFyaWFBcHBIaWRlci5zZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG5cbiAgfV0pO1xuXG4gIHJldHVybiBNb2RhbDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbk1vZGFsLnByb3BUeXBlcyA9IHtcbiAgaXNPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxcbiAgc3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBwb3J0YWxDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBib2R5T3BlbkNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIGh0bWxPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGJhc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGJlZm9yZUNsb3NlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkXG4gIH0pXSksXG4gIG92ZXJsYXlDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgYmFzZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhZnRlck9wZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYmVmb3JlQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSldKSxcbiAgYXBwRWxlbWVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5pbnN0YW5jZU9mKF9zYWZlSFRNTEVsZW1lbnQyLmRlZmF1bHQpLFxuICBvbkFmdGVyT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblJlcXVlc3RDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBjbG9zZVRpbWVvdXRNUzogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG4gIGFyaWFIaWRlQXBwOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG4gIHNob3VsZEZvY3VzQWZ0ZXJSZW5kZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgcGFyZW50U2VsZWN0b3I6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgYXJpYTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gIGRhdGE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICByb2xlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgY29udGVudExhYmVsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgc2hvdWxkQ2xvc2VPbkVzYzogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBvdmVybGF5UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNvbnRlbnRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcbk1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgcG9ydGFsQ2xhc3NOYW1lOiBwb3J0YWxDbGFzc05hbWUsXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBib2R5T3BlbkNsYXNzTmFtZSxcbiAgcm9sZTogXCJkaWFsb2dcIixcbiAgYXJpYUhpZGVBcHA6IHRydWUsXG4gIGNsb3NlVGltZW91dE1TOiAwLFxuICBzaG91bGRGb2N1c0FmdGVyUmVuZGVyOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uRXNjOiB0cnVlLFxuICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrOiB0cnVlLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IHRydWUsXG4gIHBhcmVudFNlbGVjdG9yOiBmdW5jdGlvbiBwYXJlbnRTZWxlY3RvcigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxufTtcbk1vZGFsLmRlZmF1bHRTdHlsZXMgPSB7XG4gIG92ZXJsYXk6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KVwiXG4gIH0sXG4gIGNvbnRlbnQ6IHtcbiAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgIHRvcDogXCI0MHB4XCIsXG4gICAgbGVmdDogXCI0MHB4XCIsXG4gICAgcmlnaHQ6IFwiNDBweFwiLFxuICAgIGJvdHRvbTogXCI0MHB4XCIsXG4gICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjXCIsXG4gICAgYmFja2dyb3VuZDogXCIjZmZmXCIsXG4gICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiBcInRvdWNoXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjRweFwiLFxuICAgIG91dGxpbmU6IFwibm9uZVwiLFxuICAgIHBhZGRpbmc6IFwiMjBweFwiXG4gIH1cbn07XG5cblxuKDAsIF9yZWFjdExpZmVjeWNsZXNDb21wYXQucG9seWZpbGwpKE1vZGFsKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWw7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBVkE7QUFZQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQWhCQTtBQUNBO0FBQ0E7QUFrQkE7QUFFQTtBQUNBO0FBekJBO0FBMkJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFsQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQWhJQTtBQUNBO0FBa0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQVRBO0FBMEJBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/components/Modal.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/components/ModalPortal.js": -/*!*****************************************************************!*\ - !*** ../node_modules/react-modal/lib/components/ModalPortal.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _focusManager = __webpack_require__(/*! ../helpers/focusManager */ \"../node_modules/react-modal/lib/helpers/focusManager.js\");\n\nvar focusManager = _interopRequireWildcard(_focusManager);\n\nvar _scopeTab = __webpack_require__(/*! ../helpers/scopeTab */ \"../node_modules/react-modal/lib/helpers/scopeTab.js\");\n\nvar _scopeTab2 = _interopRequireDefault(_scopeTab);\n\nvar _ariaAppHider = __webpack_require__(/*! ../helpers/ariaAppHider */ \"../node_modules/react-modal/lib/helpers/ariaAppHider.js\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _classList = __webpack_require__(/*! ../helpers/classList */ \"../node_modules/react-modal/lib/helpers/classList.js\");\n\nvar classList = _interopRequireWildcard(_classList);\n\nvar _safeHTMLElement = __webpack_require__(/*! ../helpers/safeHTMLElement */ \"../node_modules/react-modal/lib/helpers/safeHTMLElement.js\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _portalOpenInstances = __webpack_require__(/*! ../helpers/portalOpenInstances */ \"../node_modules/react-modal/lib/helpers/portalOpenInstances.js\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\n__webpack_require__(/*! ../helpers/bodyTrap */ \"../node_modules/react-modal/lib/helpers/bodyTrap.js\");\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj[\"default\"] = obj;\n return newObj;\n }\n}\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof2(call) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof2(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n} // so that our CSS is statically analyzable\n\n\nvar CLASS_NAMES = {\n overlay: \"ReactModal__Overlay\",\n content: \"ReactModal__Content\"\n};\nvar TAB_KEY = 9;\nvar ESC_KEY = 27;\nvar ariaHiddenInstances = 0;\n\nvar ModalPortal = function (_Component) {\n _inherits(ModalPortal, _Component);\n\n function ModalPortal(props) {\n _classCallCheck(this, ModalPortal);\n\n var _this = _possibleConstructorReturn(this, (ModalPortal.__proto__ || Object.getPrototypeOf(ModalPortal)).call(this, props));\n\n _this.setOverlayRef = function (overlay) {\n _this.overlay = overlay;\n _this.props.overlayRef && _this.props.overlayRef(overlay);\n };\n\n _this.setContentRef = function (content) {\n _this.content = content;\n _this.props.contentRef && _this.props.contentRef(content);\n };\n\n _this.afterClose = function () {\n var _this$props = _this.props,\n appElement = _this$props.appElement,\n ariaHideApp = _this$props.ariaHideApp,\n htmlOpenClassName = _this$props.htmlOpenClassName,\n bodyOpenClassName = _this$props.bodyOpenClassName; // Remove classes.\n\n bodyOpenClassName && classList.remove(document.body, bodyOpenClassName);\n htmlOpenClassName && classList.remove(document.getElementsByTagName(\"html\")[0], htmlOpenClassName); // Reset aria-hidden attribute if all modals have been removed\n\n if (ariaHideApp && ariaHiddenInstances > 0) {\n ariaHiddenInstances -= 1;\n\n if (ariaHiddenInstances === 0) {\n ariaAppHider.show(appElement);\n }\n }\n\n if (_this.props.shouldFocusAfterRender) {\n if (_this.props.shouldReturnFocusAfterClose) {\n focusManager.returnFocus();\n focusManager.teardownScopedFocus();\n } else {\n focusManager.popWithoutFocus();\n }\n }\n\n if (_this.props.onAfterClose) {\n _this.props.onAfterClose();\n }\n\n _portalOpenInstances2[\"default\"].deregister(_this);\n };\n\n _this.open = function () {\n _this.beforeOpen();\n\n if (_this.state.afterOpen && _this.state.beforeClose) {\n clearTimeout(_this.closeTimer);\n\n _this.setState({\n beforeClose: false\n });\n } else {\n if (_this.props.shouldFocusAfterRender) {\n focusManager.setupScopedFocus(_this.node);\n focusManager.markForFocusLater();\n }\n\n _this.setState({\n isOpen: true\n }, function () {\n _this.setState({\n afterOpen: true\n });\n\n if (_this.props.isOpen && _this.props.onAfterOpen) {\n _this.props.onAfterOpen({\n overlayEl: _this.overlay,\n contentEl: _this.content\n });\n }\n });\n }\n };\n\n _this.close = function () {\n if (_this.props.closeTimeoutMS > 0) {\n _this.closeWithTimeout();\n } else {\n _this.closeWithoutTimeout();\n }\n };\n\n _this.focusContent = function () {\n return _this.content && !_this.contentHasFocus() && _this.content.focus();\n };\n\n _this.closeWithTimeout = function () {\n var closesAt = Date.now() + _this.props.closeTimeoutMS;\n\n _this.setState({\n beforeClose: true,\n closesAt: closesAt\n }, function () {\n _this.closeTimer = setTimeout(_this.closeWithoutTimeout, _this.state.closesAt - Date.now());\n });\n };\n\n _this.closeWithoutTimeout = function () {\n _this.setState({\n beforeClose: false,\n isOpen: false,\n afterOpen: false,\n closesAt: null\n }, _this.afterClose);\n };\n\n _this.handleKeyDown = function (event) {\n if (event.keyCode === TAB_KEY) {\n (0, _scopeTab2[\"default\"])(_this.content, event);\n }\n\n if (_this.props.shouldCloseOnEsc && event.keyCode === ESC_KEY) {\n event.stopPropagation();\n\n _this.requestClose(event);\n }\n };\n\n _this.handleOverlayOnClick = function (event) {\n if (_this.shouldClose === null) {\n _this.shouldClose = true;\n }\n\n if (_this.shouldClose && _this.props.shouldCloseOnOverlayClick) {\n if (_this.ownerHandlesClose()) {\n _this.requestClose(event);\n } else {\n _this.focusContent();\n }\n }\n\n _this.shouldClose = null;\n };\n\n _this.handleContentOnMouseUp = function () {\n _this.shouldClose = false;\n };\n\n _this.handleOverlayOnMouseDown = function (event) {\n if (!_this.props.shouldCloseOnOverlayClick && event.target == _this.overlay) {\n event.preventDefault();\n }\n };\n\n _this.handleContentOnClick = function () {\n _this.shouldClose = false;\n };\n\n _this.handleContentOnMouseDown = function () {\n _this.shouldClose = false;\n };\n\n _this.requestClose = function (event) {\n return _this.ownerHandlesClose() && _this.props.onRequestClose(event);\n };\n\n _this.ownerHandlesClose = function () {\n return _this.props.onRequestClose;\n };\n\n _this.shouldBeClosed = function () {\n return !_this.state.isOpen && !_this.state.beforeClose;\n };\n\n _this.contentHasFocus = function () {\n return document.activeElement === _this.content || _this.content.contains(document.activeElement);\n };\n\n _this.buildClassName = function (which, additional) {\n var classNames = (typeof additional === \"undefined\" ? \"undefined\" : _typeof(additional)) === \"object\" ? additional : {\n base: CLASS_NAMES[which],\n afterOpen: CLASS_NAMES[which] + \"--after-open\",\n beforeClose: CLASS_NAMES[which] + \"--before-close\"\n };\n var className = classNames.base;\n\n if (_this.state.afterOpen) {\n className = className + \" \" + classNames.afterOpen;\n }\n\n if (_this.state.beforeClose) {\n className = className + \" \" + classNames.beforeClose;\n }\n\n return typeof additional === \"string\" && additional ? className + \" \" + additional : className;\n };\n\n _this.attributesFromObject = function (prefix, items) {\n return Object.keys(items).reduce(function (acc, name) {\n acc[prefix + \"-\" + name] = items[name];\n return acc;\n }, {});\n };\n\n _this.state = {\n afterOpen: false,\n beforeClose: false\n };\n _this.shouldClose = null;\n _this.moveFromContentToOverlay = null;\n return _this;\n }\n\n _createClass(ModalPortal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.isOpen) {\n this.open();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (undefined !== \"production\") {\n if (prevProps.bodyOpenClassName !== this.props.bodyOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"bodyOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n\n if (prevProps.htmlOpenClassName !== this.props.htmlOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"htmlOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n }\n\n if (this.props.isOpen && !prevProps.isOpen) {\n this.open();\n } else if (!this.props.isOpen && prevProps.isOpen) {\n this.close();\n } // Focus only needs to be set once when the modal is being opened\n\n\n if (this.props.shouldFocusAfterRender && this.state.isOpen && !prevState.isOpen) {\n this.focusContent();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.state.isOpen) {\n this.afterClose();\n }\n\n clearTimeout(this.closeTimer);\n }\n }, {\n key: \"beforeOpen\",\n value: function beforeOpen() {\n var _props = this.props,\n appElement = _props.appElement,\n ariaHideApp = _props.ariaHideApp,\n htmlOpenClassName = _props.htmlOpenClassName,\n bodyOpenClassName = _props.bodyOpenClassName; // Add classes.\n\n bodyOpenClassName && classList.add(document.body, bodyOpenClassName);\n htmlOpenClassName && classList.add(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n if (ariaHideApp) {\n ariaHiddenInstances += 1;\n ariaAppHider.hide(appElement);\n }\n\n _portalOpenInstances2[\"default\"].register(this);\n } // Don't steal focus from inner elements\n\n }, {\n key: \"render\",\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n className = _props2.className,\n overlayClassName = _props2.overlayClassName,\n defaultStyles = _props2.defaultStyles;\n var contentStyles = className ? {} : defaultStyles.content;\n var overlayStyles = overlayClassName ? {} : defaultStyles.overlay;\n return this.shouldBeClosed() ? null : _react2[\"default\"].createElement(\"div\", {\n ref: this.setOverlayRef,\n className: this.buildClassName(\"overlay\", overlayClassName),\n style: _extends({}, overlayStyles, this.props.style.overlay),\n onClick: this.handleOverlayOnClick,\n onMouseDown: this.handleOverlayOnMouseDown\n }, _react2[\"default\"].createElement(\"div\", _extends({\n id: id,\n ref: this.setContentRef,\n style: _extends({}, contentStyles, this.props.style.content),\n className: this.buildClassName(\"content\", className),\n tabIndex: \"-1\",\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleContentOnMouseDown,\n onMouseUp: this.handleContentOnMouseUp,\n onClick: this.handleContentOnClick,\n role: this.props.role,\n \"aria-label\": this.props.contentLabel\n }, this.attributesFromObject(\"aria\", this.props.aria || {}), this.attributesFromObject(\"data\", this.props.data || {}), {\n \"data-testid\": this.props.testId\n }), this.props.children));\n }\n }]);\n\n return ModalPortal;\n}(_react.Component);\n\nModalPortal.defaultProps = {\n style: {\n overlay: {},\n content: {}\n },\n defaultStyles: {}\n};\nModalPortal.propTypes = {\n isOpen: _propTypes2[\"default\"].bool.isRequired,\n defaultStyles: _propTypes2[\"default\"].shape({\n content: _propTypes2[\"default\"].object,\n overlay: _propTypes2[\"default\"].object\n }),\n style: _propTypes2[\"default\"].shape({\n content: _propTypes2[\"default\"].object,\n overlay: _propTypes2[\"default\"].object\n }),\n className: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].string, _propTypes2[\"default\"].object]),\n overlayClassName: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].string, _propTypes2[\"default\"].object]),\n bodyOpenClassName: _propTypes2[\"default\"].string,\n htmlOpenClassName: _propTypes2[\"default\"].string,\n ariaHideApp: _propTypes2[\"default\"].bool,\n appElement: _propTypes2[\"default\"].instanceOf(_safeHTMLElement2[\"default\"]),\n onAfterOpen: _propTypes2[\"default\"].func,\n onAfterClose: _propTypes2[\"default\"].func,\n onRequestClose: _propTypes2[\"default\"].func,\n closeTimeoutMS: _propTypes2[\"default\"].number,\n shouldFocusAfterRender: _propTypes2[\"default\"].bool,\n shouldCloseOnOverlayClick: _propTypes2[\"default\"].bool,\n shouldReturnFocusAfterClose: _propTypes2[\"default\"].bool,\n role: _propTypes2[\"default\"].string,\n contentLabel: _propTypes2[\"default\"].string,\n aria: _propTypes2[\"default\"].object,\n data: _propTypes2[\"default\"].object,\n children: _propTypes2[\"default\"].node,\n shouldCloseOnEsc: _propTypes2[\"default\"].bool,\n overlayRef: _propTypes2[\"default\"].func,\n contentRef: _propTypes2[\"default\"].func,\n id: _propTypes2[\"default\"].string,\n testId: _propTypes2[\"default\"].string\n};\nexports[\"default\"] = ModalPortal;\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9jb21wb25lbnRzL01vZGFsUG9ydGFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvY29tcG9uZW50cy9Nb2RhbFBvcnRhbC5qcz81YmI2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX2ZvY3VzTWFuYWdlciA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ZvY3VzTWFuYWdlclwiKTtcblxudmFyIGZvY3VzTWFuYWdlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9mb2N1c01hbmFnZXIpO1xuXG52YXIgX3Njb3BlVGFiID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc2NvcGVUYWJcIik7XG5cbnZhciBfc2NvcGVUYWIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2NvcGVUYWIpO1xuXG52YXIgX2FyaWFBcHBIaWRlciA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2FyaWFBcHBIaWRlclwiKTtcblxudmFyIGFyaWFBcHBIaWRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9hcmlhQXBwSGlkZXIpO1xuXG52YXIgX2NsYXNzTGlzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2NsYXNzTGlzdFwiKTtcblxudmFyIGNsYXNzTGlzdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9jbGFzc0xpc3QpO1xuXG52YXIgX3NhZmVIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3NhZmVIVE1MRWxlbWVudFwiKTtcblxudmFyIF9zYWZlSFRNTEVsZW1lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2FmZUhUTUxFbGVtZW50KTtcblxudmFyIF9wb3J0YWxPcGVuSW5zdGFuY2VzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcG9ydGFsT3Blbkluc3RhbmNlc1wiKTtcblxudmFyIF9wb3J0YWxPcGVuSW5zdGFuY2VzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcnRhbE9wZW5JbnN0YW5jZXMpO1xuXG5yZXF1aXJlKFwiLi4vaGVscGVycy9ib2R5VHJhcFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG4vLyBzbyB0aGF0IG91ciBDU1MgaXMgc3RhdGljYWxseSBhbmFseXphYmxlXG52YXIgQ0xBU1NfTkFNRVMgPSB7XG4gIG92ZXJsYXk6IFwiUmVhY3RNb2RhbF9fT3ZlcmxheVwiLFxuICBjb250ZW50OiBcIlJlYWN0TW9kYWxfX0NvbnRlbnRcIlxufTtcblxudmFyIFRBQl9LRVkgPSA5O1xudmFyIEVTQ19LRVkgPSAyNztcblxudmFyIGFyaWFIaWRkZW5JbnN0YW5jZXMgPSAwO1xuXG52YXIgTW9kYWxQb3J0YWwgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTW9kYWxQb3J0YWwsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1vZGFsUG9ydGFsKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vZGFsUG9ydGFsKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChNb2RhbFBvcnRhbC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE1vZGFsUG9ydGFsKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX3RoaXMuc2V0T3ZlcmxheVJlZiA9IGZ1bmN0aW9uIChvdmVybGF5KSB7XG4gICAgICBfdGhpcy5vdmVybGF5ID0gb3ZlcmxheTtcbiAgICAgIF90aGlzLnByb3BzLm92ZXJsYXlSZWYgJiYgX3RoaXMucHJvcHMub3ZlcmxheVJlZihvdmVybGF5KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0Q29udGVudFJlZiA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gICAgICBfdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgIF90aGlzLnByb3BzLmNvbnRlbnRSZWYgJiYgX3RoaXMucHJvcHMuY29udGVudFJlZihjb250ZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuYWZ0ZXJDbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFwcEVsZW1lbnQgPSBfdGhpcyRwcm9wcy5hcHBFbGVtZW50LFxuICAgICAgICAgIGFyaWFIaWRlQXBwID0gX3RoaXMkcHJvcHMuYXJpYUhpZGVBcHAsXG4gICAgICAgICAgaHRtbE9wZW5DbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5odG1sT3BlbkNsYXNzTmFtZSxcbiAgICAgICAgICBib2R5T3BlbkNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmJvZHlPcGVuQ2xhc3NOYW1lO1xuXG4gICAgICAvLyBSZW1vdmUgY2xhc3Nlcy5cblxuICAgICAgYm9keU9wZW5DbGFzc05hbWUgJiYgY2xhc3NMaXN0LnJlbW92ZShkb2N1bWVudC5ib2R5LCBib2R5T3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIGh0bWxPcGVuQ2xhc3NOYW1lICYmIGNsYXNzTGlzdC5yZW1vdmUoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdLCBodG1sT3BlbkNsYXNzTmFtZSk7XG5cbiAgICAgIC8vIFJlc2V0IGFyaWEtaGlkZGVuIGF0dHJpYnV0ZSBpZiBhbGwgbW9kYWxzIGhhdmUgYmVlbiByZW1vdmVkXG4gICAgICBpZiAoYXJpYUhpZGVBcHAgJiYgYXJpYUhpZGRlbkluc3RhbmNlcyA+IDApIHtcbiAgICAgICAgYXJpYUhpZGRlbkluc3RhbmNlcyAtPSAxO1xuXG4gICAgICAgIGlmIChhcmlhSGlkZGVuSW5zdGFuY2VzID09PSAwKSB7XG4gICAgICAgICAgYXJpYUFwcEhpZGVyLnNob3coYXBwRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLnByb3BzLnNob3VsZEZvY3VzQWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZSkge1xuICAgICAgICAgIGZvY3VzTWFuYWdlci5yZXR1cm5Gb2N1cygpO1xuICAgICAgICAgIGZvY3VzTWFuYWdlci50ZWFyZG93blNjb3BlZEZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9jdXNNYW5hZ2VyLnBvcFdpdGhvdXRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkFmdGVyQ2xvc2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25BZnRlckNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIF9wb3J0YWxPcGVuSW5zdGFuY2VzMi5kZWZhdWx0LmRlcmVnaXN0ZXIoX3RoaXMpO1xuICAgIH07XG5cbiAgICBfdGhpcy5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuYmVmb3JlT3BlbigpO1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmFmdGVyT3BlbiAmJiBfdGhpcy5zdGF0ZS5iZWZvcmVDbG9zZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMuY2xvc2VUaW1lcik7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgYmVmb3JlQ2xvc2U6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3VsZEZvY3VzQWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICBmb2N1c01hbmFnZXIuc2V0dXBTY29wZWRGb2N1cyhfdGhpcy5ub2RlKTtcbiAgICAgICAgICBmb2N1c01hbmFnZXIubWFya0ZvckZvY3VzTGF0ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgaXNPcGVuOiB0cnVlIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGFmdGVyT3BlbjogdHJ1ZSB9KTtcblxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4gJiYgX3RoaXMucHJvcHMub25BZnRlck9wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQWZ0ZXJPcGVuKHtcbiAgICAgICAgICAgICAgb3ZlcmxheUVsOiBfdGhpcy5vdmVybGF5LFxuICAgICAgICAgICAgICBjb250ZW50RWw6IF90aGlzLmNvbnRlbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmNsb3NlVGltZW91dE1TID4gMCkge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmZvY3VzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5jb250ZW50ICYmICFfdGhpcy5jb250ZW50SGFzRm9jdXMoKSAmJiBfdGhpcy5jb250ZW50LmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2xvc2VzQXQgPSBEYXRlLm5vdygpICsgX3RoaXMucHJvcHMuY2xvc2VUaW1lb3V0TVM7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7IGJlZm9yZUNsb3NlOiB0cnVlLCBjbG9zZXNBdDogY2xvc2VzQXQgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5jbG9zZVRpbWVyID0gc2V0VGltZW91dChfdGhpcy5jbG9zZVdpdGhvdXRUaW1lb3V0LCBfdGhpcy5zdGF0ZS5jbG9zZXNBdCAtIERhdGUubm93KCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmNsb3NlV2l0aG91dFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgICAgY2xvc2VzQXQ6IG51bGxcbiAgICAgIH0sIF90aGlzLmFmdGVyQ2xvc2UpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVEFCX0tFWSkge1xuICAgICAgICAoMCwgX3Njb3BlVGFiMi5kZWZhdWx0KShfdGhpcy5jb250ZW50LCBldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uRXNjICYmIGV2ZW50LmtleUNvZGUgPT09IEVTQ19LRVkpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgPT09IG51bGwpIHtcbiAgICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuc2hvdWxkQ2xvc2UgJiYgX3RoaXMucHJvcHMuc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljaykge1xuICAgICAgICBpZiAoX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSkge1xuICAgICAgICAgIF90aGlzLnJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VVcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNob3VsZENsb3NlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5zaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrICYmIGV2ZW50LnRhcmdldCA9PSBfdGhpcy5vdmVybGF5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUNvbnRlbnRPbkNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ29udGVudE9uTW91c2VEb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2hvdWxkQ2xvc2UgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVxdWVzdENsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMub3duZXJIYW5kbGVzQ2xvc2UoKSAmJiBfdGhpcy5wcm9wcy5vblJlcXVlc3RDbG9zZShldmVudCk7XG4gICAgfTtcblxuICAgIF90aGlzLm93bmVySGFuZGxlc0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uUmVxdWVzdENsb3NlO1xuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRCZUNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhX3RoaXMuc3RhdGUuaXNPcGVuICYmICFfdGhpcy5zdGF0ZS5iZWZvcmVDbG9zZTtcbiAgICB9O1xuXG4gICAgX3RoaXMuY29udGVudEhhc0ZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLmNvbnRlbnQgfHwgX3RoaXMuY29udGVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuYnVpbGRDbGFzc05hbWUgPSBmdW5jdGlvbiAod2hpY2gsIGFkZGl0aW9uYWwpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gKHR5cGVvZiBhZGRpdGlvbmFsID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoYWRkaXRpb25hbCkpID09PSBcIm9iamVjdFwiID8gYWRkaXRpb25hbCA6IHtcbiAgICAgICAgYmFzZTogQ0xBU1NfTkFNRVNbd2hpY2hdLFxuICAgICAgICBhZnRlck9wZW46IENMQVNTX05BTUVTW3doaWNoXSArIFwiLS1hZnRlci1vcGVuXCIsXG4gICAgICAgIGJlZm9yZUNsb3NlOiBDTEFTU19OQU1FU1t3aGljaF0gKyBcIi0tYmVmb3JlLWNsb3NlXCJcbiAgICAgIH07XG4gICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5iYXNlO1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmFmdGVyT3Blbikge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZXMuYWZ0ZXJPcGVuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnN0YXRlLmJlZm9yZUNsb3NlKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lcy5iZWZvcmVDbG9zZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgYWRkaXRpb25hbCA9PT0gXCJzdHJpbmdcIiAmJiBhZGRpdGlvbmFsID8gY2xhc3NOYW1lICsgXCIgXCIgKyBhZGRpdGlvbmFsIDogY2xhc3NOYW1lO1xuICAgIH07XG5cbiAgICBfdGhpcy5hdHRyaWJ1dGVzRnJvbU9iamVjdCA9IGZ1bmN0aW9uIChwcmVmaXgsIGl0ZW1zKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbXMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XG4gICAgICAgIGFjY1twcmVmaXggKyBcIi1cIiArIG5hbWVdID0gaXRlbXNbbmFtZV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWZ0ZXJPcGVuOiBmYWxzZSxcbiAgICAgIGJlZm9yZUNsb3NlOiBmYWxzZVxuICAgIH07XG5cbiAgICBfdGhpcy5zaG91bGRDbG9zZSA9IG51bGw7XG4gICAgX3RoaXMubW92ZUZyb21Db250ZW50VG9PdmVybGF5ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTW9kYWxQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuYm9keU9wZW5DbGFzc05hbWUgIT09IHRoaXMucHJvcHMuYm9keU9wZW5DbGFzc05hbWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybignUmVhY3QtTW9kYWw6IFwiYm9keU9wZW5DbGFzc05hbWVcIiBwcm9wIGhhcyBiZWVuIG1vZGlmaWVkLiAnICsgXCJUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gbXVsdGlwbGUgbW9kYWxzIGFyZSBvcGVuLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lICE9PSB0aGlzLnByb3BzLmh0bWxPcGVuQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWN0LU1vZGFsOiBcImh0bWxPcGVuQ2xhc3NOYW1lXCIgcHJvcCBoYXMgYmVlbiBtb2RpZmllZC4gJyArIFwiVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIG11bHRpcGxlIG1vZGFscyBhcmUgb3Blbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuICYmICFwcmV2UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5pc09wZW4gJiYgcHJldlByb3BzLmlzT3Blbikge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvY3VzIG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2Ugd2hlbiB0aGUgbW9kYWwgaXMgYmVpbmcgb3BlbmVkXG4gICAgICBpZiAodGhpcy5wcm9wcy5zaG91bGRGb2N1c0FmdGVyUmVuZGVyICYmIHRoaXMuc3RhdGUuaXNPcGVuICYmICFwcmV2U3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDb250ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJDbG9zZSgpO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImJlZm9yZU9wZW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmVmb3JlT3BlbigpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFwcEVsZW1lbnQgPSBfcHJvcHMuYXBwRWxlbWVudCxcbiAgICAgICAgICBhcmlhSGlkZUFwcCA9IF9wcm9wcy5hcmlhSGlkZUFwcCxcbiAgICAgICAgICBodG1sT3BlbkNsYXNzTmFtZSA9IF9wcm9wcy5odG1sT3BlbkNsYXNzTmFtZSxcbiAgICAgICAgICBib2R5T3BlbkNsYXNzTmFtZSA9IF9wcm9wcy5ib2R5T3BlbkNsYXNzTmFtZTtcblxuICAgICAgLy8gQWRkIGNsYXNzZXMuXG5cbiAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lICYmIGNsYXNzTGlzdC5hZGQoZG9jdW1lbnQuYm9keSwgYm9keU9wZW5DbGFzc05hbWUpO1xuXG4gICAgICBodG1sT3BlbkNsYXNzTmFtZSAmJiBjbGFzc0xpc3QuYWRkKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXSwgaHRtbE9wZW5DbGFzc05hbWUpO1xuXG4gICAgICBpZiAoYXJpYUhpZGVBcHApIHtcbiAgICAgICAgYXJpYUhpZGRlbkluc3RhbmNlcyArPSAxO1xuICAgICAgICBhcmlhQXBwSGlkZXIuaGlkZShhcHBFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgX3BvcnRhbE9wZW5JbnN0YW5jZXMyLmRlZmF1bHQucmVnaXN0ZXIodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgZnJvbSBpbm5lciBlbGVtZW50c1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpZCA9IF9wcm9wczIuaWQsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3Byb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgb3ZlcmxheUNsYXNzTmFtZSA9IF9wcm9wczIub3ZlcmxheUNsYXNzTmFtZSxcbiAgICAgICAgICBkZWZhdWx0U3R5bGVzID0gX3Byb3BzMi5kZWZhdWx0U3R5bGVzO1xuXG4gICAgICB2YXIgY29udGVudFN0eWxlcyA9IGNsYXNzTmFtZSA/IHt9IDogZGVmYXVsdFN0eWxlcy5jb250ZW50O1xuICAgICAgdmFyIG92ZXJsYXlTdHlsZXMgPSBvdmVybGF5Q2xhc3NOYW1lID8ge30gOiBkZWZhdWx0U3R5bGVzLm92ZXJsYXk7XG5cbiAgICAgIHJldHVybiB0aGlzLnNob3VsZEJlQ2xvc2VkKCkgPyBudWxsIDogX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IHRoaXMuc2V0T3ZlcmxheVJlZixcbiAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuYnVpbGRDbGFzc05hbWUoXCJvdmVybGF5XCIsIG92ZXJsYXlDbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgb3ZlcmxheVN0eWxlcywgdGhpcy5wcm9wcy5zdHlsZS5vdmVybGF5KSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU92ZXJsYXlPbkNsaWNrLFxuICAgICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZU92ZXJsYXlPbk1vdXNlRG93blxuICAgICAgICB9LFxuICAgICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHJlZjogdGhpcy5zZXRDb250ZW50UmVmLFxuICAgICAgICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCBjb250ZW50U3R5bGVzLCB0aGlzLnByb3BzLnN0eWxlLmNvbnRlbnQpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmJ1aWxkQ2xhc3NOYW1lKFwiY29udGVudFwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgICAgdGFiSW5kZXg6IFwiLTFcIixcbiAgICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICAgICAgb25Nb3VzZURvd246IHRoaXMuaGFuZGxlQ29udGVudE9uTW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZVVwOiB0aGlzLmhhbmRsZUNvbnRlbnRPbk1vdXNlVXAsXG4gICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNvbnRlbnRPbkNsaWNrLFxuICAgICAgICAgICAgcm9sZTogdGhpcy5wcm9wcy5yb2xlLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRoaXMucHJvcHMuY29udGVudExhYmVsXG4gICAgICAgICAgfSwgdGhpcy5hdHRyaWJ1dGVzRnJvbU9iamVjdChcImFyaWFcIiwgdGhpcy5wcm9wcy5hcmlhIHx8IHt9KSwgdGhpcy5hdHRyaWJ1dGVzRnJvbU9iamVjdChcImRhdGFcIiwgdGhpcy5wcm9wcy5kYXRhIHx8IHt9KSwge1xuICAgICAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiB0aGlzLnByb3BzLnRlc3RJZFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW9kYWxQb3J0YWw7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Nb2RhbFBvcnRhbC5kZWZhdWx0UHJvcHMgPSB7XG4gIHN0eWxlOiB7XG4gICAgb3ZlcmxheToge30sXG4gICAgY29udGVudDoge31cbiAgfSxcbiAgZGVmYXVsdFN0eWxlczoge31cbn07XG5Nb2RhbFBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIGlzT3BlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc2hhcGUoe1xuICAgIGNvbnRlbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICAgIG92ZXJsYXk6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XG4gIH0pLFxuICBzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zaGFwZSh7XG4gICAgY29udGVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG4gICAgb3ZlcmxheTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3RcbiAgfSksXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdF0pLFxuICBvdmVybGF5Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0XSksXG4gIGJvZHlPcGVuQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcbiAgaHRtbE9wZW5DbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICBhcmlhSGlkZUFwcDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBhcHBFbGVtZW50OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lmluc3RhbmNlT2YoX3NhZmVIVE1MRWxlbWVudDIuZGVmYXVsdCksXG4gIG9uQWZ0ZXJPcGVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIG9uQWZ0ZXJDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBvblJlcXVlc3RDbG9zZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuICBjbG9zZVRpbWVvdXRNUzogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG4gIHNob3VsZEZvY3VzQWZ0ZXJSZW5kZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgc2hvdWxkQ2xvc2VPbk92ZXJsYXlDbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcbiAgcm9sZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIGNvbnRlbnRMYWJlbDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG4gIGFyaWE6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuICBkYXRhOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMyLmRlZmF1bHQubm9kZSxcbiAgc2hvdWxkQ2xvc2VPbkVzYzogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuICBvdmVybGF5UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG4gIGNvbnRlbnRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcbiAgaWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuICB0ZXN0SWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWxQb3J0YWw7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQ0E7QUFxQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFSQTtBQVVBO0FBckJBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBRkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQWZBO0FBQ0E7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFEQTtBQTBCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWFBO0FBREE7QUFNQTtBQXpDQTtBQUNBO0FBMkNBO0FBdFRBO0FBQ0E7QUF3VEE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7QUFrQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/components/ModalPortal.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/ariaAppHider.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/ariaAppHider.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.assertNodeList = assertNodeList;\nexports.setElement = setElement;\nexports.validateElement = validateElement;\nexports.hide = hide;\nexports.show = show;\nexports.documentNotReadyOrSSRTesting = documentNotReadyOrSSRTesting;\nexports.resetForTesting = resetForTesting;\n\nvar _warning = __webpack_require__(/*! warning */ \"../node_modules/warning/warning.js\");\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _safeHTMLElement = __webpack_require__(/*! ./safeHTMLElement */ \"../node_modules/react-modal/lib/helpers/safeHTMLElement.js\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar globalElement = null;\n\nfunction assertNodeList(nodeList, selector) {\n if (!nodeList || !nodeList.length) {\n throw new Error(\"react-modal: No elements were found for selector \" + selector + \".\");\n }\n}\n\nfunction setElement(element) {\n var useElement = element;\n\n if (typeof useElement === \"string\" && _safeHTMLElement.canUseDOM) {\n var el = document.querySelectorAll(useElement);\n assertNodeList(el, useElement);\n useElement = \"length\" in el ? el[0] : el;\n }\n\n globalElement = useElement || globalElement;\n return globalElement;\n}\n\nfunction validateElement(appElement) {\n if (!appElement && !globalElement) {\n (0, _warning2[\"default\"])(false, [\"react-modal: App element is not defined.\", \"Please use `Modal.setAppElement(el)` or set `appElement={el}`.\", \"This is needed so screen readers don't see main content\", \"when modal is opened. It is not recommended, but you can opt-out\", \"by setting `ariaHideApp={false}`.\"].join(\" \"));\n return false;\n }\n\n return true;\n}\n\nfunction hide(appElement) {\n if (validateElement(appElement)) {\n (appElement || globalElement).setAttribute(\"aria-hidden\", \"true\");\n }\n}\n\nfunction show(appElement) {\n if (validateElement(appElement)) {\n (appElement || globalElement).removeAttribute(\"aria-hidden\");\n }\n}\n\nfunction documentNotReadyOrSSRTesting() {\n globalElement = null;\n}\n\nfunction resetForTesting() {\n globalElement = null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2FyaWFBcHBIaWRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvYXJpYUFwcEhpZGVyLmpzP2QxMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzc2VydE5vZGVMaXN0ID0gYXNzZXJ0Tm9kZUxpc3Q7XG5leHBvcnRzLnNldEVsZW1lbnQgPSBzZXRFbGVtZW50O1xuZXhwb3J0cy52YWxpZGF0ZUVsZW1lbnQgPSB2YWxpZGF0ZUVsZW1lbnQ7XG5leHBvcnRzLmhpZGUgPSBoaWRlO1xuZXhwb3J0cy5zaG93ID0gc2hvdztcbmV4cG9ydHMuZG9jdW1lbnROb3RSZWFkeU9yU1NSVGVzdGluZyA9IGRvY3VtZW50Tm90UmVhZHlPclNTUlRlc3Rpbmc7XG5leHBvcnRzLnJlc2V0Rm9yVGVzdGluZyA9IHJlc2V0Rm9yVGVzdGluZztcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZShcIndhcm5pbmdcIik7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIF9zYWZlSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9zYWZlSFRNTEVsZW1lbnRcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBnbG9iYWxFbGVtZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gYXNzZXJ0Tm9kZUxpc3Qobm9kZUxpc3QsIHNlbGVjdG9yKSB7XG4gIGlmICghbm9kZUxpc3QgfHwgIW5vZGVMaXN0Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInJlYWN0LW1vZGFsOiBObyBlbGVtZW50cyB3ZXJlIGZvdW5kIGZvciBzZWxlY3RvciBcIiArIHNlbGVjdG9yICsgXCIuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgdXNlRWxlbWVudCA9IGVsZW1lbnQ7XG4gIGlmICh0eXBlb2YgdXNlRWxlbWVudCA9PT0gXCJzdHJpbmdcIiAmJiBfc2FmZUhUTUxFbGVtZW50LmNhblVzZURPTSkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodXNlRWxlbWVudCk7XG4gICAgYXNzZXJ0Tm9kZUxpc3QoZWwsIHVzZUVsZW1lbnQpO1xuICAgIHVzZUVsZW1lbnQgPSBcImxlbmd0aFwiIGluIGVsID8gZWxbMF0gOiBlbDtcbiAgfVxuICBnbG9iYWxFbGVtZW50ID0gdXNlRWxlbWVudCB8fCBnbG9iYWxFbGVtZW50O1xuICByZXR1cm4gZ2xvYmFsRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFbGVtZW50KGFwcEVsZW1lbnQpIHtcbiAgaWYgKCFhcHBFbGVtZW50ICYmICFnbG9iYWxFbGVtZW50KSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KShmYWxzZSwgW1wicmVhY3QtbW9kYWw6IEFwcCBlbGVtZW50IGlzIG5vdCBkZWZpbmVkLlwiLCBcIlBsZWFzZSB1c2UgYE1vZGFsLnNldEFwcEVsZW1lbnQoZWwpYCBvciBzZXQgYGFwcEVsZW1lbnQ9e2VsfWAuXCIsIFwiVGhpcyBpcyBuZWVkZWQgc28gc2NyZWVuIHJlYWRlcnMgZG9uJ3Qgc2VlIG1haW4gY29udGVudFwiLCBcIndoZW4gbW9kYWwgaXMgb3BlbmVkLiBJdCBpcyBub3QgcmVjb21tZW5kZWQsIGJ1dCB5b3UgY2FuIG9wdC1vdXRcIiwgXCJieSBzZXR0aW5nIGBhcmlhSGlkZUFwcD17ZmFsc2V9YC5cIl0uam9pbihcIiBcIikpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhpZGUoYXBwRWxlbWVudCkge1xuICBpZiAodmFsaWRhdGVFbGVtZW50KGFwcEVsZW1lbnQpKSB7XG4gICAgKGFwcEVsZW1lbnQgfHwgZ2xvYmFsRWxlbWVudCkuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3coYXBwRWxlbWVudCkge1xuICBpZiAodmFsaWRhdGVFbGVtZW50KGFwcEVsZW1lbnQpKSB7XG4gICAgKGFwcEVsZW1lbnQgfHwgZ2xvYmFsRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZG9jdW1lbnROb3RSZWFkeU9yU1NSVGVzdGluZygpIHtcbiAgZ2xvYmFsRWxlbWVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Rm9yVGVzdGluZygpIHtcbiAgZ2xvYmFsRWxlbWVudCA9IG51bGw7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/ariaAppHider.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/bodyTrap.js": -/*!***********************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/bodyTrap.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar _portalOpenInstances = __webpack_require__(/*! ./portalOpenInstances */ \"../node_modules/react-modal/lib/helpers/portalOpenInstances.js\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n} // Body focus trap see Issue #742\n\n\nvar before = void 0,\n after = void 0,\n instances = [];\n\nfunction focusContent() {\n if (instances.length === 0) {\n if (undefined !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Open instances > 0 expected\");\n }\n\n return;\n }\n\n instances[instances.length - 1].focusContent();\n}\n\nfunction bodyTrap(eventType, openInstances) {\n if (!before || !after) {\n before = document.createElement(\"div\");\n before.setAttribute(\"data-react-modal-body-trap\", \"\");\n before.style.position = \"absolute\";\n before.style.opacity = \"0\";\n before.setAttribute(\"tabindex\", \"0\");\n before.addEventListener(\"focus\", focusContent);\n after = before.cloneNode();\n after.addEventListener(\"focus\", focusContent);\n }\n\n instances = openInstances;\n\n if (instances.length > 0) {\n // Add focus trap\n if (document.body.firstChild !== before) {\n document.body.insertBefore(before, document.body.firstChild);\n }\n\n if (document.body.lastChild !== after) {\n document.body.appendChild(after);\n }\n } else {\n // Remove focus trap\n if (before.parentElement) {\n before.parentElement.removeChild(before);\n }\n\n if (after.parentElement) {\n after.parentElement.removeChild(after);\n }\n }\n}\n\n_portalOpenInstances2[\"default\"].subscribe(bodyTrap);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2JvZHlUcmFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaGVscGVycy9ib2R5VHJhcC5qcz84MWMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX3BvcnRhbE9wZW5JbnN0YW5jZXMgPSByZXF1aXJlKFwiLi9wb3J0YWxPcGVuSW5zdGFuY2VzXCIpO1xuXG52YXIgX3BvcnRhbE9wZW5JbnN0YW5jZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9ydGFsT3Blbkluc3RhbmNlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIEJvZHkgZm9jdXMgdHJhcCBzZWUgSXNzdWUgIzc0MlxuXG52YXIgYmVmb3JlID0gdm9pZCAwLFxuICAgIGFmdGVyID0gdm9pZCAwLFxuICAgIGluc3RhbmNlcyA9IFtdO1xuXG5mdW5jdGlvbiBmb2N1c0NvbnRlbnQoKSB7XG4gIGlmIChpbnN0YW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlJlYWN0LU1vZGFsOiBPcGVuIGluc3RhbmNlcyA+IDAgZXhwZWN0ZWRcIik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpbnN0YW5jZXNbaW5zdGFuY2VzLmxlbmd0aCAtIDFdLmZvY3VzQ29udGVudCgpO1xufVxuXG5mdW5jdGlvbiBib2R5VHJhcChldmVudFR5cGUsIG9wZW5JbnN0YW5jZXMpIHtcbiAgaWYgKCFiZWZvcmUgfHwgIWFmdGVyKSB7XG4gICAgYmVmb3JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBiZWZvcmUuc2V0QXR0cmlidXRlKFwiZGF0YS1yZWFjdC1tb2RhbC1ib2R5LXRyYXBcIiwgXCJcIik7XG4gICAgYmVmb3JlLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIGJlZm9yZS5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgYmVmb3JlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiMFwiKTtcbiAgICBiZWZvcmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzQ29udGVudCk7XG4gICAgYWZ0ZXIgPSBiZWZvcmUuY2xvbmVOb2RlKCk7XG4gICAgYWZ0ZXIuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzQ29udGVudCk7XG4gIH1cblxuICBpbnN0YW5jZXMgPSBvcGVuSW5zdGFuY2VzO1xuXG4gIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIEFkZCBmb2N1cyB0cmFwXG4gICAgaWYgKGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCAhPT0gYmVmb3JlKSB7XG4gICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShiZWZvcmUsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5ib2R5Lmxhc3RDaGlsZCAhPT0gYWZ0ZXIpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYWZ0ZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZW1vdmUgZm9jdXMgdHJhcFxuICAgIGlmIChiZWZvcmUucGFyZW50RWxlbWVudCkge1xuICAgICAgYmVmb3JlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoYmVmb3JlKTtcbiAgICB9XG4gICAgaWYgKGFmdGVyLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGFmdGVyLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoYWZ0ZXIpO1xuICAgIH1cbiAgfVxufVxuXG5fcG9ydGFsT3Blbkluc3RhbmNlczIuZGVmYXVsdC5zdWJzY3JpYmUoYm9keVRyYXApOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/bodyTrap.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/classList.js": -/*!************************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/classList.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dumpClassLists = dumpClassLists;\nvar htmlClassList = {};\nvar docBodyClassList = {};\n\nfunction dumpClassLists() {\n if (undefined !== \"production\") {\n var classes = document.getElementsByTagName(\"html\")[0].className;\n var buffer = \"Show tracked classes:\\n\\n\";\n buffer += \"<html /> (\" + classes + \"):\\n\";\n\n for (var x in htmlClassList) {\n buffer += \" \" + x + \" \" + htmlClassList[x] + \"\\n\";\n }\n\n classes = document.body.className; // eslint-disable-next-line max-len\n\n buffer += \"\\n\\ndoc.body (\" + classes + \"):\\n\";\n\n for (var _x in docBodyClassList) {\n buffer += \" \" + _x + \" \" + docBodyClassList[_x] + \"\\n\";\n }\n\n buffer += \"\\n\"; // eslint-disable-next-line no-console\n\n console.log(buffer);\n }\n}\n/**\n * Track the number of reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\n\n\nvar incrementReference = function incrementReference(poll, className) {\n if (!poll[className]) {\n poll[className] = 0;\n }\n\n poll[className] += 1;\n return className;\n};\n/**\n * Drop the reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\n\n\nvar decrementReference = function decrementReference(poll, className) {\n if (poll[className]) {\n poll[className] -= 1;\n }\n\n return className;\n};\n/**\n * Track a class and add to the given class list.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be tracked.\n */\n\n\nvar trackClass = function trackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n incrementReference(poll, className);\n classListRef.add(className);\n });\n};\n/**\n * Untrack a class and remove from the given class list if the reference\n * reaches 0.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be untracked.\n */\n\n\nvar untrackClass = function untrackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n decrementReference(poll, className);\n poll[className] === 0 && classListRef.remove(className);\n });\n};\n/**\n * Public inferface to add classes to the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\n\n\nvar add = exports.add = function add(element, classString) {\n return trackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};\n/**\n * Public inferface to remove classes from the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\n\n\nvar remove = exports.remove = function remove(element, classString) {\n return untrackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2NsYXNzTGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvY2xhc3NMaXN0LmpzP2E0NzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmR1bXBDbGFzc0xpc3RzID0gZHVtcENsYXNzTGlzdHM7XG52YXIgaHRtbENsYXNzTGlzdCA9IHt9O1xudmFyIGRvY0JvZHlDbGFzc0xpc3QgPSB7fTtcblxuZnVuY3Rpb24gZHVtcENsYXNzTGlzdHMoKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXS5jbGFzc05hbWU7XG4gICAgdmFyIGJ1ZmZlciA9IFwiU2hvdyB0cmFja2VkIGNsYXNzZXM6XFxuXFxuXCI7XG5cbiAgICBidWZmZXIgKz0gXCI8aHRtbCAvPiAoXCIgKyBjbGFzc2VzICsgXCIpOlxcblwiO1xuICAgIGZvciAodmFyIHggaW4gaHRtbENsYXNzTGlzdCkge1xuICAgICAgYnVmZmVyICs9IFwiICBcIiArIHggKyBcIiBcIiArIGh0bWxDbGFzc0xpc3RbeF0gKyBcIlxcblwiO1xuICAgIH1cblxuICAgIGNsYXNzZXMgPSBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgYnVmZmVyICs9IFwiXFxuXFxuZG9jLmJvZHkgKFwiICsgY2xhc3NlcyArIFwiKTpcXG5cIjtcbiAgICBmb3IgKHZhciBfeCBpbiBkb2NCb2R5Q2xhc3NMaXN0KSB7XG4gICAgICBidWZmZXIgKz0gXCIgIFwiICsgX3ggKyBcIiBcIiArIGRvY0JvZHlDbGFzc0xpc3RbX3hdICsgXCJcXG5cIjtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gXCJcXG5cIjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coYnVmZmVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYWNrIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIG9mIGEgY2xhc3MuXG4gKiBAcGFyYW0ge29iamVjdH0gcG9sbCBUaGUgcG9sbCB0byByZWNlaXZlIHRoZSByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG52YXIgaW5jcmVtZW50UmVmZXJlbmNlID0gZnVuY3Rpb24gaW5jcmVtZW50UmVmZXJlbmNlKHBvbGwsIGNsYXNzTmFtZSkge1xuICBpZiAoIXBvbGxbY2xhc3NOYW1lXSkge1xuICAgIHBvbGxbY2xhc3NOYW1lXSA9IDA7XG4gIH1cbiAgcG9sbFtjbGFzc05hbWVdICs9IDE7XG4gIHJldHVybiBjbGFzc05hbWU7XG59O1xuXG4vKipcbiAqIERyb3AgdGhlIHJlZmVyZW5jZSBvZiBhIGNsYXNzLlxuICogQHBhcmFtIHtvYmplY3R9IHBvbGwgVGhlIHBvbGwgdG8gcmVjZWl2ZSB0aGUgcmVmZXJlbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xudmFyIGRlY3JlbWVudFJlZmVyZW5jZSA9IGZ1bmN0aW9uIGRlY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpIHtcbiAgaWYgKHBvbGxbY2xhc3NOYW1lXSkge1xuICAgIHBvbGxbY2xhc3NOYW1lXSAtPSAxO1xuICB9XG4gIHJldHVybiBjbGFzc05hbWU7XG59O1xuXG4vKipcbiAqIFRyYWNrIGEgY2xhc3MgYW5kIGFkZCB0byB0aGUgZ2l2ZW4gY2xhc3MgbGlzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjbGFzc0xpc3RSZWYgQSBjbGFzcyBsaXN0IG9mIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gcG9sbCAgICAgICAgIFRoZSBwb2xsIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0ge0FycmF5fSAgY2xhc3NlcyAgICAgIFRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gYmUgdHJhY2tlZC5cbiAqL1xudmFyIHRyYWNrQ2xhc3MgPSBmdW5jdGlvbiB0cmFja0NsYXNzKGNsYXNzTGlzdFJlZiwgcG9sbCwgY2xhc3Nlcykge1xuICBjbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGluY3JlbWVudFJlZmVyZW5jZShwb2xsLCBjbGFzc05hbWUpO1xuICAgIGNsYXNzTGlzdFJlZi5hZGQoY2xhc3NOYW1lKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVudHJhY2sgYSBjbGFzcyBhbmQgcmVtb3ZlIGZyb20gdGhlIGdpdmVuIGNsYXNzIGxpc3QgaWYgdGhlIHJlZmVyZW5jZVxuICogcmVhY2hlcyAwLlxuICogQHBhcmFtIHtPYmplY3R9IGNsYXNzTGlzdFJlZiBBIGNsYXNzIGxpc3Qgb2YgYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwb2xsICAgICAgICAgVGhlIHBvbGwgdG8gYmUgdXNlZC5cbiAqIEBwYXJhbSB7QXJyYXl9ICBjbGFzc2VzICAgICAgVGhlIGxpc3Qgb2YgY2xhc3NlcyB0byBiZSB1bnRyYWNrZWQuXG4gKi9cbnZhciB1bnRyYWNrQ2xhc3MgPSBmdW5jdGlvbiB1bnRyYWNrQ2xhc3MoY2xhc3NMaXN0UmVmLCBwb2xsLCBjbGFzc2VzKSB7XG4gIGNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgZGVjcmVtZW50UmVmZXJlbmNlKHBvbGwsIGNsYXNzTmFtZSk7XG4gICAgcG9sbFtjbGFzc05hbWVdID09PSAwICYmIGNsYXNzTGlzdFJlZi5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFB1YmxpYyBpbmZlcmZhY2UgdG8gYWRkIGNsYXNzZXMgdG8gdGhlIGRvY3VtZW50LmJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keUNsYXNzIFRoZSBjbGFzcyBzdHJpbmcgdG8gYmUgYWRkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG1heSBjb250YWluIG1vcmUgdGhlbiBvbmUgY2xhc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCAnICcgYXMgc2VwYXJhdG9yLlxuICovXG52YXIgYWRkID0gZXhwb3J0cy5hZGQgPSBmdW5jdGlvbiBhZGQoZWxlbWVudCwgY2xhc3NTdHJpbmcpIHtcbiAgcmV0dXJuIHRyYWNrQ2xhc3MoZWxlbWVudC5jbGFzc0xpc3QsIGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSBcImh0bWxcIiA/IGh0bWxDbGFzc0xpc3QgOiBkb2NCb2R5Q2xhc3NMaXN0LCBjbGFzc1N0cmluZy5zcGxpdChcIiBcIikpO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgaW5mZXJmYWNlIHRvIHJlbW92ZSBjbGFzc2VzIGZyb20gdGhlIGRvY3VtZW50LmJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keUNsYXNzIFRoZSBjbGFzcyBzdHJpbmcgdG8gYmUgYWRkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG1heSBjb250YWluIG1vcmUgdGhlbiBvbmUgY2xhc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCAnICcgYXMgc2VwYXJhdG9yLlxuICovXG52YXIgcmVtb3ZlID0gZXhwb3J0cy5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZWxlbWVudCwgY2xhc3NTdHJpbmcpIHtcbiAgcmV0dXJuIHVudHJhY2tDbGFzcyhlbGVtZW50LmNsYXNzTGlzdCwgZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09IFwiaHRtbFwiID8gaHRtbENsYXNzTGlzdCA6IGRvY0JvZHlDbGFzc0xpc3QsIGNsYXNzU3RyaW5nLnNwbGl0KFwiIFwiKSk7XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFRQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQU9BOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU9BOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFPQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBREE7QUFJQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/classList.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/focusManager.js": -/*!***************************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/focusManager.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleBlur = handleBlur;\nexports.handleFocus = handleFocus;\nexports.markForFocusLater = markForFocusLater;\nexports.returnFocus = returnFocus;\nexports.popWithoutFocus = popWithoutFocus;\nexports.setupScopedFocus = setupScopedFocus;\nexports.teardownScopedFocus = teardownScopedFocus;\n\nvar _tabbable = __webpack_require__(/*! ../helpers/tabbable */ \"../node_modules/react-modal/lib/helpers/tabbable.js\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n\nfunction handleBlur() {\n needToFocus = true;\n}\n\nfunction handleFocus() {\n if (needToFocus) {\n needToFocus = false;\n\n if (!modalElement) {\n return;\n } // need to see how jQuery shims document.on('focusin') so we don't need the\n // setTimeout, firefox doesn't support focusin, if it did, we could focus\n // the element outside of a setTimeout. Side-effect of this implementation\n // is that the document.body gets focus, and then we focus our element right\n // after, seems fine.\n\n\n setTimeout(function () {\n if (modalElement.contains(document.activeElement)) {\n return;\n }\n\n var el = (0, _tabbable2[\"default\"])(modalElement)[0] || modalElement;\n el.focus();\n }, 0);\n }\n}\n\nfunction markForFocusLater() {\n focusLaterElements.push(document.activeElement);\n}\n/* eslint-disable no-console */\n\n\nfunction returnFocus() {\n var toFocus = null;\n\n try {\n if (focusLaterElements.length !== 0) {\n toFocus = focusLaterElements.pop();\n toFocus.focus();\n }\n\n return;\n } catch (e) {\n console.warn([\"You tried to return focus to\", toFocus, \"but it is not in the DOM anymore\"].join(\" \"));\n }\n}\n/* eslint-enable no-console */\n\n\nfunction popWithoutFocus() {\n focusLaterElements.length > 0 && focusLaterElements.pop();\n}\n\nfunction setupScopedFocus(element) {\n modalElement = element;\n\n if (window.addEventListener) {\n window.addEventListener(\"blur\", handleBlur, false);\n document.addEventListener(\"focus\", handleFocus, true);\n } else {\n window.attachEvent(\"onBlur\", handleBlur);\n document.attachEvent(\"onFocus\", handleFocus);\n }\n}\n\nfunction teardownScopedFocus() {\n modalElement = null;\n\n if (window.addEventListener) {\n window.removeEventListener(\"blur\", handleBlur);\n document.removeEventListener(\"focus\", handleFocus);\n } else {\n window.detachEvent(\"onBlur\", handleBlur);\n document.detachEvent(\"onFocus\", handleFocus);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL2ZvY3VzTWFuYWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvZm9jdXNNYW5hZ2VyLmpzP2E3NWMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhbmRsZUJsdXIgPSBoYW5kbGVCbHVyO1xuZXhwb3J0cy5oYW5kbGVGb2N1cyA9IGhhbmRsZUZvY3VzO1xuZXhwb3J0cy5tYXJrRm9yRm9jdXNMYXRlciA9IG1hcmtGb3JGb2N1c0xhdGVyO1xuZXhwb3J0cy5yZXR1cm5Gb2N1cyA9IHJldHVybkZvY3VzO1xuZXhwb3J0cy5wb3BXaXRob3V0Rm9jdXMgPSBwb3BXaXRob3V0Rm9jdXM7XG5leHBvcnRzLnNldHVwU2NvcGVkRm9jdXMgPSBzZXR1cFNjb3BlZEZvY3VzO1xuZXhwb3J0cy50ZWFyZG93blNjb3BlZEZvY3VzID0gdGVhcmRvd25TY29wZWRGb2N1cztcblxudmFyIF90YWJiYWJsZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RhYmJhYmxlXCIpO1xuXG52YXIgX3RhYmJhYmxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhYmJhYmxlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGZvY3VzTGF0ZXJFbGVtZW50cyA9IFtdO1xudmFyIG1vZGFsRWxlbWVudCA9IG51bGw7XG52YXIgbmVlZFRvRm9jdXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgbmVlZFRvRm9jdXMgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgaWYgKG5lZWRUb0ZvY3VzKSB7XG4gICAgbmVlZFRvRm9jdXMgPSBmYWxzZTtcbiAgICBpZiAoIW1vZGFsRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBuZWVkIHRvIHNlZSBob3cgalF1ZXJ5IHNoaW1zIGRvY3VtZW50Lm9uKCdmb2N1c2luJykgc28gd2UgZG9uJ3QgbmVlZCB0aGVcbiAgICAvLyBzZXRUaW1lb3V0LCBmaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBmb2N1c2luLCBpZiBpdCBkaWQsIHdlIGNvdWxkIGZvY3VzXG4gICAgLy8gdGhlIGVsZW1lbnQgb3V0c2lkZSBvZiBhIHNldFRpbWVvdXQuIFNpZGUtZWZmZWN0IG9mIHRoaXMgaW1wbGVtZW50YXRpb25cbiAgICAvLyBpcyB0aGF0IHRoZSBkb2N1bWVudC5ib2R5IGdldHMgZm9jdXMsIGFuZCB0aGVuIHdlIGZvY3VzIG91ciBlbGVtZW50IHJpZ2h0XG4gICAgLy8gYWZ0ZXIsIHNlZW1zIGZpbmUuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAobW9kYWxFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBlbCA9ICgwLCBfdGFiYmFibGUyLmRlZmF1bHQpKG1vZGFsRWxlbWVudClbMF0gfHwgbW9kYWxFbGVtZW50O1xuICAgICAgZWwuZm9jdXMoKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrRm9yRm9jdXNMYXRlcigpIHtcbiAgZm9jdXNMYXRlckVsZW1lbnRzLnB1c2goZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmZ1bmN0aW9uIHJldHVybkZvY3VzKCkge1xuICB2YXIgdG9Gb2N1cyA9IG51bGw7XG4gIHRyeSB7XG4gICAgaWYgKGZvY3VzTGF0ZXJFbGVtZW50cy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRvRm9jdXMgPSBmb2N1c0xhdGVyRWxlbWVudHMucG9wKCk7XG4gICAgICB0b0ZvY3VzLmZvY3VzKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybihbXCJZb3UgdHJpZWQgdG8gcmV0dXJuIGZvY3VzIHRvXCIsIHRvRm9jdXMsIFwiYnV0IGl0IGlzIG5vdCBpbiB0aGUgRE9NIGFueW1vcmVcIl0uam9pbihcIiBcIikpO1xuICB9XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cblxuZnVuY3Rpb24gcG9wV2l0aG91dEZvY3VzKCkge1xuICBmb2N1c0xhdGVyRWxlbWVudHMubGVuZ3RoID4gMCAmJiBmb2N1c0xhdGVyRWxlbWVudHMucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHNldHVwU2NvcGVkRm9jdXMoZWxlbWVudCkge1xuICBtb2RhbEVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVCbHVyLCBmYWxzZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGhhbmRsZUZvY3VzLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuYXR0YWNoRXZlbnQoXCJvbkJsdXJcIiwgaGFuZGxlQmx1cik7XG4gICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbkZvY3VzXCIsIGhhbmRsZUZvY3VzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0ZWFyZG93blNjb3BlZEZvY3VzKCkge1xuICBtb2RhbEVsZW1lbnQgPSBudWxsO1xuXG4gIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVCbHVyKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5kZXRhY2hFdmVudChcIm9uQmx1clwiLCBoYW5kbGVCbHVyKTtcbiAgICBkb2N1bWVudC5kZXRhY2hFdmVudChcIm9uRm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICB9XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/focusManager.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/portalOpenInstances.js": -/*!**********************************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/portalOpenInstances.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n} // Tracks portals that are open and emits events to subscribers\n\n\nvar PortalOpenInstances = function PortalOpenInstances() {\n var _this = this;\n\n _classCallCheck(this, PortalOpenInstances);\n\n this.register = function (openInstance) {\n if (_this.openInstances.indexOf(openInstance) !== -1) {\n if (undefined !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Cannot register modal instance that's already open\");\n }\n\n return;\n }\n\n _this.openInstances.push(openInstance);\n\n _this.emit(\"register\");\n };\n\n this.deregister = function (openInstance) {\n var index = _this.openInstances.indexOf(openInstance);\n\n if (index === -1) {\n if (undefined !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Unable to deregister \" + openInstance + \" as \" + \"it was never registered\");\n }\n\n return;\n }\n\n _this.openInstances.splice(index, 1);\n\n _this.emit(\"deregister\");\n };\n\n this.subscribe = function (callback) {\n _this.subscribers.push(callback);\n };\n\n this.emit = function (eventType) {\n _this.subscribers.forEach(function (subscriber) {\n return subscriber(eventType, // shallow copy to avoid accidental mutation\n _this.openInstances.slice());\n });\n };\n\n this.openInstances = [];\n this.subscribers = [];\n};\n\nvar portalOpenInstances = new PortalOpenInstances();\nexports[\"default\"] = portalOpenInstances;\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3BvcnRhbE9wZW5JbnN0YW5jZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3BvcnRhbE9wZW5JbnN0YW5jZXMuanM/ZTU3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLy8gVHJhY2tzIHBvcnRhbHMgdGhhdCBhcmUgb3BlbiBhbmQgZW1pdHMgZXZlbnRzIHRvIHN1YnNjcmliZXJzXG5cbnZhciBQb3J0YWxPcGVuSW5zdGFuY2VzID0gZnVuY3Rpb24gUG9ydGFsT3Blbkluc3RhbmNlcygpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9ydGFsT3Blbkluc3RhbmNlcyk7XG5cbiAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uIChvcGVuSW5zdGFuY2UpIHtcbiAgICBpZiAoX3RoaXMub3Blbkluc3RhbmNlcy5pbmRleE9mKG9wZW5JbnN0YW5jZSkgIT09IC0xKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcIlJlYWN0LU1vZGFsOiBDYW5ub3QgcmVnaXN0ZXIgbW9kYWwgaW5zdGFuY2UgdGhhdCdzIGFscmVhZHkgb3BlblwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX3RoaXMub3Blbkluc3RhbmNlcy5wdXNoKG9wZW5JbnN0YW5jZSk7XG4gICAgX3RoaXMuZW1pdChcInJlZ2lzdGVyXCIpO1xuICB9O1xuXG4gIHRoaXMuZGVyZWdpc3RlciA9IGZ1bmN0aW9uIChvcGVuSW5zdGFuY2UpIHtcbiAgICB2YXIgaW5kZXggPSBfdGhpcy5vcGVuSW5zdGFuY2VzLmluZGV4T2Yob3Blbkluc3RhbmNlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcIlJlYWN0LU1vZGFsOiBVbmFibGUgdG8gZGVyZWdpc3RlciBcIiArIG9wZW5JbnN0YW5jZSArIFwiIGFzIFwiICsgXCJpdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX3RoaXMub3Blbkluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIF90aGlzLmVtaXQoXCJkZXJlZ2lzdGVyXCIpO1xuICB9O1xuXG4gIHRoaXMuc3Vic2NyaWJlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgX3RoaXMuc3Vic2NyaWJlcnMucHVzaChjYWxsYmFjayk7XG4gIH07XG5cbiAgdGhpcy5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50VHlwZSkge1xuICAgIF90aGlzLnN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgIHJldHVybiBzdWJzY3JpYmVyKGV2ZW50VHlwZSxcbiAgICAgIC8vIHNoYWxsb3cgY29weSB0byBhdm9pZCBhY2NpZGVudGFsIG11dGF0aW9uXG4gICAgICBfdGhpcy5vcGVuSW5zdGFuY2VzLnNsaWNlKCkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHRoaXMub3Blbkluc3RhbmNlcyA9IFtdO1xuICB0aGlzLnN1YnNjcmliZXJzID0gW107XG59O1xuXG52YXIgcG9ydGFsT3Blbkluc3RhbmNlcyA9IG5ldyBQb3J0YWxPcGVuSW5zdGFuY2VzKCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHBvcnRhbE9wZW5JbnN0YW5jZXM7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFIQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBM0NBO0FBQ0E7QUE2Q0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/portalOpenInstances.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/safeHTMLElement.js": -/*!******************************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/safeHTMLElement.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canUseDOM = undefined;\n\nvar _exenv = __webpack_require__(/*! exenv */ \"../node_modules/exenv/index.js\");\n\nvar _exenv2 = _interopRequireDefault(_exenv);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar EE = _exenv2[\"default\"];\nvar SafeHTMLElement = EE.canUseDOM ? window.HTMLElement : {};\nvar canUseDOM = exports.canUseDOM = EE.canUseDOM;\nexports[\"default\"] = SafeHTMLElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3NhZmVIVE1MRWxlbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2hlbHBlcnMvc2FmZUhUTUxFbGVtZW50LmpzP2IzODUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhblVzZURPTSA9IHVuZGVmaW5lZDtcblxudmFyIF9leGVudiA9IHJlcXVpcmUoXCJleGVudlwiKTtcblxudmFyIF9leGVudjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGVudik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBFRSA9IF9leGVudjIuZGVmYXVsdDtcblxudmFyIFNhZmVIVE1MRWxlbWVudCA9IEVFLmNhblVzZURPTSA/IHdpbmRvdy5IVE1MRWxlbWVudCA6IHt9O1xuXG52YXIgY2FuVXNlRE9NID0gZXhwb3J0cy5jYW5Vc2VET00gPSBFRS5jYW5Vc2VET007XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFNhZmVIVE1MRWxlbWVudDsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/safeHTMLElement.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/scopeTab.js": -/*!***********************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/scopeTab.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = scopeTab;\n\nvar _tabbable = __webpack_require__(/*! ./tabbable */ \"../node_modules/react-modal/lib/helpers/tabbable.js\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction scopeTab(node, event) {\n var tabbable = (0, _tabbable2[\"default\"])(node);\n\n if (!tabbable.length) {\n // Do nothing, since there are no elements that can receive focus.\n event.preventDefault();\n return;\n }\n\n var target = void 0;\n var shiftKey = event.shiftKey;\n var head = tabbable[0];\n var tail = tabbable[tabbable.length - 1]; // proceed with default browser behavior on tab.\n // Focus on last element on shift + tab.\n\n if (node === document.activeElement) {\n if (!shiftKey) return;\n target = tail;\n }\n\n if (tail === document.activeElement && !shiftKey) {\n target = head;\n }\n\n if (head === document.activeElement && shiftKey) {\n target = tail;\n }\n\n if (target) {\n event.preventDefault();\n target.focus();\n return;\n } // Safari radio issue.\n //\n // Safari does not move the focus to the radio button,\n // so we need to force it to really walk through all elements.\n //\n // This is very error prone, since we are trying to guess\n // if it is a safari browser from the first occurence between\n // chrome or safari.\n //\n // The chrome user agent contains the first ocurrence\n // as the 'chrome/version' and later the 'safari/version'.\n\n\n var checkSafari = /(\\bChrome\\b|\\bSafari\\b)\\//.exec(navigator.userAgent);\n var isSafariDesktop = checkSafari != null && checkSafari[1] != \"Chrome\" && /\\biPod\\b|\\biPad\\b/g.exec(navigator.userAgent) == null; // If we are not in safari desktop, let the browser control\n // the focus\n\n if (!isSafariDesktop) return;\n var x = tabbable.indexOf(document.activeElement);\n\n if (x > -1) {\n x += shiftKey ? -1 : 1;\n }\n\n target = tabbable[x]; // If the tabbable element does not exist,\n // focus head/tail based on shiftKey\n\n if (typeof target === \"undefined\") {\n event.preventDefault();\n target = shiftKey ? tail : head;\n target.focus();\n return;\n }\n\n event.preventDefault();\n target.focus();\n}\n\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3Njb3BlVGFiLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaGVscGVycy9zY29wZVRhYi5qcz9kZTAwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2NvcGVUYWI7XG5cbnZhciBfdGFiYmFibGUgPSByZXF1aXJlKFwiLi90YWJiYWJsZVwiKTtcblxudmFyIF90YWJiYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJiYWJsZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNjb3BlVGFiKG5vZGUsIGV2ZW50KSB7XG4gIHZhciB0YWJiYWJsZSA9ICgwLCBfdGFiYmFibGUyLmRlZmF1bHQpKG5vZGUpO1xuXG4gIGlmICghdGFiYmFibGUubGVuZ3RoKSB7XG4gICAgLy8gRG8gbm90aGluZywgc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRoYXQgY2FuIHJlY2VpdmUgZm9jdXMuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gdm9pZCAwO1xuXG4gIHZhciBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICB2YXIgaGVhZCA9IHRhYmJhYmxlWzBdO1xuICB2YXIgdGFpbCA9IHRhYmJhYmxlW3RhYmJhYmxlLmxlbmd0aCAtIDFdO1xuXG4gIC8vIHByb2NlZWQgd2l0aCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3Igb24gdGFiLlxuICAvLyBGb2N1cyBvbiBsYXN0IGVsZW1lbnQgb24gc2hpZnQgKyB0YWIuXG4gIGlmIChub2RlID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgaWYgKCFzaGlmdEtleSkgcmV0dXJuO1xuICAgIHRhcmdldCA9IHRhaWw7XG4gIH1cblxuICBpZiAodGFpbCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAhc2hpZnRLZXkpIHtcbiAgICB0YXJnZXQgPSBoZWFkO1xuICB9XG5cbiAgaWYgKGhlYWQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgc2hpZnRLZXkpIHtcbiAgICB0YXJnZXQgPSB0YWlsO1xuICB9XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGFyZ2V0LmZvY3VzKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2FmYXJpIHJhZGlvIGlzc3VlLlxuICAvL1xuICAvLyBTYWZhcmkgZG9lcyBub3QgbW92ZSB0aGUgZm9jdXMgdG8gdGhlIHJhZGlvIGJ1dHRvbixcbiAgLy8gc28gd2UgbmVlZCB0byBmb3JjZSBpdCB0byByZWFsbHkgd2FsayB0aHJvdWdoIGFsbCBlbGVtZW50cy5cbiAgLy9cbiAgLy8gVGhpcyBpcyB2ZXJ5IGVycm9yIHByb25lLCBzaW5jZSB3ZSBhcmUgdHJ5aW5nIHRvIGd1ZXNzXG4gIC8vIGlmIGl0IGlzIGEgc2FmYXJpIGJyb3dzZXIgZnJvbSB0aGUgZmlyc3Qgb2NjdXJlbmNlIGJldHdlZW5cbiAgLy8gY2hyb21lIG9yIHNhZmFyaS5cbiAgLy9cbiAgLy8gVGhlIGNocm9tZSB1c2VyIGFnZW50IGNvbnRhaW5zIHRoZSBmaXJzdCBvY3VycmVuY2VcbiAgLy8gYXMgdGhlICdjaHJvbWUvdmVyc2lvbicgYW5kIGxhdGVyIHRoZSAnc2FmYXJpL3ZlcnNpb24nLlxuICB2YXIgY2hlY2tTYWZhcmkgPSAvKFxcYkNocm9tZVxcYnxcXGJTYWZhcmlcXGIpXFwvLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB2YXIgaXNTYWZhcmlEZXNrdG9wID0gY2hlY2tTYWZhcmkgIT0gbnVsbCAmJiBjaGVja1NhZmFyaVsxXSAhPSBcIkNocm9tZVwiICYmIC9cXGJpUG9kXFxifFxcYmlQYWRcXGIvZy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpID09IG51bGw7XG5cbiAgLy8gSWYgd2UgYXJlIG5vdCBpbiBzYWZhcmkgZGVza3RvcCwgbGV0IHRoZSBicm93c2VyIGNvbnRyb2xcbiAgLy8gdGhlIGZvY3VzXG4gIGlmICghaXNTYWZhcmlEZXNrdG9wKSByZXR1cm47XG5cbiAgdmFyIHggPSB0YWJiYWJsZS5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gIGlmICh4ID4gLTEpIHtcbiAgICB4ICs9IHNoaWZ0S2V5ID8gLTEgOiAxO1xuICB9XG5cbiAgdGFyZ2V0ID0gdGFiYmFibGVbeF07XG5cbiAgLy8gSWYgdGhlIHRhYmJhYmxlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QsXG4gIC8vIGZvY3VzIGhlYWQvdGFpbCBiYXNlZCBvbiBzaGlmdEtleVxuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGFyZ2V0ID0gc2hpZnRLZXkgPyB0YWlsIDogaGVhZDtcbiAgICB0YXJnZXQuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHRhcmdldC5mb2N1cygpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakNBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/scopeTab.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/helpers/tabbable.js": -/*!***********************************************************!*\ - !*** ../node_modules/react-modal/lib/helpers/tabbable.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = findTabbableDescendants;\n/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nvar tabbableNode = /input|select|textarea|button|object/;\n\nfunction hidesContents(element) {\n var zeroSize = element.offsetWidth <= 0 && element.offsetHeight <= 0; // If the node is empty, this is good enough\n\n if (zeroSize && !element.innerHTML) return true; // Otherwise we need to check some styles\n\n var style = window.getComputedStyle(element);\n return zeroSize ? style.getPropertyValue(\"overflow\") !== \"visible\" || // if 'overflow: visible' set, check if there is actually any overflow\n element.scrollWidth <= 0 && element.scrollHeight <= 0 : style.getPropertyValue(\"display\") == \"none\";\n}\n\nfunction visible(element) {\n var parentElement = element;\n\n while (parentElement) {\n if (parentElement === document.body) break;\n if (hidesContents(parentElement)) return false;\n parentElement = parentElement.parentNode;\n }\n\n return true;\n}\n\nfunction focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n var res = tabbableNode.test(nodeName) && !element.disabled || (nodeName === \"a\" ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n return res && visible(element);\n}\n\nfunction tabbable(element) {\n var tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex === null) tabIndex = undefined;\n var isTabIndexNaN = isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n return [].slice.call(element.querySelectorAll(\"*\"), 0).filter(tabbable);\n}\n\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9oZWxwZXJzL3RhYmJhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1tb2RhbC9saWIvaGVscGVycy90YWJiYWJsZS5qcz81ZWI1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZmluZFRhYmJhYmxlRGVzY2VuZGFudHM7XG4vKiFcbiAqIEFkYXB0ZWQgZnJvbSBqUXVlcnkgVUkgY29yZVxuICpcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vY2F0ZWdvcnkvdWktY29yZS9cbiAqL1xuXG52YXIgdGFiYmFibGVOb2RlID0gL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0LztcblxuZnVuY3Rpb24gaGlkZXNDb250ZW50cyhlbGVtZW50KSB7XG4gIHZhciB6ZXJvU2l6ZSA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPD0gMCAmJiBlbGVtZW50Lm9mZnNldEhlaWdodCA8PSAwO1xuXG4gIC8vIElmIHRoZSBub2RlIGlzIGVtcHR5LCB0aGlzIGlzIGdvb2QgZW5vdWdoXG4gIGlmICh6ZXJvU2l6ZSAmJiAhZWxlbWVudC5pbm5lckhUTUwpIHJldHVybiB0cnVlO1xuXG4gIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHNvbWUgc3R5bGVzXG4gIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gemVyb1NpemUgPyBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3dcIikgIT09IFwidmlzaWJsZVwiIHx8XG4gIC8vIGlmICdvdmVyZmxvdzogdmlzaWJsZScgc2V0LCBjaGVjayBpZiB0aGVyZSBpcyBhY3R1YWxseSBhbnkgb3ZlcmZsb3dcbiAgZWxlbWVudC5zY3JvbGxXaWR0aCA8PSAwICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDw9IDAgOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKSA9PSBcIm5vbmVcIjtcbn1cblxuZnVuY3Rpb24gdmlzaWJsZShlbGVtZW50KSB7XG4gIHZhciBwYXJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHtcbiAgICBpZiAocGFyZW50RWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkgYnJlYWs7XG4gICAgaWYgKGhpZGVzQ29udGVudHMocGFyZW50RWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb2N1c2FibGUoZWxlbWVudCwgaXNUYWJJbmRleE5vdE5hTikge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHZhciByZXMgPSB0YWJiYWJsZU5vZGUudGVzdChub2RlTmFtZSkgJiYgIWVsZW1lbnQuZGlzYWJsZWQgfHwgKG5vZGVOYW1lID09PSBcImFcIiA/IGVsZW1lbnQuaHJlZiB8fCBpc1RhYkluZGV4Tm90TmFOIDogaXNUYWJJbmRleE5vdE5hTik7XG4gIHJldHVybiByZXMgJiYgdmlzaWJsZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gdGFiYmFibGUoZWxlbWVudCkge1xuICB2YXIgdGFiSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICBpZiAodGFiSW5kZXggPT09IG51bGwpIHRhYkluZGV4ID0gdW5kZWZpbmVkO1xuICB2YXIgaXNUYWJJbmRleE5hTiA9IGlzTmFOKHRhYkluZGV4KTtcbiAgcmV0dXJuIChpc1RhYkluZGV4TmFOIHx8IHRhYkluZGV4ID49IDApICYmIGZvY3VzYWJsZShlbGVtZW50LCAhaXNUYWJJbmRleE5hTik7XG59XG5cbmZ1bmN0aW9uIGZpbmRUYWJiYWJsZURlc2NlbmRhbnRzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSwgMCkuZmlsdGVyKHRhYmJhYmxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/helpers/tabbable.js\n"); - -/***/ }), - -/***/ "../node_modules/react-modal/lib/index.js": -/*!************************************************!*\ - !*** ../node_modules/react-modal/lib/index.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Modal = __webpack_require__(/*! ./components/Modal */ \"../node_modules/react-modal/lib/components/Modal.js\");\n\nvar _Modal2 = _interopRequireDefault(_Modal);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nexports[\"default\"] = _Modal2[\"default\"];\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vZGFsL2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtbW9kYWwvbGliL2luZGV4LmpzP2Y0ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfTW9kYWwgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL01vZGFsXCIpO1xuXG52YXIgX01vZGFsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX01vZGFsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX01vZGFsMi5kZWZhdWx0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-modal/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-paginate/dist/BreakView.js": -/*!********************************************************!*\ - !*** ../node_modules/react-paginate/dist/BreakView.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar BreakView = function BreakView(props) {\n var label = props.breakLabel;\n var className = props.breakClassName || 'break';\n return _react2[\"default\"].createElement('li', {\n className: className\n }, label);\n};\n\nexports[\"default\"] = BreakView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBhZ2luYXRlL2Rpc3QvQnJlYWtWaWV3LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3JlYWN0X2NvbXBvbmVudHMvQnJlYWtWaWV3LmpzP2I5ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBCcmVha1ZpZXcgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgbGFiZWwgPSBwcm9wcy5icmVha0xhYmVsO1xuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5icmVha0NsYXNzTmFtZSB8fCAnYnJlYWsnO1xuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIHtsYWJlbH1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCcmVha1ZpZXc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7O0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQVVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-paginate/dist/BreakView.js\n"); - -/***/ }), - -/***/ "../node_modules/react-paginate/dist/PageView.js": -/*!*******************************************************!*\ - !*** ../node_modules/react-paginate/dist/PageView.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar PageView = function PageView(props) {\n var pageClassName = props.pageClassName;\n var pageLinkClassName = props.pageLinkClassName;\n var onClick = props.onClick;\n var href = props.href;\n var ariaLabel = 'Page ' + props.page + (props.extraAriaContext ? ' ' + props.extraAriaContext : '');\n var ariaCurrent = null;\n\n if (props.selected) {\n ariaCurrent = 'page';\n ariaLabel = 'Page ' + props.page + ' is your current page';\n\n if (typeof pageClassName !== 'undefined') {\n pageClassName = pageClassName + ' ' + props.activeClassName;\n } else {\n pageClassName = props.activeClassName;\n }\n\n if (typeof pageLinkClassName !== 'undefined') {\n pageLinkClassName = pageLinkClassName;\n\n if (typeof props.activeLinkClassName !== 'undefined') {\n pageLinkClassName = pageLinkClassName + ' ' + props.activeLinkClassName;\n }\n } else {\n pageLinkClassName = props.activeLinkClassName;\n }\n }\n\n return _react2[\"default\"].createElement('li', {\n className: pageClassName\n }, _react2[\"default\"].createElement('a', {\n onClick: onClick,\n role: 'button',\n className: pageLinkClassName,\n href: href,\n tabIndex: '0',\n 'aria-label': ariaLabel,\n 'aria-current': ariaCurrent,\n onKeyPress: onClick\n }, props.page));\n};\n\nexports[\"default\"] = PageView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBhZ2luYXRlL2Rpc3QvUGFnZVZpZXcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vcmVhY3RfY29tcG9uZW50cy9QYWdlVmlldy5qcz80ZjZhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUGFnZVZpZXcgPSAocHJvcHMpID0+IHtcbiAgbGV0IHBhZ2VDbGFzc05hbWUgPSBwcm9wcy5wYWdlQ2xhc3NOYW1lO1xuICBsZXQgcGFnZUxpbmtDbGFzc05hbWUgPSBwcm9wcy5wYWdlTGlua0NsYXNzTmFtZTtcblxuICBjb25zdCBvbkNsaWNrID0gcHJvcHMub25DbGljaztcbiAgY29uc3QgaHJlZiA9IHByb3BzLmhyZWY7XG5cbiAgbGV0IGFyaWFMYWJlbCA9ICdQYWdlICcgKyBwcm9wcy5wYWdlICtcbiAgICAocHJvcHMuZXh0cmFBcmlhQ29udGV4dCA/ICcgJyArIHByb3BzLmV4dHJhQXJpYUNvbnRleHQgOiAnJyk7XG4gIGxldCBhcmlhQ3VycmVudCA9IG51bGw7XG5cbiAgaWYgKHByb3BzLnNlbGVjdGVkKSB7XG4gICAgYXJpYUN1cnJlbnQgPSAncGFnZSc7XG4gICAgYXJpYUxhYmVsID0gJ1BhZ2UgJyArIHByb3BzLnBhZ2UgKyAnIGlzIHlvdXIgY3VycmVudCBwYWdlJztcblxuICAgIGlmICh0eXBlb2YocGFnZUNsYXNzTmFtZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYWdlQ2xhc3NOYW1lID0gcGFnZUNsYXNzTmFtZSArICcgJyArIHByb3BzLmFjdGl2ZUNsYXNzTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZUNsYXNzTmFtZSA9IHByb3BzLmFjdGl2ZUNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mKHBhZ2VMaW5rQ2xhc3NOYW1lKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhZ2VMaW5rQ2xhc3NOYW1lID0gcGFnZUxpbmtDbGFzc05hbWU7XG5cbiAgICAgIGlmICh0eXBlb2YocHJvcHMuYWN0aXZlTGlua0NsYXNzTmFtZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhZ2VMaW5rQ2xhc3NOYW1lID0gcGFnZUxpbmtDbGFzc05hbWUgKyAnICcgKyBwcm9wcy5hY3RpdmVMaW5rQ2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYWdlTGlua0NsYXNzTmFtZSA9IHByb3BzLmFjdGl2ZUxpbmtDbGFzc05hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDxsaSBjbGFzc05hbWU9e3BhZ2VDbGFzc05hbWV9PlxuICAgICAgICAgIDxhIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgY2xhc3NOYW1lPXtwYWdlTGlua0NsYXNzTmFtZX1cbiAgICAgICAgICAgICBocmVmPXtocmVmfVxuICAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgIGFyaWEtY3VycmVudD17YXJpYUN1cnJlbnR9XG4gICAgICAgICAgICAgb25LZXlQcmVzcz17b25DbGlja30+XG4gICAgICAgICAgICB7cHJvcHMucGFnZX1cbiAgICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VWaWV3O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7OztBQUNBO0FBQ0E7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFsQ0E7QUFDQTtBQStDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-paginate/dist/PageView.js\n"); - -/***/ }), - -/***/ "../node_modules/react-paginate/dist/PaginationBoxView.js": -/*!****************************************************************!*\ - !*** ../node_modules/react-paginate/dist/PaginationBoxView.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _PageView = __webpack_require__(/*! ./PageView */ \"../node_modules/react-paginate/dist/PageView.js\");\n\nvar _PageView2 = _interopRequireDefault(_PageView);\n\nvar _BreakView = __webpack_require__(/*! ./BreakView */ \"../node_modules/react-paginate/dist/BreakView.js\");\n\nvar _BreakView2 = _interopRequireDefault(_BreakView);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar PaginationBoxView = function (_Component) {\n _inherits(PaginationBoxView, _Component);\n\n function PaginationBoxView(props) {\n _classCallCheck(this, PaginationBoxView);\n\n var _this = _possibleConstructorReturn(this, (PaginationBoxView.__proto__ || Object.getPrototypeOf(PaginationBoxView)).call(this, props));\n\n _this.handlePreviousPage = function (evt) {\n var selected = _this.state.selected;\n evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\n\n if (selected > 0) {\n _this.handlePageSelected(selected - 1, evt);\n }\n };\n\n _this.handleNextPage = function (evt) {\n var selected = _this.state.selected;\n var pageCount = _this.props.pageCount;\n evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\n\n if (selected < pageCount - 1) {\n _this.handlePageSelected(selected + 1, evt);\n }\n };\n\n _this.handlePageSelected = function (selected, evt) {\n evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;\n if (_this.state.selected === selected) return;\n\n _this.setState({\n selected: selected\n }); // Call the callback with the new selected item:\n\n\n _this.callCallback(selected);\n };\n\n _this.callCallback = function (selectedItem) {\n if (typeof _this.props.onPageChange !== \"undefined\" && typeof _this.props.onPageChange === \"function\") {\n _this.props.onPageChange({\n selected: selectedItem\n });\n }\n };\n\n _this.pagination = function () {\n var items = [];\n var _this$props = _this.props,\n pageRangeDisplayed = _this$props.pageRangeDisplayed,\n pageCount = _this$props.pageCount,\n marginPagesDisplayed = _this$props.marginPagesDisplayed,\n breakLabel = _this$props.breakLabel,\n breakClassName = _this$props.breakClassName;\n var selected = _this.state.selected;\n\n if (pageCount <= pageRangeDisplayed) {\n for (var index = 0; index < pageCount; index++) {\n items.push(_this.getPageElement(index));\n }\n } else {\n var leftSide = pageRangeDisplayed / 2;\n var rightSide = pageRangeDisplayed - leftSide; // If the selected page index is on the default right side of the pagination,\n // we consider that the new right side is made up of it (= only one break element).\n // If the selected page index is on the default left side of the pagination,\n // we consider that the new left side is made up of it (= only one break element).\n\n if (selected > pageCount - pageRangeDisplayed / 2) {\n rightSide = pageCount - selected;\n leftSide = pageRangeDisplayed - rightSide;\n } else if (selected < pageRangeDisplayed / 2) {\n leftSide = selected;\n rightSide = pageRangeDisplayed - leftSide;\n }\n\n var _index = void 0;\n\n var page = void 0;\n var breakView = void 0;\n\n var createPageView = function createPageView(index) {\n return _this.getPageElement(index);\n };\n\n for (_index = 0; _index < pageCount; _index++) {\n page = _index + 1; // If the page index is lower than the margin defined,\n // the page has to be displayed on the left side of\n // the pagination.\n\n if (page <= marginPagesDisplayed) {\n items.push(createPageView(_index));\n continue;\n } // If the page index is greater than the page count\n // minus the margin defined, the page has to be\n // displayed on the right side of the pagination.\n\n\n if (page > pageCount - marginPagesDisplayed) {\n items.push(createPageView(_index));\n continue;\n } // If the page index is near the selected page index\n // and inside the defined range (pageRangeDisplayed)\n // we have to display it (it will create the center\n // part of the pagination).\n\n\n if (_index >= selected - leftSide && _index <= selected + rightSide) {\n items.push(createPageView(_index));\n continue;\n } // If the page index doesn't meet any of the conditions above,\n // we check if the last item of the current \"items\" array\n // is a break element. If not, we add a break element, else,\n // we do nothing (because we don't want to display the page).\n\n\n if (breakLabel && items[items.length - 1] !== breakView) {\n breakView = _react2[\"default\"].createElement(_BreakView2[\"default\"], {\n key: _index,\n breakLabel: breakLabel,\n breakClassName: breakClassName\n });\n items.push(breakView);\n }\n }\n }\n\n return items;\n };\n\n _this.state = {\n selected: props.initialPage ? props.initialPage : props.forcePage ? props.forcePage : 0\n };\n return _this;\n }\n\n _createClass(PaginationBoxView, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n initialPage = _props.initialPage,\n disableInitialCallback = _props.disableInitialCallback; // Call the callback with the initialPage item:\n\n if (typeof initialPage !== 'undefined' && !disableInitialCallback) {\n this.callCallback(initialPage);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (typeof nextProps.forcePage !== 'undefined' && this.props.forcePage !== nextProps.forcePage) {\n this.setState({\n selected: nextProps.forcePage\n });\n }\n }\n }, {\n key: 'hrefBuilder',\n value: function hrefBuilder(pageIndex) {\n var _props2 = this.props,\n hrefBuilder = _props2.hrefBuilder,\n pageCount = _props2.pageCount;\n\n if (hrefBuilder && pageIndex !== this.state.selected && pageIndex >= 0 && pageIndex < pageCount) {\n return hrefBuilder(pageIndex + 1);\n }\n }\n }, {\n key: 'getPageElement',\n value: function getPageElement(index) {\n var selected = this.state.selected;\n var _props3 = this.props,\n pageClassName = _props3.pageClassName,\n pageLinkClassName = _props3.pageLinkClassName,\n activeClassName = _props3.activeClassName,\n activeLinkClassName = _props3.activeLinkClassName,\n extraAriaContext = _props3.extraAriaContext;\n return _react2[\"default\"].createElement(_PageView2[\"default\"], {\n key: index,\n onClick: this.handlePageSelected.bind(null, index),\n selected: selected === index,\n pageClassName: pageClassName,\n pageLinkClassName: pageLinkClassName,\n activeClassName: activeClassName,\n activeLinkClassName: activeLinkClassName,\n extraAriaContext: extraAriaContext,\n href: this.hrefBuilder(index),\n page: index + 1\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props4 = this.props,\n disabledClassName = _props4.disabledClassName,\n previousClassName = _props4.previousClassName,\n nextClassName = _props4.nextClassName,\n pageCount = _props4.pageCount,\n containerClassName = _props4.containerClassName,\n previousLinkClassName = _props4.previousLinkClassName,\n previousLabel = _props4.previousLabel,\n nextLinkClassName = _props4.nextLinkClassName,\n nextLabel = _props4.nextLabel;\n var selected = this.state.selected;\n var previousClasses = previousClassName + (selected === 0 ? ' ' + disabledClassName : '');\n var nextClasses = nextClassName + (selected === pageCount - 1 ? ' ' + disabledClassName : '');\n return _react2[\"default\"].createElement('ul', {\n className: containerClassName\n }, _react2[\"default\"].createElement('li', {\n className: previousClasses\n }, _react2[\"default\"].createElement('a', {\n onClick: this.handlePreviousPage,\n className: previousLinkClassName,\n href: this.hrefBuilder(selected - 1),\n tabIndex: '0',\n role: 'button',\n onKeyPress: this.handlePreviousPage\n }, previousLabel)), this.pagination(), _react2[\"default\"].createElement('li', {\n className: nextClasses\n }, _react2[\"default\"].createElement('a', {\n onClick: this.handleNextPage,\n className: nextLinkClassName,\n href: this.hrefBuilder(selected + 1),\n tabIndex: '0',\n role: 'button',\n onKeyPress: this.handleNextPage\n }, nextLabel)));\n }\n }]);\n\n return PaginationBoxView;\n}(_react.Component);\n\nPaginationBoxView.propTypes = {\n pageCount: _propTypes2[\"default\"].number.isRequired,\n pageRangeDisplayed: _propTypes2[\"default\"].number.isRequired,\n marginPagesDisplayed: _propTypes2[\"default\"].number.isRequired,\n previousLabel: _propTypes2[\"default\"].node,\n nextLabel: _propTypes2[\"default\"].node,\n breakLabel: _propTypes2[\"default\"].node,\n hrefBuilder: _propTypes2[\"default\"].func,\n onPageChange: _propTypes2[\"default\"].func,\n initialPage: _propTypes2[\"default\"].number,\n forcePage: _propTypes2[\"default\"].number,\n disableInitialCallback: _propTypes2[\"default\"].bool,\n containerClassName: _propTypes2[\"default\"].string,\n pageClassName: _propTypes2[\"default\"].string,\n pageLinkClassName: _propTypes2[\"default\"].string,\n activeClassName: _propTypes2[\"default\"].string,\n activeLinkClassName: _propTypes2[\"default\"].string,\n previousClassName: _propTypes2[\"default\"].string,\n nextClassName: _propTypes2[\"default\"].string,\n previousLinkClassName: _propTypes2[\"default\"].string,\n nextLinkClassName: _propTypes2[\"default\"].string,\n disabledClassName: _propTypes2[\"default\"].string,\n breakClassName: _propTypes2[\"default\"].string\n};\nPaginationBoxView.defaultProps = {\n pageCount: 10,\n pageRangeDisplayed: 2,\n marginPagesDisplayed: 3,\n activeClassName: \"selected\",\n previousClassName: \"previous\",\n nextClassName: \"next\",\n previousLabel: \"Previous\",\n nextLabel: \"Next\",\n breakLabel: \"...\",\n disabledClassName: \"disabled\",\n disableInitialCallback: false\n};\nexports[\"default\"] = PaginationBoxView;\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBhZ2luYXRlL2Rpc3QvUGFnaW5hdGlvbkJveFZpZXcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vcmVhY3RfY29tcG9uZW50cy9QYWdpbmF0aW9uQm94Vmlldy5qcz8wOTNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUGFnZVZpZXcgZnJvbSAnLi9QYWdlVmlldyc7XG5pbXBvcnQgQnJlYWtWaWV3IGZyb20gJy4vQnJlYWtWaWV3JztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0aW9uQm94VmlldyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgcGFnZUNvdW50ICAgICAgICAgICAgIDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHBhZ2VSYW5nZURpc3BsYXllZCAgICA6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBtYXJnaW5QYWdlc0Rpc3BsYXllZCAgOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgcHJldmlvdXNMYWJlbCAgICAgICAgIDogUHJvcFR5cGVzLm5vZGUsXG4gICAgbmV4dExhYmVsICAgICAgICAgICAgIDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYnJlYWtMYWJlbCAgICAgICAgICAgIDogUHJvcFR5cGVzLm5vZGUsXG4gICAgaHJlZkJ1aWxkZXIgICAgICAgICAgIDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25QYWdlQ2hhbmdlICAgICAgICAgIDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5pdGlhbFBhZ2UgICAgICAgICAgIDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBmb3JjZVBhZ2UgICAgICAgICAgICAgOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGRpc2FibGVJbml0aWFsQ2FsbGJhY2s6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbnRhaW5lckNsYXNzTmFtZSAgICA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcGFnZUNsYXNzTmFtZSAgICAgICAgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYWdlTGlua0NsYXNzTmFtZSAgICAgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFjdGl2ZUNsYXNzTmFtZSAgICAgICA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWN0aXZlTGlua0NsYXNzTmFtZSAgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwcmV2aW91c0NsYXNzTmFtZSAgICAgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5leHRDbGFzc05hbWUgICAgICAgICA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcHJldmlvdXNMaW5rQ2xhc3NOYW1lIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBuZXh0TGlua0NsYXNzTmFtZSAgICAgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkQ2xhc3NOYW1lICAgICA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYnJlYWtDbGFzc05hbWUgICAgICAgIDogUHJvcFR5cGVzLnN0cmluZ1xuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcGFnZUNvdW50ICAgICAgICAgICAgIDogMTAsXG4gICAgcGFnZVJhbmdlRGlzcGxheWVkICAgIDogMixcbiAgICBtYXJnaW5QYWdlc0Rpc3BsYXllZCAgOiAzLFxuICAgIGFjdGl2ZUNsYXNzTmFtZSAgICAgICA6IFwic2VsZWN0ZWRcIixcbiAgICBwcmV2aW91c0NsYXNzTmFtZSAgICAgOiBcInByZXZpb3VzXCIsXG4gICAgbmV4dENsYXNzTmFtZSAgICAgICAgIDogXCJuZXh0XCIsXG4gICAgcHJldmlvdXNMYWJlbCAgICAgICAgIDogXCJQcmV2aW91c1wiLFxuICAgIG5leHRMYWJlbCAgICAgICAgICAgICA6IFwiTmV4dFwiLFxuICAgIGJyZWFrTGFiZWwgICAgICAgICAgICA6IFwiLi4uXCIsXG4gICAgZGlzYWJsZWRDbGFzc05hbWUgICAgIDogXCJkaXNhYmxlZFwiLFxuICAgIGRpc2FibGVJbml0aWFsQ2FsbGJhY2s6IGZhbHNlXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2VsZWN0ZWQ6IHByb3BzLmluaXRpYWxQYWdlID8gcHJvcHMuaW5pdGlhbFBhZ2UgOlxuICAgICAgICAgICAgICAgIHByb3BzLmZvcmNlUGFnZSAgID8gcHJvcHMuZm9yY2VQYWdlIDpcbiAgICAgICAgICAgICAgICAwXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgaW5pdGlhbFBhZ2UsIGRpc2FibGVJbml0aWFsQ2FsbGJhY2sgfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgaW5pdGlhbFBhZ2UgaXRlbTpcbiAgICBpZiAodHlwZW9mKGluaXRpYWxQYWdlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWRpc2FibGVJbml0aWFsQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbENhbGxiYWNrKGluaXRpYWxQYWdlKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGlmICh0eXBlb2YobmV4dFByb3BzLmZvcmNlUGFnZSkgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJvcHMuZm9yY2VQYWdlICE9PSBuZXh0UHJvcHMuZm9yY2VQYWdlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzZWxlY3RlZDogbmV4dFByb3BzLmZvcmNlUGFnZX0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVByZXZpb3VzUGFnZSA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBzZWxlY3RlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBldnQucHJldmVudERlZmF1bHQgPyBldnQucHJldmVudERlZmF1bHQoKSA6IChldnQucmV0dXJuVmFsdWUgPSBmYWxzZSk7XG4gICAgaWYgKHNlbGVjdGVkID4gMCkge1xuICAgICAgdGhpcy5oYW5kbGVQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQgLSAxLCBldnQpO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVOZXh0UGFnZSA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBzZWxlY3RlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHBhZ2VDb3VudCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCA/IGV2dC5wcmV2ZW50RGVmYXVsdCgpIDogKGV2dC5yZXR1cm5WYWx1ZSA9IGZhbHNlKTtcbiAgICBpZiAoc2VsZWN0ZWQgPCBwYWdlQ291bnQgLSAxKSB7XG4gICAgICB0aGlzLmhhbmRsZVBhZ2VTZWxlY3RlZChzZWxlY3RlZCArIDEsIGV2dCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZVBhZ2VTZWxlY3RlZCA9IChzZWxlY3RlZCwgZXZ0KSA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0ID8gZXZ0LnByZXZlbnREZWZhdWx0KCkgOiAoZXZ0LnJldHVyblZhbHVlID0gZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0ZWQgPT09IHNlbGVjdGVkKSByZXR1cm47XG5cbiAgICB0aGlzLnNldFN0YXRlKHtzZWxlY3RlZDogc2VsZWN0ZWR9KTtcblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBzZWxlY3RlZCBpdGVtOlxuICAgIHRoaXMuY2FsbENhbGxiYWNrKHNlbGVjdGVkKTtcbiAgfTtcblxuICBocmVmQnVpbGRlcihwYWdlSW5kZXgpIHtcbiAgICBjb25zdCB7IGhyZWZCdWlsZGVyLCBwYWdlQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGhyZWZCdWlsZGVyICYmXG4gICAgICBwYWdlSW5kZXggIT09IHRoaXMuc3RhdGUuc2VsZWN0ZWQgJiZcbiAgICAgIHBhZ2VJbmRleCA+PSAwICYmXG4gICAgICBwYWdlSW5kZXggPCBwYWdlQ291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiBocmVmQnVpbGRlcihwYWdlSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBjYWxsQ2FsbGJhY2sgPSAoc2VsZWN0ZWRJdGVtKSA9PiB7XG4gICAgaWYgKHR5cGVvZih0aGlzLnByb3BzLm9uUGFnZUNoYW5nZSkgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mKHRoaXMucHJvcHMub25QYWdlQ2hhbmdlKSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnByb3BzLm9uUGFnZUNoYW5nZSh7c2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbX0pO1xuICAgIH1cbiAgfTtcblxuICBnZXRQYWdlRWxlbWVudChpbmRleCkge1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgcGFnZUNsYXNzTmFtZSxcbiAgICAgIHBhZ2VMaW5rQ2xhc3NOYW1lLFxuICAgICAgYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgYWN0aXZlTGlua0NsYXNzTmFtZSxcbiAgICAgIGV4dHJhQXJpYUNvbnRleHRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiA8UGFnZVZpZXdcbiAgICAgIGtleT17aW5kZXh9XG4gICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVBhZ2VTZWxlY3RlZC5iaW5kKG51bGwsIGluZGV4KX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZCA9PT0gaW5kZXh9XG4gICAgICBwYWdlQ2xhc3NOYW1lPXtwYWdlQ2xhc3NOYW1lfVxuICAgICAgcGFnZUxpbmtDbGFzc05hbWU9e3BhZ2VMaW5rQ2xhc3NOYW1lfVxuICAgICAgYWN0aXZlQ2xhc3NOYW1lPXthY3RpdmVDbGFzc05hbWV9XG4gICAgICBhY3RpdmVMaW5rQ2xhc3NOYW1lPXthY3RpdmVMaW5rQ2xhc3NOYW1lfVxuICAgICAgZXh0cmFBcmlhQ29udGV4dD17ZXh0cmFBcmlhQ29udGV4dH1cbiAgICAgIGhyZWY9e3RoaXMuaHJlZkJ1aWxkZXIoaW5kZXgpfVxuICAgICAgcGFnZT17aW5kZXggKyAxfSAvPlxuICB9XG5cbiAgcGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhZ2VSYW5nZURpc3BsYXllZCxcbiAgICAgIHBhZ2VDb3VudCxcbiAgICAgIG1hcmdpblBhZ2VzRGlzcGxheWVkLFxuICAgICAgYnJlYWtMYWJlbCxcbiAgICAgIGJyZWFrQ2xhc3NOYW1lXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHNlbGVjdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKHBhZ2VDb3VudCA8PSBwYWdlUmFuZ2VEaXNwbGF5ZWQpIHtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VDb3VudDsgaW5kZXgrKykge1xuICAgICAgICBpdGVtcy5wdXNoKHRoaXMuZ2V0UGFnZUVsZW1lbnQoaW5kZXgpKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGxldCBsZWZ0U2lkZSAgPSAocGFnZVJhbmdlRGlzcGxheWVkIC8gMik7XG4gICAgICBsZXQgcmlnaHRTaWRlID0gKHBhZ2VSYW5nZURpc3BsYXllZCAtIGxlZnRTaWRlKTtcblxuICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIHBhZ2UgaW5kZXggaXMgb24gdGhlIGRlZmF1bHQgcmlnaHQgc2lkZSBvZiB0aGUgcGFnaW5hdGlvbixcbiAgICAgIC8vIHdlIGNvbnNpZGVyIHRoYXQgdGhlIG5ldyByaWdodCBzaWRlIGlzIG1hZGUgdXAgb2YgaXQgKD0gb25seSBvbmUgYnJlYWsgZWxlbWVudCkuXG4gICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgcGFnZSBpbmRleCBpcyBvbiB0aGUgZGVmYXVsdCBsZWZ0IHNpZGUgb2YgdGhlIHBhZ2luYXRpb24sXG4gICAgICAvLyB3ZSBjb25zaWRlciB0aGF0IHRoZSBuZXcgbGVmdCBzaWRlIGlzIG1hZGUgdXAgb2YgaXQgKD0gb25seSBvbmUgYnJlYWsgZWxlbWVudCkuXG4gICAgICBpZiAoc2VsZWN0ZWQgPiBwYWdlQ291bnQgLSBwYWdlUmFuZ2VEaXNwbGF5ZWQgLyAyKSB7XG4gICAgICAgIHJpZ2h0U2lkZSA9IHBhZ2VDb3VudCAtIHNlbGVjdGVkO1xuICAgICAgICBsZWZ0U2lkZSAgPSBwYWdlUmFuZ2VEaXNwbGF5ZWQgLSByaWdodFNpZGU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzZWxlY3RlZCA8IHBhZ2VSYW5nZURpc3BsYXllZCAvIDIpIHtcbiAgICAgICAgbGVmdFNpZGUgID0gc2VsZWN0ZWQ7XG4gICAgICAgIHJpZ2h0U2lkZSA9IHBhZ2VSYW5nZURpc3BsYXllZCAtIGxlZnRTaWRlO1xuICAgICAgfVxuXG4gICAgICBsZXQgaW5kZXg7XG4gICAgICBsZXQgcGFnZTtcbiAgICAgIGxldCBicmVha1ZpZXc7XG4gICAgICBsZXQgY3JlYXRlUGFnZVZpZXcgPSAoaW5kZXgpID0+IHRoaXMuZ2V0UGFnZUVsZW1lbnQoaW5kZXgpO1xuXG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYWdlQ291bnQ7IGluZGV4KyspIHtcblxuICAgICAgICBwYWdlID0gaW5kZXggKyAxO1xuXG4gICAgICAgIC8vIElmIHRoZSBwYWdlIGluZGV4IGlzIGxvd2VyIHRoYW4gdGhlIG1hcmdpbiBkZWZpbmVkLFxuICAgICAgICAvLyB0aGUgcGFnZSBoYXMgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBsZWZ0IHNpZGUgb2ZcbiAgICAgICAgLy8gdGhlIHBhZ2luYXRpb24uXG4gICAgICAgIGlmIChwYWdlIDw9IG1hcmdpblBhZ2VzRGlzcGxheWVkKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVQYWdlVmlldyhpbmRleCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBhZ2UgaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBwYWdlIGNvdW50XG4gICAgICAgIC8vIG1pbnVzIHRoZSBtYXJnaW4gZGVmaW5lZCwgdGhlIHBhZ2UgaGFzIHRvIGJlXG4gICAgICAgIC8vIGRpc3BsYXllZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAgaWYgKHBhZ2UgPiBwYWdlQ291bnQgLSBtYXJnaW5QYWdlc0Rpc3BsYXllZCkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlUGFnZVZpZXcoaW5kZXgpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBwYWdlIGluZGV4IGlzIG5lYXIgdGhlIHNlbGVjdGVkIHBhZ2UgaW5kZXhcbiAgICAgICAgLy8gYW5kIGluc2lkZSB0aGUgZGVmaW5lZCByYW5nZSAocGFnZVJhbmdlRGlzcGxheWVkKVxuICAgICAgICAvLyB3ZSBoYXZlIHRvIGRpc3BsYXkgaXQgKGl0IHdpbGwgY3JlYXRlIHRoZSBjZW50ZXJcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgcGFnaW5hdGlvbikuXG4gICAgICAgIGlmICgoaW5kZXggPj0gc2VsZWN0ZWQgLSBsZWZ0U2lkZSkgJiYgKGluZGV4IDw9IHNlbGVjdGVkICsgcmlnaHRTaWRlKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlUGFnZVZpZXcoaW5kZXgpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBwYWdlIGluZGV4IGRvZXNuJ3QgbWVldCBhbnkgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUsXG4gICAgICAgIC8vIHdlIGNoZWNrIGlmIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIGN1cnJlbnQgXCJpdGVtc1wiIGFycmF5XG4gICAgICAgIC8vIGlzIGEgYnJlYWsgZWxlbWVudC4gSWYgbm90LCB3ZSBhZGQgYSBicmVhayBlbGVtZW50LCBlbHNlLFxuICAgICAgICAvLyB3ZSBkbyBub3RoaW5nIChiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcGFnZSkuXG4gICAgICAgIGlmIChicmVha0xhYmVsICYmIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdICE9PSBicmVha1ZpZXcpIHtcbiAgICAgICAgICBicmVha1ZpZXcgPSAoXG4gICAgICAgICAgICA8QnJlYWtWaWV3XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGJyZWFrTGFiZWw9e2JyZWFrTGFiZWx9XG4gICAgICAgICAgICAgIGJyZWFrQ2xhc3NOYW1lPXticmVha0NsYXNzTmFtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtcy5wdXNoKGJyZWFrVmlldyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpc2FibGVkQ2xhc3NOYW1lLFxuICAgICAgcHJldmlvdXNDbGFzc05hbWUsXG4gICAgICBuZXh0Q2xhc3NOYW1lLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgY29udGFpbmVyQ2xhc3NOYW1lLFxuICAgICAgcHJldmlvdXNMaW5rQ2xhc3NOYW1lLFxuICAgICAgcHJldmlvdXNMYWJlbCxcbiAgICAgIG5leHRMaW5rQ2xhc3NOYW1lLFxuICAgICAgbmV4dExhYmVsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHNlbGVjdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgcHJldmlvdXNDbGFzc2VzID0gcHJldmlvdXNDbGFzc05hbWUgKyAoc2VsZWN0ZWQgPT09IDAgPyBgICR7ZGlzYWJsZWRDbGFzc05hbWV9YCA6ICcnKTtcbiAgICBjb25zdCBuZXh0Q2xhc3NlcyA9IG5leHRDbGFzc05hbWUgKyAoc2VsZWN0ZWQgPT09IHBhZ2VDb3VudCAtIDEgPyBgICR7ZGlzYWJsZWRDbGFzc05hbWV9YCA6ICcnKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dWwgY2xhc3NOYW1lPXtjb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICA8bGkgY2xhc3NOYW1lPXtwcmV2aW91c0NsYXNzZXN9PlxuICAgICAgICAgIDxhIG9uQ2xpY2s9e3RoaXMuaGFuZGxlUHJldmlvdXNQYWdlfVxuICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJldmlvdXNMaW5rQ2xhc3NOYW1lfVxuICAgICAgICAgICAgIGhyZWY9e3RoaXMuaHJlZkJ1aWxkZXIoc2VsZWN0ZWQgLSAxKX1cbiAgICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgIG9uS2V5UHJlc3M9e3RoaXMuaGFuZGxlUHJldmlvdXNQYWdlfT5cbiAgICAgICAgICAgIHtwcmV2aW91c0xhYmVsfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cblxuICAgICAgICB7dGhpcy5wYWdpbmF0aW9uKCl9XG5cbiAgICAgICAgPGxpIGNsYXNzTmFtZT17bmV4dENsYXNzZXN9PlxuICAgICAgICAgIDxhIG9uQ2xpY2s9e3RoaXMuaGFuZGxlTmV4dFBhZ2V9XG4gICAgICAgICAgICAgY2xhc3NOYW1lPXtuZXh0TGlua0NsYXNzTmFtZX1cbiAgICAgICAgICAgICBocmVmPXt0aGlzLmhyZWZCdWlsZGVyKHNlbGVjdGVkICsgMSl9XG4gICAgICAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICBvbktleVByZXNzPXt0aGlzLmhhbmRsZU5leHRQYWdlfT5cbiAgICAgICAgICAgIHtuZXh0TGFiZWx9XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICApO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7O0FBd0NBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQXdCQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUE3QkE7QUFDQTtBQURBO0FBZ0NBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBdkNBO0FBQ0E7QUFEQTtBQTJDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFsREE7QUFDQTtBQURBO0FBaUVBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFwRUE7QUFDQTtBQURBO0FBK0ZBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVRBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFqQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQTFCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckxBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBQ0E7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7OztBQStCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7OztBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFXQTs7O0FBNEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFZQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFXQTs7OztBQTdRQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQURBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQTFCQTtBQThRQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-paginate/dist/PaginationBoxView.js\n"); - -/***/ }), - -/***/ "../node_modules/react-paginate/dist/index.js": -/*!****************************************************!*\ - !*** ../node_modules/react-paginate/dist/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _PaginationBoxView = __webpack_require__(/*! ./PaginationBoxView */ \"../node_modules/react-paginate/dist/PaginationBoxView.js\");\n\nvar _PaginationBoxView2 = _interopRequireDefault(_PaginationBoxView);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nexports[\"default\"] = _PaginationBoxView2[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBhZ2luYXRlL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vcmVhY3RfY29tcG9uZW50cy9pbmRleC5qcz84MzgwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYWdpbmF0aW9uQm94VmlldyBmcm9tICcuL1BhZ2luYXRpb25Cb3hWaWV3JztcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvbkJveFZpZXc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7Ozs7Ozs7OztBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-paginate/dist/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/components/Context.js": -/*!************************************************************!*\ - !*** ../node_modules/react-redux/es/components/Context.js ***! - \************************************************************/ -/*! exports provided: ReactReduxContext, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactReduxContext\", function() { return ReactReduxContext; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar ReactReduxContext = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ReactReduxContext);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9Db250ZXh0LmpzP2Y5NTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgUmVhY3RSZWR1eENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZWR1eENvbnRleHQ7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/components/Context.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/components/Provider.js": -/*!*************************************************************!*\ - !*** ../node_modules/react-redux/es/components/Provider.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Context */ \"../node_modules/react-redux/es/components/Context.js\");\n\n\n\n\n\nvar Provider = /*#__PURE__*/function (_Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Provider, _Component);\n\n function Provider(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n var store = props.store;\n _this.state = {\n storeState: store.getState(),\n store: store\n };\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this._isMounted = true;\n this.subscribe();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.unsubscribe) this.unsubscribe();\n this._isMounted = false;\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.props.store !== prevProps.store) {\n if (this.unsubscribe) this.unsubscribe();\n this.subscribe();\n }\n };\n\n _proto.subscribe = function subscribe() {\n var _this2 = this;\n\n var store = this.props.store;\n this.unsubscribe = store.subscribe(function () {\n var newStoreState = store.getState();\n\n if (!_this2._isMounted) {\n return;\n }\n\n _this2.setState(function (providerState) {\n // If the value is the same, skip the unnecessary state update.\n if (providerState.storeState === newStoreState) {\n return null;\n }\n\n return {\n storeState: newStoreState\n };\n });\n }); // Actions might have been dispatched between render and mount - handle those\n\n var postMountStoreState = store.getState();\n\n if (postMountStoreState !== this.state.storeState) {\n this.setState({\n storeState: postMountStoreState\n });\n }\n };\n\n _proto.render = function render() {\n var Context = this.props.context || _Context__WEBPACK_IMPORTED_MODULE_3__[\"ReactReduxContext\"];\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Context.Provider, {\n value: this.state\n }, this.props.children);\n };\n\n return Provider;\n}(react__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]);\n\nProvider.propTypes = {\n store: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({\n subscribe: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n dispatch: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,\n getState: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired\n }),\n context: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.any\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Provider);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanM/MjczZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL0NvbnRleHQnO1xuXG52YXIgUHJvdmlkZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgdmFyIHN0b3JlID0gcHJvcHMuc3RvcmU7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdG9yZVN0YXRlOiBzdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgc3RvcmU6IHN0b3JlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUHJvdmlkZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpYmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZSkgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RvcmUgIT09IHByZXZQcm9wcy5zdG9yZSkge1xuICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmUpIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgc3RvcmUgPSB0aGlzLnByb3BzLnN0b3JlO1xuICAgIHRoaXMudW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5ld1N0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gICAgICBpZiAoIV90aGlzMi5faXNNb3VudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uIChwcm92aWRlclN0YXRlKSB7XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgc2tpcCB0aGUgdW5uZWNlc3Nhcnkgc3RhdGUgdXBkYXRlLlxuICAgICAgICBpZiAocHJvdmlkZXJTdGF0ZS5zdG9yZVN0YXRlID09PSBuZXdTdG9yZVN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0b3JlU3RhdGU6IG5ld1N0b3JlU3RhdGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBBY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBkaXNwYXRjaGVkIGJldHdlZW4gcmVuZGVyIGFuZCBtb3VudCAtIGhhbmRsZSB0aG9zZVxuXG4gICAgdmFyIHBvc3RNb3VudFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gICAgaWYgKHBvc3RNb3VudFN0b3JlU3RhdGUgIT09IHRoaXMuc3RhdGUuc3RvcmVTdGF0ZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0b3JlU3RhdGU6IHBvc3RNb3VudFN0b3JlU3RhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBDb250ZXh0ID0gdGhpcy5wcm9wcy5jb250ZXh0IHx8IFJlYWN0UmVkdXhDb250ZXh0O1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnN0YXRlXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIFByb3ZpZGVyO1xufShDb21wb25lbnQpO1xuXG5Qcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIHN0b3JlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBkaXNwYXRjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBnZXRTdGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KSxcbiAgY29udGV4dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnlcbn07XG5leHBvcnQgZGVmYXVsdCBQcm92aWRlcjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQU5BO0FBWEE7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQTdCQTtBQUNBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBTUE7QUF6RUE7QUFDQTtBQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBUEE7QUFTQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/components/Provider.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/components/connectAdvanced.js": -/*!********************************************************************!*\ - !*** ../node_modules/react-redux/es/components/connectAdvanced.js ***! - \********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return connectAdvanced; });\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! hoist-non-react-statics */ \"../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! invariant */ \"../node_modules/invariant/browser.js\");\n/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(invariant__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-is */ \"../node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Context */ \"../node_modules/react-redux/es/components/Context.js\");\n\n\n\n\n\n\n\n\n\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction connectAdvanced(\n/*\n selectorFactory is a func that is responsible for returning the selector function used to\n compute new props from state, props, and dispatch. For example:\n export default connectAdvanced((dispatch, options) => (state, props) => ({\n thing: state.things[props.thingId],\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n }))(YourComponent)\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n props. Do not use connectAdvanced directly without memoizing results between calls to your\n selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? _Context__WEBPACK_IMPORTED_MODULE_8__[\"ReactReduxContext\"] : _ref2$context,\n connectOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(renderCountProp === undefined, \"renderCountProp is removed. render counting is built into the latest React dev tools profiling extension\");\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(!withRef, 'withRef is removed. To access the wrapped instance, use a ref on the connected component');\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(storeKey === 'store', 'storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (undefined !== 'production') {\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(Object(react_is__WEBPACK_IMPORTED_MODULE_7__[\"isValidElementType\"])(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n var OuterBaseComponent = react__WEBPACK_IMPORTED_MODULE_6__[\"Component\"];\n\n if (pure) {\n OuterBaseComponent = react__WEBPACK_IMPORTED_MODULE_6__[\"PureComponent\"];\n }\n\n function makeDerivedPropsSelector() {\n var lastProps;\n var lastState;\n var lastDerivedProps;\n var lastStore;\n var lastSelectorFactoryOptions;\n var sourceSelector;\n return function selectDerivedProps(state, props, store, selectorFactoryOptions) {\n if (pure && lastProps === props && lastState === state) {\n return lastDerivedProps;\n }\n\n if (store !== lastStore || lastSelectorFactoryOptions !== selectorFactoryOptions) {\n lastStore = store;\n lastSelectorFactoryOptions = selectorFactoryOptions;\n sourceSelector = selectorFactory(store.dispatch, selectorFactoryOptions);\n }\n\n lastProps = props;\n lastState = state;\n var nextProps = sourceSelector(state, props);\n lastDerivedProps = nextProps;\n return lastDerivedProps;\n };\n }\n\n function makeChildElementSelector() {\n var lastChildProps, lastForwardRef, lastChildElement, lastComponent;\n return function selectChildElement(WrappedComponent, childProps, forwardRef) {\n if (childProps !== lastChildProps || forwardRef !== lastForwardRef || lastComponent !== WrappedComponent) {\n lastChildProps = childProps;\n lastForwardRef = forwardRef;\n lastComponent = WrappedComponent;\n lastChildElement = react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(WrappedComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({}, childProps, {\n ref: forwardRef\n }));\n }\n\n return lastChildElement;\n };\n }\n\n var Connect = /*#__PURE__*/function (_OuterBaseComponent) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Connect, _OuterBaseComponent);\n\n function Connect(props) {\n var _this;\n\n _this = _OuterBaseComponent.call(this, props) || this;\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(forwardRef ? !props.wrapperProps[storeKey] : !props[storeKey], 'Passing redux store in props has been removed and does not do anything. ' + customStoreWarningMessage);\n _this.selectDerivedProps = makeDerivedPropsSelector();\n _this.selectChildElement = makeChildElementSelector();\n _this.indirectRenderWrappedComponent = _this.indirectRenderWrappedComponent.bind(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_this));\n return _this;\n }\n\n var _proto = Connect.prototype;\n\n _proto.indirectRenderWrappedComponent = function indirectRenderWrappedComponent(value) {\n // calling renderWrappedComponent on prototype from indirectRenderWrappedComponent bound to `this`\n return this.renderWrappedComponent(value);\n };\n\n _proto.renderWrappedComponent = function renderWrappedComponent(value) {\n invariant__WEBPACK_IMPORTED_MODULE_5___default()(value, \"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n var storeState = value.storeState,\n store = value.store;\n var wrapperProps = this.props;\n var forwardedRef;\n\n if (forwardRef) {\n wrapperProps = this.props.wrapperProps;\n forwardedRef = this.props.forwardedRef;\n }\n\n var derivedProps = this.selectDerivedProps(storeState, wrapperProps, store, selectorFactoryOptions);\n return this.selectChildElement(WrappedComponent, derivedProps, forwardedRef);\n };\n\n _proto.render = function render() {\n var ContextToUse = this.props.context && this.props.context.Consumer && Object(react_is__WEBPACK_IMPORTED_MODULE_7__[\"isContextConsumer\"])(react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(this.props.context.Consumer, null)) ? this.props.context : Context;\n return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(ContextToUse.Consumer, null, this.indirectRenderWrappedComponent);\n };\n\n return Connect;\n }(OuterBaseComponent);\n\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = react__WEBPACK_IMPORTED_MODULE_6___default.a.forwardRef(function forwardConnectRef(props, ref) {\n return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(Connect, {\n wrapperProps: props,\n forwardedRef: ref\n });\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(forwarded, WrappedComponent);\n }\n\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default()(Connect, WrappedComponent);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZC5qcz8xZjY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzVmFsaWRFbGVtZW50VHlwZSwgaXNDb250ZXh0Q29uc3VtZXIgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5cbnZhciBzdHJpbmdpZnlDb21wb25lbnQgPSBmdW5jdGlvbiBzdHJpbmdpZnlDb21wb25lbnQoQ29tcCkge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShDb21wKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFN0cmluZyhDb21wKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29ubmVjdEFkdmFuY2VkKFxuLypcbiAgc2VsZWN0b3JGYWN0b3J5IGlzIGEgZnVuYyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciByZXR1cm5pbmcgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uIHVzZWQgdG9cbiAgY29tcHV0ZSBuZXcgcHJvcHMgZnJvbSBzdGF0ZSwgcHJvcHMsIGFuZCBkaXNwYXRjaC4gRm9yIGV4YW1wbGU6XG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gICAgICB0aGluZzogc3RhdGUudGhpbmdzW3Byb3BzLnRoaW5nSWRdLFxuICAgICAgc2F2ZVRoaW5nOiBmaWVsZHMgPT4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvcnMuc2F2ZVRoaW5nKHByb3BzLnRoaW5nSWQsIGZpZWxkcykpLFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxuICAgQWNjZXNzIHRvIGRpc3BhdGNoIGlzIHByb3ZpZGVkIHRvIHRoZSBmYWN0b3J5IHNvIHNlbGVjdG9yRmFjdG9yaWVzIGNhbiBiaW5kIGFjdGlvbkNyZWF0b3JzXG4gIG91dHNpZGUgb2YgdGhlaXIgc2VsZWN0b3IgYXMgYW4gb3B0aW1pemF0aW9uLiBPcHRpb25zIHBhc3NlZCB0byBjb25uZWN0QWR2YW5jZWQgYXJlIHBhc3NlZCB0b1xuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgTm90ZSB0aGF0IHNlbGVjdG9yRmFjdG9yeSBpcyByZXNwb25zaWJsZSBmb3IgYWxsIGNhY2hpbmcvbWVtb2l6YXRpb24gb2YgaW5ib3VuZCBhbmQgb3V0Ym91bmRcbiAgcHJvcHMuIERvIG5vdCB1c2UgY29ubmVjdEFkdmFuY2VkIGRpcmVjdGx5IHdpdGhvdXQgbWVtb2l6aW5nIHJlc3VsdHMgYmV0d2VlbiBjYWxscyB0byB5b3VyXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cbiovXG5zZWxlY3RvckZhY3RvcnksIC8vIG9wdGlvbnMgb2JqZWN0OlxuX3JlZikge1xuICBpZiAoX3JlZiA9PT0gdm9pZCAwKSB7XG4gICAgX3JlZiA9IHt9O1xuICB9XG5cbiAgdmFyIF9yZWYyID0gX3JlZixcbiAgICAgIF9yZWYyJGdldERpc3BsYXlOYW1lID0gX3JlZjIuZ2V0RGlzcGxheU5hbWUsXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYyJGdldERpc3BsYXlOYW1lID09PSB2b2lkIDAgPyBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBcIkNvbm5lY3RBZHZhbmNlZChcIiArIG5hbWUgKyBcIilcIjtcbiAgfSA6IF9yZWYyJGdldERpc3BsYXlOYW1lLFxuICAgICAgX3JlZjIkbWV0aG9kTmFtZSA9IF9yZWYyLm1ldGhvZE5hbWUsXG4gICAgICBtZXRob2ROYW1lID0gX3JlZjIkbWV0aG9kTmFtZSA9PT0gdm9pZCAwID8gJ2Nvbm5lY3RBZHZhbmNlZCcgOiBfcmVmMiRtZXRob2ROYW1lLFxuICAgICAgX3JlZjIkcmVuZGVyQ291bnRQcm9wID0gX3JlZjIucmVuZGVyQ291bnRQcm9wLFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZjIkcmVuZGVyQ291bnRQcm9wID09PSB2b2lkIDAgPyB1bmRlZmluZWQgOiBfcmVmMiRyZW5kZXJDb3VudFByb3AsXG4gICAgICBfcmVmMiRzaG91bGRIYW5kbGVTdGEgPSBfcmVmMi5zaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBfcmVmMiRzaG91bGRIYW5kbGVTdGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRzaG91bGRIYW5kbGVTdGEsXG4gICAgICBfcmVmMiRzdG9yZUtleSA9IF9yZWYyLnN0b3JlS2V5LFxuICAgICAgc3RvcmVLZXkgPSBfcmVmMiRzdG9yZUtleSA9PT0gdm9pZCAwID8gJ3N0b3JlJyA6IF9yZWYyJHN0b3JlS2V5LFxuICAgICAgX3JlZjIkd2l0aFJlZiA9IF9yZWYyLndpdGhSZWYsXG4gICAgICB3aXRoUmVmID0gX3JlZjIkd2l0aFJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiR3aXRoUmVmLFxuICAgICAgX3JlZjIkZm9yd2FyZFJlZiA9IF9yZWYyLmZvcndhcmRSZWYsXG4gICAgICBmb3J3YXJkUmVmID0gX3JlZjIkZm9yd2FyZFJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRmb3J3YXJkUmVmLFxuICAgICAgX3JlZjIkY29udGV4dCA9IF9yZWYyLmNvbnRleHQsXG4gICAgICBjb250ZXh0ID0gX3JlZjIkY29udGV4dCA9PT0gdm9pZCAwID8gUmVhY3RSZWR1eENvbnRleHQgOiBfcmVmMiRjb250ZXh0LFxuICAgICAgY29ubmVjdE9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMiwgW1wiZ2V0RGlzcGxheU5hbWVcIiwgXCJtZXRob2ROYW1lXCIsIFwicmVuZGVyQ291bnRQcm9wXCIsIFwic2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzXCIsIFwic3RvcmVLZXlcIiwgXCJ3aXRoUmVmXCIsIFwiZm9yd2FyZFJlZlwiLCBcImNvbnRleHRcIl0pO1xuXG4gIGludmFyaWFudChyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCwgXCJyZW5kZXJDb3VudFByb3AgaXMgcmVtb3ZlZC4gcmVuZGVyIGNvdW50aW5nIGlzIGJ1aWx0IGludG8gdGhlIGxhdGVzdCBSZWFjdCBkZXYgdG9vbHMgcHJvZmlsaW5nIGV4dGVuc2lvblwiKTtcbiAgaW52YXJpYW50KCF3aXRoUmVmLCAnd2l0aFJlZiBpcyByZW1vdmVkLiBUbyBhY2Nlc3MgdGhlIHdyYXBwZWQgaW5zdGFuY2UsIHVzZSBhIHJlZiBvbiB0aGUgY29ubmVjdGVkIGNvbXBvbmVudCcpO1xuICB2YXIgY3VzdG9tU3RvcmVXYXJuaW5nTWVzc2FnZSA9ICdUbyB1c2UgYSBjdXN0b20gUmVkdXggc3RvcmUgZm9yIHNwZWNpZmljIGNvbXBvbmVudHMsICBjcmVhdGUgYSBjdXN0b20gUmVhY3QgY29udGV4dCB3aXRoICcgKyBcIlJlYWN0LmNyZWF0ZUNvbnRleHQoKSwgYW5kIHBhc3MgdGhlIGNvbnRleHQgb2JqZWN0IHRvIFJlYWN0IFJlZHV4J3MgUHJvdmlkZXIgYW5kIHNwZWNpZmljIGNvbXBvbmVudHNcIiArICcgbGlrZTogIDxQcm92aWRlciBjb250ZXh0PXtNeUNvbnRleHR9PjxDb25uZWN0ZWRDb21wb25lbnQgY29udGV4dD17TXlDb250ZXh0fSAvPjwvUHJvdmlkZXI+LiAnICsgJ1lvdSBtYXkgYWxzbyBwYXNzIGEge2NvbnRleHQgOiBNeUNvbnRleHR9IG9wdGlvbiB0byBjb25uZWN0JztcbiAgaW52YXJpYW50KHN0b3JlS2V5ID09PSAnc3RvcmUnLCAnc3RvcmVLZXkgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgZG9lcyBub3QgZG8gYW55dGhpbmcuICcgKyBjdXN0b21TdG9yZVdhcm5pbmdNZXNzYWdlKTtcbiAgdmFyIENvbnRleHQgPSBjb250ZXh0O1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhDb25uZWN0KFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KGlzVmFsaWRFbGVtZW50VHlwZShXcmFwcGVkQ29tcG9uZW50KSwgXCJZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBcIiArIChtZXRob2ROYW1lICsgXCIuIEluc3RlYWQgcmVjZWl2ZWQgXCIgKyBzdHJpbmdpZnlDb21wb25lbnQoV3JhcHBlZENvbXBvbmVudCkpKTtcbiAgICB9XG5cbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZSh3cmFwcGVkQ29tcG9uZW50TmFtZSk7XG5cbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xuICAgICAgZ2V0RGlzcGxheU5hbWU6IGdldERpc3BsYXlOYW1lLFxuICAgICAgbWV0aG9kTmFtZTogbWV0aG9kTmFtZSxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzOiBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBzdG9yZUtleTogc3RvcmVLZXksXG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXG4gICAgICBXcmFwcGVkQ29tcG9uZW50OiBXcmFwcGVkQ29tcG9uZW50XG4gICAgfSk7XG5cbiAgICB2YXIgcHVyZSA9IGNvbm5lY3RPcHRpb25zLnB1cmU7XG4gICAgdmFyIE91dGVyQmFzZUNvbXBvbmVudCA9IENvbXBvbmVudDtcblxuICAgIGlmIChwdXJlKSB7XG4gICAgICBPdXRlckJhc2VDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VEZXJpdmVkUHJvcHNTZWxlY3RvcigpIHtcbiAgICAgIHZhciBsYXN0UHJvcHM7XG4gICAgICB2YXIgbGFzdFN0YXRlO1xuICAgICAgdmFyIGxhc3REZXJpdmVkUHJvcHM7XG4gICAgICB2YXIgbGFzdFN0b3JlO1xuICAgICAgdmFyIGxhc3RTZWxlY3RvckZhY3RvcnlPcHRpb25zO1xuICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNlbGVjdERlcml2ZWRQcm9wcyhzdGF0ZSwgcHJvcHMsIHN0b3JlLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKSB7XG4gICAgICAgIGlmIChwdXJlICYmIGxhc3RQcm9wcyA9PT0gcHJvcHMgJiYgbGFzdFN0YXRlID09PSBzdGF0ZSkge1xuICAgICAgICAgIHJldHVybiBsYXN0RGVyaXZlZFByb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0b3JlICE9PSBsYXN0U3RvcmUgfHwgbGFzdFNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgIT09IHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpIHtcbiAgICAgICAgICBsYXN0U3RvcmUgPSBzdG9yZTtcbiAgICAgICAgICBsYXN0U2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IHNlbGVjdG9yRmFjdG9yeU9wdGlvbnM7XG4gICAgICAgICAgc291cmNlU2VsZWN0b3IgPSBzZWxlY3RvckZhY3Rvcnkoc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFByb3BzID0gcHJvcHM7XG4gICAgICAgIGxhc3RTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RhdGUsIHByb3BzKTtcbiAgICAgICAgbGFzdERlcml2ZWRQcm9wcyA9IG5leHRQcm9wcztcbiAgICAgICAgcmV0dXJuIGxhc3REZXJpdmVkUHJvcHM7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VDaGlsZEVsZW1lbnRTZWxlY3RvcigpIHtcbiAgICAgIHZhciBsYXN0Q2hpbGRQcm9wcywgbGFzdEZvcndhcmRSZWYsIGxhc3RDaGlsZEVsZW1lbnQsIGxhc3RDb21wb25lbnQ7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2VsZWN0Q2hpbGRFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIGNoaWxkUHJvcHMsIGZvcndhcmRSZWYpIHtcbiAgICAgICAgaWYgKGNoaWxkUHJvcHMgIT09IGxhc3RDaGlsZFByb3BzIHx8IGZvcndhcmRSZWYgIT09IGxhc3RGb3J3YXJkUmVmIHx8IGxhc3RDb21wb25lbnQgIT09IFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICAgICAgICBsYXN0Q2hpbGRQcm9wcyA9IGNoaWxkUHJvcHM7XG4gICAgICAgICAgbGFzdEZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuICAgICAgICAgIGxhc3RDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgICAgICAgIGxhc3RDaGlsZEVsZW1lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBjaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IGZvcndhcmRSZWZcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFzdENoaWxkRWxlbWVudDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIENvbm5lY3QgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoX091dGVyQmFzZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoQ29ubmVjdCwgX091dGVyQmFzZUNvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIENvbm5lY3QocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzO1xuXG4gICAgICAgIF90aGlzID0gX091dGVyQmFzZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBpbnZhcmlhbnQoZm9yd2FyZFJlZiA/ICFwcm9wcy53cmFwcGVyUHJvcHNbc3RvcmVLZXldIDogIXByb3BzW3N0b3JlS2V5XSwgJ1Bhc3NpbmcgcmVkdXggc3RvcmUgaW4gcHJvcHMgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgZG9lcyBub3QgZG8gYW55dGhpbmcuICcgKyBjdXN0b21TdG9yZVdhcm5pbmdNZXNzYWdlKTtcbiAgICAgICAgX3RoaXMuc2VsZWN0RGVyaXZlZFByb3BzID0gbWFrZURlcml2ZWRQcm9wc1NlbGVjdG9yKCk7XG4gICAgICAgIF90aGlzLnNlbGVjdENoaWxkRWxlbWVudCA9IG1ha2VDaGlsZEVsZW1lbnRTZWxlY3RvcigpO1xuICAgICAgICBfdGhpcy5pbmRpcmVjdFJlbmRlcldyYXBwZWRDb21wb25lbnQgPSBfdGhpcy5pbmRpcmVjdFJlbmRlcldyYXBwZWRDb21wb25lbnQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcm90byA9IENvbm5lY3QucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uaW5kaXJlY3RSZW5kZXJXcmFwcGVkQ29tcG9uZW50ID0gZnVuY3Rpb24gaW5kaXJlY3RSZW5kZXJXcmFwcGVkQ29tcG9uZW50KHZhbHVlKSB7XG4gICAgICAgIC8vIGNhbGxpbmcgcmVuZGVyV3JhcHBlZENvbXBvbmVudCBvbiBwcm90b3R5cGUgZnJvbSBpbmRpcmVjdFJlbmRlcldyYXBwZWRDb21wb25lbnQgYm91bmQgdG8gYHRoaXNgXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcldyYXBwZWRDb21wb25lbnQodmFsdWUpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlcldyYXBwZWRDb21wb25lbnQgPSBmdW5jdGlvbiByZW5kZXJXcmFwcGVkQ29tcG9uZW50KHZhbHVlKSB7XG4gICAgICAgIGludmFyaWFudCh2YWx1ZSwgXCJDb3VsZCBub3QgZmluZCBcXFwic3RvcmVcXFwiIGluIHRoZSBjb250ZXh0IG9mIFwiICsgKFwiXFxcIlwiICsgZGlzcGxheU5hbWUgKyBcIlxcXCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIFwiKSArIFwib3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIFwiICsgKFwiUmVhY3QgY29udGV4dCBjb25zdW1lciB0byBcIiArIGRpc3BsYXlOYW1lICsgXCIgaW4gY29ubmVjdCBvcHRpb25zLlwiKSk7XG4gICAgICAgIHZhciBzdG9yZVN0YXRlID0gdmFsdWUuc3RvcmVTdGF0ZSxcbiAgICAgICAgICAgIHN0b3JlID0gdmFsdWUuc3RvcmU7XG4gICAgICAgIHZhciB3cmFwcGVyUHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICB2YXIgZm9yd2FyZGVkUmVmO1xuXG4gICAgICAgIGlmIChmb3J3YXJkUmVmKSB7XG4gICAgICAgICAgd3JhcHBlclByb3BzID0gdGhpcy5wcm9wcy53cmFwcGVyUHJvcHM7XG4gICAgICAgICAgZm9yd2FyZGVkUmVmID0gdGhpcy5wcm9wcy5mb3J3YXJkZWRSZWY7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVyaXZlZFByb3BzID0gdGhpcy5zZWxlY3REZXJpdmVkUHJvcHMoc3RvcmVTdGF0ZSwgd3JhcHBlclByb3BzLCBzdG9yZSwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdENoaWxkRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBkZXJpdmVkUHJvcHMsIGZvcndhcmRlZFJlZik7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgQ29udGV4dFRvVXNlID0gdGhpcy5wcm9wcy5jb250ZXh0ICYmIHRoaXMucHJvcHMuY29udGV4dC5Db25zdW1lciAmJiBpc0NvbnRleHRDb25zdW1lcihSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMucHJvcHMuY29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gdGhpcy5wcm9wcy5jb250ZXh0IDogQ29udGV4dDtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dFRvVXNlLkNvbnN1bWVyLCBudWxsLCB0aGlzLmluZGlyZWN0UmVuZGVyV3JhcHBlZENvbXBvbmVudCk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29ubmVjdDtcbiAgICB9KE91dGVyQmFzZUNvbXBvbmVudCk7XG5cbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcblxuICAgIGlmIChmb3J3YXJkUmVmKSB7XG4gICAgICB2YXIgZm9yd2FyZGVkID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBmb3J3YXJkQ29ubmVjdFJlZihwcm9wcywgcmVmKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbm5lY3QsIHtcbiAgICAgICAgICB3cmFwcGVyUHJvcHM6IHByb3BzLFxuICAgICAgICAgIGZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBmb3J3YXJkZWQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIGZvcndhcmRlZC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIHJldHVybiBob2lzdFN0YXRpY3MoZm9yd2FyZGVkLCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9pc3RTdGF0aWNzKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xuICB9O1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFEQTtBQUFBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFEQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBMUNBO0FBQ0E7QUE0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsSUE7QUFvSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/components/connectAdvanced.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/connect.js": -/*!*********************************************************!*\ - !*** ../node_modules/react-redux/es/connect/connect.js ***! - \*********************************************************/ -/*! exports provided: createConnect, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createConnect\", function() { return createConnect; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/connectAdvanced */ \"../node_modules/react-redux/es/components/connectAdvanced.js\");\n/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/shallowEqual */ \"../node_modules/react-redux/es/utils/shallowEqual.js\");\n/* harmony import */ var _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mapDispatchToProps */ \"../node_modules/react-redux/es/connect/mapDispatchToProps.js\");\n/* harmony import */ var _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mapStateToProps */ \"../node_modules/react-redux/es/connect/mapStateToProps.js\");\n/* harmony import */ var _mergeProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./mergeProps */ \"../node_modules/react-redux/es/connect/mergeProps.js\");\n/* harmony import */ var _selectorFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./selectorFactory */ \"../node_modules/react-redux/es/connect/selectorFactory.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n\n\n\n/*\n connect is a facade over connectAdvanced. It turns its args into a compatible\n selectorFactory, which has the signature:\n\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n \n connect passes its args to connectAdvanced as options, which will in turn pass them to\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n selectorFactory returns a final props selector from its mapStateToProps,\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n mergePropsFactories, and pure args.\n\n The resulting final props selector is called by the Connect component instance whenever\n it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + _typeof(arg) + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nfunction createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__[\"default\"] : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__[\"default\"] : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? _mergeProps__WEBPACK_IMPORTED_MODULE_6__[\"default\"] : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? _selectorFactory__WEBPACK_IMPORTED_MODULE_7__[\"default\"] : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__[\"default\"] : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__[\"default\"] : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__[\"default\"] : _ref3$areMergedPropsE,\n extraOptions = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (createConnect());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvY29ubmVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9jb25uZWN0LmpzPzJiZDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBjb25uZWN0QWR2YW5jZWQgZnJvbSAnLi4vY29tcG9uZW50cy9jb25uZWN0QWR2YW5jZWQnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IGRlZmF1bHRNYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgZnJvbSAnLi9tYXBEaXNwYXRjaFRvUHJvcHMnO1xuaW1wb3J0IGRlZmF1bHRNYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgZnJvbSAnLi9tYXBTdGF0ZVRvUHJvcHMnO1xuaW1wb3J0IGRlZmF1bHRNZXJnZVByb3BzRmFjdG9yaWVzIGZyb20gJy4vbWVyZ2VQcm9wcyc7XG5pbXBvcnQgZGVmYXVsdFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL3NlbGVjdG9yRmFjdG9yeSc7XG4vKlxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2VkLiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxuXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXG4gIFxuICBjb25uZWN0IHBhc3NlcyBpdHMgYXJncyB0byBjb25uZWN0QWR2YW5jZWQgYXMgb3B0aW9ucywgd2hpY2ggd2lsbCBpbiB0dXJuIHBhc3MgdGhlbSB0b1xuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5cblxuICBzZWxlY3RvckZhY3RvcnkgcmV0dXJucyBhIGZpbmFsIHByb3BzIHNlbGVjdG9yIGZyb20gaXRzIG1hcFN0YXRlVG9Qcm9wcyxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cblxuICBUaGUgcmVzdWx0aW5nIGZpbmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2Ugd2hlbmV2ZXJcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSBmYWN0b3JpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFjdG9yaWVzW2ldKGFyZyk7XG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgXCIgKyB0eXBlb2YgYXJnICsgXCIgZm9yIFwiICsgbmFtZSArIFwiIGFyZ3VtZW50IHdoZW4gY29ubmVjdGluZyBjb21wb25lbnQgXCIgKyBvcHRpb25zLndyYXBwZWRDb21wb25lbnROYW1lICsgXCIuXCIpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufSAvLyBjcmVhdGVDb25uZWN0IHdpdGggZGVmYXVsdCBhcmdzIGJ1aWxkcyB0aGUgJ29mZmljaWFsJyBjb25uZWN0IGJlaGF2aW9yLiBDYWxsaW5nIGl0IHdpdGhcbi8vIGRpZmZlcmVudCBvcHRpb25zIG9wZW5zIHVwIHNvbWUgdGVzdGluZyBhbmQgZXh0ZW5zaWJpbGl0eSBzY2VuYXJpb3NcblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdChfdGVtcCkge1xuICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxuICAgICAgY29ubmVjdEhPQyA9IF9yZWYkY29ubmVjdEhPQyA9PT0gdm9pZCAwID8gY29ubmVjdEFkdmFuY2VkIDogX3JlZiRjb25uZWN0SE9DLFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXG4gICAgICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YgPT09IHZvaWQgMCA/IGRlZmF1bHRNYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgOiBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YsXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyA9PT0gdm9pZCAwID8gZGVmYXVsdE1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA6IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1lcmdlUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPT09IHZvaWQgMCA/IGRlZmF1bHRNZXJnZVByb3BzRmFjdG9yaWVzIDogX3JlZiRtZXJnZVByb3BzRmFjdG9yLFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcbiAgICAgIHNlbGVjdG9yRmFjdG9yeSA9IF9yZWYkc2VsZWN0b3JGYWN0b3J5ID09PSB2b2lkIDAgPyBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5IDogX3JlZiRzZWxlY3RvckZhY3Rvcnk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIF9yZWYyKSB7XG4gICAgaWYgKF9yZWYyID09PSB2b2lkIDApIHtcbiAgICAgIF9yZWYyID0ge307XG4gICAgfVxuXG4gICAgdmFyIF9yZWYzID0gX3JlZjIsXG4gICAgICAgIF9yZWYzJHB1cmUgPSBfcmVmMy5wdXJlLFxuICAgICAgICBwdXJlID0gX3JlZjMkcHVyZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYzJHB1cmUsXG4gICAgICAgIF9yZWYzJGFyZVN0YXRlc0VxdWFsID0gX3JlZjMuYXJlU3RhdGVzRXF1YWwsXG4gICAgICAgIGFyZVN0YXRlc0VxdWFsID0gX3JlZjMkYXJlU3RhdGVzRXF1YWwgPT09IHZvaWQgMCA/IHN0cmljdEVxdWFsIDogX3JlZjMkYXJlU3RhdGVzRXF1YWwsXG4gICAgICAgIF9yZWYzJGFyZU93blByb3BzRXF1YSA9IF9yZWYzLmFyZU93blByb3BzRXF1YWwsXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMyRhcmVPd25Qcm9wc0VxdWEgPT09IHZvaWQgMCA/IHNoYWxsb3dFcXVhbCA6IF9yZWYzJGFyZU93blByb3BzRXF1YSxcbiAgICAgICAgX3JlZjMkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjMuYXJlU3RhdGVQcm9wc0VxdWFsLFxuICAgICAgICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBfcmVmMyRhcmVTdGF0ZVByb3BzRXEgPT09IHZvaWQgMCA/IHNoYWxsb3dFcXVhbCA6IF9yZWYzJGFyZVN0YXRlUHJvcHNFcSxcbiAgICAgICAgX3JlZjMkYXJlTWVyZ2VkUHJvcHNFID0gX3JlZjMuYXJlTWVyZ2VkUHJvcHNFcXVhbCxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYzJGFyZU1lcmdlZFByb3BzRSA9PT0gdm9pZCAwID8gc2hhbGxvd0VxdWFsIDogX3JlZjMkYXJlTWVyZ2VkUHJvcHNFLFxuICAgICAgICBleHRyYU9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMywgW1wicHVyZVwiLCBcImFyZVN0YXRlc0VxdWFsXCIsIFwiYXJlT3duUHJvcHNFcXVhbFwiLCBcImFyZVN0YXRlUHJvcHNFcXVhbFwiLCBcImFyZU1lcmdlZFByb3BzRXF1YWxcIl0pO1xuXG4gICAgdmFyIGluaXRNYXBTdGF0ZVRvUHJvcHMgPSBtYXRjaChtYXBTdGF0ZVRvUHJvcHMsIG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcywgJ21hcFN0YXRlVG9Qcm9wcycpO1xuICAgIHZhciBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWF0Y2gobWFwRGlzcGF0Y2hUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMsICdtYXBEaXNwYXRjaFRvUHJvcHMnKTtcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xuICAgIHJldHVybiBjb25uZWN0SE9DKHNlbGVjdG9yRmFjdG9yeSwgX2V4dGVuZHMoe1xuICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlc1xuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxuICAgICAgLy8gdXNlZCB0byBjb21wdXRlIENvbm5lY3QncyBkaXNwbGF5TmFtZSBmcm9tIHRoZSB3cmFwcGVkIGNvbXBvbmVudCdzIGRpc3BsYXlOYW1lLlxuICAgICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFwiQ29ubmVjdChcIiArIG5hbWUgKyBcIilcIjtcbiAgICAgIH0sXG4gICAgICAvLyBpZiBtYXBTdGF0ZVRvUHJvcHMgaXMgZmFsc3ksIHRoZSBDb25uZWN0IGNvbXBvbmVudCBkb2Vzbid0IHN1YnNjcmliZSB0byBzdG9yZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKSxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxuICAgICAgaW5pdE1hcFN0YXRlVG9Qcm9wczogaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXG4gICAgICBwdXJlOiBwdXJlLFxuICAgICAgYXJlU3RhdGVzRXF1YWw6IGFyZVN0YXRlc0VxdWFsLFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbDogYXJlU3RhdGVQcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbDogYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29ubmVjdCgpOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQXJCQTtBQXlDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/connect.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/mapDispatchToProps.js": -/*!********************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/mapDispatchToProps.js ***! - \********************************************************************/ -/*! exports provided: whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMapDispatchToPropsIsFunction\", function() { return whenMapDispatchToPropsIsFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMapDispatchToPropsIsMissing\", function() { return whenMapDispatchToPropsIsMissing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMapDispatchToPropsIsObject\", function() { return whenMapDispatchToPropsIsObject; });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"../node_modules/redux/es/index.js\");\n/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wrapMapToProps */ \"../node_modules/react-redux/es/connect/wrapMapToProps.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\nfunction whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__[\"wrapMapToPropsFunc\"])(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nfunction whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__[\"wrapMapToPropsConstant\"])(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nfunction whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && _typeof(mapDispatchToProps) === 'object' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__[\"wrapMapToPropsConstant\"])(function (dispatch) {\n return Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"bindActionCreators\"])(mapDispatchToProps, dispatch);\n }) : undefined;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ([whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcy5qcz8wYzFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpbmRBY3Rpb25DcmVhdG9ycyB9IGZyb20gJ3JlZHV4JztcbmltcG9ydCB7IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQsIHdyYXBNYXBUb1Byb3BzRnVuYyB9IGZyb20gJy4vd3JhcE1hcFRvUHJvcHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uKG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1hcERpc3BhdGNoVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaFxuICAgIH07XG4gIH0pIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdChtYXBEaXNwYXRjaFRvUHJvcHMpIHtcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9ycyhtYXBEaXNwYXRjaFRvUHJvcHMsIGRpc3BhdGNoKTtcbiAgfSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBbd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcsIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdF07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/mapDispatchToProps.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/mapStateToProps.js": -/*!*****************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/mapStateToProps.js ***! - \*****************************************************************/ -/*! exports provided: whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMapStateToPropsIsFunction\", function() { return whenMapStateToPropsIsFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMapStateToPropsIsMissing\", function() { return whenMapStateToPropsIsMissing; });\n/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrapMapToProps */ \"../node_modules/react-redux/es/connect/wrapMapToProps.js\");\n\nfunction whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__[\"wrapMapToPropsFunc\"])(mapStateToProps, 'mapStateToProps') : undefined;\n}\nfunction whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? Object(_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__[\"wrapMapToPropsConstant\"])(function () {\n return {};\n }) : undefined;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ([whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcy5qcz8xZDRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQsIHdyYXBNYXBUb1Byb3BzRnVuYyB9IGZyb20gJy4vd3JhcE1hcFRvUHJvcHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1hcFN0YXRlVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nKG1hcFN0YXRlVG9Qcm9wcykge1xuICByZXR1cm4gIW1hcFN0YXRlVG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBbd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24sIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmddOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/mapStateToProps.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/mergeProps.js": -/*!************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/mergeProps.js ***! - \************************************************************/ -/*! exports provided: defaultMergeProps, wrapMergePropsFunc, whenMergePropsIsFunction, whenMergePropsIsOmitted, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultMergeProps\", function() { return defaultMergeProps; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapMergePropsFunc\", function() { return wrapMergePropsFunc; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMergePropsIsFunction\", function() { return whenMergePropsIsFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whenMergePropsIsOmitted\", function() { return whenMergePropsIsOmitted; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/verifyPlainObject */ \"../node_modules/react-redux/es/utils/verifyPlainObject.js\");\n\n\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, ownProps, stateProps, dispatchProps);\n}\nfunction wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (undefined !== 'production') Object(_utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nfunction whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nfunction whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ([whenMergePropsIsFunction, whenMergePropsIsOmitted]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzPzk3NGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgdmVyaWZ5UGxhaW5PYmplY3QgZnJvbSAnLi4vdXRpbHMvdmVyaWZ5UGxhaW5PYmplY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duUHJvcHMsIHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZSxcbiAgICAgICAgcHVyZSA9IF9yZWYucHVyZSxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcbiAgICB2YXIgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIHZhciBtZXJnZWRQcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICB2YXIgbmV4dE1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XG4gICAgICAgIGlmICghcHVyZSB8fCAhYXJlTWVyZ2VkUHJvcHNFcXVhbChuZXh0TWVyZ2VkUHJvcHMsIG1lcmdlZFByb3BzKSkgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB2ZXJpZnlQbGFpbk9iamVjdChtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcbiAgICB9O1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XG4gIHJldHVybiB0eXBlb2YgbWVyZ2VQcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZChtZXJnZVByb3BzKSB7XG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1lcmdlUHJvcHM7XG4gIH0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBbd2hlbk1lcmdlUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZF07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBTkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/mergeProps.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/selectorFactory.js": -/*!*****************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/selectorFactory.js ***! - \*****************************************************************/ -/*! exports provided: impureFinalPropsSelectorFactory, pureFinalPropsSelectorFactory, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"impureFinalPropsSelectorFactory\", function() { return impureFinalPropsSelectorFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pureFinalPropsSelectorFactory\", function() { return pureFinalPropsSelectorFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return finalPropsSelectorFactory; });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _verifySubselectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./verifySubselectors */ \"../node_modules/react-redux/es/connect/verifySubselectors.js\");\n\n\nfunction impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nfunction finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (undefined !== 'production') {\n Object(_verifySubselectors__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeS5qcz8xZjQyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHZlcmlmeVN1YnNlbGVjdG9ycyBmcm9tICcuL3ZlcmlmeVN1YnNlbGVjdG9ycyc7XG5leHBvcnQgZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvcihzdGF0ZSwgb3duUHJvcHMpIHtcbiAgICByZXR1cm4gbWVyZ2VQcm9wcyhtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKSwgbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyksIG93blByb3BzKTtcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gsIF9yZWYpIHtcbiAgdmFyIGFyZVN0YXRlc0VxdWFsID0gX3JlZi5hcmVTdGF0ZXNFcXVhbCxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBfcmVmLmFyZVN0YXRlUHJvcHNFcXVhbDtcbiAgdmFyIGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XG4gIHZhciBzdGF0ZTtcbiAgdmFyIG93blByb3BzO1xuICB2YXIgc3RhdGVQcm9wcztcbiAgdmFyIGRpc3BhdGNoUHJvcHM7XG4gIHZhciBtZXJnZWRQcm9wcztcblxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xuICAgIHN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuICAgIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCkge1xuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wcygpIHtcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XG4gICAgdmFyIG5leHRTdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XG4gICAgdmFyIHN0YXRlUHJvcHNDaGFuZ2VkID0gIWFyZVN0YXRlUHJvcHNFcXVhbChuZXh0U3RhdGVQcm9wcywgc3RhdGVQcm9wcyk7XG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xuICAgIGlmIChzdGF0ZVByb3BzQ2hhbmdlZCkgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XG4gICAgdmFyIHN0YXRlQ2hhbmdlZCA9ICFhcmVTdGF0ZXNFcXVhbChuZXh0U3RhdGUsIHN0YXRlKTtcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcbiAgICBpZiAocHJvcHNDaGFuZ2VkICYmIHN0YXRlQ2hhbmdlZCkgcmV0dXJuIGhhbmRsZU5ld1Byb3BzQW5kTmV3U3RhdGUoKTtcbiAgICBpZiAocHJvcHNDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHMoKTtcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvcihuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xuICAgIHJldHVybiBoYXNSdW5BdExlYXN0T25jZSA/IGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgOiBoYW5kbGVGaXJzdENhbGwobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpO1xuICB9O1xufSAvLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xuLy8gSWYgcHVyZSBpcyB0cnVlLCB0aGUgc2VsZWN0b3IgcmV0dXJuZWQgYnkgc2VsZWN0b3JGYWN0b3J5IHdpbGwgbWVtb2l6ZSBpdHMgcmVzdWx0cyxcbi8vIGFsbG93aW5nIGNvbm5lY3RBZHZhbmNlZCdzIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byByZXR1cm4gZmFsc2UgaWYgZmluYWxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XG4vLyBvYmplY3QgYW5kIHNob3VsZENvbXBvbmVudFVwZGF0ZSB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcbiAgdmFyIGluaXRNYXBTdGF0ZVRvUHJvcHMgPSBfcmVmMi5pbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IF9yZWYyLmluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxuICAgICAgb3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYyLCBbXCJpbml0TWFwU3RhdGVUb1Byb3BzXCIsIFwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wc1wiLCBcImluaXRNZXJnZVByb3BzXCJdKTtcblxuICB2YXIgbWFwU3RhdGVUb1Byb3BzID0gaW5pdE1hcFN0YXRlVG9Qcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XG4gIHZhciBtYXBEaXNwYXRjaFRvUHJvcHMgPSBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2ZXJpZnlTdWJzZWxlY3RvcnMobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIG9wdGlvbnMuZGlzcGxheU5hbWUpO1xuICB9XG5cbiAgdmFyIHNlbGVjdG9yRmFjdG9yeSA9IG9wdGlvbnMucHVyZSA/IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5IDogaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcbiAgcmV0dXJuIHNlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gsIG9wdGlvbnMpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/selectorFactory.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/verifySubselectors.js": -/*!********************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/verifySubselectors.js ***! - \********************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return verifySubselectors; });\n/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/warning */ \"../node_modules/react-redux/es/utils/warning.js\");\n\n\nfunction verify(selector, methodName, displayName) {\n if (!selector) {\n throw new Error(\"Unexpected value for \" + methodName + \" in \" + displayName + \".\");\n } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') {\n if (!selector.hasOwnProperty('dependsOnOwnProps')) {\n Object(_utils_warning__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"The selector for \" + methodName + \" of \" + displayName + \" did not specify a value for dependsOnOwnProps.\");\n }\n }\n}\n\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) {\n verify(mapStateToProps, 'mapStateToProps', displayName);\n verify(mapDispatchToProps, 'mapDispatchToProps', displayName);\n verify(mergeProps, 'mergeProps', displayName);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvdmVyaWZ5U3Vic2VsZWN0b3JzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcz82ODM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3YXJuaW5nIGZyb20gJy4uL3V0aWxzL3dhcm5pbmcnO1xuXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XG4gIGlmICghc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG1ldGhvZE5hbWUgKyBcIiBpbiBcIiArIGRpc3BsYXlOYW1lICsgXCIuXCIpO1xuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XG4gICAgaWYgKCFzZWxlY3Rvci5oYXNPd25Qcm9wZXJ0eSgnZGVwZW5kc09uT3duUHJvcHMnKSkge1xuICAgICAgd2FybmluZyhcIlRoZSBzZWxlY3RvciBmb3IgXCIgKyBtZXRob2ROYW1lICsgXCIgb2YgXCIgKyBkaXNwbGF5TmFtZSArIFwiIGRpZCBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBkZXBlbmRzT25Pd25Qcm9wcy5cIik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcbiAgdmVyaWZ5KG1hcERpc3BhdGNoVG9Qcm9wcywgJ21hcERpc3BhdGNoVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcbiAgdmVyaWZ5KG1lcmdlUHJvcHMsICdtZXJnZVByb3BzJywgZGlzcGxheU5hbWUpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/verifySubselectors.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/connect/wrapMapToProps.js": -/*!****************************************************************!*\ - !*** ../node_modules/react-redux/es/connect/wrapMapToProps.js ***! - \****************************************************************/ -/*! exports provided: wrapMapToPropsConstant, getDependsOnOwnProps, wrapMapToPropsFunc */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapMapToPropsConstant\", function() { return wrapMapToPropsConstant; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDependsOnOwnProps\", function() { return getDependsOnOwnProps; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapMapToPropsFunc\", function() { return wrapMapToPropsFunc; });\n/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/verifyPlainObject */ \"../node_modules/react-redux/es/utils/verifyPlainObject.js\");\n\nfunction wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nfunction getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (undefined !== 'production') Object(_utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvd3JhcE1hcFRvUHJvcHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvd3JhcE1hcFRvUHJvcHMuanM/NTg3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdmVyaWZ5UGxhaW5PYmplY3QgZnJvbSAnLi4vdXRpbHMvdmVyaWZ5UGxhaW5PYmplY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZ2V0Q29uc3RhbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnQoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcbiAgICAgIHJldHVybiBjb25zdGFudDtcbiAgICB9XG5cbiAgICBjb25zdGFudFNlbGVjdG9yLmRlcGVuZHNPbk93blByb3BzID0gZmFsc2U7XG4gICAgcmV0dXJuIGNvbnN0YW50U2VsZWN0b3I7XG4gIH07XG59IC8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xuLy8gdG8gdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgd3JhcHBlZC4gSXQgaXMgYWxzbyB1c2VkIGJ5IG1ha2VQdXJlUHJvcHNTZWxlY3RvciB0byBkZXRlcm1pbmVcbi8vIHdoZXRoZXIgbWFwVG9Qcm9wcyBuZWVkcyB0byBiZSBpbnZva2VkIHdoZW4gcHJvcHMgaGF2ZSBjaGFuZ2VkLlxuLy9cbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWduYWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcbi8vIHRoZXJlZm9yZSBub3QgcmVwb3J0aW5nIGl0cyBsZW5ndGggYWNjdXJhdGVseS4uXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKSB7XG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcbn0gLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXG4vLyB0aGlzIGZ1bmN0aW9uIHdyYXBzIG1hcFRvUHJvcHMgaW4gYSBwcm94eSBmdW5jdGlvbiB3aGljaCBkb2VzIHNldmVyYWwgdGhpbmdzOlxuLy9cbi8vICAqIERldGVjdHMgd2hldGhlciB0aGUgbWFwVG9Qcm9wcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZGVwZW5kcyBvbiBwcm9wcywgd2hpY2hcbi8vICAgIGlzIHVzZWQgYnkgc2VsZWN0b3JGYWN0b3J5IHRvIGRlY2lkZSBpZiBpdCBzaG91bGQgcmVpbnZva2Ugb24gcHJvcHMgY2hhbmdlcy5cbi8vXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCBoYW5kbGVzIG1hcFRvUHJvcHMgaWYgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgdHJlYXRzIHRoYXRcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuLy9cbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cbi8vICAgIHRoZSBkZXZlbG9wZXIgdGhhdCB0aGVpciBtYXBUb1Byb3BzIGZ1bmN0aW9uIGlzIG5vdCByZXR1cm5pbmcgYSB2YWxpZCByZXN1bHQuXG4vL1xuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNGdW5jKG1hcFRvUHJvcHMsIG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRQcm94eVNlbGVjdG9yKGRpc3BhdGNoLCBfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcblxuICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uIG1hcFRvUHJvcHNQcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xuICAgIH07IC8vIGFsbG93IGRldGVjdEZhY3RvcnlBbmRWZXJpZnkgdG8gZ2V0IG93blByb3BzXG5cblxuICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gdHJ1ZTtcblxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcbiAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBtYXBUb1Byb3BzO1xuICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKTtcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIHByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcbiAgICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhwcm9wcyk7XG4gICAgICAgIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB2ZXJpZnlQbGFpbk9iamVjdChwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xuICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJveHk7XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBQ0E7QUFjQTtBQXpCQTtBQTJCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/connect/wrapMapToProps.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/index.js": -/*!***********************************************!*\ - !*** ../node_modules/react-redux/es/index.js ***! - \***********************************************/ -/*! exports provided: Provider, connectAdvanced, ReactReduxContext, connect */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_Provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/Provider */ \"../node_modules/react-redux/es/components/Provider.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Provider\", function() { return _components_Provider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/connectAdvanced */ \"../node_modules/react-redux/es/components/connectAdvanced.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"connectAdvanced\", function() { return _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Context */ \"../node_modules/react-redux/es/components/Context.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactReduxContext\", function() { return _components_Context__WEBPACK_IMPORTED_MODULE_2__[\"ReactReduxContext\"]; });\n\n/* harmony import */ var _connect_connect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./connect/connect */ \"../node_modules/react-redux/es/connect/connect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"connect\", function() { return _connect_connect__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcz9mZTZlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm92aWRlciBmcm9tICcuL2NvbXBvbmVudHMvUHJvdmlkZXInO1xuaW1wb3J0IGNvbm5lY3RBZHZhbmNlZCBmcm9tICcuL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkJztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IGNvbm5lY3QgZnJvbSAnLi9jb25uZWN0L2Nvbm5lY3QnO1xuZXhwb3J0IHsgUHJvdmlkZXIsIGNvbm5lY3RBZHZhbmNlZCwgUmVhY3RSZWR1eENvbnRleHQsIGNvbm5lY3QgfTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/utils/isPlainObject.js": -/*!*************************************************************!*\ - !*** ../node_modules/react-redux/es/utils/isPlainObject.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isPlainObject; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\r\n * @param {any} obj The object to inspect.\r\n * @returns {boolean} True if the argument appears to be a plain object.\r\n */\n\n\nfunction isPlainObject(obj) {\n if (_typeof(obj) !== 'object' || obj === null) return false;\n var proto = Object.getPrototypeOf(obj);\n if (proto === null) return true;\n var baseProto = proto;\n\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n return proto === baseProto;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL2lzUGxhaW5PYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL2lzUGxhaW5PYmplY3QuanM/NTg3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQHBhcmFtIHthbnl9IG9iaiBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBiYXNlUHJvdG8gPSBwcm90bztcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90bykgIT09IG51bGwpIHtcbiAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBwcm90byA9PT0gYmFzZVByb3RvO1xufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/utils/isPlainObject.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/utils/shallowEqual.js": -/*!************************************************************!*\ - !*** ../node_modules/react-redux/es/utils/shallowEqual.js ***! - \************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return shallowEqual; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3NoYWxsb3dFcXVhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvc2hhbGxvd0VxdWFsLmpzP2ZkM2MiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/utils/shallowEqual.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/utils/verifyPlainObject.js": -/*!*****************************************************************!*\ - !*** ../node_modules/react-redux/es/utils/verifyPlainObject.js ***! - \*****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return verifyPlainObject; });\n/* harmony import */ var _isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isPlainObject */ \"../node_modules/react-redux/es/utils/isPlainObject.js\");\n/* harmony import */ var _warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./warning */ \"../node_modules/react-redux/es/utils/warning.js\");\n\n\nfunction verifyPlainObject(value, displayName, methodName) {\n if (!Object(_isPlainObject__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n Object(_warning__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(methodName + \"() in \" + displayName + \" must return a plain object. Instead received \" + value + \".\");\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy92ZXJpZnlQbGFpbk9iamVjdC5qcz82Yzc4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuL3dhcm5pbmcnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5UGxhaW5PYmplY3QodmFsdWUsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICB3YXJuaW5nKG1ldGhvZE5hbWUgKyBcIigpIGluIFwiICsgZGlzcGxheU5hbWUgKyBcIiBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCBcIiArIHZhbHVlICsgXCIuXCIpO1xuICB9XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/utils/verifyPlainObject.js\n"); - -/***/ }), - -/***/ "../node_modules/react-redux/es/utils/warning.js": -/*!*******************************************************!*\ - !*** ../node_modules/react-redux/es/utils/warning.js ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return warning; });\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3dhcm5pbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3dhcm5pbmcuanM/YzQ3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXG4gIH0gY2F0Y2ggKGUpIHt9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cblxufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-redux/es/utils/warning.js\n"); - -/***/ }), - -/***/ "../node_modules/react-router-dom/esm/react-router-dom.js": -/*!****************************************************************!*\ - !*** ../node_modules/react-router-dom/esm/react-router-dom.js ***! - \****************************************************************/ -/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, __RouterContext, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter, BrowserRouter, HashRouter, Link, NavLink */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserRouter\", function() { return BrowserRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HashRouter\", function() { return HashRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Link\", function() { return Link; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavLink\", function() { return NavLink; });\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"MemoryRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Prompt\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Redirect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Route\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"StaticRouter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"Switch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__RouterContext\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"generatePath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useHistory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useLocation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useParams\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"useRouteMatch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return react_router__WEBPACK_IMPORTED_MODULE_0__[\"withRouter\"]; });\n\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"../node_modules/history/esm/history.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tiny-warning */ \"../node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tiny-invariant */ \"../node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createBrowserHistory\"])(_this.props);\n return _this;\n }\n\n var _proto = BrowserRouter.prototype;\n\n _proto.render = function render() {\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n history: this.history,\n children: this.props.children\n });\n };\n\n return BrowserRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (undefined !== \"production\") {\n BrowserRouter.propTypes = {\n basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n forceRefresh: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n keyLength: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number\n };\n\n BrowserRouter.prototype.componentDidMount = function () {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n };\n}\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\n\nvar HashRouter = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(HashRouter, _React$Component);\n\n function HashRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createHashHistory\"])(_this.props);\n return _this;\n }\n\n var _proto = HashRouter.prototype;\n\n _proto.render = function render() {\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"Router\"], {\n history: this.history,\n children: this.props.children\n });\n };\n\n return HashRouter;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.Component);\n\nif (undefined !== \"production\") {\n HashRouter.propTypes = {\n basename: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node,\n getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n hashType: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function () {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n return typeof to === \"function\" ? to(currentLocation) : to;\n};\n\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n return typeof to === \"string\" ? Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n var innerRef = _ref.innerRef,\n navigate = _ref.navigate,\n _onClick = _ref.onClick,\n rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n var target = rest.target;\n\n var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n onClick: function onClick(event) {\n try {\n if (_onClick) _onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && ( // ignore everything but left clicks\n !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"a\", props);\n});\n\nif (undefined !== \"production\") {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n var _ref2$component = _ref2.component,\n component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n replace = _ref2.replace,\n to = _ref2.to,\n innerRef = _ref2.innerRef,\n rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <Link> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false) : void 0;\n var history = context.history;\n var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n var href = location ? history.createHref(location) : \"\";\n\n var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, rest, {\n href: href,\n navigate: function navigate() {\n var location = resolveToLocation(to, context.location);\n var method = replace ? history.replace : history.push;\n method(location);\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component, props);\n });\n});\n\nif (undefined !== \"production\") {\n var toType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func]);\n var refType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({\n current: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.any\n })]);\n Link.displayName = \"Link\";\n Link.propTypes = {\n innerRef: refType,\n onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n replace: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n target: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n to: toType.isRequired\n };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef$1 = react__WEBPACK_IMPORTED_MODULE_2___default.a.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n classnames[_key] = arguments[_key];\n }\n\n return classnames.filter(function (i) {\n return i;\n }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n var _ref$ariaCurrent = _ref[\"aria-current\"],\n ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n _ref$activeClassName = _ref.activeClassName,\n activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n activeStyle = _ref.activeStyle,\n classNameProp = _ref.className,\n exact = _ref.exact,\n isActiveProp = _ref.isActive,\n locationProp = _ref.location,\n strict = _ref.strict,\n styleProp = _ref.style,\n to = _ref.to,\n innerRef = _ref.innerRef,\n rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__[\"__RouterContext\"].Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false, \"You should not use <NavLink> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(false) : void 0;\n var currentLocation = locationProp || context.location;\n var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n var match = escapedPath ? Object(react_router__WEBPACK_IMPORTED_MODULE_0__[\"matchPath\"])(currentLocation.pathname, {\n path: escapedPath,\n exact: exact,\n strict: strict\n }) : null;\n var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n var style = isActive ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, styleProp, {}, activeStyle) : styleProp;\n\n var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({\n \"aria-current\": isActive && ariaCurrent || null,\n className: className,\n style: style,\n to: toLocation\n }, rest); // React 15 compat\n\n\n if (forwardRefShim$1 !== forwardRef$1) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Link, props);\n });\n});\n\nif (undefined !== \"production\") {\n NavLink.displayName = \"NavLink\";\n var ariaCurrentType = prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n NavLink.propTypes = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_6__[\"default\"])({}, Link.propTypes, {\n \"aria-current\": ariaCurrentType,\n activeClassName: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n activeStyle: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string,\n exact: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func,\n location: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object,\n strict: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool,\n style: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object\n });\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci1kb20vZXNtL3JlYWN0LXJvdXRlci1kb20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy9Ccm93c2VyUm91dGVyLmpzP2ZjNTUiLCJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvSGFzaFJvdXRlci5qcz9iMjBiIiwid2VicGFjazovLy8uLi9tb2R1bGVzL3V0aWxzL2xvY2F0aW9uVXRpbHMuanM/YWZhMiIsIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy9MaW5rLmpzPzdkOWQiLCJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvTmF2TGluay5qcz9iNDU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJyZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJIaXN0b3J5IGFzIGNyZWF0ZUhpc3RvcnkgfSBmcm9tIFwiaGlzdG9yeVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInRpbnktd2FybmluZ1wiO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgdXNlcyBIVE1MNSBoaXN0b3J5LlxuICovXG5jbGFzcyBCcm93c2VyUm91dGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgaGlzdG9yeSA9IGNyZWF0ZUhpc3RvcnkodGhpcy5wcm9wcyk7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiA8Um91dGVyIGhpc3Rvcnk9e3RoaXMuaGlzdG9yeX0gY2hpbGRyZW49e3RoaXMucHJvcHMuY2hpbGRyZW59IC8+O1xuICB9XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIEJyb3dzZXJSb3V0ZXIucHJvcFR5cGVzID0ge1xuICAgIGJhc2VuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBmb3JjZVJlZnJlc2g6IFByb3BUeXBlcy5ib29sLFxuICAgIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICAgIGtleUxlbmd0aDogUHJvcFR5cGVzLm51bWJlclxuICB9O1xuXG4gIEJyb3dzZXJSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgd2FybmluZyhcbiAgICAgICF0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICBcIjxCcm93c2VyUm91dGVyPiBpZ25vcmVzIHRoZSBoaXN0b3J5IHByb3AuIFRvIHVzZSBhIGN1c3RvbSBoaXN0b3J5LCBcIiArXG4gICAgICAgIFwidXNlIGBpbXBvcnQgeyBSb3V0ZXIgfWAgaW5zdGVhZCBvZiBgaW1wb3J0IHsgQnJvd3NlclJvdXRlciBhcyBSb3V0ZXIgfWAuXCJcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBCcm93c2VyUm91dGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcInJlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaEhpc3RvcnkgYXMgY3JlYXRlSGlzdG9yeSB9IGZyb20gXCJoaXN0b3J5XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwidGlueS13YXJuaW5nXCI7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIGEgPFJvdXRlcj4gdGhhdCB1c2VzIHdpbmRvdy5sb2NhdGlvbi5oYXNoLlxuICovXG5jbGFzcyBIYXNoUm91dGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgaGlzdG9yeSA9IGNyZWF0ZUhpc3RvcnkodGhpcy5wcm9wcyk7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiA8Um91dGVyIGhpc3Rvcnk9e3RoaXMuaGlzdG9yeX0gY2hpbGRyZW49e3RoaXMucHJvcHMuY2hpbGRyZW59IC8+O1xuICB9XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIEhhc2hSb3V0ZXIucHJvcFR5cGVzID0ge1xuICAgIGJhc2VuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBnZXRVc2VyQ29uZmlybWF0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYXNoVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImhhc2hiYW5nXCIsIFwibm9zbGFzaFwiLCBcInNsYXNoXCJdKVxuICB9O1xuXG4gIEhhc2hSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgd2FybmluZyhcbiAgICAgICF0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICBcIjxIYXNoUm91dGVyPiBpZ25vcmVzIHRoZSBoaXN0b3J5IHByb3AuIFRvIHVzZSBhIGN1c3RvbSBoaXN0b3J5LCBcIiArXG4gICAgICAgIFwidXNlIGBpbXBvcnQgeyBSb3V0ZXIgfWAgaW5zdGVhZCBvZiBgaW1wb3J0IHsgSGFzaFJvdXRlciBhcyBSb3V0ZXIgfWAuXCJcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBIYXNoUm91dGVyO1xuIiwiaW1wb3J0IHsgY3JlYXRlTG9jYXRpb24gfSBmcm9tIFwiaGlzdG9yeVwiO1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVRvTG9jYXRpb24gPSAodG8sIGN1cnJlbnRMb2NhdGlvbikgPT5cbiAgdHlwZW9mIHRvID09PSBcImZ1bmN0aW9uXCIgPyB0byhjdXJyZW50TG9jYXRpb24pIDogdG87XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVUb0xvY2F0aW9uID0gKHRvLCBjdXJyZW50TG9jYXRpb24pID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIlxuICAgID8gY3JlYXRlTG9jYXRpb24odG8sIG51bGwsIG51bGwsIGN1cnJlbnRMb2NhdGlvbilcbiAgICA6IHRvO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IF9fUm91dGVyQ29udGV4dCBhcyBSb3V0ZXJDb250ZXh0IH0gZnJvbSBcInJlYWN0LXJvdXRlclwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcbmltcG9ydCB7IHJlc29sdmVUb0xvY2F0aW9uLCBub3JtYWxpemVUb0xvY2F0aW9uIH0gZnJvbSBcIi4vdXRpbHMvbG9jYXRpb25VdGlsc1wiO1xuXG4vLyBSZWFjdCAxNSBjb21wYXRcbmNvbnN0IGZvcndhcmRSZWZTaGltID0gQyA9PiBDO1xubGV0IHsgZm9yd2FyZFJlZiB9ID0gUmVhY3Q7XG5pZiAodHlwZW9mIGZvcndhcmRSZWYgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgZm9yd2FyZFJlZiA9IGZvcndhcmRSZWZTaGltO1xufVxuXG5mdW5jdGlvbiBpc01vZGlmaWVkRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuICEhKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkpO1xufVxuXG5jb25zdCBMaW5rQW5jaG9yID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGlubmVyUmVmLCAvLyBUT0RPOiBkZXByZWNhdGVcbiAgICAgIG5hdmlnYXRlLFxuICAgICAgb25DbGljayxcbiAgICAgIC4uLnJlc3RcbiAgICB9LFxuICAgIGZvcndhcmRlZFJlZlxuICApID0+IHtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcmVzdDtcblxuICAgIGxldCBwcm9wcyA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBvbkNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG9uQ2xpY2spIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgLy8gb25DbGljayBwcmV2ZW50ZWQgZGVmYXVsdFxuICAgICAgICAgIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgbGVmdCBjbGlja3NcbiAgICAgICAgICAoIXRhcmdldCB8fCB0YXJnZXQgPT09IFwiX3NlbGZcIikgJiYgLy8gbGV0IGJyb3dzZXIgaGFuZGxlIFwidGFyZ2V0PV9ibGFua1wiIGV0Yy5cbiAgICAgICAgICAhaXNNb2RpZmllZEV2ZW50KGV2ZW50KSAvLyBpZ25vcmUgY2xpY2tzIHdpdGggbW9kaWZpZXIga2V5c1xuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gUmVhY3QgMTUgY29tcGF0XG4gICAgaWYgKGZvcndhcmRSZWZTaGltICE9PSBmb3J3YXJkUmVmKSB7XG4gICAgICBwcm9wcy5yZWYgPSBmb3J3YXJkZWRSZWYgfHwgaW5uZXJSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzLnJlZiA9IGlubmVyUmVmO1xuICAgIH1cblxuICAgIHJldHVybiA8YSB7Li4ucHJvcHN9IC8+O1xuICB9XG4pO1xuXG5pZiAoX19ERVZfXykge1xuICBMaW5rQW5jaG9yLmRpc3BsYXlOYW1lID0gXCJMaW5rQW5jaG9yXCI7XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHJlbmRlcmluZyBhIGhpc3RvcnktYXdhcmUgPGE+LlxuICovXG5jb25zdCBMaW5rID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGNvbXBvbmVudCA9IExpbmtBbmNob3IsXG4gICAgICByZXBsYWNlLFxuICAgICAgdG8sXG4gICAgICBpbm5lclJlZiwgLy8gVE9ETzogZGVwcmVjYXRlXG4gICAgICAuLi5yZXN0XG4gICAgfSxcbiAgICBmb3J3YXJkZWRSZWZcbiAgKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSb3V0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7Y29udGV4dCA9PiB7XG4gICAgICAgICAgaW52YXJpYW50KGNvbnRleHQsIFwiWW91IHNob3VsZCBub3QgdXNlIDxMaW5rPiBvdXRzaWRlIGEgPFJvdXRlcj5cIik7XG5cbiAgICAgICAgICBjb25zdCB7IGhpc3RvcnkgfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IG5vcm1hbGl6ZVRvTG9jYXRpb24oXG4gICAgICAgICAgICByZXNvbHZlVG9Mb2NhdGlvbih0bywgY29udGV4dC5sb2NhdGlvbiksXG4gICAgICAgICAgICBjb250ZXh0LmxvY2F0aW9uXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGhyZWYgPSBsb2NhdGlvbiA/IGhpc3RvcnkuY3JlYXRlSHJlZihsb2NhdGlvbikgOiBcIlwiO1xuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICBuYXZpZ2F0ZSgpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSByZXNvbHZlVG9Mb2NhdGlvbih0bywgY29udGV4dC5sb2NhdGlvbik7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcGxhY2UgPyBoaXN0b3J5LnJlcGxhY2UgOiBoaXN0b3J5LnB1c2g7XG5cbiAgICAgICAgICAgICAgbWV0aG9kKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gUmVhY3QgMTUgY29tcGF0XG4gICAgICAgICAgaWYgKGZvcndhcmRSZWZTaGltICE9PSBmb3J3YXJkUmVmKSB7XG4gICAgICAgICAgICBwcm9wcy5yZWYgPSBmb3J3YXJkZWRSZWYgfHwgaW5uZXJSZWY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BzLmlubmVyUmVmID0gaW5uZXJSZWY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBwcm9wcyk7XG4gICAgICAgIH19XG4gICAgICA8L1JvdXRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxuKTtcblxuaWYgKF9fREVWX18pIHtcbiAgY29uc3QgdG9UeXBlID0gUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICBQcm9wVHlwZXMub2JqZWN0LFxuICAgIFByb3BUeXBlcy5mdW5jXG4gIF0pO1xuICBjb25zdCByZWZUeXBlID0gUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICBQcm9wVHlwZXMuc2hhcGUoeyBjdXJyZW50OiBQcm9wVHlwZXMuYW55IH0pXG4gIF0pO1xuXG4gIExpbmsuZGlzcGxheU5hbWUgPSBcIkxpbmtcIjtcblxuICBMaW5rLnByb3BUeXBlcyA9IHtcbiAgICBpbm5lclJlZjogcmVmVHlwZSxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICByZXBsYWNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG86IHRvVHlwZS5pc1JlcXVpcmVkXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbms7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBfX1JvdXRlckNvbnRleHQgYXMgUm91dGVyQ29udGV4dCwgbWF0Y2hQYXRoIH0gZnJvbSBcInJlYWN0LXJvdXRlclwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcbmltcG9ydCBMaW5rIGZyb20gXCIuL0xpbmtcIjtcbmltcG9ydCB7IHJlc29sdmVUb0xvY2F0aW9uLCBub3JtYWxpemVUb0xvY2F0aW9uIH0gZnJvbSBcIi4vdXRpbHMvbG9jYXRpb25VdGlsc1wiO1xuXG4vLyBSZWFjdCAxNSBjb21wYXRcbmNvbnN0IGZvcndhcmRSZWZTaGltID0gQyA9PiBDO1xubGV0IHsgZm9yd2FyZFJlZiB9ID0gUmVhY3Q7XG5pZiAodHlwZW9mIGZvcndhcmRSZWYgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgZm9yd2FyZFJlZiA9IGZvcndhcmRSZWZTaGltO1xufVxuXG5mdW5jdGlvbiBqb2luQ2xhc3NuYW1lcyguLi5jbGFzc25hbWVzKSB7XG4gIHJldHVybiBjbGFzc25hbWVzLmZpbHRlcihpID0+IGkpLmpvaW4oXCIgXCIpO1xufVxuXG4vKipcbiAqIEEgPExpbms+IHdyYXBwZXIgdGhhdCBrbm93cyBpZiBpdCdzIFwiYWN0aXZlXCIgb3Igbm90LlxuICovXG5jb25zdCBOYXZMaW5rID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50ID0gXCJwYWdlXCIsXG4gICAgICBhY3RpdmVDbGFzc05hbWUgPSBcImFjdGl2ZVwiLFxuICAgICAgYWN0aXZlU3R5bGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVByb3AsXG4gICAgICBleGFjdCxcbiAgICAgIGlzQWN0aXZlOiBpc0FjdGl2ZVByb3AsXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25Qcm9wLFxuICAgICAgc3RyaWN0LFxuICAgICAgc3R5bGU6IHN0eWxlUHJvcCxcbiAgICAgIHRvLFxuICAgICAgaW5uZXJSZWYsIC8vIFRPRE86IGRlcHJlY2F0ZVxuICAgICAgLi4ucmVzdFxuICAgIH0sXG4gICAgZm9yd2FyZGVkUmVmXG4gICkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Um91dGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAge2NvbnRleHQgPT4ge1xuICAgICAgICAgIGludmFyaWFudChjb250ZXh0LCBcIllvdSBzaG91bGQgbm90IHVzZSA8TmF2TGluaz4gb3V0c2lkZSBhIDxSb3V0ZXI+XCIpO1xuXG4gICAgICAgICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gbG9jYXRpb25Qcm9wIHx8IGNvbnRleHQubG9jYXRpb247XG4gICAgICAgICAgY29uc3QgdG9Mb2NhdGlvbiA9IG5vcm1hbGl6ZVRvTG9jYXRpb24oXG4gICAgICAgICAgICByZXNvbHZlVG9Mb2NhdGlvbih0bywgY3VycmVudExvY2F0aW9uKSxcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhdGlvblxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwYXRobmFtZTogcGF0aCB9ID0gdG9Mb2NhdGlvbjtcbiAgICAgICAgICAvLyBSZWdleCB0YWtlbiBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcGlsbGFyanMvcGF0aC10by1yZWdleHAvYmxvYi9tYXN0ZXIvaW5kZXguanMjTDIwMlxuICAgICAgICAgIGNvbnN0IGVzY2FwZWRQYXRoID1cbiAgICAgICAgICAgIHBhdGggJiYgcGF0aC5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfC9cXFxcXSkvZywgXCJcXFxcJDFcIik7XG5cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGVzY2FwZWRQYXRoXG4gICAgICAgICAgICA/IG1hdGNoUGF0aChjdXJyZW50TG9jYXRpb24ucGF0aG5hbWUsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBlc2NhcGVkUGF0aCxcbiAgICAgICAgICAgICAgICBleGFjdCxcbiAgICAgICAgICAgICAgICBzdHJpY3RcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9ICEhKGlzQWN0aXZlUHJvcFxuICAgICAgICAgICAgPyBpc0FjdGl2ZVByb3AobWF0Y2gsIGN1cnJlbnRMb2NhdGlvbilcbiAgICAgICAgICAgIDogbWF0Y2gpO1xuXG4gICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gaXNBY3RpdmVcbiAgICAgICAgICAgID8gam9pbkNsYXNzbmFtZXMoY2xhc3NOYW1lUHJvcCwgYWN0aXZlQ2xhc3NOYW1lKVxuICAgICAgICAgICAgOiBjbGFzc05hbWVQcm9wO1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gaXNBY3RpdmUgPyB7IC4uLnN0eWxlUHJvcCwgLi4uYWN0aXZlU3R5bGUgfSA6IHN0eWxlUHJvcDtcblxuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgXCJhcmlhLWN1cnJlbnRcIjogKGlzQWN0aXZlICYmIGFyaWFDdXJyZW50KSB8fCBudWxsLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICB0bzogdG9Mb2NhdGlvbixcbiAgICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gUmVhY3QgMTUgY29tcGF0XG4gICAgICAgICAgaWYgKGZvcndhcmRSZWZTaGltICE9PSBmb3J3YXJkUmVmKSB7XG4gICAgICAgICAgICBwcm9wcy5yZWYgPSBmb3J3YXJkZWRSZWYgfHwgaW5uZXJSZWY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BzLmlubmVyUmVmID0gaW5uZXJSZWY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIDxMaW5rIHsuLi5wcm9wc30gLz47XG4gICAgICAgIH19XG4gICAgICA8L1JvdXRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxuKTtcblxuaWYgKF9fREVWX18pIHtcbiAgTmF2TGluay5kaXNwbGF5TmFtZSA9IFwiTmF2TGlua1wiO1xuXG4gIGNvbnN0IGFyaWFDdXJyZW50VHlwZSA9IFByb3BUeXBlcy5vbmVPZihbXG4gICAgXCJwYWdlXCIsXG4gICAgXCJzdGVwXCIsXG4gICAgXCJsb2NhdGlvblwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwidGltZVwiLFxuICAgIFwidHJ1ZVwiXG4gIF0pO1xuXG4gIE5hdkxpbmsucHJvcFR5cGVzID0ge1xuICAgIC4uLkxpbmsucHJvcFR5cGVzLFxuICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50VHlwZSxcbiAgICBhY3RpdmVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4YWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0FjdGl2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3RyaWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZMaW5rO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BOzs7O0FBR0E7Ozs7Ozs7Ozs7O0FBQ0E7Ozs7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7Ozs7QUFKQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQURBOztBQ3BCQTs7Ozs7QUFHQTs7Ozs7Ozs7Ozs7QUFDQTs7Ozs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7OztBQUpBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQURBOzs7QUN2QkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQ0NBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7OztBQUdBO0FBQ0E7OztBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQWpCQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBekNBO0FBQ0E7QUE0Q0E7QUFDQTs7Ozs7OztBQU1BO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBUEE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBOUJBO0FBWkE7QUFDQTtBQWdEQTtBQUNBO0FBS0E7QUFHQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTs7O0FDNUhBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7OztBQUdBO0FBQUE7QUFBQTs7O0FBQ0E7QUFBQTtBQUFBOzs7Ozs7O0FBTUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUE3Q0E7QUFuQkE7QUFDQTtBQXNFQTtBQUNBO0FBRUE7QUFTQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBOzs7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-router-dom/esm/react-router-dom.js\n"); - -/***/ }), - -/***/ "../node_modules/react-router/esm/react-router.js": -/*!********************************************************!*\ - !*** ../node_modules/react-router/esm/react-router.js ***! - \********************************************************/ -/*! exports provided: MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, __RouterContext, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return MemoryRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return Prompt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return Redirect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return Route; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return Router; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return StaticRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return Switch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__RouterContext\", function() { return context; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generatePath\", function() { return generatePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return matchPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useHistory\", function() { return useHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useLocation\", function() { return useLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useParams\", function() { return useParams; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useRouteMatch\", function() { return useRouteMatch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return withRouter; });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! history */ \"../node_modules/history/esm/history.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-warning */ \"../node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! mini-create-react-context */ \"../node_modules/mini-create-react-context/dist/esm/index.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tiny-invariant */ \"../node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! path-to-regexp */ \"../node_modules/react-router/node_modules/path-to-regexp/index.js\");\n/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-is */ \"../node_modules/react-is/index.js\");\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_is__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! hoist-non-react-statics */ \"../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n // TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n var context = Object(mini_create_react_context__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n context.displayName = name;\n return context;\n};\n\nvar context = /*#__PURE__*/createNamedContext(\"Router\");\n/**\n * The public API for putting history on context.\n */\n\nvar Router = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Router, _React$Component);\n\n Router.computeRootMatch = function computeRootMatch(pathname) {\n return {\n path: \"/\",\n url: \"/\",\n params: {},\n isExact: pathname === \"/\"\n };\n };\n\n function Router(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n location: props.history.location\n }; // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any <Redirect>s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the <Router> is mounted.\n\n _this._isMounted = false;\n _this._pendingLocation = null;\n\n if (!props.staticContext) {\n _this.unlisten = props.history.listen(function (location) {\n if (_this._isMounted) {\n _this.setState({\n location: location\n });\n } else {\n _this._pendingLocation = location;\n }\n });\n }\n\n return _this;\n }\n\n var _proto = Router.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({\n location: this._pendingLocation\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.unlisten) this.unlisten();\n };\n\n _proto.render = function render() {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n children: this.props.children || null,\n value: {\n history: this.props.history,\n location: this.state.location,\n match: Router.computeRootMatch(this.state.location.pathname),\n staticContext: this.props.staticContext\n }\n });\n };\n\n return Router;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (undefined !== \"production\") {\n Router.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n history: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired,\n staticContext: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n };\n\n Router.prototype.componentDidUpdate = function (prevProps) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(prevProps.history === this.props.history, \"You cannot change <Router history>\") : void 0;\n };\n}\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\n\nvar MemoryRouter = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(MemoryRouter, _React$Component);\n\n function MemoryRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createMemoryHistory\"])(_this.props);\n return _this;\n }\n\n var _proto = MemoryRouter.prototype;\n\n _proto.render = function render() {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return MemoryRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (undefined !== \"production\") {\n MemoryRouter.propTypes = {\n initialEntries: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.array,\n initialIndex: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n getUserConfirmation: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n keyLength: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node\n };\n\n MemoryRouter.prototype.componentDidMount = function () {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : void 0;\n };\n}\n\nvar Lifecycle = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Lifecycle, _React$Component);\n\n function Lifecycle() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return Lifecycle;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\n\nfunction Prompt(_ref) {\n var message = _ref.message,\n _ref$when = _ref.when,\n when = _ref$when === void 0 ? true : _ref$when;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Prompt> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n if (!when || context.staticContext) return null;\n var method = context.history.block;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n onMount: function onMount(self) {\n self.release = method(message);\n },\n onUpdate: function onUpdate(self, prevProps) {\n if (prevProps.message !== message) {\n self.release();\n self.release = method(message);\n }\n },\n onUnmount: function onUnmount(self) {\n self.release();\n },\n message: message\n });\n });\n}\n\nif (undefined !== \"production\") {\n var messageType = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string]);\n Prompt.propTypes = {\n when: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n message: messageType.isRequired\n };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n var generator = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default.a.compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n if (path === void 0) {\n path = \"/\";\n }\n\n if (params === void 0) {\n params = {};\n }\n\n return path === \"/\" ? path : compilePath(path)(params, {\n pretty: true\n });\n}\n/**\n * The public API for navigating programmatically with a component.\n */\n\n\nfunction Redirect(_ref) {\n var computedMatch = _ref.computedMatch,\n to = _ref.to,\n _ref$push = _ref.push,\n push = _ref$push === void 0 ? false : _ref$push;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Redirect> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n var history = context.history,\n staticContext = context.staticContext;\n var method = push ? history.push : history.replace;\n var location = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, to, {\n pathname: generatePath(to.pathname, computedMatch.params)\n }) : to); // When rendering in a static context,\n // set the new location immediately.\n\n if (staticContext) {\n method(location);\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Lifecycle, {\n onMount: function onMount() {\n method(location);\n },\n onUpdate: function onUpdate(self, prevProps) {\n var prevLocation = Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(prevProps.to);\n\n if (!Object(history__WEBPACK_IMPORTED_MODULE_3__[\"locationsAreEqual\"])(prevLocation, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n key: prevLocation.key\n }))) {\n method(location);\n }\n },\n to: to\n });\n });\n}\n\nif (undefined !== \"production\") {\n Redirect.propTypes = {\n push: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n from: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n to: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object]).isRequired\n };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n if (pathCache[path]) return pathCache[path];\n var keys = [];\n var regexp = path_to_regexp__WEBPACK_IMPORTED_MODULE_8___default()(path, keys, options);\n var result = {\n regexp: regexp,\n keys: keys\n };\n\n if (cacheCount$1 < cacheLimit$1) {\n pathCache[path] = result;\n cacheCount$1++;\n }\n\n return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = {\n path: options\n };\n }\n\n var _options = options,\n path = _options.path,\n _options$exact = _options.exact,\n exact = _options$exact === void 0 ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === void 0 ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n var paths = [].concat(path);\n return paths.reduce(function (matched, path) {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n var _compilePath = compilePath$1(path, {\n end: exact,\n strict: strict,\n sensitive: sensitive\n }),\n regexp = _compilePath.regexp,\n keys = _compilePath.keys;\n\n var match = regexp.exec(pathname);\n if (!match) return null;\n var url = match[0],\n values = match.slice(1);\n var isExact = pathname === url;\n if (exact && !isExact) return null;\n return {\n path: path,\n // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url,\n // the matched portion of the URL\n isExact: isExact,\n // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nfunction isEmptyChildren(children) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n var value = children(props);\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value !== undefined, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : void 0;\n return value || null;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Route, _React$Component);\n\n function Route() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Route.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context$1) {\n !context$1 ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Route> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n var location = _this.props.location || context$1.location;\n var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;\n\n var props = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, context$1, {\n location: location,\n match: match\n });\n\n var _this$props = _this.props,\n children = _this$props.children,\n component = _this$props.component,\n render = _this$props.render; // Preact uses an empty array as children by\n // default, so use null if that's the case.\n\n if (Array.isArray(children) && children.length === 0) {\n children = null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Provider, {\n value: props\n }, props.match ? children ? typeof children === \"function\" ? undefined !== \"production\" ? evalChildrenDev(children, props, _this.props.path) : children(props) : children : component ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component, props) : render ? render(props) : null : typeof children === \"function\" ? undefined !== \"production\" ? evalChildrenDev(children, props, _this.props.path) : children(props) : null);\n });\n };\n\n return Route;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (undefined !== \"production\") {\n Route.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node]),\n component: function component(props, propName) {\n if (props[propName] && !Object(react_is__WEBPACK_IMPORTED_MODULE_9__[\"isValidElementType\"])(props[propName])) {\n return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n }\n },\n exact: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n path: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string)]),\n render: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,\n sensitive: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,\n strict: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool\n };\n\n Route.prototype.componentDidMount = function () {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : void 0;\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : void 0;\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : void 0;\n };\n\n Route.prototype.componentDidUpdate = function (prevProps) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n };\n}\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n pathname: addLeadingSlash(basename) + location.pathname\n });\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n var base = addLeadingSlash(basename);\n if (location.pathname.indexOf(base) !== 0) return location;\n return Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, location, {\n pathname: location.pathname.substr(base.length)\n });\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createPath\"])(location);\n}\n\nfunction staticHandler(methodName) {\n return function () {\n undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You cannot %s with <StaticRouter>\", methodName) : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false);\n };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(StaticRouter, _React$Component);\n\n function StaticRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handlePush = function (location) {\n return _this.navigateTo(location, \"PUSH\");\n };\n\n _this.handleReplace = function (location) {\n return _this.navigateTo(location, \"REPLACE\");\n };\n\n _this.handleListen = function () {\n return noop;\n };\n\n _this.handleBlock = function () {\n return noop;\n };\n\n return _this;\n }\n\n var _proto = StaticRouter.prototype;\n\n _proto.navigateTo = function navigateTo(location, action) {\n var _this$props = this.props,\n _this$props$basename = _this$props.basename,\n basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n _this$props$context = _this$props.context,\n context = _this$props$context === void 0 ? {} : _this$props$context;\n context.action = action;\n context.location = addBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location));\n context.url = createURL(context.location);\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n _this$props2$basename = _this$props2.basename,\n basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n _this$props2$context = _this$props2.context,\n context = _this$props2$context === void 0 ? {} : _this$props2$context,\n _this$props2$location = _this$props2.location,\n location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n rest = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n var history = {\n createHref: function createHref(path) {\n return addLeadingSlash(basename + createURL(path));\n },\n action: \"POP\",\n location: stripBasename(basename, Object(history__WEBPACK_IMPORTED_MODULE_3__[\"createLocation\"])(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Router, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, rest, {\n history: history,\n staticContext: context\n }));\n };\n\n return StaticRouter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (undefined !== \"production\") {\n StaticRouter.propTypes = {\n basename: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,\n context: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object,\n location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n };\n\n StaticRouter.prototype.componentDidMount = function () {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : void 0;\n };\n}\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\n\nvar Switch = /*#__PURE__*/function (_React$Component) {\n Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Switch, _React$Component);\n\n function Switch() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Switch.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <Switch> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n var location = _this.props.location || context.location;\n var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two <Route>s that render the same\n // component at different URLs.\n\n react__WEBPACK_IMPORTED_MODULE_1___default.a.Children.forEach(_this.props.children, function (child) {\n if (match == null && react__WEBPACK_IMPORTED_MODULE_1___default.a.isValidElement(child)) {\n element = child;\n var path = child.props.path || child.props.from;\n match = path ? matchPath(location.pathname, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, child.props, {\n path: path\n })) : context.match;\n }\n });\n return match ? react__WEBPACK_IMPORTED_MODULE_1___default.a.cloneElement(element, {\n location: location,\n computedMatch: match\n }) : null;\n });\n };\n\n return Switch;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component);\n\nif (undefined !== \"production\") {\n Switch.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node,\n location: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object\n };\n\n Switch.prototype.componentDidUpdate = function (prevProps) {\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n undefined !== \"production\" ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n };\n}\n/**\n * A public higher-order component to access the imperative API\n */\n\n\nfunction withRouter(Component) {\n var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n var C = function C(props) {\n var wrappedComponentRef = props.wrappedComponentRef,\n remainingProps = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(props, [\"wrappedComponentRef\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(context.Consumer, null, function (context) {\n !context ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Component, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({}, remainingProps, context, {\n ref: wrappedComponentRef\n }));\n });\n };\n\n C.displayName = displayName;\n C.WrappedComponent = Component;\n\n if (undefined !== \"production\") {\n C.propTypes = {\n wrappedComponentRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object])\n };\n }\n\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_11___default()(C, Component);\n}\n\nvar useContext = react__WEBPACK_IMPORTED_MODULE_1___default.a.useContext;\n\nfunction useHistory() {\n if (undefined !== \"production\") {\n !(typeof useContext === \"function\") ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useHistory()\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n }\n\n return useContext(context).history;\n}\n\nfunction useLocation() {\n if (undefined !== \"production\") {\n !(typeof useContext === \"function\") ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useLocation()\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n }\n\n return useContext(context).location;\n}\n\nfunction useParams() {\n if (undefined !== \"production\") {\n !(typeof useContext === \"function\") ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useParams()\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n }\n\n var match = useContext(context).match;\n return match ? match.params : {};\n}\n\nfunction useRouteMatch(path) {\n if (undefined !== \"production\") {\n !(typeof useContext === \"function\") ? undefined !== \"production\" ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false, \"You must use React >= 16.8 in order to use useRouteMatch()\") : Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(false) : void 0;\n }\n\n return path ? matchPath(useLocation().pathname, path) : useContext(context).match;\n}\n\nif (undefined !== \"production\") {\n if (typeof window !== \"undefined\") {\n var global = window;\n var key = \"__react_router_build__\";\n var buildNames = {\n cjs: \"CommonJS\",\n esm: \"ES modules\",\n umd: \"UMD\"\n };\n\n if (global[key] && global[key] !== \"esm\") {\n var initialBuildName = buildNames[global[key]];\n var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n // loading 2 different builds.\n\n throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n }\n\n global[key] = \"esm\";\n }\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9lc20vcmVhY3Qtcm91dGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvUm91dGVyQ29udGV4dC5qcz9lNThjIiwid2VicGFjazovLy8uLi9tb2R1bGVzL1JvdXRlci5qcz9kYjJhIiwid2VicGFjazovLy8uLi9tb2R1bGVzL01lbW9yeVJvdXRlci5qcz83MmUyIiwid2VicGFjazovLy8uLi9tb2R1bGVzL0xpZmVjeWNsZS5qcz85NGM5Iiwid2VicGFjazovLy8uLi9tb2R1bGVzL1Byb21wdC5qcz81YmIxIiwid2VicGFjazovLy8uLi9tb2R1bGVzL2dlbmVyYXRlUGF0aC5qcz81NjZjIiwid2VicGFjazovLy8uLi9tb2R1bGVzL1JlZGlyZWN0LmpzPzcwMGMiLCJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvbWF0Y2hQYXRoLmpzPzM2M2QiLCJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvUm91dGUuanM/ZDY1NCIsIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy9TdGF0aWNSb3V0ZXIuanM/NTdkZiIsIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy9Td2l0Y2guanM/MTdhMSIsIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy93aXRoUm91dGVyLmpzP2VhYzkiLCJ3ZWJwYWNrOi8vLy4uL21vZHVsZXMvaG9va3MuanM/MjcyMSIsIndlYnBhY2s6Ly8vLi4vbW9kdWxlcy9pbmRleC5qcz84ZTg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IFJlcGxhY2Ugd2l0aCBSZWFjdC5jcmVhdGVDb250ZXh0IG9uY2Ugd2UgY2FuIGFzc3VtZSBSZWFjdCAxNitcbmltcG9ydCBjcmVhdGVDb250ZXh0IGZyb20gXCJtaW5pLWNyZWF0ZS1yZWFjdC1jb250ZXh0XCI7XG5cbmNvbnN0IGNyZWF0ZU5hbWVkQ29udGV4dCA9IG5hbWUgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gY3JlYXRlQ29udGV4dCgpO1xuICBjb250ZXh0LmRpc3BsYXlOYW1lID0gbmFtZTtcblxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IGNvbnRleHQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZU5hbWVkQ29udGV4dChcIlJvdXRlclwiKTtcbmV4cG9ydCBkZWZhdWx0IGNvbnRleHQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwidGlueS13YXJuaW5nXCI7XG5cbmltcG9ydCBSb3V0ZXJDb250ZXh0IGZyb20gXCIuL1JvdXRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcHV0dGluZyBoaXN0b3J5IG9uIGNvbnRleHQuXG4gKi9cbmNsYXNzIFJvdXRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBjb21wdXRlUm9vdE1hdGNoKHBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIHsgcGF0aDogXCIvXCIsIHVybDogXCIvXCIsIHBhcmFtczoge30sIGlzRXhhY3Q6IHBhdGhuYW1lID09PSBcIi9cIiB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbG9jYXRpb246IHByb3BzLmhpc3RvcnkubG9jYXRpb25cbiAgICB9O1xuXG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIFdlIGhhdmUgdG8gc3RhcnQgbGlzdGVuaW5nIGZvciBsb2NhdGlvblxuICAgIC8vIGNoYW5nZXMgaGVyZSBpbiB0aGUgY29uc3RydWN0b3IgaW4gY2FzZSB0aGVyZSBhcmUgYW55IDxSZWRpcmVjdD5zXG4gICAgLy8gb24gdGhlIGluaXRpYWwgcmVuZGVyLiBJZiB0aGVyZSBhcmUsIHRoZXkgd2lsbCByZXBsYWNlL3B1c2ggd2hlblxuICAgIC8vIHRoZXkgbW91bnQgYW5kIHNpbmNlIGNETSBmaXJlcyBpbiBjaGlsZHJlbiBiZWZvcmUgcGFyZW50cywgd2UgbWF5XG4gICAgLy8gZ2V0IGEgbmV3IGxvY2F0aW9uIGJlZm9yZSB0aGUgPFJvdXRlcj4gaXMgbW91bnRlZC5cbiAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nTG9jYXRpb24gPSBudWxsO1xuXG4gICAgaWYgKCFwcm9wcy5zdGF0aWNDb250ZXh0KSB7XG4gICAgICB0aGlzLnVubGlzdGVuID0gcHJvcHMuaGlzdG9yeS5saXN0ZW4obG9jYXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb3VudGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvY2F0aW9uIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3BlbmRpbmdMb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdMb2NhdGlvbikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvY2F0aW9uOiB0aGlzLl9wZW5kaW5nTG9jYXRpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMudW5saXN0ZW4pIHRoaXMudW5saXN0ZW4oKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJvdXRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgY2hpbGRyZW49e3RoaXMucHJvcHMuY2hpbGRyZW4gfHwgbnVsbH1cbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBoaXN0b3J5OiB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgICAgbG9jYXRpb246IHRoaXMuc3RhdGUubG9jYXRpb24sXG4gICAgICAgICAgbWF0Y2g6IFJvdXRlci5jb21wdXRlUm9vdE1hdGNoKHRoaXMuc3RhdGUubG9jYXRpb24ucGF0aG5hbWUpLFxuICAgICAgICAgIHN0YXRpY0NvbnRleHQ6IHRoaXMucHJvcHMuc3RhdGljQ29udGV4dFxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIFJvdXRlci5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBzdGF0aWNDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbihwcmV2UHJvcHMpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgcHJldlByb3BzLmhpc3RvcnkgPT09IHRoaXMucHJvcHMuaGlzdG9yeSxcbiAgICAgIFwiWW91IGNhbm5vdCBjaGFuZ2UgPFJvdXRlciBoaXN0b3J5PlwiXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTWVtb3J5SGlzdG9yeSBhcyBjcmVhdGVIaXN0b3J5IH0gZnJvbSBcImhpc3RvcnlcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJ0aW55LXdhcm5pbmdcIjtcblxuaW1wb3J0IFJvdXRlciBmcm9tIFwiLi9Sb3V0ZXJcIjtcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgYSA8Um91dGVyPiB0aGF0IHN0b3JlcyBsb2NhdGlvbiBpbiBtZW1vcnkuXG4gKi9cbmNsYXNzIE1lbW9yeVJvdXRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KHRoaXMucHJvcHMpO1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPFJvdXRlciBoaXN0b3J5PXt0aGlzLmhpc3Rvcnl9IGNoaWxkcmVuPXt0aGlzLnByb3BzLmNoaWxkcmVufSAvPjtcbiAgfVxufVxuXG5pZiAoX19ERVZfXykge1xuICBNZW1vcnlSb3V0ZXIucHJvcFR5cGVzID0ge1xuICAgIGluaXRpYWxFbnRyaWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaW5pdGlhbEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICAgIGtleUxlbmd0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbiAgfTtcblxuICBNZW1vcnlSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgd2FybmluZyhcbiAgICAgICF0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICBcIjxNZW1vcnlSb3V0ZXI+IGlnbm9yZXMgdGhlIGhpc3RvcnkgcHJvcC4gVG8gdXNlIGEgY3VzdG9tIGhpc3RvcnksIFwiICtcbiAgICAgICAgXCJ1c2UgYGltcG9ydCB7IFJvdXRlciB9YCBpbnN0ZWFkIG9mIGBpbXBvcnQgeyBNZW1vcnlSb3V0ZXIgYXMgUm91dGVyIH1gLlwiXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVtb3J5Um91dGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbk1vdW50KSB0aGlzLnByb3BzLm9uTW91bnQuY2FsbCh0aGlzLCB0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblVwZGF0ZSkgdGhpcy5wcm9wcy5vblVwZGF0ZS5jYWxsKHRoaXMsIHRoaXMsIHByZXZQcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblVubW91bnQpIHRoaXMucHJvcHMub25Vbm1vdW50LmNhbGwodGhpcywgdGhpcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcblxuaW1wb3J0IExpZmVjeWNsZSBmcm9tIFwiLi9MaWZlY3ljbGVcIjtcbmltcG9ydCBSb3V0ZXJDb250ZXh0IGZyb20gXCIuL1JvdXRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyIGJlZm9yZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhIHNjcmVlbi5cbiAqL1xuZnVuY3Rpb24gUHJvbXB0KHsgbWVzc2FnZSwgd2hlbiA9IHRydWUgfSkge1xuICByZXR1cm4gKFxuICAgIDxSb3V0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge2NvbnRleHQgPT4ge1xuICAgICAgICBpbnZhcmlhbnQoY29udGV4dCwgXCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFByb21wdD4gb3V0c2lkZSBhIDxSb3V0ZXI+XCIpO1xuXG4gICAgICAgIGlmICghd2hlbiB8fCBjb250ZXh0LnN0YXRpY0NvbnRleHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGNvbnRleHQuaGlzdG9yeS5ibG9jaztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxMaWZlY3ljbGVcbiAgICAgICAgICAgIG9uTW91bnQ9e3NlbGYgPT4ge1xuICAgICAgICAgICAgICBzZWxmLnJlbGVhc2UgPSBtZXRob2QobWVzc2FnZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25VcGRhdGU9eyhzZWxmLCBwcmV2UHJvcHMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHByZXZQcm9wcy5tZXNzYWdlICE9PSBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlID0gbWV0aG9kKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25Vbm1vdW50PXtzZWxmID0+IHtcbiAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L1JvdXRlckNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIGNvbnN0IG1lc3NhZ2VUeXBlID0gUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zdHJpbmddKTtcblxuICBQcm9tcHQucHJvcFR5cGVzID0ge1xuICAgIHdoZW46IFByb3BUeXBlcy5ib29sLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2VUeXBlLmlzUmVxdWlyZWRcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvbXB0O1xuIiwiaW1wb3J0IHBhdGhUb1JlZ2V4cCBmcm9tIFwicGF0aC10by1yZWdleHBcIjtcblxuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IGNhY2hlTGltaXQgPSAxMDAwMDtcbmxldCBjYWNoZUNvdW50ID0gMDtcblxuZnVuY3Rpb24gY29tcGlsZVBhdGgocGF0aCkge1xuICBpZiAoY2FjaGVbcGF0aF0pIHJldHVybiBjYWNoZVtwYXRoXTtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBwYXRoVG9SZWdleHAuY29tcGlsZShwYXRoKTtcblxuICBpZiAoY2FjaGVDb3VudCA8IGNhY2hlTGltaXQpIHtcbiAgICBjYWNoZVtwYXRoXSA9IGdlbmVyYXRvcjtcbiAgICBjYWNoZUNvdW50Kys7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yO1xufVxuXG4vKipcbiAqIFB1YmxpYyBBUEkgZm9yIGdlbmVyYXRpbmcgYSBVUkwgcGF0aG5hbWUgZnJvbSBhIHBhdGggYW5kIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlUGF0aChwYXRoID0gXCIvXCIsIHBhcmFtcyA9IHt9KSB7XG4gIHJldHVybiBwYXRoID09PSBcIi9cIiA/IHBhdGggOiBjb21waWxlUGF0aChwYXRoKShwYXJhbXMsIHsgcHJldHR5OiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZW5lcmF0ZVBhdGg7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2NhdGlvbiwgbG9jYXRpb25zQXJlRXF1YWwgfSBmcm9tIFwiaGlzdG9yeVwiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcblxuaW1wb3J0IExpZmVjeWNsZSBmcm9tIFwiLi9MaWZlY3ljbGVcIjtcbmltcG9ydCBSb3V0ZXJDb250ZXh0IGZyb20gXCIuL1JvdXRlckNvbnRleHRcIjtcbmltcG9ydCBnZW5lcmF0ZVBhdGggZnJvbSBcIi4vZ2VuZXJhdGVQYXRoXCI7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIG5hdmlnYXRpbmcgcHJvZ3JhbW1hdGljYWxseSB3aXRoIGEgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSZWRpcmVjdCh7IGNvbXB1dGVkTWF0Y2gsIHRvLCBwdXNoID0gZmFsc2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxSb3V0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge2NvbnRleHQgPT4ge1xuICAgICAgICBpbnZhcmlhbnQoY29udGV4dCwgXCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFJlZGlyZWN0PiBvdXRzaWRlIGEgPFJvdXRlcj5cIik7XG5cbiAgICAgICAgY29uc3QgeyBoaXN0b3J5LCBzdGF0aWNDb250ZXh0IH0gPSBjb250ZXh0O1xuXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHB1c2ggPyBoaXN0b3J5LnB1c2ggOiBoaXN0b3J5LnJlcGxhY2U7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oXG4gICAgICAgICAgY29tcHV0ZWRNYXRjaFxuICAgICAgICAgICAgPyB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBnZW5lcmF0ZVBhdGgodG8sIGNvbXB1dGVkTWF0Y2gucGFyYW1zKVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRvLFxuICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IGdlbmVyYXRlUGF0aCh0by5wYXRobmFtZSwgY29tcHV0ZWRNYXRjaC5wYXJhbXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0b1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFdoZW4gcmVuZGVyaW5nIGluIGEgc3RhdGljIGNvbnRleHQsXG4gICAgICAgIC8vIHNldCB0aGUgbmV3IGxvY2F0aW9uIGltbWVkaWF0ZWx5LlxuICAgICAgICBpZiAoc3RhdGljQ29udGV4dCkge1xuICAgICAgICAgIG1ldGhvZChsb2NhdGlvbik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxMaWZlY3ljbGVcbiAgICAgICAgICAgIG9uTW91bnQ9eygpID0+IHtcbiAgICAgICAgICAgICAgbWV0aG9kKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblVwZGF0ZT17KHNlbGYsIHByZXZQcm9wcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2TG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwcmV2UHJvcHMudG8pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWxvY2F0aW9uc0FyZUVxdWFsKHByZXZMb2NhdGlvbiwge1xuICAgICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICBrZXk6IHByZXZMb2NhdGlvbi5rZXlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtZXRob2QobG9jYXRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdG89e3RvfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvUm91dGVyQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn1cblxuaWYgKF9fREVWX18pIHtcbiAgUmVkaXJlY3QucHJvcFR5cGVzID0ge1xuICAgIHB1c2g6IFByb3BUeXBlcy5ib29sLFxuICAgIGZyb206IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG86IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKS5pc1JlcXVpcmVkXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlZGlyZWN0O1xuIiwiaW1wb3J0IHBhdGhUb1JlZ2V4cCBmcm9tIFwicGF0aC10by1yZWdleHBcIjtcblxuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IGNhY2hlTGltaXQgPSAxMDAwMDtcbmxldCBjYWNoZUNvdW50ID0gMDtcblxuZnVuY3Rpb24gY29tcGlsZVBhdGgocGF0aCwgb3B0aW9ucykge1xuICBjb25zdCBjYWNoZUtleSA9IGAke29wdGlvbnMuZW5kfSR7b3B0aW9ucy5zdHJpY3R9JHtvcHRpb25zLnNlbnNpdGl2ZX1gO1xuICBjb25zdCBwYXRoQ2FjaGUgPSBjYWNoZVtjYWNoZUtleV0gfHwgKGNhY2hlW2NhY2hlS2V5XSA9IHt9KTtcblxuICBpZiAocGF0aENhY2hlW3BhdGhdKSByZXR1cm4gcGF0aENhY2hlW3BhdGhdO1xuXG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgY29uc3QgcmVnZXhwID0gcGF0aFRvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpO1xuICBjb25zdCByZXN1bHQgPSB7IHJlZ2V4cCwga2V5cyB9O1xuXG4gIGlmIChjYWNoZUNvdW50IDwgY2FjaGVMaW1pdCkge1xuICAgIHBhdGhDYWNoZVtwYXRoXSA9IHJlc3VsdDtcbiAgICBjYWNoZUNvdW50Kys7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFB1YmxpYyBBUEkgZm9yIG1hdGNoaW5nIGEgVVJMIHBhdGhuYW1lIHRvIGEgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hQYXRoKHBhdGhuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0geyBwYXRoOiBvcHRpb25zIH07XG4gIH1cblxuICBjb25zdCB7IHBhdGgsIGV4YWN0ID0gZmFsc2UsIHN0cmljdCA9IGZhbHNlLCBzZW5zaXRpdmUgPSBmYWxzZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBwYXRocyA9IFtdLmNvbmNhdChwYXRoKTtcblxuICByZXR1cm4gcGF0aHMucmVkdWNlKChtYXRjaGVkLCBwYXRoKSA9PiB7XG4gICAgaWYgKCFwYXRoICYmIHBhdGggIT09IFwiXCIpIHJldHVybiBudWxsO1xuICAgIGlmIChtYXRjaGVkKSByZXR1cm4gbWF0Y2hlZDtcblxuICAgIGNvbnN0IHsgcmVnZXhwLCBrZXlzIH0gPSBjb21waWxlUGF0aChwYXRoLCB7XG4gICAgICBlbmQ6IGV4YWN0LFxuICAgICAgc3RyaWN0LFxuICAgICAgc2Vuc2l0aXZlXG4gICAgfSk7XG4gICAgY29uc3QgbWF0Y2ggPSByZWdleHAuZXhlYyhwYXRobmFtZSk7XG5cbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IFt1cmwsIC4uLnZhbHVlc10gPSBtYXRjaDtcbiAgICBjb25zdCBpc0V4YWN0ID0gcGF0aG5hbWUgPT09IHVybDtcblxuICAgIGlmIChleGFjdCAmJiAhaXNFeGFjdCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCwgLy8gdGhlIHBhdGggdXNlZCB0byBtYXRjaFxuICAgICAgdXJsOiBwYXRoID09PSBcIi9cIiAmJiB1cmwgPT09IFwiXCIgPyBcIi9cIiA6IHVybCwgLy8gdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgVVJMXG4gICAgICBpc0V4YWN0LCAvLyB3aGV0aGVyIG9yIG5vdCB3ZSBtYXRjaGVkIGV4YWN0bHlcbiAgICAgIHBhcmFtczoga2V5cy5yZWR1Y2UoKG1lbW8sIGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgbWVtb1trZXkubmFtZV0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH0sIHt9KVxuICAgIH07XG4gIH0sIG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaFBhdGg7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3QtaXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcInRpbnktaW52YXJpYW50XCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwidGlueS13YXJuaW5nXCI7XG5cbmltcG9ydCBSb3V0ZXJDb250ZXh0IGZyb20gXCIuL1JvdXRlckNvbnRleHRcIjtcbmltcG9ydCBtYXRjaFBhdGggZnJvbSBcIi4vbWF0Y2hQYXRoXCI7XG5cbmZ1bmN0aW9uIGlzRW1wdHlDaGlsZHJlbihjaGlsZHJlbikge1xuICByZXR1cm4gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09PSAwO1xufVxuXG5mdW5jdGlvbiBldmFsQ2hpbGRyZW5EZXYoY2hpbGRyZW4sIHByb3BzLCBwYXRoKSB7XG4gIGNvbnN0IHZhbHVlID0gY2hpbGRyZW4ocHJvcHMpO1xuXG4gIHdhcm5pbmcoXG4gICAgdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICBcIllvdSByZXR1cm5lZCBgdW5kZWZpbmVkYCBmcm9tIHRoZSBgY2hpbGRyZW5gIGZ1bmN0aW9uIG9mIFwiICtcbiAgICAgIGA8Um91dGUke3BhdGggPyBgIHBhdGg9XCIke3BhdGh9XCJgIDogXCJcIn0+LCBidXQgeW91IGAgK1xuICAgICAgXCJzaG91bGQgaGF2ZSByZXR1cm5lZCBhIFJlYWN0IGVsZW1lbnQgb3IgYG51bGxgXCJcbiAgKTtcblxuICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgbWF0Y2hpbmcgYSBzaW5nbGUgcGF0aCBhbmQgcmVuZGVyaW5nLlxuICovXG5jbGFzcyBSb3V0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJvdXRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtjb250ZXh0ID0+IHtcbiAgICAgICAgICBpbnZhcmlhbnQoY29udGV4dCwgXCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFJvdXRlPiBvdXRzaWRlIGEgPFJvdXRlcj5cIik7XG5cbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgY29udGV4dC5sb2NhdGlvbjtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMucHJvcHMuY29tcHV0ZWRNYXRjaFxuICAgICAgICAgICAgPyB0aGlzLnByb3BzLmNvbXB1dGVkTWF0Y2ggLy8gPFN3aXRjaD4gYWxyZWFkeSBjb21wdXRlZCB0aGUgbWF0Y2ggZm9yIHVzXG4gICAgICAgICAgICA6IHRoaXMucHJvcHMucGF0aFxuICAgICAgICAgICAgPyBtYXRjaFBhdGgobG9jYXRpb24ucGF0aG5hbWUsIHRoaXMucHJvcHMpXG4gICAgICAgICAgICA6IGNvbnRleHQubWF0Y2g7XG5cbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHsgLi4uY29udGV4dCwgbG9jYXRpb24sIG1hdGNoIH07XG5cbiAgICAgICAgICBsZXQgeyBjaGlsZHJlbiwgY29tcG9uZW50LCByZW5kZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgICAvLyBQcmVhY3QgdXNlcyBhbiBlbXB0eSBhcnJheSBhcyBjaGlsZHJlbiBieVxuICAgICAgICAgIC8vIGRlZmF1bHQsIHNvIHVzZSBudWxsIGlmIHRoYXQncyB0aGUgY2FzZS5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxSb3V0ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwcm9wc30+XG4gICAgICAgICAgICAgIHtwcm9wcy5tYXRjaFxuICAgICAgICAgICAgICAgID8gY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgID8gdHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBfX0RFVl9fXG4gICAgICAgICAgICAgICAgICAgICAgPyBldmFsQ2hpbGRyZW5EZXYoY2hpbGRyZW4sIHByb3BzLCB0aGlzLnByb3BzLnBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgOiBjaGlsZHJlbihwcm9wcylcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZHJlblxuICAgICAgICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAgID8gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHByb3BzKVxuICAgICAgICAgICAgICAgICAgOiByZW5kZXJcbiAgICAgICAgICAgICAgICAgID8gcmVuZGVyKHByb3BzKVxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgID8gX19ERVZfX1xuICAgICAgICAgICAgICAgICAgPyBldmFsQ2hpbGRyZW5EZXYoY2hpbGRyZW4sIHByb3BzLCB0aGlzLnByb3BzLnBhdGgpXG4gICAgICAgICAgICAgICAgICA6IGNoaWxkcmVuKHByb3BzKVxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgIDwvUm91dGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9Sb3V0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cblxuaWYgKF9fREVWX18pIHtcbiAgUm91dGUucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm5vZGVdKSxcbiAgICBjb21wb25lbnQ6IChwcm9wcywgcHJvcE5hbWUpID0+IHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gJiYgIWlzVmFsaWRFbGVtZW50VHlwZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcHJvcCAnY29tcG9uZW50JyBzdXBwbGllZCB0byAnUm91dGUnOiB0aGUgcHJvcCBpcyBub3QgYSB2YWxpZCBSZWFjdCBjb21wb25lbnRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBleGFjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcGF0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZylcbiAgICBdKSxcbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgc3RyaWN0OiBQcm9wVHlwZXMuYm9vbFxuICB9O1xuXG4gIFJvdXRlLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uKCkge1xuICAgIHdhcm5pbmcoXG4gICAgICAhKFxuICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuICYmXG4gICAgICAgICFpc0VtcHR5Q2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbikgJiZcbiAgICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnRcbiAgICAgICksXG4gICAgICBcIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIGNvbXBvbmVudD4gd2lsbCBiZSBpZ25vcmVkXCJcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgICEoXG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgIWlzRW1wdHlDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuKSAmJlxuICAgICAgICB0aGlzLnByb3BzLnJlbmRlclxuICAgICAgKSxcbiAgICAgIFwiWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSByZW5kZXI+IGFuZCA8Um91dGUgY2hpbGRyZW4+IGluIHRoZSBzYW1lIHJvdXRlOyA8Um91dGUgcmVuZGVyPiB3aWxsIGJlIGlnbm9yZWRcIlxuICAgICk7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgISh0aGlzLnByb3BzLmNvbXBvbmVudCAmJiB0aGlzLnByb3BzLnJlbmRlciksXG4gICAgICBcIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIHJlbmRlcj4gaW4gdGhlIHNhbWUgcm91dGU7IDxSb3V0ZSByZW5kZXI+IHdpbGwgYmUgaWdub3JlZFwiXG4gICAgKTtcbiAgfTtcblxuICBSb3V0ZS5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24ocHJldlByb3BzKSB7XG4gICAgd2FybmluZyhcbiAgICAgICEodGhpcy5wcm9wcy5sb2NhdGlvbiAmJiAhcHJldlByb3BzLmxvY2F0aW9uKSxcbiAgICAgICc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gXCJsb2NhdGlvblwiIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJ1xuICAgICk7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgISghdGhpcy5wcm9wcy5sb2NhdGlvbiAmJiBwcmV2UHJvcHMubG9jYXRpb24pLFxuICAgICAgJzxSb3V0ZT4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLidcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvY2F0aW9uLCBjcmVhdGVQYXRoIH0gZnJvbSBcImhpc3RvcnlcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcInRpbnktaW52YXJpYW50XCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwidGlueS13YXJuaW5nXCI7XG5cbmltcG9ydCBSb3V0ZXIgZnJvbSBcIi4vUm91dGVyXCI7XG5cbmZ1bmN0aW9uIGFkZExlYWRpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xufVxuXG5mdW5jdGlvbiBhZGRCYXNlbmFtZShiYXNlbmFtZSwgbG9jYXRpb24pIHtcbiAgaWYgKCFiYXNlbmFtZSkgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHJldHVybiB7XG4gICAgLi4ubG9jYXRpb24sXG4gICAgcGF0aG5hbWU6IGFkZExlYWRpbmdTbGFzaChiYXNlbmFtZSkgKyBsb2NhdGlvbi5wYXRobmFtZVxuICB9O1xufVxuXG5mdW5jdGlvbiBzdHJpcEJhc2VuYW1lKGJhc2VuYW1lLCBsb2NhdGlvbikge1xuICBpZiAoIWJhc2VuYW1lKSByZXR1cm4gbG9jYXRpb247XG5cbiAgY29uc3QgYmFzZSA9IGFkZExlYWRpbmdTbGFzaChiYXNlbmFtZSk7XG5cbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoYmFzZSkgIT09IDApIHJldHVybiBsb2NhdGlvbjtcblxuICByZXR1cm4ge1xuICAgIC4uLmxvY2F0aW9uLFxuICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHIoYmFzZS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVSTChsb2NhdGlvbikge1xuICByZXR1cm4gdHlwZW9mIGxvY2F0aW9uID09PSBcInN0cmluZ1wiID8gbG9jYXRpb24gOiBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbn1cblxuZnVuY3Rpb24gc3RhdGljSGFuZGxlcihtZXRob2ROYW1lKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaW52YXJpYW50KGZhbHNlLCBcIllvdSBjYW5ub3QgJXMgd2l0aCA8U3RhdGljUm91dGVyPlwiLCBtZXRob2ROYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8qKlxuICogVGhlIHB1YmxpYyB0b3AtbGV2ZWwgQVBJIGZvciBhIFwic3RhdGljXCIgPFJvdXRlcj4sIHNvLWNhbGxlZCBiZWNhdXNlIGl0XG4gKiBjYW4ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIGN1cnJlbnQgbG9jYXRpb24uIEluc3RlYWQsIGl0IGp1c3QgcmVjb3Jkc1xuICogbG9jYXRpb24gY2hhbmdlcyBpbiBhIGNvbnRleHQgb2JqZWN0LiBVc2VmdWwgbWFpbmx5IGluIHRlc3RpbmcgYW5kXG4gKiBzZXJ2ZXItcmVuZGVyaW5nIHNjZW5hcmlvcy5cbiAqL1xuY2xhc3MgU3RhdGljUm91dGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgbmF2aWdhdGVUbyhsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyBiYXNlbmFtZSA9IFwiXCIsIGNvbnRleHQgPSB7fSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb250ZXh0LmFjdGlvbiA9IGFjdGlvbjtcbiAgICBjb250ZXh0LmxvY2F0aW9uID0gYWRkQmFzZW5hbWUoYmFzZW5hbWUsIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSk7XG4gICAgY29udGV4dC51cmwgPSBjcmVhdGVVUkwoY29udGV4dC5sb2NhdGlvbik7XG4gIH1cblxuICBoYW5kbGVQdXNoID0gbG9jYXRpb24gPT4gdGhpcy5uYXZpZ2F0ZVRvKGxvY2F0aW9uLCBcIlBVU0hcIik7XG4gIGhhbmRsZVJlcGxhY2UgPSBsb2NhdGlvbiA9PiB0aGlzLm5hdmlnYXRlVG8obG9jYXRpb24sIFwiUkVQTEFDRVwiKTtcbiAgaGFuZGxlTGlzdGVuID0gKCkgPT4gbm9vcDtcbiAgaGFuZGxlQmxvY2sgPSAoKSA9PiBub29wO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGJhc2VuYW1lID0gXCJcIiwgY29udGV4dCA9IHt9LCBsb2NhdGlvbiA9IFwiL1wiLCAuLi5yZXN0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgaGlzdG9yeSA9IHtcbiAgICAgIGNyZWF0ZUhyZWY6IHBhdGggPT4gYWRkTGVhZGluZ1NsYXNoKGJhc2VuYW1lICsgY3JlYXRlVVJMKHBhdGgpKSxcbiAgICAgIGFjdGlvbjogXCJQT1BcIixcbiAgICAgIGxvY2F0aW9uOiBzdHJpcEJhc2VuYW1lKGJhc2VuYW1lLCBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpLFxuICAgICAgcHVzaDogdGhpcy5oYW5kbGVQdXNoLFxuICAgICAgcmVwbGFjZTogdGhpcy5oYW5kbGVSZXBsYWNlLFxuICAgICAgZ286IHN0YXRpY0hhbmRsZXIoXCJnb1wiKSxcbiAgICAgIGdvQmFjazogc3RhdGljSGFuZGxlcihcImdvQmFja1wiKSxcbiAgICAgIGdvRm9yd2FyZDogc3RhdGljSGFuZGxlcihcImdvRm9yd2FyZFwiKSxcbiAgICAgIGxpc3RlbjogdGhpcy5oYW5kbGVMaXN0ZW4sXG4gICAgICBibG9jazogdGhpcy5oYW5kbGVCbG9ja1xuICAgIH07XG5cbiAgICByZXR1cm4gPFJvdXRlciB7Li4ucmVzdH0gaGlzdG9yeT17aGlzdG9yeX0gc3RhdGljQ29udGV4dD17Y29udGV4dH0gLz47XG4gIH1cbn1cblxuaWYgKF9fREVWX18pIHtcbiAgU3RhdGljUm91dGVyLnByb3BUeXBlcyA9IHtcbiAgICBiYXNlbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxvY2F0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfTtcblxuICBTdGF0aWNSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgd2FybmluZyhcbiAgICAgICF0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICBcIjxTdGF0aWNSb3V0ZXI+IGlnbm9yZXMgdGhlIGhpc3RvcnkgcHJvcC4gVG8gdXNlIGEgY3VzdG9tIGhpc3RvcnksIFwiICtcbiAgICAgICAgXCJ1c2UgYGltcG9ydCB7IFJvdXRlciB9YCBpbnN0ZWFkIG9mIGBpbXBvcnQgeyBTdGF0aWNSb3V0ZXIgYXMgUm91dGVyIH1gLlwiXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGljUm91dGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJ0aW55LXdhcm5pbmdcIjtcblxuaW1wb3J0IFJvdXRlckNvbnRleHQgZnJvbSBcIi4vUm91dGVyQ29udGV4dFwiO1xuaW1wb3J0IG1hdGNoUGF0aCBmcm9tIFwiLi9tYXRjaFBhdGhcIjtcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcmVuZGVyaW5nIHRoZSBmaXJzdCA8Um91dGU+IHRoYXQgbWF0Y2hlcy5cbiAqL1xuY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Um91dGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAge2NvbnRleHQgPT4ge1xuICAgICAgICAgIGludmFyaWFudChjb250ZXh0LCBcIllvdSBzaG91bGQgbm90IHVzZSA8U3dpdGNoPiBvdXRzaWRlIGEgPFJvdXRlcj5cIik7XG5cbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgY29udGV4dC5sb2NhdGlvbjtcblxuICAgICAgICAgIGxldCBlbGVtZW50LCBtYXRjaDtcblxuICAgICAgICAgIC8vIFdlIHVzZSBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoIGluc3RlYWQgb2YgUmVhY3QuQ2hpbGRyZW4udG9BcnJheSgpLmZpbmQoKVxuICAgICAgICAgIC8vIGhlcmUgYmVjYXVzZSB0b0FycmF5IGFkZHMga2V5cyB0byBhbGwgY2hpbGQgZWxlbWVudHMgYW5kIHdlIGRvIG5vdCB3YW50XG4gICAgICAgICAgLy8gdG8gdHJpZ2dlciBhbiB1bm1vdW50L3JlbW91bnQgZm9yIHR3byA8Um91dGU+cyB0aGF0IHJlbmRlciB0aGUgc2FtZVxuICAgICAgICAgIC8vIGNvbXBvbmVudCBhdCBkaWZmZXJlbnQgVVJMcy5cbiAgICAgICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSBudWxsICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICBlbGVtZW50ID0gY2hpbGQ7XG5cbiAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGNoaWxkLnByb3BzLnBhdGggfHwgY2hpbGQucHJvcHMuZnJvbTtcblxuICAgICAgICAgICAgICBtYXRjaCA9IHBhdGhcbiAgICAgICAgICAgICAgICA/IG1hdGNoUGF0aChsb2NhdGlvbi5wYXRobmFtZSwgeyAuLi5jaGlsZC5wcm9wcywgcGF0aCB9KVxuICAgICAgICAgICAgICAgIDogY29udGV4dC5tYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBtYXRjaFxuICAgICAgICAgICAgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwgeyBsb2NhdGlvbiwgY29tcHV0ZWRNYXRjaDogbWF0Y2ggfSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfX1cbiAgICAgIDwvUm91dGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG5cbmlmIChfX0RFVl9fKSB7XG4gIFN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGxvY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gIH07XG5cbiAgU3dpdGNoLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbihwcmV2UHJvcHMpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgISh0aGlzLnByb3BzLmxvY2F0aW9uICYmICFwcmV2UHJvcHMubG9jYXRpb24pLFxuICAgICAgJzxTd2l0Y2g+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gXCJsb2NhdGlvblwiIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJ1xuICAgICk7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgISghdGhpcy5wcm9wcy5sb2NhdGlvbiAmJiBwcmV2UHJvcHMubG9jYXRpb24pLFxuICAgICAgJzxTd2l0Y2g+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgcHJvdmlkZWQgYSBcImxvY2F0aW9uXCIgcHJvcCBpbml0aWFsbHkgYnV0IG9taXR0ZWQgaXQgb24gYSBzdWJzZXF1ZW50IHJlbmRlci4nXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpdGNoO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJvdXRlckNvbnRleHQgZnJvbSBcIi4vUm91dGVyQ29udGV4dFwiO1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tIFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcInRpbnktaW52YXJpYW50XCI7XG5cbi8qKlxuICogQSBwdWJsaWMgaGlnaGVyLW9yZGVyIGNvbXBvbmVudCB0byBhY2Nlc3MgdGhlIGltcGVyYXRpdmUgQVBJXG4gKi9cbmZ1bmN0aW9uIHdpdGhSb3V0ZXIoQ29tcG9uZW50KSB7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gYHdpdGhSb3V0ZXIoJHtDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWV9KWA7XG4gIGNvbnN0IEMgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyB3cmFwcGVkQ29tcG9uZW50UmVmLCAuLi5yZW1haW5pbmdQcm9wcyB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdXRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtjb250ZXh0ID0+IHtcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgYFlvdSBzaG91bGQgbm90IHVzZSA8JHtkaXNwbGF5TmFtZX0gLz4gb3V0c2lkZSBhIDxSb3V0ZXI+YFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDb21wb25lbnRcbiAgICAgICAgICAgICAgey4uLnJlbWFpbmluZ1Byb3BzfVxuICAgICAgICAgICAgICB7Li4uY29udGV4dH1cbiAgICAgICAgICAgICAgcmVmPXt3cmFwcGVkQ29tcG9uZW50UmVmfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9Sb3V0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH07XG5cbiAgQy5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICBDLldyYXBwZWRDb21wb25lbnQgPSBDb21wb25lbnQ7XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBDLnByb3BUeXBlcyA9IHtcbiAgICAgIHdyYXBwZWRDb21wb25lbnRSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgUHJvcFR5cGVzLm9iamVjdFxuICAgICAgXSlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGhvaXN0U3RhdGljcyhDLCBDb21wb25lbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vUm91dGVyQ29udGV4dC5qc1wiO1xuaW1wb3J0IG1hdGNoUGF0aCBmcm9tIFwiLi9tYXRjaFBhdGguanNcIjtcblxuY29uc3QgdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VIaXN0b3J5KCkge1xuICBpZiAoX19ERVZfXykge1xuICAgIGludmFyaWFudChcbiAgICAgIHR5cGVvZiB1c2VDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIsXG4gICAgICBcIllvdSBtdXN0IHVzZSBSZWFjdCA+PSAxNi44IGluIG9yZGVyIHRvIHVzZSB1c2VIaXN0b3J5KClcIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXNlQ29udGV4dChDb250ZXh0KS5oaXN0b3J5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9jYXRpb24oKSB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHVzZUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIixcbiAgICAgIFwiWW91IG11c3QgdXNlIFJlYWN0ID49IDE2LjggaW4gb3JkZXIgdG8gdXNlIHVzZUxvY2F0aW9uKClcIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXNlQ29udGV4dChDb250ZXh0KS5sb2NhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBhcmFtcygpIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgdXNlQ29udGV4dCA9PT0gXCJmdW5jdGlvblwiLFxuICAgICAgXCJZb3UgbXVzdCB1c2UgUmVhY3QgPj0gMTYuOCBpbiBvcmRlciB0byB1c2UgdXNlUGFyYW1zKClcIlxuICAgICk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IHVzZUNvbnRleHQoQ29udGV4dCkubWF0Y2g7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoLnBhcmFtcyA6IHt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUm91dGVNYXRjaChwYXRoKSB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHVzZUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIixcbiAgICAgIFwiWW91IG11c3QgdXNlIFJlYWN0ID49IDE2LjggaW4gb3JkZXIgdG8gdXNlIHVzZVJvdXRlTWF0Y2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwYXRoXG4gICAgPyBtYXRjaFBhdGgodXNlTG9jYXRpb24oKS5wYXRobmFtZSwgcGF0aClcbiAgICA6IHVzZUNvbnRleHQoQ29udGV4dCkubWF0Y2g7XG59XG4iLCJpZiAoX19ERVZfXykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IGdsb2JhbCA9IHdpbmRvdztcbiAgICBjb25zdCBrZXkgPSBcIl9fcmVhY3Rfcm91dGVyX2J1aWxkX19cIjtcbiAgICBjb25zdCBidWlsZE5hbWVzID0geyBjanM6IFwiQ29tbW9uSlNcIiwgZXNtOiBcIkVTIG1vZHVsZXNcIiwgdW1kOiBcIlVNRFwiIH07XG5cbiAgICBpZiAoZ2xvYmFsW2tleV0gJiYgZ2xvYmFsW2tleV0gIT09IHByb2Nlc3MuZW52LkJVSUxEX0ZPUk1BVCkge1xuICAgICAgY29uc3QgaW5pdGlhbEJ1aWxkTmFtZSA9IGJ1aWxkTmFtZXNbZ2xvYmFsW2tleV1dO1xuICAgICAgY29uc3Qgc2Vjb25kYXJ5QnVpbGROYW1lID0gYnVpbGROYW1lc1twcm9jZXNzLmVudi5CVUlMRF9GT1JNQVRdO1xuXG4gICAgICAvLyBUT0RPOiBBZGQgbGluayB0byBhcnRpY2xlIHRoYXQgZXhwbGFpbnMgaW4gZGV0YWlsIGhvdyB0byBhdm9pZFxuICAgICAgLy8gbG9hZGluZyAyIGRpZmZlcmVudCBidWlsZHMuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBZb3UgYXJlIGxvYWRpbmcgdGhlICR7c2Vjb25kYXJ5QnVpbGROYW1lfSBidWlsZCBvZiBSZWFjdCBSb3V0ZXIgYCArXG4gICAgICAgICAgYG9uIGEgcGFnZSB0aGF0IGlzIGFscmVhZHkgcnVubmluZyB0aGUgJHtpbml0aWFsQnVpbGROYW1lfSBgICtcbiAgICAgICAgICBgYnVpbGQsIHNvIHRoaW5ncyB3b24ndCB3b3JrIHJpZ2h0LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZ2xvYmFsW2tleV0gPSBwcm9jZXNzLmVudi5CVUlMRF9GT1JNQVQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW1vcnlSb3V0ZXIgfSBmcm9tIFwiLi9NZW1vcnlSb3V0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHJvbXB0IH0gZnJvbSBcIi4vUHJvbXB0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZGlyZWN0IH0gZnJvbSBcIi4vUmVkaXJlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGUgfSBmcm9tIFwiLi9Sb3V0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3V0ZXIgfSBmcm9tIFwiLi9Sb3V0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhdGljUm91dGVyIH0gZnJvbSBcIi4vU3RhdGljUm91dGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN3aXRjaCB9IGZyb20gXCIuL1N3aXRjaFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZW5lcmF0ZVBhdGggfSBmcm9tIFwiLi9nZW5lcmF0ZVBhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWF0Y2hQYXRoIH0gZnJvbSBcIi4vbWF0Y2hQYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhSb3V0ZXIgfSBmcm9tIFwiLi93aXRoUm91dGVyXCI7XG5cbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uLCB1c2VQYXJhbXMsIHVzZVJvdXRlTWF0Y2ggfSBmcm9tIFwiLi9ob29rcy5qc1wiO1xuZXhwb3J0IHsgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24sIHVzZVBhcmFtcywgdXNlUm91dGVNYXRjaCB9O1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIF9fUm91dGVyQ29udGV4dCB9IGZyb20gXCIuL1JvdXRlckNvbnRleHRcIjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFKQTtBQUNBO0FBTUE7QUNKQTs7OztBQUdBOzs7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7OztBQUNBO0FBRUE7QUFDQTtBQURBOzs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUpBOzs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7O0FBSUE7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7Ozs7QUE3Q0E7QUFDQTtBQXlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFEQTs7QUNuRUE7Ozs7O0FBR0E7Ozs7Ozs7Ozs7O0FBQ0E7Ozs7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7Ozs7QUFKQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQURBOzs7QUN6QkE7Ozs7Ozs7OztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7OztBQUdBO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7QUFkQTtBQ0tBOzs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQVBBO0FBVUE7QUFDQTtBQVhBO0FBYUE7QUFiQTtBQVRBOzs7QUE4QkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBOzs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7Ozs7Ozs7QUFNQTtBQUFBO0FBQUE7OztBQUFBO0FBQUE7OztBQUNBO0FBQUE7QUFBQTs7QUNkQTs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBTUE7QUFKQTs7O0FBV0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFGQTtBQUtBOztBQVpBO0FBZUE7QUFmQTtBQTFCQTs7O0FBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTs7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7Ozs7Ozs7QUFNQTtBQUFBO0FBQUE7OztBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUFGQTtBQUtBO0FBTEE7QUFLQTtBQUxBO0FBS0E7QUFMQTtBQUtBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUNBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUFsQkE7OztBQzNCQTtBQUNBOzs7QUFHQTtBQUNBO0FBRUE7QUFPQTs7Ozs7OztBQU1BOzs7Ozs7Ozs7QUFDQTs7O0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBOzs7QUFJQTtBQUNBOzs7QUFJQTtBQUFBO0FBQUE7QUF0QkE7Ozs7QUFIQTtBQUNBO0FBa0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBbUJBO0FBQ0E7QUFTQTtBQVNBO0FBbkJBO0FBQ0E7QUF3QkE7QUFDQTtBQUtBO0FBTkE7OztBQ3RIQTtBQUNBOzs7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUZBOzs7QUFNQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFGQTs7O0FBTUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7O0FBSUE7Ozs7Ozs7OztBQVFBOzs7Ozs7Ozs7Ozs7QUFRQTtBQUFBOzs7QUFDQTtBQUFBOzs7QUFDQTtBQUFBOzs7QUFDQTtBQUFBOzs7Ozs7OztBQVZBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBUUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBYUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUE3QkE7QUFDQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFEQTs7QUNwRkE7Ozs7O0FBR0E7Ozs7Ozs7OztBQUNBOzs7QUFFQTtBQUVBO0FBRUE7QUFFQTs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTs7QUFQQTtBQVlBO0FBQ0E7QUFBQTtBQUFBO0FBekJBOzs7O0FBSEE7QUFDQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBS0E7QUFOQTs7QUMvQ0E7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFHQTtBQUhBO0FBUEE7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTs7O0FBU0E7OztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFLQTs7O0FBR0E7QUFDQTtBQUVBOzs7QUFLQTs7O0FBR0E7QUFDQTtBQUVBOzs7QUFLQTtBQUNBOzs7QUFHQTtBQUNBO0FBRUE7OztBQUtBOzs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBOzs7QUFPQTs7OzsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-router/esm/react-router.js\n"); - -/***/ }), - -/***/ "../node_modules/react-router/node_modules/isarray/index.js": -/*!******************************************************************!*\ - !*** ../node_modules/react-router/node_modules/isarray/index.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3Qtcm91dGVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzPzZhODgiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react-router/node_modules/isarray/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-router/node_modules/path-to-regexp/index.js": -/*!*************************************************************************!*\ - !*** ../node_modules/react-router/node_modules/path-to-regexp/index.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar isarray = __webpack_require__(/*! isarray */ \"../node_modules/react-router/node_modules/isarray/index.js\");\n/**\n * Expose `pathToRegexp`.\n */\n\n\nmodule.exports = pathToRegexp;\nmodule.exports.parse = parse;\nmodule.exports.compile = compile;\nmodule.exports.tokensToFunction = tokensToFunction;\nmodule.exports.tokensToRegExp = tokensToRegExp;\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\n\nvar PATH_REGEXP = new RegExp([// Match escaped characters that would otherwise appear in future matches.\n// This allows the user to escape special characters that won't transform.\n'(\\\\\\\\.)', // Match Express-style parameters and un-named parameters with a prefix\n// and optional suffixes. Matches appear as:\n//\n// \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n// \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n// \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n'([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'].join('|'), 'g');\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\n\nfunction parse(str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length; // Ignore already escaped sequences.\n\n if (escaped) {\n path += escaped[1];\n continue;\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7]; // Push the current path onto the tokens.\n\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?'\n });\n } // Match any characters still remaining.\n\n\n if (index < str.length) {\n path += str.substr(index);\n } // If the path exists, push it onto the end.\n\n\n if (path) {\n tokens.push(path);\n }\n\n return tokens;\n}\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\n\n\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\n\n\nfunction encodeURIComponentPretty(str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\n\n\nfunction encodeAsterisk(str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\n\n\nfunction tokensToFunction(tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length); // Compile all the patterns before compilation.\n\n for (var i = 0; i < tokens.length; i++) {\n if (_typeof(tokens[i]) === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n continue;\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue;\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined');\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`');\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue;\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty');\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`');\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue;\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"');\n }\n\n path += token.prefix + segment;\n }\n\n return path;\n };\n}\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\n\n\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1');\n}\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\n\n\nfunction escapeGroup(group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1');\n}\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\n\n\nfunction attachKeys(re, keys) {\n re.keys = keys;\n return re;\n}\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\n\n\nfunction flags(options) {\n return options && options.sensitive ? '' : 'i';\n}\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\n\n\nfunction regexpToRegexp(path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys);\n}\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\n\n\nfunction arrayToRegexp(path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n return attachKeys(regexp, keys);\n}\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\n\n\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\n\n\nfunction tokensToRegExp(tokens, keys, options) {\n if (!isarray(keys)) {\n options =\n /** @type {!Object} */\n keys || options;\n keys = [];\n }\n\n options = options || {};\n var strict = options.strict;\n var end = options.end !== false;\n var route = ''; // Iterate over the tokens and create our regexp string.\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys);\n}\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\n\n\nfunction pathToRegexp(path, keys, options) {\n if (!isarray(keys)) {\n options =\n /** @type {!Object} */\n keys || options;\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path,\n /** @type {!Array} */\n keys);\n }\n\n if (isarray(path)) {\n return arrayToRegexp(\n /** @type {!Array} */\n path,\n /** @type {!Array} */\n keys, options);\n }\n\n return stringToRegexp(\n /** @type {string} */\n path,\n /** @type {!Array} */\n keys, options);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanM/M2I0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNhcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG4vKipcbiAqIEV4cG9zZSBgcGF0aFRvUmVnZXhwYC5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBwYXRoVG9SZWdleHBcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2Vcbm1vZHVsZS5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlXG5tb2R1bGUuZXhwb3J0cy50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvblxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cFxuXG4vKipcbiAqIFRoZSBtYWluIHBhdGggbWF0Y2hpbmcgcmVnZXhwIHV0aWxpdHkuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xudmFyIFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7IUFycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZSAoc3RyLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBbXVxuICB2YXIga2V5ID0gMFxuICB2YXIgaW5kZXggPSAwXG4gIHZhciBwYXRoID0gJydcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJ1xuICB2YXIgcmVzXG5cbiAgd2hpbGUgKChyZXMgPSBQQVRIX1JFR0VYUC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICB2YXIgbSA9IHJlc1swXVxuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdXG4gICAgdmFyIG9mZnNldCA9IHJlcy5pbmRleFxuICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpXG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aFxuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgbmV4dCA9IHN0cltpbmRleF1cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBtb2RpZmllciA9IHJlc1s2XVxuICAgIHZhciBhc3RlcmlzayA9IHJlc1s3XVxuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aClcbiAgICAgIHBhdGggPSAnJ1xuICAgIH1cblxuICAgIHZhciBwYXJ0aWFsID0gcHJlZml4ICE9IG51bGwgJiYgbmV4dCAhPSBudWxsICYmIG5leHQgIT09IHByZWZpeFxuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKidcbiAgICB2YXIgb3B0aW9uYWwgPSBtb2RpZmllciA9PT0gJz8nIHx8IG1vZGlmaWVyID09PSAnKidcbiAgICB2YXIgZGVsaW1pdGVyID0gcmVzWzJdIHx8IGRlZmF1bHREZWxpbWl0ZXJcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXBcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgICAgYXN0ZXJpc2s6ICEhYXN0ZXJpc2ssXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuID8gZXNjYXBlR3JvdXAocGF0dGVybikgOiAoYXN0ZXJpc2sgPyAnLionIDogJ1teJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10rPycpXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1hdGNoIGFueSBjaGFyYWN0ZXJzIHN0aWxsIHJlbWFpbmluZy5cbiAgaWYgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIHBhdGggKz0gc3RyLnN1YnN0cihpbmRleClcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aClcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucyksIG9wdGlvbnMpXG59XG5cbi8qKlxuICogUHJldHRpZXIgZW5jb2Rpbmcgb2YgVVJJIHBhdGggc2VnbWVudHMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvW1xcLz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgdGhlIGFzdGVyaXNrIHBhcmFtZXRlci4gU2ltaWxhciB0byBgcHJldHR5YCwgYnV0IGFsbG93cyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQXN0ZXJpc2sgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBtZXRob2QgZm9yIHRyYW5zZm9ybWluZyB0b2tlbnMgaW50byB0aGUgcGF0aCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9GdW5jdGlvbiAodG9rZW5zLCBvcHRpb25zKSB7XG4gIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICB2YXIgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKVxuXG4gIC8vIENvbXBpbGUgYWxsIHRoZSBwYXR0ZXJucyBiZWZvcmUgY29tcGlsYXRpb24uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0b2tlbnNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBtYXRjaGVzW2ldID0gbmV3IFJlZ0V4cCgnXig/OicgKyB0b2tlbnNbaV0ucGF0dGVybiArICcpJCcsIGZsYWdzKG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgdmFyIHBhdGggPSAnJ1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9XG4gICAgdmFyIGVuY29kZSA9IG9wdGlvbnMucHJldHR5ID8gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IDogZW5jb2RlVVJJQ29tcG9uZW50XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhdGggKz0gdG9rZW5cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW3Rva2VuLm5hbWVdXG4gICAgICB2YXIgc2VnbWVudFxuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAvLyBQcmVwZW5kIHBhcnRpYWwgc2VnbWVudCBwcmVmaXhlcy5cbiAgICAgICAgICBpZiAodG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXhcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gYmUgZGVmaW5lZCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzYXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgcmVwZWF0LCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnYCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0pXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50ID0gdG9rZW4uYXN0ZXJpc2sgPyBlbmNvZGVBc3Rlcmlzayh2YWx1ZSkgOiBlbmNvZGUodmFsdWUpXG5cbiAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgfVxuXG4gICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnRcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5c1xuICByZXR1cm4gcmVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZsYWdzIGZvciBhIHJlZ2V4cCBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmbGFncyAob3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLnNlbnNpdGl2ZSA/ICcnIDogJ2knXG59XG5cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwIChwYXRoLCBrZXlzKSB7XG4gIC8vIFVzZSBhIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBtYXRjaCBvbmx5IGNhcHR1cmluZyBncm91cHMuXG4gIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKVxuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhwYXRoLCBrZXlzKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gIHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnRzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKHBhdGhUb1JlZ2V4cChwYXRoW2ldLCBrZXlzLCBvcHRpb25zKS5zb3VyY2UpXG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpXG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocmVnZXhwLCBrZXlzKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb1JlZ0V4cChwYXJzZShwYXRoLCBvcHRpb25zKSwga2V5cywgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gICAgICAgICAgdG9rZW5zXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19IGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdFeHAgKHRva2Vucywga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKVxuICAgIGtleXMgPSBbXVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3RcbiAgdmFyIGVuZCA9IG9wdGlvbnMuZW5kICE9PSBmYWxzZVxuICB2YXIgcm91dGUgPSAnJ1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgdG9rZW5zIGFuZCBjcmVhdGUgb3VyIHJlZ2V4cCBzdHJpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKHRva2VuKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeClcbiAgICAgIHZhciBjYXB0dXJlID0gJyg/OicgKyB0b2tlbi5wYXR0ZXJuICsgJyknXG5cbiAgICAgIGtleXMucHVzaCh0b2tlbilcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKidcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghdG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgIGNhcHR1cmUgPSAnKD86JyArIHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSk/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyk/J1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJ1xuICAgICAgfVxuXG4gICAgICByb3V0ZSArPSBjYXB0dXJlXG4gICAgfVxuICB9XG5cbiAgdmFyIGRlbGltaXRlciA9IGVzY2FwZVN0cmluZyhvcHRpb25zLmRlbGltaXRlciB8fCAnLycpXG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyXG5cbiAgLy8gSW4gbm9uLXN0cmljdCBtb2RlIHdlIGFsbG93IGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBtYXRjaC4gSWYgdGhlIHBhdGggdG9cbiAgLy8gbWF0Y2ggYWxyZWFkeSBlbmRzIHdpdGggYSBzbGFzaCwgd2UgcmVtb3ZlIGl0IGZvciBjb25zaXN0ZW5jeS4gVGhlIHNsYXNoXG4gIC8vIGlzIHZhbGlkIGF0IHRoZSBlbmQgb2YgYSBwYXRoIG1hdGNoLCBub3QgaW4gdGhlIG1pZGRsZS4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgLy8gaW4gbm9uLWVuZGluZyBtb2RlLCB3aGVyZSBcIi90ZXN0L1wiIHNob3VsZG4ndCBtYXRjaCBcIi90ZXN0Ly9yb3V0ZVwiLlxuICBpZiAoIXN0cmljdCkge1xuICAgIHJvdXRlID0gKGVuZHNXaXRoRGVsaW1pdGVyID8gcm91dGUuc2xpY2UoMCwgLWRlbGltaXRlci5sZW5ndGgpIDogcm91dGUpICsgJyg/OicgKyBkZWxpbWl0ZXIgKyAnKD89JCkpPydcbiAgfVxuXG4gIGlmIChlbmQpIHtcbiAgICByb3V0ZSArPSAnJCdcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknXG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhuZXcgUmVnRXhwKCdeJyArIHJvdXRlLCBmbGFncyhvcHRpb25zKSksIGtleXMpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoc3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0gICAgICAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucylcbiAgICBrZXlzID0gW11cbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSlcbiAgfVxuXG4gIGlmIChpc2FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBRUE7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQWFBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQXpDQTtBQUNBO0FBQ0E7QUFvREE7QUFDQTtBQXZEQTtBQUNBO0FBQ0E7QUF5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsRUE7QUFvRUE7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-router/node_modules/path-to-regexp/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-simplemde-editor/lib/index.js": -/*!***********************************************************!*\ - !*** ../node_modules/react-simplemde-editor/lib/index.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar React = _interopRequireWildcard(__webpack_require__(/*! react */ \"../node_modules/react/index.js\"));\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};\n\n if (desc.get || desc.set) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n }\n\n newObj[\"default\"] = obj;\n return newObj;\n }\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nvar noop = function noop() {};\n\nvar _id = 0;\n\nvar generateId = function generateId() {\n return \"simplemde-editor-\".concat(++_id);\n};\n\nvar SimpleMDEEditor = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(SimpleMDEEditor, _React$PureComponent);\n\n function SimpleMDEEditor(props) {\n var _this;\n\n _classCallCheck(this, SimpleMDEEditor);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SimpleMDEEditor).call(this, props));\n _this.keyChange = false;\n _this.state = {\n value: _this.props.value || \"\"\n };\n _this.id = _this.props.id ? _this.props.id : generateId();\n _this.simpleMde = null;\n _this.editorEl = null;\n _this.editorToolbarEl = null;\n\n _this.createEditor = function () {\n var SimpleMDE = __webpack_require__(/*! easymde */ \"../node_modules/easymde/src/js/easymde.js\");\n\n var initialOptions = {\n element: document.getElementById(_this.id),\n initialValue: _this.props.value\n };\n var allOptions = Object.assign({}, initialOptions, _this.props.options);\n _this.simpleMde = new SimpleMDE(allOptions);\n };\n\n _this.eventWrapper = function () {\n _this.keyChange = true;\n\n _this.setState({\n value: _this.simpleMde.value()\n });\n\n _this.props.onChange(_this.simpleMde.value());\n };\n\n _this.removeEvents = function () {\n if (_this.editorEl && _this.editorToolbarEl) {\n _this.editorEl.removeEventListener(\"keyup\", _this.eventWrapper);\n\n _this.editorEl.removeEventListener(\"paste\", _this.eventWrapper);\n\n _this.editorToolbarEl.removeEventListener(\"click\", _this.eventWrapper);\n }\n };\n\n _this.addEvents = function () {\n if (_this.elementWrapperRef && _this.simpleMde) {\n _this.editorEl = _this.elementWrapperRef;\n _this.editorToolbarEl = _this.elementWrapperRef.getElementsByClassName(\"editor-toolbar\")[0];\n\n _this.editorEl.addEventListener(\"keyup\", _this.eventWrapper);\n\n _this.editorEl.addEventListener(\"paste\", _this.eventWrapper);\n\n _this.editorToolbarEl && _this.editorToolbarEl.addEventListener(\"click\", _this.eventWrapper);\n\n _this.simpleMde.codemirror.on(\"cursorActivity\", _this.getCursor);\n\n var _events = _this.props.events; // Handle custom events\n\n _events && Object.entries(_events).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n if (eventName && callback) {\n _this.simpleMde && _this.simpleMde.codemirror.on(eventName, callback);\n }\n });\n }\n };\n\n _this.getCursor = function () {\n // https://codemirror.net/doc/manual.html#api_selection\n if (_this.props.getLineAndCursor) {\n _this.props.getLineAndCursor(_this.simpleMde.codemirror.getDoc().getCursor());\n }\n };\n\n _this.getMdeInstance = function () {\n if (_this.props.getMdeInstance) {\n _this.props.getMdeInstance(_this.simpleMde);\n }\n };\n\n _this.addExtraKeys = function () {\n // https://codemirror.net/doc/manual.html#option_extraKeys\n if (_this.props.extraKeys) {\n _this.simpleMde.codemirror.setOption(\"extraKeys\", _this.props.extraKeys);\n }\n };\n\n _this.elementWrapperRef = null;\n\n _this.setElementWrapperRef = function (element) {\n _this.elementWrapperRef = element;\n };\n\n return _this;\n }\n\n _createClass(SimpleMDEEditor, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined) {\n this.createEditor();\n this.addEvents();\n this.addExtraKeys();\n this.getCursor();\n this.getMdeInstance();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (!this.keyChange && this.props.value !== this.state.value && // This is somehow fixes moving cursor for controlled case\n this.props.value !== prevProps.value // This one fixes no value change for uncontrolled input. If it's uncontrolled prevProps will be the same\n ) {\n this.simpleMde.value(this.props.value || \"\");\n }\n\n this.keyChange = false;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.editorEl !== null && this.editorEl !== undefined) {\n this.removeEvents();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n events = _this$props.events,\n value = _this$props.value,\n options = _this$props.options,\n children = _this$props.children,\n extraKeys = _this$props.extraKeys,\n getLineAndCursor = _this$props.getLineAndCursor,\n getMdeInstance = _this$props.getMdeInstance,\n label = _this$props.label,\n onChange = _this$props.onChange,\n id = _this$props.id,\n rest = _objectWithoutProperties(_this$props, [\"events\", \"value\", \"options\", \"children\", \"extraKeys\", \"getLineAndCursor\", \"getMdeInstance\", \"label\", \"onChange\", \"id\"]);\n\n return React.createElement(\"div\", Object.assign({\n id: \"\".concat(this.id, \"-wrapper\")\n }, rest, {\n ref: this.setElementWrapperRef\n }), label && React.createElement(\"label\", {\n htmlFor: this.id\n }, \" \", label, \" \"), React.createElement(\"textarea\", {\n id: this.id\n }));\n }\n }]);\n\n return SimpleMDEEditor;\n}(React.PureComponent);\n\nexports[\"default\"] = SimpleMDEEditor;\nSimpleMDEEditor.defaultProps = {\n events: {},\n onChange: noop,\n options: {}\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNpbXBsZW1kZS1lZGl0b3IvbGliL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3NyYy9pbmRleC50c3g/ZGViNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCAqIGFzIFNpbXBsZU1ERSBmcm9tIFwiZWFzeW1kZVwiO1xuaW1wb3J0IHsgS2V5TWFwLCBET01FdmVudCwgRWRpdG9yIH0gZnJvbSBcImNvZGVtaXJyb3JcIjtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xubGV0IF9pZCA9IDA7XG5cbmNvbnN0IGdlbmVyYXRlSWQgPSAoKSA9PiBgc2ltcGxlbWRlLWVkaXRvci0keysrX2lkfWA7XG5cbnR5cGUgQ29kZW1pcnJvckV2ZW50cyA9XG4gIHwgXCJjaGFuZ2VcIlxuICB8IFwiY2hhbmdlc1wiXG4gIHwgXCJiZWZvcmVDaGFuZ2VcIlxuICB8IFwiY3Vyc29yQWN0aXZpdHlcIlxuICB8IFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCJcbiAgfCBcInZpZXdwb3J0Q2hhbmdlXCJcbiAgfCBcImd1dHRlckNsaWNrXCJcbiAgfCBcImZvY3VzXCJcbiAgfCBcImJsdXJcIlxuICB8IFwic2Nyb2xsXCJcbiAgfCBcInVwZGF0ZVwiXG4gIHwgXCJyZW5kZXJMaW5lXCI7XG5cbnR5cGUgU2ltcGxlTWRlVG9Db2RlbWlycm9yID0geyBcbiAgW0UgaW4gQ29kZW1pcnJvckV2ZW50cyB8IERPTUV2ZW50XT86IEVkaXRvcltcIm9uXCJdXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZU1ERUVkaXRvclByb3BzIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgfCBhbnk7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGV4dHJhS2V5cz86IEtleU1hcDtcbiAgb3B0aW9ucz86IFNpbXBsZU1ERS5PcHRpb25zO1xuICBldmVudHM/OiBTaW1wbGVNZGVUb0NvZGVtaXJyb3I7XG4gIGdldE1kZUluc3RhbmNlPzogKGluc3RhbmNlOiBTaW1wbGVNREUpID0+IHZvaWQgfCBhbnk7XG4gIGdldExpbmVBbmRDdXJzb3I/OiAocG9zaXRpb246IENvZGVNaXJyb3IuUG9zaXRpb24pID0+IHZvaWQgfCBhbnk7XG59XG5cbnR5cGUgU2ltcGxlTURFRWRpdG9yU3RhdGUgPSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW1wbGVNREVFZGl0b3IgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFxuICBTaW1wbGVNREVFZGl0b3JQcm9wcyxcbiAgU2ltcGxlTURFRWRpdG9yU3RhdGVcbj4ge1xuICBwcml2YXRlIGVsZW1lbnRXcmFwcGVyUmVmOiBIVE1MRGl2RWxlbWVudCB8IG51bGw7XG4gIHByaXZhdGUgc2V0RWxlbWVudFdyYXBwZXJSZWY6IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBrZXlDaGFuZ2UgPSBmYWxzZTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGV2ZW50czoge30sXG4gICAgb25DaGFuZ2U6IG5vb3AsXG4gICAgb3B0aW9uczoge31cbiAgfTtcblxuICBzdGF0ZSA9IHtcbiAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCBcIlwiXG4gIH07XG5cbiAgaWQgPSB0aGlzLnByb3BzLmlkID8gdGhpcy5wcm9wcy5pZCA6IGdlbmVyYXRlSWQoKTtcbiAgc2ltcGxlTWRlOiBTaW1wbGVNREUgfCBudWxsID0gbnVsbDtcbiAgZWRpdG9yRWw6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIGVkaXRvclRvb2xiYXJFbDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTaW1wbGVNREVFZGl0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmVsZW1lbnRXcmFwcGVyUmVmID0gbnVsbDtcbiAgICB0aGlzLnNldEVsZW1lbnRXcmFwcGVyUmVmID0gKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmVsZW1lbnRXcmFwcGVyUmVmID0gZWxlbWVudDtcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jcmVhdGVFZGl0b3IoKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRzKCk7XG4gICAgICB0aGlzLmFkZEV4dHJhS2V5cygpO1xuICAgICAgdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgIHRoaXMuZ2V0TWRlSW5zdGFuY2UoKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTaW1wbGVNREVFZGl0b3JQcm9wcykge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmtleUNoYW5nZSAmJlxuICAgICAgdGhpcy5wcm9wcy52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJiAvLyBUaGlzIGlzIHNvbWVob3cgZml4ZXMgbW92aW5nIGN1cnNvciBmb3IgY29udHJvbGxlZCBjYXNlXG4gICAgICB0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUgLy8gVGhpcyBvbmUgZml4ZXMgbm8gdmFsdWUgY2hhbmdlIGZvciB1bmNvbnRyb2xsZWQgaW5wdXQuIElmIGl0J3MgdW5jb250cm9sbGVkIHByZXZQcm9wcyB3aWxsIGJlIHRoZSBzYW1lXG4gICAgKSB7XG4gICAgICB0aGlzLnNpbXBsZU1kZSEudmFsdWUodGhpcy5wcm9wcy52YWx1ZSB8fCBcIlwiKTtcbiAgICB9XG4gICAgdGhpcy5rZXlDaGFuZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLmVkaXRvckVsICE9PSBudWxsICYmIHRoaXMuZWRpdG9yRWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVFZGl0b3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2ltcGxlTURFID0gcmVxdWlyZShcImVhc3ltZGVcIik7XG4gICAgY29uc3QgaW5pdGlhbE9wdGlvbnMgPSB7XG4gICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKSxcbiAgICAgIGluaXRpYWxWYWx1ZTogdGhpcy5wcm9wcy52YWx1ZVxuICAgIH07XG5cbiAgICBjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgaW5pdGlhbE9wdGlvbnMsIHRoaXMucHJvcHMub3B0aW9ucyk7XG4gICAgdGhpcy5zaW1wbGVNZGUgPSBuZXcgU2ltcGxlTURFKGFsbE9wdGlvbnMpO1xuICB9O1xuXG4gIGV2ZW50V3JhcHBlciA9ICgpID0+IHtcbiAgICB0aGlzLmtleUNoYW5nZSA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB2YWx1ZTogdGhpcy5zaW1wbGVNZGUhLnZhbHVlKClcbiAgICB9KTtcbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMuc2ltcGxlTWRlIS52YWx1ZSgpKTtcbiAgfTtcblxuICByZW1vdmVFdmVudHMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZWRpdG9yRWwgJiYgdGhpcy5lZGl0b3JUb29sYmFyRWwpIHtcbiAgICAgIHRoaXMuZWRpdG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMuZXZlbnRXcmFwcGVyKTtcbiAgICAgIHRoaXMuZWRpdG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIHRoaXMuZXZlbnRXcmFwcGVyKTtcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmV2ZW50V3JhcHBlcik7XG4gICAgfVxuICB9O1xuXG4gIGFkZEV2ZW50cyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5lbGVtZW50V3JhcHBlclJlZiAmJiB0aGlzLnNpbXBsZU1kZSkge1xuICAgICAgdGhpcy5lZGl0b3JFbCA9IHRoaXMuZWxlbWVudFdyYXBwZXJSZWY7XG4gICAgICB0aGlzLmVkaXRvclRvb2xiYXJFbCA9IHRoaXMuZWxlbWVudFdyYXBwZXJSZWYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgXCJlZGl0b3ItdG9vbGJhclwiXG4gICAgICApWzBdO1xuXG4gICAgICB0aGlzLmVkaXRvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmV2ZW50V3JhcHBlcik7XG4gICAgICB0aGlzLmVkaXRvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCB0aGlzLmV2ZW50V3JhcHBlcik7XG4gICAgICB0aGlzLmVkaXRvclRvb2xiYXJFbCAmJlxuICAgICAgICB0aGlzLmVkaXRvclRvb2xiYXJFbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5ldmVudFdyYXBwZXIpO1xuXG4gICAgICB0aGlzLnNpbXBsZU1kZS5jb2RlbWlycm9yLm9uKFwiY3Vyc29yQWN0aXZpdHlcIiwgdGhpcy5nZXRDdXJzb3IpO1xuXG4gICAgICBjb25zdCB7IGV2ZW50cyB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgLy8gSGFuZGxlIGN1c3RvbSBldmVudHNcbiAgICAgIGV2ZW50cyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudE5hbWUgJiYgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuc2ltcGxlTWRlICYmXG4gICAgICAgICAgICAgIHRoaXMuc2ltcGxlTWRlLmNvZGVtaXJyb3Iub24oXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lIGFzIERPTUV2ZW50LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrIGFzIGFueVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGdldEN1cnNvciA9ICgpID0+IHtcbiAgICAvLyBodHRwczovL2NvZGVtaXJyb3IubmV0L2RvYy9tYW51YWwuaHRtbCNhcGlfc2VsZWN0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuZ2V0TGluZUFuZEN1cnNvcikge1xuICAgICAgdGhpcy5wcm9wcy5nZXRMaW5lQW5kQ3Vyc29yKFxuICAgICAgICB0aGlzLnNpbXBsZU1kZSEuY29kZW1pcnJvci5nZXREb2MoKS5nZXRDdXJzb3IoKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0TWRlSW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuZ2V0TWRlSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMucHJvcHMuZ2V0TWRlSW5zdGFuY2UodGhpcy5zaW1wbGVNZGUhKTtcbiAgICB9XG4gIH07XG5cbiAgYWRkRXh0cmFLZXlzID0gKCkgPT4ge1xuICAgIC8vIGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI29wdGlvbl9leHRyYUtleXNcbiAgICBpZiAodGhpcy5wcm9wcy5leHRyYUtleXMpIHtcbiAgICAgIHRoaXMuc2ltcGxlTWRlIS5jb2RlbWlycm9yLnNldE9wdGlvbihcImV4dHJhS2V5c1wiLCB0aGlzLnByb3BzLmV4dHJhS2V5cyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBldmVudHMsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGV4dHJhS2V5cyxcbiAgICAgIGdldExpbmVBbmRDdXJzb3IsXG4gICAgICBnZXRNZGVJbnN0YW5jZSxcbiAgICAgIGxhYmVsLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBpZCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBpZD17YCR7dGhpcy5pZH0td3JhcHBlcmB9IHsuLi5yZXN0fSByZWY9e3RoaXMuc2V0RWxlbWVudFdyYXBwZXJSZWZ9PlxuICAgICAgICB7bGFiZWwgJiYgPGxhYmVsIGh0bWxGb3I9e3RoaXMuaWR9PiB7bGFiZWx9IDwvbGFiZWw+fVxuICAgICAgICA8dGV4dGFyZWEgaWQ9e3RoaXMuaWR9IC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFvQ0E7OztBQXVCQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFEQTtBQUFBO0FBUkE7QUFEQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQW9DQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBM0NBO0FBQ0E7QUFEQTtBQStDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQW5EQTtBQUNBO0FBREE7QUF1REE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUEzREE7QUFDQTtBQURBO0FBK0RBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQVpBO0FBQ0E7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBUkE7QUFVQTtBQXpGQTtBQUNBO0FBREE7QUE2RkE7QUFDQTtBQUNBO0FBR0E7QUFsR0E7QUFDQTtBQURBO0FBc0dBO0FBQ0E7QUFDQTtBQXhHQTtBQUNBO0FBREE7QUE0R0E7QUFDQTtBQUNBO0FBQ0E7QUEvR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUpBO0FBTUE7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBR0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQWlGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBYUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7QUE3SkE7QUFDQTs7QUFEQTtBQVNBO0FBQ0E7QUFDQTtBQUhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react-simplemde-editor/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react-sticky-box/dist/esnext/index.js": -/*!*************************************************************!*\ - !*** ../node_modules/react-sticky-box/dist/esnext/index.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StickyBox; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! resize-observer-polyfill */ \"../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar getScrollParent = function getScrollParent(node) {\n var parent = node;\n\n while (parent = parent.parentElement) {\n var overflowYVal = getComputedStyle(parent, null).getPropertyValue(\"overflow-y\");\n if (parent === document.body) return window;\n if (overflowYVal === \"auto\" || overflowYVal === \"scroll\") return parent;\n }\n\n return window;\n};\n\nvar offsetTill = function offsetTill(node, target) {\n var current = node;\n var offset = 0; // If target is not an offsetParent itself, subtract its offsetTop and set correct target\n\n if (target.firstChild && target.firstChild.offsetParent !== target) {\n offset += node.offsetTop - target.offsetTop;\n target = node.offsetParent;\n offset += -node.offsetTop;\n }\n\n do {\n offset += current.offsetTop;\n current = current.offsetParent;\n } while (current && current !== target);\n\n return offset;\n};\n\nvar stickyProp = null;\n\nif (typeof CSS !== \"undefined\" && CSS.supports) {\n if (CSS.supports(\"position\", \"sticky\")) stickyProp = \"sticky\";else if (CSS.supports(\"position\", \"-webkit-sticky\")) stickyProp = \"-webkit-sticky\";\n} // Inspired by https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n\n\nvar passiveArg = false;\n\ntry {\n var opts = Object.defineProperty({}, \"passive\", {\n // eslint-disable-next-line getter-return\n get: function get() {\n passiveArg = {\n passive: true\n };\n }\n });\n window.addEventListener(\"testPassive\", null, opts);\n window.removeEventListener(\"testPassive\", null, opts);\n} catch (e) {}\n\nvar StickyBox = /*#__PURE__*/function (_React$Component) {\n _inherits(StickyBox, _React$Component);\n\n function StickyBox(props) {\n var _this;\n\n _classCallCheck(this, StickyBox);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(StickyBox).call(this, props));\n\n _this.registerContainerRef = function (n) {\n if (!stickyProp) return;\n _this.node = n;\n\n if (n) {\n _this.scrollPane = getScrollParent(_this.node);\n _this.latestScrollY = _this.scrollPane === window ? window.scrollY : _this.scrollPane.scrollTop;\n\n _this.scrollPane.addEventListener(\"scroll\", _this.handleScroll, passiveArg);\n\n _this.scrollPane.addEventListener(\"mousewheel\", _this.handleScroll, passiveArg);\n\n if (_this.scrollPane === window) {\n window.addEventListener(\"resize\", _this.handleWindowResize);\n\n _this.handleWindowResize();\n } else {\n _this.rosp = new resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_this.handleScrollPaneResize);\n\n _this.rosp.observe(_this.scrollPane);\n\n _this.handleScrollPaneResize();\n }\n\n _this.ropn = new resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_this.handleParentNodeResize);\n\n _this.ropn.observe(_this.node.parentNode);\n\n _this.handleParentNodeResize();\n\n _this.ron = new resize_observer_polyfill__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_this.handleNodeResize);\n\n _this.ron.observe(_this.node);\n\n _this.handleNodeResize({\n initial: true\n });\n\n _this.initial();\n } else {\n _this.scrollPane.removeEventListener(\"mousewheel\", _this.handleScroll, passiveArg);\n\n _this.scrollPane.removeEventListener(\"scroll\", _this.handleScroll, passiveArg);\n\n if (_this.scrollPane === window) {\n window.removeEventListener(\"resize\", _this.getMeasurements);\n } else {\n _this.rosp.disconnect();\n }\n\n _this.ropn.disconnect();\n\n _this.ron.disconnect();\n\n _this.scrollPane = null;\n }\n };\n\n _this.getCurrentOffset = function () {\n if (_this.mode === \"relative\") return _this.offset;\n var _this$props = _this.props,\n offsetTop = _this$props.offsetTop,\n offsetBottom = _this$props.offsetBottom;\n\n if (_this.mode === \"stickyTop\") {\n return Math.max(0, _this.scrollPaneOffset + _this.latestScrollY - _this.naturalTop + offsetTop);\n }\n\n if (_this.mode === \"stickyBottom\") {\n return Math.max(0, _this.scrollPaneOffset + _this.latestScrollY + _this.viewPortHeight - (_this.naturalTop + _this.nodeHeight + offsetBottom));\n }\n };\n\n _this.handleWindowResize = function () {\n _this.viewPortHeight = window.innerHeight;\n _this.scrollPaneOffset = 0;\n };\n\n _this.handleScrollPaneResize = function () {\n _this.viewPortHeight = _this.scrollPane.offsetHeight;\n\n if (undefined !== \"production\" && _this.viewPortHeight === 0) {\n console.warn(\"react-sticky-box's scroll pane has a height of 0. This seems odd. Please check this node:\", _this.scrollPane);\n } // Only applicable if scrollPane is an offsetParent\n\n\n if (_this.scrollPane.firstChild.offsetParent === _this.scrollPane) {\n _this.scrollPaneOffset = _this.scrollPane.getBoundingClientRect().top;\n } else {\n _this.scrollPaneOffset = 0;\n }\n };\n\n _this.handleParentNodeResize = function () {\n var parentNode = _this.node.parentNode;\n var computedParentStyle = getComputedStyle(parentNode, null);\n var parentPaddingTop = parseInt(computedParentStyle.getPropertyValue(\"padding-top\"), 10);\n var parentPaddingBottom = parseInt(computedParentStyle.getPropertyValue(\"padding-bottom\"), 10);\n _this.naturalTop = offsetTill(parentNode, _this.scrollPane) + parentPaddingTop + _this.scrollPaneOffset;\n var oldParentHeight = _this.parentHeight;\n _this.parentHeight = parentNode.getBoundingClientRect().height - (parentPaddingTop + parentPaddingBottom);\n\n if (_this.mode === \"relative\") {\n // If parent height decreased...\n if (oldParentHeight > _this.parentHeight) {\n _this.changeToStickyBottomIfBoxTooLow(_this.latestScrollY);\n }\n }\n\n if (oldParentHeight !== _this.parentHeight && _this.mode === \"relative\") {\n _this.latestScrollY = Number.POSITIVE_INFINITY;\n\n _this.handleScroll();\n }\n };\n\n _this.handleNodeResize = function () {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n initial = _ref.initial;\n\n var prevHeight = _this.nodeHeight;\n _this.nodeHeight = _this.node.getBoundingClientRect().height;\n\n if (!initial && prevHeight !== _this.nodeHeight) {\n var _this$props2 = _this.props,\n offsetTop = _this$props2.offsetTop,\n offsetBottom = _this$props2.offsetBottom;\n\n if (_this.nodeHeight + offsetTop + offsetBottom <= _this.viewPortHeight) {\n // Just make it sticky if node smaller than viewport\n _this.mode = undefined;\n\n _this.initial();\n } else {\n var lowestPossible = _this.parentHeight - _this.nodeHeight;\n _this.offset = Math.max(0, Math.min(lowestPossible, _this.getCurrentOffset()));\n\n _this.changeMode(\"relative\");\n }\n }\n };\n\n _this.handleScroll = function () {\n var _this$props3 = _this.props,\n offsetTop = _this$props3.offsetTop,\n offsetBottom = _this$props3.offsetBottom;\n var scrollY = _this.scrollPane === window ? window.scrollY : _this.scrollPane.scrollTop;\n if (scrollY === _this.latestScrollY) return;\n\n if (_this.nodeHeight + offsetTop + offsetBottom <= _this.viewPortHeight) {\n // Just make it sticky if node smaller than viewport\n _this.initial();\n\n _this.latestScrollY = scrollY;\n return;\n }\n\n var scrollDelta = scrollY - _this.latestScrollY;\n _this.offset = _this.getCurrentOffset();\n\n if (scrollDelta > 0) {\n // scroll down\n if (_this.mode === \"stickyTop\") {\n if (scrollY + _this.scrollPaneOffset + offsetTop > _this.naturalTop) {\n if (scrollY + _this.scrollPaneOffset + _this.viewPortHeight <= _this.naturalTop + _this.nodeHeight + _this.offset + offsetBottom) {\n _this.changeMode(\"relative\");\n } else {\n _this.changeMode(\"stickyBottom\");\n }\n }\n } else if (_this.mode === \"relative\") {\n _this.changeToStickyBottomIfBoxTooLow(scrollY);\n }\n } else {\n // scroll up\n if (_this.mode === \"stickyBottom\") {\n if (_this.scrollPaneOffset + scrollY + _this.viewPortHeight < _this.naturalTop + _this.parentHeight + offsetBottom) {\n if (_this.scrollPaneOffset + scrollY + offsetTop >= _this.naturalTop + _this.offset) {\n _this.changeMode(\"relative\");\n } else {\n _this.changeMode(\"stickyTop\");\n }\n }\n } else if (_this.mode === \"relative\") {\n if (_this.scrollPaneOffset + scrollY + offsetTop < _this.naturalTop + _this.offset) {\n _this.changeMode(\"stickyTop\");\n }\n }\n }\n\n _this.latestScrollY = scrollY;\n };\n\n if (props.offset && undefined !== \"production\") {\n console.warn(\"react-sticky-box's \\\"offset\\\" prop is deprecated. Please use \\\"offsetTop\\\" instead. It'll be removed in v0.8.\");\n }\n\n return _this;\n }\n\n _createClass(StickyBox, [{\n key: \"changeMode\",\n value: function changeMode(newMode) {\n var _this$props4 = this.props,\n onChangeMode = _this$props4.onChangeMode,\n offsetTop = _this$props4.offsetTop,\n offsetBottom = _this$props4.offsetBottom;\n onChangeMode(this.mode, newMode);\n this.mode = newMode;\n\n if (newMode === \"relative\") {\n this.node.style.position = \"relative\";\n this.node.style.top = \"\".concat(this.offset, \"px\");\n } else {\n this.node.style.position = stickyProp;\n\n if (newMode === \"stickyBottom\") {\n this.node.style.top = \"\".concat(this.viewPortHeight - this.nodeHeight - offsetBottom, \"px\");\n } else {\n this.node.style.top = \"\".concat(offsetTop, \"px\");\n }\n }\n\n this.offset = this.getCurrentOffset();\n }\n }, {\n key: \"initial\",\n value: function initial() {\n var bottom = this.props.bottom;\n\n if (bottom) {\n if (this.mode !== \"stickyBottom\") this.changeMode(\"stickyBottom\");\n } else {\n if (this.mode !== \"stickyTop\") this.changeMode(\"stickyTop\");\n }\n }\n }, {\n key: \"changeToStickyBottomIfBoxTooLow\",\n value: function changeToStickyBottomIfBoxTooLow(scrollY) {\n var offsetBottom = this.props.offsetBottom;\n\n if (scrollY + this.scrollPaneOffset + this.viewPortHeight >= this.naturalTop + this.nodeHeight + this.offset + offsetBottom) {\n this.changeMode(\"stickyBottom\");\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n style = _this$props5.style;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: className,\n style: style,\n ref: this.registerContainerRef\n }, children);\n }\n }]);\n\n return StickyBox;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n\nStickyBox.defaultProps = {\n onChangeMode: function onChangeMode() {},\n offsetTop: 0,\n offsetBottom: 0\n};\nundefined !== \"production\" ? StickyBox.propTypes = {\n onChangeMode: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n offsetTop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n offsetBottom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n bottom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n} : void 0;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0aWNreS1ib3gvZGlzdC9lc25leHQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0aWNreS1ib3gvZGlzdC9lc25leHQvaW5kZXguanM/YWUxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVzaXplT2JzZXJ2ZXIgZnJvbSBcInJlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbFwiO1xuXG5jb25zdCBnZXRTY3JvbGxQYXJlbnQgPSBub2RlID0+IHtcbiAgbGV0IHBhcmVudCA9IG5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgY29uc3Qgb3ZlcmZsb3dZVmFsID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvdy15XCIpO1xuICAgIGlmIChwYXJlbnQgPT09IGRvY3VtZW50LmJvZHkpIHJldHVybiB3aW5kb3c7XG4gICAgaWYgKG92ZXJmbG93WVZhbCA9PT0gXCJhdXRvXCIgfHwgb3ZlcmZsb3dZVmFsID09PSBcInNjcm9sbFwiKSByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG9mZnNldFRpbGwgPSAobm9kZSwgdGFyZ2V0KSA9PiB7XG4gIGxldCBjdXJyZW50ID0gbm9kZTtcbiAgbGV0IG9mZnNldCA9IDA7IC8vIElmIHRhcmdldCBpcyBub3QgYW4gb2Zmc2V0UGFyZW50IGl0c2VsZiwgc3VidHJhY3QgaXRzIG9mZnNldFRvcCBhbmQgc2V0IGNvcnJlY3QgdGFyZ2V0XG5cbiAgaWYgKHRhcmdldC5maXJzdENoaWxkICYmIHRhcmdldC5maXJzdENoaWxkLm9mZnNldFBhcmVudCAhPT0gdGFyZ2V0KSB7XG4gICAgb2Zmc2V0ICs9IG5vZGUub2Zmc2V0VG9wIC0gdGFyZ2V0Lm9mZnNldFRvcDtcbiAgICB0YXJnZXQgPSBub2RlLm9mZnNldFBhcmVudDtcbiAgICBvZmZzZXQgKz0gLW5vZGUub2Zmc2V0VG9wO1xuICB9XG5cbiAgZG8ge1xuICAgIG9mZnNldCArPSBjdXJyZW50Lm9mZnNldFRvcDtcbiAgICBjdXJyZW50ID0gY3VycmVudC5vZmZzZXRQYXJlbnQ7XG4gIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gdGFyZ2V0KTtcblxuICByZXR1cm4gb2Zmc2V0O1xufTtcblxubGV0IHN0aWNreVByb3AgPSBudWxsO1xuXG5pZiAodHlwZW9mIENTUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDU1Muc3VwcG9ydHMpIHtcbiAgaWYgKENTUy5zdXBwb3J0cyhcInBvc2l0aW9uXCIsIFwic3RpY2t5XCIpKSBzdGlja3lQcm9wID0gXCJzdGlja3lcIjtlbHNlIGlmIChDU1Muc3VwcG9ydHMoXCJwb3NpdGlvblwiLCBcIi13ZWJraXQtc3RpY2t5XCIpKSBzdGlja3lQcm9wID0gXCItd2Via2l0LXN0aWNreVwiO1xufSAvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9FdmVudExpc3RlbmVyT3B0aW9ucy9ibG9iL2doLXBhZ2VzL2V4cGxhaW5lci5tZCNmZWF0dXJlLWRldGVjdGlvblxuXG5cbmxldCBwYXNzaXZlQXJnID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBcInBhc3NpdmVcIiwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnZXR0ZXItcmV0dXJuXG4gICAgZ2V0KCkge1xuICAgICAgcGFzc2l2ZUFyZyA9IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgfSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVcIiwgbnVsbCwgb3B0cyk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVcIiwgbnVsbCwgb3B0cyk7XG59IGNhdGNoIChlKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGlja3lCb3ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMucmVnaXN0ZXJDb250YWluZXJSZWYgPSBuID0+IHtcbiAgICAgIGlmICghc3RpY2t5UHJvcCkgcmV0dXJuO1xuICAgICAgdGhpcy5ub2RlID0gbjtcblxuICAgICAgaWYgKG4pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxQYW5lID0gZ2V0U2Nyb2xsUGFyZW50KHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubGF0ZXN0U2Nyb2xsWSA9IHRoaXMuc2Nyb2xsUGFuZSA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiB0aGlzLnNjcm9sbFBhbmUuc2Nyb2xsVG9wO1xuICAgICAgICB0aGlzLnNjcm9sbFBhbmUuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmhhbmRsZVNjcm9sbCwgcGFzc2l2ZUFyZyk7XG4gICAgICAgIHRoaXMuc2Nyb2xsUGFuZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2V3aGVlbFwiLCB0aGlzLmhhbmRsZVNjcm9sbCwgcGFzc2l2ZUFyZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsUGFuZSA9PT0gd2luZG93KSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlV2luZG93UmVzaXplKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3NwID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuaGFuZGxlU2Nyb2xsUGFuZVJlc2l6ZSk7XG4gICAgICAgICAgdGhpcy5yb3NwLm9ic2VydmUodGhpcy5zY3JvbGxQYW5lKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbFBhbmVSZXNpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm9wbiA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmhhbmRsZVBhcmVudE5vZGVSZXNpemUpO1xuICAgICAgICB0aGlzLnJvcG4ub2JzZXJ2ZSh0aGlzLm5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFyZW50Tm9kZVJlc2l6ZSgpO1xuICAgICAgICB0aGlzLnJvbiA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmhhbmRsZU5vZGVSZXNpemUpO1xuICAgICAgICB0aGlzLnJvbi5vYnNlcnZlKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMuaGFuZGxlTm9kZVJlc2l6ZSh7XG4gICAgICAgICAgaW5pdGlhbDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbFBhbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNld2hlZWxcIiwgdGhpcy5oYW5kbGVTY3JvbGwsIHBhc3NpdmVBcmcpO1xuICAgICAgICB0aGlzLnNjcm9sbFBhbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmhhbmRsZVNjcm9sbCwgcGFzc2l2ZUFyZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsUGFuZSA9PT0gd2luZG93KSB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5nZXRNZWFzdXJlbWVudHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm9zcC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvcG4uZGlzY29ubmVjdCgpO1xuICAgICAgICB0aGlzLnJvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsUGFuZSA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q3VycmVudE9mZnNldCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwicmVsYXRpdmVcIikgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXRUb3AsXG4gICAgICAgIG9mZnNldEJvdHRvbVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic3RpY2t5VG9wXCIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIHRoaXMubGF0ZXN0U2Nyb2xsWSAtIHRoaXMubmF0dXJhbFRvcCArIG9mZnNldFRvcCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic3RpY2t5Qm90dG9tXCIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIHRoaXMubGF0ZXN0U2Nyb2xsWSArIHRoaXMudmlld1BvcnRIZWlnaHQgLSAodGhpcy5uYXR1cmFsVG9wICsgdGhpcy5ub2RlSGVpZ2h0ICsgb2Zmc2V0Qm90dG9tKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaGFuZGxlV2luZG93UmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy52aWV3UG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIHRoaXMuc2Nyb2xsUGFuZU9mZnNldCA9IDA7XG4gICAgfTtcblxuICAgIHRoaXMuaGFuZGxlU2Nyb2xsUGFuZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMudmlld1BvcnRIZWlnaHQgPSB0aGlzLnNjcm9sbFBhbmUub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHRoaXMudmlld1BvcnRIZWlnaHQgPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGByZWFjdC1zdGlja3ktYm94J3Mgc2Nyb2xsIHBhbmUgaGFzIGEgaGVpZ2h0IG9mIDAuIFRoaXMgc2VlbXMgb2RkLiBQbGVhc2UgY2hlY2sgdGhpcyBub2RlOmAsIHRoaXMuc2Nyb2xsUGFuZSk7XG4gICAgICB9IC8vIE9ubHkgYXBwbGljYWJsZSBpZiBzY3JvbGxQYW5lIGlzIGFuIG9mZnNldFBhcmVudFxuXG5cbiAgICAgIGlmICh0aGlzLnNjcm9sbFBhbmUuZmlyc3RDaGlsZC5vZmZzZXRQYXJlbnQgPT09IHRoaXMuc2Nyb2xsUGFuZSkge1xuICAgICAgICB0aGlzLnNjcm9sbFBhbmVPZmZzZXQgPSB0aGlzLnNjcm9sbFBhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxQYW5lT2Zmc2V0ID0gMDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oYW5kbGVQYXJlbnROb2RlUmVzaXplID0gKCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubm9kZS5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgY29tcHV0ZWRQYXJlbnRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSwgbnVsbCk7XG4gICAgICBjb25zdCBwYXJlbnRQYWRkaW5nVG9wID0gcGFyc2VJbnQoY29tcHV0ZWRQYXJlbnRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcbiAgICAgIGNvbnN0IHBhcmVudFBhZGRpbmdCb3R0b20gPSBwYXJzZUludChjb21wdXRlZFBhcmVudFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLWJvdHRvbVwiKSwgMTApO1xuICAgICAgdGhpcy5uYXR1cmFsVG9wID0gb2Zmc2V0VGlsbChwYXJlbnROb2RlLCB0aGlzLnNjcm9sbFBhbmUpICsgcGFyZW50UGFkZGluZ1RvcCArIHRoaXMuc2Nyb2xsUGFuZU9mZnNldDtcbiAgICAgIGNvbnN0IG9sZFBhcmVudEhlaWdodCA9IHRoaXMucGFyZW50SGVpZ2h0O1xuICAgICAgdGhpcy5wYXJlbnRIZWlnaHQgPSBwYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIChwYXJlbnRQYWRkaW5nVG9wICsgcGFyZW50UGFkZGluZ0JvdHRvbSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwicmVsYXRpdmVcIikge1xuICAgICAgICAvLyBJZiBwYXJlbnQgaGVpZ2h0IGRlY3JlYXNlZC4uLlxuICAgICAgICBpZiAob2xkUGFyZW50SGVpZ2h0ID4gdGhpcy5wYXJlbnRIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZVRvU3RpY2t5Qm90dG9tSWZCb3hUb29Mb3codGhpcy5sYXRlc3RTY3JvbGxZKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob2xkUGFyZW50SGVpZ2h0ICE9PSB0aGlzLnBhcmVudEhlaWdodCAmJiB0aGlzLm1vZGUgPT09IFwicmVsYXRpdmVcIikge1xuICAgICAgICB0aGlzLmxhdGVzdFNjcm9sbFkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHRoaXMuaGFuZGxlU2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaGFuZGxlTm9kZVJlc2l6ZSA9ICh7XG4gICAgICBpbml0aWFsXG4gICAgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBwcmV2SGVpZ2h0ID0gdGhpcy5ub2RlSGVpZ2h0O1xuICAgICAgdGhpcy5ub2RlSGVpZ2h0ID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgaWYgKCFpbml0aWFsICYmIHByZXZIZWlnaHQgIT09IHRoaXMubm9kZUhlaWdodCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb2Zmc2V0VG9wLFxuICAgICAgICAgIG9mZnNldEJvdHRvbVxuICAgICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5ub2RlSGVpZ2h0ICsgb2Zmc2V0VG9wICsgb2Zmc2V0Qm90dG9tIDw9IHRoaXMudmlld1BvcnRIZWlnaHQpIHtcbiAgICAgICAgICAvLyBKdXN0IG1ha2UgaXQgc3RpY2t5IGlmIG5vZGUgc21hbGxlciB0aGFuIHZpZXdwb3J0XG4gICAgICAgICAgdGhpcy5tb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuaW5pdGlhbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGxvd2VzdFBvc3NpYmxlID0gdGhpcy5wYXJlbnRIZWlnaHQgLSB0aGlzLm5vZGVIZWlnaHQ7XG4gICAgICAgICAgdGhpcy5vZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihsb3dlc3RQb3NzaWJsZSwgdGhpcy5nZXRDdXJyZW50T2Zmc2V0KCkpKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZU1vZGUoXCJyZWxhdGl2ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0VG9wLFxuICAgICAgICBvZmZzZXRCb3R0b21cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc2Nyb2xsWSA9IHRoaXMuc2Nyb2xsUGFuZSA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiB0aGlzLnNjcm9sbFBhbmUuc2Nyb2xsVG9wO1xuICAgICAgaWYgKHNjcm9sbFkgPT09IHRoaXMubGF0ZXN0U2Nyb2xsWSkgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5ub2RlSGVpZ2h0ICsgb2Zmc2V0VG9wICsgb2Zmc2V0Qm90dG9tIDw9IHRoaXMudmlld1BvcnRIZWlnaHQpIHtcbiAgICAgICAgLy8gSnVzdCBtYWtlIGl0IHN0aWNreSBpZiBub2RlIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuICAgICAgICB0aGlzLmluaXRpYWwoKTtcbiAgICAgICAgdGhpcy5sYXRlc3RTY3JvbGxZID0gc2Nyb2xsWTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY3JvbGxEZWx0YSA9IHNjcm9sbFkgLSB0aGlzLmxhdGVzdFNjcm9sbFk7XG4gICAgICB0aGlzLm9mZnNldCA9IHRoaXMuZ2V0Q3VycmVudE9mZnNldCgpO1xuXG4gICAgICBpZiAoc2Nyb2xsRGVsdGEgPiAwKSB7XG4gICAgICAgIC8vIHNjcm9sbCBkb3duXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic3RpY2t5VG9wXCIpIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsWSArIHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIG9mZnNldFRvcCA+IHRoaXMubmF0dXJhbFRvcCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbFkgKyB0aGlzLnNjcm9sbFBhbmVPZmZzZXQgKyB0aGlzLnZpZXdQb3J0SGVpZ2h0IDw9IHRoaXMubmF0dXJhbFRvcCArIHRoaXMubm9kZUhlaWdodCArIHRoaXMub2Zmc2V0ICsgb2Zmc2V0Qm90dG9tKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlTW9kZShcInJlbGF0aXZlXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VNb2RlKFwic3RpY2t5Qm90dG9tXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwicmVsYXRpdmVcIikge1xuICAgICAgICAgIHRoaXMuY2hhbmdlVG9TdGlja3lCb3R0b21JZkJveFRvb0xvdyhzY3JvbGxZKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2Nyb2xsIHVwXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic3RpY2t5Qm90dG9tXCIpIHtcbiAgICAgICAgICBpZiAodGhpcy5zY3JvbGxQYW5lT2Zmc2V0ICsgc2Nyb2xsWSArIHRoaXMudmlld1BvcnRIZWlnaHQgPCB0aGlzLm5hdHVyYWxUb3AgKyB0aGlzLnBhcmVudEhlaWdodCArIG9mZnNldEJvdHRvbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIHNjcm9sbFkgKyBvZmZzZXRUb3AgPj0gdGhpcy5uYXR1cmFsVG9wICsgdGhpcy5vZmZzZXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VNb2RlKFwicmVsYXRpdmVcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZU1vZGUoXCJzdGlja3lUb3BcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJyZWxhdGl2ZVwiKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIHNjcm9sbFkgKyBvZmZzZXRUb3AgPCB0aGlzLm5hdHVyYWxUb3AgKyB0aGlzLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VNb2RlKFwic3RpY2t5VG9wXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxhdGVzdFNjcm9sbFkgPSBzY3JvbGxZO1xuICAgIH07XG5cbiAgICBpZiAocHJvcHMub2Zmc2V0ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS53YXJuKGByZWFjdC1zdGlja3ktYm94J3MgXCJvZmZzZXRcIiBwcm9wIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCJvZmZzZXRUb3BcIiBpbnN0ZWFkLiBJdCdsbCBiZSByZW1vdmVkIGluIHYwLjguYCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTW9kZShuZXdNb2RlKSB7XG4gICAgY29uc3Qge1xuICAgICAgb25DaGFuZ2VNb2RlLFxuICAgICAgb2Zmc2V0VG9wLFxuICAgICAgb2Zmc2V0Qm90dG9tXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgb25DaGFuZ2VNb2RlKHRoaXMubW9kZSwgbmV3TW9kZSk7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcblxuICAgIGlmIChuZXdNb2RlID09PSBcInJlbGF0aXZlXCIpIHtcbiAgICAgIHRoaXMubm9kZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIHRoaXMubm9kZS5zdHlsZS50b3AgPSBgJHt0aGlzLm9mZnNldH1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9kZS5zdHlsZS5wb3NpdGlvbiA9IHN0aWNreVByb3A7XG5cbiAgICAgIGlmIChuZXdNb2RlID09PSBcInN0aWNreUJvdHRvbVwiKSB7XG4gICAgICAgIHRoaXMubm9kZS5zdHlsZS50b3AgPSBgJHt0aGlzLnZpZXdQb3J0SGVpZ2h0IC0gdGhpcy5ub2RlSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tfXB4YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9kZS5zdHlsZS50b3AgPSBgJHtvZmZzZXRUb3B9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5nZXRDdXJyZW50T2Zmc2V0KCk7XG4gIH1cblxuICBpbml0aWFsKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGJvdHRvbVxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGJvdHRvbSkge1xuICAgICAgaWYgKHRoaXMubW9kZSAhPT0gXCJzdGlja3lCb3R0b21cIikgdGhpcy5jaGFuZ2VNb2RlKFwic3RpY2t5Qm90dG9tXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tb2RlICE9PSBcInN0aWNreVRvcFwiKSB0aGlzLmNoYW5nZU1vZGUoXCJzdGlja3lUb3BcIik7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVG9TdGlja3lCb3R0b21JZkJveFRvb0xvdyhzY3JvbGxZKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0Qm90dG9tXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoc2Nyb2xsWSArIHRoaXMuc2Nyb2xsUGFuZU9mZnNldCArIHRoaXMudmlld1BvcnRIZWlnaHQgPj0gdGhpcy5uYXR1cmFsVG9wICsgdGhpcy5ub2RlSGVpZ2h0ICsgdGhpcy5vZmZzZXQgKyBvZmZzZXRCb3R0b20pIHtcbiAgICAgIHRoaXMuY2hhbmdlTW9kZShcInN0aWNreUJvdHRvbVwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBzdHlsZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgcmVmOiB0aGlzLnJlZ2lzdGVyQ29udGFpbmVyUmVmXG4gICAgfSwgY2hpbGRyZW4pO1xuICB9XG5cbn1cblN0aWNreUJveC5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uQ2hhbmdlTW9kZTogKCkgPT4ge30sXG4gIG9mZnNldFRvcDogMCxcbiAgb2Zmc2V0Qm90dG9tOiAwXG59O1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3RpY2t5Qm94LnByb3BUeXBlcyA9IHtcbiAgb25DaGFuZ2VNb2RlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb2Zmc2V0VG9wOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvZmZzZXRCb3R0b206IFByb3BUeXBlcy5udW1iZXIsXG4gIGJvdHRvbTogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFmQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFOQTtBQVNBO0FBQ0E7QUFYQTtBQUNBO0FBYUE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBdkJBO0FBeUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBekNBO0FBQ0E7QUEyQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQW5CQTtBQUNBO0FBcUJBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXJCQTtBQUNBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaERBO0FBQ0E7QUFrREE7QUFDQTtBQUNBO0FBQ0E7QUF2TEE7QUF1TEE7QUFDQTs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTs7OztBQXBQQTtBQUNBO0FBREE7QUF1UEE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react-sticky-box/dist/esnext/index.js\n"); - -/***/ }), - -/***/ "../node_modules/react/cjs/react.development.js": -/*!******************************************************!*\ - !*** ../node_modules/react/cjs/react.development.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.13.0\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nif (undefined !== \"production\") {\n (function () {\n 'use strict';\n\n var _assign = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\");\n\n var checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"../node_modules/prop-types/checkPropTypes.js\");\n\n var ReactVersion = '16.13.0'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n\n var hasSymbol = typeof Symbol === 'function' && Symbol[\"for\"];\n var REACT_ELEMENT_TYPE = hasSymbol ? Symbol[\"for\"]('react.element') : 0xeac7;\n var REACT_PORTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.portal') : 0xeaca;\n var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol[\"for\"]('react.fragment') : 0xeacb;\n var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.strict_mode') : 0xeacc;\n var REACT_PROFILER_TYPE = hasSymbol ? Symbol[\"for\"]('react.profiler') : 0xead2;\n var REACT_PROVIDER_TYPE = hasSymbol ? Symbol[\"for\"]('react.provider') : 0xeacd;\n var REACT_CONTEXT_TYPE = hasSymbol ? Symbol[\"for\"]('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n\n var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol[\"for\"]('react.concurrent_mode') : 0xeacf;\n var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol[\"for\"]('react.forward_ref') : 0xead0;\n var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense') : 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol[\"for\"]('react.suspense_list') : 0xead8;\n var REACT_MEMO_TYPE = hasSymbol ? Symbol[\"for\"]('react.memo') : 0xead3;\n var REACT_LAZY_TYPE = hasSymbol ? Symbol[\"for\"]('react.lazy') : 0xead4;\n var REACT_BLOCK_TYPE = hasSymbol ? Symbol[\"for\"]('react.block') : 0xead9;\n var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol[\"for\"]('react.fundamental') : 0xead5;\n var REACT_RESPONDER_TYPE = hasSymbol ? Symbol[\"for\"]('react.responder') : 0xead6;\n var REACT_SCOPE_TYPE = hasSymbol ? Symbol[\"for\"]('react.scope') : 0xead7;\n var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator';\n\n function getIteratorFn(maybeIterable) {\n if (maybeIterable === null || _typeof(maybeIterable) !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n }\n /**\n * Keeps track of the current dispatcher.\n */\n\n\n var ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n };\n /**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\n\n var ReactCurrentBatchConfig = {\n suspense: null\n };\n /**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\n\n var ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n };\n var BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\n\n function describeComponentFrame(name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n }\n\n var Resolved = 1;\n\n function refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n }\n\n function getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n }\n\n function getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (_typeof(type) === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n }\n\n var ReactDebugCurrentFrame = {};\n var currentlyValidatingElement = null;\n\n function setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n }\n\n {\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = ''; // Add an extra top frame while an element is being validated\n\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n } // Delegate to the injected renderer-specific implementation\n\n\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n }\n /**\n * Used by act() to track whether you're inside an act() scope.\n */\n\n var IsSomeRendererActing = {\n current: false\n };\n var ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n ReactCurrentOwner: ReactCurrentOwner,\n IsSomeRendererActing: IsSomeRendererActing,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n };\n {\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n } // by calls to these methods by a Babel plugin.\n //\n // In PROD (or in packages without access to React internals),\n // they are left as they are instead.\n\n function warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n }\n\n function error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n\n function printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n }\n\n var didWarnStateUpdateForUnmountedComponent = {};\n\n function warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + \".\" + callerName;\n\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n\n error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n }\n /**\n * This is the abstract API for an update queue.\n */\n\n\n var ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function isMounted(publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function enqueueForceUpdate(publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function enqueueReplaceState(publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function enqueueSetState(publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n };\n var emptyObject = {};\n {\n Object.freeze(emptyObject);\n }\n /**\n * Base class helpers for the updating state of a component.\n */\n\n function Component(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n // renderer.\n\n this.updater = updater || ReactNoopUpdateQueue;\n }\n\n Component.prototype.isReactComponent = {};\n /**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\n Component.prototype.setState = function (partialState, callback) {\n if (!(_typeof(partialState) === 'object' || typeof partialState === 'function' || partialState == null)) {\n {\n throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");\n }\n }\n\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n };\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n };\n /**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n {\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n\n var defineDeprecationWarning = function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function get() {\n warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n return undefined;\n }\n });\n };\n\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n }\n\n function ComponentDummy() {}\n\n ComponentDummy.prototype = Component.prototype;\n /**\n * Convenience component with default shallow equality check for sCU.\n */\n\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n\n var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\n pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\n _assign(pureComponentPrototype, Component.prototype);\n\n pureComponentPrototype.isPureReactComponent = true; // an immutable object with a single mutable value\n\n function createRef() {\n var refObject = {\n current: null\n };\n {\n Object.seal(refObject);\n }\n return refObject;\n }\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n };\n var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n {\n didWarnAboutStringRefs = {};\n }\n\n function hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n }\n\n function hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n }\n\n function defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function warnAboutAccessingKey() {\n {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n\n function defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function warnAboutAccessingRef() {\n {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n\n function warnIfStringRefCannotBeAutoConverted(config) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n }\n /**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\n var ReactElement = function ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n return element;\n };\n /**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\n\n function createElement(type, config, children) {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n {\n warnIfStringRefCannotBeAutoConverted(config);\n }\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n\n function cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n return newElement;\n }\n /**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\n\n function cloneElement(element, config, children) {\n if (!!(element === null || element === undefined)) {\n {\n throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\");\n }\n }\n\n var propName; // Original props are copied\n\n var props = _assign({}, element.props); // Reserved names are extracted\n\n\n var key = element.key;\n var ref = element.ref; // Self is preserved since the owner is preserved.\n\n var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n\n var source = element._source; // Owner will be preserved, unless ref is overridden\n\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n } // Remaining properties override existing props\n\n\n var defaultProps;\n\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n }\n /**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\n function isValidElement(object) {\n return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n\n var SEPARATOR = '.';\n var SUBSEPARATOR = ':';\n /**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\n function escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n return '$' + escapedString;\n }\n /**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\n var didWarnAboutMaps = false;\n var userProvidedKeyEscapeRegex = /\\/+/g;\n\n function escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n }\n\n var POOL_SIZE = 10;\n var traverseContextPool = [];\n\n function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n }\n\n function releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n }\n /**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\n\n\n function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = _typeof(children);\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n if (!didWarnAboutMaps) {\n warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n }\n }\n var iterator = iteratorFn.call(children);\n var step;\n var ii = 0;\n\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n var childrenString = '' + children;\n {\n {\n throw Error(\"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \").\" + addendum);\n }\n }\n }\n }\n\n return subtreeCount;\n }\n /**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\n\n\n function traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n }\n /**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\n function getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (_typeof(component) === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n } // Implicit key determined by the index in the set\n\n\n return index.toString(36);\n }\n\n function forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n func.call(context, child, bookKeeping.count++);\n }\n /**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\n function forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n }\n\n function mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n var mappedChild = func.call(context, child, bookKeeping.count++);\n\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n\n result.push(mappedChild);\n }\n }\n\n function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n }\n /**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\n function mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n }\n /**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\n function countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n }\n /**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\n function toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n }\n /**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\n function onlyChild(children) {\n if (!isValidElement(children)) {\n {\n throw Error(\"React.Children.only expected to receive a single React element child.\");\n }\n }\n\n return children;\n }\n\n function createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {\n error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);\n }\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n Object.defineProperties(Consumer, {\n Provider: {\n get: function get() {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n\n return context.Provider;\n },\n set: function set(_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function get() {\n return context._currentValue;\n },\n set: function set(_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function get() {\n return context._currentValue2;\n },\n set: function set(_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function get() {\n return context._threadCount;\n },\n set: function set(_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function get() {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n\n return context.Consumer;\n }\n }\n }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n context.Consumer = Consumer;\n }\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n return context;\n }\n\n function lazy(ctor) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n {\n // In production, this would just set it on the object.\n var defaultProps;\n var propTypes;\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function get() {\n return defaultProps;\n },\n set: function set(newDefaultProps) {\n error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n defaultProps = newDefaultProps; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function get() {\n return propTypes;\n },\n set: function set(newPropTypes) {\n error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n propTypes = newPropTypes; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n return lazyType;\n }\n\n function forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n error('forwardRef requires a render function but was given %s.', render === null ? 'null' : _typeof(render));\n } else {\n if (render.length !== 0 && render.length !== 2) {\n error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n }\n }\n\n if (render != null) {\n if (render.defaultProps != null || render.propTypes != null) {\n error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n }\n }\n }\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n }\n\n function isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || _typeof(type) === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n }\n\n function memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : _typeof(type));\n }\n }\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n }\n\n function resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n\n if (!(dispatcher !== null)) {\n {\n throw Error(\"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\");\n }\n }\n\n return dispatcher;\n }\n\n function useContext(Context, unstable_observedBits) {\n var dispatcher = resolveDispatcher();\n {\n if (unstable_observedBits !== undefined) {\n error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');\n } // TODO: add a more generic warning for invalid values.\n\n\n if (Context._context !== undefined) {\n var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n\n if (realContext.Consumer === Context) {\n error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n return dispatcher.useContext(Context, unstable_observedBits);\n }\n\n function useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n }\n\n function useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n }\n\n function useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n }\n\n function useEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, deps);\n }\n\n function useLayoutEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, deps);\n }\n\n function useCallback(callback, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, deps);\n }\n\n function useMemo(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, deps);\n }\n\n function useImperativeHandle(ref, create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, deps);\n }\n\n function useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n }\n\n var propTypesMisspellWarningShown;\n {\n propTypesMisspellWarningShown = false;\n }\n\n function getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n\n function getSourceInfoErrorAddendum(source) {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n\n function getSourceInfoErrorAddendumForProps(elementProps) {\n if (elementProps !== null && elementProps !== undefined) {\n return getSourceInfoErrorAddendum(elementProps.__source);\n }\n\n return '';\n }\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\n var ownerHasKeyUseWarning = {};\n\n function getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n /**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\n function validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n {\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n setCurrentlyValidatingElement(null);\n }\n /**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\n function validateChildKeys(node, parentType) {\n if (_typeof(node) !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n /**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\n function validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var name = getComponentName(type);\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (_typeof(type) === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n }\n /**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\n function validateFragmentProps(fragment) {\n {\n setCurrentlyValidatingElement(fragment);\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n }\n }\n\n function createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || _typeof(type) === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = _typeof(type);\n }\n\n {\n error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n }\n\n var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n\n var didWarnAboutDeprecatedCreateFactory = false;\n\n function createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n {\n if (!didWarnAboutDeprecatedCreateFactory) {\n didWarnAboutDeprecatedCreateFactory = true;\n warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n } // Legacy hook: remove it\n\n\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function get() {\n warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n return validatedFactory;\n }\n\n function cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n\n validatePropTypes(newElement);\n return newElement;\n }\n\n {\n try {\n var frozenObject = Object.freeze({});\n var testMap = new Map([[frozenObject, null]]);\n var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {}\n }\n var createElement$1 = createElementWithValidation;\n var cloneElement$1 = cloneElementWithValidation;\n var createFactory = createFactoryWithValidation;\n var Children = {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n };\n exports.Children = Children;\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\n exports.cloneElement = cloneElement$1;\n exports.createContext = createContext;\n exports.createElement = createElement$1;\n exports.createFactory = createFactory;\n exports.createRef = createRef;\n exports.forwardRef = forwardRef;\n exports.isValidElement = isValidElement;\n exports.lazy = lazy;\n exports.memo = memo;\n exports.useCallback = useCallback;\n exports.useContext = useContext;\n exports.useDebugValue = useDebugValue;\n exports.useEffect = useEffect;\n exports.useImperativeHandle = useImperativeHandle;\n exports.useLayoutEffect = useLayoutEffect;\n exports.useMemo = useMemo;\n exports.useReducer = useReducer;\n exports.useRef = useRef;\n exports.useState = useState;\n exports.version = ReactVersion;\n })();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzP2FlZjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4wXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNi4xMy4wJztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3JhcnlcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJhdGNoJ3MgY29uZmlndXJhdGlvbiBzdWNoIGFzIGhvdyBsb25nIGFuIHVwZGF0ZVxuICogc2hvdWxkIHN1c3BlbmQgZm9yIGlmIGl0IG5lZWRzIHRvLlxuICovXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSB7XG4gIHN1c3BlbnNlOiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBCRUZPUkVfU0xBU0hfUkUgPSAvXiguKilbXFxcXFxcL10vO1xuZnVuY3Rpb24gZGVzY3JpYmVDb21wb25lbnRGcmFtZSAobmFtZSwgc291cmNlLCBvd25lck5hbWUpIHtcbiAgdmFyIHNvdXJjZUluZm8gPSAnJztcblxuICBpZiAoc291cmNlKSB7XG4gICAgdmFyIHBhdGggPSBzb3VyY2UuZmlsZU5hbWU7XG4gICAgdmFyIGZpbGVOYW1lID0gcGF0aC5yZXBsYWNlKEJFRk9SRV9TTEFTSF9SRSwgJycpO1xuXG4gICAge1xuICAgICAgLy8gSW4gREVWLCBpbmNsdWRlIGNvZGUgZm9yIGEgY29tbW9uIHNwZWNpYWwgY2FzZTpcbiAgICAgIC8vIHByZWZlciBcImZvbGRlci9pbmRleC5qc1wiIGluc3RlYWQgb2YganVzdCBcImluZGV4LmpzXCIuXG4gICAgICBpZiAoL15pbmRleFxcLi8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcGF0aC5tYXRjaChCRUZPUkVfU0xBU0hfUkUpO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHZhciBwYXRoQmVmb3JlU2xhc2ggPSBtYXRjaFsxXTtcblxuICAgICAgICAgIGlmIChwYXRoQmVmb3JlU2xhc2gpIHtcbiAgICAgICAgICAgIHZhciBmb2xkZXJOYW1lID0gcGF0aEJlZm9yZVNsYXNoLnJlcGxhY2UoQkVGT1JFX1NMQVNIX1JFLCAnJyk7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZvbGRlck5hbWUgKyAnLycgKyBmaWxlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3VyY2VJbmZvID0gJyAoYXQgJyArIGZpbGVOYW1lICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKSc7XG4gIH0gZWxzZSBpZiAob3duZXJOYW1lKSB7XG4gICAgc291cmNlSW5mbyA9ICcgKGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSArICcpJztcbiAgfVxuXG4gIHJldHVybiAnXFxuICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93bicpICsgc291cmNlSW5mbztcbn1cblxudmFyIFJlc29sdmVkID0gMTtcbmZ1bmN0aW9uIHJlZmluZVJlc29sdmVkTGF6eUNvbXBvbmVudChsYXp5Q29tcG9uZW50KSB7XG4gIHJldHVybiBsYXp5Q29tcG9uZW50Ll9zdGF0dXMgPT09IFJlc29sdmVkID8gbGF6eUNvbXBvbmVudC5fcmVzdWx0IDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHJldHVybiAnQ29udGV4dC5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgcmV0dXJuICdDb250ZXh0LlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgdGhlbmFibGUgPSB0eXBlO1xuICAgICAgICAgIHZhciByZXNvbHZlZFRoZW5hYmxlID0gcmVmaW5lUmVzb2x2ZWRMYXp5Q29tcG9uZW50KHRoZW5hYmxlKTtcblxuICAgICAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShyZXNvbHZlZFRoZW5hYmxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50ID0gbnVsbDtcbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50ID0gZWxlbWVudDtcbiAgfVxufVxuXG57XG4gIC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudC50eXBlKTtcbiAgICAgIHZhciBvd25lciA9IGN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50Ll9vd25lcjtcbiAgICAgIHN0YWNrICs9IGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgY3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSk7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBfYXNzaWduKFJlYWN0U2hhcmVkSW50ZXJuYWxzLCB7XG4gICAgLy8gVGhlc2Ugc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLlxuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWU6IFJlYWN0RGVidWdDdXJyZW50RnJhbWUsXG4gICAgLy8gU2hpbSBmb3IgUmVhY3QgRE9NIDE2LjAuMCB3aGljaCBzdGlsbCBkZXN0cnVjdHVyZWQgKGJ1dCBub3QgdXNlZCkgdGhpcy5cbiAgICAvLyBUT0RPOiByZW1vdmUgaW4gUmVhY3QgMTcuMC5cbiAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rOiB7fVxuICB9KTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgaGFzRXhpc3RpbmdTdGFjayA9IGFyZ3MubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJyAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0uaW5kZXhPZignXFxuICAgIGluJykgPT09IDA7XG5cbiAgICBpZiAoIWhhc0V4aXN0aW5nU3RhY2spIHtcbiAgICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3Qtc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9ICgnJyArIGtleSkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuXG52YXIgUE9PTF9TSVpFID0gMTA7XG52YXIgdHJhdmVyc2VDb250ZXh0UG9vbCA9IFtdO1xuXG5mdW5jdGlvbiBnZXRQb29sZWRUcmF2ZXJzZUNvbnRleHQobWFwUmVzdWx0LCBrZXlQcmVmaXgsIG1hcEZ1bmN0aW9uLCBtYXBDb250ZXh0KSB7XG4gIGlmICh0cmF2ZXJzZUNvbnRleHRQb29sLmxlbmd0aCkge1xuICAgIHZhciB0cmF2ZXJzZUNvbnRleHQgPSB0cmF2ZXJzZUNvbnRleHRQb29sLnBvcCgpO1xuICAgIHRyYXZlcnNlQ29udGV4dC5yZXN1bHQgPSBtYXBSZXN1bHQ7XG4gICAgdHJhdmVyc2VDb250ZXh0LmtleVByZWZpeCA9IGtleVByZWZpeDtcbiAgICB0cmF2ZXJzZUNvbnRleHQuZnVuYyA9IG1hcEZ1bmN0aW9uO1xuICAgIHRyYXZlcnNlQ29udGV4dC5jb250ZXh0ID0gbWFwQ29udGV4dDtcbiAgICB0cmF2ZXJzZUNvbnRleHQuY291bnQgPSAwO1xuICAgIHJldHVybiB0cmF2ZXJzZUNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogbWFwUmVzdWx0LFxuICAgICAga2V5UHJlZml4OiBrZXlQcmVmaXgsXG4gICAgICBmdW5jOiBtYXBGdW5jdGlvbixcbiAgICAgIGNvbnRleHQ6IG1hcENvbnRleHQsXG4gICAgICBjb3VudDogMFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVsZWFzZVRyYXZlcnNlQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdHJhdmVyc2VDb250ZXh0LnJlc3VsdCA9IG51bGw7XG4gIHRyYXZlcnNlQ29udGV4dC5rZXlQcmVmaXggPSBudWxsO1xuICB0cmF2ZXJzZUNvbnRleHQuZnVuYyA9IG51bGw7XG4gIHRyYXZlcnNlQ29udGV4dC5jb250ZXh0ID0gbnVsbDtcbiAgdHJhdmVyc2VDb250ZXh0LmNvdW50ID0gMDtcblxuICBpZiAodHJhdmVyc2VDb250ZXh0UG9vbC5sZW5ndGggPCBQT09MX1NJWkUpIHtcbiAgICB0cmF2ZXJzZUNvbnRleHRQb29sLnB1c2godHJhdmVyc2VDb250ZXh0KTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNvIGZhci5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJzYWxcbiAqIHByb2Nlc3MuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBjaGlsZHJlbiwgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBjaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgICB3YXJuKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIGNvbnZlcnRpbmcgY2hpbGRyZW4gdG8gJyArICdhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAge1xuICAgICAgICBhZGRlbmR1bSA9ICcgSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQuJyArIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuXCIgKyBhZGRlbmR1bSApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cbi8qKlxuICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0XG4gKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6XG4gKlxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYFxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYFxuICpcbiAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXRcbiAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQgIT09IG51bGwgJiYgY29tcG9uZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZShjb21wb25lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkKGJvb2tLZWVwaW5nLCBjaGlsZCwgbmFtZSkge1xuICB2YXIgZnVuYyA9IGJvb2tLZWVwaW5nLmZ1bmMsXG4gICAgICBjb250ZXh0ID0gYm9va0tlZXBpbmcuY29udGV4dDtcbiAgZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IGdldFBvb2xlZFRyYXZlcnNlQ29udGV4dChudWxsLCBudWxsLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIHJlbGVhc2VUcmF2ZXJzZUNvbnRleHQodHJhdmVyc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuICB2YXIgbWFwcGVkQ2hpbGQgPSBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGJvb2tLZWVwaW5nLmNvdW50KyspO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwobWFwcGVkQ2hpbGQsIHJlc3VsdCwgY2hpbGRLZXksIGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG5cbiAgICByZXN1bHQucHVzaChtYXBwZWRDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgYXJyYXksIHByZWZpeCwgZnVuYywgY29udGV4dCkge1xuICB2YXIgZXNjYXBlZFByZWZpeCA9ICcnO1xuXG4gIGlmIChwcmVmaXggIT0gbnVsbCkge1xuICAgIGVzY2FwZWRQcmVmaXggPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkocHJlZml4KSArICcvJztcbiAgfVxuXG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBnZXRQb29sZWRUcmF2ZXJzZUNvbnRleHQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICByZWxlYXNlVHJhdmVyc2VDb250ZXh0KHRyYXZlcnNlQ29udGV4dCk7XG59XG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jLCBjb250ZXh0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG51bGwpO1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW50b2FycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX2N0b3I6IGN0b3IsXG4gICAgLy8gUmVhY3QgdXNlcyB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBudWxsXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYHByb3BUeXBlc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICBlcnJvcignbWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgJyArICdyZWNlaXZlZDogJXMnLCB0eXBlID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL2ZiLm1lL3JlYWN0LWludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiB1c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG5cbiAge1xuICAgIGlmICh1bnN0YWJsZV9vYnNlcnZlZEJpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IoJ3VzZUNvbnRleHQoKSBzZWNvbmQgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSAnICsgJ3VzZSBpbiBSZWFjdC4gUGFzc2luZyBpdCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1lvdSBwYXNzZWQ6ICVzLiVzJywgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzLCB0eXBlb2YgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzID09PSAnbnVtYmVyJyAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1syXSkgPyAnXFxuXFxuRGlkIHlvdSBjYWxsIGFycmF5Lm1hcCh1c2VDb250ZXh0KT8gJyArICdDYWxsaW5nIEhvb2tzIGluc2lkZSBhIGxvb3AgaXMgbm90IHN1cHBvcnRlZC4gJyArICdMZWFybiBtb3JlIGF0IGh0dHBzOi8vZmIubWUvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAge1xuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcbiAgfVxuXG4gIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKTtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIG5hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgdmFyIHRlc3RNYXAgPSBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIHZhciB0ZXN0U2V0ID0gbmV3IFNldChbZnJvemVuT2JqZWN0XSk7IC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBSb2xsdXAgdG8gbm90IGNvbnNpZGVyIHRoZXNlIHVudXNlZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcm9sbHVwL3JvbGx1cC9pc3N1ZXMvMTc3MVxuICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2UgaWYgUm9sbHVwIGZpeGVzIHRoZSBidWcuXG5cbiAgICB0ZXN0TWFwLnNldCgwLCAwKTtcbiAgICB0ZXN0U2V0LmFkZCgwKTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbnZhciBjcmVhdGVFbGVtZW50JDEgPSAgY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjbG9uZUVsZW1lbnQkMSA9ICBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY3JlYXRlRmFjdG9yeSA9ICBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24gO1xudmFyIENoaWxkcmVuID0ge1xuICBtYXA6IG1hcENoaWxkcmVuLFxuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBvbmx5OiBvbmx5Q2hpbGRcbn07XG5cbmV4cG9ydHMuQ2hpbGRyZW4gPSBDaGlsZHJlbjtcbmV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG5leHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFTQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTs7OztBQUlBO0FBTEE7QUFRQTs7Ozs7QUFJQTtBQUNBO0FBREE7QUFJQTs7Ozs7OztBQU1BO0FBQ0E7Ozs7QUFJQTtBQUxBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBa0JBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQW5QQTtBQTZQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFDQTtBQTVCQTtBQUNBO0FBOEJBOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQTdDQTtBQUNBO0FBK0NBOzs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUE5REE7QUFpRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQURBO0FBR0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFMQTtBQURBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBbkRBO0FBcURBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFuREE7QUFDQTtBQUNBO0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFsREE7QUFvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFSQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUF1QkE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQXZDQTtBQUNBO0FBbURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFiQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBYkE7QUFoQkE7QUFnQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekNBO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUpBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVRBO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXYyREE7QUF5MkRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/react/cjs/react.development.js\n"); - -/***/ }), - -/***/ "../node_modules/react/cjs/react.production.min.js": -/*!*********************************************************!*\ - !*** ../node_modules/react/cjs/react.production.min.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v16.13.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar l = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\"),\n n = \"function\" === typeof Symbol && Symbol[\"for\"],\n p = n ? Symbol[\"for\"](\"react.element\") : 60103,\n q = n ? Symbol[\"for\"](\"react.portal\") : 60106,\n r = n ? Symbol[\"for\"](\"react.fragment\") : 60107,\n t = n ? Symbol[\"for\"](\"react.strict_mode\") : 60108,\n u = n ? Symbol[\"for\"](\"react.profiler\") : 60114,\n v = n ? Symbol[\"for\"](\"react.provider\") : 60109,\n w = n ? Symbol[\"for\"](\"react.context\") : 60110,\n x = n ? Symbol[\"for\"](\"react.forward_ref\") : 60112,\n y = n ? Symbol[\"for\"](\"react.suspense\") : 60113,\n z = n ? Symbol[\"for\"](\"react.memo\") : 60115,\n A = n ? Symbol[\"for\"](\"react.lazy\") : 60116,\n B = \"function\" === typeof Symbol && Symbol.iterator;\n\nfunction C(a) {\n for (var b = \"https://reactjs.org/docs/error-decoder.html?invariant=\" + a, c = 1; c < arguments.length; c++) {\n b += \"&args[]=\" + encodeURIComponent(arguments[c]);\n }\n\n return \"Minified React error #\" + a + \"; visit \" + b + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";\n}\n\nvar D = {\n isMounted: function isMounted() {\n return !1;\n },\n enqueueForceUpdate: function enqueueForceUpdate() {},\n enqueueReplaceState: function enqueueReplaceState() {},\n enqueueSetState: function enqueueSetState() {}\n},\n E = {};\n\nfunction F(a, b, c) {\n this.props = a;\n this.context = b;\n this.refs = E;\n this.updater = c || D;\n}\n\nF.prototype.isReactComponent = {};\n\nF.prototype.setState = function (a, b) {\n if (\"object\" !== _typeof(a) && \"function\" !== typeof a && null != a) throw Error(C(85));\n this.updater.enqueueSetState(this, a, b, \"setState\");\n};\n\nF.prototype.forceUpdate = function (a) {\n this.updater.enqueueForceUpdate(this, a, \"forceUpdate\");\n};\n\nfunction G() {}\n\nG.prototype = F.prototype;\n\nfunction H(a, b, c) {\n this.props = a;\n this.context = b;\n this.refs = E;\n this.updater = c || D;\n}\n\nvar I = H.prototype = new G();\nI.constructor = H;\nl(I, F.prototype);\nI.isPureReactComponent = !0;\nvar J = {\n current: null\n},\n K = Object.prototype.hasOwnProperty,\n L = {\n key: !0,\n ref: !0,\n __self: !0,\n __source: !0\n};\n\nfunction M(a, b, c) {\n var e,\n d = {},\n g = null,\n k = null;\n if (null != b) for (e in void 0 !== b.ref && (k = b.ref), void 0 !== b.key && (g = \"\" + b.key), b) {\n K.call(b, e) && !L.hasOwnProperty(e) && (d[e] = b[e]);\n }\n var f = arguments.length - 2;\n if (1 === f) d.children = c;else if (1 < f) {\n for (var h = Array(f), m = 0; m < f; m++) {\n h[m] = arguments[m + 2];\n }\n\n d.children = h;\n }\n if (a && a.defaultProps) for (e in f = a.defaultProps, f) {\n void 0 === d[e] && (d[e] = f[e]);\n }\n return {\n $$typeof: p,\n type: a,\n key: g,\n ref: k,\n props: d,\n _owner: J.current\n };\n}\n\nfunction N(a, b) {\n return {\n $$typeof: p,\n type: a.type,\n key: b,\n ref: a.ref,\n props: a.props,\n _owner: a._owner\n };\n}\n\nfunction O(a) {\n return \"object\" === _typeof(a) && null !== a && a.$$typeof === p;\n}\n\nfunction escape(a) {\n var b = {\n \"=\": \"=0\",\n \":\": \"=2\"\n };\n return \"$\" + (\"\" + a).replace(/[=:]/g, function (a) {\n return b[a];\n });\n}\n\nvar P = /\\/+/g,\n Q = [];\n\nfunction R(a, b, c, e) {\n if (Q.length) {\n var d = Q.pop();\n d.result = a;\n d.keyPrefix = b;\n d.func = c;\n d.context = e;\n d.count = 0;\n return d;\n }\n\n return {\n result: a,\n keyPrefix: b,\n func: c,\n context: e,\n count: 0\n };\n}\n\nfunction S(a) {\n a.result = null;\n a.keyPrefix = null;\n a.func = null;\n a.context = null;\n a.count = 0;\n 10 > Q.length && Q.push(a);\n}\n\nfunction T(a, b, c, e) {\n var d = _typeof(a);\n\n if (\"undefined\" === d || \"boolean\" === d) a = null;\n var g = !1;\n if (null === a) g = !0;else switch (d) {\n case \"string\":\n case \"number\":\n g = !0;\n break;\n\n case \"object\":\n switch (a.$$typeof) {\n case p:\n case q:\n g = !0;\n }\n\n }\n if (g) return c(e, a, \"\" === b ? \".\" + U(a, 0) : b), 1;\n g = 0;\n b = \"\" === b ? \".\" : b + \":\";\n if (Array.isArray(a)) for (var k = 0; k < a.length; k++) {\n d = a[k];\n var f = b + U(d, k);\n g += T(d, f, c, e);\n } else if (null === a || \"object\" !== _typeof(a) ? f = null : (f = B && a[B] || a[\"@@iterator\"], f = \"function\" === typeof f ? f : null), \"function\" === typeof f) for (a = f.call(a), k = 0; !(d = a.next()).done;) {\n d = d.value, f = b + U(d, k++), g += T(d, f, c, e);\n } else if (\"object\" === d) throw c = \"\" + a, Error(C(31, \"[object Object]\" === c ? \"object with keys {\" + Object.keys(a).join(\", \") + \"}\" : c, \"\"));\n return g;\n}\n\nfunction V(a, b, c) {\n return null == a ? 0 : T(a, \"\", b, c);\n}\n\nfunction U(a, b) {\n return \"object\" === _typeof(a) && null !== a && null != a.key ? escape(a.key) : b.toString(36);\n}\n\nfunction W(a, b) {\n a.func.call(a.context, b, a.count++);\n}\n\nfunction aa(a, b, c) {\n var e = a.result,\n d = a.keyPrefix;\n a = a.func.call(a.context, b, a.count++);\n Array.isArray(a) ? X(a, e, c, function (a) {\n return a;\n }) : null != a && (O(a) && (a = N(a, d + (!a.key || b && b.key === a.key ? \"\" : (\"\" + a.key).replace(P, \"$&/\") + \"/\") + c)), e.push(a));\n}\n\nfunction X(a, b, c, e, d) {\n var g = \"\";\n null != c && (g = (\"\" + c).replace(P, \"$&/\") + \"/\");\n b = R(b, g, e, d);\n V(a, aa, b);\n S(b);\n}\n\nvar Y = {\n current: null\n};\n\nfunction Z() {\n var a = Y.current;\n if (null === a) throw Error(C(321));\n return a;\n}\n\nvar ba = {\n ReactCurrentDispatcher: Y,\n ReactCurrentBatchConfig: {\n suspense: null\n },\n ReactCurrentOwner: J,\n IsSomeRendererActing: {\n current: !1\n },\n assign: l\n};\nexports.Children = {\n map: function map(a, b, c) {\n if (null == a) return a;\n var e = [];\n X(a, e, null, b, c);\n return e;\n },\n forEach: function forEach(a, b, c) {\n if (null == a) return a;\n b = R(null, null, b, c);\n V(a, W, b);\n S(b);\n },\n count: function count(a) {\n return V(a, function () {\n return null;\n }, null);\n },\n toArray: function toArray(a) {\n var b = [];\n X(a, b, null, function (a) {\n return a;\n });\n return b;\n },\n only: function only(a) {\n if (!O(a)) throw Error(C(143));\n return a;\n }\n};\nexports.Component = F;\nexports.Fragment = r;\nexports.Profiler = u;\nexports.PureComponent = H;\nexports.StrictMode = t;\nexports.Suspense = y;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ba;\n\nexports.cloneElement = function (a, b, c) {\n if (null === a || void 0 === a) throw Error(C(267, a));\n var e = l({}, a.props),\n d = a.key,\n g = a.ref,\n k = a._owner;\n\n if (null != b) {\n void 0 !== b.ref && (g = b.ref, k = J.current);\n void 0 !== b.key && (d = \"\" + b.key);\n if (a.type && a.type.defaultProps) var f = a.type.defaultProps;\n\n for (h in b) {\n K.call(b, h) && !L.hasOwnProperty(h) && (e[h] = void 0 === b[h] && void 0 !== f ? f[h] : b[h]);\n }\n }\n\n var h = arguments.length - 2;\n if (1 === h) e.children = c;else if (1 < h) {\n f = Array(h);\n\n for (var m = 0; m < h; m++) {\n f[m] = arguments[m + 2];\n }\n\n e.children = f;\n }\n return {\n $$typeof: p,\n type: a.type,\n key: d,\n ref: g,\n props: e,\n _owner: k\n };\n};\n\nexports.createContext = function (a, b) {\n void 0 === b && (b = null);\n a = {\n $$typeof: w,\n _calculateChangedBits: b,\n _currentValue: a,\n _currentValue2: a,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n a.Provider = {\n $$typeof: v,\n _context: a\n };\n return a.Consumer = a;\n};\n\nexports.createElement = M;\n\nexports.createFactory = function (a) {\n var b = M.bind(null, a);\n b.type = a;\n return b;\n};\n\nexports.createRef = function () {\n return {\n current: null\n };\n};\n\nexports.forwardRef = function (a) {\n return {\n $$typeof: x,\n render: a\n };\n};\n\nexports.isValidElement = O;\n\nexports.lazy = function (a) {\n return {\n $$typeof: A,\n _ctor: a,\n _status: -1,\n _result: null\n };\n};\n\nexports.memo = function (a, b) {\n return {\n $$typeof: z,\n type: a,\n compare: void 0 === b ? null : b\n };\n};\n\nexports.useCallback = function (a, b) {\n return Z().useCallback(a, b);\n};\n\nexports.useContext = function (a, b) {\n return Z().useContext(a, b);\n};\n\nexports.useDebugValue = function () {};\n\nexports.useEffect = function (a, b) {\n return Z().useEffect(a, b);\n};\n\nexports.useImperativeHandle = function (a, b, c) {\n return Z().useImperativeHandle(a, b, c);\n};\n\nexports.useLayoutEffect = function (a, b) {\n return Z().useLayoutEffect(a, b);\n};\n\nexports.useMemo = function (a, b) {\n return Z().useMemo(a, b);\n};\n\nexports.useReducer = function (a, b, c) {\n return Z().useReducer(a, b, c);\n};\n\nexports.useRef = function (a) {\n return Z().useRef(a);\n};\n\nexports.useState = function (a) {\n return Z().useState(a);\n};\n\nexports.version = \"16.13.0\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzPzA1ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4wXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgbD1yZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKSxuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IscD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLHE9bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsdD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHY9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksdz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHg9bj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIseT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyx6PW4/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsQT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOlxuNjAxMTYsQj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gQyhhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBEPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxFPXt9O2Z1bmN0aW9uIEYoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RTt0aGlzLnVwZGF0ZXI9Y3x8RH1GLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0YucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcihDKDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtGLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEcoKXt9Ry5wcm90b3R5cGU9Ri5wcm90b3R5cGU7ZnVuY3Rpb24gSChhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1FO3RoaXMudXBkYXRlcj1jfHxEfXZhciBJPUgucHJvdG90eXBlPW5ldyBHO0kuY29uc3RydWN0b3I9SDtsKEksRi5wcm90b3R5cGUpO0kuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEo9e2N1cnJlbnQ6bnVsbH0sSz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEw9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIE0oYSxiLGMpe3ZhciBlLGQ9e30sZz1udWxsLGs9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaz1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpLGIpSy5jYWxsKGIsZSkmJiFMLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtmb3IodmFyIGg9QXJyYXkoZiksbT0wO208ZjttKyspaFttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWh9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZj1hLmRlZmF1bHRQcm9wcyxmKXZvaWQgMD09PWRbZV0mJihkW2VdPWZbZV0pO3JldHVybnskJHR5cGVvZjpwLHR5cGU6YSxrZXk6ZyxyZWY6ayxwcm9wczpkLF9vd25lcjpKLmN1cnJlbnR9fVxuZnVuY3Rpb24gTihhLGIpe3JldHVybnskJHR5cGVvZjpwLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTyhhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09cH1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiKyhcIlwiK2EpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXX0pfXZhciBQPS9cXC8rL2csUT1bXTtmdW5jdGlvbiBSKGEsYixjLGUpe2lmKFEubGVuZ3RoKXt2YXIgZD1RLnBvcCgpO2QucmVzdWx0PWE7ZC5rZXlQcmVmaXg9YjtkLmZ1bmM9YztkLmNvbnRleHQ9ZTtkLmNvdW50PTA7cmV0dXJuIGR9cmV0dXJue3Jlc3VsdDphLGtleVByZWZpeDpiLGZ1bmM6Yyxjb250ZXh0OmUsY291bnQ6MH19XG5mdW5jdGlvbiBTKGEpe2EucmVzdWx0PW51bGw7YS5rZXlQcmVmaXg9bnVsbDthLmZ1bmM9bnVsbDthLmNvbnRleHQ9bnVsbDthLmNvdW50PTA7MTA+US5sZW5ndGgmJlEucHVzaChhKX1cbmZ1bmN0aW9uIFQoYSxiLGMsZSl7dmFyIGQ9dHlwZW9mIGE7aWYoXCJ1bmRlZmluZWRcIj09PWR8fFwiYm9vbGVhblwiPT09ZClhPW51bGw7dmFyIGc9ITE7aWYobnVsbD09PWEpZz0hMDtlbHNlIHN3aXRjaChkKXtjYXNlIFwic3RyaW5nXCI6Y2FzZSBcIm51bWJlclwiOmc9ITA7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOnN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIHA6Y2FzZSBxOmc9ITB9fWlmKGcpcmV0dXJuIGMoZSxhLFwiXCI9PT1iP1wiLlwiK1UoYSwwKTpiKSwxO2c9MDtiPVwiXCI9PT1iP1wiLlwiOmIrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGs9MDtrPGEubGVuZ3RoO2srKyl7ZD1hW2tdO3ZhciBmPWIrVShkLGspO2crPVQoZCxmLGMsZSl9ZWxzZSBpZihudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBhP2Y9bnVsbDooZj1CJiZhW0JdfHxhW1wiQEBpdGVyYXRvclwiXSxmPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBmP2Y6bnVsbCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGYpZm9yKGE9Zi5jYWxsKGEpLGs9XG4wOyEoZD1hLm5leHQoKSkuZG9uZTspZD1kLnZhbHVlLGY9YitVKGQsaysrKSxnKz1UKGQsZixjLGUpO2Vsc2UgaWYoXCJvYmplY3RcIj09PWQpdGhyb3cgYz1cIlwiK2EsRXJyb3IoQygzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09Yz9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGEpLmpvaW4oXCIsIFwiKStcIn1cIjpjLFwiXCIpKTtyZXR1cm4gZ31mdW5jdGlvbiBWKGEsYixjKXtyZXR1cm4gbnVsbD09YT8wOlQoYSxcIlwiLGIsYyl9ZnVuY3Rpb24gVShhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShhLmtleSk6Yi50b1N0cmluZygzNil9ZnVuY3Rpb24gVyhhLGIpe2EuZnVuYy5jYWxsKGEuY29udGV4dCxiLGEuY291bnQrKyl9XG5mdW5jdGlvbiBhYShhLGIsYyl7dmFyIGU9YS5yZXN1bHQsZD1hLmtleVByZWZpeDthPWEuZnVuYy5jYWxsKGEuY29udGV4dCxiLGEuY291bnQrKyk7QXJyYXkuaXNBcnJheShhKT9YKGEsZSxjLGZ1bmN0aW9uKGEpe3JldHVybiBhfSk6bnVsbCE9YSYmKE8oYSkmJihhPU4oYSxkKyghYS5rZXl8fGImJmIua2V5PT09YS5rZXk/XCJcIjooXCJcIithLmtleSkucmVwbGFjZShQLFwiJCYvXCIpK1wiL1wiKStjKSksZS5wdXNoKGEpKX1mdW5jdGlvbiBYKGEsYixjLGUsZCl7dmFyIGc9XCJcIjtudWxsIT1jJiYoZz0oXCJcIitjKS5yZXBsYWNlKFAsXCIkJi9cIikrXCIvXCIpO2I9UihiLGcsZSxkKTtWKGEsYWEsYik7UyhiKX12YXIgWT17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBaKCl7dmFyIGE9WS5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKEMoMzIxKSk7cmV0dXJuIGF9XG52YXIgYmE9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6WSxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7c3VzcGVuc2U6bnVsbH0sUmVhY3RDdXJyZW50T3duZXI6SixJc1NvbWVSZW5kZXJlckFjdGluZzp7Y3VycmVudDohMX0sYXNzaWduOmx9O2V4cG9ydHMuQ2hpbGRyZW49e21hcDpmdW5jdGlvbihhLGIsYyl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgZT1bXTtYKGEsZSxudWxsLGIsYyk7cmV0dXJuIGV9LGZvckVhY2g6ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7Yj1SKG51bGwsbnVsbCxiLGMpO1YoYSxXLGIpO1MoYil9LGNvdW50OmZ1bmN0aW9uKGEpe3JldHVybiBWKGEsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbnVsbCl9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7dmFyIGI9W107WChhLGIsbnVsbCxmdW5jdGlvbihhKXtyZXR1cm4gYX0pO3JldHVybiBifSxvbmx5OmZ1bmN0aW9uKGEpe2lmKCFPKGEpKXRocm93IEVycm9yKEMoMTQzKSk7cmV0dXJuIGF9fTtcbmV4cG9ydHMuQ29tcG9uZW50PUY7ZXhwb3J0cy5GcmFnbWVudD1yO2V4cG9ydHMuUHJvZmlsZXI9dTtleHBvcnRzLlB1cmVDb21wb25lbnQ9SDtleHBvcnRzLlN0cmljdE1vZGU9dDtleHBvcnRzLlN1c3BlbnNlPXk7ZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1iYTtcbmV4cG9ydHMuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcihDKDI2NyxhKSk7dmFyIGU9bCh7fSxhLnByb3BzKSxkPWEua2V5LGc9YS5yZWYsaz1hLl9vd25lcjtpZihudWxsIT1iKXt2b2lkIDAhPT1iLnJlZiYmKGc9Yi5yZWYsaz1KLmN1cnJlbnQpO3ZvaWQgMCE9PWIua2V5JiYoZD1cIlwiK2Iua2V5KTtpZihhLnR5cGUmJmEudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGY9YS50eXBlLmRlZmF1bHRQcm9wcztmb3IoaCBpbiBiKUsuY2FsbChiLGgpJiYhTC5oYXNPd25Qcm9wZXJ0eShoKSYmKGVbaF09dm9pZCAwPT09YltoXSYmdm9pZCAwIT09Zj9mW2hdOmJbaF0pfXZhciBoPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aCllLmNoaWxkcmVuPWM7ZWxzZSBpZigxPGgpe2Y9QXJyYXkoaCk7Zm9yKHZhciBtPTA7bTxoO20rKylmW21dPWFyZ3VtZW50c1ttKzJdO2UuY2hpbGRyZW49Zn1yZXR1cm57JCR0eXBlb2Y6cCx0eXBlOmEudHlwZSxcbmtleTpkLHJlZjpnLHByb3BzOmUsX293bmVyOmt9fTtleHBvcnRzLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1udWxsKTthPXskJHR5cGVvZjp3LF9jYWxjdWxhdGVDaGFuZ2VkQml0czpiLF9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dixfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfTtleHBvcnRzLmNyZWF0ZUVsZW1lbnQ9TTtleHBvcnRzLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oYSl7dmFyIGI9TS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9O2V4cG9ydHMuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O2V4cG9ydHMuZm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6eCxyZW5kZXI6YX19O2V4cG9ydHMuaXNWYWxpZEVsZW1lbnQ9TztcbmV4cG9ydHMubGF6eT1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6QSxfY3RvcjphLF9zdGF0dXM6LTEsX3Jlc3VsdDpudWxsfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnosdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFooKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gWigpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBaKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFooKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBaKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBaKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBaKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBaKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBaKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE2LjEzLjBcIjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBU0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/react/cjs/react.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/react/index.js": -/*!**************************************!*\ - !*** ../node_modules/react/index.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./cjs/react.production.min.js */ \"../node_modules/react/cjs/react.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"../node_modules/react/cjs/react.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcz85OTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/react/index.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/_stream_duplex.js": -/*!*************************************************************!*\ - !*** ../node_modules/readable-stream/lib/_stream_duplex.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n/*<replacement>*/\n\nvar pna = __webpack_require__(/*! process-nextick-args */ \"../node_modules/process-nextick-args/index.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n/*<replacement>*/\n\nvar util = Object.create(__webpack_require__(/*! core-util-is */ \"../node_modules/core-util-is/lib/util.js\"));\nutil.inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n/*</replacement>*/\n\nvar Readable = __webpack_require__(/*! ./_stream_readable */ \"../node_modules/readable-stream/lib/_stream_readable.js\");\n\nvar Writable = __webpack_require__(/*! ./_stream_writable */ \"../node_modules/readable-stream/lib/_stream_writable.js\");\n\nutil.inherits(Duplex, Readable);\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n if (options && options.readable === false) this.readable = false;\n if (options && options.writable === false) this.writable = false;\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n pna.nextTick(cb, err);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanM/MDNmNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG57XG4gIC8vIGF2b2lkIHNjb3BlIGNyZWVwLCB0aGUga2V5cyBhcnJheSBjYW4gdGhlbiBiZSBjb2xsZWN0ZWRcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHBuYS5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbkR1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIHRoaXMuZW5kKCk7XG5cbiAgcG5hLm5leHRUaWNrKGNiLCBlcnIpO1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBbEJBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBRUE7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/_stream_duplex.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/_stream_passthrough.js": -/*!******************************************************************!*\ - !*** ../node_modules/readable-stream/lib/_stream_passthrough.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n\nmodule.exports = PassThrough;\n\nvar Transform = __webpack_require__(/*! ./_stream_transform */ \"../node_modules/readable-stream/lib/_stream_transform.js\");\n/*<replacement>*/\n\n\nvar util = Object.create(__webpack_require__(/*! core-util-is */ \"../node_modules/core-util-is/lib/util.js\"));\nutil.inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzPzM4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/_stream_passthrough.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/_stream_readable.js": -/*!***************************************************************!*\ - !*** ../node_modules/readable-stream/lib/_stream_readable.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/*<replacement>*/\n\nvar pna = __webpack_require__(/*! process-nextick-args */ \"../node_modules/process-nextick-args/index.js\");\n/*</replacement>*/\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar isArray = __webpack_require__(/*! isarray */ \"../node_modules/isarray/index.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = __webpack_require__(/*! events */ \"../node_modules/events/events.js\").EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = __webpack_require__(/*! ./internal/streams/stream */ \"../node_modules/readable-stream/lib/internal/streams/stream-browser.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = __webpack_require__(/*! safe-buffer */ \"../node_modules/readable-stream/node_modules/safe-buffer/index.js\").Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar util = Object.create(__webpack_require__(/*! core-util-is */ \"../node_modules/core-util-is/lib/util.js\"));\nutil.inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar debugUtil = __webpack_require__(/*! util */ 1);\n\nvar debug = void 0;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ \"../node_modules/readable-stream/lib/internal/streams/BufferList.js\");\n\nvar destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ \"../node_modules/readable-stream/lib/internal/streams/destroy.js\");\n\nvar StringDecoder;\nutil.inherits(Readable, Stream);\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ \"../node_modules/readable-stream/lib/_stream_duplex.js\");\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ \"../node_modules/string_decoder/lib/string_decoder.js\").StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ \"../node_modules/readable-stream/lib/_stream_duplex.js\");\n if (!(this instanceof Readable)) return new Readable(options);\n this._readableState = new ReadableState(options, this); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n\n return er;\n} // if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\n\n\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ \"../node_modules/string_decoder/lib/string_decoder.js\").StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n}; // Don't raise the hwm > 8MB\n\n\nvar MAX_HWM = 0x800000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true; // emit 'readable' now to make sure it gets picked up.\n\n emitReadable(stream);\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n } // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n\n\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {}\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList; // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n return ret;\n} // Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n\n return ret;\n} // Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n list.length -= c;\n return ret;\n} // Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState; // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzPzA3NDAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciByZWFkYWJsZUh3bSA9IG9wdGlvbnMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHJlYWRhYmxlSHdtIHx8IHJlYWRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gcmVhZGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHBuYS5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcG5hLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0geyBoYXNVbnBpcGVkOiBmYWxzZSB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBakJBO0FBb0JBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQXRCQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBdERBO0FBMERBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFqR0E7QUFDQTtBQW1HQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBVUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcENBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQWxFQTtBQXNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBMUZBO0FBOEZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuR0E7QUFDQTtBQUNBO0FBcUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4SEE7QUFDQTtBQUNBO0FBMEhBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwSUE7QUFDQTtBQXNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBQ0E7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFsQ0E7QUFDQTtBQUNBO0FBb0NBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBL0NBO0FBbURBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBM0JBO0FBK0JBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBdkNBO0FBQ0E7QUFDQTtBQXlDQTtBQUNBO0FBNUNBO0FBZ0RBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBekRBO0FBQ0E7QUEyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFVQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/_stream_readable.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/_stream_transform.js": -/*!****************************************************************!*\ - !*** ../node_modules/readable-stream/lib/_stream_transform.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\nmodule.exports = Transform;\n\nvar Duplex = __webpack_require__(/*! ./_stream_duplex */ \"../node_modules/readable-stream/lib/_stream_duplex.js\");\n/*<replacement>*/\n\n\nvar util = Object.create(__webpack_require__(/*! core-util-is */ \"../node_modules/core-util-is/lib/util.js\"));\nutil.inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n return stream.push(null);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanM/ZmFkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoVHJhbnNmb3JtLCBEdXBsZXgpO1xuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG5cbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcblxuICBpZiAoIWNiKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ3dyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycpKTtcbiAgfVxuXG4gIHRzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0cy53cml0ZWNiID0gbnVsbDtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICB0aGlzLnB1c2goZGF0YSk7XG5cbiAgY2IoZXIpO1xuXG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG5cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub24oJ3ByZWZpbmlzaCcsIHByZWZpbmlzaCk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKF90aGlzLCBlciwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZSh0aGlzLCBudWxsLCBudWxsKTtcbiAgfVxufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAodHMud3JpdGVjaHVuayAhPT0gbnVsbCAmJiB0cy53cml0ZWNiICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgZnVuY3Rpb24gKGVycjIpIHtcbiAgICBjYihlcnIyKTtcbiAgICBfdGhpczIuZW1pdCgnY2xvc2UnKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBkb25lKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgaWYgKGVyKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuXG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCcpO1xuXG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nJyk7XG5cbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFTQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUF6QkE7QUFDQTtBQUNBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFIQTtBQUNBO0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/_stream_transform.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/_stream_writable.js": -/*!***************************************************************!*\ - !*** ../node_modules/readable-stream/lib/_stream_writable.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n/*<replacement>*/\n\nvar pna = __webpack_require__(/*! process-nextick-args */ \"../node_modules/process-nextick-args/index.js\");\n/*</replacement>*/\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar util = Object.create(__webpack_require__(/*! core-util-is */ \"../node_modules/core-util-is/lib/util.js\"));\nutil.inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: __webpack_require__(/*! util-deprecate */ \"../node_modules/util-deprecate/browser.js\")\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = __webpack_require__(/*! ./internal/streams/stream */ \"../node_modules/readable-stream/lib/internal/streams/stream-browser.js\");\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = __webpack_require__(/*! safe-buffer */ \"../node_modules/readable-stream/node_modules/safe-buffer/index.js\").Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n\nvar destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ \"../node_modules/readable-stream/lib/internal/streams/destroy.js\");\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ \"../node_modules/readable-stream/lib/_stream_duplex.js\");\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ \"../node_modules/readable-stream/lib/_stream_duplex.js\"); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options[\"final\"] === 'function') this._final = options[\"final\"];\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb\n\n stream.emit('error', er);\n pna.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n stream.emit('error', err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \"../node_modules/timers-browserify/main.js\").setImmediate, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzPzgzZWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIEEgYml0IHNpbXBsZXIgdGhhbiByZWFkYWJsZSBzdHJlYW1zLlxuLy8gSW1wbGVtZW50IGFuIGFzeW5jIC5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYiksIGFuZCBpdCdsbCBoYW5kbGUgYWxsXG4vLyB0aGUgZHJhaW4gZXZlbnQgZW1pc3Npb24gYW5kIGJ1ZmZlcmluZy5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlO1xuXG4vKiA8cmVwbGFjZW1lbnQ+ICovXG5mdW5jdGlvbiBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuY2h1bmsgPSBjaHVuaztcbiAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB0aGlzLmNhbGxiYWNrID0gY2I7XG4gIHRoaXMubmV4dCA9IG51bGw7XG59XG5cbi8vIEl0IHNlZW1zIGEgbGlua2VkIGxpc3QgYnV0IGl0IGlzIG5vdFxuLy8gdGhlcmUgd2lsbCBiZSBvbmx5IDIgb2YgdGhlc2UgZm9yIGVhY2ggc3RyZWFtXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIG9uQ29ya2VkRmluaXNoKF90aGlzLCBzdGF0ZSk7XG4gIH07XG59XG4vKiA8L3JlcGxhY2VtZW50PiAqL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGFzeW5jV3JpdGUgPSAhcHJvY2Vzcy5icm93c2VyICYmIFsndjAuMTAnLCAndjAuOS4nXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLCA1KSkgPiAtMSA/IHNldEltbWVkaWF0ZSA6IHBuYS5uZXh0VGljaztcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBPdXJVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXkgfHwgZnVuY3Rpb24gKCkge307XG5mdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShjaHVuayk7XG59XG5mdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgb2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheTtcbn1cblxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95Jyk7XG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHdyaXRhYmxlSHdtID0gb3B0aW9ucy53cml0YWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAod3JpdGFibGVId20gfHwgd3JpdGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSB3cml0YWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gaWYgX2ZpbmFsIGhhcyBiZWVuIGNhbGxlZFxuICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG5cbiAgLy8gZHJhaW4gZXZlbnQgZmxhZy5cbiAgdGhpcy5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgLy8gYXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZTtcbiAgLy8gd2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZFxuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuICB2YXIgbm9EZWNvZGUgPSBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlO1xuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGU7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cbiAgdGhpcy5sZW5ndGggPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuXG4gIC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcbiAgdGhpcy5jb3JrZWQgPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG4gIHRoaXMuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcbiAgdGhpcy5vbndyaXRlID0gZnVuY3Rpb24gKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicsICdERVAwMDAzJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICBpZiAoIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSAmJiAhKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSB7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRlID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbmFsID09PSAnZnVuY3Rpb24nKSB0aGlzLl9maW5hbCA9IG9wdGlvbnMuZmluYWw7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwbmEubmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgdmFyIGVyID0gZmFsc2U7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwbmEubmV4dFRpY2soY2IsIGVyKTtcbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWxpZDtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcblxuICBpZiAoaXNCdWYgJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3A7XG5cbiAgaWYgKHN0YXRlLmVuZGVkKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIHN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkLS07XG5cbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuXG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuICAgIHBuYS5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBhbGxCdWZmZXJzID0gdHJ1ZTtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHBuYS5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcG5hLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXJyKTtcbiAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gIH1cbiAgaWYgKHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSkge1xuICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBjb3JrUmVxO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdGhpcy5lbmQoKTtcbiAgY2IoZXJyKTtcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBaEZBO0FBQ0E7QUFDQTtBQWtGQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFEQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFOQTtBQUZBO0FBV0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBdkJBO0FBQ0E7QUF5QkE7QUFDQTtBQUVBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBN0JBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBQ0E7QUFtQkE7QUFyQkE7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBakJBO0FBb0JBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/_stream_writable.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/internal/streams/BufferList.js": -/*!**************************************************************************!*\ - !*** ../node_modules/readable-stream/lib/internal/streams/BufferList.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nvar Buffer = __webpack_require__(/*! safe-buffer */ \"../node_modules/readable-stream/node_modules/safe-buffer/index.js\").Buffer;\n\nvar util = __webpack_require__(/*! util */ 2);\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({\n length: this.length\n });\n return this.constructor.name + ' ' + obj;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcz8yMGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIGNvcHlCdWZmZXIoc3JjLCB0YXJnZXQsIG9mZnNldCkge1xuICBzcmMuY29weSh0YXJnZXQsIG9mZnNldCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCdWZmZXJMaXN0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCdWZmZXJMaXN0KTtcblxuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCh2KSB7XG4gICAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIHVuc2hpZnQodikge1xuICAgIHZhciBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogdGhpcy5oZWFkIH07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICArK3RoaXMubGVuZ3RoO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgdmFyIHJldCA9IHRoaXMuaGVhZC5kYXRhO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xuICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBqb2luKHMpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICB2YXIgcmV0ID0gJycgKyBwLmRhdGE7XG4gICAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICAgIHJldCArPSBzICsgcC5kYXRhO1xuICAgIH1yZXR1cm4gcmV0O1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChuKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobiA+Pj4gMCk7XG4gICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChwKSB7XG4gICAgICBjb3B5QnVmZmVyKHAuZGF0YSwgcmV0LCBpKTtcbiAgICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIEJ1ZmZlckxpc3Q7XG59KCk7XG5cbmlmICh1dGlsICYmIHV0aWwuaW5zcGVjdCAmJiB1dGlsLmluc3BlY3QuY3VzdG9tKSB7XG4gIG1vZHVsZS5leHBvcnRzLnByb3RvdHlwZVt1dGlsLmluc3BlY3QuY3VzdG9tXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gdXRpbC5pbnNwZWN0KHsgbGVuZ3RoOiB0aGlzLmxlbmd0aCB9KTtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnICsgb2JqO1xuICB9O1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBWEE7QUFDQTtBQWFBO0FBM0RBO0FBQ0E7QUE2REE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/internal/streams/BufferList.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/internal/streams/destroy.js": -/*!***********************************************************************!*\ - !*** ../node_modules/readable-stream/lib/internal/streams/destroy.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/*<replacement>*/\n\nvar pna = __webpack_require__(/*! process-nextick-args */ \"../node_modules/process-nextick-args/index.js\");\n/*</replacement>*/\n// undocumented cb() API, needed for core, not for public API\n\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcz9jNTNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLy8gdW5kb2N1bWVudGVkIGNiKCkgQVBJLCBuZWVkZWQgZm9yIGNvcmUsIG5vdCBmb3IgcHVibGljIEFQSVxuZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIgJiYgKCF0aGlzLl93cml0YWJsZVN0YXRlIHx8ICF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkpIHtcbiAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIF90aGlzLCBlcnIpO1xuICAgICAgaWYgKF90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3lcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQVpBO0FBZ0JBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFuQkE7QUFDQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/internal/streams/destroy.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/lib/internal/streams/stream-browser.js": -/*!******************************************************************************!*\ - !*** ../node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__(/*! events */ \"../node_modules/events/events.js\").EventEmitter;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzPzlmOGQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/lib/internal/streams/stream-browser.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/node_modules/safe-buffer/index.js": -/*!*************************************************************************!*\ - !*** ../node_modules/readable-stream/node_modules/safe-buffer/index.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* eslint-disable node/no-deprecated-api */\nvar buffer = __webpack_require__(/*! buffer */ \"../node_modules/buffer/index.js\");\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n for (var key in src) {\n dst[key] = src[key];\n }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer;\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports);\n exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length);\n} // Copy static methods from Buffer\n\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number');\n }\n\n return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n var buf = Buffer(size);\n\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding);\n } else {\n buf.fill(fill);\n }\n } else {\n buf.fill(0);\n }\n\n return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return buffer.SlowBuffer(size);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanM/NWNhYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQWRBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/node_modules/safe-buffer/index.js\n"); - -/***/ }), - -/***/ "../node_modules/readable-stream/readable-browser.js": -/*!***********************************************************!*\ - !*** ../node_modules/readable-stream/readable-browser.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ \"../node_modules/readable-stream/lib/_stream_readable.js\");\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ \"../node_modules/readable-stream/lib/_stream_writable.js\");\nexports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ \"../node_modules/readable-stream/lib/_stream_duplex.js\");\nexports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ \"../node_modules/readable-stream/lib/_stream_transform.js\");\nexports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ \"../node_modules/readable-stream/lib/_stream_passthrough.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcz9lNDQ5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcmVhZGFibGUuanMnKTtcbmV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cztcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/readable-stream/readable-browser.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist-transform-compress/lib/index.js": -/*!*********************************************************************!*\ - !*** ../node_modules/redux-persist-transform-compress/lib/index.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = createTransformCompress;\n\nvar _reduxPersist = __webpack_require__(/*! redux-persist */ \"../node_modules/redux-persist/es/index.js\");\n\nvar _lzString = __webpack_require__(/*! lz-string */ \"../node_modules/lz-string/libs/lz-string.js\");\n\nvar _lzString2 = _interopRequireDefault(_lzString);\n\nvar _jsonStringifySafe = __webpack_require__(/*! json-stringify-safe */ \"../node_modules/json-stringify-safe/stringify.js\");\n\nvar _jsonStringifySafe2 = _interopRequireDefault(_jsonStringifySafe);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar NODE_ENV = typeof process !== \"undefined\" ? undefined : \"production\";\n\nfunction createTransformCompress(config) {\n return (0, _reduxPersist.createTransform)(function (state) {\n return _lzString2[\"default\"].compressToUTF16((0, _jsonStringifySafe2[\"default\"])(state));\n }, function (state) {\n if (typeof state !== \"string\") {\n if (NODE_ENV !== \"production\") {\n console.error(\"redux-persist-transform-compress: expected outbound state to be a string\");\n }\n\n return state;\n }\n\n try {\n return JSON.parse(_lzString2[\"default\"].decompressFromUTF16(state));\n } catch (err) {\n if (NODE_ENV !== \"production\") {\n console.error(\"redux-persist-transform-compress: error while decompressing state\", err);\n }\n\n return null;\n }\n }, config);\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QtdHJhbnNmb3JtLWNvbXByZXNzL2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC10cmFuc2Zvcm0tY29tcHJlc3MvbGliL2luZGV4LmpzPzQwNDYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRyYW5zZm9ybUNvbXByZXNzO1xuXG52YXIgX3JlZHV4UGVyc2lzdCA9IHJlcXVpcmUoXCJyZWR1eC1wZXJzaXN0XCIpO1xuXG52YXIgX2x6U3RyaW5nID0gcmVxdWlyZShcImx6LXN0cmluZ1wiKTtcblxudmFyIF9selN0cmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9selN0cmluZyk7XG5cbnZhciBfanNvblN0cmluZ2lmeVNhZmUgPSByZXF1aXJlKFwianNvbi1zdHJpbmdpZnktc2FmZVwiKTtcblxudmFyIF9qc29uU3RyaW5naWZ5U2FmZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qc29uU3RyaW5naWZ5U2FmZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBOT0RFX0VOViA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgOiBcInByb2R1Y3Rpb25cIjtcblxuZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtQ29tcHJlc3MoY29uZmlnKSB7XG4gICAgcmV0dXJuICgwLCBfcmVkdXhQZXJzaXN0LmNyZWF0ZVRyYW5zZm9ybSkoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBfbHpTdHJpbmcyLmRlZmF1bHQuY29tcHJlc3NUb1VURjE2KCgwLCBfanNvblN0cmluZ2lmeVNhZmUyLmRlZmF1bHQpKHN0YXRlKSk7XG4gICAgfSwgZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChOT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwicmVkdXgtcGVyc2lzdC10cmFuc2Zvcm0tY29tcHJlc3M6IGV4cGVjdGVkIG91dGJvdW5kIHN0YXRlIHRvIGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKF9selN0cmluZzIuZGVmYXVsdC5kZWNvbXByZXNzRnJvbVVURjE2KHN0YXRlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKE5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJyZWR1eC1wZXJzaXN0LXRyYW5zZm9ybS1jb21wcmVzczogZXJyb3Igd2hpbGUgZGVjb21wcmVzc2luZyBzdGF0ZVwiLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LCBjb25maWcpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFqQkE7QUFtQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux-persist-transform-compress/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist-transform-filter/index.js": -/*!***************************************************************!*\ - !*** ../node_modules/redux-persist-transform-filter/index.js ***! - \***************************************************************/ -/*! exports provided: createFilter, createWhitelistFilter, createBlacklistFilter, persistFilter, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createFilter\", function() { return createFilter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createWhitelistFilter\", function() { return createWhitelistFilter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBlacklistFilter\", function() { return createBlacklistFilter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"persistFilter\", function() { return persistFilter; });\n/* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux-persist */ \"../node_modules/redux-persist/es/index.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.get */ \"../node_modules/lodash-es/get.js\");\n/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.set */ \"../node_modules/lodash-es/set.js\");\n/* harmony import */ var lodash_unset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.unset */ \"../node_modules/lodash-es/unset.js\");\n/* harmony import */ var lodash_pickby__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash.pickby */ \"../node_modules/lodash-es/pickBy.js\");\n/* harmony import */ var lodash_isempty__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.isempty */ \"../node_modules/lodash-es/isEmpty.js\");\n/* harmony import */ var lodash_forin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash.forin */ \"../node_modules/lodash-es/forIn.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n\n\nfunction createFilter(reducerName, inboundPaths, outboundPaths) {\n var transformType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'whitelist';\n return Object(redux_persist__WEBPACK_IMPORTED_MODULE_0__[\"createTransform\"])( // inbound\n function (inboundState, key) {\n return inboundPaths ? persistFilter(inboundState, inboundPaths, transformType) : inboundState;\n }, // outbound\n function (outboundState, key) {\n return outboundPaths ? persistFilter(outboundState, outboundPaths, transformType) : outboundState;\n }, {\n 'whitelist': [reducerName]\n });\n}\n;\nfunction createWhitelistFilter(reducerName, inboundPaths, outboundPaths) {\n return createFilter(reducerName, inboundPaths, outboundPaths, 'whitelist');\n}\nfunction createBlacklistFilter(reducerName, inboundPaths, outboundPaths) {\n return createFilter(reducerName, inboundPaths, outboundPaths, 'blacklist');\n}\n\nfunction filterObject(_ref, state) {\n var path = _ref.path,\n _ref$filterFunction = _ref.filterFunction,\n filterFunction = _ref$filterFunction === void 0 ? function () {\n return true;\n } : _ref$filterFunction;\n var value = Object(lodash_get__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, path);\n\n if (value instanceof Array) {\n return value.filter(filterFunction);\n }\n\n return Object(lodash_pickby__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value, filterFunction);\n}\n\nfunction persistFilter(state) {\n var paths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var transformType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'whitelist';\n var subset = {}; // support only one key\n\n if (typeof paths === 'string') {\n paths = [paths];\n }\n\n if (transformType === 'whitelist') {\n paths.forEach(function (path) {\n if (_typeof(path) === 'object' && !(path instanceof Array)) {\n var value = filterObject(path, state);\n\n if (!Object(lodash_isempty__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value)) {\n Object(lodash_set__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(subset, path.path, value);\n }\n } else {\n var _value = Object(lodash_get__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, path);\n\n if (typeof _value !== 'undefined') {\n Object(lodash_set__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(subset, path, _value);\n }\n }\n });\n } else if (transformType === 'blacklist') {\n subset = Object.assign({}, state);\n paths.forEach(function (path) {\n if (_typeof(path) === 'object' && !(path instanceof Array)) {\n var value = filterObject(path, state);\n\n if (!Object(lodash_isempty__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value)) {\n if (value instanceof Array) {\n Object(lodash_set__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(subset, path.path, Object(lodash_get__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(subset, path.path).filter(function (x) {\n return false;\n }));\n } else {\n Object(lodash_forin__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(value, function (value, key) {\n Object(lodash_unset__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(subset, \"\".concat(path.path, \"[\").concat(key, \"]\"));\n });\n }\n }\n } else {\n var _value2 = Object(lodash_get__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, path);\n\n if (typeof _value2 !== 'undefined') {\n Object(lodash_unset__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(subset, path);\n }\n }\n });\n } else {\n subset = state;\n }\n\n return subset;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (createFilter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QtdHJhbnNmb3JtLWZpbHRlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC10cmFuc2Zvcm0tZmlsdGVyL2luZGV4LmpzP2RlOWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlVHJhbnNmb3JtIH0gZnJvbSAncmVkdXgtcGVyc2lzdCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHNldCBmcm9tICdsb2Rhc2guc2V0JztcbmltcG9ydCB1bnNldCBmcm9tICdsb2Rhc2gudW5zZXQnO1xuaW1wb3J0IHBpY2tCeSBmcm9tICdsb2Rhc2gucGlja2J5JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC5pc2VtcHR5JztcbmltcG9ydCBmb3JJbiBmcm9tICdsb2Rhc2guZm9yaW4nO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyIChyZWR1Y2VyTmFtZSwgaW5ib3VuZFBhdGhzLCBvdXRib3VuZFBhdGhzLCB0cmFuc2Zvcm1UeXBlID0gJ3doaXRlbGlzdCcpIHtcblx0cmV0dXJuIGNyZWF0ZVRyYW5zZm9ybShcblx0XHQvLyBpbmJvdW5kXG5cdFx0KGluYm91bmRTdGF0ZSwga2V5KSA9PiB7XG5cdFx0XHRyZXR1cm4gaW5ib3VuZFBhdGhzXG5cdFx0XHRcdD8gcGVyc2lzdEZpbHRlcihpbmJvdW5kU3RhdGUsIGluYm91bmRQYXRocywgdHJhbnNmb3JtVHlwZSlcblx0XHRcdFx0OiBpbmJvdW5kU3RhdGU7XG5cdFx0fSxcblxuXHRcdC8vIG91dGJvdW5kXG5cdFx0KG91dGJvdW5kU3RhdGUsIGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIG91dGJvdW5kUGF0aHNcblx0XHRcdFx0PyBwZXJzaXN0RmlsdGVyKG91dGJvdW5kU3RhdGUsIG91dGJvdW5kUGF0aHMsIHRyYW5zZm9ybVR5cGUpXG5cdFx0XHRcdDogb3V0Ym91bmRTdGF0ZTtcblx0XHR9LFxuXG5cdFx0eyd3aGl0ZWxpc3QnOiBbcmVkdWNlck5hbWVdfVxuXHQpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdoaXRlbGlzdEZpbHRlciAocmVkdWNlck5hbWUsIGluYm91bmRQYXRocywgb3V0Ym91bmRQYXRocykge1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyKHJlZHVjZXJOYW1lLCBpbmJvdW5kUGF0aHMsIG91dGJvdW5kUGF0aHMsICd3aGl0ZWxpc3QnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJsYWNrbGlzdEZpbHRlciAocmVkdWNlck5hbWUsIGluYm91bmRQYXRocywgb3V0Ym91bmRQYXRocykge1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyKHJlZHVjZXJOYW1lLCBpbmJvdW5kUGF0aHMsIG91dGJvdW5kUGF0aHMsICdibGFja2xpc3QnKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KHsgcGF0aCwgZmlsdGVyRnVuY3Rpb24gPSAoKSA9PiB0cnVlIH0sIHN0YXRlKSB7XG5cdGNvbnN0IHZhbHVlID0gZ2V0KHN0YXRlLCBwYXRoKTtcblxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdHJldHVybiB2YWx1ZS5maWx0ZXIoZmlsdGVyRnVuY3Rpb24pXG5cdH1cblxuXHRyZXR1cm4gcGlja0J5KHZhbHVlLCBmaWx0ZXJGdW5jdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJzaXN0RmlsdGVyIChzdGF0ZSwgcGF0aHMgPSBbXSwgdHJhbnNmb3JtVHlwZSA9ICd3aGl0ZWxpc3QnKSB7XG5cdGxldCBzdWJzZXQgPSB7fTtcblxuXHQvLyBzdXBwb3J0IG9ubHkgb25lIGtleVxuXHRpZiAodHlwZW9mIHBhdGhzID09PSAnc3RyaW5nJykge1xuXHRcdHBhdGhzID0gW3BhdGhzXTtcblx0fVxuXG5cdGlmICh0cmFuc2Zvcm1UeXBlID09PSAnd2hpdGVsaXN0Jykge1xuXHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgIShwYXRoIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZmlsdGVyT2JqZWN0KHBhdGgsIHN0YXRlKTtcblxuXHRcdFx0XHRpZiAoIWlzRW1wdHkodmFsdWUpKSB7XG5cdFx0XHRcdFx0c2V0KHN1YnNldCwgcGF0aC5wYXRoLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KHN0YXRlLCBwYXRoKTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdHNldChzdWJzZXQsIHBhdGgsIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHRyYW5zZm9ybVR5cGUgPT09ICdibGFja2xpc3QnKSB7XG5cdFx0c3Vic2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuXHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgIShwYXRoIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZmlsdGVyT2JqZWN0KHBhdGgsIHN0YXRlKTtcblxuXHRcdFx0XHRpZiAoIWlzRW1wdHkodmFsdWUpKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdFx0XHRcdHNldChzdWJzZXQsIHBhdGgucGF0aCwgZ2V0KHN1YnNldCwgcGF0aC5wYXRoKS5maWx0ZXIoKHgpID0+IGZhbHNlKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZvckluKHZhbHVlLCAodmFsdWUsIGtleSkgPT4geyB1bnNldChzdWJzZXQsIGAke3BhdGgucGF0aH1bJHtrZXl9XWApIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoc3RhdGUsIHBhdGgpO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0dW5zZXQoc3Vic2V0LCBwYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHN1YnNldCA9IHN0YXRlO1xuXHR9XG5cblx0cmV0dXJuIHN1YnNldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRmlsdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFTQTtBQUNBO0FBVkE7QUFlQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFEQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBRkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux-persist-transform-filter/index.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/constants.js": -/*!*****************************************************!*\ - !*** ../node_modules/redux-persist/es/constants.js ***! - \*****************************************************/ -/*! exports provided: KEY_PREFIX, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, DEFAULT_VERSION */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"KEY_PREFIX\", function() { return KEY_PREFIX; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FLUSH\", function() { return FLUSH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REHYDRATE\", function() { return REHYDRATE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PAUSE\", function() { return PAUSE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PERSIST\", function() { return PERSIST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PURGE\", function() { return PURGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REGISTER\", function() { return REGISTER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DEFAULT_VERSION\", function() { return DEFAULT_VERSION; });\nvar KEY_PREFIX = 'persist:';\nvar FLUSH = 'persist/FLUSH';\nvar REHYDRATE = 'persist/REHYDRATE';\nvar PAUSE = 'persist/PAUSE';\nvar PERSIST = 'persist/PERSIST';\nvar PURGE = 'persist/PURGE';\nvar REGISTER = 'persist/REGISTER';\nvar DEFAULT_VERSION = -1;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvY29uc3RhbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC1wZXJzaXN0L2VzL2NvbnN0YW50cy5qcz80YjM4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgS0VZX1BSRUZJWCA9ICdwZXJzaXN0Oic7XG5leHBvcnQgdmFyIEZMVVNIID0gJ3BlcnNpc3QvRkxVU0gnO1xuZXhwb3J0IHZhciBSRUhZRFJBVEUgPSAncGVyc2lzdC9SRUhZRFJBVEUnO1xuZXhwb3J0IHZhciBQQVVTRSA9ICdwZXJzaXN0L1BBVVNFJztcbmV4cG9ydCB2YXIgUEVSU0lTVCA9ICdwZXJzaXN0L1BFUlNJU1QnO1xuZXhwb3J0IHZhciBQVVJHRSA9ICdwZXJzaXN0L1BVUkdFJztcbmV4cG9ydCB2YXIgUkVHSVNURVIgPSAncGVyc2lzdC9SRUdJU1RFUic7XG5leHBvcnQgdmFyIERFRkFVTFRfVkVSU0lPTiA9IC0xOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/constants.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/createMigrate.js": -/*!*********************************************************!*\ - !*** ../node_modules/redux-persist/es/createMigrate.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createMigrate; });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n\nfunction createMigrate(migrations, config) {\n var _ref = config || {},\n debug = _ref.debug;\n\n return function (state, currentVersion) {\n if (!state) {\n if (undefined !== 'production' && debug) console.log('redux-persist: no inbound state, skipping migration');\n return Promise.resolve(undefined);\n }\n\n var inboundVersion = state._persist && state._persist.version !== undefined ? state._persist.version : _constants__WEBPACK_IMPORTED_MODULE_0__[\"DEFAULT_VERSION\"];\n\n if (inboundVersion === currentVersion) {\n if (undefined !== 'production' && debug) console.log('redux-persist: versions match, noop migration');\n return Promise.resolve(state);\n }\n\n if (inboundVersion > currentVersion) {\n if (undefined !== 'production') console.error('redux-persist: downgrading version is not supported');\n return Promise.resolve(state);\n }\n\n var migrationKeys = Object.keys(migrations).map(function (ver) {\n return parseInt(ver);\n }).filter(function (key) {\n return currentVersion >= key && key > inboundVersion;\n }).sort(function (a, b) {\n return a - b;\n });\n if (undefined !== 'production' && debug) console.log('redux-persist: migrationKeys', migrationKeys);\n\n try {\n var migratedState = migrationKeys.reduce(function (state, versionKey) {\n if (undefined !== 'production' && debug) console.log('redux-persist: running migration for versionKey', versionKey);\n return migrations[versionKey](state);\n }, state);\n return Promise.resolve(migratedState);\n } catch (err) {\n return Promise.reject(err);\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvY3JlYXRlTWlncmF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9jcmVhdGVNaWdyYXRlLmpzP2VlNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaWdyYXRlKG1pZ3JhdGlvbnMsIGNvbmZpZykge1xuICB2YXIgX3JlZiA9IGNvbmZpZyB8fCB7fSxcbiAgICAgIGRlYnVnID0gX3JlZi5kZWJ1ZztcblxuICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlLCBjdXJyZW50VmVyc2lvbikge1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRlYnVnKSBjb25zb2xlLmxvZygncmVkdXgtcGVyc2lzdDogbm8gaW5ib3VuZCBzdGF0ZSwgc2tpcHBpbmcgbWlncmF0aW9uJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdmFyIGluYm91bmRWZXJzaW9uID0gc3RhdGUuX3BlcnNpc3QgJiYgc3RhdGUuX3BlcnNpc3QudmVyc2lvbiAhPT0gdW5kZWZpbmVkID8gc3RhdGUuX3BlcnNpc3QudmVyc2lvbiA6IERFRkFVTFRfVkVSU0lPTjtcbiAgICBpZiAoaW5ib3VuZFZlcnNpb24gPT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3Q6IHZlcnNpb25zIG1hdGNoLCBub29wIG1pZ3JhdGlvbicpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChpbmJvdW5kVmVyc2lvbiA+IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcigncmVkdXgtcGVyc2lzdDogZG93bmdyYWRpbmcgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgbWlncmF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG1pZ3JhdGlvbnMpLm1hcChmdW5jdGlvbiAodmVyKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmVyKTtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWZXJzaW9uID49IGtleSAmJiBrZXkgPiBpbmJvdW5kVmVyc2lvbjtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3Q6IG1pZ3JhdGlvbktleXMnLCBtaWdyYXRpb25LZXlzKTtcbiAgICB0cnkge1xuICAgICAgdmFyIG1pZ3JhdGVkU3RhdGUgPSBtaWdyYXRpb25LZXlzLnJlZHVjZShmdW5jdGlvbiAoc3RhdGUsIHZlcnNpb25LZXkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZGVidWcpIGNvbnNvbGUubG9nKCdyZWR1eC1wZXJzaXN0OiBydW5uaW5nIG1pZ3JhdGlvbiBmb3IgdmVyc2lvbktleScsIHZlcnNpb25LZXkpO1xuICAgICAgICByZXR1cm4gbWlncmF0aW9uc1t2ZXJzaW9uS2V5XShzdGF0ZSk7XG4gICAgICB9LCBzdGF0ZSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1pZ3JhdGVkU3RhdGUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuICB9O1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSEE7QUFLQTtBQUxBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUxBO0FBT0E7QUFDQTtBQWpDQTtBQW1DQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/createMigrate.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/createPersistoid.js": -/*!************************************************************!*\ - !*** ../node_modules/redux-persist/es/createPersistoid.js ***! - \************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createPersistoid; });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n // @TODO remove once flow < 0.63 support is no longer required.\n\nfunction createPersistoid(config) {\n // defaults\n var blacklist = config.blacklist || null;\n var whitelist = config.whitelist || null;\n var transforms = config.transforms || [];\n var throttle = config.throttle || 0;\n var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : _constants__WEBPACK_IMPORTED_MODULE_0__[\"KEY_PREFIX\"]) + config.key;\n var storage = config.storage;\n var serialize = config.serialize === false ? function (x) {\n return x;\n } : defaultSerialize; // initialize stateful values\n\n var lastState = {};\n var stagedState = {};\n var keysToProcess = [];\n var timeIterator = null;\n var writePromise = null;\n\n var update = function update(state) {\n // add any changed keys to the queue\n Object.keys(state).forEach(function (key) {\n if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop\n\n if (lastState[key] === state[key]) return; // value unchanged? noop\n\n if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop\n\n keysToProcess.push(key); // add key to queue\n }); //if any key is missing in the new state which was present in the lastState,\n //add it for processing too\n\n Object.keys(lastState).forEach(function (key) {\n if (state[key] === undefined) {\n keysToProcess.push(key);\n }\n }); // start the time iterator if not running (read: throttle)\n\n if (timeIterator === null) {\n timeIterator = setInterval(processNextKey, throttle);\n }\n\n lastState = state;\n };\n\n function processNextKey() {\n if (keysToProcess.length === 0) {\n if (timeIterator) clearInterval(timeIterator);\n timeIterator = null;\n return;\n }\n\n var key = keysToProcess.shift();\n var endState = transforms.reduce(function (subState, transformer) {\n return transformer[\"in\"](subState, key, lastState);\n }, lastState[key]);\n\n if (endState !== undefined) {\n try {\n stagedState[key] = serialize(endState);\n } catch (err) {\n console.error('redux-persist/createPersistoid: error serializing state', err);\n }\n } else {\n //if the endState is undefined, no need to persist the existing serialized content\n delete stagedState[key];\n }\n\n if (keysToProcess.length === 0) {\n writeStagedState();\n }\n }\n\n function writeStagedState() {\n // cleanup any removed keys just before write.\n Object.keys(stagedState).forEach(function (key) {\n if (lastState[key] === undefined) {\n delete stagedState[key];\n }\n });\n writePromise = storage.setItem(storageKey, serialize(stagedState))[\"catch\"](onWriteFail);\n }\n\n function passWhitelistBlacklist(key) {\n if (whitelist && whitelist.indexOf(key) === -1 && key !== '_persist') return false;\n if (blacklist && blacklist.indexOf(key) !== -1) return false;\n return true;\n }\n\n function onWriteFail(err) {\n // @TODO add fail handlers (typically storage full)\n if (err && undefined !== 'production') {\n console.error('Error storing data', err);\n }\n }\n\n var flush = function flush() {\n while (keysToProcess.length !== 0) {\n processNextKey();\n }\n\n return writePromise || Promise.resolve();\n }; // return `persistoid`\n\n\n return {\n update: update,\n flush: flush\n };\n} // @NOTE in the future this may be exposed via config\n\nfunction defaultSerialize(data) {\n return JSON.stringify(data);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvY3JlYXRlUGVyc2lzdG9pZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9jcmVhdGVQZXJzaXN0b2lkLmpzP2QyMDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS0VZX1BSRUZJWCwgUkVIWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBAVE9ETyByZW1vdmUgb25jZSBmbG93IDwgMC42MyBzdXBwb3J0IGlzIG5vIGxvbmdlciByZXF1aXJlZC5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGVyc2lzdG9pZChjb25maWcpIHtcbiAgLy8gZGVmYXVsdHNcbiAgdmFyIGJsYWNrbGlzdCA9IGNvbmZpZy5ibGFja2xpc3QgfHwgbnVsbDtcbiAgdmFyIHdoaXRlbGlzdCA9IGNvbmZpZy53aGl0ZWxpc3QgfHwgbnVsbDtcbiAgdmFyIHRyYW5zZm9ybXMgPSBjb25maWcudHJhbnNmb3JtcyB8fCBbXTtcbiAgdmFyIHRocm90dGxlID0gY29uZmlnLnRocm90dGxlIHx8IDA7XG4gIHZhciBzdG9yYWdlS2V5ID0gJycgKyAoY29uZmlnLmtleVByZWZpeCAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmtleVByZWZpeCA6IEtFWV9QUkVGSVgpICsgY29uZmlnLmtleTtcbiAgdmFyIHN0b3JhZ2UgPSBjb25maWcuc3RvcmFnZTtcbiAgdmFyIHNlcmlhbGl6ZSA9IGNvbmZpZy5zZXJpYWxpemUgPT09IGZhbHNlID8gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geDtcbiAgfSA6IGRlZmF1bHRTZXJpYWxpemU7XG5cbiAgLy8gaW5pdGlhbGl6ZSBzdGF0ZWZ1bCB2YWx1ZXNcbiAgdmFyIGxhc3RTdGF0ZSA9IHt9O1xuICB2YXIgc3RhZ2VkU3RhdGUgPSB7fTtcbiAgdmFyIGtleXNUb1Byb2Nlc3MgPSBbXTtcbiAgdmFyIHRpbWVJdGVyYXRvciA9IG51bGw7XG4gIHZhciB3cml0ZVByb21pc2UgPSBudWxsO1xuXG4gIHZhciB1cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoc3RhdGUpIHtcbiAgICAvLyBhZGQgYW55IGNoYW5nZWQga2V5cyB0byB0aGUgcXVldWVcbiAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIXBhc3NXaGl0ZWxpc3RCbGFja2xpc3Qoa2V5KSkgcmV0dXJuOyAvLyBpcyBrZXlzcGFjZSBpZ25vcmVkPyBub29wXG4gICAgICBpZiAobGFzdFN0YXRlW2tleV0gPT09IHN0YXRlW2tleV0pIHJldHVybjsgLy8gdmFsdWUgdW5jaGFuZ2VkPyBub29wXG4gICAgICBpZiAoa2V5c1RvUHJvY2Vzcy5pbmRleE9mKGtleSkgIT09IC0xKSByZXR1cm47IC8vIGlzIGtleSBhbHJlYWR5IHF1ZXVlZD8gbm9vcFxuICAgICAga2V5c1RvUHJvY2Vzcy5wdXNoKGtleSk7IC8vIGFkZCBrZXkgdG8gcXVldWVcbiAgICB9KTtcblxuICAgIC8vaWYgYW55IGtleSBpcyBtaXNzaW5nIGluIHRoZSBuZXcgc3RhdGUgd2hpY2ggd2FzIHByZXNlbnQgaW4gdGhlIGxhc3RTdGF0ZSxcbiAgICAvL2FkZCBpdCBmb3IgcHJvY2Vzc2luZyB0b29cbiAgICBPYmplY3Qua2V5cyhsYXN0U3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHN0YXRlW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBrZXlzVG9Qcm9jZXNzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHN0YXJ0IHRoZSB0aW1lIGl0ZXJhdG9yIGlmIG5vdCBydW5uaW5nIChyZWFkOiB0aHJvdHRsZSlcbiAgICBpZiAodGltZUl0ZXJhdG9yID09PSBudWxsKSB7XG4gICAgICB0aW1lSXRlcmF0b3IgPSBzZXRJbnRlcnZhbChwcm9jZXNzTmV4dEtleSwgdGhyb3R0bGUpO1xuICAgIH1cblxuICAgIGxhc3RTdGF0ZSA9IHN0YXRlO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3NOZXh0S2V5KCkge1xuICAgIGlmIChrZXlzVG9Qcm9jZXNzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRpbWVJdGVyYXRvcikgY2xlYXJJbnRlcnZhbCh0aW1lSXRlcmF0b3IpO1xuICAgICAgdGltZUl0ZXJhdG9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0ga2V5c1RvUHJvY2Vzcy5zaGlmdCgpO1xuICAgIHZhciBlbmRTdGF0ZSA9IHRyYW5zZm9ybXMucmVkdWNlKGZ1bmN0aW9uIChzdWJTdGF0ZSwgdHJhbnNmb3JtZXIpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lci5pbihzdWJTdGF0ZSwga2V5LCBsYXN0U3RhdGUpO1xuICAgIH0sIGxhc3RTdGF0ZVtrZXldKTtcblxuICAgIGlmIChlbmRTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFnZWRTdGF0ZVtrZXldID0gc2VyaWFsaXplKGVuZFN0YXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdyZWR1eC1wZXJzaXN0L2NyZWF0ZVBlcnNpc3RvaWQ6IGVycm9yIHNlcmlhbGl6aW5nIHN0YXRlJywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9pZiB0aGUgZW5kU3RhdGUgaXMgdW5kZWZpbmVkLCBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGV4aXN0aW5nIHNlcmlhbGl6ZWQgY29udGVudFxuICAgICAgZGVsZXRlIHN0YWdlZFN0YXRlW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGtleXNUb1Byb2Nlc3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB3cml0ZVN0YWdlZFN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVTdGFnZWRTdGF0ZSgpIHtcbiAgICAvLyBjbGVhbnVwIGFueSByZW1vdmVkIGtleXMganVzdCBiZWZvcmUgd3JpdGUuXG4gICAgT2JqZWN0LmtleXMoc3RhZ2VkU3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGxhc3RTdGF0ZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIHN0YWdlZFN0YXRlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3cml0ZVByb21pc2UgPSBzdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgc2VyaWFsaXplKHN0YWdlZFN0YXRlKSkuY2F0Y2gob25Xcml0ZUZhaWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFzc1doaXRlbGlzdEJsYWNrbGlzdChrZXkpIHtcbiAgICBpZiAod2hpdGVsaXN0ICYmIHdoaXRlbGlzdC5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gJ19wZXJzaXN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2Yoa2V5KSAhPT0gLTEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uV3JpdGVGYWlsKGVycikge1xuICAgIC8vIEBUT0RPIGFkZCBmYWlsIGhhbmRsZXJzICh0eXBpY2FsbHkgc3RvcmFnZSBmdWxsKVxuICAgIGlmIChlcnIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RvcmluZyBkYXRhJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB3aGlsZSAoa2V5c1RvUHJvY2Vzcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHByb2Nlc3NOZXh0S2V5KCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZVByb21pc2UgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgLy8gcmV0dXJuIGBwZXJzaXN0b2lkYFxuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIGZsdXNoOiBmbHVzaFxuICB9O1xufVxuXG4vLyBATk9URSBpbiB0aGUgZnV0dXJlIHRoaXMgbWF5IGJlIGV4cG9zZWQgdmlhIGNvbmZpZ1xuZnVuY3Rpb24gZGVmYXVsdFNlcmlhbGl6ZShkYXRhKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQU5BO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBQ0E7QUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBcEdBO0FBQ0E7QUFDQTtBQXNHQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/createPersistoid.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/createTransform.js": -/*!***********************************************************!*\ - !*** ../node_modules/redux-persist/es/createTransform.js ***! - \***********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createTransform; });\nfunction createTransform( // @NOTE inbound: transform state coming from redux on its way to being serialized and stored\ninbound, // @NOTE outbound: transform state coming from storage, on its way to be rehydrated into redux\noutbound) {\n var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var whitelist = config.whitelist || null;\n var blacklist = config.blacklist || null;\n\n function whitelistBlacklistCheck(key) {\n if (whitelist && whitelist.indexOf(key) === -1) return true;\n if (blacklist && blacklist.indexOf(key) !== -1) return true;\n return false;\n }\n\n return {\n \"in\": function _in(state, key, fullState) {\n return !whitelistBlacklistCheck(key) && inbound ? inbound(state, key, fullState) : state;\n },\n out: function out(state, key, fullState) {\n return !whitelistBlacklistCheck(key) && outbound ? outbound(state, key, fullState) : state;\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvY3JlYXRlVHJhbnNmb3JtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC1wZXJzaXN0L2VzL2NyZWF0ZVRyYW5zZm9ybS5qcz9mOWNjIl0sInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm0oXG4vLyBATk9URSBpbmJvdW5kOiB0cmFuc2Zvcm0gc3RhdGUgY29taW5nIGZyb20gcmVkdXggb24gaXRzIHdheSB0byBiZWluZyBzZXJpYWxpemVkIGFuZCBzdG9yZWRcbmluYm91bmQsXG4vLyBATk9URSBvdXRib3VuZDogdHJhbnNmb3JtIHN0YXRlIGNvbWluZyBmcm9tIHN0b3JhZ2UsIG9uIGl0cyB3YXkgdG8gYmUgcmVoeWRyYXRlZCBpbnRvIHJlZHV4XG5vdXRib3VuZCkge1xuICB2YXIgY29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcblxuICB2YXIgd2hpdGVsaXN0ID0gY29uZmlnLndoaXRlbGlzdCB8fCBudWxsO1xuICB2YXIgYmxhY2tsaXN0ID0gY29uZmlnLmJsYWNrbGlzdCB8fCBudWxsO1xuXG4gIGZ1bmN0aW9uIHdoaXRlbGlzdEJsYWNrbGlzdENoZWNrKGtleSkge1xuICAgIGlmICh3aGl0ZWxpc3QgJiYgd2hpdGVsaXN0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHJldHVybiB0cnVlO1xuICAgIGlmIChibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2Yoa2V5KSAhPT0gLTEpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW46IGZ1bmN0aW9uIF9pbihzdGF0ZSwga2V5LCBmdWxsU3RhdGUpIHtcbiAgICAgIHJldHVybiAhd2hpdGVsaXN0QmxhY2tsaXN0Q2hlY2soa2V5KSAmJiBpbmJvdW5kID8gaW5ib3VuZChzdGF0ZSwga2V5LCBmdWxsU3RhdGUpIDogc3RhdGU7XG4gICAgfSxcbiAgICBvdXQ6IGZ1bmN0aW9uIG91dChzdGF0ZSwga2V5LCBmdWxsU3RhdGUpIHtcbiAgICAgIHJldHVybiAhd2hpdGVsaXN0QmxhY2tsaXN0Q2hlY2soa2V5KSAmJiBvdXRib3VuZCA/IG91dGJvdW5kKHN0YXRlLCBrZXksIGZ1bGxTdGF0ZSkgOiBzdGF0ZTtcbiAgICB9XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQU5BO0FBUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/createTransform.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/getStoredState.js": -/*!**********************************************************!*\ - !*** ../node_modules/redux-persist/es/getStoredState.js ***! - \**********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getStoredState; });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n\nfunction getStoredState(config) {\n var transforms = config.transforms || [];\n var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : _constants__WEBPACK_IMPORTED_MODULE_0__[\"KEY_PREFIX\"]) + config.key;\n var storage = config.storage;\n var debug = config.debug;\n var deserialize = config.serialize === false ? function (x) {\n return x;\n } : defaultDeserialize;\n return storage.getItem(storageKey).then(function (serialized) {\n if (!serialized) return undefined;else {\n try {\n var state = {};\n var rawState = deserialize(serialized);\n Object.keys(rawState).forEach(function (key) {\n state[key] = transforms.reduceRight(function (subState, transformer) {\n return transformer.out(subState, key, rawState);\n }, deserialize(rawState[key]));\n });\n return state;\n } catch (err) {\n if (undefined !== 'production' && debug) console.log('redux-persist/getStoredState: Error restoring data ' + serialized, err);\n throw err;\n }\n }\n });\n}\n\nfunction defaultDeserialize(serial) {\n return JSON.parse(serial);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvZ2V0U3RvcmVkU3RhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvZ2V0U3RvcmVkU3RhdGUuanM/NDQ3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgS0VZX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U3RvcmVkU3RhdGUoY29uZmlnKSB7XG4gIHZhciB0cmFuc2Zvcm1zID0gY29uZmlnLnRyYW5zZm9ybXMgfHwgW107XG4gIHZhciBzdG9yYWdlS2V5ID0gJycgKyAoY29uZmlnLmtleVByZWZpeCAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmtleVByZWZpeCA6IEtFWV9QUkVGSVgpICsgY29uZmlnLmtleTtcbiAgdmFyIHN0b3JhZ2UgPSBjb25maWcuc3RvcmFnZTtcbiAgdmFyIGRlYnVnID0gY29uZmlnLmRlYnVnO1xuICB2YXIgZGVzZXJpYWxpemUgPSBjb25maWcuc2VyaWFsaXplID09PSBmYWxzZSA/IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHg7XG4gIH0gOiBkZWZhdWx0RGVzZXJpYWxpemU7XG4gIHJldHVybiBzdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSkudGhlbihmdW5jdGlvbiAoc2VyaWFsaXplZCkge1xuICAgIGlmICghc2VyaWFsaXplZCkgcmV0dXJuIHVuZGVmaW5lZDtlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHt9O1xuICAgICAgICB2YXIgcmF3U3RhdGUgPSBkZXNlcmlhbGl6ZShzZXJpYWxpemVkKTtcbiAgICAgICAgT2JqZWN0LmtleXMocmF3U3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHN0YXRlW2tleV0gPSB0cmFuc2Zvcm1zLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uIChzdWJTdGF0ZSwgdHJhbnNmb3JtZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lci5vdXQoc3ViU3RhdGUsIGtleSwgcmF3U3RhdGUpO1xuICAgICAgICAgIH0sIGRlc2VyaWFsaXplKHJhd1N0YXRlW2tleV0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3QvZ2V0U3RvcmVkU3RhdGU6IEVycm9yIHJlc3RvcmluZyBkYXRhICcgKyBzZXJpYWxpemVkLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdERlc2VyaWFsaXplKHNlcmlhbCkge1xuICByZXR1cm4gSlNPTi5wYXJzZShzZXJpYWwpO1xufSJdLCJtYXBwaW5ncyI6IkFBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/getStoredState.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/index.js": -/*!*************************************************!*\ - !*** ../node_modules/redux-persist/es/index.js ***! - \*************************************************/ -/*! exports provided: persistReducer, persistCombineReducers, persistStore, createMigrate, createTransform, getStoredState, createPersistoid, purgeStoredState, KEY_PREFIX, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, DEFAULT_VERSION */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _persistReducer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./persistReducer */ \"../node_modules/redux-persist/es/persistReducer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"persistReducer\", function() { return _persistReducer__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _persistCombineReducers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./persistCombineReducers */ \"../node_modules/redux-persist/es/persistCombineReducers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"persistCombineReducers\", function() { return _persistCombineReducers__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _persistStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./persistStore */ \"../node_modules/redux-persist/es/persistStore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"persistStore\", function() { return _persistStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _createMigrate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createMigrate */ \"../node_modules/redux-persist/es/createMigrate.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createMigrate\", function() { return _createMigrate__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _createTransform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createTransform */ \"../node_modules/redux-persist/es/createTransform.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createTransform\", function() { return _createTransform__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _getStoredState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getStoredState */ \"../node_modules/redux-persist/es/getStoredState.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getStoredState\", function() { return _getStoredState__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _createPersistoid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./createPersistoid */ \"../node_modules/redux-persist/es/createPersistoid.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPersistoid\", function() { return _createPersistoid__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _purgeStoredState__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./purgeStoredState */ \"../node_modules/redux-persist/es/purgeStoredState.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"purgeStoredState\", function() { return _purgeStoredState__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"KEY_PREFIX\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"KEY_PREFIX\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FLUSH\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"FLUSH\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"REHYDRATE\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"REHYDRATE\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PAUSE\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"PAUSE\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PERSIST\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"PERSIST\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PURGE\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"PURGE\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"REGISTER\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"REGISTER\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DEFAULT_VERSION\", function() { return _constants__WEBPACK_IMPORTED_MODULE_8__[\"DEFAULT_VERSION\"]; });\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvaW5kZXguanM/YzA1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIHBlcnNpc3RSZWR1Y2VyIH0gZnJvbSAnLi9wZXJzaXN0UmVkdWNlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBlcnNpc3RDb21iaW5lUmVkdWNlcnMgfSBmcm9tICcuL3BlcnNpc3RDb21iaW5lUmVkdWNlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwZXJzaXN0U3RvcmUgfSBmcm9tICcuL3BlcnNpc3RTdG9yZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZU1pZ3JhdGUgfSBmcm9tICcuL2NyZWF0ZU1pZ3JhdGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVUcmFuc2Zvcm0gfSBmcm9tICcuL2NyZWF0ZVRyYW5zZm9ybSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdldFN0b3JlZFN0YXRlIH0gZnJvbSAnLi9nZXRTdG9yZWRTdGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVBlcnNpc3RvaWQgfSBmcm9tICcuL2NyZWF0ZVBlcnNpc3RvaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwdXJnZVN0b3JlZFN0YXRlIH0gZnJvbSAnLi9wdXJnZVN0b3JlZFN0YXRlJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/integration/react.js": -/*!*************************************************************!*\ - !*** ../node_modules/redux-persist/es/integration/react.js ***! - \*************************************************************/ -/*! exports provided: PersistGate */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PersistGate\", function() { return PersistGate; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\n // eslint-disable-line import/no-unresolved\n// eslint-disable-line import/no-unresolved\n\nvar PersistGate = function (_PureComponent) {\n _inherits(PersistGate, _PureComponent);\n\n function PersistGate() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, PersistGate);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PersistGate.__proto__ || Object.getPrototypeOf(PersistGate)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n bootstrapped: false\n }, _this.handlePersistorState = function () {\n var persistor = _this.props.persistor;\n\n var _persistor$getState = persistor.getState(),\n bootstrapped = _persistor$getState.bootstrapped;\n\n if (bootstrapped) {\n if (_this.props.onBeforeLift) {\n Promise.resolve(_this.props.onBeforeLift()).then(function () {\n return _this.setState({\n bootstrapped: true\n });\n })[\"catch\"](function () {\n return _this.setState({\n bootstrapped: true\n });\n });\n } else {\n _this.setState({\n bootstrapped: true\n });\n }\n\n _this._unsubscribe && _this._unsubscribe();\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(PersistGate, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this._unsubscribe = this.props.persistor.subscribe(this.handlePersistorState);\n this.handlePersistorState();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this._unsubscribe && this._unsubscribe();\n }\n }, {\n key: 'render',\n value: function render() {\n if (undefined !== 'production') {\n if (typeof this.props.children === 'function' && this.props.loading) console.error('redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.');\n }\n\n if (typeof this.props.children === 'function') {\n return this.props.children(this.state.bootstrapped);\n }\n\n return this.state.bootstrapped ? this.props.children : this.props.loading;\n }\n }]);\n\n return PersistGate;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\nPersistGate.defaultProps = {\n loading: null\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvaW50ZWdyYXRpb24vcmVhY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvaW50ZWdyYXRpb24vcmVhY3QuanM/YTAwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG4vLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5cblxuZXhwb3J0IHZhciBQZXJzaXN0R2F0ZSA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUGVyc2lzdEdhdGUsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQZXJzaXN0R2F0ZSgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGVyc2lzdEdhdGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IFBlcnNpc3RHYXRlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGVyc2lzdEdhdGUpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGJvb3RzdHJhcHBlZDogZmFsc2VcbiAgICB9LCBfdGhpcy5oYW5kbGVQZXJzaXN0b3JTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwZXJzaXN0b3IgPSBfdGhpcy5wcm9wcy5wZXJzaXN0b3I7XG5cbiAgICAgIHZhciBfcGVyc2lzdG9yJGdldFN0YXRlID0gcGVyc2lzdG9yLmdldFN0YXRlKCksXG4gICAgICAgICAgYm9vdHN0cmFwcGVkID0gX3BlcnNpc3RvciRnZXRTdGF0ZS5ib290c3RyYXBwZWQ7XG5cbiAgICAgIGlmIChib290c3RyYXBwZWQpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmVmb3JlTGlmdCkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShfdGhpcy5wcm9wcy5vbkJlZm9yZUxpZnQoKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0U3RhdGUoeyBib290c3RyYXBwZWQ6IHRydWUgfSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHsgYm9vdHN0cmFwcGVkOiB0cnVlIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgYm9vdHN0cmFwcGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLl91bnN1YnNjcmliZSAmJiBfdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQZXJzaXN0R2F0ZSwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5fdW5zdWJzY3JpYmUgPSB0aGlzLnByb3BzLnBlcnNpc3Rvci5zdWJzY3JpYmUodGhpcy5oYW5kbGVQZXJzaXN0b3JTdGF0ZSk7XG4gICAgICB0aGlzLmhhbmRsZVBlcnNpc3RvclN0YXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlICYmIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuID09PSAnZnVuY3Rpb24nICYmIHRoaXMucHJvcHMubG9hZGluZykgY29uc29sZS5lcnJvcigncmVkdXgtcGVyc2lzdDogUGVyc2lzdEdhdGUgZXhwZWN0cyBlaXRoZXIgYSBmdW5jdGlvbiBjaGlsZCBvciBsb2FkaW5nIHByb3AsIGJ1dCBub3QgYm90aC4gVGhlIGxvYWRpbmcgcHJvcCB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZS5ib290c3RyYXBwZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5ib290c3RyYXBwZWQgPyB0aGlzLnByb3BzLmNoaWxkcmVuIDogdGhpcy5wcm9wcy5sb2FkaW5nO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQZXJzaXN0R2F0ZTtcbn0oUHVyZUNvbXBvbmVudCk7XG5QZXJzaXN0R2F0ZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGxvYWRpbmc6IG51bGxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQURBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFhQTtBQTlEQTtBQWdFQTtBQUNBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/integration/react.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/persistCombineReducers.js": -/*!******************************************************************!*\ - !*** ../node_modules/redux-persist/es/persistCombineReducers.js ***! - \******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return persistCombineReducers; });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"../node_modules/redux/es/index.js\");\n/* harmony import */ var _persistReducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./persistReducer */ \"../node_modules/redux-persist/es/persistReducer.js\");\n/* harmony import */ var _stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stateReconciler/autoMergeLevel2 */ \"../node_modules/redux-persist/es/stateReconciler/autoMergeLevel2.js\");\n\n\n // combineReducers + persistReducer with stateReconciler defaulted to autoMergeLevel2\n\nfunction persistCombineReducers(config, reducers) {\n config.stateReconciler = config.stateReconciler === undefined ? _stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : config.stateReconciler;\n return Object(_persistReducer__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(config, Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"combineReducers\"])(reducers));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvcGVyc2lzdENvbWJpbmVSZWR1Y2Vycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9wZXJzaXN0Q29tYmluZVJlZHVjZXJzLmpzPzBhNDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHBlcnNpc3RSZWR1Y2VyIGZyb20gJy4vcGVyc2lzdFJlZHVjZXInO1xuaW1wb3J0IGF1dG9NZXJnZUxldmVsMiBmcm9tICcuL3N0YXRlUmVjb25jaWxlci9hdXRvTWVyZ2VMZXZlbDInO1xuXG4vLyBjb21iaW5lUmVkdWNlcnMgKyBwZXJzaXN0UmVkdWNlciB3aXRoIHN0YXRlUmVjb25jaWxlciBkZWZhdWx0ZWQgdG8gYXV0b01lcmdlTGV2ZWwyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwZXJzaXN0Q29tYmluZVJlZHVjZXJzKGNvbmZpZywgcmVkdWNlcnMpIHtcbiAgY29uZmlnLnN0YXRlUmVjb25jaWxlciA9IGNvbmZpZy5zdGF0ZVJlY29uY2lsZXIgPT09IHVuZGVmaW5lZCA/IGF1dG9NZXJnZUxldmVsMiA6IGNvbmZpZy5zdGF0ZVJlY29uY2lsZXI7XG4gIHJldHVybiBwZXJzaXN0UmVkdWNlcihjb25maWcsIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VycykpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/persistCombineReducers.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/persistReducer.js": -/*!**********************************************************!*\ - !*** ../node_modules/redux-persist/es/persistReducer.js ***! - \**********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return persistReducer; });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n/* harmony import */ var _stateReconciler_autoMergeLevel1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stateReconciler/autoMergeLevel1 */ \"../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js\");\n/* harmony import */ var _createPersistoid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPersistoid */ \"../node_modules/redux-persist/es/createPersistoid.js\");\n/* harmony import */ var _getStoredState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getStoredState */ \"../node_modules/redux-persist/es/getStoredState.js\");\n/* harmony import */ var _purgeStoredState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./purgeStoredState */ \"../node_modules/redux-persist/es/purgeStoredState.js\");\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\n\n\n\n\n\nvar DEFAULT_TIMEOUT = 5000;\n/*\n @TODO add validation / handling for:\n - persisting a reducer which has nested _persist\n - handling actions that fire before reydrate is called\n*/\n\nfunction persistReducer(config, baseReducer) {\n if (undefined !== 'production') {\n if (!config) throw new Error('config is required for persistReducer');\n if (!config.key) throw new Error('key is required in persistor config');\n if (!config.storage) throw new Error(\"redux-persist: config.storage is required. Try using one of the provided storage engines `import storage from 'redux-persist/lib/storage'`\");\n }\n\n var version = config.version !== undefined ? config.version : _constants__WEBPACK_IMPORTED_MODULE_0__[\"DEFAULT_VERSION\"];\n var debug = config.debug || false;\n var stateReconciler = config.stateReconciler === undefined ? _stateReconciler_autoMergeLevel1__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : config.stateReconciler;\n var getStoredState = config.getStoredState || _getStoredState__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n var timeout = config.timeout !== undefined ? config.timeout : DEFAULT_TIMEOUT;\n var _persistoid = null;\n var _purge = false;\n var _paused = true;\n\n var conditionalUpdate = function conditionalUpdate(state) {\n // update the persistoid only if we are rehydrated and not paused\n state._persist.rehydrated && _persistoid && !_paused && _persistoid.update(state);\n return state;\n };\n\n return function (state, action) {\n var _ref = state || {},\n _persist = _ref._persist,\n rest = _objectWithoutProperties(_ref, ['_persist']);\n\n var restState = rest;\n\n if (action.type === _constants__WEBPACK_IMPORTED_MODULE_0__[\"PERSIST\"]) {\n var _sealed = false;\n\n var _rehydrate = function _rehydrate(payload, err) {\n // dev warning if we are already sealed\n if (undefined !== 'production' && _sealed) console.error('redux-persist: rehydrate for \"' + config.key + '\" called after timeout.', payload, err); // only rehydrate if we are not already sealed\n\n if (!_sealed) {\n action.rehydrate(config.key, payload, err);\n _sealed = true;\n }\n };\n\n timeout && setTimeout(function () {\n !_sealed && _rehydrate(undefined, new Error('redux-persist: persist timed out for persist key \"' + config.key + '\"'));\n }, timeout); // @NOTE PERSIST resumes if paused.\n\n _paused = false; // @NOTE only ever create persistoid once, ensure we call it at least once, even if _persist has already been set\n\n if (!_persistoid) _persistoid = Object(_createPersistoid__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(config); // @NOTE PERSIST can be called multiple times, noop after the first\n\n if (_persist) return state;\n if (typeof action.rehydrate !== 'function' || typeof action.register !== 'function') throw new Error('redux-persist: either rehydrate or register is not a function on the PERSIST action. This can happen if the action is being replayed. This is an unexplored use case, please open an issue and we will figure out a resolution.');\n action.register(config.key);\n getStoredState(config).then(function (restoredState) {\n var migrate = config.migrate || function (s, v) {\n return Promise.resolve(s);\n };\n\n migrate(restoredState, version).then(function (migratedState) {\n _rehydrate(migratedState);\n }, function (migrateErr) {\n if (undefined !== 'production' && migrateErr) console.error('redux-persist: migration error', migrateErr);\n\n _rehydrate(undefined, migrateErr);\n });\n }, function (err) {\n _rehydrate(undefined, err);\n });\n return _extends({}, baseReducer(restState, action), {\n _persist: {\n version: version,\n rehydrated: false\n }\n });\n } else if (action.type === _constants__WEBPACK_IMPORTED_MODULE_0__[\"PURGE\"]) {\n _purge = true;\n action.result(Object(_purgeStoredState__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(config));\n return _extends({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === _constants__WEBPACK_IMPORTED_MODULE_0__[\"FLUSH\"]) {\n action.result(_persistoid && _persistoid.flush());\n return _extends({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === _constants__WEBPACK_IMPORTED_MODULE_0__[\"PAUSE\"]) {\n _paused = true;\n } else if (action.type === _constants__WEBPACK_IMPORTED_MODULE_0__[\"REHYDRATE\"]) {\n // noop on restState if purging\n if (_purge) return _extends({}, restState, {\n _persist: _extends({}, _persist, {\n rehydrated: true\n }) // @NOTE if key does not match, will continue to default else below\n\n });\n\n if (action.key === config.key) {\n var reducedState = baseReducer(restState, action);\n var inboundState = action.payload; // only reconcile state if stateReconciler and inboundState are both defined\n\n var reconciledRest = stateReconciler !== false && inboundState !== undefined ? stateReconciler(inboundState, state, reducedState, config) : reducedState;\n\n var _newState = _extends({}, reconciledRest, {\n _persist: _extends({}, _persist, {\n rehydrated: true\n })\n });\n\n return conditionalUpdate(_newState);\n }\n } // if we have not already handled PERSIST, straight passthrough\n\n\n if (!_persist) return baseReducer(state, action); // run base reducer:\n // is state modified ? return original : return updated\n\n var newState = baseReducer(restState, action);\n if (newState === restState) return state;else {\n newState._persist = _persist;\n return conditionalUpdate(newState);\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvcGVyc2lzdFJlZHVjZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvcGVyc2lzdFJlZHVjZXIuanM/NGYwMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCB7IEZMVVNILCBQQVVTRSwgUEVSU0lTVCwgUFVSR0UsIFJFSFlEUkFURSwgREVGQVVMVF9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgYXV0b01lcmdlTGV2ZWwxIGZyb20gJy4vc3RhdGVSZWNvbmNpbGVyL2F1dG9NZXJnZUxldmVsMSc7XG5pbXBvcnQgY3JlYXRlUGVyc2lzdG9pZCBmcm9tICcuL2NyZWF0ZVBlcnNpc3RvaWQnO1xuaW1wb3J0IGRlZmF1bHRHZXRTdG9yZWRTdGF0ZSBmcm9tICcuL2dldFN0b3JlZFN0YXRlJztcbmltcG9ydCBwdXJnZVN0b3JlZFN0YXRlIGZyb20gJy4vcHVyZ2VTdG9yZWRTdGF0ZSc7XG5cbnZhciBERUZBVUxUX1RJTUVPVVQgPSA1MDAwO1xuLypcbiAgQFRPRE8gYWRkIHZhbGlkYXRpb24gLyBoYW5kbGluZyBmb3I6XG4gIC0gcGVyc2lzdGluZyBhIHJlZHVjZXIgd2hpY2ggaGFzIG5lc3RlZCBfcGVyc2lzdFxuICAtIGhhbmRsaW5nIGFjdGlvbnMgdGhhdCBmaXJlIGJlZm9yZSByZXlkcmF0ZSBpcyBjYWxsZWRcbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwZXJzaXN0UmVkdWNlcihjb25maWcsIGJhc2VSZWR1Y2VyKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFjb25maWcpIHRocm93IG5ldyBFcnJvcignY29uZmlnIGlzIHJlcXVpcmVkIGZvciBwZXJzaXN0UmVkdWNlcicpO1xuICAgIGlmICghY29uZmlnLmtleSkgdGhyb3cgbmV3IEVycm9yKCdrZXkgaXMgcmVxdWlyZWQgaW4gcGVyc2lzdG9yIGNvbmZpZycpO1xuICAgIGlmICghY29uZmlnLnN0b3JhZ2UpIHRocm93IG5ldyBFcnJvcihcInJlZHV4LXBlcnNpc3Q6IGNvbmZpZy5zdG9yYWdlIGlzIHJlcXVpcmVkLiBUcnkgdXNpbmcgb25lIG9mIHRoZSBwcm92aWRlZCBzdG9yYWdlIGVuZ2luZXMgYGltcG9ydCBzdG9yYWdlIGZyb20gJ3JlZHV4LXBlcnNpc3QvbGliL3N0b3JhZ2UnYFwiKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gIT09IHVuZGVmaW5lZCA/IGNvbmZpZy52ZXJzaW9uIDogREVGQVVMVF9WRVJTSU9OO1xuICB2YXIgZGVidWcgPSBjb25maWcuZGVidWcgfHwgZmFsc2U7XG4gIHZhciBzdGF0ZVJlY29uY2lsZXIgPSBjb25maWcuc3RhdGVSZWNvbmNpbGVyID09PSB1bmRlZmluZWQgPyBhdXRvTWVyZ2VMZXZlbDEgOiBjb25maWcuc3RhdGVSZWNvbmNpbGVyO1xuICB2YXIgZ2V0U3RvcmVkU3RhdGUgPSBjb25maWcuZ2V0U3RvcmVkU3RhdGUgfHwgZGVmYXVsdEdldFN0b3JlZFN0YXRlO1xuICB2YXIgdGltZW91dCA9IGNvbmZpZy50aW1lb3V0ICE9PSB1bmRlZmluZWQgPyBjb25maWcudGltZW91dCA6IERFRkFVTFRfVElNRU9VVDtcbiAgdmFyIF9wZXJzaXN0b2lkID0gbnVsbDtcbiAgdmFyIF9wdXJnZSA9IGZhbHNlO1xuICB2YXIgX3BhdXNlZCA9IHRydWU7XG4gIHZhciBjb25kaXRpb25hbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbmRpdGlvbmFsVXBkYXRlKHN0YXRlKSB7XG4gICAgLy8gdXBkYXRlIHRoZSBwZXJzaXN0b2lkIG9ubHkgaWYgd2UgYXJlIHJlaHlkcmF0ZWQgYW5kIG5vdCBwYXVzZWRcbiAgICBzdGF0ZS5fcGVyc2lzdC5yZWh5ZHJhdGVkICYmIF9wZXJzaXN0b2lkICYmICFfcGF1c2VkICYmIF9wZXJzaXN0b2lkLnVwZGF0ZShzdGF0ZSk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfcmVmID0gc3RhdGUgfHwge30sXG4gICAgICAgIF9wZXJzaXN0ID0gX3JlZi5fcGVyc2lzdCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ19wZXJzaXN0J10pO1xuXG4gICAgdmFyIHJlc3RTdGF0ZSA9IHJlc3Q7XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IFBFUlNJU1QpIHtcbiAgICAgIHZhciBfc2VhbGVkID0gZmFsc2U7XG4gICAgICB2YXIgX3JlaHlkcmF0ZSA9IGZ1bmN0aW9uIF9yZWh5ZHJhdGUocGF5bG9hZCwgZXJyKSB7XG4gICAgICAgIC8vIGRldiB3YXJuaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHNlYWxlZFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfc2VhbGVkKSBjb25zb2xlLmVycm9yKCdyZWR1eC1wZXJzaXN0OiByZWh5ZHJhdGUgZm9yIFwiJyArIGNvbmZpZy5rZXkgKyAnXCIgY2FsbGVkIGFmdGVyIHRpbWVvdXQuJywgcGF5bG9hZCwgZXJyKTtcblxuICAgICAgICAvLyBvbmx5IHJlaHlkcmF0ZSBpZiB3ZSBhcmUgbm90IGFscmVhZHkgc2VhbGVkXG4gICAgICAgIGlmICghX3NlYWxlZCkge1xuICAgICAgICAgIGFjdGlvbi5yZWh5ZHJhdGUoY29uZmlnLmtleSwgcGF5bG9hZCwgZXJyKTtcbiAgICAgICAgICBfc2VhbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRpbWVvdXQgJiYgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICFfc2VhbGVkICYmIF9yZWh5ZHJhdGUodW5kZWZpbmVkLCBuZXcgRXJyb3IoJ3JlZHV4LXBlcnNpc3Q6IHBlcnNpc3QgdGltZWQgb3V0IGZvciBwZXJzaXN0IGtleSBcIicgKyBjb25maWcua2V5ICsgJ1wiJykpO1xuICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgIC8vIEBOT1RFIFBFUlNJU1QgcmVzdW1lcyBpZiBwYXVzZWQuXG4gICAgICBfcGF1c2VkID0gZmFsc2U7XG5cbiAgICAgIC8vIEBOT1RFIG9ubHkgZXZlciBjcmVhdGUgcGVyc2lzdG9pZCBvbmNlLCBlbnN1cmUgd2UgY2FsbCBpdCBhdCBsZWFzdCBvbmNlLCBldmVuIGlmIF9wZXJzaXN0IGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gICAgICBpZiAoIV9wZXJzaXN0b2lkKSBfcGVyc2lzdG9pZCA9IGNyZWF0ZVBlcnNpc3RvaWQoY29uZmlnKTtcblxuICAgICAgLy8gQE5PVEUgUEVSU0lTVCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBub29wIGFmdGVyIHRoZSBmaXJzdFxuICAgICAgaWYgKF9wZXJzaXN0KSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvbi5yZWh5ZHJhdGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGFjdGlvbi5yZWdpc3RlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdyZWR1eC1wZXJzaXN0OiBlaXRoZXIgcmVoeWRyYXRlIG9yIHJlZ2lzdGVyIGlzIG5vdCBhIGZ1bmN0aW9uIG9uIHRoZSBQRVJTSVNUIGFjdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBhY3Rpb24gaXMgYmVpbmcgcmVwbGF5ZWQuIFRoaXMgaXMgYW4gdW5leHBsb3JlZCB1c2UgY2FzZSwgcGxlYXNlIG9wZW4gYW4gaXNzdWUgYW5kIHdlIHdpbGwgZmlndXJlIG91dCBhIHJlc29sdXRpb24uJyk7XG5cbiAgICAgIGFjdGlvbi5yZWdpc3Rlcihjb25maWcua2V5KTtcblxuICAgICAgZ2V0U3RvcmVkU3RhdGUoY29uZmlnKS50aGVuKGZ1bmN0aW9uIChyZXN0b3JlZFN0YXRlKSB7XG4gICAgICAgIHZhciBtaWdyYXRlID0gY29uZmlnLm1pZ3JhdGUgfHwgZnVuY3Rpb24gKHMsIHYpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpO1xuICAgICAgICB9O1xuICAgICAgICBtaWdyYXRlKHJlc3RvcmVkU3RhdGUsIHZlcnNpb24pLnRoZW4oZnVuY3Rpb24gKG1pZ3JhdGVkU3RhdGUpIHtcbiAgICAgICAgICBfcmVoeWRyYXRlKG1pZ3JhdGVkU3RhdGUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAobWlncmF0ZUVycikge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG1pZ3JhdGVFcnIpIGNvbnNvbGUuZXJyb3IoJ3JlZHV4LXBlcnNpc3Q6IG1pZ3JhdGlvbiBlcnJvcicsIG1pZ3JhdGVFcnIpO1xuICAgICAgICAgIF9yZWh5ZHJhdGUodW5kZWZpbmVkLCBtaWdyYXRlRXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWh5ZHJhdGUodW5kZWZpbmVkLCBlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYmFzZVJlZHVjZXIocmVzdFN0YXRlLCBhY3Rpb24pLCB7XG4gICAgICAgIF9wZXJzaXN0OiB7IHZlcnNpb246IHZlcnNpb24sIHJlaHlkcmF0ZWQ6IGZhbHNlIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFBVUkdFKSB7XG4gICAgICBfcHVyZ2UgPSB0cnVlO1xuICAgICAgYWN0aW9uLnJlc3VsdChwdXJnZVN0b3JlZFN0YXRlKGNvbmZpZykpO1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBiYXNlUmVkdWNlcihyZXN0U3RhdGUsIGFjdGlvbiksIHtcbiAgICAgICAgX3BlcnNpc3Q6IF9wZXJzaXN0XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBGTFVTSCkge1xuICAgICAgYWN0aW9uLnJlc3VsdChfcGVyc2lzdG9pZCAmJiBfcGVyc2lzdG9pZC5mbHVzaCgpKTtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYmFzZVJlZHVjZXIocmVzdFN0YXRlLCBhY3Rpb24pLCB7XG4gICAgICAgIF9wZXJzaXN0OiBfcGVyc2lzdFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gUEFVU0UpIHtcbiAgICAgIF9wYXVzZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFJFSFlEUkFURSkge1xuICAgICAgLy8gbm9vcCBvbiByZXN0U3RhdGUgaWYgcHVyZ2luZ1xuICAgICAgaWYgKF9wdXJnZSkgcmV0dXJuIF9leHRlbmRzKHt9LCByZXN0U3RhdGUsIHtcbiAgICAgICAgX3BlcnNpc3Q6IF9leHRlbmRzKHt9LCBfcGVyc2lzdCwgeyByZWh5ZHJhdGVkOiB0cnVlIH0pXG5cbiAgICAgICAgLy8gQE5PVEUgaWYga2V5IGRvZXMgbm90IG1hdGNoLCB3aWxsIGNvbnRpbnVlIHRvIGRlZmF1bHQgZWxzZSBiZWxvd1xuICAgICAgfSk7aWYgKGFjdGlvbi5rZXkgPT09IGNvbmZpZy5rZXkpIHtcbiAgICAgICAgdmFyIHJlZHVjZWRTdGF0ZSA9IGJhc2VSZWR1Y2VyKHJlc3RTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgdmFyIGluYm91bmRTdGF0ZSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAvLyBvbmx5IHJlY29uY2lsZSBzdGF0ZSBpZiBzdGF0ZVJlY29uY2lsZXIgYW5kIGluYm91bmRTdGF0ZSBhcmUgYm90aCBkZWZpbmVkXG4gICAgICAgIHZhciByZWNvbmNpbGVkUmVzdCA9IHN0YXRlUmVjb25jaWxlciAhPT0gZmFsc2UgJiYgaW5ib3VuZFN0YXRlICE9PSB1bmRlZmluZWQgPyBzdGF0ZVJlY29uY2lsZXIoaW5ib3VuZFN0YXRlLCBzdGF0ZSwgcmVkdWNlZFN0YXRlLCBjb25maWcpIDogcmVkdWNlZFN0YXRlO1xuXG4gICAgICAgIHZhciBfbmV3U3RhdGUgPSBfZXh0ZW5kcyh7fSwgcmVjb25jaWxlZFJlc3QsIHtcbiAgICAgICAgICBfcGVyc2lzdDogX2V4dGVuZHMoe30sIF9wZXJzaXN0LCB7IHJlaHlkcmF0ZWQ6IHRydWUgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb25kaXRpb25hbFVwZGF0ZShfbmV3U3RhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhdmUgbm90IGFscmVhZHkgaGFuZGxlZCBQRVJTSVNULCBzdHJhaWdodCBwYXNzdGhyb3VnaFxuICAgIGlmICghX3BlcnNpc3QpIHJldHVybiBiYXNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgIC8vIHJ1biBiYXNlIHJlZHVjZXI6XG4gICAgLy8gaXMgc3RhdGUgbW9kaWZpZWQgPyByZXR1cm4gb3JpZ2luYWwgOiByZXR1cm4gdXBkYXRlZFxuICAgIHZhciBuZXdTdGF0ZSA9IGJhc2VSZWR1Y2VyKHJlc3RTdGF0ZSwgYWN0aW9uKTtcbiAgICBpZiAobmV3U3RhdGUgPT09IHJlc3RTdGF0ZSkgcmV0dXJuIHN0YXRlO2Vsc2Uge1xuICAgICAgbmV3U3RhdGUuX3BlcnNpc3QgPSBfcGVyc2lzdDtcbiAgICAgIHJldHVybiBjb25kaXRpb25hbFVwZGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVNBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBSkE7QUFKQTtBQVdBO0FBWEE7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUExQ0E7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBT0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQWpGQTtBQUNBO0FBQ0E7QUFtRkE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdGQTtBQStGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/persistReducer.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/persistStore.js": -/*!********************************************************!*\ - !*** ../node_modules/redux-persist/es/persistStore.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return persistStore; });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"../node_modules/redux/es/index.js\");\n/* harmony import */ var _persistReducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./persistReducer */ \"../node_modules/redux-persist/es/persistReducer.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\n\n\n\n\nvar initialState = {\n registry: [],\n bootstrapped: false\n};\n\nvar persistorReducer = function persistorReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case _constants__WEBPACK_IMPORTED_MODULE_2__[\"REGISTER\"]:\n return _extends({}, state, {\n registry: [].concat(_toConsumableArray(state.registry), [action.key])\n });\n\n case _constants__WEBPACK_IMPORTED_MODULE_2__[\"REHYDRATE\"]:\n var firstIndex = state.registry.indexOf(action.key);\n var registry = [].concat(_toConsumableArray(state.registry));\n registry.splice(firstIndex, 1);\n return _extends({}, state, {\n registry: registry,\n bootstrapped: registry.length === 0\n });\n\n default:\n return state;\n }\n};\n\nfunction persistStore(store, options, cb) {\n // help catch incorrect usage of passing PersistConfig in as PersistorOptions\n if (undefined !== 'production') {\n var optionsToTest = options || {};\n var bannedKeys = ['blacklist', 'whitelist', 'transforms', 'storage', 'keyPrefix', 'migrate'];\n bannedKeys.forEach(function (k) {\n if (!!optionsToTest[k]) console.error('redux-persist: invalid option passed to persistStore: \"' + k + '\". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.');\n });\n }\n\n var boostrappedCb = cb || false;\n\n var _pStore = Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"createStore\"])(persistorReducer, initialState, options ? options.enhancer : undefined);\n\n var register = function register(key) {\n _pStore.dispatch({\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"REGISTER\"],\n key: key\n });\n };\n\n var rehydrate = function rehydrate(key, payload, err) {\n var rehydrateAction = {\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"REHYDRATE\"],\n payload: payload,\n err: err,\n key: key // dispatch to `store` to rehydrate and `persistor` to track result\n\n };\n store.dispatch(rehydrateAction);\n\n _pStore.dispatch(rehydrateAction);\n\n if (boostrappedCb && persistor.getState().bootstrapped) {\n boostrappedCb();\n boostrappedCb = false;\n }\n };\n\n var persistor = _extends({}, _pStore, {\n purge: function purge() {\n var results = [];\n store.dispatch({\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"PURGE\"],\n result: function result(purgeResult) {\n results.push(purgeResult);\n }\n });\n return Promise.all(results);\n },\n flush: function flush() {\n var results = [];\n store.dispatch({\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"FLUSH\"],\n result: function result(flushResult) {\n results.push(flushResult);\n }\n });\n return Promise.all(results);\n },\n pause: function pause() {\n store.dispatch({\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"PAUSE\"]\n });\n },\n persist: function persist() {\n store.dispatch({\n type: _constants__WEBPACK_IMPORTED_MODULE_2__[\"PERSIST\"],\n register: register,\n rehydrate: rehydrate\n });\n }\n });\n\n persistor.persist();\n return persistor;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvcGVyc2lzdFN0b3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC1wZXJzaXN0L2VzL3BlcnNpc3RTdG9yZS5qcz80N2MwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IHBlcnNpc3RSZWR1Y2VyIGZyb20gJy4vcGVyc2lzdFJlZHVjZXInO1xuaW1wb3J0IHsgRkxVU0gsIFBBVVNFLCBQRVJTSVNULCBQVVJHRSwgUkVHSVNURVIsIFJFSFlEUkFURSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxudmFyIGluaXRpYWxTdGF0ZSA9IHtcbiAgcmVnaXN0cnk6IFtdLFxuICBib290c3RyYXBwZWQ6IGZhbHNlXG59O1xuXG52YXIgcGVyc2lzdG9yUmVkdWNlciA9IGZ1bmN0aW9uIHBlcnNpc3RvclJlZHVjZXIoKSB7XG4gIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogaW5pdGlhbFN0YXRlO1xuICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFJFR0lTVEVSOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgeyByZWdpc3RyeTogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZS5yZWdpc3RyeSksIFthY3Rpb24ua2V5XSkgfSk7XG4gICAgY2FzZSBSRUhZRFJBVEU6XG4gICAgICB2YXIgZmlyc3RJbmRleCA9IHN0YXRlLnJlZ2lzdHJ5LmluZGV4T2YoYWN0aW9uLmtleSk7XG4gICAgICB2YXIgcmVnaXN0cnkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlLnJlZ2lzdHJ5KSk7XG4gICAgICByZWdpc3RyeS5zcGxpY2UoZmlyc3RJbmRleCwgMSk7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7IHJlZ2lzdHJ5OiByZWdpc3RyeSwgYm9vdHN0cmFwcGVkOiByZWdpc3RyeS5sZW5ndGggPT09IDAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGVyc2lzdFN0b3JlKHN0b3JlLCBvcHRpb25zLCBjYikge1xuICAvLyBoZWxwIGNhdGNoIGluY29ycmVjdCB1c2FnZSBvZiBwYXNzaW5nIFBlcnNpc3RDb25maWcgaW4gYXMgUGVyc2lzdG9yT3B0aW9uc1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBvcHRpb25zVG9UZXN0ID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYmFubmVkS2V5cyA9IFsnYmxhY2tsaXN0JywgJ3doaXRlbGlzdCcsICd0cmFuc2Zvcm1zJywgJ3N0b3JhZ2UnLCAna2V5UHJlZml4JywgJ21pZ3JhdGUnXTtcbiAgICBiYW5uZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgIGlmICghIW9wdGlvbnNUb1Rlc3Rba10pIGNvbnNvbGUuZXJyb3IoJ3JlZHV4LXBlcnNpc3Q6IGludmFsaWQgb3B0aW9uIHBhc3NlZCB0byBwZXJzaXN0U3RvcmU6IFwiJyArIGsgKyAnXCIuIFlvdSBtYXkgYmUgaW5jb3JyZWN0bHkgcGFzc2luZyBwZXJzaXN0Q29uZmlnIGludG8gcGVyc2lzdFN0b3JlLCB3aGVyZWFzIGl0IHNob3VsZCBiZSBwYXNzZWQgaW50byBwZXJzaXN0UmVkdWNlci4nKTtcbiAgICB9KTtcbiAgfVxuICB2YXIgYm9vc3RyYXBwZWRDYiA9IGNiIHx8IGZhbHNlO1xuXG4gIHZhciBfcFN0b3JlID0gY3JlYXRlU3RvcmUocGVyc2lzdG9yUmVkdWNlciwgaW5pdGlhbFN0YXRlLCBvcHRpb25zID8gb3B0aW9ucy5lbmhhbmNlciA6IHVuZGVmaW5lZCk7XG4gIHZhciByZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKGtleSkge1xuICAgIF9wU3RvcmUuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUkVHSVNURVIsXG4gICAgICBrZXk6IGtleVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciByZWh5ZHJhdGUgPSBmdW5jdGlvbiByZWh5ZHJhdGUoa2V5LCBwYXlsb2FkLCBlcnIpIHtcbiAgICB2YXIgcmVoeWRyYXRlQWN0aW9uID0ge1xuICAgICAgdHlwZTogUkVIWURSQVRFLFxuICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgIGVycjogZXJyLFxuICAgICAga2V5OiBrZXlcbiAgICAgIC8vIGRpc3BhdGNoIHRvIGBzdG9yZWAgdG8gcmVoeWRyYXRlIGFuZCBgcGVyc2lzdG9yYCB0byB0cmFjayByZXN1bHRcbiAgICB9O3N0b3JlLmRpc3BhdGNoKHJlaHlkcmF0ZUFjdGlvbik7XG4gICAgX3BTdG9yZS5kaXNwYXRjaChyZWh5ZHJhdGVBY3Rpb24pO1xuICAgIGlmIChib29zdHJhcHBlZENiICYmIHBlcnNpc3Rvci5nZXRTdGF0ZSgpLmJvb3RzdHJhcHBlZCkge1xuICAgICAgYm9vc3RyYXBwZWRDYigpO1xuICAgICAgYm9vc3RyYXBwZWRDYiA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyc2lzdG9yID0gX2V4dGVuZHMoe30sIF9wU3RvcmUsIHtcbiAgICBwdXJnZTogZnVuY3Rpb24gcHVyZ2UoKSB7XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBQVVJHRSxcbiAgICAgICAgcmVzdWx0OiBmdW5jdGlvbiByZXN1bHQocHVyZ2VSZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2gocHVyZ2VSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKTtcbiAgICB9LFxuICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICBzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZMVVNILFxuICAgICAgICByZXN1bHQ6IGZ1bmN0aW9uIHJlc3VsdChmbHVzaFJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChmbHVzaFJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpO1xuICAgIH0sXG4gICAgcGF1c2U6IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgICAgc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBQQVVTRVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBwZXJzaXN0OiBmdW5jdGlvbiBwZXJzaXN0KCkge1xuICAgICAgc3RvcmUuZGlzcGF0Y2goeyB0eXBlOiBQRVJTSVNULCByZWdpc3RlcjogcmVnaXN0ZXIsIHJlaHlkcmF0ZTogcmVoeWRyYXRlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcGVyc2lzdG9yLnBlcnNpc3QoKTtcblxuICByZXR1cm4gcGVyc2lzdG9yO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBVEE7QUFKQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFuQkE7QUFxQkE7QUFDQTtBQUNBO0FBREE7QUF0QkE7QUEwQkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE1QkE7QUFDQTtBQThCQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/persistStore.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/purgeStoredState.js": -/*!************************************************************!*\ - !*** ../node_modules/redux-persist/es/purgeStoredState.js ***! - \************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return purgeStoredState; });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"../node_modules/redux-persist/es/constants.js\");\n\nfunction purgeStoredState(config) {\n var storage = config.storage;\n var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : _constants__WEBPACK_IMPORTED_MODULE_0__[\"KEY_PREFIX\"]) + config.key;\n return storage.removeItem(storageKey, warnIfRemoveError);\n}\n\nfunction warnIfRemoveError(err) {\n if (err && undefined !== 'production') {\n console.error('redux-persist/purgeStoredState: Error purging data stored state', err);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvcHVyZ2VTdG9yZWRTdGF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9wdXJnZVN0b3JlZFN0YXRlLmpzP2ZiZGYiXSwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IEtFWV9QUkVGSVggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHB1cmdlU3RvcmVkU3RhdGUoY29uZmlnKSB7XG4gIHZhciBzdG9yYWdlID0gY29uZmlnLnN0b3JhZ2U7XG4gIHZhciBzdG9yYWdlS2V5ID0gJycgKyAoY29uZmlnLmtleVByZWZpeCAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmtleVByZWZpeCA6IEtFWV9QUkVGSVgpICsgY29uZmlnLmtleTtcbiAgcmV0dXJuIHN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5LCB3YXJuSWZSZW1vdmVFcnJvcik7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlJlbW92ZUVycm9yKGVycikge1xuICBpZiAoZXJyICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKCdyZWR1eC1wZXJzaXN0L3B1cmdlU3RvcmVkU3RhdGU6IEVycm9yIHB1cmdpbmcgZGF0YSBzdG9yZWQgc3RhdGUnLCBlcnIpO1xuICB9XG59Il0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/purgeStoredState.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js": -/*!***************************************************************************!*\ - !*** ../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return autoMergeLevel1; });\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction autoMergeLevel1(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _extends({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (undefined !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n } // otherwise hard set the new value\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (undefined !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \\'' + Object.keys(inboundState).join(', ') + '\\'');\n return newState;\n}\n/*\n autoMergeLevel1: \n - merges 1 level of substate\n - skips substate if already modified\n*///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvc3RhdGVSZWNvbmNpbGVyL2F1dG9NZXJnZUxldmVsMS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9zdGF0ZVJlY29uY2lsZXIvYXV0b01lcmdlTGV2ZWwxLmpzP2QzYTMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvTWVyZ2VMZXZlbDEoaW5ib3VuZFN0YXRlLCBvcmlnaW5hbFN0YXRlLCByZWR1Y2VkU3RhdGUsIF9yZWYpIHtcbiAgdmFyIGRlYnVnID0gX3JlZi5kZWJ1ZztcblxuICB2YXIgbmV3U3RhdGUgPSBfZXh0ZW5kcyh7fSwgcmVkdWNlZFN0YXRlKTtcbiAgLy8gb25seSByZWh5ZHJhdGUgaWYgaW5ib3VuZFN0YXRlIGV4aXN0cyBhbmQgaXMgYW4gb2JqZWN0XG4gIGlmIChpbmJvdW5kU3RhdGUgJiYgKHR5cGVvZiBpbmJvdW5kU3RhdGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGluYm91bmRTdGF0ZSkpID09PSAnb2JqZWN0Jykge1xuICAgIE9iamVjdC5rZXlzKGluYm91bmRTdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvLyBpZ25vcmUgX3BlcnNpc3QgZGF0YVxuICAgICAgaWYgKGtleSA9PT0gJ19wZXJzaXN0JykgcmV0dXJuO1xuICAgICAgLy8gaWYgcmVkdWNlciBtb2RpZmllcyBzdWJzdGF0ZSwgc2tpcCBhdXRvIHJlaHlkcmF0aW9uXG4gICAgICBpZiAob3JpZ2luYWxTdGF0ZVtrZXldICE9PSByZWR1Y2VkU3RhdGVba2V5XSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3Qvc3RhdGVSZWNvbmNpbGVyOiBzdWIgc3RhdGUgZm9yIGtleSBgJXNgIG1vZGlmaWVkLCBza2lwcGluZy4nLCBrZXkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UgaGFyZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3U3RhdGVba2V5XSA9IGluYm91bmRTdGF0ZVtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZGVidWcgJiYgaW5ib3VuZFN0YXRlICYmICh0eXBlb2YgaW5ib3VuZFN0YXRlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpbmJvdW5kU3RhdGUpKSA9PT0gJ29iamVjdCcpIGNvbnNvbGUubG9nKCdyZWR1eC1wZXJzaXN0L3N0YXRlUmVjb25jaWxlcjogcmVoeWRyYXRlZCBrZXlzIFxcJycgKyBPYmplY3Qua2V5cyhpbmJvdW5kU3RhdGUpLmpvaW4oJywgJykgKyAnXFwnJyk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKlxuICBhdXRvTWVyZ2VMZXZlbDE6IFxuICAgIC0gbWVyZ2VzIDEgbGV2ZWwgb2Ygc3Vic3RhdGVcbiAgICAtIHNraXBzIHN1YnN0YXRlIGlmIGFscmVhZHkgbW9kaWZpZWRcbiovIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFDQTtBQU9BO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/es/stateReconciler/autoMergeLevel2.js": -/*!***************************************************************************!*\ - !*** ../node_modules/redux-persist/es/stateReconciler/autoMergeLevel2.js ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return autoMergeLevel2; });\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction autoMergeLevel2(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _extends({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (undefined !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n }\n\n if (isPlainEnoughObject(reducedState[key])) {\n // if object is plain enough shallow merge the new values (hence \"Level2\")\n newState[key] = _extends({}, newState[key], inboundState[key]);\n return;\n } // otherwise hard set\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (undefined !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \\'' + Object.keys(inboundState).join(', ') + '\\'');\n return newState;\n}\n/*\n autoMergeLevel2: \n - merges 2 level of substate\n - skips substate if already modified\n - this is essentially redux-perist v4 behavior\n*/\n\nfunction isPlainEnoughObject(o) {\n return o !== null && !Array.isArray(o) && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvZXMvc3RhdGVSZWNvbmNpbGVyL2F1dG9NZXJnZUxldmVsMi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgtcGVyc2lzdC9lcy9zdGF0ZVJlY29uY2lsZXIvYXV0b01lcmdlTGV2ZWwyLmpzPzY5ODIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvTWVyZ2VMZXZlbDIoaW5ib3VuZFN0YXRlLCBvcmlnaW5hbFN0YXRlLCByZWR1Y2VkU3RhdGUsIF9yZWYpIHtcbiAgdmFyIGRlYnVnID0gX3JlZi5kZWJ1ZztcblxuICB2YXIgbmV3U3RhdGUgPSBfZXh0ZW5kcyh7fSwgcmVkdWNlZFN0YXRlKTtcbiAgLy8gb25seSByZWh5ZHJhdGUgaWYgaW5ib3VuZFN0YXRlIGV4aXN0cyBhbmQgaXMgYW4gb2JqZWN0XG4gIGlmIChpbmJvdW5kU3RhdGUgJiYgKHR5cGVvZiBpbmJvdW5kU3RhdGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGluYm91bmRTdGF0ZSkpID09PSAnb2JqZWN0Jykge1xuICAgIE9iamVjdC5rZXlzKGluYm91bmRTdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvLyBpZ25vcmUgX3BlcnNpc3QgZGF0YVxuICAgICAgaWYgKGtleSA9PT0gJ19wZXJzaXN0JykgcmV0dXJuO1xuICAgICAgLy8gaWYgcmVkdWNlciBtb2RpZmllcyBzdWJzdGF0ZSwgc2tpcCBhdXRvIHJlaHlkcmF0aW9uXG4gICAgICBpZiAob3JpZ2luYWxTdGF0ZVtrZXldICE9PSByZWR1Y2VkU3RhdGVba2V5XSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3Qvc3RhdGVSZWNvbmNpbGVyOiBzdWIgc3RhdGUgZm9yIGtleSBgJXNgIG1vZGlmaWVkLCBza2lwcGluZy4nLCBrZXkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNQbGFpbkVub3VnaE9iamVjdChyZWR1Y2VkU3RhdGVba2V5XSkpIHtcbiAgICAgICAgLy8gaWYgb2JqZWN0IGlzIHBsYWluIGVub3VnaCBzaGFsbG93IG1lcmdlIHRoZSBuZXcgdmFsdWVzIChoZW5jZSBcIkxldmVsMlwiKVxuICAgICAgICBuZXdTdGF0ZVtrZXldID0gX2V4dGVuZHMoe30sIG5ld1N0YXRlW2tleV0sIGluYm91bmRTdGF0ZVtrZXldKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIGhhcmQgc2V0XG4gICAgICBuZXdTdGF0ZVtrZXldID0gaW5ib3VuZFN0YXRlW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkZWJ1ZyAmJiBpbmJvdW5kU3RhdGUgJiYgKHR5cGVvZiBpbmJvdW5kU3RhdGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGluYm91bmRTdGF0ZSkpID09PSAnb2JqZWN0JykgY29uc29sZS5sb2coJ3JlZHV4LXBlcnNpc3Qvc3RhdGVSZWNvbmNpbGVyOiByZWh5ZHJhdGVkIGtleXMgXFwnJyArIE9iamVjdC5rZXlzKGluYm91bmRTdGF0ZSkuam9pbignLCAnKSArICdcXCcnKTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qXG4gIGF1dG9NZXJnZUxldmVsMjogXG4gICAgLSBtZXJnZXMgMiBsZXZlbCBvZiBzdWJzdGF0ZVxuICAgIC0gc2tpcHMgc3Vic3RhdGUgaWYgYWxyZWFkeSBtb2RpZmllZFxuICAgIC0gdGhpcyBpcyBlc3NlbnRpYWxseSByZWR1eC1wZXJpc3QgdjQgYmVoYXZpb3JcbiovXG5cbmZ1bmN0aW9uIGlzUGxhaW5Fbm91Z2hPYmplY3Qobykge1xuICByZXR1cm4gbyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShvKSAmJiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCc7XG59Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFDQTtBQVlBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/es/stateReconciler/autoMergeLevel2.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-persist/lib/stateReconciler/autoMergeLevel2.js": -/*!****************************************************************************!*\ - !*** ../node_modules/redux-persist/lib/stateReconciler/autoMergeLevel2.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof2(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof2 = function _typeof2(obj) {\n return typeof obj;\n };\n } else {\n _typeof2 = function _typeof2(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof2(obj);\n}\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nexports[\"default\"] = autoMergeLevel2;\n\nfunction autoMergeLevel2(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _extends({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (undefined !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n }\n\n if (isPlainEnoughObject(reducedState[key])) {\n // if object is plain enough shallow merge the new values (hence \"Level2\")\n newState[key] = _extends({}, newState[key], inboundState[key]);\n return;\n } // otherwise hard set\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (undefined !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \\'' + Object.keys(inboundState).join(', ') + '\\'');\n return newState;\n}\n/*\n autoMergeLevel2: \n - merges 2 level of substate\n - skips substate if already modified\n - this is essentially redux-perist v4 behavior\n*/\n\n\nfunction isPlainEnoughObject(o) {\n return o !== null && !Array.isArray(o) && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvbGliL3N0YXRlUmVjb25jaWxlci9hdXRvTWVyZ2VMZXZlbDIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXBlcnNpc3QvbGliL3N0YXRlUmVjb25jaWxlci9hdXRvTWVyZ2VMZXZlbDIuanM/OWQ2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gYXV0b01lcmdlTGV2ZWwyO1xuZnVuY3Rpb24gYXV0b01lcmdlTGV2ZWwyKGluYm91bmRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSwgcmVkdWNlZFN0YXRlLCBfcmVmKSB7XG4gIHZhciBkZWJ1ZyA9IF9yZWYuZGVidWc7XG5cbiAgdmFyIG5ld1N0YXRlID0gX2V4dGVuZHMoe30sIHJlZHVjZWRTdGF0ZSk7XG4gIC8vIG9ubHkgcmVoeWRyYXRlIGlmIGluYm91bmRTdGF0ZSBleGlzdHMgYW5kIGlzIGFuIG9iamVjdFxuICBpZiAoaW5ib3VuZFN0YXRlICYmICh0eXBlb2YgaW5ib3VuZFN0YXRlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpbmJvdW5kU3RhdGUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3Qua2V5cyhpbmJvdW5kU3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLy8gaWdub3JlIF9wZXJzaXN0IGRhdGFcbiAgICAgIGlmIChrZXkgPT09ICdfcGVyc2lzdCcpIHJldHVybjtcbiAgICAgIC8vIGlmIHJlZHVjZXIgbW9kaWZpZXMgc3Vic3RhdGUsIHNraXAgYXV0byByZWh5ZHJhdGlvblxuICAgICAgaWYgKG9yaWdpbmFsU3RhdGVba2V5XSAhPT0gcmVkdWNlZFN0YXRlW2tleV0pIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZGVidWcpIGNvbnNvbGUubG9nKCdyZWR1eC1wZXJzaXN0L3N0YXRlUmVjb25jaWxlcjogc3ViIHN0YXRlIGZvciBrZXkgYCVzYCBtb2RpZmllZCwgc2tpcHBpbmcuJywga2V5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGxhaW5Fbm91Z2hPYmplY3QocmVkdWNlZFN0YXRlW2tleV0pKSB7XG4gICAgICAgIC8vIGlmIG9iamVjdCBpcyBwbGFpbiBlbm91Z2ggc2hhbGxvdyBtZXJnZSB0aGUgbmV3IHZhbHVlcyAoaGVuY2UgXCJMZXZlbDJcIilcbiAgICAgICAgbmV3U3RhdGVba2V5XSA9IF9leHRlbmRzKHt9LCBuZXdTdGF0ZVtrZXldLCBpbmJvdW5kU3RhdGVba2V5XSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIG90aGVyd2lzZSBoYXJkIHNldFxuICAgICAgbmV3U3RhdGVba2V5XSA9IGluYm91bmRTdGF0ZVtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZGVidWcgJiYgaW5ib3VuZFN0YXRlICYmICh0eXBlb2YgaW5ib3VuZFN0YXRlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpbmJvdW5kU3RhdGUpKSA9PT0gJ29iamVjdCcpIGNvbnNvbGUubG9nKCdyZWR1eC1wZXJzaXN0L3N0YXRlUmVjb25jaWxlcjogcmVoeWRyYXRlZCBrZXlzIFxcJycgKyBPYmplY3Qua2V5cyhpbmJvdW5kU3RhdGUpLmpvaW4oJywgJykgKyAnXFwnJyk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKlxuICBhdXRvTWVyZ2VMZXZlbDI6IFxuICAgIC0gbWVyZ2VzIDIgbGV2ZWwgb2Ygc3Vic3RhdGVcbiAgICAtIHNraXBzIHN1YnN0YXRlIGlmIGFscmVhZHkgbW9kaWZpZWRcbiAgICAtIHRoaXMgaXMgZXNzZW50aWFsbHkgcmVkdXgtcGVyaXN0IHY0IGJlaGF2aW9yXG4qL1xuXG5mdW5jdGlvbiBpc1BsYWluRW5vdWdoT2JqZWN0KG8pIHtcbiAgcmV0dXJuIG8gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkobykgJiYgKHR5cGVvZiBvID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvKSkgPT09ICdvYmplY3QnO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBWUE7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux-persist/lib/stateReconciler/autoMergeLevel2.js\n"); - -/***/ }), - -/***/ "../node_modules/redux-thunk/es/index.js": -/*!***********************************************!*\ - !*** ../node_modules/redux-thunk/es/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (typeof action === 'function') {\n return action(dispatch, getState, extraArgument);\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n/* harmony default export */ __webpack_exports__[\"default\"] = (thunk);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9lcy9pbmRleC5qcz84ODg2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7XG50aHVuay53aXRoRXh0cmFBcmd1bWVudCA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZTtcblxuZXhwb3J0IGRlZmF1bHQgdGh1bms7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQURBO0FBSEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux-thunk/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/applyMiddleware.js": -/*!***************************************************!*\ - !*** ../node_modules/redux/es/applyMiddleware.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return applyMiddleware; });\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./compose */ \"../node_modules/redux/es/compose.js\");\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = _compose__WEBPACK_IMPORTED_MODULE_0__[\"default\"].apply(undefined, chain)(store.dispatch);\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2FwcGx5TWlkZGxld2FyZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvYXBwbHlNaWRkbGV3YXJlLmpzPzBjNjkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RvcmUgZW5oYW5jZXIgdGhhdCBhcHBsaWVzIG1pZGRsZXdhcmUgdG8gdGhlIGRpc3BhdGNoIG1ldGhvZFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xuICogYXN5bmNocm9ub3VzIGFjdGlvbnMgaW4gYSBjb25jaXNlIG1hbm5lciwgb3IgbG9nZ2luZyBldmVyeSBhY3Rpb24gcGF5bG9hZC5cbiAqXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXG4gKlxuICogQmVjYXVzZSBtaWRkbGV3YXJlIGlzIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cywgdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0XG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXG4gKlxuICogTm90ZSB0aGF0IGVhY2ggbWlkZGxld2FyZSB3aWxsIGJlIGdpdmVuIHRoZSBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIGZ1bmN0aW9uc1xuICogYXMgbmFtZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1pZGRsZXdhcmVzIFRoZSBtaWRkbGV3YXJlIGNoYWluIHRvIGJlIGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbWlkZGxld2FyZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNyZWF0ZVN0b3JlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XG4gICAgICB2YXIgX2Rpc3BhdGNoID0gc3RvcmUuZGlzcGF0Y2g7XG4gICAgICB2YXIgY2hhaW4gPSBbXTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdG9yZSwge1xuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBREE7QUFoQkE7QUFEQTtBQXNCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/redux/es/applyMiddleware.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/bindActionCreators.js": -/*!******************************************************!*\ - !*** ../node_modules/redux/es/bindActionCreators.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return bindActionCreators; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (_typeof(actionCreators) !== 'object' || actionCreators === null) {\n throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : _typeof(actionCreators)) + '. ' + 'Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvYmluZEFjdGlvbkNyZWF0b3JzLmpzP2RmOWQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvbiBjcmVhdG9ycywgaW50byBhbiBvYmplY3Qgd2l0aCB0aGVcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcbiAqIG1heSBiZSBpbnZva2VkIGRpcmVjdGx5LiBUaGlzIGlzIGp1c3QgYSBjb252ZW5pZW5jZSBtZXRob2QsIGFzIHlvdSBjYW4gY2FsbFxuICogYHN0b3JlLmRpc3BhdGNoKE15QWN0aW9uQ3JlYXRvcnMuZG9Tb21ldGhpbmcoKSlgIHlvdXJzZWxmIGp1c3QgZmluZS5cbiAqXG4gKiBGb3IgY29udmVuaWVuY2UsIHlvdSBjYW4gYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCxcbiAqIGFuZCBnZXQgYSBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3JzKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCkge1xuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBpbnN0ZWFkIHJlY2VpdmVkICcgKyAoYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgYWN0aW9uQ3JlYXRvcnMpICsgJy4gJyArICdEaWQgeW91IHdyaXRlIFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cIiBpbnN0ZWFkIG9mIFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiPycpO1xuICB9XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XG4gIHZhciBib3VuZEFjdGlvbkNyZWF0b3JzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIHZhciBhY3Rpb25DcmVhdG9yID0gYWN0aW9uQ3JlYXRvcnNba2V5XTtcbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XG59Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux/es/bindActionCreators.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/combineReducers.js": -/*!***************************************************!*\ - !*** ../node_modules/redux/es/combineReducers.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return combineReducers; });\n/* harmony import */ var _createStore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createStore */ \"../node_modules/redux/es/createStore.js\");\n/* harmony import */ var lodash_es_isPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es/isPlainObject */ \"../node_modules/lodash-es/isPlainObject.js\");\n/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/warning */ \"../node_modules/redux/es/utils/warning.js\");\n\n\n\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === _createStore__WEBPACK_IMPORTED_MODULE_0__[\"ActionTypes\"].INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!Object(lodash_es_isPlainObject__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(inputState)) {\n return 'The ' + argumentName + ' has unexpected type of \"' + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + '\". Expected argument to be an object with the following ' + ('keys: \"' + reducerKeys.join('\", \"') + '\"');\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n\n if (unexpectedKeys.length > 0) {\n return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('\"' + unexpectedKeys.join('\", \"') + '\" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('\"' + reducerKeys.join('\", \"') + '\". Unexpected keys will be ignored.');\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: _createStore__WEBPACK_IMPORTED_MODULE_0__[\"ActionTypes\"].INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n\n if (typeof reducer(undefined, {\n type: type\n }) === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined when probed with a random type. ' + ('Don\\'t try to handle ' + _createStore__WEBPACK_IMPORTED_MODULE_0__[\"ActionTypes\"].INIT + ' or other actions in \"redux/*\" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (undefined !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n Object(_utils_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])('No reducer provided for key \"' + key + '\"');\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers);\n var unexpectedKeyCache = void 0;\n\n if (undefined !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError = void 0;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments[1];\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (undefined !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n Object(_utils_warning__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n return hasChanged ? nextState : state;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NvbWJpbmVSZWR1Y2Vycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvY29tYmluZVJlZHVjZXJzLmpzPzQ3ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uVHlwZXMgfSBmcm9tICcuL2NyZWF0ZVN0b3JlJztcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0JztcbmltcG9ydCB3YXJuaW5nIGZyb20gJy4vdXRpbHMvd2FybmluZyc7XG5cbmZ1bmN0aW9uIGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwgYWN0aW9uKSB7XG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1wiJyArIGFjdGlvblR5cGUudG9TdHJpbmcoKSArICdcIicgfHwgJ2FuIGFjdGlvbic7XG5cbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFwiJyArIGtleSArICdcIiByZXR1cm5lZCB1bmRlZmluZWQuICcgKyAnVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHByZXZpb3VzIHN0YXRlLiAnICsgJ0lmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5vIHZhbHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLic7XG59XG5cbmZ1bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0ZSwgcmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZXMuSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcblxuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcbiAgfVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dFN0YXRlKSkge1xuICAgIHJldHVybiAnVGhlICcgKyBhcmd1bWVudE5hbWUgKyAnIGhhcyB1bmV4cGVjdGVkIHR5cGUgb2YgXCInICsge30udG9TdHJpbmcuY2FsbChpbnB1dFN0YXRlKS5tYXRjaCgvXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgJyArICgna2V5czogXCInICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyAnXCInKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG5cbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xuICB9KTtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAnVW5leHBlY3RlZCAnICsgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDEgPyAna2V5cycgOiAna2V5JykgKyAnICcgKyAoJ1wiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1wiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXCInICsga2V5ICsgJ1wiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICcgKyAnSWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGUgcmVkdWNlciBpcyB1bmRlZmluZWQsIHlvdSBtdXN0ICcgKyAnZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSAnICsgJ25vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb25cXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xuICAgIH1cblxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xuICAgIGlmICh0eXBlb2YgcmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogdHlwZSB9KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFwndCB0cnkgdG8gaGFuZGxlICcgKyBBY3Rpb25UeXBlcy5JTklUICsgJyBvciBvdGhlciBhY3Rpb25zIGluIFwicmVkdXgvKlwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxuICogcmVkdWNlciBmdW5jdGlvbi4gSXQgd2lsbCBjYWxsIGV2ZXJ5IGNoaWxkIHJlZHVjZXIsIGFuZCBnYXRoZXIgdGhlaXIgcmVzdWx0c1xuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxuICogaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXMgcmVkdWNlcnNgIHN5bnRheC4gVGhlIHJlZHVjZXJzIG1heSBuZXZlciByZXR1cm5cbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxuICogdW5yZWNvZ25pemVkIGFjdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXG4gKiBwYXNzZWQgb2JqZWN0LCBhbmQgYnVpbGRzIGEgc3RhdGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBmaW5hbFJlZHVjZXJzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcmVkdWNlcktleXNbaV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3YXJuaW5nKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB2b2lkIDA7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cblxuICB2YXIgc2hhcGVBc3NlcnRpb25FcnJvciA9IHZvaWQgMDtcbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHNbMV07XG5cbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xuICAgICAgdGhyb3cgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuICAgICAgaWYgKHR5cGVvZiBuZXh0U3RhdGVGb3JLZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShfa2V5LCBhY3Rpb24pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE3QkE7QUErQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux/es/combineReducers.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/compose.js": -/*!*******************************************!*\ - !*** ../node_modules/redux/es/compose.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return compose; });\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NvbXBvc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NvbXBvc2UuanM/MDBmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcbiAqIHRoZSByZXN1bHRpbmcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiBvYnRhaW5lZCBieSBjb21wb3NpbmcgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uc1xuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux/es/compose.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/createStore.js": -/*!***********************************************!*\ - !*** ../node_modules/redux/es/createStore.js ***! - \***********************************************/ -/*! exports provided: ActionTypes, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionTypes\", function() { return ActionTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createStore; });\n/* harmony import */ var lodash_es_isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es/isPlainObject */ \"../node_modules/lodash-es/isPlainObject.js\");\n/* harmony import */ var symbol_observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! symbol-observable */ \"../node_modules/symbol-observable/es/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nvar ActionTypes = {\n INIT: '@@redux/INIT'\n /**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\n};\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!Object(lodash_es_isPlainObject__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({\n type: ActionTypes.INIT\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (_typeof(observer) !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[symbol_observable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[symbol_observable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]] = observable, _ref2;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NyZWF0ZVN0b3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jcmVhdGVTdG9yZS5qcz85Nzk2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0JztcbmltcG9ydCAkJG9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUnO1xuXG4vKipcbiAqIFRoZXNlIGFyZSBwcml2YXRlIGFjdGlvbiB0eXBlcyByZXNlcnZlZCBieSBSZWR1eC5cbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqIERvIG5vdCByZWZlcmVuY2UgdGhlc2UgYWN0aW9uIHR5cGVzIGRpcmVjdGx5IGluIHlvdXIgY29kZS5cbiAqL1xuZXhwb3J0IHZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gICAqIFRoZSBvbmx5IHdheSB0byBjaGFuZ2UgdGhlIGRhdGEgaW4gdGhlIHN0b3JlIGlzIHRvIGNhbGwgYGRpc3BhdGNoKClgIG9uIGl0LlxuICAgKlxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gICAqIHBhcnRzIG9mIHRoZSBzdGF0ZSB0cmVlIHJlc3BvbmQgdG8gYWN0aW9ucywgeW91IG1heSBjb21iaW5lIHNldmVyYWwgcmVkdWNlcnNcbiAgICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWR1Y2VyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIHRyZWUsIGdpdmVuXG4gICAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gW3ByZWxvYWRlZFN0YXRlXSBUaGUgaW5pdGlhbCBzdGF0ZS4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAgICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAgICogSWYgeW91IHVzZSBgY29tYmluZVJlZHVjZXJzYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXIgZnVuY3Rpb24sIHRoaXMgbXVzdCBiZVxuICAgKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZW5oYW5jZXJdIFRoZSBzdG9yZSBlbmhhbmNlci4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAgICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gICAqIGlzIGBhcHBseU1pZGRsZXdhcmUoKWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gICAqIGFuZCBzdWJzY3JpYmUgdG8gY2hhbmdlcy5cbiAgICovXG59O2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICB2YXIgX3JlZjI7XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZW5oYW5jZXIgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5oYW5jZXIoY3JlYXRlU3RvcmUpKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgdmFyIGN1cnJlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICB2YXIgaW5kZXggPSBuZXh0TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24uIEl0IGlzIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGEgc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXG4gICAqIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGdpdmVuIGBhY3Rpb25gLiBJdHMgcmV0dXJuIHZhbHVlIHdpbGxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxuICAgKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xuICAgKiB3cmFwIHlvdXIgc3RvcmUgY3JlYXRpbmcgZnVuY3Rpb24gaW50byB0aGUgY29ycmVzcG9uZGluZyBtaWRkbGV3YXJlLiBGb3JcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBpc1xuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxuICAgKiBzZXNzaW9ucywgb3IgdXNlIHRoZSB0aW1lIHRyYXZlbGxpbmcgYHJlZHV4LWRldnRvb2xzYC4gQW4gYWN0aW9uIG11c3QgaGF2ZVxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCwgaWYgeW91IHVzZSBhIGN1c3RvbSBtaWRkbGV3YXJlLCBpdCBtYXkgd3JhcCBgZGlzcGF0Y2goKWAgdG9cbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxuICAgKi9cbiAgZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuICcgKyAnVXNlIGN1c3RvbSBtaWRkbGV3YXJlIGZvciBhc3luYyBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcInR5cGVcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgcmV0dXJuIF9yZWYgPSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xuICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAgICAgICByZXR1cm4geyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmUgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9XG5cbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFwiSU5JVFwiIGFjdGlvbiBpcyBkaXNwYXRjaGVkIHNvIHRoYXQgZXZlcnlcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXG4gIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcblxuICByZXR1cm4gX3JlZjIgPSB7XG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcbiAgICByZXBsYWNlUmVkdWNlcjogcmVwbGFjZVJlZHVjZXJcbiAgfSwgX3JlZjJbJCRvYnNlcnZhYmxlXSA9IG9ic2VydmFibGUsIF9yZWYyO1xufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUhBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBdkJBO0FBeUJBO0FBekJBO0FBMUtBO0FBd01BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux/es/createStore.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/index.js": -/*!*****************************************!*\ - !*** ../node_modules/redux/es/index.js ***! - \*****************************************/ -/*! exports provided: createStore, combineReducers, bindActionCreators, applyMiddleware, compose */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _createStore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createStore */ \"../node_modules/redux/es/createStore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createStore\", function() { return _createStore__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _combineReducers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./combineReducers */ \"../node_modules/redux/es/combineReducers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"combineReducers\", function() { return _combineReducers__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _bindActionCreators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bindActionCreators */ \"../node_modules/redux/es/bindActionCreators.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bindActionCreators\", function() { return _bindActionCreators__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _applyMiddleware__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./applyMiddleware */ \"../node_modules/redux/es/applyMiddleware.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"applyMiddleware\", function() { return _applyMiddleware__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./compose */ \"../node_modules/redux/es/compose.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"compose\", function() { return _compose__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/warning */ \"../node_modules/redux/es/utils/warning.js\");\n\n\n\n\n\n\n/*\n* This is a dummy function to check if the function name has been altered by minification.\n* If the function has been minified and NODE_ENV !== 'production', warn the user.\n*/\n\nfunction isCrushed() {}\n\nif (undefined !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n Object(_utils_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('You are currently using minified code outside of NODE_ENV === \\'production\\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcz9mOWU5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVTdG9yZSBmcm9tICcuL2NyZWF0ZVN0b3JlJztcbmltcG9ydCBjb21iaW5lUmVkdWNlcnMgZnJvbSAnLi9jb21iaW5lUmVkdWNlcnMnO1xuaW1wb3J0IGJpbmRBY3Rpb25DcmVhdG9ycyBmcm9tICcuL2JpbmRBY3Rpb25DcmVhdG9ycyc7XG5pbXBvcnQgYXBwbHlNaWRkbGV3YXJlIGZyb20gJy4vYXBwbHlNaWRkbGV3YXJlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuL3V0aWxzL3dhcm5pbmcnO1xuXG4vKlxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXG4qIElmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBtaW5pZmllZCBhbmQgTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJywgd2FybiB0aGUgdXNlci5cbiovXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgaXNDcnVzaGVkLm5hbWUgPT09ICdzdHJpbmcnICYmIGlzQ3J1c2hlZC5uYW1lICE9PSAnaXNDcnVzaGVkJykge1xuICB3YXJuaW5nKCdZb3UgYXJlIGN1cnJlbnRseSB1c2luZyBtaW5pZmllZCBjb2RlIG91dHNpZGUgb2YgTk9ERV9FTlYgPT09IFxcJ3Byb2R1Y3Rpb25cXCcuICcgKyAnVGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgcnVubmluZyBhIHNsb3dlciBkZXZlbG9wbWVudCBidWlsZCBvZiBSZWR1eC4gJyArICdZb3UgY2FuIHVzZSBsb29zZS1lbnZpZnkgKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJ0b3NoL2xvb3NlLWVudmlmeSkgZm9yIGJyb3dzZXJpZnkgJyArICdvciBEZWZpbmVQbHVnaW4gZm9yIHdlYnBhY2sgKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzAwMzAwMzEpICcgKyAndG8gZW5zdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGNvZGUgZm9yIHlvdXIgcHJvZHVjdGlvbiBidWlsZC4nKTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlU3RvcmUsIGNvbWJpbmVSZWR1Y2VycywgYmluZEFjdGlvbkNyZWF0b3JzLCBhcHBseU1pZGRsZXdhcmUsIGNvbXBvc2UgfTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/redux/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/redux/es/utils/warning.js": -/*!*************************************************!*\ - !*** ../node_modules/redux/es/utils/warning.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return warning; });\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL3V0aWxzL3dhcm5pbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL3V0aWxzL3dhcm5pbmcuanM/MGM2OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXG4gICAgLy8gXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1wiIGluIHlvdXIgY29uc29sZSxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbiAgfSBjYXRjaCAoZSkge31cbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/redux/es/utils/warning.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-attr/dist/dom-event-handler.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-attr/dist/dom-event-handler.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = ['onabort', 'onautocomplete', 'onautocompleteerror', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', 'oncontextmenu', 'oncuechange', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragexit', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onfocus', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onpause', 'onplay', 'onplaying', 'onprogress', 'onratechange', 'onreset', 'onresize', 'onscroll', 'onseeked', 'onseeking', 'onselect', 'onshow', 'onsort', 'onstalled', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'onvolumechange', 'onwaiting'];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1hdHRyL2Rpc3QvZG9tLWV2ZW50LWhhbmRsZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1hdHRyL2Rpc3QvZG9tLWV2ZW50LWhhbmRsZXIuanM/MWRjMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gWydvbmFib3J0JywgJ29uYXV0b2NvbXBsZXRlJywgJ29uYXV0b2NvbXBsZXRlZXJyb3InLCAnb25ibHVyJywgJ29uY2FuY2VsJywgJ29uY2FucGxheScsICdvbmNhbnBsYXl0aHJvdWdoJywgJ29uY2hhbmdlJywgJ29uY2xpY2snLCAnb25jbG9zZScsICdvbmNvbnRleHRtZW51JywgJ29uY3VlY2hhbmdlJywgJ29uZGJsY2xpY2snLCAnb25kcmFnJywgJ29uZHJhZ2VuZCcsICdvbmRyYWdlbnRlcicsICdvbmRyYWdleGl0JywgJ29uZHJhZ2xlYXZlJywgJ29uZHJhZ292ZXInLCAnb25kcmFnc3RhcnQnLCAnb25kcm9wJywgJ29uZHVyYXRpb25jaGFuZ2UnLCAnb25lbXB0aWVkJywgJ29uZW5kZWQnLCAnb25lcnJvcicsICdvbmZvY3VzJywgJ29uaW5wdXQnLCAnb25pbnZhbGlkJywgJ29ua2V5ZG93bicsICdvbmtleXByZXNzJywgJ29ua2V5dXAnLCAnb25sb2FkJywgJ29ubG9hZGVkZGF0YScsICdvbmxvYWRlZG1ldGFkYXRhJywgJ29ubG9hZHN0YXJ0JywgJ29ubW91c2Vkb3duJywgJ29ubW91c2VlbnRlcicsICdvbm1vdXNlbGVhdmUnLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAnb25tb3VzZXdoZWVsJywgJ29ucGF1c2UnLCAnb25wbGF5JywgJ29ucGxheWluZycsICdvbnByb2dyZXNzJywgJ29ucmF0ZWNoYW5nZScsICdvbnJlc2V0JywgJ29ucmVzaXplJywgJ29uc2Nyb2xsJywgJ29uc2Vla2VkJywgJ29uc2Vla2luZycsICdvbnNlbGVjdCcsICdvbnNob3cnLCAnb25zb3J0JywgJ29uc3RhbGxlZCcsICdvbnN1Ym1pdCcsICdvbnN1c3BlbmQnLCAnb250aW1ldXBkYXRlJywgJ29udG9nZ2xlJywgJ29udm9sdW1lY2hhbmdlJywgJ29ud2FpdGluZyddOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-attr/dist/dom-event-handler.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-attr/dist/index.js": -/*!*************************************************!*\ - !*** ../node_modules/remark-attr/dist/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar parseAttr = __webpack_require__(/*! md-attr-parser */ \"../node_modules/md-attr-parser/dist/index.js\");\n\nvar htmlElemAttr = __webpack_require__(/*! html-element-attributes */ \"../node_modules/html-element-attributes/index.json\");\n\nvar supportedElements = ['link', 'atxHeading', 'strong', 'emphasis', 'deletion', 'code', 'setextHeading', 'fencedCode'];\nvar blockElements = ['atxHeading', 'setextHeading'];\nvar particularElements = ['fencedCode'];\nvar particularTokenize = {};\n\nvar DOMEventHandler = __webpack_require__(/*! ./dom-event-handler.js */ \"../node_modules/remark-attr/dist/dom-event-handler.js\");\n/* Table convertion between type and HTML tagName */\n\n\nvar convTypeTag = {\n image: 'img',\n link: 'a',\n heading: 'h1',\n strong: 'strong',\n emphasis: 'em',\n \"delete\": 's',\n inlineCode: 'code',\n code: 'code',\n '*': '*'\n};\n/* This function is a generic function that transform\n * the tokenize function a node type to a version that understand\n * attributes.\n *\n * The tokenizer function of strong will tokenize **STRONG STRING**\n * this function extand it to tokenize **STRONG STRING**{list=of attributes}\n *\n * - The prefix is '\\n' for block node and '' for inline one\n *\n * The syntax is for atxHeading ::\n * ## HEAD TITLE\n * {attributes}\n *\n * Attributes are on the next line.\n *\n * - The old parser is the old function user to tokenize\n * - The config is the configuration of this plugin\n *\n */\n\nfunction tokenizeGenerator(prefix, oldParser, config) {\n function token(eat, value, silent) {\n // This we call the old tokenize\n var self = this;\n var eaten = oldParser.call(self, eat, value, silent);\n var index = 0;\n var parsedAttr;\n var length = value.length;\n\n if (!eaten || !eaten.position) {\n return undefined;\n }\n\n var type = convTypeTag[eaten.type];\n index = eaten.position.end.offset - eaten.position.start.offset; // Then we check for attributes\n\n if (index + prefix.length < length && value.charAt(index + prefix.length) === '{') {\n // If any, parse it\n parsedAttr = parseAttr(value, index + prefix.length, config.mdAttrConfig);\n } // If parsed configure the node\n\n\n if (parsedAttr) {\n if (config.scope && config.scope !== 'none') {\n var filtredProp = filterAttributes(parsedAttr.prop, config, type);\n\n if (filtredProp !== {}) {\n if (eaten.data) {\n eaten.data.hProperties = filtredProp;\n } else {\n eaten.data = {\n hProperties: filtredProp\n };\n }\n }\n }\n\n eaten = eat(prefix + parsedAttr.eaten)(eaten);\n }\n\n return eaten;\n } // Return the new tokenizer function\n\n\n return token;\n} // A generic function to parse attributes\n\n\nfunction filterAttributes(prop, config, type) {\n var scope = config.scope;\n var extend = config.extend;\n var allowDangerousDOMEventHandlers = config.allowDangerousDOMEventHandlers;\n var specific = htmlElemAttr;\n\n var extendTag = function (extend) {\n var t = {};\n Object.getOwnPropertyNames(extend).forEach(function (p) {\n t[convTypeTag[p]] = extend[p];\n });\n return t;\n }(extend); // Delete empty key/class/id attributes\n\n\n Object.getOwnPropertyNames(prop).forEach(function (p) {\n if (p !== 'key' && p !== 'class' && p !== 'id') {\n prop[p] = prop[p] || '';\n }\n });\n\n var isDangerous = function isDangerous(p) {\n return DOMEventHandler.indexOf(p) >= 0;\n };\n\n var isSpecific = function isSpecific(p) {\n return type in specific && specific[type].indexOf(p) >= 0;\n };\n\n var isGlobal = function isGlobal(p) {\n return htmlElemAttr['*'].indexOf(p) >= 0 || p.match(/^aria-[a-z]{3,24}$/);\n };\n\n var inScope = function inScope(_) {\n return false;\n }; // Function used to `or combine` two other function.\n\n\n var orFunc = function orFunc(fun, fun2) {\n return function (x) {\n return fun(x) || fun2(x);\n };\n }; // Respect the scope configuration\n\n\n switch (scope) {\n case 'none':\n // Plugin is disabled\n break;\n\n case 'permissive':\n case 'every':\n if (allowDangerousDOMEventHandlers) {\n inScope = function inScope(_) {\n return true;\n };\n } else {\n inScope = function inScope(x) {\n return !isDangerous(x);\n };\n }\n\n break;\n\n case 'extended':\n default:\n inScope = function inScope(p) {\n return extendTag && type in extendTag && extendTag[type].indexOf(p) >= 0;\n };\n\n inScope = orFunc(inScope, function (p) {\n return '*' in extendTag && extendTag['*'].indexOf(p) >= 0;\n });\n // Or if it in the specific scope, fallthrough\n\n case 'specific':\n inScope = orFunc(inScope, isSpecific);\n // Or if it in the global scope fallthrough\n\n case 'global':\n inScope = orFunc(inScope, isGlobal);\n\n if (allowDangerousDOMEventHandlers) {\n // If allowed add dangerous attributes to global scope\n inScope = orFunc(inScope, isDangerous);\n }\n\n } // If an attributes isn't in the scope, delete it\n\n\n Object.getOwnPropertyNames(prop).forEach(function (p) {\n if (!inScope(p)) {\n delete prop[p];\n }\n });\n return prop;\n}\n/* This is a special modification of the function tokenizeGenerator\n * to parse the fencedCode info string and the fallback\n * customAttr parser\n *\n * It's only temporary\n */\n\n\nfunction tokenizeFencedCode(oldParser, config) {\n var prefix = '\\n';\n\n function token(eat, value, silent) {\n // This we call the old tokenize\n var self = this;\n var eaten = oldParser.call(self, eat, value, silent);\n var parsedAttr;\n var parsedByCustomAttr = false;\n\n if (!eaten || !eaten.position) {\n return undefined;\n }\n\n var type = convTypeTag[eaten.type]; // First, parse the info string\n // which is the 'lang' attributes of 'eaten'.\n\n if (eaten.lang) {\n // Then the meta\n if (eaten.meta) {\n parsedAttr = parseAttr(eaten.meta);\n } else {\n // If it's an old version, we can still find from the attributes\n // from 'value' ¯\\_(ツ)_/¯\n // Bad hack, will be deleted soon\n parsedAttr = parseAttr(value, value.indexOf(' '));\n }\n } // If parsed configure the node\n\n\n if (parsedAttr) {\n if (config.scope && config.scope !== 'none') {\n var filtredProp = filterAttributes(parsedAttr.prop, config, type);\n\n if (filtredProp !== {}) {\n if (eaten.data) {\n eaten.data.hProperties = _objectSpread({}, eaten.data.hProperties, {}, filtredProp);\n } else {\n eaten.data = {\n hProperties: filtredProp\n };\n }\n }\n }\n\n if (parsedByCustomAttr) {\n eaten = eat(prefix + parsedAttr.eaten)(eaten);\n }\n }\n\n return eaten;\n } // Return the new tokenizer function\n\n\n return token;\n}\n\nparticularTokenize.fencedCode = tokenizeFencedCode;\nremarkAttr.SUPPORTED_ELEMENTS = supportedElements;\nmodule.exports = remarkAttr;\n/* Function that is exported */\n\nfunction remarkAttr(userConfig) {\n var parser = this.Parser;\n var defaultConfig = {\n allowDangerousDOMEventHandlers: false,\n elements: supportedElements,\n extend: {},\n scope: 'extended',\n mdAttrConfig: undefined\n };\n\n var config = _objectSpread({}, defaultConfig, {}, userConfig);\n\n if (!isRemarkParser(parser)) {\n throw new Error('Missing parser to attach `remark-attr` [link] (to)');\n }\n\n var tokenizers = parser.prototype.inlineTokenizers;\n var tokenizersBlock = parser.prototype.blockTokenizers; // For each elements, replace the old tokenizer by the new one\n\n config.elements.forEach(function (elem) {\n if (supportedElements.indexOf(elem) >= 0) {\n if (blockElements.indexOf(elem) >= 0) {\n var oldElem = tokenizersBlock[elem];\n tokenizersBlock[elem] = tokenizeGenerator('\\n', oldElem, config);\n } else if (particularElements.indexOf(elem) >= 0) {\n var _oldElem = tokenizersBlock[elem];\n tokenizersBlock[elem] = particularTokenize[elem](_oldElem, config);\n } else {\n var _oldElem2 = tokenizers[elem];\n var elemTokenize = tokenizeGenerator('', _oldElem2, config);\n elemTokenize.locator = tokenizers[elem].locator;\n tokenizers[elem] = elemTokenize;\n }\n }\n });\n}\n\nfunction isRemarkParser(parser) {\n return Boolean(parser && parser.prototype && parser.prototype.inlineTokenizers && parser.prototype.inlineTokenizers.link && parser.prototype.inlineTokenizers.link.locator);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1hdHRyL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1hdHRyL2Rpc3QvaW5kZXguanM/NTM1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhzb3VyY2UsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBwYXJzZUF0dHIgPSByZXF1aXJlKCdtZC1hdHRyLXBhcnNlcicpO1xuXG52YXIgaHRtbEVsZW1BdHRyID0gcmVxdWlyZSgnaHRtbC1lbGVtZW50LWF0dHJpYnV0ZXMnKTtcblxudmFyIHN1cHBvcnRlZEVsZW1lbnRzID0gWydsaW5rJywgJ2F0eEhlYWRpbmcnLCAnc3Ryb25nJywgJ2VtcGhhc2lzJywgJ2RlbGV0aW9uJywgJ2NvZGUnLCAnc2V0ZXh0SGVhZGluZycsICdmZW5jZWRDb2RlJ107XG52YXIgYmxvY2tFbGVtZW50cyA9IFsnYXR4SGVhZGluZycsICdzZXRleHRIZWFkaW5nJ107XG52YXIgcGFydGljdWxhckVsZW1lbnRzID0gWydmZW5jZWRDb2RlJ107XG52YXIgcGFydGljdWxhclRva2VuaXplID0ge307XG5cbnZhciBET01FdmVudEhhbmRsZXIgPSByZXF1aXJlKCcuL2RvbS1ldmVudC1oYW5kbGVyLmpzJyk7XG4vKiBUYWJsZSBjb252ZXJ0aW9uIGJldHdlZW4gdHlwZSBhbmQgSFRNTCB0YWdOYW1lICovXG5cblxudmFyIGNvbnZUeXBlVGFnID0ge1xuICBpbWFnZTogJ2ltZycsXG4gIGxpbms6ICdhJyxcbiAgaGVhZGluZzogJ2gxJyxcbiAgc3Ryb25nOiAnc3Ryb25nJyxcbiAgZW1waGFzaXM6ICdlbScsXG4gIFwiZGVsZXRlXCI6ICdzJyxcbiAgaW5saW5lQ29kZTogJ2NvZGUnLFxuICBjb2RlOiAnY29kZScsXG4gICcqJzogJyonXG59O1xuLyogVGhpcyBmdW5jdGlvbiBpcyBhIGdlbmVyaWMgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1cbiAqIHRoZSB0b2tlbml6ZSBmdW5jdGlvbiBhIG5vZGUgdHlwZSB0byBhIHZlcnNpb24gdGhhdCB1bmRlcnN0YW5kXG4gKiBhdHRyaWJ1dGVzLlxuICpcbiAqIFRoZSB0b2tlbml6ZXIgZnVuY3Rpb24gb2Ygc3Ryb25nIHdpbGwgdG9rZW5pemUgKipTVFJPTkcgU1RSSU5HKipcbiAqIHRoaXMgZnVuY3Rpb24gZXh0YW5kIGl0IHRvIHRva2VuaXplICoqU1RST05HIFNUUklORyoqe2xpc3Q9b2YgYXR0cmlidXRlc31cbiAqXG4gKiAtIFRoZSBwcmVmaXggaXMgJ1xcbicgZm9yIGJsb2NrIG5vZGUgYW5kICcnIGZvciBpbmxpbmUgb25lXG4gKlxuICogVGhlIHN5bnRheCBpcyBmb3IgYXR4SGVhZGluZyA6OlxuICogIyMgSEVBRCBUSVRMRVxuICoge2F0dHJpYnV0ZXN9XG4gKlxuICogQXR0cmlidXRlcyBhcmUgb24gdGhlIG5leHQgbGluZS5cbiAqXG4gKiAtIFRoZSBvbGQgcGFyc2VyIGlzIHRoZSBvbGQgZnVuY3Rpb24gdXNlciB0byB0b2tlbml6ZVxuICogLSBUaGUgY29uZmlnIGlzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgcGx1Z2luXG4gKlxuICovXG5cbmZ1bmN0aW9uIHRva2VuaXplR2VuZXJhdG9yKHByZWZpeCwgb2xkUGFyc2VyLCBjb25maWcpIHtcbiAgZnVuY3Rpb24gdG9rZW4oZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gICAgLy8gVGhpcyB3ZSBjYWxsIHRoZSBvbGQgdG9rZW5pemVcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGVhdGVuID0gb2xkUGFyc2VyLmNhbGwoc2VsZiwgZWF0LCB2YWx1ZSwgc2lsZW50KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBwYXJzZWRBdHRyO1xuICAgIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG5cbiAgICBpZiAoIWVhdGVuIHx8ICFlYXRlbi5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IGNvbnZUeXBlVGFnW2VhdGVuLnR5cGVdO1xuICAgIGluZGV4ID0gZWF0ZW4ucG9zaXRpb24uZW5kLm9mZnNldCAtIGVhdGVuLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDsgLy8gVGhlbiB3ZSBjaGVjayBmb3IgYXR0cmlidXRlc1xuXG4gICAgaWYgKGluZGV4ICsgcHJlZml4Lmxlbmd0aCA8IGxlbmd0aCAmJiB2YWx1ZS5jaGFyQXQoaW5kZXggKyBwcmVmaXgubGVuZ3RoKSA9PT0gJ3snKSB7XG4gICAgICAvLyBJZiBhbnksIHBhcnNlIGl0XG4gICAgICBwYXJzZWRBdHRyID0gcGFyc2VBdHRyKHZhbHVlLCBpbmRleCArIHByZWZpeC5sZW5ndGgsIGNvbmZpZy5tZEF0dHJDb25maWcpO1xuICAgIH0gLy8gSWYgcGFyc2VkIGNvbmZpZ3VyZSB0aGUgbm9kZVxuXG5cbiAgICBpZiAocGFyc2VkQXR0cikge1xuICAgICAgaWYgKGNvbmZpZy5zY29wZSAmJiBjb25maWcuc2NvcGUgIT09ICdub25lJykge1xuICAgICAgICB2YXIgZmlsdHJlZFByb3AgPSBmaWx0ZXJBdHRyaWJ1dGVzKHBhcnNlZEF0dHIucHJvcCwgY29uZmlnLCB0eXBlKTtcblxuICAgICAgICBpZiAoZmlsdHJlZFByb3AgIT09IHt9KSB7XG4gICAgICAgICAgaWYgKGVhdGVuLmRhdGEpIHtcbiAgICAgICAgICAgIGVhdGVuLmRhdGEuaFByb3BlcnRpZXMgPSBmaWx0cmVkUHJvcDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWF0ZW4uZGF0YSA9IHtcbiAgICAgICAgICAgICAgaFByb3BlcnRpZXM6IGZpbHRyZWRQcm9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlYXRlbiA9IGVhdChwcmVmaXggKyBwYXJzZWRBdHRyLmVhdGVuKShlYXRlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVhdGVuO1xuICB9IC8vIFJldHVybiB0aGUgbmV3IHRva2VuaXplciBmdW5jdGlvblxuXG5cbiAgcmV0dXJuIHRva2VuO1xufSAvLyBBIGdlbmVyaWMgZnVuY3Rpb24gdG8gcGFyc2UgYXR0cmlidXRlc1xuXG5cbmZ1bmN0aW9uIGZpbHRlckF0dHJpYnV0ZXMocHJvcCwgY29uZmlnLCB0eXBlKSB7XG4gIHZhciBzY29wZSA9IGNvbmZpZy5zY29wZTtcbiAgdmFyIGV4dGVuZCA9IGNvbmZpZy5leHRlbmQ7XG4gIHZhciBhbGxvd0Rhbmdlcm91c0RPTUV2ZW50SGFuZGxlcnMgPSBjb25maWcuYWxsb3dEYW5nZXJvdXNET01FdmVudEhhbmRsZXJzO1xuICB2YXIgc3BlY2lmaWMgPSBodG1sRWxlbUF0dHI7XG5cbiAgdmFyIGV4dGVuZFRhZyA9IGZ1bmN0aW9uIChleHRlbmQpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4dGVuZCkuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgdFtjb252VHlwZVRhZ1twXV0gPSBleHRlbmRbcF07XG4gICAgfSk7XG4gICAgcmV0dXJuIHQ7XG4gIH0oZXh0ZW5kKTsgLy8gRGVsZXRlIGVtcHR5IGtleS9jbGFzcy9pZCBhdHRyaWJ1dGVzXG5cblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKHAgIT09ICdrZXknICYmIHAgIT09ICdjbGFzcycgJiYgcCAhPT0gJ2lkJykge1xuICAgICAgcHJvcFtwXSA9IHByb3BbcF0gfHwgJyc7XG4gICAgfVxuICB9KTtcblxuICB2YXIgaXNEYW5nZXJvdXMgPSBmdW5jdGlvbiBpc0Rhbmdlcm91cyhwKSB7XG4gICAgcmV0dXJuIERPTUV2ZW50SGFuZGxlci5pbmRleE9mKHApID49IDA7XG4gIH07XG5cbiAgdmFyIGlzU3BlY2lmaWMgPSBmdW5jdGlvbiBpc1NwZWNpZmljKHApIHtcbiAgICByZXR1cm4gdHlwZSBpbiBzcGVjaWZpYyAmJiBzcGVjaWZpY1t0eXBlXS5pbmRleE9mKHApID49IDA7XG4gIH07XG5cbiAgdmFyIGlzR2xvYmFsID0gZnVuY3Rpb24gaXNHbG9iYWwocCkge1xuICAgIHJldHVybiBodG1sRWxlbUF0dHJbJyonXS5pbmRleE9mKHApID49IDAgfHwgcC5tYXRjaCgvXmFyaWEtW2Etel17MywyNH0kLyk7XG4gIH07XG5cbiAgdmFyIGluU2NvcGUgPSBmdW5jdGlvbiBpblNjb3BlKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07IC8vIEZ1bmN0aW9uIHVzZWQgdG8gYG9yIGNvbWJpbmVgIHR3byBvdGhlciBmdW5jdGlvbi5cblxuXG4gIHZhciBvckZ1bmMgPSBmdW5jdGlvbiBvckZ1bmMoZnVuLCBmdW4yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZnVuKHgpIHx8IGZ1bjIoeCk7XG4gICAgfTtcbiAgfTsgLy8gUmVzcGVjdCB0aGUgc2NvcGUgY29uZmlndXJhdGlvblxuXG5cbiAgc3dpdGNoIChzY29wZSkge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgLy8gUGx1Z2luIGlzIGRpc2FibGVkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Blcm1pc3NpdmUnOlxuICAgIGNhc2UgJ2V2ZXJ5JzpcbiAgICAgIGlmIChhbGxvd0Rhbmdlcm91c0RPTUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgaW5TY29wZSA9IGZ1bmN0aW9uIGluU2NvcGUoXykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5TY29wZSA9IGZ1bmN0aW9uIGluU2NvcGUoeCkge1xuICAgICAgICAgIHJldHVybiAhaXNEYW5nZXJvdXMoeCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZXh0ZW5kZWQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpblNjb3BlID0gZnVuY3Rpb24gaW5TY29wZShwKSB7XG4gICAgICAgIHJldHVybiBleHRlbmRUYWcgJiYgdHlwZSBpbiBleHRlbmRUYWcgJiYgZXh0ZW5kVGFnW3R5cGVdLmluZGV4T2YocCkgPj0gMDtcbiAgICAgIH07XG5cbiAgICAgIGluU2NvcGUgPSBvckZ1bmMoaW5TY29wZSwgZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuICcqJyBpbiBleHRlbmRUYWcgJiYgZXh0ZW5kVGFnWycqJ10uaW5kZXhPZihwKSA+PSAwO1xuICAgICAgfSk7XG4gICAgLy8gT3IgaWYgaXQgaW4gdGhlIHNwZWNpZmljIHNjb3BlLCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSAnc3BlY2lmaWMnOlxuICAgICAgaW5TY29wZSA9IG9yRnVuYyhpblNjb3BlLCBpc1NwZWNpZmljKTtcbiAgICAvLyBPciBpZiBpdCBpbiB0aGUgZ2xvYmFsIHNjb3BlIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlICdnbG9iYWwnOlxuICAgICAgaW5TY29wZSA9IG9yRnVuYyhpblNjb3BlLCBpc0dsb2JhbCk7XG5cbiAgICAgIGlmIChhbGxvd0Rhbmdlcm91c0RPTUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgLy8gSWYgYWxsb3dlZCBhZGQgZGFuZ2Vyb3VzIGF0dHJpYnV0ZXMgdG8gZ2xvYmFsIHNjb3BlXG4gICAgICAgIGluU2NvcGUgPSBvckZ1bmMoaW5TY29wZSwgaXNEYW5nZXJvdXMpO1xuICAgICAgfVxuXG4gIH0gLy8gSWYgYW4gYXR0cmlidXRlcyBpc24ndCBpbiB0aGUgc2NvcGUsIGRlbGV0ZSBpdFxuXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcCkuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgIGlmICghaW5TY29wZShwKSkge1xuICAgICAgZGVsZXRlIHByb3BbcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3A7XG59XG4vKiBUaGlzIGlzIGEgc3BlY2lhbCBtb2RpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIHRva2VuaXplR2VuZXJhdG9yXG4gKiB0byBwYXJzZSB0aGUgZmVuY2VkQ29kZSBpbmZvIHN0cmluZyBhbmQgdGhlIGZhbGxiYWNrXG4gKiBjdXN0b21BdHRyIHBhcnNlclxuICpcbiAqIEl0J3Mgb25seSB0ZW1wb3JhcnlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRva2VuaXplRmVuY2VkQ29kZShvbGRQYXJzZXIsIGNvbmZpZykge1xuICB2YXIgcHJlZml4ID0gJ1xcbic7XG5cbiAgZnVuY3Rpb24gdG9rZW4oZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gICAgLy8gVGhpcyB3ZSBjYWxsIHRoZSBvbGQgdG9rZW5pemVcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGVhdGVuID0gb2xkUGFyc2VyLmNhbGwoc2VsZiwgZWF0LCB2YWx1ZSwgc2lsZW50KTtcbiAgICB2YXIgcGFyc2VkQXR0cjtcbiAgICB2YXIgcGFyc2VkQnlDdXN0b21BdHRyID0gZmFsc2U7XG5cbiAgICBpZiAoIWVhdGVuIHx8ICFlYXRlbi5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IGNvbnZUeXBlVGFnW2VhdGVuLnR5cGVdOyAvLyBGaXJzdCwgcGFyc2UgdGhlIGluZm8gc3RyaW5nXG4gICAgLy8gd2hpY2ggaXMgdGhlICdsYW5nJyBhdHRyaWJ1dGVzIG9mICdlYXRlbicuXG5cbiAgICBpZiAoZWF0ZW4ubGFuZykge1xuICAgICAgLy8gVGhlbiB0aGUgbWV0YVxuICAgICAgaWYgKGVhdGVuLm1ldGEpIHtcbiAgICAgICAgcGFyc2VkQXR0ciA9IHBhcnNlQXR0cihlYXRlbi5tZXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2xkIHZlcnNpb24sIHdlIGNhbiBzdGlsbCBmaW5kIGZyb20gdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgLy8gZnJvbSAndmFsdWUnIMKvXFxfKOODhClfL8KvXG4gICAgICAgIC8vIEJhZCBoYWNrLCB3aWxsIGJlIGRlbGV0ZWQgc29vblxuICAgICAgICBwYXJzZWRBdHRyID0gcGFyc2VBdHRyKHZhbHVlLCB2YWx1ZS5pbmRleE9mKCcgJykpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgcGFyc2VkIGNvbmZpZ3VyZSB0aGUgbm9kZVxuXG5cbiAgICBpZiAocGFyc2VkQXR0cikge1xuICAgICAgaWYgKGNvbmZpZy5zY29wZSAmJiBjb25maWcuc2NvcGUgIT09ICdub25lJykge1xuICAgICAgICB2YXIgZmlsdHJlZFByb3AgPSBmaWx0ZXJBdHRyaWJ1dGVzKHBhcnNlZEF0dHIucHJvcCwgY29uZmlnLCB0eXBlKTtcblxuICAgICAgICBpZiAoZmlsdHJlZFByb3AgIT09IHt9KSB7XG4gICAgICAgICAgaWYgKGVhdGVuLmRhdGEpIHtcbiAgICAgICAgICAgIGVhdGVuLmRhdGEuaFByb3BlcnRpZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCBlYXRlbi5kYXRhLmhQcm9wZXJ0aWVzLCB7fSwgZmlsdHJlZFByb3ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYXRlbi5kYXRhID0ge1xuICAgICAgICAgICAgICBoUHJvcGVydGllczogZmlsdHJlZFByb3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZWRCeUN1c3RvbUF0dHIpIHtcbiAgICAgICAgZWF0ZW4gPSBlYXQocHJlZml4ICsgcGFyc2VkQXR0ci5lYXRlbikoZWF0ZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlYXRlbjtcbiAgfSAvLyBSZXR1cm4gdGhlIG5ldyB0b2tlbml6ZXIgZnVuY3Rpb25cblxuXG4gIHJldHVybiB0b2tlbjtcbn1cblxucGFydGljdWxhclRva2VuaXplLmZlbmNlZENvZGUgPSB0b2tlbml6ZUZlbmNlZENvZGU7XG5yZW1hcmtBdHRyLlNVUFBPUlRFRF9FTEVNRU5UUyA9IHN1cHBvcnRlZEVsZW1lbnRzO1xubW9kdWxlLmV4cG9ydHMgPSByZW1hcmtBdHRyO1xuLyogRnVuY3Rpb24gdGhhdCBpcyBleHBvcnRlZCAqL1xuXG5mdW5jdGlvbiByZW1hcmtBdHRyKHVzZXJDb25maWcpIHtcbiAgdmFyIHBhcnNlciA9IHRoaXMuUGFyc2VyO1xuICB2YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBhbGxvd0Rhbmdlcm91c0RPTUV2ZW50SGFuZGxlcnM6IGZhbHNlLFxuICAgIGVsZW1lbnRzOiBzdXBwb3J0ZWRFbGVtZW50cyxcbiAgICBleHRlbmQ6IHt9LFxuICAgIHNjb3BlOiAnZXh0ZW5kZWQnLFxuICAgIG1kQXR0ckNvbmZpZzogdW5kZWZpbmVkXG4gIH07XG5cbiAgdmFyIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRDb25maWcsIHt9LCB1c2VyQ29uZmlnKTtcblxuICBpZiAoIWlzUmVtYXJrUGFyc2VyKHBhcnNlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcGFyc2VyIHRvIGF0dGFjaCBgcmVtYXJrLWF0dHJgIFtsaW5rXSAodG8pJyk7XG4gIH1cblxuICB2YXIgdG9rZW5pemVycyA9IHBhcnNlci5wcm90b3R5cGUuaW5saW5lVG9rZW5pemVycztcbiAgdmFyIHRva2VuaXplcnNCbG9jayA9IHBhcnNlci5wcm90b3R5cGUuYmxvY2tUb2tlbml6ZXJzOyAvLyBGb3IgZWFjaCBlbGVtZW50cywgcmVwbGFjZSB0aGUgb2xkIHRva2VuaXplciBieSB0aGUgbmV3IG9uZVxuXG4gIGNvbmZpZy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgaWYgKHN1cHBvcnRlZEVsZW1lbnRzLmluZGV4T2YoZWxlbSkgPj0gMCkge1xuICAgICAgaWYgKGJsb2NrRWxlbWVudHMuaW5kZXhPZihlbGVtKSA+PSAwKSB7XG4gICAgICAgIHZhciBvbGRFbGVtID0gdG9rZW5pemVyc0Jsb2NrW2VsZW1dO1xuICAgICAgICB0b2tlbml6ZXJzQmxvY2tbZWxlbV0gPSB0b2tlbml6ZUdlbmVyYXRvcignXFxuJywgb2xkRWxlbSwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydGljdWxhckVsZW1lbnRzLmluZGV4T2YoZWxlbSkgPj0gMCkge1xuICAgICAgICB2YXIgX29sZEVsZW0gPSB0b2tlbml6ZXJzQmxvY2tbZWxlbV07XG4gICAgICAgIHRva2VuaXplcnNCbG9ja1tlbGVtXSA9IHBhcnRpY3VsYXJUb2tlbml6ZVtlbGVtXShfb2xkRWxlbSwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfb2xkRWxlbTIgPSB0b2tlbml6ZXJzW2VsZW1dO1xuICAgICAgICB2YXIgZWxlbVRva2VuaXplID0gdG9rZW5pemVHZW5lcmF0b3IoJycsIF9vbGRFbGVtMiwgY29uZmlnKTtcbiAgICAgICAgZWxlbVRva2VuaXplLmxvY2F0b3IgPSB0b2tlbml6ZXJzW2VsZW1dLmxvY2F0b3I7XG4gICAgICAgIHRva2VuaXplcnNbZWxlbV0gPSBlbGVtVG9rZW5pemU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNSZW1hcmtQYXJzZXIocGFyc2VyKSB7XG4gIHJldHVybiBCb29sZWFuKHBhcnNlciAmJiBwYXJzZXIucHJvdG90eXBlICYmIHBhcnNlci5wcm90b3R5cGUuaW5saW5lVG9rZW5pemVycyAmJiBwYXJzZXIucHJvdG90eXBlLmlubGluZVRva2VuaXplcnMubGluayAmJiBwYXJzZXIucHJvdG90eXBlLmlubGluZVRva2VuaXplcnMubGluay5sb2NhdG9yKTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4Q0E7QUFDQTtBQUNBO0FBMENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQWxDQTtBQUNBO0FBQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBREE7QUF2Q0E7QUFDQTtBQUNBO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpDQTtBQUNBO0FBQ0E7QUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2QkE7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxEQTtBQUNBO0FBQ0E7QUFvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-attr/dist/index.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-emoji/index.js": -/*!*********************************************!*\ - !*** ../node_modules/remark-emoji/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nvar emoji = __webpack_require__(/*! node-emoji */ \"../node_modules/node-emoji/index.js\");\n\nvar RE_EMOJI = /:\\+1:|:-1:|:[\\w-]+:/g;\n\nfunction plugin(settings) {\n var pad = !!(settings || {}).padSpaceAfter;\n\n function getEmoji(match) {\n var got = emoji.get(match);\n\n if (!pad || got === match) {\n return got;\n }\n\n return got + ' ';\n }\n\n function transformer(tree) {\n visit(tree, 'text', function (node) {\n node.value = node.value.replace(RE_EMOJI, getEmoji);\n });\n }\n\n return transformer;\n}\n\nmodule.exports = plugin;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1lbW9qaS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLWVtb2ppL2luZGV4LmpzPzI4Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdmlzaXQgPSByZXF1aXJlKCd1bmlzdC11dGlsLXZpc2l0Jyk7XG5jb25zdCBlbW9qaSA9IHJlcXVpcmUoJ25vZGUtZW1vamknKTtcblxuY29uc3QgUkVfRU1PSkkgPSAvOlxcKzE6fDotMTp8OltcXHctXSs6L2c7XG5cbmZ1bmN0aW9uIHBsdWdpbihzZXR0aW5ncykge1xuICAgIGNvbnN0IHBhZCA9ICEhKHNldHRpbmdzIHx8IHt9KS5wYWRTcGFjZUFmdGVyO1xuXG4gICAgZnVuY3Rpb24gZ2V0RW1vamkobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZ290ID0gZW1vamkuZ2V0KG1hdGNoKTtcbiAgICAgICAgaWYgKCFwYWQgfHwgZ290ID09PSBtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIGdvdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnb3QgKyAnICc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtZXIodHJlZSkge1xuICAgICAgICB2aXNpdCh0cmVlLCAndGV4dCcsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZXBsYWNlKFJFX0VNT0pJLCBnZXRFbW9qaSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwbHVnaW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-emoji/index.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/index.js": -/*!*********************************************!*\ - !*** ../node_modules/remark-parse/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar unherit = __webpack_require__(/*! unherit */ \"../node_modules/unherit/index.js\");\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar Parser = __webpack_require__(/*! ./lib/parser.js */ \"../node_modules/remark-parse/lib/parser.js\");\n\nmodule.exports = parse;\nparse.Parser = Parser;\n\nfunction parse(options) {\n var Local = unherit(Parser);\n Local.prototype.options = xtend(Local.prototype.options, this.data('settings'), options);\n this.Parser = Local;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzP2M4MDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5oZXJpdCA9IHJlcXVpcmUoJ3VuaGVyaXQnKTtcbnZhciB4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJyk7XG52YXIgUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvcGFyc2VyLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG5wYXJzZS5QYXJzZXIgPSBQYXJzZXI7XG5cbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgdmFyIExvY2FsID0gdW5oZXJpdChQYXJzZXIpO1xuICBMb2NhbC5wcm90b3R5cGUub3B0aW9ucyA9IHh0ZW5kKExvY2FsLnByb3RvdHlwZS5vcHRpb25zLCB0aGlzLmRhdGEoJ3NldHRpbmdzJyksIG9wdGlvbnMpO1xuICB0aGlzLlBhcnNlciA9IExvY2FsO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/index.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/block-elements.json": -/*!************************************************************!*\ - !*** ../node_modules/remark-parse/lib/block-elements.json ***! - \************************************************************/ -/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"[\\\"address\\\",\\\"article\\\",\\\"aside\\\",\\\"base\\\",\\\"basefont\\\",\\\"blockquote\\\",\\\"body\\\",\\\"caption\\\",\\\"center\\\",\\\"col\\\",\\\"colgroup\\\",\\\"dd\\\",\\\"details\\\",\\\"dialog\\\",\\\"dir\\\",\\\"div\\\",\\\"dl\\\",\\\"dt\\\",\\\"fieldset\\\",\\\"figcaption\\\",\\\"figure\\\",\\\"footer\\\",\\\"form\\\",\\\"frame\\\",\\\"frameset\\\",\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\",\\\"head\\\",\\\"header\\\",\\\"hgroup\\\",\\\"hr\\\",\\\"html\\\",\\\"iframe\\\",\\\"legend\\\",\\\"li\\\",\\\"link\\\",\\\"main\\\",\\\"menu\\\",\\\"menuitem\\\",\\\"meta\\\",\\\"nav\\\",\\\"noframes\\\",\\\"ol\\\",\\\"optgroup\\\",\\\"option\\\",\\\"p\\\",\\\"param\\\",\\\"pre\\\",\\\"section\\\",\\\"source\\\",\\\"title\\\",\\\"summary\\\",\\\"table\\\",\\\"tbody\\\",\\\"td\\\",\\\"tfoot\\\",\\\"th\\\",\\\"thead\\\",\\\"title\\\",\\\"tr\\\",\\\"track\\\",\\\"ul\\\"]\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvYmxvY2stZWxlbWVudHMuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/block-elements.json\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/decode.js": -/*!**************************************************!*\ - !*** ../node_modules/remark-parse/lib/decode.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar entities = __webpack_require__(/*! parse-entities */ \"../node_modules/parse-entities/index.js\");\n\nmodule.exports = factory;\n/* Factory to create an entity decoder. */\n\nfunction factory(ctx) {\n decoder.raw = decodeRaw;\n return decoder;\n /* Normalize `position` to add an `indent`. */\n\n function normalize(position) {\n var offsets = ctx.offset;\n var line = position.line;\n var result = [];\n\n while (++line) {\n if (!(line in offsets)) {\n break;\n }\n\n result.push((offsets[line] || 0) + 1);\n }\n\n return {\n start: position,\n indent: result\n };\n }\n /* Handle a warning.\n * See https://github.com/wooorm/parse-entities\n * for the warnings. */\n\n\n function handleWarning(reason, position, code) {\n if (code === 3) {\n return;\n }\n\n ctx.file.message(reason, position);\n }\n /* Decode `value` (at `position`) into text-nodes. */\n\n\n function decoder(value, position, handler) {\n entities(value, {\n position: normalize(position),\n warning: handleWarning,\n text: handler,\n reference: handler,\n textContext: ctx,\n referenceContext: ctx\n });\n }\n /* Decode `value` (at `position`) into a string. */\n\n\n function decodeRaw(value, position, options) {\n return entities(value, xtend(options, {\n position: normalize(position),\n warning: handleWarning\n }));\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvZGVjb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2RlY29kZS5qcz9lZTAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciBlbnRpdGllcyA9IHJlcXVpcmUoJ3BhcnNlLWVudGl0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcblxuLyogRmFjdG9yeSB0byBjcmVhdGUgYW4gZW50aXR5IGRlY29kZXIuICovXG5mdW5jdGlvbiBmYWN0b3J5KGN0eCkge1xuICBkZWNvZGVyLnJhdyA9IGRlY29kZVJhdztcblxuICByZXR1cm4gZGVjb2RlcjtcblxuICAvKiBOb3JtYWxpemUgYHBvc2l0aW9uYCB0byBhZGQgYW4gYGluZGVudGAuICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZShwb3NpdGlvbikge1xuICAgIHZhciBvZmZzZXRzID0gY3R4Lm9mZnNldDtcbiAgICB2YXIgbGluZSA9IHBvc2l0aW9uLmxpbmU7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsrbGluZSkge1xuICAgICAgaWYgKCEobGluZSBpbiBvZmZzZXRzKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goKG9mZnNldHNbbGluZV0gfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHBvc2l0aW9uLFxuICAgICAgaW5kZW50OiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgLyogSGFuZGxlIGEgd2FybmluZy5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93b29vcm0vcGFyc2UtZW50aXRpZXNcbiAgICogZm9yIHRoZSB3YXJuaW5ncy4gKi9cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhyZWFzb24sIHBvc2l0aW9uLCBjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdHguZmlsZS5tZXNzYWdlKHJlYXNvbiwgcG9zaXRpb24pO1xuICB9XG5cbiAgLyogRGVjb2RlIGB2YWx1ZWAgKGF0IGBwb3NpdGlvbmApIGludG8gdGV4dC1ub2Rlcy4gKi9cbiAgZnVuY3Rpb24gZGVjb2Rlcih2YWx1ZSwgcG9zaXRpb24sIGhhbmRsZXIpIHtcbiAgICBlbnRpdGllcyh2YWx1ZSwge1xuICAgICAgcG9zaXRpb246IG5vcm1hbGl6ZShwb3NpdGlvbiksXG4gICAgICB3YXJuaW5nOiBoYW5kbGVXYXJuaW5nLFxuICAgICAgdGV4dDogaGFuZGxlcixcbiAgICAgIHJlZmVyZW5jZTogaGFuZGxlcixcbiAgICAgIHRleHRDb250ZXh0OiBjdHgsXG4gICAgICByZWZlcmVuY2VDb250ZXh0OiBjdHhcbiAgICB9KTtcbiAgfVxuXG4gIC8qIERlY29kZSBgdmFsdWVgIChhdCBgcG9zaXRpb25gKSBpbnRvIGEgc3RyaW5nLiAqL1xuICBmdW5jdGlvbiBkZWNvZGVSYXcodmFsdWUsIHBvc2l0aW9uLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVudGl0aWVzKHZhbHVlLCB4dGVuZChvcHRpb25zLCB7XG4gICAgICBwb3NpdGlvbjogbm9ybWFsaXplKHBvc2l0aW9uKSxcbiAgICAgIHdhcm5pbmc6IGhhbmRsZVdhcm5pbmdcbiAgICB9KSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/decode.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/defaults.js": -/*!****************************************************!*\ - !*** ../node_modules/remark-parse/lib/defaults.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = {\n position: true,\n gfm: true,\n commonmark: false,\n footnotes: false,\n pedantic: false,\n blocks: __webpack_require__(/*! ./block-elements.json */ \"../node_modules/remark-parse/lib/block-elements.json\")\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvZGVmYXVsdHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvZGVmYXVsdHMuanM/Njg3MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwb3NpdGlvbjogdHJ1ZSxcbiAgZ2ZtOiB0cnVlLFxuICBjb21tb25tYXJrOiBmYWxzZSxcbiAgZm9vdG5vdGVzOiBmYWxzZSxcbiAgcGVkYW50aWM6IGZhbHNlLFxuICBibG9ja3M6IHJlcXVpcmUoJy4vYmxvY2stZWxlbWVudHMuanNvbicpXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/defaults.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/break.js": -/*!********************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/break.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n var index = value.indexOf('\\n', fromIndex);\n\n while (index > fromIndex) {\n if (value.charAt(index - 1) !== ' ') {\n break;\n }\n\n index--;\n }\n\n return index;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2JyZWFrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2xvY2F0ZS9icmVhay5qcz84ZmUyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsb2NhdGU7XG5cbmZ1bmN0aW9uIGxvY2F0ZSh2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2YoJ1xcbicsIGZyb21JbmRleCk7XG5cbiAgd2hpbGUgKGluZGV4ID4gZnJvbUluZGV4KSB7XG4gICAgaWYgKHZhbHVlLmNoYXJBdChpbmRleCAtIDEpICE9PSAnICcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluZGV4LS07XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/break.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/code-inline.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/code-inline.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n return value.indexOf('`', fromIndex);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2NvZGUtaW5saW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2xvY2F0ZS9jb2RlLWlubGluZS5qcz8xMWI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsb2NhdGU7XG5cbmZ1bmN0aW9uIGxvY2F0ZSh2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZS5pbmRleE9mKCdgJywgZnJvbUluZGV4KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/code-inline.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/delete.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/delete.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n return value.indexOf('~~', fromIndex);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2RlbGV0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9sb2NhdGUvZGVsZXRlLmpzPzE5MzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvY2F0ZTtcblxuZnVuY3Rpb24gbG9jYXRlKHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlLmluZGV4T2YoJ35+JywgZnJvbUluZGV4KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/delete.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/emphasis.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/emphasis.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n var asterisk = value.indexOf('*', fromIndex);\n var underscore = value.indexOf('_', fromIndex);\n\n if (underscore === -1) {\n return asterisk;\n }\n\n if (asterisk === -1) {\n return underscore;\n }\n\n return underscore < asterisk ? underscore : asterisk;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2VtcGhhc2lzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2xvY2F0ZS9lbXBoYXNpcy5qcz8yMGJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsb2NhdGU7XG5cbmZ1bmN0aW9uIGxvY2F0ZSh2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBhc3RlcmlzayA9IHZhbHVlLmluZGV4T2YoJyonLCBmcm9tSW5kZXgpO1xuICB2YXIgdW5kZXJzY29yZSA9IHZhbHVlLmluZGV4T2YoJ18nLCBmcm9tSW5kZXgpO1xuXG4gIGlmICh1bmRlcnNjb3JlID09PSAtMSkge1xuICAgIHJldHVybiBhc3RlcmlzaztcbiAgfVxuXG4gIGlmIChhc3RlcmlzayA9PT0gLTEpIHtcbiAgICByZXR1cm4gdW5kZXJzY29yZTtcbiAgfVxuXG4gIHJldHVybiB1bmRlcnNjb3JlIDwgYXN0ZXJpc2sgPyB1bmRlcnNjb3JlIDogYXN0ZXJpc2s7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/emphasis.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/escape.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/escape.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n return value.indexOf('\\\\', fromIndex);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2VzY2FwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9sb2NhdGUvZXNjYXBlLmpzPzQzMWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvY2F0ZTtcblxuZnVuY3Rpb24gbG9jYXRlKHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlLmluZGV4T2YoJ1xcXFwnLCBmcm9tSW5kZXgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/escape.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/link.js": -/*!*******************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/link.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n var link = value.indexOf('[', fromIndex);\n var image = value.indexOf('![', fromIndex);\n\n if (image === -1) {\n return link;\n }\n /* Link can never be `-1` if an image is found, so we don’t need\n * to check for that :) */\n\n\n return link < image ? link : image;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2xpbmsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL2xpbmsuanM/YTgzYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYXRlO1xuXG5mdW5jdGlvbiBsb2NhdGUodmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgbGluayA9IHZhbHVlLmluZGV4T2YoJ1snLCBmcm9tSW5kZXgpO1xuICB2YXIgaW1hZ2UgPSB2YWx1ZS5pbmRleE9mKCchWycsIGZyb21JbmRleCk7XG5cbiAgaWYgKGltYWdlID09PSAtMSkge1xuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgLyogTGluayBjYW4gbmV2ZXIgYmUgYC0xYCBpZiBhbiBpbWFnZSBpcyBmb3VuZCwgc28gd2UgZG9u4oCZdCBuZWVkXG4gICAqIHRvIGNoZWNrIGZvciB0aGF0IDopICovXG4gIHJldHVybiBsaW5rIDwgaW1hZ2UgPyBsaW5rIDogaW1hZ2U7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/link.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/strong.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/strong.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n var asterisk = value.indexOf('**', fromIndex);\n var underscore = value.indexOf('__', fromIndex);\n\n if (underscore === -1) {\n return asterisk;\n }\n\n if (asterisk === -1) {\n return underscore;\n }\n\n return underscore < asterisk ? underscore : asterisk;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL3N0cm9uZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9sb2NhdGUvc3Ryb25nLmpzP2E1OTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvY2F0ZTtcblxuZnVuY3Rpb24gbG9jYXRlKHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGFzdGVyaXNrID0gdmFsdWUuaW5kZXhPZignKionLCBmcm9tSW5kZXgpO1xuICB2YXIgdW5kZXJzY29yZSA9IHZhbHVlLmluZGV4T2YoJ19fJywgZnJvbUluZGV4KTtcblxuICBpZiAodW5kZXJzY29yZSA9PT0gLTEpIHtcbiAgICByZXR1cm4gYXN0ZXJpc2s7XG4gIH1cblxuICBpZiAoYXN0ZXJpc2sgPT09IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVyc2NvcmU7XG4gIH1cblxuICByZXR1cm4gdW5kZXJzY29yZSA8IGFzdGVyaXNrID8gdW5kZXJzY29yZSA6IGFzdGVyaXNrO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/strong.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/tag.js": -/*!******************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/tag.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n return value.indexOf('<', fromIndex);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL3RhZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9sb2NhdGUvdGFnLmpzP2M5ODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvY2F0ZTtcblxuZnVuY3Rpb24gbG9jYXRlKHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlLmluZGV4T2YoJzwnLCBmcm9tSW5kZXgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/tag.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/locate/url.js": -/*!******************************************************!*\ - !*** ../node_modules/remark-parse/lib/locate/url.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = locate;\nvar PROTOCOLS = ['https://', 'http://', 'mailto:'];\n\nfunction locate(value, fromIndex) {\n var length = PROTOCOLS.length;\n var index = -1;\n var min = -1;\n var position;\n\n if (!this.options.gfm) {\n return -1;\n }\n\n while (++index < length) {\n position = value.indexOf(PROTOCOLS[index], fromIndex);\n\n if (position !== -1 && (position < min || min === -1)) {\n min = position;\n }\n }\n\n return min;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvbG9jYXRlL3VybC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9sb2NhdGUvdXJsLmpzPzZjZWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvY2F0ZTtcblxudmFyIFBST1RPQ09MUyA9IFsnaHR0cHM6Ly8nLCAnaHR0cDovLycsICdtYWlsdG86J107XG5cbmZ1bmN0aW9uIGxvY2F0ZSh2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBQUk9UT0NPTFMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIG1pbiA9IC0xO1xuICB2YXIgcG9zaXRpb247XG5cbiAgaWYgKCF0aGlzLm9wdGlvbnMuZ2ZtKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHZhbHVlLmluZGV4T2YoUFJPVE9DT0xTW2luZGV4XSwgZnJvbUluZGV4KTtcblxuICAgIGlmIChwb3NpdGlvbiAhPT0gLTEgJiYgKHBvc2l0aW9uIDwgbWluIHx8IG1pbiA9PT0gLTEpKSB7XG4gICAgICBtaW4gPSBwb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/locate/url.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/parse.js": -/*!*************************************************!*\ - !*** ../node_modules/remark-parse/lib/parse.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar removePosition = __webpack_require__(/*! unist-util-remove-position */ \"../node_modules/unist-util-remove-position/index.js\");\n\nmodule.exports = parse;\nvar C_NEWLINE = '\\n';\nvar EXPRESSION_LINE_BREAKS = /\\r\\n|\\r/g;\n/* Parse the bound file. */\n\nfunction parse() {\n var self = this;\n var value = String(self.file);\n var start = {\n line: 1,\n column: 1,\n offset: 0\n };\n var content = xtend(start);\n var node;\n /* Clean non-unix newlines: `\\r\\n` and `\\r` are all\n * changed to `\\n`. This should not affect positional\n * information. */\n\n value = value.replace(EXPRESSION_LINE_BREAKS, C_NEWLINE);\n\n if (value.charCodeAt(0) === 0xFEFF) {\n value = value.slice(1);\n content.column++;\n content.offset++;\n }\n\n node = {\n type: 'root',\n children: self.tokenizeBlock(value, content),\n position: {\n start: start,\n end: self.eof || xtend(start)\n }\n };\n\n if (!self.options.position) {\n removePosition(node, true);\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvcGFyc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvcGFyc2UuanM/MjQwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJyk7XG52YXIgcmVtb3ZlUG9zaXRpb24gPSByZXF1aXJlKCd1bmlzdC11dGlsLXJlbW92ZS1wb3NpdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuXG52YXIgQ19ORVdMSU5FID0gJ1xcbic7XG52YXIgRVhQUkVTU0lPTl9MSU5FX0JSRUFLUyA9IC9cXHJcXG58XFxyL2c7XG5cbi8qIFBhcnNlIHRoZSBib3VuZCBmaWxlLiAqL1xuZnVuY3Rpb24gcGFyc2UoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHZhbHVlID0gU3RyaW5nKHNlbGYuZmlsZSk7XG4gIHZhciBzdGFydCA9IHtsaW5lOiAxLCBjb2x1bW46IDEsIG9mZnNldDogMH07XG4gIHZhciBjb250ZW50ID0geHRlbmQoc3RhcnQpO1xuICB2YXIgbm9kZTtcblxuICAvKiBDbGVhbiBub24tdW5peCBuZXdsaW5lczogYFxcclxcbmAgYW5kIGBcXHJgIGFyZSBhbGxcbiAgICogY2hhbmdlZCB0byBgXFxuYC4gIFRoaXMgc2hvdWxkIG5vdCBhZmZlY3QgcG9zaXRpb25hbFxuICAgKiBpbmZvcm1hdGlvbi4gKi9cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKEVYUFJFU1NJT05fTElORV9CUkVBS1MsIENfTkVXTElORSk7XG5cbiAgaWYgKHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG5cbiAgICBjb250ZW50LmNvbHVtbisrO1xuICAgIGNvbnRlbnQub2Zmc2V0Kys7XG4gIH1cblxuICBub2RlID0ge1xuICAgIHR5cGU6ICdyb290JyxcbiAgICBjaGlsZHJlbjogc2VsZi50b2tlbml6ZUJsb2NrKHZhbHVlLCBjb250ZW50KSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBzZWxmLmVvZiB8fCB4dGVuZChzdGFydClcbiAgICB9XG4gIH07XG5cbiAgaWYgKCFzZWxmLm9wdGlvbnMucG9zaXRpb24pIHtcbiAgICByZW1vdmVQb3NpdGlvbihub2RlLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/parse.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/parser.js": -/*!**************************************************!*\ - !*** ../node_modules/remark-parse/lib/parser.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar toggle = __webpack_require__(/*! state-toggle */ \"../node_modules/state-toggle/index.js\");\n\nvar vfileLocation = __webpack_require__(/*! vfile-location */ \"../node_modules/vfile-location/index.js\");\n\nvar unescape = __webpack_require__(/*! ./unescape */ \"../node_modules/remark-parse/lib/unescape.js\");\n\nvar decode = __webpack_require__(/*! ./decode */ \"../node_modules/remark-parse/lib/decode.js\");\n\nvar tokenizer = __webpack_require__(/*! ./tokenizer */ \"../node_modules/remark-parse/lib/tokenizer.js\");\n\nmodule.exports = Parser;\n\nfunction Parser(doc, file) {\n this.file = file;\n this.offset = {};\n this.options = xtend(this.options);\n this.setOptions({});\n this.inList = false;\n this.inBlock = false;\n this.inLink = false;\n this.atStart = true;\n this.toOffset = vfileLocation(file).toOffset;\n this.unescape = unescape(this, 'escape');\n this.decode = decode(this);\n}\n\nvar proto = Parser.prototype;\n/* Expose core. */\n\nproto.setOptions = __webpack_require__(/*! ./set-options */ \"../node_modules/remark-parse/lib/set-options.js\");\nproto.parse = __webpack_require__(/*! ./parse */ \"../node_modules/remark-parse/lib/parse.js\");\n/* Expose `defaults`. */\n\nproto.options = __webpack_require__(/*! ./defaults */ \"../node_modules/remark-parse/lib/defaults.js\");\n/* Enter and exit helpers. */\n\nproto.exitStart = toggle('atStart', true);\nproto.enterList = toggle('inList', false);\nproto.enterLink = toggle('inLink', false);\nproto.enterBlock = toggle('inBlock', false);\n/* Nodes that can interupt a paragraph:\n *\n * ```markdown\n * A paragraph, followed by a thematic break.\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the paragraph. */\n\nproto.interruptParagraph = [['thematicBreak'], ['atxHeading'], ['fencedCode'], ['blockquote'], ['html'], ['setextHeading', {\n commonmark: false\n}], ['definition', {\n commonmark: false\n}], ['footnote', {\n commonmark: false\n}]];\n/* Nodes that can interupt a list:\n *\n * ```markdown\n * - One\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the list. */\n\nproto.interruptList = [['atxHeading', {\n pedantic: false\n}], ['fencedCode', {\n pedantic: false\n}], ['thematicBreak', {\n pedantic: false\n}], ['definition', {\n commonmark: false\n}], ['footnote', {\n commonmark: false\n}]];\n/* Nodes that can interupt a blockquote:\n *\n * ```markdown\n * > A paragraph.\n * ___\n * ```\n *\n * In the above example, the thematic break “interupts”\n * the blockquote. */\n\nproto.interruptBlockquote = [['indentedCode', {\n commonmark: true\n}], ['fencedCode', {\n commonmark: true\n}], ['atxHeading', {\n commonmark: true\n}], ['setextHeading', {\n commonmark: true\n}], ['thematicBreak', {\n commonmark: true\n}], ['html', {\n commonmark: true\n}], ['list', {\n commonmark: true\n}], ['definition', {\n commonmark: false\n}], ['footnote', {\n commonmark: false\n}]];\n/* Handlers. */\n\nproto.blockTokenizers = {\n newline: __webpack_require__(/*! ./tokenize/newline */ \"../node_modules/remark-parse/lib/tokenize/newline.js\"),\n indentedCode: __webpack_require__(/*! ./tokenize/code-indented */ \"../node_modules/remark-parse/lib/tokenize/code-indented.js\"),\n fencedCode: __webpack_require__(/*! ./tokenize/code-fenced */ \"../node_modules/remark-parse/lib/tokenize/code-fenced.js\"),\n blockquote: __webpack_require__(/*! ./tokenize/blockquote */ \"../node_modules/remark-parse/lib/tokenize/blockquote.js\"),\n atxHeading: __webpack_require__(/*! ./tokenize/heading-atx */ \"../node_modules/remark-parse/lib/tokenize/heading-atx.js\"),\n thematicBreak: __webpack_require__(/*! ./tokenize/thematic-break */ \"../node_modules/remark-parse/lib/tokenize/thematic-break.js\"),\n list: __webpack_require__(/*! ./tokenize/list */ \"../node_modules/remark-parse/lib/tokenize/list.js\"),\n setextHeading: __webpack_require__(/*! ./tokenize/heading-setext */ \"../node_modules/remark-parse/lib/tokenize/heading-setext.js\"),\n html: __webpack_require__(/*! ./tokenize/html-block */ \"../node_modules/remark-parse/lib/tokenize/html-block.js\"),\n footnote: __webpack_require__(/*! ./tokenize/footnote-definition */ \"../node_modules/remark-parse/lib/tokenize/footnote-definition.js\"),\n definition: __webpack_require__(/*! ./tokenize/definition */ \"../node_modules/remark-parse/lib/tokenize/definition.js\"),\n table: __webpack_require__(/*! ./tokenize/table */ \"../node_modules/remark-parse/lib/tokenize/table.js\"),\n paragraph: __webpack_require__(/*! ./tokenize/paragraph */ \"../node_modules/remark-parse/lib/tokenize/paragraph.js\")\n};\nproto.inlineTokenizers = {\n escape: __webpack_require__(/*! ./tokenize/escape */ \"../node_modules/remark-parse/lib/tokenize/escape.js\"),\n autoLink: __webpack_require__(/*! ./tokenize/auto-link */ \"../node_modules/remark-parse/lib/tokenize/auto-link.js\"),\n url: __webpack_require__(/*! ./tokenize/url */ \"../node_modules/remark-parse/lib/tokenize/url.js\"),\n html: __webpack_require__(/*! ./tokenize/html-inline */ \"../node_modules/remark-parse/lib/tokenize/html-inline.js\"),\n link: __webpack_require__(/*! ./tokenize/link */ \"../node_modules/remark-parse/lib/tokenize/link.js\"),\n reference: __webpack_require__(/*! ./tokenize/reference */ \"../node_modules/remark-parse/lib/tokenize/reference.js\"),\n strong: __webpack_require__(/*! ./tokenize/strong */ \"../node_modules/remark-parse/lib/tokenize/strong.js\"),\n emphasis: __webpack_require__(/*! ./tokenize/emphasis */ \"../node_modules/remark-parse/lib/tokenize/emphasis.js\"),\n deletion: __webpack_require__(/*! ./tokenize/delete */ \"../node_modules/remark-parse/lib/tokenize/delete.js\"),\n code: __webpack_require__(/*! ./tokenize/code-inline */ \"../node_modules/remark-parse/lib/tokenize/code-inline.js\"),\n \"break\": __webpack_require__(/*! ./tokenize/break */ \"../node_modules/remark-parse/lib/tokenize/break.js\"),\n text: __webpack_require__(/*! ./tokenize/text */ \"../node_modules/remark-parse/lib/tokenize/text.js\")\n};\n/* Expose precedence. */\n\nproto.blockMethods = keys(proto.blockTokenizers);\nproto.inlineMethods = keys(proto.inlineTokenizers);\n/* Tokenizers. */\n\nproto.tokenizeBlock = tokenizer('block');\nproto.tokenizeInline = tokenizer('inline');\nproto.tokenizeFactory = tokenizer;\n/* Get all keys in `value`. */\n\nfunction keys(value) {\n var result = [];\n var key;\n\n for (key in value) {\n result.push(key);\n }\n\n return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvcGFyc2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3BhcnNlci5qcz81OGNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciB0b2dnbGUgPSByZXF1aXJlKCdzdGF0ZS10b2dnbGUnKTtcbnZhciB2ZmlsZUxvY2F0aW9uID0gcmVxdWlyZSgndmZpbGUtbG9jYXRpb24nKTtcbnZhciB1bmVzY2FwZSA9IHJlcXVpcmUoJy4vdW5lc2NhcGUnKTtcbnZhciBkZWNvZGUgPSByZXF1aXJlKCcuL2RlY29kZScpO1xudmFyIHRva2VuaXplciA9IHJlcXVpcmUoJy4vdG9rZW5pemVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuXG5mdW5jdGlvbiBQYXJzZXIoZG9jLCBmaWxlKSB7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG4gIHRoaXMub2Zmc2V0ID0ge307XG4gIHRoaXMub3B0aW9ucyA9IHh0ZW5kKHRoaXMub3B0aW9ucyk7XG4gIHRoaXMuc2V0T3B0aW9ucyh7fSk7XG5cbiAgdGhpcy5pbkxpc3QgPSBmYWxzZTtcbiAgdGhpcy5pbkJsb2NrID0gZmFsc2U7XG4gIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gIHRoaXMuYXRTdGFydCA9IHRydWU7XG5cbiAgdGhpcy50b09mZnNldCA9IHZmaWxlTG9jYXRpb24oZmlsZSkudG9PZmZzZXQ7XG4gIHRoaXMudW5lc2NhcGUgPSB1bmVzY2FwZSh0aGlzLCAnZXNjYXBlJyk7XG4gIHRoaXMuZGVjb2RlID0gZGVjb2RlKHRoaXMpO1xufVxuXG52YXIgcHJvdG8gPSBQYXJzZXIucHJvdG90eXBlO1xuXG4vKiBFeHBvc2UgY29yZS4gKi9cbnByb3RvLnNldE9wdGlvbnMgPSByZXF1aXJlKCcuL3NldC1vcHRpb25zJyk7XG5wcm90by5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcblxuLyogRXhwb3NlIGBkZWZhdWx0c2AuICovXG5wcm90by5vcHRpb25zID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKiBFbnRlciBhbmQgZXhpdCBoZWxwZXJzLiAqL1xucHJvdG8uZXhpdFN0YXJ0ID0gdG9nZ2xlKCdhdFN0YXJ0JywgdHJ1ZSk7XG5wcm90by5lbnRlckxpc3QgPSB0b2dnbGUoJ2luTGlzdCcsIGZhbHNlKTtcbnByb3RvLmVudGVyTGluayA9IHRvZ2dsZSgnaW5MaW5rJywgZmFsc2UpO1xucHJvdG8uZW50ZXJCbG9jayA9IHRvZ2dsZSgnaW5CbG9jaycsIGZhbHNlKTtcblxuLyogTm9kZXMgdGhhdCBjYW4gaW50ZXJ1cHQgYSBwYXJhZ3JhcGg6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIEEgcGFyYWdyYXBoLCBmb2xsb3dlZCBieSBhIHRoZW1hdGljIGJyZWFrLlxuICogX19fXG4gKiBgYGBcbiAqXG4gKiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIHRoZW1hdGljIGJyZWFrIOKAnGludGVydXB0c+KAnVxuICogdGhlIHBhcmFncmFwaC4gKi9cbnByb3RvLmludGVycnVwdFBhcmFncmFwaCA9IFtcbiAgWyd0aGVtYXRpY0JyZWFrJ10sXG4gIFsnYXR4SGVhZGluZyddLFxuICBbJ2ZlbmNlZENvZGUnXSxcbiAgWydibG9ja3F1b3RlJ10sXG4gIFsnaHRtbCddLFxuICBbJ3NldGV4dEhlYWRpbmcnLCB7Y29tbW9ubWFyazogZmFsc2V9XSxcbiAgWydkZWZpbml0aW9uJywge2NvbW1vbm1hcms6IGZhbHNlfV0sXG4gIFsnZm9vdG5vdGUnLCB7Y29tbW9ubWFyazogZmFsc2V9XVxuXTtcblxuLyogTm9kZXMgdGhhdCBjYW4gaW50ZXJ1cHQgYSBsaXN0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIE9uZVxuICogX19fXG4gKiBgYGBcbiAqXG4gKiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIHRoZW1hdGljIGJyZWFrIOKAnGludGVydXB0c+KAnVxuICogdGhlIGxpc3QuICovXG5wcm90by5pbnRlcnJ1cHRMaXN0ID0gW1xuICBbJ2F0eEhlYWRpbmcnLCB7cGVkYW50aWM6IGZhbHNlfV0sXG4gIFsnZmVuY2VkQ29kZScsIHtwZWRhbnRpYzogZmFsc2V9XSxcbiAgWyd0aGVtYXRpY0JyZWFrJywge3BlZGFudGljOiBmYWxzZX1dLFxuICBbJ2RlZmluaXRpb24nLCB7Y29tbW9ubWFyazogZmFsc2V9XSxcbiAgWydmb290bm90ZScsIHtjb21tb25tYXJrOiBmYWxzZX1dXG5dO1xuXG4vKiBOb2RlcyB0aGF0IGNhbiBpbnRlcnVwdCBhIGJsb2NrcXVvdGU6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqID4gQSBwYXJhZ3JhcGguXG4gKiBfX19cbiAqIGBgYFxuICpcbiAqIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgdGhlbWF0aWMgYnJlYWsg4oCcaW50ZXJ1cHRz4oCdXG4gKiB0aGUgYmxvY2txdW90ZS4gKi9cbnByb3RvLmludGVycnVwdEJsb2NrcXVvdGUgPSBbXG4gIFsnaW5kZW50ZWRDb2RlJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydmZW5jZWRDb2RlJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydhdHhIZWFkaW5nJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydzZXRleHRIZWFkaW5nJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWyd0aGVtYXRpY0JyZWFrJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydodG1sJywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydsaXN0Jywge2NvbW1vbm1hcms6IHRydWV9XSxcbiAgWydkZWZpbml0aW9uJywge2NvbW1vbm1hcms6IGZhbHNlfV0sXG4gIFsnZm9vdG5vdGUnLCB7Y29tbW9ubWFyazogZmFsc2V9XVxuXTtcblxuLyogSGFuZGxlcnMuICovXG5wcm90by5ibG9ja1Rva2VuaXplcnMgPSB7XG4gIG5ld2xpbmU6IHJlcXVpcmUoJy4vdG9rZW5pemUvbmV3bGluZScpLFxuICBpbmRlbnRlZENvZGU6IHJlcXVpcmUoJy4vdG9rZW5pemUvY29kZS1pbmRlbnRlZCcpLFxuICBmZW5jZWRDb2RlOiByZXF1aXJlKCcuL3Rva2VuaXplL2NvZGUtZmVuY2VkJyksXG4gIGJsb2NrcXVvdGU6IHJlcXVpcmUoJy4vdG9rZW5pemUvYmxvY2txdW90ZScpLFxuICBhdHhIZWFkaW5nOiByZXF1aXJlKCcuL3Rva2VuaXplL2hlYWRpbmctYXR4JyksXG4gIHRoZW1hdGljQnJlYWs6IHJlcXVpcmUoJy4vdG9rZW5pemUvdGhlbWF0aWMtYnJlYWsnKSxcbiAgbGlzdDogcmVxdWlyZSgnLi90b2tlbml6ZS9saXN0JyksXG4gIHNldGV4dEhlYWRpbmc6IHJlcXVpcmUoJy4vdG9rZW5pemUvaGVhZGluZy1zZXRleHQnKSxcbiAgaHRtbDogcmVxdWlyZSgnLi90b2tlbml6ZS9odG1sLWJsb2NrJyksXG4gIGZvb3Rub3RlOiByZXF1aXJlKCcuL3Rva2VuaXplL2Zvb3Rub3RlLWRlZmluaXRpb24nKSxcbiAgZGVmaW5pdGlvbjogcmVxdWlyZSgnLi90b2tlbml6ZS9kZWZpbml0aW9uJyksXG4gIHRhYmxlOiByZXF1aXJlKCcuL3Rva2VuaXplL3RhYmxlJyksXG4gIHBhcmFncmFwaDogcmVxdWlyZSgnLi90b2tlbml6ZS9wYXJhZ3JhcGgnKVxufTtcblxucHJvdG8uaW5saW5lVG9rZW5pemVycyA9IHtcbiAgZXNjYXBlOiByZXF1aXJlKCcuL3Rva2VuaXplL2VzY2FwZScpLFxuICBhdXRvTGluazogcmVxdWlyZSgnLi90b2tlbml6ZS9hdXRvLWxpbmsnKSxcbiAgdXJsOiByZXF1aXJlKCcuL3Rva2VuaXplL3VybCcpLFxuICBodG1sOiByZXF1aXJlKCcuL3Rva2VuaXplL2h0bWwtaW5saW5lJyksXG4gIGxpbms6IHJlcXVpcmUoJy4vdG9rZW5pemUvbGluaycpLFxuICByZWZlcmVuY2U6IHJlcXVpcmUoJy4vdG9rZW5pemUvcmVmZXJlbmNlJyksXG4gIHN0cm9uZzogcmVxdWlyZSgnLi90b2tlbml6ZS9zdHJvbmcnKSxcbiAgZW1waGFzaXM6IHJlcXVpcmUoJy4vdG9rZW5pemUvZW1waGFzaXMnKSxcbiAgZGVsZXRpb246IHJlcXVpcmUoJy4vdG9rZW5pemUvZGVsZXRlJyksXG4gIGNvZGU6IHJlcXVpcmUoJy4vdG9rZW5pemUvY29kZS1pbmxpbmUnKSxcbiAgYnJlYWs6IHJlcXVpcmUoJy4vdG9rZW5pemUvYnJlYWsnKSxcbiAgdGV4dDogcmVxdWlyZSgnLi90b2tlbml6ZS90ZXh0Jylcbn07XG5cbi8qIEV4cG9zZSBwcmVjZWRlbmNlLiAqL1xucHJvdG8uYmxvY2tNZXRob2RzID0ga2V5cyhwcm90by5ibG9ja1Rva2VuaXplcnMpO1xucHJvdG8uaW5saW5lTWV0aG9kcyA9IGtleXMocHJvdG8uaW5saW5lVG9rZW5pemVycyk7XG5cbi8qIFRva2VuaXplcnMuICovXG5wcm90by50b2tlbml6ZUJsb2NrID0gdG9rZW5pemVyKCdibG9jaycpO1xucHJvdG8udG9rZW5pemVJbmxpbmUgPSB0b2tlbml6ZXIoJ2lubGluZScpO1xucHJvdG8udG9rZW5pemVGYWN0b3J5ID0gdG9rZW5pemVyO1xuXG4vKiBHZXQgYWxsIGtleXMgaW4gYHZhbHVlYC4gKi9cbmZ1bmN0aW9uIGtleXModmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuXG4gIGZvciAoa2V5IGluIHZhbHVlKSB7XG4gICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVNBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/parser.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/set-options.js": -/*!*******************************************************!*\ - !*** ../node_modules/remark-parse/lib/set-options.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar escapes = __webpack_require__(/*! markdown-escapes */ \"../node_modules/markdown-escapes/index.js\");\n\nvar defaults = __webpack_require__(/*! ./defaults */ \"../node_modules/remark-parse/lib/defaults.js\");\n\nmodule.exports = setOptions;\n\nfunction setOptions(options) {\n var self = this;\n var current = self.options;\n var key;\n var value;\n\n if (options == null) {\n options = {};\n } else if (_typeof(options) === 'object') {\n options = xtend(options);\n } else {\n throw new Error('Invalid value `' + options + '` ' + 'for setting `options`');\n }\n\n for (key in defaults) {\n value = options[key];\n\n if (value == null) {\n value = current[key];\n }\n\n if (key !== 'blocks' && typeof value !== 'boolean' || key === 'blocks' && _typeof(value) !== 'object') {\n throw new Error('Invalid value `' + value + '` for setting `options.' + key + '`');\n }\n\n options[key] = value;\n }\n\n self.options = options;\n self.escape = escapes(options);\n return self;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvc2V0LW9wdGlvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvc2V0LW9wdGlvbnMuanM/ZTM4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJyk7XG52YXIgZXNjYXBlcyA9IHJlcXVpcmUoJ21hcmtkb3duLWVzY2FwZXMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRPcHRpb25zO1xuXG5mdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY3VycmVudCA9IHNlbGYub3B0aW9ucztcbiAgdmFyIGtleTtcbiAgdmFyIHZhbHVlO1xuXG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHh0ZW5kKG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdJbnZhbGlkIHZhbHVlIGAnICsgb3B0aW9ucyArICdgICcgK1xuICAgICAgJ2ZvciBzZXR0aW5nIGBvcHRpb25zYCdcbiAgICApO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gZGVmYXVsdHMpIHtcbiAgICB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IGN1cnJlbnRba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5ICE9PSAnYmxvY2tzJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykgfHxcbiAgICAgIChrZXkgPT09ICdibG9ja3MnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgYCcgKyB2YWx1ZSArICdgIGZvciBzZXR0aW5nIGBvcHRpb25zLicgKyBrZXkgKyAnYCcpO1xuICAgIH1cblxuICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucztcbiAgc2VsZi5lc2NhcGUgPSBlc2NhcGVzKG9wdGlvbnMpO1xuXG4gIHJldHVybiBzZWxmO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/set-options.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/auto-link.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/auto-link.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar decode = __webpack_require__(/*! parse-entities */ \"../node_modules/parse-entities/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/tag */ \"../node_modules/remark-parse/lib/locate/tag.js\");\n\nmodule.exports = autoLink;\nautoLink.locator = locate;\nautoLink.notInLink = true;\nvar C_LT = '<';\nvar C_GT = '>';\nvar C_AT_SIGN = '@';\nvar C_SLASH = '/';\nvar MAILTO = 'mailto:';\nvar MAILTO_LENGTH = MAILTO.length;\n/* Tokenise a link. */\n\nfunction autoLink(eat, value, silent) {\n var self;\n var subvalue;\n var length;\n var index;\n var queue;\n var character;\n var hasAtCharacter;\n var link;\n var now;\n var content;\n var tokenizers;\n var exit;\n\n if (value.charAt(0) !== C_LT) {\n return;\n }\n\n self = this;\n subvalue = '';\n length = value.length;\n index = 0;\n queue = '';\n hasAtCharacter = false;\n link = '';\n index++;\n subvalue = C_LT;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (whitespace(character) || character === C_GT || character === C_AT_SIGN || character === ':' && value.charAt(index + 1) === C_SLASH) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n if (!queue) {\n return;\n }\n\n link += queue;\n queue = '';\n character = value.charAt(index);\n link += character;\n index++;\n\n if (character === C_AT_SIGN) {\n hasAtCharacter = true;\n } else {\n if (character !== ':' || value.charAt(index + 1) !== C_SLASH) {\n return;\n }\n\n link += C_SLASH;\n index++;\n }\n\n while (index < length) {\n character = value.charAt(index);\n\n if (whitespace(character) || character === C_GT) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (!queue || character !== C_GT) {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n link += queue;\n content = link;\n subvalue += link + character;\n now = eat.now();\n now.column++;\n now.offset++;\n\n if (hasAtCharacter) {\n if (link.slice(0, MAILTO_LENGTH).toLowerCase() === MAILTO) {\n content = content.substr(MAILTO_LENGTH);\n now.column += MAILTO_LENGTH;\n now.offset += MAILTO_LENGTH;\n } else {\n link = MAILTO + link;\n }\n }\n /* Temporarily remove all tokenizers except text in autolinks. */\n\n\n tokenizers = self.inlineTokenizers;\n self.inlineTokenizers = {\n text: tokenizers.text\n };\n exit = self.enterLink();\n content = self.tokenizeInline(content, now);\n self.inlineTokenizers = tokenizers;\n exit();\n return eat(subvalue)({\n type: 'link',\n title: null,\n url: decode(link, {\n nonTerminated: false\n }),\n children: content\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvYXV0by1saW5rLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL2F1dG8tbGluay5qcz9lNDkyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHdoaXRlc3BhY2UgPSByZXF1aXJlKCdpcy13aGl0ZXNwYWNlLWNoYXJhY3RlcicpO1xudmFyIGRlY29kZSA9IHJlcXVpcmUoJ3BhcnNlLWVudGl0aWVzJyk7XG52YXIgbG9jYXRlID0gcmVxdWlyZSgnLi4vbG9jYXRlL3RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF1dG9MaW5rO1xuYXV0b0xpbmsubG9jYXRvciA9IGxvY2F0ZTtcbmF1dG9MaW5rLm5vdEluTGluayA9IHRydWU7XG5cbnZhciBDX0xUID0gJzwnO1xudmFyIENfR1QgPSAnPic7XG52YXIgQ19BVF9TSUdOID0gJ0AnO1xudmFyIENfU0xBU0ggPSAnLyc7XG52YXIgTUFJTFRPID0gJ21haWx0bzonO1xudmFyIE1BSUxUT19MRU5HVEggPSBNQUlMVE8ubGVuZ3RoO1xuXG4vKiBUb2tlbmlzZSBhIGxpbmsuICovXG5mdW5jdGlvbiBhdXRvTGluayhlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGY7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIGluZGV4O1xuICB2YXIgcXVldWU7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBoYXNBdENoYXJhY3RlcjtcbiAgdmFyIGxpbms7XG4gIHZhciBub3c7XG4gIHZhciBjb250ZW50O1xuICB2YXIgdG9rZW5pemVycztcbiAgdmFyIGV4aXQ7XG5cbiAgaWYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gQ19MVCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNlbGYgPSB0aGlzO1xuICBzdWJ2YWx1ZSA9ICcnO1xuICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIGluZGV4ID0gMDtcbiAgcXVldWUgPSAnJztcbiAgaGFzQXRDaGFyYWN0ZXIgPSBmYWxzZTtcbiAgbGluayA9ICcnO1xuXG4gIGluZGV4Kys7XG4gIHN1YnZhbHVlID0gQ19MVDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKFxuICAgICAgd2hpdGVzcGFjZShjaGFyYWN0ZXIpIHx8XG4gICAgICBjaGFyYWN0ZXIgPT09IENfR1QgfHxcbiAgICAgIGNoYXJhY3RlciA9PT0gQ19BVF9TSUdOIHx8XG4gICAgICAoY2hhcmFjdGVyID09PSAnOicgJiYgdmFsdWUuY2hhckF0KGluZGV4ICsgMSkgPT09IENfU0xBU0gpXG4gICAgKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICghcXVldWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5rICs9IHF1ZXVlO1xuICBxdWV1ZSA9ICcnO1xuXG4gIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gIGxpbmsgKz0gY2hhcmFjdGVyO1xuICBpbmRleCsrO1xuXG4gIGlmIChjaGFyYWN0ZXIgPT09IENfQVRfU0lHTikge1xuICAgIGhhc0F0Q2hhcmFjdGVyID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXG4gICAgICBjaGFyYWN0ZXIgIT09ICc6JyB8fFxuICAgICAgdmFsdWUuY2hhckF0KGluZGV4ICsgMSkgIT09IENfU0xBU0hcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsaW5rICs9IENfU0xBU0g7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAod2hpdGVzcGFjZShjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PT0gQ19HVCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gIGlmICghcXVldWUgfHwgY2hhcmFjdGVyICE9PSBDX0dUKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmIC0gbmV2ZXIgdXNlZCAoeWV0KSAqL1xuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsaW5rICs9IHF1ZXVlO1xuICBjb250ZW50ID0gbGluaztcbiAgc3VidmFsdWUgKz0gbGluayArIGNoYXJhY3RlcjtcbiAgbm93ID0gZWF0Lm5vdygpO1xuICBub3cuY29sdW1uKys7XG4gIG5vdy5vZmZzZXQrKztcblxuICBpZiAoaGFzQXRDaGFyYWN0ZXIpIHtcbiAgICBpZiAobGluay5zbGljZSgwLCBNQUlMVE9fTEVOR1RIKS50b0xvd2VyQ2FzZSgpID09PSBNQUlMVE8pIHtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cihNQUlMVE9fTEVOR1RIKTtcbiAgICAgIG5vdy5jb2x1bW4gKz0gTUFJTFRPX0xFTkdUSDtcbiAgICAgIG5vdy5vZmZzZXQgKz0gTUFJTFRPX0xFTkdUSDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluayA9IE1BSUxUTyArIGxpbms7XG4gICAgfVxuICB9XG5cbiAgLyogVGVtcG9yYXJpbHkgcmVtb3ZlIGFsbCB0b2tlbml6ZXJzIGV4Y2VwdCB0ZXh0IGluIGF1dG9saW5rcy4gKi9cbiAgdG9rZW5pemVycyA9IHNlbGYuaW5saW5lVG9rZW5pemVycztcbiAgc2VsZi5pbmxpbmVUb2tlbml6ZXJzID0ge3RleHQ6IHRva2VuaXplcnMudGV4dH07XG5cbiAgZXhpdCA9IHNlbGYuZW50ZXJMaW5rKCk7XG5cbiAgY29udGVudCA9IHNlbGYudG9rZW5pemVJbmxpbmUoY29udGVudCwgbm93KTtcblxuICBzZWxmLmlubGluZVRva2VuaXplcnMgPSB0b2tlbml6ZXJzO1xuICBleGl0KCk7XG5cbiAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe1xuICAgIHR5cGU6ICdsaW5rJyxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB1cmw6IGRlY29kZShsaW5rLCB7bm9uVGVybWluYXRlZDogZmFsc2V9KSxcbiAgICBjaGlsZHJlbjogY29udGVudFxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFKQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/auto-link.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/blockquote.js": -/*!***************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/blockquote.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar interrupt = __webpack_require__(/*! ../util/interrupt */ \"../node_modules/remark-parse/lib/util/interrupt.js\");\n\nmodule.exports = blockquote;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_GT = '>';\n/* Tokenise a blockquote. */\n\nfunction blockquote(eat, value, silent) {\n var self = this;\n var offsets = self.offset;\n var tokenizers = self.blockTokenizers;\n var interruptors = self.interruptBlockquote;\n var now = eat.now();\n var currentLine = now.line;\n var length = value.length;\n var values = [];\n var contents = [];\n var indents = [];\n var add;\n var index = 0;\n var character;\n var rest;\n var nextIndex;\n var content;\n var line;\n var startIndex;\n var prefixed;\n var exit;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n index++;\n }\n\n if (value.charAt(index) !== C_GT) {\n return;\n }\n\n if (silent) {\n return true;\n }\n\n index = 0;\n\n while (index < length) {\n nextIndex = value.indexOf(C_NEWLINE, index);\n startIndex = index;\n prefixed = false;\n\n if (nextIndex === -1) {\n nextIndex = length;\n }\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n index++;\n }\n\n if (value.charAt(index) === C_GT) {\n index++;\n prefixed = true;\n\n if (value.charAt(index) === C_SPACE) {\n index++;\n }\n } else {\n index = startIndex;\n }\n\n content = value.slice(index, nextIndex);\n\n if (!prefixed && !trim(content)) {\n index = startIndex;\n break;\n }\n\n if (!prefixed) {\n rest = value.slice(index);\n /* Check if the following code contains a possible\n * block. */\n\n if (interrupt(interruptors, tokenizers, self, [eat, rest, true])) {\n break;\n }\n }\n\n line = startIndex === index ? content : value.slice(startIndex, nextIndex);\n indents.push(index - startIndex);\n values.push(line);\n contents.push(content);\n index = nextIndex + 1;\n }\n\n index = -1;\n length = indents.length;\n add = eat(values.join(C_NEWLINE));\n\n while (++index < length) {\n offsets[currentLine] = (offsets[currentLine] || 0) + indents[index];\n currentLine++;\n }\n\n exit = self.enterBlock();\n contents = self.tokenizeBlock(contents.join(C_NEWLINE), now);\n exit();\n return add({\n type: 'blockquote',\n children: contents\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvYmxvY2txdW90ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9ibG9ja3F1b3RlLmpzPzczZTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJpbSA9IHJlcXVpcmUoJ3RyaW0nKTtcbnZhciBpbnRlcnJ1cHQgPSByZXF1aXJlKCcuLi91dGlsL2ludGVycnVwdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJsb2NrcXVvdGU7XG5cbnZhciBDX05FV0xJTkUgPSAnXFxuJztcbnZhciBDX1RBQiA9ICdcXHQnO1xudmFyIENfU1BBQ0UgPSAnICc7XG52YXIgQ19HVCA9ICc+JztcblxuLyogVG9rZW5pc2UgYSBibG9ja3F1b3RlLiAqL1xuZnVuY3Rpb24gYmxvY2txdW90ZShlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb2Zmc2V0cyA9IHNlbGYub2Zmc2V0O1xuICB2YXIgdG9rZW5pemVycyA9IHNlbGYuYmxvY2tUb2tlbml6ZXJzO1xuICB2YXIgaW50ZXJydXB0b3JzID0gc2VsZi5pbnRlcnJ1cHRCbG9ja3F1b3RlO1xuICB2YXIgbm93ID0gZWF0Lm5vdygpO1xuICB2YXIgY3VycmVudExpbmUgPSBub3cubGluZTtcbiAgdmFyIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgY29udGVudHMgPSBbXTtcbiAgdmFyIGluZGVudHMgPSBbXTtcbiAgdmFyIGFkZDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGNoYXJhY3RlcjtcbiAgdmFyIHJlc3Q7XG4gIHZhciBuZXh0SW5kZXg7XG4gIHZhciBjb250ZW50O1xuICB2YXIgbGluZTtcbiAgdmFyIHN0YXJ0SW5kZXg7XG4gIHZhciBwcmVmaXhlZDtcbiAgdmFyIGV4aXQ7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgIT09IENfU1BBQ0UgJiYgY2hhcmFjdGVyICE9PSBDX1RBQikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICh2YWx1ZS5jaGFyQXQoaW5kZXgpICE9PSBDX0dUKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIG5leHRJbmRleCA9IHZhbHVlLmluZGV4T2YoQ19ORVdMSU5FLCBpbmRleCk7XG4gICAgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgIHByZWZpeGVkID0gZmFsc2U7XG5cbiAgICBpZiAobmV4dEluZGV4ID09PSAtMSkge1xuICAgICAgbmV4dEluZGV4ID0gbGVuZ3RoO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgaWYgKGNoYXJhY3RlciAhPT0gQ19TUEFDRSAmJiBjaGFyYWN0ZXIgIT09IENfVEFCKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5jaGFyQXQoaW5kZXgpID09PSBDX0dUKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgcHJlZml4ZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodmFsdWUuY2hhckF0KGluZGV4KSA9PT0gQ19TUEFDRSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgfVxuXG4gICAgY29udGVudCA9IHZhbHVlLnNsaWNlKGluZGV4LCBuZXh0SW5kZXgpO1xuXG4gICAgaWYgKCFwcmVmaXhlZCAmJiAhdHJpbShjb250ZW50KSkge1xuICAgICAgaW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCFwcmVmaXhlZCkge1xuICAgICAgcmVzdCA9IHZhbHVlLnNsaWNlKGluZGV4KTtcblxuICAgICAgLyogQ2hlY2sgaWYgdGhlIGZvbGxvd2luZyBjb2RlIGNvbnRhaW5zIGEgcG9zc2libGVcbiAgICAgICAqIGJsb2NrLiAqL1xuICAgICAgaWYgKGludGVycnVwdChpbnRlcnJ1cHRvcnMsIHRva2VuaXplcnMsIHNlbGYsIFtlYXQsIHJlc3QsIHRydWVdKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaW5lID0gc3RhcnRJbmRleCA9PT0gaW5kZXggPyBjb250ZW50IDogdmFsdWUuc2xpY2Uoc3RhcnRJbmRleCwgbmV4dEluZGV4KTtcblxuICAgIGluZGVudHMucHVzaChpbmRleCAtIHN0YXJ0SW5kZXgpO1xuICAgIHZhbHVlcy5wdXNoKGxpbmUpO1xuICAgIGNvbnRlbnRzLnB1c2goY29udGVudCk7XG5cbiAgICBpbmRleCA9IG5leHRJbmRleCArIDE7XG4gIH1cblxuICBpbmRleCA9IC0xO1xuICBsZW5ndGggPSBpbmRlbnRzLmxlbmd0aDtcbiAgYWRkID0gZWF0KHZhbHVlcy5qb2luKENfTkVXTElORSkpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2Zmc2V0c1tjdXJyZW50TGluZV0gPSAob2Zmc2V0c1tjdXJyZW50TGluZV0gfHwgMCkgKyBpbmRlbnRzW2luZGV4XTtcbiAgICBjdXJyZW50TGluZSsrO1xuICB9XG5cbiAgZXhpdCA9IHNlbGYuZW50ZXJCbG9jaygpO1xuICBjb250ZW50cyA9IHNlbGYudG9rZW5pemVCbG9jayhjb250ZW50cy5qb2luKENfTkVXTElORSksIG5vdyk7XG4gIGV4aXQoKTtcblxuICByZXR1cm4gYWRkKHtcbiAgICB0eXBlOiAnYmxvY2txdW90ZScsXG4gICAgY2hpbGRyZW46IGNvbnRlbnRzXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/blockquote.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/break.js": -/*!**********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/break.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar locate = __webpack_require__(/*! ../locate/break */ \"../node_modules/remark-parse/lib/locate/break.js\");\n\nmodule.exports = hardBreak;\nhardBreak.locator = locate;\nvar MIN_BREAK_LENGTH = 2;\n\nfunction hardBreak(eat, value, silent) {\n var length = value.length;\n var index = -1;\n var queue = '';\n var character;\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character === '\\n') {\n if (index < MIN_BREAK_LENGTH) {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n queue += character;\n return eat(queue)({\n type: 'break'\n });\n }\n\n if (character !== ' ') {\n return;\n }\n\n queue += character;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvYnJlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvYnJlYWsuanM/MjllMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBsb2NhdGUgPSByZXF1aXJlKCcuLi9sb2NhdGUvYnJlYWsnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBoYXJkQnJlYWs7XG5oYXJkQnJlYWsubG9jYXRvciA9IGxvY2F0ZTtcblxudmFyIE1JTl9CUkVBS19MRU5HVEggPSAyO1xuXG5mdW5jdGlvbiBoYXJkQnJlYWsoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgcXVldWUgPSAnJztcbiAgdmFyIGNoYXJhY3RlcjtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgaWYgKGluZGV4IDwgTUlOX0JSRUFLX0xFTkdUSCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAtIG5ldmVyIHVzZWQgKHlldCkgKi9cbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcblxuICAgICAgcmV0dXJuIGVhdChxdWV1ZSkoe3R5cGU6ICdicmVhayd9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSAnICcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/break.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/code-fenced.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/code-fenced.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim-trailing-lines */ \"../node_modules/trim-trailing-lines/index.js\");\n\nmodule.exports = fencedCode;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_TILDE = '~';\nvar C_TICK = '`';\nvar MIN_FENCE_COUNT = 3;\nvar CODE_INDENT_COUNT = 4;\n\nfunction fencedCode(eat, value, silent) {\n var self = this;\n var settings = self.options;\n var length = value.length + 1;\n var index = 0;\n var subvalue = '';\n var fenceCount;\n var marker;\n var character;\n var flag;\n var queue;\n var content;\n var exdentedContent;\n var closing;\n var exdentedClosing;\n var indent;\n var now;\n\n if (!settings.gfm) {\n return;\n }\n /* Eat initial spacing. */\n\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n indent = index;\n /* Eat the fence. */\n\n character = value.charAt(index);\n\n if (character !== C_TILDE && character !== C_TICK) {\n return;\n }\n\n index++;\n marker = character;\n fenceCount = 1;\n subvalue += character;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== marker) {\n break;\n }\n\n subvalue += character;\n fenceCount++;\n index++;\n }\n\n if (fenceCount < MIN_FENCE_COUNT) {\n return;\n }\n /* Eat spacing before flag. */\n\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n /* Eat flag. */\n\n\n flag = '';\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_NEWLINE || character === C_TILDE || character === C_TICK) {\n break;\n }\n\n if (character === C_SPACE || character === C_TAB) {\n queue += character;\n } else {\n flag += queue + character;\n queue = '';\n }\n\n index++;\n }\n\n character = value.charAt(index);\n\n if (character && character !== C_NEWLINE) {\n return;\n }\n\n if (silent) {\n return true;\n }\n\n now = eat.now();\n now.column += subvalue.length;\n now.offset += subvalue.length;\n subvalue += flag;\n flag = self.decode.raw(self.unescape(flag), now);\n\n if (queue) {\n subvalue += queue;\n }\n\n queue = '';\n closing = '';\n exdentedClosing = '';\n content = '';\n exdentedContent = '';\n /* Eat content. */\n\n while (index < length) {\n character = value.charAt(index);\n content += closing;\n exdentedContent += exdentedClosing;\n closing = '';\n exdentedClosing = '';\n\n if (character !== C_NEWLINE) {\n content += character;\n exdentedClosing += character;\n index++;\n continue;\n }\n /* Add the newline to `subvalue` if its the first\n * character. Otherwise, add it to the `closing`\n * queue. */\n\n\n if (content) {\n closing += character;\n exdentedClosing += character;\n } else {\n subvalue += character;\n }\n\n queue = '';\n index++;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n closing += queue;\n exdentedClosing += queue.slice(indent);\n\n if (queue.length >= CODE_INDENT_COUNT) {\n continue;\n }\n\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== marker) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n closing += queue;\n exdentedClosing += queue;\n\n if (queue.length < fenceCount) {\n continue;\n }\n\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n closing += character;\n exdentedClosing += character;\n index++;\n }\n\n if (!character || character === C_NEWLINE) {\n break;\n }\n }\n\n subvalue += content + closing;\n return eat(subvalue)({\n type: 'code',\n lang: flag || null,\n value: trim(exdentedContent)\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvY29kZS1mZW5jZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvY29kZS1mZW5jZWQuanM/N2Y5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0cmltID0gcmVxdWlyZSgndHJpbS10cmFpbGluZy1saW5lcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZlbmNlZENvZGU7XG5cbnZhciBDX05FV0xJTkUgPSAnXFxuJztcbnZhciBDX1RBQiA9ICdcXHQnO1xudmFyIENfU1BBQ0UgPSAnICc7XG52YXIgQ19USUxERSA9ICd+JztcbnZhciBDX1RJQ0sgPSAnYCc7XG5cbnZhciBNSU5fRkVOQ0VfQ09VTlQgPSAzO1xudmFyIENPREVfSU5ERU5UX0NPVU5UID0gNDtcblxuZnVuY3Rpb24gZmVuY2VkQ29kZShlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc2V0dGluZ3MgPSBzZWxmLm9wdGlvbnM7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGggKyAxO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgc3VidmFsdWUgPSAnJztcbiAgdmFyIGZlbmNlQ291bnQ7XG4gIHZhciBtYXJrZXI7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBmbGFnO1xuICB2YXIgcXVldWU7XG4gIHZhciBjb250ZW50O1xuICB2YXIgZXhkZW50ZWRDb250ZW50O1xuICB2YXIgY2xvc2luZztcbiAgdmFyIGV4ZGVudGVkQ2xvc2luZztcbiAgdmFyIGluZGVudDtcbiAgdmFyIG5vdztcblxuICBpZiAoIXNldHRpbmdzLmdmbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qIEVhdCBpbml0aWFsIHNwYWNpbmcuICovXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmIGNoYXJhY3RlciAhPT0gQ19UQUIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaW5kZW50ID0gaW5kZXg7XG5cbiAgLyogRWF0IHRoZSBmZW5jZS4gKi9cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICBpZiAoY2hhcmFjdGVyICE9PSBDX1RJTERFICYmIGNoYXJhY3RlciAhPT0gQ19USUNLKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW5kZXgrKztcbiAgbWFya2VyID0gY2hhcmFjdGVyO1xuICBmZW5jZUNvdW50ID0gMTtcbiAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBtYXJrZXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICBmZW5jZUNvdW50Kys7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChmZW5jZUNvdW50IDwgTUlOX0ZFTkNFX0NPVU5UKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogRWF0IHNwYWNpbmcgYmVmb3JlIGZsYWcuICovXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmIGNoYXJhY3RlciAhPT0gQ19UQUIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgLyogRWF0IGZsYWcuICovXG4gIGZsYWcgPSAnJztcbiAgcXVldWUgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhcmFjdGVyID09PSBDX05FV0xJTkUgfHxcbiAgICAgIGNoYXJhY3RlciA9PT0gQ19USUxERSB8fFxuICAgICAgY2hhcmFjdGVyID09PSBDX1RJQ0tcbiAgICApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfU1BBQ0UgfHwgY2hhcmFjdGVyID09PSBDX1RBQikge1xuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnICs9IHF1ZXVlICsgY2hhcmFjdGVyO1xuICAgICAgcXVldWUgPSAnJztcbiAgICB9XG5cbiAgICBpbmRleCsrO1xuICB9XG5cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICBpZiAoY2hhcmFjdGVyICYmIGNoYXJhY3RlciAhPT0gQ19ORVdMSU5FKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbm93ID0gZWF0Lm5vdygpO1xuICBub3cuY29sdW1uICs9IHN1YnZhbHVlLmxlbmd0aDtcbiAgbm93Lm9mZnNldCArPSBzdWJ2YWx1ZS5sZW5ndGg7XG5cbiAgc3VidmFsdWUgKz0gZmxhZztcbiAgZmxhZyA9IHNlbGYuZGVjb2RlLnJhdyhzZWxmLnVuZXNjYXBlKGZsYWcpLCBub3cpO1xuXG4gIGlmIChxdWV1ZSkge1xuICAgIHN1YnZhbHVlICs9IHF1ZXVlO1xuICB9XG5cbiAgcXVldWUgPSAnJztcbiAgY2xvc2luZyA9ICcnO1xuICBleGRlbnRlZENsb3NpbmcgPSAnJztcbiAgY29udGVudCA9ICcnO1xuICBleGRlbnRlZENvbnRlbnQgPSAnJztcblxuICAvKiBFYXQgY29udGVudC4gKi9cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgICBjb250ZW50ICs9IGNsb3Npbmc7XG4gICAgZXhkZW50ZWRDb250ZW50ICs9IGV4ZGVudGVkQ2xvc2luZztcbiAgICBjbG9zaW5nID0gJyc7XG4gICAgZXhkZW50ZWRDbG9zaW5nID0gJyc7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDX05FV0xJTkUpIHtcbiAgICAgIGNvbnRlbnQgKz0gY2hhcmFjdGVyO1xuICAgICAgZXhkZW50ZWRDbG9zaW5nICs9IGNoYXJhY3RlcjtcbiAgICAgIGluZGV4Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKiBBZGQgdGhlIG5ld2xpbmUgdG8gYHN1YnZhbHVlYCBpZiBpdHMgdGhlIGZpcnN0XG4gICAgICogY2hhcmFjdGVyLiAgT3RoZXJ3aXNlLCBhZGQgaXQgdG8gdGhlIGBjbG9zaW5nYFxuICAgICAqIHF1ZXVlLiAqL1xuICAgIGlmIChjb250ZW50KSB7XG4gICAgICBjbG9zaW5nICs9IGNoYXJhY3RlcjtcbiAgICAgIGV4ZGVudGVkQ2xvc2luZyArPSBjaGFyYWN0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICB9XG5cbiAgICBxdWV1ZSA9ICcnO1xuICAgIGluZGV4Kys7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgIT09IENfU1BBQ0UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgY2xvc2luZyArPSBxdWV1ZTtcbiAgICBleGRlbnRlZENsb3NpbmcgKz0gcXVldWUuc2xpY2UoaW5kZW50KTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGggPj0gQ09ERV9JTkRFTlRfQ09VTlQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHF1ZXVlID0gJyc7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgIT09IG1hcmtlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBjbG9zaW5nICs9IHF1ZXVlO1xuICAgIGV4ZGVudGVkQ2xvc2luZyArPSBxdWV1ZTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGggPCBmZW5jZUNvdW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBxdWV1ZSA9ICcnO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmIGNoYXJhY3RlciAhPT0gQ19UQUIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNsb3NpbmcgKz0gY2hhcmFjdGVyO1xuICAgICAgZXhkZW50ZWRDbG9zaW5nICs9IGNoYXJhY3RlcjtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFyYWN0ZXIgfHwgY2hhcmFjdGVyID09PSBDX05FV0xJTkUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHN1YnZhbHVlICs9IGNvbnRlbnQgKyBjbG9zaW5nO1xuXG4gIHJldHVybiBlYXQoc3VidmFsdWUpKHtcbiAgICB0eXBlOiAnY29kZScsXG4gICAgbGFuZzogZmxhZyB8fCBudWxsLFxuICAgIHZhbHVlOiB0cmltKGV4ZGVudGVkQ29udGVudClcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/code-fenced.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/code-indented.js": -/*!******************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/code-indented.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar trim = __webpack_require__(/*! trim-trailing-lines */ \"../node_modules/trim-trailing-lines/index.js\");\n\nmodule.exports = indentedCode;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar CODE_INDENT_COUNT = 4;\nvar CODE_INDENT = repeat(C_SPACE, CODE_INDENT_COUNT);\n/* Tokenise indented code. */\n\nfunction indentedCode(eat, value, silent) {\n var index = -1;\n var length = value.length;\n var subvalue = '';\n var content = '';\n var subvalueQueue = '';\n var contentQueue = '';\n var character;\n var blankQueue;\n var indent;\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (indent) {\n indent = false;\n subvalue += subvalueQueue;\n content += contentQueue;\n subvalueQueue = '';\n contentQueue = '';\n\n if (character === C_NEWLINE) {\n subvalueQueue = character;\n contentQueue = character;\n } else {\n subvalue += character;\n content += character;\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (!character || character === C_NEWLINE) {\n contentQueue = character;\n subvalueQueue = character;\n break;\n }\n\n subvalue += character;\n content += character;\n }\n }\n } else if (character === C_SPACE && value.charAt(index + 1) === character && value.charAt(index + 2) === character && value.charAt(index + 3) === character) {\n subvalueQueue += CODE_INDENT;\n index += 3;\n indent = true;\n } else if (character === C_TAB) {\n subvalueQueue += character;\n indent = true;\n } else {\n blankQueue = '';\n\n while (character === C_TAB || character === C_SPACE) {\n blankQueue += character;\n character = value.charAt(++index);\n }\n\n if (character !== C_NEWLINE) {\n break;\n }\n\n subvalueQueue += blankQueue + character;\n contentQueue += character;\n }\n }\n\n if (content) {\n if (silent) {\n return true;\n }\n\n return eat(subvalue)({\n type: 'code',\n lang: null,\n value: trim(content)\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvY29kZS1pbmRlbnRlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9jb2RlLWluZGVudGVkLmpzPzUzNTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCd0cmltLXRyYWlsaW5nLWxpbmVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5kZW50ZWRDb2RlO1xuXG52YXIgQ19ORVdMSU5FID0gJ1xcbic7XG52YXIgQ19UQUIgPSAnXFx0JztcbnZhciBDX1NQQUNFID0gJyAnO1xuXG52YXIgQ09ERV9JTkRFTlRfQ09VTlQgPSA0O1xudmFyIENPREVfSU5ERU5UID0gcmVwZWF0KENfU1BBQ0UsIENPREVfSU5ERU5UX0NPVU5UKTtcblxuLyogVG9rZW5pc2UgaW5kZW50ZWQgY29kZS4gKi9cbmZ1bmN0aW9uIGluZGVudGVkQ29kZShlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBzdWJ2YWx1ZSA9ICcnO1xuICB2YXIgY29udGVudCA9ICcnO1xuICB2YXIgc3VidmFsdWVRdWV1ZSA9ICcnO1xuICB2YXIgY29udGVudFF1ZXVlID0gJyc7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBibGFua1F1ZXVlO1xuICB2YXIgaW5kZW50O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIGluZGVudCA9IGZhbHNlO1xuXG4gICAgICBzdWJ2YWx1ZSArPSBzdWJ2YWx1ZVF1ZXVlO1xuICAgICAgY29udGVudCArPSBjb250ZW50UXVldWU7XG4gICAgICBzdWJ2YWx1ZVF1ZXVlID0gJyc7XG4gICAgICBjb250ZW50UXVldWUgPSAnJztcblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19ORVdMSU5FKSB7XG4gICAgICAgIHN1YnZhbHVlUXVldWUgPSBjaGFyYWN0ZXI7XG4gICAgICAgIGNvbnRlbnRRdWV1ZSA9IGNoYXJhY3RlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgY29udGVudCArPSBjaGFyYWN0ZXI7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICAgICAgaWYgKCFjaGFyYWN0ZXIgfHwgY2hhcmFjdGVyID09PSBDX05FV0xJTkUpIHtcbiAgICAgICAgICAgIGNvbnRlbnRRdWV1ZSA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgIHN1YnZhbHVlUXVldWUgPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJ2YWx1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgY29udGVudCArPSBjaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2hhcmFjdGVyID09PSBDX1NQQUNFICYmXG4gICAgICB2YWx1ZS5jaGFyQXQoaW5kZXggKyAxKSA9PT0gY2hhcmFjdGVyICYmXG4gICAgICB2YWx1ZS5jaGFyQXQoaW5kZXggKyAyKSA9PT0gY2hhcmFjdGVyICYmXG4gICAgICB2YWx1ZS5jaGFyQXQoaW5kZXggKyAzKSA9PT0gY2hhcmFjdGVyXG4gICAgKSB7XG4gICAgICBzdWJ2YWx1ZVF1ZXVlICs9IENPREVfSU5ERU5UO1xuICAgICAgaW5kZXggKz0gMztcbiAgICAgIGluZGVudCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfVEFCKSB7XG4gICAgICBzdWJ2YWx1ZVF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGluZGVudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJsYW5rUXVldWUgPSAnJztcblxuICAgICAgd2hpbGUgKGNoYXJhY3RlciA9PT0gQ19UQUIgfHwgY2hhcmFjdGVyID09PSBDX1NQQUNFKSB7XG4gICAgICAgIGJsYW5rUXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgIT09IENfTkVXTElORSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc3VidmFsdWVRdWV1ZSArPSBibGFua1F1ZXVlICsgY2hhcmFjdGVyO1xuICAgICAgY29udGVudFF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGVudCkge1xuICAgIGlmIChzaWxlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBlYXQoc3VidmFsdWUpKHtcbiAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgIGxhbmc6IG51bGwsXG4gICAgICB2YWx1ZTogdHJpbShjb250ZW50KVxuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0JBO0FBa0NBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/code-indented.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/code-inline.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/code-inline.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/code-inline */ \"../node_modules/remark-parse/lib/locate/code-inline.js\");\n\nmodule.exports = inlineCode;\ninlineCode.locator = locate;\nvar C_TICK = '`';\n/* Tokenise inline code. */\n\nfunction inlineCode(eat, value, silent) {\n var length = value.length;\n var index = 0;\n var queue = '';\n var tickQueue = '';\n var contentQueue;\n var subqueue;\n var count;\n var openingCount;\n var subvalue;\n var character;\n var found;\n var next;\n\n while (index < length) {\n if (value.charAt(index) !== C_TICK) {\n break;\n }\n\n queue += C_TICK;\n index++;\n }\n\n if (!queue) {\n return;\n }\n\n subvalue = queue;\n openingCount = index;\n queue = '';\n next = value.charAt(index);\n count = 0;\n\n while (index < length) {\n character = next;\n next = value.charAt(index + 1);\n\n if (character === C_TICK) {\n count++;\n tickQueue += character;\n } else {\n count = 0;\n queue += character;\n }\n\n if (count && next !== C_TICK) {\n if (count === openingCount) {\n subvalue += queue + tickQueue;\n found = true;\n break;\n }\n\n queue += tickQueue;\n tickQueue = '';\n }\n\n index++;\n }\n\n if (!found) {\n if (openingCount % 2 !== 0) {\n return;\n }\n\n queue = '';\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n contentQueue = '';\n subqueue = '';\n length = queue.length;\n index = -1;\n\n while (++index < length) {\n character = queue.charAt(index);\n\n if (whitespace(character)) {\n subqueue += character;\n continue;\n }\n\n if (subqueue) {\n if (contentQueue) {\n contentQueue += subqueue;\n }\n\n subqueue = '';\n }\n\n contentQueue += character;\n }\n\n return eat(subvalue)({\n type: 'inlineCode',\n value: contentQueue\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvY29kZS1pbmxpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvY29kZS1pbmxpbmUuanM/ZmU1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB3aGl0ZXNwYWNlID0gcmVxdWlyZSgnaXMtd2hpdGVzcGFjZS1jaGFyYWN0ZXInKTtcbnZhciBsb2NhdGUgPSByZXF1aXJlKCcuLi9sb2NhdGUvY29kZS1pbmxpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbmxpbmVDb2RlO1xuaW5saW5lQ29kZS5sb2NhdG9yID0gbG9jYXRlO1xuXG52YXIgQ19USUNLID0gJ2AnO1xuXG4vKiBUb2tlbmlzZSBpbmxpbmUgY29kZS4gKi9cbmZ1bmN0aW9uIGlubGluZUNvZGUoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBxdWV1ZSA9ICcnO1xuICB2YXIgdGlja1F1ZXVlID0gJyc7XG4gIHZhciBjb250ZW50UXVldWU7XG4gIHZhciBzdWJxdWV1ZTtcbiAgdmFyIGNvdW50O1xuICB2YXIgb3BlbmluZ0NvdW50O1xuICB2YXIgc3VidmFsdWU7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBmb3VuZDtcbiAgdmFyIG5leHQ7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHZhbHVlLmNoYXJBdChpbmRleCkgIT09IENfVElDSykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcXVldWUgKz0gQ19USUNLO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAoIXF1ZXVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3VidmFsdWUgPSBxdWV1ZTtcbiAgb3BlbmluZ0NvdW50ID0gaW5kZXg7XG4gIHF1ZXVlID0gJyc7XG4gIG5leHQgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICBjb3VudCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gbmV4dDtcbiAgICBuZXh0ID0gdmFsdWUuY2hhckF0KGluZGV4ICsgMSk7XG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSBDX1RJQ0spIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICB0aWNrUXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ICYmIG5leHQgIT09IENfVElDSykge1xuICAgICAgaWYgKGNvdW50ID09PSBvcGVuaW5nQ291bnQpIHtcbiAgICAgICAgc3VidmFsdWUgKz0gcXVldWUgKyB0aWNrUXVldWU7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlICs9IHRpY2tRdWV1ZTtcbiAgICAgIHRpY2tRdWV1ZSA9ICcnO1xuICAgIH1cblxuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAoIWZvdW5kKSB7XG4gICAgaWYgKG9wZW5pbmdDb3VudCAlIDIgIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBxdWV1ZSA9ICcnO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmIC0gbmV2ZXIgdXNlZCAoeWV0KSAqL1xuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb250ZW50UXVldWUgPSAnJztcbiAgc3VicXVldWUgPSAnJztcbiAgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xuICBpbmRleCA9IC0xO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gcXVldWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmICh3aGl0ZXNwYWNlKGNoYXJhY3RlcikpIHtcbiAgICAgIHN1YnF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzdWJxdWV1ZSkge1xuICAgICAgaWYgKGNvbnRlbnRRdWV1ZSkge1xuICAgICAgICBjb250ZW50UXVldWUgKz0gc3VicXVldWU7XG4gICAgICB9XG5cbiAgICAgIHN1YnF1ZXVlID0gJyc7XG4gICAgfVxuXG4gICAgY29udGVudFF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBlYXQoc3VidmFsdWUpKHtcbiAgICB0eXBlOiAnaW5saW5lQ29kZScsXG4gICAgdmFsdWU6IGNvbnRlbnRRdWV1ZVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/code-inline.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/definition.js": -/*!***************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/definition.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar normalize = __webpack_require__(/*! ../util/normalize */ \"../node_modules/remark-parse/lib/util/normalize.js\");\n\nmodule.exports = definition;\ndefinition.notInList = true;\ndefinition.notInBlock = true;\nvar C_DOUBLE_QUOTE = '\"';\nvar C_SINGLE_QUOTE = '\\'';\nvar C_BACKSLASH = '\\\\';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_COLON = ':';\nvar C_LT = '<';\nvar C_GT = '>';\n\nfunction definition(eat, value, silent) {\n var self = this;\n var commonmark = self.options.commonmark;\n var index = 0;\n var length = value.length;\n var subvalue = '';\n var beforeURL;\n var beforeTitle;\n var queue;\n var character;\n var test;\n var identifier;\n var url;\n var title;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (character !== C_BRACKET_OPEN) {\n return;\n }\n\n index++;\n subvalue += character;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_BRACKET_CLOSE) {\n break;\n } else if (character === C_BACKSLASH) {\n queue += character;\n index++;\n character = value.charAt(index);\n }\n\n queue += character;\n index++;\n }\n\n if (!queue || value.charAt(index) !== C_BRACKET_CLOSE || value.charAt(index + 1) !== C_COLON) {\n return;\n }\n\n identifier = queue;\n subvalue += queue + C_BRACKET_CLOSE + C_COLON;\n index = subvalue.length;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE && character !== C_NEWLINE) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n character = value.charAt(index);\n queue = '';\n beforeURL = subvalue;\n\n if (character === C_LT) {\n index++;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!isEnclosedURLCharacter(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (character === isEnclosedURLCharacter.delimiter) {\n subvalue += C_LT + queue + character;\n index++;\n } else {\n if (commonmark) {\n return;\n }\n\n index -= queue.length + 1;\n queue = '';\n }\n }\n\n if (!queue) {\n while (index < length) {\n character = value.charAt(index);\n\n if (!isUnclosedURLCharacter(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n subvalue += queue;\n }\n\n if (!queue) {\n return;\n }\n\n url = queue;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE && character !== C_NEWLINE) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n test = null;\n\n if (character === C_DOUBLE_QUOTE) {\n test = C_DOUBLE_QUOTE;\n } else if (character === C_SINGLE_QUOTE) {\n test = C_SINGLE_QUOTE;\n } else if (character === C_PAREN_OPEN) {\n test = C_PAREN_CLOSE;\n }\n\n if (!test) {\n queue = '';\n index = subvalue.length;\n } else if (queue) {\n subvalue += queue + character;\n index = subvalue.length;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === test) {\n break;\n }\n\n if (character === C_NEWLINE) {\n index++;\n character = value.charAt(index);\n\n if (character === C_NEWLINE || character === test) {\n return;\n }\n\n queue += C_NEWLINE;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (character !== test) {\n return;\n }\n\n beforeTitle = subvalue;\n subvalue += queue + character;\n index++;\n title = queue;\n queue = '';\n } else {\n return;\n }\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (!character || character === C_NEWLINE) {\n if (silent) {\n return true;\n }\n\n beforeURL = eat(beforeURL).test().end;\n url = self.decode.raw(self.unescape(url), beforeURL, {\n nonTerminated: false\n });\n\n if (title) {\n beforeTitle = eat(beforeTitle).test().end;\n title = self.decode.raw(self.unescape(title), beforeTitle);\n }\n\n return eat(subvalue)({\n type: 'definition',\n identifier: normalize(identifier),\n title: title || null,\n url: url\n });\n }\n}\n/* Check if `character` can be inside an enclosed URI. */\n\n\nfunction isEnclosedURLCharacter(character) {\n return character !== C_GT && character !== C_BRACKET_OPEN && character !== C_BRACKET_CLOSE;\n}\n\nisEnclosedURLCharacter.delimiter = C_GT;\n/* Check if `character` can be inside an unclosed URI. */\n\nfunction isUnclosedURLCharacter(character) {\n return character !== C_BRACKET_OPEN && character !== C_BRACKET_CLOSE && !whitespace(character);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZGVmaW5pdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9kZWZpbml0aW9uLmpzP2YyNDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG52YXIgbm9ybWFsaXplID0gcmVxdWlyZSgnLi4vdXRpbC9ub3JtYWxpemUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uO1xuZGVmaW5pdGlvbi5ub3RJbkxpc3QgPSB0cnVlO1xuZGVmaW5pdGlvbi5ub3RJbkJsb2NrID0gdHJ1ZTtcblxudmFyIENfRE9VQkxFX1FVT1RFID0gJ1wiJztcbnZhciBDX1NJTkdMRV9RVU9URSA9ICdcXCcnO1xudmFyIENfQkFDS1NMQVNIID0gJ1xcXFwnO1xudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX0JSQUNLRVRfT1BFTiA9ICdbJztcbnZhciBDX0JSQUNLRVRfQ0xPU0UgPSAnXSc7XG52YXIgQ19QQVJFTl9PUEVOID0gJygnO1xudmFyIENfUEFSRU5fQ0xPU0UgPSAnKSc7XG52YXIgQ19DT0xPTiA9ICc6JztcbnZhciBDX0xUID0gJzwnO1xudmFyIENfR1QgPSAnPic7XG5cbmZ1bmN0aW9uIGRlZmluaXRpb24oZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGNvbW1vbm1hcmsgPSBzZWxmLm9wdGlvbnMuY29tbW9ubWFyaztcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgdmFyIHN1YnZhbHVlID0gJyc7XG4gIHZhciBiZWZvcmVVUkw7XG4gIHZhciBiZWZvcmVUaXRsZTtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgY2hhcmFjdGVyO1xuICB2YXIgdGVzdDtcbiAgdmFyIGlkZW50aWZpZXI7XG4gIHZhciB1cmw7XG4gIHZhciB0aXRsZTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ19TUEFDRSAmJiBjaGFyYWN0ZXIgIT09IENfVEFCKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzdWJ2YWx1ZSArPSBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgaWYgKGNoYXJhY3RlciAhPT0gQ19CUkFDS0VUX09QRU4pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpbmRleCsrO1xuICBzdWJ2YWx1ZSArPSBjaGFyYWN0ZXI7XG4gIHF1ZXVlID0gJyc7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfQlJBQ0tFVF9DTE9TRSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfQkFDS1NMQVNIKSB7XG4gICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICBpbmRleCsrO1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChcbiAgICAhcXVldWUgfHxcbiAgICB2YWx1ZS5jaGFyQXQoaW5kZXgpICE9PSBDX0JSQUNLRVRfQ0xPU0UgfHxcbiAgICB2YWx1ZS5jaGFyQXQoaW5kZXggKyAxKSAhPT0gQ19DT0xPTlxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZGVudGlmaWVyID0gcXVldWU7XG4gIHN1YnZhbHVlICs9IHF1ZXVlICsgQ19CUkFDS0VUX0NMT1NFICsgQ19DT0xPTjtcbiAgaW5kZXggPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gIHF1ZXVlID0gJyc7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChcbiAgICAgIGNoYXJhY3RlciAhPT0gQ19UQUIgJiZcbiAgICAgIGNoYXJhY3RlciAhPT0gQ19TUEFDRSAmJlxuICAgICAgY2hhcmFjdGVyICE9PSBDX05FV0xJTkVcbiAgICApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgcXVldWUgPSAnJztcbiAgYmVmb3JlVVJMID0gc3VidmFsdWU7XG5cbiAgaWYgKGNoYXJhY3RlciA9PT0gQ19MVCkge1xuICAgIGluZGV4Kys7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmICghaXNFbmNsb3NlZFVSTENoYXJhY3RlcihjaGFyYWN0ZXIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSBpc0VuY2xvc2VkVVJMQ2hhcmFjdGVyLmRlbGltaXRlcikge1xuICAgICAgc3VidmFsdWUgKz0gQ19MVCArIHF1ZXVlICsgY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbW1vbm1hcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbmRleCAtPSBxdWV1ZS5sZW5ndGggKyAxO1xuICAgICAgcXVldWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBpZiAoIXF1ZXVlKSB7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoIWlzVW5jbG9zZWRVUkxDaGFyYWN0ZXIoY2hhcmFjdGVyKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBzdWJ2YWx1ZSArPSBxdWV1ZTtcbiAgfVxuXG4gIGlmICghcXVldWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB1cmwgPSBxdWV1ZTtcbiAgcXVldWUgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhcmFjdGVyICE9PSBDX1RBQiAmJlxuICAgICAgY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmXG4gICAgICBjaGFyYWN0ZXIgIT09IENfTkVXTElORVxuICAgICkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICB0ZXN0ID0gbnVsbDtcblxuICBpZiAoY2hhcmFjdGVyID09PSBDX0RPVUJMRV9RVU9URSkge1xuICAgIHRlc3QgPSBDX0RPVUJMRV9RVU9URTtcbiAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfU0lOR0xFX1FVT1RFKSB7XG4gICAgdGVzdCA9IENfU0lOR0xFX1FVT1RFO1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQ19QQVJFTl9PUEVOKSB7XG4gICAgdGVzdCA9IENfUEFSRU5fQ0xPU0U7XG4gIH1cblxuICBpZiAoIXRlc3QpIHtcbiAgICBxdWV1ZSA9ICcnO1xuICAgIGluZGV4ID0gc3VidmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHF1ZXVlKSB7XG4gICAgc3VidmFsdWUgKz0gcXVldWUgKyBjaGFyYWN0ZXI7XG4gICAgaW5kZXggPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gICAgcXVldWUgPSAnJztcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gdGVzdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19ORVdMSU5FKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19ORVdMSU5FIHx8IGNoYXJhY3RlciA9PT0gdGVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXVlICs9IENfTkVXTElORTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gdGVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJlZm9yZVRpdGxlID0gc3VidmFsdWU7XG4gICAgc3VidmFsdWUgKz0gcXVldWUgKyBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgICB0aXRsZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgIT09IENfVEFCICYmIGNoYXJhY3RlciAhPT0gQ19TUEFDRSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gIGlmICghY2hhcmFjdGVyIHx8IGNoYXJhY3RlciA9PT0gQ19ORVdMSU5FKSB7XG4gICAgaWYgKHNpbGVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYmVmb3JlVVJMID0gZWF0KGJlZm9yZVVSTCkudGVzdCgpLmVuZDtcbiAgICB1cmwgPSBzZWxmLmRlY29kZS5yYXcoc2VsZi51bmVzY2FwZSh1cmwpLCBiZWZvcmVVUkwsIHtub25UZXJtaW5hdGVkOiBmYWxzZX0pO1xuXG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBiZWZvcmVUaXRsZSA9IGVhdChiZWZvcmVUaXRsZSkudGVzdCgpLmVuZDtcbiAgICAgIHRpdGxlID0gc2VsZi5kZWNvZGUucmF3KHNlbGYudW5lc2NhcGUodGl0bGUpLCBiZWZvcmVUaXRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe1xuICAgICAgdHlwZTogJ2RlZmluaXRpb24nLFxuICAgICAgaWRlbnRpZmllcjogbm9ybWFsaXplKGlkZW50aWZpZXIpLFxuICAgICAgdGl0bGU6IHRpdGxlIHx8IG51bGwsXG4gICAgICB1cmw6IHVybFxuICAgIH0pO1xuICB9XG59XG5cbi8qIENoZWNrIGlmIGBjaGFyYWN0ZXJgIGNhbiBiZSBpbnNpZGUgYW4gZW5jbG9zZWQgVVJJLiAqL1xuZnVuY3Rpb24gaXNFbmNsb3NlZFVSTENoYXJhY3RlcihjaGFyYWN0ZXIpIHtcbiAgcmV0dXJuIGNoYXJhY3RlciAhPT0gQ19HVCAmJlxuICAgIGNoYXJhY3RlciAhPT0gQ19CUkFDS0VUX09QRU4gJiZcbiAgICBjaGFyYWN0ZXIgIT09IENfQlJBQ0tFVF9DTE9TRTtcbn1cblxuaXNFbmNsb3NlZFVSTENoYXJhY3Rlci5kZWxpbWl0ZXIgPSBDX0dUO1xuXG4vKiBDaGVjayBpZiBgY2hhcmFjdGVyYCBjYW4gYmUgaW5zaWRlIGFuIHVuY2xvc2VkIFVSSS4gKi9cbmZ1bmN0aW9uIGlzVW5jbG9zZWRVUkxDaGFyYWN0ZXIoY2hhcmFjdGVyKSB7XG4gIHJldHVybiBjaGFyYWN0ZXIgIT09IENfQlJBQ0tFVF9PUEVOICYmXG4gICAgY2hhcmFjdGVyICE9PSBDX0JSQUNLRVRfQ0xPU0UgJiZcbiAgICAhd2hpdGVzcGFjZShjaGFyYWN0ZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckNBO0FBdUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/definition.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/delete.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/delete.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/delete */ \"../node_modules/remark-parse/lib/locate/delete.js\");\n\nmodule.exports = strikethrough;\nstrikethrough.locator = locate;\nvar C_TILDE = '~';\nvar DOUBLE = '~~';\n\nfunction strikethrough(eat, value, silent) {\n var self = this;\n var character = '';\n var previous = '';\n var preceding = '';\n var subvalue = '';\n var index;\n var length;\n var now;\n\n if (!self.options.gfm || value.charAt(0) !== C_TILDE || value.charAt(1) !== C_TILDE || whitespace(value.charAt(2))) {\n return;\n }\n\n index = 1;\n length = value.length;\n now = eat.now();\n now.column += 2;\n now.offset += 2;\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character === C_TILDE && previous === C_TILDE && (!preceding || !whitespace(preceding))) {\n /* istanbul ignore if - never used (yet) */\n if (silent) {\n return true;\n }\n\n return eat(DOUBLE + subvalue + DOUBLE)({\n type: 'delete',\n children: self.tokenizeInline(subvalue, now)\n });\n }\n\n subvalue += previous;\n preceding = previous;\n previous = character;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZGVsZXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL2RlbGV0ZS5qcz8zYjhjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHdoaXRlc3BhY2UgPSByZXF1aXJlKCdpcy13aGl0ZXNwYWNlLWNoYXJhY3RlcicpO1xudmFyIGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2xvY2F0ZS9kZWxldGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpa2V0aHJvdWdoO1xuc3RyaWtldGhyb3VnaC5sb2NhdG9yID0gbG9jYXRlO1xuXG52YXIgQ19USUxERSA9ICd+JztcbnZhciBET1VCTEUgPSAnfn4nO1xuXG5mdW5jdGlvbiBzdHJpa2V0aHJvdWdoKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjaGFyYWN0ZXIgPSAnJztcbiAgdmFyIHByZXZpb3VzID0gJyc7XG4gIHZhciBwcmVjZWRpbmcgPSAnJztcbiAgdmFyIHN1YnZhbHVlID0gJyc7XG4gIHZhciBpbmRleDtcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIG5vdztcblxuICBpZiAoXG4gICAgIXNlbGYub3B0aW9ucy5nZm0gfHxcbiAgICB2YWx1ZS5jaGFyQXQoMCkgIT09IENfVElMREUgfHxcbiAgICB2YWx1ZS5jaGFyQXQoMSkgIT09IENfVElMREUgfHxcbiAgICB3aGl0ZXNwYWNlKHZhbHVlLmNoYXJBdCgyKSlcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW5kZXggPSAxO1xuICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIG5vdyA9IGVhdC5ub3coKTtcbiAgbm93LmNvbHVtbiArPSAyO1xuICBub3cub2Zmc2V0ICs9IDI7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhcmFjdGVyID09PSBDX1RJTERFICYmXG4gICAgICBwcmV2aW91cyA9PT0gQ19USUxERSAmJlxuICAgICAgKCFwcmVjZWRpbmcgfHwgIXdoaXRlc3BhY2UocHJlY2VkaW5nKSlcbiAgICApIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAtIG5ldmVyIHVzZWQgKHlldCkgKi9cbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlYXQoRE9VQkxFICsgc3VidmFsdWUgKyBET1VCTEUpKHtcbiAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIGNoaWxkcmVuOiBzZWxmLnRva2VuaXplSW5saW5lKHN1YnZhbHVlLCBub3cpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdWJ2YWx1ZSArPSBwcmV2aW91cztcbiAgICBwcmVjZWRpbmcgPSBwcmV2aW91cztcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/delete.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/emphasis.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/emphasis.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar word = __webpack_require__(/*! is-word-character */ \"../node_modules/is-word-character/index.js\");\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/emphasis */ \"../node_modules/remark-parse/lib/locate/emphasis.js\");\n\nmodule.exports = emphasis;\nemphasis.locator = locate;\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\n\nfunction emphasis(eat, value, silent) {\n var self = this;\n var index = 0;\n var character = value.charAt(index);\n var now;\n var pedantic;\n var marker;\n var queue;\n var subvalue;\n var length;\n var prev;\n\n if (character !== C_ASTERISK && character !== C_UNDERSCORE) {\n return;\n }\n\n pedantic = self.options.pedantic;\n subvalue = character;\n marker = character;\n length = value.length;\n index++;\n queue = '';\n character = '';\n\n if (pedantic && whitespace(value.charAt(index))) {\n return;\n }\n\n while (index < length) {\n prev = character;\n character = value.charAt(index);\n\n if (character === marker && (!pedantic || !whitespace(prev))) {\n character = value.charAt(++index);\n\n if (character !== marker) {\n if (!trim(queue) || prev === marker) {\n return;\n }\n\n if (!pedantic && marker === C_UNDERSCORE && word(character)) {\n queue += marker;\n continue;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n now = eat.now();\n now.column++;\n now.offset++;\n return eat(subvalue + queue + marker)({\n type: 'emphasis',\n children: self.tokenizeInline(queue, now)\n });\n }\n\n queue += marker;\n }\n\n if (!pedantic && character === '\\\\') {\n queue += character;\n character = value.charAt(++index);\n }\n\n queue += character;\n index++;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZW1waGFzaXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZW1waGFzaXMuanM/MmFjMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0cmltID0gcmVxdWlyZSgndHJpbScpO1xudmFyIHdvcmQgPSByZXF1aXJlKCdpcy13b3JkLWNoYXJhY3RlcicpO1xudmFyIHdoaXRlc3BhY2UgPSByZXF1aXJlKCdpcy13aGl0ZXNwYWNlLWNoYXJhY3RlcicpO1xudmFyIGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2xvY2F0ZS9lbXBoYXNpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcGhhc2lzO1xuZW1waGFzaXMubG9jYXRvciA9IGxvY2F0ZTtcblxudmFyIENfQVNURVJJU0sgPSAnKic7XG52YXIgQ19VTkRFUlNDT1JFID0gJ18nO1xuXG5mdW5jdGlvbiBlbXBoYXNpcyhlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgdmFyIG5vdztcbiAgdmFyIHBlZGFudGljO1xuICB2YXIgbWFya2VyO1xuICB2YXIgcXVldWU7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIHByZXY7XG5cbiAgaWYgKGNoYXJhY3RlciAhPT0gQ19BU1RFUklTSyAmJiBjaGFyYWN0ZXIgIT09IENfVU5ERVJTQ09SRSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBlZGFudGljID0gc2VsZi5vcHRpb25zLnBlZGFudGljO1xuICBzdWJ2YWx1ZSA9IGNoYXJhY3RlcjtcbiAgbWFya2VyID0gY2hhcmFjdGVyO1xuICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIGluZGV4Kys7XG4gIHF1ZXVlID0gJyc7XG4gIGNoYXJhY3RlciA9ICcnO1xuXG4gIGlmIChwZWRhbnRpYyAmJiB3aGl0ZXNwYWNlKHZhbHVlLmNoYXJBdChpbmRleCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgcHJldiA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gbWFya2VyICYmICghcGVkYW50aWMgfHwgIXdoaXRlc3BhY2UocHJldikpKSB7XG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgIT09IG1hcmtlcikge1xuICAgICAgICBpZiAoIXRyaW0ocXVldWUpIHx8IHByZXYgPT09IG1hcmtlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGVkYW50aWMgJiYgbWFya2VyID09PSBDX1VOREVSU0NPUkUgJiYgd29yZChjaGFyYWN0ZXIpKSB7XG4gICAgICAgICAgcXVldWUgKz0gbWFya2VyO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmIC0gbmV2ZXIgdXNlZCAoeWV0KSAqL1xuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBub3cgPSBlYXQubm93KCk7XG4gICAgICAgIG5vdy5jb2x1bW4rKztcbiAgICAgICAgbm93Lm9mZnNldCsrO1xuXG4gICAgICAgIHJldHVybiBlYXQoc3VidmFsdWUgKyBxdWV1ZSArIG1hcmtlcikoe1xuICAgICAgICAgIHR5cGU6ICdlbXBoYXNpcycsXG4gICAgICAgICAgY2hpbGRyZW46IHNlbGYudG9rZW5pemVJbmxpbmUocXVldWUsIG5vdylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlICs9IG1hcmtlcjtcbiAgICB9XG5cbiAgICBpZiAoIXBlZGFudGljICYmIGNoYXJhY3RlciA9PT0gJ1xcXFwnKSB7XG4gICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG4gICAgfVxuXG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/emphasis.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/escape.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/escape.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar locate = __webpack_require__(/*! ../locate/escape */ \"../node_modules/remark-parse/lib/locate/escape.js\");\n\nmodule.exports = escape;\nescape.locator = locate;\n\nfunction escape(eat, value, silent) {\n var self = this;\n var character;\n var node;\n\n if (value.charAt(0) === '\\\\') {\n character = value.charAt(1);\n\n if (self.escape.indexOf(character) !== -1) {\n /* istanbul ignore if - never used (yet) */\n if (silent) {\n return true;\n }\n\n if (character === '\\n') {\n node = {\n type: 'break'\n };\n } else {\n node = {\n type: 'text',\n value: character\n };\n }\n\n return eat('\\\\' + character)(node);\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZXNjYXBlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL2VzY2FwZS5qcz8wNDQ4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2xvY2F0ZS9lc2NhcGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG5lc2NhcGUubG9jYXRvciA9IGxvY2F0ZTtcblxuZnVuY3Rpb24gZXNjYXBlKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBub2RlO1xuXG4gIGlmICh2YWx1ZS5jaGFyQXQoMCkgPT09ICdcXFxcJykge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgxKTtcblxuICAgIGlmIChzZWxmLmVzY2FwZS5pbmRleE9mKGNoYXJhY3RlcikgIT09IC0xKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBuZXZlciB1c2VkICh5ZXQpICovXG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgICBub2RlID0ge3R5cGU6ICdicmVhayd9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdmFsdWU6IGNoYXJhY3RlclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWF0KCdcXFxcJyArIGNoYXJhY3Rlcikobm9kZSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/escape.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/footnote-definition.js": -/*!************************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/footnote-definition.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar normalize = __webpack_require__(/*! ../util/normalize */ \"../node_modules/remark-parse/lib/util/normalize.js\");\n\nmodule.exports = footnoteDefinition;\nfootnoteDefinition.notInList = true;\nfootnoteDefinition.notInBlock = true;\nvar C_BACKSLASH = '\\\\';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_CARET = '^';\nvar C_COLON = ':';\nvar EXPRESSION_INITIAL_TAB = /^( {4}|\\t)?/gm;\n\nfunction footnoteDefinition(eat, value, silent) {\n var self = this;\n var offsets = self.offset;\n var index;\n var length;\n var subvalue;\n var now;\n var currentLine;\n var content;\n var queue;\n var subqueue;\n var character;\n var identifier;\n var add;\n var exit;\n\n if (!self.options.footnotes) {\n return;\n }\n\n index = 0;\n length = value.length;\n subvalue = '';\n now = eat.now();\n currentLine = now.line;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n if (value.charAt(index) !== C_BRACKET_OPEN || value.charAt(index + 1) !== C_CARET) {\n return;\n }\n\n subvalue += C_BRACKET_OPEN + C_CARET;\n index = subvalue.length;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_BRACKET_CLOSE) {\n break;\n } else if (character === C_BACKSLASH) {\n queue += character;\n index++;\n character = value.charAt(index);\n }\n\n queue += character;\n index++;\n }\n\n if (!queue || value.charAt(index) !== C_BRACKET_CLOSE || value.charAt(index + 1) !== C_COLON) {\n return;\n }\n\n if (silent) {\n return true;\n }\n\n identifier = normalize(queue);\n subvalue += queue + C_BRACKET_CLOSE + C_COLON;\n index = subvalue.length;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n\n now.column += subvalue.length;\n now.offset += subvalue.length;\n queue = '';\n content = '';\n subqueue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_NEWLINE) {\n subqueue = character;\n index++;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_NEWLINE) {\n break;\n }\n\n subqueue += character;\n index++;\n }\n\n queue += subqueue;\n subqueue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE) {\n break;\n }\n\n subqueue += character;\n index++;\n }\n\n if (subqueue.length === 0) {\n break;\n }\n\n queue += subqueue;\n }\n\n if (queue) {\n content += queue;\n queue = '';\n }\n\n content += character;\n index++;\n }\n\n subvalue += content;\n content = content.replace(EXPRESSION_INITIAL_TAB, function (line) {\n offsets[currentLine] = (offsets[currentLine] || 0) + line.length;\n currentLine++;\n return '';\n });\n add = eat(subvalue);\n exit = self.enterBlock();\n content = self.tokenizeBlock(content, now);\n exit();\n return add({\n type: 'footnoteDefinition',\n identifier: identifier,\n children: content\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvZm9vdG5vdGUtZGVmaW5pdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9mb290bm90ZS1kZWZpbml0aW9uLmpzP2VkNjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG52YXIgbm9ybWFsaXplID0gcmVxdWlyZSgnLi4vdXRpbC9ub3JtYWxpemUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmb290bm90ZURlZmluaXRpb247XG5mb290bm90ZURlZmluaXRpb24ubm90SW5MaXN0ID0gdHJ1ZTtcbmZvb3Rub3RlRGVmaW5pdGlvbi5ub3RJbkJsb2NrID0gdHJ1ZTtcblxudmFyIENfQkFDS1NMQVNIID0gJ1xcXFwnO1xudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX0JSQUNLRVRfT1BFTiA9ICdbJztcbnZhciBDX0JSQUNLRVRfQ0xPU0UgPSAnXSc7XG52YXIgQ19DQVJFVCA9ICdeJztcbnZhciBDX0NPTE9OID0gJzonO1xuXG52YXIgRVhQUkVTU0lPTl9JTklUSUFMX1RBQiA9IC9eKCB7NH18XFx0KT8vZ207XG5cbmZ1bmN0aW9uIGZvb3Rub3RlRGVmaW5pdGlvbihlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb2Zmc2V0cyA9IHNlbGYub2Zmc2V0O1xuICB2YXIgaW5kZXg7XG4gIHZhciBsZW5ndGg7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIG5vdztcbiAgdmFyIGN1cnJlbnRMaW5lO1xuICB2YXIgY29udGVudDtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgc3VicXVldWU7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBpZGVudGlmaWVyO1xuICB2YXIgYWRkO1xuICB2YXIgZXhpdDtcblxuICBpZiAoIXNlbGYub3B0aW9ucy5mb290bm90ZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpbmRleCA9IDA7XG4gIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgc3VidmFsdWUgPSAnJztcbiAgbm93ID0gZWF0Lm5vdygpO1xuICBjdXJyZW50TGluZSA9IG5vdy5saW5lO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoIXdoaXRlc3BhY2UoY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAoXG4gICAgdmFsdWUuY2hhckF0KGluZGV4KSAhPT0gQ19CUkFDS0VUX09QRU4gfHxcbiAgICB2YWx1ZS5jaGFyQXQoaW5kZXggKyAxKSAhPT0gQ19DQVJFVFxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdWJ2YWx1ZSArPSBDX0JSQUNLRVRfT1BFTiArIENfQ0FSRVQ7XG4gIGluZGV4ID0gc3VidmFsdWUubGVuZ3RoO1xuICBxdWV1ZSA9ICcnO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSBDX0JSQUNLRVRfQ0xPU0UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX0JBQ0tTTEFTSCkge1xuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgfVxuXG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAoXG4gICAgIXF1ZXVlIHx8XG4gICAgdmFsdWUuY2hhckF0KGluZGV4KSAhPT0gQ19CUkFDS0VUX0NMT1NFIHx8XG4gICAgdmFsdWUuY2hhckF0KGluZGV4ICsgMSkgIT09IENfQ09MT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWRlbnRpZmllciA9IG5vcm1hbGl6ZShxdWV1ZSk7XG4gIHN1YnZhbHVlICs9IHF1ZXVlICsgQ19CUkFDS0VUX0NMT1NFICsgQ19DT0xPTjtcbiAgaW5kZXggPSBzdWJ2YWx1ZS5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgIT09IENfVEFCICYmIGNoYXJhY3RlciAhPT0gQ19TUEFDRSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBub3cuY29sdW1uICs9IHN1YnZhbHVlLmxlbmd0aDtcbiAgbm93Lm9mZnNldCArPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gIHF1ZXVlID0gJyc7XG4gIGNvbnRlbnQgPSAnJztcbiAgc3VicXVldWUgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19ORVdMSU5FKSB7XG4gICAgICBzdWJxdWV1ZSA9IGNoYXJhY3RlcjtcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgIT09IENfTkVXTElORSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VicXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSArPSBzdWJxdWV1ZTtcbiAgICAgIHN1YnF1ZXVlID0gJyc7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgIT09IENfU1BBQ0UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcXVldWUgKz0gc3VicXVldWU7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXVlKSB7XG4gICAgICBjb250ZW50ICs9IHF1ZXVlO1xuICAgICAgcXVldWUgPSAnJztcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgc3VidmFsdWUgKz0gY29udGVudDtcblxuICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKEVYUFJFU1NJT05fSU5JVElBTF9UQUIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgb2Zmc2V0c1tjdXJyZW50TGluZV0gPSAob2Zmc2V0c1tjdXJyZW50TGluZV0gfHwgMCkgKyBsaW5lLmxlbmd0aDtcbiAgICBjdXJyZW50TGluZSsrO1xuXG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICBhZGQgPSBlYXQoc3VidmFsdWUpO1xuXG4gIGV4aXQgPSBzZWxmLmVudGVyQmxvY2soKTtcbiAgY29udGVudCA9IHNlbGYudG9rZW5pemVCbG9jayhjb250ZW50LCBub3cpO1xuICBleGl0KCk7XG5cbiAgcmV0dXJuIGFkZCh7XG4gICAgdHlwZTogJ2Zvb3Rub3RlRGVmaW5pdGlvbicsXG4gICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICBjaGlsZHJlbjogY29udGVudFxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUpBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/footnote-definition.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/heading-atx.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/heading-atx.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = atxHeading;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_HASH = '#';\nvar MAX_ATX_COUNT = 6;\n\nfunction atxHeading(eat, value, silent) {\n var self = this;\n var settings = self.options;\n var length = value.length + 1;\n var index = -1;\n var now = eat.now();\n var subvalue = '';\n var content = '';\n var character;\n var queue;\n var depth;\n /* Eat initial spacing. */\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n index--;\n break;\n }\n\n subvalue += character;\n }\n /* Eat hashes. */\n\n\n depth = 0;\n\n while (++index <= length) {\n character = value.charAt(index);\n\n if (character !== C_HASH) {\n index--;\n break;\n }\n\n subvalue += character;\n depth++;\n }\n\n if (depth > MAX_ATX_COUNT) {\n return;\n }\n\n if (!depth || !settings.pedantic && value.charAt(index + 1) === C_HASH) {\n return;\n }\n\n length = value.length + 1;\n /* Eat intermediate white-space. */\n\n queue = '';\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n index--;\n break;\n }\n\n queue += character;\n }\n /* Exit when not in pedantic mode without spacing. */\n\n\n if (!settings.pedantic && queue.length === 0 && character && character !== C_NEWLINE) {\n return;\n }\n\n if (silent) {\n return true;\n }\n /* Eat content. */\n\n\n subvalue += queue;\n queue = '';\n content = '';\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (!character || character === C_NEWLINE) {\n break;\n }\n\n if (character !== C_SPACE && character !== C_TAB && character !== C_HASH) {\n content += queue + character;\n queue = '';\n continue;\n }\n\n while (character === C_SPACE || character === C_TAB) {\n queue += character;\n character = value.charAt(++index);\n }\n\n while (character === C_HASH) {\n queue += character;\n character = value.charAt(++index);\n }\n\n while (character === C_SPACE || character === C_TAB) {\n queue += character;\n character = value.charAt(++index);\n }\n\n index--;\n }\n\n now.column += subvalue.length;\n now.offset += subvalue.length;\n subvalue += content + queue;\n return eat(subvalue)({\n type: 'heading',\n depth: depth,\n children: self.tokenizeInline(content, now)\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaGVhZGluZy1hdHguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaGVhZGluZy1hdHguanM/OWQyMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gYXR4SGVhZGluZztcblxudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX0hBU0ggPSAnIyc7XG5cbnZhciBNQVhfQVRYX0NPVU5UID0gNjtcblxuZnVuY3Rpb24gYXR4SGVhZGluZyhlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc2V0dGluZ3MgPSBzZWxmLm9wdGlvbnM7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGggKyAxO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIG5vdyA9IGVhdC5ub3coKTtcbiAgdmFyIHN1YnZhbHVlID0gJyc7XG4gIHZhciBjb250ZW50ID0gJyc7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBxdWV1ZTtcbiAgdmFyIGRlcHRoO1xuXG4gIC8qIEVhdCBpbml0aWFsIHNwYWNpbmcuICovXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgIT09IENfU1BBQ0UgJiYgY2hhcmFjdGVyICE9PSBDX1RBQikge1xuICAgICAgaW5kZXgtLTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIC8qIEVhdCBoYXNoZXMuICovXG4gIGRlcHRoID0gMDtcblxuICB3aGlsZSAoKytpbmRleCA8PSBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ19IQVNIKSB7XG4gICAgICBpbmRleC0tO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICAgIGRlcHRoKys7XG4gIH1cblxuICBpZiAoZGVwdGggPiBNQVhfQVRYX0NPVU5UKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKFxuICAgICFkZXB0aCB8fFxuICAgICghc2V0dGluZ3MucGVkYW50aWMgJiYgdmFsdWUuY2hhckF0KGluZGV4ICsgMSkgPT09IENfSEFTSClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoICsgMTtcblxuICAvKiBFYXQgaW50ZXJtZWRpYXRlIHdoaXRlLXNwYWNlLiAqL1xuICBxdWV1ZSA9ICcnO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgIT09IENfU1BBQ0UgJiYgY2hhcmFjdGVyICE9PSBDX1RBQikge1xuICAgICAgaW5kZXgtLTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIC8qIEV4aXQgd2hlbiBub3QgaW4gcGVkYW50aWMgbW9kZSB3aXRob3V0IHNwYWNpbmcuICovXG4gIGlmIChcbiAgICAhc2V0dGluZ3MucGVkYW50aWMgJiZcbiAgICBxdWV1ZS5sZW5ndGggPT09IDAgJiZcbiAgICBjaGFyYWN0ZXIgJiZcbiAgICBjaGFyYWN0ZXIgIT09IENfTkVXTElORVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBFYXQgY29udGVudC4gKi9cbiAgc3VidmFsdWUgKz0gcXVldWU7XG4gIHF1ZXVlID0gJyc7XG4gIGNvbnRlbnQgPSAnJztcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoIWNoYXJhY3RlciB8fCBjaGFyYWN0ZXIgPT09IENfTkVXTElORSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmXG4gICAgICBjaGFyYWN0ZXIgIT09IENfVEFCICYmXG4gICAgICBjaGFyYWN0ZXIgIT09IENfSEFTSFxuICAgICkge1xuICAgICAgY29udGVudCArPSBxdWV1ZSArIGNoYXJhY3RlcjtcbiAgICAgIHF1ZXVlID0gJyc7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB3aGlsZSAoY2hhcmFjdGVyID09PSBDX1NQQUNFIHx8IGNoYXJhY3RlciA9PT0gQ19UQUIpIHtcbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgrK2luZGV4KTtcbiAgICB9XG5cbiAgICB3aGlsZSAoY2hhcmFjdGVyID09PSBDX0hBU0gpIHtcbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgrK2luZGV4KTtcbiAgICB9XG5cbiAgICB3aGlsZSAoY2hhcmFjdGVyID09PSBDX1NQQUNFIHx8IGNoYXJhY3RlciA9PT0gQ19UQUIpIHtcbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgrK2luZGV4KTtcbiAgICB9XG5cbiAgICBpbmRleC0tO1xuICB9XG5cbiAgbm93LmNvbHVtbiArPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gIG5vdy5vZmZzZXQgKz0gc3VidmFsdWUubGVuZ3RoO1xuICBzdWJ2YWx1ZSArPSBjb250ZW50ICsgcXVldWU7XG5cbiAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe1xuICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICBkZXB0aDogZGVwdGgsXG4gICAgY2hpbGRyZW46IHNlbGYudG9rZW5pemVJbmxpbmUoY29udGVudCwgbm93KVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/heading-atx.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/heading-setext.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/heading-setext.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = setextHeading;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_EQUALS = '=';\nvar C_DASH = '-';\nvar MAX_HEADING_INDENT = 3;\n/* Map of characters which can be used to mark setext\n * headers, mapping to their corresponding depth. */\n\nvar SETEXT_MARKERS = {};\nSETEXT_MARKERS[C_EQUALS] = 1;\nSETEXT_MARKERS[C_DASH] = 2;\n\nfunction setextHeading(eat, value, silent) {\n var self = this;\n var now = eat.now();\n var length = value.length;\n var index = -1;\n var subvalue = '';\n var content;\n var queue;\n var character;\n var marker;\n var depth;\n /* Eat initial indentation. */\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character !== C_SPACE || index >= MAX_HEADING_INDENT) {\n index--;\n break;\n }\n\n subvalue += character;\n }\n /* Eat content. */\n\n\n content = '';\n queue = '';\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character === C_NEWLINE) {\n index--;\n break;\n }\n\n if (character === C_SPACE || character === C_TAB) {\n queue += character;\n } else {\n content += queue + character;\n queue = '';\n }\n }\n\n now.column += subvalue.length;\n now.offset += subvalue.length;\n subvalue += content + queue;\n /* Ensure the content is followed by a newline and a\n * valid marker. */\n\n character = value.charAt(++index);\n marker = value.charAt(++index);\n\n if (character !== C_NEWLINE || !SETEXT_MARKERS[marker]) {\n return;\n }\n\n subvalue += character;\n /* Eat Setext-line. */\n\n queue = marker;\n depth = SETEXT_MARKERS[marker];\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character !== marker) {\n if (character !== C_NEWLINE) {\n return;\n }\n\n index--;\n break;\n }\n\n queue += character;\n }\n\n if (silent) {\n return true;\n }\n\n return eat(subvalue + queue)({\n type: 'heading',\n depth: depth,\n children: self.tokenizeInline(content, now)\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaGVhZGluZy1zZXRleHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaGVhZGluZy1zZXRleHQuanM/N2U1NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0ZXh0SGVhZGluZztcblxudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX0VRVUFMUyA9ICc9JztcbnZhciBDX0RBU0ggPSAnLSc7XG5cbnZhciBNQVhfSEVBRElOR19JTkRFTlQgPSAzO1xuXG4vKiBNYXAgb2YgY2hhcmFjdGVycyB3aGljaCBjYW4gYmUgdXNlZCB0byBtYXJrIHNldGV4dFxuICogaGVhZGVycywgbWFwcGluZyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlcHRoLiAqL1xudmFyIFNFVEVYVF9NQVJLRVJTID0ge307XG5cblNFVEVYVF9NQVJLRVJTW0NfRVFVQUxTXSA9IDE7XG5TRVRFWFRfTUFSS0VSU1tDX0RBU0hdID0gMjtcblxuZnVuY3Rpb24gc2V0ZXh0SGVhZGluZyhlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbm93ID0gZWF0Lm5vdygpO1xuICB2YXIgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIHN1YnZhbHVlID0gJyc7XG4gIHZhciBjb250ZW50O1xuICB2YXIgcXVldWU7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBtYXJrZXI7XG4gIHZhciBkZXB0aDtcblxuICAvKiBFYXQgaW5pdGlhbCBpbmRlbnRhdGlvbi4gKi9cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ19TUEFDRSB8fCBpbmRleCA+PSBNQVhfSEVBRElOR19JTkRFTlQpIHtcbiAgICAgIGluZGV4LS07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzdWJ2YWx1ZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICAvKiBFYXQgY29udGVudC4gKi9cbiAgY29udGVudCA9ICcnO1xuICBxdWV1ZSA9ICcnO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfTkVXTElORSkge1xuICAgICAgaW5kZXgtLTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfU1BBQ0UgfHwgY2hhcmFjdGVyID09PSBDX1RBQikge1xuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ICs9IHF1ZXVlICsgY2hhcmFjdGVyO1xuICAgICAgcXVldWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBub3cuY29sdW1uICs9IHN1YnZhbHVlLmxlbmd0aDtcbiAgbm93Lm9mZnNldCArPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gIHN1YnZhbHVlICs9IGNvbnRlbnQgKyBxdWV1ZTtcblxuICAvKiBFbnN1cmUgdGhlIGNvbnRlbnQgaXMgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGFuZCBhXG4gICAqIHZhbGlkIG1hcmtlci4gKi9cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KCsraW5kZXgpO1xuICBtYXJrZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG5cbiAgaWYgKGNoYXJhY3RlciAhPT0gQ19ORVdMSU5FIHx8ICFTRVRFWFRfTUFSS0VSU1ttYXJrZXJdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuXG4gIC8qIEVhdCBTZXRleHQtbGluZS4gKi9cbiAgcXVldWUgPSBtYXJrZXI7XG4gIGRlcHRoID0gU0VURVhUX01BUktFUlNbbWFya2VyXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBtYXJrZXIpIHtcbiAgICAgIGlmIChjaGFyYWN0ZXIgIT09IENfTkVXTElORSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGluZGV4LS07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZWF0KHN1YnZhbHVlICsgcXVldWUpKHtcbiAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgZGVwdGg6IGRlcHRoLFxuICAgIGNoaWxkcmVuOiBzZWxmLnRva2VuaXplSW5saW5lKGNvbnRlbnQsIG5vdylcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/heading-setext.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/html-block.js": -/*!***************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/html-block.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar openCloseTag = __webpack_require__(/*! ../util/html */ \"../node_modules/remark-parse/lib/util/html.js\").openCloseTag;\n\nmodule.exports = blockHTML;\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_LT = '<';\n\nfunction blockHTML(eat, value, silent) {\n var self = this;\n var blocks = self.options.blocks;\n var length = value.length;\n var index = 0;\n var next;\n var line;\n var offset;\n var character;\n var count;\n var sequence;\n var subvalue;\n var sequences = [[/^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true], [/^<!--/, /-->/, true], [/^<\\?/, /\\?>/, true], [/^<![A-Za-z]/, />/, true], [/^<!\\[CDATA\\[/, /\\]\\]>/, true], [new RegExp('^</?(' + blocks.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true], [new RegExp(openCloseTag.source + '\\\\s*$'), /^$/, false]];\n /* Eat initial spacing. */\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE) {\n break;\n }\n\n index++;\n }\n\n if (value.charAt(index) !== C_LT) {\n return;\n }\n\n next = value.indexOf(C_NEWLINE, index + 1);\n next = next === -1 ? length : next;\n line = value.slice(index, next);\n offset = -1;\n count = sequences.length;\n\n while (++offset < count) {\n if (sequences[offset][0].test(line)) {\n sequence = sequences[offset];\n break;\n }\n }\n\n if (!sequence) {\n return;\n }\n\n if (silent) {\n return sequence[2];\n }\n\n index = next;\n\n if (!sequence[1].test(line)) {\n while (index < length) {\n next = value.indexOf(C_NEWLINE, index + 1);\n next = next === -1 ? length : next;\n line = value.slice(index + 1, next);\n\n if (sequence[1].test(line)) {\n if (line) {\n index = next;\n }\n\n break;\n }\n\n index = next;\n }\n }\n\n subvalue = value.slice(0, index);\n return eat(subvalue)({\n type: 'html',\n value: subvalue\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaHRtbC1ibG9jay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9odG1sLWJsb2NrLmpzPzYxMmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3BlbkNsb3NlVGFnID0gcmVxdWlyZSgnLi4vdXRpbC9odG1sJykub3BlbkNsb3NlVGFnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJsb2NrSFRNTDtcblxudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX05FV0xJTkUgPSAnXFxuJztcbnZhciBDX0xUID0gJzwnO1xuXG5mdW5jdGlvbiBibG9ja0hUTUwoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGJsb2NrcyA9IHNlbGYub3B0aW9ucy5ibG9ja3M7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBuZXh0O1xuICB2YXIgbGluZTtcbiAgdmFyIG9mZnNldDtcbiAgdmFyIGNoYXJhY3RlcjtcbiAgdmFyIGNvdW50O1xuICB2YXIgc2VxdWVuY2U7XG4gIHZhciBzdWJ2YWx1ZTtcblxuICB2YXIgc2VxdWVuY2VzID0gW1xuICAgIFsvXjwoc2NyaXB0fHByZXxzdHlsZSkoPz0oXFxzfD58JCkpL2ksIC88XFwvKHNjcmlwdHxwcmV8c3R5bGUpPi9pLCB0cnVlXSxcbiAgICBbL148IS0tLywgLy0tPi8sIHRydWVdLFxuICAgIFsvXjxcXD8vLCAvXFw/Pi8sIHRydWVdLFxuICAgIFsvXjwhW0EtWmEtel0vLCAvPi8sIHRydWVdLFxuICAgIFsvXjwhXFxbQ0RBVEFcXFsvLCAvXFxdXFxdPi8sIHRydWVdLFxuICAgIFtuZXcgUmVnRXhwKCdePC8/KCcgKyBibG9ja3Muam9pbignfCcpICsgJykoPz0oXFxcXHN8Lz8+fCQpKScsICdpJyksIC9eJC8sIHRydWVdLFxuICAgIFtuZXcgUmVnRXhwKG9wZW5DbG9zZVRhZy5zb3VyY2UgKyAnXFxcXHMqJCcpLCAvXiQvLCBmYWxzZV1cbiAgXTtcblxuICAvKiBFYXQgaW5pdGlhbCBzcGFjaW5nLiAqL1xuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciAhPT0gQ19UQUIgJiYgY2hhcmFjdGVyICE9PSBDX1NQQUNFKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaWYgKHZhbHVlLmNoYXJBdChpbmRleCkgIT09IENfTFQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBuZXh0ID0gdmFsdWUuaW5kZXhPZihDX05FV0xJTkUsIGluZGV4ICsgMSk7XG4gIG5leHQgPSBuZXh0ID09PSAtMSA/IGxlbmd0aCA6IG5leHQ7XG4gIGxpbmUgPSB2YWx1ZS5zbGljZShpbmRleCwgbmV4dCk7XG4gIG9mZnNldCA9IC0xO1xuICBjb3VudCA9IHNlcXVlbmNlcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsrb2Zmc2V0IDwgY291bnQpIHtcbiAgICBpZiAoc2VxdWVuY2VzW29mZnNldF1bMF0udGVzdChsaW5lKSkge1xuICAgICAgc2VxdWVuY2UgPSBzZXF1ZW5jZXNbb2Zmc2V0XTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghc2VxdWVuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHNlcXVlbmNlWzJdO1xuICB9XG5cbiAgaW5kZXggPSBuZXh0O1xuXG4gIGlmICghc2VxdWVuY2VbMV0udGVzdChsaW5lKSkge1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgbmV4dCA9IHZhbHVlLmluZGV4T2YoQ19ORVdMSU5FLCBpbmRleCArIDEpO1xuICAgICAgbmV4dCA9IG5leHQgPT09IC0xID8gbGVuZ3RoIDogbmV4dDtcbiAgICAgIGxpbmUgPSB2YWx1ZS5zbGljZShpbmRleCArIDEsIG5leHQpO1xuXG4gICAgICBpZiAoc2VxdWVuY2VbMV0udGVzdChsaW5lKSkge1xuICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgIGluZGV4ID0gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpbmRleCA9IG5leHQ7XG4gICAgfVxuICB9XG5cbiAgc3VidmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpbmRleCk7XG5cbiAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe3R5cGU6ICdodG1sJywgdmFsdWU6IHN1YnZhbHVlfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFVQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/html-block.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/html-inline.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/html-inline.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar alphabetical = __webpack_require__(/*! is-alphabetical */ \"../node_modules/is-alphabetical/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/tag */ \"../node_modules/remark-parse/lib/locate/tag.js\");\n\nvar tag = __webpack_require__(/*! ../util/html */ \"../node_modules/remark-parse/lib/util/html.js\").tag;\n\nmodule.exports = inlineHTML;\ninlineHTML.locator = locate;\nvar EXPRESSION_HTML_LINK_OPEN = /^<a /i;\nvar EXPRESSION_HTML_LINK_CLOSE = /^<\\/a>/i;\n\nfunction inlineHTML(eat, value, silent) {\n var self = this;\n var length = value.length;\n var character;\n var subvalue;\n\n if (value.charAt(0) !== '<' || length < 3) {\n return;\n }\n\n character = value.charAt(1);\n\n if (!alphabetical(character) && character !== '?' && character !== '!' && character !== '/') {\n return;\n }\n\n subvalue = value.match(tag);\n\n if (!subvalue) {\n return;\n }\n /* istanbul ignore if - not used yet. */\n\n\n if (silent) {\n return true;\n }\n\n subvalue = subvalue[0];\n\n if (!self.inLink && EXPRESSION_HTML_LINK_OPEN.test(subvalue)) {\n self.inLink = true;\n } else if (self.inLink && EXPRESSION_HTML_LINK_CLOSE.test(subvalue)) {\n self.inLink = false;\n }\n\n return eat(subvalue)({\n type: 'html',\n value: subvalue\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaHRtbC1pbmxpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvaHRtbC1pbmxpbmUuanM/NDU4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbHBoYWJldGljYWwgPSByZXF1aXJlKCdpcy1hbHBoYWJldGljYWwnKTtcbnZhciBsb2NhdGUgPSByZXF1aXJlKCcuLi9sb2NhdGUvdGFnJyk7XG52YXIgdGFnID0gcmVxdWlyZSgnLi4vdXRpbC9odG1sJykudGFnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlubGluZUhUTUw7XG5pbmxpbmVIVE1MLmxvY2F0b3IgPSBsb2NhdGU7XG5cbnZhciBFWFBSRVNTSU9OX0hUTUxfTElOS19PUEVOID0gL148YSAvaTtcbnZhciBFWFBSRVNTSU9OX0hUTUxfTElOS19DTE9TRSA9IC9ePFxcL2E+L2k7XG5cbmZ1bmN0aW9uIGlubGluZUhUTUwoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgdmFyIGNoYXJhY3RlcjtcbiAgdmFyIHN1YnZhbHVlO1xuXG4gIGlmICh2YWx1ZS5jaGFyQXQoMCkgIT09ICc8JyB8fCBsZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KDEpO1xuXG4gIGlmIChcbiAgICAhYWxwaGFiZXRpY2FsKGNoYXJhY3RlcikgJiZcbiAgICBjaGFyYWN0ZXIgIT09ICc/JyAmJlxuICAgIGNoYXJhY3RlciAhPT0gJyEnICYmXG4gICAgY2hhcmFjdGVyICE9PSAnLydcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3VidmFsdWUgPSB2YWx1ZS5tYXRjaCh0YWcpO1xuXG4gIGlmICghc3VidmFsdWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBub3QgdXNlZCB5ZXQuICovXG4gIGlmIChzaWxlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN1YnZhbHVlID0gc3VidmFsdWVbMF07XG5cbiAgaWYgKCFzZWxmLmluTGluayAmJiBFWFBSRVNTSU9OX0hUTUxfTElOS19PUEVOLnRlc3Qoc3VidmFsdWUpKSB7XG4gICAgc2VsZi5pbkxpbmsgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHNlbGYuaW5MaW5rICYmIEVYUFJFU1NJT05fSFRNTF9MSU5LX0NMT1NFLnRlc3Qoc3VidmFsdWUpKSB7XG4gICAgc2VsZi5pbkxpbmsgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBlYXQoc3VidmFsdWUpKHt0eXBlOiAnaHRtbCcsIHZhbHVlOiBzdWJ2YWx1ZX0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/html-inline.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/link.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/link.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/link */ \"../node_modules/remark-parse/lib/locate/link.js\");\n\nmodule.exports = link;\nlink.locator = locate;\nvar own = {}.hasOwnProperty;\nvar C_BACKSLASH = '\\\\';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_LT = '<';\nvar C_GT = '>';\nvar C_TICK = '`';\nvar C_DOUBLE_QUOTE = '\"';\nvar C_SINGLE_QUOTE = '\\'';\n/* Map of characters, which can be used to mark link\n * and image titles. */\n\nvar LINK_MARKERS = {};\nLINK_MARKERS[C_DOUBLE_QUOTE] = C_DOUBLE_QUOTE;\nLINK_MARKERS[C_SINGLE_QUOTE] = C_SINGLE_QUOTE;\n/* Map of characters, which can be used to mark link\n * and image titles in commonmark-mode. */\n\nvar COMMONMARK_LINK_MARKERS = {};\nCOMMONMARK_LINK_MARKERS[C_DOUBLE_QUOTE] = C_DOUBLE_QUOTE;\nCOMMONMARK_LINK_MARKERS[C_SINGLE_QUOTE] = C_SINGLE_QUOTE;\nCOMMONMARK_LINK_MARKERS[C_PAREN_OPEN] = C_PAREN_CLOSE;\n\nfunction link(eat, value, silent) {\n var self = this;\n var subvalue = '';\n var index = 0;\n var character = value.charAt(0);\n var pedantic = self.options.pedantic;\n var commonmark = self.options.commonmark;\n var gfm = self.options.gfm;\n var closed;\n var count;\n var opening;\n var beforeURL;\n var beforeTitle;\n var subqueue;\n var hasMarker;\n var markers;\n var isImage;\n var content;\n var marker;\n var length;\n var title;\n var depth;\n var queue;\n var url;\n var now;\n var exit;\n var node;\n /* Detect whether this is an image. */\n\n if (character === '!') {\n isImage = true;\n subvalue = character;\n character = value.charAt(++index);\n }\n /* Eat the opening. */\n\n\n if (character !== C_BRACKET_OPEN) {\n return;\n }\n /* Exit when this is a link and we’re already inside\n * a link. */\n\n\n if (!isImage && self.inLink) {\n return;\n }\n\n subvalue += character;\n queue = '';\n index++;\n /* Eat the content. */\n\n length = value.length;\n now = eat.now();\n depth = 0;\n now.column += index;\n now.offset += index;\n\n while (index < length) {\n character = value.charAt(index);\n subqueue = character;\n\n if (character === C_TICK) {\n /* Inline-code in link content. */\n count = 1;\n\n while (value.charAt(index + 1) === C_TICK) {\n subqueue += character;\n index++;\n count++;\n }\n\n if (!opening) {\n opening = count;\n } else if (count >= opening) {\n opening = 0;\n }\n } else if (character === C_BACKSLASH) {\n /* Allow brackets to be escaped. */\n index++;\n subqueue += value.charAt(index);\n /* In GFM mode, brackets in code still count.\n * In all other modes, they don’t. This empty\n * block prevents the next statements are\n * entered. */\n } else if ((!opening || gfm) && character === C_BRACKET_OPEN) {\n depth++;\n } else if ((!opening || gfm) && character === C_BRACKET_CLOSE) {\n if (depth) {\n depth--;\n } else {\n /* Allow white-space between content and\n * url in GFM mode. */\n if (!pedantic) {\n while (index < length) {\n character = value.charAt(index + 1);\n\n if (!whitespace(character)) {\n break;\n }\n\n subqueue += character;\n index++;\n }\n }\n\n if (value.charAt(index + 1) !== C_PAREN_OPEN) {\n return;\n }\n\n subqueue += C_PAREN_OPEN;\n closed = true;\n index++;\n break;\n }\n }\n\n queue += subqueue;\n subqueue = '';\n index++;\n }\n /* Eat the content closing. */\n\n\n if (!closed) {\n return;\n }\n\n content = queue;\n subvalue += queue + subqueue;\n index++;\n /* Eat white-space. */\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n /* Eat the URL. */\n\n\n character = value.charAt(index);\n markers = commonmark ? COMMONMARK_LINK_MARKERS : LINK_MARKERS;\n queue = '';\n beforeURL = subvalue;\n\n if (character === C_LT) {\n index++;\n beforeURL += C_LT;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_GT) {\n break;\n }\n\n if (commonmark && character === '\\n') {\n return;\n }\n\n queue += character;\n index++;\n }\n\n if (value.charAt(index) !== C_GT) {\n return;\n }\n\n subvalue += C_LT + queue + C_GT;\n url = queue;\n index++;\n } else {\n character = null;\n subqueue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (subqueue && own.call(markers, character)) {\n break;\n }\n\n if (whitespace(character)) {\n if (!pedantic) {\n break;\n }\n\n subqueue += character;\n } else {\n if (character === C_PAREN_OPEN) {\n depth++;\n } else if (character === C_PAREN_CLOSE) {\n if (depth === 0) {\n break;\n }\n\n depth--;\n }\n\n queue += subqueue;\n subqueue = '';\n\n if (character === C_BACKSLASH) {\n queue += C_BACKSLASH;\n character = value.charAt(++index);\n }\n\n queue += character;\n }\n\n index++;\n }\n\n subvalue += queue;\n url = queue;\n index = subvalue.length;\n }\n /* Eat white-space. */\n\n\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n subvalue += queue;\n /* Eat the title. */\n\n if (queue && own.call(markers, character)) {\n index++;\n subvalue += character;\n queue = '';\n marker = markers[character];\n beforeTitle = subvalue;\n /* In commonmark-mode, things are pretty easy: the\n * marker cannot occur inside the title.\n *\n * Non-commonmark does, however, support nested\n * delimiters. */\n\n if (commonmark) {\n while (index < length) {\n character = value.charAt(index);\n\n if (character === marker) {\n break;\n }\n\n if (character === C_BACKSLASH) {\n queue += C_BACKSLASH;\n character = value.charAt(++index);\n }\n\n index++;\n queue += character;\n }\n\n character = value.charAt(index);\n\n if (character !== marker) {\n return;\n }\n\n title = queue;\n subvalue += queue + character;\n index++;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n subvalue += character;\n index++;\n }\n } else {\n subqueue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === marker) {\n if (hasMarker) {\n queue += marker + subqueue;\n subqueue = '';\n }\n\n hasMarker = true;\n } else if (!hasMarker) {\n queue += character;\n } else if (character === C_PAREN_CLOSE) {\n subvalue += queue + marker + subqueue;\n title = queue;\n break;\n } else if (whitespace(character)) {\n subqueue += character;\n } else {\n queue += marker + subqueue + character;\n subqueue = '';\n hasMarker = false;\n }\n\n index++;\n }\n }\n }\n\n if (value.charAt(index) !== C_PAREN_CLOSE) {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n subvalue += C_PAREN_CLOSE;\n url = self.decode.raw(self.unescape(url), eat(beforeURL).test().end, {\n nonTerminated: false\n });\n\n if (title) {\n beforeTitle = eat(beforeTitle).test().end;\n title = self.decode.raw(self.unescape(title), beforeTitle);\n }\n\n node = {\n type: isImage ? 'image' : 'link',\n title: title || null,\n url: url\n };\n\n if (isImage) {\n node.alt = self.decode.raw(self.unescape(content), now) || null;\n } else {\n exit = self.enterLink();\n node.children = self.tokenizeInline(content, now);\n exit();\n }\n\n return eat(subvalue)(node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvbGluay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9saW5rLmpzP2MxMzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG52YXIgbG9jYXRlID0gcmVxdWlyZSgnLi4vbG9jYXRlL2xpbmsnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5rO1xubGluay5sb2NhdG9yID0gbG9jYXRlO1xuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbnZhciBDX0JBQ0tTTEFTSCA9ICdcXFxcJztcbnZhciBDX0JSQUNLRVRfT1BFTiA9ICdbJztcbnZhciBDX0JSQUNLRVRfQ0xPU0UgPSAnXSc7XG52YXIgQ19QQVJFTl9PUEVOID0gJygnO1xudmFyIENfUEFSRU5fQ0xPU0UgPSAnKSc7XG52YXIgQ19MVCA9ICc8JztcbnZhciBDX0dUID0gJz4nO1xudmFyIENfVElDSyA9ICdgJztcbnZhciBDX0RPVUJMRV9RVU9URSA9ICdcIic7XG52YXIgQ19TSU5HTEVfUVVPVEUgPSAnXFwnJztcblxuLyogTWFwIG9mIGNoYXJhY3RlcnMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1hcmsgbGlua1xuICogYW5kIGltYWdlIHRpdGxlcy4gKi9cbnZhciBMSU5LX01BUktFUlMgPSB7fTtcblxuTElOS19NQVJLRVJTW0NfRE9VQkxFX1FVT1RFXSA9IENfRE9VQkxFX1FVT1RFO1xuTElOS19NQVJLRVJTW0NfU0lOR0xFX1FVT1RFXSA9IENfU0lOR0xFX1FVT1RFO1xuXG4vKiBNYXAgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFyayBsaW5rXG4gKiBhbmQgaW1hZ2UgdGl0bGVzIGluIGNvbW1vbm1hcmstbW9kZS4gKi9cbnZhciBDT01NT05NQVJLX0xJTktfTUFSS0VSUyA9IHt9O1xuXG5DT01NT05NQVJLX0xJTktfTUFSS0VSU1tDX0RPVUJMRV9RVU9URV0gPSBDX0RPVUJMRV9RVU9URTtcbkNPTU1PTk1BUktfTElOS19NQVJLRVJTW0NfU0lOR0xFX1FVT1RFXSA9IENfU0lOR0xFX1FVT1RFO1xuQ09NTU9OTUFSS19MSU5LX01BUktFUlNbQ19QQVJFTl9PUEVOXSA9IENfUEFSRU5fQ0xPU0U7XG5cbmZ1bmN0aW9uIGxpbmsoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHN1YnZhbHVlID0gJyc7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoMCk7XG4gIHZhciBwZWRhbnRpYyA9IHNlbGYub3B0aW9ucy5wZWRhbnRpYztcbiAgdmFyIGNvbW1vbm1hcmsgPSBzZWxmLm9wdGlvbnMuY29tbW9ubWFyaztcbiAgdmFyIGdmbSA9IHNlbGYub3B0aW9ucy5nZm07XG4gIHZhciBjbG9zZWQ7XG4gIHZhciBjb3VudDtcbiAgdmFyIG9wZW5pbmc7XG4gIHZhciBiZWZvcmVVUkw7XG4gIHZhciBiZWZvcmVUaXRsZTtcbiAgdmFyIHN1YnF1ZXVlO1xuICB2YXIgaGFzTWFya2VyO1xuICB2YXIgbWFya2VycztcbiAgdmFyIGlzSW1hZ2U7XG4gIHZhciBjb250ZW50O1xuICB2YXIgbWFya2VyO1xuICB2YXIgbGVuZ3RoO1xuICB2YXIgdGl0bGU7XG4gIHZhciBkZXB0aDtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgdXJsO1xuICB2YXIgbm93O1xuICB2YXIgZXhpdDtcbiAgdmFyIG5vZGU7XG5cbiAgLyogRGV0ZWN0IHdoZXRoZXIgdGhpcyBpcyBhbiBpbWFnZS4gKi9cbiAgaWYgKGNoYXJhY3RlciA9PT0gJyEnKSB7XG4gICAgaXNJbWFnZSA9IHRydWU7XG4gICAgc3VidmFsdWUgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KCsraW5kZXgpO1xuICB9XG5cbiAgLyogRWF0IHRoZSBvcGVuaW5nLiAqL1xuICBpZiAoY2hhcmFjdGVyICE9PSBDX0JSQUNLRVRfT1BFTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qIEV4aXQgd2hlbiB0aGlzIGlzIGEgbGluayBhbmQgd2XigJlyZSBhbHJlYWR5IGluc2lkZVxuICAgKiBhIGxpbmsuICovXG4gIGlmICghaXNJbWFnZSAmJiBzZWxmLmluTGluaykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgcXVldWUgPSAnJztcbiAgaW5kZXgrKztcblxuICAvKiBFYXQgdGhlIGNvbnRlbnQuICovXG4gIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgbm93ID0gZWF0Lm5vdygpO1xuICBkZXB0aCA9IDA7XG5cbiAgbm93LmNvbHVtbiArPSBpbmRleDtcbiAgbm93Lm9mZnNldCArPSBpbmRleDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgIHN1YnF1ZXVlID0gY2hhcmFjdGVyO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19USUNLKSB7XG4gICAgICAvKiBJbmxpbmUtY29kZSBpbiBsaW5rIGNvbnRlbnQuICovXG4gICAgICBjb3VudCA9IDE7XG5cbiAgICAgIHdoaWxlICh2YWx1ZS5jaGFyQXQoaW5kZXggKyAxKSA9PT0gQ19USUNLKSB7XG4gICAgICAgIHN1YnF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcGVuaW5nKSB7XG4gICAgICAgIG9wZW5pbmcgPSBjb3VudDtcbiAgICAgIH0gZWxzZSBpZiAoY291bnQgPj0gb3BlbmluZykge1xuICAgICAgICBvcGVuaW5nID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQ19CQUNLU0xBU0gpIHtcbiAgICAgIC8qIEFsbG93IGJyYWNrZXRzIHRvIGJlIGVzY2FwZWQuICovXG4gICAgICBpbmRleCsrO1xuICAgICAgc3VicXVldWUgKz0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgICAvKiBJbiBHRk0gbW9kZSwgYnJhY2tldHMgaW4gY29kZSBzdGlsbCBjb3VudC5cbiAgICAgKiBJbiBhbGwgb3RoZXIgbW9kZXMsIHRoZXkgZG9u4oCZdC4gIFRoaXMgZW1wdHlcbiAgICAgKiBibG9jayBwcmV2ZW50cyB0aGUgbmV4dCBzdGF0ZW1lbnRzIGFyZVxuICAgICAqIGVudGVyZWQuICovXG4gICAgfSBlbHNlIGlmICgoIW9wZW5pbmcgfHwgZ2ZtKSAmJiBjaGFyYWN0ZXIgPT09IENfQlJBQ0tFVF9PUEVOKSB7XG4gICAgICBkZXB0aCsrO1xuICAgIH0gZWxzZSBpZiAoKCFvcGVuaW5nIHx8IGdmbSkgJiYgY2hhcmFjdGVyID09PSBDX0JSQUNLRVRfQ0xPU0UpIHtcbiAgICAgIGlmIChkZXB0aCkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogQWxsb3cgd2hpdGUtc3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZFxuICAgICAgICAgKiB1cmwgaW4gR0ZNIG1vZGUuICovXG4gICAgICAgIGlmICghcGVkYW50aWMpIHtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIXdoaXRlc3BhY2UoY2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3VicXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuY2hhckF0KGluZGV4ICsgMSkgIT09IENfUEFSRU5fT1BFTikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnF1ZXVlICs9IENfUEFSRU5fT1BFTjtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWV1ZSArPSBzdWJxdWV1ZTtcbiAgICBzdWJxdWV1ZSA9ICcnO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICAvKiBFYXQgdGhlIGNvbnRlbnQgY2xvc2luZy4gKi9cbiAgaWYgKCFjbG9zZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZW50ID0gcXVldWU7XG4gIHN1YnZhbHVlICs9IHF1ZXVlICsgc3VicXVldWU7XG4gIGluZGV4Kys7XG5cbiAgLyogRWF0IHdoaXRlLXNwYWNlLiAqL1xuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKCF3aGl0ZXNwYWNlKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgLyogRWF0IHRoZSBVUkwuICovXG4gIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gIG1hcmtlcnMgPSBjb21tb25tYXJrID8gQ09NTU9OTUFSS19MSU5LX01BUktFUlMgOiBMSU5LX01BUktFUlM7XG4gIHF1ZXVlID0gJyc7XG4gIGJlZm9yZVVSTCA9IHN1YnZhbHVlO1xuXG4gIGlmIChjaGFyYWN0ZXIgPT09IENfTFQpIHtcbiAgICBpbmRleCsrO1xuICAgIGJlZm9yZVVSTCArPSBDX0xUO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoY2hhcmFjdGVyID09PSBDX0dUKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tbW9ubWFyayAmJiBjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuY2hhckF0KGluZGV4KSAhPT0gQ19HVCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IENfTFQgKyBxdWV1ZSArIENfR1Q7XG4gICAgdXJsID0gcXVldWU7XG4gICAgaW5kZXgrKztcbiAgfSBlbHNlIHtcbiAgICBjaGFyYWN0ZXIgPSBudWxsO1xuICAgIHN1YnF1ZXVlID0gJyc7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChzdWJxdWV1ZSAmJiBvd24uY2FsbChtYXJrZXJzLCBjaGFyYWN0ZXIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAod2hpdGVzcGFjZShjaGFyYWN0ZXIpKSB7XG4gICAgICAgIGlmICghcGVkYW50aWMpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IENfUEFSRU5fT1BFTikge1xuICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX1BBUkVOX0NMT1NFKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVldWUgKz0gc3VicXVldWU7XG4gICAgICAgIHN1YnF1ZXVlID0gJyc7XG5cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19CQUNLU0xBU0gpIHtcbiAgICAgICAgICBxdWV1ZSArPSBDX0JBQ0tTTEFTSDtcbiAgICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICB9XG5cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgc3VidmFsdWUgKz0gcXVldWU7XG4gICAgdXJsID0gcXVldWU7XG4gICAgaW5kZXggPSBzdWJ2YWx1ZS5sZW5ndGg7XG4gIH1cblxuICAvKiBFYXQgd2hpdGUtc3BhY2UuICovXG4gIHF1ZXVlID0gJyc7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmICghd2hpdGVzcGFjZShjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gIHN1YnZhbHVlICs9IHF1ZXVlO1xuXG4gIC8qIEVhdCB0aGUgdGl0bGUuICovXG4gIGlmIChxdWV1ZSAmJiBvd24uY2FsbChtYXJrZXJzLCBjaGFyYWN0ZXIpKSB7XG4gICAgaW5kZXgrKztcbiAgICBzdWJ2YWx1ZSArPSBjaGFyYWN0ZXI7XG4gICAgcXVldWUgPSAnJztcbiAgICBtYXJrZXIgPSBtYXJrZXJzW2NoYXJhY3Rlcl07XG4gICAgYmVmb3JlVGl0bGUgPSBzdWJ2YWx1ZTtcblxuICAgIC8qIEluIGNvbW1vbm1hcmstbW9kZSwgdGhpbmdzIGFyZSBwcmV0dHkgZWFzeTogdGhlXG4gICAgICogbWFya2VyIGNhbm5vdCBvY2N1ciBpbnNpZGUgdGhlIHRpdGxlLlxuICAgICAqXG4gICAgICogTm9uLWNvbW1vbm1hcmsgZG9lcywgaG93ZXZlciwgc3VwcG9ydCBuZXN0ZWRcbiAgICAgKiBkZWxpbWl0ZXJzLiAqL1xuICAgIGlmIChjb21tb25tYXJrKSB7XG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBtYXJrZXIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IENfQkFDS1NMQVNIKSB7XG4gICAgICAgICAgcXVldWUgKz0gQ19CQUNLU0xBU0g7XG4gICAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KCsraW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgfVxuXG4gICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoY2hhcmFjdGVyICE9PSBtYXJrZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aXRsZSA9IHF1ZXVlO1xuICAgICAgc3VidmFsdWUgKz0gcXVldWUgKyBjaGFyYWN0ZXI7XG4gICAgICBpbmRleCsrO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICBpZiAoIXdoaXRlc3BhY2UoY2hhcmFjdGVyKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdWJxdWV1ZSA9ICcnO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBtYXJrZXIpIHtcbiAgICAgICAgICBpZiAoaGFzTWFya2VyKSB7XG4gICAgICAgICAgICBxdWV1ZSArPSBtYXJrZXIgKyBzdWJxdWV1ZTtcbiAgICAgICAgICAgIHN1YnF1ZXVlID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFzTWFya2VyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghaGFzTWFya2VyKSB7XG4gICAgICAgICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQ19QQVJFTl9DTE9TRSkge1xuICAgICAgICAgIHN1YnZhbHVlICs9IHF1ZXVlICsgbWFya2VyICsgc3VicXVldWU7XG4gICAgICAgICAgdGl0bGUgPSBxdWV1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlKGNoYXJhY3RlcikpIHtcbiAgICAgICAgICBzdWJxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVldWUgKz0gbWFya2VyICsgc3VicXVldWUgKyBjaGFyYWN0ZXI7XG4gICAgICAgICAgc3VicXVldWUgPSAnJztcbiAgICAgICAgICBoYXNNYXJrZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlLmNoYXJBdChpbmRleCkgIT09IENfUEFSRU5fQ0xPU0UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBuZXZlciB1c2VkICh5ZXQpICovXG4gIGlmIChzaWxlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN1YnZhbHVlICs9IENfUEFSRU5fQ0xPU0U7XG5cbiAgdXJsID0gc2VsZi5kZWNvZGUucmF3KHNlbGYudW5lc2NhcGUodXJsKSwgZWF0KGJlZm9yZVVSTCkudGVzdCgpLmVuZCwge25vblRlcm1pbmF0ZWQ6IGZhbHNlfSk7XG5cbiAgaWYgKHRpdGxlKSB7XG4gICAgYmVmb3JlVGl0bGUgPSBlYXQoYmVmb3JlVGl0bGUpLnRlc3QoKS5lbmQ7XG4gICAgdGl0bGUgPSBzZWxmLmRlY29kZS5yYXcoc2VsZi51bmVzY2FwZSh0aXRsZSksIGJlZm9yZVRpdGxlKTtcbiAgfVxuXG4gIG5vZGUgPSB7XG4gICAgdHlwZTogaXNJbWFnZSA/ICdpbWFnZScgOiAnbGluaycsXG4gICAgdGl0bGU6IHRpdGxlIHx8IG51bGwsXG4gICAgdXJsOiB1cmxcbiAgfTtcblxuICBpZiAoaXNJbWFnZSkge1xuICAgIG5vZGUuYWx0ID0gc2VsZi5kZWNvZGUucmF3KHNlbGYudW5lc2NhcGUoY29udGVudCksIG5vdykgfHwgbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBleGl0ID0gc2VsZi5lbnRlckxpbmsoKTtcbiAgICBub2RlLmNoaWxkcmVuID0gc2VsZi50b2tlbml6ZUlubGluZShjb250ZW50LCBub3cpO1xuICAgIGV4aXQoKTtcbiAgfVxuXG4gIHJldHVybiBlYXQoc3VidmFsdWUpKG5vZGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSkE7QUFTQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/link.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/list.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/list.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/* eslint-disable max-params */\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar decimal = __webpack_require__(/*! is-decimal */ \"../node_modules/is-decimal/index.js\");\n\nvar getIndent = __webpack_require__(/*! ../util/get-indentation */ \"../node_modules/remark-parse/lib/util/get-indentation.js\");\n\nvar removeIndent = __webpack_require__(/*! ../util/remove-indentation */ \"../node_modules/remark-parse/lib/util/remove-indentation.js\");\n\nvar interrupt = __webpack_require__(/*! ../util/interrupt */ \"../node_modules/remark-parse/lib/util/interrupt.js\");\n\nmodule.exports = list;\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\nvar C_PLUS = '+';\nvar C_DASH = '-';\nvar C_DOT = '.';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_PAREN_CLOSE = ')';\nvar C_X_LOWER = 'x';\nvar TAB_SIZE = 4;\nvar EXPRESSION_LOOSE_LIST_ITEM = /\\n\\n(?!\\s*$)/;\nvar EXPRESSION_TASK_ITEM = /^\\[([ \\t]|x|X)][ \\t]/;\nvar EXPRESSION_BULLET = /^([ \\t]*)([*+-]|\\d+[.)])( {1,4}(?! )| |\\t|$|(?=\\n))([^\\n]*)/;\nvar EXPRESSION_PEDANTIC_BULLET = /^([ \\t]*)([*+-]|\\d+[.)])([ \\t]+)/;\nvar EXPRESSION_INITIAL_INDENT = /^( {1,4}|\\t)?/gm;\n/* Map of characters which can be used to mark\n * list-items. */\n\nvar LIST_UNORDERED_MARKERS = {};\nLIST_UNORDERED_MARKERS[C_ASTERISK] = true;\nLIST_UNORDERED_MARKERS[C_PLUS] = true;\nLIST_UNORDERED_MARKERS[C_DASH] = true;\n/* Map of characters which can be used to mark\n * list-items after a digit. */\n\nvar LIST_ORDERED_MARKERS = {};\nLIST_ORDERED_MARKERS[C_DOT] = true;\n/* Map of characters which can be used to mark\n * list-items after a digit. */\n\nvar LIST_ORDERED_COMMONMARK_MARKERS = {};\nLIST_ORDERED_COMMONMARK_MARKERS[C_DOT] = true;\nLIST_ORDERED_COMMONMARK_MARKERS[C_PAREN_CLOSE] = true;\n\nfunction list(eat, value, silent) {\n var self = this;\n var commonmark = self.options.commonmark;\n var pedantic = self.options.pedantic;\n var tokenizers = self.blockTokenizers;\n var interuptors = self.interruptList;\n var markers;\n var index = 0;\n var length = value.length;\n var start = null;\n var size = 0;\n var queue;\n var ordered;\n var character;\n var marker;\n var nextIndex;\n var startIndex;\n var prefixed;\n var currentMarker;\n var content;\n var line;\n var prevEmpty;\n var empty;\n var items;\n var allLines;\n var emptyLines;\n var item;\n var enterTop;\n var exitBlockquote;\n var isLoose;\n var node;\n var now;\n var end;\n var indented;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_TAB) {\n size += TAB_SIZE - size % TAB_SIZE;\n } else if (character === C_SPACE) {\n size++;\n } else {\n break;\n }\n\n index++;\n }\n\n if (size >= TAB_SIZE) {\n return;\n }\n\n character = value.charAt(index);\n markers = commonmark ? LIST_ORDERED_COMMONMARK_MARKERS : LIST_ORDERED_MARKERS;\n\n if (LIST_UNORDERED_MARKERS[character] === true) {\n marker = character;\n ordered = false;\n } else {\n ordered = true;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!decimal(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (!queue || markers[character] !== true) {\n return;\n }\n\n start = parseInt(queue, 10);\n marker = character;\n }\n\n character = value.charAt(++index);\n\n if (character !== C_SPACE && character !== C_TAB) {\n return;\n }\n\n if (silent) {\n return true;\n }\n\n index = 0;\n items = [];\n allLines = [];\n emptyLines = [];\n\n while (index < length) {\n nextIndex = value.indexOf(C_NEWLINE, index);\n startIndex = index;\n prefixed = false;\n indented = false;\n\n if (nextIndex === -1) {\n nextIndex = length;\n }\n\n end = index + TAB_SIZE;\n size = 0;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_TAB) {\n size += TAB_SIZE - size % TAB_SIZE;\n } else if (character === C_SPACE) {\n size++;\n } else {\n break;\n }\n\n index++;\n }\n\n if (size >= TAB_SIZE) {\n indented = true;\n }\n\n if (item && size >= item.indent) {\n indented = true;\n }\n\n character = value.charAt(index);\n currentMarker = null;\n\n if (!indented) {\n if (LIST_UNORDERED_MARKERS[character] === true) {\n currentMarker = character;\n index++;\n size++;\n } else {\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!decimal(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n index++;\n\n if (queue && markers[character] === true) {\n currentMarker = character;\n size += queue.length + 1;\n }\n }\n\n if (currentMarker) {\n character = value.charAt(index);\n\n if (character === C_TAB) {\n size += TAB_SIZE - size % TAB_SIZE;\n index++;\n } else if (character === C_SPACE) {\n end = index + TAB_SIZE;\n\n while (index < end) {\n if (value.charAt(index) !== C_SPACE) {\n break;\n }\n\n index++;\n size++;\n }\n\n if (index === end && value.charAt(index) === C_SPACE) {\n index -= TAB_SIZE - 1;\n size -= TAB_SIZE - 1;\n }\n } else if (character !== C_NEWLINE && character !== '') {\n currentMarker = null;\n }\n }\n }\n\n if (currentMarker) {\n if (!pedantic && marker !== currentMarker) {\n break;\n }\n\n prefixed = true;\n } else {\n if (!commonmark && !indented && value.charAt(startIndex) === C_SPACE) {\n indented = true;\n } else if (commonmark && item) {\n indented = size >= item.indent || size > TAB_SIZE;\n }\n\n prefixed = false;\n index = startIndex;\n }\n\n line = value.slice(startIndex, nextIndex);\n content = startIndex === index ? line : value.slice(index, nextIndex);\n\n if (currentMarker === C_ASTERISK || currentMarker === C_UNDERSCORE || currentMarker === C_DASH) {\n if (tokenizers.thematicBreak.call(self, eat, line, true)) {\n break;\n }\n }\n\n prevEmpty = empty;\n empty = !trim(content).length;\n\n if (indented && item) {\n item.value = item.value.concat(emptyLines, line);\n allLines = allLines.concat(emptyLines, line);\n emptyLines = [];\n } else if (prefixed) {\n if (emptyLines.length !== 0) {\n item.value.push('');\n item.trail = emptyLines.concat();\n }\n\n item = {\n value: [line],\n indent: size,\n trail: []\n };\n items.push(item);\n allLines = allLines.concat(emptyLines, line);\n emptyLines = [];\n } else if (empty) {\n if (prevEmpty) {\n break;\n }\n\n emptyLines.push(line);\n } else {\n if (prevEmpty) {\n break;\n }\n\n if (interrupt(interuptors, tokenizers, self, [eat, line, true])) {\n break;\n }\n\n item.value = item.value.concat(emptyLines, line);\n allLines = allLines.concat(emptyLines, line);\n emptyLines = [];\n }\n\n index = nextIndex + 1;\n }\n\n node = eat(allLines.join(C_NEWLINE)).reset({\n type: 'list',\n ordered: ordered,\n start: start,\n loose: null,\n children: []\n });\n enterTop = self.enterList();\n exitBlockquote = self.enterBlock();\n isLoose = false;\n index = -1;\n length = items.length;\n\n while (++index < length) {\n item = items[index].value.join(C_NEWLINE);\n now = eat.now();\n item = eat(item)(listItem(self, item, now), node);\n\n if (item.loose) {\n isLoose = true;\n }\n\n item = items[index].trail.join(C_NEWLINE);\n\n if (index !== length - 1) {\n item += C_NEWLINE;\n }\n\n eat(item);\n }\n\n enterTop();\n exitBlockquote();\n node.loose = isLoose;\n return node;\n}\n\nfunction listItem(ctx, value, position) {\n var offsets = ctx.offset;\n var fn = ctx.options.pedantic ? pedanticListItem : normalListItem;\n var checked = null;\n var task;\n var indent;\n value = fn.apply(null, arguments);\n\n if (ctx.options.gfm) {\n task = value.match(EXPRESSION_TASK_ITEM);\n\n if (task) {\n indent = task[0].length;\n checked = task[1].toLowerCase() === C_X_LOWER;\n offsets[position.line] += indent;\n value = value.slice(indent);\n }\n }\n\n return {\n type: 'listItem',\n loose: EXPRESSION_LOOSE_LIST_ITEM.test(value) || value.charAt(value.length - 1) === C_NEWLINE,\n checked: checked,\n children: ctx.tokenizeBlock(value, position)\n };\n}\n/* Create a list-item using overly simple mechanics. */\n\n\nfunction pedanticListItem(ctx, value, position) {\n var offsets = ctx.offset;\n var line = position.line;\n /* Remove the list-item’s bullet. */\n\n value = value.replace(EXPRESSION_PEDANTIC_BULLET, replacer);\n /* The initial line was also matched by the below, so\n * we reset the `line`. */\n\n line = position.line;\n return value.replace(EXPRESSION_INITIAL_INDENT, replacer);\n /* A simple replacer which removed all matches,\n * and adds their length to `offset`. */\n\n function replacer($0) {\n offsets[line] = (offsets[line] || 0) + $0.length;\n line++;\n return '';\n }\n}\n/* Create a list-item using sane mechanics. */\n\n\nfunction normalListItem(ctx, value, position) {\n var offsets = ctx.offset;\n var line = position.line;\n var max;\n var bullet;\n var rest;\n var lines;\n var trimmedLines;\n var index;\n var length;\n /* Remove the list-item’s bullet. */\n\n value = value.replace(EXPRESSION_BULLET, replacer);\n lines = value.split(C_NEWLINE);\n trimmedLines = removeIndent(value, getIndent(max).indent).split(C_NEWLINE);\n /* We replaced the initial bullet with something\n * else above, which was used to trick\n * `removeIndentation` into removing some more\n * characters when possible. However, that could\n * result in the initial line to be stripped more\n * than it should be. */\n\n trimmedLines[0] = rest;\n offsets[line] = (offsets[line] || 0) + bullet.length;\n line++;\n index = 0;\n length = lines.length;\n\n while (++index < length) {\n offsets[line] = (offsets[line] || 0) + lines[index].length - trimmedLines[index].length;\n line++;\n }\n\n return trimmedLines.join(C_NEWLINE);\n\n function replacer($0, $1, $2, $3, $4) {\n bullet = $1 + $2 + $3;\n rest = $4;\n /* Make sure that the first nine numbered list items\n * can indent with an extra space. That is, when\n * the bullet did not receive an extra final space. */\n\n if (Number($2) < 10 && bullet.length % 2 === 1) {\n $2 = C_SPACE + $2;\n }\n\n max = $1 + repeat(C_SPACE, $2.length) + $3;\n return max + rest;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvbGlzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9saXN0LmpzPzNiMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtcGFyYW1zICovXG5cbnZhciB0cmltID0gcmVxdWlyZSgndHJpbScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbnZhciBkZWNpbWFsID0gcmVxdWlyZSgnaXMtZGVjaW1hbCcpO1xudmFyIGdldEluZGVudCA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0LWluZGVudGF0aW9uJyk7XG52YXIgcmVtb3ZlSW5kZW50ID0gcmVxdWlyZSgnLi4vdXRpbC9yZW1vdmUtaW5kZW50YXRpb24nKTtcbnZhciBpbnRlcnJ1cHQgPSByZXF1aXJlKCcuLi91dGlsL2ludGVycnVwdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3Q7XG5cbnZhciBDX0FTVEVSSVNLID0gJyonO1xudmFyIENfVU5ERVJTQ09SRSA9ICdfJztcbnZhciBDX1BMVVMgPSAnKyc7XG52YXIgQ19EQVNIID0gJy0nO1xudmFyIENfRE9UID0gJy4nO1xudmFyIENfU1BBQ0UgPSAnICc7XG52YXIgQ19ORVdMSU5FID0gJ1xcbic7XG52YXIgQ19UQUIgPSAnXFx0JztcbnZhciBDX1BBUkVOX0NMT1NFID0gJyknO1xudmFyIENfWF9MT1dFUiA9ICd4JztcblxudmFyIFRBQl9TSVpFID0gNDtcbnZhciBFWFBSRVNTSU9OX0xPT1NFX0xJU1RfSVRFTSA9IC9cXG5cXG4oPyFcXHMqJCkvO1xudmFyIEVYUFJFU1NJT05fVEFTS19JVEVNID0gL15cXFsoWyBcXHRdfHh8WCldWyBcXHRdLztcbnZhciBFWFBSRVNTSU9OX0JVTExFVCA9IC9eKFsgXFx0XSopKFsqKy1dfFxcZCtbLildKSggezEsNH0oPyEgKXwgfFxcdHwkfCg/PVxcbikpKFteXFxuXSopLztcbnZhciBFWFBSRVNTSU9OX1BFREFOVElDX0JVTExFVCA9IC9eKFsgXFx0XSopKFsqKy1dfFxcZCtbLildKShbIFxcdF0rKS87XG52YXIgRVhQUkVTU0lPTl9JTklUSUFMX0lOREVOVCA9IC9eKCB7MSw0fXxcXHQpPy9nbTtcblxuLyogTWFwIG9mIGNoYXJhY3RlcnMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFya1xuICogbGlzdC1pdGVtcy4gKi9cbnZhciBMSVNUX1VOT1JERVJFRF9NQVJLRVJTID0ge307XG5cbkxJU1RfVU5PUkRFUkVEX01BUktFUlNbQ19BU1RFUklTS10gPSB0cnVlO1xuTElTVF9VTk9SREVSRURfTUFSS0VSU1tDX1BMVVNdID0gdHJ1ZTtcbkxJU1RfVU5PUkRFUkVEX01BUktFUlNbQ19EQVNIXSA9IHRydWU7XG5cbi8qIE1hcCBvZiBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1hcmtcbiAqIGxpc3QtaXRlbXMgYWZ0ZXIgYSBkaWdpdC4gKi9cbnZhciBMSVNUX09SREVSRURfTUFSS0VSUyA9IHt9O1xuXG5MSVNUX09SREVSRURfTUFSS0VSU1tDX0RPVF0gPSB0cnVlO1xuXG4vKiBNYXAgb2YgY2hhcmFjdGVycyB3aGljaCBjYW4gYmUgdXNlZCB0byBtYXJrXG4gKiBsaXN0LWl0ZW1zIGFmdGVyIGEgZGlnaXQuICovXG52YXIgTElTVF9PUkRFUkVEX0NPTU1PTk1BUktfTUFSS0VSUyA9IHt9O1xuXG5MSVNUX09SREVSRURfQ09NTU9OTUFSS19NQVJLRVJTW0NfRE9UXSA9IHRydWU7XG5MSVNUX09SREVSRURfQ09NTU9OTUFSS19NQVJLRVJTW0NfUEFSRU5fQ0xPU0VdID0gdHJ1ZTtcblxuZnVuY3Rpb24gbGlzdChlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY29tbW9ubWFyayA9IHNlbGYub3B0aW9ucy5jb21tb25tYXJrO1xuICB2YXIgcGVkYW50aWMgPSBzZWxmLm9wdGlvbnMucGVkYW50aWM7XG4gIHZhciB0b2tlbml6ZXJzID0gc2VsZi5ibG9ja1Rva2VuaXplcnM7XG4gIHZhciBpbnRlcnVwdG9ycyA9IHNlbGYuaW50ZXJydXB0TGlzdDtcbiAgdmFyIG1hcmtlcnM7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBzdGFydCA9IG51bGw7XG4gIHZhciBzaXplID0gMDtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgb3JkZXJlZDtcbiAgdmFyIGNoYXJhY3RlcjtcbiAgdmFyIG1hcmtlcjtcbiAgdmFyIG5leHRJbmRleDtcbiAgdmFyIHN0YXJ0SW5kZXg7XG4gIHZhciBwcmVmaXhlZDtcbiAgdmFyIGN1cnJlbnRNYXJrZXI7XG4gIHZhciBjb250ZW50O1xuICB2YXIgbGluZTtcbiAgdmFyIHByZXZFbXB0eTtcbiAgdmFyIGVtcHR5O1xuICB2YXIgaXRlbXM7XG4gIHZhciBhbGxMaW5lcztcbiAgdmFyIGVtcHR5TGluZXM7XG4gIHZhciBpdGVtO1xuICB2YXIgZW50ZXJUb3A7XG4gIHZhciBleGl0QmxvY2txdW90ZTtcbiAgdmFyIGlzTG9vc2U7XG4gIHZhciBub2RlO1xuICB2YXIgbm93O1xuICB2YXIgZW5kO1xuICB2YXIgaW5kZW50ZWQ7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfVEFCKSB7XG4gICAgICBzaXplICs9IFRBQl9TSVpFIC0gKHNpemUgJSBUQUJfU0laRSk7XG4gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfU1BBQ0UpIHtcbiAgICAgIHNpemUrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChzaXplID49IFRBQl9TSVpFKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICBtYXJrZXJzID0gY29tbW9ubWFyayA/XG4gICAgTElTVF9PUkRFUkVEX0NPTU1PTk1BUktfTUFSS0VSUyA6XG4gICAgTElTVF9PUkRFUkVEX01BUktFUlM7XG5cbiAgaWYgKExJU1RfVU5PUkRFUkVEX01BUktFUlNbY2hhcmFjdGVyXSA9PT0gdHJ1ZSkge1xuICAgIG1hcmtlciA9IGNoYXJhY3RlcjtcbiAgICBvcmRlcmVkID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgb3JkZXJlZCA9IHRydWU7XG4gICAgcXVldWUgPSAnJztcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgaWYgKCFkZWNpbWFsKGNoYXJhY3RlcikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgIGlmICghcXVldWUgfHwgbWFya2Vyc1tjaGFyYWN0ZXJdICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhcnQgPSBwYXJzZUludChxdWV1ZSwgMTApO1xuICAgIG1hcmtlciA9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgrK2luZGV4KTtcblxuICBpZiAoY2hhcmFjdGVyICE9PSBDX1NQQUNFICYmIGNoYXJhY3RlciAhPT0gQ19UQUIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbmRleCA9IDA7XG4gIGl0ZW1zID0gW107XG4gIGFsbExpbmVzID0gW107XG4gIGVtcHR5TGluZXMgPSBbXTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBuZXh0SW5kZXggPSB2YWx1ZS5pbmRleE9mKENfTkVXTElORSwgaW5kZXgpO1xuICAgIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICBwcmVmaXhlZCA9IGZhbHNlO1xuICAgIGluZGVudGVkID0gZmFsc2U7XG5cbiAgICBpZiAobmV4dEluZGV4ID09PSAtMSkge1xuICAgICAgbmV4dEluZGV4ID0gbGVuZ3RoO1xuICAgIH1cblxuICAgIGVuZCA9IGluZGV4ICsgVEFCX1NJWkU7XG4gICAgc2l6ZSA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgPT09IENfVEFCKSB7XG4gICAgICAgIHNpemUgKz0gVEFCX1NJWkUgLSAoc2l6ZSAlIFRBQl9TSVpFKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX1NQQUNFKSB7XG4gICAgICAgIHNpemUrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmIChzaXplID49IFRBQl9TSVpFKSB7XG4gICAgICBpbmRlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0gJiYgc2l6ZSA+PSBpdGVtLmluZGVudCkge1xuICAgICAgaW5kZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgY3VycmVudE1hcmtlciA9IG51bGw7XG5cbiAgICBpZiAoIWluZGVudGVkKSB7XG4gICAgICBpZiAoTElTVF9VTk9SREVSRURfTUFSS0VSU1tjaGFyYWN0ZXJdID09PSB0cnVlKSB7XG4gICAgICAgIGN1cnJlbnRNYXJrZXIgPSBjaGFyYWN0ZXI7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHNpemUrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlID0gJyc7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICAgIGlmICghZGVjaW1hbChjaGFyYWN0ZXIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgaWYgKHF1ZXVlICYmIG1hcmtlcnNbY2hhcmFjdGVyXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgc2l6ZSArPSBxdWV1ZS5sZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50TWFya2VyKSB7XG4gICAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19UQUIpIHtcbiAgICAgICAgICBzaXplICs9IFRBQl9TSVpFIC0gKHNpemUgJSBUQUJfU0laRSk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfU1BBQ0UpIHtcbiAgICAgICAgICBlbmQgPSBpbmRleCArIFRBQl9TSVpFO1xuXG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuY2hhckF0KGluZGV4KSAhPT0gQ19TUEFDRSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5kZXggPT09IGVuZCAmJiB2YWx1ZS5jaGFyQXQoaW5kZXgpID09PSBDX1NQQUNFKSB7XG4gICAgICAgICAgICBpbmRleCAtPSBUQUJfU0laRSAtIDE7XG4gICAgICAgICAgICBzaXplIC09IFRBQl9TSVpFIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyICE9PSBDX05FV0xJTkUgJiYgY2hhcmFjdGVyICE9PSAnJykge1xuICAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNYXJrZXIpIHtcbiAgICAgIGlmICghcGVkYW50aWMgJiYgbWFya2VyICE9PSBjdXJyZW50TWFya2VyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcmVmaXhlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY29tbW9ubWFyayAmJiAhaW5kZW50ZWQgJiYgdmFsdWUuY2hhckF0KHN0YXJ0SW5kZXgpID09PSBDX1NQQUNFKSB7XG4gICAgICAgIGluZGVudGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29tbW9ubWFyayAmJiBpdGVtKSB7XG4gICAgICAgIGluZGVudGVkID0gc2l6ZSA+PSBpdGVtLmluZGVudCB8fCBzaXplID4gVEFCX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIHByZWZpeGVkID0gZmFsc2U7XG4gICAgICBpbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgfVxuXG4gICAgbGluZSA9IHZhbHVlLnNsaWNlKHN0YXJ0SW5kZXgsIG5leHRJbmRleCk7XG4gICAgY29udGVudCA9IHN0YXJ0SW5kZXggPT09IGluZGV4ID8gbGluZSA6IHZhbHVlLnNsaWNlKGluZGV4LCBuZXh0SW5kZXgpO1xuXG4gICAgaWYgKFxuICAgICAgY3VycmVudE1hcmtlciA9PT0gQ19BU1RFUklTSyB8fFxuICAgICAgY3VycmVudE1hcmtlciA9PT0gQ19VTkRFUlNDT1JFIHx8XG4gICAgICBjdXJyZW50TWFya2VyID09PSBDX0RBU0hcbiAgICApIHtcbiAgICAgIGlmICh0b2tlbml6ZXJzLnRoZW1hdGljQnJlYWsuY2FsbChzZWxmLCBlYXQsIGxpbmUsIHRydWUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByZXZFbXB0eSA9IGVtcHR5O1xuICAgIGVtcHR5ID0gIXRyaW0oY29udGVudCkubGVuZ3RoO1xuXG4gICAgaWYgKGluZGVudGVkICYmIGl0ZW0pIHtcbiAgICAgIGl0ZW0udmFsdWUgPSBpdGVtLnZhbHVlLmNvbmNhdChlbXB0eUxpbmVzLCBsaW5lKTtcbiAgICAgIGFsbExpbmVzID0gYWxsTGluZXMuY29uY2F0KGVtcHR5TGluZXMsIGxpbmUpO1xuICAgICAgZW1wdHlMaW5lcyA9IFtdO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ZWQpIHtcbiAgICAgIGlmIChlbXB0eUxpbmVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpdGVtLnZhbHVlLnB1c2goJycpO1xuICAgICAgICBpdGVtLnRyYWlsID0gZW1wdHlMaW5lcy5jb25jYXQoKTtcbiAgICAgIH1cblxuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdmFsdWU6IFtsaW5lXSxcbiAgICAgICAgaW5kZW50OiBzaXplLFxuICAgICAgICB0cmFpbDogW11cbiAgICAgIH07XG5cbiAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICBhbGxMaW5lcyA9IGFsbExpbmVzLmNvbmNhdChlbXB0eUxpbmVzLCBsaW5lKTtcbiAgICAgIGVtcHR5TGluZXMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGVtcHR5KSB7XG4gICAgICBpZiAocHJldkVtcHR5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBlbXB0eUxpbmVzLnB1c2gobGluZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcmV2RW1wdHkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnRlcnJ1cHQoaW50ZXJ1cHRvcnMsIHRva2VuaXplcnMsIHNlbGYsIFtlYXQsIGxpbmUsIHRydWVdKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaXRlbS52YWx1ZSA9IGl0ZW0udmFsdWUuY29uY2F0KGVtcHR5TGluZXMsIGxpbmUpO1xuICAgICAgYWxsTGluZXMgPSBhbGxMaW5lcy5jb25jYXQoZW1wdHlMaW5lcywgbGluZSk7XG4gICAgICBlbXB0eUxpbmVzID0gW107XG4gICAgfVxuXG4gICAgaW5kZXggPSBuZXh0SW5kZXggKyAxO1xuICB9XG5cbiAgbm9kZSA9IGVhdChhbGxMaW5lcy5qb2luKENfTkVXTElORSkpLnJlc2V0KHtcbiAgICB0eXBlOiAnbGlzdCcsXG4gICAgb3JkZXJlZDogb3JkZXJlZCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgbG9vc2U6IG51bGwsXG4gICAgY2hpbGRyZW46IFtdXG4gIH0pO1xuXG4gIGVudGVyVG9wID0gc2VsZi5lbnRlckxpc3QoKTtcbiAgZXhpdEJsb2NrcXVvdGUgPSBzZWxmLmVudGVyQmxvY2soKTtcbiAgaXNMb29zZSA9IGZhbHNlO1xuICBpbmRleCA9IC0xO1xuICBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpdGVtID0gaXRlbXNbaW5kZXhdLnZhbHVlLmpvaW4oQ19ORVdMSU5FKTtcbiAgICBub3cgPSBlYXQubm93KCk7XG5cbiAgICBpdGVtID0gZWF0KGl0ZW0pKGxpc3RJdGVtKHNlbGYsIGl0ZW0sIG5vdyksIG5vZGUpO1xuXG4gICAgaWYgKGl0ZW0ubG9vc2UpIHtcbiAgICAgIGlzTG9vc2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGl0ZW0gPSBpdGVtc1tpbmRleF0udHJhaWwuam9pbihDX05FV0xJTkUpO1xuXG4gICAgaWYgKGluZGV4ICE9PSBsZW5ndGggLSAxKSB7XG4gICAgICBpdGVtICs9IENfTkVXTElORTtcbiAgICB9XG5cbiAgICBlYXQoaXRlbSk7XG4gIH1cblxuICBlbnRlclRvcCgpO1xuICBleGl0QmxvY2txdW90ZSgpO1xuXG4gIG5vZGUubG9vc2UgPSBpc0xvb3NlO1xuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBsaXN0SXRlbShjdHgsIHZhbHVlLCBwb3NpdGlvbikge1xuICB2YXIgb2Zmc2V0cyA9IGN0eC5vZmZzZXQ7XG4gIHZhciBmbiA9IGN0eC5vcHRpb25zLnBlZGFudGljID8gcGVkYW50aWNMaXN0SXRlbSA6IG5vcm1hbExpc3RJdGVtO1xuICB2YXIgY2hlY2tlZCA9IG51bGw7XG4gIHZhciB0YXNrO1xuICB2YXIgaW5kZW50O1xuXG4gIHZhbHVlID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcblxuICBpZiAoY3R4Lm9wdGlvbnMuZ2ZtKSB7XG4gICAgdGFzayA9IHZhbHVlLm1hdGNoKEVYUFJFU1NJT05fVEFTS19JVEVNKTtcblxuICAgIGlmICh0YXNrKSB7XG4gICAgICBpbmRlbnQgPSB0YXNrWzBdLmxlbmd0aDtcbiAgICAgIGNoZWNrZWQgPSB0YXNrWzFdLnRvTG93ZXJDYXNlKCkgPT09IENfWF9MT1dFUjtcbiAgICAgIG9mZnNldHNbcG9zaXRpb24ubGluZV0gKz0gaW5kZW50O1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZShpbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2xpc3RJdGVtJyxcbiAgICBsb29zZTogRVhQUkVTU0lPTl9MT09TRV9MSVNUX0lURU0udGVzdCh2YWx1ZSkgfHxcbiAgICAgIHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSA9PT0gQ19ORVdMSU5FLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgY2hpbGRyZW46IGN0eC50b2tlbml6ZUJsb2NrKHZhbHVlLCBwb3NpdGlvbilcbiAgfTtcbn1cblxuLyogQ3JlYXRlIGEgbGlzdC1pdGVtIHVzaW5nIG92ZXJseSBzaW1wbGUgbWVjaGFuaWNzLiAqL1xuZnVuY3Rpb24gcGVkYW50aWNMaXN0SXRlbShjdHgsIHZhbHVlLCBwb3NpdGlvbikge1xuICB2YXIgb2Zmc2V0cyA9IGN0eC5vZmZzZXQ7XG4gIHZhciBsaW5lID0gcG9zaXRpb24ubGluZTtcblxuICAvKiBSZW1vdmUgdGhlIGxpc3QtaXRlbeKAmXMgYnVsbGV0LiAqL1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoRVhQUkVTU0lPTl9QRURBTlRJQ19CVUxMRVQsIHJlcGxhY2VyKTtcblxuICAvKiBUaGUgaW5pdGlhbCBsaW5lIHdhcyBhbHNvIG1hdGNoZWQgYnkgdGhlIGJlbG93LCBzb1xuICAgKiB3ZSByZXNldCB0aGUgYGxpbmVgLiAqL1xuICBsaW5lID0gcG9zaXRpb24ubGluZTtcblxuICByZXR1cm4gdmFsdWUucmVwbGFjZShFWFBSRVNTSU9OX0lOSVRJQUxfSU5ERU5ULCByZXBsYWNlcik7XG5cbiAgLyogQSBzaW1wbGUgcmVwbGFjZXIgd2hpY2ggcmVtb3ZlZCBhbGwgbWF0Y2hlcyxcbiAgICogYW5kIGFkZHMgdGhlaXIgbGVuZ3RoIHRvIGBvZmZzZXRgLiAqL1xuICBmdW5jdGlvbiByZXBsYWNlcigkMCkge1xuICAgIG9mZnNldHNbbGluZV0gPSAob2Zmc2V0c1tsaW5lXSB8fCAwKSArICQwLmxlbmd0aDtcbiAgICBsaW5lKys7XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyogQ3JlYXRlIGEgbGlzdC1pdGVtIHVzaW5nIHNhbmUgbWVjaGFuaWNzLiAqL1xuZnVuY3Rpb24gbm9ybWFsTGlzdEl0ZW0oY3R4LCB2YWx1ZSwgcG9zaXRpb24pIHtcbiAgdmFyIG9mZnNldHMgPSBjdHgub2Zmc2V0O1xuICB2YXIgbGluZSA9IHBvc2l0aW9uLmxpbmU7XG4gIHZhciBtYXg7XG4gIHZhciBidWxsZXQ7XG4gIHZhciByZXN0O1xuICB2YXIgbGluZXM7XG4gIHZhciB0cmltbWVkTGluZXM7XG4gIHZhciBpbmRleDtcbiAgdmFyIGxlbmd0aDtcblxuICAvKiBSZW1vdmUgdGhlIGxpc3QtaXRlbeKAmXMgYnVsbGV0LiAqL1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoRVhQUkVTU0lPTl9CVUxMRVQsIHJlcGxhY2VyKTtcblxuICBsaW5lcyA9IHZhbHVlLnNwbGl0KENfTkVXTElORSk7XG5cbiAgdHJpbW1lZExpbmVzID0gcmVtb3ZlSW5kZW50KHZhbHVlLCBnZXRJbmRlbnQobWF4KS5pbmRlbnQpLnNwbGl0KENfTkVXTElORSk7XG5cbiAgLyogV2UgcmVwbGFjZWQgdGhlIGluaXRpYWwgYnVsbGV0IHdpdGggc29tZXRoaW5nXG4gICAqIGVsc2UgYWJvdmUsIHdoaWNoIHdhcyB1c2VkIHRvIHRyaWNrXG4gICAqIGByZW1vdmVJbmRlbnRhdGlvbmAgaW50byByZW1vdmluZyBzb21lIG1vcmVcbiAgICogY2hhcmFjdGVycyB3aGVuIHBvc3NpYmxlLiAgSG93ZXZlciwgdGhhdCBjb3VsZFxuICAgKiByZXN1bHQgaW4gdGhlIGluaXRpYWwgbGluZSB0byBiZSBzdHJpcHBlZCBtb3JlXG4gICAqIHRoYW4gaXQgc2hvdWxkIGJlLiAqL1xuICB0cmltbWVkTGluZXNbMF0gPSByZXN0O1xuXG4gIG9mZnNldHNbbGluZV0gPSAob2Zmc2V0c1tsaW5lXSB8fCAwKSArIGJ1bGxldC5sZW5ndGg7XG4gIGxpbmUrKztcblxuICBpbmRleCA9IDA7XG4gIGxlbmd0aCA9IGxpbmVzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIG9mZnNldHNbbGluZV0gPSAob2Zmc2V0c1tsaW5lXSB8fCAwKSArXG4gICAgICBsaW5lc1tpbmRleF0ubGVuZ3RoIC0gdHJpbW1lZExpbmVzW2luZGV4XS5sZW5ndGg7XG4gICAgbGluZSsrO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWRMaW5lcy5qb2luKENfTkVXTElORSk7XG5cbiAgZnVuY3Rpb24gcmVwbGFjZXIoJDAsICQxLCAkMiwgJDMsICQ0KSB7XG4gICAgYnVsbGV0ID0gJDEgKyAkMiArICQzO1xuICAgIHJlc3QgPSAkNDtcblxuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBuaW5lIG51bWJlcmVkIGxpc3QgaXRlbXNcbiAgICAgKiBjYW4gaW5kZW50IHdpdGggYW4gZXh0cmEgc3BhY2UuICBUaGF0IGlzLCB3aGVuXG4gICAgICogdGhlIGJ1bGxldCBkaWQgbm90IHJlY2VpdmUgYW4gZXh0cmEgZmluYWwgc3BhY2UuICovXG4gICAgaWYgKE51bWJlcigkMikgPCAxMCAmJiBidWxsZXQubGVuZ3RoICUgMiA9PT0gMSkge1xuICAgICAgJDIgPSBDX1NQQUNFICsgJDI7XG4gICAgfVxuXG4gICAgbWF4ID0gJDEgKyByZXBlYXQoQ19TUEFDRSwgJDIubGVuZ3RoKSArICQzO1xuXG4gICAgcmV0dXJuIG1heCArIHJlc3Q7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUVBO0FBRUE7OztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFMQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7OztBQUVBO0FBRUE7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBRUE7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/list.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/newline.js": -/*!************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/newline.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nmodule.exports = newline;\n/* Tokenise newline. */\n\nfunction newline(eat, value, silent) {\n var character = value.charAt(0);\n var length;\n var subvalue;\n var queue;\n var index;\n\n if (character !== '\\n') {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n index = 1;\n length = value.length;\n subvalue = character;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n queue += character;\n\n if (character === '\\n') {\n subvalue += queue;\n queue = '';\n }\n\n index++;\n }\n\n eat(subvalue);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvbmV3bGluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS9uZXdsaW5lLmpzPzJhMTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3bGluZTtcblxuLyogVG9rZW5pc2UgbmV3bGluZS4gKi9cbmZ1bmN0aW9uIG5ld2xpbmUoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoMCk7XG4gIHZhciBsZW5ndGg7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgaW5kZXg7XG5cbiAgaWYgKGNoYXJhY3RlciAhPT0gJ1xcbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBuZXZlciB1c2VkICh5ZXQpICovXG4gIGlmIChzaWxlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGluZGV4ID0gMTtcbiAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICBzdWJ2YWx1ZSA9IGNoYXJhY3RlcjtcbiAgcXVldWUgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKCF3aGl0ZXNwYWNlKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcblxuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICBzdWJ2YWx1ZSArPSBxdWV1ZTtcbiAgICAgIHF1ZXVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGVhdChzdWJ2YWx1ZSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/newline.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/paragraph.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/paragraph.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar decimal = __webpack_require__(/*! is-decimal */ \"../node_modules/is-decimal/index.js\");\n\nvar trimTrailingLines = __webpack_require__(/*! trim-trailing-lines */ \"../node_modules/trim-trailing-lines/index.js\");\n\nvar interrupt = __webpack_require__(/*! ../util/interrupt */ \"../node_modules/remark-parse/lib/util/interrupt.js\");\n\nmodule.exports = paragraph;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar TAB_SIZE = 4;\n/* Tokenise paragraph. */\n\nfunction paragraph(eat, value, silent) {\n var self = this;\n var settings = self.options;\n var commonmark = settings.commonmark;\n var gfm = settings.gfm;\n var tokenizers = self.blockTokenizers;\n var interruptors = self.interruptParagraph;\n var index = value.indexOf(C_NEWLINE);\n var length = value.length;\n var position;\n var subvalue;\n var character;\n var size;\n var now;\n\n while (index < length) {\n /* Eat everything if there’s no following newline. */\n if (index === -1) {\n index = length;\n break;\n }\n /* Stop if the next character is NEWLINE. */\n\n\n if (value.charAt(index + 1) === C_NEWLINE) {\n break;\n }\n /* In commonmark-mode, following indented lines\n * are part of the paragraph. */\n\n\n if (commonmark) {\n size = 0;\n position = index + 1;\n\n while (position < length) {\n character = value.charAt(position);\n\n if (character === C_TAB) {\n size = TAB_SIZE;\n break;\n } else if (character === C_SPACE) {\n size++;\n } else {\n break;\n }\n\n position++;\n }\n\n if (size >= TAB_SIZE) {\n index = value.indexOf(C_NEWLINE, index + 1);\n continue;\n }\n }\n\n subvalue = value.slice(index + 1);\n /* Check if the following code contains a possible\n * block. */\n\n if (interrupt(interruptors, tokenizers, self, [eat, subvalue, true])) {\n break;\n }\n /* Break if the following line starts a list, when\n * already in a list, or when in commonmark, or when\n * in gfm mode and the bullet is *not* numeric. */\n\n\n if (tokenizers.list.call(self, eat, subvalue, true) && (self.inList || commonmark || gfm && !decimal(trim.left(subvalue).charAt(0)))) {\n break;\n }\n\n position = index;\n index = value.indexOf(C_NEWLINE, index + 1);\n\n if (index !== -1 && trim(value.slice(position, index)) === '') {\n index = position;\n break;\n }\n }\n\n subvalue = value.slice(0, index);\n\n if (trim(subvalue) === '') {\n eat(subvalue);\n return null;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n now = eat.now();\n subvalue = trimTrailingLines(subvalue);\n return eat(subvalue)({\n type: 'paragraph',\n children: self.tokenizeInline(subvalue, now)\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvcGFyYWdyYXBoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL3BhcmFncmFwaC5qcz83ZTBlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRyaW0gPSByZXF1aXJlKCd0cmltJyk7XG52YXIgZGVjaW1hbCA9IHJlcXVpcmUoJ2lzLWRlY2ltYWwnKTtcbnZhciB0cmltVHJhaWxpbmdMaW5lcyA9IHJlcXVpcmUoJ3RyaW0tdHJhaWxpbmctbGluZXMnKTtcbnZhciBpbnRlcnJ1cHQgPSByZXF1aXJlKCcuLi91dGlsL2ludGVycnVwdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFncmFwaDtcblxudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcblxudmFyIFRBQl9TSVpFID0gNDtcblxuLyogVG9rZW5pc2UgcGFyYWdyYXBoLiAqL1xuZnVuY3Rpb24gcGFyYWdyYXBoKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzZXR0aW5ncyA9IHNlbGYub3B0aW9ucztcbiAgdmFyIGNvbW1vbm1hcmsgPSBzZXR0aW5ncy5jb21tb25tYXJrO1xuICB2YXIgZ2ZtID0gc2V0dGluZ3MuZ2ZtO1xuICB2YXIgdG9rZW5pemVycyA9IHNlbGYuYmxvY2tUb2tlbml6ZXJzO1xuICB2YXIgaW50ZXJydXB0b3JzID0gc2VsZi5pbnRlcnJ1cHRQYXJhZ3JhcGg7XG4gIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2YoQ19ORVdMSU5FKTtcbiAgdmFyIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgdmFyIHBvc2l0aW9uO1xuICB2YXIgc3VidmFsdWU7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBzaXplO1xuICB2YXIgbm93O1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIC8qIEVhdCBldmVyeXRoaW5nIGlmIHRoZXJl4oCZcyBubyBmb2xsb3dpbmcgbmV3bGluZS4gKi9cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qIFN0b3AgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIE5FV0xJTkUuICovXG4gICAgaWYgKHZhbHVlLmNoYXJBdChpbmRleCArIDEpID09PSBDX05FV0xJTkUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qIEluIGNvbW1vbm1hcmstbW9kZSwgZm9sbG93aW5nIGluZGVudGVkIGxpbmVzXG4gICAgICogYXJlIHBhcnQgb2YgdGhlIHBhcmFncmFwaC4gKi9cbiAgICBpZiAoY29tbW9ubWFyaykge1xuICAgICAgc2l6ZSA9IDA7XG4gICAgICBwb3NpdGlvbiA9IGluZGV4ICsgMTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChwb3NpdGlvbik7XG5cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19UQUIpIHtcbiAgICAgICAgICBzaXplID0gVEFCX1NJWkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX1NQQUNFKSB7XG4gICAgICAgICAgc2l6ZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24rKztcbiAgICAgIH1cblxuICAgICAgaWYgKHNpemUgPj0gVEFCX1NJWkUpIHtcbiAgICAgICAgaW5kZXggPSB2YWx1ZS5pbmRleE9mKENfTkVXTElORSwgaW5kZXggKyAxKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VidmFsdWUgPSB2YWx1ZS5zbGljZShpbmRleCArIDEpO1xuXG4gICAgLyogQ2hlY2sgaWYgdGhlIGZvbGxvd2luZyBjb2RlIGNvbnRhaW5zIGEgcG9zc2libGVcbiAgICAgKiBibG9jay4gKi9cbiAgICBpZiAoaW50ZXJydXB0KGludGVycnVwdG9ycywgdG9rZW5pemVycywgc2VsZiwgW2VhdCwgc3VidmFsdWUsIHRydWVdKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogQnJlYWsgaWYgdGhlIGZvbGxvd2luZyBsaW5lIHN0YXJ0cyBhIGxpc3QsIHdoZW5cbiAgICAgKiBhbHJlYWR5IGluIGEgbGlzdCwgb3Igd2hlbiBpbiBjb21tb25tYXJrLCBvciB3aGVuXG4gICAgICogaW4gZ2ZtIG1vZGUgYW5kIHRoZSBidWxsZXQgaXMgKm5vdCogbnVtZXJpYy4gKi9cbiAgICBpZiAoXG4gICAgICB0b2tlbml6ZXJzLmxpc3QuY2FsbChzZWxmLCBlYXQsIHN1YnZhbHVlLCB0cnVlKSAmJlxuICAgICAgKFxuICAgICAgICBzZWxmLmluTGlzdCB8fFxuICAgICAgICBjb21tb25tYXJrIHx8XG4gICAgICAgIChnZm0gJiYgIWRlY2ltYWwodHJpbS5sZWZ0KHN1YnZhbHVlKS5jaGFyQXQoMCkpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcG9zaXRpb24gPSBpbmRleDtcbiAgICBpbmRleCA9IHZhbHVlLmluZGV4T2YoQ19ORVdMSU5FLCBpbmRleCArIDEpO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSAmJiB0cmltKHZhbHVlLnNsaWNlKHBvc2l0aW9uLCBpbmRleCkpID09PSAnJykge1xuICAgICAgaW5kZXggPSBwb3NpdGlvbjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHN1YnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaW5kZXgpO1xuXG4gIGlmICh0cmltKHN1YnZhbHVlKSA9PT0gJycpIHtcbiAgICBlYXQoc3VidmFsdWUpO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBuZXZlciB1c2VkICh5ZXQpICovXG4gIGlmIChzaWxlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5vdyA9IGVhdC5ub3coKTtcbiAgc3VidmFsdWUgPSB0cmltVHJhaWxpbmdMaW5lcyhzdWJ2YWx1ZSk7XG5cbiAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe1xuICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgIGNoaWxkcmVuOiBzZWxmLnRva2VuaXplSW5saW5lKHN1YnZhbHVlLCBub3cpXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/paragraph.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/reference.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/reference.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/link */ \"../node_modules/remark-parse/lib/locate/link.js\");\n\nvar normalize = __webpack_require__(/*! ../util/normalize */ \"../node_modules/remark-parse/lib/util/normalize.js\");\n\nmodule.exports = reference;\nreference.locator = locate;\nvar T_LINK = 'link';\nvar T_IMAGE = 'image';\nvar T_FOOTNOTE = 'footnote';\nvar REFERENCE_TYPE_SHORTCUT = 'shortcut';\nvar REFERENCE_TYPE_COLLAPSED = 'collapsed';\nvar REFERENCE_TYPE_FULL = 'full';\nvar C_CARET = '^';\nvar C_BACKSLASH = '\\\\';\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\n\nfunction reference(eat, value, silent) {\n var self = this;\n var character = value.charAt(0);\n var index = 0;\n var length = value.length;\n var subvalue = '';\n var intro = '';\n var type = T_LINK;\n var referenceType = REFERENCE_TYPE_SHORTCUT;\n var content;\n var identifier;\n var now;\n var node;\n var exit;\n var queue;\n var bracketed;\n var depth;\n /* Check whether we’re eating an image. */\n\n if (character === '!') {\n type = T_IMAGE;\n intro = character;\n character = value.charAt(++index);\n }\n\n if (character !== C_BRACKET_OPEN) {\n return;\n }\n\n index++;\n intro += character;\n queue = '';\n /* Check whether we’re eating a footnote. */\n\n if (self.options.footnotes && value.charAt(index) === C_CARET) {\n /* Exit if `![^` is found, so the `!` will be seen as text after this,\n * and we’ll enter this function again when `[^` is found. */\n if (type === T_IMAGE) {\n return;\n }\n\n intro += C_CARET;\n index++;\n type = T_FOOTNOTE;\n }\n /* Eat the text. */\n\n\n depth = 0;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_BRACKET_OPEN) {\n bracketed = true;\n depth++;\n } else if (character === C_BRACKET_CLOSE) {\n if (!depth) {\n break;\n }\n\n depth--;\n }\n\n if (character === C_BACKSLASH) {\n queue += C_BACKSLASH;\n character = value.charAt(++index);\n }\n\n queue += character;\n index++;\n }\n\n subvalue = queue;\n content = queue;\n character = value.charAt(index);\n\n if (character !== C_BRACKET_CLOSE) {\n return;\n }\n\n index++;\n subvalue += character;\n queue = '';\n\n while (index < length) {\n character = value.charAt(index);\n\n if (!whitespace(character)) {\n break;\n }\n\n queue += character;\n index++;\n }\n\n character = value.charAt(index);\n /* Inline footnotes cannot have an identifier. */\n\n if (type !== T_FOOTNOTE && character === C_BRACKET_OPEN) {\n identifier = '';\n queue += character;\n index++;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (character === C_BRACKET_OPEN || character === C_BRACKET_CLOSE) {\n break;\n }\n\n if (character === C_BACKSLASH) {\n identifier += C_BACKSLASH;\n character = value.charAt(++index);\n }\n\n identifier += character;\n index++;\n }\n\n character = value.charAt(index);\n\n if (character === C_BRACKET_CLOSE) {\n referenceType = identifier ? REFERENCE_TYPE_FULL : REFERENCE_TYPE_COLLAPSED;\n queue += identifier + character;\n index++;\n } else {\n identifier = '';\n }\n\n subvalue += queue;\n queue = '';\n } else {\n if (!content) {\n return;\n }\n\n identifier = content;\n }\n /* Brackets cannot be inside the identifier. */\n\n\n if (referenceType !== REFERENCE_TYPE_FULL && bracketed) {\n return;\n }\n\n subvalue = intro + subvalue;\n\n if (type === T_LINK && self.inLink) {\n return null;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n if (type === T_FOOTNOTE && content.indexOf(' ') !== -1) {\n return eat(subvalue)({\n type: 'footnote',\n children: this.tokenizeInline(content, eat.now())\n });\n }\n\n now = eat.now();\n now.column += intro.length;\n now.offset += intro.length;\n identifier = referenceType === REFERENCE_TYPE_FULL ? identifier : content;\n node = {\n type: type + 'Reference',\n identifier: normalize(identifier)\n };\n\n if (type === T_LINK || type === T_IMAGE) {\n node.referenceType = referenceType;\n }\n\n if (type === T_LINK) {\n exit = self.enterLink();\n node.children = self.tokenizeInline(content, now);\n exit();\n } else if (type === T_IMAGE) {\n node.alt = self.decode.raw(self.unescape(content), now) || null;\n }\n\n return eat(subvalue)(node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvcmVmZXJlbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL3JlZmVyZW5jZS5qcz9hMDliIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHdoaXRlc3BhY2UgPSByZXF1aXJlKCdpcy13aGl0ZXNwYWNlLWNoYXJhY3RlcicpO1xudmFyIGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2xvY2F0ZS9saW5rJyk7XG52YXIgbm9ybWFsaXplID0gcmVxdWlyZSgnLi4vdXRpbC9ub3JtYWxpemUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZWZlcmVuY2U7XG5yZWZlcmVuY2UubG9jYXRvciA9IGxvY2F0ZTtcblxudmFyIFRfTElOSyA9ICdsaW5rJztcbnZhciBUX0lNQUdFID0gJ2ltYWdlJztcbnZhciBUX0ZPT1ROT1RFID0gJ2Zvb3Rub3RlJztcbnZhciBSRUZFUkVOQ0VfVFlQRV9TSE9SVENVVCA9ICdzaG9ydGN1dCc7XG52YXIgUkVGRVJFTkNFX1RZUEVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCc7XG52YXIgUkVGRVJFTkNFX1RZUEVfRlVMTCA9ICdmdWxsJztcbnZhciBDX0NBUkVUID0gJ14nO1xudmFyIENfQkFDS1NMQVNIID0gJ1xcXFwnO1xudmFyIENfQlJBQ0tFVF9PUEVOID0gJ1snO1xudmFyIENfQlJBQ0tFVF9DTE9TRSA9ICddJztcblxuZnVuY3Rpb24gcmVmZXJlbmNlKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoMCk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHZhciBzdWJ2YWx1ZSA9ICcnO1xuICB2YXIgaW50cm8gPSAnJztcbiAgdmFyIHR5cGUgPSBUX0xJTks7XG4gIHZhciByZWZlcmVuY2VUeXBlID0gUkVGRVJFTkNFX1RZUEVfU0hPUlRDVVQ7XG4gIHZhciBjb250ZW50O1xuICB2YXIgaWRlbnRpZmllcjtcbiAgdmFyIG5vdztcbiAgdmFyIG5vZGU7XG4gIHZhciBleGl0O1xuICB2YXIgcXVldWU7XG4gIHZhciBicmFja2V0ZWQ7XG4gIHZhciBkZXB0aDtcblxuICAvKiBDaGVjayB3aGV0aGVyIHdl4oCZcmUgZWF0aW5nIGFuIGltYWdlLiAqL1xuICBpZiAoY2hhcmFjdGVyID09PSAnIScpIHtcbiAgICB0eXBlID0gVF9JTUFHRTtcbiAgICBpbnRybyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG4gIH1cblxuICBpZiAoY2hhcmFjdGVyICE9PSBDX0JSQUNLRVRfT1BFTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluZGV4Kys7XG4gIGludHJvICs9IGNoYXJhY3RlcjtcbiAgcXVldWUgPSAnJztcblxuICAvKiBDaGVjayB3aGV0aGVyIHdl4oCZcmUgZWF0aW5nIGEgZm9vdG5vdGUuICovXG4gIGlmIChzZWxmLm9wdGlvbnMuZm9vdG5vdGVzICYmIHZhbHVlLmNoYXJBdChpbmRleCkgPT09IENfQ0FSRVQpIHtcbiAgICAvKiBFeGl0IGlmIGAhW15gIGlzIGZvdW5kLCBzbyB0aGUgYCFgIHdpbGwgYmUgc2VlbiBhcyB0ZXh0IGFmdGVyIHRoaXMsXG4gICAgICogYW5kIHdl4oCZbGwgZW50ZXIgdGhpcyBmdW5jdGlvbiBhZ2FpbiB3aGVuIGBbXmAgaXMgZm91bmQuICovXG4gICAgaWYgKHR5cGUgPT09IFRfSU1BR0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnRybyArPSBDX0NBUkVUO1xuICAgIGluZGV4Kys7XG4gICAgdHlwZSA9IFRfRk9PVE5PVEU7XG4gIH1cblxuICAvKiBFYXQgdGhlIHRleHQuICovXG4gIGRlcHRoID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19CUkFDS0VUX09QRU4pIHtcbiAgICAgIGJyYWNrZXRlZCA9IHRydWU7XG4gICAgICBkZXB0aCsrO1xuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX0JSQUNLRVRfQ0xPU0UpIHtcbiAgICAgIGlmICghZGVwdGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlcHRoLS07XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19CQUNLU0xBU0gpIHtcbiAgICAgIHF1ZXVlICs9IENfQkFDS1NMQVNIO1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KCsraW5kZXgpO1xuICAgIH1cblxuICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgc3VidmFsdWUgPSBxdWV1ZTtcbiAgY29udGVudCA9IHF1ZXVlO1xuICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gIGlmIChjaGFyYWN0ZXIgIT09IENfQlJBQ0tFVF9DTE9TRSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluZGV4Kys7XG4gIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgcXVldWUgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKCF3aGl0ZXNwYWNlKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcblxuICAvKiBJbmxpbmUgZm9vdG5vdGVzIGNhbm5vdCBoYXZlIGFuIGlkZW50aWZpZXIuICovXG4gIGlmICh0eXBlICE9PSBUX0ZPT1ROT1RFICYmIGNoYXJhY3RlciA9PT0gQ19CUkFDS0VUX09QRU4pIHtcbiAgICBpZGVudGlmaWVyID0gJyc7XG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgPT09IENfQlJBQ0tFVF9PUEVOIHx8IGNoYXJhY3RlciA9PT0gQ19CUkFDS0VUX0NMT1NFKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhcmFjdGVyID09PSBDX0JBQ0tTTEFTSCkge1xuICAgICAgICBpZGVudGlmaWVyICs9IENfQkFDS1NMQVNIO1xuICAgICAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoKytpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlkZW50aWZpZXIgKz0gY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19CUkFDS0VUX0NMT1NFKSB7XG4gICAgICByZWZlcmVuY2VUeXBlID0gaWRlbnRpZmllciA/IFJFRkVSRU5DRV9UWVBFX0ZVTEwgOiBSRUZFUkVOQ0VfVFlQRV9DT0xMQVBTRUQ7XG4gICAgICBxdWV1ZSArPSBpZGVudGlmaWVyICsgY2hhcmFjdGVyO1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgaWRlbnRpZmllciA9ICcnO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IHF1ZXVlO1xuICAgIHF1ZXVlID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWRlbnRpZmllciA9IGNvbnRlbnQ7XG4gIH1cblxuICAvKiBCcmFja2V0cyBjYW5ub3QgYmUgaW5zaWRlIHRoZSBpZGVudGlmaWVyLiAqL1xuICBpZiAocmVmZXJlbmNlVHlwZSAhPT0gUkVGRVJFTkNFX1RZUEVfRlVMTCAmJiBicmFja2V0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdWJ2YWx1ZSA9IGludHJvICsgc3VidmFsdWU7XG5cbiAgaWYgKHR5cGUgPT09IFRfTElOSyAmJiBzZWxmLmluTGluaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmIC0gbmV2ZXIgdXNlZCAoeWV0KSAqL1xuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gVF9GT09UTk9URSAmJiBjb250ZW50LmluZGV4T2YoJyAnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gZWF0KHN1YnZhbHVlKSh7XG4gICAgICB0eXBlOiAnZm9vdG5vdGUnLFxuICAgICAgY2hpbGRyZW46IHRoaXMudG9rZW5pemVJbmxpbmUoY29udGVudCwgZWF0Lm5vdygpKVxuICAgIH0pO1xuICB9XG5cbiAgbm93ID0gZWF0Lm5vdygpO1xuICBub3cuY29sdW1uICs9IGludHJvLmxlbmd0aDtcbiAgbm93Lm9mZnNldCArPSBpbnRyby5sZW5ndGg7XG4gIGlkZW50aWZpZXIgPSByZWZlcmVuY2VUeXBlID09PSBSRUZFUkVOQ0VfVFlQRV9GVUxMID8gaWRlbnRpZmllciA6IGNvbnRlbnQ7XG5cbiAgbm9kZSA9IHtcbiAgICB0eXBlOiB0eXBlICsgJ1JlZmVyZW5jZScsXG4gICAgaWRlbnRpZmllcjogbm9ybWFsaXplKGlkZW50aWZpZXIpXG4gIH07XG5cbiAgaWYgKHR5cGUgPT09IFRfTElOSyB8fCB0eXBlID09PSBUX0lNQUdFKSB7XG4gICAgbm9kZS5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBUX0xJTkspIHtcbiAgICBleGl0ID0gc2VsZi5lbnRlckxpbmsoKTtcbiAgICBub2RlLmNoaWxkcmVuID0gc2VsZi50b2tlbml6ZUlubGluZShjb250ZW50LCBub3cpO1xuICAgIGV4aXQoKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUX0lNQUdFKSB7XG4gICAgbm9kZS5hbHQgPSBzZWxmLmRlY29kZS5yYXcoc2VsZi51bmVzY2FwZShjb250ZW50KSwgbm93KSB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkobm9kZSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaENBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/reference.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/strong.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/strong.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/strong */ \"../node_modules/remark-parse/lib/locate/strong.js\");\n\nmodule.exports = strong;\nstrong.locator = locate;\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\n\nfunction strong(eat, value, silent) {\n var self = this;\n var index = 0;\n var character = value.charAt(index);\n var now;\n var pedantic;\n var marker;\n var queue;\n var subvalue;\n var length;\n var prev;\n\n if (character !== C_ASTERISK && character !== C_UNDERSCORE || value.charAt(++index) !== character) {\n return;\n }\n\n pedantic = self.options.pedantic;\n marker = character;\n subvalue = marker + marker;\n length = value.length;\n index++;\n queue = '';\n character = '';\n\n if (pedantic && whitespace(value.charAt(index))) {\n return;\n }\n\n while (index < length) {\n prev = character;\n character = value.charAt(index);\n\n if (character === marker && value.charAt(index + 1) === marker && (!pedantic || !whitespace(prev))) {\n character = value.charAt(index + 2);\n\n if (character !== marker) {\n if (!trim(queue)) {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n now = eat.now();\n now.column += 2;\n now.offset += 2;\n return eat(subvalue + queue + subvalue)({\n type: 'strong',\n children: self.tokenizeInline(queue, now)\n });\n }\n }\n\n if (!pedantic && character === '\\\\') {\n queue += character;\n character = value.charAt(++index);\n }\n\n queue += character;\n index++;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvc3Ryb25nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL3N0cm9uZy5qcz80NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRyaW0gPSByZXF1aXJlKCd0cmltJyk7XG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG52YXIgbG9jYXRlID0gcmVxdWlyZSgnLi4vbG9jYXRlL3N0cm9uZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cm9uZztcbnN0cm9uZy5sb2NhdG9yID0gbG9jYXRlO1xuXG52YXIgQ19BU1RFUklTSyA9ICcqJztcbnZhciBDX1VOREVSU0NPUkUgPSAnXyc7XG5cbmZ1bmN0aW9uIHN0cm9uZyhlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgdmFyIG5vdztcbiAgdmFyIHBlZGFudGljO1xuICB2YXIgbWFya2VyO1xuICB2YXIgcXVldWU7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIHByZXY7XG5cbiAgaWYgKFxuICAgIChjaGFyYWN0ZXIgIT09IENfQVNURVJJU0sgJiYgY2hhcmFjdGVyICE9PSBDX1VOREVSU0NPUkUpIHx8XG4gICAgdmFsdWUuY2hhckF0KCsraW5kZXgpICE9PSBjaGFyYWN0ZXJcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGVkYW50aWMgPSBzZWxmLm9wdGlvbnMucGVkYW50aWM7XG4gIG1hcmtlciA9IGNoYXJhY3RlcjtcbiAgc3VidmFsdWUgPSBtYXJrZXIgKyBtYXJrZXI7XG4gIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgaW5kZXgrKztcbiAgcXVldWUgPSAnJztcbiAgY2hhcmFjdGVyID0gJyc7XG5cbiAgaWYgKHBlZGFudGljICYmIHdoaXRlc3BhY2UodmFsdWUuY2hhckF0KGluZGV4KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBwcmV2ID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoXG4gICAgICBjaGFyYWN0ZXIgPT09IG1hcmtlciAmJlxuICAgICAgdmFsdWUuY2hhckF0KGluZGV4ICsgMSkgPT09IG1hcmtlciAmJlxuICAgICAgKCFwZWRhbnRpYyB8fCAhd2hpdGVzcGFjZShwcmV2KSlcbiAgICApIHtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCArIDIpO1xuXG4gICAgICBpZiAoY2hhcmFjdGVyICE9PSBtYXJrZXIpIHtcbiAgICAgICAgaWYgKCF0cmltKHF1ZXVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAtIG5ldmVyIHVzZWQgKHlldCkgKi9cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbm93ID0gZWF0Lm5vdygpO1xuICAgICAgICBub3cuY29sdW1uICs9IDI7XG4gICAgICAgIG5vdy5vZmZzZXQgKz0gMjtcblxuICAgICAgICByZXR1cm4gZWF0KHN1YnZhbHVlICsgcXVldWUgKyBzdWJ2YWx1ZSkoe1xuICAgICAgICAgIHR5cGU6ICdzdHJvbmcnLFxuICAgICAgICAgIGNoaWxkcmVuOiBzZWxmLnRva2VuaXplSW5saW5lKHF1ZXVlLCBub3cpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGVkYW50aWMgJiYgY2hhcmFjdGVyID09PSAnXFxcXCcpIHtcbiAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdCgrK2luZGV4KTtcbiAgICB9XG5cbiAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgaW5kZXgrKztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/strong.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/table.js": -/*!**********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/table.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nmodule.exports = table;\nvar C_BACKSLASH = '\\\\';\nvar C_TICK = '`';\nvar C_DASH = '-';\nvar C_PIPE = '|';\nvar C_COLON = ':';\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar MIN_TABLE_COLUMNS = 1;\nvar MIN_TABLE_ROWS = 2;\nvar TABLE_ALIGN_LEFT = 'left';\nvar TABLE_ALIGN_CENTER = 'center';\nvar TABLE_ALIGN_RIGHT = 'right';\nvar TABLE_ALIGN_NONE = null;\n\nfunction table(eat, value, silent) {\n var self = this;\n var index;\n var alignments;\n var alignment;\n var subvalue;\n var row;\n var length;\n var lines;\n var queue;\n var character;\n var hasDash;\n var align;\n var cell;\n var preamble;\n var count;\n var opening;\n var now;\n var position;\n var lineCount;\n var line;\n var rows;\n var table;\n var lineIndex;\n var pipeIndex;\n var first;\n /* Exit when not in gfm-mode. */\n\n if (!self.options.gfm) {\n return;\n }\n /* Get the rows.\n * Detecting tables soon is hard, so there are some\n * checks for performance here, such as the minimum\n * number of rows, and allowed characters in the\n * alignment row. */\n\n\n index = 0;\n lineCount = 0;\n length = value.length + 1;\n lines = [];\n\n while (index < length) {\n lineIndex = value.indexOf(C_NEWLINE, index);\n pipeIndex = value.indexOf(C_PIPE, index + 1);\n\n if (lineIndex === -1) {\n lineIndex = value.length;\n }\n\n if (pipeIndex === -1 || pipeIndex > lineIndex) {\n if (lineCount < MIN_TABLE_ROWS) {\n return;\n }\n\n break;\n }\n\n lines.push(value.slice(index, lineIndex));\n lineCount++;\n index = lineIndex + 1;\n }\n /* Parse the alignment row. */\n\n\n subvalue = lines.join(C_NEWLINE);\n alignments = lines.splice(1, 1)[0] || [];\n index = 0;\n length = alignments.length;\n lineCount--;\n alignment = false;\n align = [];\n\n while (index < length) {\n character = alignments.charAt(index);\n\n if (character === C_PIPE) {\n hasDash = null;\n\n if (alignment === false) {\n if (first === false) {\n return;\n }\n } else {\n align.push(alignment);\n alignment = false;\n }\n\n first = false;\n } else if (character === C_DASH) {\n hasDash = true;\n alignment = alignment || TABLE_ALIGN_NONE;\n } else if (character === C_COLON) {\n if (alignment === TABLE_ALIGN_LEFT) {\n alignment = TABLE_ALIGN_CENTER;\n } else if (hasDash && alignment === TABLE_ALIGN_NONE) {\n alignment = TABLE_ALIGN_RIGHT;\n } else {\n alignment = TABLE_ALIGN_LEFT;\n }\n } else if (!whitespace(character)) {\n return;\n }\n\n index++;\n }\n\n if (alignment !== false) {\n align.push(alignment);\n }\n /* Exit when without enough columns. */\n\n\n if (align.length < MIN_TABLE_COLUMNS) {\n return;\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n /* Parse the rows. */\n\n\n position = -1;\n rows = [];\n table = eat(subvalue).reset({\n type: 'table',\n align: align,\n children: rows\n });\n\n while (++position < lineCount) {\n line = lines[position];\n row = {\n type: 'tableRow',\n children: []\n };\n /* Eat a newline character when this is not the\n * first row. */\n\n if (position) {\n eat(C_NEWLINE);\n }\n /* Eat the row. */\n\n\n eat(line).reset(row, table);\n length = line.length + 1;\n index = 0;\n queue = '';\n cell = '';\n preamble = true;\n count = null;\n opening = null;\n\n while (index < length) {\n character = line.charAt(index);\n\n if (character === C_TAB || character === C_SPACE) {\n if (cell) {\n queue += character;\n } else {\n eat(character);\n }\n\n index++;\n continue;\n }\n\n if (character === '' || character === C_PIPE) {\n if (preamble) {\n eat(character);\n } else {\n if (character && opening) {\n queue += character;\n index++;\n continue;\n }\n\n if ((cell || character) && !preamble) {\n subvalue = cell;\n\n if (queue.length > 1) {\n if (character) {\n subvalue += queue.slice(0, queue.length - 1);\n queue = queue.charAt(queue.length - 1);\n } else {\n subvalue += queue;\n queue = '';\n }\n }\n\n now = eat.now();\n eat(subvalue)({\n type: 'tableCell',\n children: self.tokenizeInline(cell, now)\n }, row);\n }\n\n eat(queue + character);\n queue = '';\n cell = '';\n }\n } else {\n if (queue) {\n cell += queue;\n queue = '';\n }\n\n cell += character;\n\n if (character === C_BACKSLASH && index !== length - 2) {\n cell += line.charAt(index + 1);\n index++;\n }\n\n if (character === C_TICK) {\n count = 1;\n\n while (line.charAt(index + 1) === character) {\n cell += character;\n index++;\n count++;\n }\n\n if (!opening) {\n opening = count;\n } else if (count >= opening) {\n opening = 0;\n }\n }\n }\n\n preamble = false;\n index++;\n }\n /* Eat the alignment row. */\n\n\n if (!position) {\n eat(C_NEWLINE + alignments);\n }\n }\n\n return table;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdGFibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdGFibGUuanM/MzZjOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB3aGl0ZXNwYWNlID0gcmVxdWlyZSgnaXMtd2hpdGVzcGFjZS1jaGFyYWN0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0YWJsZTtcblxudmFyIENfQkFDS1NMQVNIID0gJ1xcXFwnO1xudmFyIENfVElDSyA9ICdgJztcbnZhciBDX0RBU0ggPSAnLSc7XG52YXIgQ19QSVBFID0gJ3wnO1xudmFyIENfQ09MT04gPSAnOic7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX05FV0xJTkUgPSAnXFxuJztcbnZhciBDX1RBQiA9ICdcXHQnO1xuXG52YXIgTUlOX1RBQkxFX0NPTFVNTlMgPSAxO1xudmFyIE1JTl9UQUJMRV9ST1dTID0gMjtcblxudmFyIFRBQkxFX0FMSUdOX0xFRlQgPSAnbGVmdCc7XG52YXIgVEFCTEVfQUxJR05fQ0VOVEVSID0gJ2NlbnRlcic7XG52YXIgVEFCTEVfQUxJR05fUklHSFQgPSAncmlnaHQnO1xudmFyIFRBQkxFX0FMSUdOX05PTkUgPSBudWxsO1xuXG5mdW5jdGlvbiB0YWJsZShlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaW5kZXg7XG4gIHZhciBhbGlnbm1lbnRzO1xuICB2YXIgYWxpZ25tZW50O1xuICB2YXIgc3VidmFsdWU7XG4gIHZhciByb3c7XG4gIHZhciBsZW5ndGg7XG4gIHZhciBsaW5lcztcbiAgdmFyIHF1ZXVlO1xuICB2YXIgY2hhcmFjdGVyO1xuICB2YXIgaGFzRGFzaDtcbiAgdmFyIGFsaWduO1xuICB2YXIgY2VsbDtcbiAgdmFyIHByZWFtYmxlO1xuICB2YXIgY291bnQ7XG4gIHZhciBvcGVuaW5nO1xuICB2YXIgbm93O1xuICB2YXIgcG9zaXRpb247XG4gIHZhciBsaW5lQ291bnQ7XG4gIHZhciBsaW5lO1xuICB2YXIgcm93cztcbiAgdmFyIHRhYmxlO1xuICB2YXIgbGluZUluZGV4O1xuICB2YXIgcGlwZUluZGV4O1xuICB2YXIgZmlyc3Q7XG5cbiAgLyogRXhpdCB3aGVuIG5vdCBpbiBnZm0tbW9kZS4gKi9cbiAgaWYgKCFzZWxmLm9wdGlvbnMuZ2ZtKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogR2V0IHRoZSByb3dzLlxuICAgKiBEZXRlY3RpbmcgdGFibGVzIHNvb24gaXMgaGFyZCwgc28gdGhlcmUgYXJlIHNvbWVcbiAgICogY2hlY2tzIGZvciBwZXJmb3JtYW5jZSBoZXJlLCBzdWNoIGFzIHRoZSBtaW5pbXVtXG4gICAqIG51bWJlciBvZiByb3dzLCBhbmQgYWxsb3dlZCBjaGFyYWN0ZXJzIGluIHRoZVxuICAgKiBhbGlnbm1lbnQgcm93LiAqL1xuICBpbmRleCA9IDA7XG4gIGxpbmVDb3VudCA9IDA7XG4gIGxlbmd0aCA9IHZhbHVlLmxlbmd0aCArIDE7XG4gIGxpbmVzID0gW107XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgbGluZUluZGV4ID0gdmFsdWUuaW5kZXhPZihDX05FV0xJTkUsIGluZGV4KTtcbiAgICBwaXBlSW5kZXggPSB2YWx1ZS5pbmRleE9mKENfUElQRSwgaW5kZXggKyAxKTtcblxuICAgIGlmIChsaW5lSW5kZXggPT09IC0xKSB7XG4gICAgICBsaW5lSW5kZXggPSB2YWx1ZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHBpcGVJbmRleCA9PT0gLTEgfHwgcGlwZUluZGV4ID4gbGluZUluZGV4KSB7XG4gICAgICBpZiAobGluZUNvdW50IDwgTUlOX1RBQkxFX1JPV1MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKHZhbHVlLnNsaWNlKGluZGV4LCBsaW5lSW5kZXgpKTtcbiAgICBsaW5lQ291bnQrKztcbiAgICBpbmRleCA9IGxpbmVJbmRleCArIDE7XG4gIH1cblxuICAvKiBQYXJzZSB0aGUgYWxpZ25tZW50IHJvdy4gKi9cbiAgc3VidmFsdWUgPSBsaW5lcy5qb2luKENfTkVXTElORSk7XG4gIGFsaWdubWVudHMgPSBsaW5lcy5zcGxpY2UoMSwgMSlbMF0gfHwgW107XG4gIGluZGV4ID0gMDtcbiAgbGVuZ3RoID0gYWxpZ25tZW50cy5sZW5ndGg7XG4gIGxpbmVDb3VudC0tO1xuICBhbGlnbm1lbnQgPSBmYWxzZTtcbiAgYWxpZ24gPSBbXTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSBhbGlnbm1lbnRzLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyID09PSBDX1BJUEUpIHtcbiAgICAgIGhhc0Rhc2ggPSBudWxsO1xuXG4gICAgICBpZiAoYWxpZ25tZW50ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZmlyc3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbi5wdXNoKGFsaWdubWVudCk7XG4gICAgICAgIGFsaWdubWVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX0RBU0gpIHtcbiAgICAgIGhhc0Rhc2ggPSB0cnVlO1xuICAgICAgYWxpZ25tZW50ID0gYWxpZ25tZW50IHx8IFRBQkxFX0FMSUdOX05PTkU7XG4gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IENfQ09MT04pIHtcbiAgICAgIGlmIChhbGlnbm1lbnQgPT09IFRBQkxFX0FMSUdOX0xFRlQpIHtcbiAgICAgICAgYWxpZ25tZW50ID0gVEFCTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgfSBlbHNlIGlmIChoYXNEYXNoICYmIGFsaWdubWVudCA9PT0gVEFCTEVfQUxJR05fTk9ORSkge1xuICAgICAgICBhbGlnbm1lbnQgPSBUQUJMRV9BTElHTl9SSUdIVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWdubWVudCA9IFRBQkxFX0FMSUdOX0xFRlQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghd2hpdGVzcGFjZShjaGFyYWN0ZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChhbGlnbm1lbnQgIT09IGZhbHNlKSB7XG4gICAgYWxpZ24ucHVzaChhbGlnbm1lbnQpO1xuICB9XG5cbiAgLyogRXhpdCB3aGVuIHdpdGhvdXQgZW5vdWdoIGNvbHVtbnMuICovXG4gIGlmIChhbGlnbi5sZW5ndGggPCBNSU5fVEFCTEVfQ09MVU1OUykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAtIG5ldmVyIHVzZWQgKHlldCkgKi9cbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogUGFyc2UgdGhlIHJvd3MuICovXG4gIHBvc2l0aW9uID0gLTE7XG4gIHJvd3MgPSBbXTtcblxuICB0YWJsZSA9IGVhdChzdWJ2YWx1ZSkucmVzZXQoe1xuICAgIHR5cGU6ICd0YWJsZScsXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGNoaWxkcmVuOiByb3dzXG4gIH0pO1xuXG4gIHdoaWxlICgrK3Bvc2l0aW9uIDwgbGluZUNvdW50KSB7XG4gICAgbGluZSA9IGxpbmVzW3Bvc2l0aW9uXTtcbiAgICByb3cgPSB7dHlwZTogJ3RhYmxlUm93JywgY2hpbGRyZW46IFtdfTtcblxuICAgIC8qIEVhdCBhIG5ld2xpbmUgY2hhcmFjdGVyIHdoZW4gdGhpcyBpcyBub3QgdGhlXG4gICAgICogZmlyc3Qgcm93LiAqL1xuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgZWF0KENfTkVXTElORSk7XG4gICAgfVxuXG4gICAgLyogRWF0IHRoZSByb3cuICovXG4gICAgZWF0KGxpbmUpLnJlc2V0KHJvdywgdGFibGUpO1xuXG4gICAgbGVuZ3RoID0gbGluZS5sZW5ndGggKyAxO1xuICAgIGluZGV4ID0gMDtcbiAgICBxdWV1ZSA9ICcnO1xuICAgIGNlbGwgPSAnJztcbiAgICBwcmVhbWJsZSA9IHRydWU7XG4gICAgY291bnQgPSBudWxsO1xuICAgIG9wZW5pbmcgPSBudWxsO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdChpbmRleCk7XG5cbiAgICAgIGlmIChjaGFyYWN0ZXIgPT09IENfVEFCIHx8IGNoYXJhY3RlciA9PT0gQ19TUEFDRSkge1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlYXQoY2hhcmFjdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhcmFjdGVyID09PSAnJyB8fCBjaGFyYWN0ZXIgPT09IENfUElQRSkge1xuICAgICAgICBpZiAocHJlYW1ibGUpIHtcbiAgICAgICAgICBlYXQoY2hhcmFjdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY2hhcmFjdGVyICYmIG9wZW5pbmcpIHtcbiAgICAgICAgICAgIHF1ZXVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKGNlbGwgfHwgY2hhcmFjdGVyKSAmJiAhcHJlYW1ibGUpIHtcbiAgICAgICAgICAgIHN1YnZhbHVlID0gY2VsbDtcblxuICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgICAgIHN1YnZhbHVlICs9IHF1ZXVlLnNsaWNlKDAsIHF1ZXVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHF1ZXVlID0gcXVldWUuY2hhckF0KHF1ZXVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnZhbHVlICs9IHF1ZXVlO1xuICAgICAgICAgICAgICAgIHF1ZXVlID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm93ID0gZWF0Lm5vdygpO1xuXG4gICAgICAgICAgICBlYXQoc3VidmFsdWUpKHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RhYmxlQ2VsbCcsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBzZWxmLnRva2VuaXplSW5saW5lKGNlbGwsIG5vdylcbiAgICAgICAgICAgIH0sIHJvdyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWF0KHF1ZXVlICsgY2hhcmFjdGVyKTtcblxuICAgICAgICAgIHF1ZXVlID0gJyc7XG4gICAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocXVldWUpIHtcbiAgICAgICAgICBjZWxsICs9IHF1ZXVlO1xuICAgICAgICAgIHF1ZXVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjZWxsICs9IGNoYXJhY3RlcjtcblxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBDX0JBQ0tTTEFTSCAmJiBpbmRleCAhPT0gbGVuZ3RoIC0gMikge1xuICAgICAgICAgIGNlbGwgKz0gbGluZS5jaGFyQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gQ19USUNLKSB7XG4gICAgICAgICAgY291bnQgPSAxO1xuXG4gICAgICAgICAgd2hpbGUgKGxpbmUuY2hhckF0KGluZGV4ICsgMSkgPT09IGNoYXJhY3Rlcikge1xuICAgICAgICAgICAgY2VsbCArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBjb3VudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID49IG9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmVhbWJsZSA9IGZhbHNlO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICAvKiBFYXQgdGhlIGFsaWdubWVudCByb3cuICovXG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgZWF0KENfTkVXTElORSArIGFsaWdubWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBbkNBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/table.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/text.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/text.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = text;\n\nfunction text(eat, value, silent) {\n var self = this;\n var methods;\n var tokenizers;\n var index;\n var length;\n var subvalue;\n var position;\n var tokenizer;\n var name;\n var min;\n var now;\n /* istanbul ignore if - never used (yet) */\n\n if (silent) {\n return true;\n }\n\n methods = self.inlineMethods;\n length = methods.length;\n tokenizers = self.inlineTokenizers;\n index = -1;\n min = value.length;\n\n while (++index < length) {\n name = methods[index];\n\n if (name === 'text' || !tokenizers[name]) {\n continue;\n }\n\n tokenizer = tokenizers[name].locator;\n\n if (!tokenizer) {\n eat.file.fail('Missing locator: `' + name + '`');\n }\n\n position = tokenizer.call(self, value, 1);\n\n if (position !== -1 && position < min) {\n min = position;\n }\n }\n\n subvalue = value.slice(0, min);\n now = eat.now();\n self.decode(subvalue, now, function (content, position, source) {\n eat(source || content)({\n type: 'text',\n value: content\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi90b2tlbml6ZS90ZXh0LmpzPzljYTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRleHQ7XG5cbmZ1bmN0aW9uIHRleHQoZWF0LCB2YWx1ZSwgc2lsZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG1ldGhvZHM7XG4gIHZhciB0b2tlbml6ZXJzO1xuICB2YXIgaW5kZXg7XG4gIHZhciBsZW5ndGg7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIHBvc2l0aW9uO1xuICB2YXIgdG9rZW5pemVyO1xuICB2YXIgbmFtZTtcbiAgdmFyIG1pbjtcbiAgdmFyIG5vdztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBuZXZlciB1c2VkICh5ZXQpICovXG4gIGlmIChzaWxlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG1ldGhvZHMgPSBzZWxmLmlubGluZU1ldGhvZHM7XG4gIGxlbmd0aCA9IG1ldGhvZHMubGVuZ3RoO1xuICB0b2tlbml6ZXJzID0gc2VsZi5pbmxpbmVUb2tlbml6ZXJzO1xuICBpbmRleCA9IC0xO1xuICBtaW4gPSB2YWx1ZS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBuYW1lID0gbWV0aG9kc1tpbmRleF07XG5cbiAgICBpZiAobmFtZSA9PT0gJ3RleHQnIHx8ICF0b2tlbml6ZXJzW25hbWVdKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0b2tlbml6ZXIgPSB0b2tlbml6ZXJzW25hbWVdLmxvY2F0b3I7XG5cbiAgICBpZiAoIXRva2VuaXplcikge1xuICAgICAgZWF0LmZpbGUuZmFpbCgnTWlzc2luZyBsb2NhdG9yOiBgJyArIG5hbWUgKyAnYCcpO1xuICAgIH1cblxuICAgIHBvc2l0aW9uID0gdG9rZW5pemVyLmNhbGwoc2VsZiwgdmFsdWUsIDEpO1xuXG4gICAgaWYgKHBvc2l0aW9uICE9PSAtMSAmJiBwb3NpdGlvbiA8IG1pbikge1xuICAgICAgbWluID0gcG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgc3VidmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBtaW4pO1xuICBub3cgPSBlYXQubm93KCk7XG5cbiAgc2VsZi5kZWNvZGUoc3VidmFsdWUsIG5vdywgZnVuY3Rpb24gKGNvbnRlbnQsIHBvc2l0aW9uLCBzb3VyY2UpIHtcbiAgICBlYXQoc291cmNlIHx8IGNvbnRlbnQpKHtcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHZhbHVlOiBjb250ZW50XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/text.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/thematic-break.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/thematic-break.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = thematicBreak;\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\nvar C_SPACE = ' ';\nvar C_ASTERISK = '*';\nvar C_UNDERSCORE = '_';\nvar C_DASH = '-';\nvar THEMATIC_BREAK_MARKER_COUNT = 3;\n\nfunction thematicBreak(eat, value, silent) {\n var index = -1;\n var length = value.length + 1;\n var subvalue = '';\n var character;\n var marker;\n var markerCount;\n var queue;\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character !== C_TAB && character !== C_SPACE) {\n break;\n }\n\n subvalue += character;\n }\n\n if (character !== C_ASTERISK && character !== C_DASH && character !== C_UNDERSCORE) {\n return;\n }\n\n marker = character;\n subvalue += character;\n markerCount = 1;\n queue = '';\n\n while (++index < length) {\n character = value.charAt(index);\n\n if (character === marker) {\n markerCount++;\n subvalue += queue + marker;\n queue = '';\n } else if (character === C_SPACE) {\n queue += character;\n } else if (markerCount >= THEMATIC_BREAK_MARKER_COUNT && (!character || character === C_NEWLINE)) {\n subvalue += queue;\n\n if (silent) {\n return true;\n }\n\n return eat(subvalue)({\n type: 'thematicBreak'\n });\n } else {\n return;\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdGhlbWF0aWMtYnJlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdGhlbWF0aWMtYnJlYWsuanM/YjdiMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gdGhlbWF0aWNCcmVhaztcblxudmFyIENfTkVXTElORSA9ICdcXG4nO1xudmFyIENfVEFCID0gJ1xcdCc7XG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX0FTVEVSSVNLID0gJyonO1xudmFyIENfVU5ERVJTQ09SRSA9ICdfJztcbnZhciBDX0RBU0ggPSAnLSc7XG5cbnZhciBUSEVNQVRJQ19CUkVBS19NQVJLRVJfQ09VTlQgPSAzO1xuXG5mdW5jdGlvbiB0aGVtYXRpY0JyZWFrKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHZhbHVlLmxlbmd0aCArIDE7XG4gIHZhciBzdWJ2YWx1ZSA9ICcnO1xuICB2YXIgY2hhcmFjdGVyO1xuICB2YXIgbWFya2VyO1xuICB2YXIgbWFya2VyQ291bnQ7XG4gIHZhciBxdWV1ZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9PSBDX1RBQiAmJiBjaGFyYWN0ZXIgIT09IENfU1BBQ0UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN1YnZhbHVlICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGlmIChcbiAgICBjaGFyYWN0ZXIgIT09IENfQVNURVJJU0sgJiZcbiAgICBjaGFyYWN0ZXIgIT09IENfREFTSCAmJlxuICAgIGNoYXJhY3RlciAhPT0gQ19VTkRFUlNDT1JFXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG1hcmtlciA9IGNoYXJhY3RlcjtcbiAgc3VidmFsdWUgKz0gY2hhcmFjdGVyO1xuICBtYXJrZXJDb3VudCA9IDE7XG4gIHF1ZXVlID0gJyc7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaGFyYWN0ZXIgPSB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gbWFya2VyKSB7XG4gICAgICBtYXJrZXJDb3VudCsrO1xuICAgICAgc3VidmFsdWUgKz0gcXVldWUgKyBtYXJrZXI7XG4gICAgICBxdWV1ZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBDX1NQQUNFKSB7XG4gICAgICBxdWV1ZSArPSBjaGFyYWN0ZXI7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1hcmtlckNvdW50ID49IFRIRU1BVElDX0JSRUFLX01BUktFUl9DT1VOVCAmJlxuICAgICAgKCFjaGFyYWN0ZXIgfHwgY2hhcmFjdGVyID09PSBDX05FV0xJTkUpXG4gICAgKSB7XG4gICAgICBzdWJ2YWx1ZSArPSBxdWV1ZTtcblxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVhdChzdWJ2YWx1ZSkoe3R5cGU6ICd0aGVtYXRpY0JyZWFrJ30pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQURBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/thematic-break.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenize/url.js": -/*!********************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenize/url.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar decode = __webpack_require__(/*! parse-entities */ \"../node_modules/parse-entities/index.js\");\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar locate = __webpack_require__(/*! ../locate/url */ \"../node_modules/remark-parse/lib/locate/url.js\");\n\nmodule.exports = url;\nurl.locator = locate;\nurl.notInLink = true;\nvar C_BRACKET_OPEN = '[';\nvar C_BRACKET_CLOSE = ']';\nvar C_PAREN_OPEN = '(';\nvar C_PAREN_CLOSE = ')';\nvar C_LT = '<';\nvar C_AT_SIGN = '@';\nvar HTTP_PROTOCOL = 'http://';\nvar HTTPS_PROTOCOL = 'https://';\nvar MAILTO_PROTOCOL = 'mailto:';\nvar PROTOCOLS = [HTTP_PROTOCOL, HTTPS_PROTOCOL, MAILTO_PROTOCOL];\nvar PROTOCOLS_LENGTH = PROTOCOLS.length;\n\nfunction url(eat, value, silent) {\n var self = this;\n var subvalue;\n var content;\n var character;\n var index;\n var position;\n var protocol;\n var match;\n var length;\n var queue;\n var parenCount;\n var nextCharacter;\n var exit;\n\n if (!self.options.gfm) {\n return;\n }\n\n subvalue = '';\n index = -1;\n length = PROTOCOLS_LENGTH;\n\n while (++index < length) {\n protocol = PROTOCOLS[index];\n match = value.slice(0, protocol.length);\n\n if (match.toLowerCase() === protocol) {\n subvalue = match;\n break;\n }\n }\n\n if (!subvalue) {\n return;\n }\n\n index = subvalue.length;\n length = value.length;\n queue = '';\n parenCount = 0;\n\n while (index < length) {\n character = value.charAt(index);\n\n if (whitespace(character) || character === C_LT) {\n break;\n }\n\n if (character === '.' || character === ',' || character === ':' || character === ';' || character === '\"' || character === '\\'' || character === ')' || character === ']') {\n nextCharacter = value.charAt(index + 1);\n\n if (!nextCharacter || whitespace(nextCharacter)) {\n break;\n }\n }\n\n if (character === C_PAREN_OPEN || character === C_BRACKET_OPEN) {\n parenCount++;\n }\n\n if (character === C_PAREN_CLOSE || character === C_BRACKET_CLOSE) {\n parenCount--;\n\n if (parenCount < 0) {\n break;\n }\n }\n\n queue += character;\n index++;\n }\n\n if (!queue) {\n return;\n }\n\n subvalue += queue;\n content = subvalue;\n\n if (protocol === MAILTO_PROTOCOL) {\n position = queue.indexOf(C_AT_SIGN);\n\n if (position === -1 || position === length - 1) {\n return;\n }\n\n content = content.substr(MAILTO_PROTOCOL.length);\n }\n /* istanbul ignore if - never used (yet) */\n\n\n if (silent) {\n return true;\n }\n\n exit = self.enterLink();\n content = self.tokenizeInline(content, eat.now());\n exit();\n return eat(subvalue)({\n type: 'link',\n title: null,\n url: decode(subvalue, {\n nonTerminated: false\n }),\n children: content\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemUvdXJsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplL3VybC5qcz8yMGY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlY29kZSA9IHJlcXVpcmUoJ3BhcnNlLWVudGl0aWVzJyk7XG52YXIgd2hpdGVzcGFjZSA9IHJlcXVpcmUoJ2lzLXdoaXRlc3BhY2UtY2hhcmFjdGVyJyk7XG52YXIgbG9jYXRlID0gcmVxdWlyZSgnLi4vbG9jYXRlL3VybCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVybDtcbnVybC5sb2NhdG9yID0gbG9jYXRlO1xudXJsLm5vdEluTGluayA9IHRydWU7XG5cbnZhciBDX0JSQUNLRVRfT1BFTiA9ICdbJztcbnZhciBDX0JSQUNLRVRfQ0xPU0UgPSAnXSc7XG52YXIgQ19QQVJFTl9PUEVOID0gJygnO1xudmFyIENfUEFSRU5fQ0xPU0UgPSAnKSc7XG52YXIgQ19MVCA9ICc8JztcbnZhciBDX0FUX1NJR04gPSAnQCc7XG5cbnZhciBIVFRQX1BST1RPQ09MID0gJ2h0dHA6Ly8nO1xudmFyIEhUVFBTX1BST1RPQ09MID0gJ2h0dHBzOi8vJztcbnZhciBNQUlMVE9fUFJPVE9DT0wgPSAnbWFpbHRvOic7XG5cbnZhciBQUk9UT0NPTFMgPSBbXG4gIEhUVFBfUFJPVE9DT0wsXG4gIEhUVFBTX1BST1RPQ09MLFxuICBNQUlMVE9fUFJPVE9DT0xcbl07XG5cbnZhciBQUk9UT0NPTFNfTEVOR1RIID0gUFJPVE9DT0xTLmxlbmd0aDtcblxuZnVuY3Rpb24gdXJsKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzdWJ2YWx1ZTtcbiAgdmFyIGNvbnRlbnQ7XG4gIHZhciBjaGFyYWN0ZXI7XG4gIHZhciBpbmRleDtcbiAgdmFyIHBvc2l0aW9uO1xuICB2YXIgcHJvdG9jb2w7XG4gIHZhciBtYXRjaDtcbiAgdmFyIGxlbmd0aDtcbiAgdmFyIHF1ZXVlO1xuICB2YXIgcGFyZW5Db3VudDtcbiAgdmFyIG5leHRDaGFyYWN0ZXI7XG4gIHZhciBleGl0O1xuXG4gIGlmICghc2VsZi5vcHRpb25zLmdmbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnZhbHVlID0gJyc7XG4gIGluZGV4ID0gLTE7XG4gIGxlbmd0aCA9IFBST1RPQ09MU19MRU5HVEg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBwcm90b2NvbCA9IFBST1RPQ09MU1tpbmRleF07XG4gICAgbWF0Y2ggPSB2YWx1ZS5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpO1xuXG4gICAgaWYgKG1hdGNoLnRvTG93ZXJDYXNlKCkgPT09IHByb3RvY29sKSB7XG4gICAgICBzdWJ2YWx1ZSA9IG1hdGNoO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzdWJ2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluZGV4ID0gc3VidmFsdWUubGVuZ3RoO1xuICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIHF1ZXVlID0gJyc7XG4gIHBhcmVuQ291bnQgPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChpbmRleCk7XG5cbiAgICBpZiAod2hpdGVzcGFjZShjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PT0gQ19MVCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhcmFjdGVyID09PSAnLicgfHxcbiAgICAgIGNoYXJhY3RlciA9PT0gJywnIHx8XG4gICAgICBjaGFyYWN0ZXIgPT09ICc6JyB8fFxuICAgICAgY2hhcmFjdGVyID09PSAnOycgfHxcbiAgICAgIGNoYXJhY3RlciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhcmFjdGVyID09PSAnXFwnJyB8fFxuICAgICAgY2hhcmFjdGVyID09PSAnKScgfHxcbiAgICAgIGNoYXJhY3RlciA9PT0gJ10nXG4gICAgKSB7XG4gICAgICBuZXh0Q2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4ICsgMSk7XG5cbiAgICAgIGlmICghbmV4dENoYXJhY3RlciB8fCB3aGl0ZXNwYWNlKG5leHRDaGFyYWN0ZXIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09IENfUEFSRU5fT1BFTiB8fCBjaGFyYWN0ZXIgPT09IENfQlJBQ0tFVF9PUEVOKSB7XG4gICAgICBwYXJlbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlciA9PT0gQ19QQVJFTl9DTE9TRSB8fCBjaGFyYWN0ZXIgPT09IENfQlJBQ0tFVF9DTE9TRSkge1xuICAgICAgcGFyZW5Db3VudC0tO1xuXG4gICAgICBpZiAocGFyZW5Db3VudCA8IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUgKz0gY2hhcmFjdGVyO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAoIXF1ZXVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3VidmFsdWUgKz0gcXVldWU7XG4gIGNvbnRlbnQgPSBzdWJ2YWx1ZTtcblxuICBpZiAocHJvdG9jb2wgPT09IE1BSUxUT19QUk9UT0NPTCkge1xuICAgIHBvc2l0aW9uID0gcXVldWUuaW5kZXhPZihDX0FUX1NJR04pO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cihNQUlMVE9fUFJPVE9DT0wubGVuZ3RoKTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAtIG5ldmVyIHVzZWQgKHlldCkgKi9cbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXhpdCA9IHNlbGYuZW50ZXJMaW5rKCk7XG4gIGNvbnRlbnQgPSBzZWxmLnRva2VuaXplSW5saW5lKGNvbnRlbnQsIGVhdC5ub3coKSk7XG4gIGV4aXQoKTtcblxuICByZXR1cm4gZWF0KHN1YnZhbHVlKSh7XG4gICAgdHlwZTogJ2xpbmsnLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHVybDogZGVjb2RlKHN1YnZhbHVlLCB7bm9uVGVybWluYXRlZDogZmFsc2V9KSxcbiAgICBjaGlsZHJlbjogY29udGVudFxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenize/url.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/tokenizer.js": -/*!*****************************************************!*\ - !*** ../node_modules/remark-parse/lib/tokenizer.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = factory;\nvar MERGEABLE_NODES = {\n text: mergeText,\n blockquote: mergeBlockquote\n};\n/* Check whether a node is mergeable with adjacent nodes. */\n\nfunction mergeable(node) {\n var start;\n var end;\n\n if (node.type !== 'text' || !node.position) {\n return true;\n }\n\n start = node.position.start;\n end = node.position.end;\n /* Only merge nodes which occupy the same size as their\n * `value`. */\n\n return start.line !== end.line || end.column - start.column === node.value.length;\n}\n/* Merge two text nodes: `node` into `prev`. */\n\n\nfunction mergeText(prev, node) {\n prev.value += node.value;\n return prev;\n}\n/* Merge two blockquotes: `node` into `prev`, unless in\n * CommonMark mode. */\n\n\nfunction mergeBlockquote(prev, node) {\n if (this.options.commonmark) {\n return node;\n }\n\n prev.children = prev.children.concat(node.children);\n return prev;\n}\n/* Construct a tokenizer. This creates both\n * `tokenizeInline` and `tokenizeBlock`. */\n\n\nfunction factory(type) {\n return tokenize;\n /* Tokenizer for a bound `type`. */\n\n function tokenize(value, location) {\n var self = this;\n var offset = self.offset;\n var tokens = [];\n var methods = self[type + 'Methods'];\n var tokenizers = self[type + 'Tokenizers'];\n var line = location.line;\n var column = location.column;\n var index;\n var length;\n var method;\n var name;\n var matched;\n var valueLength;\n /* Trim white space only lines. */\n\n if (!value) {\n return tokens;\n }\n /* Expose on `eat`. */\n\n\n eat.now = now;\n eat.file = self.file;\n /* Sync initial offset. */\n\n updatePosition('');\n /* Iterate over `value`, and iterate over all\n * tokenizers. When one eats something, re-iterate\n * with the remaining value. If no tokenizer eats,\n * something failed (should not happen) and an\n * exception is thrown. */\n\n while (value) {\n index = -1;\n length = methods.length;\n matched = false;\n\n while (++index < length) {\n name = methods[index];\n method = tokenizers[name];\n\n if (method && (\n /* istanbul ignore next */\n !method.onlyAtStart || self.atStart) && (!method.notInList || !self.inList) && (!method.notInBlock || !self.inBlock) && (!method.notInLink || !self.inLink)) {\n valueLength = value.length;\n method.apply(self, [eat, value]);\n matched = valueLength !== value.length;\n\n if (matched) {\n break;\n }\n }\n }\n /* istanbul ignore if */\n\n\n if (!matched) {\n self.file.fail(new Error('Infinite loop'), eat.now());\n }\n }\n\n self.eof = now();\n return tokens;\n /* Update line, column, and offset based on\n * `value`. */\n\n function updatePosition(subvalue) {\n var lastIndex = -1;\n var index = subvalue.indexOf('\\n');\n\n while (index !== -1) {\n line++;\n lastIndex = index;\n index = subvalue.indexOf('\\n', index + 1);\n }\n\n if (lastIndex === -1) {\n column += subvalue.length;\n } else {\n column = subvalue.length - lastIndex;\n }\n\n if (line in offset) {\n if (lastIndex !== -1) {\n column += offset[line];\n } else if (column <= offset[line]) {\n column = offset[line] + 1;\n }\n }\n }\n /* Get offset. Called before the first character is\n * eaten to retrieve the range's offsets. */\n\n\n function getOffset() {\n var indentation = [];\n var pos = line + 1;\n /* Done. Called when the last character is\n * eaten to retrieve the range’s offsets. */\n\n return function () {\n var last = line + 1;\n\n while (pos < last) {\n indentation.push((offset[pos] || 0) + 1);\n pos++;\n }\n\n return indentation;\n };\n }\n /* Get the current position. */\n\n\n function now() {\n var pos = {\n line: line,\n column: column\n };\n pos.offset = self.toOffset(pos);\n return pos;\n }\n /* Store position information for a node. */\n\n\n function Position(start) {\n this.start = start;\n this.end = now();\n }\n /* Throw when a value is incorrectly eaten.\n * This shouldn’t happen but will throw on new,\n * incorrect rules. */\n\n\n function validateEat(subvalue) {\n /* istanbul ignore if */\n if (value.substring(0, subvalue.length) !== subvalue) {\n /* Capture stack-trace. */\n self.file.fail(new Error('Incorrectly eaten value: please report this ' + 'warning on http://git.io/vg5Ft'), now());\n }\n }\n /* Mark position and patch `node.position`. */\n\n\n function position() {\n var before = now();\n return update;\n /* Add the position to a node. */\n\n function update(node, indent) {\n var prev = node.position;\n var start = prev ? prev.start : before;\n var combined = [];\n var n = prev && prev.end.line;\n var l = before.line;\n node.position = new Position(start);\n /* If there was already a `position`, this\n * node was merged. Fixing `start` wasn’t\n * hard, but the indent is different.\n * Especially because some information, the\n * indent between `n` and `l` wasn’t\n * tracked. Luckily, that space is\n * (should be?) empty, so we can safely\n * check for it now. */\n\n if (prev && indent && prev.indent) {\n combined = prev.indent;\n\n if (n < l) {\n while (++n < l) {\n combined.push((offset[n] || 0) + 1);\n }\n\n combined.push(before.column);\n }\n\n indent = combined.concat(indent);\n }\n\n node.position.indent = indent || [];\n return node;\n }\n }\n /* Add `node` to `parent`s children or to `tokens`.\n * Performs merges where possible. */\n\n\n function add(node, parent) {\n var children = parent ? parent.children : tokens;\n var prev = children[children.length - 1];\n\n if (prev && node.type === prev.type && node.type in MERGEABLE_NODES && mergeable(prev) && mergeable(node)) {\n node = MERGEABLE_NODES[node.type].call(self, prev, node);\n }\n\n if (node !== prev) {\n children.push(node);\n }\n\n if (self.atStart && tokens.length !== 0) {\n self.exitStart();\n }\n\n return node;\n }\n /* Remove `subvalue` from `value`.\n * `subvalue` must be at the start of `value`. */\n\n\n function eat(subvalue) {\n var indent = getOffset();\n var pos = position();\n var current = now();\n validateEat(subvalue);\n apply.reset = reset;\n reset.test = test;\n apply.test = test;\n value = value.substring(subvalue.length);\n updatePosition(subvalue);\n indent = indent();\n return apply;\n /* Add the given arguments, add `position` to\n * the returned node, and return the node. */\n\n function apply(node, parent) {\n return pos(add(pos(node), parent), indent);\n }\n /* Functions just like apply, but resets the\n * content: the line and column are reversed,\n * and the eaten value is re-added.\n * This is useful for nodes with a single\n * type of content, such as lists and tables.\n * See `apply` above for what parameters are\n * expected. */\n\n\n function reset() {\n var node = apply.apply(null, arguments);\n line = current.line;\n column = current.column;\n value = subvalue + value;\n return node;\n }\n /* Test the position, after eating, and reverse\n * to a not-eaten state. */\n\n\n function test() {\n var result = pos({});\n line = current.line;\n column = current.column;\n value = subvalue + value;\n return result.position;\n }\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdG9rZW5pemVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3Rva2VuaXplci5qcz83ODkxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG52YXIgTUVSR0VBQkxFX05PREVTID0ge1xuICB0ZXh0OiBtZXJnZVRleHQsXG4gIGJsb2NrcXVvdGU6IG1lcmdlQmxvY2txdW90ZVxufTtcblxuLyogQ2hlY2sgd2hldGhlciBhIG5vZGUgaXMgbWVyZ2VhYmxlIHdpdGggYWRqYWNlbnQgbm9kZXMuICovXG5mdW5jdGlvbiBtZXJnZWFibGUobm9kZSkge1xuICB2YXIgc3RhcnQ7XG4gIHZhciBlbmQ7XG5cbiAgaWYgKG5vZGUudHlwZSAhPT0gJ3RleHQnIHx8ICFub2RlLnBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGFydCA9IG5vZGUucG9zaXRpb24uc3RhcnQ7XG4gIGVuZCA9IG5vZGUucG9zaXRpb24uZW5kO1xuXG4gIC8qIE9ubHkgbWVyZ2Ugbm9kZXMgd2hpY2ggb2NjdXB5IHRoZSBzYW1lIHNpemUgYXMgdGhlaXJcbiAgICogYHZhbHVlYC4gKi9cbiAgcmV0dXJuIHN0YXJ0LmxpbmUgIT09IGVuZC5saW5lIHx8XG4gICAgICBlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1uID09PSBub2RlLnZhbHVlLmxlbmd0aDtcbn1cblxuLyogTWVyZ2UgdHdvIHRleHQgbm9kZXM6IGBub2RlYCBpbnRvIGBwcmV2YC4gKi9cbmZ1bmN0aW9uIG1lcmdlVGV4dChwcmV2LCBub2RlKSB7XG4gIHByZXYudmFsdWUgKz0gbm9kZS52YWx1ZTtcblxuICByZXR1cm4gcHJldjtcbn1cblxuLyogTWVyZ2UgdHdvIGJsb2NrcXVvdGVzOiBgbm9kZWAgaW50byBgcHJldmAsIHVubGVzcyBpblxuICogQ29tbW9uTWFyayBtb2RlLiAqL1xuZnVuY3Rpb24gbWVyZ2VCbG9ja3F1b3RlKHByZXYsIG5vZGUpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5jb21tb25tYXJrKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcmV2LmNoaWxkcmVuID0gcHJldi5jaGlsZHJlbi5jb25jYXQobm9kZS5jaGlsZHJlbik7XG5cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8qIENvbnN0cnVjdCBhIHRva2VuaXplci4gIFRoaXMgY3JlYXRlcyBib3RoXG4gKiBgdG9rZW5pemVJbmxpbmVgIGFuZCBgdG9rZW5pemVCbG9ja2AuICovXG5mdW5jdGlvbiBmYWN0b3J5KHR5cGUpIHtcbiAgcmV0dXJuIHRva2VuaXplO1xuXG4gIC8qIFRva2VuaXplciBmb3IgYSBib3VuZCBgdHlwZWAuICovXG4gIGZ1bmN0aW9uIHRva2VuaXplKHZhbHVlLCBsb2NhdGlvbikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgb2Zmc2V0ID0gc2VsZi5vZmZzZXQ7XG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciBtZXRob2RzID0gc2VsZlt0eXBlICsgJ01ldGhvZHMnXTtcbiAgICB2YXIgdG9rZW5pemVycyA9IHNlbGZbdHlwZSArICdUb2tlbml6ZXJzJ107XG4gICAgdmFyIGxpbmUgPSBsb2NhdGlvbi5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW47XG4gICAgdmFyIGluZGV4O1xuICAgIHZhciBsZW5ndGg7XG4gICAgdmFyIG1ldGhvZDtcbiAgICB2YXIgbmFtZTtcbiAgICB2YXIgbWF0Y2hlZDtcbiAgICB2YXIgdmFsdWVMZW5ndGg7XG5cbiAgICAvKiBUcmltIHdoaXRlIHNwYWNlIG9ubHkgbGluZXMuICovXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG5cbiAgICAvKiBFeHBvc2Ugb24gYGVhdGAuICovXG4gICAgZWF0Lm5vdyA9IG5vdztcbiAgICBlYXQuZmlsZSA9IHNlbGYuZmlsZTtcblxuICAgIC8qIFN5bmMgaW5pdGlhbCBvZmZzZXQuICovXG4gICAgdXBkYXRlUG9zaXRpb24oJycpO1xuXG4gICAgLyogSXRlcmF0ZSBvdmVyIGB2YWx1ZWAsIGFuZCBpdGVyYXRlIG92ZXIgYWxsXG4gICAgICogdG9rZW5pemVycy4gIFdoZW4gb25lIGVhdHMgc29tZXRoaW5nLCByZS1pdGVyYXRlXG4gICAgICogd2l0aCB0aGUgcmVtYWluaW5nIHZhbHVlLiAgSWYgbm8gdG9rZW5pemVyIGVhdHMsXG4gICAgICogc29tZXRoaW5nIGZhaWxlZCAoc2hvdWxkIG5vdCBoYXBwZW4pIGFuZCBhblxuICAgICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uICovXG4gICAgd2hpbGUgKHZhbHVlKSB7XG4gICAgICBpbmRleCA9IC0xO1xuICAgICAgbGVuZ3RoID0gbWV0aG9kcy5sZW5ndGg7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG5hbWUgPSBtZXRob2RzW2luZGV4XTtcbiAgICAgICAgbWV0aG9kID0gdG9rZW5pemVyc1tuYW1lXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWV0aG9kICYmXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gKCFtZXRob2Qub25seUF0U3RhcnQgfHwgc2VsZi5hdFN0YXJ0KSAmJlxuICAgICAgICAgICghbWV0aG9kLm5vdEluTGlzdCB8fCAhc2VsZi5pbkxpc3QpICYmXG4gICAgICAgICAgKCFtZXRob2Qubm90SW5CbG9jayB8fCAhc2VsZi5pbkJsb2NrKSAmJlxuICAgICAgICAgICghbWV0aG9kLm5vdEluTGluayB8fCAhc2VsZi5pbkxpbmspXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuXG4gICAgICAgICAgbWV0aG9kLmFwcGx5KHNlbGYsIFtlYXQsIHZhbHVlXSk7XG5cbiAgICAgICAgICBtYXRjaGVkID0gdmFsdWVMZW5ndGggIT09IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIW1hdGNoZWQpIHtcbiAgICAgICAgc2VsZi5maWxlLmZhaWwobmV3IEVycm9yKCdJbmZpbml0ZSBsb29wJyksIGVhdC5ub3coKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VsZi5lb2YgPSBub3coKTtcblxuICAgIHJldHVybiB0b2tlbnM7XG5cbiAgICAvKiBVcGRhdGUgbGluZSwgY29sdW1uLCBhbmQgb2Zmc2V0IGJhc2VkIG9uXG4gICAgICogYHZhbHVlYC4gKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbihzdWJ2YWx1ZSkge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IC0xO1xuICAgICAgdmFyIGluZGV4ID0gc3VidmFsdWUuaW5kZXhPZignXFxuJyk7XG5cbiAgICAgIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluZSsrO1xuICAgICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaW5kZXggPSBzdWJ2YWx1ZS5pbmRleE9mKCdcXG4nLCBpbmRleCArIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGFzdEluZGV4ID09PSAtMSkge1xuICAgICAgICBjb2x1bW4gKz0gc3VidmFsdWUubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uID0gc3VidmFsdWUubGVuZ3RoIC0gbGFzdEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAobGluZSBpbiBvZmZzZXQpIHtcbiAgICAgICAgaWYgKGxhc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBjb2x1bW4gKz0gb2Zmc2V0W2xpbmVdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbiA8PSBvZmZzZXRbbGluZV0pIHtcbiAgICAgICAgICBjb2x1bW4gPSBvZmZzZXRbbGluZV0gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogR2V0IG9mZnNldC4gIENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpc1xuICAgICAqIGVhdGVuIHRvIHJldHJpZXZlIHRoZSByYW5nZSdzIG9mZnNldHMuICovXG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIGluZGVudGF0aW9uID0gW107XG4gICAgICB2YXIgcG9zID0gbGluZSArIDE7XG5cbiAgICAgIC8qIERvbmUuICBDYWxsZWQgd2hlbiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXNcbiAgICAgICAqIGVhdGVuIHRvIHJldHJpZXZlIHRoZSByYW5nZeKAmXMgb2Zmc2V0cy4gKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYXN0ID0gbGluZSArIDE7XG5cbiAgICAgICAgd2hpbGUgKHBvcyA8IGxhc3QpIHtcbiAgICAgICAgICBpbmRlbnRhdGlvbi5wdXNoKChvZmZzZXRbcG9zXSB8fCAwKSArIDEpO1xuXG4gICAgICAgICAgcG9zKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZW50YXRpb247XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbi4gKi9cbiAgICBmdW5jdGlvbiBub3coKSB7XG4gICAgICB2YXIgcG9zID0ge2xpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1ufTtcblxuICAgICAgcG9zLm9mZnNldCA9IHNlbGYudG9PZmZzZXQocG9zKTtcblxuICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG5cbiAgICAvKiBTdG9yZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBub2RlLiAqL1xuICAgIGZ1bmN0aW9uIFBvc2l0aW9uKHN0YXJ0KSB7XG4gICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICB0aGlzLmVuZCA9IG5vdygpO1xuICAgIH1cblxuICAgIC8qIFRocm93IHdoZW4gYSB2YWx1ZSBpcyBpbmNvcnJlY3RseSBlYXRlbi5cbiAgICAgKiBUaGlzIHNob3VsZG7igJl0IGhhcHBlbiBidXQgd2lsbCB0aHJvdyBvbiBuZXcsXG4gICAgICogaW5jb3JyZWN0IHJ1bGVzLiAqL1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRWF0KHN1YnZhbHVlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh2YWx1ZS5zdWJzdHJpbmcoMCwgc3VidmFsdWUubGVuZ3RoKSAhPT0gc3VidmFsdWUpIHtcbiAgICAgICAgLyogQ2FwdHVyZSBzdGFjay10cmFjZS4gKi9cbiAgICAgICAgc2VsZi5maWxlLmZhaWwoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0luY29ycmVjdGx5IGVhdGVuIHZhbHVlOiBwbGVhc2UgcmVwb3J0IHRoaXMgJyArXG4gICAgICAgICAgICAnd2FybmluZyBvbiBodHRwOi8vZ2l0LmlvL3ZnNUZ0J1xuICAgICAgICAgICksXG4gICAgICAgICAgbm93KClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBNYXJrIHBvc2l0aW9uIGFuZCBwYXRjaCBgbm9kZS5wb3NpdGlvbmAuICovXG4gICAgZnVuY3Rpb24gcG9zaXRpb24oKSB7XG4gICAgICB2YXIgYmVmb3JlID0gbm93KCk7XG5cbiAgICAgIHJldHVybiB1cGRhdGU7XG5cbiAgICAgIC8qIEFkZCB0aGUgcG9zaXRpb24gdG8gYSBub2RlLiAqL1xuICAgICAgZnVuY3Rpb24gdXBkYXRlKG5vZGUsIGluZGVudCkge1xuICAgICAgICB2YXIgcHJldiA9IG5vZGUucG9zaXRpb247XG4gICAgICAgIHZhciBzdGFydCA9IHByZXYgPyBwcmV2LnN0YXJ0IDogYmVmb3JlO1xuICAgICAgICB2YXIgY29tYmluZWQgPSBbXTtcbiAgICAgICAgdmFyIG4gPSBwcmV2ICYmIHByZXYuZW5kLmxpbmU7XG4gICAgICAgIHZhciBsID0gYmVmb3JlLmxpbmU7XG5cbiAgICAgICAgbm9kZS5wb3NpdGlvbiA9IG5ldyBQb3NpdGlvbihzdGFydCk7XG5cbiAgICAgICAgLyogSWYgdGhlcmUgd2FzIGFscmVhZHkgYSBgcG9zaXRpb25gLCB0aGlzXG4gICAgICAgICAqIG5vZGUgd2FzIG1lcmdlZC4gIEZpeGluZyBgc3RhcnRgIHdhc27igJl0XG4gICAgICAgICAqIGhhcmQsIGJ1dCB0aGUgaW5kZW50IGlzIGRpZmZlcmVudC5cbiAgICAgICAgICogRXNwZWNpYWxseSBiZWNhdXNlIHNvbWUgaW5mb3JtYXRpb24sIHRoZVxuICAgICAgICAgKiBpbmRlbnQgYmV0d2VlbiBgbmAgYW5kIGBsYCB3YXNu4oCZdFxuICAgICAgICAgKiB0cmFja2VkLiAgTHVja2lseSwgdGhhdCBzcGFjZSBpc1xuICAgICAgICAgKiAoc2hvdWxkIGJlPykgZW1wdHksIHNvIHdlIGNhbiBzYWZlbHlcbiAgICAgICAgICogY2hlY2sgZm9yIGl0IG5vdy4gKi9cbiAgICAgICAgaWYgKHByZXYgJiYgaW5kZW50ICYmIHByZXYuaW5kZW50KSB7XG4gICAgICAgICAgY29tYmluZWQgPSBwcmV2LmluZGVudDtcblxuICAgICAgICAgIGlmIChuIDwgbCkge1xuICAgICAgICAgICAgd2hpbGUgKCsrbiA8IGwpIHtcbiAgICAgICAgICAgICAgY29tYmluZWQucHVzaCgob2Zmc2V0W25dIHx8IDApICsgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbWJpbmVkLnB1c2goYmVmb3JlLmNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZW50ID0gY29tYmluZWQuY29uY2F0KGluZGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnBvc2l0aW9uLmluZGVudCA9IGluZGVudCB8fCBbXTtcblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBBZGQgYG5vZGVgIHRvIGBwYXJlbnRgcyBjaGlsZHJlbiBvciB0byBgdG9rZW5zYC5cbiAgICAgKiBQZXJmb3JtcyBtZXJnZXMgd2hlcmUgcG9zc2libGUuICovXG4gICAgZnVuY3Rpb24gYWRkKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogdG9rZW5zO1xuICAgICAgdmFyIHByZXYgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKFxuICAgICAgICBwcmV2ICYmXG4gICAgICAgIG5vZGUudHlwZSA9PT0gcHJldi50eXBlICYmXG4gICAgICAgIG5vZGUudHlwZSBpbiBNRVJHRUFCTEVfTk9ERVMgJiZcbiAgICAgICAgbWVyZ2VhYmxlKHByZXYpICYmXG4gICAgICAgIG1lcmdlYWJsZShub2RlKVxuICAgICAgKSB7XG4gICAgICAgIG5vZGUgPSBNRVJHRUFCTEVfTk9ERVNbbm9kZS50eXBlXS5jYWxsKHNlbGYsIHByZXYsIG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSAhPT0gcHJldikge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZi5hdFN0YXJ0ICYmIHRva2Vucy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgc2VsZi5leGl0U3RhcnQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgLyogUmVtb3ZlIGBzdWJ2YWx1ZWAgZnJvbSBgdmFsdWVgLlxuICAgICAqIGBzdWJ2YWx1ZWAgbXVzdCBiZSBhdCB0aGUgc3RhcnQgb2YgYHZhbHVlYC4gKi9cbiAgICBmdW5jdGlvbiBlYXQoc3VidmFsdWUpIHtcbiAgICAgIHZhciBpbmRlbnQgPSBnZXRPZmZzZXQoKTtcbiAgICAgIHZhciBwb3MgPSBwb3NpdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnQgPSBub3coKTtcblxuICAgICAgdmFsaWRhdGVFYXQoc3VidmFsdWUpO1xuXG4gICAgICBhcHBseS5yZXNldCA9IHJlc2V0O1xuICAgICAgcmVzZXQudGVzdCA9IHRlc3Q7XG4gICAgICBhcHBseS50ZXN0ID0gdGVzdDtcblxuICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3VidmFsdWUubGVuZ3RoKTtcblxuICAgICAgdXBkYXRlUG9zaXRpb24oc3VidmFsdWUpO1xuXG4gICAgICBpbmRlbnQgPSBpbmRlbnQoKTtcblxuICAgICAgcmV0dXJuIGFwcGx5O1xuXG4gICAgICAvKiBBZGQgdGhlIGdpdmVuIGFyZ3VtZW50cywgYWRkIGBwb3NpdGlvbmAgdG9cbiAgICAgICAqIHRoZSByZXR1cm5lZCBub2RlLCBhbmQgcmV0dXJuIHRoZSBub2RlLiAqL1xuICAgICAgZnVuY3Rpb24gYXBwbHkobm9kZSwgcGFyZW50KSB7XG4gICAgICAgIHJldHVybiBwb3MoYWRkKHBvcyhub2RlKSwgcGFyZW50KSwgaW5kZW50KTtcbiAgICAgIH1cblxuICAgICAgLyogRnVuY3Rpb25zIGp1c3QgbGlrZSBhcHBseSwgYnV0IHJlc2V0cyB0aGVcbiAgICAgICAqIGNvbnRlbnQ6ICB0aGUgbGluZSBhbmQgY29sdW1uIGFyZSByZXZlcnNlZCxcbiAgICAgICAqIGFuZCB0aGUgZWF0ZW4gdmFsdWUgaXMgcmUtYWRkZWQuXG4gICAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igbm9kZXMgd2l0aCBhIHNpbmdsZVxuICAgICAgICogdHlwZSBvZiBjb250ZW50LCBzdWNoIGFzIGxpc3RzIGFuZCB0YWJsZXMuXG4gICAgICAgKiBTZWUgYGFwcGx5YCBhYm92ZSBmb3Igd2hhdCBwYXJhbWV0ZXJzIGFyZVxuICAgICAgICogZXhwZWN0ZWQuICovXG4gICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBhcHBseS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIGxpbmUgPSBjdXJyZW50LmxpbmU7XG4gICAgICAgIGNvbHVtbiA9IGN1cnJlbnQuY29sdW1uO1xuICAgICAgICB2YWx1ZSA9IHN1YnZhbHVlICsgdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIC8qIFRlc3QgdGhlIHBvc2l0aW9uLCBhZnRlciBlYXRpbmcsIGFuZCByZXZlcnNlXG4gICAgICAgKiB0byBhIG5vdC1lYXRlbiBzdGF0ZS4gKi9cbiAgICAgIGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBwb3Moe30pO1xuXG4gICAgICAgIGxpbmUgPSBjdXJyZW50LmxpbmU7XG4gICAgICAgIGNvbHVtbiA9IGN1cnJlbnQuY29sdW1uO1xuICAgICAgICB2YWx1ZSA9IHN1YnZhbHVlICsgdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5wb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFLQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/tokenizer.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/unescape.js": -/*!****************************************************!*\ - !*** ../node_modules/remark-parse/lib/unescape.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = factory;\n/* Factory to de-escape a value, based on a list at `key`\n * in `ctx`. */\n\nfunction factory(ctx, key) {\n return unescape;\n /* De-escape a string using the expression at `key`\n * in `ctx`. */\n\n function unescape(value) {\n var prev = 0;\n var index = value.indexOf('\\\\');\n var escape = ctx[key];\n var queue = [];\n var character;\n\n while (index !== -1) {\n queue.push(value.slice(prev, index));\n prev = index + 1;\n character = value.charAt(prev);\n /* If the following character is not a valid escape,\n * add the slash. */\n\n if (!character || escape.indexOf(character) === -1) {\n queue.push('\\\\');\n }\n\n index = value.indexOf('\\\\', prev);\n }\n\n queue.push(value.slice(prev));\n return queue.join('');\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdW5lc2NhcGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdW5lc2NhcGUuanM/NGRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcblxuLyogRmFjdG9yeSB0byBkZS1lc2NhcGUgYSB2YWx1ZSwgYmFzZWQgb24gYSBsaXN0IGF0IGBrZXlgXG4gKiBpbiBgY3R4YC4gKi9cbmZ1bmN0aW9uIGZhY3RvcnkoY3R4LCBrZXkpIHtcbiAgcmV0dXJuIHVuZXNjYXBlO1xuXG4gIC8qIERlLWVzY2FwZSBhIHN0cmluZyB1c2luZyB0aGUgZXhwcmVzc2lvbiBhdCBga2V5YFxuICAgKiBpbiBgY3R4YC4gKi9cbiAgZnVuY3Rpb24gdW5lc2NhcGUodmFsdWUpIHtcbiAgICB2YXIgcHJldiA9IDA7XG4gICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZignXFxcXCcpO1xuICAgIHZhciBlc2NhcGUgPSBjdHhba2V5XTtcbiAgICB2YXIgcXVldWUgPSBbXTtcbiAgICB2YXIgY2hhcmFjdGVyO1xuXG4gICAgd2hpbGUgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcXVldWUucHVzaCh2YWx1ZS5zbGljZShwcmV2LCBpbmRleCkpO1xuICAgICAgcHJldiA9IGluZGV4ICsgMTtcbiAgICAgIGNoYXJhY3RlciA9IHZhbHVlLmNoYXJBdChwcmV2KTtcblxuICAgICAgLyogSWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgbm90IGEgdmFsaWQgZXNjYXBlLFxuICAgICAgICogYWRkIHRoZSBzbGFzaC4gKi9cbiAgICAgIGlmICghY2hhcmFjdGVyIHx8IGVzY2FwZS5pbmRleE9mKGNoYXJhY3RlcikgPT09IC0xKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goJ1xcXFwnKTtcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSB2YWx1ZS5pbmRleE9mKCdcXFxcJywgcHJldik7XG4gICAgfVxuXG4gICAgcXVldWUucHVzaCh2YWx1ZS5zbGljZShwcmV2KSk7XG5cbiAgICByZXR1cm4gcXVldWUuam9pbignJyk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7OztBQUVBO0FBQ0E7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/unescape.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/util/get-indentation.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-parse/lib/util/get-indentation.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = indentation;\n/* Map of characters, and their column length,\n * which can be used as indentation. */\n\nvar characters = {\n ' ': 1,\n '\\t': 4\n};\n/* Gets indentation information for a line. */\n\nfunction indentation(value) {\n var index = 0;\n var indent = 0;\n var character = value.charAt(index);\n var stops = {};\n var size;\n\n while (character in characters) {\n size = characters[character];\n indent += size;\n\n if (size > 1) {\n indent = Math.floor(indent / size) * size;\n }\n\n stops[indent] = index;\n character = value.charAt(++index);\n }\n\n return {\n indent: indent,\n stops: stops\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9nZXQtaW5kZW50YXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9nZXQtaW5kZW50YXRpb24uanM/MWZmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5kZW50YXRpb247XG5cbi8qIE1hcCBvZiBjaGFyYWN0ZXJzLCBhbmQgdGhlaXIgY29sdW1uIGxlbmd0aCxcbiAqIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGluZGVudGF0aW9uLiAqL1xudmFyIGNoYXJhY3RlcnMgPSB7JyAnOiAxLCAnXFx0JzogNH07XG5cbi8qIEdldHMgaW5kZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGEgbGluZS4gKi9cbmZ1bmN0aW9uIGluZGVudGF0aW9uKHZhbHVlKSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBpbmRlbnQgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgdmFyIHN0b3BzID0ge307XG4gIHZhciBzaXplO1xuXG4gIHdoaWxlIChjaGFyYWN0ZXIgaW4gY2hhcmFjdGVycykge1xuICAgIHNpemUgPSBjaGFyYWN0ZXJzW2NoYXJhY3Rlcl07XG5cbiAgICBpbmRlbnQgKz0gc2l6ZTtcblxuICAgIGlmIChzaXplID4gMSkge1xuICAgICAgaW5kZW50ID0gTWF0aC5mbG9vcihpbmRlbnQgLyBzaXplKSAqIHNpemU7XG4gICAgfVxuXG4gICAgc3RvcHNbaW5kZW50XSA9IGluZGV4O1xuXG4gICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KCsraW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtpbmRlbnQ6IGluZGVudCwgc3RvcHM6IHN0b3BzfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/util/get-indentation.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/util/html.js": -/*!*****************************************************!*\ - !*** ../node_modules/remark-parse/lib/util/html.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar attributeName = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = \"[^\\\"'=<>`\\\\u0000-\\\\u0020]+\";\nvar singleQuoted = '\\'[^\\']*\\'';\nvar doubleQuoted = '\"[^\"]*\"';\nvar attributeValue = '(?:' + unquoted + '|' + singleQuoted + '|' + doubleQuoted + ')';\nvar attribute = '(?:\\\\s+' + attributeName + '(?:\\\\s*=\\\\s*' + attributeValue + ')?)';\nvar openTag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar closeTag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?].*?[?]>';\nvar declaration = '<![A-Za-z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nexports.openCloseTag = new RegExp('^(?:' + openTag + '|' + closeTag + ')');\nexports.tag = new RegExp('^(?:' + openTag + '|' + closeTag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9odG1sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL3V0aWwvaHRtbC5qcz81ODRkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGF0dHJpYnV0ZU5hbWUgPSAnW2EtekEtWl86XVthLXpBLVowLTk6Ll8tXSonO1xudmFyIHVucXVvdGVkID0gJ1teXCJcXCc9PD5gXFxcXHUwMDAwLVxcXFx1MDAyMF0rJztcbnZhciBzaW5nbGVRdW90ZWQgPSAnXFwnW15cXCddKlxcJyc7XG52YXIgZG91YmxlUXVvdGVkID0gJ1wiW15cIl0qXCInO1xudmFyIGF0dHJpYnV0ZVZhbHVlID0gJyg/OicgKyB1bnF1b3RlZCArICd8JyArIHNpbmdsZVF1b3RlZCArICd8JyArIGRvdWJsZVF1b3RlZCArICcpJztcbnZhciBhdHRyaWJ1dGUgPSAnKD86XFxcXHMrJyArIGF0dHJpYnV0ZU5hbWUgKyAnKD86XFxcXHMqPVxcXFxzKicgKyBhdHRyaWJ1dGVWYWx1ZSArICcpPyknO1xudmFyIG9wZW5UYWcgPSAnPFtBLVphLXpdW0EtWmEtejAtOVxcXFwtXSonICsgYXR0cmlidXRlICsgJypcXFxccypcXFxcLz8+JztcbnZhciBjbG9zZVRhZyA9ICc8XFxcXC9bQS1aYS16XVtBLVphLXowLTlcXFxcLV0qXFxcXHMqPic7XG52YXIgY29tbWVudCA9ICc8IS0tLS0+fDwhLS0oPzotP1tePi1dKSg/Oi0/W14tXSkqLS0+JztcbnZhciBwcm9jZXNzaW5nID0gJzxbP10uKj9bP10+JztcbnZhciBkZWNsYXJhdGlvbiA9ICc8IVtBLVphLXpdK1xcXFxzK1tePl0qPic7XG52YXIgY2RhdGEgPSAnPCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+JztcblxuZXhwb3J0cy5vcGVuQ2xvc2VUYWcgPSBuZXcgUmVnRXhwKCdeKD86JyArIG9wZW5UYWcgKyAnfCcgKyBjbG9zZVRhZyArICcpJyk7XG5cbmV4cG9ydHMudGFnID0gbmV3IFJlZ0V4cCgnXig/OicgK1xuICBvcGVuVGFnICsgJ3wnICtcbiAgY2xvc2VUYWcgKyAnfCcgK1xuICBjb21tZW50ICsgJ3wnICtcbiAgcHJvY2Vzc2luZyArICd8JyArXG4gIGRlY2xhcmF0aW9uICsgJ3wnICtcbiAgY2RhdGEgK1xuJyknKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/util/html.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/util/interrupt.js": -/*!**********************************************************!*\ - !*** ../node_modules/remark-parse/lib/util/interrupt.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = interrupt;\n\nfunction interrupt(interruptors, tokenizers, ctx, params) {\n var bools = ['pedantic', 'commonmark'];\n var count = bools.length;\n var length = interruptors.length;\n var index = -1;\n var interruptor;\n var config;\n var fn;\n var offset;\n var bool;\n var ignore;\n\n while (++index < length) {\n interruptor = interruptors[index];\n config = interruptor[1] || {};\n fn = interruptor[0];\n offset = -1;\n ignore = false;\n\n while (++offset < count) {\n bool = bools[offset];\n\n if (config[bool] !== undefined && config[bool] !== ctx.options[bool]) {\n ignore = true;\n break;\n }\n }\n\n if (ignore) {\n continue;\n }\n\n if (tokenizers[fn].apply(ctx, params)) {\n return true;\n }\n }\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9pbnRlcnJ1cHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9pbnRlcnJ1cHQuanM/YzU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJydXB0O1xuXG5mdW5jdGlvbiBpbnRlcnJ1cHQoaW50ZXJydXB0b3JzLCB0b2tlbml6ZXJzLCBjdHgsIHBhcmFtcykge1xuICB2YXIgYm9vbHMgPSBbJ3BlZGFudGljJywgJ2NvbW1vbm1hcmsnXTtcbiAgdmFyIGNvdW50ID0gYm9vbHMubGVuZ3RoO1xuICB2YXIgbGVuZ3RoID0gaW50ZXJydXB0b3JzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBpbnRlcnJ1cHRvcjtcbiAgdmFyIGNvbmZpZztcbiAgdmFyIGZuO1xuICB2YXIgb2Zmc2V0O1xuICB2YXIgYm9vbDtcbiAgdmFyIGlnbm9yZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGludGVycnVwdG9yID0gaW50ZXJydXB0b3JzW2luZGV4XTtcbiAgICBjb25maWcgPSBpbnRlcnJ1cHRvclsxXSB8fCB7fTtcbiAgICBmbiA9IGludGVycnVwdG9yWzBdO1xuICAgIG9mZnNldCA9IC0xO1xuICAgIGlnbm9yZSA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKCsrb2Zmc2V0IDwgY291bnQpIHtcbiAgICAgIGJvb2wgPSBib29sc1tvZmZzZXRdO1xuXG4gICAgICBpZiAoY29uZmlnW2Jvb2xdICE9PSB1bmRlZmluZWQgJiYgY29uZmlnW2Jvb2xdICE9PSBjdHgub3B0aW9uc1tib29sXSkge1xuICAgICAgICBpZ25vcmUgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaWdub3JlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5pemVyc1tmbl0uYXBwbHkoY3R4LCBwYXJhbXMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/util/interrupt.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/util/normalize.js": -/*!**********************************************************!*\ - !*** ../node_modules/remark-parse/lib/util/normalize.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar collapseWhiteSpace = __webpack_require__(/*! collapse-white-space */ \"../node_modules/collapse-white-space/index.js\");\n\nmodule.exports = normalize;\n/* Normalize an identifier. Collapses multiple white space\n * characters into a single space, and removes casing. */\n\nfunction normalize(value) {\n return collapseWhiteSpace(value).toLowerCase();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9ub3JtYWxpemUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9ub3JtYWxpemUuanM/NDE4YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjb2xsYXBzZVdoaXRlU3BhY2UgPSByZXF1aXJlKCdjb2xsYXBzZS13aGl0ZS1zcGFjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vcm1hbGl6ZTtcblxuLyogTm9ybWFsaXplIGFuIGlkZW50aWZpZXIuICBDb2xsYXBzZXMgbXVsdGlwbGUgd2hpdGUgc3BhY2VcbiAqIGNoYXJhY3RlcnMgaW50byBhIHNpbmdsZSBzcGFjZSwgYW5kIHJlbW92ZXMgY2FzaW5nLiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlKSB7XG4gIHJldHVybiBjb2xsYXBzZVdoaXRlU3BhY2UodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/util/normalize.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-parse/lib/util/remove-indentation.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-parse/lib/util/remove-indentation.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar trim = __webpack_require__(/*! trim */ \"../node_modules/trim/index.js\");\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar getIndent = __webpack_require__(/*! ./get-indentation */ \"../node_modules/remark-parse/lib/util/get-indentation.js\");\n\nmodule.exports = indentation;\nvar C_SPACE = ' ';\nvar C_NEWLINE = '\\n';\nvar C_TAB = '\\t';\n/* Remove the minimum indent from every line in `value`.\n * Supports both tab, spaced, and mixed indentation (as\n * well as possible). */\n\nfunction indentation(value, maximum) {\n var values = value.split(C_NEWLINE);\n var position = values.length + 1;\n var minIndent = Infinity;\n var matrix = [];\n var index;\n var indentation;\n var stops;\n var padding;\n values.unshift(repeat(C_SPACE, maximum) + '!');\n\n while (position--) {\n indentation = getIndent(values[position]);\n matrix[position] = indentation.stops;\n\n if (trim(values[position]).length === 0) {\n continue;\n }\n\n if (indentation.indent) {\n if (indentation.indent > 0 && indentation.indent < minIndent) {\n minIndent = indentation.indent;\n }\n } else {\n minIndent = Infinity;\n break;\n }\n }\n\n if (minIndent !== Infinity) {\n position = values.length;\n\n while (position--) {\n stops = matrix[position];\n index = minIndent;\n\n while (index && !(index in stops)) {\n index--;\n }\n\n if (trim(values[position]).length !== 0 && minIndent && index !== minIndent) {\n padding = C_TAB;\n } else {\n padding = '';\n }\n\n values[position] = padding + values[position].slice(index in stops ? stops[index] + 1 : 0);\n }\n }\n\n values.shift();\n return values.join(C_NEWLINE);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9yZW1vdmUtaW5kZW50YXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvdXRpbC9yZW1vdmUtaW5kZW50YXRpb24uanM/ZjEwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0cmltID0gcmVxdWlyZSgndHJpbScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbnZhciBnZXRJbmRlbnQgPSByZXF1aXJlKCcuL2dldC1pbmRlbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGVudGF0aW9uO1xuXG52YXIgQ19TUEFDRSA9ICcgJztcbnZhciBDX05FV0xJTkUgPSAnXFxuJztcbnZhciBDX1RBQiA9ICdcXHQnO1xuXG4vKiBSZW1vdmUgdGhlIG1pbmltdW0gaW5kZW50IGZyb20gZXZlcnkgbGluZSBpbiBgdmFsdWVgLlxuICogU3VwcG9ydHMgYm90aCB0YWIsIHNwYWNlZCwgYW5kIG1peGVkIGluZGVudGF0aW9uIChhc1xuICogd2VsbCBhcyBwb3NzaWJsZSkuICovXG5mdW5jdGlvbiBpbmRlbnRhdGlvbih2YWx1ZSwgbWF4aW11bSkge1xuICB2YXIgdmFsdWVzID0gdmFsdWUuc3BsaXQoQ19ORVdMSU5FKTtcbiAgdmFyIHBvc2l0aW9uID0gdmFsdWVzLmxlbmd0aCArIDE7XG4gIHZhciBtaW5JbmRlbnQgPSBJbmZpbml0eTtcbiAgdmFyIG1hdHJpeCA9IFtdO1xuICB2YXIgaW5kZXg7XG4gIHZhciBpbmRlbnRhdGlvbjtcbiAgdmFyIHN0b3BzO1xuICB2YXIgcGFkZGluZztcblxuICB2YWx1ZXMudW5zaGlmdChyZXBlYXQoQ19TUEFDRSwgbWF4aW11bSkgKyAnIScpO1xuXG4gIHdoaWxlIChwb3NpdGlvbi0tKSB7XG4gICAgaW5kZW50YXRpb24gPSBnZXRJbmRlbnQodmFsdWVzW3Bvc2l0aW9uXSk7XG5cbiAgICBtYXRyaXhbcG9zaXRpb25dID0gaW5kZW50YXRpb24uc3RvcHM7XG5cbiAgICBpZiAodHJpbSh2YWx1ZXNbcG9zaXRpb25dKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpbmRlbnRhdGlvbi5pbmRlbnQpIHtcbiAgICAgIGlmIChpbmRlbnRhdGlvbi5pbmRlbnQgPiAwICYmIGluZGVudGF0aW9uLmluZGVudCA8IG1pbkluZGVudCkge1xuICAgICAgICBtaW5JbmRlbnQgPSBpbmRlbnRhdGlvbi5pbmRlbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbkluZGVudCA9IEluZmluaXR5O1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAobWluSW5kZW50ICE9PSBJbmZpbml0eSkge1xuICAgIHBvc2l0aW9uID0gdmFsdWVzLmxlbmd0aDtcblxuICAgIHdoaWxlIChwb3NpdGlvbi0tKSB7XG4gICAgICBzdG9wcyA9IG1hdHJpeFtwb3NpdGlvbl07XG4gICAgICBpbmRleCA9IG1pbkluZGVudDtcblxuICAgICAgd2hpbGUgKGluZGV4ICYmICEoaW5kZXggaW4gc3RvcHMpKSB7XG4gICAgICAgIGluZGV4LS07XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHJpbSh2YWx1ZXNbcG9zaXRpb25dKS5sZW5ndGggIT09IDAgJiZcbiAgICAgICAgbWluSW5kZW50ICYmXG4gICAgICAgIGluZGV4ICE9PSBtaW5JbmRlbnRcbiAgICAgICkge1xuICAgICAgICBwYWRkaW5nID0gQ19UQUI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWRkaW5nID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlc1twb3NpdGlvbl0gPSBwYWRkaW5nICsgdmFsdWVzW3Bvc2l0aW9uXS5zbGljZShcbiAgICAgICAgaW5kZXggaW4gc3RvcHMgPyBzdG9wc1tpbmRleF0gKyAxIDogMFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWx1ZXMuc2hpZnQoKTtcblxuICByZXR1cm4gdmFsdWVzLmpvaW4oQ19ORVdMSU5FKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-parse/lib/util/remove-indentation.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-react/index.js": -/*!*********************************************!*\ - !*** ../node_modules/remark-react/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = remarkReact;\n\nvar toHAST = __webpack_require__(/*! mdast-util-to-hast */ \"../node_modules/mdast-util-to-hast/index.js\");\n\nvar sanitize = __webpack_require__(/*! hast-util-sanitize */ \"../node_modules/hast-util-sanitize/index.js\");\n\nvar toH = __webpack_require__(/*! hast-to-hyperscript */ \"../node_modules/hast-to-hyperscript/index.js\");\n\nvar tableCellStyle = __webpack_require__(/*! @mapbox/hast-util-table-cell-style */ \"../node_modules/@mapbox/hast-util-table-cell-style/index.js\");\n\nvar globalCreateElement;\n\ntry {\n globalCreateElement = __webpack_require__(/*! react */ \"../node_modules/react/index.js\").createElement;\n} catch (err) {}\n\nvar own = {}.hasOwnProperty;\nvar TABLE_ELEMENTS = ['table', 'thead', 'tbody', 'tfoot', 'tr'];\n/**\n * Attach a react compiler.\n *\n * @param {Unified} processor - Instance.\n * @param {Object?} [options]\n * @param {Object?} [options.sanitize]\n * - Sanitation schema.\n * @param {Object?} [options.remarkReactComponents]\n * - Components.\n * @param {string?} [options.prefix]\n * - Key prefix.\n * @param {Function?} [options.createElement]\n * - `h()`.\n */\n\nfunction remarkReact(options) {\n var settings = options || {};\n var createElement = settings.createElement || globalCreateElement;\n var clean = settings.sanitize !== false;\n var scheme = clean && typeof settings.sanitize !== 'boolean' ? settings.sanitize : null;\n var toHastOptions = settings.toHast || {};\n var components = settings.remarkReactComponents || {};\n this.Compiler = compile;\n /**\n * Wrapper around `createElement` to pass\n * components in.\n *\n * @param {string} name - Element name.\n * @param {Object} props - Attributes.\n * @return {ReactElement} - React element.\n */\n\n function h(name, props, children) {\n var component = own.call(components, name) ? components[name] : name;\n /*\n * Currently, a warning is triggered by react for\n * *any* white-space in tables. So we remove the\n * pretty lines for now:\n * https://github.com/facebook/react/pull/7081\n */\n\n if (children && TABLE_ELEMENTS.indexOf(component) !== -1) {\n children = children.filter(function (child) {\n return child !== '\\n';\n });\n }\n\n return createElement(component, props, children);\n }\n /**\n * Compile MDAST to React.\n *\n * @param {Node} node - MDAST node.\n * @return {ReactElement} - React element.\n */\n\n\n function compile(node) {\n var hast = {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: toHAST(node, toHastOptions).children\n };\n\n if (clean) {\n hast = sanitize(hast, scheme);\n }\n\n hast = tableCellStyle(hast);\n return toH(h, hast, settings.prefix);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1yZWFjdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXJlYWN0L2luZGV4LmpzP2FhMTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlbWFya1JlYWN0O1xuXG52YXIgdG9IQVNUID0gcmVxdWlyZSgnbWRhc3QtdXRpbC10by1oYXN0Jyk7XG52YXIgc2FuaXRpemUgPSByZXF1aXJlKCdoYXN0LXV0aWwtc2FuaXRpemUnKTtcbnZhciB0b0ggPSByZXF1aXJlKCdoYXN0LXRvLWh5cGVyc2NyaXB0Jyk7XG52YXIgdGFibGVDZWxsU3R5bGUgPSByZXF1aXJlKCdAbWFwYm94L2hhc3QtdXRpbC10YWJsZS1jZWxsLXN0eWxlJyk7XG5cbnZhciBnbG9iYWxDcmVhdGVFbGVtZW50O1xuXG50cnkge1xuICBnbG9iYWxDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgncmVhY3QnKS5jcmVhdGVFbGVtZW50O1xufSBjYXRjaCAoZXJyKSB7fVxuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbnZhciBUQUJMRV9FTEVNRU5UUyA9IFsndGFibGUnLCAndGhlYWQnLCAndGJvZHknLCAndGZvb3QnLCAndHInXTtcblxuLyoqXG4gKiBBdHRhY2ggYSByZWFjdCBjb21waWxlci5cbiAqXG4gKiBAcGFyYW0ge1VuaWZpZWR9IHByb2Nlc3NvciAtIEluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3Q/fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7T2JqZWN0P30gW29wdGlvbnMuc2FuaXRpemVdXG4gKiAgIC0gU2FuaXRhdGlvbiBzY2hlbWEuXG4gKiBAcGFyYW0ge09iamVjdD99IFtvcHRpb25zLnJlbWFya1JlYWN0Q29tcG9uZW50c11cbiAqICAgLSBDb21wb25lbnRzLlxuICogQHBhcmFtIHtzdHJpbmc/fSBbb3B0aW9ucy5wcmVmaXhdXG4gKiAgIC0gS2V5IHByZWZpeC5cbiAqIEBwYXJhbSB7RnVuY3Rpb24/fSBbb3B0aW9ucy5jcmVhdGVFbGVtZW50XVxuICogICAtIGBoKClgLlxuICovXG5mdW5jdGlvbiByZW1hcmtSZWFjdChvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBjcmVhdGVFbGVtZW50ID0gc2V0dGluZ3MuY3JlYXRlRWxlbWVudCB8fCBnbG9iYWxDcmVhdGVFbGVtZW50O1xuICB2YXIgY2xlYW4gPSBzZXR0aW5ncy5zYW5pdGl6ZSAhPT0gZmFsc2U7XG4gIHZhciBzY2hlbWUgPSBjbGVhbiAmJiAodHlwZW9mIHNldHRpbmdzLnNhbml0aXplICE9PSAnYm9vbGVhbicpID8gc2V0dGluZ3Muc2FuaXRpemUgOiBudWxsO1xuICB2YXIgdG9IYXN0T3B0aW9ucyA9IHNldHRpbmdzLnRvSGFzdCB8fCB7fTtcbiAgdmFyIGNvbXBvbmVudHMgPSBzZXR0aW5ncy5yZW1hcmtSZWFjdENvbXBvbmVudHMgfHwge307XG5cbiAgdGhpcy5Db21waWxlciA9IGNvbXBpbGU7XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgYXJvdW5kIGBjcmVhdGVFbGVtZW50YCB0byBwYXNzXG4gICAqIGNvbXBvbmVudHMgaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRWxlbWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBBdHRyaWJ1dGVzLlxuICAgKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IC0gUmVhY3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGgobmFtZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IG93bi5jYWxsKGNvbXBvbmVudHMsIG5hbWUpID8gY29tcG9uZW50c1tuYW1lXSA6IG5hbWU7XG5cbiAgICAvKlxuICAgICAqIEN1cnJlbnRseSwgYSB3YXJuaW5nIGlzIHRyaWdnZXJlZCBieSByZWFjdCBmb3JcbiAgICAgKiAqYW55KiB3aGl0ZS1zcGFjZSBpbiB0YWJsZXMuICBTbyB3ZSByZW1vdmUgdGhlXG4gICAgICogcHJldHR5IGxpbmVzIGZvciBub3c6XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzA4MVxuICAgICAqL1xuICAgIGlmIChjaGlsZHJlbiAmJiBUQUJMRV9FTEVNRU5UUy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xKSB7XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkICE9PSAnXFxuJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21waWxlIE1EQVNUIHRvIFJlYWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBNREFTVCBub2RlLlxuICAgKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IC0gUmVhY3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGUobm9kZSkge1xuICAgIHZhciBoYXN0ID0ge1xuICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgdGFnTmFtZTogJ2RpdicsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGNoaWxkcmVuOiB0b0hBU1Qobm9kZSwgdG9IYXN0T3B0aW9ucykuY2hpbGRyZW5cbiAgICB9O1xuXG4gICAgaWYgKGNsZWFuKSB7XG4gICAgICBoYXN0ID0gc2FuaXRpemUoaGFzdCwgc2NoZW1lKTtcbiAgICB9XG5cbiAgICBoYXN0ID0gdGFibGVDZWxsU3R5bGUoaGFzdCk7XG5cbiAgICByZXR1cm4gdG9IKGgsIGhhc3QsIHNldHRpbmdzLnByZWZpeCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFFQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-react/index.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/index.js": -/*!*************************************************!*\ - !*** ../node_modules/remark-stringify/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar unherit = __webpack_require__(/*! unherit */ \"../node_modules/unherit/index.js\");\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar Compiler = __webpack_require__(/*! ./lib/compiler.js */ \"../node_modules/remark-stringify/lib/compiler.js\");\n\nmodule.exports = stringify;\nstringify.Compiler = Compiler;\n\nfunction stringify(options) {\n var Local = unherit(Compiler);\n Local.prototype.options = xtend(Local.prototype.options, this.data('settings'), options);\n this.Compiler = Local;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvaW5kZXguanM/ZTZlZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1bmhlcml0ID0gcmVxdWlyZSgndW5oZXJpdCcpO1xudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciBDb21waWxlciA9IHJlcXVpcmUoJy4vbGliL2NvbXBpbGVyLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5O1xuc3RyaW5naWZ5LkNvbXBpbGVyID0gQ29tcGlsZXI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvcHRpb25zKSB7XG4gIHZhciBMb2NhbCA9IHVuaGVyaXQoQ29tcGlsZXIpO1xuICBMb2NhbC5wcm90b3R5cGUub3B0aW9ucyA9IHh0ZW5kKExvY2FsLnByb3RvdHlwZS5vcHRpb25zLCB0aGlzLmRhdGEoJ3NldHRpbmdzJyksIG9wdGlvbnMpO1xuICB0aGlzLkNvbXBpbGVyID0gTG9jYWw7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/index.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/compiler.js": -/*!********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/compiler.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar toggle = __webpack_require__(/*! state-toggle */ \"../node_modules/state-toggle/index.js\");\n\nmodule.exports = Compiler;\n/* Construct a new compiler. */\n\nfunction Compiler(tree, file) {\n this.inLink = false;\n this.inTable = false;\n this.tree = tree;\n this.file = file;\n this.options = xtend(this.options);\n this.setOptions({});\n}\n\nvar proto = Compiler.prototype;\n/* Enter and exit helpers. */\n\nproto.enterLink = toggle('inLink', false);\nproto.enterTable = toggle('inTable', false);\nproto.enterLinkReference = __webpack_require__(/*! ./util/enter-link-reference */ \"../node_modules/remark-stringify/lib/util/enter-link-reference.js\");\n/* Configuration. */\n\nproto.options = __webpack_require__(/*! ./defaults */ \"../node_modules/remark-stringify/lib/defaults.js\");\nproto.setOptions = __webpack_require__(/*! ./set-options */ \"../node_modules/remark-stringify/lib/set-options.js\");\nproto.compile = __webpack_require__(/*! ./macro/compile */ \"../node_modules/remark-stringify/lib/macro/compile.js\");\nproto.visit = __webpack_require__(/*! ./macro/one */ \"../node_modules/remark-stringify/lib/macro/one.js\");\nproto.all = __webpack_require__(/*! ./macro/all */ \"../node_modules/remark-stringify/lib/macro/all.js\");\nproto.block = __webpack_require__(/*! ./macro/block */ \"../node_modules/remark-stringify/lib/macro/block.js\");\nproto.visitOrderedItems = __webpack_require__(/*! ./macro/ordered-items */ \"../node_modules/remark-stringify/lib/macro/ordered-items.js\");\nproto.visitUnorderedItems = __webpack_require__(/*! ./macro/unordered-items */ \"../node_modules/remark-stringify/lib/macro/unordered-items.js\");\n/* Expose visitors. */\n\nproto.visitors = {\n root: __webpack_require__(/*! ./visitors/root */ \"../node_modules/remark-stringify/lib/visitors/root.js\"),\n text: __webpack_require__(/*! ./visitors/text */ \"../node_modules/remark-stringify/lib/visitors/text.js\"),\n heading: __webpack_require__(/*! ./visitors/heading */ \"../node_modules/remark-stringify/lib/visitors/heading.js\"),\n paragraph: __webpack_require__(/*! ./visitors/paragraph */ \"../node_modules/remark-stringify/lib/visitors/paragraph.js\"),\n blockquote: __webpack_require__(/*! ./visitors/blockquote */ \"../node_modules/remark-stringify/lib/visitors/blockquote.js\"),\n list: __webpack_require__(/*! ./visitors/list */ \"../node_modules/remark-stringify/lib/visitors/list.js\"),\n listItem: __webpack_require__(/*! ./visitors/list-item */ \"../node_modules/remark-stringify/lib/visitors/list-item.js\"),\n inlineCode: __webpack_require__(/*! ./visitors/inline-code */ \"../node_modules/remark-stringify/lib/visitors/inline-code.js\"),\n code: __webpack_require__(/*! ./visitors/code */ \"../node_modules/remark-stringify/lib/visitors/code.js\"),\n html: __webpack_require__(/*! ./visitors/html */ \"../node_modules/remark-stringify/lib/visitors/html.js\"),\n thematicBreak: __webpack_require__(/*! ./visitors/thematic-break */ \"../node_modules/remark-stringify/lib/visitors/thematic-break.js\"),\n strong: __webpack_require__(/*! ./visitors/strong */ \"../node_modules/remark-stringify/lib/visitors/strong.js\"),\n emphasis: __webpack_require__(/*! ./visitors/emphasis */ \"../node_modules/remark-stringify/lib/visitors/emphasis.js\"),\n \"break\": __webpack_require__(/*! ./visitors/break */ \"../node_modules/remark-stringify/lib/visitors/break.js\"),\n \"delete\": __webpack_require__(/*! ./visitors/delete */ \"../node_modules/remark-stringify/lib/visitors/delete.js\"),\n link: __webpack_require__(/*! ./visitors/link */ \"../node_modules/remark-stringify/lib/visitors/link.js\"),\n linkReference: __webpack_require__(/*! ./visitors/link-reference */ \"../node_modules/remark-stringify/lib/visitors/link-reference.js\"),\n imageReference: __webpack_require__(/*! ./visitors/image-reference */ \"../node_modules/remark-stringify/lib/visitors/image-reference.js\"),\n definition: __webpack_require__(/*! ./visitors/definition */ \"../node_modules/remark-stringify/lib/visitors/definition.js\"),\n image: __webpack_require__(/*! ./visitors/image */ \"../node_modules/remark-stringify/lib/visitors/image.js\"),\n footnote: __webpack_require__(/*! ./visitors/footnote */ \"../node_modules/remark-stringify/lib/visitors/footnote.js\"),\n footnoteReference: __webpack_require__(/*! ./visitors/footnote-reference */ \"../node_modules/remark-stringify/lib/visitors/footnote-reference.js\"),\n footnoteDefinition: __webpack_require__(/*! ./visitors/footnote-definition */ \"../node_modules/remark-stringify/lib/visitors/footnote-definition.js\"),\n table: __webpack_require__(/*! ./visitors/table */ \"../node_modules/remark-stringify/lib/visitors/table.js\"),\n tableCell: __webpack_require__(/*! ./visitors/table-cell */ \"../node_modules/remark-stringify/lib/visitors/table-cell.js\")\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2NvbXBpbGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9jb21waWxlci5qcz82M2VkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciB0b2dnbGUgPSByZXF1aXJlKCdzdGF0ZS10b2dnbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21waWxlcjtcblxuLyogQ29uc3RydWN0IGEgbmV3IGNvbXBpbGVyLiAqL1xuZnVuY3Rpb24gQ29tcGlsZXIodHJlZSwgZmlsZSkge1xuICB0aGlzLmluTGluayA9IGZhbHNlO1xuICB0aGlzLmluVGFibGUgPSBmYWxzZTtcbiAgdGhpcy50cmVlID0gdHJlZTtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5vcHRpb25zID0geHRlbmQodGhpcy5vcHRpb25zKTtcbiAgdGhpcy5zZXRPcHRpb25zKHt9KTtcbn1cblxudmFyIHByb3RvID0gQ29tcGlsZXIucHJvdG90eXBlO1xuXG4vKiBFbnRlciBhbmQgZXhpdCBoZWxwZXJzLiAqL1xucHJvdG8uZW50ZXJMaW5rID0gdG9nZ2xlKCdpbkxpbmsnLCBmYWxzZSk7XG5wcm90by5lbnRlclRhYmxlID0gdG9nZ2xlKCdpblRhYmxlJywgZmFsc2UpO1xucHJvdG8uZW50ZXJMaW5rUmVmZXJlbmNlID0gcmVxdWlyZSgnLi91dGlsL2VudGVyLWxpbmstcmVmZXJlbmNlJyk7XG5cbi8qIENvbmZpZ3VyYXRpb24uICovXG5wcm90by5vcHRpb25zID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xucHJvdG8uc2V0T3B0aW9ucyA9IHJlcXVpcmUoJy4vc2V0LW9wdGlvbnMnKTtcblxucHJvdG8uY29tcGlsZSA9IHJlcXVpcmUoJy4vbWFjcm8vY29tcGlsZScpO1xucHJvdG8udmlzaXQgPSByZXF1aXJlKCcuL21hY3JvL29uZScpO1xucHJvdG8uYWxsID0gcmVxdWlyZSgnLi9tYWNyby9hbGwnKTtcbnByb3RvLmJsb2NrID0gcmVxdWlyZSgnLi9tYWNyby9ibG9jaycpO1xucHJvdG8udmlzaXRPcmRlcmVkSXRlbXMgPSByZXF1aXJlKCcuL21hY3JvL29yZGVyZWQtaXRlbXMnKTtcbnByb3RvLnZpc2l0VW5vcmRlcmVkSXRlbXMgPSByZXF1aXJlKCcuL21hY3JvL3Vub3JkZXJlZC1pdGVtcycpO1xuXG4vKiBFeHBvc2UgdmlzaXRvcnMuICovXG5wcm90by52aXNpdG9ycyA9IHtcbiAgcm9vdDogcmVxdWlyZSgnLi92aXNpdG9ycy9yb290JyksXG4gIHRleHQ6IHJlcXVpcmUoJy4vdmlzaXRvcnMvdGV4dCcpLFxuICBoZWFkaW5nOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2hlYWRpbmcnKSxcbiAgcGFyYWdyYXBoOiByZXF1aXJlKCcuL3Zpc2l0b3JzL3BhcmFncmFwaCcpLFxuICBibG9ja3F1b3RlOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2Jsb2NrcXVvdGUnKSxcbiAgbGlzdDogcmVxdWlyZSgnLi92aXNpdG9ycy9saXN0JyksXG4gIGxpc3RJdGVtOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2xpc3QtaXRlbScpLFxuICBpbmxpbmVDb2RlOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2lubGluZS1jb2RlJyksXG4gIGNvZGU6IHJlcXVpcmUoJy4vdmlzaXRvcnMvY29kZScpLFxuICBodG1sOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2h0bWwnKSxcbiAgdGhlbWF0aWNCcmVhazogcmVxdWlyZSgnLi92aXNpdG9ycy90aGVtYXRpYy1icmVhaycpLFxuICBzdHJvbmc6IHJlcXVpcmUoJy4vdmlzaXRvcnMvc3Ryb25nJyksXG4gIGVtcGhhc2lzOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2VtcGhhc2lzJyksXG4gIGJyZWFrOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2JyZWFrJyksXG4gIGRlbGV0ZTogcmVxdWlyZSgnLi92aXNpdG9ycy9kZWxldGUnKSxcbiAgbGluazogcmVxdWlyZSgnLi92aXNpdG9ycy9saW5rJyksXG4gIGxpbmtSZWZlcmVuY2U6IHJlcXVpcmUoJy4vdmlzaXRvcnMvbGluay1yZWZlcmVuY2UnKSxcbiAgaW1hZ2VSZWZlcmVuY2U6IHJlcXVpcmUoJy4vdmlzaXRvcnMvaW1hZ2UtcmVmZXJlbmNlJyksXG4gIGRlZmluaXRpb246IHJlcXVpcmUoJy4vdmlzaXRvcnMvZGVmaW5pdGlvbicpLFxuICBpbWFnZTogcmVxdWlyZSgnLi92aXNpdG9ycy9pbWFnZScpLFxuICBmb290bm90ZTogcmVxdWlyZSgnLi92aXNpdG9ycy9mb290bm90ZScpLFxuICBmb290bm90ZVJlZmVyZW5jZTogcmVxdWlyZSgnLi92aXNpdG9ycy9mb290bm90ZS1yZWZlcmVuY2UnKSxcbiAgZm9vdG5vdGVEZWZpbml0aW9uOiByZXF1aXJlKCcuL3Zpc2l0b3JzL2Zvb3Rub3RlLWRlZmluaXRpb24nKSxcbiAgdGFibGU6IHJlcXVpcmUoJy4vdmlzaXRvcnMvdGFibGUnKSxcbiAgdGFibGVDZWxsOiByZXF1aXJlKCcuL3Zpc2l0b3JzL3RhYmxlLWNlbGwnKVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/compiler.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/defaults.js": -/*!********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/defaults.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = {\n gfm: true,\n commonmark: false,\n pedantic: false,\n entities: 'false',\n setext: false,\n closeAtx: false,\n looseTable: false,\n spacedTable: true,\n paddedTable: true,\n stringLength: stringLength,\n incrementListMarker: true,\n fences: false,\n fence: '`',\n bullet: '-',\n listItemIndent: 'tab',\n rule: '*',\n ruleSpaces: true,\n ruleRepetition: 3,\n strong: '*',\n emphasis: '_'\n};\n\nfunction stringLength(value) {\n return value.length;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2RlZmF1bHRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9kZWZhdWx0cy5qcz9hNzEyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdmbTogdHJ1ZSxcbiAgY29tbW9ubWFyazogZmFsc2UsXG4gIHBlZGFudGljOiBmYWxzZSxcbiAgZW50aXRpZXM6ICdmYWxzZScsXG4gIHNldGV4dDogZmFsc2UsXG4gIGNsb3NlQXR4OiBmYWxzZSxcbiAgbG9vc2VUYWJsZTogZmFsc2UsXG4gIHNwYWNlZFRhYmxlOiB0cnVlLFxuICBwYWRkZWRUYWJsZTogdHJ1ZSxcbiAgc3RyaW5nTGVuZ3RoOiBzdHJpbmdMZW5ndGgsXG4gIGluY3JlbWVudExpc3RNYXJrZXI6IHRydWUsXG4gIGZlbmNlczogZmFsc2UsXG4gIGZlbmNlOiAnYCcsXG4gIGJ1bGxldDogJy0nLFxuICBsaXN0SXRlbUluZGVudDogJ3RhYicsXG4gIHJ1bGU6ICcqJyxcbiAgcnVsZVNwYWNlczogdHJ1ZSxcbiAgcnVsZVJlcGV0aXRpb246IDMsXG4gIHN0cm9uZzogJyonLFxuICBlbXBoYXNpczogJ18nXG59O1xuXG5mdW5jdGlvbiBzdHJpbmdMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/defaults.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/escape.js": -/*!******************************************************!*\ - !*** ../node_modules/remark-stringify/lib/escape.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar decimal = __webpack_require__(/*! is-decimal */ \"../node_modules/is-decimal/index.js\");\n\nvar alphanumeric = __webpack_require__(/*! is-alphanumeric */ \"../node_modules/is-alphanumeric/index.js\");\n\nvar whitespace = __webpack_require__(/*! is-whitespace-character */ \"../node_modules/is-whitespace-character/index.js\");\n\nvar escapes = __webpack_require__(/*! markdown-escapes */ \"../node_modules/markdown-escapes/index.js\");\n\nvar prefix = __webpack_require__(/*! ./util/entity-prefix-length */ \"../node_modules/remark-stringify/lib/util/entity-prefix-length.js\");\n\nmodule.exports = factory;\nvar BACKSLASH = '\\\\';\nvar BULLETS = ['*', '-', '+'];\nvar ALLIGNMENT = [':', '-', ' ', '|'];\nvar entities = {\n '<': '<',\n ':': ':',\n '&': '&',\n '|': '|',\n '~': '~'\n};\n/* Factory to escape characters. */\n\nfunction factory(options) {\n return escape;\n /* Escape punctuation characters in a node's value. */\n\n function escape(value, node, parent) {\n var self = this;\n var gfm = options.gfm;\n var commonmark = options.commonmark;\n var pedantic = options.pedantic;\n var markers = commonmark ? ['.', ')'] : ['.'];\n var siblings = parent && parent.children;\n var index = siblings && siblings.indexOf(node);\n var prev = siblings && siblings[index - 1];\n var next = siblings && siblings[index + 1];\n var length = value.length;\n var escapable = escapes(options);\n var position = -1;\n var queue = [];\n var escaped = queue;\n var afterNewLine;\n var character;\n var wordCharBefore;\n var wordCharAfter;\n var offset;\n var replace;\n\n if (prev) {\n afterNewLine = text(prev) && /\\n\\s*$/.test(prev.value);\n } else {\n afterNewLine = !parent || parent.type === 'root' || parent.type === 'paragraph';\n }\n\n function one(character) {\n return escapable.indexOf(character) === -1 ? entities[character] : BACKSLASH + character;\n }\n\n while (++position < length) {\n character = value.charAt(position);\n replace = false;\n\n if (character === '\\n') {\n afterNewLine = true;\n } else if (character === BACKSLASH || character === '`' || character === '*' || character === '[' || character === '<' || character === '&' && prefix(value.slice(position)) > 0 || character === ']' && self.inLink || gfm && character === '~' && value.charAt(position + 1) === '~' || gfm && character === '|' && (self.inTable || alignment(value, position)) || character === '_' &&\n /* Delegate leading/trailing underscores\n * to the multinode version below. */\n position > 0 && position < length - 1 && (pedantic || !alphanumeric(value.charAt(position - 1)) || !alphanumeric(value.charAt(position + 1))) || gfm && !self.inLink && character === ':' && protocol(queue.join(''))) {\n replace = true;\n } else if (afterNewLine) {\n if (character === '>' || character === '#' || BULLETS.indexOf(character) !== -1) {\n replace = true;\n } else if (decimal(character)) {\n offset = position + 1;\n\n while (offset < length) {\n if (!decimal(value.charAt(offset))) {\n break;\n }\n\n offset++;\n }\n\n if (markers.indexOf(value.charAt(offset)) !== -1) {\n next = value.charAt(offset + 1);\n\n if (!next || next === ' ' || next === '\\t' || next === '\\n') {\n queue.push(value.slice(position, offset));\n position = offset;\n character = value.charAt(position);\n replace = true;\n }\n }\n }\n }\n\n if (afterNewLine && !whitespace(character)) {\n afterNewLine = false;\n }\n\n queue.push(replace ? one(character) : character);\n }\n /* Multi-node versions. */\n\n\n if (siblings && text(node)) {\n /* Check for an opening parentheses after a\n * link-reference (which can be joined by\n * white-space). */\n if (prev && prev.referenceType === 'shortcut') {\n position = -1;\n length = escaped.length;\n\n while (++position < length) {\n character = escaped[position];\n\n if (character === ' ' || character === '\\t') {\n continue;\n }\n\n if (character === '(' || character === ':') {\n escaped[position] = one(character);\n }\n\n break;\n }\n /* If the current node is all spaces / tabs,\n * preceded by a shortcut, and followed by\n * a text starting with `(`, escape it. */\n\n\n if (text(next) && position === length && next.value.charAt(0) === '(') {\n escaped.push(BACKSLASH);\n }\n }\n /* Ensure non-auto-links are not seen as links.\n * This pattern needs to check the preceding\n * nodes too. */\n\n\n if (gfm && !self.inLink && text(prev) && value.charAt(0) === ':' && protocol(prev.value.slice(-6))) {\n escaped[0] = one(':');\n }\n /* Escape ampersand if it would otherwise\n * start an entity. */\n\n\n if (text(next) && value.charAt(length - 1) === '&' && prefix('&' + next.value) !== 0) {\n escaped[escaped.length - 1] = one('&');\n }\n /* Escape double tildes in GFM. */\n\n\n if (gfm && text(next) && value.charAt(length - 1) === '~' && next.value.charAt(0) === '~') {\n escaped.splice(escaped.length - 1, 0, BACKSLASH);\n }\n /* Escape underscores, but not mid-word (unless\n * in pedantic mode). */\n\n\n wordCharBefore = text(prev) && alphanumeric(prev.value.slice(-1));\n wordCharAfter = text(next) && alphanumeric(next.value.charAt(0));\n\n if (length === 1) {\n if (value === '_' && (pedantic || !wordCharBefore || !wordCharAfter)) {\n escaped.unshift(BACKSLASH);\n }\n } else {\n if (value.charAt(0) === '_' && (pedantic || !wordCharBefore || !alphanumeric(value.charAt(1)))) {\n escaped.unshift(BACKSLASH);\n }\n\n if (value.charAt(length - 1) === '_' && (pedantic || !wordCharAfter || !alphanumeric(value.charAt(length - 2)))) {\n escaped.splice(escaped.length - 1, 0, BACKSLASH);\n }\n }\n }\n\n return escaped.join('');\n }\n}\n/* Check if `index` in `value` is inside an alignment row. */\n\n\nfunction alignment(value, index) {\n var start = value.lastIndexOf('\\n', index);\n var end = value.indexOf('\\n', index);\n start = start === -1 ? -1 : start;\n end = end === -1 ? value.length : end;\n\n while (++start < end) {\n if (ALLIGNMENT.indexOf(value.charAt(start)) === -1) {\n return false;\n }\n }\n\n return true;\n}\n/* Check if `node` is a text node. */\n\n\nfunction text(node) {\n return node && node.type === 'text';\n}\n/* Check if `value` ends in a protocol. */\n\n\nfunction protocol(value) {\n var val = value.slice(-6).toLowerCase();\n return val === 'mailto' || val.slice(-5) === 'https' || val.slice(-4) === 'http';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2VzY2FwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvZXNjYXBlLmpzPzA4Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVjaW1hbCA9IHJlcXVpcmUoJ2lzLWRlY2ltYWwnKTtcbnZhciBhbHBoYW51bWVyaWMgPSByZXF1aXJlKCdpcy1hbHBoYW51bWVyaWMnKTtcbnZhciB3aGl0ZXNwYWNlID0gcmVxdWlyZSgnaXMtd2hpdGVzcGFjZS1jaGFyYWN0ZXInKTtcbnZhciBlc2NhcGVzID0gcmVxdWlyZSgnbWFya2Rvd24tZXNjYXBlcycpO1xudmFyIHByZWZpeCA9IHJlcXVpcmUoJy4vdXRpbC9lbnRpdHktcHJlZml4LWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG5cbnZhciBCQUNLU0xBU0ggPSAnXFxcXCc7XG52YXIgQlVMTEVUUyA9IFsnKicsICctJywgJysnXTtcbnZhciBBTExJR05NRU5UID0gWyc6JywgJy0nLCAnICcsICd8J107XG52YXIgZW50aXRpZXMgPSB7JzwnOiAnJmx0OycsICc6JzogJyYjeDNBOycsICcmJzogJyZhbXA7JywgJ3wnOiAnJiN4N0M7JywgJ34nOiAnJiN4N0U7J307XG5cbi8qIEZhY3RvcnkgdG8gZXNjYXBlIGNoYXJhY3RlcnMuICovXG5mdW5jdGlvbiBmYWN0b3J5KG9wdGlvbnMpIHtcbiAgcmV0dXJuIGVzY2FwZTtcblxuICAvKiBFc2NhcGUgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiBhIG5vZGUncyB2YWx1ZS4gKi9cbiAgZnVuY3Rpb24gZXNjYXBlKHZhbHVlLCBub2RlLCBwYXJlbnQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGdmbSA9IG9wdGlvbnMuZ2ZtO1xuICAgIHZhciBjb21tb25tYXJrID0gb3B0aW9ucy5jb21tb25tYXJrO1xuICAgIHZhciBwZWRhbnRpYyA9IG9wdGlvbnMucGVkYW50aWM7XG4gICAgdmFyIG1hcmtlcnMgPSBjb21tb25tYXJrID8gWycuJywgJyknXSA6IFsnLiddO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW47XG4gICAgdmFyIGluZGV4ID0gc2libGluZ3MgJiYgc2libGluZ3MuaW5kZXhPZihub2RlKTtcbiAgICB2YXIgcHJldiA9IHNpYmxpbmdzICYmIHNpYmxpbmdzW2luZGV4IC0gMV07XG4gICAgdmFyIG5leHQgPSBzaWJsaW5ncyAmJiBzaWJsaW5nc1tpbmRleCArIDFdO1xuICAgIHZhciBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgdmFyIGVzY2FwYWJsZSA9IGVzY2FwZXMob3B0aW9ucyk7XG4gICAgdmFyIHBvc2l0aW9uID0gLTE7XG4gICAgdmFyIHF1ZXVlID0gW107XG4gICAgdmFyIGVzY2FwZWQgPSBxdWV1ZTtcbiAgICB2YXIgYWZ0ZXJOZXdMaW5lO1xuICAgIHZhciBjaGFyYWN0ZXI7XG4gICAgdmFyIHdvcmRDaGFyQmVmb3JlO1xuICAgIHZhciB3b3JkQ2hhckFmdGVyO1xuICAgIHZhciBvZmZzZXQ7XG4gICAgdmFyIHJlcGxhY2U7XG5cbiAgICBpZiAocHJldikge1xuICAgICAgYWZ0ZXJOZXdMaW5lID0gdGV4dChwcmV2KSAmJiAvXFxuXFxzKiQvLnRlc3QocHJldi52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyTmV3TGluZSA9ICFwYXJlbnQgfHwgcGFyZW50LnR5cGUgPT09ICdyb290JyB8fCBwYXJlbnQudHlwZSA9PT0gJ3BhcmFncmFwaCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25lKGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGVzY2FwYWJsZS5pbmRleE9mKGNoYXJhY3RlcikgPT09IC0xID9cbiAgICAgICAgZW50aXRpZXNbY2hhcmFjdGVyXSA6IEJBQ0tTTEFTSCArIGNoYXJhY3RlcjtcbiAgICB9XG5cbiAgICB3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KHBvc2l0aW9uKTtcbiAgICAgIHJlcGxhY2UgPSBmYWxzZTtcblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcbiAgICAgICAgYWZ0ZXJOZXdMaW5lID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoYXJhY3RlciA9PT0gQkFDS1NMQVNIIHx8XG4gICAgICAgIGNoYXJhY3RlciA9PT0gJ2AnIHx8XG4gICAgICAgIGNoYXJhY3RlciA9PT0gJyonIHx8XG4gICAgICAgIGNoYXJhY3RlciA9PT0gJ1snIHx8XG4gICAgICAgIGNoYXJhY3RlciA9PT0gJzwnIHx8XG4gICAgICAgIChjaGFyYWN0ZXIgPT09ICcmJyAmJiBwcmVmaXgodmFsdWUuc2xpY2UocG9zaXRpb24pKSA+IDApIHx8XG4gICAgICAgIChjaGFyYWN0ZXIgPT09ICddJyAmJiBzZWxmLmluTGluaykgfHxcbiAgICAgICAgKGdmbSAmJiBjaGFyYWN0ZXIgPT09ICd+JyAmJiB2YWx1ZS5jaGFyQXQocG9zaXRpb24gKyAxKSA9PT0gJ34nKSB8fFxuICAgICAgICAoZ2ZtICYmIGNoYXJhY3RlciA9PT0gJ3wnICYmIChzZWxmLmluVGFibGUgfHwgYWxpZ25tZW50KHZhbHVlLCBwb3NpdGlvbikpKSB8fFxuICAgICAgICAoXG4gICAgICAgICAgY2hhcmFjdGVyID09PSAnXycgJiZcbiAgICAgICAgICAvKiBEZWxlZ2F0ZSBsZWFkaW5nL3RyYWlsaW5nIHVuZGVyc2NvcmVzXG4gICAgICAgICAgICogdG8gdGhlIG11bHRpbm9kZSB2ZXJzaW9uIGJlbG93LiAqL1xuICAgICAgICAgIHBvc2l0aW9uID4gMCAmJlxuICAgICAgICAgIHBvc2l0aW9uIDwgbGVuZ3RoIC0gMSAmJlxuICAgICAgICAgIChcbiAgICAgICAgICAgICAgcGVkYW50aWMgfHxcbiAgICAgICAgICAgICAgIWFscGhhbnVtZXJpYyh2YWx1ZS5jaGFyQXQocG9zaXRpb24gLSAxKSkgfHxcbiAgICAgICAgICAgICAgIWFscGhhbnVtZXJpYyh2YWx1ZS5jaGFyQXQocG9zaXRpb24gKyAxKSlcbiAgICAgICAgICApXG4gICAgICAgICkgfHxcbiAgICAgICAgKGdmbSAmJiAhc2VsZi5pbkxpbmsgJiYgY2hhcmFjdGVyID09PSAnOicgJiYgcHJvdG9jb2wocXVldWUuam9pbignJykpKVxuICAgICAgKSB7XG4gICAgICAgIHJlcGxhY2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChhZnRlck5ld0xpbmUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYXJhY3RlciA9PT0gJz4nIHx8XG4gICAgICAgICAgY2hhcmFjdGVyID09PSAnIycgfHxcbiAgICAgICAgICBCVUxMRVRTLmluZGV4T2YoY2hhcmFjdGVyKSAhPT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVjaW1hbChjaGFyYWN0ZXIpKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gcG9zaXRpb24gKyAxO1xuXG4gICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFkZWNpbWFsKHZhbHVlLmNoYXJBdChvZmZzZXQpKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hcmtlcnMuaW5kZXhPZih2YWx1ZS5jaGFyQXQob2Zmc2V0KSkgIT09IC0xKSB7XG4gICAgICAgICAgICBuZXh0ID0gdmFsdWUuY2hhckF0KG9mZnNldCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIW5leHQgfHwgbmV4dCA9PT0gJyAnIHx8IG5leHQgPT09ICdcXHQnIHx8IG5leHQgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIHF1ZXVlLnB1c2godmFsdWUuc2xpY2UocG9zaXRpb24sIG9mZnNldCkpO1xuICAgICAgICAgICAgICBwb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgICAgICAgICAgY2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgcmVwbGFjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZnRlck5ld0xpbmUgJiYgIXdoaXRlc3BhY2UoY2hhcmFjdGVyKSkge1xuICAgICAgICBhZnRlck5ld0xpbmUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUucHVzaChyZXBsYWNlID8gb25lKGNoYXJhY3RlcikgOiBjaGFyYWN0ZXIpO1xuICAgIH1cblxuICAgIC8qIE11bHRpLW5vZGUgdmVyc2lvbnMuICovXG4gICAgaWYgKHNpYmxpbmdzICYmIHRleHQobm9kZSkpIHtcbiAgICAgIC8qIENoZWNrIGZvciBhbiBvcGVuaW5nIHBhcmVudGhlc2VzIGFmdGVyIGFcbiAgICAgICAqIGxpbmstcmVmZXJlbmNlICh3aGljaCBjYW4gYmUgam9pbmVkIGJ5XG4gICAgICAgKiB3aGl0ZS1zcGFjZSkuICovXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnJlZmVyZW5jZVR5cGUgPT09ICdzaG9ydGN1dCcpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcbiAgICAgICAgbGVuZ3RoID0gZXNjYXBlZC5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBlc2NhcGVkW3Bvc2l0aW9uXTtcblxuICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT09ICcgJyB8fCBjaGFyYWN0ZXIgPT09ICdcXHQnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAnKCcgfHwgY2hhcmFjdGVyID09PSAnOicpIHtcbiAgICAgICAgICAgIGVzY2FwZWRbcG9zaXRpb25dID0gb25lKGNoYXJhY3Rlcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGlzIGFsbCBzcGFjZXMgLyB0YWJzLFxuICAgICAgICAgKiBwcmVjZWRlZCBieSBhIHNob3J0Y3V0LCBhbmQgZm9sbG93ZWQgYnlcbiAgICAgICAgICogYSB0ZXh0IHN0YXJ0aW5nIHdpdGggYChgLCBlc2NhcGUgaXQuICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0ZXh0KG5leHQpICYmXG4gICAgICAgICAgcG9zaXRpb24gPT09IGxlbmd0aCAmJlxuICAgICAgICAgIG5leHQudmFsdWUuY2hhckF0KDApID09PSAnKCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXNjYXBlZC5wdXNoKEJBQ0tTTEFTSCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogRW5zdXJlIG5vbi1hdXRvLWxpbmtzIGFyZSBub3Qgc2VlbiBhcyBsaW5rcy5cbiAgICAgICAqIFRoaXMgcGF0dGVybiBuZWVkcyB0byBjaGVjayB0aGUgcHJlY2VkaW5nXG4gICAgICAgKiBub2RlcyB0b28uICovXG4gICAgICBpZiAoXG4gICAgICAgIGdmbSAmJlxuICAgICAgICAhc2VsZi5pbkxpbmsgJiZcbiAgICAgICAgdGV4dChwcmV2KSAmJlxuICAgICAgICB2YWx1ZS5jaGFyQXQoMCkgPT09ICc6JyAmJlxuICAgICAgICBwcm90b2NvbChwcmV2LnZhbHVlLnNsaWNlKC02KSlcbiAgICAgICkge1xuICAgICAgICBlc2NhcGVkWzBdID0gb25lKCc6Jyk7XG4gICAgICB9XG5cbiAgICAgIC8qIEVzY2FwZSBhbXBlcnNhbmQgaWYgaXQgd291bGQgb3RoZXJ3aXNlXG4gICAgICAgKiBzdGFydCBhbiBlbnRpdHkuICovXG4gICAgICBpZiAoXG4gICAgICAgIHRleHQobmV4dCkgJiZcbiAgICAgICAgdmFsdWUuY2hhckF0KGxlbmd0aCAtIDEpID09PSAnJicgJiZcbiAgICAgICAgcHJlZml4KCcmJyArIG5leHQudmFsdWUpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgZXNjYXBlZFtlc2NhcGVkLmxlbmd0aCAtIDFdID0gb25lKCcmJyk7XG4gICAgICB9XG5cbiAgICAgIC8qIEVzY2FwZSBkb3VibGUgdGlsZGVzIGluIEdGTS4gKi9cbiAgICAgIGlmIChcbiAgICAgICAgZ2ZtICYmXG4gICAgICAgIHRleHQobmV4dCkgJiZcbiAgICAgICAgdmFsdWUuY2hhckF0KGxlbmd0aCAtIDEpID09PSAnficgJiZcbiAgICAgICAgbmV4dC52YWx1ZS5jaGFyQXQoMCkgPT09ICd+J1xuICAgICAgKSB7XG4gICAgICAgIGVzY2FwZWQuc3BsaWNlKGVzY2FwZWQubGVuZ3RoIC0gMSwgMCwgQkFDS1NMQVNIKTtcbiAgICAgIH1cblxuICAgICAgLyogRXNjYXBlIHVuZGVyc2NvcmVzLCBidXQgbm90IG1pZC13b3JkICh1bmxlc3NcbiAgICAgICAqIGluIHBlZGFudGljIG1vZGUpLiAqL1xuICAgICAgd29yZENoYXJCZWZvcmUgPSB0ZXh0KHByZXYpICYmIGFscGhhbnVtZXJpYyhwcmV2LnZhbHVlLnNsaWNlKC0xKSk7XG4gICAgICB3b3JkQ2hhckFmdGVyID0gdGV4dChuZXh0KSAmJiBhbHBoYW51bWVyaWMobmV4dC52YWx1ZS5jaGFyQXQoMCkpO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ18nICYmIChwZWRhbnRpYyB8fCAhd29yZENoYXJCZWZvcmUgfHwgIXdvcmRDaGFyQWZ0ZXIpKSB7XG4gICAgICAgICAgZXNjYXBlZC51bnNoaWZ0KEJBQ0tTTEFTSCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZS5jaGFyQXQoMCkgPT09ICdfJyAmJlxuICAgICAgICAgIChwZWRhbnRpYyB8fCAhd29yZENoYXJCZWZvcmUgfHwgIWFscGhhbnVtZXJpYyh2YWx1ZS5jaGFyQXQoMSkpKVxuICAgICAgICApIHtcbiAgICAgICAgICBlc2NhcGVkLnVuc2hpZnQoQkFDS1NMQVNIKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZS5jaGFyQXQobGVuZ3RoIC0gMSkgPT09ICdfJyAmJlxuICAgICAgICAgIChwZWRhbnRpYyB8fCAhd29yZENoYXJBZnRlciB8fCAhYWxwaGFudW1lcmljKHZhbHVlLmNoYXJBdChsZW5ndGggLSAyKSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGVzY2FwZWQuc3BsaWNlKGVzY2FwZWQubGVuZ3RoIC0gMSwgMCwgQkFDS1NMQVNIKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlc2NhcGVkLmpvaW4oJycpO1xuICB9XG59XG5cbi8qIENoZWNrIGlmIGBpbmRleGAgaW4gYHZhbHVlYCBpcyBpbnNpZGUgYW4gYWxpZ25tZW50IHJvdy4gKi9cbmZ1bmN0aW9uIGFsaWdubWVudCh2YWx1ZSwgaW5kZXgpIHtcbiAgdmFyIHN0YXJ0ID0gdmFsdWUubGFzdEluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgdmFyIGVuZCA9IHZhbHVlLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcblxuICBzdGFydCA9IHN0YXJ0ID09PSAtMSA/IC0xIDogc3RhcnQ7XG4gIGVuZCA9IGVuZCA9PT0gLTEgPyB2YWx1ZS5sZW5ndGggOiBlbmQ7XG5cbiAgd2hpbGUgKCsrc3RhcnQgPCBlbmQpIHtcbiAgICBpZiAoQUxMSUdOTUVOVC5pbmRleE9mKHZhbHVlLmNoYXJBdChzdGFydCkpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiBDaGVjayBpZiBgbm9kZWAgaXMgYSB0ZXh0IG5vZGUuICovXG5mdW5jdGlvbiB0ZXh0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS50eXBlID09PSAndGV4dCc7XG59XG5cbi8qIENoZWNrIGlmIGB2YWx1ZWAgZW5kcyBpbiBhIHByb3RvY29sLiAqL1xuZnVuY3Rpb24gcHJvdG9jb2wodmFsdWUpIHtcbiAgdmFyIHZhbCA9IHZhbHVlLnNsaWNlKC02KS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gdmFsID09PSAnbWFpbHRvJyB8fCB2YWwuc2xpY2UoLTUpID09PSAnaHR0cHMnIHx8IHZhbC5zbGljZSgtNCkgPT09ICdodHRwJztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQWNBOztBQUVBO0FBVUE7QUF4QkE7QUEwQkE7QUFLQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBT0E7QUFDQTtBQUVBOzs7O0FBRUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFNQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/escape.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/all.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/all.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = all;\n/* Visit all children of `parent`. */\n\nfunction all(parent) {\n var self = this;\n var children = parent.children;\n var length = children.length;\n var results = [];\n var index = -1;\n\n while (++index < length) {\n results[index] = self.visit(children[index], parent);\n }\n\n return results;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL2FsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvbWFjcm8vYWxsLmpzP2E2MjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFsbDtcblxuLyogVmlzaXQgYWxsIGNoaWxkcmVuIG9mIGBwYXJlbnRgLiAqL1xuZnVuY3Rpb24gYWxsKHBhcmVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbjtcbiAgdmFyIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIGluZGV4ID0gLTE7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRzW2luZGV4XSA9IHNlbGYudmlzaXQoY2hpbGRyZW5baW5kZXhdLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/all.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/block.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/block.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = block;\n/* Stringify a block node with block children (e.g., `root`\n * or `blockquote`).\n * Knows about code following a list, or adjacent lists\n * with similar bullets, and places an extra newline\n * between them. */\n\nfunction block(node) {\n var self = this;\n var values = [];\n var children = node.children;\n var length = children.length;\n var index = -1;\n var child;\n var prev;\n\n while (++index < length) {\n child = children[index];\n\n if (prev) {\n /* Duplicate nodes, such as a list\n * directly following another list,\n * often need multiple new lines.\n *\n * Additionally, code blocks following a list\n * might easily be mistaken for a paragraph\n * in the list itself. */\n if (child.type === prev.type && prev.type === 'list') {\n values.push(prev.ordered === child.ordered ? '\\n\\n\\n' : '\\n\\n');\n } else if (prev.type === 'list' && child.type === 'code' && !child.lang) {\n values.push('\\n\\n\\n');\n } else {\n values.push('\\n\\n');\n }\n }\n\n values.push(self.visit(child, node));\n prev = child;\n }\n\n return values.join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL2Jsb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9tYWNyby9ibG9jay5qcz9mZGE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBibG9jaztcblxuLyogU3RyaW5naWZ5IGEgYmxvY2sgbm9kZSB3aXRoIGJsb2NrIGNoaWxkcmVuIChlLmcuLCBgcm9vdGBcbiAqIG9yIGBibG9ja3F1b3RlYCkuXG4gKiBLbm93cyBhYm91dCBjb2RlIGZvbGxvd2luZyBhIGxpc3QsIG9yIGFkamFjZW50IGxpc3RzXG4gKiB3aXRoIHNpbWlsYXIgYnVsbGV0cywgYW5kIHBsYWNlcyBhbiBleHRyYSBuZXdsaW5lXG4gKiBiZXR3ZWVuIHRoZW0uICovXG5mdW5jdGlvbiBibG9jayhub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICB2YXIgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoaWxkO1xuICB2YXIgcHJldjtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoaWxkID0gY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIC8qIER1cGxpY2F0ZSBub2Rlcywgc3VjaCBhcyBhIGxpc3RcbiAgICAgICAqIGRpcmVjdGx5IGZvbGxvd2luZyBhbm90aGVyIGxpc3QsXG4gICAgICAgKiBvZnRlbiBuZWVkIG11bHRpcGxlIG5ldyBsaW5lcy5cbiAgICAgICAqXG4gICAgICAgKiBBZGRpdGlvbmFsbHksIGNvZGUgYmxvY2tzIGZvbGxvd2luZyBhIGxpc3RcbiAgICAgICAqIG1pZ2h0IGVhc2lseSBiZSBtaXN0YWtlbiBmb3IgYSBwYXJhZ3JhcGhcbiAgICAgICAqIGluIHRoZSBsaXN0IGl0c2VsZi4gKi9cbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBwcmV2LnR5cGUgJiYgcHJldi50eXBlID09PSAnbGlzdCcpIHtcbiAgICAgICAgdmFsdWVzLnB1c2gocHJldi5vcmRlcmVkID09PSBjaGlsZC5vcmRlcmVkID8gJ1xcblxcblxcbicgOiAnXFxuXFxuJyk7XG4gICAgICB9IGVsc2UgaWYgKHByZXYudHlwZSA9PT0gJ2xpc3QnICYmIGNoaWxkLnR5cGUgPT09ICdjb2RlJyAmJiAhY2hpbGQubGFuZykge1xuICAgICAgICB2YWx1ZXMucHVzaCgnXFxuXFxuXFxuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXMucHVzaCgnXFxuXFxuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzLnB1c2goc2VsZi52aXNpdChjaGlsZCwgbm9kZSkpO1xuXG4gICAgcHJldiA9IGNoaWxkO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlcy5qb2luKCcnKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/block.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/compile.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/compile.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar compact = __webpack_require__(/*! mdast-util-compact */ \"../node_modules/mdast-util-compact/index.js\");\n\nmodule.exports = compile;\n/* Stringify the given tree. */\n\nfunction compile() {\n return this.visit(compact(this.tree, this.options.commonmark));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL2NvbXBpbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL2NvbXBpbGUuanM/OGFmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjb21wYWN0ID0gcmVxdWlyZSgnbWRhc3QtdXRpbC1jb21wYWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcblxuLyogU3RyaW5naWZ5IHRoZSBnaXZlbiB0cmVlLiAqL1xuZnVuY3Rpb24gY29tcGlsZSgpIHtcbiAgcmV0dXJuIHRoaXMudmlzaXQoY29tcGFjdCh0aGlzLnRyZWUsIHRoaXMub3B0aW9ucy5jb21tb25tYXJrKSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/compile.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/one.js": -/*!*********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/one.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = one;\n\nfunction one(node, parent) {\n var self = this;\n var visitors = self.visitors;\n /* Fail on unknown nodes. */\n\n if (typeof visitors[node.type] !== 'function') {\n self.file.fail(new Error('Missing compiler for node of type `' + node.type + '`: `' + node + '`'), node);\n }\n\n return visitors[node.type].call(self, node, parent);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL29uZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvbWFjcm8vb25lLmpzPzM1NzUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZTtcblxuZnVuY3Rpb24gb25lKG5vZGUsIHBhcmVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB2aXNpdG9ycyA9IHNlbGYudmlzaXRvcnM7XG5cbiAgLyogRmFpbCBvbiB1bmtub3duIG5vZGVzLiAqL1xuICBpZiAodHlwZW9mIHZpc2l0b3JzW25vZGUudHlwZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICBzZWxmLmZpbGUuZmFpbChcbiAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgJ01pc3NpbmcgY29tcGlsZXIgZm9yIG5vZGUgb2YgdHlwZSBgJyArXG4gICAgICAgIG5vZGUudHlwZSArICdgOiBgJyArIG5vZGUgKyAnYCdcbiAgICAgICksXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdG9yc1tub2RlLnR5cGVdLmNhbGwoc2VsZiwgbm9kZSwgcGFyZW50KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/one.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/ordered-items.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/ordered-items.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = orderedItems;\n/* Visit ordered list items.\n *\n * Starts the list with\n * `node.start` and increments each following list item\n * bullet by one:\n *\n * 2. foo\n * 3. bar\n *\n * In `incrementListMarker: false` mode, does not increment\n * each marker and stays on `node.start`:\n *\n * 1. foo\n * 1. bar\n */\n\nfunction orderedItems(node) {\n var self = this;\n var fn = self.visitors.listItem;\n var increment = self.options.incrementListMarker;\n var values = [];\n var start = node.start;\n var children = node.children;\n var length = children.length;\n var index = -1;\n var bullet;\n\n while (++index < length) {\n bullet = (increment ? start + index : start) + '.';\n values[index] = fn.call(self, children[index], node, index, bullet);\n }\n\n return values.join('\\n');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL29yZGVyZWQtaXRlbXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL29yZGVyZWQtaXRlbXMuanM/NGFjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gb3JkZXJlZEl0ZW1zO1xuXG4vKiBWaXNpdCBvcmRlcmVkIGxpc3QgaXRlbXMuXG4gKlxuICogU3RhcnRzIHRoZSBsaXN0IHdpdGhcbiAqIGBub2RlLnN0YXJ0YCBhbmQgaW5jcmVtZW50cyBlYWNoIGZvbGxvd2luZyBsaXN0IGl0ZW1cbiAqIGJ1bGxldCBieSBvbmU6XG4gKlxuICogICAgIDIuIGZvb1xuICogICAgIDMuIGJhclxuICpcbiAqIEluIGBpbmNyZW1lbnRMaXN0TWFya2VyOiBmYWxzZWAgbW9kZSwgZG9lcyBub3QgaW5jcmVtZW50XG4gKiBlYWNoIG1hcmtlciBhbmQgc3RheXMgb24gYG5vZGUuc3RhcnRgOlxuICpcbiAqICAgICAxLiBmb29cbiAqICAgICAxLiBiYXJcbiAqL1xuZnVuY3Rpb24gb3JkZXJlZEl0ZW1zKG5vZGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgZm4gPSBzZWxmLnZpc2l0b3JzLmxpc3RJdGVtO1xuICB2YXIgaW5jcmVtZW50ID0gc2VsZi5vcHRpb25zLmluY3JlbWVudExpc3RNYXJrZXI7XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIHN0YXJ0ID0gbm9kZS5zdGFydDtcbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgdmFyIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBidWxsZXQ7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBidWxsZXQgPSAoaW5jcmVtZW50ID8gc3RhcnQgKyBpbmRleCA6IHN0YXJ0KSArICcuJztcbiAgICB2YWx1ZXNbaW5kZXhdID0gZm4uY2FsbChzZWxmLCBjaGlsZHJlbltpbmRleF0sIG5vZGUsIGluZGV4LCBidWxsZXQpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlcy5qb2luKCdcXG4nKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/ordered-items.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/macro/unordered-items.js": -/*!*********************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/macro/unordered-items.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = unorderedItems;\n/* Visit unordered list items.\n * Uses `options.bullet` as each item's bullet.\n */\n\nfunction unorderedItems(node) {\n var self = this;\n var bullet = self.options.bullet;\n var fn = self.visitors.listItem;\n var children = node.children;\n var length = children.length;\n var index = -1;\n var values = [];\n\n while (++index < length) {\n values[index] = fn.call(self, children[index], node, index, bullet);\n }\n\n return values.join('\\n');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL21hY3JvL3Vub3JkZXJlZC1pdGVtcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvbWFjcm8vdW5vcmRlcmVkLWl0ZW1zLmpzPzVlYmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVub3JkZXJlZEl0ZW1zO1xuXG4vKiBWaXNpdCB1bm9yZGVyZWQgbGlzdCBpdGVtcy5cbiAqIFVzZXMgYG9wdGlvbnMuYnVsbGV0YCBhcyBlYWNoIGl0ZW0ncyBidWxsZXQuXG4gKi9cbmZ1bmN0aW9uIHVub3JkZXJlZEl0ZW1zKG5vZGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYnVsbGV0ID0gc2VsZi5vcHRpb25zLmJ1bGxldDtcbiAgdmFyIGZuID0gc2VsZi52aXNpdG9ycy5saXN0SXRlbTtcbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgdmFyIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciB2YWx1ZXMgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhbHVlc1tpbmRleF0gPSBmbi5jYWxsKHNlbGYsIGNoaWxkcmVuW2luZGV4XSwgbm9kZSwgaW5kZXgsIGJ1bGxldCk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzLmpvaW4oJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/macro/unordered-items.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/set-options.js": -/*!***********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/set-options.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar encode = __webpack_require__(/*! stringify-entities */ \"../node_modules/stringify-entities/index.js\");\n\nvar defaults = __webpack_require__(/*! ./defaults */ \"../node_modules/remark-stringify/lib/defaults.js\");\n\nvar escapeFactory = __webpack_require__(/*! ./escape */ \"../node_modules/remark-stringify/lib/escape.js\");\n\nvar returner = __webpack_require__(/*! ./util/returner */ \"../node_modules/remark-stringify/lib/util/returner.js\");\n\nmodule.exports = setOptions;\n/* Map of applicable enum's. */\n\nvar maps = {\n entities: {\n \"true\": true,\n \"false\": true,\n numbers: true,\n escape: true\n },\n bullet: {\n '*': true,\n '-': true,\n '+': true\n },\n rule: {\n '-': true,\n _: true,\n '*': true\n },\n listItemIndent: {\n tab: true,\n mixed: true,\n 1: true\n },\n emphasis: {\n _: true,\n '*': true\n },\n strong: {\n _: true,\n '*': true\n },\n fence: {\n '`': true,\n '~': true\n }\n};\n/* Expose `validate`. */\n\nvar validate = {\n \"boolean\": validateBoolean,\n string: validateString,\n number: validateNumber,\n \"function\": validateFunction\n};\n/* Set options. Does not overwrite previously set\n * options. */\n\nfunction setOptions(options) {\n var self = this;\n var current = self.options;\n var ruleRepetition;\n var key;\n\n if (options == null) {\n options = {};\n } else if (_typeof(options) === 'object') {\n options = xtend(options);\n } else {\n throw new Error('Invalid value `' + options + '` for setting `options`');\n }\n\n for (key in defaults) {\n validate[_typeof(defaults[key])](options, key, current[key], maps[key]);\n }\n\n ruleRepetition = options.ruleRepetition;\n\n if (ruleRepetition && ruleRepetition < 3) {\n raise(ruleRepetition, 'options.ruleRepetition');\n }\n\n self.encode = encodeFactory(String(options.entities));\n self.escape = escapeFactory(options);\n self.options = options;\n return self;\n}\n/* Throw an exception with in its `message` `value`\n * and `name`. */\n\n\nfunction raise(value, name) {\n throw new Error('Invalid value `' + value + '` for setting `' + name + '`');\n}\n/* Validate a value to be boolean. Defaults to `def`.\n * Raises an exception with `context[name]` when not\n * a boolean. */\n\n\nfunction validateBoolean(context, name, def) {\n var value = context[name];\n\n if (value == null) {\n value = def;\n }\n\n if (typeof value !== 'boolean') {\n raise(value, 'options.' + name);\n }\n\n context[name] = value;\n}\n/* Validate a value to be boolean. Defaults to `def`.\n * Raises an exception with `context[name]` when not\n * a boolean. */\n\n\nfunction validateNumber(context, name, def) {\n var value = context[name];\n\n if (value == null) {\n value = def;\n }\n\n if (isNaN(value)) {\n raise(value, 'options.' + name);\n }\n\n context[name] = value;\n}\n/* Validate a value to be in `map`. Defaults to `def`.\n * Raises an exception with `context[name]` when not\n * in `map`. */\n\n\nfunction validateString(context, name, def, map) {\n var value = context[name];\n\n if (value == null) {\n value = def;\n }\n\n value = String(value);\n\n if (!(value in map)) {\n raise(value, 'options.' + name);\n }\n\n context[name] = value;\n}\n/* Validate a value to be function. Defaults to `def`.\n * Raises an exception with `context[name]` when not\n * a function. */\n\n\nfunction validateFunction(context, name, def) {\n var value = context[name];\n\n if (value == null) {\n value = def;\n }\n\n if (typeof value !== 'function') {\n raise(value, 'options.' + name);\n }\n\n context[name] = value;\n}\n/* Factory to encode HTML entities.\n * Creates a no-operation function when `type` is\n * `'false'`, a function which encodes using named\n * references when `type` is `'true'`, and a function\n * which encodes using numbered references when `type` is\n * `'numbers'`. */\n\n\nfunction encodeFactory(type) {\n var options = {};\n\n if (type === 'false') {\n return returner;\n }\n\n if (type === 'true') {\n options.useNamedReferences = true;\n }\n\n if (type === 'escape') {\n options.escapeOnly = true;\n options.useNamedReferences = true;\n }\n\n return wrapped;\n /* Encode HTML entities using the bound options. */\n\n function wrapped(value) {\n return encode(value, options);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3NldC1vcHRpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9zZXQtb3B0aW9ucy5qcz81MmYzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciBlbmNvZGUgPSByZXF1aXJlKCdzdHJpbmdpZnktZW50aXRpZXMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcbnZhciBlc2NhcGVGYWN0b3J5ID0gcmVxdWlyZSgnLi9lc2NhcGUnKTtcbnZhciByZXR1cm5lciA9IHJlcXVpcmUoJy4vdXRpbC9yZXR1cm5lcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldE9wdGlvbnM7XG5cbi8qIE1hcCBvZiBhcHBsaWNhYmxlIGVudW0ncy4gKi9cbnZhciBtYXBzID0ge1xuICBlbnRpdGllczoge3RydWU6IHRydWUsIGZhbHNlOiB0cnVlLCBudW1iZXJzOiB0cnVlLCBlc2NhcGU6IHRydWV9LFxuICBidWxsZXQ6IHsnKic6IHRydWUsICctJzogdHJ1ZSwgJysnOiB0cnVlfSxcbiAgcnVsZTogeyctJzogdHJ1ZSwgXzogdHJ1ZSwgJyonOiB0cnVlfSxcbiAgbGlzdEl0ZW1JbmRlbnQ6IHt0YWI6IHRydWUsIG1peGVkOiB0cnVlLCAxOiB0cnVlfSxcbiAgZW1waGFzaXM6IHtfOiB0cnVlLCAnKic6IHRydWV9LFxuICBzdHJvbmc6IHtfOiB0cnVlLCAnKic6IHRydWV9LFxuICBmZW5jZTogeydgJzogdHJ1ZSwgJ34nOiB0cnVlfVxufTtcblxuLyogRXhwb3NlIGB2YWxpZGF0ZWAuICovXG52YXIgdmFsaWRhdGUgPSB7XG4gIGJvb2xlYW46IHZhbGlkYXRlQm9vbGVhbixcbiAgc3RyaW5nOiB2YWxpZGF0ZVN0cmluZyxcbiAgbnVtYmVyOiB2YWxpZGF0ZU51bWJlcixcbiAgZnVuY3Rpb246IHZhbGlkYXRlRnVuY3Rpb25cbn07XG5cbi8qIFNldCBvcHRpb25zLiAgRG9lcyBub3Qgb3ZlcndyaXRlIHByZXZpb3VzbHkgc2V0XG4gKiBvcHRpb25zLiAqL1xuZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGN1cnJlbnQgPSBzZWxmLm9wdGlvbnM7XG4gIHZhciBydWxlUmVwZXRpdGlvbjtcbiAgdmFyIGtleTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB4dGVuZChvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgYCcgKyBvcHRpb25zICsgJ2AgZm9yIHNldHRpbmcgYG9wdGlvbnNgJyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBkZWZhdWx0cykge1xuICAgIHZhbGlkYXRlW3R5cGVvZiBkZWZhdWx0c1trZXldXShvcHRpb25zLCBrZXksIGN1cnJlbnRba2V5XSwgbWFwc1trZXldKTtcbiAgfVxuXG4gIHJ1bGVSZXBldGl0aW9uID0gb3B0aW9ucy5ydWxlUmVwZXRpdGlvbjtcblxuICBpZiAocnVsZVJlcGV0aXRpb24gJiYgcnVsZVJlcGV0aXRpb24gPCAzKSB7XG4gICAgcmFpc2UocnVsZVJlcGV0aXRpb24sICdvcHRpb25zLnJ1bGVSZXBldGl0aW9uJyk7XG4gIH1cblxuICBzZWxmLmVuY29kZSA9IGVuY29kZUZhY3RvcnkoU3RyaW5nKG9wdGlvbnMuZW50aXRpZXMpKTtcbiAgc2VsZi5lc2NhcGUgPSBlc2NhcGVGYWN0b3J5KG9wdGlvbnMpO1xuXG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qIFRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGluIGl0cyBgbWVzc2FnZWAgYHZhbHVlYFxuICogYW5kIGBuYW1lYC4gKi9cbmZ1bmN0aW9uIHJhaXNlKHZhbHVlLCBuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBgJyArIHZhbHVlICsgJ2AgZm9yIHNldHRpbmcgYCcgKyBuYW1lICsgJ2AnKTtcbn1cblxuLyogVmFsaWRhdGUgYSB2YWx1ZSB0byBiZSBib29sZWFuLiBEZWZhdWx0cyB0byBgZGVmYC5cbiAqIFJhaXNlcyBhbiBleGNlcHRpb24gd2l0aCBgY29udGV4dFtuYW1lXWAgd2hlbiBub3RcbiAqIGEgYm9vbGVhbi4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbihjb250ZXh0LCBuYW1lLCBkZWYpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtuYW1lXTtcblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHZhbHVlID0gZGVmO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmFpc2UodmFsdWUsICdvcHRpb25zLicgKyBuYW1lKTtcbiAgfVxuXG4gIGNvbnRleHRbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyogVmFsaWRhdGUgYSB2YWx1ZSB0byBiZSBib29sZWFuLiBEZWZhdWx0cyB0byBgZGVmYC5cbiAqIFJhaXNlcyBhbiBleGNlcHRpb24gd2l0aCBgY29udGV4dFtuYW1lXWAgd2hlbiBub3RcbiAqIGEgYm9vbGVhbi4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKGNvbnRleHQsIG5hbWUsIGRlZikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W25hbWVdO1xuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdmFsdWUgPSBkZWY7XG4gIH1cblxuICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgcmFpc2UodmFsdWUsICdvcHRpb25zLicgKyBuYW1lKTtcbiAgfVxuXG4gIGNvbnRleHRbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyogVmFsaWRhdGUgYSB2YWx1ZSB0byBiZSBpbiBgbWFwYC4gRGVmYXVsdHMgdG8gYGRlZmAuXG4gKiBSYWlzZXMgYW4gZXhjZXB0aW9uIHdpdGggYGNvbnRleHRbbmFtZV1gIHdoZW4gbm90XG4gKiBpbiBgbWFwYC4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKGNvbnRleHQsIG5hbWUsIGRlZiwgbWFwKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRbbmFtZV07XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB2YWx1ZSA9IGRlZjtcbiAgfVxuXG4gIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblxuICBpZiAoISh2YWx1ZSBpbiBtYXApKSB7XG4gICAgcmFpc2UodmFsdWUsICdvcHRpb25zLicgKyBuYW1lKTtcbiAgfVxuXG4gIGNvbnRleHRbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyogVmFsaWRhdGUgYSB2YWx1ZSB0byBiZSBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYGRlZmAuXG4gKiBSYWlzZXMgYW4gZXhjZXB0aW9uIHdpdGggYGNvbnRleHRbbmFtZV1gIHdoZW4gbm90XG4gKiBhIGZ1bmN0aW9uLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbihjb250ZXh0LCBuYW1lLCBkZWYpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtuYW1lXTtcblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHZhbHVlID0gZGVmO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJhaXNlKHZhbHVlLCAnb3B0aW9ucy4nICsgbmFtZSk7XG4gIH1cblxuICBjb250ZXh0W25hbWVdID0gdmFsdWU7XG59XG5cbi8qIEZhY3RvcnkgdG8gZW5jb2RlIEhUTUwgZW50aXRpZXMuXG4gKiBDcmVhdGVzIGEgbm8tb3BlcmF0aW9uIGZ1bmN0aW9uIHdoZW4gYHR5cGVgIGlzXG4gKiBgJ2ZhbHNlJ2AsIGEgZnVuY3Rpb24gd2hpY2ggZW5jb2RlcyB1c2luZyBuYW1lZFxuICogcmVmZXJlbmNlcyB3aGVuIGB0eXBlYCBpcyBgJ3RydWUnYCwgYW5kIGEgZnVuY3Rpb25cbiAqIHdoaWNoIGVuY29kZXMgdXNpbmcgbnVtYmVyZWQgcmVmZXJlbmNlcyB3aGVuIGB0eXBlYCBpc1xuICogYCdudW1iZXJzJ2AuICovXG5mdW5jdGlvbiBlbmNvZGVGYWN0b3J5KHR5cGUpIHtcbiAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICBpZiAodHlwZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiByZXR1cm5lcjtcbiAgfVxuXG4gIGlmICh0eXBlID09PSAndHJ1ZScpIHtcbiAgICBvcHRpb25zLnVzZU5hbWVkUmVmZXJlbmNlcyA9IHRydWU7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICBvcHRpb25zLmVzY2FwZU9ubHkgPSB0cnVlO1xuICAgIG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVkO1xuXG4gIC8qIEVuY29kZSBIVE1MIGVudGl0aWVzIHVzaW5nIHRoZSBib3VuZCBvcHRpb25zLiAqL1xuICBmdW5jdGlvbiB3cmFwcGVkKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFVQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/set-options.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/copy-identifier-encoding.js": -/*!*****************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/copy-identifier-encoding.js ***! - \*****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar entityPrefixLength = __webpack_require__(/*! ./entity-prefix-length */ \"../node_modules/remark-stringify/lib/util/entity-prefix-length.js\");\n\nmodule.exports = copy;\nvar PUNCTUATION = /[-!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~_]/;\n/* For shortcut and collapsed reference links, the contents\n * is also an identifier, so we need to restore the original\n * encoding and escaping that were present in the source\n * string.\n *\n * This function takes the unescaped & unencoded value from\n * shortcut's child nodes and the identifier and encodes\n * the former according to the latter. */\n\nfunction copy(value, identifier) {\n var length = value.length;\n var count = identifier.length;\n var result = [];\n var position = 0;\n var index = 0;\n var start;\n\n while (index < length) {\n /* Take next non-punctuation characters from `value`. */\n start = index;\n\n while (index < length && !PUNCTUATION.test(value.charAt(index))) {\n index += 1;\n }\n\n result.push(value.slice(start, index));\n /* Advance `position` to the next punctuation character. */\n\n while (position < count && !PUNCTUATION.test(identifier.charAt(position))) {\n position += 1;\n }\n /* Take next punctuation characters from `identifier`. */\n\n\n start = position;\n\n while (position < count && PUNCTUATION.test(identifier.charAt(position))) {\n if (identifier.charAt(position) === '&') {\n position += entityPrefixLength(identifier.slice(position));\n }\n\n position += 1;\n }\n\n result.push(identifier.slice(start, position));\n /* Advance `index` to the next non-punctuation character. */\n\n while (index < length && PUNCTUATION.test(value.charAt(index))) {\n index += 1;\n }\n }\n\n return result.join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvY29weS1pZGVudGlmaWVyLWVuY29kaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi91dGlsL2NvcHktaWRlbnRpZmllci1lbmNvZGluZy5qcz80YmU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGVudGl0eVByZWZpeExlbmd0aCA9IHJlcXVpcmUoJy4vZW50aXR5LXByZWZpeC1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5O1xuXG52YXIgUFVOQ1RVQVRJT04gPSAvWy0hXCIjJCUmJygpKissLi86Ozw9Pj9AW1xcXFxcXF1eYHt8fX5fXS87XG5cbi8qIEZvciBzaG9ydGN1dCBhbmQgY29sbGFwc2VkIHJlZmVyZW5jZSBsaW5rcywgdGhlIGNvbnRlbnRzXG4gKiBpcyBhbHNvIGFuIGlkZW50aWZpZXIsIHNvIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWxcbiAqIGVuY29kaW5nIGFuZCBlc2NhcGluZyB0aGF0IHdlcmUgcHJlc2VudCBpbiB0aGUgc291cmNlXG4gKiBzdHJpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgdW5lc2NhcGVkICYgdW5lbmNvZGVkIHZhbHVlIGZyb21cbiAqIHNob3J0Y3V0J3MgY2hpbGQgbm9kZXMgYW5kIHRoZSBpZGVudGlmaWVyIGFuZCBlbmNvZGVzXG4gKiB0aGUgZm9ybWVyIGFjY29yZGluZyB0byB0aGUgbGF0dGVyLiAqL1xuZnVuY3Rpb24gY29weSh2YWx1ZSwgaWRlbnRpZmllcikge1xuICB2YXIgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB2YXIgY291bnQgPSBpZGVudGlmaWVyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgcG9zaXRpb24gPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgc3RhcnQ7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgLyogVGFrZSBuZXh0IG5vbi1wdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGZyb20gYHZhbHVlYC4gKi9cbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmICFQVU5DVFVBVElPTi50ZXN0KHZhbHVlLmNoYXJBdChpbmRleCkpKSB7XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHZhbHVlLnNsaWNlKHN0YXJ0LCBpbmRleCkpO1xuXG4gICAgLyogQWR2YW5jZSBgcG9zaXRpb25gIHRvIHRoZSBuZXh0IHB1bmN0dWF0aW9uIGNoYXJhY3Rlci4gKi9cbiAgICB3aGlsZSAocG9zaXRpb24gPCBjb3VudCAmJiAhUFVOQ1RVQVRJT04udGVzdChpZGVudGlmaWVyLmNoYXJBdChwb3NpdGlvbikpKSB7XG4gICAgICBwb3NpdGlvbiArPSAxO1xuICAgIH1cblxuICAgIC8qIFRha2UgbmV4dCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGZyb20gYGlkZW50aWZpZXJgLiAqL1xuICAgIHN0YXJ0ID0gcG9zaXRpb247XG5cbiAgICB3aGlsZSAocG9zaXRpb24gPCBjb3VudCAmJiBQVU5DVFVBVElPTi50ZXN0KGlkZW50aWZpZXIuY2hhckF0KHBvc2l0aW9uKSkpIHtcbiAgICAgIGlmIChpZGVudGlmaWVyLmNoYXJBdChwb3NpdGlvbikgPT09ICcmJykge1xuICAgICAgICBwb3NpdGlvbiArPSBlbnRpdHlQcmVmaXhMZW5ndGgoaWRlbnRpZmllci5zbGljZShwb3NpdGlvbikpO1xuICAgICAgfVxuXG4gICAgICBwb3NpdGlvbiArPSAxO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKGlkZW50aWZpZXIuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uKSk7XG5cbiAgICAvKiBBZHZhbmNlIGBpbmRleGAgdG8gdGhlIG5leHQgbm9uLXB1bmN0dWF0aW9uIGNoYXJhY3Rlci4gKi9cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgUFVOQ1RVQVRJT04udGVzdCh2YWx1ZS5jaGFyQXQoaW5kZXgpKSkge1xuICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/copy-identifier-encoding.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/enclose-title.js": -/*!******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/enclose-title.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = enclose;\n/* There is currently no way to support nested delimiters\n * across Markdown.pl, CommonMark, and GitHub (RedCarpet).\n * The following code supports Markdown.pl and GitHub.\n * CommonMark is not supported when mixing double- and\n * single quotes inside a title. */\n\nfunction enclose(title) {\n var delimiter = title.indexOf('\"') === -1 ? '\"' : '\\'';\n return delimiter + title + delimiter;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW5jbG9zZS10aXRsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdXRpbC9lbmNsb3NlLXRpdGxlLmpzP2M4OGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVuY2xvc2U7XG5cbi8qIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gc3VwcG9ydCBuZXN0ZWQgZGVsaW1pdGVyc1xuICogYWNyb3NzIE1hcmtkb3duLnBsLCBDb21tb25NYXJrLCBhbmQgR2l0SHViIChSZWRDYXJwZXQpLlxuICogVGhlIGZvbGxvd2luZyBjb2RlIHN1cHBvcnRzIE1hcmtkb3duLnBsIGFuZCBHaXRIdWIuXG4gKiBDb21tb25NYXJrIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBtaXhpbmcgZG91YmxlLSBhbmRcbiAqIHNpbmdsZSBxdW90ZXMgaW5zaWRlIGEgdGl0bGUuICovXG5mdW5jdGlvbiBlbmNsb3NlKHRpdGxlKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSB0aXRsZS5pbmRleE9mKCdcIicpID09PSAtMSA/ICdcIicgOiAnXFwnJztcbiAgcmV0dXJuIGRlbGltaXRlciArIHRpdGxlICsgZGVsaW1pdGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/enclose-title.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/enclose-uri.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/enclose-uri.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar count = __webpack_require__(/*! ccount */ \"../node_modules/ccount/index.js\");\n\nmodule.exports = enclose;\nvar re = /\\s/;\n/* Wrap `url` in angle brackets when needed, or when\n * forced.\n * In links, images, and definitions, the URL part needs\n * to be enclosed when it:\n *\n * - has a length of `0`;\n * - contains white-space;\n * - has more or less opening than closing parentheses.\n */\n\nfunction enclose(uri, always) {\n if (always || uri.length === 0 || re.test(uri) || count(uri, '(') !== count(uri, ')')) {\n return '<' + uri + '>';\n }\n\n return uri;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW5jbG9zZS11cmkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW5jbG9zZS11cmkuanM/MWJlZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjb3VudCA9IHJlcXVpcmUoJ2Njb3VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVuY2xvc2U7XG5cbnZhciByZSA9IC9cXHMvO1xuXG4vKiBXcmFwIGB1cmxgIGluIGFuZ2xlIGJyYWNrZXRzIHdoZW4gbmVlZGVkLCBvciB3aGVuXG4gKiBmb3JjZWQuXG4gKiBJbiBsaW5rcywgaW1hZ2VzLCBhbmQgZGVmaW5pdGlvbnMsIHRoZSBVUkwgcGFydCBuZWVkc1xuICogdG8gYmUgZW5jbG9zZWQgd2hlbiBpdDpcbiAqXG4gKiAtIGhhcyBhIGxlbmd0aCBvZiBgMGA7XG4gKiAtIGNvbnRhaW5zIHdoaXRlLXNwYWNlO1xuICogLSBoYXMgbW9yZSBvciBsZXNzIG9wZW5pbmcgdGhhbiBjbG9zaW5nIHBhcmVudGhlc2VzLlxuICovXG5mdW5jdGlvbiBlbmNsb3NlKHVyaSwgYWx3YXlzKSB7XG4gIGlmIChhbHdheXMgfHwgdXJpLmxlbmd0aCA9PT0gMCB8fCByZS50ZXN0KHVyaSkgfHwgY291bnQodXJpLCAnKCcpICE9PSBjb3VudCh1cmksICcpJykpIHtcbiAgICByZXR1cm4gJzwnICsgdXJpICsgJz4nO1xuICB9XG5cbiAgcmV0dXJuIHVyaTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/enclose-uri.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/enter-link-reference.js": -/*!*************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/enter-link-reference.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar returner = __webpack_require__(/*! ./returner */ \"../node_modules/remark-stringify/lib/util/returner.js\");\n\nmodule.exports = enter;\n/* Shortcut and collapsed link references need no escaping\n * and encoding during the processing of child nodes (it\n * must be implied from identifier).\n *\n * This toggler turns encoding and escaping off for shortcut\n * and collapsed references.\n *\n * Implies `enterLink`.\n */\n\nfunction enter(compiler, node) {\n var encode = compiler.encode;\n var escape = compiler.escape;\n var exit = compiler.enterLink();\n\n if (node.referenceType !== 'shortcut' && node.referenceType !== 'collapsed') {\n return exit;\n }\n\n compiler.escape = returner;\n compiler.encode = returner;\n return function () {\n compiler.encode = encode;\n compiler.escape = escape;\n exit();\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW50ZXItbGluay1yZWZlcmVuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW50ZXItbGluay1yZWZlcmVuY2UuanM/YmMwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZXR1cm5lciA9IHJlcXVpcmUoJy4vcmV0dXJuZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRlcjtcblxuLyogU2hvcnRjdXQgYW5kIGNvbGxhcHNlZCBsaW5rIHJlZmVyZW5jZXMgbmVlZCBubyBlc2NhcGluZ1xuICogYW5kIGVuY29kaW5nIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBjaGlsZCBub2RlcyAoaXRcbiAqIG11c3QgYmUgaW1wbGllZCBmcm9tIGlkZW50aWZpZXIpLlxuICpcbiAqIFRoaXMgdG9nZ2xlciB0dXJucyBlbmNvZGluZyBhbmQgZXNjYXBpbmcgb2ZmIGZvciBzaG9ydGN1dFxuICogYW5kIGNvbGxhcHNlZCByZWZlcmVuY2VzLlxuICpcbiAqIEltcGxpZXMgYGVudGVyTGlua2AuXG4gKi9cbmZ1bmN0aW9uIGVudGVyKGNvbXBpbGVyLCBub2RlKSB7XG4gIHZhciBlbmNvZGUgPSBjb21waWxlci5lbmNvZGU7XG4gIHZhciBlc2NhcGUgPSBjb21waWxlci5lc2NhcGU7XG4gIHZhciBleGl0ID0gY29tcGlsZXIuZW50ZXJMaW5rKCk7XG5cbiAgaWYgKFxuICAgIG5vZGUucmVmZXJlbmNlVHlwZSAhPT0gJ3Nob3J0Y3V0JyAmJlxuICAgIG5vZGUucmVmZXJlbmNlVHlwZSAhPT0gJ2NvbGxhcHNlZCdcbiAgKSB7XG4gICAgcmV0dXJuIGV4aXQ7XG4gIH1cblxuICBjb21waWxlci5lc2NhcGUgPSByZXR1cm5lcjtcbiAgY29tcGlsZXIuZW5jb2RlID0gcmV0dXJuZXI7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBjb21waWxlci5lbmNvZGUgPSBlbmNvZGU7XG4gICAgY29tcGlsZXIuZXNjYXBlID0gZXNjYXBlO1xuICAgIGV4aXQoKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/enter-link-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/entity-prefix-length.js": -/*!*************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/entity-prefix-length.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar decode = __webpack_require__(/*! parse-entities */ \"../node_modules/parse-entities/index.js\");\n\nmodule.exports = length;\n/* Returns the length of HTML entity that is a prefix of\n * the given string (excluding the ampersand), 0 if it\n * does not start with an entity. */\n\nfunction length(value) {\n var prefix;\n /* istanbul ignore if - Currently also tested for at\n * implemention, but we keep it here because that’s\n * proper. */\n\n if (value.charAt(0) !== '&') {\n return 0;\n }\n\n prefix = value.split('&', 2).join('&');\n return prefix.length - decode(prefix).length;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW50aXR5LXByZWZpeC1sZW5ndGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvZW50aXR5LXByZWZpeC1sZW5ndGguanM/ZWZlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWNvZGUgPSByZXF1aXJlKCdwYXJzZS1lbnRpdGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxlbmd0aDtcblxuLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIEhUTUwgZW50aXR5IHRoYXQgaXMgYSBwcmVmaXggb2ZcbiAqIHRoZSBnaXZlbiBzdHJpbmcgKGV4Y2x1ZGluZyB0aGUgYW1wZXJzYW5kKSwgMCBpZiBpdFxuICogZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiBlbnRpdHkuICovXG5mdW5jdGlvbiBsZW5ndGgodmFsdWUpIHtcbiAgdmFyIHByZWZpeDtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgLSBDdXJyZW50bHkgYWxzbyB0ZXN0ZWQgZm9yIGF0XG4gICAqIGltcGxlbWVudGlvbiwgYnV0IHdlIGtlZXAgaXQgaGVyZSBiZWNhdXNlIHRoYXTigJlzXG4gICAqIHByb3Blci4gKi9cbiAgaWYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gJyYnKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcmVmaXggPSB2YWx1ZS5zcGxpdCgnJicsIDIpLmpvaW4oJyYnKTtcblxuICByZXR1cm4gcHJlZml4Lmxlbmd0aCAtIGRlY29kZShwcmVmaXgpLmxlbmd0aDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/entity-prefix-length.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/label.js": -/*!**********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/label.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = label;\n/* Stringify a reference label.\n * Because link references are easily, mistakingly,\n * created (for example, `[foo]`), reference nodes have\n * an extra property depicting how it looked in the\n * original document, so stringification can cause minimal\n * changes. */\n\nfunction label(node) {\n var type = node.referenceType;\n var value = type === 'full' ? node.identifier : '';\n return type === 'shortcut' ? value : '[' + value + ']';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvbGFiZWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvbGFiZWwuanM/ODYxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gbGFiZWw7XG5cbi8qIFN0cmluZ2lmeSBhIHJlZmVyZW5jZSBsYWJlbC5cbiAqIEJlY2F1c2UgbGluayByZWZlcmVuY2VzIGFyZSBlYXNpbHksIG1pc3Rha2luZ2x5LFxuICogY3JlYXRlZCAoZm9yIGV4YW1wbGUsIGBbZm9vXWApLCByZWZlcmVuY2Ugbm9kZXMgaGF2ZVxuICogYW4gZXh0cmEgcHJvcGVydHkgZGVwaWN0aW5nIGhvdyBpdCBsb29rZWQgaW4gdGhlXG4gKiBvcmlnaW5hbCBkb2N1bWVudCwgc28gc3RyaW5naWZpY2F0aW9uIGNhbiBjYXVzZSBtaW5pbWFsXG4gKiBjaGFuZ2VzLiAqL1xuZnVuY3Rpb24gbGFiZWwobm9kZSkge1xuICB2YXIgdHlwZSA9IG5vZGUucmVmZXJlbmNlVHlwZTtcbiAgdmFyIHZhbHVlID0gdHlwZSA9PT0gJ2Z1bGwnID8gbm9kZS5pZGVudGlmaWVyIDogJyc7XG5cbiAgcmV0dXJuIHR5cGUgPT09ICdzaG9ydGN1dCcgPyB2YWx1ZSA6ICdbJyArIHZhbHVlICsgJ10nO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/label.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/pad.js": -/*!********************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/pad.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = pad;\nvar INDENT = 4;\n/* Pad `value` with `level * INDENT` spaces. Respects\n * lines. Ignores empty lines. */\n\nfunction pad(value, level) {\n var index;\n var padding;\n value = value.split('\\n');\n index = value.length;\n padding = repeat(' ', level * INDENT);\n\n while (index--) {\n if (value[index].length !== 0) {\n value[index] = padding + value[index];\n }\n }\n\n return value.join('\\n');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvcGFkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi91dGlsL3BhZC5qcz85MTRjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYWQ7XG5cbnZhciBJTkRFTlQgPSA0O1xuXG4vKiBQYWQgYHZhbHVlYCB3aXRoIGBsZXZlbCAqIElOREVOVGAgc3BhY2VzLiAgUmVzcGVjdHNcbiAqIGxpbmVzLiBJZ25vcmVzIGVtcHR5IGxpbmVzLiAqL1xuZnVuY3Rpb24gcGFkKHZhbHVlLCBsZXZlbCkge1xuICB2YXIgaW5kZXg7XG4gIHZhciBwYWRkaW5nO1xuXG4gIHZhbHVlID0gdmFsdWUuc3BsaXQoJ1xcbicpO1xuXG4gIGluZGV4ID0gdmFsdWUubGVuZ3RoO1xuICBwYWRkaW5nID0gcmVwZWF0KCcgJywgbGV2ZWwgKiBJTkRFTlQpO1xuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHZhbHVlW2luZGV4XS5sZW5ndGggIT09IDApIHtcbiAgICAgIHZhbHVlW2luZGV4XSA9IHBhZGRpbmcgKyB2YWx1ZVtpbmRleF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlLmpvaW4oJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/pad.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/util/returner.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/util/returner.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = returner;\n\nfunction returner(value) {\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvcmV0dXJuZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3V0aWwvcmV0dXJuZXIuanM/ZjA3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmV0dXJuZXI7XG5cbmZ1bmN0aW9uIHJldHVybmVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/util/returner.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/blockquote.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/blockquote.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = blockquote;\n\nfunction blockquote(node) {\n var values = this.block(node).split('\\n');\n var result = [];\n var length = values.length;\n var index = -1;\n var value;\n\n while (++index < length) {\n value = values[index];\n result[index] = (value ? ' ' : '') + value;\n }\n\n return '>' + result.join('\\n>');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Jsb2NrcXVvdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Jsb2NrcXVvdGUuanM/ODY4MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gYmxvY2txdW90ZTtcblxuZnVuY3Rpb24gYmxvY2txdW90ZShub2RlKSB7XG4gIHZhciB2YWx1ZXMgPSB0aGlzLmJsb2NrKG5vZGUpLnNwbGl0KCdcXG4nKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciB2YWx1ZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XTtcbiAgICByZXN1bHRbaW5kZXhdID0gKHZhbHVlID8gJyAnIDogJycpICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJz4nICsgcmVzdWx0LmpvaW4oJ1xcbj4nKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/blockquote.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/break.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/break.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = lineBreak;\nvar map = {\n \"true\": '\\\\\\n',\n \"false\": ' \\n'\n};\n\nfunction lineBreak() {\n return map[this.options.commonmark];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2JyZWFrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9icmVhay5qcz9hNWM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5lQnJlYWs7XG5cbnZhciBtYXAgPSB7dHJ1ZTogJ1xcXFxcXG4nLCBmYWxzZTogJyAgXFxuJ307XG5cbmZ1bmN0aW9uIGxpbmVCcmVhaygpIHtcbiAgcmV0dXJuIG1hcFt0aGlzLm9wdGlvbnMuY29tbW9ubWFya107XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/break.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/code.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/code.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar streak = __webpack_require__(/*! longest-streak */ \"../node_modules/longest-streak/index.js\");\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar pad = __webpack_require__(/*! ../util/pad */ \"../node_modules/remark-stringify/lib/util/pad.js\");\n\nmodule.exports = code;\n/* Stringify code.\n * Creates indented code when:\n *\n * - No language tag exists;\n * - Not in `fences: true` mode;\n * - A non-empty value exists.\n *\n * Otherwise, GFM fenced code is created:\n *\n * ```js\n * foo();\n * ```\n *\n * When in ``fence: `~` `` mode, uses tildes as fences:\n *\n * ~~~js\n * foo();\n * ~~~\n *\n * Knows about internal fences:\n *\n * ````markdown\n * ```javascript\n * foo();\n * ```\n * ````\n */\n\nfunction code(node, parent) {\n var self = this;\n var value = node.value;\n var options = self.options;\n var marker = options.fence;\n var language = self.encode(node.lang || '', node);\n var fence;\n /* Without (needed) fences. */\n\n if (!language && !options.fences && value) {\n /* Throw when pedantic, in a list item which\n * isn’t compiled using a tab. */\n if (parent && parent.type === 'listItem' && options.listItemIndent !== 'tab' && options.pedantic) {\n self.file.fail('Cannot indent code properly. See http://git.io/vgFvT', node.position);\n }\n\n return pad(value, 1);\n }\n\n fence = repeat(marker, Math.max(streak(value, marker) + 1, 3));\n return fence + language + '\\n' + value + '\\n' + fence;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2NvZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2NvZGUuanM/ZDkxNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdHJlYWsgPSByZXF1aXJlKCdsb25nZXN0LXN0cmVhaycpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbnZhciBwYWQgPSByZXF1aXJlKCcuLi91dGlsL3BhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7XG5cbi8qIFN0cmluZ2lmeSBjb2RlLlxuICogQ3JlYXRlcyBpbmRlbnRlZCBjb2RlIHdoZW46XG4gKlxuICogLSBObyBsYW5ndWFnZSB0YWcgZXhpc3RzO1xuICogLSBOb3QgaW4gYGZlbmNlczogdHJ1ZWAgbW9kZTtcbiAqIC0gQSBub24tZW1wdHkgdmFsdWUgZXhpc3RzLlxuICpcbiAqIE90aGVyd2lzZSwgR0ZNIGZlbmNlZCBjb2RlIGlzIGNyZWF0ZWQ6XG4gKlxuICogICAgIGBgYGpzXG4gKiAgICAgZm9vKCk7XG4gKiAgICAgYGBgXG4gKlxuICogV2hlbiBpbiBgYGZlbmNlOiBgfmAgYGAgbW9kZSwgdXNlcyB0aWxkZXMgYXMgZmVuY2VzOlxuICpcbiAqICAgICB+fn5qc1xuICogICAgIGZvbygpO1xuICogICAgIH5+flxuICpcbiAqIEtub3dzIGFib3V0IGludGVybmFsIGZlbmNlczpcbiAqXG4gKiAgICAgYGBgYG1hcmtkb3duXG4gKiAgICAgYGBgamF2YXNjcmlwdFxuICogICAgIGZvbygpO1xuICogICAgIGBgYFxuICogICAgIGBgYGBcbiAqL1xuZnVuY3Rpb24gY29kZShub2RlLCBwYXJlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB2YXIgb3B0aW9ucyA9IHNlbGYub3B0aW9ucztcbiAgdmFyIG1hcmtlciA9IG9wdGlvbnMuZmVuY2U7XG4gIHZhciBsYW5ndWFnZSA9IHNlbGYuZW5jb2RlKG5vZGUubGFuZyB8fCAnJywgbm9kZSk7XG4gIHZhciBmZW5jZTtcblxuICAvKiBXaXRob3V0IChuZWVkZWQpIGZlbmNlcy4gKi9cbiAgaWYgKCFsYW5ndWFnZSAmJiAhb3B0aW9ucy5mZW5jZXMgJiYgdmFsdWUpIHtcbiAgICAvKiBUaHJvdyB3aGVuIHBlZGFudGljLCBpbiBhIGxpc3QgaXRlbSB3aGljaFxuICAgICAqIGlzbuKAmXQgY29tcGlsZWQgdXNpbmcgYSB0YWIuICovXG4gICAgaWYgKFxuICAgICAgcGFyZW50ICYmXG4gICAgICBwYXJlbnQudHlwZSA9PT0gJ2xpc3RJdGVtJyAmJlxuICAgICAgb3B0aW9ucy5saXN0SXRlbUluZGVudCAhPT0gJ3RhYicgJiZcbiAgICAgIG9wdGlvbnMucGVkYW50aWNcbiAgICApIHtcbiAgICAgIHNlbGYuZmlsZS5mYWlsKCdDYW5ub3QgaW5kZW50IGNvZGUgcHJvcGVybHkuIFNlZSBodHRwOi8vZ2l0LmlvL3ZnRnZUJywgbm9kZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZCh2YWx1ZSwgMSk7XG4gIH1cblxuICBmZW5jZSA9IHJlcGVhdChtYXJrZXIsIE1hdGgubWF4KHN0cmVhayh2YWx1ZSwgbWFya2VyKSArIDEsIDMpKTtcblxuICByZXR1cm4gZmVuY2UgKyBsYW5ndWFnZSArICdcXG4nICsgdmFsdWUgKyAnXFxuJyArIGZlbmNlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBOztBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/code.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/definition.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/definition.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar uri = __webpack_require__(/*! ../util/enclose-uri */ \"../node_modules/remark-stringify/lib/util/enclose-uri.js\");\n\nvar title = __webpack_require__(/*! ../util/enclose-title */ \"../node_modules/remark-stringify/lib/util/enclose-title.js\");\n\nmodule.exports = definition;\n/* Stringify an URL definition.\n *\n * Is smart about enclosing `url` (see `encloseURI()`) and\n * `title` (see `encloseTitle()`).\n *\n * [foo]: <foo at bar dot com> 'An \"example\" e-mail'\n */\n\nfunction definition(node) {\n var content = uri(node.url);\n\n if (node.title) {\n content += ' ' + title(node.title);\n }\n\n return '[' + node.identifier + ']: ' + content;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2RlZmluaXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2RlZmluaXRpb24uanM/YjE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1cmkgPSByZXF1aXJlKCcuLi91dGlsL2VuY2xvc2UtdXJpJyk7XG52YXIgdGl0bGUgPSByZXF1aXJlKCcuLi91dGlsL2VuY2xvc2UtdGl0bGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uO1xuXG4vKiBTdHJpbmdpZnkgYW4gVVJMIGRlZmluaXRpb24uXG4gKlxuICogSXMgc21hcnQgYWJvdXQgZW5jbG9zaW5nIGB1cmxgIChzZWUgYGVuY2xvc2VVUkkoKWApIGFuZFxuICogYHRpdGxlYCAoc2VlIGBlbmNsb3NlVGl0bGUoKWApLlxuICpcbiAqICAgIFtmb29dOiA8Zm9vIGF0IGJhciBkb3QgY29tPiAnQW4gXCJleGFtcGxlXCIgZS1tYWlsJ1xuICovXG5mdW5jdGlvbiBkZWZpbml0aW9uKG5vZGUpIHtcbiAgdmFyIGNvbnRlbnQgPSB1cmkobm9kZS51cmwpO1xuXG4gIGlmIChub2RlLnRpdGxlKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aXRsZShub2RlLnRpdGxlKTtcbiAgfVxuXG4gIHJldHVybiAnWycgKyBub2RlLmlkZW50aWZpZXIgKyAnXTogJyArIGNvbnRlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/definition.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/delete.js": -/*!***************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/delete.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = strikethrough;\n\nfunction strikethrough(node) {\n return '~~' + this.all(node).join('') + '~~';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2RlbGV0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvZGVsZXRlLmpzPzIzYTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmlrZXRocm91Z2g7XG5cbmZ1bmN0aW9uIHN0cmlrZXRocm91Z2gobm9kZSkge1xuICByZXR1cm4gJ35+JyArIHRoaXMuYWxsKG5vZGUpLmpvaW4oJycpICsgJ35+Jztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/delete.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/emphasis.js": -/*!*****************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/emphasis.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = emphasis;\n/* Stringify an `emphasis`.\n *\n * The marker used is configurable through `emphasis`, which\n * defaults to an underscore (`'_'`) but also accepts an\n * asterisk (`'*'`):\n *\n * *foo*\n */\n\nfunction emphasis(node) {\n var marker = this.options.emphasis;\n return marker + this.all(node).join('') + marker;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2VtcGhhc2lzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9lbXBoYXNpcy5qcz81MmNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlbXBoYXNpcztcblxuLyogU3RyaW5naWZ5IGFuIGBlbXBoYXNpc2AuXG4gKlxuICogVGhlIG1hcmtlciB1c2VkIGlzIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIGBlbXBoYXNpc2AsIHdoaWNoXG4gKiBkZWZhdWx0cyB0byBhbiB1bmRlcnNjb3JlIChgJ18nYCkgYnV0IGFsc28gYWNjZXB0cyBhblxuICogYXN0ZXJpc2sgKGAnKidgKTpcbiAqXG4gKiAgICAgKmZvbypcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXMobm9kZSkge1xuICB2YXIgbWFya2VyID0gdGhpcy5vcHRpb25zLmVtcGhhc2lzO1xuICByZXR1cm4gbWFya2VyICsgdGhpcy5hbGwobm9kZSkuam9pbignJykgKyBtYXJrZXI7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/emphasis.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/footnote-definition.js": -/*!****************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/footnote-definition.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = footnoteDefinition;\n\nfunction footnoteDefinition(node) {\n var id = node.identifier.toLowerCase();\n var content = this.all(node).join('\\n\\n' + repeat(' ', 4));\n return '[^' + id + ']: ' + content;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Zvb3Rub3RlLWRlZmluaXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Zvb3Rub3RlLWRlZmluaXRpb24uanM/MWJhNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZm9vdG5vdGVEZWZpbml0aW9uO1xuXG5mdW5jdGlvbiBmb290bm90ZURlZmluaXRpb24obm9kZSkge1xuICB2YXIgaWQgPSBub2RlLmlkZW50aWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLmFsbChub2RlKS5qb2luKCdcXG5cXG4nICsgcmVwZWF0KCcgJywgNCkpO1xuXG4gIHJldHVybiAnW14nICsgaWQgKyAnXTogJyArIGNvbnRlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/footnote-definition.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/footnote-reference.js": -/*!***************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/footnote-reference.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = footnoteReference;\n\nfunction footnoteReference(node) {\n return '[^' + node.identifier + ']';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzPzEzZTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvb3Rub3RlUmVmZXJlbmNlO1xuXG5mdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZShub2RlKSB7XG4gIHJldHVybiAnW14nICsgbm9kZS5pZGVudGlmaWVyICsgJ10nO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/footnote-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/footnote.js": -/*!*****************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/footnote.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = footnote;\n\nfunction footnote(node) {\n return '[^' + this.all(node).join('') + ']';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2Zvb3Rub3RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9mb290bm90ZS5qcz85YjQxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmb290bm90ZTtcblxuZnVuY3Rpb24gZm9vdG5vdGUobm9kZSkge1xuICByZXR1cm4gJ1teJyArIHRoaXMuYWxsKG5vZGUpLmpvaW4oJycpICsgJ10nO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/footnote.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/heading.js": -/*!****************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/heading.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = heading;\n/* Stringify a heading.\n *\n * In `setext: true` mode and when `depth` is smaller than\n * three, creates a setext header:\n *\n * Foo\n * ===\n *\n * Otherwise, an ATX header is generated:\n *\n * ### Foo\n *\n * In `closeAtx: true` mode, the header is closed with\n * hashes:\n *\n * ### Foo ###\n */\n\nfunction heading(node) {\n var self = this;\n var depth = node.depth;\n var setext = self.options.setext;\n var closeAtx = self.options.closeAtx;\n var content = self.all(node).join('');\n var prefix;\n\n if (setext && depth < 3) {\n return content + '\\n' + repeat(depth === 1 ? '=' : '-', content.length);\n }\n\n prefix = repeat('#', node.depth);\n return prefix + ' ' + content + (closeAtx ? ' ' + prefix : '');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2hlYWRpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2hlYWRpbmcuanM/NWM2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaGVhZGluZztcblxuLyogU3RyaW5naWZ5IGEgaGVhZGluZy5cbiAqXG4gKiBJbiBgc2V0ZXh0OiB0cnVlYCBtb2RlIGFuZCB3aGVuIGBkZXB0aGAgaXMgc21hbGxlciB0aGFuXG4gKiB0aHJlZSwgY3JlYXRlcyBhIHNldGV4dCBoZWFkZXI6XG4gKlxuICogICAgIEZvb1xuICogICAgID09PVxuICpcbiAqIE90aGVyd2lzZSwgYW4gQVRYIGhlYWRlciBpcyBnZW5lcmF0ZWQ6XG4gKlxuICogICAgICMjIyBGb29cbiAqXG4gKiBJbiBgY2xvc2VBdHg6IHRydWVgIG1vZGUsIHRoZSBoZWFkZXIgaXMgY2xvc2VkIHdpdGhcbiAqIGhhc2hlczpcbiAqXG4gKiAgICAgIyMjIEZvbyAjIyNcbiAqL1xuZnVuY3Rpb24gaGVhZGluZyhub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGRlcHRoID0gbm9kZS5kZXB0aDtcbiAgdmFyIHNldGV4dCA9IHNlbGYub3B0aW9ucy5zZXRleHQ7XG4gIHZhciBjbG9zZUF0eCA9IHNlbGYub3B0aW9ucy5jbG9zZUF0eDtcbiAgdmFyIGNvbnRlbnQgPSBzZWxmLmFsbChub2RlKS5qb2luKCcnKTtcbiAgdmFyIHByZWZpeDtcblxuICBpZiAoc2V0ZXh0ICYmIGRlcHRoIDwgMykge1xuICAgIHJldHVybiBjb250ZW50ICsgJ1xcbicgKyByZXBlYXQoZGVwdGggPT09IDEgPyAnPScgOiAnLScsIGNvbnRlbnQubGVuZ3RoKTtcbiAgfVxuXG4gIHByZWZpeCA9IHJlcGVhdCgnIycsIG5vZGUuZGVwdGgpO1xuXG4gIHJldHVybiBwcmVmaXggKyAnICcgKyBjb250ZW50ICsgKGNsb3NlQXR4ID8gJyAnICsgcHJlZml4IDogJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/heading.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/html.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/html.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = html;\n\nfunction html(node) {\n return node.value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2h0bWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2h0bWwuanM/YjVjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaHRtbDtcblxuZnVuY3Rpb24gaHRtbChub2RlKSB7XG4gIHJldHVybiBub2RlLnZhbHVlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/html.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/image-reference.js": -/*!************************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/image-reference.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar label = __webpack_require__(/*! ../util/label */ \"../node_modules/remark-stringify/lib/util/label.js\");\n\nmodule.exports = imageReference;\n\nfunction imageReference(node) {\n return '![' + (this.encode(node.alt, node) || '') + ']' + label(node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2ltYWdlLXJlZmVyZW5jZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvaW1hZ2UtcmVmZXJlbmNlLmpzP2I1ZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbGFiZWwgPSByZXF1aXJlKCcuLi91dGlsL2xhYmVsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW1hZ2VSZWZlcmVuY2U7XG5cbmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlKG5vZGUpIHtcbiAgcmV0dXJuICchWycgKyAodGhpcy5lbmNvZGUobm9kZS5hbHQsIG5vZGUpIHx8ICcnKSArICddJyArIGxhYmVsKG5vZGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/image-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/image.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/image.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar uri = __webpack_require__(/*! ../util/enclose-uri */ \"../node_modules/remark-stringify/lib/util/enclose-uri.js\");\n\nvar title = __webpack_require__(/*! ../util/enclose-title */ \"../node_modules/remark-stringify/lib/util/enclose-title.js\");\n\nmodule.exports = image;\n/* Stringify an image.\n *\n * Is smart about enclosing `url` (see `encloseURI()`) and\n * `title` (see `encloseTitle()`).\n *\n * ![foo](</fav icon.png> 'My \"favourite\" icon')\n *\n * Supports named entities in `url`, `alt`, and `title`\n * when in `settings.encode` mode.\n */\n\nfunction image(node) {\n var self = this;\n var content = uri(self.encode(node.url || '', node));\n var exit = self.enterLink();\n var alt = self.encode(self.escape(node.alt || '', node));\n exit();\n\n if (node.title) {\n content += ' ' + title(self.encode(node.title, node));\n }\n\n return '![' + alt + '](' + content + ')';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2ltYWdlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9pbWFnZS5qcz9hY2NjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVyaSA9IHJlcXVpcmUoJy4uL3V0aWwvZW5jbG9zZS11cmknKTtcbnZhciB0aXRsZSA9IHJlcXVpcmUoJy4uL3V0aWwvZW5jbG9zZS10aXRsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGltYWdlO1xuXG4vKiBTdHJpbmdpZnkgYW4gaW1hZ2UuXG4gKlxuICogSXMgc21hcnQgYWJvdXQgZW5jbG9zaW5nIGB1cmxgIChzZWUgYGVuY2xvc2VVUkkoKWApIGFuZFxuICogYHRpdGxlYCAoc2VlIGBlbmNsb3NlVGl0bGUoKWApLlxuICpcbiAqICAgICFbZm9vXSg8L2ZhdiBpY29uLnBuZz4gJ015IFwiZmF2b3VyaXRlXCIgaWNvbicpXG4gKlxuICogU3VwcG9ydHMgbmFtZWQgZW50aXRpZXMgaW4gYHVybGAsIGBhbHRgLCBhbmQgYHRpdGxlYFxuICogd2hlbiBpbiBgc2V0dGluZ3MuZW5jb2RlYCBtb2RlLlxuICovXG5mdW5jdGlvbiBpbWFnZShub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGNvbnRlbnQgPSB1cmkoc2VsZi5lbmNvZGUobm9kZS51cmwgfHwgJycsIG5vZGUpKTtcbiAgdmFyIGV4aXQgPSBzZWxmLmVudGVyTGluaygpO1xuICB2YXIgYWx0ID0gc2VsZi5lbmNvZGUoc2VsZi5lc2NhcGUobm9kZS5hbHQgfHwgJycsIG5vZGUpKTtcblxuICBleGl0KCk7XG5cbiAgaWYgKG5vZGUudGl0bGUpIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRpdGxlKHNlbGYuZW5jb2RlKG5vZGUudGl0bGUsIG5vZGUpKTtcbiAgfVxuXG4gIHJldHVybiAnIVsnICsgYWx0ICsgJ10oJyArIGNvbnRlbnQgKyAnKSc7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/image.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/inline-code.js": -/*!********************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/inline-code.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar streak = __webpack_require__(/*! longest-streak */ \"../node_modules/longest-streak/index.js\");\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = inlineCode;\n/* Stringify inline code.\n *\n * Knows about internal ticks (`\\``), and ensures one more\n * tick is used to enclose the inline code:\n *\n * ```foo ``bar`` baz```\n *\n * Even knows about inital and final ticks:\n *\n * `` `foo ``\n * `` foo` ``\n */\n\nfunction inlineCode(node) {\n var value = node.value;\n var ticks = repeat('`', streak(value, '`') + 1);\n var start = ticks;\n var end = ticks;\n\n if (value.charAt(0) === '`') {\n start += ' ';\n }\n\n if (value.charAt(value.length - 1) === '`') {\n end = ' ' + end;\n }\n\n return start + value + end;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2lubGluZS1jb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9pbmxpbmUtY29kZS5qcz8xOGRhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmVhayA9IHJlcXVpcmUoJ2xvbmdlc3Qtc3RyZWFrJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlubGluZUNvZGU7XG5cbi8qIFN0cmluZ2lmeSBpbmxpbmUgY29kZS5cbiAqXG4gKiBLbm93cyBhYm91dCBpbnRlcm5hbCB0aWNrcyAoYFxcYGApLCBhbmQgZW5zdXJlcyBvbmUgbW9yZVxuICogdGljayBpcyB1c2VkIHRvIGVuY2xvc2UgdGhlIGlubGluZSBjb2RlOlxuICpcbiAqICAgICBgYGBmb28gYGBiYXJgYCBiYXpgYGBcbiAqXG4gKiBFdmVuIGtub3dzIGFib3V0IGluaXRhbCBhbmQgZmluYWwgdGlja3M6XG4gKlxuICogICAgIGBgIGBmb28gYGBcbiAqICAgICBgYCBmb29gIGBgXG4gKi9cbmZ1bmN0aW9uIGlubGluZUNvZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB2YXIgdGlja3MgPSByZXBlYXQoJ2AnLCBzdHJlYWsodmFsdWUsICdgJykgKyAxKTtcbiAgdmFyIHN0YXJ0ID0gdGlja3M7XG4gIHZhciBlbmQgPSB0aWNrcztcblxuICBpZiAodmFsdWUuY2hhckF0KDApID09PSAnYCcpIHtcbiAgICBzdGFydCArPSAnICc7XG4gIH1cblxuICBpZiAodmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpID09PSAnYCcpIHtcbiAgICBlbmQgPSAnICcgKyBlbmQ7XG4gIH1cblxuICByZXR1cm4gc3RhcnQgKyB2YWx1ZSArIGVuZDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/inline-code.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/link-reference.js": -/*!***********************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/link-reference.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar copy = __webpack_require__(/*! ../util/copy-identifier-encoding */ \"../node_modules/remark-stringify/lib/util/copy-identifier-encoding.js\");\n\nvar label = __webpack_require__(/*! ../util/label */ \"../node_modules/remark-stringify/lib/util/label.js\");\n\nmodule.exports = linkReference;\n\nfunction linkReference(node) {\n var self = this;\n var type = node.referenceType;\n var exit = self.enterLinkReference(self, node);\n var value = self.all(node).join('');\n exit();\n\n if (type === 'shortcut' || type === 'collapsed') {\n value = copy(value, node.identifier);\n }\n\n return '[' + value + ']' + label(node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpbmstcmVmZXJlbmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy9saW5rLXJlZmVyZW5jZS5qcz84ZTk4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNvcHkgPSByZXF1aXJlKCcuLi91dGlsL2NvcHktaWRlbnRpZmllci1lbmNvZGluZycpO1xudmFyIGxhYmVsID0gcmVxdWlyZSgnLi4vdXRpbC9sYWJlbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpbmtSZWZlcmVuY2U7XG5cbmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2Uobm9kZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0eXBlID0gbm9kZS5yZWZlcmVuY2VUeXBlO1xuICB2YXIgZXhpdCA9IHNlbGYuZW50ZXJMaW5rUmVmZXJlbmNlKHNlbGYsIG5vZGUpO1xuICB2YXIgdmFsdWUgPSBzZWxmLmFsbChub2RlKS5qb2luKCcnKTtcblxuICBleGl0KCk7XG5cbiAgaWYgKHR5cGUgPT09ICdzaG9ydGN1dCcgfHwgdHlwZSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICB2YWx1ZSA9IGNvcHkodmFsdWUsIG5vZGUuaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gJ1snICsgdmFsdWUgKyAnXScgKyBsYWJlbChub2RlKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/link-reference.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/link.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/link.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar uri = __webpack_require__(/*! ../util/enclose-uri */ \"../node_modules/remark-stringify/lib/util/enclose-uri.js\");\n\nvar title = __webpack_require__(/*! ../util/enclose-title */ \"../node_modules/remark-stringify/lib/util/enclose-title.js\");\n\nmodule.exports = link;\n/* Expression for a protocol:\n * http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax */\n\nvar PROTOCOL = /^[a-z][a-z+.-]+:\\/?/i;\n/* Stringify a link.\n *\n * When no title exists, the compiled `children` equal\n * `url`, and `url` starts with a protocol, an auto\n * link is created:\n *\n * <http://example.com>\n *\n * Otherwise, is smart about enclosing `url` (see\n * `encloseURI()`) and `title` (see `encloseTitle()`).\n *\n * [foo](<foo at bar dot com> 'An \"example\" e-mail')\n *\n * Supports named entities in the `url` and `title` when\n * in `settings.encode` mode. */\n\nfunction link(node) {\n var self = this;\n var content = self.encode(node.url || '', node);\n var exit = self.enterLink();\n var escaped = self.encode(self.escape(node.url || '', node));\n var value = self.all(node).join('');\n exit();\n\n if (node.title == null && PROTOCOL.test(content) && (escaped === value || escaped === 'mailto:' + value)) {\n /* Backslash escapes do not work in autolinks,\n * so we do not escape. */\n return uri(self.encode(node.url), true);\n }\n\n content = uri(content);\n\n if (node.title) {\n content += ' ' + title(self.encode(self.escape(node.title, node), node));\n }\n\n return '[' + value + '](' + content + ')';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpbmsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpbmsuanM/ZjM0MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1cmkgPSByZXF1aXJlKCcuLi91dGlsL2VuY2xvc2UtdXJpJyk7XG52YXIgdGl0bGUgPSByZXF1aXJlKCcuLi91dGlsL2VuY2xvc2UtdGl0bGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5rO1xuXG4vKiBFeHByZXNzaW9uIGZvciBhIHByb3RvY29sOlxuICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VUklfc2NoZW1lI0dlbmVyaWNfc3ludGF4ICovXG52YXIgUFJPVE9DT0wgPSAvXlthLXpdW2EteisuLV0rOlxcLz8vaTtcblxuLyogU3RyaW5naWZ5IGEgbGluay5cbiAqXG4gKiBXaGVuIG5vIHRpdGxlIGV4aXN0cywgdGhlIGNvbXBpbGVkIGBjaGlsZHJlbmAgZXF1YWxcbiAqIGB1cmxgLCBhbmQgYHVybGAgc3RhcnRzIHdpdGggYSBwcm90b2NvbCwgYW4gYXV0b1xuICogbGluayBpcyBjcmVhdGVkOlxuICpcbiAqICAgICA8aHR0cDovL2V4YW1wbGUuY29tPlxuICpcbiAqIE90aGVyd2lzZSwgaXMgc21hcnQgYWJvdXQgZW5jbG9zaW5nIGB1cmxgIChzZWVcbiAqIGBlbmNsb3NlVVJJKClgKSBhbmQgYHRpdGxlYCAoc2VlIGBlbmNsb3NlVGl0bGUoKWApLlxuICpcbiAqICAgIFtmb29dKDxmb28gYXQgYmFyIGRvdCBjb20+ICdBbiBcImV4YW1wbGVcIiBlLW1haWwnKVxuICpcbiAqIFN1cHBvcnRzIG5hbWVkIGVudGl0aWVzIGluIHRoZSBgdXJsYCBhbmQgYHRpdGxlYCB3aGVuXG4gKiBpbiBgc2V0dGluZ3MuZW5jb2RlYCBtb2RlLiAqL1xuZnVuY3Rpb24gbGluayhub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGNvbnRlbnQgPSBzZWxmLmVuY29kZShub2RlLnVybCB8fCAnJywgbm9kZSk7XG4gIHZhciBleGl0ID0gc2VsZi5lbnRlckxpbmsoKTtcbiAgdmFyIGVzY2FwZWQgPSBzZWxmLmVuY29kZShzZWxmLmVzY2FwZShub2RlLnVybCB8fCAnJywgbm9kZSkpO1xuICB2YXIgdmFsdWUgPSBzZWxmLmFsbChub2RlKS5qb2luKCcnKTtcblxuICBleGl0KCk7XG5cbiAgaWYgKFxuICAgIG5vZGUudGl0bGUgPT0gbnVsbCAmJlxuICAgIFBST1RPQ09MLnRlc3QoY29udGVudCkgJiZcbiAgICAoZXNjYXBlZCA9PT0gdmFsdWUgfHwgZXNjYXBlZCA9PT0gJ21haWx0bzonICsgdmFsdWUpXG4gICkge1xuICAgIC8qIEJhY2tzbGFzaCBlc2NhcGVzIGRvIG5vdCB3b3JrIGluIGF1dG9saW5rcyxcbiAgICAgKiBzbyB3ZSBkbyBub3QgZXNjYXBlLiAqL1xuICAgIHJldHVybiB1cmkoc2VsZi5lbmNvZGUobm9kZS51cmwpLCB0cnVlKTtcbiAgfVxuXG4gIGNvbnRlbnQgPSB1cmkoY29udGVudCk7XG5cbiAgaWYgKG5vZGUudGl0bGUpIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRpdGxlKHNlbGYuZW5jb2RlKHNlbGYuZXNjYXBlKG5vZGUudGl0bGUsIG5vZGUpLCBub2RlKSk7XG4gIH1cblxuICByZXR1cm4gJ1snICsgdmFsdWUgKyAnXSgnICsgY29udGVudCArICcpJztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/link.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/list-item.js": -/*!******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/list-item.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nvar pad = __webpack_require__(/*! ../util/pad */ \"../node_modules/remark-stringify/lib/util/pad.js\");\n\nmodule.exports = listItem;\n/* Which checkbox to use. */\n\nvar CHECKBOX_MAP = {\n undefined: '',\n \"null\": '',\n \"true\": '[x] ',\n \"false\": '[ ] '\n};\n/* Stringify a list item.\n *\n * Prefixes the content with a checked checkbox when\n * `checked: true`:\n *\n * [x] foo\n *\n * Prefixes the content with an unchecked checkbox when\n * `checked: false`:\n *\n * [ ] foo\n */\n\nfunction listItem(node, parent, position, bullet) {\n var self = this;\n var style = self.options.listItemIndent;\n var loose = node.loose;\n var children = node.children;\n var length = children.length;\n var values = [];\n var index = -1;\n var value;\n var indent;\n var spacing;\n\n while (++index < length) {\n values[index] = self.visit(children[index], node);\n }\n\n value = CHECKBOX_MAP[node.checked] + values.join(loose ? '\\n\\n' : '\\n');\n\n if (style === '1' || style === 'mixed' && value.indexOf('\\n') === -1) {\n indent = bullet.length + 1;\n spacing = ' ';\n } else {\n indent = Math.ceil((bullet.length + 1) / 4) * 4;\n spacing = repeat(' ', indent - bullet.length);\n }\n\n value = bullet + spacing + pad(value, indent / 4).slice(indent);\n\n if (loose && parent.children.length - 1 !== position) {\n value += '\\n';\n }\n\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpc3QtaXRlbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvbGlzdC1pdGVtLmpzP2QzZDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xudmFyIHBhZCA9IHJlcXVpcmUoJy4uL3V0aWwvcGFkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdEl0ZW07XG5cbi8qIFdoaWNoIGNoZWNrYm94IHRvIHVzZS4gKi9cbnZhciBDSEVDS0JPWF9NQVAgPSB7XG4gIHVuZGVmaW5lZDogJycsXG4gIG51bGw6ICcnLFxuICB0cnVlOiAnW3hdICcsXG4gIGZhbHNlOiAnWyBdICdcbn07XG5cbi8qIFN0cmluZ2lmeSBhIGxpc3QgaXRlbS5cbiAqXG4gKiBQcmVmaXhlcyB0aGUgY29udGVudCB3aXRoIGEgY2hlY2tlZCBjaGVja2JveCB3aGVuXG4gKiBgY2hlY2tlZDogdHJ1ZWA6XG4gKlxuICogICAgIFt4XSBmb29cbiAqXG4gKiBQcmVmaXhlcyB0aGUgY29udGVudCB3aXRoIGFuIHVuY2hlY2tlZCBjaGVja2JveCB3aGVuXG4gKiBgY2hlY2tlZDogZmFsc2VgOlxuICpcbiAqICAgICBbIF0gZm9vXG4gKi9cbmZ1bmN0aW9uIGxpc3RJdGVtKG5vZGUsIHBhcmVudCwgcG9zaXRpb24sIGJ1bGxldCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzdHlsZSA9IHNlbGYub3B0aW9ucy5saXN0SXRlbUluZGVudDtcbiAgdmFyIGxvb3NlID0gbm9kZS5sb29zZTtcbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgdmFyIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgaW5kZW50O1xuICB2YXIgc3BhY2luZztcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhbHVlc1tpbmRleF0gPSBzZWxmLnZpc2l0KGNoaWxkcmVuW2luZGV4XSwgbm9kZSk7XG4gIH1cblxuICB2YWx1ZSA9IENIRUNLQk9YX01BUFtub2RlLmNoZWNrZWRdICsgdmFsdWVzLmpvaW4obG9vc2UgPyAnXFxuXFxuJyA6ICdcXG4nKTtcblxuICBpZiAoc3R5bGUgPT09ICcxJyB8fCAoc3R5bGUgPT09ICdtaXhlZCcgJiYgdmFsdWUuaW5kZXhPZignXFxuJykgPT09IC0xKSkge1xuICAgIGluZGVudCA9IGJ1bGxldC5sZW5ndGggKyAxO1xuICAgIHNwYWNpbmcgPSAnICc7XG4gIH0gZWxzZSB7XG4gICAgaW5kZW50ID0gTWF0aC5jZWlsKChidWxsZXQubGVuZ3RoICsgMSkgLyA0KSAqIDQ7XG4gICAgc3BhY2luZyA9IHJlcGVhdCgnICcsIGluZGVudCAtIGJ1bGxldC5sZW5ndGgpO1xuICB9XG5cbiAgdmFsdWUgPSBidWxsZXQgKyBzcGFjaW5nICsgcGFkKHZhbHVlLCBpbmRlbnQgLyA0KS5zbGljZShpbmRlbnQpO1xuXG4gIGlmIChsb29zZSAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSAhPT0gcG9zaXRpb24pIHtcbiAgICB2YWx1ZSArPSAnXFxuJztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/list-item.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/list.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/list.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = list;\n/* Which method to use based on `list.ordered`. */\n\nvar ORDERED_MAP = {\n \"true\": 'visitOrderedItems',\n \"false\": 'visitUnorderedItems'\n};\n\nfunction list(node) {\n return this[ORDERED_MAP[node.ordered]](node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL2xpc3QuanM/MTMzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdDtcblxuLyogV2hpY2ggbWV0aG9kIHRvIHVzZSBiYXNlZCBvbiBgbGlzdC5vcmRlcmVkYC4gKi9cbnZhciBPUkRFUkVEX01BUCA9IHtcbiAgdHJ1ZTogJ3Zpc2l0T3JkZXJlZEl0ZW1zJyxcbiAgZmFsc2U6ICd2aXNpdFVub3JkZXJlZEl0ZW1zJ1xufTtcblxuZnVuY3Rpb24gbGlzdChub2RlKSB7XG4gIHJldHVybiB0aGlzW09SREVSRURfTUFQW25vZGUub3JkZXJlZF1dKG5vZGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/list.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/paragraph.js": -/*!******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/paragraph.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = paragraph;\n\nfunction paragraph(node) {\n return this.all(node).join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3BhcmFncmFwaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvcGFyYWdyYXBoLmpzP2M1ODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFncmFwaDtcblxuZnVuY3Rpb24gcGFyYWdyYXBoKG5vZGUpIHtcbiAgcmV0dXJuIHRoaXMuYWxsKG5vZGUpLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/paragraph.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/root.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/root.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = root;\n/* Stringify a root.\n * Adds a final newline to ensure valid POSIX files. */\n\nfunction root(node) {\n return this.block(node) + '\\n';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3Jvb3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3Jvb3QuanM/NTNhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcblxuLyogU3RyaW5naWZ5IGEgcm9vdC5cbiAqIEFkZHMgYSBmaW5hbCBuZXdsaW5lIHRvIGVuc3VyZSB2YWxpZCBQT1NJWCBmaWxlcy4gKi9cbmZ1bmN0aW9uIHJvb3Qobm9kZSkge1xuICByZXR1cm4gdGhpcy5ibG9jayhub2RlKSArICdcXG4nO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/root.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/strong.js": -/*!***************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/strong.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = strong;\n/* Stringify a `strong`.\n *\n * The marker used is configurable by `strong`, which\n * defaults to an asterisk (`'*'`) but also accepts an\n * underscore (`'_'`):\n *\n * __foo__\n */\n\nfunction strong(node) {\n var marker = repeat(this.options.strong, 2);\n return marker + this.all(node).join('') + marker;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3N0cm9uZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvdmlzaXRvcnMvc3Ryb25nLmpzPzVmZTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cm9uZztcblxuLyogU3RyaW5naWZ5IGEgYHN0cm9uZ2AuXG4gKlxuICogVGhlIG1hcmtlciB1c2VkIGlzIGNvbmZpZ3VyYWJsZSBieSBgc3Ryb25nYCwgd2hpY2hcbiAqIGRlZmF1bHRzIHRvIGFuIGFzdGVyaXNrIChgJyonYCkgYnV0IGFsc28gYWNjZXB0cyBhblxuICogdW5kZXJzY29yZSAoYCdfJ2ApOlxuICpcbiAqICAgICBfX2Zvb19fXG4gKi9cbmZ1bmN0aW9uIHN0cm9uZyhub2RlKSB7XG4gIHZhciBtYXJrZXIgPSByZXBlYXQodGhpcy5vcHRpb25zLnN0cm9uZywgMik7XG4gIHJldHVybiBtYXJrZXIgKyB0aGlzLmFsbChub2RlKS5qb2luKCcnKSArIG1hcmtlcjtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/strong.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/table-cell.js": -/*!*******************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/table-cell.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = tableCell;\n\nfunction tableCell(node) {\n return this.all(node).join('');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RhYmxlLWNlbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RhYmxlLWNlbGwuanM/MTBjNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gdGFibGVDZWxsO1xuXG5mdW5jdGlvbiB0YWJsZUNlbGwobm9kZSkge1xuICByZXR1cm4gdGhpcy5hbGwobm9kZSkuam9pbignJyk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/table-cell.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/table.js": -/*!**************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/table.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar markdownTable = __webpack_require__(/*! markdown-table */ \"../node_modules/markdown-table/index.js\");\n\nmodule.exports = table;\n/* Stringify table.\n *\n * Creates a fenced table by default, but not in\n * `looseTable: true` mode:\n *\n * Foo | Bar\n * :-: | ---\n * Baz | Qux\n *\n * NOTE: Be careful with `looseTable: true` mode, as a\n * loose table inside an indented code block on GitHub\n * renders as an actual table!\n *\n * Creates a spaced table by default, but not in\n * `spacedTable: false`:\n *\n * |Foo|Bar|\n * |:-:|---|\n * |Baz|Qux|\n */\n\nfunction table(node) {\n var self = this;\n var options = self.options;\n var loose = options.looseTable;\n var spaced = options.spacedTable;\n var pad = options.paddedTable;\n var stringLength = options.stringLength;\n var rows = node.children;\n var index = rows.length;\n var exit = self.enterTable();\n var result = [];\n var start;\n var end;\n\n while (index--) {\n result[index] = self.all(rows[index]);\n }\n\n exit();\n\n if (loose) {\n start = '';\n end = '';\n } else if (spaced) {\n start = '| ';\n end = ' |';\n } else {\n start = '|';\n end = '|';\n }\n\n return markdownTable(result, {\n align: node.align,\n pad: pad,\n start: start,\n end: end,\n stringLength: stringLength,\n delimiter: spaced ? ' | ' : '|'\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy90YWJsZS5qcz9jYTAwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG1hcmtkb3duVGFibGUgPSByZXF1aXJlKCdtYXJrZG93bi10YWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRhYmxlO1xuXG4vKiBTdHJpbmdpZnkgdGFibGUuXG4gKlxuICogQ3JlYXRlcyBhIGZlbmNlZCB0YWJsZSBieSBkZWZhdWx0LCBidXQgbm90IGluXG4gKiBgbG9vc2VUYWJsZTogdHJ1ZWAgbW9kZTpcbiAqXG4gKiAgICAgRm9vIHwgQmFyXG4gKiAgICAgOi06IHwgLS0tXG4gKiAgICAgQmF6IHwgUXV4XG4gKlxuICogTk9URTogQmUgY2FyZWZ1bCB3aXRoIGBsb29zZVRhYmxlOiB0cnVlYCBtb2RlLCBhcyBhXG4gKiBsb29zZSB0YWJsZSBpbnNpZGUgYW4gaW5kZW50ZWQgY29kZSBibG9jayBvbiBHaXRIdWJcbiAqIHJlbmRlcnMgYXMgYW4gYWN0dWFsIHRhYmxlIVxuICpcbiAqIENyZWF0ZXMgYSBzcGFjZWQgdGFibGUgYnkgZGVmYXVsdCwgYnV0IG5vdCBpblxuICogYHNwYWNlZFRhYmxlOiBmYWxzZWA6XG4gKlxuICogICAgIHxGb298QmFyfFxuICogICAgIHw6LTp8LS0tfFxuICogICAgIHxCYXp8UXV4fFxuICovXG5mdW5jdGlvbiB0YWJsZShub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBzZWxmLm9wdGlvbnM7XG4gIHZhciBsb29zZSA9IG9wdGlvbnMubG9vc2VUYWJsZTtcbiAgdmFyIHNwYWNlZCA9IG9wdGlvbnMuc3BhY2VkVGFibGU7XG4gIHZhciBwYWQgPSBvcHRpb25zLnBhZGRlZFRhYmxlO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gb3B0aW9ucy5zdHJpbmdMZW5ndGg7XG4gIHZhciByb3dzID0gbm9kZS5jaGlsZHJlbjtcbiAgdmFyIGluZGV4ID0gcm93cy5sZW5ndGg7XG4gIHZhciBleGl0ID0gc2VsZi5lbnRlclRhYmxlKCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIHN0YXJ0O1xuICB2YXIgZW5kO1xuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IHNlbGYuYWxsKHJvd3NbaW5kZXhdKTtcbiAgfVxuXG4gIGV4aXQoKTtcblxuICBpZiAobG9vc2UpIHtcbiAgICBzdGFydCA9ICcnO1xuICAgIGVuZCA9ICcnO1xuICB9IGVsc2UgaWYgKHNwYWNlZCkge1xuICAgIHN0YXJ0ID0gJ3wgJztcbiAgICBlbmQgPSAnIHwnO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gJ3wnO1xuICAgIGVuZCA9ICd8JztcbiAgfVxuXG4gIHJldHVybiBtYXJrZG93blRhYmxlKHJlc3VsdCwge1xuICAgIGFsaWduOiBub2RlLmFsaWduLFxuICAgIHBhZDogcGFkLFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICBzdHJpbmdMZW5ndGg6IHN0cmluZ0xlbmd0aCxcbiAgICBkZWxpbWl0ZXI6IHNwYWNlZCA/ICcgfCAnIDogJ3wnXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/table.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/text.js": -/*!*************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/text.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = text;\n/* Stringify text.\n * Supports named entities in `settings.encode: true` mode:\n *\n * AT&T\n *\n * Supports numbered entities in `settings.encode: numbers`\n * mode:\n *\n * AT&T\n */\n\nfunction text(node, parent) {\n return this.encode(this.escape(node.value, node, parent), node);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RleHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RleHQuanM/NGU0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gdGV4dDtcblxuLyogU3RyaW5naWZ5IHRleHQuXG4gKiBTdXBwb3J0cyBuYW1lZCBlbnRpdGllcyBpbiBgc2V0dGluZ3MuZW5jb2RlOiB0cnVlYCBtb2RlOlxuICpcbiAqICAgICBBVCZhbXA7VFxuICpcbiAqIFN1cHBvcnRzIG51bWJlcmVkIGVudGl0aWVzIGluIGBzZXR0aW5ncy5lbmNvZGU6IG51bWJlcnNgXG4gKiBtb2RlOlxuICpcbiAqICAgICBBVCYjeDI2O1RcbiAqL1xuZnVuY3Rpb24gdGV4dChub2RlLCBwYXJlbnQpIHtcbiAgcmV0dXJuIHRoaXMuZW5jb2RlKHRoaXMuZXNjYXBlKG5vZGUudmFsdWUsIG5vZGUsIHBhcmVudCksIG5vZGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/text.js\n"); - -/***/ }), - -/***/ "../node_modules/remark-stringify/lib/visitors/thematic-break.js": -/*!***********************************************************************!*\ - !*** ../node_modules/remark-stringify/lib/visitors/thematic-break.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar repeat = __webpack_require__(/*! repeat-string */ \"../node_modules/repeat-string/index.js\");\n\nmodule.exports = thematic;\n/* Stringify a `thematic-break`.\n * The character used is configurable through `rule`: (`'_'`)\n *\n * ___\n *\n * The number of repititions is defined through\n * `ruleRepetition`: (`6`)\n *\n * ******\n *\n * Whether spaces delimit each character, is configured\n * through `ruleSpaces`: (`true`)\n *\n * * * *\n */\n\nfunction thematic() {\n var options = this.options;\n var rule = repeat(options.rule, options.ruleRepetition);\n return options.ruleSpaces ? rule.split('').join(' ') : rule;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL3Zpc2l0b3JzL3RoZW1hdGljLWJyZWFrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi92aXNpdG9ycy90aGVtYXRpYy1icmVhay5qcz82Zjk1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0aGVtYXRpYztcblxuLyogU3RyaW5naWZ5IGEgYHRoZW1hdGljLWJyZWFrYC5cbiAqIFRoZSBjaGFyYWN0ZXIgdXNlZCBpcyBjb25maWd1cmFibGUgdGhyb3VnaCBgcnVsZWA6IChgJ18nYClcbiAqXG4gKiAgICAgX19fXG4gKlxuICogVGhlIG51bWJlciBvZiByZXBpdGl0aW9ucyBpcyBkZWZpbmVkIHRocm91Z2hcbiAqIGBydWxlUmVwZXRpdGlvbmA6IChgNmApXG4gKlxuICogICAgICoqKioqKlxuICpcbiAqIFdoZXRoZXIgc3BhY2VzIGRlbGltaXQgZWFjaCBjaGFyYWN0ZXIsIGlzIGNvbmZpZ3VyZWRcbiAqIHRocm91Z2ggYHJ1bGVTcGFjZXNgOiAoYHRydWVgKVxuICpcbiAqICAgICAqICogKlxuICovXG5mdW5jdGlvbiB0aGVtYXRpYygpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBydWxlID0gcmVwZWF0KG9wdGlvbnMucnVsZSwgb3B0aW9ucy5ydWxlUmVwZXRpdGlvbik7XG4gIHJldHVybiBvcHRpb25zLnJ1bGVTcGFjZXMgPyBydWxlLnNwbGl0KCcnKS5qb2luKCcgJykgOiBydWxlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark-stringify/lib/visitors/thematic-break.js\n"); - -/***/ }), - -/***/ "../node_modules/remark/index.js": -/*!***************************************!*\ - !*** ../node_modules/remark/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar unified = __webpack_require__(/*! unified */ \"../node_modules/unified/index.js\");\n\nvar parse = __webpack_require__(/*! remark-parse */ \"../node_modules/remark-parse/index.js\");\n\nvar stringify = __webpack_require__(/*! remark-stringify */ \"../node_modules/remark-stringify/index.js\");\n\nmodule.exports = unified().use(parse).use(stringify).freeze();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlbWFyay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVtYXJrL2luZGV4LmpzP2M5OGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5pZmllZCA9IHJlcXVpcmUoJ3VuaWZpZWQnKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJ3JlbWFyay1wYXJzZScpO1xudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJ3JlbWFyay1zdHJpbmdpZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlmaWVkKCkudXNlKHBhcnNlKS51c2Uoc3RyaW5naWZ5KS5mcmVlemUoKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/remark/index.js\n"); - -/***/ }), - -/***/ "../node_modules/repeat-string/index.js": -/*!**********************************************!*\ - !*** ../node_modules/repeat-string/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/*!\n * repeat-string <https://github.com/jonschlinkert/repeat-string>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n/**\n * Results cache\n */\n\nvar res = '';\nvar cache;\n/**\n * Expose `repeat`\n */\n\nmodule.exports = repeat;\n/**\n * Repeat the given `string` the specified `number`\n * of times.\n *\n * **Example:**\n *\n * ```js\n * var repeat = require('repeat-string');\n * repeat('A', 5);\n * //=> AAAAA\n * ```\n *\n * @param {String} `string` The string to repeat\n * @param {Number} `number` The number of times to repeat the string\n * @return {String} Repeated string\n * @api public\n */\n\nfunction repeat(str, num) {\n if (typeof str !== 'string') {\n throw new TypeError('expected a string');\n } // cover common, quick use cases\n\n\n if (num === 1) return str;\n if (num === 2) return str + str;\n var max = str.length * num;\n\n if (cache !== str || typeof cache === 'undefined') {\n cache = str;\n res = '';\n } else if (res.length >= max) {\n return res.substr(0, max);\n }\n\n while (max > res.length && num > 1) {\n if (num & 1) {\n res += str;\n }\n\n num >>= 1;\n str += str;\n }\n\n res += str;\n res = res.substr(0, max);\n return res;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlcGVhdC1zdHJpbmcvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlcGVhdC1zdHJpbmcvaW5kZXguanM/NDU5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIHJlcGVhdC1zdHJpbmcgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3JlcGVhdC1zdHJpbmc+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZXN1bHRzIGNhY2hlXG4gKi9cblxudmFyIHJlcyA9ICcnO1xudmFyIGNhY2hlO1xuXG4vKipcbiAqIEV4cG9zZSBgcmVwZWF0YFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVwZWF0O1xuXG4vKipcbiAqIFJlcGVhdCB0aGUgZ2l2ZW4gYHN0cmluZ2AgdGhlIHNwZWNpZmllZCBgbnVtYmVyYFxuICogb2YgdGltZXMuXG4gKlxuICogKipFeGFtcGxlOioqXG4gKlxuICogYGBganNcbiAqIHZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG4gKiByZXBlYXQoJ0EnLCA1KTtcbiAqIC8vPT4gQUFBQUFcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyaW5nYCBUaGUgc3RyaW5nIHRvIHJlcGVhdFxuICogQHBhcmFtIHtOdW1iZXJ9IGBudW1iZXJgIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge1N0cmluZ30gUmVwZWF0ZWQgc3RyaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHJlcGVhdChzdHIsIG51bSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgLy8gY292ZXIgY29tbW9uLCBxdWljayB1c2UgY2FzZXNcbiAgaWYgKG51bSA9PT0gMSkgcmV0dXJuIHN0cjtcbiAgaWYgKG51bSA9PT0gMikgcmV0dXJuIHN0ciArIHN0cjtcblxuICB2YXIgbWF4ID0gc3RyLmxlbmd0aCAqIG51bTtcbiAgaWYgKGNhY2hlICE9PSBzdHIgfHwgdHlwZW9mIGNhY2hlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNhY2hlID0gc3RyO1xuICAgIHJlcyA9ICcnO1xuICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPj0gbWF4KSB7XG4gICAgcmV0dXJuIHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgfVxuXG4gIHdoaWxlIChtYXggPiByZXMubGVuZ3RoICYmIG51bSA+IDEpIHtcbiAgICBpZiAobnVtICYgMSkge1xuICAgICAgcmVzICs9IHN0cjtcbiAgICB9XG5cbiAgICBudW0gPj49IDE7XG4gICAgc3RyICs9IHN0cjtcbiAgfVxuXG4gIHJlcyArPSBzdHI7XG4gIHJlcyA9IHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgcmV0dXJuIHJlcztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztBQU9BO0FBRUE7Ozs7QUFJQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/repeat-string/index.js\n"); - -/***/ }), - -/***/ "../node_modules/replace-ext/index.js": -/*!********************************************!*\ - !*** ../node_modules/replace-ext/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar path = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n\nfunction replaceExt(npath, ext) {\n if (typeof npath !== 'string') {\n return npath;\n }\n\n if (npath.length === 0) {\n return npath;\n }\n\n var nFileName = path.basename(npath, path.extname(npath)) + ext;\n return path.join(path.dirname(npath), nFileName);\n}\n\nmodule.exports = replaceExt;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3JlcGxhY2UtZXh0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZXBsYWNlLWV4dC9pbmRleC5qcz9hM2U4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIHJlcGxhY2VFeHQobnBhdGgsIGV4dCkge1xuICBpZiAodHlwZW9mIG5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBucGF0aDtcbiAgfVxuXG4gIGlmIChucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnBhdGg7XG4gIH1cblxuICB2YXIgbkZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShucGF0aCwgcGF0aC5leHRuYW1lKG5wYXRoKSkgKyBleHQ7XG4gIHJldHVybiBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG5wYXRoKSwgbkZpbGVOYW1lKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlRXh0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/replace-ext/index.js\n"); - -/***/ }), - -/***/ "../node_modules/reselect/lib/index.js": -/*!*********************************************!*\ - !*** ../node_modules/reselect/lib/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\n\nfunction defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n var lastArgs = null;\n var lastResult = null; // we reference arguments instead of spreading them for performance reasons\n\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return _typeof(dep);\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = defaultMemoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n return memoizedResultFunc.apply(null, params);\n });\n selector.resultFunc = resultFunc;\n\n selector.recomputations = function () {\n return recomputations;\n };\n\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n\n return selector;\n };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (_typeof(selectors) !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + _typeof(selectors)));\n }\n\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Jlc2VsZWN0L2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzP2I0ZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0TWVtb2l6ZSA9IGRlZmF1bHRNZW1vaXplO1xuZXhwb3J0cy5jcmVhdGVTZWxlY3RvckNyZWF0b3IgPSBjcmVhdGVTZWxlY3RvckNyZWF0b3I7XG5leHBvcnRzLmNyZWF0ZVN0cnVjdHVyZWRTZWxlY3RvciA9IGNyZWF0ZVN0cnVjdHVyZWRTZWxlY3RvcjtcbmZ1bmN0aW9uIGRlZmF1bHRFcXVhbGl0eUNoZWNrKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIGFyZUFyZ3VtZW50c1NoYWxsb3dseUVxdWFsKGVxdWFsaXR5Q2hlY2ssIHByZXYsIG5leHQpIHtcbiAgaWYgKHByZXYgPT09IG51bGwgfHwgbmV4dCA9PT0gbnVsbCB8fCBwcmV2Lmxlbmd0aCAhPT0gbmV4dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEbyB0aGlzIGluIGEgZm9yIGxvb3AgKGFuZCBub3QgYSBgZm9yRWFjaGAgb3IgYW4gYGV2ZXJ5YCkgc28gd2UgY2FuIGRldGVybWluZSBlcXVhbGl0eSBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuICB2YXIgbGVuZ3RoID0gcHJldi5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWVxdWFsaXR5Q2hlY2socHJldltpXSwgbmV4dFtpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdE1lbW9pemUoZnVuYykge1xuICB2YXIgZXF1YWxpdHlDaGVjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZGVmYXVsdEVxdWFsaXR5Q2hlY2s7XG5cbiAgdmFyIGxhc3RBcmdzID0gbnVsbDtcbiAgdmFyIGxhc3RSZXN1bHQgPSBudWxsO1xuICAvLyB3ZSByZWZlcmVuY2UgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIHRoZW0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWFyZUFyZ3VtZW50c1NoYWxsb3dseUVxdWFsKGVxdWFsaXR5Q2hlY2ssIGxhc3RBcmdzLCBhcmd1bWVudHMpKSB7XG4gICAgICAvLyBhcHBseSBhcmd1bWVudHMgaW5zdGVhZCBvZiBzcHJlYWRpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgbGFzdFJlc3VsdCA9IGZ1bmMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGZ1bmNzKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBBcnJheS5pc0FycmF5KGZ1bmNzWzBdKSA/IGZ1bmNzWzBdIDogZnVuY3M7XG5cbiAgaWYgKCFkZXBlbmRlbmNpZXMuZXZlcnkoZnVuY3Rpb24gKGRlcCkge1xuICAgIHJldHVybiB0eXBlb2YgZGVwID09PSAnZnVuY3Rpb24nO1xuICB9KSkge1xuICAgIHZhciBkZXBlbmRlbmN5VHlwZXMgPSBkZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIHJldHVybiB0eXBlb2YgZGVwO1xuICAgIH0pLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RvciBjcmVhdG9ycyBleHBlY3QgYWxsIGlucHV0LXNlbGVjdG9ycyB0byBiZSBmdW5jdGlvbnMsICcgKyAoJ2luc3RlYWQgcmVjZWl2ZWQgdGhlIGZvbGxvd2luZyB0eXBlczogWycgKyBkZXBlbmRlbmN5VHlwZXMgKyAnXScpKTtcbiAgfVxuXG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcihtZW1vaXplKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtZW1vaXplT3B0aW9ucyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtZW1vaXplT3B0aW9uc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgZnVuY3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgcmVjb21wdXRhdGlvbnMgPSAwO1xuICAgIHZhciByZXN1bHRGdW5jID0gZnVuY3MucG9wKCk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IGdldERlcGVuZGVuY2llcyhmdW5jcyk7XG5cbiAgICB2YXIgbWVtb2l6ZWRSZXN1bHRGdW5jID0gbWVtb2l6ZS5hcHBseSh1bmRlZmluZWQsIFtmdW5jdGlvbiAoKSB7XG4gICAgICByZWNvbXB1dGF0aW9ucysrO1xuICAgICAgLy8gYXBwbHkgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIHJldHVybiByZXN1bHRGdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfV0uY29uY2F0KG1lbW9pemVPcHRpb25zKSk7XG5cbiAgICAvLyBJZiBhIHNlbGVjdG9yIGlzIGNhbGxlZCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cyB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIG91ciBkZXBlbmRlbmNpZXMgYWdhaW4uXG4gICAgdmFyIHNlbGVjdG9yID0gZGVmYXVsdE1lbW9pemUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgICAgdmFyIGxlbmd0aCA9IGRlcGVuZGVuY2llcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gYXBwbHkgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIGFuZCBtdXRhdGUgYSBsb2NhbCBsaXN0IG9mIHBhcmFtcyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICAgIHBhcmFtcy5wdXNoKGRlcGVuZGVuY2llc1tpXS5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIHJldHVybiBtZW1vaXplZFJlc3VsdEZ1bmMuYXBwbHkobnVsbCwgcGFyYW1zKTtcbiAgICB9KTtcblxuICAgIHNlbGVjdG9yLnJlc3VsdEZ1bmMgPSByZXN1bHRGdW5jO1xuICAgIHNlbGVjdG9yLnJlY29tcHV0YXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlY29tcHV0YXRpb25zO1xuICAgIH07XG4gICAgc2VsZWN0b3IucmVzZXRSZWNvbXB1dGF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZWNvbXB1dGF0aW9ucyA9IDA7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZWN0b3I7XG4gIH07XG59XG5cbnZhciBjcmVhdGVTZWxlY3RvciA9IGV4cG9ydHMuY3JlYXRlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvckNyZWF0b3IoZGVmYXVsdE1lbW9pemUpO1xuXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3Ioc2VsZWN0b3JzKSB7XG4gIHZhciBzZWxlY3RvckNyZWF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGNyZWF0ZVNlbGVjdG9yO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3JzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yIGV4cGVjdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0ICcgKyAoJ3doZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzZWxlY3RvciwgaW5zdGVhZCByZWNlaXZlZCBhICcgKyB0eXBlb2Ygc2VsZWN0b3JzKSk7XG4gIH1cbiAgdmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RvcnMpO1xuICByZXR1cm4gc2VsZWN0b3JDcmVhdG9yKG9iamVjdEtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gc2VsZWN0b3JzW2tleV07XG4gIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCB2YWx1ZXMgPSBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgdmFsdWVzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGNvbXBvc2l0aW9uLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGNvbXBvc2l0aW9uW29iamVjdEtleXNbaW5kZXhdXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGNvbXBvc2l0aW9uO1xuICAgIH0sIHt9KTtcbiAgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQVZBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQXBDQTtBQXNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBUEE7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/reselect/lib/index.js\n"); - -/***/ }), - -/***/ "../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js": -/*!**************************************************************************!*\ - !*** ../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js ***! - \**************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\n\n/* eslint-disable require-jsdoc, valid-jsdoc */\nvar MapShim = function () {\n if (typeof Map !== 'undefined') {\n return Map;\n }\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\n\n\n function getIndex(arr, key) {\n var result = -1;\n arr.some(function (entry, index) {\n if (entry[0] === key) {\n result = index;\n return true;\n }\n\n return false;\n });\n return result;\n }\n\n return (\n /** @class */\n function () {\n function class_1() {\n this.__entries__ = [];\n }\n\n Object.defineProperty(class_1.prototype, \"size\", {\n /**\r\n * @returns {boolean}\r\n */\n get: function get() {\n return this.__entries__.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\n\n class_1.prototype.get = function (key) {\n var index = getIndex(this.__entries__, key);\n var entry = this.__entries__[index];\n return entry && entry[1];\n };\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.set = function (key, value) {\n var index = getIndex(this.__entries__, key);\n\n if (~index) {\n this.__entries__[index][1] = value;\n } else {\n this.__entries__.push([key, value]);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype[\"delete\"] = function (key) {\n var entries = this.__entries__;\n var index = getIndex(entries, key);\n\n if (~index) {\n entries.splice(index, 1);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.has = function (key) {\n return !!~getIndex(this.__entries__, key);\n };\n /**\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.clear = function () {\n this.__entries__.splice(0);\n };\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.forEach = function (callback, ctx) {\n if (ctx === void 0) {\n ctx = null;\n }\n\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\n var entry = _a[_i];\n callback.call(ctx, entry[1], entry[0]);\n }\n };\n\n return class_1;\n }()\n );\n}();\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\n\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document; // Returns global object of a current environment.\n\nvar global$1 = function () {\n if (typeof global !== 'undefined' && global.Math === Math) {\n return global;\n }\n\n if (typeof self !== 'undefined' && self.Math === Math) {\n return self;\n }\n\n if (typeof window !== 'undefined' && window.Math === Math) {\n return window;\n } // eslint-disable-next-line no-new-func\n\n\n return Function('return this')();\n}();\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\n\n\nvar requestAnimationFrame$1 = function () {\n if (typeof requestAnimationFrame === 'function') {\n // It's required to use a bounded function because IE sometimes throws\n // an \"Invalid calling object\" error if rAF is invoked without the global\n // object on the left hand side.\n return requestAnimationFrame.bind(global$1);\n }\n\n return function (callback) {\n return setTimeout(function () {\n return callback(Date.now());\n }, 1000 / 60);\n };\n}(); // Defines minimum timeout before adding a trailing call.\n\n\nvar trailingTimeout = 2;\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\n\nfunction throttle(callback, delay) {\n var leadingCall = false,\n trailingCall = false,\n lastCallTime = 0;\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\n\n function resolvePending() {\n if (leadingCall) {\n leadingCall = false;\n callback();\n }\n\n if (trailingCall) {\n proxy();\n }\n }\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\n\n\n function timeoutCallback() {\n requestAnimationFrame$1(resolvePending);\n }\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\n\n\n function proxy() {\n var timeStamp = Date.now();\n\n if (leadingCall) {\n // Reject immediately following calls.\n if (timeStamp - lastCallTime < trailingTimeout) {\n return;\n } // Schedule new call to be in invoked when the pending one is resolved.\n // This is important for \"transitions\" which never actually start\n // immediately so there is a chance that we might miss one if change\n // happens amids the pending invocation.\n\n\n trailingCall = true;\n } else {\n leadingCall = true;\n trailingCall = false;\n setTimeout(timeoutCallback, delay);\n }\n\n lastCallTime = timeStamp;\n }\n\n return proxy;\n} // Minimum delay before invoking the update of observers.\n\n\nvar REFRESH_DELAY = 20; // A list of substrings of CSS properties used to find transition events that\n// might affect dimensions of observed elements.\n\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight']; // Check if MutationObserver is available.\n\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\n\nvar ResizeObserverController =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\n function ResizeObserverController() {\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\n this.connected_ = false;\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\n\n this.mutationEventsAdded_ = false;\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\n\n this.mutationsObserver_ = null;\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\n\n this.observers_ = [];\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\n }\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.addObserver = function (observer) {\n if (!~this.observers_.indexOf(observer)) {\n this.observers_.push(observer);\n } // Add listeners if they haven't been added yet.\n\n\n if (!this.connected_) {\n this.connect_();\n }\n };\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.removeObserver = function (observer) {\n var observers = this.observers_;\n var index = observers.indexOf(observer); // Remove observer if it's present in registry.\n\n if (~index) {\n observers.splice(index, 1);\n } // Remove listeners if controller has no connected observers.\n\n\n if (!observers.length && this.connected_) {\n this.disconnect_();\n }\n };\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.refresh = function () {\n var changesDetected = this.updateObservers_(); // Continue running updates if changes have been detected as there might\n // be future ones caused by CSS transitions.\n\n if (changesDetected) {\n this.refresh();\n }\n };\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\n\n\n ResizeObserverController.prototype.updateObservers_ = function () {\n // Collect observers that have active observations.\n var activeObservers = this.observers_.filter(function (observer) {\n return observer.gatherActive(), observer.hasActive();\n }); // Deliver notifications in a separate cycle in order to avoid any\n // collisions between observers, e.g. when multiple instances of\n // ResizeObserver are tracking the same element and the callback of one\n // of them changes content dimensions of the observed target. Sometimes\n // this may result in notifications being blocked for the rest of observers.\n\n activeObservers.forEach(function (observer) {\n return observer.broadcastActive();\n });\n return activeObservers.length > 0;\n };\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.connect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already added.\n if (!isBrowser || this.connected_) {\n return;\n } // Subscription to the \"Transitionend\" event is used as a workaround for\n // delayed transitions. This way it's possible to capture at least the\n // final state of an element.\n\n\n document.addEventListener('transitionend', this.onTransitionEnd_);\n window.addEventListener('resize', this.refresh);\n\n if (mutationObserverSupported) {\n this.mutationsObserver_ = new MutationObserver(this.refresh);\n this.mutationsObserver_.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n } else {\n document.addEventListener('DOMSubtreeModified', this.refresh);\n this.mutationEventsAdded_ = true;\n }\n\n this.connected_ = true;\n };\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.disconnect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already removed.\n if (!isBrowser || !this.connected_) {\n return;\n }\n\n document.removeEventListener('transitionend', this.onTransitionEnd_);\n window.removeEventListener('resize', this.refresh);\n\n if (this.mutationsObserver_) {\n this.mutationsObserver_.disconnect();\n }\n\n if (this.mutationEventsAdded_) {\n document.removeEventListener('DOMSubtreeModified', this.refresh);\n }\n\n this.mutationsObserver_ = null;\n this.mutationEventsAdded_ = false;\n this.connected_ = false;\n };\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\n var _b = _a.propertyName,\n propertyName = _b === void 0 ? '' : _b; // Detect whether transition may affect dimensions of an element.\n\n var isReflowProperty = transitionKeys.some(function (key) {\n return !!~propertyName.indexOf(key);\n });\n\n if (isReflowProperty) {\n this.refresh();\n }\n };\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.getInstance = function () {\n if (!this.instance_) {\n this.instance_ = new ResizeObserverController();\n }\n\n return this.instance_;\n };\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.instance_ = null;\n return ResizeObserverController;\n}();\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\n\n\nvar defineConfigurable = function defineConfigurable(target, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var key = _a[_i];\n Object.defineProperty(target, key, {\n value: props[key],\n enumerable: false,\n writable: false,\n configurable: true\n });\n }\n\n return target;\n};\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\n\n\nvar getWindowOf = function getWindowOf(target) {\n // Assume that the element is an instance of Node, which means that it\n // has the \"ownerDocument\" property from which we can retrieve a\n // corresponding global object.\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; // Return the local global object if it's not possible extract one from\n // provided element.\n\n return ownerGlobal || global$1;\n}; // Placeholder of an empty content rectangle.\n\n\nvar emptyRect = createRectInit(0, 0, 0, 0);\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\n\nfunction toFloat(value) {\n return parseFloat(value) || 0;\n}\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\n\n\nfunction getBordersSize(styles) {\n var positions = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n positions[_i - 1] = arguments[_i];\n }\n\n return positions.reduce(function (size, position) {\n var value = styles['border-' + position + '-width'];\n return size + toFloat(value);\n }, 0);\n}\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\n\n\nfunction getPaddings(styles) {\n var positions = ['top', 'right', 'bottom', 'left'];\n var paddings = {};\n\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n var value = styles['padding-' + position];\n paddings[position] = toFloat(value);\n }\n\n return paddings;\n}\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getSVGContentRect(target) {\n var bbox = target.getBBox();\n return createRectInit(0, 0, bbox.width, bbox.height);\n}\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getHTMLElementContentRect(target) {\n // Client width & height properties can't be\n // used exclusively as they provide rounded values.\n var clientWidth = target.clientWidth,\n clientHeight = target.clientHeight; // By this condition we can catch all non-replaced inline, hidden and\n // detached elements. Though elements with width & height properties less\n // than 0.5 will be discarded as well.\n //\n // Without it we would need to implement separate methods for each of\n // those cases and it's not possible to perform a precise and performance\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\n // gives wrong results for elements with width & height less than 0.5.\n\n if (!clientWidth && !clientHeight) {\n return emptyRect;\n }\n\n var styles = getWindowOf(target).getComputedStyle(target);\n var paddings = getPaddings(styles);\n var horizPad = paddings.left + paddings.right;\n var vertPad = paddings.top + paddings.bottom; // Computed styles of width & height are being used because they are the\n // only dimensions available to JS that contain non-rounded values. It could\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\n // affected by CSS transformations let alone paddings, borders and scroll bars.\n\n var width = toFloat(styles.width),\n height = toFloat(styles.height); // Width & height include paddings and borders when the 'border-box' box\n // model is applied (except for IE).\n\n if (styles.boxSizing === 'border-box') {\n // Following conditions are required to handle Internet Explorer which\n // doesn't include paddings and borders to computed CSS dimensions.\n //\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\n // properties then it's either IE, and thus we don't need to subtract\n // anything, or an element merely doesn't have paddings/borders styles.\n if (Math.round(width + horizPad) !== clientWidth) {\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\n }\n\n if (Math.round(height + vertPad) !== clientHeight) {\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\n }\n } // Following steps can't be applied to the document's root element as its\n // client[Width/Height] properties represent viewport area of the window.\n // Besides, it's as well not necessary as the <html> itself neither has\n // rendered scroll bars nor it can be clipped.\n\n\n if (!isDocumentElement(target)) {\n // In some browsers (only in Firefox, actually) CSS width & height\n // include scroll bars size which can be removed at this step as scroll\n // bars are the only difference between rounded dimensions + paddings\n // and \"client\" properties, though that is not always true in Chrome.\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\n var horizScrollbar = Math.round(height + vertPad) - clientHeight; // Chrome has a rather weird rounding of \"client\" properties.\n // E.g. for an element with content width of 314.2px it sometimes gives\n // the client width of 315px and for the width of 314.7px it may give\n // 314px. And it doesn't happen all the time. So just ignore this delta\n // as a non-relevant.\n\n if (Math.abs(vertScrollbar) !== 1) {\n width -= vertScrollbar;\n }\n\n if (Math.abs(horizScrollbar) !== 1) {\n height -= horizScrollbar;\n }\n }\n\n return createRectInit(paddings.left, paddings.top, width, height);\n}\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nvar isSVGGraphicsElement = function () {\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\n // interface.\n if (typeof SVGGraphicsElement !== 'undefined') {\n return function (target) {\n return target instanceof getWindowOf(target).SVGGraphicsElement;\n };\n } // If it's so, then check that element is at least an instance of the\n // SVGElement and that it has the \"getBBox\" method.\n // eslint-disable-next-line no-extra-parens\n\n\n return function (target) {\n return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === 'function';\n };\n}();\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nfunction isDocumentElement(target) {\n return target === getWindowOf(target).document.documentElement;\n}\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getContentRect(target) {\n if (!isBrowser) {\n return emptyRect;\n }\n\n if (isSVGGraphicsElement(target)) {\n return getSVGContentRect(target);\n }\n\n return getHTMLElementContentRect(target);\n}\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\n\n\nfunction createReadOnlyRect(_a) {\n var x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height; // If DOMRectReadOnly is available use it as a prototype for the rectangle.\n\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\n var rect = Object.create(Constr.prototype); // Rectangle's properties are not writable and non-enumerable.\n\n defineConfigurable(rect, {\n x: x,\n y: y,\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: height + y,\n left: x\n });\n return rect;\n}\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction createRectInit(x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\n\n\nvar ResizeObservation =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\n function ResizeObservation(target) {\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\n this.broadcastWidth = 0;\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\n\n this.broadcastHeight = 0;\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\n\n this.contentRect_ = createRectInit(0, 0, 0, 0);\n this.target = target;\n }\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObservation.prototype.isActive = function () {\n var rect = getContentRect(this.target);\n this.contentRect_ = rect;\n return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;\n };\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\n\n\n ResizeObservation.prototype.broadcastRect = function () {\n var rect = this.contentRect_;\n this.broadcastWidth = rect.width;\n this.broadcastHeight = rect.height;\n return rect;\n };\n\n return ResizeObservation;\n}();\n\nvar ResizeObserverEntry =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\n function ResizeObserverEntry(target, rectInit) {\n var contentRect = createReadOnlyRect(rectInit); // According to the specification following properties are not writable\n // and are also not enumerable in the native implementation.\n //\n // Property accessors are not being used as they'd require to define a\n // private WeakMap storage which may cause memory leaks in browsers that\n // don't support this type of collections.\n\n defineConfigurable(this, {\n target: target,\n contentRect: contentRect\n });\n }\n\n return ResizeObserverEntry;\n}();\n\nvar ResizeObserverSPI =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\n function ResizeObserverSPI(callback, controller, callbackCtx) {\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\n this.activeObservations_ = [];\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\n\n this.observations_ = new MapShim();\n\n if (typeof callback !== 'function') {\n throw new TypeError('The callback provided as parameter 1 is not a function.');\n }\n\n this.callback_ = callback;\n this.controller_ = controller;\n this.callbackCtx_ = callbackCtx;\n }\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.observe = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is already being observed.\n\n if (observations.has(target)) {\n return;\n }\n\n observations.set(target, new ResizeObservation(target));\n this.controller_.addObserver(this); // Force the update of observations.\n\n this.controller_.refresh();\n };\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.unobserve = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is not being observed.\n\n if (!observations.has(target)) {\n return;\n }\n\n observations[\"delete\"](target);\n\n if (!observations.size) {\n this.controller_.removeObserver(this);\n }\n };\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.disconnect = function () {\n this.clearActive();\n this.observations_.clear();\n this.controller_.removeObserver(this);\n };\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.gatherActive = function () {\n var _this = this;\n\n this.clearActive();\n this.observations_.forEach(function (observation) {\n if (observation.isActive()) {\n _this.activeObservations_.push(observation);\n }\n });\n };\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.broadcastActive = function () {\n // Do nothing if observer doesn't have active observations.\n if (!this.hasActive()) {\n return;\n }\n\n var ctx = this.callbackCtx_; // Create ResizeObserverEntry instance for every active observation.\n\n var entries = this.activeObservations_.map(function (observation) {\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\n });\n this.callback_.call(ctx, entries, ctx);\n this.clearActive();\n };\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.clearActive = function () {\n this.activeObservations_.splice(0);\n };\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObserverSPI.prototype.hasActive = function () {\n return this.activeObservations_.length > 0;\n };\n\n return ResizeObserverSPI;\n}(); // Registry of internal observers. If WeakMap is not available use current shim\n// for the Map collection as it has all required methods and because WeakMap\n// can't be fully polyfilled anyway.\n\n\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\n\nvar ResizeObserver =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\n function ResizeObserver(callback) {\n if (!(this instanceof ResizeObserver)) {\n throw new TypeError('Cannot call a class as a function.');\n }\n\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n }\n\n var controller = ResizeObserverController.getInstance();\n var observer = new ResizeObserverSPI(callback, controller, this);\n observers.set(this, observer);\n }\n\n return ResizeObserver;\n}(); // Expose public methods of ResizeObserver.\n\n\n['observe', 'unobserve', 'disconnect'].forEach(function (method) {\n ResizeObserver.prototype[method] = function () {\n var _a;\n\n return (_a = observers.get(this))[method].apply(_a, arguments);\n };\n});\n\nvar index = function () {\n // Export existing implementation if available.\n if (typeof global$1.ResizeObserver !== 'undefined') {\n return global$1.ResizeObserver;\n }\n\n return ResizeObserver;\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Jlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbC9kaXN0L1Jlc2l6ZU9ic2VydmVyLmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwvZGlzdC9SZXNpemVPYnNlcnZlci5lcy5qcz84OTdjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc2hpbXMgdGhhdCBwcm92aWRlIG1pbmltYWwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgRVM2IGNvbGxlY3Rpb25zLlxyXG4gKlxyXG4gKiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBtZWFudCB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIFJlc2l6ZU9ic2VydmVyXHJcbiAqIG1vZHVsZXMgYXMgdGhleSBjb3ZlciBvbmx5IGEgbGltaXRlZCByYW5nZSBvZiB1c2UgY2FzZXMuXHJcbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWpzZG9jLCB2YWxpZC1qc2RvYyAqL1xyXG52YXIgTWFwU2hpbSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gTWFwO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGluZGV4IGluIHByb3ZpZGVkIGFycmF5IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5Pn0gYXJyXHJcbiAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICogQHJldHVybnMge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXgoYXJyLCBrZXkpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gLTE7XHJcbiAgICAgICAgYXJyLnNvbWUoZnVuY3Rpb24gKGVudHJ5LCBpbmRleCkge1xyXG4gICAgICAgICAgICBpZiAoZW50cnlbMF0gPT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xhc3NfMS5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19lbnRyaWVzX18ubGVuZ3RoO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXgodGhpcy5fX2VudHJpZXNfXywga2V5KTtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5fX2VudHJpZXNfX1tpbmRleF07XHJcbiAgICAgICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeVsxXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX19baW5kZXhdWzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9fZW50cmllc19fLnB1c2goW2tleSwgdmFsdWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5fX2VudHJpZXNfXztcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXgoZW50cmllcywga2V5KTtcclxuICAgICAgICAgICAgaWYgKH5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhfmdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5zcGxpY2UoMCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW2N0eD1udWxsXVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xyXG4gICAgICAgICAgICBpZiAoY3R4ID09PSB2b2lkIDApIHsgY3R4ID0gbnVsbDsgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fX2VudHJpZXNfXzsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IF9hW19pXTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY3R4LCBlbnRyeVsxXSwgZW50cnlbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgIH0oKSk7XHJcbn0pKCk7XG5cbi8qKlxyXG4gKiBEZXRlY3RzIHdoZXRoZXIgd2luZG93IGFuZCBkb2N1bWVudCBvYmplY3RzIGFyZSBhdmFpbGFibGUgaW4gY3VycmVudCBlbnZpcm9ubWVudC5cclxuICovXHJcbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCA9PT0gZG9jdW1lbnQ7XG5cbi8vIFJldHVybnMgZ2xvYmFsIG9iamVjdCBvZiBhIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcbnZhciBnbG9iYWwkMSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsLk1hdGggPT09IE1hdGgpIHtcclxuICAgICAgICByZXR1cm4gZ2xvYmFsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT09IE1hdGgpIHtcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PT0gTWF0aCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3c7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcclxuICAgIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xyXG59KSgpO1xuXG4vKipcclxuICogQSBzaGltIGZvciB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdoaWNoIGZhbGxzIGJhY2sgdG8gdGhlIHNldFRpbWVvdXQgaWZcclxuICogZmlyc3Qgb25lIGlzIG5vdCBzdXBwb3J0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJlcXVlc3RzJyBpZGVudGlmaWVyLlxyXG4gKi9cclxudmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSQxID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLy8gSXQncyByZXF1aXJlZCB0byB1c2UgYSBib3VuZGVkIGZ1bmN0aW9uIGJlY2F1c2UgSUUgc29tZXRpbWVzIHRocm93c1xyXG4gICAgICAgIC8vIGFuIFwiSW52YWxpZCBjYWxsaW5nIG9iamVjdFwiIGVycm9yIGlmIHJBRiBpcyBpbnZva2VkIHdpdGhvdXQgdGhlIGdsb2JhbFxyXG4gICAgICAgIC8vIG9iamVjdCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUuXHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKGdsb2JhbCQxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHsgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbGJhY2soRGF0ZS5ub3coKSk7IH0sIDEwMDAgLyA2MCk7IH07XHJcbn0pKCk7XG5cbi8vIERlZmluZXMgbWluaW11bSB0aW1lb3V0IGJlZm9yZSBhZGRpbmcgYSB0cmFpbGluZyBjYWxsLlxyXG52YXIgdHJhaWxpbmdUaW1lb3V0ID0gMjtcclxuLyoqXHJcbiAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGVuc3VyZXMgdGhhdCBwcm92aWRlZCBjYWxsYmFjayB3aWxsIGJlXHJcbiAqIGludm9rZWQgb25seSBvbmNlIGR1cmluZyB0aGUgc3BlY2lmaWVkIGRlbGF5IHBlcmlvZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkZWxheSBwZXJpb2QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIERlbGF5IGFmdGVyIHdoaWNoIHRvIGludm9rZSBjYWxsYmFjay5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUgKGNhbGxiYWNrLCBkZWxheSkge1xyXG4gICAgdmFyIGxlYWRpbmdDYWxsID0gZmFsc2UsIHRyYWlsaW5nQ2FsbCA9IGZhbHNlLCBsYXN0Q2FsbFRpbWUgPSAwO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZva2VzIHRoZSBvcmlnaW5hbCBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc2NoZWR1bGVzIG5ldyBpbnZvY2F0aW9uIGlmXHJcbiAgICAgKiB0aGUgXCJwcm94eVwiIHdhcyBjYWxsZWQgZHVyaW5nIGN1cnJlbnQgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVBlbmRpbmcoKSB7XHJcbiAgICAgICAgaWYgKGxlYWRpbmdDYWxsKSB7XHJcbiAgICAgICAgICAgIGxlYWRpbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0cmFpbGluZ0NhbGwpIHtcclxuICAgICAgICAgICAgcHJveHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGludm9rZWQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS4gSXQgd2lsbCBmdXJ0aGVyIHBvc3Rwb25lXHJcbiAgICAgKiBpbnZvY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWxlZ2F0aW5nIGl0IHRvIHRoZVxyXG4gICAgICogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEocmVzb2x2ZVBlbmRpbmcpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2hlZHVsZXMgaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHByb3h5KCkge1xyXG4gICAgICAgIHZhciB0aW1lU3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGlmIChsZWFkaW5nQ2FsbCkge1xyXG4gICAgICAgICAgICAvLyBSZWplY3QgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGNhbGxzLlxyXG4gICAgICAgICAgICBpZiAodGltZVN0YW1wIC0gbGFzdENhbGxUaW1lIDwgdHJhaWxpbmdUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV3IGNhbGwgdG8gYmUgaW4gaW52b2tlZCB3aGVuIHRoZSBwZW5kaW5nIG9uZSBpcyByZXNvbHZlZC5cclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIFwidHJhbnNpdGlvbnNcIiB3aGljaCBuZXZlciBhY3R1YWxseSBzdGFydFxyXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBzbyB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIG1pZ2h0IG1pc3Mgb25lIGlmIGNoYW5nZVxyXG4gICAgICAgICAgICAvLyBoYXBwZW5zIGFtaWRzIHRoZSBwZW5kaW5nIGludm9jYXRpb24uXHJcbiAgICAgICAgICAgIHRyYWlsaW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZWFkaW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRyYWlsaW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXRDYWxsYmFjaywgZGVsYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lU3RhbXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJveHk7XHJcbn1cblxuLy8gTWluaW11bSBkZWxheSBiZWZvcmUgaW52b2tpbmcgdGhlIHVwZGF0ZSBvZiBvYnNlcnZlcnMuXHJcbnZhciBSRUZSRVNIX0RFTEFZID0gMjA7XHJcbi8vIEEgbGlzdCBvZiBzdWJzdHJpbmdzIG9mIENTUyBwcm9wZXJ0aWVzIHVzZWQgdG8gZmluZCB0cmFuc2l0aW9uIGV2ZW50cyB0aGF0XHJcbi8vIG1pZ2h0IGFmZmVjdCBkaW1lbnNpb25zIG9mIG9ic2VydmVkIGVsZW1lbnRzLlxyXG52YXIgdHJhbnNpdGlvbktleXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCcsICd3aWR0aCcsICdoZWlnaHQnLCAnc2l6ZScsICd3ZWlnaHQnXTtcclxuLy8gQ2hlY2sgaWYgTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXHJcbnZhciBtdXRhdGlvbk9ic2VydmVyU3VwcG9ydGVkID0gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xyXG4vKipcclxuICogU2luZ2xldG9uIGNvbnRyb2xsZXIgY2xhc3Mgd2hpY2ggaGFuZGxlcyB1cGRhdGVzIG9mIFJlc2l6ZU9ic2VydmVyIGluc3RhbmNlcy5cclxuICovXHJcbnZhciBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlcigpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBET00gbGlzdGVuZXJzIGhhdmUgYmVlbiBhZGRlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRlbGxzIHRoYXQgY29udHJvbGxlciBoYXMgc3Vic2NyaWJlZCBmb3IgTXV0YXRpb24gRXZlbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEtlZXBzIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgTXV0YXRpb25PYnNlcnZlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtNdXRhdGlvbk9ic2VydmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfID0gbnVsbDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxpc3Qgb2YgY29ubmVjdGVkIG9ic2VydmVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtBcnJheTxSZXNpemVPYnNlcnZlclNQST59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlcnNfID0gW107XHJcbiAgICAgICAgdGhpcy5vblRyYW5zaXRpb25FbmRfID0gdGhpcy5vblRyYW5zaXRpb25FbmRfLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoID0gdGhyb3R0bGUodGhpcy5yZWZyZXNoLmJpbmQodGhpcyksIFJFRlJFU0hfREVMQVkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9ic2VydmVyIHRvIG9ic2VydmVycyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgYWRkZWQuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlcikge1xyXG4gICAgICAgIGlmICghfnRoaXMub2JzZXJ2ZXJzXy5pbmRleE9mKG9ic2VydmVyKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyc18ucHVzaChvYnNlcnZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFkZCBsaXN0ZW5lcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gYWRkZWQgeWV0LlxyXG4gICAgICAgIGlmICghdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdF8oKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlclNQSX0gb2JzZXJ2ZXIgLSBPYnNlcnZlciB0byBiZSByZW1vdmVkLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcclxuICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfO1xyXG4gICAgICAgIHZhciBpbmRleCA9IG9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcclxuICAgICAgICAvLyBSZW1vdmUgb2JzZXJ2ZXIgaWYgaXQncyBwcmVzZW50IGluIHJlZ2lzdHJ5LlxyXG4gICAgICAgIGlmICh+aW5kZXgpIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlbW92ZSBsaXN0ZW5lcnMgaWYgY29udHJvbGxlciBoYXMgbm8gY29ubmVjdGVkIG9ic2VydmVycy5cclxuICAgICAgICBpZiAoIW9ic2VydmVycy5sZW5ndGggJiYgdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdF8oKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZva2VzIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2ZXJzLiBJdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcgdXBkYXRlcyBpbnNvZmFyXHJcbiAgICAgKiBpdCBkZXRlY3RzIGNoYW5nZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hhbmdlc0RldGVjdGVkID0gdGhpcy51cGRhdGVPYnNlcnZlcnNfKCk7XHJcbiAgICAgICAgLy8gQ29udGludWUgcnVubmluZyB1cGRhdGVzIGlmIGNoYW5nZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGFzIHRoZXJlIG1pZ2h0XHJcbiAgICAgICAgLy8gYmUgZnV0dXJlIG9uZXMgY2F1c2VkIGJ5IENTUyB0cmFuc2l0aW9ucy5cclxuICAgICAgICBpZiAoY2hhbmdlc0RldGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgZXZlcnkgb2JzZXJ2ZXIgZnJvbSBvYnNlcnZlcnMgbGlzdCBhbmQgbm90aWZpZXMgdGhlbSBvZiBxdWV1ZWRcclxuICAgICAqIGVudHJpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFwidHJ1ZVwiIGlmIGFueSBvYnNlcnZlciBoYXMgZGV0ZWN0ZWQgY2hhbmdlcyBpblxyXG4gICAgICogICAgICBkaW1lbnNpb25zIG9mIGl0J3MgZWxlbWVudHMuXHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlT2JzZXJ2ZXJzXyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDb2xsZWN0IG9ic2VydmVycyB0aGF0IGhhdmUgYWN0aXZlIG9ic2VydmF0aW9ucy5cclxuICAgICAgICB2YXIgYWN0aXZlT2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfLmZpbHRlcihmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmdhdGhlckFjdGl2ZSgpLCBvYnNlcnZlci5oYXNBY3RpdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBEZWxpdmVyIG5vdGlmaWNhdGlvbnMgaW4gYSBzZXBhcmF0ZSBjeWNsZSBpbiBvcmRlciB0byBhdm9pZCBhbnlcclxuICAgICAgICAvLyBjb2xsaXNpb25zIGJldHdlZW4gb2JzZXJ2ZXJzLCBlLmcuIHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mXHJcbiAgICAgICAgLy8gUmVzaXplT2JzZXJ2ZXIgYXJlIHRyYWNraW5nIHRoZSBzYW1lIGVsZW1lbnQgYW5kIHRoZSBjYWxsYmFjayBvZiBvbmVcclxuICAgICAgICAvLyBvZiB0aGVtIGNoYW5nZXMgY29udGVudCBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCB0YXJnZXQuIFNvbWV0aW1lc1xyXG4gICAgICAgIC8vIHRoaXMgbWF5IHJlc3VsdCBpbiBub3RpZmljYXRpb25zIGJlaW5nIGJsb2NrZWQgZm9yIHRoZSByZXN0IG9mIG9ic2VydmVycy5cclxuICAgICAgICBhY3RpdmVPYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHsgcmV0dXJuIG9ic2VydmVyLmJyb2FkY2FzdEFjdGl2ZSgpOyB9KTtcclxuICAgICAgICByZXR1cm4gYWN0aXZlT2JzZXJ2ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBET00gbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5jb25uZWN0XyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHJ1bm5pbmcgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBpZiBsaXN0ZW5lcnNcclxuICAgICAgICAvLyBoYXZlIGJlZW4gYWxyZWFkeSBhZGRlZC5cclxuICAgICAgICBpZiAoIWlzQnJvd3NlciB8fCB0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTdWJzY3JpcHRpb24gdG8gdGhlIFwiVHJhbnNpdGlvbmVuZFwiIGV2ZW50IGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvclxyXG4gICAgICAgIC8vIGRlbGF5ZWQgdHJhbnNpdGlvbnMuIFRoaXMgd2F5IGl0J3MgcG9zc2libGUgdG8gY2FwdHVyZSBhdCBsZWFzdCB0aGVcclxuICAgICAgICAvLyBmaW5hbCBzdGF0ZSBvZiBhbiBlbGVtZW50LlxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uVHJhbnNpdGlvbkVuZF8pO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5yZWZyZXNoKTtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8ub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29ubmVjdGVkXyA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIERPTSBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmRpc2Nvbm5lY3RfID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgcnVubmluZyBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGlmIGxpc3RlbmVyc1xyXG4gICAgICAgIC8vIGhhdmUgYmVlbiBhbHJlYWR5IHJlbW92ZWQuXHJcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIgfHwgIXRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uVHJhbnNpdGlvbkVuZF8pO1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgIGlmICh0aGlzLm11dGF0aW9uc09ic2VydmVyXykge1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm11dGF0aW9uRXZlbnRzQWRkZWRfKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfID0gbnVsbDtcclxuICAgICAgICB0aGlzLm11dGF0aW9uRXZlbnRzQWRkZWRfID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRfID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge1RyYW5zaXRpb25FdmVudH0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uVHJhbnNpdGlvbkVuZF8gPSBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICB2YXIgX2IgPSBfYS5wcm9wZXJ0eU5hbWUsIHByb3BlcnR5TmFtZSA9IF9iID09PSB2b2lkIDAgPyAnJyA6IF9iO1xyXG4gICAgICAgIC8vIERldGVjdCB3aGV0aGVyIHRyYW5zaXRpb24gbWF5IGFmZmVjdCBkaW1lbnNpb25zIG9mIGFuIGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIGlzUmVmbG93UHJvcGVydHkgPSB0cmFuc2l0aW9uS2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhfnByb3BlcnR5TmFtZS5pbmRleE9mKGtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlzUmVmbG93UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpbnN0YW5jZSBvZiB0aGUgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtSZXNpemVPYnNlcnZlckNvbnRyb2xsZXJ9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2VfKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VfID0gbmV3IFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZV87XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBIb2xkcyByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIncyBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuaW5zdGFuY2VfID0gbnVsbDtcclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXI7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBEZWZpbmVzIG5vbi13cml0YWJsZS9lbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHByb3ZpZGVkIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgLSBPYmplY3QgZm9yIHdoaWNoIHRvIGRlZmluZSBwcm9wZXJ0aWVzLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGJlIGRlZmluZWQuXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRhcmdldCBvYmplY3QuXHJcbiAqL1xyXG52YXIgZGVmaW5lQ29uZmlndXJhYmxlID0gKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BzKSB7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMocHJvcHMpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBfYVtfaV07XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wc1trZXldLFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn0pO1xuXG4vKipcclxuICogUmV0dXJucyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gKi9cclxudmFyIGdldFdpbmRvd09mID0gKGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIE5vZGUsIHdoaWNoIG1lYW5zIHRoYXQgaXRcclxuICAgIC8vIGhhcyB0aGUgXCJvd25lckRvY3VtZW50XCIgcHJvcGVydHkgZnJvbSB3aGljaCB3ZSBjYW4gcmV0cmlldmUgYVxyXG4gICAgLy8gY29ycmVzcG9uZGluZyBnbG9iYWwgb2JqZWN0LlxyXG4gICAgdmFyIG93bmVyR2xvYmFsID0gdGFyZ2V0ICYmIHRhcmdldC5vd25lckRvY3VtZW50ICYmIHRhcmdldC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xyXG4gICAgLy8gUmV0dXJuIHRoZSBsb2NhbCBnbG9iYWwgb2JqZWN0IGlmIGl0J3Mgbm90IHBvc3NpYmxlIGV4dHJhY3Qgb25lIGZyb21cclxuICAgIC8vIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICByZXR1cm4gb3duZXJHbG9iYWwgfHwgZ2xvYmFsJDE7XHJcbn0pO1xuXG4vLyBQbGFjZWhvbGRlciBvZiBhbiBlbXB0eSBjb250ZW50IHJlY3RhbmdsZS5cclxudmFyIGVtcHR5UmVjdCA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xyXG4vKipcclxuICogQ29udmVydHMgcHJvdmlkZWQgc3RyaW5nIHRvIGEgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiB0b0Zsb2F0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgMDtcclxufVxyXG4vKipcclxuICogRXh0cmFjdHMgYm9yZGVycyBzaXplIGZyb20gcHJvdmlkZWQgc3R5bGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcG9zaXRpb25zIC0gQm9yZGVycyBwb3NpdGlvbnMgKHRvcCwgcmlnaHQsIC4uLilcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcykge1xyXG4gICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBwb3NpdGlvbnNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG9zaXRpb25zLnJlZHVjZShmdW5jdGlvbiAoc2l6ZSwgcG9zaXRpb24pIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZXNbJ2JvcmRlci0nICsgcG9zaXRpb24gKyAnLXdpZHRoJ107XHJcbiAgICAgICAgcmV0dXJuIHNpemUgKyB0b0Zsb2F0KHZhbHVlKTtcclxuICAgIH0sIDApO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRyYWN0cyBwYWRkaW5ncyBzaXplcyBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHJldHVybnMge09iamVjdH0gUGFkZGluZ3MgYm94LlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGFkZGluZ3Moc3R5bGVzKSB7XHJcbiAgICB2YXIgcG9zaXRpb25zID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcclxuICAgIHZhciBwYWRkaW5ncyA9IHt9O1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBwb3NpdGlvbnNfMSA9IHBvc2l0aW9uczsgX2kgPCBwb3NpdGlvbnNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBwb3NpdGlvbnNfMVtfaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydwYWRkaW5nLScgKyBwb3NpdGlvbl07XHJcbiAgICAgICAgcGFkZGluZ3NbcG9zaXRpb25dID0gdG9GbG9hdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFkZGluZ3M7XHJcbn1cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgY29udGVudCByZWN0YW5nbGUgb2YgcHJvdmlkZWQgU1ZHIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U1ZHR3JhcGhpY3NFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzXHJcbiAqICAgICAgdG8gYmUgY2FsY3VsYXRlZC5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U1ZHQ29udGVudFJlY3QodGFyZ2V0KSB7XHJcbiAgICB2YXIgYmJveCA9IHRhcmdldC5nZXRCQm94KCk7XHJcbiAgICByZXR1cm4gY3JlYXRlUmVjdEluaXQoMCwgMCwgYmJveC53aWR0aCwgYmJveC5oZWlnaHQpO1xyXG59XHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHByb3ZpZGVkIEhUTUxFbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgLy8gQ2xpZW50IHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgY2FuJ3QgYmVcclxuICAgIC8vIHVzZWQgZXhjbHVzaXZlbHkgYXMgdGhleSBwcm92aWRlIHJvdW5kZWQgdmFsdWVzLlxyXG4gICAgdmFyIGNsaWVudFdpZHRoID0gdGFyZ2V0LmNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQgPSB0YXJnZXQuY2xpZW50SGVpZ2h0O1xyXG4gICAgLy8gQnkgdGhpcyBjb25kaXRpb24gd2UgY2FuIGNhdGNoIGFsbCBub24tcmVwbGFjZWQgaW5saW5lLCBoaWRkZW4gYW5kXHJcbiAgICAvLyBkZXRhY2hlZCBlbGVtZW50cy4gVGhvdWdoIGVsZW1lbnRzIHdpdGggd2lkdGggJiBoZWlnaHQgcHJvcGVydGllcyBsZXNzXHJcbiAgICAvLyB0aGFuIDAuNSB3aWxsIGJlIGRpc2NhcmRlZCBhcyB3ZWxsLlxyXG4gICAgLy9cclxuICAgIC8vIFdpdGhvdXQgaXQgd2Ugd291bGQgbmVlZCB0byBpbXBsZW1lbnQgc2VwYXJhdGUgbWV0aG9kcyBmb3IgZWFjaCBvZlxyXG4gICAgLy8gdGhvc2UgY2FzZXMgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHBlcmZvcm0gYSBwcmVjaXNlIGFuZCBwZXJmb3JtYW5jZVxyXG4gICAgLy8gZWZmZWN0aXZlIHRlc3QgZm9yIGhpZGRlbiBlbGVtZW50cy4gRS5nLiBldmVuIGpRdWVyeSdzICc6dmlzaWJsZScgZmlsdGVyXHJcbiAgICAvLyBnaXZlcyB3cm9uZyByZXN1bHRzIGZvciBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IGxlc3MgdGhhbiAwLjUuXHJcbiAgICBpZiAoIWNsaWVudFdpZHRoICYmICFjbGllbnRIZWlnaHQpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xyXG4gICAgfVxyXG4gICAgdmFyIHN0eWxlcyA9IGdldFdpbmRvd09mKHRhcmdldCkuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xyXG4gICAgdmFyIHBhZGRpbmdzID0gZ2V0UGFkZGluZ3Moc3R5bGVzKTtcclxuICAgIHZhciBob3JpelBhZCA9IHBhZGRpbmdzLmxlZnQgKyBwYWRkaW5ncy5yaWdodDtcclxuICAgIHZhciB2ZXJ0UGFkID0gcGFkZGluZ3MudG9wICsgcGFkZGluZ3MuYm90dG9tO1xyXG4gICAgLy8gQ29tcHV0ZWQgc3R5bGVzIG9mIHdpZHRoICYgaGVpZ2h0IGFyZSBiZWluZyB1c2VkIGJlY2F1c2UgdGhleSBhcmUgdGhlXHJcbiAgICAvLyBvbmx5IGRpbWVuc2lvbnMgYXZhaWxhYmxlIHRvIEpTIHRoYXQgY29udGFpbiBub24tcm91bmRlZCB2YWx1ZXMuIEl0IGNvdWxkXHJcbiAgICAvLyBiZSBwb3NzaWJsZSB0byB1dGlsaXplIHRoZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaWYgb25seSBpdCdzIGRhdGEgd2Fzbid0XHJcbiAgICAvLyBhZmZlY3RlZCBieSBDU1MgdHJhbnNmb3JtYXRpb25zIGxldCBhbG9uZSBwYWRkaW5ncywgYm9yZGVycyBhbmQgc2Nyb2xsIGJhcnMuXHJcbiAgICB2YXIgd2lkdGggPSB0b0Zsb2F0KHN0eWxlcy53aWR0aCksIGhlaWdodCA9IHRvRmxvYXQoc3R5bGVzLmhlaWdodCk7XHJcbiAgICAvLyBXaWR0aCAmIGhlaWdodCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHdoZW4gdGhlICdib3JkZXItYm94JyBib3hcclxuICAgIC8vIG1vZGVsIGlzIGFwcGxpZWQgKGV4Y2VwdCBmb3IgSUUpLlxyXG4gICAgaWYgKHN0eWxlcy5ib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xyXG4gICAgICAgIC8vIEZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXF1aXJlZCB0byBoYW5kbGUgSW50ZXJuZXQgRXhwbG9yZXIgd2hpY2hcclxuICAgICAgICAvLyBkb2Vzbid0IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMgdG8gY29tcHV0ZWQgQ1NTIGRpbWVuc2lvbnMuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXZSBjYW4gc2F5IHRoYXQgaWYgQ1NTIGRpbWVuc2lvbnMgKyBwYWRkaW5ncyBhcmUgZXF1YWwgdG8gdGhlIFwiY2xpZW50XCJcclxuICAgICAgICAvLyBwcm9wZXJ0aWVzIHRoZW4gaXQncyBlaXRoZXIgSUUsIGFuZCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3RcclxuICAgICAgICAvLyBhbnl0aGluZywgb3IgYW4gZWxlbWVudCBtZXJlbHkgZG9lc24ndCBoYXZlIHBhZGRpbmdzL2JvcmRlcnMgc3R5bGVzLlxyXG4gICAgICAgIGlmIChNYXRoLnJvdW5kKHdpZHRoICsgaG9yaXpQYWQpICE9PSBjbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICB3aWR0aCAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICdsZWZ0JywgJ3JpZ2h0JykgKyBob3JpelBhZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGgucm91bmQoaGVpZ2h0ICsgdmVydFBhZCkgIT09IGNsaWVudEhlaWdodCkge1xyXG4gICAgICAgICAgICBoZWlnaHQgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAndG9wJywgJ2JvdHRvbScpICsgdmVydFBhZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGb2xsb3dpbmcgc3RlcHMgY2FuJ3QgYmUgYXBwbGllZCB0byB0aGUgZG9jdW1lbnQncyByb290IGVsZW1lbnQgYXMgaXRzXHJcbiAgICAvLyBjbGllbnRbV2lkdGgvSGVpZ2h0XSBwcm9wZXJ0aWVzIHJlcHJlc2VudCB2aWV3cG9ydCBhcmVhIG9mIHRoZSB3aW5kb3cuXHJcbiAgICAvLyBCZXNpZGVzLCBpdCdzIGFzIHdlbGwgbm90IG5lY2Vzc2FyeSBhcyB0aGUgPGh0bWw+IGl0c2VsZiBuZWl0aGVyIGhhc1xyXG4gICAgLy8gcmVuZGVyZWQgc2Nyb2xsIGJhcnMgbm9yIGl0IGNhbiBiZSBjbGlwcGVkLlxyXG4gICAgaWYgKCFpc0RvY3VtZW50RWxlbWVudCh0YXJnZXQpKSB7XHJcbiAgICAgICAgLy8gSW4gc29tZSBicm93c2VycyAob25seSBpbiBGaXJlZm94LCBhY3R1YWxseSkgQ1NTIHdpZHRoICYgaGVpZ2h0XHJcbiAgICAgICAgLy8gaW5jbHVkZSBzY3JvbGwgYmFycyBzaXplIHdoaWNoIGNhbiBiZSByZW1vdmVkIGF0IHRoaXMgc3RlcCBhcyBzY3JvbGxcclxuICAgICAgICAvLyBiYXJzIGFyZSB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gcm91bmRlZCBkaW1lbnNpb25zICsgcGFkZGluZ3NcclxuICAgICAgICAvLyBhbmQgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLCB0aG91Z2ggdGhhdCBpcyBub3QgYWx3YXlzIHRydWUgaW4gQ2hyb21lLlxyXG4gICAgICAgIHZhciB2ZXJ0U2Nyb2xsYmFyID0gTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAtIGNsaWVudFdpZHRoO1xyXG4gICAgICAgIHZhciBob3JpelNjcm9sbGJhciA9IE1hdGgucm91bmQoaGVpZ2h0ICsgdmVydFBhZCkgLSBjbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgLy8gQ2hyb21lIGhhcyBhIHJhdGhlciB3ZWlyZCByb3VuZGluZyBvZiBcImNsaWVudFwiIHByb3BlcnRpZXMuXHJcbiAgICAgICAgLy8gRS5nLiBmb3IgYW4gZWxlbWVudCB3aXRoIGNvbnRlbnQgd2lkdGggb2YgMzE0LjJweCBpdCBzb21ldGltZXMgZ2l2ZXNcclxuICAgICAgICAvLyB0aGUgY2xpZW50IHdpZHRoIG9mIDMxNXB4IGFuZCBmb3IgdGhlIHdpZHRoIG9mIDMxNC43cHggaXQgbWF5IGdpdmVcclxuICAgICAgICAvLyAzMTRweC4gQW5kIGl0IGRvZXNuJ3QgaGFwcGVuIGFsbCB0aGUgdGltZS4gU28ganVzdCBpZ25vcmUgdGhpcyBkZWx0YVxyXG4gICAgICAgIC8vIGFzIGEgbm9uLXJlbGV2YW50LlxyXG4gICAgICAgIGlmIChNYXRoLmFicyh2ZXJ0U2Nyb2xsYmFyKSAhPT0gMSkge1xyXG4gICAgICAgICAgICB3aWR0aCAtPSB2ZXJ0U2Nyb2xsYmFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnMoaG9yaXpTY3JvbGxiYXIpICE9PSAxKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCAtPSBob3JpelNjcm9sbGJhcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlUmVjdEluaXQocGFkZGluZ3MubGVmdCwgcGFkZGluZ3MudG9wLCB3aWR0aCwgaGVpZ2h0KTtcclxufVxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgcHJvdmlkZWQgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU1ZHR3JhcGhpY3NFbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgY2hlY2tlZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG52YXIgaXNTVkdHcmFwaGljc0VsZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gU29tZSBicm93c2VycywgbmFtZWx5IElFIGFuZCBFZGdlLCBkb24ndCBoYXZlIHRoZSBTVkdHcmFwaGljc0VsZW1lbnRcclxuICAgIC8vIGludGVyZmFjZS5cclxuICAgIGlmICh0eXBlb2YgU1ZHR3JhcGhpY3NFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLlNWR0dyYXBoaWNzRWxlbWVudDsgfTtcclxuICAgIH1cclxuICAgIC8vIElmIGl0J3Mgc28sIHRoZW4gY2hlY2sgdGhhdCBlbGVtZW50IGlzIGF0IGxlYXN0IGFuIGluc3RhbmNlIG9mIHRoZVxyXG4gICAgLy8gU1ZHRWxlbWVudCBhbmQgdGhhdCBpdCBoYXMgdGhlIFwiZ2V0QkJveFwiIG1ldGhvZC5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiAodGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdFbGVtZW50ICYmXHJcbiAgICAgICAgdHlwZW9mIHRhcmdldC5nZXRCQm94ID09PSAnZnVuY3Rpb24nKTsgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHByb3ZpZGVkIGVsZW1lbnQgaXMgYSBkb2N1bWVudCBlbGVtZW50ICg8aHRtbD4pLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgY2hlY2tlZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RvY3VtZW50RWxlbWVudCh0YXJnZXQpIHtcclxuICAgIHJldHVybiB0YXJnZXQgPT09IGdldFdpbmRvd09mKHRhcmdldCkuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG59XHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGFuIGFwcHJvcHJpYXRlIGNvbnRlbnQgcmVjdGFuZ2xlIGZvciBwcm92aWRlZCBodG1sIG9yIHN2ZyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgY29udGVudCByZWN0YW5nbGUgb2Ygd2hpY2ggbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q29udGVudFJlY3QodGFyZ2V0KSB7XHJcbiAgICBpZiAoIWlzQnJvd3Nlcikge1xyXG4gICAgICAgIHJldHVybiBlbXB0eVJlY3Q7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTVkdHcmFwaGljc0VsZW1lbnQodGFyZ2V0KSkge1xyXG4gICAgICAgIHJldHVybiBnZXRTVkdDb250ZW50UmVjdCh0YXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50Q29udGVudFJlY3QodGFyZ2V0KTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyByZWN0YW5nbGUgd2l0aCBhbiBpbnRlcmZhY2Ugb2YgdGhlIERPTVJlY3RSZWFkT25seS5cclxuICogU3BlYzogaHR0cHM6Ly9kcmFmdHMuZnh0Zi5vcmcvZ2VvbWV0cnkvI2RvbXJlY3RyZWFkb25seVxyXG4gKlxyXG4gKiBAcGFyYW0ge0RPTVJlY3RJbml0fSByZWN0SW5pdCAtIE9iamVjdCB3aXRoIHJlY3RhbmdsZSdzIHgveSBjb29yZGluYXRlcyBhbmQgZGltZW5zaW9ucy5cclxuICogQHJldHVybnMge0RPTVJlY3RSZWFkT25seX1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlYWRPbmx5UmVjdChfYSkge1xyXG4gICAgdmFyIHggPSBfYS54LCB5ID0gX2EueSwgd2lkdGggPSBfYS53aWR0aCwgaGVpZ2h0ID0gX2EuaGVpZ2h0O1xyXG4gICAgLy8gSWYgRE9NUmVjdFJlYWRPbmx5IGlzIGF2YWlsYWJsZSB1c2UgaXQgYXMgYSBwcm90b3R5cGUgZm9yIHRoZSByZWN0YW5nbGUuXHJcbiAgICB2YXIgQ29uc3RyID0gdHlwZW9mIERPTVJlY3RSZWFkT25seSAhPT0gJ3VuZGVmaW5lZCcgPyBET01SZWN0UmVhZE9ubHkgOiBPYmplY3Q7XHJcbiAgICB2YXIgcmVjdCA9IE9iamVjdC5jcmVhdGUoQ29uc3RyLnByb3RvdHlwZSk7XHJcbiAgICAvLyBSZWN0YW5nbGUncyBwcm9wZXJ0aWVzIGFyZSBub3Qgd3JpdGFibGUgYW5kIG5vbi1lbnVtZXJhYmxlLlxyXG4gICAgZGVmaW5lQ29uZmlndXJhYmxlKHJlY3QsIHtcclxuICAgICAgICB4OiB4LCB5OiB5LCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICByaWdodDogeCArIHdpZHRoLFxyXG4gICAgICAgIGJvdHRvbTogaGVpZ2h0ICsgeSxcclxuICAgICAgICBsZWZ0OiB4XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZWN0O1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGVzIERPTVJlY3RJbml0IG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGltZW5zaW9ucyBhbmQgdGhlIHgveSBjb29yZGluYXRlcy5cclxuICogU3BlYzogaHR0cHM6Ly9kcmFmdHMuZnh0Zi5vcmcvZ2VvbWV0cnkvI2RpY3RkZWYtZG9tcmVjdGluaXRcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBYIGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gWSBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBSZWN0YW5nbGUncyB3aWR0aC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFJlY3RhbmdsZSdzIGhlaWdodC5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlUmVjdEluaXQoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xyXG59XG5cbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBjb21wdXRhdGlvbnMgb2YgdGhlIGNvbnRlbnQgcmVjdGFuZ2xlIG9mXHJcbiAqIHByb3ZpZGVkIERPTSBlbGVtZW50IGFuZCBmb3Iga2VlcGluZyB0cmFjayBvZiBpdCdzIGNoYW5nZXMuXHJcbiAqL1xyXG52YXIgUmVzaXplT2JzZXJ2YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIG9ic2VydmVkLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZhdGlvbih0YXJnZXQpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBCcm9hZGNhc3RlZCB3aWR0aCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RXaWR0aCA9IDA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQnJvYWRjYXN0ZWQgaGVpZ2h0IG9mIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJyb2FkY2FzdEhlaWdodCA9IDA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBsYXN0IG9ic2VydmVkIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge0RPTVJlY3RJbml0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGVudFJlY3RfID0gY3JlYXRlUmVjdEluaXQoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgY29udGVudCByZWN0YW5nbGUgYW5kIHRlbGxzIHdoZXRoZXIgaXQncyB3aWR0aCBvciBoZWlnaHQgcHJvcGVydGllc1xyXG4gICAgICogaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGJyb2FkY2FzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2YXRpb24ucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZWN0ID0gZ2V0Q29udGVudFJlY3QodGhpcy50YXJnZXQpO1xyXG4gICAgICAgIHRoaXMuY29udGVudFJlY3RfID0gcmVjdDtcclxuICAgICAgICByZXR1cm4gKHJlY3Qud2lkdGggIT09IHRoaXMuYnJvYWRjYXN0V2lkdGggfHxcclxuICAgICAgICAgICAgcmVjdC5oZWlnaHQgIT09IHRoaXMuYnJvYWRjYXN0SGVpZ2h0KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgJ2Jyb2FkY2FzdFdpZHRoJyBhbmQgJ2Jyb2FkY2FzdEhlaWdodCcgcHJvcGVydGllcyB3aXRoIGEgZGF0YVxyXG4gICAgICogZnJvbSB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIG9mIHRoZSBsYXN0IG9ic2VydmVkIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtET01SZWN0SW5pdH0gTGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2YXRpb24ucHJvdG90eXBlLmJyb2FkY2FzdFJlY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmNvbnRlbnRSZWN0XztcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFdpZHRoID0gcmVjdC53aWR0aDtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdEhlaWdodCA9IHJlY3QuaGVpZ2h0O1xyXG4gICAgICAgIHJldHVybiByZWN0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZhdGlvbjtcclxufSgpKTtcblxudmFyIFJlc2l6ZU9ic2VydmVyRW50cnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdGhhdCBpcyBiZWluZyBvYnNlcnZlZC5cclxuICAgICAqIEBwYXJhbSB7RE9NUmVjdEluaXR9IHJlY3RJbml0IC0gRGF0YSBvZiB0aGUgZWxlbWVudCdzIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckVudHJ5KHRhcmdldCwgcmVjdEluaXQpIHtcclxuICAgICAgICB2YXIgY29udGVudFJlY3QgPSBjcmVhdGVSZWFkT25seVJlY3QocmVjdEluaXQpO1xyXG4gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlXHJcbiAgICAgICAgLy8gYW5kIGFyZSBhbHNvIG5vdCBlbnVtZXJhYmxlIGluIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBQcm9wZXJ0eSBhY2Nlc3NvcnMgYXJlIG5vdCBiZWluZyB1c2VkIGFzIHRoZXknZCByZXF1aXJlIHRvIGRlZmluZSBhXHJcbiAgICAgICAgLy8gcHJpdmF0ZSBXZWFrTWFwIHN0b3JhZ2Ugd2hpY2ggbWF5IGNhdXNlIG1lbW9yeSBsZWFrcyBpbiBicm93c2VycyB0aGF0XHJcbiAgICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCB0aGlzIHR5cGUgb2YgY29sbGVjdGlvbnMuXHJcbiAgICAgICAgZGVmaW5lQ29uZmlndXJhYmxlKHRoaXMsIHsgdGFyZ2V0OiB0YXJnZXQsIGNvbnRlbnRSZWN0OiBjb250ZW50UmVjdCB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5O1xyXG59KCkpO1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJTUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZFxyXG4gICAgICogICAgICB3aGVuIG9uZSBvZiB0aGUgb2JzZXJ2ZWQgZWxlbWVudHMgY2hhbmdlcyBpdCdzIGNvbnRlbnQgZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBpbnN0YW5jZSB3aGljaFxyXG4gICAgICogICAgICBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHVwZGF0ZXMgb2Ygb2JzZXJ2ZXIuXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyfSBjYWxsYmFja0N0eCAtIFJlZmVyZW5jZSB0byB0aGUgcHVibGljXHJcbiAgICAgKiAgICAgIFJlc2l6ZU9ic2VydmVyIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlclNQSShjYWxsYmFjaywgY29udHJvbGxlciwgY2FsbGJhY2tDdHgpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb2xsZWN0aW9uIG9mIHJlc2l6ZSBvYnNlcnZhdGlvbnMgdGhhdCBoYXZlIGRldGVjdGVkIGNoYW5nZXMgaW4gZGltZW5zaW9uc1xyXG4gICAgICAgICAqIG9mIGVsZW1lbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge0FycmF5PFJlc2l6ZU9ic2VydmF0aW9uPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18gPSBbXTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWdpc3RyeSBvZiB0aGUgUmVzaXplT2JzZXJ2YXRpb24gaW5zdGFuY2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge01hcDxFbGVtZW50LCBSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vYnNlcnZhdGlvbnNfID0gbmV3IE1hcFNoaW0oKTtcclxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjYWxsYmFjayBwcm92aWRlZCBhcyBwYXJhbWV0ZXIgMSBpcyBub3QgYSBmdW5jdGlvbi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja18gPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfID0gY29udHJvbGxlcjtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrQ3R4XyA9IGNhbGxiYWNrQ3R4O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgb2JzZXJ2aW5nIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIG9ic2VydmVkLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLlxyXG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIShFbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgXCJFbGVtZW50XCIuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvYnNlcnZhdGlvbnMgPSB0aGlzLm9ic2VydmF0aW9uc187XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBlbGVtZW50IGlzIGFscmVhZHkgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgICAgaWYgKG9ic2VydmF0aW9ucy5oYXModGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmF0aW9ucy5zZXQodGFyZ2V0LCBuZXcgUmVzaXplT2JzZXJ2YXRpb24odGFyZ2V0KSk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXy5hZGRPYnNlcnZlcih0aGlzKTtcclxuICAgICAgICAvLyBGb3JjZSB0aGUgdXBkYXRlIG9mIG9ic2VydmF0aW9ucy5cclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlZnJlc2goKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIG9ic2VydmluZyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBzdG9wIG9ic2VydmluZy5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUudW5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLlxyXG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIShFbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgXCJFbGVtZW50XCIuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvYnNlcnZhdGlvbnMgPSB0aGlzLm9ic2VydmF0aW9uc187XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBlbGVtZW50IGlzIG5vdCBiZWluZyBvYnNlcnZlZC5cclxuICAgICAgICBpZiAoIW9ic2VydmF0aW9ucy5oYXModGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmF0aW9ucy5kZWxldGUodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIW9ic2VydmF0aW9ucy5zaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgb2JzZXJ2aW5nIGFsbCBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25zXy5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xsZWN0cyBvYnNlcnZhdGlvbiBpbnN0YW5jZXMgdGhlIGFzc29jaWF0ZWQgZWxlbWVudCBvZiB3aGljaCBoYXMgY2hhbmdlZFxyXG4gICAgICogaXQncyBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmdhdGhlckFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmF0aW9uc18uZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2YXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKG9ic2VydmF0aW9uLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ucHVzaChvYnNlcnZhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEludm9rZXMgaW5pdGlhbCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGEgbGlzdCBvZiBSZXNpemVPYnNlcnZlckVudHJ5XHJcbiAgICAgKiBpbnN0YW5jZXMgY29sbGVjdGVkIGZyb20gYWN0aXZlIHJlc2l6ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5icm9hZGNhc3RBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBvYnNlcnZlciBkb2Vzbid0IGhhdmUgYWN0aXZlIG9ic2VydmF0aW9ucy5cclxuICAgICAgICBpZiAoIXRoaXMuaGFzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5jYWxsYmFja0N0eF87XHJcbiAgICAgICAgLy8gQ3JlYXRlIFJlc2l6ZU9ic2VydmVyRW50cnkgaW5zdGFuY2UgZm9yIGV2ZXJ5IGFjdGl2ZSBvYnNlcnZhdGlvbi5cclxuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5tYXAoZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzaXplT2JzZXJ2ZXJFbnRyeShvYnNlcnZhdGlvbi50YXJnZXQsIG9ic2VydmF0aW9uLmJyb2FkY2FzdFJlY3QoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja18uY2FsbChjdHgsIGVudHJpZXMsIGN0eCk7XHJcbiAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5jbGVhckFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18uc3BsaWNlKDApO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgd2hldGhlciBvYnNlcnZlciBoYXMgYWN0aXZlIG9ic2VydmF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmhhc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLmxlbmd0aCA+IDA7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyU1BJO1xyXG59KCkpO1xuXG4vLyBSZWdpc3RyeSBvZiBpbnRlcm5hbCBvYnNlcnZlcnMuIElmIFdlYWtNYXAgaXMgbm90IGF2YWlsYWJsZSB1c2UgY3VycmVudCBzaGltXHJcbi8vIGZvciB0aGUgTWFwIGNvbGxlY3Rpb24gYXMgaXQgaGFzIGFsbCByZXF1aXJlZCBtZXRob2RzIGFuZCBiZWNhdXNlIFdlYWtNYXBcclxuLy8gY2FuJ3QgYmUgZnVsbHkgcG9seWZpbGxlZCBhbnl3YXkuXHJcbnZhciBvYnNlcnZlcnMgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgV2Vha01hcCgpIDogbmV3IE1hcFNoaW0oKTtcclxuLyoqXHJcbiAqIFJlc2l6ZU9ic2VydmVyIEFQSS4gRW5jYXBzdWxhdGVzIHRoZSBSZXNpemVPYnNlcnZlciBTUEkgaW1wbGVtZW50YXRpb25cclxuICogZXhwb3Npbmcgb25seSB0aG9zZSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHNwZWMuXHJcbiAqL1xyXG52YXIgUmVzaXplT2JzZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuXHJcbiAgICAgKiAgICAgIGRpbWVuc2lvbnMgb2YgdGhlIG9ic2VydmVkIGVsZW1lbnRzIGNoYW5nZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXJTUEkoY2FsbGJhY2ssIGNvbnRyb2xsZXIsIHRoaXMpO1xyXG4gICAgICAgIG9ic2VydmVycy5zZXQodGhpcywgb2JzZXJ2ZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyO1xyXG59KCkpO1xyXG4vLyBFeHBvc2UgcHVibGljIG1ldGhvZHMgb2YgUmVzaXplT2JzZXJ2ZXIuXHJcbltcclxuICAgICdvYnNlcnZlJyxcclxuICAgICd1bm9ic2VydmUnLFxyXG4gICAgJ2Rpc2Nvbm5lY3QnXHJcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XHJcbiAgICBSZXNpemVPYnNlcnZlci5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgcmV0dXJuIChfYSA9IG9ic2VydmVycy5nZXQodGhpcykpW21ldGhvZF0uYXBwbHkoX2EsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59KTtcblxudmFyIGluZGV4ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIEV4cG9ydCBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUuXHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbCQxLlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBnbG9iYWwkMS5SZXNpemVPYnNlcnZlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcclxufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOzs7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBUkE7QUFVQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBUEE7QUFTQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFMQTtBQU9BOzs7Ozs7QUFJQTtBQUNBO0FBREE7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFHQTs7Ozs7OztBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFNQTtBQXpFQTtBQUFBO0FBdEJBO0FBbUdBOzs7OztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBU0E7QUFYQTtBQWNBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFDQTtBQUNBO0FBU0E7QUFDQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVRBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFHQTtBQUFBO0FBQUE7QUFDQTs7Ozs7QUFLQTtBQUNBOzs7OztBQUtBO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBUEE7QUFTQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFWQTtBQVlBOzs7Ozs7OztBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTkE7QUFRQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFYQTtBQWFBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUZBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXhCQTtBQTBCQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFSQTtBQVVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFNQTs7Ozs7OztBQUtBO0FBQ0E7QUFoTUE7QUFtTUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFBQTtBQVZBO0FBYUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQVBBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUF0Q0E7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFUQTtBQVlBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQ0E7Ozs7O0FBS0E7QUFDQTs7Ozs7QUFLQTtBQUNBOzs7Ozs7QUFLQTtBQUNBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFLQTtBQW5EQTtBQUNBO0FBcURBO0FBQUE7QUFBQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFqQkE7QUFDQTtBQW1CQTtBQUFBO0FBQUE7QUFDQTs7Ozs7Ozs7OztBQVVBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7Ozs7OztBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBcUJBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBbkJBO0FBcUJBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBU0E7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFYQTtBQWFBOzs7Ozs7O0FBS0E7QUFDQTtBQURBO0FBR0E7Ozs7Ozs7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBbEpBO0FBc0pBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTs7Ozs7QUFJQTtBQUFBO0FBQUE7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbEJBO0FBQ0E7QUFDQTtBQW1CQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFMQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQUNBO0FBT0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\n"); - -/***/ }), - -/***/ "../node_modules/resolve-pathname/esm/resolve-pathname.js": -/*!****************************************************************!*\ - !*** ../node_modules/resolve-pathname/esm/resolve-pathname.js ***! - \****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n} // About 1.5x faster than the two-arg version of Array#splice()\n\n\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n} // This implementation is based heavily on node's url.parse\n\n\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n var toParts = to && to.split('/') || [];\n var fromParts = from && from.split('/') || [];\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n var hasTrailingSlash;\n\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) {\n fromParts.unshift('..');\n }\n if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n var result = fromParts.join('/');\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (resolvePathname);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Jlc29sdmUtcGF0aG5hbWUvZXNtL3Jlc29sdmUtcGF0aG5hbWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Jlc29sdmUtcGF0aG5hbWUvZXNtL3Jlc29sdmUtcGF0aG5hbWUuanM/NDIzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGhuYW1lKSB7XG4gIHJldHVybiBwYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJztcbn1cblxuLy8gQWJvdXQgMS41eCBmYXN0ZXIgdGhhbiB0aGUgdHdvLWFyZyB2ZXJzaW9uIG9mIEFycmF5I3NwbGljZSgpXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4LCBrID0gaSArIDEsIG4gPSBsaXN0Lmxlbmd0aDsgayA8IG47IGkgKz0gMSwgayArPSAxKSB7XG4gICAgbGlzdFtpXSA9IGxpc3Rba107XG4gIH1cblxuICBsaXN0LnBvcCgpO1xufVxuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIGhlYXZpbHkgb24gbm9kZSdzIHVybC5wYXJzZVxuZnVuY3Rpb24gcmVzb2x2ZVBhdGhuYW1lKHRvLCBmcm9tKSB7XG4gIGlmIChmcm9tID09PSB1bmRlZmluZWQpIGZyb20gPSAnJztcblxuICB2YXIgdG9QYXJ0cyA9ICh0byAmJiB0by5zcGxpdCgnLycpKSB8fCBbXTtcbiAgdmFyIGZyb21QYXJ0cyA9IChmcm9tICYmIGZyb20uc3BsaXQoJy8nKSkgfHwgW107XG5cbiAgdmFyIGlzVG9BYnMgPSB0byAmJiBpc0Fic29sdXRlKHRvKTtcbiAgdmFyIGlzRnJvbUFicyA9IGZyb20gJiYgaXNBYnNvbHV0ZShmcm9tKTtcbiAgdmFyIG11c3RFbmRBYnMgPSBpc1RvQWJzIHx8IGlzRnJvbUFicztcblxuICBpZiAodG8gJiYgaXNBYnNvbHV0ZSh0bykpIHtcbiAgICAvLyB0byBpcyBhYnNvbHV0ZVxuICAgIGZyb21QYXJ0cyA9IHRvUGFydHM7XG4gIH0gZWxzZSBpZiAodG9QYXJ0cy5sZW5ndGgpIHtcbiAgICAvLyB0byBpcyByZWxhdGl2ZSwgZHJvcCB0aGUgZmlsZW5hbWVcbiAgICBmcm9tUGFydHMucG9wKCk7XG4gICAgZnJvbVBhcnRzID0gZnJvbVBhcnRzLmNvbmNhdCh0b1BhcnRzKTtcbiAgfVxuXG4gIGlmICghZnJvbVBhcnRzLmxlbmd0aCkgcmV0dXJuICcvJztcblxuICB2YXIgaGFzVHJhaWxpbmdTbGFzaDtcbiAgaWYgKGZyb21QYXJ0cy5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdCA9IGZyb21QYXJ0c1tmcm9tUGFydHMubGVuZ3RoIC0gMV07XG4gICAgaGFzVHJhaWxpbmdTbGFzaCA9IGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nIHx8IGxhc3QgPT09ICcnO1xuICB9IGVsc2Uge1xuICAgIGhhc1RyYWlsaW5nU2xhc2ggPSBmYWxzZTtcbiAgfVxuXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBmcm9tUGFydHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIHZhciBwYXJ0ID0gZnJvbVBhcnRzW2ldO1xuXG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICBzcGxpY2VPbmUoZnJvbVBhcnRzLCBpKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbXVzdEVuZEFicykgZm9yICg7IHVwLS07IHVwKSBmcm9tUGFydHMudW5zaGlmdCgnLi4nKTtcblxuICBpZiAoXG4gICAgbXVzdEVuZEFicyAmJlxuICAgIGZyb21QYXJ0c1swXSAhPT0gJycgJiZcbiAgICAoIWZyb21QYXJ0c1swXSB8fCAhaXNBYnNvbHV0ZShmcm9tUGFydHNbMF0pKVxuICApXG4gICAgZnJvbVBhcnRzLnVuc2hpZnQoJycpO1xuXG4gIHZhciByZXN1bHQgPSBmcm9tUGFydHMuam9pbignLycpO1xuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIHJlc3VsdC5zdWJzdHIoLTEpICE9PSAnLycpIHJlc3VsdCArPSAnLyc7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZVBhdGhuYW1lO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBT0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/resolve-pathname/esm/resolve-pathname.js\n"); - -/***/ }), - -/***/ "../node_modules/safe-buffer/index.js": -/*!********************************************!*\ - !*** ../node_modules/safe-buffer/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* eslint-disable node/no-deprecated-api */\nvar buffer = __webpack_require__(/*! buffer */ \"../node_modules/buffer/index.js\");\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n for (var key in src) {\n dst[key] = src[key];\n }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer;\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports);\n exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length);\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype); // Copy static methods from Buffer\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number');\n }\n\n return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n var buf = Buffer(size);\n\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding);\n } else {\n buf.fill(fill);\n }\n } else {\n buf.fill(0);\n }\n\n return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return buffer.SlowBuffer(size);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcz9hNTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlci5wcm90b3R5cGUpXG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBZEE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/safe-buffer/index.js\n"); - -/***/ }), - -/***/ "../node_modules/safe-json-parse/tuple.js": -/*!************************************************!*\ - !*** ../node_modules/safe-json-parse/tuple.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = SafeParseTuple;\n\nfunction SafeParseTuple(obj, reviver) {\n var json;\n var error = null;\n\n try {\n json = JSON.parse(obj, reviver);\n } catch (err) {\n error = err;\n }\n\n return [error, json];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NhZmUtanNvbi1wYXJzZS90dXBsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc2FmZS1qc29uLXBhcnNlL3R1cGxlLmpzPzM5ZDciXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBTYWZlUGFyc2VUdXBsZVxuXG5mdW5jdGlvbiBTYWZlUGFyc2VUdXBsZShvYmosIHJldml2ZXIpIHtcbiAgICB2YXIganNvblxuICAgIHZhciBlcnJvciA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICAgIGpzb24gPSBKU09OLnBhcnNlKG9iaiwgcmV2aXZlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG5cbiAgICByZXR1cm4gW2Vycm9yLCBqc29uXVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/safe-json-parse/tuple.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/cjs/scheduler-tracing.development.js": -/*!**********************************************************************!*\ - !*** ../node_modules/scheduler/cjs/scheduler-tracing.development.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v0.18.0\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nif (undefined !== \"production\") {\n (function () {\n 'use strict';\n\n Object.defineProperty(exports, '__esModule', {\n value: true\n }); // Helps identify side effects in render-phase lifecycle hooks and setState\n // reducers by double invoking them in Strict Mode.\n // To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n // replay the begin phase of a failed component inside invokeGuardedCallback.\n // Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n // Gather advanced timing metrics for Profiler subtrees.\n // Trace which interactions trigger each commit.\n\n var enableSchedulerTracing = true; // SSR experiments\n // Only used in www builds.\n // Only used in www builds.\n // Disable javascript: URL strings in href for XSS protection.\n // React Fire: prevent the value and checked attributes from syncing\n // with their related DOM properties\n // These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n // Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\n // Experimental React Flare event system and event components support.\n // Experimental Host Component support.\n // Experimental Scope support.\n // New API for JSX transforms to target - https://github.com/reactjs/rfcs/pull/107\n // We will enforce mocking scheduler with scheduler/unstable_mock at some point. (v17?)\n // Till then, we warn about the missing mock, but still fallback to a legacy mode compatible version\n // For tests, we flush suspense fallbacks in an act scope;\n // *except* in some of our own tests, where we test incremental loading states.\n // Add a callback property to suspense to notify which promises are currently\n // in the update queue. This allows reporting and tracing of what is causing\n // the user to see a loading state.\n // Also allows hydration callbacks to fire when a dehydrated boundary gets\n // hydrated or deleted.\n // Part of the simplification of React.createElement so we can eventually move\n // from React.createElement to React.jsx\n // https://github.com/reactjs/rfcs/blob/createlement-rfc/text/0000-create-element-changes.md\n // Flag to turn event.target and event.currentTarget in ReactNative from a reactTag to a component instance\n\n var DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.\n\n var interactionIDCounter = 0;\n var threadIDCounter = 0; // Set of currently traced interactions.\n // Interactions \"stack\"–\n // Meaning that newly traced interactions are appended to the previously active set.\n // When an interaction goes out of scope, the previous set (if any) is restored.\n\n exports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end.\n\n exports.__subscriberRef = null;\n\n if (enableSchedulerTracing) {\n exports.__interactionsRef = {\n current: new Set()\n };\n exports.__subscriberRef = {\n current: null\n };\n }\n\n function unstable_clear(callback) {\n if (!enableSchedulerTracing) {\n return callback();\n }\n\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = new Set();\n\n try {\n return callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n }\n }\n\n function unstable_getCurrent() {\n if (!enableSchedulerTracing) {\n return null;\n } else {\n return exports.__interactionsRef.current;\n }\n }\n\n function unstable_getThreadID() {\n return ++threadIDCounter;\n }\n\n function unstable_trace(name, timestamp, callback) {\n var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n if (!enableSchedulerTracing) {\n return callback();\n }\n\n var interaction = {\n __count: 1,\n id: interactionIDCounter++,\n name: name,\n timestamp: timestamp\n };\n var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate.\n // To do that, clone the current interactions.\n // The previous set will be restored upon completion.\n\n var interactions = new Set(prevInteractions);\n interactions.add(interaction);\n exports.__interactionsRef.current = interactions;\n var subscriber = exports.__subscriberRef.current;\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onInteractionTraced(interaction);\n }\n } finally {\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(interactions, threadID);\n }\n } finally {\n try {\n returnValue = callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStopped(interactions, threadID);\n }\n } finally {\n interaction.__count--; // If no async work was scheduled for this interaction,\n // Notify subscribers that it's completed.\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n }\n }\n }\n }\n\n return returnValue;\n }\n\n function unstable_wrap(callback) {\n var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n if (!enableSchedulerTracing) {\n return callback;\n }\n\n var wrappedInteractions = exports.__interactionsRef.current;\n var subscriber = exports.__subscriberRef.current;\n\n if (subscriber !== null) {\n subscriber.onWorkScheduled(wrappedInteractions, threadID);\n } // Update the pending async work count for the current interactions.\n // Update after calling subscribers in case of error.\n\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count++;\n });\n var hasRun = false;\n\n function wrapped() {\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = wrappedInteractions;\n subscriber = exports.__subscriberRef.current;\n\n try {\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(wrappedInteractions, threadID);\n }\n } finally {\n try {\n returnValue = callback.apply(undefined, arguments);\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n if (subscriber !== null) {\n subscriber.onWorkStopped(wrappedInteractions, threadID);\n }\n }\n }\n\n return returnValue;\n } finally {\n if (!hasRun) {\n // We only expect a wrapped function to be executed once,\n // But in the event that it's executed more than once–\n // Only decrement the outstanding interaction counts once.\n hasRun = true; // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n }\n }\n\n wrapped.cancel = function cancel() {\n subscriber = exports.__subscriberRef.current;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkCanceled(wrappedInteractions, threadID);\n }\n } finally {\n // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n };\n\n return wrapped;\n }\n\n var subscribers = null;\n\n if (enableSchedulerTracing) {\n subscribers = new Set();\n }\n\n function unstable_subscribe(subscriber) {\n if (enableSchedulerTracing) {\n subscribers.add(subscriber);\n\n if (subscribers.size === 1) {\n exports.__subscriberRef.current = {\n onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n onInteractionTraced: onInteractionTraced,\n onWorkCanceled: onWorkCanceled,\n onWorkScheduled: onWorkScheduled,\n onWorkStarted: onWorkStarted,\n onWorkStopped: onWorkStopped\n };\n }\n }\n }\n\n function unstable_unsubscribe(subscriber) {\n if (enableSchedulerTracing) {\n subscribers[\"delete\"](subscriber);\n\n if (subscribers.size === 0) {\n exports.__subscriberRef.current = null;\n }\n }\n }\n\n function onInteractionTraced(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionTraced(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n function onInteractionScheduledWorkCompleted(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n function onWorkScheduled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkScheduled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n function onWorkStarted(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n function onWorkStopped(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStopped(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n function onWorkCanceled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkCanceled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n }\n\n exports.unstable_clear = unstable_clear;\n exports.unstable_getCurrent = unstable_getCurrent;\n exports.unstable_getThreadID = unstable_getThreadID;\n exports.unstable_trace = unstable_trace;\n exports.unstable_wrap = unstable_wrap;\n exports.unstable_subscribe = unstable_subscribe;\n exports.unstable_unsubscribe = unstable_unsubscribe;\n })();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanM/NGVmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMTguMFxuICogc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLy8gSGVscHMgaWRlbnRpZnkgc2lkZSBlZmZlY3RzIGluIHJlbmRlci1waGFzZSBsaWZlY3ljbGUgaG9va3MgYW5kIHNldFN0YXRlXG4vLyByZWR1Y2VycyBieSBkb3VibGUgaW52b2tpbmcgdGhlbSBpbiBTdHJpY3QgTW9kZS5cblxuIC8vIFRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIGRlYnVnZ2VyLCB3ZVxuLy8gcmVwbGF5IHRoZSBiZWdpbiBwaGFzZSBvZiBhIGZhaWxlZCBjb21wb25lbnQgaW5zaWRlIGludm9rZUd1YXJkZWRDYWxsYmFjay5cblxuIC8vIFdhcm4gYWJvdXQgZGVwcmVjYXRlZCwgYXN5bmMtdW5zYWZlIGxpZmVjeWNsZXM7IHJlbGF0ZXMgdG8gUkZDICM2OlxuXG4gLy8gR2F0aGVyIGFkdmFuY2VkIHRpbWluZyBtZXRyaWNzIGZvciBQcm9maWxlciBzdWJ0cmVlcy5cblxuIC8vIFRyYWNlIHdoaWNoIGludGVyYWN0aW9ucyB0cmlnZ2VyIGVhY2ggY29tbWl0LlxuXG52YXIgZW5hYmxlU2NoZWR1bGVyVHJhY2luZyA9IHRydWU7IC8vIFNTUiBleHBlcmltZW50c1xuXG5cbiAvLyBPbmx5IHVzZWQgaW4gd3d3IGJ1aWxkcy5cblxuIC8vIE9ubHkgdXNlZCBpbiB3d3cgYnVpbGRzLlxuXG4gLy8gRGlzYWJsZSBqYXZhc2NyaXB0OiBVUkwgc3RyaW5ncyBpbiBocmVmIGZvciBYU1MgcHJvdGVjdGlvbi5cblxuIC8vIFJlYWN0IEZpcmU6IHByZXZlbnQgdGhlIHZhbHVlIGFuZCBjaGVja2VkIGF0dHJpYnV0ZXMgZnJvbSBzeW5jaW5nXG4vLyB3aXRoIHRoZWlyIHJlbGF0ZWQgRE9NIHByb3BlcnRpZXNcblxuIC8vIFRoZXNlIEFQSXMgd2lsbCBubyBsb25nZXIgYmUgXCJ1bnN0YWJsZVwiIGluIHRoZSB1cGNvbWluZyAxNi43IHJlbGVhc2UsXG4vLyBDb250cm9sIHRoaXMgYmVoYXZpb3Igd2l0aCBhIGZsYWcgdG8gc3VwcG9ydCAxNi42IG1pbm9yIHJlbGVhc2VzIGluIHRoZSBtZWFud2hpbGUuXG5cblxuIC8vIEV4cGVyaW1lbnRhbCBSZWFjdCBGbGFyZSBldmVudCBzeXN0ZW0gYW5kIGV2ZW50IGNvbXBvbmVudHMgc3VwcG9ydC5cblxuIC8vIEV4cGVyaW1lbnRhbCBIb3N0IENvbXBvbmVudCBzdXBwb3J0LlxuXG4gLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG5cbiAvLyBOZXcgQVBJIGZvciBKU1ggdHJhbnNmb3JtcyB0byB0YXJnZXQgLSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG5cbiAvLyBXZSB3aWxsIGVuZm9yY2UgbW9ja2luZyBzY2hlZHVsZXIgd2l0aCBzY2hlZHVsZXIvdW5zdGFibGVfbW9jayBhdCBzb21lIHBvaW50LiAodjE3Pylcbi8vIFRpbGwgdGhlbiwgd2Ugd2FybiBhYm91dCB0aGUgbWlzc2luZyBtb2NrLCBidXQgc3RpbGwgZmFsbGJhY2sgdG8gYSBsZWdhY3kgbW9kZSBjb21wYXRpYmxlIHZlcnNpb25cblxuIC8vIEZvciB0ZXN0cywgd2UgZmx1c2ggc3VzcGVuc2UgZmFsbGJhY2tzIGluIGFuIGFjdCBzY29wZTtcbi8vICpleGNlcHQqIGluIHNvbWUgb2Ygb3VyIG93biB0ZXN0cywgd2hlcmUgd2UgdGVzdCBpbmNyZW1lbnRhbCBsb2FkaW5nIHN0YXRlcy5cblxuIC8vIEFkZCBhIGNhbGxiYWNrIHByb3BlcnR5IHRvIHN1c3BlbnNlIHRvIG5vdGlmeSB3aGljaCBwcm9taXNlcyBhcmUgY3VycmVudGx5XG4vLyBpbiB0aGUgdXBkYXRlIHF1ZXVlLiBUaGlzIGFsbG93cyByZXBvcnRpbmcgYW5kIHRyYWNpbmcgb2Ygd2hhdCBpcyBjYXVzaW5nXG4vLyB0aGUgdXNlciB0byBzZWUgYSBsb2FkaW5nIHN0YXRlLlxuLy8gQWxzbyBhbGxvd3MgaHlkcmF0aW9uIGNhbGxiYWNrcyB0byBmaXJlIHdoZW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGdldHNcbi8vIGh5ZHJhdGVkIG9yIGRlbGV0ZWQuXG5cbiAvLyBQYXJ0IG9mIHRoZSBzaW1wbGlmaWNhdGlvbiBvZiBSZWFjdC5jcmVhdGVFbGVtZW50IHNvIHdlIGNhbiBldmVudHVhbGx5IG1vdmVcbi8vIGZyb20gUmVhY3QuY3JlYXRlRWxlbWVudCB0byBSZWFjdC5qc3hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvYmxvYi9jcmVhdGVsZW1lbnQtcmZjL3RleHQvMDAwMC1jcmVhdGUtZWxlbWVudC1jaGFuZ2VzLm1kXG5cblxuXG5cblxuIC8vIEZsYWcgdG8gdHVybiBldmVudC50YXJnZXQgYW5kIGV2ZW50LmN1cnJlbnRUYXJnZXQgaW4gUmVhY3ROYXRpdmUgZnJvbSBhIHJlYWN0VGFnIHRvIGEgY29tcG9uZW50IGluc3RhbmNlXG5cbnZhciBERUZBVUxUX1RIUkVBRF9JRCA9IDA7IC8vIENvdW50ZXJzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cblxudmFyIGludGVyYWN0aW9uSURDb3VudGVyID0gMDtcbnZhciB0aHJlYWRJRENvdW50ZXIgPSAwOyAvLyBTZXQgb2YgY3VycmVudGx5IHRyYWNlZCBpbnRlcmFjdGlvbnMuXG4vLyBJbnRlcmFjdGlvbnMgXCJzdGFja1wi4oCTXG4vLyBNZWFuaW5nIHRoYXQgbmV3bHkgdHJhY2VkIGludGVyYWN0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHNldC5cbi8vIFdoZW4gYW4gaW50ZXJhY3Rpb24gZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBwcmV2aW91cyBzZXQgKGlmIGFueSkgaXMgcmVzdG9yZWQuXG5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsOyAvLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cblxuZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSBudWxsO1xuXG5pZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0ge1xuICAgIGN1cnJlbnQ6IG5ldyBTZXQoKVxuICB9O1xuICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NsZWFyKGNhbGxiYWNrKSB7XG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IG5ldyBTZXQoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIGlmICghZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgaWYgKCFlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICB2YXIgaW50ZXJhY3Rpb24gPSB7XG4gICAgX19jb3VudDogMSxcbiAgICBpZDogaW50ZXJhY3Rpb25JRENvdW50ZXIrKyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gIH07XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50OyAvLyBUcmFjZWQgaW50ZXJhY3Rpb25zIHNob3VsZCBzdGFjay9hY2N1bXVsYXRlLlxuICAvLyBUbyBkbyB0aGF0LCBjbG9uZSB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFRoZSBwcmV2aW91cyBzZXQgd2lsbCBiZSByZXN0b3JlZCB1cG9uIGNvbXBsZXRpb24uXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07IC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICBpZiAoIWVuYWJsZVNjaGVkdWxlclRyYWNpbmcpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFVwZGF0ZSBhZnRlciBjYWxsaW5nIHN1YnNjcmliZXJzIGluIGNhc2Ugb2YgZXJyb3IuXG5cblxuICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICB9KTtcbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFoYXNSdW4pIHtcbiAgICAgICAgLy8gV2Ugb25seSBleHBlY3QgYSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UsXG4gICAgICAgIC8vIEJ1dCBpbiB0aGUgZXZlbnQgdGhhdCBpdCdzIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNl4oCTXG4gICAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBvdXRzdGFuZGluZyBpbnRlcmFjdGlvbiBjb3VudHMgb25jZS5cbiAgICAgICAgaGFzUnVuID0gdHJ1ZTsgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cblxuICAgICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cmFwcGVkLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgaWYgKHN1YnNjcmliZXIgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbnZhciBzdWJzY3JpYmVycyA9IG51bGw7XG5cbmlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICBpZiAoZW5hYmxlU2NoZWR1bGVyVHJhY2luZykge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV91bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIGlmIChlbmFibGVTY2hlZHVsZXJUcmFjaW5nKSB7XG4gICAgc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5leHBvcnRzLnVuc3RhYmxlX2NsZWFyID0gdW5zdGFibGVfY2xlYXI7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnQgPSB1bnN0YWJsZV9nZXRDdXJyZW50O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRUaHJlYWRJRCA9IHVuc3RhYmxlX2dldFRocmVhZElEO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuICB9KSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFTQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBbEJBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0WkE7QUF3WkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/scheduler/cjs/scheduler-tracing.development.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/cjs/scheduler-tracing.production.min.js": -/*!*************************************************************************!*\ - !*** ../node_modules/scheduler/cjs/scheduler-tracing.production.min.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v0.18.0\n * scheduler-tracing.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: !0\n});\nvar b = 0;\nexports.__interactionsRef = null;\nexports.__subscriberRef = null;\n\nexports.unstable_clear = function (a) {\n return a();\n};\n\nexports.unstable_getCurrent = function () {\n return null;\n};\n\nexports.unstable_getThreadID = function () {\n return ++b;\n};\n\nexports.unstable_trace = function (a, d, c) {\n return c();\n};\n\nexports.unstable_wrap = function (a) {\n return a;\n};\n\nexports.unstable_subscribe = function () {};\n\nexports.unstable_unsubscribe = function () {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanM/MmQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMTguMFxuICogc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGI9MDtleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmPW51bGw7ZXhwb3J0cy5fX3N1YnNjcmliZXJSZWY9bnVsbDtleHBvcnRzLnVuc3RhYmxlX2NsZWFyPWZ1bmN0aW9uKGEpe3JldHVybiBhKCl9O2V4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudD1mdW5jdGlvbigpe3JldHVybiBudWxsfTtleHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEPWZ1bmN0aW9uKCl7cmV0dXJuKytifTtleHBvcnRzLnVuc3RhYmxlX3RyYWNlPWZ1bmN0aW9uKGEsZCxjKXtyZXR1cm4gYygpfTtleHBvcnRzLnVuc3RhYmxlX3dyYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2V4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7fTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBU0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/scheduler/cjs/scheduler-tracing.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/cjs/scheduler.development.js": -/*!**************************************************************!*\ - !*** ../node_modules/scheduler/cjs/scheduler.development.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v0.18.0\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nif (undefined !== \"production\") {\n (function () {\n 'use strict';\n\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n var enableSchedulerDebugging = false;\n var enableIsInputPending = false;\n var enableProfiling = true;\n\n var _requestHostCallback;\n\n var requestHostTimeout;\n var cancelHostTimeout;\n var shouldYieldToHost;\n var requestPaint;\n\n if ( // If Scheduler runs in a non-DOM environment, it falls back to a naive\n // implementation using setTimeout.\n typeof window === 'undefined' || // Check if MessageChannel is supported, too.\n typeof MessageChannel !== 'function') {\n // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n // fallback to a naive implementation.\n var _callback = null;\n var _timeoutID = null;\n\n var _flushCallback = function _flushCallback() {\n if (_callback !== null) {\n try {\n var currentTime = exports.unstable_now();\n var hasRemainingTime = true;\n\n _callback(hasRemainingTime, currentTime);\n\n _callback = null;\n } catch (e) {\n setTimeout(_flushCallback, 0);\n throw e;\n }\n }\n };\n\n var initialTime = Date.now();\n\n exports.unstable_now = function () {\n return Date.now() - initialTime;\n };\n\n _requestHostCallback = function requestHostCallback(cb) {\n if (_callback !== null) {\n // Protect against re-entrancy.\n setTimeout(_requestHostCallback, 0, cb);\n } else {\n _callback = cb;\n setTimeout(_flushCallback, 0);\n }\n };\n\n requestHostTimeout = function requestHostTimeout(cb, ms) {\n _timeoutID = setTimeout(cb, ms);\n };\n\n cancelHostTimeout = function cancelHostTimeout() {\n clearTimeout(_timeoutID);\n };\n\n shouldYieldToHost = function shouldYieldToHost() {\n return false;\n };\n\n requestPaint = exports.unstable_forceFrameRate = function () {};\n } else {\n // Capture local references to native APIs, in case a polyfill overrides them.\n var performance = window.performance;\n var _Date = window.Date;\n var _setTimeout = window.setTimeout;\n var _clearTimeout = window.clearTimeout;\n\n if (typeof console !== 'undefined') {\n // TODO: Scheduler no longer requires these methods to be polyfilled. But\n // maybe we want to continue warning if they don't exist, to preserve the\n // option to rely on it in the future?\n var requestAnimationFrame = window.requestAnimationFrame;\n var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link\n\n if (typeof requestAnimationFrame !== 'function') {\n console.error(\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n\n if (typeof cancelAnimationFrame !== 'function') {\n console.error(\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n }\n\n if (_typeof(performance) === 'object' && typeof performance.now === 'function') {\n exports.unstable_now = function () {\n return performance.now();\n };\n } else {\n var _initialTime = _Date.now();\n\n exports.unstable_now = function () {\n return _Date.now() - _initialTime;\n };\n }\n\n var isMessageLoopRunning = false;\n var scheduledHostCallback = null;\n var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n // thread, like user events. By default, it yields multiple times per frame.\n // It does not attempt to align with frame boundaries, since most tasks don't\n // need to be frame aligned; for those that do, use requestAnimationFrame.\n\n var yieldInterval = 5;\n var deadline = 0; // TODO: Make this configurable\n // TODO: Adjust this based on priority?\n\n var maxYieldInterval = 300;\n var needsPaint = false;\n\n if (enableIsInputPending && navigator !== undefined && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined) {\n var scheduling = navigator.scheduling;\n\n shouldYieldToHost = function shouldYieldToHost() {\n var currentTime = exports.unstable_now();\n\n if (currentTime >= deadline) {\n // There's no time left. We may want to yield control of the main\n // thread, so the browser can perform high priority tasks. The main ones\n // are painting and user input. If there's a pending paint or a pending\n // input, then we should yield. But if there's neither, then we can\n // yield less often while remaining responsive. We'll eventually yield\n // regardless, since there could be a pending paint that wasn't\n // accompanied by a call to `requestPaint`, or other main thread tasks\n // like network events.\n if (needsPaint || scheduling.isInputPending()) {\n // There is either a pending paint or a pending input.\n return true;\n } // There's no pending input. Only yield if we've reached the max\n // yield interval.\n\n\n return currentTime >= maxYieldInterval;\n } else {\n // There's still time left in the frame.\n return false;\n }\n };\n\n requestPaint = function requestPaint() {\n needsPaint = true;\n };\n } else {\n // `isInputPending` is not available. Since we have no way of knowing if\n // there's pending input, always yield at the end of the frame.\n shouldYieldToHost = function shouldYieldToHost() {\n return exports.unstable_now() >= deadline;\n }; // Since we yield every frame regardless, `requestPaint` has no effect.\n\n\n requestPaint = function requestPaint() {};\n }\n\n exports.unstable_forceFrameRate = function (fps) {\n if (fps < 0 || fps > 125) {\n console.error('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');\n return;\n }\n\n if (fps > 0) {\n yieldInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n yieldInterval = 5;\n }\n };\n\n var performWorkUntilDeadline = function performWorkUntilDeadline() {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync\n // cycle. This means there's always time remaining at the beginning of\n // the message event.\n\n deadline = currentTime + yieldInterval;\n var hasTimeRemaining = true;\n\n try {\n var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n\n if (!hasMoreWork) {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n } else {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n port.postMessage(null);\n }\n } catch (error) {\n // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n port.postMessage(null);\n throw error;\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n // reset this.\n\n\n needsPaint = false;\n };\n\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n _requestHostCallback = function _requestHostCallback(callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n port.postMessage(null);\n }\n };\n\n requestHostTimeout = function requestHostTimeout(callback, ms) {\n taskTimeoutID = _setTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n };\n\n cancelHostTimeout = function cancelHostTimeout() {\n _clearTimeout(taskTimeoutID);\n\n taskTimeoutID = -1;\n };\n }\n\n function push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n }\n\n function peek(heap) {\n var first = heap[0];\n return first === undefined ? null : first;\n }\n\n function pop(heap) {\n var first = heap[0];\n\n if (first !== undefined) {\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n } else {\n return null;\n }\n }\n\n function siftUp(heap, node, i) {\n var index = i;\n\n while (true) {\n var parentIndex = Math.floor((index - 1) / 2);\n var parent = heap[parentIndex];\n\n if (parent !== undefined && compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n }\n\n function siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n\n while (index < length) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (left !== undefined && compare(left, node) < 0) {\n if (right !== undefined && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (right !== undefined && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n }\n\n function compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n } // TODO: Use symbols?\n\n\n var NoPriority = 0;\n var ImmediatePriority = 1;\n var UserBlockingPriority = 2;\n var NormalPriority = 3;\n var LowPriority = 4;\n var IdlePriority = 5;\n var runIdCounter = 0;\n var mainThreadIdCounter = 0;\n var profilingStateSize = 4;\n var sharedProfilingBuffer = enableProfiling ? // $FlowFixMe Flow doesn't know about SharedArrayBuffer\n typeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer\n typeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9\n : null;\n var profilingState = enableProfiling && sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks\n\n var PRIORITY = 0;\n var CURRENT_TASK_ID = 1;\n var CURRENT_RUN_ID = 2;\n var QUEUE_SIZE = 3;\n\n if (enableProfiling) {\n profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue\n // array might include canceled tasks.\n\n profilingState[QUEUE_SIZE] = 0;\n profilingState[CURRENT_TASK_ID] = 0;\n } // Bytes per element is 4\n\n\n var INITIAL_EVENT_LOG_SIZE = 131072;\n var MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes\n\n var eventLogSize = 0;\n var eventLogBuffer = null;\n var eventLog = null;\n var eventLogIndex = 0;\n var TaskStartEvent = 1;\n var TaskCompleteEvent = 2;\n var TaskErrorEvent = 3;\n var TaskCancelEvent = 4;\n var TaskRunEvent = 5;\n var TaskYieldEvent = 6;\n var SchedulerSuspendEvent = 7;\n var SchedulerResumeEvent = 8;\n\n function logEvent(entries) {\n if (eventLog !== null) {\n var offset = eventLogIndex;\n eventLogIndex += entries.length;\n\n if (eventLogIndex + 1 > eventLogSize) {\n eventLogSize *= 2;\n\n if (eventLogSize > MAX_EVENT_LOG_SIZE) {\n console.error(\"Scheduler Profiling: Event log exceeded maximum size. Don't \" + 'forget to call `stopLoggingProfilingEvents()`.');\n stopLoggingProfilingEvents();\n return;\n }\n\n var newEventLog = new Int32Array(eventLogSize * 4);\n newEventLog.set(eventLog);\n eventLogBuffer = newEventLog.buffer;\n eventLog = newEventLog;\n }\n\n eventLog.set(entries, offset);\n }\n }\n\n function startLoggingProfilingEvents() {\n eventLogSize = INITIAL_EVENT_LOG_SIZE;\n eventLogBuffer = new ArrayBuffer(eventLogSize * 4);\n eventLog = new Int32Array(eventLogBuffer);\n eventLogIndex = 0;\n }\n\n function stopLoggingProfilingEvents() {\n var buffer = eventLogBuffer;\n eventLogSize = 0;\n eventLogBuffer = null;\n eventLog = null;\n eventLogIndex = 0;\n return buffer;\n }\n\n function markTaskStart(task, ms) {\n if (enableProfiling) {\n profilingState[QUEUE_SIZE]++;\n\n if (eventLog !== null) {\n // performance.now returns a float, representing milliseconds. When the\n // event is logged, it's coerced to an int. Convert to microseconds to\n // maintain extra degrees of precision.\n logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);\n }\n }\n }\n\n function markTaskCompleted(task, ms) {\n if (enableProfiling) {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCompleteEvent, ms * 1000, task.id]);\n }\n }\n }\n\n function markTaskCanceled(task, ms) {\n if (enableProfiling) {\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCancelEvent, ms * 1000, task.id]);\n }\n }\n }\n\n function markTaskErrored(task, ms) {\n if (enableProfiling) {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskErrorEvent, ms * 1000, task.id]);\n }\n }\n }\n\n function markTaskRun(task, ms) {\n if (enableProfiling) {\n runIdCounter++;\n profilingState[PRIORITY] = task.priorityLevel;\n profilingState[CURRENT_TASK_ID] = task.id;\n profilingState[CURRENT_RUN_ID] = runIdCounter;\n\n if (eventLog !== null) {\n logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n }\n\n function markTaskYield(task, ms) {\n if (enableProfiling) {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[CURRENT_RUN_ID] = 0;\n\n if (eventLog !== null) {\n logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n }\n\n function markSchedulerSuspended(ms) {\n if (enableProfiling) {\n mainThreadIdCounter++;\n\n if (eventLog !== null) {\n logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n }\n\n function markSchedulerUnsuspended(ms) {\n if (enableProfiling) {\n if (eventLog !== null) {\n logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n }\n /* eslint-disable no-var */\n // Math.pow(2, 30) - 1\n // 0b111111111111111111111111111111\n\n\n var maxSigned31BitInt = 1073741823; // Times out immediately\n\n var IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\n var USER_BLOCKING_PRIORITY = 250;\n var NORMAL_PRIORITY_TIMEOUT = 5000;\n var LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\n var IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap\n\n var taskQueue = [];\n var timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\n var taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\n\n var isSchedulerPaused = false;\n var currentTask = null;\n var currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.\n\n var isPerformingWork = false;\n var isHostCallbackScheduled = false;\n var isHostTimeoutScheduled = false;\n\n function advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n\n if (enableProfiling) {\n markTaskStart(timer, currentTime);\n timer.isQueued = true;\n }\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n }\n\n function handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n\n _requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n }\n\n function flushWork(hasTimeRemaining, initialTime) {\n if (enableProfiling) {\n markSchedulerUnsuspended(initialTime);\n } // We'll need a host callback the next time work is scheduled.\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod codepath.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n\n if (enableProfiling) {\n var _currentTime = exports.unstable_now();\n\n markSchedulerSuspended(_currentTime);\n }\n }\n }\n\n function workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging && isSchedulerPaused)) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (callback !== null) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n markTaskRun(currentTask, currentTime);\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n markTaskYield(currentTask, currentTime);\n } else {\n if (enableProfiling) {\n markTaskCompleted(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n }\n\n function unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n }\n\n function unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n }\n\n function unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n }\n\n function timeoutForPriorityLevel(priorityLevel) {\n switch (priorityLevel) {\n case ImmediatePriority:\n return IMMEDIATE_PRIORITY_TIMEOUT;\n\n case UserBlockingPriority:\n return USER_BLOCKING_PRIORITY;\n\n case IdlePriority:\n return IDLE_PRIORITY;\n\n case LowPriority:\n return LOW_PRIORITY_TIMEOUT;\n\n case NormalPriority:\n default:\n return NORMAL_PRIORITY_TIMEOUT;\n }\n }\n\n function unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n var timeout;\n\n if (_typeof(options) === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n\n timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);\n } else {\n timeout = timeoutForPriorityLevel(priorityLevel);\n startTime = currentTime;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n if (enableProfiling) {\n newTask.isQueued = false;\n }\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n\n if (enableProfiling) {\n markTaskStart(newTask, currentTime);\n newTask.isQueued = true;\n } // Schedule a host callback, if needed. If we're already performing work,\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n\n _requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n }\n\n function unstable_pauseExecution() {\n isSchedulerPaused = true;\n }\n\n function unstable_continueExecution() {\n isSchedulerPaused = false;\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n\n _requestHostCallback(flushWork);\n }\n }\n\n function unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n }\n\n function unstable_cancelCallback(task) {\n if (enableProfiling) {\n if (task.isQueued) {\n var currentTime = exports.unstable_now();\n markTaskCanceled(task, currentTime);\n task.isQueued = false;\n }\n } // Null out the callback to indicate the task has been canceled. (Can't\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n }\n\n function unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n }\n\n function unstable_shouldYield() {\n var currentTime = exports.unstable_now();\n advanceTimers(currentTime);\n var firstTask = peek(taskQueue);\n return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();\n }\n\n var unstable_requestPaint = requestPaint;\n var unstable_Profiling = enableProfiling ? {\n startLoggingProfilingEvents: startLoggingProfilingEvents,\n stopLoggingProfilingEvents: stopLoggingProfilingEvents,\n sharedProfilingBuffer: sharedProfilingBuffer\n } : null;\n exports.unstable_ImmediatePriority = ImmediatePriority;\n exports.unstable_UserBlockingPriority = UserBlockingPriority;\n exports.unstable_NormalPriority = NormalPriority;\n exports.unstable_IdlePriority = IdlePriority;\n exports.unstable_LowPriority = LowPriority;\n exports.unstable_runWithPriority = unstable_runWithPriority;\n exports.unstable_next = unstable_next;\n exports.unstable_scheduleCallback = unstable_scheduleCallback;\n exports.unstable_cancelCallback = unstable_cancelCallback;\n exports.unstable_wrapCallback = unstable_wrapCallback;\n exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\n exports.unstable_shouldYield = unstable_shouldYield;\n exports.unstable_requestPaint = unstable_requestPaint;\n exports.unstable_continueExecution = unstable_continueExecution;\n exports.unstable_pauseExecution = unstable_pauseExecution;\n exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\n exports.unstable_Profiling = unstable_Profiling;\n })();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcz9iYWNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4xOC4wXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyA9IGZhbHNlO1xudmFyIGVuYWJsZUlzSW5wdXRQZW5kaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gdHJ1ZTtcblxudmFyIHJlcXVlc3RIb3N0Q2FsbGJhY2s7XG5cbnZhciByZXF1ZXN0SG9zdFRpbWVvdXQ7XG52YXIgY2FuY2VsSG9zdFRpbWVvdXQ7XG52YXIgc2hvdWxkWWllbGRUb0hvc3Q7XG52YXIgcmVxdWVzdFBhaW50O1xuXG5cblxuaWYgKCAvLyBJZiBTY2hlZHVsZXIgcnVucyBpbiBhIG5vbi1ET00gZW52aXJvbm1lbnQsIGl0IGZhbGxzIGJhY2sgdG8gYSBuYWl2ZVxuLy8gaW1wbGVtZW50YXRpb24gdXNpbmcgc2V0VGltZW91dC5cbnR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IC8vIENoZWNrIGlmIE1lc3NhZ2VDaGFubmVsIGlzIHN1cHBvcnRlZCwgdG9vLlxudHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAnZnVuY3Rpb24nKSB7XG4gIC8vIElmIHRoaXMgYWNjaWRlbnRhbGx5IGdldHMgaW1wb3J0ZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgZS5nLiBKYXZhU2NyaXB0Q29yZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgdmFyIF9jYWxsYmFjayA9IG51bGw7XG4gIHZhciBfdGltZW91dElEID0gbnVsbDtcblxuICB2YXIgX2ZsdXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgdmFyIGhhc1JlbWFpbmluZ1RpbWUgPSB0cnVlO1xuXG4gICAgICAgIF9jYWxsYmFjayhoYXNSZW1haW5pbmdUaW1lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBpbml0aWFsVGltZSA9IERhdGUubm93KCk7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBzaG91bGRZaWVsZFRvSG9zdCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmVxdWVzdFBhaW50ID0gZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uICgpIHt9O1xufSBlbHNlIHtcbiAgLy8gQ2FwdHVyZSBsb2NhbCByZWZlcmVuY2VzIHRvIG5hdGl2ZSBBUElzLCBpbiBjYXNlIGEgcG9seWZpbGwgb3ZlcnJpZGVzIHRoZW0uXG4gIHZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgdmFyIF9EYXRlID0gd2luZG93LkRhdGU7XG4gIHZhciBfc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0O1xuICB2YXIgX2NsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQ7XG5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFNjaGVkdWxlciBubyBsb25nZXIgcmVxdWlyZXMgdGhlc2UgbWV0aG9kcyB0byBiZSBwb2x5ZmlsbGVkLiBCdXRcbiAgICAvLyBtYXliZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdhcm5pbmcgaWYgdGhleSBkb24ndCBleGlzdCwgdG8gcHJlc2VydmUgdGhlXG4gICAgLy8gb3B0aW9uIHRvIHJlbHkgb24gaXQgaW4gdGhlIGZ1dHVyZT9cbiAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7IC8vIFRPRE86IFJlbW92ZSBmYi5tZSBsaW5rXG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9mYi5tZS9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2luaXRpYWxUaW1lID0gX0RhdGUubm93KCk7XG5cbiAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfRGF0ZS5ub3coKSAtIF9pbml0aWFsVGltZTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuICAvLyBUT0RPOiBBZGp1c3QgdGhpcyBiYXNlZCBvbiBwcmlvcml0eT9cblxuICB2YXIgbWF4WWllbGRJbnRlcnZhbCA9IDMwMDtcbiAgdmFyIG5lZWRzUGFpbnQgPSBmYWxzZTtcblxuICBpZiAoZW5hYmxlSXNJbnB1dFBlbmRpbmcgJiYgbmF2aWdhdG9yICE9PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnNjaGVkdWxpbmcgIT09IHVuZGVmaW5lZCAmJiBuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHNjaGVkdWxpbmcgPSBuYXZpZ2F0b3Iuc2NoZWR1bGluZztcblxuICAgIHNob3VsZFlpZWxkVG9Ib3N0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IGRlYWRsaW5lKSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gdGltZSBsZWZ0LiBXZSBtYXkgd2FudCB0byB5aWVsZCBjb250cm9sIG9mIHRoZSBtYWluXG4gICAgICAgIC8vIHRocmVhZCwgc28gdGhlIGJyb3dzZXIgY2FuIHBlcmZvcm0gaGlnaCBwcmlvcml0eSB0YXNrcy4gVGhlIG1haW4gb25lc1xuICAgICAgICAvLyBhcmUgcGFpbnRpbmcgYW5kIHVzZXIgaW5wdXQuIElmIHRoZXJlJ3MgYSBwZW5kaW5nIHBhaW50IG9yIGEgcGVuZGluZ1xuICAgICAgICAvLyBpbnB1dCwgdGhlbiB3ZSBzaG91bGQgeWllbGQuIEJ1dCBpZiB0aGVyZSdzIG5laXRoZXIsIHRoZW4gd2UgY2FuXG4gICAgICAgIC8vIHlpZWxkIGxlc3Mgb2Z0ZW4gd2hpbGUgcmVtYWluaW5nIHJlc3BvbnNpdmUuIFdlJ2xsIGV2ZW50dWFsbHkgeWllbGRcbiAgICAgICAgLy8gcmVnYXJkbGVzcywgc2luY2UgdGhlcmUgY291bGQgYmUgYSBwZW5kaW5nIHBhaW50IHRoYXQgd2Fzbid0XG4gICAgICAgIC8vIGFjY29tcGFuaWVkIGJ5IGEgY2FsbCB0byBgcmVxdWVzdFBhaW50YCwgb3Igb3RoZXIgbWFpbiB0aHJlYWQgdGFza3NcbiAgICAgICAgLy8gbGlrZSBuZXR3b3JrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5lZWRzUGFpbnQgfHwgc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZygpKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgZWl0aGVyIGEgcGVuZGluZyBwYWludCBvciBhIHBlbmRpbmcgaW5wdXQuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gVGhlcmUncyBubyBwZW5kaW5nIGlucHV0LiBPbmx5IHlpZWxkIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heFxuICAgICAgICAvLyB5aWVsZCBpbnRlcnZhbC5cblxuXG4gICAgICAgIHJldHVybiBjdXJyZW50VGltZSA+PSBtYXhZaWVsZEludGVydmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUncyBzdGlsbCB0aW1lIGxlZnQgaW4gdGhlIGZyYW1lLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5lZWRzUGFpbnQgPSB0cnVlO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gYGlzSW5wdXRQZW5kaW5nYCBpcyBub3QgYXZhaWxhYmxlLiBTaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmXG4gICAgLy8gdGhlcmUncyBwZW5kaW5nIGlucHV0LCBhbHdheXMgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgc2hvdWxkWWllbGRUb0hvc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSA+PSBkZWFkbGluZTtcbiAgICB9OyAvLyBTaW5jZSB3ZSB5aWVsZCBldmVyeSBmcmFtZSByZWdhcmRsZXNzLCBgcmVxdWVzdFBhaW50YCBoYXMgbm8gZWZmZWN0LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3QgdW5zdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnBzID4gMCkge1xuICAgICAgeWllbGRJbnRlcnZhbCA9IE1hdGguZmxvb3IoMTAwMCAvIGZwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7IC8vIFlpZWxkIGFmdGVyIGB5aWVsZEludGVydmFsYCBtcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHZzeW5jXG4gICAgICAvLyBjeWNsZS4gVGhpcyBtZWFucyB0aGVyZSdzIGFsd2F5cyB0aW1lIHJlbWFpbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAgICAvLyB0aGUgbWVzc2FnZSBldmVudC5cblxuICAgICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKCFoYXNNb3JlV29yaykge1xuICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgICAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbiAgICAvLyByZXNldCB0aGlzLlxuXG5cbiAgICBuZWVkc1BhaW50ID0gZmFsc2U7XG4gIH07XG5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICBpZiAoIWlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IHRydWU7XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgdGFza1RpbWVvdXRJRCA9IF9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgIH0sIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuXG4gICAgdGFza1RpbWVvdXRJRCA9IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgc2lmdFVwKGhlYXAsIG5vZGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuICByZXR1cm4gZmlyc3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBmaXJzdDtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG5cbiAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbGFzdCA9IGhlYXAucG9wKCk7XG5cbiAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgc2lmdERvd24oaGVhcCwgbGFzdCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnRVcChoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBNYXRoLmZsb29yKChpbmRleCAtIDEpIC8gMik7XG4gICAgdmFyIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocGFyZW50LCBub2RlKSA+IDApIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbGFyZ2VyLiBTd2FwIHBvc2l0aW9ucy5cbiAgICAgIGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZTtcbiAgICAgIGhlYXBbaW5kZXhdID0gcGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG4gIHZhciBsZW5ndGggPSBoZWFwLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUobGVmdCwgbm9kZSkgPCAwKSB7XG4gICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBsZWZ0KSA8IDApIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gbGVmdDtcbiAgICAgICAgaGVhcFtsZWZ0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSBsZWZ0SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIG5vZGUpIDwgMCkge1xuICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGNoaWxkIGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAvLyBDb21wYXJlIHNvcnQgaW5kZXggZmlyc3QsIHRoZW4gdGFzayBpZC5cbiAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICByZXR1cm4gZGlmZiAhPT0gMCA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbn1cblxuLy8gVE9ETzogVXNlIHN5bWJvbHM/XG52YXIgTm9Qcmlvcml0eSA9IDA7XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDM7XG52YXIgTG93UHJpb3JpdHkgPSA0O1xudmFyIElkbGVQcmlvcml0eSA9IDU7XG5cbnZhciBydW5JZENvdW50ZXIgPSAwO1xudmFyIG1haW5UaHJlYWRJZENvdW50ZXIgPSAwO1xudmFyIHByb2ZpbGluZ1N0YXRlU2l6ZSA9IDQ7XG52YXIgc2hhcmVkUHJvZmlsaW5nQnVmZmVyID0gZW5hYmxlUHJvZmlsaW5nID8gLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCBTaGFyZWRBcnJheUJ1ZmZlclxudHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nID8gbmV3IFNoYXJlZEFycmF5QnVmZmVyKHByb2ZpbGluZ1N0YXRlU2l6ZSAqIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpIDogLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCBBcnJheUJ1ZmZlclxudHlwZW9mIEFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nID8gbmV3IEFycmF5QnVmZmVyKHByb2ZpbGluZ1N0YXRlU2l6ZSAqIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpIDogbnVsbCAvLyBEb24ndCBjcmFzaCB0aGUgaW5pdCBwYXRoIG9uIElFOVxuOiBudWxsO1xudmFyIHByb2ZpbGluZ1N0YXRlID0gZW5hYmxlUHJvZmlsaW5nICYmIHNoYXJlZFByb2ZpbGluZ0J1ZmZlciAhPT0gbnVsbCA/IG5ldyBJbnQzMkFycmF5KHNoYXJlZFByb2ZpbGluZ0J1ZmZlcikgOiBbXTsgLy8gV2UgY2FuJ3QgcmVhZCB0aGlzIGJ1dCBpdCBoZWxwcyBzYXZlIGJ5dGVzIGZvciBudWxsIGNoZWNrc1xuXG52YXIgUFJJT1JJVFkgPSAwO1xudmFyIENVUlJFTlRfVEFTS19JRCA9IDE7XG52YXIgQ1VSUkVOVF9SVU5fSUQgPSAyO1xudmFyIFFVRVVFX1NJWkUgPSAzO1xuXG5pZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gIHByb2ZpbGluZ1N0YXRlW1BSSU9SSVRZXSA9IE5vUHJpb3JpdHk7IC8vIFRoaXMgaXMgbWFpbnRhaW5lZCB3aXRoIGEgY291bnRlciwgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgcHJpb3JpdHkgcXVldWVcbiAgLy8gYXJyYXkgbWlnaHQgaW5jbHVkZSBjYW5jZWxlZCB0YXNrcy5cblxuICBwcm9maWxpbmdTdGF0ZVtRVUVVRV9TSVpFXSA9IDA7XG4gIHByb2ZpbGluZ1N0YXRlW0NVUlJFTlRfVEFTS19JRF0gPSAwO1xufSAvLyBCeXRlcyBwZXIgZWxlbWVudCBpcyA0XG5cblxudmFyIElOSVRJQUxfRVZFTlRfTE9HX1NJWkUgPSAxMzEwNzI7XG52YXIgTUFYX0VWRU5UX0xPR19TSVpFID0gNTI0Mjg4OyAvLyBFcXVpdmFsZW50IHRvIDIgbWVnYWJ5dGVzXG5cbnZhciBldmVudExvZ1NpemUgPSAwO1xudmFyIGV2ZW50TG9nQnVmZmVyID0gbnVsbDtcbnZhciBldmVudExvZyA9IG51bGw7XG52YXIgZXZlbnRMb2dJbmRleCA9IDA7XG52YXIgVGFza1N0YXJ0RXZlbnQgPSAxO1xudmFyIFRhc2tDb21wbGV0ZUV2ZW50ID0gMjtcbnZhciBUYXNrRXJyb3JFdmVudCA9IDM7XG52YXIgVGFza0NhbmNlbEV2ZW50ID0gNDtcbnZhciBUYXNrUnVuRXZlbnQgPSA1O1xudmFyIFRhc2tZaWVsZEV2ZW50ID0gNjtcbnZhciBTY2hlZHVsZXJTdXNwZW5kRXZlbnQgPSA3O1xudmFyIFNjaGVkdWxlclJlc3VtZUV2ZW50ID0gODtcblxuZnVuY3Rpb24gbG9nRXZlbnQoZW50cmllcykge1xuICBpZiAoZXZlbnRMb2cgIT09IG51bGwpIHtcbiAgICB2YXIgb2Zmc2V0ID0gZXZlbnRMb2dJbmRleDtcbiAgICBldmVudExvZ0luZGV4ICs9IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgaWYgKGV2ZW50TG9nSW5kZXggKyAxID4gZXZlbnRMb2dTaXplKSB7XG4gICAgICBldmVudExvZ1NpemUgKj0gMjtcblxuICAgICAgaWYgKGV2ZW50TG9nU2l6ZSA+IE1BWF9FVkVOVF9MT0dfU0laRSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiU2NoZWR1bGVyIFByb2ZpbGluZzogRXZlbnQgbG9nIGV4Y2VlZGVkIG1heGltdW0gc2l6ZS4gRG9uJ3QgXCIgKyAnZm9yZ2V0IHRvIGNhbGwgYHN0b3BMb2dnaW5nUHJvZmlsaW5nRXZlbnRzKClgLicpO1xuICAgICAgICBzdG9wTG9nZ2luZ1Byb2ZpbGluZ0V2ZW50cygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdFdmVudExvZyA9IG5ldyBJbnQzMkFycmF5KGV2ZW50TG9nU2l6ZSAqIDQpO1xuICAgICAgbmV3RXZlbnRMb2cuc2V0KGV2ZW50TG9nKTtcbiAgICAgIGV2ZW50TG9nQnVmZmVyID0gbmV3RXZlbnRMb2cuYnVmZmVyO1xuICAgICAgZXZlbnRMb2cgPSBuZXdFdmVudExvZztcbiAgICB9XG5cbiAgICBldmVudExvZy5zZXQoZW50cmllcywgb2Zmc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydExvZ2dpbmdQcm9maWxpbmdFdmVudHMoKSB7XG4gIGV2ZW50TG9nU2l6ZSA9IElOSVRJQUxfRVZFTlRfTE9HX1NJWkU7XG4gIGV2ZW50TG9nQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGV2ZW50TG9nU2l6ZSAqIDQpO1xuICBldmVudExvZyA9IG5ldyBJbnQzMkFycmF5KGV2ZW50TG9nQnVmZmVyKTtcbiAgZXZlbnRMb2dJbmRleCA9IDA7XG59XG5mdW5jdGlvbiBzdG9wTG9nZ2luZ1Byb2ZpbGluZ0V2ZW50cygpIHtcbiAgdmFyIGJ1ZmZlciA9IGV2ZW50TG9nQnVmZmVyO1xuICBldmVudExvZ1NpemUgPSAwO1xuICBldmVudExvZ0J1ZmZlciA9IG51bGw7XG4gIGV2ZW50TG9nID0gbnVsbDtcbiAgZXZlbnRMb2dJbmRleCA9IDA7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiBtYXJrVGFza1N0YXJ0KHRhc2ssIG1zKSB7XG4gIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICBwcm9maWxpbmdTdGF0ZVtRVUVVRV9TSVpFXSsrO1xuXG4gICAgaWYgKGV2ZW50TG9nICE9PSBudWxsKSB7XG4gICAgICAvLyBwZXJmb3JtYW5jZS5ub3cgcmV0dXJucyBhIGZsb2F0LCByZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzLiBXaGVuIHRoZVxuICAgICAgLy8gZXZlbnQgaXMgbG9nZ2VkLCBpdCdzIGNvZXJjZWQgdG8gYW4gaW50LiBDb252ZXJ0IHRvIG1pY3Jvc2Vjb25kcyB0b1xuICAgICAgLy8gbWFpbnRhaW4gZXh0cmEgZGVncmVlcyBvZiBwcmVjaXNpb24uXG4gICAgICBsb2dFdmVudChbVGFza1N0YXJ0RXZlbnQsIG1zICogMTAwMCwgdGFzay5pZCwgdGFzay5wcmlvcml0eUxldmVsXSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrVGFza0NvbXBsZXRlZCh0YXNrLCBtcykge1xuICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgcHJvZmlsaW5nU3RhdGVbUFJJT1JJVFldID0gTm9Qcmlvcml0eTtcbiAgICBwcm9maWxpbmdTdGF0ZVtDVVJSRU5UX1RBU0tfSURdID0gMDtcbiAgICBwcm9maWxpbmdTdGF0ZVtRVUVVRV9TSVpFXS0tO1xuXG4gICAgaWYgKGV2ZW50TG9nICE9PSBudWxsKSB7XG4gICAgICBsb2dFdmVudChbVGFza0NvbXBsZXRlRXZlbnQsIG1zICogMTAwMCwgdGFzay5pZF0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1Rhc2tDYW5jZWxlZCh0YXNrLCBtcykge1xuICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgcHJvZmlsaW5nU3RhdGVbUVVFVUVfU0laRV0tLTtcblxuICAgIGlmIChldmVudExvZyAhPT0gbnVsbCkge1xuICAgICAgbG9nRXZlbnQoW1Rhc2tDYW5jZWxFdmVudCwgbXMgKiAxMDAwLCB0YXNrLmlkXSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbiAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgIHByb2ZpbGluZ1N0YXRlW1BSSU9SSVRZXSA9IE5vUHJpb3JpdHk7XG4gICAgcHJvZmlsaW5nU3RhdGVbQ1VSUkVOVF9UQVNLX0lEXSA9IDA7XG4gICAgcHJvZmlsaW5nU3RhdGVbUVVFVUVfU0laRV0tLTtcblxuICAgIGlmIChldmVudExvZyAhPT0gbnVsbCkge1xuICAgICAgbG9nRXZlbnQoW1Rhc2tFcnJvckV2ZW50LCBtcyAqIDEwMDAsIHRhc2suaWRdKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtUYXNrUnVuKHRhc2ssIG1zKSB7XG4gIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICBydW5JZENvdW50ZXIrKztcbiAgICBwcm9maWxpbmdTdGF0ZVtQUklPUklUWV0gPSB0YXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgcHJvZmlsaW5nU3RhdGVbQ1VSUkVOVF9UQVNLX0lEXSA9IHRhc2suaWQ7XG4gICAgcHJvZmlsaW5nU3RhdGVbQ1VSUkVOVF9SVU5fSURdID0gcnVuSWRDb3VudGVyO1xuXG4gICAgaWYgKGV2ZW50TG9nICE9PSBudWxsKSB7XG4gICAgICBsb2dFdmVudChbVGFza1J1bkV2ZW50LCBtcyAqIDEwMDAsIHRhc2suaWQsIHJ1bklkQ291bnRlcl0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1Rhc2tZaWVsZCh0YXNrLCBtcykge1xuICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgcHJvZmlsaW5nU3RhdGVbUFJJT1JJVFldID0gTm9Qcmlvcml0eTtcbiAgICBwcm9maWxpbmdTdGF0ZVtDVVJSRU5UX1RBU0tfSURdID0gMDtcbiAgICBwcm9maWxpbmdTdGF0ZVtDVVJSRU5UX1JVTl9JRF0gPSAwO1xuXG4gICAgaWYgKGV2ZW50TG9nICE9PSBudWxsKSB7XG4gICAgICBsb2dFdmVudChbVGFza1lpZWxkRXZlbnQsIG1zICogMTAwMCwgdGFzay5pZCwgcnVuSWRDb3VudGVyXSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrU2NoZWR1bGVyU3VzcGVuZGVkKG1zKSB7XG4gIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICBtYWluVGhyZWFkSWRDb3VudGVyKys7XG5cbiAgICBpZiAoZXZlbnRMb2cgIT09IG51bGwpIHtcbiAgICAgIGxvZ0V2ZW50KFtTY2hlZHVsZXJTdXNwZW5kRXZlbnQsIG1zICogMTAwMCwgbWFpblRocmVhZElkQ291bnRlcl0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1NjaGVkdWxlclVuc3VzcGVuZGVkKG1zKSB7XG4gIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICBpZiAoZXZlbnRMb2cgIT09IG51bGwpIHtcbiAgICAgIGxvZ0V2ZW50KFtTY2hlZHVsZXJSZXN1bWVFdmVudCwgbXMgKiAxMDAwLCBtYWluVGhyZWFkSWRDb3VudGVyXSk7XG4gICAgfVxuICB9XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWSA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDsgLy8gTmV2ZXIgdGltZXMgb3V0XG5cbnZhciBJRExFX1BSSU9SSVRZID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuXG52YXIgaXNTY2hlZHVsZXJQYXVzZWQgPSBmYWxzZTtcbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmN5LlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIC8vIENoZWNrIGZvciB0YXNrcyB0aGF0IGFyZSBubyBsb25nZXIgZGVsYXllZCBhbmQgYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICB2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gIHdoaWxlICh0aW1lciAhPT0gbnVsbCkge1xuICAgIGlmICh0aW1lci5jYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGltZXIgd2FzIGNhbmNlbGxlZC5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGltZXIgZmlyZWQuIFRyYW5zZmVyIHRvIHRoZSB0YXNrIHF1ZXVlLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgdGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWU7XG4gICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICAgIG1hcmtUYXNrU3RhcnQodGltZXIsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgdGltZXIuaXNRdWV1ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1haW5pbmcgdGltZXJzIGFyZSBwZW5kaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgIT09IG51bGwpIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoV29yayhoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgbWFya1NjaGVkdWxlclVuc3VzcGVuZGVkKGluaXRpYWxUaW1lKTtcbiAgfSAvLyBXZSdsbCBuZWVkIGEgaG9zdCBjYWxsYmFjayB0aGUgbmV4dCB0aW1lIHdvcmsgaXMgc2NoZWR1bGVkLlxuXG5cbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgIC8vIFdlIHNjaGVkdWxlZCBhIHRpbWVvdXQgYnV0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gQ2FuY2VsIGl0LlxuICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nV29yayA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgIG1hcmtUYXNrRXJyb3JlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG5cbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB2YXIgX2N1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgbWFya1NjaGVkdWxlclN1c3BlbmRlZChfY3VycmVudFRpbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyAmJiBpc1NjaGVkdWxlclBhdXNlZCkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgc2hvdWxkWWllbGRUb0hvc3QoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuICAgICAgbWFya1Rhc2tSdW4oY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICAgIG1hcmtUYXNrWWllbGQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgICAgICBtYXJrVGFza0NvbXBsZXRlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSkge1xuICAgICAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfbmV4dChldmVudEhhbmRsZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWw7XG5cbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEFueXRoaW5nIGxvd2VyIHRoYW4gbm9ybWFsIHByaW9yaXR5IHNob3VsZCByZW1haW4gYXQgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXBDYWxsYmFjayhjYWxsYmFjaykge1xuICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0aW1lb3V0Rm9yUHJpb3JpdHlMZXZlbChwcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQ7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJRExFX1BSSU9SSVRZO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHJldHVybiBMT1dfUFJJT1JJVFlfVElNRU9VVDtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG4gIHZhciB0aW1lb3V0O1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIHZhciBkZWxheSA9IG9wdGlvbnMuZGVsYXk7XG5cbiAgICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lICsgZGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIHRpbWVvdXQgPSB0eXBlb2Ygb3B0aW9ucy50aW1lb3V0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMudGltZW91dCA6IHRpbWVvdXRGb3JQcmlvcml0eUxldmVsKHByaW9yaXR5TGV2ZWwpO1xuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSB0aW1lb3V0Rm9yUHJpb3JpdHlMZXZlbChwcmlvcml0eUxldmVsKTtcbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgbmV3VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgbWFya1Rhc2tTdGFydChuZXdUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICBuZXdUYXNrLmlzUXVldWVkID0gdHJ1ZTtcbiAgICB9IC8vIFNjaGVkdWxlIGEgaG9zdCBjYWxsYmFjaywgaWYgbmVlZGVkLiBJZiB3ZSdyZSBhbHJlYWR5IHBlcmZvcm1pbmcgd29yayxcbiAgICAvLyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG5cblxuICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3VGFzaztcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcGF1c2VFeGVjdXRpb24oKSB7XG4gIGlzU2NoZWR1bGVyUGF1c2VkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY29udGludWVFeGVjdXRpb24oKSB7XG4gIGlzU2NoZWR1bGVyUGF1c2VkID0gZmFsc2U7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKHRhc2spIHtcbiAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgIGlmICh0YXNrLmlzUXVldWVkKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgbWFya1Rhc2tDYW5jZWxlZCh0YXNrLCBjdXJyZW50VGltZSk7XG4gICAgICB0YXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgfVxuICB9IC8vIE51bGwgb3V0IHRoZSBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGUgdGFzayBoYXMgYmVlbiBjYW5jZWxlZC4gKENhbid0XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBxdWV1ZSBiZWNhdXNlIHlvdSBjYW4ndCByZW1vdmUgYXJiaXRyYXJ5IG5vZGVzIGZyb20gYW5cbiAgLy8gYXJyYXkgYmFzZWQgaGVhcCwgb25seSB0aGUgZmlyc3Qgb25lLilcblxuXG4gIHRhc2suY2FsbGJhY2sgPSBudWxsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zaG91bGRZaWVsZCgpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIHZhciBmaXJzdFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIHJldHVybiBmaXJzdFRhc2sgIT09IGN1cnJlbnRUYXNrICYmIGN1cnJlbnRUYXNrICE9PSBudWxsICYmIGZpcnN0VGFzayAhPT0gbnVsbCAmJiBmaXJzdFRhc2suY2FsbGJhY2sgIT09IG51bGwgJiYgZmlyc3RUYXNrLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSAmJiBmaXJzdFRhc2suZXhwaXJhdGlvblRpbWUgPCBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSB8fCBzaG91bGRZaWVsZFRvSG9zdCgpO1xufVxuXG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gcmVxdWVzdFBhaW50O1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9IGVuYWJsZVByb2ZpbGluZyA/IHtcbiAgc3RhcnRMb2dnaW5nUHJvZmlsaW5nRXZlbnRzOiBzdGFydExvZ2dpbmdQcm9maWxpbmdFdmVudHMsXG4gIHN0b3BMb2dnaW5nUHJvZmlsaW5nRXZlbnRzOiBzdG9wTG9nZ2luZ1Byb2ZpbGluZ0V2ZW50cyxcbiAgc2hhcmVkUHJvZmlsaW5nQnVmZmVyOiBzaGFyZWRQcm9maWxpbmdCdWZmZXJcbn0gOiBudWxsO1xuXG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSBMb3dQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gdW5zdGFibGVfbmV4dDtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSB1bnN0YWJsZV9zaG91bGRZaWVsZDtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG4gIH0pKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQVNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBckRBO0FBdURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBdkJBO0FBQ0E7QUF5QkE7QUFDQTtBQURBO0FBN0JBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4QkE7QUEwQkE7QUEzQkE7QUE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7QUFDQTtBQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5VEE7QUFDQTtBQUNBO0FBZ1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1VkE7QUFDQTtBQUNBO0FBOFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBaEJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQXhDQTtBQUNBO0FBQ0E7QUEwQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQU5BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdjNCQTtBQXkzQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/scheduler/cjs/scheduler.development.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/cjs/scheduler.production.min.js": -/*!*****************************************************************!*\ - !*** ../node_modules/scheduler/cjs/scheduler.production.min.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/** @license React v0.18.0\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: !0\n});\n\nvar _f, g, h, k, l;\n\nif (\"undefined\" === typeof window || \"function\" !== typeof MessageChannel) {\n var p = null,\n q = null,\n t = function t() {\n if (null !== p) try {\n var a = exports.unstable_now();\n p(!0, a);\n p = null;\n } catch (b) {\n throw setTimeout(t, 0), b;\n }\n },\n u = Date.now();\n\n exports.unstable_now = function () {\n return Date.now() - u;\n };\n\n _f = function f(a) {\n null !== p ? setTimeout(_f, 0, a) : (p = a, setTimeout(t, 0));\n };\n\n g = function g(a, b) {\n q = setTimeout(a, b);\n };\n\n h = function h() {\n clearTimeout(q);\n };\n\n k = function k() {\n return !1;\n };\n\n l = exports.unstable_forceFrameRate = function () {};\n} else {\n var w = window.performance,\n x = window.Date,\n y = window.setTimeout,\n z = window.clearTimeout;\n\n if (\"undefined\" !== typeof console) {\n var A = window.cancelAnimationFrame;\n \"function\" !== typeof window.requestAnimationFrame && console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\n \"function\" !== typeof A && console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\n }\n\n if (\"object\" === _typeof(w) && \"function\" === typeof w.now) exports.unstable_now = function () {\n return w.now();\n };else {\n var B = x.now();\n\n exports.unstable_now = function () {\n return x.now() - B;\n };\n }\n var C = !1,\n D = null,\n E = -1,\n F = 5,\n G = 0;\n\n k = function k() {\n return exports.unstable_now() >= G;\n };\n\n l = function l() {};\n\n exports.unstable_forceFrameRate = function (a) {\n 0 > a || 125 < a ? console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\") : F = 0 < a ? Math.floor(1E3 / a) : 5;\n };\n\n var H = new MessageChannel(),\n I = H.port2;\n\n H.port1.onmessage = function () {\n if (null !== D) {\n var a = exports.unstable_now();\n G = a + F;\n\n try {\n D(!0, a) ? I.postMessage(null) : (C = !1, D = null);\n } catch (b) {\n throw I.postMessage(null), b;\n }\n } else C = !1;\n };\n\n _f = function _f(a) {\n D = a;\n C || (C = !0, I.postMessage(null));\n };\n\n g = function g(a, b) {\n E = y(function () {\n a(exports.unstable_now());\n }, b);\n };\n\n h = function h() {\n z(E);\n E = -1;\n };\n}\n\nfunction J(a, b) {\n var c = a.length;\n a.push(b);\n\n a: for (;;) {\n var d = Math.floor((c - 1) / 2),\n e = a[d];\n if (void 0 !== e && 0 < K(e, b)) a[d] = b, a[c] = e, c = d;else break a;\n }\n}\n\nfunction L(a) {\n a = a[0];\n return void 0 === a ? null : a;\n}\n\nfunction M(a) {\n var b = a[0];\n\n if (void 0 !== b) {\n var c = a.pop();\n\n if (c !== b) {\n a[0] = c;\n\n a: for (var d = 0, e = a.length; d < e;) {\n var m = 2 * (d + 1) - 1,\n n = a[m],\n v = m + 1,\n r = a[v];\n if (void 0 !== n && 0 > K(n, c)) void 0 !== r && 0 > K(r, n) ? (a[d] = r, a[v] = c, d = v) : (a[d] = n, a[m] = c, d = m);else if (void 0 !== r && 0 > K(r, c)) a[d] = r, a[v] = c, d = v;else break a;\n }\n }\n\n return b;\n }\n\n return null;\n}\n\nfunction K(a, b) {\n var c = a.sortIndex - b.sortIndex;\n return 0 !== c ? c : a.id - b.id;\n}\n\nvar N = [],\n O = [],\n P = 1,\n Q = null,\n R = 3,\n S = !1,\n T = !1,\n U = !1;\n\nfunction V(a) {\n for (var b = L(O); null !== b;) {\n if (null === b.callback) M(O);else if (b.startTime <= a) M(O), b.sortIndex = b.expirationTime, J(N, b);else break;\n b = L(O);\n }\n}\n\nfunction W(a) {\n U = !1;\n V(a);\n if (!T) if (null !== L(N)) T = !0, _f(X);else {\n var b = L(O);\n null !== b && g(W, b.startTime - a);\n }\n}\n\nfunction X(a, b) {\n T = !1;\n U && (U = !1, h());\n S = !0;\n var c = R;\n\n try {\n V(b);\n\n for (Q = L(N); null !== Q && (!(Q.expirationTime > b) || a && !k());) {\n var d = Q.callback;\n\n if (null !== d) {\n Q.callback = null;\n R = Q.priorityLevel;\n var e = d(Q.expirationTime <= b);\n b = exports.unstable_now();\n \"function\" === typeof e ? Q.callback = e : Q === L(N) && M(N);\n V(b);\n } else M(N);\n\n Q = L(N);\n }\n\n if (null !== Q) var m = !0;else {\n var n = L(O);\n null !== n && g(W, n.startTime - b);\n m = !1;\n }\n return m;\n } finally {\n Q = null, R = c, S = !1;\n }\n}\n\nfunction Y(a) {\n switch (a) {\n case 1:\n return -1;\n\n case 2:\n return 250;\n\n case 5:\n return 1073741823;\n\n case 4:\n return 1E4;\n\n default:\n return 5E3;\n }\n}\n\nvar Z = l;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_NormalPriority = 3;\nexports.unstable_IdlePriority = 5;\nexports.unstable_LowPriority = 4;\n\nexports.unstable_runWithPriority = function (a, b) {\n switch (a) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n\n default:\n a = 3;\n }\n\n var c = R;\n R = a;\n\n try {\n return b();\n } finally {\n R = c;\n }\n};\n\nexports.unstable_next = function (a) {\n switch (R) {\n case 1:\n case 2:\n case 3:\n var b = 3;\n break;\n\n default:\n b = R;\n }\n\n var c = R;\n R = b;\n\n try {\n return a();\n } finally {\n R = c;\n }\n};\n\nexports.unstable_scheduleCallback = function (a, b, c) {\n var d = exports.unstable_now();\n\n if (\"object\" === _typeof(c) && null !== c) {\n var e = c.delay;\n e = \"number\" === typeof e && 0 < e ? d + e : d;\n c = \"number\" === typeof c.timeout ? c.timeout : Y(a);\n } else c = Y(a), e = d;\n\n c = e + c;\n a = {\n id: P++,\n callback: b,\n priorityLevel: a,\n startTime: e,\n expirationTime: c,\n sortIndex: -1\n };\n e > d ? (a.sortIndex = e, J(O, a), null === L(N) && a === L(O) && (U ? h() : U = !0, g(W, e - d))) : (a.sortIndex = c, J(N, a), T || S || (T = !0, _f(X)));\n return a;\n};\n\nexports.unstable_cancelCallback = function (a) {\n a.callback = null;\n};\n\nexports.unstable_wrapCallback = function (a) {\n var b = R;\n return function () {\n var c = R;\n R = b;\n\n try {\n return a.apply(this, arguments);\n } finally {\n R = c;\n }\n };\n};\n\nexports.unstable_getCurrentPriorityLevel = function () {\n return R;\n};\n\nexports.unstable_shouldYield = function () {\n var a = exports.unstable_now();\n V(a);\n var b = L(N);\n return b !== Q && null !== Q && null !== b && null !== b.callback && b.startTime <= a && b.expirationTime < Q.expirationTime || k();\n};\n\nexports.unstable_requestPaint = Z;\n\nexports.unstable_continueExecution = function () {\n T || S || (T = !0, _f(X));\n};\n\nexports.unstable_pauseExecution = function () {};\n\nexports.unstable_getFirstCallbackNode = function () {\n return L(N);\n};\n\nexports.unstable_Profiling = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcz81MWQyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4xOC4wXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGYsZyxoLGssbDtcbmlmKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciBwPW51bGwscT1udWxsLHQ9ZnVuY3Rpb24oKXtpZihudWxsIT09cCl0cnl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtwKCEwLGEpO3A9bnVsbH1jYXRjaChiKXt0aHJvdyBzZXRUaW1lb3V0KHQsMCksYjt9fSx1PURhdGUubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS11fTtmPWZ1bmN0aW9uKGEpe251bGwhPT1wP3NldFRpbWVvdXQoZiwwLGEpOihwPWEsc2V0VGltZW91dCh0LDApKX07Zz1mdW5jdGlvbihhLGIpe3E9c2V0VGltZW91dChhLGIpfTtoPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHEpfTtrPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2w9ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbigpe319ZWxzZXt2YXIgdz13aW5kb3cucGVyZm9ybWFuY2UseD13aW5kb3cuRGF0ZSxcbnk9d2luZG93LnNldFRpbWVvdXQsej13aW5kb3cuY2xlYXJUaW1lb3V0O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgY29uc29sZSl7dmFyIEE9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzXCIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiBBJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9mYi5tZS9yZWFjdC1wb2x5ZmlsbHNcIil9aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIHcmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3Lm5vdylleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiB3Lm5vdygpfTtlbHNle3ZhciBCPXgubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4geC5ub3coKS1CfX12YXIgQz0hMSxEPW51bGwsRT0tMSxGPTUsRz0wO2s9ZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKT49R307bD1mdW5jdGlvbigpe307ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZXJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHVuc3VwcG9ydGVkXCIpOkY9MDxhP01hdGguZmxvb3IoMUUzL2EpOjV9O3ZhciBIPW5ldyBNZXNzYWdlQ2hhbm5lbCxJPUgucG9ydDI7SC5wb3J0MS5vbm1lc3NhZ2U9XG5mdW5jdGlvbigpe2lmKG51bGwhPT1EKXt2YXIgYT1leHBvcnRzLnVuc3RhYmxlX25vdygpO0c9YStGO3RyeXtEKCEwLGEpP0kucG9zdE1lc3NhZ2UobnVsbCk6KEM9ITEsRD1udWxsKX1jYXRjaChiKXt0aHJvdyBJLnBvc3RNZXNzYWdlKG51bGwpLGI7fX1lbHNlIEM9ITF9O2Y9ZnVuY3Rpb24oYSl7RD1hO0N8fChDPSEwLEkucG9zdE1lc3NhZ2UobnVsbCkpfTtnPWZ1bmN0aW9uKGEsYil7RT15KGZ1bmN0aW9uKCl7YShleHBvcnRzLnVuc3RhYmxlX25vdygpKX0sYil9O2g9ZnVuY3Rpb24oKXt6KEUpO0U9LTF9fWZ1bmN0aW9uIEooYSxiKXt2YXIgYz1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzspe3ZhciBkPU1hdGguZmxvb3IoKGMtMSkvMiksZT1hW2RdO2lmKHZvaWQgMCE9PWUmJjA8SyhlLGIpKWFbZF09YixhW2NdPWUsYz1kO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gTChhKXthPWFbMF07cmV0dXJuIHZvaWQgMD09PWE/bnVsbDphfVxuZnVuY3Rpb24gTShhKXt2YXIgYj1hWzBdO2lmKHZvaWQgMCE9PWIpe3ZhciBjPWEucG9wKCk7aWYoYyE9PWIpe2FbMF09YzthOmZvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlOyl7dmFyIG09MiooZCsxKS0xLG49YVttXSx2PW0rMSxyPWFbdl07aWYodm9pZCAwIT09biYmMD5LKG4sYykpdm9pZCAwIT09ciYmMD5LKHIsbik/KGFbZF09cixhW3ZdPWMsZD12KTooYVtkXT1uLGFbbV09YyxkPW0pO2Vsc2UgaWYodm9pZCAwIT09ciYmMD5LKHIsYykpYVtkXT1yLGFbdl09YyxkPXY7ZWxzZSBicmVhayBhfX1yZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBLKGEsYil7dmFyIGM9YS5zb3J0SW5kZXgtYi5zb3J0SW5kZXg7cmV0dXJuIDAhPT1jP2M6YS5pZC1iLmlkfXZhciBOPVtdLE89W10sUD0xLFE9bnVsbCxSPTMsUz0hMSxUPSExLFU9ITE7XG5mdW5jdGlvbiBWKGEpe2Zvcih2YXIgYj1MKE8pO251bGwhPT1iOyl7aWYobnVsbD09PWIuY2FsbGJhY2spTShPKTtlbHNlIGlmKGIuc3RhcnRUaW1lPD1hKU0oTyksYi5zb3J0SW5kZXg9Yi5leHBpcmF0aW9uVGltZSxKKE4sYik7ZWxzZSBicmVhaztiPUwoTyl9fWZ1bmN0aW9uIFcoYSl7VT0hMTtWKGEpO2lmKCFUKWlmKG51bGwhPT1MKE4pKVQ9ITAsZihYKTtlbHNle3ZhciBiPUwoTyk7bnVsbCE9PWImJmcoVyxiLnN0YXJ0VGltZS1hKX19XG5mdW5jdGlvbiBYKGEsYil7VD0hMTtVJiYoVT0hMSxoKCkpO1M9ITA7dmFyIGM9Ujt0cnl7VihiKTtmb3IoUT1MKE4pO251bGwhPT1RJiYoIShRLmV4cGlyYXRpb25UaW1lPmIpfHxhJiYhaygpKTspe3ZhciBkPVEuY2FsbGJhY2s7aWYobnVsbCE9PWQpe1EuY2FsbGJhY2s9bnVsbDtSPVEucHJpb3JpdHlMZXZlbDt2YXIgZT1kKFEuZXhwaXJhdGlvblRpbWU8PWIpO2I9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZT9RLmNhbGxiYWNrPWU6UT09PUwoTikmJk0oTik7VihiKX1lbHNlIE0oTik7UT1MKE4pfWlmKG51bGwhPT1RKXZhciBtPSEwO2Vsc2V7dmFyIG49TChPKTtudWxsIT09biYmZyhXLG4uc3RhcnRUaW1lLWIpO209ITF9cmV0dXJuIG19ZmluYWxseXtRPW51bGwsUj1jLFM9ITF9fVxuZnVuY3Rpb24gWShhKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybi0xO2Nhc2UgMjpyZXR1cm4gMjUwO2Nhc2UgNTpyZXR1cm4gMTA3Mzc0MTgyMztjYXNlIDQ6cmV0dXJuIDFFNDtkZWZhdWx0OnJldHVybiA1RTN9fXZhciBaPWw7ZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7ZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NTtleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQ7ZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OmE9M312YXIgYz1SO1I9YTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e1I9Y319O1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGEpe3N3aXRjaChSKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgYj0zO2JyZWFrO2RlZmF1bHQ6Yj1SfXZhciBjPVI7Uj1iO3RyeXtyZXR1cm4gYSgpfWZpbmFsbHl7Uj1jfX07XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWV4cG9ydHMudW5zdGFibGVfbm93KCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7dmFyIGU9Yy5kZWxheTtlPVwibnVtYmVyXCI9PT10eXBlb2YgZSYmMDxlP2QrZTpkO2M9XCJudW1iZXJcIj09PXR5cGVvZiBjLnRpbWVvdXQ/Yy50aW1lb3V0OlkoYSl9ZWxzZSBjPVkoYSksZT1kO2M9ZStjO2E9e2lkOlArKyxjYWxsYmFjazpiLHByaW9yaXR5TGV2ZWw6YSxzdGFydFRpbWU6ZSxleHBpcmF0aW9uVGltZTpjLHNvcnRJbmRleDotMX07ZT5kPyhhLnNvcnRJbmRleD1lLEooTyxhKSxudWxsPT09TChOKSYmYT09PUwoTykmJihVP2goKTpVPSEwLGcoVyxlLWQpKSk6KGEuc29ydEluZGV4PWMsSihOLGEpLFR8fFN8fChUPSEwLGYoWCkpKTtyZXR1cm4gYX07ZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihhKXthLmNhbGxiYWNrPW51bGx9O1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9UjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1SO1I9Yjt0cnl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Uj1jfX19O2V4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gUn07ZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7VihhKTt2YXIgYj1MKE4pO3JldHVybiBiIT09USYmbnVsbCE9PVEmJm51bGwhPT1iJiZudWxsIT09Yi5jYWxsYmFjayYmYi5zdGFydFRpbWU8PWEmJmIuZXhwaXJhdGlvblRpbWU8US5leHBpcmF0aW9uVGltZXx8aygpfTtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1aO2V4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb249ZnVuY3Rpb24oKXtUfHxTfHwoVD0hMCxmKFgpKX07XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEwoTil9O2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQVNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/scheduler/cjs/scheduler.production.min.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/index.js": -/*!******************************************!*\ - !*** ../node_modules/scheduler/index.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.production.min.js */ \"../node_modules/scheduler/cjs/scheduler.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"../node_modules/scheduler/cjs/scheduler.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzP2UwMzciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/scheduler/index.js\n"); - -/***/ }), - -/***/ "../node_modules/scheduler/tracing.js": -/*!********************************************!*\ - !*** ../node_modules/scheduler/tracing.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nif (undefined === 'production') {\n module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.production.min.js */ \"../node_modules/scheduler/cjs/scheduler-tracing.production.min.js\");\n} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.development.js */ \"../node_modules/scheduler/cjs/scheduler-tracing.development.js\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvdHJhY2luZy5qcz8xMTBjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/scheduler/tracing.js\n"); - -/***/ }), - -/***/ "../node_modules/setimmediate/setImmediate.js": -/*!****************************************************!*\ - !*** ../node_modules/setimmediate/setImmediate.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n } // Copy function arguments\n\n\n var args = new Array(arguments.length - 1);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n } // Store and register the task\n\n\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n\n switch (args.length) {\n case 0:\n callback();\n break;\n\n case 1:\n callback(args[0]);\n break;\n\n case 2:\n callback(args[0], args[1]);\n break;\n\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n\n if (task) {\n currentlyRunningATask = true;\n\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n\n registerImmediate = function registerImmediate(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanM/ODVlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFDQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBS0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXhKQTtBQUNBO0FBQ0E7QUE0SkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4TEE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/setimmediate/setImmediate.js\n"); - -/***/ }), - -/***/ "../node_modules/space-separated-tokens/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/space-separated-tokens/index.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nexports.parse = parse;\nexports.stringify = stringify;\nvar empty = '';\nvar space = ' ';\nvar whiteSpace = /[ \\t\\n\\r\\f]+/g;\n\nfunction parse(value) {\n var input = String(value || empty).trim();\n return input === empty ? [] : input.split(whiteSpace);\n}\n\nfunction stringify(values) {\n return values.join(space).trim();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanM/ZDlhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeVxuXG52YXIgZW1wdHkgPSAnJ1xudmFyIHNwYWNlID0gJyAnXG52YXIgd2hpdGVTcGFjZSA9IC9bIFxcdFxcblxcclxcZl0rL2dcblxuZnVuY3Rpb24gcGFyc2UodmFsdWUpIHtcbiAgdmFyIGlucHV0ID0gU3RyaW5nKHZhbHVlIHx8IGVtcHR5KS50cmltKClcbiAgcmV0dXJuIGlucHV0ID09PSBlbXB0eSA/IFtdIDogaW5wdXQuc3BsaXQod2hpdGVTcGFjZSlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlcykge1xuICByZXR1cm4gdmFsdWVzLmpvaW4oc3BhY2UpLnRyaW0oKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/space-separated-tokens/index.js\n"); - -/***/ }), - -/***/ "../node_modules/state-toggle/index.js": -/*!*********************************************!*\ - !*** ../node_modules/state-toggle/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = factory; // Construct a state `toggler`: a function which inverses `property` in context\n// based on its current value.\n// The by `toggler` returned function restores that value.\n\nfunction factory(key, state, ctx) {\n return enter;\n\n function enter() {\n var context = ctx || this;\n var current = context[key];\n context[key] = !state;\n return exit;\n\n function exit() {\n context[key] = current;\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0YXRlLXRvZ2dsZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3RhdGUtdG9nZ2xlL2luZGV4LmpzP2U0YzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeVxuXG4vLyBDb25zdHJ1Y3QgYSBzdGF0ZSBgdG9nZ2xlcmA6IGEgZnVuY3Rpb24gd2hpY2ggaW52ZXJzZXMgYHByb3BlcnR5YCBpbiBjb250ZXh0XG4vLyBiYXNlZCBvbiBpdHMgY3VycmVudCB2YWx1ZS5cbi8vIFRoZSBieSBgdG9nZ2xlcmAgcmV0dXJuZWQgZnVuY3Rpb24gcmVzdG9yZXMgdGhhdCB2YWx1ZS5cbmZ1bmN0aW9uIGZhY3Rvcnkoa2V5LCBzdGF0ZSwgY3R4KSB7XG4gIHJldHVybiBlbnRlclxuXG4gIGZ1bmN0aW9uIGVudGVyKCkge1xuICAgIHZhciBjb250ZXh0ID0gY3R4IHx8IHRoaXNcbiAgICB2YXIgY3VycmVudCA9IGNvbnRleHRba2V5XVxuXG4gICAgY29udGV4dFtrZXldID0gIXN0YXRlXG5cbiAgICByZXR1cm4gZXhpdFxuXG4gICAgZnVuY3Rpb24gZXhpdCgpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IGN1cnJlbnRcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/state-toggle/index.js\n"); - -/***/ }), - -/***/ "../node_modules/stream-http/index.js": -/*!********************************************!*\ - !*** ../node_modules/stream-http/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var ClientRequest = __webpack_require__(/*! ./lib/request */ \"../node_modules/stream-http/lib/request.js\");\n\nvar response = __webpack_require__(/*! ./lib/response */ \"../node_modules/stream-http/lib/response.js\");\n\nvar extend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar statusCodes = __webpack_require__(/*! builtin-status-codes */ \"../node_modules/builtin-status-codes/browser.js\");\n\nvar url = __webpack_require__(/*! url */ \"../node_modules/url/url.js\");\n\nvar http = exports;\n\nhttp.request = function (opts, cb) {\n if (typeof opts === 'string') opts = url.parse(opts);else opts = extend(opts); // Normally, the page is loaded from http or https, so not specifying a protocol\n // will result in a (valid) protocol-relative url. However, this won't work if\n // the protocol is something else, like 'file:'\n\n var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : '';\n var protocol = opts.protocol || defaultProtocol;\n var host = opts.hostname || opts.host;\n var port = opts.port;\n var path = opts.path || '/'; // Necessary for IPv6 addresses\n\n if (host && host.indexOf(':') !== -1) host = '[' + host + ']'; // This may be a relative url. The browser should always be able to interpret it correctly.\n\n opts.url = (host ? protocol + '//' + host : '') + (port ? ':' + port : '') + path;\n opts.method = (opts.method || 'GET').toUpperCase();\n opts.headers = opts.headers || {}; // Also valid opts.auth, opts.mode\n\n var req = new ClientRequest(opts);\n if (cb) req.on('response', cb);\n return req;\n};\n\nhttp.get = function get(opts, cb) {\n var req = http.request(opts, cb);\n req.end();\n return req;\n};\n\nhttp.ClientRequest = ClientRequest;\nhttp.IncomingMessage = response.IncomingMessage;\n\nhttp.Agent = function () {};\n\nhttp.Agent.defaultMaxSockets = 4;\nhttp.globalAgent = new http.Agent();\nhttp.STATUS_CODES = statusCodes;\nhttp.METHODS = ['CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LOCK', 'M-SEARCH', 'MERGE', 'MKACTIVITY', 'MKCOL', 'MOVE', 'NOTIFY', 'OPTIONS', 'PATCH', 'POST', 'PROPFIND', 'PROPPATCH', 'PURGE', 'PUT', 'REPORT', 'SEARCH', 'SUBSCRIBE', 'TRACE', 'UNLOCK', 'UNSUBSCRIBE'];\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9pbmRleC5qcz9iMGUzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBDbGllbnRSZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvcmVxdWVzdCcpXG52YXIgcmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi9yZXNwb25zZScpXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxudmFyIHN0YXR1c0NvZGVzID0gcmVxdWlyZSgnYnVpbHRpbi1zdGF0dXMtY29kZXMnKVxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG5cbnZhciBodHRwID0gZXhwb3J0c1xuXG5odHRwLnJlcXVlc3QgPSBmdW5jdGlvbiAob3B0cywgY2IpIHtcblx0aWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJylcblx0XHRvcHRzID0gdXJsLnBhcnNlKG9wdHMpXG5cdGVsc2Vcblx0XHRvcHRzID0gZXh0ZW5kKG9wdHMpXG5cblx0Ly8gTm9ybWFsbHksIHRoZSBwYWdlIGlzIGxvYWRlZCBmcm9tIGh0dHAgb3IgaHR0cHMsIHNvIG5vdCBzcGVjaWZ5aW5nIGEgcHJvdG9jb2xcblx0Ly8gd2lsbCByZXN1bHQgaW4gYSAodmFsaWQpIHByb3RvY29sLXJlbGF0aXZlIHVybC4gSG93ZXZlciwgdGhpcyB3b24ndCB3b3JrIGlmXG5cdC8vIHRoZSBwcm90b2NvbCBpcyBzb21ldGhpbmcgZWxzZSwgbGlrZSAnZmlsZTonXG5cdHZhciBkZWZhdWx0UHJvdG9jb2wgPSBnbG9iYWwubG9jYXRpb24ucHJvdG9jb2wuc2VhcmNoKC9eaHR0cHM/OiQvKSA9PT0gLTEgPyAnaHR0cDonIDogJydcblxuXHR2YXIgcHJvdG9jb2wgPSBvcHRzLnByb3RvY29sIHx8IGRlZmF1bHRQcm90b2NvbFxuXHR2YXIgaG9zdCA9IG9wdHMuaG9zdG5hbWUgfHwgb3B0cy5ob3N0XG5cdHZhciBwb3J0ID0gb3B0cy5wb3J0XG5cdHZhciBwYXRoID0gb3B0cy5wYXRoIHx8ICcvJ1xuXG5cdC8vIE5lY2Vzc2FyeSBmb3IgSVB2NiBhZGRyZXNzZXNcblx0aWYgKGhvc3QgJiYgaG9zdC5pbmRleE9mKCc6JykgIT09IC0xKVxuXHRcdGhvc3QgPSAnWycgKyBob3N0ICsgJ10nXG5cblx0Ly8gVGhpcyBtYXkgYmUgYSByZWxhdGl2ZSB1cmwuIFRoZSBicm93c2VyIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBpbnRlcnByZXQgaXQgY29ycmVjdGx5LlxuXHRvcHRzLnVybCA9IChob3N0ID8gKHByb3RvY29sICsgJy8vJyArIGhvc3QpIDogJycpICsgKHBvcnQgPyAnOicgKyBwb3J0IDogJycpICsgcGF0aFxuXHRvcHRzLm1ldGhvZCA9IChvcHRzLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKVxuXHRvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge31cblxuXHQvLyBBbHNvIHZhbGlkIG9wdHMuYXV0aCwgb3B0cy5tb2RlXG5cblx0dmFyIHJlcSA9IG5ldyBDbGllbnRSZXF1ZXN0KG9wdHMpXG5cdGlmIChjYilcblx0XHRyZXEub24oJ3Jlc3BvbnNlJywgY2IpXG5cdHJldHVybiByZXFcbn1cblxuaHR0cC5nZXQgPSBmdW5jdGlvbiBnZXQgKG9wdHMsIGNiKSB7XG5cdHZhciByZXEgPSBodHRwLnJlcXVlc3Qob3B0cywgY2IpXG5cdHJlcS5lbmQoKVxuXHRyZXR1cm4gcmVxXG59XG5cbmh0dHAuQ2xpZW50UmVxdWVzdCA9IENsaWVudFJlcXVlc3Rcbmh0dHAuSW5jb21pbmdNZXNzYWdlID0gcmVzcG9uc2UuSW5jb21pbmdNZXNzYWdlXG5cbmh0dHAuQWdlbnQgPSBmdW5jdGlvbiAoKSB7fVxuaHR0cC5BZ2VudC5kZWZhdWx0TWF4U29ja2V0cyA9IDRcblxuaHR0cC5nbG9iYWxBZ2VudCA9IG5ldyBodHRwLkFnZW50KClcblxuaHR0cC5TVEFUVVNfQ09ERVMgPSBzdGF0dXNDb2Rlc1xuXG5odHRwLk1FVEhPRFMgPSBbXG5cdCdDSEVDS09VVCcsXG5cdCdDT05ORUNUJyxcblx0J0NPUFknLFxuXHQnREVMRVRFJyxcblx0J0dFVCcsXG5cdCdIRUFEJyxcblx0J0xPQ0snLFxuXHQnTS1TRUFSQ0gnLFxuXHQnTUVSR0UnLFxuXHQnTUtBQ1RJVklUWScsXG5cdCdNS0NPTCcsXG5cdCdNT1ZFJyxcblx0J05PVElGWScsXG5cdCdPUFRJT05TJyxcblx0J1BBVENIJyxcblx0J1BPU1QnLFxuXHQnUFJPUEZJTkQnLFxuXHQnUFJPUFBBVENIJyxcblx0J1BVUkdFJyxcblx0J1BVVCcsXG5cdCdSRVBPUlQnLFxuXHQnU0VBUkNIJyxcblx0J1NVQlNDUklCRScsXG5cdCdUUkFDRScsXG5cdCdVTkxPQ0snLFxuXHQnVU5TVUJTQ1JJQkUnXG5dIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBOUJBO0FBQ0E7QUFnQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/stream-http/index.js\n"); - -/***/ }), - -/***/ "../node_modules/stream-http/lib/capability.js": -/*!*****************************************************!*\ - !*** ../node_modules/stream-http/lib/capability.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream);\nexports.writableStream = isFunction(global.WritableStream);\nexports.abortController = isFunction(global.AbortController);\nexports.blobConstructor = false;\n\ntry {\n new Blob([new ArrayBuffer(1)]);\n exports.blobConstructor = true;\n} catch (e) {} // The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\n\n\nvar xhr;\n\nfunction getXHR() {\n // Cache the xhr value\n if (xhr !== undefined) return xhr;\n\n if (global.XMLHttpRequest) {\n xhr = new global.XMLHttpRequest(); // If XDomainRequest is available (ie only, where xhr might not work\n // cross domain), use the page location. Otherwise use example.com\n // Note: this doesn't actually make an http request.\n\n try {\n xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com');\n } catch (e) {\n xhr = null;\n }\n } else {\n // Service workers don't have XHR\n xhr = null;\n }\n\n return xhr;\n}\n\nfunction checkTypeSupport(type) {\n var xhr = getXHR();\n if (!xhr) return false;\n\n try {\n xhr.responseType = type;\n return xhr.responseType === type;\n } catch (e) {}\n\n return false;\n} // For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\n\n\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined';\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice); // If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\n\nexports.arraybuffer = exports.fetch || haveArrayBuffer && checkTypeSupport('arraybuffer'); // These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\n\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream');\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer && checkTypeSupport('moz-chunked-arraybuffer'); // If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\n\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false);\nexports.vbArray = isFunction(global.VBArray);\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nxhr = null; // Help gc\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9jYXBhYmlsaXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9saWIvY2FwYWJpbGl0eS5qcz83YTgyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZmV0Y2ggPSBpc0Z1bmN0aW9uKGdsb2JhbC5mZXRjaCkgJiYgaXNGdW5jdGlvbihnbG9iYWwuUmVhZGFibGVTdHJlYW0pXG5cbmV4cG9ydHMud3JpdGFibGVTdHJlYW0gPSBpc0Z1bmN0aW9uKGdsb2JhbC5Xcml0YWJsZVN0cmVhbSlcblxuZXhwb3J0cy5hYm9ydENvbnRyb2xsZXIgPSBpc0Z1bmN0aW9uKGdsb2JhbC5BYm9ydENvbnRyb2xsZXIpXG5cbmV4cG9ydHMuYmxvYkNvbnN0cnVjdG9yID0gZmFsc2VcbnRyeSB7XG5cdG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMSldKVxuXHRleHBvcnRzLmJsb2JDb25zdHJ1Y3RvciA9IHRydWVcbn0gY2F0Y2ggKGUpIHt9XG5cbi8vIFRoZSB4aHIgcmVxdWVzdCB0byBleGFtcGxlLmNvbSBtYXkgdmlvbGF0ZSBzb21lIHJlc3RyaWN0aXZlIENTUCBjb25maWd1cmF0aW9ucyxcbi8vIHNvIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgYGZldGNoYCwgYXZvaWQgY2FsbGluZyBnZXRYSFIoKVxuLy8gYW5kIGFzc3VtZSBzdXBwb3J0IGZvciBjZXJ0YWluIGZlYXR1cmVzIGJlbG93LlxudmFyIHhoclxuZnVuY3Rpb24gZ2V0WEhSICgpIHtcblx0Ly8gQ2FjaGUgdGhlIHhociB2YWx1ZVxuXHRpZiAoeGhyICE9PSB1bmRlZmluZWQpIHJldHVybiB4aHJcblxuXHRpZiAoZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KSB7XG5cdFx0eGhyID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpXG5cdFx0Ly8gSWYgWERvbWFpblJlcXVlc3QgaXMgYXZhaWxhYmxlIChpZSBvbmx5LCB3aGVyZSB4aHIgbWlnaHQgbm90IHdvcmtcblx0XHQvLyBjcm9zcyBkb21haW4pLCB1c2UgdGhlIHBhZ2UgbG9jYXRpb24uIE90aGVyd2lzZSB1c2UgZXhhbXBsZS5jb21cblx0XHQvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhbiBodHRwIHJlcXVlc3QuXG5cdFx0dHJ5IHtcblx0XHRcdHhoci5vcGVuKCdHRVQnLCBnbG9iYWwuWERvbWFpblJlcXVlc3QgPyAnLycgOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG5cdFx0fSBjYXRjaChlKSB7XG5cdFx0XHR4aHIgPSBudWxsXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIFNlcnZpY2Ugd29ya2VycyBkb24ndCBoYXZlIFhIUlxuXHRcdHhociA9IG51bGxcblx0fVxuXHRyZXR1cm4geGhyXG59XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZVN1cHBvcnQgKHR5cGUpIHtcblx0dmFyIHhociA9IGdldFhIUigpXG5cdGlmICgheGhyKSByZXR1cm4gZmFsc2Vcblx0dHJ5IHtcblx0XHR4aHIucmVzcG9uc2VUeXBlID0gdHlwZVxuXHRcdHJldHVybiB4aHIucmVzcG9uc2VUeXBlID09PSB0eXBlXG5cdH0gY2F0Y2ggKGUpIHt9XG5cdHJldHVybiBmYWxzZVxufVxuXG4vLyBGb3Igc29tZSBzdHJhbmdlIHJlYXNvbiwgU2FmYXJpIDcuMCByZXBvcnRzIHR5cGVvZiBnbG9iYWwuQXJyYXlCdWZmZXIgPT09ICdvYmplY3QnLlxuLy8gU2FmYXJpIDcuMSBhcHBlYXJzIHRvIGhhdmUgZml4ZWQgdGhpcyBidWcuXG52YXIgaGF2ZUFycmF5QnVmZmVyID0gdHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCdcbnZhciBoYXZlU2xpY2UgPSBoYXZlQXJyYXlCdWZmZXIgJiYgaXNGdW5jdGlvbihnbG9iYWwuQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKVxuXG4vLyBJZiBmZXRjaCBpcyBzdXBwb3J0ZWQsIHRoZW4gYXJyYXlidWZmZXIgd2lsbCBiZSBzdXBwb3J0ZWQgdG9vLiBTa2lwIGNhbGxpbmdcbi8vIGNoZWNrVHlwZVN1cHBvcnQoKSwgc2luY2UgdGhhdCBjYWxscyBnZXRYSFIoKS5cbmV4cG9ydHMuYXJyYXlidWZmZXIgPSBleHBvcnRzLmZldGNoIHx8IChoYXZlQXJyYXlCdWZmZXIgJiYgY2hlY2tUeXBlU3VwcG9ydCgnYXJyYXlidWZmZXInKSlcblxuLy8gVGhlc2UgbmV4dCB0d28gdGVzdHMgdW5hdm9pZGFibHkgc2hvdyB3YXJuaW5ncyBpbiBDaHJvbWUuIFNpbmNlIGZldGNoIHdpbGwgYWx3YXlzXG4vLyBiZSB1c2VkIGlmIGl0J3MgYXZhaWxhYmxlLCBqdXN0IHJldHVybiBmYWxzZSBmb3IgdGhlc2UgdG8gYXZvaWQgdGhlIHdhcm5pbmdzLlxuZXhwb3J0cy5tc3N0cmVhbSA9ICFleHBvcnRzLmZldGNoICYmIGhhdmVTbGljZSAmJiBjaGVja1R5cGVTdXBwb3J0KCdtcy1zdHJlYW0nKVxuZXhwb3J0cy5tb3pjaHVua2VkYXJyYXlidWZmZXIgPSAhZXhwb3J0cy5mZXRjaCAmJiBoYXZlQXJyYXlCdWZmZXIgJiZcblx0Y2hlY2tUeXBlU3VwcG9ydCgnbW96LWNodW5rZWQtYXJyYXlidWZmZXInKVxuXG4vLyBJZiBmZXRjaCBpcyBzdXBwb3J0ZWQsIHRoZW4gb3ZlcnJpZGVNaW1lVHlwZSB3aWxsIGJlIHN1cHBvcnRlZCB0b28uIFNraXAgY2FsbGluZ1xuLy8gZ2V0WEhSKCkuXG5leHBvcnRzLm92ZXJyaWRlTWltZVR5cGUgPSBleHBvcnRzLmZldGNoIHx8IChnZXRYSFIoKSA/IGlzRnVuY3Rpb24oZ2V0WEhSKCkub3ZlcnJpZGVNaW1lVHlwZSkgOiBmYWxzZSlcblxuZXhwb3J0cy52YkFycmF5ID0gaXNGdW5jdGlvbihnbG9iYWwuVkJBcnJheSlcblxuZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG54aHIgPSBudWxsIC8vIEhlbHAgZ2NcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/stream-http/lib/capability.js\n"); - -/***/ }), - -/***/ "../node_modules/stream-http/lib/request.js": -/*!**************************************************!*\ - !*** ../node_modules/stream-http/lib/request.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(Buffer, global, process) {var capability = __webpack_require__(/*! ./capability */ \"../node_modules/stream-http/lib/capability.js\");\n\nvar inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n\nvar response = __webpack_require__(/*! ./response */ \"../node_modules/stream-http/lib/response.js\");\n\nvar stream = __webpack_require__(/*! readable-stream */ \"../node_modules/readable-stream/readable-browser.js\");\n\nvar toArrayBuffer = __webpack_require__(/*! to-arraybuffer */ \"../node_modules/to-arraybuffer/index.js\");\n\nvar IncomingMessage = response.IncomingMessage;\nvar rStates = response.readyStates;\n\nfunction decideMode(preferBinary, useFetch) {\n if (capability.fetch && useFetch) {\n return 'fetch';\n } else if (capability.mozchunkedarraybuffer) {\n return 'moz-chunked-arraybuffer';\n } else if (capability.msstream) {\n return 'ms-stream';\n } else if (capability.arraybuffer && preferBinary) {\n return 'arraybuffer';\n } else if (capability.vbArray && preferBinary) {\n return 'text:vbarray';\n } else {\n return 'text';\n }\n}\n\nvar ClientRequest = module.exports = function (opts) {\n var self = this;\n stream.Writable.call(self);\n self._opts = opts;\n self._body = [];\n self._headers = {};\n if (opts.auth) self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'));\n Object.keys(opts.headers).forEach(function (name) {\n self.setHeader(name, opts.headers[name]);\n });\n var preferBinary;\n var useFetch = true;\n\n if (opts.mode === 'disable-fetch' || 'requestTimeout' in opts && !capability.abortController) {\n // If the use of XHR should be preferred. Not typically needed.\n useFetch = false;\n preferBinary = true;\n } else if (opts.mode === 'prefer-streaming') {\n // If streaming is a high priority but binary compatibility and\n // the accuracy of the 'content-type' header aren't\n preferBinary = false;\n } else if (opts.mode === 'allow-wrong-content-type') {\n // If streaming is more important than preserving the 'content-type' header\n preferBinary = !capability.overrideMimeType;\n } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n // Use binary if text streaming may corrupt data or the content-type header, or for speed\n preferBinary = true;\n } else {\n throw new Error('Invalid value for opts.mode');\n }\n\n self._mode = decideMode(preferBinary, useFetch);\n self._fetchTimer = null;\n self.on('finish', function () {\n self._onFinish();\n });\n};\n\ninherits(ClientRequest, stream.Writable);\n\nClientRequest.prototype.setHeader = function (name, value) {\n var self = this;\n var lowerName = name.toLowerCase(); // This check is not necessary, but it prevents warnings from browsers about setting unsafe\n // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n // http-browserify did it, so I will too.\n\n if (unsafeHeaders.indexOf(lowerName) !== -1) return;\n self._headers[lowerName] = {\n name: name,\n value: value\n };\n};\n\nClientRequest.prototype.getHeader = function (name) {\n var header = this._headers[name.toLowerCase()];\n\n if (header) return header.value;\n return null;\n};\n\nClientRequest.prototype.removeHeader = function (name) {\n var self = this;\n delete self._headers[name.toLowerCase()];\n};\n\nClientRequest.prototype._onFinish = function () {\n var self = this;\n if (self._destroyed) return;\n var opts = self._opts;\n var headersObj = self._headers;\n var body = null;\n\n if (opts.method !== 'GET' && opts.method !== 'HEAD') {\n if (capability.arraybuffer) {\n body = toArrayBuffer(Buffer.concat(self._body));\n } else if (capability.blobConstructor) {\n body = new global.Blob(self._body.map(function (buffer) {\n return toArrayBuffer(buffer);\n }), {\n type: (headersObj['content-type'] || {}).value || ''\n });\n } else {\n // get utf8 string\n body = Buffer.concat(self._body).toString();\n }\n } // create flattened list of headers\n\n\n var headersList = [];\n Object.keys(headersObj).forEach(function (keyName) {\n var name = headersObj[keyName].name;\n var value = headersObj[keyName].value;\n\n if (Array.isArray(value)) {\n value.forEach(function (v) {\n headersList.push([name, v]);\n });\n } else {\n headersList.push([name, value]);\n }\n });\n\n if (self._mode === 'fetch') {\n var signal = null;\n var fetchTimer = null;\n\n if (capability.abortController) {\n var controller = new AbortController();\n signal = controller.signal;\n self._fetchAbortController = controller;\n\n if ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n self._fetchTimer = global.setTimeout(function () {\n self.emit('requestTimeout');\n if (self._fetchAbortController) self._fetchAbortController.abort();\n }, opts.requestTimeout);\n }\n }\n\n global.fetch(self._opts.url, {\n method: self._opts.method,\n headers: headersList,\n body: body || undefined,\n mode: 'cors',\n credentials: opts.withCredentials ? 'include' : 'same-origin',\n signal: signal\n }).then(function (response) {\n self._fetchResponse = response;\n\n self._connect();\n }, function (reason) {\n global.clearTimeout(self._fetchTimer);\n if (!self._destroyed) self.emit('error', reason);\n });\n } else {\n var xhr = self._xhr = new global.XMLHttpRequest();\n\n try {\n xhr.open(self._opts.method, self._opts.url, true);\n } catch (err) {\n process.nextTick(function () {\n self.emit('error', err);\n });\n return;\n } // Can't set responseType on really old browsers\n\n\n if ('responseType' in xhr) xhr.responseType = self._mode.split(':')[0];\n if ('withCredentials' in xhr) xhr.withCredentials = !!opts.withCredentials;\n if (self._mode === 'text' && 'overrideMimeType' in xhr) xhr.overrideMimeType('text/plain; charset=x-user-defined');\n\n if ('requestTimeout' in opts) {\n xhr.timeout = opts.requestTimeout;\n\n xhr.ontimeout = function () {\n self.emit('requestTimeout');\n };\n }\n\n headersList.forEach(function (header) {\n xhr.setRequestHeader(header[0], header[1]);\n });\n self._response = null;\n\n xhr.onreadystatechange = function () {\n switch (xhr.readyState) {\n case rStates.LOADING:\n case rStates.DONE:\n self._onXHRProgress();\n\n break;\n }\n }; // Necessary for streaming in Firefox, since xhr.response is ONLY defined\n // in onprogress, not in onreadystatechange with xhr.readyState = 3\n\n\n if (self._mode === 'moz-chunked-arraybuffer') {\n xhr.onprogress = function () {\n self._onXHRProgress();\n };\n }\n\n xhr.onerror = function () {\n if (self._destroyed) return;\n self.emit('error', new Error('XHR error'));\n };\n\n try {\n xhr.send(body);\n } catch (err) {\n process.nextTick(function () {\n self.emit('error', err);\n });\n return;\n }\n }\n};\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\n\n\nfunction statusValid(xhr) {\n try {\n var status = xhr.status;\n return status !== null && status !== 0;\n } catch (e) {\n return false;\n }\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n var self = this;\n if (!statusValid(self._xhr) || self._destroyed) return;\n if (!self._response) self._connect();\n\n self._response._onXHRProgress();\n};\n\nClientRequest.prototype._connect = function () {\n var self = this;\n if (self._destroyed) return;\n self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer);\n\n self._response.on('error', function (err) {\n self.emit('error', err);\n });\n\n self.emit('response', self._response);\n};\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n var self = this;\n\n self._body.push(chunk);\n\n cb();\n};\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n var self = this;\n self._destroyed = true;\n global.clearTimeout(self._fetchTimer);\n if (self._response) self._response._destroyed = true;\n if (self._xhr) self._xhr.abort();else if (self._fetchAbortController) self._fetchAbortController.abort();\n};\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n var self = this;\n\n if (typeof data === 'function') {\n cb = data;\n data = undefined;\n }\n\n stream.Writable.prototype.end.call(self, data, encoding, cb);\n};\n\nClientRequest.prototype.flushHeaders = function () {};\n\nClientRequest.prototype.setTimeout = function () {};\n\nClientRequest.prototype.setNoDelay = function () {};\n\nClientRequest.prototype.setSocketKeepAlive = function () {}; // Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\n\n\nvar unsafeHeaders = ['accept-charset', 'accept-encoding', 'access-control-request-headers', 'access-control-request-method', 'connection', 'content-length', 'cookie', 'cookie2', 'date', 'dnt', 'expect', 'host', 'keep-alive', 'origin', 'referer', 'te', 'trailer', 'transfer-encoding', 'upgrade', 'via'];\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9yZXF1ZXN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9saWIvcmVxdWVzdC5qcz8wMGQ0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9jYXBhYmlsaXR5JylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciByZXNwb25zZSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG52YXIgdG9BcnJheUJ1ZmZlciA9IHJlcXVpcmUoJ3RvLWFycmF5YnVmZmVyJylcblxudmFyIEluY29taW5nTWVzc2FnZSA9IHJlc3BvbnNlLkluY29taW5nTWVzc2FnZVxudmFyIHJTdGF0ZXMgPSByZXNwb25zZS5yZWFkeVN0YXRlc1xuXG5mdW5jdGlvbiBkZWNpZGVNb2RlIChwcmVmZXJCaW5hcnksIHVzZUZldGNoKSB7XG5cdGlmIChjYXBhYmlsaXR5LmZldGNoICYmIHVzZUZldGNoKSB7XG5cdFx0cmV0dXJuICdmZXRjaCdcblx0fSBlbHNlIGlmIChjYXBhYmlsaXR5Lm1vemNodW5rZWRhcnJheWJ1ZmZlcikge1xuXHRcdHJldHVybiAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInXG5cdH0gZWxzZSBpZiAoY2FwYWJpbGl0eS5tc3N0cmVhbSkge1xuXHRcdHJldHVybiAnbXMtc3RyZWFtJ1xuXHR9IGVsc2UgaWYgKGNhcGFiaWxpdHkuYXJyYXlidWZmZXIgJiYgcHJlZmVyQmluYXJ5KSB7XG5cdFx0cmV0dXJuICdhcnJheWJ1ZmZlcidcblx0fSBlbHNlIGlmIChjYXBhYmlsaXR5LnZiQXJyYXkgJiYgcHJlZmVyQmluYXJ5KSB7XG5cdFx0cmV0dXJuICd0ZXh0OnZiYXJyYXknXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuICd0ZXh0J1xuXHR9XG59XG5cbnZhciBDbGllbnRSZXF1ZXN0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0cykge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0c3RyZWFtLldyaXRhYmxlLmNhbGwoc2VsZilcblxuXHRzZWxmLl9vcHRzID0gb3B0c1xuXHRzZWxmLl9ib2R5ID0gW11cblx0c2VsZi5faGVhZGVycyA9IHt9XG5cdGlmIChvcHRzLmF1dGgpXG5cdFx0c2VsZi5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIG5ldyBCdWZmZXIob3B0cy5hdXRoKS50b1N0cmluZygnYmFzZTY0JykpXG5cdE9iamVjdC5rZXlzKG9wdHMuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdHNlbGYuc2V0SGVhZGVyKG5hbWUsIG9wdHMuaGVhZGVyc1tuYW1lXSlcblx0fSlcblxuXHR2YXIgcHJlZmVyQmluYXJ5XG5cdHZhciB1c2VGZXRjaCA9IHRydWVcblx0aWYgKG9wdHMubW9kZSA9PT0gJ2Rpc2FibGUtZmV0Y2gnIHx8ICgncmVxdWVzdFRpbWVvdXQnIGluIG9wdHMgJiYgIWNhcGFiaWxpdHkuYWJvcnRDb250cm9sbGVyKSkge1xuXHRcdC8vIElmIHRoZSB1c2Ugb2YgWEhSIHNob3VsZCBiZSBwcmVmZXJyZWQuIE5vdCB0eXBpY2FsbHkgbmVlZGVkLlxuXHRcdHVzZUZldGNoID0gZmFsc2Vcblx0XHRwcmVmZXJCaW5hcnkgPSB0cnVlXG5cdH0gZWxzZSBpZiAob3B0cy5tb2RlID09PSAncHJlZmVyLXN0cmVhbWluZycpIHtcblx0XHQvLyBJZiBzdHJlYW1pbmcgaXMgYSBoaWdoIHByaW9yaXR5IGJ1dCBiaW5hcnkgY29tcGF0aWJpbGl0eSBhbmRcblx0XHQvLyB0aGUgYWNjdXJhY3kgb2YgdGhlICdjb250ZW50LXR5cGUnIGhlYWRlciBhcmVuJ3Rcblx0XHRwcmVmZXJCaW5hcnkgPSBmYWxzZVxuXHR9IGVsc2UgaWYgKG9wdHMubW9kZSA9PT0gJ2FsbG93LXdyb25nLWNvbnRlbnQtdHlwZScpIHtcblx0XHQvLyBJZiBzdHJlYW1pbmcgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiBwcmVzZXJ2aW5nIHRoZSAnY29udGVudC10eXBlJyBoZWFkZXJcblx0XHRwcmVmZXJCaW5hcnkgPSAhY2FwYWJpbGl0eS5vdmVycmlkZU1pbWVUeXBlXG5cdH0gZWxzZSBpZiAoIW9wdHMubW9kZSB8fCBvcHRzLm1vZGUgPT09ICdkZWZhdWx0JyB8fCBvcHRzLm1vZGUgPT09ICdwcmVmZXItZmFzdCcpIHtcblx0XHQvLyBVc2UgYmluYXJ5IGlmIHRleHQgc3RyZWFtaW5nIG1heSBjb3JydXB0IGRhdGEgb3IgdGhlIGNvbnRlbnQtdHlwZSBoZWFkZXIsIG9yIGZvciBzcGVlZFxuXHRcdHByZWZlckJpbmFyeSA9IHRydWVcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIG9wdHMubW9kZScpXG5cdH1cblx0c2VsZi5fbW9kZSA9IGRlY2lkZU1vZGUocHJlZmVyQmluYXJ5LCB1c2VGZXRjaClcblx0c2VsZi5fZmV0Y2hUaW1lciA9IG51bGxcblxuXHRzZWxmLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG5cdFx0c2VsZi5fb25GaW5pc2goKVxuXHR9KVxufVxuXG5pbmhlcml0cyhDbGllbnRSZXF1ZXN0LCBzdHJlYW0uV3JpdGFibGUpXG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0dmFyIGxvd2VyTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXHQvLyBUaGlzIGNoZWNrIGlzIG5vdCBuZWNlc3NhcnksIGJ1dCBpdCBwcmV2ZW50cyB3YXJuaW5ncyBmcm9tIGJyb3dzZXJzIGFib3V0IHNldHRpbmcgdW5zYWZlXG5cdC8vIGhlYWRlcnMuIFRvIGJlIGhvbmVzdCBJJ20gbm90IGVudGlyZWx5IHN1cmUgaGlkaW5nIHRoZXNlIHdhcm5pbmdzIGlzIGEgZ29vZCB0aGluZywgYnV0XG5cdC8vIGh0dHAtYnJvd3NlcmlmeSBkaWQgaXQsIHNvIEkgd2lsbCB0b28uXG5cdGlmICh1bnNhZmVIZWFkZXJzLmluZGV4T2YobG93ZXJOYW1lKSAhPT0gLTEpXG5cdFx0cmV0dXJuXG5cblx0c2VsZi5faGVhZGVyc1tsb3dlck5hbWVdID0ge1xuXHRcdG5hbWU6IG5hbWUsXG5cdFx0dmFsdWU6IHZhbHVlXG5cdH1cbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0dmFyIGhlYWRlciA9IHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXVxuXHRpZiAoaGVhZGVyKVxuXHRcdHJldHVybiBoZWFkZXIudmFsdWVcblx0cmV0dXJuIG51bGxcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdGRlbGV0ZSBzZWxmLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV1cbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuX29uRmluaXNoID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHRpZiAoc2VsZi5fZGVzdHJveWVkKVxuXHRcdHJldHVyblxuXHR2YXIgb3B0cyA9IHNlbGYuX29wdHNcblxuXHR2YXIgaGVhZGVyc09iaiA9IHNlbGYuX2hlYWRlcnNcblx0dmFyIGJvZHkgPSBudWxsXG5cdGlmIChvcHRzLm1ldGhvZCAhPT0gJ0dFVCcgJiYgb3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuXHRcdGlmIChjYXBhYmlsaXR5LmFycmF5YnVmZmVyKSB7XG5cdFx0XHRib2R5ID0gdG9BcnJheUJ1ZmZlcihCdWZmZXIuY29uY2F0KHNlbGYuX2JvZHkpKVxuXHRcdH0gZWxzZSBpZiAoY2FwYWJpbGl0eS5ibG9iQ29uc3RydWN0b3IpIHtcblx0XHRcdGJvZHkgPSBuZXcgZ2xvYmFsLkJsb2Ioc2VsZi5fYm9keS5tYXAoZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0XHRyZXR1cm4gdG9BcnJheUJ1ZmZlcihidWZmZXIpXG5cdFx0XHR9KSwge1xuXHRcdFx0XHR0eXBlOiAoaGVhZGVyc09ialsnY29udGVudC10eXBlJ10gfHwge30pLnZhbHVlIHx8ICcnXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBnZXQgdXRmOCBzdHJpbmdcblx0XHRcdGJvZHkgPSBCdWZmZXIuY29uY2F0KHNlbGYuX2JvZHkpLnRvU3RyaW5nKClcblx0XHR9XG5cdH1cblxuXHQvLyBjcmVhdGUgZmxhdHRlbmVkIGxpc3Qgb2YgaGVhZGVyc1xuXHR2YXIgaGVhZGVyc0xpc3QgPSBbXVxuXHRPYmplY3Qua2V5cyhoZWFkZXJzT2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG5cdFx0dmFyIG5hbWUgPSBoZWFkZXJzT2JqW2tleU5hbWVdLm5hbWVcblx0XHR2YXIgdmFsdWUgPSBoZWFkZXJzT2JqW2tleU5hbWVdLnZhbHVlXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdGhlYWRlcnNMaXN0LnB1c2goW25hbWUsIHZdKVxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVhZGVyc0xpc3QucHVzaChbbmFtZSwgdmFsdWVdKVxuXHRcdH1cblx0fSlcblxuXHRpZiAoc2VsZi5fbW9kZSA9PT0gJ2ZldGNoJykge1xuXHRcdHZhciBzaWduYWwgPSBudWxsXG5cdFx0dmFyIGZldGNoVGltZXIgPSBudWxsXG5cdFx0aWYgKGNhcGFiaWxpdHkuYWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR2YXIgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXHRcdFx0c2lnbmFsID0gY29udHJvbGxlci5zaWduYWxcblx0XHRcdHNlbGYuX2ZldGNoQWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuXG5cdFx0XHRpZiAoJ3JlcXVlc3RUaW1lb3V0JyBpbiBvcHRzICYmIG9wdHMucmVxdWVzdFRpbWVvdXQgIT09IDApIHtcblx0XHRcdFx0c2VsZi5fZmV0Y2hUaW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRzZWxmLmVtaXQoJ3JlcXVlc3RUaW1lb3V0Jylcblx0XHRcdFx0XHRpZiAoc2VsZi5fZmV0Y2hBYm9ydENvbnRyb2xsZXIpXG5cdFx0XHRcdFx0XHRzZWxmLl9mZXRjaEFib3J0Q29udHJvbGxlci5hYm9ydCgpXG5cdFx0XHRcdH0sIG9wdHMucmVxdWVzdFRpbWVvdXQpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Z2xvYmFsLmZldGNoKHNlbGYuX29wdHMudXJsLCB7XG5cdFx0XHRtZXRob2Q6IHNlbGYuX29wdHMubWV0aG9kLFxuXHRcdFx0aGVhZGVyczogaGVhZGVyc0xpc3QsXG5cdFx0XHRib2R5OiBib2R5IHx8IHVuZGVmaW5lZCxcblx0XHRcdG1vZGU6ICdjb3JzJyxcblx0XHRcdGNyZWRlbnRpYWxzOiBvcHRzLndpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG5cdFx0XHRzaWduYWw6IHNpZ25hbFxuXHRcdH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0XHRzZWxmLl9mZXRjaFJlc3BvbnNlID0gcmVzcG9uc2Vcblx0XHRcdHNlbGYuX2Nvbm5lY3QoKVxuXHRcdH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcblx0XHRcdGdsb2JhbC5jbGVhclRpbWVvdXQoc2VsZi5fZmV0Y2hUaW1lcilcblx0XHRcdGlmICghc2VsZi5fZGVzdHJveWVkKVxuXHRcdFx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgcmVhc29uKVxuXHRcdH0pXG5cdH0gZWxzZSB7XG5cdFx0dmFyIHhociA9IHNlbGYuX3hociA9IG5ldyBnbG9iYWwuWE1MSHR0cFJlcXVlc3QoKVxuXHRcdHRyeSB7XG5cdFx0XHR4aHIub3BlbihzZWxmLl9vcHRzLm1ldGhvZCwgc2VsZi5fb3B0cy51cmwsIHRydWUpXG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIGVycilcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHQvLyBDYW4ndCBzZXQgcmVzcG9uc2VUeXBlIG9uIHJlYWxseSBvbGQgYnJvd3NlcnNcblx0XHRpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKVxuXHRcdFx0eGhyLnJlc3BvbnNlVHlwZSA9IHNlbGYuX21vZGUuc3BsaXQoJzonKVswXVxuXG5cdFx0aWYgKCd3aXRoQ3JlZGVudGlhbHMnIGluIHhocilcblx0XHRcdHhoci53aXRoQ3JlZGVudGlhbHMgPSAhIW9wdHMud2l0aENyZWRlbnRpYWxzXG5cblx0XHRpZiAoc2VsZi5fbW9kZSA9PT0gJ3RleHQnICYmICdvdmVycmlkZU1pbWVUeXBlJyBpbiB4aHIpXG5cdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCcpXG5cblx0XHRpZiAoJ3JlcXVlc3RUaW1lb3V0JyBpbiBvcHRzKSB7XG5cdFx0XHR4aHIudGltZW91dCA9IG9wdHMucmVxdWVzdFRpbWVvdXRcblx0XHRcdHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuZW1pdCgncmVxdWVzdFRpbWVvdXQnKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhlYWRlcnNMaXN0LmZvckVhY2goZnVuY3Rpb24gKGhlYWRlcikge1xuXHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG5cdFx0fSlcblxuXHRcdHNlbGYuX3Jlc3BvbnNlID0gbnVsbFxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRzd2l0Y2ggKHhoci5yZWFkeVN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgclN0YXRlcy5MT0FESU5HOlxuXHRcdFx0XHRjYXNlIHJTdGF0ZXMuRE9ORTpcblx0XHRcdFx0XHRzZWxmLl9vblhIUlByb2dyZXNzKClcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBOZWNlc3NhcnkgZm9yIHN0cmVhbWluZyBpbiBGaXJlZm94LCBzaW5jZSB4aHIucmVzcG9uc2UgaXMgT05MWSBkZWZpbmVkXG5cdFx0Ly8gaW4gb25wcm9ncmVzcywgbm90IGluIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aXRoIHhoci5yZWFkeVN0YXRlID0gM1xuXHRcdGlmIChzZWxmLl9tb2RlID09PSAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInKSB7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi5fb25YSFJQcm9ncmVzcygpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0eGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoc2VsZi5fZGVzdHJveWVkKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1hIUiBlcnJvcicpKVxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR4aHIuc2VuZChib2R5KVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHhoci5zdGF0dXMgaXMgcmVhZGFibGUgYW5kIG5vbi16ZXJvLCBpbmRpY2F0aW5nIG5vIGVycm9yLlxuICogRXZlbiB0aG91Z2ggdGhlIHNwZWMgc2F5cyBpdCBzaG91bGQgYmUgYXZhaWxhYmxlIGluIHJlYWR5U3RhdGUgMyxcbiAqIGFjY2Vzc2luZyBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluIElFOFxuICovXG5mdW5jdGlvbiBzdGF0dXNWYWxpZCAoeGhyKSB7XG5cdHRyeSB7XG5cdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXNcblx0XHRyZXR1cm4gKHN0YXR1cyAhPT0gbnVsbCAmJiBzdGF0dXMgIT09IDApXG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5fb25YSFJQcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cblx0aWYgKCFzdGF0dXNWYWxpZChzZWxmLl94aHIpIHx8IHNlbGYuX2Rlc3Ryb3llZClcblx0XHRyZXR1cm5cblxuXHRpZiAoIXNlbGYuX3Jlc3BvbnNlKVxuXHRcdHNlbGYuX2Nvbm5lY3QoKVxuXG5cdHNlbGYuX3Jlc3BvbnNlLl9vblhIUlByb2dyZXNzKClcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuX2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXG5cdGlmIChzZWxmLl9kZXN0cm95ZWQpXG5cdFx0cmV0dXJuXG5cblx0c2VsZi5fcmVzcG9uc2UgPSBuZXcgSW5jb21pbmdNZXNzYWdlKHNlbGYuX3hociwgc2VsZi5fZmV0Y2hSZXNwb25zZSwgc2VsZi5fbW9kZSwgc2VsZi5fZmV0Y2hUaW1lcilcblx0c2VsZi5fcmVzcG9uc2Uub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG5cdFx0c2VsZi5lbWl0KCdlcnJvcicsIGVycilcblx0fSlcblxuXHRzZWxmLmVtaXQoJ3Jlc3BvbnNlJywgc2VsZi5fcmVzcG9uc2UpXG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXG5cdHNlbGYuX2JvZHkucHVzaChjaHVuaylcblx0Y2IoKVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IENsaWVudFJlcXVlc3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHRzZWxmLl9kZXN0cm95ZWQgPSB0cnVlXG5cdGdsb2JhbC5jbGVhclRpbWVvdXQoc2VsZi5fZmV0Y2hUaW1lcilcblx0aWYgKHNlbGYuX3Jlc3BvbnNlKVxuXHRcdHNlbGYuX3Jlc3BvbnNlLl9kZXN0cm95ZWQgPSB0cnVlXG5cdGlmIChzZWxmLl94aHIpXG5cdFx0c2VsZi5feGhyLmFib3J0KClcblx0ZWxzZSBpZiAoc2VsZi5fZmV0Y2hBYm9ydENvbnRyb2xsZXIpXG5cdFx0c2VsZi5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHRpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcblx0XHRjYiA9IGRhdGFcblx0XHRkYXRhID0gdW5kZWZpbmVkXG5cdH1cblxuXHRzdHJlYW0uV3JpdGFibGUucHJvdG90eXBlLmVuZC5jYWxsKHNlbGYsIGRhdGEsIGVuY29kaW5nLCBjYilcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuZmx1c2hIZWFkZXJzID0gZnVuY3Rpb24gKCkge31cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7fVxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uICgpIHt9XG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRTb2NrZXRLZWVwQWxpdmUgPSBmdW5jdGlvbiAoKSB7fVxuXG4vLyBUYWtlbiBmcm9tIGh0dHA6Ly93d3cudzMub3JnL1RSL1hNTEh0dHBSZXF1ZXN0LyN0aGUtc2V0cmVxdWVzdGhlYWRlciUyOCUyOS1tZXRob2RcbnZhciB1bnNhZmVIZWFkZXJzID0gW1xuXHQnYWNjZXB0LWNoYXJzZXQnLFxuXHQnYWNjZXB0LWVuY29kaW5nJyxcblx0J2FjY2Vzcy1jb250cm9sLXJlcXVlc3QtaGVhZGVycycsXG5cdCdhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZCcsXG5cdCdjb25uZWN0aW9uJyxcblx0J2NvbnRlbnQtbGVuZ3RoJyxcblx0J2Nvb2tpZScsXG5cdCdjb29raWUyJyxcblx0J2RhdGUnLFxuXHQnZG50Jyxcblx0J2V4cGVjdCcsXG5cdCdob3N0Jyxcblx0J2tlZXAtYWxpdmUnLFxuXHQnb3JpZ2luJyxcblx0J3JlZmVyZXInLFxuXHQndGUnLFxuXHQndHJhaWxlcicsXG5cdCd0cmFuc2Zlci1lbmNvZGluZycsXG5cdCd1cGdyYWRlJyxcblx0J3ZpYSdcbl1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQW5DQTtBQUNBO0FBdUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFyQkE7QUFDQTtBQUNBO0FBdUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFBQTtBQVRBO0FBV0E7QUFDQTtBQVpBO0FBakJBO0FBaUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQVJBO0FBQ0E7QUFDQTtBQVVBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBbENBO0FBMENBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFySUE7QUF3SUE7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRUE7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFYQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU5BO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/stream-http/lib/request.js\n"); - -/***/ }), - -/***/ "../node_modules/stream-http/lib/response.js": -/*!***************************************************!*\ - !*** ../node_modules/stream-http/lib/response.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(process, global, Buffer) {var capability = __webpack_require__(/*! ./capability */ \"../node_modules/stream-http/lib/capability.js\");\n\nvar inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n\nvar stream = __webpack_require__(/*! readable-stream */ \"../node_modules/readable-stream/readable-browser.js\");\n\nvar rStates = exports.readyStates = {\n UNSENT: 0,\n OPENED: 1,\n HEADERS_RECEIVED: 2,\n LOADING: 3,\n DONE: 4\n};\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n var self = this;\n stream.Readable.call(self);\n self._mode = mode;\n self.headers = {};\n self.rawHeaders = [];\n self.trailers = {};\n self.rawTrailers = []; // Fake the 'close' event, but only once 'end' fires\n\n self.on('end', function () {\n // The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n process.nextTick(function () {\n self.emit('close');\n });\n });\n\n if (mode === 'fetch') {\n var read = function read() {\n reader.read().then(function (result) {\n if (self._destroyed) return;\n\n if (result.done) {\n global.clearTimeout(fetchTimer);\n self.push(null);\n return;\n }\n\n self.push(new Buffer(result.value));\n read();\n })[\"catch\"](function (err) {\n global.clearTimeout(fetchTimer);\n if (!self._destroyed) self.emit('error', err);\n });\n };\n\n self._fetchResponse = response;\n self.url = response.url;\n self.statusCode = response.status;\n self.statusMessage = response.statusText;\n response.headers.forEach(function (header, key) {\n self.headers[key.toLowerCase()] = header;\n self.rawHeaders.push(key, header);\n });\n\n if (capability.writableStream) {\n var writable = new WritableStream({\n write: function write(chunk) {\n return new Promise(function (resolve, reject) {\n if (self._destroyed) {\n reject();\n } else if (self.push(new Buffer(chunk))) {\n resolve();\n } else {\n self._resumeFetch = resolve;\n }\n });\n },\n close: function close() {\n global.clearTimeout(fetchTimer);\n if (!self._destroyed) self.push(null);\n },\n abort: function abort(err) {\n if (!self._destroyed) self.emit('error', err);\n }\n });\n\n try {\n response.body.pipeTo(writable)[\"catch\"](function (err) {\n global.clearTimeout(fetchTimer);\n if (!self._destroyed) self.emit('error', err);\n });\n return;\n } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\n } // fallback for when writableStream or pipeTo aren't available\n\n\n var reader = response.body.getReader();\n read();\n } else {\n self._xhr = xhr;\n self._pos = 0;\n self.url = xhr.responseURL;\n self.statusCode = xhr.status;\n self.statusMessage = xhr.statusText;\n var headers = xhr.getAllResponseHeaders().split(/\\r?\\n/);\n headers.forEach(function (header) {\n var matches = header.match(/^([^:]+):\\s*(.*)/);\n\n if (matches) {\n var key = matches[1].toLowerCase();\n\n if (key === 'set-cookie') {\n if (self.headers[key] === undefined) {\n self.headers[key] = [];\n }\n\n self.headers[key].push(matches[2]);\n } else if (self.headers[key] !== undefined) {\n self.headers[key] += ', ' + matches[2];\n } else {\n self.headers[key] = matches[2];\n }\n\n self.rawHeaders.push(matches[1], matches[2]);\n }\n });\n self._charset = 'x-user-defined';\n\n if (!capability.overrideMimeType) {\n var mimeType = self.rawHeaders['mime-type'];\n\n if (mimeType) {\n var charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/);\n\n if (charsetMatch) {\n self._charset = charsetMatch[1].toLowerCase();\n }\n }\n\n if (!self._charset) self._charset = 'utf-8'; // best guess\n }\n }\n};\n\ninherits(IncomingMessage, stream.Readable);\n\nIncomingMessage.prototype._read = function () {\n var self = this;\n var resolve = self._resumeFetch;\n\n if (resolve) {\n self._resumeFetch = null;\n resolve();\n }\n};\n\nIncomingMessage.prototype._onXHRProgress = function () {\n var self = this;\n var xhr = self._xhr;\n var response = null;\n\n switch (self._mode) {\n case 'text:vbarray':\n // For IE9\n if (xhr.readyState !== rStates.DONE) break;\n\n try {\n // This fails in IE8\n response = new global.VBArray(xhr.responseBody).toArray();\n } catch (e) {}\n\n if (response !== null) {\n self.push(new Buffer(response));\n break;\n }\n\n // Falls through in IE8\t\n\n case 'text':\n try {\n // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n response = xhr.responseText;\n } catch (e) {\n self._mode = 'text:vbarray';\n break;\n }\n\n if (response.length > self._pos) {\n var newData = response.substr(self._pos);\n\n if (self._charset === 'x-user-defined') {\n var buffer = new Buffer(newData.length);\n\n for (var i = 0; i < newData.length; i++) {\n buffer[i] = newData.charCodeAt(i) & 0xff;\n }\n\n self.push(buffer);\n } else {\n self.push(newData, self._charset);\n }\n\n self._pos = response.length;\n }\n\n break;\n\n case 'arraybuffer':\n if (xhr.readyState !== rStates.DONE || !xhr.response) break;\n response = xhr.response;\n self.push(new Buffer(new Uint8Array(response)));\n break;\n\n case 'moz-chunked-arraybuffer':\n // take whole\n response = xhr.response;\n if (xhr.readyState !== rStates.LOADING || !response) break;\n self.push(new Buffer(new Uint8Array(response)));\n break;\n\n case 'ms-stream':\n response = xhr.response;\n if (xhr.readyState !== rStates.LOADING) break;\n var reader = new global.MSStreamReader();\n\n reader.onprogress = function () {\n if (reader.result.byteLength > self._pos) {\n self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))));\n self._pos = reader.result.byteLength;\n }\n };\n\n reader.onload = function () {\n self.push(null);\n }; // reader.onerror = ??? // TODO: this\n\n\n reader.readAsArrayBuffer(response);\n break;\n } // The ms-stream case handles end separately in reader.onload()\n\n\n if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n self.push(null);\n }\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9yZXNwb25zZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3Jlc3BvbnNlLmpzP2RlNjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL2NhcGFiaWxpdHknKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG5cbnZhciByU3RhdGVzID0gZXhwb3J0cy5yZWFkeVN0YXRlcyA9IHtcblx0VU5TRU5UOiAwLFxuXHRPUEVORUQ6IDEsXG5cdEhFQURFUlNfUkVDRUlWRUQ6IDIsXG5cdExPQURJTkc6IDMsXG5cdERPTkU6IDRcbn1cblxudmFyIEluY29taW5nTWVzc2FnZSA9IGV4cG9ydHMuSW5jb21pbmdNZXNzYWdlID0gZnVuY3Rpb24gKHhociwgcmVzcG9uc2UsIG1vZGUsIGZldGNoVGltZXIpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdHN0cmVhbS5SZWFkYWJsZS5jYWxsKHNlbGYpXG5cblx0c2VsZi5fbW9kZSA9IG1vZGVcblx0c2VsZi5oZWFkZXJzID0ge31cblx0c2VsZi5yYXdIZWFkZXJzID0gW11cblx0c2VsZi50cmFpbGVycyA9IHt9XG5cdHNlbGYucmF3VHJhaWxlcnMgPSBbXVxuXG5cdC8vIEZha2UgdGhlICdjbG9zZScgZXZlbnQsIGJ1dCBvbmx5IG9uY2UgJ2VuZCcgZmlyZXNcblx0c2VsZi5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdC8vIFRoZSBuZXh0VGljayBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB0aGUgJ3JlcXVlc3QnIG1vZHVsZSBmcm9tIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcFxuXHRcdHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0c2VsZi5lbWl0KCdjbG9zZScpXG5cdFx0fSlcblx0fSlcblxuXHRpZiAobW9kZSA9PT0gJ2ZldGNoJykge1xuXHRcdHNlbGYuX2ZldGNoUmVzcG9uc2UgPSByZXNwb25zZVxuXG5cdFx0c2VsZi51cmwgPSByZXNwb25zZS51cmxcblx0XHRzZWxmLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNcblx0XHRzZWxmLnN0YXR1c01lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNUZXh0XG5cdFx0XG5cdFx0cmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIsIGtleSl7XG5cdFx0XHRzZWxmLmhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gaGVhZGVyXG5cdFx0XHRzZWxmLnJhd0hlYWRlcnMucHVzaChrZXksIGhlYWRlcilcblx0XHR9KVxuXG5cdFx0aWYgKGNhcGFiaWxpdHkud3JpdGFibGVTdHJlYW0pIHtcblx0XHRcdHZhciB3cml0YWJsZSA9IG5ldyBXcml0YWJsZVN0cmVhbSh7XG5cdFx0XHRcdHdyaXRlOiBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0XHRcdFx0aWYgKHNlbGYuX2Rlc3Ryb3llZCkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoKVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHNlbGYucHVzaChuZXcgQnVmZmVyKGNodW5rKSkpIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxmLl9yZXN1bWVGZXRjaCA9IHJlc29sdmVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGdsb2JhbC5jbGVhclRpbWVvdXQoZmV0Y2hUaW1lcilcblx0XHRcdFx0XHRpZiAoIXNlbGYuX2Rlc3Ryb3llZClcblx0XHRcdFx0XHRcdHNlbGYucHVzaChudWxsKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRcdGlmICghc2VsZi5fZGVzdHJveWVkKVxuXHRcdFx0XHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIGVycilcblx0XHRcdFx0fVxuXHRcdFx0fSlcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzcG9uc2UuYm9keS5waXBlVG8od3JpdGFibGUpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0XHRnbG9iYWwuY2xlYXJUaW1lb3V0KGZldGNoVGltZXIpXG5cdFx0XHRcdFx0aWYgKCFzZWxmLl9kZXN0cm95ZWQpXG5cdFx0XHRcdFx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIHBpcGVUbyBtZXRob2QgaXNuJ3QgZGVmaW5lZC4gQ2FuJ3QgZmluZCBhIGJldHRlciB3YXkgdG8gZmVhdHVyZSB0ZXN0IHRoaXNcblx0XHR9XG5cdFx0Ly8gZmFsbGJhY2sgZm9yIHdoZW4gd3JpdGFibGVTdHJlYW0gb3IgcGlwZVRvIGFyZW4ndCBhdmFpbGFibGVcblx0XHR2YXIgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKVxuXHRcdGZ1bmN0aW9uIHJlYWQgKCkge1xuXHRcdFx0cmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcblx0XHRcdFx0aWYgKHNlbGYuX2Rlc3Ryb3llZClcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0aWYgKHJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdFx0Z2xvYmFsLmNsZWFyVGltZW91dChmZXRjaFRpbWVyKVxuXHRcdFx0XHRcdHNlbGYucHVzaChudWxsKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKHJlc3VsdC52YWx1ZSkpXG5cdFx0XHRcdHJlYWQoKVxuXHRcdFx0fSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRnbG9iYWwuY2xlYXJUaW1lb3V0KGZldGNoVGltZXIpXG5cdFx0XHRcdGlmICghc2VsZi5fZGVzdHJveWVkKVxuXHRcdFx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG5cdFx0XHR9KVxuXHRcdH1cblx0XHRyZWFkKClcblx0fSBlbHNlIHtcblx0XHRzZWxmLl94aHIgPSB4aHJcblx0XHRzZWxmLl9wb3MgPSAwXG5cblx0XHRzZWxmLnVybCA9IHhoci5yZXNwb25zZVVSTFxuXHRcdHNlbGYuc3RhdHVzQ29kZSA9IHhoci5zdGF0dXNcblx0XHRzZWxmLnN0YXR1c01lc3NhZ2UgPSB4aHIuc3RhdHVzVGV4dFxuXHRcdHZhciBoZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnNwbGl0KC9cXHI/XFxuLylcblx0XHRoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKGhlYWRlcikge1xuXHRcdFx0dmFyIG1hdGNoZXMgPSBoZWFkZXIubWF0Y2goL14oW146XSspOlxccyooLiopLylcblx0XHRcdGlmIChtYXRjaGVzKSB7XG5cdFx0XHRcdHZhciBrZXkgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcblx0XHRcdFx0aWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG5cdFx0XHRcdFx0aWYgKHNlbGYuaGVhZGVyc1trZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHNlbGYuaGVhZGVyc1trZXldID0gW11cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi5oZWFkZXJzW2tleV0ucHVzaChtYXRjaGVzWzJdKVxuXHRcdFx0XHR9IGVsc2UgaWYgKHNlbGYuaGVhZGVyc1trZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzZWxmLmhlYWRlcnNba2V5XSArPSAnLCAnICsgbWF0Y2hlc1syXVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYuaGVhZGVyc1trZXldID0gbWF0Y2hlc1syXVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGYucmF3SGVhZGVycy5wdXNoKG1hdGNoZXNbMV0sIG1hdGNoZXNbMl0pXG5cdFx0XHR9XG5cdFx0fSlcblxuXHRcdHNlbGYuX2NoYXJzZXQgPSAneC11c2VyLWRlZmluZWQnXG5cdFx0aWYgKCFjYXBhYmlsaXR5Lm92ZXJyaWRlTWltZVR5cGUpIHtcblx0XHRcdHZhciBtaW1lVHlwZSA9IHNlbGYucmF3SGVhZGVyc1snbWltZS10eXBlJ11cblx0XHRcdGlmIChtaW1lVHlwZSkge1xuXHRcdFx0XHR2YXIgY2hhcnNldE1hdGNoID0gbWltZVR5cGUubWF0Y2goLztcXHMqY2hhcnNldD0oW147XSkoO3wkKS8pXG5cdFx0XHRcdGlmIChjaGFyc2V0TWF0Y2gpIHtcblx0XHRcdFx0XHRzZWxmLl9jaGFyc2V0ID0gY2hhcnNldE1hdGNoWzFdLnRvTG93ZXJDYXNlKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFzZWxmLl9jaGFyc2V0KVxuXHRcdFx0XHRzZWxmLl9jaGFyc2V0ID0gJ3V0Zi04JyAvLyBiZXN0IGd1ZXNzXG5cdFx0fVxuXHR9XG59XG5cbmluaGVyaXRzKEluY29taW5nTWVzc2FnZSwgc3RyZWFtLlJlYWRhYmxlKVxuXG5JbmNvbWluZ01lc3NhZ2UucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHR2YXIgcmVzb2x2ZSA9IHNlbGYuX3Jlc3VtZUZldGNoXG5cdGlmIChyZXNvbHZlKSB7XG5cdFx0c2VsZi5fcmVzdW1lRmV0Y2ggPSBudWxsXG5cdFx0cmVzb2x2ZSgpXG5cdH1cbn1cblxuSW5jb21pbmdNZXNzYWdlLnByb3RvdHlwZS5fb25YSFJQcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cblx0dmFyIHhociA9IHNlbGYuX3hoclxuXG5cdHZhciByZXNwb25zZSA9IG51bGxcblx0c3dpdGNoIChzZWxmLl9tb2RlKSB7XG5cdFx0Y2FzZSAndGV4dDp2YmFycmF5JzogLy8gRm9yIElFOVxuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9PSByU3RhdGVzLkRPTkUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBUaGlzIGZhaWxzIGluIElFOFxuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBnbG9iYWwuVkJBcnJheSh4aHIucmVzcG9uc2VCb2R5KS50b0FycmF5KClcblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRpZiAocmVzcG9uc2UgIT09IG51bGwpIHtcblx0XHRcdFx0c2VsZi5wdXNoKG5ldyBCdWZmZXIocmVzcG9uc2UpKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdFx0Ly8gRmFsbHMgdGhyb3VnaCBpbiBJRThcdFxuXHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0dHJ5IHsgLy8gVGhpcyB3aWxsIGZhaWwgd2hlbiByZWFkeVN0YXRlID0gMyBpbiBJRTkuIFN3aXRjaCBtb2RlIGFuZCB3YWl0IGZvciByZWFkeVN0YXRlID0gNFxuXHRcdFx0XHRyZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHRcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0c2VsZi5fbW9kZSA9ICd0ZXh0OnZiYXJyYXknXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0XHRpZiAocmVzcG9uc2UubGVuZ3RoID4gc2VsZi5fcG9zKSB7XG5cdFx0XHRcdHZhciBuZXdEYXRhID0gcmVzcG9uc2Uuc3Vic3RyKHNlbGYuX3Bvcylcblx0XHRcdFx0aWYgKHNlbGYuX2NoYXJzZXQgPT09ICd4LXVzZXItZGVmaW5lZCcpIHtcblx0XHRcdFx0XHR2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihuZXdEYXRhLmxlbmd0aClcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5ld0RhdGEubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0XHRidWZmZXJbaV0gPSBuZXdEYXRhLmNoYXJDb2RlQXQoaSkgJiAweGZmXG5cblx0XHRcdFx0XHRzZWxmLnB1c2goYnVmZmVyKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYucHVzaChuZXdEYXRhLCBzZWxmLl9jaGFyc2V0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGYuX3BvcyA9IHJlc3BvbnNlLmxlbmd0aFxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHRjYXNlICdhcnJheWJ1ZmZlcic6XG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHJTdGF0ZXMuRE9ORSB8fCAheGhyLnJlc3BvbnNlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0cmVzcG9uc2UgPSB4aHIucmVzcG9uc2Vcblx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHJlc3BvbnNlKSkpXG5cdFx0XHRicmVha1xuXHRcdGNhc2UgJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJzogLy8gdGFrZSB3aG9sZVxuXHRcdFx0cmVzcG9uc2UgPSB4aHIucmVzcG9uc2Vcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gclN0YXRlcy5MT0FESU5HIHx8ICFyZXNwb25zZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHJlc3BvbnNlKSkpXG5cdFx0XHRicmVha1xuXHRcdGNhc2UgJ21zLXN0cmVhbSc6XG5cdFx0XHRyZXNwb25zZSA9IHhoci5yZXNwb25zZVxuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9PSByU3RhdGVzLkxPQURJTkcpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR2YXIgcmVhZGVyID0gbmV3IGdsb2JhbC5NU1N0cmVhbVJlYWRlcigpXG5cdFx0XHRyZWFkZXIub25wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHJlYWRlci5yZXN1bHQuYnl0ZUxlbmd0aCA+IHNlbGYuX3Bvcykge1xuXHRcdFx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQuc2xpY2Uoc2VsZi5fcG9zKSkpKVxuXHRcdFx0XHRcdHNlbGYuX3BvcyA9IHJlYWRlci5yZXN1bHQuYnl0ZUxlbmd0aFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZWxmLnB1c2gobnVsbClcblx0XHRcdH1cblx0XHRcdC8vIHJlYWRlci5vbmVycm9yID0gPz8/IC8vIFRPRE86IHRoaXNcblx0XHRcdHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihyZXNwb25zZSlcblx0XHRcdGJyZWFrXG5cdH1cblxuXHQvLyBUaGUgbXMtc3RyZWFtIGNhc2UgaGFuZGxlcyBlbmQgc2VwYXJhdGVseSBpbiByZWFkZXIub25sb2FkKClcblx0aWYgKHNlbGYuX3hoci5yZWFkeVN0YXRlID09PSByU3RhdGVzLkRPTkUgJiYgc2VsZi5fbW9kZSAhPT0gJ21zLXN0cmVhbScpIHtcblx0XHRzZWxmLnB1c2gobnVsbClcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFNQTtBQUFBO0FBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFaQTtBQWhEQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBRkE7QUFZQTtBQUNBO0FBQ0E7QUFkQTtBQWlCQTtBQUNBO0FBRUE7QUFwQkE7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFOQTtBQUNBO0FBckNBO0FBQ0E7QUFDQTtBQTRDQTtBQWtCQTtBQWhFQTtBQWtFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFKQTtBQU1BO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBZkE7QUFrQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUF6SEE7QUFDQTtBQTJIQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUtBO0FBQ0E7QUFaQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBOURBO0FBQ0E7QUFDQTtBQWdFQTtBQUNBO0FBQ0E7QUExRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/stream-http/lib/response.js\n"); - -/***/ }), - -/***/ "../node_modules/string_decoder/lib/string_decoder.js": -/*!************************************************************!*\ - !*** ../node_modules/string_decoder/lib/string_decoder.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/*<replacement>*/\n\nvar Buffer = __webpack_require__(/*! safe-buffer */ \"../node_modules/safe-buffer/index.js\").Buffer;\n/*</replacement>*/\n\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n case 'raw':\n return true;\n\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n\n case 'latin1':\n case 'binary':\n return 'latin1';\n\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n\n default:\n if (retried) return; // undefined\n\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\n; // Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\n\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n} // StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\n\n\nexports.StringDecoder = StringDecoder;\n\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer\n\nStringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\n\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n}; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\n\n\nfunction utf8CheckByte(_byte) {\n if (_byte <= 0x7F) return 0;else if (_byte >> 5 === 0x06) return 2;else if (_byte >> 4 === 0x0E) return 3;else if (_byte >> 3 === 0x1E) return 4;\n return _byte >> 6 === 0x02 ? -1 : -2;\n} // Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\n\n\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n\n return nb;\n }\n\n return 0;\n} // Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\n\n\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return \"\\uFFFD\";\n }\n\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return \"\\uFFFD\";\n }\n\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return \"\\uFFFD\";\n }\n }\n }\n} // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\n\n\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n} // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\n\n\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n} // For UTF-8, a replacement character is added when ending on a partial\n// character.\n\n\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + \"\\uFFFD\";\n return r;\n} // UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\n\n\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n\n return r;\n }\n\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n} // For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\n\n\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n} // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\n\n\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzP2IyODciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUpBO0FBRkE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQW5CQTtBQXFCQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBYkE7QUFDQTtBQWVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU5BO0FBVUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/string_decoder/lib/string_decoder.js\n"); - -/***/ }), - -/***/ "../node_modules/stringify-entities/dangerous.json": -/*!*********************************************************!*\ - !*** ../node_modules/stringify-entities/dangerous.json ***! - \*********************************************************/ -/*! exports provided: 0, 1, 2, 3, 4, 5, 6, 7, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"[\\\"cent\\\",\\\"copy\\\",\\\"divide\\\",\\\"gt\\\",\\\"lt\\\",\\\"not\\\",\\\"para\\\",\\\"times\\\"]\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9kYW5nZXJvdXMuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/stringify-entities/dangerous.json\n"); - -/***/ }), - -/***/ "../node_modules/stringify-entities/index.js": -/*!***************************************************!*\ - !*** ../node_modules/stringify-entities/index.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar entities = __webpack_require__(/*! character-entities-html4 */ \"../node_modules/character-entities-html4/index.json\");\n\nvar legacy = __webpack_require__(/*! character-entities-legacy */ \"../node_modules/character-entities-legacy/index.json\");\n\nvar hexadecimal = __webpack_require__(/*! is-hexadecimal */ \"../node_modules/is-hexadecimal/index.js\");\n\nvar alphanumerical = __webpack_require__(/*! is-alphanumerical */ \"../node_modules/is-alphanumerical/index.js\");\n\nvar dangerous = __webpack_require__(/*! ./dangerous.json */ \"../node_modules/stringify-entities/dangerous.json\");\n/* Expose. */\n\n\nmodule.exports = encode;\nencode.escape = escape;\nvar own = {}.hasOwnProperty;\n/* List of enforced escapes. */\n\nvar escapes = ['\"', \"'\", '<', '>', '&', '`'];\n/* Map of characters to names. */\n\nvar characters = construct();\n/* Default escapes. */\n\nvar defaultEscapes = toExpression(escapes);\n/* Surrogate pairs. */\n\nvar surrogatePair = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n/* Non-ASCII characters. */\n// eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n\nvar bmp = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n/* Encode special characters in `value`. */\n\nfunction encode(value, options) {\n var settings = options || {};\n var subset = settings.subset;\n var set = subset ? toExpression(subset) : defaultEscapes;\n var escapeOnly = settings.escapeOnly;\n var omit = settings.omitOptionalSemicolons;\n value = value.replace(set, function (_char, pos, val) {\n return one(_char, val.charAt(pos + 1), settings);\n });\n\n if (subset || escapeOnly) {\n return value;\n }\n\n return value.replace(surrogatePair, replaceSurrogatePair).replace(bmp, replaceBmp);\n\n function replaceSurrogatePair(pair, pos, val) {\n return toHexReference((pair.charCodeAt(0) - 0xd800) * 0x400 + pair.charCodeAt(1) - 0xdc00 + 0x10000, val.charAt(pos + 2), omit);\n }\n\n function replaceBmp(_char2, pos, val) {\n return one(_char2, val.charAt(pos + 1), settings);\n }\n}\n/* Shortcut to escape special characters in HTML. */\n\n\nfunction escape(value) {\n return encode(value, {\n escapeOnly: true,\n useNamedReferences: true\n });\n}\n/* Encode `char` according to `options`. */\n\n\nfunction one(_char3, next, options) {\n var shortest = options.useShortestReferences;\n var omit = options.omitOptionalSemicolons;\n var named;\n var numeric;\n\n if ((shortest || options.useNamedReferences) && own.call(characters, _char3)) {\n named = toNamed(characters[_char3], next, omit, options.attribute);\n }\n\n if (shortest || !named) {\n numeric = toHexReference(_char3.charCodeAt(0), next, omit);\n }\n\n if (named && (!shortest || named.length < numeric.length)) {\n return named;\n }\n\n return numeric;\n}\n/* Transform `code` into an entity. */\n\n\nfunction toNamed(name, next, omit, attribute) {\n var value = '&' + name;\n\n if (omit && own.call(legacy, name) && dangerous.indexOf(name) === -1 && (!attribute || next && next !== '=' && !alphanumerical(next))) {\n return value;\n }\n\n return value + ';';\n}\n/* Transform `code` into a hexadecimal character reference. */\n\n\nfunction toHexReference(code, next, omit) {\n var value = '&#x' + code.toString(16).toUpperCase();\n return omit && next && !hexadecimal(next) ? value : value + ';';\n}\n/* Create an expression for `characters`. */\n\n\nfunction toExpression(characters) {\n return new RegExp('[' + characters.join('') + ']', 'g');\n}\n/* Construct the map. */\n\n\nfunction construct() {\n var chars = {};\n var name;\n\n for (name in entities) {\n chars[entities[name]] = name;\n }\n\n return chars;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2luZGV4LmpzP2E3M2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbnZhciBlbnRpdGllcyA9IHJlcXVpcmUoJ2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNCcpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeScpXG52YXIgaGV4YWRlY2ltYWwgPSByZXF1aXJlKCdpcy1oZXhhZGVjaW1hbCcpXG52YXIgYWxwaGFudW1lcmljYWwgPSByZXF1aXJlKCdpcy1hbHBoYW51bWVyaWNhbCcpXG52YXIgZGFuZ2Vyb3VzID0gcmVxdWlyZSgnLi9kYW5nZXJvdXMuanNvbicpXG5cbi8qIEV4cG9zZS4gKi9cbm1vZHVsZS5leHBvcnRzID0gZW5jb2RlXG5lbmNvZGUuZXNjYXBlID0gZXNjYXBlXG5cbnZhciBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKiBMaXN0IG9mIGVuZm9yY2VkIGVzY2FwZXMuICovXG52YXIgZXNjYXBlcyA9IFsnXCInLCBcIidcIiwgJzwnLCAnPicsICcmJywgJ2AnXVxuXG4vKiBNYXAgb2YgY2hhcmFjdGVycyB0byBuYW1lcy4gKi9cbnZhciBjaGFyYWN0ZXJzID0gY29uc3RydWN0KClcblxuLyogRGVmYXVsdCBlc2NhcGVzLiAqL1xudmFyIGRlZmF1bHRFc2NhcGVzID0gdG9FeHByZXNzaW9uKGVzY2FwZXMpXG5cbi8qIFN1cnJvZ2F0ZSBwYWlycy4gKi9cbnZhciBzdXJyb2dhdGVQYWlyID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZ1xuXG4vKiBOb24tQVNDSUkgY2hhcmFjdGVycy4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4LCB1bmljb3JuL25vLWhleC1lc2NhcGVcbnZhciBibXAgPSAvW1xceDAxLVxcdFxceDBCXFxmXFx4MEUtXFx4MUZcXHg3RlxceDgxXFx4OERcXHg4RlxceDkwXFx4OURcXHhBMC1cXHVGRkZGXS9nXG5cbi8qIEVuY29kZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYHZhbHVlYC4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBzdWJzZXQgPSBzZXR0aW5ncy5zdWJzZXRcbiAgdmFyIHNldCA9IHN1YnNldCA/IHRvRXhwcmVzc2lvbihzdWJzZXQpIDogZGVmYXVsdEVzY2FwZXNcbiAgdmFyIGVzY2FwZU9ubHkgPSBzZXR0aW5ncy5lc2NhcGVPbmx5XG4gIHZhciBvbWl0ID0gc2V0dGluZ3Mub21pdE9wdGlvbmFsU2VtaWNvbG9uc1xuXG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShzZXQsIGZ1bmN0aW9uKGNoYXIsIHBvcywgdmFsKSB7XG4gICAgcmV0dXJuIG9uZShjaGFyLCB2YWwuY2hhckF0KHBvcyArIDEpLCBzZXR0aW5ncylcbiAgfSlcblxuICBpZiAoc3Vic2V0IHx8IGVzY2FwZU9ubHkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKHN1cnJvZ2F0ZVBhaXIsIHJlcGxhY2VTdXJyb2dhdGVQYWlyKVxuICAgIC5yZXBsYWNlKGJtcCwgcmVwbGFjZUJtcClcblxuICBmdW5jdGlvbiByZXBsYWNlU3Vycm9nYXRlUGFpcihwYWlyLCBwb3MsIHZhbCkge1xuICAgIHJldHVybiB0b0hleFJlZmVyZW5jZShcbiAgICAgIChwYWlyLmNoYXJDb2RlQXQoMCkgLSAweGQ4MDApICogMHg0MDAgK1xuICAgICAgICBwYWlyLmNoYXJDb2RlQXQoMSkgLVxuICAgICAgICAweGRjMDAgK1xuICAgICAgICAweDEwMDAwLFxuICAgICAgdmFsLmNoYXJBdChwb3MgKyAyKSxcbiAgICAgIG9taXRcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlQm1wKGNoYXIsIHBvcywgdmFsKSB7XG4gICAgcmV0dXJuIG9uZShjaGFyLCB2YWwuY2hhckF0KHBvcyArIDEpLCBzZXR0aW5ncylcbiAgfVxufVxuXG4vKiBTaG9ydGN1dCB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIEhUTUwuICovXG5mdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgcmV0dXJuIGVuY29kZSh2YWx1ZSwge1xuICAgIGVzY2FwZU9ubHk6IHRydWUsXG4gICAgdXNlTmFtZWRSZWZlcmVuY2VzOiB0cnVlXG4gIH0pXG59XG5cbi8qIEVuY29kZSBgY2hhcmAgYWNjb3JkaW5nIHRvIGBvcHRpb25zYC4gKi9cbmZ1bmN0aW9uIG9uZShjaGFyLCBuZXh0LCBvcHRpb25zKSB7XG4gIHZhciBzaG9ydGVzdCA9IG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzXG4gIHZhciBvbWl0ID0gb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zXG4gIHZhciBuYW1lZFxuICB2YXIgbnVtZXJpY1xuXG4gIGlmICgoc2hvcnRlc3QgfHwgb3B0aW9ucy51c2VOYW1lZFJlZmVyZW5jZXMpICYmIG93bi5jYWxsKGNoYXJhY3RlcnMsIGNoYXIpKSB7XG4gICAgbmFtZWQgPSB0b05hbWVkKGNoYXJhY3RlcnNbY2hhcl0sIG5leHQsIG9taXQsIG9wdGlvbnMuYXR0cmlidXRlKVxuICB9XG5cbiAgaWYgKHNob3J0ZXN0IHx8ICFuYW1lZCkge1xuICAgIG51bWVyaWMgPSB0b0hleFJlZmVyZW5jZShjaGFyLmNoYXJDb2RlQXQoMCksIG5leHQsIG9taXQpXG4gIH1cblxuICBpZiAobmFtZWQgJiYgKCFzaG9ydGVzdCB8fCBuYW1lZC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gbmFtZWRcbiAgfVxuXG4gIHJldHVybiBudW1lcmljXG59XG5cbi8qIFRyYW5zZm9ybSBgY29kZWAgaW50byBhbiBlbnRpdHkuICovXG5mdW5jdGlvbiB0b05hbWVkKG5hbWUsIG5leHQsIG9taXQsIGF0dHJpYnV0ZSkge1xuICB2YXIgdmFsdWUgPSAnJicgKyBuYW1lXG5cbiAgaWYgKFxuICAgIG9taXQgJiZcbiAgICBvd24uY2FsbChsZWdhY3ksIG5hbWUpICYmXG4gICAgZGFuZ2Vyb3VzLmluZGV4T2YobmFtZSkgPT09IC0xICYmXG4gICAgKCFhdHRyaWJ1dGUgfHwgKG5leHQgJiYgbmV4dCAhPT0gJz0nICYmICFhbHBoYW51bWVyaWNhbChuZXh0KSkpXG4gICkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlICsgJzsnXG59XG5cbi8qIFRyYW5zZm9ybSBgY29kZWAgaW50byBhIGhleGFkZWNpbWFsIGNoYXJhY3RlciByZWZlcmVuY2UuICovXG5mdW5jdGlvbiB0b0hleFJlZmVyZW5jZShjb2RlLCBuZXh0LCBvbWl0KSB7XG4gIHZhciB2YWx1ZSA9ICcmI3gnICsgY29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICByZXR1cm4gb21pdCAmJiBuZXh0ICYmICFoZXhhZGVjaW1hbChuZXh0KSA/IHZhbHVlIDogdmFsdWUgKyAnOydcbn1cblxuLyogQ3JlYXRlIGFuIGV4cHJlc3Npb24gZm9yIGBjaGFyYWN0ZXJzYC4gKi9cbmZ1bmN0aW9uIHRvRXhwcmVzc2lvbihjaGFyYWN0ZXJzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKCdbJyArIGNoYXJhY3RlcnMuam9pbignJykgKyAnXScsICdnJylcbn1cblxuLyogQ29uc3RydWN0IHRoZSBtYXAuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3QoKSB7XG4gIHZhciBjaGFycyA9IHt9XG4gIHZhciBuYW1lXG5cbiAgZm9yIChuYW1lIGluIGVudGl0aWVzKSB7XG4gICAgY2hhcnNbZW50aXRpZXNbbmFtZV1dID0gbmFtZVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/stringify-entities/index.js\n"); - -/***/ }), - -/***/ "../node_modules/strip-markdown/index.js": -/*!***********************************************!*\ - !*** ../node_modules/strip-markdown/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = strip; // Expose modifiers for available node types.\n// Node types not listed here are not changed (but their children are).\n\nvar map = {\n heading: paragraph,\n text: text,\n inlineCode: text,\n image: image,\n imageReference: image,\n \"break\": lineBreak,\n blockquote: children,\n list: children,\n listItem: children,\n strong: children,\n emphasis: children,\n \"delete\": children,\n link: children,\n linkReference: children,\n code: empty,\n horizontalRule: empty,\n thematicBreak: empty,\n html: empty,\n table: empty,\n tableCell: empty,\n definition: empty,\n yaml: empty,\n toml: empty\n};\nvar mapFiltered;\n\nfunction strip(options) {\n var keep = (options || {}).keep || []; // Remove node types specified in `keep` from map\n\n mapFiltered = Object.assign({}, map);\n keep.forEach(function (nodeType) {\n if (nodeType in mapFiltered) {\n delete mapFiltered[nodeType];\n } else {\n throw new Error('Invalid `keep` option: No modifier is defined for node type `' + nodeType + '`');\n }\n });\n return one;\n}\n\nfunction one(node) {\n var type = node && node.type;\n\n if (type in mapFiltered) {\n node = mapFiltered[type](node);\n }\n\n if ('length' in node) {\n node = all(node);\n }\n\n if (node.children) {\n node.children = all(node.children);\n }\n\n return node;\n}\n\nfunction all(nodes) {\n var index = -1;\n var length = nodes.length;\n var result = [];\n var value;\n\n while (++index < length) {\n value = one(nodes[index]);\n\n if (value && typeof value.length === 'number') {\n result = result.concat(value.map(one));\n } else {\n result.push(value);\n }\n }\n\n return clean(result);\n} // Clean nodes: merges texts.\n\n\nfunction clean(values) {\n var index = -1;\n var length = values.length;\n var result = [];\n var prev = null;\n var value;\n\n while (++index < length) {\n value = values[index];\n\n if (prev && 'value' in value && value.type === prev.type) {\n prev.value += value.value;\n } else {\n result.push(value);\n prev = value;\n }\n }\n\n return result;\n}\n\nfunction image(node) {\n return {\n type: 'text',\n value: node.alt || node.title || ''\n };\n}\n\nfunction text(node) {\n return {\n type: 'text',\n value: node.value\n };\n}\n\nfunction paragraph(node) {\n return {\n type: 'paragraph',\n children: node.children\n };\n}\n\nfunction children(node) {\n return node.children || [];\n}\n\nfunction lineBreak() {\n return {\n type: 'text',\n value: '\\n'\n };\n}\n\nfunction empty() {\n return {\n type: 'text',\n value: ''\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLW1hcmtkb3duL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHJpcC1tYXJrZG93bi9pbmRleC5qcz9hNWIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmlwXG5cbi8vIEV4cG9zZSBtb2RpZmllcnMgZm9yIGF2YWlsYWJsZSBub2RlIHR5cGVzLlxuLy8gTm9kZSB0eXBlcyBub3QgbGlzdGVkIGhlcmUgYXJlIG5vdCBjaGFuZ2VkIChidXQgdGhlaXIgY2hpbGRyZW4gYXJlKS5cbnZhciBtYXAgPSB7XG4gIGhlYWRpbmc6IHBhcmFncmFwaCxcbiAgdGV4dDogdGV4dCxcbiAgaW5saW5lQ29kZTogdGV4dCxcbiAgaW1hZ2U6IGltYWdlLFxuICBpbWFnZVJlZmVyZW5jZTogaW1hZ2UsXG4gIGJyZWFrOiBsaW5lQnJlYWssXG5cbiAgYmxvY2txdW90ZTogY2hpbGRyZW4sXG4gIGxpc3Q6IGNoaWxkcmVuLFxuICBsaXN0SXRlbTogY2hpbGRyZW4sXG4gIHN0cm9uZzogY2hpbGRyZW4sXG4gIGVtcGhhc2lzOiBjaGlsZHJlbixcbiAgZGVsZXRlOiBjaGlsZHJlbixcbiAgbGluazogY2hpbGRyZW4sXG4gIGxpbmtSZWZlcmVuY2U6IGNoaWxkcmVuLFxuXG4gIGNvZGU6IGVtcHR5LFxuICBob3Jpem9udGFsUnVsZTogZW1wdHksXG4gIHRoZW1hdGljQnJlYWs6IGVtcHR5LFxuICBodG1sOiBlbXB0eSxcbiAgdGFibGU6IGVtcHR5LFxuICB0YWJsZUNlbGw6IGVtcHR5LFxuICBkZWZpbml0aW9uOiBlbXB0eSxcbiAgeWFtbDogZW1wdHksXG4gIHRvbWw6IGVtcHR5XG59XG52YXIgbWFwRmlsdGVyZWRcblxuZnVuY3Rpb24gc3RyaXAob3B0aW9ucykge1xuICB2YXIga2VlcCA9IChvcHRpb25zIHx8IHt9KS5rZWVwIHx8IFtdXG5cbiAgLy8gUmVtb3ZlIG5vZGUgdHlwZXMgc3BlY2lmaWVkIGluIGBrZWVwYCBmcm9tIG1hcFxuICBtYXBGaWx0ZXJlZCA9IE9iamVjdC5hc3NpZ24oe30sIG1hcClcbiAga2VlcC5mb3JFYWNoKGZ1bmN0aW9uKG5vZGVUeXBlKSB7XG4gICAgaWYgKG5vZGVUeXBlIGluIG1hcEZpbHRlcmVkKSB7XG4gICAgICBkZWxldGUgbWFwRmlsdGVyZWRbbm9kZVR5cGVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgYGtlZXBgIG9wdGlvbjogTm8gbW9kaWZpZXIgaXMgZGVmaW5lZCBmb3Igbm9kZSB0eXBlIGAnICtcbiAgICAgICAgICBub2RlVHlwZSArXG4gICAgICAgICAgJ2AnXG4gICAgICApXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvbmVcbn1cblxuZnVuY3Rpb24gb25lKG5vZGUpIHtcbiAgdmFyIHR5cGUgPSBub2RlICYmIG5vZGUudHlwZVxuXG4gIGlmICh0eXBlIGluIG1hcEZpbHRlcmVkKSB7XG4gICAgbm9kZSA9IG1hcEZpbHRlcmVkW3R5cGVdKG5vZGUpXG4gIH1cblxuICBpZiAoJ2xlbmd0aCcgaW4gbm9kZSkge1xuICAgIG5vZGUgPSBhbGwobm9kZSlcbiAgfVxuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgbm9kZS5jaGlsZHJlbiA9IGFsbChub2RlLmNoaWxkcmVuKVxuICB9XG5cbiAgcmV0dXJuIG5vZGVcbn1cblxuZnVuY3Rpb24gYWxsKG5vZGVzKSB7XG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGhcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciB2YWx1ZVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFsdWUgPSBvbmUobm9kZXNbaW5kZXhdKVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHZhbHVlLm1hcChvbmUpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xlYW4ocmVzdWx0KVxufVxuXG4vLyBDbGVhbiBub2RlczogbWVyZ2VzIHRleHRzLlxuZnVuY3Rpb24gY2xlYW4odmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xXG4gIHZhciBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoXG4gIHZhciByZXN1bHQgPSBbXVxuICB2YXIgcHJldiA9IG51bGxcbiAgdmFyIHZhbHVlXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF1cblxuICAgIGlmIChwcmV2ICYmICd2YWx1ZScgaW4gdmFsdWUgJiYgdmFsdWUudHlwZSA9PT0gcHJldi50eXBlKSB7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKVxuICAgICAgcHJldiA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBpbWFnZShub2RlKSB7XG4gIHJldHVybiB7dHlwZTogJ3RleHQnLCB2YWx1ZTogbm9kZS5hbHQgfHwgbm9kZS50aXRsZSB8fCAnJ31cbn1cblxuZnVuY3Rpb24gdGV4dChub2RlKSB7XG4gIHJldHVybiB7dHlwZTogJ3RleHQnLCB2YWx1ZTogbm9kZS52YWx1ZX1cbn1cblxuZnVuY3Rpb24gcGFyYWdyYXBoKG5vZGUpIHtcbiAgcmV0dXJuIHt0eXBlOiAncGFyYWdyYXBoJywgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW59XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2hpbGRyZW4gfHwgW11cbn1cblxuZnVuY3Rpb24gbGluZUJyZWFrKCkge1xuICByZXR1cm4ge3R5cGU6ICd0ZXh0JywgdmFsdWU6ICdcXG4nfVxufVxuXG5mdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnJ31cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBS0E7QUFUQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/strip-markdown/index.js\n"); - -/***/ }), - -/***/ "../node_modules/style-loader/lib/addStyles.js": -/*!*****************************************************!*\ - !*** ../node_modules/style-loader/lib/addStyles.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(/*! ./urls */ \"../node_modules/style-loader/lib/urls.js\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (false) {}\n\n\treturn __webpack_require__.nc;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcz81MWVjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCl7XG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHBhc3NpbmcgZnVuY3Rpb24gaW4gb3B0aW9ucywgdGhlbiB1c2UgaXQgZm9yIHJlc29sdmUgXCJoZWFkXCIgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAvLyBVc2VmdWwgZm9yIFNoYWRvdyBSb290IHN0eWxlIGkuZVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAvLyAgIGluc2VydEludG86IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9vXCIpLnNoYWRvd1Jvb3QgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZ2V0VGFyZ2V0LmNhbGwodGhpcywgdGFyZ2V0LCBwYXJlbnQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEF0LmJlZm9yZSwgdGFyZ2V0KTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblxuXHRpZihvcHRpb25zLmF0dHJzLm5vbmNlID09PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgbm9uY2UgPSBnZXROb25jZSgpO1xuXHRcdGlmIChub25jZSkge1xuXHRcdFx0b3B0aW9ucy5hdHRycy5ub25jZSA9IG5vbmNlO1xuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vbmNlKCkge1xuXHRpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdCA/IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpIFxuXHRcdCA6IG9wdGlvbnMudHJhbnNmb3JtLmRlZmF1bHQob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/style-loader/lib/addStyles.js\n"); - -/***/ }), - -/***/ "../node_modules/style-loader/lib/urls.js": -/*!************************************************!*\ - !*** ../node_modules/style-loader/lib/urls.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n } // blank or null?\n\n\n if (!css || typeof css !== \"string\") {\n return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\"); // convert each url(...)\n\n /*\n This regular expression is just a way to recursively match brackets within\n a string.\n \t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n ( = Start a capturing group\n (?: = Start a non-capturing group\n [^)(] = Match anything that isn't a parentheses\n | = OR\n \\( = Match a start parentheses\n (?: = Start another non-capturing groups\n [^)(]+ = Match anything that isn't a parentheses\n | = OR\n \\( = Match a start parentheses\n [^)(]* = Match anything that isn't a parentheses\n \\) = Match a end parentheses\n ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n \\) = Match a close parens\n \t /gi = Get all matches, not the first. Be case insensitive.\n */\n\n var fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function (fullMatch, origUrl) {\n // strip quotes (if they exist)\n var unquotedOrigUrl = origUrl.trim().replace(/^\"(.*)\"$/, function (o, $1) {\n return $1;\n }).replace(/^'(.*)'$/, function (o, $1) {\n return $1;\n }); // already a full url? no change\n\n if (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n return fullMatch;\n } // convert the url to a full url\n\n\n var newUrl;\n\n if (unquotedOrigUrl.indexOf(\"//\") === 0) {\n //TODO: should we add protocol?\n newUrl = unquotedOrigUrl;\n } else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n // path should be relative to the base url\n newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n } else {\n // path should be relative to current directory\n newUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n } // send back the fixed url(...)\n\n\n return \"url(\" + JSON.stringify(newUrl) + \")\";\n }); // send back the fixed css\n\n return fixedCss;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzPzk0MzIiXSwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkE7QUFDQTtBQUNBO0FBRUE7QUFGQTtBQUdBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQXJFQTtBQUNBO0FBd0VBO0FBekVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/style-loader/lib/urls.js\n"); - -/***/ }), - -/***/ "../node_modules/symbol-observable/es/index.js": -/*!*****************************************************!*\ - !*** ../node_modules/symbol-observable/es/index.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global, module) {/* harmony import */ var _ponyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ponyfill.js */ \"../node_modules/symbol-observable/es/ponyfill.js\");\n/* global window */\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (true) {\n root = module;\n} else {}\n\nvar result = Object(_ponyfill_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(root);\n/* harmony default export */ __webpack_exports__[\"default\"] = (result);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../webpack/buildin/harmony-module.js */ \"../node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N5bWJvbC1vYnNlcnZhYmxlL2VzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9lcy9pbmRleC5qcz80NWI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3aW5kb3cgKi9cbmltcG9ydCBwb255ZmlsbCBmcm9tICcuL3BvbnlmaWxsLmpzJztcblxudmFyIHJvb3Q7XG5cbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgcm9vdCA9IHNlbGY7XG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBnbG9iYWw7XG59IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBtb2R1bGU7XG59IGVsc2Uge1xuICByb290ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn1cblxudmFyIHJlc3VsdCA9IHBvbnlmaWxsKHJvb3QpO1xuZXhwb3J0IGRlZmF1bHQgcmVzdWx0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREEsU0FJQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/symbol-observable/es/index.js\n"); - -/***/ }), - -/***/ "../node_modules/symbol-observable/es/ponyfill.js": -/*!********************************************************!*\ - !*** ../node_modules/symbol-observable/es/ponyfill.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return symbolObservablePonyfill; });\nfunction symbolObservablePonyfill(root) {\n var result;\n var _Symbol = root.Symbol;\n\n if (typeof _Symbol === 'function') {\n if (_Symbol.observable) {\n result = _Symbol.observable;\n } else {\n result = _Symbol('observable');\n _Symbol.observable = result;\n }\n } else {\n result = '@@observable';\n }\n\n return result;\n}\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3N5bWJvbC1vYnNlcnZhYmxlL2VzL3BvbnlmaWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9lcy9wb255ZmlsbC5qcz81Y2Q2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWJvbE9ic2VydmFibGVQb255ZmlsbChyb290KSB7XG5cdHZhciByZXN1bHQ7XG5cdHZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuXHRpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGlmIChTeW1ib2wub2JzZXJ2YWJsZSkge1xuXHRcdFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IFN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuXHRcdFx0U3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9ICdAQG9ic2VydmFibGUnO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/symbol-observable/es/ponyfill.js\n"); - -/***/ }), - -/***/ "../node_modules/tabbable/index.js": -/*!*****************************************!*\ - !*** ../node_modules/tabbable/index.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var candidateSelectors = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'];\nvar candidateSelector = candidateSelectors.join(',');\nvar matches = typeof Element === 'undefined' ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nfunction tabbable(el, options) {\n options = options || {};\n var regularTabbables = [];\n var orderedTabbables = [];\n var candidates = el.querySelectorAll(candidateSelector);\n\n if (options.includeContainer) {\n if (matches.call(el, candidateSelector)) {\n candidates = Array.prototype.slice.apply(candidates);\n candidates.unshift(el);\n }\n }\n\n var i, candidate, candidateTabindex;\n\n for (i = 0; i < candidates.length; i++) {\n candidate = candidates[i];\n if (!isNodeMatchingSelectorTabbable(candidate)) continue;\n candidateTabindex = getTabindex(candidate);\n\n if (candidateTabindex === 0) {\n regularTabbables.push(candidate);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n node: candidate\n });\n }\n }\n\n var tabbableNodes = orderedTabbables.sort(sortOrderedTabbables).map(function (a) {\n return a.node;\n }).concat(regularTabbables);\n return tabbableNodes;\n}\n\ntabbable.isTabbable = isTabbable;\ntabbable.isFocusable = isFocusable;\n\nfunction isNodeMatchingSelectorTabbable(node) {\n if (!isNodeMatchingSelectorFocusable(node) || isNonTabbableRadio(node) || getTabindex(node) < 0) {\n return false;\n }\n\n return true;\n}\n\nfunction isTabbable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, candidateSelector) === false) return false;\n return isNodeMatchingSelectorTabbable(node);\n}\n\nfunction isNodeMatchingSelectorFocusable(node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node)) {\n return false;\n }\n\n return true;\n}\n\nvar focusableCandidateSelector = candidateSelectors.concat('iframe').join(',');\n\nfunction isFocusable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, focusableCandidateSelector) === false) return false;\n return isNodeMatchingSelectorFocusable(node);\n}\n\nfunction getTabindex(node) {\n var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n if (!isNaN(tabindexAttr)) return tabindexAttr; // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n\n if (isContentEditable(node)) return 0;\n return node.tabIndex;\n}\n\nfunction sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n}\n\nfunction isContentEditable(node) {\n return node.contentEditable === 'true';\n}\n\nfunction isInput(node) {\n return node.tagName === 'INPUT';\n}\n\nfunction isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n}\n\nfunction isRadio(node) {\n return isInput(node) && node.type === 'radio';\n}\n\nfunction isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n}\n\nfunction getCheckedRadio(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked) {\n return nodes[i];\n }\n }\n}\n\nfunction isTabbableRadio(node) {\n if (!node.name) return true; // This won't account for the edge case where you have radio groups with the same\n // in separate forms on the same page.\n\n var radioSet = node.ownerDocument.querySelectorAll('input[type=\"radio\"][name=\"' + node.name + '\"]');\n var checked = getCheckedRadio(radioSet);\n return !checked || checked === node;\n}\n\nfunction isHidden(node) {\n // offsetParent being null will allow detecting cases where an element is invisible or inside an invisible element,\n // as long as the element does not use position: fixed. For them, their visibility has to be checked directly as well.\n return node.offsetParent === null || getComputedStyle(node).visibility === 'hidden';\n}\n\nmodule.exports = tabbable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90YWJiYWJsZS9pbmRleC5qcz85Nzg2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJyxcbl07XG52YXIgY2FuZGlkYXRlU2VsZWN0b3IgPSBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG52YXIgbWF0Y2hlcyA9IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJ1xuICA/IGZ1bmN0aW9uICgpIHt9XG4gIDogRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cbmZ1bmN0aW9uIHRhYmJhYmxlKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciByZWd1bGFyVGFiYmFibGVzID0gW107XG4gIHZhciBvcmRlcmVkVGFiYmFibGVzID0gW107XG5cbiAgdmFyIGNhbmRpZGF0ZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZVNlbGVjdG9yKTtcblxuICBpZiAob3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyKSB7XG4gICAgaWYgKG1hdGNoZXMuY2FsbChlbCwgY2FuZGlkYXRlU2VsZWN0b3IpKSB7XG4gICAgICBjYW5kaWRhdGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGNhbmRpZGF0ZXMpO1xuICAgICAgY2FuZGlkYXRlcy51bnNoaWZ0KGVsKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaSwgY2FuZGlkYXRlLCBjYW5kaWRhdGVUYWJpbmRleDtcbiAgZm9yIChpID0gMDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2ldO1xuXG4gICAgaWYgKCFpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUoY2FuZGlkYXRlKSkgY29udGludWU7XG5cbiAgICBjYW5kaWRhdGVUYWJpbmRleCA9IGdldFRhYmluZGV4KGNhbmRpZGF0ZSk7XG4gICAgaWYgKGNhbmRpZGF0ZVRhYmluZGV4ID09PSAwKSB7XG4gICAgICByZWd1bGFyVGFiYmFibGVzLnB1c2goY2FuZGlkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZFRhYmJhYmxlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IGNhbmRpZGF0ZVRhYmluZGV4LFxuICAgICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGFiYmFibGVOb2RlcyA9IG9yZGVyZWRUYWJiYWJsZXNcbiAgICAuc29ydChzb3J0T3JkZXJlZFRhYmJhYmxlcylcbiAgICAubWFwKGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGEubm9kZSB9KVxuICAgIC5jb25jYXQocmVndWxhclRhYmJhYmxlcyk7XG5cbiAgcmV0dXJuIHRhYmJhYmxlTm9kZXM7XG59XG5cbnRhYmJhYmxlLmlzVGFiYmFibGUgPSBpc1RhYmJhYmxlO1xudGFiYmFibGUuaXNGb2N1c2FibGUgPSBpc0ZvY3VzYWJsZTtcblxuZnVuY3Rpb24gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlKG5vZGUpIHtcbiAgaWYgKFxuICAgICFpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpXG4gICAgfHwgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpXG4gICAgfHwgZ2V0VGFiaW5kZXgobm9kZSkgPCAwXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNUYWJiYWJsZShub2RlKSB7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZSwgY2FuZGlkYXRlU2VsZWN0b3IpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpIHtcbiAgaWYgKFxuICAgIG5vZGUuZGlzYWJsZWRcbiAgICB8fCBpc0hpZGRlbklucHV0KG5vZGUpXG4gICAgfHwgaXNIaWRkZW4obm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG52YXIgZm9jdXNhYmxlQ2FuZGlkYXRlU2VsZWN0b3IgPSBjYW5kaWRhdGVTZWxlY3RvcnMuY29uY2F0KCdpZnJhbWUnKS5qb2luKCcsJyk7XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZShub2RlKSB7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZSwgZm9jdXNhYmxlQ2FuZGlkYXRlU2VsZWN0b3IpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFiaW5kZXgobm9kZSkge1xuICB2YXIgdGFiaW5kZXhBdHRyID0gcGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKTtcbiAgaWYgKCFpc05hTih0YWJpbmRleEF0dHIpKSByZXR1cm4gdGFiaW5kZXhBdHRyO1xuICAvLyBCcm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICBpZiAoaXNDb250ZW50RWRpdGFibGUobm9kZSkpIHJldHVybiAwO1xuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn1cblxuZnVuY3Rpb24gc29ydE9yZGVyZWRUYWJiYWJsZXMoYSwgYikge1xuICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleCA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlciA6IGEudGFiSW5kZXggLSBiLnRhYkluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0NvbnRlbnRFZGl0YWJsZShub2RlKSB7XG4gIHJldHVybiBub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnO1xufVxuXG5mdW5jdGlvbiBpc0lucHV0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn1cblxuZnVuY3Rpb24gaXNIaWRkZW5JbnB1dChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbic7XG59XG5cbmZ1bmN0aW9uIGlzUmFkaW8obm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59XG5cbmZ1bmN0aW9uIGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSB7XG4gIHJldHVybiBpc1JhZGlvKG5vZGUpICYmICFpc1RhYmJhYmxlUmFkaW8obm9kZSk7XG59XG5cbmZ1bmN0aW9uIGdldENoZWNrZWRSYWRpbyhub2Rlcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldLmNoZWNrZWQpIHtcbiAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUYWJiYWJsZVJhZGlvKG5vZGUpIHtcbiAgaWYgKCFub2RlLm5hbWUpIHJldHVybiB0cnVlO1xuICAvLyBUaGlzIHdvbid0IGFjY291bnQgZm9yIHRoZSBlZGdlIGNhc2Ugd2hlcmUgeW91IGhhdmUgcmFkaW8gZ3JvdXBzIHdpdGggdGhlIHNhbWVcbiAgLy8gaW4gc2VwYXJhdGUgZm9ybXMgb24gdGhlIHNhbWUgcGFnZS5cbiAgdmFyIHJhZGlvU2V0ID0gbm9kZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5vZGUubmFtZSArICdcIl0nKTtcbiAgdmFyIGNoZWNrZWQgPSBnZXRDaGVja2VkUmFkaW8ocmFkaW9TZXQpO1xuICByZXR1cm4gIWNoZWNrZWQgfHwgY2hlY2tlZCA9PT0gbm9kZTtcbn1cblxuZnVuY3Rpb24gaXNIaWRkZW4obm9kZSkge1xuICAvLyBvZmZzZXRQYXJlbnQgYmVpbmcgbnVsbCB3aWxsIGFsbG93IGRldGVjdGluZyBjYXNlcyB3aGVyZSBhbiBlbGVtZW50IGlzIGludmlzaWJsZSBvciBpbnNpZGUgYW4gaW52aXNpYmxlIGVsZW1lbnQsXG4gIC8vIGFzIGxvbmcgYXMgdGhlIGVsZW1lbnQgZG9lcyBub3QgdXNlIHBvc2l0aW9uOiBmaXhlZC4gRm9yIHRoZW0sIHRoZWlyIHZpc2liaWxpdHkgaGFzIHRvIGJlIGNoZWNrZWQgZGlyZWN0bHkgYXMgd2VsbC5cbiAgcmV0dXJuIG5vZGUub2Zmc2V0UGFyZW50ID09PSBudWxsIHx8IGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGFiYmFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBV0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/tabbable/index.js\n"); - -/***/ }), - -/***/ "../node_modules/timers-browserify/main.js": -/*!*************************************************!*\ - !*** ../node_modules/timers-browserify/main.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout) item._onTimeout();\n }, msecs);\n }\n}; // setimmediate attaches itself to the global object\n\n\n__webpack_require__(/*! setimmediate */ \"../node_modules/setimmediate/setImmediate.js\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanM/YTBmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBVEE7QUFDQTtBQUNBO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/timers-browserify/main.js\n"); - -/***/ }), - -/***/ "../node_modules/tiny-invariant/dist/tiny-invariant.esm.js": -/*!*****************************************************************!*\ - !*** ../node_modules/tiny-invariant/dist/tiny-invariant.esm.js ***! - \*****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = undefined === 'production';\nvar prefix = 'Invariant failed';\n\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(prefix + \": \" + (message || ''));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (invariant);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RpbnktaW52YXJpYW50L2Rpc3QvdGlueS1pbnZhcmlhbnQuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90aW55LWludmFyaWFudC9kaXN0L3RpbnktaW52YXJpYW50LmVzbS5qcz9mODNmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xudmFyIHByZWZpeCA9ICdJbnZhcmlhbnQgZmFpbGVkJztcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeCArIFwiOiBcIiArIChtZXNzYWdlIHx8ICcnKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGludmFyaWFudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/tiny-invariant/dist/tiny-invariant.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/tiny-relative-date/src/factory.js": -/*!*********************************************************!*\ - !*** ../node_modules/tiny-relative-date/src/factory.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return relativeDateFactory; });\nvar calculateDelta = function calculateDelta(now, date) {\n return Math.round(Math.abs(now - date) / 1000);\n};\n\nfunction relativeDateFactory(translations) {\n return function relativeDate(date) {\n var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n if (!(date instanceof Date)) {\n date = new Date(date);\n }\n\n var delta = null;\n var minute = 60;\n var hour = minute * 60;\n var day = hour * 24;\n var week = day * 7;\n var month = day * 30;\n var year = day * 365;\n delta = calculateDelta(now, date);\n\n if (delta > day && delta < week) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n delta = calculateDelta(now, date);\n }\n\n var translate = function translate(translatePhrase, timeValue) {\n var key;\n\n if (translatePhrase === 'justNow') {\n key = translatePhrase;\n } else if (now >= date) {\n key = \"\".concat(translatePhrase, \"Ago\");\n } else {\n key = \"\".concat(translatePhrase, \"FromNow\");\n }\n\n var translation = translations[key];\n\n if (typeof translation === 'function') {\n return translation(timeValue);\n }\n\n return translation.replace('{{time}}', timeValue);\n };\n\n switch (false) {\n case !(delta < 30):\n return translate('justNow');\n\n case !(delta < minute):\n return translate('seconds', delta);\n\n case !(delta < 2 * minute):\n return translate('aMinute');\n\n case !(delta < hour):\n return translate('minutes', Math.floor(delta / minute));\n\n case Math.floor(delta / hour) !== 1:\n return translate('anHour');\n\n case !(delta < day):\n return translate('hours', Math.floor(delta / hour));\n\n case !(delta < day * 2):\n return translate('aDay');\n\n case !(delta < week):\n return translate('days', Math.floor(delta / day));\n\n case Math.floor(delta / week) !== 1:\n return translate('aWeek');\n\n case !(delta < month):\n return translate('weeks', Math.floor(delta / week));\n\n case Math.floor(delta / month) !== 1:\n return translate('aMonth');\n\n case !(delta < year):\n return translate('months', Math.floor(delta / month));\n\n case Math.floor(delta / year) !== 1:\n return translate('aYear');\n\n default:\n return translate('overAYear');\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RpbnktcmVsYXRpdmUtZGF0ZS9zcmMvZmFjdG9yeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdGlueS1yZWxhdGl2ZS1kYXRlL3NyYy9mYWN0b3J5LmpzPzg3ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY2FsY3VsYXRlRGVsdGEgPSAobm93LCBkYXRlKSA9PiBNYXRoLnJvdW5kKE1hdGguYWJzKG5vdyAtIGRhdGUpIC8gMTAwMClcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVsYXRpdmVEYXRlRmFjdG9yeSAodHJhbnNsYXRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiByZWxhdGl2ZURhdGUgKGRhdGUsIG5vdyA9IG5ldyBEYXRlKCkpIHtcbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICAgIH1cblxuICAgIGxldCBkZWx0YSA9IG51bGxcblxuICAgIGNvbnN0IG1pbnV0ZSA9IDYwXG4gICAgY29uc3QgaG91ciA9IG1pbnV0ZSAqIDYwXG4gICAgY29uc3QgZGF5ID0gaG91ciAqIDI0XG4gICAgY29uc3Qgd2VlayA9IGRheSAqIDdcbiAgICBjb25zdCBtb250aCA9IGRheSAqIDMwXG4gICAgY29uc3QgeWVhciA9IGRheSAqIDM2NVxuXG4gICAgZGVsdGEgPSBjYWxjdWxhdGVEZWx0YShub3csIGRhdGUpXG5cbiAgICBpZiAoZGVsdGEgPiBkYXkgJiYgZGVsdGEgPCB3ZWVrKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCAwLCAwLCAwKVxuICAgICAgZGVsdGEgPSBjYWxjdWxhdGVEZWx0YShub3csIGRhdGUpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRlID0gKHRyYW5zbGF0ZVBocmFzZSwgdGltZVZhbHVlKSA9PiB7XG4gICAgICBsZXQga2V5XG5cbiAgICAgIGlmICh0cmFuc2xhdGVQaHJhc2UgPT09ICdqdXN0Tm93Jykge1xuICAgICAgICBrZXkgPSB0cmFuc2xhdGVQaHJhc2VcbiAgICAgIH0gZWxzZSBpZiAobm93ID49IGRhdGUpIHtcbiAgICAgICAga2V5ID0gYCR7dHJhbnNsYXRlUGhyYXNlfUFnb2BcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IGAke3RyYW5zbGF0ZVBocmFzZX1Gcm9tTm93YFxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uc1trZXldXG5cbiAgICAgIGlmICh0eXBlb2YgdHJhbnNsYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uKHRpbWVWYWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZVZhbHVlKVxuICAgIH1cblxuICAgIHN3aXRjaCAoZmFsc2UpIHtcbiAgICAgIGNhc2UgIShkZWx0YSA8IDMwKTpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnanVzdE5vdycpXG5cbiAgICAgIGNhc2UgIShkZWx0YSA8IG1pbnV0ZSk6XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUoJ3NlY29uZHMnLCBkZWx0YSlcblxuICAgICAgY2FzZSAhKGRlbHRhIDwgMiAqIG1pbnV0ZSk6XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUoJ2FNaW51dGUnKVxuXG4gICAgICBjYXNlICEoZGVsdGEgPCBob3VyKTpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnbWludXRlcycsIE1hdGguZmxvb3IoZGVsdGEgLyBtaW51dGUpKVxuXG4gICAgICBjYXNlIE1hdGguZmxvb3IoZGVsdGEgLyBob3VyKSAhPT0gMTpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnYW5Ib3VyJylcblxuICAgICAgY2FzZSAhKGRlbHRhIDwgZGF5KTpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnaG91cnMnLCBNYXRoLmZsb29yKGRlbHRhIC8gaG91cikpXG5cbiAgICAgIGNhc2UgIShkZWx0YSA8IGRheSAqIDIpOlxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlKCdhRGF5JylcblxuICAgICAgY2FzZSAhKGRlbHRhIDwgd2Vlayk6XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUoJ2RheXMnLCBNYXRoLmZsb29yKGRlbHRhIC8gZGF5KSlcblxuICAgICAgY2FzZSBNYXRoLmZsb29yKGRlbHRhIC8gd2VlaykgIT09IDE6XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUoJ2FXZWVrJylcblxuICAgICAgY2FzZSAhKGRlbHRhIDwgbW9udGgpOlxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlKCd3ZWVrcycsIE1hdGguZmxvb3IoZGVsdGEgLyB3ZWVrKSlcblxuICAgICAgY2FzZSBNYXRoLmZsb29yKGRlbHRhIC8gbW9udGgpICE9PSAxOlxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlKCdhTW9udGgnKVxuXG4gICAgICBjYXNlICEoZGVsdGEgPCB5ZWFyKTpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnbW9udGhzJywgTWF0aC5mbG9vcihkZWx0YSAvIG1vbnRoKSlcblxuICAgICAgY2FzZSBNYXRoLmZsb29yKGRlbHRhIC8geWVhcikgIT09IDE6XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUoJ2FZZWFyJylcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnb3ZlckFZZWFyJylcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6Q0E7QUF6Q0E7QUFxRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/tiny-relative-date/src/factory.js\n"); - -/***/ }), - -/***/ "../node_modules/tiny-relative-date/src/index.js": -/*!*******************************************************!*\ - !*** ../node_modules/tiny-relative-date/src/index.js ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./factory */ \"../node_modules/tiny-relative-date/src/factory.js\");\n/* harmony import */ var _translations_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../translations/en */ \"../node_modules/tiny-relative-date/translations/en.js\");\n/* harmony import */ var _translations_en__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_translations_en__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(_factory__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_translations_en__WEBPACK_IMPORTED_MODULE_1___default.a));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RpbnktcmVsYXRpdmUtZGF0ZS9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RpbnktcmVsYXRpdmUtZGF0ZS9zcmMvaW5kZXguanM/MGVjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVsYXRpdmVEYXRlRmFjdG9yeSBmcm9tICcuL2ZhY3RvcnknXG5pbXBvcnQgZW5UcmFuc2xhdGlvbnMgZnJvbSAnLi4vdHJhbnNsYXRpb25zL2VuJ1xuXG5leHBvcnQgZGVmYXVsdCByZWxhdGl2ZURhdGVGYWN0b3J5KGVuVHJhbnNsYXRpb25zKVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/tiny-relative-date/src/index.js\n"); - -/***/ }), - -/***/ "../node_modules/tiny-relative-date/translations/en.js": -/*!*************************************************************!*\ - !*** ../node_modules/tiny-relative-date/translations/en.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = {\n justNow: \"just now\",\n secondsAgo: \"{{time}} seconds ago\",\n aMinuteAgo: \"a minute ago\",\n minutesAgo: \"{{time}} minutes ago\",\n anHourAgo: \"an hour ago\",\n hoursAgo: \"{{time}} hours ago\",\n aDayAgo: \"yesterday\",\n daysAgo: \"{{time}} days ago\",\n aWeekAgo: \"a week ago\",\n weeksAgo: \"{{time}} weeks ago\",\n aMonthAgo: \"a month ago\",\n monthsAgo: \"{{time}} months ago\",\n aYearAgo: \"a year ago\",\n yearsAgo: \"{{time}} years ago\",\n overAYearAgo: \"over a year ago\",\n secondsFromNow: \"{{time}} seconds from now\",\n aMinuteFromNow: \"a minute from now\",\n minutesFromNow: \"{{time}} minutes from now\",\n anHourFromNow: \"an hour from now\",\n hoursFromNow: \"{{time}} hours from now\",\n aDayFromNow: \"tomorrow\",\n daysFromNow: \"{{time}} days from now\",\n aWeekFromNow: \"a week from now\",\n weeksFromNow: \"{{time}} weeks from now\",\n aMonthFromNow: \"a month from now\",\n monthsFromNow: \"{{time}} months from now\",\n aYearFromNow: \"a year from now\",\n yearsFromNow: \"{{time}} years from now\",\n overAYearFromNow: \"over a year from now\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RpbnktcmVsYXRpdmUtZGF0ZS90cmFuc2xhdGlvbnMvZW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RpbnktcmVsYXRpdmUtZGF0ZS90cmFuc2xhdGlvbnMvZW4uanM/MzFiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAganVzdE5vdzogXCJqdXN0IG5vd1wiLFxuICBzZWNvbmRzQWdvOiBcInt7dGltZX19IHNlY29uZHMgYWdvXCIsXG4gIGFNaW51dGVBZ286IFwiYSBtaW51dGUgYWdvXCIsXG4gIG1pbnV0ZXNBZ286IFwie3t0aW1lfX0gbWludXRlcyBhZ29cIixcbiAgYW5Ib3VyQWdvOiBcImFuIGhvdXIgYWdvXCIsXG4gIGhvdXJzQWdvOiBcInt7dGltZX19IGhvdXJzIGFnb1wiLFxuICBhRGF5QWdvOiBcInllc3RlcmRheVwiLFxuICBkYXlzQWdvOiBcInt7dGltZX19IGRheXMgYWdvXCIsXG4gIGFXZWVrQWdvOiBcImEgd2VlayBhZ29cIixcbiAgd2Vla3NBZ286IFwie3t0aW1lfX0gd2Vla3MgYWdvXCIsXG4gIGFNb250aEFnbzogXCJhIG1vbnRoIGFnb1wiLFxuICBtb250aHNBZ286IFwie3t0aW1lfX0gbW9udGhzIGFnb1wiLFxuICBhWWVhckFnbzogXCJhIHllYXIgYWdvXCIsXG4gIHllYXJzQWdvOiBcInt7dGltZX19IHllYXJzIGFnb1wiLFxuICBvdmVyQVllYXJBZ286IFwib3ZlciBhIHllYXIgYWdvXCIsXG4gIHNlY29uZHNGcm9tTm93OiBcInt7dGltZX19IHNlY29uZHMgZnJvbSBub3dcIixcbiAgYU1pbnV0ZUZyb21Ob3c6IFwiYSBtaW51dGUgZnJvbSBub3dcIixcbiAgbWludXRlc0Zyb21Ob3c6IFwie3t0aW1lfX0gbWludXRlcyBmcm9tIG5vd1wiLFxuICBhbkhvdXJGcm9tTm93OiBcImFuIGhvdXIgZnJvbSBub3dcIixcbiAgaG91cnNGcm9tTm93OiBcInt7dGltZX19IGhvdXJzIGZyb20gbm93XCIsXG4gIGFEYXlGcm9tTm93OiBcInRvbW9ycm93XCIsXG4gIGRheXNGcm9tTm93OiBcInt7dGltZX19IGRheXMgZnJvbSBub3dcIixcbiAgYVdlZWtGcm9tTm93OiBcImEgd2VlayBmcm9tIG5vd1wiLFxuICB3ZWVrc0Zyb21Ob3c6IFwie3t0aW1lfX0gd2Vla3MgZnJvbSBub3dcIixcbiAgYU1vbnRoRnJvbU5vdzogXCJhIG1vbnRoIGZyb20gbm93XCIsXG4gIG1vbnRoc0Zyb21Ob3c6IFwie3t0aW1lfX0gbW9udGhzIGZyb20gbm93XCIsXG4gIGFZZWFyRnJvbU5vdzogXCJhIHllYXIgZnJvbSBub3dcIixcbiAgeWVhcnNGcm9tTm93OiBcInt7dGltZX19IHllYXJzIGZyb20gbm93XCIsXG4gIG92ZXJBWWVhckZyb21Ob3c6IFwib3ZlciBhIHllYXIgZnJvbSBub3dcIlxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/tiny-relative-date/translations/en.js\n"); - -/***/ }), - -/***/ "../node_modules/tiny-warning/dist/tiny-warning.esm.js": -/*!*************************************************************!*\ - !*** ../node_modules/tiny-warning/dist/tiny-warning.esm.js ***! - \*************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar isProduction = undefined === 'production';\n\nfunction warning(condition, message) {\n if (!isProduction) {\n if (condition) {\n return;\n }\n\n var text = \"Warning: \" + message;\n\n if (typeof console !== 'undefined') {\n console.warn(text);\n }\n\n try {\n throw Error(text);\n } catch (x) {}\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (warning);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Rpbnktd2FybmluZy9kaXN0L3Rpbnktd2FybmluZy5lc20uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Rpbnktd2FybmluZy9kaXN0L3Rpbnktd2FybmluZy5lc20uanM/NzJlOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNQcm9kdWN0aW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcbmZ1bmN0aW9uIHdhcm5pbmcoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghaXNQcm9kdWN0aW9uKSB7XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gXCJXYXJuaW5nOiBcIiArIG1lc3NhZ2U7XG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4odGV4dCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRocm93IEVycm9yKHRleHQpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2FybmluZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/tiny-warning/dist/tiny-warning.esm.js\n"); - -/***/ }), - -/***/ "../node_modules/to-arraybuffer/index.js": -/*!***********************************************!*\ - !*** ../node_modules/to-arraybuffer/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var Buffer = __webpack_require__(/*! buffer */ \"../node_modules/buffer/index.js\").Buffer;\n\nmodule.exports = function (buf) {\n // If the buffer is backed by a Uint8Array, a faster version will work\n if (buf instanceof Uint8Array) {\n // If the buffer isn't a subarray, return the underlying ArrayBuffer\n if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n return buf.buffer;\n } else if (typeof buf.buffer.slice === 'function') {\n // Otherwise we need to get a proper copy\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n }\n\n if (Buffer.isBuffer(buf)) {\n // This is the slow version that will work with any Buffer\n // implementation (even in old browsers)\n var arrayCopy = new Uint8Array(buf.length);\n var len = buf.length;\n\n for (var i = 0; i < len; i++) {\n arrayCopy[i] = buf[i];\n }\n\n return arrayCopy.buffer;\n } else {\n throw new Error('Argument must be a Buffer');\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RvLWFycmF5YnVmZmVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90by1hcnJheWJ1ZmZlci9pbmRleC5qcz8zNThmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYnVmKSB7XG5cdC8vIElmIHRoZSBidWZmZXIgaXMgYmFja2VkIGJ5IGEgVWludDhBcnJheSwgYSBmYXN0ZXIgdmVyc2lvbiB3aWxsIHdvcmtcblx0aWYgKGJ1ZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcblx0XHQvLyBJZiB0aGUgYnVmZmVyIGlzbid0IGEgc3ViYXJyYXksIHJldHVybiB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZlclxuXHRcdGlmIChidWYuYnl0ZU9mZnNldCA9PT0gMCAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gYnVmLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlclxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGJ1Zi5idWZmZXIuc2xpY2UgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGdldCBhIHByb3BlciBjb3B5XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aClcblx0XHR9XG5cdH1cblxuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcblx0XHQvLyBUaGlzIGlzIHRoZSBzbG93IHZlcnNpb24gdGhhdCB3aWxsIHdvcmsgd2l0aCBhbnkgQnVmZmVyXG5cdFx0Ly8gaW1wbGVtZW50YXRpb24gKGV2ZW4gaW4gb2xkIGJyb3dzZXJzKVxuXHRcdHZhciBhcnJheUNvcHkgPSBuZXcgVWludDhBcnJheShidWYubGVuZ3RoKVxuXHRcdHZhciBsZW4gPSBidWYubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0YXJyYXlDb3B5W2ldID0gYnVmW2ldXG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUNvcHkuYnVmZmVyXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBVUE7QUFDQTtBQXZCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/to-arraybuffer/index.js\n"); - -/***/ }), - -/***/ "../node_modules/trim-lines/index.js": -/*!*******************************************!*\ - !*** ../node_modules/trim-lines/index.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = trimLines;\nvar ws = /[ \\t]*\\n+[ \\t]*/g;\nvar newline = '\\n';\n\nfunction trimLines(value) {\n return String(value).replace(ws, newline);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RyaW0tbGluZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RyaW0tbGluZXMvaW5kZXguanM/Y2RkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB0cmltTGluZXNcblxudmFyIHdzID0gL1sgXFx0XSpcXG4rWyBcXHRdKi9nXG52YXIgbmV3bGluZSA9ICdcXG4nXG5cbmZ1bmN0aW9uIHRyaW1MaW5lcyh2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHdzLCBuZXdsaW5lKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/trim-lines/index.js\n"); - -/***/ }), - -/***/ "../node_modules/trim-trailing-lines/index.js": -/*!****************************************************!*\ - !*** ../node_modules/trim-trailing-lines/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = trimTrailingLines;\nvar line = '\\n'; // Remove final newline characters from `value`.\n\nfunction trimTrailingLines(value) {\n var val = String(value);\n var index = val.length;\n\n while (val.charAt(--index) === line) {// Empty\n }\n\n return val.slice(0, index + 1);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RyaW0tdHJhaWxpbmctbGluZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RyaW0tdHJhaWxpbmctbGluZXMvaW5kZXguanM/MjYwMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB0cmltVHJhaWxpbmdMaW5lc1xuXG52YXIgbGluZSA9ICdcXG4nXG5cbi8vIFJlbW92ZSBmaW5hbCBuZXdsaW5lIGNoYXJhY3RlcnMgZnJvbSBgdmFsdWVgLlxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nTGluZXModmFsdWUpIHtcbiAgdmFyIHZhbCA9IFN0cmluZyh2YWx1ZSlcbiAgdmFyIGluZGV4ID0gdmFsLmxlbmd0aFxuXG4gIHdoaWxlICh2YWwuY2hhckF0KC0taW5kZXgpID09PSBsaW5lKSB7XG4gICAgLy8gRW1wdHlcbiAgfVxuXG4gIHJldHVybiB2YWwuc2xpY2UoMCwgaW5kZXggKyAxKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/trim-trailing-lines/index.js\n"); - -/***/ }), - -/***/ "../node_modules/trim/index.js": -/*!*************************************!*\ - !*** ../node_modules/trim/index.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports = module.exports = trim;\n\nfunction trim(str) {\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function (str) {\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function (str) {\n return str.replace(/\\s*$/, '');\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RyaW0vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RyaW0vaW5kZXguanM/NTRkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHRyaW07XG5cbmZ1bmN0aW9uIHRyaW0oc3RyKXtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG5cbmV4cG9ydHMubGVmdCA9IGZ1bmN0aW9uKHN0cil7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJyk7XG59O1xuXG5leHBvcnRzLnJpZ2h0ID0gZnVuY3Rpb24oc3RyKXtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/trim/index.js\n"); - -/***/ }), - -/***/ "../node_modules/trough/index.js": -/*!***************************************!*\ - !*** ../node_modules/trough/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar wrap = __webpack_require__(/*! ./wrap.js */ \"../node_modules/trough/wrap.js\");\n\nmodule.exports = trough;\ntrough.wrap = wrap;\nvar slice = [].slice; // Create new middleware.\n\nfunction trough() {\n var fns = [];\n var middleware = {};\n middleware.run = run;\n middleware.use = use;\n return middleware; // Run `fns`. Last argument must be a completion handler.\n\n function run() {\n var index = -1;\n var input = slice.call(arguments, 0, -1);\n var done = arguments[arguments.length - 1];\n\n if (typeof done !== 'function') {\n throw new Error('Expected function as last argument, not ' + done);\n }\n\n next.apply(null, [null].concat(input)); // Run the next `fn`, if any.\n\n function next(err) {\n var fn = fns[++index];\n var params = slice.call(arguments, 0);\n var values = params.slice(1);\n var length = input.length;\n var pos = -1;\n\n if (err) {\n done(err);\n return;\n } // Copy non-nully input into values.\n\n\n while (++pos < length) {\n if (values[pos] === null || values[pos] === undefined) {\n values[pos] = input[pos];\n }\n }\n\n input = values; // Next or done.\n\n if (fn) {\n wrap(fn, next).apply(null, input);\n } else {\n done.apply(null, [null].concat(input));\n }\n }\n } // Add `fn` to the list.\n\n\n function use(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Expected `fn` to be a function, not ' + fn);\n }\n\n fns.push(fn);\n return middleware;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzPzc1OGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwLmpzJylcblxubW9kdWxlLmV4cG9ydHMgPSB0cm91Z2hcblxudHJvdWdoLndyYXAgPSB3cmFwXG5cbnZhciBzbGljZSA9IFtdLnNsaWNlXG5cbi8vIENyZWF0ZSBuZXcgbWlkZGxld2FyZS5cbmZ1bmN0aW9uIHRyb3VnaCgpIHtcbiAgdmFyIGZucyA9IFtdXG4gIHZhciBtaWRkbGV3YXJlID0ge31cblxuICBtaWRkbGV3YXJlLnJ1biA9IHJ1blxuICBtaWRkbGV3YXJlLnVzZSA9IHVzZVxuXG4gIHJldHVybiBtaWRkbGV3YXJlXG5cbiAgLy8gUnVuIGBmbnNgLiAgTGFzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcGxldGlvbiBoYW5kbGVyLlxuICBmdW5jdGlvbiBydW4oKSB7XG4gICAgdmFyIGluZGV4ID0gLTFcbiAgICB2YXIgaW5wdXQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpXG4gICAgdmFyIGRvbmUgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdXG5cbiAgICBpZiAodHlwZW9mIGRvbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90ICcgKyBkb25lKVxuICAgIH1cblxuICAgIG5leHQuYXBwbHkobnVsbCwgW251bGxdLmNvbmNhdChpbnB1dCkpXG5cbiAgICAvLyBSdW4gdGhlIG5leHQgYGZuYCwgaWYgYW55LlxuICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICB2YXIgZm4gPSBmbnNbKytpbmRleF1cbiAgICAgIHZhciBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMClcbiAgICAgIHZhciB2YWx1ZXMgPSBwYXJhbXMuc2xpY2UoMSlcbiAgICAgIHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGhcbiAgICAgIHZhciBwb3MgPSAtMVxuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRvbmUoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQ29weSBub24tbnVsbHkgaW5wdXQgaW50byB2YWx1ZXMuXG4gICAgICB3aGlsZSAoKytwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHZhbHVlc1twb3NdID09PSBudWxsIHx8IHZhbHVlc1twb3NdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZXNbcG9zXSA9IGlucHV0W3Bvc11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnB1dCA9IHZhbHVlc1xuXG4gICAgICAvLyBOZXh0IG9yIGRvbmUuXG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgd3JhcChmbiwgbmV4dCkuYXBwbHkobnVsbCwgaW5wdXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lLmFwcGx5KG51bGwsIFtudWxsXS5jb25jYXQoaW5wdXQpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBgZm5gIHRvIHRoZSBsaXN0LlxuICBmdW5jdGlvbiB1c2UoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGBmbmAgdG8gYmUgYSBmdW5jdGlvbiwgbm90ICcgKyBmbilcbiAgICB9XG5cbiAgICBmbnMucHVzaChmbilcblxuICAgIHJldHVybiBtaWRkbGV3YXJlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQWpEQTtBQUNBO0FBQ0E7QUFtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/trough/index.js\n"); - -/***/ }), - -/***/ "../node_modules/trough/wrap.js": -/*!**************************************!*\ - !*** ../node_modules/trough/wrap.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar slice = [].slice;\nmodule.exports = wrap; // Wrap `fn`.\n// Can be sync or async; return a promise, receive a completion handler, return\n// new values and errors.\n\nfunction wrap(fn, callback) {\n var invoked;\n return wrapped;\n\n function wrapped() {\n var params = slice.call(arguments, 0);\n var callback = fn.length > params.length;\n var result;\n\n if (callback) {\n params.push(done);\n }\n\n try {\n result = fn.apply(null, params);\n } catch (error) {\n // Well, this is quite the pickle.\n // `fn` received a callback and invoked it (thus continuing the pipeline),\n // but later also threw an error.\n // We’re not about to restart the pipeline again, so the only thing left\n // to do is to throw the thing instead.\n if (callback && invoked) {\n throw error;\n }\n\n return done(error);\n }\n\n if (!callback) {\n if (result && typeof result.then === 'function') {\n result.then(then, done);\n } else if (result instanceof Error) {\n done(result);\n } else {\n then(result);\n }\n }\n } // Invoke `next`, only once.\n\n\n function done() {\n if (!invoked) {\n invoked = true;\n callback.apply(null, arguments);\n }\n } // Invoke `done` with one value.\n // Tracks if an error is passed, too.\n\n\n function then(value) {\n done(null, value);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3Ryb3VnaC93cmFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90cm91Z2gvd3JhcC5qcz8yMWE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBcblxuLy8gV3JhcCBgZm5gLlxuLy8gQ2FuIGJlIHN5bmMgb3IgYXN5bmM7IHJldHVybiBhIHByb21pc2UsIHJlY2VpdmUgYSBjb21wbGV0aW9uIGhhbmRsZXIsIHJldHVyblxuLy8gbmV3IHZhbHVlcyBhbmQgZXJyb3JzLlxuZnVuY3Rpb24gd3JhcChmbiwgY2FsbGJhY2spIHtcbiAgdmFyIGludm9rZWRcblxuICByZXR1cm4gd3JhcHBlZFxuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKVxuICAgIHZhciBjYWxsYmFjayA9IGZuLmxlbmd0aCA+IHBhcmFtcy5sZW5ndGhcbiAgICB2YXIgcmVzdWx0XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHBhcmFtcy5wdXNoKGRvbmUpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGZuLmFwcGx5KG51bGwsIHBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gV2VsbCwgdGhpcyBpcyBxdWl0ZSB0aGUgcGlja2xlLlxuICAgICAgLy8gYGZuYCByZWNlaXZlZCBhIGNhbGxiYWNrIGFuZCBpbnZva2VkIGl0ICh0aHVzIGNvbnRpbnVpbmcgdGhlIHBpcGVsaW5lKSxcbiAgICAgIC8vIGJ1dCBsYXRlciBhbHNvIHRocmV3IGFuIGVycm9yLlxuICAgICAgLy8gV2XigJlyZSBub3QgYWJvdXQgdG8gcmVzdGFydCB0aGUgcGlwZWxpbmUgYWdhaW4sIHNvIHRoZSBvbmx5IHRoaW5nIGxlZnRcbiAgICAgIC8vIHRvIGRvIGlzIHRvIHRocm93IHRoZSB0aGluZyBpbnN0ZWFkLlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGludm9rZWQpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRvbmUoZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSlcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZG9uZShyZXN1bHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGVuKHJlc3VsdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJbnZva2UgYG5leHRgLCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaWYgKCFpbnZva2VkKSB7XG4gICAgICBpbnZva2VkID0gdHJ1ZVxuXG4gICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIGBkb25lYCB3aXRoIG9uZSB2YWx1ZS5cbiAgLy8gVHJhY2tzIGlmIGFuIGVycm9yIGlzIHBhc3NlZCwgdG9vLlxuICBmdW5jdGlvbiB0aGVuKHZhbHVlKSB7XG4gICAgZG9uZShudWxsLCB2YWx1ZSlcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBckNBO0FBQ0E7QUFDQTtBQXVDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBOUNBO0FBa0RBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/trough/wrap.js\n"); - -/***/ }), - -/***/ "../node_modules/tslib/tslib.es6.js": -/*!******************************************!*\ - !*** ../node_modules/tslib/tslib.es6.js ***! - \******************************************/ -/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__extends\", function() { return __extends; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__assign\", function() { return _assign; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__rest\", function() { return __rest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__decorate\", function() { return __decorate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__param\", function() { return __param; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__metadata\", function() { return __metadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__awaiter\", function() { return __awaiter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__generator\", function() { return __generator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__exportStar\", function() { return __exportStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__values\", function() { return __values; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__read\", function() { return __read; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__spread\", function() { return __spread; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__spreadArrays\", function() { return __spreadArrays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__await\", function() { return __await; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncGenerator\", function() { return __asyncGenerator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncDelegator\", function() { return __asyncDelegator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncValues\", function() { return __asyncValues; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__makeTemplateObject\", function() { return __makeTemplateObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__importStar\", function() { return __importStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__importDefault\", function() { return __importDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__classPrivateFieldGet\", function() { return __classPrivateFieldGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__classPrivateFieldSet\", function() { return __classPrivateFieldSet; });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction __metadata(metadataKey, metadataValue) {\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __exportStar(m, exports) {\n for (var p in m) {\n if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result[\"default\"] = mod;\n return result;\n}\nfunction __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n privateMap.set(receiver, value);\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzPzZkYmUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBRUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFDQTtBQU1BO0FBUkE7QUFDQTs7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBWEE7QUFDQTtBQVlBO0FBaEJBO0FBaUJBO0FBQUE7QUFqQkE7QUFpQkE7QUFBQTtBQWpCQTtBQUNBO0FBaUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/tslib/tslib.es6.js\n"); - -/***/ }), - -/***/ "../node_modules/typo-js/typo.js": -/*!***************************************!*\ - !*** ../node_modules/typo-js/typo.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/* globals chrome: false */\n\n/* globals __dirname: false */\n\n/* globals require: false */\n\n/* globals Buffer: false */\n\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\n\nvar Typo;\n\n(function () {\n \"use strict\";\n /**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {String} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n\n Typo = function Typo(dictionary, affData, wordsData, settings) {\n settings = settings || {};\n this.dictionary = null;\n this.rules = {};\n this.dictionaryTable = {};\n this.compoundRules = [];\n this.compoundRuleCodes = {};\n this.replacementTable = [];\n this.flags = settings.flags || {};\n this.memoized = {};\n this.loaded = false;\n var self = this;\n var path; // Loop-control variables.\n\n var i, j, _len, _jlen;\n\n if (dictionary) {\n self.dictionary = dictionary; // If the data is preloaded, just setup the Typo object.\n\n if (affData && wordsData) {\n setup();\n } // Loading data for Chrome extentions.\n else if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n if (settings.dictionaryPath) {\n path = settings.dictionaryPath;\n } else {\n path = \"typo/dictionaries\";\n }\n\n if (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n if (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n } else {\n if (settings.dictionaryPath) {\n path = settings.dictionaryPath;\n } else if (typeof __dirname !== 'undefined') {\n path = __dirname + '/dictionaries';\n } else {\n path = './dictionaries';\n }\n\n if (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n if (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n }\n }\n\n function readDataFile(url, setFunc) {\n var response = self._readFile(url, null, settings.asyncLoad);\n\n if (settings.asyncLoad) {\n response.then(function (data) {\n setFunc(data);\n });\n } else {\n setFunc(response);\n }\n }\n\n function setAffData(data) {\n affData = data;\n\n if (wordsData) {\n setup();\n }\n }\n\n function setWordsData(data) {\n wordsData = data;\n\n if (affData) {\n setup();\n }\n }\n\n function setup() {\n self.rules = self._parseAFF(affData); // Save the rule codes that are used in compound rules.\n\n self.compoundRuleCodes = {};\n\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var rule = self.compoundRules[i];\n\n for (j = 0, _jlen = rule.length; j < _jlen; j++) {\n self.compoundRuleCodes[rule[j]] = [];\n }\n } // If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n // will do the work of saving the list of words that are compound-only.\n\n\n if (\"ONLYINCOMPOUND\" in self.flags) {\n self.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n }\n\n self.dictionaryTable = self._parseDIC(wordsData); // Get rid of any codes from the compound rule codes that are never used \n // (or that were special regex characters). Not especially necessary... \n\n for (i in self.compoundRuleCodes) {\n if (self.compoundRuleCodes[i].length === 0) {\n delete self.compoundRuleCodes[i];\n }\n } // Build the full regular expressions for each compound rule.\n // I have a feeling (but no confirmation yet) that this method of \n // testing for compound words is probably slow.\n\n\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var ruleText = self.compoundRules[i];\n var expressionText = \"\";\n\n for (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n var character = ruleText[j];\n\n if (character in self.compoundRuleCodes) {\n expressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n } else {\n expressionText += character;\n }\n }\n\n self.compoundRules[i] = new RegExp(expressionText, \"i\");\n }\n\n self.loaded = true;\n\n if (settings.asyncLoad && settings.loadedCallback) {\n settings.loadedCallback(self);\n }\n }\n\n return this;\n };\n\n Typo.prototype = {\n /**\n * Loads a Typo instance from a hash of all of the Typo properties.\n *\n * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n */\n load: function load(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n this[i] = obj[i];\n }\n }\n\n return this;\n },\n\n /**\n * Read the contents of a file.\n * \n * @param {String} path The path (relative) to the file.\n * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n * files are read synchronously.\n * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n * always returned.\n */\n _readFile: function _readFile(path, charset, async) {\n charset = charset || \"utf8\";\n\n if (typeof XMLHttpRequest !== 'undefined') {\n var promise;\n var req = new XMLHttpRequest();\n req.open(\"GET\", path, async);\n\n if (async) {\n promise = new Promise(function (resolve, reject) {\n req.onload = function () {\n if (req.status === 200) {\n resolve(req.responseText);\n } else {\n reject(req.statusText);\n }\n };\n\n req.onerror = function () {\n reject(req.statusText);\n };\n });\n }\n\n if (req.overrideMimeType) req.overrideMimeType(\"text/plain; charset=\" + charset);\n req.send(null);\n return async ? promise : req.responseText;\n } else if (true) {\n // Node.js\n var fs = __webpack_require__(/*! fs */ \"./stubs/fs.js\");\n\n try {\n if (fs.existsSync(path)) {\n return fs.readFileSync(path, charset);\n } else {\n console.log(\"Path \" + path + \" does not exist.\");\n }\n } catch (e) {\n console.log(e);\n return '';\n }\n }\n },\n\n /**\n * Parse the rules out from a .aff file.\n *\n * @param {String} data The contents of the affix file.\n * @returns object The rules from the file.\n */\n _parseAFF: function _parseAFF(data) {\n var rules = {};\n var line, subline, numEntries, lineParts;\n\n var i, j, _len, _jlen; // Remove comment lines\n\n\n data = this._removeAffixComments(data);\n var lines = data.split(/\\r?\\n/);\n\n for (i = 0, _len = lines.length; i < _len; i++) {\n line = lines[i];\n var definitionParts = line.split(/\\s+/);\n var ruleType = definitionParts[0];\n\n if (ruleType == \"PFX\" || ruleType == \"SFX\") {\n var ruleCode = definitionParts[1];\n var combineable = definitionParts[2];\n numEntries = parseInt(definitionParts[3], 10);\n var entries = [];\n\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n subline = lines[j];\n lineParts = subline.split(/\\s+/);\n var charactersToRemove = lineParts[2];\n var additionParts = lineParts[3].split(\"/\");\n var charactersToAdd = additionParts[0];\n if (charactersToAdd === \"0\") charactersToAdd = \"\";\n var continuationClasses = this.parseRuleCodes(additionParts[1]);\n var regexToMatch = lineParts[4];\n var entry = {};\n entry.add = charactersToAdd;\n if (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n\n if (regexToMatch !== \".\") {\n if (ruleType === \"SFX\") {\n entry.match = new RegExp(regexToMatch + \"$\");\n } else {\n entry.match = new RegExp(\"^\" + regexToMatch);\n }\n }\n\n if (charactersToRemove != \"0\") {\n if (ruleType === \"SFX\") {\n entry.remove = new RegExp(charactersToRemove + \"$\");\n } else {\n entry.remove = charactersToRemove;\n }\n }\n\n entries.push(entry);\n }\n\n rules[ruleCode] = {\n \"type\": ruleType,\n \"combineable\": combineable == \"Y\",\n \"entries\": entries\n };\n i += numEntries;\n } else if (ruleType === \"COMPOUNDRULE\") {\n numEntries = parseInt(definitionParts[1], 10);\n\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n line = lines[j];\n lineParts = line.split(/\\s+/);\n this.compoundRules.push(lineParts[1]);\n }\n\n i += numEntries;\n } else if (ruleType === \"REP\") {\n lineParts = line.split(/\\s+/);\n\n if (lineParts.length === 3) {\n this.replacementTable.push([lineParts[1], lineParts[2]]);\n }\n } else {\n // ONLYINCOMPOUND\n // COMPOUNDMIN\n // FLAG\n // KEEPCASE\n // NEEDAFFIX\n this.flags[ruleType] = definitionParts[1];\n }\n }\n\n return rules;\n },\n\n /**\n * Removes comment lines and then cleans up blank lines and trailing whitespace.\n *\n * @param {String} data The data from an affix file.\n * @return {String} The cleaned-up data.\n */\n _removeAffixComments: function _removeAffixComments(data) {\n // Remove comments\n // This used to remove any string starting with '#' up to the end of the line,\n // but some COMPOUNDRULE definitions include '#' as part of the rule.\n // I haven't seen any affix files that use comments on the same line as real data,\n // so I don't think this will break anything.\n data = data.replace(/^\\s*#.*$/mg, \"\"); // Trim each line\n\n data = data.replace(/^\\s\\s*/m, '').replace(/\\s\\s*$/m, ''); // Remove blank lines.\n\n data = data.replace(/\\n{2,}/g, \"\\n\"); // Trim the entire string\n\n data = data.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n return data;\n },\n\n /**\n * Parses the words out from the .dic file.\n *\n * @param {String} data The data from the dictionary file.\n * @returns object The lookup table containing all of the words and\n * word forms from the dictionary.\n */\n _parseDIC: function _parseDIC(data) {\n data = this._removeDicComments(data);\n var lines = data.split(/\\r?\\n/);\n var dictionaryTable = {};\n\n function addWord(word, rules) {\n // Some dictionaries will list the same word multiple times with different rule sets.\n if (!dictionaryTable.hasOwnProperty(word)) {\n dictionaryTable[word] = null;\n }\n\n if (rules.length > 0) {\n if (dictionaryTable[word] === null) {\n dictionaryTable[word] = [];\n }\n\n dictionaryTable[word].push(rules);\n }\n } // The first line is the number of words in the dictionary.\n\n\n for (var i = 1, _len = lines.length; i < _len; i++) {\n var line = lines[i];\n\n if (!line) {\n // Ignore empty lines.\n continue;\n }\n\n var parts = line.split(\"/\", 2);\n var word = parts[0]; // Now for each affix rule, generate that form of the word.\n\n if (parts.length > 1) {\n var ruleCodesArray = this.parseRuleCodes(parts[1]); // Save the ruleCodes for compound word situations.\n\n if (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n addWord(word, ruleCodesArray);\n }\n\n for (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n var code = ruleCodesArray[j];\n var rule = this.rules[code];\n\n if (rule) {\n var newWords = this._applyRule(word, rule);\n\n for (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n var newWord = newWords[ii];\n addWord(newWord, []);\n\n if (rule.combineable) {\n for (var k = j + 1; k < _jlen; k++) {\n var combineCode = ruleCodesArray[k];\n var combineRule = this.rules[combineCode];\n\n if (combineRule) {\n if (combineRule.combineable && rule.type != combineRule.type) {\n var otherNewWords = this._applyRule(newWord, combineRule);\n\n for (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n var otherNewWord = otherNewWords[iii];\n addWord(otherNewWord, []);\n }\n }\n }\n }\n }\n }\n }\n\n if (code in this.compoundRuleCodes) {\n this.compoundRuleCodes[code].push(word);\n }\n }\n } else {\n addWord(word.trim(), []);\n }\n }\n\n return dictionaryTable;\n },\n\n /**\n * Removes comment lines and then cleans up blank lines and trailing whitespace.\n *\n * @param {String} data The data from a .dic file.\n * @return {String} The cleaned-up data.\n */\n _removeDicComments: function _removeDicComments(data) {\n // I can't find any official documentation on it, but at least the de_DE\n // dictionary uses tab-indented lines as comments.\n // Remove comments\n data = data.replace(/^\\t.*$/mg, \"\");\n return data;\n },\n parseRuleCodes: function parseRuleCodes(textCodes) {\n if (!textCodes) {\n return [];\n } else if (!(\"FLAG\" in this.flags)) {\n return textCodes.split(\"\");\n } else if (this.flags.FLAG === \"long\") {\n var flags = [];\n\n for (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n flags.push(textCodes.substr(i, 2));\n }\n\n return flags;\n } else if (this.flags.FLAG === \"num\") {\n return textCodes.split(\",\");\n }\n },\n\n /**\n * Applies an affix rule to a word.\n *\n * @param {String} word The base word.\n * @param {Object} rule The affix rule.\n * @returns {String[]} The new words generated by the rule.\n */\n _applyRule: function _applyRule(word, rule) {\n var entries = rule.entries;\n var newWords = [];\n\n for (var i = 0, _len = entries.length; i < _len; i++) {\n var entry = entries[i];\n\n if (!entry.match || word.match(entry.match)) {\n var newWord = word;\n\n if (entry.remove) {\n newWord = newWord.replace(entry.remove, \"\");\n }\n\n if (rule.type === \"SFX\") {\n newWord = newWord + entry.add;\n } else {\n newWord = entry.add + newWord;\n }\n\n newWords.push(newWord);\n\n if (\"continuationClasses\" in entry) {\n for (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n var continuationRule = this.rules[entry.continuationClasses[j]];\n\n if (continuationRule) {\n newWords = newWords.concat(this._applyRule(newWord, continuationRule));\n }\n /*\n else {\n \t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n \t// I think the author mistakenly supplied lower-case rule codes instead \n \t// of upper-case.\n }\n */\n\n }\n }\n }\n }\n\n return newWords;\n },\n\n /**\n * Checks whether a word or a capitalization variant exists in the current dictionary.\n * The word is trimmed and several variations of capitalizations are checked.\n * If you want to check a word without any changes made to it, call checkExact()\n *\n * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n *\n * @param {String} aWord The word to check.\n * @returns {Boolean}\n */\n check: function check(aWord) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n } // Remove leading and trailing whitespace\n\n\n var trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\n if (this.checkExact(trimmedWord)) {\n return true;\n } // The exact word is not in the dictionary.\n\n\n if (trimmedWord.toUpperCase() === trimmedWord) {\n // The word was supplied in all uppercase.\n // Check for a capitalized form of the word.\n var capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n\n if (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n }\n\n if (this.checkExact(capitalizedWord)) {\n return true;\n }\n }\n\n var lowercaseWord = trimmedWord.toLowerCase();\n\n if (lowercaseWord !== trimmedWord) {\n if (this.hasFlag(lowercaseWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n } // Check for a lowercase form\n\n\n if (this.checkExact(lowercaseWord)) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Checks whether a word exists in the current dictionary.\n *\n * @param {String} word The word to check.\n * @returns {Boolean}\n */\n checkExact: function checkExact(word) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n\n var ruleCodes = this.dictionaryTable[word];\n\n var i, _len;\n\n if (typeof ruleCodes === 'undefined') {\n // Check if this might be a compound word.\n if (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n for (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n if (word.match(this.compoundRules[i])) {\n return true;\n }\n }\n }\n } else if (ruleCodes === null) {\n // a null (but not undefined) value for an entry in the dictionary table\n // means that the word is in the dictionary but has no flags.\n return true;\n } else if (_typeof(ruleCodes) === 'object') {\n // this.dictionary['hasOwnProperty'] will be a function.\n for (i = 0, _len = ruleCodes.length; i < _len; i++) {\n if (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n return true;\n }\n }\n }\n\n return false;\n },\n\n /**\n * Looks up whether a given word is flagged with a given flag.\n *\n * @param {String} word The word in question.\n * @param {String} flag The flag in question.\n * @return {Boolean}\n */\n hasFlag: function hasFlag(word, flag, wordFlags) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n\n if (flag in this.flags) {\n if (typeof wordFlags === 'undefined') {\n wordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n }\n\n if (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Returns a list of suggestions for a misspelled word.\n *\n * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n * This suggestor is primitive, but it works.\n *\n * @param {String} word The misspelling.\n * @param {Number} [limit=5] The maximum number of suggestions to return.\n * @returns {String[]} The array of suggestions.\n */\n alphabet: \"\",\n suggest: function suggest(word, limit) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n\n limit = limit || 5;\n\n if (this.memoized.hasOwnProperty(word)) {\n var memoizedLimit = this.memoized[word]['limit']; // Only return the cached list if it's big enough or if there weren't enough suggestions\n // to fill a smaller limit.\n\n if (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n return this.memoized[word]['suggestions'].slice(0, limit);\n }\n }\n\n if (this.check(word)) return []; // Check the replacement table.\n\n for (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n var replacementEntry = this.replacementTable[i];\n\n if (word.indexOf(replacementEntry[0]) !== -1) {\n var correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n\n if (this.check(correctedWord)) {\n return [correctedWord];\n }\n }\n }\n\n var self = this;\n self.alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n /*\n if (!self.alphabet) {\n \t// Use the alphabet as implicitly defined by the words in the dictionary.\n \tvar alphaHash = {};\n \t\n \tfor (var i in self.dictionaryTable) {\n \t\tfor (var j = 0, _len = i.length; j < _len; j++) {\n \t\t\talphaHash[i[j]] = true;\n \t\t}\n \t}\n \t\n \tfor (var i in alphaHash) {\n \t\tself.alphabet += i;\n \t}\n \t\n \tvar alphaArray = self.alphabet.split(\"\");\n \talphaArray.sort();\n \tself.alphabet = alphaArray.join(\"\");\n }\n */\n\n /**\n * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n * The value of each entry is the number of unique ways that the resulting word can be made.\n *\n * @arg mixed words Either a hash keyed by words or a string word to operate on.\n * @arg bool known_only Whether this function should ignore strings that are not in the dictionary.\n */\n\n function edits1(words, known_only) {\n var rv = {};\n\n var i, j, _iilen, _len, _jlen, _edit;\n\n if (typeof words == 'string') {\n var word = words;\n words = {};\n words[word] = true;\n }\n\n for (var word in words) {\n for (i = 0, _len = word.length + 1; i < _len; i++) {\n var s = [word.substring(0, i), word.substring(i)];\n\n if (s[1]) {\n _edit = s[0] + s[1].substring(1);\n\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n } // Eliminate transpositions of identical letters\n\n\n if (s[1].length > 1 && s[1][1] !== s[1][0]) {\n _edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n\n if (s[1]) {\n for (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n // Eliminate replacement of a letter by itself\n if (self.alphabet[j] != s[1].substring(0, 1)) {\n _edit = s[0] + self.alphabet[j] + s[1].substring(1);\n\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n\n if (s[1]) {\n for (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n _edit = s[0] + self.alphabet[j] + s[1];\n\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n }\n\n return rv;\n }\n\n function correct(word) {\n // Get the edit-distance-1 and edit-distance-2 forms of this word.\n var ed1 = edits1(word);\n var ed2 = edits1(ed1, true); // Sort the edits based on how many different ways they were created.\n\n var weighted_corrections = ed2;\n\n for (var ed1word in ed1) {\n if (!self.check(ed1word)) {\n continue;\n }\n\n if (ed1word in weighted_corrections) {\n weighted_corrections[ed1word] += ed1[ed1word];\n } else {\n weighted_corrections[ed1word] = ed1[ed1word];\n }\n }\n\n var i, _len;\n\n var sorted_corrections = [];\n\n for (i in weighted_corrections) {\n if (weighted_corrections.hasOwnProperty(i)) {\n sorted_corrections.push([i, weighted_corrections[i]]);\n }\n }\n\n function sorter(a, b) {\n var a_val = a[1];\n var b_val = b[1];\n\n if (a_val < b_val) {\n return -1;\n } else if (a_val > b_val) {\n return 1;\n } // @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n\n\n return b[0].localeCompare(a[0]);\n }\n\n sorted_corrections.sort(sorter).reverse();\n var rv = [];\n var capitalization_scheme = \"lowercase\";\n\n if (word.toUpperCase() === word) {\n capitalization_scheme = \"uppercase\";\n } else if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n capitalization_scheme = \"capitalized\";\n }\n\n var working_limit = limit;\n\n for (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n if (\"uppercase\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n } else if (\"capitalized\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n }\n\n if (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) == -1) {\n rv.push(sorted_corrections[i][0]);\n } else {\n // If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n working_limit++;\n }\n }\n\n return rv;\n }\n\n this.memoized[word] = {\n 'suggestions': correct(word),\n 'limit': limit\n };\n return this.memoized[word]['suggestions'];\n }\n };\n})(); // Support for use as a node.js module.\n\n\nif (true) {\n module.exports = Typo;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3R5cG8tanMvdHlwby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdHlwby1qcy90eXBvLmpzPzBhNjEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBjaHJvbWU6IGZhbHNlICovXG4vKiBnbG9iYWxzIF9fZGlybmFtZTogZmFsc2UgKi9cbi8qIGdsb2JhbHMgcmVxdWlyZTogZmFsc2UgKi9cbi8qIGdsb2JhbHMgQnVmZmVyOiBmYWxzZSAqL1xuLyogZ2xvYmFscyBtb2R1bGU6IGZhbHNlICovXG5cbi8qKlxuICogVHlwbyBpcyBhIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgYSBzcGVsbGNoZWNrZXIgdXNpbmcgaHVuc3BlbGwtc3R5bGUgXG4gKiBkaWN0aW9uYXJpZXMuXG4gKi9cblxudmFyIFR5cG87XG5cbihmdW5jdGlvbiAoKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBUeXBvIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZGljdGlvbmFyeV0gVGhlIGxvY2FsZSBjb2RlIG9mIHRoZSBkaWN0aW9uYXJ5IGJlaW5nIHVzZWQuIGUuZy4sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5fVVNcIi4gVGhpcyBpcyBvbmx5IHVzZWQgdG8gYXV0by1sb2FkIGRpY3Rpb25hcmllcy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbYWZmRGF0YV0gICAgVGhlIGRhdGEgZnJvbSB0aGUgZGljdGlvbmFyeSdzIC5hZmYgZmlsZS4gSWYgb21pdHRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgVHlwby5qcyBpcyBiZWluZyB1c2VkIGluIGEgQ2hyb21lIGV4dGVuc2lvbiwgdGhlIC5hZmZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IGZyb21cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3R5cG8vZGljdGlvbmFyaWVzL1tkaWN0aW9uYXJ5XS9bZGljdGlvbmFyeV0uYWZmXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIGVudmlyb25tZW50cywgaXQgd2lsbCBiZSBsb2FkZWQgZnJvbVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0dGluZ3MuZGljdGlvbmFyeVBhdGhdL2RpY3Rpb25hcmllcy9bZGljdGlvbmFyeV0vW2RpY3Rpb25hcnldLmFmZlxuICogQHBhcmFtIHtTdHJpbmd9IFt3b3Jkc0RhdGFdICBUaGUgZGF0YSBmcm9tIHRoZSBkaWN0aW9uYXJ5J3MgLmRpYyBmaWxlLiBJZiBvbWl0dGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBUeXBvLmpzIGlzIGJlaW5nIHVzZWQgaW4gYSBDaHJvbWUgZXh0ZW5zaW9uLCB0aGUgLmRpY1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgZnJvbVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdHlwby9kaWN0aW9uYXJpZXMvW2RpY3Rpb25hcnldL1tkaWN0aW9uYXJ5XS5kaWNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgZW52aXJvbm1lbnRzLCBpdCB3aWxsIGJlIGxvYWRlZCBmcm9tXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5ncy5kaWN0aW9uYXJ5UGF0aF0vZGljdGlvbmFyaWVzL1tkaWN0aW9uYXJ5XS9bZGljdGlvbmFyeV0uZGljXG4gKiBAcGFyYW0ge09iamVjdH0gW3NldHRpbmdzXSAgIENvbnN0cnVjdG9yIHNldHRpbmdzLiBBdmFpbGFibGUgcHJvcGVydGllcyBhcmU6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtkaWN0aW9uYXJ5UGF0aF06IHBhdGggdG8gbG9hZCBkaWN0aW9uYXJ5IGZyb20gaW4gbm9uLWNocm9tZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge09iamVjdH0gW2ZsYWdzXTogZmxhZyBpbmZvcm1hdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0Jvb2xlYW59IFthc3luY0xvYWRdOiBJZiB0cnVlLCBhZmZEYXRhIGFuZCB3b3Jkc0RhdGEgd2lsbCBiZSBsb2FkZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzbHkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtGdW5jdGlvbn0gW2xvYWRlZENhbGxiYWNrXTogQ2FsbGVkIHdoZW4gYm90aCBhZmZEYXRhIGFuZCB3b3Jkc0RhdGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIGxvYWRlZC4gT25seSB1c2VkIGlmIGFzeW5jTG9hZCBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHBhcmFtZXRlclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgaW5zdGFudGlhdGVkIFR5cG8gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHtUeXBvfSBBIFR5cG8gb2JqZWN0LlxuICovXG5cblR5cG8gPSBmdW5jdGlvbiAoZGljdGlvbmFyeSwgYWZmRGF0YSwgd29yZHNEYXRhLCBzZXR0aW5ncykge1xuXHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXG5cdHRoaXMuZGljdGlvbmFyeSA9IG51bGw7XG5cdFxuXHR0aGlzLnJ1bGVzID0ge307XG5cdHRoaXMuZGljdGlvbmFyeVRhYmxlID0ge307XG5cdFxuXHR0aGlzLmNvbXBvdW5kUnVsZXMgPSBbXTtcblx0dGhpcy5jb21wb3VuZFJ1bGVDb2RlcyA9IHt9O1xuXHRcblx0dGhpcy5yZXBsYWNlbWVudFRhYmxlID0gW107XG5cdFxuXHR0aGlzLmZsYWdzID0gc2V0dGluZ3MuZmxhZ3MgfHwge307IFxuXHRcblx0dGhpcy5tZW1vaXplZCA9IHt9O1xuXG5cdHRoaXMubG9hZGVkID0gZmFsc2U7XG5cdFxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdFxuXHR2YXIgcGF0aDtcblx0XG5cdC8vIExvb3AtY29udHJvbCB2YXJpYWJsZXMuXG5cdHZhciBpLCBqLCBfbGVuLCBfamxlbjtcblx0XG5cdGlmIChkaWN0aW9uYXJ5KSB7XG5cdFx0c2VsZi5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTtcblx0XHRcblx0XHQvLyBJZiB0aGUgZGF0YSBpcyBwcmVsb2FkZWQsIGp1c3Qgc2V0dXAgdGhlIFR5cG8gb2JqZWN0LlxuXHRcdGlmIChhZmZEYXRhICYmIHdvcmRzRGF0YSkge1xuXHRcdFx0c2V0dXAoKTtcblx0XHR9XG5cdFx0Ly8gTG9hZGluZyBkYXRhIGZvciBDaHJvbWUgZXh0ZW50aW9ucy5cblx0XHRlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAnY2hyb21lJyBpbiB3aW5kb3cgJiYgJ2V4dGVuc2lvbicgaW4gd2luZG93LmNocm9tZSAmJiAnZ2V0VVJMJyBpbiB3aW5kb3cuY2hyb21lLmV4dGVuc2lvbikge1xuXHRcdFx0aWYgKHNldHRpbmdzLmRpY3Rpb25hcnlQYXRoKSB7XG5cdFx0XHRcdHBhdGggPSBzZXR0aW5ncy5kaWN0aW9uYXJ5UGF0aDtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRwYXRoID0gXCJ0eXBvL2RpY3Rpb25hcmllc1wiO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZiAoIWFmZkRhdGEpIHJlYWREYXRhRmlsZShjaHJvbWUuZXh0ZW5zaW9uLmdldFVSTChwYXRoICsgXCIvXCIgKyBkaWN0aW9uYXJ5ICsgXCIvXCIgKyBkaWN0aW9uYXJ5ICsgXCIuYWZmXCIpLCBzZXRBZmZEYXRhKTtcblx0XHRcdGlmICghd29yZHNEYXRhKSByZWFkRGF0YUZpbGUoY2hyb21lLmV4dGVuc2lvbi5nZXRVUkwocGF0aCArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiLmRpY1wiKSwgc2V0V29yZHNEYXRhKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAoc2V0dGluZ3MuZGljdGlvbmFyeVBhdGgpIHtcblx0XHRcdFx0cGF0aCA9IHNldHRpbmdzLmRpY3Rpb25hcnlQYXRoO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIF9fZGlybmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0cGF0aCA9IF9fZGlybmFtZSArICcvZGljdGlvbmFyaWVzJztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRwYXRoID0gJy4vZGljdGlvbmFyaWVzJztcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0aWYgKCFhZmZEYXRhKSByZWFkRGF0YUZpbGUocGF0aCArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiLmFmZlwiLCBzZXRBZmZEYXRhKTtcblx0XHRcdGlmICghd29yZHNEYXRhKSByZWFkRGF0YUZpbGUocGF0aCArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiL1wiICsgZGljdGlvbmFyeSArIFwiLmRpY1wiLCBzZXRXb3Jkc0RhdGEpO1xuXHRcdH1cblx0fVxuXHRcblx0ZnVuY3Rpb24gcmVhZERhdGFGaWxlKHVybCwgc2V0RnVuYykge1xuXHRcdHZhciByZXNwb25zZSA9IHNlbGYuX3JlYWRGaWxlKHVybCwgbnVsbCwgc2V0dGluZ3MuYXN5bmNMb2FkKTtcblx0XHRcblx0XHRpZiAoc2V0dGluZ3MuYXN5bmNMb2FkKSB7XG5cdFx0XHRyZXNwb25zZS50aGVuKGZ1bmN0aW9uKGRhdGEpIHtcblx0XHRcdFx0c2V0RnVuYyhkYXRhKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHNldEZ1bmMocmVzcG9uc2UpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEFmZkRhdGEoZGF0YSkge1xuXHRcdGFmZkRhdGEgPSBkYXRhO1xuXG5cdFx0aWYgKHdvcmRzRGF0YSkge1xuXHRcdFx0c2V0dXAoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRXb3Jkc0RhdGEoZGF0YSkge1xuXHRcdHdvcmRzRGF0YSA9IGRhdGE7XG5cblx0XHRpZiAoYWZmRGF0YSkge1xuXHRcdFx0c2V0dXAoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cCgpIHtcblx0XHRzZWxmLnJ1bGVzID0gc2VsZi5fcGFyc2VBRkYoYWZmRGF0YSk7XG5cdFx0XG5cdFx0Ly8gU2F2ZSB0aGUgcnVsZSBjb2RlcyB0aGF0IGFyZSB1c2VkIGluIGNvbXBvdW5kIHJ1bGVzLlxuXHRcdHNlbGYuY29tcG91bmRSdWxlQ29kZXMgPSB7fTtcblx0XHRcblx0XHRmb3IgKGkgPSAwLCBfbGVuID0gc2VsZi5jb21wb3VuZFJ1bGVzLmxlbmd0aDsgaSA8IF9sZW47IGkrKykge1xuXHRcdFx0dmFyIHJ1bGUgPSBzZWxmLmNvbXBvdW5kUnVsZXNbaV07XG5cdFx0XHRcblx0XHRcdGZvciAoaiA9IDAsIF9qbGVuID0gcnVsZS5sZW5ndGg7IGogPCBfamxlbjsgaisrKSB7XG5cdFx0XHRcdHNlbGYuY29tcG91bmRSdWxlQ29kZXNbcnVsZVtqXV0gPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gSWYgd2UgYWRkIHRoaXMgT05MWUlOQ09NUE9VTkQgZmxhZyB0byBzZWxmLmNvbXBvdW5kUnVsZUNvZGVzLCB0aGVuIF9wYXJzZURJQ1xuXHRcdC8vIHdpbGwgZG8gdGhlIHdvcmsgb2Ygc2F2aW5nIHRoZSBsaXN0IG9mIHdvcmRzIHRoYXQgYXJlIGNvbXBvdW5kLW9ubHkuXG5cdFx0aWYgKFwiT05MWUlOQ09NUE9VTkRcIiBpbiBzZWxmLmZsYWdzKSB7XG5cdFx0XHRzZWxmLmNvbXBvdW5kUnVsZUNvZGVzW3NlbGYuZmxhZ3MuT05MWUlOQ09NUE9VTkRdID0gW107XG5cdFx0fVxuXHRcdFxuXHRcdHNlbGYuZGljdGlvbmFyeVRhYmxlID0gc2VsZi5fcGFyc2VESUMod29yZHNEYXRhKTtcblx0XHRcblx0XHQvLyBHZXQgcmlkIG9mIGFueSBjb2RlcyBmcm9tIHRoZSBjb21wb3VuZCBydWxlIGNvZGVzIHRoYXQgYXJlIG5ldmVyIHVzZWQgXG5cdFx0Ly8gKG9yIHRoYXQgd2VyZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMpLiAgTm90IGVzcGVjaWFsbHkgbmVjZXNzYXJ5Li4uIFxuXHRcdGZvciAoaSBpbiBzZWxmLmNvbXBvdW5kUnVsZUNvZGVzKSB7XG5cdFx0XHRpZiAoc2VsZi5jb21wb3VuZFJ1bGVDb2Rlc1tpXS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0ZGVsZXRlIHNlbGYuY29tcG91bmRSdWxlQ29kZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdC8vIEJ1aWxkIHRoZSBmdWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGVhY2ggY29tcG91bmQgcnVsZS5cblx0XHQvLyBJIGhhdmUgYSBmZWVsaW5nIChidXQgbm8gY29uZmlybWF0aW9uIHlldCkgdGhhdCB0aGlzIG1ldGhvZCBvZiBcblx0XHQvLyB0ZXN0aW5nIGZvciBjb21wb3VuZCB3b3JkcyBpcyBwcm9iYWJseSBzbG93LlxuXHRcdGZvciAoaSA9IDAsIF9sZW4gPSBzZWxmLmNvbXBvdW5kUnVsZXMubGVuZ3RoOyBpIDwgX2xlbjsgaSsrKSB7XG5cdFx0XHR2YXIgcnVsZVRleHQgPSBzZWxmLmNvbXBvdW5kUnVsZXNbaV07XG5cdFx0XHRcblx0XHRcdHZhciBleHByZXNzaW9uVGV4dCA9IFwiXCI7XG5cdFx0XHRcblx0XHRcdGZvciAoaiA9IDAsIF9qbGVuID0gcnVsZVRleHQubGVuZ3RoOyBqIDwgX2psZW47IGorKykge1xuXHRcdFx0XHR2YXIgY2hhcmFjdGVyID0gcnVsZVRleHRbal07XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAoY2hhcmFjdGVyIGluIHNlbGYuY29tcG91bmRSdWxlQ29kZXMpIHtcblx0XHRcdFx0XHRleHByZXNzaW9uVGV4dCArPSBcIihcIiArIHNlbGYuY29tcG91bmRSdWxlQ29kZXNbY2hhcmFjdGVyXS5qb2luKFwifFwiKSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGV4cHJlc3Npb25UZXh0ICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRzZWxmLmNvbXBvdW5kUnVsZXNbaV0gPSBuZXcgUmVnRXhwKGV4cHJlc3Npb25UZXh0LCBcImlcIik7XG5cdFx0fVxuXHRcdFxuXHRcdHNlbGYubG9hZGVkID0gdHJ1ZTtcblx0XHRcblx0XHRpZiAoc2V0dGluZ3MuYXN5bmNMb2FkICYmIHNldHRpbmdzLmxvYWRlZENhbGxiYWNrKSB7XG5cdFx0XHRzZXR0aW5ncy5sb2FkZWRDYWxsYmFjayhzZWxmKTtcblx0XHR9XG5cdH1cblx0XG5cdHJldHVybiB0aGlzO1xufTtcblxuVHlwby5wcm90b3R5cGUgPSB7XG5cdC8qKlxuXHQgKiBMb2FkcyBhIFR5cG8gaW5zdGFuY2UgZnJvbSBhIGhhc2ggb2YgYWxsIG9mIHRoZSBUeXBvIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmplY3Qgb2JqIEEgaGFzaCBvZiBUeXBvIHByb3BlcnRpZXMsIHByb2JhYmx5IGdvdHRlbiBmcm9tIGEgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eXBvX2luc3RhbmNlKSkuXG5cdCAqL1xuXHRcblx0bG9hZCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRmb3IgKHZhciBpIGluIG9iaikge1xuXHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHR0aGlzW2ldID0gb2JqW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0XG5cdC8qKlxuXHQgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGZpbGUuXG5cdCAqIFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgcGF0aCAocmVsYXRpdmUpIHRvIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW2NoYXJzZXQ9XCJJU084ODU5LTFcIl0gVGhlIGV4cGVjdGVkIGNoYXJzZXQgb2YgdGhlIGZpbGVcblx0ICogQHBhcmFtIHtCb29sZWFufSBhc3luYyBJZiB0cnVlLCB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkuIEZvciBub2RlLmpzIHRoaXMgZG9lcyBub3RoaW5nLCBhbGxcblx0ICogICAgICAgIGZpbGVzIGFyZSByZWFkIHN5bmNocm9ub3VzbHkuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBmaWxlIGRhdGEgaWYgYXN5bmMgaXMgZmFsc2UsIG90aGVyd2lzZSBhIHByb21pc2Ugb2JqZWN0LiBJZiBydW5uaW5nIG5vZGUuanMsIHRoZSBkYXRhIGlzXG5cdCAqICAgICAgICAgIGFsd2F5cyByZXR1cm5lZC5cblx0ICovXG5cdFxuXHRfcmVhZEZpbGUgOiBmdW5jdGlvbiAocGF0aCwgY2hhcnNldCwgYXN5bmMpIHtcblx0XHRjaGFyc2V0ID0gY2hhcnNldCB8fCBcInV0ZjhcIjtcblx0XHRcblx0XHRpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0dmFyIHByb21pc2U7XG5cdFx0XHR2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHRyZXEub3BlbihcIkdFVFwiLCBwYXRoLCBhc3luYyk7XG5cdFx0XHRcblx0XHRcdGlmIChhc3luYykge1xuXHRcdFx0XHRwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRcdFx0cmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChyZXEuc3RhdHVzVGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KHJlcS5zdGF0dXNUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFxuXHRcdFx0aWYgKHJlcS5vdmVycmlkZU1pbWVUeXBlKVxuXHRcdFx0XHRyZXEub3ZlcnJpZGVNaW1lVHlwZShcInRleHQvcGxhaW47IGNoYXJzZXQ9XCIgKyBjaGFyc2V0KTtcblx0XHRcblx0XHRcdHJlcS5zZW5kKG51bGwpO1xuXHRcdFx0XG5cdFx0XHRyZXR1cm4gYXN5bmMgPyBwcm9taXNlIDogcmVxLnJlc3BvbnNlVGV4dDtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHQvLyBOb2RlLmpzXG5cdFx0XHR2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cdFx0XHRcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmcy5leGlzdHNTeW5jKHBhdGgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLCBjaGFyc2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlBhdGggXCIgKyBwYXRoICsgXCIgZG9lcyBub3QgZXhpc3QuXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcblx0LyoqXG5cdCAqIFBhcnNlIHRoZSBydWxlcyBvdXQgZnJvbSBhIC5hZmYgZmlsZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgVGhlIGNvbnRlbnRzIG9mIHRoZSBhZmZpeCBmaWxlLlxuXHQgKiBAcmV0dXJucyBvYmplY3QgVGhlIHJ1bGVzIGZyb20gdGhlIGZpbGUuXG5cdCAqL1xuXHRcblx0X3BhcnNlQUZGIDogZnVuY3Rpb24gKGRhdGEpIHtcblx0XHR2YXIgcnVsZXMgPSB7fTtcblx0XHRcblx0XHR2YXIgbGluZSwgc3VibGluZSwgbnVtRW50cmllcywgbGluZVBhcnRzO1xuXHRcdHZhciBpLCBqLCBfbGVuLCBfamxlbjtcblx0XHRcblx0XHQvLyBSZW1vdmUgY29tbWVudCBsaW5lc1xuXHRcdGRhdGEgPSB0aGlzLl9yZW1vdmVBZmZpeENvbW1lbnRzKGRhdGEpO1xuXHRcdFxuXHRcdHZhciBsaW5lcyA9IGRhdGEuc3BsaXQoL1xccj9cXG4vKTtcblx0XHRcblx0XHRmb3IgKGkgPSAwLCBfbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgX2xlbjsgaSsrKSB7XG5cdFx0XHRsaW5lID0gbGluZXNbaV07XG5cdFx0XHRcblx0XHRcdHZhciBkZWZpbml0aW9uUGFydHMgPSBsaW5lLnNwbGl0KC9cXHMrLyk7XG5cdFx0XHRcblx0XHRcdHZhciBydWxlVHlwZSA9IGRlZmluaXRpb25QYXJ0c1swXTtcblx0XHRcdFxuXHRcdFx0aWYgKHJ1bGVUeXBlID09IFwiUEZYXCIgfHwgcnVsZVR5cGUgPT0gXCJTRlhcIikge1xuXHRcdFx0XHR2YXIgcnVsZUNvZGUgPSBkZWZpbml0aW9uUGFydHNbMV07XG5cdFx0XHRcdHZhciBjb21iaW5lYWJsZSA9IGRlZmluaXRpb25QYXJ0c1syXTtcblx0XHRcdFx0bnVtRW50cmllcyA9IHBhcnNlSW50KGRlZmluaXRpb25QYXJ0c1szXSwgMTApO1xuXHRcdFx0XHRcblx0XHRcdFx0dmFyIGVudHJpZXMgPSBbXTtcblx0XHRcdFx0XG5cdFx0XHRcdGZvciAoaiA9IGkgKyAxLCBfamxlbiA9IGkgKyAxICsgbnVtRW50cmllczsgaiA8IF9qbGVuOyBqKyspIHtcblx0XHRcdFx0XHRzdWJsaW5lID0gbGluZXNbal07XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0bGluZVBhcnRzID0gc3VibGluZS5zcGxpdCgvXFxzKy8pO1xuXHRcdFx0XHRcdHZhciBjaGFyYWN0ZXJzVG9SZW1vdmUgPSBsaW5lUGFydHNbMl07XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGFkZGl0aW9uUGFydHMgPSBsaW5lUGFydHNbM10uc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBjaGFyYWN0ZXJzVG9BZGQgPSBhZGRpdGlvblBhcnRzWzBdO1xuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXJzVG9BZGQgPT09IFwiMFwiKSBjaGFyYWN0ZXJzVG9BZGQgPSBcIlwiO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBjb250aW51YXRpb25DbGFzc2VzID0gdGhpcy5wYXJzZVJ1bGVDb2RlcyhhZGRpdGlvblBhcnRzWzFdKTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgcmVnZXhUb01hdGNoID0gbGluZVBhcnRzWzRdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBlbnRyeSA9IHt9O1xuXHRcdFx0XHRcdGVudHJ5LmFkZCA9IGNoYXJhY3RlcnNUb0FkZDtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAoY29udGludWF0aW9uQ2xhc3Nlcy5sZW5ndGggPiAwKSBlbnRyeS5jb250aW51YXRpb25DbGFzc2VzID0gY29udGludWF0aW9uQ2xhc3Nlcztcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAocmVnZXhUb01hdGNoICE9PSBcIi5cIikge1xuXHRcdFx0XHRcdFx0aWYgKHJ1bGVUeXBlID09PSBcIlNGWFwiKSB7XG5cdFx0XHRcdFx0XHRcdGVudHJ5Lm1hdGNoID0gbmV3IFJlZ0V4cChyZWdleFRvTWF0Y2ggKyBcIiRcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW50cnkubWF0Y2ggPSBuZXcgUmVnRXhwKFwiXlwiICsgcmVnZXhUb01hdGNoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlcnNUb1JlbW92ZSAhPSBcIjBcIikge1xuXHRcdFx0XHRcdFx0aWYgKHJ1bGVUeXBlID09PSBcIlNGWFwiKSB7XG5cdFx0XHRcdFx0XHRcdGVudHJ5LnJlbW92ZSA9IG5ldyBSZWdFeHAoY2hhcmFjdGVyc1RvUmVtb3ZlICArIFwiJFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRlbnRyeS5yZW1vdmUgPSBjaGFyYWN0ZXJzVG9SZW1vdmU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGVudHJpZXMucHVzaChlbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHJ1bGVzW3J1bGVDb2RlXSA9IHsgXCJ0eXBlXCIgOiBydWxlVHlwZSwgXCJjb21iaW5lYWJsZVwiIDogKGNvbWJpbmVhYmxlID09IFwiWVwiKSwgXCJlbnRyaWVzXCIgOiBlbnRyaWVzIH07XG5cdFx0XHRcdFxuXHRcdFx0XHRpICs9IG51bUVudHJpZXM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChydWxlVHlwZSA9PT0gXCJDT01QT1VORFJVTEVcIikge1xuXHRcdFx0XHRudW1FbnRyaWVzID0gcGFyc2VJbnQoZGVmaW5pdGlvblBhcnRzWzFdLCAxMCk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmb3IgKGogPSBpICsgMSwgX2psZW4gPSBpICsgMSArIG51bUVudHJpZXM7IGogPCBfamxlbjsgaisrKSB7XG5cdFx0XHRcdFx0bGluZSA9IGxpbmVzW2pdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGxpbmVQYXJ0cyA9IGxpbmUuc3BsaXQoL1xccysvKTtcblx0XHRcdFx0XHR0aGlzLmNvbXBvdW5kUnVsZXMucHVzaChsaW5lUGFydHNbMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpICs9IG51bUVudHJpZXM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChydWxlVHlwZSA9PT0gXCJSRVBcIikge1xuXHRcdFx0XHRsaW5lUGFydHMgPSBsaW5lLnNwbGl0KC9cXHMrLyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAobGluZVBhcnRzLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdHRoaXMucmVwbGFjZW1lbnRUYWJsZS5wdXNoKFsgbGluZVBhcnRzWzFdLCBsaW5lUGFydHNbMl0gXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHQvLyBPTkxZSU5DT01QT1VORFxuXHRcdFx0XHQvLyBDT01QT1VORE1JTlxuXHRcdFx0XHQvLyBGTEFHXG5cdFx0XHRcdC8vIEtFRVBDQVNFXG5cdFx0XHRcdC8vIE5FRURBRkZJWFxuXHRcdFx0XHRcblx0XHRcdFx0dGhpcy5mbGFnc1tydWxlVHlwZV0gPSBkZWZpbml0aW9uUGFydHNbMV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBydWxlcztcblx0fSxcblx0XG5cdC8qKlxuXHQgKiBSZW1vdmVzIGNvbW1lbnQgbGluZXMgYW5kIHRoZW4gY2xlYW5zIHVwIGJsYW5rIGxpbmVzIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZGF0YSBUaGUgZGF0YSBmcm9tIGFuIGFmZml4IGZpbGUuXG5cdCAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGNsZWFuZWQtdXAgZGF0YS5cblx0ICovXG5cdFxuXHRfcmVtb3ZlQWZmaXhDb21tZW50cyA6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0Ly8gUmVtb3ZlIGNvbW1lbnRzXG5cdFx0Ly8gVGhpcyB1c2VkIHRvIHJlbW92ZSBhbnkgc3RyaW5nIHN0YXJ0aW5nIHdpdGggJyMnIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsXG5cdFx0Ly8gYnV0IHNvbWUgQ09NUE9VTkRSVUxFIGRlZmluaXRpb25zIGluY2x1ZGUgJyMnIGFzIHBhcnQgb2YgdGhlIHJ1bGUuXG5cdFx0Ly8gSSBoYXZlbid0IHNlZW4gYW55IGFmZml4IGZpbGVzIHRoYXQgdXNlIGNvbW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgcmVhbCBkYXRhLFxuXHRcdC8vIHNvIEkgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJyZWFrIGFueXRoaW5nLlxuXHRcdGRhdGEgPSBkYXRhLnJlcGxhY2UoL15cXHMqIy4qJC9tZywgXCJcIik7XG5cdFx0XG5cdFx0Ly8gVHJpbSBlYWNoIGxpbmVcblx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC9eXFxzXFxzKi9tLCAnJykucmVwbGFjZSgvXFxzXFxzKiQvbSwgJycpO1xuXHRcdFxuXHRcdC8vIFJlbW92ZSBibGFuayBsaW5lcy5cblx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC9cXG57Mix9L2csIFwiXFxuXCIpO1xuXHRcdFxuXHRcdC8vIFRyaW0gdGhlIGVudGlyZSBzdHJpbmdcblx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcblx0XHRcblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblx0XG5cdC8qKlxuXHQgKiBQYXJzZXMgdGhlIHdvcmRzIG91dCBmcm9tIHRoZSAuZGljIGZpbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIFRoZSBkYXRhIGZyb20gdGhlIGRpY3Rpb25hcnkgZmlsZS5cblx0ICogQHJldHVybnMgb2JqZWN0IFRoZSBsb29rdXAgdGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIHdvcmRzIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgd29yZCBmb3JtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXHQgKi9cblx0XG5cdF9wYXJzZURJQyA6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0ZGF0YSA9IHRoaXMuX3JlbW92ZURpY0NvbW1lbnRzKGRhdGEpO1xuXHRcdFxuXHRcdHZhciBsaW5lcyA9IGRhdGEuc3BsaXQoL1xccj9cXG4vKTtcblx0XHR2YXIgZGljdGlvbmFyeVRhYmxlID0ge307XG5cdFx0XG5cdFx0ZnVuY3Rpb24gYWRkV29yZCh3b3JkLCBydWxlcykge1xuXHRcdFx0Ly8gU29tZSBkaWN0aW9uYXJpZXMgd2lsbCBsaXN0IHRoZSBzYW1lIHdvcmQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgcnVsZSBzZXRzLlxuXHRcdFx0aWYgKCFkaWN0aW9uYXJ5VGFibGUuaGFzT3duUHJvcGVydHkod29yZCkpIHtcblx0XHRcdFx0ZGljdGlvbmFyeVRhYmxlW3dvcmRdID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0aWYgKHJ1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKGRpY3Rpb25hcnlUYWJsZVt3b3JkXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGRpY3Rpb25hcnlUYWJsZVt3b3JkXSA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGljdGlvbmFyeVRhYmxlW3dvcmRdLnB1c2gocnVsZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHQvLyBUaGUgZmlyc3QgbGluZSBpcyB0aGUgbnVtYmVyIG9mIHdvcmRzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXHRcdGZvciAodmFyIGkgPSAxLCBfbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgX2xlbjsgaSsrKSB7XG5cdFx0XHR2YXIgbGluZSA9IGxpbmVzW2ldO1xuXHRcdFx0XG5cdFx0XHRpZiAoIWxpbmUpIHtcblx0XHRcdFx0Ly8gSWdub3JlIGVtcHR5IGxpbmVzLlxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBhcnRzID0gbGluZS5zcGxpdChcIi9cIiwgMik7XG5cdFx0XHRcblx0XHRcdHZhciB3b3JkID0gcGFydHNbMF07XG5cblx0XHRcdC8vIE5vdyBmb3IgZWFjaCBhZmZpeCBydWxlLCBnZW5lcmF0ZSB0aGF0IGZvcm0gb2YgdGhlIHdvcmQuXG5cdFx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgcnVsZUNvZGVzQXJyYXkgPSB0aGlzLnBhcnNlUnVsZUNvZGVzKHBhcnRzWzFdKTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIFNhdmUgdGhlIHJ1bGVDb2RlcyBmb3IgY29tcG91bmQgd29yZCBzaXR1YXRpb25zLlxuXHRcdFx0XHRpZiAoIShcIk5FRURBRkZJWFwiIGluIHRoaXMuZmxhZ3MpIHx8IHJ1bGVDb2Rlc0FycmF5LmluZGV4T2YodGhpcy5mbGFncy5ORUVEQUZGSVgpID09IC0xKSB7XG5cdFx0XHRcdFx0YWRkV29yZCh3b3JkLCBydWxlQ29kZXNBcnJheSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGZvciAodmFyIGogPSAwLCBfamxlbiA9IHJ1bGVDb2Rlc0FycmF5Lmxlbmd0aDsgaiA8IF9qbGVuOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgY29kZSA9IHJ1bGVDb2Rlc0FycmF5W2pdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBydWxlID0gdGhpcy5ydWxlc1tjb2RlXTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAocnVsZSkge1xuXHRcdFx0XHRcdFx0dmFyIG5ld1dvcmRzID0gdGhpcy5fYXBwbHlSdWxlKHdvcmQsIHJ1bGUpO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpaSA9IDAsIF9paWxlbiA9IG5ld1dvcmRzLmxlbmd0aDsgaWkgPCBfaWlsZW47IGlpKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIG5ld1dvcmQgPSBuZXdXb3Jkc1tpaV07XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRhZGRXb3JkKG5ld1dvcmQsIFtdKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmIChydWxlLmNvbWJpbmVhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgayA9IGogKyAxOyBrIDwgX2psZW47IGsrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNvbWJpbmVDb2RlID0gcnVsZUNvZGVzQXJyYXlba107XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjb21iaW5lUnVsZSA9IHRoaXMucnVsZXNbY29tYmluZUNvZGVdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tYmluZVJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbWJpbmVSdWxlLmNvbWJpbmVhYmxlICYmIChydWxlLnR5cGUgIT0gY29tYmluZVJ1bGUudHlwZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgb3RoZXJOZXdXb3JkcyA9IHRoaXMuX2FwcGx5UnVsZShuZXdXb3JkLCBjb21iaW5lUnVsZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaWlpID0gMCwgX2lpaWxlbiA9IG90aGVyTmV3V29yZHMubGVuZ3RoOyBpaWkgPCBfaWlpbGVuOyBpaWkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG90aGVyTmV3V29yZCA9IG90aGVyTmV3V29yZHNbaWlpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFkZFdvcmQob3RoZXJOZXdXb3JkLCBbXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChjb2RlIGluIHRoaXMuY29tcG91bmRSdWxlQ29kZXMpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29tcG91bmRSdWxlQ29kZXNbY29kZV0ucHVzaCh3b3JkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRhZGRXb3JkKHdvcmQudHJpbSgpLCBbXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBkaWN0aW9uYXJ5VGFibGU7XG5cdH0sXG5cdFxuXHRcblx0LyoqXG5cdCAqIFJlbW92ZXMgY29tbWVudCBsaW5lcyBhbmQgdGhlbiBjbGVhbnMgdXAgYmxhbmsgbGluZXMgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIFRoZSBkYXRhIGZyb20gYSAuZGljIGZpbGUuXG5cdCAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGNsZWFuZWQtdXAgZGF0YS5cblx0ICovXG5cdFxuXHRfcmVtb3ZlRGljQ29tbWVudHMgOiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdC8vIEkgY2FuJ3QgZmluZCBhbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvbiBpdCwgYnV0IGF0IGxlYXN0IHRoZSBkZV9ERVxuXHRcdC8vIGRpY3Rpb25hcnkgdXNlcyB0YWItaW5kZW50ZWQgbGluZXMgYXMgY29tbWVudHMuXG5cdFx0XG5cdFx0Ly8gUmVtb3ZlIGNvbW1lbnRzXG5cdFx0ZGF0YSA9IGRhdGEucmVwbGFjZSgvXlxcdC4qJC9tZywgXCJcIik7XG5cdFx0XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH0sXG5cdFxuXHRwYXJzZVJ1bGVDb2RlcyA6IGZ1bmN0aW9uICh0ZXh0Q29kZXMpIHtcblx0XHRpZiAoIXRleHRDb2Rlcykge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRlbHNlIGlmICghKFwiRkxBR1wiIGluIHRoaXMuZmxhZ3MpKSB7XG5cdFx0XHRyZXR1cm4gdGV4dENvZGVzLnNwbGl0KFwiXCIpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0aGlzLmZsYWdzLkZMQUcgPT09IFwibG9uZ1wiKSB7XG5cdFx0XHR2YXIgZmxhZ3MgPSBbXTtcblx0XHRcdFxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIF9sZW4gPSB0ZXh0Q29kZXMubGVuZ3RoOyBpIDwgX2xlbjsgaSArPSAyKSB7XG5cdFx0XHRcdGZsYWdzLnB1c2godGV4dENvZGVzLnN1YnN0cihpLCAyKSk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHJldHVybiBmbGFncztcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy5mbGFncy5GTEFHID09PSBcIm51bVwiKSB7XG5cdFx0XHRyZXR1cm4gdGV4dENvZGVzLnNwbGl0KFwiLFwiKTtcblx0XHR9XG5cdH0sXG5cdFxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhZmZpeCBydWxlIHRvIGEgd29yZC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHdvcmQgVGhlIGJhc2Ugd29yZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIGFmZml4IHJ1bGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmdbXX0gVGhlIG5ldyB3b3JkcyBnZW5lcmF0ZWQgYnkgdGhlIHJ1bGUuXG5cdCAqL1xuXHRcblx0X2FwcGx5UnVsZSA6IGZ1bmN0aW9uICh3b3JkLCBydWxlKSB7XG5cdFx0dmFyIGVudHJpZXMgPSBydWxlLmVudHJpZXM7XG5cdFx0dmFyIG5ld1dvcmRzID0gW107XG5cdFx0XG5cdFx0Zm9yICh2YXIgaSA9IDAsIF9sZW4gPSBlbnRyaWVzLmxlbmd0aDsgaSA8IF9sZW47IGkrKykge1xuXHRcdFx0dmFyIGVudHJ5ID0gZW50cmllc1tpXTtcblx0XHRcdFxuXHRcdFx0aWYgKCFlbnRyeS5tYXRjaCB8fCB3b3JkLm1hdGNoKGVudHJ5Lm1hdGNoKSkge1xuXHRcdFx0XHR2YXIgbmV3V29yZCA9IHdvcmQ7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAoZW50cnkucmVtb3ZlKSB7XG5cdFx0XHRcdFx0bmV3V29yZCA9IG5ld1dvcmQucmVwbGFjZShlbnRyeS5yZW1vdmUsIFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAocnVsZS50eXBlID09PSBcIlNGWFwiKSB7XG5cdFx0XHRcdFx0bmV3V29yZCA9IG5ld1dvcmQgKyBlbnRyeS5hZGQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0bmV3V29yZCA9IGVudHJ5LmFkZCArIG5ld1dvcmQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdG5ld1dvcmRzLnB1c2gobmV3V29yZCk7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAoXCJjb250aW51YXRpb25DbGFzc2VzXCIgaW4gZW50cnkpIHtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMCwgX2psZW4gPSBlbnRyeS5jb250aW51YXRpb25DbGFzc2VzLmxlbmd0aDsgaiA8IF9qbGVuOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBjb250aW51YXRpb25SdWxlID0gdGhpcy5ydWxlc1tlbnRyeS5jb250aW51YXRpb25DbGFzc2VzW2pdXTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKGNvbnRpbnVhdGlvblJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0bmV3V29yZHMgPSBuZXdXb3Jkcy5jb25jYXQodGhpcy5fYXBwbHlSdWxlKG5ld1dvcmQsIGNvbnRpbnVhdGlvblJ1bGUpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgaXQgZG9lcywgYXQgbGVhc3QgaW4gdGhlIGRlX0RFIGRpY3Rpb25hcnkuXG5cdFx0XHRcdFx0XHRcdC8vIEkgdGhpbmsgdGhlIGF1dGhvciBtaXN0YWtlbmx5IHN1cHBsaWVkIGxvd2VyLWNhc2UgcnVsZSBjb2RlcyBpbnN0ZWFkIFxuXHRcdFx0XHRcdFx0XHQvLyBvZiB1cHBlci1jYXNlLlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ki9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0cmV0dXJuIG5ld1dvcmRzO1xuXHR9LFxuXHRcblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgd29yZCBvciBhIGNhcGl0YWxpemF0aW9uIHZhcmlhbnQgZXhpc3RzIGluIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkuXG5cdCAqIFRoZSB3b3JkIGlzIHRyaW1tZWQgYW5kIHNldmVyYWwgdmFyaWF0aW9ucyBvZiBjYXBpdGFsaXphdGlvbnMgYXJlIGNoZWNrZWQuXG5cdCAqIElmIHlvdSB3YW50IHRvIGNoZWNrIGEgd29yZCB3aXRob3V0IGFueSBjaGFuZ2VzIG1hZGUgdG8gaXQsIGNhbGwgY2hlY2tFeGFjdCgpXG5cdCAqXG5cdCAqIEBzZWUgaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQgcmU6dHJpbW1pbmcgZnVuY3Rpb25cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGFXb3JkIFRoZSB3b3JkIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICovXG5cdFxuXHRjaGVjayA6IGZ1bmN0aW9uIChhV29yZCkge1xuXHRcdGlmICghdGhpcy5sb2FkZWQpIHtcblx0XHRcdHRocm93IFwiRGljdGlvbmFyeSBub3QgbG9hZGVkLlwiO1xuXHRcdH1cblx0XHRcblx0XHQvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZVxuXHRcdHZhciB0cmltbWVkV29yZCA9IGFXb3JkLnJlcGxhY2UoL15cXHNcXHMqLywgJycpLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuXHRcdFxuXHRcdGlmICh0aGlzLmNoZWNrRXhhY3QodHJpbW1lZFdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gVGhlIGV4YWN0IHdvcmQgaXMgbm90IGluIHRoZSBkaWN0aW9uYXJ5LlxuXHRcdGlmICh0cmltbWVkV29yZC50b1VwcGVyQ2FzZSgpID09PSB0cmltbWVkV29yZCkge1xuXHRcdFx0Ly8gVGhlIHdvcmQgd2FzIHN1cHBsaWVkIGluIGFsbCB1cHBlcmNhc2UuXG5cdFx0XHQvLyBDaGVjayBmb3IgYSBjYXBpdGFsaXplZCBmb3JtIG9mIHRoZSB3b3JkLlxuXHRcdFx0dmFyIGNhcGl0YWxpemVkV29yZCA9IHRyaW1tZWRXb3JkWzBdICsgdHJpbW1lZFdvcmQuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcblx0XHRcdGlmICh0aGlzLmhhc0ZsYWcoY2FwaXRhbGl6ZWRXb3JkLCBcIktFRVBDQVNFXCIpKSB7XG5cdFx0XHRcdC8vIENhcGl0YWxpemF0aW9uIHZhcmlhbnRzIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyB3b3JkLlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGlmICh0aGlzLmNoZWNrRXhhY3QoY2FwaXRhbGl6ZWRXb3JkKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0dmFyIGxvd2VyY2FzZVdvcmQgPSB0cmltbWVkV29yZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFxuXHRcdGlmIChsb3dlcmNhc2VXb3JkICE9PSB0cmltbWVkV29yZCkge1xuXHRcdFx0aWYgKHRoaXMuaGFzRmxhZyhsb3dlcmNhc2VXb3JkLCBcIktFRVBDQVNFXCIpKSB7XG5cdFx0XHRcdC8vIENhcGl0YWxpemF0aW9uIHZhcmlhbnRzIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyB3b3JkLlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8vIENoZWNrIGZvciBhIGxvd2VyY2FzZSBmb3JtXG5cdFx0XHRpZiAodGhpcy5jaGVja0V4YWN0KGxvd2VyY2FzZVdvcmQpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdFxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgYSB3b3JkIGV4aXN0cyBpbiB0aGUgY3VycmVudCBkaWN0aW9uYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gd29yZCBUaGUgd29yZCB0byBjaGVjay5cblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqL1xuXHRcblx0Y2hlY2tFeGFjdCA6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdFx0aWYgKCF0aGlzLmxvYWRlZCkge1xuXHRcdFx0dGhyb3cgXCJEaWN0aW9uYXJ5IG5vdCBsb2FkZWQuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHJ1bGVDb2RlcyA9IHRoaXMuZGljdGlvbmFyeVRhYmxlW3dvcmRdO1xuXHRcdFxuXHRcdHZhciBpLCBfbGVuO1xuXHRcdFxuXHRcdGlmICh0eXBlb2YgcnVsZUNvZGVzID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBtaWdodCBiZSBhIGNvbXBvdW5kIHdvcmQuXG5cdFx0XHRpZiAoXCJDT01QT1VORE1JTlwiIGluIHRoaXMuZmxhZ3MgJiYgd29yZC5sZW5ndGggPj0gdGhpcy5mbGFncy5DT01QT1VORE1JTikge1xuXHRcdFx0XHRmb3IgKGkgPSAwLCBfbGVuID0gdGhpcy5jb21wb3VuZFJ1bGVzLmxlbmd0aDsgaSA8IF9sZW47IGkrKykge1xuXHRcdFx0XHRcdGlmICh3b3JkLm1hdGNoKHRoaXMuY29tcG91bmRSdWxlc1tpXSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIGlmIChydWxlQ29kZXMgPT09IG51bGwpIHtcblx0XHRcdC8vIGEgbnVsbCAoYnV0IG5vdCB1bmRlZmluZWQpIHZhbHVlIGZvciBhbiBlbnRyeSBpbiB0aGUgZGljdGlvbmFyeSB0YWJsZVxuXHRcdFx0Ly8gbWVhbnMgdGhhdCB0aGUgd29yZCBpcyBpbiB0aGUgZGljdGlvbmFyeSBidXQgaGFzIG5vIGZsYWdzLlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHR5cGVvZiBydWxlQ29kZXMgPT09ICdvYmplY3QnKSB7IC8vIHRoaXMuZGljdGlvbmFyeVsnaGFzT3duUHJvcGVydHknXSB3aWxsIGJlIGEgZnVuY3Rpb24uXG5cdFx0XHRmb3IgKGkgPSAwLCBfbGVuID0gcnVsZUNvZGVzLmxlbmd0aDsgaSA8IF9sZW47IGkrKykge1xuXHRcdFx0XHRpZiAoIXRoaXMuaGFzRmxhZyh3b3JkLCBcIk9OTFlJTkNPTVBPVU5EXCIsIHJ1bGVDb2Rlc1tpXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0XG5cdC8qKlxuXHQgKiBMb29rcyB1cCB3aGV0aGVyIGEgZ2l2ZW4gd29yZCBpcyBmbGFnZ2VkIHdpdGggYSBnaXZlbiBmbGFnLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gd29yZCBUaGUgd29yZCBpbiBxdWVzdGlvbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IGZsYWcgVGhlIGZsYWcgaW4gcXVlc3Rpb24uXG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCAqL1xuXHQgXG5cdGhhc0ZsYWcgOiBmdW5jdGlvbiAod29yZCwgZmxhZywgd29yZEZsYWdzKSB7XG5cdFx0aWYgKCF0aGlzLmxvYWRlZCkge1xuXHRcdFx0dGhyb3cgXCJEaWN0aW9uYXJ5IG5vdCBsb2FkZWQuXCI7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgaW4gdGhpcy5mbGFncykge1xuXHRcdFx0aWYgKHR5cGVvZiB3b3JkRmxhZ3MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHdvcmRGbGFncyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHRoaXMuZGljdGlvbmFyeVRhYmxlW3dvcmRdKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0aWYgKHdvcmRGbGFncyAmJiB3b3JkRmxhZ3MuaW5kZXhPZih0aGlzLmZsYWdzW2ZsYWddKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzdWdnZXN0aW9ucyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cDovL3d3dy5ub3J2aWcuY29tL3NwZWxsLWNvcnJlY3QuaHRtbCBmb3IgdGhlIGJhc2lzIG9mIHRoaXMgc3VnZ2VzdG9yLlxuXHQgKiBUaGlzIHN1Z2dlc3RvciBpcyBwcmltaXRpdmUsIGJ1dCBpdCB3b3Jrcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHdvcmQgVGhlIG1pc3NwZWxsaW5nLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2xpbWl0PTVdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdWdnZXN0aW9ucyB0byByZXR1cm4uXG5cdCAqIEByZXR1cm5zIHtTdHJpbmdbXX0gVGhlIGFycmF5IG9mIHN1Z2dlc3Rpb25zLlxuXHQgKi9cblx0XG5cdGFscGhhYmV0IDogXCJcIixcblx0XG5cdHN1Z2dlc3QgOiBmdW5jdGlvbiAod29yZCwgbGltaXQpIHtcblx0XHRpZiAoIXRoaXMubG9hZGVkKSB7XG5cdFx0XHR0aHJvdyBcIkRpY3Rpb25hcnkgbm90IGxvYWRlZC5cIjtcblx0XHR9XG5cblx0XHRsaW1pdCA9IGxpbWl0IHx8IDU7XG5cblx0XHRpZiAodGhpcy5tZW1vaXplZC5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuXHRcdFx0dmFyIG1lbW9pemVkTGltaXQgPSB0aGlzLm1lbW9pemVkW3dvcmRdWydsaW1pdCddO1xuXG5cdFx0XHQvLyBPbmx5IHJldHVybiB0aGUgY2FjaGVkIGxpc3QgaWYgaXQncyBiaWcgZW5vdWdoIG9yIGlmIHRoZXJlIHdlcmVuJ3QgZW5vdWdoIHN1Z2dlc3Rpb25zXG5cdFx0XHQvLyB0byBmaWxsIGEgc21hbGxlciBsaW1pdC5cblx0XHRcdGlmIChsaW1pdCA8PSBtZW1vaXplZExpbWl0IHx8IHRoaXMubWVtb2l6ZWRbd29yZF1bJ3N1Z2dlc3Rpb25zJ10ubGVuZ3RoIDwgbWVtb2l6ZWRMaW1pdCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5tZW1vaXplZFt3b3JkXVsnc3VnZ2VzdGlvbnMnXS5zbGljZSgwLCBsaW1pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdGlmICh0aGlzLmNoZWNrKHdvcmQpKSByZXR1cm4gW107XG5cdFx0XG5cdFx0Ly8gQ2hlY2sgdGhlIHJlcGxhY2VtZW50IHRhYmxlLlxuXHRcdGZvciAodmFyIGkgPSAwLCBfbGVuID0gdGhpcy5yZXBsYWNlbWVudFRhYmxlLmxlbmd0aDsgaSA8IF9sZW47IGkrKykge1xuXHRcdFx0dmFyIHJlcGxhY2VtZW50RW50cnkgPSB0aGlzLnJlcGxhY2VtZW50VGFibGVbaV07XG5cdFx0XHRcblx0XHRcdGlmICh3b3JkLmluZGV4T2YocmVwbGFjZW1lbnRFbnRyeVswXSkgIT09IC0xKSB7XG5cdFx0XHRcdHZhciBjb3JyZWN0ZWRXb3JkID0gd29yZC5yZXBsYWNlKHJlcGxhY2VtZW50RW50cnlbMF0sIHJlcGxhY2VtZW50RW50cnlbMV0pO1xuXHRcdFx0XHRcblx0XHRcdFx0aWYgKHRoaXMuY2hlY2soY29ycmVjdGVkV29yZCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gWyBjb3JyZWN0ZWRXb3JkIF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdHNlbGYuYWxwaGFiZXQgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG5cdFx0XG5cdFx0Lypcblx0XHRpZiAoIXNlbGYuYWxwaGFiZXQpIHtcblx0XHRcdC8vIFVzZSB0aGUgYWxwaGFiZXQgYXMgaW1wbGljaXRseSBkZWZpbmVkIGJ5IHRoZSB3b3JkcyBpbiB0aGUgZGljdGlvbmFyeS5cblx0XHRcdHZhciBhbHBoYUhhc2ggPSB7fTtcblx0XHRcdFxuXHRcdFx0Zm9yICh2YXIgaSBpbiBzZWxmLmRpY3Rpb25hcnlUYWJsZSkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMCwgX2xlbiA9IGkubGVuZ3RoOyBqIDwgX2xlbjsgaisrKSB7XG5cdFx0XHRcdFx0YWxwaGFIYXNoW2lbal1dID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRmb3IgKHZhciBpIGluIGFscGhhSGFzaCkge1xuXHRcdFx0XHRzZWxmLmFscGhhYmV0ICs9IGk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHZhciBhbHBoYUFycmF5ID0gc2VsZi5hbHBoYWJldC5zcGxpdChcIlwiKTtcblx0XHRcdGFscGhhQXJyYXkuc29ydCgpO1xuXHRcdFx0c2VsZi5hbHBoYWJldCA9IGFscGhhQXJyYXkuam9pbihcIlwiKTtcblx0XHR9XG5cdFx0Ki9cblx0XHRcblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgaGFzaCBrZXllZCBieSBhbGwgb2YgdGhlIHN0cmluZ3MgdGhhdCBjYW4gYmUgbWFkZSBieSBtYWtpbmcgYSBzaW5nbGUgZWRpdCB0byB0aGUgd29yZCAob3Igd29yZHMgaW4pIGB3b3Jkc2Bcblx0XHQgKiBUaGUgdmFsdWUgb2YgZWFjaCBlbnRyeSBpcyB0aGUgbnVtYmVyIG9mIHVuaXF1ZSB3YXlzIHRoYXQgdGhlIHJlc3VsdGluZyB3b3JkIGNhbiBiZSBtYWRlLlxuXHRcdCAqXG5cdFx0ICogQGFyZyBtaXhlZCB3b3JkcyBFaXRoZXIgYSBoYXNoIGtleWVkIGJ5IHdvcmRzIG9yIGEgc3RyaW5nIHdvcmQgdG8gb3BlcmF0ZSBvbi5cblx0XHQgKiBAYXJnIGJvb2wga25vd25fb25seSBXaGV0aGVyIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGlnbm9yZSBzdHJpbmdzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGljdGlvbmFyeS5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBlZGl0czEod29yZHMsIGtub3duX29ubHkpIHtcblx0XHRcdHZhciBydiA9IHt9O1xuXHRcdFx0XG5cdFx0XHR2YXIgaSwgaiwgX2lpbGVuLCBfbGVuLCBfamxlbiwgX2VkaXQ7XG5cdFx0XHRcblx0XHRcdGlmICh0eXBlb2Ygd29yZHMgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dmFyIHdvcmQgPSB3b3Jkcztcblx0XHRcdFx0d29yZHMgPSB7fTtcblx0XHRcdFx0d29yZHNbd29yZF0gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKHZhciB3b3JkIGluIHdvcmRzKSB7XG5cdFx0XHRcdGZvciAoaSA9IDAsIF9sZW4gPSB3b3JkLmxlbmd0aCArIDE7IGkgPCBfbGVuOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgcyA9IFsgd29yZC5zdWJzdHJpbmcoMCwgaSksIHdvcmQuc3Vic3RyaW5nKGkpIF07XG5cdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChzWzFdKSB7XG5cdFx0XHRcdFx0XHRfZWRpdCA9IHNbMF0gKyBzWzFdLnN1YnN0cmluZygxKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFrbm93bl9vbmx5IHx8IHNlbGYuY2hlY2soX2VkaXQpKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghKF9lZGl0IGluIHJ2KSkge1xuXHRcdFx0XHRcdFx0XHRcdHJ2W19lZGl0XSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cnZbX2VkaXRdICs9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Ly8gRWxpbWluYXRlIHRyYW5zcG9zaXRpb25zIG9mIGlkZW50aWNhbCBsZXR0ZXJzXG5cdFx0XHRcdFx0aWYgKHNbMV0ubGVuZ3RoID4gMSAmJiBzWzFdWzFdICE9PSBzWzFdWzBdKSB7XG5cdFx0XHRcdFx0XHRfZWRpdCA9IHNbMF0gKyBzWzFdWzFdICsgc1sxXVswXSArIHNbMV0uc3Vic3RyaW5nKDIpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWtub3duX29ubHkgfHwgc2VsZi5jaGVjayhfZWRpdCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCEoX2VkaXQgaW4gcnYpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cnZbX2VkaXRdID0gMTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRydltfZWRpdF0gKz0gMTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzWzFdKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGogPSAwLCBfamxlbiA9IHNlbGYuYWxwaGFiZXQubGVuZ3RoOyBqIDwgX2psZW47IGorKykge1xuXHRcdFx0XHRcdFx0XHQvLyBFbGltaW5hdGUgcmVwbGFjZW1lbnQgb2YgYSBsZXR0ZXIgYnkgaXRzZWxmXG5cdFx0XHRcdFx0XHRcdGlmIChzZWxmLmFscGhhYmV0W2pdICE9IHNbMV0uc3Vic3RyaW5nKDAsMSkpe1xuXHRcdFx0XHRcdFx0XHRcdF9lZGl0ID0gc1swXSArIHNlbGYuYWxwaGFiZXRbal0gKyBzWzFdLnN1YnN0cmluZygxKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmICgha25vd25fb25seSB8fCBzZWxmLmNoZWNrKF9lZGl0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEoX2VkaXQgaW4gcnYpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJ2W19lZGl0XSA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cnZbX2VkaXRdICs9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHNbMV0pIHtcblx0XHRcdFx0XHRcdGZvciAoaiA9IDAsIF9qbGVuID0gc2VsZi5hbHBoYWJldC5sZW5ndGg7IGogPCBfamxlbjsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdF9lZGl0ID0gc1swXSArIHNlbGYuYWxwaGFiZXRbal0gKyBzWzFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICgha25vd25fb25seSB8fCBzZWxmLmNoZWNrKF9lZGl0KSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghKF9lZGl0IGluIHJ2KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cnZbX2VkaXRdID0gMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRydltfZWRpdF0gKz0gMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0cmV0dXJuIHJ2O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvcnJlY3Qod29yZCkge1xuXHRcdFx0Ly8gR2V0IHRoZSBlZGl0LWRpc3RhbmNlLTEgYW5kIGVkaXQtZGlzdGFuY2UtMiBmb3JtcyBvZiB0aGlzIHdvcmQuXG5cdFx0XHR2YXIgZWQxID0gZWRpdHMxKHdvcmQpO1xuXHRcdFx0dmFyIGVkMiA9IGVkaXRzMShlZDEsIHRydWUpO1xuXHRcdFx0XG5cdFx0XHQvLyBTb3J0IHRoZSBlZGl0cyBiYXNlZCBvbiBob3cgbWFueSBkaWZmZXJlbnQgd2F5cyB0aGV5IHdlcmUgY3JlYXRlZC5cblx0XHRcdHZhciB3ZWlnaHRlZF9jb3JyZWN0aW9ucyA9IGVkMjtcblx0XHRcdFxuXHRcdFx0Zm9yICh2YXIgZWQxd29yZCBpbiBlZDEpIHtcblx0XHRcdFx0aWYgKCFzZWxmLmNoZWNrKGVkMXdvcmQpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZWQxd29yZCBpbiB3ZWlnaHRlZF9jb3JyZWN0aW9ucykge1xuXHRcdFx0XHRcdHdlaWdodGVkX2NvcnJlY3Rpb25zW2VkMXdvcmRdICs9IGVkMVtlZDF3b3JkXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR3ZWlnaHRlZF9jb3JyZWN0aW9uc1tlZDF3b3JkXSA9IGVkMVtlZDF3b3JkXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHR2YXIgaSwgX2xlbjtcblxuXHRcdFx0dmFyIHNvcnRlZF9jb3JyZWN0aW9ucyA9IFtdO1xuXHRcdFx0XG5cdFx0XHRmb3IgKGkgaW4gd2VpZ2h0ZWRfY29ycmVjdGlvbnMpIHtcblx0XHRcdFx0aWYgKHdlaWdodGVkX2NvcnJlY3Rpb25zLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0c29ydGVkX2NvcnJlY3Rpb25zLnB1c2goWyBpLCB3ZWlnaHRlZF9jb3JyZWN0aW9uc1tpXSBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBzb3J0ZXIoYSwgYikge1xuXHRcdFx0XHR2YXIgYV92YWwgPSBhWzFdO1xuXHRcdFx0XHR2YXIgYl92YWwgPSBiWzFdO1xuXHRcdFx0XHRpZiAoYV92YWwgPCBiX3ZhbCkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmIChhX3ZhbCA+IGJfdmFsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQHRvZG8gSWYgYSBhbmQgYiBhcmUgZXF1YWxseSB3ZWlnaHRlZCwgYWRkIG91ciBvd24gd2VpZ2h0IGJhc2VkIG9uIHNvbWV0aGluZyBsaWtlIHRoZSBrZXkgbG9jYXRpb25zIG9uIHRoaXMgbGFuZ3VhZ2UncyBkZWZhdWx0IGtleWJvYXJkLlxuXHRcdFx0XHRyZXR1cm4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRzb3J0ZWRfY29ycmVjdGlvbnMuc29ydChzb3J0ZXIpLnJldmVyc2UoKTtcblxuXHRcdFx0dmFyIHJ2ID0gW107XG5cblx0XHRcdHZhciBjYXBpdGFsaXphdGlvbl9zY2hlbWUgPSBcImxvd2VyY2FzZVwiO1xuXHRcdFx0XG5cdFx0XHRpZiAod29yZC50b1VwcGVyQ2FzZSgpID09PSB3b3JkKSB7XG5cdFx0XHRcdGNhcGl0YWxpemF0aW9uX3NjaGVtZSA9IFwidXBwZXJjYXNlXCI7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh3b3JkLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSA9PT0gd29yZCkge1xuXHRcdFx0XHRjYXBpdGFsaXphdGlvbl9zY2hlbWUgPSBcImNhcGl0YWxpemVkXCI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHZhciB3b3JraW5nX2xpbWl0ID0gbGltaXQ7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBNYXRoLm1pbih3b3JraW5nX2xpbWl0LCBzb3J0ZWRfY29ycmVjdGlvbnMubGVuZ3RoKTsgaSsrKSB7XG5cdFx0XHRcdGlmIChcInVwcGVyY2FzZVwiID09PSBjYXBpdGFsaXphdGlvbl9zY2hlbWUpIHtcblx0XHRcdFx0XHRzb3J0ZWRfY29ycmVjdGlvbnNbaV1bMF0gPSBzb3J0ZWRfY29ycmVjdGlvbnNbaV1bMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChcImNhcGl0YWxpemVkXCIgPT09IGNhcGl0YWxpemF0aW9uX3NjaGVtZSkge1xuXHRcdFx0XHRcdHNvcnRlZF9jb3JyZWN0aW9uc1tpXVswXSA9IHNvcnRlZF9jb3JyZWN0aW9uc1tpXVswXS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSArIHNvcnRlZF9jb3JyZWN0aW9uc1tpXVswXS5zdWJzdHIoMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmICghc2VsZi5oYXNGbGFnKHNvcnRlZF9jb3JyZWN0aW9uc1tpXVswXSwgXCJOT1NVR0dFU1RcIikgJiYgcnYuaW5kZXhPZihzb3J0ZWRfY29ycmVjdGlvbnNbaV1bMF0pID09IC0xKSB7XG5cdFx0XHRcdFx0cnYucHVzaChzb3J0ZWRfY29ycmVjdGlvbnNbaV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdC8vIElmIG9uZSBvZiB0aGUgY29ycmVjdGlvbnMgaXMgbm90IGVsaWdpYmxlIGFzIGEgc3VnZ2VzdGlvbiAsIG1ha2Ugc3VyZSB3ZSBzdGlsbCByZXR1cm4gdGhlIHJpZ2h0IG51bWJlciBvZiBzdWdnZXN0aW9ucy5cblx0XHRcdFx0XHR3b3JraW5nX2xpbWl0Kys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJ2O1xuXHRcdH1cblx0XHRcblx0XHR0aGlzLm1lbW9pemVkW3dvcmRdID0ge1xuXHRcdFx0J3N1Z2dlc3Rpb25zJzogY29ycmVjdCh3b3JkKSxcblx0XHRcdCdsaW1pdCc6IGxpbWl0XG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLm1lbW9pemVkW3dvcmRdWydzdWdnZXN0aW9ucyddO1xuXHR9XG59O1xufSkoKTtcblxuLy8gU3VwcG9ydCBmb3IgdXNlIGFzIGEgbm9kZS5qcyBtb2R1bGUuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBUeXBvO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFBQTtBQUtBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBQ0E7QUFEQTtBQUlBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBM0JBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFySkE7QUFDQTtBQXVKQTtBQUNBOzs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBOzs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQURBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBM0JBO0FBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUEzRUE7QUFDQTtBQTZFQTs7Ozs7O0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQWxEQTtBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekxBO0FBQ0E7QUEyTEE7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFwTkE7QUFDQTtBQXNOQTs7Ozs7OztBQVFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQUNBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdFRBO0FBQ0E7QUF5VEE7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQXhVQTtBQTJVQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQTdWQTtBQUNBO0FBK1ZBOzs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxaQTtBQUNBO0FBb1pBOzs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExY0E7QUFDQTtBQTRjQTs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFXQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBmQTtBQUNBO0FBc2ZBOzs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5Z0JBO0FBQ0E7QUFnaEJBOzs7Ozs7Ozs7O0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBTkE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBandCQTtBQXpMQTtBQUNBO0FBQ0E7QUE2N0JBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/typo-js/typo.js\n"); - -/***/ }), - -/***/ "../node_modules/unherit/index.js": -/*!****************************************!*\ - !*** ../node_modules/unherit/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nvar inherits = __webpack_require__(/*! inherits */ \"../node_modules/inherits/inherits_browser.js\");\n\nmodule.exports = unherit; // Create a custom constructor which can be modified without affecting the\n// original class.\n\nfunction unherit(Super) {\n var result;\n var key;\n var value;\n inherits(Of, Super);\n inherits(From, Of); // Clone values.\n\n result = Of.prototype;\n\n for (key in result) {\n value = result[key];\n\n if (value && _typeof(value) === 'object') {\n result[key] = 'concat' in value ? value.concat() : xtend(value);\n }\n }\n\n return Of; // Constructor accepting a single argument, which itself is an `arguments`\n // object.\n\n function From(parameters) {\n return Super.apply(this, parameters);\n } // Constructor accepting variadic arguments.\n\n\n function Of() {\n if (!(this instanceof Of)) {\n return new From(arguments);\n }\n\n return Super.apply(this, arguments);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaGVyaXQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaGVyaXQvaW5kZXguanM/ODJjYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIHh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaGVyaXRcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGNvbnN0cnVjdG9yIHdoaWNoIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGFmZmVjdGluZyB0aGVcbi8vIG9yaWdpbmFsIGNsYXNzLlxuZnVuY3Rpb24gdW5oZXJpdChTdXBlcikge1xuICB2YXIgcmVzdWx0XG4gIHZhciBrZXlcbiAgdmFyIHZhbHVlXG5cbiAgaW5oZXJpdHMoT2YsIFN1cGVyKVxuICBpbmhlcml0cyhGcm9tLCBPZilcblxuICAvLyBDbG9uZSB2YWx1ZXMuXG4gIHJlc3VsdCA9IE9mLnByb3RvdHlwZVxuXG4gIGZvciAoa2V5IGluIHJlc3VsdCkge1xuICAgIHZhbHVlID0gcmVzdWx0W2tleV1cblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9ICdjb25jYXQnIGluIHZhbHVlID8gdmFsdWUuY29uY2F0KCkgOiB4dGVuZCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2ZcblxuICAvLyBDb25zdHJ1Y3RvciBhY2NlcHRpbmcgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGl0c2VsZiBpcyBhbiBgYXJndW1lbnRzYFxuICAvLyBvYmplY3QuXG4gIGZ1bmN0aW9uIEZyb20ocGFyYW1ldGVycykge1xuICAgIHJldHVybiBTdXBlci5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKVxuICB9XG5cbiAgLy8gQ29uc3RydWN0b3IgYWNjZXB0aW5nIHZhcmlhZGljIGFyZ3VtZW50cy5cbiAgZnVuY3Rpb24gT2YoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9mKSkge1xuICAgICAgcmV0dXJuIG5ldyBGcm9tKGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICByZXR1cm4gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQXhCQTtBQUNBO0FBQ0E7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unherit/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unified/index.js": -/*!****************************************!*\ - !*** ../node_modules/unified/index.js ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n/* Dependencies. */\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar extend = __webpack_require__(/*! extend */ \"../node_modules/extend/index.js\");\n\nvar bail = __webpack_require__(/*! bail */ \"../node_modules/bail/index.js\");\n\nvar vfile = __webpack_require__(/*! vfile */ \"../node_modules/vfile/index.js\");\n\nvar trough = __webpack_require__(/*! trough */ \"../node_modules/trough/index.js\");\n\nvar string = __webpack_require__(/*! x-is-string */ \"../node_modules/x-is-string/index.js\");\n\nvar plain = __webpack_require__(/*! is-plain-obj */ \"../node_modules/is-plain-obj/index.js\");\n/* Expose a frozen processor. */\n\n\nmodule.exports = unified().freeze();\nvar slice = [].slice;\nvar own = {}.hasOwnProperty;\n/* Process pipeline. */\n\nvar pipeline = trough().use(pipelineParse).use(pipelineRun).use(pipelineStringify);\n\nfunction pipelineParse(p, ctx) {\n ctx.tree = p.parse(ctx.file);\n}\n\nfunction pipelineRun(p, ctx, next) {\n p.run(ctx.tree, ctx.file, done);\n\n function done(err, tree, file) {\n if (err) {\n next(err);\n } else {\n ctx.tree = tree;\n ctx.file = file;\n next();\n }\n }\n}\n\nfunction pipelineStringify(p, ctx) {\n ctx.file.contents = p.stringify(ctx.tree, ctx.file);\n}\n/* Function to create the first processor. */\n\n\nfunction unified() {\n var attachers = [];\n var transformers = trough();\n var namespace = {};\n var frozen = false;\n var freezeIndex = -1;\n /* Data management. */\n\n processor.data = data;\n /* Lock. */\n\n processor.freeze = freeze;\n /* Plug-ins. */\n\n processor.attachers = attachers;\n processor.use = use;\n /* API. */\n\n processor.parse = parse;\n processor.stringify = stringify;\n processor.run = run;\n processor.runSync = runSync;\n processor.process = process;\n processor.processSync = processSync;\n /* Expose. */\n\n return processor;\n /* Create a new processor based on the processor\n * in the current scope. */\n\n function processor() {\n var destination = unified();\n var length = attachers.length;\n var index = -1;\n\n while (++index < length) {\n destination.use.apply(null, attachers[index]);\n }\n\n destination.data(extend(true, {}, namespace));\n return destination;\n }\n /* Freeze: used to signal a processor that has finished\n * configuration.\n *\n * For example, take unified itself. It’s frozen.\n * Plug-ins should not be added to it. Rather, it should\n * be extended, by invoking it, before modifying it.\n *\n * In essence, always invoke this when exporting a\n * processor. */\n\n\n function freeze() {\n var values;\n var plugin;\n var options;\n var transformer;\n\n if (frozen) {\n return processor;\n }\n\n while (++freezeIndex < attachers.length) {\n values = attachers[freezeIndex];\n plugin = values[0];\n options = values[1];\n transformer = null;\n\n if (options === false) {\n continue;\n }\n\n if (options === true) {\n values[1] = undefined;\n }\n\n transformer = plugin.apply(processor, values.slice(1));\n\n if (typeof transformer === 'function') {\n transformers.use(transformer);\n }\n }\n\n frozen = true;\n freezeIndex = Infinity;\n return processor;\n }\n /* Data management.\n * Getter / setter for processor-specific informtion. */\n\n\n function data(key, value) {\n if (string(key)) {\n /* Set `key`. */\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen);\n namespace[key] = value;\n return processor;\n }\n /* Get `key`. */\n\n\n return own.call(namespace, key) && namespace[key] || null;\n }\n /* Set space. */\n\n\n if (key) {\n assertUnfrozen('data', frozen);\n namespace = key;\n return processor;\n }\n /* Get space. */\n\n\n return namespace;\n }\n /* Plug-in management.\n *\n * Pass it:\n * * an attacher and options,\n * * a preset,\n * * a list of presets, attachers, and arguments (list\n * of attachers and options). */\n\n\n function use(value) {\n var settings;\n assertUnfrozen('use', frozen);\n\n if (value === null || value === undefined) {\n /* Empty */\n } else if (typeof value === 'function') {\n addPlugin.apply(null, arguments);\n } else if (_typeof(value) === 'object') {\n if ('length' in value) {\n addList(value);\n } else {\n addPreset(value);\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`');\n }\n\n if (settings) {\n namespace.settings = extend(namespace.settings || {}, settings);\n }\n\n return processor;\n\n function addPreset(result) {\n addList(result.plugins);\n\n if (result.settings) {\n settings = extend(settings || {}, result.settings);\n }\n }\n\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value);\n } else if (_typeof(value) === 'object') {\n if ('length' in value) {\n addPlugin.apply(null, value);\n } else {\n addPreset(value);\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`');\n }\n }\n\n function addList(plugins) {\n var length;\n var index;\n\n if (plugins === null || plugins === undefined) {\n /* Empty */\n } else if (_typeof(plugins) === 'object' && 'length' in plugins) {\n length = plugins.length;\n index = -1;\n\n while (++index < length) {\n add(plugins[index]);\n }\n } else {\n throw new Error('Expected a list of plugins, not `' + plugins + '`');\n }\n }\n\n function addPlugin(plugin, value) {\n var entry = find(plugin);\n\n if (entry) {\n if (plain(entry[1]) && plain(value)) {\n value = extend(entry[1], value);\n }\n\n entry[1] = value;\n } else {\n attachers.push(slice.call(arguments));\n }\n }\n }\n\n function find(plugin) {\n var length = attachers.length;\n var index = -1;\n var entry;\n\n while (++index < length) {\n entry = attachers[index];\n\n if (entry[0] === plugin) {\n return entry;\n }\n }\n }\n /* Parse a file (in string or VFile representation)\n * into a Unist node using the `Parser` on the\n * processor. */\n\n\n function parse(doc) {\n var file = vfile(doc);\n var Parser;\n freeze();\n Parser = processor.Parser;\n assertParser('parse', Parser);\n\n if (newable(Parser)) {\n return new Parser(String(file), file).parse();\n }\n\n return Parser(String(file), file); // eslint-disable-line new-cap\n }\n /* Run transforms on a Unist node representation of a file\n * (in string or VFile representation), async. */\n\n\n function run(node, file, cb) {\n assertNode(node);\n freeze();\n\n if (!cb && typeof file === 'function') {\n cb = file;\n file = null;\n }\n\n if (!cb) {\n return new Promise(executor);\n }\n\n executor(null, cb);\n\n function executor(resolve, reject) {\n transformers.run(node, vfile(file), done);\n\n function done(err, tree, file) {\n tree = tree || node;\n\n if (err) {\n reject(err);\n } else if (resolve) {\n resolve(tree);\n } else {\n cb(null, tree, file);\n }\n }\n }\n }\n /* Run transforms on a Unist node representation of a file\n * (in string or VFile representation), sync. */\n\n\n function runSync(node, file) {\n var complete = false;\n var result;\n run(node, file, done);\n assertDone('runSync', 'run', complete);\n return result;\n\n function done(err, tree) {\n complete = true;\n bail(err);\n result = tree;\n }\n }\n /* Stringify a Unist node representation of a file\n * (in string or VFile representation) into a string\n * using the `Compiler` on the processor. */\n\n\n function stringify(node, doc) {\n var file = vfile(doc);\n var Compiler;\n freeze();\n Compiler = processor.Compiler;\n assertCompiler('stringify', Compiler);\n assertNode(node);\n\n if (newable(Compiler)) {\n return new Compiler(node, file).compile();\n }\n\n return Compiler(node, file); // eslint-disable-line new-cap\n }\n /* Parse a file (in string or VFile representation)\n * into a Unist node using the `Parser` on the processor,\n * then run transforms on that node, and compile the\n * resulting node using the `Compiler` on the processor,\n * and store that result on the VFile. */\n\n\n function process(doc, cb) {\n freeze();\n assertParser('process', processor.Parser);\n assertCompiler('process', processor.Compiler);\n\n if (!cb) {\n return new Promise(executor);\n }\n\n executor(null, cb);\n\n function executor(resolve, reject) {\n var file = vfile(doc);\n pipeline.run(processor, {\n file: file\n }, done);\n\n function done(err) {\n if (err) {\n reject(err);\n } else if (resolve) {\n resolve(file);\n } else {\n cb(null, file);\n }\n }\n }\n }\n /* Process the given document (in string or VFile\n * representation), sync. */\n\n\n function processSync(doc) {\n var complete = false;\n var file;\n freeze();\n assertParser('processSync', processor.Parser);\n assertCompiler('processSync', processor.Compiler);\n file = vfile(doc);\n process(file, done);\n assertDone('processSync', 'process', complete);\n return file;\n\n function done(err) {\n complete = true;\n bail(err);\n }\n }\n}\n/* Check if `func` is a constructor. */\n\n\nfunction newable(value) {\n return typeof value === 'function' && keys(value.prototype);\n}\n/* Check if `value` is an object with keys. */\n\n\nfunction keys(value) {\n var key;\n\n for (key in value) {\n return true;\n }\n\n return false;\n}\n/* Assert a parser is available. */\n\n\nfunction assertParser(name, Parser) {\n if (typeof Parser !== 'function') {\n throw new Error('Cannot `' + name + '` without `Parser`');\n }\n}\n/* Assert a compiler is available. */\n\n\nfunction assertCompiler(name, Compiler) {\n if (typeof Compiler !== 'function') {\n throw new Error('Cannot `' + name + '` without `Compiler`');\n }\n}\n/* Assert the processor is not frozen. */\n\n\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(['Cannot invoke `' + name + '` on a frozen processor.\\nCreate a new ', 'processor first, by invoking it: use `processor()` instead of ', '`processor`.'].join(''));\n }\n}\n/* Assert `node` is a Unist node. */\n\n\nfunction assertNode(node) {\n if (!node || !string(node.type)) {\n throw new Error('Expected node, got `' + node + '`');\n }\n}\n/* Assert that `complete` is `true`. */\n\n\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error('`' + name + '` finished async. Use `' + asyncName + '` instead');\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanM/YzNhMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuLyogRGVwZW5kZW5jaWVzLiAqL1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2V4dGVuZCcpXG52YXIgYmFpbCA9IHJlcXVpcmUoJ2JhaWwnKVxudmFyIHZmaWxlID0gcmVxdWlyZSgndmZpbGUnKVxudmFyIHRyb3VnaCA9IHJlcXVpcmUoJ3Ryb3VnaCcpXG52YXIgc3RyaW5nID0gcmVxdWlyZSgneC1pcy1zdHJpbmcnKVxudmFyIHBsYWluID0gcmVxdWlyZSgnaXMtcGxhaW4tb2JqJylcblxuLyogRXhwb3NlIGEgZnJvemVuIHByb2Nlc3Nvci4gKi9cbm1vZHVsZS5leHBvcnRzID0gdW5pZmllZCgpLmZyZWV6ZSgpXG5cbnZhciBzbGljZSA9IFtdLnNsaWNlXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHlcblxuLyogUHJvY2VzcyBwaXBlbGluZS4gKi9cbnZhciBwaXBlbGluZSA9IHRyb3VnaCgpXG4gIC51c2UocGlwZWxpbmVQYXJzZSlcbiAgLnVzZShwaXBlbGluZVJ1bilcbiAgLnVzZShwaXBlbGluZVN0cmluZ2lmeSlcblxuZnVuY3Rpb24gcGlwZWxpbmVQYXJzZShwLCBjdHgpIHtcbiAgY3R4LnRyZWUgPSBwLnBhcnNlKGN0eC5maWxlKVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZVJ1bihwLCBjdHgsIG5leHQpIHtcbiAgcC5ydW4oY3R4LnRyZWUsIGN0eC5maWxlLCBkb25lKVxuXG4gIGZ1bmN0aW9uIGRvbmUoZXJyLCB0cmVlLCBmaWxlKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgbmV4dChlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC50cmVlID0gdHJlZVxuICAgICAgY3R4LmZpbGUgPSBmaWxlXG4gICAgICBuZXh0KClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmVTdHJpbmdpZnkocCwgY3R4KSB7XG4gIGN0eC5maWxlLmNvbnRlbnRzID0gcC5zdHJpbmdpZnkoY3R4LnRyZWUsIGN0eC5maWxlKVxufVxuXG4vKiBGdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpcnN0IHByb2Nlc3Nvci4gKi9cbmZ1bmN0aW9uIHVuaWZpZWQoKSB7XG4gIHZhciBhdHRhY2hlcnMgPSBbXVxuICB2YXIgdHJhbnNmb3JtZXJzID0gdHJvdWdoKClcbiAgdmFyIG5hbWVzcGFjZSA9IHt9XG4gIHZhciBmcm96ZW4gPSBmYWxzZVxuICB2YXIgZnJlZXplSW5kZXggPSAtMVxuXG4gIC8qIERhdGEgbWFuYWdlbWVudC4gKi9cbiAgcHJvY2Vzc29yLmRhdGEgPSBkYXRhXG5cbiAgLyogTG9jay4gKi9cbiAgcHJvY2Vzc29yLmZyZWV6ZSA9IGZyZWV6ZVxuXG4gIC8qIFBsdWctaW5zLiAqL1xuICBwcm9jZXNzb3IuYXR0YWNoZXJzID0gYXR0YWNoZXJzXG4gIHByb2Nlc3Nvci51c2UgPSB1c2VcblxuICAvKiBBUEkuICovXG4gIHByb2Nlc3Nvci5wYXJzZSA9IHBhcnNlXG4gIHByb2Nlc3Nvci5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcbiAgcHJvY2Vzc29yLnJ1biA9IHJ1blxuICBwcm9jZXNzb3IucnVuU3luYyA9IHJ1blN5bmNcbiAgcHJvY2Vzc29yLnByb2Nlc3MgPSBwcm9jZXNzXG4gIHByb2Nlc3Nvci5wcm9jZXNzU3luYyA9IHByb2Nlc3NTeW5jXG5cbiAgLyogRXhwb3NlLiAqL1xuICByZXR1cm4gcHJvY2Vzc29yXG5cbiAgLyogQ3JlYXRlIGEgbmV3IHByb2Nlc3NvciBiYXNlZCBvbiB0aGUgcHJvY2Vzc29yXG4gICAqIGluIHRoZSBjdXJyZW50IHNjb3BlLiAqL1xuICBmdW5jdGlvbiBwcm9jZXNzb3IoKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gdW5pZmllZCgpXG4gICAgdmFyIGxlbmd0aCA9IGF0dGFjaGVycy5sZW5ndGhcbiAgICB2YXIgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGRlc3RpbmF0aW9uLnVzZS5hcHBseShudWxsLCBhdHRhY2hlcnNbaW5kZXhdKVxuICAgIH1cblxuICAgIGRlc3RpbmF0aW9uLmRhdGEoZXh0ZW5kKHRydWUsIHt9LCBuYW1lc3BhY2UpKVxuXG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uXG4gIH1cblxuICAvKiBGcmVlemU6IHVzZWQgdG8gc2lnbmFsIGEgcHJvY2Vzc29yIHRoYXQgaGFzIGZpbmlzaGVkXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0YWtlIHVuaWZpZWQgaXRzZWxmLiAgSXTigJlzIGZyb3plbi5cbiAgICogUGx1Zy1pbnMgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBpdC4gIFJhdGhlciwgaXQgc2hvdWxkXG4gICAqIGJlIGV4dGVuZGVkLCBieSBpbnZva2luZyBpdCwgYmVmb3JlIG1vZGlmeWluZyBpdC5cbiAgICpcbiAgICogSW4gZXNzZW5jZSwgYWx3YXlzIGludm9rZSB0aGlzIHdoZW4gZXhwb3J0aW5nIGFcbiAgICogcHJvY2Vzc29yLiAqL1xuICBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgdmFyIHZhbHVlc1xuICAgIHZhciBwbHVnaW5cbiAgICB2YXIgb3B0aW9uc1xuICAgIHZhciB0cmFuc2Zvcm1lclxuXG4gICAgaWYgKGZyb3plbikge1xuICAgICAgcmV0dXJuIHByb2Nlc3NvclxuICAgIH1cblxuICAgIHdoaWxlICgrK2ZyZWV6ZUluZGV4IDwgYXR0YWNoZXJzLmxlbmd0aCkge1xuICAgICAgdmFsdWVzID0gYXR0YWNoZXJzW2ZyZWV6ZUluZGV4XVxuICAgICAgcGx1Z2luID0gdmFsdWVzWzBdXG4gICAgICBvcHRpb25zID0gdmFsdWVzWzFdXG4gICAgICB0cmFuc2Zvcm1lciA9IG51bGxcblxuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlc1sxXSA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lciA9IHBsdWdpbi5hcHBseShwcm9jZXNzb3IsIHZhbHVlcy5zbGljZSgxKSlcblxuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cmFuc2Zvcm1lcnMudXNlKHRyYW5zZm9ybWVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZyb3plbiA9IHRydWVcbiAgICBmcmVlemVJbmRleCA9IEluZmluaXR5XG5cbiAgICByZXR1cm4gcHJvY2Vzc29yXG4gIH1cblxuICAvKiBEYXRhIG1hbmFnZW1lbnQuXG4gICAqIEdldHRlciAvIHNldHRlciBmb3IgcHJvY2Vzc29yLXNwZWNpZmljIGluZm9ybXRpb24uICovXG4gIGZ1bmN0aW9uIGRhdGEoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChzdHJpbmcoa2V5KSkge1xuICAgICAgLyogU2V0IGBrZXlgLiAqL1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgYXNzZXJ0VW5mcm96ZW4oJ2RhdGEnLCBmcm96ZW4pXG5cbiAgICAgICAgbmFtZXNwYWNlW2tleV0gPSB2YWx1ZVxuXG4gICAgICAgIHJldHVybiBwcm9jZXNzb3JcbiAgICAgIH1cblxuICAgICAgLyogR2V0IGBrZXlgLiAqL1xuICAgICAgcmV0dXJuIChvd24uY2FsbChuYW1lc3BhY2UsIGtleSkgJiYgbmFtZXNwYWNlW2tleV0pIHx8IG51bGxcbiAgICB9XG5cbiAgICAvKiBTZXQgc3BhY2UuICovXG4gICAgaWYgKGtleSkge1xuICAgICAgYXNzZXJ0VW5mcm96ZW4oJ2RhdGEnLCBmcm96ZW4pXG4gICAgICBuYW1lc3BhY2UgPSBrZXlcbiAgICAgIHJldHVybiBwcm9jZXNzb3JcbiAgICB9XG5cbiAgICAvKiBHZXQgc3BhY2UuICovXG4gICAgcmV0dXJuIG5hbWVzcGFjZVxuICB9XG5cbiAgLyogUGx1Zy1pbiBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBQYXNzIGl0OlxuICAgKiAqICAgYW4gYXR0YWNoZXIgYW5kIG9wdGlvbnMsXG4gICAqICogICBhIHByZXNldCxcbiAgICogKiAgIGEgbGlzdCBvZiBwcmVzZXRzLCBhdHRhY2hlcnMsIGFuZCBhcmd1bWVudHMgKGxpc3RcbiAgICogICAgIG9mIGF0dGFjaGVycyBhbmQgb3B0aW9ucykuICovXG4gIGZ1bmN0aW9uIHVzZSh2YWx1ZSkge1xuICAgIHZhciBzZXR0aW5nc1xuXG4gICAgYXNzZXJ0VW5mcm96ZW4oJ3VzZScsIGZyb3plbilcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBFbXB0eSAqL1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhZGRQbHVnaW4uYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKCdsZW5ndGgnIGluIHZhbHVlKSB7XG4gICAgICAgIGFkZExpc3QodmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRQcmVzZXQodmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYCcgKyB2YWx1ZSArICdgJylcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgIG5hbWVzcGFjZS5zZXR0aW5ncyA9IGV4dGVuZChuYW1lc3BhY2Uuc2V0dGluZ3MgfHwge30sIHNldHRpbmdzKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzb3JcblxuICAgIGZ1bmN0aW9uIGFkZFByZXNldChyZXN1bHQpIHtcbiAgICAgIGFkZExpc3QocmVzdWx0LnBsdWdpbnMpXG5cbiAgICAgIGlmIChyZXN1bHQuc2V0dGluZ3MpIHtcbiAgICAgICAgc2V0dGluZ3MgPSBleHRlbmQoc2V0dGluZ3MgfHwge30sIHJlc3VsdC5zZXR0aW5ncylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWRkUGx1Z2luKHZhbHVlKVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmICgnbGVuZ3RoJyBpbiB2YWx1ZSkge1xuICAgICAgICAgIGFkZFBsdWdpbi5hcHBseShudWxsLCB2YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRQcmVzZXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYCcgKyB2YWx1ZSArICdgJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRMaXN0KHBsdWdpbnMpIHtcbiAgICAgIHZhciBsZW5ndGhcbiAgICAgIHZhciBpbmRleFxuXG4gICAgICBpZiAocGx1Z2lucyA9PT0gbnVsbCB8fCBwbHVnaW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLyogRW1wdHkgKi9cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHBsdWdpbnMpIHtcbiAgICAgICAgbGVuZ3RoID0gcGx1Z2lucy5sZW5ndGhcbiAgICAgICAgaW5kZXggPSAtMVxuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYWRkKHBsdWdpbnNbaW5kZXhdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgbGlzdCBvZiBwbHVnaW5zLCBub3QgYCcgKyBwbHVnaW5zICsgJ2AnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFBsdWdpbihwbHVnaW4sIHZhbHVlKSB7XG4gICAgICB2YXIgZW50cnkgPSBmaW5kKHBsdWdpbilcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGlmIChwbGFpbihlbnRyeVsxXSkgJiYgcGxhaW4odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBleHRlbmQoZW50cnlbMV0sIHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgZW50cnlbMV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0YWNoZXJzLnB1c2goc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQocGx1Z2luKSB7XG4gICAgdmFyIGxlbmd0aCA9IGF0dGFjaGVycy5sZW5ndGhcbiAgICB2YXIgaW5kZXggPSAtMVxuICAgIHZhciBlbnRyeVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gYXR0YWNoZXJzW2luZGV4XVxuXG4gICAgICBpZiAoZW50cnlbMF0gPT09IHBsdWdpbikge1xuICAgICAgICByZXR1cm4gZW50cnlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiBQYXJzZSBhIGZpbGUgKGluIHN0cmluZyBvciBWRmlsZSByZXByZXNlbnRhdGlvbilcbiAgICogaW50byBhIFVuaXN0IG5vZGUgdXNpbmcgdGhlIGBQYXJzZXJgIG9uIHRoZVxuICAgKiBwcm9jZXNzb3IuICovXG4gIGZ1bmN0aW9uIHBhcnNlKGRvYykge1xuICAgIHZhciBmaWxlID0gdmZpbGUoZG9jKVxuICAgIHZhciBQYXJzZXJcblxuICAgIGZyZWV6ZSgpXG4gICAgUGFyc2VyID0gcHJvY2Vzc29yLlBhcnNlclxuICAgIGFzc2VydFBhcnNlcigncGFyc2UnLCBQYXJzZXIpXG5cbiAgICBpZiAobmV3YWJsZShQYXJzZXIpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlcihTdHJpbmcoZmlsZSksIGZpbGUpLnBhcnNlKClcbiAgICB9XG5cbiAgICByZXR1cm4gUGFyc2VyKFN0cmluZyhmaWxlKSwgZmlsZSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG4gIH1cblxuICAvKiBSdW4gdHJhbnNmb3JtcyBvbiBhIFVuaXN0IG5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlXG4gICAqIChpbiBzdHJpbmcgb3IgVkZpbGUgcmVwcmVzZW50YXRpb24pLCBhc3luYy4gKi9cbiAgZnVuY3Rpb24gcnVuKG5vZGUsIGZpbGUsIGNiKSB7XG4gICAgYXNzZXJ0Tm9kZShub2RlKVxuICAgIGZyZWV6ZSgpXG5cbiAgICBpZiAoIWNiICYmIHR5cGVvZiBmaWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZpbGVcbiAgICAgIGZpbGUgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCFjYikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGV4ZWN1dG9yKVxuICAgIH1cblxuICAgIGV4ZWN1dG9yKG51bGwsIGNiKVxuXG4gICAgZnVuY3Rpb24gZXhlY3V0b3IocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0cmFuc2Zvcm1lcnMucnVuKG5vZGUsIHZmaWxlKGZpbGUpLCBkb25lKVxuXG4gICAgICBmdW5jdGlvbiBkb25lKGVyciwgdHJlZSwgZmlsZSkge1xuICAgICAgICB0cmVlID0gdHJlZSB8fCBub2RlXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKHRyZWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IobnVsbCwgdHJlZSwgZmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qIFJ1biB0cmFuc2Zvcm1zIG9uIGEgVW5pc3Qgbm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZpbGVcbiAgICogKGluIHN0cmluZyBvciBWRmlsZSByZXByZXNlbnRhdGlvbiksIHN5bmMuICovXG4gIGZ1bmN0aW9uIHJ1blN5bmMobm9kZSwgZmlsZSkge1xuICAgIHZhciBjb21wbGV0ZSA9IGZhbHNlXG4gICAgdmFyIHJlc3VsdFxuXG4gICAgcnVuKG5vZGUsIGZpbGUsIGRvbmUpXG5cbiAgICBhc3NlcnREb25lKCdydW5TeW5jJywgJ3J1bicsIGNvbXBsZXRlKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuXG4gICAgZnVuY3Rpb24gZG9uZShlcnIsIHRyZWUpIHtcbiAgICAgIGNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYmFpbChlcnIpXG4gICAgICByZXN1bHQgPSB0cmVlXG4gICAgfVxuICB9XG5cbiAgLyogU3RyaW5naWZ5IGEgVW5pc3Qgbm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZpbGVcbiAgICogKGluIHN0cmluZyBvciBWRmlsZSByZXByZXNlbnRhdGlvbikgaW50byBhIHN0cmluZ1xuICAgKiB1c2luZyB0aGUgYENvbXBpbGVyYCBvbiB0aGUgcHJvY2Vzc29yLiAqL1xuICBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSwgZG9jKSB7XG4gICAgdmFyIGZpbGUgPSB2ZmlsZShkb2MpXG4gICAgdmFyIENvbXBpbGVyXG5cbiAgICBmcmVlemUoKVxuICAgIENvbXBpbGVyID0gcHJvY2Vzc29yLkNvbXBpbGVyXG4gICAgYXNzZXJ0Q29tcGlsZXIoJ3N0cmluZ2lmeScsIENvbXBpbGVyKVxuICAgIGFzc2VydE5vZGUobm9kZSlcblxuICAgIGlmIChuZXdhYmxlKENvbXBpbGVyKSkge1xuICAgICAgcmV0dXJuIG5ldyBDb21waWxlcihub2RlLCBmaWxlKS5jb21waWxlKClcbiAgICB9XG5cbiAgICByZXR1cm4gQ29tcGlsZXIobm9kZSwgZmlsZSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG4gIH1cblxuICAvKiBQYXJzZSBhIGZpbGUgKGluIHN0cmluZyBvciBWRmlsZSByZXByZXNlbnRhdGlvbilcbiAgICogaW50byBhIFVuaXN0IG5vZGUgdXNpbmcgdGhlIGBQYXJzZXJgIG9uIHRoZSBwcm9jZXNzb3IsXG4gICAqIHRoZW4gcnVuIHRyYW5zZm9ybXMgb24gdGhhdCBub2RlLCBhbmQgY29tcGlsZSB0aGVcbiAgICogcmVzdWx0aW5nIG5vZGUgdXNpbmcgdGhlIGBDb21waWxlcmAgb24gdGhlIHByb2Nlc3NvcixcbiAgICogYW5kIHN0b3JlIHRoYXQgcmVzdWx0IG9uIHRoZSBWRmlsZS4gKi9cbiAgZnVuY3Rpb24gcHJvY2Vzcyhkb2MsIGNiKSB7XG4gICAgZnJlZXplKClcbiAgICBhc3NlcnRQYXJzZXIoJ3Byb2Nlc3MnLCBwcm9jZXNzb3IuUGFyc2VyKVxuICAgIGFzc2VydENvbXBpbGVyKCdwcm9jZXNzJywgcHJvY2Vzc29yLkNvbXBpbGVyKVxuXG4gICAgaWYgKCFjYikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGV4ZWN1dG9yKVxuICAgIH1cblxuICAgIGV4ZWN1dG9yKG51bGwsIGNiKVxuXG4gICAgZnVuY3Rpb24gZXhlY3V0b3IocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZmlsZSA9IHZmaWxlKGRvYylcblxuICAgICAgcGlwZWxpbmUucnVuKHByb2Nlc3Nvciwge2ZpbGU6IGZpbGV9LCBkb25lKVxuXG4gICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKG51bGwsIGZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiBQcm9jZXNzIHRoZSBnaXZlbiBkb2N1bWVudCAoaW4gc3RyaW5nIG9yIFZGaWxlXG4gICAqIHJlcHJlc2VudGF0aW9uKSwgc3luYy4gKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc1N5bmMoZG9jKSB7XG4gICAgdmFyIGNvbXBsZXRlID0gZmFsc2VcbiAgICB2YXIgZmlsZVxuXG4gICAgZnJlZXplKClcbiAgICBhc3NlcnRQYXJzZXIoJ3Byb2Nlc3NTeW5jJywgcHJvY2Vzc29yLlBhcnNlcilcbiAgICBhc3NlcnRDb21waWxlcigncHJvY2Vzc1N5bmMnLCBwcm9jZXNzb3IuQ29tcGlsZXIpXG4gICAgZmlsZSA9IHZmaWxlKGRvYylcblxuICAgIHByb2Nlc3MoZmlsZSwgZG9uZSlcblxuICAgIGFzc2VydERvbmUoJ3Byb2Nlc3NTeW5jJywgJ3Byb2Nlc3MnLCBjb21wbGV0ZSlcblxuICAgIHJldHVybiBmaWxlXG5cbiAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgY29tcGxldGUgPSB0cnVlXG4gICAgICBiYWlsKGVycilcbiAgICB9XG4gIH1cbn1cblxuLyogQ2hlY2sgaWYgYGZ1bmNgIGlzIGEgY29uc3RydWN0b3IuICovXG5mdW5jdGlvbiBuZXdhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYga2V5cyh2YWx1ZS5wcm90b3R5cGUpXG59XG5cbi8qIENoZWNrIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0IHdpdGgga2V5cy4gKi9cbmZ1bmN0aW9uIGtleXModmFsdWUpIHtcbiAgdmFyIGtleVxuICBmb3IgKGtleSBpbiB2YWx1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qIEFzc2VydCBhIHBhcnNlciBpcyBhdmFpbGFibGUuICovXG5mdW5jdGlvbiBhc3NlcnRQYXJzZXIobmFtZSwgUGFyc2VyKSB7XG4gIGlmICh0eXBlb2YgUGFyc2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYCcgKyBuYW1lICsgJ2Agd2l0aG91dCBgUGFyc2VyYCcpXG4gIH1cbn1cblxuLyogQXNzZXJ0IGEgY29tcGlsZXIgaXMgYXZhaWxhYmxlLiAqL1xuZnVuY3Rpb24gYXNzZXJ0Q29tcGlsZXIobmFtZSwgQ29tcGlsZXIpIHtcbiAgaWYgKHR5cGVvZiBDb21waWxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGAnICsgbmFtZSArICdgIHdpdGhvdXQgYENvbXBpbGVyYCcpXG4gIH1cbn1cblxuLyogQXNzZXJ0IHRoZSBwcm9jZXNzb3IgaXMgbm90IGZyb3plbi4gKi9cbmZ1bmN0aW9uIGFzc2VydFVuZnJvemVuKG5hbWUsIGZyb3plbikge1xuICBpZiAoZnJvemVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgW1xuICAgICAgICAnQ2Fubm90IGludm9rZSBgJyArIG5hbWUgKyAnYCBvbiBhIGZyb3plbiBwcm9jZXNzb3IuXFxuQ3JlYXRlIGEgbmV3ICcsXG4gICAgICAgICdwcm9jZXNzb3IgZmlyc3QsIGJ5IGludm9raW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mICcsXG4gICAgICAgICdgcHJvY2Vzc29yYC4nXG4gICAgICBdLmpvaW4oJycpXG4gICAgKVxuICB9XG59XG5cbi8qIEFzc2VydCBgbm9kZWAgaXMgYSBVbmlzdCBub2RlLiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZShub2RlKSB7XG4gIGlmICghbm9kZSB8fCAhc3RyaW5nKG5vZGUudHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vZGUsIGdvdCBgJyArIG5vZGUgKyAnYCcpXG4gIH1cbn1cblxuLyogQXNzZXJ0IHRoYXQgYGNvbXBsZXRlYCBpcyBgdHJ1ZWAuICovXG5mdW5jdGlvbiBhc3NlcnREb25lKG5hbWUsIGFzeW5jTmFtZSwgY29tcGxldGUpIHtcbiAgaWYgKCFjb21wbGV0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgJyArIG5hbWUgKyAnYCBmaW5pc2hlZCBhc3luYy4gVXNlIGAnICsgYXN5bmNOYW1lICsgJ2AgaW5zdGVhZCdcbiAgICApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unified/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-builder/index.js": -/*!**********************************************!*\ - !*** ../node_modules/unist-builder/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar assign = __webpack_require__(/*! object-assign */ \"../node_modules/object-assign/index.js\");\n\nmodule.exports = u;\n\nfunction u(type, props, value) {\n var node;\n\n if ((value === null || value === undefined) && (_typeof(props) !== 'object' || Array.isArray(props))) {\n value = props;\n props = {};\n }\n\n node = assign({\n type: String(type)\n }, props);\n\n if (Array.isArray(value)) {\n node.children = value;\n } else if (value !== null && value !== undefined) {\n node.value = String(value);\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LWJ1aWxkZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LWJ1aWxkZXIvaW5kZXguanM/MjdiZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVcblxuZnVuY3Rpb24gdSh0eXBlLCBwcm9wcywgdmFsdWUpIHtcbiAgdmFyIG5vZGVcblxuICBpZiAoXG4gICAgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmXG4gICAgKHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwcm9wcykpXG4gICkge1xuICAgIHZhbHVlID0gcHJvcHNcbiAgICBwcm9wcyA9IHt9XG4gIH1cblxuICBub2RlID0gYXNzaWduKHt0eXBlOiBTdHJpbmcodHlwZSl9LCBwcm9wcylcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBub2RlLmNoaWxkcmVuID0gdmFsdWVcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm9kZS52YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiBub2RlXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/unist-builder/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-generated/index.js": -/*!*****************************************************!*\ - !*** ../node_modules/unist-util-generated/index.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = generated;\n\nfunction generated(node) {\n var position = optional(optional(node).position);\n var start = optional(position.start);\n var end = optional(position.end);\n return !start.line || !start.column || !end.line || !end.column;\n}\n\nfunction optional(value) {\n return value && _typeof(value) === 'object' ? value : {};\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtZ2VuZXJhdGVkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLWdlbmVyYXRlZC9pbmRleC5qcz85MzBjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlZFxuXG5mdW5jdGlvbiBnZW5lcmF0ZWQobm9kZSkge1xuICB2YXIgcG9zaXRpb24gPSBvcHRpb25hbChvcHRpb25hbChub2RlKS5wb3NpdGlvbilcbiAgdmFyIHN0YXJ0ID0gb3B0aW9uYWwocG9zaXRpb24uc3RhcnQpXG4gIHZhciBlbmQgPSBvcHRpb25hbChwb3NpdGlvbi5lbmQpXG5cbiAgcmV0dXJuICFzdGFydC5saW5lIHx8ICFzdGFydC5jb2x1bW4gfHwgIWVuZC5saW5lIHx8ICFlbmQuY29sdW1uXG59XG5cbmZ1bmN0aW9uIG9wdGlvbmFsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgOiB7fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unist-util-generated/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-is/index.js": -/*!**********************************************!*\ - !*** ../node_modules/unist-util-is/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = is; // Assert if `test` passes for `node`. When a `parent` node is known the\n// `index` of node.\n// eslint-disable-next-line max-params\n\nfunction is(test, node, index, parent, context) {\n var hasParent = parent !== null && parent !== undefined;\n var hasIndex = index !== null && index !== undefined;\n var check = convert(test);\n\n if (hasIndex && (typeof index !== 'number' || index < 0 || index === Infinity)) {\n throw new Error('Expected positive finite index or child node');\n }\n\n if (hasParent && (!is(null, parent) || !parent.children)) {\n throw new Error('Expected parent node');\n }\n\n if (!node || !node.type || typeof node.type !== 'string') {\n return false;\n }\n\n if (hasParent !== hasIndex) {\n throw new Error('Expected both parent and index');\n }\n\n return Boolean(check.call(context, node, index, parent));\n}\n\nfunction convert(test) {\n if (typeof test === 'string') {\n return typeFactory(test);\n }\n\n if (test === null || test === undefined) {\n return ok;\n }\n\n if (_typeof(test) === 'object') {\n return ('length' in test ? anyFactory : matchesFactory)(test);\n }\n\n if (typeof test === 'function') {\n return test;\n }\n\n throw new Error('Expected function, string, or object as test');\n}\n\nfunction convertAll(tests) {\n var results = [];\n var length = tests.length;\n var index = -1;\n\n while (++index < length) {\n results[index] = convert(tests[index]);\n }\n\n return results;\n} // Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\n\n\nfunction matchesFactory(test) {\n return matches;\n\n function matches(node) {\n var key;\n\n for (key in test) {\n if (node[key] !== test[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nfunction anyFactory(tests) {\n var checks = convertAll(tests);\n var length = checks.length;\n return matches;\n\n function matches() {\n var index = -1;\n\n while (++index < length) {\n if (checks[index].apply(this, arguments)) {\n return true;\n }\n }\n\n return false;\n }\n} // Utility to convert a string into a function which checks a given node’s type\n// for said string.\n\n\nfunction typeFactory(test) {\n return type;\n\n function type(node) {\n return Boolean(node && node.type === test);\n }\n} // Utility to return true.\n\n\nfunction ok() {\n return true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanM/ZmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBpc1xuXG4vLyBBc3NlcnQgaWYgYHRlc3RgIHBhc3NlcyBmb3IgYG5vZGVgLiAgIFdoZW4gYSBgcGFyZW50YCBub2RlIGlzIGtub3duIHRoZVxuLy8gYGluZGV4YCBvZiBub2RlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbmZ1bmN0aW9uIGlzKHRlc3QsIG5vZGUsIGluZGV4LCBwYXJlbnQsIGNvbnRleHQpIHtcbiAgdmFyIGhhc1BhcmVudCA9IHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQgIT09IHVuZGVmaW5lZFxuICB2YXIgaGFzSW5kZXggPSBpbmRleCAhPT0gbnVsbCAmJiBpbmRleCAhPT0gdW5kZWZpbmVkXG4gIHZhciBjaGVjayA9IGNvbnZlcnQodGVzdClcblxuICBpZiAoXG4gICAgaGFzSW5kZXggJiZcbiAgICAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJyB8fCBpbmRleCA8IDAgfHwgaW5kZXggPT09IEluZmluaXR5KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleCBvciBjaGlsZCBub2RlJylcbiAgfVxuXG4gIGlmIChoYXNQYXJlbnQgJiYgKCFpcyhudWxsLCBwYXJlbnQpIHx8ICFwYXJlbnQuY2hpbGRyZW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYXJlbnQgbm9kZScpXG4gIH1cblxuICBpZiAoIW5vZGUgfHwgIW5vZGUudHlwZSB8fCB0eXBlb2Ygbm9kZS50eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGhhc1BhcmVudCAhPT0gaGFzSW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJvdGggcGFyZW50IGFuZCBpbmRleCcpXG4gIH1cblxuICByZXR1cm4gQm9vbGVhbihjaGVjay5jYWxsKGNvbnRleHQsIG5vZGUsIGluZGV4LCBwYXJlbnQpKVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0KHRlc3QpIHtcbiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlRmFjdG9yeSh0ZXN0KVxuICB9XG5cbiAgaWYgKHRlc3QgPT09IG51bGwgfHwgdGVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG9rXG4gIH1cblxuICBpZiAodHlwZW9mIHRlc3QgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICgnbGVuZ3RoJyBpbiB0ZXN0ID8gYW55RmFjdG9yeSA6IG1hdGNoZXNGYWN0b3J5KSh0ZXN0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRlc3RcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3QnKVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0QWxsKHRlc3RzKSB7XG4gIHZhciByZXN1bHRzID0gW11cbiAgdmFyIGxlbmd0aCA9IHRlc3RzLmxlbmd0aFxuICB2YXIgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0c1tpbmRleF0gPSBjb252ZXJ0KHRlc3RzW2luZGV4XSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzXG59XG5cbi8vIFV0aWxpdHkgYXNzZXJ0IGVhY2ggcHJvcGVydHkgaW4gYHRlc3RgIGlzIHJlcHJlc2VudGVkIGluIGBub2RlYCwgYW5kIGVhY2hcbi8vIHZhbHVlcyBhcmUgc3RyaWN0bHkgZXF1YWwuXG5mdW5jdGlvbiBtYXRjaGVzRmFjdG9yeSh0ZXN0KSB7XG4gIHJldHVybiBtYXRjaGVzXG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyhub2RlKSB7XG4gICAgdmFyIGtleVxuXG4gICAgZm9yIChrZXkgaW4gdGVzdCkge1xuICAgICAgaWYgKG5vZGVba2V5XSAhPT0gdGVzdFtrZXldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gYW55RmFjdG9yeSh0ZXN0cykge1xuICB2YXIgY2hlY2tzID0gY29udmVydEFsbCh0ZXN0cylcbiAgdmFyIGxlbmd0aCA9IGNoZWNrcy5sZW5ndGhcblxuICByZXR1cm4gbWF0Y2hlc1xuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoKSB7XG4gICAgdmFyIGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoY2hlY2tzW2luZGV4XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLy8gVXRpbGl0eSB0byBjb252ZXJ0IGEgc3RyaW5nIGludG8gYSBmdW5jdGlvbiB3aGljaCBjaGVja3MgYSBnaXZlbiBub2Rl4oCZcyB0eXBlXG4vLyBmb3Igc2FpZCBzdHJpbmcuXG5mdW5jdGlvbiB0eXBlRmFjdG9yeSh0ZXN0KSB7XG4gIHJldHVybiB0eXBlXG5cbiAgZnVuY3Rpb24gdHlwZShub2RlKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4obm9kZSAmJiBub2RlLnR5cGUgPT09IHRlc3QpXG4gIH1cbn1cblxuLy8gVXRpbGl0eSB0byByZXR1cm4gdHJ1ZS5cbmZ1bmN0aW9uIG9rKCkge1xuICByZXR1cm4gdHJ1ZVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/unist-util-is/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-position/index.js": -/*!****************************************************!*\ - !*** ../node_modules/unist-util-position/index.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar start = factory('start');\nvar end = factory('end');\nmodule.exports = position;\nposition.start = start;\nposition.end = end;\n\nfunction position(node) {\n return {\n start: start(node),\n end: end(node)\n };\n}\n\nfunction factory(type) {\n point.displayName = type;\n return point;\n\n function point(node) {\n var point = node && node.position && node.position[type] || {};\n return {\n line: point.line || null,\n column: point.column || null,\n offset: isNaN(point.offset) ? null : point.offset\n };\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vaW5kZXguanM/NmUwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIHN0YXJ0ID0gZmFjdG9yeSgnc3RhcnQnKVxudmFyIGVuZCA9IGZhY3RvcnkoJ2VuZCcpXG5cbm1vZHVsZS5leHBvcnRzID0gcG9zaXRpb25cblxucG9zaXRpb24uc3RhcnQgPSBzdGFydFxucG9zaXRpb24uZW5kID0gZW5kXG5cbmZ1bmN0aW9uIHBvc2l0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIHtzdGFydDogc3RhcnQobm9kZSksIGVuZDogZW5kKG5vZGUpfVxufVxuXG5mdW5jdGlvbiBmYWN0b3J5KHR5cGUpIHtcbiAgcG9pbnQuZGlzcGxheU5hbWUgPSB0eXBlXG5cbiAgcmV0dXJuIHBvaW50XG5cbiAgZnVuY3Rpb24gcG9pbnQobm9kZSkge1xuICAgIHZhciBwb2ludCA9IChub2RlICYmIG5vZGUucG9zaXRpb24gJiYgbm9kZS5wb3NpdGlvblt0eXBlXSkgfHwge31cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBwb2ludC5saW5lIHx8IG51bGwsXG4gICAgICBjb2x1bW46IHBvaW50LmNvbHVtbiB8fCBudWxsLFxuICAgICAgb2Zmc2V0OiBpc05hTihwb2ludC5vZmZzZXQpID8gbnVsbCA6IHBvaW50Lm9mZnNldFxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unist-util-position/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-remove-position/index.js": -/*!***********************************************************!*\ - !*** ../node_modules/unist-util-remove-position/index.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar visit = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n\nmodule.exports = removePosition;\n\nfunction removePosition(node, force) {\n visit(node, force ? hard : soft);\n return node;\n}\n\nfunction hard(node) {\n delete node.position;\n}\n\nfunction soft(node) {\n node.position = undefined;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcmVtb3ZlLXBvc2l0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXJlbW92ZS1wb3NpdGlvbi9pbmRleC5qcz9kYWM4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgdmlzaXQgPSByZXF1aXJlKCd1bmlzdC11dGlsLXZpc2l0JylcblxubW9kdWxlLmV4cG9ydHMgPSByZW1vdmVQb3NpdGlvblxuXG5mdW5jdGlvbiByZW1vdmVQb3NpdGlvbihub2RlLCBmb3JjZSkge1xuICB2aXNpdChub2RlLCBmb3JjZSA/IGhhcmQgOiBzb2Z0KVxuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiBoYXJkKG5vZGUpIHtcbiAgZGVsZXRlIG5vZGUucG9zaXRpb25cbn1cblxuZnVuY3Rpb24gc29mdChub2RlKSB7XG4gIG5vZGUucG9zaXRpb24gPSB1bmRlZmluZWRcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/unist-util-remove-position/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-stringify-position/index.js": -/*!**************************************************************!*\ - !*** ../node_modules/unist-util-stringify-position/index.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar own = {}.hasOwnProperty;\nmodule.exports = stringify;\n\nfunction stringify(value) {\n /* Nothing. */\n if (!value || _typeof(value) !== 'object') {\n return null;\n }\n /* Node. */\n\n\n if (own.call(value, 'position') || own.call(value, 'type')) {\n return position(value.position);\n }\n /* Position. */\n\n\n if (own.call(value, 'start') || own.call(value, 'end')) {\n return position(value);\n }\n /* Point. */\n\n\n if (own.call(value, 'line') || own.call(value, 'column')) {\n return point(value);\n }\n /* ? */\n\n\n return null;\n}\n\nfunction point(point) {\n if (!point || _typeof(point) !== 'object') {\n point = {};\n }\n\n return index(point.line) + ':' + index(point.column);\n}\n\nfunction position(pos) {\n if (!pos || _typeof(pos) !== 'object') {\n pos = {};\n }\n\n return point(pos.start) + '-' + point(pos.end);\n}\n\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcz9jYzc3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnlcblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIC8qIE5vdGhpbmcuICovXG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiBOb2RlLiAqL1xuICBpZiAob3duLmNhbGwodmFsdWUsICdwb3NpdGlvbicpIHx8IG93bi5jYWxsKHZhbHVlLCAndHlwZScpKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlLnBvc2l0aW9uKVxuICB9XG5cbiAgLyogUG9zaXRpb24uICovXG4gIGlmIChvd24uY2FsbCh2YWx1ZSwgJ3N0YXJ0JykgfHwgb3duLmNhbGwodmFsdWUsICdlbmQnKSkge1xuICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZSlcbiAgfVxuXG4gIC8qIFBvaW50LiAqL1xuICBpZiAob3duLmNhbGwodmFsdWUsICdsaW5lJykgfHwgb3duLmNhbGwodmFsdWUsICdjb2x1bW4nKSkge1xuICAgIHJldHVybiBwb2ludCh2YWx1ZSlcbiAgfVxuXG4gIC8qID8gKi9cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcG9pbnQocG9pbnQpIHtcbiAgaWYgKCFwb2ludCB8fCB0eXBlb2YgcG9pbnQgIT09ICdvYmplY3QnKSB7XG4gICAgcG9pbnQgPSB7fVxuICB9XG5cbiAgcmV0dXJuIGluZGV4KHBvaW50LmxpbmUpICsgJzonICsgaW5kZXgocG9pbnQuY29sdW1uKVxufVxuXG5mdW5jdGlvbiBwb3NpdGlvbihwb3MpIHtcbiAgaWYgKCFwb3MgfHwgdHlwZW9mIHBvcyAhPT0gJ29iamVjdCcpIHtcbiAgICBwb3MgPSB7fVxuICB9XG5cbiAgcmV0dXJuIHBvaW50KHBvcy5zdGFydCkgKyAnLScgKyBwb2ludChwb3MuZW5kKVxufVxuXG5mdW5jdGlvbiBpbmRleCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogMVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unist-util-stringify-position/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-visit-parents/index.js": -/*!*********************************************************!*\ - !*** ../node_modules/unist-util-visit-parents/index.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = visitParents;\n\nvar convert = __webpack_require__(/*! unist-util-is/convert */ \"../node_modules/unist-util-visit-parents/node_modules/unist-util-is/convert.js\");\n\nvar CONTINUE = true;\nvar SKIP = 'skip';\nvar EXIT = false;\nvisitParents.CONTINUE = CONTINUE;\nvisitParents.SKIP = SKIP;\nvisitParents.EXIT = EXIT;\n\nfunction visitParents(tree, test, visitor, reverse) {\n var is;\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor;\n visitor = test;\n test = null;\n }\n\n is = convert(test);\n one(tree, null, []); // Visit a single node.\n\n function one(node, index, parents) {\n var result = [];\n var subresult;\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents));\n\n if (result[0] === EXIT) {\n return result;\n }\n }\n\n if (node.children && result[0] !== SKIP) {\n subresult = toResult(all(node.children, parents.concat(node)));\n return subresult[0] === EXIT ? subresult : result;\n }\n\n return result;\n } // Visit children in `parent`.\n\n\n function all(children, parents) {\n var min = -1;\n var step = reverse ? -1 : 1;\n var index = (reverse ? children.length : min) + step;\n var result;\n\n while (index > min && index < children.length) {\n result = one(children[index], index, parents);\n\n if (result[0] === EXIT) {\n return result;\n }\n\n index = typeof result[1] === 'number' ? result[1] : index + step;\n }\n }\n}\n\nfunction toResult(value) {\n if (value !== null && _typeof(value) === 'object' && 'length' in value) {\n return value;\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value];\n }\n\n return [value];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzPzkyYWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gdmlzaXRQYXJlbnRzXG5cbnZhciBjb252ZXJ0ID0gcmVxdWlyZSgndW5pc3QtdXRpbC1pcy9jb252ZXJ0JylcblxudmFyIENPTlRJTlVFID0gdHJ1ZVxudmFyIFNLSVAgPSAnc2tpcCdcbnZhciBFWElUID0gZmFsc2VcblxudmlzaXRQYXJlbnRzLkNPTlRJTlVFID0gQ09OVElOVUVcbnZpc2l0UGFyZW50cy5TS0lQID0gU0tJUFxudmlzaXRQYXJlbnRzLkVYSVQgPSBFWElUXG5cbmZ1bmN0aW9uIHZpc2l0UGFyZW50cyh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7XG4gIHZhciBpc1xuXG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmlzaXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldmVyc2UgPSB2aXNpdG9yXG4gICAgdmlzaXRvciA9IHRlc3RcbiAgICB0ZXN0ID0gbnVsbFxuICB9XG5cbiAgaXMgPSBjb252ZXJ0KHRlc3QpXG5cbiAgb25lKHRyZWUsIG51bGwsIFtdKVxuXG4gIC8vIFZpc2l0IGEgc2luZ2xlIG5vZGUuXG4gIGZ1bmN0aW9uIG9uZShub2RlLCBpbmRleCwgcGFyZW50cykge1xuICAgIHZhciByZXN1bHQgPSBbXVxuICAgIHZhciBzdWJyZXN1bHRcblxuICAgIGlmICghdGVzdCB8fCBpcyhub2RlLCBpbmRleCwgcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdIHx8IG51bGwpKSB7XG4gICAgICByZXN1bHQgPSB0b1Jlc3VsdCh2aXNpdG9yKG5vZGUsIHBhcmVudHMpKVxuXG4gICAgICBpZiAocmVzdWx0WzBdID09PSBFWElUKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiByZXN1bHRbMF0gIT09IFNLSVApIHtcbiAgICAgIHN1YnJlc3VsdCA9IHRvUmVzdWx0KGFsbChub2RlLmNoaWxkcmVuLCBwYXJlbnRzLmNvbmNhdChub2RlKSkpXG4gICAgICByZXR1cm4gc3VicmVzdWx0WzBdID09PSBFWElUID8gc3VicmVzdWx0IDogcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gVmlzaXQgY2hpbGRyZW4gaW4gYHBhcmVudGAuXG4gIGZ1bmN0aW9uIGFsbChjaGlsZHJlbiwgcGFyZW50cykge1xuICAgIHZhciBtaW4gPSAtMVxuICAgIHZhciBzdGVwID0gcmV2ZXJzZSA/IC0xIDogMVxuICAgIHZhciBpbmRleCA9IChyZXZlcnNlID8gY2hpbGRyZW4ubGVuZ3RoIDogbWluKSArIHN0ZXBcbiAgICB2YXIgcmVzdWx0XG5cbiAgICB3aGlsZSAoaW5kZXggPiBtaW4gJiYgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IG9uZShjaGlsZHJlbltpbmRleF0sIGluZGV4LCBwYXJlbnRzKVxuXG4gICAgICBpZiAocmVzdWx0WzBdID09PSBFWElUKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSB0eXBlb2YgcmVzdWx0WzFdID09PSAnbnVtYmVyJyA/IHJlc3VsdFsxXSA6IGluZGV4ICsgc3RlcFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZSkge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW0NPTlRJTlVFLCB2YWx1ZV1cbiAgfVxuXG4gIHJldHVybiBbdmFsdWVdXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQS9CQTtBQUNBO0FBQ0E7QUFpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unist-util-visit-parents/index.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-visit-parents/node_modules/unist-util-is/convert.js": -/*!**************************************************************************************!*\ - !*** ../node_modules/unist-util-visit-parents/node_modules/unist-util-is/convert.js ***! - \**************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = convert;\n\nfunction convert(test) {\n if (typeof test === 'string') {\n return typeFactory(test);\n }\n\n if (test === null || test === undefined) {\n return ok;\n }\n\n if (_typeof(test) === 'object') {\n return ('length' in test ? anyFactory : matchesFactory)(test);\n }\n\n if (typeof test === 'function') {\n return test;\n }\n\n throw new Error('Expected function, string, or object as test');\n}\n\nfunction convertAll(tests) {\n var results = [];\n var length = tests.length;\n var index = -1;\n\n while (++index < length) {\n results[index] = convert(tests[index]);\n }\n\n return results;\n} // Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\n\n\nfunction matchesFactory(test) {\n return matches;\n\n function matches(node) {\n var key;\n\n for (key in test) {\n if (node[key] !== test[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nfunction anyFactory(tests) {\n var checks = convertAll(tests);\n var length = checks.length;\n return matches;\n\n function matches() {\n var index = -1;\n\n while (++index < length) {\n if (checks[index].apply(this, arguments)) {\n return true;\n }\n }\n\n return false;\n }\n} // Utility to convert a string into a function which checks a given node’s type\n// for said string.\n\n\nfunction typeFactory(test) {\n return type;\n\n function type(node) {\n return Boolean(node && node.type === test);\n }\n} // Utility to return true.\n\n\nfunction ok() {\n return true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9jb252ZXJ0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvY29udmVydC5qcz81ZDVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnRcblxuZnVuY3Rpb24gY29udmVydCh0ZXN0KSB7XG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZUZhY3RvcnkodGVzdClcbiAgfVxuXG4gIGlmICh0ZXN0ID09PSBudWxsIHx8IHRlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBva1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAoJ2xlbmd0aCcgaW4gdGVzdCA/IGFueUZhY3RvcnkgOiBtYXRjaGVzRmFjdG9yeSkodGVzdClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0ZXN0XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0Jylcbn1cblxuZnVuY3Rpb24gY29udmVydEFsbCh0ZXN0cykge1xuICB2YXIgcmVzdWx0cyA9IFtdXG4gIHZhciBsZW5ndGggPSB0ZXN0cy5sZW5ndGhcbiAgdmFyIGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdHNbaW5kZXhdID0gY29udmVydCh0ZXN0c1tpbmRleF0pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0c1xufVxuXG4vLyBVdGlsaXR5IGFzc2VydCBlYWNoIHByb3BlcnR5IGluIGB0ZXN0YCBpcyByZXByZXNlbnRlZCBpbiBgbm9kZWAsIGFuZCBlYWNoXG4vLyB2YWx1ZXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuZnVuY3Rpb24gbWF0Y2hlc0ZhY3RvcnkodGVzdCkge1xuICByZXR1cm4gbWF0Y2hlc1xuXG4gIGZ1bmN0aW9uIG1hdGNoZXMobm9kZSkge1xuICAgIHZhciBrZXlcblxuICAgIGZvciAoa2V5IGluIHRlc3QpIHtcbiAgICAgIGlmIChub2RlW2tleV0gIT09IHRlc3Rba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHtcbiAgdmFyIGNoZWNrcyA9IGNvbnZlcnRBbGwodGVzdHMpXG4gIHZhciBsZW5ndGggPSBjaGVja3MubGVuZ3RoXG5cbiAgcmV0dXJuIG1hdGNoZXNcblxuICBmdW5jdGlvbiBtYXRjaGVzKCkge1xuICAgIHZhciBpbmRleCA9IC0xXG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNoZWNrc1tpbmRleF0uYXBwbHkodGhpcywgYXJndW1lbnRzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8vIFV0aWxpdHkgdG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGEgZ2l2ZW4gbm9kZeKAmXMgdHlwZVxuLy8gZm9yIHNhaWQgc3RyaW5nLlxuZnVuY3Rpb24gdHlwZUZhY3RvcnkodGVzdCkge1xuICByZXR1cm4gdHlwZVxuXG4gIGZ1bmN0aW9uIHR5cGUobm9kZSkge1xuICAgIHJldHVybiBCb29sZWFuKG5vZGUgJiYgbm9kZS50eXBlID09PSB0ZXN0KVxuICB9XG59XG5cbi8vIFV0aWxpdHkgdG8gcmV0dXJuIHRydWUuXG5mdW5jdGlvbiBvaygpIHtcbiAgcmV0dXJuIHRydWVcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/unist-util-visit-parents/node_modules/unist-util-is/convert.js\n"); - -/***/ }), - -/***/ "../node_modules/unist-util-visit/index.js": -/*!*************************************************!*\ - !*** ../node_modules/unist-util-visit/index.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = visit;\n\nvar visitParents = __webpack_require__(/*! unist-util-visit-parents */ \"../node_modules/unist-util-visit-parents/index.js\");\n\nvar CONTINUE = visitParents.CONTINUE;\nvar SKIP = visitParents.SKIP;\nvar EXIT = visitParents.EXIT;\nvisit.CONTINUE = CONTINUE;\nvisit.SKIP = SKIP;\nvisit.EXIT = EXIT;\n\nfunction visit(tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor;\n visitor = test;\n test = null;\n }\n\n visitParents(tree, test, overload, reverse);\n\n function overload(node, parents) {\n var parent = parents[parents.length - 1];\n var index = parent ? parent.children.indexOf(node) : null;\n return visitor(node, index, parent);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanM/MDRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB2aXNpdFxuXG52YXIgdmlzaXRQYXJlbnRzID0gcmVxdWlyZSgndW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzJylcblxudmFyIENPTlRJTlVFID0gdmlzaXRQYXJlbnRzLkNPTlRJTlVFXG52YXIgU0tJUCA9IHZpc2l0UGFyZW50cy5TS0lQXG52YXIgRVhJVCA9IHZpc2l0UGFyZW50cy5FWElUXG5cbnZpc2l0LkNPTlRJTlVFID0gQ09OVElOVUVcbnZpc2l0LlNLSVAgPSBTS0lQXG52aXNpdC5FWElUID0gRVhJVFxuXG5mdW5jdGlvbiB2aXNpdCh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7XG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmlzaXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldmVyc2UgPSB2aXNpdG9yXG4gICAgdmlzaXRvciA9IHRlc3RcbiAgICB0ZXN0ID0gbnVsbFxuICB9XG5cbiAgdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIG92ZXJsb2FkLCByZXZlcnNlKVxuXG4gIGZ1bmN0aW9uIG92ZXJsb2FkKG5vZGUsIHBhcmVudHMpIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdXG4gICAgdmFyIGluZGV4ID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSkgOiBudWxsXG4gICAgcmV0dXJuIHZpc2l0b3Iobm9kZSwgaW5kZXgsIHBhcmVudClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/unist-util-visit/index.js\n"); - -/***/ }), - -/***/ "../node_modules/url-toolkit/src/url-toolkit.js": -/*!******************************************************!*\ - !*** ../node_modules/url-toolkit/src/url-toolkit.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n} // see https://tools.ietf.org/html/rfc1808\n\n/* jshint ignore:start */\n\n\n(function (root) {\n /* jshint ignore:end */\n var URL_REGEX = /^((?:[a-zA-Z0-9+\\-.]+:)?)(\\/\\/[^\\/?#]*)?((?:[^\\/\\?#]*\\/)*.*?)??(;.*?)?(\\?.*?)?(#.*?)?$/;\n var FIRST_SEGMENT_REGEX = /^([^\\/?#]*)(.*)$/;\n var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/).*?(?=\\/)/g;\n var URLToolkit = {\n // jshint ignore:line\n // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n // E.g\n // With opts.alwaysNormalize = false (default, spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n // With opts.alwaysNormalize = true (not spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n buildAbsoluteURL: function buildAbsoluteURL(baseURL, relativeURL, opts) {\n opts = opts || {}; // remove any remaining space and CRLF\n\n baseURL = baseURL.trim();\n relativeURL = relativeURL.trim();\n\n if (!relativeURL) {\n // 2a) If the embedded URL is entirely empty, it inherits the\n // entire base URL (i.e., is set equal to the base URL)\n // and we are done.\n if (!opts.alwaysNormalize) {\n return baseURL;\n }\n\n var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n\n if (!basePartsForNormalise) {\n throw new Error('Error trying to parse base URL.');\n }\n\n basePartsForNormalise.path = URLToolkit.normalizePath(basePartsForNormalise.path);\n return URLToolkit.buildURLFromParts(basePartsForNormalise);\n }\n\n var relativeParts = URLToolkit.parseURL(relativeURL);\n\n if (!relativeParts) {\n throw new Error('Error trying to parse relative URL.');\n }\n\n if (relativeParts.scheme) {\n // 2b) If the embedded URL starts with a scheme name, it is\n // interpreted as an absolute URL and we are done.\n if (!opts.alwaysNormalize) {\n return relativeURL;\n }\n\n relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n return URLToolkit.buildURLFromParts(relativeParts);\n }\n\n var baseParts = URLToolkit.parseURL(baseURL);\n\n if (!baseParts) {\n throw new Error('Error trying to parse base URL.');\n }\n\n if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n baseParts.netLoc = pathParts[1];\n baseParts.path = pathParts[2];\n }\n\n if (baseParts.netLoc && !baseParts.path) {\n baseParts.path = '/';\n }\n\n var builtParts = {\n // 2c) Otherwise, the embedded URL inherits the scheme of\n // the base URL.\n scheme: baseParts.scheme,\n netLoc: relativeParts.netLoc,\n path: null,\n params: relativeParts.params,\n query: relativeParts.query,\n fragment: relativeParts.fragment\n };\n\n if (!relativeParts.netLoc) {\n // 3) If the embedded URL's <net_loc> is non-empty, we skip to\n // Step 7. Otherwise, the embedded URL inherits the <net_loc>\n // (if any) of the base URL.\n builtParts.netLoc = baseParts.netLoc; // 4) If the embedded URL path is preceded by a slash \"/\", the\n // path is not relative and we skip to Step 7.\n\n if (relativeParts.path[0] !== '/') {\n if (!relativeParts.path) {\n // 5) If the embedded URL path is empty (and not preceded by a\n // slash), then the embedded URL inherits the base URL path\n builtParts.path = baseParts.path; // 5a) if the embedded URL's <params> is non-empty, we skip to\n // step 7; otherwise, it inherits the <params> of the base\n // URL (if any) and\n\n if (!relativeParts.params) {\n builtParts.params = baseParts.params; // 5b) if the embedded URL's <query> is non-empty, we skip to\n // step 7; otherwise, it inherits the <query> of the base\n // URL (if any) and we skip to step 7.\n\n if (!relativeParts.query) {\n builtParts.query = baseParts.query;\n }\n }\n } else {\n // 6) The last segment of the base URL's path (anything\n // following the rightmost slash \"/\", or the entire path if no\n // slash is present) is removed and the embedded URL's path is\n // appended in its place.\n var baseURLPath = baseParts.path;\n var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) + relativeParts.path;\n builtParts.path = URLToolkit.normalizePath(newPath);\n }\n }\n }\n\n if (builtParts.path === null) {\n builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path;\n }\n\n return URLToolkit.buildURLFromParts(builtParts);\n },\n parseURL: function parseURL(url) {\n var parts = URL_REGEX.exec(url);\n\n if (!parts) {\n return null;\n }\n\n return {\n scheme: parts[1] || '',\n netLoc: parts[2] || '',\n path: parts[3] || '',\n params: parts[4] || '',\n query: parts[5] || '',\n fragment: parts[6] || ''\n };\n },\n normalizePath: function normalizePath(path) {\n // The following operations are\n // then applied, in order, to the new path:\n // 6a) All occurrences of \"./\", where \".\" is a complete path\n // segment, are removed.\n // 6b) If the path ends with \".\" as a complete path segment,\n // that \".\" is removed.\n path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, ''); // 6c) All occurrences of \"<segment>/../\", where <segment> is a\n // complete path segment not equal to \"..\", are removed.\n // Removal of these path segments is performed iteratively,\n // removing the leftmost matching pattern on each iteration,\n // until no matching pattern remains.\n // 6d) If the path ends with \"<segment>/..\", where <segment> is a\n // complete path segment not equal to \"..\", that\n // \"<segment>/..\" is removed.\n\n while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length) {} // jshint ignore:line\n\n\n return path.split('').reverse().join('');\n },\n buildURLFromParts: function buildURLFromParts(parts) {\n return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment;\n }\n };\n /* jshint ignore:start */\n\n if (( false ? undefined : _typeof(exports)) === 'object' && ( false ? undefined : _typeof(module)) === 'object') module.exports = URLToolkit;else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return URLToolkit;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}\n})(this);\n/* jshint ignore:end */\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \"../node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VybC10b29sa2l0L3NyYy91cmwtdG9vbGtpdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdXJsLXRvb2xraXQvc3JjL3VybC10b29sa2l0LmpzP2FlMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxODA4XG5cbi8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbihmdW5jdGlvbihyb290KSB7IFxuLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICB2YXIgVVJMX1JFR0VYID0gL14oKD86W2EtekEtWjAtOStcXC0uXSs6KT8pKFxcL1xcL1teXFwvPyNdKik/KCg/OlteXFwvXFw/I10qXFwvKSouKj8pPz8oOy4qPyk/KFxcPy4qPyk/KCMuKj8pPyQvO1xuICB2YXIgRklSU1RfU0VHTUVOVF9SRUdFWCA9IC9eKFteXFwvPyNdKikoLiopJC87XG4gIHZhciBTTEFTSF9ET1RfUkVHRVggPSAvKD86XFwvfF4pXFwuKD89XFwvKS9nO1xuICB2YXIgU0xBU0hfRE9UX0RPVF9SRUdFWCA9IC8oPzpcXC98XilcXC5cXC5cXC8oPyFcXC5cXC5cXC8pLio/KD89XFwvKS9nO1xuXG4gIHZhciBVUkxUb29sa2l0ID0geyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAvLyBJZiBvcHRzLmFsd2F5c05vcm1hbGl6ZSBpcyB0cnVlIHRoZW4gdGhlIHBhdGggd2lsbCBhbHdheXMgYmUgbm9ybWFsaXplZCBldmVuIHdoZW4gaXQgc3RhcnRzIHdpdGggLyBvciAvL1xuICAgIC8vIEUuZ1xuICAgIC8vIFdpdGggb3B0cy5hbHdheXNOb3JtYWxpemUgPSBmYWxzZSAoZGVmYXVsdCwgc3BlYyBjb21wbGlhbnQpXG4gICAgLy8gaHR0cDovL2EuY29tL2IvY2QgKyAvZS9mLy4uL2cgPT4gaHR0cDovL2EuY29tL2UvZi8uLi9nXG4gICAgLy8gV2l0aCBvcHRzLmFsd2F5c05vcm1hbGl6ZSA9IHRydWUgKG5vdCBzcGVjIGNvbXBsaWFudClcbiAgICAvLyBodHRwOi8vYS5jb20vYi9jZCArIC9lL2YvLi4vZyA9PiBodHRwOi8vYS5jb20vZS9nXG4gICAgYnVpbGRBYnNvbHV0ZVVSTDogZnVuY3Rpb24oYmFzZVVSTCwgcmVsYXRpdmVVUkwsIG9wdHMpIHtcbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgLy8gcmVtb3ZlIGFueSByZW1haW5pbmcgc3BhY2UgYW5kIENSTEZcbiAgICAgIGJhc2VVUkwgPSBiYXNlVVJMLnRyaW0oKTtcbiAgICAgIHJlbGF0aXZlVVJMID0gcmVsYXRpdmVVUkwudHJpbSgpO1xuICAgICAgaWYgKCFyZWxhdGl2ZVVSTCkge1xuICAgICAgICAvLyAyYSkgSWYgdGhlIGVtYmVkZGVkIFVSTCBpcyBlbnRpcmVseSBlbXB0eSwgaXQgaW5oZXJpdHMgdGhlXG4gICAgICAgIC8vIGVudGlyZSBiYXNlIFVSTCAoaS5lLiwgaXMgc2V0IGVxdWFsIHRvIHRoZSBiYXNlIFVSTClcbiAgICAgICAgLy8gYW5kIHdlIGFyZSBkb25lLlxuICAgICAgICBpZiAoIW9wdHMuYWx3YXlzTm9ybWFsaXplKSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VVUkw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJhc2VQYXJ0c0Zvck5vcm1hbGlzZSA9IFVSTFRvb2xraXQucGFyc2VVUkwoYmFzZVVSTCk7XG4gICAgICAgIGlmICghYmFzZVBhcnRzRm9yTm9ybWFsaXNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgYmFzZSBVUkwuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYmFzZVBhcnRzRm9yTm9ybWFsaXNlLnBhdGggPSBVUkxUb29sa2l0Lm5vcm1hbGl6ZVBhdGgoYmFzZVBhcnRzRm9yTm9ybWFsaXNlLnBhdGgpO1xuICAgICAgICByZXR1cm4gVVJMVG9vbGtpdC5idWlsZFVSTEZyb21QYXJ0cyhiYXNlUGFydHNGb3JOb3JtYWxpc2UpO1xuICAgICAgfVxuICAgICAgdmFyIHJlbGF0aXZlUGFydHMgPSBVUkxUb29sa2l0LnBhcnNlVVJMKHJlbGF0aXZlVVJMKTtcbiAgICAgIGlmICghcmVsYXRpdmVQYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSByZWxhdGl2ZSBVUkwuJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVsYXRpdmVQYXJ0cy5zY2hlbWUpIHtcbiAgICAgICAgLy8gMmIpIElmIHRoZSBlbWJlZGRlZCBVUkwgc3RhcnRzIHdpdGggYSBzY2hlbWUgbmFtZSwgaXQgaXNcbiAgICAgICAgLy8gaW50ZXJwcmV0ZWQgYXMgYW4gYWJzb2x1dGUgVVJMIGFuZCB3ZSBhcmUgZG9uZS5cbiAgICAgICAgaWYgKCFvcHRzLmFsd2F5c05vcm1hbGl6ZSkge1xuICAgICAgICAgIHJldHVybiByZWxhdGl2ZVVSTDtcbiAgICAgICAgfVxuICAgICAgICByZWxhdGl2ZVBhcnRzLnBhdGggPSBVUkxUb29sa2l0Lm5vcm1hbGl6ZVBhdGgocmVsYXRpdmVQYXJ0cy5wYXRoKTtcbiAgICAgICAgcmV0dXJuIFVSTFRvb2xraXQuYnVpbGRVUkxGcm9tUGFydHMocmVsYXRpdmVQYXJ0cyk7XG4gICAgICB9XG4gICAgICB2YXIgYmFzZVBhcnRzID0gVVJMVG9vbGtpdC5wYXJzZVVSTChiYXNlVVJMKTtcbiAgICAgIGlmICghYmFzZVBhcnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGJhc2UgVVJMLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFiYXNlUGFydHMubmV0TG9jICYmIGJhc2VQYXJ0cy5wYXRoICYmIGJhc2VQYXJ0cy5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgICAgLy8gSWYgbmV0TG9jIG1pc3NpbmcgYW5kIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgYXNzdW1lIGV2ZXJ0aGluZyBiZWZvcmUgdGhlIGZpcnN0ICcvJyBpcyB0aGUgbmV0TG9jXG4gICAgICAgIC8vIFRoaXMgY2F1c2VzICdleGFtcGxlLmNvbS9hJyB0byBiZSBoYW5kbGVkIGFzICcvL2V4YW1wbGUuY29tL2EnIGluc3RlYWQgb2YgJy9leGFtcGxlLmNvbS9hJ1xuICAgICAgICB2YXIgcGF0aFBhcnRzID0gRklSU1RfU0VHTUVOVF9SRUdFWC5leGVjKGJhc2VQYXJ0cy5wYXRoKTtcbiAgICAgICAgYmFzZVBhcnRzLm5ldExvYyA9IHBhdGhQYXJ0c1sxXTtcbiAgICAgICAgYmFzZVBhcnRzLnBhdGggPSBwYXRoUGFydHNbMl07XG4gICAgICB9XG4gICAgICBpZiAoYmFzZVBhcnRzLm5ldExvYyAmJiAhYmFzZVBhcnRzLnBhdGgpIHtcbiAgICAgICAgYmFzZVBhcnRzLnBhdGggPSAnLyc7XG4gICAgICB9XG4gICAgICB2YXIgYnVpbHRQYXJ0cyA9IHtcbiAgICAgICAgLy8gMmMpIE90aGVyd2lzZSwgdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgc2NoZW1lIG9mXG4gICAgICAgIC8vIHRoZSBiYXNlIFVSTC5cbiAgICAgICAgc2NoZW1lOiBiYXNlUGFydHMuc2NoZW1lLFxuICAgICAgICBuZXRMb2M6IHJlbGF0aXZlUGFydHMubmV0TG9jLFxuICAgICAgICBwYXRoOiBudWxsLFxuICAgICAgICBwYXJhbXM6IHJlbGF0aXZlUGFydHMucGFyYW1zLFxuICAgICAgICBxdWVyeTogcmVsYXRpdmVQYXJ0cy5xdWVyeSxcbiAgICAgICAgZnJhZ21lbnQ6IHJlbGF0aXZlUGFydHMuZnJhZ21lbnRcbiAgICAgIH07XG4gICAgICBpZiAoIXJlbGF0aXZlUGFydHMubmV0TG9jKSB7XG4gICAgICAgIC8vIDMpIElmIHRoZSBlbWJlZGRlZCBVUkwncyA8bmV0X2xvYz4gaXMgbm9uLWVtcHR5LCB3ZSBza2lwIHRvXG4gICAgICAgIC8vIFN0ZXAgNy4gIE90aGVyd2lzZSwgdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgPG5ldF9sb2M+XG4gICAgICAgIC8vIChpZiBhbnkpIG9mIHRoZSBiYXNlIFVSTC5cbiAgICAgICAgYnVpbHRQYXJ0cy5uZXRMb2MgPSBiYXNlUGFydHMubmV0TG9jO1xuICAgICAgICAvLyA0KSBJZiB0aGUgZW1iZWRkZWQgVVJMIHBhdGggaXMgcHJlY2VkZWQgYnkgYSBzbGFzaCBcIi9cIiwgdGhlXG4gICAgICAgIC8vIHBhdGggaXMgbm90IHJlbGF0aXZlIGFuZCB3ZSBza2lwIHRvIFN0ZXAgNy5cbiAgICAgICAgaWYgKHJlbGF0aXZlUGFydHMucGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhcnRzLnBhdGgpIHtcbiAgICAgICAgICAgIC8vIDUpIElmIHRoZSBlbWJlZGRlZCBVUkwgcGF0aCBpcyBlbXB0eSAoYW5kIG5vdCBwcmVjZWRlZCBieSBhXG4gICAgICAgICAgICAvLyBzbGFzaCksIHRoZW4gdGhlIGVtYmVkZGVkIFVSTCBpbmhlcml0cyB0aGUgYmFzZSBVUkwgcGF0aFxuICAgICAgICAgICAgYnVpbHRQYXJ0cy5wYXRoID0gYmFzZVBhcnRzLnBhdGg7XG4gICAgICAgICAgICAvLyA1YSkgaWYgdGhlIGVtYmVkZGVkIFVSTCdzIDxwYXJhbXM+IGlzIG5vbi1lbXB0eSwgd2Ugc2tpcCB0b1xuICAgICAgICAgICAgLy8gc3RlcCA3OyBvdGhlcndpc2UsIGl0IGluaGVyaXRzIHRoZSA8cGFyYW1zPiBvZiB0aGUgYmFzZVxuICAgICAgICAgICAgLy8gVVJMIChpZiBhbnkpIGFuZFxuICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhcnRzLnBhcmFtcykge1xuICAgICAgICAgICAgICBidWlsdFBhcnRzLnBhcmFtcyA9IGJhc2VQYXJ0cy5wYXJhbXM7XG4gICAgICAgICAgICAgIC8vIDViKSBpZiB0aGUgZW1iZWRkZWQgVVJMJ3MgPHF1ZXJ5PiBpcyBub24tZW1wdHksIHdlIHNraXAgdG9cbiAgICAgICAgICAgICAgLy8gc3RlcCA3OyBvdGhlcndpc2UsIGl0IGluaGVyaXRzIHRoZSA8cXVlcnk+IG9mIHRoZSBiYXNlXG4gICAgICAgICAgICAgIC8vIFVSTCAoaWYgYW55KSBhbmQgd2Ugc2tpcCB0byBzdGVwIDcuXG4gICAgICAgICAgICAgIGlmICghcmVsYXRpdmVQYXJ0cy5xdWVyeSkge1xuICAgICAgICAgICAgICAgIGJ1aWx0UGFydHMucXVlcnkgPSBiYXNlUGFydHMucXVlcnk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gNikgVGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgYmFzZSBVUkwncyBwYXRoIChhbnl0aGluZ1xuICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSByaWdodG1vc3Qgc2xhc2ggXCIvXCIsIG9yIHRoZSBlbnRpcmUgcGF0aCBpZiBub1xuICAgICAgICAgICAgLy8gc2xhc2ggaXMgcHJlc2VudCkgaXMgcmVtb3ZlZCBhbmQgdGhlIGVtYmVkZGVkIFVSTCdzIHBhdGggaXNcbiAgICAgICAgICAgIC8vIGFwcGVuZGVkIGluIGl0cyBwbGFjZS5cbiAgICAgICAgICAgIHZhciBiYXNlVVJMUGF0aCA9IGJhc2VQYXJ0cy5wYXRoO1xuICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBiYXNlVVJMUGF0aC5zdWJzdHJpbmcoMCwgYmFzZVVSTFBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmVQYXJ0cy5wYXRoO1xuICAgICAgICAgICAgYnVpbHRQYXJ0cy5wYXRoID0gVVJMVG9vbGtpdC5ub3JtYWxpemVQYXRoKG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJ1aWx0UGFydHMucGF0aCA9PT0gbnVsbCkge1xuICAgICAgICBidWlsdFBhcnRzLnBhdGggPSBvcHRzLmFsd2F5c05vcm1hbGl6ZSA/IFVSTFRvb2xraXQubm9ybWFsaXplUGF0aChyZWxhdGl2ZVBhcnRzLnBhdGgpIDogcmVsYXRpdmVQYXJ0cy5wYXRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFVSTFRvb2xraXQuYnVpbGRVUkxGcm9tUGFydHMoYnVpbHRQYXJ0cyk7XG4gICAgfSxcbiAgICBwYXJzZVVSTDogZnVuY3Rpb24odXJsKSB7XG4gICAgICB2YXIgcGFydHMgPSBVUkxfUkVHRVguZXhlYyh1cmwpO1xuICAgICAgaWYgKCFwYXJ0cykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZTogcGFydHNbMV0gfHwgJycsXG4gICAgICAgIG5ldExvYzogcGFydHNbMl0gfHwgJycsXG4gICAgICAgIHBhdGg6IHBhcnRzWzNdIHx8ICcnLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdIHx8ICcnLFxuICAgICAgICBxdWVyeTogcGFydHNbNV0gfHwgJycsXG4gICAgICAgIGZyYWdtZW50OiBwYXJ0c1s2XSB8fCAnJ1xuICAgICAgfTtcbiAgICB9LFxuICAgIG5vcm1hbGl6ZVBhdGg6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmVcbiAgICAgIC8vIHRoZW4gYXBwbGllZCwgaW4gb3JkZXIsIHRvIHRoZSBuZXcgcGF0aDpcbiAgICAgIC8vIDZhKSBBbGwgb2NjdXJyZW5jZXMgb2YgXCIuL1wiLCB3aGVyZSBcIi5cIiBpcyBhIGNvbXBsZXRlIHBhdGhcbiAgICAgIC8vIHNlZ21lbnQsIGFyZSByZW1vdmVkLlxuICAgICAgLy8gNmIpIElmIHRoZSBwYXRoIGVuZHMgd2l0aCBcIi5cIiBhcyBhIGNvbXBsZXRlIHBhdGggc2VnbWVudCxcbiAgICAgIC8vIHRoYXQgXCIuXCIgaXMgcmVtb3ZlZC5cbiAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykucmVwbGFjZShTTEFTSF9ET1RfUkVHRVgsICcnKTtcbiAgICAgIC8vIDZjKSBBbGwgb2NjdXJyZW5jZXMgb2YgXCI8c2VnbWVudD4vLi4vXCIsIHdoZXJlIDxzZWdtZW50PiBpcyBhXG4gICAgICAvLyBjb21wbGV0ZSBwYXRoIHNlZ21lbnQgbm90IGVxdWFsIHRvIFwiLi5cIiwgYXJlIHJlbW92ZWQuXG4gICAgICAvLyBSZW1vdmFsIG9mIHRoZXNlIHBhdGggc2VnbWVudHMgaXMgcGVyZm9ybWVkIGl0ZXJhdGl2ZWx5LFxuICAgICAgLy8gcmVtb3ZpbmcgdGhlIGxlZnRtb3N0IG1hdGNoaW5nIHBhdHRlcm4gb24gZWFjaCBpdGVyYXRpb24sXG4gICAgICAvLyB1bnRpbCBubyBtYXRjaGluZyBwYXR0ZXJuIHJlbWFpbnMuXG4gICAgICAvLyA2ZCkgSWYgdGhlIHBhdGggZW5kcyB3aXRoIFwiPHNlZ21lbnQ+Ly4uXCIsIHdoZXJlIDxzZWdtZW50PiBpcyBhXG4gICAgICAvLyBjb21wbGV0ZSBwYXRoIHNlZ21lbnQgbm90IGVxdWFsIHRvIFwiLi5cIiwgdGhhdFxuICAgICAgLy8gXCI8c2VnbWVudD4vLi5cIiBpcyByZW1vdmVkLlxuICAgICAgd2hpbGUgKHBhdGgubGVuZ3RoICE9PSAocGF0aCA9IHBhdGgucmVwbGFjZShTTEFTSF9ET1RfRE9UX1JFR0VYLCAnJykpLmxlbmd0aCkge30gLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICByZXR1cm4gcGF0aC5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgIH0sXG4gICAgYnVpbGRVUkxGcm9tUGFydHM6IGZ1bmN0aW9uKHBhcnRzKSB7XG4gICAgICByZXR1cm4gcGFydHMuc2NoZW1lICsgcGFydHMubmV0TG9jICsgcGFydHMucGF0aCArIHBhcnRzLnBhcmFtcyArIHBhcnRzLnF1ZXJ5ICsgcGFydHMuZnJhZ21lbnQ7XG4gICAgfVxuICB9O1xuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFVSTFRvb2xraXQ7XG4gIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBVUkxUb29sa2l0OyB9KTtcbiAgZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG4gICAgZXhwb3J0c1tcIlVSTFRvb2xraXRcIl0gPSBVUkxUb29sa2l0O1xuICBlbHNlXG4gICAgcm9vdFtcIlVSTFRvb2xraXRcIl0gPSBVUkxUb29sa2l0O1xufSkodGhpcyk7XG4vKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQXJHQTtBQXVHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUE1R0E7QUFxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQXRJQTtBQXdJQTtBQUNBO0FBQ0E7QUExSUE7QUE2SUE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUFBO0FBeEpBO0FBK0pBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/url-toolkit/src/url-toolkit.js\n"); - -/***/ }), - -/***/ "../node_modules/url/url.js": -/*!**********************************!*\ - !*** ../node_modules/url/url.js ***! - \**********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar punycode = __webpack_require__(/*! punycode */ \"../node_modules/node-libs-browser/node_modules/punycode/punycode.js\");\n\nvar util = __webpack_require__(/*! ./util */ \"../node_modules/url/util.js\");\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n} // Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\n\n\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n // Special case for a simple path URL\nsimplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n // RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n // RFC 2396: characters not allowed for various reasons.\nunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\nautoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nnonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\nunsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n},\n // protocols that never have a hostname.\nhostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n},\n // protocols that always contain a // bit.\nslashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n},\n querystring = __webpack_require__(/*! querystring */ \"../node_modules/querystring-es3/index.js\");\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n var u = new Url();\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + _typeof(url));\n } // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n\n\n var queryIndex = url.indexOf('?'),\n splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n var rest = url; // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n\n if (simplePath[2]) {\n this.search = simplePath[2];\n\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n } // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n\n\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n } // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n\n\n var auth, atSign;\n\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n } // Now we have a portion which is definitely the auth.\n // Pull that off.\n\n\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n } // the host is the remaining to the left of the first non-host char\n\n\n hostEnd = -1;\n\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n } // if we still have not hit it, then the entire thing is a host.\n\n\n if (hostEnd === -1) hostEnd = rest.length;\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd); // pull out port.\n\n this.parseHost(); // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n\n this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n\n var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.\n\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n } // we test again with ASCII char only\n\n\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host; // strip [ and ] from the hostname\n // the host field still retains them, though\n\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n } // now rest is set to the post-host stuff.\n // chop off any delim chars.\n\n\n if (!unsafeProtocol[lowerProto]) {\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1) continue;\n var esc = encodeURIComponent(ae);\n\n if (esc === ae) {\n esc = escape(ae);\n }\n\n rest = rest.split(ae).join(esc);\n }\n } // chop off from the tail first.\n\n\n var hash = rest.indexOf('#');\n\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n\n var qm = rest.indexOf('?');\n\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n\n if (rest) this.pathname = rest;\n\n if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n this.pathname = '/';\n } //to support http.request\n\n\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n } // finally, reconstruct the href based on what has been validated.\n\n\n this.href = this.format();\n return this;\n}; // format a parsed object into a url string\n\n\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function () {\n var auth = this.auth || '';\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query && util.isObject(this.query) && Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || query && '?' + query || '';\n if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n\n if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n pathname = pathname.replace(/[?#]/g, function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n } // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n\n\n result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here.\n\n if (relative.href === '') {\n result.href = result.format();\n return result;\n } // hrefs like //foo/bar always cut to the protocol.\n\n\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol') result[rkey] = relative[rkey];\n } //urlParse appends trailing / to urls like http://www.example.com\n\n\n if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n\n while (relPath.length && !(relative.host = relPath.shift())) {\n ;\n }\n\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port; // to support http.request\n\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n mustEndAbs = isRelAbs || isSourceAbs || result.host && relative.pathname,\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;else srcPath.unshift(result.host);\n }\n\n result.host = '';\n\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);\n }\n\n relative.host = null;\n }\n\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = relative.host || relative.host === '' ? relative.host : result.host;\n result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath; // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n result.search = relative.search;\n result.query = relative.query; //to support http.request\n\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null; //to support http.request\n\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n\n result.href = result.format();\n return result;\n } // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n\n\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''; // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n\n var up = 0;\n\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && srcPath.join('/').substr(-1) !== '/') {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' || srcPath[0] && srcPath[0].charAt(0) === '/'; // put the host back\n\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || result.host && srcPath.length;\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n } //to support request.http\n\n\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function () {\n var host = this.host;\n var port = portPattern.exec(host);\n\n if (port) {\n port = port[0];\n\n if (port !== ':') {\n this.port = port.substr(1);\n }\n\n host = host.substr(0, host.length - port.length);\n }\n\n if (host) this.hostname = host;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VybC91cmwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VybC91cmwuanM/YjI4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYSBzaW1wbGUgcGF0aCBVUkxcbiAgICBzaW1wbGVQYXRoUGF0dGVybiA9IC9eKFxcL1xcLz8oPyFcXC8pW15cXD9cXHNdKikoXFw/W15cXHNdKik/JC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bK2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIHV0aWwuaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCF1dGlsLmlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgLy8gQ29weSBjaHJvbWUsIElFLCBvcGVyYSBiYWNrc2xhc2gtaGFuZGxpbmcgYmVoYXZpb3IuXG4gIC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuICB2YXIgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/JyksXG4gICAgICBzcGxpdHRlciA9XG4gICAgICAgICAgKHF1ZXJ5SW5kZXggIT09IC0xICYmIHF1ZXJ5SW5kZXggPCB1cmwuaW5kZXhPZignIycpKSA/ICc/JyA6ICcjJyxcbiAgICAgIHVTcGxpdCA9IHVybC5zcGxpdChzcGxpdHRlciksXG4gICAgICBzbGFzaFJlZ2V4ID0gL1xcXFwvZztcbiAgdVNwbGl0WzBdID0gdVNwbGl0WzBdLnJlcGxhY2Uoc2xhc2hSZWdleCwgJy8nKTtcbiAgdXJsID0gdVNwbGl0LmpvaW4oc3BsaXR0ZXIpO1xuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIGlmICghc2xhc2hlc0Rlbm90ZUhvc3QgJiYgdXJsLnNwbGl0KCcjJykubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gVHJ5IGZhc3QgcGF0aCByZWdleHBcbiAgICB2YXIgc2ltcGxlUGF0aCA9IHNpbXBsZVBhdGhQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gICAgaWYgKHNpbXBsZVBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHJlc3Q7XG4gICAgICB0aGlzLmhyZWYgPSByZXN0O1xuICAgICAgdGhpcy5wYXRobmFtZSA9IHNpbXBsZVBhdGhbMV07XG4gICAgICBpZiAoc2ltcGxlUGF0aFsyXSkge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHNpbXBsZVBhdGhbMl07XG4gICAgICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55Y29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIEFTQ0lJLW9ubHkuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICBpZiAocmVzdC5pbmRleE9mKGFlKSA9PT0gLTEpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmICh1dGlsLmlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIHV0aWwuaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIHZhciB0a2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICBmb3IgKHZhciB0ayA9IDA7IHRrIDwgdGtleXMubGVuZ3RoOyB0aysrKSB7XG4gICAgdmFyIHRrZXkgPSB0a2V5c1t0a107XG4gICAgcmVzdWx0W3RrZXldID0gdGhpc1t0a2V5XTtcbiAgfVxuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgdmFyIHJrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgIGZvciAodmFyIHJrID0gMDsgcmsgPCBya2V5cy5sZW5ndGg7IHJrKyspIHtcbiAgICAgIHZhciBya2V5ID0gcmtleXNbcmtdO1xuICAgICAgaWYgKHJrZXkgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtya2V5XSA9IHJlbGF0aXZlW3JrZXldO1xuICAgIH1cblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgICAgICB2YXIgayA9IGtleXNbdl07XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghdXRpbC5pc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgfHwgc3JjUGF0aC5sZW5ndGggPiAxKSAmJlxuICAgICAgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fCBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFJQTtBQUpBO0FBT0E7QUFDQTtBQVJBO0FBV0E7QUFYQTtBQWNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQTtBQUNBO0FBQ0E7QUFGQTtBQXpCQTtBQThCQTtBQUNBO0FBQ0E7QUFGQTtBQTlCQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFuQ0E7QUFDQTtBQWdEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakRBO0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBckJBO0FBMEJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQWxDQTtBQXNDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQTFDQTtBQUNBO0FBQ0E7QUE0Q0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWpEQTtBQUNBO0FBQ0E7QUFtREE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFWQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXhNQTtBQTRNQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUEzTkE7QUFDQTtBQUNBO0FBOE5BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUF0UEE7QUFDQTtBQUNBO0FBd1BBO0FBQ0E7QUFDQTtBQUNBO0FBN1BBO0FBQ0E7QUFDQTtBQStQQTtBQUNBO0FBbFFBO0FBQ0E7QUFDQTtBQW9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFyREE7QUFDQTtBQXVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWEE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBckJBO0FBQ0E7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBekxBO0FBNkxBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBak5BO0FBQ0E7QUFDQTtBQW1OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWhRQTtBQUNBO0FBQ0E7QUFrUUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQTNRQTtBQUNBO0FBNlFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQVZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/url/url.js\n"); - -/***/ }), - -/***/ "../node_modules/url/util.js": -/*!***********************************!*\ - !*** ../node_modules/url/util.js ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = {\n isString: function isString(arg) {\n return typeof arg === 'string';\n },\n isObject: function isObject(arg) {\n return _typeof(arg) === 'object' && arg !== null;\n },\n isNull: function isNull(arg) {\n return arg === null;\n },\n isNullOrUndefined: function isNullOrUndefined(arg) {\n return arg == null;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3VybC91dGlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91cmwvdXRpbC5qcz9jMjMyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzU3RyaW5nOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdzdHJpbmcnO1xuICB9LFxuICBpc09iamVjdDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsT3JVbmRlZmluZWQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT0gbnVsbDtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQVpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/url/util.js\n"); - -/***/ }), - -/***/ "../node_modules/util-deprecate/browser.js": -/*!*************************************************!*\ - !*** ../node_modules/util-deprecate/browser.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {/**\n * Module exports.\n */\nmodule.exports = deprecate;\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate(fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n\n warned = true;\n }\n\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\n\nfunction config(name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanM/NzJkZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZXByZWNhdGU7XG5cbi8qKlxuICogTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAqIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS5ub0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50aHJvd0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIHRocm93IGFuIEVycm9yIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRyYWNlRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgaW52b2tlIGBjb25zb2xlLnRyYWNlKClgIGluc3RlYWQgb2YgYGNvbnNvbGUuZXJyb3IoKWAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSB0aGUgZnVuY3Rpb24gdG8gZGVwcmVjYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNnIC0gdGhlIHN0cmluZyB0byBwcmludCB0byB0aGUgY29uc29sZSB3aGVuIGBmbmAgaXMgaW52b2tlZFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBhIG5ldyBcImRlcHJlY2F0ZWRcIiB2ZXJzaW9uIG9mIGBmbmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVwcmVjYXRlIChmbiwgbXNnKSB7XG4gIGlmIChjb25maWcoJ25vRGVwcmVjYXRpb24nKSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKGNvbmZpZygndGhyb3dEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcoJ3RyYWNlRGVwcmVjYXRpb24nKSkge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGBsb2NhbFN0b3JhZ2VgIGZvciBib29sZWFuIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb25maWcgKG5hbWUpIHtcbiAgLy8gYWNjZXNzaW5nIGdsb2JhbC5sb2NhbFN0b3JhZ2UgY2FuIHRyaWdnZXIgYSBET01FeGNlcHRpb24gaW4gc2FuZGJveGVkIGlmcmFtZXNcbiAgdHJ5IHtcbiAgICBpZiAoIWdsb2JhbC5sb2NhbFN0b3JhZ2UpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdmFsID0gZ2xvYmFsLmxvY2FsU3RvcmFnZVtuYW1lXTtcbiAgaWYgKG51bGwgPT0gdmFsKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBOzs7QUFJQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/util-deprecate/browser.js\n"); - -/***/ }), - -/***/ "../node_modules/uuid/lib/bytesToUuid.js": -/*!***********************************************!*\ - !*** ../node_modules/uuid/lib/bytesToUuid.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\n\nmodule.exports = bytesToUuid;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL2J5dGVzVG9VdWlkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcz9lMWY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xudmFyIGJ5dGVUb0hleCA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4O1xuICAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuICByZXR1cm4gKFtcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXVxuICBdKS5qb2luKCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/uuid/lib/bytesToUuid.js\n"); - -/***/ }), - -/***/ "../node_modules/uuid/lib/rng-browser.js": -/*!***********************************************!*\ - !*** ../node_modules/uuid/lib/rng-browser.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ybmctYnJvd3Nlci5qcz81OWVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcbi8vIGJyb3dzZXIgdGhpcyBpcyBhIGxpdHRsZSBjb21wbGljYXRlZCBkdWUgdG8gdW5rbm93biBxdWFsaXR5IG9mIE1hdGgucmFuZG9tKClcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXG5cbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0b1xuLy8gaW1wbGVtZW50YXRpb24uIEFsc28sIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byBvbiBJRTExLlxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YobXNDcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcblxuaWYgKGdldFJhbmRvbVZhbHVlcykge1xuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbiAgICByZXR1cm4gcm5kczg7XG4gIH07XG59IGVsc2Uge1xuICAvLyBNYXRoLnJhbmRvbSgpLWJhc2VkIChSTkcpXG4gIC8vXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXG4gIC8vIHF1YWxpdHkuXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hdGhSTkcoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcbiAgICAgIHJuZHNbaV0gPSByID4+PiAoKGkgJiAweDAzKSA8PCAzKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJuZHM7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/uuid/lib/rng-browser.js\n"); - -/***/ }), - -/***/ "../node_modules/uuid/v4.js": -/*!**********************************!*\ - !*** ../node_modules/uuid/v4.js ***! - \**********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var rng = __webpack_require__(/*! ./lib/rng */ \"../node_modules/uuid/lib/rng-browser.js\");\n\nvar bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ \"../node_modules/uuid/lib/bytesToUuid.js\");\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3V1aWQvdjQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3V1aWQvdjQuanM/ZGFkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcm5nID0gcmVxdWlyZSgnLi9saWIvcm5nJyk7XG52YXIgYnl0ZXNUb1V1aWQgPSByZXF1aXJlKCcuL2xpYi9ieXRlc1RvVXVpZCcpO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcblxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcbiAgICBvcHRpb25zID0gbnVsbDtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcblxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcbiAgaWYgKGJ1Zikge1xuICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAxNjsgKytpaSkge1xuICAgICAgYnVmW2kgKyBpaV0gPSBybmRzW2lpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/uuid/v4.js\n"); - -/***/ }), - -/***/ "../node_modules/value-equal/esm/value-equal.js": -/*!******************************************************!*\ - !*** ../node_modules/value-equal/esm/value-equal.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true; // Otherwise, if either of them == null they are not equal.\n\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n return valueEqual(item, b[index]);\n });\n }\n\n if (_typeof(a) === 'object' || _typeof(b) === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n return Object.keys(Object.assign({}, a, b)).every(function (key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (valueEqual);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZhbHVlLWVxdWFsL2VzbS92YWx1ZS1lcXVhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdmFsdWUtZXF1YWwvZXNtL3ZhbHVlLWVxdWFsLmpzPzg5MzMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gdmFsdWVPZihvYmopIHtcbiAgcmV0dXJuIG9iai52YWx1ZU9mID8gb2JqLnZhbHVlT2YoKSA6IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKG9iaik7XG59XG5cbmZ1bmN0aW9uIHZhbHVlRXF1YWwoYSwgYikge1xuICAvLyBUZXN0IGZvciBzdHJpY3QgZXF1YWxpdHkgZmlyc3QuXG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBPdGhlcndpc2UsIGlmIGVpdGhlciBvZiB0aGVtID09IG51bGwgdGhleSBhcmUgbm90IGVxdWFsLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIEFycmF5LmlzQXJyYXkoYikgJiZcbiAgICAgIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJlxuICAgICAgYS5ldmVyeShmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdmFsdWVFcXVhbChpdGVtLCBiW2luZGV4XSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBhVmFsdWUgPSB2YWx1ZU9mKGEpO1xuICAgIHZhciBiVmFsdWUgPSB2YWx1ZU9mKGIpO1xuXG4gICAgaWYgKGFWYWx1ZSAhPT0gYSB8fCBiVmFsdWUgIT09IGIpIHJldHVybiB2YWx1ZUVxdWFsKGFWYWx1ZSwgYlZhbHVlKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBhLCBiKSkuZXZlcnkoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gdmFsdWVFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlRXF1YWw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/value-equal/esm/value-equal.js\n"); - -/***/ }), - -/***/ "../node_modules/vfile-location/index.js": -/*!***********************************************!*\ - !*** ../node_modules/vfile-location/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nmodule.exports = factory;\n\nfunction factory(file) {\n var contents = indices(String(file));\n return {\n toPosition: offsetToPositionFactory(contents),\n toOffset: positionToOffsetFactory(contents)\n };\n} // Factory to get the line and column-based `position` for `offset` in the bound\n// indices.\n\n\nfunction offsetToPositionFactory(indices) {\n return offsetToPosition; // Get the line and column-based `position` for `offset` in the bound indices.\n\n function offsetToPosition(offset) {\n var index = -1;\n var length = indices.length;\n\n if (offset < 0) {\n return {};\n }\n\n while (++index < length) {\n if (indices[index] > offset) {\n return {\n line: index + 1,\n column: offset - (indices[index - 1] || 0) + 1,\n offset: offset\n };\n }\n }\n\n return {};\n }\n} // Factory to get the `offset` for a line and column-based `position` in the\n// bound indices.\n\n\nfunction positionToOffsetFactory(indices) {\n return positionToOffset; // Get the `offset` for a line and column-based `position` in the bound\n // indices.\n\n function positionToOffset(position) {\n var line = position && position.line;\n var column = position && position.column;\n\n if (!isNaN(line) && !isNaN(column) && line - 1 in indices) {\n return (indices[line - 2] || 0) + column - 1 || 0;\n }\n\n return -1;\n }\n} // Get indices of line-breaks in `value`.\n\n\nfunction indices(value) {\n var result = [];\n var index = value.indexOf('\\n');\n\n while (index !== -1) {\n result.push(index + 1);\n index = value.indexOf('\\n', index + 1);\n }\n\n result.push(value.length + 1);\n return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZmaWxlLWxvY2F0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92ZmlsZS1sb2NhdGlvbi9pbmRleC5qcz83YWFmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnlcblxuZnVuY3Rpb24gZmFjdG9yeShmaWxlKSB7XG4gIHZhciBjb250ZW50cyA9IGluZGljZXMoU3RyaW5nKGZpbGUpKVxuXG4gIHJldHVybiB7XG4gICAgdG9Qb3NpdGlvbjogb2Zmc2V0VG9Qb3NpdGlvbkZhY3RvcnkoY29udGVudHMpLFxuICAgIHRvT2Zmc2V0OiBwb3NpdGlvblRvT2Zmc2V0RmFjdG9yeShjb250ZW50cylcbiAgfVxufVxuXG4vLyBGYWN0b3J5IHRvIGdldCB0aGUgbGluZSBhbmQgY29sdW1uLWJhc2VkIGBwb3NpdGlvbmAgZm9yIGBvZmZzZXRgIGluIHRoZSBib3VuZFxuLy8gaW5kaWNlcy5cbmZ1bmN0aW9uIG9mZnNldFRvUG9zaXRpb25GYWN0b3J5KGluZGljZXMpIHtcbiAgcmV0dXJuIG9mZnNldFRvUG9zaXRpb25cblxuICAvLyBHZXQgdGhlIGxpbmUgYW5kIGNvbHVtbi1iYXNlZCBgcG9zaXRpb25gIGZvciBgb2Zmc2V0YCBpbiB0aGUgYm91bmQgaW5kaWNlcy5cbiAgZnVuY3Rpb24gb2Zmc2V0VG9Qb3NpdGlvbihvZmZzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMVxuICAgIHZhciBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aFxuXG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoaW5kaWNlc1tpbmRleF0gPiBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiBpbmRleCArIDEsXG4gICAgICAgICAgY29sdW1uOiBvZmZzZXQgLSAoaW5kaWNlc1tpbmRleCAtIDFdIHx8IDApICsgMSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9XG4gIH1cbn1cblxuLy8gRmFjdG9yeSB0byBnZXQgdGhlIGBvZmZzZXRgIGZvciBhIGxpbmUgYW5kIGNvbHVtbi1iYXNlZCBgcG9zaXRpb25gIGluIHRoZVxuLy8gYm91bmQgaW5kaWNlcy5cbmZ1bmN0aW9uIHBvc2l0aW9uVG9PZmZzZXRGYWN0b3J5KGluZGljZXMpIHtcbiAgcmV0dXJuIHBvc2l0aW9uVG9PZmZzZXRcblxuICAvLyBHZXQgdGhlIGBvZmZzZXRgIGZvciBhIGxpbmUgYW5kIGNvbHVtbi1iYXNlZCBgcG9zaXRpb25gIGluIHRoZSBib3VuZFxuICAvLyBpbmRpY2VzLlxuICBmdW5jdGlvbiBwb3NpdGlvblRvT2Zmc2V0KHBvc2l0aW9uKSB7XG4gICAgdmFyIGxpbmUgPSBwb3NpdGlvbiAmJiBwb3NpdGlvbi5saW5lXG4gICAgdmFyIGNvbHVtbiA9IHBvc2l0aW9uICYmIHBvc2l0aW9uLmNvbHVtblxuXG4gICAgaWYgKCFpc05hTihsaW5lKSAmJiAhaXNOYU4oY29sdW1uKSAmJiBsaW5lIC0gMSBpbiBpbmRpY2VzKSB7XG4gICAgICByZXR1cm4gKGluZGljZXNbbGluZSAtIDJdIHx8IDApICsgY29sdW1uIC0gMSB8fCAwXG4gICAgfVxuXG4gICAgcmV0dXJuIC0xXG4gIH1cbn1cblxuLy8gR2V0IGluZGljZXMgb2YgbGluZS1icmVha3MgaW4gYHZhbHVlYC5cbmZ1bmN0aW9uIGluZGljZXModmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2YoJ1xcbicpXG5cbiAgd2hpbGUgKGluZGV4ICE9PSAtMSkge1xuICAgIHJlc3VsdC5wdXNoKGluZGV4ICsgMSlcbiAgICBpbmRleCA9IHZhbHVlLmluZGV4T2YoJ1xcbicsIGluZGV4ICsgMSlcbiAgfVxuXG4gIHJlc3VsdC5wdXNoKHZhbHVlLmxlbmd0aCArIDEpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/vfile-location/index.js\n"); - -/***/ }), - -/***/ "../node_modules/vfile-message/index.js": -/*!**********************************************!*\ - !*** ../node_modules/vfile-message/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar stringify = __webpack_require__(/*! unist-util-stringify-position */ \"../node_modules/unist-util-stringify-position/index.js\");\n\nmodule.exports = VMessage; // Inherit from `Error#`.\n\nfunction VMessagePrototype() {}\n\nVMessagePrototype.prototype = Error.prototype;\nVMessage.prototype = new VMessagePrototype(); // Message properties.\n\nvar proto = VMessage.prototype;\nproto.file = '';\nproto.name = '';\nproto.reason = '';\nproto.message = '';\nproto.stack = '';\nproto.fatal = null;\nproto.column = null;\nproto.line = null; // Construct a new VMessage.\n//\n// Note: We cannot invoke `Error` on the created context, as that adds readonly\n// `line` and `column` attributes on Safari 9, thus throwing and failing the\n// data.\n\nfunction VMessage(reason, position, origin) {\n var parts;\n var range;\n var location;\n\n if (typeof position === 'string') {\n origin = position;\n position = null;\n }\n\n parts = parseOrigin(origin);\n range = stringify(position) || '1:1';\n location = {\n start: {\n line: null,\n column: null\n },\n end: {\n line: null,\n column: null\n }\n }; // Node.\n\n if (position && position.position) {\n position = position.position;\n }\n\n if (position) {\n // Position.\n if (position.start) {\n location = position;\n position = position.start;\n } else {\n // Point.\n location.start = position;\n }\n }\n\n if (reason.stack) {\n this.stack = reason.stack;\n reason = reason.message;\n }\n\n this.message = reason;\n this.name = range;\n this.reason = reason;\n this.line = position ? position.line : null;\n this.column = position ? position.column : null;\n this.location = location;\n this.source = parts[0];\n this.ruleId = parts[1];\n}\n\nfunction parseOrigin(origin) {\n var result = [null, null];\n var index;\n\n if (typeof origin === 'string') {\n index = origin.indexOf(':');\n\n if (index === -1) {\n result[1] = origin;\n } else {\n result[0] = origin.slice(0, index);\n result[1] = origin.slice(index + 1);\n }\n }\n\n return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanM/YjljNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJ3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uJylcblxubW9kdWxlLmV4cG9ydHMgPSBWTWVzc2FnZVxuXG4vLyBJbmhlcml0IGZyb20gYEVycm9yI2AuXG5mdW5jdGlvbiBWTWVzc2FnZVByb3RvdHlwZSgpIHt9XG5WTWVzc2FnZVByb3RvdHlwZS5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGVcblZNZXNzYWdlLnByb3RvdHlwZSA9IG5ldyBWTWVzc2FnZVByb3RvdHlwZSgpXG5cbi8vIE1lc3NhZ2UgcHJvcGVydGllcy5cbnZhciBwcm90byA9IFZNZXNzYWdlLnByb3RvdHlwZVxuXG5wcm90by5maWxlID0gJydcbnByb3RvLm5hbWUgPSAnJ1xucHJvdG8ucmVhc29uID0gJydcbnByb3RvLm1lc3NhZ2UgPSAnJ1xucHJvdG8uc3RhY2sgPSAnJ1xucHJvdG8uZmF0YWwgPSBudWxsXG5wcm90by5jb2x1bW4gPSBudWxsXG5wcm90by5saW5lID0gbnVsbFxuXG4vLyBDb25zdHJ1Y3QgYSBuZXcgVk1lc3NhZ2UuXG4vL1xuLy8gTm90ZTogV2UgY2Fubm90IGludm9rZSBgRXJyb3JgIG9uIHRoZSBjcmVhdGVkIGNvbnRleHQsIGFzIHRoYXQgYWRkcyByZWFkb25seVxuLy8gYGxpbmVgIGFuZCBgY29sdW1uYCBhdHRyaWJ1dGVzIG9uIFNhZmFyaSA5LCB0aHVzIHRocm93aW5nIGFuZCBmYWlsaW5nIHRoZVxuLy8gZGF0YS5cbmZ1bmN0aW9uIFZNZXNzYWdlKHJlYXNvbiwgcG9zaXRpb24sIG9yaWdpbikge1xuICB2YXIgcGFydHNcbiAgdmFyIHJhbmdlXG4gIHZhciBsb2NhdGlvblxuXG4gIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgb3JpZ2luID0gcG9zaXRpb25cbiAgICBwb3NpdGlvbiA9IG51bGxcbiAgfVxuXG4gIHBhcnRzID0gcGFyc2VPcmlnaW4ob3JpZ2luKVxuICByYW5nZSA9IHN0cmluZ2lmeShwb3NpdGlvbikgfHwgJzE6MSdcblxuICBsb2NhdGlvbiA9IHtcbiAgICBzdGFydDoge2xpbmU6IG51bGwsIGNvbHVtbjogbnVsbH0sXG4gICAgZW5kOiB7bGluZTogbnVsbCwgY29sdW1uOiBudWxsfVxuICB9XG5cbiAgLy8gTm9kZS5cbiAgaWYgKHBvc2l0aW9uICYmIHBvc2l0aW9uLnBvc2l0aW9uKSB7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wb3NpdGlvblxuICB9XG5cbiAgaWYgKHBvc2l0aW9uKSB7XG4gICAgLy8gUG9zaXRpb24uXG4gICAgaWYgKHBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICBsb2NhdGlvbiA9IHBvc2l0aW9uXG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLnN0YXJ0XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBvaW50LlxuICAgICAgbG9jYXRpb24uc3RhcnQgPSBwb3NpdGlvblxuICAgIH1cbiAgfVxuXG4gIGlmIChyZWFzb24uc3RhY2spIHtcbiAgICB0aGlzLnN0YWNrID0gcmVhc29uLnN0YWNrXG4gICAgcmVhc29uID0gcmVhc29uLm1lc3NhZ2VcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IHJlYXNvblxuICB0aGlzLm5hbWUgPSByYW5nZVxuICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICB0aGlzLmxpbmUgPSBwb3NpdGlvbiA/IHBvc2l0aW9uLmxpbmUgOiBudWxsXG4gIHRoaXMuY29sdW1uID0gcG9zaXRpb24gPyBwb3NpdGlvbi5jb2x1bW4gOiBudWxsXG4gIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICB0aGlzLnNvdXJjZSA9IHBhcnRzWzBdXG4gIHRoaXMucnVsZUlkID0gcGFydHNbMV1cbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4ob3JpZ2luKSB7XG4gIHZhciByZXN1bHQgPSBbbnVsbCwgbnVsbF1cbiAgdmFyIGluZGV4XG5cbiAgaWYgKHR5cGVvZiBvcmlnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgaW5kZXggPSBvcmlnaW4uaW5kZXhPZignOicpXG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXN1bHRbMV0gPSBvcmlnaW5cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0WzBdID0gb3JpZ2luLnNsaWNlKDAsIGluZGV4KVxuICAgICAgcmVzdWx0WzFdID0gb3JpZ2luLnNsaWNlKGluZGV4ICsgMSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/vfile-message/index.js\n"); - -/***/ }), - -/***/ "../node_modules/vfile/core.js": -/*!*************************************!*\ - !*** ../node_modules/vfile/core.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nvar path = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n\nvar replace = __webpack_require__(/*! replace-ext */ \"../node_modules/replace-ext/index.js\");\n\nvar buffer = __webpack_require__(/*! is-buffer */ \"../node_modules/is-buffer/index.js\");\n\nmodule.exports = VFile;\nvar own = {}.hasOwnProperty;\nvar proto = VFile.prototype;\nproto.toString = toString;\n/* Order of setting (least specific to most), we need this because\n * otherwise `{stem: 'a', path: '~/b.js'}` would throw, as a path\n * is needed before a stem can be set. */\n\nvar order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname'];\n/* Construct a new file. */\n\nfunction VFile(options) {\n var prop;\n var index;\n var length;\n\n if (!options) {\n options = {};\n } else if (typeof options === 'string' || buffer(options)) {\n options = {\n contents: options\n };\n } else if ('message' in options && 'messages' in options) {\n return options;\n }\n\n if (!(this instanceof VFile)) {\n return new VFile(options);\n }\n\n this.data = {};\n this.messages = [];\n this.history = [];\n this.cwd = process.cwd();\n /* Set path related properties in the correct order. */\n\n index = -1;\n length = order.length;\n\n while (++index < length) {\n prop = order[index];\n\n if (own.call(options, prop)) {\n this[prop] = options[prop];\n }\n }\n /* Set non-path related properties. */\n\n\n for (prop in options) {\n if (order.indexOf(prop) === -1) {\n this[prop] = options[prop];\n }\n }\n}\n/* Access full path (`~/index.min.js`). */\n\n\nObject.defineProperty(proto, 'path', {\n get: function get() {\n return this.history[this.history.length - 1];\n },\n set: function set(path) {\n assertNonEmpty(path, 'path');\n\n if (path !== this.path) {\n this.history.push(path);\n }\n }\n});\n/* Access parent path (`~`). */\n\nObject.defineProperty(proto, 'dirname', {\n get: function get() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined;\n },\n set: function set(dirname) {\n assertPath(this.path, 'dirname');\n this.path = path.join(dirname || '', this.basename);\n }\n});\n/* Access basename (`index.min.js`). */\n\nObject.defineProperty(proto, 'basename', {\n get: function get() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined;\n },\n set: function set(basename) {\n assertNonEmpty(basename, 'basename');\n assertPart(basename, 'basename');\n this.path = path.join(this.dirname || '', basename);\n }\n});\n/* Access extname (`.js`). */\n\nObject.defineProperty(proto, 'extname', {\n get: function get() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined;\n },\n set: function set(extname) {\n var ext = extname || '';\n assertPart(ext, 'extname');\n assertPath(this.path, 'extname');\n\n if (ext) {\n if (ext.charAt(0) !== '.') {\n throw new Error('`extname` must start with `.`');\n }\n\n if (ext.indexOf('.', 1) !== -1) {\n throw new Error('`extname` cannot contain multiple dots');\n }\n }\n\n this.path = replace(this.path, ext);\n }\n});\n/* Access stem (`index.min`). */\n\nObject.defineProperty(proto, 'stem', {\n get: function get() {\n return typeof this.path === 'string' ? path.basename(this.path, this.extname) : undefined;\n },\n set: function set(stem) {\n assertNonEmpty(stem, 'stem');\n assertPart(stem, 'stem');\n this.path = path.join(this.dirname || '', stem + (this.extname || ''));\n }\n});\n/* Get the value of the file. */\n\nfunction toString(encoding) {\n var value = this.contents || '';\n return buffer(value) ? value.toString(encoding) : String(value);\n}\n/* Assert that `part` is not a path (i.e., does\n * not contain `path.sep`). */\n\n\nfunction assertPart(part, name) {\n if (part.indexOf(path.sep) !== -1) {\n throw new Error('`' + name + '` cannot be a path: did not expect `' + path.sep + '`');\n }\n}\n/* Assert that `part` is not empty. */\n\n\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty');\n }\n}\n/* Assert `path` exists. */\n\n\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too');\n }\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZmaWxlL2NvcmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZmaWxlL2NvcmUuanM/ODc0NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHJlcGxhY2UgPSByZXF1aXJlKCdyZXBsYWNlLWV4dCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZGaWxlO1xuXG52YXIgb3duID0ge30uaGFzT3duUHJvcGVydHk7XG52YXIgcHJvdG8gPSBWRmlsZS5wcm90b3R5cGU7XG5cbnByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmc7XG5cbi8qIE9yZGVyIG9mIHNldHRpbmcgKGxlYXN0IHNwZWNpZmljIHRvIG1vc3QpLCB3ZSBuZWVkIHRoaXMgYmVjYXVzZVxuICogb3RoZXJ3aXNlIGB7c3RlbTogJ2EnLCBwYXRoOiAnfi9iLmpzJ31gIHdvdWxkIHRocm93LCBhcyBhIHBhdGhcbiAqIGlzIG5lZWRlZCBiZWZvcmUgYSBzdGVtIGNhbiBiZSBzZXQuICovXG52YXIgb3JkZXIgPSBbXG4gICdoaXN0b3J5JyxcbiAgJ3BhdGgnLFxuICAnYmFzZW5hbWUnLFxuICAnc3RlbScsXG4gICdleHRuYW1lJyxcbiAgJ2Rpcm5hbWUnXG5dO1xuXG4vKiBDb25zdHJ1Y3QgYSBuZXcgZmlsZS4gKi9cbmZ1bmN0aW9uIFZGaWxlKG9wdGlvbnMpIHtcbiAgdmFyIHByb3A7XG4gIHZhciBpbmRleDtcbiAgdmFyIGxlbmd0aDtcblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnIHx8IGJ1ZmZlcihvcHRpb25zKSkge1xuICAgIG9wdGlvbnMgPSB7Y29udGVudHM6IG9wdGlvbnN9O1xuICB9IGVsc2UgaWYgKCdtZXNzYWdlJyBpbiBvcHRpb25zICYmICdtZXNzYWdlcycgaW4gb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFZGaWxlKSkge1xuICAgIHJldHVybiBuZXcgVkZpbGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLmRhdGEgPSB7fTtcbiAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICB0aGlzLmhpc3RvcnkgPSBbXTtcbiAgdGhpcy5jd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8qIFNldCBwYXRoIHJlbGF0ZWQgcHJvcGVydGllcyBpbiB0aGUgY29ycmVjdCBvcmRlci4gKi9cbiAgaW5kZXggPSAtMTtcbiAgbGVuZ3RoID0gb3JkZXIubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcHJvcCA9IG9yZGVyW2luZGV4XTtcblxuICAgIGlmIChvd24uY2FsbChvcHRpb25zLCBwcm9wKSkge1xuICAgICAgdGhpc1twcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgLyogU2V0IG5vbi1wYXRoIHJlbGF0ZWQgcHJvcGVydGllcy4gKi9cbiAgZm9yIChwcm9wIGluIG9wdGlvbnMpIHtcbiAgICBpZiAob3JkZXIuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxufVxuXG4vKiBBY2Nlc3MgZnVsbCBwYXRoIChgfi9pbmRleC5taW4uanNgKS4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3BhdGgnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgYXNzZXJ0Tm9uRW1wdHkocGF0aCwgJ3BhdGgnKTtcblxuICAgIGlmIChwYXRoICE9PSB0aGlzLnBhdGgpIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qIEFjY2VzcyBwYXJlbnQgcGF0aCAoYH5gKS4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ2Rpcm5hbWUnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAnc3RyaW5nJyA/IHBhdGguZGlybmFtZSh0aGlzLnBhdGgpIDogdW5kZWZpbmVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChkaXJuYW1lKSB7XG4gICAgYXNzZXJ0UGF0aCh0aGlzLnBhdGgsICdkaXJuYW1lJyk7XG4gICAgdGhpcy5wYXRoID0gcGF0aC5qb2luKGRpcm5hbWUgfHwgJycsIHRoaXMuYmFzZW5hbWUpO1xuICB9XG59KTtcblxuLyogQWNjZXNzIGJhc2VuYW1lIChgaW5kZXgubWluLmpzYCkuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdiYXNlbmFtZScsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnID8gcGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgpIDogdW5kZWZpbmVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChiYXNlbmFtZSkge1xuICAgIGFzc2VydE5vbkVtcHR5KGJhc2VuYW1lLCAnYmFzZW5hbWUnKTtcbiAgICBhc3NlcnRQYXJ0KGJhc2VuYW1lLCAnYmFzZW5hbWUnKTtcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICcnLCBiYXNlbmFtZSk7XG4gIH1cbn0pO1xuXG4vKiBBY2Nlc3MgZXh0bmFtZSAoYC5qc2ApLiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCAnZXh0bmFtZScsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnID8gcGF0aC5leHRuYW1lKHRoaXMucGF0aCkgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGV4dG5hbWUpIHtcbiAgICB2YXIgZXh0ID0gZXh0bmFtZSB8fCAnJztcblxuICAgIGFzc2VydFBhcnQoZXh0LCAnZXh0bmFtZScpO1xuICAgIGFzc2VydFBhdGgodGhpcy5wYXRoLCAnZXh0bmFtZScpO1xuXG4gICAgaWYgKGV4dCkge1xuICAgICAgaWYgKGV4dC5jaGFyQXQoMCkgIT09ICcuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHQuaW5kZXhPZignLicsIDEpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXRoID0gcmVwbGFjZSh0aGlzLnBhdGgsIGV4dCk7XG4gIH1cbn0pO1xuXG4vKiBBY2Nlc3Mgc3RlbSAoYGluZGV4Lm1pbmApLiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCAnc3RlbScsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnID8gcGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgsIHRoaXMuZXh0bmFtZSkgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHN0ZW0pIHtcbiAgICBhc3NlcnROb25FbXB0eShzdGVtLCAnc3RlbScpO1xuICAgIGFzc2VydFBhcnQoc3RlbSwgJ3N0ZW0nKTtcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICcnLCBzdGVtICsgKHRoaXMuZXh0bmFtZSB8fCAnJykpO1xuICB9XG59KTtcblxuLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmlsZS4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kaW5nKSB7XG4gIHZhciB2YWx1ZSA9IHRoaXMuY29udGVudHMgfHwgJyc7XG4gIHJldHVybiBidWZmZXIodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoZW5jb2RpbmcpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuLyogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBhIHBhdGggKGkuZS4sIGRvZXNcbiAqIG5vdCBjb250YWluIGBwYXRoLnNlcGApLiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGFydChwYXJ0LCBuYW1lKSB7XG4gIGlmIChwYXJ0LmluZGV4T2YocGF0aC5zZXApICE9PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYCcgKyBuYW1lICsgJ2AgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYCcgKyBwYXRoLnNlcCArICdgJyk7XG4gIH1cbn1cblxuLyogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBlbXB0eS4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5KHBhcnQsIG5hbWUpIHtcbiAgaWYgKCFwYXJ0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgJyArIG5hbWUgKyAnYCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgfVxufVxuXG4vKiBBc3NlcnQgYHBhdGhgIGV4aXN0cy4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCwgbmFtZSkge1xuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgYCcgKyBuYW1lICsgJ2AgcmVxdWlyZXMgYHBhdGhgIHRvIGJlIHNldCB0b28nKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTs7OztBQUdBO0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFhQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQXdCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFXQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/vfile/core.js\n"); - -/***/ }), - -/***/ "../node_modules/vfile/index.js": -/*!**************************************!*\ - !*** ../node_modules/vfile/index.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar VMessage = __webpack_require__(/*! vfile-message */ \"../node_modules/vfile-message/index.js\");\n\nvar VFile = __webpack_require__(/*! ./core.js */ \"../node_modules/vfile/core.js\");\n\nmodule.exports = VFile;\nvar proto = VFile.prototype;\nproto.message = message;\nproto.info = info;\nproto.fail = fail;\n/* Slight backwards compatibility. Remove in the future. */\n\nproto.warn = message;\n/* Create a message with `reason` at `position`.\n * When an error is passed in as `reason`, copies the stack. */\n\nfunction message(reason, position, origin) {\n var filePath = this.path;\n var message = new VMessage(reason, position, origin);\n\n if (filePath) {\n message.name = filePath + ':' + message.name;\n message.file = filePath;\n }\n\n message.fatal = false;\n this.messages.push(message);\n return message;\n}\n/* Fail. Creates a vmessage, associates it with the file,\n * and throws it. */\n\n\nfunction fail() {\n var message = this.message.apply(this, arguments);\n message.fatal = true;\n throw message;\n}\n/* Info. Creates a vmessage, associates it with the file,\n * and marks the fatality as null. */\n\n\nfunction info() {\n var message = this.message.apply(this, arguments);\n message.fatal = null;\n return message;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcz9kYWMxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFZNZXNzYWdlID0gcmVxdWlyZSgndmZpbGUtbWVzc2FnZScpO1xudmFyIFZGaWxlID0gcmVxdWlyZSgnLi9jb3JlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVkZpbGU7XG5cbnZhciBwcm90byA9IFZGaWxlLnByb3RvdHlwZTtcblxucHJvdG8ubWVzc2FnZSA9IG1lc3NhZ2U7XG5wcm90by5pbmZvID0gaW5mbztcbnByb3RvLmZhaWwgPSBmYWlsO1xuXG4vKiBTbGlnaHQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICBSZW1vdmUgaW4gdGhlIGZ1dHVyZS4gKi9cbnByb3RvLndhcm4gPSBtZXNzYWdlO1xuXG4vKiBDcmVhdGUgYSBtZXNzYWdlIHdpdGggYHJlYXNvbmAgYXQgYHBvc2l0aW9uYC5cbiAqIFdoZW4gYW4gZXJyb3IgaXMgcGFzc2VkIGluIGFzIGByZWFzb25gLCBjb3BpZXMgdGhlIHN0YWNrLiAqL1xuZnVuY3Rpb24gbWVzc2FnZShyZWFzb24sIHBvc2l0aW9uLCBvcmlnaW4pIHtcbiAgdmFyIGZpbGVQYXRoID0gdGhpcy5wYXRoO1xuICB2YXIgbWVzc2FnZSA9IG5ldyBWTWVzc2FnZShyZWFzb24sIHBvc2l0aW9uLCBvcmlnaW4pO1xuXG4gIGlmIChmaWxlUGF0aCkge1xuICAgIG1lc3NhZ2UubmFtZSA9IGZpbGVQYXRoICsgJzonICsgbWVzc2FnZS5uYW1lO1xuICAgIG1lc3NhZ2UuZmlsZSA9IGZpbGVQYXRoO1xuICB9XG5cbiAgbWVzc2FnZS5mYXRhbCA9IGZhbHNlO1xuXG4gIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblxuICByZXR1cm4gbWVzc2FnZTtcbn1cblxuLyogRmFpbC4gQ3JlYXRlcyBhIHZtZXNzYWdlLCBhc3NvY2lhdGVzIGl0IHdpdGggdGhlIGZpbGUsXG4gKiBhbmQgdGhyb3dzIGl0LiAqL1xuZnVuY3Rpb24gZmFpbCgpIHtcbiAgdmFyIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBtZXNzYWdlLmZhdGFsID0gdHJ1ZTtcblxuICB0aHJvdyBtZXNzYWdlO1xufVxuXG4vKiBJbmZvLiBDcmVhdGVzIGEgdm1lc3NhZ2UsIGFzc29jaWF0ZXMgaXQgd2l0aCB0aGUgZmlsZSxcbiAqIGFuZCBtYXJrcyB0aGUgZmF0YWxpdHkgYXMgbnVsbC4gKi9cbmZ1bmN0aW9uIGluZm8oKSB7XG4gIHZhciBtZXNzYWdlID0gdGhpcy5tZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgbWVzc2FnZS5mYXRhbCA9IG51bGw7XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/vfile/index.js\n"); - -/***/ }), - -/***/ "../node_modules/video.js/dist/alt/video-js-cdn.min.css": -/*!**************************************************************!*\ - !*** ../node_modules/video.js/dist/alt/video-js-cdn.min.css ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("\nvar content = __webpack_require__(/*! !../../../css-loader/dist/cjs.js!../../../postcss-loader/src!../../../sass-loader/dist/cjs.js!./video-js-cdn.min.css */ \"../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../node_modules/video.js/dist/alt/video-js-cdn.min.css\");\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(/*! ../../../style-loader/lib/addStyles.js */ \"../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL2Rpc3QvYWx0L3ZpZGVvLWpzLWNkbi5taW4uY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlby5qcy9kaXN0L2FsdC92aWRlby1qcy1jZG4ubWluLmNzcz9iYjU1Il0sInNvdXJjZXNDb250ZW50IjpbIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi8uLi9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3ZpZGVvLWpzLWNkbi5taW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uLy4uL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdmlkZW8tanMtY2RuLm1pbi5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi8uLi9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3ZpZGVvLWpzLWNkbi5taW4uY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/video.js/dist/alt/video-js-cdn.min.css\n"); - -/***/ }), - -/***/ "../node_modules/video.js/dist/alt/video.core.novtt.min.js": -/*!*****************************************************************!*\ - !*** ../node_modules/video.js/dist/alt/video.core.novtt.min.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n/**\n * @license\n * Video.js 7.6.6 <http://videojs.com/>\n * Copyright Brightcove, Inc. <https://www.brightcove.com/>\n * Available under Apache License Version 2.0\n * <https://github.com/videojs/video.js/blob/master/LICENSE>\n *\n * Includes vtt.js <https://github.com/mozilla/vtt.js>\n * Available under Apache License Version 2.0\n * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>\n */\n\n\n!function (e, t) {\n \"object\" == ( false ? undefined : _typeof(exports)) && \"undefined\" != typeof module ? module.exports = t(__webpack_require__(/*! global/window */ \"../node_modules/video.js/node_modules/global/window.js\"), __webpack_require__(/*! global/document */ \"../node_modules/video.js/node_modules/global/document.js\")) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! global/window */ \"../node_modules/video.js/node_modules/global/window.js\"), __webpack_require__(/*! global/document */ \"../node_modules/video.js/node_modules/global/document.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;\n}(this, function (h, d) {\n h = h && h.hasOwnProperty(\"default\") ? h[\"default\"] : h, d = d && d.hasOwnProperty(\"default\") ? d[\"default\"] : d;\n\n var p = \"7.6.6\",\n l = [],\n e = function e(s, a) {\n return function (e, t, n) {\n var r = a.levels[t],\n i = new RegExp(\"^(\" + r + \")$\");\n\n if (\"log\" !== e && n.unshift(e.toUpperCase() + \":\"), n.unshift(s + \":\"), l && l.push([].concat(n)), h.console) {\n var o = h.console[e];\n o || \"debug\" !== e || (o = h.console.info || h.console.log), o && r && i.test(e) && o[Array.isArray(n) ? \"apply\" : \"call\"](h.console, n);\n }\n };\n };\n\n var f = function t(n) {\n function r() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n i(\"log\", o, t);\n }\n\n var i,\n o = \"info\";\n return i = e(n, r), r.createLogger = function (e) {\n return t(n + \": \" + e);\n }, r.levels = {\n all: \"debug|log|warn|error\",\n off: \"\",\n debug: \"debug|log|warn|error\",\n info: \"log|warn|error\",\n warn: \"warn|error\",\n error: \"error\",\n DEFAULT: o\n }, r.level = function (e) {\n if (\"string\" == typeof e) {\n if (!r.levels.hasOwnProperty(e)) throw new Error('\"' + e + '\" in not a valid log level');\n o = e;\n }\n\n return o;\n }, (r.history = function () {\n return l ? [].concat(l) : [];\n }).filter = function (t) {\n return (l || []).filter(function (e) {\n return new RegExp(\".*\" + t + \".*\").test(e[0]);\n });\n }, r.history.clear = function () {\n l && (l.length = 0);\n }, r.history.disable = function () {\n null !== l && (l.length = 0, l = null);\n }, r.history.enable = function () {\n null === l && (l = []);\n }, r.error = function () {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n return i(\"error\", o, t);\n }, r.warn = function () {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n return i(\"warn\", o, t);\n }, r.debug = function () {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n return i(\"debug\", o, t);\n }, r;\n }(\"VIDEOJS\"),\n v = f.createLogger,\n t = Object.prototype.toString,\n o = function o(e) {\n return s(e) ? Object.keys(e) : [];\n };\n\n function i(t, n) {\n o(t).forEach(function (e) {\n return n(t[e], e);\n });\n }\n\n function y(n) {\n for (var e = arguments.length, t = new Array(1 < e ? e - 1 : 0), r = 1; r < e; r++) {\n t[r - 1] = arguments[r];\n }\n\n return Object.assign ? Object.assign.apply(Object, [n].concat(t)) : (t.forEach(function (e) {\n e && i(e, function (e, t) {\n n[t] = e;\n });\n }), n);\n }\n\n function s(e) {\n return !!e && \"object\" == _typeof(e);\n }\n\n function a(e) {\n return s(e) && \"[object Object]\" === t.call(e) && e.constructor === Object;\n }\n\n function r(e, t) {\n if (!e || !t) return \"\";\n if (\"function\" != typeof h.getComputedStyle) return \"\";\n var n = h.getComputedStyle(e);\n return n ? n.getPropertyValue(t) || n[t] : \"\";\n }\n\n function c(e) {\n return \"string\" == typeof e && /\\S/.test(e);\n }\n\n function n(e) {\n if (/\\s/.test(e)) throw new Error(\"class has illegal whitespace characters\");\n }\n\n function u() {\n return d === h.document;\n }\n\n function g(e) {\n return s(e) && 1 === e.nodeType;\n }\n\n function m() {\n try {\n return h.parent !== h.self;\n } catch (e) {\n return !0;\n }\n }\n\n function _(r) {\n return function (e, t) {\n if (!c(e)) return d[r](null);\n c(t) && (t = d.querySelector(t));\n var n = g(t) ? t : d;\n return n[r] && n[r](e);\n };\n }\n\n function b(e, n, t, r) {\n void 0 === e && (e = \"div\"), void 0 === n && (n = {}), void 0 === t && (t = {});\n var i = d.createElement(e);\n return Object.getOwnPropertyNames(n).forEach(function (e) {\n var t = n[e];\n -1 !== e.indexOf(\"aria-\") || \"role\" === e || \"type\" === e ? (f.warn(\"Setting attributes in the second argument of createEl()\\nhas been deprecated. Use the third argument instead.\\ncreateEl(type, properties, attributes). Attempting to set \" + e + \" to \" + t + \".\"), i.setAttribute(e, t)) : \"textContent\" === e ? T(i, t) : i[e] = t;\n }), Object.getOwnPropertyNames(t).forEach(function (e) {\n i.setAttribute(e, t[e]);\n }), r && $(i, r), i;\n }\n\n function T(e, t) {\n return \"undefined\" == typeof e.textContent ? e.innerText = t : e.textContent = t, e;\n }\n\n function k(e, t) {\n t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e);\n }\n\n function C(e, t) {\n return n(t), e.classList ? e.classList.contains(t) : function (e) {\n return new RegExp(\"(^|\\\\s)\" + e + \"($|\\\\s)\");\n }(t).test(e.className);\n }\n\n function E(e, t) {\n return e.classList ? e.classList.add(t) : C(e, t) || (e.className = (e.className + \" \" + t).trim()), e;\n }\n\n function S(e, t) {\n return e.classList ? e.classList.remove(t) : (n(t), e.className = e.className.split(/\\s+/).filter(function (e) {\n return e !== t;\n }).join(\" \")), e;\n }\n\n function w(e, t, n) {\n var r = C(e, t);\n if (\"function\" == typeof n && (n = n(e, t)), \"boolean\" != typeof n && (n = !r), n !== r) return n ? E(e, t) : S(e, t), e;\n }\n\n function P(n, r) {\n Object.getOwnPropertyNames(r).forEach(function (e) {\n var t = r[e];\n null === t || \"undefined\" == typeof t || !1 === t ? n.removeAttribute(e) : n.setAttribute(e, !0 === t ? \"\" : t);\n });\n }\n\n function x(e) {\n var t = {},\n n = \",autoplay,controls,playsinline,loop,muted,default,defaultMuted,\";\n if (e && e.attributes && 0 < e.attributes.length) for (var r = e.attributes, i = r.length - 1; 0 <= i; i--) {\n var o = r[i].name,\n s = r[i].value;\n \"boolean\" != typeof e[o] && -1 === n.indexOf(\",\" + o + \",\") || (s = null !== s), t[o] = s;\n }\n return t;\n }\n\n function j(e, t) {\n return e.getAttribute(t);\n }\n\n function A(e, t, n) {\n e.setAttribute(t, n);\n }\n\n function I(e, t) {\n e.removeAttribute(t);\n }\n\n function O() {\n d.body.focus(), d.onselectstart = function () {\n return !1;\n };\n }\n\n function D() {\n d.onselectstart = function () {\n return !0;\n };\n }\n\n function M(e) {\n if (e && e.getBoundingClientRect && e.parentNode) {\n var t = e.getBoundingClientRect(),\n n = {};\n return [\"bottom\", \"height\", \"left\", \"right\", \"top\", \"width\"].forEach(function (e) {\n void 0 !== t[e] && (n[e] = t[e]);\n }), n.height || (n.height = parseFloat(r(e, \"height\"))), n.width || (n.width = parseFloat(r(e, \"width\"))), n;\n }\n }\n\n function N(e) {\n var t;\n if (e.getBoundingClientRect && e.parentNode && (t = e.getBoundingClientRect()), !t) return {\n left: 0,\n top: 0\n };\n var n = d.documentElement,\n r = d.body,\n i = n.clientLeft || r.clientLeft || 0,\n o = h.pageXOffset || r.scrollLeft,\n s = t.left + o - i,\n a = n.clientTop || r.clientTop || 0,\n l = h.pageYOffset || r.scrollTop,\n c = t.top + l - a;\n return {\n left: Math.round(s),\n top: Math.round(c)\n };\n }\n\n function L(e, t) {\n var n = {},\n r = N(e),\n i = e.offsetWidth,\n o = e.offsetHeight,\n s = r.top,\n a = r.left,\n l = t.pageY,\n c = t.pageX;\n return t.changedTouches && (c = t.changedTouches[0].pageX, l = t.changedTouches[0].pageY), n.y = Math.max(0, Math.min(1, (s - l + o) / o)), n.x = Math.max(0, Math.min(1, (c - a) / i)), n;\n }\n\n function F(e) {\n return s(e) && 3 === e.nodeType;\n }\n\n function R(e) {\n for (; e.firstChild;) {\n e.removeChild(e.firstChild);\n }\n\n return e;\n }\n\n function B(e) {\n return \"function\" == typeof e && (e = e()), (Array.isArray(e) ? e : [e]).map(function (e) {\n return \"function\" == typeof e && (e = e()), g(e) || F(e) ? e : \"string\" == typeof e && /\\S/.test(e) ? d.createTextNode(e) : void 0;\n }).filter(function (e) {\n return e;\n });\n }\n\n function $(t, e) {\n return B(e).forEach(function (e) {\n return t.appendChild(e);\n }), t;\n }\n\n function H(e, t) {\n return $(R(e), t);\n }\n\n function V(e) {\n return void 0 === e.button && void 0 === e.buttons || 0 === e.button && void 0 === e.buttons || \"mouseup\" === e.type && 0 === e.button && 0 === e.buttons || 0 === e.button && 1 === e.buttons;\n }\n\n var U,\n W = _(\"querySelector\"),\n K = _(\"querySelectorAll\"),\n z = Object.freeze({\n isReal: u,\n isEl: g,\n isInFrame: m,\n createEl: b,\n textContent: T,\n prependTo: k,\n hasClass: C,\n addClass: E,\n removeClass: S,\n toggleClass: w,\n setAttributes: P,\n getAttributes: x,\n getAttribute: j,\n setAttribute: A,\n removeAttribute: I,\n blockTextSelection: O,\n unblockTextSelection: D,\n getBoundingClientRect: M,\n findPosition: N,\n getPointerPosition: L,\n isTextNode: F,\n emptyEl: R,\n normalizeContent: B,\n appendContent: $,\n insertContent: H,\n isSingleLeftClick: V,\n $: W,\n $$: K\n }),\n q = !1,\n G = function G() {\n if (u() && !1 !== U.options.autoSetup) {\n var e = Array.prototype.slice.call(d.getElementsByTagName(\"video\")),\n t = Array.prototype.slice.call(d.getElementsByTagName(\"audio\")),\n n = Array.prototype.slice.call(d.getElementsByTagName(\"video-js\")),\n r = e.concat(t, n);\n if (r && 0 < r.length) for (var i = 0, o = r.length; i < o; i++) {\n var s = r[i];\n\n if (!s || !s.getAttribute) {\n X(1);\n break;\n }\n\n void 0 === s.player && null !== s.getAttribute(\"data-setup\") && U(s);\n } else q || X(1);\n }\n };\n\n function X(e, t) {\n t && (U = t), h.setTimeout(G, e);\n }\n\n function Y() {\n q = !0, h.removeEventListener(\"load\", Y);\n }\n\n u() && (\"complete\" === d.readyState ? Y() : h.addEventListener(\"load\", Y));\n\n function Q(e) {\n var t = d.createElement(\"style\");\n return t.className = e, t;\n }\n\n function J(e, t) {\n e.styleSheet ? e.styleSheet.cssText = t : e.textContent = t;\n }\n\n var Z,\n ee = 3;\n\n function te() {\n return ee++;\n }\n\n h.WeakMap || (Z = function () {\n function e() {\n this.vdata = \"vdata\" + Math.floor(h.performance && h.performance.now() || Date.now()), this.data = {};\n }\n\n var t = e.prototype;\n return t.set = function (e, t) {\n var n = e[this.vdata] || te();\n return e[this.vdata] || (e[this.vdata] = n), this.data[n] = t, this;\n }, t.get = function (e) {\n var t = e[this.vdata];\n if (t) return this.data[t];\n f(\"We have no data for this element\", e);\n }, t.has = function (e) {\n return e[this.vdata] in this.data;\n }, t[\"delete\"] = function (e) {\n var t = e[this.vdata];\n t && (delete this.data[t], delete e[this.vdata]);\n }, e;\n }());\n var ne = h.WeakMap ? new WeakMap() : new Z();\n\n function re(e, t) {\n if (ne.has(e)) {\n var n = ne.get(e);\n 0 === n.handlers[t].length && (delete n.handlers[t], e.removeEventListener ? e.removeEventListener(t, n.dispatcher, !1) : e.detachEvent && e.detachEvent(\"on\" + t, n.dispatcher)), Object.getOwnPropertyNames(n.handlers).length <= 0 && (delete n.handlers, delete n.dispatcher, delete n.disabled), 0 === Object.getOwnPropertyNames(n).length && ne[\"delete\"](e);\n }\n }\n\n function ie(t, n, e, r) {\n e.forEach(function (e) {\n t(n, e, r);\n });\n }\n\n function oe(e) {\n function t() {\n return !0;\n }\n\n function n() {\n return !1;\n }\n\n if (!e || !e.isPropagationStopped) {\n var r = e || h.event;\n\n for (var i in e = {}, r) {\n \"layerX\" !== i && \"layerY\" !== i && \"keyLocation\" !== i && \"webkitMovementX\" !== i && \"webkitMovementY\" !== i && (\"returnValue\" === i && r.preventDefault || (e[i] = r[i]));\n }\n\n if (e.target || (e.target = e.srcElement || d), e.relatedTarget || (e.relatedTarget = e.fromElement === e.target ? e.toElement : e.fromElement), e.preventDefault = function () {\n r.preventDefault && r.preventDefault(), e.returnValue = !1, r.returnValue = !1, e.defaultPrevented = !0;\n }, e.defaultPrevented = !1, e.stopPropagation = function () {\n r.stopPropagation && r.stopPropagation(), e.cancelBubble = !0, r.cancelBubble = !0, e.isPropagationStopped = t;\n }, e.isPropagationStopped = n, e.stopImmediatePropagation = function () {\n r.stopImmediatePropagation && r.stopImmediatePropagation(), e.isImmediatePropagationStopped = t, e.stopPropagation();\n }, e.isImmediatePropagationStopped = n, null !== e.clientX && void 0 !== e.clientX) {\n var o = d.documentElement,\n s = d.body;\n e.pageX = e.clientX + (o && o.scrollLeft || s && s.scrollLeft || 0) - (o && o.clientLeft || s && s.clientLeft || 0), e.pageY = e.clientY + (o && o.scrollTop || s && s.scrollTop || 0) - (o && o.clientTop || s && s.clientTop || 0);\n }\n\n e.which = e.charCode || e.keyCode, null !== e.button && void 0 !== e.button && (e.button = 1 & e.button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0);\n }\n\n return e;\n }\n\n var se = !1;\n !function () {\n try {\n var e = Object.defineProperty({}, \"passive\", {\n get: function get() {\n se = !0;\n }\n });\n h.addEventListener(\"test\", null, e), h.removeEventListener(\"test\", null, e);\n } catch (e) {}\n }();\n var ae = [\"touchstart\", \"touchmove\"];\n\n function le(s, e, t) {\n if (Array.isArray(e)) return ie(le, s, e, t);\n ne.has(s) || ne.set(s, {});\n var a = ne.get(s);\n if (a.handlers || (a.handlers = {}), a.handlers[e] || (a.handlers[e] = []), t.guid || (t.guid = te()), a.handlers[e].push(t), a.dispatcher || (a.disabled = !1, a.dispatcher = function (e, t) {\n if (!a.disabled) {\n e = oe(e);\n var n = a.handlers[e.type];\n if (n) for (var r = n.slice(0), i = 0, o = r.length; i < o && !e.isImmediatePropagationStopped(); i++) {\n try {\n r[i].call(s, e, t);\n } catch (e) {\n f.error(e);\n }\n }\n }\n }), 1 === a.handlers[e].length) if (s.addEventListener) {\n var n = !1;\n se && -1 < ae.indexOf(e) && (n = {\n passive: !0\n }), s.addEventListener(e, a.dispatcher, n);\n } else s.attachEvent && s.attachEvent(\"on\" + e, a.dispatcher);\n }\n\n function ce(e, t, n) {\n if (ne.has(e)) {\n var r = ne.get(e);\n\n if (r.handlers) {\n var _i2 = function _i2(e, t) {\n r.handlers[t] = [], re(e, t);\n };\n\n if (Array.isArray(t)) return ie(ce, e, t, n);\n\n if (void 0 !== t) {\n var o = r.handlers[t];\n if (o) if (n) {\n if (n.guid) for (var s = 0; s < o.length; s++) {\n o[s].guid === n.guid && o.splice(s--, 1);\n }\n re(e, t);\n } else _i2(e, t);\n } else for (var a in r.handlers) {\n Object.prototype.hasOwnProperty.call(r.handlers || {}, a) && _i2(e, a);\n }\n }\n }\n }\n\n function ue(e, t, n) {\n var r = ne.has(e) ? ne.get(e) : {},\n i = e.parentNode || e.ownerDocument;\n if (\"string\" == typeof t ? t = {\n type: t,\n target: e\n } : t.target || (t.target = e), t = oe(t), r.dispatcher && r.dispatcher.call(e, t, n), i && !t.isPropagationStopped() && !0 === t.bubbles) ue.call(null, i, t, n);else if (!i && !t.defaultPrevented && t.target && t.target[t.type]) {\n ne.has(t.target) || ne.set(t.target, {});\n var o = ne.get(t.target);\n t.target[t.type] && (o.disabled = !0, \"function\" == typeof t.target[t.type] && t.target[t.type](), o.disabled = !1);\n }\n return !t.defaultPrevented;\n }\n\n function he(e, t, n) {\n if (Array.isArray(t)) return ie(he, e, t, n);\n\n function r() {\n ce(e, t, r), n.apply(this, arguments);\n }\n\n r.guid = n.guid = n.guid || te(), le(e, t, r);\n }\n\n function de(e, t, n) {\n function r() {\n ce(e, t, r), n.apply(this, arguments);\n }\n\n r.guid = n.guid = n.guid || te(), le(e, t, r);\n }\n\n function pe(e, t, n) {\n t.guid || (t.guid = te());\n var r = t.bind(e);\n return r.guid = n ? n + \"_\" + t.guid : t.guid, r;\n }\n\n function fe(t, n) {\n var r = h.performance.now();\n return function () {\n var e = h.performance.now();\n n <= e - r && (t.apply(void 0, arguments), r = e);\n };\n }\n\n function ve() {}\n\n var ye,\n ge = Object.freeze({\n fixEvent: oe,\n on: le,\n off: ce,\n trigger: ue,\n one: he,\n any: de\n });\n ve.prototype.allowedEvents_ = {}, ve.prototype.addEventListener = ve.prototype.on = function (e, t) {\n var n = this.addEventListener;\n this.addEventListener = function () {}, le(this, e, t), this.addEventListener = n;\n }, ve.prototype.removeEventListener = ve.prototype.off = function (e, t) {\n ce(this, e, t);\n }, ve.prototype.one = function (e, t) {\n var n = this.addEventListener;\n this.addEventListener = function () {}, he(this, e, t), this.addEventListener = n;\n }, ve.prototype.any = function (e, t) {\n var n = this.addEventListener;\n this.addEventListener = function () {}, de(this, e, t), this.addEventListener = n;\n }, ve.prototype.dispatchEvent = ve.prototype.trigger = function (e) {\n var t = e.type || e;\n \"string\" == typeof e && (e = {\n type: t\n }), e = oe(e), this.allowedEvents_[t] && this[\"on\" + t] && this[\"on\" + t](e), ue(this, e);\n }, ve.prototype.queueTrigger = function (e) {\n var t = this;\n ye = ye || new Map();\n var n = e.type || e,\n r = ye.get(this);\n r || (r = new Map(), ye.set(this, r));\n var i = r.get(n);\n r[\"delete\"](n), h.clearTimeout(i);\n var o = h.setTimeout(function () {\n 0 === r.size && (r = null, ye[\"delete\"](t)), t.trigger(e);\n }, 0);\n r.set(n, o);\n };\n\n function me(e) {\n return \"string\" == typeof e && /\\S/.test(e) || Array.isArray(e) && !!e.length;\n }\n\n function _e(e) {\n if (!e.nodeName && !Ee(e)) throw new Error(\"Invalid target; must be a DOM node or evented object.\");\n }\n\n function be(e) {\n if (!me(e)) throw new Error(\"Invalid event type; must be a non-empty string or array.\");\n }\n\n function Te(e) {\n if (\"function\" != typeof e) throw new Error(\"Invalid listener; must be a function.\");\n }\n\n function ke(e, t) {\n var n,\n r,\n i,\n o = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_;\n return i = o ? (n = e.eventBusEl_, 3 <= t.length && t.shift(), r = t[0], t[1]) : (n = t[0], r = t[1], t[2]), _e(n), be(r), Te(i), {\n isTargetingSelf: o,\n target: n,\n type: r,\n listener: i = pe(e, i)\n };\n }\n\n function Ce(e, t, n, r) {\n _e(e), e.nodeName ? ge[t](e, n, r) : e[t](n, r);\n }\n\n var Ee = function Ee(t) {\n return t instanceof ve || !!t.eventBusEl_ && [\"on\", \"one\", \"off\", \"trigger\"].every(function (e) {\n return \"function\" == typeof t[e];\n });\n },\n Se = {\n on: function on() {\n for (var e = this, t = arguments.length, n = new Array(t), r = 0; r < t; r++) {\n n[r] = arguments[r];\n }\n\n var i = ke(this, n),\n o = i.isTargetingSelf,\n s = i.target,\n a = i.type,\n l = i.listener;\n\n if (Ce(s, \"on\", a, l), !o) {\n var _c = function _c() {\n return e.off(s, a, l);\n };\n\n var _u = function _u() {\n return e.off(\"dispose\", _c);\n };\n\n _c.guid = l.guid;\n _u.guid = l.guid, Ce(this, \"on\", \"dispose\", _c), Ce(s, \"on\", \"dispose\", _u);\n }\n },\n one: function one() {\n for (var r = this, e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n var i = ke(this, t),\n o = i.isTargetingSelf,\n s = i.target,\n a = i.type,\n l = i.listener;\n if (o) Ce(s, \"one\", a, l);else {\n var _c2 = function _c2() {\n r.off(s, a, _c2);\n\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n l.apply(null, t);\n };\n\n _c2.guid = l.guid, Ce(s, \"one\", a, _c2);\n }\n },\n any: function any() {\n for (var r = this, e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n var i = ke(this, t),\n o = i.isTargetingSelf,\n s = i.target,\n a = i.type,\n l = i.listener;\n if (o) Ce(s, \"any\", a, l);else {\n var _c3 = function _c3() {\n r.off(s, a, _c3);\n\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n l.apply(null, t);\n };\n\n _c3.guid = l.guid, Ce(s, \"any\", a, _c3);\n }\n },\n off: function off(e, t, n) {\n if (!e || me(e)) ce(this.eventBusEl_, e, t);else {\n var r = e,\n i = t;\n _e(r), be(i), Te(n), n = pe(this, n), this.off(\"dispose\", n), r.nodeName ? (ce(r, i, n), ce(r, \"dispose\", n)) : Ee(r) && (r.off(i, n), r.off(\"dispose\", n));\n }\n },\n trigger: function trigger(e, t) {\n return ue(this.eventBusEl_, e, t);\n }\n };\n\n function we(e, t) {\n void 0 === t && (t = {});\n var n = t.eventBusKey;\n\n if (n) {\n if (!e[n].nodeName) throw new Error('The eventBusKey \"' + n + '\" does not refer to an element.');\n e.eventBusEl_ = e[n];\n } else e.eventBusEl_ = b(\"span\", {\n className: \"vjs-event-bus\"\n });\n\n return y(e, Se), e.eventedCallbacks && e.eventedCallbacks.forEach(function (e) {\n e();\n }), e.on(\"dispose\", function () {\n e.off(), h.setTimeout(function () {\n e.eventBusEl_ = null;\n }, 0);\n }), e;\n }\n\n var Pe = {\n state: {},\n setState: function setState(e) {\n var n,\n r = this;\n return \"function\" == typeof e && (e = e()), i(e, function (e, t) {\n r.state[t] !== e && ((n = n || {})[t] = {\n from: r.state[t],\n to: e\n }), r.state[t] = e;\n }), n && Ee(this) && this.trigger({\n changes: n,\n type: \"statechanged\"\n }), n;\n }\n };\n\n function xe(e, t) {\n return y(e, Pe), e.state = y({}, e.state, t), \"function\" == typeof e.handleStateChanged && Ee(e) && e.on(\"statechanged\", e.handleStateChanged), e;\n }\n\n function je(e) {\n return \"string\" != typeof e ? e : e.replace(/./, function (e) {\n return e.toLowerCase();\n });\n }\n\n function Ae(e) {\n return \"string\" != typeof e ? e : e.replace(/./, function (e) {\n return e.toUpperCase();\n });\n }\n\n function Ie() {\n for (var n = {}, e = arguments.length, t = new Array(e), r = 0; r < e; r++) {\n t[r] = arguments[r];\n }\n\n return t.forEach(function (e) {\n e && i(e, function (e, t) {\n a(e) ? (a(n[t]) || (n[t] = {}), n[t] = Ie(n[t], e)) : n[t] = e;\n });\n }), n;\n }\n\n var Oe = function () {\n function c(e, t, n) {\n if (!e && this.play ? this.player_ = e = this : this.player_ = e, this.parentComponent_ = null, this.options_ = Ie({}, this.options_), t = this.options_ = Ie(this.options_, t), this.id_ = t.id || t.el && t.el.id, !this.id_) {\n var r = e && e.id && e.id() || \"no_player\";\n this.id_ = r + \"_component_\" + te();\n }\n\n var i;\n this.name_ = t.name || null, t.el ? this.el_ = t.el : !1 !== t.createEl && (this.el_ = this.createEl()), !1 !== t.evented && we(this, {\n eventBusKey: this.el_ ? \"el_\" : null\n }), xe(this, this.constructor.defaultState), this.children_ = [], this.childIndex_ = {}, this.childNameIndex_ = {}, h.Set || (i = function () {\n function e() {\n this.set_ = {};\n }\n\n var t = e.prototype;\n return t.has = function (e) {\n return e in this.set_;\n }, t[\"delete\"] = function (e) {\n var t = this.has(e);\n return delete this.set_[e], t;\n }, t.add = function (e) {\n return this.set_[e] = 1, this;\n }, t.forEach = function (e, t) {\n for (var n in this.set_) {\n e.call(t, n, n, this);\n }\n }, e;\n }()), this.setTimeoutIds_ = h.Set ? new Set() : new i(), this.setIntervalIds_ = h.Set ? new Set() : new i(), this.rafIds_ = h.Set ? new Set() : new i(), (this.clearingTimersOnDispose_ = !1) !== t.initChildren && this.initChildren(), this.ready(n), !1 !== t.reportTouchActivity && this.enableTouchActivity();\n }\n\n var e = c.prototype;\n return e.dispose = function () {\n if (this.trigger({\n type: \"dispose\",\n bubbles: !1\n }), this.children_) for (var e = this.children_.length - 1; 0 <= e; e--) {\n this.children_[e].dispose && this.children_[e].dispose();\n }\n this.children_ = null, this.childIndex_ = null, this.childNameIndex_ = null, this.parentComponent_ = null, this.el_ && (this.el_.parentNode && this.el_.parentNode.removeChild(this.el_), ne.has(this.el_) && ne[\"delete\"](this.el_), this.el_ = null), this.player_ = null;\n }, e.player = function () {\n return this.player_;\n }, e.options = function (e) {\n return e && (this.options_ = Ie(this.options_, e)), this.options_;\n }, e.el = function () {\n return this.el_;\n }, e.createEl = function (e, t, n) {\n return b(e, t, n);\n }, e.localize = function (e, i, t) {\n void 0 === t && (t = e);\n var n = this.player_.language && this.player_.language(),\n r = this.player_.languages && this.player_.languages(),\n o = r && r[n],\n s = n && n.split(\"-\")[0],\n a = r && r[s],\n l = t;\n return o && o[e] ? l = o[e] : a && a[e] && (l = a[e]), i && (l = l.replace(/\\{(\\d+)\\}/g, function (e, t) {\n var n = i[t - 1],\n r = n;\n return \"undefined\" == typeof n && (r = e), r;\n })), l;\n }, e.contentEl = function () {\n return this.contentEl_ || this.el_;\n }, e.id = function () {\n return this.id_;\n }, e.name = function () {\n return this.name_;\n }, e.children = function () {\n return this.children_;\n }, e.getChildById = function (e) {\n return this.childIndex_[e];\n }, e.getChild = function (e) {\n if (e) return this.childNameIndex_[e];\n }, e.addChild = function (e, t, n) {\n var r, i;\n\n if (void 0 === t && (t = {}), void 0 === n && (n = this.children_.length), \"string\" == typeof e) {\n i = Ae(e);\n var o = t.componentClass || i;\n t.name = i;\n var s = c.getComponent(o);\n if (!s) throw new Error(\"Component \" + o + \" does not exist\");\n if (\"function\" != typeof s) return null;\n r = new s(this.player_ || this, t);\n } else r = e;\n\n if (r.parentComponent_ && r.parentComponent_.removeChild(r), this.children_.splice(n, 0, r), r.parentComponent_ = this, \"function\" == typeof r.id && (this.childIndex_[r.id()] = r), (i = i || r.name && Ae(r.name())) && (this.childNameIndex_[i] = r, this.childNameIndex_[je(i)] = r), \"function\" == typeof r.el && r.el()) {\n var a = this.contentEl().children[n] || null;\n this.contentEl().insertBefore(r.el(), a);\n }\n\n return r;\n }, e.removeChild = function (e) {\n if (\"string\" == typeof e && (e = this.getChild(e)), e && this.children_) {\n for (var t = !1, n = this.children_.length - 1; 0 <= n; n--) {\n if (this.children_[n] === e) {\n t = !0, this.children_.splice(n, 1);\n break;\n }\n }\n\n if (t) {\n e.parentComponent_ = null, this.childIndex_[e.id()] = null, this.childNameIndex_[Ae(e.name())] = null, this.childNameIndex_[je(e.name())] = null;\n var r = e.el();\n r && r.parentNode === this.contentEl() && this.contentEl().removeChild(e.el());\n }\n }\n }, e.initChildren = function () {\n var i = this,\n r = this.options_.children;\n\n if (r) {\n var e,\n o = this.options_,\n n = c.getComponent(\"Tech\");\n (e = Array.isArray(r) ? r : Object.keys(r)).concat(Object.keys(this.options_).filter(function (t) {\n return !e.some(function (e) {\n return \"string\" == typeof e ? t === e : t === e.name;\n });\n })).map(function (e) {\n var t, n;\n return n = \"string\" == typeof e ? r[t = e] || i.options_[t] || {} : (t = e.name, e), {\n name: t,\n opts: n\n };\n }).filter(function (e) {\n var t = c.getComponent(e.opts.componentClass || Ae(e.name));\n return t && !n.isTech(t);\n }).forEach(function (e) {\n var t = e.name,\n n = e.opts;\n\n if (void 0 !== o[t] && (n = o[t]), !1 !== n) {\n !0 === n && (n = {}), n.playerOptions = i.options_.playerOptions;\n var r = i.addChild(t, n);\n r && (i[t] = r);\n }\n });\n }\n }, e.buildCSSClass = function () {\n return \"\";\n }, e.ready = function (e, t) {\n if (void 0 === t && (t = !1), e) return this.isReady_ ? void (t ? e.call(this) : this.setTimeout(e, 1)) : (this.readyQueue_ = this.readyQueue_ || [], void this.readyQueue_.push(e));\n }, e.triggerReady = function () {\n this.isReady_ = !0, this.setTimeout(function () {\n var e = this.readyQueue_;\n this.readyQueue_ = [], e && 0 < e.length && e.forEach(function (e) {\n e.call(this);\n }, this), this.trigger(\"ready\");\n }, 1);\n }, e.$ = function (e, t) {\n return W(e, t || this.contentEl());\n }, e.$$ = function (e, t) {\n return K(e, t || this.contentEl());\n }, e.hasClass = function (e) {\n return C(this.el_, e);\n }, e.addClass = function (e) {\n E(this.el_, e);\n }, e.removeClass = function (e) {\n S(this.el_, e);\n }, e.toggleClass = function (e, t) {\n w(this.el_, e, t);\n }, e.show = function () {\n this.removeClass(\"vjs-hidden\");\n }, e.hide = function () {\n this.addClass(\"vjs-hidden\");\n }, e.lockShowing = function () {\n this.addClass(\"vjs-lock-showing\");\n }, e.unlockShowing = function () {\n this.removeClass(\"vjs-lock-showing\");\n }, e.getAttribute = function (e) {\n return j(this.el_, e);\n }, e.setAttribute = function (e, t) {\n A(this.el_, e, t);\n }, e.removeAttribute = function (e) {\n I(this.el_, e);\n }, e.width = function (e, t) {\n return this.dimension(\"width\", e, t);\n }, e.height = function (e, t) {\n return this.dimension(\"height\", e, t);\n }, e.dimensions = function (e, t) {\n this.width(e, !0), this.height(t);\n }, e.dimension = function (e, t, n) {\n if (void 0 !== t) return null !== t && t == t || (t = 0), -1 !== (\"\" + t).indexOf(\"%\") || -1 !== (\"\" + t).indexOf(\"px\") ? this.el_.style[e] = t : this.el_.style[e] = \"auto\" === t ? \"\" : t + \"px\", void (n || this.trigger(\"componentresize\"));\n if (!this.el_) return 0;\n var r = this.el_.style[e],\n i = r.indexOf(\"px\");\n return -1 !== i ? parseInt(r.slice(0, i), 10) : parseInt(this.el_[\"offset\" + Ae(e)], 10);\n }, e.currentDimension = function (e) {\n var t = 0;\n if (\"width\" !== e && \"height\" !== e) throw new Error(\"currentDimension only accepts width or height value\");\n\n if (t = r(this.el_, e), 0 === (t = parseFloat(t)) || isNaN(t)) {\n var n = \"offset\" + Ae(e);\n t = this.el_[n];\n }\n\n return t;\n }, e.currentDimensions = function () {\n return {\n width: this.currentDimension(\"width\"),\n height: this.currentDimension(\"height\")\n };\n }, e.currentWidth = function () {\n return this.currentDimension(\"width\");\n }, e.currentHeight = function () {\n return this.currentDimension(\"height\");\n }, e.focus = function () {\n this.el_.focus();\n }, e.blur = function () {\n this.el_.blur();\n }, e.handleKeyDown = function (e) {\n this.player_ && (e.stopPropagation(), this.player_.handleKeyDown(e));\n }, e.handleKeyPress = function (e) {\n this.handleKeyDown(e);\n }, e.emitTapEvents = function () {\n var r,\n t = 0,\n i = null;\n this.on(\"touchstart\", function (e) {\n 1 === e.touches.length && (i = {\n pageX: e.touches[0].pageX,\n pageY: e.touches[0].pageY\n }, t = h.performance.now(), r = !0);\n }), this.on(\"touchmove\", function (e) {\n if (1 < e.touches.length) r = !1;else if (i) {\n var t = e.touches[0].pageX - i.pageX,\n n = e.touches[0].pageY - i.pageY;\n 10 < Math.sqrt(t * t + n * n) && (r = !1);\n }\n });\n\n function e() {\n r = !1;\n }\n\n this.on(\"touchleave\", e), this.on(\"touchcancel\", e), this.on(\"touchend\", function (e) {\n !(i = null) === r && h.performance.now() - t < 200 && (e.preventDefault(), this.trigger(\"tap\"));\n });\n }, e.enableTouchActivity = function () {\n if (this.player() && this.player().reportUserActivity) {\n var _e2 = function _e2(e) {\n n(), this.clearInterval(t);\n };\n\n var t,\n n = pe(this.player(), this.player().reportUserActivity);\n this.on(\"touchstart\", function () {\n n(), this.clearInterval(t), t = this.setInterval(n, 250);\n });\n this.on(\"touchmove\", n), this.on(\"touchend\", _e2), this.on(\"touchcancel\", _e2);\n }\n }, e.setTimeout = function (e, t) {\n var n,\n r = this;\n return e = pe(this, e), this.clearTimersOnDispose_(), n = h.setTimeout(function () {\n r.setTimeoutIds_.has(n) && r.setTimeoutIds_[\"delete\"](n), e();\n }, t), this.setTimeoutIds_.add(n), n;\n }, e.clearTimeout = function (e) {\n return this.setTimeoutIds_.has(e) && (this.setTimeoutIds_[\"delete\"](e), h.clearTimeout(e)), e;\n }, e.setInterval = function (e, t) {\n e = pe(this, e), this.clearTimersOnDispose_();\n var n = h.setInterval(e, t);\n return this.setIntervalIds_.add(n), n;\n }, e.clearInterval = function (e) {\n return this.setIntervalIds_.has(e) && (this.setIntervalIds_[\"delete\"](e), h.clearInterval(e)), e;\n }, e.requestAnimationFrame = function (e) {\n var t,\n n = this;\n return this.supportsRaf_ ? (this.clearTimersOnDispose_(), e = pe(this, e), t = h.requestAnimationFrame(function () {\n n.rafIds_.has(t) && n.rafIds_[\"delete\"](t), e();\n }), this.rafIds_.add(t), t) : this.setTimeout(e, 1e3 / 60);\n }, e.cancelAnimationFrame = function (e) {\n return this.supportsRaf_ ? (this.rafIds_.has(e) && (this.rafIds_[\"delete\"](e), h.cancelAnimationFrame(e)), e) : this.clearTimeout(e);\n }, e.clearTimersOnDispose_ = function () {\n var r = this;\n this.clearingTimersOnDispose_ || (this.clearingTimersOnDispose_ = !0, this.one(\"dispose\", function () {\n [[\"rafIds_\", \"cancelAnimationFrame\"], [\"setTimeoutIds_\", \"clearTimeout\"], [\"setIntervalIds_\", \"clearInterval\"]].forEach(function (e) {\n var t = e[0],\n n = e[1];\n r[t].forEach(r[n], r);\n }), r.clearingTimersOnDispose_ = !1;\n }));\n }, c.registerComponent = function (e, t) {\n if (\"string\" != typeof e || !e) throw new Error('Illegal component name, \"' + e + '\"; must be a non-empty string.');\n var n,\n r = c.getComponent(\"Tech\"),\n i = r && r.isTech(t),\n o = c === t || c.prototype.isPrototypeOf(t.prototype);\n if (i || !o) throw n = i ? \"techs must be registered using Tech.registerTech()\" : \"must be a Component subclass\", new Error('Illegal component, \"' + e + '\"; ' + n + \".\");\n e = Ae(e), c.components_ || (c.components_ = {});\n var s = c.getComponent(\"Player\");\n\n if (\"Player\" === e && s && s.players) {\n var a = s.players,\n l = Object.keys(a);\n if (a && 0 < l.length && l.map(function (e) {\n return a[e];\n }).every(Boolean)) throw new Error(\"Can not register Player component after player has been created.\");\n }\n\n return c.components_[e] = t, c.components_[je(e)] = t;\n }, c.getComponent = function (e) {\n if (e && c.components_) return c.components_[e];\n }, c;\n }();\n\n function De(e, t) {\n e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t;\n }\n\n function Me(e, t) {\n return (Me = Object.setPrototypeOf || function (e, t) {\n return e.__proto__ = t, e;\n })(e, t);\n }\n\n function Ne(e, t, n) {\n return (Ne = function () {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n\n try {\n return Date.prototype.toString.call(Reflect.construct(Date, [], function () {})), !0;\n } catch (e) {\n return !1;\n }\n }() ? Reflect.construct : function (e, t, n) {\n var r = [null];\n r.push.apply(r, t);\n var i = new (Function.bind.apply(e, r))();\n return n && Me(i, n.prototype), i;\n }).apply(null, arguments);\n }\n\n function Le(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n }\n\n Oe.prototype.supportsRaf_ = \"function\" == typeof h.requestAnimationFrame && \"function\" == typeof h.cancelAnimationFrame, Oe.registerComponent(\"Component\", Oe);\n\n var Fe,\n Re,\n Be,\n $e,\n He = h.navigator && h.navigator.userAgent || \"\",\n Ve = /AppleWebKit\\/([\\d.]+)/i.exec(He),\n Ue = Ve ? parseFloat(Ve.pop()) : null,\n We = /iPad/i.test(He),\n Ke = /iPhone/i.test(He) && !We,\n ze = /iPod/i.test(He),\n qe = Ke || We || ze,\n Ge = (Fe = He.match(/OS (\\d+)_/i)) && Fe[1] ? Fe[1] : null,\n Xe = /Android/i.test(He),\n Ye = function () {\n var e = He.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i);\n if (!e) return null;\n var t = e[1] && parseFloat(e[1]),\n n = e[2] && parseFloat(e[2]);\n return t && n ? parseFloat(e[1] + \".\" + e[2]) : t || null;\n }(),\n Qe = Xe && Ye < 5 && Ue < 537,\n Je = /Firefox/i.test(He),\n Ze = /Edge/i.test(He),\n et = !Ze && (/Chrome/i.test(He) || /CriOS/i.test(He)),\n tt = (Re = He.match(/(Chrome|CriOS)\\/(\\d+)/)) && Re[2] ? parseFloat(Re[2]) : null,\n nt = (Be = /MSIE\\s(\\d+)\\.\\d/.exec(He), !($e = Be && parseFloat(Be[1])) && /Trident\\/7.0/i.test(He) && /rv:11.0/.test(He) && ($e = 11), $e),\n rt = /Safari/i.test(He) && !et && !Xe && !Ze,\n it = (rt || qe) && !et,\n ot = /Windows/i.test(He),\n st = u() && (\"ontouchstart\" in h || h.navigator.maxTouchPoints || h.DocumentTouch && h.document instanceof h.DocumentTouch),\n at = Object.freeze({\n IS_IPAD: We,\n IS_IPHONE: Ke,\n IS_IPOD: ze,\n IS_IOS: qe,\n IOS_VERSION: Ge,\n IS_ANDROID: Xe,\n ANDROID_VERSION: Ye,\n IS_NATIVE_ANDROID: Qe,\n IS_FIREFOX: Je,\n IS_EDGE: Ze,\n IS_CHROME: et,\n CHROME_VERSION: tt,\n IE_VERSION: nt,\n IS_SAFARI: rt,\n IS_ANY_SAFARI: it,\n IS_WINDOWS: ot,\n TOUCH_ENABLED: st\n });\n\n function lt(e, t, n, r) {\n return function (e, t, n) {\n if (\"number\" != typeof t || t < 0 || n < t) throw new Error(\"Failed to execute '\" + e + \"' on 'TimeRanges': The index provided (\" + t + \") is non-numeric or out of bounds (0-\" + n + \").\");\n }(e, r, n.length - 1), n[r][t];\n }\n\n function ct(e) {\n return void 0 === e || 0 === e.length ? {\n length: 0,\n start: function start() {\n throw new Error(\"This TimeRanges object is empty\");\n },\n end: function end() {\n throw new Error(\"This TimeRanges object is empty\");\n }\n } : {\n length: e.length,\n start: lt.bind(null, \"start\", 0, e),\n end: lt.bind(null, \"end\", 1, e)\n };\n }\n\n function ut(e, t) {\n return Array.isArray(e) ? ct(e) : void 0 === e || void 0 === t ? ct() : ct([[e, t]]);\n }\n\n function ht(e, t) {\n var n,\n r,\n i = 0;\n if (!t) return 0;\n e && e.length || (e = ut(0, 0));\n\n for (var o = 0; o < e.length; o++) {\n n = e.start(o), t < (r = e.end(o)) && (r = t), i += r - n;\n }\n\n return i / t;\n }\n\n for (var dt, pt = {\n prefixed: !0\n }, ft = [[\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\", \"fullscreen\"], [\"webkitRequestFullscreen\", \"webkitExitFullscreen\", \"webkitFullscreenElement\", \"webkitFullscreenEnabled\", \"webkitfullscreenchange\", \"webkitfullscreenerror\", \"-webkit-full-screen\"], [\"mozRequestFullScreen\", \"mozCancelFullScreen\", \"mozFullScreenElement\", \"mozFullScreenEnabled\", \"mozfullscreenchange\", \"mozfullscreenerror\", \"-moz-full-screen\"], [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\", \"-ms-fullscreen\"]], vt = ft[0], yt = 0; yt < ft.length; yt++) {\n if (ft[yt][1] in d) {\n dt = ft[yt];\n break;\n }\n }\n\n if (dt) {\n for (var gt = 0; gt < dt.length; gt++) {\n pt[vt[gt]] = dt[gt];\n }\n\n pt.prefixed = dt[0] !== vt[0];\n }\n\n function mt(e) {\n if (e instanceof mt) return e;\n \"number\" == typeof e ? this.code = e : \"string\" == typeof e ? this.message = e : s(e) && (\"number\" == typeof e.code && (this.code = e.code), y(this, e)), this.message || (this.message = mt.defaultMessages[this.code] || \"\");\n }\n\n mt.prototype.code = 0, mt.prototype.message = \"\", mt.prototype.status = null, mt.errorTypes = [\"MEDIA_ERR_CUSTOM\", \"MEDIA_ERR_ABORTED\", \"MEDIA_ERR_NETWORK\", \"MEDIA_ERR_DECODE\", \"MEDIA_ERR_SRC_NOT_SUPPORTED\", \"MEDIA_ERR_ENCRYPTED\"], mt.defaultMessages = {\n 1: \"You aborted the media playback\",\n 2: \"A network error caused the media download to fail part-way.\",\n 3: \"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.\",\n 4: \"The media could not be loaded, either because the server or network failed or because the format is not supported.\",\n 5: \"The media is encrypted and we do not have the keys to decrypt it.\"\n };\n\n for (var _t = 0; _t < mt.errorTypes.length; _t++) {\n mt[mt.errorTypes[_t]] = _t, mt.prototype[mt.errorTypes[_t]] = _t;\n }\n\n var bt = function bt(e, t) {\n var n,\n r = null;\n\n try {\n n = JSON.parse(e, t);\n } catch (e) {\n r = e;\n }\n\n return [r, n];\n };\n\n function Tt(e) {\n return null != e && \"function\" == typeof e.then;\n }\n\n function kt(e) {\n Tt(e) && e.then(null, function (e) {});\n }\n\n function Ct(r) {\n return [\"kind\", \"label\", \"language\", \"id\", \"inBandMetadataTrackDispatchType\", \"mode\", \"src\"].reduce(function (e, t, n) {\n return r[t] && (e[t] = r[t]), e;\n }, {\n cues: r.cues && Array.prototype.map.call(r.cues, function (e) {\n return {\n startTime: e.startTime,\n endTime: e.endTime,\n text: e.text,\n id: e.id\n };\n })\n });\n }\n\n var Et = function Et(e) {\n var t = e.$$(\"track\"),\n n = Array.prototype.map.call(t, function (e) {\n return e.track;\n });\n return Array.prototype.map.call(t, function (e) {\n var t = Ct(e.track);\n return e.src && (t.src = e.src), t;\n }).concat(Array.prototype.filter.call(e.textTracks(), function (e) {\n return -1 === n.indexOf(e);\n }).map(Ct));\n },\n St = function St(e, n) {\n return e.forEach(function (e) {\n var t = n.addRemoteTextTrack(e).track;\n !e.src && e.cues && e.cues.forEach(function (e) {\n return t.addCue(e);\n });\n }), n.textTracks();\n };\n\n var wt,\n Pt = (function (e, t) {\n function n(e) {\n if (e && \"object\" == _typeof(e)) {\n var t = e.which || e.keyCode || e.charCode;\n t && (e = t);\n }\n\n if (\"number\" == typeof e) return s[e];\n var n,\n r = String(e);\n return (n = i[r.toLowerCase()]) ? n : (n = o[r.toLowerCase()]) || (1 === r.length ? r.charCodeAt(0) : void 0);\n }\n\n n.isEventKey = function (e, t) {\n if (e && \"object\" == _typeof(e)) {\n var n = e.which || e.keyCode || e.charCode;\n if (null == n) return !1;\n\n if (\"string\" == typeof t) {\n var r;\n if (r = i[t.toLowerCase()]) return r === n;\n if (r = o[t.toLowerCase()]) return r === n;\n } else if (\"number\" == typeof t) return t === n;\n\n return !1;\n }\n };\n\n var i = (t = e.exports = n).code = t.codes = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n ctrl: 17,\n alt: 18,\n \"pause/break\": 19,\n \"caps lock\": 20,\n esc: 27,\n space: 32,\n \"page up\": 33,\n \"page down\": 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n insert: 45,\n \"delete\": 46,\n command: 91,\n \"left command\": 91,\n \"right command\": 93,\n \"numpad *\": 106,\n \"numpad +\": 107,\n \"numpad -\": 109,\n \"numpad .\": 110,\n \"numpad /\": 111,\n \"num lock\": 144,\n \"scroll lock\": 145,\n \"my computer\": 182,\n \"my calculator\": 183,\n \";\": 186,\n \"=\": 187,\n \",\": 188,\n \"-\": 189,\n \".\": 190,\n \"/\": 191,\n \"`\": 192,\n \"[\": 219,\n \"\\\\\": 220,\n \"]\": 221,\n \"'\": 222\n },\n o = t.aliases = {\n windows: 91,\n \"⇧\": 16,\n \"⌥\": 18,\n \"⌃\": 17,\n \"⌘\": 91,\n ctl: 17,\n control: 17,\n option: 18,\n pause: 19,\n \"break\": 19,\n caps: 20,\n \"return\": 13,\n escape: 27,\n spc: 32,\n spacebar: 32,\n pgup: 33,\n pgdn: 34,\n ins: 45,\n del: 46,\n cmd: 91\n };\n\n for (r = 97; r < 123; r++) {\n i[String.fromCharCode(r)] = r - 32;\n }\n\n for (var r = 48; r < 58; r++) {\n i[r - 48] = r;\n }\n\n for (r = 1; r < 13; r++) {\n i[\"f\" + r] = r + 111;\n }\n\n for (r = 0; r < 10; r++) {\n i[\"numpad \" + r] = r + 96;\n }\n\n var s = t.names = t.title = {};\n\n for (r in i) {\n s[i[r]] = r;\n }\n\n for (var a in o) {\n i[a] = o[a];\n }\n }(wt = {\n exports: {}\n }, wt.exports), wt.exports),\n xt = (Pt.code, Pt.codes, Pt.aliases, Pt.names, Pt.title, \"vjs-modal-dialog\"),\n jt = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).opened_ = n.hasBeenOpened_ = n.hasBeenFilled_ = !1, n.closeable(!n.options_.uncloseable), n.content(n.options_.content), n.contentEl_ = b(\"div\", {\n className: xt + \"-content\"\n }, {\n role: \"document\"\n }), n.descEl_ = b(\"p\", {\n className: xt + \"-description vjs-control-text\",\n id: n.el().getAttribute(\"aria-describedby\")\n }), T(n.descEl_, n.description()), n.el_.appendChild(n.descEl_), n.el_.appendChild(n.contentEl_), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: this.buildCSSClass(),\n tabIndex: -1\n }, {\n \"aria-describedby\": this.id() + \"_description\",\n \"aria-hidden\": \"true\",\n \"aria-label\": this.label(),\n role: \"dialog\"\n });\n }, t.dispose = function () {\n this.contentEl_ = null, this.descEl_ = null, this.previouslyActiveEl_ = null, r.prototype.dispose.call(this);\n }, t.buildCSSClass = function () {\n return xt + \" vjs-hidden \" + r.prototype.buildCSSClass.call(this);\n }, t.label = function () {\n return this.localize(this.options_.label || \"Modal Window\");\n }, t.description = function () {\n var e = this.options_.description || this.localize(\"This is a modal window.\");\n return this.closeable() && (e += \" \" + this.localize(\"This modal can be closed by pressing the Escape key or activating the close button.\")), e;\n }, t.open = function () {\n if (!this.opened_) {\n var e = this.player();\n this.trigger(\"beforemodalopen\"), this.opened_ = !0, !this.options_.fillAlways && (this.hasBeenOpened_ || this.hasBeenFilled_) || this.fill(), this.wasPlaying_ = !e.paused(), this.options_.pauseOnOpen && this.wasPlaying_ && e.pause(), this.on(\"keydown\", this.handleKeyDown), this.hadControls_ = e.controls(), e.controls(!1), this.show(), this.conditionalFocus_(), this.el().setAttribute(\"aria-hidden\", \"false\"), this.trigger(\"modalopen\"), this.hasBeenOpened_ = !0;\n }\n }, t.opened = function (e) {\n return \"boolean\" == typeof e && this[e ? \"open\" : \"close\"](), this.opened_;\n }, t.close = function () {\n if (this.opened_) {\n var e = this.player();\n this.trigger(\"beforemodalclose\"), this.opened_ = !1, this.wasPlaying_ && this.options_.pauseOnOpen && e.play(), this.off(\"keydown\", this.handleKeyDown), this.hadControls_ && e.controls(!0), this.hide(), this.el().setAttribute(\"aria-hidden\", \"true\"), this.trigger(\"modalclose\"), this.conditionalBlur_(), this.options_.temporary && this.dispose();\n }\n }, t.closeable = function (e) {\n if (\"boolean\" == typeof e) {\n var t = this.closeable_ = !!e,\n n = this.getChild(\"closeButton\");\n\n if (t && !n) {\n var r = this.contentEl_;\n this.contentEl_ = this.el_, n = this.addChild(\"closeButton\", {\n controlText: \"Close Modal Dialog\"\n }), this.contentEl_ = r, this.on(n, \"close\", this.close);\n }\n\n !t && n && (this.off(n, \"close\", this.close), this.removeChild(n), n.dispose());\n }\n\n return this.closeable_;\n }, t.fill = function () {\n this.fillWith(this.content());\n }, t.fillWith = function (e) {\n var t = this.contentEl(),\n n = t.parentNode,\n r = t.nextSibling;\n this.trigger(\"beforemodalfill\"), this.hasBeenFilled_ = !0, n.removeChild(t), this.empty(), H(t, e), this.trigger(\"modalfill\"), r ? n.insertBefore(t, r) : n.appendChild(t);\n var i = this.getChild(\"closeButton\");\n i && n.appendChild(i.el_);\n }, t.empty = function () {\n this.trigger(\"beforemodalempty\"), R(this.contentEl()), this.trigger(\"modalempty\");\n }, t.content = function (e) {\n return \"undefined\" != typeof e && (this.content_ = e), this.content_;\n }, t.conditionalFocus_ = function () {\n var e = d.activeElement,\n t = this.player_.el_;\n this.previouslyActiveEl_ = null, !t.contains(e) && t !== e || (this.previouslyActiveEl_ = e, this.focus());\n }, t.conditionalBlur_ = function () {\n this.previouslyActiveEl_ && (this.previouslyActiveEl_.focus(), this.previouslyActiveEl_ = null);\n }, t.handleKeyDown = function (e) {\n if (e.stopPropagation(), Pt.isEventKey(e, \"Escape\") && this.closeable()) return e.preventDefault(), void this.close();\n\n if (Pt.isEventKey(e, \"Tab\")) {\n for (var t, n = this.focusableEls_(), r = this.el_.querySelector(\":focus\"), i = 0; i < n.length; i++) {\n if (r === n[i]) {\n t = i;\n break;\n }\n }\n\n d.activeElement === this.el_ && (t = 0), e.shiftKey && 0 === t ? (n[n.length - 1].focus(), e.preventDefault()) : e.shiftKey || t !== n.length - 1 || (n[0].focus(), e.preventDefault());\n }\n }, t.focusableEls_ = function () {\n var e = this.el_.querySelectorAll(\"*\");\n return Array.prototype.filter.call(e, function (e) {\n return (e instanceof h.HTMLAnchorElement || e instanceof h.HTMLAreaElement) && e.hasAttribute(\"href\") || (e instanceof h.HTMLInputElement || e instanceof h.HTMLSelectElement || e instanceof h.HTMLTextAreaElement || e instanceof h.HTMLButtonElement) && !e.hasAttribute(\"disabled\") || e instanceof h.HTMLIFrameElement || e instanceof h.HTMLObjectElement || e instanceof h.HTMLEmbedElement || e.hasAttribute(\"tabindex\") && -1 !== e.getAttribute(\"tabindex\") || e.hasAttribute(\"contenteditable\");\n });\n }, e;\n }(Oe);\n\n jt.prototype.options_ = {\n pauseOnOpen: !0,\n temporary: !0\n }, Oe.registerComponent(\"ModalDialog\", jt);\n\n var At = function (r) {\n function e(e) {\n var t;\n void 0 === e && (e = []), (t = r.call(this) || this).tracks_ = [], Object.defineProperty(Le(t), \"length\", {\n get: function get() {\n return this.tracks_.length;\n }\n });\n\n for (var n = 0; n < e.length; n++) {\n t.addTrack(e[n]);\n }\n\n return t;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.addTrack = function (e) {\n var t = this.tracks_.length;\n \"\" + t in this || Object.defineProperty(this, t, {\n get: function get() {\n return this.tracks_[t];\n }\n }), -1 === this.tracks_.indexOf(e) && (this.tracks_.push(e), this.trigger({\n track: e,\n type: \"addtrack\",\n target: this\n }));\n }, t.removeTrack = function (e) {\n for (var t, n = 0, r = this.length; n < r; n++) {\n if (this[n] === e) {\n (t = this[n]).off && t.off(), this.tracks_.splice(n, 1);\n break;\n }\n }\n\n t && this.trigger({\n track: t,\n type: \"removetrack\",\n target: this\n });\n }, t.getTrackById = function (e) {\n for (var t = null, n = 0, r = this.length; n < r; n++) {\n var i = this[n];\n\n if (i.id === e) {\n t = i;\n break;\n }\n }\n\n return t;\n }, e;\n }(ve);\n\n for (var It in At.prototype.allowedEvents_ = {\n change: \"change\",\n addtrack: \"addtrack\",\n removetrack: \"removetrack\"\n }, At.prototype.allowedEvents_) {\n At.prototype[\"on\" + It] = null;\n }\n\n function Ot(e, t) {\n for (var n = 0; n < e.length; n++) {\n Object.keys(e[n]).length && t.id !== e[n].id && (e[n].enabled = !1);\n }\n }\n\n function Dt(e, t) {\n for (var n = 0; n < e.length; n++) {\n Object.keys(e[n]).length && t.id !== e[n].id && (e[n].selected = !1);\n }\n }\n\n function Mt(e) {\n var t = [\"protocol\", \"hostname\", \"port\", \"pathname\", \"search\", \"hash\", \"host\"],\n n = d.createElement(\"a\");\n n.href = e;\n var r,\n i = \"\" === n.host && \"file:\" !== n.protocol;\n i && ((r = d.createElement(\"div\")).innerHTML = '<a href=\"' + e + '\"></a>', n = r.firstChild, r.setAttribute(\"style\", \"display:none; position:absolute;\"), d.body.appendChild(r));\n\n for (var o = {}, s = 0; s < t.length; s++) {\n o[t[s]] = n[t[s]];\n }\n\n return \"http:\" === o.protocol && (o.host = o.host.replace(/:80$/, \"\")), \"https:\" === o.protocol && (o.host = o.host.replace(/:443$/, \"\")), o.protocol || (o.protocol = h.location.protocol), i && d.body.removeChild(r), o;\n }\n\n function Nt(e) {\n if (!e.match(/^https?:\\/\\//)) {\n var t = d.createElement(\"div\");\n t.innerHTML = '<a href=\"' + e + '\">x</a>', e = t.firstChild.href;\n }\n\n return e;\n }\n\n function Lt(e) {\n if (\"string\" == typeof e) {\n var t = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/.exec(e);\n if (t) return t.pop().toLowerCase();\n }\n\n return \"\";\n }\n\n function Ft(e) {\n var t = h.location,\n n = Mt(e);\n return (\":\" === n.protocol ? t.protocol : n.protocol) + n.host !== t.protocol + t.host;\n }\n\n var Rt = function (r) {\n function e(e) {\n var t;\n void 0 === e && (e = []);\n\n for (var n = e.length - 1; 0 <= n; n--) {\n if (e[n].enabled) {\n Ot(e, e[n]);\n break;\n }\n }\n\n return (t = r.call(this, e) || this).changing_ = !1, t;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.addTrack = function (e) {\n var t = this;\n e.enabled && Ot(this, e), r.prototype.addTrack.call(this, e), e.addEventListener && (e.enabledChange_ = function () {\n t.changing_ || (t.changing_ = !0, Ot(t, e), t.changing_ = !1, t.trigger(\"change\"));\n }, e.addEventListener(\"enabledchange\", e.enabledChange_));\n }, t.removeTrack = function (e) {\n r.prototype.removeTrack.call(this, e), e.removeEventListener && e.enabledChange_ && (e.removeEventListener(\"enabledchange\", e.enabledChange_), e.enabledChange_ = null);\n }, e;\n }(At),\n Bt = function (r) {\n function e(e) {\n var t;\n void 0 === e && (e = []);\n\n for (var n = e.length - 1; 0 <= n; n--) {\n if (e[n].selected) {\n Dt(e, e[n]);\n break;\n }\n }\n\n return (t = r.call(this, e) || this).changing_ = !1, Object.defineProperty(Le(t), \"selectedIndex\", {\n get: function get() {\n for (var e = 0; e < this.length; e++) {\n if (this[e].selected) return e;\n }\n\n return -1;\n },\n set: function set() {}\n }), t;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.addTrack = function (e) {\n var t = this;\n e.selected && Dt(this, e), r.prototype.addTrack.call(this, e), e.addEventListener && (e.selectedChange_ = function () {\n t.changing_ || (t.changing_ = !0, Dt(t, e), t.changing_ = !1, t.trigger(\"change\"));\n }, e.addEventListener(\"selectedchange\", e.selectedChange_));\n }, t.removeTrack = function (e) {\n r.prototype.removeTrack.call(this, e), e.removeEventListener && e.selectedChange_ && (e.removeEventListener(\"selectedchange\", e.selectedChange_), e.selectedChange_ = null);\n }, e;\n }(At),\n $t = function (n) {\n function e() {\n return n.apply(this, arguments) || this;\n }\n\n De(e, n);\n var t = e.prototype;\n return t.addTrack = function (e) {\n var t = this;\n n.prototype.addTrack.call(this, e), this.queueChange_ || (this.queueChange_ = function () {\n return t.queueTrigger(\"change\");\n }), this.triggerSelectedlanguagechange || (this.triggerSelectedlanguagechange_ = function () {\n return t.trigger(\"selectedlanguagechange\");\n }), e.addEventListener(\"modechange\", this.queueChange_);\n -1 === [\"metadata\", \"chapters\"].indexOf(e.kind) && e.addEventListener(\"modechange\", this.triggerSelectedlanguagechange_);\n }, t.removeTrack = function (e) {\n n.prototype.removeTrack.call(this, e), e.removeEventListener && (this.queueChange_ && e.removeEventListener(\"modechange\", this.queueChange_), this.selectedlanguagechange_ && e.removeEventListener(\"modechange\", this.triggerSelectedlanguagechange_));\n }, e;\n }(At),\n Ht = function () {\n function e(e) {\n void 0 === e && (e = []), this.trackElements_ = [], Object.defineProperty(this, \"length\", {\n get: function get() {\n return this.trackElements_.length;\n }\n });\n\n for (var t = 0, n = e.length; t < n; t++) {\n this.addTrackElement_(e[t]);\n }\n }\n\n var t = e.prototype;\n return t.addTrackElement_ = function (e) {\n var t = this.trackElements_.length;\n \"\" + t in this || Object.defineProperty(this, t, {\n get: function get() {\n return this.trackElements_[t];\n }\n }), -1 === this.trackElements_.indexOf(e) && this.trackElements_.push(e);\n }, t.getTrackElementByTrack_ = function (e) {\n for (var t, n = 0, r = this.trackElements_.length; n < r; n++) {\n if (e === this.trackElements_[n].track) {\n t = this.trackElements_[n];\n break;\n }\n }\n\n return t;\n }, t.removeTrackElement_ = function (e) {\n for (var t = 0, n = this.trackElements_.length; t < n; t++) {\n if (e === this.trackElements_[t]) {\n this.trackElements_[t].track && \"function\" == typeof this.trackElements_[t].track.off && this.trackElements_[t].track.off(), \"function\" == typeof this.trackElements_[t].off && this.trackElements_[t].off(), this.trackElements_.splice(t, 1);\n break;\n }\n }\n }, e;\n }(),\n Vt = function () {\n function t(e) {\n t.prototype.setCues_.call(this, e), Object.defineProperty(this, \"length\", {\n get: function get() {\n return this.length_;\n }\n });\n }\n\n var e = t.prototype;\n return e.setCues_ = function (e) {\n var t = this.length || 0,\n n = 0,\n r = e.length;\n this.cues_ = e, this.length_ = e.length;\n\n function i(e) {\n \"\" + e in this || Object.defineProperty(this, \"\" + e, {\n get: function get() {\n return this.cues_[e];\n }\n });\n }\n\n if (t < r) for (n = t; n < r; n++) {\n i.call(this, n);\n }\n }, e.getCueById = function (e) {\n for (var t = null, n = 0, r = this.length; n < r; n++) {\n var i = this[n];\n\n if (i.id === e) {\n t = i;\n break;\n }\n }\n\n return t;\n }, t;\n }(),\n Ut = {\n alternative: \"alternative\",\n captions: \"captions\",\n main: \"main\",\n sign: \"sign\",\n subtitles: \"subtitles\",\n commentary: \"commentary\"\n },\n Wt = {\n alternative: \"alternative\",\n descriptions: \"descriptions\",\n main: \"main\",\n \"main-desc\": \"main-desc\",\n translation: \"translation\",\n commentary: \"commentary\"\n },\n Kt = {\n subtitles: \"subtitles\",\n captions: \"captions\",\n descriptions: \"descriptions\",\n chapters: \"chapters\",\n metadata: \"metadata\"\n },\n zt = {\n disabled: \"disabled\",\n hidden: \"hidden\",\n showing: \"showing\"\n },\n qt = function (o) {\n function e(e) {\n var t;\n void 0 === e && (e = {}), t = o.call(this) || this;\n\n function n(e) {\n Object.defineProperty(Le(t), e, {\n get: function get() {\n return r[e];\n },\n set: function set() {}\n });\n }\n\n var r = {\n id: e.id || \"vjs_track_\" + te(),\n kind: e.kind || \"\",\n label: e.label || \"\",\n language: e.language || \"\"\n };\n\n for (var i in r) {\n n(i);\n }\n\n return t;\n }\n\n return De(e, o), e;\n }(ve),\n Gt = Object.freeze({\n parseUrl: Mt,\n getAbsoluteURL: Nt,\n getFileExtension: Lt,\n isCrossOrigin: Ft\n }),\n Xt = function Xt(e) {\n var t = Yt.call(e);\n return \"[object Function]\" === t || \"function\" == typeof e && \"[object RegExp]\" !== t || \"undefined\" != typeof window && (e === window.setTimeout || e === window.alert || e === window.confirm || e === window.prompt);\n },\n Yt = Object.prototype.toString;\n\n function Qt(e) {\n var t = nn.call(e),\n n = \"[object Arguments]\" === t;\n return n = n || \"[object Array]\" !== t && null !== e && \"object\" == _typeof(e) && \"number\" == typeof e.length && 0 <= e.length && \"[object Function]\" === nn.call(e.callee);\n }\n\n var Jt,\n Zt = Array.prototype.slice,\n en = Object.prototype.toString,\n tn = Function.prototype.bind || function (t) {\n var n = this;\n if (\"function\" != typeof n || \"[object Function]\" !== en.call(n)) throw new TypeError(\"Function.prototype.bind called on incompatible \" + n);\n\n for (var r, i = Zt.call(arguments, 1), e = Math.max(0, n.length - i.length), o = [], s = 0; s < e; s++) {\n o.push(\"$\" + s);\n }\n\n if (r = Function(\"binder\", \"return function (\" + o.join(\",\") + \"){ return binder.apply(this,arguments); }\")(function () {\n if (this instanceof r) {\n var e = n.apply(this, i.concat(Zt.call(arguments)));\n return Object(e) === e ? e : this;\n }\n\n return n.apply(t, i.concat(Zt.call(arguments)));\n }), n.prototype) {\n var _a = function _a() {};\n\n _a.prototype = n.prototype, r.prototype = new _a(), _a.prototype = null;\n }\n\n return r;\n },\n nn = Object.prototype.toString;\n\n if (!Object.keys) {\n var rn = function rn(e) {\n var t = e.constructor;\n return t && t.prototype === e;\n };\n\n var on = Object.prototype.hasOwnProperty,\n sn = Object.prototype.toString,\n an = Qt,\n ln = Object.prototype.propertyIsEnumerable,\n cn = !ln.call({\n toString: null\n }, \"toString\"),\n un = ln.call(function () {}, \"prototype\"),\n hn = [\"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\"],\n dn = {\n $applicationCache: !0,\n $console: !0,\n $external: !0,\n $frame: !0,\n $frameElement: !0,\n $frames: !0,\n $innerHeight: !0,\n $innerWidth: !0,\n $onmozfullscreenchange: !0,\n $onmozfullscreenerror: !0,\n $outerHeight: !0,\n $outerWidth: !0,\n $pageXOffset: !0,\n $pageYOffset: !0,\n $parent: !0,\n $scrollLeft: !0,\n $scrollTop: !0,\n $scrollX: !0,\n $scrollY: !0,\n $self: !0,\n $webkitIndexedDB: !0,\n $webkitStorageInfo: !0,\n $window: !0\n },\n pn = function () {\n if (\"undefined\" == typeof window) return !1;\n\n for (var e in window) {\n try {\n if (!dn[\"$\" + e] && on.call(window, e) && null !== window[e] && \"object\" == _typeof(window[e])) try {\n rn(window[e]);\n } catch (e) {\n return !0;\n }\n } catch (e) {\n return !0;\n }\n }\n\n return !1;\n }();\n\n Jt = function Jt(e) {\n var t = null !== e && \"object\" == _typeof(e),\n n = \"[object Function]\" === sn.call(e),\n r = an(e),\n i = t && \"[object String]\" === sn.call(e),\n o = [];\n\n if (!t && !n && !r) throw new TypeError(\"Object.keys called on a non-object\");\n var s = un && n;\n if (i && 0 < e.length && !on.call(e, 0)) for (var a = 0; a < e.length; ++a) {\n o.push(String(a));\n }\n if (r && 0 < e.length) for (var l = 0; l < e.length; ++l) {\n o.push(String(l));\n } else for (var c in e) {\n s && \"prototype\" === c || !on.call(e, c) || o.push(String(c));\n }\n if (cn) for (var u = function (e) {\n if (\"undefined\" == typeof window || !pn) return rn(e);\n\n try {\n return rn(e);\n } catch (e) {\n return !1;\n }\n }(e), h = 0; h < hn.length; ++h) {\n u && \"constructor\" === hn[h] || !on.call(e, hn[h]) || o.push(hn[h]);\n }\n return o;\n };\n }\n\n var fn = Jt,\n vn = Array.prototype.slice,\n yn = Object.keys,\n gn = yn ? function (e) {\n return yn(e);\n } : fn,\n mn = Object.keys;\n\n gn.shim = function () {\n Object.keys ? function () {\n var e = Object.keys(arguments);\n return e && e.length === arguments.length;\n }(1, 2) || (Object.keys = function (e) {\n return Qt(e) ? mn(vn.call(e)) : mn(e);\n }) : Object.keys = gn;\n return Object.keys || gn;\n };\n\n function _n(e, t, n, r) {\n t in e && (!function (e) {\n return \"function\" == typeof e && \"[object Function]\" === Cn.call(e);\n }(r) || !r()) || (wn ? Sn(e, t, {\n configurable: !0,\n enumerable: !1,\n value: n,\n writable: !0\n }) : e[t] = n);\n }\n\n function bn(e, t, n) {\n var r = 2 < arguments.length ? n : {},\n i = Tn(t);\n kn && (i = En.call(i, Object.getOwnPropertySymbols(t)));\n\n for (var o = 0; o < i.length; o += 1) {\n _n(e, i[o], t[i[o]], r[i[o]]);\n }\n }\n\n var Tn = gn,\n kn = \"function\" == typeof Symbol && \"symbol\" == _typeof(Symbol(\"foo\")),\n Cn = Object.prototype.toString,\n En = Array.prototype.concat,\n Sn = Object.defineProperty,\n wn = Sn && function () {\n var e = {};\n\n try {\n for (var t in Sn(e, \"x\", {\n enumerable: !1,\n value: e\n }), e) {\n return !1;\n }\n\n return e.x === e;\n } catch (e) {\n return !1;\n }\n }();\n\n bn.supportsDescriptors = !!wn;\n\n function Pn(e, t) {\n if (1 < arguments.length && \"boolean\" != typeof t) throw new TypeError('\"allowMissing\" argument must be a boolean');\n var n = \"$ \" + e;\n if (!(n in Hn)) throw new SyntaxError(\"intrinsic \" + e + \" does not exist!\");\n if (\"undefined\" == typeof Hn[n] && !t) throw new TypeError(\"intrinsic \" + e + \" exists, but is not available. Please file an issue!\");\n return Hn[n];\n }\n\n function xn(e, t, n, r) {\n var i = Kn[t];\n if (\"function\" != typeof i) throw new Wn(\"unknown record type: \" + t);\n if (!i(e, r)) throw new Un(n + \" must be a \" + t);\n }\n\n function jn(e) {\n return 0 <= e ? 1 : -1;\n }\n\n function An(e) {\n try {\n var t = Xn.call(e);\n return Yn.test(t);\n } catch (e) {\n return !1;\n }\n }\n\n function In(e) {\n if (!e) return !1;\n if (\"function\" != typeof e && \"object\" != _typeof(e)) return !1;\n if (\"function\" == typeof e && !e.prototype) return !0;\n if (Jn) return function (e) {\n try {\n return !An(e) && (Xn.call(e), !0);\n } catch (e) {\n return !1;\n }\n }(e);\n if (An(e)) return !1;\n var t = Qn.call(e);\n return \"[object Function]\" === t || \"[object GeneratorFunction]\" === t;\n }\n\n function On(e) {\n return null === e || \"function\" != typeof e && \"object\" != _typeof(e);\n }\n\n function Dn() {\n var e = ir.ToString(ir.CheckObjectCoercible(this));\n return or(or(e, sr, \"\"), ar, \"\");\n }\n\n function Mn() {\n return String.prototype.trim && \"​\" === \"​\".trim() ? String.prototype.trim : Dn;\n }\n\n var Nn,\n Ln = bn,\n Fn = Object.getOwnPropertyDescriptor ? function () {\n return Object.getOwnPropertyDescriptor(arguments, \"callee\").get;\n }() : function () {\n throw new TypeError();\n },\n Rn = \"function\" == typeof Symbol && \"symbol\" == _typeof(Symbol.iterator),\n Bn = Object.getPrototypeOf || function (e) {\n return e.__proto__;\n },\n $n = \"undefined\" == typeof Uint8Array ? Nn : Bn(Uint8Array),\n Hn = {\n \"$ %Array%\": Array,\n \"$ %ArrayBuffer%\": \"undefined\" == typeof ArrayBuffer ? Nn : ArrayBuffer,\n \"$ %ArrayBufferPrototype%\": \"undefined\" == typeof ArrayBuffer ? Nn : ArrayBuffer.prototype,\n \"$ %ArrayIteratorPrototype%\": Rn ? Bn([][Symbol.iterator]()) : Nn,\n \"$ %ArrayPrototype%\": Array.prototype,\n \"$ %ArrayProto_entries%\": Array.prototype.entries,\n \"$ %ArrayProto_forEach%\": Array.prototype.forEach,\n \"$ %ArrayProto_keys%\": Array.prototype.keys,\n \"$ %ArrayProto_values%\": Array.prototype.values,\n \"$ %AsyncFromSyncIteratorPrototype%\": Nn,\n \"$ %AsyncFunction%\": void 0,\n \"$ %AsyncFunctionPrototype%\": Nn,\n \"$ %AsyncGenerator%\": Nn,\n \"$ %AsyncGeneratorFunction%\": void 0,\n \"$ %AsyncGeneratorPrototype%\": Nn,\n \"$ %AsyncIteratorPrototype%\": Nn,\n \"$ %Atomics%\": \"undefined\" == typeof Atomics ? Nn : Atomics,\n \"$ %Boolean%\": Boolean,\n \"$ %BooleanPrototype%\": Boolean.prototype,\n \"$ %DataView%\": \"undefined\" == typeof DataView ? Nn : DataView,\n \"$ %DataViewPrototype%\": \"undefined\" == typeof DataView ? Nn : DataView.prototype,\n \"$ %Date%\": Date,\n \"$ %DatePrototype%\": Date.prototype,\n \"$ %decodeURI%\": decodeURI,\n \"$ %decodeURIComponent%\": decodeURIComponent,\n \"$ %encodeURI%\": encodeURI,\n \"$ %encodeURIComponent%\": encodeURIComponent,\n \"$ %Error%\": Error,\n \"$ %ErrorPrototype%\": Error.prototype,\n \"$ %eval%\": eval,\n \"$ %EvalError%\": EvalError,\n \"$ %EvalErrorPrototype%\": EvalError.prototype,\n \"$ %Float32Array%\": \"undefined\" == typeof Float32Array ? Nn : Float32Array,\n \"$ %Float32ArrayPrototype%\": \"undefined\" == typeof Float32Array ? Nn : Float32Array.prototype,\n \"$ %Float64Array%\": \"undefined\" == typeof Float64Array ? Nn : Float64Array,\n \"$ %Float64ArrayPrototype%\": \"undefined\" == typeof Float64Array ? Nn : Float64Array.prototype,\n \"$ %Function%\": Function,\n \"$ %FunctionPrototype%\": Function.prototype,\n \"$ %Generator%\": Nn,\n \"$ %GeneratorFunction%\": void 0,\n \"$ %GeneratorPrototype%\": Nn,\n \"$ %Int8Array%\": \"undefined\" == typeof Int8Array ? Nn : Int8Array,\n \"$ %Int8ArrayPrototype%\": \"undefined\" == typeof Int8Array ? Nn : Int8Array.prototype,\n \"$ %Int16Array%\": \"undefined\" == typeof Int16Array ? Nn : Int16Array,\n \"$ %Int16ArrayPrototype%\": \"undefined\" == typeof Int16Array ? Nn : Int8Array.prototype,\n \"$ %Int32Array%\": \"undefined\" == typeof Int32Array ? Nn : Int32Array,\n \"$ %Int32ArrayPrototype%\": \"undefined\" == typeof Int32Array ? Nn : Int32Array.prototype,\n \"$ %isFinite%\": isFinite,\n \"$ %isNaN%\": isNaN,\n \"$ %IteratorPrototype%\": Rn ? Bn(Bn([][Symbol.iterator]())) : Nn,\n \"$ %JSON%\": JSON,\n \"$ %JSONParse%\": JSON.parse,\n \"$ %Map%\": \"undefined\" == typeof Map ? Nn : Map,\n \"$ %MapIteratorPrototype%\": \"undefined\" != typeof Map && Rn ? Bn(new Map()[Symbol.iterator]()) : Nn,\n \"$ %MapPrototype%\": \"undefined\" == typeof Map ? Nn : Map.prototype,\n \"$ %Math%\": Math,\n \"$ %Number%\": Number,\n \"$ %NumberPrototype%\": Number.prototype,\n \"$ %Object%\": Object,\n \"$ %ObjectPrototype%\": Object.prototype,\n \"$ %ObjProto_toString%\": Object.prototype.toString,\n \"$ %ObjProto_valueOf%\": Object.prototype.valueOf,\n \"$ %parseFloat%\": parseFloat,\n \"$ %parseInt%\": parseInt,\n \"$ %Promise%\": \"undefined\" == typeof Promise ? Nn : Promise,\n \"$ %PromisePrototype%\": \"undefined\" == typeof Promise ? Nn : Promise.prototype,\n \"$ %PromiseProto_then%\": \"undefined\" == typeof Promise ? Nn : Promise.prototype.then,\n \"$ %Promise_all%\": \"undefined\" == typeof Promise ? Nn : Promise.all,\n \"$ %Promise_reject%\": \"undefined\" == typeof Promise ? Nn : Promise.reject,\n \"$ %Promise_resolve%\": \"undefined\" == typeof Promise ? Nn : Promise.resolve,\n \"$ %Proxy%\": \"undefined\" == typeof Proxy ? Nn : Proxy,\n \"$ %RangeError%\": RangeError,\n \"$ %RangeErrorPrototype%\": RangeError.prototype,\n \"$ %ReferenceError%\": ReferenceError,\n \"$ %ReferenceErrorPrototype%\": ReferenceError.prototype,\n \"$ %Reflect%\": \"undefined\" == typeof Reflect ? Nn : Reflect,\n \"$ %RegExp%\": RegExp,\n \"$ %RegExpPrototype%\": RegExp.prototype,\n \"$ %Set%\": \"undefined\" == typeof Set ? Nn : Set,\n \"$ %SetIteratorPrototype%\": \"undefined\" != typeof Set && Rn ? Bn(new Set()[Symbol.iterator]()) : Nn,\n \"$ %SetPrototype%\": \"undefined\" == typeof Set ? Nn : Set.prototype,\n \"$ %SharedArrayBuffer%\": \"undefined\" == typeof SharedArrayBuffer ? Nn : SharedArrayBuffer,\n \"$ %SharedArrayBufferPrototype%\": \"undefined\" == typeof SharedArrayBuffer ? Nn : SharedArrayBuffer.prototype,\n \"$ %String%\": String,\n \"$ %StringIteratorPrototype%\": Rn ? Bn(\"\"[Symbol.iterator]()) : Nn,\n \"$ %StringPrototype%\": String.prototype,\n \"$ %Symbol%\": Rn ? Symbol : Nn,\n \"$ %SymbolPrototype%\": Rn ? Symbol.prototype : Nn,\n \"$ %SyntaxError%\": SyntaxError,\n \"$ %SyntaxErrorPrototype%\": SyntaxError.prototype,\n \"$ %ThrowTypeError%\": Fn,\n \"$ %TypedArray%\": $n,\n \"$ %TypedArrayPrototype%\": $n ? $n.prototype : Nn,\n \"$ %TypeError%\": TypeError,\n \"$ %TypeErrorPrototype%\": TypeError.prototype,\n \"$ %Uint8Array%\": \"undefined\" == typeof Uint8Array ? Nn : Uint8Array,\n \"$ %Uint8ArrayPrototype%\": \"undefined\" == typeof Uint8Array ? Nn : Uint8Array.prototype,\n \"$ %Uint8ClampedArray%\": \"undefined\" == typeof Uint8ClampedArray ? Nn : Uint8ClampedArray,\n \"$ %Uint8ClampedArrayPrototype%\": \"undefined\" == typeof Uint8ClampedArray ? Nn : Uint8ClampedArray.prototype,\n \"$ %Uint16Array%\": \"undefined\" == typeof Uint16Array ? Nn : Uint16Array,\n \"$ %Uint16ArrayPrototype%\": \"undefined\" == typeof Uint16Array ? Nn : Uint16Array.prototype,\n \"$ %Uint32Array%\": \"undefined\" == typeof Uint32Array ? Nn : Uint32Array,\n \"$ %Uint32ArrayPrototype%\": \"undefined\" == typeof Uint32Array ? Nn : Uint32Array.prototype,\n \"$ %URIError%\": URIError,\n \"$ %URIErrorPrototype%\": URIError.prototype,\n \"$ %WeakMap%\": \"undefined\" == typeof WeakMap ? Nn : WeakMap,\n \"$ %WeakMapPrototype%\": \"undefined\" == typeof WeakMap ? Nn : WeakMap.prototype,\n \"$ %WeakSet%\": \"undefined\" == typeof WeakSet ? Nn : WeakSet,\n \"$ %WeakSetPrototype%\": \"undefined\" == typeof WeakSet ? Nn : WeakSet.prototype\n },\n Vn = tn.call(Function.call, Object.prototype.hasOwnProperty),\n Un = Pn(\"%TypeError%\"),\n Wn = Pn(\"%SyntaxError%\"),\n Kn = {\n \"Property Descriptor\": function PropertyDescriptor(e, t) {\n if (\"Object\" !== e.Type(t)) return !1;\n var n = {\n \"[[Configurable]]\": !0,\n \"[[Enumerable]]\": !0,\n \"[[Get]]\": !0,\n \"[[Set]]\": !0,\n \"[[Value]]\": !0,\n \"[[Writable]]\": !0\n };\n\n for (var r in t) {\n if (Vn(t, r) && !n[r]) return !1;\n }\n\n var i = Vn(t, \"[[Value]]\"),\n o = Vn(t, \"[[Get]]\") || Vn(t, \"[[Set]]\");\n if (i && o) throw new Un(\"Property Descriptors may not be both accessor and data descriptors\");\n return !0;\n }\n },\n zn = Number.isNaN || function (e) {\n return e != e;\n },\n qn = Number.isNaN || function (e) {\n return e != e;\n },\n Gn = Number.isFinite || function (e) {\n return \"number\" == typeof e && !qn(e) && e !== 1 / 0 && e !== -1 / 0;\n },\n Xn = Function.prototype.toString,\n Yn = /^\\s*class\\b/,\n Qn = Object.prototype.toString,\n Jn = \"function\" == typeof Symbol && \"symbol\" == _typeof(Symbol.toStringTag),\n Zn = Object.prototype.toString,\n er = function er(e, t) {\n var n;\n if ((n = 1 < arguments.length ? t : \"[object Date]\" === Zn.call(e) ? String : Number) !== String && n !== Number) throw new TypeError(\"invalid [[DefaultValue]] hint supplied\");\n var r,\n i,\n o = n === String ? [\"toString\", \"valueOf\"] : [\"valueOf\", \"toString\"];\n\n for (i = 0; i < o.length; ++i) {\n if (In(e[o[i]]) && (r = e[o[i]](), On(r))) return r;\n }\n\n throw new TypeError(\"No default value\");\n },\n tr = Pn(\"%Object%\"),\n nr = Pn(\"%TypeError%\"),\n rr = Pn(\"%String%\"),\n ir = {\n ToPrimitive: function ToPrimitive(e, t) {\n return On(e) ? e : 1 < arguments.length ? er(e, t) : er(e);\n },\n ToBoolean: function ToBoolean(e) {\n return !!e;\n },\n ToNumber: function ToNumber(e) {\n return +e;\n },\n ToInteger: function ToInteger(e) {\n var t = this.ToNumber(e);\n return zn(t) ? 0 : 0 !== t && Gn(t) ? jn(t) * Math.floor(Math.abs(t)) : t;\n },\n ToInt32: function ToInt32(e) {\n return this.ToNumber(e) >> 0;\n },\n ToUint32: function ToUint32(e) {\n return this.ToNumber(e) >>> 0;\n },\n ToUint16: function ToUint16(e) {\n var t = this.ToNumber(e);\n return zn(t) || 0 === t || !Gn(t) ? 0 : function (e, t) {\n var n = e % t;\n return Math.floor(0 <= n ? n : n + t);\n }(jn(t) * Math.floor(Math.abs(t)), 65536);\n },\n ToString: function ToString(e) {\n return rr(e);\n },\n ToObject: function ToObject(e) {\n return this.CheckObjectCoercible(e), tr(e);\n },\n CheckObjectCoercible: function CheckObjectCoercible(e, t) {\n if (null == e) throw new nr(t || \"Cannot call method on \" + e);\n return e;\n },\n IsCallable: In,\n SameValue: function SameValue(e, t) {\n return e === t ? 0 !== e || 1 / e == 1 / t : zn(e) && zn(t);\n },\n Type: function Type(e) {\n return null === e ? \"Null\" : \"undefined\" == typeof e ? \"Undefined\" : \"function\" == typeof e || \"object\" == _typeof(e) ? \"Object\" : \"number\" == typeof e ? \"Number\" : \"boolean\" == typeof e ? \"Boolean\" : \"string\" == typeof e ? \"String\" : void 0;\n },\n IsPropertyDescriptor: function IsPropertyDescriptor(e) {\n if (\"Object\" !== this.Type(e)) return !1;\n var t = {\n \"[[Configurable]]\": !0,\n \"[[Enumerable]]\": !0,\n \"[[Get]]\": !0,\n \"[[Set]]\": !0,\n \"[[Value]]\": !0,\n \"[[Writable]]\": !0\n };\n\n for (var n in e) {\n if (Vn(e, n) && !t[n]) return !1;\n }\n\n var r = Vn(e, \"[[Value]]\"),\n i = Vn(e, \"[[Get]]\") || Vn(e, \"[[Set]]\");\n if (r && i) throw new nr(\"Property Descriptors may not be both accessor and data descriptors\");\n return !0;\n },\n IsAccessorDescriptor: function IsAccessorDescriptor(e) {\n return \"undefined\" != typeof e && (xn(this, \"Property Descriptor\", \"Desc\", e), !(!Vn(e, \"[[Get]]\") && !Vn(e, \"[[Set]]\")));\n },\n IsDataDescriptor: function IsDataDescriptor(e) {\n return \"undefined\" != typeof e && (xn(this, \"Property Descriptor\", \"Desc\", e), !(!Vn(e, \"[[Value]]\") && !Vn(e, \"[[Writable]]\")));\n },\n IsGenericDescriptor: function IsGenericDescriptor(e) {\n return \"undefined\" != typeof e && (xn(this, \"Property Descriptor\", \"Desc\", e), !this.IsAccessorDescriptor(e) && !this.IsDataDescriptor(e));\n },\n FromPropertyDescriptor: function FromPropertyDescriptor(e) {\n if (\"undefined\" == typeof e) return e;\n if (xn(this, \"Property Descriptor\", \"Desc\", e), this.IsDataDescriptor(e)) return {\n value: e[\"[[Value]]\"],\n writable: !!e[\"[[Writable]]\"],\n enumerable: !!e[\"[[Enumerable]]\"],\n configurable: !!e[\"[[Configurable]]\"]\n };\n if (this.IsAccessorDescriptor(e)) return {\n get: e[\"[[Get]]\"],\n set: e[\"[[Set]]\"],\n enumerable: !!e[\"[[Enumerable]]\"],\n configurable: !!e[\"[[Configurable]]\"]\n };\n throw new nr(\"FromPropertyDescriptor must be called with a fully populated Property Descriptor\");\n },\n ToPropertyDescriptor: function ToPropertyDescriptor(e) {\n if (\"Object\" !== this.Type(e)) throw new nr(\"ToPropertyDescriptor requires an object\");\n var t = {};\n\n if (Vn(e, \"enumerable\") && (t[\"[[Enumerable]]\"] = this.ToBoolean(e.enumerable)), Vn(e, \"configurable\") && (t[\"[[Configurable]]\"] = this.ToBoolean(e.configurable)), Vn(e, \"value\") && (t[\"[[Value]]\"] = e.value), Vn(e, \"writable\") && (t[\"[[Writable]]\"] = this.ToBoolean(e.writable)), Vn(e, \"get\")) {\n var n = e.get;\n if (\"undefined\" != typeof n && !this.IsCallable(n)) throw new TypeError(\"getter must be a function\");\n t[\"[[Get]]\"] = n;\n }\n\n if (Vn(e, \"set\")) {\n var r = e.set;\n if (\"undefined\" != typeof r && !this.IsCallable(r)) throw new nr(\"setter must be a function\");\n t[\"[[Set]]\"] = r;\n }\n\n if ((Vn(t, \"[[Get]]\") || Vn(t, \"[[Set]]\")) && (Vn(t, \"[[Value]]\") || Vn(t, \"[[Writable]]\"))) throw new nr(\"Invalid property descriptor. Cannot both specify accessors and a value or writable attribute\");\n return t;\n }\n },\n or = tn.call(Function.call, String.prototype.replace),\n sr = /^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+/,\n ar = /[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+$/,\n lr = tn.call(Function.call, Mn());\n\n Ln(lr, {\n getPolyfill: Mn,\n implementation: Dn,\n shim: function shim() {\n var e = Mn();\n return Ln(String.prototype, {\n trim: e\n }, {\n trim: function trim() {\n return String.prototype.trim !== e;\n }\n }), e;\n }\n });\n\n var cr = lr,\n ur = Object.prototype.toString,\n hr = Object.prototype.hasOwnProperty,\n dr = function dr(e, t, n) {\n if (!In(t)) throw new TypeError(\"iterator must be a function\");\n var r;\n 3 <= arguments.length && (r = n), \"[object Array]\" === ur.call(e) ? function (e, t, n) {\n for (var r = 0, i = e.length; r < i; r++) {\n hr.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e));\n }\n }(e, t, r) : \"string\" == typeof e ? function (e, t, n) {\n for (var r = 0, i = e.length; r < i; r++) {\n null == n ? t(e.charAt(r), r, e) : t.call(n, e.charAt(r), r, e);\n }\n }(e, t, r) : function (e, t, n) {\n for (var r in e) {\n hr.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e));\n }\n }(e, t, r);\n },\n pr = function pr(e) {\n if (!e) return {};\n var i = {};\n return dr(cr(e).split(\"\\n\"), function (e) {\n var t = e.indexOf(\":\"),\n n = cr(e.slice(0, t)).toLowerCase(),\n r = cr(e.slice(t + 1));\n \"undefined\" == typeof i[n] ? i[n] = r : !function (e) {\n return \"[object Array]\" === Object.prototype.toString.call(e);\n }(i[n]) ? i[n] = [i[n], r] : i[n].push(r);\n }), i;\n },\n fr = function fr() {\n for (var e = {}, t = 0; t < arguments.length; t++) {\n var n = arguments[t];\n\n for (var r in n) {\n vr.call(n, r) && (e[r] = n[r]);\n }\n }\n\n return e;\n },\n vr = Object.prototype.hasOwnProperty;\n\n var yr = mr;\n\n function gr(e, t, n) {\n var r = e;\n return Xt(t) ? (n = t, \"string\" == typeof e && (r = {\n uri: e\n })) : r = fr(t, {\n uri: e\n }), r.callback = n, r;\n }\n\n function mr(e, t, n) {\n return _r(t = gr(e, t, n));\n }\n\n function _r(r) {\n if (\"undefined\" == typeof r.callback) throw new Error(\"callback argument missing\");\n\n var i = !1,\n o = function o(e, t, n) {\n i || (i = !0, r.callback(e, t, n));\n };\n\n function t(e) {\n return clearTimeout(a), e instanceof Error || (e = new Error(\"\" + (e || \"Unknown XMLHttpRequest Error\"))), e.statusCode = 0, o(e, v);\n }\n\n function e() {\n if (!s) {\n var e;\n clearTimeout(a), e = r.useXDR && void 0 === l.status ? 200 : 1223 === l.status ? 204 : l.status;\n var t = v,\n n = null;\n return 0 !== e ? (t = {\n body: function () {\n var e = void 0;\n if (e = l.response ? l.response : l.responseText || function (e) {\n if (\"document\" === e.responseType) return e.responseXML;\n var t = e.responseXML && \"parsererror\" === e.responseXML.documentElement.nodeName;\n return \"\" !== e.responseType || t ? null : e.responseXML;\n }(l), f) try {\n e = JSON.parse(e);\n } catch (e) {}\n return e;\n }(),\n statusCode: e,\n method: u,\n headers: {},\n url: c,\n rawRequest: l\n }, l.getAllResponseHeaders && (t.headers = pr(l.getAllResponseHeaders()))) : n = new Error(\"Internal XMLHttpRequest Error\"), o(n, t, t.body);\n }\n }\n\n var n,\n s,\n a,\n l = r.xhr || null,\n c = (l = l || (r.cors || r.useXDR ? new mr.XDomainRequest() : new mr.XMLHttpRequest())).url = r.uri || r.url,\n u = l.method = r.method || \"GET\",\n h = r.body || r.data,\n d = l.headers = r.headers || {},\n p = !!r.sync,\n f = !1,\n v = {\n body: void 0,\n headers: {},\n statusCode: 0,\n method: u,\n url: c,\n rawRequest: l\n };\n if (\"json\" in r && !1 !== r.json && (f = !0, d.accept || d.Accept || (d.Accept = \"application/json\"), \"GET\" !== u && \"HEAD\" !== u && (d[\"content-type\"] || d[\"Content-Type\"] || (d[\"Content-Type\"] = \"application/json\"), h = JSON.stringify(!0 === r.json ? h : r.json))), l.onreadystatechange = function () {\n 4 === l.readyState && setTimeout(e, 0);\n }, l.onload = e, l.onerror = t, l.onprogress = function () {}, l.onabort = function () {\n s = !0;\n }, l.ontimeout = t, l.open(u, c, !p, r.username, r.password), p || (l.withCredentials = !!r.withCredentials), !p && 0 < r.timeout && (a = setTimeout(function () {\n if (!s) {\n s = !0, l.abort(\"timeout\");\n var e = new Error(\"XMLHttpRequest timeout\");\n e.code = \"ETIMEDOUT\", t(e);\n }\n }, r.timeout)), l.setRequestHeader) for (n in d) {\n d.hasOwnProperty(n) && l.setRequestHeader(n, d[n]);\n } else if (r.headers && !function (e) {\n for (var t in e) {\n if (e.hasOwnProperty(t)) return !1;\n }\n\n return !0;\n }(r.headers)) throw new Error(\"Headers cannot be set on an XDomainRequest object\");\n return \"responseType\" in r && (l.responseType = r.responseType), \"beforeSend\" in r && \"function\" == typeof r.beforeSend && r.beforeSend(l), l.send(h || null), l;\n }\n\n mr.XMLHttpRequest = h.XMLHttpRequest || function () {}, mr.XDomainRequest = \"withCredentials\" in new mr.XMLHttpRequest() ? mr.XMLHttpRequest : h.XDomainRequest, function (e, t) {\n for (var n = 0; n < e.length; n++) {\n t(e[n]);\n }\n }([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (r) {\n mr[\"delete\" === r ? \"del\" : r] = function (e, t, n) {\n return (t = gr(e, t, n)).method = r.toUpperCase(), _r(t);\n };\n });\n\n function br(e, t) {\n var n = new h.WebVTT.Parser(h, h.vttjs, h.WebVTT.StringDecoder()),\n r = [];\n n.oncue = function (e) {\n t.addCue(e);\n }, n.onparsingerror = function (e) {\n r.push(e);\n }, n.onflush = function () {\n t.trigger({\n type: \"loadeddata\",\n target: t\n });\n }, n.parse(e), 0 < r.length && (h.console && h.console.groupCollapsed && h.console.groupCollapsed(\"Text Track parsing errors for \" + t.src), r.forEach(function (e) {\n return f.error(e);\n }), h.console && h.console.groupEnd && h.console.groupEnd()), n.flush();\n }\n\n var Tr = function (c) {\n function e(e) {\n var t;\n if (void 0 === e && (e = {}), !e.tech) throw new Error(\"A tech was not provided.\");\n var n = Ie(e, {\n kind: Kt[e.kind] || \"subtitles\",\n language: e.language || e.srclang || \"\"\n }),\n r = zt[n.mode] || \"disabled\",\n i = n[\"default\"];\n \"metadata\" !== n.kind && \"chapters\" !== n.kind || (r = \"hidden\"), (t = c.call(this, n) || this).tech_ = n.tech, t.cues_ = [], t.activeCues_ = [];\n var o = new Vt(t.cues_),\n s = new Vt(t.activeCues_),\n a = !1,\n l = pe(Le(t), function () {\n this.activeCues = this.activeCues, a && (this.trigger(\"cuechange\"), a = !1);\n });\n return \"disabled\" !== r && t.tech_.ready(function () {\n t.tech_.on(\"timeupdate\", l);\n }, !0), Object.defineProperties(Le(t), {\n \"default\": {\n get: function get() {\n return i;\n },\n set: function set() {}\n },\n mode: {\n get: function get() {\n return r;\n },\n set: function set(e) {\n var t = this;\n zt[e] && (\"disabled\" !== (r = e) ? this.tech_.ready(function () {\n t.tech_.on(\"timeupdate\", l);\n }, !0) : this.tech_.off(\"timeupdate\", l), this.trigger(\"modechange\"));\n }\n },\n cues: {\n get: function get() {\n return this.loaded_ ? o : null;\n },\n set: function set() {}\n },\n activeCues: {\n get: function get() {\n if (!this.loaded_) return null;\n if (0 === this.cues.length) return s;\n\n for (var e = this.tech_.currentTime(), t = [], n = 0, r = this.cues.length; n < r; n++) {\n var i = this.cues[n];\n i.startTime <= e && i.endTime >= e ? t.push(i) : i.startTime === i.endTime && i.startTime <= e && i.startTime + .5 >= e && t.push(i);\n }\n\n if (a = !1, t.length !== this.activeCues_.length) a = !0;else for (var o = 0; o < t.length; o++) {\n -1 === this.activeCues_.indexOf(t[o]) && (a = !0);\n }\n return this.activeCues_ = t, s.setCues_(this.activeCues_), s;\n },\n set: function set() {}\n }\n }), n.src ? (t.src = n.src, function (e, r) {\n var t = {\n uri: e\n },\n n = Ft(e);\n n && (t.cors = n), yr(t, pe(this, function (e, t, n) {\n if (e) return f.error(e, t);\n r.loaded_ = !0, \"function\" != typeof h.WebVTT ? r.tech_ && r.tech_.any([\"vttjsloaded\", \"vttjserror\"], function (e) {\n if (\"vttjserror\" !== e.type) return br(n, r);\n f.error(\"vttjs failed to load, stopping trying to process \" + r.src);\n }) : br(n, r);\n }));\n }(n.src, Le(t))) : t.loaded_ = !0, t;\n }\n\n De(e, c);\n var t = e.prototype;\n return t.addCue = function (e) {\n var t = e;\n\n if (h.vttjs && !(e instanceof h.vttjs.VTTCue)) {\n for (var n in t = new h.vttjs.VTTCue(e.startTime, e.endTime, e.text), e) {\n n in t || (t[n] = e[n]);\n }\n\n t.id = e.id, t.originalCue_ = e;\n }\n\n for (var r = this.tech_.textTracks(), i = 0; i < r.length; i++) {\n r[i] !== this && r[i].removeCue(t);\n }\n\n this.cues_.push(t), this.cues.setCues_(this.cues_);\n }, t.removeCue = function (e) {\n for (var t = this.cues_.length; t--;) {\n var n = this.cues_[t];\n\n if (n === e || n.originalCue_ && n.originalCue_ === e) {\n this.cues_.splice(t, 1), this.cues.setCues_(this.cues_);\n break;\n }\n }\n }, e;\n }(qt);\n\n Tr.prototype.allowedEvents_ = {\n cuechange: \"cuechange\"\n };\n\n var kr = function (i) {\n function e(e) {\n var t;\n void 0 === e && (e = {});\n var n = Ie(e, {\n kind: Wt[e.kind] || \"\"\n });\n t = i.call(this, n) || this;\n var r = !1;\n return Object.defineProperty(Le(t), \"enabled\", {\n get: function get() {\n return r;\n },\n set: function set(e) {\n \"boolean\" == typeof e && e !== r && (r = e, this.trigger(\"enabledchange\"));\n }\n }), n.enabled && (t.enabled = n.enabled), t.loaded_ = !0, t;\n }\n\n return De(e, i), e;\n }(qt),\n Cr = function (i) {\n function e(e) {\n var t;\n void 0 === e && (e = {});\n var n = Ie(e, {\n kind: Ut[e.kind] || \"\"\n });\n t = i.call(this, n) || this;\n var r = !1;\n return Object.defineProperty(Le(t), \"selected\", {\n get: function get() {\n return r;\n },\n set: function set(e) {\n \"boolean\" == typeof e && e !== r && (r = e, this.trigger(\"selectedchange\"));\n }\n }), n.selected && (t.selected = n.selected), t;\n }\n\n return De(e, i), e;\n }(qt),\n Er = function (i) {\n function e(e) {\n var t, n;\n void 0 === e && (e = {}), t = i.call(this) || this;\n var r = new Tr(e);\n return t.kind = r.kind, t.src = r.src, t.srclang = r.language, t.label = r.label, t[\"default\"] = r[\"default\"], Object.defineProperties(Le(t), {\n readyState: {\n get: function get() {\n return n;\n }\n },\n track: {\n get: function get() {\n return r;\n }\n }\n }), n = 0, r.addEventListener(\"loadeddata\", function () {\n n = 2, t.trigger({\n type: \"load\",\n target: Le(t)\n });\n }), t;\n }\n\n return De(e, i), e;\n }(ve);\n\n Er.prototype.allowedEvents_ = {\n load: \"load\"\n }, Er.NONE = 0, Er.LOADING = 1, Er.LOADED = 2, Er.ERROR = 3;\n var Sr = {\n audio: {\n ListClass: Rt,\n TrackClass: kr,\n capitalName: \"Audio\"\n },\n video: {\n ListClass: Bt,\n TrackClass: Cr,\n capitalName: \"Video\"\n },\n text: {\n ListClass: $t,\n TrackClass: Tr,\n capitalName: \"Text\"\n }\n };\n Object.keys(Sr).forEach(function (e) {\n Sr[e].getterName = e + \"Tracks\", Sr[e].privateName = e + \"Tracks_\";\n });\n var wr = {\n remoteText: {\n ListClass: $t,\n TrackClass: Tr,\n capitalName: \"RemoteText\",\n getterName: \"remoteTextTracks\",\n privateName: \"remoteTextTracks_\"\n },\n remoteTextEl: {\n ListClass: Ht,\n TrackClass: Er,\n capitalName: \"RemoteTextTrackEls\",\n getterName: \"remoteTextTrackEls\",\n privateName: \"remoteTextTrackEls_\"\n }\n },\n Pr = Ie(Sr, wr);\n wr.names = Object.keys(wr), Sr.names = Object.keys(Sr), Pr.names = [].concat(wr.names).concat(Sr.names);\n var xr = {};\n\n var jr = function (t) {\n function n(n, e) {\n var r;\n return void 0 === n && (n = {}), void 0 === e && (e = function e() {}), n.reportTouchActivity = !1, (r = t.call(this, null, n, e) || this).hasStarted_ = !1, r.on(\"playing\", function () {\n this.hasStarted_ = !0;\n }), r.on(\"loadstart\", function () {\n this.hasStarted_ = !1;\n }), Pr.names.forEach(function (e) {\n var t = Pr[e];\n n && n[t.getterName] && (r[t.privateName] = n[t.getterName]);\n }), r.featuresProgressEvents || r.manualProgressOn(), r.featuresTimeupdateEvents || r.manualTimeUpdatesOn(), [\"Text\", \"Audio\", \"Video\"].forEach(function (e) {\n !1 === n[\"native\" + e + \"Tracks\"] && (r[\"featuresNative\" + e + \"Tracks\"] = !1);\n }), !1 === n.nativeCaptions || !1 === n.nativeTextTracks ? r.featuresNativeTextTracks = !1 : !0 !== n.nativeCaptions && !0 !== n.nativeTextTracks || (r.featuresNativeTextTracks = !0), r.featuresNativeTextTracks || r.emulateTextTracks(), r.autoRemoteTextTracks_ = new Pr.text.ListClass(), r.initTrackListeners(), n.nativeControlsForTouch || r.emitTapEvents(), r.constructor && (r.name_ = r.constructor.name || \"Unknown Tech\"), r;\n }\n\n De(n, t);\n var e = n.prototype;\n return e.triggerSourceset = function (e) {\n var t = this;\n this.isReady_ || this.one(\"ready\", function () {\n return t.setTimeout(function () {\n return t.triggerSourceset(e);\n }, 1);\n }), this.trigger({\n src: e,\n type: \"sourceset\"\n });\n }, e.manualProgressOn = function () {\n this.on(\"durationchange\", this.onDurationChange), this.manualProgress = !0, this.one(\"ready\", this.trackProgress);\n }, e.manualProgressOff = function () {\n this.manualProgress = !1, this.stopTrackingProgress(), this.off(\"durationchange\", this.onDurationChange);\n }, e.trackProgress = function (e) {\n this.stopTrackingProgress(), this.progressInterval = this.setInterval(pe(this, function () {\n var e = this.bufferedPercent();\n this.bufferedPercent_ !== e && this.trigger(\"progress\"), 1 === (this.bufferedPercent_ = e) && this.stopTrackingProgress();\n }), 500);\n }, e.onDurationChange = function (e) {\n this.duration_ = this.duration();\n }, e.buffered = function () {\n return ut(0, 0);\n }, e.bufferedPercent = function () {\n return ht(this.buffered(), this.duration_);\n }, e.stopTrackingProgress = function () {\n this.clearInterval(this.progressInterval);\n }, e.manualTimeUpdatesOn = function () {\n this.manualTimeUpdates = !0, this.on(\"play\", this.trackCurrentTime), this.on(\"pause\", this.stopTrackingCurrentTime);\n }, e.manualTimeUpdatesOff = function () {\n this.manualTimeUpdates = !1, this.stopTrackingCurrentTime(), this.off(\"play\", this.trackCurrentTime), this.off(\"pause\", this.stopTrackingCurrentTime);\n }, e.trackCurrentTime = function () {\n this.currentTimeInterval && this.stopTrackingCurrentTime(), this.currentTimeInterval = this.setInterval(function () {\n this.trigger({\n type: \"timeupdate\",\n target: this,\n manuallyTriggered: !0\n });\n }, 250);\n }, e.stopTrackingCurrentTime = function () {\n this.clearInterval(this.currentTimeInterval), this.trigger({\n type: \"timeupdate\",\n target: this,\n manuallyTriggered: !0\n });\n }, e.dispose = function () {\n this.clearTracks(Sr.names), this.manualProgress && this.manualProgressOff(), this.manualTimeUpdates && this.manualTimeUpdatesOff(), t.prototype.dispose.call(this);\n }, e.clearTracks = function (e) {\n var i = this;\n (e = [].concat(e)).forEach(function (e) {\n for (var t = i[e + \"Tracks\"]() || [], n = t.length; n--;) {\n var r = t[n];\n \"text\" === e && i.removeRemoteTextTrack(r), t.removeTrack(r);\n }\n });\n }, e.cleanupAutoTextTracks = function () {\n for (var e = this.autoRemoteTextTracks_ || [], t = e.length; t--;) {\n var n = e[t];\n this.removeRemoteTextTrack(n);\n }\n }, e.reset = function () {}, e.error = function (e) {\n return void 0 !== e && (this.error_ = new mt(e), this.trigger(\"error\")), this.error_;\n }, e.played = function () {\n return this.hasStarted_ ? ut(0, 0) : ut();\n }, e.setCurrentTime = function () {\n this.manualTimeUpdates && this.trigger({\n type: \"timeupdate\",\n target: this,\n manuallyTriggered: !0\n });\n }, e.initTrackListeners = function () {\n var i = this;\n Sr.names.forEach(function (e) {\n function t() {\n i.trigger(e + \"trackchange\");\n }\n\n var n = Sr[e],\n r = i[n.getterName]();\n r.addEventListener(\"removetrack\", t), r.addEventListener(\"addtrack\", t), i.on(\"dispose\", function () {\n r.removeEventListener(\"removetrack\", t), r.removeEventListener(\"addtrack\", t);\n });\n });\n }, e.addWebVttScript_ = function () {\n var e = this;\n if (!h.WebVTT) if (d.body.contains(this.el())) {\n if (!this.options_[\"vtt.js\"] && a(xr) && 0 < Object.keys(xr).length) return void this.trigger(\"vttjsloaded\");\n var t = d.createElement(\"script\");\n t.src = this.options_[\"vtt.js\"] || \"https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js\", t.onload = function () {\n e.trigger(\"vttjsloaded\");\n }, t.onerror = function () {\n e.trigger(\"vttjserror\");\n }, this.on(\"dispose\", function () {\n t.onload = null, t.onerror = null;\n }), h.WebVTT = !0, this.el().parentNode.appendChild(t);\n } else this.ready(this.addWebVttScript_);\n }, e.emulateTextTracks = function () {\n function t(e) {\n return r.addTrack(e.track);\n }\n\n function n(e) {\n return r.removeTrack(e.track);\n }\n\n var e = this,\n r = this.textTracks(),\n i = this.remoteTextTracks();\n i.on(\"addtrack\", t), i.on(\"removetrack\", n), this.addWebVttScript_();\n\n function o() {\n return e.trigger(\"texttrackchange\");\n }\n\n function s() {\n o();\n\n for (var e = 0; e < r.length; e++) {\n var t = r[e];\n t.removeEventListener(\"cuechange\", o), \"showing\" === t.mode && t.addEventListener(\"cuechange\", o);\n }\n }\n\n s(), r.addEventListener(\"change\", s), r.addEventListener(\"addtrack\", s), r.addEventListener(\"removetrack\", s), this.on(\"dispose\", function () {\n i.off(\"addtrack\", t), i.off(\"removetrack\", n), r.removeEventListener(\"change\", s), r.removeEventListener(\"addtrack\", s), r.removeEventListener(\"removetrack\", s);\n\n for (var e = 0; e < r.length; e++) {\n r[e].removeEventListener(\"cuechange\", o);\n }\n });\n }, e.addTextTrack = function (e, t, n) {\n if (!e) throw new Error(\"TextTrack kind is required but was not provided\");\n return function (e, t, n, r, i) {\n void 0 === i && (i = {});\n var o = e.textTracks();\n i.kind = t, n && (i.label = n), r && (i.language = r), i.tech = e;\n var s = new Pr.text.TrackClass(i);\n return o.addTrack(s), s;\n }(this, e, t, n);\n }, e.createRemoteTextTrack = function (e) {\n var t = Ie(e, {\n tech: this\n });\n return new wr.remoteTextEl.TrackClass(t);\n }, e.addRemoteTextTrack = function (e, t) {\n var n = this;\n void 0 === e && (e = {});\n var r = this.createRemoteTextTrack(e);\n return !0 !== t && !1 !== t && (f.warn('Calling addRemoteTextTrack without explicitly setting the \"manualCleanup\" parameter to `true` is deprecated and default to `false` in future version of video.js'), t = !0), this.remoteTextTrackEls().addTrackElement_(r), this.remoteTextTracks().addTrack(r.track), !0 !== t && this.ready(function () {\n return n.autoRemoteTextTracks_.addTrack(r.track);\n }), r;\n }, e.removeRemoteTextTrack = function (e) {\n var t = this.remoteTextTrackEls().getTrackElementByTrack_(e);\n this.remoteTextTrackEls().removeTrackElement_(t), this.remoteTextTracks().removeTrack(e), this.autoRemoteTextTracks_.removeTrack(e);\n }, e.getVideoPlaybackQuality = function () {\n return {};\n }, e.requestPictureInPicture = function () {\n var e = this.options_.Promise || h.Promise;\n if (e) return e.reject();\n }, e.setPoster = function () {}, e.playsinline = function () {}, e.setPlaysinline = function () {}, e.overrideNativeAudioTracks = function () {}, e.overrideNativeVideoTracks = function () {}, e.canPlayType = function () {\n return \"\";\n }, n.canPlayType = function () {\n return \"\";\n }, n.canPlaySource = function (e, t) {\n return n.canPlayType(e.type);\n }, n.isTech = function (e) {\n return e.prototype instanceof n || e instanceof n || e === n;\n }, n.registerTech = function (e, t) {\n if (n.techs_ || (n.techs_ = {}), !n.isTech(t)) throw new Error(\"Tech \" + e + \" must be a Tech\");\n if (!n.canPlayType) throw new Error(\"Techs must have a static canPlayType method on them\");\n if (!n.canPlaySource) throw new Error(\"Techs must have a static canPlaySource method on them\");\n return e = Ae(e), n.techs_[e] = t, n.techs_[je(e)] = t, \"Tech\" !== e && n.defaultTechOrder_.push(e), t;\n }, n.getTech = function (e) {\n if (e) return n.techs_ && n.techs_[e] ? n.techs_[e] : (e = Ae(e), h && h.videojs && h.videojs[e] ? (f.warn(\"The \" + e + \" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)\"), h.videojs[e]) : void 0);\n }, n;\n }(Oe);\n\n Pr.names.forEach(function (e) {\n var t = Pr[e];\n\n jr.prototype[t.getterName] = function () {\n return this[t.privateName] = this[t.privateName] || new t.ListClass(), this[t.privateName];\n };\n }), jr.prototype.featuresVolumeControl = !0, jr.prototype.featuresMuteControl = !0, jr.prototype.featuresFullscreenResize = !1, jr.prototype.featuresPlaybackRate = !1, jr.prototype.featuresProgressEvents = !1, jr.prototype.featuresSourceset = !1, jr.prototype.featuresTimeupdateEvents = !1, jr.prototype.featuresNativeTextTracks = !1, jr.withSourceHandlers = function (i) {\n i.registerSourceHandler = function (e, t) {\n var n = i.sourceHandlers;\n n = n || (i.sourceHandlers = []), void 0 === t && (t = n.length), n.splice(t, 0, e);\n }, i.canPlayType = function (e) {\n for (var t, n = i.sourceHandlers || [], r = 0; r < n.length; r++) {\n if (t = n[r].canPlayType(e)) return t;\n }\n\n return \"\";\n }, i.selectSourceHandler = function (e, t) {\n for (var n = i.sourceHandlers || [], r = 0; r < n.length; r++) {\n if (n[r].canHandleSource(e, t)) return n[r];\n }\n\n return null;\n }, i.canPlaySource = function (e, t) {\n var n = i.selectSourceHandler(e, t);\n return n ? n.canHandleSource(e, t) : \"\";\n };\n [\"seekable\", \"seeking\", \"duration\"].forEach(function (e) {\n var t = this[e];\n \"function\" == typeof t && (this[e] = function () {\n return this.sourceHandler_ && this.sourceHandler_[e] ? this.sourceHandler_[e].apply(this.sourceHandler_, arguments) : t.apply(this, arguments);\n });\n }, i.prototype), i.prototype.setSource = function (e) {\n var t = i.selectSourceHandler(e, this.options_);\n t || (i.nativeSourceHandler ? t = i.nativeSourceHandler : f.error(\"No source handler found for the current source.\")), this.disposeSourceHandler(), this.off(\"dispose\", this.disposeSourceHandler), t !== i.nativeSourceHandler && (this.currentSource_ = e), this.sourceHandler_ = t.handleSource(e, this, this.options_), this.one(\"dispose\", this.disposeSourceHandler);\n }, i.prototype.disposeSourceHandler = function () {\n this.currentSource_ && (this.clearTracks([\"audio\", \"video\"]), this.currentSource_ = null), this.cleanupAutoTextTracks(), this.sourceHandler_ && (this.sourceHandler_.dispose && this.sourceHandler_.dispose(), this.sourceHandler_ = null);\n };\n }, Oe.registerComponent(\"Tech\", jr), jr.registerTech(\"Tech\", jr), jr.defaultTechOrder_ = [];\n var Ar = {},\n Ir = {},\n Or = {};\n\n function Dr(e, t, n) {\n e.setTimeout(function () {\n return function n(r, e, i, o, s, a) {\n void 0 === r && (r = {});\n void 0 === e && (e = []);\n void 0 === s && (s = []);\n void 0 === a && (a = !1);\n var t = e,\n l = t[0],\n c = t.slice(1);\n if (\"string\" == typeof l) n(r, Ar[l], i, o, s, a);else if (l) {\n var u = Br(o, l);\n if (!u.setSource) return s.push(u), n(r, c, i, o, s, a);\n u.setSource(y({}, r), function (e, t) {\n if (e) return n(r, c, i, o, s, a);\n s.push(u), n(t, r.type === t.type ? c : Ar[t.type], i, o, s, a);\n });\n } else c.length ? n(r, c, i, o, s, a) : a ? i(r, s) : n(r, Ar[\"*\"], i, o, s, !0);\n }(t, Ar[t.type], n, e);\n }, 1);\n }\n\n function Mr(e, t, n, r) {\n void 0 === r && (r = null);\n var i = \"call\" + Ae(n),\n o = e.reduce(Rr(i), r),\n s = o === Or,\n a = s ? null : t[n](o);\n return function (e, t, n, r) {\n for (var i = e.length - 1; 0 <= i; i--) {\n var o = e[i];\n o[t] && o[t](r, n);\n }\n }(e, n, a, s), a;\n }\n\n var Nr = {\n buffered: 1,\n currentTime: 1,\n duration: 1,\n seekable: 1,\n played: 1,\n paused: 1,\n volume: 1\n },\n Lr = {\n setCurrentTime: 1,\n setVolume: 1\n },\n Fr = {\n play: 1,\n pause: 1\n };\n\n function Rr(n) {\n return function (e, t) {\n return e === Or ? Or : t[n] ? t[n](e) : e;\n };\n }\n\n function Br(e, t) {\n var n = Ir[e.id()],\n r = null;\n if (null == n) return r = t(e), Ir[e.id()] = [[t, r]], r;\n\n for (var i = 0; i < n.length; i++) {\n var o = n[i],\n s = o[0],\n a = o[1];\n s === t && (r = a);\n }\n\n return null === r && (r = t(e), n.push([t, r])), r;\n }\n\n function $r(e) {\n void 0 === e && (e = \"\");\n var t = Lt(e);\n return Hr[t.toLowerCase()] || \"\";\n }\n\n var Hr = {\n opus: \"video/ogg\",\n ogv: \"video/ogg\",\n mp4: \"video/mp4\",\n mov: \"video/mp4\",\n m4v: \"video/mp4\",\n mkv: \"video/x-matroska\",\n m4a: \"audio/mp4\",\n mp3: \"audio/mpeg\",\n aac: \"audio/aac\",\n oga: \"audio/ogg\",\n m3u8: \"application/x-mpegURL\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n png: \"image/png\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\"\n };\n\n function Vr(e) {\n if (!e.type) {\n var t = $r(e.src);\n t && (e.type = t);\n }\n\n return e;\n }\n\n var Ur = function (c) {\n function e(e, t, n) {\n var r,\n i = Ie({\n createEl: !1\n }, t);\n if (r = c.call(this, e, i, n) || this, t.playerOptions.sources && 0 !== t.playerOptions.sources.length) e.src(t.playerOptions.sources);else for (var o = 0, s = t.playerOptions.techOrder; o < s.length; o++) {\n var a = Ae(s[o]),\n l = jr.getTech(a);\n\n if (a || (l = Oe.getComponent(a)), l && l.isSupported()) {\n e.loadTech_(a);\n break;\n }\n }\n return r;\n }\n\n return De(e, c), e;\n }(Oe);\n\n Oe.registerComponent(\"MediaLoader\", Ur);\n\n var Wr = function (i) {\n function e(e, t) {\n var n;\n return (n = i.call(this, e, t) || this).emitTapEvents(), n.enable(), n;\n }\n\n De(e, i);\n var t = e.prototype;\n return t.createEl = function (e, t, n) {\n void 0 === e && (e = \"div\"), void 0 === t && (t = {}), void 0 === n && (n = {}), t = y({\n innerHTML: '<span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>',\n className: this.buildCSSClass(),\n tabIndex: 0\n }, t), \"button\" === e && f.error(\"Creating a ClickableComponent with an HTML element of \" + e + \" is not supported; use a Button instead.\"), n = y({\n role: \"button\"\n }, n), this.tabIndex_ = t.tabIndex;\n var r = i.prototype.createEl.call(this, e, t, n);\n return this.createControlTextEl(r), r;\n }, t.dispose = function () {\n this.controlTextEl_ = null, i.prototype.dispose.call(this);\n }, t.createControlTextEl = function (e) {\n return this.controlTextEl_ = b(\"span\", {\n className: \"vjs-control-text\"\n }, {\n \"aria-live\": \"polite\"\n }), e && e.appendChild(this.controlTextEl_), this.controlText(this.controlText_, e), this.controlTextEl_;\n }, t.controlText = function (e, t) {\n if (void 0 === t && (t = this.el()), void 0 === e) return this.controlText_ || \"Need Text\";\n var n = this.localize(e);\n this.controlText_ = e, T(this.controlTextEl_, n), this.nonIconControl || t.setAttribute(\"title\", n);\n }, t.buildCSSClass = function () {\n return \"vjs-control vjs-button \" + i.prototype.buildCSSClass.call(this);\n }, t.enable = function () {\n this.enabled_ || (this.enabled_ = !0, this.removeClass(\"vjs-disabled\"), this.el_.setAttribute(\"aria-disabled\", \"false\"), \"undefined\" != typeof this.tabIndex_ && this.el_.setAttribute(\"tabIndex\", this.tabIndex_), this.on([\"tap\", \"click\"], this.handleClick), this.on(\"keydown\", this.handleKeyDown));\n }, t.disable = function () {\n this.enabled_ = !1, this.addClass(\"vjs-disabled\"), this.el_.setAttribute(\"aria-disabled\", \"true\"), \"undefined\" != typeof this.tabIndex_ && this.el_.removeAttribute(\"tabIndex\"), this.off(\"mouseover\", this.handleMouseOver), this.off(\"mouseout\", this.handleMouseOut), this.off([\"tap\", \"click\"], this.handleClick), this.off(\"keydown\", this.handleKeyDown);\n }, t.handleClick = function (e) {}, t.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Space\") || Pt.isEventKey(e, \"Enter\") ? (e.preventDefault(), e.stopPropagation(), this.trigger(\"click\")) : i.prototype.handleKeyDown.call(this, e);\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"ClickableComponent\", Wr);\n\n var Kr = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).update(), e.on(\"posterchange\", pe(Le(n), n.update)), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.dispose = function () {\n this.player().off(\"posterchange\", this.update), r.prototype.dispose.call(this);\n }, t.createEl = function () {\n return b(\"div\", {\n className: \"vjs-poster\",\n tabIndex: -1\n });\n }, t.update = function (e) {\n var t = this.player().poster();\n this.setSrc(t), t ? this.show() : this.hide();\n }, t.setSrc = function (e) {\n var t = \"\";\n e && (t = 'url(\"' + e + '\")'), this.el_.style.backgroundImage = t;\n }, t.handleClick = function (e) {\n this.player_.controls() && (this.player_.tech(!0) && this.player_.tech(!0).focus(), this.player_.paused() ? kt(this.player_.play()) : this.player_.pause());\n }, e;\n }(Wr);\n\n Oe.registerComponent(\"PosterImage\", Kr);\n var zr = \"#222\",\n qr = {\n monospace: \"monospace\",\n sansSerif: \"sans-serif\",\n serif: \"serif\",\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: \"sans-serif\",\n proportionalSerif: \"serif\",\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n };\n\n function Gr(e, t) {\n var n;\n if (4 === e.length) n = e[1] + e[1] + e[2] + e[2] + e[3] + e[3];else {\n if (7 !== e.length) throw new Error(\"Invalid color code provided, \" + e + \"; must be formatted as e.g. #f0e or #f604e2.\");\n n = e.slice(1);\n }\n return \"rgba(\" + parseInt(n.slice(0, 2), 16) + \",\" + parseInt(n.slice(2, 4), 16) + \",\" + parseInt(n.slice(4, 6), 16) + \",\" + t + \")\";\n }\n\n function Xr(e, t, n) {\n try {\n e.style[t] = n;\n } catch (e) {\n return;\n }\n }\n\n var Yr = function (o) {\n function e(n, e, t) {\n var r;\n r = o.call(this, n, e, t) || this;\n var i = pe(Le(r), r.updateDisplay);\n return n.on(\"loadstart\", pe(Le(r), r.toggleDisplay)), n.on(\"texttrackchange\", i), n.on(\"loadedmetadata\", pe(Le(r), r.preselectTrack)), n.ready(pe(Le(r), function () {\n if (n.tech_ && n.tech_.featuresNativeTextTracks) this.hide();else {\n n.on(\"fullscreenchange\", i), n.on(\"playerresize\", i), h.addEventListener(\"orientationchange\", i), n.on(\"dispose\", function () {\n return h.removeEventListener(\"orientationchange\", i);\n });\n\n for (var e = this.options_.playerOptions.tracks || [], t = 0; t < e.length; t++) {\n this.player_.addRemoteTextTrack(e[t], !0);\n }\n\n this.preselectTrack();\n }\n })), r;\n }\n\n De(e, o);\n var t = e.prototype;\n return t.preselectTrack = function () {\n for (var e, t, n, r = {\n captions: 1,\n subtitles: 1\n }, i = this.player_.textTracks(), o = this.player_.cache_.selectedLanguage, s = 0; s < i.length; s++) {\n var a = i[s];\n o && o.enabled && o.language && o.language === a.language && a.kind in r ? n = a.kind === o.kind ? a : n || a : o && !o.enabled ? t = e = n = null : a[\"default\"] && (\"descriptions\" !== a.kind || e ? a.kind in r && !t && (t = a) : e = a);\n }\n\n n ? n.mode = \"showing\" : t ? t.mode = \"showing\" : e && (e.mode = \"showing\");\n }, t.toggleDisplay = function () {\n this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks ? this.hide() : this.show();\n }, t.createEl = function () {\n return o.prototype.createEl.call(this, \"div\", {\n className: \"vjs-text-track-display\"\n }, {\n \"aria-live\": \"off\",\n \"aria-atomic\": \"true\"\n });\n }, t.clearDisplay = function () {\n \"function\" == typeof h.WebVTT && h.WebVTT.processCues(h, [], this.el_);\n }, t.updateDisplay = function () {\n var e = this.player_.textTracks(),\n t = this.options_.allowMultipleShowingTracks;\n\n if (this.clearDisplay(), t) {\n for (var n = [], r = 0; r < e.length; ++r) {\n var i = e[r];\n \"showing\" === i.mode && n.push(i);\n }\n\n this.updateForTrack(n);\n } else {\n for (var o = null, s = null, a = e.length; a--;) {\n var l = e[a];\n \"showing\" === l.mode && (\"descriptions\" === l.kind ? o = l : s = l);\n }\n\n s ? (\"off\" !== this.getAttribute(\"aria-live\") && this.setAttribute(\"aria-live\", \"off\"), this.updateForTrack(s)) : o && (\"assertive\" !== this.getAttribute(\"aria-live\") && this.setAttribute(\"aria-live\", \"assertive\"), this.updateForTrack(o));\n }\n }, t.updateDisplayState = function (e) {\n for (var t = this.player_.textTrackSettings.getValues(), n = e.activeCues, r = n.length; r--;) {\n var i = n[r];\n\n if (i) {\n var o = i.displayState;\n\n if (t.color && (o.firstChild.style.color = t.color), t.textOpacity && Xr(o.firstChild, \"color\", Gr(t.color || \"#fff\", t.textOpacity)), t.backgroundColor && (o.firstChild.style.backgroundColor = t.backgroundColor), t.backgroundOpacity && Xr(o.firstChild, \"backgroundColor\", Gr(t.backgroundColor || \"#000\", t.backgroundOpacity)), t.windowColor && (t.windowOpacity ? Xr(o, \"backgroundColor\", Gr(t.windowColor, t.windowOpacity)) : o.style.backgroundColor = t.windowColor), t.edgeStyle && (\"dropshadow\" === t.edgeStyle ? o.firstChild.style.textShadow = \"2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px \" + zr : \"raised\" === t.edgeStyle ? o.firstChild.style.textShadow = \"1px 1px #222, 2px 2px #222, 3px 3px \" + zr : \"depressed\" === t.edgeStyle ? o.firstChild.style.textShadow = \"1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px \" + zr : \"uniform\" === t.edgeStyle && (o.firstChild.style.textShadow = \"0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px \" + zr)), t.fontPercent && 1 !== t.fontPercent) {\n var s = h.parseFloat(o.style.fontSize);\n o.style.fontSize = s * t.fontPercent + \"px\", o.style.height = \"auto\", o.style.top = \"auto\", o.style.bottom = \"2px\";\n }\n\n t.fontFamily && \"default\" !== t.fontFamily && (\"small-caps\" === t.fontFamily ? o.firstChild.style.fontVariant = \"small-caps\" : o.firstChild.style.fontFamily = qr[t.fontFamily]);\n }\n }\n }, t.updateForTrack = function (e) {\n if (Array.isArray(e) || (e = [e]), \"function\" == typeof h.WebVTT && !e.every(function (e) {\n return !e.activeCues;\n })) {\n for (var t = [], n = 0; n < e.length; ++n) {\n for (var r = e[n], i = 0; i < r.activeCues.length; ++i) {\n t.push(r.activeCues[i]);\n }\n }\n\n h.WebVTT.processCues(h, t, this.el_);\n\n for (var o = 0; o < e.length; ++o) {\n for (var s = e[o], a = 0; a < s.activeCues.length; ++a) {\n var l = s.activeCues[a].displayState;\n E(l, \"vjs-text-track-cue\"), E(l, \"vjs-text-track-cue-\" + (s.language ? s.language : o));\n }\n\n this.player_.textTrackSettings && this.updateDisplayState(s);\n }\n }\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"TextTrackDisplay\", Yr);\n\n var Qr = function (i) {\n function e() {\n return i.apply(this, arguments) || this;\n }\n\n return De(e, i), e.prototype.createEl = function () {\n var e = this.player_.isAudio(),\n t = this.localize(e ? \"Audio Player\" : \"Video Player\"),\n n = b(\"span\", {\n className: \"vjs-control-text\",\n innerHTML: this.localize(\"{1} is loading.\", [t])\n }),\n r = i.prototype.createEl.call(this, \"div\", {\n className: \"vjs-loading-spinner\",\n dir: \"ltr\"\n });\n return r.appendChild(n), r;\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"LoadingSpinner\", Qr);\n\n var Jr = function (t) {\n function e() {\n return t.apply(this, arguments) || this;\n }\n\n De(e, t);\n var n = e.prototype;\n return n.createEl = function (e, t, n) {\n void 0 === t && (t = {}), void 0 === n && (n = {}), t = y({\n innerHTML: '<span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>',\n className: this.buildCSSClass()\n }, t), n = y({\n type: \"button\"\n }, n);\n var r = Oe.prototype.createEl.call(this, \"button\", t, n);\n return this.createControlTextEl(r), r;\n }, n.addChild = function (e, t) {\n void 0 === t && (t = {});\n var n = this.constructor.name;\n return f.warn(\"Adding an actionable (user controllable) child to a Button (\" + n + \") is not supported; use a ClickableComponent instead.\"), Oe.prototype.addChild.call(this, e, t);\n }, n.enable = function () {\n t.prototype.enable.call(this), this.el_.removeAttribute(\"disabled\");\n }, n.disable = function () {\n t.prototype.disable.call(this), this.el_.setAttribute(\"disabled\", \"disabled\");\n }, n.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Space\") || Pt.isEventKey(e, \"Enter\") ? e.stopPropagation() : t.prototype.handleKeyDown.call(this, e);\n }, e;\n }(Wr);\n\n Oe.registerComponent(\"Button\", Jr);\n\n var Zr = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).mouseused_ = !1, n.on(\"mousedown\", n.handleMouseDown), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-big-play-button\";\n }, t.handleClick = function (e) {\n var t = this.player_.play();\n if (this.mouseused_ && e.clientX && e.clientY) return kt(t), void (this.player_.tech(!0) && this.player_.tech(!0).focus());\n var n = this.player_.getChild(\"controlBar\"),\n r = n && n.getChild(\"playToggle\");\n\n if (r) {\n var _i3 = function _i3() {\n return r.focus();\n };\n\n Tt(t) ? t.then(_i3, function () {}) : this.setTimeout(_i3, 1);\n } else this.player_.tech(!0).focus();\n }, t.handleKeyDown = function (e) {\n this.mouseused_ = !1, r.prototype.handleKeyDown.call(this, e);\n }, t.handleMouseDown = function (e) {\n this.mouseused_ = !0;\n }, e;\n }(Jr);\n\n Zr.prototype.controlText_ = \"Play Video\", Oe.registerComponent(\"BigPlayButton\", Zr);\n\n var ei = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).controlText(t && t.controlText || n.localize(\"Close\")), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-close-button \" + r.prototype.buildCSSClass.call(this);\n }, t.handleClick = function (e) {\n this.trigger({\n type: \"close\",\n bubbles: !1\n });\n }, t.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Esc\") ? (e.preventDefault(), e.stopPropagation(), this.trigger(\"click\")) : r.prototype.handleKeyDown.call(this, e);\n }, e;\n }(Jr);\n\n Oe.registerComponent(\"CloseButton\", ei);\n\n var ti = function (r) {\n function e(e, t) {\n var n;\n return void 0 === t && (t = {}), n = r.call(this, e, t) || this, t.replay = void 0 === t.replay || t.replay, n.on(e, \"play\", n.handlePlay), n.on(e, \"pause\", n.handlePause), t.replay && n.on(e, \"ended\", n.handleEnded), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-play-control \" + r.prototype.buildCSSClass.call(this);\n }, t.handleClick = function (e) {\n this.player_.paused() ? this.player_.play() : this.player_.pause();\n }, t.handleSeeked = function (e) {\n this.removeClass(\"vjs-ended\"), this.player_.paused() ? this.handlePause(e) : this.handlePlay(e);\n }, t.handlePlay = function (e) {\n this.removeClass(\"vjs-ended\"), this.removeClass(\"vjs-paused\"), this.addClass(\"vjs-playing\"), this.controlText(\"Pause\");\n }, t.handlePause = function (e) {\n this.removeClass(\"vjs-playing\"), this.addClass(\"vjs-paused\"), this.controlText(\"Play\");\n }, t.handleEnded = function (e) {\n this.removeClass(\"vjs-playing\"), this.addClass(\"vjs-ended\"), this.controlText(\"Replay\"), this.one(this.player_, \"seeked\", this.handleSeeked);\n }, e;\n }(Jr);\n\n ti.prototype.controlText_ = \"Play\", Oe.registerComponent(\"PlayToggle\", ti);\n\n function ni(e, t) {\n e = e < 0 ? 0 : e;\n var n = Math.floor(e % 60),\n r = Math.floor(e / 60 % 60),\n i = Math.floor(e / 3600),\n o = Math.floor(t / 60 % 60),\n s = Math.floor(t / 3600);\n return !isNaN(e) && e !== 1 / 0 || (i = r = n = \"-\"), (i = 0 < i || 0 < s ? i + \":\" : \"\") + (r = ((i || 10 <= o) && r < 10 ? \"0\" + r : r) + \":\") + (n = n < 10 ? \"0\" + n : n);\n }\n\n var ri = ni;\n\n function ii(e, t) {\n return void 0 === t && (t = e), ri(e, t);\n }\n\n var oi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).throttledUpdateContent = fe(pe(Le(n), n.updateContent), 30), n.on(e, \"timeupdate\", n.throttledUpdateContent), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n var e = this.buildCSSClass(),\n t = r.prototype.createEl.call(this, \"div\", {\n className: e + \" vjs-time-control vjs-control\",\n innerHTML: '<span class=\"vjs-control-text\" role=\"presentation\">' + this.localize(this.labelText_) + \" </span>\"\n });\n return this.contentEl_ = b(\"span\", {\n className: e + \"-display\"\n }, {\n \"aria-live\": \"off\",\n role: \"presentation\"\n }), this.updateTextNode_(), t.appendChild(this.contentEl_), t;\n }, t.dispose = function () {\n this.contentEl_ = null, this.textNode_ = null, r.prototype.dispose.call(this);\n }, t.updateTextNode_ = function () {\n if (this.contentEl_) {\n for (; this.contentEl_.firstChild;) {\n this.contentEl_.removeChild(this.contentEl_.firstChild);\n }\n\n this.textNode_ = d.createTextNode(this.formattedTime_ || this.formatTime_(0)), this.contentEl_.appendChild(this.textNode_);\n }\n }, t.formatTime_ = function (e) {\n return ii(e);\n }, t.updateFormattedTime_ = function (e) {\n var t = this.formatTime_(e);\n t !== this.formattedTime_ && (this.formattedTime_ = t, this.requestAnimationFrame(this.updateTextNode_));\n }, t.updateContent = function (e) {}, e;\n }(Oe);\n\n oi.prototype.labelText_ = \"Time\", oi.prototype.controlText_ = \"Time\", Oe.registerComponent(\"TimeDisplay\", oi);\n\n var si = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, \"ended\", n.handleEnded), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-current-time\";\n }, t.updateContent = function (e) {\n var t = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.updateFormattedTime_(t);\n }, t.handleEnded = function (e) {\n this.player_.duration() && this.updateFormattedTime_(this.player_.duration());\n }, e;\n }(oi);\n\n si.prototype.labelText_ = \"Current Time\", si.prototype.controlText_ = \"Current Time\", Oe.registerComponent(\"CurrentTimeDisplay\", si);\n\n var ai = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, \"durationchange\", n.updateContent), n.on(e, \"loadstart\", n.updateContent), n.on(e, \"loadedmetadata\", n.throttledUpdateContent), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-duration\";\n }, t.updateContent = function (e) {\n var t = this.player_.duration();\n this.duration_ !== t && (this.duration_ = t, this.updateFormattedTime_(t));\n }, e;\n }(oi);\n\n ai.prototype.labelText_ = \"Duration\", ai.prototype.controlText_ = \"Duration\", Oe.registerComponent(\"DurationDisplay\", ai);\n\n var li = function (e) {\n function t() {\n return e.apply(this, arguments) || this;\n }\n\n return De(t, e), t.prototype.createEl = function () {\n return e.prototype.createEl.call(this, \"div\", {\n className: \"vjs-time-control vjs-time-divider\",\n innerHTML: \"<div><span>/</span></div>\"\n }, {\n \"aria-hidden\": !0\n });\n }, t;\n }(Oe);\n\n Oe.registerComponent(\"TimeDivider\", li);\n\n var ci = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, \"durationchange\", n.throttledUpdateContent), n.on(e, \"ended\", n.handleEnded), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-remaining-time\";\n }, t.createEl = function () {\n var e = r.prototype.createEl.call(this);\n return e.insertBefore(b(\"span\", {}, {\n \"aria-hidden\": !0\n }, \"-\"), this.contentEl_), e;\n }, t.updateContent = function (e) {\n \"number\" == typeof this.player_.duration() && (this.player_.remainingTimeDisplay ? this.updateFormattedTime_(this.player_.remainingTimeDisplay()) : this.updateFormattedTime_(this.player_.remainingTime()));\n }, t.handleEnded = function (e) {\n this.player_.duration() && this.updateFormattedTime_(0);\n }, e;\n }(oi);\n\n ci.prototype.labelText_ = \"Remaining Time\", ci.prototype.controlText_ = \"Remaining Time\", Oe.registerComponent(\"RemainingTimeDisplay\", ci);\n\n var ui = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).updateShowing(), n.on(n.player(), \"durationchange\", n.updateShowing), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n var e = r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-live-control vjs-control\"\n });\n return this.contentEl_ = b(\"div\", {\n className: \"vjs-live-display\",\n innerHTML: '<span class=\"vjs-control-text\">' + this.localize(\"Stream Type\") + \" </span>\" + this.localize(\"LIVE\")\n }, {\n \"aria-live\": \"off\"\n }), e.appendChild(this.contentEl_), e;\n }, t.dispose = function () {\n this.contentEl_ = null, r.prototype.dispose.call(this);\n }, t.updateShowing = function (e) {\n this.player().duration() === 1 / 0 ? this.show() : this.hide();\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"LiveDisplay\", ui);\n\n var hi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).updateLiveEdgeStatus(), n.player_.liveTracker && n.on(n.player_.liveTracker, \"liveedgechange\", n.updateLiveEdgeStatus), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n var e = r.prototype.createEl.call(this, \"button\", {\n className: \"vjs-seek-to-live-control vjs-control\"\n });\n return this.textEl_ = b(\"span\", {\n className: \"vjs-seek-to-live-text\",\n innerHTML: this.localize(\"LIVE\")\n }, {\n \"aria-hidden\": \"true\"\n }), e.appendChild(this.textEl_), e;\n }, t.updateLiveEdgeStatus = function (e) {\n !this.player_.liveTracker || this.player_.liveTracker.atLiveEdge() ? (this.setAttribute(\"aria-disabled\", !0), this.addClass(\"vjs-at-live-edge\"), this.controlText(\"Seek to live, currently playing live\")) : (this.setAttribute(\"aria-disabled\", !1), this.removeClass(\"vjs-at-live-edge\"), this.controlText(\"Seek to live, currently behind live\"));\n }, t.handleClick = function () {\n this.player_.liveTracker.seekToLiveEdge();\n }, t.dispose = function () {\n this.player_.liveTracker && this.off(this.player_.liveTracker, \"liveedgechange\", this.updateLiveEdgeStatus), this.textEl_ = null, r.prototype.dispose.call(this);\n }, e;\n }(Jr);\n\n hi.prototype.controlText_ = \"Seek to live, currently playing live\", Oe.registerComponent(\"SeekToLive\", hi);\n\n var di = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).bar = n.getChild(n.options_.barName), n.vertical(!!n.options_.vertical), n.enable(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.enabled = function () {\n return this.enabled_;\n }, t.enable = function () {\n this.enabled() || (this.on(\"mousedown\", this.handleMouseDown), this.on(\"touchstart\", this.handleMouseDown), this.on(\"keydown\", this.handleKeyDown), this.on(\"click\", this.handleClick), this.on(this.player_, \"controlsvisible\", this.update), this.playerEvent && this.on(this.player_, this.playerEvent, this.update), this.removeClass(\"disabled\"), this.setAttribute(\"tabindex\", 0), this.enabled_ = !0);\n }, t.disable = function () {\n if (this.enabled()) {\n var e = this.bar.el_.ownerDocument;\n this.off(\"mousedown\", this.handleMouseDown), this.off(\"touchstart\", this.handleMouseDown), this.off(\"keydown\", this.handleKeyDown), this.off(\"click\", this.handleClick), this.off(this.player_, \"controlsvisible\", this.update), this.off(e, \"mousemove\", this.handleMouseMove), this.off(e, \"mouseup\", this.handleMouseUp), this.off(e, \"touchmove\", this.handleMouseMove), this.off(e, \"touchend\", this.handleMouseUp), this.removeAttribute(\"tabindex\"), this.addClass(\"disabled\"), this.playerEvent && this.off(this.player_, this.playerEvent, this.update), this.enabled_ = !1;\n }\n }, t.createEl = function (e, t, n) {\n return void 0 === t && (t = {}), void 0 === n && (n = {}), t.className = t.className + \" vjs-slider\", t = y({\n tabIndex: 0\n }, t), n = y({\n role: \"slider\",\n \"aria-valuenow\": 0,\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n tabIndex: 0\n }, n), r.prototype.createEl.call(this, e, t, n);\n }, t.handleMouseDown = function (e) {\n var t = this.bar.el_.ownerDocument;\n \"mousedown\" === e.type && e.preventDefault(), \"touchstart\" !== e.type || et || e.preventDefault(), O(), this.addClass(\"vjs-sliding\"), this.trigger(\"slideractive\"), this.on(t, \"mousemove\", this.handleMouseMove), this.on(t, \"mouseup\", this.handleMouseUp), this.on(t, \"touchmove\", this.handleMouseMove), this.on(t, \"touchend\", this.handleMouseUp), this.handleMouseMove(e);\n }, t.handleMouseMove = function (e) {}, t.handleMouseUp = function () {\n var e = this.bar.el_.ownerDocument;\n D(), this.removeClass(\"vjs-sliding\"), this.trigger(\"sliderinactive\"), this.off(e, \"mousemove\", this.handleMouseMove), this.off(e, \"mouseup\", this.handleMouseUp), this.off(e, \"touchmove\", this.handleMouseMove), this.off(e, \"touchend\", this.handleMouseUp), this.update();\n }, t.update = function () {\n if (this.el_) {\n var e = this.getPercent(),\n t = this.bar;\n\n if (t) {\n (\"number\" != typeof e || e != e || e < 0 || e === 1 / 0) && (e = 0);\n var n = (100 * e).toFixed(2) + \"%\",\n r = t.el().style,\n i = this.vertical() ? \"height\" : \"width\";\n return r[i] !== n && (r[i] = n), e;\n }\n }\n }, t.calculateDistance = function (e) {\n var t = L(this.el_, e);\n return this.vertical() ? t.y : t.x;\n }, t.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Left\") || Pt.isEventKey(e, \"Down\") ? (e.preventDefault(), e.stopPropagation(), this.stepBack()) : Pt.isEventKey(e, \"Right\") || Pt.isEventKey(e, \"Up\") ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : r.prototype.handleKeyDown.call(this, e);\n }, t.handleClick = function (e) {\n e.stopPropagation(), e.preventDefault();\n }, t.vertical = function (e) {\n if (void 0 === e) return this.vertical_ || !1;\n this.vertical_ = !!e, this.vertical_ ? this.addClass(\"vjs-slider-vertical\") : this.addClass(\"vjs-slider-horizontal\");\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"Slider\", di);\n\n var pi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).partEls_ = [], n.on(e, \"progress\", n.update), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-load-progress\",\n innerHTML: '<span class=\"vjs-control-text\"><span>' + this.localize(\"Loaded\") + '</span>: <span class=\"vjs-control-text-loaded-percentage\">0%</span></span>'\n });\n }, t.dispose = function () {\n this.partEls_ = null, r.prototype.dispose.call(this);\n }, t.update = function (e) {\n function t(e, t, n) {\n var r = e / t || 0;\n return r = 100 * (1 <= r ? 1 : r), n && (r = r.toFixed(2)), r + \"%\";\n }\n\n var n = this.player_.liveTracker,\n r = this.player_.buffered(),\n i = n && n.isLive() ? n.seekableEnd() : this.player_.duration(),\n o = this.player_.bufferedEnd(),\n s = this.partEls_,\n a = this.$(\".vjs-control-text-loaded-percentage\");\n this.el_.style.width = t(o, i), T(a, t(o, i, !0));\n\n for (var l = 0; l < r.length; l++) {\n var c = r.start(l),\n u = r.end(l),\n h = s[l];\n h || (h = this.el_.appendChild(b()), s[l] = h), h.style.left = t(c, o), h.style.width = t(u - c, o);\n }\n\n for (var d = s.length; d > r.length; d--) {\n this.el_.removeChild(s[d - 1]);\n }\n\n s.length = r.length;\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"LoadProgressBar\", pi);\n\n var fi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).update = fe(pe(Le(n), n.update), 30), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-time-tooltip\"\n }, {\n \"aria-hidden\": \"true\"\n });\n }, t.update = function (e, t, n) {\n var r = M(this.el_),\n i = M(this.player_.el()),\n o = e.width * t;\n\n if (i && r) {\n var s = e.left - i.left + o,\n a = e.width - o + (i.right - e.right),\n l = r.width / 2;\n s < l ? l += l - s : a < l && (l = a), l < 0 ? l = 0 : l > r.width && (l = r.width), this.el_.style.right = \"-\" + l + \"px\", this.write(n);\n }\n }, t.write = function (e) {\n T(this.el_, e);\n }, t.updateTime = function (i, o, s, a) {\n var l = this;\n this.rafId_ && this.cancelAnimationFrame(this.rafId_), this.rafId_ = this.requestAnimationFrame(function () {\n var e,\n t = l.player_.duration();\n\n if (l.player_.liveTracker && l.player_.liveTracker.isLive()) {\n var n = l.player_.liveTracker.liveWindow(),\n r = n - o * n;\n e = (r < 1 ? \"\" : \"-\") + ii(r, n);\n } else e = ii(s, t);\n\n l.update(i, o, e), a && a();\n });\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"TimeTooltip\", fi);\n\n var vi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).update = fe(pe(Le(n), n.update), 30), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-play-progress vjs-slider-bar\"\n }, {\n \"aria-hidden\": \"true\"\n });\n }, t.update = function (e, t) {\n var n = this.getChild(\"timeTooltip\");\n\n if (n) {\n var r = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n n.updateTime(e, t, r);\n }\n }, e;\n }(Oe);\n\n vi.prototype.options_ = {\n children: []\n }, qe || Xe || vi.prototype.options_.children.push(\"timeTooltip\"), Oe.registerComponent(\"PlayProgressBar\", vi);\n\n var yi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).update = fe(pe(Le(n), n.update), 30), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-mouse-display\"\n });\n }, t.update = function (e, t) {\n var n = this,\n r = t * this.player_.duration();\n this.getChild(\"timeTooltip\").updateTime(e, t, r, function () {\n n.el_.style.left = e.width * t + \"px\";\n });\n }, e;\n }(Oe);\n\n yi.prototype.options_ = {\n children: [\"timeTooltip\"]\n }, Oe.registerComponent(\"MouseTimeDisplay\", yi);\n\n var gi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).setEventHandlers_(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.setEventHandlers_ = function () {\n this.update = fe(pe(this, this.update), 30), this.on(this.player_, \"timeupdate\", this.update), this.on(this.player_, \"ended\", this.handleEnded), this.on(this.player_, \"durationchange\", this.update), this.player_.liveTracker && this.on(this.player_.liveTracker, \"liveedgechange\", this.update), this.updateInterval = null, this.on(this.player_, [\"playing\"], this.enableInterval_), this.on(this.player_, [\"ended\", \"pause\", \"waiting\"], this.disableInterval_), \"hidden\" in d && \"visibilityState\" in d && this.on(d, \"visibilitychange\", this.toggleVisibility_);\n }, t.toggleVisibility_ = function (e) {\n d.hidden ? this.disableInterval_(e) : (this.enableInterval_(), this.requestAnimationFrame(this.update));\n }, t.enableInterval_ = function () {\n var e = this;\n this.clearInterval(this.updateInterval), this.updateInterval = this.setInterval(function () {\n e.requestAnimationFrame(e.update);\n }, 30);\n }, t.disableInterval_ = function (e) {\n this.player_.liveTracker && this.player_.liveTracker.isLive() && \"ended\" !== e.type || this.clearInterval(this.updateInterval);\n }, t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-progress-holder\"\n }, {\n \"aria-label\": this.localize(\"Progress Bar\")\n });\n }, t.update_ = function (e, t) {\n var n = this.player_.liveTracker,\n r = this.player_.duration();\n n && n.isLive() && (r = this.player_.liveTracker.liveCurrentTime()), this.el_.setAttribute(\"aria-valuenow\", (100 * t).toFixed(2)), this.el_.setAttribute(\"aria-valuetext\", this.localize(\"progress bar timing: currentTime={1} duration={2}\", [ii(e, r), ii(r, r)], \"{1} of {2}\")), this.bar && this.bar.update(M(this.el_), t);\n }, t.update = function (e) {\n if (null !== this.el().offsetParent) {\n var t = r.prototype.update.call(this);\n return this.update_(this.getCurrentTime_(), t), t;\n }\n }, t.getCurrentTime_ = function () {\n return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n }, t.handleEnded = function (e) {\n this.update_(this.player_.duration(), 1);\n }, t.getPercent = function () {\n var e,\n t = this.getCurrentTime_(),\n n = this.player_.liveTracker;\n return n && n.isLive() ? (e = (t - n.seekableStart()) / n.liveWindow(), n.atLiveEdge() && (e = 1)) : e = t / this.player_.duration(), 1 <= e ? 1 : e || 0;\n }, t.handleMouseDown = function (e) {\n V(e) && (e.stopPropagation(), this.player_.scrubbing(!0), this.videoWasPlaying = !this.player_.paused(), this.player_.pause(), r.prototype.handleMouseDown.call(this, e));\n }, t.handleMouseMove = function (e) {\n if (V(e)) {\n var t,\n n = this.calculateDistance(e),\n r = this.player_.liveTracker;\n\n if (r && r.isLive()) {\n var i = r.seekableStart(),\n o = r.liveCurrentTime();\n if (o <= (t = i + n * r.liveWindow()) && (t = o), t <= i && (t = i + .1), t === 1 / 0) return;\n } else (t = n * this.player_.duration()) === this.player_.duration() && (t -= .1);\n\n this.player_.currentTime(t);\n }\n }, t.enable = function () {\n r.prototype.enable.call(this);\n var e = this.getChild(\"mouseTimeDisplay\");\n e && e.show();\n }, t.disable = function () {\n r.prototype.disable.call(this);\n var e = this.getChild(\"mouseTimeDisplay\");\n e && e.hide();\n }, t.handleMouseUp = function (e) {\n r.prototype.handleMouseUp.call(this, e), e && e.stopPropagation(), this.player_.scrubbing(!1), this.player_.trigger({\n type: \"timeupdate\",\n target: this,\n manuallyTriggered: !0\n }), this.videoWasPlaying && kt(this.player_.play());\n }, t.stepForward = function () {\n this.player_.currentTime(this.player_.currentTime() + 5);\n }, t.stepBack = function () {\n this.player_.currentTime(this.player_.currentTime() - 5);\n }, t.handleAction = function (e) {\n this.player_.paused() ? this.player_.play() : this.player_.pause();\n }, t.handleKeyDown = function (e) {\n if (Pt.isEventKey(e, \"Space\") || Pt.isEventKey(e, \"Enter\")) e.preventDefault(), e.stopPropagation(), this.handleAction(e);else if (Pt.isEventKey(e, \"Home\")) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(0);else if (Pt.isEventKey(e, \"End\")) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.duration());else if (/^[0-9]$/.test(Pt(e))) {\n e.preventDefault(), e.stopPropagation();\n var t = 10 * (Pt.codes[Pt(e)] - Pt.codes[0]) / 100;\n this.player_.currentTime(this.player_.duration() * t);\n } else Pt.isEventKey(e, \"PgDn\") ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.currentTime() - 60)) : Pt.isEventKey(e, \"PgUp\") ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.currentTime() + 60)) : r.prototype.handleKeyDown.call(this, e);\n }, e;\n }(di);\n\n gi.prototype.options_ = {\n children: [\"loadProgressBar\", \"playProgressBar\"],\n barName: \"playProgressBar\"\n }, qe || Xe || gi.prototype.options_.children.splice(1, 0, \"mouseTimeDisplay\"), Oe.registerComponent(\"SeekBar\", gi);\n\n var mi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).handleMouseMove = fe(pe(Le(n), n.handleMouseMove), 30), n.throttledHandleMouseSeek = fe(pe(Le(n), n.handleMouseSeek), 30), n.enable(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-progress-control vjs-control\"\n });\n }, t.handleMouseMove = function (e) {\n var t = this.getChild(\"seekBar\");\n\n if (t) {\n var n = t.getChild(\"mouseTimeDisplay\"),\n r = t.el(),\n i = M(r),\n o = L(r, e).x;\n 1 < o ? o = 1 : o < 0 && (o = 0), n && n.update(i, o);\n }\n }, t.handleMouseSeek = function (e) {\n var t = this.getChild(\"seekBar\");\n t && t.handleMouseMove(e);\n }, t.enabled = function () {\n return this.enabled_;\n }, t.disable = function () {\n this.children().forEach(function (e) {\n return e.disable && e.disable();\n }), this.enabled() && (this.off([\"mousedown\", \"touchstart\"], this.handleMouseDown), this.off(this.el_, \"mousemove\", this.handleMouseMove), this.handleMouseUp(), this.addClass(\"disabled\"), this.enabled_ = !1);\n }, t.enable = function () {\n this.children().forEach(function (e) {\n return e.enable && e.enable();\n }), this.enabled() || (this.on([\"mousedown\", \"touchstart\"], this.handleMouseDown), this.on(this.el_, \"mousemove\", this.handleMouseMove), this.removeClass(\"disabled\"), this.enabled_ = !0);\n }, t.handleMouseDown = function (e) {\n var t = this.el_.ownerDocument,\n n = this.getChild(\"seekBar\");\n n && n.handleMouseDown(e), this.on(t, \"mousemove\", this.throttledHandleMouseSeek), this.on(t, \"touchmove\", this.throttledHandleMouseSeek), this.on(t, \"mouseup\", this.handleMouseUp), this.on(t, \"touchend\", this.handleMouseUp);\n }, t.handleMouseUp = function (e) {\n var t = this.el_.ownerDocument,\n n = this.getChild(\"seekBar\");\n n && n.handleMouseUp(e), this.off(t, \"mousemove\", this.throttledHandleMouseSeek), this.off(t, \"touchmove\", this.throttledHandleMouseSeek), this.off(t, \"mouseup\", this.handleMouseUp), this.off(t, \"touchend\", this.handleMouseUp);\n }, e;\n }(Oe);\n\n mi.prototype.options_ = {\n children: [\"seekBar\"]\n }, Oe.registerComponent(\"ProgressControl\", mi);\n\n var _i = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, [\"enterpictureinpicture\", \"leavepictureinpicture\"], n.handlePictureInPictureChange), d.pictureInPictureEnabled || n.disable(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-picture-in-picture-control \" + r.prototype.buildCSSClass.call(this);\n }, t.handlePictureInPictureChange = function (e) {\n this.player_.isInPictureInPicture() ? this.controlText(\"Exit Picture-in-Picture\") : this.controlText(\"Picture-in-Picture\");\n }, t.handleClick = function (e) {\n this.player_.isInPictureInPicture() ? this.player_.exitPictureInPicture() : this.player_.requestPictureInPicture();\n }, e;\n }(Jr);\n\n _i.prototype.controlText_ = \"Picture-in-Picture\", Oe.registerComponent(\"PictureInPictureToggle\", _i);\n\n var bi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, \"fullscreenchange\", n.handleFullscreenChange), !1 === d[e.fsApi_.fullscreenEnabled] && n.disable(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-fullscreen-control \" + r.prototype.buildCSSClass.call(this);\n }, t.handleFullscreenChange = function (e) {\n this.player_.isFullscreen() ? this.controlText(\"Non-Fullscreen\") : this.controlText(\"Fullscreen\");\n }, t.handleClick = function (e) {\n this.player_.isFullscreen() ? this.player_.exitFullscreen() : this.player_.requestFullscreen();\n }, e;\n }(Jr);\n\n bi.prototype.controlText_ = \"Fullscreen\", Oe.registerComponent(\"FullscreenToggle\", bi);\n\n var Ti = function (e) {\n function t() {\n return e.apply(this, arguments) || this;\n }\n\n return De(t, e), t.prototype.createEl = function () {\n return e.prototype.createEl.call(this, \"div\", {\n className: \"vjs-volume-level\",\n innerHTML: '<span class=\"vjs-control-text\"></span>'\n });\n }, t;\n }(Oe);\n\n Oe.registerComponent(\"VolumeLevel\", Ti);\n\n var ki = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(\"slideractive\", n.updateLastVolume_), n.on(e, \"volumechange\", n.updateARIAAttributes), e.ready(function () {\n return n.updateARIAAttributes();\n }), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n return r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-volume-bar vjs-slider-bar\"\n }, {\n \"aria-label\": this.localize(\"Volume Level\"),\n \"aria-live\": \"polite\"\n });\n }, t.handleMouseDown = function (e) {\n V(e) && r.prototype.handleMouseDown.call(this, e);\n }, t.handleMouseMove = function (e) {\n V(e) && (this.checkMuted(), this.player_.volume(this.calculateDistance(e)));\n }, t.checkMuted = function () {\n this.player_.muted() && this.player_.muted(!1);\n }, t.getPercent = function () {\n return this.player_.muted() ? 0 : this.player_.volume();\n }, t.stepForward = function () {\n this.checkMuted(), this.player_.volume(this.player_.volume() + .1);\n }, t.stepBack = function () {\n this.checkMuted(), this.player_.volume(this.player_.volume() - .1);\n }, t.updateARIAAttributes = function (e) {\n var t = this.player_.muted() ? 0 : this.volumeAsPercentage_();\n this.el_.setAttribute(\"aria-valuenow\", t), this.el_.setAttribute(\"aria-valuetext\", t + \"%\");\n }, t.volumeAsPercentage_ = function () {\n return Math.round(100 * this.player_.volume());\n }, t.updateLastVolume_ = function () {\n var e = this,\n t = this.player_.volume();\n this.one(\"sliderinactive\", function () {\n 0 === e.player_.volume() && e.player_.lastVolume_(t);\n });\n }, e;\n }(di);\n\n ki.prototype.options_ = {\n children: [\"volumeLevel\"],\n barName: \"volumeLevel\"\n }, ki.prototype.playerEvent = \"volumechange\", Oe.registerComponent(\"VolumeBar\", ki);\n\n var Ci = function (r) {\n function e(e, t) {\n var n;\n return void 0 === t && (t = {}), t.vertical = t.vertical || !1, \"undefined\" != typeof t.volumeBar && !a(t.volumeBar) || (t.volumeBar = t.volumeBar || {}, t.volumeBar.vertical = t.vertical), function (e, t) {\n t.tech_ && !t.tech_.featuresVolumeControl && e.addClass(\"vjs-hidden\"), e.on(t, \"loadstart\", function () {\n t.tech_.featuresVolumeControl ? e.removeClass(\"vjs-hidden\") : e.addClass(\"vjs-hidden\");\n });\n }(Le(n = r.call(this, e, t) || this), e), n.throttledHandleMouseMove = fe(pe(Le(n), n.handleMouseMove), 30), n.on(\"mousedown\", n.handleMouseDown), n.on(\"touchstart\", n.handleMouseDown), n.on(n.volumeBar, [\"focus\", \"slideractive\"], function () {\n n.volumeBar.addClass(\"vjs-slider-active\"), n.addClass(\"vjs-slider-active\"), n.trigger(\"slideractive\");\n }), n.on(n.volumeBar, [\"blur\", \"sliderinactive\"], function () {\n n.volumeBar.removeClass(\"vjs-slider-active\"), n.removeClass(\"vjs-slider-active\"), n.trigger(\"sliderinactive\");\n }), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n var e = \"vjs-volume-horizontal\";\n return this.options_.vertical && (e = \"vjs-volume-vertical\"), r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-volume-control vjs-control \" + e\n });\n }, t.handleMouseDown = function (e) {\n var t = this.el_.ownerDocument;\n this.on(t, \"mousemove\", this.throttledHandleMouseMove), this.on(t, \"touchmove\", this.throttledHandleMouseMove), this.on(t, \"mouseup\", this.handleMouseUp), this.on(t, \"touchend\", this.handleMouseUp);\n }, t.handleMouseUp = function (e) {\n var t = this.el_.ownerDocument;\n this.off(t, \"mousemove\", this.throttledHandleMouseMove), this.off(t, \"touchmove\", this.throttledHandleMouseMove), this.off(t, \"mouseup\", this.handleMouseUp), this.off(t, \"touchend\", this.handleMouseUp);\n }, t.handleMouseMove = function (e) {\n this.volumeBar.handleMouseMove(e);\n }, e;\n }(Oe);\n\n Ci.prototype.options_ = {\n children: [\"volumeBar\"]\n }, Oe.registerComponent(\"VolumeControl\", Ci);\n\n var Ei = function (r) {\n function e(e, t) {\n var n;\n return function (e, t) {\n t.tech_ && !t.tech_.featuresMuteControl && e.addClass(\"vjs-hidden\"), e.on(t, \"loadstart\", function () {\n t.tech_.featuresMuteControl ? e.removeClass(\"vjs-hidden\") : e.addClass(\"vjs-hidden\");\n });\n }(Le(n = r.call(this, e, t) || this), e), n.on(e, [\"loadstart\", \"volumechange\"], n.update), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-mute-control \" + r.prototype.buildCSSClass.call(this);\n }, t.handleClick = function (e) {\n var t = this.player_.volume(),\n n = this.player_.lastVolume_();\n\n if (0 === t) {\n var r = n < .1 ? .1 : n;\n this.player_.volume(r), this.player_.muted(!1);\n } else this.player_.muted(!this.player_.muted());\n }, t.update = function (e) {\n this.updateIcon_(), this.updateControlText_();\n }, t.updateIcon_ = function () {\n var e = this.player_.volume(),\n t = 3;\n qe && this.player_.tech_ && this.player_.tech_.el_ && this.player_.muted(this.player_.tech_.el_.muted), 0 === e || this.player_.muted() ? t = 0 : e < .33 ? t = 1 : e < .67 && (t = 2);\n\n for (var n = 0; n < 4; n++) {\n S(this.el_, \"vjs-vol-\" + n);\n }\n\n E(this.el_, \"vjs-vol-\" + t);\n }, t.updateControlText_ = function () {\n var e = this.player_.muted() || 0 === this.player_.volume() ? \"Unmute\" : \"Mute\";\n this.controlText() !== e && this.controlText(e);\n }, e;\n }(Jr);\n\n Ei.prototype.controlText_ = \"Mute\", Oe.registerComponent(\"MuteToggle\", Ei);\n\n var Si = function (r) {\n function e(e, t) {\n var n;\n return void 0 === t && (t = {}), \"undefined\" != typeof t.inline ? t.inline = t.inline : t.inline = !0, \"undefined\" != typeof t.volumeControl && !a(t.volumeControl) || (t.volumeControl = t.volumeControl || {}, t.volumeControl.vertical = !t.inline), (n = r.call(this, e, t) || this).on(e, [\"loadstart\"], n.volumePanelState_), n.on(n.muteToggle, \"keyup\", n.handleKeyPress), n.on(n.volumeControl, \"keyup\", n.handleVolumeControlKeyUp), n.on(\"keydown\", n.handleKeyPress), n.on(\"mouseover\", n.handleMouseOver), n.on(\"mouseout\", n.handleMouseOut), n.on(n.volumeControl, [\"slideractive\"], n.sliderActive_), n.on(n.volumeControl, [\"sliderinactive\"], n.sliderInactive_), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.sliderActive_ = function () {\n this.addClass(\"vjs-slider-active\");\n }, t.sliderInactive_ = function () {\n this.removeClass(\"vjs-slider-active\");\n }, t.volumePanelState_ = function () {\n this.volumeControl.hasClass(\"vjs-hidden\") && this.muteToggle.hasClass(\"vjs-hidden\") && this.addClass(\"vjs-hidden\"), this.volumeControl.hasClass(\"vjs-hidden\") && !this.muteToggle.hasClass(\"vjs-hidden\") && this.addClass(\"vjs-mute-toggle-only\");\n }, t.createEl = function () {\n var e = \"vjs-volume-panel-horizontal\";\n return this.options_.inline || (e = \"vjs-volume-panel-vertical\"), r.prototype.createEl.call(this, \"div\", {\n className: \"vjs-volume-panel vjs-control \" + e\n });\n }, t.dispose = function () {\n this.handleMouseOut(), r.prototype.dispose.call(this);\n }, t.handleVolumeControlKeyUp = function (e) {\n Pt.isEventKey(e, \"Esc\") && this.muteToggle.focus();\n }, t.handleMouseOver = function (e) {\n this.addClass(\"vjs-hover\"), le(d, \"keyup\", pe(this, this.handleKeyPress));\n }, t.handleMouseOut = function (e) {\n this.removeClass(\"vjs-hover\"), ce(d, \"keyup\", pe(this, this.handleKeyPress));\n }, t.handleKeyPress = function (e) {\n Pt.isEventKey(e, \"Esc\") && this.handleMouseOut();\n }, e;\n }(Oe);\n\n Si.prototype.options_ = {\n children: [\"muteToggle\", \"volumeControl\"]\n }, Oe.registerComponent(\"VolumePanel\", Si);\n\n var wi = function (r) {\n function e(e, t) {\n var n;\n return n = r.call(this, e, t) || this, t && (n.menuButton_ = t.menuButton), n.focusedChild_ = -1, n.on(\"keydown\", n.handleKeyDown), n.boundHandleBlur_ = pe(Le(n), n.handleBlur), n.boundHandleTapClick_ = pe(Le(n), n.handleTapClick), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.addEventListenerForItem = function (e) {\n e instanceof Oe && (this.on(e, \"blur\", this.boundHandleBlur_), this.on(e, [\"tap\", \"click\"], this.boundHandleTapClick_));\n }, t.removeEventListenerForItem = function (e) {\n e instanceof Oe && (this.off(e, \"blur\", this.boundHandleBlur_), this.off(e, [\"tap\", \"click\"], this.boundHandleTapClick_));\n }, t.removeChild = function (e) {\n \"string\" == typeof e && (e = this.getChild(e)), this.removeEventListenerForItem(e), r.prototype.removeChild.call(this, e);\n }, t.addItem = function (e) {\n var t = this.addChild(e);\n t && this.addEventListenerForItem(t);\n }, t.createEl = function () {\n var e = this.options_.contentElType || \"ul\";\n this.contentEl_ = b(e, {\n className: \"vjs-menu-content\"\n }), this.contentEl_.setAttribute(\"role\", \"menu\");\n var t = r.prototype.createEl.call(this, \"div\", {\n append: this.contentEl_,\n className: \"vjs-menu\"\n });\n return t.appendChild(this.contentEl_), le(t, \"click\", function (e) {\n e.preventDefault(), e.stopImmediatePropagation();\n }), t;\n }, t.dispose = function () {\n this.contentEl_ = null, this.boundHandleBlur_ = null, this.boundHandleTapClick_ = null, r.prototype.dispose.call(this);\n }, t.handleBlur = function (e) {\n var t = e.relatedTarget || d.activeElement;\n\n if (!this.children().some(function (e) {\n return e.el() === t;\n })) {\n var n = this.menuButton_;\n n && n.buttonPressed_ && t !== n.el().firstChild && n.unpressButton();\n }\n }, t.handleTapClick = function (t) {\n if (this.menuButton_) {\n this.menuButton_.unpressButton();\n var e = this.children();\n if (!Array.isArray(e)) return;\n var n = e.filter(function (e) {\n return e.el() === t.target;\n })[0];\n if (!n) return;\n \"CaptionSettingsMenuItem\" !== n.name() && this.menuButton_.focus();\n }\n }, t.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Left\") || Pt.isEventKey(e, \"Down\") ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : (Pt.isEventKey(e, \"Right\") || Pt.isEventKey(e, \"Up\")) && (e.preventDefault(), e.stopPropagation(), this.stepBack());\n }, t.stepForward = function () {\n var e = 0;\n void 0 !== this.focusedChild_ && (e = this.focusedChild_ + 1), this.focus(e);\n }, t.stepBack = function () {\n var e = 0;\n void 0 !== this.focusedChild_ && (e = this.focusedChild_ - 1), this.focus(e);\n }, t.focus = function (e) {\n void 0 === e && (e = 0);\n var t = this.children().slice();\n t.length && t[0].className && /vjs-menu-title/.test(t[0].className) && t.shift(), 0 < t.length && (e < 0 ? e = 0 : e >= t.length && (e = t.length - 1), t[this.focusedChild_ = e].el_.focus());\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"Menu\", wi);\n\n var Pi = function (i) {\n function e(e, t) {\n var n;\n void 0 === t && (t = {}), (n = i.call(this, e, t) || this).menuButton_ = new Jr(e, t), n.menuButton_.controlText(n.controlText_), n.menuButton_.el_.setAttribute(\"aria-haspopup\", \"true\");\n var r = Jr.prototype.buildCSSClass();\n return n.menuButton_.el_.className = n.buildCSSClass() + \" \" + r, n.menuButton_.removeClass(\"vjs-control\"), n.addChild(n.menuButton_), n.update(), n.enabled_ = !0, n.on(n.menuButton_, \"tap\", n.handleClick), n.on(n.menuButton_, \"click\", n.handleClick), n.on(n.menuButton_, \"keydown\", n.handleKeyDown), n.on(n.menuButton_, \"mouseenter\", function () {\n n.addClass(\"vjs-hover\"), n.menu.show(), le(d, \"keyup\", pe(Le(n), n.handleMenuKeyUp));\n }), n.on(\"mouseleave\", n.handleMouseLeave), n.on(\"keydown\", n.handleSubmenuKeyDown), n;\n }\n\n De(e, i);\n var t = e.prototype;\n return t.update = function () {\n var e = this.createMenu();\n this.menu && (this.menu.dispose(), this.removeChild(this.menu)), this.menu = e, this.addChild(e), this.buttonPressed_ = !1, this.menuButton_.el_.setAttribute(\"aria-expanded\", \"false\"), this.items && this.items.length <= this.hideThreshold_ ? this.hide() : this.show();\n }, t.createMenu = function () {\n var e = new wi(this.player_, {\n menuButton: this\n });\n\n if (this.hideThreshold_ = 0, this.options_.title) {\n var t = b(\"li\", {\n className: \"vjs-menu-title\",\n innerHTML: Ae(this.options_.title),\n tabIndex: -1\n });\n this.hideThreshold_ += 1;\n var n = new Oe(this.player_, {\n el: t\n });\n e.addItem(n);\n }\n\n if (this.items = this.createItems(), this.items) for (var r = 0; r < this.items.length; r++) {\n e.addItem(this.items[r]);\n }\n return e;\n }, t.createItems = function () {}, t.createEl = function () {\n return i.prototype.createEl.call(this, \"div\", {\n className: this.buildWrapperCSSClass()\n }, {});\n }, t.buildWrapperCSSClass = function () {\n var e = \"vjs-menu-button\";\n return !0 === this.options_.inline ? e += \"-inline\" : e += \"-popup\", \"vjs-menu-button \" + e + \" \" + Jr.prototype.buildCSSClass() + \" \" + i.prototype.buildCSSClass.call(this);\n }, t.buildCSSClass = function () {\n var e = \"vjs-menu-button\";\n return !0 === this.options_.inline ? e += \"-inline\" : e += \"-popup\", \"vjs-menu-button \" + e + \" \" + i.prototype.buildCSSClass.call(this);\n }, t.controlText = function (e, t) {\n return void 0 === t && (t = this.menuButton_.el()), this.menuButton_.controlText(e, t);\n }, t.dispose = function () {\n this.handleMouseLeave(), i.prototype.dispose.call(this);\n }, t.handleClick = function (e) {\n this.buttonPressed_ ? this.unpressButton() : this.pressButton();\n }, t.handleMouseLeave = function (e) {\n this.removeClass(\"vjs-hover\"), ce(d, \"keyup\", pe(this, this.handleMenuKeyUp));\n }, t.focus = function () {\n this.menuButton_.focus();\n }, t.blur = function () {\n this.menuButton_.blur();\n }, t.handleKeyDown = function (e) {\n Pt.isEventKey(e, \"Esc\") || Pt.isEventKey(e, \"Tab\") ? (this.buttonPressed_ && this.unpressButton(), Pt.isEventKey(e, \"Tab\") || (e.preventDefault(), this.menuButton_.focus())) : (Pt.isEventKey(e, \"Up\") || Pt.isEventKey(e, \"Down\")) && (this.buttonPressed_ || (e.preventDefault(), this.pressButton()));\n }, t.handleMenuKeyUp = function (e) {\n (Pt.isEventKey(e, \"Esc\") || Pt.isEventKey(e, \"Tab\")) && this.removeClass(\"vjs-hover\");\n }, t.handleSubmenuKeyPress = function (e) {\n this.handleSubmenuKeyDown(e);\n }, t.handleSubmenuKeyDown = function (e) {\n (Pt.isEventKey(e, \"Esc\") || Pt.isEventKey(e, \"Tab\")) && (this.buttonPressed_ && this.unpressButton(), Pt.isEventKey(e, \"Tab\") || (e.preventDefault(), this.menuButton_.focus()));\n }, t.pressButton = function () {\n if (this.enabled_) {\n if (this.buttonPressed_ = !0, this.menu.show(), this.menu.lockShowing(), this.menuButton_.el_.setAttribute(\"aria-expanded\", \"true\"), qe && m()) return;\n this.menu.focus();\n }\n }, t.unpressButton = function () {\n this.enabled_ && (this.buttonPressed_ = !1, this.menu.unlockShowing(), this.menu.hide(), this.menuButton_.el_.setAttribute(\"aria-expanded\", \"false\"));\n }, t.disable = function () {\n this.unpressButton(), this.enabled_ = !1, this.addClass(\"vjs-disabled\"), this.menuButton_.disable();\n }, t.enable = function () {\n this.enabled_ = !0, this.removeClass(\"vjs-disabled\"), this.menuButton_.enable();\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"MenuButton\", Pi);\n\n var xi = function (o) {\n function e(e, t) {\n var n,\n r = t.tracks;\n if ((n = o.call(this, e, t) || this).items.length <= 1 && n.hide(), !r) return Le(n);\n var i = pe(Le(n), n.update);\n return r.addEventListener(\"removetrack\", i), r.addEventListener(\"addtrack\", i), n.player_.on(\"ready\", i), n.player_.on(\"dispose\", function () {\n r.removeEventListener(\"removetrack\", i), r.removeEventListener(\"addtrack\", i);\n }), n;\n }\n\n return De(e, o), e;\n }(Pi);\n\n Oe.registerComponent(\"TrackButton\", xi);\n\n var ji = [\"Tab\", \"Esc\", \"Up\", \"Down\", \"Right\", \"Left\"],\n Ai = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).selectable = t.selectable, n.isSelected_ = t.selected || !1, n.multiSelectable = t.multiSelectable, n.selected(n.isSelected_), n.selectable ? n.multiSelectable ? n.el_.setAttribute(\"role\", \"menuitemcheckbox\") : n.el_.setAttribute(\"role\", \"menuitemradio\") : n.el_.setAttribute(\"role\", \"menuitem\"), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function (e, t, n) {\n return this.nonIconControl = !0, r.prototype.createEl.call(this, \"li\", y({\n className: \"vjs-menu-item\",\n innerHTML: '<span class=\"vjs-menu-item-text\">' + this.localize(this.options_.label) + \"</span>\",\n tabIndex: -1\n }, t), n);\n }, t.handleKeyDown = function (t) {\n ji.some(function (e) {\n return Pt.isEventKey(t, e);\n }) || r.prototype.handleKeyDown.call(this, t);\n }, t.handleClick = function (e) {\n this.selected(!0);\n }, t.selected = function (e) {\n this.selectable && (e ? (this.addClass(\"vjs-selected\"), this.el_.setAttribute(\"aria-checked\", \"true\"), this.controlText(\", selected\"), this.isSelected_ = !0) : (this.removeClass(\"vjs-selected\"), this.el_.setAttribute(\"aria-checked\", \"false\"), this.controlText(\"\"), this.isSelected_ = !1));\n }, e;\n }(Wr);\n\n Oe.registerComponent(\"MenuItem\", Ai);\n\n var Ii = function (l) {\n function e(e, t) {\n var r,\n n = t.track,\n i = e.textTracks();\n t.label = n.label || n.language || \"Unknown\", t.selected = \"showing\" === n.mode, (r = l.call(this, e, t) || this).track = n, r.kinds = (t.kinds || [t.kind || r.track.kind]).filter(Boolean);\n\n function o() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n r.handleTracksChange.apply(Le(r), t);\n }\n\n function s() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n r.handleSelectedLanguageChange.apply(Le(r), t);\n }\n\n var a;\n e.on([\"loadstart\", \"texttrackchange\"], o), i.addEventListener(\"change\", o), i.addEventListener(\"selectedlanguagechange\", s), r.on(\"dispose\", function () {\n e.off([\"loadstart\", \"texttrackchange\"], o), i.removeEventListener(\"change\", o), i.removeEventListener(\"selectedlanguagechange\", s);\n }), void 0 === i.onchange && r.on([\"tap\", \"click\"], function () {\n if (\"object\" != _typeof(h.Event)) try {\n a = new h.Event(\"change\");\n } catch (e) {}\n a || (a = d.createEvent(\"Event\")).initEvent(\"change\", !0, !0), i.dispatchEvent(a);\n });\n return r.handleTracksChange(), r;\n }\n\n De(e, l);\n var t = e.prototype;\n return t.handleClick = function (e) {\n var t = this.track,\n n = this.player_.textTracks();\n if (l.prototype.handleClick.call(this, e), n) for (var r = 0; r < n.length; r++) {\n var i = n[r];\n -1 !== this.kinds.indexOf(i.kind) && (i === t ? \"showing\" !== i.mode && (i.mode = \"showing\") : \"disabled\" !== i.mode && (i.mode = \"disabled\"));\n }\n }, t.handleTracksChange = function (e) {\n var t = \"showing\" === this.track.mode;\n t !== this.isSelected_ && this.selected(t);\n }, t.handleSelectedLanguageChange = function (e) {\n if (\"showing\" === this.track.mode) {\n var t = this.player_.cache_.selectedLanguage;\n if (t && t.enabled && t.language === this.track.language && t.kind !== this.track.kind) return;\n this.player_.cache_.selectedLanguage = {\n enabled: !0,\n language: this.track.language,\n kind: this.track.kind\n };\n }\n }, t.dispose = function () {\n this.track = null, l.prototype.dispose.call(this);\n }, e;\n }(Ai);\n\n Oe.registerComponent(\"TextTrackMenuItem\", Ii);\n\n var Oi = function (n) {\n function e(e, t) {\n return t.track = {\n player: e,\n kind: t.kind,\n kinds: t.kinds,\n \"default\": !1,\n mode: \"disabled\"\n }, t.kinds || (t.kinds = [t.kind]), t.label ? t.track.label = t.label : t.track.label = t.kinds.join(\" and \") + \" off\", t.selectable = !0, t.multiSelectable = !1, n.call(this, e, t) || this;\n }\n\n De(e, n);\n var t = e.prototype;\n return t.handleTracksChange = function (e) {\n for (var t = this.player().textTracks(), n = !0, r = 0, i = t.length; r < i; r++) {\n var o = t[r];\n\n if (-1 < this.options_.kinds.indexOf(o.kind) && \"showing\" === o.mode) {\n n = !1;\n break;\n }\n }\n\n n !== this.isSelected_ && this.selected(n);\n }, t.handleSelectedLanguageChange = function (e) {\n for (var t = this.player().textTracks(), n = !0, r = 0, i = t.length; r < i; r++) {\n var o = t[r];\n\n if (-1 < [\"captions\", \"descriptions\", \"subtitles\"].indexOf(o.kind) && \"showing\" === o.mode) {\n n = !1;\n break;\n }\n }\n\n n && (this.player_.cache_.selectedLanguage = {\n enabled: !1\n });\n }, e;\n }(Ii);\n\n Oe.registerComponent(\"OffTextTrackMenuItem\", Oi);\n\n var Di = function (n) {\n function e(e, t) {\n return void 0 === t && (t = {}), t.tracks = e.textTracks(), n.call(this, e, t) || this;\n }\n\n return De(e, n), e.prototype.createItems = function (e, t) {\n var n;\n void 0 === e && (e = []), void 0 === t && (t = Ii), this.label_ && (n = this.label_ + \" off\"), e.push(new Oi(this.player_, {\n kinds: this.kinds_,\n kind: this.kind_,\n label: n\n })), this.hideThreshold_ += 1;\n var r = this.player_.textTracks();\n Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_]);\n\n for (var i = 0; i < r.length; i++) {\n var o = r[i];\n\n if (-1 < this.kinds_.indexOf(o.kind)) {\n var s = new t(this.player_, {\n track: o,\n kinds: this.kinds_,\n kind: this.kind_,\n selectable: !0,\n multiSelectable: !1\n });\n s.addClass(\"vjs-\" + o.kind + \"-menu-item\"), e.push(s);\n }\n }\n\n return e;\n }, e;\n }(xi);\n\n Oe.registerComponent(\"TextTrackButton\", Di);\n\n var Mi = function (s) {\n function e(e, t) {\n var n,\n r = t.track,\n i = t.cue,\n o = e.currentTime();\n return t.selectable = !0, t.multiSelectable = !1, t.label = i.text, t.selected = i.startTime <= o && o < i.endTime, (n = s.call(this, e, t) || this).track = r, n.cue = i, r.addEventListener(\"cuechange\", pe(Le(n), n.update)), n;\n }\n\n De(e, s);\n var t = e.prototype;\n return t.handleClick = function (e) {\n s.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime), this.update(this.cue.startTime);\n }, t.update = function (e) {\n var t = this.cue,\n n = this.player_.currentTime();\n this.selected(t.startTime <= n && n < t.endTime);\n }, e;\n }(Ai);\n\n Oe.registerComponent(\"ChaptersTrackMenuItem\", Mi);\n\n var Ni = function (r) {\n function e(e, t, n) {\n return r.call(this, e, t, n) || this;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-chapters-button \" + r.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-chapters-button \" + r.prototype.buildWrapperCSSClass.call(this);\n }, t.update = function (e) {\n this.track_ && (!e || \"addtrack\" !== e.type && \"removetrack\" !== e.type) || this.setTrack(this.findChaptersTrack()), r.prototype.update.call(this);\n }, t.setTrack = function (e) {\n if (this.track_ !== e) {\n if (this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)), this.track_) {\n var t = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);\n t && t.removeEventListener(\"load\", this.updateHandler_), this.track_ = null;\n }\n\n if (this.track_ = e, this.track_) {\n this.track_.mode = \"hidden\";\n var n = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);\n n && n.addEventListener(\"load\", this.updateHandler_);\n }\n }\n }, t.findChaptersTrack = function () {\n for (var e = this.player_.textTracks() || [], t = e.length - 1; 0 <= t; t--) {\n var n = e[t];\n if (n.kind === this.kind_) return n;\n }\n }, t.getMenuCaption = function () {\n return this.track_ && this.track_.label ? this.track_.label : this.localize(Ae(this.kind_));\n }, t.createMenu = function () {\n return this.options_.title = this.getMenuCaption(), r.prototype.createMenu.call(this);\n }, t.createItems = function () {\n var e = [];\n if (!this.track_) return e;\n var t = this.track_.cues;\n if (!t) return e;\n\n for (var n = 0, r = t.length; n < r; n++) {\n var i = t[n],\n o = new Mi(this.player_, {\n track: this.track_,\n cue: i\n });\n e.push(o);\n }\n\n return e;\n }, e;\n }(Di);\n\n Ni.prototype.kind_ = \"chapters\", Ni.prototype.controlText_ = \"Chapters\", Oe.registerComponent(\"ChaptersButton\", Ni);\n\n var Li = function (s) {\n function e(e, t, n) {\n var r;\n r = s.call(this, e, t, n) || this;\n var i = e.textTracks(),\n o = pe(Le(r), r.handleTracksChange);\n return i.addEventListener(\"change\", o), r.on(\"dispose\", function () {\n i.removeEventListener(\"change\", o);\n }), r;\n }\n\n De(e, s);\n var t = e.prototype;\n return t.handleTracksChange = function (e) {\n for (var t = this.player().textTracks(), n = !1, r = 0, i = t.length; r < i; r++) {\n var o = t[r];\n\n if (o.kind !== this.kind_ && \"showing\" === o.mode) {\n n = !0;\n break;\n }\n }\n\n n ? this.disable() : this.enable();\n }, t.buildCSSClass = function () {\n return \"vjs-descriptions-button \" + s.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-descriptions-button \" + s.prototype.buildWrapperCSSClass.call(this);\n }, e;\n }(Di);\n\n Li.prototype.kind_ = \"descriptions\", Li.prototype.controlText_ = \"Descriptions\", Oe.registerComponent(\"DescriptionsButton\", Li);\n\n var Fi = function (r) {\n function e(e, t, n) {\n return r.call(this, e, t, n) || this;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-subtitles-button \" + r.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-subtitles-button \" + r.prototype.buildWrapperCSSClass.call(this);\n }, e;\n }(Di);\n\n Fi.prototype.kind_ = \"subtitles\", Fi.prototype.controlText_ = \"Subtitles\", Oe.registerComponent(\"SubtitlesButton\", Fi);\n\n var Ri = function (r) {\n function e(e, t) {\n var n;\n return t.track = {\n player: e,\n kind: t.kind,\n label: t.kind + \" settings\",\n selectable: !1,\n \"default\": !1,\n mode: \"disabled\"\n }, t.selectable = !1, t.name = \"CaptionSettingsMenuItem\", (n = r.call(this, e, t) || this).addClass(\"vjs-texttrack-settings\"), n.controlText(\", opens \" + t.kind + \" settings dialog\"), n;\n }\n\n return De(e, r), e.prototype.handleClick = function (e) {\n this.player().getChild(\"textTrackSettings\").open();\n }, e;\n }(Ii);\n\n Oe.registerComponent(\"CaptionSettingsMenuItem\", Ri);\n\n var Bi = function (r) {\n function e(e, t, n) {\n return r.call(this, e, t, n) || this;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-captions-button \" + r.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-captions-button \" + r.prototype.buildWrapperCSSClass.call(this);\n }, t.createItems = function () {\n var e = [];\n return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player().getChild(\"textTrackSettings\") || (e.push(new Ri(this.player_, {\n kind: this.kind_\n })), this.hideThreshold_ += 1), r.prototype.createItems.call(this, e);\n }, e;\n }(Di);\n\n Bi.prototype.kind_ = \"captions\", Bi.prototype.controlText_ = \"Captions\", Oe.registerComponent(\"CaptionsButton\", Bi);\n\n var $i = function (i) {\n function e() {\n return i.apply(this, arguments) || this;\n }\n\n return De(e, i), e.prototype.createEl = function (e, t, n) {\n var r = '<span class=\"vjs-menu-item-text\">' + this.localize(this.options_.label);\n return \"captions\" === this.options_.track.kind && (r += '\\n <span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>\\n <span class=\"vjs-control-text\"> ' + this.localize(\"Captions\") + \"</span>\\n \"), r += \"</span>\", i.prototype.createEl.call(this, e, y({\n innerHTML: r\n }, t), n);\n }, e;\n }(Ii);\n\n Oe.registerComponent(\"SubsCapsMenuItem\", $i);\n\n var Hi = function (r) {\n function e(e, t) {\n var n;\n return void 0 === t && (t = {}), (n = r.call(this, e, t) || this).label_ = \"subtitles\", -1 < [\"en\", \"en-us\", \"en-ca\", \"fr-ca\"].indexOf(n.player_.language_) && (n.label_ = \"captions\"), n.menuButton_.controlText(Ae(n.label_)), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-subs-caps-button \" + r.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-subs-caps-button \" + r.prototype.buildWrapperCSSClass.call(this);\n }, t.createItems = function () {\n var e = [];\n return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player().getChild(\"textTrackSettings\") || (e.push(new Ri(this.player_, {\n kind: this.label_\n })), this.hideThreshold_ += 1), e = r.prototype.createItems.call(this, e, $i);\n }, e;\n }(Di);\n\n Hi.prototype.kinds_ = [\"captions\", \"subtitles\"], Hi.prototype.controlText_ = \"Subtitles\", Oe.registerComponent(\"SubsCapsButton\", Hi);\n\n var Vi = function (s) {\n function e(e, t) {\n var r,\n n = t.track,\n i = e.audioTracks();\n t.label = n.label || n.language || \"Unknown\", t.selected = n.enabled, (r = s.call(this, e, t) || this).track = n, r.addClass(\"vjs-\" + n.kind + \"-menu-item\");\n\n function o() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n r.handleTracksChange.apply(Le(r), t);\n }\n\n return i.addEventListener(\"change\", o), r.on(\"dispose\", function () {\n i.removeEventListener(\"change\", o);\n }), r;\n }\n\n De(e, s);\n var t = e.prototype;\n return t.createEl = function (e, t, n) {\n var r = '<span class=\"vjs-menu-item-text\">' + this.localize(this.options_.label);\n return \"main-desc\" === this.options_.track.kind && (r += '\\n <span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>\\n <span class=\"vjs-control-text\"> ' + this.localize(\"Descriptions\") + \"</span>\\n \"), r += \"</span>\", s.prototype.createEl.call(this, e, y({\n innerHTML: r\n }, t), n);\n }, t.handleClick = function (e) {\n var t = this.player_.audioTracks();\n s.prototype.handleClick.call(this, e);\n\n for (var n = 0; n < t.length; n++) {\n var r = t[n];\n r.enabled = r === this.track;\n }\n }, t.handleTracksChange = function (e) {\n this.selected(this.track.enabled);\n }, e;\n }(Ai);\n\n Oe.registerComponent(\"AudioTrackMenuItem\", Vi);\n\n var Ui = function (n) {\n function e(e, t) {\n return void 0 === t && (t = {}), t.tracks = e.audioTracks(), n.call(this, e, t) || this;\n }\n\n De(e, n);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-audio-button \" + n.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-audio-button \" + n.prototype.buildWrapperCSSClass.call(this);\n }, t.createItems = function (e) {\n void 0 === e && (e = []), this.hideThreshold_ = 1;\n\n for (var t = this.player_.audioTracks(), n = 0; n < t.length; n++) {\n var r = t[n];\n e.push(new Vi(this.player_, {\n track: r,\n selectable: !0,\n multiSelectable: !1\n }));\n }\n\n return e;\n }, e;\n }(xi);\n\n Ui.prototype.controlText_ = \"Audio Track\", Oe.registerComponent(\"AudioTrackButton\", Ui);\n\n var Wi = function (o) {\n function e(e, t) {\n var n,\n r = t.rate,\n i = parseFloat(r, 10);\n return t.label = r, t.selected = 1 === i, t.selectable = !0, t.multiSelectable = !1, (n = o.call(this, e, t) || this).label = r, n.rate = i, n.on(e, \"ratechange\", n.update), n;\n }\n\n De(e, o);\n var t = e.prototype;\n return t.handleClick = function (e) {\n o.prototype.handleClick.call(this), this.player().playbackRate(this.rate);\n }, t.update = function (e) {\n this.selected(this.player().playbackRate() === this.rate);\n }, e;\n }(Ai);\n\n Wi.prototype.contentElType = \"button\", Oe.registerComponent(\"PlaybackRateMenuItem\", Wi);\n\n var Ki = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).updateVisibility(), n.updateLabel(), n.on(e, \"loadstart\", n.updateVisibility), n.on(e, \"ratechange\", n.updateLabel), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.createEl = function () {\n var e = r.prototype.createEl.call(this);\n return this.labelEl_ = b(\"div\", {\n className: \"vjs-playback-rate-value\",\n innerHTML: \"1x\"\n }), e.appendChild(this.labelEl_), e;\n }, t.dispose = function () {\n this.labelEl_ = null, r.prototype.dispose.call(this);\n }, t.buildCSSClass = function () {\n return \"vjs-playback-rate \" + r.prototype.buildCSSClass.call(this);\n }, t.buildWrapperCSSClass = function () {\n return \"vjs-playback-rate \" + r.prototype.buildWrapperCSSClass.call(this);\n }, t.createMenu = function () {\n var e = new wi(this.player()),\n t = this.playbackRates();\n if (t) for (var n = t.length - 1; 0 <= n; n--) {\n e.addChild(new Wi(this.player(), {\n rate: t[n] + \"x\"\n }));\n }\n return e;\n }, t.updateARIAAttributes = function () {\n this.el().setAttribute(\"aria-valuenow\", this.player().playbackRate());\n }, t.handleClick = function (e) {\n for (var t = this.player().playbackRate(), n = this.playbackRates(), r = n[0], i = 0; i < n.length; i++) {\n if (n[i] > t) {\n r = n[i];\n break;\n }\n }\n\n this.player().playbackRate(r);\n }, t.playbackRates = function () {\n return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates;\n }, t.playbackRateSupported = function () {\n return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && 0 < this.playbackRates().length;\n }, t.updateVisibility = function (e) {\n this.playbackRateSupported() ? this.removeClass(\"vjs-hidden\") : this.addClass(\"vjs-hidden\");\n }, t.updateLabel = function (e) {\n this.playbackRateSupported() && (this.labelEl_.innerHTML = this.player().playbackRate() + \"x\");\n }, e;\n }(Pi);\n\n Ki.prototype.controlText_ = \"Playback Rate\", Oe.registerComponent(\"PlaybackRateMenuButton\", Ki);\n\n var zi = function (e) {\n function t() {\n return e.apply(this, arguments) || this;\n }\n\n De(t, e);\n var n = t.prototype;\n return n.buildCSSClass = function () {\n return \"vjs-spacer \" + e.prototype.buildCSSClass.call(this);\n }, n.createEl = function () {\n return e.prototype.createEl.call(this, \"div\", {\n className: this.buildCSSClass()\n });\n }, t;\n }(Oe);\n\n Oe.registerComponent(\"Spacer\", zi);\n\n var qi = function (t) {\n function e() {\n return t.apply(this, arguments) || this;\n }\n\n De(e, t);\n var n = e.prototype;\n return n.buildCSSClass = function () {\n return \"vjs-custom-control-spacer \" + t.prototype.buildCSSClass.call(this);\n }, n.createEl = function () {\n var e = t.prototype.createEl.call(this, {\n className: this.buildCSSClass()\n });\n return e.innerHTML = \" \", e;\n }, e;\n }(zi);\n\n Oe.registerComponent(\"CustomControlSpacer\", qi);\n\n var Gi = function (e) {\n function t() {\n return e.apply(this, arguments) || this;\n }\n\n return De(t, e), t.prototype.createEl = function () {\n return e.prototype.createEl.call(this, \"div\", {\n className: \"vjs-control-bar\",\n dir: \"ltr\"\n });\n }, t;\n }(Oe);\n\n Gi.prototype.options_ = {\n children: [\"playToggle\", \"volumePanel\", \"currentTimeDisplay\", \"timeDivider\", \"durationDisplay\", \"progressControl\", \"liveDisplay\", \"seekToLive\", \"remainingTimeDisplay\", \"customControlSpacer\", \"playbackRateMenuButton\", \"chaptersButton\", \"descriptionsButton\", \"subsCapsButton\", \"audioTrackButton\", \"fullscreenToggle\"]\n }, \"exitPictureInPicture\" in d && Gi.prototype.options_.children.splice(Gi.prototype.options_.children.length - 1, 0, \"pictureInPictureToggle\"), Oe.registerComponent(\"ControlBar\", Gi);\n\n var Xi = function (r) {\n function e(e, t) {\n var n;\n return (n = r.call(this, e, t) || this).on(e, \"error\", n.open), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.buildCSSClass = function () {\n return \"vjs-error-display \" + r.prototype.buildCSSClass.call(this);\n }, t.content = function () {\n var e = this.player().error();\n return e ? this.localize(e.message) : \"\";\n }, e;\n }(jt);\n\n Xi.prototype.options_ = Ie(jt.prototype.options_, {\n pauseOnOpen: !1,\n fillAlways: !0,\n temporary: !1,\n uncloseable: !0\n }), Oe.registerComponent(\"ErrorDisplay\", Xi);\n var Yi = \"vjs-text-track-settings\",\n Qi = [\"#000\", \"Black\"],\n Ji = [\"#00F\", \"Blue\"],\n Zi = [\"#0FF\", \"Cyan\"],\n eo = [\"#0F0\", \"Green\"],\n to = [\"#F0F\", \"Magenta\"],\n no = [\"#F00\", \"Red\"],\n ro = [\"#FFF\", \"White\"],\n io = [\"#FF0\", \"Yellow\"],\n oo = [\"1\", \"Opaque\"],\n so = [\"0.5\", \"Semi-Transparent\"],\n ao = [\"0\", \"Transparent\"],\n lo = {\n backgroundColor: {\n selector: \".vjs-bg-color > select\",\n id: \"captions-background-color-%s\",\n label: \"Color\",\n options: [Qi, ro, no, eo, Ji, io, to, Zi]\n },\n backgroundOpacity: {\n selector: \".vjs-bg-opacity > select\",\n id: \"captions-background-opacity-%s\",\n label: \"Transparency\",\n options: [oo, so, ao]\n },\n color: {\n selector: \".vjs-fg-color > select\",\n id: \"captions-foreground-color-%s\",\n label: \"Color\",\n options: [ro, Qi, no, eo, Ji, io, to, Zi]\n },\n edgeStyle: {\n selector: \".vjs-edge-style > select\",\n id: \"%s\",\n label: \"Text Edge Style\",\n options: [[\"none\", \"None\"], [\"raised\", \"Raised\"], [\"depressed\", \"Depressed\"], [\"uniform\", \"Uniform\"], [\"dropshadow\", \"Dropshadow\"]]\n },\n fontFamily: {\n selector: \".vjs-font-family > select\",\n id: \"captions-font-family-%s\",\n label: \"Font Family\",\n options: [[\"proportionalSansSerif\", \"Proportional Sans-Serif\"], [\"monospaceSansSerif\", \"Monospace Sans-Serif\"], [\"proportionalSerif\", \"Proportional Serif\"], [\"monospaceSerif\", \"Monospace Serif\"], [\"casual\", \"Casual\"], [\"script\", \"Script\"], [\"small-caps\", \"Small Caps\"]]\n },\n fontPercent: {\n selector: \".vjs-font-percent > select\",\n id: \"captions-font-size-%s\",\n label: \"Font Size\",\n options: [[\"0.50\", \"50%\"], [\"0.75\", \"75%\"], [\"1.00\", \"100%\"], [\"1.25\", \"125%\"], [\"1.50\", \"150%\"], [\"1.75\", \"175%\"], [\"2.00\", \"200%\"], [\"3.00\", \"300%\"], [\"4.00\", \"400%\"]],\n \"default\": 2,\n parser: function parser(e) {\n return \"1.00\" === e ? null : Number(e);\n }\n },\n textOpacity: {\n selector: \".vjs-text-opacity > select\",\n id: \"captions-foreground-opacity-%s\",\n label: \"Transparency\",\n options: [oo, so]\n },\n windowColor: {\n selector: \".vjs-window-color > select\",\n id: \"captions-window-color-%s\",\n label: \"Color\"\n },\n windowOpacity: {\n selector: \".vjs-window-opacity > select\",\n id: \"captions-window-opacity-%s\",\n label: \"Transparency\",\n options: [ao, so, oo]\n }\n };\n\n function co(e, t) {\n if (t && (e = t(e)), e && \"none\" !== e) return e;\n }\n\n lo.windowColor.options = lo.backgroundColor.options;\n\n var uo = function (r) {\n function e(e, t) {\n var n;\n return t.temporary = !1, (n = r.call(this, e, t) || this).updateDisplay = pe(Le(n), n.updateDisplay), n.fill(), n.hasBeenOpened_ = n.hasBeenFilled_ = !0, n.endDialog = b(\"p\", {\n className: \"vjs-control-text\",\n textContent: n.localize(\"End of dialog window.\")\n }), n.el().appendChild(n.endDialog), n.setDefaults(), void 0 === t.persistTextTrackSettings && (n.options_.persistTextTrackSettings = n.options_.playerOptions.persistTextTrackSettings), n.on(n.$(\".vjs-done-button\"), \"click\", function () {\n n.saveSettings(), n.close();\n }), n.on(n.$(\".vjs-default-button\"), \"click\", function () {\n n.setDefaults(), n.updateDisplay();\n }), i(lo, function (e) {\n n.on(n.$(e.selector), \"change\", n.updateDisplay);\n }), n.options_.persistTextTrackSettings && n.restoreSettings(), n;\n }\n\n De(e, r);\n var t = e.prototype;\n return t.dispose = function () {\n this.endDialog = null, r.prototype.dispose.call(this);\n }, t.createElSelect_ = function (e, t, n) {\n var r = this;\n void 0 === t && (t = \"\"), void 0 === n && (n = \"label\");\n var i = lo[e],\n o = i.id.replace(\"%s\", this.id_),\n s = [t, o].join(\" \").trim();\n return [\"<\" + n + ' id=\"' + o + '\" class=\"' + (\"label\" === n ? \"vjs-label\" : \"\") + '\">', this.localize(i.label), \"</\" + n + \">\", '<select aria-labelledby=\"' + s + '\">'].concat(i.options.map(function (e) {\n var t = o + \"-\" + e[1].replace(/\\W+/g, \"\");\n return ['<option id=\"' + t + '\" value=\"' + e[0] + '\" ', 'aria-labelledby=\"' + s + \" \" + t + '\">', r.localize(e[1]), \"</option>\"].join(\"\");\n })).concat(\"</select>\").join(\"\");\n }, t.createElFgColor_ = function () {\n var e = \"captions-text-legend-\" + this.id_;\n return ['<fieldset class=\"vjs-fg-color vjs-track-setting\">', '<legend id=\"' + e + '\">', this.localize(\"Text\"), \"</legend>\", this.createElSelect_(\"color\", e), '<span class=\"vjs-text-opacity vjs-opacity\">', this.createElSelect_(\"textOpacity\", e), \"</span>\", \"</fieldset>\"].join(\"\");\n }, t.createElBgColor_ = function () {\n var e = \"captions-background-\" + this.id_;\n return ['<fieldset class=\"vjs-bg-color vjs-track-setting\">', '<legend id=\"' + e + '\">', this.localize(\"Background\"), \"</legend>\", this.createElSelect_(\"backgroundColor\", e), '<span class=\"vjs-bg-opacity vjs-opacity\">', this.createElSelect_(\"backgroundOpacity\", e), \"</span>\", \"</fieldset>\"].join(\"\");\n }, t.createElWinColor_ = function () {\n var e = \"captions-window-\" + this.id_;\n return ['<fieldset class=\"vjs-window-color vjs-track-setting\">', '<legend id=\"' + e + '\">', this.localize(\"Window\"), \"</legend>\", this.createElSelect_(\"windowColor\", e), '<span class=\"vjs-window-opacity vjs-opacity\">', this.createElSelect_(\"windowOpacity\", e), \"</span>\", \"</fieldset>\"].join(\"\");\n }, t.createElColors_ = function () {\n return b(\"div\", {\n className: \"vjs-track-settings-colors\",\n innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join(\"\")\n });\n }, t.createElFont_ = function () {\n return b(\"div\", {\n className: \"vjs-track-settings-font\",\n innerHTML: ['<fieldset class=\"vjs-font-percent vjs-track-setting\">', this.createElSelect_(\"fontPercent\", \"\", \"legend\"), \"</fieldset>\", '<fieldset class=\"vjs-edge-style vjs-track-setting\">', this.createElSelect_(\"edgeStyle\", \"\", \"legend\"), \"</fieldset>\", '<fieldset class=\"vjs-font-family vjs-track-setting\">', this.createElSelect_(\"fontFamily\", \"\", \"legend\"), \"</fieldset>\"].join(\"\")\n });\n }, t.createElControls_ = function () {\n var e = this.localize(\"restore all settings to the default values\");\n return b(\"div\", {\n className: \"vjs-track-settings-controls\",\n innerHTML: ['<button type=\"button\" class=\"vjs-default-button\" title=\"' + e + '\">', this.localize(\"Reset\"), '<span class=\"vjs-control-text\"> ' + e + \"</span>\", \"</button>\", '<button type=\"button\" class=\"vjs-done-button\">' + this.localize(\"Done\") + \"</button>\"].join(\"\")\n });\n }, t.content = function () {\n return [this.createElColors_(), this.createElFont_(), this.createElControls_()];\n }, t.label = function () {\n return this.localize(\"Caption Settings Dialog\");\n }, t.description = function () {\n return this.localize(\"Beginning of dialog window. Escape will cancel and close the window.\");\n }, t.buildCSSClass = function () {\n return r.prototype.buildCSSClass.call(this) + \" vjs-text-track-settings\";\n }, t.getValues = function () {\n var i = this;\n return function (n, r, e) {\n return void 0 === e && (e = 0), o(n).reduce(function (e, t) {\n return r(e, n[t], t);\n }, e);\n }(lo, function (e, t, n) {\n var r = function (e, t) {\n return co(e.options[e.options.selectedIndex].value, t);\n }(i.$(t.selector), t.parser);\n\n return void 0 !== r && (e[n] = r), e;\n }, {});\n }, t.setValues = function (n) {\n var r = this;\n i(lo, function (e, t) {\n !function (e, t, n) {\n if (t) for (var r = 0; r < e.options.length; r++) {\n if (co(e.options[r].value, n) === t) {\n e.selectedIndex = r;\n break;\n }\n }\n }(r.$(e.selector), n[t], e.parser);\n });\n }, t.setDefaults = function () {\n var n = this;\n i(lo, function (e) {\n var t = e.hasOwnProperty(\"default\") ? e[\"default\"] : 0;\n n.$(e.selector).selectedIndex = t;\n });\n }, t.restoreSettings = function () {\n var e;\n\n try {\n e = JSON.parse(h.localStorage.getItem(Yi));\n } catch (e) {\n f.warn(e);\n }\n\n e && this.setValues(e);\n }, t.saveSettings = function () {\n if (this.options_.persistTextTrackSettings) {\n var e = this.getValues();\n\n try {\n Object.keys(e).length ? h.localStorage.setItem(Yi, JSON.stringify(e)) : h.localStorage.removeItem(Yi);\n } catch (e) {\n f.warn(e);\n }\n }\n }, t.updateDisplay = function () {\n var e = this.player_.getChild(\"textTrackDisplay\");\n e && e.updateDisplay();\n }, t.conditionalBlur_ = function () {\n this.previouslyActiveEl_ = null;\n var e = this.player_.controlBar,\n t = e && e.subsCapsButton,\n n = e && e.captionsButton;\n t ? t.focus() : n && n.focus();\n }, e;\n }(jt);\n\n Oe.registerComponent(\"TextTrackSettings\", uo);\n\n var ho = function (o) {\n function e(e, t) {\n var n,\n r = t.ResizeObserver || h.ResizeObserver;\n null === t.ResizeObserver && (r = !1);\n var i = Ie({\n createEl: !r,\n reportTouchActivity: !1\n }, t);\n return (n = o.call(this, e, i) || this).ResizeObserver = t.ResizeObserver || h.ResizeObserver, n.loadListener_ = null, n.resizeObserver_ = null, n.debouncedHandler_ = function (r, i, o, s) {\n var a;\n void 0 === s && (s = h);\n\n function e() {\n var e = this,\n t = arguments,\n _n2 = function n() {\n _n2 = a = null, o || r.apply(e, t);\n };\n\n !a && o && r.apply(e, t), s.clearTimeout(a), a = s.setTimeout(_n2, i);\n }\n\n return e.cancel = function () {\n s.clearTimeout(a), a = null;\n }, e;\n }(function () {\n n.resizeHandler();\n }, 100, !1, Le(n)), r ? (n.resizeObserver_ = new n.ResizeObserver(n.debouncedHandler_), n.resizeObserver_.observe(e.el())) : (n.loadListener_ = function () {\n if (n.el_ && n.el_.contentWindow) {\n var e = n.debouncedHandler_,\n t = n.unloadListener_ = function () {\n ce(this, \"resize\", e), ce(this, \"unload\", t), t = null;\n };\n\n le(n.el_.contentWindow, \"unload\", t), le(n.el_.contentWindow, \"resize\", e);\n }\n }, n.one(\"load\", n.loadListener_)), n;\n }\n\n De(e, o);\n var t = e.prototype;\n return t.createEl = function () {\n return o.prototype.createEl.call(this, \"iframe\", {\n className: \"vjs-resize-manager\",\n tabIndex: -1\n }, {\n \"aria-hidden\": \"true\"\n });\n }, t.resizeHandler = function () {\n this.player_ && this.player_.trigger && this.player_.trigger(\"playerresize\");\n }, t.dispose = function () {\n this.debouncedHandler_ && this.debouncedHandler_.cancel(), this.resizeObserver_ && (this.player_.el() && this.resizeObserver_.unobserve(this.player_.el()), this.resizeObserver_.disconnect()), this.loadListener_ && this.off(\"load\", this.loadListener_), this.el_ && this.el_.contentWindow && this.unloadListener_ && this.unloadListener_.call(this.el_.contentWindow), this.ResizeObserver = null, this.resizeObserver = null, this.debouncedHandler_ = null, this.loadListener_ = null, o.prototype.dispose.call(this);\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"ResizeManager\", ho);\n\n var po = function (i) {\n function e(e, t) {\n var n,\n r = Ie({\n createEl: !1\n }, t);\n return (n = i.call(this, e, r) || this).reset_(), n.on(n.player_, \"durationchange\", n.handleDurationchange), nt && \"hidden\" in d && \"visibilityState\" in d && n.on(d, \"visibilitychange\", n.handleVisibilityChange), n;\n }\n\n De(e, i);\n var t = e.prototype;\n return t.handleVisibilityChange = function () {\n this.player_.duration() === 1 / 0 && (d.hidden ? this.stopTracking() : this.startTracking());\n }, t.isBehind_ = function () {\n if (!this.timeupdateSeen_) return !1;\n var e = this.liveCurrentTime(),\n t = this.player_.currentTime(),\n n = 2 * this.seekableIncrement_ + .07;\n return e !== 1 / 0 && t <= e - n;\n }, t.trackLive_ = function () {\n this.pastSeekEnd_ = this.pastSeekEnd_;\n var e = this.player_.seekable();\n\n if (e && e.length) {\n var t = this.seekableEnd();\n t !== this.lastSeekEnd_ && (this.lastSeekEnd_ && (this.seekableIncrementList_ = this.seekableIncrementList_.slice(-11), this.seekableIncrementList_.push(Math.abs(t - this.lastSeekEnd_)), 3 < this.seekableIncrementList_.length && (this.seekableIncrement_ = function (e) {\n var t = Math.floor(e.length / 2),\n n = [].concat(e).sort(function (e, t) {\n return e - t;\n });\n return e.length % 2 != 0 ? n[t] : (n[t - 1] + n[t]) / 2;\n }(this.seekableIncrementList_))), this.pastSeekEnd_ = 0, this.lastSeekEnd_ = t, this.trigger(\"seekableendchange\")), this.pastSeekEnd_ = this.pastSeekEnd() + .03, this.isBehind_() !== this.behindLiveEdge() && (this.behindLiveEdge_ = this.isBehind_(), this.trigger(\"liveedgechange\"));\n }\n }, t.handleDurationchange = function () {\n this.player_.duration() === 1 / 0 ? this.startTracking() : this.stopTracking();\n }, t.startTracking = function () {\n var e = this;\n this.isTracking() || (this.timeupdateSeen_ || (this.timeupdateSeen_ = this.player_.hasStarted()), this.trackingInterval_ = this.setInterval(this.trackLive_, 30), this.trackLive_(), this.on(this.player_, \"play\", this.trackLive_), this.on(this.player_, \"pause\", this.trackLive_), this.timeupdateSeen_ || (this.one(this.player_, \"play\", this.handlePlay), this.handleTimeupdate = function () {\n e.timeupdateSeen_ = !0, e.handleTimeupdate = null;\n }, this.one(this.player_, \"timeupdate\", this.handleTimeupdate)));\n }, t.handlePlay = function () {\n this.one(this.player_, \"timeupdate\", this.seekToLiveEdge);\n }, t.reset_ = function () {\n this.pastSeekEnd_ = 0, this.lastSeekEnd_ = null, this.behindLiveEdge_ = null, this.timeupdateSeen_ = !1, this.clearInterval(this.trackingInterval_), this.trackingInterval_ = null, this.seekableIncrement_ = 12, this.seekableIncrementList_ = [], this.off(this.player_, \"play\", this.trackLive_), this.off(this.player_, \"pause\", this.trackLive_), this.off(this.player_, \"play\", this.handlePlay), this.off(this.player_, \"timeupdate\", this.seekToLiveEdge), this.handleTimeupdate && (this.off(this.player_, \"timeupdate\", this.handleTimeupdate), this.handleTimeupdate = null);\n }, t.stopTracking = function () {\n this.isTracking() && this.reset_();\n }, t.seekableEnd = function () {\n for (var e = this.player_.seekable(), t = [], n = e ? e.length : 0; n--;) {\n t.push(e.end(n));\n }\n\n return t.length ? t.sort()[t.length - 1] : 1 / 0;\n }, t.seekableStart = function () {\n for (var e = this.player_.seekable(), t = [], n = e ? e.length : 0; n--;) {\n t.push(e.start(n));\n }\n\n return t.length ? t.sort()[0] : 0;\n }, t.liveWindow = function () {\n var e = this.liveCurrentTime();\n return e === 1 / 0 ? 1 / 0 : e - this.seekableStart();\n }, t.isLive = function () {\n return this.isTracking();\n }, t.atLiveEdge = function () {\n return !this.behindLiveEdge();\n }, t.liveCurrentTime = function () {\n return this.pastSeekEnd() + this.seekableEnd();\n }, t.pastSeekEnd = function () {\n return this.pastSeekEnd_;\n }, t.behindLiveEdge = function () {\n return this.behindLiveEdge_;\n }, t.isTracking = function () {\n return \"number\" == typeof this.trackingInterval_;\n }, t.seekToLiveEdge = function () {\n this.atLiveEdge() || (this.player_.currentTime(this.liveCurrentTime()), this.player_.paused() && this.player_.play());\n }, t.dispose = function () {\n this.stopTracking(), i.prototype.dispose.call(this);\n }, e;\n }(Oe);\n\n Oe.registerComponent(\"LiveTracker\", po);\n\n function fo(e) {\n var t = e.el();\n if (t.hasAttribute(\"src\")) return e.triggerSourceset(t.src), !0;\n var n = e.$$(\"source\"),\n r = [],\n i = \"\";\n if (!n.length) return !1;\n\n for (var o = 0; o < n.length; o++) {\n var s = n[o].src;\n s && -1 === r.indexOf(s) && r.push(s);\n }\n\n return !!r.length && (1 === r.length && (i = r[0]), e.triggerSourceset(i), !0);\n }\n\n function vo(e, t) {\n for (var n = {}, r = 0; r < e.length && !((n = Object.getOwnPropertyDescriptor(e[r], t)) && n.set && n.get); r++) {\n ;\n }\n\n return n.enumerable = !0, n.configurable = !0, n;\n }\n\n function yo(o) {\n var s = o.el();\n\n if (!s.resetSourceWatch_) {\n var _t2 = function _t2(i) {\n return function () {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n var r = i.apply(s, t);\n return fo(o), r;\n };\n };\n\n var n = {},\n e = function (e) {\n return vo([e.el(), h.HTMLMediaElement.prototype, h.Element.prototype, mo], \"innerHTML\");\n }(o);\n\n [\"append\", \"appendChild\", \"insertAdjacentHTML\"].forEach(function (e) {\n s[e] && (n[e] = s[e], s[e] = _t2(n[e]));\n }), Object.defineProperty(s, \"innerHTML\", Ie(e, {\n set: _t2(e.set)\n })), s.resetSourceWatch_ = function () {\n s.resetSourceWatch_ = null, Object.keys(n).forEach(function (e) {\n s[e] = n[e];\n }), Object.defineProperty(s, \"innerHTML\", e);\n }, o.one(\"sourceset\", s.resetSourceWatch_);\n }\n }\n\n function go(r) {\n if (r.featuresSourceset) {\n var i = r.el();\n\n if (!i.resetSourceset_) {\n var n = function (e) {\n return vo([e.el(), h.HTMLMediaElement.prototype, _o], \"src\");\n }(r),\n o = i.setAttribute,\n t = i.load;\n\n Object.defineProperty(i, \"src\", Ie(n, {\n set: function set(e) {\n var t = n.set.call(i, e);\n return r.triggerSourceset(i.src), t;\n }\n })), i.setAttribute = function (e, t) {\n var n = o.call(i, e, t);\n return /src/i.test(e) && r.triggerSourceset(i.src), n;\n }, i.load = function () {\n var e = t.call(i);\n return fo(r) || (r.triggerSourceset(\"\"), yo(r)), e;\n }, i.currentSrc ? r.triggerSourceset(i.currentSrc) : fo(r) || yo(r), i.resetSourceset_ = function () {\n i.resetSourceset_ = null, i.load = t, i.setAttribute = o, Object.defineProperty(i, \"src\", n), i.resetSourceWatch_ && i.resetSourceWatch_();\n };\n }\n }\n }\n\n var mo = Object.defineProperty({}, \"innerHTML\", {\n get: function get() {\n return this.cloneNode(!0).innerHTML;\n },\n set: function set(e) {\n var t = d.createElement(this.nodeName.toLowerCase());\n t.innerHTML = e;\n\n for (var n = d.createDocumentFragment(); t.childNodes.length;) {\n n.appendChild(t.childNodes[0]);\n }\n\n return this.innerText = \"\", h.Element.prototype.appendChild.call(this, n), this.innerHTML;\n }\n }),\n _o = Object.defineProperty({}, \"src\", {\n get: function get() {\n return this.hasAttribute(\"src\") ? Nt(h.Element.prototype.getAttribute.call(this, \"src\")) : \"\";\n },\n set: function set(e) {\n return h.Element.prototype.setAttribute.call(this, \"src\", e), e;\n }\n }),\n bo = function (u) {\n function a(e, t) {\n var n;\n n = u.call(this, e, t) || this;\n var r = e.source,\n i = !1;\n\n if (r && (n.el_.currentSrc !== r.src || e.tag && 3 === e.tag.initNetworkState_) ? n.setSource(r) : n.handleLateInit_(n.el_), e.enableSourceset && n.setupSourcesetHandling_(), n.el_.hasChildNodes()) {\n for (var o = n.el_.childNodes, s = o.length, a = []; s--;) {\n var l = o[s];\n \"track\" === l.nodeName.toLowerCase() && (n.featuresNativeTextTracks ? (n.remoteTextTrackEls().addTrackElement_(l), n.remoteTextTracks().addTrack(l.track), n.textTracks().addTrack(l.track), i || n.el_.hasAttribute(\"crossorigin\") || !Ft(l.src) || (i = !0)) : a.push(l));\n }\n\n for (var c = 0; c < a.length; c++) {\n n.el_.removeChild(a[c]);\n }\n }\n\n return n.proxyNativeTracks_(), n.featuresNativeTextTracks && i && f.warn(\"Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\\nThis may prevent text tracks from loading.\"), n.restoreMetadataTracksInIOSNativePlayer_(), (st || Ke || Qe) && !0 === e.nativeControlsForTouch && n.setControls(!0), n.proxyWebkitFullscreen_(), n.triggerReady(), n;\n }\n\n De(a, u);\n var e = a.prototype;\n return e.dispose = function () {\n this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), a.disposeMediaElement(this.el_), this.options_ = null, u.prototype.dispose.call(this);\n }, e.setupSourcesetHandling_ = function () {\n go(this);\n }, e.restoreMetadataTracksInIOSNativePlayer_ = function () {\n function e() {\n n = [];\n\n for (var e = 0; e < r.length; e++) {\n var t = r[e];\n \"metadata\" === t.kind && n.push({\n track: t,\n storedMode: t.mode\n });\n }\n }\n\n var n,\n r = this.textTracks();\n e(), r.addEventListener(\"change\", e), this.on(\"dispose\", function () {\n return r.removeEventListener(\"change\", e);\n });\n\n function i() {\n for (var e = 0; e < n.length; e++) {\n var t = n[e];\n \"disabled\" === t.track.mode && t.track.mode !== t.storedMode && (t.track.mode = t.storedMode);\n }\n\n r.removeEventListener(\"change\", i);\n }\n\n this.on(\"webkitbeginfullscreen\", function () {\n r.removeEventListener(\"change\", e), r.removeEventListener(\"change\", i), r.addEventListener(\"change\", i);\n }), this.on(\"webkitendfullscreen\", function () {\n r.removeEventListener(\"change\", e), r.addEventListener(\"change\", e), r.removeEventListener(\"change\", i);\n });\n }, e.overrideNative_ = function (e, t) {\n var n = this;\n\n if (t === this[\"featuresNative\" + e + \"Tracks\"]) {\n var r = e.toLowerCase();\n this[r + \"TracksListeners_\"] && Object.keys(this[r + \"TracksListeners_\"]).forEach(function (e) {\n n.el()[r + \"Tracks\"].removeEventListener(e, n[r + \"TracksListeners_\"][e]);\n }), this[\"featuresNative\" + e + \"Tracks\"] = !t, this[r + \"TracksListeners_\"] = null, this.proxyNativeTracksForType_(r);\n }\n }, e.overrideNativeAudioTracks = function (e) {\n this.overrideNative_(\"Audio\", e);\n }, e.overrideNativeVideoTracks = function (e) {\n this.overrideNative_(\"Video\", e);\n }, e.proxyNativeTracksForType_ = function (e) {\n var r = this,\n t = Sr[e],\n i = this.el()[t.getterName],\n o = this[t.getterName]();\n\n if (this[\"featuresNative\" + t.capitalName + \"Tracks\"] && i && i.addEventListener) {\n var _n3 = function _n3() {\n for (var e = [], t = 0; t < o.length; t++) {\n for (var n = !1, r = 0; r < i.length; r++) {\n if (i[r] === o[t]) {\n n = !0;\n break;\n }\n }\n\n n || e.push(o[t]);\n }\n\n for (; e.length;) {\n o.removeTrack(e.shift());\n }\n };\n\n var s = {\n change: function change(e) {\n o.trigger({\n type: \"change\",\n target: o,\n currentTarget: o,\n srcElement: o\n });\n },\n addtrack: function addtrack(e) {\n o.addTrack(e.track);\n },\n removetrack: function removetrack(e) {\n o.removeTrack(e.track);\n }\n };\n this[t.getterName + \"Listeners_\"] = s, Object.keys(s).forEach(function (t) {\n var n = s[t];\n i.addEventListener(t, n), r.on(\"dispose\", function (e) {\n return i.removeEventListener(t, n);\n });\n }), this.on(\"loadstart\", _n3), this.on(\"dispose\", function (e) {\n return r.off(\"loadstart\", _n3);\n });\n }\n }, e.proxyNativeTracks_ = function () {\n var t = this;\n Sr.names.forEach(function (e) {\n t.proxyNativeTracksForType_(e);\n });\n }, e.createEl = function () {\n var e = this.options_.tag;\n\n if (!e || !this.options_.playerElIngest && !this.movingMediaElementInDOM) {\n if (e) {\n var t = e.cloneNode(!0);\n e.parentNode && e.parentNode.insertBefore(t, e), a.disposeMediaElement(e), e = t;\n } else {\n e = d.createElement(\"video\");\n var n = Ie({}, this.options_.tag && x(this.options_.tag));\n st && !0 === this.options_.nativeControlsForTouch || delete n.controls, P(e, y(n, {\n id: this.options_.techId,\n \"class\": \"vjs-tech\"\n }));\n }\n\n e.playerId = this.options_.playerId;\n }\n\n \"undefined\" != typeof this.options_.preload && A(e, \"preload\", this.options_.preload);\n\n for (var r = [\"loop\", \"muted\", \"playsinline\", \"autoplay\"], i = 0; i < r.length; i++) {\n var o = r[i],\n s = this.options_[o];\n \"undefined\" != typeof s && (s ? A(e, o, o) : I(e, o), e[o] = s);\n }\n\n return e;\n }, e.handleLateInit_ = function (e) {\n if (0 !== e.networkState && 3 !== e.networkState) {\n if (0 === e.readyState) {\n var _t3 = function _t3() {\n n = !0;\n };\n\n var _r2 = function _r2() {\n n || this.trigger(\"loadstart\");\n };\n\n var n = !1;\n this.on(\"loadstart\", _t3);\n return this.on(\"loadedmetadata\", _r2), void this.ready(function () {\n this.off(\"loadstart\", _t3), this.off(\"loadedmetadata\", _r2), n || this.trigger(\"loadstart\");\n });\n }\n\n var i = [\"loadstart\"];\n i.push(\"loadedmetadata\"), 2 <= e.readyState && i.push(\"loadeddata\"), 3 <= e.readyState && i.push(\"canplay\"), 4 <= e.readyState && i.push(\"canplaythrough\"), this.ready(function () {\n i.forEach(function (e) {\n this.trigger(e);\n }, this);\n });\n }\n }, e.setCurrentTime = function (e) {\n try {\n this.el_.currentTime = e;\n } catch (e) {\n f(e, \"Video is not ready. (Video.js)\");\n }\n }, e.duration = function () {\n var t = this;\n\n if (this.el_.duration === 1 / 0 && Xe && et && 0 === this.el_.currentTime) {\n return this.on(\"timeupdate\", function e() {\n 0 < t.el_.currentTime && (t.el_.duration === 1 / 0 && t.trigger(\"durationchange\"), t.off(\"timeupdate\", e));\n }), NaN;\n }\n\n return this.el_.duration || NaN;\n }, e.width = function () {\n return this.el_.offsetWidth;\n }, e.height = function () {\n return this.el_.offsetHeight;\n }, e.proxyWebkitFullscreen_ = function () {\n var e = this;\n\n if (\"webkitDisplayingFullscreen\" in this.el_) {\n var _t4 = function _t4() {\n this.trigger(\"fullscreenchange\", {\n isFullscreen: !1\n });\n };\n\n var _n4 = function _n4() {\n \"webkitPresentationMode\" in this.el_ && \"picture-in-picture\" !== this.el_.webkitPresentationMode && (this.one(\"webkitendfullscreen\", _t4), this.trigger(\"fullscreenchange\", {\n isFullscreen: !0\n }));\n };\n\n this.on(\"webkitbeginfullscreen\", _n4), this.on(\"dispose\", function () {\n e.off(\"webkitbeginfullscreen\", _n4), e.off(\"webkitendfullscreen\", _t4);\n });\n }\n }, e.supportsFullScreen = function () {\n if (\"function\" == typeof this.el_.webkitEnterFullScreen) {\n var e = h.navigator && h.navigator.userAgent || \"\";\n if (/Android/.test(e) || !/Chrome|Mac OS X 10.5/.test(e)) return !0;\n }\n\n return !1;\n }, e.enterFullScreen = function () {\n var e = this.el_;\n e.paused && e.networkState <= e.HAVE_METADATA ? (this.el_.play(), this.setTimeout(function () {\n e.pause(), e.webkitEnterFullScreen();\n }, 0)) : e.webkitEnterFullScreen();\n }, e.exitFullScreen = function () {\n this.el_.webkitExitFullScreen();\n }, e.requestPictureInPicture = function () {\n return this.el_.requestPictureInPicture();\n }, e.src = function (e) {\n if (void 0 === e) return this.el_.src;\n this.setSrc(e);\n }, e.reset = function () {\n a.resetMediaElement(this.el_);\n }, e.currentSrc = function () {\n return this.currentSource_ ? this.currentSource_.src : this.el_.currentSrc;\n }, e.setControls = function (e) {\n this.el_.controls = !!e;\n }, e.addTextTrack = function (e, t, n) {\n return this.featuresNativeTextTracks ? this.el_.addTextTrack(e, t, n) : u.prototype.addTextTrack.call(this, e, t, n);\n }, e.createRemoteTextTrack = function (e) {\n if (!this.featuresNativeTextTracks) return u.prototype.createRemoteTextTrack.call(this, e);\n var t = d.createElement(\"track\");\n return e.kind && (t.kind = e.kind), e.label && (t.label = e.label), (e.language || e.srclang) && (t.srclang = e.language || e.srclang), e[\"default\"] && (t[\"default\"] = e[\"default\"]), e.id && (t.id = e.id), e.src && (t.src = e.src), t;\n }, e.addRemoteTextTrack = function (e, t) {\n var n = u.prototype.addRemoteTextTrack.call(this, e, t);\n return this.featuresNativeTextTracks && this.el().appendChild(n), n;\n }, e.removeRemoteTextTrack = function (e) {\n if (u.prototype.removeRemoteTextTrack.call(this, e), this.featuresNativeTextTracks) for (var t = this.$$(\"track\"), n = t.length; n--;) {\n e !== t[n] && e !== t[n].track || this.el().removeChild(t[n]);\n }\n }, e.getVideoPlaybackQuality = function () {\n if (\"function\" == typeof this.el().getVideoPlaybackQuality) return this.el().getVideoPlaybackQuality();\n var e = {};\n return \"undefined\" != typeof this.el().webkitDroppedFrameCount && \"undefined\" != typeof this.el().webkitDecodedFrameCount && (e.droppedVideoFrames = this.el().webkitDroppedFrameCount, e.totalVideoFrames = this.el().webkitDecodedFrameCount), h.performance && \"function\" == typeof h.performance.now ? e.creationTime = h.performance.now() : h.performance && h.performance.timing && \"number\" == typeof h.performance.timing.navigationStart && (e.creationTime = h.Date.now() - h.performance.timing.navigationStart), e;\n }, a;\n }(jr);\n\n if (u()) {\n bo.TEST_VID = d.createElement(\"video\");\n var To = d.createElement(\"track\");\n To.kind = \"captions\", To.srclang = \"en\", To.label = \"English\", bo.TEST_VID.appendChild(To);\n }\n\n bo.isSupported = function () {\n try {\n bo.TEST_VID.volume = .5;\n } catch (e) {\n return !1;\n }\n\n return !(!bo.TEST_VID || !bo.TEST_VID.canPlayType);\n }, bo.canPlayType = function (e) {\n return bo.TEST_VID.canPlayType(e);\n }, bo.canPlaySource = function (e, t) {\n return bo.canPlayType(e.type);\n }, bo.canControlVolume = function () {\n try {\n var e = bo.TEST_VID.volume;\n return bo.TEST_VID.volume = e / 2 + .1, e !== bo.TEST_VID.volume;\n } catch (e) {\n return !1;\n }\n }, bo.canMuteVolume = function () {\n try {\n var e = bo.TEST_VID.muted;\n return bo.TEST_VID.muted = !e, bo.TEST_VID.muted ? A(bo.TEST_VID, \"muted\", \"muted\") : I(bo.TEST_VID, \"muted\"), e !== bo.TEST_VID.muted;\n } catch (e) {\n return !1;\n }\n }, bo.canControlPlaybackRate = function () {\n if (Xe && et && tt < 58) return !1;\n\n try {\n var e = bo.TEST_VID.playbackRate;\n return bo.TEST_VID.playbackRate = e / 2 + .1, e !== bo.TEST_VID.playbackRate;\n } catch (e) {\n return !1;\n }\n }, bo.canOverrideAttributes = function () {\n try {\n var _e3 = function _e3() {};\n\n Object.defineProperty(d.createElement(\"video\"), \"src\", {\n get: _e3,\n set: _e3\n }), Object.defineProperty(d.createElement(\"audio\"), \"src\", {\n get: _e3,\n set: _e3\n }), Object.defineProperty(d.createElement(\"video\"), \"innerHTML\", {\n get: _e3,\n set: _e3\n }), Object.defineProperty(d.createElement(\"audio\"), \"innerHTML\", {\n get: _e3,\n set: _e3\n });\n } catch (e) {\n return !1;\n }\n\n return !0;\n }, bo.supportsNativeTextTracks = function () {\n return it || qe && et;\n }, bo.supportsNativeVideoTracks = function () {\n return !(!bo.TEST_VID || !bo.TEST_VID.videoTracks);\n }, bo.supportsNativeAudioTracks = function () {\n return !(!bo.TEST_VID || !bo.TEST_VID.audioTracks);\n }, bo.Events = [\"loadstart\", \"suspend\", \"abort\", \"error\", \"emptied\", \"stalled\", \"loadedmetadata\", \"loadeddata\", \"canplay\", \"canplaythrough\", \"playing\", \"waiting\", \"seeking\", \"seeked\", \"ended\", \"durationchange\", \"timeupdate\", \"progress\", \"play\", \"pause\", \"ratechange\", \"resize\", \"volumechange\"], bo.prototype.featuresVolumeControl = bo.canControlVolume(), bo.prototype.featuresMuteControl = bo.canMuteVolume(), bo.prototype.featuresPlaybackRate = bo.canControlPlaybackRate(), bo.prototype.featuresSourceset = bo.canOverrideAttributes(), bo.prototype.movingMediaElementInDOM = !qe, bo.prototype.featuresFullscreenResize = !0, bo.prototype.featuresProgressEvents = !0, bo.prototype.featuresTimeupdateEvents = !0, bo.prototype.featuresNativeTextTracks = bo.supportsNativeTextTracks(), bo.prototype.featuresNativeVideoTracks = bo.supportsNativeVideoTracks(), bo.prototype.featuresNativeAudioTracks = bo.supportsNativeAudioTracks();\n var ko = bo.TEST_VID && bo.TEST_VID.constructor.prototype.canPlayType,\n Co = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\n bo.patchCanPlayType = function () {\n 4 <= Ye && !Je && !et && (bo.TEST_VID.constructor.prototype.canPlayType = function (e) {\n return e && Co.test(e) ? \"maybe\" : ko.call(this, e);\n });\n }, bo.unpatchCanPlayType = function () {\n var e = bo.TEST_VID.constructor.prototype.canPlayType;\n return bo.TEST_VID.constructor.prototype.canPlayType = ko, e;\n }, bo.patchCanPlayType(), bo.disposeMediaElement = function (e) {\n if (e) {\n for (e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes();) {\n e.removeChild(e.firstChild);\n }\n\n e.removeAttribute(\"src\"), \"function\" == typeof e.load && function () {\n try {\n e.load();\n } catch (e) {}\n }();\n }\n }, bo.resetMediaElement = function (e) {\n if (e) {\n for (var t = e.querySelectorAll(\"source\"), n = t.length; n--;) {\n e.removeChild(t[n]);\n }\n\n e.removeAttribute(\"src\"), \"function\" == typeof e.load && function () {\n try {\n e.load();\n } catch (e) {}\n }();\n }\n }, [\"muted\", \"defaultMuted\", \"autoplay\", \"controls\", \"loop\", \"playsinline\"].forEach(function (e) {\n bo.prototype[e] = function () {\n return this.el_[e] || this.el_.hasAttribute(e);\n };\n }), [\"muted\", \"defaultMuted\", \"autoplay\", \"loop\", \"playsinline\"].forEach(function (t) {\n bo.prototype[\"set\" + Ae(t)] = function (e) {\n (this.el_[t] = e) ? this.el_.setAttribute(t, t) : this.el_.removeAttribute(t);\n };\n }), [\"paused\", \"currentTime\", \"buffered\", \"volume\", \"poster\", \"preload\", \"error\", \"seeking\", \"seekable\", \"ended\", \"playbackRate\", \"defaultPlaybackRate\", \"played\", \"networkState\", \"readyState\", \"videoWidth\", \"videoHeight\"].forEach(function (e) {\n bo.prototype[e] = function () {\n return this.el_[e];\n };\n }), [\"volume\", \"src\", \"poster\", \"preload\", \"playbackRate\", \"defaultPlaybackRate\"].forEach(function (t) {\n bo.prototype[\"set\" + Ae(t)] = function (e) {\n this.el_[t] = e;\n };\n }), [\"pause\", \"load\", \"play\"].forEach(function (e) {\n bo.prototype[e] = function () {\n return this.el_[e]();\n };\n }), jr.withSourceHandlers(bo), bo.nativeSourceHandler = {}, bo.nativeSourceHandler.canPlayType = function (e) {\n try {\n return bo.TEST_VID.canPlayType(e);\n } catch (e) {\n return \"\";\n }\n }, bo.nativeSourceHandler.canHandleSource = function (e, t) {\n if (e.type) return bo.nativeSourceHandler.canPlayType(e.type);\n\n if (e.src) {\n var n = Lt(e.src);\n return bo.nativeSourceHandler.canPlayType(\"video/\" + n);\n }\n\n return \"\";\n }, bo.nativeSourceHandler.handleSource = function (e, t, n) {\n t.setSrc(e.src);\n }, bo.nativeSourceHandler.dispose = function () {}, bo.registerSourceHandler(bo.nativeSourceHandler), jr.registerTech(\"Html5\", bo);\n var Eo = [\"progress\", \"abort\", \"suspend\", \"emptied\", \"stalled\", \"loadedmetadata\", \"loadeddata\", \"timeupdate\", \"resize\", \"volumechange\", \"texttrackchange\"],\n So = {\n canplay: \"CanPlay\",\n canplaythrough: \"CanPlayThrough\",\n playing: \"Playing\",\n seeked: \"Seeked\"\n },\n wo = [\"tiny\", \"xsmall\", \"small\", \"medium\", \"large\", \"xlarge\", \"huge\"],\n Po = {};\n wo.forEach(function (e) {\n var t = \"x\" === e.charAt(0) ? \"x-\" + e.substring(1) : e;\n Po[e] = \"vjs-layout-\" + t;\n });\n\n var xo = {\n tiny: 210,\n xsmall: 320,\n small: 425,\n medium: 768,\n large: 1440,\n xlarge: 2560,\n huge: 1 / 0\n },\n jo = function (u) {\n function c(e, t, n) {\n var r;\n if (e.id = e.id || t.id || \"vjs_video_\" + te(), (t = y(c.getTagSettings(e), t)).initChildren = !1, t.createEl = !1, t.evented = !1, t.reportTouchActivity = !1, !t.language) if (\"function\" == typeof e.closest) {\n var i = e.closest(\"[lang]\");\n i && i.getAttribute && (t.language = i.getAttribute(\"lang\"));\n } else for (var o = e; o && 1 === o.nodeType;) {\n if (x(o).hasOwnProperty(\"lang\")) {\n t.language = o.getAttribute(\"lang\");\n break;\n }\n\n o = o.parentNode;\n }\n if ((r = u.call(this, null, t, n) || this).boundDocumentFullscreenChange_ = pe(Le(r), r.documentFullscreenChange_), r.boundFullWindowOnEscKey_ = pe(Le(r), r.fullWindowOnEscKey), r.log = v(r.id_), r.fsApi_ = pt, r.isPosterFromTech_ = !1, r.queuedCallbacks_ = [], r.isReady_ = !1, r.hasStarted_ = !1, r.userActive_ = !1, !r.options_ || !r.options_.techOrder || !r.options_.techOrder.length) throw new Error(\"No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?\");\n\n if (r.tag = e, r.tagAttributes = e && x(e), r.language(r.options_.language), t.languages) {\n var s = {};\n Object.getOwnPropertyNames(t.languages).forEach(function (e) {\n s[e.toLowerCase()] = t.languages[e];\n }), r.languages_ = s;\n } else r.languages_ = c.prototype.options_.languages;\n\n r.resetCache_(), r.poster_ = t.poster || \"\", r.controls_ = !!t.controls, e.controls = !1, e.removeAttribute(\"controls\"), r.changingSrc_ = !1, r.playCallbacks_ = [], r.playTerminatedQueue_ = [], e.hasAttribute(\"autoplay\") ? r.autoplay(!0) : r.autoplay(r.options_.autoplay), t.plugins && Object.keys(t.plugins).forEach(function (e) {\n if (\"function\" != typeof r[e]) throw new Error('plugin \"' + e + '\" does not exist');\n }), r.scrubbing_ = !1, r.el_ = r.createEl(), we(Le(r), {\n eventBusKey: \"el_\"\n }), r.fluid_ && r.on(\"playerreset\", r.updateStyleEl_);\n var a = Ie(r.options_);\n t.plugins && Object.keys(t.plugins).forEach(function (e) {\n r[e](t.plugins[e]);\n }), r.options_.playerOptions = a, r.middleware_ = [], r.initChildren(), r.isAudio(\"audio\" === e.nodeName.toLowerCase()), r.controls() ? r.addClass(\"vjs-controls-enabled\") : r.addClass(\"vjs-controls-disabled\"), r.el_.setAttribute(\"role\", \"region\"), r.isAudio() ? r.el_.setAttribute(\"aria-label\", r.localize(\"Audio Player\")) : r.el_.setAttribute(\"aria-label\", r.localize(\"Video Player\")), r.isAudio() && r.addClass(\"vjs-audio\"), r.flexNotSupported_() && r.addClass(\"vjs-no-flex\"), st && r.addClass(\"vjs-touch-enabled\"), qe || r.addClass(\"vjs-workinghover\"), c.players[r.id_] = Le(r);\n var l = p.split(\".\")[0];\n return r.addClass(\"vjs-v\" + l), r.userActive(!0), r.reportUserActivity(), r.one(\"play\", r.listenForUserActivity_), r.on(\"stageclick\", r.handleStageClick_), r.on(\"keydown\", r.handleKeyDown), r.breakpoints(r.options_.breakpoints), r.responsive(r.options_.responsive), r;\n }\n\n De(c, u);\n var e = c.prototype;\n return e.dispose = function () {\n var r = this;\n this.trigger(\"dispose\"), this.off(\"dispose\"), ce(d, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_), ce(d, \"keydown\", this.boundFullWindowOnEscKey_), this.styleEl_ && this.styleEl_.parentNode && (this.styleEl_.parentNode.removeChild(this.styleEl_), this.styleEl_ = null), c.players[this.id_] = null, this.tag && this.tag.player && (this.tag.player = null), this.el_ && this.el_.player && (this.el_.player = null), this.tech_ && (this.tech_.dispose(), this.isPosterFromTech_ = !1, this.poster_ = \"\"), this.playerElIngest_ && (this.playerElIngest_ = null), this.tag && (this.tag = null), function (e) {\n Ir[e.id()] = null;\n }(this), Pr.names.forEach(function (e) {\n var t = Pr[e],\n n = r[t.getterName]();\n n && n.off && n.off();\n }), u.prototype.dispose.call(this);\n }, e.createEl = function () {\n var t,\n n = this.tag,\n e = this.playerElIngest_ = n.parentNode && n.parentNode.hasAttribute && n.parentNode.hasAttribute(\"data-vjs-player\"),\n r = \"video-js\" === this.tag.tagName.toLowerCase();\n e ? t = this.el_ = n.parentNode : r || (t = this.el_ = u.prototype.createEl.call(this, \"div\"));\n var i = x(n);\n\n if (r) {\n for (t = this.el_ = n, n = this.tag = d.createElement(\"video\"); t.children.length;) {\n n.appendChild(t.firstChild);\n }\n\n C(t, \"video-js\") || E(t, \"video-js\"), t.appendChild(n), e = this.playerElIngest_ = t, Object.keys(t).forEach(function (e) {\n try {\n n[e] = t[e];\n } catch (e) {}\n });\n }\n\n if (n.setAttribute(\"tabindex\", \"-1\"), i.tabindex = \"-1\", (nt || et && ot) && (n.setAttribute(\"role\", \"application\"), i.role = \"application\"), n.removeAttribute(\"width\"), n.removeAttribute(\"height\"), \"width\" in i && delete i.width, \"height\" in i && delete i.height, Object.getOwnPropertyNames(i).forEach(function (e) {\n r && \"class\" === e || t.setAttribute(e, i[e]), r && n.setAttribute(e, i[e]);\n }), n.playerId = n.id, n.id += \"_html5_api\", n.className = \"vjs-tech\", n.player = t.player = this, this.addClass(\"vjs-paused\"), !0 !== h.VIDEOJS_NO_DYNAMIC_STYLE) {\n this.styleEl_ = Q(\"vjs-styles-dimensions\");\n var o = W(\".vjs-styles-defaults\"),\n s = W(\"head\");\n s.insertBefore(this.styleEl_, o ? o.nextSibling : s.firstChild);\n }\n\n this.fill_ = !1, this.fluid_ = !1, this.width(this.options_.width), this.height(this.options_.height), this.fill(this.options_.fill), this.fluid(this.options_.fluid), this.aspectRatio(this.options_.aspectRatio);\n\n for (var a = n.getElementsByTagName(\"a\"), l = 0; l < a.length; l++) {\n var c = a.item(l);\n E(c, \"vjs-hidden\"), c.setAttribute(\"hidden\", \"hidden\");\n }\n\n return n.initNetworkState_ = n.networkState, n.parentNode && !e && n.parentNode.insertBefore(t, n), k(n, t), this.children_.unshift(n), this.el_.setAttribute(\"lang\", this.language_), this.el_ = t;\n }, e.width = function (e) {\n return this.dimension(\"width\", e);\n }, e.height = function (e) {\n return this.dimension(\"height\", e);\n }, e.dimension = function (e, t) {\n var n = e + \"_\";\n if (void 0 === t) return this[n] || 0;\n if (\"\" === t) return this[n] = void 0, void this.updateStyleEl_();\n var r = parseFloat(t);\n isNaN(r) ? f.error('Improper value \"' + t + '\" supplied for for ' + e) : (this[n] = r, this.updateStyleEl_());\n }, e.fluid = function (e) {\n if (void 0 === e) return !!this.fluid_;\n this.fluid_ = !!e, Ee(this) && this.off(\"playerreset\", this.updateStyleEl_), e ? (this.addClass(\"vjs-fluid\"), this.fill(!1), function (e, t) {\n Ee(e) ? t() : (e.eventedCallbacks || (e.eventedCallbacks = []), e.eventedCallbacks.push(t));\n }(function () {\n this.on(\"playerreset\", this.updateStyleEl_);\n })) : this.removeClass(\"vjs-fluid\"), this.updateStyleEl_();\n }, e.fill = function (e) {\n if (void 0 === e) return !!this.fill_;\n this.fill_ = !!e, e ? (this.addClass(\"vjs-fill\"), this.fluid(!1)) : this.removeClass(\"vjs-fill\");\n }, e.aspectRatio = function (e) {\n if (void 0 === e) return this.aspectRatio_;\n if (!/^\\d+\\:\\d+$/.test(e)) throw new Error(\"Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.\");\n this.aspectRatio_ = e, this.fluid(!0), this.updateStyleEl_();\n }, e.updateStyleEl_ = function () {\n if (!0 !== h.VIDEOJS_NO_DYNAMIC_STYLE) {\n var e,\n t,\n n,\n r = (void 0 !== this.aspectRatio_ && \"auto\" !== this.aspectRatio_ ? this.aspectRatio_ : 0 < this.videoWidth() ? this.videoWidth() + \":\" + this.videoHeight() : \"16:9\").split(\":\"),\n i = r[1] / r[0];\n e = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / i : this.videoWidth() || 300, t = void 0 !== this.height_ ? this.height_ : e * i, n = /^[^a-zA-Z]/.test(this.id()) ? \"dimensions-\" + this.id() : this.id() + \"-dimensions\", this.addClass(n), J(this.styleEl_, \"\\n .\" + n + \" {\\n width: \" + e + \"px;\\n height: \" + t + \"px;\\n }\\n\\n .\" + n + \".vjs-fluid {\\n padding-top: \" + 100 * i + \"%;\\n }\\n \");\n } else {\n var o = \"number\" == typeof this.width_ ? this.width_ : this.options_.width,\n s = \"number\" == typeof this.height_ ? this.height_ : this.options_.height,\n a = this.tech_ && this.tech_.el();\n a && (0 <= o && (a.width = o), 0 <= s && (a.height = s));\n }\n }, e.loadTech_ = function (e, t) {\n var n = this;\n this.tech_ && this.unloadTech_();\n var r = Ae(e),\n i = e.charAt(0).toLowerCase() + e.slice(1);\n \"Html5\" !== r && this.tag && (jr.getTech(\"Html5\").disposeMediaElement(this.tag), this.tag.player = null, this.tag = null), this.techName_ = r, this.isReady_ = !1;\n var o = {\n source: t,\n autoplay: \"string\" != typeof this.autoplay() && this.autoplay(),\n nativeControlsForTouch: this.options_.nativeControlsForTouch,\n playerId: this.id(),\n techId: this.id() + \"_\" + i + \"_api\",\n playsinline: this.options_.playsinline,\n preload: this.options_.preload,\n loop: this.options_.loop,\n muted: this.options_.muted,\n poster: this.poster(),\n language: this.language(),\n playerElIngest: this.playerElIngest_ || !1,\n \"vtt.js\": this.options_[\"vtt.js\"],\n canOverridePoster: !!this.options_.techCanOverridePoster,\n enableSourceset: this.options_.enableSourceset,\n Promise: this.options_.Promise\n };\n Pr.names.forEach(function (e) {\n var t = Pr[e];\n o[t.getterName] = n[t.privateName];\n }), y(o, this.options_[r]), y(o, this.options_[i]), y(o, this.options_[e.toLowerCase()]), this.tag && (o.tag = this.tag), t && t.src === this.cache_.src && 0 < this.cache_.currentTime && (o.startTime = this.cache_.currentTime);\n var s = jr.getTech(e);\n if (!s) throw new Error(\"No Tech named '\" + r + \"' exists! '\" + r + \"' should be registered using videojs.registerTech()'\");\n this.tech_ = new s(o), this.tech_.ready(pe(this, this.handleTechReady_), !0), St(this.textTracksJson_ || [], this.tech_), Eo.forEach(function (e) {\n n.on(n.tech_, e, n[\"handleTech\" + Ae(e) + \"_\"]);\n }), Object.keys(So).forEach(function (t) {\n n.on(n.tech_, t, function (e) {\n 0 === n.tech_.playbackRate() && n.tech_.seeking() ? n.queuedCallbacks_.push({\n callback: n[\"handleTech\" + So[t] + \"_\"].bind(n),\n event: e\n }) : n[\"handleTech\" + So[t] + \"_\"](e);\n });\n }), this.on(this.tech_, \"loadstart\", this.handleTechLoadStart_), this.on(this.tech_, \"sourceset\", this.handleTechSourceset_), this.on(this.tech_, \"waiting\", this.handleTechWaiting_), this.on(this.tech_, \"ended\", this.handleTechEnded_), this.on(this.tech_, \"seeking\", this.handleTechSeeking_), this.on(this.tech_, \"play\", this.handleTechPlay_), this.on(this.tech_, \"firstplay\", this.handleTechFirstPlay_), this.on(this.tech_, \"pause\", this.handleTechPause_), this.on(this.tech_, \"durationchange\", this.handleTechDurationChange_), this.on(this.tech_, \"fullscreenchange\", this.handleTechFullscreenChange_), this.on(this.tech_, \"enterpictureinpicture\", this.handleTechEnterPictureInPicture_), this.on(this.tech_, \"leavepictureinpicture\", this.handleTechLeavePictureInPicture_), this.on(this.tech_, \"error\", this.handleTechError_), this.on(this.tech_, \"loadedmetadata\", this.updateStyleEl_), this.on(this.tech_, \"posterchange\", this.handleTechPosterChange_), this.on(this.tech_, \"textdata\", this.handleTechTextData_), this.on(this.tech_, \"ratechange\", this.handleTechRateChange_), this.usingNativeControls(this.techGet_(\"controls\")), this.controls() && !this.usingNativeControls() && this.addTechControlsListeners_(), this.tech_.el().parentNode === this.el() || \"Html5\" === r && this.tag || k(this.tech_.el(), this.el()), this.tag && (this.tag.player = null, this.tag = null);\n }, e.unloadTech_ = function () {\n var n = this;\n Pr.names.forEach(function (e) {\n var t = Pr[e];\n n[t.privateName] = n[t.getterName]();\n }), this.textTracksJson_ = Et(this.tech_), this.isReady_ = !1, this.tech_.dispose(), this.tech_ = !1, this.isPosterFromTech_ && (this.poster_ = \"\", this.trigger(\"posterchange\")), this.isPosterFromTech_ = !1;\n }, e.tech = function (e) {\n return void 0 === e && f.warn(\"Using the tech directly can be dangerous. I hope you know what you're doing.\\nSee https://github.com/videojs/video.js/issues/2617 for more info.\\n\"), this.tech_;\n }, e.addTechControlsListeners_ = function () {\n this.removeTechControlsListeners_(), this.on(this.tech_, \"mouseup\", this.handleTechClick_), this.on(this.tech_, \"dblclick\", this.handleTechDoubleClick_), this.on(this.tech_, \"touchstart\", this.handleTechTouchStart_), this.on(this.tech_, \"touchmove\", this.handleTechTouchMove_), this.on(this.tech_, \"touchend\", this.handleTechTouchEnd_), this.on(this.tech_, \"tap\", this.handleTechTap_);\n }, e.removeTechControlsListeners_ = function () {\n this.off(this.tech_, \"tap\", this.handleTechTap_), this.off(this.tech_, \"touchstart\", this.handleTechTouchStart_), this.off(this.tech_, \"touchmove\", this.handleTechTouchMove_), this.off(this.tech_, \"touchend\", this.handleTechTouchEnd_), this.off(this.tech_, \"mouseup\", this.handleTechClick_), this.off(this.tech_, \"dblclick\", this.handleTechDoubleClick_);\n }, e.handleTechReady_ = function () {\n this.triggerReady(), this.cache_.volume && this.techCall_(\"setVolume\", this.cache_.volume), this.handleTechPosterChange_(), this.handleTechDurationChange_();\n }, e.handleTechLoadStart_ = function () {\n this.removeClass(\"vjs-ended\"), this.removeClass(\"vjs-seeking\"), this.error(null), this.handleTechDurationChange_(), this.paused() ? (this.hasStarted(!1), this.trigger(\"loadstart\")) : (this.trigger(\"loadstart\"), this.trigger(\"firstplay\")), this.manualAutoplay_(this.autoplay());\n }, e.manualAutoplay_ = function (t) {\n var r = this;\n\n if (this.tech_ && \"string\" == typeof t) {\n var _e4 = function _e4() {\n var e = r.muted();\n r.muted(!0);\n\n function t() {\n r.muted(e);\n }\n\n r.playTerminatedQueue_.push(t);\n var n = r.play();\n if (Tt(n)) return n[\"catch\"](t);\n };\n\n var n;\n if (\"any\" === t && !0 !== this.muted() ? Tt(n = this.play()) && (n = n[\"catch\"](_e4)) : n = \"muted\" === t && !0 !== this.muted() ? _e4() : this.play(), Tt(n)) return n.then(function () {\n r.trigger({\n type: \"autoplay-success\",\n autoplay: t\n });\n })[\"catch\"](function (e) {\n r.trigger({\n type: \"autoplay-failure\",\n autoplay: t\n });\n });\n }\n }, e.updateSourceCaches_ = function (e) {\n void 0 === e && (e = \"\");\n var t = e,\n n = \"\";\n \"string\" != typeof t && (t = e.src, n = e.type), this.cache_.source = this.cache_.source || {}, this.cache_.sources = this.cache_.sources || [], t && !n && (n = function (e, t) {\n if (!t) return \"\";\n if (e.cache_.source.src === t && e.cache_.source.type) return e.cache_.source.type;\n var n = e.cache_.sources.filter(function (e) {\n return e.src === t;\n });\n if (n.length) return n[0].type;\n\n for (var r = e.$$(\"source\"), i = 0; i < r.length; i++) {\n var o = r[i];\n if (o.type && o.src && o.src === t) return o.type;\n }\n\n return $r(t);\n }(this, t)), this.cache_.source = Ie({}, e, {\n src: t,\n type: n\n });\n\n for (var r = this.cache_.sources.filter(function (e) {\n return e.src && e.src === t;\n }), i = [], o = this.$$(\"source\"), s = [], a = 0; a < o.length; a++) {\n var l = x(o[a]);\n i.push(l), l.src && l.src === t && s.push(l.src);\n }\n\n s.length && !r.length ? this.cache_.sources = i : r.length || (this.cache_.sources = [this.cache_.source]), this.cache_.src = t;\n }, e.handleTechSourceset_ = function (e) {\n var n = this;\n\n if (!this.changingSrc_) {\n var t = function t(e) {\n return n.updateSourceCaches_(e);\n },\n r = this.currentSource().src,\n i = e.src;\n\n r && !/^blob:/.test(r) && /^blob:/.test(i) && (this.lastSource_ && (this.lastSource_.tech === i || this.lastSource_.player === r) || (t = function t() {})), t(i), e.src || this.tech_.any([\"sourceset\", \"loadstart\"], function (e) {\n if (\"sourceset\" !== e.type) {\n var t = n.techGet(\"currentSrc\");\n n.lastSource_.tech = t, n.updateSourceCaches_(t);\n }\n });\n }\n\n this.lastSource_ = {\n player: this.currentSource().src,\n tech: e.src\n }, this.trigger({\n src: e.src,\n type: \"sourceset\"\n });\n }, e.hasStarted = function (e) {\n if (void 0 === e) return this.hasStarted_;\n e !== this.hasStarted_ && (this.hasStarted_ = e, this.hasStarted_ ? (this.addClass(\"vjs-has-started\"), this.trigger(\"firstplay\")) : this.removeClass(\"vjs-has-started\"));\n }, e.handleTechPlay_ = function () {\n this.removeClass(\"vjs-ended\"), this.removeClass(\"vjs-paused\"), this.addClass(\"vjs-playing\"), this.hasStarted(!0), this.trigger(\"play\");\n }, e.handleTechRateChange_ = function () {\n 0 < this.tech_.playbackRate() && 0 === this.cache_.lastPlaybackRate && (this.queuedCallbacks_.forEach(function (e) {\n return e.callback(e.event);\n }), this.queuedCallbacks_ = []), this.cache_.lastPlaybackRate = this.tech_.playbackRate(), this.trigger(\"ratechange\");\n }, e.handleTechWaiting_ = function () {\n var t = this;\n this.addClass(\"vjs-waiting\"), this.trigger(\"waiting\");\n var n = this.currentTime();\n this.on(\"timeupdate\", function e() {\n n !== t.currentTime() && (t.removeClass(\"vjs-waiting\"), t.off(\"timeupdate\", e));\n });\n }, e.handleTechCanPlay_ = function () {\n this.removeClass(\"vjs-waiting\"), this.trigger(\"canplay\");\n }, e.handleTechCanPlayThrough_ = function () {\n this.removeClass(\"vjs-waiting\"), this.trigger(\"canplaythrough\");\n }, e.handleTechPlaying_ = function () {\n this.removeClass(\"vjs-waiting\"), this.trigger(\"playing\");\n }, e.handleTechSeeking_ = function () {\n this.addClass(\"vjs-seeking\"), this.trigger(\"seeking\");\n }, e.handleTechSeeked_ = function () {\n this.removeClass(\"vjs-seeking\"), this.removeClass(\"vjs-ended\"), this.trigger(\"seeked\");\n }, e.handleTechFirstPlay_ = function () {\n this.options_.starttime && (f.warn(\"Passing the `starttime` option to the player will be deprecated in 6.0\"), this.currentTime(this.options_.starttime)), this.addClass(\"vjs-has-started\"), this.trigger(\"firstplay\");\n }, e.handleTechPause_ = function () {\n this.removeClass(\"vjs-playing\"), this.addClass(\"vjs-paused\"), this.trigger(\"pause\");\n }, e.handleTechEnded_ = function () {\n this.addClass(\"vjs-ended\"), this.options_.loop ? (this.currentTime(0), this.play()) : this.paused() || this.pause(), this.trigger(\"ended\");\n }, e.handleTechDurationChange_ = function () {\n this.duration(this.techGet_(\"duration\"));\n }, e.handleTechClick_ = function (e) {\n V(e) && this.controls_ && (this.paused() ? kt(this.play()) : this.pause());\n }, e.handleTechDoubleClick_ = function (t) {\n this.controls_ && (Array.prototype.some.call(this.$$(\".vjs-control-bar, .vjs-modal-dialog\"), function (e) {\n return e.contains(t.target);\n }) || void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.doubleClick && !1 === this.options_.userActions.doubleClick || (void 0 !== this.options_ && void 0 !== this.options_.userActions && \"function\" == typeof this.options_.userActions.doubleClick ? this.options_.userActions.doubleClick.call(this, t) : this.isFullscreen() ? this.exitFullscreen() : this.requestFullscreen()));\n }, e.handleTechTap_ = function () {\n this.userActive(!this.userActive());\n }, e.handleTechTouchStart_ = function () {\n this.userWasActive = this.userActive();\n }, e.handleTechTouchMove_ = function () {\n this.userWasActive && this.reportUserActivity();\n }, e.handleTechTouchEnd_ = function (e) {\n e.preventDefault();\n }, e.handleStageClick_ = function () {\n this.reportUserActivity();\n }, e.toggleFullscreenClass_ = function () {\n this.isFullscreen() ? this.addClass(\"vjs-fullscreen\") : this.removeClass(\"vjs-fullscreen\");\n }, e.documentFullscreenChange_ = function (e) {\n var t = this.el(),\n n = d[this.fsApi_.fullscreenElement] === t;\n !n && t.matches ? n = t.matches(\":\" + this.fsApi_.fullscreen) : !n && t.msMatchesSelector && (n = t.msMatchesSelector(\":\" + this.fsApi_.fullscreen)), this.isFullscreen(n), !1 === this.isFullscreen() && ce(d, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_), this.fsApi_.prefixed && this.trigger(\"fullscreenchange\");\n }, e.handleTechFullscreenChange_ = function (e, t) {\n t && this.isFullscreen(t.isFullscreen), this.trigger(\"fullscreenchange\");\n }, e.togglePictureInPictureClass_ = function () {\n this.isInPictureInPicture() ? this.addClass(\"vjs-picture-in-picture\") : this.removeClass(\"vjs-picture-in-picture\");\n }, e.handleTechEnterPictureInPicture_ = function (e) {\n this.isInPictureInPicture(!0);\n }, e.handleTechLeavePictureInPicture_ = function (e) {\n this.isInPictureInPicture(!1);\n }, e.handleTechError_ = function () {\n var e = this.tech_.error();\n this.error(e);\n }, e.handleTechTextData_ = function (e, t) {\n var n = null;\n 1 < arguments.length && (n = t), this.trigger(\"textdata\", n);\n }, e.getCache = function () {\n return this.cache_;\n }, e.resetCache_ = function () {\n this.cache_ = {\n currentTime: 0,\n inactivityTimeout: this.options_.inactivityTimeout,\n duration: NaN,\n lastVolume: 1,\n lastPlaybackRate: this.defaultPlaybackRate(),\n media: null,\n src: \"\",\n source: {},\n sources: [],\n volume: 1\n };\n }, e.techCall_ = function (e, t) {\n this.ready(function () {\n if (e in Lr) return function (e, t, n, r) {\n return t[n](e.reduce(Rr(n), r));\n }(this.middleware_, this.tech_, e, t);\n if (e in Fr) return Mr(this.middleware_, this.tech_, e, t);\n\n try {\n this.tech_ && this.tech_[e](t);\n } catch (e) {\n throw f(e), e;\n }\n }, !0);\n }, e.techGet_ = function (t) {\n if (this.tech_ && this.tech_.isReady_) {\n if (t in Nr) return function (e, t, n) {\n return e.reduceRight(Rr(n), t[n]());\n }(this.middleware_, this.tech_, t);\n if (t in Fr) return Mr(this.middleware_, this.tech_, t);\n\n try {\n return this.tech_[t]();\n } catch (e) {\n if (void 0 === this.tech_[t]) throw f(\"Video.js: \" + t + \" method not defined for \" + this.techName_ + \" playback technology.\", e), e;\n if (\"TypeError\" === e.name) throw f(\"Video.js: \" + t + \" unavailable on \" + this.techName_ + \" playback technology element.\", e), this.tech_.isReady_ = !1, e;\n throw f(e), e;\n }\n }\n }, e.play = function () {\n var t = this,\n e = this.options_.Promise || h.Promise;\n return e ? new e(function (e) {\n t.play_(e);\n }) : this.play_();\n }, e.play_ = function (e) {\n var t = this;\n void 0 === e && (e = kt), this.playCallbacks_.push(e);\n var n = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));\n if (this.waitToPlay_ && (this.off([\"ready\", \"loadstart\"], this.waitToPlay_), this.waitToPlay_ = null), !this.isReady_ || !n) return this.waitToPlay_ = function (e) {\n t.play_();\n }, this.one([\"ready\", \"loadstart\"], this.waitToPlay_), void (n || !it && !qe || this.load());\n var r = this.techGet_(\"play\");\n null === r ? this.runPlayTerminatedQueue_() : this.runPlayCallbacks_(r);\n }, e.runPlayTerminatedQueue_ = function () {\n var e = this.playTerminatedQueue_.slice(0);\n this.playTerminatedQueue_ = [], e.forEach(function (e) {\n e();\n });\n }, e.runPlayCallbacks_ = function (t) {\n var e = this.playCallbacks_.slice(0);\n this.playCallbacks_ = [], this.playTerminatedQueue_ = [], e.forEach(function (e) {\n e(t);\n });\n }, e.pause = function () {\n this.techCall_(\"pause\");\n }, e.paused = function () {\n return !1 !== this.techGet_(\"paused\");\n }, e.played = function () {\n return this.techGet_(\"played\") || ut(0, 0);\n }, e.scrubbing = function (e) {\n if (\"undefined\" == typeof e) return this.scrubbing_;\n this.scrubbing_ = !!e, e ? this.addClass(\"vjs-scrubbing\") : this.removeClass(\"vjs-scrubbing\");\n }, e.currentTime = function (e) {\n return \"undefined\" != typeof e ? (e < 0 && (e = 0), void this.techCall_(\"setCurrentTime\", e)) : (this.cache_.currentTime = this.techGet_(\"currentTime\") || 0, this.cache_.currentTime);\n }, e.duration = function (e) {\n if (void 0 === e) return void 0 !== this.cache_.duration ? this.cache_.duration : NaN;\n (e = parseFloat(e)) < 0 && (e = 1 / 0), e !== this.cache_.duration && ((this.cache_.duration = e) === 1 / 0 ? (this.addClass(\"vjs-live\"), this.options_.liveui && this.player_.liveTracker && this.addClass(\"vjs-liveui\")) : (this.removeClass(\"vjs-live\"), this.removeClass(\"vjs-liveui\")), isNaN(e) || this.trigger(\"durationchange\"));\n }, e.remainingTime = function () {\n return this.duration() - this.currentTime();\n }, e.remainingTimeDisplay = function () {\n return Math.floor(this.duration()) - Math.floor(this.currentTime());\n }, e.buffered = function () {\n var e = this.techGet_(\"buffered\");\n return e && e.length || (e = ut(0, 0)), e;\n }, e.bufferedPercent = function () {\n return ht(this.buffered(), this.duration());\n }, e.bufferedEnd = function () {\n var e = this.buffered(),\n t = this.duration(),\n n = e.end(e.length - 1);\n return t < n && (n = t), n;\n }, e.volume = function (e) {\n var t;\n return void 0 !== e ? (t = Math.max(0, Math.min(1, parseFloat(e))), this.cache_.volume = t, this.techCall_(\"setVolume\", t), void (0 < t && this.lastVolume_(t))) : (t = parseFloat(this.techGet_(\"volume\")), isNaN(t) ? 1 : t);\n }, e.muted = function (e) {\n if (void 0 === e) return this.techGet_(\"muted\") || !1;\n this.techCall_(\"setMuted\", e);\n }, e.defaultMuted = function (e) {\n return void 0 !== e ? this.techCall_(\"setDefaultMuted\", e) : this.techGet_(\"defaultMuted\") || !1;\n }, e.lastVolume_ = function (e) {\n if (void 0 === e || 0 === e) return this.cache_.lastVolume;\n this.cache_.lastVolume = e;\n }, e.supportsFullScreen = function () {\n return this.techGet_(\"supportsFullScreen\") || !1;\n }, e.isFullscreen = function (e) {\n return void 0 !== e ? (this.isFullscreen_ = !!e, void this.toggleFullscreenClass_()) : !!this.isFullscreen_;\n }, e.requestFullscreen = function (e) {\n var t;\n this.isFullscreen(!0), this.fsApi_.requestFullscreen ? (le(d, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_), this.fsApi_.prefixed || (t = this.options_.fullscreen && this.options_.fullscreen.options || {}, void 0 !== e && (t = e)), kt(this.el_[this.fsApi_.requestFullscreen](t))) : this.tech_.supportsFullScreen() ? this.techCall_(\"enterFullScreen\") : (this.enterFullWindow(), this.trigger(\"fullscreenchange\"));\n }, e.exitFullscreen = function () {\n this.isFullscreen(!1), this.fsApi_.requestFullscreen ? kt(d[this.fsApi_.exitFullscreen]()) : this.tech_.supportsFullScreen() ? this.techCall_(\"exitFullScreen\") : (this.exitFullWindow(), this.trigger(\"fullscreenchange\"));\n }, e.enterFullWindow = function () {\n this.isFullWindow = !0, this.docOrigOverflow = d.documentElement.style.overflow, le(d, \"keydown\", this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = \"hidden\", E(d.body, \"vjs-full-window\"), this.trigger(\"enterFullWindow\");\n }, e.fullWindowOnEscKey = function (e) {\n Pt.isEventKey(e, \"Esc\") && (!0 === this.isFullscreen() ? this.exitFullscreen() : this.exitFullWindow());\n }, e.exitFullWindow = function () {\n this.isFullWindow = !1, ce(d, \"keydown\", this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = this.docOrigOverflow, S(d.body, \"vjs-full-window\"), this.trigger(\"exitFullWindow\");\n }, e.isInPictureInPicture = function (e) {\n return void 0 !== e ? (this.isInPictureInPicture_ = !!e, void this.togglePictureInPictureClass_()) : !!this.isInPictureInPicture_;\n }, e.requestPictureInPicture = function () {\n if (\"pictureInPictureEnabled\" in d) return this.techGet_(\"requestPictureInPicture\");\n }, e.exitPictureInPicture = function () {\n if (\"pictureInPictureEnabled\" in d) return d.exitPictureInPicture();\n }, e.handleKeyDown = function (e) {\n var t = this.options_.userActions;\n\n if (t && t.hotkeys) {\n !function (e) {\n var t = e.tagName.toLowerCase();\n if (e.isContentEditable) return !0;\n if (\"input\" === t) return -1 === [\"button\", \"checkbox\", \"hidden\", \"radio\", \"reset\", \"submit\"].indexOf(e.type);\n return -1 !== [\"textarea\"].indexOf(t);\n }(this.el_.ownerDocument.activeElement) && (\"function\" == typeof t.hotkeys ? t.hotkeys.call(this, e) : this.handleHotkeys(e));\n }\n }, e.handleHotkeys = function (e) {\n var t = this.options_.userActions ? this.options_.userActions.hotkeys : {},\n n = t.fullscreenKey,\n r = void 0 === n ? function (e) {\n return Pt.isEventKey(e, \"f\");\n } : n,\n i = t.muteKey,\n o = void 0 === i ? function (e) {\n return Pt.isEventKey(e, \"m\");\n } : i,\n s = t.playPauseKey,\n a = void 0 === s ? function (e) {\n return Pt.isEventKey(e, \"k\") || Pt.isEventKey(e, \"Space\");\n } : s;\n\n if (r.call(this, e)) {\n e.preventDefault(), e.stopPropagation();\n var l = Oe.getComponent(\"FullscreenToggle\");\n !1 !== d[this.fsApi_.fullscreenEnabled] && l.prototype.handleClick.call(this, e);\n } else if (o.call(this, e)) {\n e.preventDefault(), e.stopPropagation(), Oe.getComponent(\"MuteToggle\").prototype.handleClick.call(this, e);\n } else if (a.call(this, e)) {\n e.preventDefault(), e.stopPropagation(), Oe.getComponent(\"PlayToggle\").prototype.handleClick.call(this, e);\n }\n }, e.canPlayType = function (e) {\n for (var t, n = 0, r = this.options_.techOrder; n < r.length; n++) {\n var i = r[n],\n o = jr.getTech(i);\n\n if (o = o || Oe.getComponent(i)) {\n if (o.isSupported() && (t = o.canPlayType(e))) return t;\n } else f.error('The \"' + i + '\" tech is undefined. Skipped browser support check for that tech.');\n }\n\n return \"\";\n }, e.selectSource = function (e) {\n function t(e, n, r) {\n var i;\n return e.some(function (t) {\n return n.some(function (e) {\n if (i = r(t, e)) return !0;\n });\n }), i;\n }\n\n function n(e, t) {\n var n = e[0];\n if (e[1].canPlaySource(t, i.options_[n.toLowerCase()])) return {\n source: t,\n tech: n\n };\n }\n\n var r,\n i = this,\n o = this.options_.techOrder.map(function (e) {\n return [e, jr.getTech(e)];\n }).filter(function (e) {\n var t = e[0],\n n = e[1];\n return n ? n.isSupported() : (f.error('The \"' + t + '\" tech is undefined. Skipped browser support check for that tech.'), !1);\n });\n return (this.options_.sourceOrder ? t(e, o, (r = n, function (e, t) {\n return r(t, e);\n })) : t(o, e, n)) || !1;\n }, e.src = function (e) {\n var n = this;\n if (\"undefined\" == typeof e) return this.cache_.src || \"\";\n\n var r = function t(e) {\n if (Array.isArray(e)) {\n var n = [];\n e.forEach(function (e) {\n e = t(e), Array.isArray(e) ? n = n.concat(e) : s(e) && n.push(e);\n }), e = n;\n } else e = \"string\" == typeof e && e.trim() ? [Vr({\n src: e\n })] : s(e) && \"string\" == typeof e.src && e.src && e.src.trim() ? [Vr(e)] : [];\n\n return e;\n }(e);\n\n r.length ? (this.changingSrc_ = !0, this.cache_.sources = r, this.updateSourceCaches_(r[0]), Dr(this, r[0], function (e, t) {\n if (n.middleware_ = t, n.cache_.sources = r, n.updateSourceCaches_(e), n.src_(e)) return 1 < r.length ? n.src(r.slice(1)) : (n.changingSrc_ = !1, n.setTimeout(function () {\n this.error({\n code: 4,\n message: this.localize(this.options_.notSupportedMessage)\n });\n }, 0), void n.triggerReady());\n !function (e, t) {\n e.forEach(function (e) {\n return e.setTech && e.setTech(t);\n });\n }(t, n.tech_);\n })) : this.setTimeout(function () {\n this.error({\n code: 4,\n message: this.localize(this.options_.notSupportedMessage)\n });\n }, 0);\n }, e.src_ = function (e) {\n var t = this,\n n = this.selectSource([e]);\n return !n || (function (e, t) {\n return Ae(e) === Ae(t);\n }(n.tech, this.techName_) ? this.ready(function () {\n this.tech_.constructor.prototype.hasOwnProperty(\"setSource\") ? this.techCall_(\"setSource\", e) : this.techCall_(\"src\", e.src), this.changingSrc_ = !1;\n }, !0) : (this.changingSrc_ = !0, this.loadTech_(n.tech, n.source), this.tech_.ready(function () {\n t.changingSrc_ = !1;\n })), !1);\n }, e.load = function () {\n this.techCall_(\"load\");\n }, e.reset = function () {\n var e = this,\n t = this.options_.Promise || h.Promise;\n this.paused() || !t ? this.doReset_() : kt(this.play().then(function () {\n return e.doReset_();\n }));\n }, e.doReset_ = function () {\n this.tech_ && this.tech_.clearTracks(\"text\"), this.resetCache_(), this.poster(\"\"), this.loadTech_(this.options_.techOrder[0], null), this.techCall_(\"reset\"), this.resetControlBarUI_(), Ee(this) && this.trigger(\"playerreset\");\n }, e.resetControlBarUI_ = function () {\n this.resetProgressBar_(), this.resetPlaybackRate_(), this.resetVolumeBar_();\n }, e.resetProgressBar_ = function () {\n this.currentTime(0);\n var e = this.controlBar,\n t = e.durationDisplay,\n n = e.remainingTimeDisplay;\n t && t.updateContent(), n && n.updateContent();\n }, e.resetPlaybackRate_ = function () {\n this.playbackRate(this.defaultPlaybackRate()), this.handleTechRateChange_();\n }, e.resetVolumeBar_ = function () {\n this.volume(1), this.trigger(\"volumechange\");\n }, e.currentSources = function () {\n var e = this.currentSource(),\n t = [];\n return 0 !== Object.keys(e).length && t.push(e), this.cache_.sources || t;\n }, e.currentSource = function () {\n return this.cache_.source || {};\n }, e.currentSrc = function () {\n return this.currentSource() && this.currentSource().src || \"\";\n }, e.currentType = function () {\n return this.currentSource() && this.currentSource().type || \"\";\n }, e.preload = function (e) {\n return void 0 !== e ? (this.techCall_(\"setPreload\", e), void (this.options_.preload = e)) : this.techGet_(\"preload\");\n }, e.autoplay = function (e) {\n if (void 0 === e) return this.options_.autoplay || !1;\n var t;\n \"string\" == typeof e && /(any|play|muted)/.test(e) ? (this.options_.autoplay = e, this.manualAutoplay_(e), t = !1) : this.options_.autoplay = !!e, t = \"undefined\" == typeof t ? this.options_.autoplay : t, this.tech_ && this.techCall_(\"setAutoplay\", t);\n }, e.playsinline = function (e) {\n return void 0 !== e ? (this.techCall_(\"setPlaysinline\", e), this.options_.playsinline = e, this) : this.techGet_(\"playsinline\");\n }, e.loop = function (e) {\n return void 0 !== e ? (this.techCall_(\"setLoop\", e), void (this.options_.loop = e)) : this.techGet_(\"loop\");\n }, e.poster = function (e) {\n if (void 0 === e) return this.poster_;\n (e = e || \"\") !== this.poster_ && (this.poster_ = e, this.techCall_(\"setPoster\", e), this.isPosterFromTech_ = !1, this.trigger(\"posterchange\"));\n }, e.handleTechPosterChange_ = function () {\n if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) {\n var e = this.tech_.poster() || \"\";\n e !== this.poster_ && (this.poster_ = e, this.isPosterFromTech_ = !0, this.trigger(\"posterchange\"));\n }\n }, e.controls = function (e) {\n if (void 0 === e) return !!this.controls_;\n e = !!e, this.controls_ !== e && (this.controls_ = e, this.usingNativeControls() && this.techCall_(\"setControls\", e), this.controls_ ? (this.removeClass(\"vjs-controls-disabled\"), this.addClass(\"vjs-controls-enabled\"), this.trigger(\"controlsenabled\"), this.usingNativeControls() || this.addTechControlsListeners_()) : (this.removeClass(\"vjs-controls-enabled\"), this.addClass(\"vjs-controls-disabled\"), this.trigger(\"controlsdisabled\"), this.usingNativeControls() || this.removeTechControlsListeners_()));\n }, e.usingNativeControls = function (e) {\n if (void 0 === e) return !!this.usingNativeControls_;\n e = !!e, this.usingNativeControls_ !== e && (this.usingNativeControls_ = e, this.usingNativeControls_ ? (this.addClass(\"vjs-using-native-controls\"), this.trigger(\"usingnativecontrols\")) : (this.removeClass(\"vjs-using-native-controls\"), this.trigger(\"usingcustomcontrols\")));\n }, e.error = function (e) {\n if (void 0 === e) return this.error_ || null;\n\n if (this.options_.suppressNotSupportedError && e && e.message && e.message === this.localize(this.options_.notSupportedMessage)) {\n var _t5 = function _t5() {\n this.error(e);\n };\n\n return this.options_.suppressNotSupportedError = !1, this.any([\"click\", \"touchstart\"], _t5), void this.one(\"loadstart\", function () {\n this.off([\"click\", \"touchstart\"], _t5);\n });\n }\n\n if (null === e) return this.error_ = e, this.removeClass(\"vjs-error\"), void (this.errorDisplay && this.errorDisplay.close());\n this.error_ = new mt(e), this.addClass(\"vjs-error\"), f.error(\"(CODE:\" + this.error_.code + \" \" + mt.errorTypes[this.error_.code] + \")\", this.error_.message, this.error_), this.trigger(\"error\");\n }, e.reportUserActivity = function (e) {\n this.userActivity_ = !0;\n }, e.userActive = function (e) {\n if (void 0 === e) return this.userActive_;\n\n if ((e = !!e) !== this.userActive_) {\n if (this.userActive_ = e, this.userActive_) return this.userActivity_ = !0, this.removeClass(\"vjs-user-inactive\"), this.addClass(\"vjs-user-active\"), void this.trigger(\"useractive\");\n this.tech_ && this.tech_.one(\"mousemove\", function (e) {\n e.stopPropagation(), e.preventDefault();\n }), this.userActivity_ = !1, this.removeClass(\"vjs-user-active\"), this.addClass(\"vjs-user-inactive\"), this.trigger(\"userinactive\");\n }\n }, e.listenForUserActivity_ = function () {\n var t,\n n,\n r,\n i = pe(this, this.reportUserActivity);\n this.on(\"mousedown\", function () {\n i(), this.clearInterval(t), t = this.setInterval(i, 250);\n }), this.on(\"mousemove\", function (e) {\n e.screenX === n && e.screenY === r || (n = e.screenX, r = e.screenY, i());\n }), this.on(\"mouseup\", function (e) {\n i(), this.clearInterval(t);\n });\n var o,\n e = this.getChild(\"controlBar\");\n !e || qe || Xe || (e.on(\"mouseenter\", function (e) {\n this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout, this.player().options_.inactivityTimeout = 0;\n }), e.on(\"mouseleave\", function (e) {\n this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout;\n })), this.on(\"keydown\", i), this.on(\"keyup\", i), this.setInterval(function () {\n if (this.userActivity_) {\n this.userActivity_ = !1, this.userActive(!0), this.clearTimeout(o);\n var e = this.options_.inactivityTimeout;\n e <= 0 || (o = this.setTimeout(function () {\n this.userActivity_ || this.userActive(!1);\n }, e));\n }\n }, 250);\n }, e.playbackRate = function (e) {\n if (void 0 === e) return this.tech_ && this.tech_.featuresPlaybackRate ? this.cache_.lastPlaybackRate || this.techGet_(\"playbackRate\") : 1;\n this.techCall_(\"setPlaybackRate\", e);\n }, e.defaultPlaybackRate = function (e) {\n return void 0 !== e ? this.techCall_(\"setDefaultPlaybackRate\", e) : this.tech_ && this.tech_.featuresPlaybackRate ? this.techGet_(\"defaultPlaybackRate\") : 1;\n }, e.isAudio = function (e) {\n if (void 0 === e) return !!this.isAudio_;\n this.isAudio_ = !!e;\n }, e.addTextTrack = function (e, t, n) {\n if (this.tech_) return this.tech_.addTextTrack(e, t, n);\n }, e.addRemoteTextTrack = function (e, t) {\n if (this.tech_) return this.tech_.addRemoteTextTrack(e, t);\n }, e.removeRemoteTextTrack = function (e) {\n void 0 === e && (e = {});\n var t = e.track;\n if (t = t || e, this.tech_) return this.tech_.removeRemoteTextTrack(t);\n }, e.getVideoPlaybackQuality = function () {\n return this.techGet_(\"getVideoPlaybackQuality\");\n }, e.videoWidth = function () {\n return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n }, e.videoHeight = function () {\n return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n }, e.language = function (e) {\n if (void 0 === e) return this.language_;\n this.language_ = String(e).toLowerCase();\n }, e.languages = function () {\n return Ie(c.prototype.options_.languages, this.languages_);\n }, e.toJSON = function () {\n var e = Ie(this.options_),\n t = e.tracks;\n e.tracks = [];\n\n for (var n = 0; n < t.length; n++) {\n var r = t[n];\n (r = Ie(r)).player = void 0, e.tracks[n] = r;\n }\n\n return e;\n }, e.createModal = function (e, t) {\n var n = this;\n (t = t || {}).content = e || \"\";\n var r = new jt(this, t);\n return this.addChild(r), r.on(\"dispose\", function () {\n n.removeChild(r);\n }), r.open(), r;\n }, e.updateCurrentBreakpoint_ = function () {\n if (this.responsive()) for (var e = this.currentBreakpoint(), t = this.currentWidth(), n = 0; n < wo.length; n++) {\n var r = wo[n];\n\n if (t <= this.breakpoints_[r]) {\n if (e === r) return;\n e && this.removeClass(Po[e]), this.addClass(Po[r]), this.breakpoint_ = r;\n break;\n }\n }\n }, e.removeCurrentBreakpoint_ = function () {\n var e = this.currentBreakpointClass();\n this.breakpoint_ = \"\", e && this.removeClass(e);\n }, e.breakpoints = function (e) {\n return void 0 === e || (this.breakpoint_ = \"\", this.breakpoints_ = y({}, xo, e), this.updateCurrentBreakpoint_()), y(this.breakpoints_);\n }, e.responsive = function (e) {\n return void 0 === e ? this.responsive_ : (e = Boolean(e)) !== this.responsive_ ? ((this.responsive_ = e) ? (this.on(\"playerresize\", this.updateCurrentBreakpoint_), this.updateCurrentBreakpoint_()) : (this.off(\"playerresize\", this.updateCurrentBreakpoint_), this.removeCurrentBreakpoint_()), e) : void 0;\n }, e.currentBreakpoint = function () {\n return this.breakpoint_;\n }, e.currentBreakpointClass = function () {\n return Po[this.breakpoint_] || \"\";\n }, e.loadMedia = function (e, t) {\n var n = this;\n\n if (e && \"object\" == _typeof(e)) {\n this.reset(), this.cache_.media = Ie(e);\n var r = this.cache_.media,\n i = r.artwork,\n o = r.poster,\n s = r.src,\n a = r.textTracks;\n !i && o && (this.cache_.media.artwork = [{\n src: o,\n type: $r(o)\n }]), s && this.src(s), o && this.poster(o), Array.isArray(a) && a.forEach(function (e) {\n return n.addRemoteTextTrack(e, !1);\n }), this.ready(t);\n }\n }, e.getMedia = function () {\n if (this.cache_.media) return Ie(this.cache_.media);\n var e = this.poster(),\n t = {\n src: this.currentSources(),\n textTracks: Array.prototype.map.call(this.remoteTextTracks(), function (e) {\n return {\n kind: e.kind,\n label: e.label,\n language: e.language,\n src: e.src\n };\n })\n };\n return e && (t.poster = e, t.artwork = [{\n src: t.poster,\n type: $r(t.poster)\n }]), t;\n }, c.getTagSettings = function (e) {\n var t = {\n sources: [],\n tracks: []\n },\n n = x(e),\n r = n[\"data-setup\"];\n\n if (C(e, \"vjs-fill\") && (n.fill = !0), C(e, \"vjs-fluid\") && (n.fluid = !0), null !== r) {\n var i = bt(r || \"{}\"),\n o = i[0],\n s = i[1];\n o && f.error(o), y(n, s);\n }\n\n if (y(t, n), e.hasChildNodes()) for (var a = e.childNodes, l = 0, c = a.length; l < c; l++) {\n var u = a[l],\n h = u.nodeName.toLowerCase();\n \"source\" === h ? t.sources.push(x(u)) : \"track\" === h && t.tracks.push(x(u));\n }\n return t;\n }, e.flexNotSupported_ = function () {\n var e = d.createElement(\"i\");\n return !(\"flexBasis\" in e.style || \"webkitFlexBasis\" in e.style || \"mozFlexBasis\" in e.style || \"msFlexBasis\" in e.style || \"msFlexOrder\" in e.style);\n }, c;\n }(Oe);\n\n Pr.names.forEach(function (e) {\n var t = Pr[e];\n\n jo.prototype[t.getterName] = function () {\n return this.tech_ ? this.tech_[t.getterName]() : (this[t.privateName] = this[t.privateName] || new t.ListClass(), this[t.privateName]);\n };\n }), jo.players = {};\n var Ao = h.navigator;\n jo.prototype.options_ = {\n techOrder: jr.defaultTechOrder_,\n html5: {},\n flash: {},\n inactivityTimeout: 2e3,\n playbackRates: [],\n liveui: !1,\n children: [\"mediaLoader\", \"posterImage\", \"textTrackDisplay\", \"loadingSpinner\", \"bigPlayButton\", \"liveTracker\", \"controlBar\", \"errorDisplay\", \"textTrackSettings\", \"resizeManager\"],\n language: Ao && (Ao.languages && Ao.languages[0] || Ao.userLanguage || Ao.language) || \"en\",\n languages: {},\n notSupportedMessage: \"No compatible source was found for this media.\",\n fullscreen: {\n options: {\n navigationUI: \"hide\"\n }\n },\n breakpoints: {},\n responsive: !1\n }, [\"ended\", \"seeking\", \"seekable\", \"networkState\", \"readyState\"].forEach(function (e) {\n jo.prototype[e] = function () {\n return this.techGet_(e);\n };\n }), Eo.forEach(function (e) {\n jo.prototype[\"handleTech\" + Ae(e) + \"_\"] = function () {\n return this.trigger(e);\n };\n }), Oe.registerComponent(\"Player\", jo);\n\n function Io(e) {\n return Ro.hasOwnProperty(e);\n }\n\n function Oo(e) {\n return Io(e) ? Ro[e] : void 0;\n }\n\n function Do(e, t) {\n e[Fo] = e[Fo] || {}, e[Fo][t] = !0;\n }\n\n function Mo(e, t, n) {\n var r = (n ? \"before\" : \"\") + \"pluginsetup\";\n e.trigger(r, t), e.trigger(r + \":\" + t.name, t);\n }\n\n function No(i, o) {\n return o.prototype.name = i, function () {\n Mo(this, {\n name: i,\n plugin: o,\n instance: null\n }, !0);\n\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) {\n t[n] = arguments[n];\n }\n\n var r = Ne(o, [this].concat(t));\n return this[i] = function () {\n return r;\n }, Mo(this, r.getEventHash()), r;\n };\n }\n\n var Lo = \"plugin\",\n Fo = \"activePlugins_\",\n Ro = {},\n Bo = function () {\n function n(e) {\n if (this.constructor === n) throw new Error(\"Plugin must be sub-classed; not directly instantiated.\");\n this.player = e, we(this), delete this.trigger, xe(this, this.constructor.defaultState), Do(e, this.name), this.dispose = pe(this, this.dispose), e.on(\"dispose\", this.dispose);\n }\n\n var e = n.prototype;\n return e.version = function () {\n return this.constructor.VERSION;\n }, e.getEventHash = function (e) {\n return void 0 === e && (e = {}), e.name = this.name, e.plugin = this.constructor, e.instance = this, e;\n }, e.trigger = function (e, t) {\n return void 0 === t && (t = {}), ue(this.eventBusEl_, e, this.getEventHash(t));\n }, e.handleStateChanged = function (e) {}, e.dispose = function () {\n var e = this.name,\n t = this.player;\n this.trigger(\"dispose\"), this.off(), t.off(\"dispose\", this.dispose), t[Fo][e] = !1, this.player = this.state = null, t[e] = No(e, Ro[e]);\n }, n.isBasic = function (e) {\n var t = \"string\" == typeof e ? Oo(e) : e;\n return \"function\" == typeof t && !n.prototype.isPrototypeOf(t.prototype);\n }, n.registerPlugin = function (e, t) {\n if (\"string\" != typeof e) throw new Error('Illegal plugin name, \"' + e + '\", must be a string, was ' + _typeof(e) + \".\");\n if (Io(e)) f.warn('A plugin named \"' + e + '\" already exists. You may want to avoid re-registering plugins!');else if (jo.prototype.hasOwnProperty(e)) throw new Error('Illegal plugin name, \"' + e + '\", cannot share a name with an existing player method!');\n if (\"function\" != typeof t) throw new Error('Illegal plugin for \"' + e + '\", must be a function, was ' + _typeof(t) + \".\");\n return Ro[e] = t, e !== Lo && (n.isBasic(t) ? jo.prototype[e] = function (t, n) {\n function r() {\n Mo(this, {\n name: t,\n plugin: n,\n instance: null\n }, !0);\n var e = n.apply(this, arguments);\n return Do(this, t), Mo(this, {\n name: t,\n plugin: n,\n instance: e\n }), e;\n }\n\n return Object.keys(n).forEach(function (e) {\n r[e] = n[e];\n }), r;\n }(e, t) : jo.prototype[e] = No(e, t)), t;\n }, n.deregisterPlugin = function (e) {\n if (e === Lo) throw new Error(\"Cannot de-register base plugin.\");\n Io(e) && (delete Ro[e], delete jo.prototype[e]);\n }, n.getPlugins = function (e) {\n var n;\n return void 0 === e && (e = Object.keys(Ro)), e.forEach(function (e) {\n var t = Oo(e);\n t && ((n = n || {})[e] = t);\n }), n;\n }, n.getPluginVersion = function (e) {\n var t = Oo(e);\n return t && t.VERSION || \"\";\n }, n;\n }();\n\n Bo.getPlugin = Oo, Bo.BASE_PLUGIN_NAME = Lo, Bo.registerPlugin(Lo, Bo), jo.prototype.usingPlugin = function (e) {\n return !!this[Fo] && !0 === this[Fo][e];\n }, jo.prototype.hasPlugin = function (e) {\n return !!Io(e);\n };\n\n var $o = function $o(e) {\n return 0 === e.indexOf(\"#\") ? e.slice(1) : e;\n };\n\n function Ho(e, n, t) {\n var r = Ho.getPlayer(e);\n if (r) return n && f.warn('Player \"' + e + '\" is already initialised. Options will not be applied.'), t && r.ready(t), r;\n var i = \"string\" == typeof e ? W(\"#\" + $o(e)) : e;\n if (!g(i)) throw new TypeError(\"The element or ID supplied is not valid. (videojs)\");\n i.ownerDocument.defaultView && i.ownerDocument.body.contains(i) || f.warn(\"The element supplied is not included in the DOM\"), n = n || {}, Ho.hooks(\"beforesetup\").forEach(function (e) {\n var t = e(i, Ie(n));\n s(t) && !Array.isArray(t) ? n = Ie(n, t) : f.error(\"please return an object in beforesetup hooks\");\n });\n var o = Oe.getComponent(\"Player\");\n return r = new o(i, n, t), Ho.hooks(\"setup\").forEach(function (e) {\n return e(r);\n }), r;\n }\n\n if (Ho.hooks_ = {}, Ho.hooks = function (e, t) {\n return Ho.hooks_[e] = Ho.hooks_[e] || [], t && (Ho.hooks_[e] = Ho.hooks_[e].concat(t)), Ho.hooks_[e];\n }, Ho.hook = function (e, t) {\n Ho.hooks(e, t);\n }, Ho.hookOnce = function (n, e) {\n Ho.hooks(n, [].concat(e).map(function (t) {\n return function e() {\n return Ho.removeHook(n, e), t.apply(void 0, arguments);\n };\n }));\n }, Ho.removeHook = function (e, t) {\n var n = Ho.hooks(e).indexOf(t);\n return !(n <= -1) && (Ho.hooks_[e] = Ho.hooks_[e].slice(), Ho.hooks_[e].splice(n, 1), !0);\n }, !0 !== h.VIDEOJS_NO_DYNAMIC_STYLE && u()) {\n var Vo = W(\".vjs-styles-defaults\");\n\n if (!Vo) {\n Vo = Q(\"vjs-styles-defaults\");\n var Uo = W(\"head\");\n Uo && Uo.insertBefore(Vo, Uo.firstChild), J(Vo, \"\\n .video-js {\\n width: 300px;\\n height: 150px;\\n }\\n\\n .vjs-fluid {\\n padding-top: 56.25%\\n }\\n \");\n }\n }\n\n return X(1, Ho), Ho.VERSION = p, Ho.options = jo.prototype.options_, Ho.getPlayers = function () {\n return jo.players;\n }, Ho.getPlayer = function (e) {\n var t,\n n = jo.players;\n\n if (\"string\" == typeof e) {\n var r = $o(e),\n i = n[r];\n if (i) return i;\n t = W(\"#\" + r);\n } else t = e;\n\n if (g(t)) {\n var o = t,\n s = o.player,\n a = o.playerId;\n if (s || n[a]) return s || n[a];\n }\n }, Ho.getAllPlayers = function () {\n return Object.keys(jo.players).map(function (e) {\n return jo.players[e];\n }).filter(Boolean);\n }, Ho.players = jo.players, Ho.getComponent = Oe.getComponent, Ho.registerComponent = function (e, t) {\n jr.isTech(t) && f.warn(\"The \" + e + \" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)\"), Oe.registerComponent.call(Oe, e, t);\n }, Ho.getTech = jr.getTech, Ho.registerTech = jr.registerTech, Ho.use = function (e, t) {\n Ar[e] = Ar[e] || [], Ar[e].push(t);\n }, Object.defineProperty(Ho, \"middleware\", {\n value: {},\n writeable: !1,\n enumerable: !0\n }), Object.defineProperty(Ho.middleware, \"TERMINATOR\", {\n value: Or,\n writeable: !1,\n enumerable: !0\n }), Ho.browser = at, Ho.TOUCH_ENABLED = st, Ho.extend = function (e, t) {\n void 0 === t && (t = {});\n\n var n = function n() {\n e.apply(this, arguments);\n },\n r = {};\n\n for (var i in \"object\" == _typeof(t) ? (t.constructor !== Object.prototype.constructor && (n = t.constructor), r = t) : \"function\" == typeof t && (n = t), function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(t));\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), t && (e.super_ = t);\n }(n, e), r) {\n r.hasOwnProperty(i) && (n.prototype[i] = r[i]);\n }\n\n return n;\n }, Ho.mergeOptions = Ie, Ho.bind = pe, Ho.registerPlugin = Bo.registerPlugin, Ho.deregisterPlugin = Bo.deregisterPlugin, Ho.plugin = function (e, t) {\n return f.warn(\"videojs.plugin() is deprecated; use videojs.registerPlugin() instead\"), Bo.registerPlugin(e, t);\n }, Ho.getPlugins = Bo.getPlugins, Ho.getPlugin = Bo.getPlugin, Ho.getPluginVersion = Bo.getPluginVersion, Ho.addLanguage = function (e, t) {\n var n;\n return e = (\"\" + e).toLowerCase(), Ho.options.languages = Ie(Ho.options.languages, ((n = {})[e] = t, n)), Ho.options.languages[e];\n }, Ho.log = f, Ho.createLogger = v, Ho.createTimeRange = Ho.createTimeRanges = ut, Ho.formatTime = ii, Ho.setFormatTime = function (e) {\n ri = e;\n }, Ho.resetFormatTime = function () {\n ri = ni;\n }, Ho.parseUrl = Mt, Ho.isCrossOrigin = Ft, Ho.EventTarget = ve, Ho.on = le, Ho.one = he, Ho.off = ce, Ho.trigger = ue, Ho.xhr = yr, Ho.TextTrack = Tr, Ho.AudioTrack = kr, Ho.VideoTrack = Cr, [\"isEl\", \"isTextNode\", \"createEl\", \"hasClass\", \"addClass\", \"removeClass\", \"toggleClass\", \"setAttributes\", \"getAttributes\", \"emptyEl\", \"appendContent\", \"insertContent\"].forEach(function (e) {\n Ho[e] = function () {\n return f.warn(\"videojs.\" + e + \"() is deprecated; use videojs.dom.\" + e + \"() instead\"), z[e].apply(null, arguments);\n };\n }), Ho.computedStyle = r, Ho.dom = z, Ho.url = Gt, Ho;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL2Rpc3QvYWx0L3ZpZGVvLmNvcmUubm92dHQubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlby5qcy9kaXN0L2FsdC92aWRlby5jb3JlLm5vdnR0Lm1pbi5qcz9lZmQ1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIFZpZGVvLmpzIDcuNi42IDxodHRwOi8vdmlkZW9qcy5jb20vPlxuICogQ29weXJpZ2h0IEJyaWdodGNvdmUsIEluYy4gPGh0dHBzOi8vd3d3LmJyaWdodGNvdmUuY29tLz5cbiAqIEF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMFxuICogPGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL3ZpZGVvLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0U+XG4gKlxuICogSW5jbHVkZXMgdnR0LmpzIDxodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS92dHQuanM+XG4gKiBBdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjBcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS92dHQuanMvYmxvYi9tYXN0ZXIvTElDRU5TRT5cbiAqL1xuIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZ2xvYmFsL3dpbmRvd1wiKSxyZXF1aXJlKFwiZ2xvYmFsL2RvY3VtZW50XCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImdsb2JhbC93aW5kb3dcIixcImdsb2JhbC9kb2N1bWVudFwiXSx0KTooZT1lfHxzZWxmKS52aWRlb2pzPXQoZS53aW5kb3csZS5kb2N1bWVudCl9KHRoaXMsZnVuY3Rpb24oaCxkKXtoPWgmJmguaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpP2guZGVmYXVsdDpoLGQ9ZCYmZC5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIik/ZC5kZWZhdWx0OmQ7dmFyIHA9XCI3LjYuNlwiLGw9W10sZT1mdW5jdGlvbihzLGEpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9YS5sZXZlbHNbdF0saT1uZXcgUmVnRXhwKFwiXihcIityK1wiKSRcIik7aWYoXCJsb2dcIiE9PWUmJm4udW5zaGlmdChlLnRvVXBwZXJDYXNlKCkrXCI6XCIpLG4udW5zaGlmdChzK1wiOlwiKSxsJiZsLnB1c2goW10uY29uY2F0KG4pKSxoLmNvbnNvbGUpe3ZhciBvPWguY29uc29sZVtlXTtvfHxcImRlYnVnXCIhPT1lfHwobz1oLmNvbnNvbGUuaW5mb3x8aC5jb25zb2xlLmxvZyksbyYmciYmaS50ZXN0KGUpJiZvW0FycmF5LmlzQXJyYXkobik/XCJhcHBseVwiOlwiY2FsbFwiXShoLmNvbnNvbGUsbil9fX07dmFyIGY9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiByKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07aShcImxvZ1wiLG8sdCl9dmFyIGksbz1cImluZm9cIjtyZXR1cm4gaT1lKG4sciksci5jcmVhdGVMb2dnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobitcIjogXCIrZSl9LHIubGV2ZWxzPXthbGw6XCJkZWJ1Z3xsb2d8d2FybnxlcnJvclwiLG9mZjpcIlwiLGRlYnVnOlwiZGVidWd8bG9nfHdhcm58ZXJyb3JcIixpbmZvOlwibG9nfHdhcm58ZXJyb3JcIix3YXJuOlwid2FybnxlcnJvclwiLGVycm9yOlwiZXJyb3JcIixERUZBVUxUOm99LHIubGV2ZWw9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCFyLmxldmVscy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoJ1wiJytlKydcIiBpbiBub3QgYSB2YWxpZCBsb2cgbGV2ZWwnKTtvPWV9cmV0dXJuIG99LChyLmhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gbD9bXS5jb25jYXQobCk6W119KS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuKGx8fFtdKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSZWdFeHAoXCIuKlwiK3QrXCIuKlwiKS50ZXN0KGVbMF0pfSl9LHIuaGlzdG9yeS5jbGVhcj1mdW5jdGlvbigpe2wmJihsLmxlbmd0aD0wKX0sci5oaXN0b3J5LmRpc2FibGU9ZnVuY3Rpb24oKXtudWxsIT09bCYmKGwubGVuZ3RoPTAsbD1udWxsKX0sci5oaXN0b3J5LmVuYWJsZT1mdW5jdGlvbigpe251bGw9PT1sJiYobD1bXSl9LHIuZXJyb3I9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gaShcImVycm9yXCIsbyx0KX0sci53YXJuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGkoXCJ3YXJuXCIsbyx0KX0sci5kZWJ1Zz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBpKFwiZGVidWdcIixvLHQpfSxyfShcIlZJREVPSlNcIiksdj1mLmNyZWF0ZUxvZ2dlcix0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsbz1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKT9PYmplY3Qua2V5cyhlKTpbXX07ZnVuY3Rpb24gaSh0LG4pe28odCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbih0W2VdLGUpfSl9ZnVuY3Rpb24geShuKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheSgxPGU/ZS0xOjApLHI9MTtyPGU7cisrKXRbci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIE9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5hcHBseShPYmplY3QsW25dLmNvbmNhdCh0KSk6KHQuZm9yRWFjaChmdW5jdGlvbihlKXtlJiZpKGUsZnVuY3Rpb24oZSx0KXtuW3RdPWV9KX0pLG4pfWZ1bmN0aW9uIHMoZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX1mdW5jdGlvbiBhKGUpe3JldHVybiBzKGUpJiZcIltvYmplY3QgT2JqZWN0XVwiPT09dC5jYWxsKGUpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fWZ1bmN0aW9uIHIoZSx0KXtpZighZXx8IXQpcmV0dXJuXCJcIjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBoLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuXCJcIjt2YXIgbj1oLmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIG4/bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdOlwiXCJ9ZnVuY3Rpb24gYyhlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmL1xcUy8udGVzdChlKX1mdW5jdGlvbiBuKGUpe2lmKC9cXHMvLnRlc3QoZSkpdGhyb3cgbmV3IEVycm9yKFwiY2xhc3MgaGFzIGlsbGVnYWwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXCIpfWZ1bmN0aW9uIHUoKXtyZXR1cm4gZD09PWguZG9jdW1lbnR9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gcyhlKSYmMT09PWUubm9kZVR5cGV9ZnVuY3Rpb24gbSgpe3RyeXtyZXR1cm4gaC5wYXJlbnQhPT1oLnNlbGZ9Y2F0Y2goZSl7cmV0dXJuITB9fWZ1bmN0aW9uIF8ocil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIWMoZSkpcmV0dXJuIGRbcl0obnVsbCk7Yyh0KSYmKHQ9ZC5xdWVyeVNlbGVjdG9yKHQpKTt2YXIgbj1nKHQpP3Q6ZDtyZXR1cm4gbltyXSYmbltyXShlKX19ZnVuY3Rpb24gYihlLG4sdCxyKXt2b2lkIDA9PT1lJiYoZT1cImRpdlwiKSx2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09dCYmKHQ9e30pO3ZhciBpPWQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uW2VdOy0xIT09ZS5pbmRleE9mKFwiYXJpYS1cIil8fFwicm9sZVwiPT09ZXx8XCJ0eXBlXCI9PT1lPyhmLndhcm4oXCJTZXR0aW5nIGF0dHJpYnV0ZXMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGVFbCgpXFxuaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHRoZSB0aGlyZCBhcmd1bWVudCBpbnN0ZWFkLlxcbmNyZWF0ZUVsKHR5cGUsIHByb3BlcnRpZXMsIGF0dHJpYnV0ZXMpLiBBdHRlbXB0aW5nIHRvIHNldCBcIitlK1wiIHRvIFwiK3QrXCIuXCIpLGkuc2V0QXR0cmlidXRlKGUsdCkpOlwidGV4dENvbnRlbnRcIj09PWU/VChpLHQpOmlbZV09dH0pLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7aS5zZXRBdHRyaWJ1dGUoZSx0W2VdKX0pLHImJiQoaSxyKSxpfWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgZS50ZXh0Q29udGVudD9lLmlubmVyVGV4dD10OmUudGV4dENvbnRlbnQ9dCxlfWZ1bmN0aW9uIGsoZSx0KXt0LmZpcnN0Q2hpbGQ/dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpOnQuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBuKHQpLGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LmNvbnRhaW5zKHQpOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIrZStcIigkfFxcXFxzKVwiKX0odCkudGVzdChlLmNsYXNzTmFtZSl9ZnVuY3Rpb24gRShlLHQpe3JldHVybiBlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5hZGQodCk6QyhlLHQpfHwoZS5jbGFzc05hbWU9KGUuY2xhc3NOYW1lK1wiIFwiK3QpLnRyaW0oKSksZX1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LnJlbW92ZSh0KToobih0KSxlLmNsYXNzTmFtZT1lLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KS5qb2luKFwiIFwiKSksZX1mdW5jdGlvbiB3KGUsdCxuKXt2YXIgcj1DKGUsdCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihlLHQpKSxcImJvb2xlYW5cIiE9dHlwZW9mIG4mJihuPSFyKSxuIT09cilyZXR1cm4gbj9FKGUsdCk6UyhlLHQpLGV9ZnVuY3Rpb24gUChuLHIpe09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtudWxsPT09dHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fCExPT09dD9uLnJlbW92ZUF0dHJpYnV0ZShlKTpuLnNldEF0dHJpYnV0ZShlLCEwPT09dD9cIlwiOnQpfSl9ZnVuY3Rpb24geChlKXt2YXIgdD17fSxuPVwiLGF1dG9wbGF5LGNvbnRyb2xzLHBsYXlzaW5saW5lLGxvb3AsbXV0ZWQsZGVmYXVsdCxkZWZhdWx0TXV0ZWQsXCI7aWYoZSYmZS5hdHRyaWJ1dGVzJiYwPGUuYXR0cmlidXRlcy5sZW5ndGgpZm9yKHZhciByPWUuYXR0cmlidXRlcyxpPXIubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBvPXJbaV0ubmFtZSxzPXJbaV0udmFsdWU7XCJib29sZWFuXCIhPXR5cGVvZiBlW29dJiYtMT09PW4uaW5kZXhPZihcIixcIitvK1wiLFwiKXx8KHM9bnVsbCE9PXMpLHRbb109c31yZXR1cm4gdH1mdW5jdGlvbiBqKGUsdCl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQpfWZ1bmN0aW9uIEEoZSx0LG4pe2Uuc2V0QXR0cmlidXRlKHQsbil9ZnVuY3Rpb24gSShlLHQpe2UucmVtb3ZlQXR0cmlidXRlKHQpfWZ1bmN0aW9uIE8oKXtkLmJvZHkuZm9jdXMoKSxkLm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX19ZnVuY3Rpb24gRCgpe2Qub25zZWxlY3RzdGFydD1mdW5jdGlvbigpe3JldHVybiEwfX1mdW5jdGlvbiBNKGUpe2lmKGUmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiZlLnBhcmVudE5vZGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj17fTtyZXR1cm5bXCJib3R0b21cIixcImhlaWdodFwiLFwibGVmdFwiLFwicmlnaHRcIixcInRvcFwiLFwid2lkdGhcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2b2lkIDAhPT10W2VdJiYobltlXT10W2VdKX0pLG4uaGVpZ2h0fHwobi5oZWlnaHQ9cGFyc2VGbG9hdChyKGUsXCJoZWlnaHRcIikpKSxuLndpZHRofHwobi53aWR0aD1wYXJzZUZsb2F0KHIoZSxcIndpZHRoXCIpKSksbn19ZnVuY3Rpb24gTihlKXt2YXIgdDtpZihlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmZS5wYXJlbnROb2RlJiYodD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwhdClyZXR1cm57bGVmdDowLHRvcDowfTt2YXIgbj1kLmRvY3VtZW50RWxlbWVudCxyPWQuYm9keSxpPW4uY2xpZW50TGVmdHx8ci5jbGllbnRMZWZ0fHwwLG89aC5wYWdlWE9mZnNldHx8ci5zY3JvbGxMZWZ0LHM9dC5sZWZ0K28taSxhPW4uY2xpZW50VG9wfHxyLmNsaWVudFRvcHx8MCxsPWgucGFnZVlPZmZzZXR8fHIuc2Nyb2xsVG9wLGM9dC50b3ArbC1hO3JldHVybntsZWZ0Ok1hdGgucm91bmQocyksdG9wOk1hdGgucm91bmQoYyl9fWZ1bmN0aW9uIEwoZSx0KXt2YXIgbj17fSxyPU4oZSksaT1lLm9mZnNldFdpZHRoLG89ZS5vZmZzZXRIZWlnaHQscz1yLnRvcCxhPXIubGVmdCxsPXQucGFnZVksYz10LnBhZ2VYO3JldHVybiB0LmNoYW5nZWRUb3VjaGVzJiYoYz10LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLGw9dC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSksbi55PU1hdGgubWF4KDAsTWF0aC5taW4oMSwocy1sK28pL28pKSxuLng9TWF0aC5tYXgoMCxNYXRoLm1pbigxLChjLWEpL2kpKSxufWZ1bmN0aW9uIEYoZSl7cmV0dXJuIHMoZSkmJjM9PT1lLm5vZGVUeXBlfWZ1bmN0aW9uIFIoZSl7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtyZXR1cm4gZX1mdW5jdGlvbiBCKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUoKSksKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKCkpLGcoZSl8fEYoZSk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZSYmL1xcUy8udGVzdChlKT9kLmNyZWF0ZVRleHROb2RlKGUpOnZvaWQgMH0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gQihlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGVuZENoaWxkKGUpfSksdH1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuICQoUihlKSx0KX1mdW5jdGlvbiBWKGUpe3JldHVybiB2b2lkIDA9PT1lLmJ1dHRvbiYmdm9pZCAwPT09ZS5idXR0b25zfHwoMD09PWUuYnV0dG9uJiZ2b2lkIDA9PT1lLmJ1dHRvbnN8fChcIm1vdXNldXBcIj09PWUudHlwZSYmMD09PWUuYnV0dG9uJiYwPT09ZS5idXR0b25zfHwwPT09ZS5idXR0b24mJjE9PT1lLmJ1dHRvbnMpKX12YXIgVSxXPV8oXCJxdWVyeVNlbGVjdG9yXCIpLEs9XyhcInF1ZXJ5U2VsZWN0b3JBbGxcIiksej1PYmplY3QuZnJlZXplKHtpc1JlYWw6dSxpc0VsOmcsaXNJbkZyYW1lOm0sY3JlYXRlRWw6Yix0ZXh0Q29udGVudDpULHByZXBlbmRUbzprLGhhc0NsYXNzOkMsYWRkQ2xhc3M6RSxyZW1vdmVDbGFzczpTLHRvZ2dsZUNsYXNzOncsc2V0QXR0cmlidXRlczpQLGdldEF0dHJpYnV0ZXM6eCxnZXRBdHRyaWJ1dGU6aixzZXRBdHRyaWJ1dGU6QSxyZW1vdmVBdHRyaWJ1dGU6SSxibG9ja1RleHRTZWxlY3Rpb246Tyx1bmJsb2NrVGV4dFNlbGVjdGlvbjpELGdldEJvdW5kaW5nQ2xpZW50UmVjdDpNLGZpbmRQb3NpdGlvbjpOLGdldFBvaW50ZXJQb3NpdGlvbjpMLGlzVGV4dE5vZGU6RixlbXB0eUVsOlIsbm9ybWFsaXplQ29udGVudDpCLGFwcGVuZENvbnRlbnQ6JCxpbnNlcnRDb250ZW50OkgsaXNTaW5nbGVMZWZ0Q2xpY2s6ViwkOlcsJCQ6S30pLHE9ITEsRz1mdW5jdGlvbigpe2lmKHUoKSYmITEhPT1VLm9wdGlvbnMuYXV0b1NldHVwKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidmlkZW9cIikpLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImF1ZGlvXCIpKSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ2aWRlby1qc1wiKSkscj1lLmNvbmNhdCh0LG4pO2lmKHImJjA8ci5sZW5ndGgpZm9yKHZhciBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKXt2YXIgcz1yW2ldO2lmKCFzfHwhcy5nZXRBdHRyaWJ1dGUpe1goMSk7YnJlYWt9dm9pZCAwPT09cy5wbGF5ZXImJm51bGwhPT1zLmdldEF0dHJpYnV0ZShcImRhdGEtc2V0dXBcIikmJlUocyl9ZWxzZSBxfHxYKDEpfX07ZnVuY3Rpb24gWChlLHQpe3QmJihVPXQpLGguc2V0VGltZW91dChHLGUpfWZ1bmN0aW9uIFkoKXtxPSEwLGgucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixZKX11KCkmJihcImNvbXBsZXRlXCI9PT1kLnJlYWR5U3RhdGU/WSgpOmguYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixZKSk7ZnVuY3Rpb24gUShlKXt2YXIgdD1kLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gdC5jbGFzc05hbWU9ZSx0fWZ1bmN0aW9uIEooZSx0KXtlLnN0eWxlU2hlZXQ/ZS5zdHlsZVNoZWV0LmNzc1RleHQ9dDplLnRleHRDb250ZW50PXR9dmFyIFosZWU9MztmdW5jdGlvbiB0ZSgpe3JldHVybiBlZSsrfWguV2Vha01hcHx8KFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy52ZGF0YT1cInZkYXRhXCIrTWF0aC5mbG9vcihoLnBlcmZvcm1hbmNlJiZoLnBlcmZvcm1hbmNlLm5vdygpfHxEYXRlLm5vdygpKSx0aGlzLmRhdGE9e319dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0aGlzLnZkYXRhXXx8dGUoKTtyZXR1cm4gZVt0aGlzLnZkYXRhXXx8KGVbdGhpcy52ZGF0YV09biksdGhpcy5kYXRhW25dPXQsdGhpc30sdC5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLnZkYXRhXTtpZih0KXJldHVybiB0aGlzLmRhdGFbdF07ZihcIldlIGhhdmUgbm8gZGF0YSBmb3IgdGhpcyBlbGVtZW50XCIsZSl9LHQuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBlW3RoaXMudmRhdGFdaW4gdGhpcy5kYXRhfSx0LmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMudmRhdGFdO3QmJihkZWxldGUgdGhpcy5kYXRhW3RdLGRlbGV0ZSBlW3RoaXMudmRhdGFdKX0sZX0oKSk7dmFyIG5lPWguV2Vha01hcD9uZXcgV2Vha01hcDpuZXcgWjtmdW5jdGlvbiByZShlLHQpe2lmKG5lLmhhcyhlKSl7dmFyIG49bmUuZ2V0KGUpOzA9PT1uLmhhbmRsZXJzW3RdLmxlbmd0aCYmKGRlbGV0ZSBuLmhhbmRsZXJzW3RdLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLmRpc3BhdGNoZXIsITEpOmUuZGV0YWNoRXZlbnQmJmUuZGV0YWNoRXZlbnQoXCJvblwiK3Qsbi5kaXNwYXRjaGVyKSksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobi5oYW5kbGVycykubGVuZ3RoPD0wJiYoZGVsZXRlIG4uaGFuZGxlcnMsZGVsZXRlIG4uZGlzcGF0Y2hlcixkZWxldGUgbi5kaXNhYmxlZCksMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmxlbmd0aCYmbmUuZGVsZXRlKGUpfX1mdW5jdGlvbiBpZSh0LG4sZSxyKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7dChuLGUscil9KX1mdW5jdGlvbiBvZShlKXtmdW5jdGlvbiB0KCl7cmV0dXJuITB9ZnVuY3Rpb24gbigpe3JldHVybiExfWlmKCFlfHwhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCl7dmFyIHI9ZXx8aC5ldmVudDtmb3IodmFyIGkgaW4gZT17fSxyKVwibGF5ZXJYXCIhPT1pJiZcImxheWVyWVwiIT09aSYmXCJrZXlMb2NhdGlvblwiIT09aSYmXCJ3ZWJraXRNb3ZlbWVudFhcIiE9PWkmJlwid2Via2l0TW92ZW1lbnRZXCIhPT1pJiYoXCJyZXR1cm5WYWx1ZVwiPT09aSYmci5wcmV2ZW50RGVmYXVsdHx8KGVbaV09cltpXSkpO2lmKGUudGFyZ2V0fHwoZS50YXJnZXQ9ZS5zcmNFbGVtZW50fHxkKSxlLnJlbGF0ZWRUYXJnZXR8fChlLnJlbGF0ZWRUYXJnZXQ9ZS5mcm9tRWxlbWVudD09PWUudGFyZ2V0P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQpLGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXtyLnByZXZlbnREZWZhdWx0JiZyLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSxyLnJldHVyblZhbHVlPSExLGUuZGVmYXVsdFByZXZlbnRlZD0hMH0sZS5kZWZhdWx0UHJldmVudGVkPSExLGUuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7ci5zdG9wUHJvcGFnYXRpb24mJnIuc3RvcFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITAsci5jYW5jZWxCdWJibGU9ITAsZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10fSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkPW4sZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXQsZS5zdG9wUHJvcGFnYXRpb24oKX0sZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1uLG51bGwhPT1lLmNsaWVudFgmJnZvaWQgMCE9PWUuY2xpZW50WCl7dmFyIG89ZC5kb2N1bWVudEVsZW1lbnQscz1kLmJvZHk7ZS5wYWdlWD1lLmNsaWVudFgrKG8mJm8uc2Nyb2xsTGVmdHx8cyYmcy5zY3JvbGxMZWZ0fHwwKS0obyYmby5jbGllbnRMZWZ0fHxzJiZzLmNsaWVudExlZnR8fDApLGUucGFnZVk9ZS5jbGllbnRZKyhvJiZvLnNjcm9sbFRvcHx8cyYmcy5zY3JvbGxUb3B8fDApLShvJiZvLmNsaWVudFRvcHx8cyYmcy5jbGllbnRUb3B8fDApfWUud2hpY2g9ZS5jaGFyQ29kZXx8ZS5rZXlDb2RlLG51bGwhPT1lLmJ1dHRvbiYmdm9pZCAwIT09ZS5idXR0b24mJihlLmJ1dHRvbj0xJmUuYnV0dG9uPzA6NCZlLmJ1dHRvbj8xOjImZS5idXR0b24/MjowKX1yZXR1cm4gZX12YXIgc2U9ITE7IWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7c2U9ITB9fSk7aC5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSksaC5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSl9Y2F0Y2goZSl7fX0oKTt2YXIgYWU9W1widG91Y2hzdGFydFwiLFwidG91Y2htb3ZlXCJdO2Z1bmN0aW9uIGxlKHMsZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBpZShsZSxzLGUsdCk7bmUuaGFzKHMpfHxuZS5zZXQocyx7fSk7dmFyIGE9bmUuZ2V0KHMpO2lmKGEuaGFuZGxlcnN8fChhLmhhbmRsZXJzPXt9KSxhLmhhbmRsZXJzW2VdfHwoYS5oYW5kbGVyc1tlXT1bXSksdC5ndWlkfHwodC5ndWlkPXRlKCkpLGEuaGFuZGxlcnNbZV0ucHVzaCh0KSxhLmRpc3BhdGNoZXJ8fChhLmRpc2FibGVkPSExLGEuZGlzcGF0Y2hlcj1mdW5jdGlvbihlLHQpe2lmKCFhLmRpc2FibGVkKXtlPW9lKGUpO3ZhciBuPWEuaGFuZGxlcnNbZS50eXBlXTtpZihuKWZvcih2YXIgcj1uLnNsaWNlKDApLGk9MCxvPXIubGVuZ3RoO2k8byYmIWUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtpKyspdHJ5e3JbaV0uY2FsbChzLGUsdCl9Y2F0Y2goZSl7Zi5lcnJvcihlKX19fSksMT09PWEuaGFuZGxlcnNbZV0ubGVuZ3RoKWlmKHMuYWRkRXZlbnRMaXN0ZW5lcil7dmFyIG49ITE7c2UmJi0xPGFlLmluZGV4T2YoZSkmJihuPXtwYXNzaXZlOiEwfSkscy5hZGRFdmVudExpc3RlbmVyKGUsYS5kaXNwYXRjaGVyLG4pfWVsc2Ugcy5hdHRhY2hFdmVudCYmcy5hdHRhY2hFdmVudChcIm9uXCIrZSxhLmRpc3BhdGNoZXIpfWZ1bmN0aW9uIGNlKGUsdCxuKXtpZihuZS5oYXMoZSkpe3ZhciByPW5lLmdldChlKTtpZihyLmhhbmRsZXJzKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBpZShjZSxlLHQsbik7ZnVuY3Rpb24gaShlLHQpe3IuaGFuZGxlcnNbdF09W10scmUoZSx0KX1pZih2b2lkIDAhPT10KXt2YXIgbz1yLmhhbmRsZXJzW3RdO2lmKG8paWYobil7aWYobi5ndWlkKWZvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKW9bc10uZ3VpZD09PW4uZ3VpZCYmby5zcGxpY2Uocy0tLDEpO3JlKGUsdCl9ZWxzZSBpKGUsdCl9ZWxzZSBmb3IodmFyIGEgaW4gci5oYW5kbGVycylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoci5oYW5kbGVyc3x8e30sYSkmJmkoZSxhKX19fWZ1bmN0aW9uIHVlKGUsdCxuKXt2YXIgcj1uZS5oYXMoZSk/bmUuZ2V0KGUpOnt9LGk9ZS5wYXJlbnROb2RlfHxlLm93bmVyRG9jdW1lbnQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/dD17dHlwZTp0LHRhcmdldDplfTp0LnRhcmdldHx8KHQudGFyZ2V0PWUpLHQ9b2UodCksci5kaXNwYXRjaGVyJiZyLmRpc3BhdGNoZXIuY2FsbChlLHQsbiksaSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmITA9PT10LmJ1YmJsZXMpdWUuY2FsbChudWxsLGksdCxuKTtlbHNlIGlmKCFpJiYhdC5kZWZhdWx0UHJldmVudGVkJiZ0LnRhcmdldCYmdC50YXJnZXRbdC50eXBlXSl7bmUuaGFzKHQudGFyZ2V0KXx8bmUuc2V0KHQudGFyZ2V0LHt9KTt2YXIgbz1uZS5nZXQodC50YXJnZXQpO3QudGFyZ2V0W3QudHlwZV0mJihvLmRpc2FibGVkPSEwLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGFyZ2V0W3QudHlwZV0mJnQudGFyZ2V0W3QudHlwZV0oKSxvLmRpc2FibGVkPSExKX1yZXR1cm4hdC5kZWZhdWx0UHJldmVudGVkfWZ1bmN0aW9uIGhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBpZShoZSxlLHQsbik7ZnVuY3Rpb24gcigpe2NlKGUsdCxyKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yLmd1aWQ9bi5ndWlkPW4uZ3VpZHx8dGUoKSxsZShlLHQscil9ZnVuY3Rpb24gZGUoZSx0LG4pe2Z1bmN0aW9uIHIoKXtjZShlLHQsciksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ci5ndWlkPW4uZ3VpZD1uLmd1aWR8fHRlKCksbGUoZSx0LHIpfWZ1bmN0aW9uIHBlKGUsdCxuKXt0Lmd1aWR8fCh0Lmd1aWQ9dGUoKSk7dmFyIHI9dC5iaW5kKGUpO3JldHVybiByLmd1aWQ9bj9uK1wiX1wiK3QuZ3VpZDp0Lmd1aWQscn1mdW5jdGlvbiBmZSh0LG4pe3ZhciByPWgucGVyZm9ybWFuY2Uubm93KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9aC5wZXJmb3JtYW5jZS5ub3coKTtuPD1lLXImJih0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpLHI9ZSl9fWZ1bmN0aW9uIHZlKCl7fXZhciB5ZSxnZT1PYmplY3QuZnJlZXplKHtmaXhFdmVudDpvZSxvbjpsZSxvZmY6Y2UsdHJpZ2dlcjp1ZSxvbmU6aGUsYW55OmRlfSk7dmUucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfPXt9LHZlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPXZlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWRkRXZlbnRMaXN0ZW5lcjt0aGlzLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oKXt9LGxlKHRoaXMsZSx0KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXI9bn0sdmUucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9dmUucHJvdG90eXBlLm9mZj1mdW5jdGlvbihlLHQpe2NlKHRoaXMsZSx0KX0sdmUucHJvdG90eXBlLm9uZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWRkRXZlbnRMaXN0ZW5lcjt0aGlzLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oKXt9LGhlKHRoaXMsZSx0KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXI9bn0sdmUucHJvdG90eXBlLmFueT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWRkRXZlbnRMaXN0ZW5lcjt0aGlzLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oKXt9LGRlKHRoaXMsZSx0KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXI9bn0sdmUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9dmUucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlfHxlO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT17dHlwZTp0fSksZT1vZShlKSx0aGlzLmFsbG93ZWRFdmVudHNfW3RdJiZ0aGlzW1wib25cIit0XSYmdGhpc1tcIm9uXCIrdF0oZSksdWUodGhpcyxlKX0sdmUucHJvdG90eXBlLnF1ZXVlVHJpZ2dlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3llPXllfHxuZXcgTWFwO3ZhciBuPWUudHlwZXx8ZSxyPXllLmdldCh0aGlzKTtyfHwocj1uZXcgTWFwLHllLnNldCh0aGlzLHIpKTt2YXIgaT1yLmdldChuKTtyLmRlbGV0ZShuKSxoLmNsZWFyVGltZW91dChpKTt2YXIgbz1oLnNldFRpbWVvdXQoZnVuY3Rpb24oKXswPT09ci5zaXplJiYocj1udWxsLHllLmRlbGV0ZSh0KSksdC50cmlnZ2VyKGUpfSwwKTtyLnNldChuLG8pfTtmdW5jdGlvbiBtZShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmL1xcUy8udGVzdChlKXx8QXJyYXkuaXNBcnJheShlKSYmISFlLmxlbmd0aH1mdW5jdGlvbiBfZShlKXtpZighZS5ub2RlTmFtZSYmIUVlKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFyZ2V0OyBtdXN0IGJlIGEgRE9NIG5vZGUgb3IgZXZlbnRlZCBvYmplY3QuXCIpfWZ1bmN0aW9uIGJlKGUpe2lmKCFtZShlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGV2ZW50IHR5cGU7IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIGFycmF5LlwiKX1mdW5jdGlvbiBUZShlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGlzdGVuZXI7IG11c3QgYmUgYSBmdW5jdGlvbi5cIil9ZnVuY3Rpb24ga2UoZSx0KXt2YXIgbixyLGksbz10Lmxlbmd0aDwzfHx0WzBdPT09ZXx8dFswXT09PWUuZXZlbnRCdXNFbF87cmV0dXJuIGk9bz8obj1lLmV2ZW50QnVzRWxfLDM8PXQubGVuZ3RoJiZ0LnNoaWZ0KCkscj10WzBdLHRbMV0pOihuPXRbMF0scj10WzFdLHRbMl0pLF9lKG4pLGJlKHIpLFRlKGkpLHtpc1RhcmdldGluZ1NlbGY6byx0YXJnZXQ6bix0eXBlOnIsbGlzdGVuZXI6aT1wZShlLGkpfX1mdW5jdGlvbiBDZShlLHQsbixyKXtfZShlKSxlLm5vZGVOYW1lP2dlW3RdKGUsbixyKTplW3RdKG4scil9dmFyIEVlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdmV8fCEhdC5ldmVudEJ1c0VsXyYmW1wib25cIixcIm9uZVwiLFwib2ZmXCIsXCJ0cmlnZ2VyXCJdLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRbZV19KX0sU2U9e29uOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3ZhciBpPWtlKHRoaXMsbiksbz1pLmlzVGFyZ2V0aW5nU2VsZixzPWkudGFyZ2V0LGE9aS50eXBlLGw9aS5saXN0ZW5lcjtpZihDZShzLFwib25cIixhLGwpLCFvKXtmdW5jdGlvbiBjKCl7cmV0dXJuIGUub2ZmKHMsYSxsKX1jLmd1aWQ9bC5ndWlkO2Z1bmN0aW9uIHUoKXtyZXR1cm4gZS5vZmYoXCJkaXNwb3NlXCIsYyl9dS5ndWlkPWwuZ3VpZCxDZSh0aGlzLFwib25cIixcImRpc3Bvc2VcIixjKSxDZShzLFwib25cIixcImRpc3Bvc2VcIix1KX19LG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt2YXIgaT1rZSh0aGlzLHQpLG89aS5pc1RhcmdldGluZ1NlbGYscz1pLnRhcmdldCxhPWkudHlwZSxsPWkubGlzdGVuZXI7aWYobylDZShzLFwib25lXCIsYSxsKTtlbHNle2Z1bmN0aW9uIGMoKXtyLm9mZihzLGEsYyk7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07bC5hcHBseShudWxsLHQpfWMuZ3VpZD1sLmd1aWQsQ2UocyxcIm9uZVwiLGEsYyl9fSxhbnk6ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIGk9a2UodGhpcyx0KSxvPWkuaXNUYXJnZXRpbmdTZWxmLHM9aS50YXJnZXQsYT1pLnR5cGUsbD1pLmxpc3RlbmVyO2lmKG8pQ2UocyxcImFueVwiLGEsbCk7ZWxzZXtmdW5jdGlvbiBjKCl7ci5vZmYocyxhLGMpO2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2wuYXBwbHkobnVsbCx0KX1jLmd1aWQ9bC5ndWlkLENlKHMsXCJhbnlcIixhLGMpfX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8bWUoZSkpY2UodGhpcy5ldmVudEJ1c0VsXyxlLHQpO2Vsc2V7dmFyIHI9ZSxpPXQ7X2UociksYmUoaSksVGUobiksbj1wZSh0aGlzLG4pLHRoaXMub2ZmKFwiZGlzcG9zZVwiLG4pLHIubm9kZU5hbWU/KGNlKHIsaSxuKSxjZShyLFwiZGlzcG9zZVwiLG4pKTpFZShyKSYmKHIub2ZmKGksbiksci5vZmYoXCJkaXNwb3NlXCIsbikpfX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB1ZSh0aGlzLmV2ZW50QnVzRWxfLGUsdCl9fTtmdW5jdGlvbiB3ZShlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj10LmV2ZW50QnVzS2V5O2lmKG4pe2lmKCFlW25dLm5vZGVOYW1lKXRocm93IG5ldyBFcnJvcignVGhlIGV2ZW50QnVzS2V5IFwiJytuKydcIiBkb2VzIG5vdCByZWZlciB0byBhbiBlbGVtZW50LicpO2UuZXZlbnRCdXNFbF89ZVtuXX1lbHNlIGUuZXZlbnRCdXNFbF89YihcInNwYW5cIix7Y2xhc3NOYW1lOlwidmpzLWV2ZW50LWJ1c1wifSk7cmV0dXJuIHkoZSxTZSksZS5ldmVudGVkQ2FsbGJhY2tzJiZlLmV2ZW50ZWRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KSxlLm9uKFwiZGlzcG9zZVwiLGZ1bmN0aW9uKCl7ZS5vZmYoKSxoLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmV2ZW50QnVzRWxfPW51bGx9LDApfSksZX12YXIgUGU9e3N0YXRlOnt9LHNldFN0YXRlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcztyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKCkpLGkoZSxmdW5jdGlvbihlLHQpe3Iuc3RhdGVbdF0hPT1lJiYoKG49bnx8e30pW3RdPXtmcm9tOnIuc3RhdGVbdF0sdG86ZX0pLHIuc3RhdGVbdF09ZX0pLG4mJkVlKHRoaXMpJiZ0aGlzLnRyaWdnZXIoe2NoYW5nZXM6bix0eXBlOlwic3RhdGVjaGFuZ2VkXCJ9KSxufX07ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4geShlLFBlKSxlLnN0YXRlPXkoe30sZS5zdGF0ZSx0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmhhbmRsZVN0YXRlQ2hhbmdlZCYmRWUoZSkmJmUub24oXCJzdGF0ZWNoYW5nZWRcIixlLmhhbmRsZVN0YXRlQ2hhbmdlZCksZX1mdW5jdGlvbiBqZShlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZT9lOmUucmVwbGFjZSgvLi8sZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0pfWZ1bmN0aW9uIEFlKGUpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlP2U6ZS5yZXBsYWNlKC8uLyxmdW5jdGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gSWUoKXtmb3IodmFyIG49e30sZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7ZSYmaShlLGZ1bmN0aW9uKGUsdCl7YShlKT8oYShuW3RdKXx8KG5bdF09e30pLG5bdF09SWUoblt0XSxlKSk6blt0XT1lfSl9KSxufXZhciBPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoZSx0LG4pe2lmKCFlJiZ0aGlzLnBsYXk/dGhpcy5wbGF5ZXJfPWU9dGhpczp0aGlzLnBsYXllcl89ZSx0aGlzLnBhcmVudENvbXBvbmVudF89bnVsbCx0aGlzLm9wdGlvbnNfPUllKHt9LHRoaXMub3B0aW9uc18pLHQ9dGhpcy5vcHRpb25zXz1JZSh0aGlzLm9wdGlvbnNfLHQpLHRoaXMuaWRfPXQuaWR8fHQuZWwmJnQuZWwuaWQsIXRoaXMuaWRfKXt2YXIgcj1lJiZlLmlkJiZlLmlkKCl8fFwibm9fcGxheWVyXCI7dGhpcy5pZF89citcIl9jb21wb25lbnRfXCIrdGUoKX12YXIgaTt0aGlzLm5hbWVfPXQubmFtZXx8bnVsbCx0LmVsP3RoaXMuZWxfPXQuZWw6ITEhPT10LmNyZWF0ZUVsJiYodGhpcy5lbF89dGhpcy5jcmVhdGVFbCgpKSwhMSE9PXQuZXZlbnRlZCYmd2UodGhpcyx7ZXZlbnRCdXNLZXk6dGhpcy5lbF8/XCJlbF9cIjpudWxsfSkseGUodGhpcyx0aGlzLmNvbnN0cnVjdG9yLmRlZmF1bHRTdGF0ZSksdGhpcy5jaGlsZHJlbl89W10sdGhpcy5jaGlsZEluZGV4Xz17fSx0aGlzLmNoaWxkTmFtZUluZGV4Xz17fSxoLlNldHx8KGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZXRfPXt9fXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0Lmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLnNldF99LHQuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpO3JldHVybiBkZWxldGUgdGhpcy5zZXRfW2VdLHR9LHQuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldF9bZV09MSx0aGlzfSx0LmZvckVhY2g9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdGhpcy5zZXRfKWUuY2FsbCh0LG4sbix0aGlzKX0sZX0oKSksdGhpcy5zZXRUaW1lb3V0SWRzXz1oLlNldD9uZXcgU2V0Om5ldyBpLHRoaXMuc2V0SW50ZXJ2YWxJZHNfPWguU2V0P25ldyBTZXQ6bmV3IGksdGhpcy5yYWZJZHNfPWguU2V0P25ldyBTZXQ6bmV3IGksKHRoaXMuY2xlYXJpbmdUaW1lcnNPbkRpc3Bvc2VfPSExKSE9PXQuaW5pdENoaWxkcmVuJiZ0aGlzLmluaXRDaGlsZHJlbigpLHRoaXMucmVhZHkobiksITEhPT10LnJlcG9ydFRvdWNoQWN0aXZpdHkmJnRoaXMuZW5hYmxlVG91Y2hBY3Rpdml0eSgpfXZhciBlPWMucHJvdG90eXBlO3JldHVybiBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZih0aGlzLnRyaWdnZXIoe3R5cGU6XCJkaXNwb3NlXCIsYnViYmxlczohMX0pLHRoaXMuY2hpbGRyZW5fKWZvcih2YXIgZT10aGlzLmNoaWxkcmVuXy5sZW5ndGgtMTswPD1lO2UtLSl0aGlzLmNoaWxkcmVuX1tlXS5kaXNwb3NlJiZ0aGlzLmNoaWxkcmVuX1tlXS5kaXNwb3NlKCk7dGhpcy5jaGlsZHJlbl89bnVsbCx0aGlzLmNoaWxkSW5kZXhfPW51bGwsdGhpcy5jaGlsZE5hbWVJbmRleF89bnVsbCx0aGlzLnBhcmVudENvbXBvbmVudF89bnVsbCx0aGlzLmVsXyYmKHRoaXMuZWxfLnBhcmVudE5vZGUmJnRoaXMuZWxfLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbF8pLG5lLmhhcyh0aGlzLmVsXykmJm5lLmRlbGV0ZSh0aGlzLmVsXyksdGhpcy5lbF89bnVsbCksdGhpcy5wbGF5ZXJfPW51bGx9LGUucGxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyX30sZS5vcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYodGhpcy5vcHRpb25zXz1JZSh0aGlzLm9wdGlvbnNfLGUpKSx0aGlzLm9wdGlvbnNffSxlLmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxffSxlLmNyZWF0ZUVsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYihlLHQsbil9LGUubG9jYWxpemU9ZnVuY3Rpb24oZSxpLHQpe3ZvaWQgMD09PXQmJih0PWUpO3ZhciBuPXRoaXMucGxheWVyXy5sYW5ndWFnZSYmdGhpcy5wbGF5ZXJfLmxhbmd1YWdlKCkscj10aGlzLnBsYXllcl8ubGFuZ3VhZ2VzJiZ0aGlzLnBsYXllcl8ubGFuZ3VhZ2VzKCksbz1yJiZyW25dLHM9biYmbi5zcGxpdChcIi1cIilbMF0sYT1yJiZyW3NdLGw9dDtyZXR1cm4gbyYmb1tlXT9sPW9bZV06YSYmYVtlXSYmKGw9YVtlXSksaSYmKGw9bC5yZXBsYWNlKC9cXHsoXFxkKylcXH0vZyxmdW5jdGlvbihlLHQpe3ZhciBuPWlbdC0xXSxyPW47cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4mJihyPWUpLHJ9KSksbH0sZS5jb250ZW50RWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50RWxffHx0aGlzLmVsX30sZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkX30sZS5uYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZV99LGUuY2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbl99LGUuZ2V0Q2hpbGRCeUlkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNoaWxkSW5kZXhfW2VdfSxlLmdldENoaWxkPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIHRoaXMuY2hpbGROYW1lSW5kZXhfW2VdfSxlLmFkZENoaWxkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDA9PT1uJiYobj10aGlzLmNoaWxkcmVuXy5sZW5ndGgpLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpPUFlKGUpO3ZhciBvPXQuY29tcG9uZW50Q2xhc3N8fGk7dC5uYW1lPWk7dmFyIHM9Yy5nZXRDb21wb25lbnQobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKFwiQ29tcG9uZW50IFwiK28rXCIgZG9lcyBub3QgZXhpc3RcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgcylyZXR1cm4gbnVsbDtyPW5ldyBzKHRoaXMucGxheWVyX3x8dGhpcyx0KX1lbHNlIHI9ZTtpZihyLnBhcmVudENvbXBvbmVudF8mJnIucGFyZW50Q29tcG9uZW50Xy5yZW1vdmVDaGlsZChyKSx0aGlzLmNoaWxkcmVuXy5zcGxpY2UobiwwLHIpLHIucGFyZW50Q29tcG9uZW50Xz10aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuaWQmJih0aGlzLmNoaWxkSW5kZXhfW3IuaWQoKV09ciksKGk9aXx8ci5uYW1lJiZBZShyLm5hbWUoKSkpJiYodGhpcy5jaGlsZE5hbWVJbmRleF9baV09cix0aGlzLmNoaWxkTmFtZUluZGV4X1tqZShpKV09ciksXCJmdW5jdGlvblwiPT10eXBlb2Ygci5lbCYmci5lbCgpKXt2YXIgYT10aGlzLmNvbnRlbnRFbCgpLmNoaWxkcmVuW25dfHxudWxsO3RoaXMuY29udGVudEVsKCkuaW5zZXJ0QmVmb3JlKHIuZWwoKSxhKX1yZXR1cm4gcn0sZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5nZXRDaGlsZChlKSksZSYmdGhpcy5jaGlsZHJlbl8pe2Zvcih2YXIgdD0hMSxuPXRoaXMuY2hpbGRyZW5fLmxlbmd0aC0xOzA8PW47bi0tKWlmKHRoaXMuY2hpbGRyZW5fW25dPT09ZSl7dD0hMCx0aGlzLmNoaWxkcmVuXy5zcGxpY2UobiwxKTticmVha31pZih0KXtlLnBhcmVudENvbXBvbmVudF89bnVsbCx0aGlzLmNoaWxkSW5kZXhfW2UuaWQoKV09bnVsbCx0aGlzLmNoaWxkTmFtZUluZGV4X1tBZShlLm5hbWUoKSldPW51bGwsdGhpcy5jaGlsZE5hbWVJbmRleF9bamUoZS5uYW1lKCkpXT1udWxsO3ZhciByPWUuZWwoKTtyJiZyLnBhcmVudE5vZGU9PT10aGlzLmNvbnRlbnRFbCgpJiZ0aGlzLmNvbnRlbnRFbCgpLnJlbW92ZUNoaWxkKGUuZWwoKSl9fX0sZS5pbml0Q2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9dGhpcy5vcHRpb25zXy5jaGlsZHJlbjtpZihyKXt2YXIgZSxvPXRoaXMub3B0aW9uc18sbj1jLmdldENvbXBvbmVudChcIlRlY2hcIik7KGU9QXJyYXkuaXNBcnJheShyKT9yOk9iamVjdC5rZXlzKHIpKS5jb25jYXQoT2JqZWN0LmtleXModGhpcy5vcHRpb25zXykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/dD09PWU6dD09PWUubmFtZX0pfSkpLm1hcChmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBuPVwic3RyaW5nXCI9PXR5cGVvZiBlP3JbdD1lXXx8aS5vcHRpb25zX1t0XXx8e306KHQ9ZS5uYW1lLGUpLHtuYW1lOnQsb3B0czpufX0pLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1jLmdldENvbXBvbmVudChlLm9wdHMuY29tcG9uZW50Q2xhc3N8fEFlKGUubmFtZSkpO3JldHVybiB0JiYhbi5pc1RlY2godCl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUub3B0cztpZih2b2lkIDAhPT1vW3RdJiYobj1vW3RdKSwhMSE9PW4peyEwPT09biYmKG49e30pLG4ucGxheWVyT3B0aW9ucz1pLm9wdGlvbnNfLnBsYXllck9wdGlvbnM7dmFyIHI9aS5hZGRDaGlsZCh0LG4pO3ImJihpW3RdPXIpfX0pfX0sZS5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sZS5yZWFkeT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSxlKXJldHVybiB0aGlzLmlzUmVhZHlfP3ZvaWQodD9lLmNhbGwodGhpcyk6dGhpcy5zZXRUaW1lb3V0KGUsMSkpOih0aGlzLnJlYWR5UXVldWVfPXRoaXMucmVhZHlRdWV1ZV98fFtdLHZvaWQgdGhpcy5yZWFkeVF1ZXVlXy5wdXNoKGUpKX0sZS50cmlnZ2VyUmVhZHk9ZnVuY3Rpb24oKXt0aGlzLmlzUmVhZHlfPSEwLHRoaXMuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZHlRdWV1ZV87dGhpcy5yZWFkeVF1ZXVlXz1bXSxlJiYwPGUubGVuZ3RoJiZlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYWxsKHRoaXMpfSx0aGlzKSx0aGlzLnRyaWdnZXIoXCJyZWFkeVwiKX0sMSl9LGUuJD1mdW5jdGlvbihlLHQpe3JldHVybiBXKGUsdHx8dGhpcy5jb250ZW50RWwoKSl9LGUuJCQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSyhlLHR8fHRoaXMuY29udGVudEVsKCkpfSxlLmhhc0NsYXNzPWZ1bmN0aW9uKGUpe3JldHVybiBDKHRoaXMuZWxfLGUpfSxlLmFkZENsYXNzPWZ1bmN0aW9uKGUpe0UodGhpcy5lbF8sZSl9LGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24oZSl7Uyh0aGlzLmVsXyxlKX0sZS50b2dnbGVDbGFzcz1mdW5jdGlvbihlLHQpe3codGhpcy5lbF8sZSx0KX0sZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVDbGFzcyhcInZqcy1oaWRkZW5cIil9LGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuYWRkQ2xhc3MoXCJ2anMtaGlkZGVuXCIpfSxlLmxvY2tTaG93aW5nPWZ1bmN0aW9uKCl7dGhpcy5hZGRDbGFzcyhcInZqcy1sb2NrLXNob3dpbmdcIil9LGUudW5sb2NrU2hvd2luZz1mdW5jdGlvbigpe3RoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtbG9jay1zaG93aW5nXCIpfSxlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaih0aGlzLmVsXyxlKX0sZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtBKHRoaXMuZWxfLGUsdCl9LGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe0kodGhpcy5lbF8sZSl9LGUud2lkdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kaW1lbnNpb24oXCJ3aWR0aFwiLGUsdCl9LGUuaGVpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZGltZW5zaW9uKFwiaGVpZ2h0XCIsZSx0KX0sZS5kaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7dGhpcy53aWR0aChlLCEwKSx0aGlzLmhlaWdodCh0KX0sZS5kaW1lbnNpb249ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMCE9PXQpcmV0dXJuIG51bGwhPT10JiZ0PT10fHwodD0wKSwtMSE9PShcIlwiK3QpLmluZGV4T2YoXCIlXCIpfHwtMSE9PShcIlwiK3QpLmluZGV4T2YoXCJweFwiKT90aGlzLmVsXy5zdHlsZVtlXT10OnRoaXMuZWxfLnN0eWxlW2VdPVwiYXV0b1wiPT09dD9cIlwiOnQrXCJweFwiLHZvaWQobnx8dGhpcy50cmlnZ2VyKFwiY29tcG9uZW50cmVzaXplXCIpKTtpZighdGhpcy5lbF8pcmV0dXJuIDA7dmFyIHI9dGhpcy5lbF8uc3R5bGVbZV0saT1yLmluZGV4T2YoXCJweFwiKTtyZXR1cm4tMSE9PWk/cGFyc2VJbnQoci5zbGljZSgwLGkpLDEwKTpwYXJzZUludCh0aGlzLmVsX1tcIm9mZnNldFwiK0FlKGUpXSwxMCl9LGUuY3VycmVudERpbWVuc2lvbj1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKFwid2lkdGhcIiE9PWUmJlwiaGVpZ2h0XCIhPT1lKXRocm93IG5ldyBFcnJvcihcImN1cnJlbnREaW1lbnNpb24gb25seSBhY2NlcHRzIHdpZHRoIG9yIGhlaWdodCB2YWx1ZVwiKTtpZih0PXIodGhpcy5lbF8sZSksMD09PSh0PXBhcnNlRmxvYXQodCkpfHxpc05hTih0KSl7dmFyIG49XCJvZmZzZXRcIitBZShlKTt0PXRoaXMuZWxfW25dfXJldHVybiB0fSxlLmN1cnJlbnREaW1lbnNpb25zPWZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOnRoaXMuY3VycmVudERpbWVuc2lvbihcIndpZHRoXCIpLGhlaWdodDp0aGlzLmN1cnJlbnREaW1lbnNpb24oXCJoZWlnaHRcIil9fSxlLmN1cnJlbnRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnREaW1lbnNpb24oXCJ3aWR0aFwiKX0sZS5jdXJyZW50SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudERpbWVuc2lvbihcImhlaWdodFwiKX0sZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuZWxfLmZvY3VzKCl9LGUuYmx1cj1mdW5jdGlvbigpe3RoaXMuZWxfLmJsdXIoKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe3RoaXMucGxheWVyXyYmKGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wbGF5ZXJfLmhhbmRsZUtleURvd24oZSkpfSxlLmhhbmRsZUtleVByZXNzPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlS2V5RG93bihlKX0sZS5lbWl0VGFwRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHIsdD0wLGk9bnVsbDt0aGlzLm9uKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKGUpezE9PT1lLnRvdWNoZXMubGVuZ3RoJiYoaT17cGFnZVg6ZS50b3VjaGVzWzBdLnBhZ2VYLHBhZ2VZOmUudG91Y2hlc1swXS5wYWdlWX0sdD1oLnBlcmZvcm1hbmNlLm5vdygpLHI9ITApfSksdGhpcy5vbihcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGUpe2lmKDE8ZS50b3VjaGVzLmxlbmd0aClyPSExO2Vsc2UgaWYoaSl7dmFyIHQ9ZS50b3VjaGVzWzBdLnBhZ2VYLWkucGFnZVgsbj1lLnRvdWNoZXNbMF0ucGFnZVktaS5wYWdlWTsxMDxNYXRoLnNxcnQodCp0K24qbikmJihyPSExKX19KTtmdW5jdGlvbiBlKCl7cj0hMX10aGlzLm9uKFwidG91Y2hsZWF2ZVwiLGUpLHRoaXMub24oXCJ0b3VjaGNhbmNlbFwiLGUpLHRoaXMub24oXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKGUpeyEoaT1udWxsKT09PXImJmgucGVyZm9ybWFuY2Uubm93KCktdDwyMDAmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy50cmlnZ2VyKFwidGFwXCIpKX0pfSxlLmVuYWJsZVRvdWNoQWN0aXZpdHk9ZnVuY3Rpb24oKXtpZih0aGlzLnBsYXllcigpJiZ0aGlzLnBsYXllcigpLnJlcG9ydFVzZXJBY3Rpdml0eSl7dmFyIHQsbj1wZSh0aGlzLnBsYXllcigpLHRoaXMucGxheWVyKCkucmVwb3J0VXNlckFjdGl2aXR5KTt0aGlzLm9uKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKCl7bigpLHRoaXMuY2xlYXJJbnRlcnZhbCh0KSx0PXRoaXMuc2V0SW50ZXJ2YWwobiwyNTApfSk7ZnVuY3Rpb24gZShlKXtuKCksdGhpcy5jbGVhckludGVydmFsKHQpfXRoaXMub24oXCJ0b3VjaG1vdmVcIixuKSx0aGlzLm9uKFwidG91Y2hlbmRcIixlKSx0aGlzLm9uKFwidG91Y2hjYW5jZWxcIixlKX19LGUuc2V0VGltZW91dD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcztyZXR1cm4gZT1wZSh0aGlzLGUpLHRoaXMuY2xlYXJUaW1lcnNPbkRpc3Bvc2VfKCksbj1oLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLnNldFRpbWVvdXRJZHNfLmhhcyhuKSYmci5zZXRUaW1lb3V0SWRzXy5kZWxldGUobiksZSgpfSx0KSx0aGlzLnNldFRpbWVvdXRJZHNfLmFkZChuKSxufSxlLmNsZWFyVGltZW91dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRUaW1lb3V0SWRzXy5oYXMoZSkmJih0aGlzLnNldFRpbWVvdXRJZHNfLmRlbGV0ZShlKSxoLmNsZWFyVGltZW91dChlKSksZX0sZS5zZXRJbnRlcnZhbD1mdW5jdGlvbihlLHQpe2U9cGUodGhpcyxlKSx0aGlzLmNsZWFyVGltZXJzT25EaXNwb3NlXygpO3ZhciBuPWguc2V0SW50ZXJ2YWwoZSx0KTtyZXR1cm4gdGhpcy5zZXRJbnRlcnZhbElkc18uYWRkKG4pLG59LGUuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRJbnRlcnZhbElkc18uaGFzKGUpJiYodGhpcy5zZXRJbnRlcnZhbElkc18uZGVsZXRlKGUpLGguY2xlYXJJbnRlcnZhbChlKSksZX0sZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO3JldHVybiB0aGlzLnN1cHBvcnRzUmFmXz8odGhpcy5jbGVhclRpbWVyc09uRGlzcG9zZV8oKSxlPXBlKHRoaXMsZSksdD1oLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe24ucmFmSWRzXy5oYXModCkmJm4ucmFmSWRzXy5kZWxldGUodCksZSgpfSksdGhpcy5yYWZJZHNfLmFkZCh0KSx0KTp0aGlzLnNldFRpbWVvdXQoZSwxZTMvNjApfSxlLmNhbmNlbEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN1cHBvcnRzUmFmXz8odGhpcy5yYWZJZHNfLmhhcyhlKSYmKHRoaXMucmFmSWRzXy5kZWxldGUoZSksaC5jYW5jZWxBbmltYXRpb25GcmFtZShlKSksZSk6dGhpcy5jbGVhclRpbWVvdXQoZSl9LGUuY2xlYXJUaW1lcnNPbkRpc3Bvc2VfPWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLmNsZWFyaW5nVGltZXJzT25EaXNwb3NlX3x8KHRoaXMuY2xlYXJpbmdUaW1lcnNPbkRpc3Bvc2VfPSEwLHRoaXMub25lKFwiZGlzcG9zZVwiLGZ1bmN0aW9uKCl7W1tcInJhZklkc19cIixcImNhbmNlbEFuaW1hdGlvbkZyYW1lXCJdLFtcInNldFRpbWVvdXRJZHNfXCIsXCJjbGVhclRpbWVvdXRcIl0sW1wic2V0SW50ZXJ2YWxJZHNfXCIsXCJjbGVhckludGVydmFsXCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO3JbdF0uZm9yRWFjaChyW25dLHIpfSksci5jbGVhcmluZ1RpbWVyc09uRGlzcG9zZV89ITF9KSl9LGMucmVnaXN0ZXJDb21wb25lbnQ9ZnVuY3Rpb24oZSx0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgZXx8IWUpdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGNvbXBvbmVudCBuYW1lLCBcIicrZSsnXCI7IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLicpO3ZhciBuLHI9Yy5nZXRDb21wb25lbnQoXCJUZWNoXCIpLGk9ciYmci5pc1RlY2godCksbz1jPT09dHx8Yy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0LnByb3RvdHlwZSk7aWYoaXx8IW8pdGhyb3cgbj1pP1widGVjaHMgbXVzdCBiZSByZWdpc3RlcmVkIHVzaW5nIFRlY2gucmVnaXN0ZXJUZWNoKClcIjpcIm11c3QgYmUgYSBDb21wb25lbnQgc3ViY2xhc3NcIixuZXcgRXJyb3IoJ0lsbGVnYWwgY29tcG9uZW50LCBcIicrZSsnXCI7ICcrbitcIi5cIik7ZT1BZShlKSxjLmNvbXBvbmVudHNffHwoYy5jb21wb25lbnRzXz17fSk7dmFyIHM9Yy5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIik7aWYoXCJQbGF5ZXJcIj09PWUmJnMmJnMucGxheWVycyl7dmFyIGE9cy5wbGF5ZXJzLGw9T2JqZWN0LmtleXMoYSk7aWYoYSYmMDxsLmxlbmd0aCYmbC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV19KS5ldmVyeShCb29sZWFuKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gbm90IHJlZ2lzdGVyIFBsYXllciBjb21wb25lbnQgYWZ0ZXIgcGxheWVyIGhhcyBiZWVuIGNyZWF0ZWQuXCIpfXJldHVybiBjLmNvbXBvbmVudHNfW2VdPXQsYy5jb21wb25lbnRzX1tqZShlKV09dH0sYy5nZXRDb21wb25lbnQ9ZnVuY3Rpb24oZSl7aWYoZSYmYy5jb21wb25lbnRzXylyZXR1cm4gYy5jb21wb25lbnRzX1tlXX0sY30oKTtmdW5jdGlvbiBEZShlLHQpe2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpLChlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lKS5fX3Byb3RvX189dH1mdW5jdGlvbiBNZShlLHQpe3JldHVybihNZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gTmUoZSx0LG4pe3JldHVybihOZT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtudWxsXTtyLnB1c2guYXBwbHkocix0KTt2YXIgaT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLHIpKTtyZXR1cm4gbiYmTWUoaSxuLnByb3RvdHlwZSksaX0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBMZShlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1PZS5wcm90b3R5cGUuc3VwcG9ydHNSYWZfPVwiZnVuY3Rpb25cIj09dHlwZW9mIGgucmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBoLmNhbmNlbEFuaW1hdGlvbkZyYW1lLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQ29tcG9uZW50XCIsT2UpO3ZhciBGZSxSZSxCZSwkZSxIZT1oLm5hdmlnYXRvciYmaC5uYXZpZ2F0b3IudXNlckFnZW50fHxcIlwiLFZlPS9BcHBsZVdlYktpdFxcLyhbXFxkLl0rKS9pLmV4ZWMoSGUpLFVlPVZlP3BhcnNlRmxvYXQoVmUucG9wKCkpOm51bGwsV2U9L2lQYWQvaS50ZXN0KEhlKSxLZT0vaVBob25lL2kudGVzdChIZSkmJiFXZSx6ZT0vaVBvZC9pLnRlc3QoSGUpLHFlPUtlfHxXZXx8emUsR2U9KEZlPUhlLm1hdGNoKC9PUyAoXFxkKylfL2kpKSYmRmVbMV0/RmVbMV06bnVsbCxYZT0vQW5kcm9pZC9pLnRlc3QoSGUpLFllPWZ1bmN0aW9uKCl7dmFyIGU9SGUubWF0Y2goL0FuZHJvaWQgKFxcZCspKD86XFwuKFxcZCspKT8oPzpcXC4oXFxkKykpKi9pKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lWzFdJiZwYXJzZUZsb2F0KGVbMV0pLG49ZVsyXSYmcGFyc2VGbG9hdChlWzJdKTtyZXR1cm4gdCYmbj9wYXJzZUZsb2F0KGVbMV0rXCIuXCIrZVsyXSk6dHx8bnVsbH0oKSxRZT1YZSYmWWU8NSYmVWU8NTM3LEplPS9GaXJlZm94L2kudGVzdChIZSksWmU9L0VkZ2UvaS50ZXN0KEhlKSxldD0hWmUmJigvQ2hyb21lL2kudGVzdChIZSl8fC9DcmlPUy9pLnRlc3QoSGUpKSx0dD0oUmU9SGUubWF0Y2goLyhDaHJvbWV8Q3JpT1MpXFwvKFxcZCspLykpJiZSZVsyXT9wYXJzZUZsb2F0KFJlWzJdKTpudWxsLG50PShCZT0vTVNJRVxccyhcXGQrKVxcLlxcZC8uZXhlYyhIZSksISgkZT1CZSYmcGFyc2VGbG9hdChCZVsxXSkpJiYvVHJpZGVudFxcLzcuMC9pLnRlc3QoSGUpJiYvcnY6MTEuMC8udGVzdChIZSkmJigkZT0xMSksJGUpLHJ0PS9TYWZhcmkvaS50ZXN0KEhlKSYmIWV0JiYhWGUmJiFaZSxpdD0ocnR8fHFlKSYmIWV0LG90PS9XaW5kb3dzL2kudGVzdChIZSksc3Q9dSgpJiYoXCJvbnRvdWNoc3RhcnRcImluIGh8fGgubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHxoLkRvY3VtZW50VG91Y2gmJmguZG9jdW1lbnQgaW5zdGFuY2VvZiBoLkRvY3VtZW50VG91Y2gpLGF0PU9iamVjdC5mcmVlemUoe0lTX0lQQUQ6V2UsSVNfSVBIT05FOktlLElTX0lQT0Q6emUsSVNfSU9TOnFlLElPU19WRVJTSU9OOkdlLElTX0FORFJPSUQ6WGUsQU5EUk9JRF9WRVJTSU9OOlllLElTX05BVElWRV9BTkRST0lEOlFlLElTX0ZJUkVGT1g6SmUsSVNfRURHRTpaZSxJU19DSFJPTUU6ZXQsQ0hST01FX1ZFUlNJT046dHQsSUVfVkVSU0lPTjpudCxJU19TQUZBUkk6cnQsSVNfQU5ZX1NBRkFSSTppdCxJU19XSU5ET1dTOm90LFRPVUNIX0VOQUJMRUQ6c3R9KTtmdW5jdGlvbiBsdChlLHQsbixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fG48dCl0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnXCIrZStcIicgb24gJ1RpbWVSYW5nZXMnOiBUaGUgaW5kZXggcHJvdmlkZWQgKFwiK3QrXCIpIGlzIG5vbi1udW1lcmljIG9yIG91dCBvZiBib3VuZHMgKDAtXCIrbitcIikuXCIpfShlLHIsbi5sZW5ndGgtMSksbltyXVt0XX1mdW5jdGlvbiBjdChlKXtyZXR1cm4gdm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoP3tsZW5ndGg6MCxzdGFydDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgVGltZVJhbmdlcyBvYmplY3QgaXMgZW1wdHlcIil9LGVuZDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgVGltZVJhbmdlcyBvYmplY3QgaXMgZW1wdHlcIil9fTp7bGVuZ3RoOmUubGVuZ3RoLHN0YXJ0Omx0LmJpbmQobnVsbCxcInN0YXJ0XCIsMCxlKSxlbmQ6bHQuYmluZChudWxsLFwiZW5kXCIsMSxlKX19ZnVuY3Rpb24gdXQoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9jdChlKTp2b2lkIDA9PT1lfHx2b2lkIDA9PT10P2N0KCk6Y3QoW1tlLHRdXSl9ZnVuY3Rpb24gaHQoZSx0KXt2YXIgbixyLGk9MDtpZighdClyZXR1cm4gMDtlJiZlLmxlbmd0aHx8KGU9dXQoMCwwKSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspbj1lLnN0YXJ0KG8pLHQ8KHI9ZS5lbmQobykpJiYocj10KSxpKz1yLW47cmV0dXJuIGkvdH1mb3IodmFyIGR0LHB0PXtwcmVmaXhlZDohMH0sZnQ9W1tcInJlcXVlc3RGdWxsc2NyZWVuXCIsXCJleGl0RnVsbHNjcmVlblwiLFwiZnVsbHNjcmVlbkVsZW1lbnRcIixcImZ1bGxzY3JlZW5FbmFibGVkXCIsXCJmdWxsc2NyZWVuY2hhbmdlXCIsXCJmdWxsc2NyZWVuZXJyb3JcIixcImZ1bGxzY3JlZW5cIl0sW1wid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW5cIixcIndlYmtpdEV4aXRGdWxsc2NyZWVuXCIsXCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudFwiLFwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWRcIixcIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VcIixcIndlYmtpdGZ1bGxzY3JlZW5lcnJvclwiLFwiLXdlYmtpdC1mdWxsLXNjcmVlblwiXSxbXCJtb3pSZXF1ZXN0RnVsbFNjcmVlblwiLFwibW96Q2FuY2VsRnVsbFNjcmVlblwiLFwibW96RnVsbFNjcmVlbkVsZW1lbnRcIixcIm1vekZ1bGxTY3JlZW5FbmFibGVkXCIsXCJtb3pmdWxsc2NyZWVuY2hhbmdlXCIsXCJtb3pmdWxsc2NyZWVuZXJyb3JcIixcIi1tb3otZnVsbC1zY3JlZW5cIl0sW1wibXNSZXF1ZXN0RnVsbHNjcmVlblwiLFwibXNFeGl0RnVsbHNjcmVlblwiLFwibXNGdWxsc2NyZWVuRWxlbWVudFwiLFwibXNGdWxsc2NyZWVuRW5hYmxlZFwiLFwiTVNGdWxsc2NyZWVuQ2hhbmdlXCIsXCJNU0Z1bGxzY3JlZW5FcnJvclwiLFwiLW1zLWZ1bGxzY3JlZW5cIl1dLHZ0PWZ0WzBdLHl0PTA7eXQ8ZnQubGVuZ3RoO3l0KyspaWYoZnRbeXRdWzFdaW4gZCl7ZHQ9ZnRbeXRdO2JyZWFrfWlmKGR0KXtmb3IodmFyIGd0PTA7Z3Q8ZHQubGVuZ3RoO2d0KyspcHRbdnRbZ3RdXT1kdFtndF07cHQucHJlZml4ZWQ9ZHRbMF0hPT12dFswXX1mdW5jdGlvbiBtdChlKXtpZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuIGU7XCJudW1iZXJcIj09dHlwZW9mIGU/dGhpcy5jb2RlPWU6XCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5tZXNzYWdlPWU6cyhlKSYmKFwibnVtYmVyXCI9PXR5cGVvZiBlLmNvZGUmJih0aGlzLmNvZGU9ZS5jb2RlKSx5KHRoaXMsZSkpLHRoaXMubWVzc2FnZXx8KHRoaXMubWVzc2FnZT1tdC5kZWZhdWx0TWVzc2FnZXNbdGhpcy5jb2RlXXx8XCJcIil9bXQucHJvdG90eXBlLmNvZGU9MCxtdC5wcm90b3R5cGUubWVzc2FnZT1cIlwiLG10LnByb3RvdHlwZS5zdGF0dXM9bnVsbCxtdC5lcnJvclR5cGVzPVtcIk1FRElBX0VSUl9DVVNUT01cIixcIk1FRElBX0VSUl9BQk9SVEVEXCIsXCJNRURJQV9FUlJfTkVUV09SS1wiLFwiTUVESUFfRVJSX0RFQ09ERVwiLFwiTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEXCIsXCJNRURJQV9FUlJfRU5DUllQVEVEXCJdLG10LmRlZmF1bHRNZXNzYWdlcz17MTpcIllvdSBhYm9ydGVkIHRoZSBtZWRpYSBwbGF5YmFja1wiLDI6XCJBIG5ldHdvcmsgZXJyb3IgY2F1c2VkIHRoZSBtZWRpYSBkb3dubG9hZCB0byBmYWlsIHBhcnQtd2F5LlwiLDM6XCJUaGUgbWVkaWEgcGxheWJhY2sgd2FzIGFib3J0ZWQgZHVlIHRvIGEgY29ycnVwdGlvbiBwcm9ibGVtIG9yIGJlY2F1c2UgdGhlIG1lZGlhIHVzZWQgZmVhdHVyZXMgeW91ciBicm93c2VyIGRpZCBub3Qgc3VwcG9ydC5cIiw0OlwiVGhlIG1lZGlhIGNvdWxkIG5vdCBiZSBsb2FkZWQsIGVpdGhlciBiZWNhdXNlIHRoZSBzZXJ2ZXIgb3IgbmV0d29yayBmYWlsZWQgb3IgYmVjYXVzZSB0aGUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuXCIsNTpcIlRoZSBtZWRpYSBpcyBlbmNyeXB0ZWQgYW5kIHdlIGRvIG5vdCBoYXZlIHRoZSBrZXlzIHRvIGRlY3J5cHQgaXQuXCJ9O2Zvcih2YXIgX3Q9MDtfdDxtdC5lcnJvclR5cGVzLmxlbmd0aDtfdCsrKW10W210LmVycm9yVHlwZXNbX3RdXT1fdCxtdC5wcm90b3R5cGVbbXQuZXJyb3JUeXBlc1tfdF1dPV90O3ZhciBidD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9bnVsbDt0cnl7bj1KU09OLnBhcnNlKGUsdCl9Y2F0Y2goZSl7cj1lfXJldHVybltyLG5dfTtmdW5jdGlvbiBUdChlKXtyZXR1cm4gbnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVufWZ1bmN0aW9uIGt0KGUpe1R0KGUpJiZlLnRoZW4obnVsbCxmdW5jdGlvbihlKXt9KX1mdW5jdGlvbiBDdChyKXtyZXR1cm5bXCJraW5kXCIsXCJsYWJlbFwiLFwibGFuZ3VhZ2VcIixcImlkXCIsXCJpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlXCIsXCJtb2RlXCIsXCJzcmNcIl0ucmVkdWNlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclt0XSYmKGVbdF09clt0XSksZX0se2N1ZXM6ci5jdWVzJiZBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoci5jdWVzLGZ1bmN0aW9uKGUpe3JldHVybntzdGFydFRpbWU6ZS5zdGFydFRpbWUsZW5kVGltZTplLmVuZFRpbWUsdGV4dDplLnRleHQsaWQ6ZS5pZH19KX0pfXZhciBFdD1mdW5jdGlvbihlKXt2YXIgdD1lLiQkKFwidHJhY2tcIiksbj1BcnJheS5wcm90b3R5cGUubWFwLmNhbGwodCxmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFja30pO3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodCxmdW5jdGlvbihlKXt2YXIgdD1DdChlLnRyYWNrKTtyZXR1cm4gZS5zcmMmJih0LnNyYz1lLnNyYyksdH0pLmNvbmNhdChBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZS50ZXh0VHJhY2tzKCksZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1uLmluZGV4T2YoZSl9KS5tYXAoQ3QpKX0sU3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uYWRkUmVtb3RlVGV4dFRyYWNrKGUpLnRyYWNrOyFlLnNyYyYmZS5jdWVzJiZlLmN1ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRDdWUoZSl9KX0pLG4udGV4dFRyYWNrcygpfTt2YXIgd3QsUHQ9KGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7dmFyIHQ9ZS53aGljaHx8ZS5rZXlDb2RlfHxlLmNoYXJDb2RlO3QmJihlPXQpfWlmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBzW2VdO3ZhciBuLHI9U3RyaW5nKGUpO3JldHVybihuPWlbci50b0xvd2VyQ2FzZSgpXSk/bjoobj1vW3IudG9Mb3dlckNhc2UoKV0pfHwoMT09PXIubGVuZ3RoP3IuY2hhckNvZGVBdCgwKTp2b2lkIDApfW4uaXNFdmVudEtleT1mdW5jdGlvbihlLHQpe2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXt2YXIgbj1lLndoaWNofHxlLmtleUNvZGV8fGUuY2hhckNvZGU7aWYobnVsbD09bilyZXR1cm4hMTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHI7aWYocj1pW3QudG9Mb3dlckNhc2UoKV0pcmV0dXJuIHI9PT1uO2lmKHI9b1t0LnRvTG93ZXJDYXNlKCldKXJldHVybiByPT09bn1lbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0PT09bjtyZXR1cm4hMX19O3ZhciBpPSh0PWUuZXhwb3J0cz1uKS5jb2RlPXQuY29kZXM9e2JhY2tzcGFjZTo4LHRhYjo5LGVudGVyOjEzLHNoaWZ0OjE2LGN0cmw6MTcsYWx0OjE4LFwicGF1c2UvYnJlYWtcIjoxOSxcImNhcHMgbG9ja1wiOjIwLGVzYzoyNyxzcGFjZTozMixcInBhZ2UgdXBcIjozMyxcInBhZ2UgZG93blwiOjM0LGVuZDozNSxob21lOjM2LGxlZnQ6MzcsdXA6MzgscmlnaHQ6MzksZG93bjo0MCxpbnNlcnQ6NDUsZGVsZXRlOjQ2LGNvbW1hbmQ6OTEsXCJsZWZ0IGNvbW1hbmRcIjo5MSxcInJpZ2h0IGNvbW1hbmRcIjo5MyxcIm51bXBhZCAqXCI6MTA2LFwibnVtcGFkICtcIjoxMDcsXCJudW1wYWQgLVwiOjEwOSxcIm51bXBhZCAuXCI6MTEwLFwibnVtcGFkIC9cIjoxMTEsXCJudW0gbG9ja1wiOjE0NCxcInNjcm9sbCBsb2NrXCI6MTQ1LFwibXkgY29tcHV0ZXJcIjoxODIsXCJteSBjYWxjdWxhdG9yXCI6MTgzLFwiO1wiOjE4NixcIj1cIjoxODcsXCIsXCI6MTg4LFwiLVwiOjE4OSxcIi5cIjoxOTAsXCIvXCI6MTkxLFwiYFwiOjE5MixcIltcIjoyMTksXCJcXFxcXCI6MjIwLFwiXVwiOjIyMSxcIidcIjoyMjJ9LG89dC5hbGlhc2VzPXt3aW5kb3dzOjkxLFwi4oenXCI6MTYsXCLijKVcIjoxOCxcIuKMg1wiOjE3LFwi4oyYXCI6OTEsY3RsOjE3LGNvbnRyb2w6MTcsb3B0aW9uOjE4LHBhdXNlOjE5LGJyZWFrOjE5LGNhcHM6MjAscmV0dXJuOjEzLGVzY2FwZToyNyxzcGM6MzIsc3BhY2ViYXI6MzIscGd1cDozMyxwZ2RuOjM0LGluczo0NSxkZWw6NDYsY21kOjkxfTtmb3Iocj05NztyPDEyMztyKyspaVtTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yLTMyO2Zvcih2YXIgcj00ODtyPDU4O3IrKylpW3ItNDhdPXI7Zm9yKHI9MTtyPDEzO3IrKylpW1wiZlwiK3JdPXIrMTExO2ZvcihyPTA7cjwxMDtyKyspaVtcIm51bXBhZCBcIityXT1yKzk2O3ZhciBzPXQubmFtZXM9dC50aXRsZT17fTtmb3IociBpbiBpKXNbaVtyXV09cjtmb3IodmFyIGEgaW4gbylpW2FdPW9bYV19KHd0PXtleHBvcnRzOnt9fSx3dC5leHBvcnRzKSx3dC5leHBvcnRzKSx4dD0oUHQuY29kZSxQdC5jb2RlcyxQdC5hbGlhc2VzLFB0Lm5hbWVzLFB0LnRpdGxlLFwidmpzLW1vZGFsLWRpYWxvZ1wiKSxqdD1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub3BlbmVkXz1uLmhhc0JlZW5PcGVuZWRfPW4uaGFzQmVlbkZpbGxlZF89ITEsbi5jbG9zZWFibGUoIW4ub3B0aW9uc18udW5jbG9zZWFibGUpLG4uY29udGVudChuLm9wdGlvbnNfLmNvbnRlbnQpLG4uY29udGVudEVsXz1iKFwiZGl2XCIse2NsYXNzTmFtZTp4dCtcIi1jb250ZW50XCJ9LHtyb2xlOlwiZG9jdW1lbnRcIn0pLG4uZGVzY0VsXz1iKFwicFwiLHtjbGFzc05hbWU6eHQrXCItZGVzY3JpcHRpb24gdmpzLWNvbnRyb2wtdGV4dFwiLGlkOm4uZWwoKS5nZXRBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfSksVChuLmRlc2NFbF8sbi5kZXNjcmlwdGlvbigpKSxuLmVsXy5hcHBlbmRDaGlsZChuLmRlc2NFbF8pLG4uZWxfLmFwcGVuZENoaWxkKG4uY29udGVudEVsXyksbn1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNyZWF0ZUVsPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6dGhpcy5idWlsZENTU0NsYXNzKCksdGFiSW5kZXg6LTF9LHtcImFyaWEtZGVzY3JpYmVkYnlcIjp0aGlzLmlkKCkrXCJfZGVzY3JpcHRpb25cIixcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsXCJhcmlhLWxhYmVsXCI6dGhpcy5sYWJlbCgpLHJvbGU6XCJkaWFsb2dcIn0pfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnRFbF89bnVsbCx0aGlzLmRlc2NFbF89bnVsbCx0aGlzLnByZXZpb3VzbHlBY3RpdmVFbF89bnVsbCxyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LHQuYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVybiB4dCtcIiB2anMtaGlkZGVuIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5sYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsaXplKHRoaXMub3B0aW9uc18ubGFiZWx8fFwiTW9kYWwgV2luZG93XCIpfSx0LmRlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zXy5kZXNjcmlwdGlvbnx8dGhpcy5sb2NhbGl6ZShcIlRoaXMgaXMgYSBtb2RhbCB3aW5kb3cuXCIpO3JldHVybiB0aGlzLmNsb3NlYWJsZSgpJiYoZSs9XCIgXCIrdGhpcy5sb2NhbGl6ZShcIlRoaXMgbW9kYWwgY2FuIGJlIGNsb3NlZCBieSBwcmVzc2luZyB0aGUgRXNjYXBlIGtleSBvciBhY3RpdmF0aW5nIHRoZSBjbG9zZSBidXR0b24uXCIpKSxlfSx0Lm9wZW49ZnVuY3Rpb24oKXtpZighdGhpcy5vcGVuZWRfKXt2YXIgZT10aGlzLnBsYXllcigpO3RoaXMudHJpZ2dlcihcImJlZm9yZW1vZGFsb3BlblwiKSx0aGlzLm9wZW5lZF89ITAsIXRoaXMub3B0aW9uc18uZmlsbEFsd2F5cyYmKHRoaXMuaGFzQmVlbk9wZW5lZF98fHRoaXMuaGFzQmVlbkZpbGxlZF8pfHx0aGlzLmZpbGwoKSx0aGlzLndhc1BsYXlpbmdfPSFlLnBhdXNlZCgpLHRoaXMub3B0aW9uc18ucGF1c2VPbk9wZW4mJnRoaXMud2FzUGxheWluZ18mJmUucGF1c2UoKSx0aGlzLm9uKFwia2V5ZG93blwiLHRoaXMuaGFuZGxlS2V5RG93biksdGhpcy5oYWRDb250cm9sc189ZS5jb250cm9scygpLGUuY29udHJvbHMoITEpLHRoaXMuc2hvdygpLHRoaXMuY29uZGl0aW9uYWxGb2N1c18oKSx0aGlzLmVsKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLHRoaXMudHJpZ2dlcihcIm1vZGFsb3BlblwiKSx0aGlzLmhhc0JlZW5PcGVuZWRfPSEwfX0sdC5vcGVuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiZ0aGlzW2U/XCJvcGVuXCI6XCJjbG9zZVwiXSgpLHRoaXMub3BlbmVkX30sdC5jbG9zZT1mdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkXyl7dmFyIGU9dGhpcy5wbGF5ZXIoKTt0aGlzLnRyaWdnZXIoXCJiZWZvcmVtb2RhbGNsb3NlXCIpLHRoaXMub3BlbmVkXz0hMSx0aGlzLndhc1BsYXlpbmdfJiZ0aGlzLm9wdGlvbnNfLnBhdXNlT25PcGVuJiZlLnBsYXkoKSx0aGlzLm9mZihcImtleWRvd25cIix0aGlzLmhhbmRsZUtleURvd24pLHRoaXMuaGFkQ29udHJvbHNfJiZlLmNvbnRyb2xzKCEwKSx0aGlzLmhpZGUoKSx0aGlzLmVsKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksdGhpcy50cmlnZ2VyKFwibW9kYWxjbG9zZVwiKSx0aGlzLmNvbmRpdGlvbmFsQmx1cl8oKSx0aGlzLm9wdGlvbnNfLnRlbXBvcmFyeSYmdGhpcy5kaXNwb3NlKCl9fSx0LmNsb3NlYWJsZT1mdW5jdGlvbihlKXtpZihcImJvb2xlYW5cIj09dHlwZW9mIGUpe3ZhciB0PXRoaXMuY2xvc2VhYmxlXz0hIWUsbj10aGlzLmdldENoaWxkKFwiY2xvc2VCdXR0b25cIik7aWYodCYmIW4pe3ZhciByPXRoaXMuY29udGVudEVsXzt0aGlzLmNvbnRlbnRFbF89dGhpcy5lbF8sbj10aGlzLmFkZENoaWxkKFwiY2xvc2VCdXR0b25cIix7Y29udHJvbFRleHQ6XCJDbG9zZSBNb2RhbCBEaWFsb2dcIn0pLHRoaXMuY29udGVudEVsXz1yLHRoaXMub24obixcImNsb3NlXCIsdGhpcy5jbG9zZSl9IXQmJm4mJih0aGlzLm9mZihuLFwiY2xvc2VcIix0aGlzLmNsb3NlKSx0aGlzLnJlbW92ZUNoaWxkKG4pLG4uZGlzcG9zZSgpKX1yZXR1cm4gdGhpcy5jbG9zZWFibGVffSx0LmZpbGw9ZnVuY3Rpb24oKXt0aGlzLmZpbGxXaXRoKHRoaXMuY29udGVudCgpKX0sdC5maWxsV2l0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRlbnRFbCgpLG49dC5wYXJlbnROb2RlLHI9dC5uZXh0U2libGluZzt0aGlzLnRyaWdnZXIoXCJiZWZvcmVtb2RhbGZpbGxcIiksdGhpcy5oYXNCZWVuRmlsbGVkXz0hMCxuLnJlbW92ZUNoaWxkKHQpLHRoaXMuZW1wdHkoKSxIKHQsZSksdGhpcy50cmlnZ2VyKFwibW9kYWxmaWxsXCIpLHI/bi5pbnNlcnRCZWZvcmUodCxyKTpuLmFwcGVuZENoaWxkKHQpO3ZhciBpPXRoaXMuZ2V0Q2hpbGQoXCJjbG9zZUJ1dHRvblwiKTtpJiZuLmFwcGVuZENoaWxkKGkuZWxfKX0sdC5lbXB0eT1mdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcImJlZm9yZW1vZGFsZW1wdHlcIiksUih0aGlzLmNvbnRlbnRFbCgpKSx0aGlzLnRyaWdnZXIoXCJtb2RhbGVtcHR5XCIpfSx0LmNvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJih0aGlzLmNvbnRlbnRfPWUpLHRoaXMuY29udGVudF99LHQuY29uZGl0aW9uYWxGb2N1c189ZnVuY3Rpb24oKXt2YXIgZT1kLmFjdGl2ZUVsZW1lbnQsdD10aGlzLnBsYXllcl8uZWxfO3RoaXMucHJldmlvdXNseUFjdGl2ZUVsXz1udWxsLCF0LmNvbnRhaW5zKGUpJiZ0IT09ZXx8KHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXz1lLHRoaXMuZm9jdXMoKSl9LHQuY29uZGl0aW9uYWxCbHVyXz1mdW5jdGlvbigpe3RoaXMucHJldmlvdXNseUFjdGl2ZUVsXyYmKHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXy5mb2N1cygpLHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXz1udWxsKX0sdC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe2lmKGUuc3RvcFByb3BhZ2F0aW9uKCksUHQuaXNFdmVudEtleShlLFwiRXNjYXBlXCIpJiZ0aGlzLmNsb3NlYWJsZSgpKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCB0aGlzLmNsb3NlKCk7aWYoUHQuaXNFdmVudEtleShlLFwiVGFiXCIpKXtmb3IodmFyIHQsbj10aGlzLmZvY3VzYWJsZUVsc18oKSxyPXRoaXMuZWxfLnF1ZXJ5U2VsZWN0b3IoXCI6Zm9jdXNcIiksaT0wO2k8bi5sZW5ndGg7aSsrKWlmKHI9PT1uW2ldKXt0PWk7YnJlYWt9ZC5hY3RpdmVFbGVtZW50PT09dGhpcy5lbF8mJih0PTApLGUuc2hpZnRLZXkmJjA9PT10PyhuW24ubGVuZ3RoLTFdLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpKTplLnNoaWZ0S2V5fHx0IT09bi5sZW5ndGgtMXx8KG5bMF0uZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sdC5mb2N1c2FibGVFbHNfPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbF8ucXVlcnlTZWxlY3RvckFsbChcIipcIik7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLGZ1bmN0aW9uKGUpe3JldHVybihlIGluc3RhbmNlb2YgaC5IVE1MQW5jaG9yRWxlbWVudHx8ZSBpbnN0YW5jZW9mIGguSFRNTEFyZWFFbGVtZW50KSYmZS5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpfHwoZSBpbnN0YW5jZW9mIGguSFRNTElucHV0RWxlbWVudHx8ZSBpbnN0YW5jZW9mIGguSFRNTFNlbGVjdEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBoLkhUTUxUZXh0QXJlYUVsZW1lbnR8fGUgaW5zdGFuY2VvZiBoLkhUTUxCdXR0b25FbGVtZW50KSYmIWUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIil8fGUgaW5zdGFuY2VvZiBoLkhUTUxJRnJhbWVFbGVtZW50fHxlIGluc3RhbmNlb2YgaC5IVE1MT2JqZWN0RWxlbWVudHx8ZSBpbnN0YW5jZW9mIGguSFRNTEVtYmVkRWxlbWVudHx8ZS5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSYmLTEhPT1lLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpfHxlLmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKX0pfSxlfShPZSk7anQucHJvdG90eXBlLm9wdGlvbnNfPXtwYXVzZU9uT3BlbjohMCx0ZW1wb3Jhcnk6ITB9LE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiTW9kYWxEaWFsb2dcIixqdCk7dmFyIEF0PWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ7dm9pZCAwPT09ZSYmKGU9W10pLCh0PXIuY2FsbCh0aGlzKXx8dGhpcykudHJhY2tzXz1bXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUodCksXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2tzXy5sZW5ndGh9fSk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5hZGRUcmFjayhlW25dKTtyZXR1cm4gdH1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZFRyYWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhY2tzXy5sZW5ndGg7XCJcIit0IGluIHRoaXN8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNrc19bdF19fSksLTE9PT10aGlzLnRyYWNrc18uaW5kZXhPZihlKSYmKHRoaXMudHJhY2tzXy5wdXNoKGUpLHRoaXMudHJpZ2dlcih7dHJhY2s6ZSx0eXBlOlwiYWRkdHJhY2tcIix0YXJnZXQ6dGhpc30pKX0sdC5yZW1vdmVUcmFjaz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9dGhpcy5sZW5ndGg7bjxyO24rKylpZih0aGlzW25dPT09ZSl7KHQ9dGhpc1tuXSkub2ZmJiZ0Lm9mZigpLHRoaXMudHJhY2tzXy5zcGxpY2UobiwxKTticmVha310JiZ0aGlzLnRyaWdnZXIoe3RyYWNrOnQsdHlwZTpcInJlbW92ZXRyYWNrXCIsdGFyZ2V0OnRoaXN9KX0sdC5nZXRUcmFja0J5SWQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW51bGwsbj0wLHI9dGhpcy5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dGhpc1tuXTtpZihpLmlkPT09ZSl7dD1pO2JyZWFrfX1yZXR1cm4gdH0sZX0odmUpO2Zvcih2YXIgSXQgaW4gQXQucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfPXtjaGFuZ2U6XCJjaGFuZ2VcIixhZGR0cmFjazpcImFkZHRyYWNrXCIscmVtb3ZldHJhY2s6XCJyZW1vdmV0cmFja1wifSxBdC5wcm90b3R5cGUuYWxsb3dlZEV2ZW50c18pQXQucHJvdG90eXBlW1wib25cIitJdF09bnVsbDtmdW5jdGlvbiBPdChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKU9iamVjdC5rZXlzKGVbbl0pLmxlbmd0aCYmdC5pZCE9PWVbbl0uaWQmJihlW25dLmVuYWJsZWQ9ITEpfWZ1bmN0aW9uIER0KGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspT2JqZWN0LmtleXMoZVtuXSkubGVuZ3RoJiZ0LmlkIT09ZVtuXS5pZCYmKGVbbl0uc2VsZWN0ZWQ9ITEpfWZ1bmN0aW9uIE10KGUpe3ZhciB0PVtcInByb3RvY29sXCIsXCJob3N0bmFtZVwiLFwicG9ydFwiLFwicGF0aG5hbWVcIixcInNlYXJjaFwiLFwiaGFzaFwiLFwiaG9zdFwiXSxuPWQuY3JlYXRlRWxlbWVudChcImFcIik7bi5ocmVmPWU7dmFyIHIsaT1cIlwiPT09bi5ob3N0JiZcImZpbGU6XCIhPT1uLnByb3RvY29sO2kmJigocj1kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD0nPGEgaHJlZj1cIicrZSsnXCI+PC9hPicsbj1yLmZpcnN0Q2hpbGQsci5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwiZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTtcIiksZC5ib2R5LmFwcGVuZENoaWxkKHIpKTtmb3IodmFyIG89e30scz0wO3M8dC5sZW5ndGg7cysrKW9bdFtzXV09blt0W3NdXTtyZXR1cm5cImh0dHA6XCI9PT1vLnByb3RvY29sJiYoby5ob3N0PW8uaG9zdC5yZXBsYWNlKC86ODAkLyxcIlwiKSksXCJodHRwczpcIj09PW8ucHJvdG9jb2wmJihvLmhvc3Q9by5ob3N0LnJlcGxhY2UoLzo0NDMkLyxcIlwiKSksby5wcm90b2NvbHx8KG8ucHJvdG9jb2w9aC5sb2NhdGlvbi5wcm90b2NvbCksaSYmZC5ib2R5LnJlbW92ZUNoaWxkKHIpLG99ZnVuY3Rpb24gTnQoZSl7aWYoIWUubWF0Y2goL15odHRwcz86XFwvXFwvLykpe3ZhciB0PWQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmlubmVySFRNTD0nPGEgaHJlZj1cIicrZSsnXCI+eDwvYT4nLGU9dC5maXJzdENoaWxkLmhyZWZ9cmV0dXJuIGV9ZnVuY3Rpb24gTHQoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciB0PS9eKFxcLz8pKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/KShcXC4oW15cXC5cXC9cXD9dKykpKSg/OltcXC9dKnxbXFw/XS4qKSQvLmV4ZWMoZSk7aWYodClyZXR1cm4gdC5wb3AoKS50b0xvd2VyQ2FzZSgpfXJldHVyblwiXCJ9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ9aC5sb2NhdGlvbixuPU10KGUpO3JldHVybihcIjpcIj09PW4ucHJvdG9jb2w/dC5wcm90b2NvbDpuLnByb3RvY29sKStuLmhvc3QhPT10LnByb3RvY29sK3QuaG9zdH12YXIgUnQ9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlKXt2YXIgdDt2b2lkIDA9PT1lJiYoZT1bXSk7Zm9yKHZhciBuPWUubGVuZ3RoLTE7MDw9bjtuLS0paWYoZVtuXS5lbmFibGVkKXtPdChlLGVbbl0pO2JyZWFrfXJldHVybih0PXIuY2FsbCh0aGlzLGUpfHx0aGlzKS5jaGFuZ2luZ189ITEsdH1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZFRyYWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5lbmFibGVkJiZPdCh0aGlzLGUpLHIucHJvdG90eXBlLmFkZFRyYWNrLmNhbGwodGhpcyxlKSxlLmFkZEV2ZW50TGlzdGVuZXImJihlLmVuYWJsZWRDaGFuZ2VfPWZ1bmN0aW9uKCl7dC5jaGFuZ2luZ198fCh0LmNoYW5naW5nXz0hMCxPdCh0LGUpLHQuY2hhbmdpbmdfPSExLHQudHJpZ2dlcihcImNoYW5nZVwiKSl9LGUuYWRkRXZlbnRMaXN0ZW5lcihcImVuYWJsZWRjaGFuZ2VcIixlLmVuYWJsZWRDaGFuZ2VfKSl9LHQucmVtb3ZlVHJhY2s9ZnVuY3Rpb24oZSl7ci5wcm90b3R5cGUucmVtb3ZlVHJhY2suY2FsbCh0aGlzLGUpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5lbmFibGVkQ2hhbmdlXyYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVuYWJsZWRjaGFuZ2VcIixlLmVuYWJsZWRDaGFuZ2VfKSxlLmVuYWJsZWRDaGFuZ2VfPW51bGwpfSxlfShBdCksQnQ9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlKXt2YXIgdDt2b2lkIDA9PT1lJiYoZT1bXSk7Zm9yKHZhciBuPWUubGVuZ3RoLTE7MDw9bjtuLS0paWYoZVtuXS5zZWxlY3RlZCl7RHQoZSxlW25dKTticmVha31yZXR1cm4odD1yLmNhbGwodGhpcyxlKXx8dGhpcykuY2hhbmdpbmdfPSExLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZSh0KSxcInNlbGVjdGVkSW5kZXhcIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspaWYodGhpc1tlXS5zZWxlY3RlZClyZXR1cm4gZTtyZXR1cm4tMX0sc2V0OmZ1bmN0aW9uKCl7fX0pLHR9RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5hZGRUcmFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2Uuc2VsZWN0ZWQmJkR0KHRoaXMsZSksci5wcm90b3R5cGUuYWRkVHJhY2suY2FsbCh0aGlzLGUpLGUuYWRkRXZlbnRMaXN0ZW5lciYmKGUuc2VsZWN0ZWRDaGFuZ2VfPWZ1bmN0aW9uKCl7dC5jaGFuZ2luZ198fCh0LmNoYW5naW5nXz0hMCxEdCh0LGUpLHQuY2hhbmdpbmdfPSExLHQudHJpZ2dlcihcImNoYW5nZVwiKSl9LGUuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGVkY2hhbmdlXCIsZS5zZWxlY3RlZENoYW5nZV8pKX0sdC5yZW1vdmVUcmFjaz1mdW5jdGlvbihlKXtyLnByb3RvdHlwZS5yZW1vdmVUcmFjay5jYWxsKHRoaXMsZSksZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnNlbGVjdGVkQ2hhbmdlXyYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNlbGVjdGVkY2hhbmdlXCIsZS5zZWxlY3RlZENoYW5nZV8pLGUuc2VsZWN0ZWRDaGFuZ2VfPW51bGwpfSxlfShBdCksJHQ9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZSgpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31EZShlLG4pO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZFRyYWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bi5wcm90b3R5cGUuYWRkVHJhY2suY2FsbCh0aGlzLGUpLHRoaXMucXVldWVDaGFuZ2VffHwodGhpcy5xdWV1ZUNoYW5nZV89ZnVuY3Rpb24oKXtyZXR1cm4gdC5xdWV1ZVRyaWdnZXIoXCJjaGFuZ2VcIil9KSx0aGlzLnRyaWdnZXJTZWxlY3RlZGxhbmd1YWdlY2hhbmdlfHwodGhpcy50cmlnZ2VyU2VsZWN0ZWRsYW5ndWFnZWNoYW5nZV89ZnVuY3Rpb24oKXtyZXR1cm4gdC50cmlnZ2VyKFwic2VsZWN0ZWRsYW5ndWFnZWNoYW5nZVwiKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vZGVjaGFuZ2VcIix0aGlzLnF1ZXVlQ2hhbmdlXyk7LTE9PT1bXCJtZXRhZGF0YVwiLFwiY2hhcHRlcnNcIl0uaW5kZXhPZihlLmtpbmQpJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb2RlY2hhbmdlXCIsdGhpcy50cmlnZ2VyU2VsZWN0ZWRsYW5ndWFnZWNoYW5nZV8pfSx0LnJlbW92ZVRyYWNrPWZ1bmN0aW9uKGUpe24ucHJvdG90eXBlLnJlbW92ZVRyYWNrLmNhbGwodGhpcyxlKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXImJih0aGlzLnF1ZXVlQ2hhbmdlXyYmZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW9kZWNoYW5nZVwiLHRoaXMucXVldWVDaGFuZ2VfKSx0aGlzLnNlbGVjdGVkbGFuZ3VhZ2VjaGFuZ2VfJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb2RlY2hhbmdlXCIsdGhpcy50cmlnZ2VyU2VsZWN0ZWRsYW5ndWFnZWNoYW5nZV8pKX0sZX0oQXQpLEh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy50cmFja0VsZW1lbnRzXz1bXSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImxlbmd0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFja0VsZW1lbnRzXy5sZW5ndGh9fSk7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXRoaXMuYWRkVHJhY2tFbGVtZW50XyhlW3RdKX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5hZGRUcmFja0VsZW1lbnRfPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhY2tFbGVtZW50c18ubGVuZ3RoO1wiXCIrdCBpbiB0aGlzfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFja0VsZW1lbnRzX1t0XX19KSwtMT09PXRoaXMudHJhY2tFbGVtZW50c18uaW5kZXhPZihlKSYmdGhpcy50cmFja0VsZW1lbnRzXy5wdXNoKGUpfSx0LmdldFRyYWNrRWxlbWVudEJ5VHJhY2tfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTAscj10aGlzLnRyYWNrRWxlbWVudHNfLmxlbmd0aDtuPHI7bisrKWlmKGU9PT10aGlzLnRyYWNrRWxlbWVudHNfW25dLnRyYWNrKXt0PXRoaXMudHJhY2tFbGVtZW50c19bbl07YnJlYWt9cmV0dXJuIHR9LHQucmVtb3ZlVHJhY2tFbGVtZW50Xz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXRoaXMudHJhY2tFbGVtZW50c18ubGVuZ3RoO3Q8bjt0KyspaWYoZT09PXRoaXMudHJhY2tFbGVtZW50c19bdF0pe3RoaXMudHJhY2tFbGVtZW50c19bdF0udHJhY2smJlwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMudHJhY2tFbGVtZW50c19bdF0udHJhY2sub2ZmJiZ0aGlzLnRyYWNrRWxlbWVudHNfW3RdLnRyYWNrLm9mZigpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMudHJhY2tFbGVtZW50c19bdF0ub2ZmJiZ0aGlzLnRyYWNrRWxlbWVudHNfW3RdLm9mZigpLHRoaXMudHJhY2tFbGVtZW50c18uc3BsaWNlKHQsMSk7YnJlYWt9fSxlfSgpLFZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0LnByb3RvdHlwZS5zZXRDdWVzXy5jYWxsKHRoaXMsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoX319KX12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS5zZXRDdWVzXz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aHx8MCxuPTAscj1lLmxlbmd0aDt0aGlzLmN1ZXNfPWUsdGhpcy5sZW5ndGhfPWUubGVuZ3RoO2Z1bmN0aW9uIGkoZSl7XCJcIitlIGluIHRoaXN8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiXCIrZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vlc19bZV19fSl9aWYodDxyKWZvcihuPXQ7bjxyO24rKylpLmNhbGwodGhpcyxuKX0sZS5nZXRDdWVCeUlkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1udWxsLG49MCxyPXRoaXMubGVuZ3RoO248cjtuKyspe3ZhciBpPXRoaXNbbl07aWYoaS5pZD09PWUpe3Q9aTticmVha319cmV0dXJuIHR9LHR9KCksVXQ9e2FsdGVybmF0aXZlOlwiYWx0ZXJuYXRpdmVcIixjYXB0aW9uczpcImNhcHRpb25zXCIsbWFpbjpcIm1haW5cIixzaWduOlwic2lnblwiLHN1YnRpdGxlczpcInN1YnRpdGxlc1wiLGNvbW1lbnRhcnk6XCJjb21tZW50YXJ5XCJ9LFd0PXthbHRlcm5hdGl2ZTpcImFsdGVybmF0aXZlXCIsZGVzY3JpcHRpb25zOlwiZGVzY3JpcHRpb25zXCIsbWFpbjpcIm1haW5cIixcIm1haW4tZGVzY1wiOlwibWFpbi1kZXNjXCIsdHJhbnNsYXRpb246XCJ0cmFuc2xhdGlvblwiLGNvbW1lbnRhcnk6XCJjb21tZW50YXJ5XCJ9LEt0PXtzdWJ0aXRsZXM6XCJzdWJ0aXRsZXNcIixjYXB0aW9uczpcImNhcHRpb25zXCIsZGVzY3JpcHRpb25zOlwiZGVzY3JpcHRpb25zXCIsY2hhcHRlcnM6XCJjaGFwdGVyc1wiLG1ldGFkYXRhOlwibWV0YWRhdGFcIn0senQ9e2Rpc2FibGVkOlwiZGlzYWJsZWRcIixoaWRkZW46XCJoaWRkZW5cIixzaG93aW5nOlwic2hvd2luZ1wifSxxdD1mdW5jdGlvbihvKXtmdW5jdGlvbiBlKGUpe3ZhciB0O3ZvaWQgMD09PWUmJihlPXt9KSx0PW8uY2FsbCh0aGlzKXx8dGhpcztmdW5jdGlvbiBuKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShMZSh0KSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltlXX0sc2V0OmZ1bmN0aW9uKCl7fX0pfXZhciByPXtpZDplLmlkfHxcInZqc190cmFja19cIit0ZSgpLGtpbmQ6ZS5raW5kfHxcIlwiLGxhYmVsOmUubGFiZWx8fFwiXCIsbGFuZ3VhZ2U6ZS5sYW5ndWFnZXx8XCJcIn07Zm9yKHZhciBpIGluIHIpbihpKTtyZXR1cm4gdH1yZXR1cm4gRGUoZSxvKSxlfSh2ZSksR3Q9T2JqZWN0LmZyZWV6ZSh7cGFyc2VVcmw6TXQsZ2V0QWJzb2x1dGVVUkw6TnQsZ2V0RmlsZUV4dGVuc2lvbjpMdCxpc0Nyb3NzT3JpZ2luOkZ0fSksWHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9WXQuY2FsbChlKTtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcIltvYmplY3QgUmVnRXhwXVwiIT09dHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKGU9PT13aW5kb3cuc2V0VGltZW91dHx8ZT09PXdpbmRvdy5hbGVydHx8ZT09PXdpbmRvdy5jb25maXJtfHxlPT09d2luZG93LnByb21wdCl9LFl0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gUXQoZSl7dmFyIHQ9bm4uY2FsbChlKSxuPVwiW29iamVjdCBBcmd1bWVudHNdXCI9PT10O3JldHVybiBuPW58fFwiW29iamVjdCBBcnJheV1cIiE9PXQmJm51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoJiYwPD1lLmxlbmd0aCYmXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT09bm4uY2FsbChlLmNhbGxlZSl9dmFyIEp0LFp0PUFycmF5LnByb3RvdHlwZS5zbGljZSxlbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHRuPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxmdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fFwiW29iamVjdCBGdW5jdGlvbl1cIiE9PWVuLmNhbGwobikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgXCIrbik7Zm9yKHZhciByLGk9WnQuY2FsbChhcmd1bWVudHMsMSksZT1NYXRoLm1heCgwLG4ubGVuZ3RoLWkubGVuZ3RoKSxvPVtdLHM9MDtzPGU7cysrKW8ucHVzaChcIiRcIitzKTtpZihyPUZ1bmN0aW9uKFwiYmluZGVyXCIsXCJyZXR1cm4gZnVuY3Rpb24gKFwiK28uam9pbihcIixcIikrXCIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfVwiKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiByKXt2YXIgZT1uLmFwcGx5KHRoaXMsaS5jb25jYXQoWnQuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChlKT09PWU/ZTp0aGlzfXJldHVybiBuLmFwcGx5KHQsaS5jb25jYXQoWnQuY2FsbChhcmd1bWVudHMpKSl9KSxuLnByb3RvdHlwZSl7ZnVuY3Rpb24gYSgpe31hLnByb3RvdHlwZT1uLnByb3RvdHlwZSxyLnByb3RvdHlwZT1uZXcgYSxhLnByb3RvdHlwZT1udWxsfXJldHVybiByfSxubj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2lmKCFPYmplY3Qua2V5cyl7ZnVuY3Rpb24gcm4oZSl7dmFyIHQ9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdCYmdC5wcm90b3R5cGU9PT1lfXZhciBvbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHNuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYW49UXQsbG49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxjbj0hbG4uY2FsbCh7dG9TdHJpbmc6bnVsbH0sXCJ0b1N0cmluZ1wiKSx1bj1sbi5jYWxsKGZ1bmN0aW9uKCl7fSxcInByb3RvdHlwZVwiKSxobj1bXCJ0b1N0cmluZ1wiLFwidG9Mb2NhbGVTdHJpbmdcIixcInZhbHVlT2ZcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwiY29uc3RydWN0b3JcIl0sZG49eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0scG49ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93KXJldHVybiExO2Zvcih2YXIgZSBpbiB3aW5kb3cpdHJ5e2lmKCFkbltcIiRcIitlXSYmb24uY2FsbCh3aW5kb3csZSkmJm51bGwhPT13aW5kb3dbZV0mJlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3dbZV0pdHJ5e3JuKHdpbmRvd1tlXSl9Y2F0Y2goZSl7cmV0dXJuITB9fWNhdGNoKGUpe3JldHVybiEwfXJldHVybiExfSgpO0p0PWZ1bmN0aW9uKGUpe3ZhciB0PW51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSxuPVwiW29iamVjdCBGdW5jdGlvbl1cIj09PXNuLmNhbGwoZSkscj1hbihlKSxpPXQmJlwiW29iamVjdCBTdHJpbmddXCI9PT1zbi5jYWxsKGUpLG89W107aWYoIXQmJiFuJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdFwiKTt2YXIgcz11biYmbjtpZihpJiYwPGUubGVuZ3RoJiYhb24uY2FsbChlLDApKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKW8ucHVzaChTdHJpbmcoYSkpO2lmKHImJjA8ZS5sZW5ndGgpZm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpby5wdXNoKFN0cmluZyhsKSk7ZWxzZSBmb3IodmFyIGMgaW4gZSlzJiZcInByb3RvdHlwZVwiPT09Y3x8IW9uLmNhbGwoZSxjKXx8by5wdXNoKFN0cmluZyhjKSk7aWYoY24pZm9yKHZhciB1PWZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3d8fCFwbilyZXR1cm4gcm4oZSk7dHJ5e3JldHVybiBybihlKX1jYXRjaChlKXtyZXR1cm4hMX19KGUpLGg9MDtoPGhuLmxlbmd0aDsrK2gpdSYmXCJjb25zdHJ1Y3RvclwiPT09aG5baF18fCFvbi5jYWxsKGUsaG5baF0pfHxvLnB1c2goaG5baF0pO3JldHVybiBvfX12YXIgZm49SnQsdm49QXJyYXkucHJvdG90eXBlLnNsaWNlLHluPU9iamVjdC5rZXlzLGduPXluP2Z1bmN0aW9uKGUpe3JldHVybiB5bihlKX06Zm4sbW49T2JqZWN0LmtleXM7Z24uc2hpbT1mdW5jdGlvbigpe09iamVjdC5rZXlzP2Z1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gZSYmZS5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3RofSgxLDIpfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFF0KGUpP21uKHZuLmNhbGwoZSkpOm1uKGUpfSk6T2JqZWN0LmtleXM9Z247cmV0dXJuIE9iamVjdC5rZXlzfHxnbn07ZnVuY3Rpb24gX24oZSx0LG4scil7dCBpbiBlJiYoIWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJlwiW29iamVjdCBGdW5jdGlvbl1cIj09PUNuLmNhbGwoZSl9KHIpfHwhcigpKXx8KHduP1NuKGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bil9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPTI8YXJndW1lbnRzLmxlbmd0aD9uOnt9LGk9VG4odCk7a24mJihpPUVuLmNhbGwoaSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKSk7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKz0xKV9uKGUsaVtvXSx0W2lbb11dLHJbaVtvXV0pfXZhciBUbj1nbixrbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woXCJmb29cIiksQ249T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxFbj1BcnJheS5wcm90b3R5cGUuY29uY2F0LFNuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx3bj1TbiYmZnVuY3Rpb24oKXt2YXIgZT17fTt0cnl7Zm9yKHZhciB0IGluIFNuKGUsXCJ4XCIse2VudW1lcmFibGU6ITEsdmFsdWU6ZX0pLGUpcmV0dXJuITE7cmV0dXJuIGUueD09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2JuLnN1cHBvcnRzRGVzY3JpcHRvcnM9ISF3bjtmdW5jdGlvbiBQbihlLHQpe2lmKDE8YXJndW1lbnRzLmxlbmd0aCYmXCJib29sZWFuXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTt2YXIgbj1cIiQgXCIrZTtpZighKG4gaW4gSG4pKXRocm93IG5ldyBTeW50YXhFcnJvcihcImludHJpbnNpYyBcIitlK1wiIGRvZXMgbm90IGV4aXN0IVwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgSG5bbl0mJiF0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnRyaW5zaWMgXCIrZStcIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSFcIik7cmV0dXJuIEhuW25dfWZ1bmN0aW9uIHhuKGUsdCxuLHIpe3ZhciBpPUtuW3RdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFduKFwidW5rbm93biByZWNvcmQgdHlwZTogXCIrdCk7aWYoIWkoZSxyKSl0aHJvdyBuZXcgVW4obitcIiBtdXN0IGJlIGEgXCIrdCl9ZnVuY3Rpb24gam4oZSl7cmV0dXJuIDA8PWU/MTotMX1mdW5jdGlvbiBBbihlKXt0cnl7dmFyIHQ9WG4uY2FsbChlKTtyZXR1cm4gWW4udGVzdCh0KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gSW4oZSl7aWYoIWUpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmXCJvYmplY3RcIiE9dHlwZW9mIGUpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmIWUucHJvdG90eXBlKXJldHVybiEwO2lmKEpuKXJldHVybiBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIUFuKGUpJiYoWG4uY2FsbChlKSwhMCl9Y2F0Y2goZSl7cmV0dXJuITF9fShlKTtpZihBbihlKSlyZXR1cm4hMTt2YXIgdD1Rbi5jYWxsKGUpO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09PXR9ZnVuY3Rpb24gT24oZSl7cmV0dXJuIG51bGw9PT1lfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZcIm9iamVjdFwiIT10eXBlb2YgZX1mdW5jdGlvbiBEbigpe3ZhciBlPWlyLlRvU3RyaW5nKGlyLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtyZXR1cm4gb3Iob3IoZSxzcixcIlwiKSxhcixcIlwiKX1mdW5jdGlvbiBNbigpe3JldHVybiBTdHJpbmcucHJvdG90eXBlLnRyaW0mJlwi4oCLXCI9PT1cIuKAi1wiLnRyaW0oKT9TdHJpbmcucHJvdG90eXBlLnRyaW06RG59dmFyIE5uLExuPWJuLEZuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I/ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsXCJjYWxsZWVcIikuZ2V0fSgpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcn0sUm49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yLEJuPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffSwkbj1cInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhBcnJheT9ObjpCbihVaW50OEFycmF5KSxIbj17XCIkICVBcnJheSVcIjpBcnJheSxcIiQgJUFycmF5QnVmZmVyJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcj9ObjpBcnJheUJ1ZmZlcixcIiQgJUFycmF5QnVmZmVyUHJvdG90eXBlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcj9ObjpBcnJheUJ1ZmZlci5wcm90b3R5cGUsXCIkICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJVwiOlJuP0JuKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6Tm4sXCIkICVBcnJheVByb3RvdHlwZSVcIjpBcnJheS5wcm90b3R5cGUsXCIkICVBcnJheVByb3RvX2VudHJpZXMlXCI6QXJyYXkucHJvdG90eXBlLmVudHJpZXMsXCIkICVBcnJheVByb3RvX2ZvckVhY2glXCI6QXJyYXkucHJvdG90eXBlLmZvckVhY2gsXCIkICVBcnJheVByb3RvX2tleXMlXCI6QXJyYXkucHJvdG90eXBlLmtleXMsXCIkICVBcnJheVByb3RvX3ZhbHVlcyVcIjpBcnJheS5wcm90b3R5cGUudmFsdWVzLFwiJCAlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJVwiOk5uLFwiJCAlQXN5bmNGdW5jdGlvbiVcIjp2b2lkIDAsXCIkICVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJVwiOk5uLFwiJCAlQXN5bmNHZW5lcmF0b3IlXCI6Tm4sXCIkICVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJVwiOnZvaWQgMCxcIiQgJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJVwiOk5uLFwiJCAlQXN5bmNJdGVyYXRvclByb3RvdHlwZSVcIjpObixcIiQgJUF0b21pY3MlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIEF0b21pY3M/Tm46QXRvbWljcyxcIiQgJUJvb2xlYW4lXCI6Qm9vbGVhbixcIiQgJUJvb2xlYW5Qcm90b3R5cGUlXCI6Qm9vbGVhbi5wcm90b3R5cGUsXCIkICVEYXRhVmlldyVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgRGF0YVZpZXc/Tm46RGF0YVZpZXcsXCIkICVEYXRhVmlld1Byb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgRGF0YVZpZXc/Tm46RGF0YVZpZXcucHJvdG90eXBlLFwiJCAlRGF0ZSVcIjpEYXRlLFwiJCAlRGF0ZVByb3RvdHlwZSVcIjpEYXRlLnByb3RvdHlwZSxcIiQgJWRlY29kZVVSSSVcIjpkZWNvZGVVUkksXCIkICVkZWNvZGVVUklDb21wb25lbnQlXCI6ZGVjb2RlVVJJQ29tcG9uZW50LFwiJCAlZW5jb2RlVVJJJVwiOmVuY29kZVVSSSxcIiQgJWVuY29kZVVSSUNvbXBvbmVudCVcIjplbmNvZGVVUklDb21wb25lbnQsXCIkICVFcnJvciVcIjpFcnJvcixcIiQgJUVycm9yUHJvdG90eXBlJVwiOkVycm9yLnByb3RvdHlwZSxcIiQgJWV2YWwlXCI6ZXZhbCxcIiQgJUV2YWxFcnJvciVcIjpFdmFsRXJyb3IsXCIkICVFdmFsRXJyb3JQcm90b3R5cGUlXCI6RXZhbEVycm9yLnByb3RvdHlwZSxcIiQgJUZsb2F0MzJBcnJheSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgRmxvYXQzMkFycmF5P05uOkZsb2F0MzJBcnJheSxcIiQgJUZsb2F0MzJBcnJheVByb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgRmxvYXQzMkFycmF5P05uOkZsb2F0MzJBcnJheS5wcm90b3R5cGUsXCIkICVGbG9hdDY0QXJyYXklXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIEZsb2F0NjRBcnJheT9ObjpGbG9hdDY0QXJyYXksXCIkICVGbG9hdDY0QXJyYXlQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIEZsb2F0NjRBcnJheT9ObjpGbG9hdDY0QXJyYXkucHJvdG90eXBlLFwiJCAlRnVuY3Rpb24lXCI6RnVuY3Rpb24sXCIkICVGdW5jdGlvblByb3RvdHlwZSVcIjpGdW5jdGlvbi5wcm90b3R5cGUsXCIkICVHZW5lcmF0b3IlXCI6Tm4sXCIkICVHZW5lcmF0b3JGdW5jdGlvbiVcIjp2b2lkIDAsXCIkICVHZW5lcmF0b3JQcm90b3R5cGUlXCI6Tm4sXCIkICVJbnQ4QXJyYXklXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIEludDhBcnJheT9ObjpJbnQ4QXJyYXksXCIkICVJbnQ4QXJyYXlQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIEludDhBcnJheT9ObjpJbnQ4QXJyYXkucHJvdG90eXBlLFwiJCAlSW50MTZBcnJheSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgSW50MTZBcnJheT9ObjpJbnQxNkFycmF5LFwiJCAlSW50MTZBcnJheVByb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgSW50MTZBcnJheT9ObjpJbnQ4QXJyYXkucHJvdG90eXBlLFwiJCAlSW50MzJBcnJheSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgSW50MzJBcnJheT9ObjpJbnQzMkFycmF5LFwiJCAlSW50MzJBcnJheVByb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgSW50MzJBcnJheT9ObjpJbnQzMkFycmF5LnByb3RvdHlwZSxcIiQgJWlzRmluaXRlJVwiOmlzRmluaXRlLFwiJCAlaXNOYU4lXCI6aXNOYU4sXCIkICVJdGVyYXRvclByb3RvdHlwZSVcIjpSbj9CbihCbihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTpObixcIiQgJUpTT04lXCI6SlNPTixcIiQgJUpTT05QYXJzZSVcIjpKU09OLnBhcnNlLFwiJCAlTWFwJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBNYXA/Tm46TWFwLFwiJCAlTWFwSXRlcmF0b3JQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCYmUm4/Qm4oKG5ldyBNYXApW1N5bWJvbC5pdGVyYXRvcl0oKSk6Tm4sXCIkICVNYXBQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIE1hcD9ObjpNYXAucHJvdG90eXBlLFwiJCAlTWF0aCVcIjpNYXRoLFwiJCAlTnVtYmVyJVwiOk51bWJlcixcIiQgJU51bWJlclByb3RvdHlwZSVcIjpOdW1iZXIucHJvdG90eXBlLFwiJCAlT2JqZWN0JVwiOk9iamVjdCxcIiQgJU9iamVjdFByb3RvdHlwZSVcIjpPYmplY3QucHJvdG90eXBlLFwiJCAlT2JqUHJvdG9fdG9TdHJpbmclXCI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcIiQgJU9ialByb3RvX3ZhbHVlT2YlXCI6T2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mLFwiJCAlcGFyc2VGbG9hdCVcIjpwYXJzZUZsb2F0LFwiJCAlcGFyc2VJbnQlXCI6cGFyc2VJbnQsXCIkICVQcm9taXNlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBQcm9taXNlP05uOlByb21pc2UsXCIkICVQcm9taXNlUHJvdG90eXBlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBQcm9taXNlP05uOlByb21pc2UucHJvdG90eXBlLFwiJCAlUHJvbWlzZVByb3RvX3RoZW4lXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFByb21pc2U/Tm46UHJvbWlzZS5wcm90b3R5cGUudGhlbixcIiQgJVByb21pc2VfYWxsJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBQcm9taXNlP05uOlByb21pc2UuYWxsLFwiJCAlUHJvbWlzZV9yZWplY3QlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFByb21pc2U/Tm46UHJvbWlzZS5yZWplY3QsXCIkICVQcm9taXNlX3Jlc29sdmUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFByb21pc2U/Tm46UHJvbWlzZS5yZXNvbHZlLFwiJCAlUHJveHklXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFByb3h5P05uOlByb3h5LFwiJCAlUmFuZ2VFcnJvciVcIjpSYW5nZUVycm9yLFwiJCAlUmFuZ2VFcnJvclByb3RvdHlwZSVcIjpSYW5nZUVycm9yLnByb3RvdHlwZSxcIiQgJVJlZmVyZW5jZUVycm9yJVwiOlJlZmVyZW5jZUVycm9yLFwiJCAlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlXCI6UmVmZXJlbmNlRXJyb3IucHJvdG90eXBlLFwiJCAlUmVmbGVjdCVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdD9ObjpSZWZsZWN0LFwiJCAlUmVnRXhwJVwiOlJlZ0V4cCxcIiQgJVJlZ0V4cFByb3RvdHlwZSVcIjpSZWdFeHAucHJvdG90eXBlLFwiJCAlU2V0JVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBTZXQ/Tm46U2V0LFwiJCAlU2V0SXRlcmF0b3JQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldCYmUm4/Qm4oKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSk6Tm4sXCIkICVTZXRQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFNldD9ObjpTZXQucHJvdG90eXBlLFwiJCAlU2hhcmVkQXJyYXlCdWZmZXIlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyP05uOlNoYXJlZEFycmF5QnVmZmVyLFwiJCAlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyP05uOlNoYXJlZEFycmF5QnVmZmVyLnByb3RvdHlwZSxcIiQgJVN0cmluZyVcIjpTdHJpbmcsXCIkICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSVcIjpSbj9CbihcIlwiW1N5bWJvbC5pdGVyYXRvcl0oKSk6Tm4sXCIkICVTdHJpbmdQcm90b3R5cGUlXCI6U3RyaW5nLnByb3RvdHlwZSxcIiQgJVN5bWJvbCVcIjpSbj9TeW1ib2w6Tm4sXCIkICVTeW1ib2xQcm90b3R5cGUlXCI6Um4/U3ltYm9sLnByb3RvdHlwZTpObixcIiQgJVN5bnRheEVycm9yJVwiOlN5bnRheEVycm9yLFwiJCAlU3ludGF4RXJyb3JQcm90b3R5cGUlXCI6U3ludGF4RXJyb3IucHJvdG90eXBlLFwiJCAlVGhyb3dUeXBlRXJyb3IlXCI6Rm4sXCIkICVUeXBlZEFycmF5JVwiOiRuLFwiJCAlVHlwZWRBcnJheVByb3RvdHlwZSVcIjokbj8kbi5wcm90b3R5cGU6Tm4sXCIkICVUeXBlRXJyb3IlXCI6VHlwZUVycm9yLFwiJCAlVHlwZUVycm9yUHJvdG90eXBlJVwiOlR5cGVFcnJvci5wcm90b3R5cGUsXCIkICVVaW50OEFycmF5JVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50OEFycmF5P05uOlVpbnQ4QXJyYXksXCIkICVVaW50OEFycmF5UHJvdG90eXBlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50OEFycmF5P05uOlVpbnQ4QXJyYXkucHJvdG90eXBlLFwiJCAlVWludDhDbGFtcGVkQXJyYXklXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P05uOlVpbnQ4Q2xhbXBlZEFycmF5LFwiJCAlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlXCI6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P05uOlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcIiQgJVVpbnQxNkFycmF5JVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50MTZBcnJheT9ObjpVaW50MTZBcnJheSxcIiQgJVVpbnQxNkFycmF5UHJvdG90eXBlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50MTZBcnJheT9ObjpVaW50MTZBcnJheS5wcm90b3R5cGUsXCIkICVVaW50MzJBcnJheSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDMyQXJyYXk/Tm46VWludDMyQXJyYXksXCIkICVVaW50MzJBcnJheVByb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDMyQXJyYXk/Tm46VWludDMyQXJyYXkucHJvdG90eXBlLFwiJCAlVVJJRXJyb3IlXCI6VVJJRXJyb3IsXCIkICVVUklFcnJvclByb3RvdHlwZSVcIjpVUklFcnJvci5wcm90b3R5cGUsXCIkICVXZWFrTWFwJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP05uOldlYWtNYXAsXCIkICVXZWFrTWFwUHJvdG90eXBlJVwiOlwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP05uOldlYWtNYXAucHJvdG90eXBlLFwiJCAlV2Vha1NldCVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha1NldD9ObjpXZWFrU2V0LFwiJCAlV2Vha1NldFByb3RvdHlwZSVcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha1NldD9ObjpXZWFrU2V0LnByb3RvdHlwZX0sVm49dG4uY2FsbChGdW5jdGlvbi5jYWxsLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLFVuPVBuKFwiJVR5cGVFcnJvciVcIiksV249UG4oXCIlU3ludGF4RXJyb3IlXCIpLEtuPXtcIlByb3BlcnR5IERlc2NyaXB0b3JcIjpmdW5jdGlvbihlLHQpe2lmKFwiT2JqZWN0XCIhPT1lLlR5cGUodCkpcmV0dXJuITE7dmFyIG49e1wiW1tDb25maWd1cmFibGVdXVwiOiEwLFwiW1tFbnVtZXJhYmxlXV1cIjohMCxcIltbR2V0XV1cIjohMCxcIltbU2V0XV1cIjohMCxcIltbVmFsdWVdXVwiOiEwLFwiW1tXcml0YWJsZV1dXCI6ITB9O2Zvcih2YXIgciBpbiB0KWlmKFZuKHQscikmJiFuW3JdKXJldHVybiExO3ZhciBpPVZuKHQsXCJbW1ZhbHVlXV1cIiksbz1Wbih0LFwiW1tHZXRdXVwiKXx8Vm4odCxcIltbU2V0XV1cIik7aWYoaSYmbyl0aHJvdyBuZXcgVW4oXCJQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnNcIik7cmV0dXJuITB9fSx6bj1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVybiBlIT1lfSxxbj1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVybiBlIT1lfSxHbj1OdW1iZXIuaXNGaW5pdGV8fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiYhcW4oZSkmJmUhPT0xLzAmJmUhPT0tMS8wfSxYbj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsWW49L15cXHMqY2xhc3NcXGIvLFFuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsSm49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnLFpuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZigobj0xPGFyZ3VtZW50cy5sZW5ndGg/dDpcIltvYmplY3QgRGF0ZV1cIj09PVpuLmNhbGwoZSk/U3RyaW5nOk51bWJlcikhPT1TdHJpbmcmJm4hPT1OdW1iZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkXCIpO3ZhciByLGksbz1uPT09U3RyaW5nP1tcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdOltcInZhbHVlT2ZcIixcInRvU3RyaW5nXCJdO2ZvcihpPTA7aTxvLmxlbmd0aDsrK2kpaWYoSW4oZVtvW2ldXSkmJihyPWVbb1tpXV0oKSxPbihyKSkpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIGRlZmF1bHQgdmFsdWVcIil9LHRyPVBuKFwiJU9iamVjdCVcIiksbnI9UG4oXCIlVHlwZUVycm9yJVwiKSxycj1QbihcIiVTdHJpbmclXCIpLGlyPXtUb1ByaW1pdGl2ZTpmdW5jdGlvbihlLHQpe3JldHVybiBPbihlKT9lOjE8YXJndW1lbnRzLmxlbmd0aD9lcihlLHQpOmVyKGUpfSxUb0Jvb2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuISFlfSxUb051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4rZX0sVG9JbnRlZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuVG9OdW1iZXIoZSk7cmV0dXJuIHpuKHQpPzA6MCE9PXQmJkduKHQpP2puKHQpKk1hdGguZmxvb3IoTWF0aC5hYnModCkpOnR9LFRvSW50MzI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVG9OdW1iZXIoZSk+PjB9LFRvVWludDMyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlRvTnVtYmVyKGUpPj4+MH0sVG9VaW50MTY6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5Ub051bWJlcihlKTtyZXR1cm4gem4odCl8fDA9PT10fHwhR24odCk/MDpmdW5jdGlvbihlLHQpe3ZhciBuPWUldDtyZXR1cm4gTWF0aC5mbG9vcigwPD1uP246bit0KX0oam4odCkqTWF0aC5mbG9vcihNYXRoLmFicyh0KSksNjU1MzYpfSxUb1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gcnIoZSl9LFRvT2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKGUpLHRyKGUpfSxDaGVja09iamVjdENvZXJjaWJsZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpdGhyb3cgbmV3IG5yKHR8fFwiQ2Fubm90IGNhbGwgbWV0aG9kIG9uIFwiK2UpO3JldHVybiBlfSxJc0NhbGxhYmxlOkluLFNhbWVWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MS9lPT0xL3Q6em4oZSkmJnpuKHQpfSxUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9cIk51bGxcIjpcInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cIlVuZGVmaW5lZFwiOlwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fFwib2JqZWN0XCI9PXR5cGVvZiBlP1wiT2JqZWN0XCI6XCJudW1iZXJcIj09dHlwZW9mIGU/XCJOdW1iZXJcIjpcImJvb2xlYW5cIj09dHlwZW9mIGU/XCJCb29sZWFuXCI6XCJzdHJpbmdcIj09dHlwZW9mIGU/XCJTdHJpbmdcIjp2b2lkIDB9LElzUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKGUpe2lmKFwiT2JqZWN0XCIhPT10aGlzLlR5cGUoZSkpcmV0dXJuITE7dmFyIHQ9e1wiW1tDb25maWd1cmFibGVdXVwiOiEwLFwiW1tFbnVtZXJhYmxlXV1cIjohMCxcIltbR2V0XV1cIjohMCxcIltbU2V0XV1cIjohMCxcIltbVmFsdWVdXVwiOiEwLFwiW1tXcml0YWJsZV1dXCI6ITB9O2Zvcih2YXIgbiBpbiBlKWlmKFZuKGUsbikmJiF0W25dKXJldHVybiExO3ZhciByPVZuKGUsXCJbW1ZhbHVlXV1cIiksaT1WbihlLFwiW1tHZXRdXVwiKXx8Vm4oZSxcIltbU2V0XV1cIik7aWYociYmaSl0aHJvdyBuZXcgbnIoXCJQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnNcIik7cmV0dXJuITB9LElzQWNjZXNzb3JEZXNjcmlwdG9yOmZ1bmN0aW9uKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBlJiYoeG4odGhpcyxcIlByb3BlcnR5IERlc2NyaXB0b3JcIixcIkRlc2NcIixlKSwhKCFWbihlLFwiW1tHZXRdXVwiKSYmIVZuKGUsXCJbW1NldF1dXCIpKSl9LElzRGF0YURlc2NyaXB0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJih4bih0aGlzLFwiUHJvcGVydHkgRGVzY3JpcHRvclwiLFwiRGVzY1wiLGUpLCEoIVZuKGUsXCJbW1ZhbHVlXV1cIikmJiFWbihlLFwiW1tXcml0YWJsZV1dXCIpKSl9LElzR2VuZXJpY0Rlc2NyaXB0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJih4bih0aGlzLFwiUHJvcGVydHkgRGVzY3JpcHRvclwiLFwiRGVzY1wiLGUpLCF0aGlzLklzQWNjZXNzb3JEZXNjcmlwdG9yKGUpJiYhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKGUpKX0sRnJvbVByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZih4bih0aGlzLFwiUHJvcGVydHkgRGVzY3JpcHRvclwiLFwiRGVzY1wiLGUpLHRoaXMuSXNEYXRhRGVzY3JpcHRvcihlKSlyZXR1cm57dmFsdWU6ZVtcIltbVmFsdWVdXVwiXSx3cml0YWJsZTohIWVbXCJbW1dyaXRhYmxlXV1cIl0sZW51bWVyYWJsZTohIWVbXCJbW0VudW1lcmFibGVdXVwiXSxjb25maWd1cmFibGU6ISFlW1wiW1tDb25maWd1cmFibGVdXVwiXX07aWYodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihlKSlyZXR1cm57Z2V0OmVbXCJbW0dldF1dXCJdLHNldDplW1wiW1tTZXRdXVwiXSxlbnVtZXJhYmxlOiEhZVtcIltbRW51bWVyYWJsZV1dXCJdLGNvbmZpZ3VyYWJsZTohIWVbXCJbW0NvbmZpZ3VyYWJsZV1dXCJdfTt0aHJvdyBuZXcgbnIoXCJGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvclwiKX0sVG9Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24oZSl7aWYoXCJPYmplY3RcIiE9PXRoaXMuVHlwZShlKSl0aHJvdyBuZXcgbnIoXCJUb1Byb3BlcnR5RGVzY3JpcHRvciByZXF1aXJlcyBhbiBvYmplY3RcIik7dmFyIHQ9e307aWYoVm4oZSxcImVudW1lcmFibGVcIikmJih0W1wiW1tFbnVtZXJhYmxlXV1cIl09dGhpcy5Ub0Jvb2xlYW4oZS5lbnVtZXJhYmxlKSksVm4oZSxcImNvbmZpZ3VyYWJsZVwiKSYmKHRbXCJbW0NvbmZpZ3VyYWJsZV1dXCJdPXRoaXMuVG9Cb29sZWFuKGUuY29uZmlndXJhYmxlKSksVm4oZSxcInZhbHVlXCIpJiYodFtcIltbVmFsdWVdXVwiXT1lLnZhbHVlKSxWbihlLFwid3JpdGFibGVcIikmJih0W1wiW1tXcml0YWJsZV1dXCJdPXRoaXMuVG9Cb29sZWFuKGUud3JpdGFibGUpKSxWbihlLFwiZ2V0XCIpKXt2YXIgbj1lLmdldDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmIXRoaXMuSXNDYWxsYWJsZShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTt0W1wiW1tHZXRdXVwiXT1ufWlmKFZuKGUsXCJzZXRcIikpe3ZhciByPWUuc2V0O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiByJiYhdGhpcy5Jc0NhbGxhYmxlKHIpKXRocm93IG5ldyBucihcInNldHRlciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dFtcIltbU2V0XV1cIl09cn1pZigoVm4odCxcIltbR2V0XV1cIil8fFZuKHQsXCJbW1NldF1dXCIpKSYmKFZuKHQsXCJbW1ZhbHVlXV1cIil8fFZuKHQsXCJbW1dyaXRhYmxlXV1cIikpKXRocm93IG5ldyBucihcIkludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlXCIpO3JldHVybiB0fX0sb3I9dG4uY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksc3I9L15bXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGXSsvLGFyPS9bXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGXSskLyxscj10bi5jYWxsKEZ1bmN0aW9uLmNhbGwsTW4oKSk7TG4obHIse2dldFBvbHlmaWxsOk1uLGltcGxlbWVudGF0aW9uOkRuLHNoaW06ZnVuY3Rpb24oKXt2YXIgZT1NbigpO3JldHVybiBMbihTdHJpbmcucHJvdG90eXBlLHt0cmltOmV9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbSE9PWV9fSksZX19KTt2YXIgY3I9bHIsdXI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxocj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGRyPWZ1bmN0aW9uKGUsdCxuKXtpZighSW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvblwiKTt2YXIgcjszPD1hcmd1bWVudHMubGVuZ3RoJiYocj1uKSxcIltvYmplY3QgQXJyYXldXCI9PT11ci5jYWxsKGUpP2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspaHIuY2FsbChlLHIpJiYobnVsbD09bj90KGVbcl0scixlKTp0LmNhbGwobixlW3JdLHIsZSkpfShlLHQscik6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyludWxsPT1uP3QoZS5jaGFyQXQocikscixlKTp0LmNhbGwobixlLmNoYXJBdChyKSxyLGUpfShlLHQscik6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgciBpbiBlKWhyLmNhbGwoZSxyKSYmKG51bGw9PW4/dChlW3JdLHIsZSk6dC5jYWxsKG4sZVtyXSxyLGUpKX0oZSx0LHIpfSxwcj1mdW5jdGlvbihlKXtpZighZSlyZXR1cm57fTt2YXIgaT17fTtyZXR1cm4gZHIoY3IoZSkuc3BsaXQoXCJcXG5cIiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKFwiOlwiKSxuPWNyKGUuc2xpY2UoMCx0KSkudG9Mb3dlckNhc2UoKSxyPWNyKGUuc2xpY2UodCsxKSk7XCJ1bmRlZmluZWRcIj09dHlwZW9mIGlbbl0/aVtuXT1yOiFmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9KGlbbl0pP2lbbl09W2lbbl0scl06aVtuXS5wdXNoKHIpfSksaX0sZnI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbil2ci5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx2cj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciB5cj1tcjtmdW5jdGlvbiBncihlLHQsbil7dmFyIHI9ZTtyZXR1cm4gWHQodCk/KG49dCxcInN0cmluZ1wiPT10eXBlb2YgZSYmKHI9e3VyaTplfSkpOnI9ZnIodCx7dXJpOmV9KSxyLmNhbGxiYWNrPW4scn1mdW5jdGlvbiBtcihlLHQsbil7cmV0dXJuIF9yKHQ9Z3IoZSx0LG4pKX1mdW5jdGlvbiBfcihyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygci5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoXCJjYWxsYmFjayBhcmd1bWVudCBtaXNzaW5nXCIpO3ZhciBpPSExLG89ZnVuY3Rpb24oZSx0LG4pe2l8fChpPSEwLHIuY2FsbGJhY2soZSx0LG4pKX07ZnVuY3Rpb24gdChlKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGEpLGUgaW5zdGFuY2VvZiBFcnJvcnx8KGU9bmV3IEVycm9yKFwiXCIrKGV8fFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSkpLGUuc3RhdHVzQ29kZT0wLG8oZSx2KX1mdW5jdGlvbiBlKCl7aWYoIXMpe3ZhciBlO2NsZWFyVGltZW91dChhKSxlPXIudXNlWERSJiZ2b2lkIDA9PT1sLnN0YXR1cz8yMDA6MTIyMz09PWwuc3RhdHVzPzIwNDpsLnN0YXR1czt2YXIgdD12LG49bnVsbDtyZXR1cm4gMCE9PWU/KHQ9e2JvZHk6ZnVuY3Rpb24oKXt2YXIgZT12b2lkIDA7aWYoZT1sLnJlc3BvbnNlP2wucmVzcG9uc2U6bC5yZXNwb25zZVRleHR8fGZ1bmN0aW9uKGUpe2lmKFwiZG9jdW1lbnRcIj09PWUucmVzcG9uc2VUeXBlKXJldHVybiBlLnJlc3BvbnNlWE1MO3ZhciB0PWUucmVzcG9uc2VYTUwmJlwicGFyc2VyZXJyb3JcIj09PWUucmVzcG9uc2VYTUwuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lO3JldHVyblwiXCIhPT1lLnJlc3BvbnNlVHlwZXx8dD9udWxsOmUucmVzcG9uc2VYTUx9KGwpLGYpdHJ5e2U9SlNPTi5wYXJzZShlKX1jYXRjaChlKXt9cmV0dXJuIGV9KCksc3RhdHVzQ29kZTplLG1ldGhvZDp1LGhlYWRlcnM6e30sdXJsOmMscmF3UmVxdWVzdDpsfSxsLmdldEFsbFJlc3BvbnNlSGVhZGVycyYmKHQuaGVhZGVycz1wcihsLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSkpOm49bmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIiksbyhuLHQsdC5ib2R5KX19dmFyIG4scyxhLGw9ci54aHJ8fG51bGwsYz0obD1sfHwoci5jb3JzfHxyLnVzZVhEUj9uZXcgbXIuWERvbWFpblJlcXVlc3Q6bmV3IG1yLlhNTEh0dHBSZXF1ZXN0KSkudXJsPXIudXJpfHxyLnVybCx1PWwubWV0aG9kPXIubWV0aG9kfHxcIkdFVFwiLGg9ci5ib2R5fHxyLmRhdGEsZD1sLmhlYWRlcnM9ci5oZWFkZXJzfHx7fSxwPSEhci5zeW5jLGY9ITEsdj17Ym9keTp2b2lkIDAsaGVhZGVyczp7fSxzdGF0dXNDb2RlOjAsbWV0aG9kOnUsdXJsOmMscmF3UmVxdWVzdDpsfTtpZihcImpzb25cImluIHImJiExIT09ci5qc29uJiYoZj0hMCxkLmFjY2VwdHx8ZC5BY2NlcHR8fChkLkFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiksXCJHRVRcIiE9PXUmJlwiSEVBRFwiIT09dSYmKGRbXCJjb250ZW50LXR5cGVcIl18fGRbXCJDb250ZW50LVR5cGVcIl18fChkW1wiQ29udGVudC1UeXBlXCJdPVwiYXBwbGljYXRpb24vanNvblwiKSxoPUpTT04uc3RyaW5naWZ5KCEwPT09ci5qc29uP2g6ci5qc29uKSkpLGwub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWwucmVhZHlTdGF0ZSYmc2V0VGltZW91dChlLDApfSxsLm9ubG9hZD1lLGwub25lcnJvcj10LGwub25wcm9ncmVzcz1mdW5jdGlvbigpe30sbC5vbmFib3J0PWZ1bmN0aW9uKCl7cz0hMH0sbC5vbnRpbWVvdXQ9dCxsLm9wZW4odSxjLCFwLHIudXNlcm5hbWUsci5wYXNzd29yZCkscHx8KGwud2l0aENyZWRlbnRpYWxzPSEhci53aXRoQ3JlZGVudGlhbHMpLCFwJiYwPHIudGltZW91dCYmKGE9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFzKXtzPSEwLGwuYWJvcnQoXCJ0aW1lb3V0XCIpO3ZhciBlPW5ldyBFcnJvcihcIlhNTEh0dHBSZXF1ZXN0IHRpbWVvdXRcIik7ZS5jb2RlPVwiRVRJTUVET1VUXCIsdChlKX19LHIudGltZW91dCkpLGwuc2V0UmVxdWVzdEhlYWRlcilmb3IobiBpbiBkKWQuaGFzT3duUHJvcGVydHkobikmJmwuc2V0UmVxdWVzdEhlYWRlcihuLGRbbl0pO2Vsc2UgaWYoci5oZWFkZXJzJiYhZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4hMTtyZXR1cm4hMH0oci5oZWFkZXJzKSl0aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNhbm5vdCBiZSBzZXQgb24gYW4gWERvbWFpblJlcXVlc3Qgb2JqZWN0XCIpO3JldHVyblwicmVzcG9uc2VUeXBlXCJpbiByJiYobC5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLFwiYmVmb3JlU2VuZFwiaW4gciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5iZWZvcmVTZW5kJiZyLmJlZm9yZVNlbmQobCksbC5zZW5kKGh8fG51bGwpLGx9bXIuWE1MSHR0cFJlcXVlc3Q9aC5YTUxIdHRwUmVxdWVzdHx8ZnVuY3Rpb24oKXt9LG1yLlhEb21haW5SZXF1ZXN0PVwid2l0aENyZWRlbnRpYWxzXCJpbiBuZXcgbXIuWE1MSHR0cFJlcXVlc3Q/bXIuWE1MSHR0cFJlcXVlc3Q6aC5YRG9tYWluUmVxdWVzdCxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXQoZVtuXSl9KFtcImdldFwiLFwicHV0XCIsXCJwb3N0XCIsXCJwYXRjaFwiLFwiaGVhZFwiLFwiZGVsZXRlXCJdLGZ1bmN0aW9uKHIpe21yW1wiZGVsZXRlXCI9PT1yP1wiZGVsXCI6cl09ZnVuY3Rpb24oZSx0LG4pe3JldHVybih0PWdyKGUsdCxuKSkubWV0aG9kPXIudG9VcHBlckNhc2UoKSxfcih0KX19KTtmdW5jdGlvbiBicihlLHQpe3ZhciBuPW5ldyBoLldlYlZUVC5QYXJzZXIoaCxoLnZ0dGpzLGguV2ViVlRULlN0cmluZ0RlY29kZXIoKSkscj1bXTtuLm9uY3VlPWZ1bmN0aW9uKGUpe3QuYWRkQ3VlKGUpfSxuLm9ucGFyc2luZ2Vycm9yPWZ1bmN0aW9uKGUpe3IucHVzaChlKX0sbi5vbmZsdXNoPWZ1bmN0aW9uKCl7dC50cmlnZ2VyKHt0eXBlOlwibG9hZGVkZGF0YVwiLHRhcmdldDp0fSl9LG4ucGFyc2UoZSksMDxyLmxlbmd0aCYmKGguY29uc29sZSYmaC5jb25zb2xlLmdyb3VwQ29sbGFwc2VkJiZoLmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCJUZXh0IFRyYWNrIHBhcnNpbmcgZXJyb3JzIGZvciBcIit0LnNyYyksci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBmLmVycm9yKGUpfSksaC5jb25zb2xlJiZoLmNvbnNvbGUuZ3JvdXBFbmQmJmguY29uc29sZS5ncm91cEVuZCgpKSxuLmZsdXNoKCl9dmFyIFRyPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ7aWYodm9pZCAwPT09ZSYmKGU9e30pLCFlLnRlY2gpdGhyb3cgbmV3IEVycm9yKFwiQSB0ZWNoIHdhcyBub3QgcHJvdmlkZWQuXCIpO3ZhciBuPUllKGUse2tpbmQ6S3RbZS5raW5kXXx8XCJzdWJ0aXRsZXNcIixsYW5ndWFnZTplLmxhbmd1YWdlfHxlLnNyY2xhbmd8fFwiXCJ9KSxyPXp0W24ubW9kZV18fFwiZGlzYWJsZWRcIixpPW4uZGVmYXVsdDtcIm1ldGFkYXRhXCIhPT1uLmtpbmQmJlwiY2hhcHRlcnNcIiE9PW4ua2luZHx8KHI9XCJoaWRkZW5cIiksKHQ9Yy5jYWxsKHRoaXMsbil8fHRoaXMpLnRlY2hfPW4udGVjaCx0LmN1ZXNfPVtdLHQuYWN0aXZlQ3Vlc189W107dmFyIG89bmV3IFZ0KHQuY3Vlc18pLHM9bmV3IFZ0KHQuYWN0aXZlQ3Vlc18pLGE9ITEsbD1wZShMZSh0KSxmdW5jdGlvbigpe3RoaXMuYWN0aXZlQ3Vlcz10aGlzLmFjdGl2ZUN1ZXMsYSYmKHRoaXMudHJpZ2dlcihcImN1ZWNoYW5nZVwiKSxhPSExKX0pO3JldHVyblwiZGlzYWJsZWRcIiE9PXImJnQudGVjaF8ucmVhZHkoZnVuY3Rpb24oKXt0LnRlY2hfLm9uKFwidGltZXVwZGF0ZVwiLGwpfSwhMCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTGUodCkse2RlZmF1bHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxzZXQ6ZnVuY3Rpb24oKXt9fSxtb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7enRbZV0mJihcImRpc2FibGVkXCIhPT0ocj1lKT90aGlzLnRlY2hfLnJlYWR5KGZ1bmN0aW9uKCl7dC50ZWNoXy5vbihcInRpbWV1cGRhdGVcIixsKX0sITApOnRoaXMudGVjaF8ub2ZmKFwidGltZXVwZGF0ZVwiLGwpLHRoaXMudHJpZ2dlcihcIm1vZGVjaGFuZ2VcIikpfX0sY3Vlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkXz9vOm51bGx9LHNldDpmdW5jdGlvbigpe319LGFjdGl2ZUN1ZXM6e2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmxvYWRlZF8pcmV0dXJuIG51bGw7aWYoMD09PXRoaXMuY3Vlcy5sZW5ndGgpcmV0dXJuIHM7Zm9yKHZhciBlPXRoaXMudGVjaF8uY3VycmVudFRpbWUoKSx0PVtdLG49MCxyPXRoaXMuY3Vlcy5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dGhpcy5jdWVzW25dO2kuc3RhcnRUaW1lPD1lJiZpLmVuZFRpbWU+PWU/dC5wdXNoKGkpOmkuc3RhcnRUaW1lPT09aS5lbmRUaW1lJiZpLnN0YXJ0VGltZTw9ZSYmaS5zdGFydFRpbWUrLjU+PWUmJnQucHVzaChpKX1pZihhPSExLHQubGVuZ3RoIT09dGhpcy5hY3RpdmVDdWVzXy5sZW5ndGgpYT0hMDtlbHNlIGZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKS0xPT09dGhpcy5hY3RpdmVDdWVzXy5pbmRleE9mKHRbb10pJiYoYT0hMCk7cmV0dXJuIHRoaXMuYWN0aXZlQ3Vlc189dCxzLnNldEN1ZXNfKHRoaXMuYWN0aXZlQ3Vlc18pLHN9LHNldDpmdW5jdGlvbigpe319fSksbi5zcmM/KHQuc3JjPW4uc3JjLGZ1bmN0aW9uKGUscil7dmFyIHQ9e3VyaTplfSxuPUZ0KGUpO24mJih0LmNvcnM9bikseXIodCxwZSh0aGlzLGZ1bmN0aW9uKGUsdCxuKXtpZihlKXJldHVybiBmLmVycm9yKGUsdCk7ci5sb2FkZWRfPSEwLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGguV2ViVlRUP3IudGVjaF8mJnIudGVjaF8uYW55KFtcInZ0dGpzbG9hZGVkXCIsXCJ2dHRqc2Vycm9yXCJdLGZ1bmN0aW9uKGUpe2lmKFwidnR0anNlcnJvclwiIT09ZS50eXBlKXJldHVybiBicihuLHIpO2YuZXJyb3IoXCJ2dHRqcyBmYWlsZWQgdG8gbG9hZCwgc3RvcHBpbmcgdHJ5aW5nIHRvIHByb2Nlc3MgXCIrci5zcmMpfSk6YnIobixyKX0pKX0obi5zcmMsTGUodCkpKTp0LmxvYWRlZF89ITAsdH1EZShlLGMpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZEN1ZT1mdW5jdGlvbihlKXt2YXIgdD1lO2lmKGgudnR0anMmJiEoZSBpbnN0YW5jZW9mIGgudnR0anMuVlRUQ3VlKSl7Zm9yKHZhciBuIGluIHQ9bmV3IGgudnR0anMuVlRUQ3VlKGUuc3RhcnRUaW1lLGUuZW5kVGltZSxlLnRleHQpLGUpbiBpbiB0fHwodFtuXT1lW25dKTt0LmlkPWUuaWQsdC5vcmlnaW5hbEN1ZV89ZX1mb3IodmFyIHI9dGhpcy50ZWNoXy50ZXh0VHJhY2tzKCksaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0hPT10aGlzJiZyW2ldLnJlbW92ZUN1ZSh0KTt0aGlzLmN1ZXNfLnB1c2godCksdGhpcy5jdWVzLnNldEN1ZXNfKHRoaXMuY3Vlc18pfSx0LnJlbW92ZUN1ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jdWVzXy5sZW5ndGg7dC0tOyl7dmFyIG49dGhpcy5jdWVzX1t0XTtpZihuPT09ZXx8bi5vcmlnaW5hbEN1ZV8mJm4ub3JpZ2luYWxDdWVfPT09ZSl7dGhpcy5jdWVzXy5zcGxpY2UodCwxKSx0aGlzLmN1ZXMuc2V0Q3Vlc18odGhpcy5jdWVzXyk7YnJlYWt9fX0sZX0ocXQpO1RyLnByb3RvdHlwZS5hbGxvd2VkRXZlbnRzXz17Y3VlY2hhbmdlOlwiY3VlY2hhbmdlXCJ9O3ZhciBrcj1mdW5jdGlvbihpKXtmdW5jdGlvbiBlKGUpe3ZhciB0O3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj1JZShlLHtraW5kOld0W2Uua2luZF18fFwiXCJ9KTt0PWkuY2FsbCh0aGlzLG4pfHx0aGlzO3ZhciByPSExO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUodCksXCJlbmFibGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24oZSl7XCJib29sZWFuXCI9PXR5cGVvZiBlJiZlIT09ciYmKHI9ZSx0aGlzLnRyaWdnZXIoXCJlbmFibGVkY2hhbmdlXCIpKX19KSxuLmVuYWJsZWQmJih0LmVuYWJsZWQ9bi5lbmFibGVkKSx0LmxvYWRlZF89ITAsdH1yZXR1cm4gRGUoZSxpKSxlfShxdCksQ3I9ZnVuY3Rpb24oaSl7ZnVuY3Rpb24gZShlKXt2YXIgdDt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49SWUoZSx7a2luZDpVdFtlLmtpbmRdfHxcIlwifSk7dD1pLmNhbGwodGhpcyxuKXx8dGhpczt2YXIgcj0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KExlKHQpLFwic2VsZWN0ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldDpmdW5jdGlvbihlKXtcImJvb2xlYW5cIj09dHlwZW9mIGUmJmUhPT1yJiYocj1lLHRoaXMudHJpZ2dlcihcInNlbGVjdGVkY2hhbmdlXCIpKX19KSxuLnNlbGVjdGVkJiYodC5zZWxlY3RlZD1uLnNlbGVjdGVkKSx0fXJldHVybiBEZShlLGkpLGV9KHF0KSxFcj1mdW5jdGlvbihpKXtmdW5jdGlvbiBlKGUpe3ZhciB0LG47dm9pZCAwPT09ZSYmKGU9e30pLHQ9aS5jYWxsKHRoaXMpfHx0aGlzO3ZhciByPW5ldyBUcihlKTtyZXR1cm4gdC5raW5kPXIua2luZCx0LnNyYz1yLnNyYyx0LnNyY2xhbmc9ci5sYW5ndWFnZSx0LmxhYmVsPXIubGFiZWwsdC5kZWZhdWx0PXIuZGVmYXVsdCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhMZSh0KSx7cmVhZHlTdGF0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSx0cmFjazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fX0pLG49MCxyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZWRkYXRhXCIsZnVuY3Rpb24oKXtuPTIsdC50cmlnZ2VyKHt0eXBlOlwibG9hZFwiLHRhcmdldDpMZSh0KX0pfSksdH1yZXR1cm4gRGUoZSxpKSxlfSh2ZSk7RXIucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfPXtsb2FkOlwibG9hZFwifSxFci5OT05FPTAsRXIuTE9BRElORz0xLEVyLkxPQURFRD0yLEVyLkVSUk9SPTM7dmFyIFNyPXthdWRpbzp7TGlzdENsYXNzOlJ0LFRyYWNrQ2xhc3M6a3IsY2FwaXRhbE5hbWU6XCJBdWRpb1wifSx2aWRlbzp7TGlzdENsYXNzOkJ0LFRyYWNrQ2xhc3M6Q3IsY2FwaXRhbE5hbWU6XCJWaWRlb1wifSx0ZXh0OntMaXN0Q2xhc3M6JHQsVHJhY2tDbGFzczpUcixjYXBpdGFsTmFtZTpcIlRleHRcIn19O09iamVjdC5rZXlzKFNyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1NyW2VdLmdldHRlck5hbWU9ZStcIlRyYWNrc1wiLFNyW2VdLnByaXZhdGVOYW1lPWUrXCJUcmFja3NfXCJ9KTt2YXIgd3I9e3JlbW90ZVRleHQ6e0xpc3RDbGFzczokdCxUcmFja0NsYXNzOlRyLGNhcGl0YWxOYW1lOlwiUmVtb3RlVGV4dFwiLGdldHRlck5hbWU6XCJyZW1vdGVUZXh0VHJhY2tzXCIscHJpdmF0ZU5hbWU6XCJyZW1vdGVUZXh0VHJhY2tzX1wifSxyZW1vdGVUZXh0RWw6e0xpc3RDbGFzczpIdCxUcmFja0NsYXNzOkVyLGNhcGl0YWxOYW1lOlwiUmVtb3RlVGV4dFRyYWNrRWxzXCIsZ2V0dGVyTmFtZTpcInJlbW90ZVRleHRUcmFja0Vsc1wiLHByaXZhdGVOYW1lOlwicmVtb3RlVGV4dFRyYWNrRWxzX1wifX0sUHI9SWUoU3Isd3IpO3dyLm5hbWVzPU9iamVjdC5rZXlzKHdyKSxTci5uYW1lcz1PYmplY3Qua2V5cyhTciksUHIubmFtZXM9W10uY29uY2F0KHdyLm5hbWVzKS5jb25jYXQoU3IubmFtZXMpO3ZhciB4cj17fTt2YXIganI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLGUpe3ZhciByO3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09ZSYmKGU9ZnVuY3Rpb24oKXt9KSxuLnJlcG9ydFRvdWNoQWN0aXZpdHk9ITEsKHI9dC5jYWxsKHRoaXMsbnVsbCxuLGUpfHx0aGlzKS5oYXNTdGFydGVkXz0hMSxyLm9uKFwicGxheWluZ1wiLGZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkXz0hMH0pLHIub24oXCJsb2Fkc3RhcnRcIixmdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZF89ITF9KSxQci5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVByW2VdO24mJm5bdC5nZXR0ZXJOYW1lXSYmKHJbdC5wcml2YXRlTmFtZV09blt0LmdldHRlck5hbWVdKX0pLHIuZmVhdHVyZXNQcm9ncmVzc0V2ZW50c3x8ci5tYW51YWxQcm9ncmVzc09uKCksci5mZWF0dXJlc1RpbWV1cGRhdGVFdmVudHN8fHIubWFudWFsVGltZVVwZGF0ZXNPbigpLFtcIlRleHRcIixcIkF1ZGlvXCIsXCJWaWRlb1wiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyExPT09bltcIm5hdGl2ZVwiK2UrXCJUcmFja3NcIl0mJihyW1wiZmVhdHVyZXNOYXRpdmVcIitlK1wiVHJhY2tzXCJdPSExKX0pLCExPT09bi5uYXRpdmVDYXB0aW9uc3x8ITE9PT1uLm5hdGl2ZVRleHRUcmFja3M/ci5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3M9ITE6ITAhPT1uLm5hdGl2ZUNhcHRpb25zJiYhMCE9PW4ubmF0aXZlVGV4dFRyYWNrc3x8KHIuZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzPSEwKSxyLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrc3x8ci5lbXVsYXRlVGV4dFRyYWNrcygpLHIuYXV0b1JlbW90ZVRleHRUcmFja3NfPW5ldyBQci50ZXh0Lkxpc3RDbGFzcyxyLmluaXRUcmFja0xpc3RlbmVycygpLG4ubmF0aXZlQ29udHJvbHNGb3JUb3VjaHx8ci5lbWl0VGFwRXZlbnRzKCksci5jb25zdHJ1Y3RvciYmKHIubmFtZV89ci5jb25zdHJ1Y3Rvci5uYW1lfHxcIlVua25vd24gVGVjaFwiKSxyfURlKG4sdCk7dmFyIGU9bi5wcm90b3R5cGU7cmV0dXJuIGUudHJpZ2dlclNvdXJjZXNldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuaXNSZWFkeV98fHRoaXMub25lKFwicmVhZHlcIixmdW5jdGlvbigpe3JldHVybiB0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC50cmlnZ2VyU291cmNlc2V0KGUpfSwxKX0pLHRoaXMudHJpZ2dlcih7c3JjOmUsdHlwZTpcInNvdXJjZXNldFwifSl9LGUubWFudWFsUHJvZ3Jlc3NPbj1mdW5jdGlvbigpe3RoaXMub24oXCJkdXJhdGlvbmNoYW5nZVwiLHRoaXMub25EdXJhdGlvbkNoYW5nZSksdGhpcy5tYW51YWxQcm9ncmVzcz0hMCx0aGlzLm9uZShcInJlYWR5XCIsdGhpcy50cmFja1Byb2dyZXNzKX0sZS5tYW51YWxQcm9ncmVzc09mZj1mdW5jdGlvbigpe3RoaXMubWFudWFsUHJvZ3Jlc3M9ITEsdGhpcy5zdG9wVHJhY2tpbmdQcm9ncmVzcygpLHRoaXMub2ZmKFwiZHVyYXRpb25jaGFuZ2VcIix0aGlzLm9uRHVyYXRpb25DaGFuZ2UpfSxlLnRyYWNrUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dGhpcy5zdG9wVHJhY2tpbmdQcm9ncmVzcygpLHRoaXMucHJvZ3Jlc3NJbnRlcnZhbD10aGlzLnNldEludGVydmFsKHBlKHRoaXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1ZmZlcmVkUGVyY2VudCgpO3RoaXMuYnVmZmVyZWRQZXJjZW50XyE9PWUmJnRoaXMudHJpZ2dlcihcInByb2dyZXNzXCIpLDE9PT0odGhpcy5idWZmZXJlZFBlcmNlbnRfPWUpJiZ0aGlzLnN0b3BUcmFja2luZ1Byb2dyZXNzKCl9KSw1MDApfSxlLm9uRHVyYXRpb25DaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5kdXJhdGlvbl89dGhpcy5kdXJhdGlvbigpfSxlLmJ1ZmZlcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHV0KDAsMCl9LGUuYnVmZmVyZWRQZXJjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGh0KHRoaXMuYnVmZmVyZWQoKSx0aGlzLmR1cmF0aW9uXyl9LGUuc3RvcFRyYWNraW5nUHJvZ3Jlc3M9ZnVuY3Rpb24oKXt0aGlzLmNsZWFySW50ZXJ2YWwodGhpcy5wcm9ncmVzc0ludGVydmFsKX0sZS5tYW51YWxUaW1lVXBkYXRlc09uPWZ1bmN0aW9uKCl7dGhpcy5tYW51YWxUaW1lVXBkYXRlcz0hMCx0aGlzLm9uKFwicGxheVwiLHRoaXMudHJhY2tDdXJyZW50VGltZSksdGhpcy5vbihcInBhdXNlXCIsdGhpcy5zdG9wVHJhY2tpbmdDdXJyZW50VGltZSl9LGUubWFudWFsVGltZVVwZGF0ZXNPZmY9ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbFRpbWVVcGRhdGVzPSExLHRoaXMuc3RvcFRyYWNraW5nQ3VycmVudFRpbWUoKSx0aGlzLm9mZihcInBsYXlcIix0aGlzLnRyYWNrQ3VycmVudFRpbWUpLHRoaXMub2ZmKFwicGF1c2VcIix0aGlzLnN0b3BUcmFja2luZ0N1cnJlbnRUaW1lKX0sZS50cmFja0N1cnJlbnRUaW1lPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50VGltZUludGVydmFsJiZ0aGlzLnN0b3BUcmFja2luZ0N1cnJlbnRUaW1lKCksdGhpcy5jdXJyZW50VGltZUludGVydmFsPXRoaXMuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoe3R5cGU6XCJ0aW1ldXBkYXRlXCIsdGFyZ2V0OnRoaXMsbWFudWFsbHlUcmlnZ2VyZWQ6ITB9KX0sMjUwKX0sZS5zdG9wVHJhY2tpbmdDdXJyZW50VGltZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJJbnRlcnZhbCh0aGlzLmN1cnJlbnRUaW1lSW50ZXJ2YWwpLHRoaXMudHJpZ2dlcih7dHlwZTpcInRpbWV1cGRhdGVcIix0YXJnZXQ6dGhpcyxtYW51YWxseVRyaWdnZXJlZDohMH0pfSxlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyVHJhY2tzKFNyLm5hbWVzKSx0aGlzLm1hbnVhbFByb2dyZXNzJiZ0aGlzLm1hbnVhbFByb2dyZXNzT2ZmKCksdGhpcy5tYW51YWxUaW1lVXBkYXRlcyYmdGhpcy5tYW51YWxUaW1lVXBkYXRlc09mZigpLHQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sZS5jbGVhclRyYWNrcz1mdW5jdGlvbihlKXt2YXIgaT10aGlzOyhlPVtdLmNvbmNhdChlKSkuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHQ9aVtlK1wiVHJhY2tzXCJdKCl8fFtdLG49dC5sZW5ndGg7bi0tOyl7dmFyIHI9dFtuXTtcInRleHRcIj09PWUmJmkucmVtb3ZlUmVtb3RlVGV4dFRyYWNrKHIpLHQucmVtb3ZlVHJhY2socil9fSl9LGUuY2xlYW51cEF1dG9UZXh0VHJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYXV0b1JlbW90ZVRleHRUcmFja3NffHxbXSx0PWUubGVuZ3RoO3QtLTspe3ZhciBuPWVbdF07dGhpcy5yZW1vdmVSZW1vdGVUZXh0VHJhY2sobil9fSxlLnJlc2V0PWZ1bmN0aW9uKCl7fSxlLmVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYodGhpcy5lcnJvcl89bmV3IG10KGUpLHRoaXMudHJpZ2dlcihcImVycm9yXCIpKSx0aGlzLmVycm9yX30sZS5wbGF5ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNTdGFydGVkXz91dCgwLDApOnV0KCl9LGUuc2V0Q3VycmVudFRpbWU9ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbFRpbWVVcGRhdGVzJiZ0aGlzLnRyaWdnZXIoe3R5cGU6XCJ0aW1ldXBkYXRlXCIsdGFyZ2V0OnRoaXMsbWFudWFsbHlUcmlnZ2VyZWQ6ITB9KX0sZS5pbml0VHJhY2tMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO1NyLm5hbWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2kudHJpZ2dlcihlK1widHJhY2tjaGFuZ2VcIil9dmFyIG49U3JbZV0scj1pW24uZ2V0dGVyTmFtZV0oKTtyLmFkZEV2ZW50TGlzdGVuZXIoXCJyZW1vdmV0cmFja1wiLHQpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImFkZHRyYWNrXCIsdCksaS5vbihcImRpc3Bvc2VcIixmdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlbW92ZXRyYWNrXCIsdCksci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWRkdHJhY2tcIix0KX0pfSl9LGUuYWRkV2ViVnR0U2NyaXB0Xz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWguV2ViVlRUKWlmKGQuYm9keS5jb250YWlucyh0aGlzLmVsKCkpKXtpZighdGhpcy5vcHRpb25zX1tcInZ0dC5qc1wiXSYmYSh4cikmJjA8T2JqZWN0LmtleXMoeHIpLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLnRyaWdnZXIoXCJ2dHRqc2xvYWRlZFwiKTt2YXIgdD1kLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7dC5zcmM9dGhpcy5vcHRpb25zX1tcInZ0dC5qc1wiXXx8XCJodHRwczovL3Zqcy56ZW5jZG4ubmV0L3Z0dGpzLzAuMTQuMS92dHQubWluLmpzXCIsdC5vbmxvYWQ9ZnVuY3Rpb24oKXtlLnRyaWdnZXIoXCJ2dHRqc2xvYWRlZFwiKX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7ZS50cmlnZ2VyKFwidnR0anNlcnJvclwiKX0sdGhpcy5vbihcImRpc3Bvc2VcIixmdW5jdGlvbigpe3Qub25sb2FkPW51bGwsdC5vbmVycm9yPW51bGx9KSxoLldlYlZUVD0hMCx0aGlzLmVsKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KX1lbHNlIHRoaXMucmVhZHkodGhpcy5hZGRXZWJWdHRTY3JpcHRfKX0sZS5lbXVsYXRlVGV4dFRyYWNrcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIHIuYWRkVHJhY2soZS50cmFjayl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gci5yZW1vdmVUcmFjayhlLnRyYWNrKX12YXIgZT10aGlzLHI9dGhpcy50ZXh0VHJhY2tzKCksaT10aGlzLnJlbW90ZVRleHRUcmFja3MoKTtpLm9uKFwiYWRkdHJhY2tcIix0KSxpLm9uKFwicmVtb3ZldHJhY2tcIixuKSx0aGlzLmFkZFdlYlZ0dFNjcmlwdF8oKTtmdW5jdGlvbiBvKCl7cmV0dXJuIGUudHJpZ2dlcihcInRleHR0cmFja2NoYW5nZVwiKX1mdW5jdGlvbiBzKCl7bygpO2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgdD1yW2VdO3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImN1ZWNoYW5nZVwiLG8pLFwic2hvd2luZ1wiPT09dC5tb2RlJiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJjdWVjaGFuZ2VcIixvKX19cygpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHMpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImFkZHRyYWNrXCIscyksci5hZGRFdmVudExpc3RlbmVyKFwicmVtb3ZldHJhY2tcIixzKSx0aGlzLm9uKFwiZGlzcG9zZVwiLGZ1bmN0aW9uKCl7aS5vZmYoXCJhZGR0cmFja1wiLHQpLGkub2ZmKFwicmVtb3ZldHJhY2tcIixuKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixzKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhZGR0cmFja1wiLHMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlbW92ZXRyYWNrXCIscyk7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspe3JbZV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImN1ZWNoYW5nZVwiLG8pfX0pfSxlLmFkZFRleHRUcmFjaz1mdW5jdGlvbihlLHQsbil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiVGV4dFRyYWNrIGtpbmQgaXMgcmVxdWlyZWQgYnV0IHdhcyBub3QgcHJvdmlkZWRcIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7dm9pZCAwPT09aSYmKGk9e30pO3ZhciBvPWUudGV4dFRyYWNrcygpO2kua2luZD10LG4mJihpLmxhYmVsPW4pLHImJihpLmxhbmd1YWdlPXIpLGkudGVjaD1lO3ZhciBzPW5ldyBQci50ZXh0LlRyYWNrQ2xhc3MoaSk7cmV0dXJuIG8uYWRkVHJhY2socyksc30odGhpcyxlLHQsbil9LGUuY3JlYXRlUmVtb3RlVGV4dFRyYWNrPWZ1bmN0aW9uKGUpe3ZhciB0PUllKGUse3RlY2g6dGhpc30pO3JldHVybiBuZXcgd3IucmVtb3RlVGV4dEVsLlRyYWNrQ2xhc3ModCl9LGUuYWRkUmVtb3RlVGV4dFRyYWNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHI9dGhpcy5jcmVhdGVSZW1vdGVUZXh0VHJhY2soZSk7cmV0dXJuITAhPT10JiYhMSE9PXQmJihmLndhcm4oJ0NhbGxpbmcgYWRkUmVtb3RlVGV4dFRyYWNrIHdpdGhvdXQgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBcIm1hbnVhbENsZWFudXBcIiBwYXJhbWV0ZXIgdG8gYHRydWVgIGlzIGRlcHJlY2F0ZWQgYW5kIGRlZmF1bHQgdG8gYGZhbHNlYCBpbiBmdXR1cmUgdmVyc2lvbiBvZiB2aWRlby5qcycpLHQ9ITApLHRoaXMucmVtb3RlVGV4dFRyYWNrRWxzKCkuYWRkVHJhY2tFbGVtZW50XyhyKSx0aGlzLnJlbW90ZVRleHRUcmFja3MoKS5hZGRUcmFjayhyLnRyYWNrKSwhMCE9PXQmJnRoaXMucmVhZHkoZnVuY3Rpb24oKXtyZXR1cm4gbi5hdXRvUmVtb3RlVGV4dFRyYWNrc18uYWRkVHJhY2soci50cmFjayl9KSxyfSxlLnJlbW92ZVJlbW90ZVRleHRUcmFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnJlbW90ZVRleHRUcmFja0VscygpLmdldFRyYWNrRWxlbWVudEJ5VHJhY2tfKGUpO3RoaXMucmVtb3RlVGV4dFRyYWNrRWxzKCkucmVtb3ZlVHJhY2tFbGVtZW50Xyh0KSx0aGlzLnJlbW90ZVRleHRUcmFja3MoKS5yZW1vdmVUcmFjayhlKSx0aGlzLmF1dG9SZW1vdGVUZXh0VHJhY2tzXy5yZW1vdmVUcmFjayhlKX0sZS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eT1mdW5jdGlvbigpe3JldHVybnt9fSxlLnJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zXy5Qcm9taXNlfHxoLlByb21pc2U7aWYoZSlyZXR1cm4gZS5yZWplY3QoKX0sZS5zZXRQb3N0ZXI9ZnVuY3Rpb24oKXt9LGUucGxheXNpbmxpbmU9ZnVuY3Rpb24oKXt9LGUuc2V0UGxheXNpbmxpbmU9ZnVuY3Rpb24oKXt9LGUub3ZlcnJpZGVOYXRpdmVBdWRpb1RyYWNrcz1mdW5jdGlvbigpe30sZS5vdmVycmlkZU5hdGl2ZVZpZGVvVHJhY2tzPWZ1bmN0aW9uKCl7fSxlLmNhblBsYXlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sbi5jYW5QbGF5VHlwZT1mdW5jdGlvbigpe3JldHVyblwiXCJ9LG4uY2FuUGxheVNvdXJjZT1mdW5jdGlvbihlLHQpe3JldHVybiBuLmNhblBsYXlUeXBlKGUudHlwZSl9LG4uaXNUZWNoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIG58fGUgaW5zdGFuY2VvZiBufHxlPT09bn0sbi5yZWdpc3RlclRlY2g9ZnVuY3Rpb24oZSx0KXtpZihuLnRlY2hzX3x8KG4udGVjaHNfPXt9KSwhbi5pc1RlY2godCkpdGhyb3cgbmV3IEVycm9yKFwiVGVjaCBcIitlK1wiIG11c3QgYmUgYSBUZWNoXCIpO2lmKCFuLmNhblBsYXlUeXBlKXRocm93IG5ldyBFcnJvcihcIlRlY2hzIG11c3QgaGF2ZSBhIHN0YXRpYyBjYW5QbGF5VHlwZSBtZXRob2Qgb24gdGhlbVwiKTtpZighbi5jYW5QbGF5U291cmNlKXRocm93IG5ldyBFcnJvcihcIlRlY2hzIG11c3QgaGF2ZSBhIHN0YXRpYyBjYW5QbGF5U291cmNlIG1ldGhvZCBvbiB0aGVtXCIpO3JldHVybiBlPUFlKGUpLG4udGVjaHNfW2VdPXQsbi50ZWNoc19bamUoZSldPXQsXCJUZWNoXCIhPT1lJiZuLmRlZmF1bHRUZWNoT3JkZXJfLnB1c2goZSksdH0sbi5nZXRUZWNoPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIG4udGVjaHNfJiZuLnRlY2hzX1tlXT9uLnRlY2hzX1tlXTooZT1BZShlKSxoJiZoLnZpZGVvanMmJmgudmlkZW9qc1tlXT8oZi53YXJuKFwiVGhlIFwiK2UrXCIgdGVjaCB3YXMgYWRkZWQgdG8gdGhlIHZpZGVvanMgb2JqZWN0IHdoZW4gaXQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdmlkZW9qcy5yZWdpc3RlclRlY2gobmFtZSwgdGVjaClcIiksaC52aWRlb2pzW2VdKTp2b2lkIDApfSxufShPZSk7UHIubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1QcltlXTtqci5wcm90b3R5cGVbdC5nZXR0ZXJOYW1lXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3QucHJpdmF0ZU5hbWVdPXRoaXNbdC5wcml2YXRlTmFtZV18fG5ldyB0Lkxpc3RDbGFzcyx0aGlzW3QucHJpdmF0ZU5hbWVdfX0pLGpyLnByb3RvdHlwZS5mZWF0dXJlc1ZvbHVtZUNvbnRyb2w9ITAsanIucHJvdG90eXBlLmZlYXR1cmVzTXV0ZUNvbnRyb2w9ITAsanIucHJvdG90eXBlLmZlYXR1cmVzRnVsbHNjcmVlblJlc2l6ZT0hMSxqci5wcm90b3R5cGUuZmVhdHVyZXNQbGF5YmFja1JhdGU9ITEsanIucHJvdG90eXBlLmZlYXR1cmVzUHJvZ3Jlc3NFdmVudHM9ITEsanIucHJvdG90eXBlLmZlYXR1cmVzU291cmNlc2V0PSExLGpyLnByb3RvdHlwZS5mZWF0dXJlc1RpbWV1cGRhdGVFdmVudHM9ITEsanIucHJvdG90eXBlLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcz0hMSxqci53aXRoU291cmNlSGFuZGxlcnM9ZnVuY3Rpb24oaSl7aS5yZWdpc3RlclNvdXJjZUhhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLnNvdXJjZUhhbmRsZXJzO249bnx8KGkuc291cmNlSGFuZGxlcnM9W10pLHZvaWQgMD09PXQmJih0PW4ubGVuZ3RoKSxuLnNwbGljZSh0LDAsZSl9LGkuY2FuUGxheVR5cGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49aS5zb3VyY2VIYW5kbGVyc3x8W10scj0wO3I8bi5sZW5ndGg7cisrKWlmKHQ9bltyXS5jYW5QbGF5VHlwZShlKSlyZXR1cm4gdDtyZXR1cm5cIlwifSxpLnNlbGVjdFNvdXJjZUhhbmRsZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49aS5zb3VyY2VIYW5kbGVyc3x8W10scj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0uY2FuSGFuZGxlU291cmNlKGUsdCkpcmV0dXJuIG5bcl07cmV0dXJuIG51bGx9LGkuY2FuUGxheVNvdXJjZT1mdW5jdGlvbihlLHQpe3ZhciBuPWkuc2VsZWN0U291cmNlSGFuZGxlcihlLHQpO3JldHVybiBuP24uY2FuSGFuZGxlU291cmNlKGUsdCk6XCJcIn07W1wic2Vla2FibGVcIixcInNlZWtpbmdcIixcImR1cmF0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tlXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodGhpc1tlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUhhbmRsZXJfJiZ0aGlzLnNvdXJjZUhhbmRsZXJfW2VdP3RoaXMuc291cmNlSGFuZGxlcl9bZV0uYXBwbHkodGhpcy5zb3VyY2VIYW5kbGVyXyxhcmd1bWVudHMpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LGkucHJvdG90eXBlKSxpLnByb3RvdHlwZS5zZXRTb3VyY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5zZWxlY3RTb3VyY2VIYW5kbGVyKGUsdGhpcy5vcHRpb25zXyk7dHx8KGkubmF0aXZlU291cmNlSGFuZGxlcj90PWkubmF0aXZlU291cmNlSGFuZGxlcjpmLmVycm9yKFwiTm8gc291cmNlIGhhbmRsZXIgZm91bmQgZm9yIHRoZSBjdXJyZW50IHNvdXJjZS5cIikpLHRoaXMuZGlzcG9zZVNvdXJjZUhhbmRsZXIoKSx0aGlzLm9mZihcImRpc3Bvc2VcIix0aGlzLmRpc3Bvc2VTb3VyY2VIYW5kbGVyKSx0IT09aS5uYXRpdmVTb3VyY2VIYW5kbGVyJiYodGhpcy5jdXJyZW50U291cmNlXz1lKSx0aGlzLnNvdXJjZUhhbmRsZXJfPXQuaGFuZGxlU291cmNlKGUsdGhpcyx0aGlzLm9wdGlvbnNfKSx0aGlzLm9uZShcImRpc3Bvc2VcIix0aGlzLmRpc3Bvc2VTb3VyY2VIYW5kbGVyKX0saS5wcm90b3R5cGUuZGlzcG9zZVNvdXJjZUhhbmRsZXI9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTb3VyY2VfJiYodGhpcy5jbGVhclRyYWNrcyhbXCJhdWRpb1wiLFwidmlkZW9cIl0pLHRoaXMuY3VycmVudFNvdXJjZV89bnVsbCksdGhpcy5jbGVhbnVwQXV0b1RleHRUcmFja3MoKSx0aGlzLnNvdXJjZUhhbmRsZXJfJiYodGhpcy5zb3VyY2VIYW5kbGVyXy5kaXNwb3NlJiZ0aGlzLnNvdXJjZUhhbmRsZXJfLmRpc3Bvc2UoKSx0aGlzLnNvdXJjZUhhbmRsZXJfPW51bGwpfX0sT2UucmVnaXN0ZXJDb21wb25lbnQoXCJUZWNoXCIsanIpLGpyLnJlZ2lzdGVyVGVjaChcIlRlY2hcIixqciksanIuZGVmYXVsdFRlY2hPcmRlcl89W107dmFyIEFyPXt9LElyPXt9LE9yPXt9O2Z1bmN0aW9uIERyKGUsdCxuKXtlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbihyLGUsaSxvLHMsYSl7dm9pZCAwPT09ciYmKHI9e30pO3ZvaWQgMD09PWUmJihlPVtdKTt2b2lkIDA9PT1zJiYocz1bXSk7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciB0PWUsbD10WzBdLGM9dC5zbGljZSgxKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbCluKHIsQXJbbF0saSxvLHMsYSk7ZWxzZSBpZihsKXt2YXIgdT1CcihvLGwpO2lmKCF1LnNldFNvdXJjZSlyZXR1cm4gcy5wdXNoKHUpLG4ocixjLGksbyxzLGEpO3Uuc2V0U291cmNlKHkoe30sciksZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBuKHIsYyxpLG8scyxhKTtzLnB1c2godSksbih0LHIudHlwZT09PXQudHlwZT9jOkFyW3QudHlwZV0saSxvLHMsYSl9KX1lbHNlIGMubGVuZ3RoP24ocixjLGksbyxzLGEpOmE/aShyLHMpOm4ocixBcltcIipcIl0saSxvLHMsITApfSh0LEFyW3QudHlwZV0sbixlKX0sMSl9ZnVuY3Rpb24gTXIoZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bnVsbCk7dmFyIGk9XCJjYWxsXCIrQWUobiksbz1lLnJlZHVjZShScihpKSxyKSxzPW89PT1PcixhPXM/bnVsbDp0W25dKG8pO3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIG89ZVtpXTtvW3RdJiZvW3RdKHIsbil9fShlLG4sYSxzKSxhfXZhciBOcj17YnVmZmVyZWQ6MSxjdXJyZW50VGltZToxLGR1cmF0aW9uOjEsc2Vla2FibGU6MSxwbGF5ZWQ6MSxwYXVzZWQ6MSx2b2x1bWU6MX0sTHI9e3NldEN1cnJlbnRUaW1lOjEsc2V0Vm9sdW1lOjF9LEZyPXtwbGF5OjEscGF1c2U6MX07ZnVuY3Rpb24gUnIobil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1Pcj9Pcjp0W25dP3Rbbl0oZSk6ZX19ZnVuY3Rpb24gQnIoZSx0KXt2YXIgbj1JcltlLmlkKCldLHI9bnVsbDtpZihudWxsPT1uKXJldHVybiByPXQoZSksSXJbZS5pZCgpXT1bW3Qscl1dLHI7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV0scz1vWzBdLGE9b1sxXTtzPT09dCYmKHI9YSl9cmV0dXJuIG51bGw9PT1yJiYocj10KGUpLG4ucHVzaChbdCxyXSkpLHJ9ZnVuY3Rpb24gJHIoZSl7dm9pZCAwPT09ZSYmKGU9XCJcIik7dmFyIHQ9THQoZSk7cmV0dXJuIEhyW3QudG9Mb3dlckNhc2UoKV18fFwiXCJ9dmFyIEhyPXtvcHVzOlwidmlkZW8vb2dnXCIsb2d2OlwidmlkZW8vb2dnXCIsbXA0OlwidmlkZW8vbXA0XCIsbW92OlwidmlkZW8vbXA0XCIsbTR2OlwidmlkZW8vbXA0XCIsbWt2OlwidmlkZW8veC1tYXRyb3NrYVwiLG00YTpcImF1ZGlvL21wNFwiLG1wMzpcImF1ZGlvL21wZWdcIixhYWM6XCJhdWRpby9hYWNcIixvZ2E6XCJhdWRpby9vZ2dcIixtM3U4OlwiYXBwbGljYXRpb24veC1tcGVnVVJMXCIsanBnOlwiaW1hZ2UvanBlZ1wiLGpwZWc6XCJpbWFnZS9qcGVnXCIsZ2lmOlwiaW1hZ2UvZ2lmXCIscG5nOlwiaW1hZ2UvcG5nXCIsc3ZnOlwiaW1hZ2Uvc3ZnK3htbFwiLHdlYnA6XCJpbWFnZS93ZWJwXCJ9O2Z1bmN0aW9uIFZyKGUpe2lmKCFlLnR5cGUpe3ZhciB0PSRyKGUuc3JjKTt0JiYoZS50eXBlPXQpfXJldHVybiBlfXZhciBVcj1mdW5jdGlvbihjKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgcixpPUllKHtjcmVhdGVFbDohMX0sdCk7aWYocj1jLmNhbGwodGhpcyxlLGksbil8fHRoaXMsdC5wbGF5ZXJPcHRpb25zLnNvdXJjZXMmJjAhPT10LnBsYXllck9wdGlvbnMuc291cmNlcy5sZW5ndGgpZS5zcmModC5wbGF5ZXJPcHRpb25zLnNvdXJjZXMpO2Vsc2UgZm9yKHZhciBvPTAscz10LnBsYXllck9wdGlvbnMudGVjaE9yZGVyO288cy5sZW5ndGg7bysrKXt2YXIgYT1BZShzW29dKSxsPWpyLmdldFRlY2goYSk7aWYoYXx8KGw9T2UuZ2V0Q29tcG9uZW50KGEpKSxsJiZsLmlzU3VwcG9ydGVkKCkpe2UubG9hZFRlY2hfKGEpO2JyZWFrfX1yZXR1cm4gcn1yZXR1cm4gRGUoZSxjKSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJNZWRpYUxvYWRlclwiLFVyKTt2YXIgV3I9ZnVuY3Rpb24oaSl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybihuPWkuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLmVtaXRUYXBFdmVudHMoKSxuLmVuYWJsZSgpLG59RGUoZSxpKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVFbD1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09ZSYmKGU9XCJkaXZcIiksdm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PW4mJihuPXt9KSx0PXkoe2lubmVySFRNTDonPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJ2anMtaWNvbi1wbGFjZWhvbGRlclwiPjwvc3Bhbj4nLGNsYXNzTmFtZTp0aGlzLmJ1aWxkQ1NTQ2xhc3MoKSx0YWJJbmRleDowfSx0KSxcImJ1dHRvblwiPT09ZSYmZi5lcnJvcihcIkNyZWF0aW5nIGEgQ2xpY2thYmxlQ29tcG9uZW50IHdpdGggYW4gSFRNTCBlbGVtZW50IG9mIFwiK2UrXCIgaXMgbm90IHN1cHBvcnRlZDsgdXNlIGEgQnV0dG9uIGluc3RlYWQuXCIpLG49eSh7cm9sZTpcImJ1dHRvblwifSxuKSx0aGlzLnRhYkluZGV4Xz10LnRhYkluZGV4O3ZhciByPWkucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxlLHQsbik7cmV0dXJuIHRoaXMuY3JlYXRlQ29udHJvbFRleHRFbChyKSxyfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNvbnRyb2xUZXh0RWxfPW51bGwsaS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSx0LmNyZWF0ZUNvbnRyb2xUZXh0RWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udHJvbFRleHRFbF89YihcInNwYW5cIix7Y2xhc3NOYW1lOlwidmpzLWNvbnRyb2wtdGV4dFwifSx7XCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwifSksZSYmZS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xUZXh0RWxfKSx0aGlzLmNvbnRyb2xUZXh0KHRoaXMuY29udHJvbFRleHRfLGUpLHRoaXMuY29udHJvbFRleHRFbF99LHQuY29udHJvbFRleHQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLmVsKCkpLHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuY29udHJvbFRleHRffHxcIk5lZWQgVGV4dFwiO3ZhciBuPXRoaXMubG9jYWxpemUoZSk7dGhpcy5jb250cm9sVGV4dF89ZSxUKHRoaXMuY29udHJvbFRleHRFbF8sbiksdGhpcy5ub25JY29uQ29udHJvbHx8dC5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLG4pfSx0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1jb250cm9sIHZqcy1idXR0b24gXCIraS5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZF98fCh0aGlzLmVuYWJsZWRfPSEwLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtZGlzYWJsZWRcIiksdGhpcy5lbF8uc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLFwiZmFsc2VcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMudGFiSW5kZXhfJiZ0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoXCJ0YWJJbmRleFwiLHRoaXMudGFiSW5kZXhfKSx0aGlzLm9uKFtcInRhcFwiLFwiY2xpY2tcIl0sdGhpcy5oYW5kbGVDbGljayksdGhpcy5vbihcImtleWRvd25cIix0aGlzLmhhbmRsZUtleURvd24pKX0sdC5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkXz0hMSx0aGlzLmFkZENsYXNzKFwidmpzLWRpc2FibGVkXCIpLHRoaXMuZWxfLnNldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMudGFiSW5kZXhfJiZ0aGlzLmVsXy5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJJbmRleFwiKSx0aGlzLm9mZihcIm1vdXNlb3ZlclwiLHRoaXMuaGFuZGxlTW91c2VPdmVyKSx0aGlzLm9mZihcIm1vdXNlb3V0XCIsdGhpcy5oYW5kbGVNb3VzZU91dCksdGhpcy5vZmYoW1widGFwXCIsXCJjbGlja1wiXSx0aGlzLmhhbmRsZUNsaWNrKSx0aGlzLm9mZihcImtleWRvd25cIix0aGlzLmhhbmRsZUtleURvd24pfSx0LmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe30sdC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe1B0LmlzRXZlbnRLZXkoZSxcIlNwYWNlXCIpfHxQdC5pc0V2ZW50S2V5KGUsXCJFbnRlclwiKT8oZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy50cmlnZ2VyKFwiY2xpY2tcIikpOmkucHJvdG90eXBlLmhhbmRsZUtleURvd24uY2FsbCh0aGlzLGUpfSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJDbGlja2FibGVDb21wb25lbnRcIixXcik7dmFyIEtyPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS51cGRhdGUoKSxlLm9uKFwicG9zdGVyY2hhbmdlXCIscGUoTGUobiksbi51cGRhdGUpKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxheWVyKCkub2ZmKFwicG9zdGVyY2hhbmdlXCIsdGhpcy51cGRhdGUpLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sdC5jcmVhdGVFbD1mdW5jdGlvbigpe3JldHVybiBiKFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy1wb3N0ZXJcIix0YWJJbmRleDotMX0pfSx0LnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBsYXllcigpLnBvc3RlcigpO3RoaXMuc2V0U3JjKHQpLHQ/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCl9LHQuc2V0U3JjPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7ZSYmKHQ9J3VybChcIicrZSsnXCIpJyksdGhpcy5lbF8uc3R5bGUuYmFja2dyb3VuZEltYWdlPXR9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXJfLmNvbnRyb2xzKCkmJih0aGlzLnBsYXllcl8udGVjaCghMCkmJnRoaXMucGxheWVyXy50ZWNoKCEwKS5mb2N1cygpLHRoaXMucGxheWVyXy5wYXVzZWQoKT9rdCh0aGlzLnBsYXllcl8ucGxheSgpKTp0aGlzLnBsYXllcl8ucGF1c2UoKSl9LGV9KFdyKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlBvc3RlckltYWdlXCIsS3IpO3ZhciB6cj1cIiMyMjJcIixxcj17bW9ub3NwYWNlOlwibW9ub3NwYWNlXCIsc2Fuc1NlcmlmOlwic2Fucy1zZXJpZlwiLHNlcmlmOlwic2VyaWZcIixtb25vc3BhY2VTYW5zU2VyaWY6J1wiQW5kYWxlIE1vbm9cIiwgXCJMdWNpZGEgQ29uc29sZVwiLCBtb25vc3BhY2UnLG1vbm9zcGFjZVNlcmlmOidcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScscHJvcG9ydGlvbmFsU2Fuc1NlcmlmOlwic2Fucy1zZXJpZlwiLHByb3BvcnRpb25hbFNlcmlmOlwic2VyaWZcIixjYXN1YWw6J1wiQ29taWMgU2FucyBNU1wiLCBJbXBhY3QsIGZhbnRhc3knLHNjcmlwdDonXCJNb25vdHlwZSBDb3JzaXZhXCIsIGN1cnNpdmUnLHNtYWxsY2FwczonXCJBbmRhbGUgTW9ub1wiLCBcIkx1Y2lkYSBDb25zb2xlXCIsIG1vbm9zcGFjZSwgc2Fucy1zZXJpZid9O2Z1bmN0aW9uIEdyKGUsdCl7dmFyIG47aWYoND09PWUubGVuZ3RoKW49ZVsxXStlWzFdK2VbMl0rZVsyXStlWzNdK2VbM107ZWxzZXtpZig3IT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2xvciBjb2RlIHByb3ZpZGVkLCBcIitlK1wiOyBtdXN0IGJlIGZvcm1hdHRlZCBhcyBlLmcuICNmMGUgb3IgI2Y2MDRlMi5cIik7bj1lLnNsaWNlKDEpfXJldHVyblwicmdiYShcIitwYXJzZUludChuLnNsaWNlKDAsMiksMTYpK1wiLFwiK3BhcnNlSW50KG4uc2xpY2UoMiw0KSwxNikrXCIsXCIrcGFyc2VJbnQobi5zbGljZSg0LDYpLDE2KStcIixcIit0K1wiKVwifWZ1bmN0aW9uIFhyKGUsdCxuKXt0cnl7ZS5zdHlsZVt0XT1ufWNhdGNoKGUpe3JldHVybn19dmFyIFlyPWZ1bmN0aW9uKG8pe2Z1bmN0aW9uIGUobixlLHQpe3ZhciByO3I9by5jYWxsKHRoaXMsbixlLHQpfHx0aGlzO3ZhciBpPXBlKExlKHIpLHIudXBkYXRlRGlzcGxheSk7cmV0dXJuIG4ub24oXCJsb2Fkc3RhcnRcIixwZShMZShyKSxyLnRvZ2dsZURpc3BsYXkpKSxuLm9uKFwidGV4dHRyYWNrY2hhbmdlXCIsaSksbi5vbihcImxvYWRlZG1ldGFkYXRhXCIscGUoTGUociksci5wcmVzZWxlY3RUcmFjaykpLG4ucmVhZHkocGUoTGUociksZnVuY3Rpb24oKXtpZihuLnRlY2hfJiZuLnRlY2hfLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcyl0aGlzLmhpZGUoKTtlbHNle24ub24oXCJmdWxsc2NyZWVuY2hhbmdlXCIsaSksbi5vbihcInBsYXllcnJlc2l6ZVwiLGkpLGguYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsaSksbi5vbihcImRpc3Bvc2VcIixmdW5jdGlvbigpe3JldHVybiBoLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLGkpfSk7Zm9yKHZhciBlPXRoaXMub3B0aW9uc18ucGxheWVyT3B0aW9ucy50cmFja3N8fFtdLHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLnBsYXllcl8uYWRkUmVtb3RlVGV4dFRyYWNrKGVbdF0sITApO3RoaXMucHJlc2VsZWN0VHJhY2soKX19KSkscn1EZShlLG8pO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnByZXNlbGVjdFRyYWNrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbixyPXtjYXB0aW9uczoxLHN1YnRpdGxlczoxfSxpPXRoaXMucGxheWVyXy50ZXh0VHJhY2tzKCksbz10aGlzLnBsYXllcl8uY2FjaGVfLnNlbGVjdGVkTGFuZ3VhZ2Uscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgYT1pW3NdO28mJm8uZW5hYmxlZCYmby5sYW5ndWFnZSYmby5sYW5ndWFnZT09PWEubGFuZ3VhZ2UmJmEua2luZCBpbiByP249YS5raW5kPT09by5raW5kP2E6bnx8YTpvJiYhby5lbmFibGVkP3Q9ZT1uPW51bGw6YS5kZWZhdWx0JiYoXCJkZXNjcmlwdGlvbnNcIiE9PWEua2luZHx8ZT9hLmtpbmQgaW4gciYmIXQmJih0PWEpOmU9YSl9bj9uLm1vZGU9XCJzaG93aW5nXCI6dD90Lm1vZGU9XCJzaG93aW5nXCI6ZSYmKGUubW9kZT1cInNob3dpbmdcIil9LHQudG9nZ2xlRGlzcGxheT1mdW5jdGlvbigpe3RoaXMucGxheWVyXy50ZWNoXyYmdGhpcy5wbGF5ZXJfLnRlY2hfLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcz90aGlzLmhpZGUoKTp0aGlzLnNob3coKX0sdC5jcmVhdGVFbD1mdW5jdGlvbigpe3JldHVybiBvLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLXRleHQtdHJhY2stZGlzcGxheVwifSx7XCJhcmlhLWxpdmVcIjpcIm9mZlwiLFwiYXJpYS1hdG9taWNcIjpcInRydWVcIn0pfSx0LmNsZWFyRGlzcGxheT1mdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGguV2ViVlRUJiZoLldlYlZUVC5wcm9jZXNzQ3VlcyhoLFtdLHRoaXMuZWxfKX0sdC51cGRhdGVEaXNwbGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wbGF5ZXJfLnRleHRUcmFja3MoKSx0PXRoaXMub3B0aW9uc18uYWxsb3dNdWx0aXBsZVNob3dpbmdUcmFja3M7aWYodGhpcy5jbGVhckRpc3BsYXkoKSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgaT1lW3JdO1wic2hvd2luZ1wiPT09aS5tb2RlJiZuLnB1c2goaSl9dGhpcy51cGRhdGVGb3JUcmFjayhuKX1lbHNle2Zvcih2YXIgbz1udWxsLHM9bnVsbCxhPWUubGVuZ3RoO2EtLTspe3ZhciBsPWVbYV07XCJzaG93aW5nXCI9PT1sLm1vZGUmJihcImRlc2NyaXB0aW9uc1wiPT09bC5raW5kP289bDpzPWwpfXM/KFwib2ZmXCIhPT10aGlzLmdldEF0dHJpYnV0ZShcImFyaWEtbGl2ZVwiKSYmdGhpcy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIixcIm9mZlwiKSx0aGlzLnVwZGF0ZUZvclRyYWNrKHMpKTpvJiYoXCJhc3NlcnRpdmVcIiE9PXRoaXMuZ2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIpJiZ0aGlzLnNldEF0dHJpYnV0ZShcImFyaWEtbGl2ZVwiLFwiYXNzZXJ0aXZlXCIpLHRoaXMudXBkYXRlRm9yVHJhY2sobykpfX0sdC51cGRhdGVEaXNwbGF5U3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMucGxheWVyXy50ZXh0VHJhY2tTZXR0aW5ncy5nZXRWYWx1ZXMoKSxuPWUuYWN0aXZlQ3VlcyxyPW4ubGVuZ3RoO3ItLTspe3ZhciBpPW5bcl07aWYoaSl7dmFyIG89aS5kaXNwbGF5U3RhdGU7aWYodC5jb2xvciYmKG8uZmlyc3RDaGlsZC5zdHlsZS5jb2xvcj10LmNvbG9yKSx0LnRleHRPcGFjaXR5JiZYcihvLmZpcnN0Q2hpbGQsXCJjb2xvclwiLEdyKHQuY29sb3J8fFwiI2ZmZlwiLHQudGV4dE9wYWNpdHkpKSx0LmJhY2tncm91bmRDb2xvciYmKG8uZmlyc3RDaGlsZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3IpLHQuYmFja2dyb3VuZE9wYWNpdHkmJlhyKG8uZmlyc3RDaGlsZCxcImJhY2tncm91bmRDb2xvclwiLEdyKHQuYmFja2dyb3VuZENvbG9yfHxcIiMwMDBcIix0LmJhY2tncm91bmRPcGFjaXR5KSksdC53aW5kb3dDb2xvciYmKHQud2luZG93T3BhY2l0eT9YcihvLFwiYmFja2dyb3VuZENvbG9yXCIsR3IodC53aW5kb3dDb2xvcix0LndpbmRvd09wYWNpdHkpKTpvLnN0eWxlLmJhY2tncm91bmRDb2xvcj10LndpbmRvd0NvbG9yKSx0LmVkZ2VTdHlsZSYmKFwiZHJvcHNoYWRvd1wiPT09dC5lZGdlU3R5bGU/by5maXJzdENoaWxkLnN0eWxlLnRleHRTaGFkb3c9XCIycHggMnB4IDNweCAjMjIyLCAycHggMnB4IDRweCAjMjIyLCAycHggMnB4IDVweCBcIit6cjpcInJhaXNlZFwiPT09dC5lZGdlU3R5bGU/by5maXJzdENoaWxkLnN0eWxlLnRleHRTaGFkb3c9XCIxcHggMXB4ICMyMjIsIDJweCAycHggIzIyMiwgM3B4IDNweCBcIit6cjpcImRlcHJlc3NlZFwiPT09dC5lZGdlU3R5bGU/by5maXJzdENoaWxkLnN0eWxlLnRleHRTaGFkb3c9XCIxcHggMXB4ICNjY2MsIDAgMXB4ICNjY2MsIC0xcHggLTFweCAjMjIyLCAwIC0xcHggXCIrenI6XCJ1bmlmb3JtXCI9PT10LmVkZ2VTdHlsZSYmKG8uZmlyc3RDaGlsZC5zdHlsZS50ZXh0U2hhZG93PVwiMCAwIDRweCAjMjIyLCAwIDAgNHB4ICMyMjIsIDAgMCA0cHggIzIyMiwgMCAwIDRweCBcIit6cikpLHQuZm9udFBlcmNlbnQmJjEhPT10LmZvbnRQZXJjZW50KXt2YXIgcz1oLnBhcnNlRmxvYXQoby5zdHlsZS5mb250U2l6ZSk7by5zdHlsZS5mb250U2l6ZT1zKnQuZm9udFBlcmNlbnQrXCJweFwiLG8uc3R5bGUuaGVpZ2h0PVwiYXV0b1wiLG8uc3R5bGUudG9wPVwiYXV0b1wiLG8uc3R5bGUuYm90dG9tPVwiMnB4XCJ9dC5mb250RmFtaWx5JiZcImRlZmF1bHRcIiE9PXQuZm9udEZhbWlseSYmKFwic21hbGwtY2Fwc1wiPT09dC5mb250RmFtaWx5P28uZmlyc3RDaGlsZC5zdHlsZS5mb250VmFyaWFudD1cInNtYWxsLWNhcHNcIjpvLmZpcnN0Q2hpbGQuc3R5bGUuZm9udEZhbWlseT1xclt0LmZvbnRGYW1pbHldKX19fSx0LnVwZGF0ZUZvclRyYWNrPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksXCJmdW5jdGlvblwiPT10eXBlb2YgaC5XZWJWVFQmJiFlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiFlLmFjdGl2ZUN1ZXN9KSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbilmb3IodmFyIHI9ZVtuXSxpPTA7aTxyLmFjdGl2ZUN1ZXMubGVuZ3RoOysraSl0LnB1c2goci5hY3RpdmVDdWVzW2ldKTtoLldlYlZUVC5wcm9jZXNzQ3VlcyhoLHQsdGhpcy5lbF8pO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXtmb3IodmFyIHM9ZVtvXSxhPTA7YTxzLmFjdGl2ZUN1ZXMubGVuZ3RoOysrYSl7dmFyIGw9cy5hY3RpdmVDdWVzW2FdLmRpc3BsYXlTdGF0ZTtFKGwsXCJ2anMtdGV4dC10cmFjay1jdWVcIiksRShsLFwidmpzLXRleHQtdHJhY2stY3VlLVwiKyhzLmxhbmd1YWdlP3MubGFuZ3VhZ2U6bykpfXRoaXMucGxheWVyXy50ZXh0VHJhY2tTZXR0aW5ncyYmdGhpcy51cGRhdGVEaXNwbGF5U3RhdGUocyl9fX0sZX0oT2UpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiVGV4dFRyYWNrRGlzcGxheVwiLFlyKTt2YXIgUXI9ZnVuY3Rpb24oaSl7ZnVuY3Rpb24gZSgpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gRGUoZSxpKSxlLnByb3RvdHlwZS5jcmVhdGVFbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGxheWVyXy5pc0F1ZGlvKCksdD10aGlzLmxvY2FsaXplKGU/XCJBdWRpbyBQbGF5ZXJcIjpcIlZpZGVvIFBsYXllclwiKSxuPWIoXCJzcGFuXCIse2NsYXNzTmFtZTpcInZqcy1jb250cm9sLXRleHRcIixpbm5lckhUTUw6dGhpcy5sb2NhbGl6ZShcInsxfSBpcyBsb2FkaW5nLlwiLFt0XSl9KSxyPWkucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6XCJ2anMtbG9hZGluZy1zcGlubmVyXCIsZGlyOlwibHRyXCJ9KTtyZXR1cm4gci5hcHBlbmRDaGlsZChuKSxyfSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJMb2FkaW5nU3Bpbm5lclwiLFFyKTt2YXIgSnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31EZShlLHQpO3ZhciBuPWUucHJvdG90eXBlO3JldHVybiBuLmNyZWF0ZUVsPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD17fSksdm9pZCAwPT09biYmKG49e30pLHQ9eSh7aW5uZXJIVE1MOic8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInZqcy1pY29uLXBsYWNlaG9sZGVyXCI+PC9zcGFuPicsY2xhc3NOYW1lOnRoaXMuYnVpbGRDU1NDbGFzcygpfSx0KSxuPXkoe3R5cGU6XCJidXR0b25cIn0sbik7dmFyIHI9T2UucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImJ1dHRvblwiLHQsbik7cmV0dXJuIHRoaXMuY3JlYXRlQ29udHJvbFRleHRFbChyKSxyfSxuLmFkZENoaWxkPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPXRoaXMuY29uc3RydWN0b3IubmFtZTtyZXR1cm4gZi53YXJuKFwiQWRkaW5nIGFuIGFjdGlvbmFibGUgKHVzZXIgY29udHJvbGxhYmxlKSBjaGlsZCB0byBhIEJ1dHRvbiAoXCIrbitcIikgaXMgbm90IHN1cHBvcnRlZDsgdXNlIGEgQ2xpY2thYmxlQ29tcG9uZW50IGluc3RlYWQuXCIpLE9lLnByb3RvdHlwZS5hZGRDaGlsZC5jYWxsKHRoaXMsZSx0KX0sbi5lbmFibGU9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5lbmFibGUuY2FsbCh0aGlzKSx0aGlzLmVsXy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKX0sbi5kaXNhYmxlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzYWJsZS5jYWxsKHRoaXMpLHRoaXMuZWxfLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJkaXNhYmxlZFwiKX0sbi5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe1B0LmlzRXZlbnRLZXkoZSxcIlNwYWNlXCIpfHxQdC5pc0V2ZW50S2V5KGUsXCJFbnRlclwiKT9lLnN0b3BQcm9wYWdhdGlvbigpOnQucHJvdG90eXBlLmhhbmRsZUtleURvd24uY2FsbCh0aGlzLGUpfSxlfShXcik7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJCdXR0b25cIixKcik7dmFyIFpyPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5tb3VzZXVzZWRfPSExLG4ub24oXCJtb3VzZWRvd25cIixuLmhhbmRsZU1vdXNlRG93biksbn1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1iaWctcGxheS1idXR0b25cIn0sdC5oYW5kbGVDbGljaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBsYXllcl8ucGxheSgpO2lmKHRoaXMubW91c2V1c2VkXyYmZS5jbGllbnRYJiZlLmNsaWVudFkpcmV0dXJuIGt0KHQpLHZvaWQodGhpcy5wbGF5ZXJfLnRlY2goITApJiZ0aGlzLnBsYXllcl8udGVjaCghMCkuZm9jdXMoKSk7dmFyIG49dGhpcy5wbGF5ZXJfLmdldENoaWxkKFwiY29udHJvbEJhclwiKSxyPW4mJm4uZ2V0Q2hpbGQoXCJwbGF5VG9nZ2xlXCIpO2lmKHIpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gci5mb2N1cygpfVR0KHQpP3QudGhlbihpLGZ1bmN0aW9uKCl7fSk6dGhpcy5zZXRUaW1lb3V0KGksMSl9ZWxzZSB0aGlzLnBsYXllcl8udGVjaCghMCkuZm9jdXMoKX0sdC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe3RoaXMubW91c2V1c2VkXz0hMSxyLnByb3RvdHlwZS5oYW5kbGVLZXlEb3duLmNhbGwodGhpcyxlKX0sdC5oYW5kbGVNb3VzZURvd249ZnVuY3Rpb24oZSl7dGhpcy5tb3VzZXVzZWRfPSEwfSxlfShKcik7WnIucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIlBsYXkgVmlkZW9cIixPZS5yZWdpc3RlckNvbXBvbmVudChcIkJpZ1BsYXlCdXR0b25cIixacik7dmFyIGVpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5jb250cm9sVGV4dCh0JiZ0LmNvbnRyb2xUZXh0fHxuLmxvY2FsaXplKFwiQ2xvc2VcIikpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtY2xvc2UtYnV0dG9uIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5oYW5kbGVDbGljaz1mdW5jdGlvbihlKXt0aGlzLnRyaWdnZXIoe3R5cGU6XCJjbG9zZVwiLGJ1YmJsZXM6ITF9KX0sdC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGUpe1B0LmlzRXZlbnRLZXkoZSxcIkVzY1wiKT8oZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy50cmlnZ2VyKFwiY2xpY2tcIikpOnIucHJvdG90eXBlLmhhbmRsZUtleURvd24uY2FsbCh0aGlzLGUpfSxlfShKcik7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJDbG9zZUJ1dHRvblwiLGVpKTt2YXIgdGk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzLHQucmVwbGF5PXZvaWQgMD09PXQucmVwbGF5fHx0LnJlcGxheSxuLm9uKGUsXCJwbGF5XCIsbi5oYW5kbGVQbGF5KSxuLm9uKGUsXCJwYXVzZVwiLG4uaGFuZGxlUGF1c2UpLHQucmVwbGF5JiZuLm9uKGUsXCJlbmRlZFwiLG4uaGFuZGxlRW5kZWQpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtcGxheS1jb250cm9sIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5oYW5kbGVDbGljaz1mdW5jdGlvbihlKXt0aGlzLnBsYXllcl8ucGF1c2VkKCk/dGhpcy5wbGF5ZXJfLnBsYXkoKTp0aGlzLnBsYXllcl8ucGF1c2UoKX0sdC5oYW5kbGVTZWVrZWQ9ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVDbGFzcyhcInZqcy1lbmRlZFwiKSx0aGlzLnBsYXllcl8ucGF1c2VkKCk/dGhpcy5oYW5kbGVQYXVzZShlKTp0aGlzLmhhbmRsZVBsYXkoZSl9LHQuaGFuZGxlUGxheT1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWVuZGVkXCIpLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtcGF1c2VkXCIpLHRoaXMuYWRkQ2xhc3MoXCJ2anMtcGxheWluZ1wiKSx0aGlzLmNvbnRyb2xUZXh0KFwiUGF1c2VcIil9LHQuaGFuZGxlUGF1c2U9ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVDbGFzcyhcInZqcy1wbGF5aW5nXCIpLHRoaXMuYWRkQ2xhc3MoXCJ2anMtcGF1c2VkXCIpLHRoaXMuY29udHJvbFRleHQoXCJQbGF5XCIpfSx0LmhhbmRsZUVuZGVkPWZ1bmN0aW9uKGUpe3RoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtcGxheWluZ1wiKSx0aGlzLmFkZENsYXNzKFwidmpzLWVuZGVkXCIpLHRoaXMuY29udHJvbFRleHQoXCJSZXBsYXlcIiksdGhpcy5vbmUodGhpcy5wbGF5ZXJfLFwic2Vla2VkXCIsdGhpcy5oYW5kbGVTZWVrZWQpfSxlfShKcik7dGkucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIlBsYXlcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlBsYXlUb2dnbGVcIix0aSk7ZnVuY3Rpb24gbmkoZSx0KXtlPWU8MD8wOmU7dmFyIG49TWF0aC5mbG9vcihlJTYwKSxyPU1hdGguZmxvb3IoZS82MCU2MCksaT1NYXRoLmZsb29yKGUvMzYwMCksbz1NYXRoLmZsb29yKHQvNjAlNjApLHM9TWF0aC5mbG9vcih0LzM2MDApO3JldHVybiFpc05hTihlKSYmZSE9PTEvMHx8KGk9cj1uPVwiLVwiKSwoaT0wPGl8fDA8cz9pK1wiOlwiOlwiXCIpKyhyPSgoaXx8MTA8PW8pJiZyPDEwP1wiMFwiK3I6cikrXCI6XCIpKyhuPW48MTA/XCIwXCIrbjpuKX12YXIgcmk9bmk7ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSkscmkoZSx0KX12YXIgb2k9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybihuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLnRocm90dGxlZFVwZGF0ZUNvbnRlbnQ9ZmUocGUoTGUobiksbi51cGRhdGVDb250ZW50KSwzMCksbi5vbihlLFwidGltZXVwZGF0ZVwiLG4udGhyb3R0bGVkVXBkYXRlQ29udGVudCksbn1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNyZWF0ZUVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5idWlsZENTU0NsYXNzKCksdD1yLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJkaXZcIix7Y2xhc3NOYW1lOmUrXCIgdmpzLXRpbWUtY29udHJvbCB2anMtY29udHJvbFwiLGlubmVySFRNTDonPHNwYW4gY2xhc3M9XCJ2anMtY29udHJvbC10ZXh0XCIgcm9sZT1cInByZXNlbnRhdGlvblwiPicrdGhpcy5sb2NhbGl6ZSh0aGlzLmxhYmVsVGV4dF8pK1wiwqA8L3NwYW4+XCJ9KTtyZXR1cm4gdGhpcy5jb250ZW50RWxfPWIoXCJzcGFuXCIse2NsYXNzTmFtZTplK1wiLWRpc3BsYXlcIn0se1wiYXJpYS1saXZlXCI6XCJvZmZcIixyb2xlOlwicHJlc2VudGF0aW9uXCJ9KSx0aGlzLnVwZGF0ZVRleHROb2RlXygpLHQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxfKSx0fSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnRFbF89bnVsbCx0aGlzLnRleHROb2RlXz1udWxsLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sdC51cGRhdGVUZXh0Tm9kZV89ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRFbF8pe2Zvcig7dGhpcy5jb250ZW50RWxfLmZpcnN0Q2hpbGQ7KXRoaXMuY29udGVudEVsXy5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnRFbF8uZmlyc3RDaGlsZCk7dGhpcy50ZXh0Tm9kZV89ZC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmZvcm1hdHRlZFRpbWVffHx0aGlzLmZvcm1hdFRpbWVfKDApKSx0aGlzLmNvbnRlbnRFbF8uYXBwZW5kQ2hpbGQodGhpcy50ZXh0Tm9kZV8pfX0sdC5mb3JtYXRUaW1lXz1mdW5jdGlvbihlKXtyZXR1cm4gaWkoZSl9LHQudXBkYXRlRm9ybWF0dGVkVGltZV89ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5mb3JtYXRUaW1lXyhlKTt0IT09dGhpcy5mb3JtYXR0ZWRUaW1lXyYmKHRoaXMuZm9ybWF0dGVkVGltZV89dCx0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVRleHROb2RlXykpfSx0LnVwZGF0ZUNvbnRlbnQ9ZnVuY3Rpb24oZSl7fSxlfShPZSk7b2kucHJvdG90eXBlLmxhYmVsVGV4dF89XCJUaW1lXCIsb2kucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIlRpbWVcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlRpbWVEaXNwbGF5XCIsb2kpO3ZhciBzaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub24oZSxcImVuZGVkXCIsbi5oYW5kbGVFbmRlZCksbn1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1jdXJyZW50LXRpbWVcIn0sdC51cGRhdGVDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGxheWVyXy5zY3J1YmJpbmcoKT90aGlzLnBsYXllcl8uZ2V0Q2FjaGUoKS5jdXJyZW50VGltZTp0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoKTt0aGlzLnVwZGF0ZUZvcm1hdHRlZFRpbWVfKHQpfSx0LmhhbmRsZUVuZGVkPWZ1bmN0aW9uKGUpe3RoaXMucGxheWVyXy5kdXJhdGlvbigpJiZ0aGlzLnVwZGF0ZUZvcm1hdHRlZFRpbWVfKHRoaXMucGxheWVyXy5kdXJhdGlvbigpKX0sZX0ob2kpO3NpLnByb3RvdHlwZS5sYWJlbFRleHRfPVwiQ3VycmVudCBUaW1lXCIsc2kucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIkN1cnJlbnQgVGltZVwiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQ3VycmVudFRpbWVEaXNwbGF5XCIsc2kpO3ZhciBhaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub24oZSxcImR1cmF0aW9uY2hhbmdlXCIsbi51cGRhdGVDb250ZW50KSxuLm9uKGUsXCJsb2Fkc3RhcnRcIixuLnVwZGF0ZUNvbnRlbnQpLG4ub24oZSxcImxvYWRlZG1ldGFkYXRhXCIsbi50aHJvdHRsZWRVcGRhdGVDb250ZW50KSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWR1cmF0aW9uXCJ9LHQudXBkYXRlQ29udGVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBsYXllcl8uZHVyYXRpb24oKTt0aGlzLmR1cmF0aW9uXyE9PXQmJih0aGlzLmR1cmF0aW9uXz10LHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8odCkpfSxlfShvaSk7YWkucHJvdG90eXBlLmxhYmVsVGV4dF89XCJEdXJhdGlvblwiLGFpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJEdXJhdGlvblwiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiRHVyYXRpb25EaXNwbGF5XCIsYWkpO3ZhciBsaT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBEZSh0LGUpLHQucHJvdG90eXBlLmNyZWF0ZUVsPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6XCJ2anMtdGltZS1jb250cm9sIHZqcy10aW1lLWRpdmlkZXJcIixpbm5lckhUTUw6XCI8ZGl2PjxzcGFuPi88L3NwYW4+PC9kaXY+XCJ9LHtcImFyaWEtaGlkZGVuXCI6ITB9KX0sdH0oT2UpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiVGltZURpdmlkZXJcIixsaSk7dmFyIGNpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5vbihlLFwiZHVyYXRpb25jaGFuZ2VcIixuLnRocm90dGxlZFVwZGF0ZUNvbnRlbnQpLG4ub24oZSxcImVuZGVkXCIsbi5oYW5kbGVFbmRlZCksbn1EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1yZW1haW5pbmctdGltZVwifSx0LmNyZWF0ZUVsPWZ1bmN0aW9uKCl7dmFyIGU9ci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzKTtyZXR1cm4gZS5pbnNlcnRCZWZvcmUoYihcInNwYW5cIix7fSx7XCJhcmlhLWhpZGRlblwiOiEwfSxcIi1cIiksdGhpcy5jb250ZW50RWxfKSxlfSx0LnVwZGF0ZUNvbnRlbnQ9ZnVuY3Rpb24oZSl7XCJudW1iZXJcIj09dHlwZW9mIHRoaXMucGxheWVyXy5kdXJhdGlvbigpJiYodGhpcy5wbGF5ZXJfLnJlbWFpbmluZ1RpbWVEaXNwbGF5P3RoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8odGhpcy5wbGF5ZXJfLnJlbWFpbmluZ1RpbWVEaXNwbGF5KCkpOnRoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8odGhpcy5wbGF5ZXJfLnJlbWFpbmluZ1RpbWUoKSkpfSx0LmhhbmRsZUVuZGVkPWZ1bmN0aW9uKGUpe3RoaXMucGxheWVyXy5kdXJhdGlvbigpJiZ0aGlzLnVwZGF0ZUZvcm1hdHRlZFRpbWVfKDApfSxlfShvaSk7Y2kucHJvdG90eXBlLmxhYmVsVGV4dF89XCJSZW1haW5pbmcgVGltZVwiLGNpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJSZW1haW5pbmcgVGltZVwiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiUmVtYWluaW5nVGltZURpc3BsYXlcIixjaSk7dmFyIHVpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS51cGRhdGVTaG93aW5nKCksbi5vbihuLnBsYXllcigpLFwiZHVyYXRpb25jaGFuZ2VcIixuLnVwZGF0ZVNob3dpbmcpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVFbD1mdW5jdGlvbigpe3ZhciBlPXIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6XCJ2anMtbGl2ZS1jb250cm9sIHZqcy1jb250cm9sXCJ9KTtyZXR1cm4gdGhpcy5jb250ZW50RWxfPWIoXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLWxpdmUtZGlzcGxheVwiLGlubmVySFRNTDonPHNwYW4gY2xhc3M9XCJ2anMtY29udHJvbC10ZXh0XCI+Jyt0aGlzLmxvY2FsaXplKFwiU3RyZWFtIFR5cGVcIikrXCLCoDwvc3Bhbj5cIit0aGlzLmxvY2FsaXplKFwiTElWRVwiKX0se1wiYXJpYS1saXZlXCI6XCJvZmZcIn0pLGUuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxfKSxlfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnRFbF89bnVsbCxyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LHQudXBkYXRlU2hvd2luZz1mdW5jdGlvbihlKXt0aGlzLnBsYXllcigpLmR1cmF0aW9uKCk9PT0xLzA/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCl9LGV9KE9lKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIkxpdmVEaXNwbGF5XCIsdWkpO3ZhciBoaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykudXBkYXRlTGl2ZUVkZ2VTdGF0dXMoKSxuLnBsYXllcl8ubGl2ZVRyYWNrZXImJm4ub24obi5wbGF5ZXJfLmxpdmVUcmFja2VyLFwibGl2ZWVkZ2VjaGFuZ2VcIixuLnVwZGF0ZUxpdmVFZGdlU3RhdHVzKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJidXR0b25cIix7Y2xhc3NOYW1lOlwidmpzLXNlZWstdG8tbGl2ZS1jb250cm9sIHZqcy1jb250cm9sXCJ9KTtyZXR1cm4gdGhpcy50ZXh0RWxfPWIoXCJzcGFuXCIse2NsYXNzTmFtZTpcInZqcy1zZWVrLXRvLWxpdmUtdGV4dFwiLGlubmVySFRNTDp0aGlzLmxvY2FsaXplKFwiTElWRVwiKX0se1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLGUuYXBwZW5kQ2hpbGQodGhpcy50ZXh0RWxfKSxlfSx0LnVwZGF0ZUxpdmVFZGdlU3RhdHVzPWZ1bmN0aW9uKGUpeyF0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXJ8fHRoaXMucGxheWVyXy5saXZlVHJhY2tlci5hdExpdmVFZGdlKCk/KHRoaXMuc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLCEwKSx0aGlzLmFkZENsYXNzKFwidmpzLWF0LWxpdmUtZWRnZVwiKSx0aGlzLmNvbnRyb2xUZXh0KFwiU2VlayB0byBsaXZlLCBjdXJyZW50bHkgcGxheWluZyBsaXZlXCIpKToodGhpcy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRpc2FibGVkXCIsITEpLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtYXQtbGl2ZS1lZGdlXCIpLHRoaXMuY29udHJvbFRleHQoXCJTZWVrIHRvIGxpdmUsIGN1cnJlbnRseSBiZWhpbmQgbGl2ZVwiKSl9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIuc2Vla1RvTGl2ZUVkZ2UoKX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyJiZ0aGlzLm9mZih0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIsXCJsaXZlZWRnZWNoYW5nZVwiLHRoaXMudXBkYXRlTGl2ZUVkZ2VTdGF0dXMpLHRoaXMudGV4dEVsXz1udWxsLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sZX0oSnIpO2hpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJTZWVrIHRvIGxpdmUsIGN1cnJlbnRseSBwbGF5aW5nIGxpdmVcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlNlZWtUb0xpdmVcIixoaSk7dmFyIGRpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5iYXI9bi5nZXRDaGlsZChuLm9wdGlvbnNfLmJhck5hbWUpLG4udmVydGljYWwoISFuLm9wdGlvbnNfLnZlcnRpY2FsKSxuLmVuYWJsZSgpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5lbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZF99LHQuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCl8fCh0aGlzLm9uKFwibW91c2Vkb3duXCIsdGhpcy5oYW5kbGVNb3VzZURvd24pLHRoaXMub24oXCJ0b3VjaHN0YXJ0XCIsdGhpcy5oYW5kbGVNb3VzZURvd24pLHRoaXMub24oXCJrZXlkb3duXCIsdGhpcy5oYW5kbGVLZXlEb3duKSx0aGlzLm9uKFwiY2xpY2tcIix0aGlzLmhhbmRsZUNsaWNrKSx0aGlzLm9uKHRoaXMucGxheWVyXyxcImNvbnRyb2xzdmlzaWJsZVwiLHRoaXMudXBkYXRlKSx0aGlzLnBsYXllckV2ZW50JiZ0aGlzLm9uKHRoaXMucGxheWVyXyx0aGlzLnBsYXllckV2ZW50LHRoaXMudXBkYXRlKSx0aGlzLnJlbW92ZUNsYXNzKFwiZGlzYWJsZWRcIiksdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLDApLHRoaXMuZW5hYmxlZF89ITApfSx0LmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQoKSl7dmFyIGU9dGhpcy5iYXIuZWxfLm93bmVyRG9jdW1lbnQ7dGhpcy5vZmYoXCJtb3VzZWRvd25cIix0aGlzLmhhbmRsZU1vdXNlRG93biksdGhpcy5vZmYoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5oYW5kbGVNb3VzZURvd24pLHRoaXMub2ZmKFwia2V5ZG93blwiLHRoaXMuaGFuZGxlS2V5RG93biksdGhpcy5vZmYoXCJjbGlja1wiLHRoaXMuaGFuZGxlQ2xpY2spLHRoaXMub2ZmKHRoaXMucGxheWVyXyxcImNvbnRyb2xzdmlzaWJsZVwiLHRoaXMudXBkYXRlKSx0aGlzLm9mZihlLFwibW91c2Vtb3ZlXCIsdGhpcy5oYW5kbGVNb3VzZU1vdmUpLHRoaXMub2ZmKGUsXCJtb3VzZXVwXCIsdGhpcy5oYW5kbGVNb3VzZVVwKSx0aGlzLm9mZihlLFwidG91Y2htb3ZlXCIsdGhpcy5oYW5kbGVNb3VzZU1vdmUpLHRoaXMub2ZmKGUsXCJ0b3VjaGVuZFwiLHRoaXMuaGFuZGxlTW91c2VVcCksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSx0aGlzLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksdGhpcy5wbGF5ZXJFdmVudCYmdGhpcy5vZmYodGhpcy5wbGF5ZXJfLHRoaXMucGxheWVyRXZlbnQsdGhpcy51cGRhdGUpLHRoaXMuZW5hYmxlZF89ITF9fSx0LmNyZWF0ZUVsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PW4mJihuPXt9KSx0LmNsYXNzTmFtZT10LmNsYXNzTmFtZStcIiB2anMtc2xpZGVyXCIsdD15KHt0YWJJbmRleDowfSx0KSxuPXkoe3JvbGU6XCJzbGlkZXJcIixcImFyaWEtdmFsdWVub3dcIjowLFwiYXJpYS12YWx1ZW1pblwiOjAsXCJhcmlhLXZhbHVlbWF4XCI6MTAwLHRhYkluZGV4OjB9LG4pLHIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxlLHQsbil9LHQuaGFuZGxlTW91c2VEb3duPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYmFyLmVsXy5vd25lckRvY3VtZW50O1wibW91c2Vkb3duXCI9PT1lLnR5cGUmJmUucHJldmVudERlZmF1bHQoKSxcInRvdWNoc3RhcnRcIiE9PWUudHlwZXx8ZXR8fGUucHJldmVudERlZmF1bHQoKSxPKCksdGhpcy5hZGRDbGFzcyhcInZqcy1zbGlkaW5nXCIpLHRoaXMudHJpZ2dlcihcInNsaWRlcmFjdGl2ZVwiKSx0aGlzLm9uKHQsXCJtb3VzZW1vdmVcIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksdGhpcy5vbih0LFwibW91c2V1cFwiLHRoaXMuaGFuZGxlTW91c2VVcCksdGhpcy5vbih0LFwidG91Y2htb3ZlXCIsdGhpcy5oYW5kbGVNb3VzZU1vdmUpLHRoaXMub24odCxcInRvdWNoZW5kXCIsdGhpcy5oYW5kbGVNb3VzZVVwKSx0aGlzLmhhbmRsZU1vdXNlTW92ZShlKX0sdC5oYW5kbGVNb3VzZU1vdmU9ZnVuY3Rpb24oZSl7fSx0LmhhbmRsZU1vdXNlVXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhci5lbF8ub3duZXJEb2N1bWVudDtEKCksdGhpcy5yZW1vdmVDbGFzcyhcInZqcy1zbGlkaW5nXCIpLHRoaXMudHJpZ2dlcihcInNsaWRlcmluYWN0aXZlXCIpLHRoaXMub2ZmKGUsXCJtb3VzZW1vdmVcIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksdGhpcy5vZmYoZSxcIm1vdXNldXBcIix0aGlzLmhhbmRsZU1vdXNlVXApLHRoaXMub2ZmKGUsXCJ0b3VjaG1vdmVcIix0aGlzLmhhbmRsZU1vdXNlTW92ZSksdGhpcy5vZmYoZSxcInRvdWNoZW5kXCIsdGhpcy5oYW5kbGVNb3VzZVVwKSx0aGlzLnVwZGF0ZSgpfSx0LnVwZGF0ZT1mdW5jdGlvbigpe2lmKHRoaXMuZWxfKXt2YXIgZT10aGlzLmdldFBlcmNlbnQoKSx0PXRoaXMuYmFyO2lmKHQpeyhcIm51bWJlclwiIT10eXBlb2YgZXx8ZSE9ZXx8ZTwwfHxlPT09MS8wKSYmKGU9MCk7dmFyIG49KDEwMCplKS50b0ZpeGVkKDIpK1wiJVwiLHI9dC5lbCgpLnN0eWxlLGk9dGhpcy52ZXJ0aWNhbCgpP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiO3JldHVybiByW2ldIT09biYmKHJbaV09biksZX19fSx0LmNhbGN1bGF0ZURpc3RhbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PUwodGhpcy5lbF8sZSk7cmV0dXJuIHRoaXMudmVydGljYWwoKT90Lnk6dC54fSx0LmhhbmRsZUtleURvd249ZnVuY3Rpb24oZSl7UHQuaXNFdmVudEtleShlLFwiTGVmdFwiKXx8UHQuaXNFdmVudEtleShlLFwiRG93blwiKT8oZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5zdGVwQmFjaygpKTpQdC5pc0V2ZW50S2V5KGUsXCJSaWdodFwiKXx8UHQuaXNFdmVudEtleShlLFwiVXBcIik/KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc3RlcEZvcndhcmQoKSk6ci5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsZSl9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9LHQudmVydGljYWw9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy52ZXJ0aWNhbF98fCExO3RoaXMudmVydGljYWxfPSEhZSx0aGlzLnZlcnRpY2FsXz90aGlzLmFkZENsYXNzKFwidmpzLXNsaWRlci12ZXJ0aWNhbFwiKTp0aGlzLmFkZENsYXNzKFwidmpzLXNsaWRlci1ob3Jpem9udGFsXCIpfSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJTbGlkZXJcIixkaSk7dmFyIHBpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5wYXJ0RWxzXz1bXSxuLm9uKGUsXCJwcm9ncmVzc1wiLG4udXBkYXRlKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy1sb2FkLXByb2dyZXNzXCIsaW5uZXJIVE1MOic8c3BhbiBjbGFzcz1cInZqcy1jb250cm9sLXRleHRcIj48c3Bhbj4nK3RoaXMubG9jYWxpemUoXCJMb2FkZWRcIikrJzwvc3Bhbj46IDxzcGFuIGNsYXNzPVwidmpzLWNvbnRyb2wtdGV4dC1sb2FkZWQtcGVyY2VudGFnZVwiPjAlPC9zcGFuPjwvc3Bhbj4nfSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGFydEVsc189bnVsbCxyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LHQudXBkYXRlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LG4pe3ZhciByPWUvdHx8MDtyZXR1cm4gcj0xMDAqKDE8PXI/MTpyKSxuJiYocj1yLnRvRml4ZWQoMikpLHIrXCIlXCJ9dmFyIG49dGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyLHI9dGhpcy5wbGF5ZXJfLmJ1ZmZlcmVkKCksaT1uJiZuLmlzTGl2ZSgpP24uc2Vla2FibGVFbmQoKTp0aGlzLnBsYXllcl8uZHVyYXRpb24oKSxvPXRoaXMucGxheWVyXy5idWZmZXJlZEVuZCgpLHM9dGhpcy5wYXJ0RWxzXyxhPXRoaXMuJChcIi52anMtY29udHJvbC10ZXh0LWxvYWRlZC1wZXJjZW50YWdlXCIpO3RoaXMuZWxfLnN0eWxlLndpZHRoPXQobyxpKSxUKGEsdChvLGksITApKTtmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9ci5zdGFydChsKSx1PXIuZW5kKGwpLGg9c1tsXTtofHwoaD10aGlzLmVsXy5hcHBlbmRDaGlsZChiKCkpLHNbbF09aCksaC5zdHlsZS5sZWZ0PXQoYyxvKSxoLnN0eWxlLndpZHRoPXQodS1jLG8pfWZvcih2YXIgZD1zLmxlbmd0aDtkPnIubGVuZ3RoO2QtLSl0aGlzLmVsXy5yZW1vdmVDaGlsZChzW2QtMV0pO3MubGVuZ3RoPXIubGVuZ3RofSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJMb2FkUHJvZ3Jlc3NCYXJcIixwaSk7dmFyIGZpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS51cGRhdGU9ZmUocGUoTGUobiksbi51cGRhdGUpLDMwKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy10aW1lLXRvb2x0aXBcIn0se1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pfSx0LnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TSh0aGlzLmVsXyksaT1NKHRoaXMucGxheWVyXy5lbCgpKSxvPWUud2lkdGgqdDtpZihpJiZyKXt2YXIgcz1lLmxlZnQtaS5sZWZ0K28sYT1lLndpZHRoLW8rKGkucmlnaHQtZS5yaWdodCksbD1yLndpZHRoLzI7czxsP2wrPWwtczphPGwmJihsPWEpLGw8MD9sPTA6bD5yLndpZHRoJiYobD1yLndpZHRoKSx0aGlzLmVsXy5zdHlsZS5yaWdodD1cIi1cIitsK1wicHhcIix0aGlzLndyaXRlKG4pfX0sdC53cml0ZT1mdW5jdGlvbihlKXtUKHRoaXMuZWxfLGUpfSx0LnVwZGF0ZVRpbWU9ZnVuY3Rpb24oaSxvLHMsYSl7dmFyIGw9dGhpczt0aGlzLnJhZklkXyYmdGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJhZklkXyksdGhpcy5yYWZJZF89dGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt2YXIgZSx0PWwucGxheWVyXy5kdXJhdGlvbigpO2lmKGwucGxheWVyXy5saXZlVHJhY2tlciYmbC5wbGF5ZXJfLmxpdmVUcmFja2VyLmlzTGl2ZSgpKXt2YXIgbj1sLnBsYXllcl8ubGl2ZVRyYWNrZXIubGl2ZVdpbmRvdygpLHI9bi1vKm47ZT0ocjwxP1wiXCI6XCItXCIpK2lpKHIsbil9ZWxzZSBlPWlpKHMsdCk7bC51cGRhdGUoaSxvLGUpLGEmJmEoKX0pfSxlfShPZSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJUaW1lVG9vbHRpcFwiLGZpKTt2YXIgdmk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybihuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLnVwZGF0ZT1mZShwZShMZShuKSxuLnVwZGF0ZSksMzApLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVFbD1mdW5jdGlvbigpe3JldHVybiByLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLXBsYXktcHJvZ3Jlc3MgdmpzLXNsaWRlci1iYXJcIn0se1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pfSx0LnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0Q2hpbGQoXCJ0aW1lVG9vbHRpcFwiKTtpZihuKXt2YXIgcj10aGlzLnBsYXllcl8uc2NydWJiaW5nKCk/dGhpcy5wbGF5ZXJfLmdldENhY2hlKCkuY3VycmVudFRpbWU6dGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCk7bi51cGRhdGVUaW1lKGUsdCxyKX19LGV9KE9lKTt2aS5wcm90b3R5cGUub3B0aW9uc189e2NoaWxkcmVuOltdfSxxZXx8WGV8fHZpLnByb3RvdHlwZS5vcHRpb25zXy5jaGlsZHJlbi5wdXNoKFwidGltZVRvb2x0aXBcIiksT2UucmVnaXN0ZXJDb21wb25lbnQoXCJQbGF5UHJvZ3Jlc3NCYXJcIix2aSk7dmFyIHlpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS51cGRhdGU9ZmUocGUoTGUobiksbi51cGRhdGUpLDMwKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy1tb3VzZS1kaXNwbGF5XCJ9KX0sdC51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dCp0aGlzLnBsYXllcl8uZHVyYXRpb24oKTt0aGlzLmdldENoaWxkKFwidGltZVRvb2x0aXBcIikudXBkYXRlVGltZShlLHQscixmdW5jdGlvbigpe24uZWxfLnN0eWxlLmxlZnQ9ZS53aWR0aCp0K1wicHhcIn0pfSxlfShPZSk7eWkucHJvdG90eXBlLm9wdGlvbnNfPXtjaGlsZHJlbjpbXCJ0aW1lVG9vbHRpcFwiXX0sT2UucmVnaXN0ZXJDb21wb25lbnQoXCJNb3VzZVRpbWVEaXNwbGF5XCIseWkpO3ZhciBnaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykuc2V0RXZlbnRIYW5kbGVyc18oKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuc2V0RXZlbnRIYW5kbGVyc189ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZT1mZShwZSh0aGlzLHRoaXMudXBkYXRlKSwzMCksdGhpcy5vbih0aGlzLnBsYXllcl8sXCJ0aW1ldXBkYXRlXCIsdGhpcy51cGRhdGUpLHRoaXMub24odGhpcy5wbGF5ZXJfLFwiZW5kZWRcIix0aGlzLmhhbmRsZUVuZGVkKSx0aGlzLm9uKHRoaXMucGxheWVyXyxcImR1cmF0aW9uY2hhbmdlXCIsdGhpcy51cGRhdGUpLHRoaXMucGxheWVyXy5saXZlVHJhY2tlciYmdGhpcy5vbih0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIsXCJsaXZlZWRnZWNoYW5nZVwiLHRoaXMudXBkYXRlKSx0aGlzLnVwZGF0ZUludGVydmFsPW51bGwsdGhpcy5vbih0aGlzLnBsYXllcl8sW1wicGxheWluZ1wiXSx0aGlzLmVuYWJsZUludGVydmFsXyksdGhpcy5vbih0aGlzLnBsYXllcl8sW1wiZW5kZWRcIixcInBhdXNlXCIsXCJ3YWl0aW5nXCJdLHRoaXMuZGlzYWJsZUludGVydmFsXyksXCJoaWRkZW5cImluIGQmJlwidmlzaWJpbGl0eVN0YXRlXCJpbiBkJiZ0aGlzLm9uKGQsXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdGhpcy50b2dnbGVWaXNpYmlsaXR5Xyl9LHQudG9nZ2xlVmlzaWJpbGl0eV89ZnVuY3Rpb24oZSl7ZC5oaWRkZW4/dGhpcy5kaXNhYmxlSW50ZXJ2YWxfKGUpOih0aGlzLmVuYWJsZUludGVydmFsXygpLHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlKSl9LHQuZW5hYmxlSW50ZXJ2YWxfPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVJbnRlcnZhbCksdGhpcy51cGRhdGVJbnRlcnZhbD10aGlzLnNldEludGVydmFsKGZ1bmN0aW9uKCl7ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZS51cGRhdGUpfSwzMCl9LHQuZGlzYWJsZUludGVydmFsXz1mdW5jdGlvbihlKXt0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXImJnRoaXMucGxheWVyXy5saXZlVHJhY2tlci5pc0xpdmUoKSYmXCJlbmRlZFwiIT09ZS50eXBlfHx0aGlzLmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVJbnRlcnZhbCl9LHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy1wcm9ncmVzcy1ob2xkZXJcIn0se1wiYXJpYS1sYWJlbFwiOnRoaXMubG9jYWxpemUoXCJQcm9ncmVzcyBCYXJcIil9KX0sdC51cGRhdGVfPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyLHI9dGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCk7biYmbi5pc0xpdmUoKSYmKHI9dGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyLmxpdmVDdXJyZW50VGltZSgpKSx0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVlbm93XCIsKDEwMCp0KS50b0ZpeGVkKDIpKSx0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVldGV4dFwiLHRoaXMubG9jYWxpemUoXCJwcm9ncmVzcyBiYXIgdGltaW5nOiBjdXJyZW50VGltZT17MX0gZHVyYXRpb249ezJ9XCIsW2lpKGUsciksaWkocixyKV0sXCJ7MX0gb2YgezJ9XCIpKSx0aGlzLmJhciYmdGhpcy5iYXIudXBkYXRlKE0odGhpcy5lbF8pLHQpfSx0LnVwZGF0ZT1mdW5jdGlvbihlKXtpZihudWxsIT09dGhpcy5lbCgpLm9mZnNldFBhcmVudCl7dmFyIHQ9ci5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMudXBkYXRlXyh0aGlzLmdldEN1cnJlbnRUaW1lXygpLHQpLHR9fSx0LmdldEN1cnJlbnRUaW1lXz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBsYXllcl8uc2NydWJiaW5nKCk/dGhpcy5wbGF5ZXJfLmdldENhY2hlKCkuY3VycmVudFRpbWU6dGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCl9LHQuaGFuZGxlRW5kZWQ9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVfKHRoaXMucGxheWVyXy5kdXJhdGlvbigpLDEpfSx0LmdldFBlcmNlbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuZ2V0Q3VycmVudFRpbWVfKCksbj10aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXI7cmV0dXJuIG4mJm4uaXNMaXZlKCk/KGU9KHQtbi5zZWVrYWJsZVN0YXJ0KCkpL24ubGl2ZVdpbmRvdygpLG4uYXRMaXZlRWRnZSgpJiYoZT0xKSk6ZT10L3RoaXMucGxheWVyXy5kdXJhdGlvbigpLDE8PWU/MTplfHwwfSx0LmhhbmRsZU1vdXNlRG93bj1mdW5jdGlvbihlKXtWKGUpJiYoZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnBsYXllcl8uc2NydWJiaW5nKCEwKSx0aGlzLnZpZGVvV2FzUGxheWluZz0hdGhpcy5wbGF5ZXJfLnBhdXNlZCgpLHRoaXMucGxheWVyXy5wYXVzZSgpLHIucHJvdG90eXBlLmhhbmRsZU1vdXNlRG93bi5jYWxsKHRoaXMsZSkpfSx0LmhhbmRsZU1vdXNlTW92ZT1mdW5jdGlvbihlKXtpZihWKGUpKXt2YXIgdCxuPXRoaXMuY2FsY3VsYXRlRGlzdGFuY2UoZSkscj10aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXI7aWYociYmci5pc0xpdmUoKSl7dmFyIGk9ci5zZWVrYWJsZVN0YXJ0KCksbz1yLmxpdmVDdXJyZW50VGltZSgpO2lmKG88PSh0PWkrbipyLmxpdmVXaW5kb3coKSkmJih0PW8pLHQ8PWkmJih0PWkrLjEpLHQ9PT0xLzApcmV0dXJufWVsc2UodD1uKnRoaXMucGxheWVyXy5kdXJhdGlvbigpKT09PXRoaXMucGxheWVyXy5kdXJhdGlvbigpJiYodC09LjEpO3RoaXMucGxheWVyXy5jdXJyZW50VGltZSh0KX19LHQuZW5hYmxlPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuZW5hYmxlLmNhbGwodGhpcyk7dmFyIGU9dGhpcy5nZXRDaGlsZChcIm1vdXNlVGltZURpc3BsYXlcIik7ZSYmZS5zaG93KCl9LHQuZGlzYWJsZT1mdW5jdGlvbigpe3IucHJvdG90eXBlLmRpc2FibGUuY2FsbCh0aGlzKTt2YXIgZT10aGlzLmdldENoaWxkKFwibW91c2VUaW1lRGlzcGxheVwiKTtlJiZlLmhpZGUoKX0sdC5oYW5kbGVNb3VzZVVwPWZ1bmN0aW9uKGUpe3IucHJvdG90eXBlLmhhbmRsZU1vdXNlVXAuY2FsbCh0aGlzLGUpLGUmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wbGF5ZXJfLnNjcnViYmluZyghMSksdGhpcy5wbGF5ZXJfLnRyaWdnZXIoe3R5cGU6XCJ0aW1ldXBkYXRlXCIsdGFyZ2V0OnRoaXMsbWFudWFsbHlUcmlnZ2VyZWQ6ITB9KSx0aGlzLnZpZGVvV2FzUGxheWluZyYma3QodGhpcy5wbGF5ZXJfLnBsYXkoKSl9LHQuc3RlcEZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcl8uY3VycmVudFRpbWUodGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCkrNSl9LHQuc3RlcEJhY2s9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcl8uY3VycmVudFRpbWUodGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCktNSl9LHQuaGFuZGxlQWN0aW9uPWZ1bmN0aW9uKGUpe3RoaXMucGxheWVyXy5wYXVzZWQoKT90aGlzLnBsYXllcl8ucGxheSgpOnRoaXMucGxheWVyXy5wYXVzZSgpfSx0LmhhbmRsZUtleURvd249ZnVuY3Rpb24oZSl7aWYoUHQuaXNFdmVudEtleShlLFwiU3BhY2VcIil8fFB0LmlzRXZlbnRLZXkoZSxcIkVudGVyXCIpKWUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuaGFuZGxlQWN0aW9uKGUpO2Vsc2UgaWYoUHQuaXNFdmVudEtleShlLFwiSG9tZVwiKSllLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoMCk7ZWxzZSBpZihQdC5pc0V2ZW50S2V5KGUsXCJFbmRcIikpZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMucGxheWVyXy5kdXJhdGlvbigpKTtlbHNlIGlmKC9eWzAtOV0kLy50ZXN0KFB0KGUpKSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHQ9MTAqKFB0LmNvZGVzW1B0KGUpXS1QdC5jb2Rlc1swXSkvMTAwO3RoaXMucGxheWVyXy5jdXJyZW50VGltZSh0aGlzLnBsYXllcl8uZHVyYXRpb24oKSp0KX1lbHNlIFB0LmlzRXZlbnRLZXkoZSxcIlBnRG5cIik/KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMucGxheWVyXy5jdXJyZW50VGltZSh0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoKS02MCkpOlB0LmlzRXZlbnRLZXkoZSxcIlBnVXBcIik/KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMucGxheWVyXy5jdXJyZW50VGltZSh0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoKSs2MCkpOnIucHJvdG90eXBlLmhhbmRsZUtleURvd24uY2FsbCh0aGlzLGUpfSxlfShkaSk7Z2kucHJvdG90eXBlLm9wdGlvbnNfPXtjaGlsZHJlbjpbXCJsb2FkUHJvZ3Jlc3NCYXJcIixcInBsYXlQcm9ncmVzc0JhclwiXSxiYXJOYW1lOlwicGxheVByb2dyZXNzQmFyXCJ9LHFlfHxYZXx8Z2kucHJvdG90eXBlLm9wdGlvbnNfLmNoaWxkcmVuLnNwbGljZSgxLDAsXCJtb3VzZVRpbWVEaXNwbGF5XCIpLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiU2Vla0JhclwiLGdpKTt2YXIgbWk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybihuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLmhhbmRsZU1vdXNlTW92ZT1mZShwZShMZShuKSxuLmhhbmRsZU1vdXNlTW92ZSksMzApLG4udGhyb3R0bGVkSGFuZGxlTW91c2VTZWVrPWZlKHBlKExlKG4pLG4uaGFuZGxlTW91c2VTZWVrKSwzMCksbi5lbmFibGUoKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy1wcm9ncmVzcy1jb250cm9sIHZqcy1jb250cm9sXCJ9KX0sdC5oYW5kbGVNb3VzZU1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDaGlsZChcInNlZWtCYXJcIik7aWYodCl7dmFyIG49dC5nZXRDaGlsZChcIm1vdXNlVGltZURpc3BsYXlcIikscj10LmVsKCksaT1NKHIpLG89TChyLGUpLng7MTxvP289MTpvPDAmJihvPTApLG4mJm4udXBkYXRlKGksbyl9fSx0LmhhbmRsZU1vdXNlU2Vlaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldENoaWxkKFwic2Vla0JhclwiKTt0JiZ0LmhhbmRsZU1vdXNlTW92ZShlKX0sdC5lbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZF99LHQuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGUmJmUuZGlzYWJsZSgpfSksdGhpcy5lbmFibGVkKCkmJih0aGlzLm9mZihbXCJtb3VzZWRvd25cIixcInRvdWNoc3RhcnRcIl0sdGhpcy5oYW5kbGVNb3VzZURvd24pLHRoaXMub2ZmKHRoaXMuZWxfLFwibW91c2Vtb3ZlXCIsdGhpcy5oYW5kbGVNb3VzZU1vdmUpLHRoaXMuaGFuZGxlTW91c2VVcCgpLHRoaXMuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLmVuYWJsZWRfPSExKX0sdC5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGUmJmUuZW5hYmxlKCl9KSx0aGlzLmVuYWJsZWQoKXx8KHRoaXMub24oW1wibW91c2Vkb3duXCIsXCJ0b3VjaHN0YXJ0XCJdLHRoaXMuaGFuZGxlTW91c2VEb3duKSx0aGlzLm9uKHRoaXMuZWxfLFwibW91c2Vtb3ZlXCIsdGhpcy5oYW5kbGVNb3VzZU1vdmUpLHRoaXMucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLmVuYWJsZWRfPSEwKX0sdC5oYW5kbGVNb3VzZURvd249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbF8ub3duZXJEb2N1bWVudCxuPXRoaXMuZ2V0Q2hpbGQoXCJzZWVrQmFyXCIpO24mJm4uaGFuZGxlTW91c2VEb3duKGUpLHRoaXMub24odCxcIm1vdXNlbW92ZVwiLHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VTZWVrKSx0aGlzLm9uKHQsXCJ0b3VjaG1vdmVcIix0aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlU2VlayksdGhpcy5vbih0LFwibW91c2V1cFwiLHRoaXMuaGFuZGxlTW91c2VVcCksdGhpcy5vbih0LFwidG91Y2hlbmRcIix0aGlzLmhhbmRsZU1vdXNlVXApfSx0LmhhbmRsZU1vdXNlVXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbF8ub3duZXJEb2N1bWVudCxuPXRoaXMuZ2V0Q2hpbGQoXCJzZWVrQmFyXCIpO24mJm4uaGFuZGxlTW91c2VVcChlKSx0aGlzLm9mZih0LFwibW91c2Vtb3ZlXCIsdGhpcy50aHJvdHRsZWRIYW5kbGVNb3VzZVNlZWspLHRoaXMub2ZmKHQsXCJ0b3VjaG1vdmVcIix0aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlU2VlayksdGhpcy5vZmYodCxcIm1vdXNldXBcIix0aGlzLmhhbmRsZU1vdXNlVXApLHRoaXMub2ZmKHQsXCJ0b3VjaGVuZFwiLHRoaXMuaGFuZGxlTW91c2VVcCl9LGV9KE9lKTttaS5wcm90b3R5cGUub3B0aW9uc189e2NoaWxkcmVuOltcInNlZWtCYXJcIl19LE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiUHJvZ3Jlc3NDb250cm9sXCIsbWkpO3ZhciBfaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub24oZSxbXCJlbnRlcnBpY3R1cmVpbnBpY3R1cmVcIixcImxlYXZlcGljdHVyZWlucGljdHVyZVwiXSxuLmhhbmRsZVBpY3R1cmVJblBpY3R1cmVDaGFuZ2UpLGQucGljdHVyZUluUGljdHVyZUVuYWJsZWR8fG4uZGlzYWJsZSgpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtcGljdHVyZS1pbi1waWN0dXJlLWNvbnRyb2wgXCIrci5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmhhbmRsZVBpY3R1cmVJblBpY3R1cmVDaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXJfLmlzSW5QaWN0dXJlSW5QaWN0dXJlKCk/dGhpcy5jb250cm9sVGV4dChcIkV4aXQgUGljdHVyZS1pbi1QaWN0dXJlXCIpOnRoaXMuY29udHJvbFRleHQoXCJQaWN0dXJlLWluLVBpY3R1cmVcIil9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXJfLmlzSW5QaWN0dXJlSW5QaWN0dXJlKCk/dGhpcy5wbGF5ZXJfLmV4aXRQaWN0dXJlSW5QaWN0dXJlKCk6dGhpcy5wbGF5ZXJfLnJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlKCl9LGV9KEpyKTtfaS5wcm90b3R5cGUuY29udHJvbFRleHRfPVwiUGljdHVyZS1pbi1QaWN0dXJlXCIsT2UucmVnaXN0ZXJDb21wb25lbnQoXCJQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlXCIsX2kpO3ZhciBiaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub24oZSxcImZ1bGxzY3JlZW5jaGFuZ2VcIixuLmhhbmRsZUZ1bGxzY3JlZW5DaGFuZ2UpLCExPT09ZFtlLmZzQXBpXy5mdWxsc2NyZWVuRW5hYmxlZF0mJm4uZGlzYWJsZSgpLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtZnVsbHNjcmVlbi1jb250cm9sIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlPWZ1bmN0aW9uKGUpe3RoaXMucGxheWVyXy5pc0Z1bGxzY3JlZW4oKT90aGlzLmNvbnRyb2xUZXh0KFwiTm9uLUZ1bGxzY3JlZW5cIik6dGhpcy5jb250cm9sVGV4dChcIkZ1bGxzY3JlZW5cIil9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXJfLmlzRnVsbHNjcmVlbigpP3RoaXMucGxheWVyXy5leGl0RnVsbHNjcmVlbigpOnRoaXMucGxheWVyXy5yZXF1ZXN0RnVsbHNjcmVlbigpfSxlfShKcik7YmkucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIkZ1bGxzY3JlZW5cIixPZS5yZWdpc3RlckNvbXBvbmVudChcIkZ1bGxzY3JlZW5Ub2dnbGVcIixiaSk7dmFyIFRpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIERlKHQsZSksdC5wcm90b3R5cGUuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy12b2x1bWUtbGV2ZWxcIixpbm5lckhUTUw6JzxzcGFuIGNsYXNzPVwidmpzLWNvbnRyb2wtdGV4dFwiPjwvc3Bhbj4nfSl9LHR9KE9lKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlZvbHVtZUxldmVsXCIsVGkpO3ZhciBraT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykub24oXCJzbGlkZXJhY3RpdmVcIixuLnVwZGF0ZUxhc3RWb2x1bWVfKSxuLm9uKGUsXCJ2b2x1bWVjaGFuZ2VcIixuLnVwZGF0ZUFSSUFBdHRyaWJ1dGVzKSxlLnJlYWR5KGZ1bmN0aW9uKCl7cmV0dXJuIG4udXBkYXRlQVJJQUF0dHJpYnV0ZXMoKX0pLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVFbD1mdW5jdGlvbigpe3JldHVybiByLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLXZvbHVtZS1iYXIgdmpzLXNsaWRlci1iYXJcIn0se1wiYXJpYS1sYWJlbFwiOnRoaXMubG9jYWxpemUoXCJWb2x1bWUgTGV2ZWxcIiksXCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwifSl9LHQuaGFuZGxlTW91c2VEb3duPWZ1bmN0aW9uKGUpe1YoZSkmJnIucHJvdG90eXBlLmhhbmRsZU1vdXNlRG93bi5jYWxsKHRoaXMsZSl9LHQuaGFuZGxlTW91c2VNb3ZlPWZ1bmN0aW9uKGUpe1YoZSkmJih0aGlzLmNoZWNrTXV0ZWQoKSx0aGlzLnBsYXllcl8udm9sdW1lKHRoaXMuY2FsY3VsYXRlRGlzdGFuY2UoZSkpKX0sdC5jaGVja011dGVkPWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJfLm11dGVkKCkmJnRoaXMucGxheWVyXy5tdXRlZCghMSl9LHQuZ2V0UGVyY2VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBsYXllcl8ubXV0ZWQoKT8wOnRoaXMucGxheWVyXy52b2x1bWUoKX0sdC5zdGVwRm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuY2hlY2tNdXRlZCgpLHRoaXMucGxheWVyXy52b2x1bWUodGhpcy5wbGF5ZXJfLnZvbHVtZSgpKy4xKX0sdC5zdGVwQmFjaz1mdW5jdGlvbigpe3RoaXMuY2hlY2tNdXRlZCgpLHRoaXMucGxheWVyXy52b2x1bWUodGhpcy5wbGF5ZXJfLnZvbHVtZSgpLS4xKX0sdC51cGRhdGVBUklBQXR0cmlidXRlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBsYXllcl8ubXV0ZWQoKT8wOnRoaXMudm9sdW1lQXNQZXJjZW50YWdlXygpO3RoaXMuZWxfLnNldEF0dHJpYnV0ZShcImFyaWEtdmFsdWVub3dcIix0KSx0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVldGV4dFwiLHQrXCIlXCIpfSx0LnZvbHVtZUFzUGVyY2VudGFnZV89ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZCgxMDAqdGhpcy5wbGF5ZXJfLnZvbHVtZSgpKX0sdC51cGRhdGVMYXN0Vm9sdW1lXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnBsYXllcl8udm9sdW1lKCk7dGhpcy5vbmUoXCJzbGlkZXJpbmFjdGl2ZVwiLGZ1bmN0aW9uKCl7MD09PWUucGxheWVyXy52b2x1bWUoKSYmZS5wbGF5ZXJfLmxhc3RWb2x1bWVfKHQpfSl9LGV9KGRpKTtraS5wcm90b3R5cGUub3B0aW9uc189e2NoaWxkcmVuOltcInZvbHVtZUxldmVsXCJdLGJhck5hbWU6XCJ2b2x1bWVMZXZlbFwifSxraS5wcm90b3R5cGUucGxheWVyRXZlbnQ9XCJ2b2x1bWVjaGFuZ2VcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlZvbHVtZUJhclwiLGtpKTt2YXIgQ2k9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiB2b2lkIDA9PT10JiYodD17fSksdC52ZXJ0aWNhbD10LnZlcnRpY2FsfHwhMSxcInVuZGVmaW5lZFwiIT10eXBlb2YgdC52b2x1bWVCYXImJiFhKHQudm9sdW1lQmFyKXx8KHQudm9sdW1lQmFyPXQudm9sdW1lQmFyfHx7fSx0LnZvbHVtZUJhci52ZXJ0aWNhbD10LnZlcnRpY2FsKSxmdW5jdGlvbihlLHQpe3QudGVjaF8mJiF0LnRlY2hfLmZlYXR1cmVzVm9sdW1lQ29udHJvbCYmZS5hZGRDbGFzcyhcInZqcy1oaWRkZW5cIiksZS5vbih0LFwibG9hZHN0YXJ0XCIsZnVuY3Rpb24oKXt0LnRlY2hfLmZlYXR1cmVzVm9sdW1lQ29udHJvbD9lLnJlbW92ZUNsYXNzKFwidmpzLWhpZGRlblwiKTplLmFkZENsYXNzKFwidmpzLWhpZGRlblwiKX0pfShMZShuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLGUpLG4udGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlPWZlKHBlKExlKG4pLG4uaGFuZGxlTW91c2VNb3ZlKSwzMCksbi5vbihcIm1vdXNlZG93blwiLG4uaGFuZGxlTW91c2VEb3duKSxuLm9uKFwidG91Y2hzdGFydFwiLG4uaGFuZGxlTW91c2VEb3duKSxuLm9uKG4udm9sdW1lQmFyLFtcImZvY3VzXCIsXCJzbGlkZXJhY3RpdmVcIl0sZnVuY3Rpb24oKXtuLnZvbHVtZUJhci5hZGRDbGFzcyhcInZqcy1zbGlkZXItYWN0aXZlXCIpLG4uYWRkQ2xhc3MoXCJ2anMtc2xpZGVyLWFjdGl2ZVwiKSxuLnRyaWdnZXIoXCJzbGlkZXJhY3RpdmVcIil9KSxuLm9uKG4udm9sdW1lQmFyLFtcImJsdXJcIixcInNsaWRlcmluYWN0aXZlXCJdLGZ1bmN0aW9uKCl7bi52b2x1bWVCYXIucmVtb3ZlQ2xhc3MoXCJ2anMtc2xpZGVyLWFjdGl2ZVwiKSxuLnJlbW92ZUNsYXNzKFwidmpzLXNsaWRlci1hY3RpdmVcIiksbi50cmlnZ2VyKFwic2xpZGVyaW5hY3RpdmVcIil9KSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXt2YXIgZT1cInZqcy12b2x1bWUtaG9yaXpvbnRhbFwiO3JldHVybiB0aGlzLm9wdGlvbnNfLnZlcnRpY2FsJiYoZT1cInZqcy12b2x1bWUtdmVydGljYWxcIiksci5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy12b2x1bWUtY29udHJvbCB2anMtY29udHJvbCBcIitlfSl9LHQuaGFuZGxlTW91c2VEb3duPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWxfLm93bmVyRG9jdW1lbnQ7dGhpcy5vbih0LFwibW91c2Vtb3ZlXCIsdGhpcy50aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUpLHRoaXMub24odCxcInRvdWNobW92ZVwiLHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlKSx0aGlzLm9uKHQsXCJtb3VzZXVwXCIsdGhpcy5oYW5kbGVNb3VzZVVwKSx0aGlzLm9uKHQsXCJ0b3VjaGVuZFwiLHRoaXMuaGFuZGxlTW91c2VVcCl9LHQuaGFuZGxlTW91c2VVcD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVsXy5vd25lckRvY3VtZW50O3RoaXMub2ZmKHQsXCJtb3VzZW1vdmVcIix0aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlTW92ZSksdGhpcy5vZmYodCxcInRvdWNobW92ZVwiLHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlKSx0aGlzLm9mZih0LFwibW91c2V1cFwiLHRoaXMuaGFuZGxlTW91c2VVcCksdGhpcy5vZmYodCxcInRvdWNoZW5kXCIsdGhpcy5oYW5kbGVNb3VzZVVwKX0sdC5oYW5kbGVNb3VzZU1vdmU9ZnVuY3Rpb24oZSl7dGhpcy52b2x1bWVCYXIuaGFuZGxlTW91c2VNb3ZlKGUpfSxlfShPZSk7Q2kucHJvdG90eXBlLm9wdGlvbnNfPXtjaGlsZHJlbjpbXCJ2b2x1bWVCYXJcIl19LE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiVm9sdW1lQ29udHJvbFwiLENpKTt2YXIgRWk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe3QudGVjaF8mJiF0LnRlY2hfLmZlYXR1cmVzTXV0ZUNvbnRyb2wmJmUuYWRkQ2xhc3MoXCJ2anMtaGlkZGVuXCIpLGUub24odCxcImxvYWRzdGFydFwiLGZ1bmN0aW9uKCl7dC50ZWNoXy5mZWF0dXJlc011dGVDb250cm9sP2UucmVtb3ZlQ2xhc3MoXCJ2anMtaGlkZGVuXCIpOmUuYWRkQ2xhc3MoXCJ2anMtaGlkZGVuXCIpfSl9KExlKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcyksZSksbi5vbihlLFtcImxvYWRzdGFydFwiLFwidm9sdW1lY2hhbmdlXCJdLG4udXBkYXRlKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLW11dGUtY29udHJvbCBcIityLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyl9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wbGF5ZXJfLnZvbHVtZSgpLG49dGhpcy5wbGF5ZXJfLmxhc3RWb2x1bWVfKCk7aWYoMD09PXQpe3ZhciByPW48LjE/LjE6bjt0aGlzLnBsYXllcl8udm9sdW1lKHIpLHRoaXMucGxheWVyXy5tdXRlZCghMSl9ZWxzZSB0aGlzLnBsYXllcl8ubXV0ZWQoIXRoaXMucGxheWVyXy5tdXRlZCgpKX0sdC51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVJY29uXygpLHRoaXMudXBkYXRlQ29udHJvbFRleHRfKCl9LHQudXBkYXRlSWNvbl89ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsYXllcl8udm9sdW1lKCksdD0zO3FlJiZ0aGlzLnBsYXllcl8udGVjaF8mJnRoaXMucGxheWVyXy50ZWNoXy5lbF8mJnRoaXMucGxheWVyXy5tdXRlZCh0aGlzLnBsYXllcl8udGVjaF8uZWxfLm11dGVkKSwwPT09ZXx8dGhpcy5wbGF5ZXJfLm11dGVkKCk/dD0wOmU8LjMzP3Q9MTplPC42NyYmKHQ9Mik7Zm9yKHZhciBuPTA7bjw0O24rKylTKHRoaXMuZWxfLFwidmpzLXZvbC1cIituKTtFKHRoaXMuZWxfLFwidmpzLXZvbC1cIit0KX0sdC51cGRhdGVDb250cm9sVGV4dF89ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsYXllcl8ubXV0ZWQoKXx8MD09PXRoaXMucGxheWVyXy52b2x1bWUoKT9cIlVubXV0ZVwiOlwiTXV0ZVwiO3RoaXMuY29udHJvbFRleHQoKSE9PWUmJnRoaXMuY29udHJvbFRleHQoZSl9LGV9KEpyKTtFaS5wcm90b3R5cGUuY29udHJvbFRleHRfPVwiTXV0ZVwiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiTXV0ZVRvZ2dsZVwiLEVpKTt2YXIgU2k9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiB2b2lkIDA9PT10JiYodD17fSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuaW5saW5lP3QuaW5saW5lPXQuaW5saW5lOnQuaW5saW5lPSEwLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LnZvbHVtZUNvbnRyb2wmJiFhKHQudm9sdW1lQ29udHJvbCl8fCh0LnZvbHVtZUNvbnRyb2w9dC52b2x1bWVDb250cm9sfHx7fSx0LnZvbHVtZUNvbnRyb2wudmVydGljYWw9IXQuaW5saW5lKSwobj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5vbihlLFtcImxvYWRzdGFydFwiXSxuLnZvbHVtZVBhbmVsU3RhdGVfKSxuLm9uKG4ubXV0ZVRvZ2dsZSxcImtleXVwXCIsbi5oYW5kbGVLZXlQcmVzcyksbi5vbihuLnZvbHVtZUNvbnRyb2wsXCJrZXl1cFwiLG4uaGFuZGxlVm9sdW1lQ29udHJvbEtleVVwKSxuLm9uKFwia2V5ZG93blwiLG4uaGFuZGxlS2V5UHJlc3MpLG4ub24oXCJtb3VzZW92ZXJcIixuLmhhbmRsZU1vdXNlT3Zlciksbi5vbihcIm1vdXNlb3V0XCIsbi5oYW5kbGVNb3VzZU91dCksbi5vbihuLnZvbHVtZUNvbnRyb2wsW1wic2xpZGVyYWN0aXZlXCJdLG4uc2xpZGVyQWN0aXZlXyksbi5vbihuLnZvbHVtZUNvbnRyb2wsW1wic2xpZGVyaW5hY3RpdmVcIl0sbi5zbGlkZXJJbmFjdGl2ZV8pLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5zbGlkZXJBY3RpdmVfPWZ1bmN0aW9uKCl7dGhpcy5hZGRDbGFzcyhcInZqcy1zbGlkZXItYWN0aXZlXCIpfSx0LnNsaWRlckluYWN0aXZlXz1mdW5jdGlvbigpe3RoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtc2xpZGVyLWFjdGl2ZVwiKX0sdC52b2x1bWVQYW5lbFN0YXRlXz1mdW5jdGlvbigpe3RoaXMudm9sdW1lQ29udHJvbC5oYXNDbGFzcyhcInZqcy1oaWRkZW5cIikmJnRoaXMubXV0ZVRvZ2dsZS5oYXNDbGFzcyhcInZqcy1oaWRkZW5cIikmJnRoaXMuYWRkQ2xhc3MoXCJ2anMtaGlkZGVuXCIpLHRoaXMudm9sdW1lQ29udHJvbC5oYXNDbGFzcyhcInZqcy1oaWRkZW5cIikmJiF0aGlzLm11dGVUb2dnbGUuaGFzQ2xhc3MoXCJ2anMtaGlkZGVuXCIpJiZ0aGlzLmFkZENsYXNzKFwidmpzLW11dGUtdG9nZ2xlLW9ubHlcIil9LHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXt2YXIgZT1cInZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbFwiO3JldHVybiB0aGlzLm9wdGlvbnNfLmlubGluZXx8KGU9XCJ2anMtdm9sdW1lLXBhbmVsLXZlcnRpY2FsXCIpLHIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6XCJ2anMtdm9sdW1lLXBhbmVsIHZqcy1jb250cm9sIFwiK2V9KX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVNb3VzZU91dCgpLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sdC5oYW5kbGVWb2x1bWVDb250cm9sS2V5VXA9ZnVuY3Rpb24oZSl7UHQuaXNFdmVudEtleShlLFwiRXNjXCIpJiZ0aGlzLm11dGVUb2dnbGUuZm9jdXMoKX0sdC5oYW5kbGVNb3VzZU92ZXI9ZnVuY3Rpb24oZSl7dGhpcy5hZGRDbGFzcyhcInZqcy1ob3ZlclwiKSxsZShkLFwia2V5dXBcIixwZSh0aGlzLHRoaXMuaGFuZGxlS2V5UHJlc3MpKX0sdC5oYW5kbGVNb3VzZU91dD1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWhvdmVyXCIpLGNlKGQsXCJrZXl1cFwiLHBlKHRoaXMsdGhpcy5oYW5kbGVLZXlQcmVzcykpfSx0LmhhbmRsZUtleVByZXNzPWZ1bmN0aW9uKGUpe1B0LmlzRXZlbnRLZXkoZSxcIkVzY1wiKSYmdGhpcy5oYW5kbGVNb3VzZU91dCgpfSxlfShPZSk7U2kucHJvdG90eXBlLm9wdGlvbnNfPXtjaGlsZHJlbjpbXCJtdXRlVG9nZ2xlXCIsXCJ2b2x1bWVDb250cm9sXCJdfSxPZS5yZWdpc3RlckNvbXBvbmVudChcIlZvbHVtZVBhbmVsXCIsU2kpO3ZhciB3aT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuIG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcyx0JiYobi5tZW51QnV0dG9uXz10Lm1lbnVCdXR0b24pLG4uZm9jdXNlZENoaWxkXz0tMSxuLm9uKFwia2V5ZG93blwiLG4uaGFuZGxlS2V5RG93biksbi5ib3VuZEhhbmRsZUJsdXJfPXBlKExlKG4pLG4uaGFuZGxlQmx1ciksbi5ib3VuZEhhbmRsZVRhcENsaWNrXz1wZShMZShuKSxuLmhhbmRsZVRhcENsaWNrKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lckZvckl0ZW09ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIE9lJiYodGhpcy5vbihlLFwiYmx1clwiLHRoaXMuYm91bmRIYW5kbGVCbHVyXyksdGhpcy5vbihlLFtcInRhcFwiLFwiY2xpY2tcIl0sdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXykpfSx0LnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JJdGVtPWZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBPZSYmKHRoaXMub2ZmKGUsXCJibHVyXCIsdGhpcy5ib3VuZEhhbmRsZUJsdXJfKSx0aGlzLm9mZihlLFtcInRhcFwiLFwiY2xpY2tcIl0sdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXykpfSx0LnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmdldENoaWxkKGUpKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JJdGVtKGUpLHIucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyxlKX0sdC5hZGRJdGVtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWRkQ2hpbGQoZSk7dCYmdGhpcy5hZGRFdmVudExpc3RlbmVyRm9ySXRlbSh0KX0sdC5jcmVhdGVFbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uc18uY29udGVudEVsVHlwZXx8XCJ1bFwiO3RoaXMuY29udGVudEVsXz1iKGUse2NsYXNzTmFtZTpcInZqcy1tZW51LWNvbnRlbnRcIn0pLHRoaXMuY29udGVudEVsXy5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJtZW51XCIpO3ZhciB0PXIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHthcHBlbmQ6dGhpcy5jb250ZW50RWxfLGNsYXNzTmFtZTpcInZqcy1tZW51XCJ9KTtyZXR1cm4gdC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbF8pLGxlKHQsXCJjbGlja1wiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSksdH0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50RWxfPW51bGwsdGhpcy5ib3VuZEhhbmRsZUJsdXJfPW51bGwsdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXz1udWxsLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sdC5oYW5kbGVCbHVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVsYXRlZFRhcmdldHx8ZC5hY3RpdmVFbGVtZW50O2lmKCF0aGlzLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5lbCgpPT09dH0pKXt2YXIgbj10aGlzLm1lbnVCdXR0b25fO24mJm4uYnV0dG9uUHJlc3NlZF8mJnQhPT1uLmVsKCkuZmlyc3RDaGlsZCYmbi51bnByZXNzQnV0dG9uKCl9fSx0LmhhbmRsZVRhcENsaWNrPWZ1bmN0aW9uKHQpe2lmKHRoaXMubWVudUJ1dHRvbl8pe3RoaXMubWVudUJ1dHRvbl8udW5wcmVzc0J1dHRvbigpO3ZhciBlPXRoaXMuY2hpbGRyZW4oKTtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47dmFyIG49ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWwoKT09PXQudGFyZ2V0fSlbMF07aWYoIW4pcmV0dXJuO1wiQ2FwdGlvblNldHRpbmdzTWVudUl0ZW1cIiE9PW4ubmFtZSgpJiZ0aGlzLm1lbnVCdXR0b25fLmZvY3VzKCl9fSx0LmhhbmRsZUtleURvd249ZnVuY3Rpb24oZSl7UHQuaXNFdmVudEtleShlLFwiTGVmdFwiKXx8UHQuaXNFdmVudEtleShlLFwiRG93blwiKT8oZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5zdGVwRm9yd2FyZCgpKTooUHQuaXNFdmVudEtleShlLFwiUmlnaHRcIil8fFB0LmlzRXZlbnRLZXkoZSxcIlVwXCIpKSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc3RlcEJhY2soKSl9LHQuc3RlcEZvcndhcmQ9ZnVuY3Rpb24oKXt2YXIgZT0wO3ZvaWQgMCE9PXRoaXMuZm9jdXNlZENoaWxkXyYmKGU9dGhpcy5mb2N1c2VkQ2hpbGRfKzEpLHRoaXMuZm9jdXMoZSl9LHQuc3RlcEJhY2s9ZnVuY3Rpb24oKXt2YXIgZT0wO3ZvaWQgMCE9PXRoaXMuZm9jdXNlZENoaWxkXyYmKGU9dGhpcy5mb2N1c2VkQ2hpbGRfLTEpLHRoaXMuZm9jdXMoZSl9LHQuZm9jdXM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHQ9dGhpcy5jaGlsZHJlbigpLnNsaWNlKCk7dC5sZW5ndGgmJnRbMF0uY2xhc3NOYW1lJiYvdmpzLW1lbnUtdGl0bGUvLnRlc3QodFswXS5jbGFzc05hbWUpJiZ0LnNoaWZ0KCksMDx0Lmxlbmd0aCYmKGU8MD9lPTA6ZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoLTEpLHRbdGhpcy5mb2N1c2VkQ2hpbGRfPWVdLmVsXy5mb2N1cygpKX0sZX0oT2UpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiTWVudVwiLHdpKTt2YXIgUGk9ZnVuY3Rpb24oaSl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PXt9KSwobj1pLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5tZW51QnV0dG9uXz1uZXcgSnIoZSx0KSxuLm1lbnVCdXR0b25fLmNvbnRyb2xUZXh0KG4uY29udHJvbFRleHRfKSxuLm1lbnVCdXR0b25fLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhhc3BvcHVwXCIsXCJ0cnVlXCIpO3ZhciByPUpyLnByb3RvdHlwZS5idWlsZENTU0NsYXNzKCk7cmV0dXJuIG4ubWVudUJ1dHRvbl8uZWxfLmNsYXNzTmFtZT1uLmJ1aWxkQ1NTQ2xhc3MoKStcIiBcIityLG4ubWVudUJ1dHRvbl8ucmVtb3ZlQ2xhc3MoXCJ2anMtY29udHJvbFwiKSxuLmFkZENoaWxkKG4ubWVudUJ1dHRvbl8pLG4udXBkYXRlKCksbi5lbmFibGVkXz0hMCxuLm9uKG4ubWVudUJ1dHRvbl8sXCJ0YXBcIixuLmhhbmRsZUNsaWNrKSxuLm9uKG4ubWVudUJ1dHRvbl8sXCJjbGlja1wiLG4uaGFuZGxlQ2xpY2spLG4ub24obi5tZW51QnV0dG9uXyxcImtleWRvd25cIixuLmhhbmRsZUtleURvd24pLG4ub24obi5tZW51QnV0dG9uXyxcIm1vdXNlZW50ZXJcIixmdW5jdGlvbigpe24uYWRkQ2xhc3MoXCJ2anMtaG92ZXJcIiksbi5tZW51LnNob3coKSxsZShkLFwia2V5dXBcIixwZShMZShuKSxuLmhhbmRsZU1lbnVLZXlVcCkpfSksbi5vbihcIm1vdXNlbGVhdmVcIixuLmhhbmRsZU1vdXNlTGVhdmUpLG4ub24oXCJrZXlkb3duXCIsbi5oYW5kbGVTdWJtZW51S2V5RG93biksbn1EZShlLGkpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTWVudSgpO3RoaXMubWVudSYmKHRoaXMubWVudS5kaXNwb3NlKCksdGhpcy5yZW1vdmVDaGlsZCh0aGlzLm1lbnUpKSx0aGlzLm1lbnU9ZSx0aGlzLmFkZENoaWxkKGUpLHRoaXMuYnV0dG9uUHJlc3NlZF89ITEsdGhpcy5tZW51QnV0dG9uXy5lbF8uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLFwiZmFsc2VcIiksdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGg8PXRoaXMuaGlkZVRocmVzaG9sZF8/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9LHQuY3JlYXRlTWVudT1mdW5jdGlvbigpe3ZhciBlPW5ldyB3aSh0aGlzLnBsYXllcl8se21lbnVCdXR0b246dGhpc30pO2lmKHRoaXMuaGlkZVRocmVzaG9sZF89MCx0aGlzLm9wdGlvbnNfLnRpdGxlKXt2YXIgdD1iKFwibGlcIix7Y2xhc3NOYW1lOlwidmpzLW1lbnUtdGl0bGVcIixpbm5lckhUTUw6QWUodGhpcy5vcHRpb25zXy50aXRsZSksdGFiSW5kZXg6LTF9KTt0aGlzLmhpZGVUaHJlc2hvbGRfKz0xO3ZhciBuPW5ldyBPZSh0aGlzLnBsYXllcl8se2VsOnR9KTtlLmFkZEl0ZW0obil9aWYodGhpcy5pdGVtcz10aGlzLmNyZWF0ZUl0ZW1zKCksdGhpcy5pdGVtcylmb3IodmFyIHI9MDtyPHRoaXMuaXRlbXMubGVuZ3RoO3IrKyllLmFkZEl0ZW0odGhpcy5pdGVtc1tyXSk7cmV0dXJuIGV9LHQuY3JlYXRlSXRlbXM9ZnVuY3Rpb24oKXt9LHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLFwiZGl2XCIse2NsYXNzTmFtZTp0aGlzLmJ1aWxkV3JhcHBlckNTU0NsYXNzKCl9LHt9KX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3ZhciBlPVwidmpzLW1lbnUtYnV0dG9uXCI7cmV0dXJuITA9PT10aGlzLm9wdGlvbnNfLmlubGluZT9lKz1cIi1pbmxpbmVcIjplKz1cIi1wb3B1cFwiLFwidmpzLW1lbnUtYnV0dG9uIFwiK2UrXCIgXCIrSnIucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MoKStcIiBcIitpLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyl9LHQuYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3ZhciBlPVwidmpzLW1lbnUtYnV0dG9uXCI7cmV0dXJuITA9PT10aGlzLm9wdGlvbnNfLmlubGluZT9lKz1cIi1pbmxpbmVcIjplKz1cIi1wb3B1cFwiLFwidmpzLW1lbnUtYnV0dG9uIFwiK2UrXCIgXCIraS5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmNvbnRyb2xUZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMubWVudUJ1dHRvbl8uZWwoKSksdGhpcy5tZW51QnV0dG9uXy5jb250cm9sVGV4dChlLHQpfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZU1vdXNlTGVhdmUoKSxpLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dGhpcy5idXR0b25QcmVzc2VkXz90aGlzLnVucHJlc3NCdXR0b24oKTp0aGlzLnByZXNzQnV0dG9uKCl9LHQuaGFuZGxlTW91c2VMZWF2ZT1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWhvdmVyXCIpLGNlKGQsXCJrZXl1cFwiLHBlKHRoaXMsdGhpcy5oYW5kbGVNZW51S2V5VXApKX0sdC5mb2N1cz1mdW5jdGlvbigpe3RoaXMubWVudUJ1dHRvbl8uZm9jdXMoKX0sdC5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5tZW51QnV0dG9uXy5ibHVyKCl9LHQuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihlKXtQdC5pc0V2ZW50S2V5KGUsXCJFc2NcIil8fFB0LmlzRXZlbnRLZXkoZSxcIlRhYlwiKT8odGhpcy5idXR0b25QcmVzc2VkXyYmdGhpcy51bnByZXNzQnV0dG9uKCksUHQuaXNFdmVudEtleShlLFwiVGFiXCIpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudUJ1dHRvbl8uZm9jdXMoKSkpOihQdC5pc0V2ZW50S2V5KGUsXCJVcFwiKXx8UHQuaXNFdmVudEtleShlLFwiRG93blwiKSkmJih0aGlzLmJ1dHRvblByZXNzZWRffHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJlc3NCdXR0b24oKSkpfSx0LmhhbmRsZU1lbnVLZXlVcD1mdW5jdGlvbihlKXsoUHQuaXNFdmVudEtleShlLFwiRXNjXCIpfHxQdC5pc0V2ZW50S2V5KGUsXCJUYWJcIikpJiZ0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWhvdmVyXCIpfSx0LmhhbmRsZVN1Ym1lbnVLZXlQcmVzcz1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZVN1Ym1lbnVLZXlEb3duKGUpfSx0LmhhbmRsZVN1Ym1lbnVLZXlEb3duPWZ1bmN0aW9uKGUpeyhQdC5pc0V2ZW50S2V5KGUsXCJFc2NcIil8fFB0LmlzRXZlbnRLZXkoZSxcIlRhYlwiKSkmJih0aGlzLmJ1dHRvblByZXNzZWRfJiZ0aGlzLnVucHJlc3NCdXR0b24oKSxQdC5pc0V2ZW50S2V5KGUsXCJUYWJcIil8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5tZW51QnV0dG9uXy5mb2N1cygpKSl9LHQucHJlc3NCdXR0b249ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWRfKXtpZih0aGlzLmJ1dHRvblByZXNzZWRfPSEwLHRoaXMubWVudS5zaG93KCksdGhpcy5tZW51LmxvY2tTaG93aW5nKCksdGhpcy5tZW51QnV0dG9uXy5lbF8uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxxZSYmbSgpKXJldHVybjt0aGlzLm1lbnUuZm9jdXMoKX19LHQudW5wcmVzc0J1dHRvbj1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZF8mJih0aGlzLmJ1dHRvblByZXNzZWRfPSExLHRoaXMubWVudS51bmxvY2tTaG93aW5nKCksdGhpcy5tZW51LmhpZGUoKSx0aGlzLm1lbnVCdXR0b25fLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSl9LHQuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMudW5wcmVzc0J1dHRvbigpLHRoaXMuZW5hYmxlZF89ITEsdGhpcy5hZGRDbGFzcyhcInZqcy1kaXNhYmxlZFwiKSx0aGlzLm1lbnVCdXR0b25fLmRpc2FibGUoKX0sdC5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWRfPSEwLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtZGlzYWJsZWRcIiksdGhpcy5tZW51QnV0dG9uXy5lbmFibGUoKX0sZX0oT2UpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiTWVudUJ1dHRvblwiLFBpKTt2YXIgeGk9ZnVuY3Rpb24obyl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuLHI9dC50cmFja3M7aWYoKG49by5jYWxsKHRoaXMsZSx0KXx8dGhpcykuaXRlbXMubGVuZ3RoPD0xJiZuLmhpZGUoKSwhcilyZXR1cm4gTGUobik7dmFyIGk9cGUoTGUobiksbi51cGRhdGUpO3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoXCJyZW1vdmV0cmFja1wiLGkpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImFkZHRyYWNrXCIsaSksbi5wbGF5ZXJfLm9uKFwicmVhZHlcIixpKSxuLnBsYXllcl8ub24oXCJkaXNwb3NlXCIsZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZW1vdmV0cmFja1wiLGkpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFkZHRyYWNrXCIsaSl9KSxufXJldHVybiBEZShlLG8pLGV9KFBpKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlRyYWNrQnV0dG9uXCIseGkpO3ZhciBqaT1bXCJUYWJcIixcIkVzY1wiLFwiVXBcIixcIkRvd25cIixcIlJpZ2h0XCIsXCJMZWZ0XCJdLEFpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5zZWxlY3RhYmxlPXQuc2VsZWN0YWJsZSxuLmlzU2VsZWN0ZWRfPXQuc2VsZWN0ZWR8fCExLG4ubXVsdGlTZWxlY3RhYmxlPXQubXVsdGlTZWxlY3RhYmxlLG4uc2VsZWN0ZWQobi5pc1NlbGVjdGVkXyksbi5zZWxlY3RhYmxlP24ubXVsdGlTZWxlY3RhYmxlP24uZWxfLnNldEF0dHJpYnV0ZShcInJvbGVcIixcIm1lbnVpdGVtY2hlY2tib3hcIik6bi5lbF8uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwibWVudWl0ZW1yYWRpb1wiKTpuLmVsXy5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJtZW51aXRlbVwiKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm5vbkljb25Db250cm9sPSEwLHIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImxpXCIseSh7Y2xhc3NOYW1lOlwidmpzLW1lbnUtaXRlbVwiLGlubmVySFRNTDonPHNwYW4gY2xhc3M9XCJ2anMtbWVudS1pdGVtLXRleHRcIj4nK3RoaXMubG9jYWxpemUodGhpcy5vcHRpb25zXy5sYWJlbCkrXCI8L3NwYW4+XCIsdGFiSW5kZXg6LTF9LHQpLG4pfSx0LmhhbmRsZUtleURvd249ZnVuY3Rpb24odCl7amkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gUHQuaXNFdmVudEtleSh0LGUpfSl8fHIucHJvdG90eXBlLmhhbmRsZUtleURvd24uY2FsbCh0aGlzLHQpfSx0LmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQoITApfSx0LnNlbGVjdGVkPWZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0YWJsZSYmKGU/KHRoaXMuYWRkQ2xhc3MoXCJ2anMtc2VsZWN0ZWRcIiksdGhpcy5lbF8uc2V0QXR0cmlidXRlKFwiYXJpYS1jaGVja2VkXCIsXCJ0cnVlXCIpLHRoaXMuY29udHJvbFRleHQoXCIsIHNlbGVjdGVkXCIpLHRoaXMuaXNTZWxlY3RlZF89ITApOih0aGlzLnJlbW92ZUNsYXNzKFwidmpzLXNlbGVjdGVkXCIpLHRoaXMuZWxfLnNldEF0dHJpYnV0ZShcImFyaWEtY2hlY2tlZFwiLFwiZmFsc2VcIiksdGhpcy5jb250cm9sVGV4dChcIlwiKSx0aGlzLmlzU2VsZWN0ZWRfPSExKSl9LGV9KFdyKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIk1lbnVJdGVtXCIsQWkpO3ZhciBJaT1mdW5jdGlvbihsKXtmdW5jdGlvbiBlKGUsdCl7dmFyIHIsbj10LnRyYWNrLGk9ZS50ZXh0VHJhY2tzKCk7dC5sYWJlbD1uLmxhYmVsfHxuLmxhbmd1YWdlfHxcIlVua25vd25cIix0LnNlbGVjdGVkPVwic2hvd2luZ1wiPT09bi5tb2RlLChyPWwuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLnRyYWNrPW4sci5raW5kcz0odC5raW5kc3x8W3Qua2luZHx8ci50cmFjay5raW5kXSkuZmlsdGVyKEJvb2xlYW4pO2Z1bmN0aW9uIG8oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyLmhhbmRsZVRyYWNrc0NoYW5nZS5hcHBseShMZShyKSx0KX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07ci5oYW5kbGVTZWxlY3RlZExhbmd1YWdlQ2hhbmdlLmFwcGx5KExlKHIpLHQpfXZhciBhO2Uub24oW1wibG9hZHN0YXJ0XCIsXCJ0ZXh0dHJhY2tjaGFuZ2VcIl0sbyksaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbyksaS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0ZWRsYW5ndWFnZWNoYW5nZVwiLHMpLHIub24oXCJkaXNwb3NlXCIsZnVuY3Rpb24oKXtlLm9mZihbXCJsb2Fkc3RhcnRcIixcInRleHR0cmFja2NoYW5nZVwiXSxvKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixvKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3RlZGxhbmd1YWdlY2hhbmdlXCIscyl9KSx2b2lkIDA9PT1pLm9uY2hhbmdlJiZyLm9uKFtcInRhcFwiLFwiY2xpY2tcIl0sZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiIT10eXBlb2YgaC5FdmVudCl0cnl7YT1uZXcgaC5FdmVudChcImNoYW5nZVwiKX1jYXRjaChlKXt9YXx8KGE9ZC5jcmVhdGVFdmVudChcIkV2ZW50XCIpKS5pbml0RXZlbnQoXCJjaGFuZ2VcIiwhMCwhMCksaS5kaXNwYXRjaEV2ZW50KGEpfSk7cmV0dXJuIHIuaGFuZGxlVHJhY2tzQ2hhbmdlKCkscn1EZShlLGwpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhY2ssbj10aGlzLnBsYXllcl8udGV4dFRyYWNrcygpO2lmKGwucHJvdG90eXBlLmhhbmRsZUNsaWNrLmNhbGwodGhpcyxlKSxuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdOy0xIT09dGhpcy5raW5kcy5pbmRleE9mKGkua2luZCkmJihpPT09dD9cInNob3dpbmdcIiE9PWkubW9kZSYmKGkubW9kZT1cInNob3dpbmdcIik6XCJkaXNhYmxlZFwiIT09aS5tb2RlJiYoaS5tb2RlPVwiZGlzYWJsZWRcIikpfX0sdC5oYW5kbGVUcmFja3NDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJzaG93aW5nXCI9PT10aGlzLnRyYWNrLm1vZGU7dCE9PXRoaXMuaXNTZWxlY3RlZF8mJnRoaXMuc2VsZWN0ZWQodCl9LHQuaGFuZGxlU2VsZWN0ZWRMYW5ndWFnZUNoYW5nZT1mdW5jdGlvbihlKXtpZihcInNob3dpbmdcIj09PXRoaXMudHJhY2subW9kZSl7dmFyIHQ9dGhpcy5wbGF5ZXJfLmNhY2hlXy5zZWxlY3RlZExhbmd1YWdlO2lmKHQmJnQuZW5hYmxlZCYmdC5sYW5ndWFnZT09PXRoaXMudHJhY2subGFuZ3VhZ2UmJnQua2luZCE9PXRoaXMudHJhY2sua2luZClyZXR1cm47dGhpcy5wbGF5ZXJfLmNhY2hlXy5zZWxlY3RlZExhbmd1YWdlPXtlbmFibGVkOiEwLGxhbmd1YWdlOnRoaXMudHJhY2subGFuZ3VhZ2Usa2luZDp0aGlzLnRyYWNrLmtpbmR9fX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50cmFjaz1udWxsLGwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKX0sZX0oQWkpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiVGV4dFRyYWNrTWVudUl0ZW1cIixJaSk7dmFyIE9pPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUoZSx0KXtyZXR1cm4gdC50cmFjaz17cGxheWVyOmUsa2luZDp0LmtpbmQsa2luZHM6dC5raW5kcyxkZWZhdWx0OiExLG1vZGU6XCJkaXNhYmxlZFwifSx0LmtpbmRzfHwodC5raW5kcz1bdC5raW5kXSksdC5sYWJlbD90LnRyYWNrLmxhYmVsPXQubGFiZWw6dC50cmFjay5sYWJlbD10LmtpbmRzLmpvaW4oXCIgYW5kIFwiKStcIiBvZmZcIix0LnNlbGVjdGFibGU9ITAsdC5tdWx0aVNlbGVjdGFibGU9ITEsbi5jYWxsKHRoaXMsZSx0KXx8dGhpc31EZShlLG4pO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmhhbmRsZVRyYWNrc0NoYW5nZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5wbGF5ZXIoKS50ZXh0VHJhY2tzKCksbj0hMCxyPTAsaT10Lmxlbmd0aDtyPGk7cisrKXt2YXIgbz10W3JdO2lmKC0xPHRoaXMub3B0aW9uc18ua2luZHMuaW5kZXhPZihvLmtpbmQpJiZcInNob3dpbmdcIj09PW8ubW9kZSl7bj0hMTticmVha319biE9PXRoaXMuaXNTZWxlY3RlZF8mJnRoaXMuc2VsZWN0ZWQobil9LHQuaGFuZGxlU2VsZWN0ZWRMYW5ndWFnZUNoYW5nZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5wbGF5ZXIoKS50ZXh0VHJhY2tzKCksbj0hMCxyPTAsaT10Lmxlbmd0aDtyPGk7cisrKXt2YXIgbz10W3JdO2lmKC0xPFtcImNhcHRpb25zXCIsXCJkZXNjcmlwdGlvbnNcIixcInN1YnRpdGxlc1wiXS5pbmRleE9mKG8ua2luZCkmJlwic2hvd2luZ1wiPT09by5tb2RlKXtuPSExO2JyZWFrfX1uJiYodGhpcy5wbGF5ZXJfLmNhY2hlXy5zZWxlY3RlZExhbmd1YWdlPXtlbmFibGVkOiExfSl9LGV9KElpKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIk9mZlRleHRUcmFja01lbnVJdGVtXCIsT2kpO3ZhciBEaT1mdW5jdGlvbihuKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSx0LnRyYWNrcz1lLnRleHRUcmFja3MoKSxuLmNhbGwodGhpcyxlLHQpfHx0aGlzfXJldHVybiBEZShlLG4pLGUucHJvdG90eXBlLmNyZWF0ZUl0ZW1zPWZ1bmN0aW9uKGUsdCl7dmFyIG47dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PXQmJih0PUlpKSx0aGlzLmxhYmVsXyYmKG49dGhpcy5sYWJlbF8rXCIgb2ZmXCIpLGUucHVzaChuZXcgT2kodGhpcy5wbGF5ZXJfLHtraW5kczp0aGlzLmtpbmRzXyxraW5kOnRoaXMua2luZF8sbGFiZWw6bn0pKSx0aGlzLmhpZGVUaHJlc2hvbGRfKz0xO3ZhciByPXRoaXMucGxheWVyXy50ZXh0VHJhY2tzKCk7QXJyYXkuaXNBcnJheSh0aGlzLmtpbmRzXyl8fCh0aGlzLmtpbmRzXz1bdGhpcy5raW5kX10pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKC0xPHRoaXMua2luZHNfLmluZGV4T2Yoby5raW5kKSl7dmFyIHM9bmV3IHQodGhpcy5wbGF5ZXJfLHt0cmFjazpvLGtpbmRzOnRoaXMua2luZHNfLGtpbmQ6dGhpcy5raW5kXyxzZWxlY3RhYmxlOiEwLG11bHRpU2VsZWN0YWJsZTohMX0pO3MuYWRkQ2xhc3MoXCJ2anMtXCIrby5raW5kK1wiLW1lbnUtaXRlbVwiKSxlLnB1c2gocyl9fXJldHVybiBlfSxlfSh4aSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJUZXh0VHJhY2tCdXR0b25cIixEaSk7dmFyIE1pPWZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbixyPXQudHJhY2ssaT10LmN1ZSxvPWUuY3VycmVudFRpbWUoKTtyZXR1cm4gdC5zZWxlY3RhYmxlPSEwLHQubXVsdGlTZWxlY3RhYmxlPSExLHQubGFiZWw9aS50ZXh0LHQuc2VsZWN0ZWQ9aS5zdGFydFRpbWU8PW8mJm88aS5lbmRUaW1lLChuPXMuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLnRyYWNrPXIsbi5jdWU9aSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJjdWVjaGFuZ2VcIixwZShMZShuKSxuLnVwZGF0ZSkpLG59RGUoZSxzKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5oYW5kbGVDbGljaz1mdW5jdGlvbihlKXtzLnByb3RvdHlwZS5oYW5kbGVDbGljay5jYWxsKHRoaXMpLHRoaXMucGxheWVyXy5jdXJyZW50VGltZSh0aGlzLmN1ZS5zdGFydFRpbWUpLHRoaXMudXBkYXRlKHRoaXMuY3VlLnN0YXJ0VGltZSl9LHQudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3VlLG49dGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCk7dGhpcy5zZWxlY3RlZCh0LnN0YXJ0VGltZTw9biYmbjx0LmVuZFRpbWUpfSxlfShBaSk7T2UucmVnaXN0ZXJDb21wb25lbnQoXCJDaGFwdGVyc1RyYWNrTWVudUl0ZW1cIixNaSk7dmFyIE5pPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0LG4pe3JldHVybiByLmNhbGwodGhpcyxlLHQsbil8fHRoaXN9RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtY2hhcHRlcnMtYnV0dG9uIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWNoYXB0ZXJzLWJ1dHRvbiBcIityLnByb3RvdHlwZS5idWlsZFdyYXBwZXJDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnRyYWNrXyYmKCFlfHxcImFkZHRyYWNrXCIhPT1lLnR5cGUmJlwicmVtb3ZldHJhY2tcIiE9PWUudHlwZSl8fHRoaXMuc2V0VHJhY2sodGhpcy5maW5kQ2hhcHRlcnNUcmFjaygpKSxyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKX0sdC5zZXRUcmFjaz1mdW5jdGlvbihlKXtpZih0aGlzLnRyYWNrXyE9PWUpe2lmKHRoaXMudXBkYXRlSGFuZGxlcl98fCh0aGlzLnVwZGF0ZUhhbmRsZXJfPXRoaXMudXBkYXRlLmJpbmQodGhpcykpLHRoaXMudHJhY2tfKXt2YXIgdD10aGlzLnBsYXllcl8ucmVtb3RlVGV4dFRyYWNrRWxzKCkuZ2V0VHJhY2tFbGVtZW50QnlUcmFja18odGhpcy50cmFja18pO3QmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLnVwZGF0ZUhhbmRsZXJfKSx0aGlzLnRyYWNrXz1udWxsfWlmKHRoaXMudHJhY2tfPWUsdGhpcy50cmFja18pe3RoaXMudHJhY2tfLm1vZGU9XCJoaWRkZW5cIjt2YXIgbj10aGlzLnBsYXllcl8ucmVtb3RlVGV4dFRyYWNrRWxzKCkuZ2V0VHJhY2tFbGVtZW50QnlUcmFja18odGhpcy50cmFja18pO24mJm4uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLnVwZGF0ZUhhbmRsZXJfKX19fSx0LmZpbmRDaGFwdGVyc1RyYWNrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMucGxheWVyXy50ZXh0VHJhY2tzKCl8fFtdLHQ9ZS5sZW5ndGgtMTswPD10O3QtLSl7dmFyIG49ZVt0XTtpZihuLmtpbmQ9PT10aGlzLmtpbmRfKXJldHVybiBufX0sdC5nZXRNZW51Q2FwdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNrXyYmdGhpcy50cmFja18ubGFiZWw/dGhpcy50cmFja18ubGFiZWw6dGhpcy5sb2NhbGl6ZShBZSh0aGlzLmtpbmRfKSl9LHQuY3JlYXRlTWVudT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnNfLnRpdGxlPXRoaXMuZ2V0TWVudUNhcHRpb24oKSxyLnByb3RvdHlwZS5jcmVhdGVNZW51LmNhbGwodGhpcyl9LHQuY3JlYXRlSXRlbXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtpZighdGhpcy50cmFja18pcmV0dXJuIGU7dmFyIHQ9dGhpcy50cmFja18uY3VlcztpZighdClyZXR1cm4gZTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspe3ZhciBpPXRbbl0sbz1uZXcgTWkodGhpcy5wbGF5ZXJfLHt0cmFjazp0aGlzLnRyYWNrXyxjdWU6aX0pO2UucHVzaChvKX1yZXR1cm4gZX0sZX0oRGkpO05pLnByb3RvdHlwZS5raW5kXz1cImNoYXB0ZXJzXCIsTmkucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIkNoYXB0ZXJzXCIsT2UucmVnaXN0ZXJDb21wb25lbnQoXCJDaGFwdGVyc0J1dHRvblwiLE5pKTt2YXIgTGk9ZnVuY3Rpb24ocyl7ZnVuY3Rpb24gZShlLHQsbil7dmFyIHI7cj1zLmNhbGwodGhpcyxlLHQsbil8fHRoaXM7dmFyIGk9ZS50ZXh0VHJhY2tzKCksbz1wZShMZShyKSxyLmhhbmRsZVRyYWNrc0NoYW5nZSk7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLHIub24oXCJkaXNwb3NlXCIsZnVuY3Rpb24oKXtpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixvKX0pLHJ9RGUoZSxzKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5oYW5kbGVUcmFja3NDaGFuZ2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMucGxheWVyKCkudGV4dFRyYWNrcygpLG49ITEscj0wLGk9dC5sZW5ndGg7cjxpO3IrKyl7dmFyIG89dFtyXTtpZihvLmtpbmQhPT10aGlzLmtpbmRfJiZcInNob3dpbmdcIj09PW8ubW9kZSl7bj0hMDticmVha319bj90aGlzLmRpc2FibGUoKTp0aGlzLmVuYWJsZSgpfSx0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uIFwiK3MucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWRlc2NyaXB0aW9ucy1idXR0b24gXCIrcy5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sZX0oRGkpO0xpLnByb3RvdHlwZS5raW5kXz1cImRlc2NyaXB0aW9uc1wiLExpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJEZXNjcmlwdGlvbnNcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIkRlc2NyaXB0aW9uc0J1dHRvblwiLExpKTt2YXIgRmk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQsbil7cmV0dXJuIHIuY2FsbCh0aGlzLGUsdCxuKXx8dGhpc31EZShlLHIpO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1zdWJ0aXRsZXMtYnV0dG9uIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLXN1YnRpdGxlcy1idXR0b24gXCIrci5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sZX0oRGkpO0ZpLnByb3RvdHlwZS5raW5kXz1cInN1YnRpdGxlc1wiLEZpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJTdWJ0aXRsZXNcIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlN1YnRpdGxlc0J1dHRvblwiLEZpKTt2YXIgUmk9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiB0LnRyYWNrPXtwbGF5ZXI6ZSxraW5kOnQua2luZCxsYWJlbDp0LmtpbmQrXCIgc2V0dGluZ3NcIixzZWxlY3RhYmxlOiExLGRlZmF1bHQ6ITEsbW9kZTpcImRpc2FibGVkXCJ9LHQuc2VsZWN0YWJsZT0hMSx0Lm5hbWU9XCJDYXB0aW9uU2V0dGluZ3NNZW51SXRlbVwiLChuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLmFkZENsYXNzKFwidmpzLXRleHR0cmFjay1zZXR0aW5nc1wiKSxuLmNvbnRyb2xUZXh0KFwiLCBvcGVucyBcIit0LmtpbmQrXCIgc2V0dGluZ3MgZGlhbG9nXCIpLG59cmV0dXJuIERlKGUsciksZS5wcm90b3R5cGUuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXIoKS5nZXRDaGlsZChcInRleHRUcmFja1NldHRpbmdzXCIpLm9wZW4oKX0sZX0oSWkpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQ2FwdGlvblNldHRpbmdzTWVudUl0ZW1cIixSaSk7dmFyIEJpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0LG4pe3JldHVybiByLmNhbGwodGhpcyxlLHQsbil8fHRoaXN9RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtY2FwdGlvbnMtYnV0dG9uIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWNhcHRpb25zLWJ1dHRvbiBcIityLnByb3RvdHlwZS5idWlsZFdyYXBwZXJDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmNyZWF0ZUl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMucGxheWVyKCkudGVjaF8mJnRoaXMucGxheWVyKCkudGVjaF8uZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzfHwhdGhpcy5wbGF5ZXIoKS5nZXRDaGlsZChcInRleHRUcmFja1NldHRpbmdzXCIpfHwoZS5wdXNoKG5ldyBSaSh0aGlzLnBsYXllcl8se2tpbmQ6dGhpcy5raW5kX30pKSx0aGlzLmhpZGVUaHJlc2hvbGRfKz0xKSxyLnByb3RvdHlwZS5jcmVhdGVJdGVtcy5jYWxsKHRoaXMsZSl9LGV9KERpKTtCaS5wcm90b3R5cGUua2luZF89XCJjYXB0aW9uc1wiLEJpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJDYXB0aW9uc1wiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQ2FwdGlvbnNCdXR0b25cIixCaSk7dmFyICRpPWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIERlKGUsaSksZS5wcm90b3R5cGUuY3JlYXRlRWw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8c3BhbiBjbGFzcz1cInZqcy1tZW51LWl0ZW0tdGV4dFwiPicrdGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLmxhYmVsKTtyZXR1cm5cImNhcHRpb25zXCI9PT10aGlzLm9wdGlvbnNfLnRyYWNrLmtpbmQmJihyKz0nXFxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInZqcy1pY29uLXBsYWNlaG9sZGVyXCI+PC9zcGFuPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2anMtY29udHJvbC10ZXh0XCI+ICcrdGhpcy5sb2NhbGl6ZShcIkNhcHRpb25zXCIpK1wiPC9zcGFuPlxcbiAgICAgIFwiKSxyKz1cIjwvc3Bhbj5cIixpLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsZSx5KHtpbm5lckhUTUw6cn0sdCksbil9LGV9KElpKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlN1YnNDYXBzTWVudUl0ZW1cIiwkaSk7dmFyIEhpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLChuPXIuY2FsbCh0aGlzLGUsdCl8fHRoaXMpLmxhYmVsXz1cInN1YnRpdGxlc1wiLC0xPFtcImVuXCIsXCJlbi11c1wiLFwiZW4tY2FcIixcImZyLWNhXCJdLmluZGV4T2Yobi5wbGF5ZXJfLmxhbmd1YWdlXykmJihuLmxhYmVsXz1cImNhcHRpb25zXCIpLG4ubWVudUJ1dHRvbl8uY29udHJvbFRleHQoQWUobi5sYWJlbF8pKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLXN1YnMtY2Fwcy1idXR0b24gXCIrci5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmJ1aWxkV3JhcHBlckNTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtc3Vicy1jYXBzLWJ1dHRvbiBcIityLnByb3RvdHlwZS5idWlsZFdyYXBwZXJDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmNyZWF0ZUl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMucGxheWVyKCkudGVjaF8mJnRoaXMucGxheWVyKCkudGVjaF8uZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzfHwhdGhpcy5wbGF5ZXIoKS5nZXRDaGlsZChcInRleHRUcmFja1NldHRpbmdzXCIpfHwoZS5wdXNoKG5ldyBSaSh0aGlzLnBsYXllcl8se2tpbmQ6dGhpcy5sYWJlbF99KSksdGhpcy5oaWRlVGhyZXNob2xkXys9MSksZT1yLnByb3RvdHlwZS5jcmVhdGVJdGVtcy5jYWxsKHRoaXMsZSwkaSl9LGV9KERpKTtIaS5wcm90b3R5cGUua2luZHNfPVtcImNhcHRpb25zXCIsXCJzdWJ0aXRsZXNcIl0sSGkucHJvdG90eXBlLmNvbnRyb2xUZXh0Xz1cIlN1YnRpdGxlc1wiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiU3Vic0NhcHNCdXR0b25cIixIaSk7dmFyIFZpPWZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgcixuPXQudHJhY2ssaT1lLmF1ZGlvVHJhY2tzKCk7dC5sYWJlbD1uLmxhYmVsfHxuLmxhbmd1YWdlfHxcIlVua25vd25cIix0LnNlbGVjdGVkPW4uZW5hYmxlZCwocj1zLmNhbGwodGhpcyxlLHQpfHx0aGlzKS50cmFjaz1uLHIuYWRkQ2xhc3MoXCJ2anMtXCIrbi5raW5kK1wiLW1lbnUtaXRlbVwiKTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07ci5oYW5kbGVUcmFja3NDaGFuZ2UuYXBwbHkoTGUociksdCl9cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLHIub24oXCJkaXNwb3NlXCIsZnVuY3Rpb24oKXtpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixvKX0pLHJ9RGUoZSxzKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVFbD1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxzcGFuIGNsYXNzPVwidmpzLW1lbnUtaXRlbS10ZXh0XCI+Jyt0aGlzLmxvY2FsaXplKHRoaXMub3B0aW9uc18ubGFiZWwpO3JldHVyblwibWFpbi1kZXNjXCI9PT10aGlzLm9wdGlvbnNfLnRyYWNrLmtpbmQmJihyKz0nXFxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInZqcy1pY29uLXBsYWNlaG9sZGVyXCI+PC9zcGFuPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2anMtY29udHJvbC10ZXh0XCI+ICcrdGhpcy5sb2NhbGl6ZShcIkRlc2NyaXB0aW9uc1wiKStcIjwvc3Bhbj5cXG4gICAgICBcIikscis9XCI8L3NwYW4+XCIscy5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLGUseSh7aW5uZXJIVE1MOnJ9LHQpLG4pfSx0LmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGxheWVyXy5hdWRpb1RyYWNrcygpO3MucHJvdG90eXBlLmhhbmRsZUNsaWNrLmNhbGwodGhpcyxlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVuYWJsZWQ9cj09PXRoaXMudHJhY2t9fSx0LmhhbmRsZVRyYWNrc0NoYW5nZT1mdW5jdGlvbihlKXt0aGlzLnNlbGVjdGVkKHRoaXMudHJhY2suZW5hYmxlZCl9LGV9KEFpKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIkF1ZGlvVHJhY2tNZW51SXRlbVwiLFZpKTt2YXIgVWk9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksdC50cmFja3M9ZS5hdWRpb1RyYWNrcygpLG4uY2FsbCh0aGlzLGUsdCl8fHRoaXN9RGUoZSxuKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtYXVkaW8tYnV0dG9uIFwiK24ucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWF1ZGlvLWJ1dHRvbiBcIituLnByb3RvdHlwZS5idWlsZFdyYXBwZXJDU1NDbGFzcy5jYWxsKHRoaXMpfSx0LmNyZWF0ZUl0ZW1zPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVtdKSx0aGlzLmhpZGVUaHJlc2hvbGRfPTE7Zm9yKHZhciB0PXRoaXMucGxheWVyXy5hdWRpb1RyYWNrcygpLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtlLnB1c2gobmV3IFZpKHRoaXMucGxheWVyXyx7dHJhY2s6cixzZWxlY3RhYmxlOiEwLG11bHRpU2VsZWN0YWJsZTohMX0pKX1yZXR1cm4gZX0sZX0oeGkpO1VpLnByb3RvdHlwZS5jb250cm9sVGV4dF89XCJBdWRpbyBUcmFja1wiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQXVkaW9UcmFja0J1dHRvblwiLFVpKTt2YXIgV2k9ZnVuY3Rpb24obyl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuLHI9dC5yYXRlLGk9cGFyc2VGbG9hdChyLDEwKTtyZXR1cm4gdC5sYWJlbD1yLHQuc2VsZWN0ZWQ9MT09PWksdC5zZWxlY3RhYmxlPSEwLHQubXVsdGlTZWxlY3RhYmxlPSExLChuPW8uY2FsbCh0aGlzLGUsdCl8fHRoaXMpLmxhYmVsPXIsbi5yYXRlPWksbi5vbihlLFwicmF0ZWNoYW5nZVwiLG4udXBkYXRlKSxufURlKGUsbyk7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7by5wcm90b3R5cGUuaGFuZGxlQ2xpY2suY2FsbCh0aGlzKSx0aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZSh0aGlzLnJhdGUpfSx0LnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnNlbGVjdGVkKHRoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKCk9PT10aGlzLnJhdGUpfSxlfShBaSk7V2kucHJvdG90eXBlLmNvbnRlbnRFbFR5cGU9XCJidXR0b25cIixPZS5yZWdpc3RlckNvbXBvbmVudChcIlBsYXliYWNrUmF0ZU1lbnVJdGVtXCIsV2kpO3ZhciBLaT1mdW5jdGlvbihyKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG47cmV0dXJuKG49ci5jYWxsKHRoaXMsZSx0KXx8dGhpcykudXBkYXRlVmlzaWJpbGl0eSgpLG4udXBkYXRlTGFiZWwoKSxuLm9uKGUsXCJsb2Fkc3RhcnRcIixuLnVwZGF0ZVZpc2liaWxpdHkpLG4ub24oZSxcInJhdGVjaGFuZ2VcIixuLnVwZGF0ZUxhYmVsKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlRWw9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMpO3JldHVybiB0aGlzLmxhYmVsRWxfPWIoXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLXBsYXliYWNrLXJhdGUtdmFsdWVcIixpbm5lckhUTUw6XCIxeFwifSksZS5hcHBlbmRDaGlsZCh0aGlzLmxhYmVsRWxfKSxlfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxhYmVsRWxfPW51bGwsci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSx0LmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1wbGF5YmFjay1yYXRlIFwiK3IucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5idWlsZFdyYXBwZXJDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLXBsYXliYWNrLXJhdGUgXCIrci5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKX0sdC5jcmVhdGVNZW51PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHdpKHRoaXMucGxheWVyKCkpLHQ9dGhpcy5wbGF5YmFja1JhdGVzKCk7aWYodClmb3IodmFyIG49dC5sZW5ndGgtMTswPD1uO24tLSllLmFkZENoaWxkKG5ldyBXaSh0aGlzLnBsYXllcigpLHtyYXRlOnRbbl0rXCJ4XCJ9KSk7cmV0dXJuIGV9LHQudXBkYXRlQVJJQUF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt0aGlzLmVsKCkuc2V0QXR0cmlidXRlKFwiYXJpYS12YWx1ZW5vd1wiLHRoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKCkpfSx0LmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZSgpLG49dGhpcy5wbGF5YmFja1JhdGVzKCkscj1uWzBdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldPnQpe3I9bltpXTticmVha310aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZShyKX0sdC5wbGF5YmFja1JhdGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uc18ucGxheWJhY2tSYXRlc3x8dGhpcy5vcHRpb25zXy5wbGF5ZXJPcHRpb25zJiZ0aGlzLm9wdGlvbnNfLnBsYXllck9wdGlvbnMucGxheWJhY2tSYXRlc30sdC5wbGF5YmFja1JhdGVTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIoKS50ZWNoXyYmdGhpcy5wbGF5ZXIoKS50ZWNoXy5mZWF0dXJlc1BsYXliYWNrUmF0ZSYmdGhpcy5wbGF5YmFja1JhdGVzKCkmJjA8dGhpcy5wbGF5YmFja1JhdGVzKCkubGVuZ3RofSx0LnVwZGF0ZVZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7dGhpcy5wbGF5YmFja1JhdGVTdXBwb3J0ZWQoKT90aGlzLnJlbW92ZUNsYXNzKFwidmpzLWhpZGRlblwiKTp0aGlzLmFkZENsYXNzKFwidmpzLWhpZGRlblwiKX0sdC51cGRhdGVMYWJlbD1mdW5jdGlvbihlKXt0aGlzLnBsYXliYWNrUmF0ZVN1cHBvcnRlZCgpJiYodGhpcy5sYWJlbEVsXy5pbm5lckhUTUw9dGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGUoKStcInhcIil9LGV9KFBpKTtLaS5wcm90b3R5cGUuY29udHJvbFRleHRfPVwiUGxheWJhY2sgUmF0ZVwiLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiUGxheWJhY2tSYXRlTWVudUJ1dHRvblwiLEtpKTt2YXIgemk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31EZSh0LGUpO3ZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLmJ1aWxkQ1NTQ2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm5cInZqcy1zcGFjZXIgXCIrZS5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpfSxuLmNyZWF0ZUVsPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiLHtjbGFzc05hbWU6dGhpcy5idWlsZENTU0NsYXNzKCl9KX0sdH0oT2UpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiU3BhY2VyXCIsemkpO3ZhciBxaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfURlKGUsdCk7dmFyIG49ZS5wcm90b3R5cGU7cmV0dXJuIG4uYnVpbGRDU1NDbGFzcz1mdW5jdGlvbigpe3JldHVyblwidmpzLWN1c3RvbS1jb250cm9sLXNwYWNlciBcIit0LnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyl9LG4uY3JlYXRlRWw9ZnVuY3Rpb24oKXt2YXIgZT10LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMse2NsYXNzTmFtZTp0aGlzLmJ1aWxkQ1NTQ2xhc3MoKX0pO3JldHVybiBlLmlubmVySFRNTD1cIsKgXCIsZX0sZX0oemkpO09lLnJlZ2lzdGVyQ29tcG9uZW50KFwiQ3VzdG9tQ29udHJvbFNwYWNlclwiLHFpKTt2YXIgR2k9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gRGUodCxlKSx0LnByb3RvdHlwZS5jcmVhdGVFbD1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLWNvbnRyb2wtYmFyXCIsZGlyOlwibHRyXCJ9KX0sdH0oT2UpO0dpLnByb3RvdHlwZS5vcHRpb25zXz17Y2hpbGRyZW46W1wicGxheVRvZ2dsZVwiLFwidm9sdW1lUGFuZWxcIixcImN1cnJlbnRUaW1lRGlzcGxheVwiLFwidGltZURpdmlkZXJcIixcImR1cmF0aW9uRGlzcGxheVwiLFwicHJvZ3Jlc3NDb250cm9sXCIsXCJsaXZlRGlzcGxheVwiLFwic2Vla1RvTGl2ZVwiLFwicmVtYWluaW5nVGltZURpc3BsYXlcIixcImN1c3RvbUNvbnRyb2xTcGFjZXJcIixcInBsYXliYWNrUmF0ZU1lbnVCdXR0b25cIixcImNoYXB0ZXJzQnV0dG9uXCIsXCJkZXNjcmlwdGlvbnNCdXR0b25cIixcInN1YnNDYXBzQnV0dG9uXCIsXCJhdWRpb1RyYWNrQnV0dG9uXCIsXCJmdWxsc2NyZWVuVG9nZ2xlXCJdfSxcImV4aXRQaWN0dXJlSW5QaWN0dXJlXCJpbiBkJiZHaS5wcm90b3R5cGUub3B0aW9uc18uY2hpbGRyZW4uc3BsaWNlKEdpLnByb3RvdHlwZS5vcHRpb25zXy5jaGlsZHJlbi5sZW5ndGgtMSwwLFwicGljdHVyZUluUGljdHVyZVRvZ2dsZVwiKSxPZS5yZWdpc3RlckNvbXBvbmVudChcIkNvbnRyb2xCYXJcIixHaSk7dmFyIFhpPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbjtyZXR1cm4obj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS5vbihlLFwiZXJyb3JcIixuLm9wZW4pLG59RGUoZSxyKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJ2anMtZXJyb3ItZGlzcGxheSBcIityLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyl9LHQuY29udGVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGxheWVyKCkuZXJyb3IoKTtyZXR1cm4gZT90aGlzLmxvY2FsaXplKGUubWVzc2FnZSk6XCJcIn0sZX0oanQpO1hpLnByb3RvdHlwZS5vcHRpb25zXz1JZShqdC5wcm90b3R5cGUub3B0aW9uc18se3BhdXNlT25PcGVuOiExLGZpbGxBbHdheXM6ITAsdGVtcG9yYXJ5OiExLHVuY2xvc2VhYmxlOiEwfSksT2UucmVnaXN0ZXJDb21wb25lbnQoXCJFcnJvckRpc3BsYXlcIixYaSk7dmFyIFlpPVwidmpzLXRleHQtdHJhY2stc2V0dGluZ3NcIixRaT1bXCIjMDAwXCIsXCJCbGFja1wiXSxKaT1bXCIjMDBGXCIsXCJCbHVlXCJdLFppPVtcIiMwRkZcIixcIkN5YW5cIl0sZW89W1wiIzBGMFwiLFwiR3JlZW5cIl0sdG89W1wiI0YwRlwiLFwiTWFnZW50YVwiXSxubz1bXCIjRjAwXCIsXCJSZWRcIl0scm89W1wiI0ZGRlwiLFwiV2hpdGVcIl0saW89W1wiI0ZGMFwiLFwiWWVsbG93XCJdLG9vPVtcIjFcIixcIk9wYXF1ZVwiXSxzbz1bXCIwLjVcIixcIlNlbWktVHJhbnNwYXJlbnRcIl0sYW89W1wiMFwiLFwiVHJhbnNwYXJlbnRcIl0sbG89e2JhY2tncm91bmRDb2xvcjp7c2VsZWN0b3I6XCIudmpzLWJnLWNvbG9yID4gc2VsZWN0XCIsaWQ6XCJjYXB0aW9ucy1iYWNrZ3JvdW5kLWNvbG9yLSVzXCIsbGFiZWw6XCJDb2xvclwiLG9wdGlvbnM6W1FpLHJvLG5vLGVvLEppLGlvLHRvLFppXX0sYmFja2dyb3VuZE9wYWNpdHk6e3NlbGVjdG9yOlwiLnZqcy1iZy1vcGFjaXR5ID4gc2VsZWN0XCIsaWQ6XCJjYXB0aW9ucy1iYWNrZ3JvdW5kLW9wYWNpdHktJXNcIixsYWJlbDpcIlRyYW5zcGFyZW5jeVwiLG9wdGlvbnM6W29vLHNvLGFvXX0sY29sb3I6e3NlbGVjdG9yOlwiLnZqcy1mZy1jb2xvciA+IHNlbGVjdFwiLGlkOlwiY2FwdGlvbnMtZm9yZWdyb3VuZC1jb2xvci0lc1wiLGxhYmVsOlwiQ29sb3JcIixvcHRpb25zOltybyxRaSxubyxlbyxKaSxpbyx0byxaaV19LGVkZ2VTdHlsZTp7c2VsZWN0b3I6XCIudmpzLWVkZ2Utc3R5bGUgPiBzZWxlY3RcIixpZDpcIiVzXCIsbGFiZWw6XCJUZXh0IEVkZ2UgU3R5bGVcIixvcHRpb25zOltbXCJub25lXCIsXCJOb25lXCJdLFtcInJhaXNlZFwiLFwiUmFpc2VkXCJdLFtcImRlcHJlc3NlZFwiLFwiRGVwcmVzc2VkXCJdLFtcInVuaWZvcm1cIixcIlVuaWZvcm1cIl0sW1wiZHJvcHNoYWRvd1wiLFwiRHJvcHNoYWRvd1wiXV19LGZvbnRGYW1pbHk6e3NlbGVjdG9yOlwiLnZqcy1mb250LWZhbWlseSA+IHNlbGVjdFwiLGlkOlwiY2FwdGlvbnMtZm9udC1mYW1pbHktJXNcIixsYWJlbDpcIkZvbnQgRmFtaWx5XCIsb3B0aW9uczpbW1wicHJvcG9ydGlvbmFsU2Fuc1NlcmlmXCIsXCJQcm9wb3J0aW9uYWwgU2Fucy1TZXJpZlwiXSxbXCJtb25vc3BhY2VTYW5zU2VyaWZcIixcIk1vbm9zcGFjZSBTYW5zLVNlcmlmXCJdLFtcInByb3BvcnRpb25hbFNlcmlmXCIsXCJQcm9wb3J0aW9uYWwgU2VyaWZcIl0sW1wibW9ub3NwYWNlU2VyaWZcIixcIk1vbm9zcGFjZSBTZXJpZlwiXSxbXCJjYXN1YWxcIixcIkNhc3VhbFwiXSxbXCJzY3JpcHRcIixcIlNjcmlwdFwiXSxbXCJzbWFsbC1jYXBzXCIsXCJTbWFsbCBDYXBzXCJdXX0sZm9udFBlcmNlbnQ6e3NlbGVjdG9yOlwiLnZqcy1mb250LXBlcmNlbnQgPiBzZWxlY3RcIixpZDpcImNhcHRpb25zLWZvbnQtc2l6ZS0lc1wiLGxhYmVsOlwiRm9udCBTaXplXCIsb3B0aW9uczpbW1wiMC41MFwiLFwiNTAlXCJdLFtcIjAuNzVcIixcIjc1JVwiXSxbXCIxLjAwXCIsXCIxMDAlXCJdLFtcIjEuMjVcIixcIjEyNSVcIl0sW1wiMS41MFwiLFwiMTUwJVwiXSxbXCIxLjc1XCIsXCIxNzUlXCJdLFtcIjIuMDBcIixcIjIwMCVcIl0sW1wiMy4wMFwiLFwiMzAwJVwiXSxbXCI0LjAwXCIsXCI0MDAlXCJdXSxkZWZhdWx0OjIscGFyc2VyOmZ1bmN0aW9uKGUpe3JldHVyblwiMS4wMFwiPT09ZT9udWxsOk51bWJlcihlKX19LHRleHRPcGFjaXR5OntzZWxlY3RvcjpcIi52anMtdGV4dC1vcGFjaXR5ID4gc2VsZWN0XCIsaWQ6XCJjYXB0aW9ucy1mb3JlZ3JvdW5kLW9wYWNpdHktJXNcIixsYWJlbDpcIlRyYW5zcGFyZW5jeVwiLG9wdGlvbnM6W29vLHNvXX0sd2luZG93Q29sb3I6e3NlbGVjdG9yOlwiLnZqcy13aW5kb3ctY29sb3IgPiBzZWxlY3RcIixpZDpcImNhcHRpb25zLXdpbmRvdy1jb2xvci0lc1wiLGxhYmVsOlwiQ29sb3JcIn0sd2luZG93T3BhY2l0eTp7c2VsZWN0b3I6XCIudmpzLXdpbmRvdy1vcGFjaXR5ID4gc2VsZWN0XCIsaWQ6XCJjYXB0aW9ucy13aW5kb3ctb3BhY2l0eS0lc1wiLGxhYmVsOlwiVHJhbnNwYXJlbmN5XCIsb3B0aW9uczpbYW8sc28sb29dfX07ZnVuY3Rpb24gY28oZSx0KXtpZih0JiYoZT10KGUpKSxlJiZcIm5vbmVcIiE9PWUpcmV0dXJuIGV9bG8ud2luZG93Q29sb3Iub3B0aW9ucz1sby5iYWNrZ3JvdW5kQ29sb3Iub3B0aW9uczt2YXIgdW89ZnVuY3Rpb24ocil7ZnVuY3Rpb24gZShlLHQpe3ZhciBuO3JldHVybiB0LnRlbXBvcmFyeT0hMSwobj1yLmNhbGwodGhpcyxlLHQpfHx0aGlzKS51cGRhdGVEaXNwbGF5PXBlKExlKG4pLG4udXBkYXRlRGlzcGxheSksbi5maWxsKCksbi5oYXNCZWVuT3BlbmVkXz1uLmhhc0JlZW5GaWxsZWRfPSEwLG4uZW5kRGlhbG9nPWIoXCJwXCIse2NsYXNzTmFtZTpcInZqcy1jb250cm9sLXRleHRcIix0ZXh0Q29udGVudDpuLmxvY2FsaXplKFwiRW5kIG9mIGRpYWxvZyB3aW5kb3cuXCIpfSksbi5lbCgpLmFwcGVuZENoaWxkKG4uZW5kRGlhbG9nKSxuLnNldERlZmF1bHRzKCksdm9pZCAwPT09dC5wZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3MmJihuLm9wdGlvbnNfLnBlcnNpc3RUZXh0VHJhY2tTZXR0aW5ncz1uLm9wdGlvbnNfLnBsYXllck9wdGlvbnMucGVyc2lzdFRleHRUcmFja1NldHRpbmdzKSxuLm9uKG4uJChcIi52anMtZG9uZS1idXR0b25cIiksXCJjbGlja1wiLGZ1bmN0aW9uKCl7bi5zYXZlU2V0dGluZ3MoKSxuLmNsb3NlKCl9KSxuLm9uKG4uJChcIi52anMtZGVmYXVsdC1idXR0b25cIiksXCJjbGlja1wiLGZ1bmN0aW9uKCl7bi5zZXREZWZhdWx0cygpLG4udXBkYXRlRGlzcGxheSgpfSksaShsbyxmdW5jdGlvbihlKXtuLm9uKG4uJChlLnNlbGVjdG9yKSxcImNoYW5nZVwiLG4udXBkYXRlRGlzcGxheSl9KSxuLm9wdGlvbnNfLnBlcnNpc3RUZXh0VHJhY2tTZXR0aW5ncyYmbi5yZXN0b3JlU2V0dGluZ3MoKSxufURlKGUscik7dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZW5kRGlhbG9nPW51bGwsci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSx0LmNyZWF0ZUVsU2VsZWN0Xz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT10JiYodD1cIlwiKSx2b2lkIDA9PT1uJiYobj1cImxhYmVsXCIpO3ZhciBpPWxvW2VdLG89aS5pZC5yZXBsYWNlKFwiJXNcIix0aGlzLmlkXykscz1bdCxvXS5qb2luKFwiIFwiKS50cmltKCk7cmV0dXJuW1wiPFwiK24rJyBpZD1cIicrbysnXCIgY2xhc3M9XCInKyhcImxhYmVsXCI9PT1uP1widmpzLWxhYmVsXCI6XCJcIikrJ1wiPicsdGhpcy5sb2NhbGl6ZShpLmxhYmVsKSxcIjwvXCIrbitcIj5cIiwnPHNlbGVjdCBhcmlhLWxhYmVsbGVkYnk9XCInK3MrJ1wiPiddLmNvbmNhdChpLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW8rXCItXCIrZVsxXS5yZXBsYWNlKC9cXFcrL2csXCJcIik7cmV0dXJuWyc8b3B0aW9uIGlkPVwiJyt0KydcIiB2YWx1ZT1cIicrZVswXSsnXCIgJywnYXJpYS1sYWJlbGxlZGJ5PVwiJytzK1wiIFwiK3QrJ1wiPicsci5sb2NhbGl6ZShlWzFdKSxcIjwvb3B0aW9uPlwiXS5qb2luKFwiXCIpfSkpLmNvbmNhdChcIjwvc2VsZWN0PlwiKS5qb2luKFwiXCIpfSx0LmNyZWF0ZUVsRmdDb2xvcl89ZnVuY3Rpb24oKXt2YXIgZT1cImNhcHRpb25zLXRleHQtbGVnZW5kLVwiK3RoaXMuaWRfO3JldHVyblsnPGZpZWxkc2V0IGNsYXNzPVwidmpzLWZnLWNvbG9yIHZqcy10cmFjay1zZXR0aW5nXCI+JywnPGxlZ2VuZCBpZD1cIicrZSsnXCI+Jyx0aGlzLmxvY2FsaXplKFwiVGV4dFwiKSxcIjwvbGVnZW5kPlwiLHRoaXMuY3JlYXRlRWxTZWxlY3RfKFwiY29sb3JcIixlKSwnPHNwYW4gY2xhc3M9XCJ2anMtdGV4dC1vcGFjaXR5IHZqcy1vcGFjaXR5XCI+Jyx0aGlzLmNyZWF0ZUVsU2VsZWN0XyhcInRleHRPcGFjaXR5XCIsZSksXCI8L3NwYW4+XCIsXCI8L2ZpZWxkc2V0PlwiXS5qb2luKFwiXCIpfSx0LmNyZWF0ZUVsQmdDb2xvcl89ZnVuY3Rpb24oKXt2YXIgZT1cImNhcHRpb25zLWJhY2tncm91bmQtXCIrdGhpcy5pZF87cmV0dXJuWyc8ZmllbGRzZXQgY2xhc3M9XCJ2anMtYmctY29sb3IgdmpzLXRyYWNrLXNldHRpbmdcIj4nLCc8bGVnZW5kIGlkPVwiJytlKydcIj4nLHRoaXMubG9jYWxpemUoXCJCYWNrZ3JvdW5kXCIpLFwiPC9sZWdlbmQ+XCIsdGhpcy5jcmVhdGVFbFNlbGVjdF8oXCJiYWNrZ3JvdW5kQ29sb3JcIixlKSwnPHNwYW4gY2xhc3M9XCJ2anMtYmctb3BhY2l0eSB2anMtb3BhY2l0eVwiPicsdGhpcy5jcmVhdGVFbFNlbGVjdF8oXCJiYWNrZ3JvdW5kT3BhY2l0eVwiLGUpLFwiPC9zcGFuPlwiLFwiPC9maWVsZHNldD5cIl0uam9pbihcIlwiKX0sdC5jcmVhdGVFbFdpbkNvbG9yXz1mdW5jdGlvbigpe3ZhciBlPVwiY2FwdGlvbnMtd2luZG93LVwiK3RoaXMuaWRfO3JldHVyblsnPGZpZWxkc2V0IGNsYXNzPVwidmpzLXdpbmRvdy1jb2xvciB2anMtdHJhY2stc2V0dGluZ1wiPicsJzxsZWdlbmQgaWQ9XCInK2UrJ1wiPicsdGhpcy5sb2NhbGl6ZShcIldpbmRvd1wiKSxcIjwvbGVnZW5kPlwiLHRoaXMuY3JlYXRlRWxTZWxlY3RfKFwid2luZG93Q29sb3JcIixlKSwnPHNwYW4gY2xhc3M9XCJ2anMtd2luZG93LW9wYWNpdHkgdmpzLW9wYWNpdHlcIj4nLHRoaXMuY3JlYXRlRWxTZWxlY3RfKFwid2luZG93T3BhY2l0eVwiLGUpLFwiPC9zcGFuPlwiLFwiPC9maWVsZHNldD5cIl0uam9pbihcIlwiKX0sdC5jcmVhdGVFbENvbG9yc189ZnVuY3Rpb24oKXtyZXR1cm4gYihcImRpdlwiLHtjbGFzc05hbWU6XCJ2anMtdHJhY2stc2V0dGluZ3MtY29sb3JzXCIsaW5uZXJIVE1MOlt0aGlzLmNyZWF0ZUVsRmdDb2xvcl8oKSx0aGlzLmNyZWF0ZUVsQmdDb2xvcl8oKSx0aGlzLmNyZWF0ZUVsV2luQ29sb3JfKCldLmpvaW4oXCJcIil9KX0sdC5jcmVhdGVFbEZvbnRfPWZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJkaXZcIix7Y2xhc3NOYW1lOlwidmpzLXRyYWNrLXNldHRpbmdzLWZvbnRcIixpbm5lckhUTUw6Wyc8ZmllbGRzZXQgY2xhc3M9XCJ2anMtZm9udC1wZXJjZW50IHZqcy10cmFjay1zZXR0aW5nXCI+Jyx0aGlzLmNyZWF0ZUVsU2VsZWN0XyhcImZvbnRQZXJjZW50XCIsXCJcIixcImxlZ2VuZFwiKSxcIjwvZmllbGRzZXQ+XCIsJzxmaWVsZHNldCBjbGFzcz1cInZqcy1lZGdlLXN0eWxlIHZqcy10cmFjay1zZXR0aW5nXCI+Jyx0aGlzLmNyZWF0ZUVsU2VsZWN0XyhcImVkZ2VTdHlsZVwiLFwiXCIsXCJsZWdlbmRcIiksXCI8L2ZpZWxkc2V0PlwiLCc8ZmllbGRzZXQgY2xhc3M9XCJ2anMtZm9udC1mYW1pbHkgdmpzLXRyYWNrLXNldHRpbmdcIj4nLHRoaXMuY3JlYXRlRWxTZWxlY3RfKFwiZm9udEZhbWlseVwiLFwiXCIsXCJsZWdlbmRcIiksXCI8L2ZpZWxkc2V0PlwiXS5qb2luKFwiXCIpfSl9LHQuY3JlYXRlRWxDb250cm9sc189ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvY2FsaXplKFwicmVzdG9yZSBhbGwgc2V0dGluZ3MgdG8gdGhlIGRlZmF1bHQgdmFsdWVzXCIpO3JldHVybiBiKFwiZGl2XCIse2NsYXNzTmFtZTpcInZqcy10cmFjay1zZXR0aW5ncy1jb250cm9sc1wiLGlubmVySFRNTDpbJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmpzLWRlZmF1bHQtYnV0dG9uXCIgdGl0bGU9XCInK2UrJ1wiPicsdGhpcy5sb2NhbGl6ZShcIlJlc2V0XCIpLCc8c3BhbiBjbGFzcz1cInZqcy1jb250cm9sLXRleHRcIj4gJytlK1wiPC9zcGFuPlwiLFwiPC9idXR0b24+XCIsJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmpzLWRvbmUtYnV0dG9uXCI+Jyt0aGlzLmxvY2FsaXplKFwiRG9uZVwiKStcIjwvYnV0dG9uPlwiXS5qb2luKFwiXCIpfSl9LHQuY29udGVudD1mdW5jdGlvbigpe3JldHVyblt0aGlzLmNyZWF0ZUVsQ29sb3JzXygpLHRoaXMuY3JlYXRlRWxGb250XygpLHRoaXMuY3JlYXRlRWxDb250cm9sc18oKV19LHQubGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGl6ZShcIkNhcHRpb24gU2V0dGluZ3MgRGlhbG9nXCIpfSx0LmRlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxpemUoXCJCZWdpbm5pbmcgb2YgZGlhbG9nIHdpbmRvdy4gRXNjYXBlIHdpbGwgY2FuY2VsIGFuZCBjbG9zZSB0aGUgd2luZG93LlwiKX0sdC5idWlsZENTU0NsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKStcIiB2anMtdGV4dC10cmFjay1zZXR0aW5nc1wifSx0LmdldFZhbHVlcz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4scixlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbyhuKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLG5bdF0sdCl9LGUpfShsbyxmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY28oZS5vcHRpb25zW2Uub3B0aW9ucy5zZWxlY3RlZEluZGV4XS52YWx1ZSx0KX0oaS4kKHQuc2VsZWN0b3IpLHQucGFyc2VyKTtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09ciksZX0se30pfSx0LnNldFZhbHVlcz1mdW5jdGlvbihuKXt2YXIgcj10aGlzO2kobG8sZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjxlLm9wdGlvbnMubGVuZ3RoO3IrKylpZihjbyhlLm9wdGlvbnNbcl0udmFsdWUsbik9PT10KXtlLnNlbGVjdGVkSW5kZXg9cjticmVha319KHIuJChlLnNlbGVjdG9yKSxuW3RdLGUucGFyc2VyKX0pfSx0LnNldERlZmF1bHRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpcztpKGxvLGZ1bmN0aW9uKGUpe3ZhciB0PWUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpP2UuZGVmYXVsdDowO24uJChlLnNlbGVjdG9yKS5zZWxlY3RlZEluZGV4PXR9KX0sdC5yZXN0b3JlU2V0dGluZ3M9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1KU09OLnBhcnNlKGgubG9jYWxTdG9yYWdlLmdldEl0ZW0oWWkpKX1jYXRjaChlKXtmLndhcm4oZSl9ZSYmdGhpcy5zZXRWYWx1ZXMoZSl9LHQuc2F2ZVNldHRpbmdzPWZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zXy5wZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3Mpe3ZhciBlPXRoaXMuZ2V0VmFsdWVzKCk7dHJ5e09iamVjdC5rZXlzKGUpLmxlbmd0aD9oLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFlpLEpTT04uc3RyaW5naWZ5KGUpKTpoLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFlpKX1jYXRjaChlKXtmLndhcm4oZSl9fX0sdC51cGRhdGVEaXNwbGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wbGF5ZXJfLmdldENoaWxkKFwidGV4dFRyYWNrRGlzcGxheVwiKTtlJiZlLnVwZGF0ZURpc3BsYXkoKX0sdC5jb25kaXRpb25hbEJsdXJfPWZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c2x5QWN0aXZlRWxfPW51bGw7dmFyIGU9dGhpcy5wbGF5ZXJfLmNvbnRyb2xCYXIsdD1lJiZlLnN1YnNDYXBzQnV0dG9uLG49ZSYmZS5jYXB0aW9uc0J1dHRvbjt0P3QuZm9jdXMoKTpuJiZuLmZvY3VzKCl9LGV9KGp0KTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlRleHRUcmFja1NldHRpbmdzXCIsdW8pO3ZhciBobz1mdW5jdGlvbihvKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG4scj10LlJlc2l6ZU9ic2VydmVyfHxoLlJlc2l6ZU9ic2VydmVyO251bGw9PT10LlJlc2l6ZU9ic2VydmVyJiYocj0hMSk7dmFyIGk9SWUoe2NyZWF0ZUVsOiFyLHJlcG9ydFRvdWNoQWN0aXZpdHk6ITF9LHQpO3JldHVybihuPW8uY2FsbCh0aGlzLGUsaSl8fHRoaXMpLlJlc2l6ZU9ic2VydmVyPXQuUmVzaXplT2JzZXJ2ZXJ8fGguUmVzaXplT2JzZXJ2ZXIsbi5sb2FkTGlzdGVuZXJfPW51bGwsbi5yZXNpemVPYnNlcnZlcl89bnVsbCxuLmRlYm91bmNlZEhhbmRsZXJfPWZ1bmN0aW9uKHIsaSxvLHMpe3ZhciBhO3ZvaWQgMD09PXMmJihzPWgpO2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLG49ZnVuY3Rpb24oKXtuPWE9bnVsbCxvfHxyLmFwcGx5KGUsdCl9OyFhJiZvJiZyLmFwcGx5KGUsdCkscy5jbGVhclRpbWVvdXQoYSksYT1zLnNldFRpbWVvdXQobixpKX1yZXR1cm4gZS5jYW5jZWw9ZnVuY3Rpb24oKXtzLmNsZWFyVGltZW91dChhKSxhPW51bGx9LGV9KGZ1bmN0aW9uKCl7bi5yZXNpemVIYW5kbGVyKCl9LDEwMCwhMSxMZShuKSkscj8obi5yZXNpemVPYnNlcnZlcl89bmV3IG4uUmVzaXplT2JzZXJ2ZXIobi5kZWJvdW5jZWRIYW5kbGVyXyksbi5yZXNpemVPYnNlcnZlcl8ub2JzZXJ2ZShlLmVsKCkpKToobi5sb2FkTGlzdGVuZXJfPWZ1bmN0aW9uKCl7aWYobi5lbF8mJm4uZWxfLmNvbnRlbnRXaW5kb3cpe3ZhciBlPW4uZGVib3VuY2VkSGFuZGxlcl8sdD1uLnVubG9hZExpc3RlbmVyXz1mdW5jdGlvbigpe2NlKHRoaXMsXCJyZXNpemVcIixlKSxjZSh0aGlzLFwidW5sb2FkXCIsdCksdD1udWxsfTtsZShuLmVsXy5jb250ZW50V2luZG93LFwidW5sb2FkXCIsdCksbGUobi5lbF8uY29udGVudFdpbmRvdyxcInJlc2l6ZVwiLGUpfX0sbi5vbmUoXCJsb2FkXCIsbi5sb2FkTGlzdGVuZXJfKSksbn1EZShlLG8pO3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNyZWF0ZUVsPWZ1bmN0aW9uKCl7cmV0dXJuIG8ucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImlmcmFtZVwiLHtjbGFzc05hbWU6XCJ2anMtcmVzaXplLW1hbmFnZXJcIix0YWJJbmRleDotMX0se1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pfSx0LnJlc2l6ZUhhbmRsZXI9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcl8mJnRoaXMucGxheWVyXy50cmlnZ2VyJiZ0aGlzLnBsYXllcl8udHJpZ2dlcihcInBsYXllcnJlc2l6ZVwiKX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZWRIYW5kbGVyXyYmdGhpcy5kZWJvdW5jZWRIYW5kbGVyXy5jYW5jZWwoKSx0aGlzLnJlc2l6ZU9ic2VydmVyXyYmKHRoaXMucGxheWVyXy5lbCgpJiZ0aGlzLnJlc2l6ZU9ic2VydmVyXy51bm9ic2VydmUodGhpcy5wbGF5ZXJfLmVsKCkpLHRoaXMucmVzaXplT2JzZXJ2ZXJfLmRpc2Nvbm5lY3QoKSksdGhpcy5sb2FkTGlzdGVuZXJfJiZ0aGlzLm9mZihcImxvYWRcIix0aGlzLmxvYWRMaXN0ZW5lcl8pLHRoaXMuZWxfJiZ0aGlzLmVsXy5jb250ZW50V2luZG93JiZ0aGlzLnVubG9hZExpc3RlbmVyXyYmdGhpcy51bmxvYWRMaXN0ZW5lcl8uY2FsbCh0aGlzLmVsXy5jb250ZW50V2luZG93KSx0aGlzLlJlc2l6ZU9ic2VydmVyPW51bGwsdGhpcy5yZXNpemVPYnNlcnZlcj1udWxsLHRoaXMuZGVib3VuY2VkSGFuZGxlcl89bnVsbCx0aGlzLmxvYWRMaXN0ZW5lcl89bnVsbCxvLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LGV9KE9lKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIlJlc2l6ZU1hbmFnZXJcIixobyk7dmFyIHBvPWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbixyPUllKHtjcmVhdGVFbDohMX0sdCk7cmV0dXJuKG49aS5jYWxsKHRoaXMsZSxyKXx8dGhpcykucmVzZXRfKCksbi5vbihuLnBsYXllcl8sXCJkdXJhdGlvbmNoYW5nZVwiLG4uaGFuZGxlRHVyYXRpb25jaGFuZ2UpLG50JiZcImhpZGRlblwiaW4gZCYmXCJ2aXNpYmlsaXR5U3RhdGVcImluIGQmJm4ub24oZCxcInZpc2liaWxpdHljaGFuZ2VcIixuLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UpLG59RGUoZSxpKTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCk9PT0xLzAmJihkLmhpZGRlbj90aGlzLnN0b3BUcmFja2luZygpOnRoaXMuc3RhcnRUcmFja2luZygpKX0sdC5pc0JlaGluZF89ZnVuY3Rpb24oKXtpZighdGhpcy50aW1ldXBkYXRlU2Vlbl8pcmV0dXJuITE7dmFyIGU9dGhpcy5saXZlQ3VycmVudFRpbWUoKSx0PXRoaXMucGxheWVyXy5jdXJyZW50VGltZSgpLG49Mip0aGlzLnNlZWthYmxlSW5jcmVtZW50XysuMDc7cmV0dXJuIGUhPT0xLzAmJnQ8PWUtbn0sdC50cmFja0xpdmVfPWZ1bmN0aW9uKCl7dGhpcy5wYXN0U2Vla0VuZF89dGhpcy5wYXN0U2Vla0VuZF87dmFyIGU9dGhpcy5wbGF5ZXJfLnNlZWthYmxlKCk7aWYoZSYmZS5sZW5ndGgpe3ZhciB0PXRoaXMuc2Vla2FibGVFbmQoKTt0IT09dGhpcy5sYXN0U2Vla0VuZF8mJih0aGlzLmxhc3RTZWVrRW5kXyYmKHRoaXMuc2Vla2FibGVJbmNyZW1lbnRMaXN0Xz10aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8uc2xpY2UoLTExKSx0aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8ucHVzaChNYXRoLmFicyh0LXRoaXMubGFzdFNlZWtFbmRfKSksMzx0aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8ubGVuZ3RoJiYodGhpcy5zZWVrYWJsZUluY3JlbWVudF89ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcihlLmxlbmd0aC8yKSxuPVtdLmNvbmNhdChlKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pO3JldHVybiBlLmxlbmd0aCUyIT0wP25bdF06KG5bdC0xXStuW3RdKS8yfSh0aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8pKSksdGhpcy5wYXN0U2Vla0VuZF89MCx0aGlzLmxhc3RTZWVrRW5kXz10LHRoaXMudHJpZ2dlcihcInNlZWthYmxlZW5kY2hhbmdlXCIpKSx0aGlzLnBhc3RTZWVrRW5kXz10aGlzLnBhc3RTZWVrRW5kKCkrLjAzLHRoaXMuaXNCZWhpbmRfKCkhPT10aGlzLmJlaGluZExpdmVFZGdlKCkmJih0aGlzLmJlaGluZExpdmVFZGdlXz10aGlzLmlzQmVoaW5kXygpLHRoaXMudHJpZ2dlcihcImxpdmVlZGdlY2hhbmdlXCIpKX19LHQuaGFuZGxlRHVyYXRpb25jaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcl8uZHVyYXRpb24oKT09PTEvMD90aGlzLnN0YXJ0VHJhY2tpbmcoKTp0aGlzLnN0b3BUcmFja2luZygpfSx0LnN0YXJ0VHJhY2tpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuaXNUcmFja2luZygpfHwodGhpcy50aW1ldXBkYXRlU2Vlbl98fCh0aGlzLnRpbWV1cGRhdGVTZWVuXz10aGlzLnBsYXllcl8uaGFzU3RhcnRlZCgpKSx0aGlzLnRyYWNraW5nSW50ZXJ2YWxfPXRoaXMuc2V0SW50ZXJ2YWwodGhpcy50cmFja0xpdmVfLDMwKSx0aGlzLnRyYWNrTGl2ZV8oKSx0aGlzLm9uKHRoaXMucGxheWVyXyxcInBsYXlcIix0aGlzLnRyYWNrTGl2ZV8pLHRoaXMub24odGhpcy5wbGF5ZXJfLFwicGF1c2VcIix0aGlzLnRyYWNrTGl2ZV8pLHRoaXMudGltZXVwZGF0ZVNlZW5ffHwodGhpcy5vbmUodGhpcy5wbGF5ZXJfLFwicGxheVwiLHRoaXMuaGFuZGxlUGxheSksdGhpcy5oYW5kbGVUaW1ldXBkYXRlPWZ1bmN0aW9uKCl7ZS50aW1ldXBkYXRlU2Vlbl89ITAsZS5oYW5kbGVUaW1ldXBkYXRlPW51bGx9LHRoaXMub25lKHRoaXMucGxheWVyXyxcInRpbWV1cGRhdGVcIix0aGlzLmhhbmRsZVRpbWV1cGRhdGUpKSl9LHQuaGFuZGxlUGxheT1mdW5jdGlvbigpe3RoaXMub25lKHRoaXMucGxheWVyXyxcInRpbWV1cGRhdGVcIix0aGlzLnNlZWtUb0xpdmVFZGdlKX0sdC5yZXNldF89ZnVuY3Rpb24oKXt0aGlzLnBhc3RTZWVrRW5kXz0wLHRoaXMubGFzdFNlZWtFbmRfPW51bGwsdGhpcy5iZWhpbmRMaXZlRWRnZV89bnVsbCx0aGlzLnRpbWV1cGRhdGVTZWVuXz0hMSx0aGlzLmNsZWFySW50ZXJ2YWwodGhpcy50cmFja2luZ0ludGVydmFsXyksdGhpcy50cmFja2luZ0ludGVydmFsXz1udWxsLHRoaXMuc2Vla2FibGVJbmNyZW1lbnRfPTEyLHRoaXMuc2Vla2FibGVJbmNyZW1lbnRMaXN0Xz1bXSx0aGlzLm9mZih0aGlzLnBsYXllcl8sXCJwbGF5XCIsdGhpcy50cmFja0xpdmVfKSx0aGlzLm9mZih0aGlzLnBsYXllcl8sXCJwYXVzZVwiLHRoaXMudHJhY2tMaXZlXyksdGhpcy5vZmYodGhpcy5wbGF5ZXJfLFwicGxheVwiLHRoaXMuaGFuZGxlUGxheSksdGhpcy5vZmYodGhpcy5wbGF5ZXJfLFwidGltZXVwZGF0ZVwiLHRoaXMuc2Vla1RvTGl2ZUVkZ2UpLHRoaXMuaGFuZGxlVGltZXVwZGF0ZSYmKHRoaXMub2ZmKHRoaXMucGxheWVyXyxcInRpbWV1cGRhdGVcIix0aGlzLmhhbmRsZVRpbWV1cGRhdGUpLHRoaXMuaGFuZGxlVGltZXVwZGF0ZT1udWxsKX0sdC5zdG9wVHJhY2tpbmc9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhY2tpbmcoKSYmdGhpcy5yZXNldF8oKX0sdC5zZWVrYWJsZUVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBsYXllcl8uc2Vla2FibGUoKSx0PVtdLG49ZT9lLmxlbmd0aDowO24tLTspdC5wdXNoKGUuZW5kKG4pKTtyZXR1cm4gdC5sZW5ndGg/dC5zb3J0KClbdC5sZW5ndGgtMV06MS8wfSx0LnNlZWthYmxlU3RhcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wbGF5ZXJfLnNlZWthYmxlKCksdD1bXSxuPWU/ZS5sZW5ndGg6MDtuLS07KXQucHVzaChlLnN0YXJ0KG4pKTtyZXR1cm4gdC5sZW5ndGg/dC5zb3J0KClbMF06MH0sdC5saXZlV2luZG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5saXZlQ3VycmVudFRpbWUoKTtyZXR1cm4gZT09PTEvMD8xLzA6ZS10aGlzLnNlZWthYmxlU3RhcnQoKX0sdC5pc0xpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RyYWNraW5nKCl9LHQuYXRMaXZlRWRnZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmJlaGluZExpdmVFZGdlKCl9LHQubGl2ZUN1cnJlbnRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFzdFNlZWtFbmQoKSt0aGlzLnNlZWthYmxlRW5kKCl9LHQucGFzdFNlZWtFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXN0U2Vla0VuZF99LHQuYmVoaW5kTGl2ZUVkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZWhpbmRMaXZlRWRnZV99LHQuaXNUcmFja2luZz1mdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnRyYWNraW5nSW50ZXJ2YWxffSx0LnNlZWtUb0xpdmVFZGdlPWZ1bmN0aW9uKCl7dGhpcy5hdExpdmVFZGdlKCl8fCh0aGlzLnBsYXllcl8uY3VycmVudFRpbWUodGhpcy5saXZlQ3VycmVudFRpbWUoKSksdGhpcy5wbGF5ZXJfLnBhdXNlZCgpJiZ0aGlzLnBsYXllcl8ucGxheSgpKX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zdG9wVHJhY2tpbmcoKSxpLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LGV9KE9lKTtPZS5yZWdpc3RlckNvbXBvbmVudChcIkxpdmVUcmFja2VyXCIscG8pO2Z1bmN0aW9uIGZvKGUpe3ZhciB0PWUuZWwoKTtpZih0Lmhhc0F0dHJpYnV0ZShcInNyY1wiKSlyZXR1cm4gZS50cmlnZ2VyU291cmNlc2V0KHQuc3JjKSwhMDt2YXIgbj1lLiQkKFwic291cmNlXCIpLHI9W10saT1cIlwiO2lmKCFuLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXS5zcmM7cyYmLTE9PT1yLmluZGV4T2YocykmJnIucHVzaChzKX1yZXR1cm4hIXIubGVuZ3RoJiYoMT09PXIubGVuZ3RoJiYoaT1yWzBdKSxlLnRyaWdnZXJTb3VyY2VzZXQoaSksITApfWZ1bmN0aW9uIHZvKGUsdCl7Zm9yKHZhciBuPXt9LHI9MDtyPGUubGVuZ3RoJiYhKChuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZVtyXSx0KSkmJm4uc2V0JiZuLmdldCk7cisrKTtyZXR1cm4gbi5lbnVtZXJhYmxlPSEwLG4uY29uZmlndXJhYmxlPSEwLG59ZnVuY3Rpb24geW8obyl7dmFyIHM9by5lbCgpO2lmKCFzLnJlc2V0U291cmNlV2F0Y2hfKXtmdW5jdGlvbiB0KGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3ZhciByPWkuYXBwbHkocyx0KTtyZXR1cm4gZm8obykscn19dmFyIG49e30sZT1mdW5jdGlvbihlKXtyZXR1cm4gdm8oW2UuZWwoKSxoLkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLGguRWxlbWVudC5wcm90b3R5cGUsbW9dLFwiaW5uZXJIVE1MXCIpfShvKTtbXCJhcHBlbmRcIixcImFwcGVuZENoaWxkXCIsXCJpbnNlcnRBZGphY2VudEhUTUxcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtzW2VdJiYobltlXT1zW2VdLHNbZV09dChuW2VdKSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocyxcImlubmVySFRNTFwiLEllKGUse3NldDp0KGUuc2V0KX0pKSxzLnJlc2V0U291cmNlV2F0Y2hfPWZ1bmN0aW9uKCl7cy5yZXNldFNvdXJjZVdhdGNoXz1udWxsLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7c1tlXT1uW2VdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsXCJpbm5lckhUTUxcIixlKX0sby5vbmUoXCJzb3VyY2VzZXRcIixzLnJlc2V0U291cmNlV2F0Y2hfKX19ZnVuY3Rpb24gZ28ocil7aWYoci5mZWF0dXJlc1NvdXJjZXNldCl7dmFyIGk9ci5lbCgpO2lmKCFpLnJlc2V0U291cmNlc2V0Xyl7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIHZvKFtlLmVsKCksaC5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxfb10sXCJzcmNcIil9KHIpLG89aS5zZXRBdHRyaWJ1dGUsdD1pLmxvYWQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJzcmNcIixJZShuLHtzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZXQuY2FsbChpLGUpO3JldHVybiByLnRyaWdnZXJTb3VyY2VzZXQoaS5zcmMpLHR9fSkpLGkuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49by5jYWxsKGksZSx0KTtyZXR1cm4vc3JjL2kudGVzdChlKSYmci50cmlnZ2VyU291cmNlc2V0KGkuc3JjKSxufSxpLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10LmNhbGwoaSk7cmV0dXJuIGZvKHIpfHwoci50cmlnZ2VyU291cmNlc2V0KFwiXCIpLHlvKHIpKSxlfSxpLmN1cnJlbnRTcmM/ci50cmlnZ2VyU291cmNlc2V0KGkuY3VycmVudFNyYyk6Zm8ocil8fHlvKHIpLGkucmVzZXRTb3VyY2VzZXRfPWZ1bmN0aW9uKCl7aS5yZXNldFNvdXJjZXNldF89bnVsbCxpLmxvYWQ9dCxpLnNldEF0dHJpYnV0ZT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwic3JjXCIsbiksaS5yZXNldFNvdXJjZVdhdGNoXyYmaS5yZXNldFNvdXJjZVdhdGNoXygpfX19fXZhciBtbz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJpbm5lckhUTUxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmVOb2RlKCEwKS5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1kLmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTt0LmlubmVySFRNTD1lO2Zvcih2YXIgbj1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTt0LmNoaWxkTm9kZXMubGVuZ3RoOyluLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1swXSk7cmV0dXJuIHRoaXMuaW5uZXJUZXh0PVwiXCIsaC5FbGVtZW50LnByb3RvdHlwZS5hcHBlbmRDaGlsZC5jYWxsKHRoaXMsbiksdGhpcy5pbm5lckhUTUx9fSksX289T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwic3JjXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcInNyY1wiKT9OdChoLkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZS5jYWxsKHRoaXMsXCJzcmNcIikpOlwiXCJ9LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gaC5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLFwic3JjXCIsZSksZX19KSxibz1mdW5jdGlvbih1KXtmdW5jdGlvbiBhKGUsdCl7dmFyIG47bj11LmNhbGwodGhpcyxlLHQpfHx0aGlzO3ZhciByPWUuc291cmNlLGk9ITE7aWYociYmKG4uZWxfLmN1cnJlbnRTcmMhPT1yLnNyY3x8ZS50YWcmJjM9PT1lLnRhZy5pbml0TmV0d29ya1N0YXRlXyk/bi5zZXRTb3VyY2Uocik6bi5oYW5kbGVMYXRlSW5pdF8obi5lbF8pLGUuZW5hYmxlU291cmNlc2V0JiZuLnNldHVwU291cmNlc2V0SGFuZGxpbmdfKCksbi5lbF8uaGFzQ2hpbGROb2RlcygpKXtmb3IodmFyIG89bi5lbF8uY2hpbGROb2RlcyxzPW8ubGVuZ3RoLGE9W107cy0tOyl7dmFyIGw9b1tzXTtcInRyYWNrXCI9PT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihuLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcz8obi5yZW1vdGVUZXh0VHJhY2tFbHMoKS5hZGRUcmFja0VsZW1lbnRfKGwpLG4ucmVtb3RlVGV4dFRyYWNrcygpLmFkZFRyYWNrKGwudHJhY2spLG4udGV4dFRyYWNrcygpLmFkZFRyYWNrKGwudHJhY2spLGl8fG4uZWxfLmhhc0F0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpfHwhRnQobC5zcmMpfHwoaT0hMCkpOmEucHVzaChsKSl9Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5lbF8ucmVtb3ZlQ2hpbGQoYVtjXSl9cmV0dXJuIG4ucHJveHlOYXRpdmVUcmFja3NfKCksbi5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3MmJmkmJmYud2FybihcIlRleHQgVHJhY2tzIGFyZSBiZWluZyBsb2FkZWQgZnJvbSBhbm90aGVyIG9yaWdpbiBidXQgdGhlIGNyb3Nzb3JpZ2luIGF0dHJpYnV0ZSBpc24ndCB1c2VkLlxcblRoaXMgbWF5IHByZXZlbnQgdGV4dCB0cmFja3MgZnJvbSBsb2FkaW5nLlwiKSxuLnJlc3RvcmVNZXRhZGF0YVRyYWNrc0luSU9TTmF0aXZlUGxheWVyXygpLChzdHx8S2V8fFFlKSYmITA9PT1lLm5hdGl2ZUNvbnRyb2xzRm9yVG91Y2gmJm4uc2V0Q29udHJvbHMoITApLG4ucHJveHlXZWJraXRGdWxsc2NyZWVuXygpLG4udHJpZ2dlclJlYWR5KCksbn1EZShhLHUpO3ZhciBlPWEucHJvdG90eXBlO3JldHVybiBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmVsXyYmdGhpcy5lbF8ucmVzZXRTb3VyY2VzZXRfJiZ0aGlzLmVsXy5yZXNldFNvdXJjZXNldF8oKSxhLmRpc3Bvc2VNZWRpYUVsZW1lbnQodGhpcy5lbF8pLHRoaXMub3B0aW9uc189bnVsbCx1LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LGUuc2V0dXBTb3VyY2VzZXRIYW5kbGluZ189ZnVuY3Rpb24oKXtnbyh0aGlzKX0sZS5yZXN0b3JlTWV0YWRhdGFUcmFja3NJbklPU05hdGl2ZVBsYXllcl89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bj1bXTtmb3IodmFyIGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIHQ9cltlXTtcIm1ldGFkYXRhXCI9PT10LmtpbmQmJm4ucHVzaCh7dHJhY2s6dCxzdG9yZWRNb2RlOnQubW9kZX0pfX12YXIgbixyPXRoaXMudGV4dFRyYWNrcygpO2UoKSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSx0aGlzLm9uKFwiZGlzcG9zZVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGUpfSk7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgdD1uW2VdO1wiZGlzYWJsZWRcIj09PXQudHJhY2subW9kZSYmdC50cmFjay5tb2RlIT09dC5zdG9yZWRNb2RlJiYodC50cmFjay5tb2RlPXQuc3RvcmVkTW9kZSl9ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsaSl9dGhpcy5vbihcIndlYmtpdGJlZ2luZnVsbHNjcmVlblwiLGZ1bmN0aW9uKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsaSksci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsaSl9KSx0aGlzLm9uKFwid2Via2l0ZW5kZnVsbHNjcmVlblwiLGZ1bmN0aW9uKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsaSl9KX0sZS5vdmVycmlkZU5hdGl2ZV89ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHQ9PT10aGlzW1wiZmVhdHVyZXNOYXRpdmVcIitlK1wiVHJhY2tzXCJdKXt2YXIgcj1lLnRvTG93ZXJDYXNlKCk7dGhpc1tyK1wiVHJhY2tzTGlzdGVuZXJzX1wiXSYmT2JqZWN0LmtleXModGhpc1tyK1wiVHJhY2tzTGlzdGVuZXJzX1wiXSkuZm9yRWFjaChmdW5jdGlvbihlKXtuLmVsKClbcitcIlRyYWNrc1wiXS5yZW1vdmVFdmVudExpc3RlbmVyKGUsbltyK1wiVHJhY2tzTGlzdGVuZXJzX1wiXVtlXSl9KSx0aGlzW1wiZmVhdHVyZXNOYXRpdmVcIitlK1wiVHJhY2tzXCJdPSF0LHRoaXNbcitcIlRyYWNrc0xpc3RlbmVyc19cIl09bnVsbCx0aGlzLnByb3h5TmF0aXZlVHJhY2tzRm9yVHlwZV8ocil9fSxlLm92ZXJyaWRlTmF0aXZlQXVkaW9UcmFja3M9ZnVuY3Rpb24oZSl7dGhpcy5vdmVycmlkZU5hdGl2ZV8oXCJBdWRpb1wiLGUpfSxlLm92ZXJyaWRlTmF0aXZlVmlkZW9UcmFja3M9ZnVuY3Rpb24oZSl7dGhpcy5vdmVycmlkZU5hdGl2ZV8oXCJWaWRlb1wiLGUpfSxlLnByb3h5TmF0aXZlVHJhY2tzRm9yVHlwZV89ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyx0PVNyW2VdLGk9dGhpcy5lbCgpW3QuZ2V0dGVyTmFtZV0sbz10aGlzW3QuZ2V0dGVyTmFtZV0oKTtpZih0aGlzW1wiZmVhdHVyZXNOYXRpdmVcIit0LmNhcGl0YWxOYW1lK1wiVHJhY2tzXCJdJiZpJiZpLmFkZEV2ZW50TGlzdGVuZXIpe2Z1bmN0aW9uIG4oKXtmb3IodmFyIGU9W10sdD0wO3Q8by5sZW5ndGg7dCsrKXtmb3IodmFyIG49ITEscj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl09PT1vW3RdKXtuPSEwO2JyZWFrfW58fGUucHVzaChvW3RdKX1mb3IoO2UubGVuZ3RoOylvLnJlbW92ZVRyYWNrKGUuc2hpZnQoKSl9dmFyIHM9e2NoYW5nZTpmdW5jdGlvbihlKXtvLnRyaWdnZXIoe3R5cGU6XCJjaGFuZ2VcIix0YXJnZXQ6byxjdXJyZW50VGFyZ2V0Om8sc3JjRWxlbWVudDpvfSl9LGFkZHRyYWNrOmZ1bmN0aW9uKGUpe28uYWRkVHJhY2soZS50cmFjayl9LHJlbW92ZXRyYWNrOmZ1bmN0aW9uKGUpe28ucmVtb3ZlVHJhY2soZS50cmFjayl9fTt0aGlzW3QuZ2V0dGVyTmFtZStcIkxpc3RlbmVyc19cIl09cyxPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXNbdF07aS5hZGRFdmVudExpc3RlbmVyKHQsbiksci5vbihcImRpc3Bvc2VcIixmdW5jdGlvbihlKXtyZXR1cm4gaS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9KX0pLHRoaXMub24oXCJsb2Fkc3RhcnRcIixuKSx0aGlzLm9uKFwiZGlzcG9zZVwiLGZ1bmN0aW9uKGUpe3JldHVybiByLm9mZihcImxvYWRzdGFydFwiLG4pfSl9fSxlLnByb3h5TmF0aXZlVHJhY2tzXz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7U3IubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0LnByb3h5TmF0aXZlVHJhY2tzRm9yVHlwZV8oZSl9KX0sZS5jcmVhdGVFbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uc18udGFnO2lmKCFlfHwhdGhpcy5vcHRpb25zXy5wbGF5ZXJFbEluZ2VzdCYmIXRoaXMubW92aW5nTWVkaWFFbGVtZW50SW5ET00pe2lmKGUpe3ZhciB0PWUuY2xvbmVOb2RlKCEwKTtlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlKSxhLmRpc3Bvc2VNZWRpYUVsZW1lbnQoZSksZT10fWVsc2V7ZT1kLmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTt2YXIgbj1JZSh7fSx0aGlzLm9wdGlvbnNfLnRhZyYmeCh0aGlzLm9wdGlvbnNfLnRhZykpO3N0JiYhMD09PXRoaXMub3B0aW9uc18ubmF0aXZlQ29udHJvbHNGb3JUb3VjaHx8ZGVsZXRlIG4uY29udHJvbHMsUChlLHkobix7aWQ6dGhpcy5vcHRpb25zXy50ZWNoSWQsY2xhc3M6XCJ2anMtdGVjaFwifSkpfWUucGxheWVySWQ9dGhpcy5vcHRpb25zXy5wbGF5ZXJJZH1cInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5vcHRpb25zXy5wcmVsb2FkJiZBKGUsXCJwcmVsb2FkXCIsdGhpcy5vcHRpb25zXy5wcmVsb2FkKTtmb3IodmFyIHI9W1wibG9vcFwiLFwibXV0ZWRcIixcInBsYXlzaW5saW5lXCIsXCJhdXRvcGxheVwiXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV0scz10aGlzLm9wdGlvbnNfW29dO1widW5kZWZpbmVkXCIhPXR5cGVvZiBzJiYocz9BKGUsbyxvKTpJKGUsbyksZVtvXT1zKX1yZXR1cm4gZX0sZS5oYW5kbGVMYXRlSW5pdF89ZnVuY3Rpb24oZSl7aWYoMCE9PWUubmV0d29ya1N0YXRlJiYzIT09ZS5uZXR3b3JrU3RhdGUpe2lmKDA9PT1lLnJlYWR5U3RhdGUpe2Z1bmN0aW9uIHQoKXtuPSEwfXZhciBuPSExO3RoaXMub24oXCJsb2Fkc3RhcnRcIix0KTtmdW5jdGlvbiByKCl7bnx8dGhpcy50cmlnZ2VyKFwibG9hZHN0YXJ0XCIpfXJldHVybiB0aGlzLm9uKFwibG9hZGVkbWV0YWRhdGFcIixyKSx2b2lkIHRoaXMucmVhZHkoZnVuY3Rpb24oKXt0aGlzLm9mZihcImxvYWRzdGFydFwiLHQpLHRoaXMub2ZmKFwibG9hZGVkbWV0YWRhdGFcIixyKSxufHx0aGlzLnRyaWdnZXIoXCJsb2Fkc3RhcnRcIil9KX12YXIgaT1bXCJsb2Fkc3RhcnRcIl07aS5wdXNoKFwibG9hZGVkbWV0YWRhdGFcIiksMjw9ZS5yZWFkeVN0YXRlJiZpLnB1c2goXCJsb2FkZWRkYXRhXCIpLDM8PWUucmVhZHlTdGF0ZSYmaS5wdXNoKFwiY2FucGxheVwiKSw0PD1lLnJlYWR5U3RhdGUmJmkucHVzaChcImNhbnBsYXl0aHJvdWdoXCIpLHRoaXMucmVhZHkoZnVuY3Rpb24oKXtpLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy50cmlnZ2VyKGUpfSx0aGlzKX0pfX0sZS5zZXRDdXJyZW50VGltZT1mdW5jdGlvbihlKXt0cnl7dGhpcy5lbF8uY3VycmVudFRpbWU9ZX1jYXRjaChlKXtmKGUsXCJWaWRlbyBpcyBub3QgcmVhZHkuIChWaWRlby5qcylcIil9fSxlLmR1cmF0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmVsXy5kdXJhdGlvbj09PTEvMCYmWGUmJmV0JiYwPT09dGhpcy5lbF8uY3VycmVudFRpbWUpe3JldHVybiB0aGlzLm9uKFwidGltZXVwZGF0ZVwiLGZ1bmN0aW9uIGUoKXswPHQuZWxfLmN1cnJlbnRUaW1lJiYodC5lbF8uZHVyYXRpb249PT0xLzAmJnQudHJpZ2dlcihcImR1cmF0aW9uY2hhbmdlXCIpLHQub2ZmKFwidGltZXVwZGF0ZVwiLGUpKX0pLE5hTn1yZXR1cm4gdGhpcy5lbF8uZHVyYXRpb258fE5hTn0sZS53aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsXy5vZmZzZXRXaWR0aH0sZS5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbF8ub2Zmc2V0SGVpZ2h0fSxlLnByb3h5V2Via2l0RnVsbHNjcmVlbl89ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKFwid2Via2l0RGlzcGxheWluZ0Z1bGxzY3JlZW5cImluIHRoaXMuZWxfKXtmdW5jdGlvbiB0KCl7dGhpcy50cmlnZ2VyKFwiZnVsbHNjcmVlbmNoYW5nZVwiLHtpc0Z1bGxzY3JlZW46ITF9KX1mdW5jdGlvbiBuKCl7XCJ3ZWJraXRQcmVzZW50YXRpb25Nb2RlXCJpbiB0aGlzLmVsXyYmXCJwaWN0dXJlLWluLXBpY3R1cmVcIiE9PXRoaXMuZWxfLndlYmtpdFByZXNlbnRhdGlvbk1vZGUmJih0aGlzLm9uZShcIndlYmtpdGVuZGZ1bGxzY3JlZW5cIix0KSx0aGlzLnRyaWdnZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIse2lzRnVsbHNjcmVlbjohMH0pKX10aGlzLm9uKFwid2Via2l0YmVnaW5mdWxsc2NyZWVuXCIsbiksdGhpcy5vbihcImRpc3Bvc2VcIixmdW5jdGlvbigpe2Uub2ZmKFwid2Via2l0YmVnaW5mdWxsc2NyZWVuXCIsbiksZS5vZmYoXCJ3ZWJraXRlbmRmdWxsc2NyZWVuXCIsdCl9KX19LGUuc3VwcG9ydHNGdWxsU2NyZWVuPWZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5lbF8ud2Via2l0RW50ZXJGdWxsU2NyZWVuKXt2YXIgZT1oLm5hdmlnYXRvciYmaC5uYXZpZ2F0b3IudXNlckFnZW50fHxcIlwiO2lmKC9BbmRyb2lkLy50ZXN0KGUpfHwhL0Nocm9tZXxNYWMgT1MgWCAxMC41Ly50ZXN0KGUpKXJldHVybiEwfXJldHVybiExfSxlLmVudGVyRnVsbFNjcmVlbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxfO2UucGF1c2VkJiZlLm5ldHdvcmtTdGF0ZTw9ZS5IQVZFX01FVEFEQVRBPyh0aGlzLmVsXy5wbGF5KCksdGhpcy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5wYXVzZSgpLGUud2Via2l0RW50ZXJGdWxsU2NyZWVuKCl9LDApKTplLndlYmtpdEVudGVyRnVsbFNjcmVlbigpfSxlLmV4aXRGdWxsU2NyZWVuPWZ1bmN0aW9uKCl7dGhpcy5lbF8ud2Via2l0RXhpdEZ1bGxTY3JlZW4oKX0sZS5yZXF1ZXN0UGljdHVyZUluUGljdHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsXy5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSgpfSxlLnNyYz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzLmVsXy5zcmM7dGhpcy5zZXRTcmMoZSl9LGUucmVzZXQ9ZnVuY3Rpb24oKXthLnJlc2V0TWVkaWFFbGVtZW50KHRoaXMuZWxfKX0sZS5jdXJyZW50U3JjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNvdXJjZV8/dGhpcy5jdXJyZW50U291cmNlXy5zcmM6dGhpcy5lbF8uY3VycmVudFNyY30sZS5zZXRDb250cm9scz1mdW5jdGlvbihlKXt0aGlzLmVsXy5jb250cm9scz0hIWV9LGUuYWRkVGV4dFRyYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3M/dGhpcy5lbF8uYWRkVGV4dFRyYWNrKGUsdCxuKTp1LnByb3RvdHlwZS5hZGRUZXh0VHJhY2suY2FsbCh0aGlzLGUsdCxuKX0sZS5jcmVhdGVSZW1vdGVUZXh0VHJhY2s9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzKXJldHVybiB1LnByb3RvdHlwZS5jcmVhdGVSZW1vdGVUZXh0VHJhY2suY2FsbCh0aGlzLGUpO3ZhciB0PWQuY3JlYXRlRWxlbWVudChcInRyYWNrXCIpO3JldHVybiBlLmtpbmQmJih0LmtpbmQ9ZS5raW5kKSxlLmxhYmVsJiYodC5sYWJlbD1lLmxhYmVsKSwoZS5sYW5ndWFnZXx8ZS5zcmNsYW5nKSYmKHQuc3JjbGFuZz1lLmxhbmd1YWdlfHxlLnNyY2xhbmcpLGUuZGVmYXVsdCYmKHQuZGVmYXVsdD1lLmRlZmF1bHQpLGUuaWQmJih0LmlkPWUuaWQpLGUuc3JjJiYodC5zcmM9ZS5zcmMpLHR9LGUuYWRkUmVtb3RlVGV4dFRyYWNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dS5wcm90b3R5cGUuYWRkUmVtb3RlVGV4dFRyYWNrLmNhbGwodGhpcyxlLHQpO3JldHVybiB0aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcyYmdGhpcy5lbCgpLmFwcGVuZENoaWxkKG4pLG59LGUucmVtb3ZlUmVtb3RlVGV4dFRyYWNrPWZ1bmN0aW9uKGUpe2lmKHUucHJvdG90eXBlLnJlbW92ZVJlbW90ZVRleHRUcmFjay5jYWxsKHRoaXMsZSksdGhpcy5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3MpZm9yKHZhciB0PXRoaXMuJCQoXCJ0cmFja1wiKSxuPXQubGVuZ3RoO24tLTspZSE9PXRbbl0mJmUhPT10W25dLnRyYWNrfHx0aGlzLmVsKCkucmVtb3ZlQ2hpbGQodFtuXSl9LGUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHk9ZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmVsKCkuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkpcmV0dXJuIHRoaXMuZWwoKS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpO3ZhciBlPXt9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmVsKCkud2Via2l0RHJvcHBlZEZyYW1lQ291bnQmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmVsKCkud2Via2l0RGVjb2RlZEZyYW1lQ291bnQmJihlLmRyb3BwZWRWaWRlb0ZyYW1lcz10aGlzLmVsKCkud2Via2l0RHJvcHBlZEZyYW1lQ291bnQsZS50b3RhbFZpZGVvRnJhbWVzPXRoaXMuZWwoKS53ZWJraXREZWNvZGVkRnJhbWVDb3VudCksaC5wZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaC5wZXJmb3JtYW5jZS5ub3c/ZS5jcmVhdGlvblRpbWU9aC5wZXJmb3JtYW5jZS5ub3coKTpoLnBlcmZvcm1hbmNlJiZoLnBlcmZvcm1hbmNlLnRpbWluZyYmXCJudW1iZXJcIj09dHlwZW9mIGgucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCYmKGUuY3JlYXRpb25UaW1lPWguRGF0ZS5ub3coKS1oLnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQpLGV9LGF9KGpyKTtpZih1KCkpe2JvLlRFU1RfVklEPWQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO3ZhciBUbz1kLmNyZWF0ZUVsZW1lbnQoXCJ0cmFja1wiKTtUby5raW5kPVwiY2FwdGlvbnNcIixUby5zcmNsYW5nPVwiZW5cIixUby5sYWJlbD1cIkVuZ2xpc2hcIixiby5URVNUX1ZJRC5hcHBlbmRDaGlsZChUbyl9Ym8uaXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt0cnl7Ym8uVEVTVF9WSUQudm9sdW1lPS41fWNhdGNoKGUpe3JldHVybiExfXJldHVybiEoIWJvLlRFU1RfVklEfHwhYm8uVEVTVF9WSUQuY2FuUGxheVR5cGUpfSxiby5jYW5QbGF5VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYm8uVEVTVF9WSUQuY2FuUGxheVR5cGUoZSl9LGJvLmNhblBsYXlTb3VyY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYm8uY2FuUGxheVR5cGUoZS50eXBlKX0sYm8uY2FuQ29udHJvbFZvbHVtZT1mdW5jdGlvbigpe3RyeXt2YXIgZT1iby5URVNUX1ZJRC52b2x1bWU7cmV0dXJuIGJvLlRFU1RfVklELnZvbHVtZT1lLzIrLjEsZSE9PWJvLlRFU1RfVklELnZvbHVtZX1jYXRjaChlKXtyZXR1cm4hMX19LGJvLmNhbk11dGVWb2x1bWU9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9Ym8uVEVTVF9WSUQubXV0ZWQ7cmV0dXJuIGJvLlRFU1RfVklELm11dGVkPSFlLGJvLlRFU1RfVklELm11dGVkP0EoYm8uVEVTVF9WSUQsXCJtdXRlZFwiLFwibXV0ZWRcIik6SShiby5URVNUX1ZJRCxcIm11dGVkXCIpLGUhPT1iby5URVNUX1ZJRC5tdXRlZH1jYXRjaChlKXtyZXR1cm4hMX19LGJvLmNhbkNvbnRyb2xQbGF5YmFja1JhdGU9ZnVuY3Rpb24oKXtpZihYZSYmZXQmJnR0PDU4KXJldHVybiExO3RyeXt2YXIgZT1iby5URVNUX1ZJRC5wbGF5YmFja1JhdGU7cmV0dXJuIGJvLlRFU1RfVklELnBsYXliYWNrUmF0ZT1lLzIrLjEsZSE9PWJvLlRFU1RfVklELnBsYXliYWNrUmF0ZX1jYXRjaChlKXtyZXR1cm4hMX19LGJvLmNhbk92ZXJyaWRlQXR0cmlidXRlcz1mdW5jdGlvbigpe3RyeXtmdW5jdGlvbiBlKCl7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKSxcInNyY1wiLHtnZXQ6ZSxzZXQ6ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLmNyZWF0ZUVsZW1lbnQoXCJhdWRpb1wiKSxcInNyY1wiLHtnZXQ6ZSxzZXQ6ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKSxcImlubmVySFRNTFwiLHtnZXQ6ZSxzZXQ6ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLmNyZWF0ZUVsZW1lbnQoXCJhdWRpb1wiKSxcImlubmVySFRNTFwiLHtnZXQ6ZSxzZXQ6ZX0pfWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxiby5zdXBwb3J0c05hdGl2ZVRleHRUcmFja3M9ZnVuY3Rpb24oKXtyZXR1cm4gaXR8fHFlJiZldH0sYm8uc3VwcG9ydHNOYXRpdmVWaWRlb1RyYWNrcz1mdW5jdGlvbigpe3JldHVybiEoIWJvLlRFU1RfVklEfHwhYm8uVEVTVF9WSUQudmlkZW9UcmFja3MpfSxiby5zdXBwb3J0c05hdGl2ZUF1ZGlvVHJhY2tzPWZ1bmN0aW9uKCl7cmV0dXJuISghYm8uVEVTVF9WSUR8fCFiby5URVNUX1ZJRC5hdWRpb1RyYWNrcyl9LGJvLkV2ZW50cz1bXCJsb2Fkc3RhcnRcIixcInN1c3BlbmRcIixcImFib3J0XCIsXCJlcnJvclwiLFwiZW1wdGllZFwiLFwic3RhbGxlZFwiLFwibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZGRhdGFcIixcImNhbnBsYXlcIixcImNhbnBsYXl0aHJvdWdoXCIsXCJwbGF5aW5nXCIsXCJ3YWl0aW5nXCIsXCJzZWVraW5nXCIsXCJzZWVrZWRcIixcImVuZGVkXCIsXCJkdXJhdGlvbmNoYW5nZVwiLFwidGltZXVwZGF0ZVwiLFwicHJvZ3Jlc3NcIixcInBsYXlcIixcInBhdXNlXCIsXCJyYXRlY2hhbmdlXCIsXCJyZXNpemVcIixcInZvbHVtZWNoYW5nZVwiXSxiby5wcm90b3R5cGUuZmVhdHVyZXNWb2x1bWVDb250cm9sPWJvLmNhbkNvbnRyb2xWb2x1bWUoKSxiby5wcm90b3R5cGUuZmVhdHVyZXNNdXRlQ29udHJvbD1iby5jYW5NdXRlVm9sdW1lKCksYm8ucHJvdG90eXBlLmZlYXR1cmVzUGxheWJhY2tSYXRlPWJvLmNhbkNvbnRyb2xQbGF5YmFja1JhdGUoKSxiby5wcm90b3R5cGUuZmVhdHVyZXNTb3VyY2VzZXQ9Ym8uY2FuT3ZlcnJpZGVBdHRyaWJ1dGVzKCksYm8ucHJvdG90eXBlLm1vdmluZ01lZGlhRWxlbWVudEluRE9NPSFxZSxiby5wcm90b3R5cGUuZmVhdHVyZXNGdWxsc2NyZWVuUmVzaXplPSEwLGJvLnByb3RvdHlwZS5mZWF0dXJlc1Byb2dyZXNzRXZlbnRzPSEwLGJvLnByb3RvdHlwZS5mZWF0dXJlc1RpbWV1cGRhdGVFdmVudHM9ITAsYm8ucHJvdG90eXBlLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcz1iby5zdXBwb3J0c05hdGl2ZVRleHRUcmFja3MoKSxiby5wcm90b3R5cGUuZmVhdHVyZXNOYXRpdmVWaWRlb1RyYWNrcz1iby5zdXBwb3J0c05hdGl2ZVZpZGVvVHJhY2tzKCksYm8ucHJvdG90eXBlLmZlYXR1cmVzTmF0aXZlQXVkaW9UcmFja3M9Ym8uc3VwcG9ydHNOYXRpdmVBdWRpb1RyYWNrcygpO3ZhciBrbz1iby5URVNUX1ZJRCYmYm8uVEVTVF9WSUQuY29uc3RydWN0b3IucHJvdG90eXBlLmNhblBsYXlUeXBlLENvPS9eYXBwbGljYXRpb25cXC8oPzp4LXx2bmRcXC5hcHBsZVxcLiltcGVndXJsL2k7Ym8ucGF0Y2hDYW5QbGF5VHlwZT1mdW5jdGlvbigpezQ8PVllJiYhSmUmJiFldCYmKGJvLlRFU1RfVklELmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jYW5QbGF5VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmQ28udGVzdChlKT9cIm1heWJlXCI6a28uY2FsbCh0aGlzLGUpfSl9LGJvLnVucGF0Y2hDYW5QbGF5VHlwZT1mdW5jdGlvbigpe3ZhciBlPWJvLlRFU1RfVklELmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jYW5QbGF5VHlwZTtyZXR1cm4gYm8uVEVTVF9WSUQuY29uc3RydWN0b3IucHJvdG90eXBlLmNhblBsYXlUeXBlPWtvLGV9LGJvLnBhdGNoQ2FuUGxheVR5cGUoKSxiby5kaXNwb3NlTWVkaWFFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKGUpe2ZvcihlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtlLmhhc0NoaWxkTm9kZXMoKTspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UucmVtb3ZlQXR0cmlidXRlKFwic3JjXCIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUubG9hZCYmZnVuY3Rpb24oKXt0cnl7ZS5sb2FkKCl9Y2F0Y2goZSl7fX0oKX19LGJvLnJlc2V0TWVkaWFFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKGUpe2Zvcih2YXIgdD1lLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzb3VyY2VcIiksbj10Lmxlbmd0aDtuLS07KWUucmVtb3ZlQ2hpbGQodFtuXSk7ZS5yZW1vdmVBdHRyaWJ1dGUoXCJzcmNcIiksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5sb2FkJiZmdW5jdGlvbigpe3RyeXtlLmxvYWQoKX1jYXRjaChlKXt9fSgpfX0sW1wibXV0ZWRcIixcImRlZmF1bHRNdXRlZFwiLFwiYXV0b3BsYXlcIixcImNvbnRyb2xzXCIsXCJsb29wXCIsXCJwbGF5c2lubGluZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2JvLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsX1tlXXx8dGhpcy5lbF8uaGFzQXR0cmlidXRlKGUpfX0pLFtcIm11dGVkXCIsXCJkZWZhdWx0TXV0ZWRcIixcImF1dG9wbGF5XCIsXCJsb29wXCIsXCJwbGF5c2lubGluZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2JvLnByb3RvdHlwZVtcInNldFwiK0FlKHQpXT1mdW5jdGlvbihlKXsodGhpcy5lbF9bdF09ZSk/dGhpcy5lbF8uc2V0QXR0cmlidXRlKHQsdCk6dGhpcy5lbF8ucmVtb3ZlQXR0cmlidXRlKHQpfX0pLFtcInBhdXNlZFwiLFwiY3VycmVudFRpbWVcIixcImJ1ZmZlcmVkXCIsXCJ2b2x1bWVcIixcInBvc3RlclwiLFwicHJlbG9hZFwiLFwiZXJyb3JcIixcInNlZWtpbmdcIixcInNlZWthYmxlXCIsXCJlbmRlZFwiLFwicGxheWJhY2tSYXRlXCIsXCJkZWZhdWx0UGxheWJhY2tSYXRlXCIsXCJwbGF5ZWRcIixcIm5ldHdvcmtTdGF0ZVwiLFwicmVhZHlTdGF0ZVwiLFwidmlkZW9XaWR0aFwiLFwidmlkZW9IZWlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtiby5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbF9bZV19fSksW1widm9sdW1lXCIsXCJzcmNcIixcInBvc3RlclwiLFwicHJlbG9hZFwiLFwicGxheWJhY2tSYXRlXCIsXCJkZWZhdWx0UGxheWJhY2tSYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7Ym8ucHJvdG90eXBlW1wic2V0XCIrQWUodCldPWZ1bmN0aW9uKGUpe3RoaXMuZWxfW3RdPWV9fSksW1wicGF1c2VcIixcImxvYWRcIixcInBsYXlcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtiby5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbF9bZV0oKX19KSxqci53aXRoU291cmNlSGFuZGxlcnMoYm8pLGJvLm5hdGl2ZVNvdXJjZUhhbmRsZXI9e30sYm8ubmF0aXZlU291cmNlSGFuZGxlci5jYW5QbGF5VHlwZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGJvLlRFU1RfVklELmNhblBsYXlUeXBlKGUpfWNhdGNoKGUpe3JldHVyblwiXCJ9fSxiby5uYXRpdmVTb3VyY2VIYW5kbGVyLmNhbkhhbmRsZVNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKGUudHlwZSlyZXR1cm4gYm8ubmF0aXZlU291cmNlSGFuZGxlci5jYW5QbGF5VHlwZShlLnR5cGUpO2lmKGUuc3JjKXt2YXIgbj1MdChlLnNyYyk7cmV0dXJuIGJvLm5hdGl2ZVNvdXJjZUhhbmRsZXIuY2FuUGxheVR5cGUoXCJ2aWRlby9cIituKX1yZXR1cm5cIlwifSxiby5uYXRpdmVTb3VyY2VIYW5kbGVyLmhhbmRsZVNvdXJjZT1mdW5jdGlvbihlLHQsbil7dC5zZXRTcmMoZS5zcmMpfSxiby5uYXRpdmVTb3VyY2VIYW5kbGVyLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGJvLnJlZ2lzdGVyU291cmNlSGFuZGxlcihiby5uYXRpdmVTb3VyY2VIYW5kbGVyKSxqci5yZWdpc3RlclRlY2goXCJIdG1sNVwiLGJvKTt2YXIgRW89W1wicHJvZ3Jlc3NcIixcImFib3J0XCIsXCJzdXNwZW5kXCIsXCJlbXB0aWVkXCIsXCJzdGFsbGVkXCIsXCJsb2FkZWRtZXRhZGF0YVwiLFwibG9hZGVkZGF0YVwiLFwidGltZXVwZGF0ZVwiLFwicmVzaXplXCIsXCJ2b2x1bWVjaGFuZ2VcIixcInRleHR0cmFja2NoYW5nZVwiXSxTbz17Y2FucGxheTpcIkNhblBsYXlcIixjYW5wbGF5dGhyb3VnaDpcIkNhblBsYXlUaHJvdWdoXCIscGxheWluZzpcIlBsYXlpbmdcIixzZWVrZWQ6XCJTZWVrZWRcIn0sd289W1widGlueVwiLFwieHNtYWxsXCIsXCJzbWFsbFwiLFwibWVkaXVtXCIsXCJsYXJnZVwiLFwieGxhcmdlXCIsXCJodWdlXCJdLFBvPXt9O3dvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9XCJ4XCI9PT1lLmNoYXJBdCgwKT9cIngtXCIrZS5zdWJzdHJpbmcoMSk6ZTtQb1tlXT1cInZqcy1sYXlvdXQtXCIrdH0pO3ZhciB4bz17dGlueToyMTAseHNtYWxsOjMyMCxzbWFsbDo0MjUsbWVkaXVtOjc2OCxsYXJnZToxNDQwLHhsYXJnZToyNTYwLGh1Z2U6MS8wfSxqbz1mdW5jdGlvbih1KXtmdW5jdGlvbiBjKGUsdCxuKXt2YXIgcjtpZihlLmlkPWUuaWR8fHQuaWR8fFwidmpzX3ZpZGVvX1wiK3RlKCksKHQ9eShjLmdldFRhZ1NldHRpbmdzKGUpLHQpKS5pbml0Q2hpbGRyZW49ITEsdC5jcmVhdGVFbD0hMSx0LmV2ZW50ZWQ9ITEsdC5yZXBvcnRUb3VjaEFjdGl2aXR5PSExLCF0Lmxhbmd1YWdlKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2xvc2VzdCl7dmFyIGk9ZS5jbG9zZXN0KFwiW2xhbmddXCIpO2kmJmkuZ2V0QXR0cmlidXRlJiYodC5sYW5ndWFnZT1pLmdldEF0dHJpYnV0ZShcImxhbmdcIikpfWVsc2UgZm9yKHZhciBvPWU7byYmMT09PW8ubm9kZVR5cGU7KXtpZih4KG8pLmhhc093blByb3BlcnR5KFwibGFuZ1wiKSl7dC5sYW5ndWFnZT1vLmdldEF0dHJpYnV0ZShcImxhbmdcIik7YnJlYWt9bz1vLnBhcmVudE5vZGV9aWYoKHI9dS5jYWxsKHRoaXMsbnVsbCx0LG4pfHx0aGlzKS5ib3VuZERvY3VtZW50RnVsbHNjcmVlbkNoYW5nZV89cGUoTGUociksci5kb2N1bWVudEZ1bGxzY3JlZW5DaGFuZ2VfKSxyLmJvdW5kRnVsbFdpbmRvd09uRXNjS2V5Xz1wZShMZShyKSxyLmZ1bGxXaW5kb3dPbkVzY0tleSksci5sb2c9dihyLmlkXyksci5mc0FwaV89cHQsci5pc1Bvc3RlckZyb21UZWNoXz0hMSxyLnF1ZXVlZENhbGxiYWNrc189W10sci5pc1JlYWR5Xz0hMSxyLmhhc1N0YXJ0ZWRfPSExLHIudXNlckFjdGl2ZV89ITEsIXIub3B0aW9uc198fCFyLm9wdGlvbnNfLnRlY2hPcmRlcnx8IXIub3B0aW9uc18udGVjaE9yZGVyLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJObyB0ZWNoT3JkZXIgc3BlY2lmaWVkLiBEaWQgeW91IG92ZXJ3cml0ZSB2aWRlb2pzLm9wdGlvbnMgaW5zdGVhZCBvZiBqdXN0IGNoYW5naW5nIHRoZSBwcm9wZXJ0aWVzIHlvdSB3YW50IHRvIG92ZXJyaWRlP1wiKTtpZihyLnRhZz1lLHIudGFnQXR0cmlidXRlcz1lJiZ4KGUpLHIubGFuZ3VhZ2Uoci5vcHRpb25zXy5sYW5ndWFnZSksdC5sYW5ndWFnZXMpe3ZhciBzPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQubGFuZ3VhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3NbZS50b0xvd2VyQ2FzZSgpXT10Lmxhbmd1YWdlc1tlXX0pLHIubGFuZ3VhZ2VzXz1zfWVsc2Ugci5sYW5ndWFnZXNfPWMucHJvdG90eXBlLm9wdGlvbnNfLmxhbmd1YWdlcztyLnJlc2V0Q2FjaGVfKCksci5wb3N0ZXJfPXQucG9zdGVyfHxcIlwiLHIuY29udHJvbHNfPSEhdC5jb250cm9scyxlLmNvbnRyb2xzPSExLGUucmVtb3ZlQXR0cmlidXRlKFwiY29udHJvbHNcIiksci5jaGFuZ2luZ1NyY189ITEsci5wbGF5Q2FsbGJhY2tzXz1bXSxyLnBsYXlUZXJtaW5hdGVkUXVldWVfPVtdLGUuaGFzQXR0cmlidXRlKFwiYXV0b3BsYXlcIik/ci5hdXRvcGxheSghMCk6ci5hdXRvcGxheShyLm9wdGlvbnNfLmF1dG9wbGF5KSx0LnBsdWdpbnMmJk9iamVjdC5rZXlzKHQucGx1Z2lucykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByW2VdKXRocm93IG5ldyBFcnJvcigncGx1Z2luIFwiJytlKydcIiBkb2VzIG5vdCBleGlzdCcpfSksci5zY3J1YmJpbmdfPSExLHIuZWxfPXIuY3JlYXRlRWwoKSx3ZShMZShyKSx7ZXZlbnRCdXNLZXk6XCJlbF9cIn0pLHIuZmx1aWRfJiZyLm9uKFwicGxheWVycmVzZXRcIixyLnVwZGF0ZVN0eWxlRWxfKTt2YXIgYT1JZShyLm9wdGlvbnNfKTt0LnBsdWdpbnMmJk9iamVjdC5rZXlzKHQucGx1Z2lucykuZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdKHQucGx1Z2luc1tlXSl9KSxyLm9wdGlvbnNfLnBsYXllck9wdGlvbnM9YSxyLm1pZGRsZXdhcmVfPVtdLHIuaW5pdENoaWxkcmVuKCksci5pc0F1ZGlvKFwiYXVkaW9cIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSksci5jb250cm9scygpP3IuYWRkQ2xhc3MoXCJ2anMtY29udHJvbHMtZW5hYmxlZFwiKTpyLmFkZENsYXNzKFwidmpzLWNvbnRyb2xzLWRpc2FibGVkXCIpLHIuZWxfLnNldEF0dHJpYnV0ZShcInJvbGVcIixcInJlZ2lvblwiKSxyLmlzQXVkaW8oKT9yLmVsXy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsci5sb2NhbGl6ZShcIkF1ZGlvIFBsYXllclwiKSk6ci5lbF8uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLHIubG9jYWxpemUoXCJWaWRlbyBQbGF5ZXJcIikpLHIuaXNBdWRpbygpJiZyLmFkZENsYXNzKFwidmpzLWF1ZGlvXCIpLHIuZmxleE5vdFN1cHBvcnRlZF8oKSYmci5hZGRDbGFzcyhcInZqcy1uby1mbGV4XCIpLHN0JiZyLmFkZENsYXNzKFwidmpzLXRvdWNoLWVuYWJsZWRcIikscWV8fHIuYWRkQ2xhc3MoXCJ2anMtd29ya2luZ2hvdmVyXCIpLGMucGxheWVyc1tyLmlkX109TGUocik7dmFyIGw9cC5zcGxpdChcIi5cIilbMF07cmV0dXJuIHIuYWRkQ2xhc3MoXCJ2anMtdlwiK2wpLHIudXNlckFjdGl2ZSghMCksci5yZXBvcnRVc2VyQWN0aXZpdHkoKSxyLm9uZShcInBsYXlcIixyLmxpc3RlbkZvclVzZXJBY3Rpdml0eV8pLHIub24oXCJzdGFnZWNsaWNrXCIsci5oYW5kbGVTdGFnZUNsaWNrXyksci5vbihcImtleWRvd25cIixyLmhhbmRsZUtleURvd24pLHIuYnJlYWtwb2ludHMoci5vcHRpb25zXy5icmVha3BvaW50cyksci5yZXNwb25zaXZlKHIub3B0aW9uc18ucmVzcG9uc2l2ZSkscn1EZShjLHUpO3ZhciBlPWMucHJvdG90eXBlO3JldHVybiBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMudHJpZ2dlcihcImRpc3Bvc2VcIiksdGhpcy5vZmYoXCJkaXNwb3NlXCIpLGNlKGQsdGhpcy5mc0FwaV8uZnVsbHNjcmVlbmNoYW5nZSx0aGlzLmJvdW5kRG9jdW1lbnRGdWxsc2NyZWVuQ2hhbmdlXyksY2UoZCxcImtleWRvd25cIix0aGlzLmJvdW5kRnVsbFdpbmRvd09uRXNjS2V5XyksdGhpcy5zdHlsZUVsXyYmdGhpcy5zdHlsZUVsXy5wYXJlbnROb2RlJiYodGhpcy5zdHlsZUVsXy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbF8pLHRoaXMuc3R5bGVFbF89bnVsbCksYy5wbGF5ZXJzW3RoaXMuaWRfXT1udWxsLHRoaXMudGFnJiZ0aGlzLnRhZy5wbGF5ZXImJih0aGlzLnRhZy5wbGF5ZXI9bnVsbCksdGhpcy5lbF8mJnRoaXMuZWxfLnBsYXllciYmKHRoaXMuZWxfLnBsYXllcj1udWxsKSx0aGlzLnRlY2hfJiYodGhpcy50ZWNoXy5kaXNwb3NlKCksdGhpcy5pc1Bvc3RlckZyb21UZWNoXz0hMSx0aGlzLnBvc3Rlcl89XCJcIiksdGhpcy5wbGF5ZXJFbEluZ2VzdF8mJih0aGlzLnBsYXllckVsSW5nZXN0Xz1udWxsKSx0aGlzLnRhZyYmKHRoaXMudGFnPW51bGwpLGZ1bmN0aW9uKGUpe0lyW2UuaWQoKV09bnVsbH0odGhpcyksUHIubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1QcltlXSxuPXJbdC5nZXR0ZXJOYW1lXSgpO24mJm4ub2ZmJiZuLm9mZigpfSksdS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSxlLmNyZWF0ZUVsPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLnRhZyxlPXRoaXMucGxheWVyRWxJbmdlc3RfPW4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSYmbi5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtdmpzLXBsYXllclwiKSxyPVwidmlkZW8tanNcIj09PXRoaXMudGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtlP3Q9dGhpcy5lbF89bi5wYXJlbnROb2RlOnJ8fCh0PXRoaXMuZWxfPXUucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyxcImRpdlwiKSk7dmFyIGk9eChuKTtpZihyKXtmb3IodD10aGlzLmVsXz1uLG49dGhpcy50YWc9ZC5jcmVhdGVFbGVtZW50KFwidmlkZW9cIik7dC5jaGlsZHJlbi5sZW5ndGg7KW4uYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKTtDKHQsXCJ2aWRlby1qc1wiKXx8RSh0LFwidmlkZW8tanNcIiksdC5hcHBlbmRDaGlsZChuKSxlPXRoaXMucGxheWVyRWxJbmdlc3RfPXQsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt0cnl7bltlXT10W2VdfWNhdGNoKGUpe319KX1pZihuLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxpLnRhYmluZGV4PVwiLTFcIiwobnR8fGV0JiZvdCkmJihuLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImFwcGxpY2F0aW9uXCIpLGkucm9sZT1cImFwcGxpY2F0aW9uXCIpLG4ucmVtb3ZlQXR0cmlidXRlKFwid2lkdGhcIiksbi5yZW1vdmVBdHRyaWJ1dGUoXCJoZWlnaHRcIiksXCJ3aWR0aFwiaW4gaSYmZGVsZXRlIGkud2lkdGgsXCJoZWlnaHRcImluIGkmJmRlbGV0ZSBpLmhlaWdodCxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ImJlwiY2xhc3NcIj09PWV8fHQuc2V0QXR0cmlidXRlKGUsaVtlXSksciYmbi5zZXRBdHRyaWJ1dGUoZSxpW2VdKX0pLG4ucGxheWVySWQ9bi5pZCxuLmlkKz1cIl9odG1sNV9hcGlcIixuLmNsYXNzTmFtZT1cInZqcy10ZWNoXCIsbi5wbGF5ZXI9dC5wbGF5ZXI9dGhpcyx0aGlzLmFkZENsYXNzKFwidmpzLXBhdXNlZFwiKSwhMCE9PWguVklERU9KU19OT19EWU5BTUlDX1NUWUxFKXt0aGlzLnN0eWxlRWxfPVEoXCJ2anMtc3R5bGVzLWRpbWVuc2lvbnNcIik7dmFyIG89VyhcIi52anMtc3R5bGVzLWRlZmF1bHRzXCIpLHM9VyhcImhlYWRcIik7cy5pbnNlcnRCZWZvcmUodGhpcy5zdHlsZUVsXyxvP28ubmV4dFNpYmxpbmc6cy5maXJzdENoaWxkKX10aGlzLmZpbGxfPSExLHRoaXMuZmx1aWRfPSExLHRoaXMud2lkdGgodGhpcy5vcHRpb25zXy53aWR0aCksdGhpcy5oZWlnaHQodGhpcy5vcHRpb25zXy5oZWlnaHQpLHRoaXMuZmlsbCh0aGlzLm9wdGlvbnNfLmZpbGwpLHRoaXMuZmx1aWQodGhpcy5vcHRpb25zXy5mbHVpZCksdGhpcy5hc3BlY3RSYXRpbyh0aGlzLm9wdGlvbnNfLmFzcGVjdFJhdGlvKTtmb3IodmFyIGE9bi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImFcIiksbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hLml0ZW0obCk7RShjLFwidmpzLWhpZGRlblwiKSxjLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLFwiaGlkZGVuXCIpfXJldHVybiBuLmluaXROZXR3b3JrU3RhdGVfPW4ubmV0d29ya1N0YXRlLG4ucGFyZW50Tm9kZSYmIWUmJm4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxuKSxrKG4sdCksdGhpcy5jaGlsZHJlbl8udW5zaGlmdChuKSx0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoXCJsYW5nXCIsdGhpcy5sYW5ndWFnZV8pLHRoaXMuZWxfPXR9LGUud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGltZW5zaW9uKFwid2lkdGhcIixlKX0sZS5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGltZW5zaW9uKFwiaGVpZ2h0XCIsZSl9LGUuZGltZW5zaW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZStcIl9cIjtpZih2b2lkIDA9PT10KXJldHVybiB0aGlzW25dfHwwO2lmKFwiXCI9PT10KXJldHVybiB0aGlzW25dPXZvaWQgMCx2b2lkIHRoaXMudXBkYXRlU3R5bGVFbF8oKTt2YXIgcj1wYXJzZUZsb2F0KHQpO2lzTmFOKHIpP2YuZXJyb3IoJ0ltcHJvcGVyIHZhbHVlIFwiJyt0KydcIiBzdXBwbGllZCBmb3IgZm9yICcrZSk6KHRoaXNbbl09cix0aGlzLnVwZGF0ZVN0eWxlRWxfKCkpfSxlLmZsdWlkPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuISF0aGlzLmZsdWlkXzt0aGlzLmZsdWlkXz0hIWUsRWUodGhpcykmJnRoaXMub2ZmKFwicGxheWVycmVzZXRcIix0aGlzLnVwZGF0ZVN0eWxlRWxfKSxlPyh0aGlzLmFkZENsYXNzKFwidmpzLWZsdWlkXCIpLHRoaXMuZmlsbCghMSksZnVuY3Rpb24oZSx0KXtFZShlKT90KCk6KGUuZXZlbnRlZENhbGxiYWNrc3x8KGUuZXZlbnRlZENhbGxiYWNrcz1bXSksZS5ldmVudGVkQ2FsbGJhY2tzLnB1c2godCkpfShmdW5jdGlvbigpe3RoaXMub24oXCJwbGF5ZXJyZXNldFwiLHRoaXMudXBkYXRlU3R5bGVFbF8pfSkpOnRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtZmx1aWRcIiksdGhpcy51cGRhdGVTdHlsZUVsXygpfSxlLmZpbGw9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4hIXRoaXMuZmlsbF87dGhpcy5maWxsXz0hIWUsZT8odGhpcy5hZGRDbGFzcyhcInZqcy1maWxsXCIpLHRoaXMuZmx1aWQoITEpKTp0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWZpbGxcIil9LGUuYXNwZWN0UmF0aW89ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy5hc3BlY3RSYXRpb187aWYoIS9eXFxkK1xcOlxcZCskLy50ZXN0KGUpKXRocm93IG5ldyBFcnJvcihcIkltcHJvcGVyIHZhbHVlIHN1cHBsaWVkIGZvciBhc3BlY3QgcmF0aW8uIFRoZSBmb3JtYXQgc2hvdWxkIGJlIHdpZHRoOmhlaWdodCwgZm9yIGV4YW1wbGUgMTY6OS5cIik7dGhpcy5hc3BlY3RSYXRpb189ZSx0aGlzLmZsdWlkKCEwKSx0aGlzLnVwZGF0ZVN0eWxlRWxfKCl9LGUudXBkYXRlU3R5bGVFbF89ZnVuY3Rpb24oKXtpZighMCE9PWguVklERU9KU19OT19EWU5BTUlDX1NUWUxFKXt2YXIgZSx0LG4scj0odm9pZCAwIT09dGhpcy5hc3BlY3RSYXRpb18mJlwiYXV0b1wiIT09dGhpcy5hc3BlY3RSYXRpb18/dGhpcy5hc3BlY3RSYXRpb186MDx0aGlzLnZpZGVvV2lkdGgoKT90aGlzLnZpZGVvV2lkdGgoKStcIjpcIit0aGlzLnZpZGVvSGVpZ2h0KCk6XCIxNjo5XCIpLnNwbGl0KFwiOlwiKSxpPXJbMV0vclswXTtlPXZvaWQgMCE9PXRoaXMud2lkdGhfP3RoaXMud2lkdGhfOnZvaWQgMCE9PXRoaXMuaGVpZ2h0Xz90aGlzLmhlaWdodF8vaTp0aGlzLnZpZGVvV2lkdGgoKXx8MzAwLHQ9dm9pZCAwIT09dGhpcy5oZWlnaHRfP3RoaXMuaGVpZ2h0XzplKmksbj0vXlteYS16QS1aXS8udGVzdCh0aGlzLmlkKCkpP1wiZGltZW5zaW9ucy1cIit0aGlzLmlkKCk6dGhpcy5pZCgpK1wiLWRpbWVuc2lvbnNcIix0aGlzLmFkZENsYXNzKG4pLEoodGhpcy5zdHlsZUVsXyxcIlxcbiAgICAgIC5cIituK1wiIHtcXG4gICAgICAgIHdpZHRoOiBcIitlK1wicHg7XFxuICAgICAgICBoZWlnaHQ6IFwiK3QrXCJweDtcXG4gICAgICB9XFxuXFxuICAgICAgLlwiK24rXCIudmpzLWZsdWlkIHtcXG4gICAgICAgIHBhZGRpbmctdG9wOiBcIisxMDAqaStcIiU7XFxuICAgICAgfVxcbiAgICBcIil9ZWxzZXt2YXIgbz1cIm51bWJlclwiPT10eXBlb2YgdGhpcy53aWR0aF8/dGhpcy53aWR0aF86dGhpcy5vcHRpb25zXy53aWR0aCxzPVwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLmhlaWdodF8/dGhpcy5oZWlnaHRfOnRoaXMub3B0aW9uc18uaGVpZ2h0LGE9dGhpcy50ZWNoXyYmdGhpcy50ZWNoXy5lbCgpO2EmJigwPD1vJiYoYS53aWR0aD1vKSwwPD1zJiYoYS5oZWlnaHQ9cykpfX0sZS5sb2FkVGVjaF89ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMudGVjaF8mJnRoaXMudW5sb2FkVGVjaF8oKTt2YXIgcj1BZShlKSxpPWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrZS5zbGljZSgxKTtcIkh0bWw1XCIhPT1yJiZ0aGlzLnRhZyYmKGpyLmdldFRlY2goXCJIdG1sNVwiKS5kaXNwb3NlTWVkaWFFbGVtZW50KHRoaXMudGFnKSx0aGlzLnRhZy5wbGF5ZXI9bnVsbCx0aGlzLnRhZz1udWxsKSx0aGlzLnRlY2hOYW1lXz1yLHRoaXMuaXNSZWFkeV89ITE7dmFyIG89e3NvdXJjZTp0LGF1dG9wbGF5Olwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLmF1dG9wbGF5KCkmJnRoaXMuYXV0b3BsYXkoKSxuYXRpdmVDb250cm9sc0ZvclRvdWNoOnRoaXMub3B0aW9uc18ubmF0aXZlQ29udHJvbHNGb3JUb3VjaCxwbGF5ZXJJZDp0aGlzLmlkKCksdGVjaElkOnRoaXMuaWQoKStcIl9cIitpK1wiX2FwaVwiLHBsYXlzaW5saW5lOnRoaXMub3B0aW9uc18ucGxheXNpbmxpbmUscHJlbG9hZDp0aGlzLm9wdGlvbnNfLnByZWxvYWQsbG9vcDp0aGlzLm9wdGlvbnNfLmxvb3AsbXV0ZWQ6dGhpcy5vcHRpb25zXy5tdXRlZCxwb3N0ZXI6dGhpcy5wb3N0ZXIoKSxsYW5ndWFnZTp0aGlzLmxhbmd1YWdlKCkscGxheWVyRWxJbmdlc3Q6dGhpcy5wbGF5ZXJFbEluZ2VzdF98fCExLFwidnR0LmpzXCI6dGhpcy5vcHRpb25zX1tcInZ0dC5qc1wiXSxjYW5PdmVycmlkZVBvc3RlcjohIXRoaXMub3B0aW9uc18udGVjaENhbk92ZXJyaWRlUG9zdGVyLGVuYWJsZVNvdXJjZXNldDp0aGlzLm9wdGlvbnNfLmVuYWJsZVNvdXJjZXNldCxQcm9taXNlOnRoaXMub3B0aW9uc18uUHJvbWlzZX07UHIubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1QcltlXTtvW3QuZ2V0dGVyTmFtZV09blt0LnByaXZhdGVOYW1lXX0pLHkobyx0aGlzLm9wdGlvbnNfW3JdKSx5KG8sdGhpcy5vcHRpb25zX1tpXSkseShvLHRoaXMub3B0aW9uc19bZS50b0xvd2VyQ2FzZSgpXSksdGhpcy50YWcmJihvLnRhZz10aGlzLnRhZyksdCYmdC5zcmM9PT10aGlzLmNhY2hlXy5zcmMmJjA8dGhpcy5jYWNoZV8uY3VycmVudFRpbWUmJihvLnN0YXJ0VGltZT10aGlzLmNhY2hlXy5jdXJyZW50VGltZSk7dmFyIHM9anIuZ2V0VGVjaChlKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoXCJObyBUZWNoIG5hbWVkICdcIityK1wiJyBleGlzdHMhICdcIityK1wiJyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB1c2luZyB2aWRlb2pzLnJlZ2lzdGVyVGVjaCgpJ1wiKTt0aGlzLnRlY2hfPW5ldyBzKG8pLHRoaXMudGVjaF8ucmVhZHkocGUodGhpcyx0aGlzLmhhbmRsZVRlY2hSZWFkeV8pLCEwKSxTdCh0aGlzLnRleHRUcmFja3NKc29uX3x8W10sdGhpcy50ZWNoXyksRW8uZm9yRWFjaChmdW5jdGlvbihlKXtuLm9uKG4udGVjaF8sZSxuW1wiaGFuZGxlVGVjaFwiK0FlKGUpK1wiX1wiXSl9KSxPYmplY3Qua2V5cyhTbykuZm9yRWFjaChmdW5jdGlvbih0KXtuLm9uKG4udGVjaF8sdCxmdW5jdGlvbihlKXswPT09bi50ZWNoXy5wbGF5YmFja1JhdGUoKSYmbi50ZWNoXy5zZWVraW5nKCk/bi5xdWV1ZWRDYWxsYmFja3NfLnB1c2goe2NhbGxiYWNrOm5bXCJoYW5kbGVUZWNoXCIrU29bdF0rXCJfXCJdLmJpbmQobiksZXZlbnQ6ZX0pOm5bXCJoYW5kbGVUZWNoXCIrU29bdF0rXCJfXCJdKGUpfSl9KSx0aGlzLm9uKHRoaXMudGVjaF8sXCJsb2Fkc3RhcnRcIix0aGlzLmhhbmRsZVRlY2hMb2FkU3RhcnRfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJzb3VyY2VzZXRcIix0aGlzLmhhbmRsZVRlY2hTb3VyY2VzZXRfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJ3YWl0aW5nXCIsdGhpcy5oYW5kbGVUZWNoV2FpdGluZ18pLHRoaXMub24odGhpcy50ZWNoXyxcImVuZGVkXCIsdGhpcy5oYW5kbGVUZWNoRW5kZWRfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJzZWVraW5nXCIsdGhpcy5oYW5kbGVUZWNoU2Vla2luZ18pLHRoaXMub24odGhpcy50ZWNoXyxcInBsYXlcIix0aGlzLmhhbmRsZVRlY2hQbGF5XyksdGhpcy5vbih0aGlzLnRlY2hfLFwiZmlyc3RwbGF5XCIsdGhpcy5oYW5kbGVUZWNoRmlyc3RQbGF5XyksdGhpcy5vbih0aGlzLnRlY2hfLFwicGF1c2VcIix0aGlzLmhhbmRsZVRlY2hQYXVzZV8pLHRoaXMub24odGhpcy50ZWNoXyxcImR1cmF0aW9uY2hhbmdlXCIsdGhpcy5oYW5kbGVUZWNoRHVyYXRpb25DaGFuZ2VfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJmdWxsc2NyZWVuY2hhbmdlXCIsdGhpcy5oYW5kbGVUZWNoRnVsbHNjcmVlbkNoYW5nZV8pLHRoaXMub24odGhpcy50ZWNoXyxcImVudGVycGljdHVyZWlucGljdHVyZVwiLHRoaXMuaGFuZGxlVGVjaEVudGVyUGljdHVyZUluUGljdHVyZV8pLHRoaXMub24odGhpcy50ZWNoXyxcImxlYXZlcGljdHVyZWlucGljdHVyZVwiLHRoaXMuaGFuZGxlVGVjaExlYXZlUGljdHVyZUluUGljdHVyZV8pLHRoaXMub24odGhpcy50ZWNoXyxcImVycm9yXCIsdGhpcy5oYW5kbGVUZWNoRXJyb3JfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJsb2FkZWRtZXRhZGF0YVwiLHRoaXMudXBkYXRlU3R5bGVFbF8pLHRoaXMub24odGhpcy50ZWNoXyxcInBvc3RlcmNoYW5nZVwiLHRoaXMuaGFuZGxlVGVjaFBvc3RlckNoYW5nZV8pLHRoaXMub24odGhpcy50ZWNoXyxcInRleHRkYXRhXCIsdGhpcy5oYW5kbGVUZWNoVGV4dERhdGFfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJyYXRlY2hhbmdlXCIsdGhpcy5oYW5kbGVUZWNoUmF0ZUNoYW5nZV8pLHRoaXMudXNpbmdOYXRpdmVDb250cm9scyh0aGlzLnRlY2hHZXRfKFwiY29udHJvbHNcIikpLHRoaXMuY29udHJvbHMoKSYmIXRoaXMudXNpbmdOYXRpdmVDb250cm9scygpJiZ0aGlzLmFkZFRlY2hDb250cm9sc0xpc3RlbmVyc18oKSx0aGlzLnRlY2hfLmVsKCkucGFyZW50Tm9kZT09PXRoaXMuZWwoKXx8XCJIdG1sNVwiPT09ciYmdGhpcy50YWd8fGsodGhpcy50ZWNoXy5lbCgpLHRoaXMuZWwoKSksdGhpcy50YWcmJih0aGlzLnRhZy5wbGF5ZXI9bnVsbCx0aGlzLnRhZz1udWxsKX0sZS51bmxvYWRUZWNoXz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7UHIubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1QcltlXTtuW3QucHJpdmF0ZU5hbWVdPW5bdC5nZXR0ZXJOYW1lXSgpfSksdGhpcy50ZXh0VHJhY2tzSnNvbl89RXQodGhpcy50ZWNoXyksdGhpcy5pc1JlYWR5Xz0hMSx0aGlzLnRlY2hfLmRpc3Bvc2UoKSx0aGlzLnRlY2hfPSExLHRoaXMuaXNQb3N0ZXJGcm9tVGVjaF8mJih0aGlzLnBvc3Rlcl89XCJcIix0aGlzLnRyaWdnZXIoXCJwb3N0ZXJjaGFuZ2VcIikpLHRoaXMuaXNQb3N0ZXJGcm9tVGVjaF89ITF9LGUudGVjaD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmZi53YXJuKFwiVXNpbmcgdGhlIHRlY2ggZGlyZWN0bHkgY2FuIGJlIGRhbmdlcm91cy4gSSBob3BlIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxcblNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9pc3N1ZXMvMjYxNyBmb3IgbW9yZSBpbmZvLlxcblwiKSx0aGlzLnRlY2hffSxlLmFkZFRlY2hDb250cm9sc0xpc3RlbmVyc189ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZVRlY2hDb250cm9sc0xpc3RlbmVyc18oKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJtb3VzZXVwXCIsdGhpcy5oYW5kbGVUZWNoQ2xpY2tfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJkYmxjbGlja1wiLHRoaXMuaGFuZGxlVGVjaERvdWJsZUNsaWNrXyksdGhpcy5vbih0aGlzLnRlY2hfLFwidG91Y2hzdGFydFwiLHRoaXMuaGFuZGxlVGVjaFRvdWNoU3RhcnRfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJ0b3VjaG1vdmVcIix0aGlzLmhhbmRsZVRlY2hUb3VjaE1vdmVfKSx0aGlzLm9uKHRoaXMudGVjaF8sXCJ0b3VjaGVuZFwiLHRoaXMuaGFuZGxlVGVjaFRvdWNoRW5kXyksdGhpcy5vbih0aGlzLnRlY2hfLFwidGFwXCIsdGhpcy5oYW5kbGVUZWNoVGFwXyl9LGUucmVtb3ZlVGVjaENvbnRyb2xzTGlzdGVuZXJzXz1mdW5jdGlvbigpe3RoaXMub2ZmKHRoaXMudGVjaF8sXCJ0YXBcIix0aGlzLmhhbmRsZVRlY2hUYXBfKSx0aGlzLm9mZih0aGlzLnRlY2hfLFwidG91Y2hzdGFydFwiLHRoaXMuaGFuZGxlVGVjaFRvdWNoU3RhcnRfKSx0aGlzLm9mZih0aGlzLnRlY2hfLFwidG91Y2htb3ZlXCIsdGhpcy5oYW5kbGVUZWNoVG91Y2hNb3ZlXyksdGhpcy5vZmYodGhpcy50ZWNoXyxcInRvdWNoZW5kXCIsdGhpcy5oYW5kbGVUZWNoVG91Y2hFbmRfKSx0aGlzLm9mZih0aGlzLnRlY2hfLFwibW91c2V1cFwiLHRoaXMuaGFuZGxlVGVjaENsaWNrXyksdGhpcy5vZmYodGhpcy50ZWNoXyxcImRibGNsaWNrXCIsdGhpcy5oYW5kbGVUZWNoRG91YmxlQ2xpY2tfKX0sZS5oYW5kbGVUZWNoUmVhZHlfPWZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyUmVhZHkoKSx0aGlzLmNhY2hlXy52b2x1bWUmJnRoaXMudGVjaENhbGxfKFwic2V0Vm9sdW1lXCIsdGhpcy5jYWNoZV8udm9sdW1lKSx0aGlzLmhhbmRsZVRlY2hQb3N0ZXJDaGFuZ2VfKCksdGhpcy5oYW5kbGVUZWNoRHVyYXRpb25DaGFuZ2VfKCl9LGUuaGFuZGxlVGVjaExvYWRTdGFydF89ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWVuZGVkXCIpLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtc2Vla2luZ1wiKSx0aGlzLmVycm9yKG51bGwpLHRoaXMuaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXygpLHRoaXMucGF1c2VkKCk/KHRoaXMuaGFzU3RhcnRlZCghMSksdGhpcy50cmlnZ2VyKFwibG9hZHN0YXJ0XCIpKToodGhpcy50cmlnZ2VyKFwibG9hZHN0YXJ0XCIpLHRoaXMudHJpZ2dlcihcImZpcnN0cGxheVwiKSksdGhpcy5tYW51YWxBdXRvcGxheV8odGhpcy5hdXRvcGxheSgpKX0sZS5tYW51YWxBdXRvcGxheV89ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztpZih0aGlzLnRlY2hfJiZcInN0cmluZ1wiPT10eXBlb2YgdCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXIubXV0ZWQoKTtyLm11dGVkKCEwKTtmdW5jdGlvbiB0KCl7ci5tdXRlZChlKX1yLnBsYXlUZXJtaW5hdGVkUXVldWVfLnB1c2godCk7dmFyIG49ci5wbGF5KCk7aWYoVHQobikpcmV0dXJuIG4uY2F0Y2godCl9dmFyIG47aWYoXCJhbnlcIj09PXQmJiEwIT09dGhpcy5tdXRlZCgpP1R0KG49dGhpcy5wbGF5KCkpJiYobj1uLmNhdGNoKGUpKTpuPVwibXV0ZWRcIj09PXQmJiEwIT09dGhpcy5tdXRlZCgpP2UoKTp0aGlzLnBsYXkoKSxUdChuKSlyZXR1cm4gbi50aGVuKGZ1bmN0aW9uKCl7ci50cmlnZ2VyKHt0eXBlOlwiYXV0b3BsYXktc3VjY2Vzc1wiLGF1dG9wbGF5OnR9KX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3IudHJpZ2dlcih7dHlwZTpcImF1dG9wbGF5LWZhaWx1cmVcIixhdXRvcGxheTp0fSl9KX19LGUudXBkYXRlU291cmNlQ2FjaGVzXz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1cIlwiKTt2YXIgdD1lLG49XCJcIjtcInN0cmluZ1wiIT10eXBlb2YgdCYmKHQ9ZS5zcmMsbj1lLnR5cGUpLHRoaXMuY2FjaGVfLnNvdXJjZT10aGlzLmNhY2hlXy5zb3VyY2V8fHt9LHRoaXMuY2FjaGVfLnNvdXJjZXM9dGhpcy5jYWNoZV8uc291cmNlc3x8W10sdCYmIW4mJihuPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuXCJcIjtpZihlLmNhY2hlXy5zb3VyY2Uuc3JjPT09dCYmZS5jYWNoZV8uc291cmNlLnR5cGUpcmV0dXJuIGUuY2FjaGVfLnNvdXJjZS50eXBlO3ZhciBuPWUuY2FjaGVfLnNvdXJjZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNyYz09PXR9KTtpZihuLmxlbmd0aClyZXR1cm4gblswXS50eXBlO2Zvcih2YXIgcj1lLiQkKFwic291cmNlXCIpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihvLnR5cGUmJm8uc3JjJiZvLnNyYz09PXQpcmV0dXJuIG8udHlwZX1yZXR1cm4gJHIodCl9KHRoaXMsdCkpLHRoaXMuY2FjaGVfLnNvdXJjZT1JZSh7fSxlLHtzcmM6dCx0eXBlOm59KTtmb3IodmFyIHI9dGhpcy5jYWNoZV8uc291cmNlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3JjJiZlLnNyYz09PXR9KSxpPVtdLG89dGhpcy4kJChcInNvdXJjZVwiKSxzPVtdLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9eChvW2FdKTtpLnB1c2gobCksbC5zcmMmJmwuc3JjPT09dCYmcy5wdXNoKGwuc3JjKX1zLmxlbmd0aCYmIXIubGVuZ3RoP3RoaXMuY2FjaGVfLnNvdXJjZXM9aTpyLmxlbmd0aHx8KHRoaXMuY2FjaGVfLnNvdXJjZXM9W3RoaXMuY2FjaGVfLnNvdXJjZV0pLHRoaXMuY2FjaGVfLnNyYz10fSxlLmhhbmRsZVRlY2hTb3VyY2VzZXRfPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYoIXRoaXMuY2hhbmdpbmdTcmNfKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4gbi51cGRhdGVTb3VyY2VDYWNoZXNfKGUpfSxyPXRoaXMuY3VycmVudFNvdXJjZSgpLnNyYyxpPWUuc3JjO3ImJiEvXmJsb2I6Ly50ZXN0KHIpJiYvXmJsb2I6Ly50ZXN0KGkpJiYodGhpcy5sYXN0U291cmNlXyYmKHRoaXMubGFzdFNvdXJjZV8udGVjaD09PWl8fHRoaXMubGFzdFNvdXJjZV8ucGxheWVyPT09cil8fCh0PWZ1bmN0aW9uKCl7fSkpLHQoaSksZS5zcmN8fHRoaXMudGVjaF8uYW55KFtcInNvdXJjZXNldFwiLFwibG9hZHN0YXJ0XCJdLGZ1bmN0aW9uKGUpe2lmKFwic291cmNlc2V0XCIhPT1lLnR5cGUpe3ZhciB0PW4udGVjaEdldChcImN1cnJlbnRTcmNcIik7bi5sYXN0U291cmNlXy50ZWNoPXQsbi51cGRhdGVTb3VyY2VDYWNoZXNfKHQpfX0pfXRoaXMubGFzdFNvdXJjZV89e3BsYXllcjp0aGlzLmN1cnJlbnRTb3VyY2UoKS5zcmMsdGVjaDplLnNyY30sdGhpcy50cmlnZ2VyKHtzcmM6ZS5zcmMsdHlwZTpcInNvdXJjZXNldFwifSl9LGUuaGFzU3RhcnRlZD1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzLmhhc1N0YXJ0ZWRfO2UhPT10aGlzLmhhc1N0YXJ0ZWRfJiYodGhpcy5oYXNTdGFydGVkXz1lLHRoaXMuaGFzU3RhcnRlZF8/KHRoaXMuYWRkQ2xhc3MoXCJ2anMtaGFzLXN0YXJ0ZWRcIiksdGhpcy50cmlnZ2VyKFwiZmlyc3RwbGF5XCIpKTp0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWhhcy1zdGFydGVkXCIpKX0sZS5oYW5kbGVUZWNoUGxheV89ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWVuZGVkXCIpLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtcGF1c2VkXCIpLHRoaXMuYWRkQ2xhc3MoXCJ2anMtcGxheWluZ1wiKSx0aGlzLmhhc1N0YXJ0ZWQoITApLHRoaXMudHJpZ2dlcihcInBsYXlcIil9LGUuaGFuZGxlVGVjaFJhdGVDaGFuZ2VfPWZ1bmN0aW9uKCl7MDx0aGlzLnRlY2hfLnBsYXliYWNrUmF0ZSgpJiYwPT09dGhpcy5jYWNoZV8ubGFzdFBsYXliYWNrUmF0ZSYmKHRoaXMucXVldWVkQ2FsbGJhY2tzXy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGxiYWNrKGUuZXZlbnQpfSksdGhpcy5xdWV1ZWRDYWxsYmFja3NfPVtdKSx0aGlzLmNhY2hlXy5sYXN0UGxheWJhY2tSYXRlPXRoaXMudGVjaF8ucGxheWJhY2tSYXRlKCksdGhpcy50cmlnZ2VyKFwicmF0ZWNoYW5nZVwiKX0sZS5oYW5kbGVUZWNoV2FpdGluZ189ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYWRkQ2xhc3MoXCJ2anMtd2FpdGluZ1wiKSx0aGlzLnRyaWdnZXIoXCJ3YWl0aW5nXCIpO3ZhciBuPXRoaXMuY3VycmVudFRpbWUoKTt0aGlzLm9uKFwidGltZXVwZGF0ZVwiLGZ1bmN0aW9uIGUoKXtuIT09dC5jdXJyZW50VGltZSgpJiYodC5yZW1vdmVDbGFzcyhcInZqcy13YWl0aW5nXCIpLHQub2ZmKFwidGltZXVwZGF0ZVwiLGUpKX0pfSxlLmhhbmRsZVRlY2hDYW5QbGF5Xz1mdW5jdGlvbigpe3RoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtd2FpdGluZ1wiKSx0aGlzLnRyaWdnZXIoXCJjYW5wbGF5XCIpfSxlLmhhbmRsZVRlY2hDYW5QbGF5VGhyb3VnaF89ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLXdhaXRpbmdcIiksdGhpcy50cmlnZ2VyKFwiY2FucGxheXRocm91Z2hcIil9LGUuaGFuZGxlVGVjaFBsYXlpbmdfPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVDbGFzcyhcInZqcy13YWl0aW5nXCIpLHRoaXMudHJpZ2dlcihcInBsYXlpbmdcIil9LGUuaGFuZGxlVGVjaFNlZWtpbmdfPWZ1bmN0aW9uKCl7dGhpcy5hZGRDbGFzcyhcInZqcy1zZWVraW5nXCIpLHRoaXMudHJpZ2dlcihcInNlZWtpbmdcIil9LGUuaGFuZGxlVGVjaFNlZWtlZF89ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLXNlZWtpbmdcIiksdGhpcy5yZW1vdmVDbGFzcyhcInZqcy1lbmRlZFwiKSx0aGlzLnRyaWdnZXIoXCJzZWVrZWRcIil9LGUuaGFuZGxlVGVjaEZpcnN0UGxheV89ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnNfLnN0YXJ0dGltZSYmKGYud2FybihcIlBhc3NpbmcgdGhlIGBzdGFydHRpbWVgIG9wdGlvbiB0byB0aGUgcGxheWVyIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiA2LjBcIiksdGhpcy5jdXJyZW50VGltZSh0aGlzLm9wdGlvbnNfLnN0YXJ0dGltZSkpLHRoaXMuYWRkQ2xhc3MoXCJ2anMtaGFzLXN0YXJ0ZWRcIiksdGhpcy50cmlnZ2VyKFwiZmlyc3RwbGF5XCIpfSxlLmhhbmRsZVRlY2hQYXVzZV89ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsYXNzKFwidmpzLXBsYXlpbmdcIiksdGhpcy5hZGRDbGFzcyhcInZqcy1wYXVzZWRcIiksdGhpcy50cmlnZ2VyKFwicGF1c2VcIil9LGUuaGFuZGxlVGVjaEVuZGVkXz1mdW5jdGlvbigpe3RoaXMuYWRkQ2xhc3MoXCJ2anMtZW5kZWRcIiksdGhpcy5vcHRpb25zXy5sb29wPyh0aGlzLmN1cnJlbnRUaW1lKDApLHRoaXMucGxheSgpKTp0aGlzLnBhdXNlZCgpfHx0aGlzLnBhdXNlKCksdGhpcy50cmlnZ2VyKFwiZW5kZWRcIil9LGUuaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXz1mdW5jdGlvbigpe3RoaXMuZHVyYXRpb24odGhpcy50ZWNoR2V0XyhcImR1cmF0aW9uXCIpKX0sZS5oYW5kbGVUZWNoQ2xpY2tfPWZ1bmN0aW9uKGUpe1YoZSkmJnRoaXMuY29udHJvbHNfJiYodGhpcy5wYXVzZWQoKT9rdCh0aGlzLnBsYXkoKSk6dGhpcy5wYXVzZSgpKX0sZS5oYW5kbGVUZWNoRG91YmxlQ2xpY2tfPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbHNfJiYoQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0aGlzLiQkKFwiLnZqcy1jb250cm9sLWJhciwgLnZqcy1tb2RhbC1kaWFsb2dcIiksZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGFpbnModC50YXJnZXQpfSl8fHZvaWQgMCE9PXRoaXMub3B0aW9uc18mJnZvaWQgMCE9PXRoaXMub3B0aW9uc18udXNlckFjdGlvbnMmJnZvaWQgMCE9PXRoaXMub3B0aW9uc18udXNlckFjdGlvbnMuZG91YmxlQ2xpY2smJiExPT09dGhpcy5vcHRpb25zXy51c2VyQWN0aW9ucy5kb3VibGVDbGlja3x8KHZvaWQgMCE9PXRoaXMub3B0aW9uc18mJnZvaWQgMCE9PXRoaXMub3B0aW9uc18udXNlckFjdGlvbnMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9uc18udXNlckFjdGlvbnMuZG91YmxlQ2xpY2s/dGhpcy5vcHRpb25zXy51c2VyQWN0aW9ucy5kb3VibGVDbGljay5jYWxsKHRoaXMsdCk6dGhpcy5pc0Z1bGxzY3JlZW4oKT90aGlzLmV4aXRGdWxsc2NyZWVuKCk6dGhpcy5yZXF1ZXN0RnVsbHNjcmVlbigpKSl9LGUuaGFuZGxlVGVjaFRhcF89ZnVuY3Rpb24oKXt0aGlzLnVzZXJBY3RpdmUoIXRoaXMudXNlckFjdGl2ZSgpKX0sZS5oYW5kbGVUZWNoVG91Y2hTdGFydF89ZnVuY3Rpb24oKXt0aGlzLnVzZXJXYXNBY3RpdmU9dGhpcy51c2VyQWN0aXZlKCl9LGUuaGFuZGxlVGVjaFRvdWNoTW92ZV89ZnVuY3Rpb24oKXt0aGlzLnVzZXJXYXNBY3RpdmUmJnRoaXMucmVwb3J0VXNlckFjdGl2aXR5KCl9LGUuaGFuZGxlVGVjaFRvdWNoRW5kXz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LGUuaGFuZGxlU3RhZ2VDbGlja189ZnVuY3Rpb24oKXt0aGlzLnJlcG9ydFVzZXJBY3Rpdml0eSgpfSxlLnRvZ2dsZUZ1bGxzY3JlZW5DbGFzc189ZnVuY3Rpb24oKXt0aGlzLmlzRnVsbHNjcmVlbigpP3RoaXMuYWRkQ2xhc3MoXCJ2anMtZnVsbHNjcmVlblwiKTp0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWZ1bGxzY3JlZW5cIil9LGUuZG9jdW1lbnRGdWxsc2NyZWVuQ2hhbmdlXz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVsKCksbj1kW3RoaXMuZnNBcGlfLmZ1bGxzY3JlZW5FbGVtZW50XT09PXQ7IW4mJnQubWF0Y2hlcz9uPXQubWF0Y2hlcyhcIjpcIit0aGlzLmZzQXBpXy5mdWxsc2NyZWVuKTohbiYmdC5tc01hdGNoZXNTZWxlY3RvciYmKG49dC5tc01hdGNoZXNTZWxlY3RvcihcIjpcIit0aGlzLmZzQXBpXy5mdWxsc2NyZWVuKSksdGhpcy5pc0Z1bGxzY3JlZW4obiksITE9PT10aGlzLmlzRnVsbHNjcmVlbigpJiZjZShkLHRoaXMuZnNBcGlfLmZ1bGxzY3JlZW5jaGFuZ2UsdGhpcy5ib3VuZERvY3VtZW50RnVsbHNjcmVlbkNoYW5nZV8pLHRoaXMuZnNBcGlfLnByZWZpeGVkJiZ0aGlzLnRyaWdnZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIpfSxlLmhhbmRsZVRlY2hGdWxsc2NyZWVuQ2hhbmdlXz1mdW5jdGlvbihlLHQpe3QmJnRoaXMuaXNGdWxsc2NyZWVuKHQuaXNGdWxsc2NyZWVuKSx0aGlzLnRyaWdnZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIpfSxlLnRvZ2dsZVBpY3R1cmVJblBpY3R1cmVDbGFzc189ZnVuY3Rpb24oKXt0aGlzLmlzSW5QaWN0dXJlSW5QaWN0dXJlKCk/dGhpcy5hZGRDbGFzcyhcInZqcy1waWN0dXJlLWluLXBpY3R1cmVcIik6dGhpcy5yZW1vdmVDbGFzcyhcInZqcy1waWN0dXJlLWluLXBpY3R1cmVcIil9LGUuaGFuZGxlVGVjaEVudGVyUGljdHVyZUluUGljdHVyZV89ZnVuY3Rpb24oZSl7dGhpcy5pc0luUGljdHVyZUluUGljdHVyZSghMCl9LGUuaGFuZGxlVGVjaExlYXZlUGljdHVyZUluUGljdHVyZV89ZnVuY3Rpb24oZSl7dGhpcy5pc0luUGljdHVyZUluUGljdHVyZSghMSl9LGUuaGFuZGxlVGVjaEVycm9yXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMudGVjaF8uZXJyb3IoKTt0aGlzLmVycm9yKGUpfSxlLmhhbmRsZVRlY2hUZXh0RGF0YV89ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsOzE8YXJndW1lbnRzLmxlbmd0aCYmKG49dCksdGhpcy50cmlnZ2VyKFwidGV4dGRhdGFcIixuKX0sZS5nZXRDYWNoZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhY2hlX30sZS5yZXNldENhY2hlXz1mdW5jdGlvbigpe3RoaXMuY2FjaGVfPXtjdXJyZW50VGltZTowLGluYWN0aXZpdHlUaW1lb3V0OnRoaXMub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQsZHVyYXRpb246TmFOLGxhc3RWb2x1bWU6MSxsYXN0UGxheWJhY2tSYXRlOnRoaXMuZGVmYXVsdFBsYXliYWNrUmF0ZSgpLG1lZGlhOm51bGwsc3JjOlwiXCIsc291cmNlOnt9LHNvdXJjZXM6W10sdm9sdW1lOjF9fSxlLnRlY2hDYWxsXz1mdW5jdGlvbihlLHQpe3RoaXMucmVhZHkoZnVuY3Rpb24oKXtpZihlIGluIExyKXJldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdFtuXShlLnJlZHVjZShScihuKSxyKSl9KHRoaXMubWlkZGxld2FyZV8sdGhpcy50ZWNoXyxlLHQpO2lmKGUgaW4gRnIpcmV0dXJuIE1yKHRoaXMubWlkZGxld2FyZV8sdGhpcy50ZWNoXyxlLHQpO3RyeXt0aGlzLnRlY2hfJiZ0aGlzLnRlY2hfW2VdKHQpfWNhdGNoKGUpe3Rocm93IGYoZSksZX19LCEwKX0sZS50ZWNoR2V0Xz1mdW5jdGlvbih0KXtpZih0aGlzLnRlY2hfJiZ0aGlzLnRlY2hfLmlzUmVhZHlfKXtpZih0IGluIE5yKXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucmVkdWNlUmlnaHQoUnIobiksdFtuXSgpKX0odGhpcy5taWRkbGV3YXJlXyx0aGlzLnRlY2hfLHQpO2lmKHQgaW4gRnIpcmV0dXJuIE1yKHRoaXMubWlkZGxld2FyZV8sdGhpcy50ZWNoXyx0KTt0cnl7cmV0dXJuIHRoaXMudGVjaF9bdF0oKX1jYXRjaChlKXtpZih2b2lkIDA9PT10aGlzLnRlY2hfW3RdKXRocm93IGYoXCJWaWRlby5qczogXCIrdCtcIiBtZXRob2Qgbm90IGRlZmluZWQgZm9yIFwiK3RoaXMudGVjaE5hbWVfK1wiIHBsYXliYWNrIHRlY2hub2xvZ3kuXCIsZSksZTtpZihcIlR5cGVFcnJvclwiPT09ZS5uYW1lKXRocm93IGYoXCJWaWRlby5qczogXCIrdCtcIiB1bmF2YWlsYWJsZSBvbiBcIit0aGlzLnRlY2hOYW1lXytcIiBwbGF5YmFjayB0ZWNobm9sb2d5IGVsZW1lbnQuXCIsZSksdGhpcy50ZWNoXy5pc1JlYWR5Xz0hMSxlO3Rocm93IGYoZSksZX19fSxlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5vcHRpb25zXy5Qcm9taXNlfHxoLlByb21pc2U7cmV0dXJuIGU/bmV3IGUoZnVuY3Rpb24oZSl7dC5wbGF5XyhlKX0pOnRoaXMucGxheV8oKX0sZS5wbGF5Xz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3ZvaWQgMD09PWUmJihlPWt0KSx0aGlzLnBsYXlDYWxsYmFja3NfLnB1c2goZSk7dmFyIG49Qm9vbGVhbighdGhpcy5jaGFuZ2luZ1NyY18mJih0aGlzLnNyYygpfHx0aGlzLmN1cnJlbnRTcmMoKSkpO2lmKHRoaXMud2FpdFRvUGxheV8mJih0aGlzLm9mZihbXCJyZWFkeVwiLFwibG9hZHN0YXJ0XCJdLHRoaXMud2FpdFRvUGxheV8pLHRoaXMud2FpdFRvUGxheV89bnVsbCksIXRoaXMuaXNSZWFkeV98fCFuKXJldHVybiB0aGlzLndhaXRUb1BsYXlfPWZ1bmN0aW9uKGUpe3QucGxheV8oKX0sdGhpcy5vbmUoW1wicmVhZHlcIixcImxvYWRzdGFydFwiXSx0aGlzLndhaXRUb1BsYXlfKSx2b2lkKG58fCFpdCYmIXFlfHx0aGlzLmxvYWQoKSk7dmFyIHI9dGhpcy50ZWNoR2V0XyhcInBsYXlcIik7bnVsbD09PXI/dGhpcy5ydW5QbGF5VGVybWluYXRlZFF1ZXVlXygpOnRoaXMucnVuUGxheUNhbGxiYWNrc18ocil9LGUucnVuUGxheVRlcm1pbmF0ZWRRdWV1ZV89ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsYXlUZXJtaW5hdGVkUXVldWVfLnNsaWNlKDApO3RoaXMucGxheVRlcm1pbmF0ZWRRdWV1ZV89W10sZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UoKX0pfSxlLnJ1blBsYXlDYWxsYmFja3NfPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheUNhbGxiYWNrc18uc2xpY2UoMCk7dGhpcy5wbGF5Q2FsbGJhY2tzXz1bXSx0aGlzLnBsYXlUZXJtaW5hdGVkUXVldWVfPVtdLGUuZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLnRlY2hDYWxsXyhcInBhdXNlXCIpfSxlLnBhdXNlZD1mdW5jdGlvbigpe3JldHVybiExIT09dGhpcy50ZWNoR2V0XyhcInBhdXNlZFwiKX0sZS5wbGF5ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZWNoR2V0XyhcInBsYXllZFwiKXx8dXQoMCwwKX0sZS5zY3J1YmJpbmc9ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMuc2NydWJiaW5nXzt0aGlzLnNjcnViYmluZ189ISFlLGU/dGhpcy5hZGRDbGFzcyhcInZqcy1zY3J1YmJpbmdcIik6dGhpcy5yZW1vdmVDbGFzcyhcInZqcy1zY3J1YmJpbmdcIil9LGUuY3VycmVudFRpbWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/KGU8MCYmKGU9MCksdm9pZCB0aGlzLnRlY2hDYWxsXyhcInNldEN1cnJlbnRUaW1lXCIsZSkpOih0aGlzLmNhY2hlXy5jdXJyZW50VGltZT10aGlzLnRlY2hHZXRfKFwiY3VycmVudFRpbWVcIil8fDAsdGhpcy5jYWNoZV8uY3VycmVudFRpbWUpfSxlLmR1cmF0aW9uPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHZvaWQgMCE9PXRoaXMuY2FjaGVfLmR1cmF0aW9uP3RoaXMuY2FjaGVfLmR1cmF0aW9uOk5hTjsoZT1wYXJzZUZsb2F0KGUpKTwwJiYoZT0xLzApLGUhPT10aGlzLmNhY2hlXy5kdXJhdGlvbiYmKCh0aGlzLmNhY2hlXy5kdXJhdGlvbj1lKT09PTEvMD8odGhpcy5hZGRDbGFzcyhcInZqcy1saXZlXCIpLHRoaXMub3B0aW9uc18ubGl2ZXVpJiZ0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXImJnRoaXMuYWRkQ2xhc3MoXCJ2anMtbGl2ZXVpXCIpKToodGhpcy5yZW1vdmVDbGFzcyhcInZqcy1saXZlXCIpLHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtbGl2ZXVpXCIpKSxpc05hTihlKXx8dGhpcy50cmlnZ2VyKFwiZHVyYXRpb25jaGFuZ2VcIikpfSxlLnJlbWFpbmluZ1RpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbigpLXRoaXMuY3VycmVudFRpbWUoKX0sZS5yZW1haW5pbmdUaW1lRGlzcGxheT1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuZHVyYXRpb24oKSktTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRUaW1lKCkpfSxlLmJ1ZmZlcmVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50ZWNoR2V0XyhcImJ1ZmZlcmVkXCIpO3JldHVybiBlJiZlLmxlbmd0aHx8KGU9dXQoMCwwKSksZX0sZS5idWZmZXJlZFBlcmNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gaHQodGhpcy5idWZmZXJlZCgpLHRoaXMuZHVyYXRpb24oKSl9LGUuYnVmZmVyZWRFbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1ZmZlcmVkKCksdD10aGlzLmR1cmF0aW9uKCksbj1lLmVuZChlLmxlbmd0aC0xKTtyZXR1cm4gdDxuJiYobj10KSxufSxlLnZvbHVtZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdm9pZCAwIT09ZT8odD1NYXRoLm1heCgwLE1hdGgubWluKDEscGFyc2VGbG9hdChlKSkpLHRoaXMuY2FjaGVfLnZvbHVtZT10LHRoaXMudGVjaENhbGxfKFwic2V0Vm9sdW1lXCIsdCksdm9pZCgwPHQmJnRoaXMubGFzdFZvbHVtZV8odCkpKToodD1wYXJzZUZsb2F0KHRoaXMudGVjaEdldF8oXCJ2b2x1bWVcIikpLGlzTmFOKHQpPzE6dCl9LGUubXV0ZWQ9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy50ZWNoR2V0XyhcIm11dGVkXCIpfHwhMTt0aGlzLnRlY2hDYWxsXyhcInNldE11dGVkXCIsZSl9LGUuZGVmYXVsdE11dGVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lP3RoaXMudGVjaENhbGxfKFwic2V0RGVmYXVsdE11dGVkXCIsZSk6dGhpcy50ZWNoR2V0XyhcImRlZmF1bHRNdXRlZFwiKXx8ITF9LGUubGFzdFZvbHVtZV89ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZXx8MD09PWUpcmV0dXJuIHRoaXMuY2FjaGVfLmxhc3RWb2x1bWU7dGhpcy5jYWNoZV8ubGFzdFZvbHVtZT1lfSxlLnN1cHBvcnRzRnVsbFNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRlY2hHZXRfKFwic3VwcG9ydHNGdWxsU2NyZWVuXCIpfHwhMX0sZS5pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/KHRoaXMuaXNGdWxsc2NyZWVuXz0hIWUsdm9pZCB0aGlzLnRvZ2dsZUZ1bGxzY3JlZW5DbGFzc18oKSk6ISF0aGlzLmlzRnVsbHNjcmVlbl99LGUucmVxdWVzdEZ1bGxzY3JlZW49ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy5pc0Z1bGxzY3JlZW4oITApLHRoaXMuZnNBcGlfLnJlcXVlc3RGdWxsc2NyZWVuPyhsZShkLHRoaXMuZnNBcGlfLmZ1bGxzY3JlZW5jaGFuZ2UsdGhpcy5ib3VuZERvY3VtZW50RnVsbHNjcmVlbkNoYW5nZV8pLHRoaXMuZnNBcGlfLnByZWZpeGVkfHwodD10aGlzLm9wdGlvbnNfLmZ1bGxzY3JlZW4mJnRoaXMub3B0aW9uc18uZnVsbHNjcmVlbi5vcHRpb25zfHx7fSx2b2lkIDAhPT1lJiYodD1lKSksa3QodGhpcy5lbF9bdGhpcy5mc0FwaV8ucmVxdWVzdEZ1bGxzY3JlZW5dKHQpKSk6dGhpcy50ZWNoXy5zdXBwb3J0c0Z1bGxTY3JlZW4oKT90aGlzLnRlY2hDYWxsXyhcImVudGVyRnVsbFNjcmVlblwiKToodGhpcy5lbnRlckZ1bGxXaW5kb3coKSx0aGlzLnRyaWdnZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIpKX0sZS5leGl0RnVsbHNjcmVlbj1mdW5jdGlvbigpe3RoaXMuaXNGdWxsc2NyZWVuKCExKSx0aGlzLmZzQXBpXy5yZXF1ZXN0RnVsbHNjcmVlbj9rdChkW3RoaXMuZnNBcGlfLmV4aXRGdWxsc2NyZWVuXSgpKTp0aGlzLnRlY2hfLnN1cHBvcnRzRnVsbFNjcmVlbigpP3RoaXMudGVjaENhbGxfKFwiZXhpdEZ1bGxTY3JlZW5cIik6KHRoaXMuZXhpdEZ1bGxXaW5kb3coKSx0aGlzLnRyaWdnZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIpKX0sZS5lbnRlckZ1bGxXaW5kb3c9ZnVuY3Rpb24oKXt0aGlzLmlzRnVsbFdpbmRvdz0hMCx0aGlzLmRvY09yaWdPdmVyZmxvdz1kLmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyxsZShkLFwia2V5ZG93blwiLHRoaXMuYm91bmRGdWxsV2luZG93T25Fc2NLZXlfKSxkLmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLEUoZC5ib2R5LFwidmpzLWZ1bGwtd2luZG93XCIpLHRoaXMudHJpZ2dlcihcImVudGVyRnVsbFdpbmRvd1wiKX0sZS5mdWxsV2luZG93T25Fc2NLZXk9ZnVuY3Rpb24oZSl7UHQuaXNFdmVudEtleShlLFwiRXNjXCIpJiYoITA9PT10aGlzLmlzRnVsbHNjcmVlbigpP3RoaXMuZXhpdEZ1bGxzY3JlZW4oKTp0aGlzLmV4aXRGdWxsV2luZG93KCkpfSxlLmV4aXRGdWxsV2luZG93PWZ1bmN0aW9uKCl7dGhpcy5pc0Z1bGxXaW5kb3c9ITEsY2UoZCxcImtleWRvd25cIix0aGlzLmJvdW5kRnVsbFdpbmRvd09uRXNjS2V5XyksZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9dGhpcy5kb2NPcmlnT3ZlcmZsb3csUyhkLmJvZHksXCJ2anMtZnVsbC13aW5kb3dcIiksdGhpcy50cmlnZ2VyKFwiZXhpdEZ1bGxXaW5kb3dcIil9LGUuaXNJblBpY3R1cmVJblBpY3R1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/KHRoaXMuaXNJblBpY3R1cmVJblBpY3R1cmVfPSEhZSx2b2lkIHRoaXMudG9nZ2xlUGljdHVyZUluUGljdHVyZUNsYXNzXygpKTohIXRoaXMuaXNJblBpY3R1cmVJblBpY3R1cmVffSxlLnJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlPWZ1bmN0aW9uKCl7aWYoXCJwaWN0dXJlSW5QaWN0dXJlRW5hYmxlZFwiaW4gZClyZXR1cm4gdGhpcy50ZWNoR2V0XyhcInJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlXCIpfSxlLmV4aXRQaWN0dXJlSW5QaWN0dXJlPWZ1bmN0aW9uKCl7aWYoXCJwaWN0dXJlSW5QaWN0dXJlRW5hYmxlZFwiaW4gZClyZXR1cm4gZC5leGl0UGljdHVyZUluUGljdHVyZSgpfSxlLmhhbmRsZUtleURvd249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zXy51c2VyQWN0aW9ucztpZih0JiZ0LmhvdGtleXMpeyFmdW5jdGlvbihlKXt2YXIgdD1lLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihlLmlzQ29udGVudEVkaXRhYmxlKXJldHVybiEwO2lmKFwiaW5wdXRcIj09PXQpcmV0dXJuLTE9PT1bXCJidXR0b25cIixcImNoZWNrYm94XCIsXCJoaWRkZW5cIixcInJhZGlvXCIsXCJyZXNldFwiLFwic3VibWl0XCJdLmluZGV4T2YoZS50eXBlKTtyZXR1cm4tMSE9PVtcInRleHRhcmVhXCJdLmluZGV4T2YodCl9KHRoaXMuZWxfLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhvdGtleXM/dC5ob3RrZXlzLmNhbGwodGhpcyxlKTp0aGlzLmhhbmRsZUhvdGtleXMoZSkpfX0sZS5oYW5kbGVIb3RrZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9uc18udXNlckFjdGlvbnM/dGhpcy5vcHRpb25zXy51c2VyQWN0aW9ucy5ob3RrZXlzOnt9LG49dC5mdWxsc2NyZWVuS2V5LHI9dm9pZCAwPT09bj9mdW5jdGlvbihlKXtyZXR1cm4gUHQuaXNFdmVudEtleShlLFwiZlwiKX06bixpPXQubXV0ZUtleSxvPXZvaWQgMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmlzRXZlbnRLZXkoZSxcIm1cIil9Omkscz10LnBsYXlQYXVzZUtleSxhPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmlzRXZlbnRLZXkoZSxcImtcIil8fFB0LmlzRXZlbnRLZXkoZSxcIlNwYWNlXCIpfTpzO2lmKHIuY2FsbCh0aGlzLGUpKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbD1PZS5nZXRDb21wb25lbnQoXCJGdWxsc2NyZWVuVG9nZ2xlXCIpOyExIT09ZFt0aGlzLmZzQXBpXy5mdWxsc2NyZWVuRW5hYmxlZF0mJmwucHJvdG90eXBlLmhhbmRsZUNsaWNrLmNhbGwodGhpcyxlKX1lbHNlIGlmKG8uY2FsbCh0aGlzLGUpKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxPZS5nZXRDb21wb25lbnQoXCJNdXRlVG9nZ2xlXCIpLnByb3RvdHlwZS5oYW5kbGVDbGljay5jYWxsKHRoaXMsZSl9ZWxzZSBpZihhLmNhbGwodGhpcyxlKSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksT2UuZ2V0Q29tcG9uZW50KFwiUGxheVRvZ2dsZVwiKS5wcm90b3R5cGUuaGFuZGxlQ2xpY2suY2FsbCh0aGlzLGUpfX0sZS5jYW5QbGF5VHlwZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9dGhpcy5vcHRpb25zXy50ZWNoT3JkZXI7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sbz1qci5nZXRUZWNoKGkpO2lmKG89b3x8T2UuZ2V0Q29tcG9uZW50KGkpKXtpZihvLmlzU3VwcG9ydGVkKCkmJih0PW8uY2FuUGxheVR5cGUoZSkpKXJldHVybiB0fWVsc2UgZi5lcnJvcignVGhlIFwiJytpKydcIiB0ZWNoIGlzIHVuZGVmaW5lZC4gU2tpcHBlZCBicm93c2VyIHN1cHBvcnQgY2hlY2sgZm9yIHRoYXQgdGVjaC4nKX1yZXR1cm5cIlwifSxlLnNlbGVjdFNvdXJjZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNvbWUoZnVuY3Rpb24oZSl7aWYoaT1yKHQsZSkpcmV0dXJuITB9KX0pLGl9ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWVbMF07aWYoZVsxXS5jYW5QbGF5U291cmNlKHQsaS5vcHRpb25zX1tuLnRvTG93ZXJDYXNlKCldKSlyZXR1cm57c291cmNlOnQsdGVjaDpufX12YXIgcixpPXRoaXMsbz10aGlzLm9wdGlvbnNfLnRlY2hPcmRlci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsanIuZ2V0VGVjaChlKV19KS5maWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxuPWVbMV07cmV0dXJuIG4/bi5pc1N1cHBvcnRlZCgpOihmLmVycm9yKCdUaGUgXCInK3QrJ1wiIHRlY2ggaXMgdW5kZWZpbmVkLiBTa2lwcGVkIGJyb3dzZXIgc3VwcG9ydCBjaGVjayBmb3IgdGhhdCB0ZWNoLicpLCExKX0pO3JldHVybih0aGlzLm9wdGlvbnNfLnNvdXJjZU9yZGVyP3QoZSxvLChyPW4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gcih0LGUpfSkpOnQobyxlLG4pKXx8ITF9LGUuc3JjPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMuY2FjaGVfLnNyY3x8XCJcIjt2YXIgcj1mdW5jdGlvbiB0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPVtdO2UuZm9yRWFjaChmdW5jdGlvbihlKXtlPXQoZSksQXJyYXkuaXNBcnJheShlKT9uPW4uY29uY2F0KGUpOnMoZSkmJm4ucHVzaChlKX0pLGU9bn1lbHNlIGU9XCJzdHJpbmdcIj09dHlwZW9mIGUmJmUudHJpbSgpP1tWcih7c3JjOmV9KV06cyhlKSYmXCJzdHJpbmdcIj09dHlwZW9mIGUuc3JjJiZlLnNyYyYmZS5zcmMudHJpbSgpP1tWcihlKV06W107cmV0dXJuIGV9KGUpO3IubGVuZ3RoPyh0aGlzLmNoYW5naW5nU3JjXz0hMCx0aGlzLmNhY2hlXy5zb3VyY2VzPXIsdGhpcy51cGRhdGVTb3VyY2VDYWNoZXNfKHJbMF0pLERyKHRoaXMsclswXSxmdW5jdGlvbihlLHQpe2lmKG4ubWlkZGxld2FyZV89dCxuLmNhY2hlXy5zb3VyY2VzPXIsbi51cGRhdGVTb3VyY2VDYWNoZXNfKGUpLG4uc3JjXyhlKSlyZXR1cm4gMTxyLmxlbmd0aD9uLnNyYyhyLnNsaWNlKDEpKToobi5jaGFuZ2luZ1NyY189ITEsbi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lcnJvcih7Y29kZTo0LG1lc3NhZ2U6dGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLm5vdFN1cHBvcnRlZE1lc3NhZ2UpfSl9LDApLHZvaWQgbi50cmlnZ2VyUmVhZHkoKSk7IWZ1bmN0aW9uKGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldFRlY2gmJmUuc2V0VGVjaCh0KX0pfSh0LG4udGVjaF8pfSkpOnRoaXMuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZXJyb3Ioe2NvZGU6NCxtZXNzYWdlOnRoaXMubG9jYWxpemUodGhpcy5vcHRpb25zXy5ub3RTdXBwb3J0ZWRNZXNzYWdlKX0pfSwwKX0sZS5zcmNfPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnNlbGVjdFNvdXJjZShbZV0pO3JldHVybiFufHwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQWUoZSk9PT1BZSh0KX0obi50ZWNoLHRoaXMudGVjaE5hbWVfKT90aGlzLnJlYWR5KGZ1bmN0aW9uKCl7dGhpcy50ZWNoXy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJzZXRTb3VyY2VcIik/dGhpcy50ZWNoQ2FsbF8oXCJzZXRTb3VyY2VcIixlKTp0aGlzLnRlY2hDYWxsXyhcInNyY1wiLGUuc3JjKSx0aGlzLmNoYW5naW5nU3JjXz0hMX0sITApOih0aGlzLmNoYW5naW5nU3JjXz0hMCx0aGlzLmxvYWRUZWNoXyhuLnRlY2gsbi5zb3VyY2UpLHRoaXMudGVjaF8ucmVhZHkoZnVuY3Rpb24oKXt0LmNoYW5naW5nU3JjXz0hMX0pKSwhMSl9LGUubG9hZD1mdW5jdGlvbigpe3RoaXMudGVjaENhbGxfKFwibG9hZFwiKX0sZS5yZXNldD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLm9wdGlvbnNfLlByb21pc2V8fGguUHJvbWlzZTt0aGlzLnBhdXNlZCgpfHwhdD90aGlzLmRvUmVzZXRfKCk6a3QodGhpcy5wbGF5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBlLmRvUmVzZXRfKCl9KSl9LGUuZG9SZXNldF89ZnVuY3Rpb24oKXt0aGlzLnRlY2hfJiZ0aGlzLnRlY2hfLmNsZWFyVHJhY2tzKFwidGV4dFwiKSx0aGlzLnJlc2V0Q2FjaGVfKCksdGhpcy5wb3N0ZXIoXCJcIiksdGhpcy5sb2FkVGVjaF8odGhpcy5vcHRpb25zXy50ZWNoT3JkZXJbMF0sbnVsbCksdGhpcy50ZWNoQ2FsbF8oXCJyZXNldFwiKSx0aGlzLnJlc2V0Q29udHJvbEJhclVJXygpLEVlKHRoaXMpJiZ0aGlzLnRyaWdnZXIoXCJwbGF5ZXJyZXNldFwiKX0sZS5yZXNldENvbnRyb2xCYXJVSV89ZnVuY3Rpb24oKXt0aGlzLnJlc2V0UHJvZ3Jlc3NCYXJfKCksdGhpcy5yZXNldFBsYXliYWNrUmF0ZV8oKSx0aGlzLnJlc2V0Vm9sdW1lQmFyXygpfSxlLnJlc2V0UHJvZ3Jlc3NCYXJfPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50VGltZSgwKTt2YXIgZT10aGlzLmNvbnRyb2xCYXIsdD1lLmR1cmF0aW9uRGlzcGxheSxuPWUucmVtYWluaW5nVGltZURpc3BsYXk7dCYmdC51cGRhdGVDb250ZW50KCksbiYmbi51cGRhdGVDb250ZW50KCl9LGUucmVzZXRQbGF5YmFja1JhdGVfPWZ1bmN0aW9uKCl7dGhpcy5wbGF5YmFja1JhdGUodGhpcy5kZWZhdWx0UGxheWJhY2tSYXRlKCkpLHRoaXMuaGFuZGxlVGVjaFJhdGVDaGFuZ2VfKCl9LGUucmVzZXRWb2x1bWVCYXJfPWZ1bmN0aW9uKCl7dGhpcy52b2x1bWUoMSksdGhpcy50cmlnZ2VyKFwidm9sdW1lY2hhbmdlXCIpfSxlLmN1cnJlbnRTb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50U291cmNlKCksdD1bXTtyZXR1cm4gMCE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmdC5wdXNoKGUpLHRoaXMuY2FjaGVfLnNvdXJjZXN8fHR9LGUuY3VycmVudFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhY2hlXy5zb3VyY2V8fHt9fSxlLmN1cnJlbnRTcmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U291cmNlKCkmJnRoaXMuY3VycmVudFNvdXJjZSgpLnNyY3x8XCJcIn0sZS5jdXJyZW50VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTb3VyY2UoKSYmdGhpcy5jdXJyZW50U291cmNlKCkudHlwZXx8XCJcIn0sZS5wcmVsb2FkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lPyh0aGlzLnRlY2hDYWxsXyhcInNldFByZWxvYWRcIixlKSx2b2lkKHRoaXMub3B0aW9uc18ucHJlbG9hZD1lKSk6dGhpcy50ZWNoR2V0XyhcInByZWxvYWRcIil9LGUuYXV0b3BsYXk9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy5vcHRpb25zXy5hdXRvcGxheXx8ITE7dmFyIHQ7XCJzdHJpbmdcIj09dHlwZW9mIGUmJi8oYW55fHBsYXl8bXV0ZWQpLy50ZXN0KGUpPyh0aGlzLm9wdGlvbnNfLmF1dG9wbGF5PWUsdGhpcy5tYW51YWxBdXRvcGxheV8oZSksdD0hMSk6dGhpcy5vcHRpb25zXy5hdXRvcGxheT0hIWUsdD1cInVuZGVmaW5lZFwiPT10eXBlb2YgdD90aGlzLm9wdGlvbnNfLmF1dG9wbGF5OnQsdGhpcy50ZWNoXyYmdGhpcy50ZWNoQ2FsbF8oXCJzZXRBdXRvcGxheVwiLHQpfSxlLnBsYXlzaW5saW5lPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lPyh0aGlzLnRlY2hDYWxsXyhcInNldFBsYXlzaW5saW5lXCIsZSksdGhpcy5vcHRpb25zXy5wbGF5c2lubGluZT1lLHRoaXMpOnRoaXMudGVjaEdldF8oXCJwbGF5c2lubGluZVwiKX0sZS5sb29wPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lPyh0aGlzLnRlY2hDYWxsXyhcInNldExvb3BcIixlKSx2b2lkKHRoaXMub3B0aW9uc18ubG9vcD1lKSk6dGhpcy50ZWNoR2V0XyhcImxvb3BcIil9LGUucG9zdGVyPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMucG9zdGVyXzsoZT1lfHxcIlwiKSE9PXRoaXMucG9zdGVyXyYmKHRoaXMucG9zdGVyXz1lLHRoaXMudGVjaENhbGxfKFwic2V0UG9zdGVyXCIsZSksdGhpcy5pc1Bvc3RlckZyb21UZWNoXz0hMSx0aGlzLnRyaWdnZXIoXCJwb3N0ZXJjaGFuZ2VcIikpfSxlLmhhbmRsZVRlY2hQb3N0ZXJDaGFuZ2VfPWZ1bmN0aW9uKCl7aWYoKCF0aGlzLnBvc3Rlcl98fHRoaXMub3B0aW9uc18udGVjaENhbk92ZXJyaWRlUG9zdGVyKSYmdGhpcy50ZWNoXyYmdGhpcy50ZWNoXy5wb3N0ZXIpe3ZhciBlPXRoaXMudGVjaF8ucG9zdGVyKCl8fFwiXCI7ZSE9PXRoaXMucG9zdGVyXyYmKHRoaXMucG9zdGVyXz1lLHRoaXMuaXNQb3N0ZXJGcm9tVGVjaF89ITAsdGhpcy50cmlnZ2VyKFwicG9zdGVyY2hhbmdlXCIpKX19LGUuY29udHJvbHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4hIXRoaXMuY29udHJvbHNfO2U9ISFlLHRoaXMuY29udHJvbHNfIT09ZSYmKHRoaXMuY29udHJvbHNfPWUsdGhpcy51c2luZ05hdGl2ZUNvbnRyb2xzKCkmJnRoaXMudGVjaENhbGxfKFwic2V0Q29udHJvbHNcIixlKSx0aGlzLmNvbnRyb2xzXz8odGhpcy5yZW1vdmVDbGFzcyhcInZqcy1jb250cm9scy1kaXNhYmxlZFwiKSx0aGlzLmFkZENsYXNzKFwidmpzLWNvbnRyb2xzLWVuYWJsZWRcIiksdGhpcy50cmlnZ2VyKFwiY29udHJvbHNlbmFibGVkXCIpLHRoaXMudXNpbmdOYXRpdmVDb250cm9scygpfHx0aGlzLmFkZFRlY2hDb250cm9sc0xpc3RlbmVyc18oKSk6KHRoaXMucmVtb3ZlQ2xhc3MoXCJ2anMtY29udHJvbHMtZW5hYmxlZFwiKSx0aGlzLmFkZENsYXNzKFwidmpzLWNvbnRyb2xzLWRpc2FibGVkXCIpLHRoaXMudHJpZ2dlcihcImNvbnRyb2xzZGlzYWJsZWRcIiksdGhpcy51c2luZ05hdGl2ZUNvbnRyb2xzKCl8fHRoaXMucmVtb3ZlVGVjaENvbnRyb2xzTGlzdGVuZXJzXygpKSl9LGUudXNpbmdOYXRpdmVDb250cm9scz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiEhdGhpcy51c2luZ05hdGl2ZUNvbnRyb2xzXztlPSEhZSx0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHNfIT09ZSYmKHRoaXMudXNpbmdOYXRpdmVDb250cm9sc189ZSx0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHNfPyh0aGlzLmFkZENsYXNzKFwidmpzLXVzaW5nLW5hdGl2ZS1jb250cm9sc1wiKSx0aGlzLnRyaWdnZXIoXCJ1c2luZ25hdGl2ZWNvbnRyb2xzXCIpKToodGhpcy5yZW1vdmVDbGFzcyhcInZqcy11c2luZy1uYXRpdmUtY29udHJvbHNcIiksdGhpcy50cmlnZ2VyKFwidXNpbmdjdXN0b21jb250cm9sc1wiKSkpfSxlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuZXJyb3JffHxudWxsO2lmKHRoaXMub3B0aW9uc18uc3VwcHJlc3NOb3RTdXBwb3J0ZWRFcnJvciYmZSYmZS5tZXNzYWdlJiZlLm1lc3NhZ2U9PT10aGlzLmxvY2FsaXplKHRoaXMub3B0aW9uc18ubm90U3VwcG9ydGVkTWVzc2FnZSkpe2Z1bmN0aW9uIHQoKXt0aGlzLmVycm9yKGUpfXJldHVybiB0aGlzLm9wdGlvbnNfLnN1cHByZXNzTm90U3VwcG9ydGVkRXJyb3I9ITEsdGhpcy5hbnkoW1wiY2xpY2tcIixcInRvdWNoc3RhcnRcIl0sdCksdm9pZCB0aGlzLm9uZShcImxvYWRzdGFydFwiLGZ1bmN0aW9uKCl7dGhpcy5vZmYoW1wiY2xpY2tcIixcInRvdWNoc3RhcnRcIl0sdCl9KX1pZihudWxsPT09ZSlyZXR1cm4gdGhpcy5lcnJvcl89ZSx0aGlzLnJlbW92ZUNsYXNzKFwidmpzLWVycm9yXCIpLHZvaWQodGhpcy5lcnJvckRpc3BsYXkmJnRoaXMuZXJyb3JEaXNwbGF5LmNsb3NlKCkpO3RoaXMuZXJyb3JfPW5ldyBtdChlKSx0aGlzLmFkZENsYXNzKFwidmpzLWVycm9yXCIpLGYuZXJyb3IoXCIoQ09ERTpcIit0aGlzLmVycm9yXy5jb2RlK1wiIFwiK210LmVycm9yVHlwZXNbdGhpcy5lcnJvcl8uY29kZV0rXCIpXCIsdGhpcy5lcnJvcl8ubWVzc2FnZSx0aGlzLmVycm9yXyksdGhpcy50cmlnZ2VyKFwiZXJyb3JcIil9LGUucmVwb3J0VXNlckFjdGl2aXR5PWZ1bmN0aW9uKGUpe3RoaXMudXNlckFjdGl2aXR5Xz0hMH0sZS51c2VyQWN0aXZlPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMudXNlckFjdGl2ZV87aWYoKGU9ISFlKSE9PXRoaXMudXNlckFjdGl2ZV8pe2lmKHRoaXMudXNlckFjdGl2ZV89ZSx0aGlzLnVzZXJBY3RpdmVfKXJldHVybiB0aGlzLnVzZXJBY3Rpdml0eV89ITAsdGhpcy5yZW1vdmVDbGFzcyhcInZqcy11c2VyLWluYWN0aXZlXCIpLHRoaXMuYWRkQ2xhc3MoXCJ2anMtdXNlci1hY3RpdmVcIiksdm9pZCB0aGlzLnRyaWdnZXIoXCJ1c2VyYWN0aXZlXCIpO3RoaXMudGVjaF8mJnRoaXMudGVjaF8ub25lKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLnVzZXJBY3Rpdml0eV89ITEsdGhpcy5yZW1vdmVDbGFzcyhcInZqcy11c2VyLWFjdGl2ZVwiKSx0aGlzLmFkZENsYXNzKFwidmpzLXVzZXItaW5hY3RpdmVcIiksdGhpcy50cmlnZ2VyKFwidXNlcmluYWN0aXZlXCIpfX0sZS5saXN0ZW5Gb3JVc2VyQWN0aXZpdHlfPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGk9cGUodGhpcyx0aGlzLnJlcG9ydFVzZXJBY3Rpdml0eSk7dGhpcy5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7aSgpLHRoaXMuY2xlYXJJbnRlcnZhbCh0KSx0PXRoaXMuc2V0SW50ZXJ2YWwoaSwyNTApfSksdGhpcy5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGUpe2Uuc2NyZWVuWD09PW4mJmUuc2NyZWVuWT09PXJ8fChuPWUuc2NyZWVuWCxyPWUuc2NyZWVuWSxpKCkpfSksdGhpcy5vbihcIm1vdXNldXBcIixmdW5jdGlvbihlKXtpKCksdGhpcy5jbGVhckludGVydmFsKHQpfSk7dmFyIG8sZT10aGlzLmdldENoaWxkKFwiY29udHJvbEJhclwiKTshZXx8cWV8fFhlfHwoZS5vbihcIm1vdXNlZW50ZXJcIixmdW5jdGlvbihlKXt0aGlzLnBsYXllcigpLmNhY2hlXy5pbmFjdGl2aXR5VGltZW91dD10aGlzLnBsYXllcigpLm9wdGlvbnNfLmluYWN0aXZpdHlUaW1lb3V0LHRoaXMucGxheWVyKCkub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQ9MH0pLGUub24oXCJtb3VzZWxlYXZlXCIsZnVuY3Rpb24oZSl7dGhpcy5wbGF5ZXIoKS5vcHRpb25zXy5pbmFjdGl2aXR5VGltZW91dD10aGlzLnBsYXllcigpLmNhY2hlXy5pbmFjdGl2aXR5VGltZW91dH0pKSx0aGlzLm9uKFwia2V5ZG93blwiLGkpLHRoaXMub24oXCJrZXl1cFwiLGkpLHRoaXMuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZih0aGlzLnVzZXJBY3Rpdml0eV8pe3RoaXMudXNlckFjdGl2aXR5Xz0hMSx0aGlzLnVzZXJBY3RpdmUoITApLHRoaXMuY2xlYXJUaW1lb3V0KG8pO3ZhciBlPXRoaXMub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQ7ZTw9MHx8KG89dGhpcy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy51c2VyQWN0aXZpdHlffHx0aGlzLnVzZXJBY3RpdmUoITEpfSxlKSl9fSwyNTApfSxlLnBsYXliYWNrUmF0ZT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzLnRlY2hfJiZ0aGlzLnRlY2hfLmZlYXR1cmVzUGxheWJhY2tSYXRlP3RoaXMuY2FjaGVfLmxhc3RQbGF5YmFja1JhdGV8fHRoaXMudGVjaEdldF8oXCJwbGF5YmFja1JhdGVcIik6MTt0aGlzLnRlY2hDYWxsXyhcInNldFBsYXliYWNrUmF0ZVwiLGUpfSxlLmRlZmF1bHRQbGF5YmFja1JhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/dGhpcy50ZWNoQ2FsbF8oXCJzZXREZWZhdWx0UGxheWJhY2tSYXRlXCIsZSk6dGhpcy50ZWNoXyYmdGhpcy50ZWNoXy5mZWF0dXJlc1BsYXliYWNrUmF0ZT90aGlzLnRlY2hHZXRfKFwiZGVmYXVsdFBsYXliYWNrUmF0ZVwiKToxfSxlLmlzQXVkaW89ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4hIXRoaXMuaXNBdWRpb187dGhpcy5pc0F1ZGlvXz0hIWV9LGUuYWRkVGV4dFRyYWNrPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLnRlY2hfKXJldHVybiB0aGlzLnRlY2hfLmFkZFRleHRUcmFjayhlLHQsbil9LGUuYWRkUmVtb3RlVGV4dFRyYWNrPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy50ZWNoXylyZXR1cm4gdGhpcy50ZWNoXy5hZGRSZW1vdGVUZXh0VHJhY2soZSx0KX0sZS5yZW1vdmVSZW1vdGVUZXh0VHJhY2s9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PWUudHJhY2s7aWYodD10fHxlLHRoaXMudGVjaF8pcmV0dXJuIHRoaXMudGVjaF8ucmVtb3ZlUmVtb3RlVGV4dFRyYWNrKHQpfSxlLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVjaEdldF8oXCJnZXRWaWRlb1BsYXliYWNrUXVhbGl0eVwiKX0sZS52aWRlb1dpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVjaF8mJnRoaXMudGVjaF8udmlkZW9XaWR0aCYmdGhpcy50ZWNoXy52aWRlb1dpZHRoKCl8fDB9LGUudmlkZW9IZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZWNoXyYmdGhpcy50ZWNoXy52aWRlb0hlaWdodCYmdGhpcy50ZWNoXy52aWRlb0hlaWdodCgpfHwwfSxlLmxhbmd1YWdlPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMubGFuZ3VhZ2VfO3RoaXMubGFuZ3VhZ2VfPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpfSxlLmxhbmd1YWdlcz1mdW5jdGlvbigpe3JldHVybiBJZShjLnByb3RvdHlwZS5vcHRpb25zXy5sYW5ndWFnZXMsdGhpcy5sYW5ndWFnZXNfKX0sZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT1JZSh0aGlzLm9wdGlvbnNfKSx0PWUudHJhY2tzO2UudHJhY2tzPVtdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dOyhyPUllKHIpKS5wbGF5ZXI9dm9pZCAwLGUudHJhY2tzW25dPXJ9cmV0dXJuIGV9LGUuY3JlYXRlTW9kYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzOyh0PXR8fHt9KS5jb250ZW50PWV8fFwiXCI7dmFyIHI9bmV3IGp0KHRoaXMsdCk7cmV0dXJuIHRoaXMuYWRkQ2hpbGQociksci5vbihcImRpc3Bvc2VcIixmdW5jdGlvbigpe24ucmVtb3ZlQ2hpbGQocil9KSxyLm9wZW4oKSxyfSxlLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50Xz1mdW5jdGlvbigpe2lmKHRoaXMucmVzcG9uc2l2ZSgpKWZvcih2YXIgZT10aGlzLmN1cnJlbnRCcmVha3BvaW50KCksdD10aGlzLmN1cnJlbnRXaWR0aCgpLG49MDtuPHdvLmxlbmd0aDtuKyspe3ZhciByPXdvW25dO2lmKHQ8PXRoaXMuYnJlYWtwb2ludHNfW3JdKXtpZihlPT09cilyZXR1cm47ZSYmdGhpcy5yZW1vdmVDbGFzcyhQb1tlXSksdGhpcy5hZGRDbGFzcyhQb1tyXSksdGhpcy5icmVha3BvaW50Xz1yO2JyZWFrfX19LGUucmVtb3ZlQ3VycmVudEJyZWFrcG9pbnRfPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50QnJlYWtwb2ludENsYXNzKCk7dGhpcy5icmVha3BvaW50Xz1cIlwiLGUmJnRoaXMucmVtb3ZlQ2xhc3MoZSl9LGUuYnJlYWtwb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV8fCh0aGlzLmJyZWFrcG9pbnRfPVwiXCIsdGhpcy5icmVha3BvaW50c189eSh7fSx4byxlKSx0aGlzLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50XygpKSx5KHRoaXMuYnJlYWtwb2ludHNfKX0sZS5yZXNwb25zaXZlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMucmVzcG9uc2l2ZV86KGU9Qm9vbGVhbihlKSkhPT10aGlzLnJlc3BvbnNpdmVfPygodGhpcy5yZXNwb25zaXZlXz1lKT8odGhpcy5vbihcInBsYXllcnJlc2l6ZVwiLHRoaXMudXBkYXRlQ3VycmVudEJyZWFrcG9pbnRfKSx0aGlzLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50XygpKToodGhpcy5vZmYoXCJwbGF5ZXJyZXNpemVcIix0aGlzLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50XyksdGhpcy5yZW1vdmVDdXJyZW50QnJlYWtwb2ludF8oKSksZSk6dm9pZCAwfSxlLmN1cnJlbnRCcmVha3BvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludF99LGUuY3VycmVudEJyZWFrcG9pbnRDbGFzcz1mdW5jdGlvbigpe3JldHVybiBQb1t0aGlzLmJyZWFrcG9pbnRfXXx8XCJcIn0sZS5sb2FkTWVkaWE9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXt0aGlzLnJlc2V0KCksdGhpcy5jYWNoZV8ubWVkaWE9SWUoZSk7dmFyIHI9dGhpcy5jYWNoZV8ubWVkaWEsaT1yLmFydHdvcmssbz1yLnBvc3RlcixzPXIuc3JjLGE9ci50ZXh0VHJhY2tzOyFpJiZvJiYodGhpcy5jYWNoZV8ubWVkaWEuYXJ0d29yaz1be3NyYzpvLHR5cGU6JHIobyl9XSkscyYmdGhpcy5zcmMocyksbyYmdGhpcy5wb3N0ZXIobyksQXJyYXkuaXNBcnJheShhKSYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZFJlbW90ZVRleHRUcmFjayhlLCExKX0pLHRoaXMucmVhZHkodCl9fSxlLmdldE1lZGlhPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZV8ubWVkaWEpcmV0dXJuIEllKHRoaXMuY2FjaGVfLm1lZGlhKTt2YXIgZT10aGlzLnBvc3RlcigpLHQ9e3NyYzp0aGlzLmN1cnJlbnRTb3VyY2VzKCksdGV4dFRyYWNrczpBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodGhpcy5yZW1vdGVUZXh0VHJhY2tzKCksZnVuY3Rpb24oZSl7cmV0dXJue2tpbmQ6ZS5raW5kLGxhYmVsOmUubGFiZWwsbGFuZ3VhZ2U6ZS5sYW5ndWFnZSxzcmM6ZS5zcmN9fSl9O3JldHVybiBlJiYodC5wb3N0ZXI9ZSx0LmFydHdvcms9W3tzcmM6dC5wb3N0ZXIsdHlwZTokcih0LnBvc3Rlcil9XSksdH0sYy5nZXRUYWdTZXR0aW5ncz1mdW5jdGlvbihlKXt2YXIgdD17c291cmNlczpbXSx0cmFja3M6W119LG49eChlKSxyPW5bXCJkYXRhLXNldHVwXCJdO2lmKEMoZSxcInZqcy1maWxsXCIpJiYobi5maWxsPSEwKSxDKGUsXCJ2anMtZmx1aWRcIikmJihuLmZsdWlkPSEwKSxudWxsIT09cil7dmFyIGk9YnQocnx8XCJ7fVwiKSxvPWlbMF0scz1pWzFdO28mJmYuZXJyb3IobykseShuLHMpfWlmKHkodCxuKSxlLmhhc0NoaWxkTm9kZXMoKSlmb3IodmFyIGE9ZS5jaGlsZE5vZGVzLGw9MCxjPWEubGVuZ3RoO2w8YztsKyspe3ZhciB1PWFbbF0saD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XCJzb3VyY2VcIj09PWg/dC5zb3VyY2VzLnB1c2goeCh1KSk6XCJ0cmFja1wiPT09aCYmdC50cmFja3MucHVzaCh4KHUpKX1yZXR1cm4gdH0sZS5mbGV4Tm90U3VwcG9ydGVkXz1mdW5jdGlvbigpe3ZhciBlPWQuY3JlYXRlRWxlbWVudChcImlcIik7cmV0dXJuIShcImZsZXhCYXNpc1wiaW4gZS5zdHlsZXx8XCJ3ZWJraXRGbGV4QmFzaXNcImluIGUuc3R5bGV8fFwibW96RmxleEJhc2lzXCJpbiBlLnN0eWxlfHxcIm1zRmxleEJhc2lzXCJpbiBlLnN0eWxlfHxcIm1zRmxleE9yZGVyXCJpbiBlLnN0eWxlKX0sY30oT2UpO1ByLm5hbWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9UHJbZV07am8ucHJvdG90eXBlW3QuZ2V0dGVyTmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZWNoXz90aGlzLnRlY2hfW3QuZ2V0dGVyTmFtZV0oKToodGhpc1t0LnByaXZhdGVOYW1lXT10aGlzW3QucHJpdmF0ZU5hbWVdfHxuZXcgdC5MaXN0Q2xhc3MsdGhpc1t0LnByaXZhdGVOYW1lXSl9fSksam8ucGxheWVycz17fTt2YXIgQW89aC5uYXZpZ2F0b3I7am8ucHJvdG90eXBlLm9wdGlvbnNfPXt0ZWNoT3JkZXI6anIuZGVmYXVsdFRlY2hPcmRlcl8saHRtbDU6e30sZmxhc2g6e30saW5hY3Rpdml0eVRpbWVvdXQ6MmUzLHBsYXliYWNrUmF0ZXM6W10sbGl2ZXVpOiExLGNoaWxkcmVuOltcIm1lZGlhTG9hZGVyXCIsXCJwb3N0ZXJJbWFnZVwiLFwidGV4dFRyYWNrRGlzcGxheVwiLFwibG9hZGluZ1NwaW5uZXJcIixcImJpZ1BsYXlCdXR0b25cIixcImxpdmVUcmFja2VyXCIsXCJjb250cm9sQmFyXCIsXCJlcnJvckRpc3BsYXlcIixcInRleHRUcmFja1NldHRpbmdzXCIsXCJyZXNpemVNYW5hZ2VyXCJdLGxhbmd1YWdlOkFvJiYoQW8ubGFuZ3VhZ2VzJiZBby5sYW5ndWFnZXNbMF18fEFvLnVzZXJMYW5ndWFnZXx8QW8ubGFuZ3VhZ2UpfHxcImVuXCIsbGFuZ3VhZ2VzOnt9LG5vdFN1cHBvcnRlZE1lc3NhZ2U6XCJObyBjb21wYXRpYmxlIHNvdXJjZSB3YXMgZm91bmQgZm9yIHRoaXMgbWVkaWEuXCIsZnVsbHNjcmVlbjp7b3B0aW9uczp7bmF2aWdhdGlvblVJOlwiaGlkZVwifX0sYnJlYWtwb2ludHM6e30scmVzcG9uc2l2ZTohMX0sW1wiZW5kZWRcIixcInNlZWtpbmdcIixcInNlZWthYmxlXCIsXCJuZXR3b3JrU3RhdGVcIixcInJlYWR5U3RhdGVcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtqby5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZWNoR2V0XyhlKX19KSxFby5mb3JFYWNoKGZ1bmN0aW9uKGUpe2pvLnByb3RvdHlwZVtcImhhbmRsZVRlY2hcIitBZShlKStcIl9cIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmlnZ2VyKGUpfX0pLE9lLnJlZ2lzdGVyQ29tcG9uZW50KFwiUGxheWVyXCIsam8pO2Z1bmN0aW9uIElvKGUpe3JldHVybiBSby5oYXNPd25Qcm9wZXJ0eShlKX1mdW5jdGlvbiBPbyhlKXtyZXR1cm4gSW8oZSk/Um9bZV06dm9pZCAwfWZ1bmN0aW9uIERvKGUsdCl7ZVtGb109ZVtGb118fHt9LGVbRm9dW3RdPSEwfWZ1bmN0aW9uIE1vKGUsdCxuKXt2YXIgcj0obj9cImJlZm9yZVwiOlwiXCIpK1wicGx1Z2luc2V0dXBcIjtlLnRyaWdnZXIocix0KSxlLnRyaWdnZXIocitcIjpcIit0Lm5hbWUsdCl9ZnVuY3Rpb24gTm8oaSxvKXtyZXR1cm4gby5wcm90b3R5cGUubmFtZT1pLGZ1bmN0aW9uKCl7TW8odGhpcyx7bmFtZTppLHBsdWdpbjpvLGluc3RhbmNlOm51bGx9LCEwKTtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt2YXIgcj1OZShvLFt0aGlzXS5jb25jYXQodCkpO3JldHVybiB0aGlzW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LE1vKHRoaXMsci5nZXRFdmVudEhhc2goKSkscn19dmFyIExvPVwicGx1Z2luXCIsRm89XCJhY3RpdmVQbHVnaW5zX1wiLFJvPXt9LEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihlKXtpZih0aGlzLmNvbnN0cnVjdG9yPT09bil0aHJvdyBuZXcgRXJyb3IoXCJQbHVnaW4gbXVzdCBiZSBzdWItY2xhc3NlZDsgbm90IGRpcmVjdGx5IGluc3RhbnRpYXRlZC5cIik7dGhpcy5wbGF5ZXI9ZSx3ZSh0aGlzKSxkZWxldGUgdGhpcy50cmlnZ2VyLHhlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvci5kZWZhdWx0U3RhdGUpLERvKGUsdGhpcy5uYW1lKSx0aGlzLmRpc3Bvc2U9cGUodGhpcyx0aGlzLmRpc3Bvc2UpLGUub24oXCJkaXNwb3NlXCIsdGhpcy5kaXNwb3NlKX12YXIgZT1uLnByb3RvdHlwZTtyZXR1cm4gZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuVkVSU0lPTn0sZS5nZXRFdmVudEhhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxlLm5hbWU9dGhpcy5uYW1lLGUucGx1Z2luPXRoaXMuY29uc3RydWN0b3IsZS5pbnN0YW5jZT10aGlzLGV9LGUudHJpZ2dlcj1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksdWUodGhpcy5ldmVudEJ1c0VsXyxlLHRoaXMuZ2V0RXZlbnRIYXNoKHQpKX0sZS5oYW5kbGVTdGF0ZUNoYW5nZWQ9ZnVuY3Rpb24oZSl7fSxlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hbWUsdD10aGlzLnBsYXllcjt0aGlzLnRyaWdnZXIoXCJkaXNwb3NlXCIpLHRoaXMub2ZmKCksdC5vZmYoXCJkaXNwb3NlXCIsdGhpcy5kaXNwb3NlKSx0W0ZvXVtlXT0hMSx0aGlzLnBsYXllcj10aGlzLnN0YXRlPW51bGwsdFtlXT1ObyhlLFJvW2VdKX0sbi5pc0Jhc2ljPWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP09vKGUpOmU7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmIW4ucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodC5wcm90b3R5cGUpfSxuLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIHBsdWdpbiBuYW1lLCBcIicrZSsnXCIsIG11c3QgYmUgYSBzdHJpbmcsIHdhcyAnK3R5cGVvZiBlK1wiLlwiKTtpZihJbyhlKSlmLndhcm4oJ0EgcGx1Z2luIG5hbWVkIFwiJytlKydcIiBhbHJlYWR5IGV4aXN0cy4gWW91IG1heSB3YW50IHRvIGF2b2lkIHJlLXJlZ2lzdGVyaW5nIHBsdWdpbnMhJyk7ZWxzZSBpZihqby5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIHBsdWdpbiBuYW1lLCBcIicrZSsnXCIsIGNhbm5vdCBzaGFyZSBhIG5hbWUgd2l0aCBhbiBleGlzdGluZyBwbGF5ZXIgbWV0aG9kIScpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIHBsdWdpbiBmb3IgXCInK2UrJ1wiLCBtdXN0IGJlIGEgZnVuY3Rpb24sIHdhcyAnK3R5cGVvZiB0K1wiLlwiKTtyZXR1cm4gUm9bZV09dCxlIT09TG8mJihuLmlzQmFzaWModCk/am8ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe01vKHRoaXMse25hbWU6dCxwbHVnaW46bixpbnN0YW5jZTpudWxsfSwhMCk7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIERvKHRoaXMsdCksTW8odGhpcyx7bmFtZTp0LHBsdWdpbjpuLGluc3RhbmNlOmV9KSxlfXJldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09bltlXX0pLHJ9KGUsdCk6am8ucHJvdG90eXBlW2VdPU5vKGUsdCkpLHR9LG4uZGVyZWdpc3RlclBsdWdpbj1mdW5jdGlvbihlKXtpZihlPT09TG8pdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlLXJlZ2lzdGVyIGJhc2UgcGx1Z2luLlwiKTtJbyhlKSYmKGRlbGV0ZSBSb1tlXSxkZWxldGUgam8ucHJvdG90eXBlW2VdKX0sbi5nZXRQbHVnaW5zPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB2b2lkIDA9PT1lJiYoZT1PYmplY3Qua2V5cyhSbykpLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1PbyhlKTt0JiYoKG49bnx8e30pW2VdPXQpfSksbn0sbi5nZXRQbHVnaW5WZXJzaW9uPWZ1bmN0aW9uKGUpe3ZhciB0PU9vKGUpO3JldHVybiB0JiZ0LlZFUlNJT058fFwiXCJ9LG59KCk7Qm8uZ2V0UGx1Z2luPU9vLEJvLkJBU0VfUExVR0lOX05BTUU9TG8sQm8ucmVnaXN0ZXJQbHVnaW4oTG8sQm8pLGpvLnByb3RvdHlwZS51c2luZ1BsdWdpbj1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXNbRm9dJiYhMD09PXRoaXNbRm9dW2VdfSxqby5wcm90b3R5cGUuaGFzUGx1Z2luPWZ1bmN0aW9uKGUpe3JldHVybiEhSW8oZSl9O3ZhciAkbz1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWUuaW5kZXhPZihcIiNcIik/ZS5zbGljZSgxKTplfTtmdW5jdGlvbiBIbyhlLG4sdCl7dmFyIHI9SG8uZ2V0UGxheWVyKGUpO2lmKHIpcmV0dXJuIG4mJmYud2FybignUGxheWVyIFwiJytlKydcIiBpcyBhbHJlYWR5IGluaXRpYWxpc2VkLiBPcHRpb25zIHdpbGwgbm90IGJlIGFwcGxpZWQuJyksdCYmci5yZWFkeSh0KSxyO3ZhciBpPVwic3RyaW5nXCI9PXR5cGVvZiBlP1coXCIjXCIrJG8oZSkpOmU7aWYoIWcoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBlbGVtZW50IG9yIElEIHN1cHBsaWVkIGlzIG5vdCB2YWxpZC4gKHZpZGVvanMpXCIpO2kub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmaS5vd25lckRvY3VtZW50LmJvZHkuY29udGFpbnMoaSl8fGYud2FybihcIlRoZSBlbGVtZW50IHN1cHBsaWVkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgRE9NXCIpLG49bnx8e30sSG8uaG9va3MoXCJiZWZvcmVzZXR1cFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUoaSxJZShuKSk7cyh0KSYmIUFycmF5LmlzQXJyYXkodCk/bj1JZShuLHQpOmYuZXJyb3IoXCJwbGVhc2UgcmV0dXJuIGFuIG9iamVjdCBpbiBiZWZvcmVzZXR1cCBob29rc1wiKX0pO3ZhciBvPU9lLmdldENvbXBvbmVudChcIlBsYXllclwiKTtyZXR1cm4gcj1uZXcgbyhpLG4sdCksSG8uaG9va3MoXCJzZXR1cFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHIpfSkscn1pZihIby5ob29rc189e30sSG8uaG9va3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSG8uaG9va3NfW2VdPUhvLmhvb2tzX1tlXXx8W10sdCYmKEhvLmhvb2tzX1tlXT1Iby5ob29rc19bZV0uY29uY2F0KHQpKSxIby5ob29rc19bZV19LEhvLmhvb2s9ZnVuY3Rpb24oZSx0KXtIby5ob29rcyhlLHQpfSxIby5ob29rT25jZT1mdW5jdGlvbihuLGUpe0hvLmhvb2tzKG4sW10uY29uY2F0KGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gZSgpe3JldHVybiBIby5yZW1vdmVIb29rKG4sZSksdC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19KSl9LEhvLnJlbW92ZUhvb2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj1Iby5ob29rcyhlKS5pbmRleE9mKHQpO3JldHVybiEobjw9LTEpJiYoSG8uaG9va3NfW2VdPUhvLmhvb2tzX1tlXS5zbGljZSgpLEhvLmhvb2tzX1tlXS5zcGxpY2UobiwxKSwhMCl9LCEwIT09aC5WSURFT0pTX05PX0RZTkFNSUNfU1RZTEUmJnUoKSl7dmFyIFZvPVcoXCIudmpzLXN0eWxlcy1kZWZhdWx0c1wiKTtpZighVm8pe1ZvPVEoXCJ2anMtc3R5bGVzLWRlZmF1bHRzXCIpO3ZhciBVbz1XKFwiaGVhZFwiKTtVbyYmVW8uaW5zZXJ0QmVmb3JlKFZvLFVvLmZpcnN0Q2hpbGQpLEooVm8sXCJcXG4gICAgICAudmlkZW8tanMge1xcbiAgICAgICAgd2lkdGg6IDMwMHB4O1xcbiAgICAgICAgaGVpZ2h0OiAxNTBweDtcXG4gICAgICB9XFxuXFxuICAgICAgLnZqcy1mbHVpZCB7XFxuICAgICAgICBwYWRkaW5nLXRvcDogNTYuMjUlXFxuICAgICAgfVxcbiAgICBcIil9fXJldHVybiBYKDEsSG8pLEhvLlZFUlNJT049cCxIby5vcHRpb25zPWpvLnByb3RvdHlwZS5vcHRpb25zXyxIby5nZXRQbGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIGpvLnBsYXllcnN9LEhvLmdldFBsYXllcj1mdW5jdGlvbihlKXt2YXIgdCxuPWpvLnBsYXllcnM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciByPSRvKGUpLGk9bltyXTtpZihpKXJldHVybiBpO3Q9VyhcIiNcIityKX1lbHNlIHQ9ZTtpZihnKHQpKXt2YXIgbz10LHM9by5wbGF5ZXIsYT1vLnBsYXllcklkO2lmKHN8fG5bYV0pcmV0dXJuIHN8fG5bYV19fSxIby5nZXRBbGxQbGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGpvLnBsYXllcnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gam8ucGxheWVyc1tlXX0pLmZpbHRlcihCb29sZWFuKX0sSG8ucGxheWVycz1qby5wbGF5ZXJzLEhvLmdldENvbXBvbmVudD1PZS5nZXRDb21wb25lbnQsSG8ucmVnaXN0ZXJDb21wb25lbnQ9ZnVuY3Rpb24oZSx0KXtqci5pc1RlY2godCkmJmYud2FybihcIlRoZSBcIitlK1wiIHRlY2ggd2FzIHJlZ2lzdGVyZWQgYXMgYSBjb21wb25lbnQuIEl0IHNob3VsZCBpbnN0ZWFkIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdmlkZW9qcy5yZWdpc3RlclRlY2gobmFtZSwgdGVjaClcIiksT2UucmVnaXN0ZXJDb21wb25lbnQuY2FsbChPZSxlLHQpfSxIby5nZXRUZWNoPWpyLmdldFRlY2gsSG8ucmVnaXN0ZXJUZWNoPWpyLnJlZ2lzdGVyVGVjaCxIby51c2U9ZnVuY3Rpb24oZSx0KXtBcltlXT1BcltlXXx8W10sQXJbZV0ucHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEhvLFwibWlkZGxld2FyZVwiLHt2YWx1ZTp7fSx3cml0ZWFibGU6ITEsZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIby5taWRkbGV3YXJlLFwiVEVSTUlOQVRPUlwiLHt2YWx1ZTpPcix3cml0ZWFibGU6ITEsZW51bWVyYWJsZTohMH0pLEhvLmJyb3dzZXI9YXQsSG8uVE9VQ0hfRU5BQkxFRD1zdCxIby5leHRlbmQ9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIG49ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scj17fTtmb3IodmFyIGkgaW5cIm9iamVjdFwiPT10eXBlb2YgdD8odC5jb25zdHJ1Y3RvciE9PU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IpLHI9dCk6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCksZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKGUuc3VwZXJfPXQpfShuLGUpLHIpci5oYXNPd25Qcm9wZXJ0eShpKSYmKG4ucHJvdG90eXBlW2ldPXJbaV0pO3JldHVybiBufSxIby5tZXJnZU9wdGlvbnM9SWUsSG8uYmluZD1wZSxIby5yZWdpc3RlclBsdWdpbj1Cby5yZWdpc3RlclBsdWdpbixIby5kZXJlZ2lzdGVyUGx1Z2luPUJvLmRlcmVnaXN0ZXJQbHVnaW4sSG8ucGx1Z2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYud2FybihcInZpZGVvanMucGx1Z2luKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHZpZGVvanMucmVnaXN0ZXJQbHVnaW4oKSBpbnN0ZWFkXCIpLEJvLnJlZ2lzdGVyUGx1Z2luKGUsdCl9LEhvLmdldFBsdWdpbnM9Qm8uZ2V0UGx1Z2lucyxIby5nZXRQbHVnaW49Qm8uZ2V0UGx1Z2luLEhvLmdldFBsdWdpblZlcnNpb249Qm8uZ2V0UGx1Z2luVmVyc2lvbixIby5hZGRMYW5ndWFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBlPShcIlwiK2UpLnRvTG93ZXJDYXNlKCksSG8ub3B0aW9ucy5sYW5ndWFnZXM9SWUoSG8ub3B0aW9ucy5sYW5ndWFnZXMsKChuPXt9KVtlXT10LG4pKSxIby5vcHRpb25zLmxhbmd1YWdlc1tlXX0sSG8ubG9nPWYsSG8uY3JlYXRlTG9nZ2VyPXYsSG8uY3JlYXRlVGltZVJhbmdlPUhvLmNyZWF0ZVRpbWVSYW5nZXM9dXQsSG8uZm9ybWF0VGltZT1paSxIby5zZXRGb3JtYXRUaW1lPWZ1bmN0aW9uKGUpe3JpPWV9LEhvLnJlc2V0Rm9ybWF0VGltZT1mdW5jdGlvbigpe3JpPW5pfSxIby5wYXJzZVVybD1NdCxIby5pc0Nyb3NzT3JpZ2luPUZ0LEhvLkV2ZW50VGFyZ2V0PXZlLEhvLm9uPWxlLEhvLm9uZT1oZSxIby5vZmY9Y2UsSG8udHJpZ2dlcj11ZSxIby54aHI9eXIsSG8uVGV4dFRyYWNrPVRyLEhvLkF1ZGlvVHJhY2s9a3IsSG8uVmlkZW9UcmFjaz1DcixbXCJpc0VsXCIsXCJpc1RleHROb2RlXCIsXCJjcmVhdGVFbFwiLFwiaGFzQ2xhc3NcIixcImFkZENsYXNzXCIsXCJyZW1vdmVDbGFzc1wiLFwidG9nZ2xlQ2xhc3NcIixcInNldEF0dHJpYnV0ZXNcIixcImdldEF0dHJpYnV0ZXNcIixcImVtcHR5RWxcIixcImFwcGVuZENvbnRlbnRcIixcImluc2VydENvbnRlbnRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtIb1tlXT1mdW5jdGlvbigpe3JldHVybiBmLndhcm4oXCJ2aWRlb2pzLlwiK2UrXCIoKSBpcyBkZXByZWNhdGVkOyB1c2UgdmlkZW9qcy5kb20uXCIrZStcIigpIGluc3RlYWRcIikseltlXS5hcHBseShudWxsLGFyZ3VtZW50cyl9fSksSG8uY29tcHV0ZWRTdHlsZT1yLEhvLmRvbT16LEhvLnVybD1HdCxIb30pOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/video.js/dist/alt/video.core.novtt.min.js\n"); - -/***/ }), - -/***/ "../node_modules/video.js/dist/video.es.js": -/*!*************************************************!*\ - !*** ../node_modules/video.js/dist/video.es.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! global/window */ \"../node_modules/video.js/node_modules/global/window.js\");\n/* harmony import */ var global_window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(global_window__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var global_document__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! global/document */ \"../node_modules/video.js/node_modules/global/document.js\");\n/* harmony import */ var global_document__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(global_document__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var safe_json_parse_tuple__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! safe-json-parse/tuple */ \"../node_modules/safe-json-parse/tuple.js\");\n/* harmony import */ var safe_json_parse_tuple__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(safe_json_parse_tuple__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var keycode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! keycode */ \"../node_modules/keycode/index.js\");\n/* harmony import */ var keycode__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(keycode__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! xhr */ \"../node_modules/xhr/index.js\");\n/* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(xhr__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var videojs_vtt_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! videojs-vtt.js */ \"../node_modules/videojs-vtt.js/lib/browser-index.js\");\n/* harmony import */ var videojs_vtt_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(videojs_vtt_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var url_toolkit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! url-toolkit */ \"../node_modules/url-toolkit/src/url-toolkit.js\");\n/* harmony import */ var url_toolkit__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(url_toolkit__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var m3u8_parser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! m3u8-parser */ \"../node_modules/m3u8-parser/dist/m3u8-parser.es.js\");\n/* harmony import */ var mpd_parser__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! mpd-parser */ \"../node_modules/mpd-parser/dist/mpd-parser.es.js\");\n/* harmony import */ var mux_js_lib_tools_mp4_inspector__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! mux.js/lib/tools/mp4-inspector */ \"../node_modules/mux.js/lib/tools/mp4-inspector.js\");\n/* harmony import */ var mux_js_lib_tools_mp4_inspector__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(mux_js_lib_tools_mp4_inspector__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! mux.js/lib/mp4/probe */ \"../node_modules/mux.js/lib/mp4/probe.js\");\n/* harmony import */ var mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var mux_js_lib_mp4_caption_parser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! mux.js/lib/mp4/caption-parser */ \"../node_modules/mux.js/lib/mp4/caption-parser.js\");\n/* harmony import */ var mux_js_lib_mp4_caption_parser__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(mux_js_lib_mp4_caption_parser__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var mux_js_lib_tools_ts_inspector_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! mux.js/lib/tools/ts-inspector.js */ \"../node_modules/mux.js/lib/tools/ts-inspector.js\");\n/* harmony import */ var mux_js_lib_tools_ts_inspector_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(mux_js_lib_tools_ts_inspector_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var aes_decrypter__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! aes-decrypter */ \"../node_modules/aes-decrypter/dist/aes-decrypter.es.js\");\nfunction _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};}return _typeof(obj);}/**\n * @license\n * Video.js 7.6.6 <http://videojs.com/>\n * Copyright Brightcove, Inc. <https://www.brightcove.com/>\n * Available under Apache License Version 2.0\n * <https://github.com/videojs/video.js/blob/master/LICENSE>\n *\n * Includes vtt.js <https://github.com/mozilla/vtt.js>\n * Available under Apache License Version 2.0\n * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>\n */var version=\"7.6.6\";/**\n * @file create-logger.js\n * @module create-logger\n */var history=[];/**\n * Log messages to the console and history based on the type of message\n *\n * @private\n * @param {string} type\n * The name of the console method to use.\n *\n * @param {Array} args\n * The arguments to be passed to the matching console method.\n */var LogByTypeFactory=function LogByTypeFactory(name,log){return function(type,level,args){var lvl=log.levels[level];var lvlRegExp=new RegExp(\"^(\"+lvl+\")$\");if(type!=='log'){// Add the type to the front of the message when it's not \"log\".\nargs.unshift(type.toUpperCase()+':');}// Add console prefix after adding to history.\nargs.unshift(name+':');// Add a clone of the args at this point to history.\nif(history){history.push([].concat(args));}// If there's no console then don't try to output messages, but they will\n// still be stored in history.\nif(!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console){return;}// Was setting these once outside of this function, but containing them\n// in the function makes it easier to test cases where console doesn't exist\n// when the module is executed.\nvar fn=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console[type];if(!fn&&type==='debug'){// Certain browsers don't have support for console.debug. For those, we\n// should default to the closest comparable log.\nfn=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.info||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.log;}// Bail out if there's no console or if this type is not allowed by the\n// current logging level.\nif(!fn||!lvl||!lvlRegExp.test(type)){return;}fn[Array.isArray(args)?'apply':'call'](global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console,args);};};function createLogger(name){// This is the private tracking variable for logging level.\nvar level='info';// the curried logByType bound to the specific log and history\nvar logByType;/**\n * Logs plain debug messages. Similar to `console.log`.\n *\n * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149)\n * of our JSDoc template, we cannot properly document this as both a function\n * and a namespace, so its function signature is documented here.\n *\n * #### Arguments\n * ##### *args\n * Mixed[]\n *\n * Any combination of values that could be passed to `console.log()`.\n *\n * #### Return Value\n *\n * `undefined`\n *\n * @namespace\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged.\n */var log=function log(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}logByType('log',level,args);};// This is the logByType helper that the logging methods below use\nlogByType=LogByTypeFactory(name,log);/**\n * Create a new sublogger which chains the old name to the new name.\n *\n * For example, doing `videojs.log.createLogger('player')` and then using that logger will log the following:\n * ```js\n * mylogger('foo');\n * // > VIDEOJS: player: foo\n * ```\n *\n * @param {string} name\n * The name to add call the new logger\n * @return {Object}\n */log.createLogger=function(subname){return createLogger(name+': '+subname);};/**\n * Enumeration of available logging levels, where the keys are the level names\n * and the values are `|`-separated strings containing logging methods allowed\n * in that logging level. These strings are used to create a regular expression\n * matching the function name being called.\n *\n * Levels provided by Video.js are:\n *\n * - `off`: Matches no calls. Any value that can be cast to `false` will have\n * this effect. The most restrictive.\n * - `all`: Matches only Video.js-provided functions (`debug`, `log`,\n * `log.warn`, and `log.error`).\n * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls.\n * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls.\n * - `warn`: Matches `log.warn` and `log.error` calls.\n * - `error`: Matches only `log.error` calls.\n *\n * @type {Object}\n */log.levels={all:'debug|log|warn|error',off:'',debug:'debug|log|warn|error',info:'log|warn|error',warn:'warn|error',error:'error',DEFAULT:level};/**\n * Get or set the current logging level.\n *\n * If a string matching a key from {@link module:log.levels} is provided, acts\n * as a setter.\n *\n * @param {string} [lvl]\n * Pass a valid level to set a new logging level.\n *\n * @return {string}\n * The current logging level.\n */log.level=function(lvl){if(typeof lvl==='string'){if(!log.levels.hasOwnProperty(lvl)){throw new Error(\"\\\"\"+lvl+\"\\\" in not a valid log level\");}level=lvl;}return level;};/**\n * Returns an array containing everything that has been logged to the history.\n *\n * This array is a shallow clone of the internal history record. However, its\n * contents are _not_ cloned; so, mutating objects inside this array will\n * mutate them in history.\n *\n * @return {Array}\n */log.history=function(){return history?[].concat(history):[];};/**\n * Allows you to filter the history by the given logger name\n *\n * @param {string} fname\n * The name to filter by\n *\n * @return {Array}\n * The filtered list to return\n */log.history.filter=function(fname){return(history||[]).filter(function(historyItem){// if the first item in each historyItem includes `fname`, then it's a match\nreturn new RegExp(\".*\"+fname+\".*\").test(historyItem[0]);});};/**\n * Clears the internal history tracking, but does not prevent further history\n * tracking.\n */log.history.clear=function(){if(history){history.length=0;}};/**\n * Disable history tracking if it is currently enabled.\n */log.history.disable=function(){if(history!==null){history.length=0;history=null;}};/**\n * Enable history tracking if it is currently disabled.\n */log.history.enable=function(){if(history===null){history=[];}};/**\n * Logs error messages. Similar to `console.error`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as an error\n */log.error=function(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}return logByType('error',level,args);};/**\n * Logs warning messages. Similar to `console.warn`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as a warning.\n */log.warn=function(){for(var _len3=arguments.length,args=new Array(_len3),_key3=0;_key3<_len3;_key3++){args[_key3]=arguments[_key3];}return logByType('warn',level,args);};/**\n * Logs debug messages. Similar to `console.debug`, but may also act as a comparable\n * log if `console.debug` is not available\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as debug.\n */log.debug=function(){for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}return logByType('debug',level,args);};return log;}/**\n * @file log.js\n * @module log\n */var log=createLogger('VIDEOJS');var createLogger$1=log.createLogger;/**\n * @file obj.js\n * @module obj\n */ /**\n * @callback obj:EachCallback\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n */ /**\n * @callback obj:ReduceCallback\n *\n * @param {Mixed} accum\n * The value that is accumulating over the reduce loop.\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n *\n * @return {Mixed}\n * The new accumulated value.\n */var toString=Object.prototype.toString;/**\n * Get the keys of an Object\n *\n * @param {Object}\n * The Object to get the keys from\n *\n * @return {string[]}\n * An array of the keys from the object. Returns an empty array if the\n * object passed in was invalid or had no keys.\n *\n * @private\n */var keys=function keys(object){return isObject(object)?Object.keys(object):[];};/**\n * Array-like iteration for objects.\n *\n * @param {Object} object\n * The object to iterate over\n *\n * @param {obj:EachCallback} fn\n * The callback function which is called for each key in the object.\n */function each(object,fn){keys(object).forEach(function(key){return fn(object[key],key);});}/**\n * Array-like reduce for objects.\n *\n * @param {Object} object\n * The Object that you want to reduce.\n *\n * @param {Function} fn\n * A callback function which is called for each key in the object. It\n * receives the accumulated value and the per-iteration value and key\n * as arguments.\n *\n * @param {Mixed} [initial = 0]\n * Starting value\n *\n * @return {Mixed}\n * The final accumulated value.\n */function reduce(object,fn,initial){if(initial===void 0){initial=0;}return keys(object).reduce(function(accum,key){return fn(accum,object[key],key);},initial);}/**\n * Object.assign-style object shallow merge/extend.\n *\n * @param {Object} target\n * @param {Object} ...sources\n * @return {Object}\n */function assign(target){for(var _len=arguments.length,sources=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){sources[_key-1]=arguments[_key];}if(Object.assign){return Object.assign.apply(Object,[target].concat(sources));}sources.forEach(function(source){if(!source){return;}each(source,function(value,key){target[key]=value;});});return target;}/**\n * Returns whether a value is an object of any kind - including DOM nodes,\n * arrays, regular expressions, etc. Not functions, though.\n *\n * This avoids the gotcha where using `typeof` on a `null` value\n * results in `'object'`.\n *\n * @param {Object} value\n * @return {boolean}\n */function isObject(value){return!!value&&_typeof(value)==='object';}/**\n * Returns whether an object appears to be a \"plain\" object - that is, a\n * direct instance of `Object`.\n *\n * @param {Object} value\n * @return {boolean}\n */function isPlain(value){return isObject(value)&&toString.call(value)==='[object Object]'&&value.constructor===Object;}/**\n * @file computed-style.js\n * @module computed-style\n */ /**\n * A safe getComputedStyle.\n *\n * This is needed because in Firefox, if the player is loaded in an iframe with\n * `display:none`, then `getComputedStyle` returns `null`, so, we do a\n * null-check to make sure that the player doesn't break in these cases.\n *\n * @function\n * @param {Element} el\n * The element you want the computed style of\n *\n * @param {string} prop\n * The property name you want\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */function computedStyle(el,prop){if(!el||!prop){return'';}if(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.getComputedStyle==='function'){var computedStyleValue=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.getComputedStyle(el);return computedStyleValue?computedStyleValue.getPropertyValue(prop)||computedStyleValue[prop]:'';}return'';}/**\n * @file dom.js\n * @module dom\n */ /**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @private\n * @param {string} str\n * The string to check\n *\n * @return {boolean}\n * Will be `true` if the string is non-blank, `false` otherwise.\n *\n */function isNonBlankString(str){return typeof str==='string'&&/\\S/.test(str);}/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @private\n * @param {string} str\n * The string to check for whitespace.\n *\n * @throws {Error}\n * Throws an error if there is whitespace in the string.\n */function throwIfWhitespace(str){if(/\\s/.test(str)){throw new Error('class has illegal whitespace characters');}}/**\n * Produce a regular expression for matching a className within an elements className.\n *\n * @private\n * @param {string} className\n * The className to generate the RegExp for.\n *\n * @return {RegExp}\n * The RegExp that will check for a specific `className` in an elements\n * className.\n */function classRegExp(className){return new RegExp('(^|\\\\s)'+className+'($|\\\\s)');}/**\n * Whether the current DOM interface appears to be real (i.e. not simulated).\n *\n * @return {boolean}\n * Will be `true` if the DOM appears to be real, `false` otherwise.\n */function isReal(){// Both document and window will never be undefined thanks to `global`.\nreturn global_document__WEBPACK_IMPORTED_MODULE_1___default.a===global_window__WEBPACK_IMPORTED_MODULE_0___default.a.document;}/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @param {Mixed} value\n * The value to check.\n *\n * @return {boolean}\n * Will be `true` if the value is a DOM element, `false` otherwise.\n */function isEl(value){return isObject(value)&&value.nodeType===1;}/**\n * Determines if the current DOM is embedded in an iframe.\n *\n * @return {boolean}\n * Will be `true` if the DOM is embedded in an iframe, `false`\n * otherwise.\n */function isInFrame(){// We need a try/catch here because Safari will throw errors when attempting\n// to get either `parent` or `self`\ntry{return global_window__WEBPACK_IMPORTED_MODULE_0___default.a.parent!==global_window__WEBPACK_IMPORTED_MODULE_0___default.a.self;}catch(x){return true;}}/**\n * Creates functions to query the DOM using a given method.\n *\n * @private\n * @param {string} method\n * The method to create the query with.\n *\n * @return {Function}\n * The query method\n */function createQuerier(method){return function(selector,context){if(!isNonBlankString(selector)){return global_document__WEBPACK_IMPORTED_MODULE_1___default.a[method](null);}if(isNonBlankString(context)){context=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.querySelector(context);}var ctx=isEl(context)?context:global_document__WEBPACK_IMPORTED_MODULE_1___default.a;return ctx[method]&&ctx[method](selector);};}/**\n * Creates an element and applies properties, attributes, and inserts content.\n *\n * @param {string} [tagName='div']\n * Name of tag to be created.\n *\n * @param {Object} [properties={}]\n * Element properties to be applied.\n *\n * @param {Object} [attributes={}]\n * Element attributes to be applied.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor object.\n *\n * @return {Element}\n * The element that was created.\n */function createEl(tagName,properties,attributes,content){if(tagName===void 0){tagName='div';}if(properties===void 0){properties={};}if(attributes===void 0){attributes={};}var el=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(tagName);Object.getOwnPropertyNames(properties).forEach(function(propName){var val=properties[propName];// See #2176\n// We originally were accepting both properties and attributes in the\n// same object, but that doesn't work so well.\nif(propName.indexOf('aria-')!==-1||propName==='role'||propName==='type'){log.warn('Setting attributes in the second argument of createEl()\\n'+'has been deprecated. Use the third argument instead.\\n'+(\"createEl(type, properties, attributes). Attempting to set \"+propName+\" to \"+val+\".\"));el.setAttribute(propName,val);// Handle textContent since it's not supported everywhere and we have a\n// method for it.\n}else if(propName==='textContent'){textContent(el,val);}else{el[propName]=val;}});Object.getOwnPropertyNames(attributes).forEach(function(attrName){el.setAttribute(attrName,attributes[attrName]);});if(content){appendContent(el,content);}return el;}/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param {Element} el\n * The element to add text content into\n *\n * @param {string} text\n * The text content to add.\n *\n * @return {Element}\n * The element with added text content.\n */function textContent(el,text){if(typeof el.textContent==='undefined'){el.innerText=text;}else{el.textContent=text;}return el;}/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child\n * Element to insert\n *\n * @param {Element} parent\n * Element to insert child into\n */function prependTo(child,parent){if(parent.firstChild){parent.insertBefore(child,parent.firstChild);}else{parent.appendChild(child);}}/**\n * Check if an element has a class name.\n *\n * @param {Element} element\n * Element to check\n *\n * @param {string} classToCheck\n * Class name to check for\n *\n * @return {boolean}\n * Will be `true` if the element has a class, `false` otherwise.\n *\n * @throws {Error}\n * Throws an error if `classToCheck` has white space.\n */function hasClass(element,classToCheck){throwIfWhitespace(classToCheck);if(element.classList){return element.classList.contains(classToCheck);}return classRegExp(classToCheck).test(element.className);}/**\n * Add a class name to an element.\n *\n * @param {Element} element\n * Element to add class name to.\n *\n * @param {string} classToAdd\n * Class name to add.\n *\n * @return {Element}\n * The DOM element with the added class name.\n */function addClass(element,classToAdd){if(element.classList){element.classList.add(classToAdd);// Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n// in the case of classList not being supported.\n}else if(!hasClass(element,classToAdd)){element.className=(element.className+' '+classToAdd).trim();}return element;}/**\n * Remove a class name from an element.\n *\n * @param {Element} element\n * Element to remove a class name from.\n *\n * @param {string} classToRemove\n * Class name to remove\n *\n * @return {Element}\n * The DOM element with class name removed.\n */function removeClass(element,classToRemove){if(element.classList){element.classList.remove(classToRemove);}else{throwIfWhitespace(classToRemove);element.className=element.className.split(/\\s+/).filter(function(c){return c!==classToRemove;}).join(' ');}return element;}/**\n * The callback definition for toggleClass.\n *\n * @callback module:dom~PredicateCallback\n * @param {Element} element\n * The DOM element of the Component.\n *\n * @param {string} classToToggle\n * The `className` that wants to be toggled\n *\n * @return {boolean|undefined}\n * If `true` is returned, the `classToToggle` will be added to the\n * `element`. If `false`, the `classToToggle` will be removed from\n * the `element`. If `undefined`, the callback will be ignored.\n */ /**\n * Adds or removes a class name to/from an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @param {Element} element\n * The element to toggle a class name on.\n *\n * @param {string} classToToggle\n * The class that should be toggled.\n *\n * @param {boolean|module:dom~PredicateCallback} [predicate]\n * See the return value for {@link module:dom~PredicateCallback}\n *\n * @return {Element}\n * The element with a class that has been toggled.\n */function toggleClass(element,classToToggle,predicate){// This CANNOT use `classList` internally because IE11 does not support the\n// second parameter to the `classList.toggle()` method! Which is fine because\n// `classList` will be used by the add/remove functions.\nvar has=hasClass(element,classToToggle);if(typeof predicate==='function'){predicate=predicate(element,classToToggle);}if(typeof predicate!=='boolean'){predicate=!has;}// If the necessary class operation matches the current state of the\n// element, no action is required.\nif(predicate===has){return;}if(predicate){addClass(element,classToToggle);}else{removeClass(element,classToToggle);}return element;}/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el\n * Element to add attributes to.\n *\n * @param {Object} [attributes]\n * Attributes to be applied.\n */function setAttributes(el,attributes){Object.getOwnPropertyNames(attributes).forEach(function(attrName){var attrValue=attributes[attrName];if(attrValue===null||typeof attrValue==='undefined'||attrValue===false){el.removeAttribute(attrName);}else{el.setAttribute(attrName,attrValue===true?'':attrValue);}});}/**\n * Get an element's attribute values, as defined on the HTML tag.\n *\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute.\n *\n * @param {Element} tag\n * Element from which to get tag attributes.\n *\n * @return {Object}\n * All attributes of the element. Boolean attributes will be `true` or\n * `false`, others will be strings.\n */function getAttributes(tag){var obj={};// known boolean attributes\n// we can check for matching boolean properties, but not all browsers\n// and not all tags know about these attributes, so, we still want to check them manually\nvar knownBooleans=','+'autoplay,controls,playsinline,loop,muted,default,defaultMuted'+',';if(tag&&tag.attributes&&tag.attributes.length>0){var attrs=tag.attributes;for(var i=attrs.length-1;i>=0;i--){var attrName=attrs[i].name;var attrVal=attrs[i].value;// check for known booleans\n// the matching element property will return a value for typeof\nif(typeof tag[attrName]==='boolean'||knownBooleans.indexOf(','+attrName+',')!==-1){// the value of an included boolean attribute is typically an empty\n// string ('') which would equal false if we just check for a false value.\n// we also don't want support bad code like autoplay='false'\nattrVal=attrVal!==null?true:false;}obj[attrName]=attrVal;}}return obj;}/**\n * Get the value of an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to get the value of.\n *\n * @return {string}\n * The value of the attribute.\n */function getAttribute(el,attribute){return el.getAttribute(attribute);}/**\n * Set the value of an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to set.\n *\n * @param {string} value\n * Value to set the attribute to.\n */function setAttribute(el,attribute,value){el.setAttribute(attribute,value);}/**\n * Remove an element's attribute.\n *\n * @param {Element} el\n * A DOM element.\n *\n * @param {string} attribute\n * Attribute to remove.\n */function removeAttribute(el,attribute){el.removeAttribute(attribute);}/**\n * Attempt to block the ability to select text.\n */function blockTextSelection(){global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body.focus();global_document__WEBPACK_IMPORTED_MODULE_1___default.a.onselectstart=function(){return false;};}/**\n * Turn off text selection blocking.\n */function unblockTextSelection(){global_document__WEBPACK_IMPORTED_MODULE_1___default.a.onselectstart=function(){return true;};}/**\n * Identical to the native `getBoundingClientRect` function, but ensures that\n * the method is supported at all (it is in all browsers we claim to support)\n * and that the element is in the DOM before continuing.\n *\n * This wrapper function also shims properties which are not provided by some\n * older browsers (namely, IE8).\n *\n * Additionally, some browsers do not support adding properties to a\n * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard\n * properties (except `x` and `y` which are not widely supported). This helps\n * avoid implementations where keys are non-enumerable.\n *\n * @param {Element} el\n * Element whose `ClientRect` we want to calculate.\n *\n * @return {Object|undefined}\n * Always returns a plain object - or `undefined` if it cannot.\n */function getBoundingClientRect(el){if(el&&el.getBoundingClientRect&&el.parentNode){var rect=el.getBoundingClientRect();var result={};['bottom','height','left','right','top','width'].forEach(function(k){if(rect[k]!==undefined){result[k]=rect[k];}});if(!result.height){result.height=parseFloat(computedStyle(el,'height'));}if(!result.width){result.width=parseFloat(computedStyle(el,'width'));}return result;}}/**\n * Represents the position of a DOM element on the page.\n *\n * @typedef {Object} module:dom~Position\n *\n * @property {number} left\n * Pixels to the left.\n *\n * @property {number} top\n * Pixels from the top.\n */ /**\n * Get the position of an element in the DOM.\n *\n * Uses `getBoundingClientRect` technique from John Resig.\n *\n * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el\n * Element from which to get offset.\n *\n * @return {module:dom~Position}\n * The position of the element that was passed in.\n */function findPosition(el){var box;if(el.getBoundingClientRect&&el.parentNode){box=el.getBoundingClientRect();}if(!box){return{left:0,top:0};}var docEl=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.documentElement;var body=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body;var clientLeft=docEl.clientLeft||body.clientLeft||0;var scrollLeft=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.pageXOffset||body.scrollLeft;var left=box.left+scrollLeft-clientLeft;var clientTop=docEl.clientTop||body.clientTop||0;var scrollTop=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.pageYOffset||body.scrollTop;var top=box.top+scrollTop-clientTop;// Android sometimes returns slightly off decimal values, so need to round\nreturn{left:Math.round(left),top:Math.round(top)};}/**\n * Represents x and y coordinates for a DOM element or mouse pointer.\n *\n * @typedef {Object} module:dom~Coordinates\n *\n * @property {number} x\n * x coordinate in pixels\n *\n * @property {number} y\n * y coordinate in pixels\n */ /**\n * Get the pointer position within an element.\n *\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el\n * Element on which to get the pointer position on.\n *\n * @param {EventTarget~Event} event\n * Event object.\n *\n * @return {module:dom~Coordinates}\n * A coordinates object corresponding to the mouse position.\n *\n */function getPointerPosition(el,event){var position={};var box=findPosition(el);var boxW=el.offsetWidth;var boxH=el.offsetHeight;var boxY=box.top;var boxX=box.left;var pageY=event.pageY;var pageX=event.pageX;if(event.changedTouches){pageX=event.changedTouches[0].pageX;pageY=event.changedTouches[0].pageY;}position.y=Math.max(0,Math.min(1,(boxY-pageY+boxH)/boxH));position.x=Math.max(0,Math.min(1,(pageX-boxX)/boxW));return position;}/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param {Mixed} value\n * Check if this value is a text node.\n *\n * @return {boolean}\n * Will be `true` if the value is a text node, `false` otherwise.\n */function isTextNode(value){return isObject(value)&&value.nodeType===3;}/**\n * Empties the contents of an element.\n *\n * @param {Element} el\n * The element to empty children from\n *\n * @return {Element}\n * The element with no children\n */function emptyEl(el){while(el.firstChild){el.removeChild(el.firstChild);}return el;}/**\n * This is a mixed value that describes content to be injected into the DOM\n * via some method. It can be of the following types:\n *\n * Type | Description\n * -----------|-------------\n * `string` | The value will be normalized into a text node.\n * `Element` | The value will be accepted as-is.\n * `TextNode` | The value will be accepted as-is.\n * `Array` | A one-dimensional array of strings, elements, text nodes, or functions. These functions should return a string, element, or text node (any other return value, like an array, will be ignored).\n * `Function` | A function, which is expected to return a string, element, text node, or array - any of the other possible values described above. This means that a content descriptor could be a function that returns an array of functions, but those second-level functions must return strings, elements, or text nodes.\n *\n * @typedef {string|Element|TextNode|Array|Function} module:dom~ContentDescriptor\n */ /**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but helps protect\n * from falling into the trap of simply writing to `innerHTML`, which could\n * be an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Array}\n * All of the content that was passed in, normalized to an array of\n * elements or text nodes.\n */function normalizeContent(content){// First, invoke content if it is a function. If it produces an array,\n// that needs to happen before normalization.\nif(typeof content==='function'){content=content();}// Next up, normalize to an array, so one or many items can be normalized,\n// filtered, and returned.\nreturn(Array.isArray(content)?content:[content]).map(function(value){// First, invoke value if it is a function to produce a new value,\n// which will be subsequently normalized to a Node of some kind.\nif(typeof value==='function'){value=value();}if(isEl(value)||isTextNode(value)){return value;}if(typeof value==='string'&&/\\S/.test(value)){return global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createTextNode(value);}}).filter(function(value){return value;});}/**\n * Normalizes and appends content to an element.\n *\n * @param {Element} el\n * Element to append normalized content to.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Element}\n * The element with appended normalized content.\n */function appendContent(el,content){normalizeContent(content).forEach(function(node){return el.appendChild(node);});return el;}/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @param {Element} el\n * Element to insert normalized content into.\n *\n * @param {module:dom~ContentDescriptor} content\n * A content descriptor value.\n *\n * @return {Element}\n * The element with inserted normalized content.\n */function insertContent(el,content){return appendContent(emptyEl(el),content);}/**\n * Check if an event was a single left click.\n *\n * @param {EventTarget~Event} event\n * Event object.\n *\n * @return {boolean}\n * Will be `true` if a single left click, `false` otherwise.\n */function isSingleLeftClick(event){// Note: if you create something draggable, be sure to\n// call it on both `mousedown` and `mousemove` event,\n// otherwise `mousedown` should be enough for a button\nif(event.button===undefined&&event.buttons===undefined){// Why do we need `buttons` ?\n// Because, middle mouse sometimes have this:\n// e.button === 0 and e.buttons === 4\n// Furthermore, we want to prevent combination click, something like\n// HOLD middlemouse then left click, that would be\n// e.button === 0, e.buttons === 5\n// just `button` is not gonna work\n// Alright, then what this block does ?\n// this is for chrome `simulate mobile devices`\n// I want to support this as well\nreturn true;}if(event.button===0&&event.buttons===undefined){// Touch screen, sometimes on some specific device, `buttons`\n// doesn't have anything (safari on ios, blackberry...)\nreturn true;}// `mouseup` event on a single left click has\n// `button` and `buttons` equal to 0\nif(event.type==='mouseup'&&event.button===0&&event.buttons===0){return true;}if(event.button!==0||event.buttons!==1){// This is the reason we have those if else block above\n// if any special case we can catch and let it slide\n// we do it above, when get to here, this definitely\n// is-not-left-click\nreturn false;}return true;}/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {Element|null}\n * The element that was found or null.\n */var $=createQuerier('querySelector');/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {NodeList}\n * A element list of elements that were found. Will be empty if none\n * were found.\n *\n */var $$=createQuerier('querySelectorAll');var Dom=/*#__PURE__*/Object.freeze({isReal:isReal,isEl:isEl,isInFrame:isInFrame,createEl:createEl,textContent:textContent,prependTo:prependTo,hasClass:hasClass,addClass:addClass,removeClass:removeClass,toggleClass:toggleClass,setAttributes:setAttributes,getAttributes:getAttributes,getAttribute:getAttribute,setAttribute:setAttribute,removeAttribute:removeAttribute,blockTextSelection:blockTextSelection,unblockTextSelection:unblockTextSelection,getBoundingClientRect:getBoundingClientRect,findPosition:findPosition,getPointerPosition:getPointerPosition,isTextNode:isTextNode,emptyEl:emptyEl,normalizeContent:normalizeContent,appendContent:appendContent,insertContent:insertContent,isSingleLeftClick:isSingleLeftClick,$:$,$$:$$});/**\n * @file setup.js - Functions for setting up a player without\n * user interaction based on the data-setup `attribute` of the video tag.\n *\n * @module setup\n */var _windowLoaded=false;var videojs;/**\n * Set up any tags that have a data-setup `attribute` when the player is started.\n */var autoSetup=function autoSetup(){// Protect against breakage in non-browser environments and check global autoSetup option.\nif(!isReal()||videojs.options.autoSetup===false){return;}var vids=Array.prototype.slice.call(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.getElementsByTagName('video'));var audios=Array.prototype.slice.call(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.getElementsByTagName('audio'));var divs=Array.prototype.slice.call(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.getElementsByTagName('video-js'));var mediaEls=vids.concat(audios,divs);// Check if any media elements exist\nif(mediaEls&&mediaEls.length>0){for(var i=0,e=mediaEls.length;i<e;i++){var mediaEl=mediaEls[i];// Check if element exists, has getAttribute func.\nif(mediaEl&&mediaEl.getAttribute){// Make sure this player hasn't already been set up.\nif(mediaEl.player===undefined){var options=mediaEl.getAttribute('data-setup');// Check if data-setup attr exists.\n// We only auto-setup if they've added the data-setup attr.\nif(options!==null){// Create new video.js instance.\nvideojs(mediaEl);}}// If getAttribute isn't defined, we need to wait for the DOM.\n}else{autoSetupTimeout(1);break;}}// No videos were found, so keep looping unless page is finished loading.\n}else if(!_windowLoaded){autoSetupTimeout(1);}};/**\n * Wait until the page is loaded before running autoSetup. This will be called in\n * autoSetup if `hasLoaded` returns false.\n *\n * @param {number} wait\n * How long to wait in ms\n *\n * @param {module:videojs} [vjs]\n * The videojs library function\n */function autoSetupTimeout(wait,vjs){if(vjs){videojs=vjs;}global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(autoSetup,wait);}/**\n * Used to set the internal tracking of window loaded state to true.\n *\n * @private\n */function setWindowLoaded(){_windowLoaded=true;global_window__WEBPACK_IMPORTED_MODULE_0___default.a.removeEventListener('load',setWindowLoaded);}if(isReal()){if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.readyState==='complete'){setWindowLoaded();}else{/**\n * Listen for the load event on window, and set _windowLoaded to true.\n *\n * We use a standard event listener here to avoid incrementing the GUID\n * before any players are created.\n *\n * @listens load\n */global_window__WEBPACK_IMPORTED_MODULE_0___default.a.addEventListener('load',setWindowLoaded);}}/**\n * @file stylesheet.js\n * @module stylesheet\n */ /**\n * Create a DOM syle element given a className for it.\n *\n * @param {string} className\n * The className to add to the created style element.\n *\n * @return {Element}\n * The element that was created.\n */var createStyleElement=function createStyleElement(className){var style=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('style');style.className=className;return style;};/**\n * Add text to a DOM element.\n *\n * @param {Element} el\n * The Element to add text content to.\n *\n * @param {string} content\n * The text to add to the element.\n */var setTextContent=function setTextContent(el,content){if(el.styleSheet){el.styleSheet.cssText=content;}else{el.textContent=content;}};/**\n * @file guid.js\n * @module guid\n */ // Default value for GUIDs. This allows us to reset the GUID counter in tests.\n//\n// The initial GUID is 3 because some users have come to rely on the first\n// default player ID ending up as `vjs_video_3`.\n//\n// See: https://github.com/videojs/video.js/pull/6216\nvar _initialGuid=3;/**\n * Unique ID for an element or function\n *\n * @type {Number}\n */var _guid=_initialGuid;/**\n * Get a unique auto-incrementing ID by number that has not been returned before.\n *\n * @return {number}\n * A new unique ID.\n */function newGUID(){return _guid++;}/**\n * @file dom-data.js\n * @module dom-data\n */var FakeWeakMap;if(!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WeakMap){FakeWeakMap=/*#__PURE__*/function(){function FakeWeakMap(){this.vdata='vdata'+Math.floor(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now()||Date.now());this.data={};}var _proto=FakeWeakMap.prototype;_proto.set=function set(key,value){var access=key[this.vdata]||newGUID();if(!key[this.vdata]){key[this.vdata]=access;}this.data[access]=value;return this;};_proto.get=function get(key){var access=key[this.vdata];// we have data, return it\nif(access){return this.data[access];}// we don't have data, return nothing.\n// return undefined explicitly as that's the contract for this method\nlog('We have no data for this element',key);return undefined;};_proto.has=function has(key){var access=key[this.vdata];return access in this.data;};_proto[\"delete\"]=function _delete(key){var access=key[this.vdata];if(access){delete this.data[access];delete key[this.vdata];}};return FakeWeakMap;}();}/**\n * Element Data Store.\n *\n * Allows for binding data to an element without putting it directly on the\n * element. Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */var DomData=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WeakMap?new WeakMap():new FakeWeakMap();/**\n * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n *\n * @file events.js\n * @module events\n */ /**\n * Clean up the listener cache and dispatchers\n *\n * @param {Element|Object} elem\n * Element to clean up\n *\n * @param {string} type\n * Type of event to clean up\n */function _cleanUpEvents(elem,type){if(!DomData.has(elem)){return;}var data=DomData.get(elem);// Remove the events of a particular type if there are none left\nif(data.handlers[type].length===0){delete data.handlers[type];// data.handlers[type] = null;\n// Setting to null was causing an error with data.handlers\n// Remove the meta-handler from the element\nif(elem.removeEventListener){elem.removeEventListener(type,data.dispatcher,false);}else if(elem.detachEvent){elem.detachEvent('on'+type,data.dispatcher);}}// Remove the events object if there are no types left\nif(Object.getOwnPropertyNames(data.handlers).length<=0){delete data.handlers;delete data.dispatcher;delete data.disabled;}// Finally remove the element data if there is no data left\nif(Object.getOwnPropertyNames(data).length===0){DomData[\"delete\"](elem);}}/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn\n * The event method we want to use.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} callback\n * Event listener.\n */function _handleMultipleEvents(fn,elem,types,callback){types.forEach(function(type){// Call the event method for each one of the types\nfn(elem,type,callback);});}/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event\n * Event object to fix.\n *\n * @return {Object}\n * Fixed event object.\n */function fixEvent(event){function returnTrue(){return true;}function returnFalse(){return false;}// Test if fixing up is needed\n// Used to check if !event.stopPropagation instead of isPropagationStopped\n// But native events return true for stopPropagation, but don't have\n// other expected methods like isPropagationStopped. Seems to be a problem\n// with the Javascript Ninja code. So we're just overriding all events now.\nif(!event||!event.isPropagationStopped){var old=event||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.event;event={};// Clone the old object so that we can modify the values event = {};\n// IE8 Doesn't like when you mess with native event properties\n// Firefox returns false for event.hasOwnProperty('type') and other props\n// which makes copying more difficult.\n// TODO: Probably best to create a whitelist of event props\nfor(var key in old){// Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n// Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n// and webkitMovementX/Y\nif(key!=='layerX'&&key!=='layerY'&&key!=='keyLocation'&&key!=='webkitMovementX'&&key!=='webkitMovementY'){// Chrome 32+ warns if you try to copy deprecated returnValue, but\n// we still want to if preventDefault isn't supported (IE8).\nif(!(key==='returnValue'&&old.preventDefault)){event[key]=old[key];}}}// The event occurred on this element\nif(!event.target){event.target=event.srcElement||global_document__WEBPACK_IMPORTED_MODULE_1___default.a;}// Handle which other element the event is related to\nif(!event.relatedTarget){event.relatedTarget=event.fromElement===event.target?event.toElement:event.fromElement;}// Stop the default browser action\nevent.preventDefault=function(){if(old.preventDefault){old.preventDefault();}event.returnValue=false;old.returnValue=false;event.defaultPrevented=true;};event.defaultPrevented=false;// Stop the event from bubbling\nevent.stopPropagation=function(){if(old.stopPropagation){old.stopPropagation();}event.cancelBubble=true;old.cancelBubble=true;event.isPropagationStopped=returnTrue;};event.isPropagationStopped=returnFalse;// Stop the event from bubbling and executing other handlers\nevent.stopImmediatePropagation=function(){if(old.stopImmediatePropagation){old.stopImmediatePropagation();}event.isImmediatePropagationStopped=returnTrue;event.stopPropagation();};event.isImmediatePropagationStopped=returnFalse;// Handle mouse position\nif(event.clientX!==null&&event.clientX!==undefined){var doc=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.documentElement;var body=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0);}// Handle key presses\nevent.which=event.charCode||event.keyCode;// Fix button for mouse clicks:\n// 0 == left; 1 == middle; 2 == right\nif(event.button!==null&&event.button!==undefined){// The following is disabled because it does not pass videojs-standard\n// and... yikes.\n/* eslint-disable */event.button=event.button&1?0:event.button&4?1:event.button&2?2:0;/* eslint-enable */}}// Returns fixed-up instance\nreturn event;}/**\n * Whether passive event listeners are supported\n */var _supportsPassive=false;(function(){try{var opts=Object.defineProperty({},'passive',{get:function get(){_supportsPassive=true;}});global_window__WEBPACK_IMPORTED_MODULE_0___default.a.addEventListener('test',null,opts);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.removeEventListener('test',null,opts);}catch(e){// disregard\n}})();/**\n * Touch events Chrome expects to be passive\n */var passiveEvents=['touchstart','touchmove'];/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string|string[]} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} fn\n * Event listener.\n */function on(elem,type,fn){if(Array.isArray(type)){return _handleMultipleEvents(on,elem,type,fn);}if(!DomData.has(elem)){DomData.set(elem,{});}var data=DomData.get(elem);// We need a place to store all our handler data\nif(!data.handlers){data.handlers={};}if(!data.handlers[type]){data.handlers[type]=[];}if(!fn.guid){fn.guid=newGUID();}data.handlers[type].push(fn);if(!data.dispatcher){data.disabled=false;data.dispatcher=function(event,hash){if(data.disabled){return;}event=fixEvent(event);var handlers=data.handlers[event.type];if(handlers){// Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\nvar handlersCopy=handlers.slice(0);for(var m=0,n=handlersCopy.length;m<n;m++){if(event.isImmediatePropagationStopped()){break;}else{try{handlersCopy[m].call(elem,event,hash);}catch(e){log.error(e);}}}}};}if(data.handlers[type].length===1){if(elem.addEventListener){var options=false;if(_supportsPassive&&passiveEvents.indexOf(type)>-1){options={passive:true};}elem.addEventListener(type,data.dispatcher,options);}else if(elem.attachEvent){elem.attachEvent('on'+type,data.dispatcher);}}}/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem\n * Object to remove listeners from.\n *\n * @param {string|string[]} [type]\n * Type of listener to remove. Don't include to remove all events from element.\n *\n * @param {EventTarget~EventListener} [fn]\n * Specific listener to remove. Don't include to remove listeners for an event\n * type.\n */function off(elem,type,fn){// Don't want to add a cache object through getElData if not needed\nif(!DomData.has(elem)){return;}var data=DomData.get(elem);// If no events exist, nothing to unbind\nif(!data.handlers){return;}if(Array.isArray(type)){return _handleMultipleEvents(off,elem,type,fn);}// Utility function\nvar removeType=function removeType(el,t){data.handlers[t]=[];_cleanUpEvents(el,t);};// Are we removing all bound events?\nif(type===undefined){for(var t in data.handlers){if(Object.prototype.hasOwnProperty.call(data.handlers||{},t)){removeType(elem,t);}}return;}var handlers=data.handlers[type];// If no handlers exist, nothing to unbind\nif(!handlers){return;}// If no listener was provided, remove all listeners for type\nif(!fn){removeType(elem,type);return;}// We're only removing a single handler\nif(fn.guid){for(var n=0;n<handlers.length;n++){if(handlers[n].guid===fn.guid){handlers.splice(n--,1);}}}_cleanUpEvents(elem,type);}/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem\n * Element to trigger an event on\n *\n * @param {EventTarget~Event|string} event\n * A string (the type) or an event object with a type attribute\n *\n * @param {Object} [hash]\n * data hash to pass along with the event\n *\n * @return {boolean|undefined}\n * Returns the opposite of `defaultPrevented` if default was\n * prevented. Otherwise, returns `undefined`\n */function trigger(elem,event,hash){// Fetches element data and a reference to the parent (for bubbling).\n// Don't want to add a data object to cache for every parent,\n// so checking hasElData first.\nvar elemData=DomData.has(elem)?DomData.get(elem):{};var parent=elem.parentNode||elem.ownerDocument;// type = event.type || event,\n// handler;\n// If an event name was passed as a string, creates an event out of it\nif(typeof event==='string'){event={type:event,target:elem};}else if(!event.target){event.target=elem;}// Normalizes the event properties.\nevent=fixEvent(event);// If the passed element has a dispatcher, executes the established handlers.\nif(elemData.dispatcher){elemData.dispatcher.call(elem,event,hash);}// Unless explicitly stopped or the event does not bubble (e.g. media events)\n// recursively calls this function to bubble the event up the DOM.\nif(parent&&!event.isPropagationStopped()&&event.bubbles===true){trigger.call(null,parent,event,hash);// If at the top of the DOM, triggers the default action unless disabled.\n}else if(!parent&&!event.defaultPrevented&&event.target&&event.target[event.type]){if(!DomData.has(event.target)){DomData.set(event.target,{});}var targetData=DomData.get(event.target);// Checks if the target has a default action for this event.\nif(event.target[event.type]){// Temporarily disables event dispatching on the target as we have already executed the handler.\ntargetData.disabled=true;// Executes the default action.\nif(typeof event.target[event.type]==='function'){event.target[event.type]();}// Re-enables event dispatching.\ntargetData.disabled=false;}}// Inform the triggerer if the default was prevented by returning false\nreturn!event.defaultPrevented;}/**\n * Trigger a listener only once for an event.\n *\n * @param {Element|Object} elem\n * Element or object to bind to.\n *\n * @param {string|string[]} type\n * Name/type of event\n *\n * @param {Event~EventListener} fn\n * Event listener function\n */function one(elem,type,fn){if(Array.isArray(type)){return _handleMultipleEvents(one,elem,type,fn);}var func=function func(){off(elem,type,func);fn.apply(this,arguments);};// copy the guid to the new function so it can removed using the original function's ID\nfunc.guid=fn.guid=fn.guid||newGUID();on(elem,type,func);}/**\n * Trigger a listener only once and then turn if off for all\n * configured events\n *\n * @param {Element|Object} elem\n * Element or object to bind to.\n *\n * @param {string|string[]} type\n * Name/type of event\n *\n * @param {Event~EventListener} fn\n * Event listener function\n */function any(elem,type,fn){var func=function func(){off(elem,type,func);fn.apply(this,arguments);};// copy the guid to the new function so it can removed using the original function's ID\nfunc.guid=fn.guid=fn.guid||newGUID();// multiple ons, but one off for everything\non(elem,type,func);}var Events=/*#__PURE__*/Object.freeze({fixEvent:fixEvent,on:on,off:off,trigger:trigger,one:one,any:any});/**\n * @file fn.js\n * @module fn\n */var UPDATE_REFRESH_INTERVAL=30;/**\n * Bind (a.k.a proxy or context). A simple method for changing the context of\n * a function.\n *\n * It also stores a unique id on the function so it can be easily removed from\n * events.\n *\n * @function\n * @param {Mixed} context\n * The object to bind as scope.\n *\n * @param {Function} fn\n * The function to be bound to a scope.\n *\n * @param {number} [uid]\n * An optional unique ID for the function to be set\n *\n * @return {Function}\n * The new function that will be bound into the context given\n */var bind=function bind(context,fn,uid){// Make sure the function has a unique ID\nif(!fn.guid){fn.guid=newGUID();}// Create the new function that changes the context\nvar bound=fn.bind(context);// Allow for the ability to individualize this function\n// Needed in the case where multiple objects might share the same prototype\n// IF both items add an event listener with the same function, then you try to remove just one\n// it will remove both because they both have the same guid.\n// when using this, you need to use the bind method when you remove the listener as well.\n// currently used in text tracks\nbound.guid=uid?uid+'_'+fn.guid:fn.guid;return bound;};/**\n * Wraps the given function, `fn`, with a new function that only invokes `fn`\n * at most once per every `wait` milliseconds.\n *\n * @function\n * @param {Function} fn\n * The function to be throttled.\n *\n * @param {number} wait\n * The number of milliseconds by which to throttle.\n *\n * @return {Function}\n */var throttle=function throttle(fn,wait){var last=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now();var throttled=function throttled(){var now=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now();if(now-last>=wait){fn.apply(void 0,arguments);last=now;}};return throttled;};/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked.\n *\n * Inspired by lodash and underscore implementations.\n *\n * @function\n * @param {Function} func\n * The function to wrap with debounce behavior.\n *\n * @param {number} wait\n * The number of milliseconds to wait after the last invocation.\n *\n * @param {boolean} [immediate]\n * Whether or not to invoke the function immediately upon creation.\n *\n * @param {Object} [context=window]\n * The \"context\" in which the debounced function should debounce. For\n * example, if this function should be tied to a Video.js player,\n * the player can be passed here. Alternatively, defaults to the\n * global `window` object.\n *\n * @return {Function}\n * A debounced function.\n */var debounce=function debounce(func,wait,immediate,context){if(context===void 0){context=global_window__WEBPACK_IMPORTED_MODULE_0___default.a;}var timeout;var cancel=function cancel(){context.clearTimeout(timeout);timeout=null;};/* eslint-disable consistent-this */var debounced=function debounced(){var self=this;var args=arguments;var _later=function later(){timeout=null;_later=null;if(!immediate){func.apply(self,args);}};if(!timeout&&immediate){func.apply(self,args);}context.clearTimeout(timeout);timeout=context.setTimeout(_later,wait);};/* eslint-enable consistent-this */debounced.cancel=cancel;return debounced;};/**\n * @file src/js/event-target.js\n */ /**\n * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It\n * adds shorthand functions that wrap around lengthy functions. For example:\n * the `on` function is a wrapper around `addEventListener`.\n *\n * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget}\n * @class EventTarget\n */var EventTarget=function EventTarget(){};/**\n * A Custom DOM event.\n *\n * @typedef {Object} EventTarget~Event\n * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent}\n */ /**\n * All event listeners should follow the following format.\n *\n * @callback EventTarget~EventListener\n * @this {EventTarget}\n *\n * @param {EventTarget~Event} event\n * the event that triggered this function\n *\n * @param {Object} [hash]\n * hash of data sent during the event\n */ /**\n * An object containing event names as keys and booleans as values.\n *\n * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger}\n * will have extra functionality. See that function for more information.\n *\n * @property EventTarget.prototype.allowedEvents_\n * @private\n */EventTarget.prototype.allowedEvents_={};/**\n * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a\n * function that will get called when an event with a certain name gets triggered.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to call with `EventTarget`s\n */EventTarget.prototype.on=function(type,fn){// Remove the addEventListener alias before calling Events.on\n// so we don't get into an infinite type loop\nvar ael=this.addEventListener;this.addEventListener=function(){};on(this,type,fn);this.addEventListener=ael;};/**\n * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#on}\n */EventTarget.prototype.addEventListener=EventTarget.prototype.on;/**\n * Removes an `event listener` for a specific event from an instance of `EventTarget`.\n * This makes it so that the `event listener` will no longer get called when the\n * named event happens.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to remove.\n */EventTarget.prototype.off=function(type,fn){off(this,type,fn);};/**\n * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#off}\n */EventTarget.prototype.removeEventListener=EventTarget.prototype.off;/**\n * This function will add an `event listener` that gets triggered only once. After the\n * first trigger it will get removed. This is like adding an `event listener`\n * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to be called once for each event name.\n */EventTarget.prototype.one=function(type,fn){// Remove the addEventListener aliasing Events.on\n// so we don't get into an infinite type loop\nvar ael=this.addEventListener;this.addEventListener=function(){};one(this,type,fn);this.addEventListener=ael;};EventTarget.prototype.any=function(type,fn){// Remove the addEventListener aliasing Events.on\n// so we don't get into an infinite type loop\nvar ael=this.addEventListener;this.addEventListener=function(){};any(this,type,fn);this.addEventListener=ael;};/**\n * This function causes an event to happen. This will then cause any `event listeners`\n * that are waiting for that event, to get called. If there are no `event listeners`\n * for an event then nothing will happen.\n *\n * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`.\n * Trigger will also call the `on` + `uppercaseEventName` function.\n *\n * Example:\n * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call\n * `onClick` if it exists.\n *\n * @param {string|EventTarget~Event|Object} event\n * The name of the event, an `Event`, or an object with a key of type set to\n * an event name.\n */EventTarget.prototype.trigger=function(event){var type=event.type||event;// deprecation\n// In a future version we should default target to `this`\n// similar to how we default the target to `elem` in\n// `Events.trigger`. Right now the default `target` will be\n// `document` due to the `Event.fixEvent` call.\nif(typeof event==='string'){event={type:type};}event=fixEvent(event);if(this.allowedEvents_[type]&&this['on'+type]){this['on'+type](event);}trigger(this,event);};/**\n * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#trigger}\n */EventTarget.prototype.dispatchEvent=EventTarget.prototype.trigger;var EVENT_MAP;EventTarget.prototype.queueTrigger=function(event){var _this=this;// only set up EVENT_MAP if it'll be used\nif(!EVENT_MAP){EVENT_MAP=new Map();}var type=event.type||event;var map=EVENT_MAP.get(this);if(!map){map=new Map();EVENT_MAP.set(this,map);}var oldTimeout=map.get(type);map[\"delete\"](type);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(oldTimeout);var timeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){// if we cleared out all timeouts for the current target, delete its map\nif(map.size===0){map=null;EVENT_MAP[\"delete\"](_this);}_this.trigger(event);},0);map.set(type,timeout);};/**\n * @file mixins/evented.js\n * @module evented\n */ /**\n * Returns whether or not an object has had the evented mixin applied.\n *\n * @param {Object} object\n * An object to test.\n *\n * @return {boolean}\n * Whether or not the object appears to be evented.\n */var isEvented=function isEvented(object){return object instanceof EventTarget||!!object.eventBusEl_&&['on','one','off','trigger'].every(function(k){return typeof object[k]==='function';});};/**\n * Adds a callback to run after the evented mixin applied.\n *\n * @param {Object} object\n * An object to Add\n * @param {Function} callback\n * The callback to run.\n */var addEventedCallback=function addEventedCallback(target,callback){if(isEvented(target)){callback();}else{if(!target.eventedCallbacks){target.eventedCallbacks=[];}target.eventedCallbacks.push(callback);}};/**\n * Whether a value is a valid event type - non-empty string or array.\n *\n * @private\n * @param {string|Array} type\n * The type value to test.\n *\n * @return {boolean}\n * Whether or not the type is a valid event type.\n */var isValidEventType=function isValidEventType(type){return(// The regex here verifies that the `type` contains at least one non-\n// whitespace character.\ntypeof type==='string'&&/\\S/.test(type)||Array.isArray(type)&&!!type.length);};/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the target does not appear to be a valid event target.\n *\n * @param {Object} target\n * The object to test.\n */var validateTarget=function validateTarget(target){if(!target.nodeName&&!isEvented(target)){throw new Error('Invalid target; must be a DOM node or evented object.');}};/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the type does not appear to be a valid event type.\n *\n * @param {string|Array} type\n * The type to test.\n */var validateEventType=function validateEventType(type){if(!isValidEventType(type)){throw new Error('Invalid event type; must be a non-empty string or array.');}};/**\n * Validates a value to determine if it is a valid listener. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the listener is not a function.\n *\n * @param {Function} listener\n * The listener to test.\n */var validateListener=function validateListener(listener){if(typeof listener!=='function'){throw new Error('Invalid listener; must be a function.');}};/**\n * Takes an array of arguments given to `on()` or `one()`, validates them, and\n * normalizes them into an object.\n *\n * @private\n * @param {Object} self\n * The evented object on which `on()` or `one()` was called. This\n * object will be bound as the `this` value for the listener.\n *\n * @param {Array} args\n * An array of arguments passed to `on()` or `one()`.\n *\n * @return {Object}\n * An object containing useful values for `on()` or `one()` calls.\n */var normalizeListenArgs=function normalizeListenArgs(self,args){// If the number of arguments is less than 3, the target is always the\n// evented object itself.\nvar isTargetingSelf=args.length<3||args[0]===self||args[0]===self.eventBusEl_;var target;var type;var listener;if(isTargetingSelf){target=self.eventBusEl_;// Deal with cases where we got 3 arguments, but we are still listening to\n// the evented object itself.\nif(args.length>=3){args.shift();}type=args[0];listener=args[1];}else{target=args[0];type=args[1];listener=args[2];}validateTarget(target);validateEventType(type);validateListener(listener);listener=bind(self,listener);return{isTargetingSelf:isTargetingSelf,target:target,type:type,listener:listener};};/**\n * Adds the listener to the event type(s) on the target, normalizing for\n * the type of target.\n *\n * @private\n * @param {Element|Object} target\n * A DOM node or evented object.\n *\n * @param {string} method\n * The event binding method to use (\"on\" or \"one\").\n *\n * @param {string|Array} type\n * One or more event type(s).\n *\n * @param {Function} listener\n * A listener function.\n */var listen=function listen(target,method,type,listener){validateTarget(target);if(target.nodeName){Events[method](target,type,listener);}else{target[method](type,listener);}};/**\n * Contains methods that provide event capabilities to an object which is passed\n * to {@link module:evented|evented}.\n *\n * @mixin EventedMixin\n */var EventedMixin={/**\n * Add a listener to an event (or events) on this object or another evented\n * object.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */on:function on(){var _this=this;for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var _normalizeListenArgs=normalizeListenArgs(this,args),isTargetingSelf=_normalizeListenArgs.isTargetingSelf,target=_normalizeListenArgs.target,type=_normalizeListenArgs.type,listener=_normalizeListenArgs.listener;listen(target,'on',type,listener);// If this object is listening to another evented object.\nif(!isTargetingSelf){// If this object is disposed, remove the listener.\nvar removeListenerOnDispose=function removeListenerOnDispose(){return _this.off(target,type,listener);};// Use the same function ID as the listener so we can remove it later it\n// using the ID of the original listener.\nremoveListenerOnDispose.guid=listener.guid;// Add a listener to the target's dispose event as well. This ensures\n// that if the target is disposed BEFORE this object, we remove the\n// removal listener that was just added. Otherwise, we create a memory leak.\nvar removeRemoverOnTargetDispose=function removeRemoverOnTargetDispose(){return _this.off('dispose',removeListenerOnDispose);};// Use the same function ID as the listener so we can remove it later\n// it using the ID of the original listener.\nremoveRemoverOnTargetDispose.guid=listener.guid;listen(this,'on','dispose',removeListenerOnDispose);listen(target,'on','dispose',removeRemoverOnTargetDispose);}},/**\n * Add a listener to an event (or events) on this object or another evented\n * object. The listener will be called once per event and then removed.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */one:function one(){var _this2=this;for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}var _normalizeListenArgs2=normalizeListenArgs(this,args),isTargetingSelf=_normalizeListenArgs2.isTargetingSelf,target=_normalizeListenArgs2.target,type=_normalizeListenArgs2.type,listener=_normalizeListenArgs2.listener;// Targeting this evented object.\nif(isTargetingSelf){listen(target,'one',type,listener);// Targeting another evented object.\n}else{// TODO: This wrapper is incorrect! It should only\n// remove the wrapper for the event type that called it.\n// Instead all listners are removed on the first trigger!\n// see https://github.com/videojs/video.js/issues/5962\nvar wrapper=function wrapper(){_this2.off(target,type,wrapper);for(var _len3=arguments.length,largs=new Array(_len3),_key3=0;_key3<_len3;_key3++){largs[_key3]=arguments[_key3];}listener.apply(null,largs);};// Use the same function ID as the listener so we can remove it later\n// it using the ID of the original listener.\nwrapper.guid=listener.guid;listen(target,'one',type,wrapper);}},/**\n * Add a listener to an event (or events) on this object or another evented\n * object. The listener will only be called once for the first event that is triggered\n * then removed.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */any:function any(){var _this3=this;for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}var _normalizeListenArgs3=normalizeListenArgs(this,args),isTargetingSelf=_normalizeListenArgs3.isTargetingSelf,target=_normalizeListenArgs3.target,type=_normalizeListenArgs3.type,listener=_normalizeListenArgs3.listener;// Targeting this evented object.\nif(isTargetingSelf){listen(target,'any',type,listener);// Targeting another evented object.\n}else{var wrapper=function wrapper(){_this3.off(target,type,wrapper);for(var _len5=arguments.length,largs=new Array(_len5),_key5=0;_key5<_len5;_key5++){largs[_key5]=arguments[_key5];}listener.apply(null,largs);};// Use the same function ID as the listener so we can remove it later\n// it using the ID of the original listener.\nwrapper.guid=listener.guid;listen(target,'any',type,wrapper);}},/**\n * Removes listener(s) from event(s) on an evented object.\n *\n * @param {string|Array|Element|Object} [targetOrType]\n * If this is a string or array, it represents the event type(s).\n *\n * Another evented object can be passed here instead, in which case\n * ALL 3 arguments are _required_.\n *\n * @param {string|Array|Function} [typeOrListener]\n * If the first argument was a string or array, this may be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function; otherwise, _all_ listeners bound to the\n * event type(s) will be removed.\n */off:function off$1(targetOrType,typeOrListener,listener){// Targeting this evented object.\nif(!targetOrType||isValidEventType(targetOrType)){off(this.eventBusEl_,targetOrType,typeOrListener);// Targeting another evented object.\n}else{var target=targetOrType;var type=typeOrListener;// Fail fast and in a meaningful way!\nvalidateTarget(target);validateEventType(type);validateListener(listener);// Ensure there's at least a guid, even if the function hasn't been used\nlistener=bind(this,listener);// Remove the dispose listener on this evented object, which was given\n// the same guid as the event listener in on().\nthis.off('dispose',listener);if(target.nodeName){off(target,type,listener);off(target,'dispose',listener);}else if(isEvented(target)){target.off(type,listener);target.off('dispose',listener);}}},/**\n * Fire an event on this evented object, causing its listeners to be called.\n *\n * @param {string|Object} event\n * An event type or an object with a type property.\n *\n * @param {Object} [hash]\n * An additional object to pass along to listeners.\n *\n * @return {boolean}\n * Whether or not the default behavior was prevented.\n */trigger:function trigger$1(event,hash){return trigger(this.eventBusEl_,event,hash);}};/**\n * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object.\n *\n * @param {Object} target\n * The object to which to add event methods.\n *\n * @param {Object} [options={}]\n * Options for customizing the mixin behavior.\n *\n * @param {string} [options.eventBusKey]\n * By default, adds a `eventBusEl_` DOM element to the target object,\n * which is used as an event bus. If the target object already has a\n * DOM element that should be used, pass its key here.\n *\n * @return {Object}\n * The target object.\n */function evented(target,options){if(options===void 0){options={};}var _options=options,eventBusKey=_options.eventBusKey;// Set or create the eventBusEl_.\nif(eventBusKey){if(!target[eventBusKey].nodeName){throw new Error(\"The eventBusKey \\\"\"+eventBusKey+\"\\\" does not refer to an element.\");}target.eventBusEl_=target[eventBusKey];}else{target.eventBusEl_=createEl('span',{className:'vjs-event-bus'});}assign(target,EventedMixin);if(target.eventedCallbacks){target.eventedCallbacks.forEach(function(callback){callback();});}// When any evented object is disposed, it removes all its listeners.\ntarget.on('dispose',function(){target.off();global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){target.eventBusEl_=null;},0);});return target;}/**\n * @file mixins/stateful.js\n * @module stateful\n */ /**\n * Contains methods that provide statefulness to an object which is passed\n * to {@link module:stateful}.\n *\n * @mixin StatefulMixin\n */var StatefulMixin={/**\n * A hash containing arbitrary keys and values representing the state of\n * the object.\n *\n * @type {Object}\n */state:{},/**\n * Set the state of an object by mutating its\n * {@link module:stateful~StatefulMixin.state|state} object in place.\n *\n * @fires module:stateful~StatefulMixin#statechanged\n * @param {Object|Function} stateUpdates\n * A new set of properties to shallow-merge into the plugin state.\n * Can be a plain object or a function returning a plain object.\n *\n * @return {Object|undefined}\n * An object containing changes that occurred. If no changes\n * occurred, returns `undefined`.\n */setState:function setState(stateUpdates){var _this=this;// Support providing the `stateUpdates` state as a function.\nif(typeof stateUpdates==='function'){stateUpdates=stateUpdates();}var changes;each(stateUpdates,function(value,key){// Record the change if the value is different from what's in the\n// current state.\nif(_this.state[key]!==value){changes=changes||{};changes[key]={from:_this.state[key],to:value};}_this.state[key]=value;});// Only trigger \"statechange\" if there were changes AND we have a trigger\n// function. This allows us to not require that the target object be an\n// evented object.\nif(changes&&isEvented(this)){/**\n * An event triggered on an object that is both\n * {@link module:stateful|stateful} and {@link module:evented|evented}\n * indicating that its state has changed.\n *\n * @event module:stateful~StatefulMixin#statechanged\n * @type {Object}\n * @property {Object} changes\n * A hash containing the properties that were changed and\n * the values they were changed `from` and `to`.\n */this.trigger({changes:changes,type:'statechanged'});}return changes;}};/**\n * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target\n * object.\n *\n * If the target object is {@link module:evented|evented} and has a\n * `handleStateChanged` method, that method will be automatically bound to the\n * `statechanged` event on itself.\n *\n * @param {Object} target\n * The object to be made stateful.\n *\n * @param {Object} [defaultState]\n * A default set of properties to populate the newly-stateful object's\n * `state` property.\n *\n * @return {Object}\n * Returns the `target`.\n */function stateful(target,defaultState){assign(target,StatefulMixin);// This happens after the mixing-in because we need to replace the `state`\n// added in that step.\ntarget.state=assign({},target.state,defaultState);// Auto-bind the `handleStateChanged` method of the target object if it exists.\nif(typeof target.handleStateChanged==='function'&&isEvented(target)){target.on('statechanged',target.handleStateChanged);}return target;}/**\n * @file string-cases.js\n * @module to-lower-case\n */ /**\n * Lowercase the first letter of a string.\n *\n * @param {string} string\n * String to be lowercased\n *\n * @return {string}\n * The string with a lowercased first letter\n */var toLowerCase=function toLowerCase(string){if(typeof string!=='string'){return string;}return string.replace(/./,function(w){return w.toLowerCase();});};/**\n * Uppercase the first letter of a string.\n *\n * @param {string} string\n * String to be uppercased\n *\n * @return {string}\n * The string with an uppercased first letter\n */var toTitleCase=function toTitleCase(string){if(typeof string!=='string'){return string;}return string.replace(/./,function(w){return w.toUpperCase();});};/**\n * Compares the TitleCase versions of the two strings for equality.\n *\n * @param {string} str1\n * The first string to compare\n *\n * @param {string} str2\n * The second string to compare\n *\n * @return {boolean}\n * Whether the TitleCase versions of the strings are equal\n */var titleCaseEquals=function titleCaseEquals(str1,str2){return toTitleCase(str1)===toTitleCase(str2);};/**\n * @file merge-options.js\n * @module merge-options\n */ /**\n * Merge two objects recursively.\n *\n * Performs a deep merge like\n * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, but only merges\n * plain objects (not arrays, elements, or anything else).\n *\n * Non-plain object values will be copied directly from the right-most\n * argument.\n *\n * @static\n * @param {Object[]} sources\n * One or more objects to merge into a new object.\n *\n * @return {Object}\n * A new object that is the merged result of all sources.\n */function mergeOptions(){var result={};for(var _len=arguments.length,sources=new Array(_len),_key=0;_key<_len;_key++){sources[_key]=arguments[_key];}sources.forEach(function(source){if(!source){return;}each(source,function(value,key){if(!isPlain(value)){result[key]=value;return;}if(!isPlain(result[key])){result[key]={};}result[key]=mergeOptions(result[key],value);});});return result;}/**\n * Player Component - Base class for all UI objects\n *\n * @file component.js\n */ /**\n * Base class for all UI Components.\n * Components are UI objects which represent both a javascript object and an element\n * in the DOM. They can be children of other components, and can have\n * children themselves.\n *\n * Components can also use methods from {@link EventTarget}\n */var Component=/*#__PURE__*/function(){/**\n * A callback that is called when a component is ready. Does not have any\n * paramters and any callback value will be ignored.\n *\n * @callback Component~ReadyCallback\n * @this Component\n */ /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Object[]} [options.children]\n * An array of children objects to intialize this component with. Children objects have\n * a name property that will be used if more than one component of the same type needs to be\n * added.\n *\n * @param {Component~ReadyCallback} [ready]\n * Function that gets called when the `Component` is ready.\n */function Component(player,options,ready){// The component might be the player itself and we can't pass `this` to super\nif(!player&&this.play){this.player_=player=this;// eslint-disable-line\n}else{this.player_=player;}// Hold the reference to the parent component via `addChild` method\nthis.parentComponent_=null;// Make a copy of prototype.options_ to protect against overriding defaults\nthis.options_=mergeOptions({},this.options_);// Updated options with supplied options\noptions=this.options_=mergeOptions(this.options_,options);// Get ID from options or options element if one is supplied\nthis.id_=options.id||options.el&&options.el.id;// If there was no ID from the options, generate one\nif(!this.id_){// Don't require the player ID function in the case of mock players\nvar id=player&&player.id&&player.id()||'no_player';this.id_=id+\"_component_\"+newGUID();}this.name_=options.name||null;// Create element if one wasn't provided in options\nif(options.el){this.el_=options.el;}else if(options.createEl!==false){this.el_=this.createEl();}// if evented is anything except false, we want to mixin in evented\nif(options.evented!==false){// Make this an evented object and use `el_`, if available, as its event bus\nevented(this,{eventBusKey:this.el_?'el_':null});}stateful(this,this.constructor.defaultState);this.children_=[];this.childIndex_={};this.childNameIndex_={};var SetSham;if(!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Set){SetSham=/*#__PURE__*/function(){function SetSham(){this.set_={};}var _proto2=SetSham.prototype;_proto2.has=function has(key){return key in this.set_;};_proto2[\"delete\"]=function _delete(key){var has=this.has(key);delete this.set_[key];return has;};_proto2.add=function add(key){this.set_[key]=1;return this;};_proto2.forEach=function forEach(callback,thisArg){for(var key in this.set_){callback.call(thisArg,key,key,this);}};return SetSham;}();}this.setTimeoutIds_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Set?new Set():new SetSham();this.setIntervalIds_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Set?new Set():new SetSham();this.rafIds_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Set?new Set():new SetSham();this.clearingTimersOnDispose_=false;// Add any child components in options\nif(options.initChildren!==false){this.initChildren();}this.ready(ready);// Don't want to trigger ready here or it will before init is actually\n// finished for all children that run this constructor\nif(options.reportTouchActivity!==false){this.enableTouchActivity();}}/**\n * Dispose of the `Component` and all child components.\n *\n * @fires Component#dispose\n */var _proto=Component.prototype;_proto.dispose=function dispose(){/**\n * Triggered when a `Component` is disposed.\n *\n * @event Component#dispose\n * @type {EventTarget~Event}\n *\n * @property {boolean} [bubbles=false]\n * set to false so that the close event does not\n * bubble up\n */this.trigger({type:'dispose',bubbles:false});// Dispose all children.\nif(this.children_){for(var i=this.children_.length-1;i>=0;i--){if(this.children_[i].dispose){this.children_[i].dispose();}}}// Delete child references\nthis.children_=null;this.childIndex_=null;this.childNameIndex_=null;this.parentComponent_=null;if(this.el_){// Remove element from DOM\nif(this.el_.parentNode){this.el_.parentNode.removeChild(this.el_);}if(DomData.has(this.el_)){DomData[\"delete\"](this.el_);}this.el_=null;}// remove reference to the player after disposing of the element\nthis.player_=null;}/**\n * Return the {@link Player} that the `Component` has attached to.\n *\n * @return {Player}\n * The player that this `Component` has attached to.\n */;_proto.player=function player(){return this.player_;}/**\n * Deep merge of options objects with new options.\n * > Note: When both `obj` and `options` contain properties whose values are objects.\n * The two properties get merged using {@link module:mergeOptions}\n *\n * @param {Object} obj\n * The object that contains new options.\n *\n * @return {Object}\n * A new object of `this.options_` and `obj` merged together.\n */;_proto.options=function options(obj){if(!obj){return this.options_;}this.options_=mergeOptions(this.options_,obj);return this.options_;}/**\n * Get the `Component`s DOM element\n *\n * @return {Element}\n * The DOM element for this `Component`.\n */;_proto.el=function el(){return this.el_;}/**\n * Create the `Component`s DOM element.\n *\n * @param {string} [tagName]\n * Element's DOM node type. e.g. 'div'\n *\n * @param {Object} [properties]\n * An object of properties that should be set.\n *\n * @param {Object} [attributes]\n * An object of attributes that should be set.\n *\n * @return {Element}\n * The element that gets created.\n */;_proto.createEl=function createEl$1(tagName,properties,attributes){return createEl(tagName,properties,attributes);}/**\n * Localize a string given the string in english.\n *\n * If tokens are provided, it'll try and run a simple token replacement on the provided string.\n * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array.\n *\n * If a `defaultValue` is provided, it'll use that over `string`,\n * if a value isn't found in provided language files.\n * This is useful if you want to have a descriptive key for token replacement\n * but have a succinct localized string and not require `en.json` to be included.\n *\n * Currently, it is used for the progress bar timing.\n * ```js\n * {\n * \"progress bar timing: currentTime={1} duration={2}\": \"{1} of {2}\"\n * }\n * ```\n * It is then used like so:\n * ```js\n * this.localize('progress bar timing: currentTime={1} duration{2}',\n * [this.player_.currentTime(), this.player_.duration()],\n * '{1} of {2}');\n * ```\n *\n * Which outputs something like: `01:23 of 24:56`.\n *\n *\n * @param {string} string\n * The string to localize and the key to lookup in the language files.\n * @param {string[]} [tokens]\n * If the current item has token replacements, provide the tokens here.\n * @param {string} [defaultValue]\n * Defaults to `string`. Can be a default value to use for token replacement\n * if the lookup key is needed to be separate.\n *\n * @return {string}\n * The localized string or if no localization exists the english string.\n */;_proto.localize=function localize(string,tokens,defaultValue){if(defaultValue===void 0){defaultValue=string;}var code=this.player_.language&&this.player_.language();var languages=this.player_.languages&&this.player_.languages();var language=languages&&languages[code];var primaryCode=code&&code.split('-')[0];var primaryLang=languages&&languages[primaryCode];var localizedString=defaultValue;if(language&&language[string]){localizedString=language[string];}else if(primaryLang&&primaryLang[string]){localizedString=primaryLang[string];}if(tokens){localizedString=localizedString.replace(/\\{(\\d+)\\}/g,function(match,index){var value=tokens[index-1];var ret=value;if(typeof value==='undefined'){ret=match;}return ret;});}return localizedString;}/**\n * Return the `Component`s DOM element. This is where children get inserted.\n * This will usually be the the same as the element returned in {@link Component#el}.\n *\n * @return {Element}\n * The content element for this `Component`.\n */;_proto.contentEl=function contentEl(){return this.contentEl_||this.el_;}/**\n * Get this `Component`s ID\n *\n * @return {string}\n * The id of this `Component`\n */;_proto.id=function id(){return this.id_;}/**\n * Get the `Component`s name. The name gets used to reference the `Component`\n * and is set during registration.\n *\n * @return {string}\n * The name of this `Component`.\n */;_proto.name=function name(){return this.name_;}/**\n * Get an array of all child components\n *\n * @return {Array}\n * The children\n */;_proto.children=function children(){return this.children_;}/**\n * Returns the child `Component` with the given `id`.\n *\n * @param {string} id\n * The id of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `id` or undefined.\n */;_proto.getChildById=function getChildById(id){return this.childIndex_[id];}/**\n * Returns the child `Component` with the given `name`.\n *\n * @param {string} name\n * The name of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `name` or undefined.\n */;_proto.getChild=function getChild(name){if(!name){return;}return this.childNameIndex_[name];}/**\n * Add a child `Component` inside the current `Component`.\n *\n *\n * @param {string|Component} child\n * The name or instance of a child to add.\n *\n * @param {Object} [options={}]\n * The key/value store of options that will get passed to children of\n * the child.\n *\n * @param {number} [index=this.children_.length]\n * The index to attempt to add a child into.\n *\n * @return {Component}\n * The `Component` that gets added as a child. When using a string the\n * `Component` will get created by this process.\n */;_proto.addChild=function addChild(child,options,index){if(options===void 0){options={};}if(index===void 0){index=this.children_.length;}var component;var componentName;// If child is a string, create component with options\nif(typeof child==='string'){componentName=toTitleCase(child);var componentClassName=options.componentClass||componentName;// Set name through options\noptions.name=componentName;// Create a new object & element for this controls set\n// If there's no .player_, this is a player\nvar ComponentClass=Component.getComponent(componentClassName);if(!ComponentClass){throw new Error(\"Component \"+componentClassName+\" does not exist\");}// data stored directly on the videojs object may be\n// misidentified as a component to retain\n// backwards-compatibility with 4.x. check to make sure the\n// component class can be instantiated.\nif(typeof ComponentClass!=='function'){return null;}component=new ComponentClass(this.player_||this,options);// child is a component instance\n}else{component=child;}if(component.parentComponent_){component.parentComponent_.removeChild(component);}this.children_.splice(index,0,component);component.parentComponent_=this;if(typeof component.id==='function'){this.childIndex_[component.id()]=component;}// If a name wasn't used to create the component, check if we can use the\n// name function of the component\ncomponentName=componentName||component.name&&toTitleCase(component.name());if(componentName){this.childNameIndex_[componentName]=component;this.childNameIndex_[toLowerCase(componentName)]=component;}// Add the UI object's element to the container div (box)\n// Having an element is not required\nif(typeof component.el==='function'&&component.el()){var childNodes=this.contentEl().children;var refNode=childNodes[index]||null;this.contentEl().insertBefore(component.el(),refNode);}// Return so it can stored on parent object if desired.\nreturn component;}/**\n * Remove a child `Component` from this `Component`s list of children. Also removes\n * the child `Component`s element from this `Component`s element.\n *\n * @param {Component} component\n * The child `Component` to remove.\n */;_proto.removeChild=function removeChild(component){if(typeof component==='string'){component=this.getChild(component);}if(!component||!this.children_){return;}var childFound=false;for(var i=this.children_.length-1;i>=0;i--){if(this.children_[i]===component){childFound=true;this.children_.splice(i,1);break;}}if(!childFound){return;}component.parentComponent_=null;this.childIndex_[component.id()]=null;this.childNameIndex_[toTitleCase(component.name())]=null;this.childNameIndex_[toLowerCase(component.name())]=null;var compEl=component.el();if(compEl&&compEl.parentNode===this.contentEl()){this.contentEl().removeChild(component.el());}}/**\n * Add and initialize default child `Component`s based upon options.\n */;_proto.initChildren=function initChildren(){var _this=this;var children=this.options_.children;if(children){// `this` is `parent`\nvar parentOptions=this.options_;var handleAdd=function handleAdd(child){var name=child.name;var opts=child.opts;// Allow options for children to be set at the parent options\n// e.g. videojs(id, { controlBar: false });\n// instead of videojs(id, { children: { controlBar: false });\nif(parentOptions[name]!==undefined){opts=parentOptions[name];}// Allow for disabling default components\n// e.g. options['children']['posterImage'] = false\nif(opts===false){return;}// Allow options to be passed as a simple boolean if no configuration\n// is necessary.\nif(opts===true){opts={};}// We also want to pass the original player options\n// to each component as well so they don't need to\n// reach back into the player for options later.\nopts.playerOptions=_this.options_.playerOptions;// Create and add the child component.\n// Add a direct reference to the child by name on the parent instance.\n// If two of the same component are used, different names should be supplied\n// for each\nvar newChild=_this.addChild(name,opts);if(newChild){_this[name]=newChild;}};// Allow for an array of children details to passed in the options\nvar workingChildren;var Tech=Component.getComponent('Tech');if(Array.isArray(children)){workingChildren=children;}else{workingChildren=Object.keys(children);}workingChildren// children that are in this.options_ but also in workingChildren would\n// give us extra children we do not want. So, we want to filter them out.\n.concat(Object.keys(this.options_).filter(function(child){return!workingChildren.some(function(wchild){if(typeof wchild==='string'){return child===wchild;}return child===wchild.name;});})).map(function(child){var name;var opts;if(typeof child==='string'){name=child;opts=children[name]||_this.options_[name]||{};}else{name=child.name;opts=child;}return{name:name,opts:opts};}).filter(function(child){// we have to make sure that child.name isn't in the techOrder since\n// techs are registerd as Components but can't aren't compatible\n// See https://github.com/videojs/video.js/issues/2772\nvar c=Component.getComponent(child.opts.componentClass||toTitleCase(child.name));return c&&!Tech.isTech(c);}).forEach(handleAdd);}}/**\n * Builds the default DOM class name. Should be overriden by sub-components.\n *\n * @return {string}\n * The DOM class name for this object.\n *\n * @abstract\n */;_proto.buildCSSClass=function buildCSSClass(){// Child classes can include a function that does:\n// return 'CLASS NAME' + this._super();\nreturn'';}/**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @return {Component}\n * Returns itself; method can be chained.\n */;_proto.ready=function ready(fn,sync){if(sync===void 0){sync=false;}if(!fn){return;}if(!this.isReady_){this.readyQueue_=this.readyQueue_||[];this.readyQueue_.push(fn);return;}if(sync){fn.call(this);}else{// Call the function asynchronously by default for consistency\nthis.setTimeout(fn,1);}}/**\n * Trigger all the ready listeners for this `Component`.\n *\n * @fires Component#ready\n */;_proto.triggerReady=function triggerReady(){this.isReady_=true;// Ensure ready is triggered asynchronously\nthis.setTimeout(function(){var readyQueue=this.readyQueue_;// Reset Ready Queue\nthis.readyQueue_=[];if(readyQueue&&readyQueue.length>0){readyQueue.forEach(function(fn){fn.call(this);},this);}// Allow for using event listeners also\n/**\n * Triggered when a `Component` is ready.\n *\n * @event Component#ready\n * @type {EventTarget~Event}\n */this.trigger('ready');},1);}/**\n * Find a single DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {Element|null}\n * the dom element that was found, or null\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */;_proto.$=function $$1(selector,context){return $(selector,context||this.contentEl());}/**\n * Finds all DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {NodeList}\n * a list of dom elements that were found\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */;_proto.$$=function $$$1(selector,context){return $$(selector,context||this.contentEl());}/**\n * Check if a component's element has a CSS class name.\n *\n * @param {string} classToCheck\n * CSS class name to check.\n *\n * @return {boolean}\n * - True if the `Component` has the class.\n * - False if the `Component` does not have the class`\n */;_proto.hasClass=function hasClass$1(classToCheck){return hasClass(this.el_,classToCheck);}/**\n * Add a CSS class name to the `Component`s element.\n *\n * @param {string} classToAdd\n * CSS class name to add\n */;_proto.addClass=function addClass$1(classToAdd){addClass(this.el_,classToAdd);}/**\n * Remove a CSS class name from the `Component`s element.\n *\n * @param {string} classToRemove\n * CSS class name to remove\n */;_proto.removeClass=function removeClass$1(classToRemove){removeClass(this.el_,classToRemove);}/**\n * Add or remove a CSS class name from the component's element.\n * - `classToToggle` gets added when {@link Component#hasClass} would return false.\n * - `classToToggle` gets removed when {@link Component#hasClass} would return true.\n *\n * @param {string} classToToggle\n * The class to add or remove based on (@link Component#hasClass}\n *\n * @param {boolean|Dom~predicate} [predicate]\n * An {@link Dom~predicate} function or a boolean\n */;_proto.toggleClass=function toggleClass$1(classToToggle,predicate){toggleClass(this.el_,classToToggle,predicate);}/**\n * Show the `Component`s element if it is hidden by removing the\n * 'vjs-hidden' class name from it.\n */;_proto.show=function show(){this.removeClass('vjs-hidden');}/**\n * Hide the `Component`s element if it is currently showing by adding the\n * 'vjs-hidden` class name to it.\n */;_proto.hide=function hide(){this.addClass('vjs-hidden');}/**\n * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing'\n * class name to it. Used during fadeIn/fadeOut.\n *\n * @private\n */;_proto.lockShowing=function lockShowing(){this.addClass('vjs-lock-showing');}/**\n * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing'\n * class name from it. Used during fadeIn/fadeOut.\n *\n * @private\n */;_proto.unlockShowing=function unlockShowing(){this.removeClass('vjs-lock-showing');}/**\n * Get the value of an attribute on the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to get the value from.\n *\n * @return {string|null}\n * - The value of the attribute that was asked for.\n * - Can be an empty string on some browsers if the attribute does not exist\n * or has no value\n * - Most browsers will return null if the attibute does not exist or has\n * no value.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute}\n */;_proto.getAttribute=function getAttribute$1(attribute){return getAttribute(this.el_,attribute);}/**\n * Set the value of an attribute on the `Component`'s element\n *\n * @param {string} attribute\n * Name of the attribute to set.\n *\n * @param {string} value\n * Value to set the attribute to.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute}\n */;_proto.setAttribute=function setAttribute$1(attribute,value){setAttribute(this.el_,attribute,value);}/**\n * Remove an attribute from the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to remove.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute}\n */;_proto.removeAttribute=function removeAttribute$1(attribute){removeAttribute(this.el_,attribute);}/**\n * Get or set the width of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The width that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */;_proto.width=function width(num,skipListeners){return this.dimension('width',num,skipListeners);}/**\n * Get or set the height of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The height that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */;_proto.height=function height(num,skipListeners){return this.dimension('height',num,skipListeners);}/**\n * Set both the width and height of the `Component` element at the same time.\n *\n * @param {number|string} width\n * Width to set the `Component`s element to.\n *\n * @param {number|string} height\n * Height to set the `Component`s element to.\n */;_proto.dimensions=function dimensions(width,height){// Skip componentresize listeners on width for optimization\nthis.width(width,true);this.height(height);}/**\n * Get or set width or height of the `Component` element. This is the shared code\n * for the {@link Component#width} and {@link Component#height}.\n *\n * Things to know:\n * - If the width or height in an number this will return the number postfixed with 'px'.\n * - If the width/height is a percent this will return the percent postfixed with '%'\n * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function\n * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`.\n * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/}\n * for more information\n * - If you want the computed style of the component, use {@link Component#currentWidth}\n * and {@link {Component#currentHeight}\n *\n * @fires Component#componentresize\n *\n * @param {string} widthOrHeight\n 8 'width' or 'height'\n *\n * @param {number|string} [num]\n 8 New dimension\n *\n * @param {boolean} [skipListeners]\n * Skip componentresize event trigger\n *\n * @return {number}\n * The dimension when getting or 0 if unset\n */;_proto.dimension=function dimension(widthOrHeight,num,skipListeners){if(num!==undefined){// Set to zero if null or literally NaN (NaN !== NaN)\nif(num===null||num!==num){num=0;}// Check if using css width/height (% or px) and adjust\nif((''+num).indexOf('%')!==-1||(''+num).indexOf('px')!==-1){this.el_.style[widthOrHeight]=num;}else if(num==='auto'){this.el_.style[widthOrHeight]='';}else{this.el_.style[widthOrHeight]=num+'px';}// skipListeners allows us to avoid triggering the resize event when setting both width and height\nif(!skipListeners){/**\n * Triggered when a component is resized.\n *\n * @event Component#componentresize\n * @type {EventTarget~Event}\n */this.trigger('componentresize');}return;}// Not setting a value, so getting it\n// Make sure element exists\nif(!this.el_){return 0;}// Get dimension value from style\nvar val=this.el_.style[widthOrHeight];var pxIndex=val.indexOf('px');if(pxIndex!==-1){// Return the pixel value with no 'px'\nreturn parseInt(val.slice(0,pxIndex),10);}// No px so using % or no style was set, so falling back to offsetWidth/height\n// If component has display:none, offset will return 0\n// TODO: handle display:none and no dimension style using px\nreturn parseInt(this.el_['offset'+toTitleCase(widthOrHeight)],10);}/**\n * Get the computed width or the height of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @param {string} widthOrHeight\n * A string containing 'width' or 'height'. Whichever one you want to get.\n *\n * @return {number}\n * The dimension that gets asked for or 0 if nothing was set\n * for that dimension.\n */;_proto.currentDimension=function currentDimension(widthOrHeight){var computedWidthOrHeight=0;if(widthOrHeight!=='width'&&widthOrHeight!=='height'){throw new Error('currentDimension only accepts width or height value');}computedWidthOrHeight=computedStyle(this.el_,widthOrHeight);// remove 'px' from variable and parse as integer\ncomputedWidthOrHeight=parseFloat(computedWidthOrHeight);// if the computed value is still 0, it's possible that the browser is lying\n// and we want to check the offset values.\n// This code also runs wherever getComputedStyle doesn't exist.\nif(computedWidthOrHeight===0||isNaN(computedWidthOrHeight)){var rule=\"offset\"+toTitleCase(widthOrHeight);computedWidthOrHeight=this.el_[rule];}return computedWidthOrHeight;}/**\n * An object that contains width and height values of the `Component`s\n * computed style. Uses `window.getComputedStyle`.\n *\n * @typedef {Object} Component~DimensionObject\n *\n * @property {number} width\n * The width of the `Component`s computed style.\n *\n * @property {number} height\n * The height of the `Component`s computed style.\n */ /**\n * Get an object that contains computed width and height values of the\n * component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {Component~DimensionObject}\n * The computed dimensions of the component's element.\n */;_proto.currentDimensions=function currentDimensions(){return{width:this.currentDimension('width'),height:this.currentDimension('height')};}/**\n * Get the computed width of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed width of the component's element.\n */;_proto.currentWidth=function currentWidth(){return this.currentDimension('width');}/**\n * Get the computed height of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed height of the component's element.\n */;_proto.currentHeight=function currentHeight(){return this.currentDimension('height');}/**\n * Set the focus to this component\n */;_proto.focus=function focus(){this.el_.focus();}/**\n * Remove the focus from this component\n */;_proto.blur=function blur(){this.el_.blur();}/**\n * When this Component receives a `keydown` event which it does not process,\n * it passes the event to the Player for handling.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n */;_proto.handleKeyDown=function handleKeyDown(event){if(this.player_){// We only stop propagation here because we want unhandled events to fall\n// back to the browser.\nevent.stopPropagation();this.player_.handleKeyDown(event);}}/**\n * Many components used to have a `handleKeyPress` method, which was poorly\n * named because it listened to a `keydown` event. This method name now\n * delegates to `handleKeyDown`. This means anyone calling `handleKeyPress`\n * will not see their method calls stop working.\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to be called.\n */;_proto.handleKeyPress=function handleKeyPress(event){this.handleKeyDown(event);}/**\n * Emit a 'tap' events when touch event support gets detected. This gets used to\n * support toggling the controls through a tap on the video. They get enabled\n * because every sub-component would have extra overhead otherwise.\n *\n * @private\n * @fires Component#tap\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchleave\n * @listens Component#touchcancel\n * @listens Component#touchend\n */;_proto.emitTapEvents=function emitTapEvents(){// Track the start time so we can determine how long the touch lasted\nvar touchStart=0;var firstTouch=null;// Maximum movement allowed during a touch event to still be considered a tap\n// Other popular libs use anywhere from 2 (hammer.js) to 15,\n// so 10 seems like a nice, round number.\nvar tapMovementThreshold=10;// The maximum length a touch can be while still being considered a tap\nvar touchTimeThreshold=200;var couldBeTap;this.on('touchstart',function(event){// If more than one finger, don't consider treating this as a click\nif(event.touches.length===1){// Copy pageX/pageY from the object\nfirstTouch={pageX:event.touches[0].pageX,pageY:event.touches[0].pageY};// Record start time so we can detect a tap vs. \"touch and hold\"\ntouchStart=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now();// Reset couldBeTap tracking\ncouldBeTap=true;}});this.on('touchmove',function(event){// If more than one finger, don't consider treating this as a click\nif(event.touches.length>1){couldBeTap=false;}else if(firstTouch){// Some devices will throw touchmoves for all but the slightest of taps.\n// So, if we moved only a small distance, this could still be a tap\nvar xdiff=event.touches[0].pageX-firstTouch.pageX;var ydiff=event.touches[0].pageY-firstTouch.pageY;var touchDistance=Math.sqrt(xdiff*xdiff+ydiff*ydiff);if(touchDistance>tapMovementThreshold){couldBeTap=false;}}});var noTap=function noTap(){couldBeTap=false;};// TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\nthis.on('touchleave',noTap);this.on('touchcancel',noTap);// When the touch ends, measure how long it took and trigger the appropriate\n// event\nthis.on('touchend',function(event){firstTouch=null;// Proceed only if the touchmove/leave/cancel event didn't happen\nif(couldBeTap===true){// Measure how long the touch lasted\nvar touchTime=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now()-touchStart;// Make sure the touch was less than the threshold to be considered a tap\nif(touchTime<touchTimeThreshold){// Don't let browser turn this into a click\nevent.preventDefault();/**\n * Triggered when a `Component` is tapped.\n *\n * @event Component#tap\n * @type {EventTarget~Event}\n */this.trigger('tap');// It may be good to copy the touchend event object and change the\n// type to tap, if the other event properties aren't exact after\n// Events.fixEvent runs (e.g. event.target)\n}}});}/**\n * This function reports user activity whenever touch events happen. This can get\n * turned off by any sub-components that wants touch events to act another way.\n *\n * Report user touch activity when touch events occur. User activity gets used to\n * determine when controls should show/hide. It is simple when it comes to mouse\n * events, because any mouse event should show the controls. So we capture mouse\n * events that bubble up to the player and report activity when that happens.\n * With touch events it isn't as easy as `touchstart` and `touchend` toggle player\n * controls. So touch events can't help us at the player level either.\n *\n * User activity gets checked asynchronously. So what could happen is a tap event\n * on the video turns the controls off. Then the `touchend` event bubbles up to\n * the player. Which, if it reported user activity, would turn the controls right\n * back on. We also don't want to completely block touch events from bubbling up.\n * Furthermore a `touchmove` event and anything other than a tap, should not turn\n * controls back on.\n *\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchend\n * @listens Component#touchcancel\n */;_proto.enableTouchActivity=function enableTouchActivity(){// Don't continue if the root player doesn't support reporting user activity\nif(!this.player()||!this.player().reportUserActivity){return;}// listener for reporting that the user is active\nvar report=bind(this.player(),this.player().reportUserActivity);var touchHolding;this.on('touchstart',function(){report();// For as long as the they are touching the device or have their mouse down,\n// we consider them active even if they're not moving their finger or mouse.\n// So we want to continue to update that they are active\nthis.clearInterval(touchHolding);// report at the same interval as activityCheck\ntouchHolding=this.setInterval(report,250);});var touchEnd=function touchEnd(event){report();// stop the interval that maintains activity if the touch is holding\nthis.clearInterval(touchHolding);};this.on('touchmove',report);this.on('touchend',touchEnd);this.on('touchcancel',touchEnd);}/**\n * A callback that has no parameters and is bound into `Component`s context.\n *\n * @callback Component~GenericCallback\n * @this Component\n */ /**\n * Creates a function that runs after an `x` millisecond timeout. This function is a\n * wrapper around `window.setTimeout`. There are a few reasons to use this one\n * instead though:\n * 1. It gets cleared via {@link Component#clearTimeout} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will gets turned into a {@link Component~GenericCallback}\n *\n * > Note: You can't use `window.clearTimeout` on the id returned by this function. This\n * will cause its dispose listener not to get cleaned up! Please use\n * {@link Component#clearTimeout} or {@link Component#dispose} instead.\n *\n * @param {Component~GenericCallback} fn\n * The function that will be run after `timeout`.\n *\n * @param {number} timeout\n * Timeout in milliseconds to delay before executing the specified function.\n *\n * @return {number}\n * Returns a timeout ID that gets used to identify the timeout. It can also\n * get used in {@link Component#clearTimeout} to clear the timeout that\n * was set.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout}\n */;_proto.setTimeout=function setTimeout(fn,timeout){var _this2=this;// declare as variables so they are properly available in timeout function\n// eslint-disable-next-line\nvar timeoutId;fn=bind(this,fn);this.clearTimersOnDispose_();timeoutId=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){if(_this2.setTimeoutIds_.has(timeoutId)){_this2.setTimeoutIds_[\"delete\"](timeoutId);}fn();},timeout);this.setTimeoutIds_.add(timeoutId);return timeoutId;}/**\n * Clears a timeout that gets created via `window.setTimeout` or\n * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout}\n * use this function instead of `window.clearTimout`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} timeoutId\n * The id of the timeout to clear. The return value of\n * {@link Component#setTimeout} or `window.setTimeout`.\n *\n * @return {number}\n * Returns the timeout id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout}\n */;_proto.clearTimeout=function clearTimeout(timeoutId){if(this.setTimeoutIds_.has(timeoutId)){this.setTimeoutIds_[\"delete\"](timeoutId);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(timeoutId);}return timeoutId;}/**\n * Creates a function that gets run every `x` milliseconds. This function is a wrapper\n * around `window.setInterval`. There are a few reasons to use this one instead though.\n * 1. It gets cleared via {@link Component#clearInterval} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will be a {@link Component~GenericCallback}\n *\n * @param {Component~GenericCallback} fn\n * The function to run every `x` seconds.\n *\n * @param {number} interval\n * Execute the specified function every `x` milliseconds.\n *\n * @return {number}\n * Returns an id that can be used to identify the interval. It can also be be used in\n * {@link Component#clearInterval} to clear the interval.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval}\n */;_proto.setInterval=function setInterval(fn,interval){fn=bind(this,fn);this.clearTimersOnDispose_();var intervalId=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setInterval(fn,interval);this.setIntervalIds_.add(intervalId);return intervalId;}/**\n * Clears an interval that gets created via `window.setInterval` or\n * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval}\n * use this function instead of `window.clearInterval`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} intervalId\n * The id of the interval to clear. The return value of\n * {@link Component#setInterval} or `window.setInterval`.\n *\n * @return {number}\n * Returns the interval id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval}\n */;_proto.clearInterval=function clearInterval(intervalId){if(this.setIntervalIds_.has(intervalId)){this.setIntervalIds_[\"delete\"](intervalId);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearInterval(intervalId);}return intervalId;}/**\n * Queues up a callback to be passed to requestAnimationFrame (rAF), but\n * with a few extra bonuses:\n *\n * - Supports browsers that do not support rAF by falling back to\n * {@link Component#setTimeout}.\n *\n * - The callback is turned into a {@link Component~GenericCallback} (i.e.\n * bound to the component).\n *\n * - Automatic cancellation of the rAF callback is handled if the component\n * is disposed before it is called.\n *\n * @param {Component~GenericCallback} fn\n * A function that will be bound to this component and executed just\n * before the browser's next repaint.\n *\n * @return {number}\n * Returns an rAF ID that gets used to identify the timeout. It can\n * also be used in {@link Component#cancelAnimationFrame} to cancel\n * the animation frame callback.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame}\n */;_proto.requestAnimationFrame=function requestAnimationFrame(fn){var _this3=this;// Fall back to using a timer.\nif(!this.supportsRaf_){return this.setTimeout(fn,1000/60);}this.clearTimersOnDispose_();// declare as variables so they are properly available in rAF function\n// eslint-disable-next-line\nvar id;fn=bind(this,fn);id=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.requestAnimationFrame(function(){if(_this3.rafIds_.has(id)){_this3.rafIds_[\"delete\"](id);}fn();});this.rafIds_.add(id);return id;}/**\n * Cancels a queued callback passed to {@link Component#requestAnimationFrame}\n * (rAF).\n *\n * If you queue an rAF callback via {@link Component#requestAnimationFrame},\n * use this function instead of `window.cancelAnimationFrame`. If you don't,\n * your dispose listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} id\n * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}.\n *\n * @return {number}\n * Returns the rAF ID that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame}\n */;_proto.cancelAnimationFrame=function cancelAnimationFrame(id){// Fall back to using a timer.\nif(!this.supportsRaf_){return this.clearTimeout(id);}if(this.rafIds_.has(id)){this.rafIds_[\"delete\"](id);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.cancelAnimationFrame(id);}return id;}/**\n * A function to setup `requestAnimationFrame`, `setTimeout`,\n * and `setInterval`, clearing on dispose.\n *\n * > Previously each timer added and removed dispose listeners on it's own.\n * For better performance it was decided to batch them all, and use `Set`s\n * to track outstanding timer ids.\n *\n * @private\n */;_proto.clearTimersOnDispose_=function clearTimersOnDispose_(){var _this4=this;if(this.clearingTimersOnDispose_){return;}this.clearingTimersOnDispose_=true;this.one('dispose',function(){[['rafIds_','cancelAnimationFrame'],['setTimeoutIds_','clearTimeout'],['setIntervalIds_','clearInterval']].forEach(function(_ref){var idName=_ref[0],cancelName=_ref[1];_this4[idName].forEach(_this4[cancelName],_this4);});_this4.clearingTimersOnDispose_=false;});}/**\n * Register a `Component` with `videojs` given the name and the component.\n *\n * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s\n * should be registered using {@link Tech.registerTech} or\n * {@link videojs:videojs.registerTech}.\n *\n * > NOTE: This function can also be seen on videojs as\n * {@link videojs:videojs.registerComponent}.\n *\n * @param {string} name\n * The name of the `Component` to register.\n *\n * @param {Component} ComponentToRegister\n * The `Component` class to register.\n *\n * @return {Component}\n * The `Component` that was registered.\n */;Component.registerComponent=function registerComponent(name,ComponentToRegister){if(typeof name!=='string'||!name){throw new Error(\"Illegal component name, \\\"\"+name+\"\\\"; must be a non-empty string.\");}var Tech=Component.getComponent('Tech');// We need to make sure this check is only done if Tech has been registered.\nvar isTech=Tech&&Tech.isTech(ComponentToRegister);var isComp=Component===ComponentToRegister||Component.prototype.isPrototypeOf(ComponentToRegister.prototype);if(isTech||!isComp){var reason;if(isTech){reason='techs must be registered using Tech.registerTech()';}else{reason='must be a Component subclass';}throw new Error(\"Illegal component, \\\"\"+name+\"\\\"; \"+reason+\".\");}name=toTitleCase(name);if(!Component.components_){Component.components_={};}var Player=Component.getComponent('Player');if(name==='Player'&&Player&&Player.players){var players=Player.players;var playerNames=Object.keys(players);// If we have players that were disposed, then their name will still be\n// in Players.players. So, we must loop through and verify that the value\n// for each item is not null. This allows registration of the Player component\n// after all players have been disposed or before any were created.\nif(players&&playerNames.length>0&&playerNames.map(function(pname){return players[pname];}).every(Boolean)){throw new Error('Can not register Player component after player has been created.');}}Component.components_[name]=ComponentToRegister;Component.components_[toLowerCase(name)]=ComponentToRegister;return ComponentToRegister;}/**\n * Get a `Component` based on the name it was registered with.\n *\n * @param {string} name\n * The Name of the component to get.\n *\n * @return {Component}\n * The `Component` that got registered under the given name.\n *\n * @deprecated In `videojs` 6 this will not return `Component`s that were not\n * registered using {@link Component.registerComponent}. Currently we\n * check the global `videojs` object for a `Component` name and\n * return that if it exists.\n */;Component.getComponent=function getComponent(name){if(!name||!Component.components_){return;}return Component.components_[name];};return Component;}();/**\n * Whether or not this component supports `requestAnimationFrame`.\n *\n * This is exposed primarily for testing purposes.\n *\n * @private\n * @type {Boolean}\n */Component.prototype.supportsRaf_=typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.requestAnimationFrame==='function'&&typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.cancelAnimationFrame==='function';Component.registerComponent('Component',Component);function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype);subClass.prototype.constructor=subClass;subClass.__proto__=superClass;}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function isNativeReflectConstruct(){if(typeof Reflect===\"undefined\"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy===\"function\")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _construct(Parent,args,Class){if(isNativeReflectConstruct()){_construct=Reflect.construct;}else{_construct=function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor();if(Class)_setPrototypeOf(instance,Class.prototype);return instance;};}return _construct.apply(null,arguments);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return self;}/**\n * @file browser.js\n * @module browser\n */var USER_AGENT=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator.userAgent||'';var webkitVersionMap=/AppleWebKit\\/([\\d.]+)/i.exec(USER_AGENT);var appleWebkitVersion=webkitVersionMap?parseFloat(webkitVersionMap.pop()):null;/**\n * Whether or not this device is an iPad.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_IPAD=/iPad/i.test(USER_AGENT);/**\n * Whether or not this device is an iPhone.\n *\n * @static\n * @const\n * @type {Boolean}\n */ // The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\nvar IS_IPHONE=/iPhone/i.test(USER_AGENT)&&!IS_IPAD;/**\n * Whether or not this device is an iPod.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_IPOD=/iPod/i.test(USER_AGENT);/**\n * Whether or not this is an iOS device.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_IOS=IS_IPHONE||IS_IPAD||IS_IPOD;/**\n * The detected iOS version - or `null`.\n *\n * @static\n * @const\n * @type {string|null}\n */var IOS_VERSION=function(){var match=USER_AGENT.match(/OS (\\d+)_/i);if(match&&match[1]){return match[1];}return null;}();/**\n * Whether or not this is an Android device.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_ANDROID=/Android/i.test(USER_AGENT);/**\n * The detected Android version - or `null`.\n *\n * @static\n * @const\n * @type {number|string|null}\n */var ANDROID_VERSION=function(){// This matches Android Major.Minor.Patch versions\n// ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\nvar match=USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i);if(!match){return null;}var major=match[1]&&parseFloat(match[1]);var minor=match[2]&&parseFloat(match[2]);if(major&&minor){return parseFloat(match[1]+'.'+match[2]);}else if(major){return major;}return null;}();/**\n * Whether or not this is a native Android browser.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_NATIVE_ANDROID=IS_ANDROID&&ANDROID_VERSION<5&&appleWebkitVersion<537;/**\n * Whether or not this is Mozilla Firefox.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_FIREFOX=/Firefox/i.test(USER_AGENT);/**\n * Whether or not this is Microsoft Edge.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_EDGE=/Edge/i.test(USER_AGENT);/**\n * Whether or not this is Google Chrome.\n *\n * This will also be `true` for Chrome on iOS, which will have different support\n * as it is actually Safari under the hood.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_CHROME=!IS_EDGE&&(/Chrome/i.test(USER_AGENT)||/CriOS/i.test(USER_AGENT));/**\n * The detected Google Chrome version - or `null`.\n *\n * @static\n * @const\n * @type {number|null}\n */var CHROME_VERSION=function(){var match=USER_AGENT.match(/(Chrome|CriOS)\\/(\\d+)/);if(match&&match[2]){return parseFloat(match[2]);}return null;}();/**\n * The detected Internet Explorer version - or `null`.\n *\n * @static\n * @const\n * @type {number|null}\n */var IE_VERSION=function(){var result=/MSIE\\s(\\d+)\\.\\d/.exec(USER_AGENT);var version=result&&parseFloat(result[1]);if(!version&&/Trident\\/7.0/i.test(USER_AGENT)&&/rv:11.0/.test(USER_AGENT)){// IE 11 has a different user agent string than other IE versions\nversion=11.0;}return version;}();/**\n * Whether or not this is desktop Safari.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_SAFARI=/Safari/i.test(USER_AGENT)&&!IS_CHROME&&!IS_ANDROID&&!IS_EDGE;/**\n * Whether or not this is any flavor of Safari - including iOS.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_ANY_SAFARI=(IS_SAFARI||IS_IOS)&&!IS_CHROME;/**\n * Whether or not this is a Windows machine.\n *\n * @static\n * @const\n * @type {Boolean}\n */var IS_WINDOWS=/Windows/i.test(USER_AGENT);/**\n * Whether or not this device is touch-enabled.\n *\n * @static\n * @const\n * @type {Boolean}\n */var TOUCH_ENABLED=isReal()&&('ontouchstart'in global_window__WEBPACK_IMPORTED_MODULE_0___default.a||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator.maxTouchPoints||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.DocumentTouch&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.document instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.DocumentTouch);var browser=/*#__PURE__*/Object.freeze({IS_IPAD:IS_IPAD,IS_IPHONE:IS_IPHONE,IS_IPOD:IS_IPOD,IS_IOS:IS_IOS,IOS_VERSION:IOS_VERSION,IS_ANDROID:IS_ANDROID,ANDROID_VERSION:ANDROID_VERSION,IS_NATIVE_ANDROID:IS_NATIVE_ANDROID,IS_FIREFOX:IS_FIREFOX,IS_EDGE:IS_EDGE,IS_CHROME:IS_CHROME,CHROME_VERSION:CHROME_VERSION,IE_VERSION:IE_VERSION,IS_SAFARI:IS_SAFARI,IS_ANY_SAFARI:IS_ANY_SAFARI,IS_WINDOWS:IS_WINDOWS,TOUCH_ENABLED:TOUCH_ENABLED});/**\n * @file time-ranges.js\n * @module time-ranges\n */ /**\n * Returns the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @typedef {Function} TimeRangeIndex\n *\n * @param {number} [index=0]\n * The range number to return the time for.\n *\n * @return {number}\n * The time offset at the specified index.\n *\n * @deprecated The index argument must be provided.\n * In the future, leaving it out will throw an error.\n */ /**\n * An object that contains ranges of time.\n *\n * @typedef {Object} TimeRange\n *\n * @property {number} length\n * The number of time ranges represented by this object.\n *\n * @property {module:time-ranges~TimeRangeIndex} start\n * Returns the time offset at which a specified time range begins.\n *\n * @property {module:time-ranges~TimeRangeIndex} end\n * Returns the time offset at which a specified time range ends.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges\n */ /**\n * Check if any of the time ranges are over the maximum index.\n *\n * @private\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {number} index\n * The index to check\n *\n * @param {number} maxIndex\n * The maximum possible index\n *\n * @throws {Error} if the timeRanges provided are over the maxIndex\n */function rangeCheck(fnName,index,maxIndex){if(typeof index!=='number'||index<0||index>maxIndex){throw new Error(\"Failed to execute '\"+fnName+\"' on 'TimeRanges': The index provided (\"+index+\") is non-numeric or out of bounds (0-\"+maxIndex+\").\");}}/**\n * Get the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @private\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {string} valueIndex\n * The property that should be used to get the time. should be\n * 'start' or 'end'\n *\n * @param {Array} ranges\n * An array of time ranges\n *\n * @param {Array} [rangeIndex=0]\n * The index to start the search at\n *\n * @return {number}\n * The time that offset at the specified index.\n *\n * @deprecated rangeIndex must be set to a value, in the future this will throw an error.\n * @throws {Error} if rangeIndex is more than the length of ranges\n */function getRange(fnName,valueIndex,ranges,rangeIndex){rangeCheck(fnName,rangeIndex,ranges.length-1);return ranges[rangeIndex][valueIndex];}/**\n * Create a time range object given ranges of time.\n *\n * @private\n * @param {Array} [ranges]\n * An array of time ranges.\n */function createTimeRangesObj(ranges){if(ranges===undefined||ranges.length===0){return{length:0,start:function start(){throw new Error('This TimeRanges object is empty');},end:function end(){throw new Error('This TimeRanges object is empty');}};}return{length:ranges.length,start:getRange.bind(null,'start',0,ranges),end:getRange.bind(null,'end',1,ranges)};}/**\n * Create a `TimeRange` object which mimics an\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges instance}.\n *\n * @param {number|Array[]} start\n * The start of a single range (a number) or an array of ranges (an\n * array of arrays of two numbers each).\n *\n * @param {number} end\n * The end of a single range. Cannot be used with the array form of\n * the `start` argument.\n */function createTimeRanges(start,end){if(Array.isArray(start)){return createTimeRangesObj(start);}else if(start===undefined||end===undefined){return createTimeRangesObj();}return createTimeRangesObj([[start,end]]);}/**\n * @file buffer.js\n * @module buffer\n */ /**\n * Compute the percentage of the media that has been buffered.\n *\n * @param {TimeRange} buffered\n * The current `TimeRange` object representing buffered time ranges\n *\n * @param {number} duration\n * Total duration of the media\n *\n * @return {number}\n * Percent buffered of the total duration in decimal form.\n */function bufferedPercent(buffered,duration){var bufferedDuration=0;var start;var end;if(!duration){return 0;}if(!buffered||!buffered.length){buffered=createTimeRanges(0,0);}for(var i=0;i<buffered.length;i++){start=buffered.start(i);end=buffered.end(i);// buffered end can be bigger than duration by a very small fraction\nif(end>duration){end=duration;}bufferedDuration+=end-start;}return bufferedDuration/duration;}/**\n * @file fullscreen-api.js\n * @module fullscreen-api\n * @private\n */ /**\n * Store the browser-specific methods for the fullscreen API.\n *\n * @type {Object}\n * @see [Specification]{@link https://fullscreen.spec.whatwg.org}\n * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js}\n */var FullscreenApi={prefixed:true};// browser API methods\nvar apiMap=[['requestFullscreen','exitFullscreen','fullscreenElement','fullscreenEnabled','fullscreenchange','fullscreenerror','fullscreen'],// WebKit\n['webkitRequestFullscreen','webkitExitFullscreen','webkitFullscreenElement','webkitFullscreenEnabled','webkitfullscreenchange','webkitfullscreenerror','-webkit-full-screen'],// Mozilla\n['mozRequestFullScreen','mozCancelFullScreen','mozFullScreenElement','mozFullScreenEnabled','mozfullscreenchange','mozfullscreenerror','-moz-full-screen'],// Microsoft\n['msRequestFullscreen','msExitFullscreen','msFullscreenElement','msFullscreenEnabled','MSFullscreenChange','MSFullscreenError','-ms-fullscreen']];var specApi=apiMap[0];var browserApi;// determine the supported set of functions\nfor(var i=0;i<apiMap.length;i++){// check for exitFullscreen function\nif(apiMap[i][1]in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){browserApi=apiMap[i];break;}}// map the browser API names to the spec API names\nif(browserApi){for(var _i=0;_i<browserApi.length;_i++){FullscreenApi[specApi[_i]]=browserApi[_i];}FullscreenApi.prefixed=browserApi[0]!==specApi[0];}/**\n * @file media-error.js\n */ /**\n * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class.\n *\n * @param {number|string|Object|MediaError} value\n * This can be of multiple types:\n * - number: should be a standard error code\n * - string: an error message (the code will be 0)\n * - Object: arbitrary properties\n * - `MediaError` (native): used to populate a video.js `MediaError` object\n * - `MediaError` (video.js): will return itself if it's already a\n * video.js `MediaError` object.\n *\n * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}\n * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}\n *\n * @class MediaError\n */function MediaError(value){// Allow redundant calls to this constructor to avoid having `instanceof`\n// checks peppered around the code.\nif(value instanceof MediaError){return value;}if(typeof value==='number'){this.code=value;}else if(typeof value==='string'){// default code is zero, so this is a custom error\nthis.message=value;}else if(isObject(value)){// We assign the `code` property manually because native `MediaError` objects\n// do not expose it as an own/enumerable property of the object.\nif(typeof value.code==='number'){this.code=value.code;}assign(this,value);}if(!this.message){this.message=MediaError.defaultMessages[this.code]||'';}}/**\n * The error code that refers two one of the defined `MediaError` types\n *\n * @type {Number}\n */MediaError.prototype.code=0;/**\n * An optional message that to show with the error. Message is not part of the HTML5\n * video spec but allows for more informative custom errors.\n *\n * @type {String}\n */MediaError.prototype.message='';/**\n * An optional status code that can be set by plugins to allow even more detail about\n * the error. For example a plugin might provide a specific HTTP status code and an\n * error message for that code. Then when the plugin gets that error this class will\n * know how to display an error message for it. This allows a custom message to show\n * up on the `Player` error overlay.\n *\n * @type {Array}\n */MediaError.prototype.status=null;/**\n * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the\n * specification listed under {@link MediaError} for more information.\n *\n * @enum {array}\n * @readonly\n * @property {string} 0 - MEDIA_ERR_CUSTOM\n * @property {string} 1 - MEDIA_ERR_ABORTED\n * @property {string} 2 - MEDIA_ERR_NETWORK\n * @property {string} 3 - MEDIA_ERR_DECODE\n * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED\n * @property {string} 5 - MEDIA_ERR_ENCRYPTED\n */MediaError.errorTypes=['MEDIA_ERR_CUSTOM','MEDIA_ERR_ABORTED','MEDIA_ERR_NETWORK','MEDIA_ERR_DECODE','MEDIA_ERR_SRC_NOT_SUPPORTED','MEDIA_ERR_ENCRYPTED'];/**\n * The default `MediaError` messages based on the {@link MediaError.errorTypes}.\n *\n * @type {Array}\n * @constant\n */MediaError.defaultMessages={1:'You aborted the media playback',2:'A network error caused the media download to fail part-way.',3:'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',4:'The media could not be loaded, either because the server or network failed or because the format is not supported.',5:'The media is encrypted and we do not have the keys to decrypt it.'};// Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\nfor(var errNum=0;errNum<MediaError.errorTypes.length;errNum++){MediaError[MediaError.errorTypes[errNum]]=errNum;// values should be accessible on both the class and instance\nMediaError.prototype[MediaError.errorTypes[errNum]]=errNum;}// jsdocs for instance/static members added above\n/**\n * Returns whether an object is `Promise`-like (i.e. has a `then` method).\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n *\n * @return {boolean}\n * Whether or not the object is `Promise`-like.\n */function isPromise(value){return value!==undefined&&value!==null&&typeof value.then==='function';}/**\n * Silence a Promise-like object.\n *\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n */function silencePromise(value){if(isPromise(value)){value.then(null,function(e){});}}/**\n * @file text-track-list-converter.js Utilities for capturing text track state and\n * re-creating tracks based on a capture.\n *\n * @module text-track-list-converter\n */ /**\n * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that\n * represents the {@link TextTrack}'s state.\n *\n * @param {TextTrack} track\n * The text track to query.\n *\n * @return {Object}\n * A serializable javascript representation of the TextTrack.\n * @private\n */var trackToJson_=function trackToJson_(track){var ret=['kind','label','language','id','inBandMetadataTrackDispatchType','mode','src'].reduce(function(acc,prop,i){if(track[prop]){acc[prop]=track[prop];}return acc;},{cues:track.cues&&Array.prototype.map.call(track.cues,function(cue){return{startTime:cue.startTime,endTime:cue.endTime,text:cue.text,id:cue.id};})});return ret;};/**\n * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the\n * state of all {@link TextTrack}s currently configured. The return array is compatible with\n * {@link text-track-list-converter:jsonToTextTracks}.\n *\n * @param {Tech} tech\n * The tech object to query\n *\n * @return {Array}\n * A serializable javascript representation of the {@link Tech}s\n * {@link TextTrackList}.\n */var textTracksToJson=function textTracksToJson(tech){var trackEls=tech.$$('track');var trackObjs=Array.prototype.map.call(trackEls,function(t){return t.track;});var tracks=Array.prototype.map.call(trackEls,function(trackEl){var json=trackToJson_(trackEl.track);if(trackEl.src){json.src=trackEl.src;}return json;});return tracks.concat(Array.prototype.filter.call(tech.textTracks(),function(track){return trackObjs.indexOf(track)===-1;}).map(trackToJson_));};/**\n * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript\n * object {@link TextTrack} representations.\n *\n * @param {Array} json\n * An array of `TextTrack` representation objects, like those that would be\n * produced by `textTracksToJson`.\n *\n * @param {Tech} tech\n * The `Tech` to create the `TextTrack`s on.\n */var jsonToTextTracks=function jsonToTextTracks(json,tech){json.forEach(function(track){var addedTrack=tech.addRemoteTextTrack(track).track;if(!track.src&&track.cues){track.cues.forEach(function(cue){return addedTrack.addCue(cue);});}});return tech.textTracks();};var textTrackConverter={textTracksToJson:textTracksToJson,jsonToTextTracks:jsonToTextTracks,trackToJson_:trackToJson_};var MODAL_CLASS_NAME='vjs-modal-dialog';/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n */var ModalDialog=/*#__PURE__*/function(_Component){_inheritsLoose(ModalDialog,_Component);/**\n * Create an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Mixed} [options.content=undefined]\n * Provide customized content for this modal.\n *\n * @param {string} [options.description]\n * A text description for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.fillAlways=false]\n * Normally, modals are automatically filled only the first time\n * they open. This tells the modal to refresh its content\n * every time it opens.\n *\n * @param {string} [options.label]\n * A text label for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.pauseOnOpen=true]\n * If `true`, playback will will be paused if playing when\n * the modal opens, and resumed when it closes.\n *\n * @param {boolean} [options.temporary=true]\n * If `true`, the modal can only be opened once; it will be\n * disposed as soon as it's closed.\n *\n * @param {boolean} [options.uncloseable=false]\n * If `true`, the user will not be able to close the modal\n * through the UI in the normal ways. Programmatic closing is\n * still possible.\n */function ModalDialog(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.opened_=_this.hasBeenOpened_=_this.hasBeenFilled_=false;_this.closeable(!_this.options_.uncloseable);_this.content(_this.options_.content);// Make sure the contentEl is defined AFTER any children are initialized\n// because we only want the contents of the modal in the contentEl\n// (not the UI elements like the close button).\n_this.contentEl_=createEl('div',{className:MODAL_CLASS_NAME+\"-content\"},{role:'document'});_this.descEl_=createEl('p',{className:MODAL_CLASS_NAME+\"-description vjs-control-text\",id:_this.el().getAttribute('aria-describedby')});textContent(_this.descEl_,_this.description());_this.el_.appendChild(_this.descEl_);_this.el_.appendChild(_this.contentEl_);return _this;}/**\n * Create the `ModalDialog`'s DOM element\n *\n * @return {Element}\n * The DOM element that gets created.\n */var _proto=ModalDialog.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:this.buildCSSClass(),tabIndex:-1},{'aria-describedby':this.id()+\"_description\",'aria-hidden':'true','aria-label':this.label(),'role':'dialog'});};_proto.dispose=function dispose(){this.contentEl_=null;this.descEl_=null;this.previouslyActiveEl_=null;_Component.prototype.dispose.call(this);}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */;_proto.buildCSSClass=function buildCSSClass(){return MODAL_CLASS_NAME+\" vjs-hidden \"+_Component.prototype.buildCSSClass.call(this);}/**\n * Returns the label string for this modal. Primarily used for accessibility.\n *\n * @return {string}\n * the localized or raw label of this modal.\n */;_proto.label=function label(){return this.localize(this.options_.label||'Modal Window');}/**\n * Returns the description string for this modal. Primarily used for\n * accessibility.\n *\n * @return {string}\n * The localized or raw description of this modal.\n */;_proto.description=function description(){var desc=this.options_.description||this.localize('This is a modal window.');// Append a universal closeability message if the modal is closeable.\nif(this.closeable()){desc+=' '+this.localize('This modal can be closed by pressing the Escape key or activating the close button.');}return desc;}/**\n * Opens the modal.\n *\n * @fires ModalDialog#beforemodalopen\n * @fires ModalDialog#modalopen\n */;_proto.open=function open(){if(!this.opened_){var player=this.player();/**\n * Fired just before a `ModalDialog` is opened.\n *\n * @event ModalDialog#beforemodalopen\n * @type {EventTarget~Event}\n */this.trigger('beforemodalopen');this.opened_=true;// Fill content if the modal has never opened before and\n// never been filled.\nif(this.options_.fillAlways||!this.hasBeenOpened_&&!this.hasBeenFilled_){this.fill();}// If the player was playing, pause it and take note of its previously\n// playing state.\nthis.wasPlaying_=!player.paused();if(this.options_.pauseOnOpen&&this.wasPlaying_){player.pause();}this.on('keydown',this.handleKeyDown);// Hide controls and note if they were enabled.\nthis.hadControls_=player.controls();player.controls(false);this.show();this.conditionalFocus_();this.el().setAttribute('aria-hidden','false');/**\n * Fired just after a `ModalDialog` is opened.\n *\n * @event ModalDialog#modalopen\n * @type {EventTarget~Event}\n */this.trigger('modalopen');this.hasBeenOpened_=true;}}/**\n * If the `ModalDialog` is currently open or closed.\n *\n * @param {boolean} [value]\n * If given, it will open (`true`) or close (`false`) the modal.\n *\n * @return {boolean}\n * the current open state of the modaldialog\n */;_proto.opened=function opened(value){if(typeof value==='boolean'){this[value?'open':'close']();}return this.opened_;}/**\n * Closes the modal, does nothing if the `ModalDialog` is\n * not open.\n *\n * @fires ModalDialog#beforemodalclose\n * @fires ModalDialog#modalclose\n */;_proto.close=function close(){if(!this.opened_){return;}var player=this.player();/**\n * Fired just before a `ModalDialog` is closed.\n *\n * @event ModalDialog#beforemodalclose\n * @type {EventTarget~Event}\n */this.trigger('beforemodalclose');this.opened_=false;if(this.wasPlaying_&&this.options_.pauseOnOpen){player.play();}this.off('keydown',this.handleKeyDown);if(this.hadControls_){player.controls(true);}this.hide();this.el().setAttribute('aria-hidden','true');/**\n * Fired just after a `ModalDialog` is closed.\n *\n * @event ModalDialog#modalclose\n * @type {EventTarget~Event}\n */this.trigger('modalclose');this.conditionalBlur_();if(this.options_.temporary){this.dispose();}}/**\n * Check to see if the `ModalDialog` is closeable via the UI.\n *\n * @param {boolean} [value]\n * If given as a boolean, it will set the `closeable` option.\n *\n * @return {boolean}\n * Returns the final value of the closable option.\n */;_proto.closeable=function closeable(value){if(typeof value==='boolean'){var closeable=this.closeable_=!!value;var close=this.getChild('closeButton');// If this is being made closeable and has no close button, add one.\nif(closeable&&!close){// The close button should be a child of the modal - not its\n// content element, so temporarily change the content element.\nvar temp=this.contentEl_;this.contentEl_=this.el_;close=this.addChild('closeButton',{controlText:'Close Modal Dialog'});this.contentEl_=temp;this.on(close,'close',this.close);}// If this is being made uncloseable and has a close button, remove it.\nif(!closeable&&close){this.off(close,'close',this.close);this.removeChild(close);close.dispose();}}return this.closeable_;}/**\n * Fill the modal's content element with the modal's \"content\" option.\n * The content element will be emptied before this change takes place.\n */;_proto.fill=function fill(){this.fillWith(this.content());}/**\n * Fill the modal's content element with arbitrary content.\n * The content element will be emptied before this change takes place.\n *\n * @fires ModalDialog#beforemodalfill\n * @fires ModalDialog#modalfill\n *\n * @param {Mixed} [content]\n * The same rules apply to this as apply to the `content` option.\n */;_proto.fillWith=function fillWith(content){var contentEl=this.contentEl();var parentEl=contentEl.parentNode;var nextSiblingEl=contentEl.nextSibling;/**\n * Fired just before a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#beforemodalfill\n * @type {EventTarget~Event}\n */this.trigger('beforemodalfill');this.hasBeenFilled_=true;// Detach the content element from the DOM before performing\n// manipulation to avoid modifying the live DOM multiple times.\nparentEl.removeChild(contentEl);this.empty();insertContent(contentEl,content);/**\n * Fired just after a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#modalfill\n * @type {EventTarget~Event}\n */this.trigger('modalfill');// Re-inject the re-filled content element.\nif(nextSiblingEl){parentEl.insertBefore(contentEl,nextSiblingEl);}else{parentEl.appendChild(contentEl);}// make sure that the close button is last in the dialog DOM\nvar closeButton=this.getChild('closeButton');if(closeButton){parentEl.appendChild(closeButton.el_);}}/**\n * Empties the content element. This happens anytime the modal is filled.\n *\n * @fires ModalDialog#beforemodalempty\n * @fires ModalDialog#modalempty\n */;_proto.empty=function empty(){/**\n * Fired just before a `ModalDialog` is emptied.\n *\n * @event ModalDialog#beforemodalempty\n * @type {EventTarget~Event}\n */this.trigger('beforemodalempty');emptyEl(this.contentEl());/**\n * Fired just after a `ModalDialog` is emptied.\n *\n * @event ModalDialog#modalempty\n * @type {EventTarget~Event}\n */this.trigger('modalempty');}/**\n * Gets or sets the modal content, which gets normalized before being\n * rendered into the DOM.\n *\n * This does not update the DOM or fill the modal, but it is called during\n * that process.\n *\n * @param {Mixed} [value]\n * If defined, sets the internal content value to be used on the\n * next call(s) to `fill`. This value is normalized before being\n * inserted. To \"clear\" the internal content value, pass `null`.\n *\n * @return {Mixed}\n * The current content of the modal dialog\n */;_proto.content=function content(value){if(typeof value!=='undefined'){this.content_=value;}return this.content_;}/**\n * conditionally focus the modal dialog if focus was previously on the player.\n *\n * @private\n */;_proto.conditionalFocus_=function conditionalFocus_(){var activeEl=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.activeElement;var playerEl=this.player_.el_;this.previouslyActiveEl_=null;if(playerEl.contains(activeEl)||playerEl===activeEl){this.previouslyActiveEl_=activeEl;this.focus();}}/**\n * conditionally blur the element and refocus the last focused element\n *\n * @private\n */;_proto.conditionalBlur_=function conditionalBlur_(){if(this.previouslyActiveEl_){this.previouslyActiveEl_.focus();this.previouslyActiveEl_=null;}}/**\n * Keydown handler. Attached when modal is focused.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Do not allow keydowns to reach out of the modal dialog.\nevent.stopPropagation();if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Escape')&&this.closeable()){event.preventDefault();this.close();return;}// exit early if it isn't a tab key\nif(!keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){return;}var focusableEls=this.focusableEls_();var activeEl=this.el_.querySelector(':focus');var focusIndex;for(var i=0;i<focusableEls.length;i++){if(activeEl===focusableEls[i]){focusIndex=i;break;}}if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.activeElement===this.el_){focusIndex=0;}if(event.shiftKey&&focusIndex===0){focusableEls[focusableEls.length-1].focus();event.preventDefault();}else if(!event.shiftKey&&focusIndex===focusableEls.length-1){focusableEls[0].focus();event.preventDefault();}}/**\n * get all focusable elements\n *\n * @private\n */;_proto.focusableEls_=function focusableEls_(){var allChildren=this.el_.querySelectorAll('*');return Array.prototype.filter.call(allChildren,function(child){return(child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLAnchorElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLAreaElement)&&child.hasAttribute('href')||(child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLInputElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLSelectElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLTextAreaElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLButtonElement)&&!child.hasAttribute('disabled')||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLIFrameElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLObjectElement||child instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLEmbedElement||child.hasAttribute('tabindex')&&child.getAttribute('tabindex')!==-1||child.hasAttribute('contenteditable');});};return ModalDialog;}(Component);/**\n * Default options for `ModalDialog` default options.\n *\n * @type {Object}\n * @private\n */ModalDialog.prototype.options_={pauseOnOpen:true,temporary:true};Component.registerComponent('ModalDialog',ModalDialog);/**\n * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and\n * {@link VideoTrackList}\n *\n * @extends EventTarget\n */var TrackList=/*#__PURE__*/function(_EventTarget){_inheritsLoose(TrackList,_EventTarget);/**\n * Create an instance of this class\n *\n * @param {Track[]} tracks\n * A list of tracks to initialize the list with.\n *\n * @abstract\n */function TrackList(tracks){var _this;if(tracks===void 0){tracks=[];}_this=_EventTarget.call(this)||this;_this.tracks_=[];/**\n * @memberof TrackList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */Object.defineProperty(_assertThisInitialized(_this),'length',{get:function get(){return this.tracks_.length;}});for(var i=0;i<tracks.length;i++){_this.addTrack(tracks[i]);}return _this;}/**\n * Add a {@link Track} to the `TrackList`\n *\n * @param {Track} track\n * The audio, video, or text track to add to the list.\n *\n * @fires TrackList#addtrack\n */var _proto=TrackList.prototype;_proto.addTrack=function addTrack(track){var index=this.tracks_.length;if(!(''+index in this)){Object.defineProperty(this,index,{get:function get(){return this.tracks_[index];}});}// Do not add duplicate tracks\nif(this.tracks_.indexOf(track)===-1){this.tracks_.push(track);/**\n * Triggered when a track is added to a track list.\n *\n * @event TrackList#addtrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was added.\n */this.trigger({track:track,type:'addtrack',target:this});}}/**\n * Remove a {@link Track} from the `TrackList`\n *\n * @param {Track} rtrack\n * The audio, video, or text track to remove from the list.\n *\n * @fires TrackList#removetrack\n */;_proto.removeTrack=function removeTrack(rtrack){var track;for(var i=0,l=this.length;i<l;i++){if(this[i]===rtrack){track=this[i];if(track.off){track.off();}this.tracks_.splice(i,1);break;}}if(!track){return;}/**\n * Triggered when a track is removed from track list.\n *\n * @event TrackList#removetrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was removed.\n */this.trigger({track:track,type:'removetrack',target:this});}/**\n * Get a Track from the TrackList by a tracks id\n *\n * @param {string} id - the id of the track to get\n * @method getTrackById\n * @return {Track}\n * @private\n */;_proto.getTrackById=function getTrackById(id){var result=null;for(var i=0,l=this.length;i<l;i++){var track=this[i];if(track.id===id){result=track;break;}}return result;};return TrackList;}(EventTarget);/**\n * Triggered when a different track is selected/enabled.\n *\n * @event TrackList#change\n * @type {EventTarget~Event}\n */ /**\n * Events that can be called with on + eventName. See {@link EventHandler}.\n *\n * @property {Object} TrackList#allowedEvents_\n * @private\n */TrackList.prototype.allowedEvents_={change:'change',addtrack:'addtrack',removetrack:'removetrack'};// emulate attribute EventHandler support to allow for feature detection\nfor(var event in TrackList.prototype.allowedEvents_){TrackList.prototype['on'+event]=null;}/**\n * Anywhere we call this function we diverge from the spec\n * as we only support one enabled audiotrack at a time\n *\n * @param {AudioTrackList} list\n * list to work on\n *\n * @param {AudioTrack} track\n * The track to skip\n *\n * @private\n */var disableOthers=function disableOthers(list,track){for(var i=0;i<list.length;i++){if(!Object.keys(list[i]).length||track.id===list[i].id){continue;}// another audio track is enabled, disable it\nlist[i].enabled=false;}};/**\n * The current list of {@link AudioTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}\n * @extends TrackList\n */var AudioTrackList=/*#__PURE__*/function(_TrackList){_inheritsLoose(AudioTrackList,_TrackList);/**\n * Create an instance of this class.\n *\n * @param {AudioTrack[]} [tracks=[]]\n * A list of `AudioTrack` to instantiate the list with.\n */function AudioTrackList(tracks){var _this;if(tracks===void 0){tracks=[];}// make sure only 1 track is enabled\n// sorted from last index to first index\nfor(var i=tracks.length-1;i>=0;i--){if(tracks[i].enabled){disableOthers(tracks,tracks[i]);break;}}_this=_TrackList.call(this,tracks)||this;_this.changing_=false;return _this;}/**\n * Add an {@link AudioTrack} to the `AudioTrackList`.\n *\n * @param {AudioTrack} track\n * The AudioTrack to add to the list\n *\n * @fires TrackList#addtrack\n */var _proto=AudioTrackList.prototype;_proto.addTrack=function addTrack(track){var _this2=this;if(track.enabled){disableOthers(this,track);}_TrackList.prototype.addTrack.call(this,track);// native tracks don't have this\nif(!track.addEventListener){return;}track.enabledChange_=function(){// when we are disabling other tracks (since we don't support\n// more than one track at a time) we will set changing_\n// to true so that we don't trigger additional change events\nif(_this2.changing_){return;}_this2.changing_=true;disableOthers(_this2,track);_this2.changing_=false;_this2.trigger('change');};/**\n * @listens AudioTrack#enabledchange\n * @fires TrackList#change\n */track.addEventListener('enabledchange',track.enabledChange_);};_proto.removeTrack=function removeTrack(rtrack){_TrackList.prototype.removeTrack.call(this,rtrack);if(rtrack.removeEventListener&&rtrack.enabledChange_){rtrack.removeEventListener('enabledchange',rtrack.enabledChange_);rtrack.enabledChange_=null;}};return AudioTrackList;}(TrackList);/**\n * Un-select all other {@link VideoTrack}s that are selected.\n *\n * @param {VideoTrackList} list\n * list to work on\n *\n * @param {VideoTrack} track\n * The track to skip\n *\n * @private\n */var disableOthers$1=function disableOthers(list,track){for(var i=0;i<list.length;i++){if(!Object.keys(list[i]).length||track.id===list[i].id){continue;}// another video track is enabled, disable it\nlist[i].selected=false;}};/**\n * The current list of {@link VideoTrack} for a video.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}\n * @extends TrackList\n */var VideoTrackList=/*#__PURE__*/function(_TrackList){_inheritsLoose(VideoTrackList,_TrackList);/**\n * Create an instance of this class.\n *\n * @param {VideoTrack[]} [tracks=[]]\n * A list of `VideoTrack` to instantiate the list with.\n */function VideoTrackList(tracks){var _this;if(tracks===void 0){tracks=[];}// make sure only 1 track is enabled\n// sorted from last index to first index\nfor(var i=tracks.length-1;i>=0;i--){if(tracks[i].selected){disableOthers$1(tracks,tracks[i]);break;}}_this=_TrackList.call(this,tracks)||this;_this.changing_=false;/**\n * @member {number} VideoTrackList#selectedIndex\n * The current index of the selected {@link VideoTrack`}.\n */Object.defineProperty(_assertThisInitialized(_this),'selectedIndex',{get:function get(){for(var _i=0;_i<this.length;_i++){if(this[_i].selected){return _i;}}return-1;},set:function set(){}});return _this;}/**\n * Add a {@link VideoTrack} to the `VideoTrackList`.\n *\n * @param {VideoTrack} track\n * The VideoTrack to add to the list\n *\n * @fires TrackList#addtrack\n */var _proto=VideoTrackList.prototype;_proto.addTrack=function addTrack(track){var _this2=this;if(track.selected){disableOthers$1(this,track);}_TrackList.prototype.addTrack.call(this,track);// native tracks don't have this\nif(!track.addEventListener){return;}track.selectedChange_=function(){if(_this2.changing_){return;}_this2.changing_=true;disableOthers$1(_this2,track);_this2.changing_=false;_this2.trigger('change');};/**\n * @listens VideoTrack#selectedchange\n * @fires TrackList#change\n */track.addEventListener('selectedchange',track.selectedChange_);};_proto.removeTrack=function removeTrack(rtrack){_TrackList.prototype.removeTrack.call(this,rtrack);if(rtrack.removeEventListener&&rtrack.selectedChange_){rtrack.removeEventListener('selectedchange',rtrack.selectedChange_);rtrack.selectedChange_=null;}};return VideoTrackList;}(TrackList);/**\n * The current list of {@link TextTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist}\n * @extends TrackList\n */var TextTrackList=/*#__PURE__*/function(_TrackList){_inheritsLoose(TextTrackList,_TrackList);function TextTrackList(){return _TrackList.apply(this,arguments)||this;}var _proto=TextTrackList.prototype;/**\n * Add a {@link TextTrack} to the `TextTrackList`\n *\n * @param {TextTrack} track\n * The text track to add to the list.\n *\n * @fires TrackList#addtrack\n */_proto.addTrack=function addTrack(track){var _this=this;_TrackList.prototype.addTrack.call(this,track);if(!this.queueChange_){this.queueChange_=function(){return _this.queueTrigger('change');};}if(!this.triggerSelectedlanguagechange){this.triggerSelectedlanguagechange_=function(){return _this.trigger('selectedlanguagechange');};}/**\n * @listens TextTrack#modechange\n * @fires TrackList#change\n */track.addEventListener('modechange',this.queueChange_);var nonLanguageTextTrackKind=['metadata','chapters'];if(nonLanguageTextTrackKind.indexOf(track.kind)===-1){track.addEventListener('modechange',this.triggerSelectedlanguagechange_);}};_proto.removeTrack=function removeTrack(rtrack){_TrackList.prototype.removeTrack.call(this,rtrack);// manually remove the event handlers we added\nif(rtrack.removeEventListener){if(this.queueChange_){rtrack.removeEventListener('modechange',this.queueChange_);}if(this.selectedlanguagechange_){rtrack.removeEventListener('modechange',this.triggerSelectedlanguagechange_);}}};return TextTrackList;}(TrackList);/**\n * @file html-track-element-list.js\n */ /**\n * The current list of {@link HtmlTrackElement}s.\n */var HtmlTrackElementList=/*#__PURE__*/function(){/**\n * Create an instance of this class.\n *\n * @param {HtmlTrackElement[]} [tracks=[]]\n * A list of `HtmlTrackElement` to instantiate the list with.\n */function HtmlTrackElementList(trackElements){if(trackElements===void 0){trackElements=[];}this.trackElements_=[];/**\n * @memberof HtmlTrackElementList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */Object.defineProperty(this,'length',{get:function get(){return this.trackElements_.length;}});for(var i=0,length=trackElements.length;i<length;i++){this.addTrackElement_(trackElements[i]);}}/**\n * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to add to the list.\n *\n * @private\n */var _proto=HtmlTrackElementList.prototype;_proto.addTrackElement_=function addTrackElement_(trackElement){var index=this.trackElements_.length;if(!(''+index in this)){Object.defineProperty(this,index,{get:function get(){return this.trackElements_[index];}});}// Do not add duplicate elements\nif(this.trackElements_.indexOf(trackElement)===-1){this.trackElements_.push(trackElement);}}/**\n * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an\n * {@link TextTrack}.\n *\n * @param {TextTrack} track\n * The track associated with a track element.\n *\n * @return {HtmlTrackElement|undefined}\n * The track element that was found or undefined.\n *\n * @private\n */;_proto.getTrackElementByTrack_=function getTrackElementByTrack_(track){var trackElement_;for(var i=0,length=this.trackElements_.length;i<length;i++){if(track===this.trackElements_[i].track){trackElement_=this.trackElements_[i];break;}}return trackElement_;}/**\n * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to remove from the list.\n *\n * @private\n */;_proto.removeTrackElement_=function removeTrackElement_(trackElement){for(var i=0,length=this.trackElements_.length;i<length;i++){if(trackElement===this.trackElements_[i]){if(this.trackElements_[i].track&&typeof this.trackElements_[i].track.off==='function'){this.trackElements_[i].track.off();}if(typeof this.trackElements_[i].off==='function'){this.trackElements_[i].off();}this.trackElements_.splice(i,1);break;}}};return HtmlTrackElementList;}();/**\n * @file text-track-cue-list.js\n */ /**\n * @typedef {Object} TextTrackCueList~TextTrackCue\n *\n * @property {string} id\n * The unique id for this text track cue\n *\n * @property {number} startTime\n * The start time for this text track cue\n *\n * @property {number} endTime\n * The end time for this text track cue\n *\n * @property {boolean} pauseOnExit\n * Pause when the end time is reached if true.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue}\n */ /**\n * A List of TextTrackCues.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist}\n */var TextTrackCueList=/*#__PURE__*/function(){/**\n * Create an instance of this class..\n *\n * @param {Array} cues\n * A list of cues to be initialized with\n */function TextTrackCueList(cues){TextTrackCueList.prototype.setCues_.call(this,cues);/**\n * @memberof TextTrackCueList\n * @member {number} length\n * The current number of `TextTrackCue`s in the TextTrackCueList.\n * @instance\n */Object.defineProperty(this,'length',{get:function get(){return this.length_;}});}/**\n * A setter for cues in this list. Creates getters\n * an an index for the cues.\n *\n * @param {Array} cues\n * An array of cues to set\n *\n * @private\n */var _proto=TextTrackCueList.prototype;_proto.setCues_=function setCues_(cues){var oldLength=this.length||0;var i=0;var l=cues.length;this.cues_=cues;this.length_=cues.length;var defineProp=function defineProp(index){if(!(''+index in this)){Object.defineProperty(this,''+index,{get:function get(){return this.cues_[index];}});}};if(oldLength<l){i=oldLength;for(;i<l;i++){defineProp.call(this,i);}}}/**\n * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id.\n *\n * @param {string} id\n * The id of the cue that should be searched for.\n *\n * @return {TextTrackCueList~TextTrackCue|null}\n * A single cue or null if none was found.\n */;_proto.getCueById=function getCueById(id){var result=null;for(var i=0,l=this.length;i<l;i++){var cue=this[i];if(cue.id===id){result=cue;break;}}return result;};return TextTrackCueList;}();/**\n * @file track-kinds.js\n */ /**\n * All possible `VideoTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind\n * @typedef VideoTrack~Kind\n * @enum\n */var VideoTrackKind={alternative:'alternative',captions:'captions',main:'main',sign:'sign',subtitles:'subtitles',commentary:'commentary'};/**\n * All possible `AudioTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind\n * @typedef AudioTrack~Kind\n * @enum\n */var AudioTrackKind={'alternative':'alternative','descriptions':'descriptions','main':'main','main-desc':'main-desc','translation':'translation','commentary':'commentary'};/**\n * All possible `TextTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind\n * @typedef TextTrack~Kind\n * @enum\n */var TextTrackKind={subtitles:'subtitles',captions:'captions',descriptions:'descriptions',chapters:'chapters',metadata:'metadata'};/**\n * All possible `TextTrackMode`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n * @typedef TextTrack~Mode\n * @enum\n */var TextTrackMode={disabled:'disabled',hidden:'hidden',showing:'showing'};/**\n * A Track class that contains all of the common functionality for {@link AudioTrack},\n * {@link VideoTrack}, and {@link TextTrack}.\n *\n * > Note: This class should not be used directly\n *\n * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html}\n * @extends EventTarget\n * @abstract\n */var Track=/*#__PURE__*/function(_EventTarget){_inheritsLoose(Track,_EventTarget);/**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid kind for the track type you are creating.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @abstract\n */function Track(options){var _this;if(options===void 0){options={};}_this=_EventTarget.call(this)||this;var trackProps={id:options.id||'vjs_track_'+newGUID(),kind:options.kind||'',label:options.label||'',language:options.language||''};/**\n * @memberof Track\n * @member {string} id\n * The id of this track. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */ /**\n * @memberof Track\n * @member {string} kind\n * The kind of track that this is. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */ /**\n * @memberof Track\n * @member {string} label\n * The label of this track. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */ /**\n * @memberof Track\n * @member {string} language\n * The two letter language code for this track. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */var _loop=function _loop(key){Object.defineProperty(_assertThisInitialized(_this),key,{get:function get(){return trackProps[key];},set:function set(){}});};for(var key in trackProps){_loop(key);}return _this;}return Track;}(EventTarget);/**\n * @file url.js\n * @module url\n */ /**\n * @typedef {Object} url:URLObject\n *\n * @property {string} protocol\n * The protocol of the url that was parsed.\n *\n * @property {string} hostname\n * The hostname of the url that was parsed.\n *\n * @property {string} port\n * The port of the url that was parsed.\n *\n * @property {string} pathname\n * The pathname of the url that was parsed.\n *\n * @property {string} search\n * The search query of the url that was parsed.\n *\n * @property {string} hash\n * The hash of the url that was parsed.\n *\n * @property {string} host\n * The host of the url that was parsed.\n */ /**\n * Resolve and parse the elements of a URL.\n *\n * @function\n * @param {String} url\n * The url to parse\n *\n * @return {url:URLObject}\n * An object of url details\n */var parseUrl=function parseUrl(url){var props=['protocol','hostname','port','pathname','search','hash','host'];// add the url to an anchor and let the browser parse the URL\nvar a=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('a');a.href=url;// IE8 (and 9?) Fix\n// ie8 doesn't parse the URL correctly until the anchor is actually\n// added to the body, and an innerHTML is needed to trigger the parsing\nvar addToBody=a.host===''&&a.protocol!=='file:';var div;if(addToBody){div=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('div');div.innerHTML=\"<a href=\\\"\"+url+\"\\\"></a>\";a=div.firstChild;// prevent the div from affecting layout\ndiv.setAttribute('style','display:none; position:absolute;');global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body.appendChild(div);}// Copy the specific URL properties to a new object\n// This is also needed for IE8 because the anchor loses its\n// properties when it's removed from the dom\nvar details={};for(var i=0;i<props.length;i++){details[props[i]]=a[props[i]];}// IE9 adds the port to the host property unlike everyone else. If\n// a port identifier is added for standard ports, strip it.\nif(details.protocol==='http:'){details.host=details.host.replace(/:80$/,'');}if(details.protocol==='https:'){details.host=details.host.replace(/:443$/,'');}if(!details.protocol){details.protocol=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.location.protocol;}if(addToBody){global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body.removeChild(div);}return details;};/**\n * Get absolute version of relative URL. Used to tell Flash the correct URL.\n *\n * @function\n * @param {string} url\n * URL to make absolute\n *\n * @return {string}\n * Absolute URL\n *\n * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n */var getAbsoluteURL=function getAbsoluteURL(url){// Check if absolute URL\nif(!url.match(/^https?:\\/\\//)){// Convert to absolute URL. Flash hosted off-site needs an absolute URL.\nvar div=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('div');div.innerHTML=\"<a href=\\\"\"+url+\"\\\">x</a>\";url=div.firstChild.href;}return url;};/**\n * Returns the extension of the passed file name. It will return an empty string\n * if passed an invalid path.\n *\n * @function\n * @param {string} path\n * The fileName path like '/path/to/file.mp4'\n *\n * @return {string}\n * The extension in lower case or an empty string if no\n * extension could be found.\n */var getFileExtension=function getFileExtension(path){if(typeof path==='string'){var splitPathRe=/^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/;var pathParts=splitPathRe.exec(path);if(pathParts){return pathParts.pop().toLowerCase();}}return'';};/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @function\n * @param {string} url\n * The url to check.\n *\n * @return {boolean}\n * Whether it is a cross domain request or not.\n */var isCrossOrigin=function isCrossOrigin(url){var winLoc=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.location;var urlInfo=parseUrl(url);// IE8 protocol relative urls will return ':' for protocol\nvar srcProtocol=urlInfo.protocol===':'?winLoc.protocol:urlInfo.protocol;// Check if url is for another domain/origin\n// IE8 doesn't know location.origin, so we won't rely on it here\nvar crossOrigin=srcProtocol+urlInfo.host!==winLoc.protocol+winLoc.host;return crossOrigin;};var Url=/*#__PURE__*/Object.freeze({parseUrl:parseUrl,getAbsoluteURL:getAbsoluteURL,getFileExtension:getFileExtension,isCrossOrigin:isCrossOrigin});/**\n * Takes a webvtt file contents and parses it into cues\n *\n * @param {string} srcContent\n * webVTT file contents\n *\n * @param {TextTrack} track\n * TextTrack to add cues to. Cues come from the srcContent.\n *\n * @private\n */var parseCues=function parseCues(srcContent,track){var parser=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.Parser(global_window__WEBPACK_IMPORTED_MODULE_0___default.a,global_window__WEBPACK_IMPORTED_MODULE_0___default.a.vttjs,global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.StringDecoder());var errors=[];parser.oncue=function(cue){track.addCue(cue);};parser.onparsingerror=function(error){errors.push(error);};parser.onflush=function(){track.trigger({type:'loadeddata',target:track});};parser.parse(srcContent);if(errors.length>0){if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.groupCollapsed){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.groupCollapsed(\"Text Track parsing errors for \"+track.src);}errors.forEach(function(error){return log.error(error);});if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.groupEnd){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.console.groupEnd();}}parser.flush();};/**\n * Load a `TextTrack` from a specified url.\n *\n * @param {string} src\n * Url to load track from.\n *\n * @param {TextTrack} track\n * Track to add cues to. Comes from the content at the end of `url`.\n *\n * @private\n */var loadTrack=function loadTrack(src,track){var opts={uri:src};var crossOrigin=isCrossOrigin(src);if(crossOrigin){opts.cors=crossOrigin;}xhr__WEBPACK_IMPORTED_MODULE_4___default()(opts,bind(this,function(err,response,responseBody){if(err){return log.error(err,response);}track.loaded_=true;// Make sure that vttjs has loaded, otherwise, wait till it finished loading\n// NOTE: this is only used for the alt/video.novtt.js build\nif(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT!=='function'){if(track.tech_){// to prevent use before define eslint error, we define loadHandler\n// as a let here\ntrack.tech_.any(['vttjsloaded','vttjserror'],function(event){if(event.type==='vttjserror'){log.error(\"vttjs failed to load, stopping trying to process \"+track.src);return;}return parseCues(responseBody,track);});}}else{parseCues(responseBody,track);}}));};/**\n * A representation of a single `TextTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack}\n * @extends Track\n */var TextTrack=/*#__PURE__*/function(_Track){_inheritsLoose(TextTrack,_Track);/**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this TextTrack.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * version of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */function TextTrack(options){var _this;if(options===void 0){options={};}if(!options.tech){throw new Error('A tech was not provided.');}var settings=mergeOptions(options,{kind:TextTrackKind[options.kind]||'subtitles',language:options.language||options.srclang||''});var mode=TextTrackMode[settings.mode]||'disabled';var default_=settings[\"default\"];if(settings.kind==='metadata'||settings.kind==='chapters'){mode='hidden';}_this=_Track.call(this,settings)||this;_this.tech_=settings.tech;_this.cues_=[];_this.activeCues_=[];var cues=new TextTrackCueList(_this.cues_);var activeCues=new TextTrackCueList(_this.activeCues_);var changed=false;var timeupdateHandler=bind(_assertThisInitialized(_this),function(){// Accessing this.activeCues for the side-effects of updating itself\n// due to its nature as a getter function. Do not remove or cues will\n// stop updating!\n// Use the setter to prevent deletion from uglify (pure_getters rule)\nthis.activeCues=this.activeCues;if(changed){this.trigger('cuechange');changed=false;}});if(mode!=='disabled'){_this.tech_.ready(function(){_this.tech_.on('timeupdate',timeupdateHandler);},true);}Object.defineProperties(_assertThisInitialized(_this),{/**\n * @memberof TextTrack\n * @member {boolean} default\n * If this track was set to be on or off by default. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */\"default\":{get:function get(){return default_;},set:function set(){}},/**\n * @memberof TextTrack\n * @member {string} mode\n * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will\n * not be set if setting to an invalid mode.\n * @instance\n *\n * @fires TextTrack#modechange\n */mode:{get:function get(){return mode;},set:function set(newMode){var _this2=this;if(!TextTrackMode[newMode]){return;}mode=newMode;if(mode!=='disabled'){this.tech_.ready(function(){_this2.tech_.on('timeupdate',timeupdateHandler);},true);}else{this.tech_.off('timeupdate',timeupdateHandler);}/**\n * An event that fires when mode changes on this track. This allows\n * the TextTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec!\n *\n * @event TextTrack#modechange\n * @type {EventTarget~Event}\n */this.trigger('modechange');}},/**\n * @memberof TextTrack\n * @member {TextTrackCueList} cues\n * The text track cue list for this TextTrack.\n * @instance\n */cues:{get:function get(){if(!this.loaded_){return null;}return cues;},set:function set(){}},/**\n * @memberof TextTrack\n * @member {TextTrackCueList} activeCues\n * The list text track cues that are currently active for this TextTrack.\n * @instance\n */activeCues:{get:function get(){if(!this.loaded_){return null;}// nothing to do\nif(this.cues.length===0){return activeCues;}var ct=this.tech_.currentTime();var active=[];for(var i=0,l=this.cues.length;i<l;i++){var cue=this.cues[i];if(cue.startTime<=ct&&cue.endTime>=ct){active.push(cue);}else if(cue.startTime===cue.endTime&&cue.startTime<=ct&&cue.startTime+0.5>=ct){active.push(cue);}}changed=false;if(active.length!==this.activeCues_.length){changed=true;}else{for(var _i=0;_i<active.length;_i++){if(this.activeCues_.indexOf(active[_i])===-1){changed=true;}}}this.activeCues_=active;activeCues.setCues_(this.activeCues_);return activeCues;},// /!\\ Keep this setter empty (see the timeupdate handler above)\nset:function set(){}}});if(settings.src){_this.src=settings.src;loadTrack(settings.src,_assertThisInitialized(_this));}else{_this.loaded_=true;}return _this;}/**\n * Add a cue to the internal list of cues.\n *\n * @param {TextTrack~Cue} cue\n * The cue to add to our internal list\n */var _proto=TextTrack.prototype;_proto.addCue=function addCue(originalCue){var cue=originalCue;if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.vttjs&&!(originalCue instanceof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.vttjs.VTTCue)){cue=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.vttjs.VTTCue(originalCue.startTime,originalCue.endTime,originalCue.text);for(var prop in originalCue){if(!(prop in cue)){cue[prop]=originalCue[prop];}}// make sure that `id` is copied over\ncue.id=originalCue.id;cue.originalCue_=originalCue;}var tracks=this.tech_.textTracks();for(var i=0;i<tracks.length;i++){if(tracks[i]!==this){tracks[i].removeCue(cue);}}this.cues_.push(cue);this.cues.setCues_(this.cues_);}/**\n * Remove a cue from our internal list\n *\n * @param {TextTrack~Cue} removeCue\n * The cue to remove from our internal list\n */;_proto.removeCue=function removeCue(_removeCue){var i=this.cues_.length;while(i--){var cue=this.cues_[i];if(cue===_removeCue||cue.originalCue_&&cue.originalCue_===_removeCue){this.cues_.splice(i,1);this.cues.setCues_(this.cues_);break;}}};return TextTrack;}(Track);/**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */TextTrack.prototype.allowedEvents_={cuechange:'cuechange'};/**\n * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList}\n * only one `AudioTrack` in the list will be enabled at a time.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack}\n * @extends Track\n */var AudioTrack=/*#__PURE__*/function(_Track){_inheritsLoose(AudioTrack,_Track);/**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {AudioTrack~Kind} [options.kind='']\n * A valid audio track kind\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.enabled]\n * If this track is the one that is currently playing. If this track is part of\n * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled.\n */function AudioTrack(options){var _this;if(options===void 0){options={};}var settings=mergeOptions(options,{kind:AudioTrackKind[options.kind]||''});_this=_Track.call(this,settings)||this;var enabled=false;/**\n * @memberof AudioTrack\n * @member {boolean} enabled\n * If this `AudioTrack` is enabled or not. When setting this will\n * fire {@link AudioTrack#enabledchange} if the state of enabled is changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */Object.defineProperty(_assertThisInitialized(_this),'enabled',{get:function get(){return enabled;},set:function set(newEnabled){// an invalid or unchanged value\nif(typeof newEnabled!=='boolean'||newEnabled===enabled){return;}enabled=newEnabled;/**\n * An event that fires when enabled changes on this track. This allows\n * the AudioTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event AudioTrack#enabledchange\n * @type {EventTarget~Event}\n */this.trigger('enabledchange');}});// if the user sets this track to selected then\n// set selected to that true value otherwise\n// we keep it false\nif(settings.enabled){_this.enabled=settings.enabled;}_this.loaded_=true;return _this;}return AudioTrack;}(Track);/**\n * A representation of a single `VideoTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}\n * @extends Track\n */var VideoTrack=/*#__PURE__*/function(_Track){_inheritsLoose(VideoTrack,_Track);/**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid {@link VideoTrack~Kind}\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.selected]\n * If this track is the one that is currently playing.\n */function VideoTrack(options){var _this;if(options===void 0){options={};}var settings=mergeOptions(options,{kind:VideoTrackKind[options.kind]||''});_this=_Track.call(this,settings)||this;var selected=false;/**\n * @memberof VideoTrack\n * @member {boolean} selected\n * If this `VideoTrack` is selected or not. When setting this will\n * fire {@link VideoTrack#selectedchange} if the state of selected changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */Object.defineProperty(_assertThisInitialized(_this),'selected',{get:function get(){return selected;},set:function set(newSelected){// an invalid or unchanged value\nif(typeof newSelected!=='boolean'||newSelected===selected){return;}selected=newSelected;/**\n * An event that fires when selected changes on this track. This allows\n * the VideoTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event VideoTrack#selectedchange\n * @type {EventTarget~Event}\n */this.trigger('selectedchange');}});// if the user sets this track to selected then\n// set selected to that true value otherwise\n// we keep it false\nif(settings.selected){_this.selected=settings.selected;}return _this;}return VideoTrack;}(Track);/**\n * @memberof HTMLTrackElement\n * @typedef {HTMLTrackElement~ReadyState}\n * @enum {number}\n */var NONE=0;var LOADING=1;var LOADED=2;var ERROR=3;/**\n * A single track represented in the DOM.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}\n * @extends EventTarget\n */var HTMLTrackElement=/*#__PURE__*/function(_EventTarget){_inheritsLoose(HTMLTrackElement,_EventTarget);/**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this HTMLTrackElement.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * vesion of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */function HTMLTrackElement(options){var _this;if(options===void 0){options={};}_this=_EventTarget.call(this)||this;var readyState;var track=new TextTrack(options);_this.kind=track.kind;_this.src=track.src;_this.srclang=track.language;_this.label=track.label;_this[\"default\"]=track[\"default\"];Object.defineProperties(_assertThisInitialized(_this),{/**\n * @memberof HTMLTrackElement\n * @member {HTMLTrackElement~ReadyState} readyState\n * The current ready state of the track element.\n * @instance\n */readyState:{get:function get(){return readyState;}},/**\n * @memberof HTMLTrackElement\n * @member {TextTrack} track\n * The underlying TextTrack object.\n * @instance\n *\n */track:{get:function get(){return track;}}});readyState=NONE;/**\n * @listens TextTrack#loadeddata\n * @fires HTMLTrackElement#load\n */track.addEventListener('loadeddata',function(){readyState=LOADED;_this.trigger({type:'load',target:_assertThisInitialized(_this)});});return _this;}return HTMLTrackElement;}(EventTarget);HTMLTrackElement.prototype.allowedEvents_={load:'load'};HTMLTrackElement.NONE=NONE;HTMLTrackElement.LOADING=LOADING;HTMLTrackElement.LOADED=LOADED;HTMLTrackElement.ERROR=ERROR;/*\n * This file contains all track properties that are used in\n * player.js, tech.js, html5.js and possibly other techs in the future.\n */var NORMAL={audio:{ListClass:AudioTrackList,TrackClass:AudioTrack,capitalName:'Audio'},video:{ListClass:VideoTrackList,TrackClass:VideoTrack,capitalName:'Video'},text:{ListClass:TextTrackList,TrackClass:TextTrack,capitalName:'Text'}};Object.keys(NORMAL).forEach(function(type){NORMAL[type].getterName=type+\"Tracks\";NORMAL[type].privateName=type+\"Tracks_\";});var REMOTE={remoteText:{ListClass:TextTrackList,TrackClass:TextTrack,capitalName:'RemoteText',getterName:'remoteTextTracks',privateName:'remoteTextTracks_'},remoteTextEl:{ListClass:HtmlTrackElementList,TrackClass:HTMLTrackElement,capitalName:'RemoteTextTrackEls',getterName:'remoteTextTrackEls',privateName:'remoteTextTrackEls_'}};var ALL=mergeOptions(NORMAL,REMOTE);REMOTE.names=Object.keys(REMOTE);NORMAL.names=Object.keys(NORMAL);ALL.names=[].concat(REMOTE.names).concat(NORMAL.names);/**\n * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string\n * that just contains the src url alone.\n * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};`\n * `var SourceString = 'http://example.com/some-video.mp4';`\n *\n * @typedef {Object|string} Tech~SourceObject\n *\n * @property {string} src\n * The url to the source\n *\n * @property {string} type\n * The mime type of the source\n */ /**\n * A function used by {@link Tech} to create a new {@link TextTrack}.\n *\n * @private\n *\n * @param {Tech} self\n * An instance of the Tech class.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @param {Object} [options={}]\n * An object with additional text track options\n *\n * @return {TextTrack}\n * The text track that was created.\n */function createTrackHelper(self,kind,label,language,options){if(options===void 0){options={};}var tracks=self.textTracks();options.kind=kind;if(label){options.label=label;}if(language){options.language=language;}options.tech=self;var track=new ALL.text.TrackClass(options);tracks.addTrack(track);return track;}/**\n * This is the base class for media playback technology controllers, such as\n * {@link Flash} and {@link HTML5}\n *\n * @extends Component\n */var Tech=/*#__PURE__*/function(_Component){_inheritsLoose(Tech,_Component);/**\n * Create an instance of this Tech.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} ready\n * Callback function to call when the `HTML5` Tech is ready.\n */function Tech(options,ready){var _this;if(options===void 0){options={};}if(ready===void 0){ready=function ready(){};}// we don't want the tech to report user activity automatically.\n// This is done manually in addControlsListeners\noptions.reportTouchActivity=false;_this=_Component.call(this,null,options,ready)||this;// keep track of whether the current source has played at all to\n// implement a very limited played()\n_this.hasStarted_=false;_this.on('playing',function(){this.hasStarted_=true;});_this.on('loadstart',function(){this.hasStarted_=false;});ALL.names.forEach(function(name){var props=ALL[name];if(options&&options[props.getterName]){_this[props.privateName]=options[props.getterName];}});// Manually track progress in cases where the browser/flash player doesn't report it.\nif(!_this.featuresProgressEvents){_this.manualProgressOn();}// Manually track timeupdates in cases where the browser/flash player doesn't report it.\nif(!_this.featuresTimeupdateEvents){_this.manualTimeUpdatesOn();}['Text','Audio','Video'].forEach(function(track){if(options[\"native\"+track+\"Tracks\"]===false){_this[\"featuresNative\"+track+\"Tracks\"]=false;}});if(options.nativeCaptions===false||options.nativeTextTracks===false){_this.featuresNativeTextTracks=false;}else if(options.nativeCaptions===true||options.nativeTextTracks===true){_this.featuresNativeTextTracks=true;}if(!_this.featuresNativeTextTracks){_this.emulateTextTracks();}_this.autoRemoteTextTracks_=new ALL.text.ListClass();_this.initTrackListeners();// Turn on component tap events only if not using native controls\nif(!options.nativeControlsForTouch){_this.emitTapEvents();}if(_this.constructor){_this.name_=_this.constructor.name||'Unknown Tech';}return _this;}/**\n * A special function to trigger source set in a way that will allow player\n * to re-trigger if the player or tech are not ready yet.\n *\n * @fires Tech#sourceset\n * @param {string} src The source string at the time of the source changing.\n */var _proto=Tech.prototype;_proto.triggerSourceset=function triggerSourceset(src){var _this2=this;if(!this.isReady_){// on initial ready we have to trigger source set\n// 1ms after ready so that player can watch for it.\nthis.one('ready',function(){return _this2.setTimeout(function(){return _this2.triggerSourceset(src);},1);});}/**\n * Fired when the source is set on the tech causing the media element\n * to reload.\n *\n * @see {@link Player#event:sourceset}\n * @event Tech#sourceset\n * @type {EventTarget~Event}\n */this.trigger({src:src,type:'sourceset'});}/* Fallbacks for unsupported event types\n ================================================================================ */ /**\n * Polyfill the `progress` event for browsers that don't support it natively.\n *\n * @see {@link Tech#trackProgress}\n */;_proto.manualProgressOn=function manualProgressOn(){this.on('durationchange',this.onDurationChange);this.manualProgress=true;// Trigger progress watching when a source begins loading\nthis.one('ready',this.trackProgress);}/**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n */;_proto.manualProgressOff=function manualProgressOff(){this.manualProgress=false;this.stopTrackingProgress();this.off('durationchange',this.onDurationChange);}/**\n * This is used to trigger a `progress` event when the buffered percent changes. It\n * sets an interval function that will be called every 500 milliseconds to check if the\n * buffer end percent has changed.\n *\n * > This function is called by {@link Tech#manualProgressOn}\n *\n * @param {EventTarget~Event} event\n * The `ready` event that caused this to run.\n *\n * @listens Tech#ready\n * @fires Tech#progress\n */;_proto.trackProgress=function trackProgress(event){this.stopTrackingProgress();this.progressInterval=this.setInterval(bind(this,function(){// Don't trigger unless buffered amount is greater than last time\nvar numBufferedPercent=this.bufferedPercent();if(this.bufferedPercent_!==numBufferedPercent){/**\n * See {@link Player#progress}\n *\n * @event Tech#progress\n * @type {EventTarget~Event}\n */this.trigger('progress');}this.bufferedPercent_=numBufferedPercent;if(numBufferedPercent===1){this.stopTrackingProgress();}}),500);}/**\n * Update our internal duration on a `durationchange` event by calling\n * {@link Tech#duration}.\n *\n * @param {EventTarget~Event} event\n * The `durationchange` event that caused this to run.\n *\n * @listens Tech#durationchange\n */;_proto.onDurationChange=function onDurationChange(event){this.duration_=this.duration();}/**\n * Get and create a `TimeRange` object for buffering.\n *\n * @return {TimeRange}\n * The time range object that was created.\n */;_proto.buffered=function buffered(){return createTimeRanges(0,0);}/**\n * Get the percentage of the current video that is currently buffered.\n *\n * @return {number}\n * A number from 0 to 1 that represents the decimal percentage of the\n * video that is buffered.\n *\n */;_proto.bufferedPercent=function bufferedPercent$1(){return bufferedPercent(this.buffered(),this.duration_);}/**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n * Stop manually tracking progress events by clearing the interval that was set in\n * {@link Tech#trackProgress}.\n */;_proto.stopTrackingProgress=function stopTrackingProgress(){this.clearInterval(this.progressInterval);}/**\n * Polyfill the `timeupdate` event for browsers that don't support it.\n *\n * @see {@link Tech#trackCurrentTime}\n */;_proto.manualTimeUpdatesOn=function manualTimeUpdatesOn(){this.manualTimeUpdates=true;this.on('play',this.trackCurrentTime);this.on('pause',this.stopTrackingCurrentTime);}/**\n * Turn off the polyfill for `timeupdate` events that was created in\n * {@link Tech#manualTimeUpdatesOn}\n */;_proto.manualTimeUpdatesOff=function manualTimeUpdatesOff(){this.manualTimeUpdates=false;this.stopTrackingCurrentTime();this.off('play',this.trackCurrentTime);this.off('pause',this.stopTrackingCurrentTime);}/**\n * Sets up an interval function to track current time and trigger `timeupdate` every\n * 250 milliseconds.\n *\n * @listens Tech#play\n * @triggers Tech#timeupdate\n */;_proto.trackCurrentTime=function trackCurrentTime(){if(this.currentTimeInterval){this.stopTrackingCurrentTime();}this.currentTimeInterval=this.setInterval(function(){/**\n * Triggered at an interval of 250ms to indicated that time is passing in the video.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */this.trigger({type:'timeupdate',target:this,manuallyTriggered:true});// 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n},250);}/**\n * Stop the interval function created in {@link Tech#trackCurrentTime} so that the\n * `timeupdate` event is no longer triggered.\n *\n * @listens {Tech#pause}\n */;_proto.stopTrackingCurrentTime=function stopTrackingCurrentTime(){this.clearInterval(this.currentTimeInterval);// #1002 - if the video ends right before the next timeupdate would happen,\n// the progress bar won't make it all the way to the end\nthis.trigger({type:'timeupdate',target:this,manuallyTriggered:true});}/**\n * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList},\n * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech.\n *\n * @fires Component#dispose\n */;_proto.dispose=function dispose(){// clear out all tracks because we can't reuse them between techs\nthis.clearTracks(NORMAL.names);// Turn off any manual progress or timeupdate tracking\nif(this.manualProgress){this.manualProgressOff();}if(this.manualTimeUpdates){this.manualTimeUpdatesOff();}_Component.prototype.dispose.call(this);}/**\n * Clear out a single `TrackList` or an array of `TrackLists` given their names.\n *\n * > Note: Techs without source handlers should call this between sources for `video`\n * & `audio` tracks. You don't want to use them between tracks!\n *\n * @param {string[]|string} types\n * TrackList names to clear, valid names are `video`, `audio`, and\n * `text`.\n */;_proto.clearTracks=function clearTracks(types){var _this3=this;types=[].concat(types);// clear out all tracks because we can't reuse them between techs\ntypes.forEach(function(type){var list=_this3[type+\"Tracks\"]()||[];var i=list.length;while(i--){var track=list[i];if(type==='text'){_this3.removeRemoteTextTrack(track);}list.removeTrack(track);}});}/**\n * Remove any TextTracks added via addRemoteTextTrack that are\n * flagged for automatic garbage collection\n */;_proto.cleanupAutoTextTracks=function cleanupAutoTextTracks(){var list=this.autoRemoteTextTracks_||[];var i=list.length;while(i--){var track=list[i];this.removeRemoteTextTrack(track);}}/**\n * Reset the tech, which will removes all sources and reset the internal readyState.\n *\n * @abstract\n */;_proto.reset=function reset(){}/**\n * Get or set an error on the Tech.\n *\n * @param {MediaError} [err]\n * Error to set on the Tech\n *\n * @return {MediaError|null}\n * The current error object on the tech, or null if there isn't one.\n */;_proto.error=function error(err){if(err!==undefined){this.error_=new MediaError(err);this.trigger('error');}return this.error_;}/**\n * Returns the `TimeRange`s that have been played through for the current source.\n *\n * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`.\n * It only checks whether the source has played at all or not.\n *\n * @return {TimeRange}\n * - A single time range if this video has played\n * - An empty set of ranges if not.\n */;_proto.played=function played(){if(this.hasStarted_){return createTimeRanges(0,0);}return createTimeRanges();}/**\n * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was\n * previously called.\n *\n * @fires Tech#timeupdate\n */;_proto.setCurrentTime=function setCurrentTime(){// improve the accuracy of manual timeupdates\nif(this.manualTimeUpdates){/**\n * A manual `timeupdate` event.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */this.trigger({type:'timeupdate',target:this,manuallyTriggered:true});}}/**\n * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and\n * {@link TextTrackList} events.\n *\n * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`.\n *\n * @fires Tech#audiotrackchange\n * @fires Tech#videotrackchange\n * @fires Tech#texttrackchange\n */;_proto.initTrackListeners=function initTrackListeners(){var _this4=this;/**\n * Triggered when tracks are added or removed on the Tech {@link AudioTrackList}\n *\n * @event Tech#audiotrackchange\n * @type {EventTarget~Event}\n */ /**\n * Triggered when tracks are added or removed on the Tech {@link VideoTrackList}\n *\n * @event Tech#videotrackchange\n * @type {EventTarget~Event}\n */ /**\n * Triggered when tracks are added or removed on the Tech {@link TextTrackList}\n *\n * @event Tech#texttrackchange\n * @type {EventTarget~Event}\n */NORMAL.names.forEach(function(name){var props=NORMAL[name];var trackListChanges=function trackListChanges(){_this4.trigger(name+\"trackchange\");};var tracks=_this4[props.getterName]();tracks.addEventListener('removetrack',trackListChanges);tracks.addEventListener('addtrack',trackListChanges);_this4.on('dispose',function(){tracks.removeEventListener('removetrack',trackListChanges);tracks.removeEventListener('addtrack',trackListChanges);});});}/**\n * Emulate TextTracks using vtt.js if necessary\n *\n * @fires Tech#vttjsloaded\n * @fires Tech#vttjserror\n */;_proto.addWebVttScript_=function addWebVttScript_(){var _this5=this;if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT){return;}// Initially, Tech.el_ is a child of a dummy-div wait until the Component system\n// signals that the Tech is ready at which point Tech.el_ is part of the DOM\n// before inserting the WebVTT script\nif(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body.contains(this.el())){// load via require if available and vtt.js script location was not passed in\n// as an option. novtt builds will turn the above require call into an empty object\n// which will cause this if check to always fail.\nif(!this.options_['vtt.js']&&isPlain(videojs_vtt_js__WEBPACK_IMPORTED_MODULE_5___default.a)&&Object.keys(videojs_vtt_js__WEBPACK_IMPORTED_MODULE_5___default.a).length>0){this.trigger('vttjsloaded');return;}// load vtt.js via the script location option or the cdn of no location was\n// passed in\nvar script=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('script');script.src=this.options_['vtt.js']||'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js';script.onload=function(){/**\n * Fired when vtt.js is loaded.\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */_this5.trigger('vttjsloaded');};script.onerror=function(){/**\n * Fired when vtt.js was not loaded due to an error\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */_this5.trigger('vttjserror');};this.on('dispose',function(){script.onload=null;script.onerror=null;});// but have not loaded yet and we set it to true before the inject so that\n// we don't overwrite the injected window.WebVTT if it loads right away\nglobal_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT=true;this.el().parentNode.appendChild(script);}else{this.ready(this.addWebVttScript_);}}/**\n * Emulate texttracks\n *\n */;_proto.emulateTextTracks=function emulateTextTracks(){var _this6=this;var tracks=this.textTracks();var remoteTracks=this.remoteTextTracks();var handleAddTrack=function handleAddTrack(e){return tracks.addTrack(e.track);};var handleRemoveTrack=function handleRemoveTrack(e){return tracks.removeTrack(e.track);};remoteTracks.on('addtrack',handleAddTrack);remoteTracks.on('removetrack',handleRemoveTrack);this.addWebVttScript_();var updateDisplay=function updateDisplay(){return _this6.trigger('texttrackchange');};var textTracksChanges=function textTracksChanges(){updateDisplay();for(var i=0;i<tracks.length;i++){var track=tracks[i];track.removeEventListener('cuechange',updateDisplay);if(track.mode==='showing'){track.addEventListener('cuechange',updateDisplay);}}};textTracksChanges();tracks.addEventListener('change',textTracksChanges);tracks.addEventListener('addtrack',textTracksChanges);tracks.addEventListener('removetrack',textTracksChanges);this.on('dispose',function(){remoteTracks.off('addtrack',handleAddTrack);remoteTracks.off('removetrack',handleRemoveTrack);tracks.removeEventListener('change',textTracksChanges);tracks.removeEventListener('addtrack',textTracksChanges);tracks.removeEventListener('removetrack',textTracksChanges);for(var i=0;i<tracks.length;i++){var track=tracks[i];track.removeEventListener('cuechange',updateDisplay);}});}/**\n * Create and returns a remote {@link TextTrack} object.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @return {TextTrack}\n * The TextTrack that gets created.\n */;_proto.addTextTrack=function addTextTrack(kind,label,language){if(!kind){throw new Error('TextTrack kind is required but was not provided');}return createTrackHelper(this,kind,label,language);}/**\n * Create an emulated TextTrack for use by addRemoteTextTrack\n *\n * This is intended to be overridden by classes that inherit from\n * Tech in order to create native or custom TextTracks.\n *\n * @param {Object} options\n * The object should contain the options to initialize the TextTrack with.\n *\n * @param {string} [options.kind]\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata).\n *\n * @param {string} [options.label].\n * Label to identify the text track\n *\n * @param {string} [options.language]\n * Two letter language abbreviation.\n *\n * @return {HTMLTrackElement}\n * The track element that gets created.\n */;_proto.createRemoteTextTrack=function createRemoteTextTrack(options){var track=mergeOptions(options,{tech:this});return new REMOTE.remoteTextEl.TrackClass(track);}/**\n * Creates a remote text track object and returns an html track element.\n *\n * > Note: This can be an emulated {@link HTMLTrackElement} or a native one.\n *\n * @param {Object} options\n * See {@link Tech#createRemoteTextTrack} for more detailed properties.\n *\n * @param {boolean} [manualCleanup=true]\n * - When false: the TextTrack will be automatically removed from the video\n * element whenever the source changes\n * - When True: The TextTrack will have to be cleaned up manually\n *\n * @return {HTMLTrackElement}\n * An Html Track Element.\n *\n * @deprecated The default functionality for this function will be equivalent\n * to \"manualCleanup=false\" in the future. The manualCleanup parameter will\n * also be removed.\n */;_proto.addRemoteTextTrack=function addRemoteTextTrack(options,manualCleanup){var _this7=this;if(options===void 0){options={};}var htmlTrackElement=this.createRemoteTextTrack(options);if(manualCleanup!==true&&manualCleanup!==false){// deprecation warning\nlog.warn('Calling addRemoteTextTrack without explicitly setting the \"manualCleanup\" parameter to `true` is deprecated and default to `false` in future version of video.js');manualCleanup=true;}// store HTMLTrackElement and TextTrack to remote list\nthis.remoteTextTrackEls().addTrackElement_(htmlTrackElement);this.remoteTextTracks().addTrack(htmlTrackElement.track);if(manualCleanup!==true){// create the TextTrackList if it doesn't exist\nthis.ready(function(){return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track);});}return htmlTrackElement;}/**\n * Remove a remote text track from the remote `TextTrackList`.\n *\n * @param {TextTrack} track\n * `TextTrack` to remove from the `TextTrackList`\n */;_proto.removeRemoteTextTrack=function removeRemoteTextTrack(track){var trackElement=this.remoteTextTrackEls().getTrackElementByTrack_(track);// remove HTMLTrackElement and TextTrack from remote list\nthis.remoteTextTrackEls().removeTrackElement_(trackElement);this.remoteTextTracks().removeTrack(track);this.autoRemoteTextTracks_.removeTrack(track);}/**\n * Gets available media playback quality metrics as specified by the W3C's Media\n * Playback Quality API.\n *\n * @see [Spec]{@link https://wicg.github.io/media-playback-quality}\n *\n * @return {Object}\n * An object with supported media playback quality metrics\n *\n * @abstract\n */;_proto.getVideoPlaybackQuality=function getVideoPlaybackQuality(){return{};}/**\n * Attempt to create a floating video window always on top of other windows\n * so that users may continue consuming media while they interact with other\n * content sites, or applications on their device.\n *\n * @see [Spec]{@link https://wicg.github.io/picture-in-picture}\n *\n * @return {Promise|undefined}\n * A promise with a Picture-in-Picture window if the browser supports\n * Promises (or one was passed in as an option). It returns undefined\n * otherwise.\n *\n * @abstract\n */;_proto.requestPictureInPicture=function requestPictureInPicture(){var PromiseClass=this.options_.Promise||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Promise;if(PromiseClass){return PromiseClass.reject();}}/**\n * A method to set a poster from a `Tech`.\n *\n * @abstract\n */;_proto.setPoster=function setPoster(){}/**\n * A method to check for the presence of the 'playsinline' <video> attribute.\n *\n * @abstract\n */;_proto.playsinline=function playsinline(){}/**\n * A method to set or unset the 'playsinline' <video> attribute.\n *\n * @abstract\n */;_proto.setPlaysinline=function setPlaysinline(){}/**\n * Attempt to force override of native audio tracks.\n *\n * @param {boolean} override - If set to true native audio will be overridden,\n * otherwise native audio will potentially be used.\n *\n * @abstract\n */;_proto.overrideNativeAudioTracks=function overrideNativeAudioTracks(){}/**\n * Attempt to force override of native video tracks.\n *\n * @param {boolean} override - If set to true native video will be overridden,\n * otherwise native video will potentially be used.\n *\n * @abstract\n */;_proto.overrideNativeVideoTracks=function overrideNativeVideoTracks(){}/*\n * Check if the tech can support the given mime-type.\n *\n * The base tech does not support any type, but source handlers might\n * overwrite this.\n *\n * @param {string} type\n * The mimetype to check for support\n *\n * @return {string}\n * 'probably', 'maybe', or empty string\n *\n * @see [Spec]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canPlayType}\n *\n * @abstract\n */;_proto.canPlayType=function canPlayType(){return'';}/**\n * Check if the type is supported by this tech.\n *\n * The base tech does not support any type, but source handlers might\n * overwrite this.\n *\n * @param {string} type\n * The media type to check\n * @return {string} Returns the native video element's response\n */;Tech.canPlayType=function canPlayType(){return'';}/**\n * Check if the tech can support the given source\n *\n * @param {Object} srcObj\n * The source object\n * @param {Object} options\n * The options passed to the tech\n * @return {string} 'probably', 'maybe', or '' (empty string)\n */;Tech.canPlaySource=function canPlaySource(srcObj,options){return Tech.canPlayType(srcObj.type);}/*\n * Return whether the argument is a Tech or not.\n * Can be passed either a Class like `Html5` or a instance like `player.tech_`\n *\n * @param {Object} component\n * The item to check\n *\n * @return {boolean}\n * Whether it is a tech or not\n * - True if it is a tech\n * - False if it is not\n */;Tech.isTech=function isTech(component){return component.prototype instanceof Tech||component instanceof Tech||component===Tech;}/**\n * Registers a `Tech` into a shared list for videojs.\n *\n * @param {string} name\n * Name of the `Tech` to register.\n *\n * @param {Object} tech\n * The `Tech` class to register.\n */;Tech.registerTech=function registerTech(name,tech){if(!Tech.techs_){Tech.techs_={};}if(!Tech.isTech(tech)){throw new Error(\"Tech \"+name+\" must be a Tech\");}if(!Tech.canPlayType){throw new Error('Techs must have a static canPlayType method on them');}if(!Tech.canPlaySource){throw new Error('Techs must have a static canPlaySource method on them');}name=toTitleCase(name);Tech.techs_[name]=tech;Tech.techs_[toLowerCase(name)]=tech;if(name!=='Tech'){// camel case the techName for use in techOrder\nTech.defaultTechOrder_.push(name);}return tech;}/**\n * Get a `Tech` from the shared list by name.\n *\n * @param {string} name\n * `camelCase` or `TitleCase` name of the Tech to get\n *\n * @return {Tech|undefined}\n * The `Tech` or undefined if there was no tech with the name requested.\n */;Tech.getTech=function getTech(name){if(!name){return;}if(Tech.techs_&&Tech.techs_[name]){return Tech.techs_[name];}name=toTitleCase(name);if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.videojs&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.videojs[name]){log.warn(\"The \"+name+\" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)\");return global_window__WEBPACK_IMPORTED_MODULE_0___default.a.videojs[name];}};return Tech;}(Component);/**\n * Get the {@link VideoTrackList}\n *\n * @returns {VideoTrackList}\n * @method Tech.prototype.videoTracks\n */ /**\n * Get the {@link AudioTrackList}\n *\n * @returns {AudioTrackList}\n * @method Tech.prototype.audioTracks\n */ /**\n * Get the {@link TextTrackList}\n *\n * @returns {TextTrackList}\n * @method Tech.prototype.textTracks\n */ /**\n * Get the remote element {@link TextTrackList}\n *\n * @returns {TextTrackList}\n * @method Tech.prototype.remoteTextTracks\n */ /**\n * Get the remote element {@link HtmlTrackElementList}\n *\n * @returns {HtmlTrackElementList}\n * @method Tech.prototype.remoteTextTrackEls\n */ALL.names.forEach(function(name){var props=ALL[name];Tech.prototype[props.getterName]=function(){this[props.privateName]=this[props.privateName]||new props.ListClass();return this[props.privateName];};});/**\n * List of associated text tracks\n *\n * @type {TextTrackList}\n * @private\n * @property Tech#textTracks_\n */ /**\n * List of associated audio tracks.\n *\n * @type {AudioTrackList}\n * @private\n * @property Tech#audioTracks_\n */ /**\n * List of associated video tracks.\n *\n * @type {VideoTrackList}\n * @private\n * @property Tech#videoTracks_\n */ /**\n * Boolean indicating whether the `Tech` supports volume control.\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresVolumeControl=true;/**\n * Boolean indicating whether the `Tech` supports muting volume.\n *\n * @type {bolean}\n * @default\n */Tech.prototype.featuresMuteControl=true;/**\n * Boolean indicating whether the `Tech` supports fullscreen resize control.\n * Resizing plugins using request fullscreen reloads the plugin\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresFullscreenResize=false;/**\n * Boolean indicating whether the `Tech` supports changing the speed at which the video\n * plays. Examples:\n * - Set player to play 2x (twice) as fast\n * - Set player to play 0.5x (half) as fast\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresPlaybackRate=false;/**\n * Boolean indicating whether the `Tech` supports the `progress` event. This is currently\n * not triggered by video-js-swf. This will be used to determine if\n * {@link Tech#manualProgressOn} should be called.\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresProgressEvents=false;/**\n * Boolean indicating whether the `Tech` supports the `sourceset` event.\n *\n * A tech should set this to `true` and then use {@link Tech#triggerSourceset}\n * to trigger a {@link Tech#event:sourceset} at the earliest time after getting\n * a new source.\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresSourceset=false;/**\n * Boolean indicating whether the `Tech` supports the `timeupdate` event. This is currently\n * not triggered by video-js-swf. This will be used to determine if\n * {@link Tech#manualTimeUpdates} should be called.\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresTimeupdateEvents=false;/**\n * Boolean indicating whether the `Tech` supports the native `TextTrack`s.\n * This will help us integrate with native `TextTrack`s if the browser supports them.\n *\n * @type {boolean}\n * @default\n */Tech.prototype.featuresNativeTextTracks=false;/**\n * A functional mixin for techs that want to use the Source Handler pattern.\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * Example: `Tech.withSourceHandlers.call(MyTech);`\n *\n * @param {Tech} _Tech\n * The tech to add source handler functions to.\n *\n * @mixes Tech~SourceHandlerAdditions\n */Tech.withSourceHandlers=function(_Tech){/**\n * Register a source handler\n *\n * @param {Function} handler\n * The source handler class\n *\n * @param {number} [index]\n * Register it at the following index\n */_Tech.registerSourceHandler=function(handler,index){var handlers=_Tech.sourceHandlers;if(!handlers){handlers=_Tech.sourceHandlers=[];}if(index===undefined){// add to the end of the list\nindex=handlers.length;}handlers.splice(index,0,handler);};/**\n * Check if the tech can support the given type. Also checks the\n * Techs sourceHandlers.\n *\n * @param {string} type\n * The mimetype to check.\n *\n * @return {string}\n * 'probably', 'maybe', or '' (empty string)\n */_Tech.canPlayType=function(type){var handlers=_Tech.sourceHandlers||[];var can;for(var i=0;i<handlers.length;i++){can=handlers[i].canPlayType(type);if(can){return can;}}return'';};/**\n * Returns the first source handler that supports the source.\n *\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n *\n * @param {Tech~SourceObject} source\n * The source object\n *\n * @param {Object} options\n * The options passed to the tech\n *\n * @return {SourceHandler|null}\n * The first source handler that supports the source or null if\n * no SourceHandler supports the source\n */_Tech.selectSourceHandler=function(source,options){var handlers=_Tech.sourceHandlers||[];var can;for(var i=0;i<handlers.length;i++){can=handlers[i].canHandleSource(source,options);if(can){return handlers[i];}}return null;};/**\n * Check if the tech can support the given source.\n *\n * @param {Tech~SourceObject} srcObj\n * The source object\n *\n * @param {Object} options\n * The options passed to the tech\n *\n * @return {string}\n * 'probably', 'maybe', or '' (empty string)\n */_Tech.canPlaySource=function(srcObj,options){var sh=_Tech.selectSourceHandler(srcObj,options);if(sh){return sh.canHandleSource(srcObj,options);}return'';};/**\n * When using a source handler, prefer its implementation of\n * any function normally provided by the tech.\n */var deferrable=['seekable','seeking','duration'];/**\n * A wrapper around {@link Tech#seekable} that will call a `SourceHandler`s seekable\n * function if it exists, with a fallback to the Techs seekable function.\n *\n * @method _Tech.seekable\n */ /**\n * A wrapper around {@link Tech#duration} that will call a `SourceHandler`s duration\n * function if it exists, otherwise it will fallback to the techs duration function.\n *\n * @method _Tech.duration\n */deferrable.forEach(function(fnName){var originalFn=this[fnName];if(typeof originalFn!=='function'){return;}this[fnName]=function(){if(this.sourceHandler_&&this.sourceHandler_[fnName]){return this.sourceHandler_[fnName].apply(this.sourceHandler_,arguments);}return originalFn.apply(this,arguments);};},_Tech.prototype);/**\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n *\n * @param {Tech~SourceObject} source\n * A source object with src and type keys\n */_Tech.prototype.setSource=function(source){var sh=_Tech.selectSourceHandler(source,this.options_);if(!sh){// Fall back to a native source hander when unsupported sources are\n// deliberately set\nif(_Tech.nativeSourceHandler){sh=_Tech.nativeSourceHandler;}else{log.error('No source handler found for the current source.');}}// Dispose any existing source handler\nthis.disposeSourceHandler();this.off('dispose',this.disposeSourceHandler);if(sh!==_Tech.nativeSourceHandler){this.currentSource_=source;}this.sourceHandler_=sh.handleSource(source,this,this.options_);this.one('dispose',this.disposeSourceHandler);};/**\n * Clean up any existing SourceHandlers and listeners when the Tech is disposed.\n *\n * @listens Tech#dispose\n */_Tech.prototype.disposeSourceHandler=function(){// if we have a source and get another one\n// then we are loading something new\n// than clear all of our current tracks\nif(this.currentSource_){this.clearTracks(['audio','video']);this.currentSource_=null;}// always clean up auto-text tracks\nthis.cleanupAutoTextTracks();if(this.sourceHandler_){if(this.sourceHandler_.dispose){this.sourceHandler_.dispose();}this.sourceHandler_=null;}};};// The base Tech class needs to be registered as a Component. It is the only\n// Tech that can be registered as a Component.\nComponent.registerComponent('Tech',Tech);Tech.registerTech('Tech',Tech);/**\n * A list of techs that should be added to techOrder on Players\n *\n * @private\n */Tech.defaultTechOrder_=[];/**\n * @file middleware.js\n * @module middleware\n */var middlewares={};var middlewareInstances={};var TERMINATOR={};/**\n * A middleware object is a plain JavaScript object that has methods that\n * match the {@link Tech} methods found in the lists of allowed\n * {@link module:middleware.allowedGetters|getters},\n * {@link module:middleware.allowedSetters|setters}, and\n * {@link module:middleware.allowedMediators|mediators}.\n *\n * @typedef {Object} MiddlewareObject\n */ /**\n * A middleware factory function that should return a\n * {@link module:middleware~MiddlewareObject|MiddlewareObject}.\n *\n * This factory will be called for each player when needed, with the player\n * passed in as an argument.\n *\n * @callback MiddlewareFactory\n * @param {Player} player\n * A Video.js player.\n */ /**\n * Define a middleware that the player should use by way of a factory function\n * that returns a middleware object.\n *\n * @param {string} type\n * The MIME type to match or `\"*\"` for all MIME types.\n *\n * @param {MiddlewareFactory} middleware\n * A middleware factory function that will be executed for\n * matching types.\n */function use(type,middleware){middlewares[type]=middlewares[type]||[];middlewares[type].push(middleware);}/**\n * Asynchronously sets a source using middleware by recursing through any\n * matching middlewares and calling `setSource` on each, passing along the\n * previous returned value each time.\n *\n * @param {Player} player\n * A {@link Player} instance.\n *\n * @param {Tech~SourceObject} src\n * A source object.\n *\n * @param {Function}\n * The next middleware to run.\n */function setSource(player,src,next){player.setTimeout(function(){return setSourceHelper(src,middlewares[src.type],next,player);},1);}/**\n * When the tech is set, passes the tech to each middleware's `setTech` method.\n *\n * @param {Object[]} middleware\n * An array of middleware instances.\n *\n * @param {Tech} tech\n * A Video.js tech.\n */function setTech(middleware,tech){middleware.forEach(function(mw){return mw.setTech&&mw.setTech(tech);});}/**\n * Calls a getter on the tech first, through each middleware\n * from right to left to the player.\n *\n * @param {Object[]} middleware\n * An array of middleware instances.\n *\n * @param {Tech} tech\n * The current tech.\n *\n * @param {string} method\n * A method name.\n *\n * @return {Mixed}\n * The final value from the tech after middleware has intercepted it.\n */function get(middleware,tech,method){return middleware.reduceRight(middlewareIterator(method),tech[method]());}/**\n * Takes the argument given to the player and calls the setter method on each\n * middleware from left to right to the tech.\n *\n * @param {Object[]} middleware\n * An array of middleware instances.\n *\n * @param {Tech} tech\n * The current tech.\n *\n * @param {string} method\n * A method name.\n *\n * @param {Mixed} arg\n * The value to set on the tech.\n *\n * @return {Mixed}\n * The return value of the `method` of the `tech`.\n */function set(middleware,tech,method,arg){return tech[method](middleware.reduce(middlewareIterator(method),arg));}/**\n * Takes the argument given to the player and calls the `call` version of the\n * method on each middleware from left to right.\n *\n * Then, call the passed in method on the tech and return the result unchanged\n * back to the player, through middleware, this time from right to left.\n *\n * @param {Object[]} middleware\n * An array of middleware instances.\n *\n * @param {Tech} tech\n * The current tech.\n *\n * @param {string} method\n * A method name.\n *\n * @param {Mixed} arg\n * The value to set on the tech.\n *\n * @return {Mixed}\n * The return value of the `method` of the `tech`, regardless of the\n * return values of middlewares.\n */function mediate(middleware,tech,method,arg){if(arg===void 0){arg=null;}var callMethod='call'+toTitleCase(method);var middlewareValue=middleware.reduce(middlewareIterator(callMethod),arg);var terminated=middlewareValue===TERMINATOR;// deprecated. The `null` return value should instead return TERMINATOR to\n// prevent confusion if a techs method actually returns null.\nvar returnValue=terminated?null:tech[method](middlewareValue);executeRight(middleware,method,returnValue,terminated);return returnValue;}/**\n * Enumeration of allowed getters where the keys are method names.\n *\n * @type {Object}\n */var allowedGetters={buffered:1,currentTime:1,duration:1,seekable:1,played:1,paused:1,volume:1};/**\n * Enumeration of allowed setters where the keys are method names.\n *\n * @type {Object}\n */var allowedSetters={setCurrentTime:1,setVolume:1};/**\n * Enumeration of allowed mediators where the keys are method names.\n *\n * @type {Object}\n */var allowedMediators={play:1,pause:1};function middlewareIterator(method){return function(value,mw){// if the previous middleware terminated, pass along the termination\nif(value===TERMINATOR){return TERMINATOR;}if(mw[method]){return mw[method](value);}return value;};}function executeRight(mws,method,value,terminated){for(var i=mws.length-1;i>=0;i--){var mw=mws[i];if(mw[method]){mw[method](terminated,value);}}}/**\n * Clear the middleware cache for a player.\n *\n * @param {Player} player\n * A {@link Player} instance.\n */function clearCacheForPlayer(player){middlewareInstances[player.id()]=null;}/**\n * {\n * [playerId]: [[mwFactory, mwInstance], ...]\n * }\n *\n * @private\n */function getOrCreateFactory(player,mwFactory){var mws=middlewareInstances[player.id()];var mw=null;if(mws===undefined||mws===null){mw=mwFactory(player);middlewareInstances[player.id()]=[[mwFactory,mw]];return mw;}for(var i=0;i<mws.length;i++){var _mws$i=mws[i],mwf=_mws$i[0],mwi=_mws$i[1];if(mwf!==mwFactory){continue;}mw=mwi;}if(mw===null){mw=mwFactory(player);mws.push([mwFactory,mw]);}return mw;}function setSourceHelper(src,middleware,next,player,acc,lastRun){if(src===void 0){src={};}if(middleware===void 0){middleware=[];}if(acc===void 0){acc=[];}if(lastRun===void 0){lastRun=false;}var _middleware=middleware,mwFactory=_middleware[0],mwrest=_middleware.slice(1);// if mwFactory is a string, then we're at a fork in the road\nif(typeof mwFactory==='string'){setSourceHelper(src,middlewares[mwFactory],next,player,acc,lastRun);// if we have an mwFactory, call it with the player to get the mw,\n// then call the mw's setSource method\n}else if(mwFactory){var mw=getOrCreateFactory(player,mwFactory);// if setSource isn't present, implicitly select this middleware\nif(!mw.setSource){acc.push(mw);return setSourceHelper(src,mwrest,next,player,acc,lastRun);}mw.setSource(assign({},src),function(err,_src){// something happened, try the next middleware on the current level\n// make sure to use the old src\nif(err){return setSourceHelper(src,mwrest,next,player,acc,lastRun);}// we've succeeded, now we need to go deeper\nacc.push(mw);// if it's the same type, continue down the current chain\n// otherwise, we want to go down the new chain\nsetSourceHelper(_src,src.type===_src.type?mwrest:middlewares[_src.type],next,player,acc,lastRun);});}else if(mwrest.length){setSourceHelper(src,mwrest,next,player,acc,lastRun);}else if(lastRun){next(src,acc);}else{setSourceHelper(src,middlewares['*'],next,player,acc,true);}}/**\n * Mimetypes\n *\n * @see http://hul.harvard.edu/ois/////systems/wax/wax-public-help/mimetypes.htm\n * @typedef Mimetypes~Kind\n * @enum\n */var MimetypesKind={opus:'video/ogg',ogv:'video/ogg',mp4:'video/mp4',mov:'video/mp4',m4v:'video/mp4',mkv:'video/x-matroska',m4a:'audio/mp4',mp3:'audio/mpeg',aac:'audio/aac',oga:'audio/ogg',m3u8:'application/x-mpegURL',jpg:'image/jpeg',jpeg:'image/jpeg',gif:'image/gif',png:'image/png',svg:'image/svg+xml',webp:'image/webp'};/**\n * Get the mimetype of a given src url if possible\n *\n * @param {string} src\n * The url to the src\n *\n * @return {string}\n * return the mimetype if it was known or empty string otherwise\n */var getMimetype=function getMimetype(src){if(src===void 0){src='';}var ext=getFileExtension(src);var mimetype=MimetypesKind[ext.toLowerCase()];return mimetype||'';};/**\n * Find the mime type of a given source string if possible. Uses the player\n * source cache.\n *\n * @param {Player} player\n * The player object\n *\n * @param {string} src\n * The source string\n *\n * @return {string}\n * The type that was found\n */var findMimetype=function findMimetype(player,src){if(!src){return'';}// 1. check for the type in the `source` cache\nif(player.cache_.source.src===src&&player.cache_.source.type){return player.cache_.source.type;}// 2. see if we have this source in our `currentSources` cache\nvar matchingSources=player.cache_.sources.filter(function(s){return s.src===src;});if(matchingSources.length){return matchingSources[0].type;}// 3. look for the src url in source elements and use the type there\nvar sources=player.$$('source');for(var i=0;i<sources.length;i++){var s=sources[i];if(s.type&&s.src&&s.src===src){return s.type;}}// 4. finally fallback to our list of mime types based on src url extension\nreturn getMimetype(src);};/**\n * @module filter-source\n */ /**\n * Filter out single bad source objects or multiple source objects in an\n * array. Also flattens nested source object arrays into a 1 dimensional\n * array of source objects.\n *\n * @param {Tech~SourceObject|Tech~SourceObject[]} src\n * The src object to filter\n *\n * @return {Tech~SourceObject[]}\n * An array of sourceobjects containing only valid sources\n *\n * @private\n */var filterSource=function filterSource(src){// traverse array\nif(Array.isArray(src)){var newsrc=[];src.forEach(function(srcobj){srcobj=filterSource(srcobj);if(Array.isArray(srcobj)){newsrc=newsrc.concat(srcobj);}else if(isObject(srcobj)){newsrc.push(srcobj);}});src=newsrc;}else if(typeof src==='string'&&src.trim()){// convert string into object\nsrc=[fixSource({src:src})];}else if(isObject(src)&&typeof src.src==='string'&&src.src&&src.src.trim()){// src is already valid\nsrc=[fixSource(src)];}else{// invalid source, turn it into an empty array\nsrc=[];}return src;};/**\n * Checks src mimetype, adding it when possible\n *\n * @param {Tech~SourceObject} src\n * The src object to check\n * @return {Tech~SourceObject}\n * src Object with known type\n */function fixSource(src){if(!src.type){var mimetype=getMimetype(src.src);if(mimetype){src.type=mimetype;}}return src;}/**\n * The `MediaLoader` is the `Component` that decides which playback technology to load\n * when a player is initialized.\n *\n * @extends Component\n */var MediaLoader=/*#__PURE__*/function(_Component){_inheritsLoose(MediaLoader,_Component);/**\n * Create an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should attach to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function that is run when this component is ready.\n */function MediaLoader(player,options,ready){var _this;// MediaLoader has no element\nvar options_=mergeOptions({createEl:false},options);_this=_Component.call(this,player,options_,ready)||this;// If there are no sources when the player is initialized,\n// load the first supported playback technology.\nif(!options.playerOptions.sources||options.playerOptions.sources.length===0){for(var i=0,j=options.playerOptions.techOrder;i<j.length;i++){var techName=toTitleCase(j[i]);var tech=Tech.getTech(techName);// Support old behavior of techs being registered as components.\n// Remove once that deprecated behavior is removed.\nif(!techName){tech=Component.getComponent(techName);}// Check if the browser supports this technology\nif(tech&&tech.isSupported()){player.loadTech_(techName);break;}}}else{// Loop through playback technologies (HTML5, Flash) and check for support.\n// Then load the best source.\n// A few assumptions here:\n// All playback technologies respect preload false.\nplayer.src(options.playerOptions.sources);}return _this;}return MediaLoader;}(Component);Component.registerComponent('MediaLoader',MediaLoader);/**\n * Component which is clickable or keyboard actionable, but is not a\n * native HTML button.\n *\n * @extends Component\n */var ClickableComponent=/*#__PURE__*/function(_Component){_inheritsLoose(ClickableComponent,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function ClickableComponent(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.emitTapEvents();_this.enable();return _this;}/**\n * Create the `ClickableComponent`s DOM element.\n *\n * @param {string} [tag=div]\n * The element's node type.\n *\n * @param {Object} [props={}]\n * An object of properties that should be set on the element.\n *\n * @param {Object} [attributes={}]\n * An object of attributes that should be set on the element.\n *\n * @return {Element}\n * The element that gets created.\n */var _proto=ClickableComponent.prototype;_proto.createEl=function createEl(tag,props,attributes){if(tag===void 0){tag='div';}if(props===void 0){props={};}if(attributes===void 0){attributes={};}props=assign({innerHTML:'<span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>',className:this.buildCSSClass(),tabIndex:0},props);if(tag==='button'){log.error(\"Creating a ClickableComponent with an HTML element of \"+tag+\" is not supported; use a Button instead.\");}// Add ARIA attributes for clickable element which is not a native HTML button\nattributes=assign({role:'button'},attributes);this.tabIndex_=props.tabIndex;var el=_Component.prototype.createEl.call(this,tag,props,attributes);this.createControlTextEl(el);return el;};_proto.dispose=function dispose(){// remove controlTextEl_ on dispose\nthis.controlTextEl_=null;_Component.prototype.dispose.call(this);}/**\n * Create a control text element on this `ClickableComponent`\n *\n * @param {Element} [el]\n * Parent element for the control text.\n *\n * @return {Element}\n * The control text element that gets created.\n */;_proto.createControlTextEl=function createControlTextEl(el){this.controlTextEl_=createEl('span',{className:'vjs-control-text'},{// let the screen reader user know that the text of the element may change\n'aria-live':'polite'});if(el){el.appendChild(this.controlTextEl_);}this.controlText(this.controlText_,el);return this.controlTextEl_;}/**\n * Get or set the localize text to use for the controls on the `ClickableComponent`.\n *\n * @param {string} [text]\n * Control text for element.\n *\n * @param {Element} [el=this.el()]\n * Element to set the title on.\n *\n * @return {string}\n * - The control text when getting\n */;_proto.controlText=function controlText(text,el){if(el===void 0){el=this.el();}if(text===undefined){return this.controlText_||'Need Text';}var localizedText=this.localize(text);this.controlText_=text;textContent(this.controlTextEl_,localizedText);if(!this.nonIconControl){// Set title attribute if only an icon is shown\nel.setAttribute('title',localizedText);}}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-control vjs-button \"+_Component.prototype.buildCSSClass.call(this);}/**\n * Enable this `ClickableComponent`\n */;_proto.enable=function enable(){if(!this.enabled_){this.enabled_=true;this.removeClass('vjs-disabled');this.el_.setAttribute('aria-disabled','false');if(typeof this.tabIndex_!=='undefined'){this.el_.setAttribute('tabIndex',this.tabIndex_);}this.on(['tap','click'],this.handleClick);this.on('keydown',this.handleKeyDown);}}/**\n * Disable this `ClickableComponent`\n */;_proto.disable=function disable(){this.enabled_=false;this.addClass('vjs-disabled');this.el_.setAttribute('aria-disabled','true');if(typeof this.tabIndex_!=='undefined'){this.el_.removeAttribute('tabIndex');}this.off('mouseover',this.handleMouseOver);this.off('mouseout',this.handleMouseOut);this.off(['tap','click'],this.handleClick);this.off('keydown',this.handleKeyDown);}/**\n * Event handler that is called when a `ClickableComponent` receives a\n * `click` or `tap` event.\n *\n * @param {EventTarget~Event} event\n * The `tap` or `click` event that caused this function to be called.\n *\n * @listens tap\n * @listens click\n * @abstract\n */;_proto.handleClick=function handleClick(event){}/**\n * Event handler that is called when a `ClickableComponent` receives a\n * `keydown` event.\n *\n * By default, if the key is Space or Enter, it will trigger a `click` event.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Support Space or Enter key operation to fire a click event. Also,\n// prevent the event from propagating through the DOM and triggering\n// Player hotkeys.\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Space')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Enter')){event.preventDefault();event.stopPropagation();this.trigger('click');}else{// Pass keypress handling up for unsupported keys\n_Component.prototype.handleKeyDown.call(this,event);}};return ClickableComponent;}(Component);Component.registerComponent('ClickableComponent',ClickableComponent);/**\n * A `ClickableComponent` that handles showing the poster image for the player.\n *\n * @extends ClickableComponent\n */var PosterImage=/*#__PURE__*/function(_ClickableComponent){_inheritsLoose(PosterImage,_ClickableComponent);/**\n * Create an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should attach to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function PosterImage(player,options){var _this;_this=_ClickableComponent.call(this,player,options)||this;_this.update();player.on('posterchange',bind(_assertThisInitialized(_this),_this.update));return _this;}/**\n * Clean up and dispose of the `PosterImage`.\n */var _proto=PosterImage.prototype;_proto.dispose=function dispose(){this.player().off('posterchange',this.update);_ClickableComponent.prototype.dispose.call(this);}/**\n * Create the `PosterImage`s DOM element.\n *\n * @return {Element}\n * The element that gets created.\n */;_proto.createEl=function createEl$1(){var el=createEl('div',{className:'vjs-poster',// Don't want poster to be tabbable.\ntabIndex:-1});return el;}/**\n * An {@link EventTarget~EventListener} for {@link Player#posterchange} events.\n *\n * @listens Player#posterchange\n *\n * @param {EventTarget~Event} [event]\n * The `Player#posterchange` event that triggered this function.\n */;_proto.update=function update(event){var url=this.player().poster();this.setSrc(url);// If there's no poster source we should display:none on this component\n// so it's not still clickable or right-clickable\nif(url){this.show();}else{this.hide();}}/**\n * Set the source of the `PosterImage` depending on the display method.\n *\n * @param {string} url\n * The URL to the source for the `PosterImage`.\n */;_proto.setSrc=function setSrc(url){var backgroundImage='';// Any falsy value should stay as an empty string, otherwise\n// this will throw an extra error\nif(url){backgroundImage=\"url(\\\"\"+url+\"\\\")\";}this.el_.style.backgroundImage=backgroundImage;}/**\n * An {@link EventTarget~EventListener} for clicks on the `PosterImage`. See\n * {@link ClickableComponent#handleClick} for instances where this will be triggered.\n *\n * @listens tap\n * @listens click\n * @listens keydown\n *\n * @param {EventTarget~Event} event\n + The `click`, `tap` or `keydown` event that caused this function to be called.\n */;_proto.handleClick=function handleClick(event){// We don't want a click to trigger playback when controls are disabled\nif(!this.player_.controls()){return;}if(this.player_.tech(true)){this.player_.tech(true).focus();}if(this.player_.paused()){silencePromise(this.player_.play());}else{this.player_.pause();}};return PosterImage;}(ClickableComponent);Component.registerComponent('PosterImage',PosterImage);var darkGray='#222';var lightGray='#ccc';var fontMap={monospace:'monospace',sansSerif:'sans-serif',serif:'serif',monospaceSansSerif:'\"Andale Mono\", \"Lucida Console\", monospace',monospaceSerif:'\"Courier New\", monospace',proportionalSansSerif:'sans-serif',proportionalSerif:'serif',casual:'\"Comic Sans MS\", Impact, fantasy',script:'\"Monotype Corsiva\", cursive',smallcaps:'\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'};/**\n * Construct an rgba color from a given hex color code.\n *\n * @param {number} color\n * Hex number for color, like #f0e or #f604e2.\n *\n * @param {number} opacity\n * Value for opacity, 0.0 - 1.0.\n *\n * @return {string}\n * The rgba color that was created, like 'rgba(255, 0, 0, 0.3)'.\n */function constructColor(color,opacity){var hex;if(color.length===4){// color looks like \"#f0e\"\nhex=color[1]+color[1]+color[2]+color[2]+color[3]+color[3];}else if(color.length===7){// color looks like \"#f604e2\"\nhex=color.slice(1);}else{throw new Error('Invalid color code provided, '+color+'; must be formatted as e.g. #f0e or #f604e2.');}return'rgba('+parseInt(hex.slice(0,2),16)+','+parseInt(hex.slice(2,4),16)+','+parseInt(hex.slice(4,6),16)+','+opacity+')';}/**\n * Try to update the style of a DOM element. Some style changes will throw an error,\n * particularly in IE8. Those should be noops.\n *\n * @param {Element} el\n * The DOM element to be styled.\n *\n * @param {string} style\n * The CSS property on the element that should be styled.\n *\n * @param {string} rule\n * The style rule that should be applied to the property.\n *\n * @private\n */function tryUpdateStyle(el,style,rule){try{el.style[style]=rule;}catch(e){// Satisfies linter.\nreturn;}}/**\n * The component for displaying text track cues.\n *\n * @extends Component\n */var TextTrackDisplay=/*#__PURE__*/function(_Component){_inheritsLoose(TextTrackDisplay,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function to call when `TextTrackDisplay` is ready.\n */function TextTrackDisplay(player,options,ready){var _this;_this=_Component.call(this,player,options,ready)||this;var updateDisplayHandler=bind(_assertThisInitialized(_this),_this.updateDisplay);player.on('loadstart',bind(_assertThisInitialized(_this),_this.toggleDisplay));player.on('texttrackchange',updateDisplayHandler);player.on('loadedmetadata',bind(_assertThisInitialized(_this),_this.preselectTrack));// This used to be called during player init, but was causing an error\n// if a track should show by default and the display hadn't loaded yet.\n// Should probably be moved to an external track loader when we support\n// tracks that don't need a display.\nplayer.ready(bind(_assertThisInitialized(_this),function(){if(player.tech_&&player.tech_.featuresNativeTextTracks){this.hide();return;}player.on('fullscreenchange',updateDisplayHandler);player.on('playerresize',updateDisplayHandler);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.addEventListener('orientationchange',updateDisplayHandler);player.on('dispose',function(){return global_window__WEBPACK_IMPORTED_MODULE_0___default.a.removeEventListener('orientationchange',updateDisplayHandler);});var tracks=this.options_.playerOptions.tracks||[];for(var i=0;i<tracks.length;i++){this.player_.addRemoteTextTrack(tracks[i],true);}this.preselectTrack();}));return _this;}/**\n * Preselect a track following this precedence:\n * - matches the previously selected {@link TextTrack}'s language and kind\n * - matches the previously selected {@link TextTrack}'s language only\n * - is the first default captions track\n * - is the first default descriptions track\n *\n * @listens Player#loadstart\n */var _proto=TextTrackDisplay.prototype;_proto.preselectTrack=function preselectTrack(){var modes={captions:1,subtitles:1};var trackList=this.player_.textTracks();var userPref=this.player_.cache_.selectedLanguage;var firstDesc;var firstCaptions;var preferredTrack;for(var i=0;i<trackList.length;i++){var track=trackList[i];if(userPref&&userPref.enabled&&userPref.language&&userPref.language===track.language&&track.kind in modes){// Always choose the track that matches both language and kind\nif(track.kind===userPref.kind){preferredTrack=track;// or choose the first track that matches language\n}else if(!preferredTrack){preferredTrack=track;}// clear everything if offTextTrackMenuItem was clicked\n}else if(userPref&&!userPref.enabled){preferredTrack=null;firstDesc=null;firstCaptions=null;}else if(track[\"default\"]){if(track.kind==='descriptions'&&!firstDesc){firstDesc=track;}else if(track.kind in modes&&!firstCaptions){firstCaptions=track;}}}// The preferredTrack matches the user preference and takes\n// precedence over all the other tracks.\n// So, display the preferredTrack before the first default track\n// and the subtitles/captions track before the descriptions track\nif(preferredTrack){preferredTrack.mode='showing';}else if(firstCaptions){firstCaptions.mode='showing';}else if(firstDesc){firstDesc.mode='showing';}}/**\n * Turn display of {@link TextTrack}'s from the current state into the other state.\n * There are only two states:\n * - 'shown'\n * - 'hidden'\n *\n * @listens Player#loadstart\n */;_proto.toggleDisplay=function toggleDisplay(){if(this.player_.tech_&&this.player_.tech_.featuresNativeTextTracks){this.hide();}else{this.show();}}/**\n * Create the {@link Component}'s DOM element.\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-text-track-display'},{'aria-live':'off','aria-atomic':'true'});}/**\n * Clear all displayed {@link TextTrack}s.\n */;_proto.clearDisplay=function clearDisplay(){if(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT==='function'){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.processCues(global_window__WEBPACK_IMPORTED_MODULE_0___default.a,[],this.el_);}}/**\n * Update the displayed TextTrack when a either a {@link Player#texttrackchange} or\n * a {@link Player#fullscreenchange} is fired.\n *\n * @listens Player#texttrackchange\n * @listens Player#fullscreenchange\n */;_proto.updateDisplay=function updateDisplay(){var tracks=this.player_.textTracks();var allowMultipleShowingTracks=this.options_.allowMultipleShowingTracks;this.clearDisplay();if(allowMultipleShowingTracks){var showingTracks=[];for(var _i=0;_i<tracks.length;++_i){var track=tracks[_i];if(track.mode!=='showing'){continue;}showingTracks.push(track);}this.updateForTrack(showingTracks);return;}// Track display prioritization model: if multiple tracks are 'showing',\n// display the first 'subtitles' or 'captions' track which is 'showing',\n// otherwise display the first 'descriptions' track which is 'showing'\nvar descriptionsTrack=null;var captionsSubtitlesTrack=null;var i=tracks.length;while(i--){var _track=tracks[i];if(_track.mode==='showing'){if(_track.kind==='descriptions'){descriptionsTrack=_track;}else{captionsSubtitlesTrack=_track;}}}if(captionsSubtitlesTrack){if(this.getAttribute('aria-live')!=='off'){this.setAttribute('aria-live','off');}this.updateForTrack(captionsSubtitlesTrack);}else if(descriptionsTrack){if(this.getAttribute('aria-live')!=='assertive'){this.setAttribute('aria-live','assertive');}this.updateForTrack(descriptionsTrack);}}/**\n * Style {@Link TextTrack} activeCues according to {@Link TextTrackSettings}.\n *\n * @param {TextTrack} track\n * Text track object containing active cues to style.\n */;_proto.updateDisplayState=function updateDisplayState(track){var overrides=this.player_.textTrackSettings.getValues();var cues=track.activeCues;var i=cues.length;while(i--){var cue=cues[i];if(!cue){continue;}var cueDiv=cue.displayState;if(overrides.color){cueDiv.firstChild.style.color=overrides.color;}if(overrides.textOpacity){tryUpdateStyle(cueDiv.firstChild,'color',constructColor(overrides.color||'#fff',overrides.textOpacity));}if(overrides.backgroundColor){cueDiv.firstChild.style.backgroundColor=overrides.backgroundColor;}if(overrides.backgroundOpacity){tryUpdateStyle(cueDiv.firstChild,'backgroundColor',constructColor(overrides.backgroundColor||'#000',overrides.backgroundOpacity));}if(overrides.windowColor){if(overrides.windowOpacity){tryUpdateStyle(cueDiv,'backgroundColor',constructColor(overrides.windowColor,overrides.windowOpacity));}else{cueDiv.style.backgroundColor=overrides.windowColor;}}if(overrides.edgeStyle){if(overrides.edgeStyle==='dropshadow'){cueDiv.firstChild.style.textShadow=\"2px 2px 3px \"+darkGray+\", 2px 2px 4px \"+darkGray+\", 2px 2px 5px \"+darkGray;}else if(overrides.edgeStyle==='raised'){cueDiv.firstChild.style.textShadow=\"1px 1px \"+darkGray+\", 2px 2px \"+darkGray+\", 3px 3px \"+darkGray;}else if(overrides.edgeStyle==='depressed'){cueDiv.firstChild.style.textShadow=\"1px 1px \"+lightGray+\", 0 1px \"+lightGray+\", -1px -1px \"+darkGray+\", 0 -1px \"+darkGray;}else if(overrides.edgeStyle==='uniform'){cueDiv.firstChild.style.textShadow=\"0 0 4px \"+darkGray+\", 0 0 4px \"+darkGray+\", 0 0 4px \"+darkGray+\", 0 0 4px \"+darkGray;}}if(overrides.fontPercent&&overrides.fontPercent!==1){var fontSize=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.parseFloat(cueDiv.style.fontSize);cueDiv.style.fontSize=fontSize*overrides.fontPercent+'px';cueDiv.style.height='auto';cueDiv.style.top='auto';cueDiv.style.bottom='2px';}if(overrides.fontFamily&&overrides.fontFamily!=='default'){if(overrides.fontFamily==='small-caps'){cueDiv.firstChild.style.fontVariant='small-caps';}else{cueDiv.firstChild.style.fontFamily=fontMap[overrides.fontFamily];}}}}/**\n * Add an {@link TextTrack} to to the {@link Tech}s {@link TextTrackList}.\n *\n * @param {TextTrack|TextTrack[]} tracks\n * Text track object or text track array to be added to the list.\n */;_proto.updateForTrack=function updateForTrack(tracks){if(!Array.isArray(tracks)){tracks=[tracks];}if(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT!=='function'||tracks.every(function(track){return!track.activeCues;})){return;}var cues=[];// push all active track cues\nfor(var i=0;i<tracks.length;++i){var track=tracks[i];for(var j=0;j<track.activeCues.length;++j){cues.push(track.activeCues[j]);}}// removes all cues before it processes new ones\nglobal_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.processCues(global_window__WEBPACK_IMPORTED_MODULE_0___default.a,cues,this.el_);// add unique class to each language text track & add settings styling if necessary\nfor(var _i2=0;_i2<tracks.length;++_i2){var _track2=tracks[_i2];for(var _j=0;_j<_track2.activeCues.length;++_j){var cueEl=_track2.activeCues[_j].displayState;addClass(cueEl,'vjs-text-track-cue');addClass(cueEl,'vjs-text-track-cue-'+(_track2.language?_track2.language:_i2));}if(this.player_.textTrackSettings){this.updateDisplayState(_track2);}}};return TextTrackDisplay;}(Component);Component.registerComponent('TextTrackDisplay',TextTrackDisplay);/**\n * A loading spinner for use during waiting/loading events.\n *\n * @extends Component\n */var LoadingSpinner=/*#__PURE__*/function(_Component){_inheritsLoose(LoadingSpinner,_Component);function LoadingSpinner(){return _Component.apply(this,arguments)||this;}var _proto=LoadingSpinner.prototype;/**\n * Create the `LoadingSpinner`s DOM element.\n *\n * @return {Element}\n * The dom element that gets created.\n */_proto.createEl=function createEl$1(){var isAudio=this.player_.isAudio();var playerType=this.localize(isAudio?'Audio Player':'Video Player');var controlText=createEl('span',{className:'vjs-control-text',innerHTML:this.localize('{1} is loading.',[playerType])});var el=_Component.prototype.createEl.call(this,'div',{className:'vjs-loading-spinner',dir:'ltr'});el.appendChild(controlText);return el;};return LoadingSpinner;}(Component);Component.registerComponent('LoadingSpinner',LoadingSpinner);/**\n * Base class for all buttons.\n *\n * @extends ClickableComponent\n */var Button=/*#__PURE__*/function(_ClickableComponent){_inheritsLoose(Button,_ClickableComponent);function Button(){return _ClickableComponent.apply(this,arguments)||this;}var _proto=Button.prototype;/**\n * Create the `Button`s DOM element.\n *\n * @param {string} [tag=\"button\"]\n * The element's node type. This argument is IGNORED: no matter what\n * is passed, it will always create a `button` element.\n *\n * @param {Object} [props={}]\n * An object of properties that should be set on the element.\n *\n * @param {Object} [attributes={}]\n * An object of attributes that should be set on the element.\n *\n * @return {Element}\n * The element that gets created.\n */_proto.createEl=function createEl(tag,props,attributes){if(props===void 0){props={};}if(attributes===void 0){attributes={};}tag='button';props=assign({innerHTML:'<span aria-hidden=\"true\" class=\"vjs-icon-placeholder\"></span>',className:this.buildCSSClass()},props);// Add attributes for button element\nattributes=assign({// Necessary since the default button type is \"submit\"\ntype:'button'},attributes);var el=Component.prototype.createEl.call(this,tag,props,attributes);this.createControlTextEl(el);return el;}/**\n * Add a child `Component` inside of this `Button`.\n *\n * @param {string|Component} child\n * The name or instance of a child to add.\n *\n * @param {Object} [options={}]\n * The key/value store of options that will get passed to children of\n * the child.\n *\n * @return {Component}\n * The `Component` that gets added as a child. When using a string the\n * `Component` will get created by this process.\n *\n * @deprecated since version 5\n */;_proto.addChild=function addChild(child,options){if(options===void 0){options={};}var className=this.constructor.name;log.warn(\"Adding an actionable (user controllable) child to a Button (\"+className+\") is not supported; use a ClickableComponent instead.\");// Avoid the error message generated by ClickableComponent's addChild method\nreturn Component.prototype.addChild.call(this,child,options);}/**\n * Enable the `Button` element so that it can be activated or clicked. Use this with\n * {@link Button#disable}.\n */;_proto.enable=function enable(){_ClickableComponent.prototype.enable.call(this);this.el_.removeAttribute('disabled');}/**\n * Disable the `Button` element so that it cannot be activated or clicked. Use this with\n * {@link Button#enable}.\n */;_proto.disable=function disable(){_ClickableComponent.prototype.disable.call(this);this.el_.setAttribute('disabled','disabled');}/**\n * This gets called when a `Button` has focus and `keydown` is triggered via a key\n * press.\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to get called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Ignore Space or Enter key operation, which is handled by the browser for\n// a button - though not for its super class, ClickableComponent. Also,\n// prevent the event from propagating through the DOM and triggering Player\n// hotkeys. We do not preventDefault here because we _want_ the browser to\n// handle it.\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Space')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Enter')){event.stopPropagation();return;}// Pass keypress handling up for unsupported keys\n_ClickableComponent.prototype.handleKeyDown.call(this,event);};return Button;}(ClickableComponent);Component.registerComponent('Button',Button);/**\n * The initial play button that shows before the video has played. The hiding of the\n * `BigPlayButton` get done via CSS and `Player` states.\n *\n * @extends Button\n */var BigPlayButton=/*#__PURE__*/function(_Button){_inheritsLoose(BigPlayButton,_Button);function BigPlayButton(player,options){var _this;_this=_Button.call(this,player,options)||this;_this.mouseused_=false;_this.on('mousedown',_this.handleMouseDown);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object. Always returns 'vjs-big-play-button'.\n */var _proto=BigPlayButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return'vjs-big-play-button';}/**\n * This gets called when a `BigPlayButton` \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} event\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){var playPromise=this.player_.play();// exit early if clicked via the mouse\nif(this.mouseused_&&event.clientX&&event.clientY){silencePromise(playPromise);if(this.player_.tech(true)){this.player_.tech(true).focus();}return;}var cb=this.player_.getChild('controlBar');var playToggle=cb&&cb.getChild('playToggle');if(!playToggle){this.player_.tech(true).focus();return;}var playFocus=function playFocus(){return playToggle.focus();};if(isPromise(playPromise)){playPromise.then(playFocus,function(){});}else{this.setTimeout(playFocus,1);}};_proto.handleKeyDown=function handleKeyDown(event){this.mouseused_=false;_Button.prototype.handleKeyDown.call(this,event);};_proto.handleMouseDown=function handleMouseDown(event){this.mouseused_=true;};return BigPlayButton;}(Button);/**\n * The text that should display over the `BigPlayButton`s controls. Added to for localization.\n *\n * @type {string}\n * @private\n */BigPlayButton.prototype.controlText_='Play Video';Component.registerComponent('BigPlayButton',BigPlayButton);/**\n * The `CloseButton` is a `{@link Button}` that fires a `close` event when\n * it gets clicked.\n *\n * @extends Button\n */var CloseButton=/*#__PURE__*/function(_Button){_inheritsLoose(CloseButton,_Button);/**\n * Creates an instance of the this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function CloseButton(player,options){var _this;_this=_Button.call(this,player,options)||this;_this.controlText(options&&options.controlText||_this.localize('Close'));return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=CloseButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-close-button \"+_Button.prototype.buildCSSClass.call(this);}/**\n * This gets called when a `CloseButton` gets clicked. See\n * {@link ClickableComponent#handleClick} for more information on when\n * this will be triggered\n *\n * @param {EventTarget~Event} event\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n * @fires CloseButton#close\n */;_proto.handleClick=function handleClick(event){/**\n * Triggered when the a `CloseButton` is clicked.\n *\n * @event CloseButton#close\n * @type {EventTarget~Event}\n *\n * @property {boolean} [bubbles=false]\n * set to false so that the close event does not\n * bubble up to parents if there is no listener\n */this.trigger({type:'close',bubbles:false});}/**\n * Event handler that is called when a `CloseButton` receives a\n * `keydown` event.\n *\n * By default, if the key is Esc, it will trigger a `click` event.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Esc button will trigger `click` event\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')){event.preventDefault();event.stopPropagation();this.trigger('click');}else{// Pass keypress handling up for unsupported keys\n_Button.prototype.handleKeyDown.call(this,event);}};return CloseButton;}(Button);Component.registerComponent('CloseButton',CloseButton);/**\n * Button to toggle between play and pause.\n *\n * @extends Button\n */var PlayToggle=/*#__PURE__*/function(_Button){_inheritsLoose(PlayToggle,_Button);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function PlayToggle(player,options){var _this;if(options===void 0){options={};}_this=_Button.call(this,player,options)||this;// show or hide replay icon\noptions.replay=options.replay===undefined||options.replay;_this.on(player,'play',_this.handlePlay);_this.on(player,'pause',_this.handlePause);if(options.replay){_this.on(player,'ended',_this.handleEnded);}return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=PlayToggle.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-play-control \"+_Button.prototype.buildCSSClass.call(this);}/**\n * This gets called when an `PlayToggle` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){if(this.player_.paused()){this.player_.play();}else{this.player_.pause();}}/**\n * This gets called once after the video has ended and the user seeks so that\n * we can change the replay button back to a play button.\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#seeked\n */;_proto.handleSeeked=function handleSeeked(event){this.removeClass('vjs-ended');if(this.player_.paused()){this.handlePause(event);}else{this.handlePlay(event);}}/**\n * Add the vjs-playing class to the element so it can change appearance.\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#play\n */;_proto.handlePlay=function handlePlay(event){this.removeClass('vjs-ended');this.removeClass('vjs-paused');this.addClass('vjs-playing');// change the button text to \"Pause\"\nthis.controlText('Pause');}/**\n * Add the vjs-paused class to the element so it can change appearance.\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#pause\n */;_proto.handlePause=function handlePause(event){this.removeClass('vjs-playing');this.addClass('vjs-paused');// change the button text to \"Play\"\nthis.controlText('Play');}/**\n * Add the vjs-ended class to the element so it can change appearance\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#ended\n */;_proto.handleEnded=function handleEnded(event){this.removeClass('vjs-playing');this.addClass('vjs-ended');// change the button text to \"Replay\"\nthis.controlText('Replay');// on the next seek remove the replay button\nthis.one(this.player_,'seeked',this.handleSeeked);};return PlayToggle;}(Button);/**\n * The text that should display over the `PlayToggle`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */PlayToggle.prototype.controlText_='Play';Component.registerComponent('PlayToggle',PlayToggle);/**\n * @file format-time.js\n * @module format-time\n */ /**\n * Format seconds as a time string, H:MM:SS or M:SS. Supplying a guide (in\n * seconds) will force a number of leading zeros to cover the length of the\n * guide.\n *\n * @private\n * @param {number} seconds\n * Number of seconds to be turned into a string\n *\n * @param {number} guide\n * Number (in seconds) to model the string after\n *\n * @return {string}\n * Time formatted as H:MM:SS or M:SS\n */var defaultImplementation=function defaultImplementation(seconds,guide){seconds=seconds<0?0:seconds;var s=Math.floor(seconds%60);var m=Math.floor(seconds/60%60);var h=Math.floor(seconds/3600);var gm=Math.floor(guide/60%60);var gh=Math.floor(guide/3600);// handle invalid times\nif(isNaN(seconds)||seconds===Infinity){// '-' is false for all relational operators (e.g. <, >=) so this setting\n// will add the minimum number of fields specified by the guide\nh=m=s='-';}// Check if we need to show hours\nh=h>0||gh>0?h+':':'';// If hours are showing, we may need to add a leading zero.\n// Always show at least one digit of minutes.\nm=((h||gm>=10)&&m<10?'0'+m:m)+':';// Check if leading zero is need for seconds\ns=s<10?'0'+s:s;return h+m+s;};// Internal pointer to the current implementation.\nvar implementation=defaultImplementation;/**\n * Replaces the default formatTime implementation with a custom implementation.\n *\n * @param {Function} customImplementation\n * A function which will be used in place of the default formatTime\n * implementation. Will receive the current time in seconds and the\n * guide (in seconds) as arguments.\n */function setFormatTime(customImplementation){implementation=customImplementation;}/**\n * Resets formatTime to the default implementation.\n */function resetFormatTime(){implementation=defaultImplementation;}/**\n * Delegates to either the default time formatting function or a custom\n * function supplied via `setFormatTime`.\n *\n * Formats seconds as a time string (H:MM:SS or M:SS). Supplying a\n * guide (in seconds) will force a number of leading zeros to cover the\n * length of the guide.\n *\n * @static\n * @example formatTime(125, 600) === \"02:05\"\n * @param {number} seconds\n * Number of seconds to be turned into a string\n *\n * @param {number} guide\n * Number (in seconds) to model the string after\n *\n * @return {string}\n * Time formatted as H:MM:SS or M:SS\n */function formatTime(seconds,guide){if(guide===void 0){guide=seconds;}return implementation(seconds,guide);}/**\n * Displays time information about the video\n *\n * @extends Component\n */var TimeDisplay=/*#__PURE__*/function(_Component){_inheritsLoose(TimeDisplay,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function TimeDisplay(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.throttledUpdateContent=throttle(bind(_assertThisInitialized(_this),_this.updateContent),UPDATE_REFRESH_INTERVAL);_this.on(player,'timeupdate',_this.throttledUpdateContent);return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=TimeDisplay.prototype;_proto.createEl=function createEl$1(){var className=this.buildCSSClass();var el=_Component.prototype.createEl.call(this,'div',{className:className+\" vjs-time-control vjs-control\",innerHTML:\"<span class=\\\"vjs-control-text\\\" role=\\\"presentation\\\">\"+this.localize(this.labelText_)+\"\\xA0</span>\"});this.contentEl_=createEl('span',{className:className+\"-display\"},{// tell screen readers not to automatically read the time as it changes\n'aria-live':'off',// span elements have no implicit role, but some screen readers (notably VoiceOver)\n// treat them as a break between items in the DOM when using arrow keys\n// (or left-to-right swipes on iOS) to read contents of a page. Using\n// role='presentation' causes VoiceOver to NOT treat this span as a break.\n'role':'presentation'});this.updateTextNode_();el.appendChild(this.contentEl_);return el;};_proto.dispose=function dispose(){this.contentEl_=null;this.textNode_=null;_Component.prototype.dispose.call(this);}/**\n * Updates the \"remaining time\" text node with new content using the\n * contents of the `formattedTime_` property.\n *\n * @private\n */;_proto.updateTextNode_=function updateTextNode_(){if(!this.contentEl_){return;}while(this.contentEl_.firstChild){this.contentEl_.removeChild(this.contentEl_.firstChild);}this.textNode_=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createTextNode(this.formattedTime_||this.formatTime_(0));this.contentEl_.appendChild(this.textNode_);}/**\n * Generates a formatted time for this component to use in display.\n *\n * @param {number} time\n * A numeric time, in seconds.\n *\n * @return {string}\n * A formatted time\n *\n * @private\n */;_proto.formatTime_=function formatTime_(time){return formatTime(time);}/**\n * Updates the time display text node if it has what was passed in changed\n * the formatted time.\n *\n * @param {number} time\n * The time to update to\n *\n * @private\n */;_proto.updateFormattedTime_=function updateFormattedTime_(time){var formattedTime=this.formatTime_(time);if(formattedTime===this.formattedTime_){return;}this.formattedTime_=formattedTime;this.requestAnimationFrame(this.updateTextNode_);}/**\n * To be filled out in the child class, should update the displayed time\n * in accordance with the fact that the current time has changed.\n *\n * @param {EventTarget~Event} [event]\n * The `timeupdate` event that caused this to run.\n *\n * @listens Player#timeupdate\n */;_proto.updateContent=function updateContent(event){};return TimeDisplay;}(Component);/**\n * The text that is added to the `TimeDisplay` for screen reader users.\n *\n * @type {string}\n * @private\n */TimeDisplay.prototype.labelText_='Time';/**\n * The text that should display over the `TimeDisplay`s controls. Added to for localization.\n *\n * @type {string}\n * @private\n *\n * @deprecated in v7; controlText_ is not used in non-active display Components\n */TimeDisplay.prototype.controlText_='Time';Component.registerComponent('TimeDisplay',TimeDisplay);/**\n * Displays the current time\n *\n * @extends Component\n */var CurrentTimeDisplay=/*#__PURE__*/function(_TimeDisplay){_inheritsLoose(CurrentTimeDisplay,_TimeDisplay);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function CurrentTimeDisplay(player,options){var _this;_this=_TimeDisplay.call(this,player,options)||this;_this.on(player,'ended',_this.handleEnded);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=CurrentTimeDisplay.prototype;_proto.buildCSSClass=function buildCSSClass(){return'vjs-current-time';}/**\n * Update current time display\n *\n * @param {EventTarget~Event} [event]\n * The `timeupdate` event that caused this function to run.\n *\n * @listens Player#timeupdate\n */;_proto.updateContent=function updateContent(event){// Allows for smooth scrubbing, when player can't keep up.\nvar time=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.updateFormattedTime_(time);}/**\n * When the player fires ended there should be no time left. Sadly\n * this is not always the case, lets make it seem like that is the case\n * for users.\n *\n * @param {EventTarget~Event} [event]\n * The `ended` event that caused this to run.\n *\n * @listens Player#ended\n */;_proto.handleEnded=function handleEnded(event){if(!this.player_.duration()){return;}this.updateFormattedTime_(this.player_.duration());};return CurrentTimeDisplay;}(TimeDisplay);/**\n * The text that is added to the `CurrentTimeDisplay` for screen reader users.\n *\n * @type {string}\n * @private\n */CurrentTimeDisplay.prototype.labelText_='Current Time';/**\n * The text that should display over the `CurrentTimeDisplay`s controls. Added to for localization.\n *\n * @type {string}\n * @private\n *\n * @deprecated in v7; controlText_ is not used in non-active display Components\n */CurrentTimeDisplay.prototype.controlText_='Current Time';Component.registerComponent('CurrentTimeDisplay',CurrentTimeDisplay);/**\n * Displays the duration\n *\n * @extends Component\n */var DurationDisplay=/*#__PURE__*/function(_TimeDisplay){_inheritsLoose(DurationDisplay,_TimeDisplay);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function DurationDisplay(player,options){var _this;_this=_TimeDisplay.call(this,player,options)||this;// we do not want to/need to throttle duration changes,\n// as they should always display the changed duration as\n// it has changed\n_this.on(player,'durationchange',_this.updateContent);// Listen to loadstart because the player duration is reset when a new media element is loaded,\n// but the durationchange on the user agent will not fire.\n// @see [Spec]{@link https://www.w3.org/TR/2011/WD-html5-20110113/video.html#media-element-load-algorithm}\n_this.on(player,'loadstart',_this.updateContent);// Also listen for timeupdate (in the parent) and loadedmetadata because removing those\n// listeners could have broken dependent applications/libraries. These\n// can likely be removed for 7.0.\n_this.on(player,'loadedmetadata',_this.throttledUpdateContent);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=DurationDisplay.prototype;_proto.buildCSSClass=function buildCSSClass(){return'vjs-duration';}/**\n * Update duration time display.\n *\n * @param {EventTarget~Event} [event]\n * The `durationchange`, `timeupdate`, or `loadedmetadata` event that caused\n * this function to be called.\n *\n * @listens Player#durationchange\n * @listens Player#timeupdate\n * @listens Player#loadedmetadata\n */;_proto.updateContent=function updateContent(event){var duration=this.player_.duration();if(this.duration_!==duration){this.duration_=duration;this.updateFormattedTime_(duration);}};return DurationDisplay;}(TimeDisplay);/**\n * The text that is added to the `DurationDisplay` for screen reader users.\n *\n * @type {string}\n * @private\n */DurationDisplay.prototype.labelText_='Duration';/**\n * The text that should display over the `DurationDisplay`s controls. Added to for localization.\n *\n * @type {string}\n * @private\n *\n * @deprecated in v7; controlText_ is not used in non-active display Components\n */DurationDisplay.prototype.controlText_='Duration';Component.registerComponent('DurationDisplay',DurationDisplay);/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @extends Component\n */var TimeDivider=/*#__PURE__*/function(_Component){_inheritsLoose(TimeDivider,_Component);function TimeDivider(){return _Component.apply(this,arguments)||this;}var _proto=TimeDivider.prototype;/**\n * Create the component's DOM element\n *\n * @return {Element}\n * The element that was created.\n */_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-time-control vjs-time-divider',innerHTML:'<div><span>/</span></div>'},{// this element and its contents can be hidden from assistive techs since\n// it is made extraneous by the announcement of the control text\n// for the current time and duration displays\n'aria-hidden':true});};return TimeDivider;}(Component);Component.registerComponent('TimeDivider',TimeDivider);/**\n * Displays the time left in the video\n *\n * @extends Component\n */var RemainingTimeDisplay=/*#__PURE__*/function(_TimeDisplay){_inheritsLoose(RemainingTimeDisplay,_TimeDisplay);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function RemainingTimeDisplay(player,options){var _this;_this=_TimeDisplay.call(this,player,options)||this;_this.on(player,'durationchange',_this.throttledUpdateContent);_this.on(player,'ended',_this.handleEnded);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=RemainingTimeDisplay.prototype;_proto.buildCSSClass=function buildCSSClass(){return'vjs-remaining-time';}/**\n * Create the `Component`'s DOM element with the \"minus\" characted prepend to the time\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl$1(){var el=_TimeDisplay.prototype.createEl.call(this);el.insertBefore(createEl('span',{},{'aria-hidden':true},'-'),this.contentEl_);return el;}/**\n * Update remaining time display.\n *\n * @param {EventTarget~Event} [event]\n * The `timeupdate` or `durationchange` event that caused this to run.\n *\n * @listens Player#timeupdate\n * @listens Player#durationchange\n */;_proto.updateContent=function updateContent(event){if(typeof this.player_.duration()!=='number'){return;}// @deprecated We should only use remainingTimeDisplay\n// as of video.js 7\nif(this.player_.remainingTimeDisplay){this.updateFormattedTime_(this.player_.remainingTimeDisplay());}else{this.updateFormattedTime_(this.player_.remainingTime());}}/**\n * When the player fires ended there should be no time left. Sadly\n * this is not always the case, lets make it seem like that is the case\n * for users.\n *\n * @param {EventTarget~Event} [event]\n * The `ended` event that caused this to run.\n *\n * @listens Player#ended\n */;_proto.handleEnded=function handleEnded(event){if(!this.player_.duration()){return;}this.updateFormattedTime_(0);};return RemainingTimeDisplay;}(TimeDisplay);/**\n * The text that is added to the `RemainingTimeDisplay` for screen reader users.\n *\n * @type {string}\n * @private\n */RemainingTimeDisplay.prototype.labelText_='Remaining Time';/**\n * The text that should display over the `RemainingTimeDisplay`s controls. Added to for localization.\n *\n * @type {string}\n * @private\n *\n * @deprecated in v7; controlText_ is not used in non-active display Components\n */RemainingTimeDisplay.prototype.controlText_='Remaining Time';Component.registerComponent('RemainingTimeDisplay',RemainingTimeDisplay);/**\n * Displays the live indicator when duration is Infinity.\n *\n * @extends Component\n */var LiveDisplay=/*#__PURE__*/function(_Component){_inheritsLoose(LiveDisplay,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function LiveDisplay(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.updateShowing();_this.on(_this.player(),'durationchange',_this.updateShowing);return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=LiveDisplay.prototype;_proto.createEl=function createEl$1(){var el=_Component.prototype.createEl.call(this,'div',{className:'vjs-live-control vjs-control'});this.contentEl_=createEl('div',{className:'vjs-live-display',innerHTML:\"<span class=\\\"vjs-control-text\\\">\"+this.localize('Stream Type')+\"\\xA0</span>\"+this.localize('LIVE')},{'aria-live':'off'});el.appendChild(this.contentEl_);return el;};_proto.dispose=function dispose(){this.contentEl_=null;_Component.prototype.dispose.call(this);}/**\n * Check the duration to see if the LiveDisplay should be showing or not. Then show/hide\n * it accordingly\n *\n * @param {EventTarget~Event} [event]\n * The {@link Player#durationchange} event that caused this function to run.\n *\n * @listens Player#durationchange\n */;_proto.updateShowing=function updateShowing(event){if(this.player().duration()===Infinity){this.show();}else{this.hide();}};return LiveDisplay;}(Component);Component.registerComponent('LiveDisplay',LiveDisplay);/**\n * Displays the live indicator when duration is Infinity.\n *\n * @extends Component\n */var SeekToLive=/*#__PURE__*/function(_Button){_inheritsLoose(SeekToLive,_Button);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function SeekToLive(player,options){var _this;_this=_Button.call(this,player,options)||this;_this.updateLiveEdgeStatus();if(_this.player_.liveTracker){_this.on(_this.player_.liveTracker,'liveedgechange',_this.updateLiveEdgeStatus);}return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=SeekToLive.prototype;_proto.createEl=function createEl$1(){var el=_Button.prototype.createEl.call(this,'button',{className:'vjs-seek-to-live-control vjs-control'});this.textEl_=createEl('span',{className:'vjs-seek-to-live-text',innerHTML:this.localize('LIVE')},{'aria-hidden':'true'});el.appendChild(this.textEl_);return el;}/**\n * Update the state of this button if we are at the live edge\n * or not\n */;_proto.updateLiveEdgeStatus=function updateLiveEdgeStatus(e){// default to live edge\nif(!this.player_.liveTracker||this.player_.liveTracker.atLiveEdge()){this.setAttribute('aria-disabled',true);this.addClass('vjs-at-live-edge');this.controlText('Seek to live, currently playing live');}else{this.setAttribute('aria-disabled',false);this.removeClass('vjs-at-live-edge');this.controlText('Seek to live, currently behind live');}}/**\n * On click bring us as near to the live point as possible.\n * This requires that we wait for the next `live-seekable-change`\n * event which will happen every segment length seconds.\n */;_proto.handleClick=function handleClick(){this.player_.liveTracker.seekToLiveEdge();}/**\n * Dispose of the element and stop tracking\n */;_proto.dispose=function dispose(){if(this.player_.liveTracker){this.off(this.player_.liveTracker,'liveedgechange',this.updateLiveEdgeStatus);}this.textEl_=null;_Button.prototype.dispose.call(this);};return SeekToLive;}(Button);SeekToLive.prototype.controlText_='Seek to live, currently playing live';Component.registerComponent('SeekToLive',SeekToLive);/**\n * The base functionality for a slider. Can be vertical or horizontal.\n * For instance the volume bar or the seek bar on a video is a slider.\n *\n * @extends Component\n */var Slider=/*#__PURE__*/function(_Component){_inheritsLoose(Slider,_Component);/**\n * Create an instance of this class\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function Slider(player,options){var _this;_this=_Component.call(this,player,options)||this;// Set property names to bar to match with the child Slider class is looking for\n_this.bar=_this.getChild(_this.options_.barName);// Set a horizontal or vertical class on the slider depending on the slider type\n_this.vertical(!!_this.options_.vertical);_this.enable();return _this;}/**\n * Are controls are currently enabled for this slider or not.\n *\n * @return {boolean}\n * true if controls are enabled, false otherwise\n */var _proto=Slider.prototype;_proto.enabled=function enabled(){return this.enabled_;}/**\n * Enable controls for this slider if they are disabled\n */;_proto.enable=function enable(){if(this.enabled()){return;}this.on('mousedown',this.handleMouseDown);this.on('touchstart',this.handleMouseDown);this.on('keydown',this.handleKeyDown);this.on('click',this.handleClick);// TODO: deprecated, controlsvisible does not seem to be fired\nthis.on(this.player_,'controlsvisible',this.update);if(this.playerEvent){this.on(this.player_,this.playerEvent,this.update);}this.removeClass('disabled');this.setAttribute('tabindex',0);this.enabled_=true;}/**\n * Disable controls for this slider if they are enabled\n */;_proto.disable=function disable(){if(!this.enabled()){return;}var doc=this.bar.el_.ownerDocument;this.off('mousedown',this.handleMouseDown);this.off('touchstart',this.handleMouseDown);this.off('keydown',this.handleKeyDown);this.off('click',this.handleClick);this.off(this.player_,'controlsvisible',this.update);this.off(doc,'mousemove',this.handleMouseMove);this.off(doc,'mouseup',this.handleMouseUp);this.off(doc,'touchmove',this.handleMouseMove);this.off(doc,'touchend',this.handleMouseUp);this.removeAttribute('tabindex');this.addClass('disabled');if(this.playerEvent){this.off(this.player_,this.playerEvent,this.update);}this.enabled_=false;}/**\n * Create the `Slider`s DOM element.\n *\n * @param {string} type\n * Type of element to create.\n *\n * @param {Object} [props={}]\n * List of properties in Object form.\n *\n * @param {Object} [attributes={}]\n * list of attributes in Object form.\n *\n * @return {Element}\n * The element that gets created.\n */;_proto.createEl=function createEl(type,props,attributes){if(props===void 0){props={};}if(attributes===void 0){attributes={};}// Add the slider element class to all sub classes\nprops.className=props.className+' vjs-slider';props=assign({tabIndex:0},props);attributes=assign({'role':'slider','aria-valuenow':0,'aria-valuemin':0,'aria-valuemax':100,'tabIndex':0},attributes);return _Component.prototype.createEl.call(this,type,props,attributes);}/**\n * Handle `mousedown` or `touchstart` events on the `Slider`.\n *\n * @param {EventTarget~Event} event\n * `mousedown` or `touchstart` event that triggered this function\n *\n * @listens mousedown\n * @listens touchstart\n * @fires Slider#slideractive\n */;_proto.handleMouseDown=function handleMouseDown(event){var doc=this.bar.el_.ownerDocument;if(event.type==='mousedown'){event.preventDefault();}// Do not call preventDefault() on touchstart in Chrome\n// to avoid console warnings. Use a 'touch-action: none' style\n// instead to prevent unintented scrolling.\n// https://developers.google.com/web/updates/2017/01/scrolling-intervention\nif(event.type==='touchstart'&&!IS_CHROME){event.preventDefault();}blockTextSelection();this.addClass('vjs-sliding');/**\n * Triggered when the slider is in an active state\n *\n * @event Slider#slideractive\n * @type {EventTarget~Event}\n */this.trigger('slideractive');this.on(doc,'mousemove',this.handleMouseMove);this.on(doc,'mouseup',this.handleMouseUp);this.on(doc,'touchmove',this.handleMouseMove);this.on(doc,'touchend',this.handleMouseUp);this.handleMouseMove(event);}/**\n * Handle the `mousemove`, `touchmove`, and `mousedown` events on this `Slider`.\n * The `mousemove` and `touchmove` events will only only trigger this function during\n * `mousedown` and `touchstart`. This is due to {@link Slider#handleMouseDown} and\n * {@link Slider#handleMouseUp}.\n *\n * @param {EventTarget~Event} event\n * `mousedown`, `mousemove`, `touchstart`, or `touchmove` event that triggered\n * this function\n *\n * @listens mousemove\n * @listens touchmove\n */;_proto.handleMouseMove=function handleMouseMove(event){}/**\n * Handle `mouseup` or `touchend` events on the `Slider`.\n *\n * @param {EventTarget~Event} event\n * `mouseup` or `touchend` event that triggered this function.\n *\n * @listens touchend\n * @listens mouseup\n * @fires Slider#sliderinactive\n */;_proto.handleMouseUp=function handleMouseUp(){var doc=this.bar.el_.ownerDocument;unblockTextSelection();this.removeClass('vjs-sliding');/**\n * Triggered when the slider is no longer in an active state.\n *\n * @event Slider#sliderinactive\n * @type {EventTarget~Event}\n */this.trigger('sliderinactive');this.off(doc,'mousemove',this.handleMouseMove);this.off(doc,'mouseup',this.handleMouseUp);this.off(doc,'touchmove',this.handleMouseMove);this.off(doc,'touchend',this.handleMouseUp);this.update();}/**\n * Update the progress bar of the `Slider`.\n *\n * @return {number}\n * The percentage of progress the progress bar represents as a\n * number from 0 to 1.\n */;_proto.update=function update(){// In VolumeBar init we have a setTimeout for update that pops and update\n// to the end of the execution stack. The player is destroyed before then\n// update will cause an error\nif(!this.el_){return;}// If scrubbing, we could use a cached value to make the handle keep up\n// with the user's mouse. On HTML5 browsers scrubbing is really smooth, but\n// some flash players are slow, so we might want to utilize this later.\n// var progress = (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\nvar progress=this.getPercent();var bar=this.bar;// If there's no bar...\nif(!bar){return;}// Protect against no duration and other division issues\nif(typeof progress!=='number'||progress!==progress||progress<0||progress===Infinity){progress=0;}// Convert to a percentage for setting\nvar percentage=(progress*100).toFixed(2)+'%';var style=bar.el().style;// Set the new bar width or height\nvar sizeKey=this.vertical()?'height':'width';if(style[sizeKey]!==percentage){style[sizeKey]=percentage;}return progress;}/**\n * Calculate distance for slider\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to run.\n *\n * @return {number}\n * The current position of the Slider.\n * - position.x for vertical `Slider`s\n * - position.y for horizontal `Slider`s\n */;_proto.calculateDistance=function calculateDistance(event){var position=getPointerPosition(this.el_,event);if(this.vertical()){return position.y;}return position.x;}/**\n * Handle a `keydown` event on the `Slider`. Watches for left, rigth, up, and down\n * arrow keys. This function will only be called when the slider has focus. See\n * {@link Slider#handleFocus} and {@link Slider#handleBlur}.\n *\n * @param {EventTarget~Event} event\n * the `keydown` event that caused this function to run.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Left and Down Arrows\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Left')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Down')){event.preventDefault();event.stopPropagation();this.stepBack();// Up and Right Arrows\n}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Right')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Up')){event.preventDefault();event.stopPropagation();this.stepForward();}else{// Pass keydown handling up for unsupported keys\n_Component.prototype.handleKeyDown.call(this,event);}}/**\n * Listener for click events on slider, used to prevent clicks\n * from bubbling up to parent elements like button menus.\n *\n * @param {Object} event\n * Event that caused this object to run\n */;_proto.handleClick=function handleClick(event){event.stopPropagation();event.preventDefault();}/**\n * Get/set if slider is horizontal for vertical\n *\n * @param {boolean} [bool]\n * - true if slider is vertical,\n * - false is horizontal\n *\n * @return {boolean}\n * - true if slider is vertical, and getting\n * - false if the slider is horizontal, and getting\n */;_proto.vertical=function vertical(bool){if(bool===undefined){return this.vertical_||false;}this.vertical_=!!bool;if(this.vertical_){this.addClass('vjs-slider-vertical');}else{this.addClass('vjs-slider-horizontal');}};return Slider;}(Component);Component.registerComponent('Slider',Slider);/**\n * Shows loading progress\n *\n * @extends Component\n */var LoadProgressBar=/*#__PURE__*/function(_Component){_inheritsLoose(LoadProgressBar,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function LoadProgressBar(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.partEls_=[];_this.on(player,'progress',_this.update);return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=LoadProgressBar.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-load-progress',innerHTML:\"<span class=\\\"vjs-control-text\\\"><span>\"+this.localize('Loaded')+\"</span>: <span class=\\\"vjs-control-text-loaded-percentage\\\">0%</span></span>\"});};_proto.dispose=function dispose(){this.partEls_=null;_Component.prototype.dispose.call(this);}/**\n * Update progress bar\n *\n * @param {EventTarget~Event} [event]\n * The `progress` event that caused this function to run.\n *\n * @listens Player#progress\n */;_proto.update=function update(event){var liveTracker=this.player_.liveTracker;var buffered=this.player_.buffered();var duration=liveTracker&&liveTracker.isLive()?liveTracker.seekableEnd():this.player_.duration();var bufferedEnd=this.player_.bufferedEnd();var children=this.partEls_;var controlTextPercentage=this.$('.vjs-control-text-loaded-percentage');// get the percent width of a time compared to the total end\nvar percentify=function percentify(time,end,rounded){// no NaN\nvar percent=time/end||0;percent=(percent>=1?1:percent)*100;if(rounded){percent=percent.toFixed(2);}return percent+'%';};// update the width of the progress bar\nthis.el_.style.width=percentify(bufferedEnd,duration);// update the control-text\ntextContent(controlTextPercentage,percentify(bufferedEnd,duration,true));// add child elements to represent the individual buffered time ranges\nfor(var i=0;i<buffered.length;i++){var start=buffered.start(i);var end=buffered.end(i);var part=children[i];if(!part){part=this.el_.appendChild(createEl());children[i]=part;}// set the percent based on the width of the progress bar (bufferedEnd)\npart.style.left=percentify(start,bufferedEnd);part.style.width=percentify(end-start,bufferedEnd);}// remove unused buffered range elements\nfor(var _i=children.length;_i>buffered.length;_i--){this.el_.removeChild(children[_i-1]);}children.length=buffered.length;};return LoadProgressBar;}(Component);Component.registerComponent('LoadProgressBar',LoadProgressBar);/**\n * Time tooltips display a time above the progress bar.\n *\n * @extends Component\n */var TimeTooltip=/*#__PURE__*/function(_Component){_inheritsLoose(TimeTooltip,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The {@link Player} that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function TimeTooltip(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.update=throttle(bind(_assertThisInitialized(_this),_this.update),UPDATE_REFRESH_INTERVAL);return _this;}/**\n * Create the time tooltip DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=TimeTooltip.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-time-tooltip'},{'aria-hidden':'true'});}/**\n * Updates the position of the time tooltip relative to the `SeekBar`.\n *\n * @param {Object} seekBarRect\n * The `ClientRect` for the {@link SeekBar} element.\n *\n * @param {number} seekBarPoint\n * A number from 0 to 1, representing a horizontal reference point\n * from the left edge of the {@link SeekBar}\n */;_proto.update=function update(seekBarRect,seekBarPoint,content){var tooltipRect=getBoundingClientRect(this.el_);var playerRect=getBoundingClientRect(this.player_.el());var seekBarPointPx=seekBarRect.width*seekBarPoint;// do nothing if either rect isn't available\n// for example, if the player isn't in the DOM for testing\nif(!playerRect||!tooltipRect){return;}// This is the space left of the `seekBarPoint` available within the bounds\n// of the player. We calculate any gap between the left edge of the player\n// and the left edge of the `SeekBar` and add the number of pixels in the\n// `SeekBar` before hitting the `seekBarPoint`\nvar spaceLeftOfPoint=seekBarRect.left-playerRect.left+seekBarPointPx;// This is the space right of the `seekBarPoint` available within the bounds\n// of the player. We calculate the number of pixels from the `seekBarPoint`\n// to the right edge of the `SeekBar` and add to that any gap between the\n// right edge of the `SeekBar` and the player.\nvar spaceRightOfPoint=seekBarRect.width-seekBarPointPx+(playerRect.right-seekBarRect.right);// This is the number of pixels by which the tooltip will need to be pulled\n// further to the right to center it over the `seekBarPoint`.\nvar pullTooltipBy=tooltipRect.width/2;// Adjust the `pullTooltipBy` distance to the left or right depending on\n// the results of the space calculations above.\nif(spaceLeftOfPoint<pullTooltipBy){pullTooltipBy+=pullTooltipBy-spaceLeftOfPoint;}else if(spaceRightOfPoint<pullTooltipBy){pullTooltipBy=spaceRightOfPoint;}// Due to the imprecision of decimal/ratio based calculations and varying\n// rounding behaviors, there are cases where the spacing adjustment is off\n// by a pixel or two. This adds insurance to these calculations.\nif(pullTooltipBy<0){pullTooltipBy=0;}else if(pullTooltipBy>tooltipRect.width){pullTooltipBy=tooltipRect.width;}this.el_.style.right=\"-\"+pullTooltipBy+\"px\";this.write(content);}/**\n * Write the time to the tooltip DOM element.\n *\n * @param {string} content\n * The formatted time for the tooltip.\n */;_proto.write=function write(content){textContent(this.el_,content);}/**\n * Updates the position of the time tooltip relative to the `SeekBar`.\n *\n * @param {Object} seekBarRect\n * The `ClientRect` for the {@link SeekBar} element.\n *\n * @param {number} seekBarPoint\n * A number from 0 to 1, representing a horizontal reference point\n * from the left edge of the {@link SeekBar}\n *\n * @param {number} time\n * The time to update the tooltip to, not used during live playback\n *\n * @param {Function} cb\n * A function that will be called during the request animation frame\n * for tooltips that need to do additional animations from the default\n */;_proto.updateTime=function updateTime(seekBarRect,seekBarPoint,time,cb){var _this2=this;// If there is an existing rAF ID, cancel it so we don't over-queue.\nif(this.rafId_){this.cancelAnimationFrame(this.rafId_);}this.rafId_=this.requestAnimationFrame(function(){var content;var duration=_this2.player_.duration();if(_this2.player_.liveTracker&&_this2.player_.liveTracker.isLive()){var liveWindow=_this2.player_.liveTracker.liveWindow();var secondsBehind=liveWindow-seekBarPoint*liveWindow;content=(secondsBehind<1?'':'-')+formatTime(secondsBehind,liveWindow);}else{content=formatTime(time,duration);}_this2.update(seekBarRect,seekBarPoint,content);if(cb){cb();}});};return TimeTooltip;}(Component);Component.registerComponent('TimeTooltip',TimeTooltip);/**\n * Used by {@link SeekBar} to display media playback progress as part of the\n * {@link ProgressControl}.\n *\n * @extends Component\n */var PlayProgressBar=/*#__PURE__*/function(_Component){_inheritsLoose(PlayProgressBar,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The {@link Player} that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function PlayProgressBar(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.update=throttle(bind(_assertThisInitialized(_this),_this.update),UPDATE_REFRESH_INTERVAL);return _this;}/**\n * Create the the DOM element for this class.\n *\n * @return {Element}\n * The element that was created.\n */var _proto=PlayProgressBar.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-play-progress vjs-slider-bar'},{'aria-hidden':'true'});}/**\n * Enqueues updates to its own DOM as well as the DOM of its\n * {@link TimeTooltip} child.\n *\n * @param {Object} seekBarRect\n * The `ClientRect` for the {@link SeekBar} element.\n *\n * @param {number} seekBarPoint\n * A number from 0 to 1, representing a horizontal reference point\n * from the left edge of the {@link SeekBar}\n */;_proto.update=function update(seekBarRect,seekBarPoint){var timeTooltip=this.getChild('timeTooltip');if(!timeTooltip){return;}var time=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();timeTooltip.updateTime(seekBarRect,seekBarPoint,time);};return PlayProgressBar;}(Component);/**\n * Default options for {@link PlayProgressBar}.\n *\n * @type {Object}\n * @private\n */PlayProgressBar.prototype.options_={children:[]};// Time tooltips should not be added to a player on mobile devices\nif(!IS_IOS&&!IS_ANDROID){PlayProgressBar.prototype.options_.children.push('timeTooltip');}Component.registerComponent('PlayProgressBar',PlayProgressBar);/**\n * The {@link MouseTimeDisplay} component tracks mouse movement over the\n * {@link ProgressControl}. It displays an indicator and a {@link TimeTooltip}\n * indicating the time which is represented by a given point in the\n * {@link ProgressControl}.\n *\n * @extends Component\n */var MouseTimeDisplay=/*#__PURE__*/function(_Component){_inheritsLoose(MouseTimeDisplay,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The {@link Player} that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function MouseTimeDisplay(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.update=throttle(bind(_assertThisInitialized(_this),_this.update),UPDATE_REFRESH_INTERVAL);return _this;}/**\n * Create the DOM element for this class.\n *\n * @return {Element}\n * The element that was created.\n */var _proto=MouseTimeDisplay.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-mouse-display'});}/**\n * Enqueues updates to its own DOM as well as the DOM of its\n * {@link TimeTooltip} child.\n *\n * @param {Object} seekBarRect\n * The `ClientRect` for the {@link SeekBar} element.\n *\n * @param {number} seekBarPoint\n * A number from 0 to 1, representing a horizontal reference point\n * from the left edge of the {@link SeekBar}\n */;_proto.update=function update(seekBarRect,seekBarPoint){var _this2=this;var time=seekBarPoint*this.player_.duration();this.getChild('timeTooltip').updateTime(seekBarRect,seekBarPoint,time,function(){_this2.el_.style.left=seekBarRect.width*seekBarPoint+\"px\";});};return MouseTimeDisplay;}(Component);/**\n * Default options for `MouseTimeDisplay`\n *\n * @type {Object}\n * @private\n */MouseTimeDisplay.prototype.options_={children:['timeTooltip']};Component.registerComponent('MouseTimeDisplay',MouseTimeDisplay);var STEP_SECONDS=5;// The multiplier of STEP_SECONDS that PgUp/PgDown move the timeline.\nvar PAGE_KEY_MULTIPLIER=12;// The interval at which the bar should update as it progresses.\nvar UPDATE_REFRESH_INTERVAL$1=30;/**\n * Seek bar and container for the progress bars. Uses {@link PlayProgressBar}\n * as its `bar`.\n *\n * @extends Slider\n */var SeekBar=/*#__PURE__*/function(_Slider){_inheritsLoose(SeekBar,_Slider);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function SeekBar(player,options){var _this;_this=_Slider.call(this,player,options)||this;_this.setEventHandlers_();return _this;}/**\n * Sets the event handlers\n *\n * @private\n */var _proto=SeekBar.prototype;_proto.setEventHandlers_=function setEventHandlers_(){this.update=throttle(bind(this,this.update),UPDATE_REFRESH_INTERVAL$1);this.on(this.player_,'timeupdate',this.update);this.on(this.player_,'ended',this.handleEnded);this.on(this.player_,'durationchange',this.update);if(this.player_.liveTracker){this.on(this.player_.liveTracker,'liveedgechange',this.update);}// when playing, let's ensure we smoothly update the play progress bar\n// via an interval\nthis.updateInterval=null;this.on(this.player_,['playing'],this.enableInterval_);this.on(this.player_,['ended','pause','waiting'],this.disableInterval_);// we don't need to update the play progress if the document is hidden,\n// also, this causes the CPU to spike and eventually crash the page on IE11.\nif('hidden'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a&&'visibilityState'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){this.on(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'visibilitychange',this.toggleVisibility_);}};_proto.toggleVisibility_=function toggleVisibility_(e){if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.hidden){this.disableInterval_(e);}else{this.enableInterval_();// we just switched back to the page and someone may be looking, so, update ASAP\nthis.requestAnimationFrame(this.update);}};_proto.enableInterval_=function enableInterval_(){var _this2=this;this.clearInterval(this.updateInterval);this.updateInterval=this.setInterval(function(){_this2.requestAnimationFrame(_this2.update);},UPDATE_REFRESH_INTERVAL$1);};_proto.disableInterval_=function disableInterval_(e){if(this.player_.liveTracker&&this.player_.liveTracker.isLive()&&e.type!=='ended'){return;}this.clearInterval(this.updateInterval);}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl(){return _Slider.prototype.createEl.call(this,'div',{className:'vjs-progress-holder'},{'aria-label':this.localize('Progress Bar')});}/**\n * This function updates the play progress bar and accessibility\n * attributes to whatever is passed in.\n *\n * @param {number} currentTime\n * The currentTime value that should be used for accessibility\n *\n * @param {number} percent\n * The percentage as a decimal that the bar should be filled from 0-1.\n *\n * @private\n */;_proto.update_=function update_(currentTime,percent){var liveTracker=this.player_.liveTracker;var duration=this.player_.duration();if(liveTracker&&liveTracker.isLive()){duration=this.player_.liveTracker.liveCurrentTime();}// machine readable value of progress bar (percentage complete)\nthis.el_.setAttribute('aria-valuenow',(percent*100).toFixed(2));// human readable value of progress bar (time complete)\nthis.el_.setAttribute('aria-valuetext',this.localize('progress bar timing: currentTime={1} duration={2}',[formatTime(currentTime,duration),formatTime(duration,duration)],'{1} of {2}'));// Update the `PlayProgressBar`.\nif(this.bar){this.bar.update(getBoundingClientRect(this.el_),percent);}}/**\n * Update the seek bar's UI.\n *\n * @param {EventTarget~Event} [event]\n * The `timeupdate` or `ended` event that caused this to run.\n *\n * @listens Player#timeupdate\n *\n * @return {number}\n * The current percent at a number from 0-1\n */;_proto.update=function update(event){// if the offsetParent is null, then this element is hidden, in which case\n// we don't need to update it.\nif(this.el().offsetParent===null){return;}var percent=_Slider.prototype.update.call(this);this.update_(this.getCurrentTime_(),percent);return percent;}/**\n * Get the value of current time but allows for smooth scrubbing,\n * when player can't keep up.\n *\n * @return {number}\n * The current time value to display\n *\n * @private\n */;_proto.getCurrentTime_=function getCurrentTime_(){return this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();}/**\n * We want the seek bar to be full on ended\n * no matter what the actual internal values are. so we force it.\n *\n * @param {EventTarget~Event} [event]\n * The `timeupdate` or `ended` event that caused this to run.\n *\n * @listens Player#ended\n */;_proto.handleEnded=function handleEnded(event){this.update_(this.player_.duration(),1);}/**\n * Get the percentage of media played so far.\n *\n * @return {number}\n * The percentage of media played so far (0 to 1).\n */;_proto.getPercent=function getPercent(){var currentTime=this.getCurrentTime_();var percent;var liveTracker=this.player_.liveTracker;if(liveTracker&&liveTracker.isLive()){percent=(currentTime-liveTracker.seekableStart())/liveTracker.liveWindow();// prevent the percent from changing at the live edge\nif(liveTracker.atLiveEdge()){percent=1;}}else{percent=currentTime/this.player_.duration();}return percent>=1?1:percent||0;}/**\n * Handle mouse down on seek bar\n *\n * @param {EventTarget~Event} event\n * The `mousedown` event that caused this to run.\n *\n * @listens mousedown\n */;_proto.handleMouseDown=function handleMouseDown(event){if(!isSingleLeftClick(event)){return;}// Stop event propagation to prevent double fire in progress-control.js\nevent.stopPropagation();this.player_.scrubbing(true);this.videoWasPlaying=!this.player_.paused();this.player_.pause();_Slider.prototype.handleMouseDown.call(this,event);}/**\n * Handle mouse move on seek bar\n *\n * @param {EventTarget~Event} event\n * The `mousemove` event that caused this to run.\n *\n * @listens mousemove\n */;_proto.handleMouseMove=function handleMouseMove(event){if(!isSingleLeftClick(event)){return;}var newTime;var distance=this.calculateDistance(event);var liveTracker=this.player_.liveTracker;if(!liveTracker||!liveTracker.isLive()){newTime=distance*this.player_.duration();// Don't let video end while scrubbing.\nif(newTime===this.player_.duration()){newTime=newTime-0.1;}}else{var seekableStart=liveTracker.seekableStart();var seekableEnd=liveTracker.liveCurrentTime();newTime=seekableStart+distance*liveTracker.liveWindow();// Don't let video end while scrubbing.\nif(newTime>=seekableEnd){newTime=seekableEnd;}// Compensate for precision differences so that currentTime is not less\n// than seekable start\nif(newTime<=seekableStart){newTime=seekableStart+0.1;}// On android seekableEnd can be Infinity sometimes,\n// this will cause newTime to be Infinity, which is\n// not a valid currentTime.\nif(newTime===Infinity){return;}}// Set new time (tell player to seek to new time)\nthis.player_.currentTime(newTime);};_proto.enable=function enable(){_Slider.prototype.enable.call(this);var mouseTimeDisplay=this.getChild('mouseTimeDisplay');if(!mouseTimeDisplay){return;}mouseTimeDisplay.show();};_proto.disable=function disable(){_Slider.prototype.disable.call(this);var mouseTimeDisplay=this.getChild('mouseTimeDisplay');if(!mouseTimeDisplay){return;}mouseTimeDisplay.hide();}/**\n * Handle mouse up on seek bar\n *\n * @param {EventTarget~Event} event\n * The `mouseup` event that caused this to run.\n *\n * @listens mouseup\n */;_proto.handleMouseUp=function handleMouseUp(event){_Slider.prototype.handleMouseUp.call(this,event);// Stop event propagation to prevent double fire in progress-control.js\nif(event){event.stopPropagation();}this.player_.scrubbing(false);/**\n * Trigger timeupdate because we're done seeking and the time has changed.\n * This is particularly useful for if the player is paused to time the time displays.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */this.player_.trigger({type:'timeupdate',target:this,manuallyTriggered:true});if(this.videoWasPlaying){silencePromise(this.player_.play());}}/**\n * Move more quickly fast forward for keyboard-only users\n */;_proto.stepForward=function stepForward(){this.player_.currentTime(this.player_.currentTime()+STEP_SECONDS);}/**\n * Move more quickly rewind for keyboard-only users\n */;_proto.stepBack=function stepBack(){this.player_.currentTime(this.player_.currentTime()-STEP_SECONDS);}/**\n * Toggles the playback state of the player\n * This gets called when enter or space is used on the seekbar\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called\n *\n */;_proto.handleAction=function handleAction(event){if(this.player_.paused()){this.player_.play();}else{this.player_.pause();}}/**\n * Called when this SeekBar has focus and a key gets pressed down.\n * Supports the following keys:\n *\n * Space or Enter key fire a click event\n * Home key moves to start of the timeline\n * End key moves to end of the timeline\n * Digit \"0\" through \"9\" keys move to 0%, 10% ... 80%, 90% of the timeline\n * PageDown key moves back a larger step than ArrowDown\n * PageUp key moves forward a large step\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Space')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Enter')){event.preventDefault();event.stopPropagation();this.handleAction(event);}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Home')){event.preventDefault();event.stopPropagation();this.player_.currentTime(0);}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'End')){event.preventDefault();event.stopPropagation();this.player_.currentTime(this.player_.duration());}else if(/^[0-9]$/.test(keycode__WEBPACK_IMPORTED_MODULE_3___default()(event))){event.preventDefault();event.stopPropagation();var gotoFraction=(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.codes[keycode__WEBPACK_IMPORTED_MODULE_3___default()(event)]-keycode__WEBPACK_IMPORTED_MODULE_3___default.a.codes['0'])*10.0/100.0;this.player_.currentTime(this.player_.duration()*gotoFraction);}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'PgDn')){event.preventDefault();event.stopPropagation();this.player_.currentTime(this.player_.currentTime()-STEP_SECONDS*PAGE_KEY_MULTIPLIER);}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'PgUp')){event.preventDefault();event.stopPropagation();this.player_.currentTime(this.player_.currentTime()+STEP_SECONDS*PAGE_KEY_MULTIPLIER);}else{// Pass keydown handling up for unsupported keys\n_Slider.prototype.handleKeyDown.call(this,event);}};return SeekBar;}(Slider);/**\n * Default options for the `SeekBar`\n *\n * @type {Object}\n * @private\n */SeekBar.prototype.options_={children:['loadProgressBar','playProgressBar'],barName:'playProgressBar'};// MouseTimeDisplay tooltips should not be added to a player on mobile devices\nif(!IS_IOS&&!IS_ANDROID){SeekBar.prototype.options_.children.splice(1,0,'mouseTimeDisplay');}Component.registerComponent('SeekBar',SeekBar);/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress.\n *\n * @extends Component\n */var ProgressControl=/*#__PURE__*/function(_Component){_inheritsLoose(ProgressControl,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function ProgressControl(player,options){var _this;_this=_Component.call(this,player,options)||this;_this.handleMouseMove=throttle(bind(_assertThisInitialized(_this),_this.handleMouseMove),UPDATE_REFRESH_INTERVAL);_this.throttledHandleMouseSeek=throttle(bind(_assertThisInitialized(_this),_this.handleMouseSeek),UPDATE_REFRESH_INTERVAL);_this.enable();return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=ProgressControl.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-progress-control vjs-control'});}/**\n * When the mouse moves over the `ProgressControl`, the pointer position\n * gets passed down to the `MouseTimeDisplay` component.\n *\n * @param {EventTarget~Event} event\n * The `mousemove` event that caused this function to run.\n *\n * @listen mousemove\n */;_proto.handleMouseMove=function handleMouseMove(event){var seekBar=this.getChild('seekBar');if(seekBar){var mouseTimeDisplay=seekBar.getChild('mouseTimeDisplay');var seekBarEl=seekBar.el();var seekBarRect=getBoundingClientRect(seekBarEl);var seekBarPoint=getPointerPosition(seekBarEl,event).x;// The default skin has a gap on either side of the `SeekBar`. This means\n// that it's possible to trigger this behavior outside the boundaries of\n// the `SeekBar`. This ensures we stay within it at all times.\nif(seekBarPoint>1){seekBarPoint=1;}else if(seekBarPoint<0){seekBarPoint=0;}if(mouseTimeDisplay){mouseTimeDisplay.update(seekBarRect,seekBarPoint);}}}/**\n * A throttled version of the {@link ProgressControl#handleMouseSeek} listener.\n *\n * @method ProgressControl#throttledHandleMouseSeek\n * @param {EventTarget~Event} event\n * The `mousemove` event that caused this function to run.\n *\n * @listen mousemove\n * @listen touchmove\n */ /**\n * Handle `mousemove` or `touchmove` events on the `ProgressControl`.\n *\n * @param {EventTarget~Event} event\n * `mousedown` or `touchstart` event that triggered this function\n *\n * @listens mousemove\n * @listens touchmove\n */;_proto.handleMouseSeek=function handleMouseSeek(event){var seekBar=this.getChild('seekBar');if(seekBar){seekBar.handleMouseMove(event);}}/**\n * Are controls are currently enabled for this progress control.\n *\n * @return {boolean}\n * true if controls are enabled, false otherwise\n */;_proto.enabled=function enabled(){return this.enabled_;}/**\n * Disable all controls on the progress control and its children\n */;_proto.disable=function disable(){this.children().forEach(function(child){return child.disable&&child.disable();});if(!this.enabled()){return;}this.off(['mousedown','touchstart'],this.handleMouseDown);this.off(this.el_,'mousemove',this.handleMouseMove);this.handleMouseUp();this.addClass('disabled');this.enabled_=false;}/**\n * Enable all controls on the progress control and its children\n */;_proto.enable=function enable(){this.children().forEach(function(child){return child.enable&&child.enable();});if(this.enabled()){return;}this.on(['mousedown','touchstart'],this.handleMouseDown);this.on(this.el_,'mousemove',this.handleMouseMove);this.removeClass('disabled');this.enabled_=true;}/**\n * Handle `mousedown` or `touchstart` events on the `ProgressControl`.\n *\n * @param {EventTarget~Event} event\n * `mousedown` or `touchstart` event that triggered this function\n *\n * @listens mousedown\n * @listens touchstart\n */;_proto.handleMouseDown=function handleMouseDown(event){var doc=this.el_.ownerDocument;var seekBar=this.getChild('seekBar');if(seekBar){seekBar.handleMouseDown(event);}this.on(doc,'mousemove',this.throttledHandleMouseSeek);this.on(doc,'touchmove',this.throttledHandleMouseSeek);this.on(doc,'mouseup',this.handleMouseUp);this.on(doc,'touchend',this.handleMouseUp);}/**\n * Handle `mouseup` or `touchend` events on the `ProgressControl`.\n *\n * @param {EventTarget~Event} event\n * `mouseup` or `touchend` event that triggered this function.\n *\n * @listens touchend\n * @listens mouseup\n */;_proto.handleMouseUp=function handleMouseUp(event){var doc=this.el_.ownerDocument;var seekBar=this.getChild('seekBar');if(seekBar){seekBar.handleMouseUp(event);}this.off(doc,'mousemove',this.throttledHandleMouseSeek);this.off(doc,'touchmove',this.throttledHandleMouseSeek);this.off(doc,'mouseup',this.handleMouseUp);this.off(doc,'touchend',this.handleMouseUp);};return ProgressControl;}(Component);/**\n * Default options for `ProgressControl`\n *\n * @type {Object}\n * @private\n */ProgressControl.prototype.options_={children:['seekBar']};Component.registerComponent('ProgressControl',ProgressControl);/**\n * Toggle Picture-in-Picture mode\n *\n * @extends Button\n */var PictureInPictureToggle=/*#__PURE__*/function(_Button){_inheritsLoose(PictureInPictureToggle,_Button);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @listens Player#enterpictureinpicture\n * @listens Player#leavepictureinpicture\n */function PictureInPictureToggle(player,options){var _this;_this=_Button.call(this,player,options)||this;_this.on(player,['enterpictureinpicture','leavepictureinpicture'],_this.handlePictureInPictureChange);// TODO: Activate button on player loadedmetadata event.\n// TODO: Deactivate button on player emptied event.\n// TODO: Deactivate button if disablepictureinpicture attribute is present.\nif(!global_document__WEBPACK_IMPORTED_MODULE_1___default.a.pictureInPictureEnabled){_this.disable();}return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=PictureInPictureToggle.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-picture-in-picture-control \"+_Button.prototype.buildCSSClass.call(this);}/**\n * Handles enterpictureinpicture and leavepictureinpicture on the player and change control text accordingly.\n *\n * @param {EventTarget~Event} [event]\n * The {@link Player#enterpictureinpicture} or {@link Player#leavepictureinpicture} event that caused this function to be\n * called.\n *\n * @listens Player#enterpictureinpicture\n * @listens Player#leavepictureinpicture\n */;_proto.handlePictureInPictureChange=function handlePictureInPictureChange(event){if(this.player_.isInPictureInPicture()){this.controlText('Exit Picture-in-Picture');}else{this.controlText('Picture-in-Picture');}}/**\n * This gets called when an `PictureInPictureToggle` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){if(!this.player_.isInPictureInPicture()){this.player_.requestPictureInPicture();}else{this.player_.exitPictureInPicture();}};return PictureInPictureToggle;}(Button);/**\n * The text that should display over the `PictureInPictureToggle`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */PictureInPictureToggle.prototype.controlText_='Picture-in-Picture';Component.registerComponent('PictureInPictureToggle',PictureInPictureToggle);/**\n * Toggle fullscreen video\n *\n * @extends Button\n */var FullscreenToggle=/*#__PURE__*/function(_Button){_inheritsLoose(FullscreenToggle,_Button);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function FullscreenToggle(player,options){var _this;_this=_Button.call(this,player,options)||this;_this.on(player,'fullscreenchange',_this.handleFullscreenChange);if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a[player.fsApi_.fullscreenEnabled]===false){_this.disable();}return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=FullscreenToggle.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-fullscreen-control \"+_Button.prototype.buildCSSClass.call(this);}/**\n * Handles fullscreenchange on the player and change control text accordingly.\n *\n * @param {EventTarget~Event} [event]\n * The {@link Player#fullscreenchange} event that caused this function to be\n * called.\n *\n * @listens Player#fullscreenchange\n */;_proto.handleFullscreenChange=function handleFullscreenChange(event){if(this.player_.isFullscreen()){this.controlText('Non-Fullscreen');}else{this.controlText('Fullscreen');}}/**\n * This gets called when an `FullscreenToggle` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){if(!this.player_.isFullscreen()){this.player_.requestFullscreen();}else{this.player_.exitFullscreen();}};return FullscreenToggle;}(Button);/**\n * The text that should display over the `FullscreenToggle`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */FullscreenToggle.prototype.controlText_='Fullscreen';Component.registerComponent('FullscreenToggle',FullscreenToggle);/**\n * Check if volume control is supported and if it isn't hide the\n * `Component` that was passed using the `vjs-hidden` class.\n *\n * @param {Component} self\n * The component that should be hidden if volume is unsupported\n *\n * @param {Player} player\n * A reference to the player\n *\n * @private\n */var checkVolumeSupport=function checkVolumeSupport(self,player){// hide volume controls when they're not supported by the current tech\nif(player.tech_&&!player.tech_.featuresVolumeControl){self.addClass('vjs-hidden');}self.on(player,'loadstart',function(){if(!player.tech_.featuresVolumeControl){self.addClass('vjs-hidden');}else{self.removeClass('vjs-hidden');}});};/**\n * Shows volume level\n *\n * @extends Component\n */var VolumeLevel=/*#__PURE__*/function(_Component){_inheritsLoose(VolumeLevel,_Component);function VolumeLevel(){return _Component.apply(this,arguments)||this;}var _proto=VolumeLevel.prototype;/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-volume-level',innerHTML:'<span class=\"vjs-control-text\"></span>'});};return VolumeLevel;}(Component);Component.registerComponent('VolumeLevel',VolumeLevel);/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @extends Slider\n */var VolumeBar=/*#__PURE__*/function(_Slider){_inheritsLoose(VolumeBar,_Slider);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function VolumeBar(player,options){var _this;_this=_Slider.call(this,player,options)||this;_this.on('slideractive',_this.updateLastVolume_);_this.on(player,'volumechange',_this.updateARIAAttributes);player.ready(function(){return _this.updateARIAAttributes();});return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=VolumeBar.prototype;_proto.createEl=function createEl(){return _Slider.prototype.createEl.call(this,'div',{className:'vjs-volume-bar vjs-slider-bar'},{'aria-label':this.localize('Volume Level'),'aria-live':'polite'});}/**\n * Handle mouse down on volume bar\n *\n * @param {EventTarget~Event} event\n * The `mousedown` event that caused this to run.\n *\n * @listens mousedown\n */;_proto.handleMouseDown=function handleMouseDown(event){if(!isSingleLeftClick(event)){return;}_Slider.prototype.handleMouseDown.call(this,event);}/**\n * Handle movement events on the {@link VolumeMenuButton}.\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to run.\n *\n * @listens mousemove\n */;_proto.handleMouseMove=function handleMouseMove(event){if(!isSingleLeftClick(event)){return;}this.checkMuted();this.player_.volume(this.calculateDistance(event));}/**\n * If the player is muted unmute it.\n */;_proto.checkMuted=function checkMuted(){if(this.player_.muted()){this.player_.muted(false);}}/**\n * Get percent of volume level\n *\n * @return {number}\n * Volume level percent as a decimal number.\n */;_proto.getPercent=function getPercent(){if(this.player_.muted()){return 0;}return this.player_.volume();}/**\n * Increase volume level for keyboard users\n */;_proto.stepForward=function stepForward(){this.checkMuted();this.player_.volume(this.player_.volume()+0.1);}/**\n * Decrease volume level for keyboard users\n */;_proto.stepBack=function stepBack(){this.checkMuted();this.player_.volume(this.player_.volume()-0.1);}/**\n * Update ARIA accessibility attributes\n *\n * @param {EventTarget~Event} [event]\n * The `volumechange` event that caused this function to run.\n *\n * @listens Player#volumechange\n */;_proto.updateARIAAttributes=function updateARIAAttributes(event){var ariaValue=this.player_.muted()?0:this.volumeAsPercentage_();this.el_.setAttribute('aria-valuenow',ariaValue);this.el_.setAttribute('aria-valuetext',ariaValue+'%');}/**\n * Returns the current value of the player volume as a percentage\n *\n * @private\n */;_proto.volumeAsPercentage_=function volumeAsPercentage_(){return Math.round(this.player_.volume()*100);}/**\n * When user starts dragging the VolumeBar, store the volume and listen for\n * the end of the drag. When the drag ends, if the volume was set to zero,\n * set lastVolume to the stored volume.\n *\n * @listens slideractive\n * @private\n */;_proto.updateLastVolume_=function updateLastVolume_(){var _this2=this;var volumeBeforeDrag=this.player_.volume();this.one('sliderinactive',function(){if(_this2.player_.volume()===0){_this2.player_.lastVolume_(volumeBeforeDrag);}});};return VolumeBar;}(Slider);/**\n * Default options for the `VolumeBar`\n *\n * @type {Object}\n * @private\n */VolumeBar.prototype.options_={children:['volumeLevel'],barName:'volumeLevel'};/**\n * Call the update event for this Slider when this event happens on the player.\n *\n * @type {string}\n */VolumeBar.prototype.playerEvent='volumechange';Component.registerComponent('VolumeBar',VolumeBar);/**\n * The component for controlling the volume level\n *\n * @extends Component\n */var VolumeControl=/*#__PURE__*/function(_Component){_inheritsLoose(VolumeControl,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function VolumeControl(player,options){var _this;if(options===void 0){options={};}options.vertical=options.vertical||false;// Pass the vertical option down to the VolumeBar if\n// the VolumeBar is turned on.\nif(typeof options.volumeBar==='undefined'||isPlain(options.volumeBar)){options.volumeBar=options.volumeBar||{};options.volumeBar.vertical=options.vertical;}_this=_Component.call(this,player,options)||this;// hide this control if volume support is missing\ncheckVolumeSupport(_assertThisInitialized(_this),player);_this.throttledHandleMouseMove=throttle(bind(_assertThisInitialized(_this),_this.handleMouseMove),UPDATE_REFRESH_INTERVAL);_this.on('mousedown',_this.handleMouseDown);_this.on('touchstart',_this.handleMouseDown);// while the slider is active (the mouse has been pressed down and\n// is dragging) or in focus we do not want to hide the VolumeBar\n_this.on(_this.volumeBar,['focus','slideractive'],function(){_this.volumeBar.addClass('vjs-slider-active');_this.addClass('vjs-slider-active');_this.trigger('slideractive');});_this.on(_this.volumeBar,['blur','sliderinactive'],function(){_this.volumeBar.removeClass('vjs-slider-active');_this.removeClass('vjs-slider-active');_this.trigger('sliderinactive');});return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=VolumeControl.prototype;_proto.createEl=function createEl(){var orientationClass='vjs-volume-horizontal';if(this.options_.vertical){orientationClass='vjs-volume-vertical';}return _Component.prototype.createEl.call(this,'div',{className:\"vjs-volume-control vjs-control \"+orientationClass});}/**\n * Handle `mousedown` or `touchstart` events on the `VolumeControl`.\n *\n * @param {EventTarget~Event} event\n * `mousedown` or `touchstart` event that triggered this function\n *\n * @listens mousedown\n * @listens touchstart\n */;_proto.handleMouseDown=function handleMouseDown(event){var doc=this.el_.ownerDocument;this.on(doc,'mousemove',this.throttledHandleMouseMove);this.on(doc,'touchmove',this.throttledHandleMouseMove);this.on(doc,'mouseup',this.handleMouseUp);this.on(doc,'touchend',this.handleMouseUp);}/**\n * Handle `mouseup` or `touchend` events on the `VolumeControl`.\n *\n * @param {EventTarget~Event} event\n * `mouseup` or `touchend` event that triggered this function.\n *\n * @listens touchend\n * @listens mouseup\n */;_proto.handleMouseUp=function handleMouseUp(event){var doc=this.el_.ownerDocument;this.off(doc,'mousemove',this.throttledHandleMouseMove);this.off(doc,'touchmove',this.throttledHandleMouseMove);this.off(doc,'mouseup',this.handleMouseUp);this.off(doc,'touchend',this.handleMouseUp);}/**\n * Handle `mousedown` or `touchstart` events on the `VolumeControl`.\n *\n * @param {EventTarget~Event} event\n * `mousedown` or `touchstart` event that triggered this function\n *\n * @listens mousedown\n * @listens touchstart\n */;_proto.handleMouseMove=function handleMouseMove(event){this.volumeBar.handleMouseMove(event);};return VolumeControl;}(Component);/**\n * Default options for the `VolumeControl`\n *\n * @type {Object}\n * @private\n */VolumeControl.prototype.options_={children:['volumeBar']};Component.registerComponent('VolumeControl',VolumeControl);/**\n * Check if muting volume is supported and if it isn't hide the mute toggle\n * button.\n *\n * @param {Component} self\n * A reference to the mute toggle button\n *\n * @param {Player} player\n * A reference to the player\n *\n * @private\n */var checkMuteSupport=function checkMuteSupport(self,player){// hide mute toggle button if it's not supported by the current tech\nif(player.tech_&&!player.tech_.featuresMuteControl){self.addClass('vjs-hidden');}self.on(player,'loadstart',function(){if(!player.tech_.featuresMuteControl){self.addClass('vjs-hidden');}else{self.removeClass('vjs-hidden');}});};/**\n * A button component for muting the audio.\n *\n * @extends Button\n */var MuteToggle=/*#__PURE__*/function(_Button){_inheritsLoose(MuteToggle,_Button);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function MuteToggle(player,options){var _this;_this=_Button.call(this,player,options)||this;// hide this control if volume support is missing\ncheckMuteSupport(_assertThisInitialized(_this),player);_this.on(player,['loadstart','volumechange'],_this.update);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=MuteToggle.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-mute-control \"+_Button.prototype.buildCSSClass.call(this);}/**\n * This gets called when an `MuteToggle` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){var vol=this.player_.volume();var lastVolume=this.player_.lastVolume_();if(vol===0){var volumeToSet=lastVolume<0.1?0.1:lastVolume;this.player_.volume(volumeToSet);this.player_.muted(false);}else{this.player_.muted(this.player_.muted()?false:true);}}/**\n * Update the `MuteToggle` button based on the state of `volume` and `muted`\n * on the player.\n *\n * @param {EventTarget~Event} [event]\n * The {@link Player#loadstart} event if this function was called\n * through an event.\n *\n * @listens Player#loadstart\n * @listens Player#volumechange\n */;_proto.update=function update(event){this.updateIcon_();this.updateControlText_();}/**\n * Update the appearance of the `MuteToggle` icon.\n *\n * Possible states (given `level` variable below):\n * - 0: crossed out\n * - 1: zero bars of volume\n * - 2: one bar of volume\n * - 3: two bars of volume\n *\n * @private\n */;_proto.updateIcon_=function updateIcon_(){var vol=this.player_.volume();var level=3;// in iOS when a player is loaded with muted attribute\n// and volume is changed with a native mute button\n// we want to make sure muted state is updated\nif(IS_IOS&&this.player_.tech_&&this.player_.tech_.el_){this.player_.muted(this.player_.tech_.el_.muted);}if(vol===0||this.player_.muted()){level=0;}else if(vol<0.33){level=1;}else if(vol<0.67){level=2;}// TODO improve muted icon classes\nfor(var i=0;i<4;i++){removeClass(this.el_,\"vjs-vol-\"+i);}addClass(this.el_,\"vjs-vol-\"+level);}/**\n * If `muted` has changed on the player, update the control text\n * (`title` attribute on `vjs-mute-control` element and content of\n * `vjs-control-text` element).\n *\n * @private\n */;_proto.updateControlText_=function updateControlText_(){var soundOff=this.player_.muted()||this.player_.volume()===0;var text=soundOff?'Unmute':'Mute';if(this.controlText()!==text){this.controlText(text);}};return MuteToggle;}(Button);/**\n * The text that should display over the `MuteToggle`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */MuteToggle.prototype.controlText_='Mute';Component.registerComponent('MuteToggle',MuteToggle);/**\n * A Component to contain the MuteToggle and VolumeControl so that\n * they can work together.\n *\n * @extends Component\n */var VolumePanel=/*#__PURE__*/function(_Component){_inheritsLoose(VolumePanel,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function VolumePanel(player,options){var _this;if(options===void 0){options={};}if(typeof options.inline!=='undefined'){options.inline=options.inline;}else{options.inline=true;}// pass the inline option down to the VolumeControl as vertical if\n// the VolumeControl is on.\nif(typeof options.volumeControl==='undefined'||isPlain(options.volumeControl)){options.volumeControl=options.volumeControl||{};options.volumeControl.vertical=!options.inline;}_this=_Component.call(this,player,options)||this;_this.on(player,['loadstart'],_this.volumePanelState_);_this.on(_this.muteToggle,'keyup',_this.handleKeyPress);_this.on(_this.volumeControl,'keyup',_this.handleVolumeControlKeyUp);_this.on('keydown',_this.handleKeyPress);_this.on('mouseover',_this.handleMouseOver);_this.on('mouseout',_this.handleMouseOut);// while the slider is active (the mouse has been pressed down and\n// is dragging) we do not want to hide the VolumeBar\n_this.on(_this.volumeControl,['slideractive'],_this.sliderActive_);_this.on(_this.volumeControl,['sliderinactive'],_this.sliderInactive_);return _this;}/**\n * Add vjs-slider-active class to the VolumePanel\n *\n * @listens VolumeControl#slideractive\n * @private\n */var _proto=VolumePanel.prototype;_proto.sliderActive_=function sliderActive_(){this.addClass('vjs-slider-active');}/**\n * Removes vjs-slider-active class to the VolumePanel\n *\n * @listens VolumeControl#sliderinactive\n * @private\n */;_proto.sliderInactive_=function sliderInactive_(){this.removeClass('vjs-slider-active');}/**\n * Adds vjs-hidden or vjs-mute-toggle-only to the VolumePanel\n * depending on MuteToggle and VolumeControl state\n *\n * @listens Player#loadstart\n * @private\n */;_proto.volumePanelState_=function volumePanelState_(){// hide volume panel if neither volume control or mute toggle\n// are displayed\nif(this.volumeControl.hasClass('vjs-hidden')&&this.muteToggle.hasClass('vjs-hidden')){this.addClass('vjs-hidden');}// if only mute toggle is visible we don't want\n// volume panel expanding when hovered or active\nif(this.volumeControl.hasClass('vjs-hidden')&&!this.muteToggle.hasClass('vjs-hidden')){this.addClass('vjs-mute-toggle-only');}}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl(){var orientationClass='vjs-volume-panel-horizontal';if(!this.options_.inline){orientationClass='vjs-volume-panel-vertical';}return _Component.prototype.createEl.call(this,'div',{className:\"vjs-volume-panel vjs-control \"+orientationClass});}/**\n * Dispose of the `volume-panel` and all child components.\n */;_proto.dispose=function dispose(){this.handleMouseOut();_Component.prototype.dispose.call(this);}/**\n * Handles `keyup` events on the `VolumeControl`, looking for ESC, which closes\n * the volume panel and sets focus on `MuteToggle`.\n *\n * @param {EventTarget~Event} event\n * The `keyup` event that caused this function to be called.\n *\n * @listens keyup\n */;_proto.handleVolumeControlKeyUp=function handleVolumeControlKeyUp(event){if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')){this.muteToggle.focus();}}/**\n * This gets called when a `VolumePanel` gains hover via a `mouseover` event.\n * Turns on listening for `mouseover` event. When they happen it\n * calls `this.handleMouseOver`.\n *\n * @param {EventTarget~Event} event\n * The `mouseover` event that caused this function to be called.\n *\n * @listens mouseover\n */;_proto.handleMouseOver=function handleMouseOver(event){this.addClass('vjs-hover');on(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keyup',bind(this,this.handleKeyPress));}/**\n * This gets called when a `VolumePanel` gains hover via a `mouseout` event.\n * Turns on listening for `mouseout` event. When they happen it\n * calls `this.handleMouseOut`.\n *\n * @param {EventTarget~Event} event\n * The `mouseout` event that caused this function to be called.\n *\n * @listens mouseout\n */;_proto.handleMouseOut=function handleMouseOut(event){this.removeClass('vjs-hover');off(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keyup',bind(this,this.handleKeyPress));}/**\n * Handles `keyup` event on the document or `keydown` event on the `VolumePanel`,\n * looking for ESC, which hides the `VolumeControl`.\n *\n * @param {EventTarget~Event} event\n * The keypress that triggered this event.\n *\n * @listens keydown | keyup\n */;_proto.handleKeyPress=function handleKeyPress(event){if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')){this.handleMouseOut();}};return VolumePanel;}(Component);/**\n * Default options for the `VolumeControl`\n *\n * @type {Object}\n * @private\n */VolumePanel.prototype.options_={children:['muteToggle','volumeControl']};Component.registerComponent('VolumePanel',VolumePanel);/**\n * The Menu component is used to build popup menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n */var Menu=/*#__PURE__*/function(_Component){_inheritsLoose(Menu,_Component);/**\n * Create an instance of this class.\n *\n * @param {Player} player\n * the player that this component should attach to\n *\n * @param {Object} [options]\n * Object of option names and values\n *\n */function Menu(player,options){var _this;_this=_Component.call(this,player,options)||this;if(options){_this.menuButton_=options.menuButton;}_this.focusedChild_=-1;_this.on('keydown',_this.handleKeyDown);// All the menu item instances share the same blur handler provided by the menu container.\n_this.boundHandleBlur_=bind(_assertThisInitialized(_this),_this.handleBlur);_this.boundHandleTapClick_=bind(_assertThisInitialized(_this),_this.handleTapClick);return _this;}/**\n * Add event listeners to the {@link MenuItem}.\n *\n * @param {Object} component\n * The instance of the `MenuItem` to add listeners to.\n *\n */var _proto=Menu.prototype;_proto.addEventListenerForItem=function addEventListenerForItem(component){if(!(component instanceof Component)){return;}this.on(component,'blur',this.boundHandleBlur_);this.on(component,['tap','click'],this.boundHandleTapClick_);}/**\n * Remove event listeners from the {@link MenuItem}.\n *\n * @param {Object} component\n * The instance of the `MenuItem` to remove listeners.\n *\n */;_proto.removeEventListenerForItem=function removeEventListenerForItem(component){if(!(component instanceof Component)){return;}this.off(component,'blur',this.boundHandleBlur_);this.off(component,['tap','click'],this.boundHandleTapClick_);}/**\n * This method will be called indirectly when the component has been added\n * before the component adds to the new menu instance by `addItem`.\n * In this case, the original menu instance will remove the component\n * by calling `removeChild`.\n *\n * @param {Object} component\n * The instance of the `MenuItem`\n */;_proto.removeChild=function removeChild(component){if(typeof component==='string'){component=this.getChild(component);}this.removeEventListenerForItem(component);_Component.prototype.removeChild.call(this,component);}/**\n * Add a {@link MenuItem} to the menu.\n *\n * @param {Object|string} component\n * The name or instance of the `MenuItem` to add.\n *\n */;_proto.addItem=function addItem(component){var childComponent=this.addChild(component);if(childComponent){this.addEventListenerForItem(childComponent);}}/**\n * Create the `Menu`s DOM element.\n *\n * @return {Element}\n * the element that was created\n */;_proto.createEl=function createEl$1(){var contentElType=this.options_.contentElType||'ul';this.contentEl_=createEl(contentElType,{className:'vjs-menu-content'});this.contentEl_.setAttribute('role','menu');var el=_Component.prototype.createEl.call(this,'div',{append:this.contentEl_,className:'vjs-menu'});el.appendChild(this.contentEl_);// Prevent clicks from bubbling up. Needed for Menu Buttons,\n// where a click on the parent is significant\non(el,'click',function(event){event.preventDefault();event.stopImmediatePropagation();});return el;};_proto.dispose=function dispose(){this.contentEl_=null;this.boundHandleBlur_=null;this.boundHandleTapClick_=null;_Component.prototype.dispose.call(this);}/**\n * Called when a `MenuItem` loses focus.\n *\n * @param {EventTarget~Event} event\n * The `blur` event that caused this function to be called.\n *\n * @listens blur\n */;_proto.handleBlur=function handleBlur(event){var relatedTarget=event.relatedTarget||global_document__WEBPACK_IMPORTED_MODULE_1___default.a.activeElement;// Close menu popup when a user clicks outside the menu\nif(!this.children().some(function(element){return element.el()===relatedTarget;})){var btn=this.menuButton_;if(btn&&btn.buttonPressed_&&relatedTarget!==btn.el().firstChild){btn.unpressButton();}}}/**\n * Called when a `MenuItem` gets clicked or tapped.\n *\n * @param {EventTarget~Event} event\n * The `click` or `tap` event that caused this function to be called.\n *\n * @listens click,tap\n */;_proto.handleTapClick=function handleTapClick(event){// Unpress the associated MenuButton, and move focus back to it\nif(this.menuButton_){this.menuButton_.unpressButton();var childComponents=this.children();if(!Array.isArray(childComponents)){return;}var foundComponent=childComponents.filter(function(component){return component.el()===event.target;})[0];if(!foundComponent){return;}// don't focus menu button if item is a caption settings item\n// because focus will move elsewhere\nif(foundComponent.name()!=='CaptionSettingsMenuItem'){this.menuButton_.focus();}}}/**\n * Handle a `keydown` event on this menu. This listener is added in the constructor.\n *\n * @param {EventTarget~Event} event\n * A `keydown` event that happened on the menu.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Left and Down Arrows\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Left')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Down')){event.preventDefault();event.stopPropagation();this.stepForward();// Up and Right Arrows\n}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Right')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Up')){event.preventDefault();event.stopPropagation();this.stepBack();}}/**\n * Move to next (lower) menu item for keyboard users.\n */;_proto.stepForward=function stepForward(){var stepChild=0;if(this.focusedChild_!==undefined){stepChild=this.focusedChild_+1;}this.focus(stepChild);}/**\n * Move to previous (higher) menu item for keyboard users.\n */;_proto.stepBack=function stepBack(){var stepChild=0;if(this.focusedChild_!==undefined){stepChild=this.focusedChild_-1;}this.focus(stepChild);}/**\n * Set focus on a {@link MenuItem} in the `Menu`.\n *\n * @param {Object|string} [item=0]\n * Index of child item set focus on.\n */;_proto.focus=function focus(item){if(item===void 0){item=0;}var children=this.children().slice();var haveTitle=children.length&&children[0].className&&/vjs-menu-title/.test(children[0].className);if(haveTitle){children.shift();}if(children.length>0){if(item<0){item=0;}else if(item>=children.length){item=children.length-1;}this.focusedChild_=item;children[item].el_.focus();}};return Menu;}(Component);Component.registerComponent('Menu',Menu);/**\n * A `MenuButton` class for any popup {@link Menu}.\n *\n * @extends Component\n */var MenuButton=/*#__PURE__*/function(_Component){_inheritsLoose(MenuButton,_Component);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function MenuButton(player,options){var _this;if(options===void 0){options={};}_this=_Component.call(this,player,options)||this;_this.menuButton_=new Button(player,options);_this.menuButton_.controlText(_this.controlText_);_this.menuButton_.el_.setAttribute('aria-haspopup','true');// Add buildCSSClass values to the button, not the wrapper\nvar buttonClass=Button.prototype.buildCSSClass();_this.menuButton_.el_.className=_this.buildCSSClass()+' '+buttonClass;_this.menuButton_.removeClass('vjs-control');_this.addChild(_this.menuButton_);_this.update();_this.enabled_=true;_this.on(_this.menuButton_,'tap',_this.handleClick);_this.on(_this.menuButton_,'click',_this.handleClick);_this.on(_this.menuButton_,'keydown',_this.handleKeyDown);_this.on(_this.menuButton_,'mouseenter',function(){_this.addClass('vjs-hover');_this.menu.show();on(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keyup',bind(_assertThisInitialized(_this),_this.handleMenuKeyUp));});_this.on('mouseleave',_this.handleMouseLeave);_this.on('keydown',_this.handleSubmenuKeyDown);return _this;}/**\n * Update the menu based on the current state of its items.\n */var _proto=MenuButton.prototype;_proto.update=function update(){var menu=this.createMenu();if(this.menu){this.menu.dispose();this.removeChild(this.menu);}this.menu=menu;this.addChild(menu);/**\n * Track the state of the menu button\n *\n * @type {Boolean}\n * @private\n */this.buttonPressed_=false;this.menuButton_.el_.setAttribute('aria-expanded','false');if(this.items&&this.items.length<=this.hideThreshold_){this.hide();}else{this.show();}}/**\n * Create the menu and add all items to it.\n *\n * @return {Menu}\n * The constructed menu\n */;_proto.createMenu=function createMenu(){var menu=new Menu(this.player_,{menuButton:this});/**\n * Hide the menu if the number of items is less than or equal to this threshold. This defaults\n * to 0 and whenever we add items which can be hidden to the menu we'll increment it. We list\n * it here because every time we run `createMenu` we need to reset the value.\n *\n * @protected\n * @type {Number}\n */this.hideThreshold_=0;// Add a title list item to the top\nif(this.options_.title){var titleEl=createEl('li',{className:'vjs-menu-title',innerHTML:toTitleCase(this.options_.title),tabIndex:-1});this.hideThreshold_+=1;var titleComponent=new Component(this.player_,{el:titleEl});menu.addItem(titleComponent);}this.items=this.createItems();if(this.items){// Add menu items to the menu\nfor(var i=0;i<this.items.length;i++){menu.addItem(this.items[i]);}}return menu;}/**\n * Create the list of menu items. Specific to each subclass.\n *\n * @abstract\n */;_proto.createItems=function createItems(){}/**\n * Create the `MenuButtons`s DOM element.\n *\n * @return {Element}\n * The element that gets created.\n */;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:this.buildWrapperCSSClass()},{});}/**\n * Allow sub components to stack CSS class names for the wrapper element\n *\n * @return {string}\n * The constructed wrapper DOM `className`\n */;_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){var menuButtonClass='vjs-menu-button';// If the inline option is passed, we want to use different styles altogether.\nif(this.options_.inline===true){menuButtonClass+='-inline';}else{menuButtonClass+='-popup';}// TODO: Fix the CSS so that this isn't necessary\nvar buttonClass=Button.prototype.buildCSSClass();return\"vjs-menu-button \"+menuButtonClass+\" \"+buttonClass+\" \"+_Component.prototype.buildCSSClass.call(this);}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */;_proto.buildCSSClass=function buildCSSClass(){var menuButtonClass='vjs-menu-button';// If the inline option is passed, we want to use different styles altogether.\nif(this.options_.inline===true){menuButtonClass+='-inline';}else{menuButtonClass+='-popup';}return\"vjs-menu-button \"+menuButtonClass+\" \"+_Component.prototype.buildCSSClass.call(this);}/**\n * Get or set the localized control text that will be used for accessibility.\n *\n * > NOTE: This will come from the internal `menuButton_` element.\n *\n * @param {string} [text]\n * Control text for element.\n *\n * @param {Element} [el=this.menuButton_.el()]\n * Element to set the title on.\n *\n * @return {string}\n * - The control text when getting\n */;_proto.controlText=function controlText(text,el){if(el===void 0){el=this.menuButton_.el();}return this.menuButton_.controlText(text,el);}/**\n * Dispose of the `menu-button` and all child components.\n */;_proto.dispose=function dispose(){this.handleMouseLeave();_Component.prototype.dispose.call(this);}/**\n * Handle a click on a `MenuButton`.\n * See {@link ClickableComponent#handleClick} for instances where this is called.\n *\n * @param {EventTarget~Event} event\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){if(this.buttonPressed_){this.unpressButton();}else{this.pressButton();}}/**\n * Handle `mouseleave` for `MenuButton`.\n *\n * @param {EventTarget~Event} event\n * The `mouseleave` event that caused this function to be called.\n *\n * @listens mouseleave\n */;_proto.handleMouseLeave=function handleMouseLeave(event){this.removeClass('vjs-hover');off(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keyup',bind(this,this.handleMenuKeyUp));}/**\n * Set the focus to the actual button, not to this element\n */;_proto.focus=function focus(){this.menuButton_.focus();}/**\n * Remove the focus from the actual button, not this element\n */;_proto.blur=function blur(){this.menuButton_.blur();}/**\n * Handle tab, escape, down arrow, and up arrow keys for `MenuButton`. See\n * {@link ClickableComponent#handleKeyDown} for instances where this is called.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){// Escape or Tab unpress the 'button'\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){if(this.buttonPressed_){this.unpressButton();}// Don't preventDefault for Tab key - we still want to lose focus\nif(!keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){event.preventDefault();// Set focus back to the menu button's button\nthis.menuButton_.focus();}// Up Arrow or Down Arrow also 'press' the button to open the menu\n}else if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Up')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Down')){if(!this.buttonPressed_){event.preventDefault();this.pressButton();}}}/**\n * Handle a `keyup` event on a `MenuButton`. The listener for this is added in\n * the constructor.\n *\n * @param {EventTarget~Event} event\n * Key press event\n *\n * @listens keyup\n */;_proto.handleMenuKeyUp=function handleMenuKeyUp(event){// Escape hides popup menu\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){this.removeClass('vjs-hover');}}/**\n * This method name now delegates to `handleSubmenuKeyDown`. This means\n * anyone calling `handleSubmenuKeyPress` will not see their method calls\n * stop working.\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to be called.\n */;_proto.handleSubmenuKeyPress=function handleSubmenuKeyPress(event){this.handleSubmenuKeyDown(event);}/**\n * Handle a `keydown` event on a sub-menu. The listener for this is added in\n * the constructor.\n *\n * @param {EventTarget~Event} event\n * Key press event\n *\n * @listens keydown\n */;_proto.handleSubmenuKeyDown=function handleSubmenuKeyDown(event){// Escape or Tab unpress the 'button'\nif(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){if(this.buttonPressed_){this.unpressButton();}// Don't preventDefault for Tab key - we still want to lose focus\nif(!keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Tab')){event.preventDefault();// Set focus back to the menu button's button\nthis.menuButton_.focus();}}}/**\n * Put the current `MenuButton` into a pressed state.\n */;_proto.pressButton=function pressButton(){if(this.enabled_){this.buttonPressed_=true;this.menu.show();this.menu.lockShowing();this.menuButton_.el_.setAttribute('aria-expanded','true');// set the focus into the submenu, except on iOS where it is resulting in\n// undesired scrolling behavior when the player is in an iframe\nif(IS_IOS&&isInFrame()){// Return early so that the menu isn't focused\nreturn;}this.menu.focus();}}/**\n * Take the current `MenuButton` out of a pressed state.\n */;_proto.unpressButton=function unpressButton(){if(this.enabled_){this.buttonPressed_=false;this.menu.unlockShowing();this.menu.hide();this.menuButton_.el_.setAttribute('aria-expanded','false');}}/**\n * Disable the `MenuButton`. Don't allow it to be clicked.\n */;_proto.disable=function disable(){this.unpressButton();this.enabled_=false;this.addClass('vjs-disabled');this.menuButton_.disable();}/**\n * Enable the `MenuButton`. Allow it to be clicked.\n */;_proto.enable=function enable(){this.enabled_=true;this.removeClass('vjs-disabled');this.menuButton_.enable();};return MenuButton;}(Component);Component.registerComponent('MenuButton',MenuButton);/**\n * The base class for buttons that toggle specific track types (e.g. subtitles).\n *\n * @extends MenuButton\n */var TrackButton=/*#__PURE__*/function(_MenuButton){_inheritsLoose(TrackButton,_MenuButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function TrackButton(player,options){var _this;var tracks=options.tracks;_this=_MenuButton.call(this,player,options)||this;if(_this.items.length<=1){_this.hide();}if(!tracks){return _assertThisInitialized(_this);}var updateHandler=bind(_assertThisInitialized(_this),_this.update);tracks.addEventListener('removetrack',updateHandler);tracks.addEventListener('addtrack',updateHandler);_this.player_.on('ready',updateHandler);_this.player_.on('dispose',function(){tracks.removeEventListener('removetrack',updateHandler);tracks.removeEventListener('addtrack',updateHandler);});return _this;}return TrackButton;}(MenuButton);Component.registerComponent('TrackButton',TrackButton);/**\n * @file menu-keys.js\n */ /**\n * All keys used for operation of a menu (`MenuButton`, `Menu`, and `MenuItem`)\n * Note that 'Enter' and 'Space' are not included here (otherwise they would\n * prevent the `MenuButton` and `MenuItem` from being keyboard-clickable)\n * @typedef MenuKeys\n * @array\n */var MenuKeys=['Tab','Esc','Up','Down','Right','Left'];/**\n * The component for a menu item. `<li>`\n *\n * @extends ClickableComponent\n */var MenuItem=/*#__PURE__*/function(_ClickableComponent){_inheritsLoose(MenuItem,_ClickableComponent);/**\n * Creates an instance of the this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n *\n */function MenuItem(player,options){var _this;_this=_ClickableComponent.call(this,player,options)||this;_this.selectable=options.selectable;_this.isSelected_=options.selected||false;_this.multiSelectable=options.multiSelectable;_this.selected(_this.isSelected_);if(_this.selectable){if(_this.multiSelectable){_this.el_.setAttribute('role','menuitemcheckbox');}else{_this.el_.setAttribute('role','menuitemradio');}}else{_this.el_.setAttribute('role','menuitem');}return _this;}/**\n * Create the `MenuItem's DOM element\n *\n * @param {string} [type=li]\n * Element's node type, not actually used, always set to `li`.\n *\n * @param {Object} [props={}]\n * An object of properties that should be set on the element\n *\n * @param {Object} [attrs={}]\n * An object of attributes that should be set on the element\n *\n * @return {Element}\n * The element that gets created.\n */var _proto=MenuItem.prototype;_proto.createEl=function createEl(type,props,attrs){// The control is textual, not just an icon\nthis.nonIconControl=true;return _ClickableComponent.prototype.createEl.call(this,'li',assign({className:'vjs-menu-item',innerHTML:\"<span class=\\\"vjs-menu-item-text\\\">\"+this.localize(this.options_.label)+\"</span>\",tabIndex:-1},props),attrs);}/**\n * Ignore keys which are used by the menu, but pass any other ones up. See\n * {@link ClickableComponent#handleKeyDown} for instances where this is called.\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){if(!MenuKeys.some(function(key){return keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,key);})){// Pass keydown handling up for unused keys\n_ClickableComponent.prototype.handleKeyDown.call(this,event);}}/**\n * Any click on a `MenuItem` puts it into the selected state.\n * See {@link ClickableComponent#handleClick} for instances where this is called.\n *\n * @param {EventTarget~Event} event\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){this.selected(true);}/**\n * Set the state for this menu item as selected or not.\n *\n * @param {boolean} selected\n * if the menu item is selected or not\n */;_proto.selected=function selected(_selected){if(this.selectable){if(_selected){this.addClass('vjs-selected');this.el_.setAttribute('aria-checked','true');// aria-checked isn't fully supported by browsers/screen readers,\n// so indicate selected state to screen reader in the control text.\nthis.controlText(', selected');this.isSelected_=true;}else{this.removeClass('vjs-selected');this.el_.setAttribute('aria-checked','false');// Indicate un-selected state to screen reader\nthis.controlText('');this.isSelected_=false;}}};return MenuItem;}(ClickableComponent);Component.registerComponent('MenuItem',MenuItem);/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @extends MenuItem\n */var TextTrackMenuItem=/*#__PURE__*/function(_MenuItem){_inheritsLoose(TextTrackMenuItem,_MenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function TextTrackMenuItem(player,options){var _this;var track=options.track;var tracks=player.textTracks();// Modify options for parent MenuItem class's init.\noptions.label=track.label||track.language||'Unknown';options.selected=track.mode==='showing';_this=_MenuItem.call(this,player,options)||this;_this.track=track;// Determine the relevant kind(s) of tracks for this component and filter\n// out empty kinds.\n_this.kinds=(options.kinds||[options.kind||_this.track.kind]).filter(Boolean);var changeHandler=function changeHandler(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this.handleTracksChange.apply(_assertThisInitialized(_this),args);};var selectedLanguageChangeHandler=function selectedLanguageChangeHandler(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}_this.handleSelectedLanguageChange.apply(_assertThisInitialized(_this),args);};player.on(['loadstart','texttrackchange'],changeHandler);tracks.addEventListener('change',changeHandler);tracks.addEventListener('selectedlanguagechange',selectedLanguageChangeHandler);_this.on('dispose',function(){player.off(['loadstart','texttrackchange'],changeHandler);tracks.removeEventListener('change',changeHandler);tracks.removeEventListener('selectedlanguagechange',selectedLanguageChangeHandler);});// iOS7 doesn't dispatch change events to TextTrackLists when an\n// associated track's mode changes. Without something like\n// Object.observe() (also not present on iOS7), it's not\n// possible to detect changes to the mode attribute and polyfill\n// the change event. As a poor substitute, we manually dispatch\n// change events whenever the controls modify the mode.\nif(tracks.onchange===undefined){var event;_this.on(['tap','click'],function(){if(_typeof(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Event)!=='object'){// Android 2.3 throws an Illegal Constructor error for window.Event\ntry{event=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Event('change');}catch(err){// continue regardless of error\n}}if(!event){event=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createEvent('Event');event.initEvent('change',true,true);}tracks.dispatchEvent(event);});}// set the default state based on current tracks\n_this.handleTracksChange();return _this;}/**\n * This gets called when an `TextTrackMenuItem` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} event\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */var _proto=TextTrackMenuItem.prototype;_proto.handleClick=function handleClick(event){var referenceTrack=this.track;var tracks=this.player_.textTracks();_MenuItem.prototype.handleClick.call(this,event);if(!tracks){return;}for(var i=0;i<tracks.length;i++){var track=tracks[i];// If the track from the text tracks list is not of the right kind,\n// skip it. We do not want to affect tracks of incompatible kind(s).\nif(this.kinds.indexOf(track.kind)===-1){continue;}// If this text track is the component's track and it is not showing,\n// set it to showing.\nif(track===referenceTrack){if(track.mode!=='showing'){track.mode='showing';}// If this text track is not the component's track and it is not\n// disabled, set it to disabled.\n}else if(track.mode!=='disabled'){track.mode='disabled';}}}/**\n * Handle text track list change\n *\n * @param {EventTarget~Event} event\n * The `change` event that caused this function to be called.\n *\n * @listens TextTrackList#change\n */;_proto.handleTracksChange=function handleTracksChange(event){var shouldBeSelected=this.track.mode==='showing';// Prevent redundant selected() calls because they may cause\n// screen readers to read the appended control text unnecessarily\nif(shouldBeSelected!==this.isSelected_){this.selected(shouldBeSelected);}};_proto.handleSelectedLanguageChange=function handleSelectedLanguageChange(event){if(this.track.mode==='showing'){var selectedLanguage=this.player_.cache_.selectedLanguage;// Don't replace the kind of track across the same language\nif(selectedLanguage&&selectedLanguage.enabled&&selectedLanguage.language===this.track.language&&selectedLanguage.kind!==this.track.kind){return;}this.player_.cache_.selectedLanguage={enabled:true,language:this.track.language,kind:this.track.kind};}};_proto.dispose=function dispose(){// remove reference to track object on dispose\nthis.track=null;_MenuItem.prototype.dispose.call(this);};return TextTrackMenuItem;}(MenuItem);Component.registerComponent('TextTrackMenuItem',TextTrackMenuItem);/**\n * A special menu item for turning of a specific type of text track\n *\n * @extends TextTrackMenuItem\n */var OffTextTrackMenuItem=/*#__PURE__*/function(_TextTrackMenuItem){_inheritsLoose(OffTextTrackMenuItem,_TextTrackMenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function OffTextTrackMenuItem(player,options){// Create pseudo track info\n// Requires options['kind']\noptions.track={player:player,// it is no longer necessary to store `kind` or `kinds` on the track itself\n// since they are now stored in the `kinds` property of all instances of\n// TextTrackMenuItem, but this will remain for backwards compatibility\nkind:options.kind,kinds:options.kinds,\"default\":false,mode:'disabled'};if(!options.kinds){options.kinds=[options.kind];}if(options.label){options.track.label=options.label;}else{options.track.label=options.kinds.join(' and ')+' off';}// MenuItem is selectable\noptions.selectable=true;// MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\noptions.multiSelectable=false;return _TextTrackMenuItem.call(this,player,options)||this;}/**\n * Handle text track change\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to run\n */var _proto=OffTextTrackMenuItem.prototype;_proto.handleTracksChange=function handleTracksChange(event){var tracks=this.player().textTracks();var shouldBeSelected=true;for(var i=0,l=tracks.length;i<l;i++){var track=tracks[i];if(this.options_.kinds.indexOf(track.kind)>-1&&track.mode==='showing'){shouldBeSelected=false;break;}}// Prevent redundant selected() calls because they may cause\n// screen readers to read the appended control text unnecessarily\nif(shouldBeSelected!==this.isSelected_){this.selected(shouldBeSelected);}};_proto.handleSelectedLanguageChange=function handleSelectedLanguageChange(event){var tracks=this.player().textTracks();var allHidden=true;for(var i=0,l=tracks.length;i<l;i++){var track=tracks[i];if(['captions','descriptions','subtitles'].indexOf(track.kind)>-1&&track.mode==='showing'){allHidden=false;break;}}if(allHidden){this.player_.cache_.selectedLanguage={enabled:false};}};return OffTextTrackMenuItem;}(TextTrackMenuItem);Component.registerComponent('OffTextTrackMenuItem',OffTextTrackMenuItem);/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @extends MenuButton\n */var TextTrackButton=/*#__PURE__*/function(_TrackButton){_inheritsLoose(TextTrackButton,_TrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function TextTrackButton(player,options){if(options===void 0){options={};}options.tracks=player.textTracks();return _TrackButton.call(this,player,options)||this;}/**\n * Create a menu item for each text track\n *\n * @param {TextTrackMenuItem[]} [items=[]]\n * Existing array of items to use during creation\n *\n * @return {TextTrackMenuItem[]}\n * Array of menu items that were created\n */var _proto=TextTrackButton.prototype;_proto.createItems=function createItems(items,TrackMenuItem){if(items===void 0){items=[];}if(TrackMenuItem===void 0){TrackMenuItem=TextTrackMenuItem;}// Label is an override for the [track] off label\n// USed to localise captions/subtitles\nvar label;if(this.label_){label=this.label_+\" off\";}// Add an OFF menu item to turn all tracks off\nitems.push(new OffTextTrackMenuItem(this.player_,{kinds:this.kinds_,kind:this.kind_,label:label}));this.hideThreshold_+=1;var tracks=this.player_.textTracks();if(!Array.isArray(this.kinds_)){this.kinds_=[this.kind_];}for(var i=0;i<tracks.length;i++){var track=tracks[i];// only add tracks that are of an appropriate kind and have a label\nif(this.kinds_.indexOf(track.kind)>-1){var item=new TrackMenuItem(this.player_,{track:track,kinds:this.kinds_,kind:this.kind_,// MenuItem is selectable\nselectable:true,// MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\nmultiSelectable:false});item.addClass(\"vjs-\"+track.kind+\"-menu-item\");items.push(item);}}return items;};return TextTrackButton;}(TrackButton);Component.registerComponent('TextTrackButton',TextTrackButton);/**\n * The chapter track menu item\n *\n * @extends MenuItem\n */var ChaptersTrackMenuItem=/*#__PURE__*/function(_MenuItem){_inheritsLoose(ChaptersTrackMenuItem,_MenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function ChaptersTrackMenuItem(player,options){var _this;var track=options.track;var cue=options.cue;var currentTime=player.currentTime();// Modify options for parent MenuItem class's init.\noptions.selectable=true;options.multiSelectable=false;options.label=cue.text;options.selected=cue.startTime<=currentTime&¤tTime<cue.endTime;_this=_MenuItem.call(this,player,options)||this;_this.track=track;_this.cue=cue;track.addEventListener('cuechange',bind(_assertThisInitialized(_this),_this.update));return _this;}/**\n * This gets called when an `ChaptersTrackMenuItem` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */var _proto=ChaptersTrackMenuItem.prototype;_proto.handleClick=function handleClick(event){_MenuItem.prototype.handleClick.call(this);this.player_.currentTime(this.cue.startTime);this.update(this.cue.startTime);}/**\n * Update chapter menu item\n *\n * @param {EventTarget~Event} [event]\n * The `cuechange` event that caused this function to run.\n *\n * @listens TextTrack#cuechange\n */;_proto.update=function update(event){var cue=this.cue;var currentTime=this.player_.currentTime();// vjs.log(currentTime, cue.startTime);\nthis.selected(cue.startTime<=currentTime&¤tTime<cue.endTime);};return ChaptersTrackMenuItem;}(MenuItem);Component.registerComponent('ChaptersTrackMenuItem',ChaptersTrackMenuItem);/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @extends TextTrackButton\n */var ChaptersButton=/*#__PURE__*/function(_TextTrackButton){_inheritsLoose(ChaptersButton,_TextTrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function to call when this function is ready.\n */function ChaptersButton(player,options,ready){return _TextTrackButton.call(this,player,options,ready)||this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=ChaptersButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-chapters-button \"+_TextTrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-chapters-button \"+_TextTrackButton.prototype.buildWrapperCSSClass.call(this);}/**\n * Update the menu based on the current state of its items.\n *\n * @param {EventTarget~Event} [event]\n * An event that triggered this function to run.\n *\n * @listens TextTrackList#addtrack\n * @listens TextTrackList#removetrack\n * @listens TextTrackList#change\n */;_proto.update=function update(event){if(!this.track_||event&&(event.type==='addtrack'||event.type==='removetrack')){this.setTrack(this.findChaptersTrack());}_TextTrackButton.prototype.update.call(this);}/**\n * Set the currently selected track for the chapters button.\n *\n * @param {TextTrack} track\n * The new track to select. Nothing will change if this is the currently selected\n * track.\n */;_proto.setTrack=function setTrack(track){if(this.track_===track){return;}if(!this.updateHandler_){this.updateHandler_=this.update.bind(this);}// here this.track_ refers to the old track instance\nif(this.track_){var remoteTextTrackEl=this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);if(remoteTextTrackEl){remoteTextTrackEl.removeEventListener('load',this.updateHandler_);}this.track_=null;}this.track_=track;// here this.track_ refers to the new track instance\nif(this.track_){this.track_.mode='hidden';var _remoteTextTrackEl=this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);if(_remoteTextTrackEl){_remoteTextTrackEl.addEventListener('load',this.updateHandler_);}}}/**\n * Find the track object that is currently in use by this ChaptersButton\n *\n * @return {TextTrack|undefined}\n * The current track or undefined if none was found.\n */;_proto.findChaptersTrack=function findChaptersTrack(){var tracks=this.player_.textTracks()||[];for(var i=tracks.length-1;i>=0;i--){// We will always choose the last track as our chaptersTrack\nvar track=tracks[i];if(track.kind===this.kind_){return track;}}}/**\n * Get the caption for the ChaptersButton based on the track label. This will also\n * use the current tracks localized kind as a fallback if a label does not exist.\n *\n * @return {string}\n * The tracks current label or the localized track kind.\n */;_proto.getMenuCaption=function getMenuCaption(){if(this.track_&&this.track_.label){return this.track_.label;}return this.localize(toTitleCase(this.kind_));}/**\n * Create menu from chapter track\n *\n * @return {Menu}\n * New menu for the chapter buttons\n */;_proto.createMenu=function createMenu(){this.options_.title=this.getMenuCaption();return _TextTrackButton.prototype.createMenu.call(this);}/**\n * Create a menu item for each text track\n *\n * @return {TextTrackMenuItem[]}\n * Array of menu items\n */;_proto.createItems=function createItems(){var items=[];if(!this.track_){return items;}var cues=this.track_.cues;if(!cues){return items;}for(var i=0,l=cues.length;i<l;i++){var cue=cues[i];var mi=new ChaptersTrackMenuItem(this.player_,{track:this.track_,cue:cue});items.push(mi);}return items;};return ChaptersButton;}(TextTrackButton);/**\n * `kind` of TextTrack to look for to associate it with this menu.\n *\n * @type {string}\n * @private\n */ChaptersButton.prototype.kind_='chapters';/**\n * The text that should display over the `ChaptersButton`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */ChaptersButton.prototype.controlText_='Chapters';Component.registerComponent('ChaptersButton',ChaptersButton);/**\n * The button component for toggling and selecting descriptions\n *\n * @extends TextTrackButton\n */var DescriptionsButton=/*#__PURE__*/function(_TextTrackButton){_inheritsLoose(DescriptionsButton,_TextTrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function to call when this component is ready.\n */function DescriptionsButton(player,options,ready){var _this;_this=_TextTrackButton.call(this,player,options,ready)||this;var tracks=player.textTracks();var changeHandler=bind(_assertThisInitialized(_this),_this.handleTracksChange);tracks.addEventListener('change',changeHandler);_this.on('dispose',function(){tracks.removeEventListener('change',changeHandler);});return _this;}/**\n * Handle text track change\n *\n * @param {EventTarget~Event} event\n * The event that caused this function to run\n *\n * @listens TextTrackList#change\n */var _proto=DescriptionsButton.prototype;_proto.handleTracksChange=function handleTracksChange(event){var tracks=this.player().textTracks();var disabled=false;// Check whether a track of a different kind is showing\nfor(var i=0,l=tracks.length;i<l;i++){var track=tracks[i];if(track.kind!==this.kind_&&track.mode==='showing'){disabled=true;break;}}// If another track is showing, disable this menu button\nif(disabled){this.disable();}else{this.enable();}}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-descriptions-button \"+_TextTrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-descriptions-button \"+_TextTrackButton.prototype.buildWrapperCSSClass.call(this);};return DescriptionsButton;}(TextTrackButton);/**\n * `kind` of TextTrack to look for to associate it with this menu.\n *\n * @type {string}\n * @private\n */DescriptionsButton.prototype.kind_='descriptions';/**\n * The text that should display over the `DescriptionsButton`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */DescriptionsButton.prototype.controlText_='Descriptions';Component.registerComponent('DescriptionsButton',DescriptionsButton);/**\n * The button component for toggling and selecting subtitles\n *\n * @extends TextTrackButton\n */var SubtitlesButton=/*#__PURE__*/function(_TextTrackButton){_inheritsLoose(SubtitlesButton,_TextTrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function to call when this component is ready.\n */function SubtitlesButton(player,options,ready){return _TextTrackButton.call(this,player,options,ready)||this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=SubtitlesButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-subtitles-button \"+_TextTrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-subtitles-button \"+_TextTrackButton.prototype.buildWrapperCSSClass.call(this);};return SubtitlesButton;}(TextTrackButton);/**\n * `kind` of TextTrack to look for to associate it with this menu.\n *\n * @type {string}\n * @private\n */SubtitlesButton.prototype.kind_='subtitles';/**\n * The text that should display over the `SubtitlesButton`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */SubtitlesButton.prototype.controlText_='Subtitles';Component.registerComponent('SubtitlesButton',SubtitlesButton);/**\n * The menu item for caption track settings menu\n *\n * @extends TextTrackMenuItem\n */var CaptionSettingsMenuItem=/*#__PURE__*/function(_TextTrackMenuItem){_inheritsLoose(CaptionSettingsMenuItem,_TextTrackMenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function CaptionSettingsMenuItem(player,options){var _this;options.track={player:player,kind:options.kind,label:options.kind+' settings',selectable:false,\"default\":false,mode:'disabled'};// CaptionSettingsMenuItem has no concept of 'selected'\noptions.selectable=false;options.name='CaptionSettingsMenuItem';_this=_TextTrackMenuItem.call(this,player,options)||this;_this.addClass('vjs-texttrack-settings');_this.controlText(', opens '+options.kind+' settings dialog');return _this;}/**\n * This gets called when an `CaptionSettingsMenuItem` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */var _proto=CaptionSettingsMenuItem.prototype;_proto.handleClick=function handleClick(event){this.player().getChild('textTrackSettings').open();};return CaptionSettingsMenuItem;}(TextTrackMenuItem);Component.registerComponent('CaptionSettingsMenuItem',CaptionSettingsMenuItem);/**\n * The button component for toggling and selecting captions\n *\n * @extends TextTrackButton\n */var CaptionsButton=/*#__PURE__*/function(_TextTrackButton){_inheritsLoose(CaptionsButton,_TextTrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} [ready]\n * The function to call when this component is ready.\n */function CaptionsButton(player,options,ready){return _TextTrackButton.call(this,player,options,ready)||this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=CaptionsButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-captions-button \"+_TextTrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-captions-button \"+_TextTrackButton.prototype.buildWrapperCSSClass.call(this);}/**\n * Create caption menu items\n *\n * @return {CaptionSettingsMenuItem[]}\n * The array of current menu items.\n */;_proto.createItems=function createItems(){var items=[];if(!(this.player().tech_&&this.player().tech_.featuresNativeTextTracks)&&this.player().getChild('textTrackSettings')){items.push(new CaptionSettingsMenuItem(this.player_,{kind:this.kind_}));this.hideThreshold_+=1;}return _TextTrackButton.prototype.createItems.call(this,items);};return CaptionsButton;}(TextTrackButton);/**\n * `kind` of TextTrack to look for to associate it with this menu.\n *\n * @type {string}\n * @private\n */CaptionsButton.prototype.kind_='captions';/**\n * The text that should display over the `CaptionsButton`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */CaptionsButton.prototype.controlText_='Captions';Component.registerComponent('CaptionsButton',CaptionsButton);/**\n * SubsCapsMenuItem has an [cc] icon to distinguish captions from subtitles\n * in the SubsCapsMenu.\n *\n * @extends TextTrackMenuItem\n */var SubsCapsMenuItem=/*#__PURE__*/function(_TextTrackMenuItem){_inheritsLoose(SubsCapsMenuItem,_TextTrackMenuItem);function SubsCapsMenuItem(){return _TextTrackMenuItem.apply(this,arguments)||this;}var _proto=SubsCapsMenuItem.prototype;_proto.createEl=function createEl(type,props,attrs){var innerHTML=\"<span class=\\\"vjs-menu-item-text\\\">\"+this.localize(this.options_.label);if(this.options_.track.kind==='captions'){innerHTML+=\"\\n <span aria-hidden=\\\"true\\\" class=\\\"vjs-icon-placeholder\\\"></span>\\n <span class=\\\"vjs-control-text\\\"> \"+this.localize('Captions')+\"</span>\\n \";}innerHTML+='</span>';var el=_TextTrackMenuItem.prototype.createEl.call(this,type,assign({innerHTML:innerHTML},props),attrs);return el;};return SubsCapsMenuItem;}(TextTrackMenuItem);Component.registerComponent('SubsCapsMenuItem',SubsCapsMenuItem);/**\n * The button component for toggling and selecting captions and/or subtitles\n *\n * @extends TextTrackButton\n */var SubsCapsButton=/*#__PURE__*/function(_TextTrackButton){_inheritsLoose(SubsCapsButton,_TextTrackButton);function SubsCapsButton(player,options){var _this;if(options===void 0){options={};}_this=_TextTrackButton.call(this,player,options)||this;// Although North America uses \"captions\" in most cases for\n// \"captions and subtitles\" other locales use \"subtitles\"\n_this.label_='subtitles';if(['en','en-us','en-ca','fr-ca'].indexOf(_this.player_.language_)>-1){_this.label_='captions';}_this.menuButton_.controlText(toTitleCase(_this.label_));return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=SubsCapsButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-subs-caps-button \"+_TextTrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-subs-caps-button \"+_TextTrackButton.prototype.buildWrapperCSSClass.call(this);}/**\n * Create caption/subtitles menu items\n *\n * @return {CaptionSettingsMenuItem[]}\n * The array of current menu items.\n */;_proto.createItems=function createItems(){var items=[];if(!(this.player().tech_&&this.player().tech_.featuresNativeTextTracks)&&this.player().getChild('textTrackSettings')){items.push(new CaptionSettingsMenuItem(this.player_,{kind:this.label_}));this.hideThreshold_+=1;}items=_TextTrackButton.prototype.createItems.call(this,items,SubsCapsMenuItem);return items;};return SubsCapsButton;}(TextTrackButton);/**\n * `kind`s of TextTrack to look for to associate it with this menu.\n *\n * @type {array}\n * @private\n */SubsCapsButton.prototype.kinds_=['captions','subtitles'];/**\n * The text that should display over the `SubsCapsButton`s controls.\n *\n *\n * @type {string}\n * @private\n */SubsCapsButton.prototype.controlText_='Subtitles';Component.registerComponent('SubsCapsButton',SubsCapsButton);/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * @extends MenuItem\n */var AudioTrackMenuItem=/*#__PURE__*/function(_MenuItem){_inheritsLoose(AudioTrackMenuItem,_MenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function AudioTrackMenuItem(player,options){var _this;var track=options.track;var tracks=player.audioTracks();// Modify options for parent MenuItem class's init.\noptions.label=track.label||track.language||'Unknown';options.selected=track.enabled;_this=_MenuItem.call(this,player,options)||this;_this.track=track;_this.addClass(\"vjs-\"+track.kind+\"-menu-item\");var changeHandler=function changeHandler(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this.handleTracksChange.apply(_assertThisInitialized(_this),args);};tracks.addEventListener('change',changeHandler);_this.on('dispose',function(){tracks.removeEventListener('change',changeHandler);});return _this;}var _proto=AudioTrackMenuItem.prototype;_proto.createEl=function createEl(type,props,attrs){var innerHTML=\"<span class=\\\"vjs-menu-item-text\\\">\"+this.localize(this.options_.label);if(this.options_.track.kind==='main-desc'){innerHTML+=\"\\n <span aria-hidden=\\\"true\\\" class=\\\"vjs-icon-placeholder\\\"></span>\\n <span class=\\\"vjs-control-text\\\"> \"+this.localize('Descriptions')+\"</span>\\n \";}innerHTML+='</span>';var el=_MenuItem.prototype.createEl.call(this,type,assign({innerHTML:innerHTML},props),attrs);return el;}/**\n * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){var tracks=this.player_.audioTracks();_MenuItem.prototype.handleClick.call(this,event);for(var i=0;i<tracks.length;i++){var track=tracks[i];track.enabled=track===this.track;}}/**\n * Handle any {@link AudioTrack} change.\n *\n * @param {EventTarget~Event} [event]\n * The {@link AudioTrackList#change} event that caused this to run.\n *\n * @listens AudioTrackList#change\n */;_proto.handleTracksChange=function handleTracksChange(event){this.selected(this.track.enabled);};return AudioTrackMenuItem;}(MenuItem);Component.registerComponent('AudioTrackMenuItem',AudioTrackMenuItem);/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends TrackButton\n */var AudioTrackButton=/*#__PURE__*/function(_TrackButton){_inheritsLoose(AudioTrackButton,_TrackButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options={}]\n * The key/value store of player options.\n */function AudioTrackButton(player,options){if(options===void 0){options={};}options.tracks=player.audioTracks();return _TrackButton.call(this,player,options)||this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */var _proto=AudioTrackButton.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-audio-button \"+_TrackButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-audio-button \"+_TrackButton.prototype.buildWrapperCSSClass.call(this);}/**\n * Create a menu item for each audio track\n *\n * @param {AudioTrackMenuItem[]} [items=[]]\n * An array of existing menu items to use.\n *\n * @return {AudioTrackMenuItem[]}\n * An array of menu items\n */;_proto.createItems=function createItems(items){if(items===void 0){items=[];}// if there's only one audio track, there no point in showing it\nthis.hideThreshold_=1;var tracks=this.player_.audioTracks();for(var i=0;i<tracks.length;i++){var track=tracks[i];items.push(new AudioTrackMenuItem(this.player_,{track:track,// MenuItem is selectable\nselectable:true,// MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\nmultiSelectable:false}));}return items;};return AudioTrackButton;}(TrackButton);/**\n * The text that should display over the `AudioTrackButton`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */AudioTrackButton.prototype.controlText_='Audio Track';Component.registerComponent('AudioTrackButton',AudioTrackButton);/**\n * The specific menu item type for selecting a playback rate.\n *\n * @extends MenuItem\n */var PlaybackRateMenuItem=/*#__PURE__*/function(_MenuItem){_inheritsLoose(PlaybackRateMenuItem,_MenuItem);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function PlaybackRateMenuItem(player,options){var _this;var label=options.rate;var rate=parseFloat(label,10);// Modify options for parent MenuItem class's init.\noptions.label=label;options.selected=rate===1;options.selectable=true;options.multiSelectable=false;_this=_MenuItem.call(this,player,options)||this;_this.label=label;_this.rate=rate;_this.on(player,'ratechange',_this.update);return _this;}/**\n * This gets called when an `PlaybackRateMenuItem` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */var _proto=PlaybackRateMenuItem.prototype;_proto.handleClick=function handleClick(event){_MenuItem.prototype.handleClick.call(this);this.player().playbackRate(this.rate);}/**\n * Update the PlaybackRateMenuItem when the playbackrate changes.\n *\n * @param {EventTarget~Event} [event]\n * The `ratechange` event that caused this function to run.\n *\n * @listens Player#ratechange\n */;_proto.update=function update(event){this.selected(this.player().playbackRate()===this.rate);};return PlaybackRateMenuItem;}(MenuItem);/**\n * The text that should display over the `PlaybackRateMenuItem`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */PlaybackRateMenuItem.prototype.contentElType='button';Component.registerComponent('PlaybackRateMenuItem',PlaybackRateMenuItem);/**\n * The component for controlling the playback rate.\n *\n * @extends MenuButton\n */var PlaybackRateMenuButton=/*#__PURE__*/function(_MenuButton){_inheritsLoose(PlaybackRateMenuButton,_MenuButton);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function PlaybackRateMenuButton(player,options){var _this;_this=_MenuButton.call(this,player,options)||this;_this.updateVisibility();_this.updateLabel();_this.on(player,'loadstart',_this.updateVisibility);_this.on(player,'ratechange',_this.updateLabel);return _this;}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */var _proto=PlaybackRateMenuButton.prototype;_proto.createEl=function createEl$1(){var el=_MenuButton.prototype.createEl.call(this);this.labelEl_=createEl('div',{className:'vjs-playback-rate-value',innerHTML:'1x'});el.appendChild(this.labelEl_);return el;};_proto.dispose=function dispose(){this.labelEl_=null;_MenuButton.prototype.dispose.call(this);}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-playback-rate \"+_MenuButton.prototype.buildCSSClass.call(this);};_proto.buildWrapperCSSClass=function buildWrapperCSSClass(){return\"vjs-playback-rate \"+_MenuButton.prototype.buildWrapperCSSClass.call(this);}/**\n * Create the playback rate menu\n *\n * @return {Menu}\n * Menu object populated with {@link PlaybackRateMenuItem}s\n */;_proto.createMenu=function createMenu(){var menu=new Menu(this.player());var rates=this.playbackRates();if(rates){for(var i=rates.length-1;i>=0;i--){menu.addChild(new PlaybackRateMenuItem(this.player(),{rate:rates[i]+'x'}));}}return menu;}/**\n * Updates ARIA accessibility attributes\n */;_proto.updateARIAAttributes=function updateARIAAttributes(){// Current playback rate\nthis.el().setAttribute('aria-valuenow',this.player().playbackRate());}/**\n * This gets called when an `PlaybackRateMenuButton` is \"clicked\". See\n * {@link ClickableComponent} for more detailed information on what a click can be.\n *\n * @param {EventTarget~Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */;_proto.handleClick=function handleClick(event){// select next rate option\nvar currentRate=this.player().playbackRate();var rates=this.playbackRates();// this will select first one if the last one currently selected\nvar newRate=rates[0];for(var i=0;i<rates.length;i++){if(rates[i]>currentRate){newRate=rates[i];break;}}this.player().playbackRate(newRate);}/**\n * Get possible playback rates\n *\n * @return {Array}\n * All possible playback rates\n */;_proto.playbackRates=function playbackRates(){return this.options_.playbackRates||this.options_.playerOptions&&this.options_.playerOptions.playbackRates;}/**\n * Get whether playback rates is supported by the tech\n * and an array of playback rates exists\n *\n * @return {boolean}\n * Whether changing playback rate is supported\n */;_proto.playbackRateSupported=function playbackRateSupported(){return this.player().tech_&&this.player().tech_.featuresPlaybackRate&&this.playbackRates()&&this.playbackRates().length>0;}/**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#loadstart\n */;_proto.updateVisibility=function updateVisibility(event){if(this.playbackRateSupported()){this.removeClass('vjs-hidden');}else{this.addClass('vjs-hidden');}}/**\n * Update button label when rate changed\n *\n * @param {EventTarget~Event} [event]\n * The event that caused this function to run.\n *\n * @listens Player#ratechange\n */;_proto.updateLabel=function updateLabel(event){if(this.playbackRateSupported()){this.labelEl_.innerHTML=this.player().playbackRate()+'x';}};return PlaybackRateMenuButton;}(MenuButton);/**\n * The text that should display over the `FullscreenToggle`s controls. Added for localization.\n *\n * @type {string}\n * @private\n */PlaybackRateMenuButton.prototype.controlText_='Playback Rate';Component.registerComponent('PlaybackRateMenuButton',PlaybackRateMenuButton);/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n */var Spacer=/*#__PURE__*/function(_Component){_inheritsLoose(Spacer,_Component);function Spacer(){return _Component.apply(this,arguments)||this;}var _proto=Spacer.prototype;/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */_proto.buildCSSClass=function buildCSSClass(){return\"vjs-spacer \"+_Component.prototype.buildCSSClass.call(this);}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:this.buildCSSClass()});};return Spacer;}(Component);Component.registerComponent('Spacer',Spacer);/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n */var CustomControlSpacer=/*#__PURE__*/function(_Spacer){_inheritsLoose(CustomControlSpacer,_Spacer);function CustomControlSpacer(){return _Spacer.apply(this,arguments)||this;}var _proto=CustomControlSpacer.prototype;/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */_proto.buildCSSClass=function buildCSSClass(){return\"vjs-custom-control-spacer \"+_Spacer.prototype.buildCSSClass.call(this);}/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */;_proto.createEl=function createEl(){var el=_Spacer.prototype.createEl.call(this,{className:this.buildCSSClass()});// No-flex/table-cell mode requires there be some content\n// in the cell to fill the remaining space of the table.\nel.innerHTML=\"\\xA0\";return el;};return CustomControlSpacer;}(Spacer);Component.registerComponent('CustomControlSpacer',CustomControlSpacer);/**\n * Container of main controls.\n *\n * @extends Component\n */var ControlBar=/*#__PURE__*/function(_Component){_inheritsLoose(ControlBar,_Component);function ControlBar(){return _Component.apply(this,arguments)||this;}var _proto=ControlBar.prototype;/**\n * Create the `Component`'s DOM element\n *\n * @return {Element}\n * The element that was created.\n */_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'div',{className:'vjs-control-bar',dir:'ltr'});};return ControlBar;}(Component);/**\n * Default options for `ControlBar`\n *\n * @type {Object}\n * @private\n */ControlBar.prototype.options_={children:['playToggle','volumePanel','currentTimeDisplay','timeDivider','durationDisplay','progressControl','liveDisplay','seekToLive','remainingTimeDisplay','customControlSpacer','playbackRateMenuButton','chaptersButton','descriptionsButton','subsCapsButton','audioTrackButton','fullscreenToggle']};if('exitPictureInPicture'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){ControlBar.prototype.options_.children.splice(ControlBar.prototype.options_.children.length-1,0,'pictureInPictureToggle');}Component.registerComponent('ControlBar',ControlBar);/**\n * A display that indicates an error has occurred. This means that the video\n * is unplayable.\n *\n * @extends ModalDialog\n */var ErrorDisplay=/*#__PURE__*/function(_ModalDialog){_inheritsLoose(ErrorDisplay,_ModalDialog);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function ErrorDisplay(player,options){var _this;_this=_ModalDialog.call(this,player,options)||this;_this.on(player,'error',_this.open);return _this;}/**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n *\n * @deprecated Since version 5.\n */var _proto=ErrorDisplay.prototype;_proto.buildCSSClass=function buildCSSClass(){return\"vjs-error-display \"+_ModalDialog.prototype.buildCSSClass.call(this);}/**\n * Gets the localized error message based on the `Player`s error.\n *\n * @return {string}\n * The `Player`s error message localized or an empty string.\n */;_proto.content=function content(){var error=this.player().error();return error?this.localize(error.message):'';};return ErrorDisplay;}(ModalDialog);/**\n * The default options for an `ErrorDisplay`.\n *\n * @private\n */ErrorDisplay.prototype.options_=mergeOptions(ModalDialog.prototype.options_,{pauseOnOpen:false,fillAlways:true,temporary:false,uncloseable:true});Component.registerComponent('ErrorDisplay',ErrorDisplay);var LOCAL_STORAGE_KEY='vjs-text-track-settings';var COLOR_BLACK=['#000','Black'];var COLOR_BLUE=['#00F','Blue'];var COLOR_CYAN=['#0FF','Cyan'];var COLOR_GREEN=['#0F0','Green'];var COLOR_MAGENTA=['#F0F','Magenta'];var COLOR_RED=['#F00','Red'];var COLOR_WHITE=['#FFF','White'];var COLOR_YELLOW=['#FF0','Yellow'];var OPACITY_OPAQUE=['1','Opaque'];var OPACITY_SEMI=['0.5','Semi-Transparent'];var OPACITY_TRANS=['0','Transparent'];// Configuration for the various <select> elements in the DOM of this component.\n//\n// Possible keys include:\n//\n// `default`:\n// The default option index. Only needs to be provided if not zero.\n// `parser`:\n// A function which is used to parse the value from the selected option in\n// a customized way.\n// `selector`:\n// The selector used to find the associated <select> element.\nvar selectConfigs={backgroundColor:{selector:'.vjs-bg-color > select',id:'captions-background-color-%s',label:'Color',options:[COLOR_BLACK,COLOR_WHITE,COLOR_RED,COLOR_GREEN,COLOR_BLUE,COLOR_YELLOW,COLOR_MAGENTA,COLOR_CYAN]},backgroundOpacity:{selector:'.vjs-bg-opacity > select',id:'captions-background-opacity-%s',label:'Transparency',options:[OPACITY_OPAQUE,OPACITY_SEMI,OPACITY_TRANS]},color:{selector:'.vjs-fg-color > select',id:'captions-foreground-color-%s',label:'Color',options:[COLOR_WHITE,COLOR_BLACK,COLOR_RED,COLOR_GREEN,COLOR_BLUE,COLOR_YELLOW,COLOR_MAGENTA,COLOR_CYAN]},edgeStyle:{selector:'.vjs-edge-style > select',id:'%s',label:'Text Edge Style',options:[['none','None'],['raised','Raised'],['depressed','Depressed'],['uniform','Uniform'],['dropshadow','Dropshadow']]},fontFamily:{selector:'.vjs-font-family > select',id:'captions-font-family-%s',label:'Font Family',options:[['proportionalSansSerif','Proportional Sans-Serif'],['monospaceSansSerif','Monospace Sans-Serif'],['proportionalSerif','Proportional Serif'],['monospaceSerif','Monospace Serif'],['casual','Casual'],['script','Script'],['small-caps','Small Caps']]},fontPercent:{selector:'.vjs-font-percent > select',id:'captions-font-size-%s',label:'Font Size',options:[['0.50','50%'],['0.75','75%'],['1.00','100%'],['1.25','125%'],['1.50','150%'],['1.75','175%'],['2.00','200%'],['3.00','300%'],['4.00','400%']],\"default\":2,parser:function parser(v){return v==='1.00'?null:Number(v);}},textOpacity:{selector:'.vjs-text-opacity > select',id:'captions-foreground-opacity-%s',label:'Transparency',options:[OPACITY_OPAQUE,OPACITY_SEMI]},// Options for this object are defined below.\nwindowColor:{selector:'.vjs-window-color > select',id:'captions-window-color-%s',label:'Color'},// Options for this object are defined below.\nwindowOpacity:{selector:'.vjs-window-opacity > select',id:'captions-window-opacity-%s',label:'Transparency',options:[OPACITY_TRANS,OPACITY_SEMI,OPACITY_OPAQUE]}};selectConfigs.windowColor.options=selectConfigs.backgroundColor.options;/**\n * Get the actual value of an option.\n *\n * @param {string} value\n * The value to get\n *\n * @param {Function} [parser]\n * Optional function to adjust the value.\n *\n * @return {Mixed}\n * - Will be `undefined` if no value exists\n * - Will be `undefined` if the given value is \"none\".\n * - Will be the actual value otherwise.\n *\n * @private\n */function parseOptionValue(value,parser){if(parser){value=parser(value);}if(value&&value!=='none'){return value;}}/**\n * Gets the value of the selected <option> element within a <select> element.\n *\n * @param {Element} el\n * the element to look in\n *\n * @param {Function} [parser]\n * Optional function to adjust the value.\n *\n * @return {Mixed}\n * - Will be `undefined` if no value exists\n * - Will be `undefined` if the given value is \"none\".\n * - Will be the actual value otherwise.\n *\n * @private\n */function getSelectedOptionValue(el,parser){var value=el.options[el.options.selectedIndex].value;return parseOptionValue(value,parser);}/**\n * Sets the selected <option> element within a <select> element based on a\n * given value.\n *\n * @param {Element} el\n * The element to look in.\n *\n * @param {string} value\n * the property to look on.\n *\n * @param {Function} [parser]\n * Optional function to adjust the value before comparing.\n *\n * @private\n */function setSelectedOption(el,value,parser){if(!value){return;}for(var i=0;i<el.options.length;i++){if(parseOptionValue(el.options[i].value,parser)===value){el.selectedIndex=i;break;}}}/**\n * Manipulate Text Tracks settings.\n *\n * @extends ModalDialog\n */var TextTrackSettings=/*#__PURE__*/function(_ModalDialog){_inheritsLoose(TextTrackSettings,_ModalDialog);/**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */function TextTrackSettings(player,options){var _this;options.temporary=false;_this=_ModalDialog.call(this,player,options)||this;_this.updateDisplay=bind(_assertThisInitialized(_this),_this.updateDisplay);// fill the modal and pretend we have opened it\n_this.fill();_this.hasBeenOpened_=_this.hasBeenFilled_=true;_this.endDialog=createEl('p',{className:'vjs-control-text',textContent:_this.localize('End of dialog window.')});_this.el().appendChild(_this.endDialog);_this.setDefaults();// Grab `persistTextTrackSettings` from the player options if not passed in child options\nif(options.persistTextTrackSettings===undefined){_this.options_.persistTextTrackSettings=_this.options_.playerOptions.persistTextTrackSettings;}_this.on(_this.$('.vjs-done-button'),'click',function(){_this.saveSettings();_this.close();});_this.on(_this.$('.vjs-default-button'),'click',function(){_this.setDefaults();_this.updateDisplay();});each(selectConfigs,function(config){_this.on(_this.$(config.selector),'change',_this.updateDisplay);});if(_this.options_.persistTextTrackSettings){_this.restoreSettings();}return _this;}var _proto=TextTrackSettings.prototype;_proto.dispose=function dispose(){this.endDialog=null;_ModalDialog.prototype.dispose.call(this);}/**\n * Create a <select> element with configured options.\n *\n * @param {string} key\n * Configuration key to use during creation.\n *\n * @return {string}\n * An HTML string.\n *\n * @private\n */;_proto.createElSelect_=function createElSelect_(key,legendId,type){var _this2=this;if(legendId===void 0){legendId='';}if(type===void 0){type='label';}var config=selectConfigs[key];var id=config.id.replace('%s',this.id_);var selectLabelledbyIds=[legendId,id].join(' ').trim();return[\"<\"+type+\" id=\\\"\"+id+\"\\\" class=\\\"\"+(type==='label'?'vjs-label':'')+\"\\\">\",this.localize(config.label),\"</\"+type+\">\",\"<select aria-labelledby=\\\"\"+selectLabelledbyIds+\"\\\">\"].concat(config.options.map(function(o){var optionId=id+'-'+o[1].replace(/\\W+/g,'');return[\"<option id=\\\"\"+optionId+\"\\\" value=\\\"\"+o[0]+\"\\\" \",\"aria-labelledby=\\\"\"+selectLabelledbyIds+\" \"+optionId+\"\\\">\",_this2.localize(o[1]),'</option>'].join('');})).concat('</select>').join('');}/**\n * Create foreground color element for the component\n *\n * @return {string}\n * An HTML string.\n *\n * @private\n */;_proto.createElFgColor_=function createElFgColor_(){var legendId=\"captions-text-legend-\"+this.id_;return['<fieldset class=\"vjs-fg-color vjs-track-setting\">',\"<legend id=\\\"\"+legendId+\"\\\">\",this.localize('Text'),'</legend>',this.createElSelect_('color',legendId),'<span class=\"vjs-text-opacity vjs-opacity\">',this.createElSelect_('textOpacity',legendId),'</span>','</fieldset>'].join('');}/**\n * Create background color element for the component\n *\n * @return {string}\n * An HTML string.\n *\n * @private\n */;_proto.createElBgColor_=function createElBgColor_(){var legendId=\"captions-background-\"+this.id_;return['<fieldset class=\"vjs-bg-color vjs-track-setting\">',\"<legend id=\\\"\"+legendId+\"\\\">\",this.localize('Background'),'</legend>',this.createElSelect_('backgroundColor',legendId),'<span class=\"vjs-bg-opacity vjs-opacity\">',this.createElSelect_('backgroundOpacity',legendId),'</span>','</fieldset>'].join('');}/**\n * Create window color element for the component\n *\n * @return {string}\n * An HTML string.\n *\n * @private\n */;_proto.createElWinColor_=function createElWinColor_(){var legendId=\"captions-window-\"+this.id_;return['<fieldset class=\"vjs-window-color vjs-track-setting\">',\"<legend id=\\\"\"+legendId+\"\\\">\",this.localize('Window'),'</legend>',this.createElSelect_('windowColor',legendId),'<span class=\"vjs-window-opacity vjs-opacity\">',this.createElSelect_('windowOpacity',legendId),'</span>','</fieldset>'].join('');}/**\n * Create color elements for the component\n *\n * @return {Element}\n * The element that was created\n *\n * @private\n */;_proto.createElColors_=function createElColors_(){return createEl('div',{className:'vjs-track-settings-colors',innerHTML:[this.createElFgColor_(),this.createElBgColor_(),this.createElWinColor_()].join('')});}/**\n * Create font elements for the component\n *\n * @return {Element}\n * The element that was created.\n *\n * @private\n */;_proto.createElFont_=function createElFont_(){return createEl('div',{className:'vjs-track-settings-font',innerHTML:['<fieldset class=\"vjs-font-percent vjs-track-setting\">',this.createElSelect_('fontPercent','','legend'),'</fieldset>','<fieldset class=\"vjs-edge-style vjs-track-setting\">',this.createElSelect_('edgeStyle','','legend'),'</fieldset>','<fieldset class=\"vjs-font-family vjs-track-setting\">',this.createElSelect_('fontFamily','','legend'),'</fieldset>'].join('')});}/**\n * Create controls for the component\n *\n * @return {Element}\n * The element that was created.\n *\n * @private\n */;_proto.createElControls_=function createElControls_(){var defaultsDescription=this.localize('restore all settings to the default values');return createEl('div',{className:'vjs-track-settings-controls',innerHTML:[\"<button type=\\\"button\\\" class=\\\"vjs-default-button\\\" title=\\\"\"+defaultsDescription+\"\\\">\",this.localize('Reset'),\"<span class=\\\"vjs-control-text\\\"> \"+defaultsDescription+\"</span>\",'</button>',\"<button type=\\\"button\\\" class=\\\"vjs-done-button\\\">\"+this.localize('Done')+\"</button>\"].join('')});};_proto.content=function content(){return[this.createElColors_(),this.createElFont_(),this.createElControls_()];};_proto.label=function label(){return this.localize('Caption Settings Dialog');};_proto.description=function description(){return this.localize('Beginning of dialog window. Escape will cancel and close the window.');};_proto.buildCSSClass=function buildCSSClass(){return _ModalDialog.prototype.buildCSSClass.call(this)+' vjs-text-track-settings';}/**\n * Gets an object of text track settings (or null).\n *\n * @return {Object}\n * An object with config values parsed from the DOM or localStorage.\n */;_proto.getValues=function getValues(){var _this3=this;return reduce(selectConfigs,function(accum,config,key){var value=getSelectedOptionValue(_this3.$(config.selector),config.parser);if(value!==undefined){accum[key]=value;}return accum;},{});}/**\n * Sets text track settings from an object of values.\n *\n * @param {Object} values\n * An object with config values parsed from the DOM or localStorage.\n */;_proto.setValues=function setValues(values){var _this4=this;each(selectConfigs,function(config,key){setSelectedOption(_this4.$(config.selector),values[key],config.parser);});}/**\n * Sets all `<select>` elements to their default values.\n */;_proto.setDefaults=function setDefaults(){var _this5=this;each(selectConfigs,function(config){var index=config.hasOwnProperty('default')?config[\"default\"]:0;_this5.$(config.selector).selectedIndex=index;});}/**\n * Restore texttrack settings from localStorage\n */;_proto.restoreSettings=function restoreSettings(){var values;try{values=JSON.parse(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.localStorage.getItem(LOCAL_STORAGE_KEY));}catch(err){log.warn(err);}if(values){this.setValues(values);}}/**\n * Save text track settings to localStorage\n */;_proto.saveSettings=function saveSettings(){if(!this.options_.persistTextTrackSettings){return;}var values=this.getValues();try{if(Object.keys(values).length){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.localStorage.setItem(LOCAL_STORAGE_KEY,JSON.stringify(values));}else{global_window__WEBPACK_IMPORTED_MODULE_0___default.a.localStorage.removeItem(LOCAL_STORAGE_KEY);}}catch(err){log.warn(err);}}/**\n * Update display of text track settings\n */;_proto.updateDisplay=function updateDisplay(){var ttDisplay=this.player_.getChild('textTrackDisplay');if(ttDisplay){ttDisplay.updateDisplay();}}/**\n * conditionally blur the element and refocus the captions button\n *\n * @private\n */;_proto.conditionalBlur_=function conditionalBlur_(){this.previouslyActiveEl_=null;var cb=this.player_.controlBar;var subsCapsBtn=cb&&cb.subsCapsButton;var ccBtn=cb&&cb.captionsButton;if(subsCapsBtn){subsCapsBtn.focus();}else if(ccBtn){ccBtn.focus();}};return TextTrackSettings;}(ModalDialog);Component.registerComponent('TextTrackSettings',TextTrackSettings);/**\n * A Resize Manager. It is in charge of triggering `playerresize` on the player in the right conditions.\n *\n * It'll either create an iframe and use a debounced resize handler on it or use the new {@link https://wicg.github.io/ResizeObserver/|ResizeObserver}.\n *\n * If the ResizeObserver is available natively, it will be used. A polyfill can be passed in as an option.\n * If a `playerresize` event is not needed, the ResizeManager component can be removed from the player, see the example below.\n * @example <caption>How to disable the resize manager</caption>\n * const player = videojs('#vid', {\n * resizeManager: false\n * });\n *\n * @see {@link https://wicg.github.io/ResizeObserver/|ResizeObserver specification}\n *\n * @extends Component\n */var ResizeManager=/*#__PURE__*/function(_Component){_inheritsLoose(ResizeManager,_Component);/**\n * Create the ResizeManager.\n *\n * @param {Object} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of ResizeManager options.\n *\n * @param {Object} [options.ResizeObserver]\n * A polyfill for ResizeObserver can be passed in here.\n * If this is set to null it will ignore the native ResizeObserver and fall back to the iframe fallback.\n */function ResizeManager(player,options){var _this;var RESIZE_OBSERVER_AVAILABLE=options.ResizeObserver||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.ResizeObserver;// if `null` was passed, we want to disable the ResizeObserver\nif(options.ResizeObserver===null){RESIZE_OBSERVER_AVAILABLE=false;}// Only create an element when ResizeObserver isn't available\nvar options_=mergeOptions({createEl:!RESIZE_OBSERVER_AVAILABLE,reportTouchActivity:false},options);_this=_Component.call(this,player,options_)||this;_this.ResizeObserver=options.ResizeObserver||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.ResizeObserver;_this.loadListener_=null;_this.resizeObserver_=null;_this.debouncedHandler_=debounce(function(){_this.resizeHandler();},100,false,_assertThisInitialized(_this));if(RESIZE_OBSERVER_AVAILABLE){_this.resizeObserver_=new _this.ResizeObserver(_this.debouncedHandler_);_this.resizeObserver_.observe(player.el());}else{_this.loadListener_=function(){if(!_this.el_||!_this.el_.contentWindow){return;}var debouncedHandler_=_this.debouncedHandler_;var unloadListener_=_this.unloadListener_=function(){off(this,'resize',debouncedHandler_);off(this,'unload',unloadListener_);unloadListener_=null;};// safari and edge can unload the iframe before resizemanager dispose\n// we have to dispose of event handlers correctly before that happens\non(_this.el_.contentWindow,'unload',unloadListener_);on(_this.el_.contentWindow,'resize',debouncedHandler_);};_this.one('load',_this.loadListener_);}return _this;}var _proto=ResizeManager.prototype;_proto.createEl=function createEl(){return _Component.prototype.createEl.call(this,'iframe',{className:'vjs-resize-manager',tabIndex:-1},{'aria-hidden':'true'});}/**\n * Called when a resize is triggered on the iframe or a resize is observed via the ResizeObserver\n *\n * @fires Player#playerresize\n */;_proto.resizeHandler=function resizeHandler(){/**\n * Called when the player size has changed\n *\n * @event Player#playerresize\n * @type {EventTarget~Event}\n */ // make sure player is still around to trigger\n// prevents this from causing an error after dispose\nif(!this.player_||!this.player_.trigger){return;}this.player_.trigger('playerresize');};_proto.dispose=function dispose(){if(this.debouncedHandler_){this.debouncedHandler_.cancel();}if(this.resizeObserver_){if(this.player_.el()){this.resizeObserver_.unobserve(this.player_.el());}this.resizeObserver_.disconnect();}if(this.loadListener_){this.off('load',this.loadListener_);}if(this.el_&&this.el_.contentWindow&&this.unloadListener_){this.unloadListener_.call(this.el_.contentWindow);}this.ResizeObserver=null;this.resizeObserver=null;this.debouncedHandler_=null;this.loadListener_=null;_Component.prototype.dispose.call(this);};return ResizeManager;}(Component);Component.registerComponent('ResizeManager',ResizeManager);/**\n * Computes the median of an array.\n *\n * @param {number[]} arr\n * Input array of numbers.\n *\n * @return {number}\n * Median value.\n */var median=function median(arr){var mid=Math.floor(arr.length/2);var sortedList=[].concat(arr).sort(function(a,b){return a-b;});return arr.length%2!==0?sortedList[mid]:(sortedList[mid-1]+sortedList[mid])/2;};/* track when we are at the live edge, and other helpers for live playback */var LiveTracker=/*#__PURE__*/function(_Component){_inheritsLoose(LiveTracker,_Component);function LiveTracker(player,options){var _this;// LiveTracker does not need an element\nvar options_=mergeOptions({createEl:false},options);_this=_Component.call(this,player,options_)||this;_this.reset_();_this.on(_this.player_,'durationchange',_this.handleDurationchange);// we don't need to track live playback if the document is hidden,\n// also, tracking when the document is hidden can\n// cause the CPU to spike and eventually crash the page on IE11.\nif(IE_VERSION&&'hidden'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a&&'visibilityState'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){_this.on(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'visibilitychange',_this.handleVisibilityChange);}return _this;}var _proto=LiveTracker.prototype;_proto.handleVisibilityChange=function handleVisibilityChange(){if(this.player_.duration()!==Infinity){return;}if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.hidden){this.stopTracking();}else{this.startTracking();}};_proto.isBehind_=function isBehind_(){// don't report that we are behind until a timeupdate has been seen\nif(!this.timeupdateSeen_){return false;}var liveCurrentTime=this.liveCurrentTime();var currentTime=this.player_.currentTime();// the live edge window is the amount of seconds away from live\n// that a player can be, but still be considered live.\n// we add 0.07 because the live tracking happens every 30ms\n// and we want some wiggle room for short segment live playback\nvar liveEdgeWindow=this.seekableIncrement_*2+0.07;// on Android liveCurrentTime can bee Infinity, because seekableEnd\n// can be Infinity, so we handle that case.\nreturn liveCurrentTime!==Infinity&&liveCurrentTime-liveEdgeWindow>=currentTime;}// all the functionality for tracking when seek end changes\n// and for tracking how far past seek end we should be\n;_proto.trackLive_=function trackLive_(){this.pastSeekEnd_=this.pastSeekEnd_;var seekable=this.player_.seekable();// skip undefined seekable\nif(!seekable||!seekable.length){return;}var newSeekEnd=this.seekableEnd();// we can only tell if we are behind live, when seekable changes\n// once we detect that seekable has changed we check the new seek\n// end against current time, with a fudge value of half a second.\nif(newSeekEnd!==this.lastSeekEnd_){if(this.lastSeekEnd_){// we try to get the best fit value for the seeking increment\n// variable from the last 12 values.\nthis.seekableIncrementList_=this.seekableIncrementList_.slice(-11);this.seekableIncrementList_.push(Math.abs(newSeekEnd-this.lastSeekEnd_));if(this.seekableIncrementList_.length>3){this.seekableIncrement_=median(this.seekableIncrementList_);}}this.pastSeekEnd_=0;this.lastSeekEnd_=newSeekEnd;this.trigger('seekableendchange');}this.pastSeekEnd_=this.pastSeekEnd()+0.03;if(this.isBehind_()!==this.behindLiveEdge()){this.behindLiveEdge_=this.isBehind_();this.trigger('liveedgechange');}}/**\n * handle a durationchange event on the player\n * and start/stop tracking accordingly.\n */;_proto.handleDurationchange=function handleDurationchange(){if(this.player_.duration()===Infinity){this.startTracking();}else{this.stopTracking();}}/**\n * start tracking live playback\n */;_proto.startTracking=function startTracking(){var _this2=this;if(this.isTracking()){return;}// If we haven't seen a timeupdate, we need to check whether playback\n// began before this component started tracking. This can happen commonly\n// when using autoplay.\nif(!this.timeupdateSeen_){this.timeupdateSeen_=this.player_.hasStarted();}this.trackingInterval_=this.setInterval(this.trackLive_,30);this.trackLive_();this.on(this.player_,'play',this.trackLive_);this.on(this.player_,'pause',this.trackLive_);// this is to prevent showing that we are not live\n// before a video starts to play\nif(!this.timeupdateSeen_){this.one(this.player_,'play',this.handlePlay);this.handleTimeupdate=function(){_this2.timeupdateSeen_=true;_this2.handleTimeupdate=null;};this.one(this.player_,'timeupdate',this.handleTimeupdate);}};_proto.handlePlay=function handlePlay(){this.one(this.player_,'timeupdate',this.seekToLiveEdge);}/**\n * Stop tracking, and set all internal variables to\n * their initial value.\n */;_proto.reset_=function reset_(){this.pastSeekEnd_=0;this.lastSeekEnd_=null;this.behindLiveEdge_=null;this.timeupdateSeen_=false;this.clearInterval(this.trackingInterval_);this.trackingInterval_=null;this.seekableIncrement_=12;this.seekableIncrementList_=[];this.off(this.player_,'play',this.trackLive_);this.off(this.player_,'pause',this.trackLive_);this.off(this.player_,'play',this.handlePlay);this.off(this.player_,'timeupdate',this.seekToLiveEdge);if(this.handleTimeupdate){this.off(this.player_,'timeupdate',this.handleTimeupdate);this.handleTimeupdate=null;}}/**\n * stop tracking live playback\n */;_proto.stopTracking=function stopTracking(){if(!this.isTracking()){return;}this.reset_();}/**\n * A helper to get the player seekable end\n * so that we don't have to null check everywhere\n */;_proto.seekableEnd=function seekableEnd(){var seekable=this.player_.seekable();var seekableEnds=[];var i=seekable?seekable.length:0;while(i--){seekableEnds.push(seekable.end(i));}// grab the furthest seekable end after sorting, or if there are none\n// default to Infinity\nreturn seekableEnds.length?seekableEnds.sort()[seekableEnds.length-1]:Infinity;}/**\n * A helper to get the player seekable start\n * so that we don't have to null check everywhere\n */;_proto.seekableStart=function seekableStart(){var seekable=this.player_.seekable();var seekableStarts=[];var i=seekable?seekable.length:0;while(i--){seekableStarts.push(seekable.start(i));}// grab the first seekable start after sorting, or if there are none\n// default to 0\nreturn seekableStarts.length?seekableStarts.sort()[0]:0;}/**\n * Get the live time window\n */;_proto.liveWindow=function liveWindow(){var liveCurrentTime=this.liveCurrentTime();if(liveCurrentTime===Infinity){return Infinity;}return liveCurrentTime-this.seekableStart();}/**\n * Determines if the player is live, only checks if this component\n * is tracking live playback or not\n */;_proto.isLive=function isLive(){return this.isTracking();}/**\n * Determines if currentTime is at the live edge and won't fall behind\n * on each seekableendchange\n */;_proto.atLiveEdge=function atLiveEdge(){return!this.behindLiveEdge();}/**\n * get what we expect the live current time to be\n */;_proto.liveCurrentTime=function liveCurrentTime(){return this.pastSeekEnd()+this.seekableEnd();}/**\n * Returns how far past seek end we expect current time to be\n */;_proto.pastSeekEnd=function pastSeekEnd(){return this.pastSeekEnd_;}/**\n * If we are currently behind the live edge, aka currentTime will be\n * behind on a seekableendchange\n */;_proto.behindLiveEdge=function behindLiveEdge(){return this.behindLiveEdge_;};_proto.isTracking=function isTracking(){return typeof this.trackingInterval_==='number';}/**\n * Seek to the live edge if we are behind the live edge\n */;_proto.seekToLiveEdge=function seekToLiveEdge(){if(this.atLiveEdge()){return;}this.player_.currentTime(this.liveCurrentTime());if(this.player_.paused()){this.player_.play();}};_proto.dispose=function dispose(){this.stopTracking();_Component.prototype.dispose.call(this);};return LiveTracker;}(Component);Component.registerComponent('LiveTracker',LiveTracker);/**\n * This function is used to fire a sourceset when there is something\n * similar to `mediaEl.load()` being called. It will try to find the source via\n * the `src` attribute and then the `<source>` elements. It will then fire `sourceset`\n * with the source that was found or empty string if we cannot know. If it cannot\n * find a source then `sourceset` will not be fired.\n *\n * @param {Html5} tech\n * The tech object that sourceset was setup on\n *\n * @return {boolean}\n * returns false if the sourceset was not fired and true otherwise.\n */var sourcesetLoad=function sourcesetLoad(tech){var el=tech.el();// if `el.src` is set, that source will be loaded.\nif(el.hasAttribute('src')){tech.triggerSourceset(el.src);return true;}/**\n * Since there isn't a src property on the media element, source elements will be used for\n * implementing the source selection algorithm. This happens asynchronously and\n * for most cases were there is more than one source we cannot tell what source will\n * be loaded, without re-implementing the source selection algorithm. At this time we are not\n * going to do that. There are three special cases that we do handle here though:\n *\n * 1. If there are no sources, do not fire `sourceset`.\n * 2. If there is only one `<source>` with a `src` property/attribute that is our `src`\n * 3. If there is more than one `<source>` but all of them have the same `src` url.\n * That will be our src.\n */var sources=tech.$$('source');var srcUrls=[];var src='';// if there are no sources, do not fire sourceset\nif(!sources.length){return false;}// only count valid/non-duplicate source elements\nfor(var i=0;i<sources.length;i++){var url=sources[i].src;if(url&&srcUrls.indexOf(url)===-1){srcUrls.push(url);}}// there were no valid sources\nif(!srcUrls.length){return false;}// there is only one valid source element url\n// use that\nif(srcUrls.length===1){src=srcUrls[0];}tech.triggerSourceset(src);return true;};/**\n * our implementation of an `innerHTML` descriptor for browsers\n * that do not have one.\n */var innerHTMLDescriptorPolyfill=Object.defineProperty({},'innerHTML',{get:function get(){return this.cloneNode(true).innerHTML;},set:function set(v){// make a dummy node to use innerHTML on\nvar dummy=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(this.nodeName.toLowerCase());// set innerHTML to the value provided\ndummy.innerHTML=v;// make a document fragment to hold the nodes from dummy\nvar docFrag=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createDocumentFragment();// copy all of the nodes created by the innerHTML on dummy\n// to the document fragment\nwhile(dummy.childNodes.length){docFrag.appendChild(dummy.childNodes[0]);}// remove content\nthis.innerText='';// now we add all of that html in one by appending the\n// document fragment. This is how innerHTML does it.\nglobal_window__WEBPACK_IMPORTED_MODULE_0___default.a.Element.prototype.appendChild.call(this,docFrag);// then return the result that innerHTML's setter would\nreturn this.innerHTML;}});/**\n * Get a property descriptor given a list of priorities and the\n * property to get.\n */var getDescriptor=function getDescriptor(priority,prop){var descriptor={};for(var i=0;i<priority.length;i++){descriptor=Object.getOwnPropertyDescriptor(priority[i],prop);if(descriptor&&descriptor.set&&descriptor.get){break;}}descriptor.enumerable=true;descriptor.configurable=true;return descriptor;};var getInnerHTMLDescriptor=function getInnerHTMLDescriptor(tech){return getDescriptor([tech.el(),global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLMediaElement.prototype,global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Element.prototype,innerHTMLDescriptorPolyfill],'innerHTML');};/**\n * Patches browser internal functions so that we can tell synchronously\n * if a `<source>` was appended to the media element. For some reason this\n * causes a `sourceset` if the the media element is ready and has no source.\n * This happens when:\n * - The page has just loaded and the media element does not have a source.\n * - The media element was emptied of all sources, then `load()` was called.\n *\n * It does this by patching the following functions/properties when they are supported:\n *\n * - `append()` - can be used to add a `<source>` element to the media element\n * - `appendChild()` - can be used to add a `<source>` element to the media element\n * - `insertAdjacentHTML()` - can be used to add a `<source>` element to the media element\n * - `innerHTML` - can be used to add a `<source>` element to the media element\n *\n * @param {Html5} tech\n * The tech object that sourceset is being setup on.\n */var firstSourceWatch=function firstSourceWatch(tech){var el=tech.el();// make sure firstSourceWatch isn't setup twice.\nif(el.resetSourceWatch_){return;}var old={};var innerDescriptor=getInnerHTMLDescriptor(tech);var appendWrapper=function appendWrapper(appendFn){return function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var retval=appendFn.apply(el,args);sourcesetLoad(tech);return retval;};};['append','appendChild','insertAdjacentHTML'].forEach(function(k){if(!el[k]){return;}// store the old function\nold[k]=el[k];// call the old function with a sourceset if a source\n// was loaded\nel[k]=appendWrapper(old[k]);});Object.defineProperty(el,'innerHTML',mergeOptions(innerDescriptor,{set:appendWrapper(innerDescriptor.set)}));el.resetSourceWatch_=function(){el.resetSourceWatch_=null;Object.keys(old).forEach(function(k){el[k]=old[k];});Object.defineProperty(el,'innerHTML',innerDescriptor);};// on the first sourceset, we need to revert our changes\ntech.one('sourceset',el.resetSourceWatch_);};/**\n * our implementation of a `src` descriptor for browsers\n * that do not have one.\n */var srcDescriptorPolyfill=Object.defineProperty({},'src',{get:function get(){if(this.hasAttribute('src')){return getAbsoluteURL(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Element.prototype.getAttribute.call(this,'src'));}return'';},set:function set(v){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Element.prototype.setAttribute.call(this,'src',v);return v;}});var getSrcDescriptor=function getSrcDescriptor(tech){return getDescriptor([tech.el(),global_window__WEBPACK_IMPORTED_MODULE_0___default.a.HTMLMediaElement.prototype,srcDescriptorPolyfill],'src');};/**\n * setup `sourceset` handling on the `Html5` tech. This function\n * patches the following element properties/functions:\n *\n * - `src` - to determine when `src` is set\n * - `setAttribute()` - to determine when `src` is set\n * - `load()` - this re-triggers the source selection algorithm, and can\n * cause a sourceset.\n *\n * If there is no source when we are adding `sourceset` support or during a `load()`\n * we also patch the functions listed in `firstSourceWatch`.\n *\n * @param {Html5} tech\n * The tech to patch\n */var setupSourceset=function setupSourceset(tech){if(!tech.featuresSourceset){return;}var el=tech.el();// make sure sourceset isn't setup twice.\nif(el.resetSourceset_){return;}var srcDescriptor=getSrcDescriptor(tech);var oldSetAttribute=el.setAttribute;var oldLoad=el.load;Object.defineProperty(el,'src',mergeOptions(srcDescriptor,{set:function set(v){var retval=srcDescriptor.set.call(el,v);// we use the getter here to get the actual value set on src\ntech.triggerSourceset(el.src);return retval;}}));el.setAttribute=function(n,v){var retval=oldSetAttribute.call(el,n,v);if(/src/i.test(n)){tech.triggerSourceset(el.src);}return retval;};el.load=function(){var retval=oldLoad.call(el);// if load was called, but there was no source to fire\n// sourceset on. We have to watch for a source append\n// as that can trigger a `sourceset` when the media element\n// has no source\nif(!sourcesetLoad(tech)){tech.triggerSourceset('');firstSourceWatch(tech);}return retval;};if(el.currentSrc){tech.triggerSourceset(el.currentSrc);}else if(!sourcesetLoad(tech)){firstSourceWatch(tech);}el.resetSourceset_=function(){el.resetSourceset_=null;el.load=oldLoad;el.setAttribute=oldSetAttribute;Object.defineProperty(el,'src',srcDescriptor);if(el.resetSourceWatch_){el.resetSourceWatch_();}};};/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @mixes Tech~SourceHandlerAdditions\n * @extends Tech\n */var Html5=/*#__PURE__*/function(_Tech){_inheritsLoose(Html5,_Tech);/**\n * Create an instance of this Tech.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} ready\n * Callback function to call when the `HTML5` Tech is ready.\n */function Html5(options,ready){var _this;_this=_Tech.call(this,options,ready)||this;var source=options.source;var crossoriginTracks=false;// Set the source if one is provided\n// 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n// 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n// anyway so the error gets fired.\nif(source&&(_this.el_.currentSrc!==source.src||options.tag&&options.tag.initNetworkState_===3)){_this.setSource(source);}else{_this.handleLateInit_(_this.el_);}// setup sourceset after late sourceset/init\nif(options.enableSourceset){_this.setupSourcesetHandling_();}if(_this.el_.hasChildNodes()){var nodes=_this.el_.childNodes;var nodesLength=nodes.length;var removeNodes=[];while(nodesLength--){var node=nodes[nodesLength];var nodeName=node.nodeName.toLowerCase();if(nodeName==='track'){if(!_this.featuresNativeTextTracks){// Empty video tag tracks so the built-in player doesn't use them also.\n// This may not be fast enough to stop HTML5 browsers from reading the tags\n// so we'll need to turn off any default tracks if we're manually doing\n// captions and subtitles. videoElement.textTracks\nremoveNodes.push(node);}else{// store HTMLTrackElement and TextTrack to remote list\n_this.remoteTextTrackEls().addTrackElement_(node);_this.remoteTextTracks().addTrack(node.track);_this.textTracks().addTrack(node.track);if(!crossoriginTracks&&!_this.el_.hasAttribute('crossorigin')&&isCrossOrigin(node.src)){crossoriginTracks=true;}}}}for(var i=0;i<removeNodes.length;i++){_this.el_.removeChild(removeNodes[i]);}}_this.proxyNativeTracks_();if(_this.featuresNativeTextTracks&&crossoriginTracks){log.warn('Text Tracks are being loaded from another origin but the crossorigin attribute isn\\'t used.\\n'+'This may prevent text tracks from loading.');}// prevent iOS Safari from disabling metadata text tracks during native playback\n_this.restoreMetadataTracksInIOSNativePlayer_();// Determine if native controls should be used\n// Our goal should be to get the custom controls on mobile solid everywhere\n// so we can remove this all together. Right now this will block custom\n// controls on touch enabled laptops like the Chrome Pixel\nif((TOUCH_ENABLED||IS_IPHONE||IS_NATIVE_ANDROID)&&options.nativeControlsForTouch===true){_this.setControls(true);}// on iOS, we want to proxy `webkitbeginfullscreen` and `webkitendfullscreen`\n// into a `fullscreenchange` event\n_this.proxyWebkitFullscreen_();_this.triggerReady();return _this;}/**\n * Dispose of `HTML5` media element and remove all tracks.\n */var _proto=Html5.prototype;_proto.dispose=function dispose(){if(this.el_&&this.el_.resetSourceset_){this.el_.resetSourceset_();}Html5.disposeMediaElement(this.el_);this.options_=null;// tech will handle clearing of the emulated track list\n_Tech.prototype.dispose.call(this);}/**\n * Modify the media element so that we can detect when\n * the source is changed. Fires `sourceset` just after the source has changed\n */;_proto.setupSourcesetHandling_=function setupSourcesetHandling_(){setupSourceset(this);}/**\n * When a captions track is enabled in the iOS Safari native player, all other\n * tracks are disabled (including metadata tracks), which nulls all of their\n * associated cue points. This will restore metadata tracks to their pre-fullscreen\n * state in those cases so that cue points are not needlessly lost.\n *\n * @private\n */;_proto.restoreMetadataTracksInIOSNativePlayer_=function restoreMetadataTracksInIOSNativePlayer_(){var textTracks=this.textTracks();var metadataTracksPreFullscreenState;// captures a snapshot of every metadata track's current state\nvar takeMetadataTrackSnapshot=function takeMetadataTrackSnapshot(){metadataTracksPreFullscreenState=[];for(var i=0;i<textTracks.length;i++){var track=textTracks[i];if(track.kind==='metadata'){metadataTracksPreFullscreenState.push({track:track,storedMode:track.mode});}}};// snapshot each metadata track's initial state, and update the snapshot\n// each time there is a track 'change' event\ntakeMetadataTrackSnapshot();textTracks.addEventListener('change',takeMetadataTrackSnapshot);this.on('dispose',function(){return textTracks.removeEventListener('change',takeMetadataTrackSnapshot);});var restoreTrackMode=function restoreTrackMode(){for(var i=0;i<metadataTracksPreFullscreenState.length;i++){var storedTrack=metadataTracksPreFullscreenState[i];if(storedTrack.track.mode==='disabled'&&storedTrack.track.mode!==storedTrack.storedMode){storedTrack.track.mode=storedTrack.storedMode;}}// we only want this handler to be executed on the first 'change' event\ntextTracks.removeEventListener('change',restoreTrackMode);};// when we enter fullscreen playback, stop updating the snapshot and\n// restore all track modes to their pre-fullscreen state\nthis.on('webkitbeginfullscreen',function(){textTracks.removeEventListener('change',takeMetadataTrackSnapshot);// remove the listener before adding it just in case it wasn't previously removed\ntextTracks.removeEventListener('change',restoreTrackMode);textTracks.addEventListener('change',restoreTrackMode);});// start updating the snapshot again after leaving fullscreen\nthis.on('webkitendfullscreen',function(){// remove the listener before adding it just in case it wasn't previously removed\ntextTracks.removeEventListener('change',takeMetadataTrackSnapshot);textTracks.addEventListener('change',takeMetadataTrackSnapshot);// remove the restoreTrackMode handler in case it wasn't triggered during fullscreen playback\ntextTracks.removeEventListener('change',restoreTrackMode);});}/**\n * Attempt to force override of tracks for the given type\n *\n * @param {string} type - Track type to override, possible values include 'Audio',\n * 'Video', and 'Text'.\n * @param {boolean} override - If set to true native audio/video will be overridden,\n * otherwise native audio/video will potentially be used.\n * @private\n */;_proto.overrideNative_=function overrideNative_(type,override){var _this2=this;// If there is no behavioral change don't add/remove listeners\nif(override!==this[\"featuresNative\"+type+\"Tracks\"]){return;}var lowerCaseType=type.toLowerCase();if(this[lowerCaseType+\"TracksListeners_\"]){Object.keys(this[lowerCaseType+\"TracksListeners_\"]).forEach(function(eventName){var elTracks=_this2.el()[lowerCaseType+\"Tracks\"];elTracks.removeEventListener(eventName,_this2[lowerCaseType+\"TracksListeners_\"][eventName]);});}this[\"featuresNative\"+type+\"Tracks\"]=!override;this[lowerCaseType+\"TracksListeners_\"]=null;this.proxyNativeTracksForType_(lowerCaseType);}/**\n * Attempt to force override of native audio tracks.\n *\n * @param {boolean} override - If set to true native audio will be overridden,\n * otherwise native audio will potentially be used.\n */;_proto.overrideNativeAudioTracks=function overrideNativeAudioTracks(override){this.overrideNative_('Audio',override);}/**\n * Attempt to force override of native video tracks.\n *\n * @param {boolean} override - If set to true native video will be overridden,\n * otherwise native video will potentially be used.\n */;_proto.overrideNativeVideoTracks=function overrideNativeVideoTracks(override){this.overrideNative_('Video',override);}/**\n * Proxy native track list events for the given type to our track\n * lists if the browser we are playing in supports that type of track list.\n *\n * @param {string} name - Track type; values include 'audio', 'video', and 'text'\n * @private\n */;_proto.proxyNativeTracksForType_=function proxyNativeTracksForType_(name){var _this3=this;var props=NORMAL[name];var elTracks=this.el()[props.getterName];var techTracks=this[props.getterName]();if(!this[\"featuresNative\"+props.capitalName+\"Tracks\"]||!elTracks||!elTracks.addEventListener){return;}var listeners={change:function change(e){techTracks.trigger({type:'change',target:techTracks,currentTarget:techTracks,srcElement:techTracks});},addtrack:function addtrack(e){techTracks.addTrack(e.track);},removetrack:function removetrack(e){techTracks.removeTrack(e.track);}};var removeOldTracks=function removeOldTracks(){var removeTracks=[];for(var i=0;i<techTracks.length;i++){var found=false;for(var j=0;j<elTracks.length;j++){if(elTracks[j]===techTracks[i]){found=true;break;}}if(!found){removeTracks.push(techTracks[i]);}}while(removeTracks.length){techTracks.removeTrack(removeTracks.shift());}};this[props.getterName+'Listeners_']=listeners;Object.keys(listeners).forEach(function(eventName){var listener=listeners[eventName];elTracks.addEventListener(eventName,listener);_this3.on('dispose',function(e){return elTracks.removeEventListener(eventName,listener);});});// Remove (native) tracks that are not used anymore\nthis.on('loadstart',removeOldTracks);this.on('dispose',function(e){return _this3.off('loadstart',removeOldTracks);});}/**\n * Proxy all native track list events to our track lists if the browser we are playing\n * in supports that type of track list.\n *\n * @private\n */;_proto.proxyNativeTracks_=function proxyNativeTracks_(){var _this4=this;NORMAL.names.forEach(function(name){_this4.proxyNativeTracksForType_(name);});}/**\n * Create the `Html5` Tech's DOM element.\n *\n * @return {Element}\n * The element that gets created.\n */;_proto.createEl=function createEl(){var el=this.options_.tag;// Check if this browser supports moving the element into the box.\n// On the iPhone video will break if you move the element,\n// So we have to create a brand new element.\n// If we ingested the player div, we do not need to move the media element.\nif(!el||!(this.options_.playerElIngest||this.movingMediaElementInDOM)){// If the original tag is still there, clone and remove it.\nif(el){var clone=el.cloneNode(true);if(el.parentNode){el.parentNode.insertBefore(clone,el);}Html5.disposeMediaElement(el);el=clone;}else{el=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video');// determine if native controls should be used\nvar tagAttributes=this.options_.tag&&getAttributes(this.options_.tag);var attributes=mergeOptions({},tagAttributes);if(!TOUCH_ENABLED||this.options_.nativeControlsForTouch!==true){delete attributes.controls;}setAttributes(el,assign(attributes,{id:this.options_.techId,\"class\":'vjs-tech'}));}el.playerId=this.options_.playerId;}if(typeof this.options_.preload!=='undefined'){setAttribute(el,'preload',this.options_.preload);}// Update specific tag settings, in case they were overridden\n// `autoplay` has to be *last* so that `muted` and `playsinline` are present\n// when iOS/Safari or other browsers attempt to autoplay.\nvar settingsAttrs=['loop','muted','playsinline','autoplay'];for(var i=0;i<settingsAttrs.length;i++){var attr=settingsAttrs[i];var value=this.options_[attr];if(typeof value!=='undefined'){if(value){setAttribute(el,attr,attr);}else{removeAttribute(el,attr);}el[attr]=value;}}return el;}/**\n * This will be triggered if the loadstart event has already fired, before videojs was\n * ready. Two known examples of when this can happen are:\n * 1. If we're loading the playback object after it has started loading\n * 2. The media is already playing the (often with autoplay on) then\n *\n * This function will fire another loadstart so that videojs can catchup.\n *\n * @fires Tech#loadstart\n *\n * @return {undefined}\n * returns nothing.\n */;_proto.handleLateInit_=function handleLateInit_(el){if(el.networkState===0||el.networkState===3){// The video element hasn't started loading the source yet\n// or didn't find a source\nreturn;}if(el.readyState===0){// NetworkState is set synchronously BUT loadstart is fired at the\n// end of the current stack, usually before setInterval(fn, 0).\n// So at this point we know loadstart may have already fired or is\n// about to fire, and either way the player hasn't seen it yet.\n// We don't want to fire loadstart prematurely here and cause a\n// double loadstart so we'll wait and see if it happens between now\n// and the next loop, and fire it if not.\n// HOWEVER, we also want to make sure it fires before loadedmetadata\n// which could also happen between now and the next loop, so we'll\n// watch for that also.\nvar loadstartFired=false;var setLoadstartFired=function setLoadstartFired(){loadstartFired=true;};this.on('loadstart',setLoadstartFired);var triggerLoadstart=function triggerLoadstart(){// We did miss the original loadstart. Make sure the player\n// sees loadstart before loadedmetadata\nif(!loadstartFired){this.trigger('loadstart');}};this.on('loadedmetadata',triggerLoadstart);this.ready(function(){this.off('loadstart',setLoadstartFired);this.off('loadedmetadata',triggerLoadstart);if(!loadstartFired){// We did miss the original native loadstart. Fire it now.\nthis.trigger('loadstart');}});return;}// From here on we know that loadstart already fired and we missed it.\n// The other readyState events aren't as much of a problem if we double\n// them, so not going to go to as much trouble as loadstart to prevent\n// that unless we find reason to.\nvar eventsToTrigger=['loadstart'];// loadedmetadata: newly equal to HAVE_METADATA (1) or greater\neventsToTrigger.push('loadedmetadata');// loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\nif(el.readyState>=2){eventsToTrigger.push('loadeddata');}// canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\nif(el.readyState>=3){eventsToTrigger.push('canplay');}// canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\nif(el.readyState>=4){eventsToTrigger.push('canplaythrough');}// We still need to give the player time to add event listeners\nthis.ready(function(){eventsToTrigger.forEach(function(type){this.trigger(type);},this);});}/**\n * Set current time for the `HTML5` tech.\n *\n * @param {number} seconds\n * Set the current time of the media to this.\n */;_proto.setCurrentTime=function setCurrentTime(seconds){try{this.el_.currentTime=seconds;}catch(e){log(e,'Video is not ready. (Video.js)');// this.warning(VideoJS.warnings.videoNotReady);\n}}/**\n * Get the current duration of the HTML5 media element.\n *\n * @return {number}\n * The duration of the media or 0 if there is no duration.\n */;_proto.duration=function duration(){var _this5=this;// Android Chrome will report duration as Infinity for VOD HLS until after\n// playback has started, which triggers the live display erroneously.\n// Return NaN if playback has not started and trigger a durationupdate once\n// the duration can be reliably known.\nif(this.el_.duration===Infinity&&IS_ANDROID&&IS_CHROME&&this.el_.currentTime===0){// Wait for the first `timeupdate` with currentTime > 0 - there may be\n// several with 0\nvar checkProgress=function checkProgress(){if(_this5.el_.currentTime>0){// Trigger durationchange for genuinely live video\nif(_this5.el_.duration===Infinity){_this5.trigger('durationchange');}_this5.off('timeupdate',checkProgress);}};this.on('timeupdate',checkProgress);return NaN;}return this.el_.duration||NaN;}/**\n * Get the current width of the HTML5 media element.\n *\n * @return {number}\n * The width of the HTML5 media element.\n */;_proto.width=function width(){return this.el_.offsetWidth;}/**\n * Get the current height of the HTML5 media element.\n *\n * @return {number}\n * The height of the HTML5 media element.\n */;_proto.height=function height(){return this.el_.offsetHeight;}/**\n * Proxy iOS `webkitbeginfullscreen` and `webkitendfullscreen` into\n * `fullscreenchange` event.\n *\n * @private\n * @fires fullscreenchange\n * @listens webkitendfullscreen\n * @listens webkitbeginfullscreen\n * @listens webkitbeginfullscreen\n */;_proto.proxyWebkitFullscreen_=function proxyWebkitFullscreen_(){var _this6=this;if(!('webkitDisplayingFullscreen'in this.el_)){return;}var endFn=function endFn(){this.trigger('fullscreenchange',{isFullscreen:false});};var beginFn=function beginFn(){if('webkitPresentationMode'in this.el_&&this.el_.webkitPresentationMode!=='picture-in-picture'){this.one('webkitendfullscreen',endFn);this.trigger('fullscreenchange',{isFullscreen:true});}};this.on('webkitbeginfullscreen',beginFn);this.on('dispose',function(){_this6.off('webkitbeginfullscreen',beginFn);_this6.off('webkitendfullscreen',endFn);});}/**\n * Check if fullscreen is supported on the current playback device.\n *\n * @return {boolean}\n * - True if fullscreen is supported.\n * - False if fullscreen is not supported.\n */;_proto.supportsFullScreen=function supportsFullScreen(){if(typeof this.el_.webkitEnterFullScreen==='function'){var userAgent=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator.userAgent||'';// Seems to be broken in Chromium/Chrome && Safari in Leopard\nif(/Android/.test(userAgent)||!/Chrome|Mac OS X 10.5/.test(userAgent)){return true;}}return false;}/**\n * Request that the `HTML5` Tech enter fullscreen.\n */;_proto.enterFullScreen=function enterFullScreen(){var video=this.el_;if(video.paused&&video.networkState<=video.HAVE_METADATA){// attempt to prime the video element for programmatic access\n// this isn't necessary on the desktop but shouldn't hurt\nthis.el_.play();// playing and pausing synchronously during the transition to fullscreen\n// can get iOS ~6.1 devices into a play/pause loop\nthis.setTimeout(function(){video.pause();video.webkitEnterFullScreen();},0);}else{video.webkitEnterFullScreen();}}/**\n * Request that the `HTML5` Tech exit fullscreen.\n */;_proto.exitFullScreen=function exitFullScreen(){this.el_.webkitExitFullScreen();}/**\n * Create a floating video window always on top of other windows so that users may\n * continue consuming media while they interact with other content sites, or\n * applications on their device.\n *\n * @see [Spec]{@link https://wicg.github.io/picture-in-picture}\n *\n * @return {Promise}\n * A promise with a Picture-in-Picture window.\n */;_proto.requestPictureInPicture=function requestPictureInPicture(){return this.el_.requestPictureInPicture();}/**\n * A getter/setter for the `Html5` Tech's source object.\n * > Note: Please use {@link Html5#setSource}\n *\n * @param {Tech~SourceObject} [src]\n * The source object you want to set on the `HTML5` techs element.\n *\n * @return {Tech~SourceObject|undefined}\n * - The current source object when a source is not passed in.\n * - undefined when setting\n *\n * @deprecated Since version 5.\n */;_proto.src=function src(_src){if(_src===undefined){return this.el_.src;}// Setting src through `src` instead of `setSrc` will be deprecated\nthis.setSrc(_src);}/**\n * Reset the tech by removing all sources and then calling\n * {@link Html5.resetMediaElement}.\n */;_proto.reset=function reset(){Html5.resetMediaElement(this.el_);}/**\n * Get the current source on the `HTML5` Tech. Falls back to returning the source from\n * the HTML5 media element.\n *\n * @return {Tech~SourceObject}\n * The current source object from the HTML5 tech. With a fallback to the\n * elements source.\n */;_proto.currentSrc=function currentSrc(){if(this.currentSource_){return this.currentSource_.src;}return this.el_.currentSrc;}/**\n * Set controls attribute for the HTML5 media Element.\n *\n * @param {string} val\n * Value to set the controls attribute to\n */;_proto.setControls=function setControls(val){this.el_.controls=!!val;}/**\n * Create and returns a remote {@link TextTrack} object.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @return {TextTrack}\n * The TextTrack that gets created.\n */;_proto.addTextTrack=function addTextTrack(kind,label,language){if(!this.featuresNativeTextTracks){return _Tech.prototype.addTextTrack.call(this,kind,label,language);}return this.el_.addTextTrack(kind,label,language);}/**\n * Creates either native TextTrack or an emulated TextTrack depending\n * on the value of `featuresNativeTextTracks`\n *\n * @param {Object} options\n * The object should contain the options to initialize the TextTrack with.\n *\n * @param {string} [options.kind]\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata).\n *\n * @param {string} [options.label]\n * Label to identify the text track\n *\n * @param {string} [options.language]\n * Two letter language abbreviation.\n *\n * @param {boolean} [options.default]\n * Default this track to on.\n *\n * @param {string} [options.id]\n * The internal id to assign this track.\n *\n * @param {string} [options.src]\n * A source url for the track.\n *\n * @return {HTMLTrackElement}\n * The track element that gets created.\n */;_proto.createRemoteTextTrack=function createRemoteTextTrack(options){if(!this.featuresNativeTextTracks){return _Tech.prototype.createRemoteTextTrack.call(this,options);}var htmlTrackElement=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('track');if(options.kind){htmlTrackElement.kind=options.kind;}if(options.label){htmlTrackElement.label=options.label;}if(options.language||options.srclang){htmlTrackElement.srclang=options.language||options.srclang;}if(options[\"default\"]){htmlTrackElement[\"default\"]=options[\"default\"];}if(options.id){htmlTrackElement.id=options.id;}if(options.src){htmlTrackElement.src=options.src;}return htmlTrackElement;}/**\n * Creates a remote text track object and returns an html track element.\n *\n * @param {Object} options The object should contain values for\n * kind, language, label, and src (location of the WebVTT file)\n * @param {boolean} [manualCleanup=true] if set to false, the TextTrack will be\n * automatically removed from the video element whenever the source changes\n * @return {HTMLTrackElement} An Html Track Element.\n * This can be an emulated {@link HTMLTrackElement} or a native one.\n * @deprecated The default value of the \"manualCleanup\" parameter will default\n * to \"false\" in upcoming versions of Video.js\n */;_proto.addRemoteTextTrack=function addRemoteTextTrack(options,manualCleanup){var htmlTrackElement=_Tech.prototype.addRemoteTextTrack.call(this,options,manualCleanup);if(this.featuresNativeTextTracks){this.el().appendChild(htmlTrackElement);}return htmlTrackElement;}/**\n * Remove remote `TextTrack` from `TextTrackList` object\n *\n * @param {TextTrack} track\n * `TextTrack` object to remove\n */;_proto.removeRemoteTextTrack=function removeRemoteTextTrack(track){_Tech.prototype.removeRemoteTextTrack.call(this,track);if(this.featuresNativeTextTracks){var tracks=this.$$('track');var i=tracks.length;while(i--){if(track===tracks[i]||track===tracks[i].track){this.el().removeChild(tracks[i]);}}}}/**\n * Gets available media playback quality metrics as specified by the W3C's Media\n * Playback Quality API.\n *\n * @see [Spec]{@link https://wicg.github.io/media-playback-quality}\n *\n * @return {Object}\n * An object with supported media playback quality metrics\n */;_proto.getVideoPlaybackQuality=function getVideoPlaybackQuality(){if(typeof this.el().getVideoPlaybackQuality==='function'){return this.el().getVideoPlaybackQuality();}var videoPlaybackQuality={};if(typeof this.el().webkitDroppedFrameCount!=='undefined'&&typeof this.el().webkitDecodedFrameCount!=='undefined'){videoPlaybackQuality.droppedVideoFrames=this.el().webkitDroppedFrameCount;videoPlaybackQuality.totalVideoFrames=this.el().webkitDecodedFrameCount;}if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance&&typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now==='function'){videoPlaybackQuality.creationTime=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.now();}else if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.timing&&typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.timing.navigationStart==='number'){videoPlaybackQuality.creationTime=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Date.now()-global_window__WEBPACK_IMPORTED_MODULE_0___default.a.performance.timing.navigationStart;}return videoPlaybackQuality;};return Html5;}(Tech);/* HTML5 Support Testing ---------------------------------------------------- */if(isReal()){/**\n * Element for testing browser HTML5 media capabilities\n *\n * @type {Element}\n * @constant\n * @private\n */Html5.TEST_VID=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video');var track=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('track');track.kind='captions';track.srclang='en';track.label='English';Html5.TEST_VID.appendChild(track);}/**\n * Check if HTML5 media is supported by this browser/device.\n *\n * @return {boolean}\n * - True if HTML5 media is supported.\n * - False if HTML5 media is not supported.\n */Html5.isSupported=function(){// IE with no Media Player is a LIAR! (#984)\ntry{Html5.TEST_VID.volume=0.5;}catch(e){return false;}return!!(Html5.TEST_VID&&Html5.TEST_VID.canPlayType);};/**\n * Check if the tech can support the given type\n *\n * @param {string} type\n * The mimetype to check\n * @return {string} 'probably', 'maybe', or '' (empty string)\n */Html5.canPlayType=function(type){return Html5.TEST_VID.canPlayType(type);};/**\n * Check if the tech can support the given source\n *\n * @param {Object} srcObj\n * The source object\n * @param {Object} options\n * The options passed to the tech\n * @return {string} 'probably', 'maybe', or '' (empty string)\n */Html5.canPlaySource=function(srcObj,options){return Html5.canPlayType(srcObj.type);};/**\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {boolean}\n * - True if volume can be controlled\n * - False otherwise\n */Html5.canControlVolume=function(){// IE will error if Windows Media Player not installed #3315\ntry{var volume=Html5.TEST_VID.volume;Html5.TEST_VID.volume=volume/2+0.1;return volume!==Html5.TEST_VID.volume;}catch(e){return false;}};/**\n * Check if the volume can be muted in this browser/device.\n * Some devices, e.g. iOS, don't allow changing volume\n * but permits muting/unmuting.\n *\n * @return {bolean}\n * - True if volume can be muted\n * - False otherwise\n */Html5.canMuteVolume=function(){try{var muted=Html5.TEST_VID.muted;// in some versions of iOS muted property doesn't always\n// work, so we want to set both property and attribute\nHtml5.TEST_VID.muted=!muted;if(Html5.TEST_VID.muted){setAttribute(Html5.TEST_VID,'muted','muted');}else{removeAttribute(Html5.TEST_VID,'muted','muted');}return muted!==Html5.TEST_VID.muted;}catch(e){return false;}};/**\n * Check if the playback rate can be changed in this browser/device.\n *\n * @return {boolean}\n * - True if playback rate can be controlled\n * - False otherwise\n */Html5.canControlPlaybackRate=function(){// Playback rate API is implemented in Android Chrome, but doesn't do anything\n// https://github.com/videojs/video.js/issues/3180\nif(IS_ANDROID&&IS_CHROME&&CHROME_VERSION<58){return false;}// IE will error if Windows Media Player not installed #3315\ntry{var playbackRate=Html5.TEST_VID.playbackRate;Html5.TEST_VID.playbackRate=playbackRate/2+0.1;return playbackRate!==Html5.TEST_VID.playbackRate;}catch(e){return false;}};/**\n * Check if we can override a video/audio elements attributes, with\n * Object.defineProperty.\n *\n * @return {boolean}\n * - True if builtin attributes can be overridden\n * - False otherwise\n */Html5.canOverrideAttributes=function(){// if we cannot overwrite the src/innerHTML property, there is no support\n// iOS 7 safari for instance cannot do this.\ntry{var noop=function noop(){};Object.defineProperty(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video'),'src',{get:noop,set:noop});Object.defineProperty(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('audio'),'src',{get:noop,set:noop});Object.defineProperty(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video'),'innerHTML',{get:noop,set:noop});Object.defineProperty(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('audio'),'innerHTML',{get:noop,set:noop});}catch(e){return false;}return true;};/**\n * Check to see if native `TextTrack`s are supported by this browser/device.\n *\n * @return {boolean}\n * - True if native `TextTrack`s are supported.\n * - False otherwise\n */Html5.supportsNativeTextTracks=function(){return IS_ANY_SAFARI||IS_IOS&&IS_CHROME;};/**\n * Check to see if native `VideoTrack`s are supported by this browser/device\n *\n * @return {boolean}\n * - True if native `VideoTrack`s are supported.\n * - False otherwise\n */Html5.supportsNativeVideoTracks=function(){return!!(Html5.TEST_VID&&Html5.TEST_VID.videoTracks);};/**\n * Check to see if native `AudioTrack`s are supported by this browser/device\n *\n * @return {boolean}\n * - True if native `AudioTrack`s are supported.\n * - False otherwise\n */Html5.supportsNativeAudioTracks=function(){return!!(Html5.TEST_VID&&Html5.TEST_VID.audioTracks);};/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */Html5.Events=['loadstart','suspend','abort','error','emptied','stalled','loadedmetadata','loadeddata','canplay','canplaythrough','playing','waiting','seeking','seeked','ended','durationchange','timeupdate','progress','play','pause','ratechange','resize','volumechange'];/**\n * Boolean indicating whether the `Tech` supports volume control.\n *\n * @type {boolean}\n * @default {@link Html5.canControlVolume}\n */Html5.prototype.featuresVolumeControl=Html5.canControlVolume();/**\n * Boolean indicating whether the `Tech` supports muting volume.\n *\n * @type {bolean}\n * @default {@link Html5.canMuteVolume}\n */Html5.prototype.featuresMuteControl=Html5.canMuteVolume();/**\n * Boolean indicating whether the `Tech` supports changing the speed at which the media\n * plays. Examples:\n * - Set player to play 2x (twice) as fast\n * - Set player to play 0.5x (half) as fast\n *\n * @type {boolean}\n * @default {@link Html5.canControlPlaybackRate}\n */Html5.prototype.featuresPlaybackRate=Html5.canControlPlaybackRate();/**\n * Boolean indicating whether the `Tech` supports the `sourceset` event.\n *\n * @type {boolean}\n * @default\n */Html5.prototype.featuresSourceset=Html5.canOverrideAttributes();/**\n * Boolean indicating whether the `HTML5` tech currently supports the media element\n * moving in the DOM. iOS breaks if you move the media element, so this is set this to\n * false there. Everywhere else this should be true.\n *\n * @type {boolean}\n * @default\n */Html5.prototype.movingMediaElementInDOM=!IS_IOS;// TODO: Previous comment: No longer appears to be used. Can probably be removed.\n// Is this true?\n/**\n * Boolean indicating whether the `HTML5` tech currently supports automatic media resize\n * when going into fullscreen.\n *\n * @type {boolean}\n * @default\n */Html5.prototype.featuresFullscreenResize=true;/**\n * Boolean indicating whether the `HTML5` tech currently supports the progress event.\n * If this is false, manual `progress` events will be triggered instead.\n *\n * @type {boolean}\n * @default\n */Html5.prototype.featuresProgressEvents=true;/**\n * Boolean indicating whether the `HTML5` tech currently supports the timeupdate event.\n * If this is false, manual `timeupdate` events will be triggered instead.\n *\n * @default\n */Html5.prototype.featuresTimeupdateEvents=true;/**\n * Boolean indicating whether the `HTML5` tech currently supports native `TextTrack`s.\n *\n * @type {boolean}\n * @default {@link Html5.supportsNativeTextTracks}\n */Html5.prototype.featuresNativeTextTracks=Html5.supportsNativeTextTracks();/**\n * Boolean indicating whether the `HTML5` tech currently supports native `VideoTrack`s.\n *\n * @type {boolean}\n * @default {@link Html5.supportsNativeVideoTracks}\n */Html5.prototype.featuresNativeVideoTracks=Html5.supportsNativeVideoTracks();/**\n * Boolean indicating whether the `HTML5` tech currently supports native `AudioTrack`s.\n *\n * @type {boolean}\n * @default {@link Html5.supportsNativeAudioTracks}\n */Html5.prototype.featuresNativeAudioTracks=Html5.supportsNativeAudioTracks();// HTML5 Feature detection and Device Fixes --------------------------------- //\nvar canPlayType=Html5.TEST_VID&&Html5.TEST_VID.constructor.prototype.canPlayType;var mpegurlRE=/^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;Html5.patchCanPlayType=function(){// Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n// Firefox and Chrome report correctly\nif(ANDROID_VERSION>=4.0&&!IS_FIREFOX&&!IS_CHROME){Html5.TEST_VID.constructor.prototype.canPlayType=function(type){if(type&&mpegurlRE.test(type)){return'maybe';}return canPlayType.call(this,type);};}};Html5.unpatchCanPlayType=function(){var r=Html5.TEST_VID.constructor.prototype.canPlayType;Html5.TEST_VID.constructor.prototype.canPlayType=canPlayType;return r;};// by default, patch the media element\nHtml5.patchCanPlayType();Html5.disposeMediaElement=function(el){if(!el){return;}if(el.parentNode){el.parentNode.removeChild(el);}// remove any child track or source nodes to prevent their loading\nwhile(el.hasChildNodes()){el.removeChild(el.firstChild);}// remove any src reference. not setting `src=''` because that causes a warning\n// in firefox\nel.removeAttribute('src');// force the media element to update its loading state by calling load()\n// however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\nif(typeof el.load==='function'){// wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n(function(){try{el.load();}catch(e){// not supported\n}})();}};Html5.resetMediaElement=function(el){if(!el){return;}var sources=el.querySelectorAll('source');var i=sources.length;while(i--){el.removeChild(sources[i]);}// remove any src reference.\n// not setting `src=''` because that throws an error\nel.removeAttribute('src');if(typeof el.load==='function'){// wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n(function(){try{el.load();}catch(e){// satisfy linter\n}})();}};/* Native HTML5 element property wrapping ----------------------------------- */ // Wrap native boolean attributes with getters that check both property and attribute\n// The list is as followed:\n// muted, defaultMuted, autoplay, controls, loop, playsinline\n[/**\n * Get the value of `muted` from the media element. `muted` indicates\n * that the volume for the media should be set to silent. This does not actually change\n * the `volume` attribute.\n *\n * @method Html5#muted\n * @return {boolean}\n * - True if the value of `volume` should be ignored and the audio set to silent.\n * - False if the value of `volume` should be used.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-muted}\n */'muted',/**\n * Get the value of `defaultMuted` from the media element. `defaultMuted` indicates\n * whether the media should start muted or not. Only changes the default state of the\n * media. `muted` and `defaultMuted` can have different values. {@link Html5#muted} indicates the\n * current state.\n *\n * @method Html5#defaultMuted\n * @return {boolean}\n * - The value of `defaultMuted` from the media element.\n * - True indicates that the media should start muted.\n * - False indicates that the media should not start muted\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultmuted}\n */'defaultMuted',/**\n * Get the value of `autoplay` from the media element. `autoplay` indicates\n * that the media should start to play as soon as the page is ready.\n *\n * @method Html5#autoplay\n * @return {boolean}\n * - The value of `autoplay` from the media element.\n * - True indicates that the media should start as soon as the page loads.\n * - False indicates that the media should not start as soon as the page loads.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-autoplay}\n */'autoplay',/**\n * Get the value of `controls` from the media element. `controls` indicates\n * whether the native media controls should be shown or hidden.\n *\n * @method Html5#controls\n * @return {boolean}\n * - The value of `controls` from the media element.\n * - True indicates that native controls should be showing.\n * - False indicates that native controls should be hidden.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-controls}\n */'controls',/**\n * Get the value of `loop` from the media element. `loop` indicates\n * that the media should return to the start of the media and continue playing once\n * it reaches the end.\n *\n * @method Html5#loop\n * @return {boolean}\n * - The value of `loop` from the media element.\n * - True indicates that playback should seek back to start once\n * the end of a media is reached.\n * - False indicates that playback should not loop back to the start when the\n * end of the media is reached.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-loop}\n */'loop',/**\n * Get the value of `playsinline` from the media element. `playsinline` indicates\n * to the browser that non-fullscreen playback is preferred when fullscreen\n * playback is the native default, such as in iOS Safari.\n *\n * @method Html5#playsinline\n * @return {boolean}\n * - The value of `playsinline` from the media element.\n * - True indicates that the media should play inline.\n * - False indicates that the media should not play inline.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline}\n */'playsinline'].forEach(function(prop){Html5.prototype[prop]=function(){return this.el_[prop]||this.el_.hasAttribute(prop);};});// Wrap native boolean attributes with setters that set both property and attribute\n// The list is as followed:\n// setMuted, setDefaultMuted, setAutoplay, setLoop, setPlaysinline\n// setControls is special-cased above\n[/**\n * Set the value of `muted` on the media element. `muted` indicates that the current\n * audio level should be silent.\n *\n * @method Html5#setMuted\n * @param {boolean} muted\n * - True if the audio should be set to silent\n * - False otherwise\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-muted}\n */'muted',/**\n * Set the value of `defaultMuted` on the media element. `defaultMuted` indicates that the current\n * audio level should be silent, but will only effect the muted level on intial playback..\n *\n * @method Html5.prototype.setDefaultMuted\n * @param {boolean} defaultMuted\n * - True if the audio should be set to silent\n * - False otherwise\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultmuted}\n */'defaultMuted',/**\n * Set the value of `autoplay` on the media element. `autoplay` indicates\n * that the media should start to play as soon as the page is ready.\n *\n * @method Html5#setAutoplay\n * @param {boolean} autoplay\n * - True indicates that the media should start as soon as the page loads.\n * - False indicates that the media should not start as soon as the page loads.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-autoplay}\n */'autoplay',/**\n * Set the value of `loop` on the media element. `loop` indicates\n * that the media should return to the start of the media and continue playing once\n * it reaches the end.\n *\n * @method Html5#setLoop\n * @param {boolean} loop\n * - True indicates that playback should seek back to start once\n * the end of a media is reached.\n * - False indicates that playback should not loop back to the start when the\n * end of the media is reached.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-loop}\n */'loop',/**\n * Set the value of `playsinline` from the media element. `playsinline` indicates\n * to the browser that non-fullscreen playback is preferred when fullscreen\n * playback is the native default, such as in iOS Safari.\n *\n * @method Html5#setPlaysinline\n * @param {boolean} playsinline\n * - True indicates that the media should play inline.\n * - False indicates that the media should not play inline.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline}\n */'playsinline'].forEach(function(prop){Html5.prototype['set'+toTitleCase(prop)]=function(v){this.el_[prop]=v;if(v){this.el_.setAttribute(prop,prop);}else{this.el_.removeAttribute(prop);}};});// Wrap native properties with a getter\n// The list is as followed\n// paused, currentTime, buffered, volume, poster, preload, error, seeking\n// seekable, ended, playbackRate, defaultPlaybackRate, played, networkState\n// readyState, videoWidth, videoHeight\n[/**\n * Get the value of `paused` from the media element. `paused` indicates whether the media element\n * is currently paused or not.\n *\n * @method Html5#paused\n * @return {boolean}\n * The value of `paused` from the media element.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-paused}\n */'paused',/**\n * Get the value of `currentTime` from the media element. `currentTime` indicates\n * the current second that the media is at in playback.\n *\n * @method Html5#currentTime\n * @return {number}\n * The value of `currentTime` from the media element.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-currenttime}\n */'currentTime',/**\n * Get the value of `buffered` from the media element. `buffered` is a `TimeRange`\n * object that represents the parts of the media that are already downloaded and\n * available for playback.\n *\n * @method Html5#buffered\n * @return {TimeRange}\n * The value of `buffered` from the media element.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered}\n */'buffered',/**\n * Get the value of `volume` from the media element. `volume` indicates\n * the current playback volume of audio for a media. `volume` will be a value from 0\n * (silent) to 1 (loudest and default).\n *\n * @method Html5#volume\n * @return {number}\n * The value of `volume` from the media element. Value will be between 0-1.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-a-volume}\n */'volume',/**\n * Get the value of `poster` from the media element. `poster` indicates\n * that the url of an image file that can/will be shown when no media data is available.\n *\n * @method Html5#poster\n * @return {string}\n * The value of `poster` from the media element. Value will be a url to an\n * image.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-video-poster}\n */'poster',/**\n * Get the value of `preload` from the media element. `preload` indicates\n * what should download before the media is interacted with. It can have the following\n * values:\n * - none: nothing should be downloaded\n * - metadata: poster and the first few frames of the media may be downloaded to get\n * media dimensions and other metadata\n * - auto: allow the media and metadata for the media to be downloaded before\n * interaction\n *\n * @method Html5#preload\n * @return {string}\n * The value of `preload` from the media element. Will be 'none', 'metadata',\n * or 'auto'.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-preload}\n */'preload',/**\n * Get the value of the `error` from the media element. `error` indicates any\n * MediaError that may have occurred during playback. If error returns null there is no\n * current error.\n *\n * @method Html5#error\n * @return {MediaError|null}\n * The value of `error` from the media element. Will be `MediaError` if there\n * is a current error and null otherwise.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-error}\n */'error',/**\n * Get the value of `seeking` from the media element. `seeking` indicates whether the\n * media is currently seeking to a new position or not.\n *\n * @method Html5#seeking\n * @return {boolean}\n * - The value of `seeking` from the media element.\n * - True indicates that the media is currently seeking to a new position.\n * - False indicates that the media is not seeking to a new position at this time.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seeking}\n */'seeking',/**\n * Get the value of `seekable` from the media element. `seekable` returns a\n * `TimeRange` object indicating ranges of time that can currently be `seeked` to.\n *\n * @method Html5#seekable\n * @return {TimeRange}\n * The value of `seekable` from the media element. A `TimeRange` object\n * indicating the current ranges of time that can be seeked to.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seekable}\n */'seekable',/**\n * Get the value of `ended` from the media element. `ended` indicates whether\n * the media has reached the end or not.\n *\n * @method Html5#ended\n * @return {boolean}\n * - The value of `ended` from the media element.\n * - True indicates that the media has ended.\n * - False indicates that the media has not ended.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-ended}\n */'ended',/**\n * Get the value of `playbackRate` from the media element. `playbackRate` indicates\n * the rate at which the media is currently playing back. Examples:\n * - if playbackRate is set to 2, media will play twice as fast.\n * - if playbackRate is set to 0.5, media will play half as fast.\n *\n * @method Html5#playbackRate\n * @return {number}\n * The value of `playbackRate` from the media element. A number indicating\n * the current playback speed of the media, where 1 is normal speed.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate}\n */'playbackRate',/**\n * Get the value of `defaultPlaybackRate` from the media element. `defaultPlaybackRate` indicates\n * the rate at which the media is currently playing back. This value will not indicate the current\n * `playbackRate` after playback has started, use {@link Html5#playbackRate} for that.\n *\n * Examples:\n * - if defaultPlaybackRate is set to 2, media will play twice as fast.\n * - if defaultPlaybackRate is set to 0.5, media will play half as fast.\n *\n * @method Html5.prototype.defaultPlaybackRate\n * @return {number}\n * The value of `defaultPlaybackRate` from the media element. A number indicating\n * the current playback speed of the media, where 1 is normal speed.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate}\n */'defaultPlaybackRate',/**\n * Get the value of `played` from the media element. `played` returns a `TimeRange`\n * object representing points in the media timeline that have been played.\n *\n * @method Html5#played\n * @return {TimeRange}\n * The value of `played` from the media element. A `TimeRange` object indicating\n * the ranges of time that have been played.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-played}\n */'played',/**\n * Get the value of `networkState` from the media element. `networkState` indicates\n * the current network state. It returns an enumeration from the following list:\n * - 0: NETWORK_EMPTY\n * - 1: NETWORK_IDLE\n * - 2: NETWORK_LOADING\n * - 3: NETWORK_NO_SOURCE\n *\n * @method Html5#networkState\n * @return {number}\n * The value of `networkState` from the media element. This will be a number\n * from the list in the description.\n *\n * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-networkstate}\n */'networkState',/**\n * Get the value of `readyState` from the media element. `readyState` indicates\n * the current state of the media element. It returns an enumeration from the\n * following list:\n * - 0: HAVE_NOTHING\n * - 1: HAVE_METADATA\n * - 2: HAVE_CURRENT_DATA\n * - 3: HAVE_FUTURE_DATA\n * - 4: HAVE_ENOUGH_DATA\n *\n * @method Html5#readyState\n * @return {number}\n * The value of `readyState` from the media element. This will be a number\n * from the list in the description.\n *\n * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#ready-states}\n */'readyState',/**\n * Get the value of `videoWidth` from the video element. `videoWidth` indicates\n * the current width of the video in css pixels.\n *\n * @method Html5#videoWidth\n * @return {number}\n * The value of `videoWidth` from the video element. This will be a number\n * in css pixels.\n *\n * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-video-videowidth}\n */'videoWidth',/**\n * Get the value of `videoHeight` from the video element. `videoHeight` indicates\n * the current height of the video in css pixels.\n *\n * @method Html5#videoHeight\n * @return {number}\n * The value of `videoHeight` from the video element. This will be a number\n * in css pixels.\n *\n * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-video-videowidth}\n */'videoHeight'].forEach(function(prop){Html5.prototype[prop]=function(){return this.el_[prop];};});// Wrap native properties with a setter in this format:\n// set + toTitleCase(name)\n// The list is as follows:\n// setVolume, setSrc, setPoster, setPreload, setPlaybackRate, setDefaultPlaybackRate\n[/**\n * Set the value of `volume` on the media element. `volume` indicates the current\n * audio level as a percentage in decimal form. This means that 1 is 100%, 0.5 is 50%, and\n * so on.\n *\n * @method Html5#setVolume\n * @param {number} percentAsDecimal\n * The volume percent as a decimal. Valid range is from 0-1.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-a-volume}\n */'volume',/**\n * Set the value of `src` on the media element. `src` indicates the current\n * {@link Tech~SourceObject} for the media.\n *\n * @method Html5#setSrc\n * @param {Tech~SourceObject} src\n * The source object to set as the current source.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-src}\n */'src',/**\n * Set the value of `poster` on the media element. `poster` is the url to\n * an image file that can/will be shown when no media data is available.\n *\n * @method Html5#setPoster\n * @param {string} poster\n * The url to an image that should be used as the `poster` for the media\n * element.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-poster}\n */'poster',/**\n * Set the value of `preload` on the media element. `preload` indicates\n * what should download before the media is interacted with. It can have the following\n * values:\n * - none: nothing should be downloaded\n * - metadata: poster and the first few frames of the media may be downloaded to get\n * media dimensions and other metadata\n * - auto: allow the media and metadata for the media to be downloaded before\n * interaction\n *\n * @method Html5#setPreload\n * @param {string} preload\n * The value of `preload` to set on the media element. Must be 'none', 'metadata',\n * or 'auto'.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-preload}\n */'preload',/**\n * Set the value of `playbackRate` on the media element. `playbackRate` indicates\n * the rate at which the media should play back. Examples:\n * - if playbackRate is set to 2, media will play twice as fast.\n * - if playbackRate is set to 0.5, media will play half as fast.\n *\n * @method Html5#setPlaybackRate\n * @return {number}\n * The value of `playbackRate` from the media element. A number indicating\n * the current playback speed of the media, where 1 is normal speed.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate}\n */'playbackRate',/**\n * Set the value of `defaultPlaybackRate` on the media element. `defaultPlaybackRate` indicates\n * the rate at which the media should play back upon initial startup. Changing this value\n * after a video has started will do nothing. Instead you should used {@link Html5#setPlaybackRate}.\n *\n * Example Values:\n * - if playbackRate is set to 2, media will play twice as fast.\n * - if playbackRate is set to 0.5, media will play half as fast.\n *\n * @method Html5.prototype.setDefaultPlaybackRate\n * @return {number}\n * The value of `defaultPlaybackRate` from the media element. A number indicating\n * the current playback speed of the media, where 1 is normal speed.\n *\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultplaybackrate}\n */'defaultPlaybackRate'].forEach(function(prop){Html5.prototype['set'+toTitleCase(prop)]=function(v){this.el_[prop]=v;};});// wrap native functions with a function\n// The list is as follows:\n// pause, load, play\n[/**\n * A wrapper around the media elements `pause` function. This will call the `HTML5`\n * media elements `pause` function.\n *\n * @method Html5#pause\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-pause}\n */'pause',/**\n * A wrapper around the media elements `load` function. This will call the `HTML5`s\n * media element `load` function.\n *\n * @method Html5#load\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-load}\n */'load',/**\n * A wrapper around the media elements `play` function. This will call the `HTML5`s\n * media element `play` function.\n *\n * @method Html5#play\n * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-play}\n */'play'].forEach(function(prop){Html5.prototype[prop]=function(){return this.el_[prop]();};});Tech.withSourceHandlers(Html5);/**\n * Native source handler for Html5, simply passes the source to the media element.\n *\n * @property {Tech~SourceObject} source\n * The source object\n *\n * @property {Html5} tech\n * The instance of the HTML5 tech.\n */Html5.nativeSourceHandler={};/**\n * Check if the media element can play the given mime type.\n *\n * @param {string} type\n * The mimetype to check\n *\n * @return {string}\n * 'probably', 'maybe', or '' (empty string)\n */Html5.nativeSourceHandler.canPlayType=function(type){// IE without MediaPlayer throws an error (#519)\ntry{return Html5.TEST_VID.canPlayType(type);}catch(e){return'';}};/**\n * Check if the media element can handle a source natively.\n *\n * @param {Tech~SourceObject} source\n * The source object\n *\n * @param {Object} [options]\n * Options to be passed to the tech.\n *\n * @return {string}\n * 'probably', 'maybe', or '' (empty string).\n */Html5.nativeSourceHandler.canHandleSource=function(source,options){// If a type was provided we should rely on that\nif(source.type){return Html5.nativeSourceHandler.canPlayType(source.type);// If no type, fall back to checking 'video/[EXTENSION]'\n}else if(source.src){var ext=getFileExtension(source.src);return Html5.nativeSourceHandler.canPlayType(\"video/\"+ext);}return'';};/**\n * Pass the source to the native media element.\n *\n * @param {Tech~SourceObject} source\n * The source object\n *\n * @param {Html5} tech\n * The instance of the Html5 tech\n *\n * @param {Object} [options]\n * The options to pass to the source\n */Html5.nativeSourceHandler.handleSource=function(source,tech,options){tech.setSrc(source.src);};/**\n * A noop for the native dispose function, as cleanup is not needed.\n */Html5.nativeSourceHandler.dispose=function(){};// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);Tech.registerTech('Html5',Html5);// on the player when they happen\nvar TECH_EVENTS_RETRIGGER=[/**\n * Fired while the user agent is downloading media data.\n *\n * @event Player#progress\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `progress` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechProgress_\n * @fires Player#progress\n * @listens Tech#progress\n */'progress',/**\n * Fires when the loading of an audio/video is aborted.\n *\n * @event Player#abort\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `abort` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechAbort_\n * @fires Player#abort\n * @listens Tech#abort\n */'abort',/**\n * Fires when the browser is intentionally not getting media data.\n *\n * @event Player#suspend\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `suspend` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechSuspend_\n * @fires Player#suspend\n * @listens Tech#suspend\n */'suspend',/**\n * Fires when the current playlist is empty.\n *\n * @event Player#emptied\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `emptied` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechEmptied_\n * @fires Player#emptied\n * @listens Tech#emptied\n */'emptied',/**\n * Fires when the browser is trying to get media data, but data is not available.\n *\n * @event Player#stalled\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `stalled` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechStalled_\n * @fires Player#stalled\n * @listens Tech#stalled\n */'stalled',/**\n * Fires when the browser has loaded meta data for the audio/video.\n *\n * @event Player#loadedmetadata\n * @type {EventTarget~Event}\n */ /**\n * Retrigger the `stalled` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechLoadedmetadata_\n * @fires Player#loadedmetadata\n * @listens Tech#loadedmetadata\n */'loadedmetadata',/**\n * Fires when the browser has loaded the current frame of the audio/video.\n *\n * @event Player#loadeddata\n * @type {event}\n */ /**\n * Retrigger the `loadeddata` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechLoaddeddata_\n * @fires Player#loadeddata\n * @listens Tech#loadeddata\n */'loadeddata',/**\n * Fires when the current playback position has changed.\n *\n * @event Player#timeupdate\n * @type {event}\n */ /**\n * Retrigger the `timeupdate` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechTimeUpdate_\n * @fires Player#timeupdate\n * @listens Tech#timeupdate\n */'timeupdate',/**\n * Fires when the video's intrinsic dimensions change\n *\n * @event Player#resize\n * @type {event}\n */ /**\n * Retrigger the `resize` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechResize_\n * @fires Player#resize\n * @listens Tech#resize\n */'resize',/**\n * Fires when the volume has been changed\n *\n * @event Player#volumechange\n * @type {event}\n */ /**\n * Retrigger the `volumechange` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechVolumechange_\n * @fires Player#volumechange\n * @listens Tech#volumechange\n */'volumechange',/**\n * Fires when the text track has been changed\n *\n * @event Player#texttrackchange\n * @type {event}\n */ /**\n * Retrigger the `texttrackchange` event that was triggered by the {@link Tech}.\n *\n * @private\n * @method Player#handleTechTexttrackchange_\n * @fires Player#texttrackchange\n * @listens Tech#texttrackchange\n */'texttrackchange'];// events to queue when playback rate is zero\n// this is a hash for the sole purpose of mapping non-camel-cased event names\n// to camel-cased function names\nvar TECH_EVENTS_QUEUE={canplay:'CanPlay',canplaythrough:'CanPlayThrough',playing:'Playing',seeked:'Seeked'};var BREAKPOINT_ORDER=['tiny','xsmall','small','medium','large','xlarge','huge'];var BREAKPOINT_CLASSES={};// grep: vjs-layout-tiny\n// grep: vjs-layout-x-small\n// grep: vjs-layout-small\n// grep: vjs-layout-medium\n// grep: vjs-layout-large\n// grep: vjs-layout-x-large\n// grep: vjs-layout-huge\nBREAKPOINT_ORDER.forEach(function(k){var v=k.charAt(0)==='x'?\"x-\"+k.substring(1):k;BREAKPOINT_CLASSES[k]=\"vjs-layout-\"+v;});var DEFAULT_BREAKPOINTS={tiny:210,xsmall:320,small:425,medium:768,large:1440,xlarge:2560,huge:Infinity};/**\n * An instance of the `Player` class is created when any of the Video.js setup methods\n * are used to initialize a video.\n *\n * After an instance has been created it can be accessed globally in two ways:\n * 1. By calling `videojs('example_video_1');`\n * 2. By using it directly via `videojs.players.example_video_1;`\n *\n * @extends Component\n */var Player=/*#__PURE__*/function(_Component){_inheritsLoose(Player,_Component);/**\n * Create an instance of this class.\n *\n * @param {Element} tag\n * The original video DOM element used for configuring options.\n *\n * @param {Object} [options]\n * Object of option names and values.\n *\n * @param {Component~ReadyCallback} [ready]\n * Ready callback function.\n */function Player(tag,options,ready){var _this;// Make sure tag ID exists\ntag.id=tag.id||options.id||\"vjs_video_\"+newGUID();// Set Options\n// The options argument overrides options set in the video tag\n// which overrides globally set options.\n// This latter part coincides with the load order\n// (tag must exist before Player)\noptions=assign(Player.getTagSettings(tag),options);// Delay the initialization of children because we need to set up\n// player properties first, and can't use `this` before `super()`\noptions.initChildren=false;// Same with creating the element\noptions.createEl=false;// don't auto mixin the evented mixin\noptions.evented=false;// we don't want the player to report touch activity on itself\n// see enableTouchActivity in Component\noptions.reportTouchActivity=false;// If language is not set, get the closest lang attribute\nif(!options.language){if(typeof tag.closest==='function'){var closest=tag.closest('[lang]');if(closest&&closest.getAttribute){options.language=closest.getAttribute('lang');}}else{var element=tag;while(element&&element.nodeType===1){if(getAttributes(element).hasOwnProperty('lang')){options.language=element.getAttribute('lang');break;}element=element.parentNode;}}}// Run base component initializing with new options\n_this=_Component.call(this,null,options,ready)||this;// Create bound methods for document listeners.\n_this.boundDocumentFullscreenChange_=bind(_assertThisInitialized(_this),_this.documentFullscreenChange_);_this.boundFullWindowOnEscKey_=bind(_assertThisInitialized(_this),_this.fullWindowOnEscKey);// create logger\n_this.log=createLogger$1(_this.id_);// Hold our own reference to fullscreen api so it can be mocked in tests\n_this.fsApi_=FullscreenApi;// Tracks when a tech changes the poster\n_this.isPosterFromTech_=false;// Holds callback info that gets queued when playback rate is zero\n// and a seek is happening\n_this.queuedCallbacks_=[];// Turn off API access because we're loading a new tech that might load asynchronously\n_this.isReady_=false;// Init state hasStarted_\n_this.hasStarted_=false;// Init state userActive_\n_this.userActive_=false;// if the global option object was accidentally blown away by\n// someone, bail early with an informative error\nif(!_this.options_||!_this.options_.techOrder||!_this.options_.techOrder.length){throw new Error('No techOrder specified. Did you overwrite '+'videojs.options instead of just changing the '+'properties you want to override?');}// Store the original tag used to set options\n_this.tag=tag;// Store the tag attributes used to restore html5 element\n_this.tagAttributes=tag&&getAttributes(tag);// Update current language\n_this.language(_this.options_.language);// Update Supported Languages\nif(options.languages){// Normalise player option languages to lowercase\nvar languagesToLower={};Object.getOwnPropertyNames(options.languages).forEach(function(name){languagesToLower[name.toLowerCase()]=options.languages[name];});_this.languages_=languagesToLower;}else{_this.languages_=Player.prototype.options_.languages;}_this.resetCache_();// Set poster\n_this.poster_=options.poster||'';// Set controls\n_this.controls_=!!options.controls;// Original tag settings stored in options\n// now remove immediately so native controls don't flash.\n// May be turned back on by HTML5 tech if nativeControlsForTouch is true\ntag.controls=false;tag.removeAttribute('controls');_this.changingSrc_=false;_this.playCallbacks_=[];_this.playTerminatedQueue_=[];// the attribute overrides the option\nif(tag.hasAttribute('autoplay')){_this.autoplay(true);}else{// otherwise use the setter to validate and\n// set the correct value.\n_this.autoplay(_this.options_.autoplay);}// check plugins\nif(options.plugins){Object.keys(options.plugins).forEach(function(name){if(typeof _this[name]!=='function'){throw new Error(\"plugin \\\"\"+name+\"\\\" does not exist\");}});}/*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */_this.scrubbing_=false;_this.el_=_this.createEl();// Make this an evented object and use `el_` as its event bus.\nevented(_assertThisInitialized(_this),{eventBusKey:'el_'});if(_this.fluid_){_this.on('playerreset',_this.updateStyleEl_);}// We also want to pass the original player options to each component and plugin\n// as well so they don't need to reach back into the player for options later.\n// We also need to do another copy of this.options_ so we don't end up with\n// an infinite loop.\nvar playerOptionsCopy=mergeOptions(_this.options_);// Load plugins\nif(options.plugins){Object.keys(options.plugins).forEach(function(name){_this[name](options.plugins[name]);});}_this.options_.playerOptions=playerOptionsCopy;_this.middleware_=[];_this.initChildren();// Set isAudio based on whether or not an audio tag was used\n_this.isAudio(tag.nodeName.toLowerCase()==='audio');// Update controls className. Can't do this when the controls are initially\n// set because the element doesn't exist yet.\nif(_this.controls()){_this.addClass('vjs-controls-enabled');}else{_this.addClass('vjs-controls-disabled');}// Set ARIA label and region role depending on player type\n_this.el_.setAttribute('role','region');if(_this.isAudio()){_this.el_.setAttribute('aria-label',_this.localize('Audio Player'));}else{_this.el_.setAttribute('aria-label',_this.localize('Video Player'));}if(_this.isAudio()){_this.addClass('vjs-audio');}if(_this.flexNotSupported_()){_this.addClass('vjs-no-flex');}// TODO: Make this smarter. Toggle user state between touching/mousing\n// using events, since devices can have both touch and mouse events.\n// TODO: Make this check be performed again when the window switches between monitors\n// (See https://github.com/videojs/video.js/issues/5683)\nif(TOUCH_ENABLED){_this.addClass('vjs-touch-enabled');}// iOS Safari has broken hover handling\nif(!IS_IOS){_this.addClass('vjs-workinghover');}// Make player easily findable by ID\nPlayer.players[_this.id_]=_assertThisInitialized(_this);// Add a major version class to aid css in plugins\nvar majorVersion=version.split('.')[0];_this.addClass(\"vjs-v\"+majorVersion);// When the player is first initialized, trigger activity so components\n// like the control bar show themselves if needed\n_this.userActive(true);_this.reportUserActivity();_this.one('play',_this.listenForUserActivity_);_this.on('stageclick',_this.handleStageClick_);_this.on('keydown',_this.handleKeyDown);_this.breakpoints(_this.options_.breakpoints);_this.responsive(_this.options_.responsive);return _this;}/**\n * Destroys the video player and does any necessary cleanup.\n *\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @fires Player#dispose\n */var _proto=Player.prototype;_proto.dispose=function dispose(){var _this2=this;/**\n * Called when the player is being disposed of.\n *\n * @event Player#dispose\n * @type {EventTarget~Event}\n */this.trigger('dispose');// prevent dispose from being called twice\nthis.off('dispose');// Make sure all player-specific document listeners are unbound. This is\noff(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,this.fsApi_.fullscreenchange,this.boundDocumentFullscreenChange_);off(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keydown',this.boundFullWindowOnEscKey_);if(this.styleEl_&&this.styleEl_.parentNode){this.styleEl_.parentNode.removeChild(this.styleEl_);this.styleEl_=null;}// Kill reference to this player\nPlayer.players[this.id_]=null;if(this.tag&&this.tag.player){this.tag.player=null;}if(this.el_&&this.el_.player){this.el_.player=null;}if(this.tech_){this.tech_.dispose();this.isPosterFromTech_=false;this.poster_='';}if(this.playerElIngest_){this.playerElIngest_=null;}if(this.tag){this.tag=null;}clearCacheForPlayer(this);// remove all event handlers for track lists\n// all tracks and track listeners are removed on\n// tech dispose\nALL.names.forEach(function(name){var props=ALL[name];var list=_this2[props.getterName]();// if it is not a native list\n// we have to manually remove event listeners\nif(list&&list.off){list.off();}});// the actual .el_ is removed here\n_Component.prototype.dispose.call(this);}/**\n * Create the `Player`'s DOM element.\n *\n * @return {Element}\n * The DOM element that gets created.\n */;_proto.createEl=function createEl(){var tag=this.tag;var el;var playerElIngest=this.playerElIngest_=tag.parentNode&&tag.parentNode.hasAttribute&&tag.parentNode.hasAttribute('data-vjs-player');var divEmbed=this.tag.tagName.toLowerCase()==='video-js';if(playerElIngest){el=this.el_=tag.parentNode;}else if(!divEmbed){el=this.el_=_Component.prototype.createEl.call(this,'div');}// Copy over all the attributes from the tag, including ID and class\n// ID will now reference player box, not the video tag\nvar attrs=getAttributes(tag);if(divEmbed){el=this.el_=tag;tag=this.tag=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video');while(el.children.length){tag.appendChild(el.firstChild);}if(!hasClass(el,'video-js')){addClass(el,'video-js');}el.appendChild(tag);playerElIngest=this.playerElIngest_=el;// move properties over from our custom `video-js` element\n// to our new `video` element. This will move things like\n// `src` or `controls` that were set via js before the player\n// was initialized.\nObject.keys(el).forEach(function(k){try{tag[k]=el[k];}catch(e){// we got a a property like outerHTML which we can't actually copy, ignore it\n}});}// set tabindex to -1 to remove the video element from the focus order\ntag.setAttribute('tabindex','-1');attrs.tabindex='-1';// Workaround for #4583 (JAWS+IE doesn't announce BPB or play button), and\n// for the same issue with Chrome (on Windows) with JAWS.\n// See https://github.com/FreedomScientific/VFO-standards-support/issues/78\n// Note that we can't detect if JAWS is being used, but this ARIA attribute\n// doesn't change behavior of IE11 or Chrome if JAWS is not being used\nif(IE_VERSION||IS_CHROME&&IS_WINDOWS){tag.setAttribute('role','application');attrs.role='application';}// Remove width/height attrs from tag so CSS can make it 100% width/height\ntag.removeAttribute('width');tag.removeAttribute('height');if('width'in attrs){delete attrs.width;}if('height'in attrs){delete attrs.height;}Object.getOwnPropertyNames(attrs).forEach(function(attr){// don't copy over the class attribute to the player element when we're in a div embed\n// the class is already set up properly in the divEmbed case\n// and we want to make sure that the `video-js` class doesn't get lost\nif(!(divEmbed&&attr==='class')){el.setAttribute(attr,attrs[attr]);}if(divEmbed){tag.setAttribute(attr,attrs[attr]);}});// Update tag id/class for use as HTML5 playback tech\n// Might think we should do this after embedding in container so .vjs-tech class\n// doesn't flash 100% width/height, but class only applies with .video-js parent\ntag.playerId=tag.id;tag.id+='_html5_api';tag.className='vjs-tech';// Make player findable on elements\ntag.player=el.player=this;// Default state of video is paused\nthis.addClass('vjs-paused');// Add a style element in the player that we'll use to set the width/height\n// of the player in a way that's still overrideable by CSS, just like the\n// video element\nif(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VIDEOJS_NO_DYNAMIC_STYLE!==true){this.styleEl_=createStyleElement('vjs-styles-dimensions');var defaultsStyleEl=$('.vjs-styles-defaults');var head=$('head');head.insertBefore(this.styleEl_,defaultsStyleEl?defaultsStyleEl.nextSibling:head.firstChild);}this.fill_=false;this.fluid_=false;// Pass in the width/height/aspectRatio options which will update the style el\nthis.width(this.options_.width);this.height(this.options_.height);this.fill(this.options_.fill);this.fluid(this.options_.fluid);this.aspectRatio(this.options_.aspectRatio);// Hide any links within the video/audio tag,\n// because IE doesn't hide them completely from screen readers.\nvar links=tag.getElementsByTagName('a');for(var i=0;i<links.length;i++){var linkEl=links.item(i);addClass(linkEl,'vjs-hidden');linkEl.setAttribute('hidden','hidden');}// insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n// keep track of the original for later so we can know if the source originally failed\ntag.initNetworkState_=tag.networkState;// Wrap video tag in div (el/box) container\nif(tag.parentNode&&!playerElIngest){tag.parentNode.insertBefore(el,tag);}// insert the tag as the first child of the player element\n// then manually add it to the children array so that this.addChild\n// will work properly for other components\n//\n// Breaks iPhone, fixed in HTML5 setup.\nprependTo(tag,el);this.children_.unshift(tag);// Set lang attr on player to ensure CSS :lang() in consistent with player\n// if it's been set to something different to the doc\nthis.el_.setAttribute('lang',this.language_);this.el_=el;return el;}/**\n * A getter/setter for the `Player`'s width. Returns the player's configured value.\n * To get the current width use `currentWidth()`.\n *\n * @param {number} [value]\n * The value to set the `Player`'s width to.\n *\n * @return {number}\n * The current width of the `Player` when getting.\n */;_proto.width=function width(value){return this.dimension('width',value);}/**\n * A getter/setter for the `Player`'s height. Returns the player's configured value.\n * To get the current height use `currentheight()`.\n *\n * @param {number} [value]\n * The value to set the `Player`'s heigth to.\n *\n * @return {number}\n * The current height of the `Player` when getting.\n */;_proto.height=function height(value){return this.dimension('height',value);}/**\n * A getter/setter for the `Player`'s width & height.\n *\n * @param {string} dimension\n * This string can be:\n * - 'width'\n * - 'height'\n *\n * @param {number} [value]\n * Value for dimension specified in the first argument.\n *\n * @return {number}\n * The dimension arguments value when getting (width/height).\n */;_proto.dimension=function dimension(_dimension,value){var privDimension=_dimension+'_';if(value===undefined){return this[privDimension]||0;}if(value===''){// If an empty string is given, reset the dimension to be automatic\nthis[privDimension]=undefined;this.updateStyleEl_();return;}var parsedVal=parseFloat(value);if(isNaN(parsedVal)){log.error(\"Improper value \\\"\"+value+\"\\\" supplied for for \"+_dimension);return;}this[privDimension]=parsedVal;this.updateStyleEl_();}/**\n * A getter/setter/toggler for the vjs-fluid `className` on the `Player`.\n *\n * Turning this on will turn off fill mode.\n *\n * @param {boolean} [bool]\n * - A value of true adds the class.\n * - A value of false removes the class.\n * - No value will be a getter.\n *\n * @return {boolean|undefined}\n * - The value of fluid when getting.\n * - `undefined` when setting.\n */;_proto.fluid=function fluid(bool){if(bool===undefined){return!!this.fluid_;}this.fluid_=!!bool;if(isEvented(this)){this.off('playerreset',this.updateStyleEl_);}if(bool){this.addClass('vjs-fluid');this.fill(false);addEventedCallback(function(){this.on('playerreset',this.updateStyleEl_);});}else{this.removeClass('vjs-fluid');}this.updateStyleEl_();}/**\n * A getter/setter/toggler for the vjs-fill `className` on the `Player`.\n *\n * Turning this on will turn off fluid mode.\n *\n * @param {boolean} [bool]\n * - A value of true adds the class.\n * - A value of false removes the class.\n * - No value will be a getter.\n *\n * @return {boolean|undefined}\n * - The value of fluid when getting.\n * - `undefined` when setting.\n */;_proto.fill=function fill(bool){if(bool===undefined){return!!this.fill_;}this.fill_=!!bool;if(bool){this.addClass('vjs-fill');this.fluid(false);}else{this.removeClass('vjs-fill');}}/**\n * Get/Set the aspect ratio\n *\n * @param {string} [ratio]\n * Aspect ratio for player\n *\n * @return {string|undefined}\n * returns the current aspect ratio when getting\n */ /**\n * A getter/setter for the `Player`'s aspect ratio.\n *\n * @param {string} [ratio]\n * The value to set the `Player's aspect ratio to.\n *\n * @return {string|undefined}\n * - The current aspect ratio of the `Player` when getting.\n * - undefined when setting\n */;_proto.aspectRatio=function aspectRatio(ratio){if(ratio===undefined){return this.aspectRatio_;}// Check for width:height format\nif(!/^\\d+\\:\\d+$/.test(ratio)){throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');}this.aspectRatio_=ratio;// We're assuming if you set an aspect ratio you want fluid mode,\n// because in fixed mode you could calculate width and height yourself.\nthis.fluid(true);this.updateStyleEl_();}/**\n * Update styles of the `Player` element (height, width and aspect ratio).\n *\n * @private\n * @listens Tech#loadedmetadata\n */;_proto.updateStyleEl_=function updateStyleEl_(){if(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VIDEOJS_NO_DYNAMIC_STYLE===true){var _width=typeof this.width_==='number'?this.width_:this.options_.width;var _height=typeof this.height_==='number'?this.height_:this.options_.height;var techEl=this.tech_&&this.tech_.el();if(techEl){if(_width>=0){techEl.width=_width;}if(_height>=0){techEl.height=_height;}}return;}var width;var height;var aspectRatio;var idClass;// The aspect ratio is either used directly or to calculate width and height.\nif(this.aspectRatio_!==undefined&&this.aspectRatio_!=='auto'){// Use any aspectRatio that's been specifically set\naspectRatio=this.aspectRatio_;}else if(this.videoWidth()>0){// Otherwise try to get the aspect ratio from the video metadata\naspectRatio=this.videoWidth()+':'+this.videoHeight();}else{// Or use a default. The video element's is 2:1, but 16:9 is more common.\naspectRatio='16:9';}// Get the ratio as a decimal we can use to calculate dimensions\nvar ratioParts=aspectRatio.split(':');var ratioMultiplier=ratioParts[1]/ratioParts[0];if(this.width_!==undefined){// Use any width that's been specifically set\nwidth=this.width_;}else if(this.height_!==undefined){// Or calulate the width from the aspect ratio if a height has been set\nwidth=this.height_/ratioMultiplier;}else{// Or use the video's metadata, or use the video el's default of 300\nwidth=this.videoWidth()||300;}if(this.height_!==undefined){// Use any height that's been specifically set\nheight=this.height_;}else{// Otherwise calculate the height from the ratio and the width\nheight=width*ratioMultiplier;}// Ensure the CSS class is valid by starting with an alpha character\nif(/^[^a-zA-Z]/.test(this.id())){idClass='dimensions-'+this.id();}else{idClass=this.id()+'-dimensions';}// Ensure the right class is still on the player for the style element\nthis.addClass(idClass);setTextContent(this.styleEl_,\"\\n .\"+idClass+\" {\\n width: \"+width+\"px;\\n height: \"+height+\"px;\\n }\\n\\n .\"+idClass+\".vjs-fluid {\\n padding-top: \"+ratioMultiplier*100+\"%;\\n }\\n \");}/**\n * Load/Create an instance of playback {@link Tech} including element\n * and API methods. Then append the `Tech` element in `Player` as a child.\n *\n * @param {string} techName\n * name of the playback technology\n *\n * @param {string} source\n * video source\n *\n * @private\n */;_proto.loadTech_=function loadTech_(techName,source){var _this3=this;// Pause and remove current playback technology\nif(this.tech_){this.unloadTech_();}var titleTechName=toTitleCase(techName);var camelTechName=techName.charAt(0).toLowerCase()+techName.slice(1);// get rid of the HTML5 video tag as soon as we are using another tech\nif(titleTechName!=='Html5'&&this.tag){Tech.getTech('Html5').disposeMediaElement(this.tag);this.tag.player=null;this.tag=null;}this.techName_=titleTechName;// Turn off API access because we're loading a new tech that might load asynchronously\nthis.isReady_=false;// if autoplay is a string we pass false to the tech\n// because the player is going to handle autoplay on `loadstart`\nvar autoplay=typeof this.autoplay()==='string'?false:this.autoplay();// Grab tech-specific options from player options and add source and parent element to use.\nvar techOptions={source:source,autoplay:autoplay,'nativeControlsForTouch':this.options_.nativeControlsForTouch,'playerId':this.id(),'techId':this.id()+\"_\"+camelTechName+\"_api\",'playsinline':this.options_.playsinline,'preload':this.options_.preload,'loop':this.options_.loop,'muted':this.options_.muted,'poster':this.poster(),'language':this.language(),'playerElIngest':this.playerElIngest_||false,'vtt.js':this.options_['vtt.js'],'canOverridePoster':!!this.options_.techCanOverridePoster,'enableSourceset':this.options_.enableSourceset,'Promise':this.options_.Promise};ALL.names.forEach(function(name){var props=ALL[name];techOptions[props.getterName]=_this3[props.privateName];});assign(techOptions,this.options_[titleTechName]);assign(techOptions,this.options_[camelTechName]);assign(techOptions,this.options_[techName.toLowerCase()]);if(this.tag){techOptions.tag=this.tag;}if(source&&source.src===this.cache_.src&&this.cache_.currentTime>0){techOptions.startTime=this.cache_.currentTime;}// Initialize tech instance\nvar TechClass=Tech.getTech(techName);if(!TechClass){throw new Error(\"No Tech named '\"+titleTechName+\"' exists! '\"+titleTechName+\"' should be registered using videojs.registerTech()'\");}this.tech_=new TechClass(techOptions);// player.triggerReady is always async, so don't need this to be async\nthis.tech_.ready(bind(this,this.handleTechReady_),true);textTrackConverter.jsonToTextTracks(this.textTracksJson_||[],this.tech_);// Listen to all HTML5-defined events and trigger them on the player\nTECH_EVENTS_RETRIGGER.forEach(function(event){_this3.on(_this3.tech_,event,_this3[\"handleTech\"+toTitleCase(event)+\"_\"]);});Object.keys(TECH_EVENTS_QUEUE).forEach(function(event){_this3.on(_this3.tech_,event,function(eventObj){if(_this3.tech_.playbackRate()===0&&_this3.tech_.seeking()){_this3.queuedCallbacks_.push({callback:_this3[\"handleTech\"+TECH_EVENTS_QUEUE[event]+\"_\"].bind(_this3),event:eventObj});return;}_this3[\"handleTech\"+TECH_EVENTS_QUEUE[event]+\"_\"](eventObj);});});this.on(this.tech_,'loadstart',this.handleTechLoadStart_);this.on(this.tech_,'sourceset',this.handleTechSourceset_);this.on(this.tech_,'waiting',this.handleTechWaiting_);this.on(this.tech_,'ended',this.handleTechEnded_);this.on(this.tech_,'seeking',this.handleTechSeeking_);this.on(this.tech_,'play',this.handleTechPlay_);this.on(this.tech_,'firstplay',this.handleTechFirstPlay_);this.on(this.tech_,'pause',this.handleTechPause_);this.on(this.tech_,'durationchange',this.handleTechDurationChange_);this.on(this.tech_,'fullscreenchange',this.handleTechFullscreenChange_);this.on(this.tech_,'enterpictureinpicture',this.handleTechEnterPictureInPicture_);this.on(this.tech_,'leavepictureinpicture',this.handleTechLeavePictureInPicture_);this.on(this.tech_,'error',this.handleTechError_);this.on(this.tech_,'loadedmetadata',this.updateStyleEl_);this.on(this.tech_,'posterchange',this.handleTechPosterChange_);this.on(this.tech_,'textdata',this.handleTechTextData_);this.on(this.tech_,'ratechange',this.handleTechRateChange_);this.usingNativeControls(this.techGet_('controls'));if(this.controls()&&!this.usingNativeControls()){this.addTechControlsListeners_();}// Add the tech element in the DOM if it was not already there\n// Make sure to not insert the original video element if using Html5\nif(this.tech_.el().parentNode!==this.el()&&(titleTechName!=='Html5'||!this.tag)){prependTo(this.tech_.el(),this.el());}// Get rid of the original video tag reference after the first tech is loaded\nif(this.tag){this.tag.player=null;this.tag=null;}}/**\n * Unload and dispose of the current playback {@link Tech}.\n *\n * @private\n */;_proto.unloadTech_=function unloadTech_(){var _this4=this;// Save the current text tracks so that we can reuse the same text tracks with the next tech\nALL.names.forEach(function(name){var props=ALL[name];_this4[props.privateName]=_this4[props.getterName]();});this.textTracksJson_=textTrackConverter.textTracksToJson(this.tech_);this.isReady_=false;this.tech_.dispose();this.tech_=false;if(this.isPosterFromTech_){this.poster_='';this.trigger('posterchange');}this.isPosterFromTech_=false;}/**\n * Return a reference to the current {@link Tech}.\n * It will print a warning by default about the danger of using the tech directly\n * but any argument that is passed in will silence the warning.\n *\n * @param {*} [safety]\n * Anything passed in to silence the warning\n *\n * @return {Tech}\n * The Tech\n */;_proto.tech=function tech(safety){if(safety===undefined){log.warn('Using the tech directly can be dangerous. I hope you know what you\\'re doing.\\n'+'See https://github.com/videojs/video.js/issues/2617 for more info.\\n');}return this.tech_;}/**\n * Set up click and touch listeners for the playback element\n *\n * - On desktops: a click on the video itself will toggle playback\n * - On mobile devices: a click on the video toggles controls\n * which is done by toggling the user state between active and\n * inactive\n * - A tap can signal that a user has become active or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n * - In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n *\n * > Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold\n * on any controls will still keep the user active\n *\n * @private\n */;_proto.addTechControlsListeners_=function addTechControlsListeners_(){// Make sure to remove all the previous listeners in case we are called multiple times.\nthis.removeTechControlsListeners_();// Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n// trigger mousedown/up.\n// http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n// Any touch events are set to block the mousedown event from happening\nthis.on(this.tech_,'mouseup',this.handleTechClick_);this.on(this.tech_,'dblclick',this.handleTechDoubleClick_);// If the controls were hidden we don't want that to change without a tap event\n// so we'll check if the controls were already showing before reporting user\n// activity\nthis.on(this.tech_,'touchstart',this.handleTechTouchStart_);this.on(this.tech_,'touchmove',this.handleTechTouchMove_);this.on(this.tech_,'touchend',this.handleTechTouchEnd_);// The tap listener needs to come after the touchend listener because the tap\n// listener cancels out any reportedUserActivity when setting userActive(false)\nthis.on(this.tech_,'tap',this.handleTechTap_);}/**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @private\n */;_proto.removeTechControlsListeners_=function removeTechControlsListeners_(){// We don't want to just use `this.off()` because there might be other needed\n// listeners added by techs that extend this.\nthis.off(this.tech_,'tap',this.handleTechTap_);this.off(this.tech_,'touchstart',this.handleTechTouchStart_);this.off(this.tech_,'touchmove',this.handleTechTouchMove_);this.off(this.tech_,'touchend',this.handleTechTouchEnd_);this.off(this.tech_,'mouseup',this.handleTechClick_);this.off(this.tech_,'dblclick',this.handleTechDoubleClick_);}/**\n * Player waits for the tech to be ready\n *\n * @private\n */;_proto.handleTechReady_=function handleTechReady_(){this.triggerReady();// Keep the same volume as before\nif(this.cache_.volume){this.techCall_('setVolume',this.cache_.volume);}// Look if the tech found a higher resolution poster while loading\nthis.handleTechPosterChange_();// Update the duration if available\nthis.handleTechDurationChange_();}/**\n * Retrigger the `loadstart` event that was triggered by the {@link Tech}. This\n * function will also trigger {@link Player#firstplay} if it is the first loadstart\n * for a video.\n *\n * @fires Player#loadstart\n * @fires Player#firstplay\n * @listens Tech#loadstart\n * @private\n */;_proto.handleTechLoadStart_=function handleTechLoadStart_(){// TODO: Update to use `emptied` event instead. See #1277.\nthis.removeClass('vjs-ended');this.removeClass('vjs-seeking');// reset the error state\nthis.error(null);// Update the duration\nthis.handleTechDurationChange_();// If it's already playing we want to trigger a firstplay event now.\n// The firstplay event relies on both the play and loadstart events\n// which can happen in any order for a new source\nif(!this.paused()){/**\n * Fired when the user agent begins looking for media data\n *\n * @event Player#loadstart\n * @type {EventTarget~Event}\n */this.trigger('loadstart');this.trigger('firstplay');}else{// reset the hasStarted state\nthis.hasStarted(false);this.trigger('loadstart');}// autoplay happens after loadstart for the browser,\n// so we mimic that behavior\nthis.manualAutoplay_(this.autoplay());}/**\n * Handle autoplay string values, rather than the typical boolean\n * values that should be handled by the tech. Note that this is not\n * part of any specification. Valid values and what they do can be\n * found on the autoplay getter at Player#autoplay()\n */;_proto.manualAutoplay_=function manualAutoplay_(type){var _this5=this;if(!this.tech_||typeof type!=='string'){return;}var muted=function muted(){var previouslyMuted=_this5.muted();_this5.muted(true);var restoreMuted=function restoreMuted(){_this5.muted(previouslyMuted);};// restore muted on play terminatation\n_this5.playTerminatedQueue_.push(restoreMuted);var mutedPromise=_this5.play();if(!isPromise(mutedPromise)){return;}return mutedPromise[\"catch\"](restoreMuted);};var promise;// if muted defaults to true\n// the only thing we can do is call play\nif(type==='any'&&this.muted()!==true){promise=this.play();if(isPromise(promise)){promise=promise[\"catch\"](muted);}}else if(type==='muted'&&this.muted()!==true){promise=muted();}else{promise=this.play();}if(!isPromise(promise)){return;}return promise.then(function(){_this5.trigger({type:'autoplay-success',autoplay:type});})[\"catch\"](function(e){_this5.trigger({type:'autoplay-failure',autoplay:type});});}/**\n * Update the internal source caches so that we return the correct source from\n * `src()`, `currentSource()`, and `currentSources()`.\n *\n * > Note: `currentSources` will not be updated if the source that is passed in exists\n * in the current `currentSources` cache.\n *\n *\n * @param {Tech~SourceObject} srcObj\n * A string or object source to update our caches to.\n */;_proto.updateSourceCaches_=function updateSourceCaches_(srcObj){if(srcObj===void 0){srcObj='';}var src=srcObj;var type='';if(typeof src!=='string'){src=srcObj.src;type=srcObj.type;}// make sure all the caches are set to default values\n// to prevent null checking\nthis.cache_.source=this.cache_.source||{};this.cache_.sources=this.cache_.sources||[];// try to get the type of the src that was passed in\nif(src&&!type){type=findMimetype(this,src);}// update `currentSource` cache always\nthis.cache_.source=mergeOptions({},srcObj,{src:src,type:type});var matchingSources=this.cache_.sources.filter(function(s){return s.src&&s.src===src;});var sourceElSources=[];var sourceEls=this.$$('source');var matchingSourceEls=[];for(var i=0;i<sourceEls.length;i++){var sourceObj=getAttributes(sourceEls[i]);sourceElSources.push(sourceObj);if(sourceObj.src&&sourceObj.src===src){matchingSourceEls.push(sourceObj.src);}}// if we have matching source els but not matching sources\n// the current source cache is not up to date\nif(matchingSourceEls.length&&!matchingSources.length){this.cache_.sources=sourceElSources;// if we don't have matching source or source els set the\n// sources cache to the `currentSource` cache\n}else if(!matchingSources.length){this.cache_.sources=[this.cache_.source];}// update the tech `src` cache\nthis.cache_.src=src;}/**\n * *EXPERIMENTAL* Fired when the source is set or changed on the {@link Tech}\n * causing the media element to reload.\n *\n * It will fire for the initial source and each subsequent source.\n * This event is a custom event from Video.js and is triggered by the {@link Tech}.\n *\n * The event object for this event contains a `src` property that will contain the source\n * that was available when the event was triggered. This is generally only necessary if Video.js\n * is switching techs while the source was being changed.\n *\n * It is also fired when `load` is called on the player (or media element)\n * because the {@link https://html.spec.whatwg.org/multipage/media.html#dom-media-load|specification for `load`}\n * says that the resource selection algorithm needs to be aborted and restarted.\n * In this case, it is very likely that the `src` property will be set to the\n * empty string `\"\"` to indicate we do not know what the source will be but\n * that it is changing.\n *\n * *This event is currently still experimental and may change in minor releases.*\n * __To use this, pass `enableSourceset` option to the player.__\n *\n * @event Player#sourceset\n * @type {EventTarget~Event}\n * @prop {string} src\n * The source url available when the `sourceset` was triggered.\n * It will be an empty string if we cannot know what the source is\n * but know that the source will change.\n */ /**\n * Retrigger the `sourceset` event that was triggered by the {@link Tech}.\n *\n * @fires Player#sourceset\n * @listens Tech#sourceset\n * @private\n */;_proto.handleTechSourceset_=function handleTechSourceset_(event){var _this6=this;// only update the source cache when the source\n// was not updated using the player api\nif(!this.changingSrc_){var updateSourceCaches=function updateSourceCaches(src){return _this6.updateSourceCaches_(src);};var playerSrc=this.currentSource().src;var eventSrc=event.src;// if we have a playerSrc that is not a blob, and a tech src that is a blob\nif(playerSrc&&!/^blob:/.test(playerSrc)&&/^blob:/.test(eventSrc)){// if both the tech source and the player source were updated we assume\n// something like @videojs/http-streaming did the sourceset and skip updating the source cache.\nif(!this.lastSource_||this.lastSource_.tech!==eventSrc&&this.lastSource_.player!==playerSrc){updateSourceCaches=function updateSourceCaches(){};}}// update the source to the intial source right away\n// in some cases this will be empty string\nupdateSourceCaches(eventSrc);// if the `sourceset` `src` was an empty string\n// wait for a `loadstart` to update the cache to `currentSrc`.\n// If a sourceset happens before a `loadstart`, we reset the state\nif(!event.src){this.tech_.any(['sourceset','loadstart'],function(e){// if a sourceset happens before a `loadstart` there\n// is nothing to do as this `handleTechSourceset_`\n// will be called again and this will be handled there.\nif(e.type==='sourceset'){return;}var techSrc=_this6.techGet('currentSrc');_this6.lastSource_.tech=techSrc;_this6.updateSourceCaches_(techSrc);});}}this.lastSource_={player:this.currentSource().src,tech:event.src};this.trigger({src:event.src,type:'sourceset'});}/**\n * Add/remove the vjs-has-started class\n *\n * @fires Player#firstplay\n *\n * @param {boolean} request\n * - true: adds the class\n * - false: remove the class\n *\n * @return {boolean}\n * the boolean value of hasStarted_\n */;_proto.hasStarted=function hasStarted(request){if(request===undefined){// act as getter, if we have no request to change\nreturn this.hasStarted_;}if(request===this.hasStarted_){return;}this.hasStarted_=request;if(this.hasStarted_){this.addClass('vjs-has-started');this.trigger('firstplay');}else{this.removeClass('vjs-has-started');}}/**\n * Fired whenever the media begins or resumes playback\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play}\n * @fires Player#play\n * @listens Tech#play\n * @private\n */;_proto.handleTechPlay_=function handleTechPlay_(){this.removeClass('vjs-ended');this.removeClass('vjs-paused');this.addClass('vjs-playing');// hide the poster when the user hits play\nthis.hasStarted(true);/**\n * Triggered whenever an {@link Tech#play} event happens. Indicates that\n * playback has started or resumed.\n *\n * @event Player#play\n * @type {EventTarget~Event}\n */this.trigger('play');}/**\n * Retrigger the `ratechange` event that was triggered by the {@link Tech}.\n *\n * If there were any events queued while the playback rate was zero, fire\n * those events now.\n *\n * @private\n * @method Player#handleTechRateChange_\n * @fires Player#ratechange\n * @listens Tech#ratechange\n */;_proto.handleTechRateChange_=function handleTechRateChange_(){if(this.tech_.playbackRate()>0&&this.cache_.lastPlaybackRate===0){this.queuedCallbacks_.forEach(function(queued){return queued.callback(queued.event);});this.queuedCallbacks_=[];}this.cache_.lastPlaybackRate=this.tech_.playbackRate();/**\n * Fires when the playing speed of the audio/video is changed\n *\n * @event Player#ratechange\n * @type {event}\n */this.trigger('ratechange');}/**\n * Retrigger the `waiting` event that was triggered by the {@link Tech}.\n *\n * @fires Player#waiting\n * @listens Tech#waiting\n * @private\n */;_proto.handleTechWaiting_=function handleTechWaiting_(){var _this7=this;this.addClass('vjs-waiting');/**\n * A readyState change on the DOM element has caused playback to stop.\n *\n * @event Player#waiting\n * @type {EventTarget~Event}\n */this.trigger('waiting');// Browsers may emit a timeupdate event after a waiting event. In order to prevent\n// premature removal of the waiting class, wait for the time to change.\nvar timeWhenWaiting=this.currentTime();var timeUpdateListener=function timeUpdateListener(){if(timeWhenWaiting!==_this7.currentTime()){_this7.removeClass('vjs-waiting');_this7.off('timeupdate',timeUpdateListener);}};this.on('timeupdate',timeUpdateListener);}/**\n * Retrigger the `canplay` event that was triggered by the {@link Tech}.\n * > Note: This is not consistent between browsers. See #1351\n *\n * @fires Player#canplay\n * @listens Tech#canplay\n * @private\n */;_proto.handleTechCanPlay_=function handleTechCanPlay_(){this.removeClass('vjs-waiting');/**\n * The media has a readyState of HAVE_FUTURE_DATA or greater.\n *\n * @event Player#canplay\n * @type {EventTarget~Event}\n */this.trigger('canplay');}/**\n * Retrigger the `canplaythrough` event that was triggered by the {@link Tech}.\n *\n * @fires Player#canplaythrough\n * @listens Tech#canplaythrough\n * @private\n */;_proto.handleTechCanPlayThrough_=function handleTechCanPlayThrough_(){this.removeClass('vjs-waiting');/**\n * The media has a readyState of HAVE_ENOUGH_DATA or greater. This means that the\n * entire media file can be played without buffering.\n *\n * @event Player#canplaythrough\n * @type {EventTarget~Event}\n */this.trigger('canplaythrough');}/**\n * Retrigger the `playing` event that was triggered by the {@link Tech}.\n *\n * @fires Player#playing\n * @listens Tech#playing\n * @private\n */;_proto.handleTechPlaying_=function handleTechPlaying_(){this.removeClass('vjs-waiting');/**\n * The media is no longer blocked from playback, and has started playing.\n *\n * @event Player#playing\n * @type {EventTarget~Event}\n */this.trigger('playing');}/**\n * Retrigger the `seeking` event that was triggered by the {@link Tech}.\n *\n * @fires Player#seeking\n * @listens Tech#seeking\n * @private\n */;_proto.handleTechSeeking_=function handleTechSeeking_(){this.addClass('vjs-seeking');/**\n * Fired whenever the player is jumping to a new time\n *\n * @event Player#seeking\n * @type {EventTarget~Event}\n */this.trigger('seeking');}/**\n * Retrigger the `seeked` event that was triggered by the {@link Tech}.\n *\n * @fires Player#seeked\n * @listens Tech#seeked\n * @private\n */;_proto.handleTechSeeked_=function handleTechSeeked_(){this.removeClass('vjs-seeking');this.removeClass('vjs-ended');/**\n * Fired when the player has finished jumping to a new time\n *\n * @event Player#seeked\n * @type {EventTarget~Event}\n */this.trigger('seeked');}/**\n * Retrigger the `firstplay` event that was triggered by the {@link Tech}.\n *\n * @fires Player#firstplay\n * @listens Tech#firstplay\n * @deprecated As of 6.0 firstplay event is deprecated.\n * As of 6.0 passing the `starttime` option to the player and the firstplay event are deprecated.\n * @private\n */;_proto.handleTechFirstPlay_=function handleTechFirstPlay_(){// If the first starttime attribute is specified\n// then we will start at the given offset in seconds\nif(this.options_.starttime){log.warn('Passing the `starttime` option to the player will be deprecated in 6.0');this.currentTime(this.options_.starttime);}this.addClass('vjs-has-started');/**\n * Fired the first time a video is played. Not part of the HLS spec, and this is\n * probably not the best implementation yet, so use sparingly. If you don't have a\n * reason to prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event Player#firstplay\n * @deprecated As of 6.0 firstplay event is deprecated.\n * @type {EventTarget~Event}\n */this.trigger('firstplay');}/**\n * Retrigger the `pause` event that was triggered by the {@link Tech}.\n *\n * @fires Player#pause\n * @listens Tech#pause\n * @private\n */;_proto.handleTechPause_=function handleTechPause_(){this.removeClass('vjs-playing');this.addClass('vjs-paused');/**\n * Fired whenever the media has been paused\n *\n * @event Player#pause\n * @type {EventTarget~Event}\n */this.trigger('pause');}/**\n * Retrigger the `ended` event that was triggered by the {@link Tech}.\n *\n * @fires Player#ended\n * @listens Tech#ended\n * @private\n */;_proto.handleTechEnded_=function handleTechEnded_(){this.addClass('vjs-ended');if(this.options_.loop){this.currentTime(0);this.play();}else if(!this.paused()){this.pause();}/**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @event Player#ended\n * @type {EventTarget~Event}\n */this.trigger('ended');}/**\n * Fired when the duration of the media resource is first known or changed\n *\n * @listens Tech#durationchange\n * @private\n */;_proto.handleTechDurationChange_=function handleTechDurationChange_(){this.duration(this.techGet_('duration'));}/**\n * Handle a click on the media element to play/pause\n *\n * @param {EventTarget~Event} event\n * the event that caused this function to trigger\n *\n * @listens Tech#mouseup\n * @private\n */;_proto.handleTechClick_=function handleTechClick_(event){if(!isSingleLeftClick(event)){return;}// When controls are disabled a click should not toggle playback because\n// the click is considered a control\nif(!this.controls_){return;}if(this.paused()){silencePromise(this.play());}else{this.pause();}}/**\n * Handle a double-click on the media element to enter/exit fullscreen\n *\n * @param {EventTarget~Event} event\n * the event that caused this function to trigger\n *\n * @listens Tech#dblclick\n * @private\n */;_proto.handleTechDoubleClick_=function handleTechDoubleClick_(event){if(!this.controls_){return;}// we do not want to toggle fullscreen state\n// when double-clicking inside a control bar or a modal\nvar inAllowedEls=Array.prototype.some.call(this.$$('.vjs-control-bar, .vjs-modal-dialog'),function(el){return el.contains(event.target);});if(!inAllowedEls){/*\n * options.userActions.doubleClick\n *\n * If `undefined` or `true`, double-click toggles fullscreen if controls are present\n * Set to `false` to disable double-click handling\n * Set to a function to substitute an external double-click handler\n */if(this.options_===undefined||this.options_.userActions===undefined||this.options_.userActions.doubleClick===undefined||this.options_.userActions.doubleClick!==false){if(this.options_!==undefined&&this.options_.userActions!==undefined&&typeof this.options_.userActions.doubleClick==='function'){this.options_.userActions.doubleClick.call(this,event);}else if(this.isFullscreen()){this.exitFullscreen();}else{this.requestFullscreen();}}}}/**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @listens Tech#tap\n * @private\n */;_proto.handleTechTap_=function handleTechTap_(){this.userActive(!this.userActive());}/**\n * Handle touch to start\n *\n * @listens Tech#touchstart\n * @private\n */;_proto.handleTechTouchStart_=function handleTechTouchStart_(){this.userWasActive=this.userActive();}/**\n * Handle touch to move\n *\n * @listens Tech#touchmove\n * @private\n */;_proto.handleTechTouchMove_=function handleTechTouchMove_(){if(this.userWasActive){this.reportUserActivity();}}/**\n * Handle touch to end\n *\n * @param {EventTarget~Event} event\n * the touchend event that triggered\n * this function\n *\n * @listens Tech#touchend\n * @private\n */;_proto.handleTechTouchEnd_=function handleTechTouchEnd_(event){// Stop the mouse events from also happening\nevent.preventDefault();}/**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @listens stageclick\n */;_proto.handleStageClick_=function handleStageClick_(){this.reportUserActivity();}/**\n * @private\n */;_proto.toggleFullscreenClass_=function toggleFullscreenClass_(){if(this.isFullscreen()){this.addClass('vjs-fullscreen');}else{this.removeClass('vjs-fullscreen');}}/**\n * when the document fschange event triggers it calls this\n */;_proto.documentFullscreenChange_=function documentFullscreenChange_(e){var el=this.el();var isFs=global_document__WEBPACK_IMPORTED_MODULE_1___default.a[this.fsApi_.fullscreenElement]===el;if(!isFs&&el.matches){isFs=el.matches(':'+this.fsApi_.fullscreen);}else if(!isFs&&el.msMatchesSelector){isFs=el.msMatchesSelector(':'+this.fsApi_.fullscreen);}this.isFullscreen(isFs);// If cancelling fullscreen, remove event listener.\nif(this.isFullscreen()===false){off(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,this.fsApi_.fullscreenchange,this.boundDocumentFullscreenChange_);}if(this.fsApi_.prefixed){/**\n * @event Player#fullscreenchange\n * @type {EventTarget~Event}\n */this.trigger('fullscreenchange');}}/**\n * Handle Tech Fullscreen Change\n *\n * @param {EventTarget~Event} event\n * the fullscreenchange event that triggered this function\n *\n * @param {Object} data\n * the data that was sent with the event\n *\n * @private\n * @listens Tech#fullscreenchange\n * @fires Player#fullscreenchange\n */;_proto.handleTechFullscreenChange_=function handleTechFullscreenChange_(event,data){if(data){this.isFullscreen(data.isFullscreen);}/**\n * Fired when going in and out of fullscreen.\n *\n * @event Player#fullscreenchange\n * @type {EventTarget~Event}\n */this.trigger('fullscreenchange');}/**\n * @private\n */;_proto.togglePictureInPictureClass_=function togglePictureInPictureClass_(){if(this.isInPictureInPicture()){this.addClass('vjs-picture-in-picture');}else{this.removeClass('vjs-picture-in-picture');}}/**\n * Handle Tech Enter Picture-in-Picture.\n *\n * @param {EventTarget~Event} event\n * the enterpictureinpicture event that triggered this function\n *\n * @private\n * @listens Tech#enterpictureinpicture\n */;_proto.handleTechEnterPictureInPicture_=function handleTechEnterPictureInPicture_(event){this.isInPictureInPicture(true);}/**\n * Handle Tech Leave Picture-in-Picture.\n *\n * @param {EventTarget~Event} event\n * the leavepictureinpicture event that triggered this function\n *\n * @private\n * @listens Tech#leavepictureinpicture\n */;_proto.handleTechLeavePictureInPicture_=function handleTechLeavePictureInPicture_(event){this.isInPictureInPicture(false);}/**\n * Fires when an error occurred during the loading of an audio/video.\n *\n * @private\n * @listens Tech#error\n */;_proto.handleTechError_=function handleTechError_(){var error=this.tech_.error();this.error(error);}/**\n * Retrigger the `textdata` event that was triggered by the {@link Tech}.\n *\n * @fires Player#textdata\n * @listens Tech#textdata\n * @private\n */;_proto.handleTechTextData_=function handleTechTextData_(){var data=null;if(arguments.length>1){data=arguments[1];}/**\n * Fires when we get a textdata event from tech\n *\n * @event Player#textdata\n * @type {EventTarget~Event}\n */this.trigger('textdata',data);}/**\n * Get object for cached values.\n *\n * @return {Object}\n * get the current object cache\n */;_proto.getCache=function getCache(){return this.cache_;}/**\n * Resets the internal cache object.\n *\n * Using this function outside the player constructor or reset method may\n * have unintended side-effects.\n *\n * @private\n */;_proto.resetCache_=function resetCache_(){this.cache_={// Right now, the currentTime is not _really_ cached because it is always\n// retrieved from the tech (see: currentTime). However, for completeness,\n// we set it to zero here to ensure that if we do start actually caching\n// it, we reset it along with everything else.\ncurrentTime:0,inactivityTimeout:this.options_.inactivityTimeout,duration:NaN,lastVolume:1,lastPlaybackRate:this.defaultPlaybackRate(),media:null,src:'',source:{},sources:[],volume:1};}/**\n * Pass values to the playback tech\n *\n * @param {string} [method]\n * the method to call\n *\n * @param {Object} arg\n * the argument to pass\n *\n * @private\n */;_proto.techCall_=function techCall_(method,arg){// If it's not ready yet, call method when it is\nthis.ready(function(){if(method in allowedSetters){return set(this.middleware_,this.tech_,method,arg);}else if(method in allowedMediators){return mediate(this.middleware_,this.tech_,method,arg);}try{if(this.tech_){this.tech_[method](arg);}}catch(e){log(e);throw e;}},true);}/**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {string} method\n * Tech method\n *\n * @return {Function|undefined}\n * the method or undefined\n *\n * @private\n */;_proto.techGet_=function techGet_(method){if(!this.tech_||!this.tech_.isReady_){return;}if(method in allowedGetters){return get(this.middleware_,this.tech_,method);}else if(method in allowedMediators){return mediate(this.middleware_,this.tech_,method);}// Flash likes to die and reload when you hide or reposition it.\n// In these cases the object methods go away and we get errors.\n// When that happens we'll catch the errors and inform tech that it's not ready any more.\ntry{return this.tech_[method]();}catch(e){// When building additional tech libs, an expected method may not be defined yet\nif(this.tech_[method]===undefined){log(\"Video.js: \"+method+\" method not defined for \"+this.techName_+\" playback technology.\",e);throw e;}// When a method isn't available on the object it throws a TypeError\nif(e.name==='TypeError'){log(\"Video.js: \"+method+\" unavailable on \"+this.techName_+\" playback technology element.\",e);this.tech_.isReady_=false;throw e;}// If error unknown, just log and throw\nlog(e);throw e;}}/**\n * Attempt to begin playback at the first opportunity.\n *\n * @return {Promise|undefined}\n * Returns a promise if the browser supports Promises (or one\n * was passed in as an option). This promise will be resolved on\n * the return value of play. If this is undefined it will fulfill the\n * promise chain otherwise the promise chain will be fulfilled when\n * the promise from play is fulfilled.\n */;_proto.play=function play(){var _this8=this;var PromiseClass=this.options_.Promise||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Promise;if(PromiseClass){return new PromiseClass(function(resolve){_this8.play_(resolve);});}return this.play_();}/**\n * The actual logic for play, takes a callback that will be resolved on the\n * return value of play. This allows us to resolve to the play promise if there\n * is one on modern browsers.\n *\n * @private\n * @param {Function} [callback]\n * The callback that should be called when the techs play is actually called\n */;_proto.play_=function play_(callback){var _this9=this;if(callback===void 0){callback=silencePromise;}this.playCallbacks_.push(callback);var isSrcReady=Boolean(!this.changingSrc_&&(this.src()||this.currentSrc()));// treat calls to play_ somewhat like the `one` event function\nif(this.waitToPlay_){this.off(['ready','loadstart'],this.waitToPlay_);this.waitToPlay_=null;}// if the player/tech is not ready or the src itself is not ready\n// queue up a call to play on `ready` or `loadstart`\nif(!this.isReady_||!isSrcReady){this.waitToPlay_=function(e){_this9.play_();};this.one(['ready','loadstart'],this.waitToPlay_);// if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod\n// in that case, we need to prime the video element by calling load so it'll be ready in time\nif(!isSrcReady&&(IS_ANY_SAFARI||IS_IOS)){this.load();}return;}// If the player/tech is ready and we have a source, we can attempt playback.\nvar val=this.techGet_('play');// play was terminated if the returned value is null\nif(val===null){this.runPlayTerminatedQueue_();}else{this.runPlayCallbacks_(val);}}/**\n * These functions will be run when if play is terminated. If play\n * runPlayCallbacks_ is run these function will not be run. This allows us\n * to differenciate between a terminated play and an actual call to play.\n */;_proto.runPlayTerminatedQueue_=function runPlayTerminatedQueue_(){var queue=this.playTerminatedQueue_.slice(0);this.playTerminatedQueue_=[];queue.forEach(function(q){q();});}/**\n * When a callback to play is delayed we have to run these\n * callbacks when play is actually called on the tech. This function\n * runs the callbacks that were delayed and accepts the return value\n * from the tech.\n *\n * @param {undefined|Promise} val\n * The return value from the tech.\n */;_proto.runPlayCallbacks_=function runPlayCallbacks_(val){var callbacks=this.playCallbacks_.slice(0);this.playCallbacks_=[];// clear play terminatedQueue since we finished a real play\nthis.playTerminatedQueue_=[];callbacks.forEach(function(cb){cb(val);});}/**\n * Pause the video playback\n *\n * @return {Player}\n * A reference to the player object this function was called on\n */;_proto.pause=function pause(){this.techCall_('pause');}/**\n * Check if the player is paused or has yet to play\n *\n * @return {boolean}\n * - false: if the media is currently playing\n * - true: if media is not currently playing\n */;_proto.paused=function paused(){// The initial state of paused should be true (in Safari it's actually false)\nreturn this.techGet_('paused')===false?false:true;}/**\n * Get a TimeRange object representing the current ranges of time that the user\n * has played.\n *\n * @return {TimeRange}\n * A time range object that represents all the increments of time that have\n * been played.\n */;_proto.played=function played(){return this.techGet_('played')||createTimeRanges(0,0);}/**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is\n * when the user has clicked the progress bar handle and is\n * dragging it along the progress bar.\n *\n * @param {boolean} [isScrubbing]\n * whether the user is or is not scrubbing\n *\n * @return {boolean}\n * The value of scrubbing when getting\n */;_proto.scrubbing=function scrubbing(isScrubbing){if(typeof isScrubbing==='undefined'){return this.scrubbing_;}this.scrubbing_=!!isScrubbing;if(isScrubbing){this.addClass('vjs-scrubbing');}else{this.removeClass('vjs-scrubbing');}}/**\n * Get or set the current time (in seconds)\n *\n * @param {number|string} [seconds]\n * The time to seek to in seconds\n *\n * @return {number}\n * - the current time in seconds when getting\n */;_proto.currentTime=function currentTime(seconds){if(typeof seconds!=='undefined'){if(seconds<0){seconds=0;}this.techCall_('setCurrentTime',seconds);return;}// cache last currentTime and return. default to 0 seconds\n//\n// Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n// currentTime when scrubbing, but may not provide much performance benefit afterall.\n// Should be tested. Also something has to read the actual current time or the cache will\n// never get updated.\nthis.cache_.currentTime=this.techGet_('currentTime')||0;return this.cache_.currentTime;}/**\n * Normally gets the length in time of the video in seconds;\n * in all but the rarest use cases an argument will NOT be passed to the method\n *\n * > **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @fires Player#durationchange\n *\n * @param {number} [seconds]\n * The duration of the video to set in seconds\n *\n * @return {number}\n * - The duration of the video in seconds when getting\n */;_proto.duration=function duration(seconds){if(seconds===undefined){// return NaN if the duration is not known\nreturn this.cache_.duration!==undefined?this.cache_.duration:NaN;}seconds=parseFloat(seconds);// Standardize on Infinity for signaling video is live\nif(seconds<0){seconds=Infinity;}if(seconds!==this.cache_.duration){// Cache the last set value for optimized scrubbing (esp. Flash)\nthis.cache_.duration=seconds;if(seconds===Infinity){this.addClass('vjs-live');if(this.options_.liveui&&this.player_.liveTracker){this.addClass('vjs-liveui');}}else{this.removeClass('vjs-live');this.removeClass('vjs-liveui');}if(!isNaN(seconds)){// Do not fire durationchange unless the duration value is known.\n// @see [Spec]{@link https://www.w3.org/TR/2011/WD-html5-20110113/video.html#media-element-load-algorithm}\n/**\n * @event Player#durationchange\n * @type {EventTarget~Event}\n */this.trigger('durationchange');}}}/**\n * Calculates how much time is left in the video. Not part\n * of the native video API.\n *\n * @return {number}\n * The time remaining in seconds\n */;_proto.remainingTime=function remainingTime(){return this.duration()-this.currentTime();}/**\n * A remaining time function that is intented to be used when\n * the time is to be displayed directly to the user.\n *\n * @return {number}\n * The rounded time remaining in seconds\n */;_proto.remainingTimeDisplay=function remainingTimeDisplay(){return Math.floor(this.duration())-Math.floor(this.currentTime());}//\n// Kind of like an array of portions of the video that have been downloaded.\n/**\n * Get a TimeRange object with an array of the times of the video\n * that have been downloaded. If you just want the percent of the\n * video that's been downloaded, use bufferedPercent.\n *\n * @see [Buffered Spec]{@link http://dev.w3.org/html5/spec/video.html#dom-media-buffered}\n *\n * @return {TimeRange}\n * A mock TimeRange object (following HTML spec)\n */;_proto.buffered=function buffered(){var buffered=this.techGet_('buffered');if(!buffered||!buffered.length){buffered=createTimeRanges(0,0);}return buffered;}/**\n * Get the percent (as a decimal) of the video that's been downloaded.\n * This method is not a part of the native HTML video API.\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is buffered 0 being 0% and 1 being 100%\n */;_proto.bufferedPercent=function bufferedPercent$1(){return bufferedPercent(this.buffered(),this.duration());}/**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {number}\n * The end of the last buffered time range\n */;_proto.bufferedEnd=function bufferedEnd(){var buffered=this.buffered();var duration=this.duration();var end=buffered.end(buffered.length-1);if(end>duration){end=duration;}return end;}/**\n * Get or set the current volume of the media\n *\n * @param {number} [percentAsDecimal]\n * The new volume as a decimal percent:\n * - 0 is muted/0%/off\n * - 1.0 is 100%/full\n * - 0.5 is half volume or 50%\n *\n * @return {number}\n * The current volume as a percent when getting\n */;_proto.volume=function volume(percentAsDecimal){var vol;if(percentAsDecimal!==undefined){// Force value to between 0 and 1\nvol=Math.max(0,Math.min(1,parseFloat(percentAsDecimal)));this.cache_.volume=vol;this.techCall_('setVolume',vol);if(vol>0){this.lastVolume_(vol);}return;}// Default to 1 when returning current volume.\nvol=parseFloat(this.techGet_('volume'));return isNaN(vol)?1:vol;}/**\n * Get the current muted state, or turn mute on or off\n *\n * @param {boolean} [muted]\n * - true to mute\n * - false to unmute\n *\n * @return {boolean}\n * - true if mute is on and getting\n * - false if mute is off and getting\n */;_proto.muted=function muted(_muted){if(_muted!==undefined){this.techCall_('setMuted',_muted);return;}return this.techGet_('muted')||false;}/**\n * Get the current defaultMuted state, or turn defaultMuted on or off. defaultMuted\n * indicates the state of muted on initial playback.\n *\n * ```js\n * var myPlayer = videojs('some-player-id');\n *\n * myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n *\n * // get, should be false\n * console.log(myPlayer.defaultMuted());\n * // set to true\n * myPlayer.defaultMuted(true);\n * // get should be true\n * console.log(myPlayer.defaultMuted());\n * ```\n *\n * @param {boolean} [defaultMuted]\n * - true to mute\n * - false to unmute\n *\n * @return {boolean|Player}\n * - true if defaultMuted is on and getting\n * - false if defaultMuted is off and getting\n * - A reference to the current player when setting\n */;_proto.defaultMuted=function defaultMuted(_defaultMuted){if(_defaultMuted!==undefined){return this.techCall_('setDefaultMuted',_defaultMuted);}return this.techGet_('defaultMuted')||false;}/**\n * Get the last volume, or set it\n *\n * @param {number} [percentAsDecimal]\n * The new last volume as a decimal percent:\n * - 0 is muted/0%/off\n * - 1.0 is 100%/full\n * - 0.5 is half volume or 50%\n *\n * @return {number}\n * the current value of lastVolume as a percent when getting\n *\n * @private\n */;_proto.lastVolume_=function lastVolume_(percentAsDecimal){if(percentAsDecimal!==undefined&&percentAsDecimal!==0){this.cache_.lastVolume=percentAsDecimal;return;}return this.cache_.lastVolume;}/**\n * Check if current tech can support native fullscreen\n * (e.g. with built in controls like iOS, so not our flash swf)\n *\n * @return {boolean}\n * if native fullscreen is supported\n */;_proto.supportsFullScreen=function supportsFullScreen(){return this.techGet_('supportsFullScreen')||false;}/**\n * Check if the player is in fullscreen mode or tell the player that it\n * is or is not in fullscreen mode.\n *\n * > NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {boolean} [isFS]\n * Set the players current fullscreen state\n *\n * @return {boolean}\n * - true if fullscreen is on and getting\n * - false if fullscreen is off and getting\n */;_proto.isFullscreen=function isFullscreen(isFS){if(isFS!==undefined){this.isFullscreen_=!!isFS;this.toggleFullscreenClass_();return;}return!!this.isFullscreen_;}/**\n * Increase the size of the video to full screen\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @param {Object} [fullscreenOptions]\n * Override the player fullscreen options\n *\n * @fires Player#fullscreenchange\n */;_proto.requestFullscreen=function requestFullscreen(fullscreenOptions){var fsOptions;this.isFullscreen(true);if(this.fsApi_.requestFullscreen){// the browser supports going fullscreen at the element level so we can\n// take the controls fullscreen as well as the video\n// Trigger fullscreenchange event after change\n// We have to specifically add this each time, and remove\n// when canceling fullscreen. Otherwise if there's multiple\n// players on a page, they would all be reacting to the same fullscreen\n// events\non(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,this.fsApi_.fullscreenchange,this.boundDocumentFullscreenChange_);// only pass FullscreenOptions to requestFullscreen if it isn't prefixed\nif(!this.fsApi_.prefixed){fsOptions=this.options_.fullscreen&&this.options_.fullscreen.options||{};if(fullscreenOptions!==undefined){fsOptions=fullscreenOptions;}}silencePromise(this.el_[this.fsApi_.requestFullscreen](fsOptions));}else if(this.tech_.supportsFullScreen()){// we can't take the video.js controls fullscreen but we can go fullscreen\n// with native controls\nthis.techCall_('enterFullScreen');}else{// fullscreen isn't supported so we'll just stretch the video element to\n// fill the viewport\nthis.enterFullWindow();/**\n * @event Player#fullscreenchange\n * @type {EventTarget~Event}\n */this.trigger('fullscreenchange');}}/**\n * Return the video to its normal size after having been in full screen mode\n *\n * @fires Player#fullscreenchange\n */;_proto.exitFullscreen=function exitFullscreen(){this.isFullscreen(false);// Check for browser element fullscreen support\nif(this.fsApi_.requestFullscreen){silencePromise(global_document__WEBPACK_IMPORTED_MODULE_1___default.a[this.fsApi_.exitFullscreen]());}else if(this.tech_.supportsFullScreen()){this.techCall_('exitFullScreen');}else{this.exitFullWindow();/**\n * @event Player#fullscreenchange\n * @type {EventTarget~Event}\n */this.trigger('fullscreenchange');}}/**\n * When fullscreen isn't supported we can stretch the\n * video container to as wide as the browser will let us.\n *\n * @fires Player#enterFullWindow\n */;_proto.enterFullWindow=function enterFullWindow(){this.isFullWindow=true;// Storing original doc overflow value to return to when fullscreen is off\nthis.docOrigOverflow=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.documentElement.style.overflow;// Add listener for esc key to exit fullscreen\non(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keydown',this.boundFullWindowOnEscKey_);// Hide any scroll bars\nglobal_document__WEBPACK_IMPORTED_MODULE_1___default.a.documentElement.style.overflow='hidden';// Apply fullscreen styles\naddClass(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body,'vjs-full-window');/**\n * @event Player#enterFullWindow\n * @type {EventTarget~Event}\n */this.trigger('enterFullWindow');}/**\n * Check for call to either exit full window or\n * full screen on ESC key\n *\n * @param {string} event\n * Event to check for key press\n */;_proto.fullWindowOnEscKey=function fullWindowOnEscKey(event){if(keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(event,'Esc')){if(this.isFullscreen()===true){this.exitFullscreen();}else{this.exitFullWindow();}}}/**\n * Exit full window\n *\n * @fires Player#exitFullWindow\n */;_proto.exitFullWindow=function exitFullWindow(){this.isFullWindow=false;off(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,'keydown',this.boundFullWindowOnEscKey_);// Unhide scroll bars.\nglobal_document__WEBPACK_IMPORTED_MODULE_1___default.a.documentElement.style.overflow=this.docOrigOverflow;// Remove fullscreen styles\nremoveClass(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.body,'vjs-full-window');// Resize the box, controller, and poster to original sizes\n// this.positionAll();\n/**\n * @event Player#exitFullWindow\n * @type {EventTarget~Event}\n */this.trigger('exitFullWindow');}/**\n * Check if the player is in Picture-in-Picture mode or tell the player that it\n * is or is not in Picture-in-Picture mode.\n *\n * @param {boolean} [isPiP]\n * Set the players current Picture-in-Picture state\n *\n * @return {boolean}\n * - true if Picture-in-Picture is on and getting\n * - false if Picture-in-Picture is off and getting\n */;_proto.isInPictureInPicture=function isInPictureInPicture(isPiP){if(isPiP!==undefined){this.isInPictureInPicture_=!!isPiP;this.togglePictureInPictureClass_();return;}return!!this.isInPictureInPicture_;}/**\n * Create a floating video window always on top of other windows so that users may\n * continue consuming media while they interact with other content sites, or\n * applications on their device.\n *\n * @see [Spec]{@link https://wicg.github.io/picture-in-picture}\n *\n * @fires Player#enterpictureinpicture\n *\n * @return {Promise}\n * A promise with a Picture-in-Picture window.\n */;_proto.requestPictureInPicture=function requestPictureInPicture(){if('pictureInPictureEnabled'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){/**\n * This event fires when the player enters picture in picture mode\n *\n * @event Player#enterpictureinpicture\n * @type {EventTarget~Event}\n */return this.techGet_('requestPictureInPicture');}}/**\n * Exit Picture-in-Picture mode.\n *\n * @see [Spec]{@link https://wicg.github.io/picture-in-picture}\n *\n * @fires Player#leavepictureinpicture\n *\n * @return {Promise}\n * A promise.\n */;_proto.exitPictureInPicture=function exitPictureInPicture(){if('pictureInPictureEnabled'in global_document__WEBPACK_IMPORTED_MODULE_1___default.a){/**\n * This event fires when the player leaves picture in picture mode\n *\n * @event Player#leavepictureinpicture\n * @type {EventTarget~Event}\n */return global_document__WEBPACK_IMPORTED_MODULE_1___default.a.exitPictureInPicture();}}/**\n * Called when this Player has focus and a key gets pressed down, or when\n * any Component of this player receives a key press that it doesn't handle.\n * This allows player-wide hotkeys (either as defined below, or optionally\n * by an external function).\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n *\n * @listens keydown\n */;_proto.handleKeyDown=function handleKeyDown(event){var userActions=this.options_.userActions;// Bail out if hotkeys are not configured.\nif(!userActions||!userActions.hotkeys){return;}// Function that determines whether or not to exclude an element from\n// hotkeys handling.\nvar excludeElement=function excludeElement(el){var tagName=el.tagName.toLowerCase();// The first and easiest test is for `contenteditable` elements.\nif(el.isContentEditable){return true;}// Inputs matching these types will still trigger hotkey handling as\n// they are not text inputs.\nvar allowedInputTypes=['button','checkbox','hidden','radio','reset','submit'];if(tagName==='input'){return allowedInputTypes.indexOf(el.type)===-1;}// The final test is by tag name. These tags will be excluded entirely.\nvar excludedTags=['textarea'];return excludedTags.indexOf(tagName)!==-1;};// Bail out if the user is focused on an interactive form element.\nif(excludeElement(this.el_.ownerDocument.activeElement)){return;}if(typeof userActions.hotkeys==='function'){userActions.hotkeys.call(this,event);}else{this.handleHotkeys(event);}}/**\n * Called when this Player receives a hotkey keydown event.\n * Supported player-wide hotkeys are:\n *\n * f - toggle fullscreen\n * m - toggle mute\n * k or Space - toggle play/pause\n *\n * @param {EventTarget~Event} event\n * The `keydown` event that caused this function to be called.\n */;_proto.handleHotkeys=function handleHotkeys(event){var hotkeys=this.options_.userActions?this.options_.userActions.hotkeys:{};// set fullscreenKey, muteKey, playPauseKey from `hotkeys`, use defaults if not set\nvar _hotkeys$fullscreenKe=hotkeys.fullscreenKey,fullscreenKey=_hotkeys$fullscreenKe===void 0?function(keydownEvent){return keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(keydownEvent,'f');}:_hotkeys$fullscreenKe,_hotkeys$muteKey=hotkeys.muteKey,muteKey=_hotkeys$muteKey===void 0?function(keydownEvent){return keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(keydownEvent,'m');}:_hotkeys$muteKey,_hotkeys$playPauseKey=hotkeys.playPauseKey,playPauseKey=_hotkeys$playPauseKey===void 0?function(keydownEvent){return keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(keydownEvent,'k')||keycode__WEBPACK_IMPORTED_MODULE_3___default.a.isEventKey(keydownEvent,'Space');}:_hotkeys$playPauseKey;if(fullscreenKey.call(this,event)){event.preventDefault();event.stopPropagation();var FSToggle=Component.getComponent('FullscreenToggle');if(global_document__WEBPACK_IMPORTED_MODULE_1___default.a[this.fsApi_.fullscreenEnabled]!==false){FSToggle.prototype.handleClick.call(this,event);}}else if(muteKey.call(this,event)){event.preventDefault();event.stopPropagation();var MuteToggle=Component.getComponent('MuteToggle');MuteToggle.prototype.handleClick.call(this,event);}else if(playPauseKey.call(this,event)){event.preventDefault();event.stopPropagation();var PlayToggle=Component.getComponent('PlayToggle');PlayToggle.prototype.handleClick.call(this,event);}}/**\n * Check whether the player can play a given mimetype\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype\n *\n * @param {string} type\n * The mimetype to check\n *\n * @return {string}\n * 'probably', 'maybe', or '' (empty string)\n */;_proto.canPlayType=function canPlayType(type){var can;// Loop through each playback technology in the options order\nfor(var i=0,j=this.options_.techOrder;i<j.length;i++){var techName=j[i];var tech=Tech.getTech(techName);// Support old behavior of techs being registered as components.\n// Remove once that deprecated behavior is removed.\nif(!tech){tech=Component.getComponent(techName);}// Check if the current tech is defined before continuing\nif(!tech){log.error(\"The \\\"\"+techName+\"\\\" tech is undefined. Skipped browser support check for that tech.\");continue;}// Check if the browser supports this technology\nif(tech.isSupported()){can=tech.canPlayType(type);if(can){return can;}}}return'';}/**\n * Select source based on tech-order or source-order\n * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,\n * defaults to tech-order selection\n *\n * @param {Array} sources\n * The sources for a media asset\n *\n * @return {Object|boolean}\n * Object of source and tech order or false\n */;_proto.selectSource=function selectSource(sources){var _this10=this;// Get only the techs specified in `techOrder` that exist and are supported by the\n// current platform\nvar techs=this.options_.techOrder.map(function(techName){return[techName,Tech.getTech(techName)];}).filter(function(_ref){var techName=_ref[0],tech=_ref[1];// Check if the current tech is defined before continuing\nif(tech){// Check if the browser supports this technology\nreturn tech.isSupported();}log.error(\"The \\\"\"+techName+\"\\\" tech is undefined. Skipped browser support check for that tech.\");return false;});// Iterate over each `innerArray` element once per `outerArray` element and execute\n// `tester` with both. If `tester` returns a non-falsy value, exit early and return\n// that value.\nvar findFirstPassingTechSourcePair=function findFirstPassingTechSourcePair(outerArray,innerArray,tester){var found;outerArray.some(function(outerChoice){return innerArray.some(function(innerChoice){found=tester(outerChoice,innerChoice);if(found){return true;}});});return found;};var foundSourceAndTech;var flip=function flip(fn){return function(a,b){return fn(b,a);};};var finder=function finder(_ref2,source){var techName=_ref2[0],tech=_ref2[1];if(tech.canPlaySource(source,_this10.options_[techName.toLowerCase()])){return{source:source,tech:techName};}};// Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources\n// to select from them based on their priority.\nif(this.options_.sourceOrder){// Source-first ordering\nfoundSourceAndTech=findFirstPassingTechSourcePair(sources,techs,flip(finder));}else{// Tech-first ordering\nfoundSourceAndTech=findFirstPassingTechSourcePair(techs,sources,finder);}return foundSourceAndTech||false;}/**\n * Get or set the video source.\n *\n * @param {Tech~SourceObject|Tech~SourceObject[]|string} [source]\n * A SourceObject, an array of SourceObjects, or a string referencing\n * a URL to a media source. It is _highly recommended_ that an object\n * or array of objects is used here, so that source selection\n * algorithms can take the `type` into account.\n *\n * If not provided, this method acts as a getter.\n *\n * @return {string|undefined}\n * If the `source` argument is missing, returns the current source\n * URL. Otherwise, returns nothing/undefined.\n */;_proto.src=function src(source){var _this11=this;// getter usage\nif(typeof source==='undefined'){return this.cache_.src||'';}// filter out invalid sources and turn our source into\n// an array of source objects\nvar sources=filterSource(source);// if a source was passed in then it is invalid because\n// it was filtered to a zero length Array. So we have to\n// show an error\nif(!sources.length){this.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)});},0);return;}// intial sources\nthis.changingSrc_=true;this.cache_.sources=sources;this.updateSourceCaches_(sources[0]);// middlewareSource is the source after it has been changed by middleware\nsetSource(this,sources[0],function(middlewareSource,mws){_this11.middleware_=mws;// since sourceSet is async we have to update the cache again after we select a source since\n// the source that is selected could be out of order from the cache update above this callback.\n_this11.cache_.sources=sources;_this11.updateSourceCaches_(middlewareSource);var err=_this11.src_(middlewareSource);if(err){if(sources.length>1){return _this11.src(sources.slice(1));}_this11.changingSrc_=false;// We need to wrap this in a timeout to give folks a chance to add error event handlers\n_this11.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)});},0);// we could not find an appropriate tech, but let's still notify the delegate that this is it\n// this needs a better comment about why this is needed\n_this11.triggerReady();return;}setTech(mws,_this11.tech_);});}/**\n * Set the source object on the tech, returns a boolean that indicates whether\n * there is a tech that can play the source or not\n *\n * @param {Tech~SourceObject} source\n * The source object to set on the Tech\n *\n * @return {boolean}\n * - True if there is no Tech to playback this source\n * - False otherwise\n *\n * @private\n */;_proto.src_=function src_(source){var _this12=this;var sourceTech=this.selectSource([source]);if(!sourceTech){return true;}if(!titleCaseEquals(sourceTech.tech,this.techName_)){this.changingSrc_=true;// load this technology with the chosen source\nthis.loadTech_(sourceTech.tech,sourceTech.source);this.tech_.ready(function(){_this12.changingSrc_=false;});return false;}// wait until the tech is ready to set the source\n// and set it synchronously if possible (#2326)\nthis.ready(function(){// The setSource tech method was added with source handlers\n// so older techs won't support it\n// We need to check the direct prototype for the case where subclasses\n// of the tech do not support source handlers\nif(this.tech_.constructor.prototype.hasOwnProperty('setSource')){this.techCall_('setSource',source);}else{this.techCall_('src',source.src);}this.changingSrc_=false;},true);return false;}/**\n * Begin loading the src data.\n */;_proto.load=function load(){this.techCall_('load');}/**\n * Reset the player. Loads the first tech in the techOrder,\n * removes all the text tracks in the existing `tech`,\n * and calls `reset` on the `tech`.\n */;_proto.reset=function reset(){var _this13=this;var PromiseClass=this.options_.Promise||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Promise;if(this.paused()||!PromiseClass){this.doReset_();}else{var playPromise=this.play();silencePromise(playPromise.then(function(){return _this13.doReset_();}));}};_proto.doReset_=function doReset_(){if(this.tech_){this.tech_.clearTracks('text');}this.resetCache_();this.poster('');this.loadTech_(this.options_.techOrder[0],null);this.techCall_('reset');this.resetControlBarUI_();if(isEvented(this)){this.trigger('playerreset');}}/**\n * Reset Control Bar's UI by calling sub-methods that reset\n * all of Control Bar's components\n */;_proto.resetControlBarUI_=function resetControlBarUI_(){this.resetProgressBar_();this.resetPlaybackRate_();this.resetVolumeBar_();}/**\n * Reset tech's progress so progress bar is reset in the UI\n */;_proto.resetProgressBar_=function resetProgressBar_(){this.currentTime(0);var _this$controlBar=this.controlBar,durationDisplay=_this$controlBar.durationDisplay,remainingTimeDisplay=_this$controlBar.remainingTimeDisplay;if(durationDisplay){durationDisplay.updateContent();}if(remainingTimeDisplay){remainingTimeDisplay.updateContent();}}/**\n * Reset Playback ratio\n */;_proto.resetPlaybackRate_=function resetPlaybackRate_(){this.playbackRate(this.defaultPlaybackRate());this.handleTechRateChange_();}/**\n * Reset Volume bar\n */;_proto.resetVolumeBar_=function resetVolumeBar_(){this.volume(1.0);this.trigger('volumechange');}/**\n * Returns all of the current source objects.\n *\n * @return {Tech~SourceObject[]}\n * The current source objects\n */;_proto.currentSources=function currentSources(){var source=this.currentSource();var sources=[];// assume `{}` or `{ src }`\nif(Object.keys(source).length!==0){sources.push(source);}return this.cache_.sources||sources;}/**\n * Returns the current source object.\n *\n * @return {Tech~SourceObject}\n * The current source object\n */;_proto.currentSource=function currentSource(){return this.cache_.source||{};}/**\n * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4\n * Can be used in conjunction with `currentType` to assist in rebuilding the current source object.\n *\n * @return {string}\n * The current source\n */;_proto.currentSrc=function currentSrc(){return this.currentSource()&&this.currentSource().src||'';}/**\n * Get the current source type e.g. video/mp4\n * This can allow you rebuild the current source object so that you could load the same\n * source and tech later\n *\n * @return {string}\n * The source MIME type\n */;_proto.currentType=function currentType(){return this.currentSource()&&this.currentSource().type||'';}/**\n * Get or set the preload attribute\n *\n * @param {boolean} [value]\n * - true means that we should preload\n * - false means that we should not preload\n *\n * @return {string}\n * The preload attribute value when getting\n */;_proto.preload=function preload(value){if(value!==undefined){this.techCall_('setPreload',value);this.options_.preload=value;return;}return this.techGet_('preload');}/**\n * Get or set the autoplay option. When this is a boolean it will\n * modify the attribute on the tech. When this is a string the attribute on\n * the tech will be removed and `Player` will handle autoplay on loadstarts.\n *\n * @param {boolean|string} [value]\n * - true: autoplay using the browser behavior\n * - false: do not autoplay\n * - 'play': call play() on every loadstart\n * - 'muted': call muted() then play() on every loadstart\n * - 'any': call play() on every loadstart. if that fails call muted() then play().\n * - *: values other than those listed here will be set `autoplay` to true\n *\n * @return {boolean|string}\n * The current value of autoplay when getting\n */;_proto.autoplay=function autoplay(value){// getter usage\nif(value===undefined){return this.options_.autoplay||false;}var techAutoplay;// if the value is a valid string set it to that\nif(typeof value==='string'&&/(any|play|muted)/.test(value)){this.options_.autoplay=value;this.manualAutoplay_(value);techAutoplay=false;// any falsy value sets autoplay to false in the browser,\n// lets do the same\n}else if(!value){this.options_.autoplay=false;// any other value (ie truthy) sets autoplay to true\n}else{this.options_.autoplay=true;}techAutoplay=typeof techAutoplay==='undefined'?this.options_.autoplay:techAutoplay;// if we don't have a tech then we do not queue up\n// a setAutoplay call on tech ready. We do this because the\n// autoplay option will be passed in the constructor and we\n// do not need to set it twice\nif(this.tech_){this.techCall_('setAutoplay',techAutoplay);}}/**\n * Set or unset the playsinline attribute.\n * Playsinline tells the browser that non-fullscreen playback is preferred.\n *\n * @param {boolean} [value]\n * - true means that we should try to play inline by default\n * - false means that we should use the browser's default playback mode,\n * which in most cases is inline. iOS Safari is a notable exception\n * and plays fullscreen by default.\n *\n * @return {string|Player}\n * - the current value of playsinline\n * - the player when setting\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline}\n */;_proto.playsinline=function playsinline(value){if(value!==undefined){this.techCall_('setPlaysinline',value);this.options_.playsinline=value;return this;}return this.techGet_('playsinline');}/**\n * Get or set the loop attribute on the video element.\n *\n * @param {boolean} [value]\n * - true means that we should loop the video\n * - false means that we should not loop the video\n *\n * @return {boolean}\n * The current value of loop when getting\n */;_proto.loop=function loop(value){if(value!==undefined){this.techCall_('setLoop',value);this.options_.loop=value;return;}return this.techGet_('loop');}/**\n * Get or set the poster image source url\n *\n * @fires Player#posterchange\n *\n * @param {string} [src]\n * Poster image source URL\n *\n * @return {string}\n * The current value of poster when getting\n */;_proto.poster=function poster(src){if(src===undefined){return this.poster_;}// The correct way to remove a poster is to set as an empty string\n// other falsey values will throw errors\nif(!src){src='';}if(src===this.poster_){return;}// update the internal poster variable\nthis.poster_=src;// update the tech's poster\nthis.techCall_('setPoster',src);this.isPosterFromTech_=false;// alert components that the poster has been set\n/**\n * This event fires when the poster image is changed on the player.\n *\n * @event Player#posterchange\n * @type {EventTarget~Event}\n */this.trigger('posterchange');}/**\n * Some techs (e.g. YouTube) can provide a poster source in an\n * asynchronous way. We want the poster component to use this\n * poster source so that it covers up the tech's controls.\n * (YouTube's play button). However we only want to use this\n * source if the player user hasn't set a poster through\n * the normal APIs.\n *\n * @fires Player#posterchange\n * @listens Tech#posterchange\n * @private\n */;_proto.handleTechPosterChange_=function handleTechPosterChange_(){if((!this.poster_||this.options_.techCanOverridePoster)&&this.tech_&&this.tech_.poster){var newPoster=this.tech_.poster()||'';if(newPoster!==this.poster_){this.poster_=newPoster;this.isPosterFromTech_=true;// Let components know the poster has changed\nthis.trigger('posterchange');}}}/**\n * Get or set whether or not the controls are showing.\n *\n * @fires Player#controlsenabled\n *\n * @param {boolean} [bool]\n * - true to turn controls on\n * - false to turn controls off\n *\n * @return {boolean}\n * The current value of controls when getting\n */;_proto.controls=function controls(bool){if(bool===undefined){return!!this.controls_;}bool=!!bool;// Don't trigger a change event unless it actually changed\nif(this.controls_===bool){return;}this.controls_=bool;if(this.usingNativeControls()){this.techCall_('setControls',bool);}if(this.controls_){this.removeClass('vjs-controls-disabled');this.addClass('vjs-controls-enabled');/**\n * @event Player#controlsenabled\n * @type {EventTarget~Event}\n */this.trigger('controlsenabled');if(!this.usingNativeControls()){this.addTechControlsListeners_();}}else{this.removeClass('vjs-controls-enabled');this.addClass('vjs-controls-disabled');/**\n * @event Player#controlsdisabled\n * @type {EventTarget~Event}\n */this.trigger('controlsdisabled');if(!this.usingNativeControls()){this.removeTechControlsListeners_();}}}/**\n * Toggle native controls on/off. Native controls are the controls built into\n * devices (e.g. default iPhone controls), Flash, or other techs\n * (e.g. Vimeo Controls)\n * **This should only be set by the current tech, because only the tech knows\n * if it can support native controls**\n *\n * @fires Player#usingnativecontrols\n * @fires Player#usingcustomcontrols\n *\n * @param {boolean} [bool]\n * - true to turn native controls on\n * - false to turn native controls off\n *\n * @return {boolean}\n * The current value of native controls when getting\n */;_proto.usingNativeControls=function usingNativeControls(bool){if(bool===undefined){return!!this.usingNativeControls_;}bool=!!bool;// Don't trigger a change event unless it actually changed\nif(this.usingNativeControls_===bool){return;}this.usingNativeControls_=bool;if(this.usingNativeControls_){this.addClass('vjs-using-native-controls');/**\n * player is using the native device controls\n *\n * @event Player#usingnativecontrols\n * @type {EventTarget~Event}\n */this.trigger('usingnativecontrols');}else{this.removeClass('vjs-using-native-controls');/**\n * player is using the custom HTML controls\n *\n * @event Player#usingcustomcontrols\n * @type {EventTarget~Event}\n */this.trigger('usingcustomcontrols');}}/**\n * Set or get the current MediaError\n *\n * @fires Player#error\n *\n * @param {MediaError|string|number} [err]\n * A MediaError or a string/number to be turned\n * into a MediaError\n *\n * @return {MediaError|null}\n * The current MediaError when getting (or null)\n */;_proto.error=function error(err){if(err===undefined){return this.error_||null;}// Suppress the first error message for no compatible source until\n// user interaction\nif(this.options_.suppressNotSupportedError&&err&&err.message&&err.message===this.localize(this.options_.notSupportedMessage)){var triggerSuppressedError=function triggerSuppressedError(){this.error(err);};this.options_.suppressNotSupportedError=false;this.any(['click','touchstart'],triggerSuppressedError);this.one('loadstart',function(){this.off(['click','touchstart'],triggerSuppressedError);});return;}// restoring to default\nif(err===null){this.error_=err;this.removeClass('vjs-error');if(this.errorDisplay){this.errorDisplay.close();}return;}this.error_=new MediaError(err);// add the vjs-error classname to the player\nthis.addClass('vjs-error');// log the name of the error type and any message\n// IE11 logs \"[object object]\" and required you to expand message to see error object\nlog.error(\"(CODE:\"+this.error_.code+\" \"+MediaError.errorTypes[this.error_.code]+\")\",this.error_.message,this.error_);/**\n * @event Player#error\n * @type {EventTarget~Event}\n */this.trigger('error');return;}/**\n * Report user activity\n *\n * @param {Object} event\n * Event object\n */;_proto.reportUserActivity=function reportUserActivity(event){this.userActivity_=true;}/**\n * Get/set if user is active\n *\n * @fires Player#useractive\n * @fires Player#userinactive\n *\n * @param {boolean} [bool]\n * - true if the user is active\n * - false if the user is inactive\n *\n * @return {boolean}\n * The current value of userActive when getting\n */;_proto.userActive=function userActive(bool){if(bool===undefined){return this.userActive_;}bool=!!bool;if(bool===this.userActive_){return;}this.userActive_=bool;if(this.userActive_){this.userActivity_=true;this.removeClass('vjs-user-inactive');this.addClass('vjs-user-active');/**\n * @event Player#useractive\n * @type {EventTarget~Event}\n */this.trigger('useractive');return;}// Chrome/Safari/IE have bugs where when you change the cursor it can\n// trigger a mousemove event. This causes an issue when you're hiding\n// the cursor when the user is inactive, and a mousemove signals user\n// activity. Making it impossible to go into inactive mode. Specifically\n// this happens in fullscreen when we really need to hide the cursor.\n//\n// When this gets resolved in ALL browsers it can be removed\n// https://code.google.com/p/chromium/issues/detail?id=103041\nif(this.tech_){this.tech_.one('mousemove',function(e){e.stopPropagation();e.preventDefault();});}this.userActivity_=false;this.removeClass('vjs-user-active');this.addClass('vjs-user-inactive');/**\n * @event Player#userinactive\n * @type {EventTarget~Event}\n */this.trigger('userinactive');}/**\n * Listen for user activity based on timeout value\n *\n * @private\n */;_proto.listenForUserActivity_=function listenForUserActivity_(){var mouseInProgress;var lastMoveX;var lastMoveY;var handleActivity=bind(this,this.reportUserActivity);var handleMouseMove=function handleMouseMove(e){// #1068 - Prevent mousemove spamming\n// Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970\nif(e.screenX!==lastMoveX||e.screenY!==lastMoveY){lastMoveX=e.screenX;lastMoveY=e.screenY;handleActivity();}};var handleMouseDown=function handleMouseDown(){handleActivity();// For as long as the they are touching the device or have their mouse down,\n// we consider them active even if they're not moving their finger or mouse.\n// So we want to continue to update that they are active\nthis.clearInterval(mouseInProgress);// Setting userActivity=true now and setting the interval to the same time\n// as the activityCheck interval (250) should ensure we never miss the\n// next activityCheck\nmouseInProgress=this.setInterval(handleActivity,250);};var handleMouseUp=function handleMouseUp(event){handleActivity();// Stop the interval that maintains activity if the mouse/touch is down\nthis.clearInterval(mouseInProgress);};// Any mouse movement will be considered user activity\nthis.on('mousedown',handleMouseDown);this.on('mousemove',handleMouseMove);this.on('mouseup',handleMouseUp);var controlBar=this.getChild('controlBar');// Fixes bug on Android & iOS where when tapping progressBar (when control bar is displayed)\n// controlBar would no longer be hidden by default timeout.\nif(controlBar&&!IS_IOS&&!IS_ANDROID){controlBar.on('mouseenter',function(event){this.player().cache_.inactivityTimeout=this.player().options_.inactivityTimeout;this.player().options_.inactivityTimeout=0;});controlBar.on('mouseleave',function(event){this.player().options_.inactivityTimeout=this.player().cache_.inactivityTimeout;});}// Listen for keyboard navigation\n// Shouldn't need to use inProgress interval because of key repeat\nthis.on('keydown',handleActivity);this.on('keyup',handleActivity);// Run an interval every 250 milliseconds instead of stuffing everything into\n// the mousemove/touchmove function itself, to prevent performance degradation.\n// `this.reportUserActivity` simply sets this.userActivity_ to true, which\n// then gets picked up by this loop\n// http://ejohn.org/blog/learning-from-twitter/\nvar inactivityTimeout;this.setInterval(function(){// Check to see if mouse/touch activity has happened\nif(!this.userActivity_){return;}// Reset the activity tracker\nthis.userActivity_=false;// If the user state was inactive, set the state to active\nthis.userActive(true);// Clear any existing inactivity timeout to start the timer over\nthis.clearTimeout(inactivityTimeout);var timeout=this.options_.inactivityTimeout;if(timeout<=0){return;}// In <timeout> milliseconds, if no more activity has occurred the\n// user will be considered inactive\ninactivityTimeout=this.setTimeout(function(){// Protect against the case where the inactivityTimeout can trigger just\n// before the next user activity is picked up by the activity check loop\n// causing a flicker\nif(!this.userActivity_){this.userActive(false);}},timeout);},250);}/**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {number} [rate]\n * New playback rate to set.\n *\n * @return {number}\n * The current playback rate when getting or 1.0\n */;_proto.playbackRate=function playbackRate(rate){if(rate!==undefined){// NOTE: this.cache_.lastPlaybackRate is set from the tech handler\n// that is registered above\nthis.techCall_('setPlaybackRate',rate);return;}if(this.tech_&&this.tech_.featuresPlaybackRate){return this.cache_.lastPlaybackRate||this.techGet_('playbackRate');}return 1.0;}/**\n * Gets or sets the current default playback rate. A default playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed playback, for instance.\n * defaultPlaybackRate will only represent what the initial playbackRate of a video was, not\n * not the current playbackRate.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-defaultplaybackrate\n *\n * @param {number} [rate]\n * New default playback rate to set.\n *\n * @return {number|Player}\n * - The default playback rate when getting or 1.0\n * - the player when setting\n */;_proto.defaultPlaybackRate=function defaultPlaybackRate(rate){if(rate!==undefined){return this.techCall_('setDefaultPlaybackRate',rate);}if(this.tech_&&this.tech_.featuresPlaybackRate){return this.techGet_('defaultPlaybackRate');}return 1.0;}/**\n * Gets or sets the audio flag\n *\n * @param {boolean} bool\n * - true signals that this is an audio player\n * - false signals that this is not an audio player\n *\n * @return {boolean}\n * The current value of isAudio when getting\n */;_proto.isAudio=function isAudio(bool){if(bool!==undefined){this.isAudio_=!!bool;return;}return!!this.isAudio_;}/**\n * A helper method for adding a {@link TextTrack} to our\n * {@link TextTrackList}.\n *\n * In addition to the W3C settings we allow adding additional info through options.\n *\n * @see http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {string} [kind]\n * the kind of TextTrack you are adding\n *\n * @param {string} [label]\n * the label to give the TextTrack label\n *\n * @param {string} [language]\n * the language to set on the TextTrack\n *\n * @return {TextTrack|undefined}\n * the TextTrack that was added or undefined\n * if there is no tech\n */;_proto.addTextTrack=function addTextTrack(kind,label,language){if(this.tech_){return this.tech_.addTextTrack(kind,label,language);}}/**\n * Create a remote {@link TextTrack} and an {@link HTMLTrackElement}. It will\n * automatically removed from the video element whenever the source changes, unless\n * manualCleanup is set to false.\n *\n * @param {Object} options\n * Options to pass to {@link HTMLTrackElement} during creation. See\n * {@link HTMLTrackElement} for object properties that you should use.\n *\n * @param {boolean} [manualCleanup=true] if set to false, the TextTrack will be\n *\n * @return {HtmlTrackElement}\n * the HTMLTrackElement that was created and added\n * to the HtmlTrackElementList and the remote\n * TextTrackList\n *\n * @deprecated The default value of the \"manualCleanup\" parameter will default\n * to \"false\" in upcoming versions of Video.js\n */;_proto.addRemoteTextTrack=function addRemoteTextTrack(options,manualCleanup){if(this.tech_){return this.tech_.addRemoteTextTrack(options,manualCleanup);}}/**\n * Remove a remote {@link TextTrack} from the respective\n * {@link TextTrackList} and {@link HtmlTrackElementList}.\n *\n * @param {Object} track\n * Remote {@link TextTrack} to remove\n *\n * @return {undefined}\n * does not return anything\n */;_proto.removeRemoteTextTrack=function removeRemoteTextTrack(obj){if(obj===void 0){obj={};}var _obj=obj,track=_obj.track;if(!track){track=obj;}// destructure the input into an object with a track argument, defaulting to arguments[0]\n// default the whole argument to an empty object if nothing was passed in\nif(this.tech_){return this.tech_.removeRemoteTextTrack(track);}}/**\n * Gets available media playback quality metrics as specified by the W3C's Media\n * Playback Quality API.\n *\n * @see [Spec]{@link https://wicg.github.io/media-playback-quality}\n *\n * @return {Object|undefined}\n * An object with supported media playback quality metrics or undefined if there\n * is no tech or the tech does not support it.\n */;_proto.getVideoPlaybackQuality=function getVideoPlaybackQuality(){return this.techGet_('getVideoPlaybackQuality');}/**\n * Get video width\n *\n * @return {number}\n * current video width\n */;_proto.videoWidth=function videoWidth(){return this.tech_&&this.tech_.videoWidth&&this.tech_.videoWidth()||0;}/**\n * Get video height\n *\n * @return {number}\n * current video height\n */;_proto.videoHeight=function videoHeight(){return this.tech_&&this.tech_.videoHeight&&this.tech_.videoHeight()||0;}/**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the language\n * later will not update controls text.\n *\n * @param {string} [code]\n * the language code to set the player to\n *\n * @return {string}\n * The current language code when getting\n */;_proto.language=function language(code){if(code===undefined){return this.language_;}this.language_=String(code).toLowerCase();}/**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array}\n * An array of of supported languages\n */;_proto.languages=function languages(){return mergeOptions(Player.prototype.options_.languages,this.languages_);}/**\n * returns a JavaScript object reperesenting the current track\n * information. **DOES not return it as JSON**\n *\n * @return {Object}\n * Object representing the current of track info\n */;_proto.toJSON=function toJSON(){var options=mergeOptions(this.options_);var tracks=options.tracks;options.tracks=[];for(var i=0;i<tracks.length;i++){var track=tracks[i];// deep merge tracks and null out player so no circular references\ntrack=mergeOptions(track);track.player=undefined;options.tracks[i]=track;}return options;}/**\n * Creates a simple modal dialog (an instance of the {@link ModalDialog}\n * component) that immediately overlays the player with arbitrary\n * content and removes itself when closed.\n *\n * @param {string|Function|Element|Array|null} content\n * Same as {@link ModalDialog#content}'s param of the same name.\n * The most straight-forward usage is to provide a string or DOM\n * element.\n *\n * @param {Object} [options]\n * Extra options which will be passed on to the {@link ModalDialog}.\n *\n * @return {ModalDialog}\n * the {@link ModalDialog} that was created\n */;_proto.createModal=function createModal(content,options){var _this14=this;options=options||{};options.content=content||'';var modal=new ModalDialog(this,options);this.addChild(modal);modal.on('dispose',function(){_this14.removeChild(modal);});modal.open();return modal;}/**\n * Change breakpoint classes when the player resizes.\n *\n * @private\n */;_proto.updateCurrentBreakpoint_=function updateCurrentBreakpoint_(){if(!this.responsive()){return;}var currentBreakpoint=this.currentBreakpoint();var currentWidth=this.currentWidth();for(var i=0;i<BREAKPOINT_ORDER.length;i++){var candidateBreakpoint=BREAKPOINT_ORDER[i];var maxWidth=this.breakpoints_[candidateBreakpoint];if(currentWidth<=maxWidth){// The current breakpoint did not change, nothing to do.\nif(currentBreakpoint===candidateBreakpoint){return;}// Only remove a class if there is a current breakpoint.\nif(currentBreakpoint){this.removeClass(BREAKPOINT_CLASSES[currentBreakpoint]);}this.addClass(BREAKPOINT_CLASSES[candidateBreakpoint]);this.breakpoint_=candidateBreakpoint;break;}}}/**\n * Removes the current breakpoint.\n *\n * @private\n */;_proto.removeCurrentBreakpoint_=function removeCurrentBreakpoint_(){var className=this.currentBreakpointClass();this.breakpoint_='';if(className){this.removeClass(className);}}/**\n * Get or set breakpoints on the player.\n *\n * Calling this method with an object or `true` will remove any previous\n * custom breakpoints and start from the defaults again.\n *\n * @param {Object|boolean} [breakpoints]\n * If an object is given, it can be used to provide custom\n * breakpoints. If `true` is given, will set default breakpoints.\n * If this argument is not given, will simply return the current\n * breakpoints.\n *\n * @param {number} [breakpoints.tiny]\n * The maximum width for the \"vjs-layout-tiny\" class.\n *\n * @param {number} [breakpoints.xsmall]\n * The maximum width for the \"vjs-layout-x-small\" class.\n *\n * @param {number} [breakpoints.small]\n * The maximum width for the \"vjs-layout-small\" class.\n *\n * @param {number} [breakpoints.medium]\n * The maximum width for the \"vjs-layout-medium\" class.\n *\n * @param {number} [breakpoints.large]\n * The maximum width for the \"vjs-layout-large\" class.\n *\n * @param {number} [breakpoints.xlarge]\n * The maximum width for the \"vjs-layout-x-large\" class.\n *\n * @param {number} [breakpoints.huge]\n * The maximum width for the \"vjs-layout-huge\" class.\n *\n * @return {Object}\n * An object mapping breakpoint names to maximum width values.\n */;_proto.breakpoints=function breakpoints(_breakpoints){// Used as a getter.\nif(_breakpoints===undefined){return assign(this.breakpoints_);}this.breakpoint_='';this.breakpoints_=assign({},DEFAULT_BREAKPOINTS,_breakpoints);// When breakpoint definitions change, we need to update the currently\n// selected breakpoint.\nthis.updateCurrentBreakpoint_();// Clone the breakpoints before returning.\nreturn assign(this.breakpoints_);}/**\n * Get or set a flag indicating whether or not this player should adjust\n * its UI based on its dimensions.\n *\n * @param {boolean} value\n * Should be `true` if the player should adjust its UI based on its\n * dimensions; otherwise, should be `false`.\n *\n * @return {boolean}\n * Will be `true` if this player should adjust its UI based on its\n * dimensions; otherwise, will be `false`.\n */;_proto.responsive=function responsive(value){// Used as a getter.\nif(value===undefined){return this.responsive_;}value=Boolean(value);var current=this.responsive_;// Nothing changed.\nif(value===current){return;}// The value actually changed, set it.\nthis.responsive_=value;// Start listening for breakpoints and set the initial breakpoint if the\n// player is now responsive.\nif(value){this.on('playerresize',this.updateCurrentBreakpoint_);this.updateCurrentBreakpoint_();// Stop listening for breakpoints if the player is no longer responsive.\n}else{this.off('playerresize',this.updateCurrentBreakpoint_);this.removeCurrentBreakpoint_();}return value;}/**\n * Get current breakpoint name, if any.\n *\n * @return {string}\n * If there is currently a breakpoint set, returns a the key from the\n * breakpoints object matching it. Otherwise, returns an empty string.\n */;_proto.currentBreakpoint=function currentBreakpoint(){return this.breakpoint_;}/**\n * Get the current breakpoint class name.\n *\n * @return {string}\n * The matching class name (e.g. `\"vjs-layout-tiny\"` or\n * `\"vjs-layout-large\"`) for the current breakpoint. Empty string if\n * there is no current breakpoint.\n */;_proto.currentBreakpointClass=function currentBreakpointClass(){return BREAKPOINT_CLASSES[this.breakpoint_]||'';}/**\n * An object that describes a single piece of media.\n *\n * Properties that are not part of this type description will be retained; so,\n * this can be viewed as a generic metadata storage mechanism as well.\n *\n * @see {@link https://wicg.github.io/mediasession/#the-mediametadata-interface}\n * @typedef {Object} Player~MediaObject\n *\n * @property {string} [album]\n * Unused, except if this object is passed to the `MediaSession`\n * API.\n *\n * @property {string} [artist]\n * Unused, except if this object is passed to the `MediaSession`\n * API.\n *\n * @property {Object[]} [artwork]\n * Unused, except if this object is passed to the `MediaSession`\n * API. If not specified, will be populated via the `poster`, if\n * available.\n *\n * @property {string} [poster]\n * URL to an image that will display before playback.\n *\n * @property {Tech~SourceObject|Tech~SourceObject[]|string} [src]\n * A single source object, an array of source objects, or a string\n * referencing a URL to a media source. It is _highly recommended_\n * that an object or array of objects is used here, so that source\n * selection algorithms can take the `type` into account.\n *\n * @property {string} [title]\n * Unused, except if this object is passed to the `MediaSession`\n * API.\n *\n * @property {Object[]} [textTracks]\n * An array of objects to be used to create text tracks, following\n * the {@link https://www.w3.org/TR/html50/embedded-content-0.html#the-track-element|native track element format}.\n * For ease of removal, these will be created as \"remote\" text\n * tracks and set to automatically clean up on source changes.\n *\n * These objects may have properties like `src`, `kind`, `label`,\n * and `language`, see {@link Tech#createRemoteTextTrack}.\n */ /**\n * Populate the player using a {@link Player~MediaObject|MediaObject}.\n *\n * @param {Player~MediaObject} media\n * A media object.\n *\n * @param {Function} ready\n * A callback to be called when the player is ready.\n */;_proto.loadMedia=function loadMedia(media,ready){var _this15=this;if(!media||_typeof(media)!=='object'){return;}this.reset();// Clone the media object so it cannot be mutated from outside.\nthis.cache_.media=mergeOptions(media);var _this$cache_$media=this.cache_.media,artwork=_this$cache_$media.artwork,poster=_this$cache_$media.poster,src=_this$cache_$media.src,textTracks=_this$cache_$media.textTracks;// If `artwork` is not given, create it using `poster`.\nif(!artwork&&poster){this.cache_.media.artwork=[{src:poster,type:getMimetype(poster)}];}if(src){this.src(src);}if(poster){this.poster(poster);}if(Array.isArray(textTracks)){textTracks.forEach(function(tt){return _this15.addRemoteTextTrack(tt,false);});}this.ready(ready);}/**\n * Get a clone of the current {@link Player~MediaObject} for this player.\n *\n * If the `loadMedia` method has not been used, will attempt to return a\n * {@link Player~MediaObject} based on the current state of the player.\n *\n * @return {Player~MediaObject}\n */;_proto.getMedia=function getMedia(){if(!this.cache_.media){var poster=this.poster();var src=this.currentSources();var textTracks=Array.prototype.map.call(this.remoteTextTracks(),function(tt){return{kind:tt.kind,label:tt.label,language:tt.language,src:tt.src};});var media={src:src,textTracks:textTracks};if(poster){media.poster=poster;media.artwork=[{src:media.poster,type:getMimetype(media.poster)}];}return media;}return mergeOptions(this.cache_.media);}/**\n * Gets tag settings\n *\n * @param {Element} tag\n * The player tag\n *\n * @return {Object}\n * An object containing all of the settings\n * for a player tag\n */;Player.getTagSettings=function getTagSettings(tag){var baseOptions={sources:[],tracks:[]};var tagOptions=getAttributes(tag);var dataSetup=tagOptions['data-setup'];if(hasClass(tag,'vjs-fill')){tagOptions.fill=true;}if(hasClass(tag,'vjs-fluid')){tagOptions.fluid=true;}// Check if data-setup attr exists.\nif(dataSetup!==null){// Parse options JSON\n// If empty string, make it a parsable json object.\nvar _safeParseTuple=safe_json_parse_tuple__WEBPACK_IMPORTED_MODULE_2___default()(dataSetup||'{}'),err=_safeParseTuple[0],data=_safeParseTuple[1];if(err){log.error(err);}assign(tagOptions,data);}assign(baseOptions,tagOptions);// Get tag children settings\nif(tag.hasChildNodes()){var children=tag.childNodes;for(var i=0,j=children.length;i<j;i++){var child=children[i];// Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\nvar childName=child.nodeName.toLowerCase();if(childName==='source'){baseOptions.sources.push(getAttributes(child));}else if(childName==='track'){baseOptions.tracks.push(getAttributes(child));}}}return baseOptions;}/**\n * Determine whether or not flexbox is supported\n *\n * @return {boolean}\n * - true if flexbox is supported\n * - false if flexbox is not supported\n */;_proto.flexNotSupported_=function flexNotSupported_(){var elem=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('i');// Note: We don't actually use flexBasis (or flexOrder), but it's one of the more\n// common flex features that we can rely on when checking for flex support.\nreturn!('flexBasis'in elem.style||'webkitFlexBasis'in elem.style||'mozFlexBasis'in elem.style||'msFlexBasis'in elem.style||// IE10-specific (2012 flex spec), available for completeness\n'msFlexOrder'in elem.style);};return Player;}(Component);/**\n * Get the {@link VideoTrackList}\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n *\n * @return {VideoTrackList}\n * the current video track list\n *\n * @method Player.prototype.videoTracks\n */ /**\n * Get the {@link AudioTrackList}\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n *\n * @return {AudioTrackList}\n * the current audio track list\n *\n * @method Player.prototype.audioTracks\n */ /**\n * Get the {@link TextTrackList}\n *\n * @link http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {TextTrackList}\n * the current text track list\n *\n * @method Player.prototype.textTracks\n */ /**\n * Get the remote {@link TextTrackList}\n *\n * @return {TextTrackList}\n * The current remote text track list\n *\n * @method Player.prototype.remoteTextTracks\n */ /**\n * Get the remote {@link HtmlTrackElementList} tracks.\n *\n * @return {HtmlTrackElementList}\n * The current remote text track element list\n *\n * @method Player.prototype.remoteTextTrackEls\n */ALL.names.forEach(function(name){var props=ALL[name];Player.prototype[props.getterName]=function(){if(this.tech_){return this.tech_[props.getterName]();}// if we have not yet loadTech_, we create {video,audio,text}Tracks_\n// these will be passed to the tech during loading\nthis[props.privateName]=this[props.privateName]||new props.ListClass();return this[props.privateName];};});/**\n * Global enumeration of players.\n *\n * The keys are the player IDs and the values are either the {@link Player}\n * instance or `null` for disposed players.\n *\n * @type {Object}\n */Player.players={};var navigator=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator;/*\n * Player instance options, surfaced using options\n * options = Player.prototype.options_\n * Make changes in options, not here.\n *\n * @type {Object}\n * @private\n */Player.prototype.options_={// Default order of fallback technology\ntechOrder:Tech.defaultTechOrder_,html5:{},flash:{},// default inactivity timeout\ninactivityTimeout:2000,// default playback rates\nplaybackRates:[],// Add playback rate selection by adding rates\n// 'playbackRates': [0.5, 1, 1.5, 2],\nliveui:false,// Included control sets\nchildren:['mediaLoader','posterImage','textTrackDisplay','loadingSpinner','bigPlayButton','liveTracker','controlBar','errorDisplay','textTrackSettings','resizeManager'],language:navigator&&(navigator.languages&&navigator.languages[0]||navigator.userLanguage||navigator.language)||'en',// locales and their language translations\nlanguages:{},// Default message to show when a video cannot be played.\nnotSupportedMessage:'No compatible source was found for this media.',fullscreen:{options:{navigationUI:'hide'}},breakpoints:{},responsive:false};[/**\n * Returns whether or not the player is in the \"ended\" state.\n *\n * @return {Boolean} True if the player is in the ended state, false if not.\n * @method Player#ended\n */'ended',/**\n * Returns whether or not the player is in the \"seeking\" state.\n *\n * @return {Boolean} True if the player is in the seeking state, false if not.\n * @method Player#seeking\n */'seeking',/**\n * Returns the TimeRanges of the media that are currently available\n * for seeking to.\n *\n * @return {TimeRanges} the seekable intervals of the media timeline\n * @method Player#seekable\n */'seekable',/**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {number} the current network activity state\n * @method Player#networkState\n */'networkState',/**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {number} the current playback rendering state\n * @method Player#readyState\n */'readyState'].forEach(function(fn){Player.prototype[fn]=function(){return this.techGet_(fn);};});TECH_EVENTS_RETRIGGER.forEach(function(event){Player.prototype[\"handleTech\"+toTitleCase(event)+\"_\"]=function(){return this.trigger(event);};});/**\n * Fired when the player has initial duration and dimension information\n *\n * @event Player#loadedmetadata\n * @type {EventTarget~Event}\n */ /**\n * Fired when the player has downloaded data at the current playback position\n *\n * @event Player#loadeddata\n * @type {EventTarget~Event}\n */ /**\n * Fired when the current playback position has changed *\n * During playback this is fired every 15-250 milliseconds, depending on the\n * playback technology in use.\n *\n * @event Player#timeupdate\n * @type {EventTarget~Event}\n */ /**\n * Fired when the volume changes\n *\n * @event Player#volumechange\n * @type {EventTarget~Event}\n */ /**\n * Reports whether or not a player has a plugin available.\n *\n * This does not report whether or not the plugin has ever been initialized\n * on this player. For that, [usingPlugin]{@link Player#usingPlugin}.\n *\n * @method Player#hasPlugin\n * @param {string} name\n * The name of a plugin.\n *\n * @return {boolean}\n * Whether or not this player has the requested plugin available.\n */ /**\n * Reports whether or not a player is using a plugin by name.\n *\n * For basic plugins, this only reports whether the plugin has _ever_ been\n * initialized on this player.\n *\n * @method Player#usingPlugin\n * @param {string} name\n * The name of a plugin.\n *\n * @return {boolean}\n * Whether or not this player is using the requested plugin.\n */Component.registerComponent('Player',Player);/**\n * The base plugin name.\n *\n * @private\n * @constant\n * @type {string}\n */var BASE_PLUGIN_NAME='plugin';/**\n * The key on which a player's active plugins cache is stored.\n *\n * @private\n * @constant\n * @type {string}\n */var PLUGIN_CACHE_KEY='activePlugins_';/**\n * Stores registered plugins in a private space.\n *\n * @private\n * @type {Object}\n */var pluginStorage={};/**\n * Reports whether or not a plugin has been registered.\n *\n * @private\n * @param {string} name\n * The name of a plugin.\n *\n * @return {boolean}\n * Whether or not the plugin has been registered.\n */var pluginExists=function pluginExists(name){return pluginStorage.hasOwnProperty(name);};/**\n * Get a single registered plugin by name.\n *\n * @private\n * @param {string} name\n * The name of a plugin.\n *\n * @return {Function|undefined}\n * The plugin (or undefined).\n */var getPlugin=function getPlugin(name){return pluginExists(name)?pluginStorage[name]:undefined;};/**\n * Marks a plugin as \"active\" on a player.\n *\n * Also, ensures that the player has an object for tracking active plugins.\n *\n * @private\n * @param {Player} player\n * A Video.js player instance.\n *\n * @param {string} name\n * The name of a plugin.\n */var markPluginAsActive=function markPluginAsActive(player,name){player[PLUGIN_CACHE_KEY]=player[PLUGIN_CACHE_KEY]||{};player[PLUGIN_CACHE_KEY][name]=true;};/**\n * Triggers a pair of plugin setup events.\n *\n * @private\n * @param {Player} player\n * A Video.js player instance.\n *\n * @param {Plugin~PluginEventHash} hash\n * A plugin event hash.\n *\n * @param {boolean} [before]\n * If true, prefixes the event name with \"before\". In other words,\n * use this to trigger \"beforepluginsetup\" instead of \"pluginsetup\".\n */var triggerSetupEvent=function triggerSetupEvent(player,hash,before){var eventName=(before?'before':'')+'pluginsetup';player.trigger(eventName,hash);player.trigger(eventName+':'+hash.name,hash);};/**\n * Takes a basic plugin function and returns a wrapper function which marks\n * on the player that the plugin has been activated.\n *\n * @private\n * @param {string} name\n * The name of the plugin.\n *\n * @param {Function} plugin\n * The basic plugin.\n *\n * @return {Function}\n * A wrapper function for the given plugin.\n */var createBasicPlugin=function createBasicPlugin(name,plugin){var basicPluginWrapper=function basicPluginWrapper(){// We trigger the \"beforepluginsetup\" and \"pluginsetup\" events on the player\n// regardless, but we want the hash to be consistent with the hash provided\n// for advanced plugins.\n//\n// The only potentially counter-intuitive thing here is the `instance` in\n// the \"pluginsetup\" event is the value returned by the `plugin` function.\ntriggerSetupEvent(this,{name:name,plugin:plugin,instance:null},true);var instance=plugin.apply(this,arguments);markPluginAsActive(this,name);triggerSetupEvent(this,{name:name,plugin:plugin,instance:instance});return instance;};Object.keys(plugin).forEach(function(prop){basicPluginWrapper[prop]=plugin[prop];});return basicPluginWrapper;};/**\n * Takes a plugin sub-class and returns a factory function for generating\n * instances of it.\n *\n * This factory function will replace itself with an instance of the requested\n * sub-class of Plugin.\n *\n * @private\n * @param {string} name\n * The name of the plugin.\n *\n * @param {Plugin} PluginSubClass\n * The advanced plugin.\n *\n * @return {Function}\n */var createPluginFactory=function createPluginFactory(name,PluginSubClass){// Add a `name` property to the plugin prototype so that each plugin can\n// refer to itself by name.\nPluginSubClass.prototype.name=name;return function(){triggerSetupEvent(this,{name:name,plugin:PluginSubClass,instance:null},true);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var instance=_construct(PluginSubClass,[this].concat(args));// The plugin is replaced by a function that returns the current instance.\nthis[name]=function(){return instance;};triggerSetupEvent(this,instance.getEventHash());return instance;};};/**\n * Parent class for all advanced plugins.\n *\n * @mixes module:evented~EventedMixin\n * @mixes module:stateful~StatefulMixin\n * @fires Player#beforepluginsetup\n * @fires Player#beforepluginsetup:$name\n * @fires Player#pluginsetup\n * @fires Player#pluginsetup:$name\n * @listens Player#dispose\n * @throws {Error}\n * If attempting to instantiate the base {@link Plugin} class\n * directly instead of via a sub-class.\n */var Plugin=/*#__PURE__*/function(){/**\n * Creates an instance of this class.\n *\n * Sub-classes should call `super` to ensure plugins are properly initialized.\n *\n * @param {Player} player\n * A Video.js player instance.\n */function Plugin(player){if(this.constructor===Plugin){throw new Error('Plugin must be sub-classed; not directly instantiated.');}this.player=player;// Make this object evented, but remove the added `trigger` method so we\n// use the prototype version instead.\nevented(this);delete this.trigger;stateful(this,this.constructor.defaultState);markPluginAsActive(player,this.name);// Auto-bind the dispose method so we can use it as a listener and unbind\n// it later easily.\nthis.dispose=bind(this,this.dispose);// If the player is disposed, dispose the plugin.\nplayer.on('dispose',this.dispose);}/**\n * Get the version of the plugin that was set on <pluginName>.VERSION\n */var _proto=Plugin.prototype;_proto.version=function version(){return this.constructor.VERSION;}/**\n * Each event triggered by plugins includes a hash of additional data with\n * conventional properties.\n *\n * This returns that object or mutates an existing hash.\n *\n * @param {Object} [hash={}]\n * An object to be used as event an event hash.\n *\n * @return {Plugin~PluginEventHash}\n * An event hash object with provided properties mixed-in.\n */;_proto.getEventHash=function getEventHash(hash){if(hash===void 0){hash={};}hash.name=this.name;hash.plugin=this.constructor;hash.instance=this;return hash;}/**\n * Triggers an event on the plugin object and overrides\n * {@link module:evented~EventedMixin.trigger|EventedMixin.trigger}.\n *\n * @param {string|Object} event\n * An event type or an object with a type property.\n *\n * @param {Object} [hash={}]\n * Additional data hash to merge with a\n * {@link Plugin~PluginEventHash|PluginEventHash}.\n *\n * @return {boolean}\n * Whether or not default was prevented.\n */;_proto.trigger=function trigger$1(event,hash){if(hash===void 0){hash={};}return trigger(this.eventBusEl_,event,this.getEventHash(hash));}/**\n * Handles \"statechanged\" events on the plugin. No-op by default, override by\n * subclassing.\n *\n * @abstract\n * @param {Event} e\n * An event object provided by a \"statechanged\" event.\n *\n * @param {Object} e.changes\n * An object describing changes that occurred with the \"statechanged\"\n * event.\n */;_proto.handleStateChanged=function handleStateChanged(e){}/**\n * Disposes a plugin.\n *\n * Subclasses can override this if they want, but for the sake of safety,\n * it's probably best to subscribe the \"dispose\" event.\n *\n * @fires Plugin#dispose\n */;_proto.dispose=function dispose(){var name=this.name,player=this.player;/**\n * Signals that a advanced plugin is about to be disposed.\n *\n * @event Plugin#dispose\n * @type {EventTarget~Event}\n */this.trigger('dispose');this.off();player.off('dispose',this.dispose);// Eliminate any possible sources of leaking memory by clearing up\n// references between the player and the plugin instance and nulling out\n// the plugin's state and replacing methods with a function that throws.\nplayer[PLUGIN_CACHE_KEY][name]=false;this.player=this.state=null;// Finally, replace the plugin name on the player with a new factory\n// function, so that the plugin is ready to be set up again.\nplayer[name]=createPluginFactory(name,pluginStorage[name]);}/**\n * Determines if a plugin is a basic plugin (i.e. not a sub-class of `Plugin`).\n *\n * @param {string|Function} plugin\n * If a string, matches the name of a plugin. If a function, will be\n * tested directly.\n *\n * @return {boolean}\n * Whether or not a plugin is a basic plugin.\n */;Plugin.isBasic=function isBasic(plugin){var p=typeof plugin==='string'?getPlugin(plugin):plugin;return typeof p==='function'&&!Plugin.prototype.isPrototypeOf(p.prototype);}/**\n * Register a Video.js plugin.\n *\n * @param {string} name\n * The name of the plugin to be registered. Must be a string and\n * must not match an existing plugin or a method on the `Player`\n * prototype.\n *\n * @param {Function} plugin\n * A sub-class of `Plugin` or a function for basic plugins.\n *\n * @return {Function}\n * For advanced plugins, a factory function for that plugin. For\n * basic plugins, a wrapper function that initializes the plugin.\n */;Plugin.registerPlugin=function registerPlugin(name,plugin){if(typeof name!=='string'){throw new Error(\"Illegal plugin name, \\\"\"+name+\"\\\", must be a string, was \"+_typeof(name)+\".\");}if(pluginExists(name)){log.warn(\"A plugin named \\\"\"+name+\"\\\" already exists. You may want to avoid re-registering plugins!\");}else if(Player.prototype.hasOwnProperty(name)){throw new Error(\"Illegal plugin name, \\\"\"+name+\"\\\", cannot share a name with an existing player method!\");}if(typeof plugin!=='function'){throw new Error(\"Illegal plugin for \\\"\"+name+\"\\\", must be a function, was \"+_typeof(plugin)+\".\");}pluginStorage[name]=plugin;// Add a player prototype method for all sub-classed plugins (but not for\n// the base Plugin class).\nif(name!==BASE_PLUGIN_NAME){if(Plugin.isBasic(plugin)){Player.prototype[name]=createBasicPlugin(name,plugin);}else{Player.prototype[name]=createPluginFactory(name,plugin);}}return plugin;}/**\n * De-register a Video.js plugin.\n *\n * @param {string} name\n * The name of the plugin to be de-registered. Must be a string that\n * matches an existing plugin.\n *\n * @throws {Error}\n * If an attempt is made to de-register the base plugin.\n */;Plugin.deregisterPlugin=function deregisterPlugin(name){if(name===BASE_PLUGIN_NAME){throw new Error('Cannot de-register base plugin.');}if(pluginExists(name)){delete pluginStorage[name];delete Player.prototype[name];}}/**\n * Gets an object containing multiple Video.js plugins.\n *\n * @param {Array} [names]\n * If provided, should be an array of plugin names. Defaults to _all_\n * plugin names.\n *\n * @return {Object|undefined}\n * An object containing plugin(s) associated with their name(s) or\n * `undefined` if no matching plugins exist).\n */;Plugin.getPlugins=function getPlugins(names){if(names===void 0){names=Object.keys(pluginStorage);}var result;names.forEach(function(name){var plugin=getPlugin(name);if(plugin){result=result||{};result[name]=plugin;}});return result;}/**\n * Gets a plugin's version, if available\n *\n * @param {string} name\n * The name of a plugin.\n *\n * @return {string}\n * The plugin's version or an empty string.\n */;Plugin.getPluginVersion=function getPluginVersion(name){var plugin=getPlugin(name);return plugin&&plugin.VERSION||'';};return Plugin;}();/**\n * Gets a plugin by name if it exists.\n *\n * @static\n * @method getPlugin\n * @memberOf Plugin\n * @param {string} name\n * The name of a plugin.\n *\n * @returns {Function|undefined}\n * The plugin (or `undefined`).\n */Plugin.getPlugin=getPlugin;/**\n * The name of the base plugin class as it is registered.\n *\n * @type {string}\n */Plugin.BASE_PLUGIN_NAME=BASE_PLUGIN_NAME;Plugin.registerPlugin(BASE_PLUGIN_NAME,Plugin);/**\n * Documented in player.js\n *\n * @ignore\n */Player.prototype.usingPlugin=function(name){return!!this[PLUGIN_CACHE_KEY]&&this[PLUGIN_CACHE_KEY][name]===true;};/**\n * Documented in player.js\n *\n * @ignore\n */Player.prototype.hasPlugin=function(name){return!!pluginExists(name);};/**\n * Signals that a plugin is about to be set up on a player.\n *\n * @event Player#beforepluginsetup\n * @type {Plugin~PluginEventHash}\n */ /**\n * Signals that a plugin is about to be set up on a player - by name. The name\n * is the name of the plugin.\n *\n * @event Player#beforepluginsetup:$name\n * @type {Plugin~PluginEventHash}\n */ /**\n * Signals that a plugin has just been set up on a player.\n *\n * @event Player#pluginsetup\n * @type {Plugin~PluginEventHash}\n */ /**\n * Signals that a plugin has just been set up on a player - by name. The name\n * is the name of the plugin.\n *\n * @event Player#pluginsetup:$name\n * @type {Plugin~PluginEventHash}\n */ /**\n * @typedef {Object} Plugin~PluginEventHash\n *\n * @property {string} instance\n * For basic plugins, the return value of the plugin function. For\n * advanced plugins, the plugin instance on which the event is fired.\n *\n * @property {string} name\n * The name of the plugin.\n *\n * @property {string} plugin\n * For basic plugins, the plugin function. For advanced plugins, the\n * plugin class/constructor.\n */ /**\n * @file extend.js\n * @module extend\n */ /**\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n *\n * @param {Object} subClass\n * The class to inherit to\n *\n * @param {Object} superClass\n * The class to inherit from\n *\n * @private\n */var _inherits=function _inherits(subClass,superClass){if(typeof superClass!=='function'&&superClass!==null){throw new TypeError('Super expression must either be null or a function, not '+_typeof(superClass));}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){// node\nsubClass.super_=superClass;}};/**\n * Used to subclass an existing class by emulating ES subclassing using the\n * `extends` keyword.\n *\n * @function\n * @example\n * var MyComponent = videojs.extend(videojs.getComponent('Component'), {\n * myCustomMethod: function() {\n * // Do things in my method.\n * }\n * });\n *\n * @param {Function} superClass\n * The class to inherit from\n *\n * @param {Object} [subClassMethods={}]\n * Methods of the new class\n *\n * @return {Function}\n * The new class with subClassMethods that inherited superClass.\n */var extend=function extend(superClass,subClassMethods){if(subClassMethods===void 0){subClassMethods={};}var subClass=function subClass(){superClass.apply(this,arguments);};var methods={};if(_typeof(subClassMethods)==='object'){if(subClassMethods.constructor!==Object.prototype.constructor){subClass=subClassMethods.constructor;}methods=subClassMethods;}else if(typeof subClassMethods==='function'){subClass=subClassMethods;}_inherits(subClass,superClass);// Extend subObj's prototype with functions and other properties from props\nfor(var name in methods){if(methods.hasOwnProperty(name)){subClass.prototype[name]=methods[name];}}return subClass;};/**\n * @file video.js\n * @module videojs\n */ /**\n * Normalize an `id` value by trimming off a leading `#`\n *\n * @private\n * @param {string} id\n * A string, maybe with a leading `#`.\n *\n * @return {string}\n * The string, without any leading `#`.\n */var normalizeId=function normalizeId(id){return id.indexOf('#')===0?id.slice(1):id;};/**\n * The `videojs()` function doubles as the main function for users to create a\n * {@link Player} instance as well as the main library namespace.\n *\n * It can also be used as a getter for a pre-existing {@link Player} instance.\n * However, we _strongly_ recommend using `videojs.getPlayer()` for this\n * purpose because it avoids any potential for unintended initialization.\n *\n * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149)\n * of our JSDoc template, we cannot properly document this as both a function\n * and a namespace, so its function signature is documented here.\n *\n * #### Arguments\n * ##### id\n * string|Element, **required**\n *\n * Video element or video element ID.\n *\n * ##### options\n * Object, optional\n *\n * Options object for providing settings.\n * See: [Options Guide](https://docs.videojs.com/tutorial-options.html).\n *\n * ##### ready\n * {@link Component~ReadyCallback}, optional\n *\n * A function to be called when the {@link Player} and {@link Tech} are ready.\n *\n * #### Return Value\n *\n * The `videojs()` function returns a {@link Player} instance.\n *\n * @namespace\n *\n * @borrows AudioTrack as AudioTrack\n * @borrows Component.getComponent as getComponent\n * @borrows module:computed-style~computedStyle as computedStyle\n * @borrows module:events.on as on\n * @borrows module:events.one as one\n * @borrows module:events.off as off\n * @borrows module:events.trigger as trigger\n * @borrows EventTarget as EventTarget\n * @borrows module:extend~extend as extend\n * @borrows module:fn.bind as bind\n * @borrows module:format-time.formatTime as formatTime\n * @borrows module:format-time.resetFormatTime as resetFormatTime\n * @borrows module:format-time.setFormatTime as setFormatTime\n * @borrows module:merge-options.mergeOptions as mergeOptions\n * @borrows module:middleware.use as use\n * @borrows Player.players as players\n * @borrows Plugin.registerPlugin as registerPlugin\n * @borrows Plugin.deregisterPlugin as deregisterPlugin\n * @borrows Plugin.getPlugins as getPlugins\n * @borrows Plugin.getPlugin as getPlugin\n * @borrows Plugin.getPluginVersion as getPluginVersion\n * @borrows Tech.getTech as getTech\n * @borrows Tech.registerTech as registerTech\n * @borrows TextTrack as TextTrack\n * @borrows module:time-ranges.createTimeRanges as createTimeRange\n * @borrows module:time-ranges.createTimeRanges as createTimeRanges\n * @borrows module:url.isCrossOrigin as isCrossOrigin\n * @borrows module:url.parseUrl as parseUrl\n * @borrows VideoTrack as VideoTrack\n *\n * @param {string|Element} id\n * Video element or video element ID.\n *\n * @param {Object} [options]\n * Options object for providing settings.\n * See: [Options Guide](https://docs.videojs.com/tutorial-options.html).\n *\n * @param {Component~ReadyCallback} [ready]\n * A function to be called when the {@link Player} and {@link Tech} are\n * ready.\n *\n * @return {Player}\n * The `videojs()` function returns a {@link Player|Player} instance.\n */function videojs$1(id,options,ready){var player=videojs$1.getPlayer(id);if(player){if(options){log.warn(\"Player \\\"\"+id+\"\\\" is already initialised. Options will not be applied.\");}if(ready){player.ready(ready);}return player;}var el=typeof id==='string'?$('#'+normalizeId(id)):id;if(!isEl(el)){throw new TypeError('The element or ID supplied is not valid. (videojs)');}// document.body.contains(el) will only check if el is contained within that one document.\n// This causes problems for elements in iframes.\n// Instead, use the element's ownerDocument instead of the global document.\n// This will make sure that the element is indeed in the dom of that document.\n// Additionally, check that the document in question has a default view.\n// If the document is no longer attached to the dom, the defaultView of the document will be null.\nif(!el.ownerDocument.defaultView||!el.ownerDocument.body.contains(el)){log.warn('The element supplied is not included in the DOM');}options=options||{};videojs$1.hooks('beforesetup').forEach(function(hookFunction){var opts=hookFunction(el,mergeOptions(options));if(!isObject(opts)||Array.isArray(opts)){log.error('please return an object in beforesetup hooks');return;}options=mergeOptions(options,opts);});// We get the current \"Player\" component here in case an integration has\n// replaced it with a custom player.\nvar PlayerComponent=Component.getComponent('Player');player=new PlayerComponent(el,options,ready);videojs$1.hooks('setup').forEach(function(hookFunction){return hookFunction(player);});return player;}/**\n * An Object that contains lifecycle hooks as keys which point to an array\n * of functions that are run when a lifecycle is triggered\n *\n * @private\n */videojs$1.hooks_={};/**\n * Get a list of hooks for a specific lifecycle\n *\n * @param {string} type\n * the lifecyle to get hooks from\n *\n * @param {Function|Function[]} [fn]\n * Optionally add a hook (or hooks) to the lifecycle that your are getting.\n *\n * @return {Array}\n * an array of hooks, or an empty array if there are none.\n */videojs$1.hooks=function(type,fn){videojs$1.hooks_[type]=videojs$1.hooks_[type]||[];if(fn){videojs$1.hooks_[type]=videojs$1.hooks_[type].concat(fn);}return videojs$1.hooks_[type];};/**\n * Add a function hook to a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle to hook the function to.\n *\n * @param {Function|Function[]}\n * The function or array of functions to attach.\n */videojs$1.hook=function(type,fn){videojs$1.hooks(type,fn);};/**\n * Add a function hook that will only run once to a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle to hook the function to.\n *\n * @param {Function|Function[]}\n * The function or array of functions to attach.\n */videojs$1.hookOnce=function(type,fn){videojs$1.hooks(type,[].concat(fn).map(function(original){var wrapper=function wrapper(){videojs$1.removeHook(type,wrapper);return original.apply(void 0,arguments);};return wrapper;}));};/**\n * Remove a hook from a specific videojs lifecycle.\n *\n * @param {string} type\n * the lifecycle that the function hooked to\n *\n * @param {Function} fn\n * The hooked function to remove\n *\n * @return {boolean}\n * The function that was removed or undef\n */videojs$1.removeHook=function(type,fn){var index=videojs$1.hooks(type).indexOf(fn);if(index<=-1){return false;}videojs$1.hooks_[type]=videojs$1.hooks_[type].slice();videojs$1.hooks_[type].splice(index,1);return true;};// Add default styles\nif(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VIDEOJS_NO_DYNAMIC_STYLE!==true&&isReal()){var style=$('.vjs-styles-defaults');if(!style){style=createStyleElement('vjs-styles-defaults');var head=$('head');if(head){head.insertBefore(style,head.firstChild);}setTextContent(style,\"\\n .video-js {\\n width: 300px;\\n height: 150px;\\n }\\n\\n .vjs-fluid {\\n padding-top: 56.25%\\n }\\n \");}}// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your\n// video in the DOM (weird behavior only with minified version)\nautoSetupTimeout(1,videojs$1);/**\n * Current Video.js version. Follows [semantic versioning](https://semver.org/).\n *\n * @type {string}\n */videojs$1.VERSION=version;/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * @type {Object}\n */videojs$1.options=Player.prototype.options_;/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object}\n * The created players\n */videojs$1.getPlayers=function(){return Player.players;};/**\n * Get a single player based on an ID or DOM element.\n *\n * This is useful if you want to check if an element or ID has an associated\n * Video.js player, but not create one if it doesn't.\n *\n * @param {string|Element} id\n * An HTML element - `<video>`, `<audio>`, or `<video-js>` -\n * or a string matching the `id` of such an element.\n *\n * @return {Player|undefined}\n * A player instance or `undefined` if there is no player instance\n * matching the argument.\n */videojs$1.getPlayer=function(id){var players=Player.players;var tag;if(typeof id==='string'){var nId=normalizeId(id);var player=players[nId];if(player){return player;}tag=$('#'+nId);}else{tag=id;}if(isEl(tag)){var _tag=tag,_player=_tag.player,playerId=_tag.playerId;// Element may have a `player` property referring to an already created\n// player instance. If so, return that.\nif(_player||players[playerId]){return _player||players[playerId];}}};/**\n * Returns an array of all current players.\n *\n * @return {Array}\n * An array of all players. The array will be in the order that\n * `Object.keys` provides, which could potentially vary between\n * JavaScript engines.\n *\n */videojs$1.getAllPlayers=function(){return(// Disposed players leave a key with a `null` value, so we need to make sure\n// we filter those out.\nObject.keys(Player.players).map(function(k){return Player.players[k];}).filter(Boolean));};videojs$1.players=Player.players;videojs$1.getComponent=Component.getComponent;/**\n * Register a component so it can referred to by name. Used when adding to other\n * components, either through addChild `component.addChild('myComponent')` or through\n * default children options `{ children: ['myComponent'] }`.\n *\n * > NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {string} name\n * The class name of the component\n *\n * @param {Component} comp\n * The component class\n *\n * @return {Component}\n * The newly registered component\n */videojs$1.registerComponent=function(name,comp){if(Tech.isTech(comp)){log.warn(\"The \"+name+\" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)\");}Component.registerComponent.call(Component,name,comp);};videojs$1.getTech=Tech.getTech;videojs$1.registerTech=Tech.registerTech;videojs$1.use=use;/**\n * An object that can be returned by a middleware to signify\n * that the middleware is being terminated.\n *\n * @type {object}\n * @property {object} middleware.TERMINATOR\n */Object.defineProperty(videojs$1,'middleware',{value:{},writeable:false,enumerable:true});Object.defineProperty(videojs$1.middleware,'TERMINATOR',{value:TERMINATOR,writeable:false,enumerable:true});/**\n * A reference to the {@link module:browser|browser utility module} as an object.\n *\n * @type {Object}\n * @see {@link module:browser|browser}\n */videojs$1.browser=browser;/**\n * Use {@link module:browser.TOUCH_ENABLED|browser.TOUCH_ENABLED} instead; only\n * included for backward-compatibility with 4.x.\n *\n * @deprecated Since version 5.0, use {@link module:browser.TOUCH_ENABLED|browser.TOUCH_ENABLED instead.\n * @type {boolean}\n */videojs$1.TOUCH_ENABLED=TOUCH_ENABLED;videojs$1.extend=extend;videojs$1.mergeOptions=mergeOptions;videojs$1.bind=bind;videojs$1.registerPlugin=Plugin.registerPlugin;videojs$1.deregisterPlugin=Plugin.deregisterPlugin;/**\n * Deprecated method to register a plugin with Video.js\n *\n * @deprecated videojs.plugin() is deprecated; use videojs.registerPlugin() instead\n *\n * @param {string} name\n * The plugin name\n *\n * @param {Plugin|Function} plugin\n * The plugin sub-class or function\n */videojs$1.plugin=function(name,plugin){log.warn('videojs.plugin() is deprecated; use videojs.registerPlugin() instead');return Plugin.registerPlugin(name,plugin);};videojs$1.getPlugins=Plugin.getPlugins;videojs$1.getPlugin=Plugin.getPlugin;videojs$1.getPluginVersion=Plugin.getPluginVersion;/**\n * Adding languages so that they're available to all players.\n * Example: `videojs.addLanguage('es', { 'Hello': 'Hola' });`\n *\n * @param {string} code\n * The language code or dictionary property\n *\n * @param {Object} data\n * The data values to be translated\n *\n * @return {Object}\n * The resulting language dictionary object\n */videojs$1.addLanguage=function(code,data){var _mergeOptions;code=(''+code).toLowerCase();videojs$1.options.languages=mergeOptions(videojs$1.options.languages,(_mergeOptions={},_mergeOptions[code]=data,_mergeOptions));return videojs$1.options.languages[code];};/**\n * A reference to the {@link module:log|log utility module} as an object.\n *\n * @type {Function}\n * @see {@link module:log|log}\n */videojs$1.log=log;videojs$1.createLogger=createLogger$1;videojs$1.createTimeRange=videojs$1.createTimeRanges=createTimeRanges;videojs$1.formatTime=formatTime;videojs$1.setFormatTime=setFormatTime;videojs$1.resetFormatTime=resetFormatTime;videojs$1.parseUrl=parseUrl;videojs$1.isCrossOrigin=isCrossOrigin;videojs$1.EventTarget=EventTarget;videojs$1.on=on;videojs$1.one=one;videojs$1.off=off;videojs$1.trigger=trigger;/**\n * A cross-browser XMLHttpRequest wrapper.\n *\n * @function\n * @param {Object} options\n * Settings for the request.\n *\n * @return {XMLHttpRequest|XDomainRequest}\n * The request object.\n *\n * @see https://github.com/Raynos/xhr\n */videojs$1.xhr=xhr__WEBPACK_IMPORTED_MODULE_4___default.a;videojs$1.TextTrack=TextTrack;videojs$1.AudioTrack=AudioTrack;videojs$1.VideoTrack=VideoTrack;['isEl','isTextNode','createEl','hasClass','addClass','removeClass','toggleClass','setAttributes','getAttributes','emptyEl','appendContent','insertContent'].forEach(function(k){videojs$1[k]=function(){log.warn(\"videojs.\"+k+\"() is deprecated; use videojs.dom.\"+k+\"() instead\");return Dom[k].apply(null,arguments);};});videojs$1.computedStyle=computedStyle;/**\n * A reference to the {@link module:dom|DOM utility module} as an object.\n *\n * @type {Object}\n * @see {@link module:dom|dom}\n */videojs$1.dom=Dom;/**\n * A reference to the {@link module:url|URL utility module} as an object.\n *\n * @type {Object}\n * @see {@link module:url|url}\n */videojs$1.url=Url;/**\n * @videojs/http-streaming\n * @version 1.10.6\n * @copyright 2019 Brightcove, Inc\n * @license Apache-2.0\n */ /**\n * @file resolve-url.js - Handling how URLs are resolved and manipulated\n */var resolveUrl=function resolveUrl(baseURL,relativeURL){// return early if we don't need to resolve\nif(/^[a-z]+:/i.test(relativeURL)){return relativeURL;}// if the base URL is relative then combine with the current location\nif(!/\\/\\//i.test(baseURL)){baseURL=url_toolkit__WEBPACK_IMPORTED_MODULE_6___default.a.buildAbsoluteURL(global_window__WEBPACK_IMPORTED_MODULE_0___default.a.location.href,baseURL);}return url_toolkit__WEBPACK_IMPORTED_MODULE_6___default.a.buildAbsoluteURL(baseURL,relativeURL);};/**\n * Checks whether xhr request was redirected and returns correct url depending\n * on `handleManifestRedirects` option\n *\n * @api private\n *\n * @param {String} url - an url being requested\n * @param {XMLHttpRequest} req - xhr request result\n *\n * @return {String}\n */var resolveManifestRedirect=function resolveManifestRedirect(handleManifestRedirect,url,req){// To understand how the responseURL below is set and generated:\n// - https://fetch.spec.whatwg.org/#concept-response-url\n// - https://fetch.spec.whatwg.org/#atomic-http-redirect-handling\nif(handleManifestRedirect&&req.responseURL&&url!==req.responseURL){return req.responseURL;}return url;};var classCallCheck=function classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};var createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var get$1=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined;}else{return get(parent,property,receiver);}}else if(\"value\"in desc){return desc.value;}else{var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};var inherits=function inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+_typeof(superClass));}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;};var possibleConstructorReturn=function possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(_typeof(call)===\"object\"||typeof call===\"function\")?call:self;};var slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i[\"return\"])_i[\"return\"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");}};}();/**\n * @file playlist-loader.js\n *\n * A state machine that manages the loading, caching, and updating of\n * M3U8 playlists.\n *\n */var mergeOptions$1=videojs$1.mergeOptions,EventTarget$1=videojs$1.EventTarget,log$1=videojs$1.log;/**\n * Loops through all supported media groups in master and calls the provided\n * callback for each group\n *\n * @param {Object} master\n * The parsed master manifest object\n * @param {Function} callback\n * Callback to call for each media group\n */var forEachMediaGroup=function forEachMediaGroup(master,callback){['AUDIO','SUBTITLES'].forEach(function(mediaType){for(var groupKey in master.mediaGroups[mediaType]){for(var labelKey in master.mediaGroups[mediaType][groupKey]){var mediaProperties=master.mediaGroups[mediaType][groupKey][labelKey];callback(mediaProperties,mediaType,groupKey,labelKey);}}});};/**\n * Returns a new array of segments that is the result of merging\n * properties from an older list of segments onto an updated\n * list. No properties on the updated playlist will be overridden.\n *\n * @param {Array} original the outdated list of segments\n * @param {Array} update the updated list of segments\n * @param {Number=} offset the index of the first update\n * segment in the original segment list. For non-live playlists,\n * this should always be zero and does not need to be\n * specified. For live playlists, it should be the difference\n * between the media sequence numbers in the original and updated\n * playlists.\n * @return a list of merged segment objects\n */var updateSegments=function updateSegments(original,update,offset){var result=update.slice();offset=offset||0;var length=Math.min(original.length,update.length+offset);for(var i=offset;i<length;i++){result[i-offset]=mergeOptions$1(original[i],result[i-offset]);}return result;};var resolveSegmentUris=function resolveSegmentUris(segment,baseUri){if(!segment.resolvedUri){segment.resolvedUri=resolveUrl(baseUri,segment.uri);}if(segment.key&&!segment.key.resolvedUri){segment.key.resolvedUri=resolveUrl(baseUri,segment.key.uri);}if(segment.map&&!segment.map.resolvedUri){segment.map.resolvedUri=resolveUrl(baseUri,segment.map.uri);}};/**\n * Returns a new master playlist that is the result of merging an\n * updated media playlist into the original version. If the\n * updated media playlist does not match any of the playlist\n * entries in the original master playlist, null is returned.\n *\n * @param {Object} master a parsed master M3U8 object\n * @param {Object} media a parsed media M3U8 object\n * @return {Object} a new object that represents the original\n * master playlist with the updated media playlist merged in, or\n * null if the merge produced no change.\n */var updateMaster=function updateMaster(master,media){var result=mergeOptions$1(master,{});var playlist=result.playlists[media.uri];if(!playlist){return null;}// consider the playlist unchanged if the number of segments is equal, the media\n// sequence number is unchanged, and this playlist hasn't become the end of the playlist\nif(playlist.segments&&media.segments&&playlist.segments.length===media.segments.length&&playlist.endList===media.endList&&playlist.mediaSequence===media.mediaSequence){return null;}var mergedPlaylist=mergeOptions$1(playlist,media);// if the update could overlap existing segment information, merge the two segment lists\nif(playlist.segments){mergedPlaylist.segments=updateSegments(playlist.segments,media.segments,media.mediaSequence-playlist.mediaSequence);}// resolve any segment URIs to prevent us from having to do it later\nmergedPlaylist.segments.forEach(function(segment){resolveSegmentUris(segment,mergedPlaylist.resolvedUri);});// TODO Right now in the playlists array there are two references to each playlist, one\n// that is referenced by index, and one by URI. The index reference may no longer be\n// necessary.\nfor(var i=0;i<result.playlists.length;i++){if(result.playlists[i].uri===media.uri){result.playlists[i]=mergedPlaylist;}}result.playlists[media.uri]=mergedPlaylist;return result;};var setupMediaPlaylists=function setupMediaPlaylists(master){// setup by-URI lookups and resolve media playlist URIs\nvar i=master.playlists.length;while(i--){var playlist=master.playlists[i];master.playlists[playlist.uri]=playlist;playlist.resolvedUri=resolveUrl(master.uri,playlist.uri);playlist.id=i;if(!playlist.attributes){// Although the spec states an #EXT-X-STREAM-INF tag MUST have a\n// BANDWIDTH attribute, we can play the stream without it. This means a poorly\n// formatted master playlist may not have an attribute list. An attributes\n// property is added here to prevent undefined references when we encounter\n// this scenario.\nplaylist.attributes={};log$1.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.');}}};var resolveMediaGroupUris=function resolveMediaGroupUris(master){forEachMediaGroup(master,function(properties){if(properties.uri){properties.resolvedUri=resolveUrl(master.uri,properties.uri);}});};/**\n * Calculates the time to wait before refreshing a live playlist\n *\n * @param {Object} media\n * The current media\n * @param {Boolean} update\n * True if there were any updates from the last refresh, false otherwise\n * @return {Number}\n * The time in ms to wait before refreshing the live playlist\n */var refreshDelay=function refreshDelay(media,update){var lastSegment=media.segments[media.segments.length-1];var delay=void 0;if(update&&lastSegment&&lastSegment.duration){delay=lastSegment.duration*1000;}else{// if the playlist is unchanged since the last reload or last segment duration\n// cannot be determined, try again after half the target duration\ndelay=(media.targetDuration||10)*500;}return delay;};/**\n * Load a playlist from a remote location\n *\n * @class PlaylistLoader\n * @extends Stream\n * @param {String} srcUrl the url to start with\n * @param {Boolean} withCredentials the withCredentials xhr option\n * @constructor\n */var PlaylistLoader=function(_EventTarget){inherits(PlaylistLoader,_EventTarget);function PlaylistLoader(srcUrl,hls){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};classCallCheck(this,PlaylistLoader);var _this=possibleConstructorReturn(this,(PlaylistLoader.__proto__||Object.getPrototypeOf(PlaylistLoader)).call(this));var _options$withCredenti=options.withCredentials,withCredentials=_options$withCredenti===undefined?false:_options$withCredenti,_options$handleManife=options.handleManifestRedirects,handleManifestRedirects=_options$handleManife===undefined?false:_options$handleManife;_this.srcUrl=srcUrl;_this.hls_=hls;_this.withCredentials=withCredentials;_this.handleManifestRedirects=handleManifestRedirects;var hlsOptions=hls.options_;_this.customTagParsers=hlsOptions&&hlsOptions.customTagParsers||[];_this.customTagMappers=hlsOptions&&hlsOptions.customTagMappers||[];if(!_this.srcUrl){throw new Error('A non-empty playlist URL is required');}// initialize the loader state\n_this.state='HAVE_NOTHING';// live playlist staleness timeout\n_this.on('mediaupdatetimeout',function(){if(_this.state!=='HAVE_METADATA'){// only refresh the media playlist if no other activity is going on\nreturn;}_this.state='HAVE_CURRENT_METADATA';_this.request=_this.hls_.xhr({uri:resolveUrl(_this.master.uri,_this.media().uri),withCredentials:_this.withCredentials},function(error,req){// disposed\nif(!_this.request){return;}if(error){return _this.playlistRequestError(_this.request,_this.media().uri,'HAVE_METADATA');}_this.haveMetadata(_this.request,_this.media().uri);});});return _this;}createClass(PlaylistLoader,[{key:'playlistRequestError',value:function playlistRequestError(xhr,url,startingState){// any in-flight request is now finished\nthis.request=null;if(startingState){this.state=startingState;}this.error={playlist:this.master.playlists[url],status:xhr.status,message:'HLS playlist request error at URL: '+url+'.',responseText:xhr.responseText,code:xhr.status>=500?4:2};this.trigger('error');}// update the playlist loader's state in response to a new or\n// updated playlist.\n},{key:'haveMetadata',value:function haveMetadata(xhr,url){var _this2=this;// any in-flight request is now finished\nthis.request=null;this.state='HAVE_METADATA';var parser=new m3u8_parser__WEBPACK_IMPORTED_MODULE_7__[\"Parser\"]();// adding custom tag parsers\nthis.customTagParsers.forEach(function(customParser){return parser.addParser(customParser);});// adding custom tag mappers\nthis.customTagMappers.forEach(function(mapper){return parser.addTagMapper(mapper);});parser.push(xhr.responseText);parser.end();parser.manifest.uri=url;// m3u8-parser does not attach an attributes property to media playlists so make\n// sure that the property is attached to avoid undefined reference errors\nparser.manifest.attributes=parser.manifest.attributes||{};// merge this playlist into the master\nvar update=updateMaster(this.master,parser.manifest);this.targetDuration=parser.manifest.targetDuration;if(update){this.master=update;this.media_=this.master.playlists[parser.manifest.uri];}else{this.trigger('playlistunchanged');}// refresh live playlists after a target duration passes\nif(!this.media().endList){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);this.mediaUpdateTimeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){_this2.trigger('mediaupdatetimeout');},refreshDelay(this.media(),!!update));}this.trigger('loadedplaylist');}/**\n * Abort any outstanding work and clean up.\n */},{key:'dispose',value:function dispose(){this.stopRequest();global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.finalRenditionTimeout);}},{key:'stopRequest',value:function stopRequest(){if(this.request){var oldRequest=this.request;this.request=null;oldRequest.onreadystatechange=null;oldRequest.abort();}}/**\n * When called without any arguments, returns the currently\n * active media playlist. When called with a single argument,\n * triggers the playlist loader to asynchronously switch to the\n * specified media playlist. Calling this method while the\n * loader is in the HAVE_NOTHING causes an error to be emitted\n * but otherwise has no effect.\n *\n * @param {Object=} playlist the parsed media playlist\n * object to switch to\n * @param {Boolean=} is this the last available playlist\n *\n * @return {Playlist} the current loaded media\n */},{key:'media',value:function media(playlist,isFinalRendition){var _this3=this;// getter\nif(!playlist){return this.media_;}// setter\nif(this.state==='HAVE_NOTHING'){throw new Error('Cannot switch media playlist from '+this.state);}// find the playlist object if the target playlist has been\n// specified by URI\nif(typeof playlist==='string'){if(!this.master.playlists[playlist]){throw new Error('Unknown playlist URI: '+playlist);}playlist=this.master.playlists[playlist];}global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.finalRenditionTimeout);if(isFinalRendition){var delay=playlist.targetDuration/2*1000||5*1000;this.finalRenditionTimeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.media.bind(this,playlist,false),delay);return;}var startingState=this.state;var mediaChange=!this.media_||playlist.uri!==this.media_.uri;// switch to fully loaded playlists immediately\nif(this.master.playlists[playlist.uri].endList){// abort outstanding playlist requests\nif(this.request){this.request.onreadystatechange=null;this.request.abort();this.request=null;}this.state='HAVE_METADATA';this.media_=playlist;// trigger media change if the active media has been updated\nif(mediaChange){this.trigger('mediachanging');this.trigger('mediachange');}return;}// switching to the active playlist is a no-op\nif(!mediaChange){return;}this.state='SWITCHING_MEDIA';// there is already an outstanding playlist request\nif(this.request){if(playlist.resolvedUri===this.request.url){// requesting to switch to the same playlist multiple times\n// has no effect after the first\nreturn;}this.request.onreadystatechange=null;this.request.abort();this.request=null;}// request the new playlist\nif(this.media_){this.trigger('mediachanging');}this.request=this.hls_.xhr({uri:playlist.resolvedUri,withCredentials:this.withCredentials},function(error,req){// disposed\nif(!_this3.request){return;}playlist.resolvedUri=resolveManifestRedirect(_this3.handleManifestRedirects,playlist.resolvedUri,req);if(error){return _this3.playlistRequestError(_this3.request,playlist.uri,startingState);}_this3.haveMetadata(req,playlist.uri);// fire loadedmetadata the first time a media playlist is loaded\nif(startingState==='HAVE_MASTER'){_this3.trigger('loadedmetadata');}else{_this3.trigger('mediachange');}});}/**\n * pause loading of the playlist\n */},{key:'pause',value:function pause(){this.stopRequest();global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);if(this.state==='HAVE_NOTHING'){// If we pause the loader before any data has been retrieved, its as if we never\n// started, so reset to an unstarted state.\nthis.started=false;}// Need to restore state now that no activity is happening\nif(this.state==='SWITCHING_MEDIA'){// if the loader was in the process of switching media, it should either return to\n// HAVE_MASTER or HAVE_METADATA depending on if the loader has loaded a media\n// playlist yet. This is determined by the existence of loader.media_\nif(this.media_){this.state='HAVE_METADATA';}else{this.state='HAVE_MASTER';}}else if(this.state==='HAVE_CURRENT_METADATA'){this.state='HAVE_METADATA';}}/**\n * start loading of the playlist\n */},{key:'load',value:function load(isFinalRendition){var _this4=this;global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);var media=this.media();if(isFinalRendition){var delay=media?media.targetDuration/2*1000:5*1000;this.mediaUpdateTimeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){return _this4.load();},delay);return;}if(!this.started){this.start();return;}if(media&&!media.endList){this.trigger('mediaupdatetimeout');}else{this.trigger('loadedplaylist');}}/**\n * start loading of the playlist\n */},{key:'start',value:function start(){var _this5=this;this.started=true;// request the specified URL\nthis.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(error,req){// disposed\nif(!_this5.request){return;}// clear the loader's request reference\n_this5.request=null;if(error){_this5.error={status:req.status,message:'HLS playlist request error at URL: '+_this5.srcUrl+'.',responseText:req.responseText,// MEDIA_ERR_NETWORK\ncode:2};if(_this5.state==='HAVE_NOTHING'){_this5.started=false;}return _this5.trigger('error');}var parser=new m3u8_parser__WEBPACK_IMPORTED_MODULE_7__[\"Parser\"]();// adding custom tag parsers\n_this5.customTagParsers.forEach(function(customParser){return parser.addParser(customParser);});// adding custom tag mappers\n_this5.customTagMappers.forEach(function(mapper){return parser.addTagMapper(mapper);});parser.push(req.responseText);parser.end();_this5.state='HAVE_MASTER';_this5.srcUrl=resolveManifestRedirect(_this5.handleManifestRedirects,_this5.srcUrl,req);parser.manifest.uri=_this5.srcUrl;// loaded a master playlist\nif(parser.manifest.playlists){_this5.master=parser.manifest;setupMediaPlaylists(_this5.master);resolveMediaGroupUris(_this5.master);_this5.trigger('loadedplaylist');if(!_this5.request){// no media playlist was specifically selected so start\n// from the first listed one\n_this5.media(parser.manifest.playlists[0]);}return;}// loaded a media playlist\n// infer a master playlist if none was previously requested\n_this5.master={mediaGroups:{'AUDIO':{},'VIDEO':{},'CLOSED-CAPTIONS':{},'SUBTITLES':{}},uri:global_window__WEBPACK_IMPORTED_MODULE_0___default.a.location.href,playlists:[{uri:_this5.srcUrl,id:0,resolvedUri:_this5.srcUrl,// m3u8-parser does not attach an attributes property to media playlists so make\n// sure that the property is attached to avoid undefined reference errors\nattributes:{}}]};_this5.master.playlists[_this5.srcUrl]=_this5.master.playlists[0];_this5.haveMetadata(req,_this5.srcUrl);return _this5.trigger('loadedmetadata');});}}]);return PlaylistLoader;}(EventTarget$1);/**\n * @file playlist.js\n *\n * Playlist related utilities.\n */var createTimeRange=videojs$1.createTimeRange;/**\n * walk backward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {Number} endSequence the mediaSequence to stop walking on\n */var backwardDuration=function backwardDuration(playlist,endSequence){var result=0;var i=endSequence-playlist.mediaSequence;// if a start time is available for segment immediately following\n// the interval, use it\nvar segment=playlist.segments[i];// Walk backward until we find the latest segment with timeline\n// information that is earlier than endSequence\nif(segment){if(typeof segment.start!=='undefined'){return{result:segment.start,precise:true};}if(typeof segment.end!=='undefined'){return{result:segment.end-segment.duration,precise:true};}}while(i--){segment=playlist.segments[i];if(typeof segment.end!=='undefined'){return{result:result+segment.end,precise:true};}result+=segment.duration;if(typeof segment.start!=='undefined'){return{result:result+segment.start,precise:true};}}return{result:result,precise:false};};/**\n * walk forward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {Number} endSequence the mediaSequence to stop walking on\n */var forwardDuration=function forwardDuration(playlist,endSequence){var result=0;var segment=void 0;var i=endSequence-playlist.mediaSequence;// Walk forward until we find the earliest segment with timeline\n// information\nfor(;i<playlist.segments.length;i++){segment=playlist.segments[i];if(typeof segment.start!=='undefined'){return{result:segment.start-result,precise:true};}result+=segment.duration;if(typeof segment.end!=='undefined'){return{result:segment.end-result,precise:true};}}// indicate we didn't find a useful duration estimate\nreturn{result:-1,precise:false};};/**\n * Calculate the media duration from the segments associated with a\n * playlist. The duration of a subinterval of the available segments\n * may be calculated by specifying an end index.\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} endSequence an exclusive upper boundary\n * for the playlist. Defaults to playlist length.\n * @param {Number} expired the amount of time that has dropped\n * off the front of the playlist in a live scenario\n * @return {Number} the duration between the first available segment\n * and end index.\n */var intervalDuration=function intervalDuration(playlist,endSequence,expired){var backward=void 0;var forward=void 0;if(typeof endSequence==='undefined'){endSequence=playlist.mediaSequence+playlist.segments.length;}if(endSequence<playlist.mediaSequence){return 0;}// do a backward walk to estimate the duration\nbackward=backwardDuration(playlist,endSequence);if(backward.precise){// if we were able to base our duration estimate on timing\n// information provided directly from the Media Source, return\n// it\nreturn backward.result;}// walk forward to see if a precise duration estimate can be made\n// that way\nforward=forwardDuration(playlist,endSequence);if(forward.precise){// we found a segment that has been buffered and so it's\n// position is known precisely\nreturn forward.result;}// return the less-precise, playlist-based duration estimate\nreturn backward.result+expired;};/**\n * Calculates the duration of a playlist. If a start and end index\n * are specified, the duration will be for the subset of the media\n * timeline between those two indices. The total duration for live\n * playlists is always Infinity.\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} endSequence an exclusive upper\n * boundary for the playlist. Defaults to the playlist media\n * sequence number plus its length.\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @return {Number} the duration between the start index and end\n * index.\n */var duration=function duration(playlist,endSequence,expired){if(!playlist){return 0;}if(typeof expired!=='number'){expired=0;}// if a slice of the total duration is not requested, use\n// playlist-level duration indicators when they're present\nif(typeof endSequence==='undefined'){// if present, use the duration specified in the playlist\nif(playlist.totalDuration){return playlist.totalDuration;}// duration should be Infinity for live playlists\nif(!playlist.endList){return global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Infinity;}}// calculate the total duration based on the segment durations\nreturn intervalDuration(playlist,endSequence,expired);};/**\n * Calculate the time between two indexes in the current playlist\n * neight the start- nor the end-index need to be within the current\n * playlist in which case, the targetDuration of the playlist is used\n * to approximate the durations of the segments\n *\n * @param {Object} playlist a media playlist object\n * @param {Number} startIndex\n * @param {Number} endIndex\n * @return {Number} the number of seconds between startIndex and endIndex\n */var sumDurations=function sumDurations(playlist,startIndex,endIndex){var durations=0;if(startIndex>endIndex){var _ref=[endIndex,startIndex];startIndex=_ref[0];endIndex=_ref[1];}if(startIndex<0){for(var i=startIndex;i<Math.min(0,endIndex);i++){durations+=playlist.targetDuration;}startIndex=0;}for(var _i=startIndex;_i<endIndex;_i++){durations+=playlist.segments[_i].duration;}return durations;};/**\n * Determines the media index of the segment corresponding to the safe edge of the live\n * window which is the duration of the last segment plus 2 target durations from the end\n * of the playlist.\n *\n * @param {Object} playlist\n * a media playlist object\n * @return {Number}\n * The media index of the segment at the safe live point. 0 if there is no \"safe\"\n * point.\n * @function safeLiveIndex\n */var safeLiveIndex=function safeLiveIndex(playlist){if(!playlist.segments.length){return 0;}var i=playlist.segments.length-1;var distanceFromEnd=playlist.segments[i].duration||playlist.targetDuration;var safeDistance=distanceFromEnd+playlist.targetDuration*2;while(i--){distanceFromEnd+=playlist.segments[i].duration;if(distanceFromEnd>=safeDistance){break;}}return Math.max(0,i);};/**\n * Calculates the playlist end time\n *\n * @param {Object} playlist a media playlist object\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @param {Boolean|false} useSafeLiveEnd a boolean value indicating whether or not the\n * playlist end calculation should consider the safe live end\n * (truncate the playlist end by three segments). This is normally\n * used for calculating the end of the playlist's seekable range.\n * @returns {Number} the end time of playlist\n * @function playlistEnd\n */var playlistEnd=function playlistEnd(playlist,expired,useSafeLiveEnd){if(!playlist||!playlist.segments){return null;}if(playlist.endList){return duration(playlist);}if(expired===null){return null;}expired=expired||0;var endSequence=useSafeLiveEnd?safeLiveIndex(playlist):playlist.segments.length;return intervalDuration(playlist,playlist.mediaSequence+endSequence,expired);};/**\n * Calculates the interval of time that is currently seekable in a\n * playlist. The returned time ranges are relative to the earliest\n * moment in the specified playlist that is still available. A full\n * seekable implementation for live streams would need to offset\n * these values by the duration of content that has expired from the\n * stream.\n *\n * @param {Object} playlist a media playlist object\n * dropped off the front of the playlist in a live scenario\n * @param {Number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @return {TimeRanges} the periods of time that are valid targets\n * for seeking\n */var seekable=function seekable(playlist,expired){var useSafeLiveEnd=true;var seekableStart=expired||0;var seekableEnd=playlistEnd(playlist,expired,useSafeLiveEnd);if(seekableEnd===null){return createTimeRange();}return createTimeRange(seekableStart,seekableEnd);};var isWholeNumber=function isWholeNumber(num){return num-Math.floor(num)===0;};var roundSignificantDigit=function roundSignificantDigit(increment,num){// If we have a whole number, just add 1 to it\nif(isWholeNumber(num)){return num+increment*0.1;}var numDecimalDigits=num.toString().split('.')[1].length;for(var i=1;i<=numDecimalDigits;i++){var scale=Math.pow(10,i);var temp=num*scale;if(isWholeNumber(temp)||i===numDecimalDigits){return(temp+increment)/scale;}}};var ceilLeastSignificantDigit=roundSignificantDigit.bind(null,1);var floorLeastSignificantDigit=roundSignificantDigit.bind(null,-1);/**\n * Determine the index and estimated starting time of the segment that\n * contains a specified playback position in a media playlist.\n *\n * @param {Object} playlist the media playlist to query\n * @param {Number} currentTime The number of seconds since the earliest\n * possible position to determine the containing segment for\n * @param {Number} startIndex\n * @param {Number} startTime\n * @return {Object}\n */var getMediaInfoForTime=function getMediaInfoForTime(playlist,currentTime,startIndex,startTime){var i=void 0;var segment=void 0;var numSegments=playlist.segments.length;var time=currentTime-startTime;if(time<0){// Walk backward from startIndex in the playlist, adding durations\n// until we find a segment that contains `time` and return it\nif(startIndex>0){for(i=startIndex-1;i>=0;i--){segment=playlist.segments[i];time+=floorLeastSignificantDigit(segment.duration);if(time>0){return{mediaIndex:i,startTime:startTime-sumDurations(playlist,startIndex,i)};}}}// We were unable to find a good segment within the playlist\n// so select the first segment\nreturn{mediaIndex:0,startTime:currentTime};}// When startIndex is negative, we first walk forward to first segment\n// adding target durations. If we \"run out of time\" before getting to\n// the first segment, return the first segment\nif(startIndex<0){for(i=startIndex;i<0;i++){time-=playlist.targetDuration;if(time<0){return{mediaIndex:0,startTime:currentTime};}}startIndex=0;}// Walk forward from startIndex in the playlist, subtracting durations\n// until we find a segment that contains `time` and return it\nfor(i=startIndex;i<numSegments;i++){segment=playlist.segments[i];time-=ceilLeastSignificantDigit(segment.duration);if(time<0){return{mediaIndex:i,startTime:startTime+sumDurations(playlist,startIndex,i)};}}// We are out of possible candidates so load the last one...\nreturn{mediaIndex:numSegments-1,startTime:currentTime};};/**\n * Check whether the playlist is blacklisted or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is blacklisted or not\n * @function isBlacklisted\n */var isBlacklisted=function isBlacklisted(playlist){return playlist.excludeUntil&&playlist.excludeUntil>Date.now();};/**\n * Check whether the playlist is compatible with current playback configuration or has\n * been blacklisted permanently for being incompatible.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is incompatible or not\n * @function isIncompatible\n */var isIncompatible=function isIncompatible(playlist){return playlist.excludeUntil&&playlist.excludeUntil===Infinity;};/**\n * Check whether the playlist is enabled or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is enabled or not\n * @function isEnabled\n */var isEnabled=function isEnabled(playlist){var blacklisted=isBlacklisted(playlist);return!playlist.disabled&&!blacklisted;};/**\n * Check whether the playlist has been manually disabled through the representations api.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is disabled manually or not\n * @function isDisabled\n */var isDisabled=function isDisabled(playlist){return playlist.disabled;};/**\n * Returns whether the current playlist is an AES encrypted HLS stream\n *\n * @return {Boolean} true if it's an AES encrypted HLS stream\n */var isAes=function isAes(media){for(var i=0;i<media.segments.length;i++){if(media.segments[i].key){return true;}}return false;};/**\n * Returns whether the current playlist contains fMP4\n *\n * @return {Boolean} true if the playlist contains fMP4\n */var isFmp4=function isFmp4(media){for(var i=0;i<media.segments.length;i++){if(media.segments[i].map){return true;}}return false;};/**\n * Checks if the playlist has a value for the specified attribute\n *\n * @param {String} attr\n * Attribute to check for\n * @param {Object} playlist\n * The media playlist object\n * @return {Boolean}\n * Whether the playlist contains a value for the attribute or not\n * @function hasAttribute\n */var hasAttribute=function hasAttribute(attr,playlist){return playlist.attributes&&playlist.attributes[attr];};/**\n * Estimates the time required to complete a segment download from the specified playlist\n *\n * @param {Number} segmentDuration\n * Duration of requested segment\n * @param {Number} bandwidth\n * Current measured bandwidth of the player\n * @param {Object} playlist\n * The media playlist object\n * @param {Number=} bytesReceived\n * Number of bytes already received for the request. Defaults to 0\n * @return {Number|NaN}\n * The estimated time to request the segment. NaN if bandwidth information for\n * the given playlist is unavailable\n * @function estimateSegmentRequestTime\n */var estimateSegmentRequestTime=function estimateSegmentRequestTime(segmentDuration,bandwidth,playlist){var bytesReceived=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(!hasAttribute('BANDWIDTH',playlist)){return NaN;}var size=segmentDuration*playlist.attributes.BANDWIDTH;return(size-bytesReceived*8)/bandwidth;};/*\n * Returns whether the current playlist is the lowest rendition\n *\n * @return {Boolean} true if on lowest rendition\n */var isLowestEnabledRendition=function isLowestEnabledRendition(master,media){if(master.playlists.length===1){return true;}var currentBandwidth=media.attributes.BANDWIDTH||Number.MAX_VALUE;return master.playlists.filter(function(playlist){if(!isEnabled(playlist)){return false;}return(playlist.attributes.BANDWIDTH||0)<currentBandwidth;}).length===0;};// exports\nvar Playlist={duration:duration,seekable:seekable,safeLiveIndex:safeLiveIndex,getMediaInfoForTime:getMediaInfoForTime,isEnabled:isEnabled,isDisabled:isDisabled,isBlacklisted:isBlacklisted,isIncompatible:isIncompatible,playlistEnd:playlistEnd,isAes:isAes,isFmp4:isFmp4,hasAttribute:hasAttribute,estimateSegmentRequestTime:estimateSegmentRequestTime,isLowestEnabledRendition:isLowestEnabledRendition};/**\n * @file xhr.js\n */var videojsXHR=videojs$1.xhr,mergeOptions$1$1=videojs$1.mergeOptions;var xhrFactory=function xhrFactory(){var xhr=function XhrFunction(options,callback){// Add a default timeout for all hls requests\noptions=mergeOptions$1$1({timeout:45e3},options);// Allow an optional user-specified function to modify the option\n// object before we construct the xhr request\nvar beforeRequest=XhrFunction.beforeRequest||videojs$1.Hls.xhr.beforeRequest;if(beforeRequest&&typeof beforeRequest==='function'){var newOptions=beforeRequest(options);if(newOptions){options=newOptions;}}var request=videojsXHR(options,function(error,response){var reqResponse=request.response;if(!error&&reqResponse){request.responseTime=Date.now();request.roundTripTime=request.responseTime-request.requestTime;request.bytesReceived=reqResponse.byteLength||reqResponse.length;if(!request.bandwidth){request.bandwidth=Math.floor(request.bytesReceived/request.roundTripTime*8*1000);}}if(response.headers){request.responseHeaders=response.headers;}// videojs.xhr now uses a specific code on the error\n// object to signal that a request has timed out instead\n// of setting a boolean on the request object\nif(error&&error.code==='ETIMEDOUT'){request.timedout=true;}// videojs.xhr no longer considers status codes outside of 200 and 0\n// (for file uris) to be errors, but the old XHR did, so emulate that\n// behavior. Status 206 may be used in response to byterange requests.\nif(!error&&!request.aborted&&response.statusCode!==200&&response.statusCode!==206&&response.statusCode!==0){error=new Error('XHR Failed with a response of: '+(request&&(reqResponse||request.responseText)));}callback(error,request);});var originalAbort=request.abort;request.abort=function(){request.aborted=true;return originalAbort.apply(request,arguments);};request.uri=options.uri;request.requestTime=Date.now();return request;};return xhr;};/**\n * Turns segment byterange into a string suitable for use in\n * HTTP Range requests\n *\n * @param {Object} byterange - an object with two values defining the start and end\n * of a byte-range\n */var byterangeStr=function byterangeStr(byterange){var byterangeStart=void 0;var byterangeEnd=void 0;// `byterangeEnd` is one less than `offset + length` because the HTTP range\n// header uses inclusive ranges\nbyterangeEnd=byterange.offset+byterange.length-1;byterangeStart=byterange.offset;return'bytes='+byterangeStart+'-'+byterangeEnd;};/**\n * Defines headers for use in the xhr request for a particular segment.\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n */var segmentXhrHeaders=function segmentXhrHeaders(segment){var headers={};if(segment.byterange){headers.Range=byterangeStr(segment.byterange);}return headers;};/**\n * @file bin-utils.js\n */ /**\n * convert a TimeRange to text\n *\n * @param {TimeRange} range the timerange to use for conversion\n * @param {Number} i the iterator on the range to convert\n */var textRange=function textRange(range,i){return range.start(i)+'-'+range.end(i);};/**\n * format a number as hex string\n *\n * @param {Number} e The number\n * @param {Number} i the iterator\n */var formatHexString=function formatHexString(e,i){var value=e.toString(16);return'00'.substring(0,2-value.length)+value+(i%2?' ':'');};var formatAsciiString=function formatAsciiString(e){if(e>=0x20&&e<0x7e){return String.fromCharCode(e);}return'.';};/**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */var createTransferableMessage=function createTransferableMessage(message){var transferable={};Object.keys(message).forEach(function(key){var value=message[key];if(ArrayBuffer.isView(value)){transferable[key]={bytes:value.buffer,byteOffset:value.byteOffset,byteLength:value.byteLength};}else{transferable[key]=value;}});return transferable;};/**\n * Returns a unique string identifier for a media initialization\n * segment.\n */var initSegmentId=function initSegmentId(initSegment){var byterange=initSegment.byterange||{length:Infinity,offset:0};return[byterange.length,byterange.offset,initSegment.resolvedUri].join(',');};/**\n * Returns a unique string identifier for a media segment key.\n */var segmentKeyId=function segmentKeyId(key){return key.resolvedUri;};/**\n * utils to help dump binary data to the console\n */var hexDump=function hexDump(data){var bytes=Array.prototype.slice.call(data);var step=16;var result='';var hex=void 0;var ascii=void 0;for(var j=0;j<bytes.length/step;j++){hex=bytes.slice(j*step,j*step+step).map(formatHexString).join('');ascii=bytes.slice(j*step,j*step+step).map(formatAsciiString).join('');result+=hex+' '+ascii+'\\n';}return result;};var tagDump=function tagDump(_ref){var bytes=_ref.bytes;return hexDump(bytes);};var textRanges=function textRanges(ranges){var result='';var i=void 0;for(i=0;i<ranges.length;i++){result+=textRange(ranges,i)+' ';}return result;};var utils=/*#__PURE__*/Object.freeze({createTransferableMessage:createTransferableMessage,initSegmentId:initSegmentId,segmentKeyId:segmentKeyId,hexDump:hexDump,tagDump:tagDump,textRanges:textRanges});// TODO handle fmp4 case where the timing info is accurate and doesn't involve transmux\n// Add 25% to the segment duration to account for small discrepencies in segment timing.\n// 25% was arbitrarily chosen, and may need to be refined over time.\nvar SEGMENT_END_FUDGE_PERCENT=0.25;/**\n * Converts a player time (any time that can be gotten/set from player.currentTime(),\n * e.g., any time within player.seekable().start(0) to player.seekable().end(0)) to a\n * program time (any time referencing the real world (e.g., EXT-X-PROGRAM-DATE-TIME)).\n *\n * The containing segment is required as the EXT-X-PROGRAM-DATE-TIME serves as an \"anchor\n * point\" (a point where we have a mapping from program time to player time, with player\n * time being the post transmux start of the segment).\n *\n * For more details, see [this doc](../../docs/program-time-from-player-time.md).\n *\n * @param {Number} playerTime the player time\n * @param {Object} segment the segment which contains the player time\n * @return {Date} program time\n */var playerTimeToProgramTime=function playerTimeToProgramTime(playerTime,segment){if(!segment.dateTimeObject){// Can't convert without an \"anchor point\" for the program time (i.e., a time that can\n// be used to map the start of a segment with a real world time).\nreturn null;}var transmuxerPrependedSeconds=segment.videoTimingInfo.transmuxerPrependedSeconds;var transmuxedStart=segment.videoTimingInfo.transmuxedPresentationStart;// get the start of the content from before old content is prepended\nvar startOfSegment=transmuxedStart+transmuxerPrependedSeconds;var offsetFromSegmentStart=playerTime-startOfSegment;return new Date(segment.dateTimeObject.getTime()+offsetFromSegmentStart*1000);};var originalSegmentVideoDuration=function originalSegmentVideoDuration(videoTimingInfo){return videoTimingInfo.transmuxedPresentationEnd-videoTimingInfo.transmuxedPresentationStart-videoTimingInfo.transmuxerPrependedSeconds;};/**\n * Finds a segment that contains the time requested given as an ISO-8601 string. The\n * returned segment might be an estimate or an accurate match.\n *\n * @param {String} programTime The ISO-8601 programTime to find a match for\n * @param {Object} playlist A playlist object to search within\n */var findSegmentForProgramTime=function findSegmentForProgramTime(programTime,playlist){// Assumptions:\n// - verifyProgramDateTimeTags has already been run\n// - live streams have been started\nvar dateTimeObject=void 0;try{dateTimeObject=new Date(programTime);}catch(e){return null;}if(!playlist||!playlist.segments||playlist.segments.length===0){return null;}var segment=playlist.segments[0];if(dateTimeObject<segment.dateTimeObject){// Requested time is before stream start.\nreturn null;}for(var i=0;i<playlist.segments.length-1;i++){segment=playlist.segments[i];var nextSegmentStart=playlist.segments[i+1].dateTimeObject;if(dateTimeObject<nextSegmentStart){break;}}var lastSegment=playlist.segments[playlist.segments.length-1];var lastSegmentStart=lastSegment.dateTimeObject;var lastSegmentDuration=lastSegment.videoTimingInfo?originalSegmentVideoDuration(lastSegment.videoTimingInfo):lastSegment.duration+lastSegment.duration*SEGMENT_END_FUDGE_PERCENT;var lastSegmentEnd=new Date(lastSegmentStart.getTime()+lastSegmentDuration*1000);if(dateTimeObject>lastSegmentEnd){// Beyond the end of the stream, or our best guess of the end of the stream.\nreturn null;}if(dateTimeObject>lastSegmentStart){segment=lastSegment;}return{segment:segment,estimatedStart:segment.videoTimingInfo?segment.videoTimingInfo.transmuxedPresentationStart:Playlist.duration(playlist,playlist.mediaSequence+playlist.segments.indexOf(segment)),// Although, given that all segments have accurate date time objects, the segment\n// selected should be accurate, unless the video has been transmuxed at some point\n// (determined by the presence of the videoTimingInfo object), the segment's \"player\n// time\" (the start time in the player) can't be considered accurate.\ntype:segment.videoTimingInfo?'accurate':'estimate'};};/**\n * Finds a segment that contains the given player time(in seconds).\n *\n * @param {Number} time The player time to find a match for\n * @param {Object} playlist A playlist object to search within\n */var findSegmentForPlayerTime=function findSegmentForPlayerTime(time,playlist){// Assumptions:\n// - there will always be a segment.duration\n// - we can start from zero\n// - segments are in time order\nif(!playlist||!playlist.segments||playlist.segments.length===0){return null;}var segmentEnd=0;var segment=void 0;for(var i=0;i<playlist.segments.length;i++){segment=playlist.segments[i];// videoTimingInfo is set after the segment is downloaded and transmuxed, and\n// should contain the most accurate values we have for the segment's player times.\n//\n// Use the accurate transmuxedPresentationEnd value if it is available, otherwise fall\n// back to an estimate based on the manifest derived (inaccurate) segment.duration, to\n// calculate an end value.\nsegmentEnd=segment.videoTimingInfo?segment.videoTimingInfo.transmuxedPresentationEnd:segmentEnd+segment.duration;if(time<=segmentEnd){break;}}var lastSegment=playlist.segments[playlist.segments.length-1];if(lastSegment.videoTimingInfo&&lastSegment.videoTimingInfo.transmuxedPresentationEnd<time){// The time requested is beyond the stream end.\nreturn null;}if(time>segmentEnd){// The time is within or beyond the last segment.\n//\n// Check to see if the time is beyond a reasonable guess of the end of the stream.\nif(time>segmentEnd+lastSegment.duration*SEGMENT_END_FUDGE_PERCENT){// Technically, because the duration value is only an estimate, the time may still\n// exist in the last segment, however, there isn't enough information to make even\n// a reasonable estimate.\nreturn null;}segment=lastSegment;}return{segment:segment,estimatedStart:segment.videoTimingInfo?segment.videoTimingInfo.transmuxedPresentationStart:segmentEnd-segment.duration,// Because videoTimingInfo is only set after transmux, it is the only way to get\n// accurate timing values.\ntype:segment.videoTimingInfo?'accurate':'estimate'};};/**\n * Gives the offset of the comparisonTimestamp from the programTime timestamp in seconds.\n * If the offset returned is positive, the programTime occurs after the\n * comparisonTimestamp.\n * If the offset is negative, the programTime occurs before the comparisonTimestamp.\n *\n * @param {String} comparisonTimeStamp An ISO-8601 timestamp to compare against\n * @param {String} programTime The programTime as an ISO-8601 string\n * @return {Number} offset\n */var getOffsetFromTimestamp=function getOffsetFromTimestamp(comparisonTimeStamp,programTime){var segmentDateTime=void 0;var programDateTime=void 0;try{segmentDateTime=new Date(comparisonTimeStamp);programDateTime=new Date(programTime);}catch(e){// TODO handle error\n}var segmentTimeEpoch=segmentDateTime.getTime();var programTimeEpoch=programDateTime.getTime();return(programTimeEpoch-segmentTimeEpoch)/1000;};/**\n * Checks that all segments in this playlist have programDateTime tags.\n *\n * @param {Object} playlist A playlist object\n */var verifyProgramDateTimeTags=function verifyProgramDateTimeTags(playlist){if(!playlist.segments||playlist.segments.length===0){return false;}for(var i=0;i<playlist.segments.length;i++){var segment=playlist.segments[i];if(!segment.dateTimeObject){return false;}}return true;};/**\n * Returns the programTime of the media given a playlist and a playerTime.\n * The playlist must have programDateTime tags for a programDateTime tag to be returned.\n * If the segments containing the time requested have not been buffered yet, an estimate\n * may be returned to the callback.\n *\n * @param {Object} args\n * @param {Object} args.playlist A playlist object to search within\n * @param {Number} time A playerTime in seconds\n * @param {Function} callback(err, programTime)\n * @returns {String} err.message A detailed error message\n * @returns {Object} programTime\n * @returns {Number} programTime.mediaSeconds The streamTime in seconds\n * @returns {String} programTime.programDateTime The programTime as an ISO-8601 String\n */var getProgramTime=function getProgramTime(_ref){var playlist=_ref.playlist,_ref$time=_ref.time,time=_ref$time===undefined?undefined:_ref$time,callback=_ref.callback;if(!callback){throw new Error('getProgramTime: callback must be provided');}if(!playlist||time===undefined){return callback({message:'getProgramTime: playlist and time must be provided'});}var matchedSegment=findSegmentForPlayerTime(time,playlist);if(!matchedSegment){return callback({message:'valid programTime was not found'});}if(matchedSegment.type==='estimate'){return callback({message:'Accurate programTime could not be determined.'+' Please seek to e.seekTime and try again',seekTime:matchedSegment.estimatedStart});}var programTimeObject={mediaSeconds:time};var programTime=playerTimeToProgramTime(time,matchedSegment.segment);if(programTime){programTimeObject.programDateTime=programTime.toISOString();}return callback(null,programTimeObject);};/**\n * Seeks in the player to a time that matches the given programTime ISO-8601 string.\n *\n * @param {Object} args\n * @param {String} args.programTime A programTime to seek to as an ISO-8601 String\n * @param {Object} args.playlist A playlist to look within\n * @param {Number} args.retryCount The number of times to try for an accurate seek. Default is 2.\n * @param {Function} args.seekTo A method to perform a seek\n * @param {Boolean} args.pauseAfterSeek Whether to end in a paused state after seeking. Default is true.\n * @param {Object} args.tech The tech to seek on\n * @param {Function} args.callback(err, newTime) A callback to return the new time to\n * @returns {String} err.message A detailed error message\n * @returns {Number} newTime The exact time that was seeked to in seconds\n */var seekToProgramTime=function seekToProgramTime(_ref2){var programTime=_ref2.programTime,playlist=_ref2.playlist,_ref2$retryCount=_ref2.retryCount,retryCount=_ref2$retryCount===undefined?2:_ref2$retryCount,seekTo=_ref2.seekTo,_ref2$pauseAfterSeek=_ref2.pauseAfterSeek,pauseAfterSeek=_ref2$pauseAfterSeek===undefined?true:_ref2$pauseAfterSeek,tech=_ref2.tech,callback=_ref2.callback;if(!callback){throw new Error('seekToProgramTime: callback must be provided');}if(typeof programTime==='undefined'||!playlist||!seekTo){return callback({message:'seekToProgramTime: programTime, seekTo and playlist must be provided'});}if(!playlist.endList&&!tech.hasStarted_){return callback({message:'player must be playing a live stream to start buffering'});}if(!verifyProgramDateTimeTags(playlist)){return callback({message:'programDateTime tags must be provided in the manifest '+playlist.resolvedUri});}var matchedSegment=findSegmentForProgramTime(programTime,playlist);// no match\nif(!matchedSegment){return callback({message:programTime+' was not found in the stream'});}var segment=matchedSegment.segment;var mediaOffset=getOffsetFromTimestamp(segment.dateTimeObject,programTime);if(matchedSegment.type==='estimate'){// we've run out of retries\nif(retryCount===0){return callback({message:programTime+' is not buffered yet. Try again'});}seekTo(matchedSegment.estimatedStart+mediaOffset);tech.one('seeked',function(){seekToProgramTime({programTime:programTime,playlist:playlist,retryCount:retryCount-1,seekTo:seekTo,pauseAfterSeek:pauseAfterSeek,tech:tech,callback:callback});});return;}// Since the segment.start value is determined from the buffered end or ending time\n// of the prior segment, the seekToTime doesn't need to account for any transmuxer\n// modifications.\nvar seekToTime=segment.start+mediaOffset;var seekedCallback=function seekedCallback(){return callback(null,tech.currentTime());};// listen for seeked event\ntech.one('seeked',seekedCallback);// pause before seeking as video.js will restore this state\nif(pauseAfterSeek){tech.pause();}seekTo(seekToTime);};/**\n * ranges\n *\n * Utilities for working with TimeRanges.\n *\n */ // Fudge factor to account for TimeRanges rounding\nvar TIME_FUDGE_FACTOR=1/30;// Comparisons between time values such as current time and the end of the buffered range\n// can be misleading because of precision differences or when the current media has poorly\n// aligned audio and video, which can cause values to be slightly off from what you would\n// expect. This value is what we consider to be safe to use in such comparisons to account\n// for these scenarios.\nvar SAFE_TIME_DELTA=TIME_FUDGE_FACTOR*3;var filterRanges=function filterRanges(timeRanges,predicate){var results=[];var i=void 0;if(timeRanges&&timeRanges.length){// Search for ranges that match the predicate\nfor(i=0;i<timeRanges.length;i++){if(predicate(timeRanges.start(i),timeRanges.end(i))){results.push([timeRanges.start(i),timeRanges.end(i)]);}}}return videojs$1.createTimeRanges(results);};/**\n * Attempts to find the buffered TimeRange that contains the specified\n * time.\n * @param {TimeRanges} buffered - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @returns {TimeRanges} a new TimeRanges object\n */var findRange=function findRange(buffered,time){return filterRanges(buffered,function(start,end){return start-SAFE_TIME_DELTA<=time&&end+SAFE_TIME_DELTA>=time;});};/**\n * Returns the TimeRanges that begin later than the specified time.\n * @param {TimeRanges} timeRanges - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @returns {TimeRanges} a new TimeRanges object.\n */var findNextRange=function findNextRange(timeRanges,time){return filterRanges(timeRanges,function(start){return start-TIME_FUDGE_FACTOR>=time;});};/**\n * Returns gaps within a list of TimeRanges\n * @param {TimeRanges} buffered - the TimeRanges object\n * @return {TimeRanges} a TimeRanges object of gaps\n */var findGaps=function findGaps(buffered){if(buffered.length<2){return videojs$1.createTimeRanges();}var ranges=[];for(var i=1;i<buffered.length;i++){var start=buffered.end(i-1);var end=buffered.start(i);ranges.push([start,end]);}return videojs$1.createTimeRanges(ranges);};/**\n * Gets a human readable string for a TimeRange\n *\n * @param {TimeRange} range\n * @returns {String} a human readable string\n */var printableRange=function printableRange(range){var strArr=[];if(!range||!range.length){return'';}for(var i=0;i<range.length;i++){strArr.push(range.start(i)+' => '+range.end(i));}return strArr.join(', ');};/**\n * Calculates the amount of time left in seconds until the player hits the end of the\n * buffer and causes a rebuffer\n *\n * @param {TimeRange} buffered\n * The state of the buffer\n * @param {Numnber} currentTime\n * The current time of the player\n * @param {Number} playbackRate\n * The current playback rate of the player. Defaults to 1.\n * @return {Number}\n * Time until the player has to start rebuffering in seconds.\n * @function timeUntilRebuffer\n */var timeUntilRebuffer=function timeUntilRebuffer(buffered,currentTime){var playbackRate=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;var bufferedEnd=buffered.length?buffered.end(buffered.length-1):0;return(bufferedEnd-currentTime)/playbackRate;};/**\n * Converts a TimeRanges object into an array representation\n * @param {TimeRanges} timeRanges\n * @returns {Array}\n */var timeRangesToArray=function timeRangesToArray(timeRanges){var timeRangesList=[];for(var i=0;i<timeRanges.length;i++){timeRangesList.push({start:timeRanges.start(i),end:timeRanges.end(i)});}return timeRangesList;};/**\n * @file create-text-tracks-if-necessary.js\n */ /**\n * Create text tracks on video.js if they exist on a segment.\n *\n * @param {Object} sourceBuffer the VSB or FSB\n * @param {Object} mediaSource the HTML media source\n * @param {Object} segment the segment that may contain the text track\n * @private\n */var createTextTracksIfNecessary=function createTextTracksIfNecessary(sourceBuffer,mediaSource,segment){var player=mediaSource.player_;// create an in-band caption track if one is present in the segment\nif(segment.captions&&segment.captions.length){if(!sourceBuffer.inbandTextTracks_){sourceBuffer.inbandTextTracks_={};}for(var trackId in segment.captionStreams){if(!sourceBuffer.inbandTextTracks_[trackId]){player.tech_.trigger({type:'usage',name:'hls-608'});var track=player.textTracks().getTrackById(trackId);if(track){// Resuse an existing track with a CC# id because this was\n// very likely created by videojs-contrib-hls from information\n// in the m3u8 for us to use\nsourceBuffer.inbandTextTracks_[trackId]=track;}else{// Otherwise, create a track with the default `CC#` label and\n// without a language\nsourceBuffer.inbandTextTracks_[trackId]=player.addRemoteTextTrack({kind:'captions',id:trackId,label:trackId},false).track;}}}}if(segment.metadata&&segment.metadata.length&&!sourceBuffer.metadataTrack_){sourceBuffer.metadataTrack_=player.addRemoteTextTrack({kind:'metadata',label:'Timed Metadata'},false).track;sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType=segment.metadata.dispatchType;}};/**\n * @file remove-cues-from-track.js\n */ /**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */var removeCuesFromTrack=function removeCuesFromTrack(start,end,track){var i=void 0;var cue=void 0;if(!track){return;}if(!track.cues){return;}i=track.cues.length;while(i--){cue=track.cues[i];// Remove any overlapping cue\nif(cue.startTime<=end&&cue.endTime>=start){track.removeCue(cue);}}};/**\n * @file add-text-track-data.js\n */ /**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */var deprecateOldCue=function deprecateOldCue(cue){Object.defineProperties(cue.frame,{id:{get:function get(){videojs$1.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');return cue.value.key;}},value:{get:function get(){videojs$1.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');return cue.value.data;}},privateData:{get:function get(){videojs$1.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');return cue.value.data;}}});};var durationOfVideo=function durationOfVideo(duration){var dur=void 0;if(isNaN(duration)||Math.abs(duration)===Infinity){dur=Number.MAX_VALUE;}else{dur=duration;}return dur;};/**\n * Add text track data to a source handler given the captions and\n * metadata from the buffer.\n *\n * @param {Object} sourceHandler the virtual source buffer\n * @param {Array} captionArray an array of caption data\n * @param {Array} metadataArray an array of meta data\n * @private\n */var addTextTrackData=function addTextTrackData(sourceHandler,captionArray,metadataArray){var Cue=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebKitDataCue||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VTTCue;if(captionArray){captionArray.forEach(function(caption){var track=caption.stream;this.inbandTextTracks_[track].addCue(new Cue(caption.startTime+this.timestampOffset,caption.endTime+this.timestampOffset,caption.text));},sourceHandler);}if(metadataArray){var videoDuration=durationOfVideo(sourceHandler.mediaSource_.duration);metadataArray.forEach(function(metadata){var time=metadata.cueTime+this.timestampOffset;// if time isn't a finite number between 0 and Infinity, like NaN,\n// ignore this bit of metadata.\n// This likely occurs when you have an non-timed ID3 tag like TIT2,\n// which is the \"Title/Songname/Content description\" frame\nif(typeof time!=='number'||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.isNaN(time)||time<0||!(time<Infinity)){return;}metadata.frames.forEach(function(frame){var cue=new Cue(time,time,frame.value||frame.url||frame.data||'');cue.frame=frame;cue.value=frame;deprecateOldCue(cue);this.metadataTrack_.addCue(cue);},this);},sourceHandler);// Updating the metadeta cues so that\n// the endTime of each cue is the startTime of the next cue\n// the endTime of last cue is the duration of the video\nif(sourceHandler.metadataTrack_&&sourceHandler.metadataTrack_.cues&&sourceHandler.metadataTrack_.cues.length){var cues=sourceHandler.metadataTrack_.cues;var cuesArray=[];// Create a copy of the TextTrackCueList...\n// ...disregarding cues with a falsey value\nfor(var i=0;i<cues.length;i++){if(cues[i]){cuesArray.push(cues[i]);}}// Group cues by their startTime value\nvar cuesGroupedByStartTime=cuesArray.reduce(function(obj,cue){var timeSlot=obj[cue.startTime]||[];timeSlot.push(cue);obj[cue.startTime]=timeSlot;return obj;},{});// Sort startTimes by ascending order\nvar sortedStartTimes=Object.keys(cuesGroupedByStartTime).sort(function(a,b){return Number(a)-Number(b);});// Map each cue group's endTime to the next group's startTime\nsortedStartTimes.forEach(function(startTime,idx){var cueGroup=cuesGroupedByStartTime[startTime];var nextTime=Number(sortedStartTimes[idx+1])||videoDuration;// Map each cue's endTime the next group's startTime\ncueGroup.forEach(function(cue){cue.endTime=nextTime;});});}}};var win=typeof window!=='undefined'?window:{},TARGET=typeof Symbol==='undefined'?'__target':Symbol(),SCRIPT_TYPE='application/javascript',BlobBuilder=win.BlobBuilder||win.WebKitBlobBuilder||win.MozBlobBuilder||win.MSBlobBuilder,URL=win.URL||win.webkitURL||URL&&URL.msURL,Worker=win.Worker;/**\n * Returns a wrapper around Web Worker code that is constructible.\n *\n * @function shimWorker\n *\n * @param { String } filename The name of the file\n * @param { Function } fn Function wrapping the code of the worker\n */function shimWorker(filename,fn){return function ShimWorker(forceFallback){var o=this;if(!fn){return new Worker(filename);}else if(Worker&&!forceFallback){// Convert the function's inner code to a string to construct the worker\nvar source=fn.toString().replace(/^function.+?{/,'').slice(0,-1),objURL=createSourceObject(source);this[TARGET]=new Worker(objURL);wrapTerminate(this[TARGET],objURL);return this[TARGET];}else{var selfShim={postMessage:function postMessage(m){if(o.onmessage){setTimeout(function(){o.onmessage({data:m,target:selfShim});});}}};fn.call(selfShim);this.postMessage=function(m){setTimeout(function(){selfShim.onmessage({data:m,target:o});});};this.isThisThread=true;}};}// Test Worker capabilities\nif(Worker){var testWorker,objURL=createSourceObject('self.onmessage = function () {}'),testArray=new Uint8Array(1);try{testWorker=new Worker(objURL);// Native browser on some Samsung devices throws for transferables, let's detect it\ntestWorker.postMessage(testArray,[testArray.buffer]);}catch(e){Worker=null;}finally{URL.revokeObjectURL(objURL);if(testWorker){testWorker.terminate();}}}function createSourceObject(str){try{return URL.createObjectURL(new Blob([str],{type:SCRIPT_TYPE}));}catch(e){var blob=new BlobBuilder();blob.append(str);return URL.createObjectURL(blob.getBlob(type));}}function wrapTerminate(worker,objURL){if(!worker||!objURL)return;var term=worker.terminate;worker.objURL=objURL;worker.terminate=function(){if(worker.objURL)URL.revokeObjectURL(worker.objURL);term.call(worker);};}var TransmuxWorker=new shimWorker(\"./transmuxer-worker.worker.js\",function(window,document$$1){var self=this;var transmuxerWorker=function(){/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A lightweight readable stream implemention that handles event dispatching.\n * Objects that inherit from streams should call init in their constructors.\n */var Stream=function Stream(){this.init=function(){var listeners={};/**\n * Add a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} the callback to be invoked when an event of\n * the specified type occurs\n */this.on=function(type,listener){if(!listeners[type]){listeners[type]=[];}listeners[type]=listeners[type].concat(listener);};/**\n * Remove a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} a function previously registered for this\n * type of event through `on`\n */this.off=function(type,listener){var index;if(!listeners[type]){return false;}index=listeners[type].indexOf(listener);listeners[type]=listeners[type].slice();listeners[type].splice(index,1);return index>-1;};/**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n * @param type {string} the event name\n */this.trigger=function(type){var callbacks,i,length,args;callbacks=listeners[type];if(!callbacks){return;}// Slicing the arguments on every invocation of this method\n// can add a significant amount of overhead. Avoid the\n// intermediate object creation for the common case of a\n// single callback argument\nif(arguments.length===2){length=callbacks.length;for(i=0;i<length;++i){callbacks[i].call(this,arguments[1]);}}else{args=[];i=arguments.length;for(i=1;i<arguments.length;++i){args.push(arguments[i]);}length=callbacks.length;for(i=0;i<length;++i){callbacks[i].apply(this,args);}}};/**\n * Destroys the stream and cleans up.\n */this.dispose=function(){listeners={};};};};/**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n * @param destination {stream} the stream that will receive all `data` events\n * @param autoFlush {boolean} if false, we will not call `flush` on the destination\n * when the current stream emits a 'done' event\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */Stream.prototype.pipe=function(destination){this.on('data',function(data){destination.push(data);});this.on('done',function(flushSource){destination.flush(flushSource);});this.on('partialdone',function(flushSource){destination.partialFlush(flushSource);});this.on('endedtimeline',function(flushSource){destination.endTimeline(flushSource);});this.on('reset',function(flushSource){destination.reset(flushSource);});return destination;};// Default stream functions that are expected to be overridden to perform\n// actual work. These are provided by the prototype as a sort of no-op\n// implementation so that we don't have to check for their existence in the\n// `pipe` function above.\nStream.prototype.push=function(data){this.trigger('data',data);};Stream.prototype.flush=function(flushSource){this.trigger('done',flushSource);};Stream.prototype.partialFlush=function(flushSource){this.trigger('partialdone',flushSource);};Stream.prototype.endTimeline=function(flushSource){this.trigger('endedtimeline',flushSource);};Stream.prototype.reset=function(flushSource){this.trigger('reset',flushSource);};var stream=Stream;/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Functions that generate fragmented MP4s suitable for use with Media\n * Source Extensions.\n */var UINT32_MAX=Math.pow(2,32)-1;var box,dinf,esds,ftyp,mdat,mfhd,minf,moof,moov,mvex,mvhd,trak,tkhd,mdia,mdhd,hdlr,sdtp,stbl,stsd,traf,trex,trun,types,MAJOR_BRAND,MINOR_VERSION,AVC1_BRAND,VIDEO_HDLR,AUDIO_HDLR,HDLR_TYPES,VMHD,SMHD,DREF,STCO,STSC,STSZ,STTS;// pre-calculate constants\n(function(){var i;types={avc1:[],// codingname\navcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],// codingname\nmvex:[],mvhd:[],pasp:[],sdtp:[],smhd:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],styp:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[]};// In environments where Uint8Array is undefined (e.g., IE8), skip set up so that we\n// don't throw an error\nif(typeof Uint8Array==='undefined'){return;}for(i in types){if(types.hasOwnProperty(i)){types[i]=[i.charCodeAt(0),i.charCodeAt(1),i.charCodeAt(2),i.charCodeAt(3)];}}MAJOR_BRAND=new Uint8Array(['i'.charCodeAt(0),'s'.charCodeAt(0),'o'.charCodeAt(0),'m'.charCodeAt(0)]);AVC1_BRAND=new Uint8Array(['a'.charCodeAt(0),'v'.charCodeAt(0),'c'.charCodeAt(0),'1'.charCodeAt(0)]);MINOR_VERSION=new Uint8Array([0,0,0,1]);VIDEO_HDLR=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x00,// pre_defined\n0x76,0x69,0x64,0x65,// handler_type: 'vide'\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x56,0x69,0x64,0x65,0x6f,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x00// name: 'VideoHandler'\n]);AUDIO_HDLR=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x00,// pre_defined\n0x73,0x6f,0x75,0x6e,// handler_type: 'soun'\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x53,0x6f,0x75,0x6e,0x64,0x48,0x61,0x6e,0x64,0x6c,0x65,0x72,0x00// name: 'SoundHandler'\n]);HDLR_TYPES={video:VIDEO_HDLR,audio:AUDIO_HDLR};DREF=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x01,// entry_count\n0x00,0x00,0x00,0x0c,// entry_size\n0x75,0x72,0x6c,0x20,// 'url' type\n0x00,// version 0\n0x00,0x00,0x01// entry_flags\n]);SMHD=new Uint8Array([0x00,// version\n0x00,0x00,0x00,// flags\n0x00,0x00,// balance, 0 means centered\n0x00,0x00// reserved\n]);STCO=new Uint8Array([0x00,// version\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x00// entry_count\n]);STSC=STCO;STSZ=new Uint8Array([0x00,// version\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x00,// sample_size\n0x00,0x00,0x00,0x00// sample_count\n]);STTS=STCO;VMHD=new Uint8Array([0x00,// version\n0x00,0x00,0x01,// flags\n0x00,0x00,// graphicsmode\n0x00,0x00,0x00,0x00,0x00,0x00// opcolor\n]);})();box=function box(type){var payload=[],size=0,i,result,view;for(i=1;i<arguments.length;i++){payload.push(arguments[i]);}i=payload.length;// calculate the total size we need to allocate\nwhile(i--){size+=payload[i].byteLength;}result=new Uint8Array(size+8);view=new DataView(result.buffer,result.byteOffset,result.byteLength);view.setUint32(0,result.byteLength);result.set(type,4);// copy the payload into the result\nfor(i=0,size=8;i<payload.length;i++){result.set(payload[i],size);size+=payload[i].byteLength;}return result;};dinf=function dinf(){return box(types.dinf,box(types.dref,DREF));};esds=function esds(track){return box(types.esds,new Uint8Array([0x00,// version\n0x00,0x00,0x00,// flags\n// ES_Descriptor\n0x03,// tag, ES_DescrTag\n0x19,// length\n0x00,0x00,// ES_ID\n0x00,// streamDependenceFlag, URL_flag, reserved, streamPriority\n// DecoderConfigDescriptor\n0x04,// tag, DecoderConfigDescrTag\n0x11,// length\n0x40,// object type\n0x15,// streamType\n0x00,0x06,0x00,// bufferSizeDB\n0x00,0x00,0xda,0xc0,// maxBitrate\n0x00,0x00,0xda,0xc0,// avgBitrate\n// DecoderSpecificInfo\n0x05,// tag, DecoderSpecificInfoTag\n0x02,// length\n// ISO/IEC 14496-3, AudioSpecificConfig\n// for samplingFrequencyIndex see ISO/IEC 13818-7:2006, 8.1.3.2.2, Table 35\ntrack.audioobjecttype<<3|track.samplingfrequencyindex>>>1,track.samplingfrequencyindex<<7|track.channelcount<<3,0x06,0x01,0x02// GASpecificConfig\n]));};ftyp=function ftyp(){return box(types.ftyp,MAJOR_BRAND,MINOR_VERSION,MAJOR_BRAND,AVC1_BRAND);};hdlr=function hdlr(type){return box(types.hdlr,HDLR_TYPES[type]);};mdat=function mdat(data){return box(types.mdat,data);};mdhd=function mdhd(track){var result=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x02,// creation_time\n0x00,0x00,0x00,0x03,// modification_time\n0x00,0x01,0x5f,0x90,// timescale, 90,000 \"ticks\" per second\ntrack.duration>>>24&0xFF,track.duration>>>16&0xFF,track.duration>>>8&0xFF,track.duration&0xFF,// duration\n0x55,0xc4,// 'und' language (undetermined)\n0x00,0x00]);// Use the sample rate from the track metadata, when it is\n// defined. The sample rate can be parsed out of an ADTS header, for\n// instance.\nif(track.samplerate){result[12]=track.samplerate>>>24&0xFF;result[13]=track.samplerate>>>16&0xFF;result[14]=track.samplerate>>>8&0xFF;result[15]=track.samplerate&0xFF;}return box(types.mdhd,result);};mdia=function mdia(track){return box(types.mdia,mdhd(track),hdlr(track.type),minf(track));};mfhd=function mfhd(sequenceNumber){return box(types.mfhd,new Uint8Array([0x00,0x00,0x00,0x00,// flags\n(sequenceNumber&0xFF000000)>>24,(sequenceNumber&0xFF0000)>>16,(sequenceNumber&0xFF00)>>8,sequenceNumber&0xFF// sequence_number\n]));};minf=function minf(track){return box(types.minf,track.type==='video'?box(types.vmhd,VMHD):box(types.smhd,SMHD),dinf(),stbl(track));};moof=function moof(sequenceNumber,tracks){var trackFragments=[],i=tracks.length;// build traf boxes for each track fragment\nwhile(i--){trackFragments[i]=traf(tracks[i]);}return box.apply(null,[types.moof,mfhd(sequenceNumber)].concat(trackFragments));};/**\n * Returns a movie box.\n * @param tracks {array} the tracks associated with this movie\n * @see ISO/IEC 14496-12:2012(E), section 8.2.1\n */moov=function moov(tracks){var i=tracks.length,boxes=[];while(i--){boxes[i]=trak(tracks[i]);}return box.apply(null,[types.moov,mvhd(0xffffffff)].concat(boxes).concat(mvex(tracks)));};mvex=function mvex(tracks){var i=tracks.length,boxes=[];while(i--){boxes[i]=trex(tracks[i]);}return box.apply(null,[types.mvex].concat(boxes));};mvhd=function mvhd(duration){var bytes=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x01,// creation_time\n0x00,0x00,0x00,0x02,// modification_time\n0x00,0x01,0x5f,0x90,// timescale, 90,000 \"ticks\" per second\n(duration&0xFF000000)>>24,(duration&0xFF0000)>>16,(duration&0xFF00)>>8,duration&0xFF,// duration\n0x00,0x01,0x00,0x00,// 1.0 rate\n0x01,0x00,// 1.0 volume\n0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,// transformation: unity matrix\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// pre_defined\n0xff,0xff,0xff,0xff// next_track_ID\n]);return box(types.mvhd,bytes);};sdtp=function sdtp(track){var samples=track.samples||[],bytes=new Uint8Array(4+samples.length),flags,i;// leave the full box header (4 bytes) all zero\n// write the sample table\nfor(i=0;i<samples.length;i++){flags=samples[i].flags;bytes[i+4]=flags.dependsOn<<4|flags.isDependedOn<<2|flags.hasRedundancy;}return box(types.sdtp,bytes);};stbl=function stbl(track){return box(types.stbl,stsd(track),box(types.stts,STTS),box(types.stsc,STSC),box(types.stsz,STSZ),box(types.stco,STCO));};(function(){var videoSample,audioSample;stsd=function stsd(track){return box(types.stsd,new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n0x00,0x00,0x00,0x01]),track.type==='video'?videoSample(track):audioSample(track));};videoSample=function videoSample(track){var sps=track.sps||[],pps=track.pps||[],sequenceParameterSets=[],pictureParameterSets=[],i,avc1Box;// assemble the SPSs\nfor(i=0;i<sps.length;i++){sequenceParameterSets.push((sps[i].byteLength&0xFF00)>>>8);sequenceParameterSets.push(sps[i].byteLength&0xFF);// sequenceParameterSetLength\nsequenceParameterSets=sequenceParameterSets.concat(Array.prototype.slice.call(sps[i]));// SPS\n}// assemble the PPSs\nfor(i=0;i<pps.length;i++){pictureParameterSets.push((pps[i].byteLength&0xFF00)>>>8);pictureParameterSets.push(pps[i].byteLength&0xFF);pictureParameterSets=pictureParameterSets.concat(Array.prototype.slice.call(pps[i]));}avc1Box=[types.avc1,new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,// reserved\n0x00,0x01,// data_reference_index\n0x00,0x00,// pre_defined\n0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// pre_defined\n(track.width&0xff00)>>8,track.width&0xff,// width\n(track.height&0xff00)>>8,track.height&0xff,// height\n0x00,0x48,0x00,0x00,// horizresolution\n0x00,0x48,0x00,0x00,// vertresolution\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x01,// frame_count\n0x13,0x76,0x69,0x64,0x65,0x6f,0x6a,0x73,0x2d,0x63,0x6f,0x6e,0x74,0x72,0x69,0x62,0x2d,0x68,0x6c,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// compressorname\n0x00,0x18,// depth = 24\n0x11,0x11// pre_defined = -1\n]),box(types.avcC,new Uint8Array([0x01,// configurationVersion\ntrack.profileIdc,// AVCProfileIndication\ntrack.profileCompatibility,// profile_compatibility\ntrack.levelIdc,// AVCLevelIndication\n0xff// lengthSizeMinusOne, hard-coded to 4 bytes\n].concat([sps.length],// numOfSequenceParameterSets\nsequenceParameterSets,// \"SPS\"\n[pps.length],// numOfPictureParameterSets\npictureParameterSets// \"PPS\"\n))),box(types.btrt,new Uint8Array([0x00,0x1c,0x9c,0x80,// bufferSizeDB\n0x00,0x2d,0xc6,0xc0,// maxBitrate\n0x00,0x2d,0xc6,0xc0// avgBitrate\n]))];if(track.sarRatio){var hSpacing=track.sarRatio[0],vSpacing=track.sarRatio[1];avc1Box.push(box(types.pasp,new Uint8Array([(hSpacing&0xFF000000)>>24,(hSpacing&0xFF0000)>>16,(hSpacing&0xFF00)>>8,hSpacing&0xFF,(vSpacing&0xFF000000)>>24,(vSpacing&0xFF0000)>>16,(vSpacing&0xFF00)>>8,vSpacing&0xFF])));}return box.apply(null,avc1Box);};audioSample=function audioSample(track){return box(types.mp4a,new Uint8Array([// SampleEntry, ISO/IEC 14496-12\n0x00,0x00,0x00,0x00,0x00,0x00,// reserved\n0x00,0x01,// data_reference_index\n// AudioSampleEntry, ISO/IEC 14496-12\n0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,0x00,0x00,// reserved\n(track.channelcount&0xff00)>>8,track.channelcount&0xff,// channelcount\n(track.samplesize&0xff00)>>8,track.samplesize&0xff,// samplesize\n0x00,0x00,// pre_defined\n0x00,0x00,// reserved\n(track.samplerate&0xff00)>>8,track.samplerate&0xff,0x00,0x00// samplerate, 16.16\n// MP4AudioSampleEntry, ISO/IEC 14496-14\n]),esds(track));};})();tkhd=function tkhd(track){var result=new Uint8Array([0x00,// version 0\n0x00,0x00,0x07,// flags\n0x00,0x00,0x00,0x00,// creation_time\n0x00,0x00,0x00,0x00,// modification_time\n(track.id&0xFF000000)>>24,(track.id&0xFF0000)>>16,(track.id&0xFF00)>>8,track.id&0xFF,// track_ID\n0x00,0x00,0x00,0x00,// reserved\n(track.duration&0xFF000000)>>24,(track.duration&0xFF0000)>>16,(track.duration&0xFF00)>>8,track.duration&0xFF,// duration\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// reserved\n0x00,0x00,// layer\n0x00,0x00,// alternate_group\n0x01,0x00,// non-audio track volume\n0x00,0x00,// reserved\n0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,// transformation: unity matrix\n(track.width&0xFF00)>>8,track.width&0xFF,0x00,0x00,// width\n(track.height&0xFF00)>>8,track.height&0xFF,0x00,0x00// height\n]);return box(types.tkhd,result);};/**\n * Generate a track fragment (traf) box. A traf box collects metadata\n * about tracks in a movie fragment (moof) box.\n */traf=function traf(track){var trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun,sampleDependencyTable,dataOffset,upperWordBaseMediaDecodeTime,lowerWordBaseMediaDecodeTime;trackFragmentHeader=box(types.tfhd,new Uint8Array([0x00,// version 0\n0x00,0x00,0x3a,// flags\n(track.id&0xFF000000)>>24,(track.id&0xFF0000)>>16,(track.id&0xFF00)>>8,track.id&0xFF,// track_ID\n0x00,0x00,0x00,0x01,// sample_description_index\n0x00,0x00,0x00,0x00,// default_sample_duration\n0x00,0x00,0x00,0x00,// default_sample_size\n0x00,0x00,0x00,0x00// default_sample_flags\n]));upperWordBaseMediaDecodeTime=Math.floor(track.baseMediaDecodeTime/(UINT32_MAX+1));lowerWordBaseMediaDecodeTime=Math.floor(track.baseMediaDecodeTime%(UINT32_MAX+1));trackFragmentDecodeTime=box(types.tfdt,new Uint8Array([0x01,// version 1\n0x00,0x00,0x00,// flags\n// baseMediaDecodeTime\nupperWordBaseMediaDecodeTime>>>24&0xFF,upperWordBaseMediaDecodeTime>>>16&0xFF,upperWordBaseMediaDecodeTime>>>8&0xFF,upperWordBaseMediaDecodeTime&0xFF,lowerWordBaseMediaDecodeTime>>>24&0xFF,lowerWordBaseMediaDecodeTime>>>16&0xFF,lowerWordBaseMediaDecodeTime>>>8&0xFF,lowerWordBaseMediaDecodeTime&0xFF]));// the data offset specifies the number of bytes from the start of\n// the containing moof to the first payload byte of the associated\n// mdat\ndataOffset=32+// tfhd\n20+// tfdt\n8+// traf header\n16+// mfhd\n8+// moof header\n8;// mdat header\n// audio tracks require less metadata\nif(track.type==='audio'){trackFragmentRun=trun(track,dataOffset);return box(types.traf,trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun);}// video tracks should contain an independent and disposable samples\n// box (sdtp)\n// generate one and adjust offsets to match\nsampleDependencyTable=sdtp(track);trackFragmentRun=trun(track,sampleDependencyTable.length+dataOffset);return box(types.traf,trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun,sampleDependencyTable);};/**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */trak=function trak(track){track.duration=track.duration||0xffffffff;return box(types.trak,tkhd(track),mdia(track));};trex=function trex(track){var result=new Uint8Array([0x00,// version 0\n0x00,0x00,0x00,// flags\n(track.id&0xFF000000)>>24,(track.id&0xFF0000)>>16,(track.id&0xFF00)>>8,track.id&0xFF,// track_ID\n0x00,0x00,0x00,0x01,// default_sample_description_index\n0x00,0x00,0x00,0x00,// default_sample_duration\n0x00,0x00,0x00,0x00,// default_sample_size\n0x00,0x01,0x00,0x01// default_sample_flags\n]);// the last two bytes of default_sample_flags is the sample\n// degradation priority, a hint about the importance of this sample\n// relative to others. Lower the degradation priority for all sample\n// types other than video.\nif(track.type!=='video'){result[result.length-1]=0x00;}return box(types.trex,result);};(function(){var audioTrun,videoTrun,trunHeader;// This method assumes all samples are uniform. That is, if a\n// duration is present for the first sample, it will be present for\n// all subsequent samples.\n// see ISO/IEC 14496-12:2012, Section 8.8.8.1\ntrunHeader=function trunHeader(samples,offset){var durationPresent=0,sizePresent=0,flagsPresent=0,compositionTimeOffset=0;// trun flag constants\nif(samples.length){if(samples[0].duration!==undefined){durationPresent=0x1;}if(samples[0].size!==undefined){sizePresent=0x2;}if(samples[0].flags!==undefined){flagsPresent=0x4;}if(samples[0].compositionTimeOffset!==undefined){compositionTimeOffset=0x8;}}return[0x00,// version 0\n0x00,durationPresent|sizePresent|flagsPresent|compositionTimeOffset,0x01,// flags\n(samples.length&0xFF000000)>>>24,(samples.length&0xFF0000)>>>16,(samples.length&0xFF00)>>>8,samples.length&0xFF,// sample_count\n(offset&0xFF000000)>>>24,(offset&0xFF0000)>>>16,(offset&0xFF00)>>>8,offset&0xFF// data_offset\n];};videoTrun=function videoTrun(track,offset){var bytes,samples,sample,i;samples=track.samples||[];offset+=8+12+16*samples.length;bytes=trunHeader(samples,offset);for(i=0;i<samples.length;i++){sample=samples[i];bytes=bytes.concat([(sample.duration&0xFF000000)>>>24,(sample.duration&0xFF0000)>>>16,(sample.duration&0xFF00)>>>8,sample.duration&0xFF,// sample_duration\n(sample.size&0xFF000000)>>>24,(sample.size&0xFF0000)>>>16,(sample.size&0xFF00)>>>8,sample.size&0xFF,// sample_size\nsample.flags.isLeading<<2|sample.flags.dependsOn,sample.flags.isDependedOn<<6|sample.flags.hasRedundancy<<4|sample.flags.paddingValue<<1|sample.flags.isNonSyncSample,sample.flags.degradationPriority&0xF0<<8,sample.flags.degradationPriority&0x0F,// sample_flags\n(sample.compositionTimeOffset&0xFF000000)>>>24,(sample.compositionTimeOffset&0xFF0000)>>>16,(sample.compositionTimeOffset&0xFF00)>>>8,sample.compositionTimeOffset&0xFF// sample_composition_time_offset\n]);}return box(types.trun,new Uint8Array(bytes));};audioTrun=function audioTrun(track,offset){var bytes,samples,sample,i;samples=track.samples||[];offset+=8+12+8*samples.length;bytes=trunHeader(samples,offset);for(i=0;i<samples.length;i++){sample=samples[i];bytes=bytes.concat([(sample.duration&0xFF000000)>>>24,(sample.duration&0xFF0000)>>>16,(sample.duration&0xFF00)>>>8,sample.duration&0xFF,// sample_duration\n(sample.size&0xFF000000)>>>24,(sample.size&0xFF0000)>>>16,(sample.size&0xFF00)>>>8,sample.size&0xFF]);// sample_size\n}return box(types.trun,new Uint8Array(bytes));};trun=function trun(track,offset){if(track.type==='audio'){return audioTrun(track,offset);}return videoTrun(track,offset);};})();var mp4Generator={ftyp:ftyp,mdat:mdat,moof:moof,moov:moov,initSegment:function initSegment(tracks){var fileType=ftyp(),movie=moov(tracks),result;result=new Uint8Array(fileType.byteLength+movie.byteLength);result.set(fileType);result.set(movie,fileType.byteLength);return result;}};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */ // Convert an array of nal units into an array of frames with each frame being\n// composed of the nal units that make up that frame\n// Also keep track of cummulative data about the frame from the nal units such\n// as the frame duration, starting pts, etc.\nvar groupNalsIntoFrames=function groupNalsIntoFrames(nalUnits){var i,currentNal,currentFrame=[],frames=[];// TODO added for LHLS, make sure this is OK\nframes.byteLength=0;frames.nalCount=0;frames.duration=0;currentFrame.byteLength=0;for(i=0;i<nalUnits.length;i++){currentNal=nalUnits[i];// Split on 'aud'-type nal units\nif(currentNal.nalUnitType==='access_unit_delimiter_rbsp'){// Since the very first nal unit is expected to be an AUD\n// only push to the frames array when currentFrame is not empty\nif(currentFrame.length){currentFrame.duration=currentNal.dts-currentFrame.dts;// TODO added for LHLS, make sure this is OK\nframes.byteLength+=currentFrame.byteLength;frames.nalCount+=currentFrame.length;frames.duration+=currentFrame.duration;frames.push(currentFrame);}currentFrame=[currentNal];currentFrame.byteLength=currentNal.data.byteLength;currentFrame.pts=currentNal.pts;currentFrame.dts=currentNal.dts;}else{// Specifically flag key frames for ease of use later\nif(currentNal.nalUnitType==='slice_layer_without_partitioning_rbsp_idr'){currentFrame.keyFrame=true;}currentFrame.duration=currentNal.dts-currentFrame.dts;currentFrame.byteLength+=currentNal.data.byteLength;currentFrame.push(currentNal);}}// For the last frame, use the duration of the previous frame if we\n// have nothing better to go on\nif(frames.length&&(!currentFrame.duration||currentFrame.duration<=0)){currentFrame.duration=frames[frames.length-1].duration;}// Push the final frame\n// TODO added for LHLS, make sure this is OK\nframes.byteLength+=currentFrame.byteLength;frames.nalCount+=currentFrame.length;frames.duration+=currentFrame.duration;frames.push(currentFrame);return frames;};// Convert an array of frames into an array of Gop with each Gop being composed\n// of the frames that make up that Gop\n// Also keep track of cummulative data about the Gop from the frames such as the\n// Gop duration, starting pts, etc.\nvar groupFramesIntoGops=function groupFramesIntoGops(frames){var i,currentFrame,currentGop=[],gops=[];// We must pre-set some of the values on the Gop since we\n// keep running totals of these values\ncurrentGop.byteLength=0;currentGop.nalCount=0;currentGop.duration=0;currentGop.pts=frames[0].pts;currentGop.dts=frames[0].dts;// store some metadata about all the Gops\ngops.byteLength=0;gops.nalCount=0;gops.duration=0;gops.pts=frames[0].pts;gops.dts=frames[0].dts;for(i=0;i<frames.length;i++){currentFrame=frames[i];if(currentFrame.keyFrame){// Since the very first frame is expected to be an keyframe\n// only push to the gops array when currentGop is not empty\nif(currentGop.length){gops.push(currentGop);gops.byteLength+=currentGop.byteLength;gops.nalCount+=currentGop.nalCount;gops.duration+=currentGop.duration;}currentGop=[currentFrame];currentGop.nalCount=currentFrame.length;currentGop.byteLength=currentFrame.byteLength;currentGop.pts=currentFrame.pts;currentGop.dts=currentFrame.dts;currentGop.duration=currentFrame.duration;}else{currentGop.duration+=currentFrame.duration;currentGop.nalCount+=currentFrame.length;currentGop.byteLength+=currentFrame.byteLength;currentGop.push(currentFrame);}}if(gops.length&¤tGop.duration<=0){currentGop.duration=gops[gops.length-1].duration;}gops.byteLength+=currentGop.byteLength;gops.nalCount+=currentGop.nalCount;gops.duration+=currentGop.duration;// push the final Gop\ngops.push(currentGop);return gops;};/*\n * Search for the first keyframe in the GOPs and throw away all frames\n * until that keyframe. Then extend the duration of the pulled keyframe\n * and pull the PTS and DTS of the keyframe so that it covers the time\n * range of the frames that were disposed.\n *\n * @param {Array} gops video GOPs\n * @returns {Array} modified video GOPs\n */var extendFirstKeyFrame=function extendFirstKeyFrame(gops){var currentGop;if(!gops[0][0].keyFrame&&gops.length>1){// Remove the first GOP\ncurrentGop=gops.shift();gops.byteLength-=currentGop.byteLength;gops.nalCount-=currentGop.nalCount;// Extend the first frame of what is now the\n// first gop to cover the time period of the\n// frames we just removed\ngops[0][0].dts=currentGop.dts;gops[0][0].pts=currentGop.pts;gops[0][0].duration+=currentGop.duration;}return gops;};/**\n * Default sample object\n * see ISO/IEC 14496-12:2012, section 8.6.4.3\n */var createDefaultSample=function createDefaultSample(){return{size:0,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0,degradationPriority:0,isNonSyncSample:1}};};/*\n * Collates information from a video frame into an object for eventual\n * entry into an MP4 sample table.\n *\n * @param {Object} frame the video frame\n * @param {Number} dataOffset the byte offset to position the sample\n * @return {Object} object containing sample table info for a frame\n */var sampleForFrame=function sampleForFrame(frame,dataOffset){var sample=createDefaultSample();sample.dataOffset=dataOffset;sample.compositionTimeOffset=frame.pts-frame.dts;sample.duration=frame.duration;sample.size=4*frame.length;// Space for nal unit size\nsample.size+=frame.byteLength;if(frame.keyFrame){sample.flags.dependsOn=2;sample.flags.isNonSyncSample=0;}return sample;};// generate the track's sample table from an array of gops\nvar generateSampleTable=function generateSampleTable(gops,baseDataOffset){var h,i,sample,currentGop,currentFrame,dataOffset=baseDataOffset||0,samples=[];for(h=0;h<gops.length;h++){currentGop=gops[h];for(i=0;i<currentGop.length;i++){currentFrame=currentGop[i];sample=sampleForFrame(currentFrame,dataOffset);dataOffset+=sample.size;samples.push(sample);}}return samples;};// generate the track's raw mdat data from an array of gops\nvar concatenateNalData=function concatenateNalData(gops){var h,i,j,currentGop,currentFrame,currentNal,dataOffset=0,nalsByteLength=gops.byteLength,numberOfNals=gops.nalCount,totalByteLength=nalsByteLength+4*numberOfNals,data=new Uint8Array(totalByteLength),view=new DataView(data.buffer);// For each Gop..\nfor(h=0;h<gops.length;h++){currentGop=gops[h];// For each Frame..\nfor(i=0;i<currentGop.length;i++){currentFrame=currentGop[i];// For each NAL..\nfor(j=0;j<currentFrame.length;j++){currentNal=currentFrame[j];view.setUint32(dataOffset,currentNal.data.byteLength);dataOffset+=4;data.set(currentNal.data,dataOffset);dataOffset+=currentNal.data.byteLength;}}}return data;};// generate the track's sample table from a frame\nvar generateSampleTableForFrame=function generateSampleTableForFrame(frame,baseDataOffset){var sample,dataOffset=baseDataOffset||0,samples=[];sample=sampleForFrame(frame,dataOffset);samples.push(sample);return samples;};// generate the track's raw mdat data from a frame\nvar concatenateNalDataForFrame=function concatenateNalDataForFrame(frame){var i,currentNal,dataOffset=0,nalsByteLength=frame.byteLength,numberOfNals=frame.length,totalByteLength=nalsByteLength+4*numberOfNals,data=new Uint8Array(totalByteLength),view=new DataView(data.buffer);// For each NAL..\nfor(i=0;i<frame.length;i++){currentNal=frame[i];view.setUint32(dataOffset,currentNal.data.byteLength);dataOffset+=4;data.set(currentNal.data,dataOffset);dataOffset+=currentNal.data.byteLength;}return data;};var frameUtils={groupNalsIntoFrames:groupNalsIntoFrames,groupFramesIntoGops:groupFramesIntoGops,extendFirstKeyFrame:extendFirstKeyFrame,generateSampleTable:generateSampleTable,concatenateNalData:concatenateNalData,generateSampleTableForFrame:generateSampleTableForFrame,concatenateNalDataForFrame:concatenateNalDataForFrame};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */var highPrefix=[33,16,5,32,164,27];var lowPrefix=[33,65,108,84,1,2,4,8,168,2,4,8,17,191,252];var zeroFill=function zeroFill(count){var a=[];while(count--){a.push(0);}return a;};var makeTable=function makeTable(metaTable){return Object.keys(metaTable).reduce(function(obj,key){obj[key]=new Uint8Array(metaTable[key].reduce(function(arr,part){return arr.concat(part);},[]));return obj;},{});};// Frames-of-silence to use for filling in missing AAC frames\nvar coneOfSilence={96000:[highPrefix,[227,64],zeroFill(154),[56]],88200:[highPrefix,[231],zeroFill(170),[56]],64000:[highPrefix,[248,192],zeroFill(240),[56]],48000:[highPrefix,[255,192],zeroFill(268),[55,148,128],zeroFill(54),[112]],44100:[highPrefix,[255,192],zeroFill(268),[55,163,128],zeroFill(84),[112]],32000:[highPrefix,[255,192],zeroFill(268),[55,234],zeroFill(226),[112]],24000:[highPrefix,[255,192],zeroFill(268),[55,255,128],zeroFill(268),[111,112],zeroFill(126),[224]],16000:[highPrefix,[255,192],zeroFill(268),[55,255,128],zeroFill(268),[111,255],zeroFill(269),[223,108],zeroFill(195),[1,192]],12000:[lowPrefix,zeroFill(268),[3,127,248],zeroFill(268),[6,255,240],zeroFill(268),[13,255,224],zeroFill(268),[27,253,128],zeroFill(259),[56]],11025:[lowPrefix,zeroFill(268),[3,127,248],zeroFill(268),[6,255,240],zeroFill(268),[13,255,224],zeroFill(268),[27,255,192],zeroFill(268),[55,175,128],zeroFill(108),[112]],8000:[lowPrefix,zeroFill(268),[3,121,16],zeroFill(47),[7]]};var silence=makeTable(coneOfSilence);/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */var ONE_SECOND_IN_TS=90000,// 90kHz clock\nsecondsToVideoTs,secondsToAudioTs,videoTsToSeconds,audioTsToSeconds,audioTsToVideoTs,videoTsToAudioTs,metadataTsToSeconds;secondsToVideoTs=function secondsToVideoTs(seconds){return seconds*ONE_SECOND_IN_TS;};secondsToAudioTs=function secondsToAudioTs(seconds,sampleRate){return seconds*sampleRate;};videoTsToSeconds=function videoTsToSeconds(timestamp){return timestamp/ONE_SECOND_IN_TS;};audioTsToSeconds=function audioTsToSeconds(timestamp,sampleRate){return timestamp/sampleRate;};audioTsToVideoTs=function audioTsToVideoTs(timestamp,sampleRate){return secondsToVideoTs(audioTsToSeconds(timestamp,sampleRate));};videoTsToAudioTs=function videoTsToAudioTs(timestamp,sampleRate){return secondsToAudioTs(videoTsToSeconds(timestamp),sampleRate);};/**\n * Adjust ID3 tag or caption timing information by the timeline pts values\n * (if keepOriginalTimestamps is false) and convert to seconds\n */metadataTsToSeconds=function metadataTsToSeconds(timestamp,timelineStartPts,keepOriginalTimestamps){return videoTsToSeconds(keepOriginalTimestamps?timestamp:timestamp-timelineStartPts);};var clock={ONE_SECOND_IN_TS:ONE_SECOND_IN_TS,secondsToVideoTs:secondsToVideoTs,secondsToAudioTs:secondsToAudioTs,videoTsToSeconds:videoTsToSeconds,audioTsToSeconds:audioTsToSeconds,audioTsToVideoTs:audioTsToVideoTs,videoTsToAudioTs:videoTsToAudioTs,metadataTsToSeconds:metadataTsToSeconds};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */ /**\n * Sum the `byteLength` properties of the data in each AAC frame\n */var sumFrameByteLengths=function sumFrameByteLengths(array){var i,currentObj,sum=0;// sum the byteLength's all each nal unit in the frame\nfor(i=0;i<array.length;i++){currentObj=array[i];sum+=currentObj.data.byteLength;}return sum;};// Possibly pad (prefix) the audio track with silence if appending this track\n// would lead to the introduction of a gap in the audio buffer\nvar prefixWithSilence=function prefixWithSilence(track,frames,audioAppendStartTs,videoBaseMediaDecodeTime){var baseMediaDecodeTimeTs,frameDuration=0,audioGapDuration=0,audioFillFrameCount=0,audioFillDuration=0,silentFrame,i,firstFrame;if(!frames.length){return;}baseMediaDecodeTimeTs=clock.audioTsToVideoTs(track.baseMediaDecodeTime,track.samplerate);// determine frame clock duration based on sample rate, round up to avoid overfills\nframeDuration=Math.ceil(clock.ONE_SECOND_IN_TS/(track.samplerate/1024));if(audioAppendStartTs&&videoBaseMediaDecodeTime){// insert the shortest possible amount (audio gap or audio to video gap)\naudioGapDuration=baseMediaDecodeTimeTs-Math.max(audioAppendStartTs,videoBaseMediaDecodeTime);// number of full frames in the audio gap\naudioFillFrameCount=Math.floor(audioGapDuration/frameDuration);audioFillDuration=audioFillFrameCount*frameDuration;}// don't attempt to fill gaps smaller than a single frame or larger\n// than a half second\nif(audioFillFrameCount<1||audioFillDuration>clock.ONE_SECOND_IN_TS/2){return;}silentFrame=silence[track.samplerate];if(!silentFrame){// we don't have a silent frame pregenerated for the sample rate, so use a frame\n// from the content instead\nsilentFrame=frames[0].data;}for(i=0;i<audioFillFrameCount;i++){firstFrame=frames[0];frames.splice(0,0,{data:silentFrame,dts:firstFrame.dts-frameDuration,pts:firstFrame.pts-frameDuration});}track.baseMediaDecodeTime-=Math.floor(clock.videoTsToAudioTs(audioFillDuration,track.samplerate));};// If the audio segment extends before the earliest allowed dts\n// value, remove AAC frames until starts at or after the earliest\n// allowed DTS so that we don't end up with a negative baseMedia-\n// DecodeTime for the audio track\nvar trimAdtsFramesByEarliestDts=function trimAdtsFramesByEarliestDts(adtsFrames,track,earliestAllowedDts){if(track.minSegmentDts>=earliestAllowedDts){return adtsFrames;}// We will need to recalculate the earliest segment Dts\ntrack.minSegmentDts=Infinity;return adtsFrames.filter(function(currentFrame){// If this is an allowed frame, keep it and record it's Dts\nif(currentFrame.dts>=earliestAllowedDts){track.minSegmentDts=Math.min(track.minSegmentDts,currentFrame.dts);track.minSegmentPts=track.minSegmentDts;return true;}// Otherwise, discard it\nreturn false;});};// generate the track's raw mdat data from an array of frames\nvar generateSampleTable$1=function generateSampleTable(frames){var i,currentFrame,samples=[];for(i=0;i<frames.length;i++){currentFrame=frames[i];samples.push({size:currentFrame.data.byteLength,duration:1024// For AAC audio, all samples contain 1024 samples\n});}return samples;};// generate the track's sample table from an array of frames\nvar concatenateFrameData=function concatenateFrameData(frames){var i,currentFrame,dataOffset=0,data=new Uint8Array(sumFrameByteLengths(frames));for(i=0;i<frames.length;i++){currentFrame=frames[i];data.set(currentFrame.data,dataOffset);dataOffset+=currentFrame.data.byteLength;}return data;};var audioFrameUtils={prefixWithSilence:prefixWithSilence,trimAdtsFramesByEarliestDts:trimAdtsFramesByEarliestDts,generateSampleTable:generateSampleTable$1,concatenateFrameData:concatenateFrameData};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */var ONE_SECOND_IN_TS$1=clock.ONE_SECOND_IN_TS;/**\n * Store information about the start and end of the track and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */var collectDtsInfo=function collectDtsInfo(track,data){if(typeof data.pts==='number'){if(track.timelineStartInfo.pts===undefined){track.timelineStartInfo.pts=data.pts;}if(track.minSegmentPts===undefined){track.minSegmentPts=data.pts;}else{track.minSegmentPts=Math.min(track.minSegmentPts,data.pts);}if(track.maxSegmentPts===undefined){track.maxSegmentPts=data.pts;}else{track.maxSegmentPts=Math.max(track.maxSegmentPts,data.pts);}}if(typeof data.dts==='number'){if(track.timelineStartInfo.dts===undefined){track.timelineStartInfo.dts=data.dts;}if(track.minSegmentDts===undefined){track.minSegmentDts=data.dts;}else{track.minSegmentDts=Math.min(track.minSegmentDts,data.dts);}if(track.maxSegmentDts===undefined){track.maxSegmentDts=data.dts;}else{track.maxSegmentDts=Math.max(track.maxSegmentDts,data.dts);}}};/**\n * Clear values used to calculate the baseMediaDecodeTime between\n * tracks\n */var clearDtsInfo=function clearDtsInfo(track){delete track.minSegmentDts;delete track.maxSegmentDts;delete track.minSegmentPts;delete track.maxSegmentPts;};/**\n * Calculate the track's baseMediaDecodeTime based on the earliest\n * DTS the transmuxer has ever seen and the minimum DTS for the\n * current track\n * @param track {object} track metadata configuration\n * @param keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */var calculateTrackBaseMediaDecodeTime=function calculateTrackBaseMediaDecodeTime(track,keepOriginalTimestamps){var baseMediaDecodeTime,scale,minSegmentDts=track.minSegmentDts;// Optionally adjust the time so the first segment starts at zero.\nif(!keepOriginalTimestamps){minSegmentDts-=track.timelineStartInfo.dts;}// track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where\n// we want the start of the first segment to be placed\nbaseMediaDecodeTime=track.timelineStartInfo.baseMediaDecodeTime;// Add to that the distance this segment is from the very first\nbaseMediaDecodeTime+=minSegmentDts;// baseMediaDecodeTime must not become negative\nbaseMediaDecodeTime=Math.max(0,baseMediaDecodeTime);if(track.type==='audio'){// Audio has a different clock equal to the sampling_rate so we need to\n// scale the PTS values into the clock rate of the track\nscale=track.samplerate/ONE_SECOND_IN_TS$1;baseMediaDecodeTime*=scale;baseMediaDecodeTime=Math.floor(baseMediaDecodeTime);}return baseMediaDecodeTime;};var trackDecodeInfo={clearDtsInfo:clearDtsInfo,calculateTrackBaseMediaDecodeTime:calculateTrackBaseMediaDecodeTime,collectDtsInfo:collectDtsInfo};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */ // Supplemental enhancement information (SEI) NAL units have a\n// payload type field to indicate how they are to be\n// interpreted. CEAS-708 caption content is always transmitted with\n// payload type 0x04.\nvar USER_DATA_REGISTERED_ITU_T_T35=4,RBSP_TRAILING_BITS=128;/**\n * Parse a supplemental enhancement information (SEI) NAL unit.\n * Stops parsing once a message of type ITU T T35 has been found.\n *\n * @param bytes {Uint8Array} the bytes of a SEI NAL unit\n * @return {object} the parsed SEI payload\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n */var parseSei=function parseSei(bytes){var i=0,result={payloadType:-1,payloadSize:0},payloadType=0,payloadSize=0;// go through the sei_rbsp parsing each each individual sei_message\nwhile(i<bytes.byteLength){// stop once we have hit the end of the sei_rbsp\nif(bytes[i]===RBSP_TRAILING_BITS){break;}// Parse payload type\nwhile(bytes[i]===0xFF){payloadType+=255;i++;}payloadType+=bytes[i++];// Parse payload size\nwhile(bytes[i]===0xFF){payloadSize+=255;i++;}payloadSize+=bytes[i++];// this sei_message is a 608/708 caption so save it and break\n// there can only ever be one caption message in a frame's sei\nif(!result.payload&&payloadType===USER_DATA_REGISTERED_ITU_T_T35){result.payloadType=payloadType;result.payloadSize=payloadSize;result.payload=bytes.subarray(i,i+payloadSize);break;}// skip the payload and parse the next message\ni+=payloadSize;payloadType=0;payloadSize=0;}return result;};// see ANSI/SCTE 128-1 (2013), section 8.1\nvar parseUserData=function parseUserData(sei){// itu_t_t35_contry_code must be 181 (United States) for\n// captions\nif(sei.payload[0]!==181){return null;}// itu_t_t35_provider_code should be 49 (ATSC) for captions\nif((sei.payload[1]<<8|sei.payload[2])!==49){return null;}// the user_identifier should be \"GA94\" to indicate ATSC1 data\nif(String.fromCharCode(sei.payload[3],sei.payload[4],sei.payload[5],sei.payload[6])!=='GA94'){return null;}// finally, user_data_type_code should be 0x03 for caption data\nif(sei.payload[7]!==0x03){return null;}// return the user_data_type_structure and strip the trailing\n// marker bits\nreturn sei.payload.subarray(8,sei.payload.length-1);};// see CEA-708-D, section 4.4\nvar parseCaptionPackets=function parseCaptionPackets(pts,userData){var results=[],i,count,offset,data;// if this is just filler, return immediately\nif(!(userData[0]&0x40)){return results;}// parse out the cc_data_1 and cc_data_2 fields\ncount=userData[0]&0x1f;for(i=0;i<count;i++){offset=i*3;data={type:userData[offset+2]&0x03,pts:pts};// capture cc data when cc_valid is 1\nif(userData[offset+2]&0x04){data.ccData=userData[offset+3]<<8|userData[offset+4];results.push(data);}}return results;};var discardEmulationPreventionBytes=function discardEmulationPreventionBytes(data){var length=data.byteLength,emulationPreventionBytesPositions=[],i=1,newLength,newData;// Find all `Emulation Prevention Bytes`\nwhile(i<length-2){if(data[i]===0&&data[i+1]===0&&data[i+2]===0x03){emulationPreventionBytesPositions.push(i+2);i+=2;}else{i++;}}// If no Emulation Prevention Bytes were found just return the original\n// array\nif(emulationPreventionBytesPositions.length===0){return data;}// Create a new array to hold the NAL unit data\nnewLength=length-emulationPreventionBytesPositions.length;newData=new Uint8Array(newLength);var sourceIndex=0;for(i=0;i<newLength;sourceIndex++,i++){if(sourceIndex===emulationPreventionBytesPositions[0]){// Skip this byte\nsourceIndex++;// Remove this position index\nemulationPreventionBytesPositions.shift();}newData[i]=data[sourceIndex];}return newData;};// exports\nvar captionPacketParser={parseSei:parseSei,parseUserData:parseUserData,parseCaptionPackets:parseCaptionPackets,discardEmulationPreventionBytes:discardEmulationPreventionBytes,USER_DATA_REGISTERED_ITU_T_T35:USER_DATA_REGISTERED_ITU_T_T35};// -----------------\n// Link To Transport\n// -----------------\nvar CaptionStream=function CaptionStream(){CaptionStream.prototype.init.call(this);this.captionPackets_=[];this.ccStreams_=[new Cea608Stream(0,0),// eslint-disable-line no-use-before-define\nnew Cea608Stream(0,1),// eslint-disable-line no-use-before-define\nnew Cea608Stream(1,0),// eslint-disable-line no-use-before-define\nnew Cea608Stream(1,1)// eslint-disable-line no-use-before-define\n];this.reset();// forward data and done events from CCs to this CaptionStream\nthis.ccStreams_.forEach(function(cc){cc.on('data',this.trigger.bind(this,'data'));cc.on('partialdone',this.trigger.bind(this,'partialdone'));cc.on('done',this.trigger.bind(this,'done'));},this);};CaptionStream.prototype=new stream();CaptionStream.prototype.push=function(event){var sei,userData,newCaptionPackets;// only examine SEI NALs\nif(event.nalUnitType!=='sei_rbsp'){return;}// parse the sei\nsei=captionPacketParser.parseSei(event.escapedRBSP);// ignore everything but user_data_registered_itu_t_t35\nif(sei.payloadType!==captionPacketParser.USER_DATA_REGISTERED_ITU_T_T35){return;}// parse out the user data payload\nuserData=captionPacketParser.parseUserData(sei);// ignore unrecognized userData\nif(!userData){return;}// Sometimes, the same segment # will be downloaded twice. To stop the\n// caption data from being processed twice, we track the latest dts we've\n// received and ignore everything with a dts before that. However, since\n// data for a specific dts can be split across packets on either side of\n// a segment boundary, we need to make sure we *don't* ignore the packets\n// from the *next* segment that have dts === this.latestDts_. By constantly\n// tracking the number of packets received with dts === this.latestDts_, we\n// know how many should be ignored once we start receiving duplicates.\nif(event.dts<this.latestDts_){// We've started getting older data, so set the flag.\nthis.ignoreNextEqualDts_=true;return;}else if(event.dts===this.latestDts_&&this.ignoreNextEqualDts_){this.numSameDts_--;if(!this.numSameDts_){// We've received the last duplicate packet, time to start processing again\nthis.ignoreNextEqualDts_=false;}return;}// parse out CC data packets and save them for later\nnewCaptionPackets=captionPacketParser.parseCaptionPackets(event.pts,userData);this.captionPackets_=this.captionPackets_.concat(newCaptionPackets);if(this.latestDts_!==event.dts){this.numSameDts_=0;}this.numSameDts_++;this.latestDts_=event.dts;};CaptionStream.prototype.flushCCStreams=function(flushType){this.ccStreams_.forEach(function(cc){return flushType==='flush'?cc.flush():cc.partialFlush();},this);};CaptionStream.prototype.flushStream=function(flushType){// make sure we actually parsed captions before proceeding\nif(!this.captionPackets_.length){this.flushCCStreams(flushType);return;}// In Chrome, the Array#sort function is not stable so add a\n// presortIndex that we can use to ensure we get a stable-sort\nthis.captionPackets_.forEach(function(elem,idx){elem.presortIndex=idx;});// sort caption byte-pairs based on their PTS values\nthis.captionPackets_.sort(function(a,b){if(a.pts===b.pts){return a.presortIndex-b.presortIndex;}return a.pts-b.pts;});this.captionPackets_.forEach(function(packet){if(packet.type<2){// Dispatch packet to the right Cea608Stream\nthis.dispatchCea608Packet(packet);}// this is where an 'else' would go for a dispatching packets\n// to a theoretical Cea708Stream that handles SERVICEn data\n},this);this.captionPackets_.length=0;this.flushCCStreams(flushType);};CaptionStream.prototype.flush=function(){return this.flushStream('flush');};// Only called if handling partial data\nCaptionStream.prototype.partialFlush=function(){return this.flushStream('partialFlush');};CaptionStream.prototype.reset=function(){this.latestDts_=null;this.ignoreNextEqualDts_=false;this.numSameDts_=0;this.activeCea608Channel_=[null,null];this.ccStreams_.forEach(function(ccStream){ccStream.reset();});};// From the CEA-608 spec:\n/*\n * When XDS sub-packets are interleaved with other services, the end of each sub-packet shall be followed\n * by a control pair to change to a different service. When any of the control codes from 0x10 to 0x1F is\n * used to begin a control code pair, it indicates the return to captioning or Text data. The control code pair\n * and subsequent data should then be processed according to the FCC rules. It may be necessary for the\n * line 21 data encoder to automatically insert a control code pair (i.e. RCL, RU2, RU3, RU4, RDC, or RTD)\n * to switch to captioning or Text.\n */ // With that in mind, we ignore any data between an XDS control code and a\n// subsequent closed-captioning control code.\nCaptionStream.prototype.dispatchCea608Packet=function(packet){// NOTE: packet.type is the CEA608 field\nif(this.setsTextOrXDSActive(packet)){this.activeCea608Channel_[packet.type]=null;}else if(this.setsChannel1Active(packet)){this.activeCea608Channel_[packet.type]=0;}else if(this.setsChannel2Active(packet)){this.activeCea608Channel_[packet.type]=1;}if(this.activeCea608Channel_[packet.type]===null){// If we haven't received anything to set the active channel, or the\n// packets are Text/XDS data, discard the data; we don't want jumbled\n// captions\nreturn;}this.ccStreams_[(packet.type<<1)+this.activeCea608Channel_[packet.type]].push(packet);};CaptionStream.prototype.setsChannel1Active=function(packet){return(packet.ccData&0x7800)===0x1000;};CaptionStream.prototype.setsChannel2Active=function(packet){return(packet.ccData&0x7800)===0x1800;};CaptionStream.prototype.setsTextOrXDSActive=function(packet){return(packet.ccData&0x7100)===0x0100||(packet.ccData&0x78fe)===0x102a||(packet.ccData&0x78fe)===0x182a;};// ----------------------\n// Session to Application\n// ----------------------\n// This hash maps non-ASCII, special, and extended character codes to their\n// proper Unicode equivalent. The first keys that are only a single byte\n// are the non-standard ASCII characters, which simply map the CEA608 byte\n// to the standard ASCII/Unicode. The two-byte keys that follow are the CEA608\n// character codes, but have their MSB bitmasked with 0x03 so that a lookup\n// can be performed regardless of the field and data channel on which the\n// character code was received.\nvar CHARACTER_TRANSLATION={0x2a:0xe1,// á\n0x5c:0xe9,// é\n0x5e:0xed,// í\n0x5f:0xf3,// ó\n0x60:0xfa,// ú\n0x7b:0xe7,// ç\n0x7c:0xf7,// ÷\n0x7d:0xd1,// Ñ\n0x7e:0xf1,// ñ\n0x7f:0x2588,// █\n0x0130:0xae,// ®\n0x0131:0xb0,// °\n0x0132:0xbd,// ½\n0x0133:0xbf,// ¿\n0x0134:0x2122,// ™\n0x0135:0xa2,// ¢\n0x0136:0xa3,// £\n0x0137:0x266a,// ♪\n0x0138:0xe0,// à\n0x0139:0xa0,//\n0x013a:0xe8,// è\n0x013b:0xe2,// â\n0x013c:0xea,// ê\n0x013d:0xee,// î\n0x013e:0xf4,// ô\n0x013f:0xfb,// û\n0x0220:0xc1,// Á\n0x0221:0xc9,// É\n0x0222:0xd3,// Ó\n0x0223:0xda,// Ú\n0x0224:0xdc,// Ü\n0x0225:0xfc,// ü\n0x0226:0x2018,// ‘\n0x0227:0xa1,// ¡\n0x0228:0x2a,// *\n0x0229:0x27,// '\n0x022a:0x2014,// —\n0x022b:0xa9,// ©\n0x022c:0x2120,// ℠\n0x022d:0x2022,// •\n0x022e:0x201c,// “\n0x022f:0x201d,// ”\n0x0230:0xc0,// À\n0x0231:0xc2,// Â\n0x0232:0xc7,// Ç\n0x0233:0xc8,// È\n0x0234:0xca,// Ê\n0x0235:0xcb,// Ë\n0x0236:0xeb,// ë\n0x0237:0xce,// Î\n0x0238:0xcf,// Ï\n0x0239:0xef,// ï\n0x023a:0xd4,// Ô\n0x023b:0xd9,// Ù\n0x023c:0xf9,// ù\n0x023d:0xdb,// Û\n0x023e:0xab,// «\n0x023f:0xbb,// »\n0x0320:0xc3,// Ã\n0x0321:0xe3,// ã\n0x0322:0xcd,// Í\n0x0323:0xcc,// Ì\n0x0324:0xec,// ì\n0x0325:0xd2,// Ò\n0x0326:0xf2,// ò\n0x0327:0xd5,// Õ\n0x0328:0xf5,// õ\n0x0329:0x7b,// {\n0x032a:0x7d,// }\n0x032b:0x5c,// \\\n0x032c:0x5e,// ^\n0x032d:0x5f,// _\n0x032e:0x7c,// |\n0x032f:0x7e,// ~\n0x0330:0xc4,// Ä\n0x0331:0xe4,// ä\n0x0332:0xd6,// Ö\n0x0333:0xf6,// ö\n0x0334:0xdf,// ß\n0x0335:0xa5,// ¥\n0x0336:0xa4,// ¤\n0x0337:0x2502,// │\n0x0338:0xc5,// Å\n0x0339:0xe5,// å\n0x033a:0xd8,// Ø\n0x033b:0xf8,// ø\n0x033c:0x250c,// ┌\n0x033d:0x2510,// ┐\n0x033e:0x2514,// └\n0x033f:0x2518// ┘\n};var getCharFromCode=function getCharFromCode(code){if(code===null){return'';}code=CHARACTER_TRANSLATION[code]||code;return String.fromCharCode(code);};// the index of the last row in a CEA-608 display buffer\nvar BOTTOM_ROW=14;// This array is used for mapping PACs -> row #, since there's no way of\n// getting it through bit logic.\nvar ROWS=[0x1100,0x1120,0x1200,0x1220,0x1500,0x1520,0x1600,0x1620,0x1700,0x1720,0x1000,0x1300,0x1320,0x1400,0x1420];// CEA-608 captions are rendered onto a 34x15 matrix of character\n// cells. The \"bottom\" row is the last element in the outer array.\nvar createDisplayBuffer=function createDisplayBuffer(){var result=[],i=BOTTOM_ROW+1;while(i--){result.push('');}return result;};var Cea608Stream=function Cea608Stream(field,dataChannel){Cea608Stream.prototype.init.call(this);this.field_=field||0;this.dataChannel_=dataChannel||0;this.name_='CC'+((this.field_<<1|this.dataChannel_)+1);this.setConstants();this.reset();this.push=function(packet){var data,swap,char0,char1,text;// remove the parity bits\ndata=packet.ccData&0x7f7f;// ignore duplicate control codes; the spec demands they're sent twice\nif(data===this.lastControlCode_){this.lastControlCode_=null;return;}// Store control codes\nif((data&0xf000)===0x1000){this.lastControlCode_=data;}else if(data!==this.PADDING_){this.lastControlCode_=null;}char0=data>>>8;char1=data&0xff;if(data===this.PADDING_){return;}else if(data===this.RESUME_CAPTION_LOADING_){this.mode_='popOn';}else if(data===this.END_OF_CAPTION_){// If an EOC is received while in paint-on mode, the displayed caption\n// text should be swapped to non-displayed memory as if it was a pop-on\n// caption. Because of that, we should explicitly switch back to pop-on\n// mode\nthis.mode_='popOn';this.clearFormatting(packet.pts);// if a caption was being displayed, it's gone now\nthis.flushDisplayed(packet.pts);// flip memory\nswap=this.displayed_;this.displayed_=this.nonDisplayed_;this.nonDisplayed_=swap;// start measuring the time to display the caption\nthis.startPts_=packet.pts;}else if(data===this.ROLL_UP_2_ROWS_){this.rollUpRows_=2;this.setRollUp(packet.pts);}else if(data===this.ROLL_UP_3_ROWS_){this.rollUpRows_=3;this.setRollUp(packet.pts);}else if(data===this.ROLL_UP_4_ROWS_){this.rollUpRows_=4;this.setRollUp(packet.pts);}else if(data===this.CARRIAGE_RETURN_){this.clearFormatting(packet.pts);this.flushDisplayed(packet.pts);this.shiftRowsUp_();this.startPts_=packet.pts;}else if(data===this.BACKSPACE_){if(this.mode_==='popOn'){this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1);}else{this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1);}}else if(data===this.ERASE_DISPLAYED_MEMORY_){this.flushDisplayed(packet.pts);this.displayed_=createDisplayBuffer();}else if(data===this.ERASE_NON_DISPLAYED_MEMORY_){this.nonDisplayed_=createDisplayBuffer();}else if(data===this.RESUME_DIRECT_CAPTIONING_){if(this.mode_!=='paintOn'){// NOTE: This should be removed when proper caption positioning is\n// implemented\nthis.flushDisplayed(packet.pts);this.displayed_=createDisplayBuffer();}this.mode_='paintOn';this.startPts_=packet.pts;// Append special characters to caption text\n}else if(this.isSpecialCharacter(char0,char1)){// Bitmask char0 so that we can apply character transformations\n// regardless of field and data channel.\n// Then byte-shift to the left and OR with char1 so we can pass the\n// entire character code to `getCharFromCode`.\nchar0=(char0&0x03)<<8;text=getCharFromCode(char0|char1);this[this.mode_](packet.pts,text);this.column_++;// Append extended characters to caption text\n}else if(this.isExtCharacter(char0,char1)){// Extended characters always follow their \"non-extended\" equivalents.\n// IE if a \"è\" is desired, you'll always receive \"eè\"; non-compliant\n// decoders are supposed to drop the \"è\", while compliant decoders\n// backspace the \"e\" and insert \"è\".\n// Delete the previous character\nif(this.mode_==='popOn'){this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1);}else{this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1);}// Bitmask char0 so that we can apply character transformations\n// regardless of field and data channel.\n// Then byte-shift to the left and OR with char1 so we can pass the\n// entire character code to `getCharFromCode`.\nchar0=(char0&0x03)<<8;text=getCharFromCode(char0|char1);this[this.mode_](packet.pts,text);this.column_++;// Process mid-row codes\n}else if(this.isMidRowCode(char0,char1)){// Attributes are not additive, so clear all formatting\nthis.clearFormatting(packet.pts);// According to the standard, mid-row codes\n// should be replaced with spaces, so add one now\nthis[this.mode_](packet.pts,' ');this.column_++;if((char1&0xe)===0xe){this.addFormatting(packet.pts,['i']);}if((char1&0x1)===0x1){this.addFormatting(packet.pts,['u']);}// Detect offset control codes and adjust cursor\n}else if(this.isOffsetControlCode(char0,char1)){// Cursor position is set by indent PAC (see below) in 4-column\n// increments, with an additional offset code of 1-3 to reach any\n// of the 32 columns specified by CEA-608. So all we need to do\n// here is increment the column cursor by the given offset.\nthis.column_+=char1&0x03;// Detect PACs (Preamble Address Codes)\n}else if(this.isPAC(char0,char1)){// There's no logic for PAC -> row mapping, so we have to just\n// find the row code in an array and use its index :(\nvar row=ROWS.indexOf(data&0x1f20);// Configure the caption window if we're in roll-up mode\nif(this.mode_==='rollUp'){// This implies that the base row is incorrectly set.\n// As per the recommendation in CEA-608(Base Row Implementation), defer to the number\n// of roll-up rows set.\nif(row-this.rollUpRows_+1<0){row=this.rollUpRows_-1;}this.setRollUp(packet.pts,row);}if(row!==this.row_){// formatting is only persistent for current row\nthis.clearFormatting(packet.pts);this.row_=row;}// All PACs can apply underline, so detect and apply\n// (All odd-numbered second bytes set underline)\nif(char1&0x1&&this.formatting_.indexOf('u')===-1){this.addFormatting(packet.pts,['u']);}if((data&0x10)===0x10){// We've got an indent level code. Each successive even number\n// increments the column cursor by 4, so we can get the desired\n// column position by bit-shifting to the right (to get n/2)\n// and multiplying by 4.\nthis.column_=((data&0xe)>>1)*4;}if(this.isColorPAC(char1)){// it's a color code, though we only support white, which\n// can be either normal or italicized. white italics can be\n// either 0x4e or 0x6e depending on the row, so we just\n// bitwise-and with 0xe to see if italics should be turned on\nif((char1&0xe)===0xe){this.addFormatting(packet.pts,['i']);}}// We have a normal character in char0, and possibly one in char1\n}else if(this.isNormalChar(char0)){if(char1===0x00){char1=null;}text=getCharFromCode(char0);text+=getCharFromCode(char1);this[this.mode_](packet.pts,text);this.column_+=text.length;}// finish data processing\n};};Cea608Stream.prototype=new stream();// Trigger a cue point that captures the current state of the\n// display buffer\nCea608Stream.prototype.flushDisplayed=function(pts){var content=this.displayed_// remove spaces from the start and end of the string\n.map(function(row){try{return row.trim();}catch(e){// Ordinarily, this shouldn't happen. However, caption\n// parsing errors should not throw exceptions and\n// break playback.\n// eslint-disable-next-line no-console\nconsole.error('Skipping malformed caption.');return'';}})// combine all text rows to display in one cue\n.join('\\n')// and remove blank rows from the start and end, but not the middle\n.replace(/^\\n+|\\n+$/g,'');if(content.length){this.trigger('data',{startPts:this.startPts_,endPts:pts,text:content,stream:this.name_});}};/**\n * Zero out the data, used for startup and on seek\n */Cea608Stream.prototype.reset=function(){this.mode_='popOn';// When in roll-up mode, the index of the last row that will\n// actually display captions. If a caption is shifted to a row\n// with a lower index than this, it is cleared from the display\n// buffer\nthis.topRow_=0;this.startPts_=0;this.displayed_=createDisplayBuffer();this.nonDisplayed_=createDisplayBuffer();this.lastControlCode_=null;// Track row and column for proper line-breaking and spacing\nthis.column_=0;this.row_=BOTTOM_ROW;this.rollUpRows_=2;// This variable holds currently-applied formatting\nthis.formatting_=[];};/**\n * Sets up control code and related constants for this instance\n */Cea608Stream.prototype.setConstants=function(){// The following attributes have these uses:\n// ext_ : char0 for mid-row codes, and the base for extended\n// chars (ext_+0, ext_+1, and ext_+2 are char0s for\n// extended codes)\n// control_: char0 for control codes, except byte-shifted to the\n// left so that we can do this.control_ | CONTROL_CODE\n// offset_: char0 for tab offset codes\n//\n// It's also worth noting that control codes, and _only_ control codes,\n// differ between field 1 and field2. Field 2 control codes are always\n// their field 1 value plus 1. That's why there's the \"| field\" on the\n// control value.\nif(this.dataChannel_===0){this.BASE_=0x10;this.EXT_=0x11;this.CONTROL_=(0x14|this.field_)<<8;this.OFFSET_=0x17;}else if(this.dataChannel_===1){this.BASE_=0x18;this.EXT_=0x19;this.CONTROL_=(0x1c|this.field_)<<8;this.OFFSET_=0x1f;}// Constants for the LSByte command codes recognized by Cea608Stream. This\n// list is not exhaustive. For a more comprehensive listing and semantics see\n// http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf\n// Padding\nthis.PADDING_=0x0000;// Pop-on Mode\nthis.RESUME_CAPTION_LOADING_=this.CONTROL_|0x20;this.END_OF_CAPTION_=this.CONTROL_|0x2f;// Roll-up Mode\nthis.ROLL_UP_2_ROWS_=this.CONTROL_|0x25;this.ROLL_UP_3_ROWS_=this.CONTROL_|0x26;this.ROLL_UP_4_ROWS_=this.CONTROL_|0x27;this.CARRIAGE_RETURN_=this.CONTROL_|0x2d;// paint-on mode\nthis.RESUME_DIRECT_CAPTIONING_=this.CONTROL_|0x29;// Erasure\nthis.BACKSPACE_=this.CONTROL_|0x21;this.ERASE_DISPLAYED_MEMORY_=this.CONTROL_|0x2c;this.ERASE_NON_DISPLAYED_MEMORY_=this.CONTROL_|0x2e;};/**\n * Detects if the 2-byte packet data is a special character\n *\n * Special characters have a second byte in the range 0x30 to 0x3f,\n * with the first byte being 0x11 (for data channel 1) or 0x19 (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an special character\n */Cea608Stream.prototype.isSpecialCharacter=function(char0,char1){return char0===this.EXT_&&char1>=0x30&&char1<=0x3f;};/**\n * Detects if the 2-byte packet data is an extended character\n *\n * Extended characters have a second byte in the range 0x20 to 0x3f,\n * with the first byte being 0x12 or 0x13 (for data channel 1) or\n * 0x1a or 0x1b (for data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an extended character\n */Cea608Stream.prototype.isExtCharacter=function(char0,char1){return(char0===this.EXT_+1||char0===this.EXT_+2)&&char1>=0x20&&char1<=0x3f;};/**\n * Detects if the 2-byte packet is a mid-row code\n *\n * Mid-row codes have a second byte in the range 0x20 to 0x2f, with\n * the first byte being 0x11 (for data channel 1) or 0x19 (for data\n * channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a mid-row code\n */Cea608Stream.prototype.isMidRowCode=function(char0,char1){return char0===this.EXT_&&char1>=0x20&&char1<=0x2f;};/**\n * Detects if the 2-byte packet is an offset control code\n *\n * Offset control codes have a second byte in the range 0x21 to 0x23,\n * with the first byte being 0x17 (for data channel 1) or 0x1f (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an offset control code\n */Cea608Stream.prototype.isOffsetControlCode=function(char0,char1){return char0===this.OFFSET_&&char1>=0x21&&char1<=0x23;};/**\n * Detects if the 2-byte packet is a Preamble Address Code\n *\n * PACs have a first byte in the range 0x10 to 0x17 (for data channel 1)\n * or 0x18 to 0x1f (for data channel 2), with the second byte in the\n * range 0x40 to 0x7f.\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a PAC\n */Cea608Stream.prototype.isPAC=function(char0,char1){return char0>=this.BASE_&&char0<this.BASE_+8&&char1>=0x40&&char1<=0x7f;};/**\n * Detects if a packet's second byte is in the range of a PAC color code\n *\n * PAC color codes have the second byte be in the range 0x40 to 0x4f, or\n * 0x60 to 0x6f.\n *\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the byte is a color PAC\n */Cea608Stream.prototype.isColorPAC=function(char1){return char1>=0x40&&char1<=0x4f||char1>=0x60&&char1<=0x7f;};/**\n * Detects if a single byte is in the range of a normal character\n *\n * Normal text bytes are in the range 0x20 to 0x7f.\n *\n * @param {Integer} char The byte\n * @return {Boolean} Whether the byte is a normal character\n */Cea608Stream.prototype.isNormalChar=function(_char){return _char>=0x20&&_char<=0x7f;};/**\n * Configures roll-up\n *\n * @param {Integer} pts Current PTS\n * @param {Integer} newBaseRow Used by PACs to slide the current window to\n * a new position\n */Cea608Stream.prototype.setRollUp=function(pts,newBaseRow){// Reset the base row to the bottom row when switching modes\nif(this.mode_!=='rollUp'){this.row_=BOTTOM_ROW;this.mode_='rollUp';// Spec says to wipe memories when switching to roll-up\nthis.flushDisplayed(pts);this.nonDisplayed_=createDisplayBuffer();this.displayed_=createDisplayBuffer();}if(newBaseRow!==undefined&&newBaseRow!==this.row_){// move currently displayed captions (up or down) to the new base row\nfor(var i=0;i<this.rollUpRows_;i++){this.displayed_[newBaseRow-i]=this.displayed_[this.row_-i];this.displayed_[this.row_-i]='';}}if(newBaseRow===undefined){newBaseRow=this.row_;}this.topRow_=newBaseRow-this.rollUpRows_+1;};// Adds the opening HTML tag for the passed character to the caption text,\n// and keeps track of it for later closing\nCea608Stream.prototype.addFormatting=function(pts,format){this.formatting_=this.formatting_.concat(format);var text=format.reduce(function(text,format){return text+'<'+format+'>';},'');this[this.mode_](pts,text);};// Adds HTML closing tags for current formatting to caption text and\n// clears remembered formatting\nCea608Stream.prototype.clearFormatting=function(pts){if(!this.formatting_.length){return;}var text=this.formatting_.reverse().reduce(function(text,format){return text+'</'+format+'>';},'');this.formatting_=[];this[this.mode_](pts,text);};// Mode Implementations\nCea608Stream.prototype.popOn=function(pts,text){var baseRow=this.nonDisplayed_[this.row_];// buffer characters\nbaseRow+=text;this.nonDisplayed_[this.row_]=baseRow;};Cea608Stream.prototype.rollUp=function(pts,text){var baseRow=this.displayed_[this.row_];baseRow+=text;this.displayed_[this.row_]=baseRow;};Cea608Stream.prototype.shiftRowsUp_=function(){var i;// clear out inactive rows\nfor(i=0;i<this.topRow_;i++){this.displayed_[i]='';}for(i=this.row_+1;i<BOTTOM_ROW+1;i++){this.displayed_[i]='';}// shift displayed rows up\nfor(i=this.topRow_;i<this.row_;i++){this.displayed_[i]=this.displayed_[i+1];}// clear out the bottom row\nthis.displayed_[this.row_]='';};Cea608Stream.prototype.paintOn=function(pts,text){var baseRow=this.displayed_[this.row_];baseRow+=text;this.displayed_[this.row_]=baseRow;};// exports\nvar captionStream={CaptionStream:CaptionStream,Cea608Stream:Cea608Stream};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */var streamTypes={H264_STREAM_TYPE:0x1B,ADTS_STREAM_TYPE:0x0F,METADATA_STREAM_TYPE:0x15};var MAX_TS=8589934592;var RO_THRESH=4294967296;var TYPE_SHARED='shared';var handleRollover=function handleRollover(value,reference){var direction=1;if(value>reference){// If the current timestamp value is greater than our reference timestamp and we detect a\n// timestamp rollover, this means the roll over is happening in the opposite direction.\n// Example scenario: Enter a long stream/video just after a rollover occurred. The reference\n// point will be set to a small number, e.g. 1. The user then seeks backwards over the\n// rollover point. In loading this segment, the timestamp values will be very large,\n// e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust\n// the time stamp to be `value - 2^33`.\ndirection=-1;}// Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will\n// cause an incorrect adjustment.\nwhile(Math.abs(reference-value)>RO_THRESH){value+=direction*MAX_TS;}return value;};var TimestampRolloverStream=function TimestampRolloverStream(type){var lastDTS,referenceDTS;TimestampRolloverStream.prototype.init.call(this);// The \"shared\" type is used in cases where a stream will contain muxed\n// video and audio. We could use `undefined` here, but having a string\n// makes debugging a little clearer.\nthis.type_=type||TYPE_SHARED;this.push=function(data){// Any \"shared\" rollover streams will accept _all_ data. Otherwise,\n// streams will only accept data that matches their type.\nif(this.type_!==TYPE_SHARED&&data.type!==this.type_){return;}if(referenceDTS===undefined){referenceDTS=data.dts;}data.dts=handleRollover(data.dts,referenceDTS);data.pts=handleRollover(data.pts,referenceDTS);lastDTS=data.dts;this.trigger('data',data);};this.flush=function(){referenceDTS=lastDTS;this.trigger('done');};this.endTimeline=function(){this.flush();this.trigger('endedtimeline');};this.discontinuity=function(){referenceDTS=void 0;lastDTS=void 0;};this.reset=function(){this.discontinuity();this.trigger('reset');};};TimestampRolloverStream.prototype=new stream();var timestampRolloverStream={TimestampRolloverStream:TimestampRolloverStream,handleRollover:handleRollover};var percentEncode=function percentEncode(bytes,start,end){var i,result='';for(i=start;i<end;i++){result+='%'+('00'+bytes[i].toString(16)).slice(-2);}return result;},// return the string representation of the specified byte range,\n// interpreted as UTf-8.\nparseUtf8=function parseUtf8(bytes,start,end){return decodeURIComponent(percentEncode(bytes,start,end));},// return the string representation of the specified byte range,\n// interpreted as ISO-8859-1.\nparseIso88591=function parseIso88591(bytes,start,end){return unescape(percentEncode(bytes,start,end));// jshint ignore:line\n},parseSyncSafeInteger=function parseSyncSafeInteger(data){return data[0]<<21|data[1]<<14|data[2]<<7|data[3];},tagParsers={TXXX:function TXXX(tag){var i;if(tag.data[0]!==3){// ignore frames with unrecognized character encodings\nreturn;}for(i=1;i<tag.data.length;i++){if(tag.data[i]===0){// parse the text fields\ntag.description=parseUtf8(tag.data,1,i);// do not include the null terminator in the tag value\ntag.value=parseUtf8(tag.data,i+1,tag.data.length).replace(/\\0*$/,'');break;}}tag.data=tag.value;},WXXX:function WXXX(tag){var i;if(tag.data[0]!==3){// ignore frames with unrecognized character encodings\nreturn;}for(i=1;i<tag.data.length;i++){if(tag.data[i]===0){// parse the description and URL fields\ntag.description=parseUtf8(tag.data,1,i);tag.url=parseUtf8(tag.data,i+1,tag.data.length);break;}}},PRIV:function PRIV(tag){var i;for(i=0;i<tag.data.length;i++){if(tag.data[i]===0){// parse the description and URL fields\ntag.owner=parseIso88591(tag.data,0,i);break;}}tag.privateData=tag.data.subarray(i+1);tag.data=tag.privateData;}},_MetadataStream;_MetadataStream=function MetadataStream(options){var settings={debug:!!(options&&options.debug),// the bytes of the program-level descriptor field in MP2T\n// see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n// program element descriptors\"\ndescriptor:options&&options.descriptor},// the total size in bytes of the ID3 tag being parsed\ntagSize=0,// tag data that is not complete enough to be parsed\nbuffer=[],// the total number of bytes currently in the buffer\nbufferSize=0,i;_MetadataStream.prototype.init.call(this);// calculate the text track in-band metadata track dispatch type\n// https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\nthis.dispatchType=streamTypes.METADATA_STREAM_TYPE.toString(16);if(settings.descriptor){for(i=0;i<settings.descriptor.length;i++){this.dispatchType+=('00'+settings.descriptor[i].toString(16)).slice(-2);}}this.push=function(chunk){var tag,frameStart,frameSize,frame,i,frameHeader;if(chunk.type!=='timed-metadata'){return;}// if data_alignment_indicator is set in the PES header,\n// we must have the start of a new ID3 tag. Assume anything\n// remaining in the buffer was malformed and throw it out\nif(chunk.dataAlignmentIndicator){bufferSize=0;buffer.length=0;}// ignore events that don't look like ID3 data\nif(buffer.length===0&&(chunk.data.length<10||chunk.data[0]!=='I'.charCodeAt(0)||chunk.data[1]!=='D'.charCodeAt(0)||chunk.data[2]!=='3'.charCodeAt(0))){if(settings.debug){// eslint-disable-next-line no-console\nconsole.log('Skipping unrecognized metadata packet');}return;}// add this chunk to the data we've collected so far\nbuffer.push(chunk);bufferSize+=chunk.data.byteLength;// grab the size of the entire frame from the ID3 header\nif(buffer.length===1){// the frame size is transmitted as a 28-bit integer in the\n// last four bytes of the ID3 header.\n// The most significant bit of each byte is dropped and the\n// results concatenated to recover the actual value.\ntagSize=parseSyncSafeInteger(chunk.data.subarray(6,10));// ID3 reports the tag size excluding the header but it's more\n// convenient for our comparisons to include it\ntagSize+=10;}// if the entire frame has not arrived, wait for more data\nif(bufferSize<tagSize){return;}// collect the entire frame so it can be parsed\ntag={data:new Uint8Array(tagSize),frames:[],pts:buffer[0].pts,dts:buffer[0].dts};for(i=0;i<tagSize;){tag.data.set(buffer[0].data.subarray(0,tagSize-i),i);i+=buffer[0].data.byteLength;bufferSize-=buffer[0].data.byteLength;buffer.shift();}// find the start of the first frame and the end of the tag\nframeStart=10;if(tag.data[5]&0x40){// advance the frame start past the extended header\nframeStart+=4;// header size field\nframeStart+=parseSyncSafeInteger(tag.data.subarray(10,14));// clip any padding off the end\ntagSize-=parseSyncSafeInteger(tag.data.subarray(16,20));}// parse one or more ID3 frames\n// http://id3.org/id3v2.3.0#ID3v2_frame_overview\ndo{// determine the number of bytes in this frame\nframeSize=parseSyncSafeInteger(tag.data.subarray(frameStart+4,frameStart+8));if(frameSize<1){// eslint-disable-next-line no-console\nreturn console.log('Malformed ID3 frame encountered. Skipping metadata parsing.');}frameHeader=String.fromCharCode(tag.data[frameStart],tag.data[frameStart+1],tag.data[frameStart+2],tag.data[frameStart+3]);frame={id:frameHeader,data:tag.data.subarray(frameStart+10,frameStart+frameSize+10)};frame.key=frame.id;if(tagParsers[frame.id]){tagParsers[frame.id](frame);// handle the special PRIV frame used to indicate the start\n// time for raw AAC data\nif(frame.owner==='com.apple.streaming.transportStreamTimestamp'){var d=frame.data,size=(d[3]&0x01)<<30|d[4]<<22|d[5]<<14|d[6]<<6|d[7]>>>2;size*=4;size+=d[7]&0x03;frame.timeStamp=size;// in raw AAC, all subsequent data will be timestamped based\n// on the value of this frame\n// we couldn't have known the appropriate pts and dts before\n// parsing this ID3 tag so set those values now\nif(tag.pts===undefined&&tag.dts===undefined){tag.pts=frame.timeStamp;tag.dts=frame.timeStamp;}this.trigger('timestamp',frame);}}tag.frames.push(frame);frameStart+=10;// advance past the frame header\nframeStart+=frameSize;// advance past the frame body\n}while(frameStart<tagSize);this.trigger('data',tag);};};_MetadataStream.prototype=new stream();var metadataStream=_MetadataStream;var TimestampRolloverStream$1=timestampRolloverStream.TimestampRolloverStream;// object types\nvar _TransportPacketStream,_TransportParseStream,_ElementaryStream;// constants\nvar MP2T_PACKET_LENGTH=188,// bytes\nSYNC_BYTE=0x47;/**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */_TransportPacketStream=function TransportPacketStream(){var buffer=new Uint8Array(MP2T_PACKET_LENGTH),bytesInBuffer=0;_TransportPacketStream.prototype.init.call(this);// Deliver new bytes to the stream.\n/**\n * Split a stream of data into M2TS packets\n **/this.push=function(bytes){var startIndex=0,endIndex=MP2T_PACKET_LENGTH,everything;// If there are bytes remaining from the last segment, prepend them to the\n// bytes that were pushed in\nif(bytesInBuffer){everything=new Uint8Array(bytes.byteLength+bytesInBuffer);everything.set(buffer.subarray(0,bytesInBuffer));everything.set(bytes,bytesInBuffer);bytesInBuffer=0;}else{everything=bytes;}// While we have enough data for a packet\nwhile(endIndex<everything.byteLength){// Look for a pair of start and end sync bytes in the data..\nif(everything[startIndex]===SYNC_BYTE&&everything[endIndex]===SYNC_BYTE){// We found a packet so emit it and jump one whole packet forward in\n// the stream\nthis.trigger('data',everything.subarray(startIndex,endIndex));startIndex+=MP2T_PACKET_LENGTH;endIndex+=MP2T_PACKET_LENGTH;continue;}// If we get here, we have somehow become de-synchronized and we need to step\n// forward one byte at a time until we find a pair of sync bytes that denote\n// a packet\nstartIndex++;endIndex++;}// If there was some data left over at the end of the segment that couldn't\n// possibly be a whole packet, keep it because it might be the start of a packet\n// that continues in the next segment\nif(startIndex<everything.byteLength){buffer.set(everything.subarray(startIndex),0);bytesInBuffer=everything.byteLength-startIndex;}};/**\n * Passes identified M2TS packets to the TransportParseStream to be parsed\n **/this.flush=function(){// If the buffer contains a whole packet when we are being flushed, emit it\n// and empty the buffer. Otherwise hold onto the data because it may be\n// important for decoding the next segment\nif(bytesInBuffer===MP2T_PACKET_LENGTH&&buffer[0]===SYNC_BYTE){this.trigger('data',buffer);bytesInBuffer=0;}this.trigger('done');};this.endTimeline=function(){this.flush();this.trigger('endedtimeline');};this.reset=function(){bytesInBuffer=0;this.trigger('reset');};};_TransportPacketStream.prototype=new stream();/**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */_TransportParseStream=function TransportParseStream(){var parsePsi,parsePat,parsePmt,self;_TransportParseStream.prototype.init.call(this);self=this;this.packetsWaitingForPmt=[];this.programMapTable=undefined;parsePsi=function parsePsi(payload,psi){var offset=0;// PSI packets may be split into multiple sections and those\n// sections may be split into multiple packets. If a PSI\n// section starts in this packet, the payload_unit_start_indicator\n// will be true and the first byte of the payload will indicate\n// the offset from the current position to the start of the\n// section.\nif(psi.payloadUnitStartIndicator){offset+=payload[offset]+1;}if(psi.type==='pat'){parsePat(payload.subarray(offset),psi);}else{parsePmt(payload.subarray(offset),psi);}};parsePat=function parsePat(payload,pat){pat.section_number=payload[7];// eslint-disable-line camelcase\npat.last_section_number=payload[8];// eslint-disable-line camelcase\n// skip the PSI header and parse the first PMT entry\nself.pmtPid=(payload[10]&0x1F)<<8|payload[11];pat.pmtPid=self.pmtPid;};/**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */parsePmt=function parsePmt(payload,pmt){var sectionLength,tableEnd,programInfoLength,offset;// PMTs can be sent ahead of the time when they should actually\n// take effect. We don't believe this should ever be the case\n// for HLS but we'll ignore \"forward\" PMT declarations if we see\n// them. Future PMT declarations have the current_next_indicator\n// set to zero.\nif(!(payload[5]&0x01)){return;}// overwrite any existing program map table\nself.programMapTable={video:null,audio:null,'timed-metadata':{}};// the mapping table ends at the end of the current section\nsectionLength=(payload[1]&0x0f)<<8|payload[2];tableEnd=3+sectionLength-4;// to determine where the table is, we have to figure out how\n// long the program info descriptors are\nprogramInfoLength=(payload[10]&0x0f)<<8|payload[11];// advance the offset to the first entry in the mapping table\noffset=12+programInfoLength;while(offset<tableEnd){var streamType=payload[offset];var pid=(payload[offset+1]&0x1F)<<8|payload[offset+2];// only map a single elementary_pid for audio and video stream types\n// TODO: should this be done for metadata too? for now maintain behavior of\n// multiple metadata streams\nif(streamType===streamTypes.H264_STREAM_TYPE&&self.programMapTable.video===null){self.programMapTable.video=pid;}else if(streamType===streamTypes.ADTS_STREAM_TYPE&&self.programMapTable.audio===null){self.programMapTable.audio=pid;}else if(streamType===streamTypes.METADATA_STREAM_TYPE){// map pid to stream type for metadata streams\nself.programMapTable['timed-metadata'][pid]=streamType;}// move to the next table entry\n// skip past the elementary stream descriptors, if present\noffset+=((payload[offset+3]&0x0F)<<8|payload[offset+4])+5;}// record the map on the packet as well\npmt.programMapTable=self.programMapTable;};/**\n * Deliver a new MP2T packet to the next stream in the pipeline.\n */this.push=function(packet){var result={},offset=4;result.payloadUnitStartIndicator=!!(packet[1]&0x40);// pid is a 13-bit field starting at the last bit of packet[1]\nresult.pid=packet[1]&0x1f;result.pid<<=8;result.pid|=packet[2];// if an adaption field is present, its length is specified by the\n// fifth byte of the TS packet header. The adaptation field is\n// used to add stuffing to PES packets that don't fill a complete\n// TS packet, and to specify some forms of timing and control data\n// that we do not currently use.\nif((packet[3]&0x30)>>>4>0x01){offset+=packet[offset]+1;}// parse the rest of the packet based on the type\nif(result.pid===0){result.type='pat';parsePsi(packet.subarray(offset),result);this.trigger('data',result);}else if(result.pid===this.pmtPid){result.type='pmt';parsePsi(packet.subarray(offset),result);this.trigger('data',result);// if there are any packets waiting for a PMT to be found, process them now\nwhile(this.packetsWaitingForPmt.length){this.processPes_.apply(this,this.packetsWaitingForPmt.shift());}}else if(this.programMapTable===undefined){// When we have not seen a PMT yet, defer further processing of\n// PES packets until one has been parsed\nthis.packetsWaitingForPmt.push([packet,offset,result]);}else{this.processPes_(packet,offset,result);}};this.processPes_=function(packet,offset,result){// set the appropriate stream type\nif(result.pid===this.programMapTable.video){result.streamType=streamTypes.H264_STREAM_TYPE;}else if(result.pid===this.programMapTable.audio){result.streamType=streamTypes.ADTS_STREAM_TYPE;}else{// if not video or audio, it is timed-metadata or unknown\n// if unknown, streamType will be undefined\nresult.streamType=this.programMapTable['timed-metadata'][result.pid];}result.type='pes';result.data=packet.subarray(offset);this.trigger('data',result);};};_TransportParseStream.prototype=new stream();_TransportParseStream.STREAM_TYPES={h264:0x1b,adts:0x0f};/**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */_ElementaryStream=function ElementaryStream(){var self=this,// PES packet fragments\nvideo={data:[],size:0},audio={data:[],size:0},timedMetadata={data:[],size:0},programMapTable,parsePes=function parsePes(payload,pes){var ptsDtsFlags;// get the packet length, this will be 0 for video\npes.packetLength=6+(payload[4]<<8|payload[5]);// find out if this packets starts a new keyframe\npes.dataAlignmentIndicator=(payload[6]&0x04)!==0;// PES packets may be annotated with a PTS value, or a PTS value\n// and a DTS value. Determine what combination of values is\n// available to work with.\nptsDtsFlags=payload[7];// PTS and DTS are normally stored as a 33-bit number. Javascript\n// performs all bitwise operations on 32-bit integers but javascript\n// supports a much greater range (52-bits) of integer using standard\n// mathematical operations.\n// We construct a 31-bit value using bitwise operators over the 31\n// most significant bits and then multiply by 4 (equal to a left-shift\n// of 2) before we add the final 2 least significant bits of the\n// timestamp (equal to an OR.)\nif(ptsDtsFlags&0xC0){// the PTS and DTS are not written out directly. For information\n// on how they are encoded, see\n// http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\npes.pts=(payload[9]&0x0E)<<27|(payload[10]&0xFF)<<20|(payload[11]&0xFE)<<12|(payload[12]&0xFF)<<5|(payload[13]&0xFE)>>>3;pes.pts*=4;// Left shift by 2\npes.pts+=(payload[13]&0x06)>>>1;// OR by the two LSBs\npes.dts=pes.pts;if(ptsDtsFlags&0x40){pes.dts=(payload[14]&0x0E)<<27|(payload[15]&0xFF)<<20|(payload[16]&0xFE)<<12|(payload[17]&0xFF)<<5|(payload[18]&0xFE)>>>3;pes.dts*=4;// Left shift by 2\npes.dts+=(payload[18]&0x06)>>>1;// OR by the two LSBs\n}}// the data section starts immediately after the PES header.\n// pes_header_data_length specifies the number of header bytes\n// that follow the last byte of the field.\npes.data=payload.subarray(9+payload[8]);},/**\n * Pass completely parsed PES packets to the next stream in the pipeline\n **/flushStream=function flushStream(stream$$1,type,forceFlush){var packetData=new Uint8Array(stream$$1.size),event={type:type},i=0,offset=0,packetFlushable=false,fragment;// do nothing if there is not enough buffered data for a complete\n// PES header\nif(!stream$$1.data.length||stream$$1.size<9){return;}event.trackId=stream$$1.data[0].pid;// reassemble the packet\nfor(i=0;i<stream$$1.data.length;i++){fragment=stream$$1.data[i];packetData.set(fragment.data,offset);offset+=fragment.data.byteLength;}// parse assembled packet's PES header\nparsePes(packetData,event);// non-video PES packets MUST have a non-zero PES_packet_length\n// check that there is enough stream data to fill the packet\npacketFlushable=type==='video'||event.packetLength<=stream$$1.size;// flush pending packets if the conditions are right\nif(forceFlush||packetFlushable){stream$$1.size=0;stream$$1.data.length=0;}// only emit packets that are complete. this is to avoid assembling\n// incomplete PES packets due to poor segmentation\nif(packetFlushable){self.trigger('data',event);}};_ElementaryStream.prototype.init.call(this);/**\n * Identifies M2TS packet types and parses PES packets using metadata\n * parsed from the PMT\n **/this.push=function(data){({pat:function pat(){// we have to wait for the PMT to arrive as well before we\n// have any meaningful metadata\n},pes:function pes(){var stream$$1,streamType;switch(data.streamType){case streamTypes.H264_STREAM_TYPE:case streamTypes.H264_STREAM_TYPE:stream$$1=video;streamType='video';break;case streamTypes.ADTS_STREAM_TYPE:stream$$1=audio;streamType='audio';break;case streamTypes.METADATA_STREAM_TYPE:stream$$1=timedMetadata;streamType='timed-metadata';break;default:// ignore unknown stream types\nreturn;}// if a new packet is starting, we can flush the completed\n// packet\nif(data.payloadUnitStartIndicator){flushStream(stream$$1,streamType,true);}// buffer this fragment until we are sure we've received the\n// complete payload\nstream$$1.data.push(data);stream$$1.size+=data.data.byteLength;},pmt:function pmt(){var event={type:'metadata',tracks:[]};programMapTable=data.programMapTable;// translate audio and video streams to tracks\nif(programMapTable.video!==null){event.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+programMapTable.video,codec:'avc',type:'video'});}if(programMapTable.audio!==null){event.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+programMapTable.audio,codec:'adts',type:'audio'});}self.trigger('data',event);}})[data.type]();};this.reset=function(){video.size=0;video.data.length=0;audio.size=0;audio.data.length=0;this.trigger('reset');};/**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */this.flushStreams_=function(){// !!THIS ORDER IS IMPORTANT!!\n// video first then audio\nflushStream(video,'video');flushStream(audio,'audio');flushStream(timedMetadata,'timed-metadata');};this.flush=function(){this.flushStreams_();this.trigger('done');};};_ElementaryStream.prototype=new stream();var m2ts={PAT_PID:0x0000,MP2T_PACKET_LENGTH:MP2T_PACKET_LENGTH,TransportPacketStream:_TransportPacketStream,TransportParseStream:_TransportParseStream,ElementaryStream:_ElementaryStream,TimestampRolloverStream:TimestampRolloverStream$1,CaptionStream:captionStream.CaptionStream,Cea608Stream:captionStream.Cea608Stream,MetadataStream:metadataStream};for(var type in streamTypes){if(streamTypes.hasOwnProperty(type)){m2ts[type]=streamTypes[type];}}var m2ts_1=m2ts;var ONE_SECOND_IN_TS$2=clock.ONE_SECOND_IN_TS;var _AdtsStream;var ADTS_SAMPLING_FREQUENCIES=[96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350];/*\n * Accepts a ElementaryStream and emits data events with parsed\n * AAC Audio Frames of the individual packets. Input audio in ADTS\n * format is unpacked and re-emitted as AAC frames.\n *\n * @see http://wiki.multimedia.cx/index.php?title=ADTS\n * @see http://wiki.multimedia.cx/?title=Understanding_AAC\n */_AdtsStream=function AdtsStream(handlePartialSegments){var buffer,frameNum=0;_AdtsStream.prototype.init.call(this);this.push=function(packet){var i=0,frameLength,protectionSkipBytes,frameEnd,oldBuffer,sampleCount,adtsFrameDuration;if(!handlePartialSegments){frameNum=0;}if(packet.type!=='audio'){// ignore non-audio data\nreturn;}// Prepend any data in the buffer to the input data so that we can parse\n// aac frames the cross a PES packet boundary\nif(buffer){oldBuffer=buffer;buffer=new Uint8Array(oldBuffer.byteLength+packet.data.byteLength);buffer.set(oldBuffer);buffer.set(packet.data,oldBuffer.byteLength);}else{buffer=packet.data;}// unpack any ADTS frames which have been fully received\n// for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS\nwhile(i+5<buffer.length){// Look for the start of an ADTS header..\nif(buffer[i]!==0xFF||(buffer[i+1]&0xF6)!==0xF0){// If a valid header was not found, jump one forward and attempt to\n// find a valid ADTS header starting at the next byte\ni++;continue;}// The protection skip bit tells us if we have 2 bytes of CRC data at the\n// end of the ADTS header\nprotectionSkipBytes=(~buffer[i+1]&0x01)*2;// Frame length is a 13 bit integer starting 16 bits from the\n// end of the sync sequence\nframeLength=(buffer[i+3]&0x03)<<11|buffer[i+4]<<3|(buffer[i+5]&0xe0)>>5;sampleCount=((buffer[i+6]&0x03)+1)*1024;adtsFrameDuration=sampleCount*ONE_SECOND_IN_TS$2/ADTS_SAMPLING_FREQUENCIES[(buffer[i+2]&0x3c)>>>2];frameEnd=i+frameLength;// If we don't have enough data to actually finish this ADTS frame, return\n// and wait for more data\nif(buffer.byteLength<frameEnd){return;}// Otherwise, deliver the complete AAC frame\nthis.trigger('data',{pts:packet.pts+frameNum*adtsFrameDuration,dts:packet.dts+frameNum*adtsFrameDuration,sampleCount:sampleCount,audioobjecttype:(buffer[i+2]>>>6&0x03)+1,channelcount:(buffer[i+2]&1)<<2|(buffer[i+3]&0xc0)>>>6,samplerate:ADTS_SAMPLING_FREQUENCIES[(buffer[i+2]&0x3c)>>>2],samplingfrequencyindex:(buffer[i+2]&0x3c)>>>2,// assume ISO/IEC 14496-12 AudioSampleEntry default of 16\nsamplesize:16,data:buffer.subarray(i+7+protectionSkipBytes,frameEnd)});frameNum++;// If the buffer is empty, clear it and return\nif(buffer.byteLength===frameEnd){buffer=undefined;return;}// Remove the finished frame from the buffer and start the process again\nbuffer=buffer.subarray(frameEnd);}};this.flush=function(){frameNum=0;this.trigger('done');};this.reset=function(){buffer=void 0;this.trigger('reset');};this.endTimeline=function(){buffer=void 0;this.trigger('endedtimeline');};};_AdtsStream.prototype=new stream();var adts=_AdtsStream;/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */var ExpGolomb;/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */ExpGolomb=function ExpGolomb(workingData){var// the number of bytes left to examine in workingData\nworkingBytesAvailable=workingData.byteLength,// the current word being examined\nworkingWord=0,// :uint\n// the number of bits left to examine in the current word\nworkingBitsAvailable=0;// :uint;\n// ():uint\nthis.length=function(){return 8*workingBytesAvailable;};// ():uint\nthis.bitsAvailable=function(){return 8*workingBytesAvailable+workingBitsAvailable;};// ():void\nthis.loadWord=function(){var position=workingData.byteLength-workingBytesAvailable,workingBytes=new Uint8Array(4),availableBytes=Math.min(4,workingBytesAvailable);if(availableBytes===0){throw new Error('no bytes available');}workingBytes.set(workingData.subarray(position,position+availableBytes));workingWord=new DataView(workingBytes.buffer).getUint32(0);// track the amount of workingData that has been processed\nworkingBitsAvailable=availableBytes*8;workingBytesAvailable-=availableBytes;};// (count:int):void\nthis.skipBits=function(count){var skipBytes;// :int\nif(workingBitsAvailable>count){workingWord<<=count;workingBitsAvailable-=count;}else{count-=workingBitsAvailable;skipBytes=Math.floor(count/8);count-=skipBytes*8;workingBytesAvailable-=skipBytes;this.loadWord();workingWord<<=count;workingBitsAvailable-=count;}};// (size:int):uint\nthis.readBits=function(size){var bits=Math.min(workingBitsAvailable,size),// :uint\nvalu=workingWord>>>32-bits;// :uint\n// if size > 31, handle error\nworkingBitsAvailable-=bits;if(workingBitsAvailable>0){workingWord<<=bits;}else if(workingBytesAvailable>0){this.loadWord();}bits=size-bits;if(bits>0){return valu<<bits|this.readBits(bits);}return valu;};// ():uint\nthis.skipLeadingZeros=function(){var leadingZeroCount;// :uint\nfor(leadingZeroCount=0;leadingZeroCount<workingBitsAvailable;++leadingZeroCount){if((workingWord&0x80000000>>>leadingZeroCount)!==0){// the first bit of working word is 1\nworkingWord<<=leadingZeroCount;workingBitsAvailable-=leadingZeroCount;return leadingZeroCount;}}// we exhausted workingWord and still have not found a 1\nthis.loadWord();return leadingZeroCount+this.skipLeadingZeros();};// ():void\nthis.skipUnsignedExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros());};// ():void\nthis.skipExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros());};// ():uint\nthis.readUnsignedExpGolomb=function(){var clz=this.skipLeadingZeros();// :uint\nreturn this.readBits(clz+1)-1;};// ():int\nthis.readExpGolomb=function(){var valu=this.readUnsignedExpGolomb();// :int\nif(0x01&valu){// the number is odd if the low order bit is set\nreturn 1+valu>>>1;// add 1 to make it even, and divide by 2\n}return-1*(valu>>>1);// divide by two then make it negative\n};// Some convenience functions\n// :Boolean\nthis.readBoolean=function(){return this.readBits(1)===1;};// ():int\nthis.readUnsignedByte=function(){return this.readBits(8);};this.loadWord();};var expGolomb=ExpGolomb;var _H264Stream,_NalByteStream;var PROFILES_WITH_OPTIONAL_SPS_DATA;/**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */_NalByteStream=function NalByteStream(){var syncPoint=0,i,buffer;_NalByteStream.prototype.init.call(this);/*\n * Scans a byte stream and triggers a data event with the NAL units found.\n * @param {Object} data Event received from H264Stream\n * @param {Uint8Array} data.data The h264 byte stream to be scanned\n *\n * @see H264Stream.push\n */this.push=function(data){var swapBuffer;if(!buffer){buffer=data.data;}else{swapBuffer=new Uint8Array(buffer.byteLength+data.data.byteLength);swapBuffer.set(buffer);swapBuffer.set(data.data,buffer.byteLength);buffer=swapBuffer;}var len=buffer.byteLength;// Rec. ITU-T H.264, Annex B\n// scan for NAL unit boundaries\n// a match looks like this:\n// 0 0 1 .. NAL .. 0 0 1\n// ^ sync point ^ i\n// or this:\n// 0 0 1 .. NAL .. 0 0 0\n// ^ sync point ^ i\n// advance the sync point to a NAL start, if necessary\nfor(;syncPoint<len-3;syncPoint++){if(buffer[syncPoint+2]===1){// the sync point is properly aligned\ni=syncPoint+5;break;}}while(i<len){// look at the current byte to determine if we've hit the end of\n// a NAL unit boundary\nswitch(buffer[i]){case 0:// skip past non-sync sequences\nif(buffer[i-1]!==0){i+=2;break;}else if(buffer[i-2]!==0){i++;break;}// deliver the NAL unit if it isn't empty\nif(syncPoint+3!==i-2){this.trigger('data',buffer.subarray(syncPoint+3,i-2));}// drop trailing zeroes\ndo{i++;}while(buffer[i]!==1&&i<len);syncPoint=i-2;i+=3;break;case 1:// skip past non-sync sequences\nif(buffer[i-1]!==0||buffer[i-2]!==0){i+=3;break;}// deliver the NAL unit\nthis.trigger('data',buffer.subarray(syncPoint+3,i-2));syncPoint=i-2;i+=3;break;default:// the current byte isn't a one or zero, so it cannot be part\n// of a sync sequence\ni+=3;break;}}// filter out the NAL units that were delivered\nbuffer=buffer.subarray(syncPoint);i-=syncPoint;syncPoint=0;};this.reset=function(){buffer=null;syncPoint=0;this.trigger('reset');};this.flush=function(){// deliver the last buffered NAL unit\nif(buffer&&buffer.byteLength>3){this.trigger('data',buffer.subarray(syncPoint+3));}// reset the stream state\nbuffer=null;syncPoint=0;this.trigger('done');};this.endTimeline=function(){this.flush();this.trigger('endedtimeline');};};_NalByteStream.prototype=new stream();// values of profile_idc that indicate additional fields are included in the SPS\n// see Recommendation ITU-T H.264 (4/2013),\n// 7.3.2.1.1 Sequence parameter set data syntax\nPROFILES_WITH_OPTIONAL_SPS_DATA={100:true,110:true,122:true,244:true,44:true,83:true,86:true,118:true,128:true,138:true,139:true,134:true};/**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */_H264Stream=function H264Stream(){var nalByteStream=new _NalByteStream(),self,trackId,currentPts,currentDts,discardEmulationPreventionBytes,readSequenceParameterSet,skipScalingList;_H264Stream.prototype.init.call(this);self=this;/*\n * Pushes a packet from a stream onto the NalByteStream\n *\n * @param {Object} packet - A packet received from a stream\n * @param {Uint8Array} packet.data - The raw bytes of the packet\n * @param {Number} packet.dts - Decode timestamp of the packet\n * @param {Number} packet.pts - Presentation timestamp of the packet\n * @param {Number} packet.trackId - The id of the h264 track this packet came from\n * @param {('video'|'audio')} packet.type - The type of packet\n *\n */this.push=function(packet){if(packet.type!=='video'){return;}trackId=packet.trackId;currentPts=packet.pts;currentDts=packet.dts;nalByteStream.push(packet);};/*\n * Identify NAL unit types and pass on the NALU, trackId, presentation and decode timestamps\n * for the NALUs to the next stream component.\n * Also, preprocess caption and sequence parameter NALUs.\n *\n * @param {Uint8Array} data - A NAL unit identified by `NalByteStream.push`\n * @see NalByteStream.push\n */nalByteStream.on('data',function(data){var event={trackId:trackId,pts:currentPts,dts:currentDts,data:data};switch(data[0]&0x1f){case 0x05:event.nalUnitType='slice_layer_without_partitioning_rbsp_idr';break;case 0x06:event.nalUnitType='sei_rbsp';event.escapedRBSP=discardEmulationPreventionBytes(data.subarray(1));break;case 0x07:event.nalUnitType='seq_parameter_set_rbsp';event.escapedRBSP=discardEmulationPreventionBytes(data.subarray(1));event.config=readSequenceParameterSet(event.escapedRBSP);break;case 0x08:event.nalUnitType='pic_parameter_set_rbsp';break;case 0x09:event.nalUnitType='access_unit_delimiter_rbsp';break;default:break;}// This triggers data on the H264Stream\nself.trigger('data',event);});nalByteStream.on('done',function(){self.trigger('done');});nalByteStream.on('partialdone',function(){self.trigger('partialdone');});nalByteStream.on('reset',function(){self.trigger('reset');});nalByteStream.on('endedtimeline',function(){self.trigger('endedtimeline');});this.flush=function(){nalByteStream.flush();};this.partialFlush=function(){nalByteStream.partialFlush();};this.reset=function(){nalByteStream.reset();};this.endTimeline=function(){nalByteStream.endTimeline();};/**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */skipScalingList=function skipScalingList(count,expGolombDecoder){var lastScale=8,nextScale=8,j,deltaScale;for(j=0;j<count;j++){if(nextScale!==0){deltaScale=expGolombDecoder.readExpGolomb();nextScale=(lastScale+deltaScale+256)%256;}lastScale=nextScale===0?lastScale:nextScale;}};/**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */discardEmulationPreventionBytes=function discardEmulationPreventionBytes(data){var length=data.byteLength,emulationPreventionBytesPositions=[],i=1,newLength,newData;// Find all `Emulation Prevention Bytes`\nwhile(i<length-2){if(data[i]===0&&data[i+1]===0&&data[i+2]===0x03){emulationPreventionBytesPositions.push(i+2);i+=2;}else{i++;}}// If no Emulation Prevention Bytes were found just return the original\n// array\nif(emulationPreventionBytesPositions.length===0){return data;}// Create a new array to hold the NAL unit data\nnewLength=length-emulationPreventionBytesPositions.length;newData=new Uint8Array(newLength);var sourceIndex=0;for(i=0;i<newLength;sourceIndex++,i++){if(sourceIndex===emulationPreventionBytesPositions[0]){// Skip this byte\nsourceIndex++;// Remove this position index\nemulationPreventionBytesPositions.shift();}newData[i]=data[sourceIndex];}return newData;};/**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */readSequenceParameterSet=function readSequenceParameterSet(data){var frameCropLeftOffset=0,frameCropRightOffset=0,frameCropTopOffset=0,frameCropBottomOffset=0,sarScale=1,expGolombDecoder,profileIdc,levelIdc,profileCompatibility,chromaFormatIdc,picOrderCntType,numRefFramesInPicOrderCntCycle,picWidthInMbsMinus1,picHeightInMapUnitsMinus1,frameMbsOnlyFlag,scalingListCount,sarRatio,aspectRatioIdc,i;expGolombDecoder=new expGolomb(data);profileIdc=expGolombDecoder.readUnsignedByte();// profile_idc\nprofileCompatibility=expGolombDecoder.readUnsignedByte();// constraint_set[0-5]_flag\nlevelIdc=expGolombDecoder.readUnsignedByte();// level_idc u(8)\nexpGolombDecoder.skipUnsignedExpGolomb();// seq_parameter_set_id\n// some profiles have more optional data we don't need\nif(PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]){chromaFormatIdc=expGolombDecoder.readUnsignedExpGolomb();if(chromaFormatIdc===3){expGolombDecoder.skipBits(1);// separate_colour_plane_flag\n}expGolombDecoder.skipUnsignedExpGolomb();// bit_depth_luma_minus8\nexpGolombDecoder.skipUnsignedExpGolomb();// bit_depth_chroma_minus8\nexpGolombDecoder.skipBits(1);// qpprime_y_zero_transform_bypass_flag\nif(expGolombDecoder.readBoolean()){// seq_scaling_matrix_present_flag\nscalingListCount=chromaFormatIdc!==3?8:12;for(i=0;i<scalingListCount;i++){if(expGolombDecoder.readBoolean()){// seq_scaling_list_present_flag[ i ]\nif(i<6){skipScalingList(16,expGolombDecoder);}else{skipScalingList(64,expGolombDecoder);}}}}}expGolombDecoder.skipUnsignedExpGolomb();// log2_max_frame_num_minus4\npicOrderCntType=expGolombDecoder.readUnsignedExpGolomb();if(picOrderCntType===0){expGolombDecoder.readUnsignedExpGolomb();// log2_max_pic_order_cnt_lsb_minus4\n}else if(picOrderCntType===1){expGolombDecoder.skipBits(1);// delta_pic_order_always_zero_flag\nexpGolombDecoder.skipExpGolomb();// offset_for_non_ref_pic\nexpGolombDecoder.skipExpGolomb();// offset_for_top_to_bottom_field\nnumRefFramesInPicOrderCntCycle=expGolombDecoder.readUnsignedExpGolomb();for(i=0;i<numRefFramesInPicOrderCntCycle;i++){expGolombDecoder.skipExpGolomb();// offset_for_ref_frame[ i ]\n}}expGolombDecoder.skipUnsignedExpGolomb();// max_num_ref_frames\nexpGolombDecoder.skipBits(1);// gaps_in_frame_num_value_allowed_flag\npicWidthInMbsMinus1=expGolombDecoder.readUnsignedExpGolomb();picHeightInMapUnitsMinus1=expGolombDecoder.readUnsignedExpGolomb();frameMbsOnlyFlag=expGolombDecoder.readBits(1);if(frameMbsOnlyFlag===0){expGolombDecoder.skipBits(1);// mb_adaptive_frame_field_flag\n}expGolombDecoder.skipBits(1);// direct_8x8_inference_flag\nif(expGolombDecoder.readBoolean()){// frame_cropping_flag\nframeCropLeftOffset=expGolombDecoder.readUnsignedExpGolomb();frameCropRightOffset=expGolombDecoder.readUnsignedExpGolomb();frameCropTopOffset=expGolombDecoder.readUnsignedExpGolomb();frameCropBottomOffset=expGolombDecoder.readUnsignedExpGolomb();}if(expGolombDecoder.readBoolean()){// vui_parameters_present_flag\nif(expGolombDecoder.readBoolean()){// aspect_ratio_info_present_flag\naspectRatioIdc=expGolombDecoder.readUnsignedByte();switch(aspectRatioIdc){case 1:sarRatio=[1,1];break;case 2:sarRatio=[12,11];break;case 3:sarRatio=[10,11];break;case 4:sarRatio=[16,11];break;case 5:sarRatio=[40,33];break;case 6:sarRatio=[24,11];break;case 7:sarRatio=[20,11];break;case 8:sarRatio=[32,11];break;case 9:sarRatio=[80,33];break;case 10:sarRatio=[18,11];break;case 11:sarRatio=[15,11];break;case 12:sarRatio=[64,33];break;case 13:sarRatio=[160,99];break;case 14:sarRatio=[4,3];break;case 15:sarRatio=[3,2];break;case 16:sarRatio=[2,1];break;case 255:{sarRatio=[expGolombDecoder.readUnsignedByte()<<8|expGolombDecoder.readUnsignedByte(),expGolombDecoder.readUnsignedByte()<<8|expGolombDecoder.readUnsignedByte()];break;}}if(sarRatio){sarScale=sarRatio[0]/sarRatio[1];}}}return{profileIdc:profileIdc,levelIdc:levelIdc,profileCompatibility:profileCompatibility,width:Math.ceil(((picWidthInMbsMinus1+1)*16-frameCropLeftOffset*2-frameCropRightOffset*2)*sarScale),height:(2-frameMbsOnlyFlag)*(picHeightInMapUnitsMinus1+1)*16-frameCropTopOffset*2-frameCropBottomOffset*2,sarRatio:sarRatio};};};_H264Stream.prototype=new stream();var h264={H264Stream:_H264Stream,NalByteStream:_NalByteStream};/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */var ADTS_SAMPLING_FREQUENCIES$1=[96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350];var isLikelyAacData=function isLikelyAacData(data){if(data[0]==='I'.charCodeAt(0)&&data[1]==='D'.charCodeAt(0)&&data[2]==='3'.charCodeAt(0)){return true;}return false;};var parseSyncSafeInteger$1=function parseSyncSafeInteger(data){return data[0]<<21|data[1]<<14|data[2]<<7|data[3];};// return a percent-encoded representation of the specified byte range\n// @see http://en.wikipedia.org/wiki/Percent-encoding\nvar percentEncode$1=function percentEncode(bytes,start,end){var i,result='';for(i=start;i<end;i++){result+='%'+('00'+bytes[i].toString(16)).slice(-2);}return result;};// return the string representation of the specified byte range,\n// interpreted as ISO-8859-1.\nvar parseIso88591$1=function parseIso88591(bytes,start,end){return unescape(percentEncode$1(bytes,start,end));// jshint ignore:line\n};var parseId3TagSize=function parseId3TagSize(header,byteIndex){var returnSize=header[byteIndex+6]<<21|header[byteIndex+7]<<14|header[byteIndex+8]<<7|header[byteIndex+9],flags=header[byteIndex+5],footerPresent=(flags&16)>>4;if(footerPresent){return returnSize+20;}return returnSize+10;};var parseAdtsSize=function parseAdtsSize(header,byteIndex){var lowThree=(header[byteIndex+5]&0xE0)>>5,middle=header[byteIndex+4]<<3,highTwo=header[byteIndex+3]&0x3<<11;return highTwo|middle|lowThree;};var parseType=function parseType(header,byteIndex){if(header[byteIndex]==='I'.charCodeAt(0)&&header[byteIndex+1]==='D'.charCodeAt(0)&&header[byteIndex+2]==='3'.charCodeAt(0)){return'timed-metadata';}else if(header[byteIndex]&0xff===0xff&&(header[byteIndex+1]&0xf0)===0xf0){return'audio';}return null;};var parseSampleRate=function parseSampleRate(packet){var i=0;while(i+5<packet.length){if(packet[i]!==0xFF||(packet[i+1]&0xF6)!==0xF0){// If a valid header was not found, jump one forward and attempt to\n// find a valid ADTS header starting at the next byte\ni++;continue;}return ADTS_SAMPLING_FREQUENCIES$1[(packet[i+2]&0x3c)>>>2];}return null;};var parseAacTimestamp=function parseAacTimestamp(packet){var frameStart,frameSize,frame,frameHeader;// find the start of the first frame and the end of the tag\nframeStart=10;if(packet[5]&0x40){// advance the frame start past the extended header\nframeStart+=4;// header size field\nframeStart+=parseSyncSafeInteger$1(packet.subarray(10,14));}// parse one or more ID3 frames\n// http://id3.org/id3v2.3.0#ID3v2_frame_overview\ndo{// determine the number of bytes in this frame\nframeSize=parseSyncSafeInteger$1(packet.subarray(frameStart+4,frameStart+8));if(frameSize<1){return null;}frameHeader=String.fromCharCode(packet[frameStart],packet[frameStart+1],packet[frameStart+2],packet[frameStart+3]);if(frameHeader==='PRIV'){frame=packet.subarray(frameStart+10,frameStart+frameSize+10);for(var i=0;i<frame.byteLength;i++){if(frame[i]===0){var owner=parseIso88591$1(frame,0,i);if(owner==='com.apple.streaming.transportStreamTimestamp'){var d=frame.subarray(i+1);var size=(d[3]&0x01)<<30|d[4]<<22|d[5]<<14|d[6]<<6|d[7]>>>2;size*=4;size+=d[7]&0x03;return size;}break;}}}frameStart+=10;// advance past the frame header\nframeStart+=frameSize;// advance past the frame body\n}while(frameStart<packet.byteLength);return null;};var utils={isLikelyAacData:isLikelyAacData,parseId3TagSize:parseId3TagSize,parseAdtsSize:parseAdtsSize,parseType:parseType,parseSampleRate:parseSampleRate,parseAacTimestamp:parseAacTimestamp};// Constants\nvar _AacStream;/**\n * Splits an incoming stream of binary data into ADTS and ID3 Frames.\n */_AacStream=function AacStream(){var everything=new Uint8Array(),timeStamp=0;_AacStream.prototype.init.call(this);this.setTimestamp=function(timestamp){timeStamp=timestamp;};this.push=function(bytes){var frameSize=0,byteIndex=0,bytesLeft,chunk,packet,tempLength;// If there are bytes remaining from the last segment, prepend them to the\n// bytes that were pushed in\nif(everything.length){tempLength=everything.length;everything=new Uint8Array(bytes.byteLength+tempLength);everything.set(everything.subarray(0,tempLength));everything.set(bytes,tempLength);}else{everything=bytes;}while(everything.length-byteIndex>=3){if(everything[byteIndex]==='I'.charCodeAt(0)&&everything[byteIndex+1]==='D'.charCodeAt(0)&&everything[byteIndex+2]==='3'.charCodeAt(0)){// Exit early because we don't have enough to parse\n// the ID3 tag header\nif(everything.length-byteIndex<10){break;}// check framesize\nframeSize=utils.parseId3TagSize(everything,byteIndex);// Exit early if we don't have enough in the buffer\n// to emit a full packet\n// Add to byteIndex to support multiple ID3 tags in sequence\nif(byteIndex+frameSize>everything.length){break;}chunk={type:'timed-metadata',data:everything.subarray(byteIndex,byteIndex+frameSize)};this.trigger('data',chunk);byteIndex+=frameSize;continue;}else if((everything[byteIndex]&0xff)===0xff&&(everything[byteIndex+1]&0xf0)===0xf0){// Exit early because we don't have enough to parse\n// the ADTS frame header\nif(everything.length-byteIndex<7){break;}frameSize=utils.parseAdtsSize(everything,byteIndex);// Exit early if we don't have enough in the buffer\n// to emit a full packet\nif(byteIndex+frameSize>everything.length){break;}packet={type:'audio',data:everything.subarray(byteIndex,byteIndex+frameSize),pts:timeStamp,dts:timeStamp};this.trigger('data',packet);byteIndex+=frameSize;continue;}byteIndex++;}bytesLeft=everything.length-byteIndex;if(bytesLeft>0){everything=everything.subarray(byteIndex);}else{everything=new Uint8Array();}};this.reset=function(){everything=new Uint8Array();this.trigger('reset');};this.endTimeline=function(){everything=new Uint8Array();this.trigger('endedtimeline');};};_AacStream.prototype=new stream();var aac=_AacStream;var H264Stream=h264.H264Stream;var isLikelyAacData$1=utils.isLikelyAacData;var ONE_SECOND_IN_TS$3=clock.ONE_SECOND_IN_TS;// constants\nvar AUDIO_PROPERTIES=['audioobjecttype','channelcount','samplerate','samplingfrequencyindex','samplesize'];var VIDEO_PROPERTIES=['width','height','profileIdc','levelIdc','profileCompatibility','sarRatio'];// object types\nvar _VideoSegmentStream,_AudioSegmentStream,_Transmuxer,_CoalesceStream;/**\n * Compare two arrays (even typed) for same-ness\n */var arrayEquals=function arrayEquals(a,b){var i;if(a.length!==b.length){return false;}// compare the value of each element in the array\nfor(i=0;i<a.length;i++){if(a[i]!==b[i]){return false;}}return true;};var generateVideoSegmentTimingInfo=function generateVideoSegmentTimingInfo(baseMediaDecodeTime,startDts,startPts,endDts,endPts,prependedContentDuration){var ptsOffsetFromDts=startPts-startDts,decodeDuration=endDts-startDts,presentationDuration=endPts-startPts;// The PTS and DTS values are based on the actual stream times from the segment,\n// however, the player time values will reflect a start from the baseMediaDecodeTime.\n// In order to provide relevant values for the player times, base timing info on the\n// baseMediaDecodeTime and the DTS and PTS durations of the segment.\nreturn{start:{dts:baseMediaDecodeTime,pts:baseMediaDecodeTime+ptsOffsetFromDts},end:{dts:baseMediaDecodeTime+decodeDuration,pts:baseMediaDecodeTime+presentationDuration},prependedContentDuration:prependedContentDuration,baseMediaDecodeTime:baseMediaDecodeTime};};/**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */_AudioSegmentStream=function AudioSegmentStream(track,options){var adtsFrames=[],sequenceNumber=0,earliestAllowedDts=0,audioAppendStartTs=0,videoBaseMediaDecodeTime=Infinity;options=options||{};_AudioSegmentStream.prototype.init.call(this);this.push=function(data){trackDecodeInfo.collectDtsInfo(track,data);if(track){AUDIO_PROPERTIES.forEach(function(prop){track[prop]=data[prop];});}// buffer audio data until end() is called\nadtsFrames.push(data);};this.setEarliestDts=function(earliestDts){earliestAllowedDts=earliestDts-track.timelineStartInfo.baseMediaDecodeTime;};this.setVideoBaseMediaDecodeTime=function(baseMediaDecodeTime){videoBaseMediaDecodeTime=baseMediaDecodeTime;};this.setAudioAppendStart=function(timestamp){audioAppendStartTs=timestamp;};this.flush=function(){var frames,moof,mdat,boxes,frameDuration;// return early if no audio data has been observed\nif(adtsFrames.length===0){this.trigger('done','AudioSegmentStream');return;}frames=audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames,track,earliestAllowedDts);track.baseMediaDecodeTime=trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track,options.keepOriginalTimestamps);audioFrameUtils.prefixWithSilence(track,frames,audioAppendStartTs,videoBaseMediaDecodeTime);// we have to build the index from byte locations to\n// samples (that is, adts frames) in the audio data\ntrack.samples=audioFrameUtils.generateSampleTable(frames);// concatenate the audio data to constuct the mdat\nmdat=mp4Generator.mdat(audioFrameUtils.concatenateFrameData(frames));adtsFrames=[];moof=mp4Generator.moof(sequenceNumber,[track]);boxes=new Uint8Array(moof.byteLength+mdat.byteLength);// bump the sequence number for next time\nsequenceNumber++;boxes.set(moof);boxes.set(mdat,moof.byteLength);trackDecodeInfo.clearDtsInfo(track);frameDuration=Math.ceil(ONE_SECOND_IN_TS$3*1024/track.samplerate);// TODO this check was added to maintain backwards compatibility (particularly with\n// tests) on adding the timingInfo event. However, it seems unlikely that there's a\n// valid use-case where an init segment/data should be triggered without associated\n// frames. Leaving for now, but should be looked into.\nif(frames.length){this.trigger('timingInfo',{start:frames[0].dts,end:frames[0].dts+frames.length*frameDuration});}this.trigger('data',{track:track,boxes:boxes});this.trigger('done','AudioSegmentStream');};this.reset=function(){trackDecodeInfo.clearDtsInfo(track);adtsFrames=[];this.trigger('reset');};};_AudioSegmentStream.prototype=new stream();/**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.alignGopsAtEnd {boolean} If true, start from the end of the\n * gopsToAlignWith list when attempting to align gop pts\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */_VideoSegmentStream=function VideoSegmentStream(track,options){var sequenceNumber=0,nalUnits=[],gopsToAlignWith=[],config,pps;options=options||{};_VideoSegmentStream.prototype.init.call(this);delete track.minPTS;this.gopCache_=[];/**\n * Constructs a ISO BMFF segment given H264 nalUnits\n * @param {Object} nalUnit A data event representing a nalUnit\n * @param {String} nalUnit.nalUnitType\n * @param {Object} nalUnit.config Properties for a mp4 track\n * @param {Uint8Array} nalUnit.data The nalUnit bytes\n * @see lib/codecs/h264.js\n **/this.push=function(nalUnit){trackDecodeInfo.collectDtsInfo(track,nalUnit);// record the track config\nif(nalUnit.nalUnitType==='seq_parameter_set_rbsp'&&!config){config=nalUnit.config;track.sps=[nalUnit.data];VIDEO_PROPERTIES.forEach(function(prop){track[prop]=config[prop];},this);}if(nalUnit.nalUnitType==='pic_parameter_set_rbsp'&&!pps){pps=nalUnit.data;track.pps=[nalUnit.data];}// buffer video until flush() is called\nnalUnits.push(nalUnit);};/**\n * Pass constructed ISO BMFF track and boxes on to the\n * next stream in the pipeline\n **/this.flush=function(){var frames,gopForFusion,gops,moof,mdat,boxes,prependedContentDuration=0,firstGop,lastGop;// Throw away nalUnits at the start of the byte stream until\n// we find the first AUD\nwhile(nalUnits.length){if(nalUnits[0].nalUnitType==='access_unit_delimiter_rbsp'){break;}nalUnits.shift();}// Return early if no video data has been observed\nif(nalUnits.length===0){this.resetStream_();this.trigger('done','VideoSegmentStream');return;}// Organize the raw nal-units into arrays that represent\n// higher-level constructs such as frames and gops\n// (group-of-pictures)\nframes=frameUtils.groupNalsIntoFrames(nalUnits);gops=frameUtils.groupFramesIntoGops(frames);// If the first frame of this fragment is not a keyframe we have\n// a problem since MSE (on Chrome) requires a leading keyframe.\n//\n// We have two approaches to repairing this situation:\n// 1) GOP-FUSION:\n// This is where we keep track of the GOPS (group-of-pictures)\n// from previous fragments and attempt to find one that we can\n// prepend to the current fragment in order to create a valid\n// fragment.\n// 2) KEYFRAME-PULLING:\n// Here we search for the first keyframe in the fragment and\n// throw away all the frames between the start of the fragment\n// and that keyframe. We then extend the duration and pull the\n// PTS of the keyframe forward so that it covers the time range\n// of the frames that were disposed of.\n//\n// #1 is far prefereable over #2 which can cause \"stuttering\" but\n// requires more things to be just right.\nif(!gops[0][0].keyFrame){// Search for a gop for fusion from our gopCache\ngopForFusion=this.getGopForFusion_(nalUnits[0],track);if(gopForFusion){// in order to provide more accurate timing information about the segment, save\n// the number of seconds prepended to the original segment due to GOP fusion\nprependedContentDuration=gopForFusion.duration;gops.unshift(gopForFusion);// Adjust Gops' metadata to account for the inclusion of the\n// new gop at the beginning\ngops.byteLength+=gopForFusion.byteLength;gops.nalCount+=gopForFusion.nalCount;gops.pts=gopForFusion.pts;gops.dts=gopForFusion.dts;gops.duration+=gopForFusion.duration;}else{// If we didn't find a candidate gop fall back to keyframe-pulling\ngops=frameUtils.extendFirstKeyFrame(gops);}}// Trim gops to align with gopsToAlignWith\nif(gopsToAlignWith.length){var alignedGops;if(options.alignGopsAtEnd){alignedGops=this.alignGopsAtEnd_(gops);}else{alignedGops=this.alignGopsAtStart_(gops);}if(!alignedGops){// save all the nals in the last GOP into the gop cache\nthis.gopCache_.unshift({gop:gops.pop(),pps:track.pps,sps:track.sps});// Keep a maximum of 6 GOPs in the cache\nthis.gopCache_.length=Math.min(6,this.gopCache_.length);// Clear nalUnits\nnalUnits=[];// return early no gops can be aligned with desired gopsToAlignWith\nthis.resetStream_();this.trigger('done','VideoSegmentStream');return;}// Some gops were trimmed. clear dts info so minSegmentDts and pts are correct\n// when recalculated before sending off to CoalesceStream\ntrackDecodeInfo.clearDtsInfo(track);gops=alignedGops;}trackDecodeInfo.collectDtsInfo(track,gops);// First, we have to build the index from byte locations to\n// samples (that is, frames) in the video data\ntrack.samples=frameUtils.generateSampleTable(gops);// Concatenate the video data and construct the mdat\nmdat=mp4Generator.mdat(frameUtils.concatenateNalData(gops));track.baseMediaDecodeTime=trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track,options.keepOriginalTimestamps);this.trigger('processedGopsInfo',gops.map(function(gop){return{pts:gop.pts,dts:gop.dts,byteLength:gop.byteLength};}));firstGop=gops[0];lastGop=gops[gops.length-1];this.trigger('segmentTimingInfo',generateVideoSegmentTimingInfo(track.baseMediaDecodeTime,firstGop.dts,firstGop.pts,lastGop.dts+lastGop.duration,lastGop.pts+lastGop.duration,prependedContentDuration));this.trigger('timingInfo',{start:gops[0].dts,end:gops[gops.length-1].dts+gops[gops.length-1].duration});// save all the nals in the last GOP into the gop cache\nthis.gopCache_.unshift({gop:gops.pop(),pps:track.pps,sps:track.sps});// Keep a maximum of 6 GOPs in the cache\nthis.gopCache_.length=Math.min(6,this.gopCache_.length);// Clear nalUnits\nnalUnits=[];this.trigger('baseMediaDecodeTime',track.baseMediaDecodeTime);this.trigger('timelineStartInfo',track.timelineStartInfo);moof=mp4Generator.moof(sequenceNumber,[track]);// it would be great to allocate this array up front instead of\n// throwing away hundreds of media segment fragments\nboxes=new Uint8Array(moof.byteLength+mdat.byteLength);// Bump the sequence number for next time\nsequenceNumber++;boxes.set(moof);boxes.set(mdat,moof.byteLength);this.trigger('data',{track:track,boxes:boxes});this.resetStream_();// Continue with the flush process now\nthis.trigger('done','VideoSegmentStream');};this.reset=function(){this.resetStream_();nalUnits=[];this.gopCache_.length=0;gopsToAlignWith.length=0;this.trigger('reset');};this.resetStream_=function(){trackDecodeInfo.clearDtsInfo(track);// reset config and pps because they may differ across segments\n// for instance, when we are rendition switching\nconfig=undefined;pps=undefined;};// Search for a candidate Gop for gop-fusion from the gop cache and\n// return it or return null if no good candidate was found\nthis.getGopForFusion_=function(nalUnit){var halfSecond=45000,// Half-a-second in a 90khz clock\nallowableOverlap=10000,// About 3 frames @ 30fps\nnearestDistance=Infinity,dtsDistance,nearestGopObj,currentGop,currentGopObj,i;// Search for the GOP nearest to the beginning of this nal unit\nfor(i=0;i<this.gopCache_.length;i++){currentGopObj=this.gopCache_[i];currentGop=currentGopObj.gop;// Reject Gops with different SPS or PPS\nif(!(track.pps&&arrayEquals(track.pps[0],currentGopObj.pps[0]))||!(track.sps&&arrayEquals(track.sps[0],currentGopObj.sps[0]))){continue;}// Reject Gops that would require a negative baseMediaDecodeTime\nif(currentGop.dts<track.timelineStartInfo.dts){continue;}// The distance between the end of the gop and the start of the nalUnit\ndtsDistance=nalUnit.dts-currentGop.dts-currentGop.duration;// Only consider GOPS that start before the nal unit and end within\n// a half-second of the nal unit\nif(dtsDistance>=-allowableOverlap&&dtsDistance<=halfSecond){// Always use the closest GOP we found if there is more than\n// one candidate\nif(!nearestGopObj||nearestDistance>dtsDistance){nearestGopObj=currentGopObj;nearestDistance=dtsDistance;}}}if(nearestGopObj){return nearestGopObj.gop;}return null;};// trim gop list to the first gop found that has a matching pts with a gop in the list\n// of gopsToAlignWith starting from the START of the list\nthis.alignGopsAtStart_=function(gops){var alignIndex,gopIndex,align,gop,byteLength,nalCount,duration,alignedGops;byteLength=gops.byteLength;nalCount=gops.nalCount;duration=gops.duration;alignIndex=gopIndex=0;while(alignIndex<gopsToAlignWith.length&&gopIndex<gops.length){align=gopsToAlignWith[alignIndex];gop=gops[gopIndex];if(align.pts===gop.pts){break;}if(gop.pts>align.pts){// this current gop starts after the current gop we want to align on, so increment\n// align index\nalignIndex++;continue;}// current gop starts before the current gop we want to align on. so increment gop\n// index\ngopIndex++;byteLength-=gop.byteLength;nalCount-=gop.nalCount;duration-=gop.duration;}if(gopIndex===0){// no gops to trim\nreturn gops;}if(gopIndex===gops.length){// all gops trimmed, skip appending all gops\nreturn null;}alignedGops=gops.slice(gopIndex);alignedGops.byteLength=byteLength;alignedGops.duration=duration;alignedGops.nalCount=nalCount;alignedGops.pts=alignedGops[0].pts;alignedGops.dts=alignedGops[0].dts;return alignedGops;};// trim gop list to the first gop found that has a matching pts with a gop in the list\n// of gopsToAlignWith starting from the END of the list\nthis.alignGopsAtEnd_=function(gops){var alignIndex,gopIndex,align,gop,alignEndIndex,matchFound;alignIndex=gopsToAlignWith.length-1;gopIndex=gops.length-1;alignEndIndex=null;matchFound=false;while(alignIndex>=0&&gopIndex>=0){align=gopsToAlignWith[alignIndex];gop=gops[gopIndex];if(align.pts===gop.pts){matchFound=true;break;}if(align.pts>gop.pts){alignIndex--;continue;}if(alignIndex===gopsToAlignWith.length-1){// gop.pts is greater than the last alignment candidate. If no match is found\n// by the end of this loop, we still want to append gops that come after this\n// point\nalignEndIndex=gopIndex;}gopIndex--;}if(!matchFound&&alignEndIndex===null){return null;}var trimIndex;if(matchFound){trimIndex=gopIndex;}else{trimIndex=alignEndIndex;}if(trimIndex===0){return gops;}var alignedGops=gops.slice(trimIndex);var metadata=alignedGops.reduce(function(total,gop){total.byteLength+=gop.byteLength;total.duration+=gop.duration;total.nalCount+=gop.nalCount;return total;},{byteLength:0,duration:0,nalCount:0});alignedGops.byteLength=metadata.byteLength;alignedGops.duration=metadata.duration;alignedGops.nalCount=metadata.nalCount;alignedGops.pts=alignedGops[0].pts;alignedGops.dts=alignedGops[0].dts;return alignedGops;};this.alignGopsWith=function(newGopsToAlignWith){gopsToAlignWith=newGopsToAlignWith;};};_VideoSegmentStream.prototype=new stream();/**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at media timeline start.\n */_CoalesceStream=function CoalesceStream(options,metadataStream){// Number of Tracks per output segment\n// If greater than 1, we combine multiple\n// tracks into a single segment\nthis.numberOfTracks=0;this.metadataStream=metadataStream;options=options||{};if(typeof options.remux!=='undefined'){this.remuxTracks=!!options.remux;}else{this.remuxTracks=true;}if(typeof options.keepOriginalTimestamps==='boolean'){this.keepOriginalTimestamps=options.keepOriginalTimestamps;}else{this.keepOriginalTimestamps=false;}this.pendingTracks=[];this.videoTrack=null;this.pendingBoxes=[];this.pendingCaptions=[];this.pendingMetadata=[];this.pendingBytes=0;this.emittedTracks=0;_CoalesceStream.prototype.init.call(this);// Take output from multiple\nthis.push=function(output){// buffer incoming captions until the associated video segment\n// finishes\nif(output.text){return this.pendingCaptions.push(output);}// buffer incoming id3 tags until the final flush\nif(output.frames){return this.pendingMetadata.push(output);}// Add this track to the list of pending tracks and store\n// important information required for the construction of\n// the final segment\nthis.pendingTracks.push(output.track);this.pendingBytes+=output.boxes.byteLength;// TODO: is there an issue for this against chrome?\n// We unshift audio and push video because\n// as of Chrome 75 when switching from\n// one init segment to another if the video\n// mdat does not appear after the audio mdat\n// only audio will play for the duration of our transmux.\nif(output.track.type==='video'){this.videoTrack=output.track;this.pendingBoxes.push(output.boxes);}if(output.track.type==='audio'){this.audioTrack=output.track;this.pendingBoxes.unshift(output.boxes);}};};_CoalesceStream.prototype=new stream();_CoalesceStream.prototype.flush=function(flushSource){var offset=0,event={captions:[],captionStreams:{},metadata:[],info:{}},caption,id3,initSegment,timelineStartPts=0,i;if(this.pendingTracks.length<this.numberOfTracks){if(flushSource!=='VideoSegmentStream'&&flushSource!=='AudioSegmentStream'){// Return because we haven't received a flush from a data-generating\n// portion of the segment (meaning that we have only recieved meta-data\n// or captions.)\nreturn;}else if(this.remuxTracks){// Return until we have enough tracks from the pipeline to remux (if we\n// are remuxing audio and video into a single MP4)\nreturn;}else if(this.pendingTracks.length===0){// In the case where we receive a flush without any data having been\n// received we consider it an emitted track for the purposes of coalescing\n// `done` events.\n// We do this for the case where there is an audio and video track in the\n// segment but no audio data. (seen in several playlists with alternate\n// audio tracks and no audio present in the main TS segments.)\nthis.emittedTracks++;if(this.emittedTracks>=this.numberOfTracks){this.trigger('done');this.emittedTracks=0;}return;}}if(this.videoTrack){timelineStartPts=this.videoTrack.timelineStartInfo.pts;VIDEO_PROPERTIES.forEach(function(prop){event.info[prop]=this.videoTrack[prop];},this);}else if(this.audioTrack){timelineStartPts=this.audioTrack.timelineStartInfo.pts;AUDIO_PROPERTIES.forEach(function(prop){event.info[prop]=this.audioTrack[prop];},this);}if(this.videoTrack||this.audioTrack){if(this.pendingTracks.length===1){event.type=this.pendingTracks[0].type;}else{event.type='combined';}this.emittedTracks+=this.pendingTracks.length;initSegment=mp4Generator.initSegment(this.pendingTracks);// Create a new typed array to hold the init segment\nevent.initSegment=new Uint8Array(initSegment.byteLength);// Create an init segment containing a moov\n// and track definitions\nevent.initSegment.set(initSegment);// Create a new typed array to hold the moof+mdats\nevent.data=new Uint8Array(this.pendingBytes);// Append each moof+mdat (one per track) together\nfor(i=0;i<this.pendingBoxes.length;i++){event.data.set(this.pendingBoxes[i],offset);offset+=this.pendingBoxes[i].byteLength;}// Translate caption PTS times into second offsets to match the\n// video timeline for the segment, and add track info\nfor(i=0;i<this.pendingCaptions.length;i++){caption=this.pendingCaptions[i];caption.startTime=clock.metadataTsToSeconds(caption.startPts,timelineStartPts,this.keepOriginalTimestamps);caption.endTime=clock.metadataTsToSeconds(caption.endPts,timelineStartPts,this.keepOriginalTimestamps);event.captionStreams[caption.stream]=true;event.captions.push(caption);}// Translate ID3 frame PTS times into second offsets to match the\n// video timeline for the segment\nfor(i=0;i<this.pendingMetadata.length;i++){id3=this.pendingMetadata[i];id3.cueTime=clock.metadataTsToSeconds(id3.pts,timelineStartPts,this.keepOriginalTimestamps);event.metadata.push(id3);}// We add this to every single emitted segment even though we only need\n// it for the first\nevent.metadata.dispatchType=this.metadataStream.dispatchType;// Reset stream state\nthis.pendingTracks.length=0;this.videoTrack=null;this.pendingBoxes.length=0;this.pendingCaptions.length=0;this.pendingBytes=0;this.pendingMetadata.length=0;// Emit the built segment\n// We include captions and ID3 tags for backwards compatibility,\n// ideally we should send only video and audio in the data event\nthis.trigger('data',event);// Emit each caption to the outside world\n// Ideally, this would happen immediately on parsing captions,\n// but we need to ensure that video data is sent back first\n// so that caption timing can be adjusted to match video timing\nfor(i=0;i<event.captions.length;i++){caption=event.captions[i];this.trigger('caption',caption);}// Emit each id3 tag to the outside world\n// Ideally, this would happen immediately on parsing the tag,\n// but we need to ensure that video data is sent back first\n// so that ID3 frame timing can be adjusted to match video timing\nfor(i=0;i<event.metadata.length;i++){id3=event.metadata[i];this.trigger('id3Frame',id3);}}// Only emit `done` if all tracks have been flushed and emitted\nif(this.emittedTracks>=this.numberOfTracks){this.trigger('done');this.emittedTracks=0;}};_CoalesceStream.prototype.setRemux=function(val){this.remuxTracks=val;};/**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */_Transmuxer=function Transmuxer(options){var self=this,hasFlushed=true,videoTrack,audioTrack;_Transmuxer.prototype.init.call(this);options=options||{};this.baseMediaDecodeTime=options.baseMediaDecodeTime||0;this.transmuxPipeline_={};this.setupAacPipeline=function(){var pipeline={};this.transmuxPipeline_=pipeline;pipeline.type='aac';pipeline.metadataStream=new m2ts_1.MetadataStream();// set up the parsing pipeline\npipeline.aacStream=new aac();pipeline.audioTimestampRolloverStream=new m2ts_1.TimestampRolloverStream('audio');pipeline.timedMetadataTimestampRolloverStream=new m2ts_1.TimestampRolloverStream('timed-metadata');pipeline.adtsStream=new adts();pipeline.coalesceStream=new _CoalesceStream(options,pipeline.metadataStream);pipeline.headOfPipeline=pipeline.aacStream;pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream);pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream);pipeline.metadataStream.on('timestamp',function(frame){pipeline.aacStream.setTimestamp(frame.timeStamp);});pipeline.aacStream.on('data',function(data){if(data.type==='timed-metadata'&&!pipeline.audioSegmentStream){audioTrack=audioTrack||{timelineStartInfo:{baseMediaDecodeTime:self.baseMediaDecodeTime},codec:'adts',type:'audio'};// hook up the audio segment stream to the first track with aac data\npipeline.coalesceStream.numberOfTracks++;pipeline.audioSegmentStream=new _AudioSegmentStream(audioTrack,options);pipeline.audioSegmentStream.on('timingInfo',self.trigger.bind(self,'audioTimingInfo'));// Set up the final part of the audio pipeline\npipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream);}// emit pmt info\nself.trigger('trackinfo',{hasAudio:!!audioTrack,hasVideo:!!videoTrack});});// Re-emit any data coming from the coalesce stream to the outside world\npipeline.coalesceStream.on('data',this.trigger.bind(this,'data'));// Let the consumer know we have finished flushing the entire pipeline\npipeline.coalesceStream.on('done',this.trigger.bind(this,'done'));};this.setupTsPipeline=function(){var pipeline={};this.transmuxPipeline_=pipeline;pipeline.type='ts';pipeline.metadataStream=new m2ts_1.MetadataStream();// set up the parsing pipeline\npipeline.packetStream=new m2ts_1.TransportPacketStream();pipeline.parseStream=new m2ts_1.TransportParseStream();pipeline.elementaryStream=new m2ts_1.ElementaryStream();pipeline.timestampRolloverStream=new m2ts_1.TimestampRolloverStream();pipeline.adtsStream=new adts();pipeline.h264Stream=new H264Stream();pipeline.captionStream=new m2ts_1.CaptionStream();pipeline.coalesceStream=new _CoalesceStream(options,pipeline.metadataStream);pipeline.headOfPipeline=pipeline.packetStream;// disassemble MPEG2-TS packets into elementary streams\npipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream);// !!THIS ORDER IS IMPORTANT!!\n// demux the streams\npipeline.timestampRolloverStream.pipe(pipeline.h264Stream);pipeline.timestampRolloverStream.pipe(pipeline.adtsStream);pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream);// Hook up CEA-608/708 caption stream\npipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream);pipeline.elementaryStream.on('data',function(data){var i;if(data.type==='metadata'){i=data.tracks.length;// scan the tracks listed in the metadata\nwhile(i--){if(!videoTrack&&data.tracks[i].type==='video'){videoTrack=data.tracks[i];videoTrack.timelineStartInfo.baseMediaDecodeTime=self.baseMediaDecodeTime;}else if(!audioTrack&&data.tracks[i].type==='audio'){audioTrack=data.tracks[i];audioTrack.timelineStartInfo.baseMediaDecodeTime=self.baseMediaDecodeTime;}}// hook up the video segment stream to the first track with h264 data\nif(videoTrack&&!pipeline.videoSegmentStream){pipeline.coalesceStream.numberOfTracks++;pipeline.videoSegmentStream=new _VideoSegmentStream(videoTrack,options);pipeline.videoSegmentStream.on('timelineStartInfo',function(timelineStartInfo){// When video emits timelineStartInfo data after a flush, we forward that\n// info to the AudioSegmentStream, if it exists, because video timeline\n// data takes precedence.\nif(audioTrack){audioTrack.timelineStartInfo=timelineStartInfo;// On the first segment we trim AAC frames that exist before the\n// very earliest DTS we have seen in video because Chrome will\n// interpret any video track with a baseMediaDecodeTime that is\n// non-zero as a gap.\npipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts);}});pipeline.videoSegmentStream.on('processedGopsInfo',self.trigger.bind(self,'gopInfo'));pipeline.videoSegmentStream.on('segmentTimingInfo',self.trigger.bind(self,'videoSegmentTimingInfo'));pipeline.videoSegmentStream.on('baseMediaDecodeTime',function(baseMediaDecodeTime){if(audioTrack){pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime);}});pipeline.videoSegmentStream.on('timingInfo',self.trigger.bind(self,'videoTimingInfo'));// Set up the final part of the video pipeline\npipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream);}if(audioTrack&&!pipeline.audioSegmentStream){// hook up the audio segment stream to the first track with aac data\npipeline.coalesceStream.numberOfTracks++;pipeline.audioSegmentStream=new _AudioSegmentStream(audioTrack,options);pipeline.audioSegmentStream.on('timingInfo',self.trigger.bind(self,'audioTimingInfo'));// Set up the final part of the audio pipeline\npipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream);}// emit pmt info\nself.trigger('trackinfo',{hasAudio:!!audioTrack,hasVideo:!!videoTrack});}});// Re-emit any data coming from the coalesce stream to the outside world\npipeline.coalesceStream.on('data',this.trigger.bind(this,'data'));pipeline.coalesceStream.on('id3Frame',function(id3Frame){id3Frame.dispatchType=pipeline.metadataStream.dispatchType;self.trigger('id3Frame',id3Frame);});pipeline.coalesceStream.on('caption',this.trigger.bind(this,'caption'));// Let the consumer know we have finished flushing the entire pipeline\npipeline.coalesceStream.on('done',this.trigger.bind(this,'done'));};// hook up the segment streams once track metadata is delivered\nthis.setBaseMediaDecodeTime=function(baseMediaDecodeTime){var pipeline=this.transmuxPipeline_;if(!options.keepOriginalTimestamps){this.baseMediaDecodeTime=baseMediaDecodeTime;}if(audioTrack){audioTrack.timelineStartInfo.dts=undefined;audioTrack.timelineStartInfo.pts=undefined;trackDecodeInfo.clearDtsInfo(audioTrack);if(!options.keepOriginalTimestamps){audioTrack.timelineStartInfo.baseMediaDecodeTime=baseMediaDecodeTime;}if(pipeline.audioTimestampRolloverStream){pipeline.audioTimestampRolloverStream.discontinuity();}}if(videoTrack){if(pipeline.videoSegmentStream){pipeline.videoSegmentStream.gopCache_=[];}videoTrack.timelineStartInfo.dts=undefined;videoTrack.timelineStartInfo.pts=undefined;trackDecodeInfo.clearDtsInfo(videoTrack);pipeline.captionStream.reset();if(!options.keepOriginalTimestamps){videoTrack.timelineStartInfo.baseMediaDecodeTime=baseMediaDecodeTime;}}if(pipeline.timestampRolloverStream){pipeline.timestampRolloverStream.discontinuity();}};this.setAudioAppendStart=function(timestamp){if(audioTrack){this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp);}};this.setRemux=function(val){var pipeline=this.transmuxPipeline_;options.remux=val;if(pipeline&&pipeline.coalesceStream){pipeline.coalesceStream.setRemux(val);}};this.alignGopsWith=function(gopsToAlignWith){if(videoTrack&&this.transmuxPipeline_.videoSegmentStream){this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith);}};// feed incoming data to the front of the parsing pipeline\nthis.push=function(data){if(hasFlushed){var isAac=isLikelyAacData$1(data);if(isAac&&this.transmuxPipeline_.type!=='aac'){this.setupAacPipeline();}else if(!isAac&&this.transmuxPipeline_.type!=='ts'){this.setupTsPipeline();}hasFlushed=false;}this.transmuxPipeline_.headOfPipeline.push(data);};// flush any buffered data\nthis.flush=function(){hasFlushed=true;// Start at the top of the pipeline and flush all pending work\nthis.transmuxPipeline_.headOfPipeline.flush();};this.endTimeline=function(){this.transmuxPipeline_.headOfPipeline.endTimeline();};this.reset=function(){if(this.transmuxPipeline_.headOfPipeline){this.transmuxPipeline_.headOfPipeline.reset();}};// Caption data has to be reset when seeking outside buffered range\nthis.resetCaptions=function(){if(this.transmuxPipeline_.captionStream){this.transmuxPipeline_.captionStream.reset();}};};_Transmuxer.prototype=new stream();var transmuxer={Transmuxer:_Transmuxer,VideoSegmentStream:_VideoSegmentStream,AudioSegmentStream:_AudioSegmentStream,AUDIO_PROPERTIES:AUDIO_PROPERTIES,VIDEO_PROPERTIES:VIDEO_PROPERTIES,// exported for testing\ngenerateVideoSegmentTimingInfo:generateVideoSegmentTimingInfo};var classCallCheck=function classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};var createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();/**\n * @file transmuxer-worker.js\n */ /**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */var wireTransmuxerEvents=function wireTransmuxerEvents(self,transmuxer$$1){transmuxer$$1.on('data',function(segment){// transfer ownership of the underlying ArrayBuffer\n// instead of doing a copy to save memory\n// ArrayBuffers are transferable but generic TypedArrays are not\n// @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\nvar initArray=segment.initSegment;segment.initSegment={data:initArray.buffer,byteOffset:initArray.byteOffset,byteLength:initArray.byteLength};var typedArray=segment.data;segment.data=typedArray.buffer;self.postMessage({action:'data',segment:segment,byteOffset:typedArray.byteOffset,byteLength:typedArray.byteLength},[segment.data]);});if(transmuxer$$1.captionStream){transmuxer$$1.captionStream.on('data',function(caption){self.postMessage({action:'caption',data:caption});});}transmuxer$$1.on('done',function(data){self.postMessage({action:'done'});});transmuxer$$1.on('gopInfo',function(gopInfo){self.postMessage({action:'gopInfo',gopInfo:gopInfo});});transmuxer$$1.on('videoSegmentTimingInfo',function(videoSegmentTimingInfo){self.postMessage({action:'videoSegmentTimingInfo',videoSegmentTimingInfo:videoSegmentTimingInfo});});};/**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */var MessageHandlers=function(){function MessageHandlers(self,options){classCallCheck(this,MessageHandlers);this.options=options||{};this.self=self;this.init();}/**\n * initialize our web worker and wire all the events.\n */createClass(MessageHandlers,[{key:'init',value:function init(){if(this.transmuxer){this.transmuxer.dispose();}this.transmuxer=new transmuxer.Transmuxer(this.options);wireTransmuxerEvents(this.self,this.transmuxer);}/**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */},{key:'push',value:function push(data){// Cast array buffer to correct type for transmuxer\nvar segment=new Uint8Array(data.data,data.byteOffset,data.byteLength);this.transmuxer.push(segment);}/**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */},{key:'reset',value:function reset(){this.init();}/**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */},{key:'setTimestampOffset',value:function setTimestampOffset(data){var timestampOffset=data.timestampOffset||0;this.transmuxer.setBaseMediaDecodeTime(Math.round(timestampOffset*90000));}},{key:'setAudioAppendStart',value:function setAudioAppendStart(data){this.transmuxer.setAudioAppendStart(Math.ceil(data.appendStart*90000));}/**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */},{key:'flush',value:function flush(data){this.transmuxer.flush();}},{key:'resetCaptions',value:function resetCaptions(){this.transmuxer.resetCaptions();}},{key:'alignGopsWith',value:function alignGopsWith(data){this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice());}}]);return MessageHandlers;}();/**\n * Our web wroker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */var TransmuxerWorker=function TransmuxerWorker(self){self.onmessage=function(event){if(event.data.action==='init'&&event.data.options){this.messageHandlers=new MessageHandlers(self,event.data.options);return;}if(!this.messageHandlers){this.messageHandlers=new MessageHandlers(self);}if(event.data&&event.data.action&&event.data.action!=='init'){if(this.messageHandlers[event.data.action]){this.messageHandlers[event.data.action](event.data);}}};};var transmuxerWorker=new TransmuxerWorker(self);return transmuxerWorker;}();});/**\n * @file - codecs.js - Handles tasks regarding codec strings such as translating them to\n * codec strings, or translating codec strings into objects that can be examined.\n */ // Default codec parameters if none were provided for video and/or audio\nvar defaultCodecs={videoCodec:'avc1',videoObjectTypeIndicator:'.4d400d',// AAC-LC\naudioProfile:'2'};/**\n * Replace the old apple-style `avc1.<dd>.<dd>` codec string with the standard\n * `avc1.<hhhhhh>`\n *\n * @param {Array} codecs an array of codec strings to fix\n * @return {Array} the translated codec array\n * @private\n */var translateLegacyCodecs=function translateLegacyCodecs(codecs){return codecs.map(function(codec){return codec.replace(/avc1\\.(\\d+)\\.(\\d+)/i,function(orig,profile,avcLevel){var profileHex=('00'+Number(profile).toString(16)).slice(-2);var avcLevelHex=('00'+Number(avcLevel).toString(16)).slice(-2);return'avc1.'+profileHex+'00'+avcLevelHex;});});};/**\n * Parses a codec string to retrieve the number of codecs specified,\n * the video codec and object type indicator, and the audio profile.\n */var parseCodecs=function parseCodecs(){var codecs=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'';var result={codecCount:0};var parsed=void 0;result.codecCount=codecs.split(',').length;result.codecCount=result.codecCount||2;// parse the video codec\nparsed=/(^|\\s|,)+(avc[13])([^ ,]*)/i.exec(codecs);if(parsed){result.videoCodec=parsed[2];result.videoObjectTypeIndicator=parsed[3];}// parse the last field of the audio codec\nresult.audioProfile=/(^|\\s|,)+mp4a.[0-9A-Fa-f]+\\.([0-9A-Fa-f]+)/i.exec(codecs);result.audioProfile=result.audioProfile&&result.audioProfile[2];return result;};/**\n * Replace codecs in the codec string with the old apple-style `avc1.<dd>.<dd>` to the\n * standard `avc1.<hhhhhh>`.\n *\n * @param codecString {String} the codec string\n * @return {String} the codec string with old apple-style codecs replaced\n *\n * @private\n */var mapLegacyAvcCodecs=function mapLegacyAvcCodecs(codecString){return codecString.replace(/avc1\\.(\\d+)\\.(\\d+)/i,function(match){return translateLegacyCodecs([match])[0];});};/**\n * Build a media mime-type string from a set of parameters\n * @param {String} type either 'audio' or 'video'\n * @param {String} container either 'mp2t' or 'mp4'\n * @param {Array} codecs an array of codec strings to add\n * @return {String} a valid media mime-type\n */var makeMimeTypeString=function makeMimeTypeString(type,container,codecs){// The codecs array is filtered so that falsey values are\n// dropped and don't cause Array#join to create spurious\n// commas\nreturn type+'/'+container+'; codecs=\"'+codecs.filter(function(c){return!!c;}).join(', ')+'\"';};/**\n * Returns the type container based on information in the playlist\n * @param {Playlist} media the current media playlist\n * @return {String} a valid media container type\n */var getContainerType=function getContainerType(media){// An initialization segment means the media playlist is an iframe\n// playlist or is using the mp4 container. We don't currently\n// support iframe playlists, so assume this is signalling mp4\n// fragments.\nif(media.segments&&media.segments.length&&media.segments[0].map){return'mp4';}return'mp2t';};/**\n * Returns a set of codec strings parsed from the playlist or the default\n * codec strings if no codecs were specified in the playlist\n * @param {Playlist} media the current media playlist\n * @return {Object} an object with the video and audio codecs\n */var getCodecs=function getCodecs(media){// if the codecs were explicitly specified, use them instead of the\n// defaults\nvar mediaAttributes=media.attributes||{};if(mediaAttributes.CODECS){return parseCodecs(mediaAttributes.CODECS);}return defaultCodecs;};var audioProfileFromDefault=function audioProfileFromDefault(master,audioGroupId){if(!master.mediaGroups.AUDIO||!audioGroupId){return null;}var audioGroup=master.mediaGroups.AUDIO[audioGroupId];if(!audioGroup){return null;}for(var name in audioGroup){var audioType=audioGroup[name];if(audioType[\"default\"]&&audioType.playlists){// codec should be the same for all playlists within the audio type\nreturn parseCodecs(audioType.playlists[0].attributes.CODECS).audioProfile;}}return null;};/**\n * Calculates the MIME type strings for a working configuration of\n * SourceBuffers to play variant streams in a master playlist. If\n * there is no possible working configuration, an empty array will be\n * returned.\n *\n * @param master {Object} the m3u8 object for the master playlist\n * @param media {Object} the m3u8 object for the variant playlist\n * @return {Array} the MIME type strings. If the array has more than\n * one entry, the first element should be applied to the video\n * SourceBuffer and the second to the audio SourceBuffer.\n *\n * @private\n */var mimeTypesForPlaylist=function mimeTypesForPlaylist(master,media){var containerType=getContainerType(media);var codecInfo=getCodecs(media);var mediaAttributes=media.attributes||{};// Default condition for a traditional HLS (no demuxed audio/video)\nvar isMuxed=true;var isMaat=false;if(!media){// Not enough information\nreturn[];}if(master.mediaGroups.AUDIO&&mediaAttributes.AUDIO){var audioGroup=master.mediaGroups.AUDIO[mediaAttributes.AUDIO];// Handle the case where we are in a multiple-audio track scenario\nif(audioGroup){isMaat=true;// Start with the everything demuxed then...\nisMuxed=false;// ...check to see if any audio group tracks are muxed (ie. lacking a uri)\nfor(var groupId in audioGroup){// either a uri is present (if the case of HLS and an external playlist), or\n// playlists is present (in the case of DASH where we don't have external audio\n// playlists)\nif(!audioGroup[groupId].uri&&!audioGroup[groupId].playlists){isMuxed=true;break;}}}}// HLS with multiple-audio tracks must always get an audio codec.\n// Put another way, there is no way to have a video-only multiple-audio HLS!\nif(isMaat&&!codecInfo.audioProfile){if(!isMuxed){// It is possible for codecs to be specified on the audio media group playlist but\n// not on the rendition playlist. This is mostly the case for DASH, where audio and\n// video are always separate (and separately specified).\ncodecInfo.audioProfile=audioProfileFromDefault(master,mediaAttributes.AUDIO);}if(!codecInfo.audioProfile){videojs$1.log.warn('Multiple audio tracks present but no audio codec string is specified. '+'Attempting to use the default audio codec (mp4a.40.2)');codecInfo.audioProfile=defaultCodecs.audioProfile;}}// Generate the final codec strings from the codec object generated above\nvar codecStrings={};if(codecInfo.videoCodec){codecStrings.video=''+codecInfo.videoCodec+codecInfo.videoObjectTypeIndicator;}if(codecInfo.audioProfile){codecStrings.audio='mp4a.40.'+codecInfo.audioProfile;}// Finally, make and return an array with proper mime-types depending on\n// the configuration\nvar justAudio=makeMimeTypeString('audio',containerType,[codecStrings.audio]);var justVideo=makeMimeTypeString('video',containerType,[codecStrings.video]);var bothVideoAudio=makeMimeTypeString('video',containerType,[codecStrings.video,codecStrings.audio]);if(isMaat){if(!isMuxed&&codecStrings.video){return[justVideo,justAudio];}if(!isMuxed&&!codecStrings.video){// There is no muxed content and no video codec string, so this is an audio only\n// stream with alternate audio.\nreturn[justAudio,justAudio];}// There exists the possiblity that this will return a `video/container`\n// mime-type for the first entry in the array even when there is only audio.\n// This doesn't appear to be a problem and simplifies the code.\nreturn[bothVideoAudio,justAudio];}// If there is no video codec at all, always just return a single\n// audio/<container> mime-type\nif(!codecStrings.video){return[justAudio];}// When not using separate audio media groups, audio and video is\n// *always* muxed\nreturn[bothVideoAudio];};/**\n * Parse a content type header into a type and parameters\n * object\n *\n * @param {String} type the content type header\n * @return {Object} the parsed content-type\n * @private\n */var parseContentType=function parseContentType(type){var object={type:'',parameters:{}};var parameters=type.trim().split(';');// first parameter should always be content-type\nobject.type=parameters.shift().trim();parameters.forEach(function(parameter){var pair=parameter.trim().split('=');if(pair.length>1){var name=pair[0].replace(/\"/g,'').trim();var value=pair[1].replace(/\"/g,'').trim();object.parameters[name]=value;}});return object;};/**\n * Check if a codec string refers to an audio codec.\n *\n * @param {String} codec codec string to check\n * @return {Boolean} if this is an audio codec\n * @private\n */var isAudioCodec=function isAudioCodec(codec){return /mp4a\\.\\d+.\\d+/i.test(codec);};/**\n * Check if a codec string refers to a video codec.\n *\n * @param {String} codec codec string to check\n * @return {Boolean} if this is a video codec\n * @private\n */var isVideoCodec=function isVideoCodec(codec){return /avc1\\.[\\da-f]+/i.test(codec);};/**\n * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in\n * front of current time.\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Number} currentTime\n * The current time\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n * @return {Array}\n * List of gops considered safe to append over\n */var gopsSafeToAlignWith=function gopsSafeToAlignWith(buffer,currentTime,mapping){if(typeof currentTime==='undefined'||currentTime===null||!buffer.length){return[];}// pts value for current time + 3 seconds to give a bit more wiggle room\nvar currentTimePts=Math.ceil((currentTime-mapping+3)*90000);var i=void 0;for(i=0;i<buffer.length;i++){if(buffer[i].pts>currentTimePts){break;}}return buffer.slice(i);};/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Array} gops\n * List of new gop information\n * @param {boolean} replace\n * If true, replace the buffer with the new gop information. If false, append the\n * new gop information to the buffer in the right location of time.\n * @return {Array}\n * Updated list of gop information\n */var updateGopBuffer=function updateGopBuffer(buffer,gops,replace){if(!gops.length){return buffer;}if(replace){// If we are in safe append mode, then completely overwrite the gop buffer\n// with the most recent appeneded data. This will make sure that when appending\n// future segments, we only try to align with gops that are both ahead of current\n// time and in the last segment appended.\nreturn gops.slice();}var start=gops[0].pts;var i=0;for(i;i<buffer.length;i++){if(buffer[i].pts>=start){break;}}return buffer.slice(0,i).concat(gops);};/**\n * Removes gop information in buffer that overlaps with provided start and end\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Double} start\n * position to start the remove at\n * @param {Double} end\n * position to end the remove at\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n */var removeGopBuffer=function removeGopBuffer(buffer,start,end,mapping){var startPts=Math.ceil((start-mapping)*90000);var endPts=Math.ceil((end-mapping)*90000);var updatedBuffer=buffer.slice();var i=buffer.length;while(i--){if(buffer[i].pts<=endPts){break;}}if(i===-1){// no removal because end of remove range is before start of buffer\nreturn updatedBuffer;}var j=i+1;while(j--){if(buffer[j].pts<=startPts){break;}}// clamp remove range start to 0 index\nj=Math.max(j,0);updatedBuffer.splice(j,i-j+1);return updatedBuffer;};var buffered=function buffered(videoBuffer,audioBuffer,audioDisabled){var start=null;var end=null;var arity=0;var extents=[];var ranges=[];// neither buffer has been created yet\nif(!videoBuffer&&!audioBuffer){return videojs$1.createTimeRange();}// only one buffer is configured\nif(!videoBuffer){return audioBuffer.buffered;}if(!audioBuffer){return videoBuffer.buffered;}// both buffers are configured\nif(audioDisabled){return videoBuffer.buffered;}// both buffers are empty\nif(videoBuffer.buffered.length===0&&audioBuffer.buffered.length===0){return videojs$1.createTimeRange();}// Handle the case where we have both buffers and create an\n// intersection of the two\nvar videoBuffered=videoBuffer.buffered;var audioBuffered=audioBuffer.buffered;var count=videoBuffered.length;// A) Gather up all start and end times\nwhile(count--){extents.push({time:videoBuffered.start(count),type:'start'});extents.push({time:videoBuffered.end(count),type:'end'});}count=audioBuffered.length;while(count--){extents.push({time:audioBuffered.start(count),type:'start'});extents.push({time:audioBuffered.end(count),type:'end'});}// B) Sort them by time\nextents.sort(function(a,b){return a.time-b.time;});// C) Go along one by one incrementing arity for start and decrementing\n// arity for ends\nfor(count=0;count<extents.length;count++){if(extents[count].type==='start'){arity++;// D) If arity is ever incremented to 2 we are entering an\n// overlapping range\nif(arity===2){start=extents[count].time;}}else if(extents[count].type==='end'){arity--;// E) If arity is ever decremented to 1 we leaving an\n// overlapping range\nif(arity===1){end=extents[count].time;}}// F) Record overlapping ranges\nif(start!==null&&end!==null){ranges.push([start,end]);start=null;end=null;}}return videojs$1.createTimeRanges(ranges);};/**\n * @file virtual-source-buffer.js\n */var ONE_SECOND_IN_TS=90000;// We create a wrapper around the SourceBuffer so that we can manage the\n// state of the `updating` property manually. We have to do this because\n// Firefox changes `updating` to false long before triggering `updateend`\n// events and that was causing strange problems in videojs-contrib-hls\nvar makeWrappedSourceBuffer=function makeWrappedSourceBuffer(mediaSource,mimeType){var sourceBuffer=mediaSource.addSourceBuffer(mimeType);var wrapper=Object.create(null);wrapper.updating=false;wrapper.realBuffer_=sourceBuffer;var _loop=function _loop(key){if(typeof sourceBuffer[key]==='function'){wrapper[key]=function(){return sourceBuffer[key].apply(sourceBuffer,arguments);};}else if(typeof wrapper[key]==='undefined'){Object.defineProperty(wrapper,key,{get:function get$$1(){return sourceBuffer[key];},set:function set$$1(v){return sourceBuffer[key]=v;}});}};for(var key in sourceBuffer){_loop(key);}return wrapper;};/**\n * VirtualSourceBuffers exist so that we can transmux non native formats\n * into a native format, but keep the same api as a native source buffer.\n * It creates a transmuxer, that works in its own thread (a web worker) and\n * that transmuxer muxes the data into a native format. VirtualSourceBuffer will\n * then send all of that data to the naive sourcebuffer so that it is\n * indestinguishable from a natively supported format.\n *\n * @param {HtmlMediaSource} mediaSource the parent mediaSource\n * @param {Array} codecs array of codecs that we will be dealing with\n * @class VirtualSourceBuffer\n * @extends video.js.EventTarget\n */var VirtualSourceBuffer=function(_videojs$EventTarget){inherits(VirtualSourceBuffer,_videojs$EventTarget);function VirtualSourceBuffer(mediaSource,codecs){classCallCheck(this,VirtualSourceBuffer);var _this=possibleConstructorReturn(this,(VirtualSourceBuffer.__proto__||Object.getPrototypeOf(VirtualSourceBuffer)).call(this,videojs$1.EventTarget));_this.timestampOffset_=0;_this.pendingBuffers_=[];_this.bufferUpdating_=false;_this.mediaSource_=mediaSource;_this.codecs_=codecs;_this.audioCodec_=null;_this.videoCodec_=null;_this.audioDisabled_=false;_this.appendAudioInitSegment_=true;_this.gopBuffer_=[];_this.timeMapping_=0;_this.safeAppend_=videojs$1.browser.IE_VERSION>=11;var options={remux:false,alignGopsAtEnd:_this.safeAppend_};_this.codecs_.forEach(function(codec){if(isAudioCodec(codec)){_this.audioCodec_=codec;}else if(isVideoCodec(codec)){_this.videoCodec_=codec;}});// append muxed segments to their respective native buffers as\n// soon as they are available\n_this.transmuxer_=new TransmuxWorker();_this.transmuxer_.postMessage({action:'init',options:options});_this.transmuxer_.onmessage=function(event){if(event.data.action==='data'){return _this.data_(event);}if(event.data.action==='done'){return _this.done_(event);}if(event.data.action==='gopInfo'){return _this.appendGopInfo_(event);}if(event.data.action==='videoSegmentTimingInfo'){return _this.videoSegmentTimingInfo_(event.data.videoSegmentTimingInfo);}};// this timestampOffset is a property with the side-effect of resetting\n// baseMediaDecodeTime in the transmuxer on the setter\nObject.defineProperty(_this,'timestampOffset',{get:function get$$1(){return this.timestampOffset_;},set:function set$$1(val){if(typeof val==='number'&&val>=0){this.timestampOffset_=val;this.appendAudioInitSegment_=true;// reset gop buffer on timestampoffset as this signals a change in timeline\nthis.gopBuffer_.length=0;this.timeMapping_=0;// We have to tell the transmuxer to set the baseMediaDecodeTime to\n// the desired timestampOffset for the next segment\nthis.transmuxer_.postMessage({action:'setTimestampOffset',timestampOffset:val});}}});// setting the append window affects both source buffers\nObject.defineProperty(_this,'appendWindowStart',{get:function get$$1(){return(this.videoBuffer_||this.audioBuffer_).appendWindowStart;},set:function set$$1(start){if(this.videoBuffer_){this.videoBuffer_.appendWindowStart=start;}if(this.audioBuffer_){this.audioBuffer_.appendWindowStart=start;}}});// this buffer is \"updating\" if either of its native buffers are\nObject.defineProperty(_this,'updating',{get:function get$$1(){return!!(this.bufferUpdating_||!this.audioDisabled_&&this.audioBuffer_&&this.audioBuffer_.updating||this.videoBuffer_&&this.videoBuffer_.updating);}});// the buffered property is the intersection of the buffered\n// ranges of the native source buffers\nObject.defineProperty(_this,'buffered',{get:function get$$1(){return buffered(this.videoBuffer_,this.audioBuffer_,this.audioDisabled_);}});return _this;}/**\n * When we get a data event from the transmuxer\n * we call this function and handle the data that\n * was sent to us\n *\n * @private\n * @param {Event} event the data event from the transmuxer\n */createClass(VirtualSourceBuffer,[{key:'data_',value:function data_(event){var segment=event.data.segment;// Cast ArrayBuffer to TypedArray\nsegment.data=new Uint8Array(segment.data,event.data.byteOffset,event.data.byteLength);segment.initSegment=new Uint8Array(segment.initSegment.data,segment.initSegment.byteOffset,segment.initSegment.byteLength);createTextTracksIfNecessary(this,this.mediaSource_,segment);// Add the segments to the pendingBuffers array\nthis.pendingBuffers_.push(segment);return;}/**\n * When we get a done event from the transmuxer\n * we call this function and we process all\n * of the pending data that we have been saving in the\n * data_ function\n *\n * @private\n * @param {Event} event the done event from the transmuxer\n */},{key:'done_',value:function done_(event){// Don't process and append data if the mediaSource is closed\nif(this.mediaSource_.readyState==='closed'){this.pendingBuffers_.length=0;return;}// All buffers should have been flushed from the muxer\n// start processing anything we have received\nthis.processPendingSegments_();return;}},{key:'videoSegmentTimingInfo_',value:function videoSegmentTimingInfo_(timingInfo){var timingInfoInSeconds={start:{decode:timingInfo.start.dts/ONE_SECOND_IN_TS,presentation:timingInfo.start.pts/ONE_SECOND_IN_TS},end:{decode:timingInfo.end.dts/ONE_SECOND_IN_TS,presentation:timingInfo.end.pts/ONE_SECOND_IN_TS},baseMediaDecodeTime:timingInfo.baseMediaDecodeTime/ONE_SECOND_IN_TS};if(timingInfo.prependedContentDuration){timingInfoInSeconds.prependedContentDuration=timingInfo.prependedContentDuration/ONE_SECOND_IN_TS;}this.trigger({type:'videoSegmentTimingInfo',videoSegmentTimingInfo:timingInfoInSeconds});}/**\n * Create our internal native audio/video source buffers and add\n * event handlers to them with the following conditions:\n * 1. they do not already exist on the mediaSource\n * 2. this VSB has a codec for them\n *\n * @private\n */},{key:'createRealSourceBuffers_',value:function createRealSourceBuffers_(){var _this2=this;var types=['audio','video'];types.forEach(function(type){// Don't create a SourceBuffer of this type if we don't have a\n// codec for it\nif(!_this2[type+'Codec_']){return;}// Do nothing if a SourceBuffer of this type already exists\nif(_this2[type+'Buffer_']){return;}var buffer=null;// If the mediasource already has a SourceBuffer for the codec\n// use that\nif(_this2.mediaSource_[type+'Buffer_']){buffer=_this2.mediaSource_[type+'Buffer_'];// In multiple audio track cases, the audio source buffer is disabled\n// on the main VirtualSourceBuffer by the HTMLMediaSource much earlier\n// than createRealSourceBuffers_ is called to create the second\n// VirtualSourceBuffer because that happens as a side-effect of\n// videojs-contrib-hls starting the audioSegmentLoader. As a result,\n// the audioBuffer is essentially \"ownerless\" and no one will toggle\n// the `updating` state back to false once the `updateend` event is received\n//\n// Setting `updating` to false manually will work around this\n// situation and allow work to continue\nbuffer.updating=false;}else{var codecProperty=type+'Codec_';var mimeType=type+'/mp4;codecs=\"'+_this2[codecProperty]+'\"';buffer=makeWrappedSourceBuffer(_this2.mediaSource_.nativeMediaSource_,mimeType);_this2.mediaSource_[type+'Buffer_']=buffer;}_this2[type+'Buffer_']=buffer;// Wire up the events to the SourceBuffer\n['update','updatestart','updateend'].forEach(function(event){buffer.addEventListener(event,function(){// if audio is disabled\nif(type==='audio'&&_this2.audioDisabled_){return;}if(event==='updateend'){_this2[type+'Buffer_'].updating=false;}var shouldTrigger=types.every(function(t){// skip checking audio's updating status if audio\n// is not enabled\nif(t==='audio'&&_this2.audioDisabled_){return true;}// if the other type is updating we don't trigger\nif(type!==t&&_this2[t+'Buffer_']&&_this2[t+'Buffer_'].updating){return false;}return true;});if(shouldTrigger){return _this2.trigger(event);}});});});}/**\n * Emulate the native mediasource function, but our function will\n * send all of the proposed segments to the transmuxer so that we\n * can transmux them before we append them to our internal\n * native source buffers in the correct format.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer\n * @param {Uint8Array} segment the segment to append to the buffer\n */},{key:'appendBuffer',value:function appendBuffer(segment){// Start the internal \"updating\" state\nthis.bufferUpdating_=true;if(this.audioBuffer_&&this.audioBuffer_.buffered.length){var audioBuffered=this.audioBuffer_.buffered;this.transmuxer_.postMessage({action:'setAudioAppendStart',appendStart:audioBuffered.end(audioBuffered.length-1)});}if(this.videoBuffer_){this.transmuxer_.postMessage({action:'alignGopsWith',gopsToAlignWith:gopsSafeToAlignWith(this.gopBuffer_,this.mediaSource_.player_?this.mediaSource_.player_.currentTime():null,this.timeMapping_)});}this.transmuxer_.postMessage({action:'push',// Send the typed-array of data as an ArrayBuffer so that\n// it can be sent as a \"Transferable\" and avoid the costly\n// memory copy\ndata:segment.buffer,// To recreate the original typed-array, we need information\n// about what portion of the ArrayBuffer it was a view into\nbyteOffset:segment.byteOffset,byteLength:segment.byteLength},[segment.buffer]);this.transmuxer_.postMessage({action:'flush'});}/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Event} event\n * The gopInfo event from the transmuxer\n * @param {Array} event.data.gopInfo\n * List of gop info to append\n */},{key:'appendGopInfo_',value:function appendGopInfo_(event){this.gopBuffer_=updateGopBuffer(this.gopBuffer_,event.data.gopInfo,this.safeAppend_);}/**\n * Emulate the native mediasource function and remove parts\n * of the buffer from any of our internal buffers that exist\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove\n * @param {Double} start position to start the remove at\n * @param {Double} end position to end the remove at\n */},{key:'remove',value:function remove(start,end){if(this.videoBuffer_){this.videoBuffer_.updating=true;this.videoBuffer_.remove(start,end);this.gopBuffer_=removeGopBuffer(this.gopBuffer_,start,end,this.timeMapping_);}if(!this.audioDisabled_&&this.audioBuffer_){this.audioBuffer_.updating=true;this.audioBuffer_.remove(start,end);}// Remove Metadata Cues (id3)\nremoveCuesFromTrack(start,end,this.metadataTrack_);// Remove Any Captions\nif(this.inbandTextTracks_){for(var track in this.inbandTextTracks_){removeCuesFromTrack(start,end,this.inbandTextTracks_[track]);}}}/**\n * Process any segments that the muxer has output\n * Concatenate segments together based on type and append them into\n * their respective sourceBuffers\n *\n * @private\n */},{key:'processPendingSegments_',value:function processPendingSegments_(){var sortedSegments={video:{segments:[],bytes:0},audio:{segments:[],bytes:0},captions:[],metadata:[]};if(!this.pendingBuffers_.length){// We are no longer in the internal \"updating\" state\nthis.trigger('updateend');this.bufferUpdating_=false;return;}// Sort segments into separate video/audio arrays and\n// keep track of their total byte lengths\nsortedSegments=this.pendingBuffers_.reduce(function(segmentObj,segment){var type=segment.type;var data=segment.data;var initSegment=segment.initSegment;segmentObj[type].segments.push(data);segmentObj[type].bytes+=data.byteLength;segmentObj[type].initSegment=initSegment;// Gather any captions into a single array\nif(segment.captions){segmentObj.captions=segmentObj.captions.concat(segment.captions);}if(segment.info){segmentObj[type].info=segment.info;}// Gather any metadata into a single array\nif(segment.metadata){segmentObj.metadata=segmentObj.metadata.concat(segment.metadata);}return segmentObj;},sortedSegments);// Create the real source buffers if they don't exist by now since we\n// finally are sure what tracks are contained in the source\nif(!this.videoBuffer_&&!this.audioBuffer_){// Remove any codecs that may have been specified by default but\n// are no longer applicable now\nif(sortedSegments.video.bytes===0){this.videoCodec_=null;}if(sortedSegments.audio.bytes===0){this.audioCodec_=null;}this.createRealSourceBuffers_();}if(sortedSegments.audio.info){this.mediaSource_.trigger({type:'audioinfo',info:sortedSegments.audio.info});}if(sortedSegments.video.info){this.mediaSource_.trigger({type:'videoinfo',info:sortedSegments.video.info});}if(this.appendAudioInitSegment_){if(!this.audioDisabled_&&this.audioBuffer_){sortedSegments.audio.segments.unshift(sortedSegments.audio.initSegment);sortedSegments.audio.bytes+=sortedSegments.audio.initSegment.byteLength;}this.appendAudioInitSegment_=false;}var triggerUpdateend=false;// Merge multiple video and audio segments into one and append\nif(this.videoBuffer_&&sortedSegments.video.bytes){sortedSegments.video.segments.unshift(sortedSegments.video.initSegment);sortedSegments.video.bytes+=sortedSegments.video.initSegment.byteLength;this.concatAndAppendSegments_(sortedSegments.video,this.videoBuffer_);}else if(this.videoBuffer_&&(this.audioDisabled_||!this.audioBuffer_)){// The transmuxer did not return any bytes of video, meaning it was all trimmed\n// for gop alignment. Since we have a video buffer and audio is disabled, updateend\n// will never be triggered by this source buffer, which will cause contrib-hls\n// to be stuck forever waiting for updateend. If audio is not disabled, updateend\n// will be triggered by the audio buffer, which will be sent upwards since the video\n// buffer will not be in an updating state.\ntriggerUpdateend=true;}// Add text-track data for all\naddTextTrackData(this,sortedSegments.captions,sortedSegments.metadata);if(!this.audioDisabled_&&this.audioBuffer_){this.concatAndAppendSegments_(sortedSegments.audio,this.audioBuffer_);}this.pendingBuffers_.length=0;if(triggerUpdateend){this.trigger('updateend');}// We are no longer in the internal \"updating\" state\nthis.bufferUpdating_=false;}/**\n * Combine all segments into a single Uint8Array and then append them\n * to the destination buffer\n *\n * @param {Object} segmentObj\n * @param {SourceBuffer} destinationBuffer native source buffer to append data to\n * @private\n */},{key:'concatAndAppendSegments_',value:function concatAndAppendSegments_(segmentObj,destinationBuffer){var offset=0;var tempBuffer=void 0;if(segmentObj.bytes){tempBuffer=new Uint8Array(segmentObj.bytes);// Combine the individual segments into one large typed-array\nsegmentObj.segments.forEach(function(segment){tempBuffer.set(segment,offset);offset+=segment.byteLength;});try{destinationBuffer.updating=true;destinationBuffer.appendBuffer(tempBuffer);}catch(error){if(this.mediaSource_.player_){this.mediaSource_.player_.error({code:-3,type:'APPEND_BUFFER_ERR',message:error.message,originalError:error});}}}}/**\n * Emulate the native mediasource function. abort any soureBuffer\n * actions and throw out any un-appended data.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort\n */},{key:'abort',value:function abort(){if(this.videoBuffer_){this.videoBuffer_.abort();}if(!this.audioDisabled_&&this.audioBuffer_){this.audioBuffer_.abort();}if(this.transmuxer_){this.transmuxer_.postMessage({action:'reset'});}this.pendingBuffers_.length=0;this.bufferUpdating_=false;}}]);return VirtualSourceBuffer;}(videojs$1.EventTarget);/**\n * @file html-media-source.js\n */ /**\n * Our MediaSource implementation in HTML, mimics native\n * MediaSource where/if possible.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @class HtmlMediaSource\n * @extends videojs.EventTarget\n */var HtmlMediaSource=function(_videojs$EventTarget){inherits(HtmlMediaSource,_videojs$EventTarget);function HtmlMediaSource(){classCallCheck(this,HtmlMediaSource);var _this=possibleConstructorReturn(this,(HtmlMediaSource.__proto__||Object.getPrototypeOf(HtmlMediaSource)).call(this));var property=void 0;_this.nativeMediaSource_=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource();// delegate to the native MediaSource's methods by default\nfor(property in _this.nativeMediaSource_){if(!(property in HtmlMediaSource.prototype)&&typeof _this.nativeMediaSource_[property]==='function'){_this[property]=_this.nativeMediaSource_[property].bind(_this.nativeMediaSource_);}}// emulate `duration` and `seekable` until seeking can be\n// handled uniformly for live streams\n// see https://github.com/w3c/media-source/issues/5\n_this.duration_=NaN;Object.defineProperty(_this,'duration',{get:function get$$1(){if(this.duration_===Infinity){return this.duration_;}return this.nativeMediaSource_.duration;},set:function set$$1(duration){this.duration_=duration;if(duration!==Infinity){this.nativeMediaSource_.duration=duration;return;}}});Object.defineProperty(_this,'seekable',{get:function get$$1(){if(this.duration_===Infinity){return videojs$1.createTimeRanges([[0,this.nativeMediaSource_.duration]]);}return this.nativeMediaSource_.seekable;}});Object.defineProperty(_this,'readyState',{get:function get$$1(){return this.nativeMediaSource_.readyState;}});Object.defineProperty(_this,'activeSourceBuffers',{get:function get$$1(){return this.activeSourceBuffers_;}});// the list of virtual and native SourceBuffers created by this\n// MediaSource\n_this.sourceBuffers=[];_this.activeSourceBuffers_=[];/**\n * update the list of active source buffers based upon various\n * imformation from HLS and video.js\n *\n * @private\n */_this.updateActiveSourceBuffers_=function(){// Retain the reference but empty the array\n_this.activeSourceBuffers_.length=0;// If there is only one source buffer, then it will always be active and audio will\n// be disabled based on the codec of the source buffer\nif(_this.sourceBuffers.length===1){var sourceBuffer=_this.sourceBuffers[0];sourceBuffer.appendAudioInitSegment_=true;sourceBuffer.audioDisabled_=!sourceBuffer.audioCodec_;_this.activeSourceBuffers_.push(sourceBuffer);return;}// There are 2 source buffers, a combined (possibly video only) source buffer and\n// and an audio only source buffer.\n// By default, the audio in the combined virtual source buffer is enabled\n// and the audio-only source buffer (if it exists) is disabled.\nvar disableCombined=false;var disableAudioOnly=true;// TODO: maybe we can store the sourcebuffers on the track objects?\n// safari may do something like this\nfor(var i=0;i<_this.player_.audioTracks().length;i++){var track=_this.player_.audioTracks()[i];if(track.enabled&&track.kind!=='main'){// The enabled track is an alternate audio track so disable the audio in\n// the combined source buffer and enable the audio-only source buffer.\ndisableCombined=true;disableAudioOnly=false;break;}}_this.sourceBuffers.forEach(function(sourceBuffer,index){/* eslinst-disable */ // TODO once codecs are required, we can switch to using the codecs to determine\n// what stream is the video stream, rather than relying on videoTracks\n/* eslinst-enable */sourceBuffer.appendAudioInitSegment_=true;if(sourceBuffer.videoCodec_&&sourceBuffer.audioCodec_){// combined\nsourceBuffer.audioDisabled_=disableCombined;}else if(sourceBuffer.videoCodec_&&!sourceBuffer.audioCodec_){// If the \"combined\" source buffer is video only, then we do not want\n// disable the audio-only source buffer (this is mostly for demuxed\n// audio and video hls)\nsourceBuffer.audioDisabled_=true;disableAudioOnly=false;}else if(!sourceBuffer.videoCodec_&&sourceBuffer.audioCodec_){// audio only\n// In the case of audio only with alternate audio and disableAudioOnly is true\n// this means we want to disable the audio on the alternate audio sourcebuffer\n// but not the main \"combined\" source buffer. The \"combined\" source buffer is\n// always at index 0, so this ensures audio won't be disabled in both source\n// buffers.\nsourceBuffer.audioDisabled_=index?disableAudioOnly:!disableAudioOnly;if(sourceBuffer.audioDisabled_){return;}}_this.activeSourceBuffers_.push(sourceBuffer);});};_this.onPlayerMediachange_=function(){_this.sourceBuffers.forEach(function(sourceBuffer){sourceBuffer.appendAudioInitSegment_=true;});};_this.onHlsReset_=function(){_this.sourceBuffers.forEach(function(sourceBuffer){if(sourceBuffer.transmuxer_){sourceBuffer.transmuxer_.postMessage({action:'resetCaptions'});}});};_this.onHlsSegmentTimeMapping_=function(event){_this.sourceBuffers.forEach(function(buffer){return buffer.timeMapping_=event.mapping;});};// Re-emit MediaSource events on the polyfill\n['sourceopen','sourceclose','sourceended'].forEach(function(eventName){this.nativeMediaSource_.addEventListener(eventName,this.trigger.bind(this));},_this);// capture the associated player when the MediaSource is\n// successfully attached\n_this.on('sourceopen',function(event){// Get the player this MediaSource is attached to\nvar video=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.querySelector('[src=\"'+_this.url_+'\"]');if(!video){return;}_this.player_=videojs$1(video.parentNode);if(!_this.player_){return;}// hls-reset is fired by videojs.Hls on to the tech after the main SegmentLoader\n// resets its state and flushes the buffer\n_this.player_.tech_.on('hls-reset',_this.onHlsReset_);// hls-segment-time-mapping is fired by videojs.Hls on to the tech after the main\n// SegmentLoader inspects an MTS segment and has an accurate stream to display\n// time mapping\n_this.player_.tech_.on('hls-segment-time-mapping',_this.onHlsSegmentTimeMapping_);if(_this.player_.audioTracks&&_this.player_.audioTracks()){_this.player_.audioTracks().on('change',_this.updateActiveSourceBuffers_);_this.player_.audioTracks().on('addtrack',_this.updateActiveSourceBuffers_);_this.player_.audioTracks().on('removetrack',_this.updateActiveSourceBuffers_);}_this.player_.on('mediachange',_this.onPlayerMediachange_);});_this.on('sourceended',function(event){var duration=durationOfVideo(_this.duration);for(var i=0;i<_this.sourceBuffers.length;i++){var sourcebuffer=_this.sourceBuffers[i];var cues=sourcebuffer.metadataTrack_&&sourcebuffer.metadataTrack_.cues;if(cues&&cues.length){cues[cues.length-1].endTime=duration;}}});// explicitly terminate any WebWorkers that were created\n// by SourceHandlers\n_this.on('sourceclose',function(event){this.sourceBuffers.forEach(function(sourceBuffer){if(sourceBuffer.transmuxer_){sourceBuffer.transmuxer_.terminate();}});this.sourceBuffers.length=0;if(!this.player_){return;}if(this.player_.audioTracks&&this.player_.audioTracks()){this.player_.audioTracks().off('change',this.updateActiveSourceBuffers_);this.player_.audioTracks().off('addtrack',this.updateActiveSourceBuffers_);this.player_.audioTracks().off('removetrack',this.updateActiveSourceBuffers_);}// We can only change this if the player hasn't been disposed of yet\n// because `off` eventually tries to use the el_ property. If it has\n// been disposed of, then don't worry about it because there are no\n// event handlers left to unbind anyway\nif(this.player_.el_){this.player_.off('mediachange',this.onPlayerMediachange_);}if(this.player_.tech_&&this.player_.tech_.el_){this.player_.tech_.off('hls-reset',this.onHlsReset_);this.player_.tech_.off('hls-segment-time-mapping',this.onHlsSegmentTimeMapping_);}});return _this;}/**\n * Add a range that that can now be seeked to.\n *\n * @param {Double} start where to start the addition\n * @param {Double} end where to end the addition\n * @private\n */createClass(HtmlMediaSource,[{key:'addSeekableRange_',value:function addSeekableRange_(start,end){var error=void 0;if(this.duration!==Infinity){error=new Error('MediaSource.addSeekableRange() can only be invoked '+'when the duration is Infinity');error.name='InvalidStateError';error.code=11;throw error;}if(end>this.nativeMediaSource_.duration||isNaN(this.nativeMediaSource_.duration)){this.nativeMediaSource_.duration=end;}}/**\n * Add a source buffer to the media source.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer\n * @param {String} type the content-type of the content\n * @return {Object} the created source buffer\n */},{key:'addSourceBuffer',value:function addSourceBuffer(type){var buffer=void 0;var parsedType=parseContentType(type);// Create a VirtualSourceBuffer to transmux MPEG-2 transport\n// stream segments into fragmented MP4s\nif(/^(video|audio)\\/mp2t$/i.test(parsedType.type)){var codecs=[];if(parsedType.parameters&&parsedType.parameters.codecs){codecs=parsedType.parameters.codecs.split(',');codecs=translateLegacyCodecs(codecs);codecs=codecs.filter(function(codec){return isAudioCodec(codec)||isVideoCodec(codec);});}if(codecs.length===0){codecs=['avc1.4d400d','mp4a.40.2'];}buffer=new VirtualSourceBuffer(this,codecs);if(this.sourceBuffers.length!==0){// If another VirtualSourceBuffer already exists, then we are creating a\n// SourceBuffer for an alternate audio track and therefore we know that\n// the source has both an audio and video track.\n// That means we should trigger the manual creation of the real\n// SourceBuffers instead of waiting for the transmuxer to return data\nthis.sourceBuffers[0].createRealSourceBuffers_();buffer.createRealSourceBuffers_();// Automatically disable the audio on the first source buffer if\n// a second source buffer is ever created\nthis.sourceBuffers[0].audioDisabled_=true;}}else{// delegate to the native implementation\nbuffer=this.nativeMediaSource_.addSourceBuffer(type);}this.sourceBuffers.push(buffer);return buffer;}}]);return HtmlMediaSource;}(videojs$1.EventTarget);/**\n * @file videojs-contrib-media-sources.js\n */var urlCount=0;// ------------\n// Media Source\n// ------------\n// store references to the media sources so they can be connected\n// to a video element (a swf object)\n// TODO: can we store this somewhere local to this module?\nvideojs$1.mediaSources={};/**\n * Provide a method for a swf object to notify JS that a\n * media source is now open.\n *\n * @param {String} msObjectURL string referencing the MSE Object URL\n * @param {String} swfId the swf id\n */var open=function open(msObjectURL,swfId){var mediaSource=videojs$1.mediaSources[msObjectURL];if(mediaSource){mediaSource.trigger({type:'sourceopen',swfId:swfId});}else{throw new Error('Media Source not found (Video.js)');}};/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {Boolean} if native media sources are supported\n */var supportsNativeMediaSources=function supportsNativeMediaSources(){return!!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource&&!!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource.isTypeSupported&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource.isTypeSupported('video/mp4;codecs=\"avc1.4d400d,mp4a.40.2\"');};/**\n * An emulation of the MediaSource API so that we can support\n * native and non-native functionality. returns an instance of\n * HtmlMediaSource.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/MediaSource\n */var MediaSource=function MediaSource(){this.MediaSource={open:open,supportsNativeMediaSources:supportsNativeMediaSources};if(supportsNativeMediaSources()){return new HtmlMediaSource();}throw new Error('Cannot use create a virtual MediaSource for this video');};MediaSource.open=open;MediaSource.supportsNativeMediaSources=supportsNativeMediaSources;/**\n * A wrapper around the native URL for our MSE object\n * implementation, this object is exposed under videojs.URL\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/URL\n */var URL$1={/**\n * A wrapper around the native createObjectURL for our objects.\n * This function maps a native or emulated mediaSource to a blob\n * url so that it can be loaded into video.js\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n * @param {MediaSource} object the object to create a blob url to\n */createObjectURL:function createObjectURL(object){var objectUrlPrefix='blob:vjs-media-source/';var url=void 0;// use the native MediaSource to generate an object URL\nif(object instanceof HtmlMediaSource){url=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.URL.createObjectURL(object.nativeMediaSource_);object.url_=url;return url;}// if the object isn't an emulated MediaSource, delegate to the\n// native implementation\nif(!(object instanceof HtmlMediaSource)){url=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.URL.createObjectURL(object);object.url_=url;return url;}// build a URL that can be used to map back to the emulated\n// MediaSource\nurl=objectUrlPrefix+urlCount;urlCount++;// setup the mapping back to object\nvideojs$1.mediaSources[url]=object;return url;}};videojs$1.MediaSource=MediaSource;videojs$1.URL=URL$1;var EventTarget$1$1=videojs$1.EventTarget,mergeOptions$2=videojs$1.mergeOptions;/**\n * Returns a new master manifest that is the result of merging an updated master manifest\n * into the original version.\n *\n * @param {Object} oldMaster\n * The old parsed mpd object\n * @param {Object} newMaster\n * The updated parsed mpd object\n * @return {Object}\n * A new object representing the original master manifest with the updated media\n * playlists merged in\n */var updateMaster$1=function updateMaster$$1(oldMaster,newMaster){var noChanges=void 0;var update=mergeOptions$2(oldMaster,{// These are top level properties that can be updated\nduration:newMaster.duration,minimumUpdatePeriod:newMaster.minimumUpdatePeriod});// First update the playlists in playlist list\nfor(var i=0;i<newMaster.playlists.length;i++){var playlistUpdate=updateMaster(update,newMaster.playlists[i]);if(playlistUpdate){update=playlistUpdate;}else{noChanges=true;}}// Then update media group playlists\nforEachMediaGroup(newMaster,function(properties,type,group,label){if(properties.playlists&&properties.playlists.length){var uri=properties.playlists[0].uri;var _playlistUpdate=updateMaster(update,properties.playlists[0]);if(_playlistUpdate){update=_playlistUpdate;// update the playlist reference within media groups\nupdate.mediaGroups[type][group][label].playlists[0]=update.playlists[uri];noChanges=false;}}});if(noChanges){return null;}return update;};var generateSidxKey=function generateSidxKey(sidxInfo){// should be non-inclusive\nvar sidxByteRangeEnd=sidxInfo.byterange.offset+sidxInfo.byterange.length-1;return sidxInfo.uri+'-'+sidxInfo.byterange.offset+'-'+sidxByteRangeEnd;};// SIDX should be equivalent if the URI and byteranges of the SIDX match.\n// If the SIDXs have maps, the two maps should match,\n// both `a` and `b` missing SIDXs is considered matching.\n// If `a` or `b` but not both have a map, they aren't matching.\nvar equivalentSidx=function equivalentSidx(a,b){var neitherMap=Boolean(!a.map&&!b.map);var equivalentMap=neitherMap||Boolean(a.map&&b.map&&a.map.byterange.offset===b.map.byterange.offset&&a.map.byterange.length===b.map.byterange.length);return equivalentMap&&a.uri===b.uri&&a.byterange.offset===b.byterange.offset&&a.byterange.length===b.byterange.length;};// exported for testing\nvar compareSidxEntry=function compareSidxEntry(playlists,oldSidxMapping){var newSidxMapping={};for(var uri in playlists){var playlist=playlists[uri];var currentSidxInfo=playlist.sidx;if(currentSidxInfo){var key=generateSidxKey(currentSidxInfo);if(!oldSidxMapping[key]){break;}var savedSidxInfo=oldSidxMapping[key].sidxInfo;if(equivalentSidx(savedSidxInfo,currentSidxInfo)){newSidxMapping[key]=oldSidxMapping[key];}}}return newSidxMapping;};/**\n * A function that filters out changed items as they need to be requested separately.\n *\n * The method is exported for testing\n *\n * @param {Object} masterXml the mpd XML\n * @param {string} srcUrl the mpd url\n * @param {Date} clientOffset a time difference between server and client (passed through and not used)\n * @param {Object} oldSidxMapping the SIDX to compare against\n */var filterChangedSidxMappings=function filterChangedSidxMappings(masterXml,srcUrl,clientOffset,oldSidxMapping){// Don't pass current sidx mapping\nvar master=Object(mpd_parser__WEBPACK_IMPORTED_MODULE_8__[\"parse\"])(masterXml,{manifestUri:srcUrl,clientOffset:clientOffset});var videoSidx=compareSidxEntry(master.playlists,oldSidxMapping);var mediaGroupSidx=videoSidx;forEachMediaGroup(master,function(properties,mediaType,groupKey,labelKey){if(properties.playlists&&properties.playlists.length){var playlists=properties.playlists;mediaGroupSidx=mergeOptions$2(mediaGroupSidx,compareSidxEntry(playlists,oldSidxMapping));}});return mediaGroupSidx;};// exported for testing\nvar requestSidx_=function requestSidx_(sidxRange,playlist,xhr,options,finishProcessingFn){var sidxInfo={// resolve the segment URL relative to the playlist\nuri:resolveManifestRedirect(options.handleManifestRedirects,sidxRange.resolvedUri),// resolvedUri: sidxRange.resolvedUri,\nbyterange:sidxRange.byterange,// the segment's playlist\nplaylist:playlist};var sidxRequestOptions=videojs$1.mergeOptions(sidxInfo,{responseType:'arraybuffer',headers:segmentXhrHeaders(sidxInfo)});return xhr(sidxRequestOptions,finishProcessingFn);};var DashPlaylistLoader=function(_EventTarget){inherits(DashPlaylistLoader,_EventTarget);// DashPlaylistLoader must accept either a src url or a playlist because subsequent\n// playlist loader setups from media groups will expect to be able to pass a playlist\n// (since there aren't external URLs to media playlists with DASH)\nfunction DashPlaylistLoader(srcUrlOrPlaylist,hls){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var masterPlaylistLoader=arguments[3];classCallCheck(this,DashPlaylistLoader);var _this=possibleConstructorReturn(this,(DashPlaylistLoader.__proto__||Object.getPrototypeOf(DashPlaylistLoader)).call(this));var _options$withCredenti=options.withCredentials,withCredentials=_options$withCredenti===undefined?false:_options$withCredenti,_options$handleManife=options.handleManifestRedirects,handleManifestRedirects=_options$handleManife===undefined?false:_options$handleManife;_this.hls_=hls;_this.withCredentials=withCredentials;_this.handleManifestRedirects=handleManifestRedirects;if(!srcUrlOrPlaylist){throw new Error('A non-empty playlist URL or playlist is required');}// event naming?\n_this.on('minimumUpdatePeriod',function(){_this.refreshXml_();});// live playlist staleness timeout\n_this.on('mediaupdatetimeout',function(){_this.refreshMedia_(_this.media().uri);});_this.state='HAVE_NOTHING';_this.loadedPlaylists_={};// initialize the loader state\n// The masterPlaylistLoader will be created with a string\nif(typeof srcUrlOrPlaylist==='string'){_this.srcUrl=srcUrlOrPlaylist;// TODO: reset sidxMapping between period changes\n// once multi-period is refactored\n_this.sidxMapping_={};return possibleConstructorReturn(_this);}_this.setupChildLoader(masterPlaylistLoader,srcUrlOrPlaylist);return _this;}createClass(DashPlaylistLoader,[{key:'setupChildLoader',value:function setupChildLoader(masterPlaylistLoader,playlist){this.masterPlaylistLoader_=masterPlaylistLoader;this.childPlaylist_=playlist;}},{key:'dispose',value:function dispose(){this.stopRequest();this.loadedPlaylists_={};global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.minimumUpdatePeriodTimeout_);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaRequest_);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);}},{key:'hasPendingRequest',value:function hasPendingRequest(){return this.request||this.mediaRequest_;}},{key:'stopRequest',value:function stopRequest(){if(this.request){var oldRequest=this.request;this.request=null;oldRequest.onreadystatechange=null;oldRequest.abort();}}},{key:'sidxRequestFinished_',value:function sidxRequestFinished_(playlist,master,startingState,doneFn){var _this2=this;return function(err,request){// disposed\nif(!_this2.request){return;}// pending request is cleared\n_this2.request=null;if(err){_this2.error={status:request.status,message:'DASH playlist request error at URL: '+playlist.uri,response:request.response,// MEDIA_ERR_NETWORK\ncode:2};if(startingState){_this2.state=startingState;}_this2.trigger('error');return doneFn(master,null);}var bytes=new Uint8Array(request.response);var sidx=mux_js_lib_tools_mp4_inspector__WEBPACK_IMPORTED_MODULE_9___default.a.parseSidx(bytes.subarray(8));return doneFn(master,sidx);};}},{key:'media',value:function media(playlist){var _this3=this;// getter\nif(!playlist){return this.media_;}// setter\nif(this.state==='HAVE_NOTHING'){throw new Error('Cannot switch media playlist from '+this.state);}var startingState=this.state;// find the playlist object if the target playlist has been specified by URI\nif(typeof playlist==='string'){if(!this.master.playlists[playlist]){throw new Error('Unknown playlist URI: '+playlist);}playlist=this.master.playlists[playlist];}var mediaChange=!this.media_||playlist.uri!==this.media_.uri;// switch to previously loaded playlists immediately\nif(mediaChange&&this.loadedPlaylists_[playlist.uri]&&this.loadedPlaylists_[playlist.uri].endList){this.state='HAVE_METADATA';this.media_=playlist;// trigger media change if the active media has been updated\nif(mediaChange){this.trigger('mediachanging');this.trigger('mediachange');}return;}// switching to the active playlist is a no-op\nif(!mediaChange){return;}// switching from an already loaded playlist\nif(this.media_){this.trigger('mediachanging');}if(!playlist.sidx){// Continue asynchronously if there is no sidx\n// wait one tick to allow haveMaster to run first on a child loader\nthis.mediaRequest_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.haveMetadata.bind(this,{startingState:startingState,playlist:playlist}),0);// exit early and don't do sidx work\nreturn;}// we have sidx mappings\nvar oldMaster=void 0;var sidxMapping=void 0;// sidxMapping is used when parsing the masterXml, so store\n// it on the masterPlaylistLoader\nif(this.masterPlaylistLoader_){oldMaster=this.masterPlaylistLoader_.master;sidxMapping=this.masterPlaylistLoader_.sidxMapping_;}else{oldMaster=this.master;sidxMapping=this.sidxMapping_;}var sidxKey=generateSidxKey(playlist.sidx);sidxMapping[sidxKey]={sidxInfo:playlist.sidx};this.request=requestSidx_(playlist.sidx,playlist,this.hls_.xhr,{handleManifestRedirects:this.handleManifestRedirects},this.sidxRequestFinished_(playlist,oldMaster,startingState,function(newMaster,sidx){if(!newMaster||!sidx){throw new Error('failed to request sidx');}// update loader's sidxMapping with parsed sidx box\nsidxMapping[sidxKey].sidx=sidx;// everything is ready just continue to haveMetadata\n_this3.haveMetadata({startingState:startingState,playlist:newMaster.playlists[playlist.uri]});}));}},{key:'haveMetadata',value:function haveMetadata(_ref){var startingState=_ref.startingState,playlist=_ref.playlist;this.state='HAVE_METADATA';this.loadedPlaylists_[playlist.uri]=playlist;this.mediaRequest_=null;// This will trigger loadedplaylist\nthis.refreshMedia_(playlist.uri);// fire loadedmetadata the first time a media playlist is loaded\n// to resolve setup of media groups\nif(startingState==='HAVE_MASTER'){this.trigger('loadedmetadata');}else{// trigger media change if the active media has been updated\nthis.trigger('mediachange');}}},{key:'pause',value:function pause(){this.stopRequest();global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.minimumUpdatePeriodTimeout_);if(this.state==='HAVE_NOTHING'){// If we pause the loader before any data has been retrieved, its as if we never\n// started, so reset to an unstarted state.\nthis.started=false;}}},{key:'load',value:function load(isFinalRendition){var _this4=this;global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.mediaUpdateTimeout);global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.minimumUpdatePeriodTimeout_);var media=this.media();if(isFinalRendition){var delay=media?media.targetDuration/2*1000:5*1000;this.mediaUpdateTimeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){return _this4.load();},delay);return;}// because the playlists are internal to the manifest, load should either load the\n// main manifest, or do nothing but trigger an event\nif(!this.started){this.start();return;}this.trigger('loadedplaylist');}/**\n * Parses the master xml string and updates playlist uri references\n *\n * @return {Object}\n * The parsed mpd manifest object\n */},{key:'parseMasterXml',value:function parseMasterXml(){var master=Object(mpd_parser__WEBPACK_IMPORTED_MODULE_8__[\"parse\"])(this.masterXml_,{manifestUri:this.srcUrl,clientOffset:this.clientOffset_,sidxMapping:this.sidxMapping_});master.uri=this.srcUrl;// Set up phony URIs for the playlists since we won't have external URIs for DASH\n// but reference playlists by their URI throughout the project\n// TODO: Should we create the dummy uris in mpd-parser as well (leaning towards yes).\nfor(var i=0;i<master.playlists.length;i++){var phonyUri='placeholder-uri-'+i;master.playlists[i].uri=phonyUri;// set up by URI references\nmaster.playlists[phonyUri]=master.playlists[i];}// set up phony URIs for the media group playlists since we won't have external\n// URIs for DASH but reference playlists by their URI throughout the project\nforEachMediaGroup(master,function(properties,mediaType,groupKey,labelKey){if(properties.playlists&&properties.playlists.length){var _phonyUri='placeholder-uri-'+mediaType+'-'+groupKey+'-'+labelKey;properties.playlists[0].uri=_phonyUri;// setup URI references\nmaster.playlists[_phonyUri]=properties.playlists[0];}});setupMediaPlaylists(master);resolveMediaGroupUris(master);return master;}},{key:'start',value:function start(){var _this5=this;this.started=true;// We don't need to request the master manifest again\n// Call this asynchronously to match the xhr request behavior below\nif(this.masterPlaylistLoader_){this.mediaRequest_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.haveMaster_.bind(this),0);return;}// request the specified URL\nthis.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(error,req){// disposed\nif(!_this5.request){return;}// clear the loader's request reference\n_this5.request=null;if(error){_this5.error={status:req.status,message:'DASH playlist request error at URL: '+_this5.srcUrl,responseText:req.responseText,// MEDIA_ERR_NETWORK\ncode:2};if(_this5.state==='HAVE_NOTHING'){_this5.started=false;}return _this5.trigger('error');}_this5.masterXml_=req.responseText;if(req.responseHeaders&&req.responseHeaders.date){_this5.masterLoaded_=Date.parse(req.responseHeaders.date);}else{_this5.masterLoaded_=Date.now();}_this5.srcUrl=resolveManifestRedirect(_this5.handleManifestRedirects,_this5.srcUrl,req);_this5.syncClientServerClock_(_this5.onClientServerClockSync_.bind(_this5));});}/**\n * Parses the master xml for UTCTiming node to sync the client clock to the server\n * clock. If the UTCTiming node requires a HEAD or GET request, that request is made.\n *\n * @param {Function} done\n * Function to call when clock sync has completed\n */},{key:'syncClientServerClock_',value:function syncClientServerClock_(done){var _this6=this;var utcTiming=Object(mpd_parser__WEBPACK_IMPORTED_MODULE_8__[\"parseUTCTiming\"])(this.masterXml_);// No UTCTiming element found in the mpd. Use Date header from mpd request as the\n// server clock\nif(utcTiming===null){this.clientOffset_=this.masterLoaded_-Date.now();return done();}if(utcTiming.method==='DIRECT'){this.clientOffset_=utcTiming.value-Date.now();return done();}this.request=this.hls_.xhr({uri:resolveUrl(this.srcUrl,utcTiming.value),method:utcTiming.method,withCredentials:this.withCredentials},function(error,req){// disposed\nif(!_this6.request){return;}if(error){// sync request failed, fall back to using date header from mpd\n// TODO: log warning\n_this6.clientOffset_=_this6.masterLoaded_-Date.now();return done();}var serverTime=void 0;if(utcTiming.method==='HEAD'){if(!req.responseHeaders||!req.responseHeaders.date){// expected date header not preset, fall back to using date header from mpd\n// TODO: log warning\nserverTime=_this6.masterLoaded_;}else{serverTime=Date.parse(req.responseHeaders.date);}}else{serverTime=Date.parse(req.responseText);}_this6.clientOffset_=serverTime-Date.now();done();});}},{key:'haveMaster_',value:function haveMaster_(){this.state='HAVE_MASTER';// clear media request\nthis.mediaRequest_=null;if(!this.masterPlaylistLoader_){this.master=this.parseMasterXml();// We have the master playlist at this point, so\n// trigger this to allow MasterPlaylistController\n// to make an initial playlist selection\nthis.trigger('loadedplaylist');}else if(!this.media_){// no media playlist was specifically selected so select\n// the one the child playlist loader was created with\nthis.media(this.childPlaylist_);}}/**\n * Handler for after client/server clock synchronization has happened. Sets up\n * xml refresh timer if specificed by the manifest.\n */},{key:'onClientServerClockSync_',value:function onClientServerClockSync_(){var _this7=this;this.haveMaster_();if(!this.hasPendingRequest()&&!this.media_){this.media(this.master.playlists[0]);}// TODO: minimumUpdatePeriod can have a value of 0. Currently the manifest will not\n// be refreshed when this is the case. The inter-op guide says that when the\n// minimumUpdatePeriod is 0, the manifest should outline all currently available\n// segments, but future segments may require an update. I think a good solution\n// would be to update the manifest at the same rate that the media playlists\n// are \"refreshed\", i.e. every targetDuration.\nif(this.master&&this.master.minimumUpdatePeriod){this.minimumUpdatePeriodTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){_this7.trigger('minimumUpdatePeriod');},this.master.minimumUpdatePeriod);}}/**\n * Sends request to refresh the master xml and updates the parsed master manifest\n * TODO: Does the client offset need to be recalculated when the xml is refreshed?\n */},{key:'refreshXml_',value:function refreshXml_(){var _this8=this;// The srcUrl here *may* need to pass through handleManifestsRedirects when\n// sidx is implemented\nthis.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(error,req){// disposed\nif(!_this8.request){return;}// clear the loader's request reference\n_this8.request=null;if(error){_this8.error={status:req.status,message:'DASH playlist request error at URL: '+_this8.srcUrl,responseText:req.responseText,// MEDIA_ERR_NETWORK\ncode:2};if(_this8.state==='HAVE_NOTHING'){_this8.started=false;}return _this8.trigger('error');}_this8.masterXml_=req.responseText;// This will filter out updated sidx info from the mapping\n_this8.sidxMapping_=filterChangedSidxMappings(_this8.masterXml_,_this8.srcUrl,_this8.clientOffset_,_this8.sidxMapping_);var master=_this8.parseMasterXml();var updatedMaster=updateMaster$1(_this8.master,master);var currentSidxInfo=_this8.media().sidx;if(updatedMaster){if(currentSidxInfo){var sidxKey=generateSidxKey(currentSidxInfo);// the sidx was updated, so the previous mapping was removed\nif(!_this8.sidxMapping_[sidxKey]){var playlist=_this8.media();_this8.request=requestSidx_(playlist.sidx,playlist,_this8.hls_.xhr,{handleManifestRedirects:_this8.handleManifestRedirects},_this8.sidxRequestFinished_(playlist,master,_this8.state,function(newMaster,sidx){if(!newMaster||!sidx){throw new Error('failed to request sidx on minimumUpdatePeriod');}// update loader's sidxMapping with parsed sidx box\n_this8.sidxMapping_[sidxKey].sidx=sidx;_this8.minimumUpdatePeriodTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){_this8.trigger('minimumUpdatePeriod');},_this8.master.minimumUpdatePeriod);// TODO: do we need to reload the current playlist?\n_this8.refreshMedia_(_this8.media().uri);return;}));}}else{_this8.master=updatedMaster;}}_this8.minimumUpdatePeriodTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){_this8.trigger('minimumUpdatePeriod');},_this8.master.minimumUpdatePeriod);});}/**\n * Refreshes the media playlist by re-parsing the master xml and updating playlist\n * references. If this is an alternate loader, the updated parsed manifest is retrieved\n * from the master loader.\n */},{key:'refreshMedia_',value:function refreshMedia_(mediaUri){var _this9=this;if(!mediaUri){throw new Error('refreshMedia_ must take a media uri');}var oldMaster=void 0;var newMaster=void 0;if(this.masterPlaylistLoader_){oldMaster=this.masterPlaylistLoader_.master;newMaster=this.masterPlaylistLoader_.parseMasterXml();}else{oldMaster=this.master;newMaster=this.parseMasterXml();}var updatedMaster=updateMaster$1(oldMaster,newMaster);if(updatedMaster){if(this.masterPlaylistLoader_){this.masterPlaylistLoader_.master=updatedMaster;}else{this.master=updatedMaster;}this.media_=updatedMaster.playlists[mediaUri];}else{this.media_=newMaster.playlists[mediaUri];this.trigger('playlistunchanged');}if(!this.media().endList){this.mediaUpdateTimeout=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(function(){_this9.trigger('mediaupdatetimeout');},refreshDelay(this.media(),!!updatedMaster));}this.trigger('loadedplaylist');}}]);return DashPlaylistLoader;}(EventTarget$1$1);var logger=function logger(source){if(videojs$1.log.debug){return videojs$1.log.debug.bind(videojs$1,'VHS:',source+' >');}return function(){};};function noop(){}/**\n * @file source-updater.js\n */ /**\n * A queue of callbacks to be serialized and applied when a\n * MediaSource and its associated SourceBuffers are not in the\n * updating state. It is used by the segment loader to update the\n * underlying SourceBuffers when new data is loaded, for instance.\n *\n * @class SourceUpdater\n * @param {MediaSource} mediaSource the MediaSource to create the\n * SourceBuffer from\n * @param {String} mimeType the desired MIME type of the underlying\n * SourceBuffer\n * @param {Object} sourceBufferEmitter an event emitter that fires when a source buffer is\n * added to the media source\n */var SourceUpdater=function(){function SourceUpdater(mediaSource,mimeType,type,sourceBufferEmitter){classCallCheck(this,SourceUpdater);this.callbacks_=[];this.pendingCallback_=null;this.timestampOffset_=0;this.mediaSource=mediaSource;this.processedAppend_=false;this.type_=type;this.mimeType_=mimeType;this.logger_=logger('SourceUpdater['+type+']['+mimeType+']');if(mediaSource.readyState==='closed'){mediaSource.addEventListener('sourceopen',this.createSourceBuffer_.bind(this,mimeType,sourceBufferEmitter));}else{this.createSourceBuffer_(mimeType,sourceBufferEmitter);}}createClass(SourceUpdater,[{key:'createSourceBuffer_',value:function createSourceBuffer_(mimeType,sourceBufferEmitter){var _this=this;this.sourceBuffer_=this.mediaSource.addSourceBuffer(mimeType);this.logger_('created SourceBuffer');if(sourceBufferEmitter){sourceBufferEmitter.trigger('sourcebufferadded');if(this.mediaSource.sourceBuffers.length<2){// There's another source buffer we must wait for before we can start updating\n// our own (or else we can get into a bad state, i.e., appending video/audio data\n// before the other video/audio source buffer is available and leading to a video\n// or audio only buffer).\nsourceBufferEmitter.on('sourcebufferadded',function(){_this.start_();});return;}}this.start_();}},{key:'start_',value:function start_(){var _this2=this;this.started_=true;// run completion handlers and process callbacks as updateend\n// events fire\nthis.onUpdateendCallback_=function(){var pendingCallback=_this2.pendingCallback_;_this2.pendingCallback_=null;_this2.sourceBuffer_.removing=false;_this2.logger_('buffered ['+printableRange(_this2.buffered())+']');if(pendingCallback){pendingCallback();}_this2.runCallback_();};this.sourceBuffer_.addEventListener('updateend',this.onUpdateendCallback_);this.runCallback_();}/**\n * Aborts the current segment and resets the segment parser.\n *\n * @param {Function} done function to call when done\n * @see http://w3c.github.io/media-source/#widl-SourceBuffer-abort-void\n */},{key:'abort',value:function abort(done){var _this3=this;if(this.processedAppend_){this.queueCallback_(function(){_this3.sourceBuffer_.abort();},done);}}/**\n * Queue an update to append an ArrayBuffer.\n *\n * @param {ArrayBuffer} bytes\n * @param {Function} done the function to call when done\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data\n */},{key:'appendBuffer',value:function appendBuffer(config,done){var _this4=this;this.processedAppend_=true;this.queueCallback_(function(){if(config.videoSegmentTimingInfoCallback){_this4.sourceBuffer_.addEventListener('videoSegmentTimingInfo',config.videoSegmentTimingInfoCallback);}_this4.sourceBuffer_.appendBuffer(config.bytes);},function(){if(config.videoSegmentTimingInfoCallback){_this4.sourceBuffer_.removeEventListener('videoSegmentTimingInfo',config.videoSegmentTimingInfoCallback);}done();});}/**\n * Indicates what TimeRanges are buffered in the managed SourceBuffer.\n *\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-buffered\n */},{key:'buffered',value:function buffered(){if(!this.sourceBuffer_){return videojs$1.createTimeRanges();}return this.sourceBuffer_.buffered;}/**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {Number} start where to start the removal\n * @param {Number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */},{key:'remove',value:function remove(start,end){var _this5=this;var done=arguments.length>2&&arguments[2]!==undefined?arguments[2]:noop;if(this.processedAppend_){this.queueCallback_(function(){_this5.logger_('remove ['+start+' => '+end+']');_this5.sourceBuffer_.removing=true;_this5.sourceBuffer_.remove(start,end);},done);}}/**\n * Whether the underlying sourceBuffer is updating or not\n *\n * @return {Boolean} the updating status of the SourceBuffer\n */},{key:'updating',value:function updating(){// we are updating if the sourcebuffer is updating or\nreturn!this.sourceBuffer_||this.sourceBuffer_.updating||// if we have a pending callback that is not our internal noop\n!!this.pendingCallback_&&this.pendingCallback_!==noop;}/**\n * Set/get the timestampoffset on the SourceBuffer\n *\n * @return {Number} the timestamp offset\n */},{key:'timestampOffset',value:function timestampOffset(offset){var _this6=this;if(typeof offset!=='undefined'){this.queueCallback_(function(){_this6.sourceBuffer_.timestampOffset=offset;_this6.runCallback_();});this.timestampOffset_=offset;}return this.timestampOffset_;}/**\n * Queue a callback to run\n */},{key:'queueCallback_',value:function queueCallback_(callback,done){this.callbacks_.push([callback.bind(this),done]);this.runCallback_();}/**\n * Run a queued callback\n */},{key:'runCallback_',value:function runCallback_(){var callbacks=void 0;if(!this.updating()&&this.callbacks_.length&&this.started_){callbacks=this.callbacks_.shift();this.pendingCallback_=callbacks[1];callbacks[0]();}}/**\n * dispose of the source updater and the underlying sourceBuffer\n */},{key:'dispose',value:function dispose(){var _this7=this;var disposeFn=function disposeFn(){if(_this7.sourceBuffer_&&_this7.mediaSource.readyState==='open'){_this7.sourceBuffer_.abort();}_this7.sourceBuffer_.removeEventListener('updateend',disposeFn);};this.sourceBuffer_.removeEventListener('updateend',this.onUpdateendCallback_);if(this.sourceBuffer_.removing){this.sourceBuffer_.addEventListener('updateend',disposeFn);}else{disposeFn();}}}]);return SourceUpdater;}();var Config={GOAL_BUFFER_LENGTH:30,MAX_GOAL_BUFFER_LENGTH:60,GOAL_BUFFER_LENGTH_RATE:1,// 0.5 MB/s\nINITIAL_BANDWIDTH:4194304,// A fudge factor to apply to advertised playlist bitrates to account for\n// temporary flucations in client bandwidth\nBANDWIDTH_VARIANCE:1.2,// How much of the buffer must be filled before we consider upswitching\nBUFFER_LOW_WATER_LINE:0,MAX_BUFFER_LOW_WATER_LINE:30,BUFFER_LOW_WATER_LINE_RATE:1};var REQUEST_ERRORS={FAILURE:2,TIMEOUT:-101,ABORTED:-102};/**\n * Abort all requests\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n */var abortAll=function abortAll(activeXhrs){activeXhrs.forEach(function(xhr){xhr.abort();});};/**\n * Gather important bandwidth stats once a request has completed\n *\n * @param {Object} request - the XHR request from which to gather stats\n */var getRequestStats=function getRequestStats(request){return{bandwidth:request.bandwidth,bytesReceived:request.bytesReceived||0,roundTripTime:request.roundTripTime||0};};/**\n * If possible gather bandwidth stats as a request is in\n * progress\n *\n * @param {Event} progressEvent - an event object from an XHR's progress event\n */var getProgressStats=function getProgressStats(progressEvent){var request=progressEvent.target;var roundTripTime=Date.now()-request.requestTime;var stats={bandwidth:Infinity,bytesReceived:0,roundTripTime:roundTripTime||0};stats.bytesReceived=progressEvent.loaded;// This can result in Infinity if stats.roundTripTime is 0 but that is ok\n// because we should only use bandwidth stats on progress to determine when\n// abort a request early due to insufficient bandwidth\nstats.bandwidth=Math.floor(stats.bytesReceived/stats.roundTripTime*8*1000);return stats;};/**\n * Handle all error conditions in one place and return an object\n * with all the information\n *\n * @param {Error|null} error - if non-null signals an error occured with the XHR\n * @param {Object} request - the XHR request that possibly generated the error\n */var handleErrors=function handleErrors(error,request){if(request.timedout){return{status:request.status,message:'HLS request timed-out at URL: '+request.uri,code:REQUEST_ERRORS.TIMEOUT,xhr:request};}if(request.aborted){return{status:request.status,message:'HLS request aborted at URL: '+request.uri,code:REQUEST_ERRORS.ABORTED,xhr:request};}if(error){return{status:request.status,message:'HLS request errored at URL: '+request.uri,code:REQUEST_ERRORS.FAILURE,xhr:request};}return null;};/**\n * Handle responses for key data and convert the key data to the correct format\n * for the decryption step later\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */var handleKeyResponse=function handleKeyResponse(segment,finishProcessingFn){return function(error,request){var response=request.response;var errorObj=handleErrors(error,request);if(errorObj){return finishProcessingFn(errorObj,segment);}if(response.byteLength!==16){return finishProcessingFn({status:request.status,message:'Invalid HLS key at URL: '+request.uri,code:REQUEST_ERRORS.FAILURE,xhr:request},segment);}var view=new DataView(response);segment.key.bytes=new Uint32Array([view.getUint32(0),view.getUint32(4),view.getUint32(8),view.getUint32(12)]);return finishProcessingFn(null,segment);};};/**\n * Handle init-segment responses\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */var handleInitSegmentResponse=function handleInitSegmentResponse(segment,captionParser,finishProcessingFn){return function(error,request){var response=request.response;var errorObj=handleErrors(error,request);if(errorObj){return finishProcessingFn(errorObj,segment);}// stop processing if received empty content\nif(response.byteLength===0){return finishProcessingFn({status:request.status,message:'Empty HLS segment content at URL: '+request.uri,code:REQUEST_ERRORS.FAILURE,xhr:request},segment);}segment.map.bytes=new Uint8Array(request.response);// Initialize CaptionParser if it hasn't been yet\nif(captionParser&&!captionParser.isInitialized()){captionParser.init();}segment.map.timescales=mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10___default.a.timescale(segment.map.bytes);segment.map.videoTrackIds=mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10___default.a.videoTrackIds(segment.map.bytes);return finishProcessingFn(null,segment);};};/**\n * Response handler for segment-requests being sure to set the correct\n * property depending on whether the segment is encryped or not\n * Also records and keeps track of stats that are used for ABR purposes\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */var handleSegmentResponse=function handleSegmentResponse(segment,captionParser,finishProcessingFn){return function(error,request){var response=request.response;var errorObj=handleErrors(error,request);var parsed=void 0;if(errorObj){return finishProcessingFn(errorObj,segment);}// stop processing if received empty content\nif(response.byteLength===0){return finishProcessingFn({status:request.status,message:'Empty HLS segment content at URL: '+request.uri,code:REQUEST_ERRORS.FAILURE,xhr:request},segment);}segment.stats=getRequestStats(request);if(segment.key){segment.encryptedBytes=new Uint8Array(request.response);}else{segment.bytes=new Uint8Array(request.response);}// This is likely an FMP4 and has the init segment.\n// Run through the CaptionParser in case there are captions.\nif(captionParser&&segment.map&&segment.map.bytes){// Initialize CaptionParser if it hasn't been yet\nif(!captionParser.isInitialized()){captionParser.init();}parsed=captionParser.parse(segment.bytes,segment.map.videoTrackIds,segment.map.timescales);if(parsed&&parsed.captions){segment.captionStreams=parsed.captionStreams;segment.fmp4Captions=parsed.captions;}}return finishProcessingFn(null,segment);};};/**\n * Decrypt the segment via the decryption web worker\n *\n * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} doneFn - a callback that is executed after decryption has completed\n */var decryptSegment=function decryptSegment(decrypter,segment,doneFn){var decryptionHandler=function decryptionHandler(event){if(event.data.source===segment.requestId){decrypter.removeEventListener('message',decryptionHandler);var decrypted=event.data.decrypted;segment.bytes=new Uint8Array(decrypted.bytes,decrypted.byteOffset,decrypted.byteLength);return doneFn(null,segment);}};decrypter.addEventListener('message',decryptionHandler);var keyBytes=void 0;if(segment.key.bytes.slice){keyBytes=segment.key.bytes.slice();}else{keyBytes=new Uint32Array(Array.prototype.slice.call(segment.key.bytes));}// this is an encrypted segment\n// incrementally decrypt the segment\ndecrypter.postMessage(createTransferableMessage({source:segment.requestId,encrypted:segment.encryptedBytes,key:keyBytes,iv:segment.key.iv}),[segment.encryptedBytes.buffer,keyBytes.buffer]);};/**\n * This function waits for all XHRs to finish (with either success or failure)\n * before continueing processing via it's callback. The function gathers errors\n * from each request into a single errors array so that the error status for\n * each request can be examined later.\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines\n * @param {Function} doneFn - a callback that is executed after all resources have been\n * downloaded and any decryption completed\n */var waitForCompletion=function waitForCompletion(activeXhrs,decrypter,doneFn){var count=0;var didError=false;return function(error,segment){if(didError){return;}if(error){didError=true;// If there are errors, we have to abort any outstanding requests\nabortAll(activeXhrs);// Even though the requests above are aborted, and in theory we could wait until we\n// handle the aborted events from those requests, there are some cases where we may\n// never get an aborted event. For instance, if the network connection is lost and\n// there were two requests, the first may have triggered an error immediately, while\n// the second request remains unsent. In that case, the aborted algorithm will not\n// trigger an abort: see https://xhr.spec.whatwg.org/#the-abort()-method\n//\n// We also can't rely on the ready state of the XHR, since the request that\n// triggered the connection error may also show as a ready state of 0 (unsent).\n// Therefore, we have to finish this group of requests immediately after the first\n// seen error.\nreturn doneFn(error,segment);}count+=1;if(count===activeXhrs.length){// Keep track of when *all* of the requests have completed\nsegment.endOfAllRequests=Date.now();if(segment.encryptedBytes){return decryptSegment(decrypter,segment,doneFn);}// Otherwise, everything is ready just continue\nreturn doneFn(null,segment);}};};/**\n * Simple progress event callback handler that gathers some stats before\n * executing a provided callback with the `segment` object\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that is executed each time a progress event\n * is received\n * @param {Event} event - the progress event object from XMLHttpRequest\n */var handleProgress=function handleProgress(segment,progressFn){return function(event){segment.stats=videojs$1.mergeOptions(segment.stats,getProgressStats(event));// record the time that we receive the first byte of data\nif(!segment.stats.firstBytesReceivedAt&&segment.stats.bytesReceived){segment.stats.firstBytesReceivedAt=Date.now();}return progressFn(event,segment);};};/**\n * Load all resources and does any processing necessary for a media-segment\n *\n * Features:\n * decrypts the media-segment if it has a key uri and an iv\n * aborts *all* requests if *any* one request fails\n *\n * The segment object, at minimum, has the following format:\n * {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [key]: {\n * resolvedUri: String\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * iv: {\n * bytes: Uint32Array\n * }\n * },\n * [map]: {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [bytes]: Uint8Array\n * }\n * }\n * ...where [name] denotes optional properties\n *\n * @param {Function} xhr - an instance of the xhr wrapper in xhr.js\n * @param {Object} xhrOptions - the base options to provide to all xhr requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128\n * decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that receives progress events from the main\n * segment's xhr request\n * @param {Function} doneFn - a callback that is executed only once all requests have\n * succeeded or failed\n * @returns {Function} a function that, when invoked, immediately aborts all\n * outstanding requests\n */var mediaSegmentRequest=function mediaSegmentRequest(xhr,xhrOptions,decryptionWorker,captionParser,segment,progressFn,doneFn){var activeXhrs=[];var finishProcessingFn=waitForCompletion(activeXhrs,decryptionWorker,doneFn);// optionally, request the decryption key\nif(segment.key&&!segment.key.bytes){var keyRequestOptions=videojs$1.mergeOptions(xhrOptions,{uri:segment.key.resolvedUri,responseType:'arraybuffer'});var keyRequestCallback=handleKeyResponse(segment,finishProcessingFn);var keyXhr=xhr(keyRequestOptions,keyRequestCallback);activeXhrs.push(keyXhr);}// optionally, request the associated media init segment\nif(segment.map&&!segment.map.bytes){var initSegmentOptions=videojs$1.mergeOptions(xhrOptions,{uri:segment.map.resolvedUri,responseType:'arraybuffer',headers:segmentXhrHeaders(segment.map)});var initSegmentRequestCallback=handleInitSegmentResponse(segment,captionParser,finishProcessingFn);var initSegmentXhr=xhr(initSegmentOptions,initSegmentRequestCallback);activeXhrs.push(initSegmentXhr);}var segmentRequestOptions=videojs$1.mergeOptions(xhrOptions,{uri:segment.resolvedUri,responseType:'arraybuffer',headers:segmentXhrHeaders(segment)});var segmentRequestCallback=handleSegmentResponse(segment,captionParser,finishProcessingFn);var segmentXhr=xhr(segmentRequestOptions,segmentRequestCallback);segmentXhr.addEventListener('progress',handleProgress(segment,progressFn));activeXhrs.push(segmentXhr);return function(){return abortAll(activeXhrs);};};// Utilities\n/**\n * Returns the CSS value for the specified property on an element\n * using `getComputedStyle`. Firefox has a long-standing issue where\n * getComputedStyle() may return null when running in an iframe with\n * `display: none`.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n * @param {HTMLElement} el the htmlelement to work on\n * @param {string} the proprety to get the style for\n */var safeGetComputedStyle=function safeGetComputedStyle(el,property){var result=void 0;if(!el){return'';}result=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.getComputedStyle(el);if(!result){return'';}return result[property];};/**\n * Resuable stable sort function\n *\n * @param {Playlists} array\n * @param {Function} sortFn Different comparators\n * @function stableSort\n */var stableSort=function stableSort(array,sortFn){var newArray=array.slice();array.sort(function(left,right){var cmp=sortFn(left,right);if(cmp===0){return newArray.indexOf(left)-newArray.indexOf(right);}return cmp;});};/**\n * A comparator function to sort two playlist object by bandwidth.\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {Number} Greater than zero if the bandwidth attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the bandwidth of right is greater than left and\n * exactly zero if the two are equal.\n */var comparePlaylistBandwidth=function comparePlaylistBandwidth(left,right){var leftBandwidth=void 0;var rightBandwidth=void 0;if(left.attributes.BANDWIDTH){leftBandwidth=left.attributes.BANDWIDTH;}leftBandwidth=leftBandwidth||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Number.MAX_VALUE;if(right.attributes.BANDWIDTH){rightBandwidth=right.attributes.BANDWIDTH;}rightBandwidth=rightBandwidth||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Number.MAX_VALUE;return leftBandwidth-rightBandwidth;};/**\n * A comparator function to sort two playlist object by resolution (width).\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {Number} Greater than zero if the resolution.width attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the resolution.width of right is greater than left and\n * exactly zero if the two are equal.\n */var comparePlaylistResolution=function comparePlaylistResolution(left,right){var leftWidth=void 0;var rightWidth=void 0;if(left.attributes.RESOLUTION&&left.attributes.RESOLUTION.width){leftWidth=left.attributes.RESOLUTION.width;}leftWidth=leftWidth||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Number.MAX_VALUE;if(right.attributes.RESOLUTION&&right.attributes.RESOLUTION.width){rightWidth=right.attributes.RESOLUTION.width;}rightWidth=rightWidth||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Number.MAX_VALUE;// NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions\n// have the same media dimensions/ resolution\nif(leftWidth===rightWidth&&left.attributes.BANDWIDTH&&right.attributes.BANDWIDTH){return left.attributes.BANDWIDTH-right.attributes.BANDWIDTH;}return leftWidth-rightWidth;};/**\n * Chooses the appropriate media playlist based on bandwidth and player size\n *\n * @param {Object} master\n * Object representation of the master manifest\n * @param {Number} playerBandwidth\n * Current calculated bandwidth of the player\n * @param {Number} playerWidth\n * Current width of the player element\n * @param {Number} playerHeight\n * Current height of the player element\n * @param {Boolean} limitRenditionByPlayerDimensions\n * True if the player width and height should be used during the selection, false otherwise\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */var simpleSelector=function simpleSelector(master,playerBandwidth,playerWidth,playerHeight,limitRenditionByPlayerDimensions){// convert the playlists to an intermediary representation to make comparisons easier\nvar sortedPlaylistReps=master.playlists.map(function(playlist){var width=void 0;var height=void 0;var bandwidth=void 0;width=playlist.attributes.RESOLUTION&&playlist.attributes.RESOLUTION.width;height=playlist.attributes.RESOLUTION&&playlist.attributes.RESOLUTION.height;bandwidth=playlist.attributes.BANDWIDTH;bandwidth=bandwidth||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.Number.MAX_VALUE;return{bandwidth:bandwidth,width:width,height:height,playlist:playlist};});stableSort(sortedPlaylistReps,function(left,right){return left.bandwidth-right.bandwidth;});// filter out any playlists that have been excluded due to\n// incompatible configurations\nsortedPlaylistReps=sortedPlaylistReps.filter(function(rep){return!Playlist.isIncompatible(rep.playlist);});// filter out any playlists that have been disabled manually through the representations\n// api or blacklisted temporarily due to playback errors.\nvar enabledPlaylistReps=sortedPlaylistReps.filter(function(rep){return Playlist.isEnabled(rep.playlist);});if(!enabledPlaylistReps.length){// if there are no enabled playlists, then they have all been blacklisted or disabled\n// by the user through the representations api. In this case, ignore blacklisting and\n// fallback to what the user wants by using playlists the user has not disabled.\nenabledPlaylistReps=sortedPlaylistReps.filter(function(rep){return!Playlist.isDisabled(rep.playlist);});}// filter out any variant that has greater effective bitrate\n// than the current estimated bandwidth\nvar bandwidthPlaylistReps=enabledPlaylistReps.filter(function(rep){return rep.bandwidth*Config.BANDWIDTH_VARIANCE<playerBandwidth;});var highestRemainingBandwidthRep=bandwidthPlaylistReps[bandwidthPlaylistReps.length-1];// get all of the renditions with the same (highest) bandwidth\n// and then taking the very first element\nvar bandwidthBestRep=bandwidthPlaylistReps.filter(function(rep){return rep.bandwidth===highestRemainingBandwidthRep.bandwidth;})[0];// if we're not going to limit renditions by player size, make an early decision.\nif(limitRenditionByPlayerDimensions===false){var _chosenRep=bandwidthBestRep||enabledPlaylistReps[0]||sortedPlaylistReps[0];return _chosenRep?_chosenRep.playlist:null;}// filter out playlists without resolution information\nvar haveResolution=bandwidthPlaylistReps.filter(function(rep){return rep.width&&rep.height;});// sort variants by resolution\nstableSort(haveResolution,function(left,right){return left.width-right.width;});// if we have the exact resolution as the player use it\nvar resolutionBestRepList=haveResolution.filter(function(rep){return rep.width===playerWidth&&rep.height===playerHeight;});highestRemainingBandwidthRep=resolutionBestRepList[resolutionBestRepList.length-1];// ensure that we pick the highest bandwidth variant that have exact resolution\nvar resolutionBestRep=resolutionBestRepList.filter(function(rep){return rep.bandwidth===highestRemainingBandwidthRep.bandwidth;})[0];var resolutionPlusOneList=void 0;var resolutionPlusOneSmallest=void 0;var resolutionPlusOneRep=void 0;// find the smallest variant that is larger than the player\n// if there is no match of exact resolution\nif(!resolutionBestRep){resolutionPlusOneList=haveResolution.filter(function(rep){return rep.width>playerWidth||rep.height>playerHeight;});// find all the variants have the same smallest resolution\nresolutionPlusOneSmallest=resolutionPlusOneList.filter(function(rep){return rep.width===resolutionPlusOneList[0].width&&rep.height===resolutionPlusOneList[0].height;});// ensure that we also pick the highest bandwidth variant that\n// is just-larger-than the video player\nhighestRemainingBandwidthRep=resolutionPlusOneSmallest[resolutionPlusOneSmallest.length-1];resolutionPlusOneRep=resolutionPlusOneSmallest.filter(function(rep){return rep.bandwidth===highestRemainingBandwidthRep.bandwidth;})[0];}// fallback chain of variants\nvar chosenRep=resolutionPlusOneRep||resolutionBestRep||bandwidthBestRep||enabledPlaylistReps[0]||sortedPlaylistReps[0];return chosenRep?chosenRep.playlist:null;};// Playlist Selectors\n/**\n * Chooses the appropriate media playlist based on the most recent\n * bandwidth estimate and the player size.\n *\n * Expects to be called within the context of an instance of HlsHandler\n *\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */var lastBandwidthSelector=function lastBandwidthSelector(){return simpleSelector(this.playlists.master,this.systemBandwidth,parseInt(safeGetComputedStyle(this.tech_.el(),'width'),10),parseInt(safeGetComputedStyle(this.tech_.el(),'height'),10),this.limitRenditionByPlayerDimensions);};/**\n * Chooses the appropriate media playlist based on the potential to rebuffer\n *\n * @param {Object} settings\n * Object of information required to use this selector\n * @param {Object} settings.master\n * Object representation of the master manifest\n * @param {Number} settings.currentTime\n * The current time of the player\n * @param {Number} settings.bandwidth\n * Current measured bandwidth\n * @param {Number} settings.duration\n * Duration of the media\n * @param {Number} settings.segmentDuration\n * Segment duration to be used in round trip time calculations\n * @param {Number} settings.timeUntilRebuffer\n * Time left in seconds until the player has to rebuffer\n * @param {Number} settings.currentTimeline\n * The current timeline segments are being loaded from\n * @param {SyncController} settings.syncController\n * SyncController for determining if we have a sync point for a given playlist\n * @return {Object|null}\n * {Object} return.playlist\n * The highest bandwidth playlist with the least amount of rebuffering\n * {Number} return.rebufferingImpact\n * The amount of time in seconds switching to this playlist will rebuffer. A\n * negative value means that switching will cause zero rebuffering.\n */var minRebufferMaxBandwidthSelector=function minRebufferMaxBandwidthSelector(settings){var master=settings.master,currentTime=settings.currentTime,bandwidth=settings.bandwidth,duration$$1=settings.duration,segmentDuration=settings.segmentDuration,timeUntilRebuffer=settings.timeUntilRebuffer,currentTimeline=settings.currentTimeline,syncController=settings.syncController;// filter out any playlists that have been excluded due to\n// incompatible configurations\nvar compatiblePlaylists=master.playlists.filter(function(playlist){return!Playlist.isIncompatible(playlist);});// filter out any playlists that have been disabled manually through the representations\n// api or blacklisted temporarily due to playback errors.\nvar enabledPlaylists=compatiblePlaylists.filter(Playlist.isEnabled);if(!enabledPlaylists.length){// if there are no enabled playlists, then they have all been blacklisted or disabled\n// by the user through the representations api. In this case, ignore blacklisting and\n// fallback to what the user wants by using playlists the user has not disabled.\nenabledPlaylists=compatiblePlaylists.filter(function(playlist){return!Playlist.isDisabled(playlist);});}var bandwidthPlaylists=enabledPlaylists.filter(Playlist.hasAttribute.bind(null,'BANDWIDTH'));var rebufferingEstimates=bandwidthPlaylists.map(function(playlist){var syncPoint=syncController.getSyncPoint(playlist,duration$$1,currentTimeline,currentTime);// If there is no sync point for this playlist, switching to it will require a\n// sync request first. This will double the request time\nvar numRequests=syncPoint?1:2;var requestTimeEstimate=Playlist.estimateSegmentRequestTime(segmentDuration,bandwidth,playlist);var rebufferingImpact=requestTimeEstimate*numRequests-timeUntilRebuffer;return{playlist:playlist,rebufferingImpact:rebufferingImpact};});var noRebufferingPlaylists=rebufferingEstimates.filter(function(estimate){return estimate.rebufferingImpact<=0;});// Sort by bandwidth DESC\nstableSort(noRebufferingPlaylists,function(a,b){return comparePlaylistBandwidth(b.playlist,a.playlist);});if(noRebufferingPlaylists.length){return noRebufferingPlaylists[0];}stableSort(rebufferingEstimates,function(a,b){return a.rebufferingImpact-b.rebufferingImpact;});return rebufferingEstimates[0]||null;};/**\n * Chooses the appropriate media playlist, which in this case is the lowest bitrate\n * one with video. If no renditions with video exist, return the lowest audio rendition.\n *\n * Expects to be called within the context of an instance of HlsHandler\n *\n * @return {Object|null}\n * {Object} return.playlist\n * The lowest bitrate playlist that contains a video codec. If no such rendition\n * exists pick the lowest audio rendition.\n */var lowestBitrateCompatibleVariantSelector=function lowestBitrateCompatibleVariantSelector(){// filter out any playlists that have been excluded due to\n// incompatible configurations or playback errors\nvar playlists=this.playlists.master.playlists.filter(Playlist.isEnabled);// Sort ascending by bitrate\nstableSort(playlists,function(a,b){return comparePlaylistBandwidth(a,b);});// Parse and assume that playlists with no video codec have no video\n// (this is not necessarily true, although it is generally true).\n//\n// If an entire manifest has no valid videos everything will get filtered\n// out.\nvar playlistsWithVideo=playlists.filter(function(playlist){return parseCodecs(playlist.attributes.CODECS).videoCodec;});return playlistsWithVideo[0]||null;};/**\n * Create captions text tracks on video.js if they do not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {Object} tech the video.js tech\n * @param {Object} captionStreams the caption streams to create\n * @private\n */var createCaptionsTrackIfNotExists=function createCaptionsTrackIfNotExists(inbandTextTracks,tech,captionStreams){for(var trackId in captionStreams){if(!inbandTextTracks[trackId]){tech.trigger({type:'usage',name:'hls-608'});var track=tech.textTracks().getTrackById(trackId);if(track){// Resuse an existing track with a CC# id because this was\n// very likely created by videojs-contrib-hls from information\n// in the m3u8 for us to use\ninbandTextTracks[trackId]=track;}else{// Otherwise, create a track with the default `CC#` label and\n// without a language\ninbandTextTracks[trackId]=tech.addRemoteTextTrack({kind:'captions',id:trackId,label:trackId},false).track;}}}};var addCaptionData=function addCaptionData(_ref){var inbandTextTracks=_ref.inbandTextTracks,captionArray=_ref.captionArray,timestampOffset=_ref.timestampOffset;if(!captionArray){return;}var Cue=window.WebKitDataCue||window.VTTCue;captionArray.forEach(function(caption){var track=caption.stream;var startTime=caption.startTime;var endTime=caption.endTime;if(!inbandTextTracks[track]){return;}startTime+=timestampOffset;endTime+=timestampOffset;inbandTextTracks[track].addCue(new Cue(startTime,endTime,caption.text));});};/**\n * @file segment-loader.js\n */ // in ms\nvar CHECK_BUFFER_DELAY=500;/**\n * Determines if we should call endOfStream on the media source based\n * on the state of the buffer or if appened segment was the final\n * segment in the playlist.\n *\n * @param {Object} playlist a media playlist object\n * @param {Object} mediaSource the MediaSource object\n * @param {Number} segmentIndex the index of segment we last appended\n * @returns {Boolean} do we need to call endOfStream on the MediaSource\n */var detectEndOfStream=function detectEndOfStream(playlist,mediaSource,segmentIndex){if(!playlist||!mediaSource){return false;}var segments=playlist.segments;// determine a few boolean values to help make the branch below easier\n// to read\nvar appendedLastSegment=segmentIndex===segments.length;// if we've buffered to the end of the video, we need to call endOfStream\n// so that MediaSources can trigger the `ended` event when it runs out of\n// buffered data instead of waiting for me\nreturn playlist.endList&&mediaSource.readyState==='open'&&appendedLastSegment;};var finite=function finite(num){return typeof num==='number'&&isFinite(num);};var illegalMediaSwitch=function illegalMediaSwitch(loaderType,startingMedia,newSegmentMedia){// Although these checks should most likely cover non 'main' types, for now it narrows\n// the scope of our checks.\nif(loaderType!=='main'||!startingMedia||!newSegmentMedia){return null;}if(!newSegmentMedia.containsAudio&&!newSegmentMedia.containsVideo){return'Neither audio nor video found in segment.';}if(startingMedia.containsVideo&&!newSegmentMedia.containsVideo){return'Only audio found in segment when we expected video.'+' We can\\'t switch to audio only from a stream that had video.'+' To get rid of this message, please add codec information to the manifest.';}if(!startingMedia.containsVideo&&newSegmentMedia.containsVideo){return'Video found in segment when we expected only audio.'+' We can\\'t switch to a stream with video from an audio only stream.'+' To get rid of this message, please add codec information to the manifest.';}return null;};/**\n * Calculates a time value that is safe to remove from the back buffer without interupting\n * playback.\n *\n * @param {TimeRange} seekable\n * The current seekable range\n * @param {Number} currentTime\n * The current time of the player\n * @param {Number} targetDuration\n * The target duration of the current playlist\n * @return {Number}\n * Time that is safe to remove from the back buffer without interupting playback\n */var safeBackBufferTrimTime=function safeBackBufferTrimTime(seekable$$1,currentTime,targetDuration){var removeToTime=void 0;if(seekable$$1.length&&seekable$$1.start(0)>0&&seekable$$1.start(0)<currentTime){// If we have a seekable range use that as the limit for what can be removed safely\nremoveToTime=seekable$$1.start(0);}else{// otherwise remove anything older than 30 seconds before the current play head\nremoveToTime=currentTime-30;}// Don't allow removing from the buffer within target duration of current time\n// to avoid the possibility of removing the GOP currently being played which could\n// cause playback stalls.\nreturn Math.min(removeToTime,currentTime-targetDuration);};var segmentInfoString=function segmentInfoString(segmentInfo){var _segmentInfo$segment=segmentInfo.segment,start=_segmentInfo$segment.start,end=_segmentInfo$segment.end,_segmentInfo$playlist=segmentInfo.playlist,seq=_segmentInfo$playlist.mediaSequence,id=_segmentInfo$playlist.id,_segmentInfo$playlist2=_segmentInfo$playlist.segments,segments=_segmentInfo$playlist2===undefined?[]:_segmentInfo$playlist2,index=segmentInfo.mediaIndex,timeline=segmentInfo.timeline;return['appending ['+index+'] of ['+seq+', '+(seq+segments.length)+'] from playlist ['+id+']','['+start+' => '+end+'] in timeline ['+timeline+']'].join(' ');};/**\n * An object that manages segment loading and appending.\n *\n * @class SegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */var SegmentLoader=function(_videojs$EventTarget){inherits(SegmentLoader,_videojs$EventTarget);function SegmentLoader(settings){classCallCheck(this,SegmentLoader);// check pre-conditions\nvar _this=possibleConstructorReturn(this,(SegmentLoader.__proto__||Object.getPrototypeOf(SegmentLoader)).call(this));if(!settings){throw new TypeError('Initialization settings are required');}if(typeof settings.currentTime!=='function'){throw new TypeError('No currentTime getter specified');}if(!settings.mediaSource){throw new TypeError('No MediaSource specified');}// public properties\n_this.bandwidth=settings.bandwidth;_this.throughput={rate:0,count:0};_this.roundTrip=NaN;_this.resetStats_();_this.mediaIndex=null;// private settings\n_this.hasPlayed_=settings.hasPlayed;_this.currentTime_=settings.currentTime;_this.seekable_=settings.seekable;_this.seeking_=settings.seeking;_this.duration_=settings.duration;_this.mediaSource_=settings.mediaSource;_this.hls_=settings.hls;_this.loaderType_=settings.loaderType;_this.startingMedia_=void 0;_this.segmentMetadataTrack_=settings.segmentMetadataTrack;_this.goalBufferLength_=settings.goalBufferLength;_this.sourceType_=settings.sourceType;_this.inbandTextTracks_=settings.inbandTextTracks;_this.state_='INIT';// private instance variables\n_this.checkBufferTimeout_=null;_this.error_=void 0;_this.currentTimeline_=-1;_this.pendingSegment_=null;_this.mimeType_=null;_this.sourceUpdater_=null;_this.xhrOptions_=null;// Fragmented mp4 playback\n_this.activeInitSegmentId_=null;_this.initSegments_={};// HLSe playback\n_this.cacheEncryptionKeys_=settings.cacheEncryptionKeys;_this.keyCache_={};// Fmp4 CaptionParser\nif(_this.loaderType_==='main'){_this.captionParser_=new mux_js_lib_mp4_caption_parser__WEBPACK_IMPORTED_MODULE_11___default.a();}else{_this.captionParser_=null;}_this.decrypter_=settings.decrypter;// Manages the tracking and generation of sync-points, mappings\n// between a time in the display time and a segment index within\n// a playlist\n_this.syncController_=settings.syncController;_this.syncPoint_={segmentIndex:0,time:0};_this.syncController_.on('syncinfoupdate',function(){return _this.trigger('syncinfoupdate');});_this.mediaSource_.addEventListener('sourceopen',function(){return _this.ended_=false;});// ...for determining the fetch location\n_this.fetchAtBuffer_=false;_this.logger_=logger('SegmentLoader['+_this.loaderType_+']');Object.defineProperty(_this,'state',{get:function get$$1(){return this.state_;},set:function set$$1(newState){if(newState!==this.state_){this.logger_(this.state_+' -> '+newState);this.state_=newState;}}});return _this;}/**\n * reset all of our media stats\n *\n * @private\n */createClass(SegmentLoader,[{key:'resetStats_',value:function resetStats_(){this.mediaBytesTransferred=0;this.mediaRequests=0;this.mediaRequestsAborted=0;this.mediaRequestsTimedout=0;this.mediaRequestsErrored=0;this.mediaTransferDuration=0;this.mediaSecondsLoaded=0;}/**\n * dispose of the SegmentLoader and reset to the default state\n */},{key:'dispose',value:function dispose(){this.state='DISPOSED';this.pause();this.abort_();if(this.sourceUpdater_){this.sourceUpdater_.dispose();}this.resetStats_();if(this.captionParser_){this.captionParser_.reset();}}/**\n * abort anything that is currently doing on with the SegmentLoader\n * and reset to a default state\n */},{key:'abort',value:function abort(){if(this.state!=='WAITING'){if(this.pendingSegment_){this.pendingSegment_=null;}return;}this.abort_();// We aborted the requests we were waiting on, so reset the loader's state to READY\n// since we are no longer \"waiting\" on any requests. XHR callback is not always run\n// when the request is aborted. This will prevent the loader from being stuck in the\n// WAITING state indefinitely.\nthis.state='READY';// don't wait for buffer check timeouts to begin fetching the\n// next segment\nif(!this.paused()){this.monitorBuffer_();}}/**\n * abort all pending xhr requests and null any pending segements\n *\n * @private\n */},{key:'abort_',value:function abort_(){if(this.pendingSegment_){this.pendingSegment_.abortRequests();}// clear out the segment being processed\nthis.pendingSegment_=null;}/**\n * set an error on the segment loader and null out any pending segements\n *\n * @param {Error} error the error to set on the SegmentLoader\n * @return {Error} the error that was set or that is currently set\n */},{key:'error',value:function error(_error){if(typeof _error!=='undefined'){this.error_=_error;}this.pendingSegment_=null;return this.error_;}},{key:'endOfStream',value:function endOfStream(){this.ended_=true;this.pause();this.trigger('ended');}/**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */},{key:'buffered_',value:function buffered_(){if(!this.sourceUpdater_){return videojs$1.createTimeRanges();}return this.sourceUpdater_.buffered();}/**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {Boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */},{key:'initSegment',value:function initSegment(map){var set$$1=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(!map){return null;}var id=initSegmentId(map);var storedMap=this.initSegments_[id];if(set$$1&&!storedMap&&map.bytes){this.initSegments_[id]=storedMap={resolvedUri:map.resolvedUri,byterange:map.byterange,bytes:map.bytes,timescales:map.timescales,videoTrackIds:map.videoTrackIds};}return storedMap||map;}/**\n * Gets and sets key for the provided key\n *\n * @param {Object} key\n * The key object representing the key to get or set\n * @param {Boolean=} set\n * If true, the key for the provided key should be saved\n * @return {Object}\n * Key object for desired key\n */},{key:'segmentKey',value:function segmentKey(key){var set$$1=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(!key){return null;}var id=segmentKeyId(key);var storedKey=this.keyCache_[id];// TODO: We should use the HTTP Expires header to invalidate our cache per\n// https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.2.3\nif(this.cacheEncryptionKeys_&&set$$1&&!storedKey&&key.bytes){this.keyCache_[id]=storedKey={resolvedUri:key.resolvedUri,bytes:key.bytes};}var result={resolvedUri:(storedKey||key).resolvedUri};if(storedKey){result.bytes=storedKey.bytes;}return result;}/**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {Boolean} True if the all configuration is ready for loading\n * @private\n */},{key:'couldBeginLoading_',value:function couldBeginLoading_(){return this.playlist_&&(// the source updater is created when init_ is called, so either having a\n// source updater or being in the INIT state with a mimeType is enough\n// to say we have all the needed configuration to start loading.\nthis.sourceUpdater_||this.mimeType_&&this.state==='INIT')&&!this.paused();}/**\n * load a playlist and start to fill the buffer\n */},{key:'load',value:function load(){// un-pause\nthis.monitorBuffer_();// if we don't have a playlist yet, keep waiting for one to be\n// specified\nif(!this.playlist_){return;}// not sure if this is the best place for this\nthis.syncController_.setDateTimeMapping(this.playlist_);// if all the configuration is ready, initialize and begin loading\nif(this.state==='INIT'&&this.couldBeginLoading_()){return this.init_();}// if we're in the middle of processing a segment already, don't\n// kick off an additional segment request\nif(!this.couldBeginLoading_()||this.state!=='READY'&&this.state!=='INIT'){return;}this.state='READY';}/**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */},{key:'init_',value:function init_(){this.state='READY';this.sourceUpdater_=new SourceUpdater(this.mediaSource_,this.mimeType_,this.loaderType_,this.sourceBufferEmitter_);this.resetEverything();return this.monitorBuffer_();}/**\n * set a playlist on the segment loader\n *\n * @param {PlaylistLoader} media the playlist to set on the segment loader\n */},{key:'playlist',value:function playlist(newPlaylist){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!newPlaylist){return;}var oldPlaylist=this.playlist_;var segmentInfo=this.pendingSegment_;this.playlist_=newPlaylist;this.xhrOptions_=options;// when we haven't started playing yet, the start of a live playlist\n// is always our zero-time so force a sync update each time the playlist\n// is refreshed from the server\nif(!this.hasPlayed_()){newPlaylist.syncInfo={mediaSequence:newPlaylist.mediaSequence,time:0};}var oldId=null;if(oldPlaylist){if(oldPlaylist.id){oldId=oldPlaylist.id;}else if(oldPlaylist.uri){oldId=oldPlaylist.uri;}}this.logger_('playlist update ['+oldId+' => '+(newPlaylist.id||newPlaylist.uri)+']');// in VOD, this is always a rendition switch (or we updated our syncInfo above)\n// in LIVE, we always want to update with new playlists (including refreshes)\nthis.trigger('syncinfoupdate');// if we were unpaused but waiting for a playlist, start\n// buffering now\nif(this.state==='INIT'&&this.couldBeginLoading_()){return this.init_();}if(!oldPlaylist||oldPlaylist.uri!==newPlaylist.uri){if(this.mediaIndex!==null){// we must \"resync\" the segment loader when we switch renditions and\n// the segment loader is already synced to the previous rendition\nthis.resyncLoader();}// the rest of this function depends on `oldPlaylist` being defined\nreturn;}// we reloaded the same playlist so we are in a live scenario\n// and we will likely need to adjust the mediaIndex\nvar mediaSequenceDiff=newPlaylist.mediaSequence-oldPlaylist.mediaSequence;this.logger_('live window shift ['+mediaSequenceDiff+']');// update the mediaIndex on the SegmentLoader\n// this is important because we can abort a request and this value must be\n// equal to the last appended mediaIndex\nif(this.mediaIndex!==null){this.mediaIndex-=mediaSequenceDiff;}// update the mediaIndex on the SegmentInfo object\n// this is important because we will update this.mediaIndex with this value\n// in `handleUpdateEnd_` after the segment has been successfully appended\nif(segmentInfo){segmentInfo.mediaIndex-=mediaSequenceDiff;// we need to update the referenced segment so that timing information is\n// saved for the new playlist's segment, however, if the segment fell off the\n// playlist, we can leave the old reference and just lose the timing info\nif(segmentInfo.mediaIndex>=0){segmentInfo.segment=newPlaylist.segments[segmentInfo.mediaIndex];}}this.syncController_.saveExpiredSegmentInfo(oldPlaylist,newPlaylist);}/**\n * Prevent the loader from fetching additional segments. If there\n * is a segment request outstanding, it will finish processing\n * before the loader halts. A segment loader can be unpaused by\n * calling load().\n */},{key:'pause',value:function pause(){if(this.checkBufferTimeout_){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.checkBufferTimeout_);this.checkBufferTimeout_=null;}}/**\n * Returns whether the segment loader is fetching additional\n * segments when given the opportunity. This property can be\n * modified through calls to pause() and load().\n */},{key:'paused',value:function paused(){return this.checkBufferTimeout_===null;}/**\n * create/set the following mimetype on the SourceBuffer through a\n * SourceUpdater\n *\n * @param {String} mimeType the mime type string to use\n * @param {Object} sourceBufferEmitter an event emitter that fires when a source buffer\n * is added to the media source\n */},{key:'mimeType',value:function mimeType(_mimeType,sourceBufferEmitter){if(this.mimeType_){return;}this.mimeType_=_mimeType;this.sourceBufferEmitter_=sourceBufferEmitter;// if we were unpaused but waiting for a sourceUpdater, start\n// buffering now\nif(this.state==='INIT'&&this.couldBeginLoading_()){this.init_();}}/**\n * Delete all the buffered data and reset the SegmentLoader\n * @param {Function} [done] an optional callback to be executed when the remove\n * operation is complete\n */},{key:'resetEverything',value:function resetEverything(done){this.ended_=false;this.resetLoader();this.remove(0,this.duration_(),done);// clears fmp4 captions\nif(this.captionParser_){this.captionParser_.clearAllCaptions();}this.trigger('reseteverything');}/**\n * Force the SegmentLoader to resync and start loading around the currentTime instead\n * of starting at the end of the buffer\n *\n * Useful for fast quality changes\n */},{key:'resetLoader',value:function resetLoader(){this.fetchAtBuffer_=false;this.resyncLoader();}/**\n * Force the SegmentLoader to restart synchronization and make a conservative guess\n * before returning to the simple walk-forward method\n */},{key:'resyncLoader',value:function resyncLoader(){this.mediaIndex=null;this.syncPoint_=null;this.abort();}/**\n * Remove any data in the source buffer between start and end times\n * @param {Number} start - the start time of the region to remove from the buffer\n * @param {Number} end - the end time of the region to remove from the buffer\n * @param {Function} [done] - an optional callback to be executed when the remove\n * operation is complete\n */},{key:'remove',value:function remove(start,end,done){if(this.sourceUpdater_){this.sourceUpdater_.remove(start,end,done);}removeCuesFromTrack(start,end,this.segmentMetadataTrack_);if(this.inbandTextTracks_){for(var id in this.inbandTextTracks_){removeCuesFromTrack(start,end,this.inbandTextTracks_[id]);}}}/**\n * (re-)schedule monitorBufferTick_ to run as soon as possible\n *\n * @private\n */},{key:'monitorBuffer_',value:function monitorBuffer_(){if(this.checkBufferTimeout_){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.checkBufferTimeout_);}this.checkBufferTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.monitorBufferTick_.bind(this),1);}/**\n * As long as the SegmentLoader is in the READY state, periodically\n * invoke fillBuffer_().\n *\n * @private\n */},{key:'monitorBufferTick_',value:function monitorBufferTick_(){if(this.state==='READY'){this.fillBuffer_();}if(this.checkBufferTimeout_){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.checkBufferTimeout_);}this.checkBufferTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.monitorBufferTick_.bind(this),CHECK_BUFFER_DELAY);}/**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */},{key:'fillBuffer_',value:function fillBuffer_(){if(this.sourceUpdater_.updating()){return;}if(!this.syncPoint_){this.syncPoint_=this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_());}// see if we need to begin loading immediately\nvar segmentInfo=this.checkBuffer_(this.buffered_(),this.playlist_,this.mediaIndex,this.hasPlayed_(),this.currentTime_(),this.syncPoint_);if(!segmentInfo){return;}if(this.isEndOfStream_(segmentInfo.mediaIndex)){this.endOfStream();return;}if(segmentInfo.mediaIndex===this.playlist_.segments.length-1&&this.mediaSource_.readyState==='ended'&&!this.seeking_()){return;}// We will need to change timestampOffset of the sourceBuffer if:\n// - The segment.timeline !== this.currentTimeline\n// (we are crossing a discontinuity somehow)\n// - The \"timestampOffset\" for the start of this segment is less than\n// the currently set timestampOffset\n// Also, clear captions if we are crossing a discontinuity boundary\n// Previously, we changed the timestampOffset if the start of this segment\n// is less than the currently set timestampOffset but this isn't wanted\n// as it can produce bad behavior, especially around long running\n// live streams\nif(segmentInfo.timeline!==this.currentTimeline_){this.syncController_.reset();segmentInfo.timestampOffset=segmentInfo.startOfSegment;if(this.captionParser_){this.captionParser_.clearAllCaptions();}}this.loadSegment_(segmentInfo);}/**\n * Determines if this segment loader is at the end of it's stream.\n *\n * @param {Number} mediaIndex the index of segment we last appended\n * @param {Object} [playlist=this.playlist_] a media playlist object\n * @returns {Boolean} true if at end of stream, false otherwise.\n */},{key:'isEndOfStream_',value:function isEndOfStream_(mediaIndex){var playlist=arguments.length>1&&arguments[1]!==undefined?arguments[1]:this.playlist_;return detectEndOfStream(playlist,this.mediaSource_,mediaIndex)&&!this.sourceUpdater_.updating();}/**\n * Determines what segment request should be made, given current playback\n * state.\n *\n * @param {TimeRanges} buffered - the state of the buffer\n * @param {Object} playlist - the playlist object to fetch segments from\n * @param {Number} mediaIndex - the previous mediaIndex fetched or null\n * @param {Boolean} hasPlayed - a flag indicating whether we have played or not\n * @param {Number} currentTime - the playback position in seconds\n * @param {Object} syncPoint - a segment info object that describes the\n * @returns {Object} a segment request object that describes the segment to load\n */},{key:'checkBuffer_',value:function checkBuffer_(buffered,playlist,mediaIndex,hasPlayed,currentTime,syncPoint){var lastBufferedEnd=0;var startOfSegment=void 0;if(buffered.length){lastBufferedEnd=buffered.end(buffered.length-1);}var bufferedTime=Math.max(0,lastBufferedEnd-currentTime);if(!playlist.segments.length){return null;}// if there is plenty of content buffered, and the video has\n// been played before relax for awhile\nif(bufferedTime>=this.goalBufferLength_()){return null;}// if the video has not yet played once, and we already have\n// one segment downloaded do nothing\nif(!hasPlayed&&bufferedTime>=1){return null;}// When the syncPoint is null, there is no way of determining a good\n// conservative segment index to fetch from\n// The best thing to do here is to get the kind of sync-point data by\n// making a request\nif(syncPoint===null){mediaIndex=this.getSyncSegmentCandidate_(playlist);return this.generateSegmentInfo_(playlist,mediaIndex,null,true);}// Under normal playback conditions fetching is a simple walk forward\nif(mediaIndex!==null){var segment=playlist.segments[mediaIndex];startOfSegment=lastBufferedEnd;return this.generateSegmentInfo_(playlist,mediaIndex+1,startOfSegment,false);}// There is a sync-point but the lack of a mediaIndex indicates that\n// we need to make a good conservative guess about which segment to\n// fetch\nif(this.fetchAtBuffer_){// Find the segment containing the end of the buffer\nvar mediaSourceInfo=Playlist.getMediaInfoForTime(playlist,lastBufferedEnd,syncPoint.segmentIndex,syncPoint.time);mediaIndex=mediaSourceInfo.mediaIndex;startOfSegment=mediaSourceInfo.startTime;}else{// Find the segment containing currentTime\nvar _mediaSourceInfo=Playlist.getMediaInfoForTime(playlist,currentTime,syncPoint.segmentIndex,syncPoint.time);mediaIndex=_mediaSourceInfo.mediaIndex;startOfSegment=_mediaSourceInfo.startTime;}return this.generateSegmentInfo_(playlist,mediaIndex,startOfSegment,false);}/**\n * The segment loader has no recourse except to fetch a segment in the\n * current playlist and use the internal timestamps in that segment to\n * generate a syncPoint. This function returns a good candidate index\n * for that process.\n *\n * @param {Object} playlist - the playlist object to look for a\n * @returns {Number} An index of a segment from the playlist to load\n */},{key:'getSyncSegmentCandidate_',value:function getSyncSegmentCandidate_(playlist){var _this2=this;if(this.currentTimeline_===-1){return 0;}var segmentIndexArray=playlist.segments.map(function(s,i){return{timeline:s.timeline,segmentIndex:i};}).filter(function(s){return s.timeline===_this2.currentTimeline_;});if(segmentIndexArray.length){return segmentIndexArray[Math.min(segmentIndexArray.length-1,1)].segmentIndex;}return Math.max(playlist.segments.length-1,0);}},{key:'generateSegmentInfo_',value:function generateSegmentInfo_(playlist,mediaIndex,startOfSegment,isSyncRequest){if(mediaIndex<0||mediaIndex>=playlist.segments.length){return null;}var segment=playlist.segments[mediaIndex];return{requestId:'segment-loader-'+Math.random(),// resolve the segment URL relative to the playlist\nuri:segment.resolvedUri,// the segment's mediaIndex at the time it was requested\nmediaIndex:mediaIndex,// whether or not to update the SegmentLoader's state with this\n// segment's mediaIndex\nisSyncRequest:isSyncRequest,startOfSegment:startOfSegment,// the segment's playlist\nplaylist:playlist,// unencrypted bytes of the segment\nbytes:null,// when a key is defined for this segment, the encrypted bytes\nencryptedBytes:null,// The target timestampOffset for this segment when we append it\n// to the source buffer\ntimestampOffset:null,// The timeline that the segment is in\ntimeline:segment.timeline,// The expected duration of the segment in seconds\nduration:segment.duration,// retain the segment in case the playlist updates while doing an async process\nsegment:segment};}/**\n * Determines if the network has enough bandwidth to complete the current segment\n * request in a timely manner. If not, the request will be aborted early and bandwidth\n * updated to trigger a playlist switch.\n *\n * @param {Object} stats\n * Object containing stats about the request timing and size\n * @return {Boolean} True if the request was aborted, false otherwise\n * @private\n */},{key:'abortRequestEarly_',value:function abortRequestEarly_(stats){if(this.hls_.tech_.paused()||// Don't abort if the current playlist is on the lowestEnabledRendition\n// TODO: Replace using timeout with a boolean indicating whether this playlist is\n// the lowestEnabledRendition.\n!this.xhrOptions_.timeout||// Don't abort if we have no bandwidth information to estimate segment sizes\n!this.playlist_.attributes.BANDWIDTH){return false;}// Wait at least 1 second since the first byte of data has been received before\n// using the calculated bandwidth from the progress event to allow the bitrate\n// to stabilize\nif(Date.now()-(stats.firstBytesReceivedAt||Date.now())<1000){return false;}var currentTime=this.currentTime_();var measuredBandwidth=stats.bandwidth;var segmentDuration=this.pendingSegment_.duration;var requestTimeRemaining=Playlist.estimateSegmentRequestTime(segmentDuration,measuredBandwidth,this.playlist_,stats.bytesReceived);// Subtract 1 from the timeUntilRebuffer so we still consider an early abort\n// if we are only left with less than 1 second when the request completes.\n// A negative timeUntilRebuffering indicates we are already rebuffering\nvar timeUntilRebuffer$$1=timeUntilRebuffer(this.buffered_(),currentTime,this.hls_.tech_.playbackRate())-1;// Only consider aborting early if the estimated time to finish the download\n// is larger than the estimated time until the player runs out of forward buffer\nif(requestTimeRemaining<=timeUntilRebuffer$$1){return false;}var switchCandidate=minRebufferMaxBandwidthSelector({master:this.hls_.playlists.master,currentTime:currentTime,bandwidth:measuredBandwidth,duration:this.duration_(),segmentDuration:segmentDuration,timeUntilRebuffer:timeUntilRebuffer$$1,currentTimeline:this.currentTimeline_,syncController:this.syncController_});if(!switchCandidate){return;}var rebufferingImpact=requestTimeRemaining-timeUntilRebuffer$$1;var timeSavedBySwitching=rebufferingImpact-switchCandidate.rebufferingImpact;var minimumTimeSaving=0.5;// If we are already rebuffering, increase the amount of variance we add to the\n// potential round trip time of the new request so that we are not too aggressive\n// with switching to a playlist that might save us a fraction of a second.\nif(timeUntilRebuffer$$1<=TIME_FUDGE_FACTOR){minimumTimeSaving=1;}if(!switchCandidate.playlist||switchCandidate.playlist.uri===this.playlist_.uri||timeSavedBySwitching<minimumTimeSaving){return false;}// set the bandwidth to that of the desired playlist being sure to scale by\n// BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it\n// don't trigger a bandwidthupdate as the bandwidth is artifial\nthis.bandwidth=switchCandidate.playlist.attributes.BANDWIDTH*Config.BANDWIDTH_VARIANCE+1;this.abort();this.trigger('earlyabort');return true;}/**\n * XHR `progress` event handler\n *\n * @param {Event}\n * The XHR `progress` event\n * @param {Object} simpleSegment\n * A simplified segment object copy\n * @private\n */},{key:'handleProgress_',value:function handleProgress_(event,simpleSegment){if(!this.pendingSegment_||simpleSegment.requestId!==this.pendingSegment_.requestId||this.abortRequestEarly_(simpleSegment.stats)){return;}this.trigger('progress');}/**\n * load a specific segment from a request into the buffer\n *\n * @private\n */},{key:'loadSegment_',value:function loadSegment_(segmentInfo){this.state='WAITING';this.pendingSegment_=segmentInfo;this.trimBackBuffer_(segmentInfo);segmentInfo.abortRequests=mediaSegmentRequest(this.hls_.xhr,this.xhrOptions_,this.decrypter_,this.captionParser_,this.createSimplifiedSegmentObj_(segmentInfo),// progress callback\nthis.handleProgress_.bind(this),this.segmentRequestFinished_.bind(this));}/**\n * trim the back buffer so that we don't have too much data\n * in the source buffer\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n */},{key:'trimBackBuffer_',value:function trimBackBuffer_(segmentInfo){var removeToTime=safeBackBufferTrimTime(this.seekable_(),this.currentTime_(),this.playlist_.targetDuration||10);// Chrome has a hard limit of 150MB of\n// buffer and a very conservative \"garbage collector\"\n// We manually clear out the old buffer to ensure\n// we don't trigger the QuotaExceeded error\n// on the source buffer during subsequent appends\nif(removeToTime>0){this.remove(0,removeToTime);}}/**\n * created a simplified copy of the segment object with just the\n * information necessary to perform the XHR and decryption\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n * @returns {Object} a simplified segment object copy\n */},{key:'createSimplifiedSegmentObj_',value:function createSimplifiedSegmentObj_(segmentInfo){var segment=segmentInfo.segment;var simpleSegment={resolvedUri:segment.resolvedUri,byterange:segment.byterange,requestId:segmentInfo.requestId};if(segment.key){// if the media sequence is greater than 2^32, the IV will be incorrect\n// assuming 10s segments, that would be about 1300 years\nvar iv=segment.key.iv||new Uint32Array([0,0,0,segmentInfo.mediaIndex+segmentInfo.playlist.mediaSequence]);simpleSegment.key=this.segmentKey(segment.key);simpleSegment.key.iv=iv;}if(segment.map){simpleSegment.map=this.initSegment(segment.map);}return simpleSegment;}/**\n * Handle the callback from the segmentRequest function and set the\n * associated SegmentLoader state and errors if necessary\n *\n * @private\n */},{key:'segmentRequestFinished_',value:function segmentRequestFinished_(error,simpleSegment){// every request counts as a media request even if it has been aborted\n// or canceled due to a timeout\nthis.mediaRequests+=1;if(simpleSegment.stats){this.mediaBytesTransferred+=simpleSegment.stats.bytesReceived;this.mediaTransferDuration+=simpleSegment.stats.roundTripTime;}// The request was aborted and the SegmentLoader has already been reset\nif(!this.pendingSegment_){this.mediaRequestsAborted+=1;return;}// the request was aborted and the SegmentLoader has already started\n// another request. this can happen when the timeout for an aborted\n// request triggers due to a limitation in the XHR library\n// do not count this as any sort of request or we risk double-counting\nif(simpleSegment.requestId!==this.pendingSegment_.requestId){return;}// an error occurred from the active pendingSegment_ so reset everything\nif(error){this.pendingSegment_=null;this.state='READY';// the requests were aborted just record the aborted stat and exit\n// this is not a true error condition and nothing corrective needs\n// to be done\nif(error.code===REQUEST_ERRORS.ABORTED){this.mediaRequestsAborted+=1;return;}this.pause();// the error is really just that at least one of the requests timed-out\n// set the bandwidth to a very low value and trigger an ABR switch to\n// take emergency action\nif(error.code===REQUEST_ERRORS.TIMEOUT){this.mediaRequestsTimedout+=1;this.bandwidth=1;this.roundTrip=NaN;this.trigger('bandwidthupdate');return;}// if control-flow has arrived here, then the error is real\n// emit an error event to blacklist the current playlist\nthis.mediaRequestsErrored+=1;this.error(error);this.trigger('error');return;}// the response was a success so set any bandwidth stats the request\n// generated for ABR purposes\nthis.bandwidth=simpleSegment.stats.bandwidth;this.roundTrip=simpleSegment.stats.roundTripTime;// if this request included an initialization segment, save that data\n// to the initSegment cache\nif(simpleSegment.map){simpleSegment.map=this.initSegment(simpleSegment.map,true);}// if this request included a segment key, save that data in the cache\nif(simpleSegment.key){this.segmentKey(simpleSegment.key,true);}this.processSegmentResponse_(simpleSegment);}/**\n * Move any important data from the simplified segment object\n * back to the real segment object for future phases\n *\n * @private\n */},{key:'processSegmentResponse_',value:function processSegmentResponse_(simpleSegment){var segmentInfo=this.pendingSegment_;segmentInfo.bytes=simpleSegment.bytes;if(simpleSegment.map){segmentInfo.segment.map.bytes=simpleSegment.map.bytes;}segmentInfo.endOfAllRequests=simpleSegment.endOfAllRequests;// This has fmp4 captions, add them to text tracks\nif(simpleSegment.fmp4Captions){createCaptionsTrackIfNotExists(this.inbandTextTracks_,this.hls_.tech_,simpleSegment.captionStreams);addCaptionData({inbandTextTracks:this.inbandTextTracks_,captionArray:simpleSegment.fmp4Captions,// fmp4s will not have a timestamp offset\ntimestampOffset:0});// Reset stored captions since we added parsed\n// captions to a text track at this point\nif(this.captionParser_){this.captionParser_.clearParsedCaptions();}}this.handleSegment_();}/**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */},{key:'handleSegment_',value:function handleSegment_(){var _this3=this;if(!this.pendingSegment_){this.state='READY';return;}var segmentInfo=this.pendingSegment_;var segment=segmentInfo.segment;var timingInfo=this.syncController_.probeSegmentInfo(segmentInfo);// When we have our first timing info, determine what media types this loader is\n// dealing with. Although we're maintaining extra state, it helps to preserve the\n// separation of segment loader from the actual source buffers.\nif(typeof this.startingMedia_==='undefined'&&timingInfo&&(// Guard against cases where we're not getting timing info at all until we are\n// certain that all streams will provide it.\ntimingInfo.containsAudio||timingInfo.containsVideo)){this.startingMedia_={containsAudio:timingInfo.containsAudio,containsVideo:timingInfo.containsVideo};}var illegalMediaSwitchError=illegalMediaSwitch(this.loaderType_,this.startingMedia_,timingInfo);if(illegalMediaSwitchError){this.error({message:illegalMediaSwitchError,blacklistDuration:Infinity});this.trigger('error');return;}if(segmentInfo.isSyncRequest){this.trigger('syncinfoupdate');this.pendingSegment_=null;this.state='READY';return;}if(segmentInfo.timestampOffset!==null&&segmentInfo.timestampOffset!==this.sourceUpdater_.timestampOffset()){// Subtract any difference between the PTS and DTS times of the first frame\n// from the timeStampOffset (which currently equals the buffered.end) to prevent\n// creating any gaps in the buffer\nif(timingInfo&&timingInfo.segmentTimestampInfo){var ptsStartTime=timingInfo.segmentTimestampInfo[0].ptsTime;var dtsStartTime=timingInfo.segmentTimestampInfo[0].dtsTime;segmentInfo.timestampOffset-=ptsStartTime-dtsStartTime;}this.sourceUpdater_.timestampOffset(segmentInfo.timestampOffset);// fired when a timestamp offset is set in HLS (can also identify discontinuities)\nthis.trigger('timestampoffset');}var timelineMapping=this.syncController_.mappingForTimeline(segmentInfo.timeline);if(timelineMapping!==null){this.trigger({type:'segmenttimemapping',mapping:timelineMapping});}this.state='APPENDING';// if the media initialization segment is changing, append it\n// before the content segment\nif(segment.map){var initId=initSegmentId(segment.map);if(!this.activeInitSegmentId_||this.activeInitSegmentId_!==initId){var initSegment=this.initSegment(segment.map);this.sourceUpdater_.appendBuffer({bytes:initSegment.bytes},function(){_this3.activeInitSegmentId_=initId;});}}segmentInfo.byteLength=segmentInfo.bytes.byteLength;if(typeof segment.start==='number'&&typeof segment.end==='number'){this.mediaSecondsLoaded+=segment.end-segment.start;}else{this.mediaSecondsLoaded+=segment.duration;}this.logger_(segmentInfoString(segmentInfo));this.sourceUpdater_.appendBuffer({bytes:segmentInfo.bytes,videoSegmentTimingInfoCallback:this.handleVideoSegmentTimingInfo_.bind(this,segmentInfo.requestId)},this.handleUpdateEnd_.bind(this));}},{key:'handleVideoSegmentTimingInfo_',value:function handleVideoSegmentTimingInfo_(requestId,event){if(!this.pendingSegment_||requestId!==this.pendingSegment_.requestId){return;}var segment=this.pendingSegment_.segment;if(!segment.videoTimingInfo){segment.videoTimingInfo={};}segment.videoTimingInfo.transmuxerPrependedSeconds=event.videoSegmentTimingInfo.prependedContentDuration||0;segment.videoTimingInfo.transmuxedPresentationStart=event.videoSegmentTimingInfo.start.presentation;segment.videoTimingInfo.transmuxedPresentationEnd=event.videoSegmentTimingInfo.end.presentation;// mainly used as a reference for debugging\nsegment.videoTimingInfo.baseMediaDecodeTime=event.videoSegmentTimingInfo.baseMediaDecodeTime;}/**\n * callback to run when appendBuffer is finished. detects if we are\n * in a good state to do things with the data we got, or if we need\n * to wait for more\n *\n * @private\n */},{key:'handleUpdateEnd_',value:function handleUpdateEnd_(){if(!this.pendingSegment_){this.state='READY';if(!this.paused()){this.monitorBuffer_();}return;}var segmentInfo=this.pendingSegment_;var segment=segmentInfo.segment;var isWalkingForward=this.mediaIndex!==null;this.pendingSegment_=null;this.recordThroughput_(segmentInfo);this.addSegmentMetadataCue_(segmentInfo);this.state='READY';this.mediaIndex=segmentInfo.mediaIndex;this.fetchAtBuffer_=true;this.currentTimeline_=segmentInfo.timeline;// We must update the syncinfo to recalculate the seekable range before\n// the following conditional otherwise it may consider this a bad \"guess\"\n// and attempt to resync when the post-update seekable window and live\n// point would mean that this was the perfect segment to fetch\nthis.trigger('syncinfoupdate');// If we previously appended a segment that ends more than 3 targetDurations before\n// the currentTime_ that means that our conservative guess was too conservative.\n// In that case, reset the loader state so that we try to use any information gained\n// from the previous request to create a new, more accurate, sync-point.\nif(segment.end&&this.currentTime_()-segment.end>segmentInfo.playlist.targetDuration*3){this.resetEverything();return;}// Don't do a rendition switch unless we have enough time to get a sync segment\n// and conservatively guess\nif(isWalkingForward){this.trigger('bandwidthupdate');}this.trigger('progress');// any time an update finishes and the last segment is in the\n// buffer, end the stream. this ensures the \"ended\" event will\n// fire if playback reaches that point.\nif(this.isEndOfStream_(segmentInfo.mediaIndex+1,segmentInfo.playlist)){this.endOfStream();}if(!this.paused()){this.monitorBuffer_();}}/**\n * Records the current throughput of the decrypt, transmux, and append\n * portion of the semgment pipeline. `throughput.rate` is a the cumulative\n * moving average of the throughput. `throughput.count` is the number of\n * data points in the average.\n *\n * @private\n * @param {Object} segmentInfo the object returned by loadSegment\n */},{key:'recordThroughput_',value:function recordThroughput_(segmentInfo){var rate=this.throughput.rate;// Add one to the time to ensure that we don't accidentally attempt to divide\n// by zero in the case where the throughput is ridiculously high\nvar segmentProcessingTime=Date.now()-segmentInfo.endOfAllRequests+1;// Multiply by 8000 to convert from bytes/millisecond to bits/second\nvar segmentProcessingThroughput=Math.floor(segmentInfo.byteLength/segmentProcessingTime*8*1000);// This is just a cumulative moving average calculation:\n// newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1)\nthis.throughput.rate+=(segmentProcessingThroughput-rate)/++this.throughput.count;}/**\n * Adds a cue to the segment-metadata track with some metadata information about the\n * segment\n *\n * @private\n * @param {Object} segmentInfo\n * the object returned by loadSegment\n * @method addSegmentMetadataCue_\n */},{key:'addSegmentMetadataCue_',value:function addSegmentMetadataCue_(segmentInfo){if(!this.segmentMetadataTrack_){return;}var segment=segmentInfo.segment;var start=segment.start;var end=segment.end;// Do not try adding the cue if the start and end times are invalid.\nif(!finite(start)||!finite(end)){return;}removeCuesFromTrack(start,end,this.segmentMetadataTrack_);var Cue=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebKitDataCue||global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VTTCue;var value={custom:segment.custom,dateTimeObject:segment.dateTimeObject,dateTimeString:segment.dateTimeString,bandwidth:segmentInfo.playlist.attributes.BANDWIDTH,resolution:segmentInfo.playlist.attributes.RESOLUTION,codecs:segmentInfo.playlist.attributes.CODECS,byteLength:segmentInfo.byteLength,uri:segmentInfo.uri,timeline:segmentInfo.timeline,playlist:segmentInfo.playlist.uri,start:start,end:end};var data=JSON.stringify(value);var cue=new Cue(start,end,data);// Attach the metadata to the value property of the cue to keep consistency between\n// the differences of WebKitDataCue in safari and VTTCue in other browsers\ncue.value=value;this.segmentMetadataTrack_.addCue(cue);}}]);return SegmentLoader;}(videojs$1.EventTarget);var uint8ToUtf8=function uint8ToUtf8(uintArray){return decodeURIComponent(escape(String.fromCharCode.apply(null,uintArray)));};/**\n * @file vtt-segment-loader.js\n */var VTT_LINE_TERMINATORS=new Uint8Array('\\n\\n'.split('').map(function(_char2){return _char2.charCodeAt(0);}));/**\n * An object that manages segment loading and appending.\n *\n * @class VTTSegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */var VTTSegmentLoader=function(_SegmentLoader){inherits(VTTSegmentLoader,_SegmentLoader);function VTTSegmentLoader(settings){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};classCallCheck(this,VTTSegmentLoader);// SegmentLoader requires a MediaSource be specified or it will throw an error;\n// however, VTTSegmentLoader has no need of a media source, so delete the reference\nvar _this=possibleConstructorReturn(this,(VTTSegmentLoader.__proto__||Object.getPrototypeOf(VTTSegmentLoader)).call(this,settings,options));_this.mediaSource_=null;_this.subtitlesTrack_=null;return _this;}/**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */createClass(VTTSegmentLoader,[{key:'buffered_',value:function buffered_(){if(!this.subtitlesTrack_||!this.subtitlesTrack_.cues.length){return videojs$1.createTimeRanges();}var cues=this.subtitlesTrack_.cues;var start=cues[0].startTime;var end=cues[cues.length-1].startTime;return videojs$1.createTimeRanges([[start,end]]);}/**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {Boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */},{key:'initSegment',value:function initSegment(map){var set$$1=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(!map){return null;}var id=initSegmentId(map);var storedMap=this.initSegments_[id];if(set$$1&&!storedMap&&map.bytes){// append WebVTT line terminators to the media initialization segment if it exists\n// to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that\n// requires two or more WebVTT line terminators between the WebVTT header and the\n// rest of the file\nvar combinedByteLength=VTT_LINE_TERMINATORS.byteLength+map.bytes.byteLength;var combinedSegment=new Uint8Array(combinedByteLength);combinedSegment.set(map.bytes);combinedSegment.set(VTT_LINE_TERMINATORS,map.bytes.byteLength);this.initSegments_[id]=storedMap={resolvedUri:map.resolvedUri,byterange:map.byterange,bytes:combinedSegment};}return storedMap||map;}/**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {Boolean} True if the all configuration is ready for loading\n * @private\n */},{key:'couldBeginLoading_',value:function couldBeginLoading_(){return this.playlist_&&this.subtitlesTrack_&&!this.paused();}/**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */},{key:'init_',value:function init_(){this.state='READY';this.resetEverything();return this.monitorBuffer_();}/**\n * Set a subtitle track on the segment loader to add subtitles to\n *\n * @param {TextTrack=} track\n * The text track to add loaded subtitles to\n * @return {TextTrack}\n * Returns the subtitles track\n */},{key:'track',value:function track(_track){if(typeof _track==='undefined'){return this.subtitlesTrack_;}this.subtitlesTrack_=_track;// if we were unpaused but waiting for a sourceUpdater, start\n// buffering now\nif(this.state==='INIT'&&this.couldBeginLoading_()){this.init_();}return this.subtitlesTrack_;}/**\n * Remove any data in the source buffer between start and end times\n * @param {Number} start - the start time of the region to remove from the buffer\n * @param {Number} end - the end time of the region to remove from the buffer\n */},{key:'remove',value:function remove(start,end){removeCuesFromTrack(start,end,this.subtitlesTrack_);}/**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */},{key:'fillBuffer_',value:function fillBuffer_(){var _this2=this;if(!this.syncPoint_){this.syncPoint_=this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_());}// see if we need to begin loading immediately\nvar segmentInfo=this.checkBuffer_(this.buffered_(),this.playlist_,this.mediaIndex,this.hasPlayed_(),this.currentTime_(),this.syncPoint_);segmentInfo=this.skipEmptySegments_(segmentInfo);if(!segmentInfo){return;}if(this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline)===null){// We don't have the timestamp offset that we need to sync subtitles.\n// Rerun on a timestamp offset or user interaction.\nvar checkTimestampOffset=function checkTimestampOffset(){_this2.state='READY';if(!_this2.paused()){// if not paused, queue a buffer check as soon as possible\n_this2.monitorBuffer_();}};this.syncController_.one('timestampoffset',checkTimestampOffset);this.state='WAITING_ON_TIMELINE';return;}this.loadSegment_(segmentInfo);}/**\n * Prevents the segment loader from requesting segments we know contain no subtitles\n * by walking forward until we find the next segment that we don't know whether it is\n * empty or not.\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @return {Object}\n * a segment info object that describes the current segment\n */},{key:'skipEmptySegments_',value:function skipEmptySegments_(segmentInfo){while(segmentInfo&&segmentInfo.segment.empty){segmentInfo=this.generateSegmentInfo_(segmentInfo.playlist,segmentInfo.mediaIndex+1,segmentInfo.startOfSegment+segmentInfo.duration,segmentInfo.isSyncRequest);}return segmentInfo;}/**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */},{key:'handleSegment_',value:function handleSegment_(){var _this3=this;if(!this.pendingSegment_||!this.subtitlesTrack_){this.state='READY';return;}this.state='APPENDING';var segmentInfo=this.pendingSegment_;var segment=segmentInfo.segment;// Make sure that vttjs has loaded, otherwise, wait till it finished loading\nif(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT!=='function'&&this.subtitlesTrack_&&this.subtitlesTrack_.tech_){var loadHandler=void 0;var errorHandler=function errorHandler(){_this3.subtitlesTrack_.tech_.off('vttjsloaded',loadHandler);_this3.error({message:'Error loading vtt.js'});_this3.state='READY';_this3.pause();_this3.trigger('error');};loadHandler=function loadHandler(){_this3.subtitlesTrack_.tech_.off('vttjserror',errorHandler);_this3.handleSegment_();};this.state='WAITING_ON_VTTJS';this.subtitlesTrack_.tech_.one('vttjsloaded',loadHandler);this.subtitlesTrack_.tech_.one('vttjserror',errorHandler);return;}segment.requested=true;try{this.parseVTTCues_(segmentInfo);}catch(e){this.error({message:e.message});this.state='READY';this.pause();return this.trigger('error');}this.updateTimeMapping_(segmentInfo,this.syncController_.timelines[segmentInfo.timeline],this.playlist_);if(segmentInfo.isSyncRequest){this.trigger('syncinfoupdate');this.pendingSegment_=null;this.state='READY';return;}segmentInfo.byteLength=segmentInfo.bytes.byteLength;this.mediaSecondsLoaded+=segment.duration;if(segmentInfo.cues.length){// remove any overlapping cues to prevent doubling\nthis.remove(segmentInfo.cues[0].endTime,segmentInfo.cues[segmentInfo.cues.length-1].endTime);}segmentInfo.cues.forEach(function(cue){_this3.subtitlesTrack_.addCue(cue);});this.handleUpdateEnd_();}/**\n * Uses the WebVTT parser to parse the segment response\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @private\n */},{key:'parseVTTCues_',value:function parseVTTCues_(segmentInfo){var decoder=void 0;var decodeBytesToString=false;if(typeof global_window__WEBPACK_IMPORTED_MODULE_0___default.a.TextDecoder==='function'){decoder=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.TextDecoder('utf8');}else{decoder=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.StringDecoder();decodeBytesToString=true;}var parser=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.WebVTT.Parser(global_window__WEBPACK_IMPORTED_MODULE_0___default.a,global_window__WEBPACK_IMPORTED_MODULE_0___default.a.vttjs,decoder);segmentInfo.cues=[];segmentInfo.timestampmap={MPEGTS:0,LOCAL:0};parser.oncue=segmentInfo.cues.push.bind(segmentInfo.cues);parser.ontimestampmap=function(map){return segmentInfo.timestampmap=map;};parser.onparsingerror=function(error){videojs$1.log.warn('Error encountered when parsing cues: '+error.message);};if(segmentInfo.segment.map){var mapData=segmentInfo.segment.map.bytes;if(decodeBytesToString){mapData=uint8ToUtf8(mapData);}parser.parse(mapData);}var segmentData=segmentInfo.bytes;if(decodeBytesToString){segmentData=uint8ToUtf8(segmentData);}parser.parse(segmentData);parser.flush();}/**\n * Updates the start and end times of any cues parsed by the WebVTT parser using\n * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping\n * from the SyncController\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @param {Object} mappingObj\n * object containing a mapping from TS to media time\n * @param {Object} playlist\n * the playlist object containing the segment\n * @private\n */},{key:'updateTimeMapping_',value:function updateTimeMapping_(segmentInfo,mappingObj,playlist){var segment=segmentInfo.segment;if(!mappingObj){// If the sync controller does not have a mapping of TS to Media Time for the\n// timeline, then we don't have enough information to update the cue\n// start/end times\nreturn;}if(!segmentInfo.cues.length){// If there are no cues, we also do not have enough information to figure out\n// segment timing. Mark that the segment contains no cues so we don't re-request\n// an empty segment.\nsegment.empty=true;return;}var timestampmap=segmentInfo.timestampmap;var diff=timestampmap.MPEGTS/90000-timestampmap.LOCAL+mappingObj.mapping;segmentInfo.cues.forEach(function(cue){// First convert cue time to TS time using the timestamp-map provided within the vtt\ncue.startTime+=diff;cue.endTime+=diff;});if(!playlist.syncInfo){var firstStart=segmentInfo.cues[0].startTime;var lastStart=segmentInfo.cues[segmentInfo.cues.length-1].startTime;playlist.syncInfo={mediaSequence:playlist.mediaSequence+segmentInfo.mediaIndex,time:Math.min(firstStart,lastStart-segment.duration)};}}}]);return VTTSegmentLoader;}(SegmentLoader);/**\n * @file ad-cue-tags.js\n */ /**\n * Searches for an ad cue that overlaps with the given mediaTime\n */var findAdCue=function findAdCue(track,mediaTime){var cues=track.cues;for(var i=0;i<cues.length;i++){var cue=cues[i];if(mediaTime>=cue.adStartTime&&mediaTime<=cue.adEndTime){return cue;}}return null;};var updateAdCues=function updateAdCues(media,track){var offset=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;if(!media.segments){return;}var mediaTime=offset;var cue=void 0;for(var i=0;i<media.segments.length;i++){var segment=media.segments[i];if(!cue){// Since the cues will span for at least the segment duration, adding a fudge\n// factor of half segment duration will prevent duplicate cues from being\n// created when timing info is not exact (e.g. cue start time initialized\n// at 10.006677, but next call mediaTime is 10.003332 )\ncue=findAdCue(track,mediaTime+segment.duration/2);}if(cue){if('cueIn'in segment){// Found a CUE-IN so end the cue\ncue.endTime=mediaTime;cue.adEndTime=mediaTime;mediaTime+=segment.duration;cue=null;continue;}if(mediaTime<cue.endTime){// Already processed this mediaTime for this cue\nmediaTime+=segment.duration;continue;}// otherwise extend cue until a CUE-IN is found\ncue.endTime+=segment.duration;}else{if('cueOut'in segment){cue=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VTTCue(mediaTime,mediaTime+segment.duration,segment.cueOut);cue.adStartTime=mediaTime;// Assumes tag format to be\n// #EXT-X-CUE-OUT:30\ncue.adEndTime=mediaTime+parseFloat(segment.cueOut);track.addCue(cue);}if('cueOutCont'in segment){// Entered into the middle of an ad cue\nvar adOffset=void 0;var adTotal=void 0;// Assumes tag formate to be\n// #EXT-X-CUE-OUT-CONT:10/30\nvar _segment$cueOutCont$s=segment.cueOutCont.split('/').map(parseFloat);var _segment$cueOutCont$s2=slicedToArray(_segment$cueOutCont$s,2);adOffset=_segment$cueOutCont$s2[0];adTotal=_segment$cueOutCont$s2[1];cue=new global_window__WEBPACK_IMPORTED_MODULE_0___default.a.VTTCue(mediaTime,mediaTime+segment.duration,'');cue.adStartTime=mediaTime-adOffset;cue.adEndTime=cue.adStartTime+adTotal;track.addCue(cue);}}mediaTime+=segment.duration;}};/**\n * @file sync-controller.js\n */var tsprobe=mux_js_lib_tools_ts_inspector_js__WEBPACK_IMPORTED_MODULE_12___default.a.inspect;var syncPointStrategies=[// Stategy \"VOD\": Handle the VOD-case where the sync-point is *always*\n// the equivalence display-time 0 === segment-index 0\n{name:'VOD',run:function run(syncController,playlist,duration$$1,currentTimeline,currentTime){if(duration$$1!==Infinity){var syncPoint={time:0,segmentIndex:0};return syncPoint;}return null;}},// Stategy \"ProgramDateTime\": We have a program-date-time tag in this playlist\n{name:'ProgramDateTime',run:function run(syncController,playlist,duration$$1,currentTimeline,currentTime){if(!syncController.datetimeToDisplayTime){return null;}var segments=playlist.segments||[];var syncPoint=null;var lastDistance=null;currentTime=currentTime||0;for(var i=0;i<segments.length;i++){var segment=segments[i];if(segment.dateTimeObject){var segmentTime=segment.dateTimeObject.getTime()/1000;var segmentStart=segmentTime+syncController.datetimeToDisplayTime;var distance=Math.abs(currentTime-segmentStart);// Once the distance begins to increase, or if distance is 0, we have passed\n// currentTime and can stop looking for better candidates\nif(lastDistance!==null&&(distance===0||lastDistance<distance)){break;}lastDistance=distance;syncPoint={time:segmentStart,segmentIndex:i};}}return syncPoint;}},// Stategy \"Segment\": We have a known time mapping for a timeline and a\n// segment in the current timeline with timing data\n{name:'Segment',run:function run(syncController,playlist,duration$$1,currentTimeline,currentTime){var segments=playlist.segments||[];var syncPoint=null;var lastDistance=null;currentTime=currentTime||0;for(var i=0;i<segments.length;i++){var segment=segments[i];if(segment.timeline===currentTimeline&&typeof segment.start!=='undefined'){var distance=Math.abs(currentTime-segment.start);// Once the distance begins to increase, we have passed\n// currentTime and can stop looking for better candidates\nif(lastDistance!==null&&lastDistance<distance){break;}if(!syncPoint||lastDistance===null||lastDistance>=distance){lastDistance=distance;syncPoint={time:segment.start,segmentIndex:i};}}}return syncPoint;}},// Stategy \"Discontinuity\": We have a discontinuity with a known\n// display-time\n{name:'Discontinuity',run:function run(syncController,playlist,duration$$1,currentTimeline,currentTime){var syncPoint=null;currentTime=currentTime||0;if(playlist.discontinuityStarts&&playlist.discontinuityStarts.length){var lastDistance=null;for(var i=0;i<playlist.discontinuityStarts.length;i++){var segmentIndex=playlist.discontinuityStarts[i];var discontinuity=playlist.discontinuitySequence+i+1;var discontinuitySync=syncController.discontinuities[discontinuity];if(discontinuitySync){var distance=Math.abs(currentTime-discontinuitySync.time);// Once the distance begins to increase, we have passed\n// currentTime and can stop looking for better candidates\nif(lastDistance!==null&&lastDistance<distance){break;}if(!syncPoint||lastDistance===null||lastDistance>=distance){lastDistance=distance;syncPoint={time:discontinuitySync.time,segmentIndex:segmentIndex};}}}}return syncPoint;}},// Stategy \"Playlist\": We have a playlist with a known mapping of\n// segment index to display time\n{name:'Playlist',run:function run(syncController,playlist,duration$$1,currentTimeline,currentTime){if(playlist.syncInfo){var syncPoint={time:playlist.syncInfo.time,segmentIndex:playlist.syncInfo.mediaSequence-playlist.mediaSequence};return syncPoint;}return null;}}];var SyncController=function(_videojs$EventTarget){inherits(SyncController,_videojs$EventTarget);function SyncController(){classCallCheck(this,SyncController);// Segment Loader state variables...\n// ...for synching across variants\nvar _this=possibleConstructorReturn(this,(SyncController.__proto__||Object.getPrototypeOf(SyncController)).call(this));_this.inspectCache_=undefined;// ...for synching across variants\n_this.timelines=[];_this.discontinuities=[];_this.datetimeToDisplayTime=null;_this.logger_=logger('SyncController');return _this;}/**\n * Find a sync-point for the playlist specified\n *\n * A sync-point is defined as a known mapping from display-time to\n * a segment-index in the current playlist.\n *\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {Number} duration\n * Duration of the MediaSource (Infinite if playing a live source)\n * @param {Number} currentTimeline\n * The last timeline from which a segment was loaded\n * @returns {Object}\n * A sync-point object\n */createClass(SyncController,[{key:'getSyncPoint',value:function getSyncPoint(playlist,duration$$1,currentTimeline,currentTime){var syncPoints=this.runStrategies_(playlist,duration$$1,currentTimeline,currentTime);if(!syncPoints.length){// Signal that we need to attempt to get a sync-point manually\n// by fetching a segment in the playlist and constructing\n// a sync-point from that information\nreturn null;}// Now find the sync-point that is closest to the currentTime because\n// that should result in the most accurate guess about which segment\n// to fetch\nreturn this.selectSyncPoint_(syncPoints,{key:'time',value:currentTime});}/**\n * Calculate the amount of time that has expired off the playlist during playback\n *\n * @param {Playlist} playlist\n * Playlist object to calculate expired from\n * @param {Number} duration\n * Duration of the MediaSource (Infinity if playling a live source)\n * @returns {Number|null}\n * The amount of time that has expired off the playlist during playback. Null\n * if no sync-points for the playlist can be found.\n */},{key:'getExpiredTime',value:function getExpiredTime(playlist,duration$$1){if(!playlist||!playlist.segments){return null;}var syncPoints=this.runStrategies_(playlist,duration$$1,playlist.discontinuitySequence,0);// Without sync-points, there is not enough information to determine the expired time\nif(!syncPoints.length){return null;}var syncPoint=this.selectSyncPoint_(syncPoints,{key:'segmentIndex',value:0});// If the sync-point is beyond the start of the playlist, we want to subtract the\n// duration from index 0 to syncPoint.segmentIndex instead of adding.\nif(syncPoint.segmentIndex>0){syncPoint.time*=-1;}return Math.abs(syncPoint.time+sumDurations(playlist,syncPoint.segmentIndex,0));}/**\n * Runs each sync-point strategy and returns a list of sync-points returned by the\n * strategies\n *\n * @private\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {Number} duration\n * Duration of the MediaSource (Infinity if playing a live source)\n * @param {Number} currentTimeline\n * The last timeline from which a segment was loaded\n * @returns {Array}\n * A list of sync-point objects\n */},{key:'runStrategies_',value:function runStrategies_(playlist,duration$$1,currentTimeline,currentTime){var syncPoints=[];// Try to find a sync-point in by utilizing various strategies...\nfor(var i=0;i<syncPointStrategies.length;i++){var strategy=syncPointStrategies[i];var syncPoint=strategy.run(this,playlist,duration$$1,currentTimeline,currentTime);if(syncPoint){syncPoint.strategy=strategy.name;syncPoints.push({strategy:strategy.name,syncPoint:syncPoint});}}return syncPoints;}/**\n * Selects the sync-point nearest the specified target\n *\n * @private\n * @param {Array} syncPoints\n * List of sync-points to select from\n * @param {Object} target\n * Object specifying the property and value we are targeting\n * @param {String} target.key\n * Specifies the property to target. Must be either 'time' or 'segmentIndex'\n * @param {Number} target.value\n * The value to target for the specified key.\n * @returns {Object}\n * The sync-point nearest the target\n */},{key:'selectSyncPoint_',value:function selectSyncPoint_(syncPoints,target){var bestSyncPoint=syncPoints[0].syncPoint;var bestDistance=Math.abs(syncPoints[0].syncPoint[target.key]-target.value);var bestStrategy=syncPoints[0].strategy;for(var i=1;i<syncPoints.length;i++){var newDistance=Math.abs(syncPoints[i].syncPoint[target.key]-target.value);if(newDistance<bestDistance){bestDistance=newDistance;bestSyncPoint=syncPoints[i].syncPoint;bestStrategy=syncPoints[i].strategy;}}this.logger_('syncPoint for ['+target.key+': '+target.value+'] chosen with strategy'+(' ['+bestStrategy+']: [time:'+bestSyncPoint.time+',')+(' segmentIndex:'+bestSyncPoint.segmentIndex+']'));return bestSyncPoint;}/**\n * Save any meta-data present on the segments when segments leave\n * the live window to the playlist to allow for synchronization at the\n * playlist level later.\n *\n * @param {Playlist} oldPlaylist - The previous active playlist\n * @param {Playlist} newPlaylist - The updated and most current playlist\n */},{key:'saveExpiredSegmentInfo',value:function saveExpiredSegmentInfo(oldPlaylist,newPlaylist){var mediaSequenceDiff=newPlaylist.mediaSequence-oldPlaylist.mediaSequence;// When a segment expires from the playlist and it has a start time\n// save that information as a possible sync-point reference in future\nfor(var i=mediaSequenceDiff-1;i>=0;i--){var lastRemovedSegment=oldPlaylist.segments[i];if(lastRemovedSegment&&typeof lastRemovedSegment.start!=='undefined'){newPlaylist.syncInfo={mediaSequence:oldPlaylist.mediaSequence+i,time:lastRemovedSegment.start};this.logger_('playlist refresh sync: [time:'+newPlaylist.syncInfo.time+','+(' mediaSequence: '+newPlaylist.syncInfo.mediaSequence+']'));this.trigger('syncinfoupdate');break;}}}/**\n * Save the mapping from playlist's ProgramDateTime to display. This should\n * only ever happen once at the start of playback.\n *\n * @param {Playlist} playlist - The currently active playlist\n */},{key:'setDateTimeMapping',value:function setDateTimeMapping(playlist){if(!this.datetimeToDisplayTime&&playlist.segments&&playlist.segments.length&&playlist.segments[0].dateTimeObject){var playlistTimestamp=playlist.segments[0].dateTimeObject.getTime()/1000;this.datetimeToDisplayTime=-playlistTimestamp;}}/**\n * Reset the state of the inspection cache when we do a rendition\n * switch\n */},{key:'reset',value:function reset(){this.inspectCache_=undefined;}/**\n * Probe or inspect a fmp4 or an mpeg2-ts segment to determine the start\n * and end of the segment in it's internal \"media time\". Used to generate\n * mappings from that internal \"media time\" to the display time that is\n * shown on the player.\n *\n * @param {SegmentInfo} segmentInfo - The current active request information\n */},{key:'probeSegmentInfo',value:function probeSegmentInfo(segmentInfo){var segment=segmentInfo.segment;var playlist=segmentInfo.playlist;var timingInfo=void 0;if(segment.map){timingInfo=this.probeMp4Segment_(segmentInfo);}else{timingInfo=this.probeTsSegment_(segmentInfo);}if(timingInfo){if(this.calculateSegmentTimeMapping_(segmentInfo,timingInfo)){this.saveDiscontinuitySyncInfo_(segmentInfo);// If the playlist does not have sync information yet, record that information\n// now with segment timing information\nif(!playlist.syncInfo){playlist.syncInfo={mediaSequence:playlist.mediaSequence+segmentInfo.mediaIndex,time:segment.start};}}}return timingInfo;}/**\n * Probe an fmp4 or an mpeg2-ts segment to determine the start of the segment\n * in it's internal \"media time\".\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n * @return {object} The start and end time of the current segment in \"media time\"\n */},{key:'probeMp4Segment_',value:function probeMp4Segment_(segmentInfo){var segment=segmentInfo.segment;var timescales=mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10___default.a.timescale(segment.map.bytes);var startTime=mux_js_lib_mp4_probe__WEBPACK_IMPORTED_MODULE_10___default.a.startTime(timescales,segmentInfo.bytes);if(segmentInfo.timestampOffset!==null){segmentInfo.timestampOffset-=startTime;}return{start:startTime,end:startTime+segment.duration};}/**\n * Probe an mpeg2-ts segment to determine the start and end of the segment\n * in it's internal \"media time\".\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n * @return {object} The start and end time of the current segment in \"media time\"\n */},{key:'probeTsSegment_',value:function probeTsSegment_(segmentInfo){var timeInfo=tsprobe(segmentInfo.bytes,this.inspectCache_);var segmentStartTime=void 0;var segmentEndTime=void 0;var segmentTimestampInfo=void 0;if(!timeInfo){return null;}if(timeInfo.video&&timeInfo.video.length===2){this.inspectCache_=timeInfo.video[1].dts;segmentStartTime=timeInfo.video[0].dtsTime;segmentEndTime=timeInfo.video[1].dtsTime;segmentTimestampInfo=timeInfo.video;}else if(timeInfo.audio&&timeInfo.audio.length===2){this.inspectCache_=timeInfo.audio[1].dts;segmentStartTime=timeInfo.audio[0].dtsTime;segmentEndTime=timeInfo.audio[1].dtsTime;segmentTimestampInfo=timeInfo.audio;}var probedInfo={segmentTimestampInfo:segmentTimestampInfo,start:segmentStartTime,end:segmentEndTime,containsVideo:timeInfo.video&&timeInfo.video.length===2,containsAudio:timeInfo.audio&&timeInfo.audio.length===2};return probedInfo;}},{key:'timestampOffsetForTimeline',value:function timestampOffsetForTimeline(timeline){if(typeof this.timelines[timeline]==='undefined'){return null;}return this.timelines[timeline].time;}},{key:'mappingForTimeline',value:function mappingForTimeline(timeline){if(typeof this.timelines[timeline]==='undefined'){return null;}return this.timelines[timeline].mapping;}/**\n * Use the \"media time\" for a segment to generate a mapping to \"display time\" and\n * save that display time to the segment.\n *\n * @private\n * @param {SegmentInfo} segmentInfo\n * The current active request information\n * @param {object} timingInfo\n * The start and end time of the current segment in \"media time\"\n * @returns {Boolean}\n * Returns false if segment time mapping could not be calculated\n */},{key:'calculateSegmentTimeMapping_',value:function calculateSegmentTimeMapping_(segmentInfo,timingInfo){var segment=segmentInfo.segment;var mappingObj=this.timelines[segmentInfo.timeline];if(segmentInfo.timestampOffset!==null){mappingObj={time:segmentInfo.startOfSegment,mapping:segmentInfo.startOfSegment-timingInfo.start};this.timelines[segmentInfo.timeline]=mappingObj;this.trigger('timestampoffset');this.logger_('time mapping for timeline '+segmentInfo.timeline+': '+('[time: '+mappingObj.time+'] [mapping: '+mappingObj.mapping+']'));segment.start=segmentInfo.startOfSegment;segment.end=timingInfo.end+mappingObj.mapping;}else if(mappingObj){segment.start=timingInfo.start+mappingObj.mapping;segment.end=timingInfo.end+mappingObj.mapping;}else{return false;}return true;}/**\n * Each time we have discontinuity in the playlist, attempt to calculate the location\n * in display of the start of the discontinuity and save that. We also save an accuracy\n * value so that we save values with the most accuracy (closest to 0.)\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n */},{key:'saveDiscontinuitySyncInfo_',value:function saveDiscontinuitySyncInfo_(segmentInfo){var playlist=segmentInfo.playlist;var segment=segmentInfo.segment;// If the current segment is a discontinuity then we know exactly where\n// the start of the range and it's accuracy is 0 (greater accuracy values\n// mean more approximation)\nif(segment.discontinuity){this.discontinuities[segment.timeline]={time:segment.start,accuracy:0};}else if(playlist.discontinuityStarts&&playlist.discontinuityStarts.length){// Search for future discontinuities that we can provide better timing\n// information for and save that information for sync purposes\nfor(var i=0;i<playlist.discontinuityStarts.length;i++){var segmentIndex=playlist.discontinuityStarts[i];var discontinuity=playlist.discontinuitySequence+i+1;var mediaIndexDiff=segmentIndex-segmentInfo.mediaIndex;var accuracy=Math.abs(mediaIndexDiff);if(!this.discontinuities[discontinuity]||this.discontinuities[discontinuity].accuracy>accuracy){var time=void 0;if(mediaIndexDiff<0){time=segment.start-sumDurations(playlist,segmentInfo.mediaIndex,segmentIndex);}else{time=segment.end+sumDurations(playlist,segmentInfo.mediaIndex+1,segmentIndex);}this.discontinuities[discontinuity]={time:time,accuracy:accuracy};}}}}}]);return SyncController;}(videojs$1.EventTarget);var Decrypter$1=new shimWorker(\"./decrypter-worker.worker.js\",function(window,document$$1){var self=this;var decrypterWorker=function(){/*\n * pkcs7.pad\n * https://github.com/brightcove/pkcs7\n *\n * Copyright (c) 2014 Brightcove\n * Licensed under the apache2 license.\n */ /**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */function unpad(padded){return padded.subarray(0,padded.byteLength-padded[padded.byteLength-1]);}var classCallCheck=function classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}};var createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();var inherits=function inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+_typeof(superClass));}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;};var possibleConstructorReturn=function possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(_typeof(call)===\"object\"||typeof call===\"function\")?call:self;};/**\n * @file aes.js\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */ /**\n * Expand the S-box tables.\n *\n * @private\n */var precompute=function precompute(){var tables=[[[],[],[],[],[]],[[],[],[],[],[]]];var encTable=tables[0];var decTable=tables[1];var sbox=encTable[4];var sboxInv=decTable[4];var i=void 0;var x=void 0;var xInv=void 0;var d=[];var th=[];var x2=void 0;var x4=void 0;var x8=void 0;var s=void 0;var tEnc=void 0;var tDec=void 0;// Compute double and third tables\nfor(i=0;i<256;i++){th[(d[i]=i<<1^(i>>7)*283)^i]=i;}for(x=xInv=0;!sbox[x];x^=x2||1,xInv=th[xInv]||1){// Compute sbox\ns=xInv^xInv<<1^xInv<<2^xInv<<3^xInv<<4;s=s>>8^s&255^99;sbox[x]=s;sboxInv[s]=x;// Compute MixColumns\nx8=d[x4=d[x2=d[x]]];tDec=x8*0x1010101^x4*0x10001^x2*0x101^x*0x1010100;tEnc=d[s]*0x101^s*0x1010100;for(i=0;i<4;i++){encTable[i][x]=tEnc=tEnc<<24^tEnc>>>8;decTable[i][s]=tDec=tDec<<24^tDec>>>8;}}// Compactify. Considerable speedup on Firefox.\nfor(i=0;i<5;i++){encTable[i]=encTable[i].slice(0);decTable[i]=decTable[i].slice(0);}return tables;};var aesTables=null;/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */var AES=function(){function AES(key){classCallCheck(this,AES);/**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */ // if we have yet to precompute the S-box tables\n// do so now\nif(!aesTables){aesTables=precompute();}// then make a copy of that object for use\nthis._tables=[[aesTables[0][0].slice(),aesTables[0][1].slice(),aesTables[0][2].slice(),aesTables[0][3].slice(),aesTables[0][4].slice()],[aesTables[1][0].slice(),aesTables[1][1].slice(),aesTables[1][2].slice(),aesTables[1][3].slice(),aesTables[1][4].slice()]];var i=void 0;var j=void 0;var tmp=void 0;var encKey=void 0;var decKey=void 0;var sbox=this._tables[0][4];var decTable=this._tables[1];var keyLen=key.length;var rcon=1;if(keyLen!==4&&keyLen!==6&&keyLen!==8){throw new Error('Invalid aes key size');}encKey=key.slice(0);decKey=[];this._key=[encKey,decKey];// schedule encryption keys\nfor(i=keyLen;i<4*keyLen+28;i++){tmp=encKey[i-1];// apply sbox\nif(i%keyLen===0||keyLen===8&&i%keyLen===4){tmp=sbox[tmp>>>24]<<24^sbox[tmp>>16&255]<<16^sbox[tmp>>8&255]<<8^sbox[tmp&255];// shift rows and add rcon\nif(i%keyLen===0){tmp=tmp<<8^tmp>>>24^rcon<<24;rcon=rcon<<1^(rcon>>7)*283;}}encKey[i]=encKey[i-keyLen]^tmp;}// schedule decryption keys\nfor(j=0;i;j++,i--){tmp=encKey[j&3?i:i-4];if(i<=4||j<4){decKey[j]=tmp;}else{decKey[j]=decTable[0][sbox[tmp>>>24]]^decTable[1][sbox[tmp>>16&255]]^decTable[2][sbox[tmp>>8&255]]^decTable[3][sbox[tmp&255]];}}}/**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {Number} encrypted0 the first word to decrypt\n * @param {Number} encrypted1 the second word to decrypt\n * @param {Number} encrypted2 the third word to decrypt\n * @param {Number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {Number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */AES.prototype.decrypt=function decrypt$$1(encrypted0,encrypted1,encrypted2,encrypted3,out,offset){var key=this._key[1];// state variables a,b,c,d are loaded with pre-whitened data\nvar a=encrypted0^key[0];var b=encrypted3^key[1];var c=encrypted2^key[2];var d=encrypted1^key[3];var a2=void 0;var b2=void 0;var c2=void 0;// key.length === 2 ?\nvar nInnerRounds=key.length/4-2;var i=void 0;var kIndex=4;var table=this._tables[1];// load up the tables\nvar table0=table[0];var table1=table[1];var table2=table[2];var table3=table[3];var sbox=table[4];// Inner rounds. Cribbed from OpenSSL.\nfor(i=0;i<nInnerRounds;i++){a2=table0[a>>>24]^table1[b>>16&255]^table2[c>>8&255]^table3[d&255]^key[kIndex];b2=table0[b>>>24]^table1[c>>16&255]^table2[d>>8&255]^table3[a&255]^key[kIndex+1];c2=table0[c>>>24]^table1[d>>16&255]^table2[a>>8&255]^table3[b&255]^key[kIndex+2];d=table0[d>>>24]^table1[a>>16&255]^table2[b>>8&255]^table3[c&255]^key[kIndex+3];kIndex+=4;a=a2;b=b2;c=c2;}// Last round.\nfor(i=0;i<4;i++){out[(3&-i)+offset]=sbox[a>>>24]<<24^sbox[b>>16&255]<<16^sbox[c>>8&255]<<8^sbox[d&255]^key[kIndex++];a2=a;a=b;b=c;c=d;d=a2;}};return AES;}();/**\n * @file stream.js\n */ /**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */var Stream=function(){function Stream(){classCallCheck(this,Stream);this.listeners={};}/**\n * Add a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */Stream.prototype.on=function on(type,listener){if(!this.listeners[type]){this.listeners[type]=[];}this.listeners[type].push(listener);};/**\n * Remove a listener for a specified event type.\n *\n * @param {String} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {Boolean} if we could turn it off or not\n */Stream.prototype.off=function off(type,listener){if(!this.listeners[type]){return false;}var index=this.listeners[type].indexOf(listener);this.listeners[type].splice(index,1);return index>-1;};/**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {String} type the event name\n */Stream.prototype.trigger=function trigger(type){var callbacks=this.listeners[type];if(!callbacks){return;}// Slicing the arguments on every invocation of this method\n// can add a significant amount of overhead. Avoid the\n// intermediate object creation for the common case of a\n// single callback argument\nif(arguments.length===2){var length=callbacks.length;for(var i=0;i<length;++i){callbacks[i].call(this,arguments[1]);}}else{var args=Array.prototype.slice.call(arguments,1);var _length=callbacks.length;for(var _i=0;_i<_length;++_i){callbacks[_i].apply(this,args);}}};/**\n * Destroys the stream and cleans up.\n */Stream.prototype.dispose=function dispose(){this.listeners={};};/**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */Stream.prototype.pipe=function pipe(destination){this.on('data',function(data){destination.push(data);});};return Stream;}();/**\n * @file async-stream.js\n */ /**\n * A wrapper around the Stream class to use setTiemout\n * and run stream \"jobs\" Asynchronously\n *\n * @class AsyncStream\n * @extends Stream\n */var AsyncStream$$1=function(_Stream){inherits(AsyncStream$$1,_Stream);function AsyncStream$$1(){classCallCheck(this,AsyncStream$$1);var _this=possibleConstructorReturn(this,_Stream.call(this,Stream));_this.jobs=[];_this.delay=1;_this.timeout_=null;return _this;}/**\n * process an async job\n *\n * @private\n */AsyncStream$$1.prototype.processJob_=function processJob_(){this.jobs.shift()();if(this.jobs.length){this.timeout_=setTimeout(this.processJob_.bind(this),this.delay);}else{this.timeout_=null;}};/**\n * push a job into the stream\n *\n * @param {Function} job the job to push into the stream\n */AsyncStream$$1.prototype.push=function push(job){this.jobs.push(job);if(!this.timeout_){this.timeout_=setTimeout(this.processJob_.bind(this),this.delay);}};return AsyncStream$$1;}(Stream);/**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */ /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */var ntoh=function ntoh(word){return word<<24|(word&0xff00)<<8|(word&0xff0000)>>8|word>>>24;};/**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */var decrypt$$1=function decrypt$$1(encrypted,key,initVector){// word-level access to the encrypted bytes\nvar encrypted32=new Int32Array(encrypted.buffer,encrypted.byteOffset,encrypted.byteLength>>2);var decipher=new AES(Array.prototype.slice.call(key));// byte and word-level access for the decrypted output\nvar decrypted=new Uint8Array(encrypted.byteLength);var decrypted32=new Int32Array(decrypted.buffer);// temporary variables for working with the IV, encrypted, and\n// decrypted data\nvar init0=void 0;var init1=void 0;var init2=void 0;var init3=void 0;var encrypted0=void 0;var encrypted1=void 0;var encrypted2=void 0;var encrypted3=void 0;// iteration variable\nvar wordIx=void 0;// pull out the words of the IV to ensure we don't modify the\n// passed-in reference and easier access\ninit0=initVector[0];init1=initVector[1];init2=initVector[2];init3=initVector[3];// decrypt four word sequences, applying cipher-block chaining (CBC)\n// to each decrypted block\nfor(wordIx=0;wordIx<encrypted32.length;wordIx+=4){// convert big-endian (network order) words into little-endian\n// (javascript order)\nencrypted0=ntoh(encrypted32[wordIx]);encrypted1=ntoh(encrypted32[wordIx+1]);encrypted2=ntoh(encrypted32[wordIx+2]);encrypted3=ntoh(encrypted32[wordIx+3]);// decrypt the block\ndecipher.decrypt(encrypted0,encrypted1,encrypted2,encrypted3,decrypted32,wordIx);// XOR with the IV, and restore network byte-order to obtain the\n// plaintext\ndecrypted32[wordIx]=ntoh(decrypted32[wordIx]^init0);decrypted32[wordIx+1]=ntoh(decrypted32[wordIx+1]^init1);decrypted32[wordIx+2]=ntoh(decrypted32[wordIx+2]^init2);decrypted32[wordIx+3]=ntoh(decrypted32[wordIx+3]^init3);// setup the IV for the next round\ninit0=encrypted0;init1=encrypted1;init2=encrypted2;init3=encrypted3;}return decrypted;};/**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */var Decrypter$$1=function(){function Decrypter$$1(encrypted,key,initVector,done){classCallCheck(this,Decrypter$$1);var step=Decrypter$$1.STEP;var encrypted32=new Int32Array(encrypted.buffer);var decrypted=new Uint8Array(encrypted.byteLength);var i=0;this.asyncStream_=new AsyncStream$$1();// split up the encryption job and do the individual chunks asynchronously\nthis.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i,i+step),key,initVector,decrypted));for(i=step;i<encrypted32.length;i+=step){initVector=new Uint32Array([ntoh(encrypted32[i-4]),ntoh(encrypted32[i-3]),ntoh(encrypted32[i-2]),ntoh(encrypted32[i-1])]);this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i,i+step),key,initVector,decrypted));}// invoke the done() callback when everything is finished\nthis.asyncStream_.push(function(){// remove pkcs#7 padding from the decrypted bytes\ndone(null,unpad(decrypted));});}/**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {Number} the value of step 32000\n */ /**\n * @private\n */Decrypter$$1.prototype.decryptChunk_=function decryptChunk_(encrypted,key,initVector,decrypted){return function(){var bytes=decrypt$$1(encrypted,key,initVector);decrypted.set(bytes,encrypted.byteOffset);};};createClass(Decrypter$$1,null,[{key:'STEP',get:function get$$1(){// 4 * 8000;\nreturn 32000;}}]);return Decrypter$$1;}();/**\n * @file bin-utils.js\n */ /**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */var createTransferableMessage=function createTransferableMessage(message){var transferable={};Object.keys(message).forEach(function(key){var value=message[key];if(ArrayBuffer.isView(value)){transferable[key]={bytes:value.buffer,byteOffset:value.byteOffset,byteLength:value.byteLength};}else{transferable[key]=value;}});return transferable;};/**\n * Our web worker interface so that things can talk to aes-decrypter\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self\n * the scope for the web worker\n */var DecrypterWorker=function DecrypterWorker(self){self.onmessage=function(event){var data=event.data;var encrypted=new Uint8Array(data.encrypted.bytes,data.encrypted.byteOffset,data.encrypted.byteLength);var key=new Uint32Array(data.key.bytes,data.key.byteOffset,data.key.byteLength/4);var iv=new Uint32Array(data.iv.bytes,data.iv.byteOffset,data.iv.byteLength/4);/* eslint-disable no-new, handle-callback-err */new Decrypter$$1(encrypted,key,iv,function(err,bytes){self.postMessage(createTransferableMessage({source:data.source,decrypted:bytes}),[bytes.buffer]);});/* eslint-enable */};};var decrypterWorker=new DecrypterWorker(self);return decrypterWorker;}();});/**\n * Convert the properties of an HLS track into an audioTrackKind.\n *\n * @private\n */var audioTrackKind_=function audioTrackKind_(properties){var kind=properties[\"default\"]?'main':'alternative';if(properties.characteristics&&properties.characteristics.indexOf('public.accessibility.describes-video')>=0){kind='main-desc';}return kind;};/**\n * Pause provided segment loader and playlist loader if active\n *\n * @param {SegmentLoader} segmentLoader\n * SegmentLoader to pause\n * @param {Object} mediaType\n * Active media type\n * @function stopLoaders\n */var stopLoaders=function stopLoaders(segmentLoader,mediaType){segmentLoader.abort();segmentLoader.pause();if(mediaType&&mediaType.activePlaylistLoader){mediaType.activePlaylistLoader.pause();mediaType.activePlaylistLoader=null;}};/**\n * Start loading provided segment loader and playlist loader\n *\n * @param {PlaylistLoader} playlistLoader\n * PlaylistLoader to start loading\n * @param {Object} mediaType\n * Active media type\n * @function startLoaders\n */var startLoaders=function startLoaders(playlistLoader,mediaType){// Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the\n// playlist loader\nmediaType.activePlaylistLoader=playlistLoader;playlistLoader.load();};/**\n * Returns a function to be called when the media group changes. It performs a\n * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a\n * change of group is merely a rendition switch of the same content at another encoding,\n * rather than a change of content, such as switching audio from English to Spanish.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a non-destructive resync of SegmentLoader when the active media\n * group changes.\n * @function onGroupChanged\n */var onGroupChanged=function onGroupChanged(type,settings){return function(){var _settings$segmentLoad=settings.segmentLoaders,segmentLoader=_settings$segmentLoad[type],mainSegmentLoader=_settings$segmentLoad.main,mediaType=settings.mediaTypes[type];var activeTrack=mediaType.activeTrack();var activeGroup=mediaType.activeGroup(activeTrack);var previousActiveLoader=mediaType.activePlaylistLoader;stopLoaders(segmentLoader,mediaType);if(!activeGroup){// there is no group active\nreturn;}if(!activeGroup.playlistLoader){if(previousActiveLoader){// The previous group had a playlist loader but the new active group does not\n// this means we are switching from demuxed to muxed audio. In this case we want to\n// do a destructive reset of the main segment loader and not restart the audio\n// loaders.\nmainSegmentLoader.resetEverything();}return;}// Non-destructive resync\nsegmentLoader.resyncLoader();startLoaders(activeGroup.playlistLoader,mediaType);};};/**\n * Returns a function to be called when the media track changes. It performs a\n * destructive reset of the SegmentLoader to ensure we start loading as close to\n * currentTime as possible.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a destructive reset of SegmentLoader when the active media\n * track changes.\n * @function onTrackChanged\n */var onTrackChanged=function onTrackChanged(type,settings){return function(){var _settings$segmentLoad2=settings.segmentLoaders,segmentLoader=_settings$segmentLoad2[type],mainSegmentLoader=_settings$segmentLoad2.main,mediaType=settings.mediaTypes[type];var activeTrack=mediaType.activeTrack();var activeGroup=mediaType.activeGroup(activeTrack);var previousActiveLoader=mediaType.activePlaylistLoader;stopLoaders(segmentLoader,mediaType);if(!activeGroup){// there is no group active so we do not want to restart loaders\nreturn;}if(!activeGroup.playlistLoader){// when switching from demuxed audio/video to muxed audio/video (noted by no playlist\n// loader for the audio group), we want to do a destructive reset of the main segment\n// loader and not restart the audio loaders\nmainSegmentLoader.resetEverything();return;}if(previousActiveLoader===activeGroup.playlistLoader){// Nothing has actually changed. This can happen because track change events can fire\n// multiple times for a \"single\" change. One for enabling the new active track, and\n// one for disabling the track that was active\nstartLoaders(activeGroup.playlistLoader,mediaType);return;}if(segmentLoader.track){// For WebVTT, set the new text track in the segmentloader\nsegmentLoader.track(activeTrack);}// destructive reset\nsegmentLoader.resetEverything();startLoaders(activeGroup.playlistLoader,mediaType);};};var onError={/**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning (or error if the playlist is blacklisted) to\n * console and switches back to default audio track.\n * @function onError.AUDIO\n */AUDIO:function AUDIO(type,settings){return function(){var segmentLoader=settings.segmentLoaders[type],mediaType=settings.mediaTypes[type],blacklistCurrentPlaylist=settings.blacklistCurrentPlaylist;stopLoaders(segmentLoader,mediaType);// switch back to default audio track\nvar activeTrack=mediaType.activeTrack();var activeGroup=mediaType.activeGroup();var id=(activeGroup.filter(function(group){return group[\"default\"];})[0]||activeGroup[0]).id;var defaultTrack=mediaType.tracks[id];if(activeTrack===defaultTrack){// Default track encountered an error. All we can do now is blacklist the current\n// rendition and hope another will switch audio groups\nblacklistCurrentPlaylist({message:'Problem encountered loading the default audio track.'});return;}videojs$1.log.warn('Problem encountered loading the alternate audio track.'+'Switching back to default.');for(var trackId in mediaType.tracks){mediaType.tracks[trackId].enabled=mediaType.tracks[trackId]===defaultTrack;}mediaType.onTrackChanged();};},/**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning to console and disables the active subtitle track\n * @function onError.SUBTITLES\n */SUBTITLES:function SUBTITLES(type,settings){return function(){var segmentLoader=settings.segmentLoaders[type],mediaType=settings.mediaTypes[type];videojs$1.log.warn('Problem encountered loading the subtitle track.'+'Disabling subtitle track.');stopLoaders(segmentLoader,mediaType);var track=mediaType.activeTrack();if(track){track.mode='disabled';}mediaType.onTrackChanged();};}};var setupListeners={/**\n * Setup event listeners for audio playlist loader\n *\n * @param {String} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.AUDIO\n */AUDIO:function AUDIO(type,playlistLoader,settings){if(!playlistLoader){// no playlist loader means audio will be muxed with the video\nreturn;}var tech=settings.tech,requestOptions=settings.requestOptions,segmentLoader=settings.segmentLoaders[type];playlistLoader.on('loadedmetadata',function(){var media=playlistLoader.media();segmentLoader.playlist(media,requestOptions);// if the video is already playing, or if this isn't a live video and preload\n// permits, start downloading segments\nif(!tech.paused()||media.endList&&tech.preload()!=='none'){segmentLoader.load();}});playlistLoader.on('loadedplaylist',function(){segmentLoader.playlist(playlistLoader.media(),requestOptions);// If the player isn't paused, ensure that the segment loader is running\nif(!tech.paused()){segmentLoader.load();}});playlistLoader.on('error',onError[type](type,settings));},/**\n * Setup event listeners for subtitle playlist loader\n *\n * @param {String} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.SUBTITLES\n */SUBTITLES:function SUBTITLES(type,playlistLoader,settings){var tech=settings.tech,requestOptions=settings.requestOptions,segmentLoader=settings.segmentLoaders[type],mediaType=settings.mediaTypes[type];playlistLoader.on('loadedmetadata',function(){var media=playlistLoader.media();segmentLoader.playlist(media,requestOptions);segmentLoader.track(mediaType.activeTrack());// if the video is already playing, or if this isn't a live video and preload\n// permits, start downloading segments\nif(!tech.paused()||media.endList&&tech.preload()!=='none'){segmentLoader.load();}});playlistLoader.on('loadedplaylist',function(){segmentLoader.playlist(playlistLoader.media(),requestOptions);// If the player isn't paused, ensure that the segment loader is running\nif(!tech.paused()){segmentLoader.load();}});playlistLoader.on('error',onError[type](type,settings));}};var initialize={/**\n * Setup PlaylistLoaders and AudioTracks for the audio groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.AUDIO\n */'AUDIO':function AUDIO(type,settings){var hls=settings.hls,sourceType=settings.sourceType,segmentLoader=settings.segmentLoaders[type],requestOptions=settings.requestOptions,mediaGroups=settings.master.mediaGroups,_settings$mediaTypes$=settings.mediaTypes[type],groups=_settings$mediaTypes$.groups,tracks=_settings$mediaTypes$.tracks,masterPlaylistLoader=settings.masterPlaylistLoader;// force a default if we have none\nif(!mediaGroups[type]||Object.keys(mediaGroups[type]).length===0){mediaGroups[type]={main:{\"default\":{\"default\":true}}};}for(var groupId in mediaGroups[type]){if(!groups[groupId]){groups[groupId]=[];}// List of playlists that have an AUDIO attribute value matching the current\n// group ID\nfor(var variantLabel in mediaGroups[type][groupId]){var properties=mediaGroups[type][groupId][variantLabel];var playlistLoader=void 0;if(properties.resolvedUri){playlistLoader=new PlaylistLoader(properties.resolvedUri,hls,requestOptions);}else if(properties.playlists&&sourceType==='dash'){playlistLoader=new DashPlaylistLoader(properties.playlists[0],hls,requestOptions,masterPlaylistLoader);}else{// no resolvedUri means the audio is muxed with the video when using this\n// audio track\nplaylistLoader=null;}properties=videojs$1.mergeOptions({id:variantLabel,playlistLoader:playlistLoader},properties);setupListeners[type](type,properties.playlistLoader,settings);groups[groupId].push(properties);if(typeof tracks[variantLabel]==='undefined'){var track=new videojs$1.AudioTrack({id:variantLabel,kind:audioTrackKind_(properties),enabled:false,language:properties.language,\"default\":properties[\"default\"],label:variantLabel});tracks[variantLabel]=track;}}}// setup single error event handler for the segment loader\nsegmentLoader.on('error',onError[type](type,settings));},/**\n * Setup PlaylistLoaders and TextTracks for the subtitle groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.SUBTITLES\n */'SUBTITLES':function SUBTITLES(type,settings){var tech=settings.tech,hls=settings.hls,sourceType=settings.sourceType,segmentLoader=settings.segmentLoaders[type],requestOptions=settings.requestOptions,mediaGroups=settings.master.mediaGroups,_settings$mediaTypes$2=settings.mediaTypes[type],groups=_settings$mediaTypes$2.groups,tracks=_settings$mediaTypes$2.tracks,masterPlaylistLoader=settings.masterPlaylistLoader;for(var groupId in mediaGroups[type]){if(!groups[groupId]){groups[groupId]=[];}for(var variantLabel in mediaGroups[type][groupId]){if(mediaGroups[type][groupId][variantLabel].forced){// Subtitle playlists with the forced attribute are not selectable in Safari.\n// According to Apple's HLS Authoring Specification:\n// If content has forced subtitles and regular subtitles in a given language,\n// the regular subtitles track in that language MUST contain both the forced\n// subtitles and the regular subtitles for that language.\n// Because of this requirement and that Safari does not add forced subtitles,\n// forced subtitles are skipped here to maintain consistent experience across\n// all platforms\ncontinue;}var properties=mediaGroups[type][groupId][variantLabel];var playlistLoader=void 0;if(sourceType==='hls'){playlistLoader=new PlaylistLoader(properties.resolvedUri,hls,requestOptions);}else if(sourceType==='dash'){playlistLoader=new DashPlaylistLoader(properties.playlists[0],hls,requestOptions,masterPlaylistLoader);}properties=videojs$1.mergeOptions({id:variantLabel,playlistLoader:playlistLoader},properties);setupListeners[type](type,properties.playlistLoader,settings);groups[groupId].push(properties);if(typeof tracks[variantLabel]==='undefined'){var track=tech.addRemoteTextTrack({id:variantLabel,kind:'subtitles',\"default\":properties[\"default\"]&&properties.autoselect,language:properties.language,label:variantLabel},false).track;tracks[variantLabel]=track;}}}// setup single error event handler for the segment loader\nsegmentLoader.on('error',onError[type](type,settings));},/**\n * Setup TextTracks for the closed-caption groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize['CLOSED-CAPTIONS']\n */'CLOSED-CAPTIONS':function CLOSEDCAPTIONS(type,settings){var tech=settings.tech,mediaGroups=settings.master.mediaGroups,_settings$mediaTypes$3=settings.mediaTypes[type],groups=_settings$mediaTypes$3.groups,tracks=_settings$mediaTypes$3.tracks;for(var groupId in mediaGroups[type]){if(!groups[groupId]){groups[groupId]=[];}for(var variantLabel in mediaGroups[type][groupId]){var properties=mediaGroups[type][groupId][variantLabel];// We only support CEA608 captions for now, so ignore anything that\n// doesn't use a CCx INSTREAM-ID\nif(!properties.instreamId.match(/CC\\d/)){continue;}// No PlaylistLoader is required for Closed-Captions because the captions are\n// embedded within the video stream\ngroups[groupId].push(videojs$1.mergeOptions({id:variantLabel},properties));if(typeof tracks[variantLabel]==='undefined'){var track=tech.addRemoteTextTrack({id:properties.instreamId,kind:'captions',\"default\":properties[\"default\"]&&properties.autoselect,language:properties.language,label:variantLabel},false).track;tracks[variantLabel]=track;}}}}};/**\n * Returns a function used to get the active group of the provided type\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media group for the provided type. Takes an\n * optional parameter {TextTrack} track. If no track is provided, a list of all\n * variants in the group, otherwise the variant corresponding to the provided\n * track is returned.\n * @function activeGroup\n */var activeGroup=function activeGroup(type,settings){return function(track){var masterPlaylistLoader=settings.masterPlaylistLoader,groups=settings.mediaTypes[type].groups;var media=masterPlaylistLoader.media();if(!media){return null;}var variants=null;if(media.attributes[type]){variants=groups[media.attributes[type]];}variants=variants||groups.main;if(typeof track==='undefined'){return variants;}if(track===null){// An active track was specified so a corresponding group is expected. track === null\n// means no track is currently active so there is no corresponding group\nreturn null;}return variants.filter(function(props){return props.id===track.id;})[0]||null;};};var activeTrack={/**\n * Returns a function used to get the active track of type provided\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.AUDIO\n */AUDIO:function AUDIO(type,settings){return function(){var tracks=settings.mediaTypes[type].tracks;for(var id in tracks){if(tracks[id].enabled){return tracks[id];}}return null;};},/**\n * Returns a function used to get the active track of type provided\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.SUBTITLES\n */SUBTITLES:function SUBTITLES(type,settings){return function(){var tracks=settings.mediaTypes[type].tracks;for(var id in tracks){if(tracks[id].mode==='showing'){return tracks[id];}}return null;};}};/**\n * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles,\n * Closed-Captions) specified in the master manifest.\n *\n * @param {Object} settings\n * Object containing required information for setting up the media groups\n * @param {SegmentLoader} settings.segmentLoaders.AUDIO\n * Audio segment loader\n * @param {SegmentLoader} settings.segmentLoaders.SUBTITLES\n * Subtitle segment loader\n * @param {SegmentLoader} settings.segmentLoaders.main\n * Main segment loader\n * @param {Tech} settings.tech\n * The tech of the player\n * @param {Object} settings.requestOptions\n * XHR request options used by the segment loaders\n * @param {PlaylistLoader} settings.masterPlaylistLoader\n * PlaylistLoader for the master source\n * @param {HlsHandler} settings.hls\n * HLS SourceHandler\n * @param {Object} settings.master\n * The parsed master manifest\n * @param {Object} settings.mediaTypes\n * Object to store the loaders, tracks, and utility methods for each media type\n * @param {Function} settings.blacklistCurrentPlaylist\n * Blacklists the current rendition and forces a rendition switch.\n * @function setupMediaGroups\n */var setupMediaGroups=function setupMediaGroups(settings){['AUDIO','SUBTITLES','CLOSED-CAPTIONS'].forEach(function(type){initialize[type](type,settings);});var mediaTypes=settings.mediaTypes,masterPlaylistLoader=settings.masterPlaylistLoader,tech=settings.tech,hls=settings.hls;// setup active group and track getters and change event handlers\n['AUDIO','SUBTITLES'].forEach(function(type){mediaTypes[type].activeGroup=activeGroup(type,settings);mediaTypes[type].activeTrack=activeTrack[type](type,settings);mediaTypes[type].onGroupChanged=onGroupChanged(type,settings);mediaTypes[type].onTrackChanged=onTrackChanged(type,settings);});// DO NOT enable the default subtitle or caption track.\n// DO enable the default audio track\nvar audioGroup=mediaTypes.AUDIO.activeGroup();var groupId=(audioGroup.filter(function(group){return group[\"default\"];})[0]||audioGroup[0]).id;mediaTypes.AUDIO.tracks[groupId].enabled=true;mediaTypes.AUDIO.onTrackChanged();masterPlaylistLoader.on('mediachange',function(){['AUDIO','SUBTITLES'].forEach(function(type){return mediaTypes[type].onGroupChanged();});});// custom audio track change event handler for usage event\nvar onAudioTrackChanged=function onAudioTrackChanged(){mediaTypes.AUDIO.onTrackChanged();tech.trigger({type:'usage',name:'hls-audio-change'});};tech.audioTracks().addEventListener('change',onAudioTrackChanged);tech.remoteTextTracks().addEventListener('change',mediaTypes.SUBTITLES.onTrackChanged);hls.on('dispose',function(){tech.audioTracks().removeEventListener('change',onAudioTrackChanged);tech.remoteTextTracks().removeEventListener('change',mediaTypes.SUBTITLES.onTrackChanged);});// clear existing audio tracks and add the ones we just created\ntech.clearTracks('audio');for(var id in mediaTypes.AUDIO.tracks){tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]);}};/**\n * Creates skeleton object used to store the loaders, tracks, and utility methods for each\n * media type\n *\n * @return {Object}\n * Object to store the loaders, tracks, and utility methods for each media type\n * @function createMediaTypes\n */var createMediaTypes=function createMediaTypes(){var mediaTypes={};['AUDIO','SUBTITLES','CLOSED-CAPTIONS'].forEach(function(type){mediaTypes[type]={groups:{},tracks:{},activePlaylistLoader:null,activeGroup:noop,activeTrack:noop,onGroupChanged:noop,onTrackChanged:noop};});return mediaTypes;};/**\n * @file master-playlist-controller.js\n */var ABORT_EARLY_BLACKLIST_SECONDS=60*2;var Hls=void 0;// SegmentLoader stats that need to have each loader's\n// values summed to calculate the final value\nvar loaderStats=['mediaRequests','mediaRequestsAborted','mediaRequestsTimedout','mediaRequestsErrored','mediaTransferDuration','mediaBytesTransferred'];var sumLoaderStat=function sumLoaderStat(stat){return this.audioSegmentLoader_[stat]+this.mainSegmentLoader_[stat];};/**\n * the master playlist controller controller all interactons\n * between playlists and segmentloaders. At this time this mainly\n * involves a master playlist and a series of audio playlists\n * if they are available\n *\n * @class MasterPlaylistController\n * @extends videojs.EventTarget\n */var MasterPlaylistController=function(_videojs$EventTarget){inherits(MasterPlaylistController,_videojs$EventTarget);function MasterPlaylistController(options){classCallCheck(this,MasterPlaylistController);var _this=possibleConstructorReturn(this,(MasterPlaylistController.__proto__||Object.getPrototypeOf(MasterPlaylistController)).call(this));var url=options.url,handleManifestRedirects=options.handleManifestRedirects,withCredentials=options.withCredentials,tech=options.tech,bandwidth=options.bandwidth,externHls=options.externHls,useCueTags=options.useCueTags,blacklistDuration=options.blacklistDuration,enableLowInitialPlaylist=options.enableLowInitialPlaylist,sourceType=options.sourceType,seekTo=options.seekTo,cacheEncryptionKeys=options.cacheEncryptionKeys;if(!url){throw new Error('A non-empty playlist URL is required');}Hls=externHls;_this.withCredentials=withCredentials;_this.tech_=tech;_this.hls_=tech.hls;_this.seekTo_=seekTo;_this.sourceType_=sourceType;_this.useCueTags_=useCueTags;_this.blacklistDuration=blacklistDuration;_this.enableLowInitialPlaylist=enableLowInitialPlaylist;if(_this.useCueTags_){_this.cueTagsTrack_=_this.tech_.addTextTrack('metadata','ad-cues');_this.cueTagsTrack_.inBandMetadataTrackDispatchType='';}_this.requestOptions_={withCredentials:withCredentials,handleManifestRedirects:handleManifestRedirects,timeout:null};_this.mediaTypes_=createMediaTypes();_this.mediaSource=new videojs$1.MediaSource();// load the media source into the player\n_this.mediaSource.addEventListener('sourceopen',_this.handleSourceOpen_.bind(_this));_this.seekable_=videojs$1.createTimeRanges();_this.hasPlayed_=function(){return false;};_this.syncController_=new SyncController(options);_this.segmentMetadataTrack_=tech.addRemoteTextTrack({kind:'metadata',label:'segment-metadata'},false).track;_this.decrypter_=new Decrypter$1();_this.inbandTextTracks_={};var segmentLoaderSettings={hls:_this.hls_,mediaSource:_this.mediaSource,currentTime:_this.tech_.currentTime.bind(_this.tech_),seekable:function seekable$$1(){return _this.seekable();},seeking:function seeking(){return _this.tech_.seeking();},duration:function duration$$1(){return _this.mediaSource.duration;},hasPlayed:function hasPlayed(){return _this.hasPlayed_();},goalBufferLength:function goalBufferLength(){return _this.goalBufferLength();},bandwidth:bandwidth,syncController:_this.syncController_,decrypter:_this.decrypter_,sourceType:_this.sourceType_,inbandTextTracks:_this.inbandTextTracks_,cacheEncryptionKeys:cacheEncryptionKeys};_this.masterPlaylistLoader_=_this.sourceType_==='dash'?new DashPlaylistLoader(url,_this.hls_,_this.requestOptions_):new PlaylistLoader(url,_this.hls_,_this.requestOptions_);_this.setupMasterPlaylistLoaderListeners_();// setup segment loaders\n// combined audio/video or just video when alternate audio track is selected\n_this.mainSegmentLoader_=new SegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings,{segmentMetadataTrack:_this.segmentMetadataTrack_,loaderType:'main'}),options);// alternate audio track\n_this.audioSegmentLoader_=new SegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings,{loaderType:'audio'}),options);_this.subtitleSegmentLoader_=new VTTSegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings,{loaderType:'vtt'}),options);_this.setupSegmentLoaderListeners_();// Create SegmentLoader stat-getters\nloaderStats.forEach(function(stat){_this[stat+'_']=sumLoaderStat.bind(_this,stat);});_this.logger_=logger('MPC');_this.masterPlaylistLoader_.load();return _this;}/**\n * Register event handlers on the master playlist loader. A helper\n * function for construction time.\n *\n * @private\n */createClass(MasterPlaylistController,[{key:'setupMasterPlaylistLoaderListeners_',value:function setupMasterPlaylistLoaderListeners_(){var _this2=this;this.masterPlaylistLoader_.on('loadedmetadata',function(){var media=_this2.masterPlaylistLoader_.media();var requestTimeout=media.targetDuration*1.5*1000;// If we don't have any more available playlists, we don't want to\n// timeout the request.\nif(isLowestEnabledRendition(_this2.masterPlaylistLoader_.master,_this2.masterPlaylistLoader_.media())){_this2.requestOptions_.timeout=0;}else{_this2.requestOptions_.timeout=requestTimeout;}// if this isn't a live video and preload permits, start\n// downloading segments\nif(media.endList&&_this2.tech_.preload()!=='none'){_this2.mainSegmentLoader_.playlist(media,_this2.requestOptions_);_this2.mainSegmentLoader_.load();}setupMediaGroups({sourceType:_this2.sourceType_,segmentLoaders:{AUDIO:_this2.audioSegmentLoader_,SUBTITLES:_this2.subtitleSegmentLoader_,main:_this2.mainSegmentLoader_},tech:_this2.tech_,requestOptions:_this2.requestOptions_,masterPlaylistLoader:_this2.masterPlaylistLoader_,hls:_this2.hls_,master:_this2.master(),mediaTypes:_this2.mediaTypes_,blacklistCurrentPlaylist:_this2.blacklistCurrentPlaylist.bind(_this2)});_this2.triggerPresenceUsage_(_this2.master(),media);try{_this2.setupSourceBuffers_();}catch(e){videojs$1.log.warn('Failed to create SourceBuffers',e);return _this2.mediaSource.endOfStream('decode');}_this2.setupFirstPlay();if(!_this2.mediaTypes_.AUDIO.activePlaylistLoader||_this2.mediaTypes_.AUDIO.activePlaylistLoader.media()){_this2.trigger('selectedinitialmedia');}else{// We must wait for the active audio playlist loader to\n// finish setting up before triggering this event so the\n// representations API and EME setup is correct\n_this2.mediaTypes_.AUDIO.activePlaylistLoader.one('loadedmetadata',function(){_this2.trigger('selectedinitialmedia');});}});this.masterPlaylistLoader_.on('loadedplaylist',function(){var updatedPlaylist=_this2.masterPlaylistLoader_.media();if(!updatedPlaylist){// blacklist any variants that are not supported by the browser before selecting\n// an initial media as the playlist selectors do not consider browser support\n_this2.excludeUnsupportedVariants_();var selectedMedia=void 0;if(_this2.enableLowInitialPlaylist){selectedMedia=_this2.selectInitialPlaylist();}if(!selectedMedia){selectedMedia=_this2.selectPlaylist();}_this2.initialMedia_=selectedMedia;_this2.masterPlaylistLoader_.media(_this2.initialMedia_);return;}if(_this2.useCueTags_){_this2.updateAdCues_(updatedPlaylist);}// TODO: Create a new event on the PlaylistLoader that signals\n// that the segments have changed in some way and use that to\n// update the SegmentLoader instead of doing it twice here and\n// on `mediachange`\n_this2.mainSegmentLoader_.playlist(updatedPlaylist,_this2.requestOptions_);_this2.updateDuration();// If the player isn't paused, ensure that the segment loader is running,\n// as it is possible that it was temporarily stopped while waiting for\n// a playlist (e.g., in case the playlist errored and we re-requested it).\nif(!_this2.tech_.paused()){_this2.mainSegmentLoader_.load();if(_this2.audioSegmentLoader_){_this2.audioSegmentLoader_.load();}}if(!updatedPlaylist.endList){var addSeekableRange=function addSeekableRange(){var seekable$$1=_this2.seekable();if(seekable$$1.length!==0){_this2.mediaSource.addSeekableRange_(seekable$$1.start(0),seekable$$1.end(0));}};if(_this2.duration()!==Infinity){var onDurationchange=function onDurationchange(){if(_this2.duration()===Infinity){addSeekableRange();}else{_this2.tech_.one('durationchange',onDurationchange);}};_this2.tech_.one('durationchange',onDurationchange);}else{addSeekableRange();}}});this.masterPlaylistLoader_.on('error',function(){_this2.blacklistCurrentPlaylist(_this2.masterPlaylistLoader_.error);});this.masterPlaylistLoader_.on('mediachanging',function(){_this2.mainSegmentLoader_.abort();_this2.mainSegmentLoader_.pause();});this.masterPlaylistLoader_.on('mediachange',function(){var media=_this2.masterPlaylistLoader_.media();var requestTimeout=media.targetDuration*1.5*1000;// If we don't have any more available playlists, we don't want to\n// timeout the request.\nif(isLowestEnabledRendition(_this2.masterPlaylistLoader_.master,_this2.masterPlaylistLoader_.media())){_this2.requestOptions_.timeout=0;}else{_this2.requestOptions_.timeout=requestTimeout;}// TODO: Create a new event on the PlaylistLoader that signals\n// that the segments have changed in some way and use that to\n// update the SegmentLoader instead of doing it twice here and\n// on `loadedplaylist`\n_this2.mainSegmentLoader_.playlist(media,_this2.requestOptions_);_this2.mainSegmentLoader_.load();_this2.tech_.trigger({type:'mediachange',bubbles:true});});this.masterPlaylistLoader_.on('playlistunchanged',function(){var updatedPlaylist=_this2.masterPlaylistLoader_.media();var playlistOutdated=_this2.stuckAtPlaylistEnd_(updatedPlaylist);if(playlistOutdated){// Playlist has stopped updating and we're stuck at its end. Try to\n// blacklist it and switch to another playlist in the hope that that\n// one is updating (and give the player a chance to re-adjust to the\n// safe live point).\n_this2.blacklistCurrentPlaylist({message:'Playlist no longer updating.'});// useful for monitoring QoS\n_this2.tech_.trigger('playliststuck');}});this.masterPlaylistLoader_.on('renditiondisabled',function(){_this2.tech_.trigger({type:'usage',name:'hls-rendition-disabled'});});this.masterPlaylistLoader_.on('renditionenabled',function(){_this2.tech_.trigger({type:'usage',name:'hls-rendition-enabled'});});}/**\n * A helper function for triggerring presence usage events once per source\n *\n * @private\n */},{key:'triggerPresenceUsage_',value:function triggerPresenceUsage_(master,media){var mediaGroups=master.mediaGroups||{};var defaultDemuxed=true;var audioGroupKeys=Object.keys(mediaGroups.AUDIO);for(var mediaGroup in mediaGroups.AUDIO){for(var label in mediaGroups.AUDIO[mediaGroup]){var properties=mediaGroups.AUDIO[mediaGroup][label];if(!properties.uri){defaultDemuxed=false;}}}if(defaultDemuxed){this.tech_.trigger({type:'usage',name:'hls-demuxed'});}if(Object.keys(mediaGroups.SUBTITLES).length){this.tech_.trigger({type:'usage',name:'hls-webvtt'});}if(Hls.Playlist.isAes(media)){this.tech_.trigger({type:'usage',name:'hls-aes'});}if(Hls.Playlist.isFmp4(media)){this.tech_.trigger({type:'usage',name:'hls-fmp4'});}if(audioGroupKeys.length&&Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length>1){this.tech_.trigger({type:'usage',name:'hls-alternate-audio'});}if(this.useCueTags_){this.tech_.trigger({type:'usage',name:'hls-playlist-cue-tags'});}}/**\n * Register event handlers on the segment loaders. A helper function\n * for construction time.\n *\n * @private\n */},{key:'setupSegmentLoaderListeners_',value:function setupSegmentLoaderListeners_(){var _this3=this;this.mainSegmentLoader_.on('bandwidthupdate',function(){var nextPlaylist=_this3.selectPlaylist();var currentPlaylist=_this3.masterPlaylistLoader_.media();var buffered=_this3.tech_.buffered();var forwardBuffer=buffered.length?buffered.end(buffered.length-1)-_this3.tech_.currentTime():0;var bufferLowWaterLine=_this3.bufferLowWaterLine();// If the playlist is live, then we want to not take low water line into account.\n// This is because in LIVE, the player plays 3 segments from the end of the\n// playlist, and if `BUFFER_LOW_WATER_LINE` is greater than the duration availble\n// in those segments, a viewer will never experience a rendition upswitch.\nif(!currentPlaylist.endList||// For the same reason as LIVE, we ignore the low water line when the VOD\n// duration is below the max potential low water line\n_this3.duration()<Config.MAX_BUFFER_LOW_WATER_LINE||// we want to switch down to lower resolutions quickly to continue playback, but\nnextPlaylist.attributes.BANDWIDTH<currentPlaylist.attributes.BANDWIDTH||// ensure we have some buffer before we switch up to prevent us running out of\n// buffer while loading a higher rendition.\nforwardBuffer>=bufferLowWaterLine){_this3.masterPlaylistLoader_.media(nextPlaylist);}_this3.tech_.trigger('bandwidthupdate');});this.mainSegmentLoader_.on('progress',function(){_this3.trigger('progress');});this.mainSegmentLoader_.on('error',function(){_this3.blacklistCurrentPlaylist(_this3.mainSegmentLoader_.error());});this.mainSegmentLoader_.on('syncinfoupdate',function(){_this3.onSyncInfoUpdate_();});this.mainSegmentLoader_.on('timestampoffset',function(){_this3.tech_.trigger({type:'usage',name:'hls-timestamp-offset'});});this.audioSegmentLoader_.on('syncinfoupdate',function(){_this3.onSyncInfoUpdate_();});this.mainSegmentLoader_.on('ended',function(){_this3.onEndOfStream();});this.mainSegmentLoader_.on('earlyabort',function(){_this3.blacklistCurrentPlaylist({message:'Aborted early because there isn\\'t enough bandwidth to complete the '+'request without rebuffering.'},ABORT_EARLY_BLACKLIST_SECONDS);});this.mainSegmentLoader_.on('reseteverything',function(){// If playing an MTS stream, a videojs.MediaSource is listening for\n// hls-reset to reset caption parsing state in the transmuxer\n_this3.tech_.trigger('hls-reset');});this.mainSegmentLoader_.on('segmenttimemapping',function(event){// If playing an MTS stream in html, a videojs.MediaSource is listening for\n// hls-segment-time-mapping update its internal mapping of stream to display time\n_this3.tech_.trigger({type:'hls-segment-time-mapping',mapping:event.mapping});});this.audioSegmentLoader_.on('ended',function(){_this3.onEndOfStream();});}},{key:'mediaSecondsLoaded_',value:function mediaSecondsLoaded_(){return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded+this.mainSegmentLoader_.mediaSecondsLoaded);}/**\n * Call load on our SegmentLoaders\n */},{key:'load',value:function load(){this.mainSegmentLoader_.load();if(this.mediaTypes_.AUDIO.activePlaylistLoader){this.audioSegmentLoader_.load();}if(this.mediaTypes_.SUBTITLES.activePlaylistLoader){this.subtitleSegmentLoader_.load();}}/**\n * Re-tune playback quality level for the current player\n * conditions without performing destructive actions, like\n * removing already buffered content\n *\n * @private\n */},{key:'smoothQualityChange_',value:function smoothQualityChange_(){var media=this.selectPlaylist();if(media!==this.masterPlaylistLoader_.media()){this.masterPlaylistLoader_.media(media);this.mainSegmentLoader_.resetLoader();// don't need to reset audio as it is reset when media changes\n}}/**\n * Re-tune playback quality level for the current player\n * conditions. This method will perform destructive actions like removing\n * already buffered content in order to readjust the currently active\n * playlist quickly. This is good for manual quality changes\n *\n * @private\n */},{key:'fastQualityChange_',value:function fastQualityChange_(){var _this4=this;var media=this.selectPlaylist();if(media===this.masterPlaylistLoader_.media()){return;}this.masterPlaylistLoader_.media(media);// Delete all buffered data to allow an immediate quality switch, then seek to give\n// the browser a kick to remove any cached frames from the previous rendtion (.04 seconds\n// ahead is roughly the minimum that will accomplish this across a variety of content\n// in IE and Edge, but seeking in place is sufficient on all other browsers)\n// Edge/IE bug: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14600375/\n// Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=651904\nthis.mainSegmentLoader_.resetEverything(function(){// Since this is not a typical seek, we avoid the seekTo method which can cause segments\n// from the previously enabled rendition to load before the new playlist has finished loading\nif(videojs$1.browser.IE_VERSION||videojs$1.browser.IS_EDGE){_this4.tech_.setCurrentTime(_this4.tech_.currentTime()+0.04);}else{_this4.tech_.setCurrentTime(_this4.tech_.currentTime());}});// don't need to reset audio as it is reset when media changes\n}/**\n * Begin playback.\n */},{key:'play',value:function play(){if(this.setupFirstPlay()){return;}if(this.tech_.ended()){this.seekTo_(0);}if(this.hasPlayed_()){this.load();}var seekable$$1=this.tech_.seekable();// if the viewer has paused and we fell out of the live window,\n// seek forward to the live point\nif(this.tech_.duration()===Infinity){if(this.tech_.currentTime()<seekable$$1.start(0)){return this.seekTo_(seekable$$1.end(seekable$$1.length-1));}}}/**\n * Seek to the latest media position if this is a live video and the\n * player and video are loaded and initialized.\n */},{key:'setupFirstPlay',value:function setupFirstPlay(){var _this5=this;var media=this.masterPlaylistLoader_.media();// Check that everything is ready to begin buffering for the first call to play\n// If 1) there is no active media\n// 2) the player is paused\n// 3) the first play has already been setup\n// then exit early\nif(!media||this.tech_.paused()||this.hasPlayed_()){return false;}// when the video is a live stream\nif(!media.endList){var seekable$$1=this.seekable();if(!seekable$$1.length){// without a seekable range, the player cannot seek to begin buffering at the live\n// point\nreturn false;}if(videojs$1.browser.IE_VERSION&&this.tech_.readyState()===0){// IE11 throws an InvalidStateError if you try to set currentTime while the\n// readyState is 0, so it must be delayed until the tech fires loadedmetadata.\nthis.tech_.one('loadedmetadata',function(){_this5.trigger('firstplay');_this5.seekTo_(seekable$$1.end(0));_this5.hasPlayed_=function(){return true;};});return false;}// trigger firstplay to inform the source handler to ignore the next seek event\nthis.trigger('firstplay');// seek to the live point\nthis.seekTo_(seekable$$1.end(0));}this.hasPlayed_=function(){return true;};// we can begin loading now that everything is ready\nthis.load();return true;}/**\n * handle the sourceopen event on the MediaSource\n *\n * @private\n */},{key:'handleSourceOpen_',value:function handleSourceOpen_(){// Only attempt to create the source buffer if none already exist.\n// handleSourceOpen is also called when we are \"re-opening\" a source buffer\n// after `endOfStream` has been called (in response to a seek for instance)\ntry{this.setupSourceBuffers_();}catch(e){videojs$1.log.warn('Failed to create Source Buffers',e);return this.mediaSource.endOfStream('decode');}// if autoplay is enabled, begin playback. This is duplicative of\n// code in video.js but is required because play() must be invoked\n// *after* the media source has opened.\nif(this.tech_.autoplay()){var playPromise=this.tech_.play();// Catch/silence error when a pause interrupts a play request\n// on browsers which return a promise\nif(typeof playPromise!=='undefined'&&typeof playPromise.then==='function'){playPromise.then(null,function(e){});}}this.trigger('sourceopen');}/**\n * Calls endOfStream on the media source when all active stream types have called\n * endOfStream\n *\n * @param {string} streamType\n * Stream type of the segment loader that called endOfStream\n * @private\n */},{key:'onEndOfStream',value:function onEndOfStream(){var isEndOfStream=this.mainSegmentLoader_.ended_;if(this.mediaTypes_.AUDIO.activePlaylistLoader){// if the audio playlist loader exists, then alternate audio is active\nif(!this.mainSegmentLoader_.startingMedia_||this.mainSegmentLoader_.startingMedia_.containsVideo){// if we do not know if the main segment loader contains video yet or if we\n// definitively know the main segment loader contains video, then we need to wait\n// for both main and audio segment loaders to call endOfStream\nisEndOfStream=isEndOfStream&&this.audioSegmentLoader_.ended_;}else{// otherwise just rely on the audio loader\nisEndOfStream=this.audioSegmentLoader_.ended_;}}if(!isEndOfStream){return;}this.logger_('calling mediaSource.endOfStream()');// on chrome calling endOfStream can sometimes cause an exception,\n// even when the media source is in a valid state.\ntry{this.mediaSource.endOfStream();}catch(e){videojs$1.log.warn('Failed to call media source endOfStream',e);}}/**\n * Check if a playlist has stopped being updated\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist has stopped being updated or not\n */},{key:'stuckAtPlaylistEnd_',value:function stuckAtPlaylistEnd_(playlist){var seekable$$1=this.seekable();if(!seekable$$1.length){// playlist doesn't have enough information to determine whether we are stuck\nreturn false;}var expired=this.syncController_.getExpiredTime(playlist,this.mediaSource.duration);if(expired===null){return false;}// does not use the safe live end to calculate playlist end, since we\n// don't want to say we are stuck while there is still content\nvar absolutePlaylistEnd=Hls.Playlist.playlistEnd(playlist,expired);var currentTime=this.tech_.currentTime();var buffered=this.tech_.buffered();if(!buffered.length){// return true if the playhead reached the absolute end of the playlist\nreturn absolutePlaylistEnd-currentTime<=SAFE_TIME_DELTA;}var bufferedEnd=buffered.end(buffered.length-1);// return true if there is too little buffer left and buffer has reached absolute\n// end of playlist\nreturn bufferedEnd-currentTime<=SAFE_TIME_DELTA&&absolutePlaylistEnd-bufferedEnd<=SAFE_TIME_DELTA;}/**\n * Blacklists a playlist when an error occurs for a set amount of time\n * making it unavailable for selection by the rendition selection algorithm\n * and then forces a new playlist (rendition) selection.\n *\n * @param {Object=} error an optional error that may include the playlist\n * to blacklist\n * @param {Number=} blacklistDuration an optional number of seconds to blacklist the\n * playlist\n */},{key:'blacklistCurrentPlaylist',value:function blacklistCurrentPlaylist(){var error=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var blacklistDuration=arguments[1];var currentPlaylist=void 0;var nextPlaylist=void 0;// If the `error` was generated by the playlist loader, it will contain\n// the playlist we were trying to load (but failed) and that should be\n// blacklisted instead of the currently selected playlist which is likely\n// out-of-date in this scenario\ncurrentPlaylist=error.playlist||this.masterPlaylistLoader_.media();blacklistDuration=blacklistDuration||error.blacklistDuration||this.blacklistDuration;// If there is no current playlist, then an error occurred while we were\n// trying to load the master OR while we were disposing of the tech\nif(!currentPlaylist){this.error=error;try{return this.mediaSource.endOfStream('network');}catch(e){return this.trigger('error');}}var isFinalRendition=this.masterPlaylistLoader_.master.playlists.filter(isEnabled).length===1;var playlists=this.masterPlaylistLoader_.master.playlists;if(playlists.length===1){// Never blacklisting this playlist because it's the only playlist\nvideojs$1.log.warn('Problem encountered with the current '+'HLS playlist. Trying again since it is the only playlist.');this.tech_.trigger('retryplaylist');return this.masterPlaylistLoader_.load(isFinalRendition);}if(isFinalRendition){// Since we're on the final non-blacklisted playlist, and we're about to blacklist\n// it, instead of erring the player or retrying this playlist, clear out the current\n// blacklist. This allows other playlists to be attempted in case any have been\n// fixed.\nvideojs$1.log.warn('Removing all playlists from the blacklist because the last '+'rendition is about to be blacklisted.');playlists.forEach(function(playlist){if(playlist.excludeUntil!==Infinity){delete playlist.excludeUntil;}});// Technically we are retrying a playlist, in that we are simply retrying a previous\n// playlist. This is needed for users relying on the retryplaylist event to catch a\n// case where the player might be stuck and looping through \"dead\" playlists.\nthis.tech_.trigger('retryplaylist');}// Blacklist this playlist\ncurrentPlaylist.excludeUntil=Date.now()+blacklistDuration*1000;this.tech_.trigger('blacklistplaylist');this.tech_.trigger({type:'usage',name:'hls-rendition-blacklisted'});// Select a new playlist\nnextPlaylist=this.selectPlaylist();videojs$1.log.warn('Problem encountered with the current HLS playlist.'+(error.message?' '+error.message:'')+' Switching to another playlist.');return this.masterPlaylistLoader_.media(nextPlaylist,isFinalRendition);}/**\n * Pause all segment loaders\n */},{key:'pauseLoading',value:function pauseLoading(){this.mainSegmentLoader_.pause();if(this.mediaTypes_.AUDIO.activePlaylistLoader){this.audioSegmentLoader_.pause();}if(this.mediaTypes_.SUBTITLES.activePlaylistLoader){this.subtitleSegmentLoader_.pause();}}/**\n * set the current time on all segment loaders\n *\n * @param {TimeRange} currentTime the current time to set\n * @return {TimeRange} the current time\n */},{key:'setCurrentTime',value:function setCurrentTime(currentTime){var buffered=findRange(this.tech_.buffered(),currentTime);if(!(this.masterPlaylistLoader_&&this.masterPlaylistLoader_.media())){// return immediately if the metadata is not ready yet\nreturn 0;}// it's clearly an edge-case but don't thrown an error if asked to\n// seek within an empty playlist\nif(!this.masterPlaylistLoader_.media().segments){return 0;}// In flash playback, the segment loaders should be reset on every seek, even\n// in buffer seeks. If the seek location is already buffered, continue buffering as\n// usual\n// TODO: redo this comment\nif(buffered&&buffered.length){return currentTime;}// cancel outstanding requests so we begin buffering at the new\n// location\nthis.mainSegmentLoader_.resetEverything();this.mainSegmentLoader_.abort();if(this.mediaTypes_.AUDIO.activePlaylistLoader){this.audioSegmentLoader_.resetEverything();this.audioSegmentLoader_.abort();}if(this.mediaTypes_.SUBTITLES.activePlaylistLoader){this.subtitleSegmentLoader_.resetEverything();this.subtitleSegmentLoader_.abort();}// start segment loader loading in case they are paused\nthis.load();}/**\n * get the current duration\n *\n * @return {TimeRange} the duration\n */},{key:'duration',value:function duration$$1(){if(!this.masterPlaylistLoader_){return 0;}if(this.mediaSource){return this.mediaSource.duration;}return Hls.Playlist.duration(this.masterPlaylistLoader_.media());}/**\n * check the seekable range\n *\n * @return {TimeRange} the seekable range\n */},{key:'seekable',value:function seekable$$1(){return this.seekable_;}},{key:'onSyncInfoUpdate_',value:function onSyncInfoUpdate_(){var mainSeekable=void 0;var audioSeekable=void 0;if(!this.masterPlaylistLoader_){return;}var media=this.masterPlaylistLoader_.media();if(!media){return;}var expired=this.syncController_.getExpiredTime(media,this.mediaSource.duration);if(expired===null){// not enough information to update seekable\nreturn;}mainSeekable=Hls.Playlist.seekable(media,expired);if(mainSeekable.length===0){return;}if(this.mediaTypes_.AUDIO.activePlaylistLoader){media=this.mediaTypes_.AUDIO.activePlaylistLoader.media();expired=this.syncController_.getExpiredTime(media,this.mediaSource.duration);if(expired===null){return;}audioSeekable=Hls.Playlist.seekable(media,expired);if(audioSeekable.length===0){return;}}var oldEnd=void 0;var oldStart=void 0;if(this.seekable_&&this.seekable_.length){oldEnd=this.seekable_.end(0);oldStart=this.seekable_.start(0);}if(!audioSeekable){// seekable has been calculated based on buffering video data so it\n// can be returned directly\nthis.seekable_=mainSeekable;}else if(audioSeekable.start(0)>mainSeekable.end(0)||mainSeekable.start(0)>audioSeekable.end(0)){// seekables are pretty far off, rely on main\nthis.seekable_=mainSeekable;}else{this.seekable_=videojs$1.createTimeRanges([[audioSeekable.start(0)>mainSeekable.start(0)?audioSeekable.start(0):mainSeekable.start(0),audioSeekable.end(0)<mainSeekable.end(0)?audioSeekable.end(0):mainSeekable.end(0)]]);}// seekable is the same as last time\nif(this.seekable_&&this.seekable_.length){if(this.seekable_.end(0)===oldEnd&&this.seekable_.start(0)===oldStart){return;}}this.logger_('seekable updated ['+printableRange(this.seekable_)+']');this.tech_.trigger('seekablechanged');}/**\n * Update the player duration\n */},{key:'updateDuration',value:function updateDuration(){var _this6=this;var oldDuration=this.mediaSource.duration;var newDuration=Hls.Playlist.duration(this.masterPlaylistLoader_.media());var buffered=this.tech_.buffered();var setDuration=function setDuration(){// on firefox setting the duration may sometimes cause an exception\n// even if the media source is open and source buffers are not\n// updating, something about the media source being in an invalid state.\n_this6.logger_('Setting duration from '+_this6.mediaSource.duration+' => '+newDuration);try{_this6.mediaSource.duration=newDuration;}catch(e){videojs$1.log.warn('Failed to set media source duration',e);}_this6.tech_.trigger('durationchange');_this6.mediaSource.removeEventListener('sourceopen',setDuration);};if(buffered.length>0){newDuration=Math.max(newDuration,buffered.end(buffered.length-1));}// if the duration has changed, invalidate the cached value\nif(oldDuration!==newDuration){// update the duration\nif(this.mediaSource.readyState!=='open'){this.mediaSource.addEventListener('sourceopen',setDuration);}else{setDuration();}}}/**\n * dispose of the MasterPlaylistController and everything\n * that it controls\n */},{key:'dispose',value:function dispose(){var _this7=this;this.decrypter_.terminate();this.masterPlaylistLoader_.dispose();this.mainSegmentLoader_.dispose();['AUDIO','SUBTITLES'].forEach(function(type){var groups=_this7.mediaTypes_[type].groups;for(var id in groups){groups[id].forEach(function(group){if(group.playlistLoader){group.playlistLoader.dispose();}});}});this.audioSegmentLoader_.dispose();this.subtitleSegmentLoader_.dispose();}/**\n * return the master playlist object if we have one\n *\n * @return {Object} the master playlist object that we parsed\n */},{key:'master',value:function master(){return this.masterPlaylistLoader_.master;}/**\n * return the currently selected playlist\n *\n * @return {Object} the currently selected playlist object that we parsed\n */},{key:'media',value:function media(){// playlist loader will not return media if it has not been fully loaded\nreturn this.masterPlaylistLoader_.media()||this.initialMedia_;}/**\n * setup our internal source buffers on our segment Loaders\n *\n * @private\n */},{key:'setupSourceBuffers_',value:function setupSourceBuffers_(){var media=this.masterPlaylistLoader_.media();var mimeTypes=void 0;// wait until a media playlist is available and the Media Source is\n// attached\nif(!media||this.mediaSource.readyState!=='open'){return;}mimeTypes=mimeTypesForPlaylist(this.masterPlaylistLoader_.master,media);if(mimeTypes.length<1){this.error='No compatible SourceBuffer configuration for the variant stream:'+media.resolvedUri;return this.mediaSource.endOfStream('decode');}this.configureLoaderMimeTypes_(mimeTypes);// exclude any incompatible variant streams from future playlist\n// selection\nthis.excludeIncompatibleVariants_(media);}},{key:'configureLoaderMimeTypes_',value:function configureLoaderMimeTypes_(mimeTypes){// If the content is demuxed, we can't start appending segments to a source buffer\n// until both source buffers are set up, or else the browser may not let us add the\n// second source buffer (it will assume we are playing either audio only or video\n// only).\nvar sourceBufferEmitter=// If there is more than one mime type\nmimeTypes.length>1&&// and the first mime type does not have muxed video and audio\nmimeTypes[0].indexOf(',')===-1&&// and the two mime types are different (they can be the same in the case of audio\n// only with alternate audio)\nmimeTypes[0]!==mimeTypes[1]?// then we want to wait on the second source buffer\nnew videojs$1.EventTarget():// otherwise there is no need to wait as the content is either audio only,\n// video only, or muxed content.\nnull;this.mainSegmentLoader_.mimeType(mimeTypes[0],sourceBufferEmitter);if(mimeTypes[1]){this.audioSegmentLoader_.mimeType(mimeTypes[1],sourceBufferEmitter);}}/**\n * Blacklists playlists with codecs that are unsupported by the browser.\n */},{key:'excludeUnsupportedVariants_',value:function excludeUnsupportedVariants_(){this.master().playlists.forEach(function(variant){if(variant.attributes.CODECS&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource&&global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource.isTypeSupported&&!global_window__WEBPACK_IMPORTED_MODULE_0___default.a.MediaSource.isTypeSupported('video/mp4; codecs=\"'+mapLegacyAvcCodecs(variant.attributes.CODECS)+'\"')){variant.excludeUntil=Infinity;}});}/**\n * Blacklist playlists that are known to be codec or\n * stream-incompatible with the SourceBuffer configuration. For\n * instance, Media Source Extensions would cause the video element to\n * stall waiting for video data if you switched from a variant with\n * video and audio to an audio-only one.\n *\n * @param {Object} media a media playlist compatible with the current\n * set of SourceBuffers. Variants in the current master playlist that\n * do not appear to have compatible codec or stream configurations\n * will be excluded from the default playlist selection algorithm\n * indefinitely.\n * @private\n */},{key:'excludeIncompatibleVariants_',value:function excludeIncompatibleVariants_(media){var codecCount=2;var videoCodec=null;var codecs=void 0;if(media.attributes.CODECS){codecs=parseCodecs(media.attributes.CODECS);videoCodec=codecs.videoCodec;codecCount=codecs.codecCount;}this.master().playlists.forEach(function(variant){var variantCodecs={codecCount:2,videoCodec:null};if(variant.attributes.CODECS){variantCodecs=parseCodecs(variant.attributes.CODECS);}// if the streams differ in the presence or absence of audio or\n// video, they are incompatible\nif(variantCodecs.codecCount!==codecCount){variant.excludeUntil=Infinity;}// if h.264 is specified on the current playlist, some flavor of\n// it must be specified on all compatible variants\nif(variantCodecs.videoCodec!==videoCodec){variant.excludeUntil=Infinity;}});}},{key:'updateAdCues_',value:function updateAdCues_(media){var offset=0;var seekable$$1=this.seekable();if(seekable$$1.length){offset=seekable$$1.start(0);}updateAdCues(media,this.cueTagsTrack_,offset);}/**\n * Calculates the desired forward buffer length based on current time\n *\n * @return {Number} Desired forward buffer length in seconds\n */},{key:'goalBufferLength',value:function goalBufferLength(){var currentTime=this.tech_.currentTime();var initial=Config.GOAL_BUFFER_LENGTH;var rate=Config.GOAL_BUFFER_LENGTH_RATE;var max=Math.max(initial,Config.MAX_GOAL_BUFFER_LENGTH);return Math.min(initial+currentTime*rate,max);}/**\n * Calculates the desired buffer low water line based on current time\n *\n * @return {Number} Desired buffer low water line in seconds\n */},{key:'bufferLowWaterLine',value:function bufferLowWaterLine(){var currentTime=this.tech_.currentTime();var initial=Config.BUFFER_LOW_WATER_LINE;var rate=Config.BUFFER_LOW_WATER_LINE_RATE;var max=Math.max(initial,Config.MAX_BUFFER_LOW_WATER_LINE);return Math.min(initial+currentTime*rate,max);}}]);return MasterPlaylistController;}(videojs$1.EventTarget);/**\n * Returns a function that acts as the Enable/disable playlist function.\n *\n * @param {PlaylistLoader} loader - The master playlist loader\n * @param {String} playlistUri - uri of the playlist\n * @param {Function} changePlaylistFn - A function to be called after a\n * playlist's enabled-state has been changed. Will NOT be called if a\n * playlist's enabled-state is unchanged\n * @param {Boolean=} enable - Value to set the playlist enabled-state to\n * or if undefined returns the current enabled-state for the playlist\n * @return {Function} Function for setting/getting enabled\n */var enableFunction=function enableFunction(loader,playlistUri,changePlaylistFn){return function(enable){var playlist=loader.master.playlists[playlistUri];var incompatible=isIncompatible(playlist);var currentlyEnabled=isEnabled(playlist);if(typeof enable==='undefined'){return currentlyEnabled;}if(enable){delete playlist.disabled;}else{playlist.disabled=true;}if(enable!==currentlyEnabled&&!incompatible){// Ensure the outside world knows about our changes\nchangePlaylistFn();if(enable){loader.trigger('renditionenabled');}else{loader.trigger('renditiondisabled');}}return enable;};};/**\n * The representation object encapsulates the publicly visible information\n * in a media playlist along with a setter/getter-type function (enabled)\n * for changing the enabled-state of a particular playlist entry\n *\n * @class Representation\n */var Representation=function Representation(hlsHandler,playlist,id){classCallCheck(this,Representation);var mpc=hlsHandler.masterPlaylistController_,smoothQualityChange=hlsHandler.options_.smoothQualityChange;// Get a reference to a bound version of the quality change function\nvar changeType=smoothQualityChange?'smooth':'fast';var qualityChangeFunction=mpc[changeType+'QualityChange_'].bind(mpc);// some playlist attributes are optional\nif(playlist.attributes.RESOLUTION){var resolution=playlist.attributes.RESOLUTION;this.width=resolution.width;this.height=resolution.height;}this.bandwidth=playlist.attributes.BANDWIDTH;// The id is simply the ordinality of the media playlist\n// within the master playlist\nthis.id=id;// Partially-apply the enableFunction to create a playlist-\n// specific variant\nthis.enabled=enableFunction(hlsHandler.playlists,playlist.uri,qualityChangeFunction);};/**\n * A mixin function that adds the `representations` api to an instance\n * of the HlsHandler class\n * @param {HlsHandler} hlsHandler - An instance of HlsHandler to add the\n * representation API into\n */var renditionSelectionMixin=function renditionSelectionMixin(hlsHandler){var playlists=hlsHandler.playlists;// Add a single API-specific function to the HlsHandler instance\nhlsHandler.representations=function(){return playlists.master.playlists.filter(function(media){return!isIncompatible(media);}).map(function(e,i){return new Representation(hlsHandler,e,e.uri);});};};/**\n * @file playback-watcher.js\n *\n * Playback starts, and now my watch begins. It shall not end until my death. I shall\n * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns\n * and win no glory. I shall live and die at my post. I am the corrector of the underflow.\n * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge\n * my life and honor to the Playback Watch, for this Player and all the Players to come.\n */ // Set of events that reset the playback-watcher time check logic and clear the timeout\nvar timerCancelEvents=['seeking','seeked','pause','playing','error'];/**\n * @class PlaybackWatcher\n */var PlaybackWatcher=function(){/**\n * Represents an PlaybackWatcher object.\n * @constructor\n * @param {object} options an object that includes the tech and settings\n */function PlaybackWatcher(options){var _this=this;classCallCheck(this,PlaybackWatcher);this.tech_=options.tech;this.seekable=options.seekable;this.seekTo=options.seekTo;this.allowSeeksWithinUnsafeLiveWindow=options.allowSeeksWithinUnsafeLiveWindow;this.media=options.media;this.consecutiveUpdates=0;this.lastRecordedTime=null;this.timer_=null;this.checkCurrentTimeTimeout_=null;this.logger_=logger('PlaybackWatcher');this.logger_('initialize');var canPlayHandler=function canPlayHandler(){return _this.monitorCurrentTime_();};var waitingHandler=function waitingHandler(){return _this.techWaiting_();};var cancelTimerHandler=function cancelTimerHandler(){return _this.cancelTimer_();};var fixesBadSeeksHandler=function fixesBadSeeksHandler(){return _this.fixesBadSeeks_();};this.tech_.on('seekablechanged',fixesBadSeeksHandler);this.tech_.on('waiting',waitingHandler);this.tech_.on(timerCancelEvents,cancelTimerHandler);this.tech_.on('canplay',canPlayHandler);// Define the dispose function to clean up our events\nthis.dispose=function(){_this.logger_('dispose');_this.tech_.off('seekablechanged',fixesBadSeeksHandler);_this.tech_.off('waiting',waitingHandler);_this.tech_.off(timerCancelEvents,cancelTimerHandler);_this.tech_.off('canplay',canPlayHandler);if(_this.checkCurrentTimeTimeout_){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(_this.checkCurrentTimeTimeout_);}_this.cancelTimer_();};}/**\n * Periodically check current time to see if playback stopped\n *\n * @private\n */createClass(PlaybackWatcher,[{key:'monitorCurrentTime_',value:function monitorCurrentTime_(){this.checkCurrentTime_();if(this.checkCurrentTimeTimeout_){global_window__WEBPACK_IMPORTED_MODULE_0___default.a.clearTimeout(this.checkCurrentTimeTimeout_);}// 42 = 24 fps // 250 is what Webkit uses // FF uses 15\nthis.checkCurrentTimeTimeout_=global_window__WEBPACK_IMPORTED_MODULE_0___default.a.setTimeout(this.monitorCurrentTime_.bind(this),250);}/**\n * The purpose of this function is to emulate the \"waiting\" event on\n * browsers that do not emit it when they are waiting for more\n * data to continue playback\n *\n * @private\n */},{key:'checkCurrentTime_',value:function checkCurrentTime_(){if(this.tech_.seeking()&&this.fixesBadSeeks_()){this.consecutiveUpdates=0;this.lastRecordedTime=this.tech_.currentTime();return;}if(this.tech_.paused()||this.tech_.seeking()){return;}var currentTime=this.tech_.currentTime();var buffered=this.tech_.buffered();if(this.lastRecordedTime===currentTime&&(!buffered.length||currentTime+SAFE_TIME_DELTA>=buffered.end(buffered.length-1))){// If current time is at the end of the final buffered region, then any playback\n// stall is most likely caused by buffering in a low bandwidth environment. The tech\n// should fire a `waiting` event in this scenario, but due to browser and tech\n// inconsistencies. Calling `techWaiting_` here allows us to simulate\n// responding to a native `waiting` event when the tech fails to emit one.\nreturn this.techWaiting_();}if(this.consecutiveUpdates>=5&¤tTime===this.lastRecordedTime){this.consecutiveUpdates++;this.waiting_();}else if(currentTime===this.lastRecordedTime){this.consecutiveUpdates++;}else{this.consecutiveUpdates=0;this.lastRecordedTime=currentTime;}}/**\n * Cancels any pending timers and resets the 'timeupdate' mechanism\n * designed to detect that we are stalled\n *\n * @private\n */},{key:'cancelTimer_',value:function cancelTimer_(){this.consecutiveUpdates=0;if(this.timer_){this.logger_('cancelTimer_');clearTimeout(this.timer_);}this.timer_=null;}/**\n * Fixes situations where there's a bad seek\n *\n * @return {Boolean} whether an action was taken to fix the seek\n * @private\n */},{key:'fixesBadSeeks_',value:function fixesBadSeeks_(){var seeking=this.tech_.seeking();if(!seeking){return false;}var seekable=this.seekable();var currentTime=this.tech_.currentTime();var isAfterSeekableRange=this.afterSeekableWindow_(seekable,currentTime,this.media(),this.allowSeeksWithinUnsafeLiveWindow);var seekTo=void 0;if(isAfterSeekableRange){var seekableEnd=seekable.end(seekable.length-1);// sync to live point (if VOD, our seekable was updated and we're simply adjusting)\nseekTo=seekableEnd;}if(this.beforeSeekableWindow_(seekable,currentTime)){var seekableStart=seekable.start(0);// sync to the beginning of the live window\n// provide a buffer of .1 seconds to handle rounding/imprecise numbers\nseekTo=seekableStart+SAFE_TIME_DELTA;}if(typeof seekTo!=='undefined'){this.logger_('Trying to seek outside of seekable at time '+currentTime+' with '+('seekable range '+printableRange(seekable)+'. Seeking to ')+(seekTo+'.'));this.seekTo(seekTo);return true;}return false;}/**\n * Handler for situations when we determine the player is waiting.\n *\n * @private\n */},{key:'waiting_',value:function waiting_(){if(this.techWaiting_()){return;}// All tech waiting checks failed. Use last resort correction\nvar currentTime=this.tech_.currentTime();var buffered=this.tech_.buffered();var currentRange=findRange(buffered,currentTime);// Sometimes the player can stall for unknown reasons within a contiguous buffered\n// region with no indication that anything is amiss (seen in Firefox). Seeking to\n// currentTime is usually enough to kickstart the player. This checks that the player\n// is currently within a buffered region before attempting a corrective seek.\n// Chrome does not appear to continue `timeupdate` events after a `waiting` event\n// until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also\n// make sure there is ~3 seconds of forward buffer before taking any corrective action\n// to avoid triggering an `unknownwaiting` event when the network is slow.\nif(currentRange.length&¤tTime+3<=currentRange.end(0)){this.cancelTimer_();this.seekTo(currentTime);this.logger_('Stopped at '+currentTime+' while inside a buffered region '+('['+currentRange.start(0)+' -> '+currentRange.end(0)+']. Attempting to resume ')+'playback by seeking to the current time.');// unknown waiting corrections may be useful for monitoring QoS\nthis.tech_.trigger({type:'usage',name:'hls-unknown-waiting'});return;}}/**\n * Handler for situations when the tech fires a `waiting` event\n *\n * @return {Boolean}\n * True if an action (or none) was needed to correct the waiting. False if no\n * checks passed\n * @private\n */},{key:'techWaiting_',value:function techWaiting_(){var seekable=this.seekable();var currentTime=this.tech_.currentTime();if(this.tech_.seeking()&&this.fixesBadSeeks_()){// Tech is seeking or bad seek fixed, no action needed\nreturn true;}if(this.tech_.seeking()||this.timer_!==null){// Tech is seeking or already waiting on another action, no action needed\nreturn true;}if(this.beforeSeekableWindow_(seekable,currentTime)){var livePoint=seekable.end(seekable.length-1);this.logger_('Fell out of live window at time '+currentTime+'. Seeking to '+('live point (seekable end) '+livePoint));this.cancelTimer_();this.seekTo(livePoint);// live window resyncs may be useful for monitoring QoS\nthis.tech_.trigger({type:'usage',name:'hls-live-resync'});return true;}var buffered=this.tech_.buffered();var nextRange=findNextRange(buffered,currentTime);if(this.videoUnderflow_(nextRange,buffered,currentTime)){// Even though the video underflowed and was stuck in a gap, the audio overplayed\n// the gap, leading currentTime into a buffered range. Seeking to currentTime\n// allows the video to catch up to the audio position without losing any audio\n// (only suffering ~3 seconds of frozen video and a pause in audio playback).\nthis.cancelTimer_();this.seekTo(currentTime);// video underflow may be useful for monitoring QoS\nthis.tech_.trigger({type:'usage',name:'hls-video-underflow'});return true;}// check for gap\nif(nextRange.length>0){var difference=nextRange.start(0)-currentTime;this.logger_('Stopped at '+currentTime+', setting timer for '+difference+', seeking '+('to '+nextRange.start(0)));this.timer_=setTimeout(this.skipTheGap_.bind(this),difference*1000,currentTime);return true;}// All checks failed. Returning false to indicate failure to correct waiting\nreturn false;}},{key:'afterSeekableWindow_',value:function afterSeekableWindow_(seekable,currentTime,playlist){var allowSeeksWithinUnsafeLiveWindow=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(!seekable.length){// we can't make a solid case if there's no seekable, default to false\nreturn false;}var allowedEnd=seekable.end(seekable.length-1)+SAFE_TIME_DELTA;var isLive=!playlist.endList;if(isLive&&allowSeeksWithinUnsafeLiveWindow){allowedEnd=seekable.end(seekable.length-1)+playlist.targetDuration*3;}if(currentTime>allowedEnd){return true;}return false;}},{key:'beforeSeekableWindow_',value:function beforeSeekableWindow_(seekable,currentTime){if(seekable.length&&// can't fall before 0 and 0 seekable start identifies VOD stream\nseekable.start(0)>0&¤tTime<seekable.start(0)-SAFE_TIME_DELTA){return true;}return false;}},{key:'videoUnderflow_',value:function videoUnderflow_(nextRange,buffered,currentTime){if(nextRange.length===0){// Even if there is no available next range, there is still a possibility we are\n// stuck in a gap due to video underflow.\nvar gap=this.gapFromVideoUnderflow_(buffered,currentTime);if(gap){this.logger_('Encountered a gap in video from '+gap.start+' to '+gap.end+'. '+('Seeking to current time '+currentTime));return true;}}return false;}/**\n * Timer callback. If playback still has not proceeded, then we seek\n * to the start of the next buffered region.\n *\n * @private\n */},{key:'skipTheGap_',value:function skipTheGap_(scheduledCurrentTime){var buffered=this.tech_.buffered();var currentTime=this.tech_.currentTime();var nextRange=findNextRange(buffered,currentTime);this.cancelTimer_();if(nextRange.length===0||currentTime!==scheduledCurrentTime){return;}this.logger_('skipTheGap_:','currentTime:',currentTime,'scheduled currentTime:',scheduledCurrentTime,'nextRange start:',nextRange.start(0));// only seek if we still have not played\nthis.seekTo(nextRange.start(0)+TIME_FUDGE_FACTOR);this.tech_.trigger({type:'usage',name:'hls-gap-skip'});}},{key:'gapFromVideoUnderflow_',value:function gapFromVideoUnderflow_(buffered,currentTime){// At least in Chrome, if there is a gap in the video buffer, the audio will continue\n// playing for ~3 seconds after the video gap starts. This is done to account for\n// video buffer underflow/underrun (note that this is not done when there is audio\n// buffer underflow/underrun -- in that case the video will stop as soon as it\n// encounters the gap, as audio stalls are more noticeable/jarring to a user than\n// video stalls). The player's time will reflect the playthrough of audio, so the\n// time will appear as if we are in a buffered region, even if we are stuck in a\n// \"gap.\"\n//\n// Example:\n// video buffer: 0 => 10.1, 10.2 => 20\n// audio buffer: 0 => 20\n// overall buffer: 0 => 10.1, 10.2 => 20\n// current time: 13\n//\n// Chrome's video froze at 10 seconds, where the video buffer encountered the gap,\n// however, the audio continued playing until it reached ~3 seconds past the gap\n// (13 seconds), at which point it stops as well. Since current time is past the\n// gap, findNextRange will return no ranges.\n//\n// To check for this issue, we see if there is a gap that starts somewhere within\n// a 3 second range (3 seconds +/- 1 second) back from our current time.\nvar gaps=findGaps(buffered);for(var i=0;i<gaps.length;i++){var start=gaps.start(i);var end=gaps.end(i);// gap is starts no more than 4 seconds back\nif(currentTime-start<4&¤tTime-start>2){return{start:start,end:end};}}return null;}}]);return PlaybackWatcher;}();var defaultOptions={errorInterval:30,getSource:function getSource(next){var tech=this.tech({IWillNotUseThisInPlugins:true});var sourceObj=tech.currentSource_;return next(sourceObj);}};/**\n * Main entry point for the plugin\n *\n * @param {Player} player a reference to a videojs Player instance\n * @param {Object} [options] an object with plugin options\n * @private\n */var initPlugin=function initPlugin(player,options){var lastCalled=0;var seekTo=0;var localOptions=videojs$1.mergeOptions(defaultOptions,options);player.ready(function(){player.trigger({type:'usage',name:'hls-error-reload-initialized'});});/**\n * Player modifications to perform that must wait until `loadedmetadata`\n * has been triggered\n *\n * @private\n */var loadedMetadataHandler=function loadedMetadataHandler(){if(seekTo){player.currentTime(seekTo);}};/**\n * Set the source on the player element, play, and seek if necessary\n *\n * @param {Object} sourceObj An object specifying the source url and mime-type to play\n * @private\n */var setSource=function setSource(sourceObj){if(sourceObj===null||sourceObj===undefined){return;}seekTo=player.duration()!==Infinity&&player.currentTime()||0;player.one('loadedmetadata',loadedMetadataHandler);player.src(sourceObj);player.trigger({type:'usage',name:'hls-error-reload'});player.play();};/**\n * Attempt to get a source from either the built-in getSource function\n * or a custom function provided via the options\n *\n * @private\n */var errorHandler=function errorHandler(){// Do not attempt to reload the source if a source-reload occurred before\n// 'errorInterval' time has elapsed since the last source-reload\nif(Date.now()-lastCalled<localOptions.errorInterval*1000){player.trigger({type:'usage',name:'hls-error-reload-canceled'});return;}if(!localOptions.getSource||typeof localOptions.getSource!=='function'){videojs$1.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');return;}lastCalled=Date.now();return localOptions.getSource.call(player,setSource);};/**\n * Unbind any event handlers that were bound by the plugin\n *\n * @private\n */var cleanupEvents=function cleanupEvents(){player.off('loadedmetadata',loadedMetadataHandler);player.off('error',errorHandler);player.off('dispose',cleanupEvents);};/**\n * Cleanup before re-initializing the plugin\n *\n * @param {Object} [newOptions] an object with plugin options\n * @private\n */var reinitPlugin=function reinitPlugin(newOptions){cleanupEvents();initPlugin(player,newOptions);};player.on('error',errorHandler);player.on('dispose',cleanupEvents);// Overwrite the plugin function so that we can correctly cleanup before\n// initializing the plugin\nplayer.reloadSourceOnError=reinitPlugin;};/**\n * Reload the source when an error is detected as long as there\n * wasn't an error previously within the last 30 seconds\n *\n * @param {Object} [options] an object with plugin options\n */var reloadSourceOnError=function reloadSourceOnError(options){initPlugin(this,options);};var version$1=\"1.10.6\";// since VHS handles HLS and DASH (and in the future, more types), use * to capture all\nvideojs$1.use('*',function(player){return{setSource:function setSource(srcObj,next){// pass null as the first argument to indicate that the source is not rejected\nnext(null,srcObj);},// VHS needs to know when seeks happen. For external seeks (generated at the player\n// level), this middleware will capture the action. For internal seeks (generated at\n// the tech level), we use a wrapped function so that we can handle it on our own\n// (specified elsewhere).\nsetCurrentTime:function setCurrentTime(time){if(player.vhs&&player.currentSource().src===player.vhs.source_.src){player.vhs.setCurrentTime(time);}return time;},// Sync VHS after play requests.\n// This specifically handles replay where the order of actions is\n// play, video element will seek to 0 (skipping the setCurrentTime middleware)\n// then triggers a play event.\nplay:function play(){if(player.vhs&&player.currentSource().src===player.vhs.source_.src){player.vhs.setCurrentTime(player.tech_.currentTime());}}};});/**\n * @file videojs-http-streaming.js\n *\n * The main file for the HLS project.\n * License: https://github.com/videojs/videojs-http-streaming/blob/master/LICENSE\n */var Hls$1={PlaylistLoader:PlaylistLoader,Playlist:Playlist,Decrypter:aes_decrypter__WEBPACK_IMPORTED_MODULE_13__[\"Decrypter\"],AsyncStream:aes_decrypter__WEBPACK_IMPORTED_MODULE_13__[\"AsyncStream\"],decrypt:aes_decrypter__WEBPACK_IMPORTED_MODULE_13__[\"decrypt\"],utils:utils,STANDARD_PLAYLIST_SELECTOR:lastBandwidthSelector,INITIAL_PLAYLIST_SELECTOR:lowestBitrateCompatibleVariantSelector,comparePlaylistBandwidth:comparePlaylistBandwidth,comparePlaylistResolution:comparePlaylistResolution,xhr:xhrFactory()};// Define getter/setters for config properites\n['GOAL_BUFFER_LENGTH','MAX_GOAL_BUFFER_LENGTH','GOAL_BUFFER_LENGTH_RATE','BUFFER_LOW_WATER_LINE','MAX_BUFFER_LOW_WATER_LINE','BUFFER_LOW_WATER_LINE_RATE','BANDWIDTH_VARIANCE'].forEach(function(prop){Object.defineProperty(Hls$1,prop,{get:function get$$1(){videojs$1.log.warn('using Hls.'+prop+' is UNSAFE be sure you know what you are doing');return Config[prop];},set:function set$$1(value){videojs$1.log.warn('using Hls.'+prop+' is UNSAFE be sure you know what you are doing');if(typeof value!=='number'||value<0){videojs$1.log.warn('value of Hls.'+prop+' must be greater than or equal to 0');return;}Config[prop]=value;}});});var LOCAL_STORAGE_KEY$1='videojs-vhs';var simpleTypeFromSourceType=function simpleTypeFromSourceType(type){var mpegurlRE=/^(audio|video|application)\\/(x-|vnd\\.apple\\.)?mpegurl/i;if(mpegurlRE.test(type)){return'hls';}var dashRE=/^application\\/dash\\+xml/i;if(dashRE.test(type)){return'dash';}return null;};/**\n * Updates the selectedIndex of the QualityLevelList when a mediachange happens in hls.\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to update.\n * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info.\n * @function handleHlsMediaChange\n */var handleHlsMediaChange=function handleHlsMediaChange(qualityLevels,playlistLoader){var newPlaylist=playlistLoader.media();var selectedIndex=-1;for(var i=0;i<qualityLevels.length;i++){if(qualityLevels[i].id===newPlaylist.uri){selectedIndex=i;break;}}qualityLevels.selectedIndex_=selectedIndex;qualityLevels.trigger({selectedIndex:selectedIndex,type:'change'});};/**\n * Adds quality levels to list once playlist metadata is available\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to.\n * @param {Object} hls Hls object to listen to for media events.\n * @function handleHlsLoadedMetadata\n */var handleHlsLoadedMetadata=function handleHlsLoadedMetadata(qualityLevels,hls){hls.representations().forEach(function(rep){qualityLevels.addQualityLevel(rep);});handleHlsMediaChange(qualityLevels,hls.playlists);};// HLS is a source handler, not a tech. Make sure attempts to use it\n// as one do not cause exceptions.\nHls$1.canPlaySource=function(){return videojs$1.log.warn('HLS is no longer a tech. Please remove it from '+'your player\\'s techOrder.');};var emeKeySystems=function emeKeySystems(keySystemOptions,videoPlaylist,audioPlaylist){if(!keySystemOptions){return keySystemOptions;}// upsert the content types based on the selected playlist\nvar keySystemContentTypes={};for(var keySystem in keySystemOptions){keySystemContentTypes[keySystem]={audioContentType:'audio/mp4; codecs=\"'+audioPlaylist.attributes.CODECS+'\"',videoContentType:'video/mp4; codecs=\"'+videoPlaylist.attributes.CODECS+'\"'};if(videoPlaylist.contentProtection&&videoPlaylist.contentProtection[keySystem]&&videoPlaylist.contentProtection[keySystem].pssh){keySystemContentTypes[keySystem].pssh=videoPlaylist.contentProtection[keySystem].pssh;}// videojs-contrib-eme accepts the option of specifying: 'com.some.cdm': 'url'\n// so we need to prevent overwriting the URL entirely\nif(typeof keySystemOptions[keySystem]==='string'){keySystemContentTypes[keySystem].url=keySystemOptions[keySystem];}}return videojs$1.mergeOptions(keySystemOptions,keySystemContentTypes);};var setupEmeOptions=function setupEmeOptions(hlsHandler){if(hlsHandler.options_.sourceType!=='dash'){return;}var player=videojs$1.players[hlsHandler.tech_.options_.playerId];if(player.eme){var sourceOptions=emeKeySystems(hlsHandler.source_.keySystems,hlsHandler.playlists.media(),hlsHandler.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader.media());if(sourceOptions){player.currentSource().keySystems=sourceOptions;// works around https://bugs.chromium.org/p/chromium/issues/detail?id=895449\nif(player.eme.initializeMediaKeys){player.eme.initializeMediaKeys();}}}};var getVhsLocalStorage=function getVhsLocalStorage(){if(!window.localStorage){return null;}var storedObject=window.localStorage.getItem(LOCAL_STORAGE_KEY$1);if(!storedObject){return null;}try{return JSON.parse(storedObject);}catch(e){// someone may have tampered with the value\nreturn null;}};var updateVhsLocalStorage=function updateVhsLocalStorage(options){if(!window.localStorage){return false;}var objectToStore=getVhsLocalStorage();objectToStore=objectToStore?videojs$1.mergeOptions(objectToStore,options):options;try{window.localStorage.setItem(LOCAL_STORAGE_KEY$1,JSON.stringify(objectToStore));}catch(e){// Throws if storage is full (e.g., always on iOS 5+ Safari private mode, where\n// storage is set to 0).\n// https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#Exceptions\n// No need to perform any operation.\nreturn false;}return objectToStore;};/**\n * Whether the browser has built-in HLS support.\n */Hls$1.supportsNativeHls=function(){var video=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video');// native HLS is definitely not supported if HTML5 video isn't\nif(!videojs$1.getTech('Html5').isSupported()){return false;}// HLS manifests can go by many mime-types\nvar canPlay=[// Apple santioned\n'application/vnd.apple.mpegurl',// Apple sanctioned for backwards compatibility\n'audio/mpegurl',// Very common\n'audio/x-mpegurl',// Very common\n'application/x-mpegurl',// Included for completeness\n'video/x-mpegurl','video/mpegurl','application/mpegurl'];return canPlay.some(function(canItPlay){return /maybe|probably/i.test(video.canPlayType(canItPlay));});}();Hls$1.supportsNativeDash=function(){if(!videojs$1.getTech('Html5').isSupported()){return false;}return /maybe|probably/i.test(global_document__WEBPACK_IMPORTED_MODULE_1___default.a.createElement('video').canPlayType('application/dash+xml'));}();Hls$1.supportsTypeNatively=function(type){if(type==='hls'){return Hls$1.supportsNativeHls;}if(type==='dash'){return Hls$1.supportsNativeDash;}return false;};/**\n * HLS is a source handler, not a tech. Make sure attempts to use it\n * as one do not cause exceptions.\n */Hls$1.isSupported=function(){return videojs$1.log.warn('HLS is no longer a tech. Please remove it from '+'your player\\'s techOrder.');};var Component$1=videojs$1.getComponent('Component');/**\n * The Hls Handler object, where we orchestrate all of the parts\n * of HLS to interact with video.js\n *\n * @class HlsHandler\n * @extends videojs.Component\n * @param {Object} source the soruce object\n * @param {Tech} tech the parent tech object\n * @param {Object} options optional and required options\n */var HlsHandler=function(_Component){inherits(HlsHandler,_Component);function HlsHandler(source,tech,options){classCallCheck(this,HlsHandler);// tech.player() is deprecated but setup a reference to HLS for\n// backwards-compatibility\nvar _this=possibleConstructorReturn(this,(HlsHandler.__proto__||Object.getPrototypeOf(HlsHandler)).call(this,tech,options.hls));if(tech.options_&&tech.options_.playerId){var _player=videojs$1(tech.options_.playerId);if(!_player.hasOwnProperty('hls')){Object.defineProperty(_player,'hls',{get:function get$$1(){videojs$1.log.warn('player.hls is deprecated. Use player.tech().hls instead.');tech.trigger({type:'usage',name:'hls-player-access'});return _this;},configurable:true});}// Set up a reference to the HlsHandler from player.vhs. This allows users to start\n// migrating from player.tech_.hls... to player.vhs... for API access. Although this\n// isn't the most appropriate form of reference for video.js (since all APIs should\n// be provided through core video.js), it is a common pattern for plugins, and vhs\n// will act accordingly.\n_player.vhs=_this;// deprecated, for backwards compatibility\n_player.dash=_this;_this.player_=_player;}_this.tech_=tech;_this.source_=source;_this.stats={};_this.setOptions_();if(_this.options_.overrideNative&&tech.overrideNativeAudioTracks&&tech.overrideNativeVideoTracks){tech.overrideNativeAudioTracks(true);tech.overrideNativeVideoTracks(true);}else if(_this.options_.overrideNative&&(tech.featuresNativeVideoTracks||tech.featuresNativeAudioTracks)){// overriding native HLS only works if audio tracks have been emulated\n// error early if we're misconfigured\nthrow new Error('Overriding native HLS requires emulated tracks. '+'See https://git.io/vMpjB');}// listen for fullscreenchange events for this player so that we\n// can adjust our quality selection quickly\n_this.on(global_document__WEBPACK_IMPORTED_MODULE_1___default.a,['fullscreenchange','webkitfullscreenchange','mozfullscreenchange','MSFullscreenChange'],function(event){var fullscreenElement=global_document__WEBPACK_IMPORTED_MODULE_1___default.a.fullscreenElement||global_document__WEBPACK_IMPORTED_MODULE_1___default.a.webkitFullscreenElement||global_document__WEBPACK_IMPORTED_MODULE_1___default.a.mozFullScreenElement||global_document__WEBPACK_IMPORTED_MODULE_1___default.a.msFullscreenElement;if(fullscreenElement&&fullscreenElement.contains(_this.tech_.el())){_this.masterPlaylistController_.smoothQualityChange_();}});// Handle seeking when looping - middleware doesn't handle this seek event from the tech\n_this.on(_this.tech_,'seeking',function(){if(this.tech_.currentTime()===0&&this.tech_.player_.loop()){this.setCurrentTime(0);}});_this.on(_this.tech_,'error',function(){if(this.masterPlaylistController_){this.masterPlaylistController_.pauseLoading();}});_this.on(_this.tech_,'play',_this.play);return _this;}createClass(HlsHandler,[{key:'setOptions_',value:function setOptions_(){var _this2=this;// defaults\nthis.options_.withCredentials=this.options_.withCredentials||false;this.options_.handleManifestRedirects=this.options_.handleManifestRedirects||false;this.options_.limitRenditionByPlayerDimensions=this.options_.limitRenditionByPlayerDimensions===false?false:true;this.options_.smoothQualityChange=this.options_.smoothQualityChange||false;this.options_.useBandwidthFromLocalStorage=typeof this.source_.useBandwidthFromLocalStorage!=='undefined'?this.source_.useBandwidthFromLocalStorage:this.options_.useBandwidthFromLocalStorage||false;this.options_.customTagParsers=this.options_.customTagParsers||[];this.options_.customTagMappers=this.options_.customTagMappers||[];this.options_.cacheEncryptionKeys=this.options_.cacheEncryptionKeys||false;if(typeof this.options_.blacklistDuration!=='number'){this.options_.blacklistDuration=5*60;}if(typeof this.options_.bandwidth!=='number'){if(this.options_.useBandwidthFromLocalStorage){var storedObject=getVhsLocalStorage();if(storedObject&&storedObject.bandwidth){this.options_.bandwidth=storedObject.bandwidth;this.tech_.trigger({type:'usage',name:'hls-bandwidth-from-local-storage'});}if(storedObject&&storedObject.throughput){this.options_.throughput=storedObject.throughput;this.tech_.trigger({type:'usage',name:'hls-throughput-from-local-storage'});}}}// if bandwidth was not set by options or pulled from local storage, start playlist\n// selection at a reasonable bandwidth\nif(typeof this.options_.bandwidth!=='number'){this.options_.bandwidth=Config.INITIAL_BANDWIDTH;}// If the bandwidth number is unchanged from the initial setting\n// then this takes precedence over the enableLowInitialPlaylist option\nthis.options_.enableLowInitialPlaylist=this.options_.enableLowInitialPlaylist&&this.options_.bandwidth===Config.INITIAL_BANDWIDTH;// grab options passed to player.src\n['withCredentials','limitRenditionByPlayerDimensions','bandwidth','smoothQualityChange','customTagParsers','customTagMappers','handleManifestRedirects','cacheEncryptionKeys'].forEach(function(option){if(typeof _this2.source_[option]!=='undefined'){_this2.options_[option]=_this2.source_[option];}});this.limitRenditionByPlayerDimensions=this.options_.limitRenditionByPlayerDimensions;}/**\n * called when player.src gets called, handle a new source\n *\n * @param {Object} src the source object to handle\n */},{key:'src',value:function src(_src,type){var _this3=this;// do nothing if the src is falsey\nif(!_src){return;}this.setOptions_();// add master playlist controller options\nthis.options_.url=this.source_.src;this.options_.tech=this.tech_;this.options_.externHls=Hls$1;this.options_.sourceType=simpleTypeFromSourceType(type);// Whenever we seek internally, we should update both the tech and call our own\n// setCurrentTime function. This is needed because \"seeking\" events aren't always\n// reliable. External seeks (via the player object) are handled via middleware.\nthis.options_.seekTo=function(time){_this3.tech_.setCurrentTime(time);_this3.setCurrentTime(time);};this.masterPlaylistController_=new MasterPlaylistController(this.options_);this.playbackWatcher_=new PlaybackWatcher(videojs$1.mergeOptions(this.options_,{seekable:function seekable$$1(){return _this3.seekable();},media:function media(){return _this3.masterPlaylistController_.media();}}));this.masterPlaylistController_.on('error',function(){var player=videojs$1.players[_this3.tech_.options_.playerId];player.error(_this3.masterPlaylistController_.error);});// `this` in selectPlaylist should be the HlsHandler for backwards\n// compatibility with < v2\nthis.masterPlaylistController_.selectPlaylist=this.selectPlaylist?this.selectPlaylist.bind(this):Hls$1.STANDARD_PLAYLIST_SELECTOR.bind(this);this.masterPlaylistController_.selectInitialPlaylist=Hls$1.INITIAL_PLAYLIST_SELECTOR.bind(this);// re-expose some internal objects for backwards compatibility with < v2\nthis.playlists=this.masterPlaylistController_.masterPlaylistLoader_;this.mediaSource=this.masterPlaylistController_.mediaSource;// Proxy assignment of some properties to the master playlist\n// controller. Using a custom property for backwards compatibility\n// with < v2\nObject.defineProperties(this,{selectPlaylist:{get:function get$$1(){return this.masterPlaylistController_.selectPlaylist;},set:function set$$1(selectPlaylist){this.masterPlaylistController_.selectPlaylist=selectPlaylist.bind(this);}},throughput:{get:function get$$1(){return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate;},set:function set$$1(throughput){this.masterPlaylistController_.mainSegmentLoader_.throughput.rate=throughput;// By setting `count` to 1 the throughput value becomes the starting value\n// for the cumulative average\nthis.masterPlaylistController_.mainSegmentLoader_.throughput.count=1;}},bandwidth:{get:function get$$1(){return this.masterPlaylistController_.mainSegmentLoader_.bandwidth;},set:function set$$1(bandwidth){this.masterPlaylistController_.mainSegmentLoader_.bandwidth=bandwidth;// setting the bandwidth manually resets the throughput counter\n// `count` is set to zero that current value of `rate` isn't included\n// in the cumulative average\nthis.masterPlaylistController_.mainSegmentLoader_.throughput={rate:0,count:0};}},/**\n * `systemBandwidth` is a combination of two serial processes bit-rates. The first\n * is the network bitrate provided by `bandwidth` and the second is the bitrate of\n * the entire process after that - decryption, transmuxing, and appending - provided\n * by `throughput`.\n *\n * Since the two process are serial, the overall system bandwidth is given by:\n * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput)\n */systemBandwidth:{get:function get$$1(){var invBandwidth=1/(this.bandwidth||1);var invThroughput=void 0;if(this.throughput>0){invThroughput=1/this.throughput;}else{invThroughput=0;}var systemBitrate=Math.floor(1/(invBandwidth+invThroughput));return systemBitrate;},set:function set$$1(){videojs$1.log.error('The \"systemBandwidth\" property is read-only');}}});if(this.options_.bandwidth){this.bandwidth=this.options_.bandwidth;}if(this.options_.throughput){this.throughput=this.options_.throughput;}Object.defineProperties(this.stats,{bandwidth:{get:function get$$1(){return _this3.bandwidth||0;},enumerable:true},mediaRequests:{get:function get$$1(){return _this3.masterPlaylistController_.mediaRequests_()||0;},enumerable:true},mediaRequestsAborted:{get:function get$$1(){return _this3.masterPlaylistController_.mediaRequestsAborted_()||0;},enumerable:true},mediaRequestsTimedout:{get:function get$$1(){return _this3.masterPlaylistController_.mediaRequestsTimedout_()||0;},enumerable:true},mediaRequestsErrored:{get:function get$$1(){return _this3.masterPlaylistController_.mediaRequestsErrored_()||0;},enumerable:true},mediaTransferDuration:{get:function get$$1(){return _this3.masterPlaylistController_.mediaTransferDuration_()||0;},enumerable:true},mediaBytesTransferred:{get:function get$$1(){return _this3.masterPlaylistController_.mediaBytesTransferred_()||0;},enumerable:true},mediaSecondsLoaded:{get:function get$$1(){return _this3.masterPlaylistController_.mediaSecondsLoaded_()||0;},enumerable:true},buffered:{get:function get$$1(){return timeRangesToArray(_this3.tech_.buffered());},enumerable:true},currentTime:{get:function get$$1(){return _this3.tech_.currentTime();},enumerable:true},currentSource:{get:function get$$1(){return _this3.tech_.currentSource_;},enumerable:true},currentTech:{get:function get$$1(){return _this3.tech_.name_;},enumerable:true},duration:{get:function get$$1(){return _this3.tech_.duration();},enumerable:true},master:{get:function get$$1(){return _this3.playlists.master;},enumerable:true},playerDimensions:{get:function get$$1(){return _this3.tech_.currentDimensions();},enumerable:true},seekable:{get:function get$$1(){return timeRangesToArray(_this3.tech_.seekable());},enumerable:true},timestamp:{get:function get$$1(){return Date.now();},enumerable:true},videoPlaybackQuality:{get:function get$$1(){return _this3.tech_.getVideoPlaybackQuality();},enumerable:true}});this.tech_.one('canplay',this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_));this.tech_.on('bandwidthupdate',function(){if(_this3.options_.useBandwidthFromLocalStorage){updateVhsLocalStorage({bandwidth:_this3.bandwidth,throughput:Math.round(_this3.throughput)});}});this.masterPlaylistController_.on('selectedinitialmedia',function(){// Add the manual rendition mix-in to HlsHandler\nrenditionSelectionMixin(_this3);setupEmeOptions(_this3);});// the bandwidth of the primary segment loader is our best\n// estimate of overall bandwidth\nthis.on(this.masterPlaylistController_,'progress',function(){this.tech_.trigger('progress');});this.tech_.ready(function(){return _this3.setupQualityLevels_();});// do nothing if the tech has been disposed already\n// this can occur if someone sets the src in player.ready(), for instance\nif(!this.tech_.el()){return;}this.tech_.src(videojs$1.URL.createObjectURL(this.masterPlaylistController_.mediaSource));}/**\n * Initializes the quality levels and sets listeners to update them.\n *\n * @method setupQualityLevels_\n * @private\n */},{key:'setupQualityLevels_',value:function setupQualityLevels_(){var _this4=this;var player=videojs$1.players[this.tech_.options_.playerId];if(player&&player.qualityLevels){this.qualityLevels_=player.qualityLevels();this.masterPlaylistController_.on('selectedinitialmedia',function(){handleHlsLoadedMetadata(_this4.qualityLevels_,_this4);});this.playlists.on('mediachange',function(){handleHlsMediaChange(_this4.qualityLevels_,_this4.playlists);});}}/**\n * Begin playing the video.\n */},{key:'play',value:function play(){this.masterPlaylistController_.play();}/**\n * a wrapper around the function in MasterPlaylistController\n */},{key:'setCurrentTime',value:function setCurrentTime(currentTime){this.masterPlaylistController_.setCurrentTime(currentTime);}/**\n * a wrapper around the function in MasterPlaylistController\n */},{key:'duration',value:function duration$$1(){return this.masterPlaylistController_.duration();}/**\n * a wrapper around the function in MasterPlaylistController\n */},{key:'seekable',value:function seekable$$1(){return this.masterPlaylistController_.seekable();}/**\n * Abort all outstanding work and cleanup.\n */},{key:'dispose',value:function dispose(){if(this.playbackWatcher_){this.playbackWatcher_.dispose();}if(this.masterPlaylistController_){this.masterPlaylistController_.dispose();}if(this.qualityLevels_){this.qualityLevels_.dispose();}if(this.player_){delete this.player_.vhs;delete this.player_.dash;delete this.player_.hls;}if(this.tech_&&this.tech_.hls){delete this.tech_.hls;}get$1(HlsHandler.prototype.__proto__||Object.getPrototypeOf(HlsHandler.prototype),'dispose',this).call(this);}},{key:'convertToProgramTime',value:function convertToProgramTime(time,callback){return getProgramTime({playlist:this.masterPlaylistController_.media(),time:time,callback:callback});}// the player must be playing before calling this\n},{key:'seekToProgramTime',value:function seekToProgramTime$$1(programTime,callback){var pauseAfterSeek=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var retryCount=arguments.length>3&&arguments[3]!==undefined?arguments[3]:2;return seekToProgramTime({programTime:programTime,playlist:this.masterPlaylistController_.media(),retryCount:retryCount,pauseAfterSeek:pauseAfterSeek,seekTo:this.options_.seekTo,tech:this.options_.tech,callback:callback});}}]);return HlsHandler;}(Component$1);/**\n * The Source Handler object, which informs video.js what additional\n * MIME types are supported and sets up playback. It is registered\n * automatically to the appropriate tech based on the capabilities of\n * the browser it is running in. It is not necessary to use or modify\n * this object in normal usage.\n */var HlsSourceHandler={name:'videojs-http-streaming',VERSION:version$1,canHandleSource:function canHandleSource(srcObj){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var localOptions=videojs$1.mergeOptions(videojs$1.options,options);return HlsSourceHandler.canPlayType(srcObj.type,localOptions);},handleSource:function handleSource(source,tech){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var localOptions=videojs$1.mergeOptions(videojs$1.options,options);tech.hls=new HlsHandler(source,tech,localOptions);tech.hls.xhr=xhrFactory();tech.hls.src(source.src,source.type);return tech.hls;},canPlayType:function canPlayType(type){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var _videojs$mergeOptions=videojs$1.mergeOptions(videojs$1.options,options),overrideNative=_videojs$mergeOptions.hls.overrideNative;var supportedType=simpleTypeFromSourceType(type);var canUseMsePlayback=supportedType&&(!Hls$1.supportsTypeNatively(supportedType)||overrideNative);return canUseMsePlayback?'maybe':'';}};if(typeof videojs$1.MediaSource==='undefined'||typeof videojs$1.URL==='undefined'){videojs$1.MediaSource=MediaSource;videojs$1.URL=URL$1;}// register source handlers with the appropriate techs\nif(MediaSource.supportsNativeMediaSources()){videojs$1.getTech('Html5').registerSourceHandler(HlsSourceHandler,0);}videojs$1.HlsHandler=HlsHandler;videojs$1.HlsSourceHandler=HlsSourceHandler;videojs$1.Hls=Hls$1;if(!videojs$1.use){videojs$1.registerComponent('Hls',Hls$1);}videojs$1.options.hls=videojs$1.options.hls||{};if(videojs$1.registerPlugin){videojs$1.registerPlugin('reloadSourceOnError',reloadSourceOnError);}else{videojs$1.plugin('reloadSourceOnError',reloadSourceOnError);}/* harmony default export */ __webpack_exports__[\"default\"] = (videojs$1);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL2Rpc3QvdmlkZW8uZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL2Rpc3QvdmlkZW8uZXMuanM/NjY1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBWaWRlby5qcyA3LjYuNiA8aHR0cDovL3ZpZGVvanMuY29tLz5cbiAqIENvcHlyaWdodCBCcmlnaHRjb3ZlLCBJbmMuIDxodHRwczovL3d3dy5icmlnaHRjb3ZlLmNvbS8+XG4gKiBBdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjBcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9ibG9iL21hc3Rlci9MSUNFTlNFPlxuICpcbiAqIEluY2x1ZGVzIHZ0dC5qcyA8aHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvdnR0LmpzPlxuICogQXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wXG4gKiA8aHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvdnR0LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0U+XG4gKi9cblxuaW1wb3J0IHdpbmRvdyQxIGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQgc2FmZVBhcnNlVHVwbGUgZnJvbSAnc2FmZS1qc29uLXBhcnNlL3R1cGxlJztcbmltcG9ydCBrZXljb2RlIGZyb20gJ2tleWNvZGUnO1xuaW1wb3J0IFhIUiBmcm9tICd4aHInO1xuaW1wb3J0IHZ0dCBmcm9tICd2aWRlb2pzLXZ0dC5qcyc7XG5pbXBvcnQgVVJMVG9vbGtpdCBmcm9tICd1cmwtdG9vbGtpdCc7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdtM3U4LXBhcnNlcic7XG5pbXBvcnQgeyBwYXJzZSwgcGFyc2VVVENUaW1pbmcgfSBmcm9tICdtcGQtcGFyc2VyJztcbmltcG9ydCBtcDRJbnNwZWN0b3IgZnJvbSAnbXV4LmpzL2xpYi90b29scy9tcDQtaW5zcGVjdG9yJztcbmltcG9ydCBtcDRwcm9iZSBmcm9tICdtdXguanMvbGliL21wNC9wcm9iZSc7XG5pbXBvcnQgQ2FwdGlvblBhcnNlciBmcm9tICdtdXguanMvbGliL21wNC9jYXB0aW9uLXBhcnNlcic7XG5pbXBvcnQgdHNJbnNwZWN0b3IgZnJvbSAnbXV4LmpzL2xpYi90b29scy90cy1pbnNwZWN0b3IuanMnO1xuaW1wb3J0IHsgRGVjcnlwdGVyLCBBc3luY1N0cmVhbSwgZGVjcnlwdCB9IGZyb20gJ2Flcy1kZWNyeXB0ZXInO1xuXG52YXIgdmVyc2lvbiA9IFwiNy42LjZcIjtcblxuLyoqXG4gKiBAZmlsZSBjcmVhdGUtbG9nZ2VyLmpzXG4gKiBAbW9kdWxlIGNyZWF0ZS1sb2dnZXJcbiAqL1xuXG52YXIgaGlzdG9yeSA9IFtdO1xuLyoqXG4gKiBMb2cgbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUgYW5kIGhpc3RvcnkgYmFzZWQgb24gdGhlIHR5cGUgb2YgbWVzc2FnZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGNvbnNvbGUgbWV0aG9kIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gYXJnc1xuICogICAgICAgICBUaGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgbWF0Y2hpbmcgY29uc29sZSBtZXRob2QuXG4gKi9cblxudmFyIExvZ0J5VHlwZUZhY3RvcnkgPSBmdW5jdGlvbiBMb2dCeVR5cGVGYWN0b3J5KG5hbWUsIGxvZykge1xuICByZXR1cm4gZnVuY3Rpb24gKHR5cGUsIGxldmVsLCBhcmdzKSB7XG4gICAgdmFyIGx2bCA9IGxvZy5sZXZlbHNbbGV2ZWxdO1xuICAgIHZhciBsdmxSZWdFeHAgPSBuZXcgUmVnRXhwKFwiXihcIiArIGx2bCArIFwiKSRcIik7XG5cbiAgICBpZiAodHlwZSAhPT0gJ2xvZycpIHtcbiAgICAgIC8vIEFkZCB0aGUgdHlwZSB0byB0aGUgZnJvbnQgb2YgdGhlIG1lc3NhZ2Ugd2hlbiBpdCdzIG5vdCBcImxvZ1wiLlxuICAgICAgYXJncy51bnNoaWZ0KHR5cGUudG9VcHBlckNhc2UoKSArICc6Jyk7XG4gICAgfSAvLyBBZGQgY29uc29sZSBwcmVmaXggYWZ0ZXIgYWRkaW5nIHRvIGhpc3RvcnkuXG5cblxuICAgIGFyZ3MudW5zaGlmdChuYW1lICsgJzonKTsgLy8gQWRkIGEgY2xvbmUgb2YgdGhlIGFyZ3MgYXQgdGhpcyBwb2ludCB0byBoaXN0b3J5LlxuXG4gICAgaWYgKGhpc3RvcnkpIHtcbiAgICAgIGhpc3RvcnkucHVzaChbXS5jb25jYXQoYXJncykpO1xuICAgIH0gLy8gSWYgdGhlcmUncyBubyBjb25zb2xlIHRoZW4gZG9uJ3QgdHJ5IHRvIG91dHB1dCBtZXNzYWdlcywgYnV0IHRoZXkgd2lsbFxuICAgIC8vIHN0aWxsIGJlIHN0b3JlZCBpbiBoaXN0b3J5LlxuXG5cbiAgICBpZiAoIXdpbmRvdyQxLmNvbnNvbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdhcyBzZXR0aW5nIHRoZXNlIG9uY2Ugb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLCBidXQgY29udGFpbmluZyB0aGVtXG4gICAgLy8gaW4gdGhlIGZ1bmN0aW9uIG1ha2VzIGl0IGVhc2llciB0byB0ZXN0IGNhc2VzIHdoZXJlIGNvbnNvbGUgZG9lc24ndCBleGlzdFxuICAgIC8vIHdoZW4gdGhlIG1vZHVsZSBpcyBleGVjdXRlZC5cblxuXG4gICAgdmFyIGZuID0gd2luZG93JDEuY29uc29sZVt0eXBlXTtcblxuICAgIGlmICghZm4gJiYgdHlwZSA9PT0gJ2RlYnVnJykge1xuICAgICAgLy8gQ2VydGFpbiBicm93c2VycyBkb24ndCBoYXZlIHN1cHBvcnQgZm9yIGNvbnNvbGUuZGVidWcuIEZvciB0aG9zZSwgd2VcbiAgICAgIC8vIHNob3VsZCBkZWZhdWx0IHRvIHRoZSBjbG9zZXN0IGNvbXBhcmFibGUgbG9nLlxuICAgICAgZm4gPSB3aW5kb3ckMS5jb25zb2xlLmluZm8gfHwgd2luZG93JDEuY29uc29sZS5sb2c7XG4gICAgfSAvLyBCYWlsIG91dCBpZiB0aGVyZSdzIG5vIGNvbnNvbGUgb3IgaWYgdGhpcyB0eXBlIGlzIG5vdCBhbGxvd2VkIGJ5IHRoZVxuICAgIC8vIGN1cnJlbnQgbG9nZ2luZyBsZXZlbC5cblxuXG4gICAgaWYgKCFmbiB8fCAhbHZsIHx8ICFsdmxSZWdFeHAudGVzdCh0eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZuW0FycmF5LmlzQXJyYXkoYXJncykgPyAnYXBwbHknIDogJ2NhbGwnXSh3aW5kb3ckMS5jb25zb2xlLCBhcmdzKTtcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihuYW1lKSB7XG4gIC8vIFRoaXMgaXMgdGhlIHByaXZhdGUgdHJhY2tpbmcgdmFyaWFibGUgZm9yIGxvZ2dpbmcgbGV2ZWwuXG4gIHZhciBsZXZlbCA9ICdpbmZvJzsgLy8gdGhlIGN1cnJpZWQgbG9nQnlUeXBlIGJvdW5kIHRvIHRoZSBzcGVjaWZpYyBsb2cgYW5kIGhpc3RvcnlcblxuICB2YXIgbG9nQnlUeXBlO1xuICAvKipcbiAgICogTG9ncyBwbGFpbiBkZWJ1ZyBtZXNzYWdlcy4gU2ltaWxhciB0byBgY29uc29sZS5sb2dgLlxuICAgKlxuICAgKiBEdWUgdG8gW2xpbWl0YXRpb25zXShodHRwczovL2dpdGh1Yi5jb20vanNkb2MzL2pzZG9jL2lzc3Vlcy85NTUjaXNzdWVjb21tZW50LTMxMzgyOTE0OSlcbiAgICogb2Ygb3VyIEpTRG9jIHRlbXBsYXRlLCB3ZSBjYW5ub3QgcHJvcGVybHkgZG9jdW1lbnQgdGhpcyBhcyBib3RoIGEgZnVuY3Rpb25cbiAgICogYW5kIGEgbmFtZXNwYWNlLCBzbyBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGRvY3VtZW50ZWQgaGVyZS5cbiAgICpcbiAgICogIyMjIyBBcmd1bWVudHNcbiAgICogIyMjIyMgKmFyZ3NcbiAgICogTWl4ZWRbXVxuICAgKlxuICAgKiBBbnkgY29tYmluYXRpb24gb2YgdmFsdWVzIHRoYXQgY291bGQgYmUgcGFzc2VkIHRvIGBjb25zb2xlLmxvZygpYC5cbiAgICpcbiAgICogIyMjIyBSZXR1cm4gVmFsdWVcbiAgICpcbiAgICogYHVuZGVmaW5lZGBcbiAgICpcbiAgICogQG5hbWVzcGFjZVxuICAgKiBAcGFyYW0gICAge01peGVkW119IGFyZ3NcbiAgICogICAgICAgICAgIE9uZSBvciBtb3JlIG1lc3NhZ2VzIG9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgbG9nZ2VkLlxuICAgKi9cblxuICB2YXIgbG9nID0gZnVuY3Rpb24gbG9nKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsb2dCeVR5cGUoJ2xvZycsIGxldmVsLCBhcmdzKTtcbiAgfTsgLy8gVGhpcyBpcyB0aGUgbG9nQnlUeXBlIGhlbHBlciB0aGF0IHRoZSBsb2dnaW5nIG1ldGhvZHMgYmVsb3cgdXNlXG5cblxuICBsb2dCeVR5cGUgPSBMb2dCeVR5cGVGYWN0b3J5KG5hbWUsIGxvZyk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc3VibG9nZ2VyIHdoaWNoIGNoYWlucyB0aGUgb2xkIG5hbWUgdG8gdGhlIG5ldyBuYW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgZG9pbmcgYHZpZGVvanMubG9nLmNyZWF0ZUxvZ2dlcigncGxheWVyJylgIGFuZCB0aGVuIHVzaW5nIHRoYXQgbG9nZ2VyIHdpbGwgbG9nIHRoZSBmb2xsb3dpbmc6XG4gICAqIGBgYGpzXG4gICAqICBteWxvZ2dlcignZm9vJyk7XG4gICAqICAvLyA+IFZJREVPSlM6IHBsYXllcjogZm9vXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgVGhlIG5hbWUgdG8gYWRkIGNhbGwgdGhlIG5ldyBsb2dnZXJcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cblxuICBsb2cuY3JlYXRlTG9nZ2VyID0gZnVuY3Rpb24gKHN1Ym5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlTG9nZ2VyKG5hbWUgKyAnOiAnICsgc3VibmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBFbnVtZXJhdGlvbiBvZiBhdmFpbGFibGUgbG9nZ2luZyBsZXZlbHMsIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgbGV2ZWwgbmFtZXNcbiAgICogYW5kIHRoZSB2YWx1ZXMgYXJlIGB8YC1zZXBhcmF0ZWQgc3RyaW5ncyBjb250YWluaW5nIGxvZ2dpbmcgbWV0aG9kcyBhbGxvd2VkXG4gICAqIGluIHRoYXQgbG9nZ2luZyBsZXZlbC4gVGhlc2Ugc3RyaW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICogbWF0Y2hpbmcgdGhlIGZ1bmN0aW9uIG5hbWUgYmVpbmcgY2FsbGVkLlxuICAgKlxuICAgKiBMZXZlbHMgcHJvdmlkZWQgYnkgVmlkZW8uanMgYXJlOlxuICAgKlxuICAgKiAtIGBvZmZgOiBNYXRjaGVzIG5vIGNhbGxzLiBBbnkgdmFsdWUgdGhhdCBjYW4gYmUgY2FzdCB0byBgZmFsc2VgIHdpbGwgaGF2ZVxuICAgKiAgIHRoaXMgZWZmZWN0LiBUaGUgbW9zdCByZXN0cmljdGl2ZS5cbiAgICogLSBgYWxsYDogTWF0Y2hlcyBvbmx5IFZpZGVvLmpzLXByb3ZpZGVkIGZ1bmN0aW9ucyAoYGRlYnVnYCwgYGxvZ2AsXG4gICAqICAgYGxvZy53YXJuYCwgYW5kIGBsb2cuZXJyb3JgKS5cbiAgICogLSBgZGVidWdgOiBNYXRjaGVzIGBsb2cuZGVidWdgLCBgbG9nYCwgYGxvZy53YXJuYCwgYW5kIGBsb2cuZXJyb3JgIGNhbGxzLlxuICAgKiAtIGBpbmZvYCAoZGVmYXVsdCk6IE1hdGNoZXMgYGxvZ2AsIGBsb2cud2FybmAsIGFuZCBgbG9nLmVycm9yYCBjYWxscy5cbiAgICogLSBgd2FybmA6IE1hdGNoZXMgYGxvZy53YXJuYCBhbmQgYGxvZy5lcnJvcmAgY2FsbHMuXG4gICAqIC0gYGVycm9yYDogTWF0Y2hlcyBvbmx5IGBsb2cuZXJyb3JgIGNhbGxzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cblxuXG4gIGxvZy5sZXZlbHMgPSB7XG4gICAgYWxsOiAnZGVidWd8bG9nfHdhcm58ZXJyb3InLFxuICAgIG9mZjogJycsXG4gICAgZGVidWc6ICdkZWJ1Z3xsb2d8d2FybnxlcnJvcicsXG4gICAgaW5mbzogJ2xvZ3x3YXJufGVycm9yJyxcbiAgICB3YXJuOiAnd2FybnxlcnJvcicsXG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgREVGQVVMVDogbGV2ZWxcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGN1cnJlbnQgbG9nZ2luZyBsZXZlbC5cbiAgICpcbiAgICogSWYgYSBzdHJpbmcgbWF0Y2hpbmcgYSBrZXkgZnJvbSB7QGxpbmsgbW9kdWxlOmxvZy5sZXZlbHN9IGlzIHByb3ZpZGVkLCBhY3RzXG4gICAqIGFzIGEgc2V0dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtsdmxdXG4gICAqICAgICAgICAgUGFzcyBhIHZhbGlkIGxldmVsIHRvIHNldCBhIG5ldyBsb2dnaW5nIGxldmVsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgbG9nZ2luZyBsZXZlbC5cbiAgICovXG5cbiAgbG9nLmxldmVsID0gZnVuY3Rpb24gKGx2bCkge1xuICAgIGlmICh0eXBlb2YgbHZsID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFsb2cubGV2ZWxzLmhhc093blByb3BlcnR5KGx2bCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXFxcIlwiICsgbHZsICsgXCJcXFwiIGluIG5vdCBhIHZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICAgIH1cblxuICAgICAgbGV2ZWwgPSBsdmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxldmVsO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGV2ZXJ5dGhpbmcgdGhhdCBoYXMgYmVlbiBsb2dnZWQgdG8gdGhlIGhpc3RvcnkuXG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgYSBzaGFsbG93IGNsb25lIG9mIHRoZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZC4gSG93ZXZlciwgaXRzXG4gICAqIGNvbnRlbnRzIGFyZSBfbm90XyBjbG9uZWQ7IHNvLCBtdXRhdGluZyBvYmplY3RzIGluc2lkZSB0aGlzIGFycmF5IHdpbGxcbiAgICogbXV0YXRlIHRoZW0gaW4gaGlzdG9yeS5cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuXG5cbiAgbG9nLmhpc3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhpc3RvcnkgPyBbXS5jb25jYXQoaGlzdG9yeSkgOiBbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gZmlsdGVyIHRoZSBoaXN0b3J5IGJ5IHRoZSBnaXZlbiBsb2dnZXIgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm5hbWVcbiAgICogICAgICAgIFRoZSBuYW1lIHRvIGZpbHRlciBieVxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICogICAgICAgICBUaGUgZmlsdGVyZWQgbGlzdCB0byByZXR1cm5cbiAgICovXG5cblxuICBsb2cuaGlzdG9yeS5maWx0ZXIgPSBmdW5jdGlvbiAoZm5hbWUpIHtcbiAgICByZXR1cm4gKGhpc3RvcnkgfHwgW10pLmZpbHRlcihmdW5jdGlvbiAoaGlzdG9yeUl0ZW0pIHtcbiAgICAgIC8vIGlmIHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggaGlzdG9yeUl0ZW0gaW5jbHVkZXMgYGZuYW1lYCwgdGhlbiBpdCdzIGEgbWF0Y2hcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiLipcIiArIGZuYW1lICsgXCIuKlwiKS50ZXN0KGhpc3RvcnlJdGVtWzBdKTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIENsZWFycyB0aGUgaW50ZXJuYWwgaGlzdG9yeSB0cmFja2luZywgYnV0IGRvZXMgbm90IHByZXZlbnQgZnVydGhlciBoaXN0b3J5XG4gICAqIHRyYWNraW5nLlxuICAgKi9cblxuXG4gIGxvZy5oaXN0b3J5LmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChoaXN0b3J5KSB7XG4gICAgICBoaXN0b3J5Lmxlbmd0aCA9IDA7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRGlzYWJsZSBoaXN0b3J5IHRyYWNraW5nIGlmIGl0IGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKi9cblxuXG4gIGxvZy5oaXN0b3J5LmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGhpc3RvcnkgIT09IG51bGwpIHtcbiAgICAgIGhpc3RvcnkubGVuZ3RoID0gMDtcbiAgICAgIGhpc3RvcnkgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEVuYWJsZSBoaXN0b3J5IHRyYWNraW5nIGlmIGl0IGlzIGN1cnJlbnRseSBkaXNhYmxlZC5cbiAgICovXG5cblxuICBsb2cuaGlzdG9yeS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGhpc3RvcnkgPT09IG51bGwpIHtcbiAgICAgIGhpc3RvcnkgPSBbXTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBMb2dzIGVycm9yIG1lc3NhZ2VzLiBTaW1pbGFyIHRvIGBjb25zb2xlLmVycm9yYC5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZFtdfSBhcmdzXG4gICAqICAgICAgICBPbmUgb3IgbW9yZSBtZXNzYWdlcyBvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGxvZ2dlZCBhcyBhbiBlcnJvclxuICAgKi9cblxuXG4gIGxvZy5lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9nQnlUeXBlKCdlcnJvcicsIGxldmVsLCBhcmdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIExvZ3Mgd2FybmluZyBtZXNzYWdlcy4gU2ltaWxhciB0byBgY29uc29sZS53YXJuYC5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZFtdfSBhcmdzXG4gICAqICAgICAgICBPbmUgb3IgbW9yZSBtZXNzYWdlcyBvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGxvZ2dlZCBhcyBhIHdhcm5pbmcuXG4gICAqL1xuXG5cbiAgbG9nLndhcm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ0J5VHlwZSgnd2FybicsIGxldmVsLCBhcmdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIExvZ3MgZGVidWcgbWVzc2FnZXMuIFNpbWlsYXIgdG8gYGNvbnNvbGUuZGVidWdgLCBidXQgbWF5IGFsc28gYWN0IGFzIGEgY29tcGFyYWJsZVxuICAgKiBsb2cgaWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZFtdfSBhcmdzXG4gICAqICAgICAgICBPbmUgb3IgbW9yZSBtZXNzYWdlcyBvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGxvZ2dlZCBhcyBkZWJ1Zy5cbiAgICovXG5cblxuICBsb2cuZGVidWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ0J5VHlwZSgnZGVidWcnLCBsZXZlbCwgYXJncyk7XG4gIH07XG5cbiAgcmV0dXJuIGxvZztcbn1cblxuLyoqXG4gKiBAZmlsZSBsb2cuanNcbiAqIEBtb2R1bGUgbG9nXG4gKi9cbnZhciBsb2cgPSBjcmVhdGVMb2dnZXIoJ1ZJREVPSlMnKTtcbnZhciBjcmVhdGVMb2dnZXIkMSA9IGxvZy5jcmVhdGVMb2dnZXI7XG5cbi8qKlxuICogQGZpbGUgb2JqLmpzXG4gKiBAbW9kdWxlIG9ialxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9iajpFYWNoQ2FsbGJhY2tcbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICogICAgICAgIFRoZSBjdXJyZW50IGtleSBmb3IgdGhlIG9iamVjdCB0aGF0IGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogICAgICAgIFRoZSBjdXJyZW50IGtleS12YWx1ZSBmb3Igb2JqZWN0IHRoYXQgaXMgYmVpbmcgaXRlcmF0ZWQgb3ZlclxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9iajpSZWR1Y2VDYWxsYmFja1xuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGFjY3VtXG4gKiAgICAgICAgVGhlIHZhbHVlIHRoYXQgaXMgYWNjdW11bGF0aW5nIG92ZXIgdGhlIHJlZHVjZSBsb29wLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gKiAgICAgICAgVGhlIGN1cnJlbnQga2V5IGZvciB0aGUgb2JqZWN0IHRoYXQgaXMgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiAgICAgICAgVGhlIGN1cnJlbnQga2V5LXZhbHVlIGZvciBvYmplY3QgdGhhdCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyXG4gKlxuICogQHJldHVybiB7TWl4ZWR9XG4gKiAgICAgICAgIFRoZSBuZXcgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIEdldCB0aGUga2V5cyBvZiBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH1cbiAqICAgICAgICBUaGUgT2JqZWN0IHRvIGdldCB0aGUga2V5cyBmcm9tXG4gKlxuICogQHJldHVybiB7c3RyaW5nW119XG4gKiAgICAgICAgIEFuIGFycmF5IG9mIHRoZSBrZXlzIGZyb20gdGhlIG9iamVjdC4gUmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGVcbiAqICAgICAgICAgb2JqZWN0IHBhc3NlZCBpbiB3YXMgaW52YWxpZCBvciBoYWQgbm8ga2V5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBrZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KG9iamVjdCkgPyBPYmplY3Qua2V5cyhvYmplY3QpIDogW107XG59O1xuLyoqXG4gKiBBcnJheS1saWtlIGl0ZXJhdGlvbiBmb3Igb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiAgICAgICAgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXJcbiAqXG4gKiBAcGFyYW0ge29iajpFYWNoQ2FsbGJhY2t9IGZuXG4gKiAgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBmb3IgZWFjaCBrZXkgaW4gdGhlIG9iamVjdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGVhY2gob2JqZWN0LCBmbikge1xuICBrZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGZuKG9iamVjdFtrZXldLCBrZXkpO1xuICB9KTtcbn1cbi8qKlxuICogQXJyYXktbGlrZSByZWR1Y2UgZm9yIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogICAgICAgIFRoZSBPYmplY3QgdGhhdCB5b3Ugd2FudCB0byByZWR1Y2UuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqICAgICAgICAgQSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5IGluIHRoZSBvYmplY3QuIEl0XG4gKiAgICAgICAgIHJlY2VpdmVzIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBhbmQgdGhlIHBlci1pdGVyYXRpb24gdmFsdWUgYW5kIGtleVxuICogICAgICAgICBhcyBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gW2luaXRpYWwgPSAwXVxuICogICAgICAgIFN0YXJ0aW5nIHZhbHVlXG4gKlxuICogQHJldHVybiB7TWl4ZWR9XG4gKiAgICAgICAgIFRoZSBmaW5hbCBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuXG5mdW5jdGlvbiByZWR1Y2Uob2JqZWN0LCBmbiwgaW5pdGlhbCkge1xuICBpZiAoaW5pdGlhbCA9PT0gdm9pZCAwKSB7XG4gICAgaW5pdGlhbCA9IDA7XG4gIH1cblxuICByZXR1cm4ga2V5cyhvYmplY3QpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW0sIGtleSkge1xuICAgIHJldHVybiBmbihhY2N1bSwgb2JqZWN0W2tleV0sIGtleSk7XG4gIH0sIGluaXRpYWwpO1xufVxuLyoqXG4gKiBPYmplY3QuYXNzaWduLXN0eWxlIG9iamVjdCBzaGFsbG93IG1lcmdlL2V4dGVuZC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtICB7T2JqZWN0fSAuLi5zb3VyY2VzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc291cmNlcyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc291cmNlc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoT2JqZWN0LmFzc2lnbikge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduLmFwcGx5KE9iamVjdCwgW3RhcmdldF0uY29uY2F0KHNvdXJjZXMpKTtcbiAgfVxuXG4gIHNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlYWNoKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBvYmplY3Qgb2YgYW55IGtpbmQgLSBpbmNsdWRpbmcgRE9NIG5vZGVzLFxuICogYXJyYXlzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBldGMuIE5vdCBmdW5jdGlvbnMsIHRob3VnaC5cbiAqXG4gKiBUaGlzIGF2b2lkcyB0aGUgZ290Y2hhIHdoZXJlIHVzaW5nIGB0eXBlb2ZgIG9uIGEgYG51bGxgIHZhbHVlXG4gKiByZXN1bHRzIGluIGAnb2JqZWN0J2AuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSBcInBsYWluXCIgb2JqZWN0IC0gdGhhdCBpcywgYVxuICogZGlyZWN0IGluc3RhbmNlIG9mIGBPYmplY3RgLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gaXNQbGFpbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuXG4vKipcbiAqIEBmaWxlIGNvbXB1dGVkLXN0eWxlLmpzXG4gKiBAbW9kdWxlIGNvbXB1dGVkLXN0eWxlXG4gKi9cbi8qKlxuICogQSBzYWZlIGdldENvbXB1dGVkU3R5bGUuXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpbiBGaXJlZm94LCBpZiB0aGUgcGxheWVyIGlzIGxvYWRlZCBpbiBhbiBpZnJhbWUgd2l0aFxuICogYGRpc3BsYXk6bm9uZWAsIHRoZW4gYGdldENvbXB1dGVkU3R5bGVgIHJldHVybnMgYG51bGxgLCBzbywgd2UgZG8gYVxuICogbnVsbC1jaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGxheWVyIGRvZXNuJ3QgYnJlYWsgaW4gdGhlc2UgY2FzZXMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gICAge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgICAgVGhlIGVsZW1lbnQgeW91IHdhbnQgdGhlIGNvbXB1dGVkIHN0eWxlIG9mXG4gKlxuICogQHBhcmFtICAgIHtzdHJpbmd9IHByb3BcbiAqICAgICAgICAgICBUaGUgcHJvcGVydHkgbmFtZSB5b3Ugd2FudFxuICpcbiAqIEBzZWUgICAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgzOTdcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsLCBwcm9wKSB7XG4gIGlmICghZWwgfHwgIXByb3ApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHdpbmRvdyQxLmdldENvbXB1dGVkU3R5bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgY29tcHV0ZWRTdHlsZVZhbHVlID0gd2luZG93JDEuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gICAgcmV0dXJuIGNvbXB1dGVkU3R5bGVWYWx1ZSA/IGNvbXB1dGVkU3R5bGVWYWx1ZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApIHx8IGNvbXB1dGVkU3R5bGVWYWx1ZVtwcm9wXSA6ICcnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBmaWxlIGRvbS5qc1xuICogQG1vZHVsZSBkb21cbiAqL1xuLyoqXG4gKiBEZXRlY3QgaWYgYSB2YWx1ZSBpcyBhIHN0cmluZyB3aXRoIGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogICAgICAgICBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyBub24tYmxhbmssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqL1xuXG5mdW5jdGlvbiBpc05vbkJsYW5rU3RyaW5nKHN0cikge1xuICByZXR1cm4gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgL1xcUy8udGVzdChzdHIpO1xufVxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHBhc3NlZCBzdHJpbmcgaGFzIHdoaXRlc3BhY2UuIFRoaXMgaXMgdXNlZCBieVxuICogY2xhc3MgbWV0aG9kcyB0byBiZSByZWxhdGl2ZWx5IGNvbnNpc3RlbnQgd2l0aCB0aGUgY2xhc3NMaXN0IEFQSS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqICAgICAgICAgVGhlIHN0cmluZyB0byBjaGVjayBmb3Igd2hpdGVzcGFjZS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIHdoaXRlc3BhY2UgaW4gdGhlIHN0cmluZy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRocm93SWZXaGl0ZXNwYWNlKHN0cikge1xuICBpZiAoL1xccy8udGVzdChzdHIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGFzcyBoYXMgaWxsZWdhbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnKTtcbiAgfVxufVxuLyoqXG4gKiBQcm9kdWNlIGEgcmVndWxhciBleHByZXNzaW9uIGZvciBtYXRjaGluZyBhIGNsYXNzTmFtZSB3aXRoaW4gYW4gZWxlbWVudHMgY2xhc3NOYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogICAgICAgICBUaGUgY2xhc3NOYW1lIHRvIGdlbmVyYXRlIHRoZSBSZWdFeHAgZm9yLlxuICpcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqICAgICAgICAgVGhlIFJlZ0V4cCB0aGF0IHdpbGwgY2hlY2sgZm9yIGEgc3BlY2lmaWMgYGNsYXNzTmFtZWAgaW4gYW4gZWxlbWVudHNcbiAqICAgICAgICAgY2xhc3NOYW1lLlxuICovXG5cblxuZnVuY3Rpb24gY2xhc3NSZWdFeHAoY2xhc3NOYW1lKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgY2xhc3NOYW1lICsgJygkfFxcXFxzKScpO1xufVxuLyoqXG4gKiBXaGV0aGVyIHRoZSBjdXJyZW50IERPTSBpbnRlcmZhY2UgYXBwZWFycyB0byBiZSByZWFsIChpLmUuIG5vdCBzaW11bGF0ZWQpLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIFdpbGwgYmUgYHRydWVgIGlmIHRoZSBET00gYXBwZWFycyB0byBiZSByZWFsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzUmVhbCgpIHtcbiAgLy8gQm90aCBkb2N1bWVudCBhbmQgd2luZG93IHdpbGwgbmV2ZXIgYmUgdW5kZWZpbmVkIHRoYW5rcyB0byBgZ2xvYmFsYC5cbiAgcmV0dXJuIGRvY3VtZW50ID09PSB3aW5kb3ckMS5kb2N1bWVudDtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcywgdmlhIGR1Y2sgdHlwaW5nLCB3aGV0aGVyIG9yIG5vdCBhIHZhbHVlIGlzIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7TWl4ZWR9IHZhbHVlXG4gKiAgICAgICAgIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICBXaWxsIGJlIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBET00gZWxlbWVudCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cblxuZnVuY3Rpb24gaXNFbCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IERPTSBpcyBlbWJlZGRlZCBpbiBhbiBpZnJhbWUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIERPTSBpcyBlbWJlZGRlZCBpbiBhbiBpZnJhbWUsIGBmYWxzZWBcbiAqICAgICAgICAgb3RoZXJ3aXNlLlxuICovXG5cbmZ1bmN0aW9uIGlzSW5GcmFtZSgpIHtcbiAgLy8gV2UgbmVlZCBhIHRyeS9jYXRjaCBoZXJlIGJlY2F1c2UgU2FmYXJpIHdpbGwgdGhyb3cgZXJyb3JzIHdoZW4gYXR0ZW1wdGluZ1xuICAvLyB0byBnZXQgZWl0aGVyIGBwYXJlbnRgIG9yIGBzZWxmYFxuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3ckMS5wYXJlbnQgIT09IHdpbmRvdyQxLnNlbGY7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGZ1bmN0aW9ucyB0byBxdWVyeSB0aGUgRE9NIHVzaW5nIGEgZ2l2ZW4gbWV0aG9kLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7c3RyaW5nfSBtZXRob2RcbiAqICAgICAgICAgIFRoZSBtZXRob2QgdG8gY3JlYXRlIHRoZSBxdWVyeSB3aXRoLlxuICpcbiAqIEByZXR1cm4gIHtGdW5jdGlvbn1cbiAqICAgICAgICAgIFRoZSBxdWVyeSBtZXRob2RcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVRdWVyaWVyKG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc05vbkJsYW5rU3RyaW5nKHNlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50W21ldGhvZF0obnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9uQmxhbmtTdHJpbmcoY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHZhciBjdHggPSBpc0VsKGNvbnRleHQpID8gY29udGV4dCA6IGRvY3VtZW50O1xuICAgIHJldHVybiBjdHhbbWV0aG9kXSAmJiBjdHhbbWV0aG9kXShzZWxlY3Rvcik7XG4gIH07XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gZWxlbWVudCBhbmQgYXBwbGllcyBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzLCBhbmQgaW5zZXJ0cyBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gW3RhZ05hbWU9J2RpdiddXG4gKiAgICAgICAgIE5hbWUgb2YgdGFnIHRvIGJlIGNyZWF0ZWQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBbcHJvcGVydGllcz17fV1cbiAqICAgICAgICAgRWxlbWVudCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBbYXR0cmlidXRlcz17fV1cbiAqICAgICAgICAgRWxlbWVudCBhdHRyaWJ1dGVzIHRvIGJlIGFwcGxpZWQuXG4gKlxuICogQHBhcmFtIHttb2R1bGU6ZG9tfkNvbnRlbnREZXNjcmlwdG9yfSBjb250ZW50XG4gKiAgICAgICAgQSBjb250ZW50IGRlc2NyaXB0b3Igb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKiAgICAgICAgIFRoZSBlbGVtZW50IHRoYXQgd2FzIGNyZWF0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVFbCh0YWdOYW1lLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzLCBjb250ZW50KSB7XG4gIGlmICh0YWdOYW1lID09PSB2b2lkIDApIHtcbiAgICB0YWdOYW1lID0gJ2Rpdic7XG4gIH1cblxuICBpZiAocHJvcGVydGllcyA9PT0gdm9pZCAwKSB7XG4gICAgcHJvcGVydGllcyA9IHt9O1xuICB9XG5cbiAgaWYgKGF0dHJpYnV0ZXMgPT09IHZvaWQgMCkge1xuICAgIGF0dHJpYnV0ZXMgPSB7fTtcbiAgfVxuXG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgdmFyIHZhbCA9IHByb3BlcnRpZXNbcHJvcE5hbWVdOyAvLyBTZWUgIzIxNzZcbiAgICAvLyBXZSBvcmlnaW5hbGx5IHdlcmUgYWNjZXB0aW5nIGJvdGggcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBpbiB0aGVcbiAgICAvLyBzYW1lIG9iamVjdCwgYnV0IHRoYXQgZG9lc24ndCB3b3JrIHNvIHdlbGwuXG5cbiAgICBpZiAocHJvcE5hbWUuaW5kZXhPZignYXJpYS0nKSAhPT0gLTEgfHwgcHJvcE5hbWUgPT09ICdyb2xlJyB8fCBwcm9wTmFtZSA9PT0gJ3R5cGUnKSB7XG4gICAgICBsb2cud2FybignU2V0dGluZyBhdHRyaWJ1dGVzIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlRWwoKVxcbicgKyAnaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHRoZSB0aGlyZCBhcmd1bWVudCBpbnN0ZWFkLlxcbicgKyAoXCJjcmVhdGVFbCh0eXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzKS4gQXR0ZW1wdGluZyB0byBzZXQgXCIgKyBwcm9wTmFtZSArIFwiIHRvIFwiICsgdmFsICsgXCIuXCIpKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShwcm9wTmFtZSwgdmFsKTsgLy8gSGFuZGxlIHRleHRDb250ZW50IHNpbmNlIGl0J3Mgbm90IHN1cHBvcnRlZCBldmVyeXdoZXJlIGFuZCB3ZSBoYXZlIGFcbiAgICAgIC8vIG1ldGhvZCBmb3IgaXQuXG4gICAgfSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3RleHRDb250ZW50Jykge1xuICAgICAgdGV4dENvbnRlbnQoZWwsIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsW3Byb3BOYW1lXSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyTmFtZSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cmlidXRlc1thdHRyTmFtZV0pO1xuICB9KTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGFwcGVuZENvbnRlbnQoZWwsIGNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuLyoqXG4gKiBJbmplY3RzIHRleHQgaW50byBhbiBlbGVtZW50LCByZXBsYWNpbmcgYW55IGV4aXN0aW5nIGNvbnRlbnRzIGVudGlyZWx5LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgIFRoZSBlbGVtZW50IHRvIGFkZCB0ZXh0IGNvbnRlbnQgaW50b1xuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdGV4dFxuICogICAgICAgICBUaGUgdGV4dCBjb250ZW50IHRvIGFkZC5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICogICAgICAgICBUaGUgZWxlbWVudCB3aXRoIGFkZGVkIHRleHQgY29udGVudC5cbiAqL1xuXG5mdW5jdGlvbiB0ZXh0Q29udGVudChlbCwgdGV4dCkge1xuICBpZiAodHlwZW9mIGVsLnRleHRDb250ZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgIGVsLmlubmVyVGV4dCA9IHRleHQ7XG4gIH0gZWxzZSB7XG4gICAgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuLyoqXG4gKiBJbnNlcnQgYW4gZWxlbWVudCBhcyB0aGUgZmlyc3QgY2hpbGQgbm9kZSBvZiBhbm90aGVyXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjaGlsZFxuICogICAgICAgIEVsZW1lbnQgdG8gaW5zZXJ0XG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnRcbiAqICAgICAgICBFbGVtZW50IHRvIGluc2VydCBjaGlsZCBpbnRvXG4gKi9cblxuZnVuY3Rpb24gcHJlcGVuZFRvKGNoaWxkLCBwYXJlbnQpIHtcbiAgaWYgKHBhcmVudC5maXJzdENoaWxkKSB7XG4gICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgcGFyZW50LmZpcnN0Q2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqICAgICAgICAgRWxlbWVudCB0byBjaGVja1xuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gY2xhc3NUb0NoZWNrXG4gKiAgICAgICAgIENsYXNzIG5hbWUgdG8gY2hlY2sgZm9yXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfVxuICogICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaWYgYGNsYXNzVG9DaGVja2AgaGFzIHdoaXRlIHNwYWNlLlxuICovXG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzVG9DaGVjaykge1xuICB0aHJvd0lmV2hpdGVzcGFjZShjbGFzc1RvQ2hlY2spO1xuXG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc1RvQ2hlY2spO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzUmVnRXhwKGNsYXNzVG9DaGVjaykudGVzdChlbGVtZW50LmNsYXNzTmFtZSk7XG59XG4vKipcbiAqIEFkZCBhIGNsYXNzIG5hbWUgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbGVtZW50XG4gKiAgICAgICAgIEVsZW1lbnQgdG8gYWRkIGNsYXNzIG5hbWUgdG8uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBjbGFzc1RvQWRkXG4gKiAgICAgICAgIENsYXNzIG5hbWUgdG8gYWRkLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKiAgICAgICAgIFRoZSBET00gZWxlbWVudCB3aXRoIHRoZSBhZGRlZCBjbGFzcyBuYW1lLlxuICovXG5cbmZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzVG9BZGQpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzVG9BZGQpOyAvLyBEb24ndCBuZWVkIHRvIGB0aHJvd0lmV2hpdGVzcGFjZWAgaGVyZSBiZWNhdXNlIGBoYXNFbENsYXNzYCB3aWxsIGRvIGl0XG4gICAgLy8gaW4gdGhlIGNhc2Ugb2YgY2xhc3NMaXN0IG5vdCBiZWluZyBzdXBwb3J0ZWQuXG4gIH0gZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzVG9BZGQpKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSAoZWxlbWVudC5jbGFzc05hbWUgKyAnICcgKyBjbGFzc1RvQWRkKS50cmltKCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogUmVtb3ZlIGEgY2xhc3MgbmFtZSBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICogICAgICAgICBFbGVtZW50IHRvIHJlbW92ZSBhIGNsYXNzIG5hbWUgZnJvbS5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGNsYXNzVG9SZW1vdmVcbiAqICAgICAgICAgQ2xhc3MgbmFtZSB0byByZW1vdmVcbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICogICAgICAgICBUaGUgRE9NIGVsZW1lbnQgd2l0aCBjbGFzcyBuYW1lIHJlbW92ZWQuXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NUb1JlbW92ZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NUb1JlbW92ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dJZldoaXRlc3BhY2UoY2xhc3NUb1JlbW92ZSk7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMgIT09IGNsYXNzVG9SZW1vdmU7XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIFRoZSBjYWxsYmFjayBkZWZpbml0aW9uIGZvciB0b2dnbGVDbGFzcy5cbiAqXG4gKiBAY2FsbGJhY2sgbW9kdWxlOmRvbX5QcmVkaWNhdGVDYWxsYmFja1xuICogQHBhcmFtICAgIHtFbGVtZW50fSBlbGVtZW50XG4gKiAgICAgICAgICAgVGhlIERPTSBlbGVtZW50IG9mIHRoZSBDb21wb25lbnQuXG4gKlxuICogQHBhcmFtICAgIHtzdHJpbmd9IGNsYXNzVG9Ub2dnbGVcbiAqICAgICAgICAgICBUaGUgYGNsYXNzTmFtZWAgdGhhdCB3YW50cyB0byBiZSB0b2dnbGVkXG4gKlxuICogQHJldHVybiAgIHtib29sZWFufHVuZGVmaW5lZH1cbiAqICAgICAgICAgICBJZiBgdHJ1ZWAgaXMgcmV0dXJuZWQsIHRoZSBgY2xhc3NUb1RvZ2dsZWAgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAqICAgICAgICAgICBgZWxlbWVudGAuIElmIGBmYWxzZWAsIHRoZSBgY2xhc3NUb1RvZ2dsZWAgd2lsbCBiZSByZW1vdmVkIGZyb21cbiAqICAgICAgICAgICB0aGUgYGVsZW1lbnRgLiBJZiBgdW5kZWZpbmVkYCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEFkZHMgb3IgcmVtb3ZlcyBhIGNsYXNzIG5hbWUgdG8vZnJvbSBhbiBlbGVtZW50IGRlcGVuZGluZyBvbiBhbiBvcHRpb25hbFxuICogY29uZGl0aW9uIG9yIHRoZSBwcmVzZW5jZS9hYnNlbmNlIG9mIHRoZSBjbGFzcyBuYW1lLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqICAgICAgICAgVGhlIGVsZW1lbnQgdG8gdG9nZ2xlIGEgY2xhc3MgbmFtZSBvbi5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGNsYXNzVG9Ub2dnbGVcbiAqICAgICAgICAgVGhlIGNsYXNzIHRoYXQgc2hvdWxkIGJlIHRvZ2dsZWQuXG4gKlxuICogQHBhcmFtICB7Ym9vbGVhbnxtb2R1bGU6ZG9tflByZWRpY2F0ZUNhbGxiYWNrfSBbcHJlZGljYXRlXVxuICogICAgICAgICBTZWUgdGhlIHJldHVybiB2YWx1ZSBmb3Ige0BsaW5rIG1vZHVsZTpkb21+UHJlZGljYXRlQ2FsbGJhY2t9XG4gKlxuICogQHJldHVybiB7RWxlbWVudH1cbiAqICAgICAgICAgVGhlIGVsZW1lbnQgd2l0aCBhIGNsYXNzIHRoYXQgaGFzIGJlZW4gdG9nZ2xlZC5cbiAqL1xuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc1RvVG9nZ2xlLCBwcmVkaWNhdGUpIHtcbiAgLy8gVGhpcyBDQU5OT1QgdXNlIGBjbGFzc0xpc3RgIGludGVybmFsbHkgYmVjYXVzZSBJRTExIGRvZXMgbm90IHN1cHBvcnQgdGhlXG4gIC8vIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlIGBjbGFzc0xpc3QudG9nZ2xlKClgIG1ldGhvZCEgV2hpY2ggaXMgZmluZSBiZWNhdXNlXG4gIC8vIGBjbGFzc0xpc3RgIHdpbGwgYmUgdXNlZCBieSB0aGUgYWRkL3JlbW92ZSBmdW5jdGlvbnMuXG4gIHZhciBoYXMgPSBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc1RvVG9nZ2xlKTtcblxuICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHByZWRpY2F0ZSA9IHByZWRpY2F0ZShlbGVtZW50LCBjbGFzc1RvVG9nZ2xlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlZGljYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICBwcmVkaWNhdGUgPSAhaGFzO1xuICB9IC8vIElmIHRoZSBuZWNlc3NhcnkgY2xhc3Mgb3BlcmF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlXG4gIC8vIGVsZW1lbnQsIG5vIGFjdGlvbiBpcyByZXF1aXJlZC5cblxuXG4gIGlmIChwcmVkaWNhdGUgPT09IGhhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUpIHtcbiAgICBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc1RvVG9nZ2xlKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc1RvVG9nZ2xlKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBBcHBseSBhdHRyaWJ1dGVzIHRvIGFuIEhUTUwgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgRWxlbWVudCB0byBhZGQgYXR0cmlidXRlcyB0by5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2F0dHJpYnV0ZXNdXG4gKiAgICAgICAgQXR0cmlidXRlcyB0byBiZSBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWwsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0ck5hbWUpIHtcbiAgICB2YXIgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XG5cbiAgICBpZiAoYXR0clZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBhdHRyVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGF0dHJWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlID09PSB0cnVlID8gJycgOiBhdHRyVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIEdldCBhbiBlbGVtZW50J3MgYXR0cmlidXRlIHZhbHVlcywgYXMgZGVmaW5lZCBvbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogQXR0cmlidXRlcyBhcmUgbm90IHRoZSBzYW1lIGFzIHByb3BlcnRpZXMuIFRoZXkncmUgZGVmaW5lZCBvbiB0aGUgdGFnXG4gKiBvciB3aXRoIHNldEF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSB0YWdcbiAqICAgICAgICAgRWxlbWVudCBmcm9tIHdoaWNoIHRvIGdldCB0YWcgYXR0cmlidXRlcy5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgICAgICAgIEFsbCBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LiBCb29sZWFuIGF0dHJpYnV0ZXMgd2lsbCBiZSBgdHJ1ZWAgb3JcbiAqICAgICAgICAgYGZhbHNlYCwgb3RoZXJzIHdpbGwgYmUgc3RyaW5ncy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKHRhZykge1xuICB2YXIgb2JqID0ge307IC8vIGtub3duIGJvb2xlYW4gYXR0cmlidXRlc1xuICAvLyB3ZSBjYW4gY2hlY2sgZm9yIG1hdGNoaW5nIGJvb2xlYW4gcHJvcGVydGllcywgYnV0IG5vdCBhbGwgYnJvd3NlcnNcbiAgLy8gYW5kIG5vdCBhbGwgdGFncyBrbm93IGFib3V0IHRoZXNlIGF0dHJpYnV0ZXMsIHNvLCB3ZSBzdGlsbCB3YW50IHRvIGNoZWNrIHRoZW0gbWFudWFsbHlcblxuICB2YXIga25vd25Cb29sZWFucyA9ICcsJyArICdhdXRvcGxheSxjb250cm9scyxwbGF5c2lubGluZSxsb29wLG11dGVkLGRlZmF1bHQsZGVmYXVsdE11dGVkJyArICcsJztcblxuICBpZiAodGFnICYmIHRhZy5hdHRyaWJ1dGVzICYmIHRhZy5hdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgYXR0cnMgPSB0YWcuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIGkgPSBhdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcbiAgICAgIHZhciBhdHRyVmFsID0gYXR0cnNbaV0udmFsdWU7IC8vIGNoZWNrIGZvciBrbm93biBib29sZWFuc1xuICAgICAgLy8gdGhlIG1hdGNoaW5nIGVsZW1lbnQgcHJvcGVydHkgd2lsbCByZXR1cm4gYSB2YWx1ZSBmb3IgdHlwZW9mXG5cbiAgICAgIGlmICh0eXBlb2YgdGFnW2F0dHJOYW1lXSA9PT0gJ2Jvb2xlYW4nIHx8IGtub3duQm9vbGVhbnMuaW5kZXhPZignLCcgKyBhdHRyTmFtZSArICcsJykgIT09IC0xKSB7XG4gICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBhbiBpbmNsdWRlZCBib29sZWFuIGF0dHJpYnV0ZSBpcyB0eXBpY2FsbHkgYW4gZW1wdHlcbiAgICAgICAgLy8gc3RyaW5nICgnJykgd2hpY2ggd291bGQgZXF1YWwgZmFsc2UgaWYgd2UganVzdCBjaGVjayBmb3IgYSBmYWxzZSB2YWx1ZS5cbiAgICAgICAgLy8gd2UgYWxzbyBkb24ndCB3YW50IHN1cHBvcnQgYmFkIGNvZGUgbGlrZSBhdXRvcGxheT0nZmFsc2UnXG4gICAgICAgIGF0dHJWYWwgPSBhdHRyVmFsICE9PSBudWxsID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBvYmpbYXR0ck5hbWVdID0gYXR0clZhbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogICAgICAgIEEgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZVxuICogICAgICAgIEF0dHJpYnV0ZSB0byBnZXQgdGhlIHZhbHVlIG9mLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGVsLCBhdHRyaWJ1dGUpIHtcbiAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xufVxuLyoqXG4gKiBTZXQgdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogICAgICAgIEEgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZVxuICogICAgICAgIEF0dHJpYnV0ZSB0byBzZXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgICAgICAgVmFsdWUgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdG8uXG4gKi9cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIGVsLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbn1cbi8qKlxuICogUmVtb3ZlIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogICAgICAgIEEgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZVxuICogICAgICAgIEF0dHJpYnV0ZSB0byByZW1vdmUuXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKGVsLCBhdHRyaWJ1dGUpIHtcbiAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG59XG4vKipcbiAqIEF0dGVtcHQgdG8gYmxvY2sgdGhlIGFiaWxpdHkgdG8gc2VsZWN0IHRleHQuXG4gKi9cblxuZnVuY3Rpb24gYmxvY2tUZXh0U2VsZWN0aW9uKCkge1xuICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7XG5cbiAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG4vKipcbiAqIFR1cm4gb2ZmIHRleHQgc2VsZWN0aW9uIGJsb2NraW5nLlxuICovXG5cbmZ1bmN0aW9uIHVuYmxvY2tUZXh0U2VsZWN0aW9uKCkge1xuICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuLyoqXG4gKiBJZGVudGljYWwgdG8gdGhlIG5hdGl2ZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCBmdW5jdGlvbiwgYnV0IGVuc3VyZXMgdGhhdFxuICogdGhlIG1ldGhvZCBpcyBzdXBwb3J0ZWQgYXQgYWxsIChpdCBpcyBpbiBhbGwgYnJvd3NlcnMgd2UgY2xhaW0gdG8gc3VwcG9ydClcbiAqIGFuZCB0aGF0IHRoZSBlbGVtZW50IGlzIGluIHRoZSBET00gYmVmb3JlIGNvbnRpbnVpbmcuXG4gKlxuICogVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGFsc28gc2hpbXMgcHJvcGVydGllcyB3aGljaCBhcmUgbm90IHByb3ZpZGVkIGJ5IHNvbWVcbiAqIG9sZGVyIGJyb3dzZXJzIChuYW1lbHksIElFOCkuXG4gKlxuICogQWRkaXRpb25hbGx5LCBzb21lIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IGFkZGluZyBwcm9wZXJ0aWVzIHRvIGFcbiAqIGBDbGllbnRSZWN0YC9gRE9NUmVjdGAgb2JqZWN0OyBzbywgd2Ugc2hhbGxvdy1jb3B5IGl0IHdpdGggdGhlIHN0YW5kYXJkXG4gKiBwcm9wZXJ0aWVzIChleGNlcHQgYHhgIGFuZCBgeWAgd2hpY2ggYXJlIG5vdCB3aWRlbHkgc3VwcG9ydGVkKS4gVGhpcyBoZWxwc1xuICogYXZvaWQgaW1wbGVtZW50YXRpb25zIHdoZXJlIGtleXMgYXJlIG5vbi1lbnVtZXJhYmxlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgIEVsZW1lbnQgd2hvc2UgYENsaWVudFJlY3RgIHdlIHdhbnQgdG8gY2FsY3VsYXRlLlxuICpcbiAqIEByZXR1cm4ge09iamVjdHx1bmRlZmluZWR9XG4gKiAgICAgICAgIEFsd2F5cyByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IC0gb3IgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90LlxuICovXG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbCkge1xuICBpZiAoZWwgJiYgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBbJ2JvdHRvbScsICdoZWlnaHQnLCAnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnd2lkdGgnXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBpZiAocmVjdFtrXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlY3Rba107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5oZWlnaHQpIHtcbiAgICAgIHJlc3VsdC5oZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUoZWwsICdoZWlnaHQnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHQud2lkdGgpIHtcbiAgICAgIHJlc3VsdC53aWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZShlbCwgJ3dpZHRoJykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgYSBET00gZWxlbWVudCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBAdHlwZWRlZiAge09iamVjdH0gbW9kdWxlOmRvbX5Qb3NpdGlvblxuICpcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0XG4gKiAgICAgICAgICAgUGl4ZWxzIHRvIHRoZSBsZWZ0LlxuICpcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3BcbiAqICAgICAgICAgICBQaXhlbHMgZnJvbSB0aGUgdG9wLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGluIHRoZSBET00uXG4gKlxuICogVXNlcyBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0ZWNobmlxdWUgZnJvbSBKb2huIFJlc2lnLlxuICpcbiAqIEBzZWUgaHR0cDovL2Vqb2huLm9yZy9ibG9nL2dldGJvdW5kaW5nY2xpZW50cmVjdC1pcy1hd2Vzb21lL1xuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgIEVsZW1lbnQgZnJvbSB3aGljaCB0byBnZXQgb2Zmc2V0LlxuICpcbiAqIEByZXR1cm4ge21vZHVsZTpkb21+UG9zaXRpb259XG4gKiAgICAgICAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCB0aGF0IHdhcyBwYXNzZWQgaW4uXG4gKi9cblxuZnVuY3Rpb24gZmluZFBvc2l0aW9uKGVsKSB7XG4gIHZhciBib3g7XG5cbiAgaWYgKGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBpZiAoIWJveCkge1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcbiAgfVxuXG4gIHZhciBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICB2YXIgY2xpZW50TGVmdCA9IGRvY0VsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93JDEucGFnZVhPZmZzZXQgfHwgYm9keS5zY3JvbGxMZWZ0O1xuICB2YXIgbGVmdCA9IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7XG4gIHZhciBjbGllbnRUb3AgPSBkb2NFbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbmRvdyQxLnBhZ2VZT2Zmc2V0IHx8IGJvZHkuc2Nyb2xsVG9wO1xuICB2YXIgdG9wID0gYm94LnRvcCArIHNjcm9sbFRvcCAtIGNsaWVudFRvcDsgLy8gQW5kcm9pZCBzb21ldGltZXMgcmV0dXJucyBzbGlnaHRseSBvZmYgZGVjaW1hbCB2YWx1ZXMsIHNvIG5lZWQgdG8gcm91bmRcblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IE1hdGgucm91bmQobGVmdCksXG4gICAgdG9wOiBNYXRoLnJvdW5kKHRvcClcbiAgfTtcbn1cbi8qKlxuICogUmVwcmVzZW50cyB4IGFuZCB5IGNvb3JkaW5hdGVzIGZvciBhIERPTSBlbGVtZW50IG9yIG1vdXNlIHBvaW50ZXIuXG4gKlxuICogQHR5cGVkZWYgIHtPYmplY3R9IG1vZHVsZTpkb21+Q29vcmRpbmF0ZXNcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0geFxuICogICAgICAgICAgIHggY29vcmRpbmF0ZSBpbiBwaXhlbHNcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0geVxuICogICAgICAgICAgIHkgY29vcmRpbmF0ZSBpbiBwaXhlbHNcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgcG9pbnRlciBwb3NpdGlvbiB3aXRoaW4gYW4gZWxlbWVudC5cbiAqXG4gKiBUaGUgYmFzZSBvbiB0aGUgY29vcmRpbmF0ZXMgYXJlIHRoZSBib3R0b20gbGVmdCBvZiB0aGUgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbFxuICogICAgICAgICBFbGVtZW50IG9uIHdoaWNoIHRvIGdldCB0aGUgcG9pbnRlciBwb3NpdGlvbiBvbi5cbiAqXG4gKiBAcGFyYW0gIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAqICAgICAgICAgRXZlbnQgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge21vZHVsZTpkb21+Q29vcmRpbmF0ZXN9XG4gKiAgICAgICAgIEEgY29vcmRpbmF0ZXMgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vdXNlIHBvc2l0aW9uLlxuICpcbiAqL1xuXG5mdW5jdGlvbiBnZXRQb2ludGVyUG9zaXRpb24oZWwsIGV2ZW50KSB7XG4gIHZhciBwb3NpdGlvbiA9IHt9O1xuICB2YXIgYm94ID0gZmluZFBvc2l0aW9uKGVsKTtcbiAgdmFyIGJveFcgPSBlbC5vZmZzZXRXaWR0aDtcbiAgdmFyIGJveEggPSBlbC5vZmZzZXRIZWlnaHQ7XG4gIHZhciBib3hZID0gYm94LnRvcDtcbiAgdmFyIGJveFggPSBib3gubGVmdDtcbiAgdmFyIHBhZ2VZID0gZXZlbnQucGFnZVk7XG4gIHZhciBwYWdlWCA9IGV2ZW50LnBhZ2VYO1xuXG4gIGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcykge1xuICAgIHBhZ2VYID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgcGFnZVkgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWTtcbiAgfVxuXG4gIHBvc2l0aW9uLnkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoYm94WSAtIHBhZ2VZICsgYm94SCkgLyBib3hIKSk7XG4gIHBvc2l0aW9uLnggPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAocGFnZVggLSBib3hYKSAvIGJveFcpKTtcbiAgcmV0dXJuIHBvc2l0aW9uO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzLCB2aWEgZHVjayB0eXBpbmcsIHdoZXRoZXIgb3Igbm90IGEgdmFsdWUgaXMgYSB0ZXh0IG5vZGUuXG4gKlxuICogQHBhcmFtICB7TWl4ZWR9IHZhbHVlXG4gKiAgICAgICAgIENoZWNrIGlmIHRoaXMgdmFsdWUgaXMgYSB0ZXh0IG5vZGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgdGV4dCBub2RlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuXG5mdW5jdGlvbiBpc1RleHROb2RlKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUubm9kZVR5cGUgPT09IDM7XG59XG4vKipcbiAqIEVtcHRpZXMgdGhlIGNvbnRlbnRzIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxcbiAqICAgICAgICAgVGhlIGVsZW1lbnQgdG8gZW1wdHkgY2hpbGRyZW4gZnJvbVxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKiAgICAgICAgIFRoZSBlbGVtZW50IHdpdGggbm8gY2hpbGRyZW5cbiAqL1xuXG5mdW5jdGlvbiBlbXB0eUVsKGVsKSB7XG4gIHdoaWxlIChlbC5maXJzdENoaWxkKSB7XG4gICAgZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gZWw7XG59XG4vKipcbiAqIFRoaXMgaXMgYSBtaXhlZCB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBjb250ZW50IHRvIGJlIGluamVjdGVkIGludG8gdGhlIERPTVxuICogdmlhIHNvbWUgbWV0aG9kLiBJdCBjYW4gYmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczpcbiAqXG4gKiBUeXBlICAgICAgIHwgRGVzY3JpcHRpb25cbiAqIC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS1cbiAqIGBzdHJpbmdgICAgfCBUaGUgdmFsdWUgd2lsbCBiZSBub3JtYWxpemVkIGludG8gYSB0ZXh0IG5vZGUuXG4gKiBgRWxlbWVudGAgIHwgVGhlIHZhbHVlIHdpbGwgYmUgYWNjZXB0ZWQgYXMtaXMuXG4gKiBgVGV4dE5vZGVgIHwgVGhlIHZhbHVlIHdpbGwgYmUgYWNjZXB0ZWQgYXMtaXMuXG4gKiBgQXJyYXlgICAgIHwgQSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgb2Ygc3RyaW5ncywgZWxlbWVudHMsIHRleHQgbm9kZXMsIG9yIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYSBzdHJpbmcsIGVsZW1lbnQsIG9yIHRleHQgbm9kZSAoYW55IG90aGVyIHJldHVybiB2YWx1ZSwgbGlrZSBhbiBhcnJheSwgd2lsbCBiZSBpZ25vcmVkKS5cbiAqIGBGdW5jdGlvbmAgfCBBIGZ1bmN0aW9uLCB3aGljaCBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBzdHJpbmcsIGVsZW1lbnQsIHRleHQgbm9kZSwgb3IgYXJyYXkgLSBhbnkgb2YgdGhlIG90aGVyIHBvc3NpYmxlIHZhbHVlcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgbWVhbnMgdGhhdCBhIGNvbnRlbnQgZGVzY3JpcHRvciBjb3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmdW5jdGlvbnMsIGJ1dCB0aG9zZSBzZWNvbmQtbGV2ZWwgZnVuY3Rpb25zIG11c3QgcmV0dXJuIHN0cmluZ3MsIGVsZW1lbnRzLCBvciB0ZXh0IG5vZGVzLlxuICpcbiAqIEB0eXBlZGVmIHtzdHJpbmd8RWxlbWVudHxUZXh0Tm9kZXxBcnJheXxGdW5jdGlvbn0gbW9kdWxlOmRvbX5Db250ZW50RGVzY3JpcHRvclxuICovXG5cbi8qKlxuICogTm9ybWFsaXplcyBjb250ZW50IGZvciBldmVudHVhbCBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICpcbiAqIFRoaXMgYWxsb3dzIGEgd2lkZSByYW5nZSBvZiBjb250ZW50IGRlZmluaXRpb24gbWV0aG9kcywgYnV0IGhlbHBzIHByb3RlY3RcbiAqIGZyb20gZmFsbGluZyBpbnRvIHRoZSB0cmFwIG9mIHNpbXBseSB3cml0aW5nIHRvIGBpbm5lckhUTUxgLCB3aGljaCBjb3VsZFxuICogYmUgYW4gWFNTIGNvbmNlcm4uXG4gKlxuICogVGhlIGNvbnRlbnQgZm9yIGFuIGVsZW1lbnQgY2FuIGJlIHBhc3NlZCBpbiBtdWx0aXBsZSB0eXBlcyBhbmRcbiAqIGNvbWJpbmF0aW9ucywgd2hvc2UgYmVoYXZpb3IgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpkb21+Q29udGVudERlc2NyaXB0b3J9IGNvbnRlbnRcbiAqICAgICAgICBBIGNvbnRlbnQgZGVzY3JpcHRvciB2YWx1ZS5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqICAgICAgICAgQWxsIG9mIHRoZSBjb250ZW50IHRoYXQgd2FzIHBhc3NlZCBpbiwgbm9ybWFsaXplZCB0byBhbiBhcnJheSBvZlxuICogICAgICAgICBlbGVtZW50cyBvciB0ZXh0IG5vZGVzLlxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRlbnQoY29udGVudCkge1xuICAvLyBGaXJzdCwgaW52b2tlIGNvbnRlbnQgaWYgaXQgaXMgYSBmdW5jdGlvbi4gSWYgaXQgcHJvZHVjZXMgYW4gYXJyYXksXG4gIC8vIHRoYXQgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBub3JtYWxpemF0aW9uLlxuICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb250ZW50ID0gY29udGVudCgpO1xuICB9IC8vIE5leHQgdXAsIG5vcm1hbGl6ZSB0byBhbiBhcnJheSwgc28gb25lIG9yIG1hbnkgaXRlbXMgY2FuIGJlIG5vcm1hbGl6ZWQsXG4gIC8vIGZpbHRlcmVkLCBhbmQgcmV0dXJuZWQuXG5cblxuICByZXR1cm4gKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdKS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gRmlyc3QsIGludm9rZSB2YWx1ZSBpZiBpdCBpcyBhIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYSBuZXcgdmFsdWUsXG4gICAgLy8gd2hpY2ggd2lsbCBiZSBzdWJzZXF1ZW50bHkgbm9ybWFsaXplZCB0byBhIE5vZGUgb2Ygc29tZSBraW5kLlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbCh2YWx1ZSkgfHwgaXNUZXh0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXFxTLy50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlKTtcbiAgICB9XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xufVxuLyoqXG4gKiBOb3JtYWxpemVzIGFuZCBhcHBlbmRzIGNvbnRlbnQgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbFxuICogICAgICAgICBFbGVtZW50IHRvIGFwcGVuZCBub3JtYWxpemVkIGNvbnRlbnQgdG8uXG4gKlxuICogQHBhcmFtIHttb2R1bGU6ZG9tfkNvbnRlbnREZXNjcmlwdG9yfSBjb250ZW50XG4gKiAgICAgICAgQSBjb250ZW50IGRlc2NyaXB0b3IgdmFsdWUuXG4gKlxuICogQHJldHVybiB7RWxlbWVudH1cbiAqICAgICAgICAgVGhlIGVsZW1lbnQgd2l0aCBhcHBlbmRlZCBub3JtYWxpemVkIGNvbnRlbnQuXG4gKi9cblxuZnVuY3Rpb24gYXBwZW5kQ29udGVudChlbCwgY29udGVudCkge1xuICBub3JtYWxpemVDb250ZW50KGNvbnRlbnQpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gZWwuYXBwZW5kQ2hpbGQobm9kZSk7XG4gIH0pO1xuICByZXR1cm4gZWw7XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgYW5kIGluc2VydHMgY29udGVudCBpbnRvIGFuIGVsZW1lbnQ7IHRoaXMgaXMgaWRlbnRpY2FsIHRvXG4gKiBgYXBwZW5kQ29udGVudCgpYCwgZXhjZXB0IGl0IGVtcHRpZXMgdGhlIGVsZW1lbnQgZmlyc3QuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogICAgICAgIEVsZW1lbnQgdG8gaW5zZXJ0IG5vcm1hbGl6ZWQgY29udGVudCBpbnRvLlxuICpcbiAqIEBwYXJhbSB7bW9kdWxlOmRvbX5Db250ZW50RGVzY3JpcHRvcn0gY29udGVudFxuICogICAgICAgIEEgY29udGVudCBkZXNjcmlwdG9yIHZhbHVlLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKiAgICAgICAgIFRoZSBlbGVtZW50IHdpdGggaW5zZXJ0ZWQgbm9ybWFsaXplZCBjb250ZW50LlxuICovXG5cbmZ1bmN0aW9uIGluc2VydENvbnRlbnQoZWwsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIGFwcGVuZENvbnRlbnQoZW1wdHlFbChlbCksIGNvbnRlbnQpO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhbiBldmVudCB3YXMgYSBzaW5nbGUgbGVmdCBjbGljay5cbiAqXG4gKiBAcGFyYW0gIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAqICAgICAgICAgRXZlbnQgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIFdpbGwgYmUgYHRydWVgIGlmIGEgc2luZ2xlIGxlZnQgY2xpY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5cbmZ1bmN0aW9uIGlzU2luZ2xlTGVmdENsaWNrKGV2ZW50KSB7XG4gIC8vIE5vdGU6IGlmIHlvdSBjcmVhdGUgc29tZXRoaW5nIGRyYWdnYWJsZSwgYmUgc3VyZSB0b1xuICAvLyBjYWxsIGl0IG9uIGJvdGggYG1vdXNlZG93bmAgYW5kIGBtb3VzZW1vdmVgIGV2ZW50LFxuICAvLyBvdGhlcndpc2UgYG1vdXNlZG93bmAgc2hvdWxkIGJlIGVub3VnaCBmb3IgYSBidXR0b25cbiAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gdW5kZWZpbmVkICYmIGV2ZW50LmJ1dHRvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdoeSBkbyB3ZSBuZWVkIGBidXR0b25zYCA/XG4gICAgLy8gQmVjYXVzZSwgbWlkZGxlIG1vdXNlIHNvbWV0aW1lcyBoYXZlIHRoaXM6XG4gICAgLy8gZS5idXR0b24gPT09IDAgYW5kIGUuYnV0dG9ucyA9PT0gNFxuICAgIC8vIEZ1cnRoZXJtb3JlLCB3ZSB3YW50IHRvIHByZXZlbnQgY29tYmluYXRpb24gY2xpY2ssIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gSE9MRCBtaWRkbGVtb3VzZSB0aGVuIGxlZnQgY2xpY2ssIHRoYXQgd291bGQgYmVcbiAgICAvLyBlLmJ1dHRvbiA9PT0gMCwgZS5idXR0b25zID09PSA1XG4gICAgLy8ganVzdCBgYnV0dG9uYCBpcyBub3QgZ29ubmEgd29ya1xuICAgIC8vIEFscmlnaHQsIHRoZW4gd2hhdCB0aGlzIGJsb2NrIGRvZXMgP1xuICAgIC8vIHRoaXMgaXMgZm9yIGNocm9tZSBgc2ltdWxhdGUgbW9iaWxlIGRldmljZXNgXG4gICAgLy8gSSB3YW50IHRvIHN1cHBvcnQgdGhpcyBhcyB3ZWxsXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LmJ1dHRvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFRvdWNoIHNjcmVlbiwgc29tZXRpbWVzIG9uIHNvbWUgc3BlY2lmaWMgZGV2aWNlLCBgYnV0dG9uc2BcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgKHNhZmFyaSBvbiBpb3MsIGJsYWNrYmVycnkuLi4pXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gYG1vdXNldXBgIGV2ZW50IG9uIGEgc2luZ2xlIGxlZnQgY2xpY2sgaGFzXG4gIC8vIGBidXR0b25gIGFuZCBgYnV0dG9uc2AgZXF1YWwgdG8gMFxuXG5cbiAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZXVwJyAmJiBldmVudC5idXR0b24gPT09IDAgJiYgZXZlbnQuYnV0dG9ucyA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCB8fCBldmVudC5idXR0b25zICE9PSAxKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgcmVhc29uIHdlIGhhdmUgdGhvc2UgaWYgZWxzZSBibG9jayBhYm92ZVxuICAgIC8vIGlmIGFueSBzcGVjaWFsIGNhc2Ugd2UgY2FuIGNhdGNoIGFuZCBsZXQgaXQgc2xpZGVcbiAgICAvLyB3ZSBkbyBpdCBhYm92ZSwgd2hlbiBnZXQgdG8gaGVyZSwgdGhpcyBkZWZpbml0ZWx5XG4gICAgLy8gaXMtbm90LWxlZnQtY2xpY2tcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRmluZHMgYSBzaW5nbGUgRE9NIGVsZW1lbnQgbWF0Y2hpbmcgYHNlbGVjdG9yYCB3aXRoaW4gdGhlIG9wdGlvbmFsXG4gKiBgY29udGV4dGAgb2YgYW5vdGhlciBET00gZWxlbWVudCAoZGVmYXVsdGluZyB0byBgZG9jdW1lbnRgKS5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiAgICAgICAgIEEgdmFsaWQgQ1NTIHNlbGVjdG9yLCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBgcXVlcnlTZWxlY3RvcmAuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudHxTdHJpbmd9IFtjb250ZXh0PWRvY3VtZW50XVxuICogICAgICAgICBBIERPTSBlbGVtZW50IHdpdGhpbiB3aGljaCB0byBxdWVyeS4gQ2FuIGFsc28gYmUgYSBzZWxlY3RvclxuICogICAgICAgICBzdHJpbmcgaW4gd2hpY2ggY2FzZSB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCB3aWxsIGJlIHVzZWRcbiAqICAgICAgICAgYXMgY29udGV4dC4gSWYgbWlzc2luZyAob3Igbm8gZWxlbWVudCBtYXRjaGVzIHNlbGVjdG9yKSwgZmFsbHNcbiAqICAgICAgICAgYmFjayB0byBgZG9jdW1lbnRgLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR8bnVsbH1cbiAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgZm91bmQgb3IgbnVsbC5cbiAqL1xuXG52YXIgJCA9IGNyZWF0ZVF1ZXJpZXIoJ3F1ZXJ5U2VsZWN0b3InKTtcbi8qKlxuICogRmluZHMgYSBhbGwgRE9NIGVsZW1lbnRzIG1hdGNoaW5nIGBzZWxlY3RvcmAgd2l0aGluIHRoZSBvcHRpb25hbFxuICogYGNvbnRleHRgIG9mIGFub3RoZXIgRE9NIGVsZW1lbnQgKGRlZmF1bHRpbmcgdG8gYGRvY3VtZW50YCkuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzZWxlY3RvclxuICogICAgICAgICBBIHZhbGlkIENTUyBzZWxlY3Rvciwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gYHF1ZXJ5U2VsZWN0b3JBbGxgLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR8U3RyaW5nfSBbY29udGV4dD1kb2N1bWVudF1cbiAqICAgICAgICAgQSBET00gZWxlbWVudCB3aXRoaW4gd2hpY2ggdG8gcXVlcnkuIENhbiBhbHNvIGJlIGEgc2VsZWN0b3JcbiAqICAgICAgICAgc3RyaW5nIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgd2lsbCBiZSB1c2VkXG4gKiAgICAgICAgIGFzIGNvbnRleHQuIElmIG1pc3NpbmcgKG9yIG5vIGVsZW1lbnQgbWF0Y2hlcyBzZWxlY3RvciksIGZhbGxzXG4gKiAgICAgICAgIGJhY2sgdG8gYGRvY3VtZW50YC5cbiAqXG4gKiBAcmV0dXJuIHtOb2RlTGlzdH1cbiAqICAgICAgICAgQSBlbGVtZW50IGxpc3Qgb2YgZWxlbWVudHMgdGhhdCB3ZXJlIGZvdW5kLiBXaWxsIGJlIGVtcHR5IGlmIG5vbmVcbiAqICAgICAgICAgd2VyZSBmb3VuZC5cbiAqXG4gKi9cblxudmFyICQkID0gY3JlYXRlUXVlcmllcigncXVlcnlTZWxlY3RvckFsbCcpO1xuXG52YXIgRG9tID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBpc1JlYWw6IGlzUmVhbCxcbiAgaXNFbDogaXNFbCxcbiAgaXNJbkZyYW1lOiBpc0luRnJhbWUsXG4gIGNyZWF0ZUVsOiBjcmVhdGVFbCxcbiAgdGV4dENvbnRlbnQ6IHRleHRDb250ZW50LFxuICBwcmVwZW5kVG86IHByZXBlbmRUbyxcbiAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICBhZGRDbGFzczogYWRkQ2xhc3MsXG4gIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgdG9nZ2xlQ2xhc3M6IHRvZ2dsZUNsYXNzLFxuICBzZXRBdHRyaWJ1dGVzOiBzZXRBdHRyaWJ1dGVzLFxuICBnZXRBdHRyaWJ1dGVzOiBnZXRBdHRyaWJ1dGVzLFxuICBnZXRBdHRyaWJ1dGU6IGdldEF0dHJpYnV0ZSxcbiAgc2V0QXR0cmlidXRlOiBzZXRBdHRyaWJ1dGUsXG4gIHJlbW92ZUF0dHJpYnV0ZTogcmVtb3ZlQXR0cmlidXRlLFxuICBibG9ja1RleHRTZWxlY3Rpb246IGJsb2NrVGV4dFNlbGVjdGlvbixcbiAgdW5ibG9ja1RleHRTZWxlY3Rpb246IHVuYmxvY2tUZXh0U2VsZWN0aW9uLFxuICBnZXRCb3VuZGluZ0NsaWVudFJlY3Q6IGdldEJvdW5kaW5nQ2xpZW50UmVjdCxcbiAgZmluZFBvc2l0aW9uOiBmaW5kUG9zaXRpb24sXG4gIGdldFBvaW50ZXJQb3NpdGlvbjogZ2V0UG9pbnRlclBvc2l0aW9uLFxuICBpc1RleHROb2RlOiBpc1RleHROb2RlLFxuICBlbXB0eUVsOiBlbXB0eUVsLFxuICBub3JtYWxpemVDb250ZW50OiBub3JtYWxpemVDb250ZW50LFxuICBhcHBlbmRDb250ZW50OiBhcHBlbmRDb250ZW50LFxuICBpbnNlcnRDb250ZW50OiBpbnNlcnRDb250ZW50LFxuICBpc1NpbmdsZUxlZnRDbGljazogaXNTaW5nbGVMZWZ0Q2xpY2ssXG4gICQ6ICQsXG4gICQkOiAkJFxufSk7XG5cbi8qKlxuICogQGZpbGUgc2V0dXAuanMgLSBGdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgYSBwbGF5ZXIgd2l0aG91dFxuICogdXNlciBpbnRlcmFjdGlvbiBiYXNlZCBvbiB0aGUgZGF0YS1zZXR1cCBgYXR0cmlidXRlYCBvZiB0aGUgdmlkZW8gdGFnLlxuICpcbiAqIEBtb2R1bGUgc2V0dXBcbiAqL1xudmFyIF93aW5kb3dMb2FkZWQgPSBmYWxzZTtcbnZhciB2aWRlb2pzO1xuLyoqXG4gKiBTZXQgdXAgYW55IHRhZ3MgdGhhdCBoYXZlIGEgZGF0YS1zZXR1cCBgYXR0cmlidXRlYCB3aGVuIHRoZSBwbGF5ZXIgaXMgc3RhcnRlZC5cbiAqL1xuXG52YXIgYXV0b1NldHVwID0gZnVuY3Rpb24gYXV0b1NldHVwKCkge1xuICAvLyBQcm90ZWN0IGFnYWluc3QgYnJlYWthZ2UgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzIGFuZCBjaGVjayBnbG9iYWwgYXV0b1NldHVwIG9wdGlvbi5cbiAgaWYgKCFpc1JlYWwoKSB8fCB2aWRlb2pzLm9wdGlvbnMuYXV0b1NldHVwID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2aWRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJykpO1xuICB2YXIgYXVkaW9zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2F1ZGlvJykpO1xuICB2YXIgZGl2cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlby1qcycpKTtcbiAgdmFyIG1lZGlhRWxzID0gdmlkcy5jb25jYXQoYXVkaW9zLCBkaXZzKTsgLy8gQ2hlY2sgaWYgYW55IG1lZGlhIGVsZW1lbnRzIGV4aXN0XG5cbiAgaWYgKG1lZGlhRWxzICYmIG1lZGlhRWxzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZSA9IG1lZGlhRWxzLmxlbmd0aDsgaSA8IGU7IGkrKykge1xuICAgICAgdmFyIG1lZGlhRWwgPSBtZWRpYUVsc1tpXTsgLy8gQ2hlY2sgaWYgZWxlbWVudCBleGlzdHMsIGhhcyBnZXRBdHRyaWJ1dGUgZnVuYy5cblxuICAgICAgaWYgKG1lZGlhRWwgJiYgbWVkaWFFbC5nZXRBdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgcGxheWVyIGhhc24ndCBhbHJlYWR5IGJlZW4gc2V0IHVwLlxuICAgICAgICBpZiAobWVkaWFFbC5wbGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBvcHRpb25zID0gbWVkaWFFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2V0dXAnKTsgLy8gQ2hlY2sgaWYgZGF0YS1zZXR1cCBhdHRyIGV4aXN0cy5cbiAgICAgICAgICAvLyBXZSBvbmx5IGF1dG8tc2V0dXAgaWYgdGhleSd2ZSBhZGRlZCB0aGUgZGF0YS1zZXR1cCBhdHRyLlxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgdmlkZW8uanMgaW5zdGFuY2UuXG4gICAgICAgICAgICB2aWRlb2pzKG1lZGlhRWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJZiBnZXRBdHRyaWJ1dGUgaXNuJ3QgZGVmaW5lZCwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgRE9NLlxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdXRvU2V0dXBUaW1lb3V0KDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIE5vIHZpZGVvcyB3ZXJlIGZvdW5kLCBzbyBrZWVwIGxvb3BpbmcgdW5sZXNzIHBhZ2UgaXMgZmluaXNoZWQgbG9hZGluZy5cblxuICB9IGVsc2UgaWYgKCFfd2luZG93TG9hZGVkKSB7XG4gICAgYXV0b1NldHVwVGltZW91dCgxKTtcbiAgfVxufTtcbi8qKlxuICogV2FpdCB1bnRpbCB0aGUgcGFnZSBpcyBsb2FkZWQgYmVmb3JlIHJ1bm5pbmcgYXV0b1NldHVwLiBUaGlzIHdpbGwgYmUgY2FsbGVkIGluXG4gKiBhdXRvU2V0dXAgaWYgYGhhc0xvYWRlZGAgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2FpdFxuICogICAgICAgIEhvdyBsb25nIHRvIHdhaXQgaW4gbXNcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTp2aWRlb2pzfSBbdmpzXVxuICogICAgICAgIFRoZSB2aWRlb2pzIGxpYnJhcnkgZnVuY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIGF1dG9TZXR1cFRpbWVvdXQod2FpdCwgdmpzKSB7XG4gIGlmICh2anMpIHtcbiAgICB2aWRlb2pzID0gdmpzO1xuICB9XG5cbiAgd2luZG93JDEuc2V0VGltZW91dChhdXRvU2V0dXAsIHdhaXQpO1xufVxuLyoqXG4gKiBVc2VkIHRvIHNldCB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2Ygd2luZG93IGxvYWRlZCBzdGF0ZSB0byB0cnVlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBzZXRXaW5kb3dMb2FkZWQoKSB7XG4gIF93aW5kb3dMb2FkZWQgPSB0cnVlO1xuICB3aW5kb3ckMS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0V2luZG93TG9hZGVkKTtcbn1cblxuaWYgKGlzUmVhbCgpKSB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgc2V0V2luZG93TG9hZGVkKCk7XG4gIH0gZWxzZSB7XG4gICAgLyoqXG4gICAgICogTGlzdGVuIGZvciB0aGUgbG9hZCBldmVudCBvbiB3aW5kb3csIGFuZCBzZXQgX3dpbmRvd0xvYWRlZCB0byB0cnVlLlxuICAgICAqXG4gICAgICogV2UgdXNlIGEgc3RhbmRhcmQgZXZlbnQgbGlzdGVuZXIgaGVyZSB0byBhdm9pZCBpbmNyZW1lbnRpbmcgdGhlIEdVSURcbiAgICAgKiBiZWZvcmUgYW55IHBsYXllcnMgYXJlIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAbGlzdGVucyBsb2FkXG4gICAgICovXG4gICAgd2luZG93JDEuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNldFdpbmRvd0xvYWRlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZmlsZSBzdHlsZXNoZWV0LmpzXG4gKiBAbW9kdWxlIHN0eWxlc2hlZXRcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSBET00gc3lsZSBlbGVtZW50IGdpdmVuIGEgY2xhc3NOYW1lIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gKiAgICAgICAgVGhlIGNsYXNzTmFtZSB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgc3R5bGUgZWxlbWVudC5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICovXG5cbnZhciBjcmVhdGVTdHlsZUVsZW1lbnQgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQoY2xhc3NOYW1lKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcbi8qKlxuICogQWRkIHRleHQgdG8gYSBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiAgICAgICAgVGhlIEVsZW1lbnQgdG8gYWRkIHRleHQgY29udGVudCB0by5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuICogICAgICAgIFRoZSB0ZXh0IHRvIGFkZCB0byB0aGUgZWxlbWVudC5cbiAqL1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChlbCwgY29udGVudCkge1xuICBpZiAoZWwuc3R5bGVTaGVldCkge1xuICAgIGVsLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNvbnRlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZWwudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9XG59O1xuXG4vKipcbiAqIEBmaWxlIGd1aWQuanNcbiAqIEBtb2R1bGUgZ3VpZFxuICovXG4vLyBEZWZhdWx0IHZhbHVlIGZvciBHVUlEcy4gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgdGhlIEdVSUQgY291bnRlciBpbiB0ZXN0cy5cbi8vXG4vLyBUaGUgaW5pdGlhbCBHVUlEIGlzIDMgYmVjYXVzZSBzb21lIHVzZXJzIGhhdmUgY29tZSB0byByZWx5IG9uIHRoZSBmaXJzdFxuLy8gZGVmYXVsdCBwbGF5ZXIgSUQgZW5kaW5nIHVwIGFzIGB2anNfdmlkZW9fM2AuXG4vL1xuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9wdWxsLzYyMTZcbnZhciBfaW5pdGlhbEd1aWQgPSAzO1xuLyoqXG4gKiBVbmlxdWUgSUQgZm9yIGFuIGVsZW1lbnQgb3IgZnVuY3Rpb25cbiAqXG4gKiBAdHlwZSB7TnVtYmVyfVxuICovXG5cbnZhciBfZ3VpZCA9IF9pbml0aWFsR3VpZDtcbi8qKlxuICogR2V0IGEgdW5pcXVlIGF1dG8taW5jcmVtZW50aW5nIElEIGJ5IG51bWJlciB0aGF0IGhhcyBub3QgYmVlbiByZXR1cm5lZCBiZWZvcmUuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICogICAgICAgICBBIG5ldyB1bmlxdWUgSUQuXG4gKi9cblxuZnVuY3Rpb24gbmV3R1VJRCgpIHtcbiAgcmV0dXJuIF9ndWlkKys7XG59XG5cbi8qKlxuICogQGZpbGUgZG9tLWRhdGEuanNcbiAqIEBtb2R1bGUgZG9tLWRhdGFcbiAqL1xudmFyIEZha2VXZWFrTWFwO1xuXG5pZiAoIXdpbmRvdyQxLldlYWtNYXApIHtcbiAgRmFrZVdlYWtNYXAgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGYWtlV2Vha01hcCgpIHtcbiAgICAgIHRoaXMudmRhdGEgPSAndmRhdGEnICsgTWF0aC5mbG9vcih3aW5kb3ckMS5wZXJmb3JtYW5jZSAmJiB3aW5kb3ckMS5wZXJmb3JtYW5jZS5ub3coKSB8fCBEYXRlLm5vdygpKTtcbiAgICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8gPSBGYWtlV2Vha01hcC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBhY2Nlc3MgPSBrZXlbdGhpcy52ZGF0YV0gfHwgbmV3R1VJRCgpO1xuXG4gICAgICBpZiAoIWtleVt0aGlzLnZkYXRhXSkge1xuICAgICAgICBrZXlbdGhpcy52ZGF0YV0gPSBhY2Nlc3M7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YVthY2Nlc3NdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHZhciBhY2Nlc3MgPSBrZXlbdGhpcy52ZGF0YV07IC8vIHdlIGhhdmUgZGF0YSwgcmV0dXJuIGl0XG5cbiAgICAgIGlmIChhY2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVthY2Nlc3NdO1xuICAgICAgfSAvLyB3ZSBkb24ndCBoYXZlIGRhdGEsIHJldHVybiBub3RoaW5nLlxuICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBleHBsaWNpdGx5IGFzIHRoYXQncyB0aGUgY29udHJhY3QgZm9yIHRoaXMgbWV0aG9kXG5cblxuICAgICAgbG9nKCdXZSBoYXZlIG5vIGRhdGEgZm9yIHRoaXMgZWxlbWVudCcsIGtleSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICBfcHJvdG8uaGFzID0gZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgdmFyIGFjY2VzcyA9IGtleVt0aGlzLnZkYXRhXTtcbiAgICAgIHJldHVybiBhY2Nlc3MgaW4gdGhpcy5kYXRhO1xuICAgIH07XG5cbiAgICBfcHJvdG9bXCJkZWxldGVcIl0gPSBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgdmFyIGFjY2VzcyA9IGtleVt0aGlzLnZkYXRhXTtcblxuICAgICAgaWYgKGFjY2Vzcykge1xuICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2FjY2Vzc107XG4gICAgICAgIGRlbGV0ZSBrZXlbdGhpcy52ZGF0YV07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBGYWtlV2Vha01hcDtcbiAgfSgpO1xufVxuLyoqXG4gKiBFbGVtZW50IERhdGEgU3RvcmUuXG4gKlxuICogQWxsb3dzIGZvciBiaW5kaW5nIGRhdGEgdG8gYW4gZWxlbWVudCB3aXRob3V0IHB1dHRpbmcgaXQgZGlyZWN0bHkgb24gdGhlXG4gKiBlbGVtZW50LiBFeC4gRXZlbnQgbGlzdGVuZXJzIGFyZSBzdG9yZWQgaGVyZS5cbiAqIChhbHNvIGZyb20ganNuaW5qYS5jb20sIHNsaWdodGx5IG1vZGlmaWVkIGFuZCB1cGRhdGVkIGZvciBjbG9zdXJlIGNvbXBpbGVyKVxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIERvbURhdGEgPSB3aW5kb3ckMS5XZWFrTWFwID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBGYWtlV2Vha01hcCgpO1xuXG4vKipcbiAqIEBmaWxlIGV2ZW50cy5qcy4gQW4gRXZlbnQgU3lzdGVtIChKb2huIFJlc2lnIC0gU2VjcmV0cyBvZiBhIEpTIE5pbmphIGh0dHA6Ly9qc25pbmphLmNvbS8pXG4gKiAoT3JpZ2luYWwgYm9vayB2ZXJzaW9uIHdhc24ndCBjb21wbGV0ZWx5IHVzYWJsZSwgc28gZml4ZWQgc29tZSB0aGluZ3MgYW5kIG1hZGUgQ2xvc3VyZSBDb21waWxlciBjb21wYXRpYmxlKVxuICogVGhpcyBzaG91bGQgd29yayB2ZXJ5IHNpbWlsYXJseSB0byBqUXVlcnkncyBldmVudHMsIGhvd2V2ZXIgaXQncyBiYXNlZCBvZmYgdGhlIGJvb2sgdmVyc2lvbiB3aGljaCBpc24ndCBhc1xuICogcm9idXN0IGFzIGpxdWVyeSdzLCBzbyB0aGVyZSdzIHByb2JhYmx5IHNvbWUgZGlmZmVyZW5jZXMuXG4gKlxuICogQGZpbGUgZXZlbnRzLmpzXG4gKiBAbW9kdWxlIGV2ZW50c1xuICovXG4vKipcbiAqIENsZWFuIHVwIHRoZSBsaXN0ZW5lciBjYWNoZSBhbmQgZGlzcGF0Y2hlcnNcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtXG4gKiAgICAgICAgRWxlbWVudCB0byBjbGVhbiB1cFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiAgICAgICAgVHlwZSBvZiBldmVudCB0byBjbGVhbiB1cFxuICovXG5cbmZ1bmN0aW9uIF9jbGVhblVwRXZlbnRzKGVsZW0sIHR5cGUpIHtcbiAgaWYgKCFEb21EYXRhLmhhcyhlbGVtKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0gRG9tRGF0YS5nZXQoZWxlbSk7IC8vIFJlbW92ZSB0aGUgZXZlbnRzIG9mIGEgcGFydGljdWxhciB0eXBlIGlmIHRoZXJlIGFyZSBub25lIGxlZnRcblxuICBpZiAoZGF0YS5oYW5kbGVyc1t0eXBlXS5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgZGF0YS5oYW5kbGVyc1t0eXBlXTsgLy8gZGF0YS5oYW5kbGVyc1t0eXBlXSA9IG51bGw7XG4gICAgLy8gU2V0dGluZyB0byBudWxsIHdhcyBjYXVzaW5nIGFuIGVycm9yIHdpdGggZGF0YS5oYW5kbGVyc1xuICAgIC8vIFJlbW92ZSB0aGUgbWV0YS1oYW5kbGVyIGZyb20gdGhlIGVsZW1lbnRcblxuICAgIGlmIChlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBkYXRhLmRpc3BhdGNoZXIsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0uZGV0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW0uZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGRhdGEuZGlzcGF0Y2hlcik7XG4gICAgfVxuICB9IC8vIFJlbW92ZSB0aGUgZXZlbnRzIG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gdHlwZXMgbGVmdFxuXG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGRhdGEuaGFuZGxlcnMpLmxlbmd0aCA8PSAwKSB7XG4gICAgZGVsZXRlIGRhdGEuaGFuZGxlcnM7XG4gICAgZGVsZXRlIGRhdGEuZGlzcGF0Y2hlcjtcbiAgICBkZWxldGUgZGF0YS5kaXNhYmxlZDtcbiAgfSAvLyBGaW5hbGx5IHJlbW92ZSB0aGUgZWxlbWVudCBkYXRhIGlmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdFxuXG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgIERvbURhdGFbXCJkZWxldGVcIl0oZWxlbSk7XG4gIH1cbn1cbi8qKlxuICogTG9vcHMgdGhyb3VnaCBhbiBhcnJheSBvZiBldmVudCB0eXBlcyBhbmQgY2FsbHMgdGhlIHJlcXVlc3RlZCBtZXRob2QgZm9yIGVhY2ggdHlwZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogICAgICAgIFRoZSBldmVudCBtZXRob2Qgd2Ugd2FudCB0byB1c2UuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbVxuICogICAgICAgIEVsZW1lbnQgb3Igb2JqZWN0IHRvIGJpbmQgbGlzdGVuZXJzIHRvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqICAgICAgICBUeXBlIG9mIGV2ZW50IHRvIGJpbmQgdG8uXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudExpc3RlbmVyfSBjYWxsYmFja1xuICogICAgICAgIEV2ZW50IGxpc3RlbmVyLlxuICovXG5cblxuZnVuY3Rpb24gX2hhbmRsZU11bHRpcGxlRXZlbnRzKGZuLCBlbGVtLCB0eXBlcywgY2FsbGJhY2spIHtcbiAgdHlwZXMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIC8vIENhbGwgdGhlIGV2ZW50IG1ldGhvZCBmb3IgZWFjaCBvbmUgb2YgdGhlIHR5cGVzXG4gICAgZm4oZWxlbSwgdHlwZSwgY2FsbGJhY2spO1xuICB9KTtcbn1cbi8qKlxuICogRml4IGEgbmF0aXZlIGV2ZW50IHRvIGhhdmUgc3RhbmRhcmQgcHJvcGVydHkgdmFsdWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKiAgICAgICAgRXZlbnQgb2JqZWN0IHRvIGZpeC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgICAgICAgIEZpeGVkIGV2ZW50IG9iamVjdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpeEV2ZW50KGV2ZW50KSB7XG4gIGZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBpZiBmaXhpbmcgdXAgaXMgbmVlZGVkXG4gIC8vIFVzZWQgdG8gY2hlY2sgaWYgIWV2ZW50LnN0b3BQcm9wYWdhdGlvbiBpbnN0ZWFkIG9mIGlzUHJvcGFnYXRpb25TdG9wcGVkXG4gIC8vIEJ1dCBuYXRpdmUgZXZlbnRzIHJldHVybiB0cnVlIGZvciBzdG9wUHJvcGFnYXRpb24sIGJ1dCBkb24ndCBoYXZlXG4gIC8vIG90aGVyIGV4cGVjdGVkIG1ldGhvZHMgbGlrZSBpc1Byb3BhZ2F0aW9uU3RvcHBlZC4gU2VlbXMgdG8gYmUgYSBwcm9ibGVtXG4gIC8vIHdpdGggdGhlIEphdmFzY3JpcHQgTmluamEgY29kZS4gU28gd2UncmUganVzdCBvdmVycmlkaW5nIGFsbCBldmVudHMgbm93LlxuXG5cbiAgaWYgKCFldmVudCB8fCAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQpIHtcbiAgICB2YXIgb2xkID0gZXZlbnQgfHwgd2luZG93JDEuZXZlbnQ7XG4gICAgZXZlbnQgPSB7fTsgLy8gQ2xvbmUgdGhlIG9sZCBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSB2YWx1ZXMgZXZlbnQgPSB7fTtcbiAgICAvLyBJRTggRG9lc24ndCBsaWtlIHdoZW4geW91IG1lc3Mgd2l0aCBuYXRpdmUgZXZlbnQgcHJvcGVydGllc1xuICAgIC8vIEZpcmVmb3ggcmV0dXJucyBmYWxzZSBmb3IgZXZlbnQuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSBhbmQgb3RoZXIgcHJvcHNcbiAgICAvLyAgd2hpY2ggbWFrZXMgY29weWluZyBtb3JlIGRpZmZpY3VsdC5cbiAgICAvLyBUT0RPOiBQcm9iYWJseSBiZXN0IHRvIGNyZWF0ZSBhIHdoaXRlbGlzdCBvZiBldmVudCBwcm9wc1xuXG4gICAgZm9yICh2YXIga2V5IGluIG9sZCkge1xuICAgICAgLy8gU2FmYXJpIDYuMC4zIHdhcm5zIHlvdSBpZiB5b3UgdHJ5IHRvIGNvcHkgZGVwcmVjYXRlZCBsYXllclgvWVxuICAgICAgLy8gQ2hyb21lIHdhcm5zIHlvdSBpZiB5b3UgdHJ5IHRvIGNvcHkgZGVwcmVjYXRlZCBrZXlib2FyZEV2ZW50LmtleUxvY2F0aW9uXG4gICAgICAvLyBhbmQgd2Via2l0TW92ZW1lbnRYL1lcbiAgICAgIGlmIChrZXkgIT09ICdsYXllclgnICYmIGtleSAhPT0gJ2xheWVyWScgJiYga2V5ICE9PSAna2V5TG9jYXRpb24nICYmIGtleSAhPT0gJ3dlYmtpdE1vdmVtZW50WCcgJiYga2V5ICE9PSAnd2Via2l0TW92ZW1lbnRZJykge1xuICAgICAgICAvLyBDaHJvbWUgMzIrIHdhcm5zIGlmIHlvdSB0cnkgdG8gY29weSBkZXByZWNhdGVkIHJldHVyblZhbHVlLCBidXRcbiAgICAgICAgLy8gd2Ugc3RpbGwgd2FudCB0byBpZiBwcmV2ZW50RGVmYXVsdCBpc24ndCBzdXBwb3J0ZWQgKElFOCkuXG4gICAgICAgIGlmICghKGtleSA9PT0gJ3JldHVyblZhbHVlJyAmJiBvbGQucHJldmVudERlZmF1bHQpKSB7XG4gICAgICAgICAgZXZlbnRba2V5XSA9IG9sZFtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZXZlbnQgb2NjdXJyZWQgb24gdGhpcyBlbGVtZW50XG5cblxuICAgIGlmICghZXZlbnQudGFyZ2V0KSB7XG4gICAgICBldmVudC50YXJnZXQgPSBldmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50O1xuICAgIH0gLy8gSGFuZGxlIHdoaWNoIG90aGVyIGVsZW1lbnQgdGhlIGV2ZW50IGlzIHJlbGF0ZWQgdG9cblxuXG4gICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50O1xuICAgIH0gLy8gU3RvcCB0aGUgZGVmYXVsdCBicm93c2VyIGFjdGlvblxuXG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbGQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgb2xkLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICBvbGQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICBldmVudC5kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7IC8vIFN0b3AgdGhlIGV2ZW50IGZyb20gYnViYmxpbmdcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbGQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIG9sZC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIG9sZC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuICAgIH07XG5cbiAgICBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVybkZhbHNlOyAvLyBTdG9wIHRoZSBldmVudCBmcm9tIGJ1YmJsaW5nIGFuZCBleGVjdXRpbmcgb3RoZXIgaGFuZGxlcnNcblxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbGQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKSB7XG4gICAgICAgIG9sZC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuRmFsc2U7IC8vIEhhbmRsZSBtb3VzZSBwb3NpdGlvblxuXG4gICAgaWYgKGV2ZW50LmNsaWVudFggIT09IG51bGwgJiYgZXZlbnQuY2xpZW50WCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgZXZlbnQucGFnZVggPSBldmVudC5jbGllbnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCk7XG4gICAgICBldmVudC5wYWdlWSA9IGV2ZW50LmNsaWVudFkgKyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudFRvcCB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wIHx8IDApO1xuICAgIH0gLy8gSGFuZGxlIGtleSBwcmVzc2VzXG5cblxuICAgIGV2ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUgfHwgZXZlbnQua2V5Q29kZTsgLy8gRml4IGJ1dHRvbiBmb3IgbW91c2UgY2xpY2tzOlxuICAgIC8vIDAgPT0gbGVmdDsgMSA9PSBtaWRkbGU7IDIgPT0gcmlnaHRcblxuICAgIGlmIChldmVudC5idXR0b24gIT09IG51bGwgJiYgZXZlbnQuYnV0dG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBwYXNzIHZpZGVvanMtc3RhbmRhcmRcbiAgICAgIC8vIGFuZC4uLiB5aWtlcy5cblxuICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAgIGV2ZW50LmJ1dHRvbiA9IGV2ZW50LmJ1dHRvbiAmIDEgPyAwIDogZXZlbnQuYnV0dG9uICYgNCA/IDEgOiBldmVudC5idXR0b24gJiAyID8gMiA6IDA7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuICB9IC8vIFJldHVybnMgZml4ZWQtdXAgaW5zdGFuY2VcblxuXG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogV2hldGhlciBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycyBhcmUgc3VwcG9ydGVkXG4gKi9cblxudmFyIF9zdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgX3N1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93JDEuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdHMpO1xuICAgIHdpbmRvdyQxLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkgey8vIGRpc3JlZ2FyZFxuICB9XG59KSgpO1xuLyoqXG4gKiBUb3VjaCBldmVudHMgQ2hyb21lIGV4cGVjdHMgdG8gYmUgcGFzc2l2ZVxuICovXG5cblxudmFyIHBhc3NpdmVFdmVudHMgPSBbJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJ107XG4vKipcbiAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byBlbGVtZW50XG4gKiBJdCBzdG9yZXMgdGhlIGhhbmRsZXIgZnVuY3Rpb24gaW4gYSBzZXBhcmF0ZSBjYWNoZSBvYmplY3RcbiAqIGFuZCBhZGRzIGEgZ2VuZXJpYyBoYW5kbGVyIHRvIHRoZSBlbGVtZW50J3MgZXZlbnQsXG4gKiBhbG9uZyB3aXRoIGEgdW5pcXVlIGlkIChndWlkKSB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtXG4gKiAgICAgICAgRWxlbWVudCBvciBvYmplY3QgdG8gYmluZCBsaXN0ZW5lcnMgdG9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gdHlwZVxuICogICAgICAgIFR5cGUgb2YgZXZlbnQgdG8gYmluZCB0by5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50TGlzdGVuZXJ9IGZuXG4gKiAgICAgICAgRXZlbnQgbGlzdGVuZXIuXG4gKi9cblxuZnVuY3Rpb24gb24oZWxlbSwgdHlwZSwgZm4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICByZXR1cm4gX2hhbmRsZU11bHRpcGxlRXZlbnRzKG9uLCBlbGVtLCB0eXBlLCBmbik7XG4gIH1cblxuICBpZiAoIURvbURhdGEuaGFzKGVsZW0pKSB7XG4gICAgRG9tRGF0YS5zZXQoZWxlbSwge30pO1xuICB9XG5cbiAgdmFyIGRhdGEgPSBEb21EYXRhLmdldChlbGVtKTsgLy8gV2UgbmVlZCBhIHBsYWNlIHRvIHN0b3JlIGFsbCBvdXIgaGFuZGxlciBkYXRhXG5cbiAgaWYgKCFkYXRhLmhhbmRsZXJzKSB7XG4gICAgZGF0YS5oYW5kbGVycyA9IHt9O1xuICB9XG5cbiAgaWYgKCFkYXRhLmhhbmRsZXJzW3R5cGVdKSB7XG4gICAgZGF0YS5oYW5kbGVyc1t0eXBlXSA9IFtdO1xuICB9XG5cbiAgaWYgKCFmbi5ndWlkKSB7XG4gICAgZm4uZ3VpZCA9IG5ld0dVSUQoKTtcbiAgfVxuXG4gIGRhdGEuaGFuZGxlcnNbdHlwZV0ucHVzaChmbik7XG5cbiAgaWYgKCFkYXRhLmRpc3BhdGNoZXIpIHtcbiAgICBkYXRhLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBkYXRhLmRpc3BhdGNoZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGhhc2gpIHtcbiAgICAgIGlmIChkYXRhLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZlbnQgPSBmaXhFdmVudChldmVudCk7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBkYXRhLmhhbmRsZXJzW2V2ZW50LnR5cGVdO1xuXG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgLy8gQ29weSBoYW5kbGVycyBzbyBpZiBoYW5kbGVycyBhcmUgYWRkZWQvcmVtb3ZlZCBkdXJpbmcgdGhlIHByb2Nlc3MgaXQgZG9lc24ndCB0aHJvdyBldmVyeXRoaW5nIG9mZi5cbiAgICAgICAgdmFyIGhhbmRsZXJzQ29weSA9IGhhbmRsZXJzLnNsaWNlKDApO1xuXG4gICAgICAgIGZvciAodmFyIG0gPSAwLCBuID0gaGFuZGxlcnNDb3B5Lmxlbmd0aDsgbSA8IG47IG0rKykge1xuICAgICAgICAgIGlmIChldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaGFuZGxlcnNDb3B5W21dLmNhbGwoZWxlbSwgZXZlbnQsIGhhc2gpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmhhbmRsZXJzW3R5cGVdLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChlbGVtLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHZhciBvcHRpb25zID0gZmFsc2U7XG5cbiAgICAgIGlmIChfc3VwcG9ydHNQYXNzaXZlICYmIHBhc3NpdmVFdmVudHMuaW5kZXhPZih0eXBlKSA+IC0xKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZGF0YS5kaXNwYXRjaGVyLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0uYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW0uYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGRhdGEuZGlzcGF0Y2hlcik7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGZyb20gYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW1cbiAqICAgICAgICBPYmplY3QgdG8gcmVtb3ZlIGxpc3RlbmVycyBmcm9tLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdHlwZV1cbiAqICAgICAgICBUeXBlIG9mIGxpc3RlbmVyIHRvIHJlbW92ZS4gRG9uJ3QgaW5jbHVkZSB0byByZW1vdmUgYWxsIGV2ZW50cyBmcm9tIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudExpc3RlbmVyfSBbZm5dXG4gKiAgICAgICAgU3BlY2lmaWMgbGlzdGVuZXIgdG8gcmVtb3ZlLiBEb24ndCBpbmNsdWRlIHRvIHJlbW92ZSBsaXN0ZW5lcnMgZm9yIGFuIGV2ZW50XG4gKiAgICAgICAgdHlwZS5cbiAqL1xuXG5mdW5jdGlvbiBvZmYoZWxlbSwgdHlwZSwgZm4pIHtcbiAgLy8gRG9uJ3Qgd2FudCB0byBhZGQgYSBjYWNoZSBvYmplY3QgdGhyb3VnaCBnZXRFbERhdGEgaWYgbm90IG5lZWRlZFxuICBpZiAoIURvbURhdGEuaGFzKGVsZW0pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRhdGEgPSBEb21EYXRhLmdldChlbGVtKTsgLy8gSWYgbm8gZXZlbnRzIGV4aXN0LCBub3RoaW5nIHRvIHVuYmluZFxuXG4gIGlmICghZGF0YS5oYW5kbGVycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgcmV0dXJuIF9oYW5kbGVNdWx0aXBsZUV2ZW50cyhvZmYsIGVsZW0sIHR5cGUsIGZuKTtcbiAgfSAvLyBVdGlsaXR5IGZ1bmN0aW9uXG5cblxuICB2YXIgcmVtb3ZlVHlwZSA9IGZ1bmN0aW9uIHJlbW92ZVR5cGUoZWwsIHQpIHtcbiAgICBkYXRhLmhhbmRsZXJzW3RdID0gW107XG5cbiAgICBfY2xlYW5VcEV2ZW50cyhlbCwgdCk7XG4gIH07IC8vIEFyZSB3ZSByZW1vdmluZyBhbGwgYm91bmQgZXZlbnRzP1xuXG5cbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAodmFyIHQgaW4gZGF0YS5oYW5kbGVycykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLmhhbmRsZXJzIHx8IHt9LCB0KSkge1xuICAgICAgICByZW1vdmVUeXBlKGVsZW0sIHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoYW5kbGVycyA9IGRhdGEuaGFuZGxlcnNbdHlwZV07IC8vIElmIG5vIGhhbmRsZXJzIGV4aXN0LCBub3RoaW5nIHRvIHVuYmluZFxuXG4gIGlmICghaGFuZGxlcnMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gSWYgbm8gbGlzdGVuZXIgd2FzIHByb3ZpZGVkLCByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IgdHlwZVxuXG5cbiAgaWYgKCFmbikge1xuICAgIHJlbW92ZVR5cGUoZWxlbSwgdHlwZSk7XG4gICAgcmV0dXJuO1xuICB9IC8vIFdlJ3JlIG9ubHkgcmVtb3ZpbmcgYSBzaW5nbGUgaGFuZGxlclxuXG5cbiAgaWYgKGZuLmd1aWQpIHtcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IGhhbmRsZXJzLmxlbmd0aDsgbisrKSB7XG4gICAgICBpZiAoaGFuZGxlcnNbbl0uZ3VpZCA9PT0gZm4uZ3VpZCkge1xuICAgICAgICBoYW5kbGVycy5zcGxpY2Uobi0tLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfY2xlYW5VcEV2ZW50cyhlbGVtLCB0eXBlKTtcbn1cbi8qKlxuICogVHJpZ2dlciBhbiBldmVudCBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW1cbiAqICAgICAgICBFbGVtZW50IHRvIHRyaWdnZXIgYW4gZXZlbnQgb25cbiAqXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fHN0cmluZ30gZXZlbnRcbiAqICAgICAgICBBIHN0cmluZyAodGhlIHR5cGUpIG9yIGFuIGV2ZW50IG9iamVjdCB3aXRoIGEgdHlwZSBhdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2hhc2hdXG4gKiAgICAgICAgZGF0YSBoYXNoIHRvIHBhc3MgYWxvbmcgd2l0aCB0aGUgZXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufHVuZGVmaW5lZH1cbiAqICAgICAgICAgUmV0dXJucyB0aGUgb3Bwb3NpdGUgb2YgYGRlZmF1bHRQcmV2ZW50ZWRgIGlmIGRlZmF1bHQgd2FzXG4gKiAgICAgICAgIHByZXZlbnRlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGB1bmRlZmluZWRgXG4gKi9cblxuZnVuY3Rpb24gdHJpZ2dlcihlbGVtLCBldmVudCwgaGFzaCkge1xuICAvLyBGZXRjaGVzIGVsZW1lbnQgZGF0YSBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCAoZm9yIGJ1YmJsaW5nKS5cbiAgLy8gRG9uJ3Qgd2FudCB0byBhZGQgYSBkYXRhIG9iamVjdCB0byBjYWNoZSBmb3IgZXZlcnkgcGFyZW50LFxuICAvLyBzbyBjaGVja2luZyBoYXNFbERhdGEgZmlyc3QuXG4gIHZhciBlbGVtRGF0YSA9IERvbURhdGEuaGFzKGVsZW0pID8gRG9tRGF0YS5nZXQoZWxlbSkgOiB7fTtcbiAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSB8fCBlbGVtLm93bmVyRG9jdW1lbnQ7IC8vIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50LFxuICAvLyBoYW5kbGVyO1xuICAvLyBJZiBhbiBldmVudCBuYW1lIHdhcyBwYXNzZWQgYXMgYSBzdHJpbmcsIGNyZWF0ZXMgYW4gZXZlbnQgb3V0IG9mIGl0XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBldmVudCA9IHtcbiAgICAgIHR5cGU6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiBlbGVtXG4gICAgfTtcbiAgfSBlbHNlIGlmICghZXZlbnQudGFyZ2V0KSB7XG4gICAgZXZlbnQudGFyZ2V0ID0gZWxlbTtcbiAgfSAvLyBOb3JtYWxpemVzIHRoZSBldmVudCBwcm9wZXJ0aWVzLlxuXG5cbiAgZXZlbnQgPSBmaXhFdmVudChldmVudCk7IC8vIElmIHRoZSBwYXNzZWQgZWxlbWVudCBoYXMgYSBkaXNwYXRjaGVyLCBleGVjdXRlcyB0aGUgZXN0YWJsaXNoZWQgaGFuZGxlcnMuXG5cbiAgaWYgKGVsZW1EYXRhLmRpc3BhdGNoZXIpIHtcbiAgICBlbGVtRGF0YS5kaXNwYXRjaGVyLmNhbGwoZWxlbSwgZXZlbnQsIGhhc2gpO1xuICB9IC8vIFVubGVzcyBleHBsaWNpdGx5IHN0b3BwZWQgb3IgdGhlIGV2ZW50IGRvZXMgbm90IGJ1YmJsZSAoZS5nLiBtZWRpYSBldmVudHMpXG4gIC8vIHJlY3Vyc2l2ZWx5IGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gYnViYmxlIHRoZSBldmVudCB1cCB0aGUgRE9NLlxuXG5cbiAgaWYgKHBhcmVudCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBldmVudC5idWJibGVzID09PSB0cnVlKSB7XG4gICAgdHJpZ2dlci5jYWxsKG51bGwsIHBhcmVudCwgZXZlbnQsIGhhc2gpOyAvLyBJZiBhdCB0aGUgdG9wIG9mIHRoZSBET00sIHRyaWdnZXJzIHRoZSBkZWZhdWx0IGFjdGlvbiB1bmxlc3MgZGlzYWJsZWQuXG4gIH0gZWxzZSBpZiAoIXBhcmVudCAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0W2V2ZW50LnR5cGVdKSB7XG4gICAgaWYgKCFEb21EYXRhLmhhcyhldmVudC50YXJnZXQpKSB7XG4gICAgICBEb21EYXRhLnNldChldmVudC50YXJnZXQsIHt9KTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0RGF0YSA9IERvbURhdGEuZ2V0KGV2ZW50LnRhcmdldCk7IC8vIENoZWNrcyBpZiB0aGUgdGFyZ2V0IGhhcyBhIGRlZmF1bHQgYWN0aW9uIGZvciB0aGlzIGV2ZW50LlxuXG4gICAgaWYgKGV2ZW50LnRhcmdldFtldmVudC50eXBlXSkge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZXMgZXZlbnQgZGlzcGF0Y2hpbmcgb24gdGhlIHRhcmdldCBhcyB3ZSBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgdGhlIGhhbmRsZXIuXG4gICAgICB0YXJnZXREYXRhLmRpc2FibGVkID0gdHJ1ZTsgLy8gRXhlY3V0ZXMgdGhlIGRlZmF1bHQgYWN0aW9uLlxuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50LnRhcmdldFtldmVudC50eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBldmVudC50YXJnZXRbZXZlbnQudHlwZV0oKTtcbiAgICAgIH0gLy8gUmUtZW5hYmxlcyBldmVudCBkaXNwYXRjaGluZy5cblxuXG4gICAgICB0YXJnZXREYXRhLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICB9IC8vIEluZm9ybSB0aGUgdHJpZ2dlcmVyIGlmIHRoZSBkZWZhdWx0IHdhcyBwcmV2ZW50ZWQgYnkgcmV0dXJuaW5nIGZhbHNlXG5cblxuICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG59XG4vKipcbiAqIFRyaWdnZXIgYSBsaXN0ZW5lciBvbmx5IG9uY2UgZm9yIGFuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW1cbiAqICAgICAgICBFbGVtZW50IG9yIG9iamVjdCB0byBiaW5kIHRvLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSB0eXBlXG4gKiAgICAgICAgTmFtZS90eXBlIG9mIGV2ZW50XG4gKlxuICogQHBhcmFtIHtFdmVudH5FdmVudExpc3RlbmVyfSBmblxuICogICAgICAgIEV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gb25lKGVsZW0sIHR5cGUsIGZuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgcmV0dXJuIF9oYW5kbGVNdWx0aXBsZUV2ZW50cyhvbmUsIGVsZW0sIHR5cGUsIGZuKTtcbiAgfVxuXG4gIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYygpIHtcbiAgICBvZmYoZWxlbSwgdHlwZSwgZnVuYyk7XG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTsgLy8gY29weSB0aGUgZ3VpZCB0byB0aGUgbmV3IGZ1bmN0aW9uIHNvIGl0IGNhbiByZW1vdmVkIHVzaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbidzIElEXG5cblxuICBmdW5jLmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBuZXdHVUlEKCk7XG4gIG9uKGVsZW0sIHR5cGUsIGZ1bmMpO1xufVxuLyoqXG4gKiBUcmlnZ2VyIGEgbGlzdGVuZXIgb25seSBvbmNlIGFuZCB0aGVuIHR1cm4gaWYgb2ZmIGZvciBhbGxcbiAqIGNvbmZpZ3VyZWQgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbVxuICogICAgICAgIEVsZW1lbnQgb3Igb2JqZWN0IHRvIGJpbmQgdG8uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHR5cGVcbiAqICAgICAgICBOYW1lL3R5cGUgb2YgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fkV2ZW50TGlzdGVuZXJ9IGZuXG4gKiAgICAgICAgRXZlbnQgbGlzdGVuZXIgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBhbnkoZWxlbSwgdHlwZSwgZm4pIHtcbiAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKCkge1xuICAgIG9mZihlbGVtLCB0eXBlLCBmdW5jKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9OyAvLyBjb3B5IHRoZSBndWlkIHRvIHRoZSBuZXcgZnVuY3Rpb24gc28gaXQgY2FuIHJlbW92ZWQgdXNpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uJ3MgSURcblxuXG4gIGZ1bmMuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IG5ld0dVSUQoKTsgLy8gbXVsdGlwbGUgb25zLCBidXQgb25lIG9mZiBmb3IgZXZlcnl0aGluZ1xuXG4gIG9uKGVsZW0sIHR5cGUsIGZ1bmMpO1xufVxuXG52YXIgRXZlbnRzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBmaXhFdmVudDogZml4RXZlbnQsXG4gIG9uOiBvbixcbiAgb2ZmOiBvZmYsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIG9uZTogb25lLFxuICBhbnk6IGFueVxufSk7XG5cbi8qKlxuICogQGZpbGUgZm4uanNcbiAqIEBtb2R1bGUgZm5cbiAqL1xudmFyIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMID0gMzA7XG4vKipcbiAqIEJpbmQgKGEuay5hIHByb3h5IG9yIGNvbnRleHQpLiBBIHNpbXBsZSBtZXRob2QgZm9yIGNoYW5naW5nIHRoZSBjb250ZXh0IG9mXG4gKiBhIGZ1bmN0aW9uLlxuICpcbiAqIEl0IGFsc28gc3RvcmVzIGEgdW5pcXVlIGlkIG9uIHRoZSBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgZnJvbVxuICogZXZlbnRzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICAgIHtNaXhlZH0gY29udGV4dFxuICogICAgICAgICAgIFRoZSBvYmplY3QgdG8gYmluZCBhcyBzY29wZS5cbiAqXG4gKiBAcGFyYW0gICAge0Z1bmN0aW9ufSBmblxuICogICAgICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBib3VuZCB0byBhIHNjb3BlLlxuICpcbiAqIEBwYXJhbSAgICB7bnVtYmVyfSBbdWlkXVxuICogICAgICAgICAgIEFuIG9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIHNldFxuICpcbiAqIEByZXR1cm4gICB7RnVuY3Rpb259XG4gKiAgICAgICAgICAgVGhlIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgYm91bmQgaW50byB0aGUgY29udGV4dCBnaXZlblxuICovXG5cbnZhciBiaW5kID0gZnVuY3Rpb24gYmluZChjb250ZXh0LCBmbiwgdWlkKSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaGFzIGEgdW5pcXVlIElEXG4gIGlmICghZm4uZ3VpZCkge1xuICAgIGZuLmd1aWQgPSBuZXdHVUlEKCk7XG4gIH0gLy8gQ3JlYXRlIHRoZSBuZXcgZnVuY3Rpb24gdGhhdCBjaGFuZ2VzIHRoZSBjb250ZXh0XG5cblxuICB2YXIgYm91bmQgPSBmbi5iaW5kKGNvbnRleHQpOyAvLyBBbGxvdyBmb3IgdGhlIGFiaWxpdHkgdG8gaW5kaXZpZHVhbGl6ZSB0aGlzIGZ1bmN0aW9uXG4gIC8vIE5lZWRlZCBpbiB0aGUgY2FzZSB3aGVyZSBtdWx0aXBsZSBvYmplY3RzIG1pZ2h0IHNoYXJlIHRoZSBzYW1lIHByb3RvdHlwZVxuICAvLyBJRiBib3RoIGl0ZW1zIGFkZCBhbiBldmVudCBsaXN0ZW5lciB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGVuIHlvdSB0cnkgdG8gcmVtb3ZlIGp1c3Qgb25lXG4gIC8vIGl0IHdpbGwgcmVtb3ZlIGJvdGggYmVjYXVzZSB0aGV5IGJvdGggaGF2ZSB0aGUgc2FtZSBndWlkLlxuICAvLyB3aGVuIHVzaW5nIHRoaXMsIHlvdSBuZWVkIHRvIHVzZSB0aGUgYmluZCBtZXRob2Qgd2hlbiB5b3UgcmVtb3ZlIHRoZSBsaXN0ZW5lciBhcyB3ZWxsLlxuICAvLyBjdXJyZW50bHkgdXNlZCBpbiB0ZXh0IHRyYWNrc1xuXG4gIGJvdW5kLmd1aWQgPSB1aWQgPyB1aWQgKyAnXycgKyBmbi5ndWlkIDogZm4uZ3VpZDtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbi8qKlxuICogV3JhcHMgdGhlIGdpdmVuIGZ1bmN0aW9uLCBgZm5gLCB3aXRoIGEgbmV3IGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmbmBcbiAqIGF0IG1vc3Qgb25jZSBwZXIgZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAgICB7RnVuY3Rpb259IGZuXG4gKiAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGJlIHRocm90dGxlZC5cbiAqXG4gKiBAcGFyYW0gICAge251bWJlcn0gICB3YWl0XG4gKiAgICAgICAgICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYnkgd2hpY2ggdG8gdGhyb3R0bGUuXG4gKlxuICogQHJldHVybiAgIHtGdW5jdGlvbn1cbiAqL1xuXG52YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiB0aHJvdHRsZShmbiwgd2FpdCkge1xuICB2YXIgbGFzdCA9IHdpbmRvdyQxLnBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIHZhciB0aHJvdHRsZWQgPSBmdW5jdGlvbiB0aHJvdHRsZWQoKSB7XG4gICAgdmFyIG5vdyA9IHdpbmRvdyQxLnBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgaWYgKG5vdyAtIGxhc3QgPj0gd2FpdCkge1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgbGFzdCA9IG5vdztcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gKiBpbnZva2VkLlxuICpcbiAqIEluc3BpcmVkIGJ5IGxvZGFzaCBhbmQgdW5kZXJzY29yZSBpbXBsZW1lbnRhdGlvbnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gICAge0Z1bmN0aW9ufSBmdW5jXG4gKiAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIHdyYXAgd2l0aCBkZWJvdW5jZSBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0gICAge251bWJlcn0gd2FpdFxuICogICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgdGhlIGxhc3QgaW52b2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gICAge2Jvb2xlYW59IFtpbW1lZGlhdGVdXG4gKiAgICAgICAgICAgV2hldGhlciBvciBub3QgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSB1cG9uIGNyZWF0aW9uLlxuICpcbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBbY29udGV4dD13aW5kb3ddXG4gKiAgICAgICAgICAgVGhlIFwiY29udGV4dFwiIGluIHdoaWNoIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gc2hvdWxkIGRlYm91bmNlLiBGb3JcbiAqICAgICAgICAgICBleGFtcGxlLCBpZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB0aWVkIHRvIGEgVmlkZW8uanMgcGxheWVyLFxuICogICAgICAgICAgIHRoZSBwbGF5ZXIgY2FuIGJlIHBhc3NlZCBoZXJlLiBBbHRlcm5hdGl2ZWx5LCBkZWZhdWx0cyB0byB0aGVcbiAqICAgICAgICAgICBnbG9iYWwgYHdpbmRvd2Agb2JqZWN0LlxuICpcbiAqIEByZXR1cm4gICB7RnVuY3Rpb259XG4gKiAgICAgICAgICAgQSBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKi9cblxudmFyIGRlYm91bmNlID0gZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHtcbiAgICBjb250ZXh0ID0gd2luZG93JDE7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICB2YXIgY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGNvbnRleHQuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBudWxsO1xuICB9O1xuICAvKiBlc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXRoaXMgKi9cblxuXG4gIHZhciBkZWJvdW5jZWQgPSBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gICAgdmFyIF9sYXRlciA9IGZ1bmN0aW9uIGxhdGVyKCkge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBfbGF0ZXIgPSBudWxsO1xuXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXRpbWVvdXQgJiYgaW1tZWRpYXRlKSB7XG4gICAgICBmdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQoX2xhdGVyLCB3YWl0KTtcbiAgfTtcbiAgLyogZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXRoaXMgKi9cblxuXG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59O1xuXG4vKipcbiAqIEBmaWxlIHNyYy9qcy9ldmVudC10YXJnZXQuanNcbiAqL1xuLyoqXG4gKiBgRXZlbnRUYXJnZXRgIGlzIGEgY2xhc3MgdGhhdCBjYW4gaGF2ZSB0aGUgc2FtZSBBUEkgYXMgdGhlIERPTSBgRXZlbnRUYXJnZXRgLiBJdFxuICogYWRkcyBzaG9ydGhhbmQgZnVuY3Rpb25zIHRoYXQgd3JhcCBhcm91bmQgbGVuZ3RoeSBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICogdGhlIGBvbmAgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBgYWRkRXZlbnRMaXN0ZW5lcmAuXG4gKlxuICogQHNlZSBbRXZlbnRUYXJnZXQgU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUV2ZW50cy9ldmVudHMuaHRtbCNFdmVudHMtRXZlbnRUYXJnZXR9XG4gKiBAY2xhc3MgRXZlbnRUYXJnZXRcbiAqL1xuXG52YXIgRXZlbnRUYXJnZXQgPSBmdW5jdGlvbiBFdmVudFRhcmdldCgpIHt9O1xuLyoqXG4gKiBBIEN1c3RvbSBET00gZXZlbnQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gRXZlbnRUYXJnZXR+RXZlbnRcbiAqIEBzZWUgW1Byb3BlcnRpZXNde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudH1cbiAqL1xuXG4vKipcbiAqIEFsbCBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGZvbGxvdyB0aGUgZm9sbG93aW5nIGZvcm1hdC5cbiAqXG4gKiBAY2FsbGJhY2sgRXZlbnRUYXJnZXR+RXZlbnRMaXN0ZW5lclxuICogQHRoaXMge0V2ZW50VGFyZ2V0fVxuICpcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gKiAgICAgICAgdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2hhc2hdXG4gKiAgICAgICAgaGFzaCBvZiBkYXRhIHNlbnQgZHVyaW5nIHRoZSBldmVudFxuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZXZlbnQgbmFtZXMgYXMga2V5cyBhbmQgYm9vbGVhbnMgYXMgdmFsdWVzLlxuICpcbiAqID4gTk9URTogSWYgYW4gZXZlbnQgbmFtZSBpcyBzZXQgdG8gYSB0cnVlIHZhbHVlIGhlcmUge0BsaW5rIEV2ZW50VGFyZ2V0I3RyaWdnZXJ9XG4gKiAgICAgICAgIHdpbGwgaGF2ZSBleHRyYSBmdW5jdGlvbmFsaXR5LiBTZWUgdGhhdCBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkgRXZlbnRUYXJnZXQucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfID0ge307XG4vKipcbiAqIEFkZHMgYW4gYGV2ZW50IGxpc3RlbmVyYCB0byBhbiBpbnN0YW5jZSBvZiBhbiBgRXZlbnRUYXJnZXRgLiBBbiBgZXZlbnQgbGlzdGVuZXJgIGlzIGFcbiAqIGZ1bmN0aW9uIHRoYXQgd2lsbCBnZXQgY2FsbGVkIHdoZW4gYW4gZXZlbnQgd2l0aCBhIGNlcnRhaW4gbmFtZSBnZXRzIHRyaWdnZXJlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gdHlwZVxuICogICAgICAgIEFuIGV2ZW50IG5hbWUgb3IgYW4gYXJyYXkgb2YgZXZlbnQgbmFtZXMuXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudExpc3RlbmVyfSBmblxuICogICAgICAgIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYEV2ZW50VGFyZ2V0YHNcbiAqL1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgLy8gUmVtb3ZlIHRoZSBhZGRFdmVudExpc3RlbmVyIGFsaWFzIGJlZm9yZSBjYWxsaW5nIEV2ZW50cy5vblxuICAvLyBzbyB3ZSBkb24ndCBnZXQgaW50byBhbiBpbmZpbml0ZSB0eXBlIGxvb3BcbiAgdmFyIGFlbCA9IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcjtcblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICBvbih0aGlzLCB0eXBlLCBmbik7XG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciA9IGFlbDtcbn07XG4vKipcbiAqIEFuIGFsaWFzIG9mIHtAbGluayBFdmVudFRhcmdldCNvbn0uIEFsbG93cyBgRXZlbnRUYXJnZXRgIHRvIG1pbWljXG4gKiB0aGUgc3RhbmRhcmQgRE9NIEFQSS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzZWUge0BsaW5rIEV2ZW50VGFyZ2V0I29ufVxuICovXG5cblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFdmVudFRhcmdldC5wcm90b3R5cGUub247XG4vKipcbiAqIFJlbW92ZXMgYW4gYGV2ZW50IGxpc3RlbmVyYCBmb3IgYSBzcGVjaWZpYyBldmVudCBmcm9tIGFuIGluc3RhbmNlIG9mIGBFdmVudFRhcmdldGAuXG4gKiBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgdGhlIGBldmVudCBsaXN0ZW5lcmAgd2lsbCBubyBsb25nZXIgZ2V0IGNhbGxlZCB3aGVuIHRoZVxuICogbmFtZWQgZXZlbnQgaGFwcGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gdHlwZVxuICogICAgICAgIEFuIGV2ZW50IG5hbWUgb3IgYW4gYXJyYXkgb2YgZXZlbnQgbmFtZXMuXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudExpc3RlbmVyfSBmblxuICogICAgICAgIFRoZSBmdW5jdGlvbiB0byByZW1vdmUuXG4gKi9cblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICBvZmYodGhpcywgdHlwZSwgZm4pO1xufTtcbi8qKlxuICogQW4gYWxpYXMgb2Yge0BsaW5rIEV2ZW50VGFyZ2V0I29mZn0uIEFsbG93cyBgRXZlbnRUYXJnZXRgIHRvIG1pbWljXG4gKiB0aGUgc3RhbmRhcmQgRE9NIEFQSS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzZWUge0BsaW5rIEV2ZW50VGFyZ2V0I29mZn1cbiAqL1xuXG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLm9mZjtcbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBhbiBgZXZlbnQgbGlzdGVuZXJgIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgb25seSBvbmNlLiBBZnRlciB0aGVcbiAqIGZpcnN0IHRyaWdnZXIgaXQgd2lsbCBnZXQgcmVtb3ZlZC4gVGhpcyBpcyBsaWtlIGFkZGluZyBhbiBgZXZlbnQgbGlzdGVuZXJgXG4gKiB3aXRoIHtAbGluayBFdmVudFRhcmdldCNvbn0gdGhhdCBjYWxscyB7QGxpbmsgRXZlbnRUYXJnZXQjb2ZmfSBvbiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHR5cGVcbiAqICAgICAgICBBbiBldmVudCBuYW1lIG9yIGFuIGFycmF5IG9mIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnRMaXN0ZW5lcn0gZm5cbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggZXZlbnQgbmFtZS5cbiAqL1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUub25lID0gZnVuY3Rpb24gKHR5cGUsIGZuKSB7XG4gIC8vIFJlbW92ZSB0aGUgYWRkRXZlbnRMaXN0ZW5lciBhbGlhc2luZyBFdmVudHMub25cbiAgLy8gc28gd2UgZG9uJ3QgZ2V0IGludG8gYW4gaW5maW5pdGUgdHlwZSBsb29wXG4gIHZhciBhZWwgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXI7XG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKCkge307XG5cbiAgb25lKHRoaXMsIHR5cGUsIGZuKTtcbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyID0gYWVsO1xufTtcblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICAvLyBSZW1vdmUgdGhlIGFkZEV2ZW50TGlzdGVuZXIgYWxpYXNpbmcgRXZlbnRzLm9uXG4gIC8vIHNvIHdlIGRvbid0IGdldCBpbnRvIGFuIGluZmluaXRlIHR5cGUgbG9vcFxuICB2YXIgYWVsID0gdGhpcy5hZGRFdmVudExpc3RlbmVyO1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGFueSh0aGlzLCB0eXBlLCBmbik7XG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciA9IGFlbDtcbn07XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGFuIGV2ZW50IHRvIGhhcHBlbi4gVGhpcyB3aWxsIHRoZW4gY2F1c2UgYW55IGBldmVudCBsaXN0ZW5lcnNgXG4gKiB0aGF0IGFyZSB3YWl0aW5nIGZvciB0aGF0IGV2ZW50LCB0byBnZXQgY2FsbGVkLiBJZiB0aGVyZSBhcmUgbm8gYGV2ZW50IGxpc3RlbmVyc2BcbiAqIGZvciBhbiBldmVudCB0aGVuIG5vdGhpbmcgd2lsbCBoYXBwZW4uXG4gKlxuICogSWYgdGhlIG5hbWUgb2YgdGhlIGBFdmVudGAgdGhhdCBpcyBiZWluZyB0cmlnZ2VyZWQgaXMgaW4gYEV2ZW50VGFyZ2V0LmFsbG93ZWRFdmVudHNfYC5cbiAqIFRyaWdnZXIgd2lsbCBhbHNvIGNhbGwgdGhlIGBvbmAgKyBgdXBwZXJjYXNlRXZlbnROYW1lYCBmdW5jdGlvbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogJ2NsaWNrJyBpcyBpbiBgRXZlbnRUYXJnZXQuYWxsb3dlZEV2ZW50c19gLCBzbywgdHJpZ2dlciB3aWxsIGF0dGVtcHQgdG8gY2FsbFxuICogYG9uQ2xpY2tgIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xFdmVudFRhcmdldH5FdmVudHxPYmplY3R9IGV2ZW50XG4gKiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50LCBhbiBgRXZlbnRgLCBvciBhbiBvYmplY3Qgd2l0aCBhIGtleSBvZiB0eXBlIHNldCB0b1xuICogICAgICAgIGFuIGV2ZW50IG5hbWUuXG4gKi9cblxuXG5FdmVudFRhcmdldC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQ7IC8vIGRlcHJlY2F0aW9uXG4gIC8vIEluIGEgZnV0dXJlIHZlcnNpb24gd2Ugc2hvdWxkIGRlZmF1bHQgdGFyZ2V0IHRvIGB0aGlzYFxuICAvLyBzaW1pbGFyIHRvIGhvdyB3ZSBkZWZhdWx0IHRoZSB0YXJnZXQgdG8gYGVsZW1gIGluXG4gIC8vIGBFdmVudHMudHJpZ2dlcmAuIFJpZ2h0IG5vdyB0aGUgZGVmYXVsdCBgdGFyZ2V0YCB3aWxsIGJlXG4gIC8vIGBkb2N1bWVudGAgZHVlIHRvIHRoZSBgRXZlbnQuZml4RXZlbnRgIGNhbGwuXG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBldmVudCA9IHtcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9O1xuICB9XG5cbiAgZXZlbnQgPSBmaXhFdmVudChldmVudCk7XG5cbiAgaWYgKHRoaXMuYWxsb3dlZEV2ZW50c19bdHlwZV0gJiYgdGhpc1snb24nICsgdHlwZV0pIHtcbiAgICB0aGlzWydvbicgKyB0eXBlXShldmVudCk7XG4gIH1cblxuICB0cmlnZ2VyKHRoaXMsIGV2ZW50KTtcbn07XG4vKipcbiAqIEFuIGFsaWFzIG9mIHtAbGluayBFdmVudFRhcmdldCN0cmlnZ2VyfS4gQWxsb3dzIGBFdmVudFRhcmdldGAgdG8gbWltaWNcbiAqIHRoZSBzdGFuZGFyZCBET00gQVBJLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHNlZSB7QGxpbmsgRXZlbnRUYXJnZXQjdHJpZ2dlcn1cbiAqL1xuXG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLnRyaWdnZXI7XG52YXIgRVZFTlRfTUFQO1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUucXVldWVUcmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgLy8gb25seSBzZXQgdXAgRVZFTlRfTUFQIGlmIGl0J2xsIGJlIHVzZWRcbiAgaWYgKCFFVkVOVF9NQVApIHtcbiAgICBFVkVOVF9NQVAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQ7XG4gIHZhciBtYXAgPSBFVkVOVF9NQVAuZ2V0KHRoaXMpO1xuXG4gIGlmICghbWFwKSB7XG4gICAgbWFwID0gbmV3IE1hcCgpO1xuICAgIEVWRU5UX01BUC5zZXQodGhpcywgbWFwKTtcbiAgfVxuXG4gIHZhciBvbGRUaW1lb3V0ID0gbWFwLmdldCh0eXBlKTtcbiAgbWFwW1wiZGVsZXRlXCJdKHR5cGUpO1xuICB3aW5kb3ckMS5jbGVhclRpbWVvdXQob2xkVGltZW91dCk7XG4gIHZhciB0aW1lb3V0ID0gd2luZG93JDEuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgLy8gaWYgd2UgY2xlYXJlZCBvdXQgYWxsIHRpbWVvdXRzIGZvciB0aGUgY3VycmVudCB0YXJnZXQsIGRlbGV0ZSBpdHMgbWFwXG4gICAgaWYgKG1hcC5zaXplID09PSAwKSB7XG4gICAgICBtYXAgPSBudWxsO1xuICAgICAgRVZFTlRfTUFQW1wiZGVsZXRlXCJdKF90aGlzKTtcbiAgICB9XG5cbiAgICBfdGhpcy50cmlnZ2VyKGV2ZW50KTtcbiAgfSwgMCk7XG4gIG1hcC5zZXQodHlwZSwgdGltZW91dCk7XG59O1xuXG4vKipcbiAqIEBmaWxlIG1peGlucy9ldmVudGVkLmpzXG4gKiBAbW9kdWxlIGV2ZW50ZWRcbiAqL1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBoYXMgaGFkIHRoZSBldmVudGVkIG1peGluIGFwcGxpZWQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvYmplY3RcbiAqICAgICAgICAgQW4gb2JqZWN0IHRvIHRlc3QuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBhcHBlYXJzIHRvIGJlIGV2ZW50ZWQuXG4gKi9cblxudmFyIGlzRXZlbnRlZCA9IGZ1bmN0aW9uIGlzRXZlbnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0IHx8ICEhb2JqZWN0LmV2ZW50QnVzRWxfICYmIFsnb24nLCAnb25lJywgJ29mZicsICd0cmlnZ2VyJ10uZXZlcnkoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdFtrXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfSk7XG59O1xuLyoqXG4gKiBBZGRzIGEgY2FsbGJhY2sgdG8gcnVuIGFmdGVyIHRoZSBldmVudGVkIG1peGluIGFwcGxpZWQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvYmplY3RcbiAqICAgICAgICAgQW4gb2JqZWN0IHRvIEFkZFxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiAgICAgICAgIFRoZSBjYWxsYmFjayB0byBydW4uXG4gKi9cblxuXG52YXIgYWRkRXZlbnRlZENhbGxiYWNrID0gZnVuY3Rpb24gYWRkRXZlbnRlZENhbGxiYWNrKHRhcmdldCwgY2FsbGJhY2spIHtcbiAgaWYgKGlzRXZlbnRlZCh0YXJnZXQpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRhcmdldC5ldmVudGVkQ2FsbGJhY2tzKSB7XG4gICAgICB0YXJnZXQuZXZlbnRlZENhbGxiYWNrcyA9IFtdO1xuICAgIH1cblxuICAgIHRhcmdldC5ldmVudGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9XG59O1xuLyoqXG4gKiBXaGV0aGVyIGEgdmFsdWUgaXMgYSB2YWxpZCBldmVudCB0eXBlIC0gbm9uLWVtcHR5IHN0cmluZyBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7c3RyaW5nfEFycmF5fSB0eXBlXG4gKiAgICAgICAgIFRoZSB0eXBlIHZhbHVlIHRvIHRlc3QuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2hldGhlciBvciBub3QgdGhlIHR5cGUgaXMgYSB2YWxpZCBldmVudCB0eXBlLlxuICovXG5cblxudmFyIGlzVmFsaWRFdmVudFR5cGUgPSBmdW5jdGlvbiBpc1ZhbGlkRXZlbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuICgvLyBUaGUgcmVnZXggaGVyZSB2ZXJpZmllcyB0aGF0IHRoZSBgdHlwZWAgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1cbiAgICAvLyB3aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgL1xcUy8udGVzdCh0eXBlKSB8fCBBcnJheS5pc0FycmF5KHR5cGUpICYmICEhdHlwZS5sZW5ndGhcbiAgKTtcbn07XG4vKipcbiAqIFZhbGlkYXRlcyBhIHZhbHVlIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHZhbGlkIGV2ZW50IHRhcmdldC4gVGhyb3dzIGlmIG5vdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9XG4gKiAgICAgICAgIElmIHRoZSB0YXJnZXQgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgZXZlbnQgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiAgICAgICAgIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuXG5cbnZhciB2YWxpZGF0ZVRhcmdldCA9IGZ1bmN0aW9uIHZhbGlkYXRlVGFyZ2V0KHRhcmdldCkge1xuICBpZiAoIXRhcmdldC5ub2RlTmFtZSAmJiAhaXNFdmVudGVkKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyZ2V0OyBtdXN0IGJlIGEgRE9NIG5vZGUgb3IgZXZlbnRlZCBvYmplY3QuJyk7XG4gIH1cbn07XG4vKipcbiAqIFZhbGlkYXRlcyBhIHZhbHVlIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHZhbGlkIGV2ZW50IHRhcmdldC4gVGhyb3dzIGlmIG5vdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9XG4gKiAgICAgICAgIElmIHRoZSB0eXBlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGV2ZW50IHR5cGUuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfEFycmF5fSB0eXBlXG4gKiAgICAgICAgIFRoZSB0eXBlIHRvIHRlc3QuXG4gKi9cblxuXG52YXIgdmFsaWRhdGVFdmVudFR5cGUgPSBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50VHlwZSh0eXBlKSB7XG4gIGlmICghaXNWYWxpZEV2ZW50VHlwZSh0eXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBldmVudCB0eXBlOyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBhcnJheS4nKTtcbiAgfVxufTtcbi8qKlxuICogVmFsaWRhdGVzIGEgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgdmFsaWQgbGlzdGVuZXIuIFRocm93cyBpZiBub3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfVxuICogICAgICAgICBJZiB0aGUgbGlzdGVuZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiAgICAgICAgIFRoZSBsaXN0ZW5lciB0byB0ZXN0LlxuICovXG5cblxudmFyIHZhbGlkYXRlTGlzdGVuZXIgPSBmdW5jdGlvbiB2YWxpZGF0ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbGlzdGVuZXI7IG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxufTtcbi8qKlxuICogVGFrZXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIGdpdmVuIHRvIGBvbigpYCBvciBgb25lKClgLCB2YWxpZGF0ZXMgdGhlbSwgYW5kXG4gKiBub3JtYWxpemVzIHRoZW0gaW50byBhbiBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gc2VsZlxuICogICAgICAgICBUaGUgZXZlbnRlZCBvYmplY3Qgb24gd2hpY2ggYG9uKClgIG9yIGBvbmUoKWAgd2FzIGNhbGxlZC4gVGhpc1xuICogICAgICAgICBvYmplY3Qgd2lsbCBiZSBib3VuZCBhcyB0aGUgYHRoaXNgIHZhbHVlIGZvciB0aGUgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFyZ3NcbiAqICAgICAgICAgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHBhc3NlZCB0byBgb24oKWAgb3IgYG9uZSgpYC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgICAgICAgIEFuIG9iamVjdCBjb250YWluaW5nIHVzZWZ1bCB2YWx1ZXMgZm9yIGBvbigpYCBvciBgb25lKClgIGNhbGxzLlxuICovXG5cblxudmFyIG5vcm1hbGl6ZUxpc3RlbkFyZ3MgPSBmdW5jdGlvbiBub3JtYWxpemVMaXN0ZW5BcmdzKHNlbGYsIGFyZ3MpIHtcbiAgLy8gSWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgbGVzcyB0aGFuIDMsIHRoZSB0YXJnZXQgaXMgYWx3YXlzIHRoZVxuICAvLyBldmVudGVkIG9iamVjdCBpdHNlbGYuXG4gIHZhciBpc1RhcmdldGluZ1NlbGYgPSBhcmdzLmxlbmd0aCA8IDMgfHwgYXJnc1swXSA9PT0gc2VsZiB8fCBhcmdzWzBdID09PSBzZWxmLmV2ZW50QnVzRWxfO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgdHlwZTtcbiAgdmFyIGxpc3RlbmVyO1xuXG4gIGlmIChpc1RhcmdldGluZ1NlbGYpIHtcbiAgICB0YXJnZXQgPSBzZWxmLmV2ZW50QnVzRWxfOyAvLyBEZWFsIHdpdGggY2FzZXMgd2hlcmUgd2UgZ290IDMgYXJndW1lbnRzLCBidXQgd2UgYXJlIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHRoZSBldmVudGVkIG9iamVjdCBpdHNlbGYuXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPj0gMykge1xuICAgICAgYXJncy5zaGlmdCgpO1xuICAgIH1cblxuICAgIHR5cGUgPSBhcmdzWzBdO1xuICAgIGxpc3RlbmVyID0gYXJnc1sxXTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBhcmdzWzBdO1xuICAgIHR5cGUgPSBhcmdzWzFdO1xuICAgIGxpc3RlbmVyID0gYXJnc1syXTtcbiAgfVxuXG4gIHZhbGlkYXRlVGFyZ2V0KHRhcmdldCk7XG4gIHZhbGlkYXRlRXZlbnRUeXBlKHR5cGUpO1xuICB2YWxpZGF0ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgbGlzdGVuZXIgPSBiaW5kKHNlbGYsIGxpc3RlbmVyKTtcbiAgcmV0dXJuIHtcbiAgICBpc1RhcmdldGluZ1NlbGY6IGlzVGFyZ2V0aW5nU2VsZixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lclxuICB9O1xufTtcbi8qKlxuICogQWRkcyB0aGUgbGlzdGVuZXIgdG8gdGhlIGV2ZW50IHR5cGUocykgb24gdGhlIHRhcmdldCwgbm9ybWFsaXppbmcgZm9yXG4gKiB0aGUgdHlwZSBvZiB0YXJnZXQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0VsZW1lbnR8T2JqZWN0fSB0YXJnZXRcbiAqICAgICAgICAgQSBET00gbm9kZSBvciBldmVudGVkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1ldGhvZFxuICogICAgICAgICBUaGUgZXZlbnQgYmluZGluZyBtZXRob2QgdG8gdXNlIChcIm9uXCIgb3IgXCJvbmVcIikuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfEFycmF5fSB0eXBlXG4gKiAgICAgICAgIE9uZSBvciBtb3JlIGV2ZW50IHR5cGUocykuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiAgICAgICAgIEEgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKi9cblxuXG52YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKHRhcmdldCwgbWV0aG9kLCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YWxpZGF0ZVRhcmdldCh0YXJnZXQpO1xuXG4gIGlmICh0YXJnZXQubm9kZU5hbWUpIHtcbiAgICBFdmVudHNbbWV0aG9kXSh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRbbWV0aG9kXSh0eXBlLCBsaXN0ZW5lcik7XG4gIH1cbn07XG4vKipcbiAqIENvbnRhaW5zIG1ldGhvZHMgdGhhdCBwcm92aWRlIGV2ZW50IGNhcGFiaWxpdGllcyB0byBhbiBvYmplY3Qgd2hpY2ggaXMgcGFzc2VkXG4gKiB0byB7QGxpbmsgbW9kdWxlOmV2ZW50ZWR8ZXZlbnRlZH0uXG4gKlxuICogQG1peGluIEV2ZW50ZWRNaXhpblxuICovXG5cblxudmFyIEV2ZW50ZWRNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIHRvIGFuIGV2ZW50IChvciBldmVudHMpIG9uIHRoaXMgb2JqZWN0IG9yIGFub3RoZXIgZXZlbnRlZFxuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xBcnJheXxFbGVtZW50fE9iamVjdH0gdGFyZ2V0T3JUeXBlXG4gICAqICAgICAgICAgSWYgdGhpcyBpcyBhIHN0cmluZyBvciBhcnJheSwgaXQgcmVwcmVzZW50cyB0aGUgZXZlbnQgdHlwZShzKVxuICAgKiAgICAgICAgIHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBsaXN0ZW5lci5cbiAgICpcbiAgICogICAgICAgICBBbm90aGVyIGV2ZW50ZWQgb2JqZWN0IGNhbiBiZSBwYXNzZWQgaGVyZSBpbnN0ZWFkLCB3aGljaCB3aWxsXG4gICAqICAgICAgICAgY2F1c2UgdGhlIGxpc3RlbmVyIHRvIGxpc3RlbiBmb3IgZXZlbnRzIG9uIF90aGF0XyBvYmplY3QuXG4gICAqXG4gICAqICAgICAgICAgSW4gZWl0aGVyIGNhc2UsIHRoZSBsaXN0ZW5lcidzIGB0aGlzYCB2YWx1ZSB3aWxsIGJlIGJvdW5kIHRvXG4gICAqICAgICAgICAgdGhpcyBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xBcnJheXxGdW5jdGlvbn0gdHlwZU9yTGlzdGVuZXJcbiAgICogICAgICAgICBJZiB0aGUgZmlyc3QgYXJndW1lbnQgd2FzIGEgc3RyaW5nIG9yIGFycmF5LCB0aGlzIHNob3VsZCBiZSB0aGVcbiAgICogICAgICAgICBsaXN0ZW5lciBmdW5jdGlvbi4gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgc3RyaW5nIG9yIGFycmF5IG9mIGV2ZW50XG4gICAqICAgICAgICAgdHlwZShzKS5cbiAgICpcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IFtsaXN0ZW5lcl1cbiAgICogICAgICAgICBJZiB0aGUgZmlyc3QgYXJndW1lbnQgd2FzIGFub3RoZXIgZXZlbnRlZCBvYmplY3QsIHRoaXMgd2lsbCBiZVxuICAgKiAgICAgICAgIHRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAgICovXG4gIG9uOiBmdW5jdGlvbiBvbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBfbm9ybWFsaXplTGlzdGVuQXJncyA9IG5vcm1hbGl6ZUxpc3RlbkFyZ3ModGhpcywgYXJncyksXG4gICAgICAgIGlzVGFyZ2V0aW5nU2VsZiA9IF9ub3JtYWxpemVMaXN0ZW5BcmdzLmlzVGFyZ2V0aW5nU2VsZixcbiAgICAgICAgdGFyZ2V0ID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MudGFyZ2V0LFxuICAgICAgICB0eXBlID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MudHlwZSxcbiAgICAgICAgbGlzdGVuZXIgPSBfbm9ybWFsaXplTGlzdGVuQXJncy5saXN0ZW5lcjtcblxuICAgIGxpc3Rlbih0YXJnZXQsICdvbicsIHR5cGUsIGxpc3RlbmVyKTsgLy8gSWYgdGhpcyBvYmplY3QgaXMgbGlzdGVuaW5nIHRvIGFub3RoZXIgZXZlbnRlZCBvYmplY3QuXG5cbiAgICBpZiAoIWlzVGFyZ2V0aW5nU2VsZikge1xuICAgICAgLy8gSWYgdGhpcyBvYmplY3QgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAgICB2YXIgcmVtb3ZlTGlzdGVuZXJPbkRpc3Bvc2UgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lck9uRGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9mZih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgIH07IC8vIFVzZSB0aGUgc2FtZSBmdW5jdGlvbiBJRCBhcyB0aGUgbGlzdGVuZXIgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlciBpdFxuICAgICAgLy8gdXNpbmcgdGhlIElEIG9mIHRoZSBvcmlnaW5hbCBsaXN0ZW5lci5cblxuXG4gICAgICByZW1vdmVMaXN0ZW5lck9uRGlzcG9zZS5ndWlkID0gbGlzdGVuZXIuZ3VpZDsgLy8gQWRkIGEgbGlzdGVuZXIgdG8gdGhlIHRhcmdldCdzIGRpc3Bvc2UgZXZlbnQgYXMgd2VsbC4gVGhpcyBlbnN1cmVzXG4gICAgICAvLyB0aGF0IGlmIHRoZSB0YXJnZXQgaXMgZGlzcG9zZWQgQkVGT1JFIHRoaXMgb2JqZWN0LCB3ZSByZW1vdmUgdGhlXG4gICAgICAvLyByZW1vdmFsIGxpc3RlbmVyIHRoYXQgd2FzIGp1c3QgYWRkZWQuIE90aGVyd2lzZSwgd2UgY3JlYXRlIGEgbWVtb3J5IGxlYWsuXG5cbiAgICAgIHZhciByZW1vdmVSZW1vdmVyT25UYXJnZXREaXNwb3NlID0gZnVuY3Rpb24gcmVtb3ZlUmVtb3Zlck9uVGFyZ2V0RGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9mZignZGlzcG9zZScsIHJlbW92ZUxpc3RlbmVyT25EaXNwb3NlKTtcbiAgICAgIH07IC8vIFVzZSB0aGUgc2FtZSBmdW5jdGlvbiBJRCBhcyB0aGUgbGlzdGVuZXIgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlclxuICAgICAgLy8gaXQgdXNpbmcgdGhlIElEIG9mIHRoZSBvcmlnaW5hbCBsaXN0ZW5lci5cblxuXG4gICAgICByZW1vdmVSZW1vdmVyT25UYXJnZXREaXNwb3NlLmd1aWQgPSBsaXN0ZW5lci5ndWlkO1xuICAgICAgbGlzdGVuKHRoaXMsICdvbicsICdkaXNwb3NlJywgcmVtb3ZlTGlzdGVuZXJPbkRpc3Bvc2UpO1xuICAgICAgbGlzdGVuKHRhcmdldCwgJ29uJywgJ2Rpc3Bvc2UnLCByZW1vdmVSZW1vdmVyT25UYXJnZXREaXNwb3NlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIHRvIGFuIGV2ZW50IChvciBldmVudHMpIG9uIHRoaXMgb2JqZWN0IG9yIGFub3RoZXIgZXZlbnRlZFxuICAgKiBvYmplY3QuIFRoZSBsaXN0ZW5lciB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBldmVudCBhbmQgdGhlbiByZW1vdmVkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8QXJyYXl8RWxlbWVudHxPYmplY3R9IHRhcmdldE9yVHlwZVxuICAgKiAgICAgICAgIElmIHRoaXMgaXMgYSBzdHJpbmcgb3IgYXJyYXksIGl0IHJlcHJlc2VudHMgdGhlIGV2ZW50IHR5cGUocylcbiAgICogICAgICAgICB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgbGlzdGVuZXIuXG4gICAqXG4gICAqICAgICAgICAgQW5vdGhlciBldmVudGVkIG9iamVjdCBjYW4gYmUgcGFzc2VkIGhlcmUgaW5zdGVhZCwgd2hpY2ggd2lsbFxuICAgKiAgICAgICAgIGNhdXNlIHRoZSBsaXN0ZW5lciB0byBsaXN0ZW4gZm9yIGV2ZW50cyBvbiBfdGhhdF8gb2JqZWN0LlxuICAgKlxuICAgKiAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGUgbGlzdGVuZXIncyBgdGhpc2AgdmFsdWUgd2lsbCBiZSBib3VuZCB0b1xuICAgKiAgICAgICAgIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8QXJyYXl8RnVuY3Rpb259IHR5cGVPckxpc3RlbmVyXG4gICAqICAgICAgICAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHdhcyBhIHN0cmluZyBvciBhcnJheSwgdGhpcyBzaG91bGQgYmUgdGhlXG4gICAqICAgICAgICAgbGlzdGVuZXIgZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhpcyBpcyBhIHN0cmluZyBvciBhcnJheSBvZiBldmVudFxuICAgKiAgICAgICAgIHR5cGUocykuXG4gICAqXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbbGlzdGVuZXJdXG4gICAqICAgICAgICAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHdhcyBhbm90aGVyIGV2ZW50ZWQgb2JqZWN0LCB0aGlzIHdpbGwgYmVcbiAgICogICAgICAgICB0aGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gICAqL1xuICBvbmU6IGZ1bmN0aW9uIG9uZSgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBfbm9ybWFsaXplTGlzdGVuQXJnczIgPSBub3JtYWxpemVMaXN0ZW5BcmdzKHRoaXMsIGFyZ3MpLFxuICAgICAgICBpc1RhcmdldGluZ1NlbGYgPSBfbm9ybWFsaXplTGlzdGVuQXJnczIuaXNUYXJnZXRpbmdTZWxmLFxuICAgICAgICB0YXJnZXQgPSBfbm9ybWFsaXplTGlzdGVuQXJnczIudGFyZ2V0LFxuICAgICAgICB0eXBlID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MyLnR5cGUsXG4gICAgICAgIGxpc3RlbmVyID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MyLmxpc3RlbmVyOyAvLyBUYXJnZXRpbmcgdGhpcyBldmVudGVkIG9iamVjdC5cblxuXG4gICAgaWYgKGlzVGFyZ2V0aW5nU2VsZikge1xuICAgICAgbGlzdGVuKHRhcmdldCwgJ29uZScsIHR5cGUsIGxpc3RlbmVyKTsgLy8gVGFyZ2V0aW5nIGFub3RoZXIgZXZlbnRlZCBvYmplY3QuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgd3JhcHBlciBpcyBpbmNvcnJlY3QhIEl0IHNob3VsZCBvbmx5XG4gICAgICAvLyAgICAgICByZW1vdmUgdGhlIHdyYXBwZXIgZm9yIHRoZSBldmVudCB0eXBlIHRoYXQgY2FsbGVkIGl0LlxuICAgICAgLy8gICAgICAgSW5zdGVhZCBhbGwgbGlzdG5lcnMgYXJlIHJlbW92ZWQgb24gdGhlIGZpcnN0IHRyaWdnZXIhXG4gICAgICAvLyAgICAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvdmlkZW8uanMvaXNzdWVzLzU5NjJcbiAgICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgX3RoaXMyLm9mZih0YXJnZXQsIHR5cGUsIHdyYXBwZXIpO1xuXG4gICAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgbGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgICBsYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdGVuZXIuYXBwbHkobnVsbCwgbGFyZ3MpO1xuICAgICAgfTsgLy8gVXNlIHRoZSBzYW1lIGZ1bmN0aW9uIElEIGFzIHRoZSBsaXN0ZW5lciBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyXG4gICAgICAvLyBpdCB1c2luZyB0aGUgSUQgb2YgdGhlIG9yaWdpbmFsIGxpc3RlbmVyLlxuXG5cbiAgICAgIHdyYXBwZXIuZ3VpZCA9IGxpc3RlbmVyLmd1aWQ7XG4gICAgICBsaXN0ZW4odGFyZ2V0LCAnb25lJywgdHlwZSwgd3JhcHBlcik7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBsaXN0ZW5lciB0byBhbiBldmVudCAob3IgZXZlbnRzKSBvbiB0aGlzIG9iamVjdCBvciBhbm90aGVyIGV2ZW50ZWRcbiAgICogb2JqZWN0LiBUaGUgbGlzdGVuZXIgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlIGZvciB0aGUgZmlyc3QgZXZlbnQgdGhhdCBpcyB0cmlnZ2VyZWRcbiAgICogdGhlbiByZW1vdmVkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8QXJyYXl8RWxlbWVudHxPYmplY3R9IHRhcmdldE9yVHlwZVxuICAgKiAgICAgICAgIElmIHRoaXMgaXMgYSBzdHJpbmcgb3IgYXJyYXksIGl0IHJlcHJlc2VudHMgdGhlIGV2ZW50IHR5cGUocylcbiAgICogICAgICAgICB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgbGlzdGVuZXIuXG4gICAqXG4gICAqICAgICAgICAgQW5vdGhlciBldmVudGVkIG9iamVjdCBjYW4gYmUgcGFzc2VkIGhlcmUgaW5zdGVhZCwgd2hpY2ggd2lsbFxuICAgKiAgICAgICAgIGNhdXNlIHRoZSBsaXN0ZW5lciB0byBsaXN0ZW4gZm9yIGV2ZW50cyBvbiBfdGhhdF8gb2JqZWN0LlxuICAgKlxuICAgKiAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGUgbGlzdGVuZXIncyBgdGhpc2AgdmFsdWUgd2lsbCBiZSBib3VuZCB0b1xuICAgKiAgICAgICAgIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8QXJyYXl8RnVuY3Rpb259IHR5cGVPckxpc3RlbmVyXG4gICAqICAgICAgICAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHdhcyBhIHN0cmluZyBvciBhcnJheSwgdGhpcyBzaG91bGQgYmUgdGhlXG4gICAqICAgICAgICAgbGlzdGVuZXIgZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhpcyBpcyBhIHN0cmluZyBvciBhcnJheSBvZiBldmVudFxuICAgKiAgICAgICAgIHR5cGUocykuXG4gICAqXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbbGlzdGVuZXJdXG4gICAqICAgICAgICAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHdhcyBhbm90aGVyIGV2ZW50ZWQgb2JqZWN0LCB0aGlzIHdpbGwgYmVcbiAgICogICAgICAgICB0aGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gICAqL1xuICBhbnk6IGZ1bmN0aW9uIGFueSgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBfbm9ybWFsaXplTGlzdGVuQXJnczMgPSBub3JtYWxpemVMaXN0ZW5BcmdzKHRoaXMsIGFyZ3MpLFxuICAgICAgICBpc1RhcmdldGluZ1NlbGYgPSBfbm9ybWFsaXplTGlzdGVuQXJnczMuaXNUYXJnZXRpbmdTZWxmLFxuICAgICAgICB0YXJnZXQgPSBfbm9ybWFsaXplTGlzdGVuQXJnczMudGFyZ2V0LFxuICAgICAgICB0eXBlID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MzLnR5cGUsXG4gICAgICAgIGxpc3RlbmVyID0gX25vcm1hbGl6ZUxpc3RlbkFyZ3MzLmxpc3RlbmVyOyAvLyBUYXJnZXRpbmcgdGhpcyBldmVudGVkIG9iamVjdC5cblxuXG4gICAgaWYgKGlzVGFyZ2V0aW5nU2VsZikge1xuICAgICAgbGlzdGVuKHRhcmdldCwgJ2FueScsIHR5cGUsIGxpc3RlbmVyKTsgLy8gVGFyZ2V0aW5nIGFub3RoZXIgZXZlbnRlZCBvYmplY3QuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgX3RoaXMzLm9mZih0YXJnZXQsIHR5cGUsIHdyYXBwZXIpO1xuXG4gICAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgbGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgICBsYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdGVuZXIuYXBwbHkobnVsbCwgbGFyZ3MpO1xuICAgICAgfTsgLy8gVXNlIHRoZSBzYW1lIGZ1bmN0aW9uIElEIGFzIHRoZSBsaXN0ZW5lciBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyXG4gICAgICAvLyBpdCB1c2luZyB0aGUgSUQgb2YgdGhlIG9yaWdpbmFsIGxpc3RlbmVyLlxuXG5cbiAgICAgIHdyYXBwZXIuZ3VpZCA9IGxpc3RlbmVyLmd1aWQ7XG4gICAgICBsaXN0ZW4odGFyZ2V0LCAnYW55JywgdHlwZSwgd3JhcHBlcik7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGxpc3RlbmVyKHMpIGZyb20gZXZlbnQocykgb24gYW4gZXZlbnRlZCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xBcnJheXxFbGVtZW50fE9iamVjdH0gW3RhcmdldE9yVHlwZV1cbiAgICogICAgICAgICBJZiB0aGlzIGlzIGEgc3RyaW5nIG9yIGFycmF5LCBpdCByZXByZXNlbnRzIHRoZSBldmVudCB0eXBlKHMpLlxuICAgKlxuICAgKiAgICAgICAgIEFub3RoZXIgZXZlbnRlZCBvYmplY3QgY2FuIGJlIHBhc3NlZCBoZXJlIGluc3RlYWQsIGluIHdoaWNoIGNhc2VcbiAgICogICAgICAgICBBTEwgMyBhcmd1bWVudHMgYXJlIF9yZXF1aXJlZF8uXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xBcnJheXxGdW5jdGlvbn0gW3R5cGVPckxpc3RlbmVyXVxuICAgKiAgICAgICAgIElmIHRoZSBmaXJzdCBhcmd1bWVudCB3YXMgYSBzdHJpbmcgb3IgYXJyYXksIHRoaXMgbWF5IGJlIHRoZVxuICAgKiAgICAgICAgIGxpc3RlbmVyIGZ1bmN0aW9uLiBPdGhlcndpc2UsIHRoaXMgaXMgYSBzdHJpbmcgb3IgYXJyYXkgb2YgZXZlbnRcbiAgICogICAgICAgICB0eXBlKHMpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2xpc3RlbmVyXVxuICAgKiAgICAgICAgIElmIHRoZSBmaXJzdCBhcmd1bWVudCB3YXMgYW5vdGhlciBldmVudGVkIG9iamVjdCwgdGhpcyB3aWxsIGJlXG4gICAqICAgICAgICAgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uOyBvdGhlcndpc2UsIF9hbGxfIGxpc3RlbmVycyBib3VuZCB0byB0aGVcbiAgICogICAgICAgICBldmVudCB0eXBlKHMpIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICovXG4gIG9mZjogZnVuY3Rpb24gb2ZmJDEodGFyZ2V0T3JUeXBlLCB0eXBlT3JMaXN0ZW5lciwgbGlzdGVuZXIpIHtcbiAgICAvLyBUYXJnZXRpbmcgdGhpcyBldmVudGVkIG9iamVjdC5cbiAgICBpZiAoIXRhcmdldE9yVHlwZSB8fCBpc1ZhbGlkRXZlbnRUeXBlKHRhcmdldE9yVHlwZSkpIHtcbiAgICAgIG9mZih0aGlzLmV2ZW50QnVzRWxfLCB0YXJnZXRPclR5cGUsIHR5cGVPckxpc3RlbmVyKTsgLy8gVGFyZ2V0aW5nIGFub3RoZXIgZXZlbnRlZCBvYmplY3QuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YXJnZXQgPSB0YXJnZXRPclR5cGU7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVPckxpc3RlbmVyOyAvLyBGYWlsIGZhc3QgYW5kIGluIGEgbWVhbmluZ2Z1bCB3YXkhXG5cbiAgICAgIHZhbGlkYXRlVGFyZ2V0KHRhcmdldCk7XG4gICAgICB2YWxpZGF0ZUV2ZW50VHlwZSh0eXBlKTtcbiAgICAgIHZhbGlkYXRlTGlzdGVuZXIobGlzdGVuZXIpOyAvLyBFbnN1cmUgdGhlcmUncyBhdCBsZWFzdCBhIGd1aWQsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGhhc24ndCBiZWVuIHVzZWRcblxuICAgICAgbGlzdGVuZXIgPSBiaW5kKHRoaXMsIGxpc3RlbmVyKTsgLy8gUmVtb3ZlIHRoZSBkaXNwb3NlIGxpc3RlbmVyIG9uIHRoaXMgZXZlbnRlZCBvYmplY3QsIHdoaWNoIHdhcyBnaXZlblxuICAgICAgLy8gdGhlIHNhbWUgZ3VpZCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIgaW4gb24oKS5cblxuICAgICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCBsaXN0ZW5lcik7XG5cbiAgICAgIGlmICh0YXJnZXQubm9kZU5hbWUpIHtcbiAgICAgICAgb2ZmKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpO1xuICAgICAgICBvZmYodGFyZ2V0LCAnZGlzcG9zZScsIGxpc3RlbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFdmVudGVkKHRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0Lm9mZih0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5vZmYoJ2Rpc3Bvc2UnLCBsaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGaXJlIGFuIGV2ZW50IG9uIHRoaXMgZXZlbnRlZCBvYmplY3QsIGNhdXNpbmcgaXRzIGxpc3RlbmVycyB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd8T2JqZWN0fSBldmVudFxuICAgKiAgICAgICAgICBBbiBldmVudCB0eXBlIG9yIGFuIG9iamVjdCB3aXRoIGEgdHlwZSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtICAge09iamVjdH0gW2hhc2hdXG4gICAqICAgICAgICAgIEFuIGFkZGl0aW9uYWwgb2JqZWN0IHRvIHBhc3MgYWxvbmcgdG8gbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3YXMgcHJldmVudGVkLlxuICAgKi9cbiAgdHJpZ2dlcjogZnVuY3Rpb24gdHJpZ2dlciQxKGV2ZW50LCBoYXNoKSB7XG4gICAgcmV0dXJuIHRyaWdnZXIodGhpcy5ldmVudEJ1c0VsXywgZXZlbnQsIGhhc2gpO1xuICB9XG59O1xuLyoqXG4gKiBBcHBsaWVzIHtAbGluayBtb2R1bGU6ZXZlbnRlZH5FdmVudGVkTWl4aW58RXZlbnRlZE1peGlufSB0byBhIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqICAgICAgICAgVGhlIG9iamVjdCB0byB3aGljaCB0byBhZGQgZXZlbnQgbWV0aG9kcy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuICogICAgICAgICBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgbWl4aW4gYmVoYXZpb3IuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5ldmVudEJ1c0tleV1cbiAqICAgICAgICAgQnkgZGVmYXVsdCwgYWRkcyBhIGBldmVudEJ1c0VsX2AgRE9NIGVsZW1lbnQgdG8gdGhlIHRhcmdldCBvYmplY3QsXG4gKiAgICAgICAgIHdoaWNoIGlzIHVzZWQgYXMgYW4gZXZlbnQgYnVzLiBJZiB0aGUgdGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhXG4gKiAgICAgICAgIERPTSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHVzZWQsIHBhc3MgaXRzIGtleSBoZXJlLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgVGhlIHRhcmdldCBvYmplY3QuXG4gKi9cblxuZnVuY3Rpb24gZXZlbnRlZCh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBldmVudEJ1c0tleSA9IF9vcHRpb25zLmV2ZW50QnVzS2V5OyAvLyBTZXQgb3IgY3JlYXRlIHRoZSBldmVudEJ1c0VsXy5cblxuICBpZiAoZXZlbnRCdXNLZXkpIHtcbiAgICBpZiAoIXRhcmdldFtldmVudEJ1c0tleV0ubm9kZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBldmVudEJ1c0tleSBcXFwiXCIgKyBldmVudEJ1c0tleSArIFwiXFxcIiBkb2VzIG5vdCByZWZlciB0byBhbiBlbGVtZW50LlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuZXZlbnRCdXNFbF8gPSB0YXJnZXRbZXZlbnRCdXNLZXldO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldC5ldmVudEJ1c0VsXyA9IGNyZWF0ZUVsKCdzcGFuJywge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLWV2ZW50LWJ1cydcbiAgICB9KTtcbiAgfVxuXG4gIGFzc2lnbih0YXJnZXQsIEV2ZW50ZWRNaXhpbik7XG5cbiAgaWYgKHRhcmdldC5ldmVudGVkQ2FsbGJhY2tzKSB7XG4gICAgdGFyZ2V0LmV2ZW50ZWRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH0gLy8gV2hlbiBhbnkgZXZlbnRlZCBvYmplY3QgaXMgZGlzcG9zZWQsIGl0IHJlbW92ZXMgYWxsIGl0cyBsaXN0ZW5lcnMuXG5cblxuICB0YXJnZXQub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGFyZ2V0Lm9mZigpO1xuICAgIHdpbmRvdyQxLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGFyZ2V0LmV2ZW50QnVzRWxfID0gbnVsbDtcbiAgICB9LCAwKTtcbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogQGZpbGUgbWl4aW5zL3N0YXRlZnVsLmpzXG4gKiBAbW9kdWxlIHN0YXRlZnVsXG4gKi9cbi8qKlxuICogQ29udGFpbnMgbWV0aG9kcyB0aGF0IHByb3ZpZGUgc3RhdGVmdWxuZXNzIHRvIGFuIG9iamVjdCB3aGljaCBpcyBwYXNzZWRcbiAqIHRvIHtAbGluayBtb2R1bGU6c3RhdGVmdWx9LlxuICpcbiAqIEBtaXhpbiBTdGF0ZWZ1bE1peGluXG4gKi9cblxudmFyIFN0YXRlZnVsTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBBIGhhc2ggY29udGFpbmluZyBhcmJpdHJhcnkga2V5cyBhbmQgdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2ZcbiAgICogdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRlOiB7fSxcblxuICAvKipcbiAgICogU2V0IHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QgYnkgbXV0YXRpbmcgaXRzXG4gICAqIHtAbGluayBtb2R1bGU6c3RhdGVmdWx+U3RhdGVmdWxNaXhpbi5zdGF0ZXxzdGF0ZX0gb2JqZWN0IGluIHBsYWNlLlxuICAgKlxuICAgKiBAZmlyZXMgICBtb2R1bGU6c3RhdGVmdWx+U3RhdGVmdWxNaXhpbiNzdGF0ZWNoYW5nZWRcbiAgICogQHBhcmFtICAge09iamVjdHxGdW5jdGlvbn0gc3RhdGVVcGRhdGVzXG4gICAqICAgICAgICAgIEEgbmV3IHNldCBvZiBwcm9wZXJ0aWVzIHRvIHNoYWxsb3ctbWVyZ2UgaW50byB0aGUgcGx1Z2luIHN0YXRlLlxuICAgKiAgICAgICAgICBDYW4gYmUgYSBwbGFpbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwbGFpbiBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdHx1bmRlZmluZWR9XG4gICAqICAgICAgICAgIEFuIG9iamVjdCBjb250YWluaW5nIGNoYW5nZXMgdGhhdCBvY2N1cnJlZC4gSWYgbm8gY2hhbmdlc1xuICAgKiAgICAgICAgICBvY2N1cnJlZCwgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHNldFN0YXRlOiBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZVVwZGF0ZXMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gU3VwcG9ydCBwcm92aWRpbmcgdGhlIGBzdGF0ZVVwZGF0ZXNgIHN0YXRlIGFzIGEgZnVuY3Rpb24uXG4gICAgaWYgKHR5cGVvZiBzdGF0ZVVwZGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN0YXRlVXBkYXRlcyA9IHN0YXRlVXBkYXRlcygpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VzO1xuICAgIGVhY2goc3RhdGVVcGRhdGVzLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFuZ2UgaWYgdGhlIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHdoYXQncyBpbiB0aGVcbiAgICAgIC8vIGN1cnJlbnQgc3RhdGUuXG4gICAgICBpZiAoX3RoaXMuc3RhdGVba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXMgfHwge307XG4gICAgICAgIGNoYW5nZXNba2V5XSA9IHtcbiAgICAgICAgICBmcm9tOiBfdGhpcy5zdGF0ZVtrZXldLFxuICAgICAgICAgIHRvOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zdGF0ZVtrZXldID0gdmFsdWU7XG4gICAgfSk7IC8vIE9ubHkgdHJpZ2dlciBcInN0YXRlY2hhbmdlXCIgaWYgdGhlcmUgd2VyZSBjaGFuZ2VzIEFORCB3ZSBoYXZlIGEgdHJpZ2dlclxuICAgIC8vIGZ1bmN0aW9uLiBUaGlzIGFsbG93cyB1cyB0byBub3QgcmVxdWlyZSB0aGF0IHRoZSB0YXJnZXQgb2JqZWN0IGJlIGFuXG4gICAgLy8gZXZlbnRlZCBvYmplY3QuXG5cbiAgICBpZiAoY2hhbmdlcyAmJiBpc0V2ZW50ZWQodGhpcykpIHtcbiAgICAgIC8qKlxuICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIG9uIGFuIG9iamVjdCB0aGF0IGlzIGJvdGhcbiAgICAgICAqIHtAbGluayBtb2R1bGU6c3RhdGVmdWx8c3RhdGVmdWx9IGFuZCB7QGxpbmsgbW9kdWxlOmV2ZW50ZWR8ZXZlbnRlZH1cbiAgICAgICAqIGluZGljYXRpbmcgdGhhdCBpdHMgc3RhdGUgaGFzIGNoYW5nZWQuXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50ICAgIG1vZHVsZTpzdGF0ZWZ1bH5TdGF0ZWZ1bE1peGluI3N0YXRlY2hhbmdlZFxuICAgICAgICogQHR5cGUgICAgIHtPYmplY3R9XG4gICAgICAgKiBAcHJvcGVydHkge09iamVjdH0gY2hhbmdlc1xuICAgICAgICogICAgICAgICAgIEEgaGFzaCBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBjaGFuZ2VkIGFuZFxuICAgICAgICogICAgICAgICAgIHRoZSB2YWx1ZXMgdGhleSB3ZXJlIGNoYW5nZWQgYGZyb21gIGFuZCBgdG9gLlxuICAgICAgICovXG4gICAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgICBjaGFuZ2VzOiBjaGFuZ2VzLFxuICAgICAgICB0eXBlOiAnc3RhdGVjaGFuZ2VkJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cbn07XG4vKipcbiAqIEFwcGxpZXMge0BsaW5rIG1vZHVsZTpzdGF0ZWZ1bH5TdGF0ZWZ1bE1peGlufFN0YXRlZnVsTWl4aW59IHRvIGEgdGFyZ2V0XG4gKiBvYmplY3QuXG4gKlxuICogSWYgdGhlIHRhcmdldCBvYmplY3QgaXMge0BsaW5rIG1vZHVsZTpldmVudGVkfGV2ZW50ZWR9IGFuZCBoYXMgYVxuICogYGhhbmRsZVN0YXRlQ2hhbmdlZGAgbWV0aG9kLCB0aGF0IG1ldGhvZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlXG4gKiBgc3RhdGVjaGFuZ2VkYCBldmVudCBvbiBpdHNlbGYuXG4gKlxuICogQHBhcmFtICAge09iamVjdH0gdGFyZ2V0XG4gKiAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIG1hZGUgc3RhdGVmdWwuXG4gKlxuICogQHBhcmFtICAge09iamVjdH0gW2RlZmF1bHRTdGF0ZV1cbiAqICAgICAgICAgIEEgZGVmYXVsdCBzZXQgb2YgcHJvcGVydGllcyB0byBwb3B1bGF0ZSB0aGUgbmV3bHktc3RhdGVmdWwgb2JqZWN0J3NcbiAqICAgICAgICAgIGBzdGF0ZWAgcHJvcGVydHkuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICogICAgICAgICAgUmV0dXJucyB0aGUgYHRhcmdldGAuXG4gKi9cblxuZnVuY3Rpb24gc3RhdGVmdWwodGFyZ2V0LCBkZWZhdWx0U3RhdGUpIHtcbiAgYXNzaWduKHRhcmdldCwgU3RhdGVmdWxNaXhpbik7IC8vIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgbWl4aW5nLWluIGJlY2F1c2Ugd2UgbmVlZCB0byByZXBsYWNlIHRoZSBgc3RhdGVgXG4gIC8vIGFkZGVkIGluIHRoYXQgc3RlcC5cblxuICB0YXJnZXQuc3RhdGUgPSBhc3NpZ24oe30sIHRhcmdldC5zdGF0ZSwgZGVmYXVsdFN0YXRlKTsgLy8gQXV0by1iaW5kIHRoZSBgaGFuZGxlU3RhdGVDaGFuZ2VkYCBtZXRob2Qgb2YgdGhlIHRhcmdldCBvYmplY3QgaWYgaXQgZXhpc3RzLlxuXG4gIGlmICh0eXBlb2YgdGFyZ2V0LmhhbmRsZVN0YXRlQ2hhbmdlZCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0V2ZW50ZWQodGFyZ2V0KSkge1xuICAgIHRhcmdldC5vbignc3RhdGVjaGFuZ2VkJywgdGFyZ2V0LmhhbmRsZVN0YXRlQ2hhbmdlZCk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBmaWxlIHN0cmluZy1jYXNlcy5qc1xuICogQG1vZHVsZSB0by1sb3dlci1jYXNlXG4gKi9cblxuLyoqXG4gKiBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiAgICAgICAgU3RyaW5nIHRvIGJlIGxvd2VyY2FzZWRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFRoZSBzdHJpbmcgd2l0aCBhIGxvd2VyY2FzZWQgZmlyc3QgbGV0dGVyXG4gKi9cbnZhciB0b0xvd2VyQ2FzZSA9IGZ1bmN0aW9uIHRvTG93ZXJDYXNlKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8uLywgZnVuY3Rpb24gKHcpIHtcbiAgICByZXR1cm4gdy50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbn07XG4vKipcbiAqIFVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqICAgICAgICBTdHJpbmcgdG8gYmUgdXBwZXJjYXNlZFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqICAgICAgICAgVGhlIHN0cmluZyB3aXRoIGFuIHVwcGVyY2FzZWQgZmlyc3QgbGV0dGVyXG4gKi9cblxudmFyIHRvVGl0bGVDYXNlID0gZnVuY3Rpb24gdG9UaXRsZUNhc2Uoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLy4vLCBmdW5jdGlvbiAodykge1xuICAgIHJldHVybiB3LnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufTtcbi8qKlxuICogQ29tcGFyZXMgdGhlIFRpdGxlQ2FzZSB2ZXJzaW9ucyBvZiB0aGUgdHdvIHN0cmluZ3MgZm9yIGVxdWFsaXR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIxXG4gKiAgICAgICAgVGhlIGZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cjJcbiAqICAgICAgICBUaGUgc2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgV2hldGhlciB0aGUgVGl0bGVDYXNlIHZlcnNpb25zIG9mIHRoZSBzdHJpbmdzIGFyZSBlcXVhbFxuICovXG5cbnZhciB0aXRsZUNhc2VFcXVhbHMgPSBmdW5jdGlvbiB0aXRsZUNhc2VFcXVhbHMoc3RyMSwgc3RyMikge1xuICByZXR1cm4gdG9UaXRsZUNhc2Uoc3RyMSkgPT09IHRvVGl0bGVDYXNlKHN0cjIpO1xufTtcblxuLyoqXG4gKiBAZmlsZSBtZXJnZS1vcHRpb25zLmpzXG4gKiBAbW9kdWxlIG1lcmdlLW9wdGlvbnNcbiAqL1xuLyoqXG4gKiBNZXJnZSB0d28gb2JqZWN0cyByZWN1cnNpdmVseS5cbiAqXG4gKiBQZXJmb3JtcyBhIGRlZXAgbWVyZ2UgbGlrZVxuICoge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuMTAjbWVyZ2V8bG9kYXNoLm1lcmdlfSwgYnV0IG9ubHkgbWVyZ2VzXG4gKiBwbGFpbiBvYmplY3RzIChub3QgYXJyYXlzLCBlbGVtZW50cywgb3IgYW55dGhpbmcgZWxzZSkuXG4gKlxuICogTm9uLXBsYWluIG9iamVjdCB2YWx1ZXMgd2lsbCBiZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSB0aGUgcmlnaHQtbW9zdFxuICogYXJndW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtICAge09iamVjdFtdfSBzb3VyY2VzXG4gKiAgICAgICAgICBPbmUgb3IgbW9yZSBvYmplY3RzIHRvIG1lcmdlIGludG8gYSBuZXcgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgIEEgbmV3IG9iamVjdCB0aGF0IGlzIHRoZSBtZXJnZWQgcmVzdWx0IG9mIGFsbCBzb3VyY2VzLlxuICovXG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucygpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzb3VyY2VzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNvdXJjZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBzb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWFjaChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoIWlzUGxhaW4odmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1BsYWluKHJlc3VsdFtrZXldKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHt9O1xuICAgICAgfVxuXG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlT3B0aW9ucyhyZXN1bHRba2V5XSwgdmFsdWUpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQbGF5ZXIgQ29tcG9uZW50IC0gQmFzZSBjbGFzcyBmb3IgYWxsIFVJIG9iamVjdHNcbiAqXG4gKiBAZmlsZSBjb21wb25lbnQuanNcbiAqL1xuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgVUkgQ29tcG9uZW50cy5cbiAqIENvbXBvbmVudHMgYXJlIFVJIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IGJvdGggYSBqYXZhc2NyaXB0IG9iamVjdCBhbmQgYW4gZWxlbWVudFxuICogaW4gdGhlIERPTS4gVGhleSBjYW4gYmUgY2hpbGRyZW4gb2Ygb3RoZXIgY29tcG9uZW50cywgYW5kIGNhbiBoYXZlXG4gKiBjaGlsZHJlbiB0aGVtc2VsdmVzLlxuICpcbiAqIENvbXBvbmVudHMgY2FuIGFsc28gdXNlIG1ldGhvZHMgZnJvbSB7QGxpbmsgRXZlbnRUYXJnZXR9XG4gKi9cblxudmFyIENvbXBvbmVudCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBjb21wb25lbnQgaXMgcmVhZHkuIERvZXMgbm90IGhhdmUgYW55XG4gICAqIHBhcmFtdGVycyBhbmQgYW55IGNhbGxiYWNrIHZhbHVlIHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogQGNhbGxiYWNrIENvbXBvbmVudH5SZWFkeUNhbGxiYWNrXG4gICAqIEB0aGlzIENvbXBvbmVudFxuICAgKi9cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuY2hpbGRyZW5dXG4gICAqICAgICAgICBBbiBhcnJheSBvZiBjaGlsZHJlbiBvYmplY3RzIHRvIGludGlhbGl6ZSB0aGlzIGNvbXBvbmVudCB3aXRoLiBDaGlsZHJlbiBvYmplY3RzIGhhdmVcbiAgICogICAgICAgIGEgbmFtZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgdXNlZCBpZiBtb3JlIHRoYW4gb25lIGNvbXBvbmVudCBvZiB0aGUgc2FtZSB0eXBlIG5lZWRzIHRvIGJlXG4gICAqICAgICAgICBhZGRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21wb25lbnR+UmVhZHlDYWxsYmFja30gW3JlYWR5XVxuICAgKiAgICAgICAgRnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBgQ29tcG9uZW50YCBpcyByZWFkeS5cbiAgICovXG4gIGZ1bmN0aW9uIENvbXBvbmVudChwbGF5ZXIsIG9wdGlvbnMsIHJlYWR5KSB7XG4gICAgLy8gVGhlIGNvbXBvbmVudCBtaWdodCBiZSB0aGUgcGxheWVyIGl0c2VsZiBhbmQgd2UgY2FuJ3QgcGFzcyBgdGhpc2AgdG8gc3VwZXJcbiAgICBpZiAoIXBsYXllciAmJiB0aGlzLnBsYXkpIHtcbiAgICAgIHRoaXMucGxheWVyXyA9IHBsYXllciA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5ZXJfID0gcGxheWVyO1xuICAgIH0gLy8gSG9sZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHZpYSBgYWRkQ2hpbGRgIG1ldGhvZFxuXG5cbiAgICB0aGlzLnBhcmVudENvbXBvbmVudF8gPSBudWxsOyAvLyBNYWtlIGEgY29weSBvZiBwcm90b3R5cGUub3B0aW9uc18gdG8gcHJvdGVjdCBhZ2FpbnN0IG92ZXJyaWRpbmcgZGVmYXVsdHNcblxuICAgIHRoaXMub3B0aW9uc18gPSBtZXJnZU9wdGlvbnMoe30sIHRoaXMub3B0aW9uc18pOyAvLyBVcGRhdGVkIG9wdGlvbnMgd2l0aCBzdXBwbGllZCBvcHRpb25zXG5cbiAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zXyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnNfLCBvcHRpb25zKTsgLy8gR2V0IElEIGZyb20gb3B0aW9ucyBvciBvcHRpb25zIGVsZW1lbnQgaWYgb25lIGlzIHN1cHBsaWVkXG5cbiAgICB0aGlzLmlkXyA9IG9wdGlvbnMuaWQgfHwgb3B0aW9ucy5lbCAmJiBvcHRpb25zLmVsLmlkOyAvLyBJZiB0aGVyZSB3YXMgbm8gSUQgZnJvbSB0aGUgb3B0aW9ucywgZ2VuZXJhdGUgb25lXG5cbiAgICBpZiAoIXRoaXMuaWRfKSB7XG4gICAgICAvLyBEb24ndCByZXF1aXJlIHRoZSBwbGF5ZXIgSUQgZnVuY3Rpb24gaW4gdGhlIGNhc2Ugb2YgbW9jayBwbGF5ZXJzXG4gICAgICB2YXIgaWQgPSBwbGF5ZXIgJiYgcGxheWVyLmlkICYmIHBsYXllci5pZCgpIHx8ICdub19wbGF5ZXInO1xuICAgICAgdGhpcy5pZF8gPSBpZCArIFwiX2NvbXBvbmVudF9cIiArIG5ld0dVSUQoKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWVfID0gb3B0aW9ucy5uYW1lIHx8IG51bGw7IC8vIENyZWF0ZSBlbGVtZW50IGlmIG9uZSB3YXNuJ3QgcHJvdmlkZWQgaW4gb3B0aW9uc1xuXG4gICAgaWYgKG9wdGlvbnMuZWwpIHtcbiAgICAgIHRoaXMuZWxfID0gb3B0aW9ucy5lbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY3JlYXRlRWwgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVsXyA9IHRoaXMuY3JlYXRlRWwoKTtcbiAgICB9IC8vIGlmIGV2ZW50ZWQgaXMgYW55dGhpbmcgZXhjZXB0IGZhbHNlLCB3ZSB3YW50IHRvIG1peGluIGluIGV2ZW50ZWRcblxuXG4gICAgaWYgKG9wdGlvbnMuZXZlbnRlZCAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIE1ha2UgdGhpcyBhbiBldmVudGVkIG9iamVjdCBhbmQgdXNlIGBlbF9gLCBpZiBhdmFpbGFibGUsIGFzIGl0cyBldmVudCBidXNcbiAgICAgIGV2ZW50ZWQodGhpcywge1xuICAgICAgICBldmVudEJ1c0tleTogdGhpcy5lbF8gPyAnZWxfJyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRlZnVsKHRoaXMsIHRoaXMuY29uc3RydWN0b3IuZGVmYXVsdFN0YXRlKTtcbiAgICB0aGlzLmNoaWxkcmVuXyA9IFtdO1xuICAgIHRoaXMuY2hpbGRJbmRleF8gPSB7fTtcbiAgICB0aGlzLmNoaWxkTmFtZUluZGV4XyA9IHt9O1xuICAgIHZhciBTZXRTaGFtO1xuXG4gICAgaWYgKCF3aW5kb3ckMS5TZXQpIHtcbiAgICAgIFNldFNoYW0gPVxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBTZXRTaGFtKCkge1xuICAgICAgICAgIHRoaXMuc2V0XyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9wcm90bzIgPSBTZXRTaGFtLnByb3RvdHlwZTtcblxuICAgICAgICBfcHJvdG8yLmhhcyA9IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMuc2V0XztcbiAgICAgICAgfTtcblxuICAgICAgICBfcHJvdG8yW1wiZGVsZXRlXCJdID0gZnVuY3Rpb24gX2RlbGV0ZShrZXkpIHtcbiAgICAgICAgICB2YXIgaGFzID0gdGhpcy5oYXMoa2V5KTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zZXRfW2tleV07XG4gICAgICAgICAgcmV0dXJuIGhhcztcbiAgICAgICAgfTtcblxuICAgICAgICBfcHJvdG8yLmFkZCA9IGZ1bmN0aW9uIGFkZChrZXkpIHtcbiAgICAgICAgICB0aGlzLnNldF9ba2V5XSA9IDE7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgX3Byb3RvMi5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNldF8pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywga2V5LCBrZXksIHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gU2V0U2hhbTtcbiAgICAgIH0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFRpbWVvdXRJZHNfID0gd2luZG93JDEuU2V0ID8gbmV3IFNldCgpIDogbmV3IFNldFNoYW0oKTtcbiAgICB0aGlzLnNldEludGVydmFsSWRzXyA9IHdpbmRvdyQxLlNldCA/IG5ldyBTZXQoKSA6IG5ldyBTZXRTaGFtKCk7XG4gICAgdGhpcy5yYWZJZHNfID0gd2luZG93JDEuU2V0ID8gbmV3IFNldCgpIDogbmV3IFNldFNoYW0oKTtcbiAgICB0aGlzLmNsZWFyaW5nVGltZXJzT25EaXNwb3NlXyA9IGZhbHNlOyAvLyBBZGQgYW55IGNoaWxkIGNvbXBvbmVudHMgaW4gb3B0aW9uc1xuXG4gICAgaWYgKG9wdGlvbnMuaW5pdENoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5pbml0Q2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWR5KHJlYWR5KTsgLy8gRG9uJ3Qgd2FudCB0byB0cmlnZ2VyIHJlYWR5IGhlcmUgb3IgaXQgd2lsbCBiZWZvcmUgaW5pdCBpcyBhY3R1YWxseVxuICAgIC8vIGZpbmlzaGVkIGZvciBhbGwgY2hpbGRyZW4gdGhhdCBydW4gdGhpcyBjb25zdHJ1Y3RvclxuXG4gICAgaWYgKG9wdGlvbnMucmVwb3J0VG91Y2hBY3Rpdml0eSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW5hYmxlVG91Y2hBY3Rpdml0eSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGlzcG9zZSBvZiB0aGUgYENvbXBvbmVudGAgYW5kIGFsbCBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZmlyZXMgQ29tcG9uZW50I2Rpc3Bvc2VcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQ29tcG9uZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBgQ29tcG9uZW50YCBpcyBkaXNwb3NlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBDb21wb25lbnQjZGlzcG9zZVxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2J1YmJsZXM9ZmFsc2VdXG4gICAgICogICAgICAgICAgIHNldCB0byBmYWxzZSBzbyB0aGF0IHRoZSBjbG9zZSBldmVudCBkb2VzIG5vdFxuICAgICAqICAgICAgICAgICBidWJibGUgdXBcbiAgICAgKi9cbiAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ2Rpc3Bvc2UnLFxuICAgICAgYnViYmxlczogZmFsc2VcbiAgICB9KTsgLy8gRGlzcG9zZSBhbGwgY2hpbGRyZW4uXG5cbiAgICBpZiAodGhpcy5jaGlsZHJlbl8pIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLmNoaWxkcmVuXy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbl9baV0uZGlzcG9zZSkge1xuICAgICAgICAgIHRoaXMuY2hpbGRyZW5fW2ldLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gRGVsZXRlIGNoaWxkIHJlZmVyZW5jZXNcblxuXG4gICAgdGhpcy5jaGlsZHJlbl8gPSBudWxsO1xuICAgIHRoaXMuY2hpbGRJbmRleF8gPSBudWxsO1xuICAgIHRoaXMuY2hpbGROYW1lSW5kZXhfID0gbnVsbDtcbiAgICB0aGlzLnBhcmVudENvbXBvbmVudF8gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuZWxfKSB7XG4gICAgICAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICAgICAgaWYgKHRoaXMuZWxfLnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5lbF8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsXyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChEb21EYXRhLmhhcyh0aGlzLmVsXykpIHtcbiAgICAgICAgRG9tRGF0YVtcImRlbGV0ZVwiXSh0aGlzLmVsXyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWxfID0gbnVsbDtcbiAgICB9IC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlIHBsYXllciBhZnRlciBkaXNwb3Npbmcgb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgdGhpcy5wbGF5ZXJfID0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSB7QGxpbmsgUGxheWVyfSB0aGF0IHRoZSBgQ29tcG9uZW50YCBoYXMgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEByZXR1cm4ge1BsYXllcn1cbiAgICogICAgICAgICBUaGUgcGxheWVyIHRoYXQgdGhpcyBgQ29tcG9uZW50YCBoYXMgYXR0YWNoZWQgdG8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBsYXllciA9IGZ1bmN0aW9uIHBsYXllcigpIHtcbiAgICByZXR1cm4gdGhpcy5wbGF5ZXJfO1xuICB9XG4gIC8qKlxuICAgKiBEZWVwIG1lcmdlIG9mIG9wdGlvbnMgb2JqZWN0cyB3aXRoIG5ldyBvcHRpb25zLlxuICAgKiA+IE5vdGU6IFdoZW4gYm90aCBgb2JqYCBhbmQgYG9wdGlvbnNgIGNvbnRhaW4gcHJvcGVydGllcyB3aG9zZSB2YWx1ZXMgYXJlIG9iamVjdHMuXG4gICAqICAgICAgICAgVGhlIHR3byBwcm9wZXJ0aWVzIGdldCBtZXJnZWQgdXNpbmcge0BsaW5rIG1vZHVsZTptZXJnZU9wdGlvbnN9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAgICogICAgICAgIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyBuZXcgb3B0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKiAgICAgICAgIEEgbmV3IG9iamVjdCBvZiBgdGhpcy5vcHRpb25zX2AgYW5kIGBvYmpgIG1lcmdlZCB0b2dldGhlci5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ub3B0aW9ucyA9IGZ1bmN0aW9uIG9wdGlvbnMob2JqKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNfO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uc18gPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zXywgb2JqKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zXztcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBgQ29tcG9uZW50YHMgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgRE9NIGVsZW1lbnQgZm9yIHRoaXMgYENvbXBvbmVudGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVsID0gZnVuY3Rpb24gZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxfO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgcyBET00gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWdOYW1lXVxuICAgKiAgICAgICAgRWxlbWVudCdzIERPTSBub2RlIHR5cGUuIGUuZy4gJ2RpdidcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICAgKiAgICAgICAgQW4gb2JqZWN0IG9mIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2F0dHJpYnV0ZXNdXG4gICAqICAgICAgICBBbiBvYmplY3Qgb2YgYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSBzZXQuXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCBnZXRzIGNyZWF0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwkMSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsKHRhZ05hbWUsIHByb3BlcnRpZXMsIGF0dHJpYnV0ZXMpO1xuICB9XG4gIC8qKlxuICAgKiBMb2NhbGl6ZSBhIHN0cmluZyBnaXZlbiB0aGUgc3RyaW5nIGluIGVuZ2xpc2guXG4gICAqXG4gICAqIElmIHRva2VucyBhcmUgcHJvdmlkZWQsIGl0J2xsIHRyeSBhbmQgcnVuIGEgc2ltcGxlIHRva2VuIHJlcGxhY2VtZW50IG9uIHRoZSBwcm92aWRlZCBzdHJpbmcuXG4gICAqIFRoZSB0b2tlbnMgaXQgbG9va3MgZm9yIGxvb2sgbGlrZSBgezF9YCB3aXRoIHRoZSBpbmRleCBiZWluZyAxLWluZGV4ZWQgaW50byB0aGUgdG9rZW5zIGFycmF5LlxuICAgKlxuICAgKiBJZiBhIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBpdCdsbCB1c2UgdGhhdCBvdmVyIGBzdHJpbmdgLFxuICAgKiBpZiBhIHZhbHVlIGlzbid0IGZvdW5kIGluIHByb3ZpZGVkIGxhbmd1YWdlIGZpbGVzLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGVzY3JpcHRpdmUga2V5IGZvciB0b2tlbiByZXBsYWNlbWVudFxuICAgKiBidXQgaGF2ZSBhIHN1Y2NpbmN0IGxvY2FsaXplZCBzdHJpbmcgYW5kIG5vdCByZXF1aXJlIGBlbi5qc29uYCB0byBiZSBpbmNsdWRlZC5cbiAgICpcbiAgICogQ3VycmVudGx5LCBpdCBpcyB1c2VkIGZvciB0aGUgcHJvZ3Jlc3MgYmFyIHRpbWluZy5cbiAgICogYGBganNcbiAgICoge1xuICAgKiAgIFwicHJvZ3Jlc3MgYmFyIHRpbWluZzogY3VycmVudFRpbWU9ezF9IGR1cmF0aW9uPXsyfVwiOiBcInsxfSBvZiB7Mn1cIlxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBJdCBpcyB0aGVuIHVzZWQgbGlrZSBzbzpcbiAgICogYGBganNcbiAgICogdGhpcy5sb2NhbGl6ZSgncHJvZ3Jlc3MgYmFyIHRpbWluZzogY3VycmVudFRpbWU9ezF9IGR1cmF0aW9uezJ9JyxcbiAgICogICAgICAgICAgICAgICBbdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCksIHRoaXMucGxheWVyXy5kdXJhdGlvbigpXSxcbiAgICogICAgICAgICAgICAgICAnezF9IG9mIHsyfScpO1xuICAgKiBgYGBcbiAgICpcbiAgICogV2hpY2ggb3V0cHV0cyBzb21ldGhpbmcgbGlrZTogYDAxOjIzIG9mIDI0OjU2YC5cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiAgICAgICAgVGhlIHN0cmluZyB0byBsb2NhbGl6ZSBhbmQgdGhlIGtleSB0byBsb29rdXAgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbdG9rZW5zXVxuICAgKiAgICAgICAgSWYgdGhlIGN1cnJlbnQgaXRlbSBoYXMgdG9rZW4gcmVwbGFjZW1lbnRzLCBwcm92aWRlIHRoZSB0b2tlbnMgaGVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0VmFsdWVdXG4gICAqICAgICAgICBEZWZhdWx0cyB0byBgc3RyaW5nYC4gQ2FuIGJlIGEgZGVmYXVsdCB2YWx1ZSB0byB1c2UgZm9yIHRva2VuIHJlcGxhY2VtZW50XG4gICAqICAgICAgICBpZiB0aGUgbG9va3VwIGtleSBpcyBuZWVkZWQgdG8gYmUgc2VwYXJhdGUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgbG9jYWxpemVkIHN0cmluZyBvciBpZiBubyBsb2NhbGl6YXRpb24gZXhpc3RzIHRoZSBlbmdsaXNoIHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubG9jYWxpemUgPSBmdW5jdGlvbiBsb2NhbGl6ZShzdHJpbmcsIHRva2VucywgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNvZGUgPSB0aGlzLnBsYXllcl8ubGFuZ3VhZ2UgJiYgdGhpcy5wbGF5ZXJfLmxhbmd1YWdlKCk7XG4gICAgdmFyIGxhbmd1YWdlcyA9IHRoaXMucGxheWVyXy5sYW5ndWFnZXMgJiYgdGhpcy5wbGF5ZXJfLmxhbmd1YWdlcygpO1xuICAgIHZhciBsYW5ndWFnZSA9IGxhbmd1YWdlcyAmJiBsYW5ndWFnZXNbY29kZV07XG4gICAgdmFyIHByaW1hcnlDb2RlID0gY29kZSAmJiBjb2RlLnNwbGl0KCctJylbMF07XG4gICAgdmFyIHByaW1hcnlMYW5nID0gbGFuZ3VhZ2VzICYmIGxhbmd1YWdlc1twcmltYXJ5Q29kZV07XG4gICAgdmFyIGxvY2FsaXplZFN0cmluZyA9IGRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChsYW5ndWFnZSAmJiBsYW5ndWFnZVtzdHJpbmddKSB7XG4gICAgICBsb2NhbGl6ZWRTdHJpbmcgPSBsYW5ndWFnZVtzdHJpbmddO1xuICAgIH0gZWxzZSBpZiAocHJpbWFyeUxhbmcgJiYgcHJpbWFyeUxhbmdbc3RyaW5nXSkge1xuICAgICAgbG9jYWxpemVkU3RyaW5nID0gcHJpbWFyeUxhbmdbc3RyaW5nXTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zKSB7XG4gICAgICBsb2NhbGl6ZWRTdHJpbmcgPSBsb2NhbGl6ZWRTdHJpbmcucmVwbGFjZSgvXFx7KFxcZCspXFx9L2csIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2luZGV4IC0gMV07XG4gICAgICAgIHZhciByZXQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldCA9IG1hdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NhbGl6ZWRTdHJpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYENvbXBvbmVudGBzIERPTSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIGNoaWxkcmVuIGdldCBpbnNlcnRlZC5cbiAgICogVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIHRoZSBzYW1lIGFzIHRoZSBlbGVtZW50IHJldHVybmVkIGluIHtAbGluayBDb21wb25lbnQjZWx9LlxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBjb250ZW50IGVsZW1lbnQgZm9yIHRoaXMgYENvbXBvbmVudGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnRlbnRFbCA9IGZ1bmN0aW9uIGNvbnRlbnRFbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50RWxfIHx8IHRoaXMuZWxfO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhpcyBgQ29tcG9uZW50YHMgSURcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBpZCBvZiB0aGlzIGBDb21wb25lbnRgXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmlkID0gZnVuY3Rpb24gaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRfO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGBDb21wb25lbnRgcyBuYW1lLiBUaGUgbmFtZSBnZXRzIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBgQ29tcG9uZW50YFxuICAgKiBhbmQgaXMgc2V0IGR1cmluZyByZWdpc3RyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgbmFtZSBvZiB0aGlzIGBDb21wb25lbnRgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5uYW1lID0gZnVuY3Rpb24gbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXztcbiAgfVxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIGFsbCBjaGlsZCBjb21wb25lbnRzXG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKiAgICAgICAgIFRoZSBjaGlsZHJlblxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jaGlsZHJlbiA9IGZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuXztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hpbGQgYENvbXBvbmVudGAgd2l0aCB0aGUgZ2l2ZW4gYGlkYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gICAqICAgICAgICBUaGUgaWQgb2YgdGhlIGNoaWxkIGBDb21wb25lbnRgIHRvIGdldC5cbiAgICpcbiAgICogQHJldHVybiB7Q29tcG9uZW50fHVuZGVmaW5lZH1cbiAgICogICAgICAgICBUaGUgY2hpbGQgYENvbXBvbmVudGAgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBvciB1bmRlZmluZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENoaWxkQnlJZCA9IGZ1bmN0aW9uIGdldENoaWxkQnlJZChpZCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkSW5kZXhfW2lkXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hpbGQgYENvbXBvbmVudGAgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGNoaWxkIGBDb21wb25lbnRgIHRvIGdldC5cbiAgICpcbiAgICogQHJldHVybiB7Q29tcG9uZW50fHVuZGVmaW5lZH1cbiAgICogICAgICAgICBUaGUgY2hpbGQgYENvbXBvbmVudGAgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVgIG9yIHVuZGVmaW5lZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0Q2hpbGQgPSBmdW5jdGlvbiBnZXRDaGlsZChuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGROYW1lSW5kZXhfW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBjaGlsZCBgQ29tcG9uZW50YCBpbnNpZGUgdGhlIGN1cnJlbnQgYENvbXBvbmVudGAuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfENvbXBvbmVudH0gY2hpbGRcbiAgICogICAgICAgIFRoZSBuYW1lIG9yIGluc3RhbmNlIG9mIGEgY2hpbGQgdG8gYWRkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIG9wdGlvbnMgdGhhdCB3aWxsIGdldCBwYXNzZWQgdG8gY2hpbGRyZW4gb2ZcbiAgICogICAgICAgIHRoZSBjaGlsZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtpbmRleD10aGlzLmNoaWxkcmVuXy5sZW5ndGhdXG4gICAqICAgICAgICBUaGUgaW5kZXggdG8gYXR0ZW1wdCB0byBhZGQgYSBjaGlsZCBpbnRvLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDb21wb25lbnR9XG4gICAqICAgICAgICAgVGhlIGBDb21wb25lbnRgIHRoYXQgZ2V0cyBhZGRlZCBhcyBhIGNoaWxkLiBXaGVuIHVzaW5nIGEgc3RyaW5nIHRoZVxuICAgKiAgICAgICAgIGBDb21wb25lbnRgIHdpbGwgZ2V0IGNyZWF0ZWQgYnkgdGhpcyBwcm9jZXNzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkKGNoaWxkLCBvcHRpb25zLCBpbmRleCkge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkge1xuICAgICAgaW5kZXggPSB0aGlzLmNoaWxkcmVuXy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudDtcbiAgICB2YXIgY29tcG9uZW50TmFtZTsgLy8gSWYgY2hpbGQgaXMgYSBzdHJpbmcsIGNyZWF0ZSBjb21wb25lbnQgd2l0aCBvcHRpb25zXG5cbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRvVGl0bGVDYXNlKGNoaWxkKTtcbiAgICAgIHZhciBjb21wb25lbnRDbGFzc05hbWUgPSBvcHRpb25zLmNvbXBvbmVudENsYXNzIHx8IGNvbXBvbmVudE5hbWU7IC8vIFNldCBuYW1lIHRocm91Z2ggb3B0aW9uc1xuXG4gICAgICBvcHRpb25zLm5hbWUgPSBjb21wb25lbnROYW1lOyAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0ICYgZWxlbWVudCBmb3IgdGhpcyBjb250cm9scyBzZXRcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gLnBsYXllcl8sIHRoaXMgaXMgYSBwbGF5ZXJcblxuICAgICAgdmFyIENvbXBvbmVudENsYXNzID0gQ29tcG9uZW50LmdldENvbXBvbmVudChjb21wb25lbnRDbGFzc05hbWUpO1xuXG4gICAgICBpZiAoIUNvbXBvbmVudENsYXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBcIiArIGNvbXBvbmVudENsYXNzTmFtZSArIFwiIGRvZXMgbm90IGV4aXN0XCIpO1xuICAgICAgfSAvLyBkYXRhIHN0b3JlZCBkaXJlY3RseSBvbiB0aGUgdmlkZW9qcyBvYmplY3QgbWF5IGJlXG4gICAgICAvLyBtaXNpZGVudGlmaWVkIGFzIGEgY29tcG9uZW50IHRvIHJldGFpblxuICAgICAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCA0LnguIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbXBvbmVudCBjbGFzcyBjYW4gYmUgaW5zdGFudGlhdGVkLlxuXG5cbiAgICAgIGlmICh0eXBlb2YgQ29tcG9uZW50Q2xhc3MgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRDbGFzcyh0aGlzLnBsYXllcl8gfHwgdGhpcywgb3B0aW9ucyk7IC8vIGNoaWxkIGlzIGEgY29tcG9uZW50IGluc3RhbmNlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudCA9IGNoaWxkO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnQucGFyZW50Q29tcG9uZW50Xykge1xuICAgICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudF8ucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuXy5zcGxpY2UoaW5kZXgsIDAsIGNvbXBvbmVudCk7XG4gICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudF8gPSB0aGlzO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQuaWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuY2hpbGRJbmRleF9bY29tcG9uZW50LmlkKCldID0gY29tcG9uZW50O1xuICAgIH0gLy8gSWYgYSBuYW1lIHdhc24ndCB1c2VkIHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50LCBjaGVjayBpZiB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIG5hbWUgZnVuY3Rpb24gb2YgdGhlIGNvbXBvbmVudFxuXG5cbiAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBjb21wb25lbnQubmFtZSAmJiB0b1RpdGxlQ2FzZShjb21wb25lbnQubmFtZSgpKTtcblxuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLmNoaWxkTmFtZUluZGV4X1tjb21wb25lbnROYW1lXSA9IGNvbXBvbmVudDtcbiAgICAgIHRoaXMuY2hpbGROYW1lSW5kZXhfW3RvTG93ZXJDYXNlKGNvbXBvbmVudE5hbWUpXSA9IGNvbXBvbmVudDtcbiAgICB9IC8vIEFkZCB0aGUgVUkgb2JqZWN0J3MgZWxlbWVudCB0byB0aGUgY29udGFpbmVyIGRpdiAoYm94KVxuICAgIC8vIEhhdmluZyBhbiBlbGVtZW50IGlzIG5vdCByZXF1aXJlZFxuXG5cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5lbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb21wb25lbnQuZWwoKSkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmNvbnRlbnRFbCgpLmNoaWxkcmVuO1xuICAgICAgdmFyIHJlZk5vZGUgPSBjaGlsZE5vZGVzW2luZGV4XSB8fCBudWxsO1xuICAgICAgdGhpcy5jb250ZW50RWwoKS5pbnNlcnRCZWZvcmUoY29tcG9uZW50LmVsKCksIHJlZk5vZGUpO1xuICAgIH0gLy8gUmV0dXJuIHNvIGl0IGNhbiBzdG9yZWQgb24gcGFyZW50IG9iamVjdCBpZiBkZXNpcmVkLlxuXG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjaGlsZCBgQ29tcG9uZW50YCBmcm9tIHRoaXMgYENvbXBvbmVudGBzIGxpc3Qgb2YgY2hpbGRyZW4uIEFsc28gcmVtb3Zlc1xuICAgKiB0aGUgY2hpbGQgYENvbXBvbmVudGBzIGVsZW1lbnQgZnJvbSB0aGlzIGBDb21wb25lbnRgcyBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50XG4gICAqICAgICAgICBUaGUgY2hpbGQgYENvbXBvbmVudGAgdG8gcmVtb3ZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkKGNvbXBvbmVudCkge1xuICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgY29tcG9uZW50ID0gdGhpcy5nZXRDaGlsZChjb21wb25lbnQpO1xuICAgIH1cblxuICAgIGlmICghY29tcG9uZW50IHx8ICF0aGlzLmNoaWxkcmVuXykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZEZvdW5kID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gdGhpcy5jaGlsZHJlbl8ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuX1tpXSA9PT0gY29tcG9uZW50KSB7XG4gICAgICAgIGNoaWxkRm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuXy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hpbGRGb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnRfID0gbnVsbDtcbiAgICB0aGlzLmNoaWxkSW5kZXhfW2NvbXBvbmVudC5pZCgpXSA9IG51bGw7XG4gICAgdGhpcy5jaGlsZE5hbWVJbmRleF9bdG9UaXRsZUNhc2UoY29tcG9uZW50Lm5hbWUoKSldID0gbnVsbDtcbiAgICB0aGlzLmNoaWxkTmFtZUluZGV4X1t0b0xvd2VyQ2FzZShjb21wb25lbnQubmFtZSgpKV0gPSBudWxsO1xuICAgIHZhciBjb21wRWwgPSBjb21wb25lbnQuZWwoKTtcblxuICAgIGlmIChjb21wRWwgJiYgY29tcEVsLnBhcmVudE5vZGUgPT09IHRoaXMuY29udGVudEVsKCkpIHtcbiAgICAgIHRoaXMuY29udGVudEVsKCkucmVtb3ZlQ2hpbGQoY29tcG9uZW50LmVsKCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWRkIGFuZCBpbml0aWFsaXplIGRlZmF1bHQgY2hpbGQgYENvbXBvbmVudGBzIGJhc2VkIHVwb24gb3B0aW9ucy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaW5pdENoaWxkcmVuID0gZnVuY3Rpb24gaW5pdENoaWxkcmVuKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLm9wdGlvbnNfLmNoaWxkcmVuO1xuXG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAvLyBgdGhpc2AgaXMgYHBhcmVudGBcbiAgICAgIHZhciBwYXJlbnRPcHRpb25zID0gdGhpcy5vcHRpb25zXztcblxuICAgICAgdmFyIGhhbmRsZUFkZCA9IGZ1bmN0aW9uIGhhbmRsZUFkZChjaGlsZCkge1xuICAgICAgICB2YXIgbmFtZSA9IGNoaWxkLm5hbWU7XG4gICAgICAgIHZhciBvcHRzID0gY2hpbGQub3B0czsgLy8gQWxsb3cgb3B0aW9ucyBmb3IgY2hpbGRyZW4gdG8gYmUgc2V0IGF0IHRoZSBwYXJlbnQgb3B0aW9uc1xuICAgICAgICAvLyBlLmcuIHZpZGVvanMoaWQsIHsgY29udHJvbEJhcjogZmFsc2UgfSk7XG4gICAgICAgIC8vIGluc3RlYWQgb2YgdmlkZW9qcyhpZCwgeyBjaGlsZHJlbjogeyBjb250cm9sQmFyOiBmYWxzZSB9KTtcblxuICAgICAgICBpZiAocGFyZW50T3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3B0cyA9IHBhcmVudE9wdGlvbnNbbmFtZV07XG4gICAgICAgIH0gLy8gQWxsb3cgZm9yIGRpc2FibGluZyBkZWZhdWx0IGNvbXBvbmVudHNcbiAgICAgICAgLy8gZS5nLiBvcHRpb25zWydjaGlsZHJlbiddWydwb3N0ZXJJbWFnZSddID0gZmFsc2VcblxuXG4gICAgICAgIGlmIChvcHRzID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBBbGxvdyBvcHRpb25zIHRvIGJlIHBhc3NlZCBhcyBhIHNpbXBsZSBib29sZWFuIGlmIG5vIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgLy8gaXMgbmVjZXNzYXJ5LlxuXG5cbiAgICAgICAgaWYgKG9wdHMgPT09IHRydWUpIHtcbiAgICAgICAgICBvcHRzID0ge307XG4gICAgICAgIH0gLy8gV2UgYWxzbyB3YW50IHRvIHBhc3MgdGhlIG9yaWdpbmFsIHBsYXllciBvcHRpb25zXG4gICAgICAgIC8vIHRvIGVhY2ggY29tcG9uZW50IGFzIHdlbGwgc28gdGhleSBkb24ndCBuZWVkIHRvXG4gICAgICAgIC8vIHJlYWNoIGJhY2sgaW50byB0aGUgcGxheWVyIGZvciBvcHRpb25zIGxhdGVyLlxuXG5cbiAgICAgICAgb3B0cy5wbGF5ZXJPcHRpb25zID0gX3RoaXMub3B0aW9uc18ucGxheWVyT3B0aW9uczsgLy8gQ3JlYXRlIGFuZCBhZGQgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgICAgLy8gQWRkIGEgZGlyZWN0IHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgYnkgbmFtZSBvbiB0aGUgcGFyZW50IGluc3RhbmNlLlxuICAgICAgICAvLyBJZiB0d28gb2YgdGhlIHNhbWUgY29tcG9uZW50IGFyZSB1c2VkLCBkaWZmZXJlbnQgbmFtZXMgc2hvdWxkIGJlIHN1cHBsaWVkXG4gICAgICAgIC8vIGZvciBlYWNoXG5cbiAgICAgICAgdmFyIG5ld0NoaWxkID0gX3RoaXMuYWRkQ2hpbGQobmFtZSwgb3B0cyk7XG5cbiAgICAgICAgaWYgKG5ld0NoaWxkKSB7XG4gICAgICAgICAgX3RoaXNbbmFtZV0gPSBuZXdDaGlsZDtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gQWxsb3cgZm9yIGFuIGFycmF5IG9mIGNoaWxkcmVuIGRldGFpbHMgdG8gcGFzc2VkIGluIHRoZSBvcHRpb25zXG5cblxuICAgICAgdmFyIHdvcmtpbmdDaGlsZHJlbjtcbiAgICAgIHZhciBUZWNoID0gQ29tcG9uZW50LmdldENvbXBvbmVudCgnVGVjaCcpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgd29ya2luZ0NoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3b3JraW5nQ2hpbGRyZW4gPSBPYmplY3Qua2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHdvcmtpbmdDaGlsZHJlbiAvLyBjaGlsZHJlbiB0aGF0IGFyZSBpbiB0aGlzLm9wdGlvbnNfIGJ1dCBhbHNvIGluIHdvcmtpbmdDaGlsZHJlbiAgd291bGRcbiAgICAgIC8vIGdpdmUgdXMgZXh0cmEgY2hpbGRyZW4gd2UgZG8gbm90IHdhbnQuIFNvLCB3ZSB3YW50IHRvIGZpbHRlciB0aGVtIG91dC5cbiAgICAgIC5jb25jYXQoT2JqZWN0LmtleXModGhpcy5vcHRpb25zXykuZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gIXdvcmtpbmdDaGlsZHJlbi5zb21lKGZ1bmN0aW9uICh3Y2hpbGQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHdjaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZCA9PT0gd2NoaWxkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGlsZCA9PT0gd2NoaWxkLm5hbWU7XG4gICAgICAgIH0pO1xuICAgICAgfSkpLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgdmFyIG5hbWU7XG4gICAgICAgIHZhciBvcHRzO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbmFtZSA9IGNoaWxkO1xuICAgICAgICAgIG9wdHMgPSBjaGlsZHJlbltuYW1lXSB8fCBfdGhpcy5vcHRpb25zX1tuYW1lXSB8fCB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lID0gY2hpbGQubmFtZTtcbiAgICAgICAgICBvcHRzID0gY2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgb3B0czogb3B0c1xuICAgICAgICB9O1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAvLyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGNoaWxkLm5hbWUgaXNuJ3QgaW4gdGhlIHRlY2hPcmRlciBzaW5jZVxuICAgICAgICAvLyB0ZWNocyBhcmUgcmVnaXN0ZXJkIGFzIENvbXBvbmVudHMgYnV0IGNhbid0IGFyZW4ndCBjb21wYXRpYmxlXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9pc3N1ZXMvMjc3MlxuICAgICAgICB2YXIgYyA9IENvbXBvbmVudC5nZXRDb21wb25lbnQoY2hpbGQub3B0cy5jb21wb25lbnRDbGFzcyB8fCB0b1RpdGxlQ2FzZShjaGlsZC5uYW1lKSk7XG4gICAgICAgIHJldHVybiBjICYmICFUZWNoLmlzVGVjaChjKTtcbiAgICAgIH0pLmZvckVhY2goaGFuZGxlQWRkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgZGVmYXVsdCBET00gY2xhc3MgbmFtZS4gU2hvdWxkIGJlIG92ZXJyaWRlbiBieSBzdWItY29tcG9uZW50cy5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gY2xhc3MgbmFtZSBmb3IgdGhpcyBvYmplY3QuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICAvLyBDaGlsZCBjbGFzc2VzIGNhbiBpbmNsdWRlIGEgZnVuY3Rpb24gdGhhdCBkb2VzOlxuICAgIC8vIHJldHVybiAnQ0xBU1MgTkFNRScgKyB0aGlzLl9zdXBlcigpO1xuICAgIHJldHVybiAnJztcbiAgfVxuICAvKipcbiAgICogQmluZCBhIGxpc3RlbmVyIHRvIHRoZSBjb21wb25lbnQncyByZWFkeSBzdGF0ZS5cbiAgICogRGlmZmVyZW50IGZyb20gZXZlbnQgbGlzdGVuZXJzIGluIHRoYXQgaWYgdGhlIHJlYWR5IGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkXG4gICAqIGl0IHdpbGwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbXBvbmVudH1cbiAgICogICAgICAgICBSZXR1cm5zIGl0c2VsZjsgbWV0aG9kIGNhbiBiZSBjaGFpbmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGZuLCBzeW5jKSB7XG4gICAgaWYgKHN5bmMgPT09IHZvaWQgMCkge1xuICAgICAgc3luYyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSZWFkeV8pIHtcbiAgICAgIHRoaXMucmVhZHlRdWV1ZV8gPSB0aGlzLnJlYWR5UXVldWVfIHx8IFtdO1xuICAgICAgdGhpcy5yZWFkeVF1ZXVlXy5wdXNoKGZuKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgZm4uY2FsbCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkgYnkgZGVmYXVsdCBmb3IgY29uc2lzdGVuY3lcbiAgICAgIHRoaXMuc2V0VGltZW91dChmbiwgMSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFsbCB0aGUgcmVhZHkgbGlzdGVuZXJzIGZvciB0aGlzIGBDb21wb25lbnRgLlxuICAgKlxuICAgKiBAZmlyZXMgQ29tcG9uZW50I3JlYWR5XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRyaWdnZXJSZWFkeSA9IGZ1bmN0aW9uIHRyaWdnZXJSZWFkeSgpIHtcbiAgICB0aGlzLmlzUmVhZHlfID0gdHJ1ZTsgLy8gRW5zdXJlIHJlYWR5IGlzIHRyaWdnZXJlZCBhc3luY2hyb25vdXNseVxuXG4gICAgdGhpcy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWFkeVF1ZXVlID0gdGhpcy5yZWFkeVF1ZXVlXzsgLy8gUmVzZXQgUmVhZHkgUXVldWVcblxuICAgICAgdGhpcy5yZWFkeVF1ZXVlXyA9IFtdO1xuXG4gICAgICBpZiAocmVhZHlRdWV1ZSAmJiByZWFkeVF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVhZHlRdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIGZuLmNhbGwodGhpcyk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgfSAvLyBBbGxvdyBmb3IgdXNpbmcgZXZlbnQgbGlzdGVuZXJzIGFsc29cblxuICAgICAgLyoqXG4gICAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIGBDb21wb25lbnRgIGlzIHJlYWR5LlxuICAgICAgICpcbiAgICAgICAqIEBldmVudCBDb21wb25lbnQjcmVhZHlcbiAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAqL1xuXG5cbiAgICAgIHRoaXMudHJpZ2dlcigncmVhZHknKTtcbiAgICB9LCAxKTtcbiAgfVxuICAvKipcbiAgICogRmluZCBhIHNpbmdsZSBET00gZWxlbWVudCBtYXRjaGluZyBhIGBzZWxlY3RvcmAuIFRoaXMgY2FuIGJlIHdpdGhpbiB0aGUgYENvbXBvbmVudGBzXG4gICAqIGBjb250ZW50RWwoKWAgb3IgYW5vdGhlciBjdXN0b20gY29udGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqICAgICAgICBBIHZhbGlkIENTUyBzZWxlY3Rvciwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gYHF1ZXJ5U2VsZWN0b3JgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfSBbY29udGV4dD10aGlzLmNvbnRlbnRFbCgpXVxuICAgKiAgICAgICAgQSBET00gZWxlbWVudCB3aXRoaW4gd2hpY2ggdG8gcXVlcnkuIENhbiBhbHNvIGJlIGEgc2VsZWN0b3Igc3RyaW5nIGluXG4gICAqICAgICAgICB3aGljaCBjYXNlIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IHdpbGwgZ2V0IHVzZWQgYXMgY29udGV4dC4gSWZcbiAgICogICAgICAgIG1pc3NpbmcgYHRoaXMuY29udGVudEVsKClgIGdldHMgdXNlZC4gSWYgIGB0aGlzLmNvbnRlbnRFbCgpYCByZXR1cm5zXG4gICAqICAgICAgICBub3RoaW5nIGl0IGZhbGxzIGJhY2sgdG8gYGRvY3VtZW50YC5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudHxudWxsfVxuICAgKiAgICAgICAgIHRoZSBkb20gZWxlbWVudCB0aGF0IHdhcyBmb3VuZCwgb3IgbnVsbFxuICAgKlxuICAgKiBAc2VlIFtJbmZvcm1hdGlvbiBvbiBDU1MgU2VsZWN0b3JzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9HdWlkZS9DU1MvR2V0dGluZ19TdGFydGVkL1NlbGVjdG9ycylcbiAgICovXG4gIDtcblxuICBfcHJvdG8uJCA9IGZ1bmN0aW9uICQkMShzZWxlY3RvciwgY29udGV4dCkge1xuICAgIHJldHVybiAkKHNlbGVjdG9yLCBjb250ZXh0IHx8IHRoaXMuY29udGVudEVsKCkpO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgRE9NIGVsZW1lbnQgbWF0Y2hpbmcgYSBgc2VsZWN0b3JgLiBUaGlzIGNhbiBiZSB3aXRoaW4gdGhlIGBDb21wb25lbnRgc1xuICAgKiBgY29udGVudEVsKClgIG9yIGFub3RoZXIgY3VzdG9tIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiAgICAgICAgQSB2YWxpZCBDU1Mgc2VsZWN0b3IsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGBxdWVyeVNlbGVjdG9yQWxsYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gW2NvbnRleHQ9dGhpcy5jb250ZW50RWwoKV1cbiAgICogICAgICAgIEEgRE9NIGVsZW1lbnQgd2l0aGluIHdoaWNoIHRvIHF1ZXJ5LiBDYW4gYWxzbyBiZSBhIHNlbGVjdG9yIHN0cmluZyBpblxuICAgKiAgICAgICAgd2hpY2ggY2FzZSB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCB3aWxsIGdldCB1c2VkIGFzIGNvbnRleHQuIElmXG4gICAqICAgICAgICBtaXNzaW5nIGB0aGlzLmNvbnRlbnRFbCgpYCBnZXRzIHVzZWQuIElmICBgdGhpcy5jb250ZW50RWwoKWAgcmV0dXJuc1xuICAgKiAgICAgICAgbm90aGluZyBpdCBmYWxscyBiYWNrIHRvIGBkb2N1bWVudGAuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGVMaXN0fVxuICAgKiAgICAgICAgIGEgbGlzdCBvZiBkb20gZWxlbWVudHMgdGhhdCB3ZXJlIGZvdW5kXG4gICAqXG4gICAqIEBzZWUgW0luZm9ybWF0aW9uIG9uIENTUyBTZWxlY3RvcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0d1aWRlL0NTUy9HZXR0aW5nX1N0YXJ0ZWQvU2VsZWN0b3JzKVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by4kJCA9IGZ1bmN0aW9uICQkJDEoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gJCQoc2VsZWN0b3IsIGNvbnRleHQgfHwgdGhpcy5jb250ZW50RWwoKSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29tcG9uZW50J3MgZWxlbWVudCBoYXMgYSBDU1MgY2xhc3MgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzVG9DaGVja1xuICAgKiAgICAgICAgQ1NTIGNsYXNzIG5hbWUgdG8gY2hlY2suXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgLSBUcnVlIGlmIHRoZSBgQ29tcG9uZW50YCBoYXMgdGhlIGNsYXNzLlxuICAgKiAgICAgICAgIC0gRmFsc2UgaWYgdGhlIGBDb21wb25lbnRgIGRvZXMgbm90IGhhdmUgdGhlIGNsYXNzYFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzJDEoY2xhc3NUb0NoZWNrKSB7XG4gICAgcmV0dXJuIGhhc0NsYXNzKHRoaXMuZWxfLCBjbGFzc1RvQ2hlY2spO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBDU1MgY2xhc3MgbmFtZSB0byB0aGUgYENvbXBvbmVudGBzIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc1RvQWRkXG4gICAqICAgICAgICBDU1MgY2xhc3MgbmFtZSB0byBhZGRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyQxKGNsYXNzVG9BZGQpIHtcbiAgICBhZGRDbGFzcyh0aGlzLmVsXywgY2xhc3NUb0FkZCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIENTUyBjbGFzcyBuYW1lIGZyb20gdGhlIGBDb21wb25lbnRgcyBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NUb1JlbW92ZVxuICAgKiAgICAgICAgQ1NTIGNsYXNzIG5hbWUgdG8gcmVtb3ZlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3MkMShjbGFzc1RvUmVtb3ZlKSB7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5lbF8sIGNsYXNzVG9SZW1vdmUpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgb3IgcmVtb3ZlIGEgQ1NTIGNsYXNzIG5hbWUgZnJvbSB0aGUgY29tcG9uZW50J3MgZWxlbWVudC5cbiAgICogLSBgY2xhc3NUb1RvZ2dsZWAgZ2V0cyBhZGRlZCB3aGVuIHtAbGluayBDb21wb25lbnQjaGFzQ2xhc3N9IHdvdWxkIHJldHVybiBmYWxzZS5cbiAgICogLSBgY2xhc3NUb1RvZ2dsZWAgZ2V0cyByZW1vdmVkIHdoZW4ge0BsaW5rIENvbXBvbmVudCNoYXNDbGFzc30gd291bGQgcmV0dXJuIHRydWUuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gY2xhc3NUb1RvZ2dsZVxuICAgKiAgICAgICAgIFRoZSBjbGFzcyB0byBhZGQgb3IgcmVtb3ZlIGJhc2VkIG9uIChAbGluayBDb21wb25lbnQjaGFzQ2xhc3N9XG4gICAqXG4gICAqIEBwYXJhbSAge2Jvb2xlYW58RG9tfnByZWRpY2F0ZX0gW3ByZWRpY2F0ZV1cbiAgICogICAgICAgICBBbiB7QGxpbmsgRG9tfnByZWRpY2F0ZX0gZnVuY3Rpb24gb3IgYSBib29sZWFuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRvZ2dsZUNsYXNzID0gZnVuY3Rpb24gdG9nZ2xlQ2xhc3MkMShjbGFzc1RvVG9nZ2xlLCBwcmVkaWNhdGUpIHtcbiAgICB0b2dnbGVDbGFzcyh0aGlzLmVsXywgY2xhc3NUb1RvZ2dsZSwgcHJlZGljYXRlKTtcbiAgfVxuICAvKipcbiAgICogU2hvdyB0aGUgYENvbXBvbmVudGBzIGVsZW1lbnQgaWYgaXQgaXMgaGlkZGVuIGJ5IHJlbW92aW5nIHRoZVxuICAgKiAndmpzLWhpZGRlbicgY2xhc3MgbmFtZSBmcm9tIGl0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtaGlkZGVuJyk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZGUgdGhlIGBDb21wb25lbnRgcyBlbGVtZW50IGlmIGl0IGlzIGN1cnJlbnRseSBzaG93aW5nIGJ5IGFkZGluZyB0aGVcbiAgICogJ3Zqcy1oaWRkZW5gIGNsYXNzIG5hbWUgdG8gaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1oaWRkZW4nKTtcbiAgfVxuICAvKipcbiAgICogTG9jayBhIGBDb21wb25lbnRgcyBlbGVtZW50IGluIGl0cyB2aXNpYmxlIHN0YXRlIGJ5IGFkZGluZyB0aGUgJ3Zqcy1sb2NrLXNob3dpbmcnXG4gICAqIGNsYXNzIG5hbWUgdG8gaXQuIFVzZWQgZHVyaW5nIGZhZGVJbi9mYWRlT3V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5sb2NrU2hvd2luZyA9IGZ1bmN0aW9uIGxvY2tTaG93aW5nKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1sb2NrLXNob3dpbmcnKTtcbiAgfVxuICAvKipcbiAgICogVW5sb2NrIGEgYENvbXBvbmVudGBzIGVsZW1lbnQgZnJvbSBpdHMgdmlzaWJsZSBzdGF0ZSBieSByZW1vdmluZyB0aGUgJ3Zqcy1sb2NrLXNob3dpbmcnXG4gICAqIGNsYXNzIG5hbWUgZnJvbSBpdC4gVXNlZCBkdXJpbmcgZmFkZUluL2ZhZGVPdXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVubG9ja1Nob3dpbmcgPSBmdW5jdGlvbiB1bmxvY2tTaG93aW5nKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1sb2NrLXNob3dpbmcnKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgb24gdGhlIGBDb21wb25lbnRgcyBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlXG4gICAqICAgICAgICBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cbiAgICogICAgICAgICAtIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHRoYXQgd2FzIGFza2VkIGZvci5cbiAgICogICAgICAgICAtIENhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb24gc29tZSBicm93c2VycyBpZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0XG4gICAqICAgICAgICAgICBvciBoYXMgbm8gdmFsdWVcbiAgICogICAgICAgICAtIE1vc3QgYnJvd3NlcnMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgYXR0aWJ1dGUgZG9lcyBub3QgZXhpc3Qgb3IgaGFzXG4gICAqICAgICAgICAgICBubyB2YWx1ZS5cbiAgICpcbiAgICogQHNlZSBbRE9NIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0QXR0cmlidXRlfVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUkMShhdHRyaWJ1dGUpIHtcbiAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRoaXMuZWxfLCBhdHRyaWJ1dGUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBvbiB0aGUgYENvbXBvbmVudGAncyBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogICAgICAgIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiAgICAgICAgVmFsdWUgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdG8uXG4gICAqXG4gICAqIEBzZWUgW0RPTSBBUElde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3NldEF0dHJpYnV0ZX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gc2V0QXR0cmlidXRlJDEoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHNldEF0dHJpYnV0ZSh0aGlzLmVsXywgYXR0cmlidXRlLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgYENvbXBvbmVudGBzIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVcbiAgICogICAgICAgIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byByZW1vdmUuXG4gICAqXG4gICAqIEBzZWUgW0RPTSBBUElde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlbW92ZUF0dHJpYnV0ZX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlJDEoYXR0cmlidXRlKSB7XG4gICAgcmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxfLCBhdHRyaWJ1dGUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSB3aWR0aCBvZiB0aGUgY29tcG9uZW50IGJhc2VkIHVwb24gdGhlIENTUyBzdHlsZXMuXG4gICAqIFNlZSB7QGxpbmsgQ29tcG9uZW50I2RpbWVuc2lvbn0gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW251bV1cbiAgICogICAgICAgIFRoZSB3aWR0aCB0aGF0IHlvdSB3YW50IHRvIHNldCBwb3N0Zml4ZWQgd2l0aCAnJScsICdweCcgb3Igbm90aGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcExpc3RlbmVyc11cbiAgICogICAgICAgIFNraXAgdGhlIGNvbXBvbmVudHJlc2l6ZSBldmVudCB0cmlnZ2VyXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcnxzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIHdpZHRoIHdoZW4gZ2V0dGluZywgemVybyBpZiB0aGVyZSBpcyBubyB3aWR0aC4gQ2FuIGJlIGEgc3RyaW5nXG4gICAqICAgICAgICAgICBwb3N0cGl4ZWQgd2l0aCAnJScgb3IgJ3B4Jy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2lkdGggPSBmdW5jdGlvbiB3aWR0aChudW0sIHNraXBMaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5kaW1lbnNpb24oJ3dpZHRoJywgbnVtLCBza2lwTGlzdGVuZXJzKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgYmFzZWQgdXBvbiB0aGUgQ1NTIHN0eWxlcy5cbiAgICogU2VlIHtAbGluayBDb21wb25lbnQjZGltZW5zaW9ufSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbbnVtXVxuICAgKiAgICAgICAgVGhlIGhlaWdodCB0aGF0IHlvdSB3YW50IHRvIHNldCBwb3N0Zml4ZWQgd2l0aCAnJScsICdweCcgb3Igbm90aGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcExpc3RlbmVyc11cbiAgICogICAgICAgIFNraXAgdGhlIGNvbXBvbmVudHJlc2l6ZSBldmVudCB0cmlnZ2VyXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcnxzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIHdpZHRoIHdoZW4gZ2V0dGluZywgemVybyBpZiB0aGVyZSBpcyBubyB3aWR0aC4gQ2FuIGJlIGEgc3RyaW5nXG4gICAqICAgICAgICAgcG9zdHBpeGVkIHdpdGggJyUnIG9yICdweCcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhlaWdodCA9IGZ1bmN0aW9uIGhlaWdodChudW0sIHNraXBMaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5kaW1lbnNpb24oJ2hlaWdodCcsIG51bSwgc2tpcExpc3RlbmVycyk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBib3RoIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBgQ29tcG9uZW50YCBlbGVtZW50IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlcnxzdHJpbmd9IHdpZHRoXG4gICAqICAgICAgICAgV2lkdGggdG8gc2V0IHRoZSBgQ29tcG9uZW50YHMgZWxlbWVudCB0by5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfHN0cmluZ30gaGVpZ2h0XG4gICAqICAgICAgICAgSGVpZ2h0IHRvIHNldCB0aGUgYENvbXBvbmVudGBzIGVsZW1lbnQgdG8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmRpbWVuc2lvbnMgPSBmdW5jdGlvbiBkaW1lbnNpb25zKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAvLyBTa2lwIGNvbXBvbmVudHJlc2l6ZSBsaXN0ZW5lcnMgb24gd2lkdGggZm9yIG9wdGltaXphdGlvblxuICAgIHRoaXMud2lkdGgod2lkdGgsIHRydWUpO1xuICAgIHRoaXMuaGVpZ2h0KGhlaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgd2lkdGggb3IgaGVpZ2h0IG9mIHRoZSBgQ29tcG9uZW50YCBlbGVtZW50LiBUaGlzIGlzIHRoZSBzaGFyZWQgY29kZVxuICAgKiBmb3IgdGhlIHtAbGluayBDb21wb25lbnQjd2lkdGh9IGFuZCB7QGxpbmsgQ29tcG9uZW50I2hlaWdodH0uXG4gICAqXG4gICAqIFRoaW5ncyB0byBrbm93OlxuICAgKiAtIElmIHRoZSB3aWR0aCBvciBoZWlnaHQgaW4gYW4gbnVtYmVyIHRoaXMgd2lsbCByZXR1cm4gdGhlIG51bWJlciBwb3N0Zml4ZWQgd2l0aCAncHgnLlxuICAgKiAtIElmIHRoZSB3aWR0aC9oZWlnaHQgaXMgYSBwZXJjZW50IHRoaXMgd2lsbCByZXR1cm4gdGhlIHBlcmNlbnQgcG9zdGZpeGVkIHdpdGggJyUnXG4gICAqIC0gSGlkZGVuIGVsZW1lbnRzIGhhdmUgYSB3aWR0aCBvZiAwIHdpdGggYHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlYC4gVGhpcyBmdW5jdGlvblxuICAgKiAgIGRlZmF1bHRzIHRvIHRoZSBgQ29tcG9uZW50YHMgYHN0eWxlLndpZHRoYCBhbmQgZmFsbHMgYmFjayB0byBgd2luZG93LmdldENvbXB1dGVkU3R5bGVgLlxuICAgKiAgIFNlZSBbdGhpc117QGxpbmsgaHR0cDovL3d3dy5mb2xpb3Rlay5jb20vZGV2YmxvZy9nZXR0aW5nLXRoZS13aWR0aC1vZi1hLWhpZGRlbi1lbGVtZW50LXdpdGgtanF1ZXJ5LXVzaW5nLXdpZHRoL31cbiAgICogICBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiAtIElmIHlvdSB3YW50IHRoZSBjb21wdXRlZCBzdHlsZSBvZiB0aGUgY29tcG9uZW50LCB1c2Uge0BsaW5rIENvbXBvbmVudCNjdXJyZW50V2lkdGh9XG4gICAqICAgYW5kIHtAbGluayB7Q29tcG9uZW50I2N1cnJlbnRIZWlnaHR9XG4gICAqXG4gICAqIEBmaXJlcyBDb21wb25lbnQjY29tcG9uZW50cmVzaXplXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3aWR0aE9ySGVpZ2h0XG4gICA4ICAgICAgICAnd2lkdGgnIG9yICdoZWlnaHQnXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlcnxzdHJpbmd9IFtudW1dXG4gICA4ICAgICAgICAgTmV3IGRpbWVuc2lvblxuICAgKlxuICAgKiBAcGFyYW0gIHtib29sZWFufSBbc2tpcExpc3RlbmVyc11cbiAgICogICAgICAgICBTa2lwIGNvbXBvbmVudHJlc2l6ZSBldmVudCB0cmlnZ2VyXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZGltZW5zaW9uIHdoZW4gZ2V0dGluZyBvciAwIGlmIHVuc2V0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmRpbWVuc2lvbiA9IGZ1bmN0aW9uIGRpbWVuc2lvbih3aWR0aE9ySGVpZ2h0LCBudW0sIHNraXBMaXN0ZW5lcnMpIHtcbiAgICBpZiAobnVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNldCB0byB6ZXJvIGlmIG51bGwgb3IgbGl0ZXJhbGx5IE5hTiAoTmFOICE9PSBOYU4pXG4gICAgICBpZiAobnVtID09PSBudWxsIHx8IG51bSAhPT0gbnVtKSB7XG4gICAgICAgIG51bSA9IDA7XG4gICAgICB9IC8vIENoZWNrIGlmIHVzaW5nIGNzcyB3aWR0aC9oZWlnaHQgKCUgb3IgcHgpIGFuZCBhZGp1c3RcblxuXG4gICAgICBpZiAoKCcnICsgbnVtKS5pbmRleE9mKCclJykgIT09IC0xIHx8ICgnJyArIG51bSkuaW5kZXhPZigncHgnKSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5lbF8uc3R5bGVbd2lkdGhPckhlaWdodF0gPSBudW07XG4gICAgICB9IGVsc2UgaWYgKG51bSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuZWxfLnN0eWxlW3dpZHRoT3JIZWlnaHRdID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVsXy5zdHlsZVt3aWR0aE9ySGVpZ2h0XSA9IG51bSArICdweCc7XG4gICAgICB9IC8vIHNraXBMaXN0ZW5lcnMgYWxsb3dzIHVzIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlIHJlc2l6ZSBldmVudCB3aGVuIHNldHRpbmcgYm90aCB3aWR0aCBhbmQgaGVpZ2h0XG5cblxuICAgICAgaWYgKCFza2lwTGlzdGVuZXJzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIGNvbXBvbmVudCBpcyByZXNpemVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgQ29tcG9uZW50I2NvbXBvbmVudHJlc2l6ZVxuICAgICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2NvbXBvbmVudHJlc2l6ZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBOb3Qgc2V0dGluZyBhIHZhbHVlLCBzbyBnZXR0aW5nIGl0XG4gICAgLy8gTWFrZSBzdXJlIGVsZW1lbnQgZXhpc3RzXG5cblxuICAgIGlmICghdGhpcy5lbF8pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gLy8gR2V0IGRpbWVuc2lvbiB2YWx1ZSBmcm9tIHN0eWxlXG5cblxuICAgIHZhciB2YWwgPSB0aGlzLmVsXy5zdHlsZVt3aWR0aE9ySGVpZ2h0XTtcbiAgICB2YXIgcHhJbmRleCA9IHZhbC5pbmRleE9mKCdweCcpO1xuXG4gICAgaWYgKHB4SW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBSZXR1cm4gdGhlIHBpeGVsIHZhbHVlIHdpdGggbm8gJ3B4J1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbC5zbGljZSgwLCBweEluZGV4KSwgMTApO1xuICAgIH0gLy8gTm8gcHggc28gdXNpbmcgJSBvciBubyBzdHlsZSB3YXMgc2V0LCBzbyBmYWxsaW5nIGJhY2sgdG8gb2Zmc2V0V2lkdGgvaGVpZ2h0XG4gICAgLy8gSWYgY29tcG9uZW50IGhhcyBkaXNwbGF5Om5vbmUsIG9mZnNldCB3aWxsIHJldHVybiAwXG4gICAgLy8gVE9ETzogaGFuZGxlIGRpc3BsYXk6bm9uZSBhbmQgbm8gZGltZW5zaW9uIHN0eWxlIHVzaW5nIHB4XG5cblxuICAgIHJldHVybiBwYXJzZUludCh0aGlzLmVsX1snb2Zmc2V0JyArIHRvVGl0bGVDYXNlKHdpZHRoT3JIZWlnaHQpXSwgMTApO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXB1dGVkIHdpZHRoIG9yIHRoZSBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudCdzIGVsZW1lbnQuXG4gICAqXG4gICAqIFVzZXMgYHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoT3JIZWlnaHRcbiAgICogICAgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgJ3dpZHRoJyBvciAnaGVpZ2h0Jy4gV2hpY2hldmVyIG9uZSB5b3Ugd2FudCB0byBnZXQuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZGltZW5zaW9uIHRoYXQgZ2V0cyBhc2tlZCBmb3Igb3IgMCBpZiBub3RoaW5nIHdhcyBzZXRcbiAgICogICAgICAgICBmb3IgdGhhdCBkaW1lbnNpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmN1cnJlbnREaW1lbnNpb24gPSBmdW5jdGlvbiBjdXJyZW50RGltZW5zaW9uKHdpZHRoT3JIZWlnaHQpIHtcbiAgICB2YXIgY29tcHV0ZWRXaWR0aE9ySGVpZ2h0ID0gMDtcblxuICAgIGlmICh3aWR0aE9ySGVpZ2h0ICE9PSAnd2lkdGgnICYmIHdpZHRoT3JIZWlnaHQgIT09ICdoZWlnaHQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1cnJlbnREaW1lbnNpb24gb25seSBhY2NlcHRzIHdpZHRoIG9yIGhlaWdodCB2YWx1ZScpO1xuICAgIH1cblxuICAgIGNvbXB1dGVkV2lkdGhPckhlaWdodCA9IGNvbXB1dGVkU3R5bGUodGhpcy5lbF8sIHdpZHRoT3JIZWlnaHQpOyAvLyByZW1vdmUgJ3B4JyBmcm9tIHZhcmlhYmxlIGFuZCBwYXJzZSBhcyBpbnRlZ2VyXG5cbiAgICBjb21wdXRlZFdpZHRoT3JIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkV2lkdGhPckhlaWdodCk7IC8vIGlmIHRoZSBjb21wdXRlZCB2YWx1ZSBpcyBzdGlsbCAwLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGJyb3dzZXIgaXMgbHlpbmdcbiAgICAvLyBhbmQgd2Ugd2FudCB0byBjaGVjayB0aGUgb2Zmc2V0IHZhbHVlcy5cbiAgICAvLyBUaGlzIGNvZGUgYWxzbyBydW5zIHdoZXJldmVyIGdldENvbXB1dGVkU3R5bGUgZG9lc24ndCBleGlzdC5cblxuICAgIGlmIChjb21wdXRlZFdpZHRoT3JIZWlnaHQgPT09IDAgfHwgaXNOYU4oY29tcHV0ZWRXaWR0aE9ySGVpZ2h0KSkge1xuICAgICAgdmFyIHJ1bGUgPSBcIm9mZnNldFwiICsgdG9UaXRsZUNhc2Uod2lkdGhPckhlaWdodCk7XG4gICAgICBjb21wdXRlZFdpZHRoT3JIZWlnaHQgPSB0aGlzLmVsX1tydWxlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcHV0ZWRXaWR0aE9ySGVpZ2h0O1xuICB9XG4gIC8qKlxuICAgKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBvZiB0aGUgYENvbXBvbmVudGBzXG4gICAqIGNvbXB1dGVkIHN0eWxlLiBVc2VzIGB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZWAuXG4gICAqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IENvbXBvbmVudH5EaW1lbnNpb25PYmplY3RcbiAgICpcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoXG4gICAqICAgICAgICAgICBUaGUgd2lkdGggb2YgdGhlIGBDb21wb25lbnRgcyBjb21wdXRlZCBzdHlsZS5cbiAgICpcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodFxuICAgKiAgICAgICAgICAgVGhlIGhlaWdodCBvZiB0aGUgYENvbXBvbmVudGBzIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cblxuICAvKipcbiAgICogR2V0IGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGNvbXB1dGVkIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBlbGVtZW50LlxuICAgKlxuICAgKiBVc2VzIGB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbXBvbmVudH5EaW1lbnNpb25PYmplY3R9XG4gICAqICAgICAgICAgVGhlIGNvbXB1dGVkIGRpbWVuc2lvbnMgb2YgdGhlIGNvbXBvbmVudCdzIGVsZW1lbnQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmN1cnJlbnREaW1lbnNpb25zID0gZnVuY3Rpb24gY3VycmVudERpbWVuc2lvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLmN1cnJlbnREaW1lbnNpb24oJ3dpZHRoJyksXG4gICAgICBoZWlnaHQ6IHRoaXMuY3VycmVudERpbWVuc2lvbignaGVpZ2h0JylcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXB1dGVkIHdpZHRoIG9mIHRoZSBjb21wb25lbnQncyBlbGVtZW50LlxuICAgKlxuICAgKiBVc2VzIGB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgY29tcHV0ZWQgd2lkdGggb2YgdGhlIGNvbXBvbmVudCdzIGVsZW1lbnQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmN1cnJlbnRXaWR0aCA9IGZ1bmN0aW9uIGN1cnJlbnRXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RGltZW5zaW9uKCd3aWR0aCcpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXB1dGVkIGhlaWdodCBvZiB0aGUgY29tcG9uZW50J3MgZWxlbWVudC5cbiAgICpcbiAgICogVXNlcyBgd2luZG93LmdldENvbXB1dGVkU3R5bGVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIGNvbXB1dGVkIGhlaWdodCBvZiB0aGUgY29tcG9uZW50J3MgZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3VycmVudEhlaWdodCA9IGZ1bmN0aW9uIGN1cnJlbnRIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudERpbWVuc2lvbignaGVpZ2h0Jyk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZm9jdXMgdG8gdGhpcyBjb21wb25lbnRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZm9jdXMgPSBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICB0aGlzLmVsXy5mb2N1cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGZvY3VzIGZyb20gdGhpcyBjb21wb25lbnRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmx1ciA9IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgdGhpcy5lbF8uYmx1cigpO1xuICB9XG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgQ29tcG9uZW50IHJlY2VpdmVzIGEgYGtleWRvd25gIGV2ZW50IHdoaWNoIGl0IGRvZXMgbm90IHByb2Nlc3MsXG4gICAqICBpdCBwYXNzZXMgdGhlIGV2ZW50IHRvIHRoZSBQbGF5ZXIgZm9yIGhhbmRsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfKSB7XG4gICAgICAvLyBXZSBvbmx5IHN0b3AgcHJvcGFnYXRpb24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdW5oYW5kbGVkIGV2ZW50cyB0byBmYWxsXG4gICAgICAvLyBiYWNrIHRvIHRoZSBicm93c2VyLlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnBsYXllcl8uaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBNYW55IGNvbXBvbmVudHMgdXNlZCB0byBoYXZlIGEgYGhhbmRsZUtleVByZXNzYCBtZXRob2QsIHdoaWNoIHdhcyBwb29ybHlcbiAgICogbmFtZWQgYmVjYXVzZSBpdCBsaXN0ZW5lZCB0byBhIGBrZXlkb3duYCBldmVudC4gVGhpcyBtZXRob2QgbmFtZSBub3dcbiAgICogZGVsZWdhdGVzIHRvIGBoYW5kbGVLZXlEb3duYC4gVGhpcyBtZWFucyBhbnlvbmUgY2FsbGluZyBgaGFuZGxlS2V5UHJlc3NgXG4gICAqIHdpbGwgbm90IHNlZSB0aGVpciBtZXRob2QgY2FsbHMgc3RvcCB3b3JraW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVLZXlQcmVzcyA9IGZ1bmN0aW9uIGhhbmRsZUtleVByZXNzKGV2ZW50KSB7XG4gICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuICAvKipcbiAgICogRW1pdCBhICd0YXAnIGV2ZW50cyB3aGVuIHRvdWNoIGV2ZW50IHN1cHBvcnQgZ2V0cyBkZXRlY3RlZC4gVGhpcyBnZXRzIHVzZWQgdG9cbiAgICogc3VwcG9ydCB0b2dnbGluZyB0aGUgY29udHJvbHMgdGhyb3VnaCBhIHRhcCBvbiB0aGUgdmlkZW8uIFRoZXkgZ2V0IGVuYWJsZWRcbiAgICogYmVjYXVzZSBldmVyeSBzdWItY29tcG9uZW50IHdvdWxkIGhhdmUgZXh0cmEgb3ZlcmhlYWQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgQ29tcG9uZW50I3RhcFxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2hzdGFydFxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2htb3ZlXG4gICAqIEBsaXN0ZW5zIENvbXBvbmVudCN0b3VjaGxlYXZlXG4gICAqIEBsaXN0ZW5zIENvbXBvbmVudCN0b3VjaGNhbmNlbFxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2hlbmRcbiAgICAqL1xuICA7XG5cbiAgX3Byb3RvLmVtaXRUYXBFdmVudHMgPSBmdW5jdGlvbiBlbWl0VGFwRXZlbnRzKCkge1xuICAgIC8vIFRyYWNrIHRoZSBzdGFydCB0aW1lIHNvIHdlIGNhbiBkZXRlcm1pbmUgaG93IGxvbmcgdGhlIHRvdWNoIGxhc3RlZFxuICAgIHZhciB0b3VjaFN0YXJ0ID0gMDtcbiAgICB2YXIgZmlyc3RUb3VjaCA9IG51bGw7IC8vIE1heGltdW0gbW92ZW1lbnQgYWxsb3dlZCBkdXJpbmcgYSB0b3VjaCBldmVudCB0byBzdGlsbCBiZSBjb25zaWRlcmVkIGEgdGFwXG4gICAgLy8gT3RoZXIgcG9wdWxhciBsaWJzIHVzZSBhbnl3aGVyZSBmcm9tIDIgKGhhbW1lci5qcykgdG8gMTUsXG4gICAgLy8gc28gMTAgc2VlbXMgbGlrZSBhIG5pY2UsIHJvdW5kIG51bWJlci5cblxuICAgIHZhciB0YXBNb3ZlbWVudFRocmVzaG9sZCA9IDEwOyAvLyBUaGUgbWF4aW11bSBsZW5ndGggYSB0b3VjaCBjYW4gYmUgd2hpbGUgc3RpbGwgYmVpbmcgY29uc2lkZXJlZCBhIHRhcFxuXG4gICAgdmFyIHRvdWNoVGltZVRocmVzaG9sZCA9IDIwMDtcbiAgICB2YXIgY291bGRCZVRhcDtcbiAgICB0aGlzLm9uKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGZpbmdlciwgZG9uJ3QgY29uc2lkZXIgdHJlYXRpbmcgdGhpcyBhcyBhIGNsaWNrXG4gICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQ29weSBwYWdlWC9wYWdlWSBmcm9tIHRoZSBvYmplY3RcbiAgICAgICAgZmlyc3RUb3VjaCA9IHtcbiAgICAgICAgICBwYWdlWDogZXZlbnQudG91Y2hlc1swXS5wYWdlWCxcbiAgICAgICAgICBwYWdlWTogZXZlbnQudG91Y2hlc1swXS5wYWdlWVxuICAgICAgICB9OyAvLyBSZWNvcmQgc3RhcnQgdGltZSBzbyB3ZSBjYW4gZGV0ZWN0IGEgdGFwIHZzLiBcInRvdWNoIGFuZCBob2xkXCJcblxuICAgICAgICB0b3VjaFN0YXJ0ID0gd2luZG93JDEucGVyZm9ybWFuY2Uubm93KCk7IC8vIFJlc2V0IGNvdWxkQmVUYXAgdHJhY2tpbmdcblxuICAgICAgICBjb3VsZEJlVGFwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uKCd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgZmluZ2VyLCBkb24ndCBjb25zaWRlciB0cmVhdGluZyB0aGlzIGFzIGEgY2xpY2tcbiAgICAgIGlmIChldmVudC50b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY291bGRCZVRhcCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChmaXJzdFRvdWNoKSB7XG4gICAgICAgIC8vIFNvbWUgZGV2aWNlcyB3aWxsIHRocm93IHRvdWNobW92ZXMgZm9yIGFsbCBidXQgdGhlIHNsaWdodGVzdCBvZiB0YXBzLlxuICAgICAgICAvLyBTbywgaWYgd2UgbW92ZWQgb25seSBhIHNtYWxsIGRpc3RhbmNlLCB0aGlzIGNvdWxkIHN0aWxsIGJlIGEgdGFwXG4gICAgICAgIHZhciB4ZGlmZiA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggLSBmaXJzdFRvdWNoLnBhZ2VYO1xuICAgICAgICB2YXIgeWRpZmYgPSBldmVudC50b3VjaGVzWzBdLnBhZ2VZIC0gZmlyc3RUb3VjaC5wYWdlWTtcbiAgICAgICAgdmFyIHRvdWNoRGlzdGFuY2UgPSBNYXRoLnNxcnQoeGRpZmYgKiB4ZGlmZiArIHlkaWZmICogeWRpZmYpO1xuXG4gICAgICAgIGlmICh0b3VjaERpc3RhbmNlID4gdGFwTW92ZW1lbnRUaHJlc2hvbGQpIHtcbiAgICAgICAgICBjb3VsZEJlVGFwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBub1RhcCA9IGZ1bmN0aW9uIG5vVGFwKCkge1xuICAgICAgY291bGRCZVRhcCA9IGZhbHNlO1xuICAgIH07IC8vIFRPRE86IExpc3RlbiB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LiBodHRwOi8veW91dHUuYmUvRHVqZnBYT0tVcDg/dD0xM204c1xuXG5cbiAgICB0aGlzLm9uKCd0b3VjaGxlYXZlJywgbm9UYXApO1xuICAgIHRoaXMub24oJ3RvdWNoY2FuY2VsJywgbm9UYXApOyAvLyBXaGVuIHRoZSB0b3VjaCBlbmRzLCBtZWFzdXJlIGhvdyBsb25nIGl0IHRvb2sgYW5kIHRyaWdnZXIgdGhlIGFwcHJvcHJpYXRlXG4gICAgLy8gZXZlbnRcblxuICAgIHRoaXMub24oJ3RvdWNoZW5kJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBmaXJzdFRvdWNoID0gbnVsbDsgLy8gUHJvY2VlZCBvbmx5IGlmIHRoZSB0b3VjaG1vdmUvbGVhdmUvY2FuY2VsIGV2ZW50IGRpZG4ndCBoYXBwZW5cblxuICAgICAgaWYgKGNvdWxkQmVUYXAgPT09IHRydWUpIHtcbiAgICAgICAgLy8gTWVhc3VyZSBob3cgbG9uZyB0aGUgdG91Y2ggbGFzdGVkXG4gICAgICAgIHZhciB0b3VjaFRpbWUgPSB3aW5kb3ckMS5wZXJmb3JtYW5jZS5ub3coKSAtIHRvdWNoU3RhcnQ7IC8vIE1ha2Ugc3VyZSB0aGUgdG91Y2ggd2FzIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkIHRvIGJlIGNvbnNpZGVyZWQgYSB0YXBcblxuICAgICAgICBpZiAodG91Y2hUaW1lIDwgdG91Y2hUaW1lVGhyZXNob2xkKSB7XG4gICAgICAgICAgLy8gRG9uJ3QgbGV0IGJyb3dzZXIgdHVybiB0aGlzIGludG8gYSBjbGlja1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogVHJpZ2dlcmVkIHdoZW4gYSBgQ29tcG9uZW50YCBpcyB0YXBwZWQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAZXZlbnQgQ29tcG9uZW50I3RhcFxuICAgICAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAgICAgKi9cblxuICAgICAgICAgIHRoaXMudHJpZ2dlcigndGFwJyk7IC8vIEl0IG1heSBiZSBnb29kIHRvIGNvcHkgdGhlIHRvdWNoZW5kIGV2ZW50IG9iamVjdCBhbmQgY2hhbmdlIHRoZVxuICAgICAgICAgIC8vIHR5cGUgdG8gdGFwLCBpZiB0aGUgb3RoZXIgZXZlbnQgcHJvcGVydGllcyBhcmVuJ3QgZXhhY3QgYWZ0ZXJcbiAgICAgICAgICAvLyBFdmVudHMuZml4RXZlbnQgcnVucyAoZS5nLiBldmVudC50YXJnZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiByZXBvcnRzIHVzZXIgYWN0aXZpdHkgd2hlbmV2ZXIgdG91Y2ggZXZlbnRzIGhhcHBlbi4gVGhpcyBjYW4gZ2V0XG4gICAqIHR1cm5lZCBvZmYgYnkgYW55IHN1Yi1jb21wb25lbnRzIHRoYXQgd2FudHMgdG91Y2ggZXZlbnRzIHRvIGFjdCBhbm90aGVyIHdheS5cbiAgICpcbiAgICogUmVwb3J0IHVzZXIgdG91Y2ggYWN0aXZpdHkgd2hlbiB0b3VjaCBldmVudHMgb2NjdXIuIFVzZXIgYWN0aXZpdHkgZ2V0cyB1c2VkIHRvXG4gICAqIGRldGVybWluZSB3aGVuIGNvbnRyb2xzIHNob3VsZCBzaG93L2hpZGUuIEl0IGlzIHNpbXBsZSB3aGVuIGl0IGNvbWVzIHRvIG1vdXNlXG4gICAqIGV2ZW50cywgYmVjYXVzZSBhbnkgbW91c2UgZXZlbnQgc2hvdWxkIHNob3cgdGhlIGNvbnRyb2xzLiBTbyB3ZSBjYXB0dXJlIG1vdXNlXG4gICAqIGV2ZW50cyB0aGF0IGJ1YmJsZSB1cCB0byB0aGUgcGxheWVyIGFuZCByZXBvcnQgYWN0aXZpdHkgd2hlbiB0aGF0IGhhcHBlbnMuXG4gICAqIFdpdGggdG91Y2ggZXZlbnRzIGl0IGlzbid0IGFzIGVhc3kgYXMgYHRvdWNoc3RhcnRgIGFuZCBgdG91Y2hlbmRgIHRvZ2dsZSBwbGF5ZXJcbiAgICogY29udHJvbHMuIFNvIHRvdWNoIGV2ZW50cyBjYW4ndCBoZWxwIHVzIGF0IHRoZSBwbGF5ZXIgbGV2ZWwgZWl0aGVyLlxuICAgKlxuICAgKiBVc2VyIGFjdGl2aXR5IGdldHMgY2hlY2tlZCBhc3luY2hyb25vdXNseS4gU28gd2hhdCBjb3VsZCBoYXBwZW4gaXMgYSB0YXAgZXZlbnRcbiAgICogb24gdGhlIHZpZGVvIHR1cm5zIHRoZSBjb250cm9scyBvZmYuIFRoZW4gdGhlIGB0b3VjaGVuZGAgZXZlbnQgYnViYmxlcyB1cCB0b1xuICAgKiB0aGUgcGxheWVyLiBXaGljaCwgaWYgaXQgcmVwb3J0ZWQgdXNlciBhY3Rpdml0eSwgd291bGQgdHVybiB0aGUgY29udHJvbHMgcmlnaHRcbiAgICogYmFjayBvbi4gV2UgYWxzbyBkb24ndCB3YW50IHRvIGNvbXBsZXRlbHkgYmxvY2sgdG91Y2ggZXZlbnRzIGZyb20gYnViYmxpbmcgdXAuXG4gICAqIEZ1cnRoZXJtb3JlIGEgYHRvdWNobW92ZWAgZXZlbnQgYW5kIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0YXAsIHNob3VsZCBub3QgdHVyblxuICAgKiBjb250cm9scyBiYWNrIG9uLlxuICAgKlxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2hzdGFydFxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2htb3ZlXG4gICAqIEBsaXN0ZW5zIENvbXBvbmVudCN0b3VjaGVuZFxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjdG91Y2hjYW5jZWxcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5hYmxlVG91Y2hBY3Rpdml0eSA9IGZ1bmN0aW9uIGVuYWJsZVRvdWNoQWN0aXZpdHkoKSB7XG4gICAgLy8gRG9uJ3QgY29udGludWUgaWYgdGhlIHJvb3QgcGxheWVyIGRvZXNuJ3Qgc3VwcG9ydCByZXBvcnRpbmcgdXNlciBhY3Rpdml0eVxuICAgIGlmICghdGhpcy5wbGF5ZXIoKSB8fCAhdGhpcy5wbGF5ZXIoKS5yZXBvcnRVc2VyQWN0aXZpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGxpc3RlbmVyIGZvciByZXBvcnRpbmcgdGhhdCB0aGUgdXNlciBpcyBhY3RpdmVcblxuXG4gICAgdmFyIHJlcG9ydCA9IGJpbmQodGhpcy5wbGF5ZXIoKSwgdGhpcy5wbGF5ZXIoKS5yZXBvcnRVc2VyQWN0aXZpdHkpO1xuICAgIHZhciB0b3VjaEhvbGRpbmc7XG4gICAgdGhpcy5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlcG9ydCgpOyAvLyBGb3IgYXMgbG9uZyBhcyB0aGUgdGhleSBhcmUgdG91Y2hpbmcgdGhlIGRldmljZSBvciBoYXZlIHRoZWlyIG1vdXNlIGRvd24sXG4gICAgICAvLyB3ZSBjb25zaWRlciB0aGVtIGFjdGl2ZSBldmVuIGlmIHRoZXkncmUgbm90IG1vdmluZyB0aGVpciBmaW5nZXIgb3IgbW91c2UuXG4gICAgICAvLyBTbyB3ZSB3YW50IHRvIGNvbnRpbnVlIHRvIHVwZGF0ZSB0aGF0IHRoZXkgYXJlIGFjdGl2ZVxuXG4gICAgICB0aGlzLmNsZWFySW50ZXJ2YWwodG91Y2hIb2xkaW5nKTsgLy8gcmVwb3J0IGF0IHRoZSBzYW1lIGludGVydmFsIGFzIGFjdGl2aXR5Q2hlY2tcblxuICAgICAgdG91Y2hIb2xkaW5nID0gdGhpcy5zZXRJbnRlcnZhbChyZXBvcnQsIDI1MCk7XG4gICAgfSk7XG5cbiAgICB2YXIgdG91Y2hFbmQgPSBmdW5jdGlvbiB0b3VjaEVuZChldmVudCkge1xuICAgICAgcmVwb3J0KCk7IC8vIHN0b3AgdGhlIGludGVydmFsIHRoYXQgbWFpbnRhaW5zIGFjdGl2aXR5IGlmIHRoZSB0b3VjaCBpcyBob2xkaW5nXG5cbiAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCh0b3VjaEhvbGRpbmcpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uKCd0b3VjaG1vdmUnLCByZXBvcnQpO1xuICAgIHRoaXMub24oJ3RvdWNoZW5kJywgdG91Y2hFbmQpO1xuICAgIHRoaXMub24oJ3RvdWNoY2FuY2VsJywgdG91Y2hFbmQpO1xuICB9XG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIHRoYXQgaGFzIG5vIHBhcmFtZXRlcnMgYW5kIGlzIGJvdW5kIGludG8gYENvbXBvbmVudGBzIGNvbnRleHQuXG4gICAqXG4gICAqIEBjYWxsYmFjayBDb21wb25lbnR+R2VuZXJpY0NhbGxiYWNrXG4gICAqIEB0aGlzIENvbXBvbmVudFxuICAgKi9cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcnVucyBhZnRlciBhbiBgeGAgbWlsbGlzZWNvbmQgdGltZW91dC4gVGhpcyBmdW5jdGlvbiBpcyBhXG4gICAqIHdyYXBwZXIgYXJvdW5kIGB3aW5kb3cuc2V0VGltZW91dGAuIFRoZXJlIGFyZSBhIGZldyByZWFzb25zIHRvIHVzZSB0aGlzIG9uZVxuICAgKiBpbnN0ZWFkIHRob3VnaDpcbiAgICogMS4gSXQgZ2V0cyBjbGVhcmVkIHZpYSAge0BsaW5rIENvbXBvbmVudCNjbGVhclRpbWVvdXR9IHdoZW5cbiAgICogICAge0BsaW5rIENvbXBvbmVudCNkaXNwb3NlfSBnZXRzIGNhbGxlZC5cbiAgICogMi4gVGhlIGZ1bmN0aW9uIGNhbGxiYWNrIHdpbGwgZ2V0cyB0dXJuZWQgaW50byBhIHtAbGluayBDb21wb25lbnR+R2VuZXJpY0NhbGxiYWNrfVxuICAgKlxuICAgKiA+IE5vdGU6IFlvdSBjYW4ndCB1c2UgYHdpbmRvdy5jbGVhclRpbWVvdXRgIG9uIHRoZSBpZCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLiBUaGlzXG4gICAqICAgICAgICAgd2lsbCBjYXVzZSBpdHMgZGlzcG9zZSBsaXN0ZW5lciBub3QgdG8gZ2V0IGNsZWFuZWQgdXAhIFBsZWFzZSB1c2VcbiAgICogICAgICAgICB7QGxpbmsgQ29tcG9uZW50I2NsZWFyVGltZW91dH0gb3Ige0BsaW5rIENvbXBvbmVudCNkaXNwb3NlfSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH5HZW5lcmljQ2FsbGJhY2t9IGZuXG4gICAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biBhZnRlciBgdGltZW91dGAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG4gICAqICAgICAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBSZXR1cm5zIGEgdGltZW91dCBJRCB0aGF0IGdldHMgdXNlZCB0byBpZGVudGlmeSB0aGUgdGltZW91dC4gSXQgY2FuIGFsc29cbiAgICogICAgICAgICBnZXQgdXNlZCBpbiB7QGxpbmsgQ29tcG9uZW50I2NsZWFyVGltZW91dH0gdG8gY2xlYXIgdGhlIHRpbWVvdXQgdGhhdFxuICAgKiAgICAgICAgIHdhcyBzZXQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIENvbXBvbmVudCNkaXNwb3NlXG4gICAqIEBzZWUgW1NpbWlsYXIgdG9de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3dUaW1lcnMvc2V0VGltZW91dH1cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0VGltZW91dCA9IGZ1bmN0aW9uIHNldFRpbWVvdXQoZm4sIHRpbWVvdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIC8vIGRlY2xhcmUgYXMgdmFyaWFibGVzIHNvIHRoZXkgYXJlIHByb3Blcmx5IGF2YWlsYWJsZSBpbiB0aW1lb3V0IGZ1bmN0aW9uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdmFyIHRpbWVvdXRJZDtcbiAgICBmbiA9IGJpbmQodGhpcywgZm4pO1xuICAgIHRoaXMuY2xlYXJUaW1lcnNPbkRpc3Bvc2VfKCk7XG4gICAgdGltZW91dElkID0gd2luZG93JDEuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMyLnNldFRpbWVvdXRJZHNfLmhhcyh0aW1lb3V0SWQpKSB7XG4gICAgICAgIF90aGlzMi5zZXRUaW1lb3V0SWRzX1tcImRlbGV0ZVwiXSh0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH0sIHRpbWVvdXQpO1xuICAgIHRoaXMuc2V0VGltZW91dElkc18uYWRkKHRpbWVvdXRJZCk7XG4gICAgcmV0dXJuIHRpbWVvdXRJZDtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGEgdGltZW91dCB0aGF0IGdldHMgY3JlYXRlZCB2aWEgYHdpbmRvdy5zZXRUaW1lb3V0YCBvclxuICAgKiB7QGxpbmsgQ29tcG9uZW50I3NldFRpbWVvdXR9LiBJZiB5b3Ugc2V0IGEgdGltZW91dCB2aWEge0BsaW5rIENvbXBvbmVudCNzZXRUaW1lb3V0fVxuICAgKiB1c2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGB3aW5kb3cuY2xlYXJUaW1vdXRgLiBJZiB5b3UgZG9uJ3QgeW91ciBkaXNwb3NlXG4gICAqIGxpc3RlbmVyIHdpbGwgbm90IGdldCBjbGVhbmVkIHVwIHVudGlsIHtAbGluayBDb21wb25lbnQjZGlzcG9zZX0hXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0SWRcbiAgICogICAgICAgIFRoZSBpZCBvZiB0aGUgdGltZW91dCB0byBjbGVhci4gVGhlIHJldHVybiB2YWx1ZSBvZlxuICAgKiAgICAgICAge0BsaW5rIENvbXBvbmVudCNzZXRUaW1lb3V0fSBvciBgd2luZG93LnNldFRpbWVvdXRgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgUmV0dXJucyB0aGUgdGltZW91dCBpZCB0aGF0IHdhcyBjbGVhcmVkLlxuICAgKlxuICAgKiBAc2VlIFtTaW1pbGFyIHRvXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93VGltZXJzL2NsZWFyVGltZW91dH1cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkge1xuICAgIGlmICh0aGlzLnNldFRpbWVvdXRJZHNfLmhhcyh0aW1lb3V0SWQpKSB7XG4gICAgICB0aGlzLnNldFRpbWVvdXRJZHNfW1wiZGVsZXRlXCJdKHRpbWVvdXRJZCk7XG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZW91dElkO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHJ1biBldmVyeSBgeGAgbWlsbGlzZWNvbmRzLiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlclxuICAgKiBhcm91bmQgYHdpbmRvdy5zZXRJbnRlcnZhbGAuIFRoZXJlIGFyZSBhIGZldyByZWFzb25zIHRvIHVzZSB0aGlzIG9uZSBpbnN0ZWFkIHRob3VnaC5cbiAgICogMS4gSXQgZ2V0cyBjbGVhcmVkIHZpYSAge0BsaW5rIENvbXBvbmVudCNjbGVhckludGVydmFsfSB3aGVuXG4gICAqICAgIHtAbGluayBDb21wb25lbnQjZGlzcG9zZX0gZ2V0cyBjYWxsZWQuXG4gICAqIDIuIFRoZSBmdW5jdGlvbiBjYWxsYmFjayB3aWxsIGJlIGEge0BsaW5rIENvbXBvbmVudH5HZW5lcmljQ2FsbGJhY2t9XG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50fkdlbmVyaWNDYWxsYmFja30gZm5cbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0byBydW4gZXZlcnkgYHhgIHNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbFxuICAgKiAgICAgICAgRXhlY3V0ZSB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGV2ZXJ5IGB4YCBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBSZXR1cm5zIGFuIGlkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGludGVydmFsLiBJdCBjYW4gYWxzbyBiZSBiZSB1c2VkIGluXG4gICAqICAgICAgICAge0BsaW5rIENvbXBvbmVudCNjbGVhckludGVydmFsfSB0byBjbGVhciB0aGUgaW50ZXJ2YWwuXG4gICAqXG4gICAqIEBsaXN0ZW5zIENvbXBvbmVudCNkaXNwb3NlXG4gICAqIEBzZWUgW1NpbWlsYXIgdG9de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3dUaW1lcnMvc2V0SW50ZXJ2YWx9XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEludGVydmFsID0gZnVuY3Rpb24gc2V0SW50ZXJ2YWwoZm4sIGludGVydmFsKSB7XG4gICAgZm4gPSBiaW5kKHRoaXMsIGZuKTtcbiAgICB0aGlzLmNsZWFyVGltZXJzT25EaXNwb3NlXygpO1xuICAgIHZhciBpbnRlcnZhbElkID0gd2luZG93JDEuc2V0SW50ZXJ2YWwoZm4sIGludGVydmFsKTtcbiAgICB0aGlzLnNldEludGVydmFsSWRzXy5hZGQoaW50ZXJ2YWxJZCk7XG4gICAgcmV0dXJuIGludGVydmFsSWQ7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBhbiBpbnRlcnZhbCB0aGF0IGdldHMgY3JlYXRlZCB2aWEgYHdpbmRvdy5zZXRJbnRlcnZhbGAgb3JcbiAgICoge0BsaW5rIENvbXBvbmVudCNzZXRJbnRlcnZhbH0uIElmIHlvdSBzZXQgYW4gaW50ZXZhbCB2aWEge0BsaW5rIENvbXBvbmVudCNzZXRJbnRlcnZhbH1cbiAgICogdXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBgd2luZG93LmNsZWFySW50ZXJ2YWxgLiBJZiB5b3UgZG9uJ3QgeW91ciBkaXNwb3NlXG4gICAqIGxpc3RlbmVyIHdpbGwgbm90IGdldCBjbGVhbmVkIHVwIHVudGlsIHtAbGluayBDb21wb25lbnQjZGlzcG9zZX0hXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbElkXG4gICAqICAgICAgICBUaGUgaWQgb2YgdGhlIGludGVydmFsIHRvIGNsZWFyLiBUaGUgcmV0dXJuIHZhbHVlIG9mXG4gICAqICAgICAgICB7QGxpbmsgQ29tcG9uZW50I3NldEludGVydmFsfSBvciBgd2luZG93LnNldEludGVydmFsYC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFJldHVybnMgdGhlIGludGVydmFsIGlkIHRoYXQgd2FzIGNsZWFyZWQuXG4gICAqXG4gICAqIEBzZWUgW1NpbWlsYXIgdG9de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3dUaW1lcnMvY2xlYXJJbnRlcnZhbH1cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCkge1xuICAgIGlmICh0aGlzLnNldEludGVydmFsSWRzXy5oYXMoaW50ZXJ2YWxJZCkpIHtcbiAgICAgIHRoaXMuc2V0SW50ZXJ2YWxJZHNfW1wiZGVsZXRlXCJdKGludGVydmFsSWQpO1xuICAgICAgd2luZG93JDEuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJ2YWxJZDtcbiAgfVxuICAvKipcbiAgICogUXVldWVzIHVwIGEgY2FsbGJhY2sgdG8gYmUgcGFzc2VkIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZSAockFGKSwgYnV0XG4gICAqIHdpdGggYSBmZXcgZXh0cmEgYm9udXNlczpcbiAgICpcbiAgICogLSBTdXBwb3J0cyBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHJBRiBieSBmYWxsaW5nIGJhY2sgdG9cbiAgICogICB7QGxpbmsgQ29tcG9uZW50I3NldFRpbWVvdXR9LlxuICAgKlxuICAgKiAtIFRoZSBjYWxsYmFjayBpcyB0dXJuZWQgaW50byBhIHtAbGluayBDb21wb25lbnR+R2VuZXJpY0NhbGxiYWNrfSAoaS5lLlxuICAgKiAgIGJvdW5kIHRvIHRoZSBjb21wb25lbnQpLlxuICAgKlxuICAgKiAtIEF1dG9tYXRpYyBjYW5jZWxsYXRpb24gb2YgdGhlIHJBRiBjYWxsYmFjayBpcyBoYW5kbGVkIGlmIHRoZSBjb21wb25lbnRcbiAgICogICBpcyBkaXNwb3NlZCBiZWZvcmUgaXQgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb21wb25lbnR+R2VuZXJpY0NhbGxiYWNrfSBmblxuICAgKiAgICAgICAgIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IGFuZCBleGVjdXRlZCBqdXN0XG4gICAqICAgICAgICAgYmVmb3JlIHRoZSBicm93c2VyJ3MgbmV4dCByZXBhaW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgUmV0dXJucyBhbiByQUYgSUQgdGhhdCBnZXRzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRpbWVvdXQuIEl0IGNhblxuICAgKiAgICAgICAgIGFsc28gYmUgdXNlZCBpbiB7QGxpbmsgQ29tcG9uZW50I2NhbmNlbEFuaW1hdGlvbkZyYW1lfSB0byBjYW5jZWxcbiAgICogICAgICAgICB0aGUgYW5pbWF0aW9uIGZyYW1lIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAbGlzdGVucyBDb21wb25lbnQjZGlzcG9zZVxuICAgKiBAc2VlIFtTaW1pbGFyIHRvXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvd2luZG93L3JlcXVlc3RBbmltYXRpb25GcmFtZX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gdXNpbmcgYSB0aW1lci5cbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNSYWZfKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRUaW1lb3V0KGZuLCAxMDAwIC8gNjApO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJUaW1lcnNPbkRpc3Bvc2VfKCk7IC8vIGRlY2xhcmUgYXMgdmFyaWFibGVzIHNvIHRoZXkgYXJlIHByb3Blcmx5IGF2YWlsYWJsZSBpbiByQUYgZnVuY3Rpb25cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgIHZhciBpZDtcbiAgICBmbiA9IGJpbmQodGhpcywgZm4pO1xuICAgIGlkID0gd2luZG93JDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczMucmFmSWRzXy5oYXMoaWQpKSB7XG4gICAgICAgIF90aGlzMy5yYWZJZHNfW1wiZGVsZXRlXCJdKGlkKTtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9KTtcbiAgICB0aGlzLnJhZklkc18uYWRkKGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgLyoqXG4gICAqIENhbmNlbHMgYSBxdWV1ZWQgY2FsbGJhY2sgcGFzc2VkIHRvIHtAbGluayBDb21wb25lbnQjcmVxdWVzdEFuaW1hdGlvbkZyYW1lfVxuICAgKiAockFGKS5cbiAgICpcbiAgICogSWYgeW91IHF1ZXVlIGFuIHJBRiBjYWxsYmFjayB2aWEge0BsaW5rIENvbXBvbmVudCNyZXF1ZXN0QW5pbWF0aW9uRnJhbWV9LFxuICAgKiB1c2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWVgLiBJZiB5b3UgZG9uJ3QsXG4gICAqIHlvdXIgZGlzcG9zZSBsaXN0ZW5lciB3aWxsIG5vdCBnZXQgY2xlYW5lZCB1cCB1bnRpbCB7QGxpbmsgQ29tcG9uZW50I2Rpc3Bvc2V9IVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWRcbiAgICogICAgICAgIFRoZSByQUYgSUQgdG8gY2xlYXIuIFRoZSByZXR1cm4gdmFsdWUgb2Yge0BsaW5rIENvbXBvbmVudCNyZXF1ZXN0QW5pbWF0aW9uRnJhbWV9LlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgUmV0dXJucyB0aGUgckFGIElEIHRoYXQgd2FzIGNsZWFyZWQuXG4gICAqXG4gICAqIEBzZWUgW1NpbWlsYXIgdG9de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS93aW5kb3cvY2FuY2VsQW5pbWF0aW9uRnJhbWV9XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gdXNpbmcgYSB0aW1lci5cbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNSYWZfKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhclRpbWVvdXQoaWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJhZklkc18uaGFzKGlkKSkge1xuICAgICAgdGhpcy5yYWZJZHNfW1wiZGVsZXRlXCJdKGlkKTtcbiAgICAgIHdpbmRvdyQxLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gc2V0dXAgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAsIGBzZXRUaW1lb3V0YCxcbiAgICogYW5kIGBzZXRJbnRlcnZhbGAsIGNsZWFyaW5nIG9uIGRpc3Bvc2UuXG4gICAqXG4gICAqID4gUHJldmlvdXNseSBlYWNoIHRpbWVyIGFkZGVkIGFuZCByZW1vdmVkIGRpc3Bvc2UgbGlzdGVuZXJzIG9uIGl0J3Mgb3duLlxuICAgKiBGb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGl0IHdhcyBkZWNpZGVkIHRvIGJhdGNoIHRoZW0gYWxsLCBhbmQgdXNlIGBTZXRgc1xuICAgKiB0byB0cmFjayBvdXRzdGFuZGluZyB0aW1lciBpZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNsZWFyVGltZXJzT25EaXNwb3NlXyA9IGZ1bmN0aW9uIGNsZWFyVGltZXJzT25EaXNwb3NlXygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmNsZWFyaW5nVGltZXJzT25EaXNwb3NlXykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJpbmdUaW1lcnNPbkRpc3Bvc2VfID0gdHJ1ZTtcbiAgICB0aGlzLm9uZSgnZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFtbJ3JhZklkc18nLCAnY2FuY2VsQW5pbWF0aW9uRnJhbWUnXSwgWydzZXRUaW1lb3V0SWRzXycsICdjbGVhclRpbWVvdXQnXSwgWydzZXRJbnRlcnZhbElkc18nLCAnY2xlYXJJbnRlcnZhbCddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpZE5hbWUgPSBfcmVmWzBdLFxuICAgICAgICAgICAgY2FuY2VsTmFtZSA9IF9yZWZbMV07XG5cbiAgICAgICAgX3RoaXM0W2lkTmFtZV0uZm9yRWFjaChfdGhpczRbY2FuY2VsTmFtZV0sIF90aGlzNCk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzNC5jbGVhcmluZ1RpbWVyc09uRGlzcG9zZV8gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBgQ29tcG9uZW50YCB3aXRoIGB2aWRlb2pzYCBnaXZlbiB0aGUgbmFtZSBhbmQgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogPiBOT1RFOiB7QGxpbmsgVGVjaH1zIHNob3VsZCBub3QgYmUgcmVnaXN0ZXJlZCBhcyBhIGBDb21wb25lbnRgLiB7QGxpbmsgVGVjaH1zXG4gICAqICAgICAgICAgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmcge0BsaW5rIFRlY2gucmVnaXN0ZXJUZWNofSBvclxuICAgKiAgICAgICAgIHtAbGluayB2aWRlb2pzOnZpZGVvanMucmVnaXN0ZXJUZWNofS5cbiAgICpcbiAgICogPiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHNlZW4gb24gdmlkZW9qcyBhc1xuICAgKiAgICAgICAgIHtAbGluayB2aWRlb2pzOnZpZGVvanMucmVnaXN0ZXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGBDb21wb25lbnRgIHRvIHJlZ2lzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH0gQ29tcG9uZW50VG9SZWdpc3RlclxuICAgKiAgICAgICAgVGhlIGBDb21wb25lbnRgIGNsYXNzIHRvIHJlZ2lzdGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDb21wb25lbnR9XG4gICAqICAgICAgICAgVGhlIGBDb21wb25lbnRgIHRoYXQgd2FzIHJlZ2lzdGVyZWQuXG4gICAqL1xuICA7XG5cbiAgQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50ID0gZnVuY3Rpb24gcmVnaXN0ZXJDb21wb25lbnQobmFtZSwgQ29tcG9uZW50VG9SZWdpc3Rlcikge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgIW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgY29tcG9uZW50IG5hbWUsIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI7IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgVGVjaCA9IENvbXBvbmVudC5nZXRDb21wb25lbnQoJ1RlY2gnKTsgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGVjayBpcyBvbmx5IGRvbmUgaWYgVGVjaCBoYXMgYmVlbiByZWdpc3RlcmVkLlxuXG4gICAgdmFyIGlzVGVjaCA9IFRlY2ggJiYgVGVjaC5pc1RlY2goQ29tcG9uZW50VG9SZWdpc3Rlcik7XG4gICAgdmFyIGlzQ29tcCA9IENvbXBvbmVudCA9PT0gQ29tcG9uZW50VG9SZWdpc3RlciB8fCBDb21wb25lbnQucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoQ29tcG9uZW50VG9SZWdpc3Rlci5wcm90b3R5cGUpO1xuXG4gICAgaWYgKGlzVGVjaCB8fCAhaXNDb21wKSB7XG4gICAgICB2YXIgcmVhc29uO1xuXG4gICAgICBpZiAoaXNUZWNoKSB7XG4gICAgICAgIHJlYXNvbiA9ICd0ZWNocyBtdXN0IGJlIHJlZ2lzdGVyZWQgdXNpbmcgVGVjaC5yZWdpc3RlclRlY2goKSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWFzb24gPSAnbXVzdCBiZSBhIENvbXBvbmVudCBzdWJjbGFzcyc7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgY29tcG9uZW50LCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOyBcIiArIHJlYXNvbiArIFwiLlwiKTtcbiAgICB9XG5cbiAgICBuYW1lID0gdG9UaXRsZUNhc2UobmFtZSk7XG5cbiAgICBpZiAoIUNvbXBvbmVudC5jb21wb25lbnRzXykge1xuICAgICAgQ29tcG9uZW50LmNvbXBvbmVudHNfID0ge307XG4gICAgfVxuXG4gICAgdmFyIFBsYXllciA9IENvbXBvbmVudC5nZXRDb21wb25lbnQoJ1BsYXllcicpO1xuXG4gICAgaWYgKG5hbWUgPT09ICdQbGF5ZXInICYmIFBsYXllciAmJiBQbGF5ZXIucGxheWVycykge1xuICAgICAgdmFyIHBsYXllcnMgPSBQbGF5ZXIucGxheWVycztcbiAgICAgIHZhciBwbGF5ZXJOYW1lcyA9IE9iamVjdC5rZXlzKHBsYXllcnMpOyAvLyBJZiB3ZSBoYXZlIHBsYXllcnMgdGhhdCB3ZXJlIGRpc3Bvc2VkLCB0aGVuIHRoZWlyIG5hbWUgd2lsbCBzdGlsbCBiZVxuICAgICAgLy8gaW4gUGxheWVycy5wbGF5ZXJzLiBTbywgd2UgbXVzdCBsb29wIHRocm91Z2ggYW5kIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZVxuICAgICAgLy8gZm9yIGVhY2ggaXRlbSBpcyBub3QgbnVsbC4gVGhpcyBhbGxvd3MgcmVnaXN0cmF0aW9uIG9mIHRoZSBQbGF5ZXIgY29tcG9uZW50XG4gICAgICAvLyBhZnRlciBhbGwgcGxheWVycyBoYXZlIGJlZW4gZGlzcG9zZWQgb3IgYmVmb3JlIGFueSB3ZXJlIGNyZWF0ZWQuXG5cbiAgICAgIGlmIChwbGF5ZXJzICYmIHBsYXllck5hbWVzLmxlbmd0aCA+IDAgJiYgcGxheWVyTmFtZXMubWFwKGZ1bmN0aW9uIChwbmFtZSkge1xuICAgICAgICByZXR1cm4gcGxheWVyc1twbmFtZV07XG4gICAgICB9KS5ldmVyeShCb29sZWFuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgcmVnaXN0ZXIgUGxheWVyIGNvbXBvbmVudCBhZnRlciBwbGF5ZXIgaGFzIGJlZW4gY3JlYXRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBDb21wb25lbnQuY29tcG9uZW50c19bbmFtZV0gPSBDb21wb25lbnRUb1JlZ2lzdGVyO1xuICAgIENvbXBvbmVudC5jb21wb25lbnRzX1t0b0xvd2VyQ2FzZShuYW1lKV0gPSBDb21wb25lbnRUb1JlZ2lzdGVyO1xuICAgIHJldHVybiBDb21wb25lbnRUb1JlZ2lzdGVyO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSBgQ29tcG9uZW50YCBiYXNlZCBvbiB0aGUgbmFtZSBpdCB3YXMgcmVnaXN0ZXJlZCB3aXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgVGhlIE5hbWUgb2YgdGhlIGNvbXBvbmVudCB0byBnZXQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbXBvbmVudH1cbiAgICogICAgICAgICBUaGUgYENvbXBvbmVudGAgdGhhdCBnb3QgcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW4gbmFtZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSW4gYHZpZGVvanNgIDYgdGhpcyB3aWxsIG5vdCByZXR1cm4gYENvbXBvbmVudGBzIHRoYXQgd2VyZSBub3RcbiAgICogICAgICAgICAgICAgcmVnaXN0ZXJlZCB1c2luZyB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50fS4gQ3VycmVudGx5IHdlXG4gICAqICAgICAgICAgICAgIGNoZWNrIHRoZSBnbG9iYWwgYHZpZGVvanNgIG9iamVjdCBmb3IgYSBgQ29tcG9uZW50YCBuYW1lIGFuZFxuICAgKiAgICAgICAgICAgICByZXR1cm4gdGhhdCBpZiBpdCBleGlzdHMuXG4gICAqL1xuICA7XG5cbiAgQ29tcG9uZW50LmdldENvbXBvbmVudCA9IGZ1bmN0aW9uIGdldENvbXBvbmVudChuYW1lKSB7XG4gICAgaWYgKCFuYW1lIHx8ICFDb21wb25lbnQuY29tcG9uZW50c18pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gQ29tcG9uZW50LmNvbXBvbmVudHNfW25hbWVdO1xuICB9O1xuXG4gIHJldHVybiBDb21wb25lbnQ7XG59KCk7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9uZW50IHN1cHBvcnRzIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICpcbiAqIFRoaXMgaXMgZXhwb3NlZCBwcmltYXJpbHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtCb29sZWFufVxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zdXBwb3J0c1JhZl8gPSB0eXBlb2Ygd2luZG93JDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB3aW5kb3ckMS5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJztcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnQ29tcG9uZW50JywgQ29tcG9uZW50KTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBmaWxlIGJyb3dzZXIuanNcbiAqIEBtb2R1bGUgYnJvd3NlclxuICovXG52YXIgVVNFUl9BR0VOVCA9IHdpbmRvdyQxLm5hdmlnYXRvciAmJiB3aW5kb3ckMS5uYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xudmFyIHdlYmtpdFZlcnNpb25NYXAgPSAvQXBwbGVXZWJLaXRcXC8oW1xcZC5dKykvaS5leGVjKFVTRVJfQUdFTlQpO1xudmFyIGFwcGxlV2Via2l0VmVyc2lvbiA9IHdlYmtpdFZlcnNpb25NYXAgPyBwYXJzZUZsb2F0KHdlYmtpdFZlcnNpb25NYXAucG9wKCkpIDogbnVsbDtcbi8qKlxuICogV2hldGhlciBvciBub3QgdGhpcyBkZXZpY2UgaXMgYW4gaVBhZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtCb29sZWFufVxuICovXG5cbnZhciBJU19JUEFEID0gL2lQYWQvaS50ZXN0KFVTRVJfQUdFTlQpO1xuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGRldmljZSBpcyBhbiBpUGhvbmUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuLy8gVGhlIEZhY2Vib29rIGFwcCdzIFVJV2ViVmlldyBpZGVudGlmaWVzIGFzIGJvdGggYW4gaVBob25lIGFuZCBpUGFkLCBzb1xuLy8gdG8gaWRlbnRpZnkgaVBob25lcywgd2UgbmVlZCB0byBleGNsdWRlIGlQYWRzLlxuLy8gaHR0cDovL2FydHN5LmdpdGh1Yi5pby9ibG9nLzIwMTIvMTAvMTgvdGhlLXBlcmlscy1vZi1pb3MtdXNlci1hZ2VudC1zbmlmZmluZy9cblxudmFyIElTX0lQSE9ORSA9IC9pUGhvbmUvaS50ZXN0KFVTRVJfQUdFTlQpICYmICFJU19JUEFEO1xuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGRldmljZSBpcyBhbiBpUG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICogQHR5cGUge0Jvb2xlYW59XG4gKi9cblxudmFyIElTX0lQT0QgPSAvaVBvZC9pLnRlc3QoVVNFUl9BR0VOVCk7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYW4gaU9TIGRldmljZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtCb29sZWFufVxuICovXG5cbnZhciBJU19JT1MgPSBJU19JUEhPTkUgfHwgSVNfSVBBRCB8fCBJU19JUE9EO1xuLyoqXG4gKiBUaGUgZGV0ZWN0ZWQgaU9TIHZlcnNpb24gLSBvciBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7c3RyaW5nfG51bGx9XG4gKi9cblxudmFyIElPU19WRVJTSU9OID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbWF0Y2ggPSBVU0VSX0FHRU5ULm1hdGNoKC9PUyAoXFxkKylfL2kpO1xuXG4gIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSgpO1xuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGFuIEFuZHJvaWQgZGV2aWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICogQHR5cGUge0Jvb2xlYW59XG4gKi9cblxudmFyIElTX0FORFJPSUQgPSAvQW5kcm9pZC9pLnRlc3QoVVNFUl9BR0VOVCk7XG4vKipcbiAqIFRoZSBkZXRlY3RlZCBBbmRyb2lkIHZlcnNpb24gLSBvciBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfHN0cmluZ3xudWxsfVxuICovXG5cbnZhciBBTkRST0lEX1ZFUlNJT04gPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRoaXMgbWF0Y2hlcyBBbmRyb2lkIE1ham9yLk1pbm9yLlBhdGNoIHZlcnNpb25zXG4gIC8vIEFORFJPSURfVkVSU0lPTiBpcyBNYWpvci5NaW5vciBhcyBhIE51bWJlciwgaWYgTWlub3IgaXNuJ3QgYXZhaWxhYmxlLCB0aGVuIG9ubHkgTWFqb3IgaXMgcmV0dXJuZWRcbiAgdmFyIG1hdGNoID0gVVNFUl9BR0VOVC5tYXRjaCgvQW5kcm9pZCAoXFxkKykoPzpcXC4oXFxkKykpPyg/OlxcLihcXGQrKSkqL2kpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYWpvciA9IG1hdGNoWzFdICYmIHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgbWlub3IgPSBtYXRjaFsyXSAmJiBwYXJzZUZsb2F0KG1hdGNoWzJdKTtcblxuICBpZiAobWFqb3IgJiYgbWlub3IpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChtYXRjaFsxXSArICcuJyArIG1hdGNoWzJdKTtcbiAgfSBlbHNlIGlmIChtYWpvcikge1xuICAgIHJldHVybiBtYWpvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSgpO1xuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgbmF0aXZlIEFuZHJvaWQgYnJvd3Nlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtCb29sZWFufVxuICovXG5cbnZhciBJU19OQVRJVkVfQU5EUk9JRCA9IElTX0FORFJPSUQgJiYgQU5EUk9JRF9WRVJTSU9OIDwgNSAmJiBhcHBsZVdlYmtpdFZlcnNpb24gPCA1Mzc7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgTW96aWxsYSBGaXJlZm94LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICogQHR5cGUge0Jvb2xlYW59XG4gKi9cblxudmFyIElTX0ZJUkVGT1ggPSAvRmlyZWZveC9pLnRlc3QoVVNFUl9BR0VOVCk7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgTWljcm9zb2Z0IEVkZ2UuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuXG52YXIgSVNfRURHRSA9IC9FZGdlL2kudGVzdChVU0VSX0FHRU5UKTtcbi8qKlxuICogV2hldGhlciBvciBub3QgdGhpcyBpcyBHb29nbGUgQ2hyb21lLlxuICpcbiAqIFRoaXMgd2lsbCBhbHNvIGJlIGB0cnVlYCBmb3IgQ2hyb21lIG9uIGlPUywgd2hpY2ggd2lsbCBoYXZlIGRpZmZlcmVudCBzdXBwb3J0XG4gKiBhcyBpdCBpcyBhY3R1YWxseSBTYWZhcmkgdW5kZXIgdGhlIGhvb2QuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuXG52YXIgSVNfQ0hST01FID0gIUlTX0VER0UgJiYgKC9DaHJvbWUvaS50ZXN0KFVTRVJfQUdFTlQpIHx8IC9DcmlPUy9pLnRlc3QoVVNFUl9BR0VOVCkpO1xuLyoqXG4gKiBUaGUgZGV0ZWN0ZWQgR29vZ2xlIENocm9tZSB2ZXJzaW9uIC0gb3IgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcnxudWxsfVxuICovXG5cbnZhciBDSFJPTUVfVkVSU0lPTiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG1hdGNoID0gVVNFUl9BR0VOVC5tYXRjaCgvKENocm9tZXxDcmlPUylcXC8oXFxkKykvKTtcblxuICBpZiAobWF0Y2ggJiYgbWF0Y2hbMl0pIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChtYXRjaFsyXSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0oKTtcbi8qKlxuICogVGhlIGRldGVjdGVkIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb24gLSBvciBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfG51bGx9XG4gKi9cblxudmFyIElFX1ZFUlNJT04gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHQgPSAvTVNJRVxccyhcXGQrKVxcLlxcZC8uZXhlYyhVU0VSX0FHRU5UKTtcbiAgdmFyIHZlcnNpb24gPSByZXN1bHQgJiYgcGFyc2VGbG9hdChyZXN1bHRbMV0pO1xuXG4gIGlmICghdmVyc2lvbiAmJiAvVHJpZGVudFxcLzcuMC9pLnRlc3QoVVNFUl9BR0VOVCkgJiYgL3J2OjExLjAvLnRlc3QoVVNFUl9BR0VOVCkpIHtcbiAgICAvLyBJRSAxMSBoYXMgYSBkaWZmZXJlbnQgdXNlciBhZ2VudCBzdHJpbmcgdGhhbiBvdGhlciBJRSB2ZXJzaW9uc1xuICAgIHZlcnNpb24gPSAxMS4wO1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb247XG59KCk7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgZGVza3RvcCBTYWZhcmkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuXG52YXIgSVNfU0FGQVJJID0gL1NhZmFyaS9pLnRlc3QoVVNFUl9BR0VOVCkgJiYgIUlTX0NIUk9NRSAmJiAhSVNfQU5EUk9JRCAmJiAhSVNfRURHRTtcbi8qKlxuICogV2hldGhlciBvciBub3QgdGhpcyBpcyBhbnkgZmxhdm9yIG9mIFNhZmFyaSAtIGluY2x1ZGluZyBpT1MuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuXG52YXIgSVNfQU5ZX1NBRkFSSSA9IChJU19TQUZBUkkgfHwgSVNfSU9TKSAmJiAhSVNfQ0hST01FO1xuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgV2luZG93cyBtYWNoaW5lLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICogQHR5cGUge0Jvb2xlYW59XG4gKi9cblxudmFyIElTX1dJTkRPV1MgPSAvV2luZG93cy9pLnRlc3QoVVNFUl9BR0VOVCk7XG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoaXMgZGV2aWNlIGlzIHRvdWNoLWVuYWJsZWQuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKiBAdHlwZSB7Qm9vbGVhbn1cbiAqL1xuXG52YXIgVE9VQ0hfRU5BQkxFRCA9IGlzUmVhbCgpICYmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3ckMSB8fCB3aW5kb3ckMS5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgd2luZG93JDEuRG9jdW1lbnRUb3VjaCAmJiB3aW5kb3ckMS5kb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdyQxLkRvY3VtZW50VG91Y2gpO1xuXG52YXIgYnJvd3NlciA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgSVNfSVBBRDogSVNfSVBBRCxcbiAgSVNfSVBIT05FOiBJU19JUEhPTkUsXG4gIElTX0lQT0Q6IElTX0lQT0QsXG4gIElTX0lPUzogSVNfSU9TLFxuICBJT1NfVkVSU0lPTjogSU9TX1ZFUlNJT04sXG4gIElTX0FORFJPSUQ6IElTX0FORFJPSUQsXG4gIEFORFJPSURfVkVSU0lPTjogQU5EUk9JRF9WRVJTSU9OLFxuICBJU19OQVRJVkVfQU5EUk9JRDogSVNfTkFUSVZFX0FORFJPSUQsXG4gIElTX0ZJUkVGT1g6IElTX0ZJUkVGT1gsXG4gIElTX0VER0U6IElTX0VER0UsXG4gIElTX0NIUk9NRTogSVNfQ0hST01FLFxuICBDSFJPTUVfVkVSU0lPTjogQ0hST01FX1ZFUlNJT04sXG4gIElFX1ZFUlNJT046IElFX1ZFUlNJT04sXG4gIElTX1NBRkFSSTogSVNfU0FGQVJJLFxuICBJU19BTllfU0FGQVJJOiBJU19BTllfU0FGQVJJLFxuICBJU19XSU5ET1dTOiBJU19XSU5ET1dTLFxuICBUT1VDSF9FTkFCTEVEOiBUT1VDSF9FTkFCTEVEXG59KTtcblxuLyoqXG4gKiBAZmlsZSB0aW1lLXJhbmdlcy5qc1xuICogQG1vZHVsZSB0aW1lLXJhbmdlc1xuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGltZSBmb3IgdGhlIHNwZWNpZmllZCBpbmRleCBhdCB0aGUgc3RhcnQgb3IgZW5kXG4gKiBvZiBhIFRpbWVSYW5nZSBvYmplY3QuXG4gKlxuICogQHR5cGVkZWYgICAge0Z1bmN0aW9ufSBUaW1lUmFuZ2VJbmRleFxuICpcbiAqIEBwYXJhbSAgICAgIHtudW1iZXJ9IFtpbmRleD0wXVxuICogICAgICAgICAgICAgVGhlIHJhbmdlIG51bWJlciB0byByZXR1cm4gdGhlIHRpbWUgZm9yLlxuICpcbiAqIEByZXR1cm4gICAgIHtudW1iZXJ9XG4gKiAgICAgICAgICAgICBUaGUgdGltZSBvZmZzZXQgYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGUgaW5kZXggYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgICAgICAgICAgIEluIHRoZSBmdXR1cmUsIGxlYXZpbmcgaXQgb3V0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyByYW5nZXMgb2YgdGltZS5cbiAqXG4gKiBAdHlwZWRlZiAge09iamVjdH0gVGltZVJhbmdlXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlbmd0aFxuICogICAgICAgICAgIFRoZSBudW1iZXIgb2YgdGltZSByYW5nZXMgcmVwcmVzZW50ZWQgYnkgdGhpcyBvYmplY3QuXG4gKlxuICogQHByb3BlcnR5IHttb2R1bGU6dGltZS1yYW5nZXN+VGltZVJhbmdlSW5kZXh9IHN0YXJ0XG4gKiAgICAgICAgICAgUmV0dXJucyB0aGUgdGltZSBvZmZzZXQgYXQgd2hpY2ggYSBzcGVjaWZpZWQgdGltZSByYW5nZSBiZWdpbnMuXG4gKlxuICogQHByb3BlcnR5IHttb2R1bGU6dGltZS1yYW5nZXN+VGltZVJhbmdlSW5kZXh9IGVuZFxuICogICAgICAgICAgIFJldHVybnMgdGhlIHRpbWUgb2Zmc2V0IGF0IHdoaWNoIGEgc3BlY2lmaWVkIHRpbWUgcmFuZ2UgZW5kcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UaW1lUmFuZ2VzXG4gKi9cblxuLyoqXG4gKiBDaGVjayBpZiBhbnkgb2YgdGhlIHRpbWUgcmFuZ2VzIGFyZSBvdmVyIHRoZSBtYXhpbXVtIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7c3RyaW5nfSBmbk5hbWVcbiAqICAgICAgICAgIFRoZSBmdW5jdGlvbiBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xuICpcbiAqIEBwYXJhbSAgIHtudW1iZXJ9IGluZGV4XG4gKiAgICAgICAgICBUaGUgaW5kZXggdG8gY2hlY2tcbiAqXG4gKiBAcGFyYW0gICB7bnVtYmVyfSBtYXhJbmRleFxuICogICAgICAgICAgVGhlIG1heGltdW0gcG9zc2libGUgaW5kZXhcbiAqXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHRoZSB0aW1lUmFuZ2VzIHByb3ZpZGVkIGFyZSBvdmVyIHRoZSBtYXhJbmRleFxuICovXG5mdW5jdGlvbiByYW5nZUNoZWNrKGZuTmFtZSwgaW5kZXgsIG1heEluZGV4KSB7XG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IG1heEluZGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ1wiICsgZm5OYW1lICsgXCInIG9uICdUaW1lUmFuZ2VzJzogVGhlIGluZGV4IHByb3ZpZGVkIChcIiArIGluZGV4ICsgXCIpIGlzIG5vbi1udW1lcmljIG9yIG91dCBvZiBib3VuZHMgKDAtXCIgKyBtYXhJbmRleCArIFwiKS5cIik7XG4gIH1cbn1cbi8qKlxuICogR2V0IHRoZSB0aW1lIGZvciB0aGUgc3BlY2lmaWVkIGluZGV4IGF0IHRoZSBzdGFydCBvciBlbmRcbiAqIG9mIGEgVGltZVJhbmdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICAge3N0cmluZ30gZm5OYW1lXG4gKiAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcbiAqXG4gKiBAcGFyYW0gICAgICB7c3RyaW5nfSB2YWx1ZUluZGV4XG4gKiAgICAgICAgICAgICBUaGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBnZXQgdGhlIHRpbWUuIHNob3VsZCBiZVxuICogICAgICAgICAgICAgJ3N0YXJ0JyBvciAnZW5kJ1xuICpcbiAqIEBwYXJhbSAgICAgIHtBcnJheX0gcmFuZ2VzXG4gKiAgICAgICAgICAgICBBbiBhcnJheSBvZiB0aW1lIHJhbmdlc1xuICpcbiAqIEBwYXJhbSAgICAgIHtBcnJheX0gW3JhbmdlSW5kZXg9MF1cbiAqICAgICAgICAgICAgIFRoZSBpbmRleCB0byBzdGFydCB0aGUgc2VhcmNoIGF0XG4gKlxuICogQHJldHVybiAgICAge251bWJlcn1cbiAqICAgICAgICAgICAgIFRoZSB0aW1lIHRoYXQgb2Zmc2V0IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gKlxuICogQGRlcHJlY2F0ZWQgcmFuZ2VJbmRleCBtdXN0IGJlIHNldCB0byBhIHZhbHVlLCBpbiB0aGUgZnV0dXJlIHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAqIEB0aHJvd3MgICAgIHtFcnJvcn0gaWYgcmFuZ2VJbmRleCBpcyBtb3JlIHRoYW4gdGhlIGxlbmd0aCBvZiByYW5nZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFJhbmdlKGZuTmFtZSwgdmFsdWVJbmRleCwgcmFuZ2VzLCByYW5nZUluZGV4KSB7XG4gIHJhbmdlQ2hlY2soZm5OYW1lLCByYW5nZUluZGV4LCByYW5nZXMubGVuZ3RoIC0gMSk7XG4gIHJldHVybiByYW5nZXNbcmFuZ2VJbmRleF1bdmFsdWVJbmRleF07XG59XG4vKipcbiAqIENyZWF0ZSBhIHRpbWUgcmFuZ2Ugb2JqZWN0IGdpdmVuIHJhbmdlcyBvZiB0aW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7QXJyYXl9IFtyYW5nZXNdXG4gKiAgICAgICAgICBBbiBhcnJheSBvZiB0aW1lIHJhbmdlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRpbWVSYW5nZXNPYmoocmFuZ2VzKSB7XG4gIGlmIChyYW5nZXMgPT09IHVuZGVmaW5lZCB8fCByYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIFRpbWVSYW5nZXMgb2JqZWN0IGlzIGVtcHR5Jyk7XG4gICAgICB9LFxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBUaW1lUmFuZ2VzIG9iamVjdCBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlbmd0aDogcmFuZ2VzLmxlbmd0aCxcbiAgICBzdGFydDogZ2V0UmFuZ2UuYmluZChudWxsLCAnc3RhcnQnLCAwLCByYW5nZXMpLFxuICAgIGVuZDogZ2V0UmFuZ2UuYmluZChudWxsLCAnZW5kJywgMSwgcmFuZ2VzKVxuICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBgVGltZVJhbmdlYCBvYmplY3Qgd2hpY2ggbWltaWNzIGFuXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RpbWVSYW5nZXN8SFRNTDUgVGltZVJhbmdlcyBpbnN0YW5jZX0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8QXJyYXlbXX0gc3RhcnRcbiAqICAgICAgICBUaGUgc3RhcnQgb2YgYSBzaW5nbGUgcmFuZ2UgKGEgbnVtYmVyKSBvciBhbiBhcnJheSBvZiByYW5nZXMgKGFuXG4gKiAgICAgICAgYXJyYXkgb2YgYXJyYXlzIG9mIHR3byBudW1iZXJzIGVhY2gpLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqICAgICAgICBUaGUgZW5kIG9mIGEgc2luZ2xlIHJhbmdlLiBDYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSBhcnJheSBmb3JtIG9mXG4gKiAgICAgICAgdGhlIGBzdGFydGAgYXJndW1lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVUaW1lUmFuZ2VzKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhcnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVSYW5nZXNPYmooc3RhcnQpO1xuICB9IGVsc2UgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZVJhbmdlc09iaigpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVRpbWVSYW5nZXNPYmooW1tzdGFydCwgZW5kXV0pO1xufVxuXG4vKipcbiAqIEBmaWxlIGJ1ZmZlci5qc1xuICogQG1vZHVsZSBidWZmZXJcbiAqL1xuLyoqXG4gKiBDb21wdXRlIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBtZWRpYSB0aGF0IGhhcyBiZWVuIGJ1ZmZlcmVkLlxuICpcbiAqIEBwYXJhbSB7VGltZVJhbmdlfSBidWZmZXJlZFxuICogICAgICAgIFRoZSBjdXJyZW50IGBUaW1lUmFuZ2VgIG9iamVjdCByZXByZXNlbnRpbmcgYnVmZmVyZWQgdGltZSByYW5nZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb25cbiAqICAgICAgICBUb3RhbCBkdXJhdGlvbiBvZiB0aGUgbWVkaWFcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiAgICAgICAgIFBlcmNlbnQgYnVmZmVyZWQgb2YgdGhlIHRvdGFsIGR1cmF0aW9uIGluIGRlY2ltYWwgZm9ybS5cbiAqL1xuXG5mdW5jdGlvbiBidWZmZXJlZFBlcmNlbnQoYnVmZmVyZWQsIGR1cmF0aW9uKSB7XG4gIHZhciBidWZmZXJlZER1cmF0aW9uID0gMDtcbiAgdmFyIHN0YXJ0O1xuICB2YXIgZW5kO1xuXG4gIGlmICghZHVyYXRpb24pIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmICghYnVmZmVyZWQgfHwgIWJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgIGJ1ZmZlcmVkID0gY3JlYXRlVGltZVJhbmdlcygwLCAwKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICBzdGFydCA9IGJ1ZmZlcmVkLnN0YXJ0KGkpO1xuICAgIGVuZCA9IGJ1ZmZlcmVkLmVuZChpKTsgLy8gYnVmZmVyZWQgZW5kIGNhbiBiZSBiaWdnZXIgdGhhbiBkdXJhdGlvbiBieSBhIHZlcnkgc21hbGwgZnJhY3Rpb25cblxuICAgIGlmIChlbmQgPiBkdXJhdGlvbikge1xuICAgICAgZW5kID0gZHVyYXRpb247XG4gICAgfVxuXG4gICAgYnVmZmVyZWREdXJhdGlvbiArPSBlbmQgLSBzdGFydDtcbiAgfVxuXG4gIHJldHVybiBidWZmZXJlZER1cmF0aW9uIC8gZHVyYXRpb247XG59XG5cbi8qKlxuICogQGZpbGUgZnVsbHNjcmVlbi1hcGkuanNcbiAqIEBtb2R1bGUgZnVsbHNjcmVlbi1hcGlcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogU3RvcmUgdGhlIGJyb3dzZXItc3BlY2lmaWMgbWV0aG9kcyBmb3IgdGhlIGZ1bGxzY3JlZW4gQVBJLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAc2VlIFtTcGVjaWZpY2F0aW9uXXtAbGluayBodHRwczovL2Z1bGxzY3JlZW4uc3BlYy53aGF0d2cub3JnfVxuICogQHNlZSBbTWFwIEFwcHJvYWNoIEZyb20gU2NyZWVuZnVsbC5qc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9zY3JlZW5mdWxsLmpzfVxuICovXG5cbnZhciBGdWxsc2NyZWVuQXBpID0ge1xuICBwcmVmaXhlZDogdHJ1ZVxufTsgLy8gYnJvd3NlciBBUEkgbWV0aG9kc1xuXG52YXIgYXBpTWFwID0gW1sncmVxdWVzdEZ1bGxzY3JlZW4nLCAnZXhpdEZ1bGxzY3JlZW4nLCAnZnVsbHNjcmVlbkVsZW1lbnQnLCAnZnVsbHNjcmVlbkVuYWJsZWQnLCAnZnVsbHNjcmVlbmNoYW5nZScsICdmdWxsc2NyZWVuZXJyb3InLCAnZnVsbHNjcmVlbiddLCAvLyBXZWJLaXRcblsnd2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4nLCAnd2Via2l0RXhpdEZ1bGxzY3JlZW4nLCAnd2Via2l0RnVsbHNjcmVlbkVsZW1lbnQnLCAnd2Via2l0RnVsbHNjcmVlbkVuYWJsZWQnLCAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsICd3ZWJraXRmdWxsc2NyZWVuZXJyb3InLCAnLXdlYmtpdC1mdWxsLXNjcmVlbiddLCAvLyBNb3ppbGxhXG5bJ21velJlcXVlc3RGdWxsU2NyZWVuJywgJ21vekNhbmNlbEZ1bGxTY3JlZW4nLCAnbW96RnVsbFNjcmVlbkVsZW1lbnQnLCAnbW96RnVsbFNjcmVlbkVuYWJsZWQnLCAnbW96ZnVsbHNjcmVlbmNoYW5nZScsICdtb3pmdWxsc2NyZWVuZXJyb3InLCAnLW1vei1mdWxsLXNjcmVlbiddLCAvLyBNaWNyb3NvZnRcblsnbXNSZXF1ZXN0RnVsbHNjcmVlbicsICdtc0V4aXRGdWxsc2NyZWVuJywgJ21zRnVsbHNjcmVlbkVsZW1lbnQnLCAnbXNGdWxsc2NyZWVuRW5hYmxlZCcsICdNU0Z1bGxzY3JlZW5DaGFuZ2UnLCAnTVNGdWxsc2NyZWVuRXJyb3InLCAnLW1zLWZ1bGxzY3JlZW4nXV07XG52YXIgc3BlY0FwaSA9IGFwaU1hcFswXTtcbnZhciBicm93c2VyQXBpOyAvLyBkZXRlcm1pbmUgdGhlIHN1cHBvcnRlZCBzZXQgb2YgZnVuY3Rpb25zXG5cbmZvciAodmFyIGkgPSAwOyBpIDwgYXBpTWFwLmxlbmd0aDsgaSsrKSB7XG4gIC8vIGNoZWNrIGZvciBleGl0RnVsbHNjcmVlbiBmdW5jdGlvblxuICBpZiAoYXBpTWFwW2ldWzFdIGluIGRvY3VtZW50KSB7XG4gICAgYnJvd3NlckFwaSA9IGFwaU1hcFtpXTtcbiAgICBicmVhaztcbiAgfVxufSAvLyBtYXAgdGhlIGJyb3dzZXIgQVBJIG5hbWVzIHRvIHRoZSBzcGVjIEFQSSBuYW1lc1xuXG5cbmlmIChicm93c2VyQXBpKSB7XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBicm93c2VyQXBpLmxlbmd0aDsgX2krKykge1xuICAgIEZ1bGxzY3JlZW5BcGlbc3BlY0FwaVtfaV1dID0gYnJvd3NlckFwaVtfaV07XG4gIH1cblxuICBGdWxsc2NyZWVuQXBpLnByZWZpeGVkID0gYnJvd3NlckFwaVswXSAhPT0gc3BlY0FwaVswXTtcbn1cblxuLyoqXG4gKiBAZmlsZSBtZWRpYS1lcnJvci5qc1xuICovXG4vKipcbiAqIEEgQ3VzdG9tIGBNZWRpYUVycm9yYCBjbGFzcyB3aGljaCBtaW1pY3MgdGhlIHN0YW5kYXJkIEhUTUw1IGBNZWRpYUVycm9yYCBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd8T2JqZWN0fE1lZGlhRXJyb3J9IHZhbHVlXG4gKiAgICAgICAgVGhpcyBjYW4gYmUgb2YgbXVsdGlwbGUgdHlwZXM6XG4gKiAgICAgICAgLSBudW1iZXI6IHNob3VsZCBiZSBhIHN0YW5kYXJkIGVycm9yIGNvZGVcbiAqICAgICAgICAtIHN0cmluZzogYW4gZXJyb3IgbWVzc2FnZSAodGhlIGNvZGUgd2lsbCBiZSAwKVxuICogICAgICAgIC0gT2JqZWN0OiBhcmJpdHJhcnkgcHJvcGVydGllc1xuICogICAgICAgIC0gYE1lZGlhRXJyb3JgIChuYXRpdmUpOiB1c2VkIHRvIHBvcHVsYXRlIGEgdmlkZW8uanMgYE1lZGlhRXJyb3JgIG9iamVjdFxuICogICAgICAgIC0gYE1lZGlhRXJyb3JgICh2aWRlby5qcyk6IHdpbGwgcmV0dXJuIGl0c2VsZiBpZiBpdCdzIGFscmVhZHkgYVxuICogICAgICAgICAgdmlkZW8uanMgYE1lZGlhRXJyb3JgIG9iamVjdC5cbiAqXG4gKiBAc2VlIFtNZWRpYUVycm9yIFNwZWNde0BsaW5rIGh0dHBzOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjLWF1dGhvci12aWV3L3ZpZGVvLmh0bWwjbWVkaWFlcnJvcn1cbiAqIEBzZWUgW0VuY3J5cHRlZCBNZWRpYUVycm9yIFNwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWVuY3J5cHRlZC1tZWRpYS0yMDEzMDUxMC8jZXJyb3ItY29kZXN9XG4gKlxuICogQGNsYXNzIE1lZGlhRXJyb3JcbiAqL1xuXG5mdW5jdGlvbiBNZWRpYUVycm9yKHZhbHVlKSB7XG4gIC8vIEFsbG93IHJlZHVuZGFudCBjYWxscyB0byB0aGlzIGNvbnN0cnVjdG9yIHRvIGF2b2lkIGhhdmluZyBgaW5zdGFuY2VvZmBcbiAgLy8gY2hlY2tzIHBlcHBlcmVkIGFyb3VuZCB0aGUgY29kZS5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWVkaWFFcnJvcikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhpcy5jb2RlID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIC8vIGRlZmF1bHQgY29kZSBpcyB6ZXJvLCBzbyB0aGlzIGlzIGEgY3VzdG9tIGVycm9yXG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgLy8gV2UgYXNzaWduIHRoZSBgY29kZWAgcHJvcGVydHkgbWFudWFsbHkgYmVjYXVzZSBuYXRpdmUgYE1lZGlhRXJyb3JgIG9iamVjdHNcbiAgICAvLyBkbyBub3QgZXhwb3NlIGl0IGFzIGFuIG93bi9lbnVtZXJhYmxlIHByb3BlcnR5IG9mIHRoZSBvYmplY3QuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5jb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5jb2RlID0gdmFsdWUuY29kZTtcbiAgICB9XG5cbiAgICBhc3NpZ24odGhpcywgdmFsdWUpO1xuICB9XG5cbiAgaWYgKCF0aGlzLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBNZWRpYUVycm9yLmRlZmF1bHRNZXNzYWdlc1t0aGlzLmNvZGVdIHx8ICcnO1xuICB9XG59XG4vKipcbiAqIFRoZSBlcnJvciBjb2RlIHRoYXQgcmVmZXJzIHR3byBvbmUgb2YgdGhlIGRlZmluZWQgYE1lZGlhRXJyb3JgIHR5cGVzXG4gKlxuICogQHR5cGUge051bWJlcn1cbiAqL1xuXG5cbk1lZGlhRXJyb3IucHJvdG90eXBlLmNvZGUgPSAwO1xuLyoqXG4gKiBBbiBvcHRpb25hbCBtZXNzYWdlIHRoYXQgdG8gc2hvdyB3aXRoIHRoZSBlcnJvci4gTWVzc2FnZSBpcyBub3QgcGFydCBvZiB0aGUgSFRNTDVcbiAqIHZpZGVvIHNwZWMgYnV0IGFsbG93cyBmb3IgbW9yZSBpbmZvcm1hdGl2ZSBjdXN0b20gZXJyb3JzLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cblxuTWVkaWFFcnJvci5wcm90b3R5cGUubWVzc2FnZSA9ICcnO1xuLyoqXG4gKiBBbiBvcHRpb25hbCBzdGF0dXMgY29kZSB0aGF0IGNhbiBiZSBzZXQgYnkgcGx1Z2lucyB0byBhbGxvdyBldmVuIG1vcmUgZGV0YWlsIGFib3V0XG4gKiB0aGUgZXJyb3IuIEZvciBleGFtcGxlIGEgcGx1Z2luIG1pZ2h0IHByb3ZpZGUgYSBzcGVjaWZpYyBIVFRQIHN0YXR1cyBjb2RlIGFuZCBhblxuICogZXJyb3IgbWVzc2FnZSBmb3IgdGhhdCBjb2RlLiBUaGVuIHdoZW4gdGhlIHBsdWdpbiBnZXRzIHRoYXQgZXJyb3IgdGhpcyBjbGFzcyB3aWxsXG4gKiBrbm93IGhvdyB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgZm9yIGl0LiBUaGlzIGFsbG93cyBhIGN1c3RvbSBtZXNzYWdlIHRvIHNob3dcbiAqIHVwIG9uIHRoZSBgUGxheWVyYCBlcnJvciBvdmVybGF5LlxuICpcbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG5NZWRpYUVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBudWxsO1xuLyoqXG4gKiBFcnJvcnMgaW5kZXhlZCBieSB0aGUgVzNDIHN0YW5kYXJkLiBUaGUgb3JkZXIgKipDQU5OT1QgQ0hBTkdFKiohIFNlZSB0aGVcbiAqIHNwZWNpZmljYXRpb24gbGlzdGVkIHVuZGVyIHtAbGluayBNZWRpYUVycm9yfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZW51bSB7YXJyYXl9XG4gKiBAcmVhZG9ubHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSAwIC0gTUVESUFfRVJSX0NVU1RPTVxuICogQHByb3BlcnR5IHtzdHJpbmd9IDEgLSBNRURJQV9FUlJfQUJPUlRFRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IDIgLSBNRURJQV9FUlJfTkVUV09SS1xuICogQHByb3BlcnR5IHtzdHJpbmd9IDMgLSBNRURJQV9FUlJfREVDT0RFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gNCAtIE1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IDUgLSBNRURJQV9FUlJfRU5DUllQVEVEXG4gKi9cblxuTWVkaWFFcnJvci5lcnJvclR5cGVzID0gWydNRURJQV9FUlJfQ1VTVE9NJywgJ01FRElBX0VSUl9BQk9SVEVEJywgJ01FRElBX0VSUl9ORVRXT1JLJywgJ01FRElBX0VSUl9ERUNPREUnLCAnTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEJywgJ01FRElBX0VSUl9FTkNSWVBURUQnXTtcbi8qKlxuICogVGhlIGRlZmF1bHQgYE1lZGlhRXJyb3JgIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSB7QGxpbmsgTWVkaWFFcnJvci5lcnJvclR5cGVzfS5cbiAqXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAY29uc3RhbnRcbiAqL1xuXG5NZWRpYUVycm9yLmRlZmF1bHRNZXNzYWdlcyA9IHtcbiAgMTogJ1lvdSBhYm9ydGVkIHRoZSBtZWRpYSBwbGF5YmFjaycsXG4gIDI6ICdBIG5ldHdvcmsgZXJyb3IgY2F1c2VkIHRoZSBtZWRpYSBkb3dubG9hZCB0byBmYWlsIHBhcnQtd2F5LicsXG4gIDM6ICdUaGUgbWVkaWEgcGxheWJhY2sgd2FzIGFib3J0ZWQgZHVlIHRvIGEgY29ycnVwdGlvbiBwcm9ibGVtIG9yIGJlY2F1c2UgdGhlIG1lZGlhIHVzZWQgZmVhdHVyZXMgeW91ciBicm93c2VyIGRpZCBub3Qgc3VwcG9ydC4nLFxuICA0OiAnVGhlIG1lZGlhIGNvdWxkIG5vdCBiZSBsb2FkZWQsIGVpdGhlciBiZWNhdXNlIHRoZSBzZXJ2ZXIgb3IgbmV0d29yayBmYWlsZWQgb3IgYmVjYXVzZSB0aGUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuJyxcbiAgNTogJ1RoZSBtZWRpYSBpcyBlbmNyeXB0ZWQgYW5kIHdlIGRvIG5vdCBoYXZlIHRoZSBrZXlzIHRvIGRlY3J5cHQgaXQuJ1xufTsgLy8gQWRkIHR5cGVzIGFzIHByb3BlcnRpZXMgb24gTWVkaWFFcnJvclxuLy8gZS5nLiBNZWRpYUVycm9yLk1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRCA9IDQ7XG5cbmZvciAodmFyIGVyck51bSA9IDA7IGVyck51bSA8IE1lZGlhRXJyb3IuZXJyb3JUeXBlcy5sZW5ndGg7IGVyck51bSsrKSB7XG4gIE1lZGlhRXJyb3JbTWVkaWFFcnJvci5lcnJvclR5cGVzW2Vyck51bV1dID0gZXJyTnVtOyAvLyB2YWx1ZXMgc2hvdWxkIGJlIGFjY2Vzc2libGUgb24gYm90aCB0aGUgY2xhc3MgYW5kIGluc3RhbmNlXG5cbiAgTWVkaWFFcnJvci5wcm90b3R5cGVbTWVkaWFFcnJvci5lcnJvclR5cGVzW2Vyck51bV1dID0gZXJyTnVtO1xufSAvLyBqc2RvY3MgZm9yIGluc3RhbmNlL3N0YXRpYyBtZW1iZXJzIGFkZGVkIGFib3ZlXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBpcyBgUHJvbWlzZWAtbGlrZSAoaS5lLiBoYXMgYSBgdGhlbmAgbWV0aG9kKS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9ICB2YWx1ZVxuICogICAgICAgICBBbiBvYmplY3QgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBgUHJvbWlzZWAtbGlrZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGBQcm9taXNlYC1saWtlLlxuICovXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIFNpbGVuY2UgYSBQcm9taXNlLWxpa2Ugb2JqZWN0LlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBhdm9pZGluZyBub24taGFybWZ1bCwgYnV0IHBvdGVudGlhbGx5IGNvbmZ1c2luZyBcInVuY2F1Z2h0XG4gKiBwbGF5IHByb21pc2VcIiByZWplY3Rpb24gZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB2YWx1ZVxuICogICAgICAgICBBbiBvYmplY3QgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBgUHJvbWlzZWAtbGlrZS5cbiAqL1xuXG5mdW5jdGlvbiBzaWxlbmNlUHJvbWlzZSh2YWx1ZSkge1xuICBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgIHZhbHVlLnRoZW4obnVsbCwgZnVuY3Rpb24gKGUpIHt9KTtcbiAgfVxufVxuXG4vKipcbiAqIEBmaWxlIHRleHQtdHJhY2stbGlzdC1jb252ZXJ0ZXIuanMgVXRpbGl0aWVzIGZvciBjYXB0dXJpbmcgdGV4dCB0cmFjayBzdGF0ZSBhbmRcbiAqIHJlLWNyZWF0aW5nIHRyYWNrcyBiYXNlZCBvbiBhIGNhcHR1cmUuXG4gKlxuICogQG1vZHVsZSB0ZXh0LXRyYWNrLWxpc3QtY29udmVydGVyXG4gKi9cblxuLyoqXG4gKiBFeGFtaW5lIGEgc2luZ2xlIHtAbGluayBUZXh0VHJhY2t9IGFuZCByZXR1cm4gYSBKU09OLWNvbXBhdGlibGUgamF2YXNjcmlwdCBvYmplY3QgdGhhdFxuICogcmVwcmVzZW50cyB0aGUge0BsaW5rIFRleHRUcmFja30ncyBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge1RleHRUcmFja30gdHJhY2tcbiAqICAgICAgICBUaGUgdGV4dCB0cmFjayB0byBxdWVyeS5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgICAgICAgIEEgc2VyaWFsaXphYmxlIGphdmFzY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRleHRUcmFjay5cbiAqIEBwcml2YXRlXG4gKi9cbnZhciB0cmFja1RvSnNvbl8gPSBmdW5jdGlvbiB0cmFja1RvSnNvbl8odHJhY2spIHtcbiAgdmFyIHJldCA9IFsna2luZCcsICdsYWJlbCcsICdsYW5ndWFnZScsICdpZCcsICdpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlJywgJ21vZGUnLCAnc3JjJ10ucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3AsIGkpIHtcbiAgICBpZiAodHJhY2tbcHJvcF0pIHtcbiAgICAgIGFjY1twcm9wXSA9IHRyYWNrW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHtcbiAgICBjdWVzOiB0cmFjay5jdWVzICYmIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0cmFjay5jdWVzLCBmdW5jdGlvbiAoY3VlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFRpbWU6IGN1ZS5zdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWU6IGN1ZS5lbmRUaW1lLFxuICAgICAgICB0ZXh0OiBjdWUudGV4dCxcbiAgICAgICAgaWQ6IGN1ZS5pZFxuICAgICAgfTtcbiAgICB9KVxuICB9KTtcbiAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIEV4YW1pbmUgYSB7QGxpbmsgVGVjaH0gYW5kIHJldHVybiBhIEpTT04tY29tcGF0aWJsZSBqYXZhc2NyaXB0IGFycmF5IHRoYXQgcmVwcmVzZW50cyB0aGVcbiAqIHN0YXRlIG9mIGFsbCB7QGxpbmsgVGV4dFRyYWNrfXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuIFRoZSByZXR1cm4gYXJyYXkgaXMgY29tcGF0aWJsZSB3aXRoXG4gKiB7QGxpbmsgdGV4dC10cmFjay1saXN0LWNvbnZlcnRlcjpqc29uVG9UZXh0VHJhY2tzfS5cbiAqXG4gKiBAcGFyYW0ge1RlY2h9IHRlY2hcbiAqICAgICAgICBUaGUgdGVjaCBvYmplY3QgdG8gcXVlcnlcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqICAgICAgICAgQSBzZXJpYWxpemFibGUgamF2YXNjcmlwdCByZXByZXNlbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRlY2h9c1xuICogICAgICAgICB7QGxpbmsgVGV4dFRyYWNrTGlzdH0uXG4gKi9cblxuXG52YXIgdGV4dFRyYWNrc1RvSnNvbiA9IGZ1bmN0aW9uIHRleHRUcmFja3NUb0pzb24odGVjaCkge1xuICB2YXIgdHJhY2tFbHMgPSB0ZWNoLiQkKCd0cmFjaycpO1xuICB2YXIgdHJhY2tPYmpzID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHRyYWNrRWxzLCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0LnRyYWNrO1xuICB9KTtcbiAgdmFyIHRyYWNrcyA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0cmFja0VscywgZnVuY3Rpb24gKHRyYWNrRWwpIHtcbiAgICB2YXIganNvbiA9IHRyYWNrVG9Kc29uXyh0cmFja0VsLnRyYWNrKTtcblxuICAgIGlmICh0cmFja0VsLnNyYykge1xuICAgICAganNvbi5zcmMgPSB0cmFja0VsLnNyYztcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfSk7XG4gIHJldHVybiB0cmFja3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0ZWNoLnRleHRUcmFja3MoKSwgZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgcmV0dXJuIHRyYWNrT2Jqcy5pbmRleE9mKHRyYWNrKSA9PT0gLTE7XG4gIH0pLm1hcCh0cmFja1RvSnNvbl8pKTtcbn07XG4vKipcbiAqIENyZWF0ZSBhIHNldCBvZiByZW1vdGUge0BsaW5rIFRleHRUcmFja31zIG9uIGEge0BsaW5rIFRlY2h9IGJhc2VkIG9uIGFuIGFycmF5IG9mIGphdmFzY3JpcHRcbiAqIG9iamVjdCB7QGxpbmsgVGV4dFRyYWNrfSByZXByZXNlbnRhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0ganNvblxuICogICAgICAgIEFuIGFycmF5IG9mIGBUZXh0VHJhY2tgIHJlcHJlc2VudGF0aW9uIG9iamVjdHMsIGxpa2UgdGhvc2UgdGhhdCB3b3VsZCBiZVxuICogICAgICAgIHByb2R1Y2VkIGJ5IGB0ZXh0VHJhY2tzVG9Kc29uYC5cbiAqXG4gKiBAcGFyYW0ge1RlY2h9IHRlY2hcbiAqICAgICAgICBUaGUgYFRlY2hgIHRvIGNyZWF0ZSB0aGUgYFRleHRUcmFja2BzIG9uLlxuICovXG5cblxudmFyIGpzb25Ub1RleHRUcmFja3MgPSBmdW5jdGlvbiBqc29uVG9UZXh0VHJhY2tzKGpzb24sIHRlY2gpIHtcbiAganNvbi5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgIHZhciBhZGRlZFRyYWNrID0gdGVjaC5hZGRSZW1vdGVUZXh0VHJhY2sodHJhY2spLnRyYWNrO1xuXG4gICAgaWYgKCF0cmFjay5zcmMgJiYgdHJhY2suY3Vlcykge1xuICAgICAgdHJhY2suY3Vlcy5mb3JFYWNoKGZ1bmN0aW9uIChjdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZGVkVHJhY2suYWRkQ3VlKGN1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGVjaC50ZXh0VHJhY2tzKCk7XG59O1xuXG52YXIgdGV4dFRyYWNrQ29udmVydGVyID0ge1xuICB0ZXh0VHJhY2tzVG9Kc29uOiB0ZXh0VHJhY2tzVG9Kc29uLFxuICBqc29uVG9UZXh0VHJhY2tzOiBqc29uVG9UZXh0VHJhY2tzLFxuICB0cmFja1RvSnNvbl86IHRyYWNrVG9Kc29uX1xufTtcblxudmFyIE1PREFMX0NMQVNTX05BTUUgPSAndmpzLW1vZGFsLWRpYWxvZyc7XG4vKipcbiAqIFRoZSBgTW9kYWxEaWFsb2dgIGRpc3BsYXlzIG92ZXIgdGhlIHZpZGVvIGFuZCBpdHMgY29udHJvbHMsIHdoaWNoIGJsb2Nrc1xuICogaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGxheWVyIHVudGlsIGl0IGlzIGNsb3NlZC5cbiAqXG4gKiBNb2RhbCBkaWFsb2dzIGluY2x1ZGUgYSBcIkNsb3NlXCIgYnV0dG9uIGFuZCB3aWxsIGNsb3NlIHdoZW4gdGhhdCBidXR0b25cbiAqIGlzIGFjdGl2YXRlZCAtIG9yIHdoZW4gRVNDIGlzIHByZXNzZWQgYW55d2hlcmUuXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIE1vZGFsRGlhbG9nID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vZGFsRGlhbG9nLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBbb3B0aW9ucy5jb250ZW50PXVuZGVmaW5lZF1cbiAgICogICAgICAgIFByb3ZpZGUgY3VzdG9taXplZCBjb250ZW50IGZvciB0aGlzIG1vZGFsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGVzY3JpcHRpb25dXG4gICAqICAgICAgICBBIHRleHQgZGVzY3JpcHRpb24gZm9yIHRoZSBtb2RhbCwgcHJpbWFyaWx5IGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZpbGxBbHdheXM9ZmFsc2VdXG4gICAqICAgICAgICBOb3JtYWxseSwgbW9kYWxzIGFyZSBhdXRvbWF0aWNhbGx5IGZpbGxlZCBvbmx5IHRoZSBmaXJzdCB0aW1lXG4gICAqICAgICAgICB0aGV5IG9wZW4uIFRoaXMgdGVsbHMgdGhlIG1vZGFsIHRvIHJlZnJlc2ggaXRzIGNvbnRlbnRcbiAgICogICAgICAgIGV2ZXJ5IHRpbWUgaXQgb3BlbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cbiAgICogICAgICAgIEEgdGV4dCBsYWJlbCBmb3IgdGhlIG1vZGFsLCBwcmltYXJpbHkgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGF1c2VPbk9wZW49dHJ1ZV1cbiAgICogICAgICAgIElmIGB0cnVlYCwgcGxheWJhY2sgd2lsbCB3aWxsIGJlIHBhdXNlZCBpZiBwbGF5aW5nIHdoZW5cbiAgICogICAgICAgIHRoZSBtb2RhbCBvcGVucywgYW5kIHJlc3VtZWQgd2hlbiBpdCBjbG9zZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGVtcG9yYXJ5PXRydWVdXG4gICAqICAgICAgICBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCBjYW4gb25seSBiZSBvcGVuZWQgb25jZTsgaXQgd2lsbCBiZVxuICAgKiAgICAgICAgZGlzcG9zZWQgYXMgc29vbiBhcyBpdCdzIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51bmNsb3NlYWJsZT1mYWxzZV1cbiAgICogICAgICAgIElmIGB0cnVlYCwgdGhlIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBjbG9zZSB0aGUgbW9kYWxcbiAgICogICAgICAgIHRocm91Z2ggdGhlIFVJIGluIHRoZSBub3JtYWwgd2F5cy4gUHJvZ3JhbW1hdGljIGNsb3NpbmcgaXNcbiAgICogICAgICAgIHN0aWxsIHBvc3NpYmxlLlxuICAgKi9cbiAgZnVuY3Rpb24gTW9kYWxEaWFsb2cocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLm9wZW5lZF8gPSBfdGhpcy5oYXNCZWVuT3BlbmVkXyA9IF90aGlzLmhhc0JlZW5GaWxsZWRfID0gZmFsc2U7XG5cbiAgICBfdGhpcy5jbG9zZWFibGUoIV90aGlzLm9wdGlvbnNfLnVuY2xvc2VhYmxlKTtcblxuICAgIF90aGlzLmNvbnRlbnQoX3RoaXMub3B0aW9uc18uY29udGVudCk7IC8vIE1ha2Ugc3VyZSB0aGUgY29udGVudEVsIGlzIGRlZmluZWQgQUZURVIgYW55IGNoaWxkcmVuIGFyZSBpbml0aWFsaXplZFxuICAgIC8vIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRoZSBjb250ZW50cyBvZiB0aGUgbW9kYWwgaW4gdGhlIGNvbnRlbnRFbFxuICAgIC8vIChub3QgdGhlIFVJIGVsZW1lbnRzIGxpa2UgdGhlIGNsb3NlIGJ1dHRvbikuXG5cblxuICAgIF90aGlzLmNvbnRlbnRFbF8gPSBjcmVhdGVFbCgnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiBNT0RBTF9DTEFTU19OQU1FICsgXCItY29udGVudFwiXG4gICAgfSwge1xuICAgICAgcm9sZTogJ2RvY3VtZW50J1xuICAgIH0pO1xuICAgIF90aGlzLmRlc2NFbF8gPSBjcmVhdGVFbCgncCcsIHtcbiAgICAgIGNsYXNzTmFtZTogTU9EQUxfQ0xBU1NfTkFNRSArIFwiLWRlc2NyaXB0aW9uIHZqcy1jb250cm9sLXRleHRcIixcbiAgICAgIGlkOiBfdGhpcy5lbCgpLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgfSk7XG4gICAgdGV4dENvbnRlbnQoX3RoaXMuZGVzY0VsXywgX3RoaXMuZGVzY3JpcHRpb24oKSk7XG5cbiAgICBfdGhpcy5lbF8uYXBwZW5kQ2hpbGQoX3RoaXMuZGVzY0VsXyk7XG5cbiAgICBfdGhpcy5lbF8uYXBwZW5kQ2hpbGQoX3RoaXMuY29udGVudEVsXyk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYE1vZGFsRGlhbG9nYCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIERPTSBlbGVtZW50IHRoYXQgZ2V0cyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb2RhbERpYWxvZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogdGhpcy5idWlsZENTU0NsYXNzKCksXG4gICAgICB0YWJJbmRleDogLTFcbiAgICB9LCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHRoaXMuaWQoKSArIFwiX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG4gICAgICAnYXJpYS1sYWJlbCc6IHRoaXMubGFiZWwoKSxcbiAgICAgICdyb2xlJzogJ2RpYWxvZydcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5jb250ZW50RWxfID0gbnVsbDtcbiAgICB0aGlzLmRlc2NFbF8gPSBudWxsO1xuICAgIHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXyA9IG51bGw7XG5cbiAgICBfQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgZGVmYXVsdCBET00gYGNsYXNzTmFtZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgRE9NIGBjbGFzc05hbWVgIGZvciB0aGlzIG9iamVjdC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVpbGRDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIE1PREFMX0NMQVNTX05BTUUgKyBcIiB2anMtaGlkZGVuIFwiICsgX0NvbXBvbmVudC5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcgZm9yIHRoaXMgbW9kYWwuIFByaW1hcmlseSB1c2VkIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgdGhlIGxvY2FsaXplZCBvciByYXcgbGFiZWwgb2YgdGhpcyBtb2RhbC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGFiZWwgPSBmdW5jdGlvbiBsYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLmxhYmVsIHx8ICdNb2RhbCBXaW5kb3cnKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciB0aGlzIG1vZGFsLiBQcmltYXJpbHkgdXNlZCBmb3JcbiAgICogYWNjZXNzaWJpbGl0eS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBsb2NhbGl6ZWQgb3IgcmF3IGRlc2NyaXB0aW9uIG9mIHRoaXMgbW9kYWwuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgdmFyIGRlc2MgPSB0aGlzLm9wdGlvbnNfLmRlc2NyaXB0aW9uIHx8IHRoaXMubG9jYWxpemUoJ1RoaXMgaXMgYSBtb2RhbCB3aW5kb3cuJyk7IC8vIEFwcGVuZCBhIHVuaXZlcnNhbCBjbG9zZWFiaWxpdHkgbWVzc2FnZSBpZiB0aGUgbW9kYWwgaXMgY2xvc2VhYmxlLlxuXG4gICAgaWYgKHRoaXMuY2xvc2VhYmxlKCkpIHtcbiAgICAgIGRlc2MgKz0gJyAnICsgdGhpcy5sb2NhbGl6ZSgnVGhpcyBtb2RhbCBjYW4gYmUgY2xvc2VkIGJ5IHByZXNzaW5nIHRoZSBFc2NhcGUga2V5IG9yIGFjdGl2YXRpbmcgdGhlIGNsb3NlIGJ1dHRvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfVxuICAvKipcbiAgICogT3BlbnMgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZmlyZXMgTW9kYWxEaWFsb2cjYmVmb3JlbW9kYWxvcGVuXG4gICAqIEBmaXJlcyBNb2RhbERpYWxvZyNtb2RhbG9wZW5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ub3BlbiA9IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5lZF8pIHtcbiAgICAgIHZhciBwbGF5ZXIgPSB0aGlzLnBsYXllcigpO1xuICAgICAgLyoqXG4gICAgICAgICogRmlyZWQganVzdCBiZWZvcmUgYSBgTW9kYWxEaWFsb2dgIGlzIG9wZW5lZC5cbiAgICAgICAgKlxuICAgICAgICAqIEBldmVudCBNb2RhbERpYWxvZyNiZWZvcmVtb2RhbG9wZW5cbiAgICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgICovXG5cbiAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlbW9kYWxvcGVuJyk7XG4gICAgICB0aGlzLm9wZW5lZF8gPSB0cnVlOyAvLyBGaWxsIGNvbnRlbnQgaWYgdGhlIG1vZGFsIGhhcyBuZXZlciBvcGVuZWQgYmVmb3JlIGFuZFxuICAgICAgLy8gbmV2ZXIgYmVlbiBmaWxsZWQuXG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNfLmZpbGxBbHdheXMgfHwgIXRoaXMuaGFzQmVlbk9wZW5lZF8gJiYgIXRoaXMuaGFzQmVlbkZpbGxlZF8pIHtcbiAgICAgICAgdGhpcy5maWxsKCk7XG4gICAgICB9IC8vIElmIHRoZSBwbGF5ZXIgd2FzIHBsYXlpbmcsIHBhdXNlIGl0IGFuZCB0YWtlIG5vdGUgb2YgaXRzIHByZXZpb3VzbHlcbiAgICAgIC8vIHBsYXlpbmcgc3RhdGUuXG5cblxuICAgICAgdGhpcy53YXNQbGF5aW5nXyA9ICFwbGF5ZXIucGF1c2VkKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNfLnBhdXNlT25PcGVuICYmIHRoaXMud2FzUGxheWluZ18pIHtcbiAgICAgICAgcGxheWVyLnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub24oJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pOyAvLyBIaWRlIGNvbnRyb2xzIGFuZCBub3RlIGlmIHRoZXkgd2VyZSBlbmFibGVkLlxuXG4gICAgICB0aGlzLmhhZENvbnRyb2xzXyA9IHBsYXllci5jb250cm9scygpO1xuICAgICAgcGxheWVyLmNvbnRyb2xzKGZhbHNlKTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgdGhpcy5jb25kaXRpb25hbEZvY3VzXygpO1xuICAgICAgdGhpcy5lbCgpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgIC8qKlxuICAgICAgICAqIEZpcmVkIGp1c3QgYWZ0ZXIgYSBgTW9kYWxEaWFsb2dgIGlzIG9wZW5lZC5cbiAgICAgICAgKlxuICAgICAgICAqIEBldmVudCBNb2RhbERpYWxvZyNtb2RhbG9wZW5cbiAgICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgICovXG5cbiAgICAgIHRoaXMudHJpZ2dlcignbW9kYWxvcGVuJyk7XG4gICAgICB0aGlzLmhhc0JlZW5PcGVuZWRfID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZSBgTW9kYWxEaWFsb2dgIGlzIGN1cnJlbnRseSBvcGVuIG9yIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gW3ZhbHVlXVxuICAgKiAgICAgICAgIElmIGdpdmVuLCBpdCB3aWxsIG9wZW4gKGB0cnVlYCkgb3IgY2xvc2UgKGBmYWxzZWApIHRoZSBtb2RhbC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICB0aGUgY3VycmVudCBvcGVuIHN0YXRlIG9mIHRoZSBtb2RhbGRpYWxvZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5vcGVuZWQgPSBmdW5jdGlvbiBvcGVuZWQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXNbdmFsdWUgPyAnb3BlbicgOiAnY2xvc2UnXSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wZW5lZF87XG4gIH1cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbW9kYWwsIGRvZXMgbm90aGluZyBpZiB0aGUgYE1vZGFsRGlhbG9nYCBpc1xuICAgKiBub3Qgb3Blbi5cbiAgICpcbiAgICogQGZpcmVzIE1vZGFsRGlhbG9nI2JlZm9yZW1vZGFsY2xvc2VcbiAgICogQGZpcmVzIE1vZGFsRGlhbG9nI21vZGFsY2xvc2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY2xvc2UgPSBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMub3BlbmVkXykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwbGF5ZXIgPSB0aGlzLnBsYXllcigpO1xuICAgIC8qKlxuICAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSBhIGBNb2RhbERpYWxvZ2AgaXMgY2xvc2VkLlxuICAgICAgKlxuICAgICAgKiBAZXZlbnQgTW9kYWxEaWFsb2cjYmVmb3JlbW9kYWxjbG9zZVxuICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVtb2RhbGNsb3NlJyk7XG4gICAgdGhpcy5vcGVuZWRfID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy53YXNQbGF5aW5nXyAmJiB0aGlzLm9wdGlvbnNfLnBhdXNlT25PcGVuKSB7XG4gICAgICBwbGF5ZXIucGxheSgpO1xuICAgIH1cblxuICAgIHRoaXMub2ZmKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTtcblxuICAgIGlmICh0aGlzLmhhZENvbnRyb2xzXykge1xuICAgICAgcGxheWVyLmNvbnRyb2xzKHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuaGlkZSgpO1xuICAgIHRoaXMuZWwoKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAvKipcbiAgICAgICogRmlyZWQganVzdCBhZnRlciBhIGBNb2RhbERpYWxvZ2AgaXMgY2xvc2VkLlxuICAgICAgKlxuICAgICAgKiBAZXZlbnQgTW9kYWxEaWFsb2cjbW9kYWxjbG9zZVxuICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdtb2RhbGNsb3NlJyk7XG4gICAgdGhpcy5jb25kaXRpb25hbEJsdXJfKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zXy50ZW1wb3JhcnkpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBgTW9kYWxEaWFsb2dgIGlzIGNsb3NlYWJsZSB2aWEgdGhlIFVJLlxuICAgKlxuICAgKiBAcGFyYW0gIHtib29sZWFufSBbdmFsdWVdXG4gICAqICAgICAgICAgSWYgZ2l2ZW4gYXMgYSBib29sZWFuLCBpdCB3aWxsIHNldCB0aGUgYGNsb3NlYWJsZWAgb3B0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIFJldHVybnMgdGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBjbG9zYWJsZSBvcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNsb3NlYWJsZSA9IGZ1bmN0aW9uIGNsb3NlYWJsZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgdmFyIGNsb3NlYWJsZSA9IHRoaXMuY2xvc2VhYmxlXyA9ICEhdmFsdWU7XG4gICAgICB2YXIgY2xvc2UgPSB0aGlzLmdldENoaWxkKCdjbG9zZUJ1dHRvbicpOyAvLyBJZiB0aGlzIGlzIGJlaW5nIG1hZGUgY2xvc2VhYmxlIGFuZCBoYXMgbm8gY2xvc2UgYnV0dG9uLCBhZGQgb25lLlxuXG4gICAgICBpZiAoY2xvc2VhYmxlICYmICFjbG9zZSkge1xuICAgICAgICAvLyBUaGUgY2xvc2UgYnV0dG9uIHNob3VsZCBiZSBhIGNoaWxkIG9mIHRoZSBtb2RhbCAtIG5vdCBpdHNcbiAgICAgICAgLy8gY29udGVudCBlbGVtZW50LCBzbyB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGNvbnRlbnQgZWxlbWVudC5cbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmNvbnRlbnRFbF87XG4gICAgICAgIHRoaXMuY29udGVudEVsXyA9IHRoaXMuZWxfO1xuICAgICAgICBjbG9zZSA9IHRoaXMuYWRkQ2hpbGQoJ2Nsb3NlQnV0dG9uJywge1xuICAgICAgICAgIGNvbnRyb2xUZXh0OiAnQ2xvc2UgTW9kYWwgRGlhbG9nJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250ZW50RWxfID0gdGVtcDtcbiAgICAgICAgdGhpcy5vbihjbG9zZSwgJ2Nsb3NlJywgdGhpcy5jbG9zZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYmVpbmcgbWFkZSB1bmNsb3NlYWJsZSBhbmQgaGFzIGEgY2xvc2UgYnV0dG9uLCByZW1vdmUgaXQuXG5cblxuICAgICAgaWYgKCFjbG9zZWFibGUgJiYgY2xvc2UpIHtcbiAgICAgICAgdGhpcy5vZmYoY2xvc2UsICdjbG9zZScsIHRoaXMuY2xvc2UpO1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNsb3NlKTtcbiAgICAgICAgY2xvc2UuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNsb3NlYWJsZV87XG4gIH1cbiAgLyoqXG4gICAqIEZpbGwgdGhlIG1vZGFsJ3MgY29udGVudCBlbGVtZW50IHdpdGggdGhlIG1vZGFsJ3MgXCJjb250ZW50XCIgb3B0aW9uLlxuICAgKiBUaGUgY29udGVudCBlbGVtZW50IHdpbGwgYmUgZW1wdGllZCBiZWZvcmUgdGhpcyBjaGFuZ2UgdGFrZXMgcGxhY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZpbGwgPSBmdW5jdGlvbiBmaWxsKCkge1xuICAgIHRoaXMuZmlsbFdpdGgodGhpcy5jb250ZW50KCkpO1xuICB9XG4gIC8qKlxuICAgKiBGaWxsIHRoZSBtb2RhbCdzIGNvbnRlbnQgZWxlbWVudCB3aXRoIGFyYml0cmFyeSBjb250ZW50LlxuICAgKiBUaGUgY29udGVudCBlbGVtZW50IHdpbGwgYmUgZW1wdGllZCBiZWZvcmUgdGhpcyBjaGFuZ2UgdGFrZXMgcGxhY2UuXG4gICAqXG4gICAqIEBmaXJlcyBNb2RhbERpYWxvZyNiZWZvcmVtb2RhbGZpbGxcbiAgICogQGZpcmVzIE1vZGFsRGlhbG9nI21vZGFsZmlsbFxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBbY29udGVudF1cbiAgICogICAgICAgIFRoZSBzYW1lIHJ1bGVzIGFwcGx5IHRvIHRoaXMgYXMgYXBwbHkgdG8gdGhlIGBjb250ZW50YCBvcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZpbGxXaXRoID0gZnVuY3Rpb24gZmlsbFdpdGgoY29udGVudCkge1xuICAgIHZhciBjb250ZW50RWwgPSB0aGlzLmNvbnRlbnRFbCgpO1xuICAgIHZhciBwYXJlbnRFbCA9IGNvbnRlbnRFbC5wYXJlbnROb2RlO1xuICAgIHZhciBuZXh0U2libGluZ0VsID0gY29udGVudEVsLm5leHRTaWJsaW5nO1xuICAgIC8qKlxuICAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSBhIGBNb2RhbERpYWxvZ2AgaXMgZmlsbGVkIHdpdGggY29udGVudC5cbiAgICAgICpcbiAgICAgICogQGV2ZW50IE1vZGFsRGlhbG9nI2JlZm9yZW1vZGFsZmlsbFxuICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVtb2RhbGZpbGwnKTtcbiAgICB0aGlzLmhhc0JlZW5GaWxsZWRfID0gdHJ1ZTsgLy8gRGV0YWNoIHRoZSBjb250ZW50IGVsZW1lbnQgZnJvbSB0aGUgRE9NIGJlZm9yZSBwZXJmb3JtaW5nXG4gICAgLy8gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgbGl2ZSBET00gbXVsdGlwbGUgdGltZXMuXG5cbiAgICBwYXJlbnRFbC5yZW1vdmVDaGlsZChjb250ZW50RWwpO1xuICAgIHRoaXMuZW1wdHkoKTtcbiAgICBpbnNlcnRDb250ZW50KGNvbnRlbnRFbCwgY29udGVudCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciBhIGBNb2RhbERpYWxvZ2AgaXMgZmlsbGVkIHdpdGggY29udGVudC5cbiAgICAgKlxuICAgICAqIEBldmVudCBNb2RhbERpYWxvZyNtb2RhbGZpbGxcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ21vZGFsZmlsbCcpOyAvLyBSZS1pbmplY3QgdGhlIHJlLWZpbGxlZCBjb250ZW50IGVsZW1lbnQuXG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbCkge1xuICAgICAgcGFyZW50RWwuaW5zZXJ0QmVmb3JlKGNvbnRlbnRFbCwgbmV4dFNpYmxpbmdFbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKGNvbnRlbnRFbCk7XG4gICAgfSAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgY2xvc2UgYnV0dG9uIGlzIGxhc3QgaW4gdGhlIGRpYWxvZyBET01cblxuXG4gICAgdmFyIGNsb3NlQnV0dG9uID0gdGhpcy5nZXRDaGlsZCgnY2xvc2VCdXR0b24nKTtcblxuICAgIGlmIChjbG9zZUJ1dHRvbikge1xuICAgICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQoY2xvc2VCdXR0b24uZWxfKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEVtcHRpZXMgdGhlIGNvbnRlbnQgZWxlbWVudC4gVGhpcyBoYXBwZW5zIGFueXRpbWUgdGhlIG1vZGFsIGlzIGZpbGxlZC5cbiAgICpcbiAgICogQGZpcmVzIE1vZGFsRGlhbG9nI2JlZm9yZW1vZGFsZW1wdHlcbiAgICogQGZpcmVzIE1vZGFsRGlhbG9nI21vZGFsZW1wdHlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW1wdHkgPSBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICAvKipcbiAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIGEgYE1vZGFsRGlhbG9nYCBpcyBlbXB0aWVkLlxuICAgICpcbiAgICAqIEBldmVudCBNb2RhbERpYWxvZyNiZWZvcmVtb2RhbGVtcHR5XG4gICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgKi9cbiAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZW1vZGFsZW1wdHknKTtcbiAgICBlbXB0eUVsKHRoaXMuY29udGVudEVsKCkpO1xuICAgIC8qKlxuICAgICogRmlyZWQganVzdCBhZnRlciBhIGBNb2RhbERpYWxvZ2AgaXMgZW1wdGllZC5cbiAgICAqXG4gICAgKiBAZXZlbnQgTW9kYWxEaWFsb2cjbW9kYWxlbXB0eVxuICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ21vZGFsZW1wdHknKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBtb2RhbCBjb250ZW50LCB3aGljaCBnZXRzIG5vcm1hbGl6ZWQgYmVmb3JlIGJlaW5nXG4gICAqIHJlbmRlcmVkIGludG8gdGhlIERPTS5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCB1cGRhdGUgdGhlIERPTSBvciBmaWxsIHRoZSBtb2RhbCwgYnV0IGl0IGlzIGNhbGxlZCBkdXJpbmdcbiAgICogdGhhdCBwcm9jZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gIHtNaXhlZH0gW3ZhbHVlXVxuICAgKiAgICAgICAgIElmIGRlZmluZWQsIHNldHMgdGhlIGludGVybmFsIGNvbnRlbnQgdmFsdWUgdG8gYmUgdXNlZCBvbiB0aGVcbiAgICogICAgICAgICBuZXh0IGNhbGwocykgdG8gYGZpbGxgLiBUaGlzIHZhbHVlIGlzIG5vcm1hbGl6ZWQgYmVmb3JlIGJlaW5nXG4gICAqICAgICAgICAgaW5zZXJ0ZWQuIFRvIFwiY2xlYXJcIiB0aGUgaW50ZXJuYWwgY29udGVudCB2YWx1ZSwgcGFzcyBgbnVsbGAuXG4gICAqXG4gICAqIEByZXR1cm4ge01peGVkfVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlIG1vZGFsIGRpYWxvZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb250ZW50ID0gZnVuY3Rpb24gY29udGVudCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRfID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudF87XG4gIH1cbiAgLyoqXG4gICAqIGNvbmRpdGlvbmFsbHkgZm9jdXMgdGhlIG1vZGFsIGRpYWxvZyBpZiBmb2N1cyB3YXMgcHJldmlvdXNseSBvbiB0aGUgcGxheWVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25kaXRpb25hbEZvY3VzXyA9IGZ1bmN0aW9uIGNvbmRpdGlvbmFsRm9jdXNfKCkge1xuICAgIHZhciBhY3RpdmVFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgdmFyIHBsYXllckVsID0gdGhpcy5wbGF5ZXJfLmVsXztcbiAgICB0aGlzLnByZXZpb3VzbHlBY3RpdmVFbF8gPSBudWxsO1xuXG4gICAgaWYgKHBsYXllckVsLmNvbnRhaW5zKGFjdGl2ZUVsKSB8fCBwbGF5ZXJFbCA9PT0gYWN0aXZlRWwpIHtcbiAgICAgIHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXyA9IGFjdGl2ZUVsO1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWxseSBibHVyIHRoZSBlbGVtZW50IGFuZCByZWZvY3VzIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25kaXRpb25hbEJsdXJfID0gZnVuY3Rpb24gY29uZGl0aW9uYWxCbHVyXygpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c2x5QWN0aXZlRWxfKSB7XG4gICAgICB0aGlzLnByZXZpb3VzbHlBY3RpdmVFbF8uZm9jdXMoKTtcbiAgICAgIHRoaXMucHJldmlvdXNseUFjdGl2ZUVsXyA9IG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBLZXlkb3duIGhhbmRsZXIuIEF0dGFjaGVkIHdoZW4gbW9kYWwgaXMgZm9jdXNlZC5cbiAgICpcbiAgICogQGxpc3RlbnMga2V5ZG93blxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIC8vIERvIG5vdCBhbGxvdyBrZXlkb3ducyB0byByZWFjaCBvdXQgb2YgdGhlIG1vZGFsIGRpYWxvZy5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFc2NhcGUnKSAmJiB0aGlzLmNsb3NlYWJsZSgpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gZXhpdCBlYXJseSBpZiBpdCBpc24ndCBhIHRhYiBrZXlcblxuXG4gICAgaWYgKCFrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdUYWInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBmb2N1c2FibGVFbHMgPSB0aGlzLmZvY3VzYWJsZUVsc18oKTtcbiAgICB2YXIgYWN0aXZlRWwgPSB0aGlzLmVsXy5xdWVyeVNlbGVjdG9yKCc6Zm9jdXMnKTtcbiAgICB2YXIgZm9jdXNJbmRleDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9jdXNhYmxlRWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYWN0aXZlRWwgPT09IGZvY3VzYWJsZUVsc1tpXSkge1xuICAgICAgICBmb2N1c0luZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxfKSB7XG4gICAgICBmb2N1c0luZGV4ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZm9jdXNJbmRleCA9PT0gMCkge1xuICAgICAgZm9jdXNhYmxlRWxzW2ZvY3VzYWJsZUVscy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSAmJiBmb2N1c0luZGV4ID09PSBmb2N1c2FibGVFbHMubGVuZ3RoIC0gMSkge1xuICAgICAgZm9jdXNhYmxlRWxzWzBdLmZvY3VzKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogZ2V0IGFsbCBmb2N1c2FibGUgZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZm9jdXNhYmxlRWxzXyA9IGZ1bmN0aW9uIGZvY3VzYWJsZUVsc18oKSB7XG4gICAgdmFyIGFsbENoaWxkcmVuID0gdGhpcy5lbF8ucXVlcnlTZWxlY3RvckFsbCgnKicpO1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYWxsQ2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIChjaGlsZCBpbnN0YW5jZW9mIHdpbmRvdyQxLkhUTUxBbmNob3JFbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2Ygd2luZG93JDEuSFRNTEFyZWFFbGVtZW50KSAmJiBjaGlsZC5oYXNBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAoY2hpbGQgaW5zdGFuY2VvZiB3aW5kb3ckMS5IVE1MSW5wdXRFbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2Ygd2luZG93JDEuSFRNTFNlbGVjdEVsZW1lbnQgfHwgY2hpbGQgaW5zdGFuY2VvZiB3aW5kb3ckMS5IVE1MVGV4dEFyZWFFbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2Ygd2luZG93JDEuSFRNTEJ1dHRvbkVsZW1lbnQpICYmICFjaGlsZC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHwgY2hpbGQgaW5zdGFuY2VvZiB3aW5kb3ckMS5IVE1MSUZyYW1lRWxlbWVudCB8fCBjaGlsZCBpbnN0YW5jZW9mIHdpbmRvdyQxLkhUTUxPYmplY3RFbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2Ygd2luZG93JDEuSFRNTEVtYmVkRWxlbWVudCB8fCBjaGlsZC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpICE9PSAtMSB8fCBjaGlsZC5oYXNBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb2RhbERpYWxvZztcbn0oQ29tcG9uZW50KTtcbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciBgTW9kYWxEaWFsb2dgIGRlZmF1bHQgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuXG5cbk1vZGFsRGlhbG9nLnByb3RvdHlwZS5vcHRpb25zXyA9IHtcbiAgcGF1c2VPbk9wZW46IHRydWUsXG4gIHRlbXBvcmFyeTogdHJ1ZVxufTtcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnTW9kYWxEaWFsb2cnLCBNb2RhbERpYWxvZyk7XG5cbi8qKlxuICogQ29tbW9uIGZ1bmN0aW9uYWxpeSBiZXR3ZWVuIHtAbGluayBUZXh0VHJhY2tMaXN0fSwge0BsaW5rIEF1ZGlvVHJhY2tMaXN0fSwgYW5kXG4gKiB7QGxpbmsgVmlkZW9UcmFja0xpc3R9XG4gKlxuICogQGV4dGVuZHMgRXZlbnRUYXJnZXRcbiAqL1xuXG52YXIgVHJhY2tMaXN0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfRXZlbnRUYXJnZXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhY2tMaXN0LCBfRXZlbnRUYXJnZXQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzc1xuICAgKlxuICAgKiBAcGFyYW0ge1RyYWNrW119IHRyYWNrc1xuICAgKiAgICAgICAgQSBsaXN0IG9mIHRyYWNrcyB0byBpbml0aWFsaXplIHRoZSBsaXN0IHdpdGguXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgZnVuY3Rpb24gVHJhY2tMaXN0KHRyYWNrcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmICh0cmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgdHJhY2tzID0gW107XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfRXZlbnRUYXJnZXQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRyYWNrc18gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgVHJhY2tMaXN0XG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBsZW5ndGhcbiAgICAgKiAgICAgICAgIFRoZSBjdXJyZW50IG51bWJlciBvZiBgVHJhY2tgcyBpbiB0aGUgdGhpcyBUcmFja2lzdC5cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFja3NfLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfdGhpcy5hZGRUcmFjayh0cmFja3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkIGEge0BsaW5rIFRyYWNrfSB0byB0aGUgYFRyYWNrTGlzdGBcbiAgICpcbiAgICogQHBhcmFtIHtUcmFja30gdHJhY2tcbiAgICogICAgICAgIFRoZSBhdWRpbywgdmlkZW8sIG9yIHRleHQgdHJhY2sgdG8gYWRkIHRvIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAZmlyZXMgVHJhY2tMaXN0I2FkZHRyYWNrXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRyYWNrTGlzdC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZFRyYWNrID0gZnVuY3Rpb24gYWRkVHJhY2sodHJhY2spIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnRyYWNrc18ubGVuZ3RoO1xuXG4gICAgaWYgKCEoJycgKyBpbmRleCBpbiB0aGlzKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYWNrc19baW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIERvIG5vdCBhZGQgZHVwbGljYXRlIHRyYWNrc1xuXG5cbiAgICBpZiAodGhpcy50cmFja3NfLmluZGV4T2YodHJhY2spID09PSAtMSkge1xuICAgICAgdGhpcy50cmFja3NfLnB1c2godHJhY2spO1xuICAgICAgLyoqXG4gICAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHRyYWNrIGlzIGFkZGVkIHRvIGEgdHJhY2sgbGlzdC5cbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgVHJhY2tMaXN0I2FkZHRyYWNrXG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKiBAcHJvcGVydHkge1RyYWNrfSB0cmFja1xuICAgICAgICogICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRyYWNrIHRoYXQgd2FzIGFkZGVkLlxuICAgICAgICovXG5cbiAgICAgIHRoaXMudHJpZ2dlcih7XG4gICAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAgICAgdHlwZTogJ2FkZHRyYWNrJyxcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHtAbGluayBUcmFja30gZnJvbSB0aGUgYFRyYWNrTGlzdGBcbiAgICpcbiAgICogQHBhcmFtIHtUcmFja30gcnRyYWNrXG4gICAqICAgICAgICBUaGUgYXVkaW8sIHZpZGVvLCBvciB0ZXh0IHRyYWNrIHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAZmlyZXMgVHJhY2tMaXN0I3JlbW92ZXRyYWNrXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZVRyYWNrID0gZnVuY3Rpb24gcmVtb3ZlVHJhY2socnRyYWNrKSB7XG4gICAgdmFyIHRyYWNrO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRoaXNbaV0gPT09IHJ0cmFjaykge1xuICAgICAgICB0cmFjayA9IHRoaXNbaV07XG5cbiAgICAgICAgaWYgKHRyYWNrLm9mZikge1xuICAgICAgICAgIHRyYWNrLm9mZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFja3NfLnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0cmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHRyYWNrIGlzIHJlbW92ZWQgZnJvbSB0cmFjayBsaXN0LlxuICAgICAqXG4gICAgICogQGV2ZW50IFRyYWNrTGlzdCNyZW1vdmV0cmFja1xuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKiBAcHJvcGVydHkge1RyYWNrfSB0cmFja1xuICAgICAqICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0cmFjayB0aGF0IHdhcyByZW1vdmVkLlxuICAgICAqL1xuXG5cbiAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgdHJhY2s6IHRyYWNrLFxuICAgICAgdHlwZTogJ3JlbW92ZXRyYWNrJyxcbiAgICAgIHRhcmdldDogdGhpc1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSBUcmFjayBmcm9tIHRoZSBUcmFja0xpc3QgYnkgYSB0cmFja3MgaWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gdGhlIGlkIG9mIHRoZSB0cmFjayB0byBnZXRcbiAgICogQG1ldGhvZCBnZXRUcmFja0J5SWRcbiAgICogQHJldHVybiB7VHJhY2t9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldFRyYWNrQnlJZCA9IGZ1bmN0aW9uIGdldFRyYWNrQnlJZChpZCkge1xuICAgIHZhciByZXN1bHQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdGhpc1tpXTtcblxuICAgICAgaWYgKHRyYWNrLmlkID09PSBpZCkge1xuICAgICAgICByZXN1bHQgPSB0cmFjaztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICByZXR1cm4gVHJhY2tMaXN0O1xufShFdmVudFRhcmdldCk7XG4vKipcbiAqIFRyaWdnZXJlZCB3aGVuIGEgZGlmZmVyZW50IHRyYWNrIGlzIHNlbGVjdGVkL2VuYWJsZWQuXG4gKlxuICogQGV2ZW50IFRyYWNrTGlzdCNjaGFuZ2VcbiAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAqL1xuXG4vKipcbiAqIEV2ZW50cyB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aCBvbiArIGV2ZW50TmFtZS4gU2VlIHtAbGluayBFdmVudEhhbmRsZXJ9LlxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBUcmFja0xpc3QjYWxsb3dlZEV2ZW50c19cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5UcmFja0xpc3QucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfID0ge1xuICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICBhZGR0cmFjazogJ2FkZHRyYWNrJyxcbiAgcmVtb3ZldHJhY2s6ICdyZW1vdmV0cmFjaydcbn07IC8vIGVtdWxhdGUgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBzdXBwb3J0IHRvIGFsbG93IGZvciBmZWF0dXJlIGRldGVjdGlvblxuXG5mb3IgKHZhciBldmVudCBpbiBUcmFja0xpc3QucHJvdG90eXBlLmFsbG93ZWRFdmVudHNfKSB7XG4gIFRyYWNrTGlzdC5wcm90b3R5cGVbJ29uJyArIGV2ZW50XSA9IG51bGw7XG59XG5cbi8qKlxuICogQW55d2hlcmUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHdlIGRpdmVyZ2UgZnJvbSB0aGUgc3BlY1xuICogYXMgd2Ugb25seSBzdXBwb3J0IG9uZSBlbmFibGVkIGF1ZGlvdHJhY2sgYXQgYSB0aW1lXG4gKlxuICogQHBhcmFtIHtBdWRpb1RyYWNrTGlzdH0gbGlzdFxuICogICAgICAgIGxpc3QgdG8gd29yayBvblxuICpcbiAqIEBwYXJhbSB7QXVkaW9UcmFja30gdHJhY2tcbiAqICAgICAgICBUaGUgdHJhY2sgdG8gc2tpcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRpc2FibGVPdGhlcnMgPSBmdW5jdGlvbiBkaXNhYmxlT3RoZXJzKGxpc3QsIHRyYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0LmtleXMobGlzdFtpXSkubGVuZ3RoIHx8IHRyYWNrLmlkID09PSBsaXN0W2ldLmlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGFub3RoZXIgYXVkaW8gdHJhY2sgaXMgZW5hYmxlZCwgZGlzYWJsZSBpdFxuXG5cbiAgICBsaXN0W2ldLmVuYWJsZWQgPSBmYWxzZTtcbiAgfVxufTtcbi8qKlxuICogVGhlIGN1cnJlbnQgbGlzdCBvZiB7QGxpbmsgQXVkaW9UcmFja30gZm9yIGEgbWVkaWEgZmlsZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjYXVkaW90cmFja2xpc3R9XG4gKiBAZXh0ZW5kcyBUcmFja0xpc3RcbiAqL1xuXG5cbnZhciBBdWRpb1RyYWNrTGlzdCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RyYWNrTGlzdCkge1xuICBfaW5oZXJpdHNMb29zZShBdWRpb1RyYWNrTGlzdCwgX1RyYWNrTGlzdCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0F1ZGlvVHJhY2tbXX0gW3RyYWNrcz1bXV1cbiAgICogICAgICAgIEEgbGlzdCBvZiBgQXVkaW9UcmFja2AgdG8gaW5zdGFudGlhdGUgdGhlIGxpc3Qgd2l0aC5cbiAgICovXG4gIGZ1bmN0aW9uIEF1ZGlvVHJhY2tMaXN0KHRyYWNrcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmICh0cmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgdHJhY2tzID0gW107XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIG9ubHkgMSB0cmFjayBpcyBlbmFibGVkXG4gICAgLy8gc29ydGVkIGZyb20gbGFzdCBpbmRleCB0byBmaXJzdCBpbmRleFxuICAgIGZvciAodmFyIGkgPSB0cmFja3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0cmFja3NbaV0uZW5hYmxlZCkge1xuICAgICAgICBkaXNhYmxlT3RoZXJzKHRyYWNrcywgdHJhY2tzW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfVHJhY2tMaXN0LmNhbGwodGhpcywgdHJhY2tzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNoYW5naW5nXyA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkIGFuIHtAbGluayBBdWRpb1RyYWNrfSB0byB0aGUgYEF1ZGlvVHJhY2tMaXN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpb1RyYWNrfSB0cmFja1xuICAgKiAgICAgICAgVGhlIEF1ZGlvVHJhY2sgdG8gYWRkIHRvIHRoZSBsaXN0XG4gICAqXG4gICAqIEBmaXJlcyBUcmFja0xpc3QjYWRkdHJhY2tcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQXVkaW9UcmFja0xpc3QucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRUcmFjayA9IGZ1bmN0aW9uIGFkZFRyYWNrKHRyYWNrKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodHJhY2suZW5hYmxlZCkge1xuICAgICAgZGlzYWJsZU90aGVycyh0aGlzLCB0cmFjayk7XG4gICAgfVxuXG4gICAgX1RyYWNrTGlzdC5wcm90b3R5cGUuYWRkVHJhY2suY2FsbCh0aGlzLCB0cmFjayk7IC8vIG5hdGl2ZSB0cmFja3MgZG9uJ3QgaGF2ZSB0aGlzXG5cblxuICAgIGlmICghdHJhY2suYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyYWNrLmVuYWJsZWRDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB3ZSBhcmUgZGlzYWJsaW5nIG90aGVyIHRyYWNrcyAoc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbW9yZSB0aGFuIG9uZSB0cmFjayBhdCBhIHRpbWUpIHdlIHdpbGwgc2V0IGNoYW5naW5nX1xuICAgICAgLy8gdG8gdHJ1ZSBzbyB0aGF0IHdlIGRvbid0IHRyaWdnZXIgYWRkaXRpb25hbCBjaGFuZ2UgZXZlbnRzXG4gICAgICBpZiAoX3RoaXMyLmNoYW5naW5nXykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5jaGFuZ2luZ18gPSB0cnVlO1xuICAgICAgZGlzYWJsZU90aGVycyhfdGhpczIsIHRyYWNrKTtcbiAgICAgIF90aGlzMi5jaGFuZ2luZ18gPSBmYWxzZTtcblxuICAgICAgX3RoaXMyLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGxpc3RlbnMgQXVkaW9UcmFjayNlbmFibGVkY2hhbmdlXG4gICAgICogQGZpcmVzIFRyYWNrTGlzdCNjaGFuZ2VcbiAgICAgKi9cblxuXG4gICAgdHJhY2suYWRkRXZlbnRMaXN0ZW5lcignZW5hYmxlZGNoYW5nZScsIHRyYWNrLmVuYWJsZWRDaGFuZ2VfKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlVHJhY2sgPSBmdW5jdGlvbiByZW1vdmVUcmFjayhydHJhY2spIHtcbiAgICBfVHJhY2tMaXN0LnByb3RvdHlwZS5yZW1vdmVUcmFjay5jYWxsKHRoaXMsIHJ0cmFjayk7XG5cbiAgICBpZiAocnRyYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgcnRyYWNrLmVuYWJsZWRDaGFuZ2VfKSB7XG4gICAgICBydHJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5hYmxlZGNoYW5nZScsIHJ0cmFjay5lbmFibGVkQ2hhbmdlXyk7XG4gICAgICBydHJhY2suZW5hYmxlZENoYW5nZV8gPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQXVkaW9UcmFja0xpc3Q7XG59KFRyYWNrTGlzdCk7XG5cbi8qKlxuICogVW4tc2VsZWN0IGFsbCBvdGhlciB7QGxpbmsgVmlkZW9UcmFja31zIHRoYXQgYXJlIHNlbGVjdGVkLlxuICpcbiAqIEBwYXJhbSB7VmlkZW9UcmFja0xpc3R9IGxpc3RcbiAqICAgICAgICBsaXN0IHRvIHdvcmsgb25cbiAqXG4gKiBAcGFyYW0ge1ZpZGVvVHJhY2t9IHRyYWNrXG4gKiAgICAgICAgVGhlIHRyYWNrIHRvIHNraXBcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkaXNhYmxlT3RoZXJzJDEgPSBmdW5jdGlvbiBkaXNhYmxlT3RoZXJzKGxpc3QsIHRyYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0LmtleXMobGlzdFtpXSkubGVuZ3RoIHx8IHRyYWNrLmlkID09PSBsaXN0W2ldLmlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGFub3RoZXIgdmlkZW8gdHJhY2sgaXMgZW5hYmxlZCwgZGlzYWJsZSBpdFxuXG5cbiAgICBsaXN0W2ldLnNlbGVjdGVkID0gZmFsc2U7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBjdXJyZW50IGxpc3Qgb2Yge0BsaW5rIFZpZGVvVHJhY2t9IGZvciBhIHZpZGVvLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCN2aWRlb3RyYWNrbGlzdH1cbiAqIEBleHRlbmRzIFRyYWNrTGlzdFxuICovXG5cblxudmFyIFZpZGVvVHJhY2tMaXN0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVHJhY2tMaXN0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFZpZGVvVHJhY2tMaXN0LCBfVHJhY2tMaXN0KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VmlkZW9UcmFja1tdfSBbdHJhY2tzPVtdXVxuICAgKiAgICAgICAgQSBsaXN0IG9mIGBWaWRlb1RyYWNrYCB0byBpbnN0YW50aWF0ZSB0aGUgbGlzdCB3aXRoLlxuICAgKi9cbiAgZnVuY3Rpb24gVmlkZW9UcmFja0xpc3QodHJhY2tzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKHRyYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgICB0cmFja3MgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgb25seSAxIHRyYWNrIGlzIGVuYWJsZWRcbiAgICAvLyBzb3J0ZWQgZnJvbSBsYXN0IGluZGV4IHRvIGZpcnN0IGluZGV4XG4gICAgZm9yICh2YXIgaSA9IHRyYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRyYWNrc1tpXS5zZWxlY3RlZCkge1xuICAgICAgICBkaXNhYmxlT3RoZXJzJDEodHJhY2tzLCB0cmFja3NbaV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcyA9IF9UcmFja0xpc3QuY2FsbCh0aGlzLCB0cmFja3MpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2hhbmdpbmdfID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBWaWRlb1RyYWNrTGlzdCNzZWxlY3RlZEluZGV4XG4gICAgICogICAgICAgICBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQge0BsaW5rIFZpZGVvVHJhY2tgfS5cbiAgICAgKi9cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgJ3NlbGVjdGVkSW5kZXgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXNbX2ldLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gX2k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge31cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHtAbGluayBWaWRlb1RyYWNrfSB0byB0aGUgYFZpZGVvVHJhY2tMaXN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtWaWRlb1RyYWNrfSB0cmFja1xuICAgKiAgICAgICAgVGhlIFZpZGVvVHJhY2sgdG8gYWRkIHRvIHRoZSBsaXN0XG4gICAqXG4gICAqIEBmaXJlcyBUcmFja0xpc3QjYWRkdHJhY2tcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVmlkZW9UcmFja0xpc3QucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRUcmFjayA9IGZ1bmN0aW9uIGFkZFRyYWNrKHRyYWNrKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodHJhY2suc2VsZWN0ZWQpIHtcbiAgICAgIGRpc2FibGVPdGhlcnMkMSh0aGlzLCB0cmFjayk7XG4gICAgfVxuXG4gICAgX1RyYWNrTGlzdC5wcm90b3R5cGUuYWRkVHJhY2suY2FsbCh0aGlzLCB0cmFjayk7IC8vIG5hdGl2ZSB0cmFja3MgZG9uJ3QgaGF2ZSB0aGlzXG5cblxuICAgIGlmICghdHJhY2suYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyYWNrLnNlbGVjdGVkQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczIuY2hhbmdpbmdfKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmNoYW5naW5nXyA9IHRydWU7XG4gICAgICBkaXNhYmxlT3RoZXJzJDEoX3RoaXMyLCB0cmFjayk7XG4gICAgICBfdGhpczIuY2hhbmdpbmdfID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBsaXN0ZW5zIFZpZGVvVHJhY2sjc2VsZWN0ZWRjaGFuZ2VcbiAgICAgKiBAZmlyZXMgVHJhY2tMaXN0I2NoYW5nZVxuICAgICAqL1xuXG5cbiAgICB0cmFjay5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RlZGNoYW5nZScsIHRyYWNrLnNlbGVjdGVkQ2hhbmdlXyk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVRyYWNrID0gZnVuY3Rpb24gcmVtb3ZlVHJhY2socnRyYWNrKSB7XG4gICAgX1RyYWNrTGlzdC5wcm90b3R5cGUucmVtb3ZlVHJhY2suY2FsbCh0aGlzLCBydHJhY2spO1xuXG4gICAgaWYgKHJ0cmFjay5yZW1vdmVFdmVudExpc3RlbmVyICYmIHJ0cmFjay5zZWxlY3RlZENoYW5nZV8pIHtcbiAgICAgIHJ0cmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWxlY3RlZGNoYW5nZScsIHJ0cmFjay5zZWxlY3RlZENoYW5nZV8pO1xuICAgICAgcnRyYWNrLnNlbGVjdGVkQ2hhbmdlXyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBWaWRlb1RyYWNrTGlzdDtcbn0oVHJhY2tMaXN0KTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBsaXN0IG9mIHtAbGluayBUZXh0VHJhY2t9IGZvciBhIG1lZGlhIGZpbGUuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI3RleHR0cmFja2xpc3R9XG4gKiBAZXh0ZW5kcyBUcmFja0xpc3RcbiAqL1xuXG52YXIgVGV4dFRyYWNrTGlzdCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RyYWNrTGlzdCkge1xuICBfaW5oZXJpdHNMb29zZShUZXh0VHJhY2tMaXN0LCBfVHJhY2tMaXN0KTtcblxuICBmdW5jdGlvbiBUZXh0VHJhY2tMaXN0KCkge1xuICAgIHJldHVybiBfVHJhY2tMaXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUZXh0VHJhY2tMaXN0LnByb3RvdHlwZTtcblxuICAvKipcbiAgICogQWRkIGEge0BsaW5rIFRleHRUcmFja30gdG8gdGhlIGBUZXh0VHJhY2tMaXN0YFxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRUcmFja30gdHJhY2tcbiAgICogICAgICAgIFRoZSB0ZXh0IHRyYWNrIHRvIGFkZCB0byB0aGUgbGlzdC5cbiAgICpcbiAgICogQGZpcmVzIFRyYWNrTGlzdCNhZGR0cmFja1xuICAgKi9cbiAgX3Byb3RvLmFkZFRyYWNrID0gZnVuY3Rpb24gYWRkVHJhY2sodHJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX1RyYWNrTGlzdC5wcm90b3R5cGUuYWRkVHJhY2suY2FsbCh0aGlzLCB0cmFjayk7XG5cbiAgICBpZiAoIXRoaXMucXVldWVDaGFuZ2VfKSB7XG4gICAgICB0aGlzLnF1ZXVlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnF1ZXVlVHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmlnZ2VyU2VsZWN0ZWRsYW5ndWFnZWNoYW5nZSkge1xuICAgICAgdGhpcy50cmlnZ2VyU2VsZWN0ZWRsYW5ndWFnZWNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50cmlnZ2VyKCdzZWxlY3RlZGxhbmd1YWdlY2hhbmdlJyk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAbGlzdGVucyBUZXh0VHJhY2sjbW9kZWNoYW5nZVxuICAgICAqIEBmaXJlcyBUcmFja0xpc3QjY2hhbmdlXG4gICAgICovXG5cblxuICAgIHRyYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ21vZGVjaGFuZ2UnLCB0aGlzLnF1ZXVlQ2hhbmdlXyk7XG4gICAgdmFyIG5vbkxhbmd1YWdlVGV4dFRyYWNrS2luZCA9IFsnbWV0YWRhdGEnLCAnY2hhcHRlcnMnXTtcblxuICAgIGlmIChub25MYW5ndWFnZVRleHRUcmFja0tpbmQuaW5kZXhPZih0cmFjay5raW5kKSA9PT0gLTEpIHtcbiAgICAgIHRyYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ21vZGVjaGFuZ2UnLCB0aGlzLnRyaWdnZXJTZWxlY3RlZGxhbmd1YWdlY2hhbmdlXyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVUcmFjayA9IGZ1bmN0aW9uIHJlbW92ZVRyYWNrKHJ0cmFjaykge1xuICAgIF9UcmFja0xpc3QucHJvdG90eXBlLnJlbW92ZVRyYWNrLmNhbGwodGhpcywgcnRyYWNrKTsgLy8gbWFudWFsbHkgcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVycyB3ZSBhZGRlZFxuXG5cbiAgICBpZiAocnRyYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXVlQ2hhbmdlXykge1xuICAgICAgICBydHJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW9kZWNoYW5nZScsIHRoaXMucXVldWVDaGFuZ2VfKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRsYW5ndWFnZWNoYW5nZV8pIHtcbiAgICAgICAgcnRyYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vZGVjaGFuZ2UnLCB0aGlzLnRyaWdnZXJTZWxlY3RlZGxhbmd1YWdlY2hhbmdlXyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUZXh0VHJhY2tMaXN0O1xufShUcmFja0xpc3QpO1xuXG4vKipcbiAqIEBmaWxlIGh0bWwtdHJhY2stZWxlbWVudC1saXN0LmpzXG4gKi9cblxuLyoqXG4gKiBUaGUgY3VycmVudCBsaXN0IG9mIHtAbGluayBIdG1sVHJhY2tFbGVtZW50fXMuXG4gKi9cbnZhciBIdG1sVHJhY2tFbGVtZW50TGlzdCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtIdG1sVHJhY2tFbGVtZW50W119IFt0cmFja3M9W11dXG4gICAqICAgICAgICBBIGxpc3Qgb2YgYEh0bWxUcmFja0VsZW1lbnRgIHRvIGluc3RhbnRpYXRlIHRoZSBsaXN0IHdpdGguXG4gICAqL1xuICBmdW5jdGlvbiBIdG1sVHJhY2tFbGVtZW50TGlzdCh0cmFja0VsZW1lbnRzKSB7XG4gICAgaWYgKHRyYWNrRWxlbWVudHMgPT09IHZvaWQgMCkge1xuICAgICAgdHJhY2tFbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMudHJhY2tFbGVtZW50c18gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgSHRtbFRyYWNrRWxlbWVudExpc3RcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGxlbmd0aFxuICAgICAqICAgICAgICAgVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGBUcmFja2BzIGluIHRoZSB0aGlzIFRyYWNraXN0LlxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdsZW5ndGgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2tFbGVtZW50c18ubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRyYWNrRWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkVHJhY2tFbGVtZW50Xyh0cmFja0VsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiB7QGxpbmsgSHRtbFRyYWNrRWxlbWVudH0gdG8gdGhlIGBIdG1sVHJhY2tFbGVtZW50TGlzdGBcbiAgICpcbiAgICogQHBhcmFtIHtIdG1sVHJhY2tFbGVtZW50fSB0cmFja0VsZW1lbnRcbiAgICogICAgICAgIFRoZSB0cmFjayBlbGVtZW50IHRvIGFkZCB0byB0aGUgbGlzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSHRtbFRyYWNrRWxlbWVudExpc3QucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRUcmFja0VsZW1lbnRfID0gZnVuY3Rpb24gYWRkVHJhY2tFbGVtZW50Xyh0cmFja0VsZW1lbnQpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnRyYWNrRWxlbWVudHNfLmxlbmd0aDtcblxuICAgIGlmICghKCcnICsgaW5kZXggaW4gdGhpcykpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFja0VsZW1lbnRzX1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gRG8gbm90IGFkZCBkdXBsaWNhdGUgZWxlbWVudHNcblxuXG4gICAgaWYgKHRoaXMudHJhY2tFbGVtZW50c18uaW5kZXhPZih0cmFja0VsZW1lbnQpID09PSAtMSkge1xuICAgICAgdGhpcy50cmFja0VsZW1lbnRzXy5wdXNoKHRyYWNrRWxlbWVudCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgYW4ge0BsaW5rIEh0bWxUcmFja0VsZW1lbnR9IGZyb20gdGhlIGBIdG1sVHJhY2tFbGVtZW50TGlzdGAgZ2l2ZW4gYW5cbiAgICoge0BsaW5rIFRleHRUcmFja30uXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFRyYWNrfSB0cmFja1xuICAgKiAgICAgICAgVGhlIHRyYWNrIGFzc29jaWF0ZWQgd2l0aCBhIHRyYWNrIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge0h0bWxUcmFja0VsZW1lbnR8dW5kZWZpbmVkfVxuICAgKiAgICAgICAgIFRoZSB0cmFjayBlbGVtZW50IHRoYXQgd2FzIGZvdW5kIG9yIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0VHJhY2tFbGVtZW50QnlUcmFja18gPSBmdW5jdGlvbiBnZXRUcmFja0VsZW1lbnRCeVRyYWNrXyh0cmFjaykge1xuICAgIHZhciB0cmFja0VsZW1lbnRfO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMudHJhY2tFbGVtZW50c18ubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmFjayA9PT0gdGhpcy50cmFja0VsZW1lbnRzX1tpXS50cmFjaykge1xuICAgICAgICB0cmFja0VsZW1lbnRfID0gdGhpcy50cmFja0VsZW1lbnRzX1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYWNrRWxlbWVudF87XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHtAbGluayBIdG1sVHJhY2tFbGVtZW50fSBmcm9tIHRoZSBgSHRtbFRyYWNrRWxlbWVudExpc3RgXG4gICAqXG4gICAqIEBwYXJhbSB7SHRtbFRyYWNrRWxlbWVudH0gdHJhY2tFbGVtZW50XG4gICAqICAgICAgICBUaGUgdHJhY2sgZWxlbWVudCB0byByZW1vdmUgZnJvbSB0aGUgbGlzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVtb3ZlVHJhY2tFbGVtZW50XyA9IGZ1bmN0aW9uIHJlbW92ZVRyYWNrRWxlbWVudF8odHJhY2tFbGVtZW50KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMudHJhY2tFbGVtZW50c18ubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmFja0VsZW1lbnQgPT09IHRoaXMudHJhY2tFbGVtZW50c19baV0pIHtcbiAgICAgICAgaWYgKHRoaXMudHJhY2tFbGVtZW50c19baV0udHJhY2sgJiYgdHlwZW9mIHRoaXMudHJhY2tFbGVtZW50c19baV0udHJhY2sub2ZmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy50cmFja0VsZW1lbnRzX1tpXS50cmFjay5vZmYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50cmFja0VsZW1lbnRzX1tpXS5vZmYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudHNfW2ldLm9mZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFja0VsZW1lbnRzXy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gSHRtbFRyYWNrRWxlbWVudExpc3Q7XG59KCk7XG5cbi8qKlxuICogQGZpbGUgdGV4dC10cmFjay1jdWUtbGlzdC5qc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGV4dFRyYWNrQ3VlTGlzdH5UZXh0VHJhY2tDdWVcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqICAgICAgICAgICBUaGUgdW5pcXVlIGlkIGZvciB0aGlzIHRleHQgdHJhY2sgY3VlXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN0YXJ0VGltZVxuICogICAgICAgICAgIFRoZSBzdGFydCB0aW1lIGZvciB0aGlzIHRleHQgdHJhY2sgY3VlXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGVuZFRpbWVcbiAqICAgICAgICAgICBUaGUgZW5kIHRpbWUgZm9yIHRoaXMgdGV4dCB0cmFjayBjdWVcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhdXNlT25FeGl0XG4gKiAgICAgICAgICAgUGF1c2Ugd2hlbiB0aGUgZW5kIHRpbWUgaXMgcmVhY2hlZCBpZiB0cnVlLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCN0ZXh0dHJhY2tjdWV9XG4gKi9cblxuLyoqXG4gKiBBIExpc3Qgb2YgVGV4dFRyYWNrQ3Vlcy5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjdGV4dHRyYWNrY3VlbGlzdH1cbiAqL1xudmFyIFRleHRUcmFja0N1ZUxpc3QgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjdWVzXG4gICAqICAgICAgICBBIGxpc3Qgb2YgY3VlcyB0byBiZSBpbml0aWFsaXplZCB3aXRoXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0VHJhY2tDdWVMaXN0KGN1ZXMpIHtcbiAgICBUZXh0VHJhY2tDdWVMaXN0LnByb3RvdHlwZS5zZXRDdWVzXy5jYWxsKHRoaXMsIGN1ZXMpO1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBUZXh0VHJhY2tDdWVMaXN0XG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBsZW5ndGhcbiAgICAgKiAgICAgICAgIFRoZSBjdXJyZW50IG51bWJlciBvZiBgVGV4dFRyYWNrQ3VlYHMgaW4gdGhlIFRleHRUcmFja0N1ZUxpc3QuXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGhfO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBBIHNldHRlciBmb3IgY3VlcyBpbiB0aGlzIGxpc3QuIENyZWF0ZXMgZ2V0dGVyc1xuICAgKiBhbiBhbiBpbmRleCBmb3IgdGhlIGN1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGN1ZXNcbiAgICogICAgICAgIEFuIGFycmF5IG9mIGN1ZXMgdG8gc2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRleHRUcmFja0N1ZUxpc3QucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRDdWVzXyA9IGZ1bmN0aW9uIHNldEN1ZXNfKGN1ZXMpIHtcbiAgICB2YXIgb2xkTGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGwgPSBjdWVzLmxlbmd0aDtcbiAgICB0aGlzLmN1ZXNfID0gY3VlcztcbiAgICB0aGlzLmxlbmd0aF8gPSBjdWVzLmxlbmd0aDtcblxuICAgIHZhciBkZWZpbmVQcm9wID0gZnVuY3Rpb24gZGVmaW5lUHJvcChpbmRleCkge1xuICAgICAgaWYgKCEoJycgKyBpbmRleCBpbiB0aGlzKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJycgKyBpbmRleCwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3Vlc19baW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChvbGRMZW5ndGggPCBsKSB7XG4gICAgICBpID0gb2xkTGVuZ3RoO1xuXG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBkZWZpbmVQcm9wLmNhbGwodGhpcywgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgYSBgVGV4dFRyYWNrQ3VlYCB0aGF0IGlzIGN1cnJlbnRseSBpbiB0aGUgYFRleHRUcmFja0N1ZUxpc3RgIGJ5IGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAgICogICAgICAgIFRoZSBpZCBvZiB0aGUgY3VlIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvci5cbiAgICpcbiAgICogQHJldHVybiB7VGV4dFRyYWNrQ3VlTGlzdH5UZXh0VHJhY2tDdWV8bnVsbH1cbiAgICogICAgICAgICBBIHNpbmdsZSBjdWUgb3IgbnVsbCBpZiBub25lIHdhcyBmb3VuZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0Q3VlQnlJZCA9IGZ1bmN0aW9uIGdldEN1ZUJ5SWQoaWQpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjdWUgPSB0aGlzW2ldO1xuXG4gICAgICBpZiAoY3VlLmlkID09PSBpZCkge1xuICAgICAgICByZXN1bHQgPSBjdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcmV0dXJuIFRleHRUcmFja0N1ZUxpc3Q7XG59KCk7XG5cbi8qKlxuICogQGZpbGUgdHJhY2sta2luZHMuanNcbiAqL1xuXG4vKipcbiAqIEFsbCBwb3NzaWJsZSBgVmlkZW9UcmFja0tpbmRgc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RvbS12aWRlb3RyYWNrLWtpbmRcbiAqIEB0eXBlZGVmIFZpZGVvVHJhY2t+S2luZFxuICogQGVudW1cbiAqL1xudmFyIFZpZGVvVHJhY2tLaW5kID0ge1xuICBhbHRlcm5hdGl2ZTogJ2FsdGVybmF0aXZlJyxcbiAgY2FwdGlvbnM6ICdjYXB0aW9ucycsXG4gIG1haW46ICdtYWluJyxcbiAgc2lnbjogJ3NpZ24nLFxuICBzdWJ0aXRsZXM6ICdzdWJ0aXRsZXMnLFxuICBjb21tZW50YXJ5OiAnY29tbWVudGFyeSdcbn07XG4vKipcbiAqIEFsbCBwb3NzaWJsZSBgQXVkaW9UcmFja0tpbmRgc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RvbS1hdWRpb3RyYWNrLWtpbmRcbiAqIEB0eXBlZGVmIEF1ZGlvVHJhY2t+S2luZFxuICogQGVudW1cbiAqL1xuXG52YXIgQXVkaW9UcmFja0tpbmQgPSB7XG4gICdhbHRlcm5hdGl2ZSc6ICdhbHRlcm5hdGl2ZScsXG4gICdkZXNjcmlwdGlvbnMnOiAnZGVzY3JpcHRpb25zJyxcbiAgJ21haW4nOiAnbWFpbicsXG4gICdtYWluLWRlc2MnOiAnbWFpbi1kZXNjJyxcbiAgJ3RyYW5zbGF0aW9uJzogJ3RyYW5zbGF0aW9uJyxcbiAgJ2NvbW1lbnRhcnknOiAnY29tbWVudGFyeSdcbn07XG4vKipcbiAqIEFsbCBwb3NzaWJsZSBgVGV4dFRyYWNrS2luZGBzXG4gKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjZG9tLXRleHR0cmFjay1raW5kXG4gKiBAdHlwZWRlZiBUZXh0VHJhY2t+S2luZFxuICogQGVudW1cbiAqL1xuXG52YXIgVGV4dFRyYWNrS2luZCA9IHtcbiAgc3VidGl0bGVzOiAnc3VidGl0bGVzJyxcbiAgY2FwdGlvbnM6ICdjYXB0aW9ucycsXG4gIGRlc2NyaXB0aW9uczogJ2Rlc2NyaXB0aW9ucycsXG4gIGNoYXB0ZXJzOiAnY2hhcHRlcnMnLFxuICBtZXRhZGF0YTogJ21ldGFkYXRhJ1xufTtcbi8qKlxuICogQWxsIHBvc3NpYmxlIGBUZXh0VHJhY2tNb2RlYHNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCN0ZXh0dHJhY2ttb2RlXG4gKiBAdHlwZWRlZiBUZXh0VHJhY2t+TW9kZVxuICogQGVudW1cbiAqL1xuXG52YXIgVGV4dFRyYWNrTW9kZSA9IHtcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIHNob3dpbmc6ICdzaG93aW5nJ1xufTtcblxuLyoqXG4gKiBBIFRyYWNrIGNsYXNzIHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3Ige0BsaW5rIEF1ZGlvVHJhY2t9LFxuICoge0BsaW5rIFZpZGVvVHJhY2t9LCBhbmQge0BsaW5rIFRleHRUcmFja30uXG4gKlxuICogPiBOb3RlOiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseVxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbH1cbiAqIEBleHRlbmRzIEV2ZW50VGFyZ2V0XG4gKiBAYWJzdHJhY3RcbiAqL1xuXG52YXIgVHJhY2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9FdmVudFRhcmdldCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFjaywgX0V2ZW50VGFyZ2V0KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICogICAgICAgIE9iamVjdCBvZiBvcHRpb24gbmFtZXMgYW5kIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2luZD0nJ11cbiAgICogICAgICAgIEEgdmFsaWQga2luZCBmb3IgdGhlIHRyYWNrIHR5cGUgeW91IGFyZSBjcmVhdGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmlkPSd2anNfdHJhY2tfJyArIEd1aWQubmV3R1VJRCgpXVxuICAgKiAgICAgICAgQSB1bmlxdWUgaWQgZm9yIHRoaXMgQXVkaW9UcmFjay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsPScnXVxuICAgKiAgICAgICAgVGhlIG1lbnUgbGFiZWwgZm9yIHRoaXMgdHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYW5ndWFnZT0nJ11cbiAgICogICAgICAgIEEgdmFsaWQgdHdvIGNoYXJhY3RlciBsYW5ndWFnZSBjb2RlLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIGZ1bmN0aW9uIFRyYWNrKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfRXZlbnRUYXJnZXQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHZhciB0cmFja1Byb3BzID0ge1xuICAgICAgaWQ6IG9wdGlvbnMuaWQgfHwgJ3Zqc190cmFja18nICsgbmV3R1VJRCgpLFxuICAgICAga2luZDogb3B0aW9ucy5raW5kIHx8ICcnLFxuICAgICAgbGFiZWw6IG9wdGlvbnMubGFiZWwgfHwgJycsXG4gICAgICBsYW5ndWFnZTogb3B0aW9ucy5sYW5ndWFnZSB8fCAnJ1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIFRyYWNrXG4gICAgICogQG1lbWJlciB7c3RyaW5nfSBpZFxuICAgICAqICAgICAgICAgVGhlIGlkIG9mIHRoaXMgdHJhY2suIENhbm5vdCBiZSBjaGFuZ2VkIGFmdGVyIGNyZWF0aW9uLlxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgVHJhY2tcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IGtpbmRcbiAgICAgKiAgICAgICAgIFRoZSBraW5kIG9mIHRyYWNrIHRoYXQgdGhpcyBpcy4gQ2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgY3JlYXRpb24uXG4gICAgICogQGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBUcmFja1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gbGFiZWxcbiAgICAgKiAgICAgICAgIFRoZSBsYWJlbCBvZiB0aGlzIHRyYWNrLiBDYW5ub3QgYmUgY2hhbmdlZCBhZnRlciBjcmVhdGlvbi5cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIFRyYWNrXG4gICAgICogQG1lbWJlciB7c3RyaW5nfSBsYW5ndWFnZVxuICAgICAqICAgICAgICAgVGhlIHR3byBsZXR0ZXIgbGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyB0cmFjay4gQ2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXJcbiAgICAgKiAgICAgICAgIGNyZWF0aW9uLlxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB0cmFja1Byb3BzW2tleV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge31cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tQcm9wcykge1xuICAgICAgX2xvb3Aoa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gVHJhY2s7XG59KEV2ZW50VGFyZ2V0KTtcblxuLyoqXG4gKiBAZmlsZSB1cmwuanNcbiAqIEBtb2R1bGUgdXJsXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gdXJsOlVSTE9iamVjdFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogICAgICAgICAgIFRoZSBwcm90b2NvbCBvZiB0aGUgdXJsIHRoYXQgd2FzIHBhcnNlZC5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdG5hbWVcbiAqICAgICAgICAgICBUaGUgaG9zdG5hbWUgb2YgdGhlIHVybCB0aGF0IHdhcyBwYXJzZWQuXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcnRcbiAqICAgICAgICAgICBUaGUgcG9ydCBvZiB0aGUgdXJsIHRoYXQgd2FzIHBhcnNlZC5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aG5hbWVcbiAqICAgICAgICAgICBUaGUgcGF0aG5hbWUgb2YgdGhlIHVybCB0aGF0IHdhcyBwYXJzZWQuXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlYXJjaFxuICogICAgICAgICAgIFRoZSBzZWFyY2ggcXVlcnkgb2YgdGhlIHVybCB0aGF0IHdhcyBwYXJzZWQuXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhhc2hcbiAqICAgICAgICAgICBUaGUgaGFzaCBvZiB0aGUgdXJsIHRoYXQgd2FzIHBhcnNlZC5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdFxuICogICAgICAgICAgIFRoZSBob3N0IG9mIHRoZSB1cmwgdGhhdCB3YXMgcGFyc2VkLlxuICovXG5cbi8qKlxuICogUmVzb2x2ZSBhbmQgcGFyc2UgdGhlIGVsZW1lbnRzIG9mIGEgVVJMLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICAgIHtTdHJpbmd9IHVybFxuICogICAgICAgICAgIFRoZSB1cmwgdG8gcGFyc2VcbiAqXG4gKiBAcmV0dXJuICAge3VybDpVUkxPYmplY3R9XG4gKiAgICAgICAgICAgQW4gb2JqZWN0IG9mIHVybCBkZXRhaWxzXG4gKi9cblxudmFyIHBhcnNlVXJsID0gZnVuY3Rpb24gcGFyc2VVcmwodXJsKSB7XG4gIHZhciBwcm9wcyA9IFsncHJvdG9jb2wnLCAnaG9zdG5hbWUnLCAncG9ydCcsICdwYXRobmFtZScsICdzZWFyY2gnLCAnaGFzaCcsICdob3N0J107IC8vIGFkZCB0aGUgdXJsIHRvIGFuIGFuY2hvciBhbmQgbGV0IHRoZSBicm93c2VyIHBhcnNlIHRoZSBVUkxcblxuICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgYS5ocmVmID0gdXJsOyAvLyBJRTggKGFuZCA5PykgRml4XG4gIC8vIGllOCBkb2Vzbid0IHBhcnNlIHRoZSBVUkwgY29ycmVjdGx5IHVudGlsIHRoZSBhbmNob3IgaXMgYWN0dWFsbHlcbiAgLy8gYWRkZWQgdG8gdGhlIGJvZHksIGFuZCBhbiBpbm5lckhUTUwgaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIHBhcnNpbmdcblxuICB2YXIgYWRkVG9Cb2R5ID0gYS5ob3N0ID09PSAnJyAmJiBhLnByb3RvY29sICE9PSAnZmlsZTonO1xuICB2YXIgZGl2O1xuXG4gIGlmIChhZGRUb0JvZHkpIHtcbiAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPVxcXCJcIiArIHVybCArIFwiXFxcIj48L2E+XCI7XG4gICAgYSA9IGRpdi5maXJzdENoaWxkOyAvLyBwcmV2ZW50IHRoZSBkaXYgZnJvbSBhZmZlY3RpbmcgbGF5b3V0XG5cbiAgICBkaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmFic29sdXRlOycpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgfSAvLyBDb3B5IHRoZSBzcGVjaWZpYyBVUkwgcHJvcGVydGllcyB0byBhIG5ldyBvYmplY3RcbiAgLy8gVGhpcyBpcyBhbHNvIG5lZWRlZCBmb3IgSUU4IGJlY2F1c2UgdGhlIGFuY2hvciBsb3NlcyBpdHNcbiAgLy8gcHJvcGVydGllcyB3aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBkb21cblxuXG4gIHZhciBkZXRhaWxzID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGRldGFpbHNbcHJvcHNbaV1dID0gYVtwcm9wc1tpXV07XG4gIH0gLy8gSUU5IGFkZHMgdGhlIHBvcnQgdG8gdGhlIGhvc3QgcHJvcGVydHkgdW5saWtlIGV2ZXJ5b25lIGVsc2UuIElmXG4gIC8vIGEgcG9ydCBpZGVudGlmaWVyIGlzIGFkZGVkIGZvciBzdGFuZGFyZCBwb3J0cywgc3RyaXAgaXQuXG5cblxuICBpZiAoZGV0YWlscy5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgIGRldGFpbHMuaG9zdCA9IGRldGFpbHMuaG9zdC5yZXBsYWNlKC86ODAkLywgJycpO1xuICB9XG5cbiAgaWYgKGRldGFpbHMucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgZGV0YWlscy5ob3N0ID0gZGV0YWlscy5ob3N0LnJlcGxhY2UoLzo0NDMkLywgJycpO1xuICB9XG5cbiAgaWYgKCFkZXRhaWxzLnByb3RvY29sKSB7XG4gICAgZGV0YWlscy5wcm90b2NvbCA9IHdpbmRvdyQxLmxvY2F0aW9uLnByb3RvY29sO1xuICB9XG5cbiAgaWYgKGFkZFRvQm9keSkge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBkZXRhaWxzO1xufTtcbi8qKlxuICogR2V0IGFic29sdXRlIHZlcnNpb24gb2YgcmVsYXRpdmUgVVJMLiBVc2VkIHRvIHRlbGwgRmxhc2ggdGhlIGNvcnJlY3QgVVJMLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICAgIHtzdHJpbmd9IHVybFxuICogICAgICAgICAgIFVSTCB0byBtYWtlIGFic29sdXRlXG4gKlxuICogQHJldHVybiAgIHtzdHJpbmd9XG4gKiAgICAgICAgICAgQWJzb2x1dGUgVVJMXG4gKlxuICogQHNlZSAgICAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDcwODMyL2dldHRpbmctYW4tYWJzb2x1dGUtdXJsLWZyb20tYS1yZWxhdGl2ZS1vbmUtaWU2LWlzc3VlXG4gKi9cblxudmFyIGdldEFic29sdXRlVVJMID0gZnVuY3Rpb24gZ2V0QWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIENoZWNrIGlmIGFic29sdXRlIFVSTFxuICBpZiAoIXVybC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8vKSkge1xuICAgIC8vIENvbnZlcnQgdG8gYWJzb2x1dGUgVVJMLiBGbGFzaCBob3N0ZWQgb2ZmLXNpdGUgbmVlZHMgYW4gYWJzb2x1dGUgVVJMLlxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPVxcXCJcIiArIHVybCArIFwiXFxcIj54PC9hPlwiO1xuICAgIHVybCA9IGRpdi5maXJzdENoaWxkLmhyZWY7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBwYXNzZWQgZmlsZSBuYW1lLiBJdCB3aWxsIHJldHVybiBhbiBlbXB0eSBzdHJpbmdcbiAqIGlmIHBhc3NlZCBhbiBpbnZhbGlkIHBhdGguXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gICAge3N0cmluZ30gcGF0aFxuICogICAgICAgICAgIFRoZSBmaWxlTmFtZSBwYXRoIGxpa2UgJy9wYXRoL3RvL2ZpbGUubXA0J1xuICpcbiAqIEByZXR1cm4gIHtzdHJpbmd9XG4gKiAgICAgICAgICAgVGhlIGV4dGVuc2lvbiBpbiBsb3dlciBjYXNlIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBub1xuICogICAgICAgICAgIGV4dGVuc2lvbiBjb3VsZCBiZSBmb3VuZC5cbiAqL1xuXG52YXIgZ2V0RmlsZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24ocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNwbGl0UGF0aFJlID0gL14oXFwvPykoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz8pKFxcLihbXlxcLlxcL1xcP10rKSkpKD86W1xcL10qfFtcXD9dLiopJC87XG4gICAgdmFyIHBhdGhQYXJ0cyA9IHNwbGl0UGF0aFJlLmV4ZWMocGF0aCk7XG5cbiAgICBpZiAocGF0aFBhcnRzKSB7XG4gICAgICByZXR1cm4gcGF0aFBhcnRzLnBvcCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSB1cmwgcGFzc2VkIGlzIGEgY3Jvc3MgZG9tYWluIHJlcXVlc3Qgb3Igbm90LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICAgIHtzdHJpbmd9IHVybFxuICogICAgICAgICAgIFRoZSB1cmwgdG8gY2hlY2suXG4gKlxuICogQHJldHVybiAgIHtib29sZWFufVxuICogICAgICAgICAgIFdoZXRoZXIgaXQgaXMgYSBjcm9zcyBkb21haW4gcmVxdWVzdCBvciBub3QuXG4gKi9cblxudmFyIGlzQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiBpc0Nyb3NzT3JpZ2luKHVybCkge1xuICB2YXIgd2luTG9jID0gd2luZG93JDEubG9jYXRpb247XG4gIHZhciB1cmxJbmZvID0gcGFyc2VVcmwodXJsKTsgLy8gSUU4IHByb3RvY29sIHJlbGF0aXZlIHVybHMgd2lsbCByZXR1cm4gJzonIGZvciBwcm90b2NvbFxuXG4gIHZhciBzcmNQcm90b2NvbCA9IHVybEluZm8ucHJvdG9jb2wgPT09ICc6JyA/IHdpbkxvYy5wcm90b2NvbCA6IHVybEluZm8ucHJvdG9jb2w7IC8vIENoZWNrIGlmIHVybCBpcyBmb3IgYW5vdGhlciBkb21haW4vb3JpZ2luXG4gIC8vIElFOCBkb2Vzbid0IGtub3cgbG9jYXRpb24ub3JpZ2luLCBzbyB3ZSB3b24ndCByZWx5IG9uIGl0IGhlcmVcblxuICB2YXIgY3Jvc3NPcmlnaW4gPSBzcmNQcm90b2NvbCArIHVybEluZm8uaG9zdCAhPT0gd2luTG9jLnByb3RvY29sICsgd2luTG9jLmhvc3Q7XG4gIHJldHVybiBjcm9zc09yaWdpbjtcbn07XG5cbnZhciBVcmwgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIHBhcnNlVXJsOiBwYXJzZVVybCxcbiAgZ2V0QWJzb2x1dGVVUkw6IGdldEFic29sdXRlVVJMLFxuICBnZXRGaWxlRXh0ZW5zaW9uOiBnZXRGaWxlRXh0ZW5zaW9uLFxuICBpc0Nyb3NzT3JpZ2luOiBpc0Nyb3NzT3JpZ2luXG59KTtcblxuLyoqXG4gKiBUYWtlcyBhIHdlYnZ0dCBmaWxlIGNvbnRlbnRzIGFuZCBwYXJzZXMgaXQgaW50byBjdWVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY0NvbnRlbnRcbiAqICAgICAgICB3ZWJWVFQgZmlsZSBjb250ZW50c1xuICpcbiAqIEBwYXJhbSB7VGV4dFRyYWNrfSB0cmFja1xuICogICAgICAgIFRleHRUcmFjayB0byBhZGQgY3VlcyB0by4gQ3VlcyBjb21lIGZyb20gdGhlIHNyY0NvbnRlbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgcGFyc2VDdWVzID0gZnVuY3Rpb24gcGFyc2VDdWVzKHNyY0NvbnRlbnQsIHRyYWNrKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgd2luZG93JDEuV2ViVlRULlBhcnNlcih3aW5kb3ckMSwgd2luZG93JDEudnR0anMsIHdpbmRvdyQxLldlYlZUVC5TdHJpbmdEZWNvZGVyKCkpO1xuICB2YXIgZXJyb3JzID0gW107XG5cbiAgcGFyc2VyLm9uY3VlID0gZnVuY3Rpb24gKGN1ZSkge1xuICAgIHRyYWNrLmFkZEN1ZShjdWUpO1xuICB9O1xuXG4gIHBhcnNlci5vbnBhcnNpbmdlcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgfTtcblxuICBwYXJzZXIub25mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0cmFjay50cmlnZ2VyKHtcbiAgICAgIHR5cGU6ICdsb2FkZWRkYXRhJyxcbiAgICAgIHRhcmdldDogdHJhY2tcbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIucGFyc2Uoc3JjQ29udGVudCk7XG5cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHdpbmRvdyQxLmNvbnNvbGUgJiYgd2luZG93JDEuY29uc29sZS5ncm91cENvbGxhcHNlZCkge1xuICAgICAgd2luZG93JDEuY29uc29sZS5ncm91cENvbGxhcHNlZChcIlRleHQgVHJhY2sgcGFyc2luZyBlcnJvcnMgZm9yIFwiICsgdHJhY2suc3JjKTtcbiAgICB9XG5cbiAgICBlcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBsb2cuZXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaWYgKHdpbmRvdyQxLmNvbnNvbGUgJiYgd2luZG93JDEuY29uc29sZS5ncm91cEVuZCkge1xuICAgICAgd2luZG93JDEuY29uc29sZS5ncm91cEVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlci5mbHVzaCgpO1xufTtcbi8qKlxuICogTG9hZCBhIGBUZXh0VHJhY2tgIGZyb20gYSBzcGVjaWZpZWQgdXJsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNcbiAqICAgICAgICBVcmwgdG8gbG9hZCB0cmFjayBmcm9tLlxuICpcbiAqIEBwYXJhbSB7VGV4dFRyYWNrfSB0cmFja1xuICogICAgICAgIFRyYWNrIHRvIGFkZCBjdWVzIHRvLiBDb21lcyBmcm9tIHRoZSBjb250ZW50IGF0IHRoZSBlbmQgb2YgYHVybGAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciBsb2FkVHJhY2sgPSBmdW5jdGlvbiBsb2FkVHJhY2soc3JjLCB0cmFjaykge1xuICB2YXIgb3B0cyA9IHtcbiAgICB1cmk6IHNyY1xuICB9O1xuICB2YXIgY3Jvc3NPcmlnaW4gPSBpc0Nyb3NzT3JpZ2luKHNyYyk7XG5cbiAgaWYgKGNyb3NzT3JpZ2luKSB7XG4gICAgb3B0cy5jb3JzID0gY3Jvc3NPcmlnaW47XG4gIH1cblxuICBYSFIob3B0cywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyLCByZXNwb25zZSwgcmVzcG9uc2VCb2R5KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGxvZy5lcnJvcihlcnIsIHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICB0cmFjay5sb2FkZWRfID0gdHJ1ZTsgLy8gTWFrZSBzdXJlIHRoYXQgdnR0anMgaGFzIGxvYWRlZCwgb3RoZXJ3aXNlLCB3YWl0IHRpbGwgaXQgZmluaXNoZWQgbG9hZGluZ1xuICAgIC8vIE5PVEU6IHRoaXMgaXMgb25seSB1c2VkIGZvciB0aGUgYWx0L3ZpZGVvLm5vdnR0LmpzIGJ1aWxkXG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyQxLldlYlZUVCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHRyYWNrLnRlY2hfKSB7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgdXNlIGJlZm9yZSBkZWZpbmUgZXNsaW50IGVycm9yLCB3ZSBkZWZpbmUgbG9hZEhhbmRsZXJcbiAgICAgICAgLy8gYXMgYSBsZXQgaGVyZVxuICAgICAgICB0cmFjay50ZWNoXy5hbnkoWyd2dHRqc2xvYWRlZCcsICd2dHRqc2Vycm9yJ10sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAndnR0anNlcnJvcicpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcihcInZ0dGpzIGZhaWxlZCB0byBsb2FkLCBzdG9wcGluZyB0cnlpbmcgdG8gcHJvY2VzcyBcIiArIHRyYWNrLnNyYyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlQ3VlcyhyZXNwb25zZUJvZHksIHRyYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlQ3VlcyhyZXNwb25zZUJvZHksIHRyYWNrKTtcbiAgICB9XG4gIH0pKTtcbn07XG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgYFRleHRUcmFja2AuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI3RleHR0cmFja31cbiAqIEBleHRlbmRzIFRyYWNrXG4gKi9cblxuXG52YXIgVGV4dFRyYWNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVHJhY2spIHtcbiAgX2luaGVyaXRzTG9vc2UoVGV4dFRyYWNrLCBfVHJhY2spO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnM9e31cbiAgICogICAgICAgIE9iamVjdCBvZiBvcHRpb24gbmFtZXMgYW5kIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h9IG9wdGlvbnMudGVjaFxuICAgKiAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIHRlY2ggdGhhdCBvd25zIHRoaXMgVGV4dFRyYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRUcmFja35LaW5kfSBbb3B0aW9ucy5raW5kPSdzdWJ0aXRsZXMnXVxuICAgKiAgICAgICAgQSB2YWxpZCB0ZXh0IHRyYWNrIGtpbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFRyYWNrfk1vZGV9IFtvcHRpb25zLm1vZGU9J2Rpc2FibGVkJ11cbiAgICogICAgICAgIEEgdmFsaWQgdGV4dCB0cmFjayBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuaWQ9J3Zqc190cmFja18nICsgR3VpZC5uZXdHVUlEKCldXG4gICAqICAgICAgICBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBUZXh0VHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbD0nJ11cbiAgICogICAgICAgIFRoZSBtZW51IGxhYmVsIGZvciB0aGlzIHRyYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFuZ3VhZ2U9JyddXG4gICAqICAgICAgICBBIHZhbGlkIHR3byBjaGFyYWN0ZXIgbGFuZ3VhZ2UgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNyY2xhbmc9JyddXG4gICAqICAgICAgICBBIHZhbGlkIHR3byBjaGFyYWN0ZXIgbGFuZ3VhZ2UgY29kZS4gQW4gYWx0ZXJuYXRpdmUsIGJ1dCBkZXByaW9yaXRpemVkXG4gICAqICAgICAgICB2ZXJzaW9uIG9mIGBvcHRpb25zLmxhbmd1YWdlYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3JjXVxuICAgKiAgICAgICAgQSB1cmwgdG8gVGV4dFRyYWNrIGN1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGVmYXVsdF1cbiAgICogICAgICAgIElmIHRoaXMgdHJhY2sgc2hvdWxkIGRlZmF1bHQgdG8gb24gb3Igb2ZmLlxuICAgKi9cbiAgZnVuY3Rpb24gVGV4dFRyYWNrKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnRlY2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSB0ZWNoIHdhcyBub3QgcHJvdmlkZWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIHNldHRpbmdzID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgIGtpbmQ6IFRleHRUcmFja0tpbmRbb3B0aW9ucy5raW5kXSB8fCAnc3VidGl0bGVzJyxcbiAgICAgIGxhbmd1YWdlOiBvcHRpb25zLmxhbmd1YWdlIHx8IG9wdGlvbnMuc3JjbGFuZyB8fCAnJ1xuICAgIH0pO1xuICAgIHZhciBtb2RlID0gVGV4dFRyYWNrTW9kZVtzZXR0aW5ncy5tb2RlXSB8fCAnZGlzYWJsZWQnO1xuICAgIHZhciBkZWZhdWx0XyA9IHNldHRpbmdzW1wiZGVmYXVsdFwiXTtcblxuICAgIGlmIChzZXR0aW5ncy5raW5kID09PSAnbWV0YWRhdGEnIHx8IHNldHRpbmdzLmtpbmQgPT09ICdjaGFwdGVycycpIHtcbiAgICAgIG1vZGUgPSAnaGlkZGVuJztcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9UcmFjay5jYWxsKHRoaXMsIHNldHRpbmdzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRlY2hfID0gc2V0dGluZ3MudGVjaDtcbiAgICBfdGhpcy5jdWVzXyA9IFtdO1xuICAgIF90aGlzLmFjdGl2ZUN1ZXNfID0gW107XG4gICAgdmFyIGN1ZXMgPSBuZXcgVGV4dFRyYWNrQ3VlTGlzdChfdGhpcy5jdWVzXyk7XG4gICAgdmFyIGFjdGl2ZUN1ZXMgPSBuZXcgVGV4dFRyYWNrQ3VlTGlzdChfdGhpcy5hY3RpdmVDdWVzXyk7XG4gICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgdGltZXVwZGF0ZUhhbmRsZXIgPSBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBBY2Nlc3NpbmcgdGhpcy5hY3RpdmVDdWVzIGZvciB0aGUgc2lkZS1lZmZlY3RzIG9mIHVwZGF0aW5nIGl0c2VsZlxuICAgICAgLy8gZHVlIHRvIGl0cyBuYXR1cmUgYXMgYSBnZXR0ZXIgZnVuY3Rpb24uIERvIG5vdCByZW1vdmUgb3IgY3VlcyB3aWxsXG4gICAgICAvLyBzdG9wIHVwZGF0aW5nIVxuICAgICAgLy8gVXNlIHRoZSBzZXR0ZXIgdG8gcHJldmVudCBkZWxldGlvbiBmcm9tIHVnbGlmeSAocHVyZV9nZXR0ZXJzIHJ1bGUpXG4gICAgICB0aGlzLmFjdGl2ZUN1ZXMgPSB0aGlzLmFjdGl2ZUN1ZXM7XG5cbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignY3VlY2hhbmdlJyk7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtb2RlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICBfdGhpcy50ZWNoXy5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnRlY2hfLm9uKCd0aW1ldXBkYXRlJywgdGltZXVwZGF0ZUhhbmRsZXIpO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIHtcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIFRleHRUcmFja1xuICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gZGVmYXVsdFxuICAgICAgICogICAgICAgICBJZiB0aGlzIHRyYWNrIHdhcyBzZXQgdG8gYmUgb24gb3Igb2ZmIGJ5IGRlZmF1bHQuIENhbm5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAgICAgKiAgICAgICAgIGNyZWF0aW9uLlxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKlxuICAgICAgICogQHJlYWRvbmx5XG4gICAgICAgKi9cbiAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0XztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7fVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRyYWNrXG4gICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IG1vZGVcbiAgICAgICAqICAgICAgICAgU2V0IHRoZSBtb2RlIG9mIHRoaXMgVGV4dFRyYWNrIHRvIGEgdmFsaWQge0BsaW5rIFRleHRUcmFja35Nb2RlfS4gV2lsbFxuICAgICAgICogICAgICAgICBub3QgYmUgc2V0IGlmIHNldHRpbmcgdG8gYW4gaW52YWxpZCBtb2RlLlxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKlxuICAgICAgICogQGZpcmVzIFRleHRUcmFjayNtb2RlY2hhbmdlXG4gICAgICAgKi9cbiAgICAgIG1vZGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIG1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KG5ld01vZGUpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICAgIGlmICghVGV4dFRyYWNrTW9kZVtuZXdNb2RlXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1vZGUgPSBuZXdNb2RlO1xuXG4gICAgICAgICAgaWYgKG1vZGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIHRoaXMudGVjaF8ucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBfdGhpczIudGVjaF8ub24oJ3RpbWV1cGRhdGUnLCB0aW1ldXBkYXRlSGFuZGxlcik7XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZWNoXy5vZmYoJ3RpbWV1cGRhdGUnLCB0aW1ldXBkYXRlSGFuZGxlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEFuIGV2ZW50IHRoYXQgZmlyZXMgd2hlbiBtb2RlIGNoYW5nZXMgb24gdGhpcyB0cmFjay4gVGhpcyBhbGxvd3NcbiAgICAgICAgICAgKiB0aGUgVGV4dFRyYWNrTGlzdCB0aGF0IGhvbGRzIHRoaXMgdHJhY2sgdG8gYWN0IGFjY29yZGluZ2x5LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogPiBOb3RlOiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBzcGVjIVxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQGV2ZW50IFRleHRUcmFjayNtb2RlY2hhbmdlXG4gICAgICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICAgICAqL1xuXG5cbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ21vZGVjaGFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRyYWNrXG4gICAgICAgKiBAbWVtYmVyIHtUZXh0VHJhY2tDdWVMaXN0fSBjdWVzXG4gICAgICAgKiAgICAgICAgIFRoZSB0ZXh0IHRyYWNrIGN1ZSBsaXN0IGZvciB0aGlzIFRleHRUcmFjay5cbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICovXG4gICAgICBjdWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRfKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY3VlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7fVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRyYWNrXG4gICAgICAgKiBAbWVtYmVyIHtUZXh0VHJhY2tDdWVMaXN0fSBhY3RpdmVDdWVzXG4gICAgICAgKiAgICAgICAgIFRoZSBsaXN0IHRleHQgdHJhY2sgY3VlcyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIFRleHRUcmFjay5cbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICovXG4gICAgICBhY3RpdmVDdWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRfKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIG5vdGhpbmcgdG8gZG9cblxuXG4gICAgICAgICAgaWYgKHRoaXMuY3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVDdWVzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdCA9IHRoaXMudGVjaF8uY3VycmVudFRpbWUoKTtcbiAgICAgICAgICB2YXIgYWN0aXZlID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY3Vlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjdWUgPSB0aGlzLmN1ZXNbaV07XG5cbiAgICAgICAgICAgIGlmIChjdWUuc3RhcnRUaW1lIDw9IGN0ICYmIGN1ZS5lbmRUaW1lID49IGN0KSB7XG4gICAgICAgICAgICAgIGFjdGl2ZS5wdXNoKGN1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ZS5zdGFydFRpbWUgPT09IGN1ZS5lbmRUaW1lICYmIGN1ZS5zdGFydFRpbWUgPD0gY3QgJiYgY3VlLnN0YXJ0VGltZSArIDAuNSA+PSBjdCkge1xuICAgICAgICAgICAgICBhY3RpdmUucHVzaChjdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChhY3RpdmUubGVuZ3RoICE9PSB0aGlzLmFjdGl2ZUN1ZXNfLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhY3RpdmUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUN1ZXNfLmluZGV4T2YoYWN0aXZlW19pXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFjdGl2ZUN1ZXNfID0gYWN0aXZlO1xuICAgICAgICAgIGFjdGl2ZUN1ZXMuc2V0Q3Vlc18odGhpcy5hY3RpdmVDdWVzXyk7XG4gICAgICAgICAgcmV0dXJuIGFjdGl2ZUN1ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIC8hXFwgS2VlcCB0aGlzIHNldHRlciBlbXB0eSAoc2VlIHRoZSB0aW1ldXBkYXRlIGhhbmRsZXIgYWJvdmUpXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzZXR0aW5ncy5zcmMpIHtcbiAgICAgIF90aGlzLnNyYyA9IHNldHRpbmdzLnNyYztcbiAgICAgIGxvYWRUcmFjayhzZXR0aW5ncy5zcmMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMubG9hZGVkXyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBjdWUgdG8gdGhlIGludGVybmFsIGxpc3Qgb2YgY3Vlcy5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t+Q3VlfSBjdWVcbiAgICogICAgICAgIFRoZSBjdWUgdG8gYWRkIHRvIG91ciBpbnRlcm5hbCBsaXN0XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRleHRUcmFjay5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZEN1ZSA9IGZ1bmN0aW9uIGFkZEN1ZShvcmlnaW5hbEN1ZSkge1xuICAgIHZhciBjdWUgPSBvcmlnaW5hbEN1ZTtcblxuICAgIGlmICh3aW5kb3ckMS52dHRqcyAmJiAhKG9yaWdpbmFsQ3VlIGluc3RhbmNlb2Ygd2luZG93JDEudnR0anMuVlRUQ3VlKSkge1xuICAgICAgY3VlID0gbmV3IHdpbmRvdyQxLnZ0dGpzLlZUVEN1ZShvcmlnaW5hbEN1ZS5zdGFydFRpbWUsIG9yaWdpbmFsQ3VlLmVuZFRpbWUsIG9yaWdpbmFsQ3VlLnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBwcm9wIGluIG9yaWdpbmFsQ3VlKSB7XG4gICAgICAgIGlmICghKHByb3AgaW4gY3VlKSkge1xuICAgICAgICAgIGN1ZVtwcm9wXSA9IG9yaWdpbmFsQ3VlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IC8vIG1ha2Ugc3VyZSB0aGF0IGBpZGAgaXMgY29waWVkIG92ZXJcblxuXG4gICAgICBjdWUuaWQgPSBvcmlnaW5hbEN1ZS5pZDtcbiAgICAgIGN1ZS5vcmlnaW5hbEN1ZV8gPSBvcmlnaW5hbEN1ZTtcbiAgICB9XG5cbiAgICB2YXIgdHJhY2tzID0gdGhpcy50ZWNoXy50ZXh0VHJhY2tzKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRyYWNrc1tpXSAhPT0gdGhpcykge1xuICAgICAgICB0cmFja3NbaV0ucmVtb3ZlQ3VlKGN1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdWVzXy5wdXNoKGN1ZSk7XG4gICAgdGhpcy5jdWVzLnNldEN1ZXNfKHRoaXMuY3Vlc18pO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjdWUgZnJvbSBvdXIgaW50ZXJuYWwgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRUcmFja35DdWV9IHJlbW92ZUN1ZVxuICAgKiAgICAgICAgVGhlIGN1ZSB0byByZW1vdmUgZnJvbSBvdXIgaW50ZXJuYWwgbGlzdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZW1vdmVDdWUgPSBmdW5jdGlvbiByZW1vdmVDdWUoX3JlbW92ZUN1ZSkge1xuICAgIHZhciBpID0gdGhpcy5jdWVzXy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YXIgY3VlID0gdGhpcy5jdWVzX1tpXTtcblxuICAgICAgaWYgKGN1ZSA9PT0gX3JlbW92ZUN1ZSB8fCBjdWUub3JpZ2luYWxDdWVfICYmIGN1ZS5vcmlnaW5hbEN1ZV8gPT09IF9yZW1vdmVDdWUpIHtcbiAgICAgICAgdGhpcy5jdWVzXy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuY3Vlcy5zZXRDdWVzXyh0aGlzLmN1ZXNfKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUZXh0VHJhY2s7XG59KFRyYWNrKTtcbi8qKlxuICogY3VlY2hhbmdlIC0gT25lIG9yIG1vcmUgY3VlcyBpbiB0aGUgdHJhY2sgaGF2ZSBiZWNvbWUgYWN0aXZlIG9yIHN0b3BwZWQgYmVpbmcgYWN0aXZlLlxuICovXG5cblxuVGV4dFRyYWNrLnByb3RvdHlwZS5hbGxvd2VkRXZlbnRzXyA9IHtcbiAgY3VlY2hhbmdlOiAnY3VlY2hhbmdlJ1xufTtcblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGBBdWRpb1RyYWNrYC4gSWYgaXQgaXMgcGFydCBvZiBhbiB7QGxpbmsgQXVkaW9UcmFja0xpc3R9XG4gKiBvbmx5IG9uZSBgQXVkaW9UcmFja2AgaW4gdGhlIGxpc3Qgd2lsbCBiZSBlbmFibGVkIGF0IGEgdGltZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjYXVkaW90cmFja31cbiAqIEBleHRlbmRzIFRyYWNrXG4gKi9cblxudmFyIEF1ZGlvVHJhY2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UcmFjaykge1xuICBfaW5oZXJpdHNMb29zZShBdWRpb1RyYWNrLCBfVHJhY2spO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKiAgICAgICAgT2JqZWN0IG9mIG9wdGlvbiBuYW1lcyBhbmQgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaW9UcmFja35LaW5kfSBbb3B0aW9ucy5raW5kPScnXVxuICAgKiAgICAgICAgQSB2YWxpZCBhdWRpbyB0cmFjayBraW5kXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5pZD0ndmpzX3RyYWNrXycgKyBHdWlkLm5ld0dVSUQoKV1cbiAgICogICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIEF1ZGlvVHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbD0nJ11cbiAgICogICAgICAgIFRoZSBtZW51IGxhYmVsIGZvciB0aGlzIHRyYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFuZ3VhZ2U9JyddXG4gICAqICAgICAgICBBIHZhbGlkIHR3byBjaGFyYWN0ZXIgbGFuZ3VhZ2UgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVkXVxuICAgKiAgICAgICAgSWYgdGhpcyB0cmFjayBpcyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IHBsYXlpbmcuIElmIHRoaXMgdHJhY2sgaXMgcGFydCBvZlxuICAgKiAgICAgICAgYW4ge0BsaW5rIEF1ZGlvVHJhY2tMaXN0fSwgb25seSBvbmUge0BsaW5rIEF1ZGlvVHJhY2t9IHdpbGwgYmUgZW5hYmxlZC5cbiAgICovXG4gIGZ1bmN0aW9uIEF1ZGlvVHJhY2sob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgc2V0dGluZ3MgPSBtZXJnZU9wdGlvbnMob3B0aW9ucywge1xuICAgICAga2luZDogQXVkaW9UcmFja0tpbmRbb3B0aW9ucy5raW5kXSB8fCAnJ1xuICAgIH0pO1xuICAgIF90aGlzID0gX1RyYWNrLmNhbGwodGhpcywgc2V0dGluZ3MpIHx8IHRoaXM7XG4gICAgdmFyIGVuYWJsZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgQXVkaW9UcmFja1xuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IGVuYWJsZWRcbiAgICAgKiAgICAgICAgIElmIHRoaXMgYEF1ZGlvVHJhY2tgIGlzIGVuYWJsZWQgb3Igbm90LiBXaGVuIHNldHRpbmcgdGhpcyB3aWxsXG4gICAgICogICAgICAgICBmaXJlIHtAbGluayBBdWRpb1RyYWNrI2VuYWJsZWRjaGFuZ2V9IGlmIHRoZSBzdGF0ZSBvZiBlbmFibGVkIGlzIGNoYW5nZWQuXG4gICAgICogQGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAZmlyZXMgVmlkZW9UcmFjayNzZWxlY3RlZGNoYW5nZVxuICAgICAqL1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAnZW5hYmxlZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZW5hYmxlZDtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChuZXdFbmFibGVkKSB7XG4gICAgICAgIC8vIGFuIGludmFsaWQgb3IgdW5jaGFuZ2VkIHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgbmV3RW5hYmxlZCAhPT0gJ2Jvb2xlYW4nIHx8IG5ld0VuYWJsZWQgPT09IGVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbmFibGVkID0gbmV3RW5hYmxlZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgZmlyZXMgd2hlbiBlbmFibGVkIGNoYW5nZXMgb24gdGhpcyB0cmFjay4gVGhpcyBhbGxvd3NcbiAgICAgICAgICogdGhlIEF1ZGlvVHJhY2tMaXN0IHRoYXQgaG9sZHMgdGhpcyB0cmFjayB0byBhY3QgYWNjb3JkaW5nbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gTm90ZTogVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgc3BlYyEgTmF0aXZlIHRyYWNrcyB3aWxsIGRvXG4gICAgICAgICAqICAgICAgICAgdGhpcyBpbnRlcm5hbGx5IHdpdGhvdXQgYW4gZXZlbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBBdWRpb1RyYWNrI2VuYWJsZWRjaGFuZ2VcbiAgICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICAgKi9cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2VuYWJsZWRjaGFuZ2UnKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gaWYgdGhlIHVzZXIgc2V0cyB0aGlzIHRyYWNrIHRvIHNlbGVjdGVkIHRoZW5cbiAgICAvLyBzZXQgc2VsZWN0ZWQgdG8gdGhhdCB0cnVlIHZhbHVlIG90aGVyd2lzZVxuICAgIC8vIHdlIGtlZXAgaXQgZmFsc2VcblxuICAgIGlmIChzZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICBfdGhpcy5lbmFibGVkID0gc2V0dGluZ3MuZW5hYmxlZDtcbiAgICB9XG5cbiAgICBfdGhpcy5sb2FkZWRfID0gdHJ1ZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQXVkaW9UcmFjaztcbn0oVHJhY2spO1xuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgYFZpZGVvVHJhY2tgLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCN2aWRlb3RyYWNrfVxuICogQGV4dGVuZHMgVHJhY2tcbiAqL1xuXG52YXIgVmlkZW9UcmFjayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RyYWNrKSB7XG4gIF9pbmhlcml0c0xvb3NlKFZpZGVvVHJhY2ssIF9UcmFjayk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG4gICAqICAgICAgICBPYmplY3Qgb2Ygb3B0aW9uIG5hbWVzIGFuZCB2YWx1ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtpbmQ9JyddXG4gICAqICAgICAgICBBIHZhbGlkIHtAbGluayBWaWRlb1RyYWNrfktpbmR9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5pZD0ndmpzX3RyYWNrXycgKyBHdWlkLm5ld0dVSUQoKV1cbiAgICogICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIEF1ZGlvVHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbD0nJ11cbiAgICogICAgICAgIFRoZSBtZW51IGxhYmVsIGZvciB0aGlzIHRyYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFuZ3VhZ2U9JyddXG4gICAqICAgICAgICBBIHZhbGlkIHR3byBjaGFyYWN0ZXIgbGFuZ3VhZ2UgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zZWxlY3RlZF1cbiAgICogICAgICAgIElmIHRoaXMgdHJhY2sgaXMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBwbGF5aW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gVmlkZW9UcmFjayhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHZhciBzZXR0aW5ncyA9IG1lcmdlT3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICBraW5kOiBWaWRlb1RyYWNrS2luZFtvcHRpb25zLmtpbmRdIHx8ICcnXG4gICAgfSk7XG4gICAgX3RoaXMgPSBfVHJhY2suY2FsbCh0aGlzLCBzZXR0aW5ncykgfHwgdGhpcztcbiAgICB2YXIgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgVmlkZW9UcmFja1xuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAgICogICAgICAgICBJZiB0aGlzIGBWaWRlb1RyYWNrYCBpcyBzZWxlY3RlZCBvciBub3QuIFdoZW4gc2V0dGluZyB0aGlzIHdpbGxcbiAgICAgKiAgICAgICAgIGZpcmUge0BsaW5rIFZpZGVvVHJhY2sjc2VsZWN0ZWRjaGFuZ2V9IGlmIHRoZSBzdGF0ZSBvZiBzZWxlY3RlZCBjaGFuZ2VkLlxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQGZpcmVzIFZpZGVvVHJhY2sjc2VsZWN0ZWRjaGFuZ2VcbiAgICAgKi9cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgJ3NlbGVjdGVkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChuZXdTZWxlY3RlZCkge1xuICAgICAgICAvLyBhbiBpbnZhbGlkIG9yIHVuY2hhbmdlZCB2YWx1ZVxuICAgICAgICBpZiAodHlwZW9mIG5ld1NlbGVjdGVkICE9PSAnYm9vbGVhbicgfHwgbmV3U2VsZWN0ZWQgPT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgZmlyZXMgd2hlbiBzZWxlY3RlZCBjaGFuZ2VzIG9uIHRoaXMgdHJhY2suIFRoaXMgYWxsb3dzXG4gICAgICAgICAqIHRoZSBWaWRlb1RyYWNrTGlzdCB0aGF0IGhvbGRzIHRoaXMgdHJhY2sgdG8gYWN0IGFjY29yZGluZ2x5LlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IE5vdGU6IFRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIHNwZWMhIE5hdGl2ZSB0cmFja3Mgd2lsbCBkb1xuICAgICAgICAgKiAgICAgICAgIHRoaXMgaW50ZXJuYWxseSB3aXRob3V0IGFuIGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgVmlkZW9UcmFjayNzZWxlY3RlZGNoYW5nZVxuICAgICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgICAqL1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc2VsZWN0ZWRjaGFuZ2UnKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gaWYgdGhlIHVzZXIgc2V0cyB0aGlzIHRyYWNrIHRvIHNlbGVjdGVkIHRoZW5cbiAgICAvLyBzZXQgc2VsZWN0ZWQgdG8gdGhhdCB0cnVlIHZhbHVlIG90aGVyd2lzZVxuICAgIC8vIHdlIGtlZXAgaXQgZmFsc2VcblxuICAgIGlmIChzZXR0aW5ncy5zZWxlY3RlZCkge1xuICAgICAgX3RoaXMuc2VsZWN0ZWQgPSBzZXR0aW5ncy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gVmlkZW9UcmFjaztcbn0oVHJhY2spO1xuXG4vKipcbiAqIEBtZW1iZXJvZiBIVE1MVHJhY2tFbGVtZW50XG4gKiBAdHlwZWRlZiB7SFRNTFRyYWNrRWxlbWVudH5SZWFkeVN0YXRlfVxuICogQGVudW0ge251bWJlcn1cbiAqL1xuXG52YXIgTk9ORSA9IDA7XG52YXIgTE9BRElORyA9IDE7XG52YXIgTE9BREVEID0gMjtcbnZhciBFUlJPUiA9IDM7XG4vKipcbiAqIEEgc2luZ2xlIHRyYWNrIHJlcHJlc2VudGVkIGluIHRoZSBET00uXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2h0bWx0cmFja2VsZW1lbnR9XG4gKiBAZXh0ZW5kcyBFdmVudFRhcmdldFxuICovXG5cbnZhciBIVE1MVHJhY2tFbGVtZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfRXZlbnRUYXJnZXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoSFRNTFRyYWNrRWxlbWVudCwgX0V2ZW50VGFyZ2V0KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zPXt9XG4gICAqICAgICAgICBPYmplY3Qgb2Ygb3B0aW9uIG5hbWVzIGFuZCB2YWx1ZXNcbiAgICpcbiAgICogQHBhcmFtIHtUZWNofSBvcHRpb25zLnRlY2hcbiAgICogICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSB0ZWNoIHRoYXQgb3ducyB0aGlzIEhUTUxUcmFja0VsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFRyYWNrfktpbmR9IFtvcHRpb25zLmtpbmQ9J3N1YnRpdGxlcyddXG4gICAqICAgICAgICBBIHZhbGlkIHRleHQgdHJhY2sga2luZC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t+TW9kZX0gW29wdGlvbnMubW9kZT0nZGlzYWJsZWQnXVxuICAgKiAgICAgICAgQSB2YWxpZCB0ZXh0IHRyYWNrIG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5pZD0ndmpzX3RyYWNrXycgKyBHdWlkLm5ld0dVSUQoKV1cbiAgICogICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIFRleHRUcmFjay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsPScnXVxuICAgKiAgICAgICAgVGhlIG1lbnUgbGFiZWwgZm9yIHRoaXMgdHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYW5ndWFnZT0nJ11cbiAgICogICAgICAgIEEgdmFsaWQgdHdvIGNoYXJhY3RlciBsYW5ndWFnZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3JjbGFuZz0nJ11cbiAgICogICAgICAgIEEgdmFsaWQgdHdvIGNoYXJhY3RlciBsYW5ndWFnZSBjb2RlLiBBbiBhbHRlcm5hdGl2ZSwgYnV0IGRlcHJpb3JpdGl6ZWRcbiAgICogICAgICAgIHZlc2lvbiBvZiBgb3B0aW9ucy5sYW5ndWFnZWBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNyY11cbiAgICogICAgICAgIEEgdXJsIHRvIFRleHRUcmFjayBjdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlZmF1bHRdXG4gICAqICAgICAgICBJZiB0aGlzIHRyYWNrIHNob3VsZCBkZWZhdWx0IHRvIG9uIG9yIG9mZi5cbiAgICovXG4gIGZ1bmN0aW9uIEhUTUxUcmFja0VsZW1lbnQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9FdmVudFRhcmdldC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgdmFyIHJlYWR5U3RhdGU7XG4gICAgdmFyIHRyYWNrID0gbmV3IFRleHRUcmFjayhvcHRpb25zKTtcbiAgICBfdGhpcy5raW5kID0gdHJhY2sua2luZDtcbiAgICBfdGhpcy5zcmMgPSB0cmFjay5zcmM7XG4gICAgX3RoaXMuc3JjbGFuZyA9IHRyYWNrLmxhbmd1YWdlO1xuICAgIF90aGlzLmxhYmVsID0gdHJhY2subGFiZWw7XG4gICAgX3RoaXNbXCJkZWZhdWx0XCJdID0gdHJhY2tbXCJkZWZhdWx0XCJdO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBIVE1MVHJhY2tFbGVtZW50XG4gICAgICAgKiBAbWVtYmVyIHtIVE1MVHJhY2tFbGVtZW50flJlYWR5U3RhdGV9IHJlYWR5U3RhdGVcbiAgICAgICAqICAgICAgICAgVGhlIGN1cnJlbnQgcmVhZHkgc3RhdGUgb2YgdGhlIHRyYWNrIGVsZW1lbnQuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqL1xuICAgICAgcmVhZHlTdGF0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZHlTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgSFRNTFRyYWNrRWxlbWVudFxuICAgICAgICogQG1lbWJlciB7VGV4dFRyYWNrfSB0cmFja1xuICAgICAgICogICAgICAgICBUaGUgdW5kZXJseWluZyBUZXh0VHJhY2sgb2JqZWN0LlxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICB0cmFjazoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdHJhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZWFkeVN0YXRlID0gTk9ORTtcbiAgICAvKipcbiAgICAgKiBAbGlzdGVucyBUZXh0VHJhY2sjbG9hZGVkZGF0YVxuICAgICAqIEBmaXJlcyBIVE1MVHJhY2tFbGVtZW50I2xvYWRcbiAgICAgKi9cblxuICAgIHRyYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZWFkeVN0YXRlID0gTE9BREVEO1xuXG4gICAgICBfdGhpcy50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ2xvYWQnLFxuICAgICAgICB0YXJnZXQ6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gSFRNTFRyYWNrRWxlbWVudDtcbn0oRXZlbnRUYXJnZXQpO1xuXG5IVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZS5hbGxvd2VkRXZlbnRzXyA9IHtcbiAgbG9hZDogJ2xvYWQnXG59O1xuSFRNTFRyYWNrRWxlbWVudC5OT05FID0gTk9ORTtcbkhUTUxUcmFja0VsZW1lbnQuTE9BRElORyA9IExPQURJTkc7XG5IVE1MVHJhY2tFbGVtZW50LkxPQURFRCA9IExPQURFRDtcbkhUTUxUcmFja0VsZW1lbnQuRVJST1IgPSBFUlJPUjtcblxuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdHJhY2sgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VkIGluXG4gKiBwbGF5ZXIuanMsIHRlY2guanMsIGh0bWw1LmpzIGFuZCBwb3NzaWJseSBvdGhlciB0ZWNocyBpbiB0aGUgZnV0dXJlLlxuICovXG5cbnZhciBOT1JNQUwgPSB7XG4gIGF1ZGlvOiB7XG4gICAgTGlzdENsYXNzOiBBdWRpb1RyYWNrTGlzdCxcbiAgICBUcmFja0NsYXNzOiBBdWRpb1RyYWNrLFxuICAgIGNhcGl0YWxOYW1lOiAnQXVkaW8nXG4gIH0sXG4gIHZpZGVvOiB7XG4gICAgTGlzdENsYXNzOiBWaWRlb1RyYWNrTGlzdCxcbiAgICBUcmFja0NsYXNzOiBWaWRlb1RyYWNrLFxuICAgIGNhcGl0YWxOYW1lOiAnVmlkZW8nXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBMaXN0Q2xhc3M6IFRleHRUcmFja0xpc3QsXG4gICAgVHJhY2tDbGFzczogVGV4dFRyYWNrLFxuICAgIGNhcGl0YWxOYW1lOiAnVGV4dCdcbiAgfVxufTtcbk9iamVjdC5rZXlzKE5PUk1BTCkuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBOT1JNQUxbdHlwZV0uZ2V0dGVyTmFtZSA9IHR5cGUgKyBcIlRyYWNrc1wiO1xuICBOT1JNQUxbdHlwZV0ucHJpdmF0ZU5hbWUgPSB0eXBlICsgXCJUcmFja3NfXCI7XG59KTtcbnZhciBSRU1PVEUgPSB7XG4gIHJlbW90ZVRleHQ6IHtcbiAgICBMaXN0Q2xhc3M6IFRleHRUcmFja0xpc3QsXG4gICAgVHJhY2tDbGFzczogVGV4dFRyYWNrLFxuICAgIGNhcGl0YWxOYW1lOiAnUmVtb3RlVGV4dCcsXG4gICAgZ2V0dGVyTmFtZTogJ3JlbW90ZVRleHRUcmFja3MnLFxuICAgIHByaXZhdGVOYW1lOiAncmVtb3RlVGV4dFRyYWNrc18nXG4gIH0sXG4gIHJlbW90ZVRleHRFbDoge1xuICAgIExpc3RDbGFzczogSHRtbFRyYWNrRWxlbWVudExpc3QsXG4gICAgVHJhY2tDbGFzczogSFRNTFRyYWNrRWxlbWVudCxcbiAgICBjYXBpdGFsTmFtZTogJ1JlbW90ZVRleHRUcmFja0VscycsXG4gICAgZ2V0dGVyTmFtZTogJ3JlbW90ZVRleHRUcmFja0VscycsXG4gICAgcHJpdmF0ZU5hbWU6ICdyZW1vdGVUZXh0VHJhY2tFbHNfJ1xuICB9XG59O1xudmFyIEFMTCA9IG1lcmdlT3B0aW9ucyhOT1JNQUwsIFJFTU9URSk7XG5SRU1PVEUubmFtZXMgPSBPYmplY3Qua2V5cyhSRU1PVEUpO1xuTk9STUFMLm5hbWVzID0gT2JqZWN0LmtleXMoTk9STUFMKTtcbkFMTC5uYW1lcyA9IFtdLmNvbmNhdChSRU1PVEUubmFtZXMpLmNvbmNhdChOT1JNQUwubmFtZXMpO1xuXG4vKipcbiAqIEFuIE9iamVjdCBjb250YWluaW5nIGEgc3RydWN0dXJlIGxpa2U6IGB7c3JjOiAndXJsJywgdHlwZTogJ21pbWV0eXBlJ31gIG9yIHN0cmluZ1xuICogdGhhdCBqdXN0IGNvbnRhaW5zIHRoZSBzcmMgdXJsIGFsb25lLlxuICogKiBgdmFyIFNvdXJjZU9iamVjdCA9IHtzcmM6ICdodHRwOi8vZXguY29tL3ZpZGVvLm1wNCcsIHR5cGU6ICd2aWRlby9tcDQnfTtgXG4gICAqIGB2YXIgU291cmNlU3RyaW5nID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9zb21lLXZpZGVvLm1wNCc7YFxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R8c3RyaW5nfSBUZWNoflNvdXJjZU9iamVjdFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcmNcbiAqICAgICAgICAgICBUaGUgdXJsIHRvIHRoZSBzb3VyY2VcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICogICAgICAgICAgIFRoZSBtaW1lIHR5cGUgb2YgdGhlIHNvdXJjZVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB1c2VkIGJ5IHtAbGluayBUZWNofSB0byBjcmVhdGUgYSBuZXcge0BsaW5rIFRleHRUcmFja30uXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKiBAcGFyYW0ge1RlY2h9IHNlbGZcbiAqICAgICAgICBBbiBpbnN0YW5jZSBvZiB0aGUgVGVjaCBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2luZFxuICogICAgICAgIGBUZXh0VHJhY2tgIGtpbmQgKHN1YnRpdGxlcywgY2FwdGlvbnMsIGRlc2NyaXB0aW9ucywgY2hhcHRlcnMsIG9yIG1ldGFkYXRhKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbGFiZWxdXG4gKiAgICAgICAgTGFiZWwgdG8gaWRlbnRpZnkgdGhlIHRleHQgdHJhY2tcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2xhbmd1YWdlXVxuICogICAgICAgIFR3byBsZXR0ZXIgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuICogICAgICAgIEFuIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgdGV4dCB0cmFjayBvcHRpb25zXG4gKlxuICogQHJldHVybiB7VGV4dFRyYWNrfVxuICogICAgICAgICAgVGhlIHRleHQgdHJhY2sgdGhhdCB3YXMgY3JlYXRlZC5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVUcmFja0hlbHBlcihzZWxmLCBraW5kLCBsYWJlbCwgbGFuZ3VhZ2UsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciB0cmFja3MgPSBzZWxmLnRleHRUcmFja3MoKTtcbiAgb3B0aW9ucy5raW5kID0ga2luZDtcblxuICBpZiAobGFiZWwpIHtcbiAgICBvcHRpb25zLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBpZiAobGFuZ3VhZ2UpIHtcbiAgICBvcHRpb25zLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gIH1cblxuICBvcHRpb25zLnRlY2ggPSBzZWxmO1xuICB2YXIgdHJhY2sgPSBuZXcgQUxMLnRleHQuVHJhY2tDbGFzcyhvcHRpb25zKTtcbiAgdHJhY2tzLmFkZFRyYWNrKHRyYWNrKTtcbiAgcmV0dXJuIHRyYWNrO1xufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBtZWRpYSBwbGF5YmFjayB0ZWNobm9sb2d5IGNvbnRyb2xsZXJzLCBzdWNoIGFzXG4gKiB7QGxpbmsgRmxhc2h9IGFuZCB7QGxpbmsgSFRNTDV9XG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxuXG52YXIgVGVjaCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUZWNoLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBUZWNoLlxuICAqXG4gICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAqXG4gICogQHBhcmFtIHtDb21wb25lbnR+UmVhZHlDYWxsYmFja30gcmVhZHlcbiAgKiAgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBgSFRNTDVgIFRlY2ggaXMgcmVhZHkuXG4gICovXG4gIGZ1bmN0aW9uIFRlY2gob3B0aW9ucywgcmVhZHkpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKHJlYWR5ID09PSB2b2lkIDApIHtcbiAgICAgIHJlYWR5ID0gZnVuY3Rpb24gcmVhZHkoKSB7fTtcbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSB0ZWNoIHRvIHJlcG9ydCB1c2VyIGFjdGl2aXR5IGF1dG9tYXRpY2FsbHkuXG4gICAgLy8gVGhpcyBpcyBkb25lIG1hbnVhbGx5IGluIGFkZENvbnRyb2xzTGlzdGVuZXJzXG4gICAgb3B0aW9ucy5yZXBvcnRUb3VjaEFjdGl2aXR5ID0gZmFsc2U7XG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgbnVsbCwgb3B0aW9ucywgcmVhZHkpIHx8IHRoaXM7IC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgY3VycmVudCBzb3VyY2UgaGFzIHBsYXllZCBhdCBhbGwgdG9cbiAgICAvLyBpbXBsZW1lbnQgYSB2ZXJ5IGxpbWl0ZWQgcGxheWVkKClcblxuICAgIF90aGlzLmhhc1N0YXJ0ZWRfID0gZmFsc2U7XG5cbiAgICBfdGhpcy5vbigncGxheWluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuaGFzU3RhcnRlZF8gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgX3RoaXMub24oJ2xvYWRzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuaGFzU3RhcnRlZF8gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIEFMTC5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcHJvcHMgPSBBTExbbmFtZV07XG5cbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnNbcHJvcHMuZ2V0dGVyTmFtZV0pIHtcbiAgICAgICAgX3RoaXNbcHJvcHMucHJpdmF0ZU5hbWVdID0gb3B0aW9uc1twcm9wcy5nZXR0ZXJOYW1lXTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTWFudWFsbHkgdHJhY2sgcHJvZ3Jlc3MgaW4gY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIvZmxhc2ggcGxheWVyIGRvZXNuJ3QgcmVwb3J0IGl0LlxuXG4gICAgaWYgKCFfdGhpcy5mZWF0dXJlc1Byb2dyZXNzRXZlbnRzKSB7XG4gICAgICBfdGhpcy5tYW51YWxQcm9ncmVzc09uKCk7XG4gICAgfSAvLyBNYW51YWxseSB0cmFjayB0aW1ldXBkYXRlcyBpbiBjYXNlcyB3aGVyZSB0aGUgYnJvd3Nlci9mbGFzaCBwbGF5ZXIgZG9lc24ndCByZXBvcnQgaXQuXG5cblxuICAgIGlmICghX3RoaXMuZmVhdHVyZXNUaW1ldXBkYXRlRXZlbnRzKSB7XG4gICAgICBfdGhpcy5tYW51YWxUaW1lVXBkYXRlc09uKCk7XG4gICAgfVxuXG4gICAgWydUZXh0JywgJ0F1ZGlvJywgJ1ZpZGVvJ10uZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgIGlmIChvcHRpb25zW1wibmF0aXZlXCIgKyB0cmFjayArIFwiVHJhY2tzXCJdID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpc1tcImZlYXR1cmVzTmF0aXZlXCIgKyB0cmFjayArIFwiVHJhY2tzXCJdID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5uYXRpdmVDYXB0aW9ucyA9PT0gZmFsc2UgfHwgb3B0aW9ucy5uYXRpdmVUZXh0VHJhY2tzID09PSBmYWxzZSkge1xuICAgICAgX3RoaXMuZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLm5hdGl2ZUNhcHRpb25zID09PSB0cnVlIHx8IG9wdGlvbnMubmF0aXZlVGV4dFRyYWNrcyA9PT0gdHJ1ZSkge1xuICAgICAgX3RoaXMuZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIV90aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykge1xuICAgICAgX3RoaXMuZW11bGF0ZVRleHRUcmFja3MoKTtcbiAgICB9XG5cbiAgICBfdGhpcy5hdXRvUmVtb3RlVGV4dFRyYWNrc18gPSBuZXcgQUxMLnRleHQuTGlzdENsYXNzKCk7XG5cbiAgICBfdGhpcy5pbml0VHJhY2tMaXN0ZW5lcnMoKTsgLy8gVHVybiBvbiBjb21wb25lbnQgdGFwIGV2ZW50cyBvbmx5IGlmIG5vdCB1c2luZyBuYXRpdmUgY29udHJvbHNcblxuXG4gICAgaWYgKCFvcHRpb25zLm5hdGl2ZUNvbnRyb2xzRm9yVG91Y2gpIHtcbiAgICAgIF90aGlzLmVtaXRUYXBFdmVudHMoKTtcbiAgICB9XG5cbiAgICBpZiAoX3RoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIF90aGlzLm5hbWVfID0gX3RoaXMuY29uc3RydWN0b3IubmFtZSB8fCAnVW5rbm93biBUZWNoJztcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEEgc3BlY2lhbCBmdW5jdGlvbiB0byB0cmlnZ2VyIHNvdXJjZSBzZXQgaW4gYSB3YXkgdGhhdCB3aWxsIGFsbG93IHBsYXllclxuICAgKiB0byByZS10cmlnZ2VyIGlmIHRoZSBwbGF5ZXIgb3IgdGVjaCBhcmUgbm90IHJlYWR5IHlldC5cbiAgICpcbiAgICogQGZpcmVzIFRlY2gjc291cmNlc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVGhlIHNvdXJjZSBzdHJpbmcgYXQgdGhlIHRpbWUgb2YgdGhlIHNvdXJjZSBjaGFuZ2luZy5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVGVjaC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnRyaWdnZXJTb3VyY2VzZXQgPSBmdW5jdGlvbiB0cmlnZ2VyU291cmNlc2V0KHNyYykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLmlzUmVhZHlfKSB7XG4gICAgICAvLyBvbiBpbml0aWFsIHJlYWR5IHdlIGhhdmUgdG8gdHJpZ2dlciBzb3VyY2Ugc2V0XG4gICAgICAvLyAxbXMgYWZ0ZXIgcmVhZHkgc28gdGhhdCBwbGF5ZXIgY2FuIHdhdGNoIGZvciBpdC5cbiAgICAgIHRoaXMub25lKCdyZWFkeScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnRyaWdnZXJTb3VyY2VzZXQoc3JjKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgc291cmNlIGlzIHNldCBvbiB0aGUgdGVjaCBjYXVzaW5nIHRoZSBtZWRpYSBlbGVtZW50XG4gICAgICogdG8gcmVsb2FkLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgUGxheWVyI2V2ZW50OnNvdXJjZXNldH1cbiAgICAgKiBAZXZlbnQgVGVjaCNzb3VyY2VzZXRcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cblxuICAgIHRoaXMudHJpZ2dlcih7XG4gICAgICBzcmM6IHNyYyxcbiAgICAgIHR5cGU6ICdzb3VyY2VzZXQnXG4gICAgfSk7XG4gIH1cbiAgLyogRmFsbGJhY2tzIGZvciB1bnN1cHBvcnRlZCBldmVudCB0eXBlc1xuICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIC8qKlxuICAgKiBQb2x5ZmlsbCB0aGUgYHByb2dyZXNzYCBldmVudCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGl0IG5hdGl2ZWx5LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUZWNoI3RyYWNrUHJvZ3Jlc3N9XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLm1hbnVhbFByb2dyZXNzT24gPSBmdW5jdGlvbiBtYW51YWxQcm9ncmVzc09uKCkge1xuICAgIHRoaXMub24oJ2R1cmF0aW9uY2hhbmdlJywgdGhpcy5vbkR1cmF0aW9uQ2hhbmdlKTtcbiAgICB0aGlzLm1hbnVhbFByb2dyZXNzID0gdHJ1ZTsgLy8gVHJpZ2dlciBwcm9ncmVzcyB3YXRjaGluZyB3aGVuIGEgc291cmNlIGJlZ2lucyBsb2FkaW5nXG5cbiAgICB0aGlzLm9uZSgncmVhZHknLCB0aGlzLnRyYWNrUHJvZ3Jlc3MpO1xuICB9XG4gIC8qKlxuICAgKiBUdXJuIG9mZiB0aGUgcG9seWZpbGwgZm9yIGBwcm9ncmVzc2AgZXZlbnRzIHRoYXQgd2FzIGNyZWF0ZWQgaW5cbiAgICoge0BsaW5rIFRlY2gjbWFudWFsUHJvZ3Jlc3NPbn1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubWFudWFsUHJvZ3Jlc3NPZmYgPSBmdW5jdGlvbiBtYW51YWxQcm9ncmVzc09mZigpIHtcbiAgICB0aGlzLm1hbnVhbFByb2dyZXNzID0gZmFsc2U7XG4gICAgdGhpcy5zdG9wVHJhY2tpbmdQcm9ncmVzcygpO1xuICAgIHRoaXMub2ZmKCdkdXJhdGlvbmNoYW5nZScsIHRoaXMub25EdXJhdGlvbkNoYW5nZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgaXMgdXNlZCB0byB0cmlnZ2VyIGEgYHByb2dyZXNzYCBldmVudCB3aGVuIHRoZSBidWZmZXJlZCBwZXJjZW50IGNoYW5nZXMuIEl0XG4gICAqIHNldHMgYW4gaW50ZXJ2YWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBldmVyeSA1MDAgbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGlmIHRoZVxuICAgKiBidWZmZXIgZW5kIHBlcmNlbnQgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqID4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkge0BsaW5rIFRlY2gjbWFudWFsUHJvZ3Jlc3NPbn1cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBgcmVhZHlgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBUZWNoI3JlYWR5XG4gICAqIEBmaXJlcyBUZWNoI3Byb2dyZXNzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRyYWNrUHJvZ3Jlc3MgPSBmdW5jdGlvbiB0cmFja1Byb2dyZXNzKGV2ZW50KSB7XG4gICAgdGhpcy5zdG9wVHJhY2tpbmdQcm9ncmVzcygpO1xuICAgIHRoaXMucHJvZ3Jlc3NJbnRlcnZhbCA9IHRoaXMuc2V0SW50ZXJ2YWwoYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEb24ndCB0cmlnZ2VyIHVubGVzcyBidWZmZXJlZCBhbW91bnQgaXMgZ3JlYXRlciB0aGFuIGxhc3QgdGltZVxuICAgICAgdmFyIG51bUJ1ZmZlcmVkUGVyY2VudCA9IHRoaXMuYnVmZmVyZWRQZXJjZW50KCk7XG5cbiAgICAgIGlmICh0aGlzLmJ1ZmZlcmVkUGVyY2VudF8gIT09IG51bUJ1ZmZlcmVkUGVyY2VudCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2VlIHtAbGluayBQbGF5ZXIjcHJvZ3Jlc3N9XG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBUZWNoI3Byb2dyZXNzXG4gICAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHJpZ2dlcigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXJlZFBlcmNlbnRfID0gbnVtQnVmZmVyZWRQZXJjZW50O1xuXG4gICAgICBpZiAobnVtQnVmZmVyZWRQZXJjZW50ID09PSAxKSB7XG4gICAgICAgIHRoaXMuc3RvcFRyYWNraW5nUHJvZ3Jlc3MoKTtcbiAgICAgIH1cbiAgICB9KSwgNTAwKTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIG91ciBpbnRlcm5hbCBkdXJhdGlvbiBvbiBhIGBkdXJhdGlvbmNoYW5nZWAgZXZlbnQgYnkgY2FsbGluZ1xuICAgKiB7QGxpbmsgVGVjaCNkdXJhdGlvbn0uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGR1cmF0aW9uY2hhbmdlYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgVGVjaCNkdXJhdGlvbmNoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5vbkR1cmF0aW9uQ2hhbmdlID0gZnVuY3Rpb24gb25EdXJhdGlvbkNoYW5nZShldmVudCkge1xuICAgIHRoaXMuZHVyYXRpb25fID0gdGhpcy5kdXJhdGlvbigpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYW5kIGNyZWF0ZSBhIGBUaW1lUmFuZ2VgIG9iamVjdCBmb3IgYnVmZmVyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJuIHtUaW1lUmFuZ2V9XG4gICAqICAgICAgICAgVGhlIHRpbWUgcmFuZ2Ugb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJ1ZmZlcmVkID0gZnVuY3Rpb24gYnVmZmVyZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVSYW5nZXMoMCwgMCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgcGVyY2VudGFnZSBvZiB0aGUgY3VycmVudCB2aWRlbyB0aGF0IGlzIGN1cnJlbnRseSBidWZmZXJlZC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIEEgbnVtYmVyIGZyb20gMCB0byAxIHRoYXQgcmVwcmVzZW50cyB0aGUgZGVjaW1hbCBwZXJjZW50YWdlIG9mIHRoZVxuICAgKiAgICAgICAgIHZpZGVvIHRoYXQgaXMgYnVmZmVyZWQuXG4gICAqXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJ1ZmZlcmVkUGVyY2VudCA9IGZ1bmN0aW9uIGJ1ZmZlcmVkUGVyY2VudCQxKCkge1xuICAgIHJldHVybiBidWZmZXJlZFBlcmNlbnQodGhpcy5idWZmZXJlZCgpLCB0aGlzLmR1cmF0aW9uXyk7XG4gIH1cbiAgLyoqXG4gICAqIFR1cm4gb2ZmIHRoZSBwb2x5ZmlsbCBmb3IgYHByb2dyZXNzYCBldmVudHMgdGhhdCB3YXMgY3JlYXRlZCBpblxuICAgKiB7QGxpbmsgVGVjaCNtYW51YWxQcm9ncmVzc09ufVxuICAgKiBTdG9wIG1hbnVhbGx5IHRyYWNraW5nIHByb2dyZXNzIGV2ZW50cyBieSBjbGVhcmluZyB0aGUgaW50ZXJ2YWwgdGhhdCB3YXMgc2V0IGluXG4gICAqIHtAbGluayBUZWNoI3RyYWNrUHJvZ3Jlc3N9LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zdG9wVHJhY2tpbmdQcm9ncmVzcyA9IGZ1bmN0aW9uIHN0b3BUcmFja2luZ1Byb2dyZXNzKCkge1xuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCh0aGlzLnByb2dyZXNzSW50ZXJ2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBQb2x5ZmlsbCB0aGUgYHRpbWV1cGRhdGVgIGV2ZW50IGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIFRlY2gjdHJhY2tDdXJyZW50VGltZX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubWFudWFsVGltZVVwZGF0ZXNPbiA9IGZ1bmN0aW9uIG1hbnVhbFRpbWVVcGRhdGVzT24oKSB7XG4gICAgdGhpcy5tYW51YWxUaW1lVXBkYXRlcyA9IHRydWU7XG4gICAgdGhpcy5vbigncGxheScsIHRoaXMudHJhY2tDdXJyZW50VGltZSk7XG4gICAgdGhpcy5vbigncGF1c2UnLCB0aGlzLnN0b3BUcmFja2luZ0N1cnJlbnRUaW1lKTtcbiAgfVxuICAvKipcbiAgICogVHVybiBvZmYgdGhlIHBvbHlmaWxsIGZvciBgdGltZXVwZGF0ZWAgZXZlbnRzIHRoYXQgd2FzIGNyZWF0ZWQgaW5cbiAgICoge0BsaW5rIFRlY2gjbWFudWFsVGltZVVwZGF0ZXNPbn1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubWFudWFsVGltZVVwZGF0ZXNPZmYgPSBmdW5jdGlvbiBtYW51YWxUaW1lVXBkYXRlc09mZigpIHtcbiAgICB0aGlzLm1hbnVhbFRpbWVVcGRhdGVzID0gZmFsc2U7XG4gICAgdGhpcy5zdG9wVHJhY2tpbmdDdXJyZW50VGltZSgpO1xuICAgIHRoaXMub2ZmKCdwbGF5JywgdGhpcy50cmFja0N1cnJlbnRUaW1lKTtcbiAgICB0aGlzLm9mZigncGF1c2UnLCB0aGlzLnN0b3BUcmFja2luZ0N1cnJlbnRUaW1lKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB1cCBhbiBpbnRlcnZhbCBmdW5jdGlvbiB0byB0cmFjayBjdXJyZW50IHRpbWUgYW5kIHRyaWdnZXIgYHRpbWV1cGRhdGVgIGV2ZXJ5XG4gICAqIDI1MCBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBsaXN0ZW5zIFRlY2gjcGxheVxuICAgKiBAdHJpZ2dlcnMgVGVjaCN0aW1ldXBkYXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRyYWNrQ3VycmVudFRpbWUgPSBmdW5jdGlvbiB0cmFja0N1cnJlbnRUaW1lKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RvcFRyYWNraW5nQ3VycmVudFRpbWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRUaW1lSW50ZXJ2YWwgPSB0aGlzLnNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKlxuICAgICAgICogVHJpZ2dlcmVkIGF0IGFuIGludGVydmFsIG9mIDI1MG1zIHRvIGluZGljYXRlZCB0aGF0IHRpbWUgaXMgcGFzc2luZyBpbiB0aGUgdmlkZW8uXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IFRlY2gjdGltZXVwZGF0ZVxuICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICovXG4gICAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAndGltZXVwZGF0ZScsXG4gICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgbWFudWFsbHlUcmlnZ2VyZWQ6IHRydWVcbiAgICAgIH0pOyAvLyA0MiA9IDI0IGZwcyAvLyAyNTAgaXMgd2hhdCBXZWJraXQgdXNlcyAvLyBGRiB1c2VzIDE1XG4gICAgfSwgMjUwKTtcbiAgfVxuICAvKipcbiAgICogU3RvcCB0aGUgaW50ZXJ2YWwgZnVuY3Rpb24gY3JlYXRlZCBpbiB7QGxpbmsgVGVjaCN0cmFja0N1cnJlbnRUaW1lfSBzbyB0aGF0IHRoZVxuICAgKiBgdGltZXVwZGF0ZWAgZXZlbnQgaXMgbm8gbG9uZ2VyIHRyaWdnZXJlZC5cbiAgICpcbiAgICogQGxpc3RlbnMge1RlY2gjcGF1c2V9XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN0b3BUcmFja2luZ0N1cnJlbnRUaW1lID0gZnVuY3Rpb24gc3RvcFRyYWNraW5nQ3VycmVudFRpbWUoKSB7XG4gICAgdGhpcy5jbGVhckludGVydmFsKHRoaXMuY3VycmVudFRpbWVJbnRlcnZhbCk7IC8vICMxMDAyIC0gaWYgdGhlIHZpZGVvIGVuZHMgcmlnaHQgYmVmb3JlIHRoZSBuZXh0IHRpbWV1cGRhdGUgd291bGQgaGFwcGVuLFxuICAgIC8vIHRoZSBwcm9ncmVzcyBiYXIgd29uJ3QgbWFrZSBpdCBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG5cbiAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ3RpbWV1cGRhdGUnLFxuICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgbWFudWFsbHlUcmlnZ2VyZWQ6IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVHVybiBvZmYgYWxsIGV2ZW50IHBvbHlmaWxscywgY2xlYXIgdGhlIGBUZWNoYHMge0BsaW5rIEF1ZGlvVHJhY2tMaXN0fSxcbiAgICoge0BsaW5rIFZpZGVvVHJhY2tMaXN0fSwgYW5kIHtAbGluayBUZXh0VHJhY2tMaXN0fSwgYW5kIGRpc3Bvc2Ugb2YgdGhpcyBUZWNoLlxuICAgKlxuICAgKiBAZmlyZXMgQ29tcG9uZW50I2Rpc3Bvc2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgLy8gY2xlYXIgb3V0IGFsbCB0cmFja3MgYmVjYXVzZSB3ZSBjYW4ndCByZXVzZSB0aGVtIGJldHdlZW4gdGVjaHNcbiAgICB0aGlzLmNsZWFyVHJhY2tzKE5PUk1BTC5uYW1lcyk7IC8vIFR1cm4gb2ZmIGFueSBtYW51YWwgcHJvZ3Jlc3Mgb3IgdGltZXVwZGF0ZSB0cmFja2luZ1xuXG4gICAgaWYgKHRoaXMubWFudWFsUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMubWFudWFsUHJvZ3Jlc3NPZmYoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYW51YWxUaW1lVXBkYXRlcykge1xuICAgICAgdGhpcy5tYW51YWxUaW1lVXBkYXRlc09mZigpO1xuICAgIH1cblxuICAgIF9Db21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgb3V0IGEgc2luZ2xlIGBUcmFja0xpc3RgIG9yIGFuIGFycmF5IG9mIGBUcmFja0xpc3RzYCBnaXZlbiB0aGVpciBuYW1lcy5cbiAgICpcbiAgICogPiBOb3RlOiBUZWNocyB3aXRob3V0IHNvdXJjZSBoYW5kbGVycyBzaG91bGQgY2FsbCB0aGlzIGJldHdlZW4gc291cmNlcyBmb3IgYHZpZGVvYFxuICAgKiAgICAgICAgICYgYGF1ZGlvYCB0cmFja3MuIFlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGVtIGJldHdlZW4gdHJhY2tzIVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfHN0cmluZ30gdHlwZXNcbiAgICogICAgICAgIFRyYWNrTGlzdCBuYW1lcyB0byBjbGVhciwgdmFsaWQgbmFtZXMgYXJlIGB2aWRlb2AsIGBhdWRpb2AsIGFuZFxuICAgKiAgICAgICAgYHRleHRgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jbGVhclRyYWNrcyA9IGZ1bmN0aW9uIGNsZWFyVHJhY2tzKHR5cGVzKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0eXBlcyA9IFtdLmNvbmNhdCh0eXBlcyk7IC8vIGNsZWFyIG91dCBhbGwgdHJhY2tzIGJlY2F1c2Ugd2UgY2FuJ3QgcmV1c2UgdGhlbSBiZXR3ZWVuIHRlY2hzXG5cbiAgICB0eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgbGlzdCA9IF90aGlzM1t0eXBlICsgXCJUcmFja3NcIl0oKSB8fCBbXTtcbiAgICAgIHZhciBpID0gbGlzdC5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFyIHRyYWNrID0gbGlzdFtpXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgX3RoaXMzLnJlbW92ZVJlbW90ZVRleHRUcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0LnJlbW92ZVRyYWNrKHRyYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFueSBUZXh0VHJhY2tzIGFkZGVkIHZpYSBhZGRSZW1vdGVUZXh0VHJhY2sgdGhhdCBhcmVcbiAgICogZmxhZ2dlZCBmb3IgYXV0b21hdGljIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jbGVhbnVwQXV0b1RleHRUcmFja3MgPSBmdW5jdGlvbiBjbGVhbnVwQXV0b1RleHRUcmFja3MoKSB7XG4gICAgdmFyIGxpc3QgPSB0aGlzLmF1dG9SZW1vdGVUZXh0VHJhY2tzXyB8fCBbXTtcbiAgICB2YXIgaSA9IGxpc3QubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIHRyYWNrID0gbGlzdFtpXTtcbiAgICAgIHRoaXMucmVtb3ZlUmVtb3RlVGV4dFRyYWNrKHRyYWNrKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSB0ZWNoLCB3aGljaCB3aWxsIHJlbW92ZXMgYWxsIHNvdXJjZXMgYW5kIHJlc2V0IHRoZSBpbnRlcm5hbCByZWFkeVN0YXRlLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHt9XG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IGFuIGVycm9yIG9uIHRoZSBUZWNoLlxuICAgKlxuICAgKiBAcGFyYW0ge01lZGlhRXJyb3J9IFtlcnJdXG4gICAqICAgICAgICBFcnJvciB0byBzZXQgb24gdGhlIFRlY2hcbiAgICpcbiAgICogQHJldHVybiB7TWVkaWFFcnJvcnxudWxsfVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IGVycm9yIG9iamVjdCBvbiB0aGUgdGVjaCwgb3IgbnVsbCBpZiB0aGVyZSBpc24ndCBvbmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVycm9yID0gZnVuY3Rpb24gZXJyb3IoZXJyKSB7XG4gICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVycm9yXyA9IG5ldyBNZWRpYUVycm9yKGVycik7XG4gICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JfO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgVGltZVJhbmdlYHMgdGhhdCBoYXZlIGJlZW4gcGxheWVkIHRocm91Z2ggZm9yIHRoZSBjdXJyZW50IHNvdXJjZS5cbiAgICpcbiAgICogPiBOT1RFOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluY29tcGxldGUuIEl0IGRvZXMgbm90IHRyYWNrIHRoZSBwbGF5ZWQgYFRpbWVSYW5nZWAuXG4gICAqICAgICAgICAgSXQgb25seSBjaGVja3Mgd2hldGhlciB0aGUgc291cmNlIGhhcyBwbGF5ZWQgYXQgYWxsIG9yIG5vdC5cbiAgICpcbiAgICogQHJldHVybiB7VGltZVJhbmdlfVxuICAgKiAgICAgICAgIC0gQSBzaW5nbGUgdGltZSByYW5nZSBpZiB0aGlzIHZpZGVvIGhhcyBwbGF5ZWRcbiAgICogICAgICAgICAtIEFuIGVtcHR5IHNldCBvZiByYW5nZXMgaWYgbm90LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wbGF5ZWQgPSBmdW5jdGlvbiBwbGF5ZWQoKSB7XG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZF8pIHtcbiAgICAgIHJldHVybiBjcmVhdGVUaW1lUmFuZ2VzKDAsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVUaW1lUmFuZ2VzKCk7XG4gIH1cbiAgLyoqXG4gICAqIENhdXNlcyBhIG1hbnVhbCB0aW1lIHVwZGF0ZSB0byBvY2N1ciBpZiB7QGxpbmsgVGVjaCNtYW51YWxUaW1lVXBkYXRlc09ufSB3YXNcbiAgICogcHJldmlvdXNseSBjYWxsZWQuXG4gICAqXG4gICAqIEBmaXJlcyBUZWNoI3RpbWV1cGRhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbiBzZXRDdXJyZW50VGltZSgpIHtcbiAgICAvLyBpbXByb3ZlIHRoZSBhY2N1cmFjeSBvZiBtYW51YWwgdGltZXVwZGF0ZXNcbiAgICBpZiAodGhpcy5tYW51YWxUaW1lVXBkYXRlcykge1xuICAgICAgLyoqXG4gICAgICAgKiBBIG1hbnVhbCBgdGltZXVwZGF0ZWAgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IFRlY2gjdGltZXVwZGF0ZVxuICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICovXG4gICAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAndGltZXVwZGF0ZScsXG4gICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgbWFudWFsbHlUcmlnZ2VyZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVHVybiBvbiBsaXN0ZW5lcnMgZm9yIHtAbGluayBWaWRlb1RyYWNrTGlzdH0sIHtAbGluayB7QXVkaW9UcmFja0xpc3R9LCBhbmRcbiAgICoge0BsaW5rIFRleHRUcmFja0xpc3R9IGV2ZW50cy5cbiAgICpcbiAgICogVGhpcyBhZGRzIHtAbGluayBFdmVudFRhcmdldH5FdmVudExpc3RlbmVyc30gZm9yIGBhZGR0cmFja2AsIGFuZCAgYHJlbW92ZXRyYWNrYC5cbiAgICpcbiAgICogQGZpcmVzIFRlY2gjYXVkaW90cmFja2NoYW5nZVxuICAgKiBAZmlyZXMgVGVjaCN2aWRlb3RyYWNrY2hhbmdlXG4gICAqIEBmaXJlcyBUZWNoI3RleHR0cmFja2NoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pbml0VHJhY2tMaXN0ZW5lcnMgPSBmdW5jdGlvbiBpbml0VHJhY2tMaXN0ZW5lcnMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgICogVHJpZ2dlcmVkIHdoZW4gdHJhY2tzIGFyZSBhZGRlZCBvciByZW1vdmVkIG9uIHRoZSBUZWNoIHtAbGluayBBdWRpb1RyYWNrTGlzdH1cbiAgICAgICpcbiAgICAgICogQGV2ZW50IFRlY2gjYXVkaW90cmFja2NoYW5nZVxuICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAqIFRyaWdnZXJlZCB3aGVuIHRyYWNrcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBvbiB0aGUgVGVjaCB7QGxpbmsgVmlkZW9UcmFja0xpc3R9XG4gICAgICAqXG4gICAgICAqIEBldmVudCBUZWNoI3ZpZGVvdHJhY2tjaGFuZ2VcbiAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgKiBUcmlnZ2VyZWQgd2hlbiB0cmFja3MgYXJlIGFkZGVkIG9yIHJlbW92ZWQgb24gdGhlIFRlY2gge0BsaW5rIFRleHRUcmFja0xpc3R9XG4gICAgICAqXG4gICAgICAqIEBldmVudCBUZWNoI3RleHR0cmFja2NoYW5nZVxuICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAqL1xuICAgIE5PUk1BTC5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcHJvcHMgPSBOT1JNQUxbbmFtZV07XG5cbiAgICAgIHZhciB0cmFja0xpc3RDaGFuZ2VzID0gZnVuY3Rpb24gdHJhY2tMaXN0Q2hhbmdlcygpIHtcbiAgICAgICAgX3RoaXM0LnRyaWdnZXIobmFtZSArIFwidHJhY2tjaGFuZ2VcIik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgdHJhY2tzID0gX3RoaXM0W3Byb3BzLmdldHRlck5hbWVdKCk7XG5cbiAgICAgIHRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdyZW1vdmV0cmFjaycsIHRyYWNrTGlzdENoYW5nZXMpO1xuICAgICAgdHJhY2tzLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHRyYWNrJywgdHJhY2tMaXN0Q2hhbmdlcyk7XG5cbiAgICAgIF90aGlzNC5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlbW92ZXRyYWNrJywgdHJhY2tMaXN0Q2hhbmdlcyk7XG4gICAgICAgIHRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGR0cmFjaycsIHRyYWNrTGlzdENoYW5nZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEVtdWxhdGUgVGV4dFRyYWNrcyB1c2luZyB2dHQuanMgaWYgbmVjZXNzYXJ5XG4gICAqXG4gICAqIEBmaXJlcyBUZWNoI3Z0dGpzbG9hZGVkXG4gICAqIEBmaXJlcyBUZWNoI3Z0dGpzZXJyb3JcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkV2ViVnR0U2NyaXB0XyA9IGZ1bmN0aW9uIGFkZFdlYlZ0dFNjcmlwdF8oKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICBpZiAod2luZG93JDEuV2ViVlRUKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbml0aWFsbHksIFRlY2guZWxfIGlzIGEgY2hpbGQgb2YgYSBkdW1teS1kaXYgd2FpdCB1bnRpbCB0aGUgQ29tcG9uZW50IHN5c3RlbVxuICAgIC8vIHNpZ25hbHMgdGhhdCB0aGUgVGVjaCBpcyByZWFkeSBhdCB3aGljaCBwb2ludCBUZWNoLmVsXyBpcyBwYXJ0IG9mIHRoZSBET01cbiAgICAvLyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBXZWJWVFQgc2NyaXB0XG5cblxuICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuZWwoKSkpIHtcbiAgICAgIC8vIGxvYWQgdmlhIHJlcXVpcmUgaWYgYXZhaWxhYmxlIGFuZCB2dHQuanMgc2NyaXB0IGxvY2F0aW9uIHdhcyBub3QgcGFzc2VkIGluXG4gICAgICAvLyBhcyBhbiBvcHRpb24uIG5vdnR0IGJ1aWxkcyB3aWxsIHR1cm4gdGhlIGFib3ZlIHJlcXVpcmUgY2FsbCBpbnRvIGFuIGVtcHR5IG9iamVjdFxuICAgICAgLy8gd2hpY2ggd2lsbCBjYXVzZSB0aGlzIGlmIGNoZWNrIHRvIGFsd2F5cyBmYWlsLlxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnNfWyd2dHQuanMnXSAmJiBpc1BsYWluKHZ0dCkgJiYgT2JqZWN0LmtleXModnR0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcigndnR0anNsb2FkZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBsb2FkIHZ0dC5qcyB2aWEgdGhlIHNjcmlwdCBsb2NhdGlvbiBvcHRpb24gb3IgdGhlIGNkbiBvZiBubyBsb2NhdGlvbiB3YXNcbiAgICAgIC8vIHBhc3NlZCBpblxuXG5cbiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSB0aGlzLm9wdGlvbnNfWyd2dHQuanMnXSB8fCAnaHR0cHM6Ly92anMuemVuY2RuLm5ldC92dHRqcy8wLjE0LjEvdnR0Lm1pbi5qcyc7XG5cbiAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGVuIHZ0dC5qcyBpcyBsb2FkZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBUZWNoI3Z0dGpzbG9hZGVkXG4gICAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzNS50cmlnZ2VyKCd2dHRqc2xvYWRlZCcpO1xuICAgICAgfTtcblxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGVuIHZ0dC5qcyB3YXMgbm90IGxvYWRlZCBkdWUgdG8gYW4gZXJyb3JcbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IFRlY2gjdnR0anNsb2FkZWRcbiAgICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXM1LnRyaWdnZXIoJ3Z0dGpzZXJyb3InKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBudWxsO1xuICAgICAgICBzY3JpcHQub25lcnJvciA9IG51bGw7XG4gICAgICB9KTsgLy8gYnV0IGhhdmUgbm90IGxvYWRlZCB5ZXQgYW5kIHdlIHNldCBpdCB0byB0cnVlIGJlZm9yZSB0aGUgaW5qZWN0IHNvIHRoYXRcbiAgICAgIC8vIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgaW5qZWN0ZWQgd2luZG93LldlYlZUVCBpZiBpdCBsb2FkcyByaWdodCBhd2F5XG5cbiAgICAgIHdpbmRvdyQxLldlYlZUVCA9IHRydWU7XG4gICAgICB0aGlzLmVsKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5KHRoaXMuYWRkV2ViVnR0U2NyaXB0Xyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFbXVsYXRlIHRleHR0cmFja3NcbiAgICpcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW11bGF0ZVRleHRUcmFja3MgPSBmdW5jdGlvbiBlbXVsYXRlVGV4dFRyYWNrcygpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHZhciB0cmFja3MgPSB0aGlzLnRleHRUcmFja3MoKTtcbiAgICB2YXIgcmVtb3RlVHJhY2tzID0gdGhpcy5yZW1vdGVUZXh0VHJhY2tzKCk7XG5cbiAgICB2YXIgaGFuZGxlQWRkVHJhY2sgPSBmdW5jdGlvbiBoYW5kbGVBZGRUcmFjayhlKSB7XG4gICAgICByZXR1cm4gdHJhY2tzLmFkZFRyYWNrKGUudHJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgaGFuZGxlUmVtb3ZlVHJhY2sgPSBmdW5jdGlvbiBoYW5kbGVSZW1vdmVUcmFjayhlKSB7XG4gICAgICByZXR1cm4gdHJhY2tzLnJlbW92ZVRyYWNrKGUudHJhY2spO1xuICAgIH07XG5cbiAgICByZW1vdGVUcmFja3Mub24oJ2FkZHRyYWNrJywgaGFuZGxlQWRkVHJhY2spO1xuICAgIHJlbW90ZVRyYWNrcy5vbigncmVtb3ZldHJhY2snLCBoYW5kbGVSZW1vdmVUcmFjayk7XG4gICAgdGhpcy5hZGRXZWJWdHRTY3JpcHRfKCk7XG5cbiAgICB2YXIgdXBkYXRlRGlzcGxheSA9IGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnRyaWdnZXIoJ3RleHR0cmFja2NoYW5nZScpO1xuICAgIH07XG5cbiAgICB2YXIgdGV4dFRyYWNrc0NoYW5nZXMgPSBmdW5jdGlvbiB0ZXh0VHJhY2tzQ2hhbmdlcygpIHtcbiAgICAgIHVwZGF0ZURpc3BsYXkoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldO1xuICAgICAgICB0cmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCdjdWVjaGFuZ2UnLCB1cGRhdGVEaXNwbGF5KTtcblxuICAgICAgICBpZiAodHJhY2subW9kZSA9PT0gJ3Nob3dpbmcnKSB7XG4gICAgICAgICAgdHJhY2suYWRkRXZlbnRMaXN0ZW5lcignY3VlY2hhbmdlJywgdXBkYXRlRGlzcGxheSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGV4dFRyYWNrc0NoYW5nZXMoKTtcbiAgICB0cmFja3MuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGV4dFRyYWNrc0NoYW5nZXMpO1xuICAgIHRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdhZGR0cmFjaycsIHRleHRUcmFja3NDaGFuZ2VzKTtcbiAgICB0cmFja3MuYWRkRXZlbnRMaXN0ZW5lcigncmVtb3ZldHJhY2snLCB0ZXh0VHJhY2tzQ2hhbmdlcyk7XG4gICAgdGhpcy5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW90ZVRyYWNrcy5vZmYoJ2FkZHRyYWNrJywgaGFuZGxlQWRkVHJhY2spO1xuICAgICAgcmVtb3RlVHJhY2tzLm9mZigncmVtb3ZldHJhY2snLCBoYW5kbGVSZW1vdmVUcmFjayk7XG4gICAgICB0cmFja3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGV4dFRyYWNrc0NoYW5nZXMpO1xuICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHRyYWNrJywgdGV4dFRyYWNrc0NoYW5nZXMpO1xuICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlbW92ZXRyYWNrJywgdGV4dFRyYWNrc0NoYW5nZXMpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdHJhY2sgPSB0cmFja3NbaV07XG4gICAgICAgIHRyYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2N1ZWNoYW5nZScsIHVwZGF0ZURpc3BsYXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIHJldHVybnMgYSByZW1vdGUge0BsaW5rIFRleHRUcmFja30gb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2luZFxuICAgKiAgICAgICAgYFRleHRUcmFja2Aga2luZCAoc3VidGl0bGVzLCBjYXB0aW9ucywgZGVzY3JpcHRpb25zLCBjaGFwdGVycywgb3IgbWV0YWRhdGEpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFiZWxdXG4gICAqICAgICAgICBMYWJlbCB0byBpZGVudGlmeSB0aGUgdGV4dCB0cmFja1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhbmd1YWdlXVxuICAgKiAgICAgICAgVHdvIGxldHRlciBsYW5ndWFnZSBhYmJyZXZpYXRpb25cbiAgICpcbiAgICogQHJldHVybiB7VGV4dFRyYWNrfVxuICAgKiAgICAgICAgIFRoZSBUZXh0VHJhY2sgdGhhdCBnZXRzIGNyZWF0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFkZFRleHRUcmFjayA9IGZ1bmN0aW9uIGFkZFRleHRUcmFjayhraW5kLCBsYWJlbCwgbGFuZ3VhZ2UpIHtcbiAgICBpZiAoIWtpbmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dFRyYWNrIGtpbmQgaXMgcmVxdWlyZWQgYnV0IHdhcyBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlVHJhY2tIZWxwZXIodGhpcywga2luZCwgbGFiZWwsIGxhbmd1YWdlKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGVtdWxhdGVkIFRleHRUcmFjayBmb3IgdXNlIGJ5IGFkZFJlbW90ZVRleHRUcmFja1xuICAgKlxuICAgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbVxuICAgKiBUZWNoIGluIG9yZGVyIHRvIGNyZWF0ZSBuYXRpdmUgb3IgY3VzdG9tIFRleHRUcmFja3MuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqICAgICAgICBUaGUgb2JqZWN0IHNob3VsZCBjb250YWluIHRoZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIFRleHRUcmFjayB3aXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2luZF1cbiAgICogICAgICAgIGBUZXh0VHJhY2tgIGtpbmQgKHN1YnRpdGxlcywgY2FwdGlvbnMsIGRlc2NyaXB0aW9ucywgY2hhcHRlcnMsIG9yIG1ldGFkYXRhKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsXS5cbiAgICogICAgICAgIExhYmVsIHRvIGlkZW50aWZ5IHRoZSB0ZXh0IHRyYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sYW5ndWFnZV1cbiAgICogICAgICAgIFR3byBsZXR0ZXIgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MVHJhY2tFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSB0cmFjayBlbGVtZW50IHRoYXQgZ2V0cyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVSZW1vdGVUZXh0VHJhY2sgPSBmdW5jdGlvbiBjcmVhdGVSZW1vdGVUZXh0VHJhY2sob3B0aW9ucykge1xuICAgIHZhciB0cmFjayA9IG1lcmdlT3B0aW9ucyhvcHRpb25zLCB7XG4gICAgICB0ZWNoOiB0aGlzXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSRU1PVEUucmVtb3RlVGV4dEVsLlRyYWNrQ2xhc3ModHJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVtb3RlIHRleHQgdHJhY2sgb2JqZWN0IGFuZCByZXR1cm5zIGFuIGh0bWwgdHJhY2sgZWxlbWVudC5cbiAgICpcbiAgICogPiBOb3RlOiBUaGlzIGNhbiBiZSBhbiBlbXVsYXRlZCB7QGxpbmsgSFRNTFRyYWNrRWxlbWVudH0gb3IgYSBuYXRpdmUgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiAgICAgICAgU2VlIHtAbGluayBUZWNoI2NyZWF0ZVJlbW90ZVRleHRUcmFja30gZm9yIG1vcmUgZGV0YWlsZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbbWFudWFsQ2xlYW51cD10cnVlXVxuICAgKiAgICAgICAgLSBXaGVuIGZhbHNlOiB0aGUgVGV4dFRyYWNrIHdpbGwgYmUgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gdGhlIHZpZGVvXG4gICAqICAgICAgICAgIGVsZW1lbnQgd2hlbmV2ZXIgdGhlIHNvdXJjZSBjaGFuZ2VzXG4gICAqICAgICAgICAtIFdoZW4gVHJ1ZTogVGhlIFRleHRUcmFjayB3aWxsIGhhdmUgdG8gYmUgY2xlYW5lZCB1cCBtYW51YWxseVxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MVHJhY2tFbGVtZW50fVxuICAgKiAgICAgICAgIEFuIEh0bWwgVHJhY2sgRWxlbWVudC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGRlZmF1bHQgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGVxdWl2YWxlbnRcbiAgICogICAgICAgICAgICAgdG8gXCJtYW51YWxDbGVhbnVwPWZhbHNlXCIgaW4gdGhlIGZ1dHVyZS4gVGhlIG1hbnVhbENsZWFudXAgcGFyYW1ldGVyIHdpbGxcbiAgICogICAgICAgICAgICAgYWxzbyBiZSByZW1vdmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRSZW1vdGVUZXh0VHJhY2sgPSBmdW5jdGlvbiBhZGRSZW1vdGVUZXh0VHJhY2sob3B0aW9ucywgbWFudWFsQ2xlYW51cCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHZhciBodG1sVHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVSZW1vdGVUZXh0VHJhY2sob3B0aW9ucyk7XG5cbiAgICBpZiAobWFudWFsQ2xlYW51cCAhPT0gdHJ1ZSAmJiBtYW51YWxDbGVhbnVwICE9PSBmYWxzZSkge1xuICAgICAgLy8gZGVwcmVjYXRpb24gd2FybmluZ1xuICAgICAgbG9nLndhcm4oJ0NhbGxpbmcgYWRkUmVtb3RlVGV4dFRyYWNrIHdpdGhvdXQgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBcIm1hbnVhbENsZWFudXBcIiBwYXJhbWV0ZXIgdG8gYHRydWVgIGlzIGRlcHJlY2F0ZWQgYW5kIGRlZmF1bHQgdG8gYGZhbHNlYCBpbiBmdXR1cmUgdmVyc2lvbiBvZiB2aWRlby5qcycpO1xuICAgICAgbWFudWFsQ2xlYW51cCA9IHRydWU7XG4gICAgfSAvLyBzdG9yZSBIVE1MVHJhY2tFbGVtZW50IGFuZCBUZXh0VHJhY2sgdG8gcmVtb3RlIGxpc3RcblxuXG4gICAgdGhpcy5yZW1vdGVUZXh0VHJhY2tFbHMoKS5hZGRUcmFja0VsZW1lbnRfKGh0bWxUcmFja0VsZW1lbnQpO1xuICAgIHRoaXMucmVtb3RlVGV4dFRyYWNrcygpLmFkZFRyYWNrKGh0bWxUcmFja0VsZW1lbnQudHJhY2spO1xuXG4gICAgaWYgKG1hbnVhbENsZWFudXAgIT09IHRydWUpIHtcbiAgICAgIC8vIGNyZWF0ZSB0aGUgVGV4dFRyYWNrTGlzdCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5hdXRvUmVtb3RlVGV4dFRyYWNrc18uYWRkVHJhY2soaHRtbFRyYWNrRWxlbWVudC50cmFjayk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbFRyYWNrRWxlbWVudDtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgcmVtb3RlIHRleHQgdHJhY2sgZnJvbSB0aGUgcmVtb3RlIGBUZXh0VHJhY2tMaXN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t9IHRyYWNrXG4gICAqICAgICAgICBgVGV4dFRyYWNrYCB0byByZW1vdmUgZnJvbSB0aGUgYFRleHRUcmFja0xpc3RgXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZVJlbW90ZVRleHRUcmFjayA9IGZ1bmN0aW9uIHJlbW92ZVJlbW90ZVRleHRUcmFjayh0cmFjaykge1xuICAgIHZhciB0cmFja0VsZW1lbnQgPSB0aGlzLnJlbW90ZVRleHRUcmFja0VscygpLmdldFRyYWNrRWxlbWVudEJ5VHJhY2tfKHRyYWNrKTsgLy8gcmVtb3ZlIEhUTUxUcmFja0VsZW1lbnQgYW5kIFRleHRUcmFjayBmcm9tIHJlbW90ZSBsaXN0XG5cbiAgICB0aGlzLnJlbW90ZVRleHRUcmFja0VscygpLnJlbW92ZVRyYWNrRWxlbWVudF8odHJhY2tFbGVtZW50KTtcbiAgICB0aGlzLnJlbW90ZVRleHRUcmFja3MoKS5yZW1vdmVUcmFjayh0cmFjayk7XG4gICAgdGhpcy5hdXRvUmVtb3RlVGV4dFRyYWNrc18ucmVtb3ZlVHJhY2sodHJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGF2YWlsYWJsZSBtZWRpYSBwbGF5YmFjayBxdWFsaXR5IG1ldHJpY3MgYXMgc3BlY2lmaWVkIGJ5IHRoZSBXM0MncyBNZWRpYVxuICAgKiBQbGF5YmFjayBRdWFsaXR5IEFQSS5cbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9tZWRpYS1wbGF5YmFjay1xdWFsaXR5fVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgQW4gb2JqZWN0IHdpdGggc3VwcG9ydGVkIG1lZGlhIHBsYXliYWNrIHF1YWxpdHkgbWV0cmljc1xuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkgPSBmdW5jdGlvbiBnZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgZmxvYXRpbmcgdmlkZW8gd2luZG93IGFsd2F5cyBvbiB0b3Agb2Ygb3RoZXIgd2luZG93c1xuICAgKiBzbyB0aGF0IHVzZXJzIG1heSBjb250aW51ZSBjb25zdW1pbmcgbWVkaWEgd2hpbGUgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyXG4gICAqIGNvbnRlbnQgc2l0ZXMsIG9yIGFwcGxpY2F0aW9ucyBvbiB0aGVpciBkZXZpY2UuXG4gICAqXG4gICAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vcGljdHVyZS1pbi1waWN0dXJlfVxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfHVuZGVmaW5lZH1cbiAgICogICAgICAgICBBIHByb21pc2Ugd2l0aCBhIFBpY3R1cmUtaW4tUGljdHVyZSB3aW5kb3cgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHNcbiAgICogICAgICAgICBQcm9taXNlcyAob3Igb25lIHdhcyBwYXNzZWQgaW4gYXMgYW4gb3B0aW9uKS4gSXQgcmV0dXJucyB1bmRlZmluZWRcbiAgICogICAgICAgICBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSA9IGZ1bmN0aW9uIHJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlKCkge1xuICAgIHZhciBQcm9taXNlQ2xhc3MgPSB0aGlzLm9wdGlvbnNfLlByb21pc2UgfHwgd2luZG93JDEuUHJvbWlzZTtcblxuICAgIGlmIChQcm9taXNlQ2xhc3MpIHtcbiAgICAgIHJldHVybiBQcm9taXNlQ2xhc3MucmVqZWN0KCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0byBzZXQgYSBwb3N0ZXIgZnJvbSBhIGBUZWNoYC5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldFBvc3RlciA9IGZ1bmN0aW9uIHNldFBvc3RlcigpIHt9XG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAncGxheXNpbmxpbmUnIDx2aWRlbz4gYXR0cmlidXRlLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGxheXNpbmxpbmUgPSBmdW5jdGlvbiBwbGF5c2lubGluZSgpIHt9XG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0byBzZXQgb3IgdW5zZXQgdGhlICdwbGF5c2lubGluZScgPHZpZGVvPiBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRQbGF5c2lubGluZSA9IGZ1bmN0aW9uIHNldFBsYXlzaW5saW5lKCkge31cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gZm9yY2Ugb3ZlcnJpZGUgb2YgbmF0aXZlIGF1ZGlvIHRyYWNrcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBvdmVycmlkZSAtIElmIHNldCB0byB0cnVlIG5hdGl2ZSBhdWRpbyB3aWxsIGJlIG92ZXJyaWRkZW4sXG4gICAqIG90aGVyd2lzZSBuYXRpdmUgYXVkaW8gd2lsbCBwb3RlbnRpYWxseSBiZSB1c2VkLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8ub3ZlcnJpZGVOYXRpdmVBdWRpb1RyYWNrcyA9IGZ1bmN0aW9uIG92ZXJyaWRlTmF0aXZlQXVkaW9UcmFja3MoKSB7fVxuICAvKipcbiAgICogQXR0ZW1wdCB0byBmb3JjZSBvdmVycmlkZSBvZiBuYXRpdmUgdmlkZW8gdHJhY2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJyaWRlIC0gSWYgc2V0IHRvIHRydWUgbmF0aXZlIHZpZGVvIHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICogb3RoZXJ3aXNlIG5hdGl2ZSB2aWRlbyB3aWxsIHBvdGVudGlhbGx5IGJlIHVzZWQuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5vdmVycmlkZU5hdGl2ZVZpZGVvVHJhY2tzID0gZnVuY3Rpb24gb3ZlcnJpZGVOYXRpdmVWaWRlb1RyYWNrcygpIHt9XG4gIC8qXG4gICAqIENoZWNrIGlmIHRoZSB0ZWNoIGNhbiBzdXBwb3J0IHRoZSBnaXZlbiBtaW1lLXR5cGUuXG4gICAqXG4gICAqIFRoZSBiYXNlIHRlY2ggZG9lcyBub3Qgc3VwcG9ydCBhbnkgdHlwZSwgYnV0IHNvdXJjZSBoYW5kbGVycyBtaWdodFxuICAgKiBvdmVyd3JpdGUgdGhpcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gICAqICAgICAgICAgVGhlIG1pbWV0eXBlIHRvIGNoZWNrIGZvciBzdXBwb3J0XG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICAncHJvYmFibHknLCAnbWF5YmUnLCBvciBlbXB0eSBzdHJpbmdcbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxNZWRpYUVsZW1lbnQvY2FuUGxheVR5cGV9XG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uIGNhblBsYXlUeXBlKCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgdGVjaC5cbiAgICpcbiAgICogVGhlIGJhc2UgdGVjaCBkb2VzIG5vdCBzdXBwb3J0IGFueSB0eXBlLCBidXQgc291cmNlIGhhbmRsZXJzIG1pZ2h0XG4gICAqIG92ZXJ3cml0ZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiAgICAgICAgVGhlIG1lZGlhIHR5cGUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYXRpdmUgdmlkZW8gZWxlbWVudCdzIHJlc3BvbnNlXG4gICAqL1xuICA7XG5cbiAgVGVjaC5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uIGNhblBsYXlUeXBlKCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHRlY2ggY2FuIHN1cHBvcnQgdGhlIGdpdmVuIHNvdXJjZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjT2JqXG4gICAqICAgICAgICBUaGUgc291cmNlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiAgICAgICAgVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSB0ZWNoXG4gICAqIEByZXR1cm4ge3N0cmluZ30gJ3Byb2JhYmx5JywgJ21heWJlJywgb3IgJycgKGVtcHR5IHN0cmluZylcbiAgICovXG4gIDtcblxuICBUZWNoLmNhblBsYXlTb3VyY2UgPSBmdW5jdGlvbiBjYW5QbGF5U291cmNlKHNyY09iaiwgb3B0aW9ucykge1xuICAgIHJldHVybiBUZWNoLmNhblBsYXlUeXBlKHNyY09iai50eXBlKTtcbiAgfVxuICAvKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBUZWNoIG9yIG5vdC5cbiAgICogQ2FuIGJlIHBhc3NlZCBlaXRoZXIgYSBDbGFzcyBsaWtlIGBIdG1sNWAgb3IgYSBpbnN0YW5jZSBsaWtlIGBwbGF5ZXIudGVjaF9gXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb21wb25lbnRcbiAgICogICAgICAgIFRoZSBpdGVtIHRvIGNoZWNrXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgV2hldGhlciBpdCBpcyBhIHRlY2ggb3Igbm90XG4gICAqICAgICAgICAgLSBUcnVlIGlmIGl0IGlzIGEgdGVjaFxuICAgKiAgICAgICAgIC0gRmFsc2UgaWYgaXQgaXMgbm90XG4gICAqL1xuICA7XG5cbiAgVGVjaC5pc1RlY2ggPSBmdW5jdGlvbiBpc1RlY2goY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudC5wcm90b3R5cGUgaW5zdGFuY2VvZiBUZWNoIHx8IGNvbXBvbmVudCBpbnN0YW5jZW9mIFRlY2ggfHwgY29tcG9uZW50ID09PSBUZWNoO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBgVGVjaGAgaW50byBhIHNoYXJlZCBsaXN0IGZvciB2aWRlb2pzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgTmFtZSBvZiB0aGUgYFRlY2hgIHRvIHJlZ2lzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGVjaFxuICAgKiAgICAgICAgVGhlIGBUZWNoYCBjbGFzcyB0byByZWdpc3Rlci5cbiAgICovXG4gIDtcblxuICBUZWNoLnJlZ2lzdGVyVGVjaCA9IGZ1bmN0aW9uIHJlZ2lzdGVyVGVjaChuYW1lLCB0ZWNoKSB7XG4gICAgaWYgKCFUZWNoLnRlY2hzXykge1xuICAgICAgVGVjaC50ZWNoc18gPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIVRlY2guaXNUZWNoKHRlY2gpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUZWNoIFwiICsgbmFtZSArIFwiIG11c3QgYmUgYSBUZWNoXCIpO1xuICAgIH1cblxuICAgIGlmICghVGVjaC5jYW5QbGF5VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZWNocyBtdXN0IGhhdmUgYSBzdGF0aWMgY2FuUGxheVR5cGUgbWV0aG9kIG9uIHRoZW0nKTtcbiAgICB9XG5cbiAgICBpZiAoIVRlY2guY2FuUGxheVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZWNocyBtdXN0IGhhdmUgYSBzdGF0aWMgY2FuUGxheVNvdXJjZSBtZXRob2Qgb24gdGhlbScpO1xuICAgIH1cblxuICAgIG5hbWUgPSB0b1RpdGxlQ2FzZShuYW1lKTtcbiAgICBUZWNoLnRlY2hzX1tuYW1lXSA9IHRlY2g7XG4gICAgVGVjaC50ZWNoc19bdG9Mb3dlckNhc2UobmFtZSldID0gdGVjaDtcblxuICAgIGlmIChuYW1lICE9PSAnVGVjaCcpIHtcbiAgICAgIC8vIGNhbWVsIGNhc2UgdGhlIHRlY2hOYW1lIGZvciB1c2UgaW4gdGVjaE9yZGVyXG4gICAgICBUZWNoLmRlZmF1bHRUZWNoT3JkZXJfLnB1c2gobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlY2g7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIGBUZWNoYCBmcm9tIHRoZSBzaGFyZWQgbGlzdCBieSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgYGNhbWVsQ2FzZWAgb3IgYFRpdGxlQ2FzZWAgbmFtZSBvZiB0aGUgVGVjaCB0byBnZXRcbiAgICpcbiAgICogQHJldHVybiB7VGVjaHx1bmRlZmluZWR9XG4gICAqICAgICAgICAgVGhlIGBUZWNoYCBvciB1bmRlZmluZWQgaWYgdGhlcmUgd2FzIG5vIHRlY2ggd2l0aCB0aGUgbmFtZSByZXF1ZXN0ZWQuXG4gICAqL1xuICA7XG5cbiAgVGVjaC5nZXRUZWNoID0gZnVuY3Rpb24gZ2V0VGVjaChuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFRlY2gudGVjaHNfICYmIFRlY2gudGVjaHNfW25hbWVdKSB7XG4gICAgICByZXR1cm4gVGVjaC50ZWNoc19bbmFtZV07XG4gICAgfVxuXG4gICAgbmFtZSA9IHRvVGl0bGVDYXNlKG5hbWUpO1xuXG4gICAgaWYgKHdpbmRvdyQxICYmIHdpbmRvdyQxLnZpZGVvanMgJiYgd2luZG93JDEudmlkZW9qc1tuYW1lXSkge1xuICAgICAgbG9nLndhcm4oXCJUaGUgXCIgKyBuYW1lICsgXCIgdGVjaCB3YXMgYWRkZWQgdG8gdGhlIHZpZGVvanMgb2JqZWN0IHdoZW4gaXQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdmlkZW9qcy5yZWdpc3RlclRlY2gobmFtZSwgdGVjaClcIik7XG4gICAgICByZXR1cm4gd2luZG93JDEudmlkZW9qc1tuYW1lXTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRlY2g7XG59KENvbXBvbmVudCk7XG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFZpZGVvVHJhY2tMaXN0fVxuICpcbiAqIEByZXR1cm5zIHtWaWRlb1RyYWNrTGlzdH1cbiAqIEBtZXRob2QgVGVjaC5wcm90b3R5cGUudmlkZW9UcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEF1ZGlvVHJhY2tMaXN0fVxuICpcbiAqIEByZXR1cm5zIHtBdWRpb1RyYWNrTGlzdH1cbiAqIEBtZXRob2QgVGVjaC5wcm90b3R5cGUuYXVkaW9UcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFRleHRUcmFja0xpc3R9XG4gKlxuICogQHJldHVybnMge1RleHRUcmFja0xpc3R9XG4gKiBAbWV0aG9kIFRlY2gucHJvdG90eXBlLnRleHRUcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgcmVtb3RlIGVsZW1lbnQge0BsaW5rIFRleHRUcmFja0xpc3R9XG4gKlxuICogQHJldHVybnMge1RleHRUcmFja0xpc3R9XG4gKiBAbWV0aG9kIFRlY2gucHJvdG90eXBlLnJlbW90ZVRleHRUcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgcmVtb3RlIGVsZW1lbnQge0BsaW5rIEh0bWxUcmFja0VsZW1lbnRMaXN0fVxuICpcbiAqIEByZXR1cm5zIHtIdG1sVHJhY2tFbGVtZW50TGlzdH1cbiAqIEBtZXRob2QgVGVjaC5wcm90b3R5cGUucmVtb3RlVGV4dFRyYWNrRWxzXG4gKi9cblxuXG5BTEwubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgcHJvcHMgPSBBTExbbmFtZV07XG5cbiAgVGVjaC5wcm90b3R5cGVbcHJvcHMuZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpc1twcm9wcy5wcml2YXRlTmFtZV0gPSB0aGlzW3Byb3BzLnByaXZhdGVOYW1lXSB8fCBuZXcgcHJvcHMuTGlzdENsYXNzKCk7XG4gICAgcmV0dXJuIHRoaXNbcHJvcHMucHJpdmF0ZU5hbWVdO1xuICB9O1xufSk7XG4vKipcbiAqIExpc3Qgb2YgYXNzb2NpYXRlZCB0ZXh0IHRyYWNrc1xuICpcbiAqIEB0eXBlIHtUZXh0VHJhY2tMaXN0fVxuICogQHByaXZhdGVcbiAqIEBwcm9wZXJ0eSBUZWNoI3RleHRUcmFja3NfXG4gKi9cblxuLyoqXG4gKiBMaXN0IG9mIGFzc29jaWF0ZWQgYXVkaW8gdHJhY2tzLlxuICpcbiAqIEB0eXBlIHtBdWRpb1RyYWNrTGlzdH1cbiAqIEBwcml2YXRlXG4gKiBAcHJvcGVydHkgVGVjaCNhdWRpb1RyYWNrc19cbiAqL1xuXG4vKipcbiAqIExpc3Qgb2YgYXNzb2NpYXRlZCB2aWRlbyB0cmFja3MuXG4gKlxuICogQHR5cGUge1ZpZGVvVHJhY2tMaXN0fVxuICogQHByaXZhdGVcbiAqIEBwcm9wZXJ0eSBUZWNoI3ZpZGVvVHJhY2tzX1xuICovXG5cbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBUZWNoYCBzdXBwb3J0cyB2b2x1bWUgY29udHJvbC5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuVGVjaC5wcm90b3R5cGUuZmVhdHVyZXNWb2x1bWVDb250cm9sID0gdHJ1ZTtcbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBUZWNoYCBzdXBwb3J0cyBtdXRpbmcgdm9sdW1lLlxuICpcbiAqIEB0eXBlIHtib2xlYW59XG4gKiBAZGVmYXVsdFxuICovXG5cblRlY2gucHJvdG90eXBlLmZlYXR1cmVzTXV0ZUNvbnRyb2wgPSB0cnVlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIGZ1bGxzY3JlZW4gcmVzaXplIGNvbnRyb2wuXG4gKiBSZXNpemluZyBwbHVnaW5zIHVzaW5nIHJlcXVlc3QgZnVsbHNjcmVlbiByZWxvYWRzIHRoZSBwbHVnaW5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuVGVjaC5wcm90b3R5cGUuZmVhdHVyZXNGdWxsc2NyZWVuUmVzaXplID0gZmFsc2U7XG4vKipcbiAqIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBgVGVjaGAgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIHNwZWVkIGF0IHdoaWNoIHRoZSB2aWRlb1xuICogcGxheXMuIEV4YW1wbGVzOlxuICogICAtIFNldCBwbGF5ZXIgdG8gcGxheSAyeCAodHdpY2UpIGFzIGZhc3RcbiAqICAgLSBTZXQgcGxheWVyIHRvIHBsYXkgMC41eCAoaGFsZikgYXMgZmFzdFxuICpcbiAqIEB0eXBlIHtib29sZWFufVxuICogQGRlZmF1bHRcbiAqL1xuXG5UZWNoLnByb3RvdHlwZS5mZWF0dXJlc1BsYXliYWNrUmF0ZSA9IGZhbHNlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIHRoZSBgcHJvZ3Jlc3NgIGV2ZW50LiBUaGlzIGlzIGN1cnJlbnRseVxuICogbm90IHRyaWdnZXJlZCBieSB2aWRlby1qcy1zd2YuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBpZlxuICoge0BsaW5rIFRlY2gjbWFudWFsUHJvZ3Jlc3NPbn0gc2hvdWxkIGJlIGNhbGxlZC5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuVGVjaC5wcm90b3R5cGUuZmVhdHVyZXNQcm9ncmVzc0V2ZW50cyA9IGZhbHNlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIHRoZSBgc291cmNlc2V0YCBldmVudC5cbiAqXG4gKiBBIHRlY2ggc2hvdWxkIHNldCB0aGlzIHRvIGB0cnVlYCBhbmQgdGhlbiB1c2Uge0BsaW5rIFRlY2gjdHJpZ2dlclNvdXJjZXNldH1cbiAqIHRvIHRyaWdnZXIgYSB7QGxpbmsgVGVjaCNldmVudDpzb3VyY2VzZXR9IGF0IHRoZSBlYXJsaWVzdCB0aW1lIGFmdGVyIGdldHRpbmdcbiAqIGEgbmV3IHNvdXJjZS5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuVGVjaC5wcm90b3R5cGUuZmVhdHVyZXNTb3VyY2VzZXQgPSBmYWxzZTtcbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBUZWNoYCBzdXBwb3J0cyB0aGUgYHRpbWV1cGRhdGVgIGV2ZW50LiBUaGlzIGlzIGN1cnJlbnRseVxuICogbm90IHRyaWdnZXJlZCBieSB2aWRlby1qcy1zd2YuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBpZlxuICoge0BsaW5rIFRlY2gjbWFudWFsVGltZVVwZGF0ZXN9IHNob3VsZCBiZSBjYWxsZWQuXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdFxuICovXG5cblRlY2gucHJvdG90eXBlLmZlYXR1cmVzVGltZXVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIHRoZSBuYXRpdmUgYFRleHRUcmFja2BzLlxuICogVGhpcyB3aWxsIGhlbHAgdXMgaW50ZWdyYXRlIHdpdGggbmF0aXZlIGBUZXh0VHJhY2tgcyBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGVtLlxuICpcbiAqIEB0eXBlIHtib29sZWFufVxuICogQGRlZmF1bHRcbiAqL1xuXG5UZWNoLnByb3RvdHlwZS5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3MgPSBmYWxzZTtcbi8qKlxuICogQSBmdW5jdGlvbmFsIG1peGluIGZvciB0ZWNocyB0aGF0IHdhbnQgdG8gdXNlIHRoZSBTb3VyY2UgSGFuZGxlciBwYXR0ZXJuLlxuICogU291cmNlIGhhbmRsZXJzIGFyZSBzY3JpcHRzIGZvciBoYW5kbGluZyBzcGVjaWZpYyBmb3JtYXRzLlxuICogVGhlIHNvdXJjZSBoYW5kbGVyIHBhdHRlcm4gaXMgdXNlZCBmb3IgYWRhcHRpdmUgZm9ybWF0cyAoSExTLCBEQVNIKSB0aGF0XG4gKiBtYW51YWxseSBsb2FkIHZpZGVvIGRhdGEgYW5kIGZlZWQgaXQgaW50byBhIFNvdXJjZSBCdWZmZXIgKE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zKVxuICogRXhhbXBsZTogYFRlY2gud2l0aFNvdXJjZUhhbmRsZXJzLmNhbGwoTXlUZWNoKTtgXG4gKlxuICogQHBhcmFtIHtUZWNofSBfVGVjaFxuICogICAgICAgIFRoZSB0ZWNoIHRvIGFkZCBzb3VyY2UgaGFuZGxlciBmdW5jdGlvbnMgdG8uXG4gKlxuICogQG1peGVzIFRlY2h+U291cmNlSGFuZGxlckFkZGl0aW9uc1xuICovXG5cblRlY2gud2l0aFNvdXJjZUhhbmRsZXJzID0gZnVuY3Rpb24gKF9UZWNoKSB7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNvdXJjZSBoYW5kbGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICogICAgICAgIFRoZSBzb3VyY2UgaGFuZGxlciBjbGFzc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2luZGV4XVxuICAgKiAgICAgICAgUmVnaXN0ZXIgaXQgYXQgdGhlIGZvbGxvd2luZyBpbmRleFxuICAgKi9cbiAgX1RlY2gucmVnaXN0ZXJTb3VyY2VIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIsIGluZGV4KSB7XG4gICAgdmFyIGhhbmRsZXJzID0gX1RlY2guc291cmNlSGFuZGxlcnM7XG5cbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IF9UZWNoLnNvdXJjZUhhbmRsZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGFkZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICBpbmRleCA9IGhhbmRsZXJzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBoYW5kbGVycy5zcGxpY2UoaW5kZXgsIDAsIGhhbmRsZXIpO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHRlY2ggY2FuIHN1cHBvcnQgdGhlIGdpdmVuIHR5cGUuIEFsc28gY2hlY2tzIHRoZVxuICAgKiBUZWNocyBzb3VyY2VIYW5kbGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogICAgICAgICBUaGUgbWltZXR5cGUgdG8gY2hlY2suXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICAncHJvYmFibHknLCAnbWF5YmUnLCBvciAnJyAoZW1wdHkgc3RyaW5nKVxuICAgKi9cblxuXG4gIF9UZWNoLmNhblBsYXlUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB2YXIgaGFuZGxlcnMgPSBfVGVjaC5zb3VyY2VIYW5kbGVycyB8fCBbXTtcbiAgICB2YXIgY2FuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FuID0gaGFuZGxlcnNbaV0uY2FuUGxheVR5cGUodHlwZSk7XG5cbiAgICAgIGlmIChjYW4pIHtcbiAgICAgICAgcmV0dXJuIGNhbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzb3VyY2UgaGFuZGxlciB0aGF0IHN1cHBvcnRzIHRoZSBzb3VyY2UuXG4gICAqXG4gICAqIFRPRE86IEFuc3dlciBxdWVzdGlvbjogc2hvdWxkICdwcm9iYWJseScgYmUgcHJpb3JpdGl6ZWQgb3ZlciAnbWF5YmUnXG4gICAqXG4gICAqIEBwYXJhbSB7VGVjaH5Tb3VyY2VPYmplY3R9IHNvdXJjZVxuICAgKiAgICAgICAgVGhlIHNvdXJjZSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogICAgICAgIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgdGVjaFxuICAgKlxuICAgKiBAcmV0dXJuIHtTb3VyY2VIYW5kbGVyfG51bGx9XG4gICAqICAgICAgICAgIFRoZSBmaXJzdCBzb3VyY2UgaGFuZGxlciB0aGF0IHN1cHBvcnRzIHRoZSBzb3VyY2Ugb3IgbnVsbCBpZlxuICAgKiAgICAgICAgICBubyBTb3VyY2VIYW5kbGVyIHN1cHBvcnRzIHRoZSBzb3VyY2VcbiAgICovXG5cblxuICBfVGVjaC5zZWxlY3RTb3VyY2VIYW5kbGVyID0gZnVuY3Rpb24gKHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBoYW5kbGVycyA9IF9UZWNoLnNvdXJjZUhhbmRsZXJzIHx8IFtdO1xuICAgIHZhciBjYW47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYW4gPSBoYW5kbGVyc1tpXS5jYW5IYW5kbGVTb3VyY2Uoc291cmNlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGNhbikge1xuICAgICAgICByZXR1cm4gaGFuZGxlcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdGVjaCBjYW4gc3VwcG9ydCB0aGUgZ2l2ZW4gc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fSBzcmNPYmpcbiAgICogICAgICAgIFRoZSBzb3VyY2Ugb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHRlY2hcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgICdwcm9iYWJseScsICdtYXliZScsIG9yICcnIChlbXB0eSBzdHJpbmcpXG4gICAqL1xuXG5cbiAgX1RlY2guY2FuUGxheVNvdXJjZSA9IGZ1bmN0aW9uIChzcmNPYmosIG9wdGlvbnMpIHtcbiAgICB2YXIgc2ggPSBfVGVjaC5zZWxlY3RTb3VyY2VIYW5kbGVyKHNyY09iaiwgb3B0aW9ucyk7XG5cbiAgICBpZiAoc2gpIHtcbiAgICAgIHJldHVybiBzaC5jYW5IYW5kbGVTb3VyY2Uoc3JjT2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH07XG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIGEgc291cmNlIGhhbmRsZXIsIHByZWZlciBpdHMgaW1wbGVtZW50YXRpb24gb2ZcbiAgICogYW55IGZ1bmN0aW9uIG5vcm1hbGx5IHByb3ZpZGVkIGJ5IHRoZSB0ZWNoLlxuICAgKi9cblxuXG4gIHZhciBkZWZlcnJhYmxlID0gWydzZWVrYWJsZScsICdzZWVraW5nJywgJ2R1cmF0aW9uJ107XG4gIC8qKlxuICAgKiBBIHdyYXBwZXIgYXJvdW5kIHtAbGluayBUZWNoI3NlZWthYmxlfSB0aGF0IHdpbGwgY2FsbCBhIGBTb3VyY2VIYW5kbGVyYHMgc2Vla2FibGVcbiAgICogZnVuY3Rpb24gaWYgaXQgZXhpc3RzLCB3aXRoIGEgZmFsbGJhY2sgdG8gdGhlIFRlY2hzIHNlZWthYmxlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAbWV0aG9kIF9UZWNoLnNlZWthYmxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBIHdyYXBwZXIgYXJvdW5kIHtAbGluayBUZWNoI2R1cmF0aW9ufSB0aGF0IHdpbGwgY2FsbCBhIGBTb3VyY2VIYW5kbGVyYHMgZHVyYXRpb25cbiAgICogZnVuY3Rpb24gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgaXQgd2lsbCBmYWxsYmFjayB0byB0aGUgdGVjaHMgZHVyYXRpb24gZnVuY3Rpb24uXG4gICAqXG4gICAqIEBtZXRob2QgX1RlY2guZHVyYXRpb25cbiAgICovXG5cbiAgZGVmZXJyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChmbk5hbWUpIHtcbiAgICB2YXIgb3JpZ2luYWxGbiA9IHRoaXNbZm5OYW1lXTtcblxuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXNbZm5OYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZUhhbmRsZXJfICYmIHRoaXMuc291cmNlSGFuZGxlcl9bZm5OYW1lXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VIYW5kbGVyX1tmbk5hbWVdLmFwcGx5KHRoaXMuc291cmNlSGFuZGxlcl8sIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbEZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSwgX1RlY2gucHJvdG90eXBlKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHRoZSBzb3VyY2UgdXNpbmcgYSBzb3VyY2Ugb2JqZWN0XG4gICAqIGFuZCBzb3VyY2UgaGFuZGxlcnMuXG4gICAqIFNob3VsZCBuZXZlciBiZSBjYWxsZWQgdW5sZXNzIGEgc291cmNlIGhhbmRsZXIgd2FzIGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fSBzb3VyY2VcbiAgICogICAgICAgIEEgc291cmNlIG9iamVjdCB3aXRoIHNyYyBhbmQgdHlwZSBrZXlzXG4gICAqL1xuXG4gIF9UZWNoLnByb3RvdHlwZS5zZXRTb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgdmFyIHNoID0gX1RlY2guc2VsZWN0U291cmNlSGFuZGxlcihzb3VyY2UsIHRoaXMub3B0aW9uc18pO1xuXG4gICAgaWYgKCFzaCkge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIGEgbmF0aXZlIHNvdXJjZSBoYW5kZXIgd2hlbiB1bnN1cHBvcnRlZCBzb3VyY2VzIGFyZVxuICAgICAgLy8gZGVsaWJlcmF0ZWx5IHNldFxuICAgICAgaWYgKF9UZWNoLm5hdGl2ZVNvdXJjZUhhbmRsZXIpIHtcbiAgICAgICAgc2ggPSBfVGVjaC5uYXRpdmVTb3VyY2VIYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKCdObyBzb3VyY2UgaGFuZGxlciBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgc291cmNlLicpO1xuICAgICAgfVxuICAgIH0gLy8gRGlzcG9zZSBhbnkgZXhpc3Rpbmcgc291cmNlIGhhbmRsZXJcblxuXG4gICAgdGhpcy5kaXNwb3NlU291cmNlSGFuZGxlcigpO1xuICAgIHRoaXMub2ZmKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlU291cmNlSGFuZGxlcik7XG5cbiAgICBpZiAoc2ggIT09IF9UZWNoLm5hdGl2ZVNvdXJjZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuY3VycmVudFNvdXJjZV8gPSBzb3VyY2U7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VIYW5kbGVyXyA9IHNoLmhhbmRsZVNvdXJjZShzb3VyY2UsIHRoaXMsIHRoaXMub3B0aW9uc18pO1xuICAgIHRoaXMub25lKCdkaXNwb3NlJywgdGhpcy5kaXNwb3NlU291cmNlSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBDbGVhbiB1cCBhbnkgZXhpc3RpbmcgU291cmNlSGFuZGxlcnMgYW5kIGxpc3RlbmVycyB3aGVuIHRoZSBUZWNoIGlzIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAbGlzdGVucyBUZWNoI2Rpc3Bvc2VcbiAgICovXG5cblxuICBfVGVjaC5wcm90b3R5cGUuZGlzcG9zZVNvdXJjZUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHNvdXJjZSBhbmQgZ2V0IGFub3RoZXIgb25lXG4gICAgLy8gdGhlbiB3ZSBhcmUgbG9hZGluZyBzb21ldGhpbmcgbmV3XG4gICAgLy8gdGhhbiBjbGVhciBhbGwgb2Ygb3VyIGN1cnJlbnQgdHJhY2tzXG4gICAgaWYgKHRoaXMuY3VycmVudFNvdXJjZV8pIHtcbiAgICAgIHRoaXMuY2xlYXJUcmFja3MoWydhdWRpbycsICd2aWRlbyddKTtcbiAgICAgIHRoaXMuY3VycmVudFNvdXJjZV8gPSBudWxsO1xuICAgIH0gLy8gYWx3YXlzIGNsZWFuIHVwIGF1dG8tdGV4dCB0cmFja3NcblxuXG4gICAgdGhpcy5jbGVhbnVwQXV0b1RleHRUcmFja3MoKTtcblxuICAgIGlmICh0aGlzLnNvdXJjZUhhbmRsZXJfKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VIYW5kbGVyXy5kaXNwb3NlKSB7XG4gICAgICAgIHRoaXMuc291cmNlSGFuZGxlcl8uZGlzcG9zZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvdXJjZUhhbmRsZXJfID0gbnVsbDtcbiAgICB9XG4gIH07XG59OyAvLyBUaGUgYmFzZSBUZWNoIGNsYXNzIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgYXMgYSBDb21wb25lbnQuIEl0IGlzIHRoZSBvbmx5XG4vLyBUZWNoIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgYXMgYSBDb21wb25lbnQuXG5cblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdUZWNoJywgVGVjaCk7XG5UZWNoLnJlZ2lzdGVyVGVjaCgnVGVjaCcsIFRlY2gpO1xuLyoqXG4gKiBBIGxpc3Qgb2YgdGVjaHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGVjaE9yZGVyIG9uIFBsYXllcnNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cblRlY2guZGVmYXVsdFRlY2hPcmRlcl8gPSBbXTtcblxuLyoqXG4gKiBAZmlsZSBtaWRkbGV3YXJlLmpzXG4gKiBAbW9kdWxlIG1pZGRsZXdhcmVcbiAqL1xudmFyIG1pZGRsZXdhcmVzID0ge307XG52YXIgbWlkZGxld2FyZUluc3RhbmNlcyA9IHt9O1xudmFyIFRFUk1JTkFUT1IgPSB7fTtcbi8qKlxuICogQSBtaWRkbGV3YXJlIG9iamVjdCBpcyBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgaGFzIG1ldGhvZHMgdGhhdFxuICogbWF0Y2ggdGhlIHtAbGluayBUZWNofSBtZXRob2RzIGZvdW5kIGluIHRoZSBsaXN0cyBvZiBhbGxvd2VkXG4gKiB7QGxpbmsgbW9kdWxlOm1pZGRsZXdhcmUuYWxsb3dlZEdldHRlcnN8Z2V0dGVyc30sXG4gKiB7QGxpbmsgbW9kdWxlOm1pZGRsZXdhcmUuYWxsb3dlZFNldHRlcnN8c2V0dGVyc30sIGFuZFxuICoge0BsaW5rIG1vZHVsZTptaWRkbGV3YXJlLmFsbG93ZWRNZWRpYXRvcnN8bWVkaWF0b3JzfS5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNaWRkbGV3YXJlT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIG1pZGRsZXdhcmUgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYVxuICoge0BsaW5rIG1vZHVsZTptaWRkbGV3YXJlfk1pZGRsZXdhcmVPYmplY3R8TWlkZGxld2FyZU9iamVjdH0uXG4gKlxuICogVGhpcyBmYWN0b3J5IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHBsYXllciB3aGVuIG5lZWRlZCwgd2l0aCB0aGUgcGxheWVyXG4gKiBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQuXG4gKlxuICogQGNhbGxiYWNrIE1pZGRsZXdhcmVGYWN0b3J5XG4gKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gKiAgICAgICAgQSBWaWRlby5qcyBwbGF5ZXIuXG4gKi9cblxuLyoqXG4gKiBEZWZpbmUgYSBtaWRkbGV3YXJlIHRoYXQgdGhlIHBsYXllciBzaG91bGQgdXNlIGJ5IHdheSBvZiBhIGZhY3RvcnkgZnVuY3Rpb25cbiAqIHRoYXQgcmV0dXJucyBhIG1pZGRsZXdhcmUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZVxuICogICAgICAgICBUaGUgTUlNRSB0eXBlIHRvIG1hdGNoIG9yIGBcIipcImAgZm9yIGFsbCBNSU1FIHR5cGVzLlxuICpcbiAqIEBwYXJhbSAge01pZGRsZXdhcmVGYWN0b3J5fSBtaWRkbGV3YXJlXG4gKiAgICAgICAgIEEgbWlkZGxld2FyZSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBmb3JcbiAqICAgICAgICAgbWF0Y2hpbmcgdHlwZXMuXG4gKi9cblxuZnVuY3Rpb24gdXNlKHR5cGUsIG1pZGRsZXdhcmUpIHtcbiAgbWlkZGxld2FyZXNbdHlwZV0gPSBtaWRkbGV3YXJlc1t0eXBlXSB8fCBbXTtcbiAgbWlkZGxld2FyZXNbdHlwZV0ucHVzaChtaWRkbGV3YXJlKTtcbn1cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgc2V0cyBhIHNvdXJjZSB1c2luZyBtaWRkbGV3YXJlIGJ5IHJlY3Vyc2luZyB0aHJvdWdoIGFueVxuICogbWF0Y2hpbmcgbWlkZGxld2FyZXMgYW5kIGNhbGxpbmcgYHNldFNvdXJjZWAgb24gZWFjaCwgcGFzc2luZyBhbG9uZyB0aGVcbiAqIHByZXZpb3VzIHJldHVybmVkIHZhbHVlIGVhY2ggdGltZS5cbiAqXG4gKiBAcGFyYW0gIHtQbGF5ZXJ9IHBsYXllclxuICogICAgICAgICBBIHtAbGluayBQbGF5ZXJ9IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSAge1RlY2h+U291cmNlT2JqZWN0fSBzcmNcbiAqICAgICAgICAgQSBzb3VyY2Ugb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufVxuICogICAgICAgICBUaGUgbmV4dCBtaWRkbGV3YXJlIHRvIHJ1bi5cbiAqL1xuXG5mdW5jdGlvbiBzZXRTb3VyY2UocGxheWVyLCBzcmMsIG5leHQpIHtcbiAgcGxheWVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRTb3VyY2VIZWxwZXIoc3JjLCBtaWRkbGV3YXJlc1tzcmMudHlwZV0sIG5leHQsIHBsYXllcik7XG4gIH0sIDEpO1xufVxuLyoqXG4gKiBXaGVuIHRoZSB0ZWNoIGlzIHNldCwgcGFzc2VzIHRoZSB0ZWNoIHRvIGVhY2ggbWlkZGxld2FyZSdzIGBzZXRUZWNoYCBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtPYmplY3RbXX0gbWlkZGxld2FyZVxuICogICAgICAgIEFuIGFycmF5IG9mIG1pZGRsZXdhcmUgaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSB7VGVjaH0gdGVjaFxuICogICAgICAgIEEgVmlkZW8uanMgdGVjaC5cbiAqL1xuXG5mdW5jdGlvbiBzZXRUZWNoKG1pZGRsZXdhcmUsIHRlY2gpIHtcbiAgbWlkZGxld2FyZS5mb3JFYWNoKGZ1bmN0aW9uIChtdykge1xuICAgIHJldHVybiBtdy5zZXRUZWNoICYmIG13LnNldFRlY2godGVjaCk7XG4gIH0pO1xufVxuLyoqXG4gKiBDYWxscyBhIGdldHRlciBvbiB0aGUgdGVjaCBmaXJzdCwgdGhyb3VnaCBlYWNoIG1pZGRsZXdhcmVcbiAqIGZyb20gcmlnaHQgdG8gbGVmdCB0byB0aGUgcGxheWVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdFtdfSBtaWRkbGV3YXJlXG4gKiAgICAgICAgIEFuIGFycmF5IG9mIG1pZGRsZXdhcmUgaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSAge1RlY2h9IHRlY2hcbiAqICAgICAgICAgVGhlIGN1cnJlbnQgdGVjaC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1ldGhvZFxuICogICAgICAgICBBIG1ldGhvZCBuYW1lLlxuICpcbiAqIEByZXR1cm4ge01peGVkfVxuICogICAgICAgICBUaGUgZmluYWwgdmFsdWUgZnJvbSB0aGUgdGVjaCBhZnRlciBtaWRkbGV3YXJlIGhhcyBpbnRlcmNlcHRlZCBpdC5cbiAqL1xuXG5mdW5jdGlvbiBnZXQobWlkZGxld2FyZSwgdGVjaCwgbWV0aG9kKSB7XG4gIHJldHVybiBtaWRkbGV3YXJlLnJlZHVjZVJpZ2h0KG1pZGRsZXdhcmVJdGVyYXRvcihtZXRob2QpLCB0ZWNoW21ldGhvZF0oKSk7XG59XG4vKipcbiAqIFRha2VzIHRoZSBhcmd1bWVudCBnaXZlbiB0byB0aGUgcGxheWVyIGFuZCBjYWxscyB0aGUgc2V0dGVyIG1ldGhvZCBvbiBlYWNoXG4gKiBtaWRkbGV3YXJlIGZyb20gbGVmdCB0byByaWdodCB0byB0aGUgdGVjaC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3RbXX0gbWlkZGxld2FyZVxuICogICAgICAgICBBbiBhcnJheSBvZiBtaWRkbGV3YXJlIGluc3RhbmNlcy5cbiAqXG4gKiBAcGFyYW0gIHtUZWNofSB0ZWNoXG4gKiAgICAgICAgIFRoZSBjdXJyZW50IHRlY2guXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBtZXRob2RcbiAqICAgICAgICAgQSBtZXRob2QgbmFtZS5cbiAqXG4gKiBAcGFyYW0gIHtNaXhlZH0gYXJnXG4gKiAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIHRlY2guXG4gKlxuICogQHJldHVybiB7TWl4ZWR9XG4gKiAgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGBtZXRob2RgIG9mIHRoZSBgdGVjaGAuXG4gKi9cblxuZnVuY3Rpb24gc2V0KG1pZGRsZXdhcmUsIHRlY2gsIG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiB0ZWNoW21ldGhvZF0obWlkZGxld2FyZS5yZWR1Y2UobWlkZGxld2FyZUl0ZXJhdG9yKG1ldGhvZCksIGFyZykpO1xufVxuLyoqXG4gKiBUYWtlcyB0aGUgYXJndW1lbnQgZ2l2ZW4gdG8gdGhlIHBsYXllciBhbmQgY2FsbHMgdGhlIGBjYWxsYCB2ZXJzaW9uIG9mIHRoZVxuICogbWV0aG9kIG9uIGVhY2ggbWlkZGxld2FyZSBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKlxuICogVGhlbiwgY2FsbCB0aGUgcGFzc2VkIGluIG1ldGhvZCBvbiB0aGUgdGVjaCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgdW5jaGFuZ2VkXG4gKiBiYWNrIHRvIHRoZSBwbGF5ZXIsIHRocm91Z2ggbWlkZGxld2FyZSwgdGhpcyB0aW1lIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3RbXX0gbWlkZGxld2FyZVxuICogICAgICAgICBBbiBhcnJheSBvZiBtaWRkbGV3YXJlIGluc3RhbmNlcy5cbiAqXG4gKiBAcGFyYW0gIHtUZWNofSB0ZWNoXG4gKiAgICAgICAgIFRoZSBjdXJyZW50IHRlY2guXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBtZXRob2RcbiAqICAgICAgICAgQSBtZXRob2QgbmFtZS5cbiAqXG4gKiBAcGFyYW0gIHtNaXhlZH0gYXJnXG4gKiAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIHRlY2guXG4gKlxuICogQHJldHVybiB7TWl4ZWR9XG4gKiAgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGBtZXRob2RgIG9mIHRoZSBgdGVjaGAsIHJlZ2FyZGxlc3Mgb2YgdGhlXG4gKiAgICAgICAgIHJldHVybiB2YWx1ZXMgb2YgbWlkZGxld2FyZXMuXG4gKi9cblxuZnVuY3Rpb24gbWVkaWF0ZShtaWRkbGV3YXJlLCB0ZWNoLCBtZXRob2QsIGFyZykge1xuICBpZiAoYXJnID09PSB2b2lkIDApIHtcbiAgICBhcmcgPSBudWxsO1xuICB9XG5cbiAgdmFyIGNhbGxNZXRob2QgPSAnY2FsbCcgKyB0b1RpdGxlQ2FzZShtZXRob2QpO1xuICB2YXIgbWlkZGxld2FyZVZhbHVlID0gbWlkZGxld2FyZS5yZWR1Y2UobWlkZGxld2FyZUl0ZXJhdG9yKGNhbGxNZXRob2QpLCBhcmcpO1xuICB2YXIgdGVybWluYXRlZCA9IG1pZGRsZXdhcmVWYWx1ZSA9PT0gVEVSTUlOQVRPUjsgLy8gZGVwcmVjYXRlZC4gVGhlIGBudWxsYCByZXR1cm4gdmFsdWUgc2hvdWxkIGluc3RlYWQgcmV0dXJuIFRFUk1JTkFUT1IgdG9cbiAgLy8gcHJldmVudCBjb25mdXNpb24gaWYgYSB0ZWNocyBtZXRob2QgYWN0dWFsbHkgcmV0dXJucyBudWxsLlxuXG4gIHZhciByZXR1cm5WYWx1ZSA9IHRlcm1pbmF0ZWQgPyBudWxsIDogdGVjaFttZXRob2RdKG1pZGRsZXdhcmVWYWx1ZSk7XG4gIGV4ZWN1dGVSaWdodChtaWRkbGV3YXJlLCBtZXRob2QsIHJldHVyblZhbHVlLCB0ZXJtaW5hdGVkKTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBhbGxvd2VkIGdldHRlcnMgd2hlcmUgdGhlIGtleXMgYXJlIG1ldGhvZCBuYW1lcy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBhbGxvd2VkR2V0dGVycyA9IHtcbiAgYnVmZmVyZWQ6IDEsXG4gIGN1cnJlbnRUaW1lOiAxLFxuICBkdXJhdGlvbjogMSxcbiAgc2Vla2FibGU6IDEsXG4gIHBsYXllZDogMSxcbiAgcGF1c2VkOiAxLFxuICB2b2x1bWU6IDFcbn07XG4vKipcbiAqIEVudW1lcmF0aW9uIG9mIGFsbG93ZWQgc2V0dGVycyB3aGVyZSB0aGUga2V5cyBhcmUgbWV0aG9kIG5hbWVzLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIGFsbG93ZWRTZXR0ZXJzID0ge1xuICBzZXRDdXJyZW50VGltZTogMSxcbiAgc2V0Vm9sdW1lOiAxXG59O1xuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBhbGxvd2VkIG1lZGlhdG9ycyB3aGVyZSB0aGUga2V5cyBhcmUgbWV0aG9kIG5hbWVzLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIGFsbG93ZWRNZWRpYXRvcnMgPSB7XG4gIHBsYXk6IDEsXG4gIHBhdXNlOiAxXG59O1xuXG5mdW5jdGlvbiBtaWRkbGV3YXJlSXRlcmF0b3IobWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIG13KSB7XG4gICAgLy8gaWYgdGhlIHByZXZpb3VzIG1pZGRsZXdhcmUgdGVybWluYXRlZCwgcGFzcyBhbG9uZyB0aGUgdGVybWluYXRpb25cbiAgICBpZiAodmFsdWUgPT09IFRFUk1JTkFUT1IpIHtcbiAgICAgIHJldHVybiBURVJNSU5BVE9SO1xuICAgIH1cblxuICAgIGlmIChtd1ttZXRob2RdKSB7XG4gICAgICByZXR1cm4gbXdbbWV0aG9kXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleGVjdXRlUmlnaHQobXdzLCBtZXRob2QsIHZhbHVlLCB0ZXJtaW5hdGVkKSB7XG4gIGZvciAodmFyIGkgPSBtd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbXcgPSBtd3NbaV07XG5cbiAgICBpZiAobXdbbWV0aG9kXSkge1xuICAgICAgbXdbbWV0aG9kXSh0ZXJtaW5hdGVkLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIENsZWFyIHRoZSBtaWRkbGV3YXJlIGNhY2hlIGZvciBhIHBsYXllci5cbiAqXG4gKiBAcGFyYW0gIHtQbGF5ZXJ9IHBsYXllclxuICogICAgICAgICBBIHtAbGluayBQbGF5ZXJ9IGluc3RhbmNlLlxuICovXG5cblxuZnVuY3Rpb24gY2xlYXJDYWNoZUZvclBsYXllcihwbGF5ZXIpIHtcbiAgbWlkZGxld2FyZUluc3RhbmNlc1twbGF5ZXIuaWQoKV0gPSBudWxsO1xufVxuLyoqXG4gKiB7XG4gKiAgW3BsYXllcklkXTogW1ttd0ZhY3RvcnksIG13SW5zdGFuY2VdLCAuLi5dXG4gKiB9XG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRPckNyZWF0ZUZhY3RvcnkocGxheWVyLCBtd0ZhY3RvcnkpIHtcbiAgdmFyIG13cyA9IG1pZGRsZXdhcmVJbnN0YW5jZXNbcGxheWVyLmlkKCldO1xuICB2YXIgbXcgPSBudWxsO1xuXG4gIGlmIChtd3MgPT09IHVuZGVmaW5lZCB8fCBtd3MgPT09IG51bGwpIHtcbiAgICBtdyA9IG13RmFjdG9yeShwbGF5ZXIpO1xuICAgIG1pZGRsZXdhcmVJbnN0YW5jZXNbcGxheWVyLmlkKCldID0gW1ttd0ZhY3RvcnksIG13XV07XG4gICAgcmV0dXJuIG13O1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtd3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX213cyRpID0gbXdzW2ldLFxuICAgICAgICBtd2YgPSBfbXdzJGlbMF0sXG4gICAgICAgIG13aSA9IF9td3MkaVsxXTtcblxuICAgIGlmIChtd2YgIT09IG13RmFjdG9yeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbXcgPSBtd2k7XG4gIH1cblxuICBpZiAobXcgPT09IG51bGwpIHtcbiAgICBtdyA9IG13RmFjdG9yeShwbGF5ZXIpO1xuICAgIG13cy5wdXNoKFttd0ZhY3RvcnksIG13XSk7XG4gIH1cblxuICByZXR1cm4gbXc7XG59XG5cbmZ1bmN0aW9uIHNldFNvdXJjZUhlbHBlcihzcmMsIG1pZGRsZXdhcmUsIG5leHQsIHBsYXllciwgYWNjLCBsYXN0UnVuKSB7XG4gIGlmIChzcmMgPT09IHZvaWQgMCkge1xuICAgIHNyYyA9IHt9O1xuICB9XG5cbiAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkge1xuICAgIG1pZGRsZXdhcmUgPSBbXTtcbiAgfVxuXG4gIGlmIChhY2MgPT09IHZvaWQgMCkge1xuICAgIGFjYyA9IFtdO1xuICB9XG5cbiAgaWYgKGxhc3RSdW4gPT09IHZvaWQgMCkge1xuICAgIGxhc3RSdW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBfbWlkZGxld2FyZSA9IG1pZGRsZXdhcmUsXG4gICAgICBtd0ZhY3RvcnkgPSBfbWlkZGxld2FyZVswXSxcbiAgICAgIG13cmVzdCA9IF9taWRkbGV3YXJlLnNsaWNlKDEpOyAvLyBpZiBtd0ZhY3RvcnkgaXMgYSBzdHJpbmcsIHRoZW4gd2UncmUgYXQgYSBmb3JrIGluIHRoZSByb2FkXG5cblxuICBpZiAodHlwZW9mIG13RmFjdG9yeSA9PT0gJ3N0cmluZycpIHtcbiAgICBzZXRTb3VyY2VIZWxwZXIoc3JjLCBtaWRkbGV3YXJlc1ttd0ZhY3RvcnldLCBuZXh0LCBwbGF5ZXIsIGFjYywgbGFzdFJ1bik7IC8vIGlmIHdlIGhhdmUgYW4gbXdGYWN0b3J5LCBjYWxsIGl0IHdpdGggdGhlIHBsYXllciB0byBnZXQgdGhlIG13LFxuICAgIC8vIHRoZW4gY2FsbCB0aGUgbXcncyBzZXRTb3VyY2UgbWV0aG9kXG4gIH0gZWxzZSBpZiAobXdGYWN0b3J5KSB7XG4gICAgdmFyIG13ID0gZ2V0T3JDcmVhdGVGYWN0b3J5KHBsYXllciwgbXdGYWN0b3J5KTsgLy8gaWYgc2V0U291cmNlIGlzbid0IHByZXNlbnQsIGltcGxpY2l0bHkgc2VsZWN0IHRoaXMgbWlkZGxld2FyZVxuXG4gICAgaWYgKCFtdy5zZXRTb3VyY2UpIHtcbiAgICAgIGFjYy5wdXNoKG13KTtcbiAgICAgIHJldHVybiBzZXRTb3VyY2VIZWxwZXIoc3JjLCBtd3Jlc3QsIG5leHQsIHBsYXllciwgYWNjLCBsYXN0UnVuKTtcbiAgICB9XG5cbiAgICBtdy5zZXRTb3VyY2UoYXNzaWduKHt9LCBzcmMpLCBmdW5jdGlvbiAoZXJyLCBfc3JjKSB7XG4gICAgICAvLyBzb21ldGhpbmcgaGFwcGVuZWQsIHRyeSB0aGUgbmV4dCBtaWRkbGV3YXJlIG9uIHRoZSBjdXJyZW50IGxldmVsXG4gICAgICAvLyBtYWtlIHN1cmUgdG8gdXNlIHRoZSBvbGQgc3JjXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBzZXRTb3VyY2VIZWxwZXIoc3JjLCBtd3Jlc3QsIG5leHQsIHBsYXllciwgYWNjLCBsYXN0UnVuKTtcbiAgICAgIH0gLy8gd2UndmUgc3VjY2VlZGVkLCBub3cgd2UgbmVlZCB0byBnbyBkZWVwZXJcblxuXG4gICAgICBhY2MucHVzaChtdyk7IC8vIGlmIGl0J3MgdGhlIHNhbWUgdHlwZSwgY29udGludWUgZG93biB0aGUgY3VycmVudCBjaGFpblxuICAgICAgLy8gb3RoZXJ3aXNlLCB3ZSB3YW50IHRvIGdvIGRvd24gdGhlIG5ldyBjaGFpblxuXG4gICAgICBzZXRTb3VyY2VIZWxwZXIoX3NyYywgc3JjLnR5cGUgPT09IF9zcmMudHlwZSA/IG13cmVzdCA6IG1pZGRsZXdhcmVzW19zcmMudHlwZV0sIG5leHQsIHBsYXllciwgYWNjLCBsYXN0UnVuKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChtd3Jlc3QubGVuZ3RoKSB7XG4gICAgc2V0U291cmNlSGVscGVyKHNyYywgbXdyZXN0LCBuZXh0LCBwbGF5ZXIsIGFjYywgbGFzdFJ1bik7XG4gIH0gZWxzZSBpZiAobGFzdFJ1bikge1xuICAgIG5leHQoc3JjLCBhY2MpO1xuICB9IGVsc2Uge1xuICAgIHNldFNvdXJjZUhlbHBlcihzcmMsIG1pZGRsZXdhcmVzWycqJ10sIG5leHQsIHBsYXllciwgYWNjLCB0cnVlKTtcbiAgfVxufVxuXG4vKipcbiAqIE1pbWV0eXBlc1xuICpcbiAqIEBzZWUgaHR0cDovL2h1bC5oYXJ2YXJkLmVkdS9vaXMvLy8vL3N5c3RlbXMvd2F4L3dheC1wdWJsaWMtaGVscC9taW1ldHlwZXMuaHRtXG4gKiBAdHlwZWRlZiBNaW1ldHlwZXN+S2luZFxuICogQGVudW1cbiAqL1xuXG52YXIgTWltZXR5cGVzS2luZCA9IHtcbiAgb3B1czogJ3ZpZGVvL29nZycsXG4gIG9ndjogJ3ZpZGVvL29nZycsXG4gIG1wNDogJ3ZpZGVvL21wNCcsXG4gIG1vdjogJ3ZpZGVvL21wNCcsXG4gIG00djogJ3ZpZGVvL21wNCcsXG4gIG1rdjogJ3ZpZGVvL3gtbWF0cm9za2EnLFxuICBtNGE6ICdhdWRpby9tcDQnLFxuICBtcDM6ICdhdWRpby9tcGVnJyxcbiAgYWFjOiAnYXVkaW8vYWFjJyxcbiAgb2dhOiAnYXVkaW8vb2dnJyxcbiAgbTN1ODogJ2FwcGxpY2F0aW9uL3gtbXBlZ1VSTCcsXG4gIGpwZzogJ2ltYWdlL2pwZWcnLFxuICBqcGVnOiAnaW1hZ2UvanBlZycsXG4gIGdpZjogJ2ltYWdlL2dpZicsXG4gIHBuZzogJ2ltYWdlL3BuZycsXG4gIHN2ZzogJ2ltYWdlL3N2Zyt4bWwnLFxuICB3ZWJwOiAnaW1hZ2Uvd2VicCdcbn07XG4vKipcbiAqIEdldCB0aGUgbWltZXR5cGUgb2YgYSBnaXZlbiBzcmMgdXJsIGlmIHBvc3NpYmxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1xuICogICAgICAgIFRoZSB1cmwgdG8gdGhlIHNyY1xuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqICAgICAgICAgcmV0dXJuIHRoZSBtaW1ldHlwZSBpZiBpdCB3YXMga25vd24gb3IgZW1wdHkgc3RyaW5nIG90aGVyd2lzZVxuICovXG5cbnZhciBnZXRNaW1ldHlwZSA9IGZ1bmN0aW9uIGdldE1pbWV0eXBlKHNyYykge1xuICBpZiAoc3JjID09PSB2b2lkIDApIHtcbiAgICBzcmMgPSAnJztcbiAgfVxuXG4gIHZhciBleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKHNyYyk7XG4gIHZhciBtaW1ldHlwZSA9IE1pbWV0eXBlc0tpbmRbZXh0LnRvTG93ZXJDYXNlKCldO1xuICByZXR1cm4gbWltZXR5cGUgfHwgJyc7XG59O1xuLyoqXG4gKiBGaW5kIHRoZSBtaW1lIHR5cGUgb2YgYSBnaXZlbiBzb3VyY2Ugc3RyaW5nIGlmIHBvc3NpYmxlLiBVc2VzIHRoZSBwbGF5ZXJcbiAqIHNvdXJjZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gKiAgICAgICAgVGhlIHBsYXllciBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjXG4gKiAgICAgICAgVGhlIHNvdXJjZSBzdHJpbmdcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFRoZSB0eXBlIHRoYXQgd2FzIGZvdW5kXG4gKi9cblxudmFyIGZpbmRNaW1ldHlwZSA9IGZ1bmN0aW9uIGZpbmRNaW1ldHlwZShwbGF5ZXIsIHNyYykge1xuICBpZiAoIXNyYykge1xuICAgIHJldHVybiAnJztcbiAgfSAvLyAxLiBjaGVjayBmb3IgdGhlIHR5cGUgaW4gdGhlIGBzb3VyY2VgIGNhY2hlXG5cblxuICBpZiAocGxheWVyLmNhY2hlXy5zb3VyY2Uuc3JjID09PSBzcmMgJiYgcGxheWVyLmNhY2hlXy5zb3VyY2UudHlwZSkge1xuICAgIHJldHVybiBwbGF5ZXIuY2FjaGVfLnNvdXJjZS50eXBlO1xuICB9IC8vIDIuIHNlZSBpZiB3ZSBoYXZlIHRoaXMgc291cmNlIGluIG91ciBgY3VycmVudFNvdXJjZXNgIGNhY2hlXG5cblxuICB2YXIgbWF0Y2hpbmdTb3VyY2VzID0gcGxheWVyLmNhY2hlXy5zb3VyY2VzLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnNyYyA9PT0gc3JjO1xuICB9KTtcblxuICBpZiAobWF0Y2hpbmdTb3VyY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiBtYXRjaGluZ1NvdXJjZXNbMF0udHlwZTtcbiAgfSAvLyAzLiBsb29rIGZvciB0aGUgc3JjIHVybCBpbiBzb3VyY2UgZWxlbWVudHMgYW5kIHVzZSB0aGUgdHlwZSB0aGVyZVxuXG5cbiAgdmFyIHNvdXJjZXMgPSBwbGF5ZXIuJCQoJ3NvdXJjZScpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzID0gc291cmNlc1tpXTtcblxuICAgIGlmIChzLnR5cGUgJiYgcy5zcmMgJiYgcy5zcmMgPT09IHNyYykge1xuICAgICAgcmV0dXJuIHMudHlwZTtcbiAgICB9XG4gIH0gLy8gNC4gZmluYWxseSBmYWxsYmFjayB0byBvdXIgbGlzdCBvZiBtaW1lIHR5cGVzIGJhc2VkIG9uIHNyYyB1cmwgZXh0ZW5zaW9uXG5cblxuICByZXR1cm4gZ2V0TWltZXR5cGUoc3JjKTtcbn07XG5cbi8qKlxuICogQG1vZHVsZSBmaWx0ZXItc291cmNlXG4gKi9cbi8qKlxuICogRmlsdGVyIG91dCBzaW5nbGUgYmFkIHNvdXJjZSBvYmplY3RzIG9yIG11bHRpcGxlIHNvdXJjZSBvYmplY3RzIGluIGFuXG4gKiBhcnJheS4gQWxzbyBmbGF0dGVucyBuZXN0ZWQgc291cmNlIG9iamVjdCBhcnJheXMgaW50byBhIDEgZGltZW5zaW9uYWxcbiAqIGFycmF5IG9mIHNvdXJjZSBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7VGVjaH5Tb3VyY2VPYmplY3R8VGVjaH5Tb3VyY2VPYmplY3RbXX0gc3JjXG4gKiAgICAgICAgVGhlIHNyYyBvYmplY3QgdG8gZmlsdGVyXG4gKlxuICogQHJldHVybiB7VGVjaH5Tb3VyY2VPYmplY3RbXX1cbiAqICAgICAgICAgQW4gYXJyYXkgb2Ygc291cmNlb2JqZWN0cyBjb250YWluaW5nIG9ubHkgdmFsaWQgc291cmNlc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGZpbHRlclNvdXJjZSA9IGZ1bmN0aW9uIGZpbHRlclNvdXJjZShzcmMpIHtcbiAgLy8gdHJhdmVyc2UgYXJyYXlcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIHZhciBuZXdzcmMgPSBbXTtcbiAgICBzcmMuZm9yRWFjaChmdW5jdGlvbiAoc3Jjb2JqKSB7XG4gICAgICBzcmNvYmogPSBmaWx0ZXJTb3VyY2Uoc3Jjb2JqKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3Jjb2JqKSkge1xuICAgICAgICBuZXdzcmMgPSBuZXdzcmMuY29uY2F0KHNyY29iaik7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNyY29iaikpIHtcbiAgICAgICAgbmV3c3JjLnB1c2goc3Jjb2JqKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzcmMgPSBuZXdzcmM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgJiYgc3JjLnRyaW0oKSkge1xuICAgIC8vIGNvbnZlcnQgc3RyaW5nIGludG8gb2JqZWN0XG4gICAgc3JjID0gW2ZpeFNvdXJjZSh7XG4gICAgICBzcmM6IHNyY1xuICAgIH0pXTtcbiAgfSBlbHNlIGlmIChpc09iamVjdChzcmMpICYmIHR5cGVvZiBzcmMuc3JjID09PSAnc3RyaW5nJyAmJiBzcmMuc3JjICYmIHNyYy5zcmMudHJpbSgpKSB7XG4gICAgLy8gc3JjIGlzIGFscmVhZHkgdmFsaWRcbiAgICBzcmMgPSBbZml4U291cmNlKHNyYyldO1xuICB9IGVsc2Uge1xuICAgIC8vIGludmFsaWQgc291cmNlLCB0dXJuIGl0IGludG8gYW4gZW1wdHkgYXJyYXlcbiAgICBzcmMgPSBbXTtcbiAgfVxuXG4gIHJldHVybiBzcmM7XG59O1xuLyoqXG4gKiBDaGVja3Mgc3JjIG1pbWV0eXBlLCBhZGRpbmcgaXQgd2hlbiBwb3NzaWJsZVxuICpcbiAqIEBwYXJhbSB7VGVjaH5Tb3VyY2VPYmplY3R9IHNyY1xuICogICAgICAgIFRoZSBzcmMgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtUZWNoflNvdXJjZU9iamVjdH1cbiAqICAgICAgICBzcmMgT2JqZWN0IHdpdGgga25vd24gdHlwZVxuICovXG5cblxuZnVuY3Rpb24gZml4U291cmNlKHNyYykge1xuICBpZiAoIXNyYy50eXBlKSB7XG4gICAgdmFyIG1pbWV0eXBlID0gZ2V0TWltZXR5cGUoc3JjLnNyYyk7XG5cbiAgICBpZiAobWltZXR5cGUpIHtcbiAgICAgIHNyYy50eXBlID0gbWltZXR5cGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNyYztcbn1cblxuLyoqXG4gKiBUaGUgYE1lZGlhTG9hZGVyYCBpcyB0aGUgYENvbXBvbmVudGAgdGhhdCBkZWNpZGVzIHdoaWNoIHBsYXliYWNrIHRlY2hub2xvZ3kgdG8gbG9hZFxuICogd2hlbiBhIHBsYXllciBpcyBpbml0aWFsaXplZC5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgTWVkaWFMb2FkZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTWVkaWFMb2FkZXIsIF9Db21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYXR0YWNoIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH5SZWFkeUNhbGxiYWNrfSBbcmVhZHldXG4gICAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBydW4gd2hlbiB0aGlzIGNvbXBvbmVudCBpcyByZWFkeS5cbiAgICovXG4gIGZ1bmN0aW9uIE1lZGlhTG9hZGVyKHBsYXllciwgb3B0aW9ucywgcmVhZHkpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICAvLyBNZWRpYUxvYWRlciBoYXMgbm8gZWxlbWVudFxuICAgIHZhciBvcHRpb25zXyA9IG1lcmdlT3B0aW9ucyh7XG4gICAgICBjcmVhdGVFbDogZmFsc2VcbiAgICB9LCBvcHRpb25zKTtcbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnNfLCByZWFkeSkgfHwgdGhpczsgLy8gSWYgdGhlcmUgYXJlIG5vIHNvdXJjZXMgd2hlbiB0aGUgcGxheWVyIGlzIGluaXRpYWxpemVkLFxuICAgIC8vIGxvYWQgdGhlIGZpcnN0IHN1cHBvcnRlZCBwbGF5YmFjayB0ZWNobm9sb2d5LlxuXG4gICAgaWYgKCFvcHRpb25zLnBsYXllck9wdGlvbnMuc291cmNlcyB8fCBvcHRpb25zLnBsYXllck9wdGlvbnMuc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gb3B0aW9ucy5wbGF5ZXJPcHRpb25zLnRlY2hPcmRlcjsgaSA8IGoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRlY2hOYW1lID0gdG9UaXRsZUNhc2UoaltpXSk7XG4gICAgICAgIHZhciB0ZWNoID0gVGVjaC5nZXRUZWNoKHRlY2hOYW1lKTsgLy8gU3VwcG9ydCBvbGQgYmVoYXZpb3Igb2YgdGVjaHMgYmVpbmcgcmVnaXN0ZXJlZCBhcyBjb21wb25lbnRzLlxuICAgICAgICAvLyBSZW1vdmUgb25jZSB0aGF0IGRlcHJlY2F0ZWQgYmVoYXZpb3IgaXMgcmVtb3ZlZC5cblxuICAgICAgICBpZiAoIXRlY2hOYW1lKSB7XG4gICAgICAgICAgdGVjaCA9IENvbXBvbmVudC5nZXRDb21wb25lbnQodGVjaE5hbWUpO1xuICAgICAgICB9IC8vIENoZWNrIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoaXMgdGVjaG5vbG9neVxuXG5cbiAgICAgICAgaWYgKHRlY2ggJiYgdGVjaC5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgcGxheWVyLmxvYWRUZWNoXyh0ZWNoTmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTG9vcCB0aHJvdWdoIHBsYXliYWNrIHRlY2hub2xvZ2llcyAoSFRNTDUsIEZsYXNoKSBhbmQgY2hlY2sgZm9yIHN1cHBvcnQuXG4gICAgICAvLyBUaGVuIGxvYWQgdGhlIGJlc3Qgc291cmNlLlxuICAgICAgLy8gQSBmZXcgYXNzdW1wdGlvbnMgaGVyZTpcbiAgICAgIC8vICAgQWxsIHBsYXliYWNrIHRlY2hub2xvZ2llcyByZXNwZWN0IHByZWxvYWQgZmFsc2UuXG4gICAgICBwbGF5ZXIuc3JjKG9wdGlvbnMucGxheWVyT3B0aW9ucy5zb3VyY2VzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gTWVkaWFMb2FkZXI7XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnTWVkaWFMb2FkZXInLCBNZWRpYUxvYWRlcik7XG5cbi8qKlxuICogQ29tcG9uZW50IHdoaWNoIGlzIGNsaWNrYWJsZSBvciBrZXlib2FyZCBhY3Rpb25hYmxlLCBidXQgaXMgbm90IGFcbiAqIG5hdGl2ZSBIVE1MIGJ1dHRvbi5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgQ2xpY2thYmxlQ29tcG9uZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENsaWNrYWJsZUNvbXBvbmVudCwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtICB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gQ2xpY2thYmxlQ29tcG9uZW50KHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLmVtaXRUYXBFdmVudHMoKTtcblxuICAgIF90aGlzLmVuYWJsZSgpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDbGlja2FibGVDb21wb25lbnRgcyBET00gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWc9ZGl2XVxuICAgKiAgICAgICAgVGhlIGVsZW1lbnQncyBub2RlIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHM9e31dXG4gICAqICAgICAgICBBbiBvYmplY3Qgb2YgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSBzZXQgb24gdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cmlidXRlcz17fV1cbiAgICogICAgICAgIEFuIG9iamVjdCBvZiBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHNldCBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQ2xpY2thYmxlQ29tcG9uZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCh0YWcsIHByb3BzLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRhZyA9PT0gdm9pZCAwKSB7XG4gICAgICB0YWcgPSAnZGl2JztcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgICAgcHJvcHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlcyA9PT0gdm9pZCAwKSB7XG4gICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgfVxuXG4gICAgcHJvcHMgPSBhc3NpZ24oe1xuICAgICAgaW5uZXJIVE1MOiAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJ2anMtaWNvbi1wbGFjZWhvbGRlclwiPjwvc3Bhbj4nLFxuICAgICAgY2xhc3NOYW1lOiB0aGlzLmJ1aWxkQ1NTQ2xhc3MoKSxcbiAgICAgIHRhYkluZGV4OiAwXG4gICAgfSwgcHJvcHMpO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGxvZy5lcnJvcihcIkNyZWF0aW5nIGEgQ2xpY2thYmxlQ29tcG9uZW50IHdpdGggYW4gSFRNTCBlbGVtZW50IG9mIFwiICsgdGFnICsgXCIgaXMgbm90IHN1cHBvcnRlZDsgdXNlIGEgQnV0dG9uIGluc3RlYWQuXCIpO1xuICAgIH0gLy8gQWRkIEFSSUEgYXR0cmlidXRlcyBmb3IgY2xpY2thYmxlIGVsZW1lbnQgd2hpY2ggaXMgbm90IGEgbmF0aXZlIEhUTUwgYnV0dG9uXG5cblxuICAgIGF0dHJpYnV0ZXMgPSBhc3NpZ24oe1xuICAgICAgcm9sZTogJ2J1dHRvbidcbiAgICB9LCBhdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnRhYkluZGV4XyA9IHByb3BzLnRhYkluZGV4O1xuXG4gICAgdmFyIGVsID0gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCB0YWcsIHByb3BzLCBhdHRyaWJ1dGVzKTtcblxuICAgIHRoaXMuY3JlYXRlQ29udHJvbFRleHRFbChlbCk7XG4gICAgcmV0dXJuIGVsO1xuICB9O1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAvLyByZW1vdmUgY29udHJvbFRleHRFbF8gb24gZGlzcG9zZVxuICAgIHRoaXMuY29udHJvbFRleHRFbF8gPSBudWxsO1xuXG4gICAgX0NvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb250cm9sIHRleHQgZWxlbWVudCBvbiB0aGlzIGBDbGlja2FibGVDb21wb25lbnRgXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gW2VsXVxuICAgKiAgICAgICAgUGFyZW50IGVsZW1lbnQgZm9yIHRoZSBjb250cm9sIHRleHQuXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGNvbnRyb2wgdGV4dCBlbGVtZW50IHRoYXQgZ2V0cyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVDb250cm9sVGV4dEVsID0gZnVuY3Rpb24gY3JlYXRlQ29udHJvbFRleHRFbChlbCkge1xuICAgIHRoaXMuY29udHJvbFRleHRFbF8gPSBjcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1jb250cm9sLXRleHQnXG4gICAgfSwge1xuICAgICAgLy8gbGV0IHRoZSBzY3JlZW4gcmVhZGVyIHVzZXIga25vdyB0aGF0IHRoZSB0ZXh0IG9mIHRoZSBlbGVtZW50IG1heSBjaGFuZ2VcbiAgICAgICdhcmlhLWxpdmUnOiAncG9saXRlJ1xuICAgIH0pO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xUZXh0RWxfKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRyb2xUZXh0KHRoaXMuY29udHJvbFRleHRfLCBlbCk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFRleHRFbF87XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGxvY2FsaXplIHRleHQgdG8gdXNlIGZvciB0aGUgY29udHJvbHMgb24gdGhlIGBDbGlja2FibGVDb21wb25lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdXG4gICAqICAgICAgICBDb250cm9sIHRleHQgZm9yIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gW2VsPXRoaXMuZWwoKV1cbiAgICogICAgICAgIEVsZW1lbnQgdG8gc2V0IHRoZSB0aXRsZSBvbi5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIC0gVGhlIGNvbnRyb2wgdGV4dCB3aGVuIGdldHRpbmdcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY29udHJvbFRleHQgPSBmdW5jdGlvbiBjb250cm9sVGV4dCh0ZXh0LCBlbCkge1xuICAgIGlmIChlbCA9PT0gdm9pZCAwKSB7XG4gICAgICBlbCA9IHRoaXMuZWwoKTtcbiAgICB9XG5cbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sVGV4dF8gfHwgJ05lZWQgVGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGxvY2FsaXplZFRleHQgPSB0aGlzLmxvY2FsaXplKHRleHQpO1xuICAgIHRoaXMuY29udHJvbFRleHRfID0gdGV4dDtcbiAgICB0ZXh0Q29udGVudCh0aGlzLmNvbnRyb2xUZXh0RWxfLCBsb2NhbGl6ZWRUZXh0KTtcblxuICAgIGlmICghdGhpcy5ub25JY29uQ29udHJvbCkge1xuICAgICAgLy8gU2V0IHRpdGxlIGF0dHJpYnV0ZSBpZiBvbmx5IGFuIGljb24gaXMgc2hvd25cbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgndGl0bGUnLCBsb2NhbGl6ZWRUZXh0KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgZGVmYXVsdCBET00gYGNsYXNzTmFtZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgRE9NIGBjbGFzc05hbWVgIGZvciB0aGlzIG9iamVjdC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVpbGRDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwidmpzLWNvbnRyb2wgdmpzLWJ1dHRvbiBcIiArIF9Db21wb25lbnQucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogRW5hYmxlIHRoaXMgYENsaWNrYWJsZUNvbXBvbmVudGBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgIGlmICghdGhpcy5lbmFibGVkXykge1xuICAgICAgdGhpcy5lbmFibGVkXyA9IHRydWU7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZGlzYWJsZWQnKTtcbiAgICAgIHRoaXMuZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMudGFiSW5kZXhfICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgdGhpcy50YWJJbmRleF8pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uKFsndGFwJywgJ2NsaWNrJ10sIHRoaXMuaGFuZGxlQ2xpY2spO1xuICAgICAgdGhpcy5vbigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoaXMgYENsaWNrYWJsZUNvbXBvbmVudGBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgdGhpcy5lbmFibGVkXyA9IGZhbHNlO1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1kaXNhYmxlZCcpO1xuICAgIHRoaXMuZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMudGFiSW5kZXhfICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lbF8ucmVtb3ZlQXR0cmlidXRlKCd0YWJJbmRleCcpO1xuICAgIH1cblxuICAgIHRoaXMub2ZmKCdtb3VzZW92ZXInLCB0aGlzLmhhbmRsZU1vdXNlT3Zlcik7XG4gICAgdGhpcy5vZmYoJ21vdXNlb3V0JywgdGhpcy5oYW5kbGVNb3VzZU91dCk7XG4gICAgdGhpcy5vZmYoWyd0YXAnLCAnY2xpY2snXSwgdGhpcy5oYW5kbGVDbGljayk7XG4gICAgdGhpcy5vZmYoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pO1xuICB9XG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBgQ2xpY2thYmxlQ29tcG9uZW50YCByZWNlaXZlcyBhXG4gICAqIGBjbGlja2Agb3IgYHRhcGAgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYHRhcGAgb3IgYGNsaWNrYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgdGFwXG4gICAqIEBsaXN0ZW5zIGNsaWNrXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7fVxuICAvKipcbiAgICogRXZlbnQgaGFuZGxlciB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgYENsaWNrYWJsZUNvbXBvbmVudGAgcmVjZWl2ZXMgYVxuICAgKiBga2V5ZG93bmAgZXZlbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBrZXkgaXMgU3BhY2Ugb3IgRW50ZXIsIGl0IHdpbGwgdHJpZ2dlciBhIGBjbGlja2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGtleWRvd25gIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBrZXlkb3duXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBTcGFjZSBvciBFbnRlciBrZXkgb3BlcmF0aW9uIHRvIGZpcmUgYSBjbGljayBldmVudC4gQWxzbyxcbiAgICAvLyBwcmV2ZW50IHRoZSBldmVudCBmcm9tIHByb3BhZ2F0aW5nIHRocm91Z2ggdGhlIERPTSBhbmQgdHJpZ2dlcmluZ1xuICAgIC8vIFBsYXllciBob3RrZXlzLlxuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdTcGFjZScpIHx8IGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ0VudGVyJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMudHJpZ2dlcignY2xpY2snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFzcyBrZXlwcmVzcyBoYW5kbGluZyB1cCBmb3IgdW5zdXBwb3J0ZWQga2V5c1xuICAgICAgX0NvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENsaWNrYWJsZUNvbXBvbmVudDtcbn0oQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdDbGlja2FibGVDb21wb25lbnQnLCBDbGlja2FibGVDb21wb25lbnQpO1xuXG4vKipcbiAqIEEgYENsaWNrYWJsZUNvbXBvbmVudGAgdGhhdCBoYW5kbGVzIHNob3dpbmcgdGhlIHBvc3RlciBpbWFnZSBmb3IgdGhlIHBsYXllci5cbiAqXG4gKiBAZXh0ZW5kcyBDbGlja2FibGVDb21wb25lbnRcbiAqL1xuXG52YXIgUG9zdGVySW1hZ2UgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9DbGlja2FibGVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9zdGVySW1hZ2UsIF9DbGlja2FibGVDb21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYXR0YWNoIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gUG9zdGVySW1hZ2UocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ2xpY2thYmxlQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMudXBkYXRlKCk7XG5cbiAgICBwbGF5ZXIub24oJ3Bvc3RlcmNoYW5nZScsIGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLnVwZGF0ZSkpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQ2xlYW4gdXAgYW5kIGRpc3Bvc2Ugb2YgdGhlIGBQb3N0ZXJJbWFnZWAuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBvc3RlckltYWdlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5wbGF5ZXIoKS5vZmYoJ3Bvc3RlcmNoYW5nZScsIHRoaXMudXBkYXRlKTtcblxuICAgIF9DbGlja2FibGVDb21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgUG9zdGVySW1hZ2VgcyBET00gZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCQxKCkge1xuICAgIHZhciBlbCA9IGNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtcG9zdGVyJyxcbiAgICAgIC8vIERvbid0IHdhbnQgcG9zdGVyIHRvIGJlIHRhYmJhYmxlLlxuICAgICAgdGFiSW5kZXg6IC0xXG4gICAgfSk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8qKlxuICAgKiBBbiB7QGxpbmsgRXZlbnRUYXJnZXR+RXZlbnRMaXN0ZW5lcn0gZm9yIHtAbGluayBQbGF5ZXIjcG9zdGVyY2hhbmdlfSBldmVudHMuXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNwb3N0ZXJjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXIjcG9zdGVyY2hhbmdlYCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZXZlbnQpIHtcbiAgICB2YXIgdXJsID0gdGhpcy5wbGF5ZXIoKS5wb3N0ZXIoKTtcbiAgICB0aGlzLnNldFNyYyh1cmwpOyAvLyBJZiB0aGVyZSdzIG5vIHBvc3RlciBzb3VyY2Ugd2Ugc2hvdWxkIGRpc3BsYXk6bm9uZSBvbiB0aGlzIGNvbXBvbmVudFxuICAgIC8vIHNvIGl0J3Mgbm90IHN0aWxsIGNsaWNrYWJsZSBvciByaWdodC1jbGlja2FibGVcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIG9mIHRoZSBgUG9zdGVySW1hZ2VgIGRlcGVuZGluZyBvbiB0aGUgZGlzcGxheSBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogICAgICAgIFRoZSBVUkwgdG8gdGhlIHNvdXJjZSBmb3IgdGhlIGBQb3N0ZXJJbWFnZWAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldFNyYyA9IGZ1bmN0aW9uIHNldFNyYyh1cmwpIHtcbiAgICB2YXIgYmFja2dyb3VuZEltYWdlID0gJyc7IC8vIEFueSBmYWxzeSB2YWx1ZSBzaG91bGQgc3RheSBhcyBhbiBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZVxuICAgIC8vIHRoaXMgd2lsbCB0aHJvdyBhbiBleHRyYSBlcnJvclxuXG4gICAgaWYgKHVybCkge1xuICAgICAgYmFja2dyb3VuZEltYWdlID0gXCJ1cmwoXFxcIlwiICsgdXJsICsgXCJcXFwiKVwiO1xuICAgIH1cblxuICAgIHRoaXMuZWxfLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGJhY2tncm91bmRJbWFnZTtcbiAgfVxuICAvKipcbiAgICogQW4ge0BsaW5rIEV2ZW50VGFyZ2V0fkV2ZW50TGlzdGVuZXJ9IGZvciBjbGlja3Mgb24gdGhlIGBQb3N0ZXJJbWFnZWAuIFNlZVxuICAgKiB7QGxpbmsgQ2xpY2thYmxlQ29tcG9uZW50I2hhbmRsZUNsaWNrfSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRhcFxuICAgKiBAbGlzdGVucyBjbGlja1xuICAgKiBAbGlzdGVucyBrZXlkb3duXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICArICAgICAgICBUaGUgYGNsaWNrYCwgYHRhcGAgb3IgYGtleWRvd25gIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBhIGNsaWNrIHRvIHRyaWdnZXIgcGxheWJhY2sgd2hlbiBjb250cm9scyBhcmUgZGlzYWJsZWRcbiAgICBpZiAoIXRoaXMucGxheWVyXy5jb250cm9scygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGxheWVyXy50ZWNoKHRydWUpKSB7XG4gICAgICB0aGlzLnBsYXllcl8udGVjaCh0cnVlKS5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYXllcl8ucGF1c2VkKCkpIHtcbiAgICAgIHNpbGVuY2VQcm9taXNlKHRoaXMucGxheWVyXy5wbGF5KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXllcl8ucGF1c2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvc3RlckltYWdlO1xufShDbGlja2FibGVDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1Bvc3RlckltYWdlJywgUG9zdGVySW1hZ2UpO1xuXG52YXIgZGFya0dyYXkgPSAnIzIyMic7XG52YXIgbGlnaHRHcmF5ID0gJyNjY2MnO1xudmFyIGZvbnRNYXAgPSB7XG4gIG1vbm9zcGFjZTogJ21vbm9zcGFjZScsXG4gIHNhbnNTZXJpZjogJ3NhbnMtc2VyaWYnLFxuICBzZXJpZjogJ3NlcmlmJyxcbiAgbW9ub3NwYWNlU2Fuc1NlcmlmOiAnXCJBbmRhbGUgTW9ub1wiLCBcIkx1Y2lkYSBDb25zb2xlXCIsIG1vbm9zcGFjZScsXG4gIG1vbm9zcGFjZVNlcmlmOiAnXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLFxuICBwcm9wb3J0aW9uYWxTYW5zU2VyaWY6ICdzYW5zLXNlcmlmJyxcbiAgcHJvcG9ydGlvbmFsU2VyaWY6ICdzZXJpZicsXG4gIGNhc3VhbDogJ1wiQ29taWMgU2FucyBNU1wiLCBJbXBhY3QsIGZhbnRhc3knLFxuICBzY3JpcHQ6ICdcIk1vbm90eXBlIENvcnNpdmFcIiwgY3Vyc2l2ZScsXG4gIHNtYWxsY2FwczogJ1wiQW5kYWxlIE1vbm9cIiwgXCJMdWNpZGEgQ29uc29sZVwiLCBtb25vc3BhY2UsIHNhbnMtc2VyaWYnXG59O1xuLyoqXG4gKiBDb25zdHJ1Y3QgYW4gcmdiYSBjb2xvciBmcm9tIGEgZ2l2ZW4gaGV4IGNvbG9yIGNvZGUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yXG4gKiAgICAgICAgSGV4IG51bWJlciBmb3IgY29sb3IsIGxpa2UgI2YwZSBvciAjZjYwNGUyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcGFjaXR5XG4gKiAgICAgICAgVmFsdWUgZm9yIG9wYWNpdHksIDAuMCAtIDEuMC5cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFRoZSByZ2JhIGNvbG9yIHRoYXQgd2FzIGNyZWF0ZWQsIGxpa2UgJ3JnYmEoMjU1LCAwLCAwLCAwLjMpJy5cbiAqL1xuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDb2xvcihjb2xvciwgb3BhY2l0eSkge1xuICB2YXIgaGV4O1xuXG4gIGlmIChjb2xvci5sZW5ndGggPT09IDQpIHtcbiAgICAvLyBjb2xvciBsb29rcyBsaWtlIFwiI2YwZVwiXG4gICAgaGV4ID0gY29sb3JbMV0gKyBjb2xvclsxXSArIGNvbG9yWzJdICsgY29sb3JbMl0gKyBjb2xvclszXSArIGNvbG9yWzNdO1xuICB9IGVsc2UgaWYgKGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIC8vIGNvbG9yIGxvb2tzIGxpa2UgXCIjZjYwNGUyXCJcbiAgICBoZXggPSBjb2xvci5zbGljZSgxKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sb3IgY29kZSBwcm92aWRlZCwgJyArIGNvbG9yICsgJzsgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgZS5nLiAjZjBlIG9yICNmNjA0ZTIuJyk7XG4gIH1cblxuICByZXR1cm4gJ3JnYmEoJyArIHBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpICsgJywnICsgcGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNikgKyAnLCcgKyBwYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KSArICcsJyArIG9wYWNpdHkgKyAnKSc7XG59XG4vKipcbiAqIFRyeSB0byB1cGRhdGUgdGhlIHN0eWxlIG9mIGEgRE9NIGVsZW1lbnQuIFNvbWUgc3R5bGUgY2hhbmdlcyB3aWxsIHRocm93IGFuIGVycm9yLFxuICogcGFydGljdWxhcmx5IGluIElFOC4gVGhvc2Ugc2hvdWxkIGJlIG5vb3BzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqICAgICAgICBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgc3R5bGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVxuICogICAgICAgIFRoZSBDU1MgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgc3R5bGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBydWxlXG4gKiAgICAgICAgVGhlIHN0eWxlIHJ1bGUgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgcHJvcGVydHkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0cnlVcGRhdGVTdHlsZShlbCwgc3R5bGUsIHJ1bGUpIHtcbiAgdHJ5IHtcbiAgICBlbC5zdHlsZVtzdHlsZV0gPSBydWxlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gU2F0aXNmaWVzIGxpbnRlci5cbiAgICByZXR1cm47XG4gIH1cbn1cbi8qKlxuICogVGhlIGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyB0ZXh0IHRyYWNrIGN1ZXMuXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxuXG52YXIgVGV4dFRyYWNrRGlzcGxheSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUZXh0VHJhY2tEaXNwbGF5LCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21wb25lbnR+UmVhZHlDYWxsYmFja30gW3JlYWR5XVxuICAgKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBgVGV4dFRyYWNrRGlzcGxheWAgaXMgcmVhZHkuXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0VHJhY2tEaXNwbGF5KHBsYXllciwgb3B0aW9ucywgcmVhZHkpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMsIHJlYWR5KSB8fCB0aGlzO1xuICAgIHZhciB1cGRhdGVEaXNwbGF5SGFuZGxlciA9IGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLnVwZGF0ZURpc3BsYXkpO1xuICAgIHBsYXllci5vbignbG9hZHN0YXJ0JywgYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMudG9nZ2xlRGlzcGxheSkpO1xuICAgIHBsYXllci5vbigndGV4dHRyYWNrY2hhbmdlJywgdXBkYXRlRGlzcGxheUhhbmRsZXIpO1xuICAgIHBsYXllci5vbignbG9hZGVkbWV0YWRhdGEnLCBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBfdGhpcy5wcmVzZWxlY3RUcmFjaykpOyAvLyBUaGlzIHVzZWQgdG8gYmUgY2FsbGVkIGR1cmluZyBwbGF5ZXIgaW5pdCwgYnV0IHdhcyBjYXVzaW5nIGFuIGVycm9yXG4gICAgLy8gaWYgYSB0cmFjayBzaG91bGQgc2hvdyBieSBkZWZhdWx0IGFuZCB0aGUgZGlzcGxheSBoYWRuJ3QgbG9hZGVkIHlldC5cbiAgICAvLyBTaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gYW4gZXh0ZXJuYWwgdHJhY2sgbG9hZGVyIHdoZW4gd2Ugc3VwcG9ydFxuICAgIC8vIHRyYWNrcyB0aGF0IGRvbid0IG5lZWQgYSBkaXNwbGF5LlxuXG4gICAgcGxheWVyLnJlYWR5KGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwbGF5ZXIudGVjaF8gJiYgcGxheWVyLnRlY2hfLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwbGF5ZXIub24oJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB1cGRhdGVEaXNwbGF5SGFuZGxlcik7XG4gICAgICBwbGF5ZXIub24oJ3BsYXllcnJlc2l6ZScsIHVwZGF0ZURpc3BsYXlIYW5kbGVyKTtcbiAgICAgIHdpbmRvdyQxLmFkZEV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgdXBkYXRlRGlzcGxheUhhbmRsZXIpO1xuICAgICAgcGxheWVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gd2luZG93JDEucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCB1cGRhdGVEaXNwbGF5SGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHZhciB0cmFja3MgPSB0aGlzLm9wdGlvbnNfLnBsYXllck9wdGlvbnMudHJhY2tzIHx8IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnBsYXllcl8uYWRkUmVtb3RlVGV4dFRyYWNrKHRyYWNrc1tpXSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlc2VsZWN0VHJhY2soKTtcbiAgICB9KSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAqIFByZXNlbGVjdCBhIHRyYWNrIGZvbGxvd2luZyB0aGlzIHByZWNlZGVuY2U6XG4gICogLSBtYXRjaGVzIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHtAbGluayBUZXh0VHJhY2t9J3MgbGFuZ3VhZ2UgYW5kIGtpbmRcbiAgKiAtIG1hdGNoZXMgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQge0BsaW5rIFRleHRUcmFja30ncyBsYW5ndWFnZSBvbmx5XG4gICogLSBpcyB0aGUgZmlyc3QgZGVmYXVsdCBjYXB0aW9ucyB0cmFja1xuICAqIC0gaXMgdGhlIGZpcnN0IGRlZmF1bHQgZGVzY3JpcHRpb25zIHRyYWNrXG4gICpcbiAgKiBAbGlzdGVucyBQbGF5ZXIjbG9hZHN0YXJ0XG4gICovXG5cblxuICB2YXIgX3Byb3RvID0gVGV4dFRyYWNrRGlzcGxheS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnByZXNlbGVjdFRyYWNrID0gZnVuY3Rpb24gcHJlc2VsZWN0VHJhY2soKSB7XG4gICAgdmFyIG1vZGVzID0ge1xuICAgICAgY2FwdGlvbnM6IDEsXG4gICAgICBzdWJ0aXRsZXM6IDFcbiAgICB9O1xuICAgIHZhciB0cmFja0xpc3QgPSB0aGlzLnBsYXllcl8udGV4dFRyYWNrcygpO1xuICAgIHZhciB1c2VyUHJlZiA9IHRoaXMucGxheWVyXy5jYWNoZV8uc2VsZWN0ZWRMYW5ndWFnZTtcbiAgICB2YXIgZmlyc3REZXNjO1xuICAgIHZhciBmaXJzdENhcHRpb25zO1xuICAgIHZhciBwcmVmZXJyZWRUcmFjaztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJhY2sgPSB0cmFja0xpc3RbaV07XG5cbiAgICAgIGlmICh1c2VyUHJlZiAmJiB1c2VyUHJlZi5lbmFibGVkICYmIHVzZXJQcmVmLmxhbmd1YWdlICYmIHVzZXJQcmVmLmxhbmd1YWdlID09PSB0cmFjay5sYW5ndWFnZSAmJiB0cmFjay5raW5kIGluIG1vZGVzKSB7XG4gICAgICAgIC8vIEFsd2F5cyBjaG9vc2UgdGhlIHRyYWNrIHRoYXQgbWF0Y2hlcyBib3RoIGxhbmd1YWdlIGFuZCBraW5kXG4gICAgICAgIGlmICh0cmFjay5raW5kID09PSB1c2VyUHJlZi5raW5kKSB7XG4gICAgICAgICAgcHJlZmVycmVkVHJhY2sgPSB0cmFjazsgLy8gb3IgY2hvb3NlIHRoZSBmaXJzdCB0cmFjayB0aGF0IG1hdGNoZXMgbGFuZ3VhZ2VcbiAgICAgICAgfSBlbHNlIGlmICghcHJlZmVycmVkVHJhY2spIHtcbiAgICAgICAgICBwcmVmZXJyZWRUcmFjayA9IHRyYWNrO1xuICAgICAgICB9IC8vIGNsZWFyIGV2ZXJ5dGhpbmcgaWYgb2ZmVGV4dFRyYWNrTWVudUl0ZW0gd2FzIGNsaWNrZWRcblxuICAgICAgfSBlbHNlIGlmICh1c2VyUHJlZiAmJiAhdXNlclByZWYuZW5hYmxlZCkge1xuICAgICAgICBwcmVmZXJyZWRUcmFjayA9IG51bGw7XG4gICAgICAgIGZpcnN0RGVzYyA9IG51bGw7XG4gICAgICAgIGZpcnN0Q2FwdGlvbnMgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0cmFja1tcImRlZmF1bHRcIl0pIHtcbiAgICAgICAgaWYgKHRyYWNrLmtpbmQgPT09ICdkZXNjcmlwdGlvbnMnICYmICFmaXJzdERlc2MpIHtcbiAgICAgICAgICBmaXJzdERlc2MgPSB0cmFjaztcbiAgICAgICAgfSBlbHNlIGlmICh0cmFjay5raW5kIGluIG1vZGVzICYmICFmaXJzdENhcHRpb25zKSB7XG4gICAgICAgICAgZmlyc3RDYXB0aW9ucyA9IHRyYWNrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBUaGUgcHJlZmVycmVkVHJhY2sgbWF0Y2hlcyB0aGUgdXNlciBwcmVmZXJlbmNlIGFuZCB0YWtlc1xuICAgIC8vIHByZWNlZGVuY2Ugb3ZlciBhbGwgdGhlIG90aGVyIHRyYWNrcy5cbiAgICAvLyBTbywgZGlzcGxheSB0aGUgcHJlZmVycmVkVHJhY2sgYmVmb3JlIHRoZSBmaXJzdCBkZWZhdWx0IHRyYWNrXG4gICAgLy8gYW5kIHRoZSBzdWJ0aXRsZXMvY2FwdGlvbnMgdHJhY2sgYmVmb3JlIHRoZSBkZXNjcmlwdGlvbnMgdHJhY2tcblxuXG4gICAgaWYgKHByZWZlcnJlZFRyYWNrKSB7XG4gICAgICBwcmVmZXJyZWRUcmFjay5tb2RlID0gJ3Nob3dpbmcnO1xuICAgIH0gZWxzZSBpZiAoZmlyc3RDYXB0aW9ucykge1xuICAgICAgZmlyc3RDYXB0aW9ucy5tb2RlID0gJ3Nob3dpbmcnO1xuICAgIH0gZWxzZSBpZiAoZmlyc3REZXNjKSB7XG4gICAgICBmaXJzdERlc2MubW9kZSA9ICdzaG93aW5nJztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFR1cm4gZGlzcGxheSBvZiB7QGxpbmsgVGV4dFRyYWNrfSdzIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgaW50byB0aGUgb3RoZXIgc3RhdGUuXG4gICAqIFRoZXJlIGFyZSBvbmx5IHR3byBzdGF0ZXM6XG4gICAqIC0gJ3Nob3duJ1xuICAgKiAtICdoaWRkZW4nXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNsb2Fkc3RhcnRcbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9nZ2xlRGlzcGxheSA9IGZ1bmN0aW9uIHRvZ2dsZURpc3BsYXkoKSB7XG4gICAgaWYgKHRoaXMucGxheWVyXy50ZWNoXyAmJiB0aGlzLnBsYXllcl8udGVjaF8uZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHtAbGluayBDb21wb25lbnR9J3MgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCgpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLXRleHQtdHJhY2stZGlzcGxheSdcbiAgICB9LCB7XG4gICAgICAnYXJpYS1saXZlJzogJ29mZicsXG4gICAgICAnYXJpYS1hdG9taWMnOiAndHJ1ZSdcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgYWxsIGRpc3BsYXllZCB7QGxpbmsgVGV4dFRyYWNrfXMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNsZWFyRGlzcGxheSA9IGZ1bmN0aW9uIGNsZWFyRGlzcGxheSgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyQxLldlYlZUVCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93JDEuV2ViVlRULnByb2Nlc3NDdWVzKHdpbmRvdyQxLCBbXSwgdGhpcy5lbF8pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXBkYXRlIHRoZSBkaXNwbGF5ZWQgVGV4dFRyYWNrIHdoZW4gYSBlaXRoZXIgYSB7QGxpbmsgUGxheWVyI3RleHR0cmFja2NoYW5nZX0gb3JcbiAgICogYSB7QGxpbmsgUGxheWVyI2Z1bGxzY3JlZW5jaGFuZ2V9IGlzIGZpcmVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjdGV4dHRyYWNrY2hhbmdlXG4gICAqIEBsaXN0ZW5zIFBsYXllciNmdWxsc2NyZWVuY2hhbmdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZURpc3BsYXkgPSBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KCkge1xuICAgIHZhciB0cmFja3MgPSB0aGlzLnBsYXllcl8udGV4dFRyYWNrcygpO1xuICAgIHZhciBhbGxvd011bHRpcGxlU2hvd2luZ1RyYWNrcyA9IHRoaXMub3B0aW9uc18uYWxsb3dNdWx0aXBsZVNob3dpbmdUcmFja3M7XG4gICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcblxuICAgIGlmIChhbGxvd011bHRpcGxlU2hvd2luZ1RyYWNrcykge1xuICAgICAgdmFyIHNob3dpbmdUcmFja3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRyYWNrcy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW19pXTtcblxuICAgICAgICBpZiAodHJhY2subW9kZSAhPT0gJ3Nob3dpbmcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBzaG93aW5nVHJhY2tzLnB1c2godHJhY2spO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUZvclRyYWNrKHNob3dpbmdUcmFja3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gIFRyYWNrIGRpc3BsYXkgcHJpb3JpdGl6YXRpb24gbW9kZWw6IGlmIG11bHRpcGxlIHRyYWNrcyBhcmUgJ3Nob3dpbmcnLFxuICAgIC8vICBkaXNwbGF5IHRoZSBmaXJzdCAnc3VidGl0bGVzJyBvciAnY2FwdGlvbnMnIHRyYWNrIHdoaWNoIGlzICdzaG93aW5nJyxcbiAgICAvLyAgb3RoZXJ3aXNlIGRpc3BsYXkgdGhlIGZpcnN0ICdkZXNjcmlwdGlvbnMnIHRyYWNrIHdoaWNoIGlzICdzaG93aW5nJ1xuXG5cbiAgICB2YXIgZGVzY3JpcHRpb25zVHJhY2sgPSBudWxsO1xuICAgIHZhciBjYXB0aW9uc1N1YnRpdGxlc1RyYWNrID0gbnVsbDtcbiAgICB2YXIgaSA9IHRyYWNrcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YXIgX3RyYWNrID0gdHJhY2tzW2ldO1xuXG4gICAgICBpZiAoX3RyYWNrLm1vZGUgPT09ICdzaG93aW5nJykge1xuICAgICAgICBpZiAoX3RyYWNrLmtpbmQgPT09ICdkZXNjcmlwdGlvbnMnKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25zVHJhY2sgPSBfdHJhY2s7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdGlvbnNTdWJ0aXRsZXNUcmFjayA9IF90cmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXB0aW9uc1N1YnRpdGxlc1RyYWNrKSB7XG4gICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpICE9PSAnb2ZmJykge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ29mZicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUZvclRyYWNrKGNhcHRpb25zU3VidGl0bGVzVHJhY2spO1xuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRpb25zVHJhY2spIHtcbiAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1saXZlJykgIT09ICdhc3NlcnRpdmUnKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAnYXNzZXJ0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlRm9yVHJhY2soZGVzY3JpcHRpb25zVHJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU3R5bGUge0BMaW5rIFRleHRUcmFja30gYWN0aXZlQ3VlcyBhY2NvcmRpbmcgdG8ge0BMaW5rIFRleHRUcmFja1NldHRpbmdzfS5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t9IHRyYWNrXG4gICAqICAgICAgICBUZXh0IHRyYWNrIG9iamVjdCBjb250YWluaW5nIGFjdGl2ZSBjdWVzIHRvIHN0eWxlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVEaXNwbGF5U3RhdGUgPSBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5U3RhdGUodHJhY2spIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gdGhpcy5wbGF5ZXJfLnRleHRUcmFja1NldHRpbmdzLmdldFZhbHVlcygpO1xuICAgIHZhciBjdWVzID0gdHJhY2suYWN0aXZlQ3VlcztcbiAgICB2YXIgaSA9IGN1ZXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIGN1ZSA9IGN1ZXNbaV07XG5cbiAgICAgIGlmICghY3VlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VlRGl2ID0gY3VlLmRpc3BsYXlTdGF0ZTtcblxuICAgICAgaWYgKG92ZXJyaWRlcy5jb2xvcikge1xuICAgICAgICBjdWVEaXYuZmlyc3RDaGlsZC5zdHlsZS5jb2xvciA9IG92ZXJyaWRlcy5jb2xvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJyaWRlcy50ZXh0T3BhY2l0eSkge1xuICAgICAgICB0cnlVcGRhdGVTdHlsZShjdWVEaXYuZmlyc3RDaGlsZCwgJ2NvbG9yJywgY29uc3RydWN0Q29sb3Iob3ZlcnJpZGVzLmNvbG9yIHx8ICcjZmZmJywgb3ZlcnJpZGVzLnRleHRPcGFjaXR5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVycmlkZXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgIGN1ZURpdi5maXJzdENoaWxkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG92ZXJyaWRlcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVycmlkZXMuYmFja2dyb3VuZE9wYWNpdHkpIHtcbiAgICAgICAgdHJ5VXBkYXRlU3R5bGUoY3VlRGl2LmZpcnN0Q2hpbGQsICdiYWNrZ3JvdW5kQ29sb3InLCBjb25zdHJ1Y3RDb2xvcihvdmVycmlkZXMuYmFja2dyb3VuZENvbG9yIHx8ICcjMDAwJywgb3ZlcnJpZGVzLmJhY2tncm91bmRPcGFjaXR5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVycmlkZXMud2luZG93Q29sb3IpIHtcbiAgICAgICAgaWYgKG92ZXJyaWRlcy53aW5kb3dPcGFjaXR5KSB7XG4gICAgICAgICAgdHJ5VXBkYXRlU3R5bGUoY3VlRGl2LCAnYmFja2dyb3VuZENvbG9yJywgY29uc3RydWN0Q29sb3Iob3ZlcnJpZGVzLndpbmRvd0NvbG9yLCBvdmVycmlkZXMud2luZG93T3BhY2l0eSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1ZURpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvdmVycmlkZXMud2luZG93Q29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJyaWRlcy5lZGdlU3R5bGUpIHtcbiAgICAgICAgaWYgKG92ZXJyaWRlcy5lZGdlU3R5bGUgPT09ICdkcm9wc2hhZG93Jykge1xuICAgICAgICAgIGN1ZURpdi5maXJzdENoaWxkLnN0eWxlLnRleHRTaGFkb3cgPSBcIjJweCAycHggM3B4IFwiICsgZGFya0dyYXkgKyBcIiwgMnB4IDJweCA0cHggXCIgKyBkYXJrR3JheSArIFwiLCAycHggMnB4IDVweCBcIiArIGRhcmtHcmF5O1xuICAgICAgICB9IGVsc2UgaWYgKG92ZXJyaWRlcy5lZGdlU3R5bGUgPT09ICdyYWlzZWQnKSB7XG4gICAgICAgICAgY3VlRGl2LmZpcnN0Q2hpbGQuc3R5bGUudGV4dFNoYWRvdyA9IFwiMXB4IDFweCBcIiArIGRhcmtHcmF5ICsgXCIsIDJweCAycHggXCIgKyBkYXJrR3JheSArIFwiLCAzcHggM3B4IFwiICsgZGFya0dyYXk7XG4gICAgICAgIH0gZWxzZSBpZiAob3ZlcnJpZGVzLmVkZ2VTdHlsZSA9PT0gJ2RlcHJlc3NlZCcpIHtcbiAgICAgICAgICBjdWVEaXYuZmlyc3RDaGlsZC5zdHlsZS50ZXh0U2hhZG93ID0gXCIxcHggMXB4IFwiICsgbGlnaHRHcmF5ICsgXCIsIDAgMXB4IFwiICsgbGlnaHRHcmF5ICsgXCIsIC0xcHggLTFweCBcIiArIGRhcmtHcmF5ICsgXCIsIDAgLTFweCBcIiArIGRhcmtHcmF5O1xuICAgICAgICB9IGVsc2UgaWYgKG92ZXJyaWRlcy5lZGdlU3R5bGUgPT09ICd1bmlmb3JtJykge1xuICAgICAgICAgIGN1ZURpdi5maXJzdENoaWxkLnN0eWxlLnRleHRTaGFkb3cgPSBcIjAgMCA0cHggXCIgKyBkYXJrR3JheSArIFwiLCAwIDAgNHB4IFwiICsgZGFya0dyYXkgKyBcIiwgMCAwIDRweCBcIiArIGRhcmtHcmF5ICsgXCIsIDAgMCA0cHggXCIgKyBkYXJrR3JheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3ZlcnJpZGVzLmZvbnRQZXJjZW50ICYmIG92ZXJyaWRlcy5mb250UGVyY2VudCAhPT0gMSkge1xuICAgICAgICB2YXIgZm9udFNpemUgPSB3aW5kb3ckMS5wYXJzZUZsb2F0KGN1ZURpdi5zdHlsZS5mb250U2l6ZSk7XG4gICAgICAgIGN1ZURpdi5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplICogb3ZlcnJpZGVzLmZvbnRQZXJjZW50ICsgJ3B4JztcbiAgICAgICAgY3VlRGl2LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgY3VlRGl2LnN0eWxlLnRvcCA9ICdhdXRvJztcbiAgICAgICAgY3VlRGl2LnN0eWxlLmJvdHRvbSA9ICcycHgnO1xuICAgICAgfVxuXG4gICAgICBpZiAob3ZlcnJpZGVzLmZvbnRGYW1pbHkgJiYgb3ZlcnJpZGVzLmZvbnRGYW1pbHkgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICBpZiAob3ZlcnJpZGVzLmZvbnRGYW1pbHkgPT09ICdzbWFsbC1jYXBzJykge1xuICAgICAgICAgIGN1ZURpdi5maXJzdENoaWxkLnN0eWxlLmZvbnRWYXJpYW50ID0gJ3NtYWxsLWNhcHMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1ZURpdi5maXJzdENoaWxkLnN0eWxlLmZvbnRGYW1pbHkgPSBmb250TWFwW292ZXJyaWRlcy5mb250RmFtaWx5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWRkIGFuIHtAbGluayBUZXh0VHJhY2t9IHRvIHRvIHRoZSB7QGxpbmsgVGVjaH1zIHtAbGluayBUZXh0VHJhY2tMaXN0fS5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t8VGV4dFRyYWNrW119IHRyYWNrc1xuICAgKiAgICAgICAgVGV4dCB0cmFjayBvYmplY3Qgb3IgdGV4dCB0cmFjayBhcnJheSB0byBiZSBhZGRlZCB0byB0aGUgbGlzdC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlRm9yVHJhY2sgPSBmdW5jdGlvbiB1cGRhdGVGb3JUcmFjayh0cmFja3MpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJhY2tzKSkge1xuICAgICAgdHJhY2tzID0gW3RyYWNrc107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3ckMS5XZWJWVFQgIT09ICdmdW5jdGlvbicgfHwgdHJhY2tzLmV2ZXJ5KGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgcmV0dXJuICF0cmFjay5hY3RpdmVDdWVzO1xuICAgIH0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGN1ZXMgPSBbXTsgLy8gcHVzaCBhbGwgYWN0aXZlIHRyYWNrIGN1ZXNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdHJhY2sgPSB0cmFja3NbaV07XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGg7ICsraikge1xuICAgICAgICBjdWVzLnB1c2godHJhY2suYWN0aXZlQ3Vlc1tqXSk7XG4gICAgICB9XG4gICAgfSAvLyByZW1vdmVzIGFsbCBjdWVzIGJlZm9yZSBpdCBwcm9jZXNzZXMgbmV3IG9uZXNcblxuXG4gICAgd2luZG93JDEuV2ViVlRULnByb2Nlc3NDdWVzKHdpbmRvdyQxLCBjdWVzLCB0aGlzLmVsXyk7IC8vIGFkZCB1bmlxdWUgY2xhc3MgdG8gZWFjaCBsYW5ndWFnZSB0ZXh0IHRyYWNrICYgYWRkIHNldHRpbmdzIHN0eWxpbmcgaWYgbmVjZXNzYXJ5XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB0cmFja3MubGVuZ3RoOyArK19pMikge1xuICAgICAgdmFyIF90cmFjazIgPSB0cmFja3NbX2kyXTtcblxuICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IF90cmFjazIuYWN0aXZlQ3Vlcy5sZW5ndGg7ICsrX2opIHtcbiAgICAgICAgdmFyIGN1ZUVsID0gX3RyYWNrMi5hY3RpdmVDdWVzW19qXS5kaXNwbGF5U3RhdGU7XG4gICAgICAgIGFkZENsYXNzKGN1ZUVsLCAndmpzLXRleHQtdHJhY2stY3VlJyk7XG4gICAgICAgIGFkZENsYXNzKGN1ZUVsLCAndmpzLXRleHQtdHJhY2stY3VlLScgKyAoX3RyYWNrMi5sYW5ndWFnZSA/IF90cmFjazIubGFuZ3VhZ2UgOiBfaTIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxheWVyXy50ZXh0VHJhY2tTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlTdGF0ZShfdHJhY2syKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRleHRUcmFja0Rpc3BsYXk7XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnVGV4dFRyYWNrRGlzcGxheScsIFRleHRUcmFja0Rpc3BsYXkpO1xuXG4vKipcbiAqIEEgbG9hZGluZyBzcGlubmVyIGZvciB1c2UgZHVyaW5nIHdhaXRpbmcvbG9hZGluZyBldmVudHMuXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIExvYWRpbmdTcGlubmVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKExvYWRpbmdTcGlubmVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMb2FkaW5nU3Bpbm5lcigpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTG9hZGluZ1NwaW5uZXIucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBMb2FkaW5nU3Bpbm5lcmBzIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBkb20gZWxlbWVudCB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsJDEoKSB7XG4gICAgdmFyIGlzQXVkaW8gPSB0aGlzLnBsYXllcl8uaXNBdWRpbygpO1xuICAgIHZhciBwbGF5ZXJUeXBlID0gdGhpcy5sb2NhbGl6ZShpc0F1ZGlvID8gJ0F1ZGlvIFBsYXllcicgOiAnVmlkZW8gUGxheWVyJyk7XG4gICAgdmFyIGNvbnRyb2xUZXh0ID0gY3JlYXRlRWwoJ3NwYW4nLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtY29udHJvbC10ZXh0JyxcbiAgICAgIGlubmVySFRNTDogdGhpcy5sb2NhbGl6ZSgnezF9IGlzIGxvYWRpbmcuJywgW3BsYXllclR5cGVdKVxuICAgIH0pO1xuXG4gICAgdmFyIGVsID0gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLWxvYWRpbmctc3Bpbm5lcicsXG4gICAgICBkaXI6ICdsdHInXG4gICAgfSk7XG5cbiAgICBlbC5hcHBlbmRDaGlsZChjb250cm9sVGV4dCk7XG4gICAgcmV0dXJuIGVsO1xuICB9O1xuXG4gIHJldHVybiBMb2FkaW5nU3Bpbm5lcjtcbn0oQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdMb2FkaW5nU3Bpbm5lcicsIExvYWRpbmdTcGlubmVyKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYnV0dG9ucy5cbiAqXG4gKiBAZXh0ZW5kcyBDbGlja2FibGVDb21wb25lbnRcbiAqL1xuXG52YXIgQnV0dG9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ2xpY2thYmxlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKEJ1dHRvbiwgX0NsaWNrYWJsZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQnV0dG9uKCkge1xuICAgIHJldHVybiBfQ2xpY2thYmxlQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBCdXR0b25gcyBET00gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWc9XCJidXR0b25cIl1cbiAgICogICAgICAgIFRoZSBlbGVtZW50J3Mgbm9kZSB0eXBlLiBUaGlzIGFyZ3VtZW50IGlzIElHTk9SRUQ6IG5vIG1hdHRlciB3aGF0XG4gICAqICAgICAgICBpcyBwYXNzZWQsIGl0IHdpbGwgYWx3YXlzIGNyZWF0ZSBhIGBidXR0b25gIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHM9e31dXG4gICAqICAgICAgICBBbiBvYmplY3Qgb2YgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSBzZXQgb24gdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cmlidXRlcz17fV1cbiAgICogICAgICAgIEFuIG9iamVjdCBvZiBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHNldCBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKHRhZywgcHJvcHMsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgICAgcHJvcHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlcyA9PT0gdm9pZCAwKSB7XG4gICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgfVxuXG4gICAgdGFnID0gJ2J1dHRvbic7XG4gICAgcHJvcHMgPSBhc3NpZ24oe1xuICAgICAgaW5uZXJIVE1MOiAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJ2anMtaWNvbi1wbGFjZWhvbGRlclwiPjwvc3Bhbj4nLFxuICAgICAgY2xhc3NOYW1lOiB0aGlzLmJ1aWxkQ1NTQ2xhc3MoKVxuICAgIH0sIHByb3BzKTsgLy8gQWRkIGF0dHJpYnV0ZXMgZm9yIGJ1dHRvbiBlbGVtZW50XG5cbiAgICBhdHRyaWJ1dGVzID0gYXNzaWduKHtcbiAgICAgIC8vIE5lY2Vzc2FyeSBzaW5jZSB0aGUgZGVmYXVsdCBidXR0b24gdHlwZSBpcyBcInN1Ym1pdFwiXG4gICAgICB0eXBlOiAnYnV0dG9uJ1xuICAgIH0sIGF0dHJpYnV0ZXMpO1xuICAgIHZhciBlbCA9IENvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCB0YWcsIHByb3BzLCBhdHRyaWJ1dGVzKTtcbiAgICB0aGlzLmNyZWF0ZUNvbnRyb2xUZXh0RWwoZWwpO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgY2hpbGQgYENvbXBvbmVudGAgaW5zaWRlIG9mIHRoaXMgYEJ1dHRvbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfENvbXBvbmVudH0gY2hpbGRcbiAgICogICAgICAgIFRoZSBuYW1lIG9yIGluc3RhbmNlIG9mIGEgY2hpbGQgdG8gYWRkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIG9wdGlvbnMgdGhhdCB3aWxsIGdldCBwYXNzZWQgdG8gY2hpbGRyZW4gb2ZcbiAgICogICAgICAgIHRoZSBjaGlsZC5cbiAgICpcbiAgICogQHJldHVybiB7Q29tcG9uZW50fVxuICAgKiAgICAgICAgIFRoZSBgQ29tcG9uZW50YCB0aGF0IGdldHMgYWRkZWQgYXMgYSBjaGlsZC4gV2hlbiB1c2luZyBhIHN0cmluZyB0aGVcbiAgICogICAgICAgICBgQ29tcG9uZW50YCB3aWxsIGdldCBjcmVhdGVkIGJ5IHRoaXMgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFkZENoaWxkID0gZnVuY3Rpb24gYWRkQ2hpbGQoY2hpbGQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICBsb2cud2FybihcIkFkZGluZyBhbiBhY3Rpb25hYmxlICh1c2VyIGNvbnRyb2xsYWJsZSkgY2hpbGQgdG8gYSBCdXR0b24gKFwiICsgY2xhc3NOYW1lICsgXCIpIGlzIG5vdCBzdXBwb3J0ZWQ7IHVzZSBhIENsaWNrYWJsZUNvbXBvbmVudCBpbnN0ZWFkLlwiKTsgLy8gQXZvaWQgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGJ5IENsaWNrYWJsZUNvbXBvbmVudCdzIGFkZENoaWxkIG1ldGhvZFxuXG4gICAgcmV0dXJuIENvbXBvbmVudC5wcm90b3R5cGUuYWRkQ2hpbGQuY2FsbCh0aGlzLCBjaGlsZCwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgYEJ1dHRvbmAgZWxlbWVudCBzbyB0aGF0IGl0IGNhbiBiZSBhY3RpdmF0ZWQgb3IgY2xpY2tlZC4gVXNlIHRoaXMgd2l0aFxuICAgKiB7QGxpbmsgQnV0dG9uI2Rpc2FibGV9LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgX0NsaWNrYWJsZUNvbXBvbmVudC5wcm90b3R5cGUuZW5hYmxlLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmVsXy5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gIH1cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGBCdXR0b25gIGVsZW1lbnQgc28gdGhhdCBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkIG9yIGNsaWNrZWQuIFVzZSB0aGlzIHdpdGhcbiAgICoge0BsaW5rIEJ1dHRvbiNlbmFibGV9LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kaXNhYmxlID0gZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBfQ2xpY2thYmxlQ29tcG9uZW50LnByb3RvdHlwZS5kaXNhYmxlLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhIGBCdXR0b25gIGhhcyBmb2N1cyBhbmQgYGtleWRvd25gIGlzIHRyaWdnZXJlZCB2aWEgYSBrZXlcbiAgICogcHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBnZXQgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBrZXlkb3duXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gSWdub3JlIFNwYWNlIG9yIEVudGVyIGtleSBvcGVyYXRpb24sIHdoaWNoIGlzIGhhbmRsZWQgYnkgdGhlIGJyb3dzZXIgZm9yXG4gICAgLy8gYSBidXR0b24gLSB0aG91Z2ggbm90IGZvciBpdHMgc3VwZXIgY2xhc3MsIENsaWNrYWJsZUNvbXBvbmVudC4gQWxzbyxcbiAgICAvLyBwcmV2ZW50IHRoZSBldmVudCBmcm9tIHByb3BhZ2F0aW5nIHRocm91Z2ggdGhlIERPTSBhbmQgdHJpZ2dlcmluZyBQbGF5ZXJcbiAgICAvLyBob3RrZXlzLiBXZSBkbyBub3QgcHJldmVudERlZmF1bHQgaGVyZSBiZWNhdXNlIHdlIF93YW50XyB0aGUgYnJvd3NlciB0b1xuICAgIC8vIGhhbmRsZSBpdC5cbiAgICBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnU3BhY2UnKSB8fCBrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFbnRlcicpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFBhc3Mga2V5cHJlc3MgaGFuZGxpbmcgdXAgZm9yIHVuc3VwcG9ydGVkIGtleXNcblxuXG4gICAgX0NsaWNrYWJsZUNvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgfTtcblxuICByZXR1cm4gQnV0dG9uO1xufShDbGlja2FibGVDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0J1dHRvbicsIEJ1dHRvbik7XG5cbi8qKlxuICogVGhlIGluaXRpYWwgcGxheSBidXR0b24gdGhhdCBzaG93cyBiZWZvcmUgdGhlIHZpZGVvIGhhcyBwbGF5ZWQuIFRoZSBoaWRpbmcgb2YgdGhlXG4gKiBgQmlnUGxheUJ1dHRvbmAgZ2V0IGRvbmUgdmlhIENTUyBhbmQgYFBsYXllcmAgc3RhdGVzLlxuICpcbiAqIEBleHRlbmRzIEJ1dHRvblxuICovXG5cbnZhciBCaWdQbGF5QnV0dG9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKEJpZ1BsYXlCdXR0b24sIF9CdXR0b24pO1xuXG4gIGZ1bmN0aW9uIEJpZ1BsYXlCdXR0b24ocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLm1vdXNldXNlZF8gPSBmYWxzZTtcblxuICAgIF90aGlzLm9uKCdtb3VzZWRvd24nLCBfdGhpcy5oYW5kbGVNb3VzZURvd24pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuIEFsd2F5cyByZXR1cm5zICd2anMtYmlnLXBsYXktYnV0dG9uJy5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQmlnUGxheUJ1dHRvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiAndmpzLWJpZy1wbGF5LWJ1dHRvbic7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhIGBCaWdQbGF5QnV0dG9uYCBcImNsaWNrZWRcIi4gU2VlIHtAbGluayBDbGlja2FibGVDb21wb25lbnR9XG4gICAqIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgYSBjbGljayBjYW4gYmUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGtleWRvd25gLCBgdGFwYCwgb3IgYGNsaWNrYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICAqICAgICAgICBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRhcFxuICAgKiBAbGlzdGVucyBjbGlja1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgdmFyIHBsYXlQcm9taXNlID0gdGhpcy5wbGF5ZXJfLnBsYXkoKTsgLy8gZXhpdCBlYXJseSBpZiBjbGlja2VkIHZpYSB0aGUgbW91c2VcblxuICAgIGlmICh0aGlzLm1vdXNldXNlZF8gJiYgZXZlbnQuY2xpZW50WCAmJiBldmVudC5jbGllbnRZKSB7XG4gICAgICBzaWxlbmNlUHJvbWlzZShwbGF5UHJvbWlzZSk7XG5cbiAgICAgIGlmICh0aGlzLnBsYXllcl8udGVjaCh0cnVlKSkge1xuICAgICAgICB0aGlzLnBsYXllcl8udGVjaCh0cnVlKS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNiID0gdGhpcy5wbGF5ZXJfLmdldENoaWxkKCdjb250cm9sQmFyJyk7XG4gICAgdmFyIHBsYXlUb2dnbGUgPSBjYiAmJiBjYi5nZXRDaGlsZCgncGxheVRvZ2dsZScpO1xuXG4gICAgaWYgKCFwbGF5VG9nZ2xlKSB7XG4gICAgICB0aGlzLnBsYXllcl8udGVjaCh0cnVlKS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwbGF5Rm9jdXMgPSBmdW5jdGlvbiBwbGF5Rm9jdXMoKSB7XG4gICAgICByZXR1cm4gcGxheVRvZ2dsZS5mb2N1cygpO1xuICAgIH07XG5cbiAgICBpZiAoaXNQcm9taXNlKHBsYXlQcm9taXNlKSkge1xuICAgICAgcGxheVByb21pc2UudGhlbihwbGF5Rm9jdXMsIGZ1bmN0aW9uICgpIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUaW1lb3V0KHBsYXlGb2N1cywgMSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIHRoaXMubW91c2V1c2VkXyA9IGZhbHNlO1xuXG4gICAgX0J1dHRvbi5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZXVzZWRfID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gQmlnUGxheUJ1dHRvbjtcbn0oQnV0dG9uKTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBzaG91bGQgZGlzcGxheSBvdmVyIHRoZSBgQmlnUGxheUJ1dHRvbmBzIGNvbnRyb2xzLiBBZGRlZCB0byBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuQmlnUGxheUJ1dHRvbi5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ1BsYXkgVmlkZW8nO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdCaWdQbGF5QnV0dG9uJywgQmlnUGxheUJ1dHRvbik7XG5cbi8qKlxuICogVGhlIGBDbG9zZUJ1dHRvbmAgaXMgYSBge0BsaW5rIEJ1dHRvbn1gIHRoYXQgZmlyZXMgYSBgY2xvc2VgIGV2ZW50IHdoZW5cbiAqIGl0IGdldHMgY2xpY2tlZC5cbiAqXG4gKiBAZXh0ZW5kcyBCdXR0b25cbiAqL1xuXG52YXIgQ2xvc2VCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9CdXR0b24pIHtcbiAgX2luaGVyaXRzTG9vc2UoQ2xvc2VCdXR0b24sIF9CdXR0b24pO1xuXG4gIC8qKlxuICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRoaXMgY2xhc3MuXG4gICpcbiAgKiBAcGFyYW0gIHtQbGF5ZXJ9IHBsYXllclxuICAqICAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICpcbiAgKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zXVxuICAqICAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgKi9cbiAgZnVuY3Rpb24gQ2xvc2VCdXR0b24ocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuY29udHJvbFRleHQob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRyb2xUZXh0IHx8IF90aGlzLmxvY2FsaXplKCdDbG9zZScpKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAqXG4gICogQHJldHVybiB7c3RyaW5nfVxuICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICovXG5cblxuICB2YXIgX3Byb3RvID0gQ2xvc2VCdXR0b24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtY2xvc2UtYnV0dG9uIFwiICsgX0J1dHRvbi5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gYSBgQ2xvc2VCdXR0b25gIGdldHMgY2xpY2tlZC4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnQjaGFuZGxlQ2xpY2t9IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHdoZW5cbiAgICogdGhpcyB3aWxsIGJlIHRyaWdnZXJlZFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICogQGZpcmVzIENsb3NlQnV0dG9uI2Nsb3NlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiB0aGUgYSBgQ2xvc2VCdXR0b25gIGlzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgQ2xvc2VCdXR0b24jY2xvc2VcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtidWJibGVzPWZhbHNlXVxuICAgICAqICAgICAgICAgICBzZXQgdG8gZmFsc2Ugc28gdGhhdCB0aGUgY2xvc2UgZXZlbnQgZG9lcyBub3RcbiAgICAgKiAgICAgICAgICAgYnViYmxlIHVwIHRvIHBhcmVudHMgaWYgdGhlcmUgaXMgbm8gbGlzdGVuZXJcbiAgICAgKi9cbiAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ2Nsb3NlJyxcbiAgICAgIGJ1YmJsZXM6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIGBDbG9zZUJ1dHRvbmAgcmVjZWl2ZXMgYVxuICAgKiBga2V5ZG93bmAgZXZlbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBrZXkgaXMgRXNjLCBpdCB3aWxsIHRyaWdnZXIgYSBgY2xpY2tgIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMga2V5ZG93blxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIC8vIEVzYyBidXR0b24gd2lsbCB0cmlnZ2VyIGBjbGlja2AgZXZlbnRcbiAgICBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRXNjJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMudHJpZ2dlcignY2xpY2snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFzcyBrZXlwcmVzcyBoYW5kbGluZyB1cCBmb3IgdW5zdXBwb3J0ZWQga2V5c1xuICAgICAgX0J1dHRvbi5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENsb3NlQnV0dG9uO1xufShCdXR0b24pO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0Nsb3NlQnV0dG9uJywgQ2xvc2VCdXR0b24pO1xuXG4vKipcbiAqIEJ1dHRvbiB0byB0b2dnbGUgYmV0d2VlbiBwbGF5IGFuZCBwYXVzZS5cbiAqXG4gKiBAZXh0ZW5kcyBCdXR0b25cbiAqL1xuXG52YXIgUGxheVRvZ2dsZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0J1dHRvbikge1xuICBfaW5oZXJpdHNMb29zZShQbGF5VG9nZ2xlLCBfQnV0dG9uKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFBsYXlUb2dnbGUocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0J1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpczsgLy8gc2hvdyBvciBoaWRlIHJlcGxheSBpY29uXG5cbiAgICBvcHRpb25zLnJlcGxheSA9IG9wdGlvbnMucmVwbGF5ID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5yZXBsYXk7XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICdwbGF5JywgX3RoaXMuaGFuZGxlUGxheSk7XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICdwYXVzZScsIF90aGlzLmhhbmRsZVBhdXNlKTtcblxuICAgIGlmIChvcHRpb25zLnJlcGxheSkge1xuICAgICAgX3RoaXMub24ocGxheWVyLCAnZW5kZWQnLCBfdGhpcy5oYW5kbGVFbmRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBsYXlUb2dnbGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtcGxheS1jb250cm9sIFwiICsgX0J1dHRvbi5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gYW4gYFBsYXlUb2dnbGVgIGlzIFwiY2xpY2tlZFwiLiBTZWVcbiAgICoge0BsaW5rIENsaWNrYWJsZUNvbXBvbmVudH0gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBhIGNsaWNrIGNhbiBiZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLnBsYXllcl8ucGF1c2VkKCkpIHtcbiAgICAgIHRoaXMucGxheWVyXy5wbGF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheWVyXy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBnZXRzIGNhbGxlZCBvbmNlIGFmdGVyIHRoZSB2aWRlbyBoYXMgZW5kZWQgYW5kIHRoZSB1c2VyIHNlZWtzIHNvIHRoYXRcbiAgICogd2UgY2FuIGNoYW5nZSB0aGUgcmVwbGF5IGJ1dHRvbiBiYWNrIHRvIGEgcGxheSBidXR0b24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3NlZWtlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVTZWVrZWQgPSBmdW5jdGlvbiBoYW5kbGVTZWVrZWQoZXZlbnQpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZW5kZWQnKTtcblxuICAgIGlmICh0aGlzLnBsYXllcl8ucGF1c2VkKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGF1c2UoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZVBsYXkoZXZlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWRkIHRoZSB2anMtcGxheWluZyBjbGFzcyB0byB0aGUgZWxlbWVudCBzbyBpdCBjYW4gY2hhbmdlIGFwcGVhcmFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3BsYXlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlUGxheSA9IGZ1bmN0aW9uIGhhbmRsZVBsYXkoZXZlbnQpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZW5kZWQnKTtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtcGF1c2VkJyk7XG4gICAgdGhpcy5hZGRDbGFzcygndmpzLXBsYXlpbmcnKTsgLy8gY2hhbmdlIHRoZSBidXR0b24gdGV4dCB0byBcIlBhdXNlXCJcblxuICAgIHRoaXMuY29udHJvbFRleHQoJ1BhdXNlJyk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCB0aGUgdmpzLXBhdXNlZCBjbGFzcyB0byB0aGUgZWxlbWVudCBzbyBpdCBjYW4gY2hhbmdlIGFwcGVhcmFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3BhdXNlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVBhdXNlID0gZnVuY3Rpb24gaGFuZGxlUGF1c2UoZXZlbnQpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtcGxheWluZycpO1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1wYXVzZWQnKTsgLy8gY2hhbmdlIHRoZSBidXR0b24gdGV4dCB0byBcIlBsYXlcIlxuXG4gICAgdGhpcy5jb250cm9sVGV4dCgnUGxheScpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgdGhlIHZqcy1lbmRlZCBjbGFzcyB0byB0aGUgZWxlbWVudCBzbyBpdCBjYW4gY2hhbmdlIGFwcGVhcmFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjZW5kZWRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRW5kZWQgPSBmdW5jdGlvbiBoYW5kbGVFbmRlZChldmVudCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1wbGF5aW5nJyk7XG4gICAgdGhpcy5hZGRDbGFzcygndmpzLWVuZGVkJyk7IC8vIGNoYW5nZSB0aGUgYnV0dG9uIHRleHQgdG8gXCJSZXBsYXlcIlxuXG4gICAgdGhpcy5jb250cm9sVGV4dCgnUmVwbGF5Jyk7IC8vIG9uIHRoZSBuZXh0IHNlZWsgcmVtb3ZlIHRoZSByZXBsYXkgYnV0dG9uXG5cbiAgICB0aGlzLm9uZSh0aGlzLnBsYXllcl8sICdzZWVrZWQnLCB0aGlzLmhhbmRsZVNlZWtlZCk7XG4gIH07XG5cbiAgcmV0dXJuIFBsYXlUb2dnbGU7XG59KEJ1dHRvbik7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYFBsYXlUb2dnbGVgcyBjb250cm9scy4gQWRkZWQgZm9yIGxvY2FsaXphdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cblBsYXlUb2dnbGUucHJvdG90eXBlLmNvbnRyb2xUZXh0XyA9ICdQbGF5JztcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUGxheVRvZ2dsZScsIFBsYXlUb2dnbGUpO1xuXG4vKipcbiAqIEBmaWxlIGZvcm1hdC10aW1lLmpzXG4gKiBAbW9kdWxlIGZvcm1hdC10aW1lXG4gKi9cblxuLyoqXG4gKiBGb3JtYXQgc2Vjb25kcyBhcyBhIHRpbWUgc3RyaW5nLCBIOk1NOlNTIG9yIE06U1MuIFN1cHBseWluZyBhIGd1aWRlIChpblxuICogc2Vjb25kcykgd2lsbCBmb3JjZSBhIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIHRvIGNvdmVyIHRoZSBsZW5ndGggb2YgdGhlXG4gKiBndWlkZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7bnVtYmVyfSBzZWNvbmRzXG4gKiAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIHRvIGJlIHR1cm5lZCBpbnRvIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtICB7bnVtYmVyfSBndWlkZVxuICogICAgICAgICBOdW1iZXIgKGluIHNlY29uZHMpIHRvIG1vZGVsIHRoZSBzdHJpbmcgYWZ0ZXJcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgIFRpbWUgZm9ybWF0dGVkIGFzIEg6TU06U1Mgb3IgTTpTU1xuICovXG52YXIgZGVmYXVsdEltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gZGVmYXVsdEltcGxlbWVudGF0aW9uKHNlY29uZHMsIGd1aWRlKSB7XG4gIHNlY29uZHMgPSBzZWNvbmRzIDwgMCA/IDAgOiBzZWNvbmRzO1xuICB2YXIgcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgdmFyIG0gPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCAlIDYwKTtcbiAgdmFyIGggPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcbiAgdmFyIGdtID0gTWF0aC5mbG9vcihndWlkZSAvIDYwICUgNjApO1xuICB2YXIgZ2ggPSBNYXRoLmZsb29yKGd1aWRlIC8gMzYwMCk7IC8vIGhhbmRsZSBpbnZhbGlkIHRpbWVzXG5cbiAgaWYgKGlzTmFOKHNlY29uZHMpIHx8IHNlY29uZHMgPT09IEluZmluaXR5KSB7XG4gICAgLy8gJy0nIGlzIGZhbHNlIGZvciBhbGwgcmVsYXRpb25hbCBvcGVyYXRvcnMgKGUuZy4gPCwgPj0pIHNvIHRoaXMgc2V0dGluZ1xuICAgIC8vIHdpbGwgYWRkIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmaWVsZHMgc3BlY2lmaWVkIGJ5IHRoZSBndWlkZVxuICAgIGggPSBtID0gcyA9ICctJztcbiAgfSAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHNob3cgaG91cnNcblxuXG4gIGggPSBoID4gMCB8fCBnaCA+IDAgPyBoICsgJzonIDogJyc7IC8vIElmIGhvdXJzIGFyZSBzaG93aW5nLCB3ZSBtYXkgbmVlZCB0byBhZGQgYSBsZWFkaW5nIHplcm8uXG4gIC8vIEFsd2F5cyBzaG93IGF0IGxlYXN0IG9uZSBkaWdpdCBvZiBtaW51dGVzLlxuXG4gIG0gPSAoKGggfHwgZ20gPj0gMTApICYmIG0gPCAxMCA/ICcwJyArIG0gOiBtKSArICc6JzsgLy8gQ2hlY2sgaWYgbGVhZGluZyB6ZXJvIGlzIG5lZWQgZm9yIHNlY29uZHNcblxuICBzID0gcyA8IDEwID8gJzAnICsgcyA6IHM7XG4gIHJldHVybiBoICsgbSArIHM7XG59OyAvLyBJbnRlcm5hbCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLlxuXG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbjtcbi8qKlxuICogUmVwbGFjZXMgdGhlIGRlZmF1bHQgZm9ybWF0VGltZSBpbXBsZW1lbnRhdGlvbiB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbUltcGxlbWVudGF0aW9uXG4gKiAgICAgICAgQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQgZm9ybWF0VGltZVxuICogICAgICAgIGltcGxlbWVudGF0aW9uLiBXaWxsIHJlY2VpdmUgdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIGFuZCB0aGVcbiAqICAgICAgICBndWlkZSAoaW4gc2Vjb25kcykgYXMgYXJndW1lbnRzLlxuICovXG5cbmZ1bmN0aW9uIHNldEZvcm1hdFRpbWUoY3VzdG9tSW1wbGVtZW50YXRpb24pIHtcbiAgaW1wbGVtZW50YXRpb24gPSBjdXN0b21JbXBsZW1lbnRhdGlvbjtcbn1cbi8qKlxuICogUmVzZXRzIGZvcm1hdFRpbWUgdG8gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKi9cblxuZnVuY3Rpb24gcmVzZXRGb3JtYXRUaW1lKCkge1xuICBpbXBsZW1lbnRhdGlvbiA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbjtcbn1cbi8qKlxuICogRGVsZWdhdGVzIHRvIGVpdGhlciB0aGUgZGVmYXVsdCB0aW1lIGZvcm1hdHRpbmcgZnVuY3Rpb24gb3IgYSBjdXN0b21cbiAqIGZ1bmN0aW9uIHN1cHBsaWVkIHZpYSBgc2V0Rm9ybWF0VGltZWAuXG4gKlxuICogRm9ybWF0cyBzZWNvbmRzIGFzIGEgdGltZSBzdHJpbmcgKEg6TU06U1Mgb3IgTTpTUykuIFN1cHBseWluZyBhXG4gKiBndWlkZSAoaW4gc2Vjb25kcykgd2lsbCBmb3JjZSBhIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIHRvIGNvdmVyIHRoZVxuICogbGVuZ3RoIG9mIHRoZSBndWlkZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZSAgZm9ybWF0VGltZSgxMjUsIDYwMCkgPT09IFwiMDI6MDVcIlxuICogQHBhcmFtICAgIHtudW1iZXJ9IHNlY29uZHNcbiAqICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyB0byBiZSB0dXJuZWQgaW50byBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSAgICB7bnVtYmVyfSBndWlkZVxuICogICAgICAgICAgIE51bWJlciAoaW4gc2Vjb25kcykgdG8gbW9kZWwgdGhlIHN0cmluZyBhZnRlclxuICpcbiAqIEByZXR1cm4gICB7c3RyaW5nfVxuICogICAgICAgICAgIFRpbWUgZm9ybWF0dGVkIGFzIEg6TU06U1Mgb3IgTTpTU1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWUoc2Vjb25kcywgZ3VpZGUpIHtcbiAgaWYgKGd1aWRlID09PSB2b2lkIDApIHtcbiAgICBndWlkZSA9IHNlY29uZHM7XG4gIH1cblxuICByZXR1cm4gaW1wbGVtZW50YXRpb24oc2Vjb25kcywgZ3VpZGUpO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIHRpbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpZGVvXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIFRpbWVEaXNwbGF5ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRpbWVEaXNwbGF5LCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFRpbWVEaXNwbGF5KHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcbiAgICBfdGhpcy50aHJvdHRsZWRVcGRhdGVDb250ZW50ID0gdGhyb3R0bGUoYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMudXBkYXRlQ29udGVudCksIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMKTtcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ3RpbWV1cGRhdGUnLCBfdGhpcy50aHJvdHRsZWRVcGRhdGVDb250ZW50KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgQ29tcG9uZW50YCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVGltZURpc3BsYXkucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsJDEoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuYnVpbGRDU1NDbGFzcygpO1xuXG4gICAgdmFyIGVsID0gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUgKyBcIiB2anMtdGltZS1jb250cm9sIHZqcy1jb250cm9sXCIsXG4gICAgICBpbm5lckhUTUw6IFwiPHNwYW4gY2xhc3M9XFxcInZqcy1jb250cm9sLXRleHRcXFwiIHJvbGU9XFxcInByZXNlbnRhdGlvblxcXCI+XCIgKyB0aGlzLmxvY2FsaXplKHRoaXMubGFiZWxUZXh0XykgKyBcIlxceEEwPC9zcGFuPlwiXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbnRlbnRFbF8gPSBjcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lICsgXCItZGlzcGxheVwiXG4gICAgfSwge1xuICAgICAgLy8gdGVsbCBzY3JlZW4gcmVhZGVycyBub3QgdG8gYXV0b21hdGljYWxseSByZWFkIHRoZSB0aW1lIGFzIGl0IGNoYW5nZXNcbiAgICAgICdhcmlhLWxpdmUnOiAnb2ZmJyxcbiAgICAgIC8vIHNwYW4gZWxlbWVudHMgaGF2ZSBubyBpbXBsaWNpdCByb2xlLCBidXQgc29tZSBzY3JlZW4gcmVhZGVycyAobm90YWJseSBWb2ljZU92ZXIpXG4gICAgICAvLyB0cmVhdCB0aGVtIGFzIGEgYnJlYWsgYmV0d2VlbiBpdGVtcyBpbiB0aGUgRE9NIHdoZW4gdXNpbmcgYXJyb3cga2V5c1xuICAgICAgLy8gKG9yIGxlZnQtdG8tcmlnaHQgc3dpcGVzIG9uIGlPUykgdG8gcmVhZCBjb250ZW50cyBvZiBhIHBhZ2UuIFVzaW5nXG4gICAgICAvLyByb2xlPSdwcmVzZW50YXRpb24nIGNhdXNlcyBWb2ljZU92ZXIgdG8gTk9UIHRyZWF0IHRoaXMgc3BhbiBhcyBhIGJyZWFrLlxuICAgICAgJ3JvbGUnOiAncHJlc2VudGF0aW9uJ1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVGV4dE5vZGVfKCk7XG4gICAgZWwuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxfKTtcbiAgICByZXR1cm4gZWw7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMuY29udGVudEVsXyA9IG51bGw7XG4gICAgdGhpcy50ZXh0Tm9kZV8gPSBudWxsO1xuXG4gICAgX0NvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBcInJlbWFpbmluZyB0aW1lXCIgdGV4dCBub2RlIHdpdGggbmV3IGNvbnRlbnQgdXNpbmcgdGhlXG4gICAqIGNvbnRlbnRzIG9mIHRoZSBgZm9ybWF0dGVkVGltZV9gIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVUZXh0Tm9kZV8gPSBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZV8oKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRFbF8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5jb250ZW50RWxfLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuY29udGVudEVsXy5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnRFbF8uZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0Tm9kZV8gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmZvcm1hdHRlZFRpbWVfIHx8IHRoaXMuZm9ybWF0VGltZV8oMCkpO1xuICAgIHRoaXMuY29udGVudEVsXy5hcHBlbmRDaGlsZCh0aGlzLnRleHROb2RlXyk7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGZvcm1hdHRlZCB0aW1lIGZvciB0aGlzIGNvbXBvbmVudCB0byB1c2UgaW4gZGlzcGxheS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSB0aW1lXG4gICAqICAgICAgICAgQSBudW1lcmljIHRpbWUsIGluIHNlY29uZHMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBBIGZvcm1hdHRlZCB0aW1lXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvcm1hdFRpbWVfID0gZnVuY3Rpb24gZm9ybWF0VGltZV8odGltZSkge1xuICAgIHJldHVybiBmb3JtYXRUaW1lKHRpbWUpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aW1lIGRpc3BsYXkgdGV4dCBub2RlIGlmIGl0IGhhcyB3aGF0IHdhcyBwYXNzZWQgaW4gY2hhbmdlZFxuICAgKiB0aGUgZm9ybWF0dGVkIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lXG4gICAqICAgICAgICBUaGUgdGltZSB0byB1cGRhdGUgdG9cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlRm9ybWF0dGVkVGltZV8gPSBmdW5jdGlvbiB1cGRhdGVGb3JtYXR0ZWRUaW1lXyh0aW1lKSB7XG4gICAgdmFyIGZvcm1hdHRlZFRpbWUgPSB0aGlzLmZvcm1hdFRpbWVfKHRpbWUpO1xuXG4gICAgaWYgKGZvcm1hdHRlZFRpbWUgPT09IHRoaXMuZm9ybWF0dGVkVGltZV8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZFRpbWVfID0gZm9ybWF0dGVkVGltZTtcbiAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVRleHROb2RlXyk7XG4gIH1cbiAgLyoqXG4gICAqIFRvIGJlIGZpbGxlZCBvdXQgaW4gdGhlIGNoaWxkIGNsYXNzLCBzaG91bGQgdXBkYXRlIHRoZSBkaXNwbGF5ZWQgdGltZVxuICAgKiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgY3VycmVudCB0aW1lIGhhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHRpbWV1cGRhdGVgICBldmVudCB0aGF0IGNhdXNlZCB0aGlzIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3RpbWV1cGRhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlQ29udGVudCA9IGZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnQoZXZlbnQpIHt9O1xuXG4gIHJldHVybiBUaW1lRGlzcGxheTtcbn0oQ29tcG9uZW50KTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBpcyBhZGRlZCB0byB0aGUgYFRpbWVEaXNwbGF5YCBmb3Igc2NyZWVuIHJlYWRlciB1c2Vycy5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cblRpbWVEaXNwbGF5LnByb3RvdHlwZS5sYWJlbFRleHRfID0gJ1RpbWUnO1xuLyoqXG4gKiBUaGUgdGV4dCB0aGF0IHNob3VsZCBkaXNwbGF5IG92ZXIgdGhlIGBUaW1lRGlzcGxheWBzIGNvbnRyb2xzLiBBZGRlZCB0byBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBkZXByZWNhdGVkIGluIHY3OyBjb250cm9sVGV4dF8gaXMgbm90IHVzZWQgaW4gbm9uLWFjdGl2ZSBkaXNwbGF5IENvbXBvbmVudHNcbiAqL1xuXG5UaW1lRGlzcGxheS5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ1RpbWUnO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdUaW1lRGlzcGxheScsIFRpbWVEaXNwbGF5KTtcblxuLyoqXG4gKiBEaXNwbGF5cyB0aGUgY3VycmVudCB0aW1lXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIEN1cnJlbnRUaW1lRGlzcGxheSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RpbWVEaXNwbGF5KSB7XG4gIF9pbmhlcml0c0xvb3NlKEN1cnJlbnRUaW1lRGlzcGxheSwgX1RpbWVEaXNwbGF5KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIEN1cnJlbnRUaW1lRGlzcGxheShwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9UaW1lRGlzcGxheS5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ2VuZGVkJywgX3RoaXMuaGFuZGxlRW5kZWQpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEN1cnJlbnRUaW1lRGlzcGxheS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiAndmpzLWN1cnJlbnQtdGltZSc7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBjdXJyZW50IHRpbWUgZGlzcGxheVxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHRpbWV1cGRhdGVgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjdGltZXVwZGF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVDb250ZW50ID0gZnVuY3Rpb24gdXBkYXRlQ29udGVudChldmVudCkge1xuICAgIC8vIEFsbG93cyBmb3Igc21vb3RoIHNjcnViYmluZywgd2hlbiBwbGF5ZXIgY2FuJ3Qga2VlcCB1cC5cbiAgICB2YXIgdGltZSA9IHRoaXMucGxheWVyXy5zY3J1YmJpbmcoKSA/IHRoaXMucGxheWVyXy5nZXRDYWNoZSgpLmN1cnJlbnRUaW1lIDogdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0ZWRUaW1lXyh0aW1lKTtcbiAgfVxuICAvKipcbiAgICogV2hlbiB0aGUgcGxheWVyIGZpcmVzIGVuZGVkIHRoZXJlIHNob3VsZCBiZSBubyB0aW1lIGxlZnQuIFNhZGx5XG4gICAqIHRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZSwgbGV0cyBtYWtlIGl0IHNlZW0gbGlrZSB0aGF0IGlzIHRoZSBjYXNlXG4gICAqIGZvciB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBlbmRlZGAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNlbmRlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFbmRlZCA9IGZ1bmN0aW9uIGhhbmRsZUVuZGVkKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnBsYXllcl8uZHVyYXRpb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8odGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkpO1xuICB9O1xuXG4gIHJldHVybiBDdXJyZW50VGltZURpc3BsYXk7XG59KFRpbWVEaXNwbGF5KTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBpcyBhZGRlZCB0byB0aGUgYEN1cnJlbnRUaW1lRGlzcGxheWAgZm9yIHNjcmVlbiByZWFkZXIgdXNlcnMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5DdXJyZW50VGltZURpc3BsYXkucHJvdG90eXBlLmxhYmVsVGV4dF8gPSAnQ3VycmVudCBUaW1lJztcbi8qKlxuICogVGhlIHRleHQgdGhhdCBzaG91bGQgZGlzcGxheSBvdmVyIHRoZSBgQ3VycmVudFRpbWVEaXNwbGF5YHMgY29udHJvbHMuIEFkZGVkIHRvIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKlxuICogQGRlcHJlY2F0ZWQgaW4gdjc7IGNvbnRyb2xUZXh0XyBpcyBub3QgdXNlZCBpbiBub24tYWN0aXZlIGRpc3BsYXkgQ29tcG9uZW50c1xuICovXG5cbkN1cnJlbnRUaW1lRGlzcGxheS5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ0N1cnJlbnQgVGltZSc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0N1cnJlbnRUaW1lRGlzcGxheScsIEN1cnJlbnRUaW1lRGlzcGxheSk7XG5cbi8qKlxuICogRGlzcGxheXMgdGhlIGR1cmF0aW9uXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIER1cmF0aW9uRGlzcGxheSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RpbWVEaXNwbGF5KSB7XG4gIF9pbmhlcml0c0xvb3NlKER1cmF0aW9uRGlzcGxheSwgX1RpbWVEaXNwbGF5KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIER1cmF0aW9uRGlzcGxheShwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9UaW1lRGlzcGxheS5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpczsgLy8gd2UgZG8gbm90IHdhbnQgdG8vbmVlZCB0byB0aHJvdHRsZSBkdXJhdGlvbiBjaGFuZ2VzLFxuICAgIC8vIGFzIHRoZXkgc2hvdWxkIGFsd2F5cyBkaXNwbGF5IHRoZSBjaGFuZ2VkIGR1cmF0aW9uIGFzXG4gICAgLy8gaXQgaGFzIGNoYW5nZWRcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ2R1cmF0aW9uY2hhbmdlJywgX3RoaXMudXBkYXRlQ29udGVudCk7IC8vIExpc3RlbiB0byBsb2Fkc3RhcnQgYmVjYXVzZSB0aGUgcGxheWVyIGR1cmF0aW9uIGlzIHJlc2V0IHdoZW4gYSBuZXcgbWVkaWEgZWxlbWVudCBpcyBsb2FkZWQsXG4gICAgLy8gYnV0IHRoZSBkdXJhdGlvbmNoYW5nZSBvbiB0aGUgdXNlciBhZ2VudCB3aWxsIG5vdCBmaXJlLlxuICAgIC8vIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3ZpZGVvLmh0bWwjbWVkaWEtZWxlbWVudC1sb2FkLWFsZ29yaXRobX1cblxuXG4gICAgX3RoaXMub24ocGxheWVyLCAnbG9hZHN0YXJ0JywgX3RoaXMudXBkYXRlQ29udGVudCk7IC8vIEFsc28gbGlzdGVuIGZvciB0aW1ldXBkYXRlIChpbiB0aGUgcGFyZW50KSBhbmQgbG9hZGVkbWV0YWRhdGEgYmVjYXVzZSByZW1vdmluZyB0aG9zZVxuICAgIC8vIGxpc3RlbmVycyBjb3VsZCBoYXZlIGJyb2tlbiBkZXBlbmRlbnQgYXBwbGljYXRpb25zL2xpYnJhcmllcy4gVGhlc2VcbiAgICAvLyBjYW4gbGlrZWx5IGJlIHJlbW92ZWQgZm9yIDcuMC5cblxuXG4gICAgX3RoaXMub24ocGxheWVyLCAnbG9hZGVkbWV0YWRhdGEnLCBfdGhpcy50aHJvdHRsZWRVcGRhdGVDb250ZW50KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBEdXJhdGlvbkRpc3BsYXkucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gJ3Zqcy1kdXJhdGlvbic7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBkdXJhdGlvbiB0aW1lIGRpc3BsYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBgZHVyYXRpb25jaGFuZ2VgLCBgdGltZXVwZGF0ZWAsIG9yIGBsb2FkZWRtZXRhZGF0YWAgZXZlbnQgdGhhdCBjYXVzZWRcbiAgICogICAgICAgIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjZHVyYXRpb25jaGFuZ2VcbiAgICogQGxpc3RlbnMgUGxheWVyI3RpbWV1cGRhdGVcbiAgICogQGxpc3RlbnMgUGxheWVyI2xvYWRlZG1ldGFkYXRhXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZUNvbnRlbnQgPSBmdW5jdGlvbiB1cGRhdGVDb250ZW50KGV2ZW50KSB7XG4gICAgdmFyIGR1cmF0aW9uID0gdGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5kdXJhdGlvbl8gIT09IGR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmR1cmF0aW9uXyA9IGR1cmF0aW9uO1xuICAgICAgdGhpcy51cGRhdGVGb3JtYXR0ZWRUaW1lXyhkdXJhdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBEdXJhdGlvbkRpc3BsYXk7XG59KFRpbWVEaXNwbGF5KTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBpcyBhZGRlZCB0byB0aGUgYER1cmF0aW9uRGlzcGxheWAgZm9yIHNjcmVlbiByZWFkZXIgdXNlcnMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5EdXJhdGlvbkRpc3BsYXkucHJvdG90eXBlLmxhYmVsVGV4dF8gPSAnRHVyYXRpb24nO1xuLyoqXG4gKiBUaGUgdGV4dCB0aGF0IHNob3VsZCBkaXNwbGF5IG92ZXIgdGhlIGBEdXJhdGlvbkRpc3BsYXlgcyBjb250cm9scy4gQWRkZWQgdG8gZm9yIGxvY2FsaXphdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqXG4gKiBAZGVwcmVjYXRlZCBpbiB2NzsgY29udHJvbFRleHRfIGlzIG5vdCB1c2VkIGluIG5vbi1hY3RpdmUgZGlzcGxheSBDb21wb25lbnRzXG4gKi9cblxuRHVyYXRpb25EaXNwbGF5LnByb3RvdHlwZS5jb250cm9sVGV4dF8gPSAnRHVyYXRpb24nO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdEdXJhdGlvbkRpc3BsYXknLCBEdXJhdGlvbkRpc3BsYXkpO1xuXG4vKipcbiAqIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgY3VycmVudCB0aW1lIGFuZCBkdXJhdGlvbi5cbiAqIENhbiBiZSBoaWRkZW4gaWYgaXQncyBub3QgbmVlZGVkIGluIHRoZSBkZXNpZ24uXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIFRpbWVEaXZpZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRpbWVEaXZpZGVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUaW1lRGl2aWRlcigpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVGltZURpdmlkZXIucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGNvbXBvbmVudCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtdGltZS1jb250cm9sIHZqcy10aW1lLWRpdmlkZXInLFxuICAgICAgaW5uZXJIVE1MOiAnPGRpdj48c3Bhbj4vPC9zcGFuPjwvZGl2PidcbiAgICB9LCB7XG4gICAgICAvLyB0aGlzIGVsZW1lbnQgYW5kIGl0cyBjb250ZW50cyBjYW4gYmUgaGlkZGVuIGZyb20gYXNzaXN0aXZlIHRlY2hzIHNpbmNlXG4gICAgICAvLyBpdCBpcyBtYWRlIGV4dHJhbmVvdXMgYnkgdGhlIGFubm91bmNlbWVudCBvZiB0aGUgY29udHJvbCB0ZXh0XG4gICAgICAvLyBmb3IgdGhlIGN1cnJlbnQgdGltZSBhbmQgZHVyYXRpb24gZGlzcGxheXNcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVGltZURpdmlkZXI7XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnVGltZURpdmlkZXInLCBUaW1lRGl2aWRlcik7XG5cbi8qKlxuICogRGlzcGxheXMgdGhlIHRpbWUgbGVmdCBpbiB0aGUgdmlkZW9cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgUmVtYWluaW5nVGltZURpc3BsYXkgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UaW1lRGlzcGxheSkge1xuICBfaW5oZXJpdHNMb29zZShSZW1haW5pbmdUaW1lRGlzcGxheSwgX1RpbWVEaXNwbGF5KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFJlbWFpbmluZ1RpbWVEaXNwbGF5KHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1RpbWVEaXNwbGF5LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMub24ocGxheWVyLCAnZHVyYXRpb25jaGFuZ2UnLCBfdGhpcy50aHJvdHRsZWRVcGRhdGVDb250ZW50KTtcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ2VuZGVkJywgX3RoaXMuaGFuZGxlRW5kZWQpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlbWFpbmluZ1RpbWVEaXNwbGF5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGRDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuICd2anMtcmVtYWluaW5nLXRpbWUnO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnQgd2l0aCB0aGUgXCJtaW51c1wiIGNoYXJhY3RlZCBwcmVwZW5kIHRvIHRoZSB0aW1lXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCQxKCkge1xuICAgIHZhciBlbCA9IF9UaW1lRGlzcGxheS5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzKTtcblxuICAgIGVsLmluc2VydEJlZm9yZShjcmVhdGVFbCgnc3BhbicsIHt9LCB7XG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgfSwgJy0nKSwgdGhpcy5jb250ZW50RWxfKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSByZW1haW5pbmcgdGltZSBkaXNwbGF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHRpbWV1cGRhdGVgIG9yIGBkdXJhdGlvbmNoYW5nZWAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciN0aW1ldXBkYXRlXG4gICAqIEBsaXN0ZW5zIFBsYXllciNkdXJhdGlvbmNoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVDb250ZW50ID0gZnVuY3Rpb24gdXBkYXRlQ29udGVudChldmVudCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBAZGVwcmVjYXRlZCBXZSBzaG91bGQgb25seSB1c2UgcmVtYWluaW5nVGltZURpc3BsYXlcbiAgICAvLyBhcyBvZiB2aWRlby5qcyA3XG5cblxuICAgIGlmICh0aGlzLnBsYXllcl8ucmVtYWluaW5nVGltZURpc3BsYXkpIHtcbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8odGhpcy5wbGF5ZXJfLnJlbWFpbmluZ1RpbWVEaXNwbGF5KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRlZFRpbWVfKHRoaXMucGxheWVyXy5yZW1haW5pbmdUaW1lKCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogV2hlbiB0aGUgcGxheWVyIGZpcmVzIGVuZGVkIHRoZXJlIHNob3VsZCBiZSBubyB0aW1lIGxlZnQuIFNhZGx5XG4gICAqIHRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZSwgbGV0cyBtYWtlIGl0IHNlZW0gbGlrZSB0aGF0IGlzIHRoZSBjYXNlXG4gICAqIGZvciB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBlbmRlZGAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNlbmRlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFbmRlZCA9IGZ1bmN0aW9uIGhhbmRsZUVuZGVkKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnBsYXllcl8uZHVyYXRpb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZV8oMCk7XG4gIH07XG5cbiAgcmV0dXJuIFJlbWFpbmluZ1RpbWVEaXNwbGF5O1xufShUaW1lRGlzcGxheSk7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgaXMgYWRkZWQgdG8gdGhlIGBSZW1haW5pbmdUaW1lRGlzcGxheWAgZm9yIHNjcmVlbiByZWFkZXIgdXNlcnMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5SZW1haW5pbmdUaW1lRGlzcGxheS5wcm90b3R5cGUubGFiZWxUZXh0XyA9ICdSZW1haW5pbmcgVGltZSc7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYFJlbWFpbmluZ1RpbWVEaXNwbGF5YHMgY29udHJvbHMuIEFkZGVkIHRvIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKlxuICogQGRlcHJlY2F0ZWQgaW4gdjc7IGNvbnRyb2xUZXh0XyBpcyBub3QgdXNlZCBpbiBub24tYWN0aXZlIGRpc3BsYXkgQ29tcG9uZW50c1xuICovXG5cblJlbWFpbmluZ1RpbWVEaXNwbGF5LnByb3RvdHlwZS5jb250cm9sVGV4dF8gPSAnUmVtYWluaW5nIFRpbWUnO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdSZW1haW5pbmdUaW1lRGlzcGxheScsIFJlbWFpbmluZ1RpbWVEaXNwbGF5KTtcblxuLyoqXG4gKiBEaXNwbGF5cyB0aGUgbGl2ZSBpbmRpY2F0b3Igd2hlbiBkdXJhdGlvbiBpcyBJbmZpbml0eS5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgTGl2ZURpc3BsYXkgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTGl2ZURpc3BsYXksIF9Db21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gTGl2ZURpc3BsYXkocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMudXBkYXRlU2hvd2luZygpO1xuXG4gICAgX3RoaXMub24oX3RoaXMucGxheWVyKCksICdkdXJhdGlvbmNoYW5nZScsIF90aGlzLnVwZGF0ZVNob3dpbmcpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBMaXZlRGlzcGxheS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwkMSgpIHtcbiAgICB2YXIgZWwgPSBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtbGl2ZS1jb250cm9sIHZqcy1jb250cm9sJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb250ZW50RWxfID0gY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1saXZlLWRpc3BsYXknLFxuICAgICAgaW5uZXJIVE1MOiBcIjxzcGFuIGNsYXNzPVxcXCJ2anMtY29udHJvbC10ZXh0XFxcIj5cIiArIHRoaXMubG9jYWxpemUoJ1N0cmVhbSBUeXBlJykgKyBcIlxceEEwPC9zcGFuPlwiICsgdGhpcy5sb2NhbGl6ZSgnTElWRScpXG4gICAgfSwge1xuICAgICAgJ2FyaWEtbGl2ZSc6ICdvZmYnXG4gICAgfSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxfKTtcbiAgICByZXR1cm4gZWw7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMuY29udGVudEVsXyA9IG51bGw7XG5cbiAgICBfQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBkdXJhdGlvbiB0byBzZWUgaWYgdGhlIExpdmVEaXNwbGF5IHNob3VsZCBiZSBzaG93aW5nIG9yIG5vdC4gVGhlbiBzaG93L2hpZGVcbiAgICogaXQgYWNjb3JkaW5nbHlcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIHtAbGluayBQbGF5ZXIjZHVyYXRpb25jaGFuZ2V9IGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjZHVyYXRpb25jaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlU2hvd2luZyA9IGZ1bmN0aW9uIHVwZGF0ZVNob3dpbmcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXIoKS5kdXJhdGlvbigpID09PSBJbmZpbml0eSkge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTGl2ZURpc3BsYXk7XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnTGl2ZURpc3BsYXknLCBMaXZlRGlzcGxheSk7XG5cbi8qKlxuICogRGlzcGxheXMgdGhlIGxpdmUgaW5kaWNhdG9yIHdoZW4gZHVyYXRpb24gaXMgSW5maW5pdHkuXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIFNlZWtUb0xpdmUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9CdXR0b24pIHtcbiAgX2luaGVyaXRzTG9vc2UoU2Vla1RvTGl2ZSwgX0J1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBTZWVrVG9MaXZlKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0J1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLnVwZGF0ZUxpdmVFZGdlU3RhdHVzKCk7XG5cbiAgICBpZiAoX3RoaXMucGxheWVyXy5saXZlVHJhY2tlcikge1xuICAgICAgX3RoaXMub24oX3RoaXMucGxheWVyXy5saXZlVHJhY2tlciwgJ2xpdmVlZGdlY2hhbmdlJywgX3RoaXMudXBkYXRlTGl2ZUVkZ2VTdGF0dXMpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgQ29tcG9uZW50YCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU2Vla1RvTGl2ZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwkMSgpIHtcbiAgICB2YXIgZWwgPSBfQnV0dG9uLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdidXR0b24nLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtc2Vlay10by1saXZlLWNvbnRyb2wgdmpzLWNvbnRyb2wnXG4gICAgfSk7XG5cbiAgICB0aGlzLnRleHRFbF8gPSBjcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1zZWVrLXRvLWxpdmUtdGV4dCcsXG4gICAgICBpbm5lckhUTUw6IHRoaXMubG9jYWxpemUoJ0xJVkUnKVxuICAgIH0sIHtcbiAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgIH0pO1xuICAgIGVsLmFwcGVuZENoaWxkKHRoaXMudGV4dEVsXyk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YXRlIG9mIHRoaXMgYnV0dG9uIGlmIHdlIGFyZSBhdCB0aGUgbGl2ZSBlZGdlXG4gICAqIG9yIG5vdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVMaXZlRWRnZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZUxpdmVFZGdlU3RhdHVzKGUpIHtcbiAgICAvLyBkZWZhdWx0IHRvIGxpdmUgZWRnZVxuICAgIGlmICghdGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyIHx8IHRoaXMucGxheWVyXy5saXZlVHJhY2tlci5hdExpdmVFZGdlKCkpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgdHJ1ZSk7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtYXQtbGl2ZS1lZGdlJyk7XG4gICAgICB0aGlzLmNvbnRyb2xUZXh0KCdTZWVrIHRvIGxpdmUsIGN1cnJlbnRseSBwbGF5aW5nIGxpdmUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtYXQtbGl2ZS1lZGdlJyk7XG4gICAgICB0aGlzLmNvbnRyb2xUZXh0KCdTZWVrIHRvIGxpdmUsIGN1cnJlbnRseSBiZWhpbmQgbGl2ZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gY2xpY2sgYnJpbmcgdXMgYXMgbmVhciB0byB0aGUgbGl2ZSBwb2ludCBhcyBwb3NzaWJsZS5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHdlIHdhaXQgZm9yIHRoZSBuZXh0IGBsaXZlLXNlZWthYmxlLWNoYW5nZWBcbiAgICogZXZlbnQgd2hpY2ggd2lsbCBoYXBwZW4gZXZlcnkgc2VnbWVudCBsZW5ndGggc2Vjb25kcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICB0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIuc2Vla1RvTGl2ZUVkZ2UoKTtcbiAgfVxuICAvKipcbiAgICogRGlzcG9zZSBvZiB0aGUgZWxlbWVudCBhbmQgc3RvcCB0cmFja2luZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyKSB7XG4gICAgICB0aGlzLm9mZih0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIsICdsaXZlZWRnZWNoYW5nZScsIHRoaXMudXBkYXRlTGl2ZUVkZ2VTdGF0dXMpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dEVsXyA9IG51bGw7XG5cbiAgICBfQnV0dG9uLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIFNlZWtUb0xpdmU7XG59KEJ1dHRvbik7XG5cblNlZWtUb0xpdmUucHJvdG90eXBlLmNvbnRyb2xUZXh0XyA9ICdTZWVrIHRvIGxpdmUsIGN1cnJlbnRseSBwbGF5aW5nIGxpdmUnO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdTZWVrVG9MaXZlJywgU2Vla1RvTGl2ZSk7XG5cbi8qKlxuICogVGhlIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgYSBzbGlkZXIuIENhbiBiZSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLlxuICogRm9yIGluc3RhbmNlIHRoZSB2b2x1bWUgYmFyIG9yIHRoZSBzZWVrIGJhciBvbiBhIHZpZGVvIGlzIGEgc2xpZGVyLlxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBTbGlkZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2xpZGVyLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzc1xuICAqXG4gICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgKi9cbiAgZnVuY3Rpb24gU2xpZGVyKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpczsgLy8gU2V0IHByb3BlcnR5IG5hbWVzIHRvIGJhciB0byBtYXRjaCB3aXRoIHRoZSBjaGlsZCBTbGlkZXIgY2xhc3MgaXMgbG9va2luZyBmb3JcblxuICAgIF90aGlzLmJhciA9IF90aGlzLmdldENoaWxkKF90aGlzLm9wdGlvbnNfLmJhck5hbWUpOyAvLyBTZXQgYSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNsYXNzIG9uIHRoZSBzbGlkZXIgZGVwZW5kaW5nIG9uIHRoZSBzbGlkZXIgdHlwZVxuXG4gICAgX3RoaXMudmVydGljYWwoISFfdGhpcy5vcHRpb25zXy52ZXJ0aWNhbCk7XG5cbiAgICBfdGhpcy5lbmFibGUoKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQXJlIGNvbnRyb2xzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBmb3IgdGhpcyBzbGlkZXIgb3Igbm90LlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIHRydWUgaWYgY29udHJvbHMgYXJlIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTbGlkZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5lbmFibGVkID0gZnVuY3Rpb24gZW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkXztcbiAgfVxuICAvKipcbiAgICogRW5hYmxlIGNvbnRyb2xzIGZvciB0aGlzIHNsaWRlciBpZiB0aGV5IGFyZSBkaXNhYmxlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVNb3VzZURvd24pO1xuICAgIHRoaXMub24oJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZU1vdXNlRG93bik7XG4gICAgdGhpcy5vbigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bik7XG4gICAgdGhpcy5vbignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrKTsgLy8gVE9ETzogZGVwcmVjYXRlZCwgY29udHJvbHN2aXNpYmxlIGRvZXMgbm90IHNlZW0gdG8gYmUgZmlyZWRcblxuICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLCAnY29udHJvbHN2aXNpYmxlJywgdGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHRoaXMucGxheWVyRXZlbnQpIHtcbiAgICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLCB0aGlzLnBsYXllckV2ZW50LCB0aGlzLnVwZGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgICB0aGlzLmVuYWJsZWRfID0gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogRGlzYWJsZSBjb250cm9scyBmb3IgdGhpcyBzbGlkZXIgaWYgdGhleSBhcmUgZW5hYmxlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kaXNhYmxlID0gZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRvYyA9IHRoaXMuYmFyLmVsXy5vd25lckRvY3VtZW50O1xuICAgIHRoaXMub2ZmKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZU1vdXNlRG93bik7XG4gICAgdGhpcy5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZU1vdXNlRG93bik7XG4gICAgdGhpcy5vZmYoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pO1xuICAgIHRoaXMub2ZmKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2spO1xuICAgIHRoaXMub2ZmKHRoaXMucGxheWVyXywgJ2NvbnRyb2xzdmlzaWJsZScsIHRoaXMudXBkYXRlKTtcbiAgICB0aGlzLm9mZihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7XG4gICAgdGhpcy5vZmYoZG9jLCAnbW91c2V1cCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gICAgdGhpcy5vZmYoZG9jLCAndG91Y2htb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMub2ZmKGRvYywgJ3RvdWNoZW5kJywgdGhpcy5oYW5kbGVNb3VzZVVwKTtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICB0aGlzLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuXG4gICAgaWYgKHRoaXMucGxheWVyRXZlbnQpIHtcbiAgICAgIHRoaXMub2ZmKHRoaXMucGxheWVyXywgdGhpcy5wbGF5ZXJFdmVudCwgdGhpcy51cGRhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuZW5hYmxlZF8gPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgU2xpZGVyYHMgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBUeXBlIG9mIGVsZW1lbnQgdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzPXt9XVxuICAgKiAgICAgICAgTGlzdCBvZiBwcm9wZXJ0aWVzIGluIE9iamVjdCBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2F0dHJpYnV0ZXM9e31dXG4gICAqICAgICAgICBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gT2JqZWN0IGZvcm0uXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCBnZXRzIGNyZWF0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwodHlwZSwgcHJvcHMsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgICAgcHJvcHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlcyA9PT0gdm9pZCAwKSB7XG4gICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBzbGlkZXIgZWxlbWVudCBjbGFzcyB0byBhbGwgc3ViIGNsYXNzZXNcbiAgICBwcm9wcy5jbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyAnIHZqcy1zbGlkZXInO1xuICAgIHByb3BzID0gYXNzaWduKHtcbiAgICAgIHRhYkluZGV4OiAwXG4gICAgfSwgcHJvcHMpO1xuICAgIGF0dHJpYnV0ZXMgPSBhc3NpZ24oe1xuICAgICAgJ3JvbGUnOiAnc2xpZGVyJyxcbiAgICAgICdhcmlhLXZhbHVlbm93JzogMCxcbiAgICAgICdhcmlhLXZhbHVlbWluJzogMCxcbiAgICAgICdhcmlhLXZhbHVlbWF4JzogMTAwLFxuICAgICAgJ3RhYkluZGV4JzogMFxuICAgIH0sIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsIHR5cGUsIHByb3BzLCBhdHRyaWJ1dGVzKTtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGBtb3VzZWRvd25gIG9yIGB0b3VjaHN0YXJ0YCBldmVudHMgb24gdGhlIGBTbGlkZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgYG1vdXNlZG93bmAgb3IgYHRvdWNoc3RhcnRgIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZnVuY3Rpb25cbiAgICpcbiAgICogQGxpc3RlbnMgbW91c2Vkb3duXG4gICAqIEBsaXN0ZW5zIHRvdWNoc3RhcnRcbiAgICogQGZpcmVzIFNsaWRlciNzbGlkZXJhY3RpdmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG4gICAgdmFyIGRvYyA9IHRoaXMuYmFyLmVsXy5vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gLy8gRG8gbm90IGNhbGwgcHJldmVudERlZmF1bHQoKSBvbiB0b3VjaHN0YXJ0IGluIENocm9tZVxuICAgIC8vIHRvIGF2b2lkIGNvbnNvbGUgd2FybmluZ3MuIFVzZSBhICd0b3VjaC1hY3Rpb246IG5vbmUnIHN0eWxlXG4gICAgLy8gaW5zdGVhZCB0byBwcmV2ZW50IHVuaW50ZW50ZWQgc2Nyb2xsaW5nLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYi91cGRhdGVzLzIwMTcvMDEvc2Nyb2xsaW5nLWludGVydmVudGlvblxuXG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoc3RhcnQnICYmICFJU19DSFJPTUUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgYmxvY2tUZXh0U2VsZWN0aW9uKCk7XG4gICAgdGhpcy5hZGRDbGFzcygndmpzLXNsaWRpbmcnKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiB0aGUgc2xpZGVyIGlzIGluIGFuIGFjdGl2ZSBzdGF0ZVxuICAgICAqXG4gICAgICogQGV2ZW50IFNsaWRlciNzbGlkZXJhY3RpdmVcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3NsaWRlcmFjdGl2ZScpO1xuICAgIHRoaXMub24oZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMub24oZG9jLCAnbW91c2V1cCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gICAgdGhpcy5vbihkb2MsICd0b3VjaG1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7XG4gICAgdGhpcy5vbihkb2MsICd0b3VjaGVuZCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gICAgdGhpcy5oYW5kbGVNb3VzZU1vdmUoZXZlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIGBtb3VzZW1vdmVgLCBgdG91Y2htb3ZlYCwgYW5kIGBtb3VzZWRvd25gIGV2ZW50cyBvbiB0aGlzIGBTbGlkZXJgLlxuICAgKiBUaGUgYG1vdXNlbW92ZWAgYW5kIGB0b3VjaG1vdmVgIGV2ZW50cyB3aWxsIG9ubHkgb25seSB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24gZHVyaW5nXG4gICAqIGBtb3VzZWRvd25gIGFuZCBgdG91Y2hzdGFydGAuIFRoaXMgaXMgZHVlIHRvIHtAbGluayBTbGlkZXIjaGFuZGxlTW91c2VEb3dufSBhbmRcbiAgICoge0BsaW5rIFNsaWRlciNoYW5kbGVNb3VzZVVwfS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIGBtb3VzZWRvd25gLCBgbW91c2Vtb3ZlYCwgYHRvdWNoc3RhcnRgLCBvciBgdG91Y2htb3ZlYCBldmVudCB0aGF0IHRyaWdnZXJlZFxuICAgKiAgICAgICAgdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZW1vdmVcbiAgICogQGxpc3RlbnMgdG91Y2htb3ZlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlTW92ZSA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCkge31cbiAgLyoqXG4gICAqIEhhbmRsZSBgbW91c2V1cGAgb3IgYHRvdWNoZW5kYCBldmVudHMgb24gdGhlIGBTbGlkZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgYG1vdXNldXBgIG9yIGB0b3VjaGVuZGAgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogQGxpc3RlbnMgdG91Y2hlbmRcbiAgICogQGxpc3RlbnMgbW91c2V1cFxuICAgKiBAZmlyZXMgU2xpZGVyI3NsaWRlcmluYWN0aXZlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlVXAgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmJhci5lbF8ub3duZXJEb2N1bWVudDtcbiAgICB1bmJsb2NrVGV4dFNlbGVjdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1zbGlkaW5nJyk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gdGhlIHNsaWRlciBpcyBubyBsb25nZXIgaW4gYW4gYWN0aXZlIHN0YXRlLlxuICAgICAqXG4gICAgICogQGV2ZW50IFNsaWRlciNzbGlkZXJpbmFjdGl2ZVxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKi9cblxuICAgIHRoaXMudHJpZ2dlcignc2xpZGVyaW5hY3RpdmUnKTtcbiAgICB0aGlzLm9mZihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7XG4gICAgdGhpcy5vZmYoZG9jLCAnbW91c2V1cCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gICAgdGhpcy5vZmYoZG9jLCAndG91Y2htb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMub2ZmKGRvYywgJ3RvdWNoZW5kJywgdGhpcy5oYW5kbGVNb3VzZVVwKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHByb2dyZXNzIGJhciBvZiB0aGUgYFNsaWRlcmAuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICAgVGhlIHBlcmNlbnRhZ2Ugb2YgcHJvZ3Jlc3MgdGhlIHByb2dyZXNzIGJhciByZXByZXNlbnRzIGFzIGFcbiAgICogICAgICAgICAgbnVtYmVyIGZyb20gMCB0byAxLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgLy8gSW4gVm9sdW1lQmFyIGluaXQgd2UgaGF2ZSBhIHNldFRpbWVvdXQgZm9yIHVwZGF0ZSB0aGF0IHBvcHMgYW5kIHVwZGF0ZVxuICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGV4ZWN1dGlvbiBzdGFjay4gVGhlIHBsYXllciBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZW5cbiAgICAvLyB1cGRhdGUgd2lsbCBjYXVzZSBhbiBlcnJvclxuICAgIGlmICghdGhpcy5lbF8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHNjcnViYmluZywgd2UgY291bGQgdXNlIGEgY2FjaGVkIHZhbHVlIHRvIG1ha2UgdGhlIGhhbmRsZSBrZWVwIHVwXG4gICAgLy8gd2l0aCB0aGUgdXNlcidzIG1vdXNlLiBPbiBIVE1MNSBicm93c2VycyBzY3J1YmJpbmcgaXMgcmVhbGx5IHNtb290aCwgYnV0XG4gICAgLy8gc29tZSBmbGFzaCBwbGF5ZXJzIGFyZSBzbG93LCBzbyB3ZSBtaWdodCB3YW50IHRvIHV0aWxpemUgdGhpcyBsYXRlci5cbiAgICAvLyB2YXIgcHJvZ3Jlc3MgPSAgKHRoaXMucGxheWVyXy5zY3J1YmJpbmcoKSkgPyB0aGlzLnBsYXllcl8uZ2V0Q2FjaGUoKS5jdXJyZW50VGltZSAvIHRoaXMucGxheWVyXy5kdXJhdGlvbigpIDogdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCkgLyB0aGlzLnBsYXllcl8uZHVyYXRpb24oKTtcblxuXG4gICAgdmFyIHByb2dyZXNzID0gdGhpcy5nZXRQZXJjZW50KCk7XG4gICAgdmFyIGJhciA9IHRoaXMuYmFyOyAvLyBJZiB0aGVyZSdzIG5vIGJhci4uLlxuXG4gICAgaWYgKCFiYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByb3RlY3QgYWdhaW5zdCBubyBkdXJhdGlvbiBhbmQgb3RoZXIgZGl2aXNpb24gaXNzdWVzXG5cblxuICAgIGlmICh0eXBlb2YgcHJvZ3Jlc3MgIT09ICdudW1iZXInIHx8IHByb2dyZXNzICE9PSBwcm9ncmVzcyB8fCBwcm9ncmVzcyA8IDAgfHwgcHJvZ3Jlc3MgPT09IEluZmluaXR5KSB7XG4gICAgICBwcm9ncmVzcyA9IDA7XG4gICAgfSAvLyBDb252ZXJ0IHRvIGEgcGVyY2VudGFnZSBmb3Igc2V0dGluZ1xuXG5cbiAgICB2YXIgcGVyY2VudGFnZSA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKSArICclJztcbiAgICB2YXIgc3R5bGUgPSBiYXIuZWwoKS5zdHlsZTsgLy8gU2V0IHRoZSBuZXcgYmFyIHdpZHRoIG9yIGhlaWdodFxuXG4gICAgdmFyIHNpemVLZXkgPSB0aGlzLnZlcnRpY2FsKCkgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBpZiAoc3R5bGVbc2l6ZUtleV0gIT09IHBlcmNlbnRhZ2UpIHtcbiAgICAgIHN0eWxlW3NpemVLZXldID0gcGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBkaXN0YW5jZSBmb3Igc2xpZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBydW4uXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgU2xpZGVyLlxuICAgKiAgICAgICAgIC0gcG9zaXRpb24ueCBmb3IgdmVydGljYWwgYFNsaWRlcmBzXG4gICAqICAgICAgICAgLSBwb3NpdGlvbi55IGZvciBob3Jpem9udGFsIGBTbGlkZXJgc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jYWxjdWxhdGVEaXN0YW5jZSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZURpc3RhbmNlKGV2ZW50KSB7XG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9pbnRlclBvc2l0aW9uKHRoaXMuZWxfLCBldmVudCk7XG5cbiAgICBpZiAodGhpcy52ZXJ0aWNhbCgpKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb24ueDtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGEgYGtleWRvd25gIGV2ZW50IG9uIHRoZSBgU2xpZGVyYC4gV2F0Y2hlcyBmb3IgbGVmdCwgcmlndGgsIHVwLCBhbmQgZG93blxuICAgKiBhcnJvdyBrZXlzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgc2xpZGVyIGhhcyBmb2N1cy4gU2VlXG4gICAqIHtAbGluayBTbGlkZXIjaGFuZGxlRm9jdXN9IGFuZCB7QGxpbmsgU2xpZGVyI2hhbmRsZUJsdXJ9LlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgdGhlIGBrZXlkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMga2V5ZG93blxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIC8vIExlZnQgYW5kIERvd24gQXJyb3dzXG4gICAgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ0xlZnQnKSB8fCBrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdEb3duJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc3RlcEJhY2soKTsgLy8gVXAgYW5kIFJpZ2h0IEFycm93c1xuICAgIH0gZWxzZSBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnUmlnaHQnKSB8fCBrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdVcCcpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnN0ZXBGb3J3YXJkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhc3Mga2V5ZG93biBoYW5kbGluZyB1cCBmb3IgdW5zdXBwb3J0ZWQga2V5c1xuICAgICAgX0NvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExpc3RlbmVyIGZvciBjbGljayBldmVudHMgb24gc2xpZGVyLCB1c2VkIHRvIHByZXZlbnQgY2xpY2tzXG4gICAqICAgZnJvbSBidWJibGluZyB1cCB0byBwYXJlbnQgZWxlbWVudHMgbGlrZSBidXR0b24gbWVudXMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuICAgKiAgICAgICAgRXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBvYmplY3QgdG8gcnVuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IGlmIHNsaWRlciBpcyBob3Jpem9udGFsIGZvciB2ZXJ0aWNhbFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtib29sXVxuICAgKiAgICAgICAgLSB0cnVlIGlmIHNsaWRlciBpcyB2ZXJ0aWNhbCxcbiAgICogICAgICAgIC0gZmFsc2UgaXMgaG9yaXpvbnRhbFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIC0gdHJ1ZSBpZiBzbGlkZXIgaXMgdmVydGljYWwsIGFuZCBnZXR0aW5nXG4gICAqICAgICAgICAgLSBmYWxzZSBpZiB0aGUgc2xpZGVyIGlzIGhvcml6b250YWwsIGFuZCBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnZlcnRpY2FsID0gZnVuY3Rpb24gdmVydGljYWwoYm9vbCkge1xuICAgIGlmIChib29sID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsXyB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnZlcnRpY2FsXyA9ICEhYm9vbDtcblxuICAgIGlmICh0aGlzLnZlcnRpY2FsXykge1xuICAgICAgdGhpcy5hZGRDbGFzcygndmpzLXNsaWRlci12ZXJ0aWNhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtc2xpZGVyLWhvcml6b250YWwnKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNsaWRlcjtcbn0oQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdTbGlkZXInLCBTbGlkZXIpO1xuXG4vKipcbiAqIFNob3dzIGxvYWRpbmcgcHJvZ3Jlc3NcbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgTG9hZFByb2dyZXNzQmFyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKExvYWRQcm9ncmVzc0JhciwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBMb2FkUHJvZ3Jlc3NCYXIocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLnBhcnRFbHNfID0gW107XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICdwcm9ncmVzcycsIF90aGlzLnVwZGF0ZSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYENvbXBvbmVudGAncyBET00gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBlbGVtZW50IHRoYXQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IExvYWRQcm9ncmVzc0Jhci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1sb2FkLXByb2dyZXNzJyxcbiAgICAgIGlubmVySFRNTDogXCI8c3BhbiBjbGFzcz1cXFwidmpzLWNvbnRyb2wtdGV4dFxcXCI+PHNwYW4+XCIgKyB0aGlzLmxvY2FsaXplKCdMb2FkZWQnKSArIFwiPC9zcGFuPjogPHNwYW4gY2xhc3M9XFxcInZqcy1jb250cm9sLXRleHQtbG9hZGVkLXBlcmNlbnRhZ2VcXFwiPjAlPC9zcGFuPjwvc3Bhbj5cIlxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICB0aGlzLnBhcnRFbHNfID0gbnVsbDtcblxuICAgIF9Db21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIHByb2dyZXNzIGJhclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHByb2dyZXNzYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3Byb2dyZXNzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShldmVudCkge1xuICAgIHZhciBsaXZlVHJhY2tlciA9IHRoaXMucGxheWVyXy5saXZlVHJhY2tlcjtcbiAgICB2YXIgYnVmZmVyZWQgPSB0aGlzLnBsYXllcl8uYnVmZmVyZWQoKTtcbiAgICB2YXIgZHVyYXRpb24gPSBsaXZlVHJhY2tlciAmJiBsaXZlVHJhY2tlci5pc0xpdmUoKSA/IGxpdmVUcmFja2VyLnNlZWthYmxlRW5kKCkgOiB0aGlzLnBsYXllcl8uZHVyYXRpb24oKTtcbiAgICB2YXIgYnVmZmVyZWRFbmQgPSB0aGlzLnBsYXllcl8uYnVmZmVyZWRFbmQoKTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnBhcnRFbHNfO1xuICAgIHZhciBjb250cm9sVGV4dFBlcmNlbnRhZ2UgPSB0aGlzLiQoJy52anMtY29udHJvbC10ZXh0LWxvYWRlZC1wZXJjZW50YWdlJyk7IC8vIGdldCB0aGUgcGVyY2VudCB3aWR0aCBvZiBhIHRpbWUgY29tcGFyZWQgdG8gdGhlIHRvdGFsIGVuZFxuXG4gICAgdmFyIHBlcmNlbnRpZnkgPSBmdW5jdGlvbiBwZXJjZW50aWZ5KHRpbWUsIGVuZCwgcm91bmRlZCkge1xuICAgICAgLy8gbm8gTmFOXG4gICAgICB2YXIgcGVyY2VudCA9IHRpbWUgLyBlbmQgfHwgMDtcbiAgICAgIHBlcmNlbnQgPSAocGVyY2VudCA+PSAxID8gMSA6IHBlcmNlbnQpICogMTAwO1xuXG4gICAgICBpZiAocm91bmRlZCkge1xuICAgICAgICBwZXJjZW50ID0gcGVyY2VudC50b0ZpeGVkKDIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVyY2VudCArICclJztcbiAgICB9OyAvLyB1cGRhdGUgdGhlIHdpZHRoIG9mIHRoZSBwcm9ncmVzcyBiYXJcblxuXG4gICAgdGhpcy5lbF8uc3R5bGUud2lkdGggPSBwZXJjZW50aWZ5KGJ1ZmZlcmVkRW5kLCBkdXJhdGlvbik7IC8vIHVwZGF0ZSB0aGUgY29udHJvbC10ZXh0XG5cbiAgICB0ZXh0Q29udGVudChjb250cm9sVGV4dFBlcmNlbnRhZ2UsIHBlcmNlbnRpZnkoYnVmZmVyZWRFbmQsIGR1cmF0aW9uLCB0cnVlKSk7IC8vIGFkZCBjaGlsZCBlbGVtZW50cyB0byByZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgYnVmZmVyZWQgdGltZSByYW5nZXNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdGFydCA9IGJ1ZmZlcmVkLnN0YXJ0KGkpO1xuICAgICAgdmFyIGVuZCA9IGJ1ZmZlcmVkLmVuZChpKTtcbiAgICAgIHZhciBwYXJ0ID0gY2hpbGRyZW5baV07XG5cbiAgICAgIGlmICghcGFydCkge1xuICAgICAgICBwYXJ0ID0gdGhpcy5lbF8uYXBwZW5kQ2hpbGQoY3JlYXRlRWwoKSk7XG4gICAgICAgIGNoaWxkcmVuW2ldID0gcGFydDtcbiAgICAgIH0gLy8gc2V0IHRoZSBwZXJjZW50IGJhc2VkIG9uIHRoZSB3aWR0aCBvZiB0aGUgcHJvZ3Jlc3MgYmFyIChidWZmZXJlZEVuZClcblxuXG4gICAgICBwYXJ0LnN0eWxlLmxlZnQgPSBwZXJjZW50aWZ5KHN0YXJ0LCBidWZmZXJlZEVuZCk7XG4gICAgICBwYXJ0LnN0eWxlLndpZHRoID0gcGVyY2VudGlmeShlbmQgLSBzdGFydCwgYnVmZmVyZWRFbmQpO1xuICAgIH0gLy8gcmVtb3ZlIHVudXNlZCBidWZmZXJlZCByYW5nZSBlbGVtZW50c1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IGNoaWxkcmVuLmxlbmd0aDsgX2kgPiBidWZmZXJlZC5sZW5ndGg7IF9pLS0pIHtcbiAgICAgIHRoaXMuZWxfLnJlbW92ZUNoaWxkKGNoaWxkcmVuW19pIC0gMV0pO1xuICAgIH1cblxuICAgIGNoaWxkcmVuLmxlbmd0aCA9IGJ1ZmZlcmVkLmxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gTG9hZFByb2dyZXNzQmFyO1xufShDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0xvYWRQcm9ncmVzc0JhcicsIExvYWRQcm9ncmVzc0Jhcik7XG5cbi8qKlxuICogVGltZSB0b29sdGlwcyBkaXNwbGF5IGEgdGltZSBhYm92ZSB0aGUgcHJvZ3Jlc3MgYmFyLlxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBUaW1lVG9vbHRpcCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUaW1lVG9vbHRpcCwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIHtAbGluayBQbGF5ZXJ9IHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBUaW1lVG9vbHRpcChwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMudXBkYXRlID0gdGhyb3R0bGUoYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMudXBkYXRlKSwgVVBEQVRFX1JFRlJFU0hfSU5URVJWQUwpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB0aW1lIHRvb2x0aXAgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUaW1lVG9vbHRpcC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy10aW1lLXRvb2x0aXAnXG4gICAgfSwge1xuICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0aW1lIHRvb2x0aXAgcmVsYXRpdmUgdG8gdGhlIGBTZWVrQmFyYC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlZWtCYXJSZWN0XG4gICAqICAgICAgICBUaGUgYENsaWVudFJlY3RgIGZvciB0aGUge0BsaW5rIFNlZWtCYXJ9IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWVrQmFyUG9pbnRcbiAgICogICAgICAgIEEgbnVtYmVyIGZyb20gMCB0byAxLCByZXByZXNlbnRpbmcgYSBob3Jpem9udGFsIHJlZmVyZW5jZSBwb2ludFxuICAgKiAgICAgICAgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZSB7QGxpbmsgU2Vla0Jhcn1cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWtCYXJSZWN0LCBzZWVrQmFyUG9pbnQsIGNvbnRlbnQpIHtcbiAgICB2YXIgdG9vbHRpcFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5lbF8pO1xuICAgIHZhciBwbGF5ZXJSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMucGxheWVyXy5lbCgpKTtcbiAgICB2YXIgc2Vla0JhclBvaW50UHggPSBzZWVrQmFyUmVjdC53aWR0aCAqIHNlZWtCYXJQb2ludDsgLy8gZG8gbm90aGluZyBpZiBlaXRoZXIgcmVjdCBpc24ndCBhdmFpbGFibGVcbiAgICAvLyBmb3IgZXhhbXBsZSwgaWYgdGhlIHBsYXllciBpc24ndCBpbiB0aGUgRE9NIGZvciB0ZXN0aW5nXG5cbiAgICBpZiAoIXBsYXllclJlY3QgfHwgIXRvb2x0aXBSZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGlzIGlzIHRoZSBzcGFjZSBsZWZ0IG9mIHRoZSBgc2Vla0JhclBvaW50YCBhdmFpbGFibGUgd2l0aGluIHRoZSBib3VuZHNcbiAgICAvLyBvZiB0aGUgcGxheWVyLiBXZSBjYWxjdWxhdGUgYW55IGdhcCBiZXR3ZWVuIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHBsYXllclxuICAgIC8vIGFuZCB0aGUgbGVmdCBlZGdlIG9mIHRoZSBgU2Vla0JhcmAgYW5kIGFkZCB0aGUgbnVtYmVyIG9mIHBpeGVscyBpbiB0aGVcbiAgICAvLyBgU2Vla0JhcmAgYmVmb3JlIGhpdHRpbmcgdGhlIGBzZWVrQmFyUG9pbnRgXG5cblxuICAgIHZhciBzcGFjZUxlZnRPZlBvaW50ID0gc2Vla0JhclJlY3QubGVmdCAtIHBsYXllclJlY3QubGVmdCArIHNlZWtCYXJQb2ludFB4OyAvLyBUaGlzIGlzIHRoZSBzcGFjZSByaWdodCBvZiB0aGUgYHNlZWtCYXJQb2ludGAgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYm91bmRzXG4gICAgLy8gb2YgdGhlIHBsYXllci4gV2UgY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGZyb20gdGhlIGBzZWVrQmFyUG9pbnRgXG4gICAgLy8gdG8gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGBTZWVrQmFyYCBhbmQgYWRkIHRvIHRoYXQgYW55IGdhcCBiZXR3ZWVuIHRoZVxuICAgIC8vIHJpZ2h0IGVkZ2Ugb2YgdGhlIGBTZWVrQmFyYCBhbmQgdGhlIHBsYXllci5cblxuICAgIHZhciBzcGFjZVJpZ2h0T2ZQb2ludCA9IHNlZWtCYXJSZWN0LndpZHRoIC0gc2Vla0JhclBvaW50UHggKyAocGxheWVyUmVjdC5yaWdodCAtIHNlZWtCYXJSZWN0LnJpZ2h0KTsgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBieSB3aGljaCB0aGUgdG9vbHRpcCB3aWxsIG5lZWQgdG8gYmUgcHVsbGVkXG4gICAgLy8gZnVydGhlciB0byB0aGUgcmlnaHQgdG8gY2VudGVyIGl0IG92ZXIgdGhlIGBzZWVrQmFyUG9pbnRgLlxuXG4gICAgdmFyIHB1bGxUb29sdGlwQnkgPSB0b29sdGlwUmVjdC53aWR0aCAvIDI7IC8vIEFkanVzdCB0aGUgYHB1bGxUb29sdGlwQnlgIGRpc3RhbmNlIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSByZXN1bHRzIG9mIHRoZSBzcGFjZSBjYWxjdWxhdGlvbnMgYWJvdmUuXG5cbiAgICBpZiAoc3BhY2VMZWZ0T2ZQb2ludCA8IHB1bGxUb29sdGlwQnkpIHtcbiAgICAgIHB1bGxUb29sdGlwQnkgKz0gcHVsbFRvb2x0aXBCeSAtIHNwYWNlTGVmdE9mUG9pbnQ7XG4gICAgfSBlbHNlIGlmIChzcGFjZVJpZ2h0T2ZQb2ludCA8IHB1bGxUb29sdGlwQnkpIHtcbiAgICAgIHB1bGxUb29sdGlwQnkgPSBzcGFjZVJpZ2h0T2ZQb2ludDtcbiAgICB9IC8vIER1ZSB0byB0aGUgaW1wcmVjaXNpb24gb2YgZGVjaW1hbC9yYXRpbyBiYXNlZCBjYWxjdWxhdGlvbnMgYW5kIHZhcnlpbmdcbiAgICAvLyByb3VuZGluZyBiZWhhdmlvcnMsIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgc3BhY2luZyBhZGp1c3RtZW50IGlzIG9mZlxuICAgIC8vIGJ5IGEgcGl4ZWwgb3IgdHdvLiBUaGlzIGFkZHMgaW5zdXJhbmNlIHRvIHRoZXNlIGNhbGN1bGF0aW9ucy5cblxuXG4gICAgaWYgKHB1bGxUb29sdGlwQnkgPCAwKSB7XG4gICAgICBwdWxsVG9vbHRpcEJ5ID0gMDtcbiAgICB9IGVsc2UgaWYgKHB1bGxUb29sdGlwQnkgPiB0b29sdGlwUmVjdC53aWR0aCkge1xuICAgICAgcHVsbFRvb2x0aXBCeSA9IHRvb2x0aXBSZWN0LndpZHRoO1xuICAgIH1cblxuICAgIHRoaXMuZWxfLnN0eWxlLnJpZ2h0ID0gXCItXCIgKyBwdWxsVG9vbHRpcEJ5ICsgXCJweFwiO1xuICAgIHRoaXMud3JpdGUoY29udGVudCk7XG4gIH1cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSB0aW1lIHRvIHRoZSB0b29sdGlwIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuICAgKiAgICAgICAgVGhlIGZvcm1hdHRlZCB0aW1lIGZvciB0aGUgdG9vbHRpcC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud3JpdGUgPSBmdW5jdGlvbiB3cml0ZShjb250ZW50KSB7XG4gICAgdGV4dENvbnRlbnQodGhpcy5lbF8sIGNvbnRlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZSB0b29sdGlwIHJlbGF0aXZlIHRvIHRoZSBgU2Vla0JhcmAuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZWVrQmFyUmVjdFxuICAgKiAgICAgICAgVGhlIGBDbGllbnRSZWN0YCBmb3IgdGhlIHtAbGluayBTZWVrQmFyfSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vla0JhclBvaW50XG4gICAqICAgICAgICBBIG51bWJlciBmcm9tIDAgdG8gMSwgcmVwcmVzZW50aW5nIGEgaG9yaXpvbnRhbCByZWZlcmVuY2UgcG9pbnRcbiAgICogICAgICAgIGZyb20gdGhlIGxlZnQgZWRnZSBvZiB0aGUge0BsaW5rIFNlZWtCYXJ9XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lXG4gICAqICAgICAgICBUaGUgdGltZSB0byB1cGRhdGUgdGhlIHRvb2x0aXAgdG8sIG5vdCB1c2VkIGR1cmluZyBsaXZlIHBsYXliYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiXG4gICAqICAgICAgICBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZVxuICAgKiAgICAgICAgZm9yIHRvb2x0aXBzIHRoYXQgbmVlZCB0byBkbyBhZGRpdGlvbmFsIGFuaW1hdGlvbnMgZnJvbSB0aGUgZGVmYXVsdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVUaW1lID0gZnVuY3Rpb24gdXBkYXRlVGltZShzZWVrQmFyUmVjdCwgc2Vla0JhclBvaW50LCB0aW1lLCBjYikge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgckFGIElELCBjYW5jZWwgaXQgc28gd2UgZG9uJ3Qgb3Zlci1xdWV1ZS5cbiAgICBpZiAodGhpcy5yYWZJZF8pIHtcbiAgICAgIHRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yYWZJZF8pO1xuICAgIH1cblxuICAgIHRoaXMucmFmSWRfID0gdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbnRlbnQ7XG5cbiAgICAgIHZhciBkdXJhdGlvbiA9IF90aGlzMi5wbGF5ZXJfLmR1cmF0aW9uKCk7XG5cbiAgICAgIGlmIChfdGhpczIucGxheWVyXy5saXZlVHJhY2tlciAmJiBfdGhpczIucGxheWVyXy5saXZlVHJhY2tlci5pc0xpdmUoKSkge1xuICAgICAgICB2YXIgbGl2ZVdpbmRvdyA9IF90aGlzMi5wbGF5ZXJfLmxpdmVUcmFja2VyLmxpdmVXaW5kb3coKTtcblxuICAgICAgICB2YXIgc2Vjb25kc0JlaGluZCA9IGxpdmVXaW5kb3cgLSBzZWVrQmFyUG9pbnQgKiBsaXZlV2luZG93O1xuICAgICAgICBjb250ZW50ID0gKHNlY29uZHNCZWhpbmQgPCAxID8gJycgOiAnLScpICsgZm9ybWF0VGltZShzZWNvbmRzQmVoaW5kLCBsaXZlV2luZG93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnQgPSBmb3JtYXRUaW1lKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnVwZGF0ZShzZWVrQmFyUmVjdCwgc2Vla0JhclBvaW50LCBjb250ZW50KTtcblxuICAgICAgaWYgKGNiKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRpbWVUb29sdGlwO1xufShDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1RpbWVUb29sdGlwJywgVGltZVRvb2x0aXApO1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rIFNlZWtCYXJ9IHRvIGRpc3BsYXkgbWVkaWEgcGxheWJhY2sgcHJvZ3Jlc3MgYXMgcGFydCBvZiB0aGVcbiAqIHtAbGluayBQcm9ncmVzc0NvbnRyb2x9LlxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBQbGF5UHJvZ3Jlc3NCYXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGxheVByb2dyZXNzQmFyLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUge0BsaW5rIFBsYXllcn0gdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFBsYXlQcm9ncmVzc0JhcihwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMudXBkYXRlID0gdGhyb3R0bGUoYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMudXBkYXRlKSwgVVBEQVRFX1JFRlJFU0hfSU5URVJWQUwpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB0aGUgRE9NIGVsZW1lbnQgZm9yIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGxheVByb2dyZXNzQmFyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCgpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLXBsYXktcHJvZ3Jlc3MgdmpzLXNsaWRlci1iYXInXG4gICAgfSwge1xuICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEVucXVldWVzIHVwZGF0ZXMgdG8gaXRzIG93biBET00gYXMgd2VsbCBhcyB0aGUgRE9NIG9mIGl0c1xuICAgKiB7QGxpbmsgVGltZVRvb2x0aXB9IGNoaWxkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2Vla0JhclJlY3RcbiAgICogICAgICAgIFRoZSBgQ2xpZW50UmVjdGAgZm9yIHRoZSB7QGxpbmsgU2Vla0Jhcn0gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNlZWtCYXJQb2ludFxuICAgKiAgICAgICAgQSBudW1iZXIgZnJvbSAwIHRvIDEsIHJlcHJlc2VudGluZyBhIGhvcml6b250YWwgcmVmZXJlbmNlIHBvaW50XG4gICAqICAgICAgICBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHtAbGluayBTZWVrQmFyfVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoc2Vla0JhclJlY3QsIHNlZWtCYXJQb2ludCkge1xuICAgIHZhciB0aW1lVG9vbHRpcCA9IHRoaXMuZ2V0Q2hpbGQoJ3RpbWVUb29sdGlwJyk7XG5cbiAgICBpZiAoIXRpbWVUb29sdGlwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRpbWUgPSB0aGlzLnBsYXllcl8uc2NydWJiaW5nKCkgPyB0aGlzLnBsYXllcl8uZ2V0Q2FjaGUoKS5jdXJyZW50VGltZSA6IHRoaXMucGxheWVyXy5jdXJyZW50VGltZSgpO1xuICAgIHRpbWVUb29sdGlwLnVwZGF0ZVRpbWUoc2Vla0JhclJlY3QsIHNlZWtCYXJQb2ludCwgdGltZSk7XG4gIH07XG5cbiAgcmV0dXJuIFBsYXlQcm9ncmVzc0Jhcjtcbn0oQ29tcG9uZW50KTtcbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB7QGxpbmsgUGxheVByb2dyZXNzQmFyfS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuXG5cblBsYXlQcm9ncmVzc0Jhci5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIGNoaWxkcmVuOiBbXVxufTsgLy8gVGltZSB0b29sdGlwcyBzaG91bGQgbm90IGJlIGFkZGVkIHRvIGEgcGxheWVyIG9uIG1vYmlsZSBkZXZpY2VzXG5cbmlmICghSVNfSU9TICYmICFJU19BTkRST0lEKSB7XG4gIFBsYXlQcm9ncmVzc0Jhci5wcm90b3R5cGUub3B0aW9uc18uY2hpbGRyZW4ucHVzaCgndGltZVRvb2x0aXAnKTtcbn1cblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdQbGF5UHJvZ3Jlc3NCYXInLCBQbGF5UHJvZ3Jlc3NCYXIpO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgTW91c2VUaW1lRGlzcGxheX0gY29tcG9uZW50IHRyYWNrcyBtb3VzZSBtb3ZlbWVudCBvdmVyIHRoZVxuICoge0BsaW5rIFByb2dyZXNzQ29udHJvbH0uIEl0IGRpc3BsYXlzIGFuIGluZGljYXRvciBhbmQgYSB7QGxpbmsgVGltZVRvb2x0aXB9XG4gKiBpbmRpY2F0aW5nIHRoZSB0aW1lIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlXG4gKiB7QGxpbmsgUHJvZ3Jlc3NDb250cm9sfS5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgTW91c2VUaW1lRGlzcGxheSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShNb3VzZVRpbWVEaXNwbGF5LCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUge0BsaW5rIFBsYXllcn0gdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIE1vdXNlVGltZURpc3BsYXkocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLnVwZGF0ZSA9IHRocm90dGxlKGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLnVwZGF0ZSksIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgRE9NIGVsZW1lbnQgZm9yIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTW91c2VUaW1lRGlzcGxheS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1tb3VzZS1kaXNwbGF5J1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBFbnF1ZXVlcyB1cGRhdGVzIHRvIGl0cyBvd24gRE9NIGFzIHdlbGwgYXMgdGhlIERPTSBvZiBpdHNcbiAgICoge0BsaW5rIFRpbWVUb29sdGlwfSBjaGlsZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlZWtCYXJSZWN0XG4gICAqICAgICAgICBUaGUgYENsaWVudFJlY3RgIGZvciB0aGUge0BsaW5rIFNlZWtCYXJ9IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWVrQmFyUG9pbnRcbiAgICogICAgICAgIEEgbnVtYmVyIGZyb20gMCB0byAxLCByZXByZXNlbnRpbmcgYSBob3Jpem9udGFsIHJlZmVyZW5jZSBwb2ludFxuICAgKiAgICAgICAgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZSB7QGxpbmsgU2Vla0Jhcn1cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWtCYXJSZWN0LCBzZWVrQmFyUG9pbnQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0aW1lID0gc2Vla0JhclBvaW50ICogdGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCk7XG4gICAgdGhpcy5nZXRDaGlsZCgndGltZVRvb2x0aXAnKS51cGRhdGVUaW1lKHNlZWtCYXJSZWN0LCBzZWVrQmFyUG9pbnQsIHRpbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5lbF8uc3R5bGUubGVmdCA9IHNlZWtCYXJSZWN0LndpZHRoICogc2Vla0JhclBvaW50ICsgXCJweFwiO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb3VzZVRpbWVEaXNwbGF5O1xufShDb21wb25lbnQpO1xuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIGBNb3VzZVRpbWVEaXNwbGF5YFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuTW91c2VUaW1lRGlzcGxheS5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIGNoaWxkcmVuOiBbJ3RpbWVUb29sdGlwJ11cbn07XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ01vdXNlVGltZURpc3BsYXknLCBNb3VzZVRpbWVEaXNwbGF5KTtcblxudmFyIFNURVBfU0VDT05EUyA9IDU7IC8vIFRoZSBtdWx0aXBsaWVyIG9mIFNURVBfU0VDT05EUyB0aGF0IFBnVXAvUGdEb3duIG1vdmUgdGhlIHRpbWVsaW5lLlxuXG52YXIgUEFHRV9LRVlfTVVMVElQTElFUiA9IDEyOyAvLyBUaGUgaW50ZXJ2YWwgYXQgd2hpY2ggdGhlIGJhciBzaG91bGQgdXBkYXRlIGFzIGl0IHByb2dyZXNzZXMuXG5cbnZhciBVUERBVEVfUkVGUkVTSF9JTlRFUlZBTCQxID0gMzA7XG4vKipcbiAqIFNlZWsgYmFyIGFuZCBjb250YWluZXIgZm9yIHRoZSBwcm9ncmVzcyBiYXJzLiBVc2VzIHtAbGluayBQbGF5UHJvZ3Jlc3NCYXJ9XG4gKiBhcyBpdHMgYGJhcmAuXG4gKlxuICogQGV4dGVuZHMgU2xpZGVyXG4gKi9cblxudmFyIFNlZWtCYXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9TbGlkZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2Vla0JhciwgX1NsaWRlcik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBTZWVrQmFyKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1NsaWRlci5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldEV2ZW50SGFuZGxlcnNfKCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFNlZWtCYXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRFdmVudEhhbmRsZXJzXyA9IGZ1bmN0aW9uIHNldEV2ZW50SGFuZGxlcnNfKCkge1xuICAgIHRoaXMudXBkYXRlID0gdGhyb3R0bGUoYmluZCh0aGlzLCB0aGlzLnVwZGF0ZSksIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMJDEpO1xuICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLCAndGltZXVwZGF0ZScsIHRoaXMudXBkYXRlKTtcbiAgICB0aGlzLm9uKHRoaXMucGxheWVyXywgJ2VuZGVkJywgdGhpcy5oYW5kbGVFbmRlZCk7XG4gICAgdGhpcy5vbih0aGlzLnBsYXllcl8sICdkdXJhdGlvbmNoYW5nZScsIHRoaXMudXBkYXRlKTtcblxuICAgIGlmICh0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIpIHtcbiAgICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLmxpdmVUcmFja2VyLCAnbGl2ZWVkZ2VjaGFuZ2UnLCB0aGlzLnVwZGF0ZSk7XG4gICAgfSAvLyB3aGVuIHBsYXlpbmcsIGxldCdzIGVuc3VyZSB3ZSBzbW9vdGhseSB1cGRhdGUgdGhlIHBsYXkgcHJvZ3Jlc3MgYmFyXG4gICAgLy8gdmlhIGFuIGludGVydmFsXG5cblxuICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBudWxsO1xuICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLCBbJ3BsYXlpbmcnXSwgdGhpcy5lbmFibGVJbnRlcnZhbF8pO1xuICAgIHRoaXMub24odGhpcy5wbGF5ZXJfLCBbJ2VuZGVkJywgJ3BhdXNlJywgJ3dhaXRpbmcnXSwgdGhpcy5kaXNhYmxlSW50ZXJ2YWxfKTsgLy8gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIHBsYXkgcHJvZ3Jlc3MgaWYgdGhlIGRvY3VtZW50IGlzIGhpZGRlbixcbiAgICAvLyBhbHNvLCB0aGlzIGNhdXNlcyB0aGUgQ1BVIHRvIHNwaWtlIGFuZCBldmVudHVhbGx5IGNyYXNoIHRoZSBwYWdlIG9uIElFMTEuXG5cbiAgICBpZiAoJ2hpZGRlbicgaW4gZG9jdW1lbnQgJiYgJ3Zpc2liaWxpdHlTdGF0ZScgaW4gZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMub24oZG9jdW1lbnQsICd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy50b2dnbGVWaXNpYmlsaXR5Xyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by50b2dnbGVWaXNpYmlsaXR5XyA9IGZ1bmN0aW9uIHRvZ2dsZVZpc2liaWxpdHlfKGUpIHtcbiAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLmRpc2FibGVJbnRlcnZhbF8oZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlSW50ZXJ2YWxfKCk7IC8vIHdlIGp1c3Qgc3dpdGNoZWQgYmFjayB0byB0aGUgcGFnZSBhbmQgc29tZW9uZSBtYXkgYmUgbG9va2luZywgc28sIHVwZGF0ZSBBU0FQXG5cbiAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmVuYWJsZUludGVydmFsXyA9IGZ1bmN0aW9uIGVuYWJsZUludGVydmFsXygpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZUludGVydmFsKTtcbiAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gdGhpcy5zZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzMi51cGRhdGUpO1xuICAgIH0sIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMJDEpO1xuICB9O1xuXG4gIF9wcm90by5kaXNhYmxlSW50ZXJ2YWxfID0gZnVuY3Rpb24gZGlzYWJsZUludGVydmFsXyhlKSB7XG4gICAgaWYgKHRoaXMucGxheWVyXy5saXZlVHJhY2tlciAmJiB0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIuaXNMaXZlKCkgJiYgZS50eXBlICE9PSAnZW5kZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlSW50ZXJ2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfU2xpZGVyLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtcHJvZ3Jlc3MtaG9sZGVyJ1xuICAgIH0sIHtcbiAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5sb2NhbGl6ZSgnUHJvZ3Jlc3MgQmFyJylcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwbGF5IHByb2dyZXNzIGJhciBhbmQgYWNjZXNzaWJpbGl0eVxuICAgKiBhdHRyaWJ1dGVzIHRvIHdoYXRldmVyIGlzIHBhc3NlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lXG4gICAqICAgICAgICBUaGUgY3VycmVudFRpbWUgdmFsdWUgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVyY2VudFxuICAgKiAgICAgICAgVGhlIHBlcmNlbnRhZ2UgYXMgYSBkZWNpbWFsIHRoYXQgdGhlIGJhciBzaG91bGQgYmUgZmlsbGVkIGZyb20gMC0xLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVfID0gZnVuY3Rpb24gdXBkYXRlXyhjdXJyZW50VGltZSwgcGVyY2VudCkge1xuICAgIHZhciBsaXZlVHJhY2tlciA9IHRoaXMucGxheWVyXy5saXZlVHJhY2tlcjtcbiAgICB2YXIgZHVyYXRpb24gPSB0aGlzLnBsYXllcl8uZHVyYXRpb24oKTtcblxuICAgIGlmIChsaXZlVHJhY2tlciAmJiBsaXZlVHJhY2tlci5pc0xpdmUoKSkge1xuICAgICAgZHVyYXRpb24gPSB0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXIubGl2ZUN1cnJlbnRUaW1lKCk7XG4gICAgfSAvLyBtYWNoaW5lIHJlYWRhYmxlIHZhbHVlIG9mIHByb2dyZXNzIGJhciAocGVyY2VudGFnZSBjb21wbGV0ZSlcblxuXG4gICAgdGhpcy5lbF8uc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgKHBlcmNlbnQgKiAxMDApLnRvRml4ZWQoMikpOyAvLyBodW1hbiByZWFkYWJsZSB2YWx1ZSBvZiBwcm9ncmVzcyBiYXIgKHRpbWUgY29tcGxldGUpXG5cbiAgICB0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWV0ZXh0JywgdGhpcy5sb2NhbGl6ZSgncHJvZ3Jlc3MgYmFyIHRpbWluZzogY3VycmVudFRpbWU9ezF9IGR1cmF0aW9uPXsyfScsIFtmb3JtYXRUaW1lKGN1cnJlbnRUaW1lLCBkdXJhdGlvbiksIGZvcm1hdFRpbWUoZHVyYXRpb24sIGR1cmF0aW9uKV0sICd7MX0gb2YgezJ9JykpOyAvLyBVcGRhdGUgdGhlIGBQbGF5UHJvZ3Jlc3NCYXJgLlxuXG4gICAgaWYgKHRoaXMuYmFyKSB7XG4gICAgICB0aGlzLmJhci51cGRhdGUoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMuZWxfKSwgcGVyY2VudCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHNlZWsgYmFyJ3MgVUkuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBgdGltZXVwZGF0ZWAgb3IgYGVuZGVkYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI3RpbWV1cGRhdGVcbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgICBUaGUgY3VycmVudCBwZXJjZW50IGF0IGEgbnVtYmVyIGZyb20gMC0xXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShldmVudCkge1xuICAgIC8vIGlmIHRoZSBvZmZzZXRQYXJlbnQgaXMgbnVsbCwgdGhlbiB0aGlzIGVsZW1lbnQgaXMgaGlkZGVuLCBpbiB3aGljaCBjYXNlXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuXG4gICAgaWYgKHRoaXMuZWwoKS5vZmZzZXRQYXJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGVyY2VudCA9IF9TbGlkZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51cGRhdGVfKHRoaXMuZ2V0Q3VycmVudFRpbWVfKCksIHBlcmNlbnQpO1xuICAgIHJldHVybiBwZXJjZW50O1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIGN1cnJlbnQgdGltZSBidXQgYWxsb3dzIGZvciBzbW9vdGggc2NydWJiaW5nLFxuICAgKiB3aGVuIHBsYXllciBjYW4ndCBrZWVwIHVwLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdGltZSB2YWx1ZSB0byBkaXNwbGF5XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRUaW1lXyA9IGZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lXygpIHtcbiAgICByZXR1cm4gdGhpcy5wbGF5ZXJfLnNjcnViYmluZygpID8gdGhpcy5wbGF5ZXJfLmdldENhY2hlKCkuY3VycmVudFRpbWUgOiB0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoKTtcbiAgfVxuICAvKipcbiAgICogV2Ugd2FudCB0aGUgc2VlayBiYXIgdG8gYmUgZnVsbCBvbiBlbmRlZFxuICAgKiBubyBtYXR0ZXIgd2hhdCB0aGUgYWN0dWFsIGludGVybmFsIHZhbHVlcyBhcmUuIHNvIHdlIGZvcmNlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHRpbWV1cGRhdGVgIG9yIGBlbmRlZGAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNlbmRlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFbmRlZCA9IGZ1bmN0aW9uIGhhbmRsZUVuZGVkKGV2ZW50KSB7XG4gICAgdGhpcy51cGRhdGVfKHRoaXMucGxheWVyXy5kdXJhdGlvbigpLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIG1lZGlhIHBsYXllZCBzbyBmYXIuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgcGVyY2VudGFnZSBvZiBtZWRpYSBwbGF5ZWQgc28gZmFyICgwIHRvIDEpLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRQZXJjZW50ID0gZnVuY3Rpb24gZ2V0UGVyY2VudCgpIHtcbiAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lXygpO1xuICAgIHZhciBwZXJjZW50O1xuICAgIHZhciBsaXZlVHJhY2tlciA9IHRoaXMucGxheWVyXy5saXZlVHJhY2tlcjtcblxuICAgIGlmIChsaXZlVHJhY2tlciAmJiBsaXZlVHJhY2tlci5pc0xpdmUoKSkge1xuICAgICAgcGVyY2VudCA9IChjdXJyZW50VGltZSAtIGxpdmVUcmFja2VyLnNlZWthYmxlU3RhcnQoKSkgLyBsaXZlVHJhY2tlci5saXZlV2luZG93KCk7IC8vIHByZXZlbnQgdGhlIHBlcmNlbnQgZnJvbSBjaGFuZ2luZyBhdCB0aGUgbGl2ZSBlZGdlXG5cbiAgICAgIGlmIChsaXZlVHJhY2tlci5hdExpdmVFZGdlKCkpIHtcbiAgICAgICAgcGVyY2VudCA9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcmNlbnQgPSBjdXJyZW50VGltZSAvIHRoaXMucGxheWVyXy5kdXJhdGlvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBwZXJjZW50ID49IDEgPyAxIDogcGVyY2VudCB8fCAwO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgbW91c2UgZG93biBvbiBzZWVrIGJhclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBtb3VzZWRvd25gIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG4gICAgaWYgKCFpc1NpbmdsZUxlZnRDbGljayhldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFN0b3AgZXZlbnQgcHJvcGFnYXRpb24gdG8gcHJldmVudCBkb3VibGUgZmlyZSBpbiBwcm9ncmVzcy1jb250cm9sLmpzXG5cblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucGxheWVyXy5zY3J1YmJpbmcodHJ1ZSk7XG4gICAgdGhpcy52aWRlb1dhc1BsYXlpbmcgPSAhdGhpcy5wbGF5ZXJfLnBhdXNlZCgpO1xuICAgIHRoaXMucGxheWVyXy5wYXVzZSgpO1xuXG4gICAgX1NsaWRlci5wcm90b3R5cGUuaGFuZGxlTW91c2VEb3duLmNhbGwodGhpcywgZXZlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgbW91c2UgbW92ZSBvbiBzZWVrIGJhclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBtb3VzZW1vdmVgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZW1vdmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgaWYgKCFpc1NpbmdsZUxlZnRDbGljayhldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV3VGltZTtcbiAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZURpc3RhbmNlKGV2ZW50KTtcbiAgICB2YXIgbGl2ZVRyYWNrZXIgPSB0aGlzLnBsYXllcl8ubGl2ZVRyYWNrZXI7XG5cbiAgICBpZiAoIWxpdmVUcmFja2VyIHx8ICFsaXZlVHJhY2tlci5pc0xpdmUoKSkge1xuICAgICAgbmV3VGltZSA9IGRpc3RhbmNlICogdGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCk7IC8vIERvbid0IGxldCB2aWRlbyBlbmQgd2hpbGUgc2NydWJiaW5nLlxuXG4gICAgICBpZiAobmV3VGltZSA9PT0gdGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkpIHtcbiAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUgLSAwLjE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzZWVrYWJsZVN0YXJ0ID0gbGl2ZVRyYWNrZXIuc2Vla2FibGVTdGFydCgpO1xuICAgICAgdmFyIHNlZWthYmxlRW5kID0gbGl2ZVRyYWNrZXIubGl2ZUN1cnJlbnRUaW1lKCk7XG4gICAgICBuZXdUaW1lID0gc2Vla2FibGVTdGFydCArIGRpc3RhbmNlICogbGl2ZVRyYWNrZXIubGl2ZVdpbmRvdygpOyAvLyBEb24ndCBsZXQgdmlkZW8gZW5kIHdoaWxlIHNjcnViYmluZy5cblxuICAgICAgaWYgKG5ld1RpbWUgPj0gc2Vla2FibGVFbmQpIHtcbiAgICAgICAgbmV3VGltZSA9IHNlZWthYmxlRW5kO1xuICAgICAgfSAvLyBDb21wZW5zYXRlIGZvciBwcmVjaXNpb24gZGlmZmVyZW5jZXMgc28gdGhhdCBjdXJyZW50VGltZSBpcyBub3QgbGVzc1xuICAgICAgLy8gdGhhbiBzZWVrYWJsZSBzdGFydFxuXG5cbiAgICAgIGlmIChuZXdUaW1lIDw9IHNlZWthYmxlU3RhcnQpIHtcbiAgICAgICAgbmV3VGltZSA9IHNlZWthYmxlU3RhcnQgKyAwLjE7XG4gICAgICB9IC8vIE9uIGFuZHJvaWQgc2Vla2FibGVFbmQgY2FuIGJlIEluZmluaXR5IHNvbWV0aW1lcyxcbiAgICAgIC8vIHRoaXMgd2lsbCBjYXVzZSBuZXdUaW1lIHRvIGJlIEluZmluaXR5LCB3aGljaCBpc1xuICAgICAgLy8gbm90IGEgdmFsaWQgY3VycmVudFRpbWUuXG5cblxuICAgICAgaWYgKG5ld1RpbWUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIFNldCBuZXcgdGltZSAodGVsbCBwbGF5ZXIgdG8gc2VlayB0byBuZXcgdGltZSlcblxuXG4gICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKG5ld1RpbWUpO1xuICB9O1xuXG4gIF9wcm90by5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgX1NsaWRlci5wcm90b3R5cGUuZW5hYmxlLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgbW91c2VUaW1lRGlzcGxheSA9IHRoaXMuZ2V0Q2hpbGQoJ21vdXNlVGltZURpc3BsYXknKTtcblxuICAgIGlmICghbW91c2VUaW1lRGlzcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vdXNlVGltZURpc3BsYXkuc2hvdygpO1xuICB9O1xuXG4gIF9wcm90by5kaXNhYmxlID0gZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBfU2xpZGVyLnByb3RvdHlwZS5kaXNhYmxlLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgbW91c2VUaW1lRGlzcGxheSA9IHRoaXMuZ2V0Q2hpbGQoJ21vdXNlVGltZURpc3BsYXknKTtcblxuICAgIGlmICghbW91c2VUaW1lRGlzcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vdXNlVGltZURpc3BsYXkuaGlkZSgpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgbW91c2UgdXAgb24gc2VlayBiYXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBgbW91c2V1cGAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIG1vdXNldXBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VVcCA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoZXZlbnQpIHtcbiAgICBfU2xpZGVyLnByb3RvdHlwZS5oYW5kbGVNb3VzZVVwLmNhbGwodGhpcywgZXZlbnQpOyAvLyBTdG9wIGV2ZW50IHByb3BhZ2F0aW9uIHRvIHByZXZlbnQgZG91YmxlIGZpcmUgaW4gcHJvZ3Jlc3MtY29udHJvbC5qc1xuXG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMucGxheWVyXy5zY3J1YmJpbmcoZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGltZXVwZGF0ZSBiZWNhdXNlIHdlJ3JlIGRvbmUgc2Vla2luZyBhbmQgdGhlIHRpbWUgaGFzIGNoYW5nZWQuXG4gICAgICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBpZiB0aGUgcGxheWVyIGlzIHBhdXNlZCB0byB0aW1lIHRoZSB0aW1lIGRpc3BsYXlzLlxuICAgICAqXG4gICAgICogQGV2ZW50IFRlY2gjdGltZXVwZGF0ZVxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKi9cblxuICAgIHRoaXMucGxheWVyXy50cmlnZ2VyKHtcbiAgICAgIHR5cGU6ICd0aW1ldXBkYXRlJyxcbiAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgIG1hbnVhbGx5VHJpZ2dlcmVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy52aWRlb1dhc1BsYXlpbmcpIHtcbiAgICAgIHNpbGVuY2VQcm9taXNlKHRoaXMucGxheWVyXy5wbGF5KCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTW92ZSBtb3JlIHF1aWNrbHkgZmFzdCBmb3J3YXJkIGZvciBrZXlib2FyZC1vbmx5IHVzZXJzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN0ZXBGb3J3YXJkID0gZnVuY3Rpb24gc3RlcEZvcndhcmQoKSB7XG4gICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMucGxheWVyXy5jdXJyZW50VGltZSgpICsgU1RFUF9TRUNPTkRTKTtcbiAgfVxuICAvKipcbiAgICogTW92ZSBtb3JlIHF1aWNrbHkgcmV3aW5kIGZvciBrZXlib2FyZC1vbmx5IHVzZXJzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN0ZXBCYWNrID0gZnVuY3Rpb24gc3RlcEJhY2soKSB7XG4gICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMucGxheWVyXy5jdXJyZW50VGltZSgpIC0gU1RFUF9TRUNPTkRTKTtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHBsYXllclxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gZW50ZXIgb3Igc3BhY2UgaXMgdXNlZCBvbiB0aGUgc2Vla2JhclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVBY3Rpb24gPSBmdW5jdGlvbiBoYW5kbGVBY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLnBhdXNlZCgpKSB7XG4gICAgICB0aGlzLnBsYXllcl8ucGxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXllcl8ucGF1c2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoaXMgU2Vla0JhciBoYXMgZm9jdXMgYW5kIGEga2V5IGdldHMgcHJlc3NlZCBkb3duLlxuICAgKiBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGtleXM6XG4gICAqXG4gICAqICAgU3BhY2Ugb3IgRW50ZXIga2V5IGZpcmUgYSBjbGljayBldmVudFxuICAgKiAgIEhvbWUga2V5IG1vdmVzIHRvIHN0YXJ0IG9mIHRoZSB0aW1lbGluZVxuICAgKiAgIEVuZCBrZXkgbW92ZXMgdG8gZW5kIG9mIHRoZSB0aW1lbGluZVxuICAgKiAgIERpZ2l0IFwiMFwiIHRocm91Z2ggXCI5XCIga2V5cyBtb3ZlIHRvIDAlLCAxMCUgLi4uIDgwJSwgOTAlIG9mIHRoZSB0aW1lbGluZVxuICAgKiAgIFBhZ2VEb3duIGtleSBtb3ZlcyBiYWNrIGEgbGFyZ2VyIHN0ZXAgdGhhbiBBcnJvd0Rvd25cbiAgICogICBQYWdlVXAga2V5IG1vdmVzIGZvcndhcmQgYSBsYXJnZSBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGtleWRvd25gIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBrZXlkb3duXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1NwYWNlJykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRW50ZXInKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnSG9tZScpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoMCk7XG4gICAgfSBlbHNlIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFbmQnKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMucGxheWVyXy5kdXJhdGlvbigpKTtcbiAgICB9IGVsc2UgaWYgKC9eWzAtOV0kLy50ZXN0KGtleWNvZGUoZXZlbnQpKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdmFyIGdvdG9GcmFjdGlvbiA9IChrZXljb2RlLmNvZGVzW2tleWNvZGUoZXZlbnQpXSAtIGtleWNvZGUuY29kZXNbJzAnXSkgKiAxMC4wIC8gMTAwLjA7XG4gICAgICB0aGlzLnBsYXllcl8uY3VycmVudFRpbWUodGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkgKiBnb3RvRnJhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnUGdEbicpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnBsYXllcl8uY3VycmVudFRpbWUodGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCkgLSBTVEVQX1NFQ09ORFMgKiBQQUdFX0tFWV9NVUxUSVBMSUVSKTtcbiAgICB9IGVsc2UgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1BnVXAnKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMucGxheWVyXy5jdXJyZW50VGltZSgpICsgU1RFUF9TRUNPTkRTICogUEFHRV9LRVlfTVVMVElQTElFUik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhc3Mga2V5ZG93biBoYW5kbGluZyB1cCBmb3IgdW5zdXBwb3J0ZWQga2V5c1xuICAgICAgX1NsaWRlci5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNlZWtCYXI7XG59KFNsaWRlcik7XG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGBTZWVrQmFyYFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuU2Vla0Jhci5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIGNoaWxkcmVuOiBbJ2xvYWRQcm9ncmVzc0JhcicsICdwbGF5UHJvZ3Jlc3NCYXInXSxcbiAgYmFyTmFtZTogJ3BsYXlQcm9ncmVzc0Jhcidcbn07IC8vIE1vdXNlVGltZURpc3BsYXkgdG9vbHRpcHMgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBhIHBsYXllciBvbiBtb2JpbGUgZGV2aWNlc1xuXG5pZiAoIUlTX0lPUyAmJiAhSVNfQU5EUk9JRCkge1xuICBTZWVrQmFyLnByb3RvdHlwZS5vcHRpb25zXy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgJ21vdXNlVGltZURpc3BsYXknKTtcbn1cblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdTZWVrQmFyJywgU2Vla0Jhcik7XG5cbi8qKlxuICogVGhlIFByb2dyZXNzIENvbnRyb2wgY29tcG9uZW50IGNvbnRhaW5zIHRoZSBzZWVrIGJhciwgbG9hZCBwcm9ncmVzcyxcbiAqIGFuZCBwbGF5IHByb2dyZXNzLlxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBQcm9ncmVzc0NvbnRyb2wgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJvZ3Jlc3NDb250cm9sLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFByb2dyZXNzQ29udHJvbChwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMuaGFuZGxlTW91c2VNb3ZlID0gdGhyb3R0bGUoYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMuaGFuZGxlTW91c2VNb3ZlKSwgVVBEQVRFX1JFRlJFU0hfSU5URVJWQUwpO1xuICAgIF90aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlU2VlayA9IHRocm90dGxlKGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmhhbmRsZU1vdXNlU2VlayksIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMKTtcblxuICAgIF90aGlzLmVuYWJsZSgpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQcm9ncmVzc0NvbnRyb2wucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtcHJvZ3Jlc3MtY29udHJvbCB2anMtY29udHJvbCdcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogV2hlbiB0aGUgbW91c2UgbW92ZXMgb3ZlciB0aGUgYFByb2dyZXNzQ29udHJvbGAsIHRoZSBwb2ludGVyIHBvc2l0aW9uXG4gICAqIGdldHMgcGFzc2VkIGRvd24gdG8gdGhlIGBNb3VzZVRpbWVEaXNwbGF5YCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYG1vdXNlbW92ZWAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW4gbW91c2Vtb3ZlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlTW92ZSA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCkge1xuICAgIHZhciBzZWVrQmFyID0gdGhpcy5nZXRDaGlsZCgnc2Vla0JhcicpO1xuXG4gICAgaWYgKHNlZWtCYXIpIHtcbiAgICAgIHZhciBtb3VzZVRpbWVEaXNwbGF5ID0gc2Vla0Jhci5nZXRDaGlsZCgnbW91c2VUaW1lRGlzcGxheScpO1xuICAgICAgdmFyIHNlZWtCYXJFbCA9IHNlZWtCYXIuZWwoKTtcbiAgICAgIHZhciBzZWVrQmFyUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzZWVrQmFyRWwpO1xuICAgICAgdmFyIHNlZWtCYXJQb2ludCA9IGdldFBvaW50ZXJQb3NpdGlvbihzZWVrQmFyRWwsIGV2ZW50KS54OyAvLyBUaGUgZGVmYXVsdCBza2luIGhhcyBhIGdhcCBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgYFNlZWtCYXJgLiBUaGlzIG1lYW5zXG4gICAgICAvLyB0aGF0IGl0J3MgcG9zc2libGUgdG8gdHJpZ2dlciB0aGlzIGJlaGF2aW9yIG91dHNpZGUgdGhlIGJvdW5kYXJpZXMgb2ZcbiAgICAgIC8vIHRoZSBgU2Vla0JhcmAuIFRoaXMgZW5zdXJlcyB3ZSBzdGF5IHdpdGhpbiBpdCBhdCBhbGwgdGltZXMuXG5cbiAgICAgIGlmIChzZWVrQmFyUG9pbnQgPiAxKSB7XG4gICAgICAgIHNlZWtCYXJQb2ludCA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHNlZWtCYXJQb2ludCA8IDApIHtcbiAgICAgICAgc2Vla0JhclBvaW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vdXNlVGltZURpc3BsYXkpIHtcbiAgICAgICAgbW91c2VUaW1lRGlzcGxheS51cGRhdGUoc2Vla0JhclJlY3QsIHNlZWtCYXJQb2ludCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBIHRocm90dGxlZCB2ZXJzaW9uIG9mIHRoZSB7QGxpbmsgUHJvZ3Jlc3NDb250cm9sI2hhbmRsZU1vdXNlU2Vla30gbGlzdGVuZXIuXG4gICAqXG4gICAqIEBtZXRob2QgUHJvZ3Jlc3NDb250cm9sI3Rocm90dGxlZEhhbmRsZU1vdXNlU2Vla1xuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBtb3VzZW1vdmVgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVuIG1vdXNlbW92ZVxuICAgKiBAbGlzdGVuIHRvdWNobW92ZVxuICAgKi9cblxuICAvKipcbiAgICogSGFuZGxlIGBtb3VzZW1vdmVgIG9yIGB0b3VjaG1vdmVgIGV2ZW50cyBvbiB0aGUgYFByb2dyZXNzQ29udHJvbGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZW1vdmVcbiAgICogQGxpc3RlbnMgdG91Y2htb3ZlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlU2VlayA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlU2VlayhldmVudCkge1xuICAgIHZhciBzZWVrQmFyID0gdGhpcy5nZXRDaGlsZCgnc2Vla0JhcicpO1xuXG4gICAgaWYgKHNlZWtCYXIpIHtcbiAgICAgIHNlZWtCYXIuaGFuZGxlTW91c2VNb3ZlKGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFyZSBjb250cm9scyBhcmUgY3VycmVudGx5IGVuYWJsZWQgZm9yIHRoaXMgcHJvZ3Jlc3MgY29udHJvbC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICB0cnVlIGlmIGNvbnRyb2xzIGFyZSBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5hYmxlZCA9IGZ1bmN0aW9uIGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZF87XG4gIH1cbiAgLyoqXG4gICAqIERpc2FibGUgYWxsIGNvbnRyb2xzIG9uIHRoZSBwcm9ncmVzcyBjb250cm9sIGFuZCBpdHMgY2hpbGRyZW5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgdGhpcy5jaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQuZGlzYWJsZSAmJiBjaGlsZC5kaXNhYmxlKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vZmYoWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLCB0aGlzLmhhbmRsZU1vdXNlRG93bik7XG4gICAgdGhpcy5vZmYodGhpcy5lbF8sICdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7XG4gICAgdGhpcy5oYW5kbGVNb3VzZVVwKCk7XG4gICAgdGhpcy5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICB0aGlzLmVuYWJsZWRfID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEVuYWJsZSBhbGwgY29udHJvbHMgb24gdGhlIHByb2dyZXNzIGNvbnRyb2wgYW5kIGl0cyBjaGlsZHJlblxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgdGhpcy5jaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQuZW5hYmxlICYmIGNoaWxkLmVuYWJsZSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbihbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J10sIHRoaXMuaGFuZGxlTW91c2VEb3duKTtcbiAgICB0aGlzLm9uKHRoaXMuZWxfLCAnbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgdGhpcy5lbmFibGVkXyA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnRzIG9uIHRoZSBgUHJvZ3Jlc3NDb250cm9sYC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIGBtb3VzZWRvd25gIG9yIGB0b3VjaHN0YXJ0YCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBsaXN0ZW5zIG1vdXNlZG93blxuICAgKiBAbGlzdGVucyB0b3VjaHN0YXJ0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmVsXy5vd25lckRvY3VtZW50O1xuICAgIHZhciBzZWVrQmFyID0gdGhpcy5nZXRDaGlsZCgnc2Vla0JhcicpO1xuXG4gICAgaWYgKHNlZWtCYXIpIHtcbiAgICAgIHNlZWtCYXIuaGFuZGxlTW91c2VEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLm9uKGRvYywgJ21vdXNlbW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VTZWVrKTtcbiAgICB0aGlzLm9uKGRvYywgJ3RvdWNobW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VTZWVrKTtcbiAgICB0aGlzLm9uKGRvYywgJ21vdXNldXAnLCB0aGlzLmhhbmRsZU1vdXNlVXApO1xuICAgIHRoaXMub24oZG9jLCAndG91Y2hlbmQnLCB0aGlzLmhhbmRsZU1vdXNlVXApO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYG1vdXNldXBgIG9yIGB0b3VjaGVuZGAgZXZlbnRzIG9uIHRoZSBgUHJvZ3Jlc3NDb250cm9sYC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIGBtb3VzZXVwYCBvciBgdG91Y2hlbmRgIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRvdWNoZW5kXG4gICAqIEBsaXN0ZW5zIG1vdXNldXBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTW91c2VVcCA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoZXZlbnQpIHtcbiAgICB2YXIgZG9jID0gdGhpcy5lbF8ub3duZXJEb2N1bWVudDtcbiAgICB2YXIgc2Vla0JhciA9IHRoaXMuZ2V0Q2hpbGQoJ3NlZWtCYXInKTtcblxuICAgIGlmIChzZWVrQmFyKSB7XG4gICAgICBzZWVrQmFyLmhhbmRsZU1vdXNlVXAoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMub2ZmKGRvYywgJ21vdXNlbW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VTZWVrKTtcbiAgICB0aGlzLm9mZihkb2MsICd0b3VjaG1vdmUnLCB0aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlU2Vlayk7XG4gICAgdGhpcy5vZmYoZG9jLCAnbW91c2V1cCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gICAgdGhpcy5vZmYoZG9jLCAndG91Y2hlbmQnLCB0aGlzLmhhbmRsZU1vdXNlVXApO1xuICB9O1xuXG4gIHJldHVybiBQcm9ncmVzc0NvbnRyb2w7XG59KENvbXBvbmVudCk7XG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgYFByb2dyZXNzQ29udHJvbGBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuXG5cblByb2dyZXNzQ29udHJvbC5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIGNoaWxkcmVuOiBbJ3NlZWtCYXInXVxufTtcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUHJvZ3Jlc3NDb250cm9sJywgUHJvZ3Jlc3NDb250cm9sKTtcblxuLyoqXG4gKiBUb2dnbGUgUGljdHVyZS1pbi1QaWN0dXJlIG1vZGVcbiAqXG4gKiBAZXh0ZW5kcyBCdXR0b25cbiAqL1xuXG52YXIgUGljdHVyZUluUGljdHVyZVRvZ2dsZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0J1dHRvbikge1xuICBfaW5oZXJpdHNMb29zZShQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlLCBfQnV0dG9uKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI2VudGVycGljdHVyZWlucGljdHVyZVxuICAgKiBAbGlzdGVucyBQbGF5ZXIjbGVhdmVwaWN0dXJlaW5waWN0dXJlXG4gICAqL1xuICBmdW5jdGlvbiBQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0J1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLm9uKHBsYXllciwgWydlbnRlcnBpY3R1cmVpbnBpY3R1cmUnLCAnbGVhdmVwaWN0dXJlaW5waWN0dXJlJ10sIF90aGlzLmhhbmRsZVBpY3R1cmVJblBpY3R1cmVDaGFuZ2UpOyAvLyBUT0RPOiBBY3RpdmF0ZSBidXR0b24gb24gcGxheWVyIGxvYWRlZG1ldGFkYXRhIGV2ZW50LlxuICAgIC8vIFRPRE86IERlYWN0aXZhdGUgYnV0dG9uIG9uIHBsYXllciBlbXB0aWVkIGV2ZW50LlxuICAgIC8vIFRPRE86IERlYWN0aXZhdGUgYnV0dG9uIGlmIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlIGF0dHJpYnV0ZSBpcyBwcmVzZW50LlxuXG5cbiAgICBpZiAoIWRvY3VtZW50LnBpY3R1cmVJblBpY3R1cmVFbmFibGVkKSB7XG4gICAgICBfdGhpcy5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBpY3R1cmVJblBpY3R1cmVUb2dnbGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtcGljdHVyZS1pbi1waWN0dXJlLWNvbnRyb2wgXCIgKyBfQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZXMgZW50ZXJwaWN0dXJlaW5waWN0dXJlIGFuZCBsZWF2ZXBpY3R1cmVpbnBpY3R1cmUgb24gdGhlIHBsYXllciBhbmQgY2hhbmdlIGNvbnRyb2wgdGV4dCBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIHtAbGluayBQbGF5ZXIjZW50ZXJwaWN0dXJlaW5waWN0dXJlfSBvciB7QGxpbmsgUGxheWVyI2xlYXZlcGljdHVyZWlucGljdHVyZX0gZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjZW50ZXJwaWN0dXJlaW5waWN0dXJlXG4gICAqIEBsaXN0ZW5zIFBsYXllciNsZWF2ZXBpY3R1cmVpbnBpY3R1cmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlUGljdHVyZUluUGljdHVyZUNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZVBpY3R1cmVJblBpY3R1cmVDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLmlzSW5QaWN0dXJlSW5QaWN0dXJlKCkpIHtcbiAgICAgIHRoaXMuY29udHJvbFRleHQoJ0V4aXQgUGljdHVyZS1pbi1QaWN0dXJlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbFRleHQoJ1BpY3R1cmUtaW4tUGljdHVyZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGBQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlYCBpcyBcImNsaWNrZWRcIi4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnR9IGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgYSBjbGljayBjYW4gYmUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAsIGB0YXBgLCBvciBgY2xpY2tgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgICogICAgICAgIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgdGFwXG4gICAqIEBsaXN0ZW5zIGNsaWNrXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucGxheWVyXy5pc0luUGljdHVyZUluUGljdHVyZSgpKSB7XG4gICAgICB0aGlzLnBsYXllcl8ucmVxdWVzdFBpY3R1cmVJblBpY3R1cmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5ZXJfLmV4aXRQaWN0dXJlSW5QaWN0dXJlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlO1xufShCdXR0b24pO1xuLyoqXG4gKiBUaGUgdGV4dCB0aGF0IHNob3VsZCBkaXNwbGF5IG92ZXIgdGhlIGBQaWN0dXJlSW5QaWN0dXJlVG9nZ2xlYHMgY29udHJvbHMuIEFkZGVkIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5QaWN0dXJlSW5QaWN0dXJlVG9nZ2xlLnByb3RvdHlwZS5jb250cm9sVGV4dF8gPSAnUGljdHVyZS1pbi1QaWN0dXJlJztcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUGljdHVyZUluUGljdHVyZVRvZ2dsZScsIFBpY3R1cmVJblBpY3R1cmVUb2dnbGUpO1xuXG4vKipcbiAqIFRvZ2dsZSBmdWxsc2NyZWVuIHZpZGVvXG4gKlxuICogQGV4dGVuZHMgQnV0dG9uXG4gKi9cblxudmFyIEZ1bGxzY3JlZW5Ub2dnbGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9CdXR0b24pIHtcbiAgX2luaGVyaXRzTG9vc2UoRnVsbHNjcmVlblRvZ2dsZSwgX0J1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBGdWxsc2NyZWVuVG9nZ2xlKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0J1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBfdGhpcy5oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlKTtcblxuICAgIGlmIChkb2N1bWVudFtwbGF5ZXIuZnNBcGlfLmZ1bGxzY3JlZW5FbmFibGVkXSA9PT0gZmFsc2UpIHtcbiAgICAgIF90aGlzLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgZGVmYXVsdCBET00gYGNsYXNzTmFtZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgRE9NIGBjbGFzc05hbWVgIGZvciB0aGlzIG9iamVjdC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gRnVsbHNjcmVlblRvZ2dsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgXCIgKyBfQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZXMgZnVsbHNjcmVlbmNoYW5nZSBvbiB0aGUgcGxheWVyIGFuZCBjaGFuZ2UgY29udHJvbCB0ZXh0IGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUge0BsaW5rIFBsYXllciNmdWxsc2NyZWVuY2hhbmdlfSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICAqICAgICAgICBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNmdWxsc2NyZWVuY2hhbmdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUZ1bGxzY3JlZW5DaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVGdWxsc2NyZWVuQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMucGxheWVyXy5pc0Z1bGxzY3JlZW4oKSkge1xuICAgICAgdGhpcy5jb250cm9sVGV4dCgnTm9uLUZ1bGxzY3JlZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9sVGV4dCgnRnVsbHNjcmVlbicpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGBGdWxsc2NyZWVuVG9nZ2xlYCBpcyBcImNsaWNrZWRcIi4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnR9IGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgYSBjbGljayBjYW4gYmUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAsIGB0YXBgLCBvciBgY2xpY2tgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgICogICAgICAgIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgdGFwXG4gICAqIEBsaXN0ZW5zIGNsaWNrXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucGxheWVyXy5pc0Z1bGxzY3JlZW4oKSkge1xuICAgICAgdGhpcy5wbGF5ZXJfLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheWVyXy5leGl0RnVsbHNjcmVlbigpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gRnVsbHNjcmVlblRvZ2dsZTtcbn0oQnV0dG9uKTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBzaG91bGQgZGlzcGxheSBvdmVyIHRoZSBgRnVsbHNjcmVlblRvZ2dsZWBzIGNvbnRyb2xzLiBBZGRlZCBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuRnVsbHNjcmVlblRvZ2dsZS5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ0Z1bGxzY3JlZW4nO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdGdWxsc2NyZWVuVG9nZ2xlJywgRnVsbHNjcmVlblRvZ2dsZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgdm9sdW1lIGNvbnRyb2wgaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBpc24ndCBoaWRlIHRoZVxuICogYENvbXBvbmVudGAgdGhhdCB3YXMgcGFzc2VkICB1c2luZyB0aGUgYHZqcy1oaWRkZW5gIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBzZWxmXG4gKiAgICAgICAgVGhlIGNvbXBvbmVudCB0aGF0IHNob3VsZCBiZSBoaWRkZW4gaWYgdm9sdW1lIGlzIHVuc3VwcG9ydGVkXG4gKlxuICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICogICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBwbGF5ZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgY2hlY2tWb2x1bWVTdXBwb3J0ID0gZnVuY3Rpb24gY2hlY2tWb2x1bWVTdXBwb3J0KHNlbGYsIHBsYXllcikge1xuICAvLyBoaWRlIHZvbHVtZSBjb250cm9scyB3aGVuIHRoZXkncmUgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCB0ZWNoXG4gIGlmIChwbGF5ZXIudGVjaF8gJiYgIXBsYXllci50ZWNoXy5mZWF0dXJlc1ZvbHVtZUNvbnRyb2wpIHtcbiAgICBzZWxmLmFkZENsYXNzKCd2anMtaGlkZGVuJyk7XG4gIH1cblxuICBzZWxmLm9uKHBsYXllciwgJ2xvYWRzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBsYXllci50ZWNoXy5mZWF0dXJlc1ZvbHVtZUNvbnRyb2wpIHtcbiAgICAgIHNlbGYuYWRkQ2xhc3MoJ3Zqcy1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5yZW1vdmVDbGFzcygndmpzLWhpZGRlbicpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFNob3dzIHZvbHVtZSBsZXZlbFxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBWb2x1bWVMZXZlbCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShWb2x1bWVMZXZlbCwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVm9sdW1lTGV2ZWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFZvbHVtZUxldmVsLnByb3RvdHlwZTtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgQ29tcG9uZW50YCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtdm9sdW1lLWxldmVsJyxcbiAgICAgIGlubmVySFRNTDogJzxzcGFuIGNsYXNzPVwidmpzLWNvbnRyb2wtdGV4dFwiPjwvc3Bhbj4nXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFZvbHVtZUxldmVsO1xufShDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1ZvbHVtZUxldmVsJywgVm9sdW1lTGV2ZWwpO1xuXG4vKipcbiAqIFRoZSBiYXIgdGhhdCBjb250YWlucyB0aGUgdm9sdW1lIGxldmVsIGFuZCBjYW4gYmUgY2xpY2tlZCBvbiB0byBhZGp1c3QgdGhlIGxldmVsXG4gKlxuICogQGV4dGVuZHMgU2xpZGVyXG4gKi9cblxudmFyIFZvbHVtZUJhciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1NsaWRlcikge1xuICBfaW5oZXJpdHNMb29zZShWb2x1bWVCYXIsIF9TbGlkZXIpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gVm9sdW1lQmFyKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1NsaWRlci5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLm9uKCdzbGlkZXJhY3RpdmUnLCBfdGhpcy51cGRhdGVMYXN0Vm9sdW1lXyk7XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICd2b2x1bWVjaGFuZ2UnLCBfdGhpcy51cGRhdGVBUklBQXR0cmlidXRlcyk7XG5cbiAgICBwbGF5ZXIucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZUFSSUFBdHRyaWJ1dGVzKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBWb2x1bWVCYXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfU2xpZGVyLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtdm9sdW1lLWJhciB2anMtc2xpZGVyLWJhcidcbiAgICB9LCB7XG4gICAgICAnYXJpYS1sYWJlbCc6IHRoaXMubG9jYWxpemUoJ1ZvbHVtZSBMZXZlbCcpLFxuICAgICAgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBtb3VzZSBkb3duIG9uIHZvbHVtZSBiYXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBgbW91c2Vkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgbW91c2Vkb3duXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuICAgIGlmICghaXNTaW5nbGVMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgX1NsaWRlci5wcm90b3R5cGUuaGFuZGxlTW91c2VEb3duLmNhbGwodGhpcywgZXZlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgbW92ZW1lbnQgZXZlbnRzIG9uIHRoZSB7QGxpbmsgVm9sdW1lTWVudUJ1dHRvbn0uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIG1vdXNlbW92ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpIHtcbiAgICBpZiAoIWlzU2luZ2xlTGVmdENsaWNrKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tNdXRlZCgpO1xuICAgIHRoaXMucGxheWVyXy52b2x1bWUodGhpcy5jYWxjdWxhdGVEaXN0YW5jZShldmVudCkpO1xuICB9XG4gIC8qKlxuICAgKiBJZiB0aGUgcGxheWVyIGlzIG11dGVkIHVubXV0ZSBpdC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY2hlY2tNdXRlZCA9IGZ1bmN0aW9uIGNoZWNrTXV0ZWQoKSB7XG4gICAgaWYgKHRoaXMucGxheWVyXy5tdXRlZCgpKSB7XG4gICAgICB0aGlzLnBsYXllcl8ubXV0ZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IHBlcmNlbnQgb2Ygdm9sdW1lIGxldmVsXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBWb2x1bWUgbGV2ZWwgcGVyY2VudCBhcyBhIGRlY2ltYWwgbnVtYmVyLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRQZXJjZW50ID0gZnVuY3Rpb24gZ2V0UGVyY2VudCgpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLm11dGVkKCkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXllcl8udm9sdW1lKCk7XG4gIH1cbiAgLyoqXG4gICAqIEluY3JlYXNlIHZvbHVtZSBsZXZlbCBmb3Iga2V5Ym9hcmQgdXNlcnNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3RlcEZvcndhcmQgPSBmdW5jdGlvbiBzdGVwRm9yd2FyZCgpIHtcbiAgICB0aGlzLmNoZWNrTXV0ZWQoKTtcbiAgICB0aGlzLnBsYXllcl8udm9sdW1lKHRoaXMucGxheWVyXy52b2x1bWUoKSArIDAuMSk7XG4gIH1cbiAgLyoqXG4gICAqIERlY3JlYXNlIHZvbHVtZSBsZXZlbCBmb3Iga2V5Ym9hcmQgdXNlcnNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3RlcEJhY2sgPSBmdW5jdGlvbiBzdGVwQmFjaygpIHtcbiAgICB0aGlzLmNoZWNrTXV0ZWQoKTtcbiAgICB0aGlzLnBsYXllcl8udm9sdW1lKHRoaXMucGxheWVyXy52b2x1bWUoKSAtIDAuMSk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBBUklBIGFjY2Vzc2liaWxpdHkgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHZvbHVtZWNoYW5nZWAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciN2b2x1bWVjaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlQVJJQUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiB1cGRhdGVBUklBQXR0cmlidXRlcyhldmVudCkge1xuICAgIHZhciBhcmlhVmFsdWUgPSB0aGlzLnBsYXllcl8ubXV0ZWQoKSA/IDAgOiB0aGlzLnZvbHVtZUFzUGVyY2VudGFnZV8oKTtcbiAgICB0aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCBhcmlhVmFsdWUpO1xuICAgIHRoaXMuZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZXRleHQnLCBhcmlhVmFsdWUgKyAnJScpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwbGF5ZXIgdm9sdW1lIGFzIGEgcGVyY2VudGFnZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by52b2x1bWVBc1BlcmNlbnRhZ2VfID0gZnVuY3Rpb24gdm9sdW1lQXNQZXJjZW50YWdlXygpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnBsYXllcl8udm9sdW1lKCkgKiAxMDApO1xuICB9XG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgc3RhcnRzIGRyYWdnaW5nIHRoZSBWb2x1bWVCYXIsIHN0b3JlIHRoZSB2b2x1bWUgYW5kIGxpc3RlbiBmb3JcbiAgICogdGhlIGVuZCBvZiB0aGUgZHJhZy4gV2hlbiB0aGUgZHJhZyBlbmRzLCBpZiB0aGUgdm9sdW1lIHdhcyBzZXQgdG8gemVybyxcbiAgICogc2V0IGxhc3RWb2x1bWUgdG8gdGhlIHN0b3JlZCB2b2x1bWUuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHNsaWRlcmFjdGl2ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVMYXN0Vm9sdW1lXyA9IGZ1bmN0aW9uIHVwZGF0ZUxhc3RWb2x1bWVfKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIHZvbHVtZUJlZm9yZURyYWcgPSB0aGlzLnBsYXllcl8udm9sdW1lKCk7XG4gICAgdGhpcy5vbmUoJ3NsaWRlcmluYWN0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzMi5wbGF5ZXJfLnZvbHVtZSgpID09PSAwKSB7XG4gICAgICAgIF90aGlzMi5wbGF5ZXJfLmxhc3RWb2x1bWVfKHZvbHVtZUJlZm9yZURyYWcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBWb2x1bWVCYXI7XG59KFNsaWRlcik7XG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGBWb2x1bWVCYXJgXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5Wb2x1bWVCYXIucHJvdG90eXBlLm9wdGlvbnNfID0ge1xuICBjaGlsZHJlbjogWyd2b2x1bWVMZXZlbCddLFxuICBiYXJOYW1lOiAndm9sdW1lTGV2ZWwnXG59O1xuLyoqXG4gKiBDYWxsIHRoZSB1cGRhdGUgZXZlbnQgZm9yIHRoaXMgU2xpZGVyIHdoZW4gdGhpcyBldmVudCBoYXBwZW5zIG9uIHRoZSBwbGF5ZXIuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuXG5Wb2x1bWVCYXIucHJvdG90eXBlLnBsYXllckV2ZW50ID0gJ3ZvbHVtZWNoYW5nZSc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1ZvbHVtZUJhcicsIFZvbHVtZUJhcik7XG5cbi8qKlxuICogVGhlIGNvbXBvbmVudCBmb3IgY29udHJvbGxpbmcgdGhlIHZvbHVtZSBsZXZlbFxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBWb2x1bWVDb250cm9sID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFZvbHVtZUNvbnRyb2wsIF9Db21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gVm9sdW1lQ29udHJvbChwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgb3B0aW9ucy52ZXJ0aWNhbCA9IG9wdGlvbnMudmVydGljYWwgfHwgZmFsc2U7IC8vIFBhc3MgdGhlIHZlcnRpY2FsIG9wdGlvbiBkb3duIHRvIHRoZSBWb2x1bWVCYXIgaWZcbiAgICAvLyB0aGUgVm9sdW1lQmFyIGlzIHR1cm5lZCBvbi5cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52b2x1bWVCYXIgPT09ICd1bmRlZmluZWQnIHx8IGlzUGxhaW4ob3B0aW9ucy52b2x1bWVCYXIpKSB7XG4gICAgICBvcHRpb25zLnZvbHVtZUJhciA9IG9wdGlvbnMudm9sdW1lQmFyIHx8IHt9O1xuICAgICAgb3B0aW9ucy52b2x1bWVCYXIudmVydGljYWwgPSBvcHRpb25zLnZlcnRpY2FsO1xuICAgIH1cblxuICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpczsgLy8gaGlkZSB0aGlzIGNvbnRyb2wgaWYgdm9sdW1lIHN1cHBvcnQgaXMgbWlzc2luZ1xuXG4gICAgY2hlY2tWb2x1bWVTdXBwb3J0KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBwbGF5ZXIpO1xuICAgIF90aGlzLnRocm90dGxlZEhhbmRsZU1vdXNlTW92ZSA9IHRocm90dGxlKGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmhhbmRsZU1vdXNlTW92ZSksIFVQREFURV9SRUZSRVNIX0lOVEVSVkFMKTtcblxuICAgIF90aGlzLm9uKCdtb3VzZWRvd24nLCBfdGhpcy5oYW5kbGVNb3VzZURvd24pO1xuXG4gICAgX3RoaXMub24oJ3RvdWNoc3RhcnQnLCBfdGhpcy5oYW5kbGVNb3VzZURvd24pOyAvLyB3aGlsZSB0aGUgc2xpZGVyIGlzIGFjdGl2ZSAodGhlIG1vdXNlIGhhcyBiZWVuIHByZXNzZWQgZG93biBhbmRcbiAgICAvLyBpcyBkcmFnZ2luZykgb3IgaW4gZm9jdXMgd2UgZG8gbm90IHdhbnQgdG8gaGlkZSB0aGUgVm9sdW1lQmFyXG5cblxuICAgIF90aGlzLm9uKF90aGlzLnZvbHVtZUJhciwgWydmb2N1cycsICdzbGlkZXJhY3RpdmUnXSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMudm9sdW1lQmFyLmFkZENsYXNzKCd2anMtc2xpZGVyLWFjdGl2ZScpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcygndmpzLXNsaWRlci1hY3RpdmUnKTtcblxuICAgICAgX3RoaXMudHJpZ2dlcignc2xpZGVyYWN0aXZlJyk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy52b2x1bWVCYXIsIFsnYmx1cicsICdzbGlkZXJpbmFjdGl2ZSddLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy52b2x1bWVCYXIucmVtb3ZlQ2xhc3MoJ3Zqcy1zbGlkZXItYWN0aXZlJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzKCd2anMtc2xpZGVyLWFjdGl2ZScpO1xuXG4gICAgICBfdGhpcy50cmlnZ2VyKCdzbGlkZXJpbmFjdGl2ZScpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBWb2x1bWVDb250cm9sLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCgpIHtcbiAgICB2YXIgb3JpZW50YXRpb25DbGFzcyA9ICd2anMtdm9sdW1lLWhvcml6b250YWwnO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc18udmVydGljYWwpIHtcbiAgICAgIG9yaWVudGF0aW9uQ2xhc3MgPSAndmpzLXZvbHVtZS12ZXJ0aWNhbCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ2anMtdm9sdW1lLWNvbnRyb2wgdmpzLWNvbnRyb2wgXCIgKyBvcmllbnRhdGlvbkNsYXNzXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnRzIG9uIHRoZSBgVm9sdW1lQ29udHJvbGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZWRvd25cbiAgICogQGxpc3RlbnMgdG91Y2hzdGFydFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZURvd24gPSBmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZXZlbnQpIHtcbiAgICB2YXIgZG9jID0gdGhpcy5lbF8ub3duZXJEb2N1bWVudDtcbiAgICB0aGlzLm9uKGRvYywgJ21vdXNlbW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlKTtcbiAgICB0aGlzLm9uKGRvYywgJ3RvdWNobW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlKTtcbiAgICB0aGlzLm9uKGRvYywgJ21vdXNldXAnLCB0aGlzLmhhbmRsZU1vdXNlVXApO1xuICAgIHRoaXMub24oZG9jLCAndG91Y2hlbmQnLCB0aGlzLmhhbmRsZU1vdXNlVXApO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYG1vdXNldXBgIG9yIGB0b3VjaGVuZGAgZXZlbnRzIG9uIHRoZSBgVm9sdW1lQ29udHJvbGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBgbW91c2V1cGAgb3IgYHRvdWNoZW5kYCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAbGlzdGVucyB0b3VjaGVuZFxuICAgKiBAbGlzdGVucyBtb3VzZXVwXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZU1vdXNlVXAgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2ZW50KSB7XG4gICAgdmFyIGRvYyA9IHRoaXMuZWxfLm93bmVyRG9jdW1lbnQ7XG4gICAgdGhpcy5vZmYoZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy50aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMub2ZmKGRvYywgJ3RvdWNobW92ZScsIHRoaXMudGhyb3R0bGVkSGFuZGxlTW91c2VNb3ZlKTtcbiAgICB0aGlzLm9mZihkb2MsICdtb3VzZXVwJywgdGhpcy5oYW5kbGVNb3VzZVVwKTtcbiAgICB0aGlzLm9mZihkb2MsICd0b3VjaGVuZCcsIHRoaXMuaGFuZGxlTW91c2VVcCk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnRzIG9uIHRoZSBgVm9sdW1lQ29udHJvbGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBgbW91c2Vkb3duYCBvciBgdG91Y2hzdGFydGAgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZWRvd25cbiAgICogQGxpc3RlbnMgdG91Y2hzdGFydFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpIHtcbiAgICB0aGlzLnZvbHVtZUJhci5oYW5kbGVNb3VzZU1vdmUoZXZlbnQpO1xuICB9O1xuXG4gIHJldHVybiBWb2x1bWVDb250cm9sO1xufShDb21wb25lbnQpO1xuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBgVm9sdW1lQ29udHJvbGBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuXG5cblZvbHVtZUNvbnRyb2wucHJvdG90eXBlLm9wdGlvbnNfID0ge1xuICBjaGlsZHJlbjogWyd2b2x1bWVCYXInXVxufTtcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnVm9sdW1lQ29udHJvbCcsIFZvbHVtZUNvbnRyb2wpO1xuXG4vKipcbiAqIENoZWNrIGlmIG11dGluZyB2b2x1bWUgaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBpc24ndCBoaWRlIHRoZSBtdXRlIHRvZ2dsZVxuICogYnV0dG9uLlxuICpcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBzZWxmXG4gKiAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG11dGUgdG9nZ2xlIGJ1dHRvblxuICpcbiAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAqICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgcGxheWVyXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIGNoZWNrTXV0ZVN1cHBvcnQgPSBmdW5jdGlvbiBjaGVja011dGVTdXBwb3J0KHNlbGYsIHBsYXllcikge1xuICAvLyBoaWRlIG11dGUgdG9nZ2xlIGJ1dHRvbiBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgdGVjaFxuICBpZiAocGxheWVyLnRlY2hfICYmICFwbGF5ZXIudGVjaF8uZmVhdHVyZXNNdXRlQ29udHJvbCkge1xuICAgIHNlbGYuYWRkQ2xhc3MoJ3Zqcy1oaWRkZW4nKTtcbiAgfVxuXG4gIHNlbGYub24ocGxheWVyLCAnbG9hZHN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGxheWVyLnRlY2hfLmZlYXR1cmVzTXV0ZUNvbnRyb2wpIHtcbiAgICAgIHNlbGYuYWRkQ2xhc3MoJ3Zqcy1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5yZW1vdmVDbGFzcygndmpzLWhpZGRlbicpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIEEgYnV0dG9uIGNvbXBvbmVudCBmb3IgbXV0aW5nIHRoZSBhdWRpby5cbiAqXG4gKiBAZXh0ZW5kcyBCdXR0b25cbiAqL1xuXG52YXIgTXV0ZVRvZ2dsZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0J1dHRvbikge1xuICBfaW5oZXJpdHNMb29zZShNdXRlVG9nZ2xlLCBfQnV0dG9uKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIE11dGVUb2dnbGUocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzOyAvLyBoaWRlIHRoaXMgY29udHJvbCBpZiB2b2x1bWUgc3VwcG9ydCBpcyBtaXNzaW5nXG5cbiAgICBjaGVja011dGVTdXBwb3J0KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBwbGF5ZXIpO1xuXG4gICAgX3RoaXMub24ocGxheWVyLCBbJ2xvYWRzdGFydCcsICd2b2x1bWVjaGFuZ2UnXSwgX3RoaXMudXBkYXRlKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNdXRlVG9nZ2xlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGRDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwidmpzLW11dGUtY29udHJvbCBcIiArIF9CdXR0b24ucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGBNdXRlVG9nZ2xlYCBpcyBcImNsaWNrZWRcIi4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnR9IGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgYSBjbGljayBjYW4gYmUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAsIGB0YXBgLCBvciBgY2xpY2tgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgICogICAgICAgIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgdGFwXG4gICAqIEBsaXN0ZW5zIGNsaWNrXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICB2YXIgdm9sID0gdGhpcy5wbGF5ZXJfLnZvbHVtZSgpO1xuICAgIHZhciBsYXN0Vm9sdW1lID0gdGhpcy5wbGF5ZXJfLmxhc3RWb2x1bWVfKCk7XG5cbiAgICBpZiAodm9sID09PSAwKSB7XG4gICAgICB2YXIgdm9sdW1lVG9TZXQgPSBsYXN0Vm9sdW1lIDwgMC4xID8gMC4xIDogbGFzdFZvbHVtZTtcbiAgICAgIHRoaXMucGxheWVyXy52b2x1bWUodm9sdW1lVG9TZXQpO1xuICAgICAgdGhpcy5wbGF5ZXJfLm11dGVkKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5ZXJfLm11dGVkKHRoaXMucGxheWVyXy5tdXRlZCgpID8gZmFsc2UgOiB0cnVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgYE11dGVUb2dnbGVgIGJ1dHRvbiBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgYHZvbHVtZWAgYW5kIGBtdXRlZGBcbiAgICogb24gdGhlIHBsYXllci5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIHtAbGluayBQbGF5ZXIjbG9hZHN0YXJ0fSBldmVudCBpZiB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWRcbiAgICogICAgICAgIHRocm91Z2ggYW4gZXZlbnQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNsb2Fkc3RhcnRcbiAgICogQGxpc3RlbnMgUGxheWVyI3ZvbHVtZWNoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZXZlbnQpIHtcbiAgICB0aGlzLnVwZGF0ZUljb25fKCk7XG4gICAgdGhpcy51cGRhdGVDb250cm9sVGV4dF8oKTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBgTXV0ZVRvZ2dsZWAgaWNvbi5cbiAgICpcbiAgICogUG9zc2libGUgc3RhdGVzIChnaXZlbiBgbGV2ZWxgIHZhcmlhYmxlIGJlbG93KTpcbiAgICogLSAwOiBjcm9zc2VkIG91dFxuICAgKiAtIDE6IHplcm8gYmFycyBvZiB2b2x1bWVcbiAgICogLSAyOiBvbmUgYmFyIG9mIHZvbHVtZVxuICAgKiAtIDM6IHR3byBiYXJzIG9mIHZvbHVtZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGVJY29uXyA9IGZ1bmN0aW9uIHVwZGF0ZUljb25fKCkge1xuICAgIHZhciB2b2wgPSB0aGlzLnBsYXllcl8udm9sdW1lKCk7XG4gICAgdmFyIGxldmVsID0gMzsgLy8gaW4gaU9TIHdoZW4gYSBwbGF5ZXIgaXMgbG9hZGVkIHdpdGggbXV0ZWQgYXR0cmlidXRlXG4gICAgLy8gYW5kIHZvbHVtZSBpcyBjaGFuZ2VkIHdpdGggYSBuYXRpdmUgbXV0ZSBidXR0b25cbiAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBtdXRlZCBzdGF0ZSBpcyB1cGRhdGVkXG5cbiAgICBpZiAoSVNfSU9TICYmIHRoaXMucGxheWVyXy50ZWNoXyAmJiB0aGlzLnBsYXllcl8udGVjaF8uZWxfKSB7XG4gICAgICB0aGlzLnBsYXllcl8ubXV0ZWQodGhpcy5wbGF5ZXJfLnRlY2hfLmVsXy5tdXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKHZvbCA9PT0gMCB8fCB0aGlzLnBsYXllcl8ubXV0ZWQoKSkge1xuICAgICAgbGV2ZWwgPSAwO1xuICAgIH0gZWxzZSBpZiAodm9sIDwgMC4zMykge1xuICAgICAgbGV2ZWwgPSAxO1xuICAgIH0gZWxzZSBpZiAodm9sIDwgMC42Nykge1xuICAgICAgbGV2ZWwgPSAyO1xuICAgIH0gLy8gVE9ETyBpbXByb3ZlIG11dGVkIGljb24gY2xhc3Nlc1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbF8sIFwidmpzLXZvbC1cIiArIGkpO1xuICAgIH1cblxuICAgIGFkZENsYXNzKHRoaXMuZWxfLCBcInZqcy12b2wtXCIgKyBsZXZlbCk7XG4gIH1cbiAgLyoqXG4gICAqIElmIGBtdXRlZGAgaGFzIGNoYW5nZWQgb24gdGhlIHBsYXllciwgdXBkYXRlIHRoZSBjb250cm9sIHRleHRcbiAgICogKGB0aXRsZWAgYXR0cmlidXRlIG9uIGB2anMtbXV0ZS1jb250cm9sYCBlbGVtZW50IGFuZCBjb250ZW50IG9mXG4gICAqIGB2anMtY29udHJvbC10ZXh0YCBlbGVtZW50KS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlQ29udHJvbFRleHRfID0gZnVuY3Rpb24gdXBkYXRlQ29udHJvbFRleHRfKCkge1xuICAgIHZhciBzb3VuZE9mZiA9IHRoaXMucGxheWVyXy5tdXRlZCgpIHx8IHRoaXMucGxheWVyXy52b2x1bWUoKSA9PT0gMDtcbiAgICB2YXIgdGV4dCA9IHNvdW5kT2ZmID8gJ1VubXV0ZScgOiAnTXV0ZSc7XG5cbiAgICBpZiAodGhpcy5jb250cm9sVGV4dCgpICE9PSB0ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRyb2xUZXh0KHRleHQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTXV0ZVRvZ2dsZTtcbn0oQnV0dG9uKTtcbi8qKlxuICogVGhlIHRleHQgdGhhdCBzaG91bGQgZGlzcGxheSBvdmVyIHRoZSBgTXV0ZVRvZ2dsZWBzIGNvbnRyb2xzLiBBZGRlZCBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuTXV0ZVRvZ2dsZS5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ011dGUnO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdNdXRlVG9nZ2xlJywgTXV0ZVRvZ2dsZSk7XG5cbi8qKlxuICogQSBDb21wb25lbnQgdG8gY29udGFpbiB0aGUgTXV0ZVRvZ2dsZSBhbmQgVm9sdW1lQ29udHJvbCBzbyB0aGF0XG4gKiB0aGV5IGNhbiB3b3JrIHRvZ2V0aGVyLlxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBWb2x1bWVQYW5lbCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShWb2x1bWVQYW5lbCwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBWb2x1bWVQYW5lbChwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmlubGluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdGlvbnMuaW5saW5lID0gb3B0aW9ucy5pbmxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaW5saW5lID0gdHJ1ZTtcbiAgICB9IC8vIHBhc3MgdGhlIGlubGluZSBvcHRpb24gZG93biB0byB0aGUgVm9sdW1lQ29udHJvbCBhcyB2ZXJ0aWNhbCBpZlxuICAgIC8vIHRoZSBWb2x1bWVDb250cm9sIGlzIG9uLlxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudm9sdW1lQ29udHJvbCA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNQbGFpbihvcHRpb25zLnZvbHVtZUNvbnRyb2wpKSB7XG4gICAgICBvcHRpb25zLnZvbHVtZUNvbnRyb2wgPSBvcHRpb25zLnZvbHVtZUNvbnRyb2wgfHwge307XG4gICAgICBvcHRpb25zLnZvbHVtZUNvbnRyb2wudmVydGljYWwgPSAhb3B0aW9ucy5pbmxpbmU7XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMub24ocGxheWVyLCBbJ2xvYWRzdGFydCddLCBfdGhpcy52b2x1bWVQYW5lbFN0YXRlXyk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy5tdXRlVG9nZ2xlLCAna2V5dXAnLCBfdGhpcy5oYW5kbGVLZXlQcmVzcyk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy52b2x1bWVDb250cm9sLCAna2V5dXAnLCBfdGhpcy5oYW5kbGVWb2x1bWVDb250cm9sS2V5VXApO1xuXG4gICAgX3RoaXMub24oJ2tleWRvd24nLCBfdGhpcy5oYW5kbGVLZXlQcmVzcyk7XG5cbiAgICBfdGhpcy5vbignbW91c2VvdmVyJywgX3RoaXMuaGFuZGxlTW91c2VPdmVyKTtcblxuICAgIF90aGlzLm9uKCdtb3VzZW91dCcsIF90aGlzLmhhbmRsZU1vdXNlT3V0KTsgLy8gd2hpbGUgdGhlIHNsaWRlciBpcyBhY3RpdmUgKHRoZSBtb3VzZSBoYXMgYmVlbiBwcmVzc2VkIGRvd24gYW5kXG4gICAgLy8gaXMgZHJhZ2dpbmcpIHdlIGRvIG5vdCB3YW50IHRvIGhpZGUgdGhlIFZvbHVtZUJhclxuXG5cbiAgICBfdGhpcy5vbihfdGhpcy52b2x1bWVDb250cm9sLCBbJ3NsaWRlcmFjdGl2ZSddLCBfdGhpcy5zbGlkZXJBY3RpdmVfKTtcblxuICAgIF90aGlzLm9uKF90aGlzLnZvbHVtZUNvbnRyb2wsIFsnc2xpZGVyaW5hY3RpdmUnXSwgX3RoaXMuc2xpZGVySW5hY3RpdmVfKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkIHZqcy1zbGlkZXItYWN0aXZlIGNsYXNzIHRvIHRoZSBWb2x1bWVQYW5lbFxuICAgKlxuICAgKiBAbGlzdGVucyBWb2x1bWVDb250cm9sI3NsaWRlcmFjdGl2ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBWb2x1bWVQYW5lbC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNsaWRlckFjdGl2ZV8gPSBmdW5jdGlvbiBzbGlkZXJBY3RpdmVfKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1zbGlkZXItYWN0aXZlJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgdmpzLXNsaWRlci1hY3RpdmUgY2xhc3MgdG8gdGhlIFZvbHVtZVBhbmVsXG4gICAqXG4gICAqIEBsaXN0ZW5zIFZvbHVtZUNvbnRyb2wjc2xpZGVyaW5hY3RpdmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2xpZGVySW5hY3RpdmVfID0gZnVuY3Rpb24gc2xpZGVySW5hY3RpdmVfKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1zbGlkZXItYWN0aXZlJyk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgdmpzLWhpZGRlbiBvciB2anMtbXV0ZS10b2dnbGUtb25seSB0byB0aGUgVm9sdW1lUGFuZWxcbiAgICogZGVwZW5kaW5nIG9uIE11dGVUb2dnbGUgYW5kIFZvbHVtZUNvbnRyb2wgc3RhdGVcbiAgICpcbiAgICogQGxpc3RlbnMgUGxheWVyI2xvYWRzdGFydFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by52b2x1bWVQYW5lbFN0YXRlXyA9IGZ1bmN0aW9uIHZvbHVtZVBhbmVsU3RhdGVfKCkge1xuICAgIC8vIGhpZGUgdm9sdW1lIHBhbmVsIGlmIG5laXRoZXIgdm9sdW1lIGNvbnRyb2wgb3IgbXV0ZSB0b2dnbGVcbiAgICAvLyBhcmUgZGlzcGxheWVkXG4gICAgaWYgKHRoaXMudm9sdW1lQ29udHJvbC5oYXNDbGFzcygndmpzLWhpZGRlbicpICYmIHRoaXMubXV0ZVRvZ2dsZS5oYXNDbGFzcygndmpzLWhpZGRlbicpKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtaGlkZGVuJyk7XG4gICAgfSAvLyBpZiBvbmx5IG11dGUgdG9nZ2xlIGlzIHZpc2libGUgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHZvbHVtZSBwYW5lbCBleHBhbmRpbmcgd2hlbiBob3ZlcmVkIG9yIGFjdGl2ZVxuXG5cbiAgICBpZiAodGhpcy52b2x1bWVDb250cm9sLmhhc0NsYXNzKCd2anMtaGlkZGVuJykgJiYgIXRoaXMubXV0ZVRvZ2dsZS5oYXNDbGFzcygndmpzLWhpZGRlbicpKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtbXV0ZS10b2dnbGUtb25seScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgQ29tcG9uZW50YCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCgpIHtcbiAgICB2YXIgb3JpZW50YXRpb25DbGFzcyA9ICd2anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwnO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnNfLmlubGluZSkge1xuICAgICAgb3JpZW50YXRpb25DbGFzcyA9ICd2anMtdm9sdW1lLXBhbmVsLXZlcnRpY2FsJztcbiAgICB9XG5cbiAgICByZXR1cm4gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jywge1xuICAgICAgY2xhc3NOYW1lOiBcInZqcy12b2x1bWUtcGFuZWwgdmpzLWNvbnRyb2wgXCIgKyBvcmllbnRhdGlvbkNsYXNzXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIERpc3Bvc2Ugb2YgdGhlIGB2b2x1bWUtcGFuZWxgIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5oYW5kbGVNb3VzZU91dCgpO1xuXG4gICAgX0NvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGVzIGBrZXl1cGAgZXZlbnRzIG9uIHRoZSBgVm9sdW1lQ29udHJvbGAsIGxvb2tpbmcgZm9yIEVTQywgd2hpY2ggY2xvc2VzXG4gICAqIHRoZSB2b2x1bWUgcGFuZWwgYW5kIHNldHMgZm9jdXMgb24gYE11dGVUb2dnbGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXl1cGAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleXVwXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVZvbHVtZUNvbnRyb2xLZXlVcCA9IGZ1bmN0aW9uIGhhbmRsZVZvbHVtZUNvbnRyb2xLZXlVcChldmVudCkge1xuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFc2MnKSkge1xuICAgICAgdGhpcy5tdXRlVG9nZ2xlLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gYSBgVm9sdW1lUGFuZWxgIGdhaW5zIGhvdmVyIHZpYSBhIGBtb3VzZW92ZXJgIGV2ZW50LlxuICAgKiBUdXJucyBvbiBsaXN0ZW5pbmcgZm9yIGBtb3VzZW92ZXJgIGV2ZW50LiBXaGVuIHRoZXkgaGFwcGVuIGl0XG4gICAqIGNhbGxzIGB0aGlzLmhhbmRsZU1vdXNlT3ZlcmAuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYG1vdXNlb3ZlcmAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIG1vdXNlb3ZlclxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZU92ZXIgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZXZlbnQpIHtcbiAgICB0aGlzLmFkZENsYXNzKCd2anMtaG92ZXInKTtcbiAgICBvbihkb2N1bWVudCwgJ2tleXVwJywgYmluZCh0aGlzLCB0aGlzLmhhbmRsZUtleVByZXNzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhIGBWb2x1bWVQYW5lbGAgZ2FpbnMgaG92ZXIgdmlhIGEgYG1vdXNlb3V0YCBldmVudC5cbiAgICogVHVybnMgb24gbGlzdGVuaW5nIGZvciBgbW91c2VvdXRgIGV2ZW50LiBXaGVuIHRoZXkgaGFwcGVuIGl0XG4gICAqIGNhbGxzIGB0aGlzLmhhbmRsZU1vdXNlT3V0YC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBgbW91c2VvdXRgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyBtb3VzZW91dFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZU91dCA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGV2ZW50KSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWhvdmVyJyk7XG4gICAgb2ZmKGRvY3VtZW50LCAna2V5dXAnLCBiaW5kKHRoaXMsIHRoaXMuaGFuZGxlS2V5UHJlc3MpKTtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlcyBga2V5dXBgIGV2ZW50IG9uIHRoZSBkb2N1bWVudCBvciBga2V5ZG93bmAgZXZlbnQgb24gdGhlIGBWb2x1bWVQYW5lbGAsXG4gICAqIGxvb2tpbmcgZm9yIEVTQywgd2hpY2ggaGlkZXMgdGhlIGBWb2x1bWVDb250cm9sYC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBrZXlwcmVzcyB0aGF0IHRyaWdnZXJlZCB0aGlzIGV2ZW50LlxuICAgKlxuICAgKiBAbGlzdGVucyBrZXlkb3duIHwga2V5dXBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5UHJlc3MgPSBmdW5jdGlvbiBoYW5kbGVLZXlQcmVzcyhldmVudCkge1xuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFc2MnKSkge1xuICAgICAgdGhpcy5oYW5kbGVNb3VzZU91dCgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVm9sdW1lUGFuZWw7XG59KENvbXBvbmVudCk7XG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGBWb2x1bWVDb250cm9sYFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuVm9sdW1lUGFuZWwucHJvdG90eXBlLm9wdGlvbnNfID0ge1xuICBjaGlsZHJlbjogWydtdXRlVG9nZ2xlJywgJ3ZvbHVtZUNvbnRyb2wnXVxufTtcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnVm9sdW1lUGFuZWwnLCBWb2x1bWVQYW5lbCk7XG5cbi8qKlxuICogVGhlIE1lbnUgY29tcG9uZW50IGlzIHVzZWQgdG8gYnVpbGQgcG9wdXAgbWVudXMsIGluY2x1ZGluZyBzdWJ0aXRsZSBhbmRcbiAqIGNhcHRpb25zIHNlbGVjdGlvbiBtZW51cy5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgTWVudSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShNZW51LCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIHRoZSBwbGF5ZXIgdGhhdCB0aGlzIGNvbXBvbmVudCBzaG91bGQgYXR0YWNoIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIE9iamVjdCBvZiBvcHRpb24gbmFtZXMgYW5kIHZhbHVlc1xuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gTWVudShwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgX3RoaXMubWVudUJ1dHRvbl8gPSBvcHRpb25zLm1lbnVCdXR0b247XG4gICAgfVxuXG4gICAgX3RoaXMuZm9jdXNlZENoaWxkXyA9IC0xO1xuXG4gICAgX3RoaXMub24oJ2tleWRvd24nLCBfdGhpcy5oYW5kbGVLZXlEb3duKTsgLy8gQWxsIHRoZSBtZW51IGl0ZW0gaW5zdGFuY2VzIHNoYXJlIHRoZSBzYW1lIGJsdXIgaGFuZGxlciBwcm92aWRlZCBieSB0aGUgbWVudSBjb250YWluZXIuXG5cblxuICAgIF90aGlzLmJvdW5kSGFuZGxlQmx1cl8gPSBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBfdGhpcy5oYW5kbGVCbHVyKTtcbiAgICBfdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXyA9IGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmhhbmRsZVRhcENsaWNrKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHtAbGluayBNZW51SXRlbX0uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb21wb25lbnRcbiAgICogICAgICAgIFRoZSBpbnN0YW5jZSBvZiB0aGUgYE1lbnVJdGVtYCB0byBhZGQgbGlzdGVuZXJzIHRvLlxuICAgKlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNZW51LnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkRXZlbnRMaXN0ZW5lckZvckl0ZW0gPSBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyRm9ySXRlbShjb21wb25lbnQpIHtcbiAgICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbihjb21wb25lbnQsICdibHVyJywgdGhpcy5ib3VuZEhhbmRsZUJsdXJfKTtcbiAgICB0aGlzLm9uKGNvbXBvbmVudCwgWyd0YXAnLCAnY2xpY2snXSwgdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUge0BsaW5rIE1lbnVJdGVtfS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudFxuICAgKiAgICAgICAgVGhlIGluc3RhbmNlIG9mIHRoZSBgTWVudUl0ZW1gIHRvIHJlbW92ZSBsaXN0ZW5lcnMuXG4gICAqXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JJdGVtID0gZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lckZvckl0ZW0oY29tcG9uZW50KSB7XG4gICAgaWYgKCEoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2ZmKGNvbXBvbmVudCwgJ2JsdXInLCB0aGlzLmJvdW5kSGFuZGxlQmx1cl8pO1xuICAgIHRoaXMub2ZmKGNvbXBvbmVudCwgWyd0YXAnLCAnY2xpY2snXSwgdGhpcy5ib3VuZEhhbmRsZVRhcENsaWNrXyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGluZGlyZWN0bHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGFkZGVkXG4gICAqIGJlZm9yZSB0aGUgY29tcG9uZW50IGFkZHMgdG8gdGhlIG5ldyBtZW51IGluc3RhbmNlIGJ5IGBhZGRJdGVtYC5cbiAgICogSW4gdGhpcyBjYXNlLCB0aGUgb3JpZ2luYWwgbWVudSBpbnN0YW5jZSB3aWxsIHJlbW92ZSB0aGUgY29tcG9uZW50XG4gICAqIGJ5IGNhbGxpbmcgYHJlbW92ZUNoaWxkYC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudFxuICAgKiAgICAgICAgVGhlIGluc3RhbmNlIG9mIHRoZSBgTWVudUl0ZW1gXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGQoY29tcG9uZW50KSB7XG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb21wb25lbnQgPSB0aGlzLmdldENoaWxkKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyRm9ySXRlbShjb21wb25lbnQpO1xuXG4gICAgX0NvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQuY2FsbCh0aGlzLCBjb21wb25lbnQpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSB7QGxpbmsgTWVudUl0ZW19IHRvIHRoZSBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IGNvbXBvbmVudFxuICAgKiAgICAgICAgVGhlIG5hbWUgb3IgaW5zdGFuY2Ugb2YgdGhlIGBNZW51SXRlbWAgdG8gYWRkLlxuICAgKlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRJdGVtID0gZnVuY3Rpb24gYWRkSXRlbShjb21wb25lbnQpIHtcbiAgICB2YXIgY2hpbGRDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKGNvbXBvbmVudCk7XG5cbiAgICBpZiAoY2hpbGRDb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lckZvckl0ZW0oY2hpbGRDb21wb25lbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgTWVudWBzIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIHRoZSBlbGVtZW50IHRoYXQgd2FzIGNyZWF0ZWRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCQxKCkge1xuICAgIHZhciBjb250ZW50RWxUeXBlID0gdGhpcy5vcHRpb25zXy5jb250ZW50RWxUeXBlIHx8ICd1bCc7XG4gICAgdGhpcy5jb250ZW50RWxfID0gY3JlYXRlRWwoY29udGVudEVsVHlwZSwge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLW1lbnUtY29udGVudCdcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRlbnRFbF8uc2V0QXR0cmlidXRlKCdyb2xlJywgJ21lbnUnKTtcblxuICAgIHZhciBlbCA9IF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2RpdicsIHtcbiAgICAgIGFwcGVuZDogdGhpcy5jb250ZW50RWxfLFxuICAgICAgY2xhc3NOYW1lOiAndmpzLW1lbnUnXG4gICAgfSk7XG5cbiAgICBlbC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbF8pOyAvLyBQcmV2ZW50IGNsaWNrcyBmcm9tIGJ1YmJsaW5nIHVwLiBOZWVkZWQgZm9yIE1lbnUgQnV0dG9ucyxcbiAgICAvLyB3aGVyZSBhIGNsaWNrIG9uIHRoZSBwYXJlbnQgaXMgc2lnbmlmaWNhbnRcblxuICAgIG9uKGVsLCAnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWw7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMuY29udGVudEVsXyA9IG51bGw7XG4gICAgdGhpcy5ib3VuZEhhbmRsZUJsdXJfID0gbnVsbDtcbiAgICB0aGlzLmJvdW5kSGFuZGxlVGFwQ2xpY2tfID0gbnVsbDtcblxuICAgIF9Db21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBgTWVudUl0ZW1gIGxvc2VzIGZvY3VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBibHVyYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgYmx1clxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVCbHVyID0gZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyAvLyBDbG9zZSBtZW51IHBvcHVwIHdoZW4gYSB1c2VyIGNsaWNrcyBvdXRzaWRlIHRoZSBtZW51XG5cbiAgICBpZiAoIXRoaXMuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5lbCgpID09PSByZWxhdGVkVGFyZ2V0O1xuICAgIH0pKSB7XG4gICAgICB2YXIgYnRuID0gdGhpcy5tZW51QnV0dG9uXztcblxuICAgICAgaWYgKGJ0biAmJiBidG4uYnV0dG9uUHJlc3NlZF8gJiYgcmVsYXRlZFRhcmdldCAhPT0gYnRuLmVsKCkuZmlyc3RDaGlsZCkge1xuICAgICAgICBidG4udW5wcmVzc0J1dHRvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBgTWVudUl0ZW1gIGdldHMgY2xpY2tlZCBvciB0YXBwZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGNsaWNrYCBvciBgdGFwYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgY2xpY2ssdGFwXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRhcENsaWNrID0gZnVuY3Rpb24gaGFuZGxlVGFwQ2xpY2soZXZlbnQpIHtcbiAgICAvLyBVbnByZXNzIHRoZSBhc3NvY2lhdGVkIE1lbnVCdXR0b24sIGFuZCBtb3ZlIGZvY3VzIGJhY2sgdG8gaXRcbiAgICBpZiAodGhpcy5tZW51QnV0dG9uXykge1xuICAgICAgdGhpcy5tZW51QnV0dG9uXy51bnByZXNzQnV0dG9uKCk7XG4gICAgICB2YXIgY2hpbGRDb21wb25lbnRzID0gdGhpcy5jaGlsZHJlbigpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRDb21wb25lbnRzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmb3VuZENvbXBvbmVudCA9IGNoaWxkQ29tcG9uZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LmVsKCkgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgIH0pWzBdO1xuXG4gICAgICBpZiAoIWZvdW5kQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gZG9uJ3QgZm9jdXMgbWVudSBidXR0b24gaWYgaXRlbSBpcyBhIGNhcHRpb24gc2V0dGluZ3MgaXRlbVxuICAgICAgLy8gYmVjYXVzZSBmb2N1cyB3aWxsIG1vdmUgZWxzZXdoZXJlXG5cblxuICAgICAgaWYgKGZvdW5kQ29tcG9uZW50Lm5hbWUoKSAhPT0gJ0NhcHRpb25TZXR0aW5nc01lbnVJdGVtJykge1xuICAgICAgICB0aGlzLm1lbnVCdXR0b25fLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYSBga2V5ZG93bmAgZXZlbnQgb24gdGhpcyBtZW51LiBUaGlzIGxpc3RlbmVyIGlzIGFkZGVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIEEgYGtleWRvd25gIGV2ZW50IHRoYXQgaGFwcGVuZWQgb24gdGhlIG1lbnUuXG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAvLyBMZWZ0IGFuZCBEb3duIEFycm93c1xuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdMZWZ0JykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRG93bicpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnN0ZXBGb3J3YXJkKCk7IC8vIFVwIGFuZCBSaWdodCBBcnJvd3NcbiAgICB9IGVsc2UgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1JpZ2h0JykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnVXAnKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zdGVwQmFjaygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTW92ZSB0byBuZXh0IChsb3dlcikgbWVudSBpdGVtIGZvciBrZXlib2FyZCB1c2Vycy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3RlcEZvcndhcmQgPSBmdW5jdGlvbiBzdGVwRm9yd2FyZCgpIHtcbiAgICB2YXIgc3RlcENoaWxkID0gMDtcblxuICAgIGlmICh0aGlzLmZvY3VzZWRDaGlsZF8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RlcENoaWxkID0gdGhpcy5mb2N1c2VkQ2hpbGRfICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzKHN0ZXBDaGlsZCk7XG4gIH1cbiAgLyoqXG4gICAqIE1vdmUgdG8gcHJldmlvdXMgKGhpZ2hlcikgbWVudSBpdGVtIGZvciBrZXlib2FyZCB1c2Vycy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3RlcEJhY2sgPSBmdW5jdGlvbiBzdGVwQmFjaygpIHtcbiAgICB2YXIgc3RlcENoaWxkID0gMDtcblxuICAgIGlmICh0aGlzLmZvY3VzZWRDaGlsZF8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RlcENoaWxkID0gdGhpcy5mb2N1c2VkQ2hpbGRfIC0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzKHN0ZXBDaGlsZCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBmb2N1cyBvbiBhIHtAbGluayBNZW51SXRlbX0gaW4gdGhlIGBNZW51YC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBbaXRlbT0wXVxuICAgKiAgICAgICAgSW5kZXggb2YgY2hpbGQgaXRlbSBzZXQgZm9jdXMgb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMoaXRlbSkge1xuICAgIGlmIChpdGVtID09PSB2b2lkIDApIHtcbiAgICAgIGl0ZW0gPSAwO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKS5zbGljZSgpO1xuICAgIHZhciBoYXZlVGl0bGUgPSBjaGlsZHJlbi5sZW5ndGggJiYgY2hpbGRyZW5bMF0uY2xhc3NOYW1lICYmIC92anMtbWVudS10aXRsZS8udGVzdChjaGlsZHJlblswXS5jbGFzc05hbWUpO1xuXG4gICAgaWYgKGhhdmVUaXRsZSkge1xuICAgICAgY2hpbGRyZW4uc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGl0ZW0gPCAwKSB7XG4gICAgICAgIGl0ZW0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChpdGVtID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBpdGVtID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb2N1c2VkQ2hpbGRfID0gaXRlbTtcbiAgICAgIGNoaWxkcmVuW2l0ZW1dLmVsXy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTWVudTtcbn0oQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdNZW51JywgTWVudSk7XG5cbi8qKlxuICogQSBgTWVudUJ1dHRvbmAgY2xhc3MgZm9yIGFueSBwb3B1cCB7QGxpbmsgTWVudX0uXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIE1lbnVCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTWVudUJ1dHRvbiwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBNZW51QnV0dG9uKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMubWVudUJ1dHRvbl8gPSBuZXcgQnV0dG9uKHBsYXllciwgb3B0aW9ucyk7XG5cbiAgICBfdGhpcy5tZW51QnV0dG9uXy5jb250cm9sVGV4dChfdGhpcy5jb250cm9sVGV4dF8pO1xuXG4gICAgX3RoaXMubWVudUJ1dHRvbl8uZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsICd0cnVlJyk7IC8vIEFkZCBidWlsZENTU0NsYXNzIHZhbHVlcyB0byB0aGUgYnV0dG9uLCBub3QgdGhlIHdyYXBwZXJcblxuXG4gICAgdmFyIGJ1dHRvbkNsYXNzID0gQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzKCk7XG4gICAgX3RoaXMubWVudUJ1dHRvbl8uZWxfLmNsYXNzTmFtZSA9IF90aGlzLmJ1aWxkQ1NTQ2xhc3MoKSArICcgJyArIGJ1dHRvbkNsYXNzO1xuXG4gICAgX3RoaXMubWVudUJ1dHRvbl8ucmVtb3ZlQ2xhc3MoJ3Zqcy1jb250cm9sJyk7XG5cbiAgICBfdGhpcy5hZGRDaGlsZChfdGhpcy5tZW51QnV0dG9uXyk7XG5cbiAgICBfdGhpcy51cGRhdGUoKTtcblxuICAgIF90aGlzLmVuYWJsZWRfID0gdHJ1ZTtcblxuICAgIF90aGlzLm9uKF90aGlzLm1lbnVCdXR0b25fLCAndGFwJywgX3RoaXMuaGFuZGxlQ2xpY2spO1xuXG4gICAgX3RoaXMub24oX3RoaXMubWVudUJ1dHRvbl8sICdjbGljaycsIF90aGlzLmhhbmRsZUNsaWNrKTtcblxuICAgIF90aGlzLm9uKF90aGlzLm1lbnVCdXR0b25fLCAna2V5ZG93bicsIF90aGlzLmhhbmRsZUtleURvd24pO1xuXG4gICAgX3RoaXMub24oX3RoaXMubWVudUJ1dHRvbl8sICdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuYWRkQ2xhc3MoJ3Zqcy1ob3ZlcicpO1xuXG4gICAgICBfdGhpcy5tZW51LnNob3coKTtcblxuICAgICAgb24oZG9jdW1lbnQsICdrZXl1cCcsIGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmhhbmRsZU1lbnVLZXlVcCkpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMub24oJ21vdXNlbGVhdmUnLCBfdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcblxuICAgIF90aGlzLm9uKCdrZXlkb3duJywgX3RoaXMuaGFuZGxlU3VibWVudUtleURvd24pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIG1lbnUgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgaXRzIGl0ZW1zLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNZW51QnV0dG9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBtZW51ID0gdGhpcy5jcmVhdGVNZW51KCk7XG5cbiAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICB0aGlzLm1lbnUuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLm1lbnUpO1xuICAgIH1cblxuICAgIHRoaXMubWVudSA9IG1lbnU7XG4gICAgdGhpcy5hZGRDaGlsZChtZW51KTtcbiAgICAvKipcbiAgICAgKiBUcmFjayB0aGUgc3RhdGUgb2YgdGhlIG1lbnUgYnV0dG9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5idXR0b25QcmVzc2VkXyA9IGZhbHNlO1xuICAgIHRoaXMubWVudUJ1dHRvbl8uZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPD0gdGhpcy5oaWRlVGhyZXNob2xkXykge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBtZW51IGFuZCBhZGQgYWxsIGl0ZW1zIHRvIGl0LlxuICAgKlxuICAgKiBAcmV0dXJuIHtNZW51fVxuICAgKiAgICAgICAgIFRoZSBjb25zdHJ1Y3RlZCBtZW51XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZU1lbnUgPSBmdW5jdGlvbiBjcmVhdGVNZW51KCkge1xuICAgIHZhciBtZW51ID0gbmV3IE1lbnUodGhpcy5wbGF5ZXJfLCB7XG4gICAgICBtZW51QnV0dG9uOiB0aGlzXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgbWVudSBpZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGlzIHRocmVzaG9sZC4gVGhpcyBkZWZhdWx0c1xuICAgICAqIHRvIDAgYW5kIHdoZW5ldmVyIHdlIGFkZCBpdGVtcyB3aGljaCBjYW4gYmUgaGlkZGVuIHRvIHRoZSBtZW51IHdlJ2xsIGluY3JlbWVudCBpdC4gV2UgbGlzdFxuICAgICAqIGl0IGhlcmUgYmVjYXVzZSBldmVyeSB0aW1lIHdlIHJ1biBgY3JlYXRlTWVudWAgd2UgbmVlZCB0byByZXNldCB0aGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cblxuICAgIHRoaXMuaGlkZVRocmVzaG9sZF8gPSAwOyAvLyBBZGQgYSB0aXRsZSBsaXN0IGl0ZW0gdG8gdGhlIHRvcFxuXG4gICAgaWYgKHRoaXMub3B0aW9uc18udGl0bGUpIHtcbiAgICAgIHZhciB0aXRsZUVsID0gY3JlYXRlRWwoJ2xpJywge1xuICAgICAgICBjbGFzc05hbWU6ICd2anMtbWVudS10aXRsZScsXG4gICAgICAgIGlubmVySFRNTDogdG9UaXRsZUNhc2UodGhpcy5vcHRpb25zXy50aXRsZSksXG4gICAgICAgIHRhYkluZGV4OiAtMVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhpZGVUaHJlc2hvbGRfICs9IDE7XG4gICAgICB2YXIgdGl0bGVDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KHRoaXMucGxheWVyXywge1xuICAgICAgICBlbDogdGl0bGVFbFxuICAgICAgfSk7XG4gICAgICBtZW51LmFkZEl0ZW0odGl0bGVDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLmNyZWF0ZUl0ZW1zKCk7XG5cbiAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgLy8gQWRkIG1lbnUgaXRlbXMgdG8gdGhlIG1lbnVcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtZW51LmFkZEl0ZW0odGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnU7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgbGlzdCBvZiBtZW51IGl0ZW1zLiBTcGVjaWZpYyB0byBlYWNoIHN1YmNsYXNzLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlSXRlbXMgPSBmdW5jdGlvbiBjcmVhdGVJdGVtcygpIHt9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBNZW51QnV0dG9uc2BzIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBlbGVtZW50IHRoYXQgZ2V0cyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6IHRoaXMuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MoKVxuICAgIH0sIHt9KTtcbiAgfVxuICAvKipcbiAgICogQWxsb3cgc3ViIGNvbXBvbmVudHMgdG8gc3RhY2sgQ1NTIGNsYXNzIG5hbWVzIGZvciB0aGUgd3JhcHBlciBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgY29uc3RydWN0ZWQgd3JhcHBlciBET00gYGNsYXNzTmFtZWBcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVpbGRXcmFwcGVyQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZFdyYXBwZXJDU1NDbGFzcygpIHtcbiAgICB2YXIgbWVudUJ1dHRvbkNsYXNzID0gJ3Zqcy1tZW51LWJ1dHRvbic7IC8vIElmIHRoZSBpbmxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgd2Ugd2FudCB0byB1c2UgZGlmZmVyZW50IHN0eWxlcyBhbHRvZ2V0aGVyLlxuXG4gICAgaWYgKHRoaXMub3B0aW9uc18uaW5saW5lID09PSB0cnVlKSB7XG4gICAgICBtZW51QnV0dG9uQ2xhc3MgKz0gJy1pbmxpbmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZW51QnV0dG9uQ2xhc3MgKz0gJy1wb3B1cCc7XG4gICAgfSAvLyBUT0RPOiBGaXggdGhlIENTUyBzbyB0aGF0IHRoaXMgaXNuJ3QgbmVjZXNzYXJ5XG5cblxuICAgIHZhciBidXR0b25DbGFzcyA9IEJ1dHRvbi5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcygpO1xuICAgIHJldHVybiBcInZqcy1tZW51LWJ1dHRvbiBcIiArIG1lbnVCdXR0b25DbGFzcyArIFwiIFwiICsgYnV0dG9uQ2xhc3MgKyBcIiBcIiArIF9Db21wb25lbnQucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICB2YXIgbWVudUJ1dHRvbkNsYXNzID0gJ3Zqcy1tZW51LWJ1dHRvbic7IC8vIElmIHRoZSBpbmxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgd2Ugd2FudCB0byB1c2UgZGlmZmVyZW50IHN0eWxlcyBhbHRvZ2V0aGVyLlxuXG4gICAgaWYgKHRoaXMub3B0aW9uc18uaW5saW5lID09PSB0cnVlKSB7XG4gICAgICBtZW51QnV0dG9uQ2xhc3MgKz0gJy1pbmxpbmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZW51QnV0dG9uQ2xhc3MgKz0gJy1wb3B1cCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwidmpzLW1lbnUtYnV0dG9uIFwiICsgbWVudUJ1dHRvbkNsYXNzICsgXCIgXCIgKyBfQ29tcG9uZW50LnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGxvY2FsaXplZCBjb250cm9sIHRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAqXG4gICAqID4gTk9URTogVGhpcyB3aWxsIGNvbWUgZnJvbSB0aGUgaW50ZXJuYWwgYG1lbnVCdXR0b25fYCBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdXG4gICAqICAgICAgICBDb250cm9sIHRleHQgZm9yIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gW2VsPXRoaXMubWVudUJ1dHRvbl8uZWwoKV1cbiAgICogICAgICAgIEVsZW1lbnQgdG8gc2V0IHRoZSB0aXRsZSBvbi5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIC0gVGhlIGNvbnRyb2wgdGV4dCB3aGVuIGdldHRpbmdcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY29udHJvbFRleHQgPSBmdW5jdGlvbiBjb250cm9sVGV4dCh0ZXh0LCBlbCkge1xuICAgIGlmIChlbCA9PT0gdm9pZCAwKSB7XG4gICAgICBlbCA9IHRoaXMubWVudUJ1dHRvbl8uZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tZW51QnV0dG9uXy5jb250cm9sVGV4dCh0ZXh0LCBlbCk7XG4gIH1cbiAgLyoqXG4gICAqIERpc3Bvc2Ugb2YgdGhlIGBtZW51LWJ1dHRvbmAgYW5kIGFsbCBjaGlsZCBjb21wb25lbnRzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICB0aGlzLmhhbmRsZU1vdXNlTGVhdmUoKTtcblxuICAgIF9Db21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGEgY2xpY2sgb24gYSBgTWVudUJ1dHRvbmAuXG4gICAqIFNlZSB7QGxpbmsgQ2xpY2thYmxlQ29tcG9uZW50I2hhbmRsZUNsaWNrfSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLmJ1dHRvblByZXNzZWRfKSB7XG4gICAgICB0aGlzLnVucHJlc3NCdXR0b24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVzc0J1dHRvbigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGBtb3VzZWxlYXZlYCBmb3IgYE1lbnVCdXR0b25gLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBtb3VzZWxlYXZlYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgbW91c2VsZWF2ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNb3VzZUxlYXZlID0gZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZShldmVudCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1ob3ZlcicpO1xuICAgIG9mZihkb2N1bWVudCwgJ2tleXVwJywgYmluZCh0aGlzLCB0aGlzLmhhbmRsZU1lbnVLZXlVcCkpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvY3VzIHRvIHRoZSBhY3R1YWwgYnV0dG9uLCBub3QgdG8gdGhpcyBlbGVtZW50XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgdGhpcy5tZW51QnV0dG9uXy5mb2N1cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGZvY3VzIGZyb20gdGhlIGFjdHVhbCBidXR0b24sIG5vdCB0aGlzIGVsZW1lbnRcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmx1ciA9IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgdGhpcy5tZW51QnV0dG9uXy5ibHVyKCk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSB0YWIsIGVzY2FwZSwgZG93biBhcnJvdywgYW5kIHVwIGFycm93IGtleXMgZm9yIGBNZW51QnV0dG9uYC4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnQjaGFuZGxlS2V5RG93bn0gZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAvLyBFc2NhcGUgb3IgVGFiIHVucHJlc3MgdGhlICdidXR0b24nXG4gICAgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ0VzYycpIHx8IGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1RhYicpKSB7XG4gICAgICBpZiAodGhpcy5idXR0b25QcmVzc2VkXykge1xuICAgICAgICB0aGlzLnVucHJlc3NCdXR0b24oKTtcbiAgICAgIH0gLy8gRG9uJ3QgcHJldmVudERlZmF1bHQgZm9yIFRhYiBrZXkgLSB3ZSBzdGlsbCB3YW50IHRvIGxvc2UgZm9jdXNcblxuXG4gICAgICBpZiAoIWtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1RhYicpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFNldCBmb2N1cyBiYWNrIHRvIHRoZSBtZW51IGJ1dHRvbidzIGJ1dHRvblxuXG4gICAgICAgIHRoaXMubWVudUJ1dHRvbl8uZm9jdXMoKTtcbiAgICAgIH0gLy8gVXAgQXJyb3cgb3IgRG93biBBcnJvdyBhbHNvICdwcmVzcycgdGhlIGJ1dHRvbiB0byBvcGVuIHRoZSBtZW51XG5cbiAgICB9IGVsc2UgaWYgKGtleWNvZGUuaXNFdmVudEtleShldmVudCwgJ1VwJykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRG93bicpKSB7XG4gICAgICBpZiAoIXRoaXMuYnV0dG9uUHJlc3NlZF8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcmVzc0J1dHRvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGEgYGtleXVwYCBldmVudCBvbiBhIGBNZW51QnV0dG9uYC4gVGhlIGxpc3RlbmVyIGZvciB0aGlzIGlzIGFkZGVkIGluXG4gICAqIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIEtleSBwcmVzcyBldmVudFxuICAgKlxuICAgKiBAbGlzdGVucyBrZXl1cFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVNZW51S2V5VXAgPSBmdW5jdGlvbiBoYW5kbGVNZW51S2V5VXAoZXZlbnQpIHtcbiAgICAvLyBFc2NhcGUgaGlkZXMgcG9wdXAgbWVudVxuICAgIGlmIChrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdFc2MnKSB8fCBrZXljb2RlLmlzRXZlbnRLZXkoZXZlbnQsICdUYWInKSkge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWhvdmVyJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBuYW1lIG5vdyBkZWxlZ2F0ZXMgdG8gYGhhbmRsZVN1Ym1lbnVLZXlEb3duYC4gVGhpcyBtZWFuc1xuICAgKiBhbnlvbmUgY2FsbGluZyBgaGFuZGxlU3VibWVudUtleVByZXNzYCB3aWxsIG5vdCBzZWUgdGhlaXIgbWV0aG9kIGNhbGxzXG4gICAqIHN0b3Agd29ya2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlU3VibWVudUtleVByZXNzID0gZnVuY3Rpb24gaGFuZGxlU3VibWVudUtleVByZXNzKGV2ZW50KSB7XG4gICAgdGhpcy5oYW5kbGVTdWJtZW51S2V5RG93bihldmVudCk7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBhIGBrZXlkb3duYCBldmVudCBvbiBhIHN1Yi1tZW51LiBUaGUgbGlzdGVuZXIgZm9yIHRoaXMgaXMgYWRkZWQgaW5cbiAgICogdGhlIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgS2V5IHByZXNzIGV2ZW50XG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlU3VibWVudUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVTdWJtZW51S2V5RG93bihldmVudCkge1xuICAgIC8vIEVzY2FwZSBvciBUYWIgdW5wcmVzcyB0aGUgJ2J1dHRvbidcbiAgICBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRXNjJykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnVGFiJykpIHtcbiAgICAgIGlmICh0aGlzLmJ1dHRvblByZXNzZWRfKSB7XG4gICAgICAgIHRoaXMudW5wcmVzc0J1dHRvbigpO1xuICAgICAgfSAvLyBEb24ndCBwcmV2ZW50RGVmYXVsdCBmb3IgVGFiIGtleSAtIHdlIHN0aWxsIHdhbnQgdG8gbG9zZSBmb2N1c1xuXG5cbiAgICAgIGlmICgha2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnVGFiJykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gU2V0IGZvY3VzIGJhY2sgdG8gdGhlIG1lbnUgYnV0dG9uJ3MgYnV0dG9uXG5cbiAgICAgICAgdGhpcy5tZW51QnV0dG9uXy5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUHV0IHRoZSBjdXJyZW50IGBNZW51QnV0dG9uYCBpbnRvIGEgcHJlc3NlZCBzdGF0ZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHJlc3NCdXR0b24gPSBmdW5jdGlvbiBwcmVzc0J1dHRvbigpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkXykge1xuICAgICAgdGhpcy5idXR0b25QcmVzc2VkXyA9IHRydWU7XG4gICAgICB0aGlzLm1lbnUuc2hvdygpO1xuICAgICAgdGhpcy5tZW51LmxvY2tTaG93aW5nKCk7XG4gICAgICB0aGlzLm1lbnVCdXR0b25fLmVsXy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpOyAvLyBzZXQgdGhlIGZvY3VzIGludG8gdGhlIHN1Ym1lbnUsIGV4Y2VwdCBvbiBpT1Mgd2hlcmUgaXQgaXMgcmVzdWx0aW5nIGluXG4gICAgICAvLyB1bmRlc2lyZWQgc2Nyb2xsaW5nIGJlaGF2aW9yIHdoZW4gdGhlIHBsYXllciBpcyBpbiBhbiBpZnJhbWVcblxuICAgICAgaWYgKElTX0lPUyAmJiBpc0luRnJhbWUoKSkge1xuICAgICAgICAvLyBSZXR1cm4gZWFybHkgc28gdGhhdCB0aGUgbWVudSBpc24ndCBmb2N1c2VkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZW51LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUYWtlIHRoZSBjdXJyZW50IGBNZW51QnV0dG9uYCBvdXQgb2YgYSBwcmVzc2VkIHN0YXRlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51bnByZXNzQnV0dG9uID0gZnVuY3Rpb24gdW5wcmVzc0J1dHRvbigpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkXykge1xuICAgICAgdGhpcy5idXR0b25QcmVzc2VkXyA9IGZhbHNlO1xuICAgICAgdGhpcy5tZW51LnVubG9ja1Nob3dpbmcoKTtcbiAgICAgIHRoaXMubWVudS5oaWRlKCk7XG4gICAgICB0aGlzLm1lbnVCdXR0b25fLmVsXy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGBNZW51QnV0dG9uYC4gRG9uJ3QgYWxsb3cgaXQgdG8gYmUgY2xpY2tlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgdGhpcy51bnByZXNzQnV0dG9uKCk7XG4gICAgdGhpcy5lbmFibGVkXyA9IGZhbHNlO1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1kaXNhYmxlZCcpO1xuICAgIHRoaXMubWVudUJ1dHRvbl8uZGlzYWJsZSgpO1xuICB9XG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIGBNZW51QnV0dG9uYC4gQWxsb3cgaXQgdG8gYmUgY2xpY2tlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgIHRoaXMuZW5hYmxlZF8gPSB0cnVlO1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1kaXNhYmxlZCcpO1xuICAgIHRoaXMubWVudUJ1dHRvbl8uZW5hYmxlKCk7XG4gIH07XG5cbiAgcmV0dXJuIE1lbnVCdXR0b247XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnTWVudUJ1dHRvbicsIE1lbnVCdXR0b24pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBidXR0b25zIHRoYXQgdG9nZ2xlIHNwZWNpZmljICB0cmFjayB0eXBlcyAoZS5nLiBzdWJ0aXRsZXMpLlxuICpcbiAqIEBleHRlbmRzIE1lbnVCdXR0b25cbiAqL1xuXG52YXIgVHJhY2tCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9NZW51QnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYWNrQnV0dG9uLCBfTWVudUJ1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBUcmFja0J1dHRvbihwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgdHJhY2tzID0gb3B0aW9ucy50cmFja3M7XG4gICAgX3RoaXMgPSBfTWVudUJ1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIGlmIChfdGhpcy5pdGVtcy5sZW5ndGggPD0gMSkge1xuICAgICAgX3RoaXMuaGlkZSgpO1xuICAgIH1cblxuICAgIGlmICghdHJhY2tzKSB7XG4gICAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyk7XG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZUhhbmRsZXIgPSBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBfdGhpcy51cGRhdGUpO1xuICAgIHRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdyZW1vdmV0cmFjaycsIHVwZGF0ZUhhbmRsZXIpO1xuICAgIHRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdhZGR0cmFjaycsIHVwZGF0ZUhhbmRsZXIpO1xuXG4gICAgX3RoaXMucGxheWVyXy5vbigncmVhZHknLCB1cGRhdGVIYW5kbGVyKTtcblxuICAgIF90aGlzLnBsYXllcl8ub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFja3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVtb3ZldHJhY2snLCB1cGRhdGVIYW5kbGVyKTtcbiAgICAgIHRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGR0cmFjaycsIHVwZGF0ZUhhbmRsZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIFRyYWNrQnV0dG9uO1xufShNZW51QnV0dG9uKTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdUcmFja0J1dHRvbicsIFRyYWNrQnV0dG9uKTtcblxuLyoqXG4gKiBAZmlsZSBtZW51LWtleXMuanNcbiAqL1xuXG4vKipcbiAgKiBBbGwga2V5cyB1c2VkIGZvciBvcGVyYXRpb24gb2YgYSBtZW51IChgTWVudUJ1dHRvbmAsIGBNZW51YCwgYW5kIGBNZW51SXRlbWApXG4gICogTm90ZSB0aGF0ICdFbnRlcicgYW5kICdTcGFjZScgYXJlIG5vdCBpbmNsdWRlZCBoZXJlIChvdGhlcndpc2UgdGhleSB3b3VsZFxuICAqIHByZXZlbnQgdGhlIGBNZW51QnV0dG9uYCBhbmQgYE1lbnVJdGVtYCBmcm9tIGJlaW5nIGtleWJvYXJkLWNsaWNrYWJsZSlcbiAgKiBAdHlwZWRlZiBNZW51S2V5c1xuICAqIEBhcnJheVxuICAqL1xudmFyIE1lbnVLZXlzID0gWydUYWInLCAnRXNjJywgJ1VwJywgJ0Rvd24nLCAnUmlnaHQnLCAnTGVmdCddO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgZm9yIGEgbWVudSBpdGVtLiBgPGxpPmBcbiAqXG4gKiBAZXh0ZW5kcyBDbGlja2FibGVDb21wb25lbnRcbiAqL1xuXG52YXIgTWVudUl0ZW0gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9DbGlja2FibGVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTWVudUl0ZW0sIF9DbGlja2FibGVDb21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIE1lbnVJdGVtKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0NsaWNrYWJsZUNvbXBvbmVudC5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcbiAgICBfdGhpcy5zZWxlY3RhYmxlID0gb3B0aW9ucy5zZWxlY3RhYmxlO1xuICAgIF90aGlzLmlzU2VsZWN0ZWRfID0gb3B0aW9ucy5zZWxlY3RlZCB8fCBmYWxzZTtcbiAgICBfdGhpcy5tdWx0aVNlbGVjdGFibGUgPSBvcHRpb25zLm11bHRpU2VsZWN0YWJsZTtcblxuICAgIF90aGlzLnNlbGVjdGVkKF90aGlzLmlzU2VsZWN0ZWRfKTtcblxuICAgIGlmIChfdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICBpZiAoX3RoaXMubXVsdGlTZWxlY3RhYmxlKSB7XG4gICAgICAgIF90aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWVudWl0ZW1jaGVja2JveCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuZWxfLnNldEF0dHJpYnV0ZSgncm9sZScsICdtZW51aXRlbXJhZGlvJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWVudWl0ZW0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYE1lbnVJdGVtJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPWxpXVxuICAgKiAgICAgICAgRWxlbWVudCdzIG5vZGUgdHlwZSwgbm90IGFjdHVhbGx5IHVzZWQsIGFsd2F5cyBzZXQgdG8gYGxpYC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcz17fV1cbiAgICogICAgICAgIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIHNldCBvbiB0aGUgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2F0dHJzPXt9XVxuICAgKiAgICAgICAgQW4gb2JqZWN0IG9mIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgc2V0IG9uIHRoZSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCBnZXRzIGNyZWF0ZWQuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1lbnVJdGVtLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY3JlYXRlRWwgPSBmdW5jdGlvbiBjcmVhdGVFbCh0eXBlLCBwcm9wcywgYXR0cnMpIHtcbiAgICAvLyBUaGUgY29udHJvbCBpcyB0ZXh0dWFsLCBub3QganVzdCBhbiBpY29uXG4gICAgdGhpcy5ub25JY29uQ29udHJvbCA9IHRydWU7XG4gICAgcmV0dXJuIF9DbGlja2FibGVDb21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2xpJywgYXNzaWduKHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1tZW51LWl0ZW0nLFxuICAgICAgaW5uZXJIVE1MOiBcIjxzcGFuIGNsYXNzPVxcXCJ2anMtbWVudS1pdGVtLXRleHRcXFwiPlwiICsgdGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLmxhYmVsKSArIFwiPC9zcGFuPlwiLFxuICAgICAgdGFiSW5kZXg6IC0xXG4gICAgfSwgcHJvcHMpLCBhdHRycyk7XG4gIH1cbiAgLyoqXG4gICAqIElnbm9yZSBrZXlzIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtZW51LCBidXQgcGFzcyBhbnkgb3RoZXIgb25lcyB1cC4gU2VlXG4gICAqIHtAbGluayBDbGlja2FibGVDb21wb25lbnQjaGFuZGxlS2V5RG93bn0gZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICBpZiAoIU1lbnVLZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGtleWNvZGUuaXNFdmVudEtleShldmVudCwga2V5KTtcbiAgICB9KSkge1xuICAgICAgLy8gUGFzcyBrZXlkb3duIGhhbmRsaW5nIHVwIGZvciB1bnVzZWQga2V5c1xuICAgICAgX0NsaWNrYWJsZUNvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFueSBjbGljayBvbiBhIGBNZW51SXRlbWAgcHV0cyBpdCBpbnRvIHRoZSBzZWxlY3RlZCBzdGF0ZS5cbiAgICogU2VlIHtAbGluayBDbGlja2FibGVDb21wb25lbnQjaGFuZGxlQ2xpY2t9IGZvciBpbnN0YW5jZXMgd2hlcmUgdGhpcyBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICBUaGUgYGtleWRvd25gLCBgdGFwYCwgb3IgYGNsaWNrYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICAqICAgICAgICBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRhcFxuICAgKiBAbGlzdGVucyBjbGlja1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZCh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBzdGF0ZSBmb3IgdGhpcyBtZW51IGl0ZW0gYXMgc2VsZWN0ZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqICAgICAgICBpZiB0aGUgbWVudSBpdGVtIGlzIHNlbGVjdGVkIG9yIG5vdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZWxlY3RlZCA9IGZ1bmN0aW9uIHNlbGVjdGVkKF9zZWxlY3RlZCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGlmIChfc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5hZGRDbGFzcygndmpzLXNlbGVjdGVkJyk7XG4gICAgICAgIHRoaXMuZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTsgLy8gYXJpYS1jaGVja2VkIGlzbid0IGZ1bGx5IHN1cHBvcnRlZCBieSBicm93c2Vycy9zY3JlZW4gcmVhZGVycyxcbiAgICAgICAgLy8gc28gaW5kaWNhdGUgc2VsZWN0ZWQgc3RhdGUgdG8gc2NyZWVuIHJlYWRlciBpbiB0aGUgY29udHJvbCB0ZXh0LlxuXG4gICAgICAgIHRoaXMuY29udHJvbFRleHQoJywgc2VsZWN0ZWQnKTtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkXyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtc2VsZWN0ZWQnKTtcbiAgICAgICAgdGhpcy5lbF8uc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTsgLy8gSW5kaWNhdGUgdW4tc2VsZWN0ZWQgc3RhdGUgdG8gc2NyZWVuIHJlYWRlclxuXG4gICAgICAgIHRoaXMuY29udHJvbFRleHQoJycpO1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRfID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNZW51SXRlbTtcbn0oQ2xpY2thYmxlQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdNZW51SXRlbScsIE1lbnVJdGVtKTtcblxuLyoqXG4gKiBUaGUgc3BlY2lmaWMgbWVudSBpdGVtIHR5cGUgZm9yIHNlbGVjdGluZyBhIGxhbmd1YWdlIHdpdGhpbiBhIHRleHQgdHJhY2sga2luZFxuICpcbiAqIEBleHRlbmRzIE1lbnVJdGVtXG4gKi9cblxudmFyIFRleHRUcmFja01lbnVJdGVtID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfTWVudUl0ZW0pIHtcbiAgX2luaGVyaXRzTG9vc2UoVGV4dFRyYWNrTWVudUl0ZW0sIF9NZW51SXRlbSk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0VHJhY2tNZW51SXRlbShwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgdHJhY2sgPSBvcHRpb25zLnRyYWNrO1xuICAgIHZhciB0cmFja3MgPSBwbGF5ZXIudGV4dFRyYWNrcygpOyAvLyBNb2RpZnkgb3B0aW9ucyBmb3IgcGFyZW50IE1lbnVJdGVtIGNsYXNzJ3MgaW5pdC5cblxuICAgIG9wdGlvbnMubGFiZWwgPSB0cmFjay5sYWJlbCB8fCB0cmFjay5sYW5ndWFnZSB8fCAnVW5rbm93bic7XG4gICAgb3B0aW9ucy5zZWxlY3RlZCA9IHRyYWNrLm1vZGUgPT09ICdzaG93aW5nJztcbiAgICBfdGhpcyA9IF9NZW51SXRlbS5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcbiAgICBfdGhpcy50cmFjayA9IHRyYWNrOyAvLyBEZXRlcm1pbmUgdGhlIHJlbGV2YW50IGtpbmQocykgb2YgdHJhY2tzIGZvciB0aGlzIGNvbXBvbmVudCBhbmQgZmlsdGVyXG4gICAgLy8gb3V0IGVtcHR5IGtpbmRzLlxuXG4gICAgX3RoaXMua2luZHMgPSAob3B0aW9ucy5raW5kcyB8fCBbb3B0aW9ucy5raW5kIHx8IF90aGlzLnRyYWNrLmtpbmRdKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICB2YXIgY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uIGNoYW5nZUhhbmRsZXIoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaGFuZGxlVHJhY2tzQ2hhbmdlLmFwcGx5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgdmFyIHNlbGVjdGVkTGFuZ3VhZ2VDaGFuZ2VIYW5kbGVyID0gZnVuY3Rpb24gc2VsZWN0ZWRMYW5ndWFnZUNoYW5nZUhhbmRsZXIoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5oYW5kbGVTZWxlY3RlZExhbmd1YWdlQ2hhbmdlLmFwcGx5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcGxheWVyLm9uKFsnbG9hZHN0YXJ0JywgJ3RleHR0cmFja2NoYW5nZSddLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICB0cmFja3MuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgdHJhY2tzLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGVkbGFuZ3VhZ2VjaGFuZ2UnLCBzZWxlY3RlZExhbmd1YWdlQ2hhbmdlSGFuZGxlcik7XG5cbiAgICBfdGhpcy5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBsYXllci5vZmYoWydsb2Fkc3RhcnQnLCAndGV4dHRyYWNrY2hhbmdlJ10sIGNoYW5nZUhhbmRsZXIpO1xuICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlbGVjdGVkbGFuZ3VhZ2VjaGFuZ2UnLCBzZWxlY3RlZExhbmd1YWdlQ2hhbmdlSGFuZGxlcik7XG4gICAgfSk7IC8vIGlPUzcgZG9lc24ndCBkaXNwYXRjaCBjaGFuZ2UgZXZlbnRzIHRvIFRleHRUcmFja0xpc3RzIHdoZW4gYW5cbiAgICAvLyBhc3NvY2lhdGVkIHRyYWNrJ3MgbW9kZSBjaGFuZ2VzLiBXaXRob3V0IHNvbWV0aGluZyBsaWtlXG4gICAgLy8gT2JqZWN0Lm9ic2VydmUoKSAoYWxzbyBub3QgcHJlc2VudCBvbiBpT1M3KSwgaXQncyBub3RcbiAgICAvLyBwb3NzaWJsZSB0byBkZXRlY3QgY2hhbmdlcyB0byB0aGUgbW9kZSBhdHRyaWJ1dGUgYW5kIHBvbHlmaWxsXG4gICAgLy8gdGhlIGNoYW5nZSBldmVudC4gQXMgYSBwb29yIHN1YnN0aXR1dGUsIHdlIG1hbnVhbGx5IGRpc3BhdGNoXG4gICAgLy8gY2hhbmdlIGV2ZW50cyB3aGVuZXZlciB0aGUgY29udHJvbHMgbW9kaWZ5IHRoZSBtb2RlLlxuXG5cbiAgICBpZiAodHJhY2tzLm9uY2hhbmdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBldmVudDtcblxuICAgICAgX3RoaXMub24oWyd0YXAnLCAnY2xpY2snXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyQxLkV2ZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIEFuZHJvaWQgMi4zIHRocm93cyBhbiBJbGxlZ2FsIENvbnN0cnVjdG9yIGVycm9yIGZvciB3aW5kb3cuRXZlbnRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnQgPSBuZXcgd2luZG93JDEuRXZlbnQoJ2NoYW5nZScpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikgey8vIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgICBldmVudC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhY2tzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSAvLyBzZXQgdGhlIGRlZmF1bHQgc3RhdGUgYmFzZWQgb24gY3VycmVudCB0cmFja3NcblxuXG4gICAgX3RoaXMuaGFuZGxlVHJhY2tzQ2hhbmdlKCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhbiBgVGV4dFRyYWNrTWVudUl0ZW1gIGlzIFwiY2xpY2tlZFwiLiBTZWVcbiAgICoge0BsaW5rIENsaWNrYWJsZUNvbXBvbmVudH0gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBhIGNsaWNrIGNhbiBiZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAsIGB0YXBgLCBvciBgY2xpY2tgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgICogICAgICAgIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgdGFwXG4gICAqIEBsaXN0ZW5zIGNsaWNrXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRleHRUcmFja01lbnVJdGVtLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIHZhciByZWZlcmVuY2VUcmFjayA9IHRoaXMudHJhY2s7XG4gICAgdmFyIHRyYWNrcyA9IHRoaXMucGxheWVyXy50ZXh0VHJhY2tzKCk7XG5cbiAgICBfTWVudUl0ZW0ucHJvdG90eXBlLmhhbmRsZUNsaWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXG4gICAgaWYgKCF0cmFja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldOyAvLyBJZiB0aGUgdHJhY2sgZnJvbSB0aGUgdGV4dCB0cmFja3MgbGlzdCBpcyBub3Qgb2YgdGhlIHJpZ2h0IGtpbmQsXG4gICAgICAvLyBza2lwIGl0LiBXZSBkbyBub3Qgd2FudCB0byBhZmZlY3QgdHJhY2tzIG9mIGluY29tcGF0aWJsZSBraW5kKHMpLlxuXG4gICAgICBpZiAodGhpcy5raW5kcy5pbmRleE9mKHRyYWNrLmtpbmQpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gSWYgdGhpcyB0ZXh0IHRyYWNrIGlzIHRoZSBjb21wb25lbnQncyB0cmFjayBhbmQgaXQgaXMgbm90IHNob3dpbmcsXG4gICAgICAvLyBzZXQgaXQgdG8gc2hvd2luZy5cblxuXG4gICAgICBpZiAodHJhY2sgPT09IHJlZmVyZW5jZVRyYWNrKSB7XG4gICAgICAgIGlmICh0cmFjay5tb2RlICE9PSAnc2hvd2luZycpIHtcbiAgICAgICAgICB0cmFjay5tb2RlID0gJ3Nob3dpbmcnO1xuICAgICAgICB9IC8vIElmIHRoaXMgdGV4dCB0cmFjayBpcyBub3QgdGhlIGNvbXBvbmVudCdzIHRyYWNrIGFuZCBpdCBpcyBub3RcbiAgICAgICAgLy8gZGlzYWJsZWQsIHNldCBpdCB0byBkaXNhYmxlZC5cblxuICAgICAgfSBlbHNlIGlmICh0cmFjay5tb2RlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIHRyYWNrLm1vZGUgPSAnZGlzYWJsZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIHRleHQgdHJhY2sgbGlzdCBjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBgY2hhbmdlYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogQGxpc3RlbnMgVGV4dFRyYWNrTGlzdCNjaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVHJhY2tzQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlVHJhY2tzQ2hhbmdlKGV2ZW50KSB7XG4gICAgdmFyIHNob3VsZEJlU2VsZWN0ZWQgPSB0aGlzLnRyYWNrLm1vZGUgPT09ICdzaG93aW5nJzsgLy8gUHJldmVudCByZWR1bmRhbnQgc2VsZWN0ZWQoKSBjYWxscyBiZWNhdXNlIHRoZXkgbWF5IGNhdXNlXG4gICAgLy8gc2NyZWVuIHJlYWRlcnMgdG8gcmVhZCB0aGUgYXBwZW5kZWQgY29udHJvbCB0ZXh0IHVubmVjZXNzYXJpbHlcblxuICAgIGlmIChzaG91bGRCZVNlbGVjdGVkICE9PSB0aGlzLmlzU2VsZWN0ZWRfKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkKHNob3VsZEJlU2VsZWN0ZWQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlU2VsZWN0ZWRMYW5ndWFnZUNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGVkTGFuZ3VhZ2VDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAodGhpcy50cmFjay5tb2RlID09PSAnc2hvd2luZycpIHtcbiAgICAgIHZhciBzZWxlY3RlZExhbmd1YWdlID0gdGhpcy5wbGF5ZXJfLmNhY2hlXy5zZWxlY3RlZExhbmd1YWdlOyAvLyBEb24ndCByZXBsYWNlIHRoZSBraW5kIG9mIHRyYWNrIGFjcm9zcyB0aGUgc2FtZSBsYW5ndWFnZVxuXG4gICAgICBpZiAoc2VsZWN0ZWRMYW5ndWFnZSAmJiBzZWxlY3RlZExhbmd1YWdlLmVuYWJsZWQgJiYgc2VsZWN0ZWRMYW5ndWFnZS5sYW5ndWFnZSA9PT0gdGhpcy50cmFjay5sYW5ndWFnZSAmJiBzZWxlY3RlZExhbmd1YWdlLmtpbmQgIT09IHRoaXMudHJhY2sua2luZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGxheWVyXy5jYWNoZV8uc2VsZWN0ZWRMYW5ndWFnZSA9IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMudHJhY2subGFuZ3VhZ2UsXG4gICAgICAgIGtpbmQ6IHRoaXMudHJhY2sua2luZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gdHJhY2sgb2JqZWN0IG9uIGRpc3Bvc2VcbiAgICB0aGlzLnRyYWNrID0gbnVsbDtcblxuICAgIF9NZW51SXRlbS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIHJldHVybiBUZXh0VHJhY2tNZW51SXRlbTtcbn0oTWVudUl0ZW0pO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1RleHRUcmFja01lbnVJdGVtJywgVGV4dFRyYWNrTWVudUl0ZW0pO1xuXG4vKipcbiAqIEEgc3BlY2lhbCBtZW51IGl0ZW0gZm9yIHR1cm5pbmcgb2YgYSBzcGVjaWZpYyB0eXBlIG9mIHRleHQgdHJhY2tcbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tNZW51SXRlbVxuICovXG5cbnZhciBPZmZUZXh0VHJhY2tNZW51SXRlbSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1RleHRUcmFja01lbnVJdGVtKSB7XG4gIF9pbmhlcml0c0xvb3NlKE9mZlRleHRUcmFja01lbnVJdGVtLCBfVGV4dFRyYWNrTWVudUl0ZW0pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gT2ZmVGV4dFRyYWNrTWVudUl0ZW0ocGxheWVyLCBvcHRpb25zKSB7XG4gICAgLy8gQ3JlYXRlIHBzZXVkbyB0cmFjayBpbmZvXG4gICAgLy8gUmVxdWlyZXMgb3B0aW9uc1sna2luZCddXG4gICAgb3B0aW9ucy50cmFjayA9IHtcbiAgICAgIHBsYXllcjogcGxheWVyLFxuICAgICAgLy8gaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBzdG9yZSBga2luZGAgb3IgYGtpbmRzYCBvbiB0aGUgdHJhY2sgaXRzZWxmXG4gICAgICAvLyBzaW5jZSB0aGV5IGFyZSBub3cgc3RvcmVkIGluIHRoZSBga2luZHNgIHByb3BlcnR5IG9mIGFsbCBpbnN0YW5jZXMgb2ZcbiAgICAgIC8vIFRleHRUcmFja01lbnVJdGVtLCBidXQgdGhpcyB3aWxsIHJlbWFpbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgIGtpbmQ6IG9wdGlvbnMua2luZCxcbiAgICAgIGtpbmRzOiBvcHRpb25zLmtpbmRzLFxuICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgbW9kZTogJ2Rpc2FibGVkJ1xuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbnMua2luZHMpIHtcbiAgICAgIG9wdGlvbnMua2luZHMgPSBbb3B0aW9ucy5raW5kXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sYWJlbCkge1xuICAgICAgb3B0aW9ucy50cmFjay5sYWJlbCA9IG9wdGlvbnMubGFiZWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudHJhY2subGFiZWwgPSBvcHRpb25zLmtpbmRzLmpvaW4oJyBhbmQgJykgKyAnIG9mZic7XG4gICAgfSAvLyBNZW51SXRlbSBpcyBzZWxlY3RhYmxlXG5cblxuICAgIG9wdGlvbnMuc2VsZWN0YWJsZSA9IHRydWU7IC8vIE1lbnVJdGVtIGlzIE5PVCBtdWx0aVNlbGVjdGFibGUgKGkuZS4gb25seSBvbmUgY2FuIGJlIG1hcmtlZCBcInNlbGVjdGVkXCIgYXQgYSB0aW1lKVxuXG4gICAgb3B0aW9ucy5tdWx0aVNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICByZXR1cm4gX1RleHRUcmFja01lbnVJdGVtLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgdGV4dCB0cmFjayBjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1blxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBPZmZUZXh0VHJhY2tNZW51SXRlbS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZVRyYWNrc0NoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZVRyYWNrc0NoYW5nZShldmVudCkge1xuICAgIHZhciB0cmFja3MgPSB0aGlzLnBsYXllcigpLnRleHRUcmFja3MoKTtcbiAgICB2YXIgc2hvdWxkQmVTZWxlY3RlZCA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRyYWNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tpXTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9uc18ua2luZHMuaW5kZXhPZih0cmFjay5raW5kKSA+IC0xICYmIHRyYWNrLm1vZGUgPT09ICdzaG93aW5nJykge1xuICAgICAgICBzaG91bGRCZVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gUHJldmVudCByZWR1bmRhbnQgc2VsZWN0ZWQoKSBjYWxscyBiZWNhdXNlIHRoZXkgbWF5IGNhdXNlXG4gICAgLy8gc2NyZWVuIHJlYWRlcnMgdG8gcmVhZCB0aGUgYXBwZW5kZWQgY29udHJvbCB0ZXh0IHVubmVjZXNzYXJpbHlcblxuXG4gICAgaWYgKHNob3VsZEJlU2VsZWN0ZWQgIT09IHRoaXMuaXNTZWxlY3RlZF8pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQoc2hvdWxkQmVTZWxlY3RlZCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5oYW5kbGVTZWxlY3RlZExhbmd1YWdlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlU2VsZWN0ZWRMYW5ndWFnZUNoYW5nZShldmVudCkge1xuICAgIHZhciB0cmFja3MgPSB0aGlzLnBsYXllcigpLnRleHRUcmFja3MoKTtcbiAgICB2YXIgYWxsSGlkZGVuID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdHJhY2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldO1xuXG4gICAgICBpZiAoWydjYXB0aW9ucycsICdkZXNjcmlwdGlvbnMnLCAnc3VidGl0bGVzJ10uaW5kZXhPZih0cmFjay5raW5kKSA+IC0xICYmIHRyYWNrLm1vZGUgPT09ICdzaG93aW5nJykge1xuICAgICAgICBhbGxIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbEhpZGRlbikge1xuICAgICAgdGhpcy5wbGF5ZXJfLmNhY2hlXy5zZWxlY3RlZExhbmd1YWdlID0ge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIE9mZlRleHRUcmFja01lbnVJdGVtO1xufShUZXh0VHJhY2tNZW51SXRlbSk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnT2ZmVGV4dFRyYWNrTWVudUl0ZW0nLCBPZmZUZXh0VHJhY2tNZW51SXRlbSk7XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGJ1dHRvbnMgdGhhdCB0b2dnbGUgc3BlY2lmaWMgdGV4dCB0cmFjayB0eXBlcyAoZS5nLiBzdWJ0aXRsZXMpXG4gKlxuICogQGV4dGVuZHMgTWVudUJ1dHRvblxuICovXG5cbnZhciBUZXh0VHJhY2tCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UcmFja0J1dHRvbikge1xuICBfaW5oZXJpdHNMb29zZShUZXh0VHJhY2tCdXR0b24sIF9UcmFja0J1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0VHJhY2tCdXR0b24ocGxheWVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJhY2tzID0gcGxheWVyLnRleHRUcmFja3MoKTtcbiAgICByZXR1cm4gX1RyYWNrQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtZW51IGl0ZW0gZm9yIGVhY2ggdGV4dCB0cmFja1xuICAgKlxuICAgKiBAcGFyYW0ge1RleHRUcmFja01lbnVJdGVtW119IFtpdGVtcz1bXV1cbiAgICogICAgICAgIEV4aXN0aW5nIGFycmF5IG9mIGl0ZW1zIHRvIHVzZSBkdXJpbmcgY3JlYXRpb25cbiAgICpcbiAgICogQHJldHVybiB7VGV4dFRyYWNrTWVudUl0ZW1bXX1cbiAgICogICAgICAgICBBcnJheSBvZiBtZW51IGl0ZW1zIHRoYXQgd2VyZSBjcmVhdGVkXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRleHRUcmFja0J1dHRvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUl0ZW1zID0gZnVuY3Rpb24gY3JlYXRlSXRlbXMoaXRlbXMsIFRyYWNrTWVudUl0ZW0pIHtcbiAgICBpZiAoaXRlbXMgPT09IHZvaWQgMCkge1xuICAgICAgaXRlbXMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoVHJhY2tNZW51SXRlbSA9PT0gdm9pZCAwKSB7XG4gICAgICBUcmFja01lbnVJdGVtID0gVGV4dFRyYWNrTWVudUl0ZW07XG4gICAgfVxuXG4gICAgLy8gTGFiZWwgaXMgYW4gb3ZlcnJpZGUgZm9yIHRoZSBbdHJhY2tdIG9mZiBsYWJlbFxuICAgIC8vIFVTZWQgdG8gbG9jYWxpc2UgY2FwdGlvbnMvc3VidGl0bGVzXG4gICAgdmFyIGxhYmVsO1xuXG4gICAgaWYgKHRoaXMubGFiZWxfKSB7XG4gICAgICBsYWJlbCA9IHRoaXMubGFiZWxfICsgXCIgb2ZmXCI7XG4gICAgfSAvLyBBZGQgYW4gT0ZGIG1lbnUgaXRlbSB0byB0dXJuIGFsbCB0cmFja3Mgb2ZmXG5cblxuICAgIGl0ZW1zLnB1c2gobmV3IE9mZlRleHRUcmFja01lbnVJdGVtKHRoaXMucGxheWVyXywge1xuICAgICAga2luZHM6IHRoaXMua2luZHNfLFxuICAgICAga2luZDogdGhpcy5raW5kXyxcbiAgICAgIGxhYmVsOiBsYWJlbFxuICAgIH0pKTtcbiAgICB0aGlzLmhpZGVUaHJlc2hvbGRfICs9IDE7XG4gICAgdmFyIHRyYWNrcyA9IHRoaXMucGxheWVyXy50ZXh0VHJhY2tzKCk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5raW5kc18pKSB7XG4gICAgICB0aGlzLmtpbmRzXyA9IFt0aGlzLmtpbmRfXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldOyAvLyBvbmx5IGFkZCB0cmFja3MgdGhhdCBhcmUgb2YgYW4gYXBwcm9wcmlhdGUga2luZCBhbmQgaGF2ZSBhIGxhYmVsXG5cbiAgICAgIGlmICh0aGlzLmtpbmRzXy5pbmRleE9mKHRyYWNrLmtpbmQpID4gLTEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgVHJhY2tNZW51SXRlbSh0aGlzLnBsYXllcl8sIHtcbiAgICAgICAgICB0cmFjazogdHJhY2ssXG4gICAgICAgICAga2luZHM6IHRoaXMua2luZHNfLFxuICAgICAgICAgIGtpbmQ6IHRoaXMua2luZF8sXG4gICAgICAgICAgLy8gTWVudUl0ZW0gaXMgc2VsZWN0YWJsZVxuICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgLy8gTWVudUl0ZW0gaXMgTk9UIG11bHRpU2VsZWN0YWJsZSAoaS5lLiBvbmx5IG9uZSBjYW4gYmUgbWFya2VkIFwic2VsZWN0ZWRcIiBhdCBhIHRpbWUpXG4gICAgICAgICAgbXVsdGlTZWxlY3RhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaXRlbS5hZGRDbGFzcyhcInZqcy1cIiArIHRyYWNrLmtpbmQgKyBcIi1tZW51LWl0ZW1cIik7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIHJldHVybiBUZXh0VHJhY2tCdXR0b247XG59KFRyYWNrQnV0dG9uKTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdUZXh0VHJhY2tCdXR0b24nLCBUZXh0VHJhY2tCdXR0b24pO1xuXG4vKipcbiAqIFRoZSBjaGFwdGVyIHRyYWNrIG1lbnUgaXRlbVxuICpcbiAqIEBleHRlbmRzIE1lbnVJdGVtXG4gKi9cblxudmFyIENoYXB0ZXJzVHJhY2tNZW51SXRlbSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX01lbnVJdGVtKSB7XG4gIF9pbmhlcml0c0xvb3NlKENoYXB0ZXJzVHJhY2tNZW51SXRlbSwgX01lbnVJdGVtKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIENoYXB0ZXJzVHJhY2tNZW51SXRlbShwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgdHJhY2sgPSBvcHRpb25zLnRyYWNrO1xuICAgIHZhciBjdWUgPSBvcHRpb25zLmN1ZTtcbiAgICB2YXIgY3VycmVudFRpbWUgPSBwbGF5ZXIuY3VycmVudFRpbWUoKTsgLy8gTW9kaWZ5IG9wdGlvbnMgZm9yIHBhcmVudCBNZW51SXRlbSBjbGFzcydzIGluaXQuXG5cbiAgICBvcHRpb25zLnNlbGVjdGFibGUgPSB0cnVlO1xuICAgIG9wdGlvbnMubXVsdGlTZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgb3B0aW9ucy5sYWJlbCA9IGN1ZS50ZXh0O1xuICAgIG9wdGlvbnMuc2VsZWN0ZWQgPSBjdWUuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lICYmIGN1cnJlbnRUaW1lIDwgY3VlLmVuZFRpbWU7XG4gICAgX3RoaXMgPSBfTWVudUl0ZW0uY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMudHJhY2sgPSB0cmFjaztcbiAgICBfdGhpcy5jdWUgPSBjdWU7XG4gICAgdHJhY2suYWRkRXZlbnRMaXN0ZW5lcignY3VlY2hhbmdlJywgYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgX3RoaXMudXBkYXRlKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gYW4gYENoYXB0ZXJzVHJhY2tNZW51SXRlbWAgaXMgXCJjbGlja2VkXCIuIFNlZVxuICAgKiB7QGxpbmsgQ2xpY2thYmxlQ29tcG9uZW50fSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IGEgY2xpY2sgY2FuIGJlLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYGtleWRvd25gLCBgdGFwYCwgb3IgYGNsaWNrYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICAqICAgICAgICBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRhcFxuICAgKiBAbGlzdGVucyBjbGlja1xuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBDaGFwdGVyc1RyYWNrTWVudUl0ZW0ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgX01lbnVJdGVtLnByb3RvdHlwZS5oYW5kbGVDbGljay5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMuY3VlLnN0YXJ0VGltZSk7XG4gICAgdGhpcy51cGRhdGUodGhpcy5jdWUuc3RhcnRUaW1lKTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIGNoYXB0ZXIgbWVudSBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIFRoZSBgY3VlY2hhbmdlYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICpcbiAgICogQGxpc3RlbnMgVGV4dFRyYWNrI2N1ZWNoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZXZlbnQpIHtcbiAgICB2YXIgY3VlID0gdGhpcy5jdWU7XG4gICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCk7IC8vIHZqcy5sb2coY3VycmVudFRpbWUsIGN1ZS5zdGFydFRpbWUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZChjdWUuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lICYmIGN1cnJlbnRUaW1lIDwgY3VlLmVuZFRpbWUpO1xuICB9O1xuXG4gIHJldHVybiBDaGFwdGVyc1RyYWNrTWVudUl0ZW07XG59KE1lbnVJdGVtKTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdDaGFwdGVyc1RyYWNrTWVudUl0ZW0nLCBDaGFwdGVyc1RyYWNrTWVudUl0ZW0pO1xuXG4vKipcbiAqIFRoZSBidXR0b24gY29tcG9uZW50IGZvciB0b2dnbGluZyBhbmQgc2VsZWN0aW5nIGNoYXB0ZXJzXG4gKiBDaGFwdGVycyBhY3QgbXVjaCBkaWZmZXJlbnRseSB0aGFuIG90aGVyIHRleHQgdHJhY2tzXG4gKiBDdWVzIGFyZSBuYXZpZ2F0aW9uIHZzLiBvdGhlciB0cmFja3Mgb2YgYWx0ZXJuYXRpdmUgbGFuZ3VhZ2VzXG4gKlxuICogQGV4dGVuZHMgVGV4dFRyYWNrQnV0dG9uXG4gKi9cblxudmFyIENoYXB0ZXJzQnV0dG9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVGV4dFRyYWNrQnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKENoYXB0ZXJzQnV0dG9uLCBfVGV4dFRyYWNrQnV0dG9uKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21wb25lbnR+UmVhZHlDYWxsYmFja30gW3JlYWR5XVxuICAgKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWR5LlxuICAgKi9cbiAgZnVuY3Rpb24gQ2hhcHRlcnNCdXR0b24ocGxheWVyLCBvcHRpb25zLCByZWFkeSkge1xuICAgIHJldHVybiBfVGV4dFRyYWNrQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zLCByZWFkeSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBDaGFwdGVyc0J1dHRvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1jaGFwdGVycy1idXR0b24gXCIgKyBfVGV4dFRyYWNrQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmJ1aWxkV3JhcHBlckNTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRXcmFwcGVyQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwidmpzLWNoYXB0ZXJzLWJ1dHRvbiBcIiArIF9UZXh0VHJhY2tCdXR0b24ucHJvdG90eXBlLmJ1aWxkV3JhcHBlckNTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbWVudSBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBpdHMgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IFtldmVudF1cbiAgICogICAgICAgIEFuIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBUZXh0VHJhY2tMaXN0I2FkZHRyYWNrXG4gICAqIEBsaXN0ZW5zIFRleHRUcmFja0xpc3QjcmVtb3ZldHJhY2tcbiAgICogQGxpc3RlbnMgVGV4dFRyYWNrTGlzdCNjaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnRyYWNrXyB8fCBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2FkZHRyYWNrJyB8fCBldmVudC50eXBlID09PSAncmVtb3ZldHJhY2snKSkge1xuICAgICAgdGhpcy5zZXRUcmFjayh0aGlzLmZpbmRDaGFwdGVyc1RyYWNrKCkpO1xuICAgIH1cblxuICAgIF9UZXh0VHJhY2tCdXR0b24ucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0cmFjayBmb3IgdGhlIGNoYXB0ZXJzIGJ1dHRvbi5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0VHJhY2t9IHRyYWNrXG4gICAqICAgICAgICBUaGUgbmV3IHRyYWNrIHRvIHNlbGVjdC4gTm90aGluZyB3aWxsIGNoYW5nZSBpZiB0aGlzIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWRcbiAgICogICAgICAgIHRyYWNrLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRUcmFjayA9IGZ1bmN0aW9uIHNldFRyYWNrKHRyYWNrKSB7XG4gICAgaWYgKHRoaXMudHJhY2tfID09PSB0cmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy51cGRhdGVIYW5kbGVyXykge1xuICAgICAgdGhpcy51cGRhdGVIYW5kbGVyXyA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyk7XG4gICAgfSAvLyBoZXJlIHRoaXMudHJhY2tfIHJlZmVycyB0byB0aGUgb2xkIHRyYWNrIGluc3RhbmNlXG5cblxuICAgIGlmICh0aGlzLnRyYWNrXykge1xuICAgICAgdmFyIHJlbW90ZVRleHRUcmFja0VsID0gdGhpcy5wbGF5ZXJfLnJlbW90ZVRleHRUcmFja0VscygpLmdldFRyYWNrRWxlbWVudEJ5VHJhY2tfKHRoaXMudHJhY2tfKTtcblxuICAgICAgaWYgKHJlbW90ZVRleHRUcmFja0VsKSB7XG4gICAgICAgIHJlbW90ZVRleHRUcmFja0VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLnVwZGF0ZUhhbmRsZXJfKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmFja18gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudHJhY2tfID0gdHJhY2s7IC8vIGhlcmUgdGhpcy50cmFja18gcmVmZXJzIHRvIHRoZSBuZXcgdHJhY2sgaW5zdGFuY2VcblxuICAgIGlmICh0aGlzLnRyYWNrXykge1xuICAgICAgdGhpcy50cmFja18ubW9kZSA9ICdoaWRkZW4nO1xuXG4gICAgICB2YXIgX3JlbW90ZVRleHRUcmFja0VsID0gdGhpcy5wbGF5ZXJfLnJlbW90ZVRleHRUcmFja0VscygpLmdldFRyYWNrRWxlbWVudEJ5VHJhY2tfKHRoaXMudHJhY2tfKTtcblxuICAgICAgaWYgKF9yZW1vdGVUZXh0VHJhY2tFbCkge1xuICAgICAgICBfcmVtb3RlVGV4dFRyYWNrRWwuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMudXBkYXRlSGFuZGxlcl8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRmluZCB0aGUgdHJhY2sgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGluIHVzZSBieSB0aGlzIENoYXB0ZXJzQnV0dG9uXG4gICAqXG4gICAqIEByZXR1cm4ge1RleHRUcmFja3x1bmRlZmluZWR9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdHJhY2sgb3IgdW5kZWZpbmVkIGlmIG5vbmUgd2FzIGZvdW5kLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5maW5kQ2hhcHRlcnNUcmFjayA9IGZ1bmN0aW9uIGZpbmRDaGFwdGVyc1RyYWNrKCkge1xuICAgIHZhciB0cmFja3MgPSB0aGlzLnBsYXllcl8udGV4dFRyYWNrcygpIHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IHRyYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgY2hvb3NlIHRoZSBsYXN0IHRyYWNrIGFzIG91ciBjaGFwdGVyc1RyYWNrXG4gICAgICB2YXIgdHJhY2sgPSB0cmFja3NbaV07XG5cbiAgICAgIGlmICh0cmFjay5raW5kID09PSB0aGlzLmtpbmRfKSB7XG4gICAgICAgIHJldHVybiB0cmFjaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY2FwdGlvbiBmb3IgdGhlIENoYXB0ZXJzQnV0dG9uIGJhc2VkIG9uIHRoZSB0cmFjayBsYWJlbC4gVGhpcyB3aWxsIGFsc29cbiAgICogdXNlIHRoZSBjdXJyZW50IHRyYWNrcyBsb2NhbGl6ZWQga2luZCBhcyBhIGZhbGxiYWNrIGlmIGEgbGFiZWwgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgdHJhY2tzIGN1cnJlbnQgbGFiZWwgb3IgdGhlIGxvY2FsaXplZCB0cmFjayBraW5kLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRNZW51Q2FwdGlvbiA9IGZ1bmN0aW9uIGdldE1lbnVDYXB0aW9uKCkge1xuICAgIGlmICh0aGlzLnRyYWNrXyAmJiB0aGlzLnRyYWNrXy5sYWJlbCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhY2tfLmxhYmVsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvY2FsaXplKHRvVGl0bGVDYXNlKHRoaXMua2luZF8pKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIG1lbnUgZnJvbSBjaGFwdGVyIHRyYWNrXG4gICAqXG4gICAqIEByZXR1cm4ge01lbnV9XG4gICAqICAgICAgICAgTmV3IG1lbnUgZm9yIHRoZSBjaGFwdGVyIGJ1dHRvbnNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlTWVudSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbnUoKSB7XG4gICAgdGhpcy5vcHRpb25zXy50aXRsZSA9IHRoaXMuZ2V0TWVudUNhcHRpb24oKTtcbiAgICByZXR1cm4gX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuY3JlYXRlTWVudS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtZW51IGl0ZW0gZm9yIGVhY2ggdGV4dCB0cmFja1xuICAgKlxuICAgKiBAcmV0dXJuIHtUZXh0VHJhY2tNZW51SXRlbVtdfVxuICAgKiAgICAgICAgIEFycmF5IG9mIG1lbnUgaXRlbXNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlSXRlbXMgPSBmdW5jdGlvbiBjcmVhdGVJdGVtcygpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgIGlmICghdGhpcy50cmFja18pIHtcbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICB2YXIgY3VlcyA9IHRoaXMudHJhY2tfLmN1ZXM7XG5cbiAgICBpZiAoIWN1ZXMpIHtcbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGN1ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY3VlID0gY3Vlc1tpXTtcbiAgICAgIHZhciBtaSA9IG5ldyBDaGFwdGVyc1RyYWNrTWVudUl0ZW0odGhpcy5wbGF5ZXJfLCB7XG4gICAgICAgIHRyYWNrOiB0aGlzLnRyYWNrXyxcbiAgICAgICAgY3VlOiBjdWVcbiAgICAgIH0pO1xuICAgICAgaXRlbXMucHVzaChtaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIHJldHVybiBDaGFwdGVyc0J1dHRvbjtcbn0oVGV4dFRyYWNrQnV0dG9uKTtcbi8qKlxuICogYGtpbmRgIG9mIFRleHRUcmFjayB0byBsb29rIGZvciB0byBhc3NvY2lhdGUgaXQgd2l0aCB0aGlzIG1lbnUuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5DaGFwdGVyc0J1dHRvbi5wcm90b3R5cGUua2luZF8gPSAnY2hhcHRlcnMnO1xuLyoqXG4gKiBUaGUgdGV4dCB0aGF0IHNob3VsZCBkaXNwbGF5IG92ZXIgdGhlIGBDaGFwdGVyc0J1dHRvbmBzIGNvbnRyb2xzLiBBZGRlZCBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbkNoYXB0ZXJzQnV0dG9uLnByb3RvdHlwZS5jb250cm9sVGV4dF8gPSAnQ2hhcHRlcnMnO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdDaGFwdGVyc0J1dHRvbicsIENoYXB0ZXJzQnV0dG9uKTtcblxuLyoqXG4gKiBUaGUgYnV0dG9uIGNvbXBvbmVudCBmb3IgdG9nZ2xpbmcgYW5kIHNlbGVjdGluZyBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tCdXR0b25cbiAqL1xuXG52YXIgRGVzY3JpcHRpb25zQnV0dG9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVGV4dFRyYWNrQnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKERlc2NyaXB0aW9uc0J1dHRvbiwgX1RleHRUcmFja0J1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50flJlYWR5Q2FsbGJhY2t9IFtyZWFkeV1cbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgcmVhZHkuXG4gICAqL1xuICBmdW5jdGlvbiBEZXNjcmlwdGlvbnNCdXR0b24ocGxheWVyLCBvcHRpb25zLCByZWFkeSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1RleHRUcmFja0J1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucywgcmVhZHkpIHx8IHRoaXM7XG4gICAgdmFyIHRyYWNrcyA9IHBsYXllci50ZXh0VHJhY2tzKCk7XG4gICAgdmFyIGNoYW5nZUhhbmRsZXIgPSBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBfdGhpcy5oYW5kbGVUcmFja3NDaGFuZ2UpO1xuICAgIHRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcblxuICAgIF90aGlzLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgdGV4dCB0cmFjayBjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHJ1blxuICAgKlxuICAgKiBAbGlzdGVucyBUZXh0VHJhY2tMaXN0I2NoYW5nZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBEZXNjcmlwdGlvbnNCdXR0b24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVUcmFja3NDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVUcmFja3NDaGFuZ2UoZXZlbnQpIHtcbiAgICB2YXIgdHJhY2tzID0gdGhpcy5wbGF5ZXIoKS50ZXh0VHJhY2tzKCk7XG4gICAgdmFyIGRpc2FibGVkID0gZmFsc2U7IC8vIENoZWNrIHdoZXRoZXIgYSB0cmFjayBvZiBhIGRpZmZlcmVudCBraW5kIGlzIHNob3dpbmdcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdHJhY2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldO1xuXG4gICAgICBpZiAodHJhY2sua2luZCAhPT0gdGhpcy5raW5kXyAmJiB0cmFjay5tb2RlID09PSAnc2hvd2luZycpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIElmIGFub3RoZXIgdHJhY2sgaXMgc2hvd2luZywgZGlzYWJsZSB0aGlzIG1lbnUgYnV0dG9uXG5cblxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uIFwiICsgX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5idWlsZFdyYXBwZXJDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkV3JhcHBlckNTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1kZXNjcmlwdGlvbnMtYnV0dG9uIFwiICsgX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfTtcblxuICByZXR1cm4gRGVzY3JpcHRpb25zQnV0dG9uO1xufShUZXh0VHJhY2tCdXR0b24pO1xuLyoqXG4gKiBga2luZGAgb2YgVGV4dFRyYWNrIHRvIGxvb2sgZm9yIHRvIGFzc29jaWF0ZSBpdCB3aXRoIHRoaXMgbWVudS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cbkRlc2NyaXB0aW9uc0J1dHRvbi5wcm90b3R5cGUua2luZF8gPSAnZGVzY3JpcHRpb25zJztcbi8qKlxuICogVGhlIHRleHQgdGhhdCBzaG91bGQgZGlzcGxheSBvdmVyIHRoZSBgRGVzY3JpcHRpb25zQnV0dG9uYHMgY29udHJvbHMuIEFkZGVkIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuRGVzY3JpcHRpb25zQnV0dG9uLnByb3RvdHlwZS5jb250cm9sVGV4dF8gPSAnRGVzY3JpcHRpb25zJztcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnRGVzY3JpcHRpb25zQnV0dG9uJywgRGVzY3JpcHRpb25zQnV0dG9uKTtcblxuLyoqXG4gKiBUaGUgYnV0dG9uIGNvbXBvbmVudCBmb3IgdG9nZ2xpbmcgYW5kIHNlbGVjdGluZyBzdWJ0aXRsZXNcbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tCdXR0b25cbiAqL1xuXG52YXIgU3VidGl0bGVzQnV0dG9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVGV4dFRyYWNrQnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKFN1YnRpdGxlc0J1dHRvbiwgX1RleHRUcmFja0J1dHRvbik7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50flJlYWR5Q2FsbGJhY2t9IFtyZWFkeV1cbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgcmVhZHkuXG4gICAqL1xuICBmdW5jdGlvbiBTdWJ0aXRsZXNCdXR0b24ocGxheWVyLCBvcHRpb25zLCByZWFkeSkge1xuICAgIHJldHVybiBfVGV4dFRyYWNrQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zLCByZWFkeSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTdWJ0aXRsZXNCdXR0b24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtc3VidGl0bGVzLWJ1dHRvbiBcIiArIF9UZXh0VHJhY2tCdXR0b24ucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYnVpbGRXcmFwcGVyQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZFdyYXBwZXJDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtc3VidGl0bGVzLWJ1dHRvbiBcIiArIF9UZXh0VHJhY2tCdXR0b24ucHJvdG90eXBlLmJ1aWxkV3JhcHBlckNTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIFN1YnRpdGxlc0J1dHRvbjtcbn0oVGV4dFRyYWNrQnV0dG9uKTtcbi8qKlxuICogYGtpbmRgIG9mIFRleHRUcmFjayB0byBsb29rIGZvciB0byBhc3NvY2lhdGUgaXQgd2l0aCB0aGlzIG1lbnUuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5TdWJ0aXRsZXNCdXR0b24ucHJvdG90eXBlLmtpbmRfID0gJ3N1YnRpdGxlcyc7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYFN1YnRpdGxlc0J1dHRvbmBzIGNvbnRyb2xzLiBBZGRlZCBmb3IgbG9jYWxpemF0aW9uLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cblN1YnRpdGxlc0J1dHRvbi5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ1N1YnRpdGxlcyc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1N1YnRpdGxlc0J1dHRvbicsIFN1YnRpdGxlc0J1dHRvbik7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbSBmb3IgY2FwdGlvbiB0cmFjayBzZXR0aW5ncyBtZW51XG4gKlxuICogQGV4dGVuZHMgVGV4dFRyYWNrTWVudUl0ZW1cbiAqL1xuXG52YXIgQ2FwdGlvblNldHRpbmdzTWVudUl0ZW0gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UZXh0VHJhY2tNZW51SXRlbSkge1xuICBfaW5oZXJpdHNMb29zZShDYXB0aW9uU2V0dGluZ3NNZW51SXRlbSwgX1RleHRUcmFja01lbnVJdGVtKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIENhcHRpb25TZXR0aW5nc01lbnVJdGVtKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIG9wdGlvbnMudHJhY2sgPSB7XG4gICAgICBwbGF5ZXI6IHBsYXllcixcbiAgICAgIGtpbmQ6IG9wdGlvbnMua2luZCxcbiAgICAgIGxhYmVsOiBvcHRpb25zLmtpbmQgKyAnIHNldHRpbmdzJyxcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgICAgbW9kZTogJ2Rpc2FibGVkJ1xuICAgIH07IC8vIENhcHRpb25TZXR0aW5nc01lbnVJdGVtIGhhcyBubyBjb25jZXB0IG9mICdzZWxlY3RlZCdcblxuICAgIG9wdGlvbnMuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgIG9wdGlvbnMubmFtZSA9ICdDYXB0aW9uU2V0dGluZ3NNZW51SXRlbSc7XG4gICAgX3RoaXMgPSBfVGV4dFRyYWNrTWVudUl0ZW0uY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5hZGRDbGFzcygndmpzLXRleHR0cmFjay1zZXR0aW5ncycpO1xuXG4gICAgX3RoaXMuY29udHJvbFRleHQoJywgb3BlbnMgJyArIG9wdGlvbnMua2luZCArICcgc2V0dGluZ3MgZGlhbG9nJyk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhbiBgQ2FwdGlvblNldHRpbmdzTWVudUl0ZW1gIGlzIFwiY2xpY2tlZFwiLiBTZWVcbiAgICoge0BsaW5rIENsaWNrYWJsZUNvbXBvbmVudH0gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBhIGNsaWNrIGNhbiBiZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQ2FwdGlvblNldHRpbmdzTWVudUl0ZW0ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5wbGF5ZXIoKS5nZXRDaGlsZCgndGV4dFRyYWNrU2V0dGluZ3MnKS5vcGVuKCk7XG4gIH07XG5cbiAgcmV0dXJuIENhcHRpb25TZXR0aW5nc01lbnVJdGVtO1xufShUZXh0VHJhY2tNZW51SXRlbSk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnQ2FwdGlvblNldHRpbmdzTWVudUl0ZW0nLCBDYXB0aW9uU2V0dGluZ3NNZW51SXRlbSk7XG5cbi8qKlxuICogVGhlIGJ1dHRvbiBjb21wb25lbnQgZm9yIHRvZ2dsaW5nIGFuZCBzZWxlY3RpbmcgY2FwdGlvbnNcbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tCdXR0b25cbiAqL1xuXG52YXIgQ2FwdGlvbnNCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UZXh0VHJhY2tCdXR0b24pIHtcbiAgX2luaGVyaXRzTG9vc2UoQ2FwdGlvbnNCdXR0b24sIF9UZXh0VHJhY2tCdXR0b24pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH5SZWFkeUNhbGxiYWNrfSBbcmVhZHldXG4gICAqICAgICAgICBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgY29tcG9uZW50IGlzIHJlYWR5LlxuICAgKi9cbiAgZnVuY3Rpb24gQ2FwdGlvbnNCdXR0b24ocGxheWVyLCBvcHRpb25zLCByZWFkeSkge1xuICAgIHJldHVybiBfVGV4dFRyYWNrQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zLCByZWFkeSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBDYXB0aW9uc0J1dHRvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1jYXB0aW9ucy1idXR0b24gXCIgKyBfVGV4dFRyYWNrQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmJ1aWxkV3JhcHBlckNTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRXcmFwcGVyQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwidmpzLWNhcHRpb25zLWJ1dHRvbiBcIiArIF9UZXh0VHJhY2tCdXR0b24ucHJvdG90eXBlLmJ1aWxkV3JhcHBlckNTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBjYXB0aW9uIG1lbnUgaXRlbXNcbiAgICpcbiAgICogQHJldHVybiB7Q2FwdGlvblNldHRpbmdzTWVudUl0ZW1bXX1cbiAgICogICAgICAgICBUaGUgYXJyYXkgb2YgY3VycmVudCBtZW51IGl0ZW1zLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVJdGVtcyA9IGZ1bmN0aW9uIGNyZWF0ZUl0ZW1zKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgaWYgKCEodGhpcy5wbGF5ZXIoKS50ZWNoXyAmJiB0aGlzLnBsYXllcigpLnRlY2hfLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykgJiYgdGhpcy5wbGF5ZXIoKS5nZXRDaGlsZCgndGV4dFRyYWNrU2V0dGluZ3MnKSkge1xuICAgICAgaXRlbXMucHVzaChuZXcgQ2FwdGlvblNldHRpbmdzTWVudUl0ZW0odGhpcy5wbGF5ZXJfLCB7XG4gICAgICAgIGtpbmQ6IHRoaXMua2luZF9cbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuaGlkZVRocmVzaG9sZF8gKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuY3JlYXRlSXRlbXMuY2FsbCh0aGlzLCBpdGVtcyk7XG4gIH07XG5cbiAgcmV0dXJuIENhcHRpb25zQnV0dG9uO1xufShUZXh0VHJhY2tCdXR0b24pO1xuLyoqXG4gKiBga2luZGAgb2YgVGV4dFRyYWNrIHRvIGxvb2sgZm9yIHRvIGFzc29jaWF0ZSBpdCB3aXRoIHRoaXMgbWVudS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cbkNhcHRpb25zQnV0dG9uLnByb3RvdHlwZS5raW5kXyA9ICdjYXB0aW9ucyc7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYENhcHRpb25zQnV0dG9uYHMgY29udHJvbHMuIEFkZGVkIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuQ2FwdGlvbnNCdXR0b24ucHJvdG90eXBlLmNvbnRyb2xUZXh0XyA9ICdDYXB0aW9ucyc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0NhcHRpb25zQnV0dG9uJywgQ2FwdGlvbnNCdXR0b24pO1xuXG4vKipcbiAqIFN1YnNDYXBzTWVudUl0ZW0gaGFzIGFuIFtjY10gaWNvbiB0byBkaXN0aW5ndWlzaCBjYXB0aW9ucyBmcm9tIHN1YnRpdGxlc1xuICogaW4gdGhlIFN1YnNDYXBzTWVudS5cbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tNZW51SXRlbVxuICovXG5cbnZhciBTdWJzQ2Fwc01lbnVJdGVtID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfVGV4dFRyYWNrTWVudUl0ZW0pIHtcbiAgX2luaGVyaXRzTG9vc2UoU3Vic0NhcHNNZW51SXRlbSwgX1RleHRUcmFja01lbnVJdGVtKTtcblxuICBmdW5jdGlvbiBTdWJzQ2Fwc01lbnVJdGVtKCkge1xuICAgIHJldHVybiBfVGV4dFRyYWNrTWVudUl0ZW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNDYXBzTWVudUl0ZW0ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKHR5cGUsIHByb3BzLCBhdHRycykge1xuICAgIHZhciBpbm5lckhUTUwgPSBcIjxzcGFuIGNsYXNzPVxcXCJ2anMtbWVudS1pdGVtLXRleHRcXFwiPlwiICsgdGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLmxhYmVsKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnNfLnRyYWNrLmtpbmQgPT09ICdjYXB0aW9ucycpIHtcbiAgICAgIGlubmVySFRNTCArPSBcIlxcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJ2anMtaWNvbi1wbGFjZWhvbGRlclxcXCI+PC9zcGFuPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcInZqcy1jb250cm9sLXRleHRcXFwiPiBcIiArIHRoaXMubG9jYWxpemUoJ0NhcHRpb25zJykgKyBcIjwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICB9XG5cbiAgICBpbm5lckhUTUwgKz0gJzwvc3Bhbj4nO1xuXG4gICAgdmFyIGVsID0gX1RleHRUcmFja01lbnVJdGVtLnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsIHR5cGUsIGFzc2lnbih7XG4gICAgICBpbm5lckhUTUw6IGlubmVySFRNTFxuICAgIH0sIHByb3BzKSwgYXR0cnMpO1xuXG4gICAgcmV0dXJuIGVsO1xuICB9O1xuXG4gIHJldHVybiBTdWJzQ2Fwc01lbnVJdGVtO1xufShUZXh0VHJhY2tNZW51SXRlbSk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnU3Vic0NhcHNNZW51SXRlbScsIFN1YnNDYXBzTWVudUl0ZW0pO1xuXG4vKipcbiAqIFRoZSBidXR0b24gY29tcG9uZW50IGZvciB0b2dnbGluZyBhbmQgc2VsZWN0aW5nIGNhcHRpb25zIGFuZC9vciBzdWJ0aXRsZXNcbiAqXG4gKiBAZXh0ZW5kcyBUZXh0VHJhY2tCdXR0b25cbiAqL1xuXG52YXIgU3Vic0NhcHNCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UZXh0VHJhY2tCdXR0b24pIHtcbiAgX2luaGVyaXRzTG9vc2UoU3Vic0NhcHNCdXR0b24sIF9UZXh0VHJhY2tCdXR0b24pO1xuXG4gIGZ1bmN0aW9uIFN1YnNDYXBzQnV0dG9uKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9UZXh0VHJhY2tCdXR0b24uY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7IC8vIEFsdGhvdWdoIE5vcnRoIEFtZXJpY2EgdXNlcyBcImNhcHRpb25zXCIgaW4gbW9zdCBjYXNlcyBmb3JcbiAgICAvLyBcImNhcHRpb25zIGFuZCBzdWJ0aXRsZXNcIiBvdGhlciBsb2NhbGVzIHVzZSBcInN1YnRpdGxlc1wiXG5cbiAgICBfdGhpcy5sYWJlbF8gPSAnc3VidGl0bGVzJztcblxuICAgIGlmIChbJ2VuJywgJ2VuLXVzJywgJ2VuLWNhJywgJ2ZyLWNhJ10uaW5kZXhPZihfdGhpcy5wbGF5ZXJfLmxhbmd1YWdlXykgPiAtMSkge1xuICAgICAgX3RoaXMubGFiZWxfID0gJ2NhcHRpb25zJztcbiAgICB9XG5cbiAgICBfdGhpcy5tZW51QnV0dG9uXy5jb250cm9sVGV4dCh0b1RpdGxlQ2FzZShfdGhpcy5sYWJlbF8pKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTdWJzQ2Fwc0J1dHRvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1zdWJzLWNhcHMtYnV0dG9uIFwiICsgX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5idWlsZFdyYXBwZXJDU1NDbGFzcyA9IGZ1bmN0aW9uIGJ1aWxkV3JhcHBlckNTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1zdWJzLWNhcHMtYnV0dG9uIFwiICsgX1RleHRUcmFja0J1dHRvbi5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGNhcHRpb24vc3VidGl0bGVzIG1lbnUgaXRlbXNcbiAgICpcbiAgICogQHJldHVybiB7Q2FwdGlvblNldHRpbmdzTWVudUl0ZW1bXX1cbiAgICogICAgICAgICBUaGUgYXJyYXkgb2YgY3VycmVudCBtZW51IGl0ZW1zLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVJdGVtcyA9IGZ1bmN0aW9uIGNyZWF0ZUl0ZW1zKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgaWYgKCEodGhpcy5wbGF5ZXIoKS50ZWNoXyAmJiB0aGlzLnBsYXllcigpLnRlY2hfLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykgJiYgdGhpcy5wbGF5ZXIoKS5nZXRDaGlsZCgndGV4dFRyYWNrU2V0dGluZ3MnKSkge1xuICAgICAgaXRlbXMucHVzaChuZXcgQ2FwdGlvblNldHRpbmdzTWVudUl0ZW0odGhpcy5wbGF5ZXJfLCB7XG4gICAgICAgIGtpbmQ6IHRoaXMubGFiZWxfXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmhpZGVUaHJlc2hvbGRfICs9IDE7XG4gICAgfVxuXG4gICAgaXRlbXMgPSBfVGV4dFRyYWNrQnV0dG9uLnByb3RvdHlwZS5jcmVhdGVJdGVtcy5jYWxsKHRoaXMsIGl0ZW1zLCBTdWJzQ2Fwc01lbnVJdGVtKTtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG5cbiAgcmV0dXJuIFN1YnNDYXBzQnV0dG9uO1xufShUZXh0VHJhY2tCdXR0b24pO1xuLyoqXG4gKiBga2luZGBzIG9mIFRleHRUcmFjayB0byBsb29rIGZvciB0byBhc3NvY2lhdGUgaXQgd2l0aCB0aGlzIG1lbnUuXG4gKlxuICogQHR5cGUge2FycmF5fVxuICogQHByaXZhdGVcbiAqL1xuXG5cblN1YnNDYXBzQnV0dG9uLnByb3RvdHlwZS5raW5kc18gPSBbJ2NhcHRpb25zJywgJ3N1YnRpdGxlcyddO1xuLyoqXG4gKiBUaGUgdGV4dCB0aGF0IHNob3VsZCBkaXNwbGF5IG92ZXIgdGhlIGBTdWJzQ2Fwc0J1dHRvbmBzIGNvbnRyb2xzLlxuICpcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5TdWJzQ2Fwc0J1dHRvbi5wcm90b3R5cGUuY29udHJvbFRleHRfID0gJ1N1YnRpdGxlcyc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1N1YnNDYXBzQnV0dG9uJywgU3Vic0NhcHNCdXR0b24pO1xuXG4vKipcbiAqIEFuIHtAbGluayBBdWRpb1RyYWNrfSB7QGxpbmsgTWVudUl0ZW19XG4gKlxuICogQGV4dGVuZHMgTWVudUl0ZW1cbiAqL1xuXG52YXIgQXVkaW9UcmFja01lbnVJdGVtID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfTWVudUl0ZW0pIHtcbiAgX2luaGVyaXRzTG9vc2UoQXVkaW9UcmFja01lbnVJdGVtLCBfTWVudUl0ZW0pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gQXVkaW9UcmFja01lbnVJdGVtKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciB0cmFjayA9IG9wdGlvbnMudHJhY2s7XG4gICAgdmFyIHRyYWNrcyA9IHBsYXllci5hdWRpb1RyYWNrcygpOyAvLyBNb2RpZnkgb3B0aW9ucyBmb3IgcGFyZW50IE1lbnVJdGVtIGNsYXNzJ3MgaW5pdC5cblxuICAgIG9wdGlvbnMubGFiZWwgPSB0cmFjay5sYWJlbCB8fCB0cmFjay5sYW5ndWFnZSB8fCAnVW5rbm93bic7XG4gICAgb3B0aW9ucy5zZWxlY3RlZCA9IHRyYWNrLmVuYWJsZWQ7XG4gICAgX3RoaXMgPSBfTWVudUl0ZW0uY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnMpIHx8IHRoaXM7XG4gICAgX3RoaXMudHJhY2sgPSB0cmFjaztcblxuICAgIF90aGlzLmFkZENsYXNzKFwidmpzLVwiICsgdHJhY2sua2luZCArIFwiLW1lbnUtaXRlbVwiKTtcblxuICAgIHZhciBjaGFuZ2VIYW5kbGVyID0gZnVuY3Rpb24gY2hhbmdlSGFuZGxlcigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5oYW5kbGVUcmFja3NDaGFuZ2UuYXBwbHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIGFyZ3MpO1xuICAgIH07XG5cbiAgICB0cmFja3MuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG5cbiAgICBfdGhpcy5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBBdWRpb1RyYWNrTWVudUl0ZW0ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKHR5cGUsIHByb3BzLCBhdHRycykge1xuICAgIHZhciBpbm5lckhUTUwgPSBcIjxzcGFuIGNsYXNzPVxcXCJ2anMtbWVudS1pdGVtLXRleHRcXFwiPlwiICsgdGhpcy5sb2NhbGl6ZSh0aGlzLm9wdGlvbnNfLmxhYmVsKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnNfLnRyYWNrLmtpbmQgPT09ICdtYWluLWRlc2MnKSB7XG4gICAgICBpbm5lckhUTUwgKz0gXCJcXG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBjbGFzcz1cXFwidmpzLWljb24tcGxhY2Vob2xkZXJcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJ2anMtY29udHJvbC10ZXh0XFxcIj4gXCIgKyB0aGlzLmxvY2FsaXplKCdEZXNjcmlwdGlvbnMnKSArIFwiPC9zcGFuPlxcbiAgICAgIFwiO1xuICAgIH1cblxuICAgIGlubmVySFRNTCArPSAnPC9zcGFuPic7XG5cbiAgICB2YXIgZWwgPSBfTWVudUl0ZW0ucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgdHlwZSwgYXNzaWduKHtcbiAgICAgIGlubmVySFRNTDogaW5uZXJIVE1MXG4gICAgfSwgcHJvcHMpLCBhdHRycyk7XG5cbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBhbiBgQXVkaW9UcmFja01lbnVJdGVtIGlzIFwiY2xpY2tlZFwiLiBTZWUge0BsaW5rIENsaWNrYWJsZUNvbXBvbmVudH1cbiAgICogZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBhIGNsaWNrIGNhbiBiZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIHZhciB0cmFja3MgPSB0aGlzLnBsYXllcl8uYXVkaW9UcmFja3MoKTtcblxuICAgIF9NZW51SXRlbS5wcm90b3R5cGUuaGFuZGxlQ2xpY2suY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRyYWNrID0gdHJhY2tzW2ldO1xuICAgICAgdHJhY2suZW5hYmxlZCA9IHRyYWNrID09PSB0aGlzLnRyYWNrO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGFueSB7QGxpbmsgQXVkaW9UcmFja30gY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUge0BsaW5rIEF1ZGlvVHJhY2tMaXN0I2NoYW5nZX0gZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIEF1ZGlvVHJhY2tMaXN0I2NoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUcmFja3NDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVUcmFja3NDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkKHRoaXMudHJhY2suZW5hYmxlZCk7XG4gIH07XG5cbiAgcmV0dXJuIEF1ZGlvVHJhY2tNZW51SXRlbTtcbn0oTWVudUl0ZW0pO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0F1ZGlvVHJhY2tNZW51SXRlbScsIEF1ZGlvVHJhY2tNZW51SXRlbSk7XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGJ1dHRvbnMgdGhhdCB0b2dnbGUgc3BlY2lmaWMge0BsaW5rIEF1ZGlvVHJhY2t9IHR5cGVzLlxuICpcbiAqIEBleHRlbmRzIFRyYWNrQnV0dG9uXG4gKi9cblxudmFyIEF1ZGlvVHJhY2tCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UcmFja0J1dHRvbikge1xuICBfaW5oZXJpdHNMb29zZShBdWRpb1RyYWNrQnV0dG9uLCBfVHJhY2tCdXR0b24pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgIFRoZSBgUGxheWVyYCB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG4gICAqICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gQXVkaW9UcmFja0J1dHRvbihwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cmFja3MgPSBwbGF5ZXIuYXVkaW9UcmFja3MoKTtcbiAgICByZXR1cm4gX1RyYWNrQnV0dG9uLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEF1ZGlvVHJhY2tCdXR0b24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtYXVkaW8tYnV0dG9uIFwiICsgX1RyYWNrQnV0dG9uLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmJ1aWxkV3JhcHBlckNTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRXcmFwcGVyQ1NTQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwidmpzLWF1ZGlvLWJ1dHRvbiBcIiArIF9UcmFja0J1dHRvbi5wcm90b3R5cGUuYnVpbGRXcmFwcGVyQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbWVudSBpdGVtIGZvciBlYWNoIGF1ZGlvIHRyYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaW9UcmFja01lbnVJdGVtW119IFtpdGVtcz1bXV1cbiAgICogICAgICAgIEFuIGFycmF5IG9mIGV4aXN0aW5nIG1lbnUgaXRlbXMgdG8gdXNlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtBdWRpb1RyYWNrTWVudUl0ZW1bXX1cbiAgICogICAgICAgICBBbiBhcnJheSBvZiBtZW51IGl0ZW1zXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUl0ZW1zID0gZnVuY3Rpb24gY3JlYXRlSXRlbXMoaXRlbXMpIHtcbiAgICBpZiAoaXRlbXMgPT09IHZvaWQgMCkge1xuICAgICAgaXRlbXMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSdzIG9ubHkgb25lIGF1ZGlvIHRyYWNrLCB0aGVyZSBubyBwb2ludCBpbiBzaG93aW5nIGl0XG4gICAgdGhpcy5oaWRlVGhyZXNob2xkXyA9IDE7XG4gICAgdmFyIHRyYWNrcyA9IHRoaXMucGxheWVyXy5hdWRpb1RyYWNrcygpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tpXTtcbiAgICAgIGl0ZW1zLnB1c2gobmV3IEF1ZGlvVHJhY2tNZW51SXRlbSh0aGlzLnBsYXllcl8sIHtcbiAgICAgICAgdHJhY2s6IHRyYWNrLFxuICAgICAgICAvLyBNZW51SXRlbSBpcyBzZWxlY3RhYmxlXG4gICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgIC8vIE1lbnVJdGVtIGlzIE5PVCBtdWx0aVNlbGVjdGFibGUgKGkuZS4gb25seSBvbmUgY2FuIGJlIG1hcmtlZCBcInNlbGVjdGVkXCIgYXQgYSB0aW1lKVxuICAgICAgICBtdWx0aVNlbGVjdGFibGU6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIHJldHVybiBBdWRpb1RyYWNrQnV0dG9uO1xufShUcmFja0J1dHRvbik7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYEF1ZGlvVHJhY2tCdXR0b25gcyBjb250cm9scy4gQWRkZWQgZm9yIGxvY2FsaXphdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cbkF1ZGlvVHJhY2tCdXR0b24ucHJvdG90eXBlLmNvbnRyb2xUZXh0XyA9ICdBdWRpbyBUcmFjayc7XG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0F1ZGlvVHJhY2tCdXR0b24nLCBBdWRpb1RyYWNrQnV0dG9uKTtcblxuLyoqXG4gKiBUaGUgc3BlY2lmaWMgbWVudSBpdGVtIHR5cGUgZm9yIHNlbGVjdGluZyBhIHBsYXliYWNrIHJhdGUuXG4gKlxuICogQGV4dGVuZHMgTWVudUl0ZW1cbiAqL1xuXG52YXIgUGxheWJhY2tSYXRlTWVudUl0ZW0gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9NZW51SXRlbSkge1xuICBfaW5oZXJpdHNMb29zZShQbGF5YmFja1JhdGVNZW51SXRlbSwgX01lbnVJdGVtKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFBsYXliYWNrUmF0ZU1lbnVJdGVtKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBsYWJlbCA9IG9wdGlvbnMucmF0ZTtcbiAgICB2YXIgcmF0ZSA9IHBhcnNlRmxvYXQobGFiZWwsIDEwKTsgLy8gTW9kaWZ5IG9wdGlvbnMgZm9yIHBhcmVudCBNZW51SXRlbSBjbGFzcydzIGluaXQuXG5cbiAgICBvcHRpb25zLmxhYmVsID0gbGFiZWw7XG4gICAgb3B0aW9ucy5zZWxlY3RlZCA9IHJhdGUgPT09IDE7XG4gICAgb3B0aW9ucy5zZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICBvcHRpb25zLm11bHRpU2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgIF90aGlzID0gX01lbnVJdGVtLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgX3RoaXMucmF0ZSA9IHJhdGU7XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICdyYXRlY2hhbmdlJywgX3RoaXMudXBkYXRlKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGBQbGF5YmFja1JhdGVNZW51SXRlbWAgaXMgXCJjbGlja2VkXCIuIFNlZVxuICAgKiB7QGxpbmsgQ2xpY2thYmxlQ29tcG9uZW50fSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IGEgY2xpY2sgY2FuIGJlLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYGtleWRvd25gLCBgdGFwYCwgb3IgYGNsaWNrYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICAqICAgICAgICBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIHRhcFxuICAgKiBAbGlzdGVucyBjbGlja1xuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQbGF5YmFja1JhdGVNZW51SXRlbS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBfTWVudUl0ZW0ucHJvdG90eXBlLmhhbmRsZUNsaWNrLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZSh0aGlzLnJhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIFBsYXliYWNrUmF0ZU1lbnVJdGVtIHdoZW4gdGhlIHBsYXliYWNrcmF0ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgYHJhdGVjaGFuZ2VgIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjcmF0ZWNoYW5nZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkKHRoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKCkgPT09IHRoaXMucmF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIFBsYXliYWNrUmF0ZU1lbnVJdGVtO1xufShNZW51SXRlbSk7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYFBsYXliYWNrUmF0ZU1lbnVJdGVtYHMgY29udHJvbHMuIEFkZGVkIGZvciBsb2NhbGl6YXRpb24uXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5QbGF5YmFja1JhdGVNZW51SXRlbS5wcm90b3R5cGUuY29udGVudEVsVHlwZSA9ICdidXR0b24nO1xuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdQbGF5YmFja1JhdGVNZW51SXRlbScsIFBsYXliYWNrUmF0ZU1lbnVJdGVtKTtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IGZvciBjb250cm9sbGluZyB0aGUgcGxheWJhY2sgcmF0ZS5cbiAqXG4gKiBAZXh0ZW5kcyBNZW51QnV0dG9uXG4gKi9cblxudmFyIFBsYXliYWNrUmF0ZU1lbnVCdXR0b24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9NZW51QnV0dG9uKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBsYXliYWNrUmF0ZU1lbnVCdXR0b24sIF9NZW51QnV0dG9uKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyXG4gICAqICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIFBsYXliYWNrUmF0ZU1lbnVCdXR0b24ocGxheWVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfTWVudUJ1dHRvbi5jYWxsKHRoaXMsIHBsYXllciwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIF90aGlzLnVwZGF0ZVZpc2liaWxpdHkoKTtcblxuICAgIF90aGlzLnVwZGF0ZUxhYmVsKCk7XG5cbiAgICBfdGhpcy5vbihwbGF5ZXIsICdsb2Fkc3RhcnQnLCBfdGhpcy51cGRhdGVWaXNpYmlsaXR5KTtcblxuICAgIF90aGlzLm9uKHBsYXllciwgJ3JhdGVjaGFuZ2UnLCBfdGhpcy51cGRhdGVMYWJlbCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYENvbXBvbmVudGAncyBET00gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBlbGVtZW50IHRoYXQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBsYXliYWNrUmF0ZU1lbnVCdXR0b24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsJDEoKSB7XG4gICAgdmFyIGVsID0gX01lbnVCdXR0b24ucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmxhYmVsRWxfID0gY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1wbGF5YmFjay1yYXRlLXZhbHVlJyxcbiAgICAgIGlubmVySFRNTDogJzF4J1xuICAgIH0pO1xuICAgIGVsLmFwcGVuZENoaWxkKHRoaXMubGFiZWxFbF8pO1xuICAgIHJldHVybiBlbDtcbiAgfTtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5sYWJlbEVsXyA9IG51bGw7XG5cbiAgICBfTWVudUJ1dHRvbi5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1wbGF5YmFjay1yYXRlIFwiICsgX01lbnVCdXR0b24ucHJvdG90eXBlLmJ1aWxkQ1NTQ2xhc3MuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYnVpbGRXcmFwcGVyQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZFdyYXBwZXJDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtcGxheWJhY2stcmF0ZSBcIiArIF9NZW51QnV0dG9uLnByb3RvdHlwZS5idWlsZFdyYXBwZXJDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHBsYXliYWNrIHJhdGUgbWVudVxuICAgKlxuICAgKiBAcmV0dXJuIHtNZW51fVxuICAgKiAgICAgICAgIE1lbnUgb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHtAbGluayBQbGF5YmFja1JhdGVNZW51SXRlbX1zXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZU1lbnUgPSBmdW5jdGlvbiBjcmVhdGVNZW51KCkge1xuICAgIHZhciBtZW51ID0gbmV3IE1lbnUodGhpcy5wbGF5ZXIoKSk7XG4gICAgdmFyIHJhdGVzID0gdGhpcy5wbGF5YmFja1JhdGVzKCk7XG5cbiAgICBpZiAocmF0ZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSByYXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBtZW51LmFkZENoaWxkKG5ldyBQbGF5YmFja1JhdGVNZW51SXRlbSh0aGlzLnBsYXllcigpLCB7XG4gICAgICAgICAgcmF0ZTogcmF0ZXNbaV0gKyAneCdcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZW51O1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIEFSSUEgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZUFSSUFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gdXBkYXRlQVJJQUF0dHJpYnV0ZXMoKSB7XG4gICAgLy8gQ3VycmVudCBwbGF5YmFjayByYXRlXG4gICAgdGhpcy5lbCgpLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gYW4gYFBsYXliYWNrUmF0ZU1lbnVCdXR0b25gIGlzIFwiY2xpY2tlZFwiLiBTZWVcbiAgICoge0BsaW5rIENsaWNrYWJsZUNvbXBvbmVudH0gZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBhIGNsaWNrIGNhbiBiZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCwgYHRhcGAsIG9yIGBjbGlja2AgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgKiAgICAgICAgY2FsbGVkLlxuICAgKlxuICAgKiBAbGlzdGVucyB0YXBcbiAgICogQGxpc3RlbnMgY2xpY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIC8vIHNlbGVjdCBuZXh0IHJhdGUgb3B0aW9uXG4gICAgdmFyIGN1cnJlbnRSYXRlID0gdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGUoKTtcbiAgICB2YXIgcmF0ZXMgPSB0aGlzLnBsYXliYWNrUmF0ZXMoKTsgLy8gdGhpcyB3aWxsIHNlbGVjdCBmaXJzdCBvbmUgaWYgdGhlIGxhc3Qgb25lIGN1cnJlbnRseSBzZWxlY3RlZFxuXG4gICAgdmFyIG5ld1JhdGUgPSByYXRlc1swXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyYXRlc1tpXSA+IGN1cnJlbnRSYXRlKSB7XG4gICAgICAgIG5ld1JhdGUgPSByYXRlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGUobmV3UmF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBwb3NzaWJsZSBwbGF5YmFjayByYXRlc1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICogICAgICAgICBBbGwgcG9zc2libGUgcGxheWJhY2sgcmF0ZXNcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGxheWJhY2tSYXRlcyA9IGZ1bmN0aW9uIHBsYXliYWNrUmF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc18ucGxheWJhY2tSYXRlcyB8fCB0aGlzLm9wdGlvbnNfLnBsYXllck9wdGlvbnMgJiYgdGhpcy5vcHRpb25zXy5wbGF5ZXJPcHRpb25zLnBsYXliYWNrUmF0ZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHBsYXliYWNrIHJhdGVzIGlzIHN1cHBvcnRlZCBieSB0aGUgdGVjaFxuICAgKiBhbmQgYW4gYXJyYXkgb2YgcGxheWJhY2sgcmF0ZXMgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgV2hldGhlciBjaGFuZ2luZyBwbGF5YmFjayByYXRlIGlzIHN1cHBvcnRlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wbGF5YmFja1JhdGVTdXBwb3J0ZWQgPSBmdW5jdGlvbiBwbGF5YmFja1JhdGVTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGxheWVyKCkudGVjaF8gJiYgdGhpcy5wbGF5ZXIoKS50ZWNoXy5mZWF0dXJlc1BsYXliYWNrUmF0ZSAmJiB0aGlzLnBsYXliYWNrUmF0ZXMoKSAmJiB0aGlzLnBsYXliYWNrUmF0ZXMoKS5sZW5ndGggPiAwO1xuICB9XG4gIC8qKlxuICAgKiBIaWRlIHBsYXliYWNrIHJhdGUgY29udHJvbHMgd2hlbiB0aGV5J3JlIG5vIHBsYXliYWNrIHJhdGUgb3B0aW9ucyB0byBzZWxlY3RcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gW2V2ZW50XVxuICAgKiAgICAgICAgVGhlIGV2ZW50IHRoYXQgY2F1c2VkIHRoaXMgZnVuY3Rpb24gdG8gcnVuLlxuICAgKlxuICAgKiBAbGlzdGVucyBQbGF5ZXIjbG9hZHN0YXJ0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZVZpc2liaWxpdHkgPSBmdW5jdGlvbiB1cGRhdGVWaXNpYmlsaXR5KGV2ZW50KSB7XG4gICAgaWYgKHRoaXMucGxheWJhY2tSYXRlU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRDbGFzcygndmpzLWhpZGRlbicpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXBkYXRlIGJ1dHRvbiBsYWJlbCB3aGVuIHJhdGUgY2hhbmdlZFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBbZXZlbnRdXG4gICAqICAgICAgICBUaGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBydW4uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFBsYXllciNyYXRlY2hhbmdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZUxhYmVsID0gZnVuY3Rpb24gdXBkYXRlTGFiZWwoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wbGF5YmFja1JhdGVTdXBwb3J0ZWQoKSkge1xuICAgICAgdGhpcy5sYWJlbEVsXy5pbm5lckhUTUwgPSB0aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZSgpICsgJ3gnO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUGxheWJhY2tSYXRlTWVudUJ1dHRvbjtcbn0oTWVudUJ1dHRvbik7XG4vKipcbiAqIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGRpc3BsYXkgb3ZlciB0aGUgYEZ1bGxzY3JlZW5Ub2dnbGVgcyBjb250cm9scy4gQWRkZWQgZm9yIGxvY2FsaXphdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cblBsYXliYWNrUmF0ZU1lbnVCdXR0b24ucHJvdG90eXBlLmNvbnRyb2xUZXh0XyA9ICdQbGF5YmFjayBSYXRlJztcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUGxheWJhY2tSYXRlTWVudUJ1dHRvbicsIFBsYXliYWNrUmF0ZU1lbnVCdXR0b24pO1xuXG4vKipcbiAqIEp1c3QgYW4gZW1wdHkgc3BhY2VyIGVsZW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBhcHBlbmQgcG9pbnQgZm9yIHBsdWdpbnMsIGV0Yy5cbiAqIEFsc28gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIFNwYWNlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTcGFjZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFNwYWNlcigpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3BhY2VyLnByb3RvdHlwZTtcblxuICAvKipcbiAgKiBCdWlsZHMgdGhlIGRlZmF1bHQgRE9NIGBjbGFzc05hbWVgLlxuICAqXG4gICogQHJldHVybiB7c3RyaW5nfVxuICAqICAgICAgICAgVGhlIERPTSBgY2xhc3NOYW1lYCBmb3IgdGhpcyBvYmplY3QuXG4gICovXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtc3BhY2VyIFwiICsgX0NvbXBvbmVudC5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6IHRoaXMuYnVpbGRDU1NDbGFzcygpXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNwYWNlcjtcbn0oQ29tcG9uZW50KTtcblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdTcGFjZXInLCBTcGFjZXIpO1xuXG4vKipcbiAqIFNwYWNlciBzcGVjaWZpY2FsbHkgbWVhbnQgdG8gYmUgdXNlZCBhcyBhbiBpbnNlcnRpb24gcG9pbnQgZm9yIG5ldyBwbHVnaW5zLCBldGMuXG4gKlxuICogQGV4dGVuZHMgU3BhY2VyXG4gKi9cblxudmFyIEN1c3RvbUNvbnRyb2xTcGFjZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9TcGFjZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ3VzdG9tQ29udHJvbFNwYWNlciwgX1NwYWNlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tQ29udHJvbFNwYWNlcigpIHtcbiAgICByZXR1cm4gX1NwYWNlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ3VzdG9tQ29udHJvbFNwYWNlci5wcm90b3R5cGU7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgZGVmYXVsdCBET00gYGNsYXNzTmFtZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgRE9NIGBjbGFzc05hbWVgIGZvciB0aGlzIG9iamVjdC5cbiAgICovXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gXCJ2anMtY3VzdG9tLWNvbnRyb2wtc3BhY2VyIFwiICsgX1NwYWNlci5wcm90b3R5cGUuYnVpbGRDU1NDbGFzcy5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBDb21wb25lbnRgJ3MgRE9NIGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHZhciBlbCA9IF9TcGFjZXIucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywge1xuICAgICAgY2xhc3NOYW1lOiB0aGlzLmJ1aWxkQ1NTQ2xhc3MoKVxuICAgIH0pOyAvLyBOby1mbGV4L3RhYmxlLWNlbGwgbW9kZSByZXF1aXJlcyB0aGVyZSBiZSBzb21lIGNvbnRlbnRcbiAgICAvLyBpbiB0aGUgY2VsbCB0byBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2Ugb2YgdGhlIHRhYmxlLlxuXG5cbiAgICBlbC5pbm5lckhUTUwgPSBcIlxceEEwXCI7XG4gICAgcmV0dXJuIGVsO1xuICB9O1xuXG4gIHJldHVybiBDdXN0b21Db250cm9sU3BhY2VyO1xufShTcGFjZXIpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0N1c3RvbUNvbnRyb2xTcGFjZXInLCBDdXN0b21Db250cm9sU3BhY2VyKTtcblxuLyoqXG4gKiBDb250YWluZXIgb2YgbWFpbiBjb250cm9scy5cbiAqXG4gKiBAZXh0ZW5kcyBDb21wb25lbnRcbiAqL1xuXG52YXIgQ29udHJvbEJhciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShDb250cm9sQmFyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDb250cm9sQmFyKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDb250cm9sQmFyLnByb3RvdHlwZTtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBgQ29tcG9uZW50YCdzIERPTSBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHJldHVybiBfQ29tcG9uZW50LnByb3RvdHlwZS5jcmVhdGVFbC5jYWxsKHRoaXMsICdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtY29udHJvbC1iYXInLFxuICAgICAgZGlyOiAnbHRyJ1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBDb250cm9sQmFyO1xufShDb21wb25lbnQpO1xuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIGBDb250cm9sQmFyYFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuQ29udHJvbEJhci5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIGNoaWxkcmVuOiBbJ3BsYXlUb2dnbGUnLCAndm9sdW1lUGFuZWwnLCAnY3VycmVudFRpbWVEaXNwbGF5JywgJ3RpbWVEaXZpZGVyJywgJ2R1cmF0aW9uRGlzcGxheScsICdwcm9ncmVzc0NvbnRyb2wnLCAnbGl2ZURpc3BsYXknLCAnc2Vla1RvTGl2ZScsICdyZW1haW5pbmdUaW1lRGlzcGxheScsICdjdXN0b21Db250cm9sU3BhY2VyJywgJ3BsYXliYWNrUmF0ZU1lbnVCdXR0b24nLCAnY2hhcHRlcnNCdXR0b24nLCAnZGVzY3JpcHRpb25zQnV0dG9uJywgJ3N1YnNDYXBzQnV0dG9uJywgJ2F1ZGlvVHJhY2tCdXR0b24nLCAnZnVsbHNjcmVlblRvZ2dsZSddXG59O1xuXG5pZiAoJ2V4aXRQaWN0dXJlSW5QaWN0dXJlJyBpbiBkb2N1bWVudCkge1xuICBDb250cm9sQmFyLnByb3RvdHlwZS5vcHRpb25zXy5jaGlsZHJlbi5zcGxpY2UoQ29udHJvbEJhci5wcm90b3R5cGUub3B0aW9uc18uY2hpbGRyZW4ubGVuZ3RoIC0gMSwgMCwgJ3BpY3R1cmVJblBpY3R1cmVUb2dnbGUnKTtcbn1cblxuQ29tcG9uZW50LnJlZ2lzdGVyQ29tcG9uZW50KCdDb250cm9sQmFyJywgQ29udHJvbEJhcik7XG5cbi8qKlxuICogQSBkaXNwbGF5IHRoYXQgaW5kaWNhdGVzIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSB2aWRlb1xuICogaXMgdW5wbGF5YWJsZS5cbiAqXG4gKiBAZXh0ZW5kcyBNb2RhbERpYWxvZ1xuICovXG5cbnZhciBFcnJvckRpc3BsYXkgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Nb2RhbERpYWxvZykge1xuICBfaW5oZXJpdHNMb29zZShFcnJvckRpc3BsYXksIF9Nb2RhbERpYWxvZyk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtICB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgICBUaGUga2V5L3ZhbHVlIHN0b3JlIG9mIHBsYXllciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gRXJyb3JEaXNwbGF5KHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX01vZGFsRGlhbG9nLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMub24ocGxheWVyLCAnZXJyb3InLCBfdGhpcy5vcGVuKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBkZWZhdWx0IERPTSBgY2xhc3NOYW1lYC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBET00gYGNsYXNzTmFtZWAgZm9yIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSB2ZXJzaW9uIDUuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEVycm9yRGlzcGxheS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkQ1NTQ2xhc3MgPSBmdW5jdGlvbiBidWlsZENTU0NsYXNzKCkge1xuICAgIHJldHVybiBcInZqcy1lcnJvci1kaXNwbGF5IFwiICsgX01vZGFsRGlhbG9nLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIHRoZSBgUGxheWVyYHMgZXJyb3IuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgYFBsYXllcmBzIGVycm9yIG1lc3NhZ2UgbG9jYWxpemVkIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY29udGVudCA9IGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgdmFyIGVycm9yID0gdGhpcy5wbGF5ZXIoKS5lcnJvcigpO1xuICAgIHJldHVybiBlcnJvciA/IHRoaXMubG9jYWxpemUoZXJyb3IubWVzc2FnZSkgOiAnJztcbiAgfTtcblxuICByZXR1cm4gRXJyb3JEaXNwbGF5O1xufShNb2RhbERpYWxvZyk7XG4vKipcbiAqIFRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGFuIGBFcnJvckRpc3BsYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5FcnJvckRpc3BsYXkucHJvdG90eXBlLm9wdGlvbnNfID0gbWVyZ2VPcHRpb25zKE1vZGFsRGlhbG9nLnByb3RvdHlwZS5vcHRpb25zXywge1xuICBwYXVzZU9uT3BlbjogZmFsc2UsXG4gIGZpbGxBbHdheXM6IHRydWUsXG4gIHRlbXBvcmFyeTogZmFsc2UsXG4gIHVuY2xvc2VhYmxlOiB0cnVlXG59KTtcbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnRXJyb3JEaXNwbGF5JywgRXJyb3JEaXNwbGF5KTtcblxudmFyIExPQ0FMX1NUT1JBR0VfS0VZID0gJ3Zqcy10ZXh0LXRyYWNrLXNldHRpbmdzJztcbnZhciBDT0xPUl9CTEFDSyA9IFsnIzAwMCcsICdCbGFjayddO1xudmFyIENPTE9SX0JMVUUgPSBbJyMwMEYnLCAnQmx1ZSddO1xudmFyIENPTE9SX0NZQU4gPSBbJyMwRkYnLCAnQ3lhbiddO1xudmFyIENPTE9SX0dSRUVOID0gWycjMEYwJywgJ0dyZWVuJ107XG52YXIgQ09MT1JfTUFHRU5UQSA9IFsnI0YwRicsICdNYWdlbnRhJ107XG52YXIgQ09MT1JfUkVEID0gWycjRjAwJywgJ1JlZCddO1xudmFyIENPTE9SX1dISVRFID0gWycjRkZGJywgJ1doaXRlJ107XG52YXIgQ09MT1JfWUVMTE9XID0gWycjRkYwJywgJ1llbGxvdyddO1xudmFyIE9QQUNJVFlfT1BBUVVFID0gWycxJywgJ09wYXF1ZSddO1xudmFyIE9QQUNJVFlfU0VNSSA9IFsnMC41JywgJ1NlbWktVHJhbnNwYXJlbnQnXTtcbnZhciBPUEFDSVRZX1RSQU5TID0gWycwJywgJ1RyYW5zcGFyZW50J107IC8vIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB2YXJpb3VzIDxzZWxlY3Q+IGVsZW1lbnRzIGluIHRoZSBET00gb2YgdGhpcyBjb21wb25lbnQuXG4vL1xuLy8gUG9zc2libGUga2V5cyBpbmNsdWRlOlxuLy9cbi8vIGBkZWZhdWx0YDpcbi8vICAgVGhlIGRlZmF1bHQgb3B0aW9uIGluZGV4LiBPbmx5IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGlmIG5vdCB6ZXJvLlxuLy8gYHBhcnNlcmA6XG4vLyAgIEEgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBwYXJzZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0ZWQgb3B0aW9uIGluXG4vLyAgIGEgY3VzdG9taXplZCB3YXkuXG4vLyBgc2VsZWN0b3JgOlxuLy8gICBUaGUgc2VsZWN0b3IgdXNlZCB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIDxzZWxlY3Q+IGVsZW1lbnQuXG5cbnZhciBzZWxlY3RDb25maWdzID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICBzZWxlY3RvcjogJy52anMtYmctY29sb3IgPiBzZWxlY3QnLFxuICAgIGlkOiAnY2FwdGlvbnMtYmFja2dyb3VuZC1jb2xvci0lcycsXG4gICAgbGFiZWw6ICdDb2xvcicsXG4gICAgb3B0aW9uczogW0NPTE9SX0JMQUNLLCBDT0xPUl9XSElURSwgQ09MT1JfUkVELCBDT0xPUl9HUkVFTiwgQ09MT1JfQkxVRSwgQ09MT1JfWUVMTE9XLCBDT0xPUl9NQUdFTlRBLCBDT0xPUl9DWUFOXVxuICB9LFxuICBiYWNrZ3JvdW5kT3BhY2l0eToge1xuICAgIHNlbGVjdG9yOiAnLnZqcy1iZy1vcGFjaXR5ID4gc2VsZWN0JyxcbiAgICBpZDogJ2NhcHRpb25zLWJhY2tncm91bmQtb3BhY2l0eS0lcycsXG4gICAgbGFiZWw6ICdUcmFuc3BhcmVuY3knLFxuICAgIG9wdGlvbnM6IFtPUEFDSVRZX09QQVFVRSwgT1BBQ0lUWV9TRU1JLCBPUEFDSVRZX1RSQU5TXVxuICB9LFxuICBjb2xvcjoge1xuICAgIHNlbGVjdG9yOiAnLnZqcy1mZy1jb2xvciA+IHNlbGVjdCcsXG4gICAgaWQ6ICdjYXB0aW9ucy1mb3JlZ3JvdW5kLWNvbG9yLSVzJyxcbiAgICBsYWJlbDogJ0NvbG9yJyxcbiAgICBvcHRpb25zOiBbQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBDT0xPUl9SRUQsIENPTE9SX0dSRUVOLCBDT0xPUl9CTFVFLCBDT0xPUl9ZRUxMT1csIENPTE9SX01BR0VOVEEsIENPTE9SX0NZQU5dXG4gIH0sXG4gIGVkZ2VTdHlsZToge1xuICAgIHNlbGVjdG9yOiAnLnZqcy1lZGdlLXN0eWxlID4gc2VsZWN0JyxcbiAgICBpZDogJyVzJyxcbiAgICBsYWJlbDogJ1RleHQgRWRnZSBTdHlsZScsXG4gICAgb3B0aW9uczogW1snbm9uZScsICdOb25lJ10sIFsncmFpc2VkJywgJ1JhaXNlZCddLCBbJ2RlcHJlc3NlZCcsICdEZXByZXNzZWQnXSwgWyd1bmlmb3JtJywgJ1VuaWZvcm0nXSwgWydkcm9wc2hhZG93JywgJ0Ryb3BzaGFkb3cnXV1cbiAgfSxcbiAgZm9udEZhbWlseToge1xuICAgIHNlbGVjdG9yOiAnLnZqcy1mb250LWZhbWlseSA+IHNlbGVjdCcsXG4gICAgaWQ6ICdjYXB0aW9ucy1mb250LWZhbWlseS0lcycsXG4gICAgbGFiZWw6ICdGb250IEZhbWlseScsXG4gICAgb3B0aW9uczogW1sncHJvcG9ydGlvbmFsU2Fuc1NlcmlmJywgJ1Byb3BvcnRpb25hbCBTYW5zLVNlcmlmJ10sIFsnbW9ub3NwYWNlU2Fuc1NlcmlmJywgJ01vbm9zcGFjZSBTYW5zLVNlcmlmJ10sIFsncHJvcG9ydGlvbmFsU2VyaWYnLCAnUHJvcG9ydGlvbmFsIFNlcmlmJ10sIFsnbW9ub3NwYWNlU2VyaWYnLCAnTW9ub3NwYWNlIFNlcmlmJ10sIFsnY2FzdWFsJywgJ0Nhc3VhbCddLCBbJ3NjcmlwdCcsICdTY3JpcHQnXSwgWydzbWFsbC1jYXBzJywgJ1NtYWxsIENhcHMnXV1cbiAgfSxcbiAgZm9udFBlcmNlbnQ6IHtcbiAgICBzZWxlY3RvcjogJy52anMtZm9udC1wZXJjZW50ID4gc2VsZWN0JyxcbiAgICBpZDogJ2NhcHRpb25zLWZvbnQtc2l6ZS0lcycsXG4gICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgIG9wdGlvbnM6IFtbJzAuNTAnLCAnNTAlJ10sIFsnMC43NScsICc3NSUnXSwgWycxLjAwJywgJzEwMCUnXSwgWycxLjI1JywgJzEyNSUnXSwgWycxLjUwJywgJzE1MCUnXSwgWycxLjc1JywgJzE3NSUnXSwgWycyLjAwJywgJzIwMCUnXSwgWyczLjAwJywgJzMwMCUnXSwgWyc0LjAwJywgJzQwMCUnXV0sXG4gICAgXCJkZWZhdWx0XCI6IDIsXG4gICAgcGFyc2VyOiBmdW5jdGlvbiBwYXJzZXIodikge1xuICAgICAgcmV0dXJuIHYgPT09ICcxLjAwJyA/IG51bGwgOiBOdW1iZXIodik7XG4gICAgfVxuICB9LFxuICB0ZXh0T3BhY2l0eToge1xuICAgIHNlbGVjdG9yOiAnLnZqcy10ZXh0LW9wYWNpdHkgPiBzZWxlY3QnLFxuICAgIGlkOiAnY2FwdGlvbnMtZm9yZWdyb3VuZC1vcGFjaXR5LSVzJyxcbiAgICBsYWJlbDogJ1RyYW5zcGFyZW5jeScsXG4gICAgb3B0aW9uczogW09QQUNJVFlfT1BBUVVFLCBPUEFDSVRZX1NFTUldXG4gIH0sXG4gIC8vIE9wdGlvbnMgZm9yIHRoaXMgb2JqZWN0IGFyZSBkZWZpbmVkIGJlbG93LlxuICB3aW5kb3dDb2xvcjoge1xuICAgIHNlbGVjdG9yOiAnLnZqcy13aW5kb3ctY29sb3IgPiBzZWxlY3QnLFxuICAgIGlkOiAnY2FwdGlvbnMtd2luZG93LWNvbG9yLSVzJyxcbiAgICBsYWJlbDogJ0NvbG9yJ1xuICB9LFxuICAvLyBPcHRpb25zIGZvciB0aGlzIG9iamVjdCBhcmUgZGVmaW5lZCBiZWxvdy5cbiAgd2luZG93T3BhY2l0eToge1xuICAgIHNlbGVjdG9yOiAnLnZqcy13aW5kb3ctb3BhY2l0eSA+IHNlbGVjdCcsXG4gICAgaWQ6ICdjYXB0aW9ucy13aW5kb3ctb3BhY2l0eS0lcycsXG4gICAgbGFiZWw6ICdUcmFuc3BhcmVuY3knLFxuICAgIG9wdGlvbnM6IFtPUEFDSVRZX1RSQU5TLCBPUEFDSVRZX1NFTUksIE9QQUNJVFlfT1BBUVVFXVxuICB9XG59O1xuc2VsZWN0Q29uZmlncy53aW5kb3dDb2xvci5vcHRpb25zID0gc2VsZWN0Q29uZmlncy5iYWNrZ3JvdW5kQ29sb3Iub3B0aW9ucztcbi8qKlxuICogR2V0IHRoZSBhY3R1YWwgdmFsdWUgb2YgYW4gb3B0aW9uLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdmFsdWVcbiAqICAgICAgICAgVGhlIHZhbHVlIHRvIGdldFxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbcGFyc2VyXVxuICogICAgICAgICBPcHRpb25hbCBmdW5jdGlvbiB0byBhZGp1c3QgdGhlIHZhbHVlLlxuICpcbiAqIEByZXR1cm4ge01peGVkfVxuICogICAgICAgICAtIFdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm8gdmFsdWUgZXhpc3RzXG4gKiAgICAgICAgIC0gV2lsbCBiZSBgdW5kZWZpbmVkYCBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgXCJub25lXCIuXG4gKiAgICAgICAgIC0gV2lsbCBiZSB0aGUgYWN0dWFsIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uVmFsdWUodmFsdWUsIHBhcnNlcikge1xuICBpZiAocGFyc2VyKSB7XG4gICAgdmFsdWUgPSBwYXJzZXIodmFsdWUpO1xuICB9XG5cbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnbm9uZScpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIDxvcHRpb24+IGVsZW1lbnQgd2l0aGluIGEgPHNlbGVjdD4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbFxuICogICAgICAgICB0aGUgZWxlbWVudCB0byBsb29rIGluXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IFtwYXJzZXJdXG4gKiAgICAgICAgIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgdmFsdWUuXG4gKlxuICogQHJldHVybiB7TWl4ZWR9XG4gKiAgICAgICAgIC0gV2lsbCBiZSBgdW5kZWZpbmVkYCBpZiBubyB2YWx1ZSBleGlzdHNcbiAqICAgICAgICAgLSBXaWxsIGJlIGB1bmRlZmluZWRgIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBcIm5vbmVcIi5cbiAqICAgICAgICAgLSBXaWxsIGJlIHRoZSBhY3R1YWwgdmFsdWUgb3RoZXJ3aXNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvblZhbHVlKGVsLCBwYXJzZXIpIHtcbiAgdmFyIHZhbHVlID0gZWwub3B0aW9uc1tlbC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xuICByZXR1cm4gcGFyc2VPcHRpb25WYWx1ZSh2YWx1ZSwgcGFyc2VyKTtcbn1cbi8qKlxuICogU2V0cyB0aGUgc2VsZWN0ZWQgPG9wdGlvbj4gZWxlbWVudCB3aXRoaW4gYSA8c2VsZWN0PiBlbGVtZW50IGJhc2VkIG9uIGFcbiAqIGdpdmVuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqICAgICAgICBUaGUgZWxlbWVudCB0byBsb29rIGluLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICAgICAgIHRoZSBwcm9wZXJ0eSB0byBsb29rIG9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXJzZXJdXG4gKiAgICAgICAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gYWRqdXN0IHRoZSB2YWx1ZSBiZWZvcmUgY29tcGFyaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZE9wdGlvbihlbCwgdmFsdWUsIHBhcnNlcikge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHBhcnNlT3B0aW9uVmFsdWUoZWwub3B0aW9uc1tpXS52YWx1ZSwgcGFyc2VyKSA9PT0gdmFsdWUpIHtcbiAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIE1hbmlwdWxhdGUgVGV4dCBUcmFja3Mgc2V0dGluZ3MuXG4gKlxuICogQGV4dGVuZHMgTW9kYWxEaWFsb2dcbiAqL1xuXG5cbnZhciBUZXh0VHJhY2tTZXR0aW5ncyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX01vZGFsRGlhbG9nKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRleHRUcmFja1NldHRpbmdzLCBfTW9kYWxEaWFsb2cpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXJcbiAgICogICAgICAgICBUaGUgYFBsYXllcmAgdGhhdCB0aGlzIGNsYXNzIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgcGxheWVyIG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0VHJhY2tTZXR0aW5ncyhwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBvcHRpb25zLnRlbXBvcmFyeSA9IGZhbHNlO1xuICAgIF90aGlzID0gX01vZGFsRGlhbG9nLmNhbGwodGhpcywgcGxheWVyLCBvcHRpb25zKSB8fCB0aGlzO1xuICAgIF90aGlzLnVwZGF0ZURpc3BsYXkgPSBiaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBfdGhpcy51cGRhdGVEaXNwbGF5KTsgLy8gZmlsbCB0aGUgbW9kYWwgYW5kIHByZXRlbmQgd2UgaGF2ZSBvcGVuZWQgaXRcblxuICAgIF90aGlzLmZpbGwoKTtcblxuICAgIF90aGlzLmhhc0JlZW5PcGVuZWRfID0gX3RoaXMuaGFzQmVlbkZpbGxlZF8gPSB0cnVlO1xuICAgIF90aGlzLmVuZERpYWxvZyA9IGNyZWF0ZUVsKCdwJywge1xuICAgICAgY2xhc3NOYW1lOiAndmpzLWNvbnRyb2wtdGV4dCcsXG4gICAgICB0ZXh0Q29udGVudDogX3RoaXMubG9jYWxpemUoJ0VuZCBvZiBkaWFsb2cgd2luZG93LicpXG4gICAgfSk7XG5cbiAgICBfdGhpcy5lbCgpLmFwcGVuZENoaWxkKF90aGlzLmVuZERpYWxvZyk7XG5cbiAgICBfdGhpcy5zZXREZWZhdWx0cygpOyAvLyBHcmFiIGBwZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3NgIGZyb20gdGhlIHBsYXllciBvcHRpb25zIGlmIG5vdCBwYXNzZWQgaW4gY2hpbGQgb3B0aW9uc1xuXG5cbiAgICBpZiAob3B0aW9ucy5wZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9uc18ucGVyc2lzdFRleHRUcmFja1NldHRpbmdzID0gX3RoaXMub3B0aW9uc18ucGxheWVyT3B0aW9ucy5wZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgX3RoaXMub24oX3RoaXMuJCgnLnZqcy1kb25lLWJ1dHRvbicpLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zYXZlU2V0dGluZ3MoKTtcblxuICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIF90aGlzLm9uKF90aGlzLiQoJy52anMtZGVmYXVsdC1idXR0b24nKSwgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0RGVmYXVsdHMoKTtcblxuICAgICAgX3RoaXMudXBkYXRlRGlzcGxheSgpO1xuICAgIH0pO1xuXG4gICAgZWFjaChzZWxlY3RDb25maWdzLCBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICBfdGhpcy5vbihfdGhpcy4kKGNvbmZpZy5zZWxlY3RvciksICdjaGFuZ2UnLCBfdGhpcy51cGRhdGVEaXNwbGF5KTtcbiAgICB9KTtcblxuICAgIGlmIChfdGhpcy5vcHRpb25zXy5wZXJzaXN0VGV4dFRyYWNrU2V0dGluZ3MpIHtcbiAgICAgIF90aGlzLnJlc3RvcmVTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUZXh0VHJhY2tTZXR0aW5ncy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMuZW5kRGlhbG9nID0gbnVsbDtcblxuICAgIF9Nb2RhbERpYWxvZy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSA8c2VsZWN0PiBlbGVtZW50IHdpdGggY29uZmlndXJlZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqICAgICAgICBDb25maWd1cmF0aW9uIGtleSB0byB1c2UgZHVyaW5nIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgQW4gSFRNTCBzdHJpbmcuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsU2VsZWN0XyA9IGZ1bmN0aW9uIGNyZWF0ZUVsU2VsZWN0XyhrZXksIGxlZ2VuZElkLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAobGVnZW5kSWQgPT09IHZvaWQgMCkge1xuICAgICAgbGVnZW5kSWQgPSAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7XG4gICAgICB0eXBlID0gJ2xhYmVsJztcbiAgICB9XG5cbiAgICB2YXIgY29uZmlnID0gc2VsZWN0Q29uZmlnc1trZXldO1xuICAgIHZhciBpZCA9IGNvbmZpZy5pZC5yZXBsYWNlKCclcycsIHRoaXMuaWRfKTtcbiAgICB2YXIgc2VsZWN0TGFiZWxsZWRieUlkcyA9IFtsZWdlbmRJZCwgaWRdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgcmV0dXJuIFtcIjxcIiArIHR5cGUgKyBcIiBpZD1cXFwiXCIgKyBpZCArIFwiXFxcIiBjbGFzcz1cXFwiXCIgKyAodHlwZSA9PT0gJ2xhYmVsJyA/ICd2anMtbGFiZWwnIDogJycpICsgXCJcXFwiPlwiLCB0aGlzLmxvY2FsaXplKGNvbmZpZy5sYWJlbCksIFwiPC9cIiArIHR5cGUgKyBcIj5cIiwgXCI8c2VsZWN0IGFyaWEtbGFiZWxsZWRieT1cXFwiXCIgKyBzZWxlY3RMYWJlbGxlZGJ5SWRzICsgXCJcXFwiPlwiXS5jb25jYXQoY29uZmlnLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgb3B0aW9uSWQgPSBpZCArICctJyArIG9bMV0ucmVwbGFjZSgvXFxXKy9nLCAnJyk7XG4gICAgICByZXR1cm4gW1wiPG9wdGlvbiBpZD1cXFwiXCIgKyBvcHRpb25JZCArIFwiXFxcIiB2YWx1ZT1cXFwiXCIgKyBvWzBdICsgXCJcXFwiIFwiLCBcImFyaWEtbGFiZWxsZWRieT1cXFwiXCIgKyBzZWxlY3RMYWJlbGxlZGJ5SWRzICsgXCIgXCIgKyBvcHRpb25JZCArIFwiXFxcIj5cIiwgX3RoaXMyLmxvY2FsaXplKG9bMV0pLCAnPC9vcHRpb24+J10uam9pbignJyk7XG4gICAgfSkpLmNvbmNhdCgnPC9zZWxlY3Q+Jykuam9pbignJyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBmb3JlZ3JvdW5kIGNvbG9yIGVsZW1lbnQgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIEFuIEhUTUwgc3RyaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbEZnQ29sb3JfID0gZnVuY3Rpb24gY3JlYXRlRWxGZ0NvbG9yXygpIHtcbiAgICB2YXIgbGVnZW5kSWQgPSBcImNhcHRpb25zLXRleHQtbGVnZW5kLVwiICsgdGhpcy5pZF87XG4gICAgcmV0dXJuIFsnPGZpZWxkc2V0IGNsYXNzPVwidmpzLWZnLWNvbG9yIHZqcy10cmFjay1zZXR0aW5nXCI+JywgXCI8bGVnZW5kIGlkPVxcXCJcIiArIGxlZ2VuZElkICsgXCJcXFwiPlwiLCB0aGlzLmxvY2FsaXplKCdUZXh0JyksICc8L2xlZ2VuZD4nLCB0aGlzLmNyZWF0ZUVsU2VsZWN0XygnY29sb3InLCBsZWdlbmRJZCksICc8c3BhbiBjbGFzcz1cInZqcy10ZXh0LW9wYWNpdHkgdmpzLW9wYWNpdHlcIj4nLCB0aGlzLmNyZWF0ZUVsU2VsZWN0XygndGV4dE9wYWNpdHknLCBsZWdlbmRJZCksICc8L3NwYW4+JywgJzwvZmllbGRzZXQ+J10uam9pbignJyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBiYWNrZ3JvdW5kIGNvbG9yIGVsZW1lbnQgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIEFuIEhUTUwgc3RyaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbEJnQ29sb3JfID0gZnVuY3Rpb24gY3JlYXRlRWxCZ0NvbG9yXygpIHtcbiAgICB2YXIgbGVnZW5kSWQgPSBcImNhcHRpb25zLWJhY2tncm91bmQtXCIgKyB0aGlzLmlkXztcbiAgICByZXR1cm4gWyc8ZmllbGRzZXQgY2xhc3M9XCJ2anMtYmctY29sb3IgdmpzLXRyYWNrLXNldHRpbmdcIj4nLCBcIjxsZWdlbmQgaWQ9XFxcIlwiICsgbGVnZW5kSWQgKyBcIlxcXCI+XCIsIHRoaXMubG9jYWxpemUoJ0JhY2tncm91bmQnKSwgJzwvbGVnZW5kPicsIHRoaXMuY3JlYXRlRWxTZWxlY3RfKCdiYWNrZ3JvdW5kQ29sb3InLCBsZWdlbmRJZCksICc8c3BhbiBjbGFzcz1cInZqcy1iZy1vcGFjaXR5IHZqcy1vcGFjaXR5XCI+JywgdGhpcy5jcmVhdGVFbFNlbGVjdF8oJ2JhY2tncm91bmRPcGFjaXR5JywgbGVnZW5kSWQpLCAnPC9zcGFuPicsICc8L2ZpZWxkc2V0PiddLmpvaW4oJycpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgd2luZG93IGNvbG9yIGVsZW1lbnQgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIEFuIEhUTUwgc3RyaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbFdpbkNvbG9yXyA9IGZ1bmN0aW9uIGNyZWF0ZUVsV2luQ29sb3JfKCkge1xuICAgIHZhciBsZWdlbmRJZCA9IFwiY2FwdGlvbnMtd2luZG93LVwiICsgdGhpcy5pZF87XG4gICAgcmV0dXJuIFsnPGZpZWxkc2V0IGNsYXNzPVwidmpzLXdpbmRvdy1jb2xvciB2anMtdHJhY2stc2V0dGluZ1wiPicsIFwiPGxlZ2VuZCBpZD1cXFwiXCIgKyBsZWdlbmRJZCArIFwiXFxcIj5cIiwgdGhpcy5sb2NhbGl6ZSgnV2luZG93JyksICc8L2xlZ2VuZD4nLCB0aGlzLmNyZWF0ZUVsU2VsZWN0Xygnd2luZG93Q29sb3InLCBsZWdlbmRJZCksICc8c3BhbiBjbGFzcz1cInZqcy13aW5kb3ctb3BhY2l0eSB2anMtb3BhY2l0eVwiPicsIHRoaXMuY3JlYXRlRWxTZWxlY3RfKCd3aW5kb3dPcGFjaXR5JywgbGVnZW5kSWQpLCAnPC9zcGFuPicsICc8L2ZpZWxkc2V0PiddLmpvaW4oJycpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgY29sb3IgZWxlbWVudHMgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsQ29sb3JzXyA9IGZ1bmN0aW9uIGNyZWF0ZUVsQ29sb3JzXygpIHtcbiAgICByZXR1cm4gY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy10cmFjay1zZXR0aW5ncy1jb2xvcnMnLFxuICAgICAgaW5uZXJIVE1MOiBbdGhpcy5jcmVhdGVFbEZnQ29sb3JfKCksIHRoaXMuY3JlYXRlRWxCZ0NvbG9yXygpLCB0aGlzLmNyZWF0ZUVsV2luQ29sb3JfKCldLmpvaW4oJycpXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBmb250IGVsZW1lbnRzIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XG4gICAqICAgICAgICAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlRWxGb250XyA9IGZ1bmN0aW9uIGNyZWF0ZUVsRm9udF8oKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtdHJhY2stc2V0dGluZ3MtZm9udCcsXG4gICAgICBpbm5lckhUTUw6IFsnPGZpZWxkc2V0IGNsYXNzPVwidmpzLWZvbnQtcGVyY2VudCB2anMtdHJhY2stc2V0dGluZ1wiPicsIHRoaXMuY3JlYXRlRWxTZWxlY3RfKCdmb250UGVyY2VudCcsICcnLCAnbGVnZW5kJyksICc8L2ZpZWxkc2V0PicsICc8ZmllbGRzZXQgY2xhc3M9XCJ2anMtZWRnZS1zdHlsZSB2anMtdHJhY2stc2V0dGluZ1wiPicsIHRoaXMuY3JlYXRlRWxTZWxlY3RfKCdlZGdlU3R5bGUnLCAnJywgJ2xlZ2VuZCcpLCAnPC9maWVsZHNldD4nLCAnPGZpZWxkc2V0IGNsYXNzPVwidmpzLWZvbnQtZmFtaWx5IHZqcy10cmFjay1zZXR0aW5nXCI+JywgdGhpcy5jcmVhdGVFbFNlbGVjdF8oJ2ZvbnRGYW1pbHknLCAnJywgJ2xlZ2VuZCcpLCAnPC9maWVsZHNldD4nXS5qb2luKCcnKVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgY29udHJvbHMgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgZWxlbWVudCB0aGF0IHdhcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbENvbnRyb2xzXyA9IGZ1bmN0aW9uIGNyZWF0ZUVsQ29udHJvbHNfKCkge1xuICAgIHZhciBkZWZhdWx0c0Rlc2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6ZSgncmVzdG9yZSBhbGwgc2V0dGluZ3MgdG8gdGhlIGRlZmF1bHQgdmFsdWVzJyk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICBjbGFzc05hbWU6ICd2anMtdHJhY2stc2V0dGluZ3MtY29udHJvbHMnLFxuICAgICAgaW5uZXJIVE1MOiBbXCI8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcInZqcy1kZWZhdWx0LWJ1dHRvblxcXCIgdGl0bGU9XFxcIlwiICsgZGVmYXVsdHNEZXNjcmlwdGlvbiArIFwiXFxcIj5cIiwgdGhpcy5sb2NhbGl6ZSgnUmVzZXQnKSwgXCI8c3BhbiBjbGFzcz1cXFwidmpzLWNvbnRyb2wtdGV4dFxcXCI+IFwiICsgZGVmYXVsdHNEZXNjcmlwdGlvbiArIFwiPC9zcGFuPlwiLCAnPC9idXR0b24+JywgXCI8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcInZqcy1kb25lLWJ1dHRvblxcXCI+XCIgKyB0aGlzLmxvY2FsaXplKCdEb25lJykgKyBcIjwvYnV0dG9uPlwiXS5qb2luKCcnKVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb250ZW50ID0gZnVuY3Rpb24gY29udGVudCgpIHtcbiAgICByZXR1cm4gW3RoaXMuY3JlYXRlRWxDb2xvcnNfKCksIHRoaXMuY3JlYXRlRWxGb250XygpLCB0aGlzLmNyZWF0ZUVsQ29udHJvbHNfKCldO1xuICB9O1xuXG4gIF9wcm90by5sYWJlbCA9IGZ1bmN0aW9uIGxhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsaXplKCdDYXB0aW9uIFNldHRpbmdzIERpYWxvZycpO1xuICB9O1xuXG4gIF9wcm90by5kZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsaXplKCdCZWdpbm5pbmcgb2YgZGlhbG9nIHdpbmRvdy4gRXNjYXBlIHdpbGwgY2FuY2VsIGFuZCBjbG9zZSB0aGUgd2luZG93LicpO1xuICB9O1xuXG4gIF9wcm90by5idWlsZENTU0NsYXNzID0gZnVuY3Rpb24gYnVpbGRDU1NDbGFzcygpIHtcbiAgICByZXR1cm4gX01vZGFsRGlhbG9nLnByb3RvdHlwZS5idWlsZENTU0NsYXNzLmNhbGwodGhpcykgKyAnIHZqcy10ZXh0LXRyYWNrLXNldHRpbmdzJztcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBvYmplY3Qgb2YgdGV4dCB0cmFjayBzZXR0aW5ncyAob3IgbnVsbCkuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogICAgICAgICBBbiBvYmplY3Qgd2l0aCBjb25maWcgdmFsdWVzIHBhcnNlZCBmcm9tIHRoZSBET00gb3IgbG9jYWxTdG9yYWdlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRWYWx1ZXMgPSBmdW5jdGlvbiBnZXRWYWx1ZXMoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICByZXR1cm4gcmVkdWNlKHNlbGVjdENvbmZpZ3MsIGZ1bmN0aW9uIChhY2N1bSwgY29uZmlnLCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uVmFsdWUoX3RoaXMzLiQoY29uZmlnLnNlbGVjdG9yKSwgY29uZmlnLnBhcnNlcik7XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY3VtW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIHt9KTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0ZXh0IHRyYWNrIHNldHRpbmdzIGZyb20gYW4gb2JqZWN0IG9mIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlc1xuICAgKiAgICAgICAgQW4gb2JqZWN0IHdpdGggY29uZmlnIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgRE9NIG9yIGxvY2FsU3RvcmFnZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0VmFsdWVzID0gZnVuY3Rpb24gc2V0VmFsdWVzKHZhbHVlcykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgZWFjaChzZWxlY3RDb25maWdzLCBmdW5jdGlvbiAoY29uZmlnLCBrZXkpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uKF90aGlzNC4kKGNvbmZpZy5zZWxlY3RvciksIHZhbHVlc1trZXldLCBjb25maWcucGFyc2VyKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbGwgYDxzZWxlY3Q+YCBlbGVtZW50cyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXREZWZhdWx0cygpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIGVhY2goc2VsZWN0Q29uZmlncywgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgdmFyIGluZGV4ID0gY29uZmlnLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgPyBjb25maWdbXCJkZWZhdWx0XCJdIDogMDtcbiAgICAgIF90aGlzNS4kKGNvbmZpZy5zZWxlY3Rvcikuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXN0b3JlIHRleHR0cmFjayBzZXR0aW5ncyBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXN0b3JlU2V0dGluZ3MgPSBmdW5jdGlvbiByZXN0b3JlU2V0dGluZ3MoKSB7XG4gICAgdmFyIHZhbHVlcztcblxuICAgIHRyeSB7XG4gICAgICB2YWx1ZXMgPSBKU09OLnBhcnNlKHdpbmRvdyQxLmxvY2FsU3RvcmFnZS5nZXRJdGVtKExPQ0FMX1NUT1JBR0VfS0VZKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihlcnIpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVzKHZhbHVlcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTYXZlIHRleHQgdHJhY2sgc2V0dGluZ3MgdG8gbG9jYWxTdG9yYWdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNhdmVTZXR0aW5ncyA9IGZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc18ucGVyc2lzdFRleHRUcmFja1NldHRpbmdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0VmFsdWVzKCk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoKSB7XG4gICAgICAgIHdpbmRvdyQxLmxvY2FsU3RvcmFnZS5zZXRJdGVtKExPQ0FMX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdyQxLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGVycik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgZGlzcGxheSBvZiB0ZXh0IHRyYWNrIHNldHRpbmdzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZURpc3BsYXkgPSBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KCkge1xuICAgIHZhciB0dERpc3BsYXkgPSB0aGlzLnBsYXllcl8uZ2V0Q2hpbGQoJ3RleHRUcmFja0Rpc3BsYXknKTtcblxuICAgIGlmICh0dERpc3BsYXkpIHtcbiAgICAgIHR0RGlzcGxheS51cGRhdGVEaXNwbGF5KCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBjb25kaXRpb25hbGx5IGJsdXIgdGhlIGVsZW1lbnQgYW5kIHJlZm9jdXMgdGhlIGNhcHRpb25zIGJ1dHRvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25kaXRpb25hbEJsdXJfID0gZnVuY3Rpb24gY29uZGl0aW9uYWxCbHVyXygpIHtcbiAgICB0aGlzLnByZXZpb3VzbHlBY3RpdmVFbF8gPSBudWxsO1xuICAgIHZhciBjYiA9IHRoaXMucGxheWVyXy5jb250cm9sQmFyO1xuICAgIHZhciBzdWJzQ2Fwc0J0biA9IGNiICYmIGNiLnN1YnNDYXBzQnV0dG9uO1xuICAgIHZhciBjY0J0biA9IGNiICYmIGNiLmNhcHRpb25zQnV0dG9uO1xuXG4gICAgaWYgKHN1YnNDYXBzQnRuKSB7XG4gICAgICBzdWJzQ2Fwc0J0bi5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoY2NCdG4pIHtcbiAgICAgIGNjQnRuLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUZXh0VHJhY2tTZXR0aW5ncztcbn0oTW9kYWxEaWFsb2cpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ1RleHRUcmFja1NldHRpbmdzJywgVGV4dFRyYWNrU2V0dGluZ3MpO1xuXG4vKipcbiAqIEEgUmVzaXplIE1hbmFnZXIuIEl0IGlzIGluIGNoYXJnZSBvZiB0cmlnZ2VyaW5nIGBwbGF5ZXJyZXNpemVgIG9uIHRoZSBwbGF5ZXIgaW4gdGhlIHJpZ2h0IGNvbmRpdGlvbnMuXG4gKlxuICogSXQnbGwgZWl0aGVyIGNyZWF0ZSBhbiBpZnJhbWUgYW5kIHVzZSBhIGRlYm91bmNlZCByZXNpemUgaGFuZGxlciBvbiBpdCBvciB1c2UgdGhlIG5ldyB7QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9SZXNpemVPYnNlcnZlci98UmVzaXplT2JzZXJ2ZXJ9LlxuICpcbiAqIElmIHRoZSBSZXNpemVPYnNlcnZlciBpcyBhdmFpbGFibGUgbmF0aXZlbHksIGl0IHdpbGwgYmUgdXNlZC4gQSBwb2x5ZmlsbCBjYW4gYmUgcGFzc2VkIGluIGFzIGFuIG9wdGlvbi5cbiAqIElmIGEgYHBsYXllcnJlc2l6ZWAgZXZlbnQgaXMgbm90IG5lZWRlZCwgdGhlIFJlc2l6ZU1hbmFnZXIgY29tcG9uZW50IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHBsYXllciwgc2VlIHRoZSBleGFtcGxlIGJlbG93LlxuICogQGV4YW1wbGUgPGNhcHRpb24+SG93IHRvIGRpc2FibGUgdGhlIHJlc2l6ZSBtYW5hZ2VyPC9jYXB0aW9uPlxuICogY29uc3QgcGxheWVyID0gdmlkZW9qcygnI3ZpZCcsIHtcbiAqICAgcmVzaXplTWFuYWdlcjogZmFsc2VcbiAqIH0pO1xuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vUmVzaXplT2JzZXJ2ZXIvfFJlc2l6ZU9ic2VydmVyIHNwZWNpZmljYXRpb259XG4gKlxuICogQGV4dGVuZHMgQ29tcG9uZW50XG4gKi9cblxudmFyIFJlc2l6ZU1hbmFnZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVzaXplTWFuYWdlciwgX0NvbXBvbmVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgUmVzaXplTWFuYWdlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBsYXllclxuICAgKiAgICAgICAgVGhlIGBQbGF5ZXJgIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICAgICAgIFRoZSBrZXkvdmFsdWUgc3RvcmUgb2YgUmVzaXplTWFuYWdlciBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuUmVzaXplT2JzZXJ2ZXJdXG4gICAqICAgICAgICBBIHBvbHlmaWxsIGZvciBSZXNpemVPYnNlcnZlciBjYW4gYmUgcGFzc2VkIGluIGhlcmUuXG4gICAqICAgICAgICBJZiB0aGlzIGlzIHNldCB0byBudWxsIGl0IHdpbGwgaWdub3JlIHRoZSBuYXRpdmUgUmVzaXplT2JzZXJ2ZXIgYW5kIGZhbGwgYmFjayB0byB0aGUgaWZyYW1lIGZhbGxiYWNrLlxuICAgKi9cbiAgZnVuY3Rpb24gUmVzaXplTWFuYWdlcihwbGF5ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgUkVTSVpFX09CU0VSVkVSX0FWQUlMQUJMRSA9IG9wdGlvbnMuUmVzaXplT2JzZXJ2ZXIgfHwgd2luZG93JDEuUmVzaXplT2JzZXJ2ZXI7IC8vIGlmIGBudWxsYCB3YXMgcGFzc2VkLCB3ZSB3YW50IHRvIGRpc2FibGUgdGhlIFJlc2l6ZU9ic2VydmVyXG5cbiAgICBpZiAob3B0aW9ucy5SZXNpemVPYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgUkVTSVpFX09CU0VSVkVSX0FWQUlMQUJMRSA9IGZhbHNlO1xuICAgIH0gLy8gT25seSBjcmVhdGUgYW4gZWxlbWVudCB3aGVuIFJlc2l6ZU9ic2VydmVyIGlzbid0IGF2YWlsYWJsZVxuXG5cbiAgICB2YXIgb3B0aW9uc18gPSBtZXJnZU9wdGlvbnMoe1xuICAgICAgY3JlYXRlRWw6ICFSRVNJWkVfT0JTRVJWRVJfQVZBSUxBQkxFLFxuICAgICAgcmVwb3J0VG91Y2hBY3Rpdml0eTogZmFsc2VcbiAgICB9LCBvcHRpb25zKTtcbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnNfKSB8fCB0aGlzO1xuICAgIF90aGlzLlJlc2l6ZU9ic2VydmVyID0gb3B0aW9ucy5SZXNpemVPYnNlcnZlciB8fCB3aW5kb3ckMS5SZXNpemVPYnNlcnZlcjtcbiAgICBfdGhpcy5sb2FkTGlzdGVuZXJfID0gbnVsbDtcbiAgICBfdGhpcy5yZXNpemVPYnNlcnZlcl8gPSBudWxsO1xuICAgIF90aGlzLmRlYm91bmNlZEhhbmRsZXJfID0gZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucmVzaXplSGFuZGxlcigpO1xuICAgIH0sIDEwMCwgZmFsc2UsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcblxuICAgIGlmIChSRVNJWkVfT0JTRVJWRVJfQVZBSUxBQkxFKSB7XG4gICAgICBfdGhpcy5yZXNpemVPYnNlcnZlcl8gPSBuZXcgX3RoaXMuUmVzaXplT2JzZXJ2ZXIoX3RoaXMuZGVib3VuY2VkSGFuZGxlcl8pO1xuXG4gICAgICBfdGhpcy5yZXNpemVPYnNlcnZlcl8ub2JzZXJ2ZShwbGF5ZXIuZWwoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmxvYWRMaXN0ZW5lcl8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMuZWxfIHx8ICFfdGhpcy5lbF8uY29udGVudFdpbmRvdykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZWJvdW5jZWRIYW5kbGVyXyA9IF90aGlzLmRlYm91bmNlZEhhbmRsZXJfO1xuXG4gICAgICAgIHZhciB1bmxvYWRMaXN0ZW5lcl8gPSBfdGhpcy51bmxvYWRMaXN0ZW5lcl8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgb2ZmKHRoaXMsICdyZXNpemUnLCBkZWJvdW5jZWRIYW5kbGVyXyk7XG4gICAgICAgICAgb2ZmKHRoaXMsICd1bmxvYWQnLCB1bmxvYWRMaXN0ZW5lcl8pO1xuICAgICAgICAgIHVubG9hZExpc3RlbmVyXyA9IG51bGw7XG4gICAgICAgIH07IC8vIHNhZmFyaSBhbmQgZWRnZSBjYW4gdW5sb2FkIHRoZSBpZnJhbWUgYmVmb3JlIHJlc2l6ZW1hbmFnZXIgZGlzcG9zZVxuICAgICAgICAvLyB3ZSBoYXZlIHRvIGRpc3Bvc2Ugb2YgZXZlbnQgaGFuZGxlcnMgY29ycmVjdGx5IGJlZm9yZSB0aGF0IGhhcHBlbnNcblxuXG4gICAgICAgIG9uKF90aGlzLmVsXy5jb250ZW50V2luZG93LCAndW5sb2FkJywgdW5sb2FkTGlzdGVuZXJfKTtcbiAgICAgICAgb24oX3RoaXMuZWxfLmNvbnRlbnRXaW5kb3csICdyZXNpemUnLCBkZWJvdW5jZWRIYW5kbGVyXyk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5vbmUoJ2xvYWQnLCBfdGhpcy5sb2FkTGlzdGVuZXJfKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVzaXplTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgcmV0dXJuIF9Db21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsLmNhbGwodGhpcywgJ2lmcmFtZScsIHtcbiAgICAgIGNsYXNzTmFtZTogJ3Zqcy1yZXNpemUtbWFuYWdlcicsXG4gICAgICB0YWJJbmRleDogLTFcbiAgICB9LCB7XG4gICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZSdcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSByZXNpemUgaXMgdHJpZ2dlcmVkIG9uIHRoZSBpZnJhbWUgb3IgYSByZXNpemUgaXMgb2JzZXJ2ZWQgdmlhIHRoZSBSZXNpemVPYnNlcnZlclxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI3BsYXllcnJlc2l6ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXNpemVIYW5kbGVyID0gZnVuY3Rpb24gcmVzaXplSGFuZGxlcigpIHtcbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgcGxheWVyIHNpemUgaGFzIGNoYW5nZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjcGxheWVycmVzaXplXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuICAgIC8vIG1ha2Ugc3VyZSBwbGF5ZXIgaXMgc3RpbGwgYXJvdW5kIHRvIHRyaWdnZXJcbiAgICAvLyBwcmV2ZW50cyB0aGlzIGZyb20gY2F1c2luZyBhbiBlcnJvciBhZnRlciBkaXNwb3NlXG4gICAgaWYgKCF0aGlzLnBsYXllcl8gfHwgIXRoaXMucGxheWVyXy50cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5ZXJfLnRyaWdnZXIoJ3BsYXllcnJlc2l6ZScpO1xuICB9O1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5kZWJvdW5jZWRIYW5kbGVyXykge1xuICAgICAgdGhpcy5kZWJvdW5jZWRIYW5kbGVyXy5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcl8pIHtcbiAgICAgIGlmICh0aGlzLnBsYXllcl8uZWwoKSkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyXy51bm9ic2VydmUodGhpcy5wbGF5ZXJfLmVsKCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyXy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZExpc3RlbmVyXykge1xuICAgICAgdGhpcy5vZmYoJ2xvYWQnLCB0aGlzLmxvYWRMaXN0ZW5lcl8pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsXyAmJiB0aGlzLmVsXy5jb250ZW50V2luZG93ICYmIHRoaXMudW5sb2FkTGlzdGVuZXJfKSB7XG4gICAgICB0aGlzLnVubG9hZExpc3RlbmVyXy5jYWxsKHRoaXMuZWxfLmNvbnRlbnRXaW5kb3cpO1xuICAgIH1cblxuICAgIHRoaXMuUmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuZGVib3VuY2VkSGFuZGxlcl8gPSBudWxsO1xuICAgIHRoaXMubG9hZExpc3RlbmVyXyA9IG51bGw7XG5cbiAgICBfQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc2l6ZU1hbmFnZXI7XG59KENvbXBvbmVudCk7XG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUmVzaXplTWFuYWdlcicsIFJlc2l6ZU1hbmFnZXIpO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBtZWRpYW4gb2YgYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJbXX0gYXJyXG4gKiAgICAgICAgSW5wdXQgYXJyYXkgb2YgbnVtYmVycy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiAgICAgICAgTWVkaWFuIHZhbHVlLlxuICovXG52YXIgbWVkaWFuID0gZnVuY3Rpb24gbWVkaWFuKGFycikge1xuICB2YXIgbWlkID0gTWF0aC5mbG9vcihhcnIubGVuZ3RoIC8gMik7XG4gIHZhciBzb3J0ZWRMaXN0ID0gW10uY29uY2F0KGFycikuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfSk7XG4gIHJldHVybiBhcnIubGVuZ3RoICUgMiAhPT0gMCA/IHNvcnRlZExpc3RbbWlkXSA6IChzb3J0ZWRMaXN0W21pZCAtIDFdICsgc29ydGVkTGlzdFttaWRdKSAvIDI7XG59O1xuXG4vKiB0cmFjayB3aGVuIHdlIGFyZSBhdCB0aGUgbGl2ZSBlZGdlLCBhbmQgb3RoZXIgaGVscGVycyBmb3IgbGl2ZSBwbGF5YmFjayAqL1xuXG52YXIgTGl2ZVRyYWNrZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTGl2ZVRyYWNrZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIExpdmVUcmFja2VyKHBsYXllciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIC8vIExpdmVUcmFja2VyIGRvZXMgbm90IG5lZWQgYW4gZWxlbWVudFxuICAgIHZhciBvcHRpb25zXyA9IG1lcmdlT3B0aW9ucyh7XG4gICAgICBjcmVhdGVFbDogZmFsc2VcbiAgICB9LCBvcHRpb25zKTtcbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwbGF5ZXIsIG9wdGlvbnNfKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMucmVzZXRfKCk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy5wbGF5ZXJfLCAnZHVyYXRpb25jaGFuZ2UnLCBfdGhpcy5oYW5kbGVEdXJhdGlvbmNoYW5nZSk7IC8vIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgbGl2ZSBwbGF5YmFjayBpZiB0aGUgZG9jdW1lbnQgaXMgaGlkZGVuLFxuICAgIC8vIGFsc28sIHRyYWNraW5nIHdoZW4gdGhlIGRvY3VtZW50IGlzIGhpZGRlbiBjYW5cbiAgICAvLyBjYXVzZSB0aGUgQ1BVIHRvIHNwaWtlIGFuZCBldmVudHVhbGx5IGNyYXNoIHRoZSBwYWdlIG9uIElFMTEuXG5cblxuICAgIGlmIChJRV9WRVJTSU9OICYmICdoaWRkZW4nIGluIGRvY3VtZW50ICYmICd2aXNpYmlsaXR5U3RhdGUnIGluIGRvY3VtZW50KSB7XG4gICAgICBfdGhpcy5vbihkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCBfdGhpcy5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTGl2ZVRyYWNrZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkgIT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgdGhpcy5zdG9wVHJhY2tpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFRyYWNraW5nKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5pc0JlaGluZF8gPSBmdW5jdGlvbiBpc0JlaGluZF8oKSB7XG4gICAgLy8gZG9uJ3QgcmVwb3J0IHRoYXQgd2UgYXJlIGJlaGluZCB1bnRpbCBhIHRpbWV1cGRhdGUgaGFzIGJlZW4gc2VlblxuICAgIGlmICghdGhpcy50aW1ldXBkYXRlU2Vlbl8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbGl2ZUN1cnJlbnRUaW1lID0gdGhpcy5saXZlQ3VycmVudFRpbWUoKTtcbiAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnBsYXllcl8uY3VycmVudFRpbWUoKTsgLy8gdGhlIGxpdmUgZWRnZSB3aW5kb3cgaXMgdGhlIGFtb3VudCBvZiBzZWNvbmRzIGF3YXkgZnJvbSBsaXZlXG4gICAgLy8gdGhhdCBhIHBsYXllciBjYW4gYmUsIGJ1dCBzdGlsbCBiZSBjb25zaWRlcmVkIGxpdmUuXG4gICAgLy8gd2UgYWRkIDAuMDcgYmVjYXVzZSB0aGUgbGl2ZSB0cmFja2luZyBoYXBwZW5zIGV2ZXJ5IDMwbXNcbiAgICAvLyBhbmQgd2Ugd2FudCBzb21lIHdpZ2dsZSByb29tIGZvciBzaG9ydCBzZWdtZW50IGxpdmUgcGxheWJhY2tcblxuICAgIHZhciBsaXZlRWRnZVdpbmRvdyA9IHRoaXMuc2Vla2FibGVJbmNyZW1lbnRfICogMiArIDAuMDc7IC8vIG9uIEFuZHJvaWQgbGl2ZUN1cnJlbnRUaW1lIGNhbiBiZWUgSW5maW5pdHksIGJlY2F1c2Ugc2Vla2FibGVFbmRcbiAgICAvLyBjYW4gYmUgSW5maW5pdHksIHNvIHdlIGhhbmRsZSB0aGF0IGNhc2UuXG5cbiAgICByZXR1cm4gbGl2ZUN1cnJlbnRUaW1lICE9PSBJbmZpbml0eSAmJiBsaXZlQ3VycmVudFRpbWUgLSBsaXZlRWRnZVdpbmRvdyA+PSBjdXJyZW50VGltZTtcbiAgfSAvLyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIHdoZW4gc2VlayBlbmQgY2hhbmdlc1xuICAvLyBhbmQgZm9yIHRyYWNraW5nIGhvdyBmYXIgcGFzdCBzZWVrIGVuZCB3ZSBzaG91bGQgYmVcbiAgO1xuXG4gIF9wcm90by50cmFja0xpdmVfID0gZnVuY3Rpb24gdHJhY2tMaXZlXygpIHtcbiAgICB0aGlzLnBhc3RTZWVrRW5kXyA9IHRoaXMucGFzdFNlZWtFbmRfO1xuICAgIHZhciBzZWVrYWJsZSA9IHRoaXMucGxheWVyXy5zZWVrYWJsZSgpOyAvLyBza2lwIHVuZGVmaW5lZCBzZWVrYWJsZVxuXG4gICAgaWYgKCFzZWVrYWJsZSB8fCAhc2Vla2FibGUubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5ld1NlZWtFbmQgPSB0aGlzLnNlZWthYmxlRW5kKCk7IC8vIHdlIGNhbiBvbmx5IHRlbGwgaWYgd2UgYXJlIGJlaGluZCBsaXZlLCB3aGVuIHNlZWthYmxlIGNoYW5nZXNcbiAgICAvLyBvbmNlIHdlIGRldGVjdCB0aGF0IHNlZWthYmxlIGhhcyBjaGFuZ2VkIHdlIGNoZWNrIHRoZSBuZXcgc2Vla1xuICAgIC8vIGVuZCBhZ2FpbnN0IGN1cnJlbnQgdGltZSwgd2l0aCBhIGZ1ZGdlIHZhbHVlIG9mIGhhbGYgYSBzZWNvbmQuXG5cbiAgICBpZiAobmV3U2Vla0VuZCAhPT0gdGhpcy5sYXN0U2Vla0VuZF8pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RTZWVrRW5kXykge1xuICAgICAgICAvLyB3ZSB0cnkgdG8gZ2V0IHRoZSBiZXN0IGZpdCB2YWx1ZSBmb3IgdGhlIHNlZWtpbmcgaW5jcmVtZW50XG4gICAgICAgIC8vIHZhcmlhYmxlIGZyb20gdGhlIGxhc3QgMTIgdmFsdWVzLlxuICAgICAgICB0aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8gPSB0aGlzLnNlZWthYmxlSW5jcmVtZW50TGlzdF8uc2xpY2UoLTExKTtcbiAgICAgICAgdGhpcy5zZWVrYWJsZUluY3JlbWVudExpc3RfLnB1c2goTWF0aC5hYnMobmV3U2Vla0VuZCAtIHRoaXMubGFzdFNlZWtFbmRfKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vla2FibGVJbmNyZW1lbnRMaXN0Xy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgdGhpcy5zZWVrYWJsZUluY3JlbWVudF8gPSBtZWRpYW4odGhpcy5zZWVrYWJsZUluY3JlbWVudExpc3RfKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnBhc3RTZWVrRW5kXyA9IDA7XG4gICAgICB0aGlzLmxhc3RTZWVrRW5kXyA9IG5ld1NlZWtFbmQ7XG4gICAgICB0aGlzLnRyaWdnZXIoJ3NlZWthYmxlZW5kY2hhbmdlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXN0U2Vla0VuZF8gPSB0aGlzLnBhc3RTZWVrRW5kKCkgKyAwLjAzO1xuXG4gICAgaWYgKHRoaXMuaXNCZWhpbmRfKCkgIT09IHRoaXMuYmVoaW5kTGl2ZUVkZ2UoKSkge1xuICAgICAgdGhpcy5iZWhpbmRMaXZlRWRnZV8gPSB0aGlzLmlzQmVoaW5kXygpO1xuICAgICAgdGhpcy50cmlnZ2VyKCdsaXZlZWRnZWNoYW5nZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaGFuZGxlIGEgZHVyYXRpb25jaGFuZ2UgZXZlbnQgb24gdGhlIHBsYXllclxuICAgKiBhbmQgc3RhcnQvc3RvcCB0cmFja2luZyBhY2NvcmRpbmdseS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRHVyYXRpb25jaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVEdXJhdGlvbmNoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5wbGF5ZXJfLmR1cmF0aW9uKCkgPT09IEluZmluaXR5KSB7XG4gICAgICB0aGlzLnN0YXJ0VHJhY2tpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wVHJhY2tpbmcoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHN0YXJ0IHRyYWNraW5nIGxpdmUgcGxheWJhY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3RhcnRUcmFja2luZyA9IGZ1bmN0aW9uIHN0YXJ0VHJhY2tpbmcoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5pc1RyYWNraW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGhhdmVuJ3Qgc2VlbiBhIHRpbWV1cGRhdGUsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBwbGF5YmFja1xuICAgIC8vIGJlZ2FuIGJlZm9yZSB0aGlzIGNvbXBvbmVudCBzdGFydGVkIHRyYWNraW5nLiBUaGlzIGNhbiBoYXBwZW4gY29tbW9ubHlcbiAgICAvLyB3aGVuIHVzaW5nIGF1dG9wbGF5LlxuXG5cbiAgICBpZiAoIXRoaXMudGltZXVwZGF0ZVNlZW5fKSB7XG4gICAgICB0aGlzLnRpbWV1cGRhdGVTZWVuXyA9IHRoaXMucGxheWVyXy5oYXNTdGFydGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFja2luZ0ludGVydmFsXyA9IHRoaXMuc2V0SW50ZXJ2YWwodGhpcy50cmFja0xpdmVfLCAzMCk7XG4gICAgdGhpcy50cmFja0xpdmVfKCk7XG4gICAgdGhpcy5vbih0aGlzLnBsYXllcl8sICdwbGF5JywgdGhpcy50cmFja0xpdmVfKTtcbiAgICB0aGlzLm9uKHRoaXMucGxheWVyXywgJ3BhdXNlJywgdGhpcy50cmFja0xpdmVfKTsgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNob3dpbmcgdGhhdCB3ZSBhcmUgbm90IGxpdmVcbiAgICAvLyBiZWZvcmUgYSB2aWRlbyBzdGFydHMgdG8gcGxheVxuXG4gICAgaWYgKCF0aGlzLnRpbWV1cGRhdGVTZWVuXykge1xuICAgICAgdGhpcy5vbmUodGhpcy5wbGF5ZXJfLCAncGxheScsIHRoaXMuaGFuZGxlUGxheSk7XG5cbiAgICAgIHRoaXMuaGFuZGxlVGltZXVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnRpbWV1cGRhdGVTZWVuXyA9IHRydWU7XG4gICAgICAgIF90aGlzMi5oYW5kbGVUaW1ldXBkYXRlID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25lKHRoaXMucGxheWVyXywgJ3RpbWV1cGRhdGUnLCB0aGlzLmhhbmRsZVRpbWV1cGRhdGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlUGxheSA9IGZ1bmN0aW9uIGhhbmRsZVBsYXkoKSB7XG4gICAgdGhpcy5vbmUodGhpcy5wbGF5ZXJfLCAndGltZXVwZGF0ZScsIHRoaXMuc2Vla1RvTGl2ZUVkZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBTdG9wIHRyYWNraW5nLCBhbmQgc2V0IGFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgdG9cbiAgICogdGhlaXIgaW5pdGlhbCB2YWx1ZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXRfID0gZnVuY3Rpb24gcmVzZXRfKCkge1xuICAgIHRoaXMucGFzdFNlZWtFbmRfID0gMDtcbiAgICB0aGlzLmxhc3RTZWVrRW5kXyA9IG51bGw7XG4gICAgdGhpcy5iZWhpbmRMaXZlRWRnZV8gPSBudWxsO1xuICAgIHRoaXMudGltZXVwZGF0ZVNlZW5fID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckludGVydmFsKHRoaXMudHJhY2tpbmdJbnRlcnZhbF8pO1xuICAgIHRoaXMudHJhY2tpbmdJbnRlcnZhbF8gPSBudWxsO1xuICAgIHRoaXMuc2Vla2FibGVJbmNyZW1lbnRfID0gMTI7XG4gICAgdGhpcy5zZWVrYWJsZUluY3JlbWVudExpc3RfID0gW107XG4gICAgdGhpcy5vZmYodGhpcy5wbGF5ZXJfLCAncGxheScsIHRoaXMudHJhY2tMaXZlXyk7XG4gICAgdGhpcy5vZmYodGhpcy5wbGF5ZXJfLCAncGF1c2UnLCB0aGlzLnRyYWNrTGl2ZV8pO1xuICAgIHRoaXMub2ZmKHRoaXMucGxheWVyXywgJ3BsYXknLCB0aGlzLmhhbmRsZVBsYXkpO1xuICAgIHRoaXMub2ZmKHRoaXMucGxheWVyXywgJ3RpbWV1cGRhdGUnLCB0aGlzLnNlZWtUb0xpdmVFZGdlKTtcblxuICAgIGlmICh0aGlzLmhhbmRsZVRpbWV1cGRhdGUpIHtcbiAgICAgIHRoaXMub2ZmKHRoaXMucGxheWVyXywgJ3RpbWV1cGRhdGUnLCB0aGlzLmhhbmRsZVRpbWV1cGRhdGUpO1xuICAgICAgdGhpcy5oYW5kbGVUaW1ldXBkYXRlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHN0b3AgdHJhY2tpbmcgbGl2ZSBwbGF5YmFja1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zdG9wVHJhY2tpbmcgPSBmdW5jdGlvbiBzdG9wVHJhY2tpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmlzVHJhY2tpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRfKCk7XG4gIH1cbiAgLyoqXG4gICAqIEEgaGVscGVyIHRvIGdldCB0aGUgcGxheWVyIHNlZWthYmxlIGVuZFxuICAgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbnVsbCBjaGVjayBldmVyeXdoZXJlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNlZWthYmxlRW5kID0gZnVuY3Rpb24gc2Vla2FibGVFbmQoKSB7XG4gICAgdmFyIHNlZWthYmxlID0gdGhpcy5wbGF5ZXJfLnNlZWthYmxlKCk7XG4gICAgdmFyIHNlZWthYmxlRW5kcyA9IFtdO1xuICAgIHZhciBpID0gc2Vla2FibGUgPyBzZWVrYWJsZS5sZW5ndGggOiAwO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgc2Vla2FibGVFbmRzLnB1c2goc2Vla2FibGUuZW5kKGkpKTtcbiAgICB9IC8vIGdyYWIgdGhlIGZ1cnRoZXN0IHNlZWthYmxlIGVuZCBhZnRlciBzb3J0aW5nLCBvciBpZiB0aGVyZSBhcmUgbm9uZVxuICAgIC8vIGRlZmF1bHQgdG8gSW5maW5pdHlcblxuXG4gICAgcmV0dXJuIHNlZWthYmxlRW5kcy5sZW5ndGggPyBzZWVrYWJsZUVuZHMuc29ydCgpW3NlZWthYmxlRW5kcy5sZW5ndGggLSAxXSA6IEluZmluaXR5O1xuICB9XG4gIC8qKlxuICAgKiBBIGhlbHBlciB0byBnZXQgdGhlIHBsYXllciBzZWVrYWJsZSBzdGFydFxuICAgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbnVsbCBjaGVjayBldmVyeXdoZXJlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNlZWthYmxlU3RhcnQgPSBmdW5jdGlvbiBzZWVrYWJsZVN0YXJ0KCkge1xuICAgIHZhciBzZWVrYWJsZSA9IHRoaXMucGxheWVyXy5zZWVrYWJsZSgpO1xuICAgIHZhciBzZWVrYWJsZVN0YXJ0cyA9IFtdO1xuICAgIHZhciBpID0gc2Vla2FibGUgPyBzZWVrYWJsZS5sZW5ndGggOiAwO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgc2Vla2FibGVTdGFydHMucHVzaChzZWVrYWJsZS5zdGFydChpKSk7XG4gICAgfSAvLyBncmFiIHRoZSBmaXJzdCBzZWVrYWJsZSBzdGFydCBhZnRlciBzb3J0aW5nLCBvciBpZiB0aGVyZSBhcmUgbm9uZVxuICAgIC8vIGRlZmF1bHQgdG8gMFxuXG5cbiAgICByZXR1cm4gc2Vla2FibGVTdGFydHMubGVuZ3RoID8gc2Vla2FibGVTdGFydHMuc29ydCgpWzBdIDogMDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBsaXZlIHRpbWUgd2luZG93XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmxpdmVXaW5kb3cgPSBmdW5jdGlvbiBsaXZlV2luZG93KCkge1xuICAgIHZhciBsaXZlQ3VycmVudFRpbWUgPSB0aGlzLmxpdmVDdXJyZW50VGltZSgpO1xuXG4gICAgaWYgKGxpdmVDdXJyZW50VGltZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGl2ZUN1cnJlbnRUaW1lIC0gdGhpcy5zZWVrYWJsZVN0YXJ0KCk7XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHBsYXllciBpcyBsaXZlLCBvbmx5IGNoZWNrcyBpZiB0aGlzIGNvbXBvbmVudFxuICAgKiBpcyB0cmFja2luZyBsaXZlIHBsYXliYWNrIG9yIG5vdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0xpdmUgPSBmdW5jdGlvbiBpc0xpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUcmFja2luZygpO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRUaW1lIGlzIGF0IHRoZSBsaXZlIGVkZ2UgYW5kIHdvbid0IGZhbGwgYmVoaW5kXG4gICAqIG9uIGVhY2ggc2Vla2FibGVlbmRjaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYXRMaXZlRWRnZSA9IGZ1bmN0aW9uIGF0TGl2ZUVkZ2UoKSB7XG4gICAgcmV0dXJuICF0aGlzLmJlaGluZExpdmVFZGdlKCk7XG4gIH1cbiAgLyoqXG4gICAqIGdldCB3aGF0IHdlIGV4cGVjdCB0aGUgbGl2ZSBjdXJyZW50IHRpbWUgdG8gYmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGl2ZUN1cnJlbnRUaW1lID0gZnVuY3Rpb24gbGl2ZUN1cnJlbnRUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLnBhc3RTZWVrRW5kKCkgKyB0aGlzLnNlZWthYmxlRW5kKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgaG93IGZhciBwYXN0IHNlZWsgZW5kIHdlIGV4cGVjdCBjdXJyZW50IHRpbWUgdG8gYmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFzdFNlZWtFbmQgPSBmdW5jdGlvbiBwYXN0U2Vla0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXN0U2Vla0VuZF87XG4gIH1cbiAgLyoqXG4gICAqIElmIHdlIGFyZSBjdXJyZW50bHkgYmVoaW5kIHRoZSBsaXZlIGVkZ2UsIGFrYSBjdXJyZW50VGltZSB3aWxsIGJlXG4gICAqIGJlaGluZCBvbiBhIHNlZWthYmxlZW5kY2hhbmdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJlaGluZExpdmVFZGdlID0gZnVuY3Rpb24gYmVoaW5kTGl2ZUVkZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmVoaW5kTGl2ZUVkZ2VfO1xuICB9O1xuXG4gIF9wcm90by5pc1RyYWNraW5nID0gZnVuY3Rpb24gaXNUcmFja2luZygpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMudHJhY2tpbmdJbnRlcnZhbF8gPT09ICdudW1iZXInO1xuICB9XG4gIC8qKlxuICAgKiBTZWVrIHRvIHRoZSBsaXZlIGVkZ2UgaWYgd2UgYXJlIGJlaGluZCB0aGUgbGl2ZSBlZGdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNlZWtUb0xpdmVFZGdlID0gZnVuY3Rpb24gc2Vla1RvTGl2ZUVkZ2UoKSB7XG4gICAgaWYgKHRoaXMuYXRMaXZlRWRnZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5ZXJfLmN1cnJlbnRUaW1lKHRoaXMubGl2ZUN1cnJlbnRUaW1lKCkpO1xuXG4gICAgaWYgKHRoaXMucGxheWVyXy5wYXVzZWQoKSkge1xuICAgICAgdGhpcy5wbGF5ZXJfLnBsYXkoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMuc3RvcFRyYWNraW5nKCk7XG5cbiAgICBfQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIExpdmVUcmFja2VyO1xufShDb21wb25lbnQpO1xuXG5Db21wb25lbnQucmVnaXN0ZXJDb21wb25lbnQoJ0xpdmVUcmFja2VyJywgTGl2ZVRyYWNrZXIpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmaXJlIGEgc291cmNlc2V0IHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nXG4gKiBzaW1pbGFyIHRvIGBtZWRpYUVsLmxvYWQoKWAgYmVpbmcgY2FsbGVkLiBJdCB3aWxsIHRyeSB0byBmaW5kIHRoZSBzb3VyY2UgdmlhXG4gKiB0aGUgYHNyY2AgYXR0cmlidXRlIGFuZCB0aGVuIHRoZSBgPHNvdXJjZT5gIGVsZW1lbnRzLiBJdCB3aWxsIHRoZW4gZmlyZSBgc291cmNlc2V0YFxuICogd2l0aCB0aGUgc291cmNlIHRoYXQgd2FzIGZvdW5kIG9yIGVtcHR5IHN0cmluZyBpZiB3ZSBjYW5ub3Qga25vdy4gSWYgaXQgY2Fubm90XG4gKiBmaW5kIGEgc291cmNlIHRoZW4gYHNvdXJjZXNldGAgd2lsbCBub3QgYmUgZmlyZWQuXG4gKlxuICogQHBhcmFtIHtIdG1sNX0gdGVjaFxuICogICAgICAgIFRoZSB0ZWNoIG9iamVjdCB0aGF0IHNvdXJjZXNldCB3YXMgc2V0dXAgb25cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICByZXR1cm5zIGZhbHNlIGlmIHRoZSBzb3VyY2VzZXQgd2FzIG5vdCBmaXJlZCBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKi9cblxudmFyIHNvdXJjZXNldExvYWQgPSBmdW5jdGlvbiBzb3VyY2VzZXRMb2FkKHRlY2gpIHtcbiAgdmFyIGVsID0gdGVjaC5lbCgpOyAvLyBpZiBgZWwuc3JjYCBpcyBzZXQsIHRoYXQgc291cmNlIHdpbGwgYmUgbG9hZGVkLlxuXG4gIGlmIChlbC5oYXNBdHRyaWJ1dGUoJ3NyYycpKSB7XG4gICAgdGVjaC50cmlnZ2VyU291cmNlc2V0KGVsLnNyYyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFNpbmNlIHRoZXJlIGlzbid0IGEgc3JjIHByb3BlcnR5IG9uIHRoZSBtZWRpYSBlbGVtZW50LCBzb3VyY2UgZWxlbWVudHMgd2lsbCBiZSB1c2VkIGZvclxuICAgKiBpbXBsZW1lbnRpbmcgdGhlIHNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLiBUaGlzIGhhcHBlbnMgYXN5bmNocm9ub3VzbHkgYW5kXG4gICAqIGZvciBtb3N0IGNhc2VzIHdlcmUgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzb3VyY2Ugd2UgY2Fubm90IHRlbGwgd2hhdCBzb3VyY2Ugd2lsbFxuICAgKiBiZSBsb2FkZWQsIHdpdGhvdXQgcmUtaW1wbGVtZW50aW5nIHRoZSBzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4gQXQgdGhpcyB0aW1lIHdlIGFyZSBub3RcbiAgICogZ29pbmcgdG8gZG8gdGhhdC4gVGhlcmUgYXJlIHRocmVlIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSBkbyBoYW5kbGUgaGVyZSB0aG91Z2g6XG4gICAqXG4gICAqIDEuIElmIHRoZXJlIGFyZSBubyBzb3VyY2VzLCBkbyBub3QgZmlyZSBgc291cmNlc2V0YC5cbiAgICogMi4gSWYgdGhlcmUgaXMgb25seSBvbmUgYDxzb3VyY2U+YCB3aXRoIGEgYHNyY2AgcHJvcGVydHkvYXR0cmlidXRlIHRoYXQgaXMgb3VyIGBzcmNgXG4gICAqIDMuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYDxzb3VyY2U+YCBidXQgYWxsIG9mIHRoZW0gaGF2ZSB0aGUgc2FtZSBgc3JjYCB1cmwuXG4gICAqICAgIFRoYXQgd2lsbCBiZSBvdXIgc3JjLlxuICAgKi9cblxuXG4gIHZhciBzb3VyY2VzID0gdGVjaC4kJCgnc291cmNlJyk7XG4gIHZhciBzcmNVcmxzID0gW107XG4gIHZhciBzcmMgPSAnJzsgLy8gaWYgdGhlcmUgYXJlIG5vIHNvdXJjZXMsIGRvIG5vdCBmaXJlIHNvdXJjZXNldFxuXG4gIGlmICghc291cmNlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gb25seSBjb3VudCB2YWxpZC9ub24tZHVwbGljYXRlIHNvdXJjZSBlbGVtZW50c1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHVybCA9IHNvdXJjZXNbaV0uc3JjO1xuXG4gICAgaWYgKHVybCAmJiBzcmNVcmxzLmluZGV4T2YodXJsKSA9PT0gLTEpIHtcbiAgICAgIHNyY1VybHMucHVzaCh1cmwpO1xuICAgIH1cbiAgfSAvLyB0aGVyZSB3ZXJlIG5vIHZhbGlkIHNvdXJjZXNcblxuXG4gIGlmICghc3JjVXJscy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gdGhlcmUgaXMgb25seSBvbmUgdmFsaWQgc291cmNlIGVsZW1lbnQgdXJsXG4gIC8vIHVzZSB0aGF0XG5cblxuICBpZiAoc3JjVXJscy5sZW5ndGggPT09IDEpIHtcbiAgICBzcmMgPSBzcmNVcmxzWzBdO1xuICB9XG5cbiAgdGVjaC50cmlnZ2VyU291cmNlc2V0KHNyYyk7XG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogb3VyIGltcGxlbWVudGF0aW9uIG9mIGFuIGBpbm5lckhUTUxgIGRlc2NyaXB0b3IgZm9yIGJyb3dzZXJzXG4gKiB0aGF0IGRvIG5vdCBoYXZlIG9uZS5cbiAqL1xuXG5cbnZhciBpbm5lckhUTUxEZXNjcmlwdG9yUG9seWZpbGwgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdpbm5lckhUTUwnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lTm9kZSh0cnVlKS5pbm5lckhUTUw7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHYpIHtcbiAgICAvLyBtYWtlIGEgZHVtbXkgbm9kZSB0byB1c2UgaW5uZXJIVE1MIG9uXG4gICAgdmFyIGR1bW15ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpOyAvLyBzZXQgaW5uZXJIVE1MIHRvIHRoZSB2YWx1ZSBwcm92aWRlZFxuXG4gICAgZHVtbXkuaW5uZXJIVE1MID0gdjsgLy8gbWFrZSBhIGRvY3VtZW50IGZyYWdtZW50IHRvIGhvbGQgdGhlIG5vZGVzIGZyb20gZHVtbXlcblxuICAgIHZhciBkb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOyAvLyBjb3B5IGFsbCBvZiB0aGUgbm9kZXMgY3JlYXRlZCBieSB0aGUgaW5uZXJIVE1MIG9uIGR1bW15XG4gICAgLy8gdG8gdGhlIGRvY3VtZW50IGZyYWdtZW50XG5cbiAgICB3aGlsZSAoZHVtbXkuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIGRvY0ZyYWcuYXBwZW5kQ2hpbGQoZHVtbXkuY2hpbGROb2Rlc1swXSk7XG4gICAgfSAvLyByZW1vdmUgY29udGVudFxuXG5cbiAgICB0aGlzLmlubmVyVGV4dCA9ICcnOyAvLyBub3cgd2UgYWRkIGFsbCBvZiB0aGF0IGh0bWwgaW4gb25lIGJ5IGFwcGVuZGluZyB0aGVcbiAgICAvLyBkb2N1bWVudCBmcmFnbWVudC4gVGhpcyBpcyBob3cgaW5uZXJIVE1MIGRvZXMgaXQuXG5cbiAgICB3aW5kb3ckMS5FbGVtZW50LnByb3RvdHlwZS5hcHBlbmRDaGlsZC5jYWxsKHRoaXMsIGRvY0ZyYWcpOyAvLyB0aGVuIHJldHVybiB0aGUgcmVzdWx0IHRoYXQgaW5uZXJIVE1MJ3Mgc2V0dGVyIHdvdWxkXG5cbiAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gIH1cbn0pO1xuLyoqXG4gKiBHZXQgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGdpdmVuIGEgbGlzdCBvZiBwcmlvcml0aWVzIGFuZCB0aGVcbiAqIHByb3BlcnR5IHRvIGdldC5cbiAqL1xuXG52YXIgZ2V0RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldERlc2NyaXB0b3IocHJpb3JpdHksIHByb3ApIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW9yaXR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJpb3JpdHlbaV0sIHByb3ApO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5zZXQgJiYgZGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgZ2V0SW5uZXJIVE1MRGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldElubmVySFRNTERlc2NyaXB0b3IodGVjaCkge1xuICByZXR1cm4gZ2V0RGVzY3JpcHRvcihbdGVjaC5lbCgpLCB3aW5kb3ckMS5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgd2luZG93JDEuRWxlbWVudC5wcm90b3R5cGUsIGlubmVySFRNTERlc2NyaXB0b3JQb2x5ZmlsbF0sICdpbm5lckhUTUwnKTtcbn07XG4vKipcbiAqIFBhdGNoZXMgYnJvd3NlciBpbnRlcm5hbCBmdW5jdGlvbnMgc28gdGhhdCB3ZSBjYW4gdGVsbCBzeW5jaHJvbm91c2x5XG4gKiBpZiBhIGA8c291cmNlPmAgd2FzIGFwcGVuZGVkIHRvIHRoZSBtZWRpYSBlbGVtZW50LiBGb3Igc29tZSByZWFzb24gdGhpc1xuICogY2F1c2VzIGEgYHNvdXJjZXNldGAgaWYgdGhlIHRoZSBtZWRpYSBlbGVtZW50IGlzIHJlYWR5IGFuZCBoYXMgbm8gc291cmNlLlxuICogVGhpcyBoYXBwZW5zIHdoZW46XG4gKiAtIFRoZSBwYWdlIGhhcyBqdXN0IGxvYWRlZCBhbmQgdGhlIG1lZGlhIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHNvdXJjZS5cbiAqIC0gVGhlIG1lZGlhIGVsZW1lbnQgd2FzIGVtcHRpZWQgb2YgYWxsIHNvdXJjZXMsIHRoZW4gYGxvYWQoKWAgd2FzIGNhbGxlZC5cbiAqXG4gKiBJdCBkb2VzIHRoaXMgYnkgcGF0Y2hpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMvcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIHN1cHBvcnRlZDpcbiAqXG4gKiAtIGBhcHBlbmQoKWAgLSBjYW4gYmUgdXNlZCB0byBhZGQgYSBgPHNvdXJjZT5gIGVsZW1lbnQgdG8gdGhlIG1lZGlhIGVsZW1lbnRcbiAqIC0gYGFwcGVuZENoaWxkKClgIC0gY2FuIGJlIHVzZWQgdG8gYWRkIGEgYDxzb3VyY2U+YCBlbGVtZW50IHRvIHRoZSBtZWRpYSBlbGVtZW50XG4gKiAtIGBpbnNlcnRBZGphY2VudEhUTUwoKWAgLSAgY2FuIGJlIHVzZWQgdG8gYWRkIGEgYDxzb3VyY2U+YCBlbGVtZW50IHRvIHRoZSBtZWRpYSBlbGVtZW50XG4gKiAtIGBpbm5lckhUTUxgIC0gIGNhbiBiZSB1c2VkIHRvIGFkZCBhIGA8c291cmNlPmAgZWxlbWVudCB0byB0aGUgbWVkaWEgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7SHRtbDV9IHRlY2hcbiAqICAgICAgICBUaGUgdGVjaCBvYmplY3QgdGhhdCBzb3VyY2VzZXQgaXMgYmVpbmcgc2V0dXAgb24uXG4gKi9cblxuXG52YXIgZmlyc3RTb3VyY2VXYXRjaCA9IGZ1bmN0aW9uIGZpcnN0U291cmNlV2F0Y2godGVjaCkge1xuICB2YXIgZWwgPSB0ZWNoLmVsKCk7IC8vIG1ha2Ugc3VyZSBmaXJzdFNvdXJjZVdhdGNoIGlzbid0IHNldHVwIHR3aWNlLlxuXG4gIGlmIChlbC5yZXNldFNvdXJjZVdhdGNoXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvbGQgPSB7fTtcbiAgdmFyIGlubmVyRGVzY3JpcHRvciA9IGdldElubmVySFRNTERlc2NyaXB0b3IodGVjaCk7XG5cbiAgdmFyIGFwcGVuZFdyYXBwZXIgPSBmdW5jdGlvbiBhcHBlbmRXcmFwcGVyKGFwcGVuZEZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmV0dmFsID0gYXBwZW5kRm4uYXBwbHkoZWwsIGFyZ3MpO1xuICAgICAgc291cmNlc2V0TG9hZCh0ZWNoKTtcbiAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfTtcbiAgfTtcblxuICBbJ2FwcGVuZCcsICdhcHBlbmRDaGlsZCcsICdpbnNlcnRBZGphY2VudEhUTUwnXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgaWYgKCFlbFtrXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc3RvcmUgdGhlIG9sZCBmdW5jdGlvblxuXG5cbiAgICBvbGRba10gPSBlbFtrXTsgLy8gY2FsbCB0aGUgb2xkIGZ1bmN0aW9uIHdpdGggYSBzb3VyY2VzZXQgaWYgYSBzb3VyY2VcbiAgICAvLyB3YXMgbG9hZGVkXG5cbiAgICBlbFtrXSA9IGFwcGVuZFdyYXBwZXIob2xkW2tdKTtcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ2lubmVySFRNTCcsIG1lcmdlT3B0aW9ucyhpbm5lckRlc2NyaXB0b3IsIHtcbiAgICBzZXQ6IGFwcGVuZFdyYXBwZXIoaW5uZXJEZXNjcmlwdG9yLnNldClcbiAgfSkpO1xuXG4gIGVsLnJlc2V0U291cmNlV2F0Y2hfID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlc2V0U291cmNlV2F0Y2hfID0gbnVsbDtcbiAgICBPYmplY3Qua2V5cyhvbGQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgIGVsW2tdID0gb2xkW2tdO1xuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ2lubmVySFRNTCcsIGlubmVyRGVzY3JpcHRvcik7XG4gIH07IC8vIG9uIHRoZSBmaXJzdCBzb3VyY2VzZXQsIHdlIG5lZWQgdG8gcmV2ZXJ0IG91ciBjaGFuZ2VzXG5cblxuICB0ZWNoLm9uZSgnc291cmNlc2V0JywgZWwucmVzZXRTb3VyY2VXYXRjaF8pO1xufTtcbi8qKlxuICogb3VyIGltcGxlbWVudGF0aW9uIG9mIGEgYHNyY2AgZGVzY3JpcHRvciBmb3IgYnJvd3NlcnNcbiAqIHRoYXQgZG8gbm90IGhhdmUgb25lLlxuICovXG5cblxudmFyIHNyY0Rlc2NyaXB0b3JQb2x5ZmlsbCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3NyYycsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdzcmMnKSkge1xuICAgICAgcmV0dXJuIGdldEFic29sdXRlVVJMKHdpbmRvdyQxLkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZS5jYWxsKHRoaXMsICdzcmMnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2KSB7XG4gICAgd2luZG93JDEuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcywgJ3NyYycsIHYpO1xuICAgIHJldHVybiB2O1xuICB9XG59KTtcblxudmFyIGdldFNyY0Rlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRTcmNEZXNjcmlwdG9yKHRlY2gpIHtcbiAgcmV0dXJuIGdldERlc2NyaXB0b3IoW3RlY2guZWwoKSwgd2luZG93JDEuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIHNyY0Rlc2NyaXB0b3JQb2x5ZmlsbF0sICdzcmMnKTtcbn07XG4vKipcbiAqIHNldHVwIGBzb3VyY2VzZXRgIGhhbmRsaW5nIG9uIHRoZSBgSHRtbDVgIHRlY2guIFRoaXMgZnVuY3Rpb25cbiAqIHBhdGNoZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50IHByb3BlcnRpZXMvZnVuY3Rpb25zOlxuICpcbiAqIC0gYHNyY2AgLSB0byBkZXRlcm1pbmUgd2hlbiBgc3JjYCBpcyBzZXRcbiAqIC0gYHNldEF0dHJpYnV0ZSgpYCAtIHRvIGRldGVybWluZSB3aGVuIGBzcmNgIGlzIHNldFxuICogLSBgbG9hZCgpYCAtIHRoaXMgcmUtdHJpZ2dlcnMgdGhlIHNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLCBhbmQgY2FuXG4gKiAgICAgICAgICAgICAgY2F1c2UgYSBzb3VyY2VzZXQuXG4gKlxuICogSWYgdGhlcmUgaXMgbm8gc291cmNlIHdoZW4gd2UgYXJlIGFkZGluZyBgc291cmNlc2V0YCBzdXBwb3J0IG9yIGR1cmluZyBhIGBsb2FkKClgXG4gKiB3ZSBhbHNvIHBhdGNoIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGluIGBmaXJzdFNvdXJjZVdhdGNoYC5cbiAqXG4gKiBAcGFyYW0ge0h0bWw1fSB0ZWNoXG4gKiAgICAgICAgVGhlIHRlY2ggdG8gcGF0Y2hcbiAqL1xuXG5cbnZhciBzZXR1cFNvdXJjZXNldCA9IGZ1bmN0aW9uIHNldHVwU291cmNlc2V0KHRlY2gpIHtcbiAgaWYgKCF0ZWNoLmZlYXR1cmVzU291cmNlc2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVsID0gdGVjaC5lbCgpOyAvLyBtYWtlIHN1cmUgc291cmNlc2V0IGlzbid0IHNldHVwIHR3aWNlLlxuXG4gIGlmIChlbC5yZXNldFNvdXJjZXNldF8pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3JjRGVzY3JpcHRvciA9IGdldFNyY0Rlc2NyaXB0b3IodGVjaCk7XG4gIHZhciBvbGRTZXRBdHRyaWJ1dGUgPSBlbC5zZXRBdHRyaWJ1dGU7XG4gIHZhciBvbGRMb2FkID0gZWwubG9hZDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnc3JjJywgbWVyZ2VPcHRpb25zKHNyY0Rlc2NyaXB0b3IsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2KSB7XG4gICAgICB2YXIgcmV0dmFsID0gc3JjRGVzY3JpcHRvci5zZXQuY2FsbChlbCwgdik7IC8vIHdlIHVzZSB0aGUgZ2V0dGVyIGhlcmUgdG8gZ2V0IHRoZSBhY3R1YWwgdmFsdWUgc2V0IG9uIHNyY1xuXG4gICAgICB0ZWNoLnRyaWdnZXJTb3VyY2VzZXQoZWwuc3JjKTtcbiAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfVxuICB9KSk7XG5cbiAgZWwuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG4sIHYpIHtcbiAgICB2YXIgcmV0dmFsID0gb2xkU2V0QXR0cmlidXRlLmNhbGwoZWwsIG4sIHYpO1xuXG4gICAgaWYgKC9zcmMvaS50ZXN0KG4pKSB7XG4gICAgICB0ZWNoLnRyaWdnZXJTb3VyY2VzZXQoZWwuc3JjKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dmFsO1xuICB9O1xuXG4gIGVsLmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHZhbCA9IG9sZExvYWQuY2FsbChlbCk7IC8vIGlmIGxvYWQgd2FzIGNhbGxlZCwgYnV0IHRoZXJlIHdhcyBubyBzb3VyY2UgdG8gZmlyZVxuICAgIC8vIHNvdXJjZXNldCBvbi4gV2UgaGF2ZSB0byB3YXRjaCBmb3IgYSBzb3VyY2UgYXBwZW5kXG4gICAgLy8gYXMgdGhhdCBjYW4gdHJpZ2dlciBhIGBzb3VyY2VzZXRgIHdoZW4gdGhlIG1lZGlhIGVsZW1lbnRcbiAgICAvLyBoYXMgbm8gc291cmNlXG5cbiAgICBpZiAoIXNvdXJjZXNldExvYWQodGVjaCkpIHtcbiAgICAgIHRlY2gudHJpZ2dlclNvdXJjZXNldCgnJyk7XG4gICAgICBmaXJzdFNvdXJjZVdhdGNoKHRlY2gpO1xuICAgIH1cblxuICAgIHJldHVybiByZXR2YWw7XG4gIH07XG5cbiAgaWYgKGVsLmN1cnJlbnRTcmMpIHtcbiAgICB0ZWNoLnRyaWdnZXJTb3VyY2VzZXQoZWwuY3VycmVudFNyYyk7XG4gIH0gZWxzZSBpZiAoIXNvdXJjZXNldExvYWQodGVjaCkpIHtcbiAgICBmaXJzdFNvdXJjZVdhdGNoKHRlY2gpO1xuICB9XG5cbiAgZWwucmVzZXRTb3VyY2VzZXRfID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlc2V0U291cmNlc2V0XyA9IG51bGw7XG4gICAgZWwubG9hZCA9IG9sZExvYWQ7XG4gICAgZWwuc2V0QXR0cmlidXRlID0gb2xkU2V0QXR0cmlidXRlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ3NyYycsIHNyY0Rlc2NyaXB0b3IpO1xuXG4gICAgaWYgKGVsLnJlc2V0U291cmNlV2F0Y2hfKSB7XG4gICAgICBlbC5yZXNldFNvdXJjZVdhdGNoXygpO1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogSFRNTDUgTWVkaWEgQ29udHJvbGxlciAtIFdyYXBwZXIgZm9yIEhUTUw1IE1lZGlhIEFQSVxuICpcbiAqIEBtaXhlcyBUZWNoflNvdXJjZUhhbmRsZXJBZGRpdGlvbnNcbiAqIEBleHRlbmRzIFRlY2hcbiAqL1xuXG52YXIgSHRtbDUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9UZWNoKSB7XG4gIF9pbmhlcml0c0xvb3NlKEh0bWw1LCBfVGVjaCk7XG5cbiAgLyoqXG4gICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgVGVjaC5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgKiAgICAgICAgVGhlIGtleS92YWx1ZSBzdG9yZSBvZiBwbGF5ZXIgb3B0aW9ucy5cbiAgKlxuICAqIEBwYXJhbSB7Q29tcG9uZW50flJlYWR5Q2FsbGJhY2t9IHJlYWR5XG4gICogICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgYEhUTUw1YCBUZWNoIGlzIHJlYWR5LlxuICAqL1xuICBmdW5jdGlvbiBIdG1sNShvcHRpb25zLCByZWFkeSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1RlY2guY2FsbCh0aGlzLCBvcHRpb25zLCByZWFkeSkgfHwgdGhpcztcbiAgICB2YXIgc291cmNlID0gb3B0aW9ucy5zb3VyY2U7XG4gICAgdmFyIGNyb3Nzb3JpZ2luVHJhY2tzID0gZmFsc2U7IC8vIFNldCB0aGUgc291cmNlIGlmIG9uZSBpcyBwcm92aWRlZFxuICAgIC8vIDEpIENoZWNrIGlmIHRoZSBzb3VyY2UgaXMgbmV3IChpZiBub3QsIHdlIHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgc28gcGxheWJhY2sgaXNuJ3QgaW50ZXJydXB0ZWQpXG4gICAgLy8gMikgQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXR3b3JrIHN0YXRlIG9mIHRoZSB0YWcgd2FzIGZhaWxlZCBhdCBpbml0LCBhbmQgaWYgc28sIHJlc2V0IHRoZSBzb3VyY2VcbiAgICAvLyBhbnl3YXkgc28gdGhlIGVycm9yIGdldHMgZmlyZWQuXG5cbiAgICBpZiAoc291cmNlICYmIChfdGhpcy5lbF8uY3VycmVudFNyYyAhPT0gc291cmNlLnNyYyB8fCBvcHRpb25zLnRhZyAmJiBvcHRpb25zLnRhZy5pbml0TmV0d29ya1N0YXRlXyA9PT0gMykpIHtcbiAgICAgIF90aGlzLnNldFNvdXJjZShzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5oYW5kbGVMYXRlSW5pdF8oX3RoaXMuZWxfKTtcbiAgICB9IC8vIHNldHVwIHNvdXJjZXNldCBhZnRlciBsYXRlIHNvdXJjZXNldC9pbml0XG5cblxuICAgIGlmIChvcHRpb25zLmVuYWJsZVNvdXJjZXNldCkge1xuICAgICAgX3RoaXMuc2V0dXBTb3VyY2VzZXRIYW5kbGluZ18oKTtcbiAgICB9XG5cbiAgICBpZiAoX3RoaXMuZWxfLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdmFyIG5vZGVzID0gX3RoaXMuZWxfLmNoaWxkTm9kZXM7XG4gICAgICB2YXIgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG4gICAgICB2YXIgcmVtb3ZlTm9kZXMgPSBbXTtcblxuICAgICAgd2hpbGUgKG5vZGVzTGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tub2Rlc0xlbmd0aF07XG4gICAgICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAobm9kZU5hbWUgPT09ICd0cmFjaycpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykge1xuICAgICAgICAgICAgLy8gRW1wdHkgdmlkZW8gdGFnIHRyYWNrcyBzbyB0aGUgYnVpbHQtaW4gcGxheWVyIGRvZXNuJ3QgdXNlIHRoZW0gYWxzby5cbiAgICAgICAgICAgIC8vIFRoaXMgbWF5IG5vdCBiZSBmYXN0IGVub3VnaCB0byBzdG9wIEhUTUw1IGJyb3dzZXJzIGZyb20gcmVhZGluZyB0aGUgdGFnc1xuICAgICAgICAgICAgLy8gc28gd2UnbGwgbmVlZCB0byB0dXJuIG9mZiBhbnkgZGVmYXVsdCB0cmFja3MgaWYgd2UncmUgbWFudWFsbHkgZG9pbmdcbiAgICAgICAgICAgIC8vIGNhcHRpb25zIGFuZCBzdWJ0aXRsZXMuIHZpZGVvRWxlbWVudC50ZXh0VHJhY2tzXG4gICAgICAgICAgICByZW1vdmVOb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9yZSBIVE1MVHJhY2tFbGVtZW50IGFuZCBUZXh0VHJhY2sgdG8gcmVtb3RlIGxpc3RcbiAgICAgICAgICAgIF90aGlzLnJlbW90ZVRleHRUcmFja0VscygpLmFkZFRyYWNrRWxlbWVudF8obm9kZSk7XG5cbiAgICAgICAgICAgIF90aGlzLnJlbW90ZVRleHRUcmFja3MoKS5hZGRUcmFjayhub2RlLnRyYWNrKTtcblxuICAgICAgICAgICAgX3RoaXMudGV4dFRyYWNrcygpLmFkZFRyYWNrKG5vZGUudHJhY2spO1xuXG4gICAgICAgICAgICBpZiAoIWNyb3Nzb3JpZ2luVHJhY2tzICYmICFfdGhpcy5lbF8uaGFzQXR0cmlidXRlKCdjcm9zc29yaWdpbicpICYmIGlzQ3Jvc3NPcmlnaW4obm9kZS5zcmMpKSB7XG4gICAgICAgICAgICAgIGNyb3Nzb3JpZ2luVHJhY2tzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBfdGhpcy5lbF8ucmVtb3ZlQ2hpbGQocmVtb3ZlTm9kZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnByb3h5TmF0aXZlVHJhY2tzXygpO1xuXG4gICAgaWYgKF90aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcyAmJiBjcm9zc29yaWdpblRyYWNrcykge1xuICAgICAgbG9nLndhcm4oJ1RleHQgVHJhY2tzIGFyZSBiZWluZyBsb2FkZWQgZnJvbSBhbm90aGVyIG9yaWdpbiBidXQgdGhlIGNyb3Nzb3JpZ2luIGF0dHJpYnV0ZSBpc25cXCd0IHVzZWQuXFxuJyArICdUaGlzIG1heSBwcmV2ZW50IHRleHQgdHJhY2tzIGZyb20gbG9hZGluZy4nKTtcbiAgICB9IC8vIHByZXZlbnQgaU9TIFNhZmFyaSBmcm9tIGRpc2FibGluZyBtZXRhZGF0YSB0ZXh0IHRyYWNrcyBkdXJpbmcgbmF0aXZlIHBsYXliYWNrXG5cblxuICAgIF90aGlzLnJlc3RvcmVNZXRhZGF0YVRyYWNrc0luSU9TTmF0aXZlUGxheWVyXygpOyAvLyBEZXRlcm1pbmUgaWYgbmF0aXZlIGNvbnRyb2xzIHNob3VsZCBiZSB1c2VkXG4gICAgLy8gT3VyIGdvYWwgc2hvdWxkIGJlIHRvIGdldCB0aGUgY3VzdG9tIGNvbnRyb2xzIG9uIG1vYmlsZSBzb2xpZCBldmVyeXdoZXJlXG4gICAgLy8gc28gd2UgY2FuIHJlbW92ZSB0aGlzIGFsbCB0b2dldGhlci4gUmlnaHQgbm93IHRoaXMgd2lsbCBibG9jayBjdXN0b21cbiAgICAvLyBjb250cm9scyBvbiB0b3VjaCBlbmFibGVkIGxhcHRvcHMgbGlrZSB0aGUgQ2hyb21lIFBpeGVsXG5cblxuICAgIGlmICgoVE9VQ0hfRU5BQkxFRCB8fCBJU19JUEhPTkUgfHwgSVNfTkFUSVZFX0FORFJPSUQpICYmIG9wdGlvbnMubmF0aXZlQ29udHJvbHNGb3JUb3VjaCA9PT0gdHJ1ZSkge1xuICAgICAgX3RoaXMuc2V0Q29udHJvbHModHJ1ZSk7XG4gICAgfSAvLyBvbiBpT1MsIHdlIHdhbnQgdG8gcHJveHkgYHdlYmtpdGJlZ2luZnVsbHNjcmVlbmAgYW5kIGB3ZWJraXRlbmRmdWxsc2NyZWVuYFxuICAgIC8vIGludG8gYSBgZnVsbHNjcmVlbmNoYW5nZWAgZXZlbnRcblxuXG4gICAgX3RoaXMucHJveHlXZWJraXRGdWxsc2NyZWVuXygpO1xuXG4gICAgX3RoaXMudHJpZ2dlclJlYWR5KCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIERpc3Bvc2Ugb2YgYEhUTUw1YCBtZWRpYSBlbGVtZW50IGFuZCByZW1vdmUgYWxsIHRyYWNrcy5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSHRtbDUucHJvdG90eXBlO1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5lbF8gJiYgdGhpcy5lbF8ucmVzZXRTb3VyY2VzZXRfKSB7XG4gICAgICB0aGlzLmVsXy5yZXNldFNvdXJjZXNldF8oKTtcbiAgICB9XG5cbiAgICBIdG1sNS5kaXNwb3NlTWVkaWFFbGVtZW50KHRoaXMuZWxfKTtcbiAgICB0aGlzLm9wdGlvbnNfID0gbnVsbDsgLy8gdGVjaCB3aWxsIGhhbmRsZSBjbGVhcmluZyBvZiB0aGUgZW11bGF0ZWQgdHJhY2sgbGlzdFxuXG4gICAgX1RlY2gucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogTW9kaWZ5IHRoZSBtZWRpYSBlbGVtZW50IHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGVuXG4gICAqIHRoZSBzb3VyY2UgaXMgY2hhbmdlZC4gRmlyZXMgYHNvdXJjZXNldGAganVzdCBhZnRlciB0aGUgc291cmNlIGhhcyBjaGFuZ2VkXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldHVwU291cmNlc2V0SGFuZGxpbmdfID0gZnVuY3Rpb24gc2V0dXBTb3VyY2VzZXRIYW5kbGluZ18oKSB7XG4gICAgc2V0dXBTb3VyY2VzZXQodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIFdoZW4gYSBjYXB0aW9ucyB0cmFjayBpcyBlbmFibGVkIGluIHRoZSBpT1MgU2FmYXJpIG5hdGl2ZSBwbGF5ZXIsIGFsbCBvdGhlclxuICAgKiB0cmFja3MgYXJlIGRpc2FibGVkIChpbmNsdWRpbmcgbWV0YWRhdGEgdHJhY2tzKSwgd2hpY2ggbnVsbHMgYWxsIG9mIHRoZWlyXG4gICAqIGFzc29jaWF0ZWQgY3VlIHBvaW50cy4gVGhpcyB3aWxsIHJlc3RvcmUgbWV0YWRhdGEgdHJhY2tzIHRvIHRoZWlyIHByZS1mdWxsc2NyZWVuXG4gICAqIHN0YXRlIGluIHRob3NlIGNhc2VzIHNvIHRoYXQgY3VlIHBvaW50cyBhcmUgbm90IG5lZWRsZXNzbHkgbG9zdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzdG9yZU1ldGFkYXRhVHJhY2tzSW5JT1NOYXRpdmVQbGF5ZXJfID0gZnVuY3Rpb24gcmVzdG9yZU1ldGFkYXRhVHJhY2tzSW5JT1NOYXRpdmVQbGF5ZXJfKCkge1xuICAgIHZhciB0ZXh0VHJhY2tzID0gdGhpcy50ZXh0VHJhY2tzKCk7XG4gICAgdmFyIG1ldGFkYXRhVHJhY2tzUHJlRnVsbHNjcmVlblN0YXRlOyAvLyBjYXB0dXJlcyBhIHNuYXBzaG90IG9mIGV2ZXJ5IG1ldGFkYXRhIHRyYWNrJ3MgY3VycmVudCBzdGF0ZVxuXG4gICAgdmFyIHRha2VNZXRhZGF0YVRyYWNrU25hcHNob3QgPSBmdW5jdGlvbiB0YWtlTWV0YWRhdGFUcmFja1NuYXBzaG90KCkge1xuICAgICAgbWV0YWRhdGFUcmFja3NQcmVGdWxsc2NyZWVuU3RhdGUgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0VHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0cmFjayA9IHRleHRUcmFja3NbaV07XG5cbiAgICAgICAgaWYgKHRyYWNrLmtpbmQgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgICAgICBtZXRhZGF0YVRyYWNrc1ByZUZ1bGxzY3JlZW5TdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAgICAgICAgIHN0b3JlZE1vZGU6IHRyYWNrLm1vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07IC8vIHNuYXBzaG90IGVhY2ggbWV0YWRhdGEgdHJhY2sncyBpbml0aWFsIHN0YXRlLCBhbmQgdXBkYXRlIHRoZSBzbmFwc2hvdFxuICAgIC8vIGVhY2ggdGltZSB0aGVyZSBpcyBhIHRyYWNrICdjaGFuZ2UnIGV2ZW50XG5cblxuICAgIHRha2VNZXRhZGF0YVRyYWNrU25hcHNob3QoKTtcbiAgICB0ZXh0VHJhY2tzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRha2VNZXRhZGF0YVRyYWNrU25hcHNob3QpO1xuICAgIHRoaXMub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGV4dFRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0YWtlTWV0YWRhdGFUcmFja1NuYXBzaG90KTtcbiAgICB9KTtcblxuICAgIHZhciByZXN0b3JlVHJhY2tNb2RlID0gZnVuY3Rpb24gcmVzdG9yZVRyYWNrTW9kZSgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YWRhdGFUcmFja3NQcmVGdWxsc2NyZWVuU3RhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0b3JlZFRyYWNrID0gbWV0YWRhdGFUcmFja3NQcmVGdWxsc2NyZWVuU3RhdGVbaV07XG5cbiAgICAgICAgaWYgKHN0b3JlZFRyYWNrLnRyYWNrLm1vZGUgPT09ICdkaXNhYmxlZCcgJiYgc3RvcmVkVHJhY2sudHJhY2subW9kZSAhPT0gc3RvcmVkVHJhY2suc3RvcmVkTW9kZSkge1xuICAgICAgICAgIHN0b3JlZFRyYWNrLnRyYWNrLm1vZGUgPSBzdG9yZWRUcmFjay5zdG9yZWRNb2RlO1xuICAgICAgICB9XG4gICAgICB9IC8vIHdlIG9ubHkgd2FudCB0aGlzIGhhbmRsZXIgdG8gYmUgZXhlY3V0ZWQgb24gdGhlIGZpcnN0ICdjaGFuZ2UnIGV2ZW50XG5cblxuICAgICAgdGV4dFRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZXN0b3JlVHJhY2tNb2RlKTtcbiAgICB9OyAvLyB3aGVuIHdlIGVudGVyIGZ1bGxzY3JlZW4gcGxheWJhY2ssIHN0b3AgdXBkYXRpbmcgdGhlIHNuYXBzaG90IGFuZFxuICAgIC8vIHJlc3RvcmUgYWxsIHRyYWNrIG1vZGVzIHRvIHRoZWlyIHByZS1mdWxsc2NyZWVuIHN0YXRlXG5cblxuICAgIHRoaXMub24oJ3dlYmtpdGJlZ2luZnVsbHNjcmVlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRleHRUcmFja3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGFrZU1ldGFkYXRhVHJhY2tTbmFwc2hvdCk7IC8vIHJlbW92ZSB0aGUgbGlzdGVuZXIgYmVmb3JlIGFkZGluZyBpdCBqdXN0IGluIGNhc2UgaXQgd2Fzbid0IHByZXZpb3VzbHkgcmVtb3ZlZFxuXG4gICAgICB0ZXh0VHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlc3RvcmVUcmFja01vZGUpO1xuICAgICAgdGV4dFRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZXN0b3JlVHJhY2tNb2RlKTtcbiAgICB9KTsgLy8gc3RhcnQgdXBkYXRpbmcgdGhlIHNuYXBzaG90IGFnYWluIGFmdGVyIGxlYXZpbmcgZnVsbHNjcmVlblxuXG4gICAgdGhpcy5vbignd2Via2l0ZW5kZnVsbHNjcmVlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgbGlzdGVuZXIgYmVmb3JlIGFkZGluZyBpdCBqdXN0IGluIGNhc2UgaXQgd2Fzbid0IHByZXZpb3VzbHkgcmVtb3ZlZFxuICAgICAgdGV4dFRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0YWtlTWV0YWRhdGFUcmFja1NuYXBzaG90KTtcbiAgICAgIHRleHRUcmFja3MuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGFrZU1ldGFkYXRhVHJhY2tTbmFwc2hvdCk7IC8vIHJlbW92ZSB0aGUgcmVzdG9yZVRyYWNrTW9kZSBoYW5kbGVyIGluIGNhc2UgaXQgd2Fzbid0IHRyaWdnZXJlZCBkdXJpbmcgZnVsbHNjcmVlbiBwbGF5YmFja1xuXG4gICAgICB0ZXh0VHJhY2tzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlc3RvcmVUcmFja01vZGUpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGZvcmNlIG92ZXJyaWRlIG9mIHRyYWNrcyBmb3IgdGhlIGdpdmVuIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUcmFjayB0eXBlIHRvIG92ZXJyaWRlLCBwb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZSAnQXVkaW8nLFxuICAgKiAnVmlkZW8nLCBhbmQgJ1RleHQnLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJyaWRlIC0gSWYgc2V0IHRvIHRydWUgbmF0aXZlIGF1ZGlvL3ZpZGVvIHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICogb3RoZXJ3aXNlIG5hdGl2ZSBhdWRpby92aWRlbyB3aWxsIHBvdGVudGlhbGx5IGJlIHVzZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLm92ZXJyaWRlTmF0aXZlXyA9IGZ1bmN0aW9uIG92ZXJyaWRlTmF0aXZlXyh0eXBlLCBvdmVycmlkZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYmVoYXZpb3JhbCBjaGFuZ2UgZG9uJ3QgYWRkL3JlbW92ZSBsaXN0ZW5lcnNcbiAgICBpZiAob3ZlcnJpZGUgIT09IHRoaXNbXCJmZWF0dXJlc05hdGl2ZVwiICsgdHlwZSArIFwiVHJhY2tzXCJdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZVR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodGhpc1tsb3dlckNhc2VUeXBlICsgXCJUcmFja3NMaXN0ZW5lcnNfXCJdKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzW2xvd2VyQ2FzZVR5cGUgKyBcIlRyYWNrc0xpc3RlbmVyc19cIl0pLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICB2YXIgZWxUcmFja3MgPSBfdGhpczIuZWwoKVtsb3dlckNhc2VUeXBlICsgXCJUcmFja3NcIl07XG5cbiAgICAgICAgZWxUcmFja3MucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIF90aGlzMltsb3dlckNhc2VUeXBlICsgXCJUcmFja3NMaXN0ZW5lcnNfXCJdW2V2ZW50TmFtZV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpc1tcImZlYXR1cmVzTmF0aXZlXCIgKyB0eXBlICsgXCJUcmFja3NcIl0gPSAhb3ZlcnJpZGU7XG4gICAgdGhpc1tsb3dlckNhc2VUeXBlICsgXCJUcmFja3NMaXN0ZW5lcnNfXCJdID0gbnVsbDtcbiAgICB0aGlzLnByb3h5TmF0aXZlVHJhY2tzRm9yVHlwZV8obG93ZXJDYXNlVHlwZSk7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gZm9yY2Ugb3ZlcnJpZGUgb2YgbmF0aXZlIGF1ZGlvIHRyYWNrcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBvdmVycmlkZSAtIElmIHNldCB0byB0cnVlIG5hdGl2ZSBhdWRpbyB3aWxsIGJlIG92ZXJyaWRkZW4sXG4gICAqIG90aGVyd2lzZSBuYXRpdmUgYXVkaW8gd2lsbCBwb3RlbnRpYWxseSBiZSB1c2VkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5vdmVycmlkZU5hdGl2ZUF1ZGlvVHJhY2tzID0gZnVuY3Rpb24gb3ZlcnJpZGVOYXRpdmVBdWRpb1RyYWNrcyhvdmVycmlkZSkge1xuICAgIHRoaXMub3ZlcnJpZGVOYXRpdmVfKCdBdWRpbycsIG92ZXJyaWRlKTtcbiAgfVxuICAvKipcbiAgICogQXR0ZW1wdCB0byBmb3JjZSBvdmVycmlkZSBvZiBuYXRpdmUgdmlkZW8gdHJhY2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJyaWRlIC0gSWYgc2V0IHRvIHRydWUgbmF0aXZlIHZpZGVvIHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICogb3RoZXJ3aXNlIG5hdGl2ZSB2aWRlbyB3aWxsIHBvdGVudGlhbGx5IGJlIHVzZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLm92ZXJyaWRlTmF0aXZlVmlkZW9UcmFja3MgPSBmdW5jdGlvbiBvdmVycmlkZU5hdGl2ZVZpZGVvVHJhY2tzKG92ZXJyaWRlKSB7XG4gICAgdGhpcy5vdmVycmlkZU5hdGl2ZV8oJ1ZpZGVvJywgb3ZlcnJpZGUpO1xuICB9XG4gIC8qKlxuICAgKiBQcm94eSBuYXRpdmUgdHJhY2sgbGlzdCBldmVudHMgZm9yIHRoZSBnaXZlbiB0eXBlIHRvIG91ciB0cmFja1xuICAgKiBsaXN0cyBpZiB0aGUgYnJvd3NlciB3ZSBhcmUgcGxheWluZyBpbiBzdXBwb3J0cyB0aGF0IHR5cGUgb2YgdHJhY2sgbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUcmFjayB0eXBlOyB2YWx1ZXMgaW5jbHVkZSAnYXVkaW8nLCAndmlkZW8nLCBhbmQgJ3RleHQnXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnByb3h5TmF0aXZlVHJhY2tzRm9yVHlwZV8gPSBmdW5jdGlvbiBwcm94eU5hdGl2ZVRyYWNrc0ZvclR5cGVfKG5hbWUpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBwcm9wcyA9IE5PUk1BTFtuYW1lXTtcbiAgICB2YXIgZWxUcmFja3MgPSB0aGlzLmVsKClbcHJvcHMuZ2V0dGVyTmFtZV07XG4gICAgdmFyIHRlY2hUcmFja3MgPSB0aGlzW3Byb3BzLmdldHRlck5hbWVdKCk7XG5cbiAgICBpZiAoIXRoaXNbXCJmZWF0dXJlc05hdGl2ZVwiICsgcHJvcHMuY2FwaXRhbE5hbWUgKyBcIlRyYWNrc1wiXSB8fCAhZWxUcmFja3MgfHwgIWVsVHJhY2tzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBmdW5jdGlvbiBjaGFuZ2UoZSkge1xuICAgICAgICB0ZWNoVHJhY2tzLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICdjaGFuZ2UnLFxuICAgICAgICAgIHRhcmdldDogdGVjaFRyYWNrcyxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0OiB0ZWNoVHJhY2tzLFxuICAgICAgICAgIHNyY0VsZW1lbnQ6IHRlY2hUcmFja3NcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgYWRkdHJhY2s6IGZ1bmN0aW9uIGFkZHRyYWNrKGUpIHtcbiAgICAgICAgdGVjaFRyYWNrcy5hZGRUcmFjayhlLnRyYWNrKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmV0cmFjazogZnVuY3Rpb24gcmVtb3ZldHJhY2soZSkge1xuICAgICAgICB0ZWNoVHJhY2tzLnJlbW92ZVRyYWNrKGUudHJhY2spO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmVtb3ZlT2xkVHJhY2tzID0gZnVuY3Rpb24gcmVtb3ZlT2xkVHJhY2tzKCkge1xuICAgICAgdmFyIHJlbW92ZVRyYWNrcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlY2hUcmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbFRyYWNrcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmIChlbFRyYWNrc1tqXSA9PT0gdGVjaFRyYWNrc1tpXSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIHJlbW92ZVRyYWNrcy5wdXNoKHRlY2hUcmFja3NbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChyZW1vdmVUcmFja3MubGVuZ3RoKSB7XG4gICAgICAgIHRlY2hUcmFja3MucmVtb3ZlVHJhY2socmVtb3ZlVHJhY2tzLnNoaWZ0KCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzW3Byb3BzLmdldHRlck5hbWUgKyAnTGlzdGVuZXJzXyddID0gbGlzdGVuZXJzO1xuICAgIE9iamVjdC5rZXlzKGxpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbZXZlbnROYW1lXTtcbiAgICAgIGVsVHJhY2tzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG5cbiAgICAgIF90aGlzMy5vbignZGlzcG9zZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlbFRyYWNrcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIFJlbW92ZSAobmF0aXZlKSB0cmFja3MgdGhhdCBhcmUgbm90IHVzZWQgYW55bW9yZVxuXG4gICAgdGhpcy5vbignbG9hZHN0YXJ0JywgcmVtb3ZlT2xkVHJhY2tzKTtcbiAgICB0aGlzLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBfdGhpczMub2ZmKCdsb2Fkc3RhcnQnLCByZW1vdmVPbGRUcmFja3MpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBQcm94eSBhbGwgbmF0aXZlIHRyYWNrIGxpc3QgZXZlbnRzIHRvIG91ciB0cmFjayBsaXN0cyBpZiB0aGUgYnJvd3NlciB3ZSBhcmUgcGxheWluZ1xuICAgKiBpbiBzdXBwb3J0cyB0aGF0IHR5cGUgb2YgdHJhY2sgbGlzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHJveHlOYXRpdmVUcmFja3NfID0gZnVuY3Rpb24gcHJveHlOYXRpdmVUcmFja3NfKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgTk9STUFMLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIF90aGlzNC5wcm94eU5hdGl2ZVRyYWNrc0ZvclR5cGVfKG5hbWUpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGBIdG1sNWAgVGVjaCdzIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgKiAgICAgICAgIFRoZSBlbGVtZW50IHRoYXQgZ2V0cyBjcmVhdGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVFbCA9IGZ1bmN0aW9uIGNyZWF0ZUVsKCkge1xuICAgIHZhciBlbCA9IHRoaXMub3B0aW9uc18udGFnOyAvLyBDaGVjayBpZiB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgbW92aW5nIHRoZSBlbGVtZW50IGludG8gdGhlIGJveC5cbiAgICAvLyBPbiB0aGUgaVBob25lIHZpZGVvIHdpbGwgYnJlYWsgaWYgeW91IG1vdmUgdGhlIGVsZW1lbnQsXG4gICAgLy8gU28gd2UgaGF2ZSB0byBjcmVhdGUgYSBicmFuZCBuZXcgZWxlbWVudC5cbiAgICAvLyBJZiB3ZSBpbmdlc3RlZCB0aGUgcGxheWVyIGRpdiwgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSB0aGUgbWVkaWEgZWxlbWVudC5cblxuICAgIGlmICghZWwgfHwgISh0aGlzLm9wdGlvbnNfLnBsYXllckVsSW5nZXN0IHx8IHRoaXMubW92aW5nTWVkaWFFbGVtZW50SW5ET00pKSB7XG4gICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgdGFnIGlzIHN0aWxsIHRoZXJlLCBjbG9uZSBhbmQgcmVtb3ZlIGl0LlxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSh0cnVlKTtcblxuICAgICAgICBpZiAoZWwucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNsb25lLCBlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBIdG1sNS5kaXNwb3NlTWVkaWFFbGVtZW50KGVsKTtcbiAgICAgICAgZWwgPSBjbG9uZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsgLy8gZGV0ZXJtaW5lIGlmIG5hdGl2ZSBjb250cm9scyBzaG91bGQgYmUgdXNlZFxuXG4gICAgICAgIHZhciB0YWdBdHRyaWJ1dGVzID0gdGhpcy5vcHRpb25zXy50YWcgJiYgZ2V0QXR0cmlidXRlcyh0aGlzLm9wdGlvbnNfLnRhZyk7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbWVyZ2VPcHRpb25zKHt9LCB0YWdBdHRyaWJ1dGVzKTtcblxuICAgICAgICBpZiAoIVRPVUNIX0VOQUJMRUQgfHwgdGhpcy5vcHRpb25zXy5uYXRpdmVDb250cm9sc0ZvclRvdWNoICE9PSB0cnVlKSB7XG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuY29udHJvbHM7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRBdHRyaWJ1dGVzKGVsLCBhc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgIGlkOiB0aGlzLm9wdGlvbnNfLnRlY2hJZCxcbiAgICAgICAgICBcImNsYXNzXCI6ICd2anMtdGVjaCdcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBlbC5wbGF5ZXJJZCA9IHRoaXMub3B0aW9uc18ucGxheWVySWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnNfLnByZWxvYWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoZWwsICdwcmVsb2FkJywgdGhpcy5vcHRpb25zXy5wcmVsb2FkKTtcbiAgICB9IC8vIFVwZGF0ZSBzcGVjaWZpYyB0YWcgc2V0dGluZ3MsIGluIGNhc2UgdGhleSB3ZXJlIG92ZXJyaWRkZW5cbiAgICAvLyBgYXV0b3BsYXlgIGhhcyB0byBiZSAqbGFzdCogc28gdGhhdCBgbXV0ZWRgIGFuZCBgcGxheXNpbmxpbmVgIGFyZSBwcmVzZW50XG4gICAgLy8gd2hlbiBpT1MvU2FmYXJpIG9yIG90aGVyIGJyb3dzZXJzIGF0dGVtcHQgdG8gYXV0b3BsYXkuXG5cblxuICAgIHZhciBzZXR0aW5nc0F0dHJzID0gWydsb29wJywgJ211dGVkJywgJ3BsYXlzaW5saW5lJywgJ2F1dG9wbGF5J107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNldHRpbmdzQXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhdHRyID0gc2V0dGluZ3NBdHRyc1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMub3B0aW9uc19bYXR0cl07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHNldEF0dHJpYnV0ZShlbCwgYXR0ciwgYXR0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlQXR0cmlidXRlKGVsLCBhdHRyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsW2F0dHJdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgdHJpZ2dlcmVkIGlmIHRoZSBsb2Fkc3RhcnQgZXZlbnQgaGFzIGFscmVhZHkgZmlyZWQsIGJlZm9yZSB2aWRlb2pzIHdhc1xuICAgKiByZWFkeS4gVHdvIGtub3duIGV4YW1wbGVzIG9mIHdoZW4gdGhpcyBjYW4gaGFwcGVuIGFyZTpcbiAgICogMS4gSWYgd2UncmUgbG9hZGluZyB0aGUgcGxheWJhY2sgb2JqZWN0IGFmdGVyIGl0IGhhcyBzdGFydGVkIGxvYWRpbmdcbiAgICogMi4gVGhlIG1lZGlhIGlzIGFscmVhZHkgcGxheWluZyB0aGUgKG9mdGVuIHdpdGggYXV0b3BsYXkgb24pIHRoZW5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGZpcmUgYW5vdGhlciBsb2Fkc3RhcnQgc28gdGhhdCB2aWRlb2pzIGNhbiBjYXRjaHVwLlxuICAgKlxuICAgKiBAZmlyZXMgVGVjaCNsb2Fkc3RhcnRcbiAgICpcbiAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgKiAgICAgICAgIHJldHVybnMgbm90aGluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlTGF0ZUluaXRfID0gZnVuY3Rpb24gaGFuZGxlTGF0ZUluaXRfKGVsKSB7XG4gICAgaWYgKGVsLm5ldHdvcmtTdGF0ZSA9PT0gMCB8fCBlbC5uZXR3b3JrU3RhdGUgPT09IDMpIHtcbiAgICAgIC8vIFRoZSB2aWRlbyBlbGVtZW50IGhhc24ndCBzdGFydGVkIGxvYWRpbmcgdGhlIHNvdXJjZSB5ZXRcbiAgICAgIC8vIG9yIGRpZG4ndCBmaW5kIGEgc291cmNlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsLnJlYWR5U3RhdGUgPT09IDApIHtcbiAgICAgIC8vIE5ldHdvcmtTdGF0ZSBpcyBzZXQgc3luY2hyb25vdXNseSBCVVQgbG9hZHN0YXJ0IGlzIGZpcmVkIGF0IHRoZVxuICAgICAgLy8gZW5kIG9mIHRoZSBjdXJyZW50IHN0YWNrLCB1c3VhbGx5IGJlZm9yZSBzZXRJbnRlcnZhbChmbiwgMCkuXG4gICAgICAvLyBTbyBhdCB0aGlzIHBvaW50IHdlIGtub3cgbG9hZHN0YXJ0IG1heSBoYXZlIGFscmVhZHkgZmlyZWQgb3IgaXNcbiAgICAgIC8vIGFib3V0IHRvIGZpcmUsIGFuZCBlaXRoZXIgd2F5IHRoZSBwbGF5ZXIgaGFzbid0IHNlZW4gaXQgeWV0LlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBmaXJlIGxvYWRzdGFydCBwcmVtYXR1cmVseSBoZXJlIGFuZCBjYXVzZSBhXG4gICAgICAvLyBkb3VibGUgbG9hZHN0YXJ0IHNvIHdlJ2xsIHdhaXQgYW5kIHNlZSBpZiBpdCBoYXBwZW5zIGJldHdlZW4gbm93XG4gICAgICAvLyBhbmQgdGhlIG5leHQgbG9vcCwgYW5kIGZpcmUgaXQgaWYgbm90LlxuICAgICAgLy8gSE9XRVZFUiwgd2UgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBpdCBmaXJlcyBiZWZvcmUgbG9hZGVkbWV0YWRhdGFcbiAgICAgIC8vIHdoaWNoIGNvdWxkIGFsc28gaGFwcGVuIGJldHdlZW4gbm93IGFuZCB0aGUgbmV4dCBsb29wLCBzbyB3ZSdsbFxuICAgICAgLy8gd2F0Y2ggZm9yIHRoYXQgYWxzby5cbiAgICAgIHZhciBsb2Fkc3RhcnRGaXJlZCA9IGZhbHNlO1xuXG4gICAgICB2YXIgc2V0TG9hZHN0YXJ0RmlyZWQgPSBmdW5jdGlvbiBzZXRMb2Fkc3RhcnRGaXJlZCgpIHtcbiAgICAgICAgbG9hZHN0YXJ0RmlyZWQgPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5vbignbG9hZHN0YXJ0Jywgc2V0TG9hZHN0YXJ0RmlyZWQpO1xuXG4gICAgICB2YXIgdHJpZ2dlckxvYWRzdGFydCA9IGZ1bmN0aW9uIHRyaWdnZXJMb2Fkc3RhcnQoKSB7XG4gICAgICAgIC8vIFdlIGRpZCBtaXNzIHRoZSBvcmlnaW5hbCBsb2Fkc3RhcnQuIE1ha2Ugc3VyZSB0aGUgcGxheWVyXG4gICAgICAgIC8vIHNlZXMgbG9hZHN0YXJ0IGJlZm9yZSBsb2FkZWRtZXRhZGF0YVxuICAgICAgICBpZiAoIWxvYWRzdGFydEZpcmVkKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdsb2Fkc3RhcnQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5vbignbG9hZGVkbWV0YWRhdGEnLCB0cmlnZ2VyTG9hZHN0YXJ0KTtcbiAgICAgIHRoaXMucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9mZignbG9hZHN0YXJ0Jywgc2V0TG9hZHN0YXJ0RmlyZWQpO1xuICAgICAgICB0aGlzLm9mZignbG9hZGVkbWV0YWRhdGEnLCB0cmlnZ2VyTG9hZHN0YXJ0KTtcblxuICAgICAgICBpZiAoIWxvYWRzdGFydEZpcmVkKSB7XG4gICAgICAgICAgLy8gV2UgZGlkIG1pc3MgdGhlIG9yaWdpbmFsIG5hdGl2ZSBsb2Fkc3RhcnQuIEZpcmUgaXQgbm93LlxuICAgICAgICAgIHRoaXMudHJpZ2dlcignbG9hZHN0YXJ0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRnJvbSBoZXJlIG9uIHdlIGtub3cgdGhhdCBsb2Fkc3RhcnQgYWxyZWFkeSBmaXJlZCBhbmQgd2UgbWlzc2VkIGl0LlxuICAgIC8vIFRoZSBvdGhlciByZWFkeVN0YXRlIGV2ZW50cyBhcmVuJ3QgYXMgbXVjaCBvZiBhIHByb2JsZW0gaWYgd2UgZG91YmxlXG4gICAgLy8gdGhlbSwgc28gbm90IGdvaW5nIHRvIGdvIHRvIGFzIG11Y2ggdHJvdWJsZSBhcyBsb2Fkc3RhcnQgdG8gcHJldmVudFxuICAgIC8vIHRoYXQgdW5sZXNzIHdlIGZpbmQgcmVhc29uIHRvLlxuXG5cbiAgICB2YXIgZXZlbnRzVG9UcmlnZ2VyID0gWydsb2Fkc3RhcnQnXTsgLy8gbG9hZGVkbWV0YWRhdGE6IG5ld2x5IGVxdWFsIHRvIEhBVkVfTUVUQURBVEEgKDEpIG9yIGdyZWF0ZXJcblxuICAgIGV2ZW50c1RvVHJpZ2dlci5wdXNoKCdsb2FkZWRtZXRhZGF0YScpOyAvLyBsb2FkZWRkYXRhOiBuZXdseSBpbmNyZWFzZWQgdG8gSEFWRV9DVVJSRU5UX0RBVEEgKDIpIG9yIGdyZWF0ZXJcblxuICAgIGlmIChlbC5yZWFkeVN0YXRlID49IDIpIHtcbiAgICAgIGV2ZW50c1RvVHJpZ2dlci5wdXNoKCdsb2FkZWRkYXRhJyk7XG4gICAgfSAvLyBjYW5wbGF5OiBuZXdseSBpbmNyZWFzZWQgdG8gSEFWRV9GVVRVUkVfREFUQSAoMykgb3IgZ3JlYXRlclxuXG5cbiAgICBpZiAoZWwucmVhZHlTdGF0ZSA+PSAzKSB7XG4gICAgICBldmVudHNUb1RyaWdnZXIucHVzaCgnY2FucGxheScpO1xuICAgIH0gLy8gY2FucGxheXRocm91Z2g6IG5ld2x5IGVxdWFsIHRvIEhBVkVfRU5PVUdIX0RBVEEgKDQpXG5cblxuICAgIGlmIChlbC5yZWFkeVN0YXRlID49IDQpIHtcbiAgICAgIGV2ZW50c1RvVHJpZ2dlci5wdXNoKCdjYW5wbGF5dGhyb3VnaCcpO1xuICAgIH0gLy8gV2Ugc3RpbGwgbmVlZCB0byBnaXZlIHRoZSBwbGF5ZXIgdGltZSB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG5cblxuICAgIHRoaXMucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgZXZlbnRzVG9UcmlnZ2VyLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKHR5cGUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBjdXJyZW50IHRpbWUgZm9yIHRoZSBgSFRNTDVgIHRlY2guXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzXG4gICAqICAgICAgICBTZXQgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgbWVkaWEgdG8gdGhpcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbiBzZXRDdXJyZW50VGltZShzZWNvbmRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZWxfLmN1cnJlbnRUaW1lID0gc2Vjb25kcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2coZSwgJ1ZpZGVvIGlzIG5vdCByZWFkeS4gKFZpZGVvLmpzKScpOyAvLyB0aGlzLndhcm5pbmcoVmlkZW9KUy53YXJuaW5ncy52aWRlb05vdFJlYWR5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkdXJhdGlvbiBvZiB0aGUgSFRNTDUgbWVkaWEgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aGUgbWVkaWEgb3IgMCBpZiB0aGVyZSBpcyBubyBkdXJhdGlvbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZHVyYXRpb24gPSBmdW5jdGlvbiBkdXJhdGlvbigpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIC8vIEFuZHJvaWQgQ2hyb21lIHdpbGwgcmVwb3J0IGR1cmF0aW9uIGFzIEluZmluaXR5IGZvciBWT0QgSExTIHVudGlsIGFmdGVyXG4gICAgLy8gcGxheWJhY2sgaGFzIHN0YXJ0ZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBsaXZlIGRpc3BsYXkgZXJyb25lb3VzbHkuXG4gICAgLy8gUmV0dXJuIE5hTiBpZiBwbGF5YmFjayBoYXMgbm90IHN0YXJ0ZWQgYW5kIHRyaWdnZXIgYSBkdXJhdGlvbnVwZGF0ZSBvbmNlXG4gICAgLy8gdGhlIGR1cmF0aW9uIGNhbiBiZSByZWxpYWJseSBrbm93bi5cbiAgICBpZiAodGhpcy5lbF8uZHVyYXRpb24gPT09IEluZmluaXR5ICYmIElTX0FORFJPSUQgJiYgSVNfQ0hST01FICYmIHRoaXMuZWxfLmN1cnJlbnRUaW1lID09PSAwKSB7XG4gICAgICAvLyBXYWl0IGZvciB0aGUgZmlyc3QgYHRpbWV1cGRhdGVgIHdpdGggY3VycmVudFRpbWUgPiAwIC0gdGhlcmUgbWF5IGJlXG4gICAgICAvLyBzZXZlcmFsIHdpdGggMFxuICAgICAgdmFyIGNoZWNrUHJvZ3Jlc3MgPSBmdW5jdGlvbiBjaGVja1Byb2dyZXNzKCkge1xuICAgICAgICBpZiAoX3RoaXM1LmVsXy5jdXJyZW50VGltZSA+IDApIHtcbiAgICAgICAgICAvLyBUcmlnZ2VyIGR1cmF0aW9uY2hhbmdlIGZvciBnZW51aW5lbHkgbGl2ZSB2aWRlb1xuICAgICAgICAgIGlmIChfdGhpczUuZWxfLmR1cmF0aW9uID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgX3RoaXM1LnRyaWdnZXIoJ2R1cmF0aW9uY2hhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXM1Lm9mZigndGltZXVwZGF0ZScsIGNoZWNrUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uKCd0aW1ldXBkYXRlJywgY2hlY2tQcm9ncmVzcyk7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVsXy5kdXJhdGlvbiB8fCBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgSFRNTDUgbWVkaWEgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgSFRNTDUgbWVkaWEgZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2lkdGggPSBmdW5jdGlvbiB3aWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbF8ub2Zmc2V0V2lkdGg7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIEhUTUw1IG1lZGlhIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgaGVpZ2h0IG9mIHRoZSBIVE1MNSBtZWRpYSBlbGVtZW50LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oZWlnaHQgPSBmdW5jdGlvbiBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxfLm9mZnNldEhlaWdodDtcbiAgfVxuICAvKipcbiAgICogUHJveHkgaU9TIGB3ZWJraXRiZWdpbmZ1bGxzY3JlZW5gIGFuZCBgd2Via2l0ZW5kZnVsbHNjcmVlbmAgaW50b1xuICAgKiBgZnVsbHNjcmVlbmNoYW5nZWAgZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBmaXJlcyBmdWxsc2NyZWVuY2hhbmdlXG4gICAqIEBsaXN0ZW5zIHdlYmtpdGVuZGZ1bGxzY3JlZW5cbiAgICogQGxpc3RlbnMgd2Via2l0YmVnaW5mdWxsc2NyZWVuXG4gICAqIEBsaXN0ZW5zIHdlYmtpdGJlZ2luZnVsbHNjcmVlblxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wcm94eVdlYmtpdEZ1bGxzY3JlZW5fID0gZnVuY3Rpb24gcHJveHlXZWJraXRGdWxsc2NyZWVuXygpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIGlmICghKCd3ZWJraXREaXNwbGF5aW5nRnVsbHNjcmVlbicgaW4gdGhpcy5lbF8pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVuZEZuID0gZnVuY3Rpb24gZW5kRm4oKSB7XG4gICAgICB0aGlzLnRyaWdnZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB7XG4gICAgICAgIGlzRnVsbHNjcmVlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgYmVnaW5GbiA9IGZ1bmN0aW9uIGJlZ2luRm4oKSB7XG4gICAgICBpZiAoJ3dlYmtpdFByZXNlbnRhdGlvbk1vZGUnIGluIHRoaXMuZWxfICYmIHRoaXMuZWxfLndlYmtpdFByZXNlbnRhdGlvbk1vZGUgIT09ICdwaWN0dXJlLWluLXBpY3R1cmUnKSB7XG4gICAgICAgIHRoaXMub25lKCd3ZWJraXRlbmRmdWxsc2NyZWVuJywgZW5kRm4pO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB7XG4gICAgICAgICAgaXNGdWxsc2NyZWVuOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm9uKCd3ZWJraXRiZWdpbmZ1bGxzY3JlZW4nLCBiZWdpbkZuKTtcbiAgICB0aGlzLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM2Lm9mZignd2Via2l0YmVnaW5mdWxsc2NyZWVuJywgYmVnaW5Gbik7XG5cbiAgICAgIF90aGlzNi5vZmYoJ3dlYmtpdGVuZGZ1bGxzY3JlZW4nLCBlbmRGbik7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGZ1bGxzY3JlZW4gaXMgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50IHBsYXliYWNrIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICAtIFRydWUgaWYgZnVsbHNjcmVlbiBpcyBzdXBwb3J0ZWQuXG4gICAqICAgICAgICAgLSBGYWxzZSBpZiBmdWxsc2NyZWVuIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1cHBvcnRzRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIHN1cHBvcnRzRnVsbFNjcmVlbigpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZWxfLndlYmtpdEVudGVyRnVsbFNjcmVlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHVzZXJBZ2VudCA9IHdpbmRvdyQxLm5hdmlnYXRvciAmJiB3aW5kb3ckMS5uYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnOyAvLyBTZWVtcyB0byBiZSBicm9rZW4gaW4gQ2hyb21pdW0vQ2hyb21lICYmIFNhZmFyaSBpbiBMZW9wYXJkXG5cbiAgICAgIGlmICgvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpIHx8ICEvQ2hyb21lfE1hYyBPUyBYIDEwLjUvLnRlc3QodXNlckFnZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhhdCB0aGUgYEhUTUw1YCBUZWNoIGVudGVyIGZ1bGxzY3JlZW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVudGVyRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIGVudGVyRnVsbFNjcmVlbigpIHtcbiAgICB2YXIgdmlkZW8gPSB0aGlzLmVsXztcblxuICAgIGlmICh2aWRlby5wYXVzZWQgJiYgdmlkZW8ubmV0d29ya1N0YXRlIDw9IHZpZGVvLkhBVkVfTUVUQURBVEEpIHtcbiAgICAgIC8vIGF0dGVtcHQgdG8gcHJpbWUgdGhlIHZpZGVvIGVsZW1lbnQgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3NcbiAgICAgIC8vIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5IG9uIHRoZSBkZXNrdG9wIGJ1dCBzaG91bGRuJ3QgaHVydFxuICAgICAgdGhpcy5lbF8ucGxheSgpOyAvLyBwbGF5aW5nIGFuZCBwYXVzaW5nIHN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIGZ1bGxzY3JlZW5cbiAgICAgIC8vIGNhbiBnZXQgaU9TIH42LjEgZGV2aWNlcyBpbnRvIGEgcGxheS9wYXVzZSBsb29wXG5cbiAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZpZGVvLnBhdXNlKCk7XG4gICAgICAgIHZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCB0aGF0IHRoZSBgSFRNTDVgIFRlY2ggZXhpdCBmdWxsc2NyZWVuLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leGl0RnVsbFNjcmVlbiA9IGZ1bmN0aW9uIGV4aXRGdWxsU2NyZWVuKCkge1xuICAgIHRoaXMuZWxfLndlYmtpdEV4aXRGdWxsU2NyZWVuKCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZsb2F0aW5nIHZpZGVvIHdpbmRvdyBhbHdheXMgb24gdG9wIG9mIG90aGVyIHdpbmRvd3Mgc28gdGhhdCB1c2VycyBtYXlcbiAgICogY29udGludWUgY29uc3VtaW5nIG1lZGlhIHdoaWxlIHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBjb250ZW50IHNpdGVzLCBvclxuICAgKiBhcHBsaWNhdGlvbnMgb24gdGhlaXIgZGV2aWNlLlxuICAgKlxuICAgKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3dpY2cuZ2l0aHViLmlvL3BpY3R1cmUtaW4tcGljdHVyZX1cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICogICAgICAgICBBIHByb21pc2Ugd2l0aCBhIFBpY3R1cmUtaW4tUGljdHVyZSB3aW5kb3cuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlID0gZnVuY3Rpb24gcmVxdWVzdFBpY3R1cmVJblBpY3R1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxfLnJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIEEgZ2V0dGVyL3NldHRlciBmb3IgdGhlIGBIdG1sNWAgVGVjaCdzIHNvdXJjZSBvYmplY3QuXG4gICAqID4gTm90ZTogUGxlYXNlIHVzZSB7QGxpbmsgSHRtbDUjc2V0U291cmNlfVxuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fSBbc3JjXVxuICAgKiAgICAgICAgVGhlIHNvdXJjZSBvYmplY3QgeW91IHdhbnQgdG8gc2V0IG9uIHRoZSBgSFRNTDVgIHRlY2hzIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge1RlY2h+U291cmNlT2JqZWN0fHVuZGVmaW5lZH1cbiAgICogICAgICAgICAtIFRoZSBjdXJyZW50IHNvdXJjZSBvYmplY3Qgd2hlbiBhIHNvdXJjZSBpcyBub3QgcGFzc2VkIGluLlxuICAgKiAgICAgICAgIC0gdW5kZWZpbmVkIHdoZW4gc2V0dGluZ1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSB2ZXJzaW9uIDUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNyYyA9IGZ1bmN0aW9uIHNyYyhfc3JjKSB7XG4gICAgaWYgKF9zcmMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxfLnNyYztcbiAgICB9IC8vIFNldHRpbmcgc3JjIHRocm91Z2ggYHNyY2AgaW5zdGVhZCBvZiBgc2V0U3JjYCB3aWxsIGJlIGRlcHJlY2F0ZWRcblxuXG4gICAgdGhpcy5zZXRTcmMoX3NyYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSB0ZWNoIGJ5IHJlbW92aW5nIGFsbCBzb3VyY2VzIGFuZCB0aGVuIGNhbGxpbmdcbiAgICoge0BsaW5rIEh0bWw1LnJlc2V0TWVkaWFFbGVtZW50fS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBIdG1sNS5yZXNldE1lZGlhRWxlbWVudCh0aGlzLmVsXyk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzb3VyY2Ugb24gdGhlIGBIVE1MNWAgVGVjaC4gRmFsbHMgYmFjayB0byByZXR1cm5pbmcgdGhlIHNvdXJjZSBmcm9tXG4gICAqIHRoZSBIVE1MNSBtZWRpYSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtUZWNoflNvdXJjZU9iamVjdH1cbiAgICogICAgICAgICBUaGUgY3VycmVudCBzb3VyY2Ugb2JqZWN0IGZyb20gdGhlIEhUTUw1IHRlY2guIFdpdGggYSBmYWxsYmFjayB0byB0aGVcbiAgICogICAgICAgICBlbGVtZW50cyBzb3VyY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmN1cnJlbnRTcmMgPSBmdW5jdGlvbiBjdXJyZW50U3JjKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRTb3VyY2VfKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50U291cmNlXy5zcmM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZWxfLmN1cnJlbnRTcmM7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBjb250cm9scyBhdHRyaWJ1dGUgZm9yIHRoZSBIVE1MNSBtZWRpYSBFbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gICAqICAgICAgICBWYWx1ZSB0byBzZXQgdGhlIGNvbnRyb2xzIGF0dHJpYnV0ZSB0b1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRDb250cm9scyA9IGZ1bmN0aW9uIHNldENvbnRyb2xzKHZhbCkge1xuICAgIHRoaXMuZWxfLmNvbnRyb2xzID0gISF2YWw7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJucyBhIHJlbW90ZSB7QGxpbmsgVGV4dFRyYWNrfSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kXG4gICAqICAgICAgICBgVGV4dFRyYWNrYCBraW5kIChzdWJ0aXRsZXMsIGNhcHRpb25zLCBkZXNjcmlwdGlvbnMsIGNoYXB0ZXJzLCBvciBtZXRhZGF0YSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF1cbiAgICogICAgICAgIExhYmVsIHRvIGlkZW50aWZ5IHRoZSB0ZXh0IHRyYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFuZ3VhZ2VdXG4gICAqICAgICAgICBUd28gbGV0dGVyIGxhbmd1YWdlIGFiYnJldmlhdGlvblxuICAgKlxuICAgKiBAcmV0dXJuIHtUZXh0VHJhY2t9XG4gICAqICAgICAgICAgVGhlIFRleHRUcmFjayB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkVGV4dFRyYWNrID0gZnVuY3Rpb24gYWRkVGV4dFRyYWNrKGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkge1xuICAgIGlmICghdGhpcy5mZWF0dXJlc05hdGl2ZVRleHRUcmFja3MpIHtcbiAgICAgIHJldHVybiBfVGVjaC5wcm90b3R5cGUuYWRkVGV4dFRyYWNrLmNhbGwodGhpcywga2luZCwgbGFiZWwsIGxhbmd1YWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbF8uYWRkVGV4dFRyYWNrKGtpbmQsIGxhYmVsLCBsYW5ndWFnZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgZWl0aGVyIG5hdGl2ZSBUZXh0VHJhY2sgb3IgYW4gZW11bGF0ZWQgVGV4dFRyYWNrIGRlcGVuZGluZ1xuICAgKiBvbiB0aGUgdmFsdWUgb2YgYGZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrc2BcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogICAgICAgIFRoZSBvYmplY3Qgc2hvdWxkIGNvbnRhaW4gdGhlIG9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgVGV4dFRyYWNrIHdpdGguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5raW5kXVxuICAgKiAgICAgICAgYFRleHRUcmFja2Aga2luZCAoc3VidGl0bGVzLCBjYXB0aW9ucywgZGVzY3JpcHRpb25zLCBjaGFwdGVycywgb3IgbWV0YWRhdGEpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFiZWxdXG4gICAqICAgICAgICBMYWJlbCB0byBpZGVudGlmeSB0aGUgdGV4dCB0cmFja1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFuZ3VhZ2VdXG4gICAqICAgICAgICBUd28gbGV0dGVyIGxhbmd1YWdlIGFiYnJldmlhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kZWZhdWx0XVxuICAgKiAgICAgICAgRGVmYXVsdCB0aGlzIHRyYWNrIHRvIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuaWRdXG4gICAqICAgICAgICBUaGUgaW50ZXJuYWwgaWQgdG8gYXNzaWduIHRoaXMgdHJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zcmNdXG4gICAqICAgICAgICBBIHNvdXJjZSB1cmwgZm9yIHRoZSB0cmFjay5cbiAgICpcbiAgICogQHJldHVybiB7SFRNTFRyYWNrRWxlbWVudH1cbiAgICogICAgICAgICBUaGUgdHJhY2sgZWxlbWVudCB0aGF0IGdldHMgY3JlYXRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JlYXRlUmVtb3RlVGV4dFRyYWNrID0gZnVuY3Rpb24gY3JlYXRlUmVtb3RlVGV4dFRyYWNrKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZmVhdHVyZXNOYXRpdmVUZXh0VHJhY2tzKSB7XG4gICAgICByZXR1cm4gX1RlY2gucHJvdG90eXBlLmNyZWF0ZVJlbW90ZVRleHRUcmFjay5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBodG1sVHJhY2tFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHJhY2snKTtcblxuICAgIGlmIChvcHRpb25zLmtpbmQpIHtcbiAgICAgIGh0bWxUcmFja0VsZW1lbnQua2luZCA9IG9wdGlvbnMua2luZDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sYWJlbCkge1xuICAgICAgaHRtbFRyYWNrRWxlbWVudC5sYWJlbCA9IG9wdGlvbnMubGFiZWw7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2UgfHwgb3B0aW9ucy5zcmNsYW5nKSB7XG4gICAgICBodG1sVHJhY2tFbGVtZW50LnNyY2xhbmcgPSBvcHRpb25zLmxhbmd1YWdlIHx8IG9wdGlvbnMuc3JjbGFuZztcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uc1tcImRlZmF1bHRcIl0pIHtcbiAgICAgIGh0bWxUcmFja0VsZW1lbnRbXCJkZWZhdWx0XCJdID0gb3B0aW9uc1tcImRlZmF1bHRcIl07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWQpIHtcbiAgICAgIGh0bWxUcmFja0VsZW1lbnQuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNyYykge1xuICAgICAgaHRtbFRyYWNrRWxlbWVudC5zcmMgPSBvcHRpb25zLnNyYztcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbFRyYWNrRWxlbWVudDtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlbW90ZSB0ZXh0IHRyYWNrIG9iamVjdCBhbmQgcmV0dXJucyBhbiBodG1sIHRyYWNrIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvYmplY3Qgc2hvdWxkIGNvbnRhaW4gdmFsdWVzIGZvclxuICAgKiBraW5kLCBsYW5ndWFnZSwgbGFiZWwsIGFuZCBzcmMgKGxvY2F0aW9uIG9mIHRoZSBXZWJWVFQgZmlsZSlcbiAgICogQHBhcmFtIHtib29sZWFufSBbbWFudWFsQ2xlYW51cD10cnVlXSBpZiBzZXQgdG8gZmFsc2UsIHRoZSBUZXh0VHJhY2sgd2lsbCBiZVxuICAgKiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgdmlkZW8gZWxlbWVudCB3aGVuZXZlciB0aGUgc291cmNlIGNoYW5nZXNcbiAgICogQHJldHVybiB7SFRNTFRyYWNrRWxlbWVudH0gQW4gSHRtbCBUcmFjayBFbGVtZW50LlxuICAgKiBUaGlzIGNhbiBiZSBhbiBlbXVsYXRlZCB7QGxpbmsgSFRNTFRyYWNrRWxlbWVudH0gb3IgYSBuYXRpdmUgb25lLlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgXCJtYW51YWxDbGVhbnVwXCIgcGFyYW1ldGVyIHdpbGwgZGVmYXVsdFxuICAgKiB0byBcImZhbHNlXCIgaW4gdXBjb21pbmcgdmVyc2lvbnMgb2YgVmlkZW8uanNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkUmVtb3RlVGV4dFRyYWNrID0gZnVuY3Rpb24gYWRkUmVtb3RlVGV4dFRyYWNrKG9wdGlvbnMsIG1hbnVhbENsZWFudXApIHtcbiAgICB2YXIgaHRtbFRyYWNrRWxlbWVudCA9IF9UZWNoLnByb3RvdHlwZS5hZGRSZW1vdGVUZXh0VHJhY2suY2FsbCh0aGlzLCBvcHRpb25zLCBtYW51YWxDbGVhbnVwKTtcblxuICAgIGlmICh0aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykge1xuICAgICAgdGhpcy5lbCgpLmFwcGVuZENoaWxkKGh0bWxUcmFja0VsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sVHJhY2tFbGVtZW50O1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgcmVtb3RlIGBUZXh0VHJhY2tgIGZyb20gYFRleHRUcmFja0xpc3RgIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRUcmFja30gdHJhY2tcbiAgICogICAgICAgIGBUZXh0VHJhY2tgIG9iamVjdCB0byByZW1vdmVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVtb3ZlUmVtb3RlVGV4dFRyYWNrID0gZnVuY3Rpb24gcmVtb3ZlUmVtb3RlVGV4dFRyYWNrKHRyYWNrKSB7XG4gICAgX1RlY2gucHJvdG90eXBlLnJlbW92ZVJlbW90ZVRleHRUcmFjay5jYWxsKHRoaXMsIHRyYWNrKTtcblxuICAgIGlmICh0aGlzLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcykge1xuICAgICAgdmFyIHRyYWNrcyA9IHRoaXMuJCQoJ3RyYWNrJyk7XG4gICAgICB2YXIgaSA9IHRyYWNrcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHRyYWNrID09PSB0cmFja3NbaV0gfHwgdHJhY2sgPT09IHRyYWNrc1tpXS50cmFjaykge1xuICAgICAgICAgIHRoaXMuZWwoKS5yZW1vdmVDaGlsZCh0cmFja3NbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIGF2YWlsYWJsZSBtZWRpYSBwbGF5YmFjayBxdWFsaXR5IG1ldHJpY3MgYXMgc3BlY2lmaWVkIGJ5IHRoZSBXM0MncyBNZWRpYVxuICAgKiBQbGF5YmFjayBRdWFsaXR5IEFQSS5cbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9tZWRpYS1wbGF5YmFjay1xdWFsaXR5fVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgQW4gb2JqZWN0IHdpdGggc3VwcG9ydGVkIG1lZGlhIHBsYXliYWNrIHF1YWxpdHkgbWV0cmljc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uIGdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5lbCgpLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbCgpLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCk7XG4gICAgfVxuXG4gICAgdmFyIHZpZGVvUGxheWJhY2tRdWFsaXR5ID0ge307XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuZWwoKS53ZWJraXREcm9wcGVkRnJhbWVDb3VudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMuZWwoKS53ZWJraXREZWNvZGVkRnJhbWVDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZpZGVvUGxheWJhY2tRdWFsaXR5LmRyb3BwZWRWaWRlb0ZyYW1lcyA9IHRoaXMuZWwoKS53ZWJraXREcm9wcGVkRnJhbWVDb3VudDtcbiAgICAgIHZpZGVvUGxheWJhY2tRdWFsaXR5LnRvdGFsVmlkZW9GcmFtZXMgPSB0aGlzLmVsKCkud2Via2l0RGVjb2RlZEZyYW1lQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdyQxLnBlcmZvcm1hbmNlICYmIHR5cGVvZiB3aW5kb3ckMS5wZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZpZGVvUGxheWJhY2tRdWFsaXR5LmNyZWF0aW9uVGltZSA9IHdpbmRvdyQxLnBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH0gZWxzZSBpZiAod2luZG93JDEucGVyZm9ybWFuY2UgJiYgd2luZG93JDEucGVyZm9ybWFuY2UudGltaW5nICYmIHR5cGVvZiB3aW5kb3ckMS5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJykge1xuICAgICAgdmlkZW9QbGF5YmFja1F1YWxpdHkuY3JlYXRpb25UaW1lID0gd2luZG93JDEuRGF0ZS5ub3coKSAtIHdpbmRvdyQxLnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICB9O1xuXG4gIHJldHVybiBIdG1sNTtcbn0oVGVjaCk7XG4vKiBIVE1MNSBTdXBwb3J0IFRlc3RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmlmIChpc1JlYWwoKSkge1xuICAvKipcbiAgICogRWxlbWVudCBmb3IgdGVzdGluZyBicm93c2VyIEhUTUw1IG1lZGlhIGNhcGFiaWxpdGllc1xuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudH1cbiAgICogQGNvbnN0YW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBIdG1sNS5URVNUX1ZJRCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gIHZhciB0cmFjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyYWNrJyk7XG4gIHRyYWNrLmtpbmQgPSAnY2FwdGlvbnMnO1xuICB0cmFjay5zcmNsYW5nID0gJ2VuJztcbiAgdHJhY2subGFiZWwgPSAnRW5nbGlzaCc7XG4gIEh0bWw1LlRFU1RfVklELmFwcGVuZENoaWxkKHRyYWNrKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgSFRNTDUgbWVkaWEgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci9kZXZpY2UuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUcnVlIGlmIEhUTUw1IG1lZGlhIGlzIHN1cHBvcnRlZC5cbiAqICAgICAgICAgLSBGYWxzZSBpZiBIVE1MNSBtZWRpYSBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5cblxuSHRtbDUuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIElFIHdpdGggbm8gTWVkaWEgUGxheWVyIGlzIGEgTElBUiEgKCM5ODQpXG4gIHRyeSB7XG4gICAgSHRtbDUuVEVTVF9WSUQudm9sdW1lID0gMC41O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICEhKEh0bWw1LlRFU1RfVklEICYmIEh0bWw1LlRFU1RfVklELmNhblBsYXlUeXBlKTtcbn07XG4vKipcbiAqIENoZWNrIGlmIHRoZSB0ZWNoIGNhbiBzdXBwb3J0IHRoZSBnaXZlbiB0eXBlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqICAgICAgICBUaGUgbWltZXR5cGUgdG8gY2hlY2tcbiAqIEByZXR1cm4ge3N0cmluZ30gJ3Byb2JhYmx5JywgJ21heWJlJywgb3IgJycgKGVtcHR5IHN0cmluZylcbiAqL1xuXG5cbkh0bWw1LmNhblBsYXlUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgcmV0dXJuIEh0bWw1LlRFU1RfVklELmNhblBsYXlUeXBlKHR5cGUpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRlY2ggY2FuIHN1cHBvcnQgdGhlIGdpdmVuIHNvdXJjZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNPYmpcbiAqICAgICAgICBUaGUgc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHRlY2hcbiAqIEByZXR1cm4ge3N0cmluZ30gJ3Byb2JhYmx5JywgJ21heWJlJywgb3IgJycgKGVtcHR5IHN0cmluZylcbiAqL1xuXG5cbkh0bWw1LmNhblBsYXlTb3VyY2UgPSBmdW5jdGlvbiAoc3JjT2JqLCBvcHRpb25zKSB7XG4gIHJldHVybiBIdG1sNS5jYW5QbGF5VHlwZShzcmNPYmoudHlwZSk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgdm9sdW1lIGNhbiBiZSBjaGFuZ2VkIGluIHRoaXMgYnJvd3Nlci9kZXZpY2UuXG4gKiBWb2x1bWUgY2Fubm90IGJlIGNoYW5nZWQgaW4gYSBsb3Qgb2YgbW9iaWxlIGRldmljZXMuXG4gKiBTcGVjaWZpY2FsbHksIGl0IGNhbid0IGJlIGNoYW5nZWQgZnJvbSAxIG9uIGlPUy5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICAtIFRydWUgaWYgdm9sdW1lIGNhbiBiZSBjb250cm9sbGVkXG4gKiAgICAgICAgIC0gRmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5IdG1sNS5jYW5Db250cm9sVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBJRSB3aWxsIGVycm9yIGlmIFdpbmRvd3MgTWVkaWEgUGxheWVyIG5vdCBpbnN0YWxsZWQgIzMzMTVcbiAgdHJ5IHtcbiAgICB2YXIgdm9sdW1lID0gSHRtbDUuVEVTVF9WSUQudm9sdW1lO1xuICAgIEh0bWw1LlRFU1RfVklELnZvbHVtZSA9IHZvbHVtZSAvIDIgKyAwLjE7XG4gICAgcmV0dXJuIHZvbHVtZSAhPT0gSHRtbDUuVEVTVF9WSUQudm9sdW1lO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgdm9sdW1lIGNhbiBiZSBtdXRlZCBpbiB0aGlzIGJyb3dzZXIvZGV2aWNlLlxuICogU29tZSBkZXZpY2VzLCBlLmcuIGlPUywgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdm9sdW1lXG4gKiBidXQgcGVybWl0cyBtdXRpbmcvdW5tdXRpbmcuXG4gKlxuICogQHJldHVybiB7Ym9sZWFufVxuICogICAgICAtIFRydWUgaWYgdm9sdW1lIGNhbiBiZSBtdXRlZFxuICogICAgICAtIEZhbHNlIG90aGVyd2lzZVxuICovXG5cblxuSHRtbDUuY2FuTXV0ZVZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbXV0ZWQgPSBIdG1sNS5URVNUX1ZJRC5tdXRlZDsgLy8gaW4gc29tZSB2ZXJzaW9ucyBvZiBpT1MgbXV0ZWQgcHJvcGVydHkgZG9lc24ndCBhbHdheXNcbiAgICAvLyB3b3JrLCBzbyB3ZSB3YW50IHRvIHNldCBib3RoIHByb3BlcnR5IGFuZCBhdHRyaWJ1dGVcblxuICAgIEh0bWw1LlRFU1RfVklELm11dGVkID0gIW11dGVkO1xuXG4gICAgaWYgKEh0bWw1LlRFU1RfVklELm11dGVkKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoSHRtbDUuVEVTVF9WSUQsICdtdXRlZCcsICdtdXRlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoSHRtbDUuVEVTVF9WSUQsICdtdXRlZCcsICdtdXRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBtdXRlZCAhPT0gSHRtbDUuVEVTVF9WSUQubXV0ZWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwbGF5YmFjayByYXRlIGNhbiBiZSBjaGFuZ2VkIGluIHRoaXMgYnJvd3Nlci9kZXZpY2UuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUcnVlIGlmIHBsYXliYWNrIHJhdGUgY2FuIGJlIGNvbnRyb2xsZWRcbiAqICAgICAgICAgLSBGYWxzZSBvdGhlcndpc2VcbiAqL1xuXG5cbkh0bWw1LmNhbkNvbnRyb2xQbGF5YmFja1JhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFBsYXliYWNrIHJhdGUgQVBJIGlzIGltcGxlbWVudGVkIGluIEFuZHJvaWQgQ2hyb21lLCBidXQgZG9lc24ndCBkbyBhbnl0aGluZ1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9pc3N1ZXMvMzE4MFxuICBpZiAoSVNfQU5EUk9JRCAmJiBJU19DSFJPTUUgJiYgQ0hST01FX1ZFUlNJT04gPCA1OCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJRSB3aWxsIGVycm9yIGlmIFdpbmRvd3MgTWVkaWEgUGxheWVyIG5vdCBpbnN0YWxsZWQgIzMzMTVcblxuXG4gIHRyeSB7XG4gICAgdmFyIHBsYXliYWNrUmF0ZSA9IEh0bWw1LlRFU1RfVklELnBsYXliYWNrUmF0ZTtcbiAgICBIdG1sNS5URVNUX1ZJRC5wbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGUgLyAyICsgMC4xO1xuICAgIHJldHVybiBwbGF5YmFja1JhdGUgIT09IEh0bWw1LlRFU1RfVklELnBsYXliYWNrUmF0ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbi8qKlxuICogQ2hlY2sgaWYgd2UgY2FuIG92ZXJyaWRlIGEgdmlkZW8vYXVkaW8gZWxlbWVudHMgYXR0cmlidXRlcywgd2l0aFxuICogT2JqZWN0LmRlZmluZVByb3BlcnR5LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIC0gVHJ1ZSBpZiBidWlsdGluIGF0dHJpYnV0ZXMgY2FuIGJlIG92ZXJyaWRkZW5cbiAqICAgICAgICAgLSBGYWxzZSBvdGhlcndpc2VcbiAqL1xuXG5cbkh0bWw1LmNhbk92ZXJyaWRlQXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaWYgd2UgY2Fubm90IG92ZXJ3cml0ZSB0aGUgc3JjL2lubmVySFRNTCBwcm9wZXJ0eSwgdGhlcmUgaXMgbm8gc3VwcG9ydFxuICAvLyBpT1MgNyBzYWZhcmkgZm9yIGluc3RhbmNlIGNhbm5vdCBkbyB0aGlzLlxuICB0cnkge1xuICAgIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyksICdzcmMnLCB7XG4gICAgICBnZXQ6IG5vb3AsXG4gICAgICBzZXQ6IG5vb3BcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKSwgJ3NyYycsIHtcbiAgICAgIGdldDogbm9vcCxcbiAgICAgIHNldDogbm9vcFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLCAnaW5uZXJIVE1MJywge1xuICAgICAgZ2V0OiBub29wLFxuICAgICAgc2V0OiBub29wXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyksICdpbm5lckhUTUwnLCB7XG4gICAgICBnZXQ6IG5vb3AsXG4gICAgICBzZXQ6IG5vb3BcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQ2hlY2sgdG8gc2VlIGlmIG5hdGl2ZSBgVGV4dFRyYWNrYHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIvZGV2aWNlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIC0gVHJ1ZSBpZiBuYXRpdmUgYFRleHRUcmFja2BzIGFyZSBzdXBwb3J0ZWQuXG4gKiAgICAgICAgIC0gRmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5IdG1sNS5zdXBwb3J0c05hdGl2ZVRleHRUcmFja3MgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBJU19BTllfU0FGQVJJIHx8IElTX0lPUyAmJiBJU19DSFJPTUU7XG59O1xuLyoqXG4gKiBDaGVjayB0byBzZWUgaWYgbmF0aXZlIGBWaWRlb1RyYWNrYHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIvZGV2aWNlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAtIFRydWUgaWYgbmF0aXZlIGBWaWRlb1RyYWNrYHMgYXJlIHN1cHBvcnRlZC5cbiAqICAgICAgICAtIEZhbHNlIG90aGVyd2lzZVxuICovXG5cblxuSHRtbDUuc3VwcG9ydHNOYXRpdmVWaWRlb1RyYWNrcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEhKEh0bWw1LlRFU1RfVklEICYmIEh0bWw1LlRFU1RfVklELnZpZGVvVHJhY2tzKTtcbn07XG4vKipcbiAqIENoZWNrIHRvIHNlZSBpZiBuYXRpdmUgYEF1ZGlvVHJhY2tgcyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci9kZXZpY2VcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgIC0gVHJ1ZSBpZiBuYXRpdmUgYEF1ZGlvVHJhY2tgcyBhcmUgc3VwcG9ydGVkLlxuICogICAgICAgIC0gRmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5IdG1sNS5zdXBwb3J0c05hdGl2ZUF1ZGlvVHJhY2tzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISEoSHRtbDUuVEVTVF9WSUQgJiYgSHRtbDUuVEVTVF9WSUQuYXVkaW9UcmFja3MpO1xufTtcbi8qKlxuICogQW4gYXJyYXkgb2YgZXZlbnRzIGF2YWlsYWJsZSBvbiB0aGUgSHRtbDUgdGVjaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0FycmF5fVxuICovXG5cblxuSHRtbDUuRXZlbnRzID0gWydsb2Fkc3RhcnQnLCAnc3VzcGVuZCcsICdhYm9ydCcsICdlcnJvcicsICdlbXB0aWVkJywgJ3N0YWxsZWQnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZGVkZGF0YScsICdjYW5wbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ3BsYXlpbmcnLCAnd2FpdGluZycsICdzZWVraW5nJywgJ3NlZWtlZCcsICdlbmRlZCcsICdkdXJhdGlvbmNoYW5nZScsICd0aW1ldXBkYXRlJywgJ3Byb2dyZXNzJywgJ3BsYXknLCAncGF1c2UnLCAncmF0ZWNoYW5nZScsICdyZXNpemUnLCAndm9sdW1lY2hhbmdlJ107XG4vKipcbiAqIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBgVGVjaGAgc3VwcG9ydHMgdm9sdW1lIGNvbnRyb2wuXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdCB7QGxpbmsgSHRtbDUuY2FuQ29udHJvbFZvbHVtZX1cbiAqL1xuXG5IdG1sNS5wcm90b3R5cGUuZmVhdHVyZXNWb2x1bWVDb250cm9sID0gSHRtbDUuY2FuQ29udHJvbFZvbHVtZSgpO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIG11dGluZyB2b2x1bWUuXG4gKlxuICogQHR5cGUge2JvbGVhbn1cbiAqIEBkZWZhdWx0IHtAbGluayBIdG1sNS5jYW5NdXRlVm9sdW1lfVxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc011dGVDb250cm9sID0gSHRtbDUuY2FuTXV0ZVZvbHVtZSgpO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFRlY2hgIHN1cHBvcnRzIGNoYW5naW5nIHRoZSBzcGVlZCBhdCB3aGljaCB0aGUgbWVkaWFcbiAqIHBsYXlzLiBFeGFtcGxlczpcbiAqICAgLSBTZXQgcGxheWVyIHRvIHBsYXkgMnggKHR3aWNlKSBhcyBmYXN0XG4gKiAgIC0gU2V0IHBsYXllciB0byBwbGF5IDAuNXggKGhhbGYpIGFzIGZhc3RcbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0IHtAbGluayBIdG1sNS5jYW5Db250cm9sUGxheWJhY2tSYXRlfVxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc1BsYXliYWNrUmF0ZSA9IEh0bWw1LmNhbkNvbnRyb2xQbGF5YmFja1JhdGUoKTtcbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBUZWNoYCBzdXBwb3J0cyB0aGUgYHNvdXJjZXNldGAgZXZlbnQuXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdFxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc1NvdXJjZXNldCA9IEh0bWw1LmNhbk92ZXJyaWRlQXR0cmlidXRlcygpO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhUTUw1YCB0ZWNoIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgbWVkaWEgZWxlbWVudFxuICogbW92aW5nIGluIHRoZSBET00uIGlPUyBicmVha3MgaWYgeW91IG1vdmUgdGhlIG1lZGlhIGVsZW1lbnQsIHNvIHRoaXMgaXMgc2V0IHRoaXMgdG9cbiAqIGZhbHNlIHRoZXJlLiBFdmVyeXdoZXJlIGVsc2UgdGhpcyBzaG91bGQgYmUgdHJ1ZS5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuSHRtbDUucHJvdG90eXBlLm1vdmluZ01lZGlhRWxlbWVudEluRE9NID0gIUlTX0lPUzsgLy8gVE9ETzogUHJldmlvdXMgY29tbWVudDogTm8gbG9uZ2VyIGFwcGVhcnMgdG8gYmUgdXNlZC4gQ2FuIHByb2JhYmx5IGJlIHJlbW92ZWQuXG4vLyAgICAgICBJcyB0aGlzIHRydWU/XG5cbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBIVE1MNWAgdGVjaCBjdXJyZW50bHkgc3VwcG9ydHMgYXV0b21hdGljIG1lZGlhIHJlc2l6ZVxuICogd2hlbiBnb2luZyBpbnRvIGZ1bGxzY3JlZW4uXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdFxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc0Z1bGxzY3JlZW5SZXNpemUgPSB0cnVlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhUTUw1YCB0ZWNoIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgcHJvZ3Jlc3MgZXZlbnQuXG4gKiBJZiB0aGlzIGlzIGZhbHNlLCBtYW51YWwgYHByb2dyZXNzYCBldmVudHMgd2lsbCBiZSB0cmlnZ2VyZWQgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuSHRtbDUucHJvdG90eXBlLmZlYXR1cmVzUHJvZ3Jlc3NFdmVudHMgPSB0cnVlO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhUTUw1YCB0ZWNoIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdGltZXVwZGF0ZSBldmVudC5cbiAqIElmIHRoaXMgaXMgZmFsc2UsIG1hbnVhbCBgdGltZXVwZGF0ZWAgZXZlbnRzIHdpbGwgYmUgdHJpZ2dlcmVkIGluc3RlYWQuXG4gKlxuICogQGRlZmF1bHRcbiAqL1xuXG5IdG1sNS5wcm90b3R5cGUuZmVhdHVyZXNUaW1ldXBkYXRlRXZlbnRzID0gdHJ1ZTtcbi8qKlxuICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBIVE1MNWAgdGVjaCBjdXJyZW50bHkgc3VwcG9ydHMgbmF0aXZlIGBUZXh0VHJhY2tgcy5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0IHtAbGluayBIdG1sNS5zdXBwb3J0c05hdGl2ZVRleHRUcmFja3N9XG4gKi9cblxuSHRtbDUucHJvdG90eXBlLmZlYXR1cmVzTmF0aXZlVGV4dFRyYWNrcyA9IEh0bWw1LnN1cHBvcnRzTmF0aXZlVGV4dFRyYWNrcygpO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhUTUw1YCB0ZWNoIGN1cnJlbnRseSBzdXBwb3J0cyBuYXRpdmUgYFZpZGVvVHJhY2tgcy5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0IHtAbGluayBIdG1sNS5zdXBwb3J0c05hdGl2ZVZpZGVvVHJhY2tzfVxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc05hdGl2ZVZpZGVvVHJhY2tzID0gSHRtbDUuc3VwcG9ydHNOYXRpdmVWaWRlb1RyYWNrcygpO1xuLyoqXG4gKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhUTUw1YCB0ZWNoIGN1cnJlbnRseSBzdXBwb3J0cyBuYXRpdmUgYEF1ZGlvVHJhY2tgcy5cbiAqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEBkZWZhdWx0IHtAbGluayBIdG1sNS5zdXBwb3J0c05hdGl2ZUF1ZGlvVHJhY2tzfVxuICovXG5cbkh0bWw1LnByb3RvdHlwZS5mZWF0dXJlc05hdGl2ZUF1ZGlvVHJhY2tzID0gSHRtbDUuc3VwcG9ydHNOYXRpdmVBdWRpb1RyYWNrcygpOyAvLyBIVE1MNSBGZWF0dXJlIGRldGVjdGlvbiBhbmQgRGV2aWNlIEZpeGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG52YXIgY2FuUGxheVR5cGUgPSBIdG1sNS5URVNUX1ZJRCAmJiBIdG1sNS5URVNUX1ZJRC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuY2FuUGxheVR5cGU7XG52YXIgbXBlZ3VybFJFID0gL15hcHBsaWNhdGlvblxcLyg/OngtfHZuZFxcLmFwcGxlXFwuKW1wZWd1cmwvaTtcblxuSHRtbDUucGF0Y2hDYW5QbGF5VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gQW5kcm9pZCA0LjAgYW5kIGFib3ZlIGNhbiBwbGF5IEhMUyB0byBzb21lIGV4dGVudCBidXQgaXQgcmVwb3J0cyBiZWluZyB1bmFibGUgdG8gZG8gc29cbiAgLy8gRmlyZWZveCBhbmQgQ2hyb21lIHJlcG9ydCBjb3JyZWN0bHlcbiAgaWYgKEFORFJPSURfVkVSU0lPTiA+PSA0LjAgJiYgIUlTX0ZJUkVGT1ggJiYgIUlTX0NIUk9NRSkge1xuICAgIEh0bWw1LlRFU1RfVklELmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBpZiAodHlwZSAmJiBtcGVndXJsUkUudGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gJ21heWJlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhblBsYXlUeXBlLmNhbGwodGhpcywgdHlwZSk7XG4gICAgfTtcbiAgfVxufTtcblxuSHRtbDUudW5wYXRjaENhblBsYXlUeXBlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IEh0bWw1LlRFU1RfVklELmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jYW5QbGF5VHlwZTtcbiAgSHRtbDUuVEVTVF9WSUQuY29uc3RydWN0b3IucHJvdG90eXBlLmNhblBsYXlUeXBlID0gY2FuUGxheVR5cGU7XG4gIHJldHVybiByO1xufTsgLy8gYnkgZGVmYXVsdCwgcGF0Y2ggdGhlIG1lZGlhIGVsZW1lbnRcblxuXG5IdG1sNS5wYXRjaENhblBsYXlUeXBlKCk7XG5cbkh0bWw1LmRpc3Bvc2VNZWRpYUVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgaWYgKCFlbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbC5wYXJlbnROb2RlKSB7XG4gICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gIH0gLy8gcmVtb3ZlIGFueSBjaGlsZCB0cmFjayBvciBzb3VyY2Ugbm9kZXMgdG8gcHJldmVudCB0aGVpciBsb2FkaW5nXG5cblxuICB3aGlsZSAoZWwuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XG4gIH0gLy8gcmVtb3ZlIGFueSBzcmMgcmVmZXJlbmNlLiBub3Qgc2V0dGluZyBgc3JjPScnYCBiZWNhdXNlIHRoYXQgY2F1c2VzIGEgd2FybmluZ1xuICAvLyBpbiBmaXJlZm94XG5cblxuICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NyYycpOyAvLyBmb3JjZSB0aGUgbWVkaWEgZWxlbWVudCB0byB1cGRhdGUgaXRzIGxvYWRpbmcgc3RhdGUgYnkgY2FsbGluZyBsb2FkKClcbiAgLy8gaG93ZXZlciBJRSBvbiBXaW5kb3dzIDdOIGhhcyBhIGJ1ZyB0aGF0IHRocm93cyBhbiBlcnJvciBzbyBuZWVkIGEgdHJ5L2NhdGNoICgjNzkzKVxuXG4gIGlmICh0eXBlb2YgZWwubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIHdyYXBwaW5nIGluIGFuIGlpZmUgc28gaXQncyBub3QgZGVvcHRpbWl6ZWQgKCMxMDYwI2Rpc2N1c3Npb25fcjEwMzI0NDczKVxuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBlbC5sb2FkKCk7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gbm90IHN1cHBvcnRlZFxuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cbn07XG5cbkh0bWw1LnJlc2V0TWVkaWFFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gIGlmICghZWwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc291cmNlcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NvdXJjZScpO1xuICB2YXIgaSA9IHNvdXJjZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBlbC5yZW1vdmVDaGlsZChzb3VyY2VzW2ldKTtcbiAgfSAvLyByZW1vdmUgYW55IHNyYyByZWZlcmVuY2UuXG4gIC8vIG5vdCBzZXR0aW5nIGBzcmM9JydgIGJlY2F1c2UgdGhhdCB0aHJvd3MgYW4gZXJyb3JcblxuXG4gIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3JjJyk7XG5cbiAgaWYgKHR5cGVvZiBlbC5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gd3JhcHBpbmcgaW4gYW4gaWlmZSBzbyBpdCdzIG5vdCBkZW9wdGltaXplZCAoIzEwNjAjZGlzY3Vzc2lvbl9yMTAzMjQ0NzMpXG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsLmxvYWQoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsvLyBzYXRpc2Z5IGxpbnRlclxuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cbn07XG4vKiBOYXRpdmUgSFRNTDUgZWxlbWVudCBwcm9wZXJ0eSB3cmFwcGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gV3JhcCBuYXRpdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggZ2V0dGVycyB0aGF0IGNoZWNrIGJvdGggcHJvcGVydHkgYW5kIGF0dHJpYnV0ZVxuLy8gVGhlIGxpc3QgaXMgYXMgZm9sbG93ZWQ6XG4vLyBtdXRlZCwgZGVmYXVsdE11dGVkLCBhdXRvcGxheSwgY29udHJvbHMsIGxvb3AsIHBsYXlzaW5saW5lXG5cblxuW1xuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBtdXRlZGAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYG11dGVkYCBpbmRpY2F0ZXNcbiAqIHRoYXQgdGhlIHZvbHVtZSBmb3IgdGhlIG1lZGlhIHNob3VsZCBiZSBzZXQgdG8gc2lsZW50LiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5IGNoYW5nZVxuICogdGhlIGB2b2x1bWVgIGF0dHJpYnV0ZS5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I211dGVkXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICAtIFRydWUgaWYgdGhlIHZhbHVlIG9mIGB2b2x1bWVgIHNob3VsZCBiZSBpZ25vcmVkIGFuZCB0aGUgYXVkaW8gc2V0IHRvIHNpbGVudC5cbiAqICAgICAgICAgLSBGYWxzZSBpZiB0aGUgdmFsdWUgb2YgYHZvbHVtZWAgc2hvdWxkIGJlIHVzZWQuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1tdXRlZH1cbiAqL1xuJ211dGVkJyxcbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBgZGVmYXVsdE11dGVkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgZGVmYXVsdE11dGVkYCBpbmRpY2F0ZXNcbiAqIHdoZXRoZXIgdGhlIG1lZGlhIHNob3VsZCBzdGFydCBtdXRlZCBvciBub3QuIE9ubHkgY2hhbmdlcyB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB0aGVcbiAqIG1lZGlhLiBgbXV0ZWRgIGFuZCBgZGVmYXVsdE11dGVkYCBjYW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzLiB7QGxpbmsgSHRtbDUjbXV0ZWR9IGluZGljYXRlcyB0aGVcbiAqIGN1cnJlbnQgc3RhdGUuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNkZWZhdWx0TXV0ZWRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIC0gVGhlIHZhbHVlIG9mIGBkZWZhdWx0TXV0ZWRgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuXG4gKiAgICAgICAgIC0gVHJ1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgc2hvdWxkIHN0YXJ0IG11dGVkLlxuICogICAgICAgICAtIEZhbHNlIGluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBzaG91bGQgbm90IHN0YXJ0IG11dGVkXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1kZWZhdWx0bXV0ZWR9XG4gKi9cbidkZWZhdWx0TXV0ZWQnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBhdXRvcGxheWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYGF1dG9wbGF5YCBpbmRpY2F0ZXNcbiAqIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBzdGFydCB0byBwbGF5IGFzIHNvb24gYXMgdGhlIHBhZ2UgaXMgcmVhZHkuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNhdXRvcGxheVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUaGUgdmFsdWUgb2YgYGF1dG9wbGF5YCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBzdGFydCBhcyBzb29uIGFzIHRoZSBwYWdlIGxvYWRzLlxuICogICAgICAgICAtIEZhbHNlIGluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBzaG91bGQgbm90IHN0YXJ0IGFzIHNvb24gYXMgdGhlIHBhZ2UgbG9hZHMuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2F0dHItbWVkaWEtYXV0b3BsYXl9XG4gKi9cbidhdXRvcGxheScsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYGNvbnRyb2xzYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgY29udHJvbHNgIGluZGljYXRlc1xuICogd2hldGhlciB0aGUgbmF0aXZlIG1lZGlhIGNvbnRyb2xzIHNob3VsZCBiZSBzaG93biBvciBoaWRkZW4uXG4gKlxuICogQG1ldGhvZCBIdG1sNSNjb250cm9sc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUaGUgdmFsdWUgb2YgYGNvbnRyb2xzYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgbmF0aXZlIGNvbnRyb2xzIHNob3VsZCBiZSBzaG93aW5nLlxuICogICAgICAgICAtIEZhbHNlIGluZGljYXRlcyB0aGF0IG5hdGl2ZSBjb250cm9scyBzaG91bGQgYmUgaGlkZGVuLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNhdHRyLW1lZGlhLWNvbnRyb2xzfVxuICovXG4nY29udHJvbHMnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBsb29wYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgbG9vcGAgaW5kaWNhdGVzXG4gKiB0aGF0IHRoZSBtZWRpYSBzaG91bGQgcmV0dXJuIHRvIHRoZSBzdGFydCBvZiB0aGUgbWVkaWEgYW5kIGNvbnRpbnVlIHBsYXlpbmcgb25jZVxuICogaXQgcmVhY2hlcyB0aGUgZW5kLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjbG9vcFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUaGUgdmFsdWUgb2YgYGxvb3BgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuXG4gKiAgICAgICAgIC0gVHJ1ZSBpbmRpY2F0ZXMgdGhhdCBwbGF5YmFjayBzaG91bGQgc2VlayBiYWNrIHRvIHN0YXJ0IG9uY2VcbiAqICAgICAgICAgICB0aGUgZW5kIG9mIGEgbWVkaWEgaXMgcmVhY2hlZC5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCBwbGF5YmFjayBzaG91bGQgbm90IGxvb3AgYmFjayB0byB0aGUgc3RhcnQgd2hlbiB0aGVcbiAqICAgICAgICAgICBlbmQgb2YgdGhlIG1lZGlhIGlzIHJlYWNoZWQuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2F0dHItbWVkaWEtbG9vcH1cbiAqL1xuJ2xvb3AnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBwbGF5c2lubGluZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYHBsYXlzaW5saW5lYCBpbmRpY2F0ZXNcbiAqIHRvIHRoZSBicm93c2VyIHRoYXQgbm9uLWZ1bGxzY3JlZW4gcGxheWJhY2sgaXMgcHJlZmVycmVkIHdoZW4gZnVsbHNjcmVlblxuICogcGxheWJhY2sgaXMgdGhlIG5hdGl2ZSBkZWZhdWx0LCBzdWNoIGFzIGluIGlPUyBTYWZhcmkuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNwbGF5c2lubGluZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUaGUgdmFsdWUgb2YgYHBsYXlzaW5saW5lYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBwbGF5IGlubGluZS5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgc2hvdWxkIG5vdCBwbGF5IGlubGluZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyLXZpZGVvLXBsYXlzaW5saW5lfVxuICovXG4ncGxheXNpbmxpbmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIEh0bWw1LnByb3RvdHlwZVtwcm9wXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbF9bcHJvcF0gfHwgdGhpcy5lbF8uaGFzQXR0cmlidXRlKHByb3ApO1xuICB9O1xufSk7IC8vIFdyYXAgbmF0aXZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aXRoIHNldHRlcnMgdGhhdCBzZXQgYm90aCBwcm9wZXJ0eSBhbmQgYXR0cmlidXRlXG4vLyBUaGUgbGlzdCBpcyBhcyBmb2xsb3dlZDpcbi8vIHNldE11dGVkLCBzZXREZWZhdWx0TXV0ZWQsIHNldEF1dG9wbGF5LCBzZXRMb29wLCBzZXRQbGF5c2lubGluZVxuLy8gc2V0Q29udHJvbHMgaXMgc3BlY2lhbC1jYXNlZCBhYm92ZVxuXG5bXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYG11dGVkYCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYG11dGVkYCBpbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudFxuICogYXVkaW8gbGV2ZWwgc2hvdWxkIGJlIHNpbGVudC5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3NldE11dGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG11dGVkXG4gKiAgICAgICAgLSBUcnVlIGlmIHRoZSBhdWRpbyBzaG91bGQgYmUgc2V0IHRvIHNpbGVudFxuICogICAgICAgIC0gRmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1tdXRlZH1cbiAqL1xuJ211dGVkJyxcbi8qKlxuICogU2V0IHRoZSB2YWx1ZSBvZiBgZGVmYXVsdE11dGVkYCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYGRlZmF1bHRNdXRlZGAgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnRcbiAqIGF1ZGlvIGxldmVsIHNob3VsZCBiZSBzaWxlbnQsIGJ1dCB3aWxsIG9ubHkgZWZmZWN0IHRoZSBtdXRlZCBsZXZlbCBvbiBpbnRpYWwgcGxheWJhY2suLlxuICpcbiAqIEBtZXRob2QgSHRtbDUucHJvdG90eXBlLnNldERlZmF1bHRNdXRlZFxuICogQHBhcmFtIHtib29sZWFufSBkZWZhdWx0TXV0ZWRcbiAqICAgICAgICAtIFRydWUgaWYgdGhlIGF1ZGlvIHNob3VsZCBiZSBzZXQgdG8gc2lsZW50XG4gKiAgICAgICAgLSBGYWxzZSBvdGhlcndpc2VcbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLWRlZmF1bHRtdXRlZH1cbiAqL1xuJ2RlZmF1bHRNdXRlZCcsXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYGF1dG9wbGF5YCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYGF1dG9wbGF5YCBpbmRpY2F0ZXNcbiAqIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBzdGFydCB0byBwbGF5IGFzIHNvb24gYXMgdGhlIHBhZ2UgaXMgcmVhZHkuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNzZXRBdXRvcGxheVxuICogQHBhcmFtIHtib29sZWFufSBhdXRvcGxheVxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBzdGFydCBhcyBzb29uIGFzIHRoZSBwYWdlIGxvYWRzLlxuICogICAgICAgICAtIEZhbHNlIGluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBzaG91bGQgbm90IHN0YXJ0IGFzIHNvb24gYXMgdGhlIHBhZ2UgbG9hZHMuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2F0dHItbWVkaWEtYXV0b3BsYXl9XG4gKi9cbidhdXRvcGxheScsXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYGxvb3BgIG9uIHRoZSBtZWRpYSBlbGVtZW50LiBgbG9vcGAgaW5kaWNhdGVzXG4gKiB0aGF0IHRoZSBtZWRpYSBzaG91bGQgcmV0dXJuIHRvIHRoZSBzdGFydCBvZiB0aGUgbWVkaWEgYW5kIGNvbnRpbnVlIHBsYXlpbmcgb25jZVxuICogaXQgcmVhY2hlcyB0aGUgZW5kLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjc2V0TG9vcFxuICogQHBhcmFtIHtib29sZWFufSBsb29wXG4gKiAgICAgICAgIC0gVHJ1ZSBpbmRpY2F0ZXMgdGhhdCBwbGF5YmFjayBzaG91bGQgc2VlayBiYWNrIHRvIHN0YXJ0IG9uY2VcbiAqICAgICAgICAgICB0aGUgZW5kIG9mIGEgbWVkaWEgaXMgcmVhY2hlZC5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCBwbGF5YmFjayBzaG91bGQgbm90IGxvb3AgYmFjayB0byB0aGUgc3RhcnQgd2hlbiB0aGVcbiAqICAgICAgICAgICBlbmQgb2YgdGhlIG1lZGlhIGlzIHJlYWNoZWQuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2F0dHItbWVkaWEtbG9vcH1cbiAqL1xuJ2xvb3AnLFxuLyoqXG4gKiBTZXQgdGhlIHZhbHVlIG9mIGBwbGF5c2lubGluZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYHBsYXlzaW5saW5lYCBpbmRpY2F0ZXNcbiAqIHRvIHRoZSBicm93c2VyIHRoYXQgbm9uLWZ1bGxzY3JlZW4gcGxheWJhY2sgaXMgcHJlZmVycmVkIHdoZW4gZnVsbHNjcmVlblxuICogcGxheWJhY2sgaXMgdGhlIG5hdGl2ZSBkZWZhdWx0LCBzdWNoIGFzIGluIGlPUyBTYWZhcmkuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNzZXRQbGF5c2lubGluZVxuICogQHBhcmFtIHtib29sZWFufSBwbGF5c2lubGluZVxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIHNob3VsZCBwbGF5IGlubGluZS5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgc2hvdWxkIG5vdCBwbGF5IGlubGluZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyLXZpZGVvLXBsYXlzaW5saW5lfVxuICovXG4ncGxheXNpbmxpbmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIEh0bWw1LnByb3RvdHlwZVsnc2V0JyArIHRvVGl0bGVDYXNlKHByb3ApXSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5lbF9bcHJvcF0gPSB2O1xuXG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuZWxfLnNldEF0dHJpYnV0ZShwcm9wLCBwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbF8ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfTtcbn0pOyAvLyBXcmFwIG5hdGl2ZSBwcm9wZXJ0aWVzIHdpdGggYSBnZXR0ZXJcbi8vIFRoZSBsaXN0IGlzIGFzIGZvbGxvd2VkXG4vLyBwYXVzZWQsIGN1cnJlbnRUaW1lLCBidWZmZXJlZCwgdm9sdW1lLCBwb3N0ZXIsIHByZWxvYWQsIGVycm9yLCBzZWVraW5nXG4vLyBzZWVrYWJsZSwgZW5kZWQsIHBsYXliYWNrUmF0ZSwgZGVmYXVsdFBsYXliYWNrUmF0ZSwgcGxheWVkLCBuZXR3b3JrU3RhdGVcbi8vIHJlYWR5U3RhdGUsIHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0XG5cbltcbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBgcGF1c2VkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgcGF1c2VkYCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVkaWEgZWxlbWVudFxuICogaXMgY3VycmVudGx5IHBhdXNlZCBvciBub3QuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNwYXVzZWRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgcGF1c2VkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtcGF1c2VkfVxuICovXG4ncGF1c2VkJyxcbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBgY3VycmVudFRpbWVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGBjdXJyZW50VGltZWAgaW5kaWNhdGVzXG4gKiB0aGUgY3VycmVudCBzZWNvbmQgdGhhdCB0aGUgbWVkaWEgaXMgYXQgaW4gcGxheWJhY2suXG4gKlxuICogQG1ldGhvZCBIdG1sNSNjdXJyZW50VGltZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYGN1cnJlbnRUaW1lYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtY3VycmVudHRpbWV9XG4gKi9cbidjdXJyZW50VGltZScsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYGJ1ZmZlcmVkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgYnVmZmVyZWRgIGlzIGEgYFRpbWVSYW5nZWBcbiAqIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHBhcnRzIG9mIHRoZSBtZWRpYSB0aGF0IGFyZSBhbHJlYWR5IGRvd25sb2FkZWQgYW5kXG4gKiBhdmFpbGFibGUgZm9yIHBsYXliYWNrLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjYnVmZmVyZWRcbiAqIEByZXR1cm4ge1RpbWVSYW5nZX1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGBidWZmZXJlZGAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLWJ1ZmZlcmVkfVxuICovXG4nYnVmZmVyZWQnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGB2b2x1bWVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGB2b2x1bWVgIGluZGljYXRlc1xuICogdGhlIGN1cnJlbnQgcGxheWJhY2sgdm9sdW1lIG9mIGF1ZGlvIGZvciBhIG1lZGlhLiBgdm9sdW1lYCB3aWxsIGJlIGEgdmFsdWUgZnJvbSAwXG4gKiAoc2lsZW50KSB0byAxIChsb3VkZXN0IGFuZCBkZWZhdWx0KS5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3ZvbHVtZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYHZvbHVtZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gVmFsdWUgd2lsbCBiZSBiZXR3ZWVuIDAtMS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLWEtdm9sdW1lfVxuICovXG4ndm9sdW1lJyxcbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBgcG9zdGVyYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgcG9zdGVyYCBpbmRpY2F0ZXNcbiAqIHRoYXQgdGhlIHVybCBvZiBhbiBpbWFnZSBmaWxlIHRoYXQgY2FuL3dpbGwgYmUgc2hvd24gd2hlbiBubyBtZWRpYSBkYXRhIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3Bvc3RlclxuICogQHJldHVybiB7c3RyaW5nfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYHBvc3RlcmAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gVmFsdWUgd2lsbCBiZSBhIHVybCB0byBhblxuICogICAgICAgICBpbWFnZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjYXR0ci12aWRlby1wb3N0ZXJ9XG4gKi9cbidwb3N0ZXInLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBwcmVsb2FkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgcHJlbG9hZGAgaW5kaWNhdGVzXG4gKiB3aGF0IHNob3VsZCBkb3dubG9hZCBiZWZvcmUgdGhlIG1lZGlhIGlzIGludGVyYWN0ZWQgd2l0aC4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZ1xuICogdmFsdWVzOlxuICogLSBub25lOiBub3RoaW5nIHNob3VsZCBiZSBkb3dubG9hZGVkXG4gKiAtIG1ldGFkYXRhOiBwb3N0ZXIgYW5kIHRoZSBmaXJzdCBmZXcgZnJhbWVzIG9mIHRoZSBtZWRpYSBtYXkgYmUgZG93bmxvYWRlZCB0byBnZXRcbiAqICAgbWVkaWEgZGltZW5zaW9ucyBhbmQgb3RoZXIgbWV0YWRhdGFcbiAqIC0gYXV0bzogYWxsb3cgdGhlIG1lZGlhIGFuZCBtZXRhZGF0YSBmb3IgdGhlIG1lZGlhIHRvIGJlIGRvd25sb2FkZWQgYmVmb3JlXG4gKiAgICBpbnRlcmFjdGlvblxuICpcbiAqIEBtZXRob2QgSHRtbDUjcHJlbG9hZFxuICogQHJldHVybiB7c3RyaW5nfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYHByZWxvYWRgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIFdpbGwgYmUgJ25vbmUnLCAnbWV0YWRhdGEnLFxuICogICAgICAgICBvciAnYXV0bycuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2F0dHItbWVkaWEtcHJlbG9hZH1cbiAqL1xuJ3ByZWxvYWQnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBgZXJyb3JgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGBlcnJvcmAgaW5kaWNhdGVzIGFueVxuICogTWVkaWFFcnJvciB0aGF0IG1heSBoYXZlIG9jY3VycmVkIGR1cmluZyBwbGF5YmFjay4gSWYgZXJyb3IgcmV0dXJucyBudWxsIHRoZXJlIGlzIG5vXG4gKiBjdXJyZW50IGVycm9yLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjZXJyb3JcbiAqIEByZXR1cm4ge01lZGlhRXJyb3J8bnVsbH1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGBlcnJvcmAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gV2lsbCBiZSBgTWVkaWFFcnJvcmAgaWYgdGhlcmVcbiAqICAgICAgICAgaXMgYSBjdXJyZW50IGVycm9yIGFuZCBudWxsIG90aGVyd2lzZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLWVycm9yfVxuICovXG4nZXJyb3InLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBzZWVraW5nYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgc2Vla2luZ2AgaW5kaWNhdGVzIHdoZXRoZXIgdGhlXG4gKiBtZWRpYSBpcyBjdXJyZW50bHkgc2Vla2luZyB0byBhIG5ldyBwb3NpdGlvbiBvciBub3QuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNzZWVraW5nXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICAtIFRoZSB2YWx1ZSBvZiBgc2Vla2luZ2AgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC5cbiAqICAgICAgICAgLSBUcnVlIGluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBpcyBjdXJyZW50bHkgc2Vla2luZyB0byBhIG5ldyBwb3NpdGlvbi5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgaXMgbm90IHNlZWtpbmcgdG8gYSBuZXcgcG9zaXRpb24gYXQgdGhpcyB0aW1lLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtc2Vla2luZ31cbiAqL1xuJ3NlZWtpbmcnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBzZWVrYWJsZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYHNlZWthYmxlYCByZXR1cm5zIGFcbiAqIGBUaW1lUmFuZ2VgIG9iamVjdCBpbmRpY2F0aW5nIHJhbmdlcyBvZiB0aW1lIHRoYXQgY2FuIGN1cnJlbnRseSBiZSBgc2Vla2VkYCB0by5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3NlZWthYmxlXG4gKiBAcmV0dXJuIHtUaW1lUmFuZ2V9XG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgc2Vla2FibGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIEEgYFRpbWVSYW5nZWAgb2JqZWN0XG4gKiAgICAgICAgIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgcmFuZ2VzIG9mIHRpbWUgdGhhdCBjYW4gYmUgc2Vla2VkIHRvLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtc2Vla2FibGV9XG4gKi9cbidzZWVrYWJsZScsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYGVuZGVkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgZW5kZWRgIGluZGljYXRlcyB3aGV0aGVyXG4gKiB0aGUgbWVkaWEgaGFzIHJlYWNoZWQgdGhlIGVuZCBvciBub3QuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNlbmRlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqICAgICAgICAgLSBUaGUgdmFsdWUgb2YgYGVuZGVkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LlxuICogICAgICAgICAtIFRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIGhhcyBlbmRlZC5cbiAqICAgICAgICAgLSBGYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgaGFzIG5vdCBlbmRlZC5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLWVuZGVkfVxuICovXG4nZW5kZWQnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBwbGF5YmFja1JhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGBwbGF5YmFja1JhdGVgIGluZGljYXRlc1xuICogdGhlIHJhdGUgYXQgd2hpY2ggdGhlIG1lZGlhIGlzIGN1cnJlbnRseSBwbGF5aW5nIGJhY2suIEV4YW1wbGVzOlxuICogICAtIGlmIHBsYXliYWNrUmF0ZSBpcyBzZXQgdG8gMiwgbWVkaWEgd2lsbCBwbGF5IHR3aWNlIGFzIGZhc3QuXG4gKiAgIC0gaWYgcGxheWJhY2tSYXRlIGlzIHNldCB0byAwLjUsIG1lZGlhIHdpbGwgcGxheSBoYWxmIGFzIGZhc3QuXG4gKlxuICogQG1ldGhvZCBIdG1sNSNwbGF5YmFja1JhdGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGBwbGF5YmFja1JhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIEEgbnVtYmVyIGluZGljYXRpbmdcbiAqICAgICAgICAgdGhlIGN1cnJlbnQgcGxheWJhY2sgc3BlZWQgb2YgdGhlIG1lZGlhLCB3aGVyZSAxIGlzIG5vcm1hbCBzcGVlZC5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLXBsYXliYWNrcmF0ZX1cbiAqL1xuJ3BsYXliYWNrUmF0ZScsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYGRlZmF1bHRQbGF5YmFja1JhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGBkZWZhdWx0UGxheWJhY2tSYXRlYCBpbmRpY2F0ZXNcbiAqIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBtZWRpYSBpcyBjdXJyZW50bHkgcGxheWluZyBiYWNrLiBUaGlzIHZhbHVlIHdpbGwgbm90IGluZGljYXRlIHRoZSBjdXJyZW50XG4gKiBgcGxheWJhY2tSYXRlYCBhZnRlciBwbGF5YmFjayBoYXMgc3RhcnRlZCwgdXNlIHtAbGluayBIdG1sNSNwbGF5YmFja1JhdGV9IGZvciB0aGF0LlxuICpcbiAqIEV4YW1wbGVzOlxuICogICAtIGlmIGRlZmF1bHRQbGF5YmFja1JhdGUgaXMgc2V0IHRvIDIsIG1lZGlhIHdpbGwgcGxheSB0d2ljZSBhcyBmYXN0LlxuICogICAtIGlmIGRlZmF1bHRQbGF5YmFja1JhdGUgaXMgc2V0IHRvIDAuNSwgbWVkaWEgd2lsbCBwbGF5IGhhbGYgYXMgZmFzdC5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1LnByb3RvdHlwZS5kZWZhdWx0UGxheWJhY2tSYXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgZGVmYXVsdFBsYXliYWNrUmF0ZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gQSBudW1iZXIgaW5kaWNhdGluZ1xuICogICAgICAgICB0aGUgY3VycmVudCBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbWVkaWEsIHdoZXJlIDEgaXMgbm9ybWFsIHNwZWVkLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtcGxheWJhY2tyYXRlfVxuICovXG4nZGVmYXVsdFBsYXliYWNrUmF0ZScsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYHBsYXllZGAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gYHBsYXllZGAgcmV0dXJucyBhIGBUaW1lUmFuZ2VgXG4gKiBvYmplY3QgcmVwcmVzZW50aW5nIHBvaW50cyBpbiB0aGUgbWVkaWEgdGltZWxpbmUgdGhhdCBoYXZlIGJlZW4gcGxheWVkLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjcGxheWVkXG4gKiBAcmV0dXJuIHtUaW1lUmFuZ2V9XG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgcGxheWVkYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBBIGBUaW1lUmFuZ2VgIG9iamVjdCBpbmRpY2F0aW5nXG4gKiAgICAgICAgIHRoZSByYW5nZXMgb2YgdGltZSB0aGF0IGhhdmUgYmVlbiBwbGF5ZWQuXG4gKlxuICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1wbGF5ZWR9XG4gKi9cbidwbGF5ZWQnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGBuZXR3b3JrU3RhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIGBuZXR3b3JrU3RhdGVgIGluZGljYXRlc1xuICogdGhlIGN1cnJlbnQgbmV0d29yayBzdGF0ZS4gSXQgcmV0dXJucyBhbiBlbnVtZXJhdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAqIC0gMDogTkVUV09SS19FTVBUWVxuICogLSAxOiBORVRXT1JLX0lETEVcbiAqIC0gMjogTkVUV09SS19MT0FESU5HXG4gKiAtIDM6IE5FVFdPUktfTk9fU09VUkNFXG4gKlxuICogQG1ldGhvZCBIdG1sNSNuZXR3b3JrU3RhdGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGBuZXR3b3JrU3RhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIFRoaXMgd2lsbCBiZSBhIG51bWJlclxuICogICAgICAgICBmcm9tIHRoZSBsaXN0IGluIHRoZSBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAc2VlIFtTcGVjXSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1uZXR3b3Jrc3RhdGV9XG4gKi9cbiduZXR3b3JrU3RhdGUnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGByZWFkeVN0YXRlYCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50LiBgcmVhZHlTdGF0ZWAgaW5kaWNhdGVzXG4gKiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbWVkaWEgZWxlbWVudC4gSXQgcmV0dXJucyBhbiBlbnVtZXJhdGlvbiBmcm9tIHRoZVxuICogZm9sbG93aW5nIGxpc3Q6XG4gKiAtIDA6IEhBVkVfTk9USElOR1xuICogLSAxOiBIQVZFX01FVEFEQVRBXG4gKiAtIDI6IEhBVkVfQ1VSUkVOVF9EQVRBXG4gKiAtIDM6IEhBVkVfRlVUVVJFX0RBVEFcbiAqIC0gNDogSEFWRV9FTk9VR0hfREFUQVxuICpcbiAqIEBtZXRob2QgSHRtbDUjcmVhZHlTdGF0ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYHJlYWR5U3RhdGVgIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQuIFRoaXMgd2lsbCBiZSBhIG51bWJlclxuICogICAgICAgICBmcm9tIHRoZSBsaXN0IGluIHRoZSBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAc2VlIFtTcGVjXSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3JlYWR5LXN0YXRlc31cbiAqL1xuJ3JlYWR5U3RhdGUnLFxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGB2aWRlb1dpZHRoYCBmcm9tIHRoZSB2aWRlbyBlbGVtZW50LiBgdmlkZW9XaWR0aGAgaW5kaWNhdGVzXG4gKiB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgdmlkZW8gaW4gY3NzIHBpeGVscy5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3ZpZGVvV2lkdGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGB2aWRlb1dpZHRoYCBmcm9tIHRoZSB2aWRlbyBlbGVtZW50LiBUaGlzIHdpbGwgYmUgYSBudW1iZXJcbiAqICAgICAgICAgaW4gY3NzIHBpeGVscy5cbiAqXG4gKiBAc2VlIFtTcGVjXSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS12aWRlby12aWRlb3dpZHRofVxuICovXG4ndmlkZW9XaWR0aCcsXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYHZpZGVvSGVpZ2h0YCBmcm9tIHRoZSB2aWRlbyBlbGVtZW50LiBgdmlkZW9IZWlnaHRgIGluZGljYXRlc1xuICogdGhlIGN1cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWRlbyBpbiBjc3MgcGl4ZWxzLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjdmlkZW9IZWlnaHRcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgICAgICAgVGhlIHZhbHVlIG9mIGB2aWRlb0hlaWdodGAgZnJvbSB0aGUgdmlkZW8gZWxlbWVudC4gVGhpcyB3aWxsIGJlIGEgbnVtYmVyXG4gKiAgICAgICAgIGluIGNzcyBwaXhlbHMuXG4gKlxuICogQHNlZSBbU3BlY10ge0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tdmlkZW8tdmlkZW93aWR0aH1cbiAqL1xuJ3ZpZGVvSGVpZ2h0J10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBIdG1sNS5wcm90b3R5cGVbcHJvcF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxfW3Byb3BdO1xuICB9O1xufSk7IC8vIFdyYXAgbmF0aXZlIHByb3BlcnRpZXMgd2l0aCBhIHNldHRlciBpbiB0aGlzIGZvcm1hdDpcbi8vIHNldCArIHRvVGl0bGVDYXNlKG5hbWUpXG4vLyBUaGUgbGlzdCBpcyBhcyBmb2xsb3dzOlxuLy8gc2V0Vm9sdW1lLCBzZXRTcmMsIHNldFBvc3Rlciwgc2V0UHJlbG9hZCwgc2V0UGxheWJhY2tSYXRlLCBzZXREZWZhdWx0UGxheWJhY2tSYXRlXG5cbltcbi8qKlxuICogU2V0IHRoZSB2YWx1ZSBvZiBgdm9sdW1lYCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYHZvbHVtZWAgaW5kaWNhdGVzIHRoZSBjdXJyZW50XG4gKiBhdWRpbyBsZXZlbCBhcyBhIHBlcmNlbnRhZ2UgaW4gZGVjaW1hbCBmb3JtLiBUaGlzIG1lYW5zIHRoYXQgMSBpcyAxMDAlLCAwLjUgaXMgNTAlLCBhbmRcbiAqIHNvIG9uLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjc2V0Vm9sdW1lXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyY2VudEFzRGVjaW1hbFxuICogICAgICAgIFRoZSB2b2x1bWUgcGVyY2VudCBhcyBhIGRlY2ltYWwuIFZhbGlkIHJhbmdlIGlzIGZyb20gMC0xLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tYS12b2x1bWV9XG4gKi9cbid2b2x1bWUnLFxuLyoqXG4gKiBTZXQgdGhlIHZhbHVlIG9mIGBzcmNgIG9uIHRoZSBtZWRpYSBlbGVtZW50LiBgc3JjYCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnRcbiAqIHtAbGluayBUZWNoflNvdXJjZU9iamVjdH0gZm9yIHRoZSBtZWRpYS5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3NldFNyY1xuICogQHBhcmFtIHtUZWNoflNvdXJjZU9iamVjdH0gc3JjXG4gKiAgICAgICAgVGhlIHNvdXJjZSBvYmplY3QgdG8gc2V0IGFzIHRoZSBjdXJyZW50IHNvdXJjZS5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLXNyY31cbiAqL1xuJ3NyYycsXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYHBvc3RlcmAgb24gdGhlIG1lZGlhIGVsZW1lbnQuIGBwb3N0ZXJgIGlzIHRoZSB1cmwgdG9cbiAqIGFuIGltYWdlIGZpbGUgdGhhdCBjYW4vd2lsbCBiZSBzaG93biB3aGVuIG5vIG1lZGlhIGRhdGEgaXMgYXZhaWxhYmxlLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjc2V0UG9zdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9zdGVyXG4gKiAgICAgICAgVGhlIHVybCB0byBhbiBpbWFnZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSBgcG9zdGVyYCBmb3IgdGhlIG1lZGlhXG4gKiAgICAgICAgZWxlbWVudC5cbiAqXG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjYXR0ci1tZWRpYS1wb3N0ZXJ9XG4gKi9cbidwb3N0ZXInLFxuLyoqXG4gKiBTZXQgdGhlIHZhbHVlIG9mIGBwcmVsb2FkYCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYHByZWxvYWRgIGluZGljYXRlc1xuICogd2hhdCBzaG91bGQgZG93bmxvYWQgYmVmb3JlIHRoZSBtZWRpYSBpcyBpbnRlcmFjdGVkIHdpdGguIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmdcbiAqIHZhbHVlczpcbiAqIC0gbm9uZTogbm90aGluZyBzaG91bGQgYmUgZG93bmxvYWRlZFxuICogLSBtZXRhZGF0YTogcG9zdGVyIGFuZCB0aGUgZmlyc3QgZmV3IGZyYW1lcyBvZiB0aGUgbWVkaWEgbWF5IGJlIGRvd25sb2FkZWQgdG8gZ2V0XG4gKiAgIG1lZGlhIGRpbWVuc2lvbnMgYW5kIG90aGVyIG1ldGFkYXRhXG4gKiAtIGF1dG86IGFsbG93IHRoZSBtZWRpYSBhbmQgbWV0YWRhdGEgZm9yIHRoZSBtZWRpYSB0byBiZSBkb3dubG9hZGVkIGJlZm9yZVxuICogICAgaW50ZXJhY3Rpb25cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3NldFByZWxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVsb2FkXG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgcHJlbG9hZGAgdG8gc2V0IG9uIHRoZSBtZWRpYSBlbGVtZW50LiBNdXN0IGJlICdub25lJywgJ21ldGFkYXRhJyxcbiAqICAgICAgICAgb3IgJ2F1dG8nLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNhdHRyLW1lZGlhLXByZWxvYWR9XG4gKi9cbidwcmVsb2FkJyxcbi8qKlxuICogU2V0IHRoZSB2YWx1ZSBvZiBgcGxheWJhY2tSYXRlYCBvbiB0aGUgbWVkaWEgZWxlbWVudC4gYHBsYXliYWNrUmF0ZWAgaW5kaWNhdGVzXG4gKiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgc2hvdWxkIHBsYXkgYmFjay4gRXhhbXBsZXM6XG4gKiAgIC0gaWYgcGxheWJhY2tSYXRlIGlzIHNldCB0byAyLCBtZWRpYSB3aWxsIHBsYXkgdHdpY2UgYXMgZmFzdC5cbiAqICAgLSBpZiBwbGF5YmFja1JhdGUgaXMgc2V0IHRvIDAuNSwgbWVkaWEgd2lsbCBwbGF5IGhhbGYgYXMgZmFzdC5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I3NldFBsYXliYWNrUmF0ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogICAgICAgICBUaGUgdmFsdWUgb2YgYHBsYXliYWNrUmF0ZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gQSBudW1iZXIgaW5kaWNhdGluZ1xuICogICAgICAgICB0aGUgY3VycmVudCBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbWVkaWEsIHdoZXJlIDEgaXMgbm9ybWFsIHNwZWVkLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtcGxheWJhY2tyYXRlfVxuICovXG4ncGxheWJhY2tSYXRlJyxcbi8qKlxuICogU2V0IHRoZSB2YWx1ZSBvZiBgZGVmYXVsdFBsYXliYWNrUmF0ZWAgb24gdGhlIG1lZGlhIGVsZW1lbnQuIGBkZWZhdWx0UGxheWJhY2tSYXRlYCBpbmRpY2F0ZXNcbiAqIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBtZWRpYSBzaG91bGQgcGxheSBiYWNrIHVwb24gaW5pdGlhbCBzdGFydHVwLiBDaGFuZ2luZyB0aGlzIHZhbHVlXG4gKiBhZnRlciBhIHZpZGVvIGhhcyBzdGFydGVkIHdpbGwgZG8gbm90aGluZy4gSW5zdGVhZCB5b3Ugc2hvdWxkIHVzZWQge0BsaW5rIEh0bWw1I3NldFBsYXliYWNrUmF0ZX0uXG4gKlxuICogRXhhbXBsZSBWYWx1ZXM6XG4gKiAgIC0gaWYgcGxheWJhY2tSYXRlIGlzIHNldCB0byAyLCBtZWRpYSB3aWxsIHBsYXkgdHdpY2UgYXMgZmFzdC5cbiAqICAgLSBpZiBwbGF5YmFja1JhdGUgaXMgc2V0IHRvIDAuNSwgbWVkaWEgd2lsbCBwbGF5IGhhbGYgYXMgZmFzdC5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1LnByb3RvdHlwZS5zZXREZWZhdWx0UGxheWJhY2tSYXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBgZGVmYXVsdFBsYXliYWNrUmF0ZWAgZnJvbSB0aGUgbWVkaWEgZWxlbWVudC4gQSBudW1iZXIgaW5kaWNhdGluZ1xuICogICAgICAgICB0aGUgY3VycmVudCBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbWVkaWEsIHdoZXJlIDEgaXMgbm9ybWFsIHNwZWVkLlxuICpcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtZGVmYXVsdHBsYXliYWNrcmF0ZX1cbiAqL1xuJ2RlZmF1bHRQbGF5YmFja1JhdGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIEh0bWw1LnByb3RvdHlwZVsnc2V0JyArIHRvVGl0bGVDYXNlKHByb3ApXSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5lbF9bcHJvcF0gPSB2O1xuICB9O1xufSk7IC8vIHdyYXAgbmF0aXZlIGZ1bmN0aW9ucyB3aXRoIGEgZnVuY3Rpb25cbi8vIFRoZSBsaXN0IGlzIGFzIGZvbGxvd3M6XG4vLyBwYXVzZSwgbG9hZCwgcGxheVxuXG5bXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgdGhlIG1lZGlhIGVsZW1lbnRzIGBwYXVzZWAgZnVuY3Rpb24uIFRoaXMgd2lsbCBjYWxsIHRoZSBgSFRNTDVgXG4gKiBtZWRpYSBlbGVtZW50cyBgcGF1c2VgIGZ1bmN0aW9uLlxuICpcbiAqIEBtZXRob2QgSHRtbDUjcGF1c2VcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtcGF1c2V9XG4gKi9cbidwYXVzZScsXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgdGhlIG1lZGlhIGVsZW1lbnRzIGBsb2FkYCBmdW5jdGlvbi4gVGhpcyB3aWxsIGNhbGwgdGhlIGBIVE1MNWBzXG4gKiBtZWRpYSBlbGVtZW50IGBsb2FkYCBmdW5jdGlvbi5cbiAqXG4gKiBAbWV0aG9kIEh0bWw1I2xvYWRcbiAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCNkb20tbWVkaWEtbG9hZH1cbiAqL1xuJ2xvYWQnLFxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBtZWRpYSBlbGVtZW50cyBgcGxheWAgZnVuY3Rpb24uIFRoaXMgd2lsbCBjYWxsIHRoZSBgSFRNTDVgc1xuICogbWVkaWEgZWxlbWVudCBgcGxheWAgZnVuY3Rpb24uXG4gKlxuICogQG1ldGhvZCBIdG1sNSNwbGF5XG4gKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLXBsYXl9XG4gKi9cbidwbGF5J10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBIdG1sNS5wcm90b3R5cGVbcHJvcF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxfW3Byb3BdKCk7XG4gIH07XG59KTtcblRlY2gud2l0aFNvdXJjZUhhbmRsZXJzKEh0bWw1KTtcbi8qKlxuICogTmF0aXZlIHNvdXJjZSBoYW5kbGVyIGZvciBIdG1sNSwgc2ltcGx5IHBhc3NlcyB0aGUgc291cmNlIHRvIHRoZSBtZWRpYSBlbGVtZW50LlxuICpcbiAqIEBwcm9wZXJ0eSB7VGVjaH5Tb3VyY2VPYmplY3R9IHNvdXJjZVxuICogICAgICAgIFRoZSBzb3VyY2Ugb2JqZWN0XG4gKlxuICogQHByb3BlcnR5IHtIdG1sNX0gdGVjaFxuICogICAgICAgIFRoZSBpbnN0YW5jZSBvZiB0aGUgSFRNTDUgdGVjaC5cbiAqL1xuXG5IdG1sNS5uYXRpdmVTb3VyY2VIYW5kbGVyID0ge307XG4vKipcbiAqIENoZWNrIGlmIHRoZSBtZWRpYSBlbGVtZW50IGNhbiBwbGF5IHRoZSBnaXZlbiBtaW1lIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqICAgICAgICBUaGUgbWltZXR5cGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiAgICAgICAgICdwcm9iYWJseScsICdtYXliZScsIG9yICcnIChlbXB0eSBzdHJpbmcpXG4gKi9cblxuSHRtbDUubmF0aXZlU291cmNlSGFuZGxlci5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIC8vIElFIHdpdGhvdXQgTWVkaWFQbGF5ZXIgdGhyb3dzIGFuIGVycm9yICgjNTE5KVxuICB0cnkge1xuICAgIHJldHVybiBIdG1sNS5URVNUX1ZJRC5jYW5QbGF5VHlwZSh0eXBlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIG1lZGlhIGVsZW1lbnQgY2FuIGhhbmRsZSBhIHNvdXJjZSBuYXRpdmVseS5cbiAqXG4gKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fSBzb3VyY2VcbiAqICAgICAgICAgVGhlIHNvdXJjZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiAgICAgICAgIE9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZSB0ZWNoLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqICAgICAgICAgJ3Byb2JhYmx5JywgJ21heWJlJywgb3IgJycgKGVtcHR5IHN0cmluZykuXG4gKi9cblxuXG5IdG1sNS5uYXRpdmVTb3VyY2VIYW5kbGVyLmNhbkhhbmRsZVNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgLy8gSWYgYSB0eXBlIHdhcyBwcm92aWRlZCB3ZSBzaG91bGQgcmVseSBvbiB0aGF0XG4gIGlmIChzb3VyY2UudHlwZSkge1xuICAgIHJldHVybiBIdG1sNS5uYXRpdmVTb3VyY2VIYW5kbGVyLmNhblBsYXlUeXBlKHNvdXJjZS50eXBlKTsgLy8gSWYgbm8gdHlwZSwgZmFsbCBiYWNrIHRvIGNoZWNraW5nICd2aWRlby9bRVhURU5TSU9OXSdcbiAgfSBlbHNlIGlmIChzb3VyY2Uuc3JjKSB7XG4gICAgdmFyIGV4dCA9IGdldEZpbGVFeHRlbnNpb24oc291cmNlLnNyYyk7XG4gICAgcmV0dXJuIEh0bWw1Lm5hdGl2ZVNvdXJjZUhhbmRsZXIuY2FuUGxheVR5cGUoXCJ2aWRlby9cIiArIGV4dCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLyoqXG4gKiBQYXNzIHRoZSBzb3VyY2UgdG8gdGhlIG5hdGl2ZSBtZWRpYSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7VGVjaH5Tb3VyY2VPYmplY3R9IHNvdXJjZVxuICogICAgICAgIFRoZSBzb3VyY2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHtIdG1sNX0gdGVjaFxuICogICAgICAgIFRoZSBpbnN0YW5jZSBvZiB0aGUgSHRtbDUgdGVjaFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqICAgICAgICBUaGUgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBzb3VyY2VcbiAqL1xuXG5cbkh0bWw1Lm5hdGl2ZVNvdXJjZUhhbmRsZXIuaGFuZGxlU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSwgdGVjaCwgb3B0aW9ucykge1xuICB0ZWNoLnNldFNyYyhzb3VyY2Uuc3JjKTtcbn07XG4vKipcbiAqIEEgbm9vcCBmb3IgdGhlIG5hdGl2ZSBkaXNwb3NlIGZ1bmN0aW9uLCBhcyBjbGVhbnVwIGlzIG5vdCBuZWVkZWQuXG4gKi9cblxuXG5IdG1sNS5uYXRpdmVTb3VyY2VIYW5kbGVyLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7fTsgLy8gUmVnaXN0ZXIgdGhlIG5hdGl2ZSBzb3VyY2UgaGFuZGxlclxuXG5cbkh0bWw1LnJlZ2lzdGVyU291cmNlSGFuZGxlcihIdG1sNS5uYXRpdmVTb3VyY2VIYW5kbGVyKTtcblRlY2gucmVnaXN0ZXJUZWNoKCdIdG1sNScsIEh0bWw1KTtcblxuLy8gb24gdGhlIHBsYXllciB3aGVuIHRoZXkgaGFwcGVuXG5cbnZhciBURUNIX0VWRU5UU19SRVRSSUdHRVIgPSBbXG4vKipcbiAqIEZpcmVkIHdoaWxlIHRoZSB1c2VyIGFnZW50IGlzIGRvd25sb2FkaW5nIG1lZGlhIGRhdGEuXG4gKlxuICogQGV2ZW50IFBsYXllciNwcm9ncmVzc1xuICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICovXG5cbi8qKlxuICogUmV0cmlnZ2VyIHRoZSBgcHJvZ3Jlc3NgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbWV0aG9kIFBsYXllciNoYW5kbGVUZWNoUHJvZ3Jlc3NfXG4gKiBAZmlyZXMgUGxheWVyI3Byb2dyZXNzXG4gKiBAbGlzdGVucyBUZWNoI3Byb2dyZXNzXG4gKi9cbidwcm9ncmVzcycsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIGxvYWRpbmcgb2YgYW4gYXVkaW8vdmlkZW8gaXMgYWJvcnRlZC5cbiAqXG4gKiBAZXZlbnQgUGxheWVyI2Fib3J0XG4gKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWdnZXIgdGhlIGBhYm9ydGAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZXRob2QgUGxheWVyI2hhbmRsZVRlY2hBYm9ydF9cbiAqIEBmaXJlcyBQbGF5ZXIjYWJvcnRcbiAqIEBsaXN0ZW5zIFRlY2gjYWJvcnRcbiAqL1xuJ2Fib3J0Jyxcbi8qKlxuICogRmlyZXMgd2hlbiB0aGUgYnJvd3NlciBpcyBpbnRlbnRpb25hbGx5IG5vdCBnZXR0aW5nIG1lZGlhIGRhdGEuXG4gKlxuICogQGV2ZW50IFBsYXllciNzdXNwZW5kXG4gKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWdnZXIgdGhlIGBzdXNwZW5kYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG1ldGhvZCBQbGF5ZXIjaGFuZGxlVGVjaFN1c3BlbmRfXG4gKiBAZmlyZXMgUGxheWVyI3N1c3BlbmRcbiAqIEBsaXN0ZW5zIFRlY2gjc3VzcGVuZFxuICovXG4nc3VzcGVuZCcsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIGN1cnJlbnQgcGxheWxpc3QgaXMgZW1wdHkuXG4gKlxuICogQGV2ZW50IFBsYXllciNlbXB0aWVkXG4gKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWdnZXIgdGhlIGBlbXB0aWVkYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG1ldGhvZCBQbGF5ZXIjaGFuZGxlVGVjaEVtcHRpZWRfXG4gKiBAZmlyZXMgUGxheWVyI2VtcHRpZWRcbiAqIEBsaXN0ZW5zIFRlY2gjZW1wdGllZFxuICovXG4nZW1wdGllZCcsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIGdldCBtZWRpYSBkYXRhLCBidXQgZGF0YSBpcyBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEBldmVudCBQbGF5ZXIjc3RhbGxlZFxuICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICovXG5cbi8qKlxuICogUmV0cmlnZ2VyIHRoZSBgc3RhbGxlZGAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZXRob2QgUGxheWVyI2hhbmRsZVRlY2hTdGFsbGVkX1xuICogQGZpcmVzIFBsYXllciNzdGFsbGVkXG4gKiBAbGlzdGVucyBUZWNoI3N0YWxsZWRcbiAqL1xuJ3N0YWxsZWQnLFxuLyoqXG4gKiBGaXJlcyB3aGVuIHRoZSBicm93c2VyIGhhcyBsb2FkZWQgbWV0YSBkYXRhIGZvciB0aGUgYXVkaW8vdmlkZW8uXG4gKlxuICogQGV2ZW50IFBsYXllciNsb2FkZWRtZXRhZGF0YVxuICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICovXG5cbi8qKlxuICogUmV0cmlnZ2VyIHRoZSBgc3RhbGxlZGAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZXRob2QgUGxheWVyI2hhbmRsZVRlY2hMb2FkZWRtZXRhZGF0YV9cbiAqIEBmaXJlcyBQbGF5ZXIjbG9hZGVkbWV0YWRhdGFcbiAqIEBsaXN0ZW5zIFRlY2gjbG9hZGVkbWV0YWRhdGFcbiAqL1xuJ2xvYWRlZG1ldGFkYXRhJyxcbi8qKlxuICogRmlyZXMgd2hlbiB0aGUgYnJvd3NlciBoYXMgbG9hZGVkIHRoZSBjdXJyZW50IGZyYW1lIG9mIHRoZSBhdWRpby92aWRlby5cbiAqXG4gKiBAZXZlbnQgUGxheWVyI2xvYWRlZGRhdGFcbiAqIEB0eXBlIHtldmVudH1cbiAqL1xuXG4vKipcbiAqIFJldHJpZ2dlciB0aGUgYGxvYWRlZGRhdGFgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbWV0aG9kIFBsYXllciNoYW5kbGVUZWNoTG9hZGRlZGRhdGFfXG4gKiBAZmlyZXMgUGxheWVyI2xvYWRlZGRhdGFcbiAqIEBsaXN0ZW5zIFRlY2gjbG9hZGVkZGF0YVxuICovXG4nbG9hZGVkZGF0YScsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaGFzIGNoYW5nZWQuXG4gKlxuICogQGV2ZW50IFBsYXllciN0aW1ldXBkYXRlXG4gKiBAdHlwZSB7ZXZlbnR9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWdnZXIgdGhlIGB0aW1ldXBkYXRlYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG1ldGhvZCBQbGF5ZXIjaGFuZGxlVGVjaFRpbWVVcGRhdGVfXG4gKiBAZmlyZXMgUGxheWVyI3RpbWV1cGRhdGVcbiAqIEBsaXN0ZW5zIFRlY2gjdGltZXVwZGF0ZVxuICovXG4ndGltZXVwZGF0ZScsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIHZpZGVvJ3MgaW50cmluc2ljIGRpbWVuc2lvbnMgY2hhbmdlXG4gKlxuICogQGV2ZW50IFBsYXllciNyZXNpemVcbiAqIEB0eXBlIHtldmVudH1cbiAqL1xuXG4vKipcbiAqIFJldHJpZ2dlciB0aGUgYHJlc2l6ZWAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZXRob2QgUGxheWVyI2hhbmRsZVRlY2hSZXNpemVfXG4gKiBAZmlyZXMgUGxheWVyI3Jlc2l6ZVxuICogQGxpc3RlbnMgVGVjaCNyZXNpemVcbiAqL1xuJ3Jlc2l6ZScsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIHZvbHVtZSBoYXMgYmVlbiBjaGFuZ2VkXG4gKlxuICogQGV2ZW50IFBsYXllciN2b2x1bWVjaGFuZ2VcbiAqIEB0eXBlIHtldmVudH1cbiAqL1xuXG4vKipcbiAqIFJldHJpZ2dlciB0aGUgYHZvbHVtZWNoYW5nZWAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZXRob2QgUGxheWVyI2hhbmRsZVRlY2hWb2x1bWVjaGFuZ2VfXG4gKiBAZmlyZXMgUGxheWVyI3ZvbHVtZWNoYW5nZVxuICogQGxpc3RlbnMgVGVjaCN2b2x1bWVjaGFuZ2VcbiAqL1xuJ3ZvbHVtZWNoYW5nZScsXG4vKipcbiAqIEZpcmVzIHdoZW4gdGhlIHRleHQgdHJhY2sgaGFzIGJlZW4gY2hhbmdlZFxuICpcbiAqIEBldmVudCBQbGF5ZXIjdGV4dHRyYWNrY2hhbmdlXG4gKiBAdHlwZSB7ZXZlbnR9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWdnZXIgdGhlIGB0ZXh0dHJhY2tjaGFuZ2VgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbWV0aG9kIFBsYXllciNoYW5kbGVUZWNoVGV4dHRyYWNrY2hhbmdlX1xuICogQGZpcmVzIFBsYXllciN0ZXh0dHJhY2tjaGFuZ2VcbiAqIEBsaXN0ZW5zIFRlY2gjdGV4dHRyYWNrY2hhbmdlXG4gKi9cbid0ZXh0dHJhY2tjaGFuZ2UnXTsgLy8gZXZlbnRzIHRvIHF1ZXVlIHdoZW4gcGxheWJhY2sgcmF0ZSBpcyB6ZXJvXG4vLyB0aGlzIGlzIGEgaGFzaCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBtYXBwaW5nIG5vbi1jYW1lbC1jYXNlZCBldmVudCBuYW1lc1xuLy8gdG8gY2FtZWwtY2FzZWQgZnVuY3Rpb24gbmFtZXNcblxudmFyIFRFQ0hfRVZFTlRTX1FVRVVFID0ge1xuICBjYW5wbGF5OiAnQ2FuUGxheScsXG4gIGNhbnBsYXl0aHJvdWdoOiAnQ2FuUGxheVRocm91Z2gnLFxuICBwbGF5aW5nOiAnUGxheWluZycsXG4gIHNlZWtlZDogJ1NlZWtlZCdcbn07XG52YXIgQlJFQUtQT0lOVF9PUkRFUiA9IFsndGlueScsICd4c21hbGwnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJywgJ3hsYXJnZScsICdodWdlJ107XG52YXIgQlJFQUtQT0lOVF9DTEFTU0VTID0ge307IC8vIGdyZXA6IHZqcy1sYXlvdXQtdGlueVxuLy8gZ3JlcDogdmpzLWxheW91dC14LXNtYWxsXG4vLyBncmVwOiB2anMtbGF5b3V0LXNtYWxsXG4vLyBncmVwOiB2anMtbGF5b3V0LW1lZGl1bVxuLy8gZ3JlcDogdmpzLWxheW91dC1sYXJnZVxuLy8gZ3JlcDogdmpzLWxheW91dC14LWxhcmdlXG4vLyBncmVwOiB2anMtbGF5b3V0LWh1Z2VcblxuQlJFQUtQT0lOVF9PUkRFUi5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gIHZhciB2ID0gay5jaGFyQXQoMCkgPT09ICd4JyA/IFwieC1cIiArIGsuc3Vic3RyaW5nKDEpIDogaztcbiAgQlJFQUtQT0lOVF9DTEFTU0VTW2tdID0gXCJ2anMtbGF5b3V0LVwiICsgdjtcbn0pO1xudmFyIERFRkFVTFRfQlJFQUtQT0lOVFMgPSB7XG4gIHRpbnk6IDIxMCxcbiAgeHNtYWxsOiAzMjAsXG4gIHNtYWxsOiA0MjUsXG4gIG1lZGl1bTogNzY4LFxuICBsYXJnZTogMTQ0MCxcbiAgeGxhcmdlOiAyNTYwLFxuICBodWdlOiBJbmZpbml0eVxufTtcbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIGBQbGF5ZXJgIGNsYXNzIGlzIGNyZWF0ZWQgd2hlbiBhbnkgb2YgdGhlIFZpZGVvLmpzIHNldHVwIG1ldGhvZHNcbiAqIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgYSB2aWRlby5cbiAqXG4gKiBBZnRlciBhbiBpbnN0YW5jZSBoYXMgYmVlbiBjcmVhdGVkIGl0IGNhbiBiZSBhY2Nlc3NlZCBnbG9iYWxseSBpbiB0d28gd2F5czpcbiAqIDEuIEJ5IGNhbGxpbmcgYHZpZGVvanMoJ2V4YW1wbGVfdmlkZW9fMScpO2BcbiAqIDIuIEJ5IHVzaW5nIGl0IGRpcmVjdGx5IHZpYSAgYHZpZGVvanMucGxheWVycy5leGFtcGxlX3ZpZGVvXzE7YFxuICpcbiAqIEBleHRlbmRzIENvbXBvbmVudFxuICovXG5cbnZhciBQbGF5ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGxheWVyLCBfQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdGFnXG4gICAqICAgICAgICBUaGUgb3JpZ2luYWwgdmlkZW8gRE9NIGVsZW1lbnQgdXNlZCBmb3IgY29uZmlndXJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgT2JqZWN0IG9mIG9wdGlvbiBuYW1lcyBhbmQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudH5SZWFkeUNhbGxiYWNrfSBbcmVhZHldXG4gICAqICAgICAgICBSZWFkeSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIFBsYXllcih0YWcsIG9wdGlvbnMsIHJlYWR5KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRhZyBJRCBleGlzdHNcbiAgICB0YWcuaWQgPSB0YWcuaWQgfHwgb3B0aW9ucy5pZCB8fCBcInZqc192aWRlb19cIiArIG5ld0dVSUQoKTsgLy8gU2V0IE9wdGlvbnNcbiAgICAvLyBUaGUgb3B0aW9ucyBhcmd1bWVudCBvdmVycmlkZXMgb3B0aW9ucyBzZXQgaW4gdGhlIHZpZGVvIHRhZ1xuICAgIC8vIHdoaWNoIG92ZXJyaWRlcyBnbG9iYWxseSBzZXQgb3B0aW9ucy5cbiAgICAvLyBUaGlzIGxhdHRlciBwYXJ0IGNvaW5jaWRlcyB3aXRoIHRoZSBsb2FkIG9yZGVyXG4gICAgLy8gKHRhZyBtdXN0IGV4aXN0IGJlZm9yZSBQbGF5ZXIpXG5cbiAgICBvcHRpb25zID0gYXNzaWduKFBsYXllci5nZXRUYWdTZXR0aW5ncyh0YWcpLCBvcHRpb25zKTsgLy8gRGVsYXkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGNoaWxkcmVuIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXQgdXBcbiAgICAvLyBwbGF5ZXIgcHJvcGVydGllcyBmaXJzdCwgYW5kIGNhbid0IHVzZSBgdGhpc2AgYmVmb3JlIGBzdXBlcigpYFxuXG4gICAgb3B0aW9ucy5pbml0Q2hpbGRyZW4gPSBmYWxzZTsgLy8gU2FtZSB3aXRoIGNyZWF0aW5nIHRoZSBlbGVtZW50XG5cbiAgICBvcHRpb25zLmNyZWF0ZUVsID0gZmFsc2U7IC8vIGRvbid0IGF1dG8gbWl4aW4gdGhlIGV2ZW50ZWQgbWl4aW5cblxuICAgIG9wdGlvbnMuZXZlbnRlZCA9IGZhbHNlOyAvLyB3ZSBkb24ndCB3YW50IHRoZSBwbGF5ZXIgdG8gcmVwb3J0IHRvdWNoIGFjdGl2aXR5IG9uIGl0c2VsZlxuICAgIC8vIHNlZSBlbmFibGVUb3VjaEFjdGl2aXR5IGluIENvbXBvbmVudFxuXG4gICAgb3B0aW9ucy5yZXBvcnRUb3VjaEFjdGl2aXR5ID0gZmFsc2U7IC8vIElmIGxhbmd1YWdlIGlzIG5vdCBzZXQsIGdldCB0aGUgY2xvc2VzdCBsYW5nIGF0dHJpYnV0ZVxuXG4gICAgaWYgKCFvcHRpb25zLmxhbmd1YWdlKSB7XG4gICAgICBpZiAodHlwZW9mIHRhZy5jbG9zZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBjbG9zZXN0ID0gdGFnLmNsb3Nlc3QoJ1tsYW5nXScpO1xuXG4gICAgICAgIGlmIChjbG9zZXN0ICYmIGNsb3Nlc3QuZ2V0QXR0cmlidXRlKSB7XG4gICAgICAgICAgb3B0aW9ucy5sYW5ndWFnZSA9IGNsb3Nlc3QuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gdGFnO1xuXG4gICAgICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICBpZiAoZ2V0QXR0cmlidXRlcyhlbGVtZW50KS5oYXNPd25Qcm9wZXJ0eSgnbGFuZycpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxhbmd1YWdlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJ1biBiYXNlIGNvbXBvbmVudCBpbml0aWFsaXppbmcgd2l0aCBuZXcgb3B0aW9uc1xuXG5cbiAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBudWxsLCBvcHRpb25zLCByZWFkeSkgfHwgdGhpczsgLy8gQ3JlYXRlIGJvdW5kIG1ldGhvZHMgZm9yIGRvY3VtZW50IGxpc3RlbmVycy5cblxuICAgIF90aGlzLmJvdW5kRG9jdW1lbnRGdWxsc2NyZWVuQ2hhbmdlXyA9IGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmRvY3VtZW50RnVsbHNjcmVlbkNoYW5nZV8pO1xuICAgIF90aGlzLmJvdW5kRnVsbFdpbmRvd09uRXNjS2V5XyA9IGJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIF90aGlzLmZ1bGxXaW5kb3dPbkVzY0tleSk7IC8vIGNyZWF0ZSBsb2dnZXJcblxuICAgIF90aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlciQxKF90aGlzLmlkXyk7IC8vIEhvbGQgb3VyIG93biByZWZlcmVuY2UgdG8gZnVsbHNjcmVlbiBhcGkgc28gaXQgY2FuIGJlIG1vY2tlZCBpbiB0ZXN0c1xuXG4gICAgX3RoaXMuZnNBcGlfID0gRnVsbHNjcmVlbkFwaTsgLy8gVHJhY2tzIHdoZW4gYSB0ZWNoIGNoYW5nZXMgdGhlIHBvc3RlclxuXG4gICAgX3RoaXMuaXNQb3N0ZXJGcm9tVGVjaF8gPSBmYWxzZTsgLy8gSG9sZHMgY2FsbGJhY2sgaW5mbyB0aGF0IGdldHMgcXVldWVkIHdoZW4gcGxheWJhY2sgcmF0ZSBpcyB6ZXJvXG4gICAgLy8gYW5kIGEgc2VlayBpcyBoYXBwZW5pbmdcblxuICAgIF90aGlzLnF1ZXVlZENhbGxiYWNrc18gPSBbXTsgLy8gVHVybiBvZmYgQVBJIGFjY2VzcyBiZWNhdXNlIHdlJ3JlIGxvYWRpbmcgYSBuZXcgdGVjaCB0aGF0IG1pZ2h0IGxvYWQgYXN5bmNocm9ub3VzbHlcblxuICAgIF90aGlzLmlzUmVhZHlfID0gZmFsc2U7IC8vIEluaXQgc3RhdGUgaGFzU3RhcnRlZF9cblxuICAgIF90aGlzLmhhc1N0YXJ0ZWRfID0gZmFsc2U7IC8vIEluaXQgc3RhdGUgdXNlckFjdGl2ZV9cblxuICAgIF90aGlzLnVzZXJBY3RpdmVfID0gZmFsc2U7IC8vIGlmIHRoZSBnbG9iYWwgb3B0aW9uIG9iamVjdCB3YXMgYWNjaWRlbnRhbGx5IGJsb3duIGF3YXkgYnlcbiAgICAvLyBzb21lb25lLCBiYWlsIGVhcmx5IHdpdGggYW4gaW5mb3JtYXRpdmUgZXJyb3JcblxuICAgIGlmICghX3RoaXMub3B0aW9uc18gfHwgIV90aGlzLm9wdGlvbnNfLnRlY2hPcmRlciB8fCAhX3RoaXMub3B0aW9uc18udGVjaE9yZGVyLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0ZWNoT3JkZXIgc3BlY2lmaWVkLiBEaWQgeW91IG92ZXJ3cml0ZSAnICsgJ3ZpZGVvanMub3B0aW9ucyBpbnN0ZWFkIG9mIGp1c3QgY2hhbmdpbmcgdGhlICcgKyAncHJvcGVydGllcyB5b3Ugd2FudCB0byBvdmVycmlkZT8nKTtcbiAgICB9IC8vIFN0b3JlIHRoZSBvcmlnaW5hbCB0YWcgdXNlZCB0byBzZXQgb3B0aW9uc1xuXG5cbiAgICBfdGhpcy50YWcgPSB0YWc7IC8vIFN0b3JlIHRoZSB0YWcgYXR0cmlidXRlcyB1c2VkIHRvIHJlc3RvcmUgaHRtbDUgZWxlbWVudFxuXG4gICAgX3RoaXMudGFnQXR0cmlidXRlcyA9IHRhZyAmJiBnZXRBdHRyaWJ1dGVzKHRhZyk7IC8vIFVwZGF0ZSBjdXJyZW50IGxhbmd1YWdlXG5cbiAgICBfdGhpcy5sYW5ndWFnZShfdGhpcy5vcHRpb25zXy5sYW5ndWFnZSk7IC8vIFVwZGF0ZSBTdXBwb3J0ZWQgTGFuZ3VhZ2VzXG5cblxuICAgIGlmIChvcHRpb25zLmxhbmd1YWdlcykge1xuICAgICAgLy8gTm9ybWFsaXNlIHBsYXllciBvcHRpb24gbGFuZ3VhZ2VzIHRvIGxvd2VyY2FzZVxuICAgICAgdmFyIGxhbmd1YWdlc1RvTG93ZXIgPSB7fTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnMubGFuZ3VhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGxhbmd1YWdlc1RvTG93ZXJbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IG9wdGlvbnMubGFuZ3VhZ2VzW25hbWVdO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5sYW5ndWFnZXNfID0gbGFuZ3VhZ2VzVG9Mb3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMubGFuZ3VhZ2VzXyA9IFBsYXllci5wcm90b3R5cGUub3B0aW9uc18ubGFuZ3VhZ2VzO1xuICAgIH1cblxuICAgIF90aGlzLnJlc2V0Q2FjaGVfKCk7IC8vIFNldCBwb3N0ZXJcblxuXG4gICAgX3RoaXMucG9zdGVyXyA9IG9wdGlvbnMucG9zdGVyIHx8ICcnOyAvLyBTZXQgY29udHJvbHNcblxuICAgIF90aGlzLmNvbnRyb2xzXyA9ICEhb3B0aW9ucy5jb250cm9sczsgLy8gT3JpZ2luYWwgdGFnIHNldHRpbmdzIHN0b3JlZCBpbiBvcHRpb25zXG4gICAgLy8gbm93IHJlbW92ZSBpbW1lZGlhdGVseSBzbyBuYXRpdmUgY29udHJvbHMgZG9uJ3QgZmxhc2guXG4gICAgLy8gTWF5IGJlIHR1cm5lZCBiYWNrIG9uIGJ5IEhUTUw1IHRlY2ggaWYgbmF0aXZlQ29udHJvbHNGb3JUb3VjaCBpcyB0cnVlXG5cbiAgICB0YWcuY29udHJvbHMgPSBmYWxzZTtcbiAgICB0YWcucmVtb3ZlQXR0cmlidXRlKCdjb250cm9scycpO1xuICAgIF90aGlzLmNoYW5naW5nU3JjXyA9IGZhbHNlO1xuICAgIF90aGlzLnBsYXlDYWxsYmFja3NfID0gW107XG4gICAgX3RoaXMucGxheVRlcm1pbmF0ZWRRdWV1ZV8gPSBbXTsgLy8gdGhlIGF0dHJpYnV0ZSBvdmVycmlkZXMgdGhlIG9wdGlvblxuXG4gICAgaWYgKHRhZy5oYXNBdHRyaWJ1dGUoJ2F1dG9wbGF5JykpIHtcbiAgICAgIF90aGlzLmF1dG9wbGF5KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdGhlcndpc2UgdXNlIHRoZSBzZXR0ZXIgdG8gdmFsaWRhdGUgYW5kXG4gICAgICAvLyBzZXQgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgICBfdGhpcy5hdXRvcGxheShfdGhpcy5vcHRpb25zXy5hdXRvcGxheSk7XG4gICAgfSAvLyBjaGVjayBwbHVnaW5zXG5cblxuICAgIGlmIChvcHRpb25zLnBsdWdpbnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMucGx1Z2lucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIF90aGlzW25hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGx1Z2luIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKlxuICAgICAqIFN0b3JlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBzY3J1YmJpbmdcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdXNlciBpcyBzY3J1YmJpbmdcbiAgICAgKi9cblxuXG4gICAgX3RoaXMuc2NydWJiaW5nXyA9IGZhbHNlO1xuICAgIF90aGlzLmVsXyA9IF90aGlzLmNyZWF0ZUVsKCk7IC8vIE1ha2UgdGhpcyBhbiBldmVudGVkIG9iamVjdCBhbmQgdXNlIGBlbF9gIGFzIGl0cyBldmVudCBidXMuXG5cbiAgICBldmVudGVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCB7XG4gICAgICBldmVudEJ1c0tleTogJ2VsXydcbiAgICB9KTtcblxuICAgIGlmIChfdGhpcy5mbHVpZF8pIHtcbiAgICAgIF90aGlzLm9uKCdwbGF5ZXJyZXNldCcsIF90aGlzLnVwZGF0ZVN0eWxlRWxfKTtcbiAgICB9IC8vIFdlIGFsc28gd2FudCB0byBwYXNzIHRoZSBvcmlnaW5hbCBwbGF5ZXIgb3B0aW9ucyB0byBlYWNoIGNvbXBvbmVudCBhbmQgcGx1Z2luXG4gICAgLy8gYXMgd2VsbCBzbyB0aGV5IGRvbid0IG5lZWQgdG8gcmVhY2ggYmFjayBpbnRvIHRoZSBwbGF5ZXIgZm9yIG9wdGlvbnMgbGF0ZXIuXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIGRvIGFub3RoZXIgY29weSBvZiB0aGlzLm9wdGlvbnNfIHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoXG4gICAgLy8gYW4gaW5maW5pdGUgbG9vcC5cblxuXG4gICAgdmFyIHBsYXllck9wdGlvbnNDb3B5ID0gbWVyZ2VPcHRpb25zKF90aGlzLm9wdGlvbnNfKTsgLy8gTG9hZCBwbHVnaW5zXG5cbiAgICBpZiAob3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICBPYmplY3Qua2V5cyhvcHRpb25zLnBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgX3RoaXNbbmFtZV0ob3B0aW9ucy5wbHVnaW5zW25hbWVdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIF90aGlzLm9wdGlvbnNfLnBsYXllck9wdGlvbnMgPSBwbGF5ZXJPcHRpb25zQ29weTtcbiAgICBfdGhpcy5taWRkbGV3YXJlXyA9IFtdO1xuXG4gICAgX3RoaXMuaW5pdENoaWxkcmVuKCk7IC8vIFNldCBpc0F1ZGlvIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IGFuIGF1ZGlvIHRhZyB3YXMgdXNlZFxuXG5cbiAgICBfdGhpcy5pc0F1ZGlvKHRhZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYXVkaW8nKTsgLy8gVXBkYXRlIGNvbnRyb2xzIGNsYXNzTmFtZS4gQ2FuJ3QgZG8gdGhpcyB3aGVuIHRoZSBjb250cm9scyBhcmUgaW5pdGlhbGx5XG4gICAgLy8gc2V0IGJlY2F1c2UgdGhlIGVsZW1lbnQgZG9lc24ndCBleGlzdCB5ZXQuXG5cblxuICAgIGlmIChfdGhpcy5jb250cm9scygpKSB7XG4gICAgICBfdGhpcy5hZGRDbGFzcygndmpzLWNvbnRyb2xzLWVuYWJsZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMuYWRkQ2xhc3MoJ3Zqcy1jb250cm9scy1kaXNhYmxlZCcpO1xuICAgIH0gLy8gU2V0IEFSSUEgbGFiZWwgYW5kIHJlZ2lvbiByb2xlIGRlcGVuZGluZyBvbiBwbGF5ZXIgdHlwZVxuXG5cbiAgICBfdGhpcy5lbF8uc2V0QXR0cmlidXRlKCdyb2xlJywgJ3JlZ2lvbicpO1xuXG4gICAgaWYgKF90aGlzLmlzQXVkaW8oKSkge1xuICAgICAgX3RoaXMuZWxfLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIF90aGlzLmxvY2FsaXplKCdBdWRpbyBQbGF5ZXInKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmVsXy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBfdGhpcy5sb2NhbGl6ZSgnVmlkZW8gUGxheWVyJykpO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5pc0F1ZGlvKCkpIHtcbiAgICAgIF90aGlzLmFkZENsYXNzKCd2anMtYXVkaW8nKTtcbiAgICB9XG5cbiAgICBpZiAoX3RoaXMuZmxleE5vdFN1cHBvcnRlZF8oKSkge1xuICAgICAgX3RoaXMuYWRkQ2xhc3MoJ3Zqcy1uby1mbGV4Jyk7XG4gICAgfSAvLyBUT0RPOiBNYWtlIHRoaXMgc21hcnRlci4gVG9nZ2xlIHVzZXIgc3RhdGUgYmV0d2VlbiB0b3VjaGluZy9tb3VzaW5nXG4gICAgLy8gdXNpbmcgZXZlbnRzLCBzaW5jZSBkZXZpY2VzIGNhbiBoYXZlIGJvdGggdG91Y2ggYW5kIG1vdXNlIGV2ZW50cy5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgY2hlY2sgYmUgcGVyZm9ybWVkIGFnYWluIHdoZW4gdGhlIHdpbmRvdyBzd2l0Y2hlcyBiZXR3ZWVuIG1vbml0b3JzXG4gICAgLy8gKFNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy92aWRlby5qcy9pc3N1ZXMvNTY4MylcblxuXG4gICAgaWYgKFRPVUNIX0VOQUJMRUQpIHtcbiAgICAgIF90aGlzLmFkZENsYXNzKCd2anMtdG91Y2gtZW5hYmxlZCcpO1xuICAgIH0gLy8gaU9TIFNhZmFyaSBoYXMgYnJva2VuIGhvdmVyIGhhbmRsaW5nXG5cblxuICAgIGlmICghSVNfSU9TKSB7XG4gICAgICBfdGhpcy5hZGRDbGFzcygndmpzLXdvcmtpbmdob3ZlcicpO1xuICAgIH0gLy8gTWFrZSBwbGF5ZXIgZWFzaWx5IGZpbmRhYmxlIGJ5IElEXG5cblxuICAgIFBsYXllci5wbGF5ZXJzW190aGlzLmlkX10gPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKTsgLy8gQWRkIGEgbWFqb3IgdmVyc2lvbiBjbGFzcyB0byBhaWQgY3NzIGluIHBsdWdpbnNcblxuICAgIHZhciBtYWpvclZlcnNpb24gPSB2ZXJzaW9uLnNwbGl0KCcuJylbMF07XG5cbiAgICBfdGhpcy5hZGRDbGFzcyhcInZqcy12XCIgKyBtYWpvclZlcnNpb24pOyAvLyBXaGVuIHRoZSBwbGF5ZXIgaXMgZmlyc3QgaW5pdGlhbGl6ZWQsIHRyaWdnZXIgYWN0aXZpdHkgc28gY29tcG9uZW50c1xuICAgIC8vIGxpa2UgdGhlIGNvbnRyb2wgYmFyIHNob3cgdGhlbXNlbHZlcyBpZiBuZWVkZWRcblxuXG4gICAgX3RoaXMudXNlckFjdGl2ZSh0cnVlKTtcblxuICAgIF90aGlzLnJlcG9ydFVzZXJBY3Rpdml0eSgpO1xuXG4gICAgX3RoaXMub25lKCdwbGF5JywgX3RoaXMubGlzdGVuRm9yVXNlckFjdGl2aXR5Xyk7XG5cbiAgICBfdGhpcy5vbignc3RhZ2VjbGljaycsIF90aGlzLmhhbmRsZVN0YWdlQ2xpY2tfKTtcblxuICAgIF90aGlzLm9uKCdrZXlkb3duJywgX3RoaXMuaGFuZGxlS2V5RG93bik7XG5cbiAgICBfdGhpcy5icmVha3BvaW50cyhfdGhpcy5vcHRpb25zXy5icmVha3BvaW50cyk7XG5cbiAgICBfdGhpcy5yZXNwb25zaXZlKF90aGlzLm9wdGlvbnNfLnJlc3BvbnNpdmUpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgdmlkZW8gcGxheWVyIGFuZCBkb2VzIGFueSBuZWNlc3NhcnkgY2xlYW51cC5cbiAgICpcbiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgaWYgeW91IGFyZSBkeW5hbWljYWxseSBhZGRpbmcgYW5kIHJlbW92aW5nIHZpZGVvc1xuICAgKiB0by9mcm9tIHRoZSBET00uXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjZGlzcG9zZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQbGF5ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBwbGF5ZXIgaXMgYmVpbmcgZGlzcG9zZWQgb2YuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI2Rpc3Bvc2VcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy50cmlnZ2VyKCdkaXNwb3NlJyk7IC8vIHByZXZlbnQgZGlzcG9zZSBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnKTsgLy8gTWFrZSBzdXJlIGFsbCBwbGF5ZXItc3BlY2lmaWMgZG9jdW1lbnQgbGlzdGVuZXJzIGFyZSB1bmJvdW5kLiBUaGlzIGlzXG5cbiAgICBvZmYoZG9jdW1lbnQsIHRoaXMuZnNBcGlfLmZ1bGxzY3JlZW5jaGFuZ2UsIHRoaXMuYm91bmREb2N1bWVudEZ1bGxzY3JlZW5DaGFuZ2VfKTtcbiAgICBvZmYoZG9jdW1lbnQsICdrZXlkb3duJywgdGhpcy5ib3VuZEZ1bGxXaW5kb3dPbkVzY0tleV8pO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVFbF8gJiYgdGhpcy5zdHlsZUVsXy5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLnN0eWxlRWxfLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsXyk7XG4gICAgICB0aGlzLnN0eWxlRWxfID0gbnVsbDtcbiAgICB9IC8vIEtpbGwgcmVmZXJlbmNlIHRvIHRoaXMgcGxheWVyXG5cblxuICAgIFBsYXllci5wbGF5ZXJzW3RoaXMuaWRfXSA9IG51bGw7XG5cbiAgICBpZiAodGhpcy50YWcgJiYgdGhpcy50YWcucGxheWVyKSB7XG4gICAgICB0aGlzLnRhZy5wbGF5ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsXyAmJiB0aGlzLmVsXy5wbGF5ZXIpIHtcbiAgICAgIHRoaXMuZWxfLnBsYXllciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVjaF8pIHtcbiAgICAgIHRoaXMudGVjaF8uZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pc1Bvc3RlckZyb21UZWNoXyA9IGZhbHNlO1xuICAgICAgdGhpcy5wb3N0ZXJfID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGxheWVyRWxJbmdlc3RfKSB7XG4gICAgICB0aGlzLnBsYXllckVsSW5nZXN0XyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICB0aGlzLnRhZyA9IG51bGw7XG4gICAgfVxuXG4gICAgY2xlYXJDYWNoZUZvclBsYXllcih0aGlzKTsgLy8gcmVtb3ZlIGFsbCBldmVudCBoYW5kbGVycyBmb3IgdHJhY2sgbGlzdHNcbiAgICAvLyBhbGwgdHJhY2tzIGFuZCB0cmFjayBsaXN0ZW5lcnMgYXJlIHJlbW92ZWQgb25cbiAgICAvLyB0ZWNoIGRpc3Bvc2VcblxuICAgIEFMTC5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcHJvcHMgPSBBTExbbmFtZV07XG5cbiAgICAgIHZhciBsaXN0ID0gX3RoaXMyW3Byb3BzLmdldHRlck5hbWVdKCk7IC8vIGlmIGl0IGlzIG5vdCBhIG5hdGl2ZSBsaXN0XG4gICAgICAvLyB3ZSBoYXZlIHRvIG1hbnVhbGx5IHJlbW92ZSBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobGlzdCAmJiBsaXN0Lm9mZikge1xuICAgICAgICBsaXN0Lm9mZigpO1xuICAgICAgfVxuICAgIH0pOyAvLyB0aGUgYWN0dWFsIC5lbF8gaXMgcmVtb3ZlZCBoZXJlXG5cbiAgICBfQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYFBsYXllcmAncyBET00gZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH1cbiAgICogICAgICAgICBUaGUgRE9NIGVsZW1lbnQgdGhhdCBnZXRzIGNyZWF0ZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNyZWF0ZUVsID0gZnVuY3Rpb24gY3JlYXRlRWwoKSB7XG4gICAgdmFyIHRhZyA9IHRoaXMudGFnO1xuICAgIHZhciBlbDtcbiAgICB2YXIgcGxheWVyRWxJbmdlc3QgPSB0aGlzLnBsYXllckVsSW5nZXN0XyA9IHRhZy5wYXJlbnROb2RlICYmIHRhZy5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSAmJiB0YWcucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtdmpzLXBsYXllcicpO1xuICAgIHZhciBkaXZFbWJlZCA9IHRoaXMudGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZpZGVvLWpzJztcblxuICAgIGlmIChwbGF5ZXJFbEluZ2VzdCkge1xuICAgICAgZWwgPSB0aGlzLmVsXyA9IHRhZy5wYXJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoIWRpdkVtYmVkKSB7XG4gICAgICBlbCA9IHRoaXMuZWxfID0gX0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWwuY2FsbCh0aGlzLCAnZGl2Jyk7XG4gICAgfSAvLyBDb3B5IG92ZXIgYWxsIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHRhZywgaW5jbHVkaW5nIElEIGFuZCBjbGFzc1xuICAgIC8vIElEIHdpbGwgbm93IHJlZmVyZW5jZSBwbGF5ZXIgYm94LCBub3QgdGhlIHZpZGVvIHRhZ1xuXG5cbiAgICB2YXIgYXR0cnMgPSBnZXRBdHRyaWJ1dGVzKHRhZyk7XG5cbiAgICBpZiAoZGl2RW1iZWQpIHtcbiAgICAgIGVsID0gdGhpcy5lbF8gPSB0YWc7XG4gICAgICB0YWcgPSB0aGlzLnRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAgIHdoaWxlIChlbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgdGFnLmFwcGVuZENoaWxkKGVsLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc0NsYXNzKGVsLCAndmlkZW8tanMnKSkge1xuICAgICAgICBhZGRDbGFzcyhlbCwgJ3ZpZGVvLWpzJyk7XG4gICAgICB9XG5cbiAgICAgIGVsLmFwcGVuZENoaWxkKHRhZyk7XG4gICAgICBwbGF5ZXJFbEluZ2VzdCA9IHRoaXMucGxheWVyRWxJbmdlc3RfID0gZWw7IC8vIG1vdmUgcHJvcGVydGllcyBvdmVyIGZyb20gb3VyIGN1c3RvbSBgdmlkZW8tanNgIGVsZW1lbnRcbiAgICAgIC8vIHRvIG91ciBuZXcgYHZpZGVvYCBlbGVtZW50LiBUaGlzIHdpbGwgbW92ZSB0aGluZ3MgbGlrZVxuICAgICAgLy8gYHNyY2Agb3IgYGNvbnRyb2xzYCB0aGF0IHdlcmUgc2V0IHZpYSBqcyBiZWZvcmUgdGhlIHBsYXllclxuICAgICAgLy8gd2FzIGluaXRpYWxpemVkLlxuXG4gICAgICBPYmplY3Qua2V5cyhlbCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRhZ1trXSA9IGVsW2tdO1xuICAgICAgICB9IGNhdGNoIChlKSB7Ly8gd2UgZ290IGEgYSBwcm9wZXJ0eSBsaWtlIG91dGVySFRNTCB3aGljaCB3ZSBjYW4ndCBhY3R1YWxseSBjb3B5LCBpZ25vcmUgaXRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBzZXQgdGFiaW5kZXggdG8gLTEgdG8gcmVtb3ZlIHRoZSB2aWRlbyBlbGVtZW50IGZyb20gdGhlIGZvY3VzIG9yZGVyXG5cblxuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgYXR0cnMudGFiaW5kZXggPSAnLTEnOyAvLyBXb3JrYXJvdW5kIGZvciAjNDU4MyAoSkFXUytJRSBkb2Vzbid0IGFubm91bmNlIEJQQiBvciBwbGF5IGJ1dHRvbiksIGFuZFxuICAgIC8vIGZvciB0aGUgc2FtZSBpc3N1ZSB3aXRoIENocm9tZSAob24gV2luZG93cykgd2l0aCBKQVdTLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRnJlZWRvbVNjaWVudGlmaWMvVkZPLXN0YW5kYXJkcy1zdXBwb3J0L2lzc3Vlcy83OFxuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCBkZXRlY3QgaWYgSkFXUyBpcyBiZWluZyB1c2VkLCBidXQgdGhpcyBBUklBIGF0dHJpYnV0ZVxuICAgIC8vICBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvciBvZiBJRTExIG9yIENocm9tZSBpZiBKQVdTIGlzIG5vdCBiZWluZyB1c2VkXG5cbiAgICBpZiAoSUVfVkVSU0lPTiB8fCBJU19DSFJPTUUgJiYgSVNfV0lORE9XUykge1xuICAgICAgdGFnLnNldEF0dHJpYnV0ZSgncm9sZScsICdhcHBsaWNhdGlvbicpO1xuICAgICAgYXR0cnMucm9sZSA9ICdhcHBsaWNhdGlvbic7XG4gICAgfSAvLyBSZW1vdmUgd2lkdGgvaGVpZ2h0IGF0dHJzIGZyb20gdGFnIHNvIENTUyBjYW4gbWFrZSBpdCAxMDAlIHdpZHRoL2hlaWdodFxuXG5cbiAgICB0YWcucmVtb3ZlQXR0cmlidXRlKCd3aWR0aCcpO1xuICAgIHRhZy5yZW1vdmVBdHRyaWJ1dGUoJ2hlaWdodCcpO1xuXG4gICAgaWYgKCd3aWR0aCcgaW4gYXR0cnMpIHtcbiAgICAgIGRlbGV0ZSBhdHRycy53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAoJ2hlaWdodCcgaW4gYXR0cnMpIHtcbiAgICAgIGRlbGV0ZSBhdHRycy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgIC8vIGRvbid0IGNvcHkgb3ZlciB0aGUgY2xhc3MgYXR0cmlidXRlIHRvIHRoZSBwbGF5ZXIgZWxlbWVudCB3aGVuIHdlJ3JlIGluIGEgZGl2IGVtYmVkXG4gICAgICAvLyB0aGUgY2xhc3MgaXMgYWxyZWFkeSBzZXQgdXAgcHJvcGVybHkgaW4gdGhlIGRpdkVtYmVkIGNhc2VcbiAgICAgIC8vIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgdmlkZW8tanNgIGNsYXNzIGRvZXNuJ3QgZ2V0IGxvc3RcbiAgICAgIGlmICghKGRpdkVtYmVkICYmIGF0dHIgPT09ICdjbGFzcycpKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCBhdHRyc1thdHRyXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXZFbWJlZCkge1xuICAgICAgICB0YWcuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gVXBkYXRlIHRhZyBpZC9jbGFzcyBmb3IgdXNlIGFzIEhUTUw1IHBsYXliYWNrIHRlY2hcbiAgICAvLyBNaWdodCB0aGluayB3ZSBzaG91bGQgZG8gdGhpcyBhZnRlciBlbWJlZGRpbmcgaW4gY29udGFpbmVyIHNvIC52anMtdGVjaCBjbGFzc1xuICAgIC8vIGRvZXNuJ3QgZmxhc2ggMTAwJSB3aWR0aC9oZWlnaHQsIGJ1dCBjbGFzcyBvbmx5IGFwcGxpZXMgd2l0aCAudmlkZW8tanMgcGFyZW50XG5cbiAgICB0YWcucGxheWVySWQgPSB0YWcuaWQ7XG4gICAgdGFnLmlkICs9ICdfaHRtbDVfYXBpJztcbiAgICB0YWcuY2xhc3NOYW1lID0gJ3Zqcy10ZWNoJzsgLy8gTWFrZSBwbGF5ZXIgZmluZGFibGUgb24gZWxlbWVudHNcblxuICAgIHRhZy5wbGF5ZXIgPSBlbC5wbGF5ZXIgPSB0aGlzOyAvLyBEZWZhdWx0IHN0YXRlIG9mIHZpZGVvIGlzIHBhdXNlZFxuXG4gICAgdGhpcy5hZGRDbGFzcygndmpzLXBhdXNlZCcpOyAvLyBBZGQgYSBzdHlsZSBlbGVtZW50IGluIHRoZSBwbGF5ZXIgdGhhdCB3ZSdsbCB1c2UgdG8gc2V0IHRoZSB3aWR0aC9oZWlnaHRcbiAgICAvLyBvZiB0aGUgcGxheWVyIGluIGEgd2F5IHRoYXQncyBzdGlsbCBvdmVycmlkZWFibGUgYnkgQ1NTLCBqdXN0IGxpa2UgdGhlXG4gICAgLy8gdmlkZW8gZWxlbWVudFxuXG4gICAgaWYgKHdpbmRvdyQxLlZJREVPSlNfTk9fRFlOQU1JQ19TVFlMRSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdHlsZUVsXyA9IGNyZWF0ZVN0eWxlRWxlbWVudCgndmpzLXN0eWxlcy1kaW1lbnNpb25zJyk7XG4gICAgICB2YXIgZGVmYXVsdHNTdHlsZUVsID0gJCgnLnZqcy1zdHlsZXMtZGVmYXVsdHMnKTtcbiAgICAgIHZhciBoZWFkID0gJCgnaGVhZCcpO1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUodGhpcy5zdHlsZUVsXywgZGVmYXVsdHNTdHlsZUVsID8gZGVmYXVsdHNTdHlsZUVsLm5leHRTaWJsaW5nIDogaGVhZC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGxfID0gZmFsc2U7XG4gICAgdGhpcy5mbHVpZF8gPSBmYWxzZTsgLy8gUGFzcyBpbiB0aGUgd2lkdGgvaGVpZ2h0L2FzcGVjdFJhdGlvIG9wdGlvbnMgd2hpY2ggd2lsbCB1cGRhdGUgdGhlIHN0eWxlIGVsXG5cbiAgICB0aGlzLndpZHRoKHRoaXMub3B0aW9uc18ud2lkdGgpO1xuICAgIHRoaXMuaGVpZ2h0KHRoaXMub3B0aW9uc18uaGVpZ2h0KTtcbiAgICB0aGlzLmZpbGwodGhpcy5vcHRpb25zXy5maWxsKTtcbiAgICB0aGlzLmZsdWlkKHRoaXMub3B0aW9uc18uZmx1aWQpO1xuICAgIHRoaXMuYXNwZWN0UmF0aW8odGhpcy5vcHRpb25zXy5hc3BlY3RSYXRpbyk7IC8vIEhpZGUgYW55IGxpbmtzIHdpdGhpbiB0aGUgdmlkZW8vYXVkaW8gdGFnLFxuICAgIC8vIGJlY2F1c2UgSUUgZG9lc24ndCBoaWRlIHRoZW0gY29tcGxldGVseSBmcm9tIHNjcmVlbiByZWFkZXJzLlxuXG4gICAgdmFyIGxpbmtzID0gdGFnLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlua0VsID0gbGlua3MuaXRlbShpKTtcbiAgICAgIGFkZENsYXNzKGxpbmtFbCwgJ3Zqcy1oaWRkZW4nKTtcbiAgICAgIGxpbmtFbC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICdoaWRkZW4nKTtcbiAgICB9IC8vIGluc2VydEVsRmlyc3Qgc2VlbXMgdG8gY2F1c2UgdGhlIG5ldHdvcmtTdGF0ZSB0byBmbGlja2VyIGZyb20gMyB0byAyLCBzb1xuICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsIGZvciBsYXRlciBzbyB3ZSBjYW4ga25vdyBpZiB0aGUgc291cmNlIG9yaWdpbmFsbHkgZmFpbGVkXG5cblxuICAgIHRhZy5pbml0TmV0d29ya1N0YXRlXyA9IHRhZy5uZXR3b3JrU3RhdGU7IC8vIFdyYXAgdmlkZW8gdGFnIGluIGRpdiAoZWwvYm94KSBjb250YWluZXJcblxuICAgIGlmICh0YWcucGFyZW50Tm9kZSAmJiAhcGxheWVyRWxJbmdlc3QpIHtcbiAgICAgIHRhZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgdGFnKTtcbiAgICB9IC8vIGluc2VydCB0aGUgdGFnIGFzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgcGxheWVyIGVsZW1lbnRcbiAgICAvLyB0aGVuIG1hbnVhbGx5IGFkZCBpdCB0byB0aGUgY2hpbGRyZW4gYXJyYXkgc28gdGhhdCB0aGlzLmFkZENoaWxkXG4gICAgLy8gd2lsbCB3b3JrIHByb3Blcmx5IGZvciBvdGhlciBjb21wb25lbnRzXG4gICAgLy9cbiAgICAvLyBCcmVha3MgaVBob25lLCBmaXhlZCBpbiBIVE1MNSBzZXR1cC5cblxuXG4gICAgcHJlcGVuZFRvKHRhZywgZWwpO1xuICAgIHRoaXMuY2hpbGRyZW5fLnVuc2hpZnQodGFnKTsgLy8gU2V0IGxhbmcgYXR0ciBvbiBwbGF5ZXIgdG8gZW5zdXJlIENTUyA6bGFuZygpIGluIGNvbnNpc3RlbnQgd2l0aCBwbGF5ZXJcbiAgICAvLyBpZiBpdCdzIGJlZW4gc2V0IHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdG8gdGhlIGRvY1xuXG4gICAgdGhpcy5lbF8uc2V0QXR0cmlidXRlKCdsYW5nJywgdGhpcy5sYW5ndWFnZV8pO1xuICAgIHRoaXMuZWxfID0gZWw7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8qKlxuICAgKiBBIGdldHRlci9zZXR0ZXIgZm9yIHRoZSBgUGxheWVyYCdzIHdpZHRoLiBSZXR1cm5zIHRoZSBwbGF5ZXIncyBjb25maWd1cmVkIHZhbHVlLlxuICAgKiBUbyBnZXQgdGhlIGN1cnJlbnQgd2lkdGggdXNlIGBjdXJyZW50V2lkdGgoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWVdXG4gICAqICAgICAgICBUaGUgdmFsdWUgdG8gc2V0IHRoZSBgUGxheWVyYCdzIHdpZHRoIHRvLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIGBQbGF5ZXJgIHdoZW4gZ2V0dGluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2lkdGggPSBmdW5jdGlvbiB3aWR0aCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbignd2lkdGgnLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEEgZ2V0dGVyL3NldHRlciBmb3IgdGhlIGBQbGF5ZXJgJ3MgaGVpZ2h0LiBSZXR1cm5zIHRoZSBwbGF5ZXIncyBjb25maWd1cmVkIHZhbHVlLlxuICAgKiBUbyBnZXQgdGhlIGN1cnJlbnQgaGVpZ2h0IHVzZSBgY3VycmVudGhlaWdodCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZV1cbiAgICogICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGBQbGF5ZXJgJ3MgaGVpZ3RoIHRvLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgaGVpZ2h0IG9mIHRoZSBgUGxheWVyYCB3aGVuIGdldHRpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhlaWdodCA9IGZ1bmN0aW9uIGhlaWdodCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbignaGVpZ2h0JywgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBBIGdldHRlci9zZXR0ZXIgZm9yIHRoZSBgUGxheWVyYCdzIHdpZHRoICYgaGVpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGltZW5zaW9uXG4gICAqICAgICAgICBUaGlzIHN0cmluZyBjYW4gYmU6XG4gICAqICAgICAgICAtICd3aWR0aCdcbiAgICogICAgICAgIC0gJ2hlaWdodCdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZV1cbiAgICogICAgICAgIFZhbHVlIGZvciBkaW1lbnNpb24gc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBkaW1lbnNpb24gYXJndW1lbnRzIHZhbHVlIHdoZW4gZ2V0dGluZyAod2lkdGgvaGVpZ2h0KS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGltZW5zaW9uID0gZnVuY3Rpb24gZGltZW5zaW9uKF9kaW1lbnNpb24sIHZhbHVlKSB7XG4gICAgdmFyIHByaXZEaW1lbnNpb24gPSBfZGltZW5zaW9uICsgJ18nO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzW3ByaXZEaW1lbnNpb25dIHx8IDA7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgLy8gSWYgYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuLCByZXNldCB0aGUgZGltZW5zaW9uIHRvIGJlIGF1dG9tYXRpY1xuICAgICAgdGhpc1twcml2RGltZW5zaW9uXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlU3R5bGVFbF8oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VkVmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cbiAgICBpZiAoaXNOYU4ocGFyc2VkVmFsKSkge1xuICAgICAgbG9nLmVycm9yKFwiSW1wcm9wZXIgdmFsdWUgXFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgc3VwcGxpZWQgZm9yIGZvciBcIiArIF9kaW1lbnNpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXNbcHJpdkRpbWVuc2lvbl0gPSBwYXJzZWRWYWw7XG4gICAgdGhpcy51cGRhdGVTdHlsZUVsXygpO1xuICB9XG4gIC8qKlxuICAgKiBBIGdldHRlci9zZXR0ZXIvdG9nZ2xlciBmb3IgdGhlIHZqcy1mbHVpZCBgY2xhc3NOYW1lYCBvbiB0aGUgYFBsYXllcmAuXG4gICAqXG4gICAqIFR1cm5pbmcgdGhpcyBvbiB3aWxsIHR1cm4gb2ZmIGZpbGwgbW9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYm9vbF1cbiAgICogICAgICAgIC0gQSB2YWx1ZSBvZiB0cnVlIGFkZHMgdGhlIGNsYXNzLlxuICAgKiAgICAgICAgLSBBIHZhbHVlIG9mIGZhbHNlIHJlbW92ZXMgdGhlIGNsYXNzLlxuICAgKiAgICAgICAgLSBObyB2YWx1ZSB3aWxsIGJlIGEgZ2V0dGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufHVuZGVmaW5lZH1cbiAgICogICAgICAgICAtIFRoZSB2YWx1ZSBvZiBmbHVpZCB3aGVuIGdldHRpbmcuXG4gICAqICAgICAgICAgLSBgdW5kZWZpbmVkYCB3aGVuIHNldHRpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZsdWlkID0gZnVuY3Rpb24gZmx1aWQoYm9vbCkge1xuICAgIGlmIChib29sID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZmx1aWRfO1xuICAgIH1cblxuICAgIHRoaXMuZmx1aWRfID0gISFib29sO1xuXG4gICAgaWYgKGlzRXZlbnRlZCh0aGlzKSkge1xuICAgICAgdGhpcy5vZmYoJ3BsYXllcnJlc2V0JywgdGhpcy51cGRhdGVTdHlsZUVsXyk7XG4gICAgfVxuXG4gICAgaWYgKGJvb2wpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1mbHVpZCcpO1xuICAgICAgdGhpcy5maWxsKGZhbHNlKTtcbiAgICAgIGFkZEV2ZW50ZWRDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub24oJ3BsYXllcnJlc2V0JywgdGhpcy51cGRhdGVTdHlsZUVsXyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWZsdWlkJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdHlsZUVsXygpO1xuICB9XG4gIC8qKlxuICAgKiBBIGdldHRlci9zZXR0ZXIvdG9nZ2xlciBmb3IgdGhlIHZqcy1maWxsIGBjbGFzc05hbWVgIG9uIHRoZSBgUGxheWVyYC5cbiAgICpcbiAgICogVHVybmluZyB0aGlzIG9uIHdpbGwgdHVybiBvZmYgZmx1aWQgbW9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYm9vbF1cbiAgICogICAgICAgIC0gQSB2YWx1ZSBvZiB0cnVlIGFkZHMgdGhlIGNsYXNzLlxuICAgKiAgICAgICAgLSBBIHZhbHVlIG9mIGZhbHNlIHJlbW92ZXMgdGhlIGNsYXNzLlxuICAgKiAgICAgICAgLSBObyB2YWx1ZSB3aWxsIGJlIGEgZ2V0dGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufHVuZGVmaW5lZH1cbiAgICogICAgICAgICAtIFRoZSB2YWx1ZSBvZiBmbHVpZCB3aGVuIGdldHRpbmcuXG4gICAqICAgICAgICAgLSBgdW5kZWZpbmVkYCB3aGVuIHNldHRpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZpbGwgPSBmdW5jdGlvbiBmaWxsKGJvb2wpIHtcbiAgICBpZiAoYm9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmZpbGxfO1xuICAgIH1cblxuICAgIHRoaXMuZmlsbF8gPSAhIWJvb2w7XG5cbiAgICBpZiAoYm9vbCkge1xuICAgICAgdGhpcy5hZGRDbGFzcygndmpzLWZpbGwnKTtcbiAgICAgIHRoaXMuZmx1aWQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZmlsbCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0L1NldCB0aGUgYXNwZWN0IHJhdGlvXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmF0aW9dXG4gICAqICAgICAgICBBc3BlY3QgcmF0aW8gZm9yIHBsYXllclxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKiAgICAgICAgIHJldHVybnMgdGhlIGN1cnJlbnQgYXNwZWN0IHJhdGlvIHdoZW4gZ2V0dGluZ1xuICAgKi9cblxuICAvKipcbiAgICogQSBnZXR0ZXIvc2V0dGVyIGZvciB0aGUgYFBsYXllcmAncyBhc3BlY3QgcmF0aW8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmF0aW9dXG4gICAqICAgICAgICBUaGUgdmFsdWUgdG8gc2V0IHRoZSBgUGxheWVyJ3MgYXNwZWN0IHJhdGlvIHRvLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKiAgICAgICAgIC0gVGhlIGN1cnJlbnQgYXNwZWN0IHJhdGlvIG9mIHRoZSBgUGxheWVyYCB3aGVuIGdldHRpbmcuXG4gICAqICAgICAgICAgLSB1bmRlZmluZWQgd2hlbiBzZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFzcGVjdFJhdGlvID0gZnVuY3Rpb24gYXNwZWN0UmF0aW8ocmF0aW8pIHtcbiAgICBpZiAocmF0aW8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNwZWN0UmF0aW9fO1xuICAgIH0gLy8gQ2hlY2sgZm9yIHdpZHRoOmhlaWdodCBmb3JtYXRcblxuXG4gICAgaWYgKCEvXlxcZCtcXDpcXGQrJC8udGVzdChyYXRpbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wcm9wZXIgdmFsdWUgc3VwcGxpZWQgZm9yIGFzcGVjdCByYXRpby4gVGhlIGZvcm1hdCBzaG91bGQgYmUgd2lkdGg6aGVpZ2h0LCBmb3IgZXhhbXBsZSAxNjo5LicpO1xuICAgIH1cblxuICAgIHRoaXMuYXNwZWN0UmF0aW9fID0gcmF0aW87IC8vIFdlJ3JlIGFzc3VtaW5nIGlmIHlvdSBzZXQgYW4gYXNwZWN0IHJhdGlvIHlvdSB3YW50IGZsdWlkIG1vZGUsXG4gICAgLy8gYmVjYXVzZSBpbiBmaXhlZCBtb2RlIHlvdSBjb3VsZCBjYWxjdWxhdGUgd2lkdGggYW5kIGhlaWdodCB5b3Vyc2VsZi5cblxuICAgIHRoaXMuZmx1aWQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVTdHlsZUVsXygpO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgc3R5bGVzIG9mIHRoZSBgUGxheWVyYCBlbGVtZW50IChoZWlnaHQsIHdpZHRoIGFuZCBhc3BlY3QgcmF0aW8pLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbGlzdGVucyBUZWNoI2xvYWRlZG1ldGFkYXRhXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZVN0eWxlRWxfID0gZnVuY3Rpb24gdXBkYXRlU3R5bGVFbF8oKSB7XG4gICAgaWYgKHdpbmRvdyQxLlZJREVPSlNfTk9fRFlOQU1JQ19TVFlMRSA9PT0gdHJ1ZSkge1xuICAgICAgdmFyIF93aWR0aCA9IHR5cGVvZiB0aGlzLndpZHRoXyA9PT0gJ251bWJlcicgPyB0aGlzLndpZHRoXyA6IHRoaXMub3B0aW9uc18ud2lkdGg7XG5cbiAgICAgIHZhciBfaGVpZ2h0ID0gdHlwZW9mIHRoaXMuaGVpZ2h0XyA9PT0gJ251bWJlcicgPyB0aGlzLmhlaWdodF8gOiB0aGlzLm9wdGlvbnNfLmhlaWdodDtcblxuICAgICAgdmFyIHRlY2hFbCA9IHRoaXMudGVjaF8gJiYgdGhpcy50ZWNoXy5lbCgpO1xuXG4gICAgICBpZiAodGVjaEVsKSB7XG4gICAgICAgIGlmIChfd2lkdGggPj0gMCkge1xuICAgICAgICAgIHRlY2hFbC53aWR0aCA9IF93aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfaGVpZ2h0ID49IDApIHtcbiAgICAgICAgICB0ZWNoRWwuaGVpZ2h0ID0gX2hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG4gICAgdmFyIGFzcGVjdFJhdGlvO1xuICAgIHZhciBpZENsYXNzOyAvLyBUaGUgYXNwZWN0IHJhdGlvIGlzIGVpdGhlciB1c2VkIGRpcmVjdGx5IG9yIHRvIGNhbGN1bGF0ZSB3aWR0aCBhbmQgaGVpZ2h0LlxuXG4gICAgaWYgKHRoaXMuYXNwZWN0UmF0aW9fICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hc3BlY3RSYXRpb18gIT09ICdhdXRvJykge1xuICAgICAgLy8gVXNlIGFueSBhc3BlY3RSYXRpbyB0aGF0J3MgYmVlbiBzcGVjaWZpY2FsbHkgc2V0XG4gICAgICBhc3BlY3RSYXRpbyA9IHRoaXMuYXNwZWN0UmF0aW9fO1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb1dpZHRoKCkgPiAwKSB7XG4gICAgICAvLyBPdGhlcndpc2UgdHJ5IHRvIGdldCB0aGUgYXNwZWN0IHJhdGlvIGZyb20gdGhlIHZpZGVvIG1ldGFkYXRhXG4gICAgICBhc3BlY3RSYXRpbyA9IHRoaXMudmlkZW9XaWR0aCgpICsgJzonICsgdGhpcy52aWRlb0hlaWdodCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPciB1c2UgYSBkZWZhdWx0LiBUaGUgdmlkZW8gZWxlbWVudCdzIGlzIDI6MSwgYnV0IDE2OjkgaXMgbW9yZSBjb21tb24uXG4gICAgICBhc3BlY3RSYXRpbyA9ICcxNjo5JztcbiAgICB9IC8vIEdldCB0aGUgcmF0aW8gYXMgYSBkZWNpbWFsIHdlIGNhbiB1c2UgdG8gY2FsY3VsYXRlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIHJhdGlvUGFydHMgPSBhc3BlY3RSYXRpby5zcGxpdCgnOicpO1xuICAgIHZhciByYXRpb011bHRpcGxpZXIgPSByYXRpb1BhcnRzWzFdIC8gcmF0aW9QYXJ0c1swXTtcblxuICAgIGlmICh0aGlzLndpZHRoXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYW55IHdpZHRoIHRoYXQncyBiZWVuIHNwZWNpZmljYWxseSBzZXRcbiAgICAgIHdpZHRoID0gdGhpcy53aWR0aF87XG4gICAgfSBlbHNlIGlmICh0aGlzLmhlaWdodF8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gT3IgY2FsdWxhdGUgdGhlIHdpZHRoIGZyb20gdGhlIGFzcGVjdCByYXRpbyBpZiBhIGhlaWdodCBoYXMgYmVlbiBzZXRcbiAgICAgIHdpZHRoID0gdGhpcy5oZWlnaHRfIC8gcmF0aW9NdWx0aXBsaWVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPciB1c2UgdGhlIHZpZGVvJ3MgbWV0YWRhdGEsIG9yIHVzZSB0aGUgdmlkZW8gZWwncyBkZWZhdWx0IG9mIDMwMFxuICAgICAgd2lkdGggPSB0aGlzLnZpZGVvV2lkdGgoKSB8fCAzMDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGVpZ2h0XyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYW55IGhlaWdodCB0aGF0J3MgYmVlbiBzcGVjaWZpY2FsbHkgc2V0XG4gICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodF87XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBjYWxjdWxhdGUgdGhlIGhlaWdodCBmcm9tIHRoZSByYXRpbyBhbmQgdGhlIHdpZHRoXG4gICAgICBoZWlnaHQgPSB3aWR0aCAqIHJhdGlvTXVsdGlwbGllcjtcbiAgICB9IC8vIEVuc3VyZSB0aGUgQ1NTIGNsYXNzIGlzIHZhbGlkIGJ5IHN0YXJ0aW5nIHdpdGggYW4gYWxwaGEgY2hhcmFjdGVyXG5cblxuICAgIGlmICgvXlteYS16QS1aXS8udGVzdCh0aGlzLmlkKCkpKSB7XG4gICAgICBpZENsYXNzID0gJ2RpbWVuc2lvbnMtJyArIHRoaXMuaWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRDbGFzcyA9IHRoaXMuaWQoKSArICctZGltZW5zaW9ucyc7XG4gICAgfSAvLyBFbnN1cmUgdGhlIHJpZ2h0IGNsYXNzIGlzIHN0aWxsIG9uIHRoZSBwbGF5ZXIgZm9yIHRoZSBzdHlsZSBlbGVtZW50XG5cblxuICAgIHRoaXMuYWRkQ2xhc3MoaWRDbGFzcyk7XG4gICAgc2V0VGV4dENvbnRlbnQodGhpcy5zdHlsZUVsXywgXCJcXG4gICAgICAuXCIgKyBpZENsYXNzICsgXCIge1xcbiAgICAgICAgd2lkdGg6IFwiICsgd2lkdGggKyBcInB4O1xcbiAgICAgICAgaGVpZ2h0OiBcIiArIGhlaWdodCArIFwicHg7XFxuICAgICAgfVxcblxcbiAgICAgIC5cIiArIGlkQ2xhc3MgKyBcIi52anMtZmx1aWQge1xcbiAgICAgICAgcGFkZGluZy10b3A6IFwiICsgcmF0aW9NdWx0aXBsaWVyICogMTAwICsgXCIlO1xcbiAgICAgIH1cXG4gICAgXCIpO1xuICB9XG4gIC8qKlxuICAgKiBMb2FkL0NyZWF0ZSBhbiBpbnN0YW5jZSBvZiBwbGF5YmFjayB7QGxpbmsgVGVjaH0gaW5jbHVkaW5nIGVsZW1lbnRcbiAgICogYW5kIEFQSSBtZXRob2RzLiBUaGVuIGFwcGVuZCB0aGUgYFRlY2hgIGVsZW1lbnQgaW4gYFBsYXllcmAgYXMgYSBjaGlsZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlY2hOYW1lXG4gICAqICAgICAgICBuYW1lIG9mIHRoZSBwbGF5YmFjayB0ZWNobm9sb2d5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VcbiAgICogICAgICAgIHZpZGVvIHNvdXJjZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5sb2FkVGVjaF8gPSBmdW5jdGlvbiBsb2FkVGVjaF8odGVjaE5hbWUsIHNvdXJjZSkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgLy8gUGF1c2UgYW5kIHJlbW92ZSBjdXJyZW50IHBsYXliYWNrIHRlY2hub2xvZ3lcbiAgICBpZiAodGhpcy50ZWNoXykge1xuICAgICAgdGhpcy51bmxvYWRUZWNoXygpO1xuICAgIH1cblxuICAgIHZhciB0aXRsZVRlY2hOYW1lID0gdG9UaXRsZUNhc2UodGVjaE5hbWUpO1xuICAgIHZhciBjYW1lbFRlY2hOYW1lID0gdGVjaE5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyB0ZWNoTmFtZS5zbGljZSgxKTsgLy8gZ2V0IHJpZCBvZiB0aGUgSFRNTDUgdmlkZW8gdGFnIGFzIHNvb24gYXMgd2UgYXJlIHVzaW5nIGFub3RoZXIgdGVjaFxuXG4gICAgaWYgKHRpdGxlVGVjaE5hbWUgIT09ICdIdG1sNScgJiYgdGhpcy50YWcpIHtcbiAgICAgIFRlY2guZ2V0VGVjaCgnSHRtbDUnKS5kaXNwb3NlTWVkaWFFbGVtZW50KHRoaXMudGFnKTtcbiAgICAgIHRoaXMudGFnLnBsYXllciA9IG51bGw7XG4gICAgICB0aGlzLnRhZyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy50ZWNoTmFtZV8gPSB0aXRsZVRlY2hOYW1lOyAvLyBUdXJuIG9mZiBBUEkgYWNjZXNzIGJlY2F1c2Ugd2UncmUgbG9hZGluZyBhIG5ldyB0ZWNoIHRoYXQgbWlnaHQgbG9hZCBhc3luY2hyb25vdXNseVxuXG4gICAgdGhpcy5pc1JlYWR5XyA9IGZhbHNlOyAvLyBpZiBhdXRvcGxheSBpcyBhIHN0cmluZyB3ZSBwYXNzIGZhbHNlIHRvIHRoZSB0ZWNoXG4gICAgLy8gYmVjYXVzZSB0aGUgcGxheWVyIGlzIGdvaW5nIHRvIGhhbmRsZSBhdXRvcGxheSBvbiBgbG9hZHN0YXJ0YFxuXG4gICAgdmFyIGF1dG9wbGF5ID0gdHlwZW9mIHRoaXMuYXV0b3BsYXkoKSA9PT0gJ3N0cmluZycgPyBmYWxzZSA6IHRoaXMuYXV0b3BsYXkoKTsgLy8gR3JhYiB0ZWNoLXNwZWNpZmljIG9wdGlvbnMgZnJvbSBwbGF5ZXIgb3B0aW9ucyBhbmQgYWRkIHNvdXJjZSBhbmQgcGFyZW50IGVsZW1lbnQgdG8gdXNlLlxuXG4gICAgdmFyIHRlY2hPcHRpb25zID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBhdXRvcGxheTogYXV0b3BsYXksXG4gICAgICAnbmF0aXZlQ29udHJvbHNGb3JUb3VjaCc6IHRoaXMub3B0aW9uc18ubmF0aXZlQ29udHJvbHNGb3JUb3VjaCxcbiAgICAgICdwbGF5ZXJJZCc6IHRoaXMuaWQoKSxcbiAgICAgICd0ZWNoSWQnOiB0aGlzLmlkKCkgKyBcIl9cIiArIGNhbWVsVGVjaE5hbWUgKyBcIl9hcGlcIixcbiAgICAgICdwbGF5c2lubGluZSc6IHRoaXMub3B0aW9uc18ucGxheXNpbmxpbmUsXG4gICAgICAncHJlbG9hZCc6IHRoaXMub3B0aW9uc18ucHJlbG9hZCxcbiAgICAgICdsb29wJzogdGhpcy5vcHRpb25zXy5sb29wLFxuICAgICAgJ211dGVkJzogdGhpcy5vcHRpb25zXy5tdXRlZCxcbiAgICAgICdwb3N0ZXInOiB0aGlzLnBvc3RlcigpLFxuICAgICAgJ2xhbmd1YWdlJzogdGhpcy5sYW5ndWFnZSgpLFxuICAgICAgJ3BsYXllckVsSW5nZXN0JzogdGhpcy5wbGF5ZXJFbEluZ2VzdF8gfHwgZmFsc2UsXG4gICAgICAndnR0LmpzJzogdGhpcy5vcHRpb25zX1sndnR0LmpzJ10sXG4gICAgICAnY2FuT3ZlcnJpZGVQb3N0ZXInOiAhIXRoaXMub3B0aW9uc18udGVjaENhbk92ZXJyaWRlUG9zdGVyLFxuICAgICAgJ2VuYWJsZVNvdXJjZXNldCc6IHRoaXMub3B0aW9uc18uZW5hYmxlU291cmNlc2V0LFxuICAgICAgJ1Byb21pc2UnOiB0aGlzLm9wdGlvbnNfLlByb21pc2VcbiAgICB9O1xuICAgIEFMTC5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcHJvcHMgPSBBTExbbmFtZV07XG4gICAgICB0ZWNoT3B0aW9uc1twcm9wcy5nZXR0ZXJOYW1lXSA9IF90aGlzM1twcm9wcy5wcml2YXRlTmFtZV07XG4gICAgfSk7XG4gICAgYXNzaWduKHRlY2hPcHRpb25zLCB0aGlzLm9wdGlvbnNfW3RpdGxlVGVjaE5hbWVdKTtcbiAgICBhc3NpZ24odGVjaE9wdGlvbnMsIHRoaXMub3B0aW9uc19bY2FtZWxUZWNoTmFtZV0pO1xuICAgIGFzc2lnbih0ZWNoT3B0aW9ucywgdGhpcy5vcHRpb25zX1t0ZWNoTmFtZS50b0xvd2VyQ2FzZSgpXSk7XG5cbiAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgIHRlY2hPcHRpb25zLnRhZyA9IHRoaXMudGFnO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgJiYgc291cmNlLnNyYyA9PT0gdGhpcy5jYWNoZV8uc3JjICYmIHRoaXMuY2FjaGVfLmN1cnJlbnRUaW1lID4gMCkge1xuICAgICAgdGVjaE9wdGlvbnMuc3RhcnRUaW1lID0gdGhpcy5jYWNoZV8uY3VycmVudFRpbWU7XG4gICAgfSAvLyBJbml0aWFsaXplIHRlY2ggaW5zdGFuY2VcblxuXG4gICAgdmFyIFRlY2hDbGFzcyA9IFRlY2guZ2V0VGVjaCh0ZWNoTmFtZSk7XG5cbiAgICBpZiAoIVRlY2hDbGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gVGVjaCBuYW1lZCAnXCIgKyB0aXRsZVRlY2hOYW1lICsgXCInIGV4aXN0cyEgJ1wiICsgdGl0bGVUZWNoTmFtZSArIFwiJyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB1c2luZyB2aWRlb2pzLnJlZ2lzdGVyVGVjaCgpJ1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLnRlY2hfID0gbmV3IFRlY2hDbGFzcyh0ZWNoT3B0aW9ucyk7IC8vIHBsYXllci50cmlnZ2VyUmVhZHkgaXMgYWx3YXlzIGFzeW5jLCBzbyBkb24ndCBuZWVkIHRoaXMgdG8gYmUgYXN5bmNcblxuICAgIHRoaXMudGVjaF8ucmVhZHkoYmluZCh0aGlzLCB0aGlzLmhhbmRsZVRlY2hSZWFkeV8pLCB0cnVlKTtcbiAgICB0ZXh0VHJhY2tDb252ZXJ0ZXIuanNvblRvVGV4dFRyYWNrcyh0aGlzLnRleHRUcmFja3NKc29uXyB8fCBbXSwgdGhpcy50ZWNoXyk7IC8vIExpc3RlbiB0byBhbGwgSFRNTDUtZGVmaW5lZCBldmVudHMgYW5kIHRyaWdnZXIgdGhlbSBvbiB0aGUgcGxheWVyXG5cbiAgICBURUNIX0VWRU5UU19SRVRSSUdHRVIuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzMy5vbihfdGhpczMudGVjaF8sIGV2ZW50LCBfdGhpczNbXCJoYW5kbGVUZWNoXCIgKyB0b1RpdGxlQ2FzZShldmVudCkgKyBcIl9cIl0pO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKFRFQ0hfRVZFTlRTX1FVRVVFKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMzLm9uKF90aGlzMy50ZWNoXywgZXZlbnQsIGZ1bmN0aW9uIChldmVudE9iaikge1xuICAgICAgICBpZiAoX3RoaXMzLnRlY2hfLnBsYXliYWNrUmF0ZSgpID09PSAwICYmIF90aGlzMy50ZWNoXy5zZWVraW5nKCkpIHtcbiAgICAgICAgICBfdGhpczMucXVldWVkQ2FsbGJhY2tzXy5wdXNoKHtcbiAgICAgICAgICAgIGNhbGxiYWNrOiBfdGhpczNbXCJoYW5kbGVUZWNoXCIgKyBURUNIX0VWRU5UU19RVUVVRVtldmVudF0gKyBcIl9cIl0uYmluZChfdGhpczMpLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50T2JqXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczNbXCJoYW5kbGVUZWNoXCIgKyBURUNIX0VWRU5UU19RVUVVRVtldmVudF0gKyBcIl9cIl0oZXZlbnRPYmopO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnbG9hZHN0YXJ0JywgdGhpcy5oYW5kbGVUZWNoTG9hZFN0YXJ0Xyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnc291cmNlc2V0JywgdGhpcy5oYW5kbGVUZWNoU291cmNlc2V0Xyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnd2FpdGluZycsIHRoaXMuaGFuZGxlVGVjaFdhaXRpbmdfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdlbmRlZCcsIHRoaXMuaGFuZGxlVGVjaEVuZGVkXyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnc2Vla2luZycsIHRoaXMuaGFuZGxlVGVjaFNlZWtpbmdfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdwbGF5JywgdGhpcy5oYW5kbGVUZWNoUGxheV8pO1xuICAgIHRoaXMub24odGhpcy50ZWNoXywgJ2ZpcnN0cGxheScsIHRoaXMuaGFuZGxlVGVjaEZpcnN0UGxheV8pO1xuICAgIHRoaXMub24odGhpcy50ZWNoXywgJ3BhdXNlJywgdGhpcy5oYW5kbGVUZWNoUGF1c2VfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdkdXJhdGlvbmNoYW5nZScsIHRoaXMuaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMuaGFuZGxlVGVjaEZ1bGxzY3JlZW5DaGFuZ2VfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdlbnRlcnBpY3R1cmVpbnBpY3R1cmUnLCB0aGlzLmhhbmRsZVRlY2hFbnRlclBpY3R1cmVJblBpY3R1cmVfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdsZWF2ZXBpY3R1cmVpbnBpY3R1cmUnLCB0aGlzLmhhbmRsZVRlY2hMZWF2ZVBpY3R1cmVJblBpY3R1cmVfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdlcnJvcicsIHRoaXMuaGFuZGxlVGVjaEVycm9yXyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAnbG9hZGVkbWV0YWRhdGEnLCB0aGlzLnVwZGF0ZVN0eWxlRWxfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdwb3N0ZXJjaGFuZ2UnLCB0aGlzLmhhbmRsZVRlY2hQb3N0ZXJDaGFuZ2VfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICd0ZXh0ZGF0YScsIHRoaXMuaGFuZGxlVGVjaFRleHREYXRhXyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAncmF0ZWNoYW5nZScsIHRoaXMuaGFuZGxlVGVjaFJhdGVDaGFuZ2VfKTtcbiAgICB0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHModGhpcy50ZWNoR2V0XygnY29udHJvbHMnKSk7XG5cbiAgICBpZiAodGhpcy5jb250cm9scygpICYmICF0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHMoKSkge1xuICAgICAgdGhpcy5hZGRUZWNoQ29udHJvbHNMaXN0ZW5lcnNfKCk7XG4gICAgfSAvLyBBZGQgdGhlIHRlY2ggZWxlbWVudCBpbiB0aGUgRE9NIGlmIGl0IHdhcyBub3QgYWxyZWFkeSB0aGVyZVxuICAgIC8vIE1ha2Ugc3VyZSB0byBub3QgaW5zZXJ0IHRoZSBvcmlnaW5hbCB2aWRlbyBlbGVtZW50IGlmIHVzaW5nIEh0bWw1XG5cblxuICAgIGlmICh0aGlzLnRlY2hfLmVsKCkucGFyZW50Tm9kZSAhPT0gdGhpcy5lbCgpICYmICh0aXRsZVRlY2hOYW1lICE9PSAnSHRtbDUnIHx8ICF0aGlzLnRhZykpIHtcbiAgICAgIHByZXBlbmRUbyh0aGlzLnRlY2hfLmVsKCksIHRoaXMuZWwoKSk7XG4gICAgfSAvLyBHZXQgcmlkIG9mIHRoZSBvcmlnaW5hbCB2aWRlbyB0YWcgcmVmZXJlbmNlIGFmdGVyIHRoZSBmaXJzdCB0ZWNoIGlzIGxvYWRlZFxuXG5cbiAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgIHRoaXMudGFnLnBsYXllciA9IG51bGw7XG4gICAgICB0aGlzLnRhZyA9IG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVbmxvYWQgYW5kIGRpc3Bvc2Ugb2YgdGhlIGN1cnJlbnQgcGxheWJhY2sge0BsaW5rIFRlY2h9LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by51bmxvYWRUZWNoXyA9IGZ1bmN0aW9uIHVubG9hZFRlY2hfKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgLy8gU2F2ZSB0aGUgY3VycmVudCB0ZXh0IHRyYWNrcyBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB0ZXh0IHRyYWNrcyB3aXRoIHRoZSBuZXh0IHRlY2hcbiAgICBBTEwubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHByb3BzID0gQUxMW25hbWVdO1xuICAgICAgX3RoaXM0W3Byb3BzLnByaXZhdGVOYW1lXSA9IF90aGlzNFtwcm9wcy5nZXR0ZXJOYW1lXSgpO1xuICAgIH0pO1xuICAgIHRoaXMudGV4dFRyYWNrc0pzb25fID0gdGV4dFRyYWNrQ29udmVydGVyLnRleHRUcmFja3NUb0pzb24odGhpcy50ZWNoXyk7XG4gICAgdGhpcy5pc1JlYWR5XyA9IGZhbHNlO1xuICAgIHRoaXMudGVjaF8uZGlzcG9zZSgpO1xuICAgIHRoaXMudGVjaF8gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzUG9zdGVyRnJvbVRlY2hfKSB7XG4gICAgICB0aGlzLnBvc3Rlcl8gPSAnJztcbiAgICAgIHRoaXMudHJpZ2dlcigncG9zdGVyY2hhbmdlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Bvc3RlckZyb21UZWNoXyA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQge0BsaW5rIFRlY2h9LlxuICAgKiBJdCB3aWxsIHByaW50IGEgd2FybmluZyBieSBkZWZhdWx0IGFib3V0IHRoZSBkYW5nZXIgb2YgdXNpbmcgdGhlIHRlY2ggZGlyZWN0bHlcbiAgICogYnV0IGFueSBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCBpbiB3aWxsIHNpbGVuY2UgdGhlIHdhcm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gW3NhZmV0eV1cbiAgICogICAgICAgIEFueXRoaW5nIHBhc3NlZCBpbiB0byBzaWxlbmNlIHRoZSB3YXJuaW5nXG4gICAqXG4gICAqIEByZXR1cm4ge1RlY2h9XG4gICAqICAgICAgICAgVGhlIFRlY2hcbiAgICovXG4gIDtcblxuICBfcHJvdG8udGVjaCA9IGZ1bmN0aW9uIHRlY2goc2FmZXR5KSB7XG4gICAgaWYgKHNhZmV0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2cud2FybignVXNpbmcgdGhlIHRlY2ggZGlyZWN0bHkgY2FuIGJlIGRhbmdlcm91cy4gSSBob3BlIHlvdSBrbm93IHdoYXQgeW91XFwncmUgZG9pbmcuXFxuJyArICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvdmlkZW8uanMvaXNzdWVzLzI2MTcgZm9yIG1vcmUgaW5mby5cXG4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZWNoXztcbiAgfVxuICAvKipcbiAgICogU2V0IHVwIGNsaWNrIGFuZCB0b3VjaCBsaXN0ZW5lcnMgZm9yIHRoZSBwbGF5YmFjayBlbGVtZW50XG4gICAqXG4gICAqIC0gT24gZGVza3RvcHM6IGEgY2xpY2sgb24gdGhlIHZpZGVvIGl0c2VsZiB3aWxsIHRvZ2dsZSBwbGF5YmFja1xuICAgKiAtIE9uIG1vYmlsZSBkZXZpY2VzOiBhIGNsaWNrIG9uIHRoZSB2aWRlbyB0b2dnbGVzIGNvbnRyb2xzXG4gICAqICAgd2hpY2ggaXMgZG9uZSBieSB0b2dnbGluZyB0aGUgdXNlciBzdGF0ZSBiZXR3ZWVuIGFjdGl2ZSBhbmRcbiAgICogICBpbmFjdGl2ZVxuICAgKiAtIEEgdGFwIGNhbiBzaWduYWwgdGhhdCBhIHVzZXIgaGFzIGJlY29tZSBhY3RpdmUgb3IgaGFzIGJlY29tZSBpbmFjdGl2ZVxuICAgKiAgIGUuZy4gYSBxdWljayB0YXAgb24gYW4gaVBob25lIG1vdmllIHNob3VsZCByZXZlYWwgdGhlIGNvbnRyb2xzLiBBbm90aGVyXG4gICAqICAgcXVpY2sgdGFwIHNob3VsZCBoaWRlIHRoZW0gYWdhaW4gKHNpZ25hbGluZyB0aGUgdXNlciBpcyBpbiBhbiBpbmFjdGl2ZVxuICAgKiAgIHZpZXdpbmcgc3RhdGUpXG4gICAqIC0gSW4gYWRkaXRpb24gdG8gdGhpcywgd2Ugc3RpbGwgd2FudCB0aGUgdXNlciB0byBiZSBjb25zaWRlcmVkIGluYWN0aXZlIGFmdGVyXG4gICAqICAgYSBmZXcgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LlxuICAgKlxuICAgKiA+IE5vdGU6IHRoZSBvbmx5IHBhcnQgb2YgaU9TIGludGVyYWN0aW9uIHdlIGNhbid0IG1pbWljIHdpdGggdGhpcyBzZXR1cFxuICAgKiBpcyBhIHRvdWNoIGFuZCBob2xkIG9uIHRoZSB2aWRlbyBlbGVtZW50IGNvdW50aW5nIGFzIGFjdGl2aXR5IGluIG9yZGVyIHRvXG4gICAqIGtlZXAgdGhlIGNvbnRyb2xzIHNob3dpbmcsIGJ1dCB0aGF0IHNob3VsZG4ndCBiZSBhbiBpc3N1ZS4gQSB0b3VjaCBhbmQgaG9sZFxuICAgKiBvbiBhbnkgY29udHJvbHMgd2lsbCBzdGlsbCBrZWVwIHRoZSB1c2VyIGFjdGl2ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRUZWNoQ29udHJvbHNMaXN0ZW5lcnNfID0gZnVuY3Rpb24gYWRkVGVjaENvbnRyb2xzTGlzdGVuZXJzXygpIHtcbiAgICAvLyBNYWtlIHN1cmUgdG8gcmVtb3ZlIGFsbCB0aGUgcHJldmlvdXMgbGlzdGVuZXJzIGluIGNhc2Ugd2UgYXJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLnJlbW92ZVRlY2hDb250cm9sc0xpc3RlbmVyc18oKTsgLy8gU29tZSBicm93c2VycyAoQ2hyb21lICYgSUUpIGRvbid0IHRyaWdnZXIgYSBjbGljayBvbiBhIGZsYXNoIHN3ZiwgYnV0IGRvXG4gICAgLy8gdHJpZ2dlciBtb3VzZWRvd24vdXAuXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDQ0NTYyL2phdmFzY3JpcHQtb25jbGljay1ldmVudC1vdmVyLWZsYXNoLW9iamVjdFxuICAgIC8vIEFueSB0b3VjaCBldmVudHMgYXJlIHNldCB0byBibG9jayB0aGUgbW91c2Vkb3duIGV2ZW50IGZyb20gaGFwcGVuaW5nXG5cbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdtb3VzZXVwJywgdGhpcy5oYW5kbGVUZWNoQ2xpY2tfKTtcbiAgICB0aGlzLm9uKHRoaXMudGVjaF8sICdkYmxjbGljaycsIHRoaXMuaGFuZGxlVGVjaERvdWJsZUNsaWNrXyk7IC8vIElmIHRoZSBjb250cm9scyB3ZXJlIGhpZGRlbiB3ZSBkb24ndCB3YW50IHRoYXQgdG8gY2hhbmdlIHdpdGhvdXQgYSB0YXAgZXZlbnRcbiAgICAvLyBzbyB3ZSdsbCBjaGVjayBpZiB0aGUgY29udHJvbHMgd2VyZSBhbHJlYWR5IHNob3dpbmcgYmVmb3JlIHJlcG9ydGluZyB1c2VyXG4gICAgLy8gYWN0aXZpdHlcblxuICAgIHRoaXMub24odGhpcy50ZWNoXywgJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVRlY2hUb3VjaFN0YXJ0Xyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAndG91Y2htb3ZlJywgdGhpcy5oYW5kbGVUZWNoVG91Y2hNb3ZlXyk7XG4gICAgdGhpcy5vbih0aGlzLnRlY2hfLCAndG91Y2hlbmQnLCB0aGlzLmhhbmRsZVRlY2hUb3VjaEVuZF8pOyAvLyBUaGUgdGFwIGxpc3RlbmVyIG5lZWRzIHRvIGNvbWUgYWZ0ZXIgdGhlIHRvdWNoZW5kIGxpc3RlbmVyIGJlY2F1c2UgdGhlIHRhcFxuICAgIC8vIGxpc3RlbmVyIGNhbmNlbHMgb3V0IGFueSByZXBvcnRlZFVzZXJBY3Rpdml0eSB3aGVuIHNldHRpbmcgdXNlckFjdGl2ZShmYWxzZSlcblxuICAgIHRoaXMub24odGhpcy50ZWNoXywgJ3RhcCcsIHRoaXMuaGFuZGxlVGVjaFRhcF8pO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGxpc3RlbmVycyB1c2VkIGZvciBjbGljayBhbmQgdGFwIGNvbnRyb2xzLiBUaGlzIGlzIG5lZWRlZCBmb3JcbiAgICogdG9nZ2xpbmcgdG8gY29udHJvbHMgZGlzYWJsZWQsIHdoZXJlIGEgdGFwL3RvdWNoIHNob3VsZCBkbyBub3RoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZW1vdmVUZWNoQ29udHJvbHNMaXN0ZW5lcnNfID0gZnVuY3Rpb24gcmVtb3ZlVGVjaENvbnRyb2xzTGlzdGVuZXJzXygpIHtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGp1c3QgdXNlIGB0aGlzLm9mZigpYCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG90aGVyIG5lZWRlZFxuICAgIC8vIGxpc3RlbmVycyBhZGRlZCBieSB0ZWNocyB0aGF0IGV4dGVuZCB0aGlzLlxuICAgIHRoaXMub2ZmKHRoaXMudGVjaF8sICd0YXAnLCB0aGlzLmhhbmRsZVRlY2hUYXBfKTtcbiAgICB0aGlzLm9mZih0aGlzLnRlY2hfLCAndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVGVjaFRvdWNoU3RhcnRfKTtcbiAgICB0aGlzLm9mZih0aGlzLnRlY2hfLCAndG91Y2htb3ZlJywgdGhpcy5oYW5kbGVUZWNoVG91Y2hNb3ZlXyk7XG4gICAgdGhpcy5vZmYodGhpcy50ZWNoXywgJ3RvdWNoZW5kJywgdGhpcy5oYW5kbGVUZWNoVG91Y2hFbmRfKTtcbiAgICB0aGlzLm9mZih0aGlzLnRlY2hfLCAnbW91c2V1cCcsIHRoaXMuaGFuZGxlVGVjaENsaWNrXyk7XG4gICAgdGhpcy5vZmYodGhpcy50ZWNoXywgJ2RibGNsaWNrJywgdGhpcy5oYW5kbGVUZWNoRG91YmxlQ2xpY2tfKTtcbiAgfVxuICAvKipcbiAgICogUGxheWVyIHdhaXRzIGZvciB0aGUgdGVjaCB0byBiZSByZWFkeVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoUmVhZHlfID0gZnVuY3Rpb24gaGFuZGxlVGVjaFJlYWR5XygpIHtcbiAgICB0aGlzLnRyaWdnZXJSZWFkeSgpOyAvLyBLZWVwIHRoZSBzYW1lIHZvbHVtZSBhcyBiZWZvcmVcblxuICAgIGlmICh0aGlzLmNhY2hlXy52b2x1bWUpIHtcbiAgICAgIHRoaXMudGVjaENhbGxfKCdzZXRWb2x1bWUnLCB0aGlzLmNhY2hlXy52b2x1bWUpO1xuICAgIH0gLy8gTG9vayBpZiB0aGUgdGVjaCBmb3VuZCBhIGhpZ2hlciByZXNvbHV0aW9uIHBvc3RlciB3aGlsZSBsb2FkaW5nXG5cblxuICAgIHRoaXMuaGFuZGxlVGVjaFBvc3RlckNoYW5nZV8oKTsgLy8gVXBkYXRlIHRoZSBkdXJhdGlvbiBpZiBhdmFpbGFibGVcblxuICAgIHRoaXMuaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGBsb2Fkc3RhcnRgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LiBUaGlzXG4gICAqIGZ1bmN0aW9uIHdpbGwgYWxzbyB0cmlnZ2VyIHtAbGluayBQbGF5ZXIjZmlyc3RwbGF5fSBpZiBpdCBpcyB0aGUgZmlyc3QgbG9hZHN0YXJ0XG4gICAqIGZvciBhIHZpZGVvLlxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI2xvYWRzdGFydFxuICAgKiBAZmlyZXMgUGxheWVyI2ZpcnN0cGxheVxuICAgKiBAbGlzdGVucyBUZWNoI2xvYWRzdGFydFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoTG9hZFN0YXJ0XyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hMb2FkU3RhcnRfKCkge1xuICAgIC8vIFRPRE86IFVwZGF0ZSB0byB1c2UgYGVtcHRpZWRgIGV2ZW50IGluc3RlYWQuIFNlZSAjMTI3Ny5cbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZW5kZWQnKTtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtc2Vla2luZycpOyAvLyByZXNldCB0aGUgZXJyb3Igc3RhdGVcblxuICAgIHRoaXMuZXJyb3IobnVsbCk7IC8vIFVwZGF0ZSB0aGUgZHVyYXRpb25cblxuICAgIHRoaXMuaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXygpOyAvLyBJZiBpdCdzIGFscmVhZHkgcGxheWluZyB3ZSB3YW50IHRvIHRyaWdnZXIgYSBmaXJzdHBsYXkgZXZlbnQgbm93LlxuICAgIC8vIFRoZSBmaXJzdHBsYXkgZXZlbnQgcmVsaWVzIG9uIGJvdGggdGhlIHBsYXkgYW5kIGxvYWRzdGFydCBldmVudHNcbiAgICAvLyB3aGljaCBjYW4gaGFwcGVuIGluIGFueSBvcmRlciBmb3IgYSBuZXcgc291cmNlXG5cbiAgICBpZiAoIXRoaXMucGF1c2VkKCkpIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBhZ2VudCBiZWdpbnMgbG9va2luZyBmb3IgbWVkaWEgZGF0YVxuICAgICAgICpcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjbG9hZHN0YXJ0XG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKi9cbiAgICAgIHRoaXMudHJpZ2dlcignbG9hZHN0YXJ0Jyk7XG4gICAgICB0aGlzLnRyaWdnZXIoJ2ZpcnN0cGxheScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCB0aGUgaGFzU3RhcnRlZCBzdGF0ZVxuICAgICAgdGhpcy5oYXNTdGFydGVkKGZhbHNlKTtcbiAgICAgIHRoaXMudHJpZ2dlcignbG9hZHN0YXJ0Jyk7XG4gICAgfSAvLyBhdXRvcGxheSBoYXBwZW5zIGFmdGVyIGxvYWRzdGFydCBmb3IgdGhlIGJyb3dzZXIsXG4gICAgLy8gc28gd2UgbWltaWMgdGhhdCBiZWhhdmlvclxuXG5cbiAgICB0aGlzLm1hbnVhbEF1dG9wbGF5Xyh0aGlzLmF1dG9wbGF5KCkpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0b3BsYXkgc3RyaW5nIHZhbHVlcywgcmF0aGVyIHRoYW4gdGhlIHR5cGljYWwgYm9vbGVhblxuICAgKiB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgdGVjaC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90XG4gICAqIHBhcnQgb2YgYW55IHNwZWNpZmljYXRpb24uIFZhbGlkIHZhbHVlcyBhbmQgd2hhdCB0aGV5IGRvIGNhbiBiZVxuICAgKiBmb3VuZCBvbiB0aGUgYXV0b3BsYXkgZ2V0dGVyIGF0IFBsYXllciNhdXRvcGxheSgpXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLm1hbnVhbEF1dG9wbGF5XyA9IGZ1bmN0aW9uIG1hbnVhbEF1dG9wbGF5Xyh0eXBlKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMudGVjaF8gfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG11dGVkID0gZnVuY3Rpb24gbXV0ZWQoKSB7XG4gICAgICB2YXIgcHJldmlvdXNseU11dGVkID0gX3RoaXM1Lm11dGVkKCk7XG5cbiAgICAgIF90aGlzNS5tdXRlZCh0cnVlKTtcblxuICAgICAgdmFyIHJlc3RvcmVNdXRlZCA9IGZ1bmN0aW9uIHJlc3RvcmVNdXRlZCgpIHtcbiAgICAgICAgX3RoaXM1Lm11dGVkKHByZXZpb3VzbHlNdXRlZCk7XG4gICAgICB9OyAvLyByZXN0b3JlIG11dGVkIG9uIHBsYXkgdGVybWluYXRhdGlvblxuXG5cbiAgICAgIF90aGlzNS5wbGF5VGVybWluYXRlZFF1ZXVlXy5wdXNoKHJlc3RvcmVNdXRlZCk7XG5cbiAgICAgIHZhciBtdXRlZFByb21pc2UgPSBfdGhpczUucGxheSgpO1xuXG4gICAgICBpZiAoIWlzUHJvbWlzZShtdXRlZFByb21pc2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG11dGVkUHJvbWlzZVtcImNhdGNoXCJdKHJlc3RvcmVNdXRlZCk7XG4gICAgfTtcblxuICAgIHZhciBwcm9taXNlOyAvLyBpZiBtdXRlZCBkZWZhdWx0cyB0byB0cnVlXG4gICAgLy8gdGhlIG9ubHkgdGhpbmcgd2UgY2FuIGRvIGlzIGNhbGwgcGxheVxuXG4gICAgaWYgKHR5cGUgPT09ICdhbnknICYmIHRoaXMubXV0ZWQoKSAhPT0gdHJ1ZSkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMucGxheSgpO1xuXG4gICAgICBpZiAoaXNQcm9taXNlKHByb21pc2UpKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlW1wiY2F0Y2hcIl0obXV0ZWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ211dGVkJyAmJiB0aGlzLm11dGVkKCkgIT09IHRydWUpIHtcbiAgICAgIHByb21pc2UgPSBtdXRlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlID0gdGhpcy5wbGF5KCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1Byb21pc2UocHJvbWlzZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ2F1dG9wbGF5LXN1Y2Nlc3MnLFxuICAgICAgICBhdXRvcGxheTogdHlwZVxuICAgICAgfSk7XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXM1LnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAnYXV0b3BsYXktZmFpbHVyZScsXG4gICAgICAgIGF1dG9wbGF5OiB0eXBlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIHRoZSBpbnRlcm5hbCBzb3VyY2UgY2FjaGVzIHNvIHRoYXQgd2UgcmV0dXJuIHRoZSBjb3JyZWN0IHNvdXJjZSBmcm9tXG4gICAqIGBzcmMoKWAsIGBjdXJyZW50U291cmNlKClgLCBhbmQgYGN1cnJlbnRTb3VyY2VzKClgLlxuICAgKlxuICAgKiA+IE5vdGU6IGBjdXJyZW50U291cmNlc2Agd2lsbCBub3QgYmUgdXBkYXRlZCBpZiB0aGUgc291cmNlIHRoYXQgaXMgcGFzc2VkIGluIGV4aXN0c1xuICAgKiAgICAgICAgIGluIHRoZSBjdXJyZW50IGBjdXJyZW50U291cmNlc2AgY2FjaGUuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7VGVjaH5Tb3VyY2VPYmplY3R9IHNyY09ialxuICAgKiAgICAgICAgQSBzdHJpbmcgb3Igb2JqZWN0IHNvdXJjZSB0byB1cGRhdGUgb3VyIGNhY2hlcyB0by5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXBkYXRlU291cmNlQ2FjaGVzXyA9IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZUNhY2hlc18oc3JjT2JqKSB7XG4gICAgaWYgKHNyY09iaiA9PT0gdm9pZCAwKSB7XG4gICAgICBzcmNPYmogPSAnJztcbiAgICB9XG5cbiAgICB2YXIgc3JjID0gc3JjT2JqO1xuICAgIHZhciB0eXBlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHNyYyA9IHNyY09iai5zcmM7XG4gICAgICB0eXBlID0gc3JjT2JqLnR5cGU7XG4gICAgfSAvLyBtYWtlIHN1cmUgYWxsIHRoZSBjYWNoZXMgYXJlIHNldCB0byBkZWZhdWx0IHZhbHVlc1xuICAgIC8vIHRvIHByZXZlbnQgbnVsbCBjaGVja2luZ1xuXG5cbiAgICB0aGlzLmNhY2hlXy5zb3VyY2UgPSB0aGlzLmNhY2hlXy5zb3VyY2UgfHwge307XG4gICAgdGhpcy5jYWNoZV8uc291cmNlcyA9IHRoaXMuY2FjaGVfLnNvdXJjZXMgfHwgW107IC8vIHRyeSB0byBnZXQgdGhlIHR5cGUgb2YgdGhlIHNyYyB0aGF0IHdhcyBwYXNzZWQgaW5cblxuICAgIGlmIChzcmMgJiYgIXR5cGUpIHtcbiAgICAgIHR5cGUgPSBmaW5kTWltZXR5cGUodGhpcywgc3JjKTtcbiAgICB9IC8vIHVwZGF0ZSBgY3VycmVudFNvdXJjZWAgY2FjaGUgYWx3YXlzXG5cblxuICAgIHRoaXMuY2FjaGVfLnNvdXJjZSA9IG1lcmdlT3B0aW9ucyh7fSwgc3JjT2JqLCB7XG4gICAgICBzcmM6IHNyYyxcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9KTtcbiAgICB2YXIgbWF0Y2hpbmdTb3VyY2VzID0gdGhpcy5jYWNoZV8uc291cmNlcy5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnNyYyAmJiBzLnNyYyA9PT0gc3JjO1xuICAgIH0pO1xuICAgIHZhciBzb3VyY2VFbFNvdXJjZXMgPSBbXTtcbiAgICB2YXIgc291cmNlRWxzID0gdGhpcy4kJCgnc291cmNlJyk7XG4gICAgdmFyIG1hdGNoaW5nU291cmNlRWxzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZUVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZU9iaiA9IGdldEF0dHJpYnV0ZXMoc291cmNlRWxzW2ldKTtcbiAgICAgIHNvdXJjZUVsU291cmNlcy5wdXNoKHNvdXJjZU9iaik7XG5cbiAgICAgIGlmIChzb3VyY2VPYmouc3JjICYmIHNvdXJjZU9iai5zcmMgPT09IHNyYykge1xuICAgICAgICBtYXRjaGluZ1NvdXJjZUVscy5wdXNoKHNvdXJjZU9iai5zcmMpO1xuICAgICAgfVxuICAgIH0gLy8gaWYgd2UgaGF2ZSBtYXRjaGluZyBzb3VyY2UgZWxzIGJ1dCBub3QgbWF0Y2hpbmcgc291cmNlc1xuICAgIC8vIHRoZSBjdXJyZW50IHNvdXJjZSBjYWNoZSBpcyBub3QgdXAgdG8gZGF0ZVxuXG5cbiAgICBpZiAobWF0Y2hpbmdTb3VyY2VFbHMubGVuZ3RoICYmICFtYXRjaGluZ1NvdXJjZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNhY2hlXy5zb3VyY2VzID0gc291cmNlRWxTb3VyY2VzOyAvLyBpZiB3ZSBkb24ndCBoYXZlIG1hdGNoaW5nIHNvdXJjZSBvciBzb3VyY2UgZWxzIHNldCB0aGVcbiAgICAgIC8vIHNvdXJjZXMgY2FjaGUgdG8gdGhlIGBjdXJyZW50U291cmNlYCBjYWNoZVxuICAgIH0gZWxzZSBpZiAoIW1hdGNoaW5nU291cmNlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2FjaGVfLnNvdXJjZXMgPSBbdGhpcy5jYWNoZV8uc291cmNlXTtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgdGVjaCBgc3JjYCBjYWNoZVxuXG5cbiAgICB0aGlzLmNhY2hlXy5zcmMgPSBzcmM7XG4gIH1cbiAgLyoqXG4gICAqICpFWFBFUklNRU5UQUwqIEZpcmVkIHdoZW4gdGhlIHNvdXJjZSBpcyBzZXQgb3IgY2hhbmdlZCBvbiB0aGUge0BsaW5rIFRlY2h9XG4gICAqIGNhdXNpbmcgdGhlIG1lZGlhIGVsZW1lbnQgdG8gcmVsb2FkLlxuICAgKlxuICAgKiBJdCB3aWxsIGZpcmUgZm9yIHRoZSBpbml0aWFsIHNvdXJjZSBhbmQgZWFjaCBzdWJzZXF1ZW50IHNvdXJjZS5cbiAgICogVGhpcyBldmVudCBpcyBhIGN1c3RvbSBldmVudCBmcm9tIFZpZGVvLmpzIGFuZCBpcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogVGhlIGV2ZW50IG9iamVjdCBmb3IgdGhpcyBldmVudCBjb250YWlucyBhIGBzcmNgIHByb3BlcnR5IHRoYXQgd2lsbCBjb250YWluIHRoZSBzb3VyY2VcbiAgICogdGhhdCB3YXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG9ubHkgbmVjZXNzYXJ5IGlmIFZpZGVvLmpzXG4gICAqIGlzIHN3aXRjaGluZyB0ZWNocyB3aGlsZSB0aGUgc291cmNlIHdhcyBiZWluZyBjaGFuZ2VkLlxuICAgKlxuICAgKiBJdCBpcyBhbHNvIGZpcmVkIHdoZW4gYGxvYWRgIGlzIGNhbGxlZCBvbiB0aGUgcGxheWVyIChvciBtZWRpYSBlbGVtZW50KVxuICAgKiBiZWNhdXNlIHRoZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWVkaWEuaHRtbCNkb20tbWVkaWEtbG9hZHxzcGVjaWZpY2F0aW9uIGZvciBgbG9hZGB9XG4gICAqIHNheXMgdGhhdCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBuZWVkcyB0byBiZSBhYm9ydGVkIGFuZCByZXN0YXJ0ZWQuXG4gICAqIEluIHRoaXMgY2FzZSwgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGUgYHNyY2AgcHJvcGVydHkgd2lsbCBiZSBzZXQgdG8gdGhlXG4gICAqIGVtcHR5IHN0cmluZyBgXCJcImAgdG8gaW5kaWNhdGUgd2UgZG8gbm90IGtub3cgd2hhdCB0aGUgc291cmNlIHdpbGwgYmUgYnV0XG4gICAqIHRoYXQgaXQgaXMgY2hhbmdpbmcuXG4gICAqXG4gICAqICpUaGlzIGV2ZW50IGlzIGN1cnJlbnRseSBzdGlsbCBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gbWlub3IgcmVsZWFzZXMuKlxuICAgKiBfX1RvIHVzZSB0aGlzLCBwYXNzIGBlbmFibGVTb3VyY2VzZXRgIG9wdGlvbiB0byB0aGUgcGxheWVyLl9fXG4gICAqXG4gICAqIEBldmVudCBQbGF5ZXIjc291cmNlc2V0XG4gICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICogQHByb3Age3N0cmluZ30gc3JjXG4gICAqICAgICAgICAgICAgICAgIFRoZSBzb3VyY2UgdXJsIGF2YWlsYWJsZSB3aGVuIHRoZSBgc291cmNlc2V0YCB3YXMgdHJpZ2dlcmVkLlxuICAgKiAgICAgICAgICAgICAgICBJdCB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZyBpZiB3ZSBjYW5ub3Qga25vdyB3aGF0IHRoZSBzb3VyY2UgaXNcbiAgICogICAgICAgICAgICAgICAgYnV0IGtub3cgdGhhdCB0aGUgc291cmNlIHdpbGwgY2hhbmdlLlxuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlnZ2VyIHRoZSBgc291cmNlc2V0YCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNzb3VyY2VzZXRcbiAgICogQGxpc3RlbnMgVGVjaCNzb3VyY2VzZXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaFNvdXJjZXNldF8gPSBmdW5jdGlvbiBoYW5kbGVUZWNoU291cmNlc2V0XyhldmVudCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgLy8gb25seSB1cGRhdGUgdGhlIHNvdXJjZSBjYWNoZSB3aGVuIHRoZSBzb3VyY2VcbiAgICAvLyB3YXMgbm90IHVwZGF0ZWQgdXNpbmcgdGhlIHBsYXllciBhcGlcbiAgICBpZiAoIXRoaXMuY2hhbmdpbmdTcmNfKSB7XG4gICAgICB2YXIgdXBkYXRlU291cmNlQ2FjaGVzID0gZnVuY3Rpb24gdXBkYXRlU291cmNlQ2FjaGVzKHNyYykge1xuICAgICAgICByZXR1cm4gX3RoaXM2LnVwZGF0ZVNvdXJjZUNhY2hlc18oc3JjKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwbGF5ZXJTcmMgPSB0aGlzLmN1cnJlbnRTb3VyY2UoKS5zcmM7XG4gICAgICB2YXIgZXZlbnRTcmMgPSBldmVudC5zcmM7IC8vIGlmIHdlIGhhdmUgYSBwbGF5ZXJTcmMgdGhhdCBpcyBub3QgYSBibG9iLCBhbmQgYSB0ZWNoIHNyYyB0aGF0IGlzIGEgYmxvYlxuXG4gICAgICBpZiAocGxheWVyU3JjICYmICEvXmJsb2I6Ly50ZXN0KHBsYXllclNyYykgJiYgL15ibG9iOi8udGVzdChldmVudFNyYykpIHtcbiAgICAgICAgLy8gaWYgYm90aCB0aGUgdGVjaCBzb3VyY2UgYW5kIHRoZSBwbGF5ZXIgc291cmNlIHdlcmUgdXBkYXRlZCB3ZSBhc3N1bWVcbiAgICAgICAgLy8gc29tZXRoaW5nIGxpa2UgQHZpZGVvanMvaHR0cC1zdHJlYW1pbmcgZGlkIHRoZSBzb3VyY2VzZXQgYW5kIHNraXAgdXBkYXRpbmcgdGhlIHNvdXJjZSBjYWNoZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RTb3VyY2VfIHx8IHRoaXMubGFzdFNvdXJjZV8udGVjaCAhPT0gZXZlbnRTcmMgJiYgdGhpcy5sYXN0U291cmNlXy5wbGF5ZXIgIT09IHBsYXllclNyYykge1xuICAgICAgICAgIHVwZGF0ZVNvdXJjZUNhY2hlcyA9IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZUNhY2hlcygpIHt9O1xuICAgICAgICB9XG4gICAgICB9IC8vIHVwZGF0ZSB0aGUgc291cmNlIHRvIHRoZSBpbnRpYWwgc291cmNlIHJpZ2h0IGF3YXlcbiAgICAgIC8vIGluIHNvbWUgY2FzZXMgdGhpcyB3aWxsIGJlIGVtcHR5IHN0cmluZ1xuXG5cbiAgICAgIHVwZGF0ZVNvdXJjZUNhY2hlcyhldmVudFNyYyk7IC8vIGlmIHRoZSBgc291cmNlc2V0YCBgc3JjYCB3YXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAvLyB3YWl0IGZvciBhIGBsb2Fkc3RhcnRgIHRvIHVwZGF0ZSB0aGUgY2FjaGUgdG8gYGN1cnJlbnRTcmNgLlxuICAgICAgLy8gSWYgYSBzb3VyY2VzZXQgaGFwcGVucyBiZWZvcmUgYSBgbG9hZHN0YXJ0YCwgd2UgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIGlmICghZXZlbnQuc3JjKSB7XG4gICAgICAgIHRoaXMudGVjaF8uYW55KFsnc291cmNlc2V0JywgJ2xvYWRzdGFydCddLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIC8vIGlmIGEgc291cmNlc2V0IGhhcHBlbnMgYmVmb3JlIGEgYGxvYWRzdGFydGAgdGhlcmVcbiAgICAgICAgICAvLyBpcyBub3RoaW5nIHRvIGRvIGFzIHRoaXMgYGhhbmRsZVRlY2hTb3VyY2VzZXRfYFxuICAgICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIGFnYWluIGFuZCB0aGlzIHdpbGwgYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICBpZiAoZS50eXBlID09PSAnc291cmNlc2V0Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0ZWNoU3JjID0gX3RoaXM2LnRlY2hHZXQoJ2N1cnJlbnRTcmMnKTtcblxuICAgICAgICAgIF90aGlzNi5sYXN0U291cmNlXy50ZWNoID0gdGVjaFNyYztcblxuICAgICAgICAgIF90aGlzNi51cGRhdGVTb3VyY2VDYWNoZXNfKHRlY2hTcmMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTb3VyY2VfID0ge1xuICAgICAgcGxheWVyOiB0aGlzLmN1cnJlbnRTb3VyY2UoKS5zcmMsXG4gICAgICB0ZWNoOiBldmVudC5zcmNcbiAgICB9O1xuICAgIHRoaXMudHJpZ2dlcih7XG4gICAgICBzcmM6IGV2ZW50LnNyYyxcbiAgICAgIHR5cGU6ICdzb3VyY2VzZXQnXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZC9yZW1vdmUgdGhlIHZqcy1oYXMtc3RhcnRlZCBjbGFzc1xuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI2ZpcnN0cGxheVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVlc3RcbiAgICogICAgICAgIC0gdHJ1ZTogYWRkcyB0aGUgY2xhc3NcbiAgICogICAgICAgIC0gZmFsc2U6IHJlbW92ZSB0aGUgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICB0aGUgYm9vbGVhbiB2YWx1ZSBvZiBoYXNTdGFydGVkX1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXNTdGFydGVkID0gZnVuY3Rpb24gaGFzU3RhcnRlZChyZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYWN0IGFzIGdldHRlciwgaWYgd2UgaGF2ZSBubyByZXF1ZXN0IHRvIGNoYW5nZVxuICAgICAgcmV0dXJuIHRoaXMuaGFzU3RhcnRlZF87XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3QgPT09IHRoaXMuaGFzU3RhcnRlZF8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1N0YXJ0ZWRfID0gcmVxdWVzdDtcblxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWRfKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtaGFzLXN0YXJ0ZWQnKTtcbiAgICAgIHRoaXMudHJpZ2dlcignZmlyc3RwbGF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1oYXMtc3RhcnRlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIG1lZGlhIGJlZ2lucyBvciByZXN1bWVzIHBsYXliYWNrXG4gICAqXG4gICAqIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkb20tbWVkaWEtcGxheX1cbiAgICogQGZpcmVzIFBsYXllciNwbGF5XG4gICAqIEBsaXN0ZW5zIFRlY2gjcGxheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoUGxheV8gPSBmdW5jdGlvbiBoYW5kbGVUZWNoUGxheV8oKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWVuZGVkJyk7XG4gICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLXBhdXNlZCcpO1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1wbGF5aW5nJyk7IC8vIGhpZGUgdGhlIHBvc3RlciB3aGVuIHRoZSB1c2VyIGhpdHMgcGxheVxuXG4gICAgdGhpcy5oYXNTdGFydGVkKHRydWUpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuZXZlciBhbiB7QGxpbmsgVGVjaCNwbGF5fSBldmVudCBoYXBwZW5zLiBJbmRpY2F0ZXMgdGhhdFxuICAgICAqIHBsYXliYWNrIGhhcyBzdGFydGVkIG9yIHJlc3VtZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI3BsYXlcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3BsYXknKTtcbiAgfVxuICAvKipcbiAgICogUmV0cmlnZ2VyIHRoZSBgcmF0ZWNoYW5nZWAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gICAqXG4gICAqIElmIHRoZXJlIHdlcmUgYW55IGV2ZW50cyBxdWV1ZWQgd2hpbGUgdGhlIHBsYXliYWNrIHJhdGUgd2FzIHplcm8sIGZpcmVcbiAgICogdGhvc2UgZXZlbnRzIG5vdy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1ldGhvZCBQbGF5ZXIjaGFuZGxlVGVjaFJhdGVDaGFuZ2VfXG4gICAqIEBmaXJlcyBQbGF5ZXIjcmF0ZWNoYW5nZVxuICAgKiBAbGlzdGVucyBUZWNoI3JhdGVjaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaFJhdGVDaGFuZ2VfID0gZnVuY3Rpb24gaGFuZGxlVGVjaFJhdGVDaGFuZ2VfKCkge1xuICAgIGlmICh0aGlzLnRlY2hfLnBsYXliYWNrUmF0ZSgpID4gMCAmJiB0aGlzLmNhY2hlXy5sYXN0UGxheWJhY2tSYXRlID09PSAwKSB7XG4gICAgICB0aGlzLnF1ZXVlZENhbGxiYWNrc18uZm9yRWFjaChmdW5jdGlvbiAocXVldWVkKSB7XG4gICAgICAgIHJldHVybiBxdWV1ZWQuY2FsbGJhY2socXVldWVkLmV2ZW50KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5xdWV1ZWRDYWxsYmFja3NfID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5jYWNoZV8ubGFzdFBsYXliYWNrUmF0ZSA9IHRoaXMudGVjaF8ucGxheWJhY2tSYXRlKCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcGxheWluZyBzcGVlZCBvZiB0aGUgYXVkaW8vdmlkZW8gaXMgY2hhbmdlZFxuICAgICAqXG4gICAgICogQGV2ZW50IFBsYXllciNyYXRlY2hhbmdlXG4gICAgICogQHR5cGUge2V2ZW50fVxuICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdyYXRlY2hhbmdlJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZ2dlciB0aGUgYHdhaXRpbmdgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LlxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI3dhaXRpbmdcbiAgICogQGxpc3RlbnMgVGVjaCN3YWl0aW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hXYWl0aW5nXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hXYWl0aW5nXygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy13YWl0aW5nJyk7XG4gICAgLyoqXG4gICAgICogQSByZWFkeVN0YXRlIGNoYW5nZSBvbiB0aGUgRE9NIGVsZW1lbnQgaGFzIGNhdXNlZCBwbGF5YmFjayB0byBzdG9wLlxuICAgICAqXG4gICAgICogQGV2ZW50IFBsYXllciN3YWl0aW5nXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCd3YWl0aW5nJyk7IC8vIEJyb3dzZXJzIG1heSBlbWl0IGEgdGltZXVwZGF0ZSBldmVudCBhZnRlciBhIHdhaXRpbmcgZXZlbnQuIEluIG9yZGVyIHRvIHByZXZlbnRcbiAgICAvLyBwcmVtYXR1cmUgcmVtb3ZhbCBvZiB0aGUgd2FpdGluZyBjbGFzcywgd2FpdCBmb3IgdGhlIHRpbWUgdG8gY2hhbmdlLlxuXG4gICAgdmFyIHRpbWVXaGVuV2FpdGluZyA9IHRoaXMuY3VycmVudFRpbWUoKTtcblxuICAgIHZhciB0aW1lVXBkYXRlTGlzdGVuZXIgPSBmdW5jdGlvbiB0aW1lVXBkYXRlTGlzdGVuZXIoKSB7XG4gICAgICBpZiAodGltZVdoZW5XYWl0aW5nICE9PSBfdGhpczcuY3VycmVudFRpbWUoKSkge1xuICAgICAgICBfdGhpczcucmVtb3ZlQ2xhc3MoJ3Zqcy13YWl0aW5nJyk7XG5cbiAgICAgICAgX3RoaXM3Lm9mZigndGltZXVwZGF0ZScsIHRpbWVVcGRhdGVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub24oJ3RpbWV1cGRhdGUnLCB0aW1lVXBkYXRlTGlzdGVuZXIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGBjYW5wbGF5YCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICogPiBOb3RlOiBUaGlzIGlzIG5vdCBjb25zaXN0ZW50IGJldHdlZW4gYnJvd3NlcnMuIFNlZSAjMTM1MVxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI2NhbnBsYXlcbiAgICogQGxpc3RlbnMgVGVjaCNjYW5wbGF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hDYW5QbGF5XyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hDYW5QbGF5XygpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtd2FpdGluZycpO1xuICAgIC8qKlxuICAgICAqIFRoZSBtZWRpYSBoYXMgYSByZWFkeVN0YXRlIG9mIEhBVkVfRlVUVVJFX0RBVEEgb3IgZ3JlYXRlci5cbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjY2FucGxheVxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKi9cblxuICAgIHRoaXMudHJpZ2dlcignY2FucGxheScpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGBjYW5wbGF5dGhyb3VnaGAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjY2FucGxheXRocm91Z2hcbiAgICogQGxpc3RlbnMgVGVjaCNjYW5wbGF5dGhyb3VnaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoQ2FuUGxheVRocm91Z2hfID0gZnVuY3Rpb24gaGFuZGxlVGVjaENhblBsYXlUaHJvdWdoXygpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtd2FpdGluZycpO1xuICAgIC8qKlxuICAgICAqIFRoZSBtZWRpYSBoYXMgYSByZWFkeVN0YXRlIG9mIEhBVkVfRU5PVUdIX0RBVEEgb3IgZ3JlYXRlci4gVGhpcyBtZWFucyB0aGF0IHRoZVxuICAgICAqIGVudGlyZSBtZWRpYSBmaWxlIGNhbiBiZSBwbGF5ZWQgd2l0aG91dCBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI2NhbnBsYXl0aHJvdWdoXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdjYW5wbGF5dGhyb3VnaCcpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGBwbGF5aW5nYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNwbGF5aW5nXG4gICAqIEBsaXN0ZW5zIFRlY2gjcGxheWluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoUGxheWluZ18gPSBmdW5jdGlvbiBoYW5kbGVUZWNoUGxheWluZ18oKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLXdhaXRpbmcnKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWVkaWEgaXMgbm8gbG9uZ2VyIGJsb2NrZWQgZnJvbSBwbGF5YmFjaywgYW5kIGhhcyBzdGFydGVkIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI3BsYXlpbmdcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3BsYXlpbmcnKTtcbiAgfVxuICAvKipcbiAgICogUmV0cmlnZ2VyIHRoZSBgc2Vla2luZ2AgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjc2Vla2luZ1xuICAgKiBAbGlzdGVucyBUZWNoI3NlZWtpbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaFNlZWtpbmdfID0gZnVuY3Rpb24gaGFuZGxlVGVjaFNlZWtpbmdfKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1zZWVraW5nJyk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIHBsYXllciBpcyBqdW1waW5nIHRvIGEgbmV3IHRpbWVcbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjc2Vla2luZ1xuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKi9cblxuICAgIHRoaXMudHJpZ2dlcignc2Vla2luZycpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGBzZWVrZWRgIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSB0aGUge0BsaW5rIFRlY2h9LlxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI3NlZWtlZFxuICAgKiBAbGlzdGVucyBUZWNoI3NlZWtlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoU2Vla2VkXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hTZWVrZWRfKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1zZWVraW5nJyk7XG4gICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWVuZGVkJyk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgcGxheWVyIGhhcyBmaW5pc2hlZCBqdW1waW5nIHRvIGEgbmV3IHRpbWVcbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjc2Vla2VkXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdzZWVrZWQnKTtcbiAgfVxuICAvKipcbiAgICogUmV0cmlnZ2VyIHRoZSBgZmlyc3RwbGF5YCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNmaXJzdHBsYXlcbiAgICogQGxpc3RlbnMgVGVjaCNmaXJzdHBsYXlcbiAgICogQGRlcHJlY2F0ZWQgQXMgb2YgNi4wIGZpcnN0cGxheSBldmVudCBpcyBkZXByZWNhdGVkLlxuICAgKiAgICAgICAgICAgICBBcyBvZiA2LjAgcGFzc2luZyB0aGUgYHN0YXJ0dGltZWAgb3B0aW9uIHRvIHRoZSBwbGF5ZXIgYW5kIHRoZSBmaXJzdHBsYXkgZXZlbnQgYXJlIGRlcHJlY2F0ZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hGaXJzdFBsYXlfID0gZnVuY3Rpb24gaGFuZGxlVGVjaEZpcnN0UGxheV8oKSB7XG4gICAgLy8gSWYgdGhlIGZpcnN0IHN0YXJ0dGltZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkXG4gICAgLy8gdGhlbiB3ZSB3aWxsIHN0YXJ0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaW4gc2Vjb25kc1xuICAgIGlmICh0aGlzLm9wdGlvbnNfLnN0YXJ0dGltZSkge1xuICAgICAgbG9nLndhcm4oJ1Bhc3NpbmcgdGhlIGBzdGFydHRpbWVgIG9wdGlvbiB0byB0aGUgcGxheWVyIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiA2LjAnKTtcbiAgICAgIHRoaXMuY3VycmVudFRpbWUodGhpcy5vcHRpb25zXy5zdGFydHRpbWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1oYXMtc3RhcnRlZCcpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHRoZSBmaXJzdCB0aW1lIGEgdmlkZW8gaXMgcGxheWVkLiBOb3QgcGFydCBvZiB0aGUgSExTIHNwZWMsIGFuZCB0aGlzIGlzXG4gICAgICogcHJvYmFibHkgbm90IHRoZSBiZXN0IGltcGxlbWVudGF0aW9uIHlldCwgc28gdXNlIHNwYXJpbmdseS4gSWYgeW91IGRvbid0IGhhdmUgYVxuICAgICAqIHJlYXNvbiB0byBwcmV2ZW50IHBsYXliYWNrLCB1c2UgYG15UGxheWVyLm9uZSgncGxheScpO2AgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjZmlyc3RwbGF5XG4gICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgNi4wIGZpcnN0cGxheSBldmVudCBpcyBkZXByZWNhdGVkLlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgKi9cblxuICAgIHRoaXMudHJpZ2dlcignZmlyc3RwbGF5Jyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZ2dlciB0aGUgYHBhdXNlYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNwYXVzZVxuICAgKiBAbGlzdGVucyBUZWNoI3BhdXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hQYXVzZV8gPSBmdW5jdGlvbiBoYW5kbGVUZWNoUGF1c2VfKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1wbGF5aW5nJyk7XG4gICAgdGhpcy5hZGRDbGFzcygndmpzLXBhdXNlZCcpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtZWRpYSBoYXMgYmVlbiBwYXVzZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjcGF1c2VcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3BhdXNlJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZ2dlciB0aGUgYGVuZGVkYCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHtAbGluayBUZWNofS5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNlbmRlZFxuICAgKiBAbGlzdGVucyBUZWNoI2VuZGVkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hFbmRlZF8gPSBmdW5jdGlvbiBoYW5kbGVUZWNoRW5kZWRfKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1lbmRlZCcpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc18ubG9vcCkge1xuICAgICAgdGhpcy5jdXJyZW50VGltZSgwKTtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucGF1c2VkKCkpIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBtZWRpYSByZXNvdXJjZSBpcyByZWFjaGVkIChjdXJyZW50VGltZSA9PSBkdXJhdGlvbilcbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjZW5kZWRcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cblxuICAgIHRoaXMudHJpZ2dlcignZW5kZWQnKTtcbiAgfVxuICAvKipcbiAgICogRmlyZWQgd2hlbiB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIHJlc291cmNlIGlzIGZpcnN0IGtub3duIG9yIGNoYW5nZWRcbiAgICpcbiAgICogQGxpc3RlbnMgVGVjaCNkdXJhdGlvbmNoYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoRHVyYXRpb25DaGFuZ2VfID0gZnVuY3Rpb24gaGFuZGxlVGVjaER1cmF0aW9uQ2hhbmdlXygpIHtcbiAgICB0aGlzLmR1cmF0aW9uKHRoaXMudGVjaEdldF8oJ2R1cmF0aW9uJykpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYSBjbGljayBvbiB0aGUgbWVkaWEgZWxlbWVudCB0byBwbGF5L3BhdXNlXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICB0aGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byB0cmlnZ2VyXG4gICAqXG4gICAqIEBsaXN0ZW5zIFRlY2gjbW91c2V1cFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoQ2xpY2tfID0gZnVuY3Rpb24gaGFuZGxlVGVjaENsaWNrXyhldmVudCkge1xuICAgIGlmICghaXNTaW5nbGVMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXaGVuIGNvbnRyb2xzIGFyZSBkaXNhYmxlZCBhIGNsaWNrIHNob3VsZCBub3QgdG9nZ2xlIHBsYXliYWNrIGJlY2F1c2VcbiAgICAvLyB0aGUgY2xpY2sgaXMgY29uc2lkZXJlZCBhIGNvbnRyb2xcblxuXG4gICAgaWYgKCF0aGlzLmNvbnRyb2xzXykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhdXNlZCgpKSB7XG4gICAgICBzaWxlbmNlUHJvbWlzZSh0aGlzLnBsYXkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBhIGRvdWJsZS1jbGljayBvbiB0aGUgbWVkaWEgZWxlbWVudCB0byBlbnRlci9leGl0IGZ1bGxzY3JlZW5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIHRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIHRyaWdnZXJcbiAgICpcbiAgICogQGxpc3RlbnMgVGVjaCNkYmxjbGlja1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoRG91YmxlQ2xpY2tfID0gZnVuY3Rpb24gaGFuZGxlVGVjaERvdWJsZUNsaWNrXyhldmVudCkge1xuICAgIGlmICghdGhpcy5jb250cm9sc18pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHdlIGRvIG5vdCB3YW50IHRvIHRvZ2dsZSBmdWxsc2NyZWVuIHN0YXRlXG4gICAgLy8gd2hlbiBkb3VibGUtY2xpY2tpbmcgaW5zaWRlIGEgY29udHJvbCBiYXIgb3IgYSBtb2RhbFxuXG5cbiAgICB2YXIgaW5BbGxvd2VkRWxzID0gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0aGlzLiQkKCcudmpzLWNvbnRyb2wtYmFyLCAudmpzLW1vZGFsLWRpYWxvZycpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHJldHVybiBlbC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpbkFsbG93ZWRFbHMpIHtcbiAgICAgIC8qXG4gICAgICAgKiBvcHRpb25zLnVzZXJBY3Rpb25zLmRvdWJsZUNsaWNrXG4gICAgICAgKlxuICAgICAgICogSWYgYHVuZGVmaW5lZGAgb3IgYHRydWVgLCBkb3VibGUtY2xpY2sgdG9nZ2xlcyBmdWxsc2NyZWVuIGlmIGNvbnRyb2xzIGFyZSBwcmVzZW50XG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGRvdWJsZS1jbGljayBoYW5kbGluZ1xuICAgICAgICogU2V0IHRvIGEgZnVuY3Rpb24gdG8gc3Vic3RpdHV0ZSBhbiBleHRlcm5hbCBkb3VibGUtY2xpY2sgaGFuZGxlclxuICAgICAgICovXG4gICAgICBpZiAodGhpcy5vcHRpb25zXyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9uc18udXNlckFjdGlvbnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9wdGlvbnNfLnVzZXJBY3Rpb25zLmRvdWJsZUNsaWNrID09PSB1bmRlZmluZWQgfHwgdGhpcy5vcHRpb25zXy51c2VyQWN0aW9ucy5kb3VibGVDbGljayAhPT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc18gIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnNfLnVzZXJBY3Rpb25zICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHRoaXMub3B0aW9uc18udXNlckFjdGlvbnMuZG91YmxlQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNfLnVzZXJBY3Rpb25zLmRvdWJsZUNsaWNrLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgICAgICB0aGlzLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYSB0YXAgb24gdGhlIG1lZGlhIGVsZW1lbnQuIEl0IHdpbGwgdG9nZ2xlIHRoZSB1c2VyXG4gICAqIGFjdGl2aXR5IHN0YXRlLCB3aGljaCBoaWRlcyBhbmQgc2hvd3MgdGhlIGNvbnRyb2xzLlxuICAgKlxuICAgKiBAbGlzdGVucyBUZWNoI3RhcFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoVGFwXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hUYXBfKCkge1xuICAgIHRoaXMudXNlckFjdGl2ZSghdGhpcy51c2VyQWN0aXZlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgdG91Y2ggdG8gc3RhcnRcbiAgICpcbiAgICogQGxpc3RlbnMgVGVjaCN0b3VjaHN0YXJ0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hUb3VjaFN0YXJ0XyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hUb3VjaFN0YXJ0XygpIHtcbiAgICB0aGlzLnVzZXJXYXNBY3RpdmUgPSB0aGlzLnVzZXJBY3RpdmUoKTtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlIHRvdWNoIHRvIG1vdmVcbiAgICpcbiAgICogQGxpc3RlbnMgVGVjaCN0b3VjaG1vdmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaFRvdWNoTW92ZV8gPSBmdW5jdGlvbiBoYW5kbGVUZWNoVG91Y2hNb3ZlXygpIHtcbiAgICBpZiAodGhpcy51c2VyV2FzQWN0aXZlKSB7XG4gICAgICB0aGlzLnJlcG9ydFVzZXJBY3Rpdml0eSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIHRvdWNoIHRvIGVuZFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgdGhlIHRvdWNoZW5kIGV2ZW50IHRoYXQgdHJpZ2dlcmVkXG4gICAqICAgICAgICB0aGlzIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBsaXN0ZW5zIFRlY2gjdG91Y2hlbmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaFRvdWNoRW5kXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hUb3VjaEVuZF8oZXZlbnQpIHtcbiAgICAvLyBTdG9wIHRoZSBtb3VzZSBldmVudHMgZnJvbSBhbHNvIGhhcHBlbmluZ1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgLyoqXG4gICAqIG5hdGl2ZSBjbGljayBldmVudHMgb24gdGhlIFNXRiBhcmVuJ3QgdHJpZ2dlcmVkIG9uIElFMTEsIFdpbjguMVJUXG4gICAqIHVzZSBzdGFnZWNsaWNrIGV2ZW50cyB0cmlnZ2VyZWQgZnJvbSBpbnNpZGUgdGhlIFNXRiBpbnN0ZWFkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBsaXN0ZW5zIHN0YWdlY2xpY2tcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlU3RhZ2VDbGlja18gPSBmdW5jdGlvbiBoYW5kbGVTdGFnZUNsaWNrXygpIHtcbiAgICB0aGlzLnJlcG9ydFVzZXJBY3Rpdml0eSgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b2dnbGVGdWxsc2NyZWVuQ2xhc3NfID0gZnVuY3Rpb24gdG9nZ2xlRnVsbHNjcmVlbkNsYXNzXygpIHtcbiAgICBpZiAodGhpcy5pc0Z1bGxzY3JlZW4oKSkge1xuICAgICAgdGhpcy5hZGRDbGFzcygndmpzLWZ1bGxzY3JlZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWZ1bGxzY3JlZW4nKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHdoZW4gdGhlIGRvY3VtZW50IGZzY2hhbmdlIGV2ZW50IHRyaWdnZXJzIGl0IGNhbGxzIHRoaXNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZG9jdW1lbnRGdWxsc2NyZWVuQ2hhbmdlXyA9IGZ1bmN0aW9uIGRvY3VtZW50RnVsbHNjcmVlbkNoYW5nZV8oZSkge1xuICAgIHZhciBlbCA9IHRoaXMuZWwoKTtcbiAgICB2YXIgaXNGcyA9IGRvY3VtZW50W3RoaXMuZnNBcGlfLmZ1bGxzY3JlZW5FbGVtZW50XSA9PT0gZWw7XG5cbiAgICBpZiAoIWlzRnMgJiYgZWwubWF0Y2hlcykge1xuICAgICAgaXNGcyA9IGVsLm1hdGNoZXMoJzonICsgdGhpcy5mc0FwaV8uZnVsbHNjcmVlbik7XG4gICAgfSBlbHNlIGlmICghaXNGcyAmJiBlbC5tc01hdGNoZXNTZWxlY3Rvcikge1xuICAgICAgaXNGcyA9IGVsLm1zTWF0Y2hlc1NlbGVjdG9yKCc6JyArIHRoaXMuZnNBcGlfLmZ1bGxzY3JlZW4pO1xuICAgIH1cblxuICAgIHRoaXMuaXNGdWxsc2NyZWVuKGlzRnMpOyAvLyBJZiBjYW5jZWxsaW5nIGZ1bGxzY3JlZW4sIHJlbW92ZSBldmVudCBsaXN0ZW5lci5cblxuICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbigpID09PSBmYWxzZSkge1xuICAgICAgb2ZmKGRvY3VtZW50LCB0aGlzLmZzQXBpXy5mdWxsc2NyZWVuY2hhbmdlLCB0aGlzLmJvdW5kRG9jdW1lbnRGdWxsc2NyZWVuQ2hhbmdlXyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZnNBcGlfLnByZWZpeGVkKSB7XG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjZnVsbHNjcmVlbmNoYW5nZVxuICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICovXG4gICAgICB0aGlzLnRyaWdnZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBUZWNoIEZ1bGxzY3JlZW4gQ2hhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR+RXZlbnR9IGV2ZW50XG4gICAqICAgICAgICB0aGUgZnVsbHNjcmVlbmNoYW5nZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqICAgICAgICB0aGUgZGF0YSB0aGF0IHdhcyBzZW50IHdpdGggdGhlIGV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBsaXN0ZW5zIFRlY2gjZnVsbHNjcmVlbmNoYW5nZVxuICAgKiBAZmlyZXMgUGxheWVyI2Z1bGxzY3JlZW5jaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaEZ1bGxzY3JlZW5DaGFuZ2VfID0gZnVuY3Rpb24gaGFuZGxlVGVjaEZ1bGxzY3JlZW5DaGFuZ2VfKGV2ZW50LCBkYXRhKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuaXNGdWxsc2NyZWVuKGRhdGEuaXNGdWxsc2NyZWVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBnb2luZyBpbiBhbmQgb3V0IG9mIGZ1bGxzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI2Z1bGxzY3JlZW5jaGFuZ2VcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cblxuICAgIHRoaXMudHJpZ2dlcignZnVsbHNjcmVlbmNoYW5nZScpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b2dnbGVQaWN0dXJlSW5QaWN0dXJlQ2xhc3NfID0gZnVuY3Rpb24gdG9nZ2xlUGljdHVyZUluUGljdHVyZUNsYXNzXygpIHtcbiAgICBpZiAodGhpcy5pc0luUGljdHVyZUluUGljdHVyZSgpKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKCd2anMtcGljdHVyZS1pbi1waWN0dXJlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy1waWN0dXJlLWluLXBpY3R1cmUnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBUZWNoIEVudGVyIFBpY3R1cmUtaW4tUGljdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIHRoZSBlbnRlcnBpY3R1cmVpbnBpY3R1cmUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbGlzdGVucyBUZWNoI2VudGVycGljdHVyZWlucGljdHVyZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoRW50ZXJQaWN0dXJlSW5QaWN0dXJlXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hFbnRlclBpY3R1cmVJblBpY3R1cmVfKGV2ZW50KSB7XG4gICAgdGhpcy5pc0luUGljdHVyZUluUGljdHVyZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogSGFuZGxlIFRlY2ggTGVhdmUgUGljdHVyZS1pbi1QaWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgdGhlIGxlYXZlcGljdHVyZWlucGljdHVyZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBsaXN0ZW5zIFRlY2gjbGVhdmVwaWN0dXJlaW5waWN0dXJlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hMZWF2ZVBpY3R1cmVJblBpY3R1cmVfID0gZnVuY3Rpb24gaGFuZGxlVGVjaExlYXZlUGljdHVyZUluUGljdHVyZV8oZXZlbnQpIHtcbiAgICB0aGlzLmlzSW5QaWN0dXJlSW5QaWN0dXJlKGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogRmlyZXMgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGxvYWRpbmcgb2YgYW4gYXVkaW8vdmlkZW8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBsaXN0ZW5zIFRlY2gjZXJyb3JcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlVGVjaEVycm9yXyA9IGZ1bmN0aW9uIGhhbmRsZVRlY2hFcnJvcl8oKSB7XG4gICAgdmFyIGVycm9yID0gdGhpcy50ZWNoXy5lcnJvcigpO1xuICAgIHRoaXMuZXJyb3IoZXJyb3IpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWdnZXIgdGhlIGB0ZXh0ZGF0YWAgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB7QGxpbmsgVGVjaH0uXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjdGV4dGRhdGFcbiAgICogQGxpc3RlbnMgVGVjaCN0ZXh0ZGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVUZWNoVGV4dERhdGFfID0gZnVuY3Rpb24gaGFuZGxlVGVjaFRleHREYXRhXygpIHtcbiAgICB2YXIgZGF0YSA9IG51bGw7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEgPSBhcmd1bWVudHNbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gd2UgZ2V0IGEgdGV4dGRhdGEgZXZlbnQgZnJvbSB0ZWNoXG4gICAgICpcbiAgICAgKiBAZXZlbnQgUGxheWVyI3RleHRkYXRhXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3RleHRkYXRhJywgZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvYmplY3QgZm9yIGNhY2hlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogICAgICAgICBnZXQgdGhlIGN1cnJlbnQgb2JqZWN0IGNhY2hlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENhY2hlID0gZnVuY3Rpb24gZ2V0Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVfO1xuICB9XG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGludGVybmFsIGNhY2hlIG9iamVjdC5cbiAgICpcbiAgICogVXNpbmcgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoZSBwbGF5ZXIgY29uc3RydWN0b3Igb3IgcmVzZXQgbWV0aG9kIG1heVxuICAgKiBoYXZlIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXNldENhY2hlXyA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGVfKCkge1xuICAgIHRoaXMuY2FjaGVfID0ge1xuICAgICAgLy8gUmlnaHQgbm93LCB0aGUgY3VycmVudFRpbWUgaXMgbm90IF9yZWFsbHlfIGNhY2hlZCBiZWNhdXNlIGl0IGlzIGFsd2F5c1xuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHRlY2ggKHNlZTogY3VycmVudFRpbWUpLiBIb3dldmVyLCBmb3IgY29tcGxldGVuZXNzLFxuICAgICAgLy8gd2Ugc2V0IGl0IHRvIHplcm8gaGVyZSB0byBlbnN1cmUgdGhhdCBpZiB3ZSBkbyBzdGFydCBhY3R1YWxseSBjYWNoaW5nXG4gICAgICAvLyBpdCwgd2UgcmVzZXQgaXQgYWxvbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UuXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGluYWN0aXZpdHlUaW1lb3V0OiB0aGlzLm9wdGlvbnNfLmluYWN0aXZpdHlUaW1lb3V0LFxuICAgICAgZHVyYXRpb246IE5hTixcbiAgICAgIGxhc3RWb2x1bWU6IDEsXG4gICAgICBsYXN0UGxheWJhY2tSYXRlOiB0aGlzLmRlZmF1bHRQbGF5YmFja1JhdGUoKSxcbiAgICAgIG1lZGlhOiBudWxsLFxuICAgICAgc3JjOiAnJyxcbiAgICAgIHNvdXJjZToge30sXG4gICAgICBzb3VyY2VzOiBbXSxcbiAgICAgIHZvbHVtZTogMVxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhc3MgdmFsdWVzIHRvIHRoZSBwbGF5YmFjayB0ZWNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kXVxuICAgKiAgICAgICAgdGhlIG1ldGhvZCB0byBjYWxsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdcbiAgICogICAgICAgIHRoZSBhcmd1bWVudCB0byBwYXNzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRlY2hDYWxsXyA9IGZ1bmN0aW9uIHRlY2hDYWxsXyhtZXRob2QsIGFyZykge1xuICAgIC8vIElmIGl0J3Mgbm90IHJlYWR5IHlldCwgY2FsbCBtZXRob2Qgd2hlbiBpdCBpc1xuICAgIHRoaXMucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1ldGhvZCBpbiBhbGxvd2VkU2V0dGVycykge1xuICAgICAgICByZXR1cm4gc2V0KHRoaXMubWlkZGxld2FyZV8sIHRoaXMudGVjaF8sIG1ldGhvZCwgYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAobWV0aG9kIGluIGFsbG93ZWRNZWRpYXRvcnMpIHtcbiAgICAgICAgcmV0dXJuIG1lZGlhdGUodGhpcy5taWRkbGV3YXJlXywgdGhpcy50ZWNoXywgbWV0aG9kLCBhcmcpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy50ZWNoXykge1xuICAgICAgICAgIHRoaXMudGVjaF9bbWV0aG9kXShhcmcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZyhlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9LCB0cnVlKTtcbiAgfVxuICAvKipcbiAgICogR2V0IGNhbGxzIGNhbid0IHdhaXQgZm9yIHRoZSB0ZWNoLCBhbmQgc29tZXRpbWVzIGRvbid0IG5lZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAgICogICAgICAgIFRlY2ggbWV0aG9kXG4gICAqXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufHVuZGVmaW5lZH1cbiAgICogICAgICAgICB0aGUgbWV0aG9kIG9yIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50ZWNoR2V0XyA9IGZ1bmN0aW9uIHRlY2hHZXRfKG1ldGhvZCkge1xuICAgIGlmICghdGhpcy50ZWNoXyB8fCAhdGhpcy50ZWNoXy5pc1JlYWR5Xykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgaW4gYWxsb3dlZEdldHRlcnMpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcy5taWRkbGV3YXJlXywgdGhpcy50ZWNoXywgbWV0aG9kKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCBpbiBhbGxvd2VkTWVkaWF0b3JzKSB7XG4gICAgICByZXR1cm4gbWVkaWF0ZSh0aGlzLm1pZGRsZXdhcmVfLCB0aGlzLnRlY2hfLCBtZXRob2QpO1xuICAgIH0gLy8gRmxhc2ggbGlrZXMgdG8gZGllIGFuZCByZWxvYWQgd2hlbiB5b3UgaGlkZSBvciByZXBvc2l0aW9uIGl0LlxuICAgIC8vIEluIHRoZXNlIGNhc2VzIHRoZSBvYmplY3QgbWV0aG9kcyBnbyBhd2F5IGFuZCB3ZSBnZXQgZXJyb3JzLlxuICAgIC8vIFdoZW4gdGhhdCBoYXBwZW5zIHdlJ2xsIGNhdGNoIHRoZSBlcnJvcnMgYW5kIGluZm9ybSB0ZWNoIHRoYXQgaXQncyBub3QgcmVhZHkgYW55IG1vcmUuXG5cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy50ZWNoX1ttZXRob2RdKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gV2hlbiBidWlsZGluZyBhZGRpdGlvbmFsIHRlY2ggbGlicywgYW4gZXhwZWN0ZWQgbWV0aG9kIG1heSBub3QgYmUgZGVmaW5lZCB5ZXRcbiAgICAgIGlmICh0aGlzLnRlY2hfW21ldGhvZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb2coXCJWaWRlby5qczogXCIgKyBtZXRob2QgKyBcIiBtZXRob2Qgbm90IGRlZmluZWQgZm9yIFwiICsgdGhpcy50ZWNoTmFtZV8gKyBcIiBwbGF5YmFjayB0ZWNobm9sb2d5LlwiLCBlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gLy8gV2hlbiBhIG1ldGhvZCBpc24ndCBhdmFpbGFibGUgb24gdGhlIG9iamVjdCBpdCB0aHJvd3MgYSBUeXBlRXJyb3JcblxuXG4gICAgICBpZiAoZS5uYW1lID09PSAnVHlwZUVycm9yJykge1xuICAgICAgICBsb2coXCJWaWRlby5qczogXCIgKyBtZXRob2QgKyBcIiB1bmF2YWlsYWJsZSBvbiBcIiArIHRoaXMudGVjaE5hbWVfICsgXCIgcGxheWJhY2sgdGVjaG5vbG9neSBlbGVtZW50LlwiLCBlKTtcbiAgICAgICAgdGhpcy50ZWNoXy5pc1JlYWR5XyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSAvLyBJZiBlcnJvciB1bmtub3duLCBqdXN0IGxvZyBhbmQgdGhyb3dcblxuXG4gICAgICBsb2coZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQXR0ZW1wdCB0byBiZWdpbiBwbGF5YmFjayBhdCB0aGUgZmlyc3Qgb3Bwb3J0dW5pdHkuXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V8dW5kZWZpbmVkfVxuICAgKiAgICAgICAgIFJldHVybnMgYSBwcm9taXNlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIFByb21pc2VzIChvciBvbmVcbiAgICogICAgICAgICB3YXMgcGFzc2VkIGluIGFzIGFuIG9wdGlvbikuIFRoaXMgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIG9uXG4gICAqICAgICAgICAgdGhlIHJldHVybiB2YWx1ZSBvZiBwbGF5LiBJZiB0aGlzIGlzIHVuZGVmaW5lZCBpdCB3aWxsIGZ1bGZpbGwgdGhlXG4gICAqICAgICAgICAgcHJvbWlzZSBjaGFpbiBvdGhlcndpc2UgdGhlIHByb21pc2UgY2hhaW4gd2lsbCBiZSBmdWxmaWxsZWQgd2hlblxuICAgKiAgICAgICAgIHRoZSBwcm9taXNlIGZyb20gcGxheSBpcyBmdWxmaWxsZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBsYXkgPSBmdW5jdGlvbiBwbGF5KCkge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgdmFyIFByb21pc2VDbGFzcyA9IHRoaXMub3B0aW9uc18uUHJvbWlzZSB8fCB3aW5kb3ckMS5Qcm9taXNlO1xuXG4gICAgaWYgKFByb21pc2VDbGFzcykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ2xhc3MoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgX3RoaXM4LnBsYXlfKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheV8oKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGFjdHVhbCBsb2dpYyBmb3IgcGxheSwgdGFrZXMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlXG4gICAqIHJldHVybiB2YWx1ZSBvZiBwbGF5LiBUaGlzIGFsbG93cyB1cyB0byByZXNvbHZlIHRvIHRoZSBwbGF5IHByb21pc2UgaWYgdGhlcmVcbiAgICogaXMgb25lIG9uIG1vZGVybiBicm93c2Vycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXVxuICAgKiAgICAgICAgVGhlIGNhbGxiYWNrIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSB0ZWNocyBwbGF5IGlzIGFjdHVhbGx5IGNhbGxlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wbGF5XyA9IGZ1bmN0aW9uIHBsYXlfKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHZvaWQgMCkge1xuICAgICAgY2FsbGJhY2sgPSBzaWxlbmNlUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlDYWxsYmFja3NfLnB1c2goY2FsbGJhY2spO1xuICAgIHZhciBpc1NyY1JlYWR5ID0gQm9vbGVhbighdGhpcy5jaGFuZ2luZ1NyY18gJiYgKHRoaXMuc3JjKCkgfHwgdGhpcy5jdXJyZW50U3JjKCkpKTsgLy8gdHJlYXQgY2FsbHMgdG8gcGxheV8gc29tZXdoYXQgbGlrZSB0aGUgYG9uZWAgZXZlbnQgZnVuY3Rpb25cblxuICAgIGlmICh0aGlzLndhaXRUb1BsYXlfKSB7XG4gICAgICB0aGlzLm9mZihbJ3JlYWR5JywgJ2xvYWRzdGFydCddLCB0aGlzLndhaXRUb1BsYXlfKTtcbiAgICAgIHRoaXMud2FpdFRvUGxheV8gPSBudWxsO1xuICAgIH0gLy8gaWYgdGhlIHBsYXllci90ZWNoIGlzIG5vdCByZWFkeSBvciB0aGUgc3JjIGl0c2VsZiBpcyBub3QgcmVhZHlcbiAgICAvLyBxdWV1ZSB1cCBhIGNhbGwgdG8gcGxheSBvbiBgcmVhZHlgIG9yIGBsb2Fkc3RhcnRgXG5cblxuICAgIGlmICghdGhpcy5pc1JlYWR5XyB8fCAhaXNTcmNSZWFkeSkge1xuICAgICAgdGhpcy53YWl0VG9QbGF5XyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIF90aGlzOS5wbGF5XygpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5vbmUoWydyZWFkeScsICdsb2Fkc3RhcnQnXSwgdGhpcy53YWl0VG9QbGF5Xyk7IC8vIGlmIHdlIGFyZSBpbiBTYWZhcmksIHRoZXJlIGlzIGEgaGlnaCBjaGFuY2UgdGhhdCBsb2Fkc3RhcnQgd2lsbCB0cmlnZ2VyIGFmdGVyIHRoZSBnZXN0dXJlIHRpbWVwZXJpb2RcbiAgICAgIC8vIGluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBwcmltZSB0aGUgdmlkZW8gZWxlbWVudCBieSBjYWxsaW5nIGxvYWQgc28gaXQnbGwgYmUgcmVhZHkgaW4gdGltZVxuXG4gICAgICBpZiAoIWlzU3JjUmVhZHkgJiYgKElTX0FOWV9TQUZBUkkgfHwgSVNfSU9TKSkge1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIHBsYXllci90ZWNoIGlzIHJlYWR5IGFuZCB3ZSBoYXZlIGEgc291cmNlLCB3ZSBjYW4gYXR0ZW1wdCBwbGF5YmFjay5cblxuXG4gICAgdmFyIHZhbCA9IHRoaXMudGVjaEdldF8oJ3BsYXknKTsgLy8gcGxheSB3YXMgdGVybWluYXRlZCBpZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbnVsbFxuXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5ydW5QbGF5VGVybWluYXRlZFF1ZXVlXygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1blBsYXlDYWxsYmFja3NfKHZhbCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBydW4gd2hlbiBpZiBwbGF5IGlzIHRlcm1pbmF0ZWQuIElmIHBsYXlcbiAgICogcnVuUGxheUNhbGxiYWNrc18gaXMgcnVuIHRoZXNlIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHJ1bi4gVGhpcyBhbGxvd3MgdXNcbiAgICogdG8gZGlmZmVyZW5jaWF0ZSBiZXR3ZWVuIGEgdGVybWluYXRlZCBwbGF5IGFuZCBhbiBhY3R1YWwgY2FsbCB0byBwbGF5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5ydW5QbGF5VGVybWluYXRlZFF1ZXVlXyA9IGZ1bmN0aW9uIHJ1blBsYXlUZXJtaW5hdGVkUXVldWVfKCkge1xuICAgIHZhciBxdWV1ZSA9IHRoaXMucGxheVRlcm1pbmF0ZWRRdWV1ZV8uc2xpY2UoMCk7XG4gICAgdGhpcy5wbGF5VGVybWluYXRlZFF1ZXVlXyA9IFtdO1xuICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICAgIHEoKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogV2hlbiBhIGNhbGxiYWNrIHRvIHBsYXkgaXMgZGVsYXllZCB3ZSBoYXZlIHRvIHJ1biB0aGVzZVxuICAgKiBjYWxsYmFja3Mgd2hlbiBwbGF5IGlzIGFjdHVhbGx5IGNhbGxlZCBvbiB0aGUgdGVjaC4gVGhpcyBmdW5jdGlvblxuICAgKiBydW5zIHRoZSBjYWxsYmFja3MgdGhhdCB3ZXJlIGRlbGF5ZWQgYW5kIGFjY2VwdHMgdGhlIHJldHVybiB2YWx1ZVxuICAgKiBmcm9tIHRoZSB0ZWNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3VuZGVmaW5lZHxQcm9taXNlfSB2YWxcbiAgICogICAgICAgIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgdGVjaC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucnVuUGxheUNhbGxiYWNrc18gPSBmdW5jdGlvbiBydW5QbGF5Q2FsbGJhY2tzXyh2YWwpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5wbGF5Q2FsbGJhY2tzXy5zbGljZSgwKTtcbiAgICB0aGlzLnBsYXlDYWxsYmFja3NfID0gW107IC8vIGNsZWFyIHBsYXkgdGVybWluYXRlZFF1ZXVlIHNpbmNlIHdlIGZpbmlzaGVkIGEgcmVhbCBwbGF5XG5cbiAgICB0aGlzLnBsYXlUZXJtaW5hdGVkUXVldWVfID0gW107XG4gICAgY2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYih2YWwpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBQYXVzZSB0aGUgdmlkZW8gcGxheWJhY2tcbiAgICpcbiAgICogQHJldHVybiB7UGxheWVyfVxuICAgKiAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBwbGF5ZXIgb2JqZWN0IHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBvblxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHRoaXMudGVjaENhbGxfKCdwYXVzZScpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcGxheWVyIGlzIHBhdXNlZCBvciBoYXMgeWV0IHRvIHBsYXlcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICAtIGZhbHNlOiBpZiB0aGUgbWVkaWEgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICogICAgICAgICAtIHRydWU6IGlmIG1lZGlhIGlzIG5vdCBjdXJyZW50bHkgcGxheWluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXVzZWQgPSBmdW5jdGlvbiBwYXVzZWQoKSB7XG4gICAgLy8gVGhlIGluaXRpYWwgc3RhdGUgb2YgcGF1c2VkIHNob3VsZCBiZSB0cnVlIChpbiBTYWZhcmkgaXQncyBhY3R1YWxseSBmYWxzZSlcbiAgICByZXR1cm4gdGhpcy50ZWNoR2V0XygncGF1c2VkJykgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSBUaW1lUmFuZ2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCByYW5nZXMgb2YgdGltZSB0aGF0IHRoZSB1c2VyXG4gICAqIGhhcyBwbGF5ZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge1RpbWVSYW5nZX1cbiAgICogICAgICAgICBBIHRpbWUgcmFuZ2Ugb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhbGwgdGhlIGluY3JlbWVudHMgb2YgdGltZSB0aGF0IGhhdmVcbiAgICogICAgICAgICBiZWVuIHBsYXllZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGxheWVkID0gZnVuY3Rpb24gcGxheWVkKCkge1xuICAgIHJldHVybiB0aGlzLnRlY2hHZXRfKCdwbGF5ZWQnKSB8fCBjcmVhdGVUaW1lUmFuZ2VzKDAsIDApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGlzIFwic2NydWJiaW5nXCIuIFNjcnViYmluZyBpc1xuICAgKiB3aGVuIHRoZSB1c2VyIGhhcyBjbGlja2VkIHRoZSBwcm9ncmVzcyBiYXIgaGFuZGxlIGFuZCBpc1xuICAgKiBkcmFnZ2luZyBpdCBhbG9uZyB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1NjcnViYmluZ11cbiAgICogICAgICAgIHdoZXRoZXIgdGhlIHVzZXIgaXMgb3IgaXMgbm90IHNjcnViYmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIFRoZSB2YWx1ZSBvZiBzY3J1YmJpbmcgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNjcnViYmluZyA9IGZ1bmN0aW9uIHNjcnViYmluZyhpc1NjcnViYmluZykge1xuICAgIGlmICh0eXBlb2YgaXNTY3J1YmJpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3J1YmJpbmdfO1xuICAgIH1cblxuICAgIHRoaXMuc2NydWJiaW5nXyA9ICEhaXNTY3J1YmJpbmc7XG5cbiAgICBpZiAoaXNTY3J1YmJpbmcpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1zY3J1YmJpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLXNjcnViYmluZycpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgY3VycmVudCB0aW1lIChpbiBzZWNvbmRzKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtzZWNvbmRzXVxuICAgKiAgICAgICAgVGhlIHRpbWUgdG8gc2VlayB0byBpbiBzZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICAtIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcyB3aGVuIGdldHRpbmdcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3VycmVudFRpbWUgPSBmdW5jdGlvbiBjdXJyZW50VGltZShzZWNvbmRzKSB7XG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHNlY29uZHMgPCAwKSB7XG4gICAgICAgIHNlY29uZHMgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRlY2hDYWxsXygnc2V0Q3VycmVudFRpbWUnLCBzZWNvbmRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNhY2hlIGxhc3QgY3VycmVudFRpbWUgYW5kIHJldHVybi4gZGVmYXVsdCB0byAwIHNlY29uZHNcbiAgICAvL1xuICAgIC8vIENhY2hpbmcgdGhlIGN1cnJlbnRUaW1lIGlzIG1lYW50IHRvIHByZXZlbnQgYSBtYXNzaXZlIGFtb3VudCBvZiByZWFkcyBvbiB0aGUgdGVjaCdzXG4gICAgLy8gY3VycmVudFRpbWUgd2hlbiBzY3J1YmJpbmcsIGJ1dCBtYXkgbm90IHByb3ZpZGUgbXVjaCBwZXJmb3JtYW5jZSBiZW5lZml0IGFmdGVyYWxsLlxuICAgIC8vIFNob3VsZCBiZSB0ZXN0ZWQuIEFsc28gc29tZXRoaW5nIGhhcyB0byByZWFkIHRoZSBhY3R1YWwgY3VycmVudCB0aW1lIG9yIHRoZSBjYWNoZSB3aWxsXG4gICAgLy8gbmV2ZXIgZ2V0IHVwZGF0ZWQuXG5cblxuICAgIHRoaXMuY2FjaGVfLmN1cnJlbnRUaW1lID0gdGhpcy50ZWNoR2V0XygnY3VycmVudFRpbWUnKSB8fCAwO1xuICAgIHJldHVybiB0aGlzLmNhY2hlXy5jdXJyZW50VGltZTtcbiAgfVxuICAvKipcbiAgICogTm9ybWFsbHkgZ2V0cyB0aGUgbGVuZ3RoIGluIHRpbWUgb2YgdGhlIHZpZGVvIGluIHNlY29uZHM7XG4gICAqIGluIGFsbCBidXQgdGhlIHJhcmVzdCB1c2UgY2FzZXMgYW4gYXJndW1lbnQgd2lsbCBOT1QgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2RcbiAgICpcbiAgICogPiAqKk5PVEUqKjogVGhlIHZpZGVvIG11c3QgaGF2ZSBzdGFydGVkIGxvYWRpbmcgYmVmb3JlIHRoZSBkdXJhdGlvbiBjYW4gYmVcbiAgICoga25vd24sIGFuZCBpbiB0aGUgY2FzZSBvZiBGbGFzaCwgbWF5IG5vdCBiZSBrbm93biB1bnRpbCB0aGUgdmlkZW8gc3RhcnRzXG4gICAqIHBsYXlpbmcuXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjZHVyYXRpb25jaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzXVxuICAgKiAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRoZSB2aWRlbyB0byBzZXQgaW4gc2Vjb25kc1xuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgLSBUaGUgZHVyYXRpb24gb2YgdGhlIHZpZGVvIGluIHNlY29uZHMgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmR1cmF0aW9uID0gZnVuY3Rpb24gZHVyYXRpb24oc2Vjb25kcykge1xuICAgIGlmIChzZWNvbmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHJldHVybiBOYU4gaWYgdGhlIGR1cmF0aW9uIGlzIG5vdCBrbm93blxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVfLmR1cmF0aW9uICE9PSB1bmRlZmluZWQgPyB0aGlzLmNhY2hlXy5kdXJhdGlvbiA6IE5hTjtcbiAgICB9XG5cbiAgICBzZWNvbmRzID0gcGFyc2VGbG9hdChzZWNvbmRzKTsgLy8gU3RhbmRhcmRpemUgb24gSW5maW5pdHkgZm9yIHNpZ25hbGluZyB2aWRlbyBpcyBsaXZlXG5cbiAgICBpZiAoc2Vjb25kcyA8IDApIHtcbiAgICAgIHNlY29uZHMgPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyAhPT0gdGhpcy5jYWNoZV8uZHVyYXRpb24pIHtcbiAgICAgIC8vIENhY2hlIHRoZSBsYXN0IHNldCB2YWx1ZSBmb3Igb3B0aW1pemVkIHNjcnViYmluZyAoZXNwLiBGbGFzaClcbiAgICAgIHRoaXMuY2FjaGVfLmR1cmF0aW9uID0gc2Vjb25kcztcblxuICAgICAgaWYgKHNlY29uZHMgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1saXZlJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc18ubGl2ZXVpICYmIHRoaXMucGxheWVyXy5saXZlVHJhY2tlcikge1xuICAgICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1saXZldWknKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWxpdmUnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWxpdmV1aScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKHNlY29uZHMpKSB7XG4gICAgICAgIC8vIERvIG5vdCBmaXJlIGR1cmF0aW9uY2hhbmdlIHVubGVzcyB0aGUgZHVyYXRpb24gdmFsdWUgaXMga25vd24uXG4gICAgICAgIC8vIEBzZWUgW1NwZWNde0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3ZpZGVvLmh0bWwjbWVkaWEtZWxlbWVudC1sb2FkLWFsZ29yaXRobX1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGV2ZW50IFBsYXllciNkdXJhdGlvbmNoYW5nZVxuICAgICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2R1cmF0aW9uY2hhbmdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGhvdyBtdWNoIHRpbWUgaXMgbGVmdCBpbiB0aGUgdmlkZW8uIE5vdCBwYXJ0XG4gICAqIG9mIHRoZSBuYXRpdmUgdmlkZW8gQVBJLlxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgVGhlIHRpbWUgcmVtYWluaW5nIGluIHNlY29uZHNcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVtYWluaW5nVGltZSA9IGZ1bmN0aW9uIHJlbWFpbmluZ1RpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHVyYXRpb24oKSAtIHRoaXMuY3VycmVudFRpbWUoKTtcbiAgfVxuICAvKipcbiAgICogQSByZW1haW5pbmcgdGltZSBmdW5jdGlvbiB0aGF0IGlzIGludGVudGVkIHRvIGJlIHVzZWQgd2hlblxuICAgKiB0aGUgdGltZSBpcyB0byBiZSBkaXNwbGF5ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgcm91bmRlZCB0aW1lIHJlbWFpbmluZyBpbiBzZWNvbmRzXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbWFpbmluZ1RpbWVEaXNwbGF5ID0gZnVuY3Rpb24gcmVtYWluaW5nVGltZURpc3BsYXkoKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5kdXJhdGlvbigpKSAtIE1hdGguZmxvb3IodGhpcy5jdXJyZW50VGltZSgpKTtcbiAgfSAvL1xuICAvLyBLaW5kIG9mIGxpa2UgYW4gYXJyYXkgb2YgcG9ydGlvbnMgb2YgdGhlIHZpZGVvIHRoYXQgaGF2ZSBiZWVuIGRvd25sb2FkZWQuXG5cbiAgLyoqXG4gICAqIEdldCBhIFRpbWVSYW5nZSBvYmplY3Qgd2l0aCBhbiBhcnJheSBvZiB0aGUgdGltZXMgb2YgdGhlIHZpZGVvXG4gICAqIHRoYXQgaGF2ZSBiZWVuIGRvd25sb2FkZWQuIElmIHlvdSBqdXN0IHdhbnQgdGhlIHBlcmNlbnQgb2YgdGhlXG4gICAqIHZpZGVvIHRoYXQncyBiZWVuIGRvd25sb2FkZWQsIHVzZSBidWZmZXJlZFBlcmNlbnQuXG4gICAqXG4gICAqIEBzZWUgW0J1ZmZlcmVkIFNwZWNde0BsaW5rIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvdmlkZW8uaHRtbCNkb20tbWVkaWEtYnVmZmVyZWR9XG4gICAqXG4gICAqIEByZXR1cm4ge1RpbWVSYW5nZX1cbiAgICogICAgICAgICBBIG1vY2sgVGltZVJhbmdlIG9iamVjdCAoZm9sbG93aW5nIEhUTUwgc3BlYylcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVmZmVyZWQgPSBmdW5jdGlvbiBidWZmZXJlZCgpIHtcbiAgICB2YXIgYnVmZmVyZWQgPSB0aGlzLnRlY2hHZXRfKCdidWZmZXJlZCcpO1xuXG4gICAgaWYgKCFidWZmZXJlZCB8fCAhYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBidWZmZXJlZCA9IGNyZWF0ZVRpbWVSYW5nZXMoMCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcmVkO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHBlcmNlbnQgKGFzIGEgZGVjaW1hbCkgb2YgdGhlIHZpZGVvIHRoYXQncyBiZWVuIGRvd25sb2FkZWQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIG5vdCBhIHBhcnQgb2YgdGhlIG5hdGl2ZSBIVE1MIHZpZGVvIEFQSS5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIEEgZGVjaW1hbCBiZXR3ZWVuIDAgYW5kIDEgcmVwcmVzZW50aW5nIHRoZSBwZXJjZW50XG4gICAqICAgICAgICAgdGhhdCBpcyBidWZmZXJlZCAwIGJlaW5nIDAlIGFuZCAxIGJlaW5nIDEwMCVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVmZmVyZWRQZXJjZW50ID0gZnVuY3Rpb24gYnVmZmVyZWRQZXJjZW50JDEoKSB7XG4gICAgcmV0dXJuIGJ1ZmZlcmVkUGVyY2VudCh0aGlzLmJ1ZmZlcmVkKCksIHRoaXMuZHVyYXRpb24oKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgZW5kaW5nIHRpbWUgb2YgdGhlIGxhc3QgYnVmZmVyZWQgdGltZSByYW5nZVxuICAgKiBUaGlzIGlzIHVzZWQgaW4gdGhlIHByb2dyZXNzIGJhciB0byBlbmNhcHN1bGF0ZSBhbGwgdGltZSByYW5nZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgZW5kIG9mIHRoZSBsYXN0IGJ1ZmZlcmVkIHRpbWUgcmFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYnVmZmVyZWRFbmQgPSBmdW5jdGlvbiBidWZmZXJlZEVuZCgpIHtcbiAgICB2YXIgYnVmZmVyZWQgPSB0aGlzLmJ1ZmZlcmVkKCk7XG4gICAgdmFyIGR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbigpO1xuICAgIHZhciBlbmQgPSBidWZmZXJlZC5lbmQoYnVmZmVyZWQubGVuZ3RoIC0gMSk7XG5cbiAgICBpZiAoZW5kID4gZHVyYXRpb24pIHtcbiAgICAgIGVuZCA9IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBlbmQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGN1cnJlbnQgdm9sdW1lIG9mIHRoZSBtZWRpYVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtwZXJjZW50QXNEZWNpbWFsXVxuICAgKiAgICAgICAgIFRoZSBuZXcgdm9sdW1lIGFzIGEgZGVjaW1hbCBwZXJjZW50OlxuICAgKiAgICAgICAgIC0gMCBpcyBtdXRlZC8wJS9vZmZcbiAgICogICAgICAgICAtIDEuMCBpcyAxMDAlL2Z1bGxcbiAgICogICAgICAgICAtIDAuNSBpcyBoYWxmIHZvbHVtZSBvciA1MCVcbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IHZvbHVtZSBhcyBhIHBlcmNlbnQgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnZvbHVtZSA9IGZ1bmN0aW9uIHZvbHVtZShwZXJjZW50QXNEZWNpbWFsKSB7XG4gICAgdmFyIHZvbDtcblxuICAgIGlmIChwZXJjZW50QXNEZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEZvcmNlIHZhbHVlIHRvIGJldHdlZW4gMCBhbmQgMVxuICAgICAgdm9sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcGFyc2VGbG9hdChwZXJjZW50QXNEZWNpbWFsKSkpO1xuICAgICAgdGhpcy5jYWNoZV8udm9sdW1lID0gdm9sO1xuICAgICAgdGhpcy50ZWNoQ2FsbF8oJ3NldFZvbHVtZScsIHZvbCk7XG5cbiAgICAgIGlmICh2b2wgPiAwKSB7XG4gICAgICAgIHRoaXMubGFzdFZvbHVtZV8odm9sKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVmYXVsdCB0byAxIHdoZW4gcmV0dXJuaW5nIGN1cnJlbnQgdm9sdW1lLlxuXG5cbiAgICB2b2wgPSBwYXJzZUZsb2F0KHRoaXMudGVjaEdldF8oJ3ZvbHVtZScpKTtcbiAgICByZXR1cm4gaXNOYU4odm9sKSA/IDEgOiB2b2w7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBtdXRlZCBzdGF0ZSwgb3IgdHVybiBtdXRlIG9uIG9yIG9mZlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttdXRlZF1cbiAgICogICAgICAgIC0gdHJ1ZSB0byBtdXRlXG4gICAqICAgICAgICAtIGZhbHNlIHRvIHVubXV0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIC0gdHJ1ZSBpZiBtdXRlIGlzIG9uIGFuZCBnZXR0aW5nXG4gICAqICAgICAgICAgLSBmYWxzZSBpZiBtdXRlIGlzIG9mZiBhbmQgZ2V0dGluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5tdXRlZCA9IGZ1bmN0aW9uIG11dGVkKF9tdXRlZCkge1xuICAgIGlmIChfbXV0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50ZWNoQ2FsbF8oJ3NldE11dGVkJywgX211dGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZWNoR2V0XygnbXV0ZWQnKSB8fCBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGRlZmF1bHRNdXRlZCBzdGF0ZSwgb3IgdHVybiBkZWZhdWx0TXV0ZWQgb24gb3Igb2ZmLiBkZWZhdWx0TXV0ZWRcbiAgICogaW5kaWNhdGVzIHRoZSBzdGF0ZSBvZiBtdXRlZCBvbiBpbml0aWFsIHBsYXliYWNrLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAgIHZhciBteVBsYXllciA9IHZpZGVvanMoJ3NvbWUtcGxheWVyLWlkJyk7XG4gICAqXG4gICAqICAgbXlQbGF5ZXIuc3JjKFwiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9wYXRoL3RvL3ZpZGVvLm1wNFwiKTtcbiAgICpcbiAgICogICAvLyBnZXQsIHNob3VsZCBiZSBmYWxzZVxuICAgKiAgIGNvbnNvbGUubG9nKG15UGxheWVyLmRlZmF1bHRNdXRlZCgpKTtcbiAgICogICAvLyBzZXQgdG8gdHJ1ZVxuICAgKiAgIG15UGxheWVyLmRlZmF1bHRNdXRlZCh0cnVlKTtcbiAgICogICAvLyBnZXQgc2hvdWxkIGJlIHRydWVcbiAgICogICBjb25zb2xlLmxvZyhteVBsYXllci5kZWZhdWx0TXV0ZWQoKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWZhdWx0TXV0ZWRdXG4gICAqICAgICAgICAtIHRydWUgdG8gbXV0ZVxuICAgKiAgICAgICAgLSBmYWxzZSB0byB1bm11dGVcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbnxQbGF5ZXJ9XG4gICAqICAgICAgICAgLSB0cnVlIGlmIGRlZmF1bHRNdXRlZCBpcyBvbiBhbmQgZ2V0dGluZ1xuICAgKiAgICAgICAgIC0gZmFsc2UgaWYgZGVmYXVsdE11dGVkIGlzIG9mZiBhbmQgZ2V0dGluZ1xuICAgKiAgICAgICAgIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcGxheWVyIHdoZW4gc2V0dGluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5kZWZhdWx0TXV0ZWQgPSBmdW5jdGlvbiBkZWZhdWx0TXV0ZWQoX2RlZmF1bHRNdXRlZCkge1xuICAgIGlmIChfZGVmYXVsdE11dGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlY2hDYWxsXygnc2V0RGVmYXVsdE11dGVkJywgX2RlZmF1bHRNdXRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVjaEdldF8oJ2RlZmF1bHRNdXRlZCcpIHx8IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhc3Qgdm9sdW1lLCBvciBzZXQgaXRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSBbcGVyY2VudEFzRGVjaW1hbF1cbiAgICogICAgICAgICBUaGUgbmV3IGxhc3Qgdm9sdW1lIGFzIGEgZGVjaW1hbCBwZXJjZW50OlxuICAgKiAgICAgICAgIC0gMCBpcyBtdXRlZC8wJS9vZmZcbiAgICogICAgICAgICAtIDEuMCBpcyAxMDAlL2Z1bGxcbiAgICogICAgICAgICAtIDAuNSBpcyBoYWxmIHZvbHVtZSBvciA1MCVcbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKiAgICAgICAgIHRoZSBjdXJyZW50IHZhbHVlIG9mIGxhc3RWb2x1bWUgYXMgYSBwZXJjZW50IHdoZW4gZ2V0dGluZ1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5sYXN0Vm9sdW1lXyA9IGZ1bmN0aW9uIGxhc3RWb2x1bWVfKHBlcmNlbnRBc0RlY2ltYWwpIHtcbiAgICBpZiAocGVyY2VudEFzRGVjaW1hbCAhPT0gdW5kZWZpbmVkICYmIHBlcmNlbnRBc0RlY2ltYWwgIT09IDApIHtcbiAgICAgIHRoaXMuY2FjaGVfLmxhc3RWb2x1bWUgPSBwZXJjZW50QXNEZWNpbWFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlXy5sYXN0Vm9sdW1lO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50IHRlY2ggY2FuIHN1cHBvcnQgbmF0aXZlIGZ1bGxzY3JlZW5cbiAgICogKGUuZy4gd2l0aCBidWlsdCBpbiBjb250cm9scyBsaWtlIGlPUywgc28gbm90IG91ciBmbGFzaCBzd2YpXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgaWYgbmF0aXZlIGZ1bGxzY3JlZW4gaXMgc3VwcG9ydGVkXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1cHBvcnRzRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIHN1cHBvcnRzRnVsbFNjcmVlbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZWNoR2V0Xygnc3VwcG9ydHNGdWxsU2NyZWVuJykgfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwbGF5ZXIgaXMgaW4gZnVsbHNjcmVlbiBtb2RlIG9yIHRlbGwgdGhlIHBsYXllciB0aGF0IGl0XG4gICAqIGlzIG9yIGlzIG5vdCBpbiBmdWxsc2NyZWVuIG1vZGUuXG4gICAqXG4gICAqID4gTk9URTogQXMgb2YgdGhlIGxhdGVzdCBIVE1MNSBzcGVjLCBpc0Z1bGxzY3JlZW4gaXMgbm8gbG9uZ2VyIGFuIG9mZmljaWFsXG4gICAqIHByb3BlcnR5IGFuZCBpbnN0ZWFkIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50IGlzIHVzZWQuIEJ1dCBpc0Z1bGxzY3JlZW4gaXNcbiAgICogc3RpbGwgYSB2YWx1YWJsZSBwcm9wZXJ0eSBmb3IgaW50ZXJuYWwgcGxheWVyIHdvcmtpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gIHtib29sZWFufSBbaXNGU11cbiAgICogICAgICAgICBTZXQgdGhlIHBsYXllcnMgY3VycmVudCBmdWxsc2NyZWVuIHN0YXRlXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgLSB0cnVlIGlmIGZ1bGxzY3JlZW4gaXMgb24gYW5kIGdldHRpbmdcbiAgICogICAgICAgICAtIGZhbHNlIGlmIGZ1bGxzY3JlZW4gaXMgb2ZmIGFuZCBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmlzRnVsbHNjcmVlbiA9IGZ1bmN0aW9uIGlzRnVsbHNjcmVlbihpc0ZTKSB7XG4gICAgaWYgKGlzRlMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW5fID0gISFpc0ZTO1xuICAgICAgdGhpcy50b2dnbGVGdWxsc2NyZWVuQ2xhc3NfKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0Z1bGxzY3JlZW5fO1xuICB9XG4gIC8qKlxuICAgKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gdG8gZnVsbCBzY3JlZW5cbiAgICogSW4gc29tZSBicm93c2VycywgZnVsbCBzY3JlZW4gaXMgbm90IHN1cHBvcnRlZCBuYXRpdmVseSwgc28gaXQgZW50ZXJzXG4gICAqIFwiZnVsbCB3aW5kb3cgbW9kZVwiLCB3aGVyZSB0aGUgdmlkZW8gZmlsbHMgdGhlIGJyb3dzZXIgd2luZG93LlxuICAgKiBJbiBicm93c2VycyBhbmQgZGV2aWNlcyB0aGF0IHN1cHBvcnQgbmF0aXZlIGZ1bGwgc2NyZWVuLCBzb21ldGltZXMgdGhlXG4gICAqIGJyb3dzZXIncyBkZWZhdWx0IGNvbnRyb2xzIHdpbGwgYmUgc2hvd24sIGFuZCBub3QgdGhlIFZpZGVvLmpzIGN1c3RvbSBza2luLlxuICAgKiBUaGlzIGluY2x1ZGVzIG1vc3QgbW9iaWxlIGRldmljZXMgKGlPUywgQW5kcm9pZCkgYW5kIG9sZGVyIHZlcnNpb25zIG9mXG4gICAqIFNhZmFyaS5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBbZnVsbHNjcmVlbk9wdGlvbnNdXG4gICAqICAgICAgICAgT3ZlcnJpZGUgdGhlIHBsYXllciBmdWxsc2NyZWVuIG9wdGlvbnNcbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNmdWxsc2NyZWVuY2hhbmdlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlcXVlc3RGdWxsc2NyZWVuID0gZnVuY3Rpb24gcmVxdWVzdEZ1bGxzY3JlZW4oZnVsbHNjcmVlbk9wdGlvbnMpIHtcbiAgICB2YXIgZnNPcHRpb25zO1xuICAgIHRoaXMuaXNGdWxsc2NyZWVuKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuZnNBcGlfLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAvLyB0aGUgYnJvd3NlciBzdXBwb3J0cyBnb2luZyBmdWxsc2NyZWVuIGF0IHRoZSBlbGVtZW50IGxldmVsIHNvIHdlIGNhblxuICAgICAgLy8gdGFrZSB0aGUgY29udHJvbHMgZnVsbHNjcmVlbiBhcyB3ZWxsIGFzIHRoZSB2aWRlb1xuICAgICAgLy8gVHJpZ2dlciBmdWxsc2NyZWVuY2hhbmdlIGV2ZW50IGFmdGVyIGNoYW5nZVxuICAgICAgLy8gV2UgaGF2ZSB0byBzcGVjaWZpY2FsbHkgYWRkIHRoaXMgZWFjaCB0aW1lLCBhbmQgcmVtb3ZlXG4gICAgICAvLyB3aGVuIGNhbmNlbGluZyBmdWxsc2NyZWVuLiBPdGhlcndpc2UgaWYgdGhlcmUncyBtdWx0aXBsZVxuICAgICAgLy8gcGxheWVycyBvbiBhIHBhZ2UsIHRoZXkgd291bGQgYWxsIGJlIHJlYWN0aW5nIHRvIHRoZSBzYW1lIGZ1bGxzY3JlZW5cbiAgICAgIC8vIGV2ZW50c1xuICAgICAgb24oZG9jdW1lbnQsIHRoaXMuZnNBcGlfLmZ1bGxzY3JlZW5jaGFuZ2UsIHRoaXMuYm91bmREb2N1bWVudEZ1bGxzY3JlZW5DaGFuZ2VfKTsgLy8gb25seSBwYXNzIEZ1bGxzY3JlZW5PcHRpb25zIHRvIHJlcXVlc3RGdWxsc2NyZWVuIGlmIGl0IGlzbid0IHByZWZpeGVkXG5cbiAgICAgIGlmICghdGhpcy5mc0FwaV8ucHJlZml4ZWQpIHtcbiAgICAgICAgZnNPcHRpb25zID0gdGhpcy5vcHRpb25zXy5mdWxsc2NyZWVuICYmIHRoaXMub3B0aW9uc18uZnVsbHNjcmVlbi5vcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGlmIChmdWxsc2NyZWVuT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZnNPcHRpb25zID0gZnVsbHNjcmVlbk9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2lsZW5jZVByb21pc2UodGhpcy5lbF9bdGhpcy5mc0FwaV8ucmVxdWVzdEZ1bGxzY3JlZW5dKGZzT3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50ZWNoXy5zdXBwb3J0c0Z1bGxTY3JlZW4oKSkge1xuICAgICAgLy8gd2UgY2FuJ3QgdGFrZSB0aGUgdmlkZW8uanMgY29udHJvbHMgZnVsbHNjcmVlbiBidXQgd2UgY2FuIGdvIGZ1bGxzY3JlZW5cbiAgICAgIC8vIHdpdGggbmF0aXZlIGNvbnRyb2xzXG4gICAgICB0aGlzLnRlY2hDYWxsXygnZW50ZXJGdWxsU2NyZWVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZ1bGxzY3JlZW4gaXNuJ3Qgc3VwcG9ydGVkIHNvIHdlJ2xsIGp1c3Qgc3RyZXRjaCB0aGUgdmlkZW8gZWxlbWVudCB0b1xuICAgICAgLy8gZmlsbCB0aGUgdmlld3BvcnRcbiAgICAgIHRoaXMuZW50ZXJGdWxsV2luZG93KCk7XG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjZnVsbHNjcmVlbmNoYW5nZVxuICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICovXG5cbiAgICAgIHRoaXMudHJpZ2dlcignZnVsbHNjcmVlbmNoYW5nZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSB2aWRlbyB0byBpdHMgbm9ybWFsIHNpemUgYWZ0ZXIgaGF2aW5nIGJlZW4gaW4gZnVsbCBzY3JlZW4gbW9kZVxuICAgKlxuICAgKiBAZmlyZXMgUGxheWVyI2Z1bGxzY3JlZW5jaGFuZ2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZXhpdEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiBleGl0RnVsbHNjcmVlbigpIHtcbiAgICB0aGlzLmlzRnVsbHNjcmVlbihmYWxzZSk7IC8vIENoZWNrIGZvciBicm93c2VyIGVsZW1lbnQgZnVsbHNjcmVlbiBzdXBwb3J0XG5cbiAgICBpZiAodGhpcy5mc0FwaV8ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIHNpbGVuY2VQcm9taXNlKGRvY3VtZW50W3RoaXMuZnNBcGlfLmV4aXRGdWxsc2NyZWVuXSgpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudGVjaF8uc3VwcG9ydHNGdWxsU2NyZWVuKCkpIHtcbiAgICAgIHRoaXMudGVjaENhbGxfKCdleGl0RnVsbFNjcmVlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4aXRGdWxsV2luZG93KCk7XG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjZnVsbHNjcmVlbmNoYW5nZVxuICAgICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAgICovXG5cbiAgICAgIHRoaXMudHJpZ2dlcignZnVsbHNjcmVlbmNoYW5nZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogV2hlbiBmdWxsc2NyZWVuIGlzbid0IHN1cHBvcnRlZCB3ZSBjYW4gc3RyZXRjaCB0aGVcbiAgICogdmlkZW8gY29udGFpbmVyIHRvIGFzIHdpZGUgYXMgdGhlIGJyb3dzZXIgd2lsbCBsZXQgdXMuXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjZW50ZXJGdWxsV2luZG93XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVudGVyRnVsbFdpbmRvdyA9IGZ1bmN0aW9uIGVudGVyRnVsbFdpbmRvdygpIHtcbiAgICB0aGlzLmlzRnVsbFdpbmRvdyA9IHRydWU7IC8vIFN0b3Jpbmcgb3JpZ2luYWwgZG9jIG92ZXJmbG93IHZhbHVlIHRvIHJldHVybiB0byB3aGVuIGZ1bGxzY3JlZW4gaXMgb2ZmXG5cbiAgICB0aGlzLmRvY09yaWdPdmVyZmxvdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdzsgLy8gQWRkIGxpc3RlbmVyIGZvciBlc2Mga2V5IHRvIGV4aXQgZnVsbHNjcmVlblxuXG4gICAgb24oZG9jdW1lbnQsICdrZXlkb3duJywgdGhpcy5ib3VuZEZ1bGxXaW5kb3dPbkVzY0tleV8pOyAvLyBIaWRlIGFueSBzY3JvbGwgYmFyc1xuXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7IC8vIEFwcGx5IGZ1bGxzY3JlZW4gc3R5bGVzXG5cbiAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAndmpzLWZ1bGwtd2luZG93Jyk7XG4gICAgLyoqXG4gICAgICogQGV2ZW50IFBsYXllciNlbnRlckZ1bGxXaW5kb3dcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ2VudGVyRnVsbFdpbmRvdycpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBmb3IgY2FsbCB0byBlaXRoZXIgZXhpdCBmdWxsIHdpbmRvdyBvclxuICAgKiBmdWxsIHNjcmVlbiBvbiBFU0Mga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiAgICAgICAgRXZlbnQgdG8gY2hlY2sgZm9yIGtleSBwcmVzc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mdWxsV2luZG93T25Fc2NLZXkgPSBmdW5jdGlvbiBmdWxsV2luZG93T25Fc2NLZXkoZXZlbnQpIHtcbiAgICBpZiAoa2V5Y29kZS5pc0V2ZW50S2V5KGV2ZW50LCAnRXNjJykpIHtcbiAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbigpID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXhpdEZ1bGxXaW5kb3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV4aXQgZnVsbCB3aW5kb3dcbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNleGl0RnVsbFdpbmRvd1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leGl0RnVsbFdpbmRvdyA9IGZ1bmN0aW9uIGV4aXRGdWxsV2luZG93KCkge1xuICAgIHRoaXMuaXNGdWxsV2luZG93ID0gZmFsc2U7XG4gICAgb2ZmKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuYm91bmRGdWxsV2luZG93T25Fc2NLZXlfKTsgLy8gVW5oaWRlIHNjcm9sbCBiYXJzLlxuXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5kb2NPcmlnT3ZlcmZsb3c7IC8vIFJlbW92ZSBmdWxsc2NyZWVuIHN0eWxlc1xuXG4gICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ3Zqcy1mdWxsLXdpbmRvdycpOyAvLyBSZXNpemUgdGhlIGJveCwgY29udHJvbGxlciwgYW5kIHBvc3RlciB0byBvcmlnaW5hbCBzaXplc1xuICAgIC8vIHRoaXMucG9zaXRpb25BbGwoKTtcblxuICAgIC8qKlxuICAgICAqIEBldmVudCBQbGF5ZXIjZXhpdEZ1bGxXaW5kb3dcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ2V4aXRGdWxsV2luZG93Jyk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwbGF5ZXIgaXMgaW4gUGljdHVyZS1pbi1QaWN0dXJlIG1vZGUgb3IgdGVsbCB0aGUgcGxheWVyIHRoYXQgaXRcbiAgICogaXMgb3IgaXMgbm90IGluIFBpY3R1cmUtaW4tUGljdHVyZSBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtib29sZWFufSBbaXNQaVBdXG4gICAqICAgICAgICAgU2V0IHRoZSBwbGF5ZXJzIGN1cnJlbnQgUGljdHVyZS1pbi1QaWN0dXJlIHN0YXRlXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgLSB0cnVlIGlmIFBpY3R1cmUtaW4tUGljdHVyZSBpcyBvbiBhbmQgZ2V0dGluZ1xuICAgKiAgICAgICAgIC0gZmFsc2UgaWYgUGljdHVyZS1pbi1QaWN0dXJlIGlzIG9mZiBhbmQgZ2V0dGluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0luUGljdHVyZUluUGljdHVyZSA9IGZ1bmN0aW9uIGlzSW5QaWN0dXJlSW5QaWN0dXJlKGlzUGlQKSB7XG4gICAgaWYgKGlzUGlQICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNJblBpY3R1cmVJblBpY3R1cmVfID0gISFpc1BpUDtcbiAgICAgIHRoaXMudG9nZ2xlUGljdHVyZUluUGljdHVyZUNsYXNzXygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiAhIXRoaXMuaXNJblBpY3R1cmVJblBpY3R1cmVfO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmbG9hdGluZyB2aWRlbyB3aW5kb3cgYWx3YXlzIG9uIHRvcCBvZiBvdGhlciB3aW5kb3dzIHNvIHRoYXQgdXNlcnMgbWF5XG4gICAqIGNvbnRpbnVlIGNvbnN1bWluZyBtZWRpYSB3aGlsZSB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgY29udGVudCBzaXRlcywgb3JcbiAgICogYXBwbGljYXRpb25zIG9uIHRoZWlyIGRldmljZS5cbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9waWN0dXJlLWluLXBpY3R1cmV9XG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjZW50ZXJwaWN0dXJlaW5waWN0dXJlXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqICAgICAgICAgQSBwcm9taXNlIHdpdGggYSBQaWN0dXJlLWluLVBpY3R1cmUgd2luZG93LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSA9IGZ1bmN0aW9uIHJlcXVlc3RQaWN0dXJlSW5QaWN0dXJlKCkge1xuICAgIGlmICgncGljdHVyZUluUGljdHVyZUVuYWJsZWQnIGluIGRvY3VtZW50KSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcGxheWVyIGVudGVycyBwaWN0dXJlIGluIHBpY3R1cmUgbW9kZVxuICAgICAgICpcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjZW50ZXJwaWN0dXJlaW5waWN0dXJlXG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKi9cbiAgICAgIHJldHVybiB0aGlzLnRlY2hHZXRfKCdyZXF1ZXN0UGljdHVyZUluUGljdHVyZScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRXhpdCBQaWN0dXJlLWluLVBpY3R1cmUgbW9kZS5cbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9waWN0dXJlLWluLXBpY3R1cmV9XG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjbGVhdmVwaWN0dXJlaW5waWN0dXJlXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqICAgICAgICAgQSBwcm9taXNlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leGl0UGljdHVyZUluUGljdHVyZSA9IGZ1bmN0aW9uIGV4aXRQaWN0dXJlSW5QaWN0dXJlKCkge1xuICAgIGlmICgncGljdHVyZUluUGljdHVyZUVuYWJsZWQnIGluIGRvY3VtZW50KSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcGxheWVyIGxlYXZlcyBwaWN0dXJlIGluIHBpY3R1cmUgbW9kZVxuICAgICAgICpcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjbGVhdmVwaWN0dXJlaW5waWN0dXJlXG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKi9cbiAgICAgIHJldHVybiBkb2N1bWVudC5leGl0UGljdHVyZUluUGljdHVyZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhpcyBQbGF5ZXIgaGFzIGZvY3VzIGFuZCBhIGtleSBnZXRzIHByZXNzZWQgZG93biwgb3Igd2hlblxuICAgKiBhbnkgQ29tcG9uZW50IG9mIHRoaXMgcGxheWVyIHJlY2VpdmVzIGEga2V5IHByZXNzIHRoYXQgaXQgZG9lc24ndCBoYW5kbGUuXG4gICAqIFRoaXMgYWxsb3dzIHBsYXllci13aWRlIGhvdGtleXMgKGVpdGhlciBhcyBkZWZpbmVkIGJlbG93LCBvciBvcHRpb25hbGx5XG4gICAqIGJ5IGFuIGV4dGVybmFsIGZ1bmN0aW9uKS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH5FdmVudH0gZXZlbnRcbiAgICogICAgICAgIFRoZSBga2V5ZG93bmAgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBsaXN0ZW5zIGtleWRvd25cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICB2YXIgdXNlckFjdGlvbnMgPSB0aGlzLm9wdGlvbnNfLnVzZXJBY3Rpb25zOyAvLyBCYWlsIG91dCBpZiBob3RrZXlzIGFyZSBub3QgY29uZmlndXJlZC5cblxuICAgIGlmICghdXNlckFjdGlvbnMgfHwgIXVzZXJBY3Rpb25zLmhvdGtleXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBleGNsdWRlIGFuIGVsZW1lbnQgZnJvbVxuICAgIC8vIGhvdGtleXMgaGFuZGxpbmcuXG5cblxuICAgIHZhciBleGNsdWRlRWxlbWVudCA9IGZ1bmN0aW9uIGV4Y2x1ZGVFbGVtZW50KGVsKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsgLy8gVGhlIGZpcnN0IGFuZCBlYXNpZXN0IHRlc3QgaXMgZm9yIGBjb250ZW50ZWRpdGFibGVgIGVsZW1lbnRzLlxuXG4gICAgICBpZiAoZWwuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIElucHV0cyBtYXRjaGluZyB0aGVzZSB0eXBlcyB3aWxsIHN0aWxsIHRyaWdnZXIgaG90a2V5IGhhbmRsaW5nIGFzXG4gICAgICAvLyB0aGV5IGFyZSBub3QgdGV4dCBpbnB1dHMuXG5cblxuICAgICAgdmFyIGFsbG93ZWRJbnB1dFR5cGVzID0gWydidXR0b24nLCAnY2hlY2tib3gnLCAnaGlkZGVuJywgJ3JhZGlvJywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuXG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICByZXR1cm4gYWxsb3dlZElucHV0VHlwZXMuaW5kZXhPZihlbC50eXBlKSA9PT0gLTE7XG4gICAgICB9IC8vIFRoZSBmaW5hbCB0ZXN0IGlzIGJ5IHRhZyBuYW1lLiBUaGVzZSB0YWdzIHdpbGwgYmUgZXhjbHVkZWQgZW50aXJlbHkuXG5cblxuICAgICAgdmFyIGV4Y2x1ZGVkVGFncyA9IFsndGV4dGFyZWEnXTtcbiAgICAgIHJldHVybiBleGNsdWRlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTE7XG4gICAgfTsgLy8gQmFpbCBvdXQgaWYgdGhlIHVzZXIgaXMgZm9jdXNlZCBvbiBhbiBpbnRlcmFjdGl2ZSBmb3JtIGVsZW1lbnQuXG5cblxuICAgIGlmIChleGNsdWRlRWxlbWVudCh0aGlzLmVsXy5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB1c2VyQWN0aW9ucy5ob3RrZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1c2VyQWN0aW9ucy5ob3RrZXlzLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZUhvdGtleXMoZXZlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhpcyBQbGF5ZXIgcmVjZWl2ZXMgYSBob3RrZXkga2V5ZG93biBldmVudC5cbiAgICogU3VwcG9ydGVkIHBsYXllci13aWRlIGhvdGtleXMgYXJlOlxuICAgKlxuICAgKiAgIGYgICAgICAgICAgLSB0b2dnbGUgZnVsbHNjcmVlblxuICAgKiAgIG0gICAgICAgICAgLSB0b2dnbGUgbXV0ZVxuICAgKiAgIGsgb3IgU3BhY2UgLSB0b2dnbGUgcGxheS9wYXVzZVxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fkV2ZW50fSBldmVudFxuICAgKiAgICAgICAgVGhlIGBrZXlkb3duYCBldmVudCB0aGF0IGNhdXNlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlSG90a2V5cyA9IGZ1bmN0aW9uIGhhbmRsZUhvdGtleXMoZXZlbnQpIHtcbiAgICB2YXIgaG90a2V5cyA9IHRoaXMub3B0aW9uc18udXNlckFjdGlvbnMgPyB0aGlzLm9wdGlvbnNfLnVzZXJBY3Rpb25zLmhvdGtleXMgOiB7fTsgLy8gc2V0IGZ1bGxzY3JlZW5LZXksIG11dGVLZXksIHBsYXlQYXVzZUtleSBmcm9tIGBob3RrZXlzYCwgdXNlIGRlZmF1bHRzIGlmIG5vdCBzZXRcblxuICAgIHZhciBfaG90a2V5cyRmdWxsc2NyZWVuS2UgPSBob3RrZXlzLmZ1bGxzY3JlZW5LZXksXG4gICAgICAgIGZ1bGxzY3JlZW5LZXkgPSBfaG90a2V5cyRmdWxsc2NyZWVuS2UgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChrZXlkb3duRXZlbnQpIHtcbiAgICAgIHJldHVybiBrZXljb2RlLmlzRXZlbnRLZXkoa2V5ZG93bkV2ZW50LCAnZicpO1xuICAgIH0gOiBfaG90a2V5cyRmdWxsc2NyZWVuS2UsXG4gICAgICAgIF9ob3RrZXlzJG11dGVLZXkgPSBob3RrZXlzLm11dGVLZXksXG4gICAgICAgIG11dGVLZXkgPSBfaG90a2V5cyRtdXRlS2V5ID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoa2V5ZG93bkV2ZW50KSB7XG4gICAgICByZXR1cm4ga2V5Y29kZS5pc0V2ZW50S2V5KGtleWRvd25FdmVudCwgJ20nKTtcbiAgICB9IDogX2hvdGtleXMkbXV0ZUtleSxcbiAgICAgICAgX2hvdGtleXMkcGxheVBhdXNlS2V5ID0gaG90a2V5cy5wbGF5UGF1c2VLZXksXG4gICAgICAgIHBsYXlQYXVzZUtleSA9IF9ob3RrZXlzJHBsYXlQYXVzZUtleSA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKGtleWRvd25FdmVudCkge1xuICAgICAgcmV0dXJuIGtleWNvZGUuaXNFdmVudEtleShrZXlkb3duRXZlbnQsICdrJykgfHwga2V5Y29kZS5pc0V2ZW50S2V5KGtleWRvd25FdmVudCwgJ1NwYWNlJyk7XG4gICAgfSA6IF9ob3RrZXlzJHBsYXlQYXVzZUtleTtcblxuICAgIGlmIChmdWxsc2NyZWVuS2V5LmNhbGwodGhpcywgZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB2YXIgRlNUb2dnbGUgPSBDb21wb25lbnQuZ2V0Q29tcG9uZW50KCdGdWxsc2NyZWVuVG9nZ2xlJyk7XG5cbiAgICAgIGlmIChkb2N1bWVudFt0aGlzLmZzQXBpXy5mdWxsc2NyZWVuRW5hYmxlZF0gIT09IGZhbHNlKSB7XG4gICAgICAgIEZTVG9nZ2xlLnByb3RvdHlwZS5oYW5kbGVDbGljay5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG11dGVLZXkuY2FsbCh0aGlzLCBldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciBNdXRlVG9nZ2xlID0gQ29tcG9uZW50LmdldENvbXBvbmVudCgnTXV0ZVRvZ2dsZScpO1xuICAgICAgTXV0ZVRvZ2dsZS5wcm90b3R5cGUuaGFuZGxlQ2xpY2suY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfSBlbHNlIGlmIChwbGF5UGF1c2VLZXkuY2FsbCh0aGlzLCBldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciBQbGF5VG9nZ2xlID0gQ29tcG9uZW50LmdldENvbXBvbmVudCgnUGxheVRvZ2dsZScpO1xuICAgICAgUGxheVRvZ2dsZS5wcm90b3R5cGUuaGFuZGxlQ2xpY2suY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBwbGF5ZXIgY2FuIHBsYXkgYSBnaXZlbiBtaW1ldHlwZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3ZpZGVvLmh0bWwjZG9tLW5hdmlnYXRvci1jYW5wbGF5dHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiAgICAgICAgVGhlIG1pbWV0eXBlIHRvIGNoZWNrXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICAncHJvYmFibHknLCAnbWF5YmUnLCBvciAnJyAoZW1wdHkgc3RyaW5nKVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uIGNhblBsYXlUeXBlKHR5cGUpIHtcbiAgICB2YXIgY2FuOyAvLyBMb29wIHRocm91Z2ggZWFjaCBwbGF5YmFjayB0ZWNobm9sb2d5IGluIHRoZSBvcHRpb25zIG9yZGVyXG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMub3B0aW9uc18udGVjaE9yZGVyOyBpIDwgai5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRlY2hOYW1lID0galtpXTtcbiAgICAgIHZhciB0ZWNoID0gVGVjaC5nZXRUZWNoKHRlY2hOYW1lKTsgLy8gU3VwcG9ydCBvbGQgYmVoYXZpb3Igb2YgdGVjaHMgYmVpbmcgcmVnaXN0ZXJlZCBhcyBjb21wb25lbnRzLlxuICAgICAgLy8gUmVtb3ZlIG9uY2UgdGhhdCBkZXByZWNhdGVkIGJlaGF2aW9yIGlzIHJlbW92ZWQuXG5cbiAgICAgIGlmICghdGVjaCkge1xuICAgICAgICB0ZWNoID0gQ29tcG9uZW50LmdldENvbXBvbmVudCh0ZWNoTmFtZSk7XG4gICAgICB9IC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHRlY2ggaXMgZGVmaW5lZCBiZWZvcmUgY29udGludWluZ1xuXG5cbiAgICAgIGlmICghdGVjaCkge1xuICAgICAgICBsb2cuZXJyb3IoXCJUaGUgXFxcIlwiICsgdGVjaE5hbWUgKyBcIlxcXCIgdGVjaCBpcyB1bmRlZmluZWQuIFNraXBwZWQgYnJvd3NlciBzdXBwb3J0IGNoZWNrIGZvciB0aGF0IHRlY2guXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhpcyB0ZWNobm9sb2d5XG5cblxuICAgICAgaWYgKHRlY2guaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICBjYW4gPSB0ZWNoLmNhblBsYXlUeXBlKHR5cGUpO1xuXG4gICAgICAgIGlmIChjYW4pIHtcbiAgICAgICAgICByZXR1cm4gY2FuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8qKlxuICAgKiBTZWxlY3Qgc291cmNlIGJhc2VkIG9uIHRlY2gtb3JkZXIgb3Igc291cmNlLW9yZGVyXG4gICAqIFVzZXMgc291cmNlLW9yZGVyIHNlbGVjdGlvbiBpZiBgb3B0aW9ucy5zb3VyY2VPcmRlcmAgaXMgdHJ1dGh5LiBPdGhlcndpc2UsXG4gICAqIGRlZmF1bHRzIHRvIHRlY2gtb3JkZXIgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZXNcbiAgICogICAgICAgIFRoZSBzb3VyY2VzIGZvciBhIG1lZGlhIGFzc2V0XG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdHxib29sZWFufVxuICAgKiAgICAgICAgIE9iamVjdCBvZiBzb3VyY2UgYW5kIHRlY2ggb3JkZXIgb3IgZmFsc2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2VsZWN0U291cmNlID0gZnVuY3Rpb24gc2VsZWN0U291cmNlKHNvdXJjZXMpIHtcbiAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICAvLyBHZXQgb25seSB0aGUgdGVjaHMgc3BlY2lmaWVkIGluIGB0ZWNoT3JkZXJgIHRoYXQgZXhpc3QgYW5kIGFyZSBzdXBwb3J0ZWQgYnkgdGhlXG4gICAgLy8gY3VycmVudCBwbGF0Zm9ybVxuICAgIHZhciB0ZWNocyA9IHRoaXMub3B0aW9uc18udGVjaE9yZGVyLm1hcChmdW5jdGlvbiAodGVjaE5hbWUpIHtcbiAgICAgIHJldHVybiBbdGVjaE5hbWUsIFRlY2guZ2V0VGVjaCh0ZWNoTmFtZSldO1xuICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHRlY2hOYW1lID0gX3JlZlswXSxcbiAgICAgICAgICB0ZWNoID0gX3JlZlsxXTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGVjaCBpcyBkZWZpbmVkIGJlZm9yZSBjb250aW51aW5nXG4gICAgICBpZiAodGVjaCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGlzIHRlY2hub2xvZ3lcbiAgICAgICAgcmV0dXJuIHRlY2guaXNTdXBwb3J0ZWQoKTtcbiAgICAgIH1cblxuICAgICAgbG9nLmVycm9yKFwiVGhlIFxcXCJcIiArIHRlY2hOYW1lICsgXCJcXFwiIHRlY2ggaXMgdW5kZWZpbmVkLiBTa2lwcGVkIGJyb3dzZXIgc3VwcG9ydCBjaGVjayBmb3IgdGhhdCB0ZWNoLlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTsgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggYGlubmVyQXJyYXlgIGVsZW1lbnQgb25jZSBwZXIgYG91dGVyQXJyYXlgIGVsZW1lbnQgYW5kIGV4ZWN1dGVcbiAgICAvLyBgdGVzdGVyYCB3aXRoIGJvdGguIElmIGB0ZXN0ZXJgIHJldHVybnMgYSBub24tZmFsc3kgdmFsdWUsIGV4aXQgZWFybHkgYW5kIHJldHVyblxuICAgIC8vIHRoYXQgdmFsdWUuXG5cbiAgICB2YXIgZmluZEZpcnN0UGFzc2luZ1RlY2hTb3VyY2VQYWlyID0gZnVuY3Rpb24gZmluZEZpcnN0UGFzc2luZ1RlY2hTb3VyY2VQYWlyKG91dGVyQXJyYXksIGlubmVyQXJyYXksIHRlc3Rlcikge1xuICAgICAgdmFyIGZvdW5kO1xuICAgICAgb3V0ZXJBcnJheS5zb21lKGZ1bmN0aW9uIChvdXRlckNob2ljZSkge1xuICAgICAgICByZXR1cm4gaW5uZXJBcnJheS5zb21lKGZ1bmN0aW9uIChpbm5lckNob2ljZSkge1xuICAgICAgICAgIGZvdW5kID0gdGVzdGVyKG91dGVyQ2hvaWNlLCBpbm5lckNob2ljZSk7XG5cbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9O1xuXG4gICAgdmFyIGZvdW5kU291cmNlQW5kVGVjaDtcblxuICAgIHZhciBmbGlwID0gZnVuY3Rpb24gZmxpcChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBmbihiLCBhKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBmaW5kZXIgPSBmdW5jdGlvbiBmaW5kZXIoX3JlZjIsIHNvdXJjZSkge1xuICAgICAgdmFyIHRlY2hOYW1lID0gX3JlZjJbMF0sXG4gICAgICAgICAgdGVjaCA9IF9yZWYyWzFdO1xuXG4gICAgICBpZiAodGVjaC5jYW5QbGF5U291cmNlKHNvdXJjZSwgX3RoaXMxMC5vcHRpb25zX1t0ZWNoTmFtZS50b0xvd2VyQ2FzZSgpXSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0ZWNoOiB0ZWNoTmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07IC8vIERlcGVuZGluZyBvbiB0aGUgdHJ1dGhpbmVzcyBvZiBgb3B0aW9ucy5zb3VyY2VPcmRlcmAsIHdlIHN3YXAgdGhlIG9yZGVyIG9mIHRlY2hzIGFuZCBzb3VyY2VzXG4gICAgLy8gdG8gc2VsZWN0IGZyb20gdGhlbSBiYXNlZCBvbiB0aGVpciBwcmlvcml0eS5cblxuXG4gICAgaWYgKHRoaXMub3B0aW9uc18uc291cmNlT3JkZXIpIHtcbiAgICAgIC8vIFNvdXJjZS1maXJzdCBvcmRlcmluZ1xuICAgICAgZm91bmRTb3VyY2VBbmRUZWNoID0gZmluZEZpcnN0UGFzc2luZ1RlY2hTb3VyY2VQYWlyKHNvdXJjZXMsIHRlY2hzLCBmbGlwKGZpbmRlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUZWNoLWZpcnN0IG9yZGVyaW5nXG4gICAgICBmb3VuZFNvdXJjZUFuZFRlY2ggPSBmaW5kRmlyc3RQYXNzaW5nVGVjaFNvdXJjZVBhaXIodGVjaHMsIHNvdXJjZXMsIGZpbmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kU291cmNlQW5kVGVjaCB8fCBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgdmlkZW8gc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fFRlY2h+U291cmNlT2JqZWN0W118c3RyaW5nfSBbc291cmNlXVxuICAgKiAgICAgICAgQSBTb3VyY2VPYmplY3QsIGFuIGFycmF5IG9mIFNvdXJjZU9iamVjdHMsIG9yIGEgc3RyaW5nIHJlZmVyZW5jaW5nXG4gICAqICAgICAgICBhIFVSTCB0byBhIG1lZGlhIHNvdXJjZS4gSXQgaXMgX2hpZ2hseSByZWNvbW1lbmRlZF8gdGhhdCBhbiBvYmplY3RcbiAgICogICAgICAgIG9yIGFycmF5IG9mIG9iamVjdHMgaXMgdXNlZCBoZXJlLCBzbyB0aGF0IHNvdXJjZSBzZWxlY3Rpb25cbiAgICogICAgICAgIGFsZ29yaXRobXMgY2FuIHRha2UgdGhlIGB0eXBlYCBpbnRvIGFjY291bnQuXG4gICAqXG4gICAqICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIGFjdHMgYXMgYSBnZXR0ZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqICAgICAgICAgSWYgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IGlzIG1pc3NpbmcsIHJldHVybnMgdGhlIGN1cnJlbnQgc291cmNlXG4gICAqICAgICAgICAgVVJMLiBPdGhlcndpc2UsIHJldHVybnMgbm90aGluZy91bmRlZmluZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNyYyA9IGZ1bmN0aW9uIHNyYyhzb3VyY2UpIHtcbiAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAvLyBnZXR0ZXIgdXNhZ2VcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlXy5zcmMgfHwgJyc7XG4gICAgfSAvLyBmaWx0ZXIgb3V0IGludmFsaWQgc291cmNlcyBhbmQgdHVybiBvdXIgc291cmNlIGludG9cbiAgICAvLyBhbiBhcnJheSBvZiBzb3VyY2Ugb2JqZWN0c1xuXG5cbiAgICB2YXIgc291cmNlcyA9IGZpbHRlclNvdXJjZShzb3VyY2UpOyAvLyBpZiBhIHNvdXJjZSB3YXMgcGFzc2VkIGluIHRoZW4gaXQgaXMgaW52YWxpZCBiZWNhdXNlXG4gICAgLy8gaXQgd2FzIGZpbHRlcmVkIHRvIGEgemVybyBsZW5ndGggQXJyYXkuIFNvIHdlIGhhdmUgdG9cbiAgICAvLyBzaG93IGFuIGVycm9yXG5cbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVycm9yKHtcbiAgICAgICAgICBjb2RlOiA0LFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxpemUodGhpcy5vcHRpb25zXy5ub3RTdXBwb3J0ZWRNZXNzYWdlKVxuICAgICAgICB9KTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaW50aWFsIHNvdXJjZXNcblxuXG4gICAgdGhpcy5jaGFuZ2luZ1NyY18gPSB0cnVlO1xuICAgIHRoaXMuY2FjaGVfLnNvdXJjZXMgPSBzb3VyY2VzO1xuICAgIHRoaXMudXBkYXRlU291cmNlQ2FjaGVzXyhzb3VyY2VzWzBdKTsgLy8gbWlkZGxld2FyZVNvdXJjZSBpcyB0aGUgc291cmNlIGFmdGVyIGl0IGhhcyBiZWVuIGNoYW5nZWQgYnkgbWlkZGxld2FyZVxuXG4gICAgc2V0U291cmNlKHRoaXMsIHNvdXJjZXNbMF0sIGZ1bmN0aW9uIChtaWRkbGV3YXJlU291cmNlLCBtd3MpIHtcbiAgICAgIF90aGlzMTEubWlkZGxld2FyZV8gPSBtd3M7IC8vIHNpbmNlIHNvdXJjZVNldCBpcyBhc3luYyB3ZSBoYXZlIHRvIHVwZGF0ZSB0aGUgY2FjaGUgYWdhaW4gYWZ0ZXIgd2Ugc2VsZWN0IGEgc291cmNlIHNpbmNlXG4gICAgICAvLyB0aGUgc291cmNlIHRoYXQgaXMgc2VsZWN0ZWQgY291bGQgYmUgb3V0IG9mIG9yZGVyIGZyb20gdGhlIGNhY2hlIHVwZGF0ZSBhYm92ZSB0aGlzIGNhbGxiYWNrLlxuXG4gICAgICBfdGhpczExLmNhY2hlXy5zb3VyY2VzID0gc291cmNlcztcblxuICAgICAgX3RoaXMxMS51cGRhdGVTb3VyY2VDYWNoZXNfKG1pZGRsZXdhcmVTb3VyY2UpO1xuXG4gICAgICB2YXIgZXJyID0gX3RoaXMxMS5zcmNfKG1pZGRsZXdhcmVTb3VyY2UpO1xuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmIChzb3VyY2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMxMS5zcmMoc291cmNlcy5zbGljZSgxKSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczExLmNoYW5naW5nU3JjXyA9IGZhbHNlOyAvLyBXZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiBhIHRpbWVvdXQgdG8gZ2l2ZSBmb2xrcyBhIGNoYW5jZSB0byBhZGQgZXJyb3IgZXZlbnQgaGFuZGxlcnNcblxuICAgICAgICBfdGhpczExLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuZXJyb3Ioe1xuICAgICAgICAgICAgY29kZTogNCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxpemUodGhpcy5vcHRpb25zXy5ub3RTdXBwb3J0ZWRNZXNzYWdlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAwKTsgLy8gd2UgY291bGQgbm90IGZpbmQgYW4gYXBwcm9wcmlhdGUgdGVjaCwgYnV0IGxldCdzIHN0aWxsIG5vdGlmeSB0aGUgZGVsZWdhdGUgdGhhdCB0aGlzIGlzIGl0XG4gICAgICAgIC8vIHRoaXMgbmVlZHMgYSBiZXR0ZXIgY29tbWVudCBhYm91dCB3aHkgdGhpcyBpcyBuZWVkZWRcblxuXG4gICAgICAgIF90aGlzMTEudHJpZ2dlclJlYWR5KCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUZWNoKG13cywgX3RoaXMxMS50ZWNoXyk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIG9iamVjdCBvbiB0aGUgdGVjaCwgcmV0dXJucyBhIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlclxuICAgKiB0aGVyZSBpcyBhIHRlY2ggdGhhdCBjYW4gcGxheSB0aGUgc291cmNlIG9yIG5vdFxuICAgKlxuICAgKiBAcGFyYW0ge1RlY2h+U291cmNlT2JqZWN0fSBzb3VyY2VcbiAgICogICAgICAgIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIHNldCBvbiB0aGUgVGVjaFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIC0gVHJ1ZSBpZiB0aGVyZSBpcyBubyBUZWNoIHRvIHBsYXliYWNrIHRoaXMgc291cmNlXG4gICAqICAgICAgICAgLSBGYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3JjXyA9IGZ1bmN0aW9uIHNyY18oc291cmNlKSB7XG4gICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgdmFyIHNvdXJjZVRlY2ggPSB0aGlzLnNlbGVjdFNvdXJjZShbc291cmNlXSk7XG5cbiAgICBpZiAoIXNvdXJjZVRlY2gpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGl0bGVDYXNlRXF1YWxzKHNvdXJjZVRlY2gudGVjaCwgdGhpcy50ZWNoTmFtZV8pKSB7XG4gICAgICB0aGlzLmNoYW5naW5nU3JjXyA9IHRydWU7IC8vIGxvYWQgdGhpcyB0ZWNobm9sb2d5IHdpdGggdGhlIGNob3NlbiBzb3VyY2VcblxuICAgICAgdGhpcy5sb2FkVGVjaF8oc291cmNlVGVjaC50ZWNoLCBzb3VyY2VUZWNoLnNvdXJjZSk7XG4gICAgICB0aGlzLnRlY2hfLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMxMi5jaGFuZ2luZ1NyY18gPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gd2FpdCB1bnRpbCB0aGUgdGVjaCBpcyByZWFkeSB0byBzZXQgdGhlIHNvdXJjZVxuICAgIC8vIGFuZCBzZXQgaXQgc3luY2hyb25vdXNseSBpZiBwb3NzaWJsZSAoIzIzMjYpXG5cblxuICAgIHRoaXMucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHNldFNvdXJjZSB0ZWNoIG1ldGhvZCB3YXMgYWRkZWQgd2l0aCBzb3VyY2UgaGFuZGxlcnNcbiAgICAgIC8vIHNvIG9sZGVyIHRlY2hzIHdvbid0IHN1cHBvcnQgaXRcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGRpcmVjdCBwcm90b3R5cGUgZm9yIHRoZSBjYXNlIHdoZXJlIHN1YmNsYXNzZXNcbiAgICAgIC8vIG9mIHRoZSB0ZWNoIGRvIG5vdCBzdXBwb3J0IHNvdXJjZSBoYW5kbGVyc1xuICAgICAgaWYgKHRoaXMudGVjaF8uY29uc3RydWN0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdzZXRTb3VyY2UnKSkge1xuICAgICAgICB0aGlzLnRlY2hDYWxsXygnc2V0U291cmNlJywgc291cmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGVjaENhbGxfKCdzcmMnLCBzb3VyY2Uuc3JjKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2luZ1NyY18gPSBmYWxzZTtcbiAgICB9LCB0cnVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEJlZ2luIGxvYWRpbmcgdGhlIHNyYyBkYXRhLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5sb2FkID0gZnVuY3Rpb24gbG9hZCgpIHtcbiAgICB0aGlzLnRlY2hDYWxsXygnbG9hZCcpO1xuICB9XG4gIC8qKlxuICAgKiBSZXNldCB0aGUgcGxheWVyLiBMb2FkcyB0aGUgZmlyc3QgdGVjaCBpbiB0aGUgdGVjaE9yZGVyLFxuICAgKiByZW1vdmVzIGFsbCB0aGUgdGV4dCB0cmFja3MgaW4gdGhlIGV4aXN0aW5nIGB0ZWNoYCxcbiAgICogYW5kIGNhbGxzIGByZXNldGAgb24gdGhlIGB0ZWNoYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB2YXIgX3RoaXMxMyA9IHRoaXM7XG5cbiAgICB2YXIgUHJvbWlzZUNsYXNzID0gdGhpcy5vcHRpb25zXy5Qcm9taXNlIHx8IHdpbmRvdyQxLlByb21pc2U7XG5cbiAgICBpZiAodGhpcy5wYXVzZWQoKSB8fCAhUHJvbWlzZUNsYXNzKSB7XG4gICAgICB0aGlzLmRvUmVzZXRfKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwbGF5UHJvbWlzZSA9IHRoaXMucGxheSgpO1xuICAgICAgc2lsZW5jZVByb21pc2UocGxheVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczEzLmRvUmVzZXRfKCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5kb1Jlc2V0XyA9IGZ1bmN0aW9uIGRvUmVzZXRfKCkge1xuICAgIGlmICh0aGlzLnRlY2hfKSB7XG4gICAgICB0aGlzLnRlY2hfLmNsZWFyVHJhY2tzKCd0ZXh0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldENhY2hlXygpO1xuICAgIHRoaXMucG9zdGVyKCcnKTtcbiAgICB0aGlzLmxvYWRUZWNoXyh0aGlzLm9wdGlvbnNfLnRlY2hPcmRlclswXSwgbnVsbCk7XG4gICAgdGhpcy50ZWNoQ2FsbF8oJ3Jlc2V0Jyk7XG4gICAgdGhpcy5yZXNldENvbnRyb2xCYXJVSV8oKTtcblxuICAgIGlmIChpc0V2ZW50ZWQodGhpcykpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigncGxheWVycmVzZXQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IENvbnRyb2wgQmFyJ3MgVUkgYnkgY2FsbGluZyBzdWItbWV0aG9kcyB0aGF0IHJlc2V0XG4gICAqIGFsbCBvZiBDb250cm9sIEJhcidzIGNvbXBvbmVudHNcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXRDb250cm9sQmFyVUlfID0gZnVuY3Rpb24gcmVzZXRDb250cm9sQmFyVUlfKCkge1xuICAgIHRoaXMucmVzZXRQcm9ncmVzc0Jhcl8oKTtcbiAgICB0aGlzLnJlc2V0UGxheWJhY2tSYXRlXygpO1xuICAgIHRoaXMucmVzZXRWb2x1bWVCYXJfKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IHRlY2gncyBwcm9ncmVzcyBzbyBwcm9ncmVzcyBiYXIgaXMgcmVzZXQgaW4gdGhlIFVJXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlc2V0UHJvZ3Jlc3NCYXJfID0gZnVuY3Rpb24gcmVzZXRQcm9ncmVzc0Jhcl8oKSB7XG4gICAgdGhpcy5jdXJyZW50VGltZSgwKTtcbiAgICB2YXIgX3RoaXMkY29udHJvbEJhciA9IHRoaXMuY29udHJvbEJhcixcbiAgICAgICAgZHVyYXRpb25EaXNwbGF5ID0gX3RoaXMkY29udHJvbEJhci5kdXJhdGlvbkRpc3BsYXksXG4gICAgICAgIHJlbWFpbmluZ1RpbWVEaXNwbGF5ID0gX3RoaXMkY29udHJvbEJhci5yZW1haW5pbmdUaW1lRGlzcGxheTtcblxuICAgIGlmIChkdXJhdGlvbkRpc3BsYXkpIHtcbiAgICAgIGR1cmF0aW9uRGlzcGxheS51cGRhdGVDb250ZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmluZ1RpbWVEaXNwbGF5KSB7XG4gICAgICByZW1haW5pbmdUaW1lRGlzcGxheS51cGRhdGVDb250ZW50KCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXNldCBQbGF5YmFjayByYXRpb1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXNldFBsYXliYWNrUmF0ZV8gPSBmdW5jdGlvbiByZXNldFBsYXliYWNrUmF0ZV8oKSB7XG4gICAgdGhpcy5wbGF5YmFja1JhdGUodGhpcy5kZWZhdWx0UGxheWJhY2tSYXRlKCkpO1xuICAgIHRoaXMuaGFuZGxlVGVjaFJhdGVDaGFuZ2VfKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IFZvbHVtZSBiYXJcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXRWb2x1bWVCYXJfID0gZnVuY3Rpb24gcmVzZXRWb2x1bWVCYXJfKCkge1xuICAgIHRoaXMudm9sdW1lKDEuMCk7XG4gICAgdGhpcy50cmlnZ2VyKCd2b2x1bWVjaGFuZ2UnKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbGwgb2YgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1RlY2h+U291cmNlT2JqZWN0W119XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgc291cmNlIG9iamVjdHNcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3VycmVudFNvdXJjZXMgPSBmdW5jdGlvbiBjdXJyZW50U291cmNlcygpIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5jdXJyZW50U291cmNlKCk7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTsgLy8gYXNzdW1lIGB7fWAgb3IgYHsgc3JjIH1gXG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc291cmNlKS5sZW5ndGggIT09IDApIHtcbiAgICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlXy5zb3VyY2VzIHx8IHNvdXJjZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybiB7VGVjaH5Tb3VyY2VPYmplY3R9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgc291cmNlIG9iamVjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jdXJyZW50U291cmNlID0gZnVuY3Rpb24gY3VycmVudFNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZV8uc291cmNlIHx8IHt9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgVVJMIG9mIHRoZSBjdXJyZW50IHNvdXJjZSB2YWx1ZSBlLmcuIGh0dHA6Ly9teXNpdGUuY29tL3ZpZGVvLm1wNFxuICAgKiBDYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBjdXJyZW50VHlwZWAgdG8gYXNzaXN0IGluIHJlYnVpbGRpbmcgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IHNvdXJjZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jdXJyZW50U3JjID0gZnVuY3Rpb24gY3VycmVudFNyYygpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U291cmNlKCkgJiYgdGhpcy5jdXJyZW50U291cmNlKCkuc3JjIHx8ICcnO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc291cmNlIHR5cGUgZS5nLiB2aWRlby9tcDRcbiAgICogVGhpcyBjYW4gYWxsb3cgeW91IHJlYnVpbGQgdGhlIGN1cnJlbnQgc291cmNlIG9iamVjdCBzbyB0aGF0IHlvdSBjb3VsZCBsb2FkIHRoZSBzYW1lXG4gICAqIHNvdXJjZSBhbmQgdGVjaCBsYXRlclxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIHNvdXJjZSBNSU1FIHR5cGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3VycmVudFR5cGUgPSBmdW5jdGlvbiBjdXJyZW50VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U291cmNlKCkgJiYgdGhpcy5jdXJyZW50U291cmNlKCkudHlwZSB8fCAnJztcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgcHJlbG9hZCBhdHRyaWJ1dGVcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWVdXG4gICAqICAgICAgICAtIHRydWUgbWVhbnMgdGhhdCB3ZSBzaG91bGQgcHJlbG9hZFxuICAgKiAgICAgICAgLSBmYWxzZSBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgcHJlbG9hZFxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIHZhbHVlIHdoZW4gZ2V0dGluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wcmVsb2FkID0gZnVuY3Rpb24gcHJlbG9hZCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRlY2hDYWxsXygnc2V0UHJlbG9hZCcsIHZhbHVlKTtcbiAgICAgIHRoaXMub3B0aW9uc18ucHJlbG9hZCA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlY2hHZXRfKCdwcmVsb2FkJyk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGF1dG9wbGF5IG9wdGlvbi4gV2hlbiB0aGlzIGlzIGEgYm9vbGVhbiBpdCB3aWxsXG4gICAqIG1vZGlmeSB0aGUgYXR0cmlidXRlIG9uIHRoZSB0ZWNoLiBXaGVuIHRoaXMgaXMgYSBzdHJpbmcgdGhlIGF0dHJpYnV0ZSBvblxuICAgKiB0aGUgdGVjaCB3aWxsIGJlIHJlbW92ZWQgYW5kIGBQbGF5ZXJgIHdpbGwgaGFuZGxlIGF1dG9wbGF5IG9uIGxvYWRzdGFydHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9IFt2YWx1ZV1cbiAgICogICAgICAgIC0gdHJ1ZTogYXV0b3BsYXkgdXNpbmcgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogICAgICAgIC0gZmFsc2U6IGRvIG5vdCBhdXRvcGxheVxuICAgKiAgICAgICAgLSAncGxheSc6IGNhbGwgcGxheSgpIG9uIGV2ZXJ5IGxvYWRzdGFydFxuICAgKiAgICAgICAgLSAnbXV0ZWQnOiBjYWxsIG11dGVkKCkgdGhlbiBwbGF5KCkgb24gZXZlcnkgbG9hZHN0YXJ0XG4gICAqICAgICAgICAtICdhbnknOiBjYWxsIHBsYXkoKSBvbiBldmVyeSBsb2Fkc3RhcnQuIGlmIHRoYXQgZmFpbHMgY2FsbCBtdXRlZCgpIHRoZW4gcGxheSgpLlxuICAgKiAgICAgICAgLSAqOiB2YWx1ZXMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaGVyZSB3aWxsIGJlIHNldCBgYXV0b3BsYXlgIHRvIHRydWVcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgYXV0b3BsYXkgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmF1dG9wbGF5ID0gZnVuY3Rpb24gYXV0b3BsYXkodmFsdWUpIHtcbiAgICAvLyBnZXR0ZXIgdXNhZ2VcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc18uYXV0b3BsYXkgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRlY2hBdXRvcGxheTsgLy8gaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgc3RyaW5nIHNldCBpdCB0byB0aGF0XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvKGFueXxwbGF5fG11dGVkKS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMub3B0aW9uc18uYXV0b3BsYXkgPSB2YWx1ZTtcbiAgICAgIHRoaXMubWFudWFsQXV0b3BsYXlfKHZhbHVlKTtcbiAgICAgIHRlY2hBdXRvcGxheSA9IGZhbHNlOyAvLyBhbnkgZmFsc3kgdmFsdWUgc2V0cyBhdXRvcGxheSB0byBmYWxzZSBpbiB0aGUgYnJvd3NlcixcbiAgICAgIC8vIGxldHMgZG8gdGhlIHNhbWVcbiAgICB9IGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zXy5hdXRvcGxheSA9IGZhbHNlOyAvLyBhbnkgb3RoZXIgdmFsdWUgKGllIHRydXRoeSkgc2V0cyBhdXRvcGxheSB0byB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc18uYXV0b3BsYXkgPSB0cnVlO1xuICAgIH1cblxuICAgIHRlY2hBdXRvcGxheSA9IHR5cGVvZiB0ZWNoQXV0b3BsYXkgPT09ICd1bmRlZmluZWQnID8gdGhpcy5vcHRpb25zXy5hdXRvcGxheSA6IHRlY2hBdXRvcGxheTsgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHRlY2ggdGhlbiB3ZSBkbyBub3QgcXVldWUgdXBcbiAgICAvLyBhIHNldEF1dG9wbGF5IGNhbGwgb24gdGVjaCByZWFkeS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZVxuICAgIC8vIGF1dG9wbGF5IG9wdGlvbiB3aWxsIGJlIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IgYW5kIHdlXG4gICAgLy8gZG8gbm90IG5lZWQgdG8gc2V0IGl0IHR3aWNlXG5cbiAgICBpZiAodGhpcy50ZWNoXykge1xuICAgICAgdGhpcy50ZWNoQ2FsbF8oJ3NldEF1dG9wbGF5JywgdGVjaEF1dG9wbGF5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCBvciB1bnNldCB0aGUgcGxheXNpbmxpbmUgYXR0cmlidXRlLlxuICAgKiBQbGF5c2lubGluZSB0ZWxscyB0aGUgYnJvd3NlciB0aGF0IG5vbi1mdWxsc2NyZWVuIHBsYXliYWNrIGlzIHByZWZlcnJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWVdXG4gICAqICAgICAgICAtIHRydWUgbWVhbnMgdGhhdCB3ZSBzaG91bGQgdHJ5IHRvIHBsYXkgaW5saW5lIGJ5IGRlZmF1bHRcbiAgICogICAgICAgIC0gZmFsc2UgbWVhbnMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBwbGF5YmFjayBtb2RlLFxuICAgKiAgICAgICAgICB3aGljaCBpbiBtb3N0IGNhc2VzIGlzIGlubGluZS4gaU9TIFNhZmFyaSBpcyBhIG5vdGFibGUgZXhjZXB0aW9uXG4gICAqICAgICAgICAgIGFuZCBwbGF5cyBmdWxsc2NyZWVuIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ3xQbGF5ZXJ9XG4gICAqICAgICAgICAgLSB0aGUgY3VycmVudCB2YWx1ZSBvZiBwbGF5c2lubGluZVxuICAgKiAgICAgICAgIC0gdGhlIHBsYXllciB3aGVuIHNldHRpbmdcbiAgICpcbiAgICogQHNlZSBbU3BlY117QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0ci12aWRlby1wbGF5c2lubGluZX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGxheXNpbmxpbmUgPSBmdW5jdGlvbiBwbGF5c2lubGluZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRlY2hDYWxsXygnc2V0UGxheXNpbmxpbmUnLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9wdGlvbnNfLnBsYXlzaW5saW5lID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZWNoR2V0XygncGxheXNpbmxpbmUnKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgbG9vcCBhdHRyaWJ1dGUgb24gdGhlIHZpZGVvIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlXVxuICAgKiAgICAgICAgLSB0cnVlIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGxvb3AgdGhlIHZpZGVvXG4gICAqICAgICAgICAtIGZhbHNlIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsb29wIHRoZSB2aWRlb1xuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IHZhbHVlIG9mIGxvb3Agd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmxvb3AgPSBmdW5jdGlvbiBsb29wKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudGVjaENhbGxfKCdzZXRMb29wJywgdmFsdWUpO1xuICAgICAgdGhpcy5vcHRpb25zXy5sb29wID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVjaEdldF8oJ2xvb3AnKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgcG9zdGVyIGltYWdlIHNvdXJjZSB1cmxcbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNwb3N0ZXJjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzcmNdXG4gICAqICAgICAgICBQb3N0ZXIgaW1hZ2Ugc291cmNlIFVSTFxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgcG9zdGVyIHdoZW4gZ2V0dGluZ1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wb3N0ZXIgPSBmdW5jdGlvbiBwb3N0ZXIoc3JjKSB7XG4gICAgaWYgKHNyYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3N0ZXJfO1xuICAgIH0gLy8gVGhlIGNvcnJlY3Qgd2F5IHRvIHJlbW92ZSBhIHBvc3RlciBpcyB0byBzZXQgYXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgLy8gb3RoZXIgZmFsc2V5IHZhbHVlcyB3aWxsIHRocm93IGVycm9yc1xuXG5cbiAgICBpZiAoIXNyYykge1xuICAgICAgc3JjID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHNyYyA9PT0gdGhpcy5wb3N0ZXJfKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGludGVybmFsIHBvc3RlciB2YXJpYWJsZVxuXG5cbiAgICB0aGlzLnBvc3Rlcl8gPSBzcmM7IC8vIHVwZGF0ZSB0aGUgdGVjaCdzIHBvc3RlclxuXG4gICAgdGhpcy50ZWNoQ2FsbF8oJ3NldFBvc3RlcicsIHNyYyk7XG4gICAgdGhpcy5pc1Bvc3RlckZyb21UZWNoXyA9IGZhbHNlOyAvLyBhbGVydCBjb21wb25lbnRzIHRoYXQgdGhlIHBvc3RlciBoYXMgYmVlbiBzZXRcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcG9zdGVyIGltYWdlIGlzIGNoYW5nZWQgb24gdGhlIHBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBQbGF5ZXIjcG9zdGVyY2hhbmdlXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICAgICAqL1xuXG4gICAgdGhpcy50cmlnZ2VyKCdwb3N0ZXJjaGFuZ2UnKTtcbiAgfVxuICAvKipcbiAgICogU29tZSB0ZWNocyAoZS5nLiBZb3VUdWJlKSBjYW4gcHJvdmlkZSBhIHBvc3RlciBzb3VyY2UgaW4gYW5cbiAgICogYXN5bmNocm9ub3VzIHdheS4gV2Ugd2FudCB0aGUgcG9zdGVyIGNvbXBvbmVudCB0byB1c2UgdGhpc1xuICAgKiBwb3N0ZXIgc291cmNlIHNvIHRoYXQgaXQgY292ZXJzIHVwIHRoZSB0ZWNoJ3MgY29udHJvbHMuXG4gICAqIChZb3VUdWJlJ3MgcGxheSBidXR0b24pLiBIb3dldmVyIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpc1xuICAgKiBzb3VyY2UgaWYgdGhlIHBsYXllciB1c2VyIGhhc24ndCBzZXQgYSBwb3N0ZXIgdGhyb3VnaFxuICAgKiB0aGUgbm9ybWFsIEFQSXMuXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjcG9zdGVyY2hhbmdlXG4gICAqIEBsaXN0ZW5zIFRlY2gjcG9zdGVyY2hhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhbmRsZVRlY2hQb3N0ZXJDaGFuZ2VfID0gZnVuY3Rpb24gaGFuZGxlVGVjaFBvc3RlckNoYW5nZV8oKSB7XG4gICAgaWYgKCghdGhpcy5wb3N0ZXJfIHx8IHRoaXMub3B0aW9uc18udGVjaENhbk92ZXJyaWRlUG9zdGVyKSAmJiB0aGlzLnRlY2hfICYmIHRoaXMudGVjaF8ucG9zdGVyKSB7XG4gICAgICB2YXIgbmV3UG9zdGVyID0gdGhpcy50ZWNoXy5wb3N0ZXIoKSB8fCAnJztcblxuICAgICAgaWYgKG5ld1Bvc3RlciAhPT0gdGhpcy5wb3N0ZXJfKSB7XG4gICAgICAgIHRoaXMucG9zdGVyXyA9IG5ld1Bvc3RlcjtcbiAgICAgICAgdGhpcy5pc1Bvc3RlckZyb21UZWNoXyA9IHRydWU7IC8vIExldCBjb21wb25lbnRzIGtub3cgdGhlIHBvc3RlciBoYXMgY2hhbmdlZFxuXG4gICAgICAgIHRoaXMudHJpZ2dlcigncG9zdGVyY2hhbmdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9scyBhcmUgc2hvd2luZy5cbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNjb250cm9sc2VuYWJsZWRcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYm9vbF1cbiAgICogICAgICAgIC0gdHJ1ZSB0byB0dXJuIGNvbnRyb2xzIG9uXG4gICAqICAgICAgICAtIGZhbHNlIHRvIHR1cm4gY29udHJvbHMgb2ZmXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgY29udHJvbHMgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnRyb2xzID0gZnVuY3Rpb24gY29udHJvbHMoYm9vbCkge1xuICAgIGlmIChib29sID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuY29udHJvbHNfO1xuICAgIH1cblxuICAgIGJvb2wgPSAhIWJvb2w7IC8vIERvbid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQgdW5sZXNzIGl0IGFjdHVhbGx5IGNoYW5nZWRcblxuICAgIGlmICh0aGlzLmNvbnRyb2xzXyA9PT0gYm9vbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbHNfID0gYm9vbDtcblxuICAgIGlmICh0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHMoKSkge1xuICAgICAgdGhpcy50ZWNoQ2FsbF8oJ3NldENvbnRyb2xzJywgYm9vbCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udHJvbHNfKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtY29udHJvbHMtZGlzYWJsZWQnKTtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1jb250cm9scy1lbmFibGVkJyk7XG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBQbGF5ZXIjY29udHJvbHNlbmFibGVkXG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKi9cblxuICAgICAgdGhpcy50cmlnZ2VyKCdjb250cm9sc2VuYWJsZWQnKTtcblxuICAgICAgaWYgKCF0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHMoKSkge1xuICAgICAgICB0aGlzLmFkZFRlY2hDb250cm9sc0xpc3RlbmVyc18oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLWNvbnRyb2xzLWVuYWJsZWQnKTtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy1jb250cm9scy1kaXNhYmxlZCcpO1xuICAgICAgLyoqXG4gICAgICAgKiBAZXZlbnQgUGxheWVyI2NvbnRyb2xzZGlzYWJsZWRcbiAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAqL1xuXG4gICAgICB0aGlzLnRyaWdnZXIoJ2NvbnRyb2xzZGlzYWJsZWQnKTtcblxuICAgICAgaWYgKCF0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHMoKSkge1xuICAgICAgICB0aGlzLnJlbW92ZVRlY2hDb250cm9sc0xpc3RlbmVyc18oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRvZ2dsZSBuYXRpdmUgY29udHJvbHMgb24vb2ZmLiBOYXRpdmUgY29udHJvbHMgYXJlIHRoZSBjb250cm9scyBidWlsdCBpbnRvXG4gICAqIGRldmljZXMgKGUuZy4gZGVmYXVsdCBpUGhvbmUgY29udHJvbHMpLCBGbGFzaCwgb3Igb3RoZXIgdGVjaHNcbiAgICogKGUuZy4gVmltZW8gQ29udHJvbHMpXG4gICAqICoqVGhpcyBzaG91bGQgb25seSBiZSBzZXQgYnkgdGhlIGN1cnJlbnQgdGVjaCwgYmVjYXVzZSBvbmx5IHRoZSB0ZWNoIGtub3dzXG4gICAqIGlmIGl0IGNhbiBzdXBwb3J0IG5hdGl2ZSBjb250cm9scyoqXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjdXNpbmduYXRpdmVjb250cm9sc1xuICAgKiBAZmlyZXMgUGxheWVyI3VzaW5nY3VzdG9tY29udHJvbHNcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYm9vbF1cbiAgICogICAgICAgIC0gdHJ1ZSB0byB0dXJuIG5hdGl2ZSBjb250cm9scyBvblxuICAgKiAgICAgICAgLSBmYWxzZSB0byB0dXJuIG5hdGl2ZSBjb250cm9scyBvZmZcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICBUaGUgY3VycmVudCB2YWx1ZSBvZiBuYXRpdmUgY29udHJvbHMgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVzaW5nTmF0aXZlQ29udHJvbHMgPSBmdW5jdGlvbiB1c2luZ05hdGl2ZUNvbnRyb2xzKGJvb2wpIHtcbiAgICBpZiAoYm9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHNfO1xuICAgIH1cblxuICAgIGJvb2wgPSAhIWJvb2w7IC8vIERvbid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQgdW5sZXNzIGl0IGFjdHVhbGx5IGNoYW5nZWRcblxuICAgIGlmICh0aGlzLnVzaW5nTmF0aXZlQ29udHJvbHNfID09PSBib29sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51c2luZ05hdGl2ZUNvbnRyb2xzXyA9IGJvb2w7XG5cbiAgICBpZiAodGhpcy51c2luZ05hdGl2ZUNvbnRyb2xzXykge1xuICAgICAgdGhpcy5hZGRDbGFzcygndmpzLXVzaW5nLW5hdGl2ZS1jb250cm9scycpO1xuICAgICAgLyoqXG4gICAgICAgKiBwbGF5ZXIgaXMgdXNpbmcgdGhlIG5hdGl2ZSBkZXZpY2UgY29udHJvbHNcbiAgICAgICAqXG4gICAgICAgKiBAZXZlbnQgUGxheWVyI3VzaW5nbmF0aXZlY29udHJvbHNcbiAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAqL1xuXG4gICAgICB0aGlzLnRyaWdnZXIoJ3VzaW5nbmF0aXZlY29udHJvbHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLXVzaW5nLW5hdGl2ZS1jb250cm9scycpO1xuICAgICAgLyoqXG4gICAgICAgKiBwbGF5ZXIgaXMgdXNpbmcgdGhlIGN1c3RvbSBIVE1MIGNvbnRyb2xzXG4gICAgICAgKlxuICAgICAgICogQGV2ZW50IFBsYXllciN1c2luZ2N1c3RvbWNvbnRyb2xzXG4gICAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICAgKi9cblxuICAgICAgdGhpcy50cmlnZ2VyKCd1c2luZ2N1c3RvbWNvbnRyb2xzJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgb3IgZ2V0IHRoZSBjdXJyZW50IE1lZGlhRXJyb3JcbiAgICpcbiAgICogQGZpcmVzIFBsYXllciNlcnJvclxuICAgKlxuICAgKiBAcGFyYW0gIHtNZWRpYUVycm9yfHN0cmluZ3xudW1iZXJ9IFtlcnJdXG4gICAqICAgICAgICAgQSBNZWRpYUVycm9yIG9yIGEgc3RyaW5nL251bWJlciB0byBiZSB0dXJuZWRcbiAgICogICAgICAgICBpbnRvIGEgTWVkaWFFcnJvclxuICAgKlxuICAgKiBAcmV0dXJuIHtNZWRpYUVycm9yfG51bGx9XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgTWVkaWFFcnJvciB3aGVuIGdldHRpbmcgKG9yIG51bGwpXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVycm9yID0gZnVuY3Rpb24gZXJyb3IoZXJyKSB7XG4gICAgaWYgKGVyciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcl8gfHwgbnVsbDtcbiAgICB9IC8vIFN1cHByZXNzIHRoZSBmaXJzdCBlcnJvciBtZXNzYWdlIGZvciBubyBjb21wYXRpYmxlIHNvdXJjZSB1bnRpbFxuICAgIC8vIHVzZXIgaW50ZXJhY3Rpb25cblxuXG4gICAgaWYgKHRoaXMub3B0aW9uc18uc3VwcHJlc3NOb3RTdXBwb3J0ZWRFcnJvciAmJiBlcnIgJiYgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UgPT09IHRoaXMubG9jYWxpemUodGhpcy5vcHRpb25zXy5ub3RTdXBwb3J0ZWRNZXNzYWdlKSkge1xuICAgICAgdmFyIHRyaWdnZXJTdXBwcmVzc2VkRXJyb3IgPSBmdW5jdGlvbiB0cmlnZ2VyU3VwcHJlc3NlZEVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNfLnN1cHByZXNzTm90U3VwcG9ydGVkRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuYW55KFsnY2xpY2snLCAndG91Y2hzdGFydCddLCB0cmlnZ2VyU3VwcHJlc3NlZEVycm9yKTtcbiAgICAgIHRoaXMub25lKCdsb2Fkc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub2ZmKFsnY2xpY2snLCAndG91Y2hzdGFydCddLCB0cmlnZ2VyU3VwcHJlc3NlZEVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcmVzdG9yaW5nIHRvIGRlZmF1bHRcblxuXG4gICAgaWYgKGVyciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5lcnJvcl8gPSBlcnI7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCd2anMtZXJyb3InKTtcblxuICAgICAgaWYgKHRoaXMuZXJyb3JEaXNwbGF5KSB7XG4gICAgICAgIHRoaXMuZXJyb3JEaXNwbGF5LmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVycm9yXyA9IG5ldyBNZWRpYUVycm9yKGVycik7IC8vIGFkZCB0aGUgdmpzLWVycm9yIGNsYXNzbmFtZSB0byB0aGUgcGxheWVyXG5cbiAgICB0aGlzLmFkZENsYXNzKCd2anMtZXJyb3InKTsgLy8gbG9nIHRoZSBuYW1lIG9mIHRoZSBlcnJvciB0eXBlIGFuZCBhbnkgbWVzc2FnZVxuICAgIC8vIElFMTEgbG9ncyBcIltvYmplY3Qgb2JqZWN0XVwiIGFuZCByZXF1aXJlZCB5b3UgdG8gZXhwYW5kIG1lc3NhZ2UgdG8gc2VlIGVycm9yIG9iamVjdFxuXG4gICAgbG9nLmVycm9yKFwiKENPREU6XCIgKyB0aGlzLmVycm9yXy5jb2RlICsgXCIgXCIgKyBNZWRpYUVycm9yLmVycm9yVHlwZXNbdGhpcy5lcnJvcl8uY29kZV0gKyBcIilcIiwgdGhpcy5lcnJvcl8ubWVzc2FnZSwgdGhpcy5lcnJvcl8pO1xuICAgIC8qKlxuICAgICAqIEBldmVudCBQbGF5ZXIjZXJyb3JcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8qKlxuICAgKiBSZXBvcnQgdXNlciBhY3Rpdml0eVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAgICogICAgICAgIEV2ZW50IG9iamVjdFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5yZXBvcnRVc2VyQWN0aXZpdHkgPSBmdW5jdGlvbiByZXBvcnRVc2VyQWN0aXZpdHkoZXZlbnQpIHtcbiAgICB0aGlzLnVzZXJBY3Rpdml0eV8gPSB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IGlmIHVzZXIgaXMgYWN0aXZlXG4gICAqXG4gICAqIEBmaXJlcyBQbGF5ZXIjdXNlcmFjdGl2ZVxuICAgKiBAZmlyZXMgUGxheWVyI3VzZXJpbmFjdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtib29sXVxuICAgKiAgICAgICAgLSB0cnVlIGlmIHRoZSB1c2VyIGlzIGFjdGl2ZVxuICAgKiAgICAgICAgLSBmYWxzZSBpZiB0aGUgdXNlciBpcyBpbmFjdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IHZhbHVlIG9mIHVzZXJBY3RpdmUgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVzZXJBY3RpdmUgPSBmdW5jdGlvbiB1c2VyQWN0aXZlKGJvb2wpIHtcbiAgICBpZiAoYm9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy51c2VyQWN0aXZlXztcbiAgICB9XG5cbiAgICBib29sID0gISFib29sO1xuXG4gICAgaWYgKGJvb2wgPT09IHRoaXMudXNlckFjdGl2ZV8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJBY3RpdmVfID0gYm9vbDtcblxuICAgIGlmICh0aGlzLnVzZXJBY3RpdmVfKSB7XG4gICAgICB0aGlzLnVzZXJBY3Rpdml0eV8gPSB0cnVlO1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcygndmpzLXVzZXItaW5hY3RpdmUnKTtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy11c2VyLWFjdGl2ZScpO1xuICAgICAgLyoqXG4gICAgICAgKiBAZXZlbnQgUGxheWVyI3VzZXJhY3RpdmVcbiAgICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAgICAgICAqL1xuXG4gICAgICB0aGlzLnRyaWdnZXIoJ3VzZXJhY3RpdmUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENocm9tZS9TYWZhcmkvSUUgaGF2ZSBidWdzIHdoZXJlIHdoZW4geW91IGNoYW5nZSB0aGUgY3Vyc29yIGl0IGNhblxuICAgIC8vIHRyaWdnZXIgYSBtb3VzZW1vdmUgZXZlbnQuIFRoaXMgY2F1c2VzIGFuIGlzc3VlIHdoZW4geW91J3JlIGhpZGluZ1xuICAgIC8vIHRoZSBjdXJzb3Igd2hlbiB0aGUgdXNlciBpcyBpbmFjdGl2ZSwgYW5kIGEgbW91c2Vtb3ZlIHNpZ25hbHMgdXNlclxuICAgIC8vIGFjdGl2aXR5LiBNYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBnbyBpbnRvIGluYWN0aXZlIG1vZGUuIFNwZWNpZmljYWxseVxuICAgIC8vIHRoaXMgaGFwcGVucyBpbiBmdWxsc2NyZWVuIHdoZW4gd2UgcmVhbGx5IG5lZWQgdG8gaGlkZSB0aGUgY3Vyc29yLlxuICAgIC8vXG4gICAgLy8gV2hlbiB0aGlzIGdldHMgcmVzb2x2ZWQgaW4gQUxMIGJyb3dzZXJzIGl0IGNhbiBiZSByZW1vdmVkXG4gICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMzA0MVxuXG5cbiAgICBpZiAodGhpcy50ZWNoXykge1xuICAgICAgdGhpcy50ZWNoXy5vbmUoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXNlckFjdGl2aXR5XyA9IGZhbHNlO1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3Zqcy11c2VyLWFjdGl2ZScpO1xuICAgIHRoaXMuYWRkQ2xhc3MoJ3Zqcy11c2VyLWluYWN0aXZlJyk7XG4gICAgLyoqXG4gICAgICogQGV2ZW50IFBsYXllciN1c2VyaW5hY3RpdmVcbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ3VzZXJpbmFjdGl2ZScpO1xuICB9XG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIHVzZXIgYWN0aXZpdHkgYmFzZWQgb24gdGltZW91dCB2YWx1ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5saXN0ZW5Gb3JVc2VyQWN0aXZpdHlfID0gZnVuY3Rpb24gbGlzdGVuRm9yVXNlckFjdGl2aXR5XygpIHtcbiAgICB2YXIgbW91c2VJblByb2dyZXNzO1xuICAgIHZhciBsYXN0TW92ZVg7XG4gICAgdmFyIGxhc3RNb3ZlWTtcbiAgICB2YXIgaGFuZGxlQWN0aXZpdHkgPSBiaW5kKHRoaXMsIHRoaXMucmVwb3J0VXNlckFjdGl2aXR5KTtcblxuICAgIHZhciBoYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZSkge1xuICAgICAgLy8gIzEwNjggLSBQcmV2ZW50IG1vdXNlbW92ZSBzcGFtbWluZ1xuICAgICAgLy8gQ2hyb21lIEJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM2Njk3MFxuICAgICAgaWYgKGUuc2NyZWVuWCAhPT0gbGFzdE1vdmVYIHx8IGUuc2NyZWVuWSAhPT0gbGFzdE1vdmVZKSB7XG4gICAgICAgIGxhc3RNb3ZlWCA9IGUuc2NyZWVuWDtcbiAgICAgICAgbGFzdE1vdmVZID0gZS5zY3JlZW5ZO1xuICAgICAgICBoYW5kbGVBY3Rpdml0eSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKCkge1xuICAgICAgaGFuZGxlQWN0aXZpdHkoKTsgLy8gRm9yIGFzIGxvbmcgYXMgdGhlIHRoZXkgYXJlIHRvdWNoaW5nIHRoZSBkZXZpY2Ugb3IgaGF2ZSB0aGVpciBtb3VzZSBkb3duLFxuICAgICAgLy8gd2UgY29uc2lkZXIgdGhlbSBhY3RpdmUgZXZlbiBpZiB0aGV5J3JlIG5vdCBtb3ZpbmcgdGhlaXIgZmluZ2VyIG9yIG1vdXNlLlxuICAgICAgLy8gU28gd2Ugd2FudCB0byBjb250aW51ZSB0byB1cGRhdGUgdGhhdCB0aGV5IGFyZSBhY3RpdmVcblxuICAgICAgdGhpcy5jbGVhckludGVydmFsKG1vdXNlSW5Qcm9ncmVzcyk7IC8vIFNldHRpbmcgdXNlckFjdGl2aXR5PXRydWUgbm93IGFuZCBzZXR0aW5nIHRoZSBpbnRlcnZhbCB0byB0aGUgc2FtZSB0aW1lXG4gICAgICAvLyBhcyB0aGUgYWN0aXZpdHlDaGVjayBpbnRlcnZhbCAoMjUwKSBzaG91bGQgZW5zdXJlIHdlIG5ldmVyIG1pc3MgdGhlXG4gICAgICAvLyBuZXh0IGFjdGl2aXR5Q2hlY2tcblxuICAgICAgbW91c2VJblByb2dyZXNzID0gdGhpcy5zZXRJbnRlcnZhbChoYW5kbGVBY3Rpdml0eSwgMjUwKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZU1vdXNlVXAgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2ZW50KSB7XG4gICAgICBoYW5kbGVBY3Rpdml0eSgpOyAvLyBTdG9wIHRoZSBpbnRlcnZhbCB0aGF0IG1haW50YWlucyBhY3Rpdml0eSBpZiB0aGUgbW91c2UvdG91Y2ggaXMgZG93blxuXG4gICAgICB0aGlzLmNsZWFySW50ZXJ2YWwobW91c2VJblByb2dyZXNzKTtcbiAgICB9OyAvLyBBbnkgbW91c2UgbW92ZW1lbnQgd2lsbCBiZSBjb25zaWRlcmVkIHVzZXIgYWN0aXZpdHlcblxuXG4gICAgdGhpcy5vbignbW91c2Vkb3duJywgaGFuZGxlTW91c2VEb3duKTtcbiAgICB0aGlzLm9uKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgIHRoaXMub24oJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcbiAgICB2YXIgY29udHJvbEJhciA9IHRoaXMuZ2V0Q2hpbGQoJ2NvbnRyb2xCYXInKTsgLy8gRml4ZXMgYnVnIG9uIEFuZHJvaWQgJiBpT1Mgd2hlcmUgd2hlbiB0YXBwaW5nIHByb2dyZXNzQmFyICh3aGVuIGNvbnRyb2wgYmFyIGlzIGRpc3BsYXllZClcbiAgICAvLyBjb250cm9sQmFyIHdvdWxkIG5vIGxvbmdlciBiZSBoaWRkZW4gYnkgZGVmYXVsdCB0aW1lb3V0LlxuXG4gICAgaWYgKGNvbnRyb2xCYXIgJiYgIUlTX0lPUyAmJiAhSVNfQU5EUk9JRCkge1xuICAgICAgY29udHJvbEJhci5vbignbW91c2VlbnRlcicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLnBsYXllcigpLmNhY2hlXy5pbmFjdGl2aXR5VGltZW91dCA9IHRoaXMucGxheWVyKCkub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQ7XG4gICAgICAgIHRoaXMucGxheWVyKCkub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQgPSAwO1xuICAgICAgfSk7XG4gICAgICBjb250cm9sQmFyLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucGxheWVyKCkub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQgPSB0aGlzLnBsYXllcigpLmNhY2hlXy5pbmFjdGl2aXR5VGltZW91dDtcbiAgICAgIH0pO1xuICAgIH0gLy8gTGlzdGVuIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgLy8gU2hvdWxkbid0IG5lZWQgdG8gdXNlIGluUHJvZ3Jlc3MgaW50ZXJ2YWwgYmVjYXVzZSBvZiBrZXkgcmVwZWF0XG5cblxuICAgIHRoaXMub24oJ2tleWRvd24nLCBoYW5kbGVBY3Rpdml0eSk7XG4gICAgdGhpcy5vbigna2V5dXAnLCBoYW5kbGVBY3Rpdml0eSk7IC8vIFJ1biBhbiBpbnRlcnZhbCBldmVyeSAyNTAgbWlsbGlzZWNvbmRzIGluc3RlYWQgb2Ygc3R1ZmZpbmcgZXZlcnl0aGluZyBpbnRvXG4gICAgLy8gdGhlIG1vdXNlbW92ZS90b3VjaG1vdmUgZnVuY3Rpb24gaXRzZWxmLCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLlxuICAgIC8vIGB0aGlzLnJlcG9ydFVzZXJBY3Rpdml0eWAgc2ltcGx5IHNldHMgdGhpcy51c2VyQWN0aXZpdHlfIHRvIHRydWUsIHdoaWNoXG4gICAgLy8gdGhlbiBnZXRzIHBpY2tlZCB1cCBieSB0aGlzIGxvb3BcbiAgICAvLyBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvbGVhcm5pbmctZnJvbS10d2l0dGVyL1xuXG4gICAgdmFyIGluYWN0aXZpdHlUaW1lb3V0O1xuICAgIHRoaXMuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIG1vdXNlL3RvdWNoIGFjdGl2aXR5IGhhcyBoYXBwZW5lZFxuICAgICAgaWYgKCF0aGlzLnVzZXJBY3Rpdml0eV8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBSZXNldCB0aGUgYWN0aXZpdHkgdHJhY2tlclxuXG5cbiAgICAgIHRoaXMudXNlckFjdGl2aXR5XyA9IGZhbHNlOyAvLyBJZiB0aGUgdXNlciBzdGF0ZSB3YXMgaW5hY3RpdmUsIHNldCB0aGUgc3RhdGUgdG8gYWN0aXZlXG5cbiAgICAgIHRoaXMudXNlckFjdGl2ZSh0cnVlKTsgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIGluYWN0aXZpdHkgdGltZW91dCB0byBzdGFydCB0aGUgdGltZXIgb3ZlclxuXG4gICAgICB0aGlzLmNsZWFyVGltZW91dChpbmFjdGl2aXR5VGltZW91dCk7XG4gICAgICB2YXIgdGltZW91dCA9IHRoaXMub3B0aW9uc18uaW5hY3Rpdml0eVRpbWVvdXQ7XG5cbiAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBJbiA8dGltZW91dD4gbWlsbGlzZWNvbmRzLCBpZiBubyBtb3JlIGFjdGl2aXR5IGhhcyBvY2N1cnJlZCB0aGVcbiAgICAgIC8vIHVzZXIgd2lsbCBiZSBjb25zaWRlcmVkIGluYWN0aXZlXG5cblxuICAgICAgaW5hY3Rpdml0eVRpbWVvdXQgPSB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIGluYWN0aXZpdHlUaW1lb3V0IGNhbiB0cmlnZ2VyIGp1c3RcbiAgICAgICAgLy8gYmVmb3JlIHRoZSBuZXh0IHVzZXIgYWN0aXZpdHkgaXMgcGlja2VkIHVwIGJ5IHRoZSBhY3Rpdml0eSBjaGVjayBsb29wXG4gICAgICAgIC8vIGNhdXNpbmcgYSBmbGlja2VyXG4gICAgICAgIGlmICghdGhpcy51c2VyQWN0aXZpdHlfKSB7XG4gICAgICAgICAgdGhpcy51c2VyQWN0aXZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSwgMjUwKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IHBsYXliYWNrIHJhdGUuIEEgcGxheWJhY2sgcmF0ZSBvZlxuICAgKiAxLjAgcmVwcmVzZW50cyBub3JtYWwgc3BlZWQgYW5kIDAuNSB3b3VsZCBpbmRpY2F0ZSBoYWxmLXNwZWVkXG4gICAqIHBsYXliYWNrLCBmb3IgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RvbS1tZWRpYS1wbGF5YmFja3JhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyYXRlXVxuICAgKiAgICAgICBOZXcgcGxheWJhY2sgcmF0ZSB0byBzZXQuXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICogICAgICAgICBUaGUgY3VycmVudCBwbGF5YmFjayByYXRlIHdoZW4gZ2V0dGluZyBvciAxLjBcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGxheWJhY2tSYXRlID0gZnVuY3Rpb24gcGxheWJhY2tSYXRlKHJhdGUpIHtcbiAgICBpZiAocmF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBOT1RFOiB0aGlzLmNhY2hlXy5sYXN0UGxheWJhY2tSYXRlIGlzIHNldCBmcm9tIHRoZSB0ZWNoIGhhbmRsZXJcbiAgICAgIC8vIHRoYXQgaXMgcmVnaXN0ZXJlZCBhYm92ZVxuICAgICAgdGhpcy50ZWNoQ2FsbF8oJ3NldFBsYXliYWNrUmF0ZScsIHJhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlY2hfICYmIHRoaXMudGVjaF8uZmVhdHVyZXNQbGF5YmFja1JhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlXy5sYXN0UGxheWJhY2tSYXRlIHx8IHRoaXMudGVjaEdldF8oJ3BsYXliYWNrUmF0ZScpO1xuICAgIH1cblxuICAgIHJldHVybiAxLjA7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBkZWZhdWx0IHBsYXliYWNrIHJhdGUuIEEgZGVmYXVsdCBwbGF5YmFjayByYXRlIG9mXG4gICAqIDEuMCByZXByZXNlbnRzIG5vcm1hbCBzcGVlZCBhbmQgMC41IHdvdWxkIGluZGljYXRlIGhhbGYtc3BlZWQgcGxheWJhY2ssIGZvciBpbnN0YW5jZS5cbiAgICogZGVmYXVsdFBsYXliYWNrUmF0ZSB3aWxsIG9ubHkgcmVwcmVzZW50IHdoYXQgdGhlIGluaXRpYWwgcGxheWJhY2tSYXRlIG9mIGEgdmlkZW8gd2FzLCBub3RcbiAgICogbm90IHRoZSBjdXJyZW50IHBsYXliYWNrUmF0ZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjZG9tLW1lZGlhLWRlZmF1bHRwbGF5YmFja3JhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyYXRlXVxuICAgKiAgICAgICBOZXcgZGVmYXVsdCBwbGF5YmFjayByYXRlIHRvIHNldC5cbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfFBsYXllcn1cbiAgICogICAgICAgICAtIFRoZSBkZWZhdWx0IHBsYXliYWNrIHJhdGUgd2hlbiBnZXR0aW5nIG9yIDEuMFxuICAgKiAgICAgICAgIC0gdGhlIHBsYXllciB3aGVuIHNldHRpbmdcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGVmYXVsdFBsYXliYWNrUmF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRQbGF5YmFja1JhdGUocmF0ZSkge1xuICAgIGlmIChyYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlY2hDYWxsXygnc2V0RGVmYXVsdFBsYXliYWNrUmF0ZScsIHJhdGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlY2hfICYmIHRoaXMudGVjaF8uZmVhdHVyZXNQbGF5YmFja1JhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlY2hHZXRfKCdkZWZhdWx0UGxheWJhY2tSYXRlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDEuMDtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBhdWRpbyBmbGFnXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYm9vbFxuICAgKiAgICAgICAgLSB0cnVlIHNpZ25hbHMgdGhhdCB0aGlzIGlzIGFuIGF1ZGlvIHBsYXllclxuICAgKiAgICAgICAgLSBmYWxzZSBzaWduYWxzIHRoYXQgdGhpcyBpcyBub3QgYW4gYXVkaW8gcGxheWVyXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgaXNBdWRpbyB3aGVuIGdldHRpbmdcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaXNBdWRpbyA9IGZ1bmN0aW9uIGlzQXVkaW8oYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNBdWRpb18gPSAhIWJvb2w7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0F1ZGlvXztcbiAgfVxuICAvKipcbiAgICogQSBoZWxwZXIgbWV0aG9kIGZvciBhZGRpbmcgYSB7QGxpbmsgVGV4dFRyYWNrfSB0byBvdXJcbiAgICoge0BsaW5rIFRleHRUcmFja0xpc3R9LlxuICAgKlxuICAgKiBJbiBhZGRpdGlvbiB0byB0aGUgVzNDIHNldHRpbmdzIHdlIGFsbG93IGFkZGluZyBhZGRpdGlvbmFsIGluZm8gdGhyb3VnaCBvcHRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL2h0bWwvd2cvZHJhZnRzL2h0bWwvbWFzdGVyL2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI2RvbS1tZWRpYS1hZGR0ZXh0dHJhY2tcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtraW5kXVxuICAgKiAgICAgICAgdGhlIGtpbmQgb2YgVGV4dFRyYWNrIHlvdSBhcmUgYWRkaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFiZWxdXG4gICAqICAgICAgICB0aGUgbGFiZWwgdG8gZ2l2ZSB0aGUgVGV4dFRyYWNrIGxhYmVsXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFuZ3VhZ2VdXG4gICAqICAgICAgICB0aGUgbGFuZ3VhZ2UgdG8gc2V0IG9uIHRoZSBUZXh0VHJhY2tcbiAgICpcbiAgICogQHJldHVybiB7VGV4dFRyYWNrfHVuZGVmaW5lZH1cbiAgICogICAgICAgICB0aGUgVGV4dFRyYWNrIHRoYXQgd2FzIGFkZGVkIG9yIHVuZGVmaW5lZFxuICAgKiAgICAgICAgIGlmIHRoZXJlIGlzIG5vIHRlY2hcbiAgICovXG4gIDtcblxuICBfcHJvdG8uYWRkVGV4dFRyYWNrID0gZnVuY3Rpb24gYWRkVGV4dFRyYWNrKGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkge1xuICAgIGlmICh0aGlzLnRlY2hfKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZWNoXy5hZGRUZXh0VHJhY2soa2luZCwgbGFiZWwsIGxhbmd1YWdlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlbW90ZSB7QGxpbmsgVGV4dFRyYWNrfSBhbmQgYW4ge0BsaW5rIEhUTUxUcmFja0VsZW1lbnR9LiBJdCB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSB2aWRlbyBlbGVtZW50IHdoZW5ldmVyIHRoZSBzb3VyY2UgY2hhbmdlcywgdW5sZXNzXG4gICAqIG1hbnVhbENsZWFudXAgaXMgc2V0IHRvIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiAgICAgICAgT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBIVE1MVHJhY2tFbGVtZW50fSBkdXJpbmcgY3JlYXRpb24uIFNlZVxuICAgKiAgICAgICAge0BsaW5rIEhUTUxUcmFja0VsZW1lbnR9IGZvciBvYmplY3QgcHJvcGVydGllcyB0aGF0IHlvdSBzaG91bGQgdXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYW51YWxDbGVhbnVwPXRydWVdIGlmIHNldCB0byBmYWxzZSwgdGhlIFRleHRUcmFjayB3aWxsIGJlXG4gICAqXG4gICAqIEByZXR1cm4ge0h0bWxUcmFja0VsZW1lbnR9XG4gICAqICAgICAgICAgdGhlIEhUTUxUcmFja0VsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZCBhbmQgYWRkZWRcbiAgICogICAgICAgICB0byB0aGUgSHRtbFRyYWNrRWxlbWVudExpc3QgYW5kIHRoZSByZW1vdGVcbiAgICogICAgICAgICBUZXh0VHJhY2tMaXN0XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBcIm1hbnVhbENsZWFudXBcIiBwYXJhbWV0ZXIgd2lsbCBkZWZhdWx0XG4gICAqICAgICAgICAgICAgIHRvIFwiZmFsc2VcIiBpbiB1cGNvbWluZyB2ZXJzaW9ucyBvZiBWaWRlby5qc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5hZGRSZW1vdGVUZXh0VHJhY2sgPSBmdW5jdGlvbiBhZGRSZW1vdGVUZXh0VHJhY2sob3B0aW9ucywgbWFudWFsQ2xlYW51cCkge1xuICAgIGlmICh0aGlzLnRlY2hfKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZWNoXy5hZGRSZW1vdGVUZXh0VHJhY2sob3B0aW9ucywgbWFudWFsQ2xlYW51cCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSByZW1vdGUge0BsaW5rIFRleHRUcmFja30gZnJvbSB0aGUgcmVzcGVjdGl2ZVxuICAgKiB7QGxpbmsgVGV4dFRyYWNrTGlzdH0gYW5kIHtAbGluayBIdG1sVHJhY2tFbGVtZW50TGlzdH0uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0cmFja1xuICAgKiAgICAgICAgUmVtb3RlIHtAbGluayBUZXh0VHJhY2t9IHRvIHJlbW92ZVxuICAgKlxuICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAqICAgICAgICAgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnJlbW92ZVJlbW90ZVRleHRUcmFjayA9IGZ1bmN0aW9uIHJlbW92ZVJlbW90ZVRleHRUcmFjayhvYmopIHtcbiAgICBpZiAob2JqID09PSB2b2lkIDApIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgIH1cblxuICAgIHZhciBfb2JqID0gb2JqLFxuICAgICAgICB0cmFjayA9IF9vYmoudHJhY2s7XG5cbiAgICBpZiAoIXRyYWNrKSB7XG4gICAgICB0cmFjayA9IG9iajtcbiAgICB9IC8vIGRlc3RydWN0dXJlIHRoZSBpbnB1dCBpbnRvIGFuIG9iamVjdCB3aXRoIGEgdHJhY2sgYXJndW1lbnQsIGRlZmF1bHRpbmcgdG8gYXJndW1lbnRzWzBdXG4gICAgLy8gZGVmYXVsdCB0aGUgd2hvbGUgYXJndW1lbnQgdG8gYW4gZW1wdHkgb2JqZWN0IGlmIG5vdGhpbmcgd2FzIHBhc3NlZCBpblxuXG5cbiAgICBpZiAodGhpcy50ZWNoXykge1xuICAgICAgcmV0dXJuIHRoaXMudGVjaF8ucmVtb3ZlUmVtb3RlVGV4dFRyYWNrKHRyYWNrKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgYXZhaWxhYmxlIG1lZGlhIHBsYXliYWNrIHF1YWxpdHkgbWV0cmljcyBhcyBzcGVjaWZpZWQgYnkgdGhlIFczQydzIE1lZGlhXG4gICAqIFBsYXliYWNrIFF1YWxpdHkgQVBJLlxuICAgKlxuICAgKiBAc2VlIFtTcGVjXXtAbGluayBodHRwczovL3dpY2cuZ2l0aHViLmlvL21lZGlhLXBsYXliYWNrLXF1YWxpdHl9XG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdHx1bmRlZmluZWR9XG4gICAqICAgICAgICAgQW4gb2JqZWN0IHdpdGggc3VwcG9ydGVkIG1lZGlhIHBsYXliYWNrIHF1YWxpdHkgbWV0cmljcyBvciB1bmRlZmluZWQgaWYgdGhlcmVcbiAgICogICAgICAgICBpcyBubyB0ZWNoIG9yIHRoZSB0ZWNoIGRvZXMgbm90IHN1cHBvcnQgaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID0gZnVuY3Rpb24gZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVjaEdldF8oJ2dldFZpZGVvUGxheWJhY2tRdWFsaXR5Jyk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB2aWRlbyB3aWR0aFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgY3VycmVudCB2aWRlbyB3aWR0aFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by52aWRlb1dpZHRoID0gZnVuY3Rpb24gdmlkZW9XaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZWNoXyAmJiB0aGlzLnRlY2hfLnZpZGVvV2lkdGggJiYgdGhpcy50ZWNoXy52aWRlb1dpZHRoKCkgfHwgMDtcbiAgfVxuICAvKipcbiAgICogR2V0IHZpZGVvIGhlaWdodFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqICAgICAgICAgY3VycmVudCB2aWRlbyBoZWlnaHRcbiAgICovXG4gIDtcblxuICBfcHJvdG8udmlkZW9IZWlnaHQgPSBmdW5jdGlvbiB2aWRlb0hlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZWNoXyAmJiB0aGlzLnRlY2hfLnZpZGVvSGVpZ2h0ICYmIHRoaXMudGVjaF8udmlkZW9IZWlnaHQoKSB8fCAwO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcGxheWVyJ3MgbGFuZ3VhZ2UgY29kZVxuICAgKiBOT1RFOiBUaGUgbGFuZ3VhZ2Ugc2hvdWxkIGJlIHNldCBpbiB0aGUgcGxheWVyIG9wdGlvbnMgaWYgeW91IHdhbnQgdGhlXG4gICAqIHRoZSBjb250cm9scyB0byBiZSBidWlsdCB3aXRoIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuIENoYW5naW5nIHRoZSBsYW5ndWFnZVxuICAgKiBsYXRlciB3aWxsIG5vdCB1cGRhdGUgY29udHJvbHMgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXVxuICAgKiAgICAgICAgdGhlIGxhbmd1YWdlIGNvZGUgdG8gc2V0IHRoZSBwbGF5ZXIgdG9cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiAgICAgICAgIFRoZSBjdXJyZW50IGxhbmd1YWdlIGNvZGUgd2hlbiBnZXR0aW5nXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmxhbmd1YWdlID0gZnVuY3Rpb24gbGFuZ3VhZ2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlXztcbiAgICB9XG5cbiAgICB0aGlzLmxhbmd1YWdlXyA9IFN0cmluZyhjb2RlKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHBsYXllcidzIGxhbmd1YWdlIGRpY3Rpb25hcnlcbiAgICogTWVyZ2UgZXZlcnkgdGltZSwgYmVjYXVzZSBhIG5ld2x5IGFkZGVkIHBsdWdpbiBtaWdodCBjYWxsIHZpZGVvanMuYWRkTGFuZ3VhZ2UoKSBhdCBhbnkgdGltZVxuICAgKiBMYW5ndWFnZXMgc3BlY2lmaWVkIGRpcmVjdGx5IGluIHRoZSBwbGF5ZXIgb3B0aW9ucyBoYXZlIHByZWNlZGVuY2VcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqICAgICAgICAgQW4gYXJyYXkgb2Ygb2Ygc3VwcG9ydGVkIGxhbmd1YWdlc1xuICAgKi9cbiAgO1xuXG4gIF9wcm90by5sYW5ndWFnZXMgPSBmdW5jdGlvbiBsYW5ndWFnZXMoKSB7XG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyhQbGF5ZXIucHJvdG90eXBlLm9wdGlvbnNfLmxhbmd1YWdlcywgdGhpcy5sYW5ndWFnZXNfKTtcbiAgfVxuICAvKipcbiAgICogcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHJlcGVyZXNlbnRpbmcgdGhlIGN1cnJlbnQgdHJhY2tcbiAgICogaW5mb3JtYXRpb24uICoqRE9FUyBub3QgcmV0dXJuIGl0IGFzIEpTT04qKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBvZiB0cmFjayBpbmZvXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICB2YXIgb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnNfKTtcbiAgICB2YXIgdHJhY2tzID0gb3B0aW9ucy50cmFja3M7XG4gICAgb3B0aW9ucy50cmFja3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJhY2sgPSB0cmFja3NbaV07IC8vIGRlZXAgbWVyZ2UgdHJhY2tzIGFuZCBudWxsIG91dCBwbGF5ZXIgc28gbm8gY2lyY3VsYXIgcmVmZXJlbmNlc1xuXG4gICAgICB0cmFjayA9IG1lcmdlT3B0aW9ucyh0cmFjayk7XG4gICAgICB0cmFjay5wbGF5ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBvcHRpb25zLnRyYWNrc1tpXSA9IHRyYWNrO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2ltcGxlIG1vZGFsIGRpYWxvZyAoYW4gaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBNb2RhbERpYWxvZ31cbiAgICogY29tcG9uZW50KSB0aGF0IGltbWVkaWF0ZWx5IG92ZXJsYXlzIHRoZSBwbGF5ZXIgd2l0aCBhcmJpdHJhcnlcbiAgICogY29udGVudCBhbmQgcmVtb3ZlcyBpdHNlbGYgd2hlbiBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufEVsZW1lbnR8QXJyYXl8bnVsbH0gY29udGVudFxuICAgKiAgICAgICAgU2FtZSBhcyB7QGxpbmsgTW9kYWxEaWFsb2cjY29udGVudH0ncyBwYXJhbSBvZiB0aGUgc2FtZSBuYW1lLlxuICAgKiAgICAgICAgVGhlIG1vc3Qgc3RyYWlnaHQtZm9yd2FyZCB1c2FnZSBpcyB0byBwcm92aWRlIGEgc3RyaW5nIG9yIERPTVxuICAgKiAgICAgICAgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgICAgICAgRXh0cmEgb3B0aW9ucyB3aGljaCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUge0BsaW5rIE1vZGFsRGlhbG9nfS5cbiAgICpcbiAgICogQHJldHVybiB7TW9kYWxEaWFsb2d9XG4gICAqICAgICAgICAgdGhlIHtAbGluayBNb2RhbERpYWxvZ30gdGhhdCB3YXMgY3JlYXRlZFxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jcmVhdGVNb2RhbCA9IGZ1bmN0aW9uIGNyZWF0ZU1vZGFsKGNvbnRlbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMxNCA9IHRoaXM7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmNvbnRlbnQgPSBjb250ZW50IHx8ICcnO1xuICAgIHZhciBtb2RhbCA9IG5ldyBNb2RhbERpYWxvZyh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLmFkZENoaWxkKG1vZGFsKTtcbiAgICBtb2RhbC5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMTQucmVtb3ZlQ2hpbGQobW9kYWwpO1xuICAgIH0pO1xuICAgIG1vZGFsLm9wZW4oKTtcbiAgICByZXR1cm4gbW9kYWw7XG4gIH1cbiAgLyoqXG4gICAqIENoYW5nZSBicmVha3BvaW50IGNsYXNzZXMgd2hlbiB0aGUgcGxheWVyIHJlc2l6ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50XyA9IGZ1bmN0aW9uIHVwZGF0ZUN1cnJlbnRCcmVha3BvaW50XygpIHtcbiAgICBpZiAoIXRoaXMucmVzcG9uc2l2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdGhpcy5jdXJyZW50QnJlYWtwb2ludCgpO1xuICAgIHZhciBjdXJyZW50V2lkdGggPSB0aGlzLmN1cnJlbnRXaWR0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCUkVBS1BPSU5UX09SREVSLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FuZGlkYXRlQnJlYWtwb2ludCA9IEJSRUFLUE9JTlRfT1JERVJbaV07XG4gICAgICB2YXIgbWF4V2lkdGggPSB0aGlzLmJyZWFrcG9pbnRzX1tjYW5kaWRhdGVCcmVha3BvaW50XTtcblxuICAgICAgaWYgKGN1cnJlbnRXaWR0aCA8PSBtYXhXaWR0aCkge1xuICAgICAgICAvLyBUaGUgY3VycmVudCBicmVha3BvaW50IGRpZCBub3QgY2hhbmdlLCBub3RoaW5nIHRvIGRvLlxuICAgICAgICBpZiAoY3VycmVudEJyZWFrcG9pbnQgPT09IGNhbmRpZGF0ZUJyZWFrcG9pbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gT25seSByZW1vdmUgYSBjbGFzcyBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgYnJlYWtwb2ludC5cblxuXG4gICAgICAgIGlmIChjdXJyZW50QnJlYWtwb2ludCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoQlJFQUtQT0lOVF9DTEFTU0VTW2N1cnJlbnRCcmVha3BvaW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENsYXNzKEJSRUFLUE9JTlRfQ0xBU1NFU1tjYW5kaWRhdGVCcmVha3BvaW50XSk7XG4gICAgICAgIHRoaXMuYnJlYWtwb2ludF8gPSBjYW5kaWRhdGVCcmVha3BvaW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVtb3ZlQ3VycmVudEJyZWFrcG9pbnRfID0gZnVuY3Rpb24gcmVtb3ZlQ3VycmVudEJyZWFrcG9pbnRfKCkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmN1cnJlbnRCcmVha3BvaW50Q2xhc3MoKTtcbiAgICB0aGlzLmJyZWFrcG9pbnRfID0gJyc7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IGJyZWFrcG9pbnRzIG9uIHRoZSBwbGF5ZXIuXG4gICAqXG4gICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBhbiBvYmplY3Qgb3IgYHRydWVgIHdpbGwgcmVtb3ZlIGFueSBwcmV2aW91c1xuICAgKiBjdXN0b20gYnJlYWtwb2ludHMgYW5kIHN0YXJ0IGZyb20gdGhlIGRlZmF1bHRzIGFnYWluLlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R8Ym9vbGVhbn0gW2JyZWFrcG9pbnRzXVxuICAgKiAgICAgICAgIElmIGFuIG9iamVjdCBpcyBnaXZlbiwgaXQgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b21cbiAgICogICAgICAgICBicmVha3BvaW50cy4gSWYgYHRydWVgIGlzIGdpdmVuLCB3aWxsIHNldCBkZWZhdWx0IGJyZWFrcG9pbnRzLlxuICAgKiAgICAgICAgIElmIHRoaXMgYXJndW1lbnQgaXMgbm90IGdpdmVuLCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICogICAgICAgICBicmVha3BvaW50cy5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSBbYnJlYWtwb2ludHMudGlueV1cbiAgICogICAgICAgICBUaGUgbWF4aW11bSB3aWR0aCBmb3IgdGhlIFwidmpzLWxheW91dC10aW55XCIgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlcn0gW2JyZWFrcG9pbnRzLnhzbWFsbF1cbiAgICogICAgICAgICBUaGUgbWF4aW11bSB3aWR0aCBmb3IgdGhlIFwidmpzLWxheW91dC14LXNtYWxsXCIgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlcn0gW2JyZWFrcG9pbnRzLnNtYWxsXVxuICAgKiAgICAgICAgIFRoZSBtYXhpbXVtIHdpZHRoIGZvciB0aGUgXCJ2anMtbGF5b3V0LXNtYWxsXCIgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlcn0gW2JyZWFrcG9pbnRzLm1lZGl1bV1cbiAgICogICAgICAgICBUaGUgbWF4aW11bSB3aWR0aCBmb3IgdGhlIFwidmpzLWxheW91dC1tZWRpdW1cIiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSBbYnJlYWtwb2ludHMubGFyZ2VdXG4gICAqICAgICAgICAgVGhlIG1heGltdW0gd2lkdGggZm9yIHRoZSBcInZqcy1sYXlvdXQtbGFyZ2VcIiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSBbYnJlYWtwb2ludHMueGxhcmdlXVxuICAgKiAgICAgICAgIFRoZSBtYXhpbXVtIHdpZHRoIGZvciB0aGUgXCJ2anMtbGF5b3V0LXgtbGFyZ2VcIiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyfSBbYnJlYWtwb2ludHMuaHVnZV1cbiAgICogICAgICAgICBUaGUgbWF4aW11bSB3aWR0aCBmb3IgdGhlIFwidmpzLWxheW91dC1odWdlXCIgY2xhc3MuXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogICAgICAgICBBbiBvYmplY3QgbWFwcGluZyBicmVha3BvaW50IG5hbWVzIHRvIG1heGltdW0gd2lkdGggdmFsdWVzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5icmVha3BvaW50cyA9IGZ1bmN0aW9uIGJyZWFrcG9pbnRzKF9icmVha3BvaW50cykge1xuICAgIC8vIFVzZWQgYXMgYSBnZXR0ZXIuXG4gICAgaWYgKF9icmVha3BvaW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXNzaWduKHRoaXMuYnJlYWtwb2ludHNfKTtcbiAgICB9XG5cbiAgICB0aGlzLmJyZWFrcG9pbnRfID0gJyc7XG4gICAgdGhpcy5icmVha3BvaW50c18gPSBhc3NpZ24oe30sIERFRkFVTFRfQlJFQUtQT0lOVFMsIF9icmVha3BvaW50cyk7IC8vIFdoZW4gYnJlYWtwb2ludCBkZWZpbml0aW9ucyBjaGFuZ2UsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50bHlcbiAgICAvLyBzZWxlY3RlZCBicmVha3BvaW50LlxuXG4gICAgdGhpcy51cGRhdGVDdXJyZW50QnJlYWtwb2ludF8oKTsgLy8gQ2xvbmUgdGhlIGJyZWFrcG9pbnRzIGJlZm9yZSByZXR1cm5pbmcuXG5cbiAgICByZXR1cm4gYXNzaWduKHRoaXMuYnJlYWtwb2ludHNfKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBsYXllciBzaG91bGQgYWRqdXN0XG4gICAqIGl0cyBVSSBiYXNlZCBvbiBpdHMgZGltZW5zaW9ucy5cbiAgICpcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gdmFsdWVcbiAgICogICAgICAgICBTaG91bGQgYmUgYHRydWVgIGlmIHRoZSBwbGF5ZXIgc2hvdWxkIGFkanVzdCBpdHMgVUkgYmFzZWQgb24gaXRzXG4gICAqICAgICAgICAgZGltZW5zaW9uczsgb3RoZXJ3aXNlLCBzaG91bGQgYmUgYGZhbHNlYC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogICAgICAgICBXaWxsIGJlIGB0cnVlYCBpZiB0aGlzIHBsYXllciBzaG91bGQgYWRqdXN0IGl0cyBVSSBiYXNlZCBvbiBpdHNcbiAgICogICAgICAgICBkaW1lbnNpb25zOyBvdGhlcndpc2UsIHdpbGwgYmUgYGZhbHNlYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzcG9uc2l2ZSA9IGZ1bmN0aW9uIHJlc3BvbnNpdmUodmFsdWUpIHtcbiAgICAvLyBVc2VkIGFzIGEgZ2V0dGVyLlxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNwb25zaXZlXztcbiAgICB9XG5cbiAgICB2YWx1ZSA9IEJvb2xlYW4odmFsdWUpO1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5yZXNwb25zaXZlXzsgLy8gTm90aGluZyBjaGFuZ2VkLlxuXG4gICAgaWYgKHZhbHVlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgdmFsdWUgYWN0dWFsbHkgY2hhbmdlZCwgc2V0IGl0LlxuXG5cbiAgICB0aGlzLnJlc3BvbnNpdmVfID0gdmFsdWU7IC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgYnJlYWtwb2ludHMgYW5kIHNldCB0aGUgaW5pdGlhbCBicmVha3BvaW50IGlmIHRoZVxuICAgIC8vIHBsYXllciBpcyBub3cgcmVzcG9uc2l2ZS5cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5vbigncGxheWVycmVzaXplJywgdGhpcy51cGRhdGVDdXJyZW50QnJlYWtwb2ludF8pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50QnJlYWtwb2ludF8oKTsgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIGJyZWFrcG9pbnRzIGlmIHRoZSBwbGF5ZXIgaXMgbm8gbG9uZ2VyIHJlc3BvbnNpdmUuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub2ZmKCdwbGF5ZXJyZXNpemUnLCB0aGlzLnVwZGF0ZUN1cnJlbnRCcmVha3BvaW50Xyk7XG4gICAgICB0aGlzLnJlbW92ZUN1cnJlbnRCcmVha3BvaW50XygpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lLCBpZiBhbnkuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBicmVha3BvaW50IHNldCwgcmV0dXJucyBhIHRoZSBrZXkgZnJvbSB0aGVcbiAgICogICAgICAgICBicmVha3BvaW50cyBvYmplY3QgbWF0Y2hpbmcgaXQuIE90aGVyd2lzZSwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmN1cnJlbnRCcmVha3BvaW50ID0gZnVuY3Rpb24gY3VycmVudEJyZWFrcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludF87XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBicmVha3BvaW50IGNsYXNzIG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICBUaGUgbWF0Y2hpbmcgY2xhc3MgbmFtZSAoZS5nLiBgXCJ2anMtbGF5b3V0LXRpbnlcImAgb3JcbiAgICogICAgICAgICBgXCJ2anMtbGF5b3V0LWxhcmdlXCJgKSBmb3IgdGhlIGN1cnJlbnQgYnJlYWtwb2ludC4gRW1wdHkgc3RyaW5nIGlmXG4gICAqICAgICAgICAgdGhlcmUgaXMgbm8gY3VycmVudCBicmVha3BvaW50LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jdXJyZW50QnJlYWtwb2ludENsYXNzID0gZnVuY3Rpb24gY3VycmVudEJyZWFrcG9pbnRDbGFzcygpIHtcbiAgICByZXR1cm4gQlJFQUtQT0lOVF9DTEFTU0VTW3RoaXMuYnJlYWtwb2ludF9dIHx8ICcnO1xuICB9XG4gIC8qKlxuICAgKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgYSBzaW5nbGUgcGllY2Ugb2YgbWVkaWEuXG4gICAqXG4gICAqIFByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIHdpbGwgYmUgcmV0YWluZWQ7IHNvLFxuICAgKiB0aGlzIGNhbiBiZSB2aWV3ZWQgYXMgYSBnZW5lcmljIG1ldGFkYXRhIHN0b3JhZ2UgbWVjaGFuaXNtIGFzIHdlbGwuXG4gICAqXG4gICAqIEBzZWUgICAgICB7QGxpbmsgaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9tZWRpYXNlc3Npb24vI3RoZS1tZWRpYW1ldGFkYXRhLWludGVyZmFjZX1cbiAgICogQHR5cGVkZWYgIHtPYmplY3R9IFBsYXllcn5NZWRpYU9iamVjdFxuICAgKlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2FsYnVtXVxuICAgKiAgICAgICAgICAgVW51c2VkLCBleGNlcHQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIHRvIHRoZSBgTWVkaWFTZXNzaW9uYFxuICAgKiAgICAgICAgICAgQVBJLlxuICAgKlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2FydGlzdF1cbiAgICogICAgICAgICAgIFVudXNlZCwgZXhjZXB0IGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgYE1lZGlhU2Vzc2lvbmBcbiAgICogICAgICAgICAgIEFQSS5cbiAgICpcbiAgICogQHByb3BlcnR5IHtPYmplY3RbXX0gW2FydHdvcmtdXG4gICAqICAgICAgICAgICBVbnVzZWQsIGV4Y2VwdCBpZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGBNZWRpYVNlc3Npb25gXG4gICAqICAgICAgICAgICBBUEkuIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgYmUgcG9wdWxhdGVkIHZpYSB0aGUgYHBvc3RlcmAsIGlmXG4gICAqICAgICAgICAgICBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcG9zdGVyXVxuICAgKiAgICAgICAgICAgVVJMIHRvIGFuIGltYWdlIHRoYXQgd2lsbCBkaXNwbGF5IGJlZm9yZSBwbGF5YmFjay5cbiAgICpcbiAgICogQHByb3BlcnR5IHtUZWNoflNvdXJjZU9iamVjdHxUZWNoflNvdXJjZU9iamVjdFtdfHN0cmluZ30gW3NyY11cbiAgICogICAgICAgICAgIEEgc2luZ2xlIHNvdXJjZSBvYmplY3QsIGFuIGFycmF5IG9mIHNvdXJjZSBvYmplY3RzLCBvciBhIHN0cmluZ1xuICAgKiAgICAgICAgICAgcmVmZXJlbmNpbmcgYSBVUkwgdG8gYSBtZWRpYSBzb3VyY2UuIEl0IGlzIF9oaWdobHkgcmVjb21tZW5kZWRfXG4gICAqICAgICAgICAgICB0aGF0IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIGlzIHVzZWQgaGVyZSwgc28gdGhhdCBzb3VyY2VcbiAgICogICAgICAgICAgIHNlbGVjdGlvbiBhbGdvcml0aG1zIGNhbiB0YWtlIHRoZSBgdHlwZWAgaW50byBhY2NvdW50LlxuICAgKlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3RpdGxlXVxuICAgKiAgICAgICAgICAgVW51c2VkLCBleGNlcHQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIHRvIHRoZSBgTWVkaWFTZXNzaW9uYFxuICAgKiAgICAgICAgICAgQVBJLlxuICAgKlxuICAgKiBAcHJvcGVydHkge09iamVjdFtdfSBbdGV4dFRyYWNrc11cbiAgICogICAgICAgICAgIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGV4dCB0cmFja3MsIGZvbGxvd2luZ1xuICAgKiAgICAgICAgICAgdGhlIHtAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUwL2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI3RoZS10cmFjay1lbGVtZW50fG5hdGl2ZSB0cmFjayBlbGVtZW50IGZvcm1hdH0uXG4gICAqICAgICAgICAgICBGb3IgZWFzZSBvZiByZW1vdmFsLCB0aGVzZSB3aWxsIGJlIGNyZWF0ZWQgYXMgXCJyZW1vdGVcIiB0ZXh0XG4gICAqICAgICAgICAgICB0cmFja3MgYW5kIHNldCB0byBhdXRvbWF0aWNhbGx5IGNsZWFuIHVwIG9uIHNvdXJjZSBjaGFuZ2VzLlxuICAgKlxuICAgKiAgICAgICAgICAgVGhlc2Ugb2JqZWN0cyBtYXkgaGF2ZSBwcm9wZXJ0aWVzIGxpa2UgYHNyY2AsIGBraW5kYCwgYGxhYmVsYCxcbiAgICogICAgICAgICAgIGFuZCBgbGFuZ3VhZ2VgLCBzZWUge0BsaW5rIFRlY2gjY3JlYXRlUmVtb3RlVGV4dFRyYWNrfS5cbiAgICovXG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlIHRoZSBwbGF5ZXIgdXNpbmcgYSB7QGxpbmsgUGxheWVyfk1lZGlhT2JqZWN0fE1lZGlhT2JqZWN0fS5cbiAgICpcbiAgICogQHBhcmFtICB7UGxheWVyfk1lZGlhT2JqZWN0fSBtZWRpYVxuICAgKiAgICAgICAgIEEgbWVkaWEgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gcmVhZHlcbiAgICogICAgICAgICBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBwbGF5ZXIgaXMgcmVhZHkuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmxvYWRNZWRpYSA9IGZ1bmN0aW9uIGxvYWRNZWRpYShtZWRpYSwgcmVhZHkpIHtcbiAgICB2YXIgX3RoaXMxNSA9IHRoaXM7XG5cbiAgICBpZiAoIW1lZGlhIHx8IHR5cGVvZiBtZWRpYSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0KCk7IC8vIENsb25lIHRoZSBtZWRpYSBvYmplY3Qgc28gaXQgY2Fubm90IGJlIG11dGF0ZWQgZnJvbSBvdXRzaWRlLlxuXG4gICAgdGhpcy5jYWNoZV8ubWVkaWEgPSBtZXJnZU9wdGlvbnMobWVkaWEpO1xuICAgIHZhciBfdGhpcyRjYWNoZV8kbWVkaWEgPSB0aGlzLmNhY2hlXy5tZWRpYSxcbiAgICAgICAgYXJ0d29yayA9IF90aGlzJGNhY2hlXyRtZWRpYS5hcnR3b3JrLFxuICAgICAgICBwb3N0ZXIgPSBfdGhpcyRjYWNoZV8kbWVkaWEucG9zdGVyLFxuICAgICAgICBzcmMgPSBfdGhpcyRjYWNoZV8kbWVkaWEuc3JjLFxuICAgICAgICB0ZXh0VHJhY2tzID0gX3RoaXMkY2FjaGVfJG1lZGlhLnRleHRUcmFja3M7IC8vIElmIGBhcnR3b3JrYCBpcyBub3QgZ2l2ZW4sIGNyZWF0ZSBpdCB1c2luZyBgcG9zdGVyYC5cblxuICAgIGlmICghYXJ0d29yayAmJiBwb3N0ZXIpIHtcbiAgICAgIHRoaXMuY2FjaGVfLm1lZGlhLmFydHdvcmsgPSBbe1xuICAgICAgICBzcmM6IHBvc3RlcixcbiAgICAgICAgdHlwZTogZ2V0TWltZXR5cGUocG9zdGVyKVxuICAgICAgfV07XG4gICAgfVxuXG4gICAgaWYgKHNyYykge1xuICAgICAgdGhpcy5zcmMoc3JjKTtcbiAgICB9XG5cbiAgICBpZiAocG9zdGVyKSB7XG4gICAgICB0aGlzLnBvc3Rlcihwb3N0ZXIpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRleHRUcmFja3MpKSB7XG4gICAgICB0ZXh0VHJhY2tzLmZvckVhY2goZnVuY3Rpb24gKHR0KSB7XG4gICAgICAgIHJldHVybiBfdGhpczE1LmFkZFJlbW90ZVRleHRUcmFjayh0dCwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWFkeShyZWFkeSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIGNsb25lIG9mIHRoZSBjdXJyZW50IHtAbGluayBQbGF5ZXJ+TWVkaWFPYmplY3R9IGZvciB0aGlzIHBsYXllci5cbiAgICpcbiAgICogSWYgdGhlIGBsb2FkTWVkaWFgIG1ldGhvZCBoYXMgbm90IGJlZW4gdXNlZCwgd2lsbCBhdHRlbXB0IHRvIHJldHVybiBhXG4gICAqIHtAbGluayBQbGF5ZXJ+TWVkaWFPYmplY3R9IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbGF5ZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge1BsYXllcn5NZWRpYU9iamVjdH1cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0TWVkaWEgPSBmdW5jdGlvbiBnZXRNZWRpYSgpIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVfLm1lZGlhKSB7XG4gICAgICB2YXIgcG9zdGVyID0gdGhpcy5wb3N0ZXIoKTtcbiAgICAgIHZhciBzcmMgPSB0aGlzLmN1cnJlbnRTb3VyY2VzKCk7XG4gICAgICB2YXIgdGV4dFRyYWNrcyA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0aGlzLnJlbW90ZVRleHRUcmFja3MoKSwgZnVuY3Rpb24gKHR0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2luZDogdHQua2luZCxcbiAgICAgICAgICBsYWJlbDogdHQubGFiZWwsXG4gICAgICAgICAgbGFuZ3VhZ2U6IHR0Lmxhbmd1YWdlLFxuICAgICAgICAgIHNyYzogdHQuc3JjXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciBtZWRpYSA9IHtcbiAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgIHRleHRUcmFja3M6IHRleHRUcmFja3NcbiAgICAgIH07XG5cbiAgICAgIGlmIChwb3N0ZXIpIHtcbiAgICAgICAgbWVkaWEucG9zdGVyID0gcG9zdGVyO1xuICAgICAgICBtZWRpYS5hcnR3b3JrID0gW3tcbiAgICAgICAgICBzcmM6IG1lZGlhLnBvc3RlcixcbiAgICAgICAgICB0eXBlOiBnZXRNaW1ldHlwZShtZWRpYS5wb3N0ZXIpXG4gICAgICAgIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVkaWE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyh0aGlzLmNhY2hlXy5tZWRpYSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGFnIHNldHRpbmdzXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdGFnXG4gICAqICAgICAgICBUaGUgcGxheWVyIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzZXR0aW5nc1xuICAgKiAgICAgICAgIGZvciBhIHBsYXllciB0YWdcbiAgICovXG4gIDtcblxuICBQbGF5ZXIuZ2V0VGFnU2V0dGluZ3MgPSBmdW5jdGlvbiBnZXRUYWdTZXR0aW5ncyh0YWcpIHtcbiAgICB2YXIgYmFzZU9wdGlvbnMgPSB7XG4gICAgICBzb3VyY2VzOiBbXSxcbiAgICAgIHRyYWNrczogW11cbiAgICB9O1xuICAgIHZhciB0YWdPcHRpb25zID0gZ2V0QXR0cmlidXRlcyh0YWcpO1xuICAgIHZhciBkYXRhU2V0dXAgPSB0YWdPcHRpb25zWydkYXRhLXNldHVwJ107XG5cbiAgICBpZiAoaGFzQ2xhc3ModGFnLCAndmpzLWZpbGwnKSkge1xuICAgICAgdGFnT3B0aW9ucy5maWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2xhc3ModGFnLCAndmpzLWZsdWlkJykpIHtcbiAgICAgIHRhZ09wdGlvbnMuZmx1aWQgPSB0cnVlO1xuICAgIH0gLy8gQ2hlY2sgaWYgZGF0YS1zZXR1cCBhdHRyIGV4aXN0cy5cblxuXG4gICAgaWYgKGRhdGFTZXR1cCAhPT0gbnVsbCkge1xuICAgICAgLy8gUGFyc2Ugb3B0aW9ucyBKU09OXG4gICAgICAvLyBJZiBlbXB0eSBzdHJpbmcsIG1ha2UgaXQgYSBwYXJzYWJsZSBqc29uIG9iamVjdC5cbiAgICAgIHZhciBfc2FmZVBhcnNlVHVwbGUgPSBzYWZlUGFyc2VUdXBsZShkYXRhU2V0dXAgfHwgJ3t9JyksXG4gICAgICAgICAgZXJyID0gX3NhZmVQYXJzZVR1cGxlWzBdLFxuICAgICAgICAgIGRhdGEgPSBfc2FmZVBhcnNlVHVwbGVbMV07XG5cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0YWdPcHRpb25zLCBkYXRhKTtcbiAgICB9XG5cbiAgICBhc3NpZ24oYmFzZU9wdGlvbnMsIHRhZ09wdGlvbnMpOyAvLyBHZXQgdGFnIGNoaWxkcmVuIHNldHRpbmdzXG5cbiAgICBpZiAodGFnLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGFnLmNoaWxkTm9kZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOyAvLyBDaGFuZ2UgY2FzZSBuZWVkZWQ6IGh0dHA6Ly9lam9obi5vcmcvYmxvZy9ub2RlbmFtZS1jYXNlLXNlbnNpdGl2aXR5L1xuXG4gICAgICAgIHZhciBjaGlsZE5hbWUgPSBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChjaGlsZE5hbWUgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgYmFzZU9wdGlvbnMuc291cmNlcy5wdXNoKGdldEF0dHJpYnV0ZXMoY2hpbGQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZE5hbWUgPT09ICd0cmFjaycpIHtcbiAgICAgICAgICBiYXNlT3B0aW9ucy50cmFja3MucHVzaChnZXRBdHRyaWJ1dGVzKGNoaWxkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZU9wdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCBmbGV4Ym94IGlzIHN1cHBvcnRlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiAgICAgICAgIC0gdHJ1ZSBpZiBmbGV4Ym94IGlzIHN1cHBvcnRlZFxuICAgKiAgICAgICAgIC0gZmFsc2UgaWYgZmxleGJveCBpcyBub3Qgc3VwcG9ydGVkXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZsZXhOb3RTdXBwb3J0ZWRfID0gZnVuY3Rpb24gZmxleE5vdFN1cHBvcnRlZF8oKSB7XG4gICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7IC8vIE5vdGU6IFdlIGRvbid0IGFjdHVhbGx5IHVzZSBmbGV4QmFzaXMgKG9yIGZsZXhPcmRlciksIGJ1dCBpdCdzIG9uZSBvZiB0aGUgbW9yZVxuICAgIC8vIGNvbW1vbiBmbGV4IGZlYXR1cmVzIHRoYXQgd2UgY2FuIHJlbHkgb24gd2hlbiBjaGVja2luZyBmb3IgZmxleCBzdXBwb3J0LlxuXG4gICAgcmV0dXJuICEoJ2ZsZXhCYXNpcycgaW4gZWxlbS5zdHlsZSB8fCAnd2Via2l0RmxleEJhc2lzJyBpbiBlbGVtLnN0eWxlIHx8ICdtb3pGbGV4QmFzaXMnIGluIGVsZW0uc3R5bGUgfHwgJ21zRmxleEJhc2lzJyBpbiBlbGVtLnN0eWxlIHx8IC8vIElFMTAtc3BlY2lmaWMgKDIwMTIgZmxleCBzcGVjKSwgYXZhaWxhYmxlIGZvciBjb21wbGV0ZW5lc3NcbiAgICAnbXNGbGV4T3JkZXInIGluIGVsZW0uc3R5bGUpO1xuICB9O1xuXG4gIHJldHVybiBQbGF5ZXI7XG59KENvbXBvbmVudCk7XG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFZpZGVvVHJhY2tMaXN0fVxuICogQGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI3ZpZGVvdHJhY2tsaXN0XG4gKlxuICogQHJldHVybiB7VmlkZW9UcmFja0xpc3R9XG4gKiAgICAgICAgIHRoZSBjdXJyZW50IHZpZGVvIHRyYWNrIGxpc3RcbiAqXG4gKiBAbWV0aG9kIFBsYXllci5wcm90b3R5cGUudmlkZW9UcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEF1ZGlvVHJhY2tMaXN0fVxuICogQGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2F1ZGlvdHJhY2tsaXN0XG4gKlxuICogQHJldHVybiB7QXVkaW9UcmFja0xpc3R9XG4gKiAgICAgICAgIHRoZSBjdXJyZW50IGF1ZGlvIHRyYWNrIGxpc3RcbiAqXG4gKiBAbWV0aG9kIFBsYXllci5wcm90b3R5cGUuYXVkaW9UcmFja3NcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFRleHRUcmFja0xpc3R9XG4gKlxuICogQGxpbmsgaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy9kcmFmdHMvaHRtbC9tYXN0ZXIvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjZG9tLW1lZGlhLXRleHR0cmFja3NcbiAqXG4gKiBAcmV0dXJuIHtUZXh0VHJhY2tMaXN0fVxuICogICAgICAgICB0aGUgY3VycmVudCB0ZXh0IHRyYWNrIGxpc3RcbiAqXG4gKiBAbWV0aG9kIFBsYXllci5wcm90b3R5cGUudGV4dFRyYWNrc1xuICovXG5cbi8qKlxuICogR2V0IHRoZSByZW1vdGUge0BsaW5rIFRleHRUcmFja0xpc3R9XG4gKlxuICogQHJldHVybiB7VGV4dFRyYWNrTGlzdH1cbiAqICAgICAgICAgVGhlIGN1cnJlbnQgcmVtb3RlIHRleHQgdHJhY2sgbGlzdFxuICpcbiAqIEBtZXRob2QgUGxheWVyLnByb3RvdHlwZS5yZW1vdGVUZXh0VHJhY2tzXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIHJlbW90ZSB7QGxpbmsgSHRtbFRyYWNrRWxlbWVudExpc3R9IHRyYWNrcy5cbiAqXG4gKiBAcmV0dXJuIHtIdG1sVHJhY2tFbGVtZW50TGlzdH1cbiAqICAgICAgICAgVGhlIGN1cnJlbnQgcmVtb3RlIHRleHQgdHJhY2sgZWxlbWVudCBsaXN0XG4gKlxuICogQG1ldGhvZCBQbGF5ZXIucHJvdG90eXBlLnJlbW90ZVRleHRUcmFja0Vsc1xuICovXG5cblxuQUxMLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHByb3BzID0gQUxMW25hbWVdO1xuXG4gIFBsYXllci5wcm90b3R5cGVbcHJvcHMuZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudGVjaF8pIHtcbiAgICAgIHJldHVybiB0aGlzLnRlY2hfW3Byb3BzLmdldHRlck5hbWVdKCk7XG4gICAgfSAvLyBpZiB3ZSBoYXZlIG5vdCB5ZXQgbG9hZFRlY2hfLCB3ZSBjcmVhdGUge3ZpZGVvLGF1ZGlvLHRleHR9VHJhY2tzX1xuICAgIC8vIHRoZXNlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZWNoIGR1cmluZyBsb2FkaW5nXG5cblxuICAgIHRoaXNbcHJvcHMucHJpdmF0ZU5hbWVdID0gdGhpc1twcm9wcy5wcml2YXRlTmFtZV0gfHwgbmV3IHByb3BzLkxpc3RDbGFzcygpO1xuICAgIHJldHVybiB0aGlzW3Byb3BzLnByaXZhdGVOYW1lXTtcbiAgfTtcbn0pO1xuLyoqXG4gKiBHbG9iYWwgZW51bWVyYXRpb24gb2YgcGxheWVycy5cbiAqXG4gKiBUaGUga2V5cyBhcmUgdGhlIHBsYXllciBJRHMgYW5kIHRoZSB2YWx1ZXMgYXJlIGVpdGhlciB0aGUge0BsaW5rIFBsYXllcn1cbiAqIGluc3RhbmNlIG9yIGBudWxsYCBmb3IgZGlzcG9zZWQgcGxheWVycy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cblBsYXllci5wbGF5ZXJzID0ge307XG52YXIgbmF2aWdhdG9yID0gd2luZG93JDEubmF2aWdhdG9yO1xuLypcbiAqIFBsYXllciBpbnN0YW5jZSBvcHRpb25zLCBzdXJmYWNlZCB1c2luZyBvcHRpb25zXG4gKiBvcHRpb25zID0gUGxheWVyLnByb3RvdHlwZS5vcHRpb25zX1xuICogTWFrZSBjaGFuZ2VzIGluIG9wdGlvbnMsIG5vdCBoZXJlLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cblBsYXllci5wcm90b3R5cGUub3B0aW9uc18gPSB7XG4gIC8vIERlZmF1bHQgb3JkZXIgb2YgZmFsbGJhY2sgdGVjaG5vbG9neVxuICB0ZWNoT3JkZXI6IFRlY2guZGVmYXVsdFRlY2hPcmRlcl8sXG4gIGh0bWw1OiB7fSxcbiAgZmxhc2g6IHt9LFxuICAvLyBkZWZhdWx0IGluYWN0aXZpdHkgdGltZW91dFxuICBpbmFjdGl2aXR5VGltZW91dDogMjAwMCxcbiAgLy8gZGVmYXVsdCBwbGF5YmFjayByYXRlc1xuICBwbGF5YmFja1JhdGVzOiBbXSxcbiAgLy8gQWRkIHBsYXliYWNrIHJhdGUgc2VsZWN0aW9uIGJ5IGFkZGluZyByYXRlc1xuICAvLyAncGxheWJhY2tSYXRlcyc6IFswLjUsIDEsIDEuNSwgMl0sXG4gIGxpdmV1aTogZmFsc2UsXG4gIC8vIEluY2x1ZGVkIGNvbnRyb2wgc2V0c1xuICBjaGlsZHJlbjogWydtZWRpYUxvYWRlcicsICdwb3N0ZXJJbWFnZScsICd0ZXh0VHJhY2tEaXNwbGF5JywgJ2xvYWRpbmdTcGlubmVyJywgJ2JpZ1BsYXlCdXR0b24nLCAnbGl2ZVRyYWNrZXInLCAnY29udHJvbEJhcicsICdlcnJvckRpc3BsYXknLCAndGV4dFRyYWNrU2V0dGluZ3MnLCAncmVzaXplTWFuYWdlciddLFxuICBsYW5ndWFnZTogbmF2aWdhdG9yICYmIChuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgbmF2aWdhdG9yLnVzZXJMYW5ndWFnZSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UpIHx8ICdlbicsXG4gIC8vIGxvY2FsZXMgYW5kIHRoZWlyIGxhbmd1YWdlIHRyYW5zbGF0aW9uc1xuICBsYW5ndWFnZXM6IHt9LFxuICAvLyBEZWZhdWx0IG1lc3NhZ2UgdG8gc2hvdyB3aGVuIGEgdmlkZW8gY2Fubm90IGJlIHBsYXllZC5cbiAgbm90U3VwcG9ydGVkTWVzc2FnZTogJ05vIGNvbXBhdGlibGUgc291cmNlIHdhcyBmb3VuZCBmb3IgdGhpcyBtZWRpYS4nLFxuICBmdWxsc2NyZWVuOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgbmF2aWdhdGlvblVJOiAnaGlkZSdcbiAgICB9XG4gIH0sXG4gIGJyZWFrcG9pbnRzOiB7fSxcbiAgcmVzcG9uc2l2ZTogZmFsc2Vcbn07XG5bXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHBsYXllciBpcyBpbiB0aGUgXCJlbmRlZFwiIHN0YXRlLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhlIHBsYXllciBpcyBpbiB0aGUgZW5kZWQgc3RhdGUsIGZhbHNlIGlmIG5vdC5cbiAqIEBtZXRob2QgUGxheWVyI2VuZGVkXG4gKi9cbidlbmRlZCcsXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHBsYXllciBpcyBpbiB0aGUgXCJzZWVraW5nXCIgc3RhdGUuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGxheWVyIGlzIGluIHRoZSBzZWVraW5nIHN0YXRlLCBmYWxzZSBpZiBub3QuXG4gKiBAbWV0aG9kIFBsYXllciNzZWVraW5nXG4gKi9cbidzZWVraW5nJyxcbi8qKlxuICogUmV0dXJucyB0aGUgVGltZVJhbmdlcyBvZiB0aGUgbWVkaWEgdGhhdCBhcmUgY3VycmVudGx5IGF2YWlsYWJsZVxuICogZm9yIHNlZWtpbmcgdG8uXG4gKlxuICogQHJldHVybiB7VGltZVJhbmdlc30gdGhlIHNlZWthYmxlIGludGVydmFscyBvZiB0aGUgbWVkaWEgdGltZWxpbmVcbiAqIEBtZXRob2QgUGxheWVyI3NlZWthYmxlXG4gKi9cbidzZWVrYWJsZScsXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV0d29yayBhY3Rpdml0eSBmb3IgdGhlIGVsZW1lbnQsIGZyb21cbiAqIHRoZSBjb2RlcyBpbiB0aGUgbGlzdCBiZWxvdy5cbiAqIC0gTkVUV09SS19FTVBUWSAobnVtZXJpYyB2YWx1ZSAwKVxuICogICBUaGUgZWxlbWVudCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpc2VkLiBBbGwgYXR0cmlidXRlcyBhcmUgaW5cbiAqICAgdGhlaXIgaW5pdGlhbCBzdGF0ZXMuXG4gKiAtIE5FVFdPUktfSURMRSAobnVtZXJpYyB2YWx1ZSAxKVxuICogICBUaGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0gaXMgYWN0aXZlIGFuZCBoYXNcbiAqICAgc2VsZWN0ZWQgYSByZXNvdXJjZSwgYnV0IGl0IGlzIG5vdCBhY3R1YWxseSB1c2luZyB0aGUgbmV0d29yayBhdFxuICogICB0aGlzIHRpbWUuXG4gKiAtIE5FVFdPUktfTE9BRElORyAobnVtZXJpYyB2YWx1ZSAyKVxuICogICBUaGUgdXNlciBhZ2VudCBpcyBhY3RpdmVseSB0cnlpbmcgdG8gZG93bmxvYWQgZGF0YS5cbiAqIC0gTkVUV09SS19OT19TT1VSQ0UgKG51bWVyaWMgdmFsdWUgMylcbiAqICAgVGhlIGVsZW1lbnQncyByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGlzIGFjdGl2ZSwgYnV0IGl0IGhhc1xuICogICBub3QgeWV0IGZvdW5kIGEgcmVzb3VyY2UgdG8gdXNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI25ldHdvcmstc3RhdGVzXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjdXJyZW50IG5ldHdvcmsgYWN0aXZpdHkgc3RhdGVcbiAqIEBtZXRob2QgUGxheWVyI25ldHdvcmtTdGF0ZVxuICovXG4nbmV0d29ya1N0YXRlJyxcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIHRoYXQgZXhwcmVzc2VzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBlbGVtZW50XG4gKiB3aXRoIHJlc3BlY3QgdG8gcmVuZGVyaW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLCBmcm9tIHRoZVxuICogY29kZXMgaW4gdGhlIGxpc3QgYmVsb3cuXG4gKiAtIEhBVkVfTk9USElORyAobnVtZXJpYyB2YWx1ZSAwKVxuICogICBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIG1lZGlhIHJlc291cmNlIGlzIGF2YWlsYWJsZS5cbiAqIC0gSEFWRV9NRVRBREFUQSAobnVtZXJpYyB2YWx1ZSAxKVxuICogICBFbm91Z2ggb2YgdGhlIHJlc291cmNlIGhhcyBiZWVuIG9idGFpbmVkIHRoYXQgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogICByZXNvdXJjZSBpcyBhdmFpbGFibGUuXG4gKiAtIEhBVkVfQ1VSUkVOVF9EQVRBIChudW1lcmljIHZhbHVlIDIpXG4gKiAgIERhdGEgZm9yIHRoZSBpbW1lZGlhdGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdmFpbGFibGUuXG4gKiAtIEhBVkVfRlVUVVJFX0RBVEEgKG51bWVyaWMgdmFsdWUgMylcbiAqICAgRGF0YSBmb3IgdGhlIGltbWVkaWF0ZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgYXNcbiAqICAgd2VsbCBhcyBlbm91Z2ggZGF0YSBmb3IgdGhlIHVzZXIgYWdlbnQgdG8gYWR2YW5jZSB0aGUgY3VycmVudFxuICogICBwbGF5YmFjayBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0aW9uIG9mIHBsYXliYWNrLlxuICogLSBIQVZFX0VOT1VHSF9EQVRBIChudW1lcmljIHZhbHVlIDQpXG4gKiAgIFRoZSB1c2VyIGFnZW50IGVzdGltYXRlcyB0aGF0IGVub3VnaCBkYXRhIGlzIGF2YWlsYWJsZSBmb3JcbiAqICAgcGxheWJhY2sgdG8gcHJvY2VlZCB1bmludGVycnVwdGVkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RvbS1tZWRpYS1yZWFkeXN0YXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjdXJyZW50IHBsYXliYWNrIHJlbmRlcmluZyBzdGF0ZVxuICogQG1ldGhvZCBQbGF5ZXIjcmVhZHlTdGF0ZVxuICovXG4ncmVhZHlTdGF0ZSddLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gIFBsYXllci5wcm90b3R5cGVbZm5dID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnRlY2hHZXRfKGZuKTtcbiAgfTtcbn0pO1xuVEVDSF9FVkVOVFNfUkVUUklHR0VSLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gIFBsYXllci5wcm90b3R5cGVbXCJoYW5kbGVUZWNoXCIgKyB0b1RpdGxlQ2FzZShldmVudCkgKyBcIl9cIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihldmVudCk7XG4gIH07XG59KTtcbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgcGxheWVyIGhhcyBpbml0aWFsIGR1cmF0aW9uIGFuZCBkaW1lbnNpb24gaW5mb3JtYXRpb25cbiAqXG4gKiBAZXZlbnQgUGxheWVyI2xvYWRlZG1ldGFkYXRhXG4gKiBAdHlwZSB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gKi9cblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBwbGF5ZXIgaGFzIGRvd25sb2FkZWQgZGF0YSBhdCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvblxuICpcbiAqIEBldmVudCBQbGF5ZXIjbG9hZGVkZGF0YVxuICogQHR5cGUge0V2ZW50VGFyZ2V0fkV2ZW50fVxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBoYXMgY2hhbmdlZCAqXG4gKiBEdXJpbmcgcGxheWJhY2sgdGhpcyBpcyBmaXJlZCBldmVyeSAxNS0yNTAgbWlsbGlzZWNvbmRzLCBkZXBlbmRpbmcgb24gdGhlXG4gKiBwbGF5YmFjayB0ZWNobm9sb2d5IGluIHVzZS5cbiAqXG4gKiBAZXZlbnQgUGxheWVyI3RpbWV1cGRhdGVcbiAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAqL1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIHZvbHVtZSBjaGFuZ2VzXG4gKlxuICogQGV2ZW50IFBsYXllciN2b2x1bWVjaGFuZ2VcbiAqIEB0eXBlIHtFdmVudFRhcmdldH5FdmVudH1cbiAqL1xuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBvciBub3QgYSBwbGF5ZXIgaGFzIGEgcGx1Z2luIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IHJlcG9ydCB3aGV0aGVyIG9yIG5vdCB0aGUgcGx1Z2luIGhhcyBldmVyIGJlZW4gaW5pdGlhbGl6ZWRcbiAqIG9uIHRoaXMgcGxheWVyLiBGb3IgdGhhdCwgW3VzaW5nUGx1Z2luXXtAbGluayBQbGF5ZXIjdXNpbmdQbHVnaW59LlxuICpcbiAqIEBtZXRob2QgUGxheWVyI2hhc1BsdWdpblxuICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxuICogICAgICAgICBUaGUgbmFtZSBvZiBhIHBsdWdpbi5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGlzIHBsYXllciBoYXMgdGhlIHJlcXVlc3RlZCBwbHVnaW4gYXZhaWxhYmxlLlxuICovXG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIG9yIG5vdCBhIHBsYXllciBpcyB1c2luZyBhIHBsdWdpbiBieSBuYW1lLlxuICpcbiAqIEZvciBiYXNpYyBwbHVnaW5zLCB0aGlzIG9ubHkgcmVwb3J0cyB3aGV0aGVyIHRoZSBwbHVnaW4gaGFzIF9ldmVyXyBiZWVuXG4gKiBpbml0aWFsaXplZCBvbiB0aGlzIHBsYXllci5cbiAqXG4gKiBAbWV0aG9kIFBsYXllciN1c2luZ1BsdWdpblxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gKiAgICAgICAgIFRoZSBuYW1lIG9mIGEgcGx1Z2luLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIFdoZXRoZXIgb3Igbm90IHRoaXMgcGxheWVyIGlzIHVzaW5nIHRoZSByZXF1ZXN0ZWQgcGx1Z2luLlxuICovXG5cbkNvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudCgnUGxheWVyJywgUGxheWVyKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBwbHVnaW4gbmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5cbnZhciBCQVNFX1BMVUdJTl9OQU1FID0gJ3BsdWdpbic7XG4vKipcbiAqIFRoZSBrZXkgb24gd2hpY2ggYSBwbGF5ZXIncyBhY3RpdmUgcGx1Z2lucyBjYWNoZSBpcyBzdG9yZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdGFudFxuICogQHR5cGUgICAgIHtzdHJpbmd9XG4gKi9cblxudmFyIFBMVUdJTl9DQUNIRV9LRVkgPSAnYWN0aXZlUGx1Z2luc18nO1xuLyoqXG4gKiBTdG9yZXMgcmVnaXN0ZXJlZCBwbHVnaW5zIGluIGEgcHJpdmF0ZSBzcGFjZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUgICAge09iamVjdH1cbiAqL1xuXG52YXIgcGx1Z2luU3RvcmFnZSA9IHt9O1xuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIGhhcyBiZWVuIHJlZ2lzdGVyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgIFRoZSBuYW1lIG9mIGEgcGx1Z2luLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgcGx1Z2luIGhhcyBiZWVuIHJlZ2lzdGVyZWQuXG4gKi9cblxudmFyIHBsdWdpbkV4aXN0cyA9IGZ1bmN0aW9uIHBsdWdpbkV4aXN0cyhuYW1lKSB7XG4gIHJldHVybiBwbHVnaW5TdG9yYWdlLmhhc093blByb3BlcnR5KG5hbWUpO1xufTtcbi8qKlxuICogR2V0IGEgc2luZ2xlIHJlZ2lzdGVyZWQgcGx1Z2luIGJ5IG5hbWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgIFRoZSBuYW1lIG9mIGEgcGx1Z2luLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufHVuZGVmaW5lZH1cbiAqICAgICAgICAgIFRoZSBwbHVnaW4gKG9yIHVuZGVmaW5lZCkuXG4gKi9cblxuXG52YXIgZ2V0UGx1Z2luID0gZnVuY3Rpb24gZ2V0UGx1Z2luKG5hbWUpIHtcbiAgcmV0dXJuIHBsdWdpbkV4aXN0cyhuYW1lKSA/IHBsdWdpblN0b3JhZ2VbbmFtZV0gOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBNYXJrcyBhIHBsdWdpbiBhcyBcImFjdGl2ZVwiIG9uIGEgcGxheWVyLlxuICpcbiAqIEFsc28sIGVuc3VyZXMgdGhhdCB0aGUgcGxheWVyIGhhcyBhbiBvYmplY3QgZm9yIHRyYWNraW5nIGFjdGl2ZSBwbHVnaW5zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7UGxheWVyfSBwbGF5ZXJcbiAqICAgICAgICAgIEEgVmlkZW8uanMgcGxheWVyIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgIFRoZSBuYW1lIG9mIGEgcGx1Z2luLlxuICovXG5cblxudmFyIG1hcmtQbHVnaW5Bc0FjdGl2ZSA9IGZ1bmN0aW9uIG1hcmtQbHVnaW5Bc0FjdGl2ZShwbGF5ZXIsIG5hbWUpIHtcbiAgcGxheWVyW1BMVUdJTl9DQUNIRV9LRVldID0gcGxheWVyW1BMVUdJTl9DQUNIRV9LRVldIHx8IHt9O1xuICBwbGF5ZXJbUExVR0lOX0NBQ0hFX0tFWV1bbmFtZV0gPSB0cnVlO1xufTtcbi8qKlxuICogVHJpZ2dlcnMgYSBwYWlyIG9mIHBsdWdpbiBzZXR1cCBldmVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1BsYXllcn0gcGxheWVyXG4gKiAgICAgICAgIEEgVmlkZW8uanMgcGxheWVyIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSAge1BsdWdpbn5QbHVnaW5FdmVudEhhc2h9IGhhc2hcbiAqICAgICAgICAgQSBwbHVnaW4gZXZlbnQgaGFzaC5cbiAqXG4gKiBAcGFyYW0gIHtib29sZWFufSBbYmVmb3JlXVxuICogICAgICAgICBJZiB0cnVlLCBwcmVmaXhlcyB0aGUgZXZlbnQgbmFtZSB3aXRoIFwiYmVmb3JlXCIuIEluIG90aGVyIHdvcmRzLFxuICogICAgICAgICB1c2UgdGhpcyB0byB0cmlnZ2VyIFwiYmVmb3JlcGx1Z2luc2V0dXBcIiBpbnN0ZWFkIG9mIFwicGx1Z2luc2V0dXBcIi5cbiAqL1xuXG5cbnZhciB0cmlnZ2VyU2V0dXBFdmVudCA9IGZ1bmN0aW9uIHRyaWdnZXJTZXR1cEV2ZW50KHBsYXllciwgaGFzaCwgYmVmb3JlKSB7XG4gIHZhciBldmVudE5hbWUgPSAoYmVmb3JlID8gJ2JlZm9yZScgOiAnJykgKyAncGx1Z2luc2V0dXAnO1xuICBwbGF5ZXIudHJpZ2dlcihldmVudE5hbWUsIGhhc2gpO1xuICBwbGF5ZXIudHJpZ2dlcihldmVudE5hbWUgKyAnOicgKyBoYXNoLm5hbWUsIGhhc2gpO1xufTtcbi8qKlxuICogVGFrZXMgYSBiYXNpYyBwbHVnaW4gZnVuY3Rpb24gYW5kIHJldHVybnMgYSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIG1hcmtzXG4gKiBvbiB0aGUgcGxheWVyIHRoYXQgdGhlIHBsdWdpbiBoYXMgYmVlbiBhY3RpdmF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtICAge0Z1bmN0aW9ufSBwbHVnaW5cbiAqICAgICAgICAgIFRoZSBiYXNpYyBwbHVnaW4uXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiAgICAgICAgICBBIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBwbHVnaW4uXG4gKi9cblxuXG52YXIgY3JlYXRlQmFzaWNQbHVnaW4gPSBmdW5jdGlvbiBjcmVhdGVCYXNpY1BsdWdpbihuYW1lLCBwbHVnaW4pIHtcbiAgdmFyIGJhc2ljUGx1Z2luV3JhcHBlciA9IGZ1bmN0aW9uIGJhc2ljUGx1Z2luV3JhcHBlcigpIHtcbiAgICAvLyBXZSB0cmlnZ2VyIHRoZSBcImJlZm9yZXBsdWdpbnNldHVwXCIgYW5kIFwicGx1Z2luc2V0dXBcIiBldmVudHMgb24gdGhlIHBsYXllclxuICAgIC8vIHJlZ2FyZGxlc3MsIGJ1dCB3ZSB3YW50IHRoZSBoYXNoIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaGFzaCBwcm92aWRlZFxuICAgIC8vIGZvciBhZHZhbmNlZCBwbHVnaW5zLlxuICAgIC8vXG4gICAgLy8gVGhlIG9ubHkgcG90ZW50aWFsbHkgY291bnRlci1pbnR1aXRpdmUgdGhpbmcgaGVyZSBpcyB0aGUgYGluc3RhbmNlYCBpblxuICAgIC8vIHRoZSBcInBsdWdpbnNldHVwXCIgZXZlbnQgaXMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBgcGx1Z2luYCBmdW5jdGlvbi5cbiAgICB0cmlnZ2VyU2V0dXBFdmVudCh0aGlzLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcGx1Z2luOiBwbHVnaW4sXG4gICAgICBpbnN0YW5jZTogbnVsbFxuICAgIH0sIHRydWUpO1xuICAgIHZhciBpbnN0YW5jZSA9IHBsdWdpbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIG1hcmtQbHVnaW5Bc0FjdGl2ZSh0aGlzLCBuYW1lKTtcbiAgICB0cmlnZ2VyU2V0dXBFdmVudCh0aGlzLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcGx1Z2luOiBwbHVnaW4sXG4gICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgT2JqZWN0LmtleXMocGx1Z2luKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgYmFzaWNQbHVnaW5XcmFwcGVyW3Byb3BdID0gcGx1Z2luW3Byb3BdO1xuICB9KTtcbiAgcmV0dXJuIGJhc2ljUGx1Z2luV3JhcHBlcjtcbn07XG4vKipcbiAqIFRha2VzIGEgcGx1Z2luIHN1Yi1jbGFzcyBhbmQgcmV0dXJucyBhIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmdcbiAqIGluc3RhbmNlcyBvZiBpdC5cbiAqXG4gKiBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gd2lsbCByZXBsYWNlIGl0c2VsZiB3aXRoIGFuIGluc3RhbmNlIG9mIHRoZSByZXF1ZXN0ZWRcbiAqIHN1Yi1jbGFzcyBvZiBQbHVnaW4uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtICAge1BsdWdpbn0gUGx1Z2luU3ViQ2xhc3NcbiAqICAgICAgICAgIFRoZSBhZHZhbmNlZCBwbHVnaW4uXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cblxuXG52YXIgY3JlYXRlUGx1Z2luRmFjdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZVBsdWdpbkZhY3RvcnkobmFtZSwgUGx1Z2luU3ViQ2xhc3MpIHtcbiAgLy8gQWRkIGEgYG5hbWVgIHByb3BlcnR5IHRvIHRoZSBwbHVnaW4gcHJvdG90eXBlIHNvIHRoYXQgZWFjaCBwbHVnaW4gY2FuXG4gIC8vIHJlZmVyIHRvIGl0c2VsZiBieSBuYW1lLlxuICBQbHVnaW5TdWJDbGFzcy5wcm90b3R5cGUubmFtZSA9IG5hbWU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdHJpZ2dlclNldHVwRXZlbnQodGhpcywge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHBsdWdpbjogUGx1Z2luU3ViQ2xhc3MsXG4gICAgICBpbnN0YW5jZTogbnVsbFxuICAgIH0sIHRydWUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBpbnN0YW5jZSA9IF9jb25zdHJ1Y3QoUGx1Z2luU3ViQ2xhc3MsIFt0aGlzXS5jb25jYXQoYXJncykpOyAvLyBUaGUgcGx1Z2luIGlzIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlLlxuXG5cbiAgICB0aGlzW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG5cbiAgICB0cmlnZ2VyU2V0dXBFdmVudCh0aGlzLCBpbnN0YW5jZS5nZXRFdmVudEhhc2goKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufTtcbi8qKlxuICogUGFyZW50IGNsYXNzIGZvciBhbGwgYWR2YW5jZWQgcGx1Z2lucy5cbiAqXG4gKiBAbWl4ZXMgICBtb2R1bGU6ZXZlbnRlZH5FdmVudGVkTWl4aW5cbiAqIEBtaXhlcyAgIG1vZHVsZTpzdGF0ZWZ1bH5TdGF0ZWZ1bE1peGluXG4gKiBAZmlyZXMgICBQbGF5ZXIjYmVmb3JlcGx1Z2luc2V0dXBcbiAqIEBmaXJlcyAgIFBsYXllciNiZWZvcmVwbHVnaW5zZXR1cDokbmFtZVxuICogQGZpcmVzICAgUGxheWVyI3BsdWdpbnNldHVwXG4gKiBAZmlyZXMgICBQbGF5ZXIjcGx1Z2luc2V0dXA6JG5hbWVcbiAqIEBsaXN0ZW5zIFBsYXllciNkaXNwb3NlXG4gKiBAdGhyb3dzICB7RXJyb3J9XG4gKiAgICAgICAgICBJZiBhdHRlbXB0aW5nIHRvIGluc3RhbnRpYXRlIHRoZSBiYXNlIHtAbGluayBQbHVnaW59IGNsYXNzXG4gKiAgICAgICAgICBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYSBhIHN1Yi1jbGFzcy5cbiAqL1xuXG5cbnZhciBQbHVnaW4gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKlxuICAgKiBTdWItY2xhc3NlcyBzaG91bGQgY2FsbCBgc3VwZXJgIHRvIGVuc3VyZSBwbHVnaW5zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC5cbiAgICpcbiAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllclxuICAgKiAgICAgICAgQSBWaWRlby5qcyBwbGF5ZXIgaW5zdGFuY2UuXG4gICAqL1xuICBmdW5jdGlvbiBQbHVnaW4ocGxheWVyKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFBsdWdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW4gbXVzdCBiZSBzdWItY2xhc3NlZDsgbm90IGRpcmVjdGx5IGluc3RhbnRpYXRlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXllciA9IHBsYXllcjsgLy8gTWFrZSB0aGlzIG9iamVjdCBldmVudGVkLCBidXQgcmVtb3ZlIHRoZSBhZGRlZCBgdHJpZ2dlcmAgbWV0aG9kIHNvIHdlXG4gICAgLy8gdXNlIHRoZSBwcm90b3R5cGUgdmVyc2lvbiBpbnN0ZWFkLlxuXG4gICAgZXZlbnRlZCh0aGlzKTtcbiAgICBkZWxldGUgdGhpcy50cmlnZ2VyO1xuICAgIHN0YXRlZnVsKHRoaXMsIHRoaXMuY29uc3RydWN0b3IuZGVmYXVsdFN0YXRlKTtcbiAgICBtYXJrUGx1Z2luQXNBY3RpdmUocGxheWVyLCB0aGlzLm5hbWUpOyAvLyBBdXRvLWJpbmQgdGhlIGRpc3Bvc2UgbWV0aG9kIHNvIHdlIGNhbiB1c2UgaXQgYXMgYSBsaXN0ZW5lciBhbmQgdW5iaW5kXG4gICAgLy8gaXQgbGF0ZXIgZWFzaWx5LlxuXG4gICAgdGhpcy5kaXNwb3NlID0gYmluZCh0aGlzLCB0aGlzLmRpc3Bvc2UpOyAvLyBJZiB0aGUgcGxheWVyIGlzIGRpc3Bvc2VkLCBkaXNwb3NlIHRoZSBwbHVnaW4uXG5cbiAgICBwbGF5ZXIub24oJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiB0aGF0IHdhcyBzZXQgb24gPHBsdWdpbk5hbWU+LlZFUlNJT05cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGx1Z2luLnByb3RvdHlwZTtcblxuICBfcHJvdG8udmVyc2lvbiA9IGZ1bmN0aW9uIHZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuVkVSU0lPTjtcbiAgfVxuICAvKipcbiAgICogRWFjaCBldmVudCB0cmlnZ2VyZWQgYnkgcGx1Z2lucyBpbmNsdWRlcyBhIGhhc2ggb2YgYWRkaXRpb25hbCBkYXRhIHdpdGhcbiAgICogY29udmVudGlvbmFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIFRoaXMgcmV0dXJucyB0aGF0IG9iamVjdCBvciBtdXRhdGVzIGFuIGV4aXN0aW5nIGhhc2guXG4gICAqXG4gICAqIEBwYXJhbSAgIHtPYmplY3R9IFtoYXNoPXt9XVxuICAgKiAgICAgICAgICBBbiBvYmplY3QgdG8gYmUgdXNlZCBhcyBldmVudCBhbiBldmVudCBoYXNoLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQbHVnaW5+UGx1Z2luRXZlbnRIYXNofVxuICAgKiAgICAgICAgICBBbiBldmVudCBoYXNoIG9iamVjdCB3aXRoIHByb3ZpZGVkIHByb3BlcnRpZXMgbWl4ZWQtaW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldEV2ZW50SGFzaCA9IGZ1bmN0aW9uIGdldEV2ZW50SGFzaChoYXNoKSB7XG4gICAgaWYgKGhhc2ggPT09IHZvaWQgMCkge1xuICAgICAgaGFzaCA9IHt9O1xuICAgIH1cblxuICAgIGhhc2gubmFtZSA9IHRoaXMubmFtZTtcbiAgICBoYXNoLnBsdWdpbiA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgaGFzaC5pbnN0YW5jZSA9IHRoaXM7XG4gICAgcmV0dXJuIGhhc2g7XG4gIH1cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGFuIGV2ZW50IG9uIHRoZSBwbHVnaW4gb2JqZWN0IGFuZCBvdmVycmlkZXNcbiAgICoge0BsaW5rIG1vZHVsZTpldmVudGVkfkV2ZW50ZWRNaXhpbi50cmlnZ2VyfEV2ZW50ZWRNaXhpbi50cmlnZ2VyfS5cbiAgICpcbiAgICogQHBhcmFtICAge3N0cmluZ3xPYmplY3R9IGV2ZW50XG4gICAqICAgICAgICAgIEFuIGV2ZW50IHR5cGUgb3IgYW4gb2JqZWN0IHdpdGggYSB0eXBlIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gICB7T2JqZWN0fSBbaGFzaD17fV1cbiAgICogICAgICAgICAgQWRkaXRpb25hbCBkYXRhIGhhc2ggdG8gbWVyZ2Ugd2l0aCBhXG4gICAqICAgICAgICAgIHtAbGluayBQbHVnaW5+UGx1Z2luRXZlbnRIYXNofFBsdWdpbkV2ZW50SGFzaH0uXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgIFdoZXRoZXIgb3Igbm90IGRlZmF1bHQgd2FzIHByZXZlbnRlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udHJpZ2dlciA9IGZ1bmN0aW9uIHRyaWdnZXIkMShldmVudCwgaGFzaCkge1xuICAgIGlmIChoYXNoID09PSB2b2lkIDApIHtcbiAgICAgIGhhc2ggPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlcih0aGlzLmV2ZW50QnVzRWxfLCBldmVudCwgdGhpcy5nZXRFdmVudEhhc2goaGFzaCkpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGVzIFwic3RhdGVjaGFuZ2VkXCIgZXZlbnRzIG9uIHRoZSBwbHVnaW4uIE5vLW9wIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIGJ5XG4gICAqIHN1YmNsYXNzaW5nLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtICAgIHtFdmVudH0gZVxuICAgKiAgICAgICAgICAgQW4gZXZlbnQgb2JqZWN0IHByb3ZpZGVkIGJ5IGEgXCJzdGF0ZWNoYW5nZWRcIiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtICAgIHtPYmplY3R9IGUuY2hhbmdlc1xuICAgKiAgICAgICAgICAgQW4gb2JqZWN0IGRlc2NyaWJpbmcgY2hhbmdlcyB0aGF0IG9jY3VycmVkIHdpdGggdGhlIFwic3RhdGVjaGFuZ2VkXCJcbiAgICogICAgICAgICAgIGV2ZW50LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYW5kbGVTdGF0ZUNoYW5nZWQgPSBmdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZWQoZSkge31cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGEgcGx1Z2luLlxuICAgKlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIGlmIHRoZXkgd2FudCwgYnV0IGZvciB0aGUgc2FrZSBvZiBzYWZldHksXG4gICAqIGl0J3MgcHJvYmFibHkgYmVzdCB0byBzdWJzY3JpYmUgdGhlIFwiZGlzcG9zZVwiIGV2ZW50LlxuICAgKlxuICAgKiBAZmlyZXMgUGx1Z2luI2Rpc3Bvc2VcbiAgICovXG4gIDtcblxuICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLm5hbWUsXG4gICAgICAgIHBsYXllciA9IHRoaXMucGxheWVyO1xuICAgIC8qKlxuICAgICAqIFNpZ25hbHMgdGhhdCBhIGFkdmFuY2VkIHBsdWdpbiBpcyBhYm91dCB0byBiZSBkaXNwb3NlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBQbHVnaW4jZGlzcG9zZVxuICAgICAqIEB0eXBlICB7RXZlbnRUYXJnZXR+RXZlbnR9XG4gICAgICovXG5cbiAgICB0aGlzLnRyaWdnZXIoJ2Rpc3Bvc2UnKTtcbiAgICB0aGlzLm9mZigpO1xuICAgIHBsYXllci5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UpOyAvLyBFbGltaW5hdGUgYW55IHBvc3NpYmxlIHNvdXJjZXMgb2YgbGVha2luZyBtZW1vcnkgYnkgY2xlYXJpbmcgdXBcbiAgICAvLyByZWZlcmVuY2VzIGJldHdlZW4gdGhlIHBsYXllciBhbmQgdGhlIHBsdWdpbiBpbnN0YW5jZSBhbmQgbnVsbGluZyBvdXRcbiAgICAvLyB0aGUgcGx1Z2luJ3Mgc3RhdGUgYW5kIHJlcGxhY2luZyBtZXRob2RzIHdpdGggYSBmdW5jdGlvbiB0aGF0IHRocm93cy5cblxuICAgIHBsYXllcltQTFVHSU5fQ0FDSEVfS0VZXVtuYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMucGxheWVyID0gdGhpcy5zdGF0ZSA9IG51bGw7IC8vIEZpbmFsbHksIHJlcGxhY2UgdGhlIHBsdWdpbiBuYW1lIG9uIHRoZSBwbGF5ZXIgd2l0aCBhIG5ldyBmYWN0b3J5XG4gICAgLy8gZnVuY3Rpb24sIHNvIHRoYXQgdGhlIHBsdWdpbiBpcyByZWFkeSB0byBiZSBzZXQgdXAgYWdhaW4uXG5cbiAgICBwbGF5ZXJbbmFtZV0gPSBjcmVhdGVQbHVnaW5GYWN0b3J5KG5hbWUsIHBsdWdpblN0b3JhZ2VbbmFtZV0pO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgcGx1Z2luIGlzIGEgYmFzaWMgcGx1Z2luIChpLmUuIG5vdCBhIHN1Yi1jbGFzcyBvZiBgUGx1Z2luYCkuXG4gICAqXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd8RnVuY3Rpb259IHBsdWdpblxuICAgKiAgICAgICAgICBJZiBhIHN0cmluZywgbWF0Y2hlcyB0aGUgbmFtZSBvZiBhIHBsdWdpbi4gSWYgYSBmdW5jdGlvbiwgd2lsbCBiZVxuICAgKiAgICAgICAgICB0ZXN0ZWQgZGlyZWN0bHkuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqICAgICAgICAgIFdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIGlzIGEgYmFzaWMgcGx1Z2luLlxuICAgKi9cbiAgO1xuXG4gIFBsdWdpbi5pc0Jhc2ljID0gZnVuY3Rpb24gaXNCYXNpYyhwbHVnaW4pIHtcbiAgICB2YXIgcCA9IHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnID8gZ2V0UGx1Z2luKHBsdWdpbikgOiBwbHVnaW47XG4gICAgcmV0dXJuIHR5cGVvZiBwID09PSAnZnVuY3Rpb24nICYmICFQbHVnaW4ucHJvdG90eXBlLmlzUHJvdG90eXBlT2YocC5wcm90b3R5cGUpO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIFZpZGVvLmpzIHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRvIGJlIHJlZ2lzdGVyZWQuIE11c3QgYmUgYSBzdHJpbmcgYW5kXG4gICAqICAgICAgICAgIG11c3Qgbm90IG1hdGNoIGFuIGV4aXN0aW5nIHBsdWdpbiBvciBhIG1ldGhvZCBvbiB0aGUgYFBsYXllcmBcbiAgICogICAgICAgICAgcHJvdG90eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gICB7RnVuY3Rpb259IHBsdWdpblxuICAgKiAgICAgICAgICBBIHN1Yi1jbGFzcyBvZiBgUGx1Z2luYCBvciBhIGZ1bmN0aW9uIGZvciBiYXNpYyBwbHVnaW5zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICogICAgICAgICAgRm9yIGFkdmFuY2VkIHBsdWdpbnMsIGEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhhdCBwbHVnaW4uIEZvclxuICAgKiAgICAgICAgICBiYXNpYyBwbHVnaW5zLCBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgO1xuXG4gIFBsdWdpbi5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbikge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgcGx1Z2luIG5hbWUsIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIG11c3QgYmUgYSBzdHJpbmcsIHdhcyBcIiArIHR5cGVvZiBuYW1lICsgXCIuXCIpO1xuICAgIH1cblxuICAgIGlmIChwbHVnaW5FeGlzdHMobmFtZSkpIHtcbiAgICAgIGxvZy53YXJuKFwiQSBwbHVnaW4gbmFtZWQgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBhbHJlYWR5IGV4aXN0cy4gWW91IG1heSB3YW50IHRvIGF2b2lkIHJlLXJlZ2lzdGVyaW5nIHBsdWdpbnMhXCIpO1xuICAgIH0gZWxzZSBpZiAoUGxheWVyLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBwbHVnaW4gbmFtZSwgXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgY2Fubm90IHNoYXJlIGEgbmFtZSB3aXRoIGFuIGV4aXN0aW5nIHBsYXllciBtZXRob2QhXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGx1Z2luICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIHBsdWdpbiBmb3IgXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgbXVzdCBiZSBhIGZ1bmN0aW9uLCB3YXMgXCIgKyB0eXBlb2YgcGx1Z2luICsgXCIuXCIpO1xuICAgIH1cblxuICAgIHBsdWdpblN0b3JhZ2VbbmFtZV0gPSBwbHVnaW47IC8vIEFkZCBhIHBsYXllciBwcm90b3R5cGUgbWV0aG9kIGZvciBhbGwgc3ViLWNsYXNzZWQgcGx1Z2lucyAoYnV0IG5vdCBmb3JcbiAgICAvLyB0aGUgYmFzZSBQbHVnaW4gY2xhc3MpLlxuXG4gICAgaWYgKG5hbWUgIT09IEJBU0VfUExVR0lOX05BTUUpIHtcbiAgICAgIGlmIChQbHVnaW4uaXNCYXNpYyhwbHVnaW4pKSB7XG4gICAgICAgIFBsYXllci5wcm90b3R5cGVbbmFtZV0gPSBjcmVhdGVCYXNpY1BsdWdpbihuYW1lLCBwbHVnaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUGxheWVyLnByb3RvdHlwZVtuYW1lXSA9IGNyZWF0ZVBsdWdpbkZhY3RvcnkobmFtZSwgcGx1Z2luKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGx1Z2luO1xuICB9XG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlciBhIFZpZGVvLmpzIHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAqICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0byBiZSBkZS1yZWdpc3RlcmVkLiBNdXN0IGJlIGEgc3RyaW5nIHRoYXRcbiAgICogICAgICAgICBtYXRjaGVzIGFuIGV4aXN0aW5nIHBsdWdpbi5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqICAgICAgICAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlLXJlZ2lzdGVyIHRoZSBiYXNlIHBsdWdpbi5cbiAgICovXG4gIDtcblxuICBQbHVnaW4uZGVyZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uIGRlcmVnaXN0ZXJQbHVnaW4obmFtZSkge1xuICAgIGlmIChuYW1lID09PSBCQVNFX1BMVUdJTl9OQU1FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZS1yZWdpc3RlciBiYXNlIHBsdWdpbi4nKTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2luRXhpc3RzKG5hbWUpKSB7XG4gICAgICBkZWxldGUgcGx1Z2luU3RvcmFnZVtuYW1lXTtcbiAgICAgIGRlbGV0ZSBQbGF5ZXIucHJvdG90eXBlW25hbWVdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBvYmplY3QgY29udGFpbmluZyBtdWx0aXBsZSBWaWRlby5qcyBwbHVnaW5zLlxuICAgKlxuICAgKiBAcGFyYW0gICB7QXJyYXl9IFtuYW1lc11cbiAgICogICAgICAgICAgSWYgcHJvdmlkZWQsIHNob3VsZCBiZSBhbiBhcnJheSBvZiBwbHVnaW4gbmFtZXMuIERlZmF1bHRzIHRvIF9hbGxfXG4gICAqICAgICAgICAgIHBsdWdpbiBuYW1lcy5cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fHVuZGVmaW5lZH1cbiAgICogICAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgcGx1Z2luKHMpIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBuYW1lKHMpIG9yXG4gICAqICAgICAgICAgIGB1bmRlZmluZWRgIGlmIG5vIG1hdGNoaW5nIHBsdWdpbnMgZXhpc3QpLlxuICAgKi9cbiAgO1xuXG4gIFBsdWdpbi5nZXRQbHVnaW5zID0gZnVuY3Rpb24gZ2V0UGx1Z2lucyhuYW1lcykge1xuICAgIGlmIChuYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHBsdWdpblN0b3JhZ2UpO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG4gICAgbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHBsdWdpbiA9IGdldFBsdWdpbihuYW1lKTtcblxuICAgICAgaWYgKHBsdWdpbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdFtuYW1lXSA9IHBsdWdpbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGEgcGx1Z2luJ3MgdmVyc2lvbiwgaWYgYXZhaWxhYmxlXG4gICAqXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAgICogICAgICAgICAgVGhlIG5hbWUgb2YgYSBwbHVnaW4uXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogICAgICAgICAgVGhlIHBsdWdpbidzIHZlcnNpb24gb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKi9cbiAgO1xuXG4gIFBsdWdpbi5nZXRQbHVnaW5WZXJzaW9uID0gZnVuY3Rpb24gZ2V0UGx1Z2luVmVyc2lvbihuYW1lKSB7XG4gICAgdmFyIHBsdWdpbiA9IGdldFBsdWdpbihuYW1lKTtcbiAgICByZXR1cm4gcGx1Z2luICYmIHBsdWdpbi5WRVJTSU9OIHx8ICcnO1xuICB9O1xuXG4gIHJldHVybiBQbHVnaW47XG59KCk7XG4vKipcbiAqIEdldHMgYSBwbHVnaW4gYnkgbmFtZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1ldGhvZCAgIGdldFBsdWdpblxuICogQG1lbWJlck9mIFBsdWdpblxuICogQHBhcmFtICAgIHtzdHJpbmd9IG5hbWVcbiAqICAgICAgICAgICBUaGUgbmFtZSBvZiBhIHBsdWdpbi5cbiAqXG4gKiBAcmV0dXJucyAge0Z1bmN0aW9ufHVuZGVmaW5lZH1cbiAqICAgICAgICAgICBUaGUgcGx1Z2luIChvciBgdW5kZWZpbmVkYCkuXG4gKi9cblxuXG5QbHVnaW4uZ2V0UGx1Z2luID0gZ2V0UGx1Z2luO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgYmFzZSBwbHVnaW4gY2xhc3MgYXMgaXQgaXMgcmVnaXN0ZXJlZC5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5cblBsdWdpbi5CQVNFX1BMVUdJTl9OQU1FID0gQkFTRV9QTFVHSU5fTkFNRTtcblBsdWdpbi5yZWdpc3RlclBsdWdpbihCQVNFX1BMVUdJTl9OQU1FLCBQbHVnaW4pO1xuLyoqXG4gKiBEb2N1bWVudGVkIGluIHBsYXllci5qc1xuICpcbiAqIEBpZ25vcmVcbiAqL1xuXG5QbGF5ZXIucHJvdG90eXBlLnVzaW5nUGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuICEhdGhpc1tQTFVHSU5fQ0FDSEVfS0VZXSAmJiB0aGlzW1BMVUdJTl9DQUNIRV9LRVldW25hbWVdID09PSB0cnVlO1xufTtcbi8qKlxuICogRG9jdW1lbnRlZCBpbiBwbGF5ZXIuanNcbiAqXG4gKiBAaWdub3JlXG4gKi9cblxuXG5QbGF5ZXIucHJvdG90eXBlLmhhc1BsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAhIXBsdWdpbkV4aXN0cyhuYW1lKTtcbn07XG4vKipcbiAqIFNpZ25hbHMgdGhhdCBhIHBsdWdpbiBpcyBhYm91dCB0byBiZSBzZXQgdXAgb24gYSBwbGF5ZXIuXG4gKlxuICogQGV2ZW50ICAgIFBsYXllciNiZWZvcmVwbHVnaW5zZXR1cFxuICogQHR5cGUgICAgIHtQbHVnaW5+UGx1Z2luRXZlbnRIYXNofVxuICovXG5cbi8qKlxuICogU2lnbmFscyB0aGF0IGEgcGx1Z2luIGlzIGFib3V0IHRvIGJlIHNldCB1cCBvbiBhIHBsYXllciAtIGJ5IG5hbWUuIFRoZSBuYW1lXG4gKiBpcyB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLlxuICpcbiAqIEBldmVudCAgICBQbGF5ZXIjYmVmb3JlcGx1Z2luc2V0dXA6JG5hbWVcbiAqIEB0eXBlICAgICB7UGx1Z2luflBsdWdpbkV2ZW50SGFzaH1cbiAqL1xuXG4vKipcbiAqIFNpZ25hbHMgdGhhdCBhIHBsdWdpbiBoYXMganVzdCBiZWVuIHNldCB1cCBvbiBhIHBsYXllci5cbiAqXG4gKiBAZXZlbnQgICAgUGxheWVyI3BsdWdpbnNldHVwXG4gKiBAdHlwZSAgICAge1BsdWdpbn5QbHVnaW5FdmVudEhhc2h9XG4gKi9cblxuLyoqXG4gKiBTaWduYWxzIHRoYXQgYSBwbHVnaW4gaGFzIGp1c3QgYmVlbiBzZXQgdXAgb24gYSBwbGF5ZXIgLSBieSBuYW1lLiBUaGUgbmFtZVxuICogaXMgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5cbiAqXG4gKiBAZXZlbnQgICAgUGxheWVyI3BsdWdpbnNldHVwOiRuYW1lXG4gKiBAdHlwZSAgICAge1BsdWdpbn5QbHVnaW5FdmVudEhhc2h9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiAge09iamVjdH0gUGx1Z2luflBsdWdpbkV2ZW50SGFzaFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YW5jZVxuICogICAgICAgICAgIEZvciBiYXNpYyBwbHVnaW5zLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwbHVnaW4gZnVuY3Rpb24uIEZvclxuICogICAgICAgICAgIGFkdmFuY2VkIHBsdWdpbnMsIHRoZSBwbHVnaW4gaW5zdGFuY2Ugb24gd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKiAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGx1Z2luXG4gKiAgICAgICAgICAgRm9yIGJhc2ljIHBsdWdpbnMsIHRoZSBwbHVnaW4gZnVuY3Rpb24uIEZvciBhZHZhbmNlZCBwbHVnaW5zLCB0aGVcbiAqICAgICAgICAgICBwbHVnaW4gY2xhc3MvY29uc3RydWN0b3IuXG4gKi9cblxuLyoqXG4gKiBAZmlsZSBleHRlbmQuanNcbiAqIEBtb2R1bGUgZXh0ZW5kXG4gKi9cblxuLyoqXG4gKiBBIGNvbWJpbmF0aW9uIG9mIG5vZGUgaW5oZXJpdHMgYW5kIGJhYmVsJ3MgaW5oZXJpdHMgKGFmdGVyIHRyYW5zcGlsZSkuXG4gKiBCb3RoIHdvcmsgdGhlIHNhbWUgYnV0IG5vZGUgYWRkcyBgc3VwZXJfYCB0byB0aGUgc3ViQ2xhc3NcbiAqIGFuZCBCYWJsZSBhZGRzIHRoZSBzdXBlckNsYXNzIGFzIF9fcHJvdG9fXy4gQm90aCBzZWVtIHVzZWZ1bC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3ViQ2xhc3NcbiAqICAgICAgICBUaGUgY2xhc3MgdG8gaW5oZXJpdCB0b1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdXBlckNsYXNzXG4gKiAgICAgICAgVGhlIGNsYXNzIHRvIGluaGVyaXQgZnJvbVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBfaW5oZXJpdHMgPSBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MpIHtcbiAgICAvLyBub2RlXG4gICAgc3ViQ2xhc3Muc3VwZXJfID0gc3VwZXJDbGFzcztcbiAgfVxufTtcbi8qKlxuICogVXNlZCB0byBzdWJjbGFzcyBhbiBleGlzdGluZyBjbGFzcyBieSBlbXVsYXRpbmcgRVMgc3ViY2xhc3NpbmcgdXNpbmcgdGhlXG4gKiBgZXh0ZW5kc2Aga2V5d29yZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgTXlDb21wb25lbnQgPSB2aWRlb2pzLmV4dGVuZCh2aWRlb2pzLmdldENvbXBvbmVudCgnQ29tcG9uZW50JyksIHtcbiAqICAgbXlDdXN0b21NZXRob2Q6IGZ1bmN0aW9uKCkge1xuICogICAgIC8vIERvIHRoaW5ncyBpbiBteSBtZXRob2QuXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBwYXJhbSAgICB7RnVuY3Rpb259IHN1cGVyQ2xhc3NcbiAqICAgICAgICAgICBUaGUgY2xhc3MgdG8gaW5oZXJpdCBmcm9tXG4gKlxuICogQHBhcmFtICAgIHtPYmplY3R9ICAgW3N1YkNsYXNzTWV0aG9kcz17fV1cbiAqICAgICAgICAgICBNZXRob2RzIG9mIHRoZSBuZXcgY2xhc3NcbiAqXG4gKiBAcmV0dXJuICAge0Z1bmN0aW9ufVxuICogICAgICAgICAgIFRoZSBuZXcgY2xhc3Mgd2l0aCBzdWJDbGFzc01ldGhvZHMgdGhhdCBpbmhlcml0ZWQgc3VwZXJDbGFzcy5cbiAqL1xuXG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbiBleHRlbmQoc3VwZXJDbGFzcywgc3ViQ2xhc3NNZXRob2RzKSB7XG4gIGlmIChzdWJDbGFzc01ldGhvZHMgPT09IHZvaWQgMCkge1xuICAgIHN1YkNsYXNzTWV0aG9kcyA9IHt9O1xuICB9XG5cbiAgdmFyIHN1YkNsYXNzID0gZnVuY3Rpb24gc3ViQ2xhc3MoKSB7XG4gICAgc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBtZXRob2RzID0ge307XG5cbiAgaWYgKHR5cGVvZiBzdWJDbGFzc01ldGhvZHMgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHN1YkNsYXNzTWV0aG9kcy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcikge1xuICAgICAgc3ViQ2xhc3MgPSBzdWJDbGFzc01ldGhvZHMuY29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgbWV0aG9kcyA9IHN1YkNsYXNzTWV0aG9kcztcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3ViQ2xhc3NNZXRob2RzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3ViQ2xhc3MgPSBzdWJDbGFzc01ldGhvZHM7XG4gIH1cblxuICBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyAvLyBFeHRlbmQgc3ViT2JqJ3MgcHJvdG90eXBlIHdpdGggZnVuY3Rpb25zIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGZyb20gcHJvcHNcblxuXG4gIGZvciAodmFyIG5hbWUgaW4gbWV0aG9kcykge1xuICAgIGlmIChtZXRob2RzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBzdWJDbGFzcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJDbGFzcztcbn07XG5cbi8qKlxuICogQGZpbGUgdmlkZW8uanNcbiAqIEBtb2R1bGUgdmlkZW9qc1xuICovXG4vKipcbiAqIE5vcm1hbGl6ZSBhbiBgaWRgIHZhbHVlIGJ5IHRyaW1taW5nIG9mZiBhIGxlYWRpbmcgYCNgXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IGlkXG4gKiAgICAgICAgICBBIHN0cmluZywgbWF5YmUgd2l0aCBhIGxlYWRpbmcgYCNgLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqICAgICAgICAgIFRoZSBzdHJpbmcsIHdpdGhvdXQgYW55IGxlYWRpbmcgYCNgLlxuICovXG5cbnZhciBub3JtYWxpemVJZCA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZC5pbmRleE9mKCcjJykgPT09IDAgPyBpZC5zbGljZSgxKSA6IGlkO1xufTtcbi8qKlxuICogVGhlIGB2aWRlb2pzKClgIGZ1bmN0aW9uIGRvdWJsZXMgYXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIHVzZXJzIHRvIGNyZWF0ZSBhXG4gKiB7QGxpbmsgUGxheWVyfSBpbnN0YW5jZSBhcyB3ZWxsIGFzIHRoZSBtYWluIGxpYnJhcnkgbmFtZXNwYWNlLlxuICpcbiAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBnZXR0ZXIgZm9yIGEgcHJlLWV4aXN0aW5nIHtAbGluayBQbGF5ZXJ9IGluc3RhbmNlLlxuICogSG93ZXZlciwgd2UgX3N0cm9uZ2x5XyByZWNvbW1lbmQgdXNpbmcgYHZpZGVvanMuZ2V0UGxheWVyKClgIGZvciB0aGlzXG4gKiBwdXJwb3NlIGJlY2F1c2UgaXQgYXZvaWRzIGFueSBwb3RlbnRpYWwgZm9yIHVuaW50ZW5kZWQgaW5pdGlhbGl6YXRpb24uXG4gKlxuICogRHVlIHRvIFtsaW1pdGF0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL2pzZG9jMy9qc2RvYy9pc3N1ZXMvOTU1I2lzc3VlY29tbWVudC0zMTM4MjkxNDkpXG4gKiBvZiBvdXIgSlNEb2MgdGVtcGxhdGUsIHdlIGNhbm5vdCBwcm9wZXJseSBkb2N1bWVudCB0aGlzIGFzIGJvdGggYSBmdW5jdGlvblxuICogYW5kIGEgbmFtZXNwYWNlLCBzbyBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGRvY3VtZW50ZWQgaGVyZS5cbiAqXG4gKiAjIyMjIEFyZ3VtZW50c1xuICogIyMjIyMgaWRcbiAqIHN0cmluZ3xFbGVtZW50LCAqKnJlcXVpcmVkKipcbiAqXG4gKiBWaWRlbyBlbGVtZW50IG9yIHZpZGVvIGVsZW1lbnQgSUQuXG4gKlxuICogIyMjIyMgb3B0aW9uc1xuICogT2JqZWN0LCBvcHRpb25hbFxuICpcbiAqIE9wdGlvbnMgb2JqZWN0IGZvciBwcm92aWRpbmcgc2V0dGluZ3MuXG4gKiBTZWU6IFtPcHRpb25zIEd1aWRlXShodHRwczovL2RvY3MudmlkZW9qcy5jb20vdHV0b3JpYWwtb3B0aW9ucy5odG1sKS5cbiAqXG4gKiAjIyMjIyByZWFkeVxuICoge0BsaW5rIENvbXBvbmVudH5SZWFkeUNhbGxiYWNrfSwgb3B0aW9uYWxcbiAqXG4gKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB7QGxpbmsgUGxheWVyfSBhbmQge0BsaW5rIFRlY2h9IGFyZSByZWFkeS5cbiAqXG4gKiAjIyMjIFJldHVybiBWYWx1ZVxuICpcbiAqIFRoZSBgdmlkZW9qcygpYCBmdW5jdGlvbiByZXR1cm5zIGEge0BsaW5rIFBsYXllcn0gaW5zdGFuY2UuXG4gKlxuICogQG5hbWVzcGFjZVxuICpcbiAqIEBib3Jyb3dzIEF1ZGlvVHJhY2sgYXMgQXVkaW9UcmFja1xuICogQGJvcnJvd3MgQ29tcG9uZW50LmdldENvbXBvbmVudCBhcyBnZXRDb21wb25lbnRcbiAqIEBib3Jyb3dzIG1vZHVsZTpjb21wdXRlZC1zdHlsZX5jb21wdXRlZFN0eWxlIGFzIGNvbXB1dGVkU3R5bGVcbiAqIEBib3Jyb3dzIG1vZHVsZTpldmVudHMub24gYXMgb25cbiAqIEBib3Jyb3dzIG1vZHVsZTpldmVudHMub25lIGFzIG9uZVxuICogQGJvcnJvd3MgbW9kdWxlOmV2ZW50cy5vZmYgYXMgb2ZmXG4gKiBAYm9ycm93cyBtb2R1bGU6ZXZlbnRzLnRyaWdnZXIgYXMgdHJpZ2dlclxuICogQGJvcnJvd3MgRXZlbnRUYXJnZXQgYXMgRXZlbnRUYXJnZXRcbiAqIEBib3Jyb3dzIG1vZHVsZTpleHRlbmR+ZXh0ZW5kIGFzIGV4dGVuZFxuICogQGJvcnJvd3MgbW9kdWxlOmZuLmJpbmQgYXMgYmluZFxuICogQGJvcnJvd3MgbW9kdWxlOmZvcm1hdC10aW1lLmZvcm1hdFRpbWUgYXMgZm9ybWF0VGltZVxuICogQGJvcnJvd3MgbW9kdWxlOmZvcm1hdC10aW1lLnJlc2V0Rm9ybWF0VGltZSBhcyByZXNldEZvcm1hdFRpbWVcbiAqIEBib3Jyb3dzIG1vZHVsZTpmb3JtYXQtdGltZS5zZXRGb3JtYXRUaW1lIGFzIHNldEZvcm1hdFRpbWVcbiAqIEBib3Jyb3dzIG1vZHVsZTptZXJnZS1vcHRpb25zLm1lcmdlT3B0aW9ucyBhcyBtZXJnZU9wdGlvbnNcbiAqIEBib3Jyb3dzIG1vZHVsZTptaWRkbGV3YXJlLnVzZSBhcyB1c2VcbiAqIEBib3Jyb3dzIFBsYXllci5wbGF5ZXJzIGFzIHBsYXllcnNcbiAqIEBib3Jyb3dzIFBsdWdpbi5yZWdpc3RlclBsdWdpbiBhcyByZWdpc3RlclBsdWdpblxuICogQGJvcnJvd3MgUGx1Z2luLmRlcmVnaXN0ZXJQbHVnaW4gYXMgZGVyZWdpc3RlclBsdWdpblxuICogQGJvcnJvd3MgUGx1Z2luLmdldFBsdWdpbnMgYXMgZ2V0UGx1Z2luc1xuICogQGJvcnJvd3MgUGx1Z2luLmdldFBsdWdpbiBhcyBnZXRQbHVnaW5cbiAqIEBib3Jyb3dzIFBsdWdpbi5nZXRQbHVnaW5WZXJzaW9uIGFzIGdldFBsdWdpblZlcnNpb25cbiAqIEBib3Jyb3dzIFRlY2guZ2V0VGVjaCBhcyBnZXRUZWNoXG4gKiBAYm9ycm93cyBUZWNoLnJlZ2lzdGVyVGVjaCBhcyByZWdpc3RlclRlY2hcbiAqIEBib3Jyb3dzIFRleHRUcmFjayBhcyBUZXh0VHJhY2tcbiAqIEBib3Jyb3dzIG1vZHVsZTp0aW1lLXJhbmdlcy5jcmVhdGVUaW1lUmFuZ2VzIGFzIGNyZWF0ZVRpbWVSYW5nZVxuICogQGJvcnJvd3MgbW9kdWxlOnRpbWUtcmFuZ2VzLmNyZWF0ZVRpbWVSYW5nZXMgYXMgY3JlYXRlVGltZVJhbmdlc1xuICogQGJvcnJvd3MgbW9kdWxlOnVybC5pc0Nyb3NzT3JpZ2luIGFzIGlzQ3Jvc3NPcmlnaW5cbiAqIEBib3Jyb3dzIG1vZHVsZTp1cmwucGFyc2VVcmwgYXMgcGFyc2VVcmxcbiAqIEBib3Jyb3dzIFZpZGVvVHJhY2sgYXMgVmlkZW9UcmFja1xuICpcbiAqIEBwYXJhbSAge3N0cmluZ3xFbGVtZW50fSBpZFxuICogICAgICAgICBWaWRlbyBlbGVtZW50IG9yIHZpZGVvIGVsZW1lbnQgSUQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cbiAqICAgICAgICAgT3B0aW9ucyBvYmplY3QgZm9yIHByb3ZpZGluZyBzZXR0aW5ncy5cbiAqICAgICAgICAgU2VlOiBbT3B0aW9ucyBHdWlkZV0oaHR0cHM6Ly9kb2NzLnZpZGVvanMuY29tL3R1dG9yaWFsLW9wdGlvbnMuaHRtbCkuXG4gKlxuICogQHBhcmFtICB7Q29tcG9uZW50flJlYWR5Q2FsbGJhY2t9IFtyZWFkeV1cbiAqICAgICAgICAgQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUge0BsaW5rIFBsYXllcn0gYW5kIHtAbGluayBUZWNofSBhcmVcbiAqICAgICAgICAgcmVhZHkuXG4gKlxuICogQHJldHVybiB7UGxheWVyfVxuICogICAgICAgICBUaGUgYHZpZGVvanMoKWAgZnVuY3Rpb24gcmV0dXJucyBhIHtAbGluayBQbGF5ZXJ8UGxheWVyfSBpbnN0YW5jZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZpZGVvanMkMShpZCwgb3B0aW9ucywgcmVhZHkpIHtcbiAgdmFyIHBsYXllciA9IHZpZGVvanMkMS5nZXRQbGF5ZXIoaWQpO1xuXG4gIGlmIChwbGF5ZXIpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgbG9nLndhcm4oXCJQbGF5ZXIgXFxcIlwiICsgaWQgKyBcIlxcXCIgaXMgYWxyZWFkeSBpbml0aWFsaXNlZC4gT3B0aW9ucyB3aWxsIG5vdCBiZSBhcHBsaWVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAocmVhZHkpIHtcbiAgICAgIHBsYXllci5yZWFkeShyZWFkeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXllcjtcbiAgfVxuXG4gIHZhciBlbCA9IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgPyAkKCcjJyArIG5vcm1hbGl6ZUlkKGlkKSkgOiBpZDtcblxuICBpZiAoIWlzRWwoZWwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGVsZW1lbnQgb3IgSUQgc3VwcGxpZWQgaXMgbm90IHZhbGlkLiAodmlkZW9qcyknKTtcbiAgfSAvLyBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSB3aWxsIG9ubHkgY2hlY2sgaWYgZWwgaXMgY29udGFpbmVkIHdpdGhpbiB0aGF0IG9uZSBkb2N1bWVudC5cbiAgLy8gVGhpcyBjYXVzZXMgcHJvYmxlbXMgZm9yIGVsZW1lbnRzIGluIGlmcmFtZXMuXG4gIC8vIEluc3RlYWQsIHVzZSB0aGUgZWxlbWVudCdzIG93bmVyRG9jdW1lbnQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGRvY3VtZW50LlxuICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnQgaXMgaW5kZWVkIGluIHRoZSBkb20gb2YgdGhhdCBkb2N1bWVudC5cbiAgLy8gQWRkaXRpb25hbGx5LCBjaGVjayB0aGF0IHRoZSBkb2N1bWVudCBpbiBxdWVzdGlvbiBoYXMgYSBkZWZhdWx0IHZpZXcuXG4gIC8vIElmIHRoZSBkb2N1bWVudCBpcyBubyBsb25nZXIgYXR0YWNoZWQgdG8gdGhlIGRvbSwgdGhlIGRlZmF1bHRWaWV3IG9mIHRoZSBkb2N1bWVudCB3aWxsIGJlIG51bGwuXG5cblxuICBpZiAoIWVsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgIWVsLm93bmVyRG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkpIHtcbiAgICBsb2cud2FybignVGhlIGVsZW1lbnQgc3VwcGxpZWQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBET00nKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2aWRlb2pzJDEuaG9va3MoJ2JlZm9yZXNldHVwJykuZm9yRWFjaChmdW5jdGlvbiAoaG9va0Z1bmN0aW9uKSB7XG4gICAgdmFyIG9wdHMgPSBob29rRnVuY3Rpb24oZWwsIG1lcmdlT3B0aW9ucyhvcHRpb25zKSk7XG5cbiAgICBpZiAoIWlzT2JqZWN0KG9wdHMpIHx8IEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgIGxvZy5lcnJvcigncGxlYXNlIHJldHVybiBhbiBvYmplY3QgaW4gYmVmb3Jlc2V0dXAgaG9va3MnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMsIG9wdHMpO1xuICB9KTsgLy8gV2UgZ2V0IHRoZSBjdXJyZW50IFwiUGxheWVyXCIgY29tcG9uZW50IGhlcmUgaW4gY2FzZSBhbiBpbnRlZ3JhdGlvbiBoYXNcbiAgLy8gcmVwbGFjZWQgaXQgd2l0aCBhIGN1c3RvbSBwbGF5ZXIuXG5cbiAgdmFyIFBsYXllckNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRDb21wb25lbnQoJ1BsYXllcicpO1xuICBwbGF5ZXIgPSBuZXcgUGxheWVyQ29tcG9uZW50KGVsLCBvcHRpb25zLCByZWFkeSk7XG4gIHZpZGVvanMkMS5ob29rcygnc2V0dXAnKS5mb3JFYWNoKGZ1bmN0aW9uIChob29rRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gaG9va0Z1bmN0aW9uKHBsYXllcik7XG4gIH0pO1xuICByZXR1cm4gcGxheWVyO1xufVxuLyoqXG4gKiBBbiBPYmplY3QgdGhhdCBjb250YWlucyBsaWZlY3ljbGUgaG9va3MgYXMga2V5cyB3aGljaCBwb2ludCB0byBhbiBhcnJheVxuICogb2YgZnVuY3Rpb25zIHRoYXQgYXJlIHJ1biB3aGVuIGEgbGlmZWN5Y2xlIGlzIHRyaWdnZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG52aWRlb2pzJDEuaG9va3NfID0ge307XG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgaG9va3MgZm9yIGEgc3BlY2lmaWMgbGlmZWN5Y2xlXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKiAgICAgICAgIHRoZSBsaWZlY3lsZSB0byBnZXQgaG9va3MgZnJvbVxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufEZ1bmN0aW9uW119IFtmbl1cbiAqICAgICAgICAgT3B0aW9uYWxseSBhZGQgYSBob29rIChvciBob29rcykgdG8gdGhlIGxpZmVjeWNsZSB0aGF0IHlvdXIgYXJlIGdldHRpbmcuXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKiAgICAgICAgIGFuIGFycmF5IG9mIGhvb2tzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSBhcmUgbm9uZS5cbiAqL1xuXG52aWRlb2pzJDEuaG9va3MgPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgdmlkZW9qcyQxLmhvb2tzX1t0eXBlXSA9IHZpZGVvanMkMS5ob29rc19bdHlwZV0gfHwgW107XG5cbiAgaWYgKGZuKSB7XG4gICAgdmlkZW9qcyQxLmhvb2tzX1t0eXBlXSA9IHZpZGVvanMkMS5ob29rc19bdHlwZV0uY29uY2F0KGZuKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlb2pzJDEuaG9va3NfW3R5cGVdO1xufTtcbi8qKlxuICogQWRkIGEgZnVuY3Rpb24gaG9vayB0byBhIHNwZWNpZmljIHZpZGVvanMgbGlmZWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiAgICAgICAgdGhlIGxpZmVjeWNsZSB0byBob29rIHRoZSBmdW5jdGlvbiB0by5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEZ1bmN0aW9uW119XG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIG9yIGFycmF5IG9mIGZ1bmN0aW9ucyB0byBhdHRhY2guXG4gKi9cblxuXG52aWRlb2pzJDEuaG9vayA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICB2aWRlb2pzJDEuaG9va3ModHlwZSwgZm4pO1xufTtcbi8qKlxuICogQWRkIGEgZnVuY3Rpb24gaG9vayB0aGF0IHdpbGwgb25seSBydW4gb25jZSB0byBhIHNwZWNpZmljIHZpZGVvanMgbGlmZWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiAgICAgICAgdGhlIGxpZmVjeWNsZSB0byBob29rIHRoZSBmdW5jdGlvbiB0by5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEZ1bmN0aW9uW119XG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIG9yIGFycmF5IG9mIGZ1bmN0aW9ucyB0byBhdHRhY2guXG4gKi9cblxuXG52aWRlb2pzJDEuaG9va09uY2UgPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgdmlkZW9qcyQxLmhvb2tzKHR5cGUsIFtdLmNvbmNhdChmbikubWFwKGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZpZGVvanMkMS5yZW1vdmVIb29rKHR5cGUsIHdyYXBwZXIpO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH0pKTtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGhvb2sgZnJvbSBhIHNwZWNpZmljIHZpZGVvanMgbGlmZWN5Y2xlLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZVxuICogICAgICAgICB0aGUgbGlmZWN5Y2xlIHRoYXQgdGhlIGZ1bmN0aW9uIGhvb2tlZCB0b1xuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogICAgICAgICBUaGUgaG9va2VkIGZ1bmN0aW9uIHRvIHJlbW92ZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiAgICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IHdhcyByZW1vdmVkIG9yIHVuZGVmXG4gKi9cblxuXG52aWRlb2pzJDEucmVtb3ZlSG9vayA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICB2YXIgaW5kZXggPSB2aWRlb2pzJDEuaG9va3ModHlwZSkuaW5kZXhPZihmbik7XG5cbiAgaWYgKGluZGV4IDw9IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmlkZW9qcyQxLmhvb2tzX1t0eXBlXSA9IHZpZGVvanMkMS5ob29rc19bdHlwZV0uc2xpY2UoKTtcbiAgdmlkZW9qcyQxLmhvb2tzX1t0eXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuICByZXR1cm4gdHJ1ZTtcbn07IC8vIEFkZCBkZWZhdWx0IHN0eWxlc1xuXG5cbmlmICh3aW5kb3ckMS5WSURFT0pTX05PX0RZTkFNSUNfU1RZTEUgIT09IHRydWUgJiYgaXNSZWFsKCkpIHtcbiAgdmFyIHN0eWxlID0gJCgnLnZqcy1zdHlsZXMtZGVmYXVsdHMnKTtcblxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQoJ3Zqcy1zdHlsZXMtZGVmYXVsdHMnKTtcbiAgICB2YXIgaGVhZCA9ICQoJ2hlYWQnKTtcblxuICAgIGlmIChoZWFkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzZXRUZXh0Q29udGVudChzdHlsZSwgXCJcXG4gICAgICAudmlkZW8tanMge1xcbiAgICAgICAgd2lkdGg6IDMwMHB4O1xcbiAgICAgICAgaGVpZ2h0OiAxNTBweDtcXG4gICAgICB9XFxuXFxuICAgICAgLnZqcy1mbHVpZCB7XFxuICAgICAgICBwYWRkaW5nLXRvcDogNTYuMjUlXFxuICAgICAgfVxcbiAgICBcIik7XG4gIH1cbn0gLy8gUnVuIEF1dG8tbG9hZCBwbGF5ZXJzXG4vLyBZb3UgaGF2ZSB0byB3YWl0IGF0IGxlYXN0IG9uY2UgaW4gY2FzZSB0aGlzIHNjcmlwdCBpcyBsb2FkZWQgYWZ0ZXIgeW91clxuLy8gdmlkZW8gaW4gdGhlIERPTSAod2VpcmQgYmVoYXZpb3Igb25seSB3aXRoIG1pbmlmaWVkIHZlcnNpb24pXG5cblxuYXV0b1NldHVwVGltZW91dCgxLCB2aWRlb2pzJDEpO1xuLyoqXG4gKiBDdXJyZW50IFZpZGVvLmpzIHZlcnNpb24uIEZvbGxvd3MgW3NlbWFudGljIHZlcnNpb25pbmddKGh0dHBzOi8vc2VtdmVyLm9yZy8pLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cblxudmlkZW9qcyQxLlZFUlNJT04gPSB2ZXJzaW9uO1xuLyoqXG4gKiBUaGUgZ2xvYmFsIG9wdGlvbnMgb2JqZWN0LiBUaGVzZSBhcmUgdGhlIHNldHRpbmdzIHRoYXQgdGFrZSBlZmZlY3RcbiAqIGlmIG5vIG92ZXJyaWRlcyBhcmUgc3BlY2lmaWVkIHdoZW4gdGhlIHBsYXllciBpcyBjcmVhdGVkLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmlkZW9qcyQxLm9wdGlvbnMgPSBQbGF5ZXIucHJvdG90eXBlLm9wdGlvbnNfO1xuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdpdGggdGhlIGN1cnJlbnRseSBjcmVhdGVkIHBsYXllcnMsIGtleWVkIGJ5IHBsYXllciBJRFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgVGhlIGNyZWF0ZWQgcGxheWVyc1xuICovXG5cbnZpZGVvanMkMS5nZXRQbGF5ZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gUGxheWVyLnBsYXllcnM7XG59O1xuLyoqXG4gKiBHZXQgYSBzaW5nbGUgcGxheWVyIGJhc2VkIG9uIGFuIElEIG9yIERPTSBlbGVtZW50LlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGlmIGFuIGVsZW1lbnQgb3IgSUQgaGFzIGFuIGFzc29jaWF0ZWRcbiAqIFZpZGVvLmpzIHBsYXllciwgYnV0IG5vdCBjcmVhdGUgb25lIGlmIGl0IGRvZXNuJ3QuXG4gKlxuICogQHBhcmFtICAge3N0cmluZ3xFbGVtZW50fSBpZFxuICogICAgICAgICAgQW4gSFRNTCBlbGVtZW50IC0gYDx2aWRlbz5gLCBgPGF1ZGlvPmAsIG9yIGA8dmlkZW8tanM+YCAtXG4gKiAgICAgICAgICBvciBhIHN0cmluZyBtYXRjaGluZyB0aGUgYGlkYCBvZiBzdWNoIGFuIGVsZW1lbnQuXG4gKlxuICogQHJldHVybiB7UGxheWVyfHVuZGVmaW5lZH1cbiAqICAgICAgICAgIEEgcGxheWVyIGluc3RhbmNlIG9yIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIHBsYXllciBpbnN0YW5jZVxuICogICAgICAgICAgbWF0Y2hpbmcgdGhlIGFyZ3VtZW50LlxuICovXG5cblxudmlkZW9qcyQxLmdldFBsYXllciA9IGZ1bmN0aW9uIChpZCkge1xuICB2YXIgcGxheWVycyA9IFBsYXllci5wbGF5ZXJzO1xuICB2YXIgdGFnO1xuXG4gIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIG5JZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICB2YXIgcGxheWVyID0gcGxheWVyc1tuSWRdO1xuXG4gICAgaWYgKHBsYXllcikge1xuICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICB9XG5cbiAgICB0YWcgPSAkKCcjJyArIG5JZCk7XG4gIH0gZWxzZSB7XG4gICAgdGFnID0gaWQ7XG4gIH1cblxuICBpZiAoaXNFbCh0YWcpKSB7XG4gICAgdmFyIF90YWcgPSB0YWcsXG4gICAgICAgIF9wbGF5ZXIgPSBfdGFnLnBsYXllcixcbiAgICAgICAgcGxheWVySWQgPSBfdGFnLnBsYXllcklkOyAvLyBFbGVtZW50IG1heSBoYXZlIGEgYHBsYXllcmAgcHJvcGVydHkgcmVmZXJyaW5nIHRvIGFuIGFscmVhZHkgY3JlYXRlZFxuICAgIC8vIHBsYXllciBpbnN0YW5jZS4gSWYgc28sIHJldHVybiB0aGF0LlxuXG4gICAgaWYgKF9wbGF5ZXIgfHwgcGxheWVyc1twbGF5ZXJJZF0pIHtcbiAgICAgIHJldHVybiBfcGxheWVyIHx8IHBsYXllcnNbcGxheWVySWRdO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY3VycmVudCBwbGF5ZXJzLlxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICogICAgICAgICBBbiBhcnJheSBvZiBhbGwgcGxheWVycy4gVGhlIGFycmF5IHdpbGwgYmUgaW4gdGhlIG9yZGVyIHRoYXRcbiAqICAgICAgICAgYE9iamVjdC5rZXlzYCBwcm92aWRlcywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgdmFyeSBiZXR3ZWVuXG4gKiAgICAgICAgIEphdmFTY3JpcHQgZW5naW5lcy5cbiAqXG4gKi9cblxuXG52aWRlb2pzJDEuZ2V0QWxsUGxheWVycyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgvLyBEaXNwb3NlZCBwbGF5ZXJzIGxlYXZlIGEga2V5IHdpdGggYSBgbnVsbGAgdmFsdWUsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlXG4gICAgLy8gd2UgZmlsdGVyIHRob3NlIG91dC5cbiAgICBPYmplY3Qua2V5cyhQbGF5ZXIucGxheWVycykubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICByZXR1cm4gUGxheWVyLnBsYXllcnNba107XG4gICAgfSkuZmlsdGVyKEJvb2xlYW4pXG4gICk7XG59O1xuXG52aWRlb2pzJDEucGxheWVycyA9IFBsYXllci5wbGF5ZXJzO1xudmlkZW9qcyQxLmdldENvbXBvbmVudCA9IENvbXBvbmVudC5nZXRDb21wb25lbnQ7XG4vKipcbiAqIFJlZ2lzdGVyIGEgY29tcG9uZW50IHNvIGl0IGNhbiByZWZlcnJlZCB0byBieSBuYW1lLiBVc2VkIHdoZW4gYWRkaW5nIHRvIG90aGVyXG4gKiBjb21wb25lbnRzLCBlaXRoZXIgdGhyb3VnaCBhZGRDaGlsZCBgY29tcG9uZW50LmFkZENoaWxkKCdteUNvbXBvbmVudCcpYCBvciB0aHJvdWdoXG4gKiBkZWZhdWx0IGNoaWxkcmVuIG9wdGlvbnMgIGB7IGNoaWxkcmVuOiBbJ215Q29tcG9uZW50J10gfWAuXG4gKlxuICogPiBOT1RFOiBZb3UgY291bGQgYWxzbyBqdXN0IGluaXRpYWxpemUgdGhlIGNvbXBvbmVudCBiZWZvcmUgYWRkaW5nLlxuICogYGNvbXBvbmVudC5hZGRDaGlsZChuZXcgTXlDb21wb25lbnQoKSk7YFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgICAgICAgVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBjb21wXG4gKiAgICAgICAgVGhlIGNvbXBvbmVudCBjbGFzc1xuICpcbiAqIEByZXR1cm4ge0NvbXBvbmVudH1cbiAqICAgICAgICAgVGhlIG5ld2x5IHJlZ2lzdGVyZWQgY29tcG9uZW50XG4gKi9cblxudmlkZW9qcyQxLnJlZ2lzdGVyQ29tcG9uZW50ID0gZnVuY3Rpb24gKG5hbWUsIGNvbXApIHtcbiAgaWYgKFRlY2guaXNUZWNoKGNvbXApKSB7XG4gICAgbG9nLndhcm4oXCJUaGUgXCIgKyBuYW1lICsgXCIgdGVjaCB3YXMgcmVnaXN0ZXJlZCBhcyBhIGNvbXBvbmVudC4gSXQgc2hvdWxkIGluc3RlYWQgYmUgcmVnaXN0ZXJlZCB1c2luZyB2aWRlb2pzLnJlZ2lzdGVyVGVjaChuYW1lLCB0ZWNoKVwiKTtcbiAgfVxuXG4gIENvbXBvbmVudC5yZWdpc3RlckNvbXBvbmVudC5jYWxsKENvbXBvbmVudCwgbmFtZSwgY29tcCk7XG59O1xuXG52aWRlb2pzJDEuZ2V0VGVjaCA9IFRlY2guZ2V0VGVjaDtcbnZpZGVvanMkMS5yZWdpc3RlclRlY2ggPSBUZWNoLnJlZ2lzdGVyVGVjaDtcbnZpZGVvanMkMS51c2UgPSB1c2U7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSBhIG1pZGRsZXdhcmUgdG8gc2lnbmlmeVxuICogdGhhdCB0aGUgbWlkZGxld2FyZSBpcyBiZWluZyB0ZXJtaW5hdGVkLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge29iamVjdH0gbWlkZGxld2FyZS5URVJNSU5BVE9SXG4gKi9cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvanMkMSwgJ21pZGRsZXdhcmUnLCB7XG4gIHZhbHVlOiB7fSxcbiAgd3JpdGVhYmxlOiBmYWxzZSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW9qcyQxLm1pZGRsZXdhcmUsICdURVJNSU5BVE9SJywge1xuICB2YWx1ZTogVEVSTUlOQVRPUixcbiAgd3JpdGVhYmxlOiBmYWxzZSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSB7QGxpbmsgbW9kdWxlOmJyb3dzZXJ8YnJvd3NlciB1dGlsaXR5IG1vZHVsZX0gYXMgYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAc2VlICB7QGxpbmsgbW9kdWxlOmJyb3dzZXJ8YnJvd3Nlcn1cbiAqL1xuXG52aWRlb2pzJDEuYnJvd3NlciA9IGJyb3dzZXI7XG4vKipcbiAqIFVzZSB7QGxpbmsgbW9kdWxlOmJyb3dzZXIuVE9VQ0hfRU5BQkxFRHxicm93c2VyLlRPVUNIX0VOQUJMRUR9IGluc3RlYWQ7IG9ubHlcbiAqIGluY2x1ZGVkIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHdpdGggNC54LlxuICpcbiAqIEBkZXByZWNhdGVkIFNpbmNlIHZlcnNpb24gNS4wLCB1c2Uge0BsaW5rIG1vZHVsZTpicm93c2VyLlRPVUNIX0VOQUJMRUR8YnJvd3Nlci5UT1VDSF9FTkFCTEVEIGluc3RlYWQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuXG52aWRlb2pzJDEuVE9VQ0hfRU5BQkxFRCA9IFRPVUNIX0VOQUJMRUQ7XG52aWRlb2pzJDEuZXh0ZW5kID0gZXh0ZW5kO1xudmlkZW9qcyQxLm1lcmdlT3B0aW9ucyA9IG1lcmdlT3B0aW9ucztcbnZpZGVvanMkMS5iaW5kID0gYmluZDtcbnZpZGVvanMkMS5yZWdpc3RlclBsdWdpbiA9IFBsdWdpbi5yZWdpc3RlclBsdWdpbjtcbnZpZGVvanMkMS5kZXJlZ2lzdGVyUGx1Z2luID0gUGx1Z2luLmRlcmVnaXN0ZXJQbHVnaW47XG4vKipcbiAqIERlcHJlY2F0ZWQgbWV0aG9kIHRvIHJlZ2lzdGVyIGEgcGx1Z2luIHdpdGggVmlkZW8uanNcbiAqXG4gKiBAZGVwcmVjYXRlZCB2aWRlb2pzLnBsdWdpbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSB2aWRlb2pzLnJlZ2lzdGVyUGx1Z2luKCkgaW5zdGVhZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgICAgICAgVGhlIHBsdWdpbiBuYW1lXG4gKlxuICogQHBhcmFtIHtQbHVnaW58RnVuY3Rpb259IHBsdWdpblxuICogICAgICAgICBUaGUgcGx1Z2luIHN1Yi1jbGFzcyBvciBmdW5jdGlvblxuICovXG5cbnZpZGVvanMkMS5wbHVnaW4gPSBmdW5jdGlvbiAobmFtZSwgcGx1Z2luKSB7XG4gIGxvZy53YXJuKCd2aWRlb2pzLnBsdWdpbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSB2aWRlb2pzLnJlZ2lzdGVyUGx1Z2luKCkgaW5zdGVhZCcpO1xuICByZXR1cm4gUGx1Z2luLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbik7XG59O1xuXG52aWRlb2pzJDEuZ2V0UGx1Z2lucyA9IFBsdWdpbi5nZXRQbHVnaW5zO1xudmlkZW9qcyQxLmdldFBsdWdpbiA9IFBsdWdpbi5nZXRQbHVnaW47XG52aWRlb2pzJDEuZ2V0UGx1Z2luVmVyc2lvbiA9IFBsdWdpbi5nZXRQbHVnaW5WZXJzaW9uO1xuLyoqXG4gKiBBZGRpbmcgbGFuZ3VhZ2VzIHNvIHRoYXQgdGhleSdyZSBhdmFpbGFibGUgdG8gYWxsIHBsYXllcnMuXG4gKiBFeGFtcGxlOiBgdmlkZW9qcy5hZGRMYW5ndWFnZSgnZXMnLCB7ICdIZWxsbyc6ICdIb2xhJyB9KTtgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcbiAqICAgICAgICBUaGUgbGFuZ3VhZ2UgY29kZSBvciBkaWN0aW9uYXJ5IHByb3BlcnR5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqICAgICAgICBUaGUgZGF0YSB2YWx1ZXMgdG8gYmUgdHJhbnNsYXRlZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgVGhlIHJlc3VsdGluZyBsYW5ndWFnZSBkaWN0aW9uYXJ5IG9iamVjdFxuICovXG5cbnZpZGVvanMkMS5hZGRMYW5ndWFnZSA9IGZ1bmN0aW9uIChjb2RlLCBkYXRhKSB7XG4gIHZhciBfbWVyZ2VPcHRpb25zO1xuXG4gIGNvZGUgPSAoJycgKyBjb2RlKS50b0xvd2VyQ2FzZSgpO1xuICB2aWRlb2pzJDEub3B0aW9ucy5sYW5ndWFnZXMgPSBtZXJnZU9wdGlvbnModmlkZW9qcyQxLm9wdGlvbnMubGFuZ3VhZ2VzLCAoX21lcmdlT3B0aW9ucyA9IHt9LCBfbWVyZ2VPcHRpb25zW2NvZGVdID0gZGF0YSwgX21lcmdlT3B0aW9ucykpO1xuICByZXR1cm4gdmlkZW9qcyQxLm9wdGlvbnMubGFuZ3VhZ2VzW2NvZGVdO1xufTtcbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayBtb2R1bGU6bG9nfGxvZyB1dGlsaXR5IG1vZHVsZX0gYXMgYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqIEBzZWUgIHtAbGluayBtb2R1bGU6bG9nfGxvZ31cbiAqL1xuXG5cbnZpZGVvanMkMS5sb2cgPSBsb2c7XG52aWRlb2pzJDEuY3JlYXRlTG9nZ2VyID0gY3JlYXRlTG9nZ2VyJDE7XG52aWRlb2pzJDEuY3JlYXRlVGltZVJhbmdlID0gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMgPSBjcmVhdGVUaW1lUmFuZ2VzO1xudmlkZW9qcyQxLmZvcm1hdFRpbWUgPSBmb3JtYXRUaW1lO1xudmlkZW9qcyQxLnNldEZvcm1hdFRpbWUgPSBzZXRGb3JtYXRUaW1lO1xudmlkZW9qcyQxLnJlc2V0Rm9ybWF0VGltZSA9IHJlc2V0Rm9ybWF0VGltZTtcbnZpZGVvanMkMS5wYXJzZVVybCA9IHBhcnNlVXJsO1xudmlkZW9qcyQxLmlzQ3Jvc3NPcmlnaW4gPSBpc0Nyb3NzT3JpZ2luO1xudmlkZW9qcyQxLkV2ZW50VGFyZ2V0ID0gRXZlbnRUYXJnZXQ7XG52aWRlb2pzJDEub24gPSBvbjtcbnZpZGVvanMkMS5vbmUgPSBvbmU7XG52aWRlb2pzJDEub2ZmID0gb2ZmO1xudmlkZW9qcyQxLnRyaWdnZXIgPSB0cmlnZ2VyO1xuLyoqXG4gKiBBIGNyb3NzLWJyb3dzZXIgWE1MSHR0cFJlcXVlc3Qgd3JhcHBlci5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBvcHRpb25zXG4gKiAgICAgICAgICAgU2V0dGluZ3MgZm9yIHRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4gICB7WE1MSHR0cFJlcXVlc3R8WERvbWFpblJlcXVlc3R9XG4gKiAgICAgICAgICAgVGhlIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBzZWUgICAgICBodHRwczovL2dpdGh1Yi5jb20vUmF5bm9zL3hoclxuICovXG5cbnZpZGVvanMkMS54aHIgPSBYSFI7XG52aWRlb2pzJDEuVGV4dFRyYWNrID0gVGV4dFRyYWNrO1xudmlkZW9qcyQxLkF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrO1xudmlkZW9qcyQxLlZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrO1xuWydpc0VsJywgJ2lzVGV4dE5vZGUnLCAnY3JlYXRlRWwnLCAnaGFzQ2xhc3MnLCAnYWRkQ2xhc3MnLCAncmVtb3ZlQ2xhc3MnLCAndG9nZ2xlQ2xhc3MnLCAnc2V0QXR0cmlidXRlcycsICdnZXRBdHRyaWJ1dGVzJywgJ2VtcHR5RWwnLCAnYXBwZW5kQ29udGVudCcsICdpbnNlcnRDb250ZW50J10uZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICB2aWRlb2pzJDFba10gPSBmdW5jdGlvbiAoKSB7XG4gICAgbG9nLndhcm4oXCJ2aWRlb2pzLlwiICsgayArIFwiKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHZpZGVvanMuZG9tLlwiICsgayArIFwiKCkgaW5zdGVhZFwiKTtcbiAgICByZXR1cm4gRG9tW2tdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH07XG59KTtcbnZpZGVvanMkMS5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayBtb2R1bGU6ZG9tfERPTSB1dGlsaXR5IG1vZHVsZX0gYXMgYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAc2VlICB7QGxpbmsgbW9kdWxlOmRvbXxkb219XG4gKi9cblxudmlkZW9qcyQxLmRvbSA9IERvbTtcbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayBtb2R1bGU6dXJsfFVSTCB1dGlsaXR5IG1vZHVsZX0gYXMgYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAc2VlICB7QGxpbmsgbW9kdWxlOnVybHx1cmx9XG4gKi9cblxudmlkZW9qcyQxLnVybCA9IFVybDtcblxuLyoqXG4gKiBAdmlkZW9qcy9odHRwLXN0cmVhbWluZ1xuICogQHZlcnNpb24gMS4xMC42XG4gKiBAY29weXJpZ2h0IDIwMTkgQnJpZ2h0Y292ZSwgSW5jXG4gKiBAbGljZW5zZSBBcGFjaGUtMi4wXG4gKi9cbi8qKlxuICogQGZpbGUgcmVzb2x2ZS11cmwuanMgLSBIYW5kbGluZyBob3cgVVJMcyBhcmUgcmVzb2x2ZWQgYW5kIG1hbmlwdWxhdGVkXG4gKi9cblxudmFyIHJlc29sdmVVcmwgPSBmdW5jdGlvbiByZXNvbHZlVXJsKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIC8vIHJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBuZWVkIHRvIHJlc29sdmVcbiAgaWYgKC9eW2Etel0rOi9pLnRlc3QocmVsYXRpdmVVUkwpKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlVVJMO1xuICB9IC8vIGlmIHRoZSBiYXNlIFVSTCBpcyByZWxhdGl2ZSB0aGVuIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCBsb2NhdGlvblxuXG5cbiAgaWYgKCEvXFwvXFwvL2kudGVzdChiYXNlVVJMKSkge1xuICAgIGJhc2VVUkwgPSBVUkxUb29sa2l0LmJ1aWxkQWJzb2x1dGVVUkwod2luZG93JDEubG9jYXRpb24uaHJlZiwgYmFzZVVSTCk7XG4gIH1cblxuICByZXR1cm4gVVJMVG9vbGtpdC5idWlsZEFic29sdXRlVVJMKGJhc2VVUkwsIHJlbGF0aXZlVVJMKTtcbn07XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHhociByZXF1ZXN0IHdhcyByZWRpcmVjdGVkIGFuZCByZXR1cm5zIGNvcnJlY3QgdXJsIGRlcGVuZGluZ1xuICogb24gYGhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzYCBvcHRpb25cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHVybCAtIGFuIHVybCBiZWluZyByZXF1ZXN0ZWRcbiAqIEBwYXJhbSAge1hNTEh0dHBSZXF1ZXN0fSByZXEgLSB4aHIgcmVxdWVzdCByZXN1bHRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuXG52YXIgcmVzb2x2ZU1hbmlmZXN0UmVkaXJlY3QgPSBmdW5jdGlvbiByZXNvbHZlTWFuaWZlc3RSZWRpcmVjdChoYW5kbGVNYW5pZmVzdFJlZGlyZWN0LCB1cmwsIHJlcSkge1xuICAvLyBUbyB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzcG9uc2VVUkwgYmVsb3cgaXMgc2V0IGFuZCBnZW5lcmF0ZWQ6XG4gIC8vIC0gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtdXJsXG4gIC8vIC0gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2F0b21pYy1odHRwLXJlZGlyZWN0LWhhbmRsaW5nXG4gIGlmIChoYW5kbGVNYW5pZmVzdFJlZGlyZWN0ICYmIHJlcS5yZXNwb25zZVVSTCAmJiB1cmwgIT09IHJlcS5yZXNwb25zZVVSTCkge1xuICAgIHJldHVybiByZXEucmVzcG9uc2VVUkw7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0JDEgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcblxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYykge1xuICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBnZXR0ZXIgPSBkZXNjLmdldDtcblxuICAgIGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpO1xuICB9XG59O1xuXG52YXIgaW5oZXJpdHMgPSBmdW5jdGlvbiBpbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxudmFyIHNsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7XG4vKipcbiAqIEBmaWxlIHBsYXlsaXN0LWxvYWRlci5qc1xuICpcbiAqIEEgc3RhdGUgbWFjaGluZSB0aGF0IG1hbmFnZXMgdGhlIGxvYWRpbmcsIGNhY2hpbmcsIGFuZCB1cGRhdGluZyBvZlxuICogTTNVOCBwbGF5bGlzdHMuXG4gKlxuICovXG5cblxudmFyIG1lcmdlT3B0aW9ucyQxID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyxcbiAgICBFdmVudFRhcmdldCQxID0gdmlkZW9qcyQxLkV2ZW50VGFyZ2V0LFxuICAgIGxvZyQxID0gdmlkZW9qcyQxLmxvZztcbi8qKlxuICogTG9vcHMgdGhyb3VnaCBhbGwgc3VwcG9ydGVkIG1lZGlhIGdyb3VwcyBpbiBtYXN0ZXIgYW5kIGNhbGxzIHRoZSBwcm92aWRlZFxuICogY2FsbGJhY2sgZm9yIGVhY2ggZ3JvdXBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbWFzdGVyXG4gKiAgICAgICAgVGhlIHBhcnNlZCBtYXN0ZXIgbWFuaWZlc3Qgb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogICAgICAgIENhbGxiYWNrIHRvIGNhbGwgZm9yIGVhY2ggbWVkaWEgZ3JvdXBcbiAqL1xuXG52YXIgZm9yRWFjaE1lZGlhR3JvdXAgPSBmdW5jdGlvbiBmb3JFYWNoTWVkaWFHcm91cChtYXN0ZXIsIGNhbGxiYWNrKSB7XG4gIFsnQVVESU8nLCAnU1VCVElUTEVTJ10uZm9yRWFjaChmdW5jdGlvbiAobWVkaWFUeXBlKSB7XG4gICAgZm9yICh2YXIgZ3JvdXBLZXkgaW4gbWFzdGVyLm1lZGlhR3JvdXBzW21lZGlhVHlwZV0pIHtcbiAgICAgIGZvciAodmFyIGxhYmVsS2V5IGluIG1hc3Rlci5tZWRpYUdyb3Vwc1ttZWRpYVR5cGVdW2dyb3VwS2V5XSkge1xuICAgICAgICB2YXIgbWVkaWFQcm9wZXJ0aWVzID0gbWFzdGVyLm1lZGlhR3JvdXBzW21lZGlhVHlwZV1bZ3JvdXBLZXldW2xhYmVsS2V5XTtcbiAgICAgICAgY2FsbGJhY2sobWVkaWFQcm9wZXJ0aWVzLCBtZWRpYVR5cGUsIGdyb3VwS2V5LCBsYWJlbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG4vKipcbiAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIHNlZ21lbnRzIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBtZXJnaW5nXG4gICogcHJvcGVydGllcyBmcm9tIGFuIG9sZGVyIGxpc3Qgb2Ygc2VnbWVudHMgb250byBhbiB1cGRhdGVkXG4gICogbGlzdC4gTm8gcHJvcGVydGllcyBvbiB0aGUgdXBkYXRlZCBwbGF5bGlzdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICpcbiAgKiBAcGFyYW0ge0FycmF5fSBvcmlnaW5hbCB0aGUgb3V0ZGF0ZWQgbGlzdCBvZiBzZWdtZW50c1xuICAqIEBwYXJhbSB7QXJyYXl9IHVwZGF0ZSB0aGUgdXBkYXRlZCBsaXN0IG9mIHNlZ21lbnRzXG4gICogQHBhcmFtIHtOdW1iZXI9fSBvZmZzZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1cGRhdGVcbiAgKiBzZWdtZW50IGluIHRoZSBvcmlnaW5hbCBzZWdtZW50IGxpc3QuIEZvciBub24tbGl2ZSBwbGF5bGlzdHMsXG4gICogdGhpcyBzaG91bGQgYWx3YXlzIGJlIHplcm8gYW5kIGRvZXMgbm90IG5lZWQgdG8gYmVcbiAgKiBzcGVjaWZpZWQuIEZvciBsaXZlIHBsYXlsaXN0cywgaXQgc2hvdWxkIGJlIHRoZSBkaWZmZXJlbmNlXG4gICogYmV0d2VlbiB0aGUgbWVkaWEgc2VxdWVuY2UgbnVtYmVycyBpbiB0aGUgb3JpZ2luYWwgYW5kIHVwZGF0ZWRcbiAgKiBwbGF5bGlzdHMuXG4gICogQHJldHVybiBhIGxpc3Qgb2YgbWVyZ2VkIHNlZ21lbnQgb2JqZWN0c1xuICAqL1xuXG5cbnZhciB1cGRhdGVTZWdtZW50cyA9IGZ1bmN0aW9uIHVwZGF0ZVNlZ21lbnRzKG9yaWdpbmFsLCB1cGRhdGUsIG9mZnNldCkge1xuICB2YXIgcmVzdWx0ID0gdXBkYXRlLnNsaWNlKCk7XG4gIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4ob3JpZ2luYWwubGVuZ3RoLCB1cGRhdGUubGVuZ3RoICsgb2Zmc2V0KTtcblxuICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbaSAtIG9mZnNldF0gPSBtZXJnZU9wdGlvbnMkMShvcmlnaW5hbFtpXSwgcmVzdWx0W2kgLSBvZmZzZXRdKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgcmVzb2x2ZVNlZ21lbnRVcmlzID0gZnVuY3Rpb24gcmVzb2x2ZVNlZ21lbnRVcmlzKHNlZ21lbnQsIGJhc2VVcmkpIHtcbiAgaWYgKCFzZWdtZW50LnJlc29sdmVkVXJpKSB7XG4gICAgc2VnbWVudC5yZXNvbHZlZFVyaSA9IHJlc29sdmVVcmwoYmFzZVVyaSwgc2VnbWVudC51cmkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnQua2V5ICYmICFzZWdtZW50LmtleS5yZXNvbHZlZFVyaSkge1xuICAgIHNlZ21lbnQua2V5LnJlc29sdmVkVXJpID0gcmVzb2x2ZVVybChiYXNlVXJpLCBzZWdtZW50LmtleS51cmkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnQubWFwICYmICFzZWdtZW50Lm1hcC5yZXNvbHZlZFVyaSkge1xuICAgIHNlZ21lbnQubWFwLnJlc29sdmVkVXJpID0gcmVzb2x2ZVVybChiYXNlVXJpLCBzZWdtZW50Lm1hcC51cmkpO1xuICB9XG59O1xuLyoqXG4gICogUmV0dXJucyBhIG5ldyBtYXN0ZXIgcGxheWxpc3QgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIG1lcmdpbmcgYW5cbiAgKiB1cGRhdGVkIG1lZGlhIHBsYXlsaXN0IGludG8gdGhlIG9yaWdpbmFsIHZlcnNpb24uIElmIHRoZVxuICAqIHVwZGF0ZWQgbWVkaWEgcGxheWxpc3QgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBwbGF5bGlzdFxuICAqIGVudHJpZXMgaW4gdGhlIG9yaWdpbmFsIG1hc3RlciBwbGF5bGlzdCwgbnVsbCBpcyByZXR1cm5lZC5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBtYXN0ZXIgYSBwYXJzZWQgbWFzdGVyIE0zVTggb2JqZWN0XG4gICogQHBhcmFtIHtPYmplY3R9IG1lZGlhIGEgcGFyc2VkIG1lZGlhIE0zVTggb2JqZWN0XG4gICogQHJldHVybiB7T2JqZWN0fSBhIG5ldyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBvcmlnaW5hbFxuICAqIG1hc3RlciBwbGF5bGlzdCB3aXRoIHRoZSB1cGRhdGVkIG1lZGlhIHBsYXlsaXN0IG1lcmdlZCBpbiwgb3JcbiAgKiBudWxsIGlmIHRoZSBtZXJnZSBwcm9kdWNlZCBubyBjaGFuZ2UuXG4gICovXG5cblxudmFyIHVwZGF0ZU1hc3RlciA9IGZ1bmN0aW9uIHVwZGF0ZU1hc3RlcihtYXN0ZXIsIG1lZGlhKSB7XG4gIHZhciByZXN1bHQgPSBtZXJnZU9wdGlvbnMkMShtYXN0ZXIsIHt9KTtcbiAgdmFyIHBsYXlsaXN0ID0gcmVzdWx0LnBsYXlsaXN0c1ttZWRpYS51cmldO1xuXG4gIGlmICghcGxheWxpc3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBjb25zaWRlciB0aGUgcGxheWxpc3QgdW5jaGFuZ2VkIGlmIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgaXMgZXF1YWwsIHRoZSBtZWRpYVxuICAvLyBzZXF1ZW5jZSBudW1iZXIgaXMgdW5jaGFuZ2VkLCBhbmQgdGhpcyBwbGF5bGlzdCBoYXNuJ3QgYmVjb21lIHRoZSBlbmQgb2YgdGhlIHBsYXlsaXN0XG5cblxuICBpZiAocGxheWxpc3Quc2VnbWVudHMgJiYgbWVkaWEuc2VnbWVudHMgJiYgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoID09PSBtZWRpYS5zZWdtZW50cy5sZW5ndGggJiYgcGxheWxpc3QuZW5kTGlzdCA9PT0gbWVkaWEuZW5kTGlzdCAmJiBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlID09PSBtZWRpYS5tZWRpYVNlcXVlbmNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWVyZ2VkUGxheWxpc3QgPSBtZXJnZU9wdGlvbnMkMShwbGF5bGlzdCwgbWVkaWEpOyAvLyBpZiB0aGUgdXBkYXRlIGNvdWxkIG92ZXJsYXAgZXhpc3Rpbmcgc2VnbWVudCBpbmZvcm1hdGlvbiwgbWVyZ2UgdGhlIHR3byBzZWdtZW50IGxpc3RzXG5cbiAgaWYgKHBsYXlsaXN0LnNlZ21lbnRzKSB7XG4gICAgbWVyZ2VkUGxheWxpc3Quc2VnbWVudHMgPSB1cGRhdGVTZWdtZW50cyhwbGF5bGlzdC5zZWdtZW50cywgbWVkaWEuc2VnbWVudHMsIG1lZGlhLm1lZGlhU2VxdWVuY2UgLSBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlKTtcbiAgfSAvLyByZXNvbHZlIGFueSBzZWdtZW50IFVSSXMgdG8gcHJldmVudCB1cyBmcm9tIGhhdmluZyB0byBkbyBpdCBsYXRlclxuXG5cbiAgbWVyZ2VkUGxheWxpc3Quc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgIHJlc29sdmVTZWdtZW50VXJpcyhzZWdtZW50LCBtZXJnZWRQbGF5bGlzdC5yZXNvbHZlZFVyaSk7XG4gIH0pOyAvLyBUT0RPIFJpZ2h0IG5vdyBpbiB0aGUgcGxheWxpc3RzIGFycmF5IHRoZXJlIGFyZSB0d28gcmVmZXJlbmNlcyB0byBlYWNoIHBsYXlsaXN0LCBvbmVcbiAgLy8gdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGluZGV4LCBhbmQgb25lIGJ5IFVSSS4gVGhlIGluZGV4IHJlZmVyZW5jZSBtYXkgbm8gbG9uZ2VyIGJlXG4gIC8vIG5lY2Vzc2FyeS5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5wbGF5bGlzdHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmVzdWx0LnBsYXlsaXN0c1tpXS51cmkgPT09IG1lZGlhLnVyaSkge1xuICAgICAgcmVzdWx0LnBsYXlsaXN0c1tpXSA9IG1lcmdlZFBsYXlsaXN0O1xuICAgIH1cbiAgfVxuXG4gIHJlc3VsdC5wbGF5bGlzdHNbbWVkaWEudXJpXSA9IG1lcmdlZFBsYXlsaXN0O1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIHNldHVwTWVkaWFQbGF5bGlzdHMgPSBmdW5jdGlvbiBzZXR1cE1lZGlhUGxheWxpc3RzKG1hc3Rlcikge1xuICAvLyBzZXR1cCBieS1VUkkgbG9va3VwcyBhbmQgcmVzb2x2ZSBtZWRpYSBwbGF5bGlzdCBVUklzXG4gIHZhciBpID0gbWFzdGVyLnBsYXlsaXN0cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBwbGF5bGlzdCA9IG1hc3Rlci5wbGF5bGlzdHNbaV07XG4gICAgbWFzdGVyLnBsYXlsaXN0c1twbGF5bGlzdC51cmldID0gcGxheWxpc3Q7XG4gICAgcGxheWxpc3QucmVzb2x2ZWRVcmkgPSByZXNvbHZlVXJsKG1hc3Rlci51cmksIHBsYXlsaXN0LnVyaSk7XG4gICAgcGxheWxpc3QuaWQgPSBpO1xuXG4gICAgaWYgKCFwbGF5bGlzdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBBbHRob3VnaCB0aGUgc3BlYyBzdGF0ZXMgYW4gI0VYVC1YLVNUUkVBTS1JTkYgdGFnIE1VU1QgaGF2ZSBhXG4gICAgICAvLyBCQU5EV0lEVEggYXR0cmlidXRlLCB3ZSBjYW4gcGxheSB0aGUgc3RyZWFtIHdpdGhvdXQgaXQuIFRoaXMgbWVhbnMgYSBwb29ybHlcbiAgICAgIC8vIGZvcm1hdHRlZCBtYXN0ZXIgcGxheWxpc3QgbWF5IG5vdCBoYXZlIGFuIGF0dHJpYnV0ZSBsaXN0LiBBbiBhdHRyaWJ1dGVzXG4gICAgICAvLyBwcm9wZXJ0eSBpcyBhZGRlZCBoZXJlIHRvIHByZXZlbnQgdW5kZWZpbmVkIHJlZmVyZW5jZXMgd2hlbiB3ZSBlbmNvdW50ZXJcbiAgICAgIC8vIHRoaXMgc2NlbmFyaW8uXG4gICAgICBwbGF5bGlzdC5hdHRyaWJ1dGVzID0ge307XG4gICAgICBsb2ckMS53YXJuKCdJbnZhbGlkIHBsYXlsaXN0IFNUUkVBTS1JTkYgZGV0ZWN0ZWQuIE1pc3NpbmcgQkFORFdJRFRIIGF0dHJpYnV0ZS4nKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciByZXNvbHZlTWVkaWFHcm91cFVyaXMgPSBmdW5jdGlvbiByZXNvbHZlTWVkaWFHcm91cFVyaXMobWFzdGVyKSB7XG4gIGZvckVhY2hNZWRpYUdyb3VwKG1hc3RlciwgZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcGVydGllcy51cmkpIHtcbiAgICAgIHByb3BlcnRpZXMucmVzb2x2ZWRVcmkgPSByZXNvbHZlVXJsKG1hc3Rlci51cmksIHByb3BlcnRpZXMudXJpKTtcbiAgICB9XG4gIH0pO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSByZWZyZXNoaW5nIGEgbGl2ZSBwbGF5bGlzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZWRpYVxuICogICAgICAgIFRoZSBjdXJyZW50IG1lZGlhXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHVwZGF0ZVxuICogICAgICAgIFRydWUgaWYgdGhlcmUgd2VyZSBhbnkgdXBkYXRlcyBmcm9tIHRoZSBsYXN0IHJlZnJlc2gsIGZhbHNlIG90aGVyd2lzZVxuICogQHJldHVybiB7TnVtYmVyfVxuICogICAgICAgICBUaGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSByZWZyZXNoaW5nIHRoZSBsaXZlIHBsYXlsaXN0XG4gKi9cblxuXG52YXIgcmVmcmVzaERlbGF5ID0gZnVuY3Rpb24gcmVmcmVzaERlbGF5KG1lZGlhLCB1cGRhdGUpIHtcbiAgdmFyIGxhc3RTZWdtZW50ID0gbWVkaWEuc2VnbWVudHNbbWVkaWEuc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gIHZhciBkZWxheSA9IHZvaWQgMDtcblxuICBpZiAodXBkYXRlICYmIGxhc3RTZWdtZW50ICYmIGxhc3RTZWdtZW50LmR1cmF0aW9uKSB7XG4gICAgZGVsYXkgPSBsYXN0U2VnbWVudC5kdXJhdGlvbiAqIDEwMDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIHBsYXlsaXN0IGlzIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCByZWxvYWQgb3IgbGFzdCBzZWdtZW50IGR1cmF0aW9uXG4gICAgLy8gY2Fubm90IGJlIGRldGVybWluZWQsIHRyeSBhZ2FpbiBhZnRlciBoYWxmIHRoZSB0YXJnZXQgZHVyYXRpb25cbiAgICBkZWxheSA9IChtZWRpYS50YXJnZXREdXJhdGlvbiB8fCAxMCkgKiA1MDA7XG4gIH1cblxuICByZXR1cm4gZGVsYXk7XG59O1xuLyoqXG4gKiBMb2FkIGEgcGxheWxpc3QgZnJvbSBhIHJlbW90ZSBsb2NhdGlvblxuICpcbiAqIEBjbGFzcyBQbGF5bGlzdExvYWRlclxuICogQGV4dGVuZHMgU3RyZWFtXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjVXJsIHRoZSB1cmwgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIHtCb29sZWFufSB3aXRoQ3JlZGVudGlhbHMgdGhlIHdpdGhDcmVkZW50aWFscyB4aHIgb3B0aW9uXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBQbGF5bGlzdExvYWRlciA9IGZ1bmN0aW9uIChfRXZlbnRUYXJnZXQpIHtcbiAgaW5oZXJpdHMoUGxheWxpc3RMb2FkZXIsIF9FdmVudFRhcmdldCk7XG5cbiAgZnVuY3Rpb24gUGxheWxpc3RMb2FkZXIoc3JjVXJsLCBobHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgUGxheWxpc3RMb2FkZXIpO1xuXG4gICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUGxheWxpc3RMb2FkZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQbGF5bGlzdExvYWRlcikpLmNhbGwodGhpcykpO1xuXG4gICAgdmFyIF9vcHRpb25zJHdpdGhDcmVkZW50aSA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSBfb3B0aW9ucyR3aXRoQ3JlZGVudGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX29wdGlvbnMkd2l0aENyZWRlbnRpLFxuICAgICAgICBfb3B0aW9ucyRoYW5kbGVNYW5pZmUgPSBvcHRpb25zLmhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzLFxuICAgICAgICBoYW5kbGVNYW5pZmVzdFJlZGlyZWN0cyA9IF9vcHRpb25zJGhhbmRsZU1hbmlmZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfb3B0aW9ucyRoYW5kbGVNYW5pZmU7XG4gICAgX3RoaXMuc3JjVXJsID0gc3JjVXJsO1xuICAgIF90aGlzLmhsc18gPSBobHM7XG4gICAgX3RoaXMud2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzO1xuICAgIF90aGlzLmhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzID0gaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHM7XG4gICAgdmFyIGhsc09wdGlvbnMgPSBobHMub3B0aW9uc187XG4gICAgX3RoaXMuY3VzdG9tVGFnUGFyc2VycyA9IGhsc09wdGlvbnMgJiYgaGxzT3B0aW9ucy5jdXN0b21UYWdQYXJzZXJzIHx8IFtdO1xuICAgIF90aGlzLmN1c3RvbVRhZ01hcHBlcnMgPSBobHNPcHRpb25zICYmIGhsc09wdGlvbnMuY3VzdG9tVGFnTWFwcGVycyB8fCBbXTtcblxuICAgIGlmICghX3RoaXMuc3JjVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHBsYXlsaXN0IFVSTCBpcyByZXF1aXJlZCcpO1xuICAgIH0gLy8gaW5pdGlhbGl6ZSB0aGUgbG9hZGVyIHN0YXRlXG5cblxuICAgIF90aGlzLnN0YXRlID0gJ0hBVkVfTk9USElORyc7IC8vIGxpdmUgcGxheWxpc3Qgc3RhbGVuZXNzIHRpbWVvdXRcblxuICAgIF90aGlzLm9uKCdtZWRpYXVwZGF0ZXRpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuc3RhdGUgIT09ICdIQVZFX01FVEFEQVRBJykge1xuICAgICAgICAvLyBvbmx5IHJlZnJlc2ggdGhlIG1lZGlhIHBsYXlsaXN0IGlmIG5vIG90aGVyIGFjdGl2aXR5IGlzIGdvaW5nIG9uXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc3RhdGUgPSAnSEFWRV9DVVJSRU5UX01FVEFEQVRBJztcbiAgICAgIF90aGlzLnJlcXVlc3QgPSBfdGhpcy5obHNfLnhocih7XG4gICAgICAgIHVyaTogcmVzb2x2ZVVybChfdGhpcy5tYXN0ZXIudXJpLCBfdGhpcy5tZWRpYSgpLnVyaSksXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogX3RoaXMud2l0aENyZWRlbnRpYWxzXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyb3IsIHJlcSkge1xuICAgICAgICAvLyBkaXNwb3NlZFxuICAgICAgICBpZiAoIV90aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMucGxheWxpc3RSZXF1ZXN0RXJyb3IoX3RoaXMucmVxdWVzdCwgX3RoaXMubWVkaWEoKS51cmksICdIQVZFX01FVEFEQVRBJyk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5oYXZlTWV0YWRhdGEoX3RoaXMucmVxdWVzdCwgX3RoaXMubWVkaWEoKS51cmkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBjcmVhdGVDbGFzcyhQbGF5bGlzdExvYWRlciwgW3tcbiAgICBrZXk6ICdwbGF5bGlzdFJlcXVlc3RFcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBsYXlsaXN0UmVxdWVzdEVycm9yKHhociwgdXJsLCBzdGFydGluZ1N0YXRlKSB7XG4gICAgICAvLyBhbnkgaW4tZmxpZ2h0IHJlcXVlc3QgaXMgbm93IGZpbmlzaGVkXG4gICAgICB0aGlzLnJlcXVlc3QgPSBudWxsO1xuXG4gICAgICBpZiAoc3RhcnRpbmdTdGF0ZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhcnRpbmdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvciA9IHtcbiAgICAgICAgcGxheWxpc3Q6IHRoaXMubWFzdGVyLnBsYXlsaXN0c1t1cmxdLFxuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIG1lc3NhZ2U6ICdITFMgcGxheWxpc3QgcmVxdWVzdCBlcnJvciBhdCBVUkw6ICcgKyB1cmwgKyAnLicsXG4gICAgICAgIHJlc3BvbnNlVGV4dDogeGhyLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgY29kZTogeGhyLnN0YXR1cyA+PSA1MDAgPyA0IDogMlxuICAgICAgfTtcbiAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InKTtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgcGxheWxpc3QgbG9hZGVyJ3Mgc3RhdGUgaW4gcmVzcG9uc2UgdG8gYSBuZXcgb3JcbiAgICAvLyB1cGRhdGVkIHBsYXlsaXN0LlxuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXZlTWV0YWRhdGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXZlTWV0YWRhdGEoeGhyLCB1cmwpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzOyAvLyBhbnkgaW4tZmxpZ2h0IHJlcXVlc3QgaXMgbm93IGZpbmlzaGVkXG5cblxuICAgICAgdGhpcy5yZXF1ZXN0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RhdGUgPSAnSEFWRV9NRVRBREFUQSc7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcigpOyAvLyBhZGRpbmcgY3VzdG9tIHRhZyBwYXJzZXJzXG5cbiAgICAgIHRoaXMuY3VzdG9tVGFnUGFyc2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChjdXN0b21QYXJzZXIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5hZGRQYXJzZXIoY3VzdG9tUGFyc2VyKTtcbiAgICAgIH0pOyAvLyBhZGRpbmcgY3VzdG9tIHRhZyBtYXBwZXJzXG5cbiAgICAgIHRoaXMuY3VzdG9tVGFnTWFwcGVycy5mb3JFYWNoKGZ1bmN0aW9uIChtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5hZGRUYWdNYXBwZXIobWFwcGVyKTtcbiAgICAgIH0pO1xuICAgICAgcGFyc2VyLnB1c2goeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICBwYXJzZXIuZW5kKCk7XG4gICAgICBwYXJzZXIubWFuaWZlc3QudXJpID0gdXJsOyAvLyBtM3U4LXBhcnNlciBkb2VzIG5vdCBhdHRhY2ggYW4gYXR0cmlidXRlcyBwcm9wZXJ0eSB0byBtZWRpYSBwbGF5bGlzdHMgc28gbWFrZVxuICAgICAgLy8gc3VyZSB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBhdHRhY2hlZCB0byBhdm9pZCB1bmRlZmluZWQgcmVmZXJlbmNlIGVycm9yc1xuXG4gICAgICBwYXJzZXIubWFuaWZlc3QuYXR0cmlidXRlcyA9IHBhcnNlci5tYW5pZmVzdC5hdHRyaWJ1dGVzIHx8IHt9OyAvLyBtZXJnZSB0aGlzIHBsYXlsaXN0IGludG8gdGhlIG1hc3RlclxuXG4gICAgICB2YXIgdXBkYXRlID0gdXBkYXRlTWFzdGVyKHRoaXMubWFzdGVyLCBwYXJzZXIubWFuaWZlc3QpO1xuICAgICAgdGhpcy50YXJnZXREdXJhdGlvbiA9IHBhcnNlci5tYW5pZmVzdC50YXJnZXREdXJhdGlvbjtcblxuICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLm1hc3RlciA9IHVwZGF0ZTtcbiAgICAgICAgdGhpcy5tZWRpYV8gPSB0aGlzLm1hc3Rlci5wbGF5bGlzdHNbcGFyc2VyLm1hbmlmZXN0LnVyaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3BsYXlsaXN0dW5jaGFuZ2VkJyk7XG4gICAgICB9IC8vIHJlZnJlc2ggbGl2ZSBwbGF5bGlzdHMgYWZ0ZXIgYSB0YXJnZXQgZHVyYXRpb24gcGFzc2VzXG5cblxuICAgICAgaWYgKCF0aGlzLm1lZGlhKCkuZW5kTGlzdCkge1xuICAgICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQpO1xuICAgICAgICB0aGlzLm1lZGlhVXBkYXRlVGltZW91dCA9IHdpbmRvdyQxLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi50cmlnZ2VyKCdtZWRpYXVwZGF0ZXRpbWVvdXQnKTtcbiAgICAgICAgfSwgcmVmcmVzaERlbGF5KHRoaXMubWVkaWEoKSwgISF1cGRhdGUpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmlnZ2VyKCdsb2FkZWRwbGF5bGlzdCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbnkgb3V0c3RhbmRpbmcgd29yayBhbmQgY2xlYW4gdXAuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Rpc3Bvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgdGhpcy5zdG9wUmVxdWVzdCgpO1xuICAgICAgd2luZG93JDEuY2xlYXJUaW1lb3V0KHRoaXMubWVkaWFVcGRhdGVUaW1lb3V0KTtcbiAgICAgIHdpbmRvdyQxLmNsZWFyVGltZW91dCh0aGlzLmZpbmFsUmVuZGl0aW9uVGltZW91dCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RvcFJlcXVlc3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdG9wUmVxdWVzdCgpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdmFyIG9sZFJlcXVlc3QgPSB0aGlzLnJlcXVlc3Q7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IG51bGw7XG4gICAgICAgIG9sZFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgb2xkUmVxdWVzdC5hYm9ydCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhbGxlZCB3aXRob3V0IGFueSBhcmd1bWVudHMsIHJldHVybnMgdGhlIGN1cnJlbnRseVxuICAgICAqIGFjdGl2ZSBtZWRpYSBwbGF5bGlzdC4gV2hlbiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCxcbiAgICAgKiB0cmlnZ2VycyB0aGUgcGxheWxpc3QgbG9hZGVyIHRvIGFzeW5jaHJvbm91c2x5IHN3aXRjaCB0byB0aGVcbiAgICAgKiBzcGVjaWZpZWQgbWVkaWEgcGxheWxpc3QuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2hpbGUgdGhlXG4gICAgICogbG9hZGVyIGlzIGluIHRoZSBIQVZFX05PVEhJTkcgY2F1c2VzIGFuIGVycm9yIHRvIGJlIGVtaXR0ZWRcbiAgICAgKiBidXQgb3RoZXJ3aXNlIGhhcyBubyBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IHBsYXlsaXN0IHRoZSBwYXJzZWQgbWVkaWEgcGxheWxpc3RcbiAgICAgKiBvYmplY3QgdG8gc3dpdGNoIHRvXG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gaXMgdGhpcyB0aGUgbGFzdCBhdmFpbGFibGUgcGxheWxpc3RcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1BsYXlsaXN0fSB0aGUgY3VycmVudCBsb2FkZWQgbWVkaWFcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbWVkaWEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtZWRpYShwbGF5bGlzdCwgaXNGaW5hbFJlbmRpdGlvbikge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7IC8vIGdldHRlclxuXG5cbiAgICAgIGlmICghcGxheWxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFfO1xuICAgICAgfSAvLyBzZXR0ZXJcblxuXG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ0hBVkVfTk9USElORycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dpdGNoIG1lZGlhIHBsYXlsaXN0IGZyb20gJyArIHRoaXMuc3RhdGUpO1xuICAgICAgfSAvLyBmaW5kIHRoZSBwbGF5bGlzdCBvYmplY3QgaWYgdGhlIHRhcmdldCBwbGF5bGlzdCBoYXMgYmVlblxuICAgICAgLy8gc3BlY2lmaWVkIGJ5IFVSSVxuXG5cbiAgICAgIGlmICh0eXBlb2YgcGxheWxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXN0ZXIucGxheWxpc3RzW3BsYXlsaXN0XSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwbGF5bGlzdCBVUkk6ICcgKyBwbGF5bGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBwbGF5bGlzdCA9IHRoaXMubWFzdGVyLnBsYXlsaXN0c1twbGF5bGlzdF07XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdyQxLmNsZWFyVGltZW91dCh0aGlzLmZpbmFsUmVuZGl0aW9uVGltZW91dCk7XG5cbiAgICAgIGlmIChpc0ZpbmFsUmVuZGl0aW9uKSB7XG4gICAgICAgIHZhciBkZWxheSA9IHBsYXlsaXN0LnRhcmdldER1cmF0aW9uIC8gMiAqIDEwMDAgfHwgNSAqIDEwMDA7XG4gICAgICAgIHRoaXMuZmluYWxSZW5kaXRpb25UaW1lb3V0ID0gd2luZG93JDEuc2V0VGltZW91dCh0aGlzLm1lZGlhLmJpbmQodGhpcywgcGxheWxpc3QsIGZhbHNlKSwgZGVsYXkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydGluZ1N0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgIHZhciBtZWRpYUNoYW5nZSA9ICF0aGlzLm1lZGlhXyB8fCBwbGF5bGlzdC51cmkgIT09IHRoaXMubWVkaWFfLnVyaTsgLy8gc3dpdGNoIHRvIGZ1bGx5IGxvYWRlZCBwbGF5bGlzdHMgaW1tZWRpYXRlbHlcblxuICAgICAgaWYgKHRoaXMubWFzdGVyLnBsYXlsaXN0c1twbGF5bGlzdC51cmldLmVuZExpc3QpIHtcbiAgICAgICAgLy8gYWJvcnQgb3V0c3RhbmRpbmcgcGxheWxpc3QgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgICAgIHRoaXMucmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgIHRoaXMucmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gJ0hBVkVfTUVUQURBVEEnO1xuICAgICAgICB0aGlzLm1lZGlhXyA9IHBsYXlsaXN0OyAvLyB0cmlnZ2VyIG1lZGlhIGNoYW5nZSBpZiB0aGUgYWN0aXZlIG1lZGlhIGhhcyBiZWVuIHVwZGF0ZWRcblxuICAgICAgICBpZiAobWVkaWFDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ21lZGlhY2hhbmdpbmcnKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ21lZGlhY2hhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHN3aXRjaGluZyB0byB0aGUgYWN0aXZlIHBsYXlsaXN0IGlzIGEgbm8tb3BcblxuXG4gICAgICBpZiAoIW1lZGlhQ2hhbmdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9ICdTV0lUQ0hJTkdfTUVESUEnOyAvLyB0aGVyZSBpcyBhbHJlYWR5IGFuIG91dHN0YW5kaW5nIHBsYXlsaXN0IHJlcXVlc3RcblxuICAgICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgICBpZiAocGxheWxpc3QucmVzb2x2ZWRVcmkgPT09IHRoaXMucmVxdWVzdC51cmwpIHtcbiAgICAgICAgICAvLyByZXF1ZXN0aW5nIHRvIHN3aXRjaCB0byB0aGUgc2FtZSBwbGF5bGlzdCBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgIC8vIGhhcyBubyBlZmZlY3QgYWZ0ZXIgdGhlIGZpcnN0XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSBudWxsO1xuICAgICAgfSAvLyByZXF1ZXN0IHRoZSBuZXcgcGxheWxpc3RcblxuXG4gICAgICBpZiAodGhpcy5tZWRpYV8pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdtZWRpYWNoYW5naW5nJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdCA9IHRoaXMuaGxzXy54aHIoe1xuICAgICAgICB1cmk6IHBsYXlsaXN0LnJlc29sdmVkVXJpLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyb3IsIHJlcSkge1xuICAgICAgICAvLyBkaXNwb3NlZFxuICAgICAgICBpZiAoIV90aGlzMy5yZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGxheWxpc3QucmVzb2x2ZWRVcmkgPSByZXNvbHZlTWFuaWZlc3RSZWRpcmVjdChfdGhpczMuaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHMsIHBsYXlsaXN0LnJlc29sdmVkVXJpLCByZXEpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBfdGhpczMucGxheWxpc3RSZXF1ZXN0RXJyb3IoX3RoaXMzLnJlcXVlc3QsIHBsYXlsaXN0LnVyaSwgc3RhcnRpbmdTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczMuaGF2ZU1ldGFkYXRhKHJlcSwgcGxheWxpc3QudXJpKTsgLy8gZmlyZSBsb2FkZWRtZXRhZGF0YSB0aGUgZmlyc3QgdGltZSBhIG1lZGlhIHBsYXlsaXN0IGlzIGxvYWRlZFxuXG5cbiAgICAgICAgaWYgKHN0YXJ0aW5nU3RhdGUgPT09ICdIQVZFX01BU1RFUicpIHtcbiAgICAgICAgICBfdGhpczMudHJpZ2dlcignbG9hZGVkbWV0YWRhdGEnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczMudHJpZ2dlcignbWVkaWFjaGFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHBhdXNlIGxvYWRpbmcgb2YgdGhlIHBsYXlsaXN0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3BhdXNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgICB0aGlzLnN0b3BSZXF1ZXN0KCk7XG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQpO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ0hBVkVfTk9USElORycpIHtcbiAgICAgICAgLy8gSWYgd2UgcGF1c2UgdGhlIGxvYWRlciBiZWZvcmUgYW55IGRhdGEgaGFzIGJlZW4gcmV0cmlldmVkLCBpdHMgYXMgaWYgd2UgbmV2ZXJcbiAgICAgICAgLy8gc3RhcnRlZCwgc28gcmVzZXQgdG8gYW4gdW5zdGFydGVkIHN0YXRlLlxuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIH0gLy8gTmVlZCB0byByZXN0b3JlIHN0YXRlIG5vdyB0aGF0IG5vIGFjdGl2aXR5IGlzIGhhcHBlbmluZ1xuXG5cbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnU1dJVENISU5HX01FRElBJykge1xuICAgICAgICAvLyBpZiB0aGUgbG9hZGVyIHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBzd2l0Y2hpbmcgbWVkaWEsIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIHRvXG4gICAgICAgIC8vIEhBVkVfTUFTVEVSIG9yIEhBVkVfTUVUQURBVEEgZGVwZW5kaW5nIG9uIGlmIHRoZSBsb2FkZXIgaGFzIGxvYWRlZCBhIG1lZGlhXG4gICAgICAgIC8vIHBsYXlsaXN0IHlldC4gVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBleGlzdGVuY2Ugb2YgbG9hZGVyLm1lZGlhX1xuICAgICAgICBpZiAodGhpcy5tZWRpYV8pIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gJ0hBVkVfTUVUQURBVEEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhdGUgPSAnSEFWRV9NQVNURVInO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09ICdIQVZFX0NVUlJFTlRfTUVUQURBVEEnKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnSEFWRV9NRVRBREFUQSc7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN0YXJ0IGxvYWRpbmcgb2YgdGhlIHBsYXlsaXN0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2xvYWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkKGlzRmluYWxSZW5kaXRpb24pIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQpO1xuICAgICAgdmFyIG1lZGlhID0gdGhpcy5tZWRpYSgpO1xuXG4gICAgICBpZiAoaXNGaW5hbFJlbmRpdGlvbikge1xuICAgICAgICB2YXIgZGVsYXkgPSBtZWRpYSA/IG1lZGlhLnRhcmdldER1cmF0aW9uIC8gMiAqIDEwMDAgOiA1ICogMTAwMDtcbiAgICAgICAgdGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQgPSB3aW5kb3ckMS5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LmxvYWQoKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEgJiYgIW1lZGlhLmVuZExpc3QpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdtZWRpYXVwZGF0ZXRpbWVvdXQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignbG9hZGVkcGxheWxpc3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc3RhcnQgbG9hZGluZyBvZiB0aGUgcGxheWxpc3RcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc3RhcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlOyAvLyByZXF1ZXN0IHRoZSBzcGVjaWZpZWQgVVJMXG5cbiAgICAgIHRoaXMucmVxdWVzdCA9IHRoaXMuaGxzXy54aHIoe1xuICAgICAgICB1cmk6IHRoaXMuc3JjVXJsLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyb3IsIHJlcSkge1xuICAgICAgICAvLyBkaXNwb3NlZFxuICAgICAgICBpZiAoIV90aGlzNS5yZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGNsZWFyIHRoZSBsb2FkZXIncyByZXF1ZXN0IHJlZmVyZW5jZVxuXG5cbiAgICAgICAgX3RoaXM1LnJlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIF90aGlzNS5lcnJvciA9IHtcbiAgICAgICAgICAgIHN0YXR1czogcmVxLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdITFMgcGxheWxpc3QgcmVxdWVzdCBlcnJvciBhdCBVUkw6ICcgKyBfdGhpczUuc3JjVXJsICsgJy4nLFxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiByZXEucmVzcG9uc2VUZXh0LFxuICAgICAgICAgICAgLy8gTUVESUFfRVJSX05FVFdPUktcbiAgICAgICAgICAgIGNvZGU6IDJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKF90aGlzNS5zdGF0ZSA9PT0gJ0hBVkVfTk9USElORycpIHtcbiAgICAgICAgICAgIF90aGlzNS5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzNS50cmlnZ2VyKCdlcnJvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIoKTsgLy8gYWRkaW5nIGN1c3RvbSB0YWcgcGFyc2Vyc1xuXG4gICAgICAgIF90aGlzNS5jdXN0b21UYWdQYXJzZXJzLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbVBhcnNlcikge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuYWRkUGFyc2VyKGN1c3RvbVBhcnNlcik7XG4gICAgICAgIH0pOyAvLyBhZGRpbmcgY3VzdG9tIHRhZyBtYXBwZXJzXG5cblxuICAgICAgICBfdGhpczUuY3VzdG9tVGFnTWFwcGVycy5mb3JFYWNoKGZ1bmN0aW9uIChtYXBwZXIpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmFkZFRhZ01hcHBlcihtYXBwZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZXIucHVzaChyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgcGFyc2VyLmVuZCgpO1xuICAgICAgICBfdGhpczUuc3RhdGUgPSAnSEFWRV9NQVNURVInO1xuICAgICAgICBfdGhpczUuc3JjVXJsID0gcmVzb2x2ZU1hbmlmZXN0UmVkaXJlY3QoX3RoaXM1LmhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzLCBfdGhpczUuc3JjVXJsLCByZXEpO1xuICAgICAgICBwYXJzZXIubWFuaWZlc3QudXJpID0gX3RoaXM1LnNyY1VybDsgLy8gbG9hZGVkIGEgbWFzdGVyIHBsYXlsaXN0XG5cbiAgICAgICAgaWYgKHBhcnNlci5tYW5pZmVzdC5wbGF5bGlzdHMpIHtcbiAgICAgICAgICBfdGhpczUubWFzdGVyID0gcGFyc2VyLm1hbmlmZXN0O1xuICAgICAgICAgIHNldHVwTWVkaWFQbGF5bGlzdHMoX3RoaXM1Lm1hc3Rlcik7XG4gICAgICAgICAgcmVzb2x2ZU1lZGlhR3JvdXBVcmlzKF90aGlzNS5tYXN0ZXIpO1xuXG4gICAgICAgICAgX3RoaXM1LnRyaWdnZXIoJ2xvYWRlZHBsYXlsaXN0Jyk7XG5cbiAgICAgICAgICBpZiAoIV90aGlzNS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICAvLyBubyBtZWRpYSBwbGF5bGlzdCB3YXMgc3BlY2lmaWNhbGx5IHNlbGVjdGVkIHNvIHN0YXJ0XG4gICAgICAgICAgICAvLyBmcm9tIHRoZSBmaXJzdCBsaXN0ZWQgb25lXG4gICAgICAgICAgICBfdGhpczUubWVkaWEocGFyc2VyLm1hbmlmZXN0LnBsYXlsaXN0c1swXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGxvYWRlZCBhIG1lZGlhIHBsYXlsaXN0XG4gICAgICAgIC8vIGluZmVyIGEgbWFzdGVyIHBsYXlsaXN0IGlmIG5vbmUgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkXG5cblxuICAgICAgICBfdGhpczUubWFzdGVyID0ge1xuICAgICAgICAgIG1lZGlhR3JvdXBzOiB7XG4gICAgICAgICAgICAnQVVESU8nOiB7fSxcbiAgICAgICAgICAgICdWSURFTyc6IHt9LFxuICAgICAgICAgICAgJ0NMT1NFRC1DQVBUSU9OUyc6IHt9LFxuICAgICAgICAgICAgJ1NVQlRJVExFUyc6IHt9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cmk6IHdpbmRvdyQxLmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgcGxheWxpc3RzOiBbe1xuICAgICAgICAgICAgdXJpOiBfdGhpczUuc3JjVXJsLFxuICAgICAgICAgICAgaWQ6IDAsXG4gICAgICAgICAgICByZXNvbHZlZFVyaTogX3RoaXM1LnNyY1VybCxcbiAgICAgICAgICAgIC8vIG0zdTgtcGFyc2VyIGRvZXMgbm90IGF0dGFjaCBhbiBhdHRyaWJ1dGVzIHByb3BlcnR5IHRvIG1lZGlhIHBsYXlsaXN0cyBzbyBtYWtlXG4gICAgICAgICAgICAvLyBzdXJlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGF0dGFjaGVkIHRvIGF2b2lkIHVuZGVmaW5lZCByZWZlcmVuY2UgZXJyb3JzXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICAgIF90aGlzNS5tYXN0ZXIucGxheWxpc3RzW190aGlzNS5zcmNVcmxdID0gX3RoaXM1Lm1hc3Rlci5wbGF5bGlzdHNbMF07XG5cbiAgICAgICAgX3RoaXM1LmhhdmVNZXRhZGF0YShyZXEsIF90aGlzNS5zcmNVcmwpO1xuXG4gICAgICAgIHJldHVybiBfdGhpczUudHJpZ2dlcignbG9hZGVkbWV0YWRhdGEnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUGxheWxpc3RMb2FkZXI7XG59KEV2ZW50VGFyZ2V0JDEpO1xuLyoqXG4gKiBAZmlsZSBwbGF5bGlzdC5qc1xuICpcbiAqIFBsYXlsaXN0IHJlbGF0ZWQgdXRpbGl0aWVzLlxuICovXG5cblxudmFyIGNyZWF0ZVRpbWVSYW5nZSA9IHZpZGVvanMkMS5jcmVhdGVUaW1lUmFuZ2U7XG4vKipcbiAqIHdhbGsgYmFja3dhcmQgdW50aWwgd2UgZmluZCBhIGR1cmF0aW9uIHdlIGNhbiB1c2VcbiAqIG9yIHJldHVybiBhIGZhaWx1cmVcbiAqXG4gKiBAcGFyYW0ge1BsYXlsaXN0fSBwbGF5bGlzdCB0aGUgcGxheWxpc3QgdG8gd2FsayB0aHJvdWdoXG4gKiBAcGFyYW0ge051bWJlcn0gZW5kU2VxdWVuY2UgdGhlIG1lZGlhU2VxdWVuY2UgdG8gc3RvcCB3YWxraW5nIG9uXG4gKi9cblxudmFyIGJhY2t3YXJkRHVyYXRpb24gPSBmdW5jdGlvbiBiYWNrd2FyZER1cmF0aW9uKHBsYXlsaXN0LCBlbmRTZXF1ZW5jZSkge1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIGkgPSBlbmRTZXF1ZW5jZSAtIHBsYXlsaXN0Lm1lZGlhU2VxdWVuY2U7IC8vIGlmIGEgc3RhcnQgdGltZSBpcyBhdmFpbGFibGUgZm9yIHNlZ21lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nXG4gIC8vIHRoZSBpbnRlcnZhbCwgdXNlIGl0XG5cbiAgdmFyIHNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1tpXTsgLy8gV2FsayBiYWNrd2FyZCB1bnRpbCB3ZSBmaW5kIHRoZSBsYXRlc3Qgc2VnbWVudCB3aXRoIHRpbWVsaW5lXG4gIC8vIGluZm9ybWF0aW9uIHRoYXQgaXMgZWFybGllciB0aGFuIGVuZFNlcXVlbmNlXG5cbiAgaWYgKHNlZ21lbnQpIHtcbiAgICBpZiAodHlwZW9mIHNlZ21lbnQuc3RhcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHNlZ21lbnQuc3RhcnQsXG4gICAgICAgIHByZWNpc2U6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWdtZW50LmVuZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogc2VnbWVudC5lbmQgLSBzZWdtZW50LmR1cmF0aW9uLFxuICAgICAgICBwcmVjaXNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBzZWdtZW50ID0gcGxheWxpc3Quc2VnbWVudHNbaV07XG5cbiAgICBpZiAodHlwZW9mIHNlZ21lbnQuZW5kICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiByZXN1bHQgKyBzZWdtZW50LmVuZCxcbiAgICAgICAgcHJlY2lzZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gc2VnbWVudC5kdXJhdGlvbjtcblxuICAgIGlmICh0eXBlb2Ygc2VnbWVudC5zdGFydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogcmVzdWx0ICsgc2VnbWVudC5zdGFydCxcbiAgICAgICAgcHJlY2lzZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlc3VsdDogcmVzdWx0LFxuICAgIHByZWNpc2U6IGZhbHNlXG4gIH07XG59O1xuLyoqXG4gKiB3YWxrIGZvcndhcmQgdW50aWwgd2UgZmluZCBhIGR1cmF0aW9uIHdlIGNhbiB1c2VcbiAqIG9yIHJldHVybiBhIGZhaWx1cmVcbiAqXG4gKiBAcGFyYW0ge1BsYXlsaXN0fSBwbGF5bGlzdCB0aGUgcGxheWxpc3QgdG8gd2FsayB0aHJvdWdoXG4gKiBAcGFyYW0ge051bWJlcn0gZW5kU2VxdWVuY2UgdGhlIG1lZGlhU2VxdWVuY2UgdG8gc3RvcCB3YWxraW5nIG9uXG4gKi9cblxuXG52YXIgZm9yd2FyZER1cmF0aW9uID0gZnVuY3Rpb24gZm9yd2FyZER1cmF0aW9uKHBsYXlsaXN0LCBlbmRTZXF1ZW5jZSkge1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNlZ21lbnQgPSB2b2lkIDA7XG4gIHZhciBpID0gZW5kU2VxdWVuY2UgLSBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlOyAvLyBXYWxrIGZvcndhcmQgdW50aWwgd2UgZmluZCB0aGUgZWFybGllc3Qgc2VnbWVudCB3aXRoIHRpbWVsaW5lXG4gIC8vIGluZm9ybWF0aW9uXG5cbiAgZm9yICg7IGkgPCBwbGF5bGlzdC5zZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1tpXTtcblxuICAgIGlmICh0eXBlb2Ygc2VnbWVudC5zdGFydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDogc2VnbWVudC5zdGFydCAtIHJlc3VsdCxcbiAgICAgICAgcHJlY2lzZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gc2VnbWVudC5kdXJhdGlvbjtcblxuICAgIGlmICh0eXBlb2Ygc2VnbWVudC5lbmQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHNlZ21lbnQuZW5kIC0gcmVzdWx0LFxuICAgICAgICBwcmVjaXNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfSAvLyBpbmRpY2F0ZSB3ZSBkaWRuJ3QgZmluZCBhIHVzZWZ1bCBkdXJhdGlvbiBlc3RpbWF0ZVxuXG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQ6IC0xLFxuICAgIHByZWNpc2U6IGZhbHNlXG4gIH07XG59O1xuLyoqXG4gICogQ2FsY3VsYXRlIHRoZSBtZWRpYSBkdXJhdGlvbiBmcm9tIHRoZSBzZWdtZW50cyBhc3NvY2lhdGVkIHdpdGggYVxuICAqIHBsYXlsaXN0LiBUaGUgZHVyYXRpb24gb2YgYSBzdWJpbnRlcnZhbCBvZiB0aGUgYXZhaWxhYmxlIHNlZ21lbnRzXG4gICogbWF5IGJlIGNhbGN1bGF0ZWQgYnkgc3BlY2lmeWluZyBhbiBlbmQgaW5kZXguXG4gICpcbiAgKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgYSBtZWRpYSBwbGF5bGlzdCBvYmplY3RcbiAgKiBAcGFyYW0ge051bWJlcj19IGVuZFNlcXVlbmNlIGFuIGV4Y2x1c2l2ZSB1cHBlciBib3VuZGFyeVxuICAqIGZvciB0aGUgcGxheWxpc3QuICBEZWZhdWx0cyB0byBwbGF5bGlzdCBsZW5ndGguXG4gICogQHBhcmFtIHtOdW1iZXJ9IGV4cGlyZWQgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgaGFzIGRyb3BwZWRcbiAgKiBvZmYgdGhlIGZyb250IG9mIHRoZSBwbGF5bGlzdCBpbiBhIGxpdmUgc2NlbmFyaW9cbiAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBkdXJhdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhdmFpbGFibGUgc2VnbWVudFxuICAqIGFuZCBlbmQgaW5kZXguXG4gICovXG5cblxudmFyIGludGVydmFsRHVyYXRpb24gPSBmdW5jdGlvbiBpbnRlcnZhbER1cmF0aW9uKHBsYXlsaXN0LCBlbmRTZXF1ZW5jZSwgZXhwaXJlZCkge1xuICB2YXIgYmFja3dhcmQgPSB2b2lkIDA7XG4gIHZhciBmb3J3YXJkID0gdm9pZCAwO1xuXG4gIGlmICh0eXBlb2YgZW5kU2VxdWVuY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZW5kU2VxdWVuY2UgPSBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlICsgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGVuZFNlcXVlbmNlIDwgcGxheWxpc3QubWVkaWFTZXF1ZW5jZSkge1xuICAgIHJldHVybiAwO1xuICB9IC8vIGRvIGEgYmFja3dhcmQgd2FsayB0byBlc3RpbWF0ZSB0aGUgZHVyYXRpb25cblxuXG4gIGJhY2t3YXJkID0gYmFja3dhcmREdXJhdGlvbihwbGF5bGlzdCwgZW5kU2VxdWVuY2UpO1xuXG4gIGlmIChiYWNrd2FyZC5wcmVjaXNlKSB7XG4gICAgLy8gaWYgd2Ugd2VyZSBhYmxlIHRvIGJhc2Ugb3VyIGR1cmF0aW9uIGVzdGltYXRlIG9uIHRpbWluZ1xuICAgIC8vIGluZm9ybWF0aW9uIHByb3ZpZGVkIGRpcmVjdGx5IGZyb20gdGhlIE1lZGlhIFNvdXJjZSwgcmV0dXJuXG4gICAgLy8gaXRcbiAgICByZXR1cm4gYmFja3dhcmQucmVzdWx0O1xuICB9IC8vIHdhbGsgZm9yd2FyZCB0byBzZWUgaWYgYSBwcmVjaXNlIGR1cmF0aW9uIGVzdGltYXRlIGNhbiBiZSBtYWRlXG4gIC8vIHRoYXQgd2F5XG5cblxuICBmb3J3YXJkID0gZm9yd2FyZER1cmF0aW9uKHBsYXlsaXN0LCBlbmRTZXF1ZW5jZSk7XG5cbiAgaWYgKGZvcndhcmQucHJlY2lzZSkge1xuICAgIC8vIHdlIGZvdW5kIGEgc2VnbWVudCB0aGF0IGhhcyBiZWVuIGJ1ZmZlcmVkIGFuZCBzbyBpdCdzXG4gICAgLy8gcG9zaXRpb24gaXMga25vd24gcHJlY2lzZWx5XG4gICAgcmV0dXJuIGZvcndhcmQucmVzdWx0O1xuICB9IC8vIHJldHVybiB0aGUgbGVzcy1wcmVjaXNlLCBwbGF5bGlzdC1iYXNlZCBkdXJhdGlvbiBlc3RpbWF0ZVxuXG5cbiAgcmV0dXJuIGJhY2t3YXJkLnJlc3VsdCArIGV4cGlyZWQ7XG59O1xuLyoqXG4gICogQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gb2YgYSBwbGF5bGlzdC4gSWYgYSBzdGFydCBhbmQgZW5kIGluZGV4XG4gICogYXJlIHNwZWNpZmllZCwgdGhlIGR1cmF0aW9uIHdpbGwgYmUgZm9yIHRoZSBzdWJzZXQgb2YgdGhlIG1lZGlhXG4gICogdGltZWxpbmUgYmV0d2VlbiB0aG9zZSB0d28gaW5kaWNlcy4gVGhlIHRvdGFsIGR1cmF0aW9uIGZvciBsaXZlXG4gICogcGxheWxpc3RzIGlzIGFsd2F5cyBJbmZpbml0eS5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICAqIEBwYXJhbSB7TnVtYmVyPX0gZW5kU2VxdWVuY2UgYW4gZXhjbHVzaXZlIHVwcGVyXG4gICogYm91bmRhcnkgZm9yIHRoZSBwbGF5bGlzdC4gRGVmYXVsdHMgdG8gdGhlIHBsYXlsaXN0IG1lZGlhXG4gICogc2VxdWVuY2UgbnVtYmVyIHBsdXMgaXRzIGxlbmd0aC5cbiAgKiBAcGFyYW0ge051bWJlcj19IGV4cGlyZWQgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgaGFzXG4gICogZHJvcHBlZCBvZmYgdGhlIGZyb250IG9mIHRoZSBwbGF5bGlzdCBpbiBhIGxpdmUgc2NlbmFyaW9cbiAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBkdXJhdGlvbiBiZXR3ZWVuIHRoZSBzdGFydCBpbmRleCBhbmQgZW5kXG4gICogaW5kZXguXG4gICovXG5cblxudmFyIGR1cmF0aW9uID0gZnVuY3Rpb24gZHVyYXRpb24ocGxheWxpc3QsIGVuZFNlcXVlbmNlLCBleHBpcmVkKSB7XG4gIGlmICghcGxheWxpc3QpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwaXJlZCAhPT0gJ251bWJlcicpIHtcbiAgICBleHBpcmVkID0gMDtcbiAgfSAvLyBpZiBhIHNsaWNlIG9mIHRoZSB0b3RhbCBkdXJhdGlvbiBpcyBub3QgcmVxdWVzdGVkLCB1c2VcbiAgLy8gcGxheWxpc3QtbGV2ZWwgZHVyYXRpb24gaW5kaWNhdG9ycyB3aGVuIHRoZXkncmUgcHJlc2VudFxuXG5cbiAgaWYgKHR5cGVvZiBlbmRTZXF1ZW5jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBpZiBwcmVzZW50LCB1c2UgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBpbiB0aGUgcGxheWxpc3RcbiAgICBpZiAocGxheWxpc3QudG90YWxEdXJhdGlvbikge1xuICAgICAgcmV0dXJuIHBsYXlsaXN0LnRvdGFsRHVyYXRpb247XG4gICAgfSAvLyBkdXJhdGlvbiBzaG91bGQgYmUgSW5maW5pdHkgZm9yIGxpdmUgcGxheWxpc3RzXG5cblxuICAgIGlmICghcGxheWxpc3QuZW5kTGlzdCkge1xuICAgICAgcmV0dXJuIHdpbmRvdyQxLkluZmluaXR5O1xuICAgIH1cbiAgfSAvLyBjYWxjdWxhdGUgdGhlIHRvdGFsIGR1cmF0aW9uIGJhc2VkIG9uIHRoZSBzZWdtZW50IGR1cmF0aW9uc1xuXG5cbiAgcmV0dXJuIGludGVydmFsRHVyYXRpb24ocGxheWxpc3QsIGVuZFNlcXVlbmNlLCBleHBpcmVkKTtcbn07XG4vKipcbiAgKiBDYWxjdWxhdGUgdGhlIHRpbWUgYmV0d2VlbiB0d28gaW5kZXhlcyBpbiB0aGUgY3VycmVudCBwbGF5bGlzdFxuICAqIG5laWdodCB0aGUgc3RhcnQtIG5vciB0aGUgZW5kLWluZGV4IG5lZWQgdG8gYmUgd2l0aGluIHRoZSBjdXJyZW50XG4gICogcGxheWxpc3QgaW4gd2hpY2ggY2FzZSwgdGhlIHRhcmdldER1cmF0aW9uIG9mIHRoZSBwbGF5bGlzdCBpcyB1c2VkXG4gICogdG8gYXBwcm94aW1hdGUgdGhlIGR1cmF0aW9ucyBvZiB0aGUgc2VnbWVudHNcbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydEluZGV4XG4gICogQHBhcmFtIHtOdW1iZXJ9IGVuZEluZGV4XG4gICogQHJldHVybiB7TnVtYmVyfSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBzdGFydEluZGV4IGFuZCBlbmRJbmRleFxuICAqL1xuXG5cbnZhciBzdW1EdXJhdGlvbnMgPSBmdW5jdGlvbiBzdW1EdXJhdGlvbnMocGxheWxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIHZhciBkdXJhdGlvbnMgPSAwO1xuXG4gIGlmIChzdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICB2YXIgX3JlZiA9IFtlbmRJbmRleCwgc3RhcnRJbmRleF07XG4gICAgc3RhcnRJbmRleCA9IF9yZWZbMF07XG4gICAgZW5kSW5kZXggPSBfcmVmWzFdO1xuICB9XG5cbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBNYXRoLm1pbigwLCBlbmRJbmRleCk7IGkrKykge1xuICAgICAgZHVyYXRpb25zICs9IHBsYXlsaXN0LnRhcmdldER1cmF0aW9uO1xuICAgIH1cblxuICAgIHN0YXJ0SW5kZXggPSAwO1xuICB9XG5cbiAgZm9yICh2YXIgX2kgPSBzdGFydEluZGV4OyBfaSA8IGVuZEluZGV4OyBfaSsrKSB7XG4gICAgZHVyYXRpb25zICs9IHBsYXlsaXN0LnNlZ21lbnRzW19pXS5kdXJhdGlvbjtcbiAgfVxuXG4gIHJldHVybiBkdXJhdGlvbnM7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBtZWRpYSBpbmRleCBvZiB0aGUgc2VnbWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzYWZlIGVkZ2Ugb2YgdGhlIGxpdmVcbiAqIHdpbmRvdyB3aGljaCBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGxhc3Qgc2VnbWVudCBwbHVzIDIgdGFyZ2V0IGR1cmF0aW9ucyBmcm9tIHRoZSBlbmRcbiAqIG9mIHRoZSBwbGF5bGlzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3RcbiAqICAgICAgICBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7TnVtYmVyfVxuICogICAgICAgICBUaGUgbWVkaWEgaW5kZXggb2YgdGhlIHNlZ21lbnQgYXQgdGhlIHNhZmUgbGl2ZSBwb2ludC4gMCBpZiB0aGVyZSBpcyBubyBcInNhZmVcIlxuICogICAgICAgICBwb2ludC5cbiAqIEBmdW5jdGlvbiBzYWZlTGl2ZUluZGV4XG4gKi9cblxuXG52YXIgc2FmZUxpdmVJbmRleCA9IGZ1bmN0aW9uIHNhZmVMaXZlSW5kZXgocGxheWxpc3QpIHtcbiAgaWYgKCFwbGF5bGlzdC5zZWdtZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBpID0gcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgdmFyIGRpc3RhbmNlRnJvbUVuZCA9IHBsYXlsaXN0LnNlZ21lbnRzW2ldLmR1cmF0aW9uIHx8IHBsYXlsaXN0LnRhcmdldER1cmF0aW9uO1xuICB2YXIgc2FmZURpc3RhbmNlID0gZGlzdGFuY2VGcm9tRW5kICsgcGxheWxpc3QudGFyZ2V0RHVyYXRpb24gKiAyO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBkaXN0YW5jZUZyb21FbmQgKz0gcGxheWxpc3Quc2VnbWVudHNbaV0uZHVyYXRpb247XG5cbiAgICBpZiAoZGlzdGFuY2VGcm9tRW5kID49IHNhZmVEaXN0YW5jZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4KDAsIGkpO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcGxheWxpc3QgZW5kIHRpbWVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgYSBtZWRpYSBwbGF5bGlzdCBvYmplY3RcbiAqIEBwYXJhbSB7TnVtYmVyPX0gZXhwaXJlZCB0aGUgYW1vdW50IG9mIHRpbWUgdGhhdCBoYXNcbiAqICAgICAgICAgICAgICAgICAgZHJvcHBlZCBvZmYgdGhlIGZyb250IG9mIHRoZSBwbGF5bGlzdCBpbiBhIGxpdmUgc2NlbmFyaW9cbiAqIEBwYXJhbSB7Qm9vbGVhbnxmYWxzZX0gdXNlU2FmZUxpdmVFbmQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlsaXN0IGVuZCBjYWxjdWxhdGlvbiBzaG91bGQgY29uc2lkZXIgdGhlIHNhZmUgbGl2ZSBlbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgKHRydW5jYXRlIHRoZSBwbGF5bGlzdCBlbmQgYnkgdGhyZWUgc2VnbWVudHMpLiBUaGlzIGlzIG5vcm1hbGx5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGNhbGN1bGF0aW5nIHRoZSBlbmQgb2YgdGhlIHBsYXlsaXN0J3Mgc2Vla2FibGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgZW5kIHRpbWUgb2YgcGxheWxpc3RcbiAqIEBmdW5jdGlvbiBwbGF5bGlzdEVuZFxuICovXG5cblxudmFyIHBsYXlsaXN0RW5kID0gZnVuY3Rpb24gcGxheWxpc3RFbmQocGxheWxpc3QsIGV4cGlyZWQsIHVzZVNhZmVMaXZlRW5kKSB7XG4gIGlmICghcGxheWxpc3QgfHwgIXBsYXlsaXN0LnNlZ21lbnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAocGxheWxpc3QuZW5kTGlzdCkge1xuICAgIHJldHVybiBkdXJhdGlvbihwbGF5bGlzdCk7XG4gIH1cblxuICBpZiAoZXhwaXJlZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwaXJlZCA9IGV4cGlyZWQgfHwgMDtcbiAgdmFyIGVuZFNlcXVlbmNlID0gdXNlU2FmZUxpdmVFbmQgPyBzYWZlTGl2ZUluZGV4KHBsYXlsaXN0KSA6IHBsYXlsaXN0LnNlZ21lbnRzLmxlbmd0aDtcbiAgcmV0dXJuIGludGVydmFsRHVyYXRpb24ocGxheWxpc3QsIHBsYXlsaXN0Lm1lZGlhU2VxdWVuY2UgKyBlbmRTZXF1ZW5jZSwgZXhwaXJlZCk7XG59O1xuLyoqXG4gICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0aGF0IGlzIGN1cnJlbnRseSBzZWVrYWJsZSBpbiBhXG4gICogcGxheWxpc3QuIFRoZSByZXR1cm5lZCB0aW1lIHJhbmdlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGVhcmxpZXN0XG4gICogbW9tZW50IGluIHRoZSBzcGVjaWZpZWQgcGxheWxpc3QgdGhhdCBpcyBzdGlsbCBhdmFpbGFibGUuIEEgZnVsbFxuICAqIHNlZWthYmxlIGltcGxlbWVudGF0aW9uIGZvciBsaXZlIHN0cmVhbXMgd291bGQgbmVlZCB0byBvZmZzZXRcbiAgKiB0aGVzZSB2YWx1ZXMgYnkgdGhlIGR1cmF0aW9uIG9mIGNvbnRlbnQgdGhhdCBoYXMgZXhwaXJlZCBmcm9tIHRoZVxuICAqIHN0cmVhbS5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICAqIGRyb3BwZWQgb2ZmIHRoZSBmcm9udCBvZiB0aGUgcGxheWxpc3QgaW4gYSBsaXZlIHNjZW5hcmlvXG4gICogQHBhcmFtIHtOdW1iZXI9fSBleHBpcmVkIHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IGhhc1xuICAqIGRyb3BwZWQgb2ZmIHRoZSBmcm9udCBvZiB0aGUgcGxheWxpc3QgaW4gYSBsaXZlIHNjZW5hcmlvXG4gICogQHJldHVybiB7VGltZVJhbmdlc30gdGhlIHBlcmlvZHMgb2YgdGltZSB0aGF0IGFyZSB2YWxpZCB0YXJnZXRzXG4gICogZm9yIHNlZWtpbmdcbiAgKi9cblxuXG52YXIgc2Vla2FibGUgPSBmdW5jdGlvbiBzZWVrYWJsZShwbGF5bGlzdCwgZXhwaXJlZCkge1xuICB2YXIgdXNlU2FmZUxpdmVFbmQgPSB0cnVlO1xuICB2YXIgc2Vla2FibGVTdGFydCA9IGV4cGlyZWQgfHwgMDtcbiAgdmFyIHNlZWthYmxlRW5kID0gcGxheWxpc3RFbmQocGxheWxpc3QsIGV4cGlyZWQsIHVzZVNhZmVMaXZlRW5kKTtcblxuICBpZiAoc2Vla2FibGVFbmQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZVJhbmdlKCk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlVGltZVJhbmdlKHNlZWthYmxlU3RhcnQsIHNlZWthYmxlRW5kKTtcbn07XG5cbnZhciBpc1dob2xlTnVtYmVyID0gZnVuY3Rpb24gaXNXaG9sZU51bWJlcihudW0pIHtcbiAgcmV0dXJuIG51bSAtIE1hdGguZmxvb3IobnVtKSA9PT0gMDtcbn07XG5cbnZhciByb3VuZFNpZ25pZmljYW50RGlnaXQgPSBmdW5jdGlvbiByb3VuZFNpZ25pZmljYW50RGlnaXQoaW5jcmVtZW50LCBudW0pIHtcbiAgLy8gSWYgd2UgaGF2ZSBhIHdob2xlIG51bWJlciwganVzdCBhZGQgMSB0byBpdFxuICBpZiAoaXNXaG9sZU51bWJlcihudW0pKSB7XG4gICAgcmV0dXJuIG51bSArIGluY3JlbWVudCAqIDAuMTtcbiAgfVxuXG4gIHZhciBudW1EZWNpbWFsRGlnaXRzID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbnVtRGVjaW1hbERpZ2l0czsgaSsrKSB7XG4gICAgdmFyIHNjYWxlID0gTWF0aC5wb3coMTAsIGkpO1xuICAgIHZhciB0ZW1wID0gbnVtICogc2NhbGU7XG5cbiAgICBpZiAoaXNXaG9sZU51bWJlcih0ZW1wKSB8fCBpID09PSBudW1EZWNpbWFsRGlnaXRzKSB7XG4gICAgICByZXR1cm4gKHRlbXAgKyBpbmNyZW1lbnQpIC8gc2NhbGU7XG4gICAgfVxuICB9XG59O1xuXG52YXIgY2VpbExlYXN0U2lnbmlmaWNhbnREaWdpdCA9IHJvdW5kU2lnbmlmaWNhbnREaWdpdC5iaW5kKG51bGwsIDEpO1xudmFyIGZsb29yTGVhc3RTaWduaWZpY2FudERpZ2l0ID0gcm91bmRTaWduaWZpY2FudERpZ2l0LmJpbmQobnVsbCwgLTEpO1xuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGluZGV4IGFuZCBlc3RpbWF0ZWQgc3RhcnRpbmcgdGltZSBvZiB0aGUgc2VnbWVudCB0aGF0XG4gKiBjb250YWlucyBhIHNwZWNpZmllZCBwbGF5YmFjayBwb3NpdGlvbiBpbiBhIG1lZGlhIHBsYXlsaXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCB0aGUgbWVkaWEgcGxheWxpc3QgdG8gcXVlcnlcbiAqIEBwYXJhbSB7TnVtYmVyfSBjdXJyZW50VGltZSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIGVhcmxpZXN0XG4gKiBwb3NzaWJsZSBwb3NpdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNvbnRhaW5pbmcgc2VnbWVudCBmb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydEluZGV4XG4gKiBAcGFyYW0ge051bWJlcn0gc3RhcnRUaW1lXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxudmFyIGdldE1lZGlhSW5mb0ZvclRpbWUgPSBmdW5jdGlvbiBnZXRNZWRpYUluZm9Gb3JUaW1lKHBsYXlsaXN0LCBjdXJyZW50VGltZSwgc3RhcnRJbmRleCwgc3RhcnRUaW1lKSB7XG4gIHZhciBpID0gdm9pZCAwO1xuICB2YXIgc2VnbWVudCA9IHZvaWQgMDtcbiAgdmFyIG51bVNlZ21lbnRzID0gcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoO1xuICB2YXIgdGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lO1xuXG4gIGlmICh0aW1lIDwgMCkge1xuICAgIC8vIFdhbGsgYmFja3dhcmQgZnJvbSBzdGFydEluZGV4IGluIHRoZSBwbGF5bGlzdCwgYWRkaW5nIGR1cmF0aW9uc1xuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBzZWdtZW50IHRoYXQgY29udGFpbnMgYHRpbWVgIGFuZCByZXR1cm4gaXRcbiAgICBpZiAoc3RhcnRJbmRleCA+IDApIHtcbiAgICAgIGZvciAoaSA9IHN0YXJ0SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBzZWdtZW50ID0gcGxheWxpc3Quc2VnbWVudHNbaV07XG4gICAgICAgIHRpbWUgKz0gZmxvb3JMZWFzdFNpZ25pZmljYW50RGlnaXQoc2VnbWVudC5kdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKHRpbWUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lZGlhSW5kZXg6IGksXG4gICAgICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSAtIHN1bUR1cmF0aW9ucyhwbGF5bGlzdCwgc3RhcnRJbmRleCwgaSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZ29vZCBzZWdtZW50IHdpdGhpbiB0aGUgcGxheWxpc3RcbiAgICAvLyBzbyBzZWxlY3QgdGhlIGZpcnN0IHNlZ21lbnRcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1lZGlhSW5kZXg6IDAsXG4gICAgICBzdGFydFRpbWU6IGN1cnJlbnRUaW1lXG4gICAgfTtcbiAgfSAvLyBXaGVuIHN0YXJ0SW5kZXggaXMgbmVnYXRpdmUsIHdlIGZpcnN0IHdhbGsgZm9yd2FyZCB0byBmaXJzdCBzZWdtZW50XG4gIC8vIGFkZGluZyB0YXJnZXQgZHVyYXRpb25zLiBJZiB3ZSBcInJ1biBvdXQgb2YgdGltZVwiIGJlZm9yZSBnZXR0aW5nIHRvXG4gIC8vIHRoZSBmaXJzdCBzZWdtZW50LCByZXR1cm4gdGhlIGZpcnN0IHNlZ21lbnRcblxuXG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGZvciAoaSA9IHN0YXJ0SW5kZXg7IGkgPCAwOyBpKyspIHtcbiAgICAgIHRpbWUgLT0gcGxheWxpc3QudGFyZ2V0RHVyYXRpb247XG5cbiAgICAgIGlmICh0aW1lIDwgMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lZGlhSW5kZXg6IDAsXG4gICAgICAgICAgc3RhcnRUaW1lOiBjdXJyZW50VGltZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0SW5kZXggPSAwO1xuICB9IC8vIFdhbGsgZm9yd2FyZCBmcm9tIHN0YXJ0SW5kZXggaW4gdGhlIHBsYXlsaXN0LCBzdWJ0cmFjdGluZyBkdXJhdGlvbnNcbiAgLy8gdW50aWwgd2UgZmluZCBhIHNlZ21lbnQgdGhhdCBjb250YWlucyBgdGltZWAgYW5kIHJldHVybiBpdFxuXG5cbiAgZm9yIChpID0gc3RhcnRJbmRleDsgaSA8IG51bVNlZ21lbnRzOyBpKyspIHtcbiAgICBzZWdtZW50ID0gcGxheWxpc3Quc2VnbWVudHNbaV07XG4gICAgdGltZSAtPSBjZWlsTGVhc3RTaWduaWZpY2FudERpZ2l0KHNlZ21lbnQuZHVyYXRpb24pO1xuXG4gICAgaWYgKHRpbWUgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZWRpYUluZGV4OiBpLFxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSArIHN1bUR1cmF0aW9ucyhwbGF5bGlzdCwgc3RhcnRJbmRleCwgaSlcbiAgICAgIH07XG4gICAgfVxuICB9IC8vIFdlIGFyZSBvdXQgb2YgcG9zc2libGUgY2FuZGlkYXRlcyBzbyBsb2FkIHRoZSBsYXN0IG9uZS4uLlxuXG5cbiAgcmV0dXJuIHtcbiAgICBtZWRpYUluZGV4OiBudW1TZWdtZW50cyAtIDEsXG4gICAgc3RhcnRUaW1lOiBjdXJyZW50VGltZVxuICB9O1xufTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGxheWxpc3QgaXMgYmxhY2tsaXN0ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCB0aGUgbWVkaWEgcGxheWxpc3Qgb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSBwbGF5bGlzdCBpcyBibGFja2xpc3RlZCBvciBub3RcbiAqIEBmdW5jdGlvbiBpc0JsYWNrbGlzdGVkXG4gKi9cblxuXG52YXIgaXNCbGFja2xpc3RlZCA9IGZ1bmN0aW9uIGlzQmxhY2tsaXN0ZWQocGxheWxpc3QpIHtcbiAgcmV0dXJuIHBsYXlsaXN0LmV4Y2x1ZGVVbnRpbCAmJiBwbGF5bGlzdC5leGNsdWRlVW50aWwgPiBEYXRlLm5vdygpO1xufTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGxheWxpc3QgaXMgY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgcGxheWJhY2sgY29uZmlndXJhdGlvbiBvciBoYXNcbiAqIGJlZW4gYmxhY2tsaXN0ZWQgcGVybWFuZW50bHkgZm9yIGJlaW5nIGluY29tcGF0aWJsZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgdGhlIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcGxheWxpc3QgaXMgaW5jb21wYXRpYmxlIG9yIG5vdFxuICogQGZ1bmN0aW9uIGlzSW5jb21wYXRpYmxlXG4gKi9cblxuXG52YXIgaXNJbmNvbXBhdGlibGUgPSBmdW5jdGlvbiBpc0luY29tcGF0aWJsZShwbGF5bGlzdCkge1xuICByZXR1cm4gcGxheWxpc3QuZXhjbHVkZVVudGlsICYmIHBsYXlsaXN0LmV4Y2x1ZGVVbnRpbCA9PT0gSW5maW5pdHk7XG59O1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwbGF5bGlzdCBpcyBlbmFibGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgdGhlIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcGxheWxpc3QgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBmdW5jdGlvbiBpc0VuYWJsZWRcbiAqL1xuXG5cbnZhciBpc0VuYWJsZWQgPSBmdW5jdGlvbiBpc0VuYWJsZWQocGxheWxpc3QpIHtcbiAgdmFyIGJsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZChwbGF5bGlzdCk7XG4gIHJldHVybiAhcGxheWxpc3QuZGlzYWJsZWQgJiYgIWJsYWNrbGlzdGVkO1xufTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGxheWxpc3QgaGFzIGJlZW4gbWFudWFsbHkgZGlzYWJsZWQgdGhyb3VnaCB0aGUgcmVwcmVzZW50YXRpb25zIGFwaS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgdGhlIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcGxheWxpc3QgaXMgZGlzYWJsZWQgbWFudWFsbHkgb3Igbm90XG4gKiBAZnVuY3Rpb24gaXNEaXNhYmxlZFxuICovXG5cblxudmFyIGlzRGlzYWJsZWQgPSBmdW5jdGlvbiBpc0Rpc2FibGVkKHBsYXlsaXN0KSB7XG4gIHJldHVybiBwbGF5bGlzdC5kaXNhYmxlZDtcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwbGF5bGlzdCBpcyBhbiBBRVMgZW5jcnlwdGVkIEhMUyBzdHJlYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGl0J3MgYW4gQUVTIGVuY3J5cHRlZCBITFMgc3RyZWFtXG4gKi9cblxuXG52YXIgaXNBZXMgPSBmdW5jdGlvbiBpc0FlcyhtZWRpYSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhLnNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1lZGlhLnNlZ21lbnRzW2ldLmtleSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHBsYXlsaXN0IGNvbnRhaW5zIGZNUDRcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBwbGF5bGlzdCBjb250YWlucyBmTVA0XG4gKi9cblxuXG52YXIgaXNGbXA0ID0gZnVuY3Rpb24gaXNGbXA0KG1lZGlhKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWEuc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWVkaWEuc2VnbWVudHNbaV0ubWFwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHBsYXlsaXN0IGhhcyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRyXG4gKiAgICAgICAgQXR0cmlidXRlIHRvIGNoZWNrIGZvclxuICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0XG4gKiAgICAgICAgVGhlIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqICAgICAgICAgV2hldGhlciB0aGUgcGxheWxpc3QgY29udGFpbnMgYSB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBvciBub3RcbiAqIEBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVcbiAqL1xuXG5cbnZhciBoYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbiBoYXNBdHRyaWJ1dGUoYXR0ciwgcGxheWxpc3QpIHtcbiAgcmV0dXJuIHBsYXlsaXN0LmF0dHJpYnV0ZXMgJiYgcGxheWxpc3QuYXR0cmlidXRlc1thdHRyXTtcbn07XG4vKipcbiAqIEVzdGltYXRlcyB0aGUgdGltZSByZXF1aXJlZCB0byBjb21wbGV0ZSBhIHNlZ21lbnQgZG93bmxvYWQgZnJvbSB0aGUgc3BlY2lmaWVkIHBsYXlsaXN0XG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHNlZ21lbnREdXJhdGlvblxuICogICAgICAgIER1cmF0aW9uIG9mIHJlcXVlc3RlZCBzZWdtZW50XG4gKiBAcGFyYW0ge051bWJlcn0gYmFuZHdpZHRoXG4gKiAgICAgICAgQ3VycmVudCBtZWFzdXJlZCBiYW5kd2lkdGggb2YgdGhlIHBsYXllclxuICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0XG4gKiAgICAgICAgVGhlIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXI9fSBieXRlc1JlY2VpdmVkXG4gKiAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIGFscmVhZHkgcmVjZWl2ZWQgZm9yIHRoZSByZXF1ZXN0LiBEZWZhdWx0cyB0byAwXG4gKiBAcmV0dXJuIHtOdW1iZXJ8TmFOfVxuICogICAgICAgICBUaGUgZXN0aW1hdGVkIHRpbWUgdG8gcmVxdWVzdCB0aGUgc2VnbWVudC4gTmFOIGlmIGJhbmR3aWR0aCBpbmZvcm1hdGlvbiBmb3JcbiAqICAgICAgICAgdGhlIGdpdmVuIHBsYXlsaXN0IGlzIHVuYXZhaWxhYmxlXG4gKiBAZnVuY3Rpb24gZXN0aW1hdGVTZWdtZW50UmVxdWVzdFRpbWVcbiAqL1xuXG5cbnZhciBlc3RpbWF0ZVNlZ21lbnRSZXF1ZXN0VGltZSA9IGZ1bmN0aW9uIGVzdGltYXRlU2VnbWVudFJlcXVlc3RUaW1lKHNlZ21lbnREdXJhdGlvbiwgYmFuZHdpZHRoLCBwbGF5bGlzdCkge1xuICB2YXIgYnl0ZXNSZWNlaXZlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogMDtcblxuICBpZiAoIWhhc0F0dHJpYnV0ZSgnQkFORFdJRFRIJywgcGxheWxpc3QpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHZhciBzaXplID0gc2VnbWVudER1cmF0aW9uICogcGxheWxpc3QuYXR0cmlidXRlcy5CQU5EV0lEVEg7XG4gIHJldHVybiAoc2l6ZSAtIGJ5dGVzUmVjZWl2ZWQgKiA4KSAvIGJhbmR3aWR0aDtcbn07XG4vKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHBsYXlsaXN0IGlzIHRoZSBsb3dlc3QgcmVuZGl0aW9uXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBvbiBsb3dlc3QgcmVuZGl0aW9uXG4gKi9cblxuXG52YXIgaXNMb3dlc3RFbmFibGVkUmVuZGl0aW9uID0gZnVuY3Rpb24gaXNMb3dlc3RFbmFibGVkUmVuZGl0aW9uKG1hc3RlciwgbWVkaWEpIHtcbiAgaWYgKG1hc3Rlci5wbGF5bGlzdHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgY3VycmVudEJhbmR3aWR0aCA9IG1lZGlhLmF0dHJpYnV0ZXMuQkFORFdJRFRIIHx8IE51bWJlci5NQVhfVkFMVUU7XG4gIHJldHVybiBtYXN0ZXIucGxheWxpc3RzLmZpbHRlcihmdW5jdGlvbiAocGxheWxpc3QpIHtcbiAgICBpZiAoIWlzRW5hYmxlZChwbGF5bGlzdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHBsYXlsaXN0LmF0dHJpYnV0ZXMuQkFORFdJRFRIIHx8IDApIDwgY3VycmVudEJhbmR3aWR0aDtcbiAgfSkubGVuZ3RoID09PSAwO1xufTsgLy8gZXhwb3J0c1xuXG5cbnZhciBQbGF5bGlzdCA9IHtcbiAgZHVyYXRpb246IGR1cmF0aW9uLFxuICBzZWVrYWJsZTogc2Vla2FibGUsXG4gIHNhZmVMaXZlSW5kZXg6IHNhZmVMaXZlSW5kZXgsXG4gIGdldE1lZGlhSW5mb0ZvclRpbWU6IGdldE1lZGlhSW5mb0ZvclRpbWUsXG4gIGlzRW5hYmxlZDogaXNFbmFibGVkLFxuICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICBpc0JsYWNrbGlzdGVkOiBpc0JsYWNrbGlzdGVkLFxuICBpc0luY29tcGF0aWJsZTogaXNJbmNvbXBhdGlibGUsXG4gIHBsYXlsaXN0RW5kOiBwbGF5bGlzdEVuZCxcbiAgaXNBZXM6IGlzQWVzLFxuICBpc0ZtcDQ6IGlzRm1wNCxcbiAgaGFzQXR0cmlidXRlOiBoYXNBdHRyaWJ1dGUsXG4gIGVzdGltYXRlU2VnbWVudFJlcXVlc3RUaW1lOiBlc3RpbWF0ZVNlZ21lbnRSZXF1ZXN0VGltZSxcbiAgaXNMb3dlc3RFbmFibGVkUmVuZGl0aW9uOiBpc0xvd2VzdEVuYWJsZWRSZW5kaXRpb25cbn07XG4vKipcbiAqIEBmaWxlIHhoci5qc1xuICovXG5cbnZhciB2aWRlb2pzWEhSID0gdmlkZW9qcyQxLnhocixcbiAgICBtZXJnZU9wdGlvbnMkMSQxID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucztcblxudmFyIHhockZhY3RvcnkgPSBmdW5jdGlvbiB4aHJGYWN0b3J5KCkge1xuICB2YXIgeGhyID0gZnVuY3Rpb24gWGhyRnVuY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAvLyBBZGQgYSBkZWZhdWx0IHRpbWVvdXQgZm9yIGFsbCBobHMgcmVxdWVzdHNcbiAgICBvcHRpb25zID0gbWVyZ2VPcHRpb25zJDEkMSh7XG4gICAgICB0aW1lb3V0OiA0NWUzXG4gICAgfSwgb3B0aW9ucyk7IC8vIEFsbG93IGFuIG9wdGlvbmFsIHVzZXItc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgb3B0aW9uXG4gICAgLy8gb2JqZWN0IGJlZm9yZSB3ZSBjb25zdHJ1Y3QgdGhlIHhociByZXF1ZXN0XG5cbiAgICB2YXIgYmVmb3JlUmVxdWVzdCA9IFhockZ1bmN0aW9uLmJlZm9yZVJlcXVlc3QgfHwgdmlkZW9qcyQxLkhscy54aHIuYmVmb3JlUmVxdWVzdDtcblxuICAgIGlmIChiZWZvcmVSZXF1ZXN0ICYmIHR5cGVvZiBiZWZvcmVSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IGJlZm9yZVJlcXVlc3Qob3B0aW9ucyk7XG5cbiAgICAgIGlmIChuZXdPcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gdmlkZW9qc1hIUihvcHRpb25zLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3BvbnNlKSB7XG4gICAgICB2YXIgcmVxUmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbnNlO1xuXG4gICAgICBpZiAoIWVycm9yICYmIHJlcVJlc3BvbnNlKSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmVxdWVzdC5yb3VuZFRyaXBUaW1lID0gcmVxdWVzdC5yZXNwb25zZVRpbWUgLSByZXF1ZXN0LnJlcXVlc3RUaW1lO1xuICAgICAgICByZXF1ZXN0LmJ5dGVzUmVjZWl2ZWQgPSByZXFSZXNwb25zZS5ieXRlTGVuZ3RoIHx8IHJlcVJlc3BvbnNlLmxlbmd0aDtcblxuICAgICAgICBpZiAoIXJlcXVlc3QuYmFuZHdpZHRoKSB7XG4gICAgICAgICAgcmVxdWVzdC5iYW5kd2lkdGggPSBNYXRoLmZsb29yKHJlcXVlc3QuYnl0ZXNSZWNlaXZlZCAvIHJlcXVlc3Qucm91bmRUcmlwVGltZSAqIDggKiAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG4gICAgICB9IC8vIHZpZGVvanMueGhyIG5vdyB1c2VzIGEgc3BlY2lmaWMgY29kZSBvbiB0aGUgZXJyb3JcbiAgICAgIC8vIG9iamVjdCB0byBzaWduYWwgdGhhdCBhIHJlcXVlc3QgaGFzIHRpbWVkIG91dCBpbnN0ZWFkXG4gICAgICAvLyBvZiBzZXR0aW5nIGEgYm9vbGVhbiBvbiB0aGUgcmVxdWVzdCBvYmplY3RcblxuXG4gICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ0VUSU1FRE9VVCcpIHtcbiAgICAgICAgcmVxdWVzdC50aW1lZG91dCA9IHRydWU7XG4gICAgICB9IC8vIHZpZGVvanMueGhyIG5vIGxvbmdlciBjb25zaWRlcnMgc3RhdHVzIGNvZGVzIG91dHNpZGUgb2YgMjAwIGFuZCAwXG4gICAgICAvLyAoZm9yIGZpbGUgdXJpcykgdG8gYmUgZXJyb3JzLCBidXQgdGhlIG9sZCBYSFIgZGlkLCBzbyBlbXVsYXRlIHRoYXRcbiAgICAgIC8vIGJlaGF2aW9yLiBTdGF0dXMgMjA2IG1heSBiZSB1c2VkIGluIHJlc3BvbnNlIHRvIGJ5dGVyYW5nZSByZXF1ZXN0cy5cblxuXG4gICAgICBpZiAoIWVycm9yICYmICFyZXF1ZXN0LmFib3J0ZWQgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwNiAmJiByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAwKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdYSFIgRmFpbGVkIHdpdGggYSByZXNwb25zZSBvZjogJyArIChyZXF1ZXN0ICYmIChyZXFSZXNwb25zZSB8fCByZXF1ZXN0LnJlc3BvbnNlVGV4dCkpKTtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlcXVlc3QpO1xuICAgIH0pO1xuICAgIHZhciBvcmlnaW5hbEFib3J0ID0gcmVxdWVzdC5hYm9ydDtcblxuICAgIHJlcXVlc3QuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXF1ZXN0LmFib3J0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsQWJvcnQuYXBwbHkocmVxdWVzdCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgcmVxdWVzdC51cmkgPSBvcHRpb25zLnVyaTtcbiAgICByZXF1ZXN0LnJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfTtcblxuICByZXR1cm4geGhyO1xufTtcbi8qKlxuICogVHVybnMgc2VnbWVudCBieXRlcmFuZ2UgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgdXNlIGluXG4gKiBIVFRQIFJhbmdlIHJlcXVlc3RzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGJ5dGVyYW5nZSAtIGFuIG9iamVjdCB3aXRoIHR3byB2YWx1ZXMgZGVmaW5pbmcgdGhlIHN0YXJ0IGFuZCBlbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIGJ5dGUtcmFuZ2VcbiAqL1xuXG5cbnZhciBieXRlcmFuZ2VTdHIgPSBmdW5jdGlvbiBieXRlcmFuZ2VTdHIoYnl0ZXJhbmdlKSB7XG4gIHZhciBieXRlcmFuZ2VTdGFydCA9IHZvaWQgMDtcbiAgdmFyIGJ5dGVyYW5nZUVuZCA9IHZvaWQgMDsgLy8gYGJ5dGVyYW5nZUVuZGAgaXMgb25lIGxlc3MgdGhhbiBgb2Zmc2V0ICsgbGVuZ3RoYCBiZWNhdXNlIHRoZSBIVFRQIHJhbmdlXG4gIC8vIGhlYWRlciB1c2VzIGluY2x1c2l2ZSByYW5nZXNcblxuICBieXRlcmFuZ2VFbmQgPSBieXRlcmFuZ2Uub2Zmc2V0ICsgYnl0ZXJhbmdlLmxlbmd0aCAtIDE7XG4gIGJ5dGVyYW5nZVN0YXJ0ID0gYnl0ZXJhbmdlLm9mZnNldDtcbiAgcmV0dXJuICdieXRlcz0nICsgYnl0ZXJhbmdlU3RhcnQgKyAnLScgKyBieXRlcmFuZ2VFbmQ7XG59O1xuLyoqXG4gKiBEZWZpbmVzIGhlYWRlcnMgZm9yIHVzZSBpbiB0aGUgeGhyIHJlcXVlc3QgZm9yIGEgcGFydGljdWxhciBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWdtZW50IC0gYSBzaW1wbGlmaWVkIGNvcHkgb2YgdGhlIHNlZ21lbnRJbmZvIG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIFNlZ21lbnRMb2FkZXJcbiAqL1xuXG5cbnZhciBzZWdtZW50WGhySGVhZGVycyA9IGZ1bmN0aW9uIHNlZ21lbnRYaHJIZWFkZXJzKHNlZ21lbnQpIHtcbiAgdmFyIGhlYWRlcnMgPSB7fTtcblxuICBpZiAoc2VnbWVudC5ieXRlcmFuZ2UpIHtcbiAgICBoZWFkZXJzLlJhbmdlID0gYnl0ZXJhbmdlU3RyKHNlZ21lbnQuYnl0ZXJhbmdlKTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufTtcbi8qKlxuICogQGZpbGUgYmluLXV0aWxzLmpzXG4gKi9cblxuLyoqXG4gKiBjb252ZXJ0IGEgVGltZVJhbmdlIHRvIHRleHRcbiAqXG4gKiBAcGFyYW0ge1RpbWVSYW5nZX0gcmFuZ2UgdGhlIHRpbWVyYW5nZSB0byB1c2UgZm9yIGNvbnZlcnNpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBpIHRoZSBpdGVyYXRvciBvbiB0aGUgcmFuZ2UgdG8gY29udmVydFxuICovXG5cblxudmFyIHRleHRSYW5nZSA9IGZ1bmN0aW9uIHRleHRSYW5nZShyYW5nZSwgaSkge1xuICByZXR1cm4gcmFuZ2Uuc3RhcnQoaSkgKyAnLScgKyByYW5nZS5lbmQoaSk7XG59O1xuLyoqXG4gKiBmb3JtYXQgYSBudW1iZXIgYXMgaGV4IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBlIFRoZSBudW1iZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBpIHRoZSBpdGVyYXRvclxuICovXG5cblxudmFyIGZvcm1hdEhleFN0cmluZyA9IGZ1bmN0aW9uIGZvcm1hdEhleFN0cmluZyhlLCBpKSB7XG4gIHZhciB2YWx1ZSA9IGUudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gJzAwJy5zdWJzdHJpbmcoMCwgMiAtIHZhbHVlLmxlbmd0aCkgKyB2YWx1ZSArIChpICUgMiA/ICcgJyA6ICcnKTtcbn07XG5cbnZhciBmb3JtYXRBc2NpaVN0cmluZyA9IGZ1bmN0aW9uIGZvcm1hdEFzY2lpU3RyaW5nKGUpIHtcbiAgaWYgKGUgPj0gMHgyMCAmJiBlIDwgMHg3ZSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpO1xuICB9XG5cbiAgcmV0dXJuICcuJztcbn07XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGZvciBzZW5kaW5nIHRvIGEgd2ViIHdvcmtlciBtb2RpZnlpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBUeXBlZEFycmF5c1xuICogaW50byBhIG5ldyBvYmplY3Qgd2l0aCBzZXBlcmF0ZWQgcHJvcGVydGllcyBmb3IgdGhlIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYW5kIGJ5dGVMZW5ndGguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2VcbiAqICAgICAgICBPYmplY3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHRvIHNlbmQgdG8gdGhlIHdlYiB3b3JrZXJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgTW9kaWZpZWQgbWVzc2FnZSB3aXRoIFR5cGVkQXJyYXkgdmFsdWVzIGV4cGFuZGVkXG4gKiBAZnVuY3Rpb24gY3JlYXRlVHJhbnNmZXJhYmxlTWVzc2FnZVxuICovXG5cblxudmFyIGNyZWF0ZVRyYW5zZmVyYWJsZU1lc3NhZ2UgPSBmdW5jdGlvbiBjcmVhdGVUcmFuc2ZlcmFibGVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgdmFyIHRyYW5zZmVyYWJsZSA9IHt9O1xuICBPYmplY3Qua2V5cyhtZXNzYWdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBtZXNzYWdlW2tleV07XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgICAgdHJhbnNmZXJhYmxlW2tleV0gPSB7XG4gICAgICAgIGJ5dGVzOiB2YWx1ZS5idWZmZXIsXG4gICAgICAgIGJ5dGVPZmZzZXQ6IHZhbHVlLmJ5dGVPZmZzZXQsXG4gICAgICAgIGJ5dGVMZW5ndGg6IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyYWJsZVtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRyYW5zZmVyYWJsZTtcbn07XG4vKipcbiAqIFJldHVybnMgYSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgZm9yIGEgbWVkaWEgaW5pdGlhbGl6YXRpb25cbiAqIHNlZ21lbnQuXG4gKi9cblxuXG52YXIgaW5pdFNlZ21lbnRJZCA9IGZ1bmN0aW9uIGluaXRTZWdtZW50SWQoaW5pdFNlZ21lbnQpIHtcbiAgdmFyIGJ5dGVyYW5nZSA9IGluaXRTZWdtZW50LmJ5dGVyYW5nZSB8fCB7XG4gICAgbGVuZ3RoOiBJbmZpbml0eSxcbiAgICBvZmZzZXQ6IDBcbiAgfTtcbiAgcmV0dXJuIFtieXRlcmFuZ2UubGVuZ3RoLCBieXRlcmFuZ2Uub2Zmc2V0LCBpbml0U2VnbWVudC5yZXNvbHZlZFVyaV0uam9pbignLCcpO1xufTtcbi8qKlxuICogUmV0dXJucyBhIHVuaXF1ZSBzdHJpbmcgaWRlbnRpZmllciBmb3IgYSBtZWRpYSBzZWdtZW50IGtleS5cbiAqL1xuXG5cbnZhciBzZWdtZW50S2V5SWQgPSBmdW5jdGlvbiBzZWdtZW50S2V5SWQoa2V5KSB7XG4gIHJldHVybiBrZXkucmVzb2x2ZWRVcmk7XG59O1xuLyoqXG4gKiB1dGlscyB0byBoZWxwIGR1bXAgYmluYXJ5IGRhdGEgdG8gdGhlIGNvbnNvbGVcbiAqL1xuXG5cbnZhciBoZXhEdW1wID0gZnVuY3Rpb24gaGV4RHVtcChkYXRhKSB7XG4gIHZhciBieXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRhdGEpO1xuICB2YXIgc3RlcCA9IDE2O1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBoZXggPSB2b2lkIDA7XG4gIHZhciBhc2NpaSA9IHZvaWQgMDtcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IGJ5dGVzLmxlbmd0aCAvIHN0ZXA7IGorKykge1xuICAgIGhleCA9IGJ5dGVzLnNsaWNlKGogKiBzdGVwLCBqICogc3RlcCArIHN0ZXApLm1hcChmb3JtYXRIZXhTdHJpbmcpLmpvaW4oJycpO1xuICAgIGFzY2lpID0gYnl0ZXMuc2xpY2UoaiAqIHN0ZXAsIGogKiBzdGVwICsgc3RlcCkubWFwKGZvcm1hdEFzY2lpU3RyaW5nKS5qb2luKCcnKTtcbiAgICByZXN1bHQgKz0gaGV4ICsgJyAnICsgYXNjaWkgKyAnXFxuJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgdGFnRHVtcCA9IGZ1bmN0aW9uIHRhZ0R1bXAoX3JlZikge1xuICB2YXIgYnl0ZXMgPSBfcmVmLmJ5dGVzO1xuICByZXR1cm4gaGV4RHVtcChieXRlcyk7XG59O1xuXG52YXIgdGV4dFJhbmdlcyA9IGZ1bmN0aW9uIHRleHRSYW5nZXMocmFuZ2VzKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGkgPSB2b2lkIDA7XG5cbiAgZm9yIChpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCArPSB0ZXh0UmFuZ2UocmFuZ2VzLCBpKSArICcgJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgdXRpbHMgPVxuLyojX19QVVJFX18qL1xuT2JqZWN0LmZyZWV6ZSh7XG4gIGNyZWF0ZVRyYW5zZmVyYWJsZU1lc3NhZ2U6IGNyZWF0ZVRyYW5zZmVyYWJsZU1lc3NhZ2UsXG4gIGluaXRTZWdtZW50SWQ6IGluaXRTZWdtZW50SWQsXG4gIHNlZ21lbnRLZXlJZDogc2VnbWVudEtleUlkLFxuICBoZXhEdW1wOiBoZXhEdW1wLFxuICB0YWdEdW1wOiB0YWdEdW1wLFxuICB0ZXh0UmFuZ2VzOiB0ZXh0UmFuZ2VzXG59KTsgLy8gVE9ETyBoYW5kbGUgZm1wNCBjYXNlIHdoZXJlIHRoZSB0aW1pbmcgaW5mbyBpcyBhY2N1cmF0ZSBhbmQgZG9lc24ndCBpbnZvbHZlIHRyYW5zbXV4XG4vLyBBZGQgMjUlIHRvIHRoZSBzZWdtZW50IGR1cmF0aW9uIHRvIGFjY291bnQgZm9yIHNtYWxsIGRpc2NyZXBlbmNpZXMgaW4gc2VnbWVudCB0aW1pbmcuXG4vLyAyNSUgd2FzIGFyYml0cmFyaWx5IGNob3NlbiwgYW5kIG1heSBuZWVkIHRvIGJlIHJlZmluZWQgb3ZlciB0aW1lLlxuXG52YXIgU0VHTUVOVF9FTkRfRlVER0VfUEVSQ0VOVCA9IDAuMjU7XG4vKipcbiAqIENvbnZlcnRzIGEgcGxheWVyIHRpbWUgKGFueSB0aW1lIHRoYXQgY2FuIGJlIGdvdHRlbi9zZXQgZnJvbSBwbGF5ZXIuY3VycmVudFRpbWUoKSxcbiAqIGUuZy4sIGFueSB0aW1lIHdpdGhpbiBwbGF5ZXIuc2Vla2FibGUoKS5zdGFydCgwKSB0byBwbGF5ZXIuc2Vla2FibGUoKS5lbmQoMCkpIHRvIGFcbiAqIHByb2dyYW0gdGltZSAoYW55IHRpbWUgcmVmZXJlbmNpbmcgdGhlIHJlYWwgd29ybGQgKGUuZy4sIEVYVC1YLVBST0dSQU0tREFURS1USU1FKSkuXG4gKlxuICogVGhlIGNvbnRhaW5pbmcgc2VnbWVudCBpcyByZXF1aXJlZCBhcyB0aGUgRVhULVgtUFJPR1JBTS1EQVRFLVRJTUUgc2VydmVzIGFzIGFuIFwiYW5jaG9yXG4gKiBwb2ludFwiIChhIHBvaW50IHdoZXJlIHdlIGhhdmUgYSBtYXBwaW5nIGZyb20gcHJvZ3JhbSB0aW1lIHRvIHBsYXllciB0aW1lLCB3aXRoIHBsYXllclxuICogdGltZSBiZWluZyB0aGUgcG9zdCB0cmFuc211eCBzdGFydCBvZiB0aGUgc2VnbWVudCkuXG4gKlxuICogRm9yIG1vcmUgZGV0YWlscywgc2VlIFt0aGlzIGRvY10oLi4vLi4vZG9jcy9wcm9ncmFtLXRpbWUtZnJvbS1wbGF5ZXItdGltZS5tZCkuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHBsYXllclRpbWUgdGhlIHBsYXllciB0aW1lXG4gKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudCB0aGUgc2VnbWVudCB3aGljaCBjb250YWlucyB0aGUgcGxheWVyIHRpbWVcbiAqIEByZXR1cm4ge0RhdGV9IHByb2dyYW0gdGltZVxuICovXG5cbnZhciBwbGF5ZXJUaW1lVG9Qcm9ncmFtVGltZSA9IGZ1bmN0aW9uIHBsYXllclRpbWVUb1Byb2dyYW1UaW1lKHBsYXllclRpbWUsIHNlZ21lbnQpIHtcbiAgaWYgKCFzZWdtZW50LmRhdGVUaW1lT2JqZWN0KSB7XG4gICAgLy8gQ2FuJ3QgY29udmVydCB3aXRob3V0IGFuIFwiYW5jaG9yIHBvaW50XCIgZm9yIHRoZSBwcm9ncmFtIHRpbWUgKGkuZS4sIGEgdGltZSB0aGF0IGNhblxuICAgIC8vIGJlIHVzZWQgdG8gbWFwIHRoZSBzdGFydCBvZiBhIHNlZ21lbnQgd2l0aCBhIHJlYWwgd29ybGQgdGltZSkuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgdHJhbnNtdXhlclByZXBlbmRlZFNlY29uZHMgPSBzZWdtZW50LnZpZGVvVGltaW5nSW5mby50cmFuc211eGVyUHJlcGVuZGVkU2Vjb25kcztcbiAgdmFyIHRyYW5zbXV4ZWRTdGFydCA9IHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvLnRyYW5zbXV4ZWRQcmVzZW50YXRpb25TdGFydDsgLy8gZ2V0IHRoZSBzdGFydCBvZiB0aGUgY29udGVudCBmcm9tIGJlZm9yZSBvbGQgY29udGVudCBpcyBwcmVwZW5kZWRcblxuICB2YXIgc3RhcnRPZlNlZ21lbnQgPSB0cmFuc211eGVkU3RhcnQgKyB0cmFuc211eGVyUHJlcGVuZGVkU2Vjb25kcztcbiAgdmFyIG9mZnNldEZyb21TZWdtZW50U3RhcnQgPSBwbGF5ZXJUaW1lIC0gc3RhcnRPZlNlZ21lbnQ7XG4gIHJldHVybiBuZXcgRGF0ZShzZWdtZW50LmRhdGVUaW1lT2JqZWN0LmdldFRpbWUoKSArIG9mZnNldEZyb21TZWdtZW50U3RhcnQgKiAxMDAwKTtcbn07XG5cbnZhciBvcmlnaW5hbFNlZ21lbnRWaWRlb0R1cmF0aW9uID0gZnVuY3Rpb24gb3JpZ2luYWxTZWdtZW50VmlkZW9EdXJhdGlvbih2aWRlb1RpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHZpZGVvVGltaW5nSW5mby50cmFuc211eGVkUHJlc2VudGF0aW9uRW5kIC0gdmlkZW9UaW1pbmdJbmZvLnRyYW5zbXV4ZWRQcmVzZW50YXRpb25TdGFydCAtIHZpZGVvVGltaW5nSW5mby50cmFuc211eGVyUHJlcGVuZGVkU2Vjb25kcztcbn07XG4vKipcbiAqIEZpbmRzIGEgc2VnbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0aW1lIHJlcXVlc3RlZCBnaXZlbiBhcyBhbiBJU08tODYwMSBzdHJpbmcuIFRoZVxuICogcmV0dXJuZWQgc2VnbWVudCBtaWdodCBiZSBhbiBlc3RpbWF0ZSBvciBhbiBhY2N1cmF0ZSBtYXRjaC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvZ3JhbVRpbWUgVGhlIElTTy04NjAxIHByb2dyYW1UaW1lIHRvIGZpbmQgYSBtYXRjaCBmb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbGF5bGlzdCBBIHBsYXlsaXN0IG9iamVjdCB0byBzZWFyY2ggd2l0aGluXG4gKi9cblxuXG52YXIgZmluZFNlZ21lbnRGb3JQcm9ncmFtVGltZSA9IGZ1bmN0aW9uIGZpbmRTZWdtZW50Rm9yUHJvZ3JhbVRpbWUocHJvZ3JhbVRpbWUsIHBsYXlsaXN0KSB7XG4gIC8vIEFzc3VtcHRpb25zOlxuICAvLyAgLSB2ZXJpZnlQcm9ncmFtRGF0ZVRpbWVUYWdzIGhhcyBhbHJlYWR5IGJlZW4gcnVuXG4gIC8vICAtIGxpdmUgc3RyZWFtcyBoYXZlIGJlZW4gc3RhcnRlZFxuICB2YXIgZGF0ZVRpbWVPYmplY3QgPSB2b2lkIDA7XG5cbiAgdHJ5IHtcbiAgICBkYXRlVGltZU9iamVjdCA9IG5ldyBEYXRlKHByb2dyYW1UaW1lKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFwbGF5bGlzdCB8fCAhcGxheWxpc3Quc2VnbWVudHMgfHwgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgc2VnbWVudCA9IHBsYXlsaXN0LnNlZ21lbnRzWzBdO1xuXG4gIGlmIChkYXRlVGltZU9iamVjdCA8IHNlZ21lbnQuZGF0ZVRpbWVPYmplY3QpIHtcbiAgICAvLyBSZXF1ZXN0ZWQgdGltZSBpcyBiZWZvcmUgc3RyZWFtIHN0YXJ0LlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGF5bGlzdC5zZWdtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBzZWdtZW50ID0gcGxheWxpc3Quc2VnbWVudHNbaV07XG4gICAgdmFyIG5leHRTZWdtZW50U3RhcnQgPSBwbGF5bGlzdC5zZWdtZW50c1tpICsgMV0uZGF0ZVRpbWVPYmplY3Q7XG5cbiAgICBpZiAoZGF0ZVRpbWVPYmplY3QgPCBuZXh0U2VnbWVudFN0YXJ0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbGFzdFNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1twbGF5bGlzdC5zZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgdmFyIGxhc3RTZWdtZW50U3RhcnQgPSBsYXN0U2VnbWVudC5kYXRlVGltZU9iamVjdDtcbiAgdmFyIGxhc3RTZWdtZW50RHVyYXRpb24gPSBsYXN0U2VnbWVudC52aWRlb1RpbWluZ0luZm8gPyBvcmlnaW5hbFNlZ21lbnRWaWRlb0R1cmF0aW9uKGxhc3RTZWdtZW50LnZpZGVvVGltaW5nSW5mbykgOiBsYXN0U2VnbWVudC5kdXJhdGlvbiArIGxhc3RTZWdtZW50LmR1cmF0aW9uICogU0VHTUVOVF9FTkRfRlVER0VfUEVSQ0VOVDtcbiAgdmFyIGxhc3RTZWdtZW50RW5kID0gbmV3IERhdGUobGFzdFNlZ21lbnRTdGFydC5nZXRUaW1lKCkgKyBsYXN0U2VnbWVudER1cmF0aW9uICogMTAwMCk7XG5cbiAgaWYgKGRhdGVUaW1lT2JqZWN0ID4gbGFzdFNlZ21lbnRFbmQpIHtcbiAgICAvLyBCZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBvciBvdXIgYmVzdCBndWVzcyBvZiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZGF0ZVRpbWVPYmplY3QgPiBsYXN0U2VnbWVudFN0YXJ0KSB7XG4gICAgc2VnbWVudCA9IGxhc3RTZWdtZW50O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZWdtZW50OiBzZWdtZW50LFxuICAgIGVzdGltYXRlZFN0YXJ0OiBzZWdtZW50LnZpZGVvVGltaW5nSW5mbyA/IHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvLnRyYW5zbXV4ZWRQcmVzZW50YXRpb25TdGFydCA6IFBsYXlsaXN0LmR1cmF0aW9uKHBsYXlsaXN0LCBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlICsgcGxheWxpc3Quc2VnbWVudHMuaW5kZXhPZihzZWdtZW50KSksXG4gICAgLy8gQWx0aG91Z2gsIGdpdmVuIHRoYXQgYWxsIHNlZ21lbnRzIGhhdmUgYWNjdXJhdGUgZGF0ZSB0aW1lIG9iamVjdHMsIHRoZSBzZWdtZW50XG4gICAgLy8gc2VsZWN0ZWQgc2hvdWxkIGJlIGFjY3VyYXRlLCB1bmxlc3MgdGhlIHZpZGVvIGhhcyBiZWVuIHRyYW5zbXV4ZWQgYXQgc29tZSBwb2ludFxuICAgIC8vIChkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgdmlkZW9UaW1pbmdJbmZvIG9iamVjdCksIHRoZSBzZWdtZW50J3MgXCJwbGF5ZXJcbiAgICAvLyB0aW1lXCIgKHRoZSBzdGFydCB0aW1lIGluIHRoZSBwbGF5ZXIpIGNhbid0IGJlIGNvbnNpZGVyZWQgYWNjdXJhdGUuXG4gICAgdHlwZTogc2VnbWVudC52aWRlb1RpbWluZ0luZm8gPyAnYWNjdXJhdGUnIDogJ2VzdGltYXRlJ1xuICB9O1xufTtcbi8qKlxuICogRmluZHMgYSBzZWdtZW50IHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHBsYXllciB0aW1lKGluIHNlY29uZHMpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIFRoZSBwbGF5ZXIgdGltZSB0byBmaW5kIGEgbWF0Y2ggZm9yXG4gKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgQSBwbGF5bGlzdCBvYmplY3QgdG8gc2VhcmNoIHdpdGhpblxuICovXG5cblxudmFyIGZpbmRTZWdtZW50Rm9yUGxheWVyVGltZSA9IGZ1bmN0aW9uIGZpbmRTZWdtZW50Rm9yUGxheWVyVGltZSh0aW1lLCBwbGF5bGlzdCkge1xuICAvLyBBc3N1bXB0aW9uczpcbiAgLy8gLSB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIHNlZ21lbnQuZHVyYXRpb25cbiAgLy8gLSB3ZSBjYW4gc3RhcnQgZnJvbSB6ZXJvXG4gIC8vIC0gc2VnbWVudHMgYXJlIGluIHRpbWUgb3JkZXJcbiAgaWYgKCFwbGF5bGlzdCB8fCAhcGxheWxpc3Quc2VnbWVudHMgfHwgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgc2VnbWVudEVuZCA9IDA7XG4gIHZhciBzZWdtZW50ID0gdm9pZCAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBzZWdtZW50ID0gcGxheWxpc3Quc2VnbWVudHNbaV07IC8vIHZpZGVvVGltaW5nSW5mbyBpcyBzZXQgYWZ0ZXIgdGhlIHNlZ21lbnQgaXMgZG93bmxvYWRlZCBhbmQgdHJhbnNtdXhlZCwgYW5kXG4gICAgLy8gc2hvdWxkIGNvbnRhaW4gdGhlIG1vc3QgYWNjdXJhdGUgdmFsdWVzIHdlIGhhdmUgZm9yIHRoZSBzZWdtZW50J3MgcGxheWVyIHRpbWVzLlxuICAgIC8vXG4gICAgLy8gVXNlIHRoZSBhY2N1cmF0ZSB0cmFuc211eGVkUHJlc2VudGF0aW9uRW5kIHZhbHVlIGlmIGl0IGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxcbiAgICAvLyBiYWNrIHRvIGFuIGVzdGltYXRlIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBkZXJpdmVkIChpbmFjY3VyYXRlKSBzZWdtZW50LmR1cmF0aW9uLCB0b1xuICAgIC8vIGNhbGN1bGF0ZSBhbiBlbmQgdmFsdWUuXG5cbiAgICBzZWdtZW50RW5kID0gc2VnbWVudC52aWRlb1RpbWluZ0luZm8gPyBzZWdtZW50LnZpZGVvVGltaW5nSW5mby50cmFuc211eGVkUHJlc2VudGF0aW9uRW5kIDogc2VnbWVudEVuZCArIHNlZ21lbnQuZHVyYXRpb247XG5cbiAgICBpZiAodGltZSA8PSBzZWdtZW50RW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbGFzdFNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1twbGF5bGlzdC5zZWdtZW50cy5sZW5ndGggLSAxXTtcblxuICBpZiAobGFzdFNlZ21lbnQudmlkZW9UaW1pbmdJbmZvICYmIGxhc3RTZWdtZW50LnZpZGVvVGltaW5nSW5mby50cmFuc211eGVkUHJlc2VudGF0aW9uRW5kIDwgdGltZSkge1xuICAgIC8vIFRoZSB0aW1lIHJlcXVlc3RlZCBpcyBiZXlvbmQgdGhlIHN0cmVhbSBlbmQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodGltZSA+IHNlZ21lbnRFbmQpIHtcbiAgICAvLyBUaGUgdGltZSBpcyB3aXRoaW4gb3IgYmV5b25kIHRoZSBsYXN0IHNlZ21lbnQuXG4gICAgLy9cbiAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRpbWUgaXMgYmV5b25kIGEgcmVhc29uYWJsZSBndWVzcyBvZiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uXG4gICAgaWYgKHRpbWUgPiBzZWdtZW50RW5kICsgbGFzdFNlZ21lbnQuZHVyYXRpb24gKiBTRUdNRU5UX0VORF9GVURHRV9QRVJDRU5UKSB7XG4gICAgICAvLyBUZWNobmljYWxseSwgYmVjYXVzZSB0aGUgZHVyYXRpb24gdmFsdWUgaXMgb25seSBhbiBlc3RpbWF0ZSwgdGhlIHRpbWUgbWF5IHN0aWxsXG4gICAgICAvLyBleGlzdCBpbiB0aGUgbGFzdCBzZWdtZW50LCBob3dldmVyLCB0aGVyZSBpc24ndCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBldmVuXG4gICAgICAvLyBhIHJlYXNvbmFibGUgZXN0aW1hdGUuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzZWdtZW50ID0gbGFzdFNlZ21lbnQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNlZ21lbnQ6IHNlZ21lbnQsXG4gICAgZXN0aW1hdGVkU3RhcnQ6IHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvID8gc2VnbWVudC52aWRlb1RpbWluZ0luZm8udHJhbnNtdXhlZFByZXNlbnRhdGlvblN0YXJ0IDogc2VnbWVudEVuZCAtIHNlZ21lbnQuZHVyYXRpb24sXG4gICAgLy8gQmVjYXVzZSB2aWRlb1RpbWluZ0luZm8gaXMgb25seSBzZXQgYWZ0ZXIgdHJhbnNtdXgsIGl0IGlzIHRoZSBvbmx5IHdheSB0byBnZXRcbiAgICAvLyBhY2N1cmF0ZSB0aW1pbmcgdmFsdWVzLlxuICAgIHR5cGU6IHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvID8gJ2FjY3VyYXRlJyA6ICdlc3RpbWF0ZSdcbiAgfTtcbn07XG4vKipcbiAqIEdpdmVzIHRoZSBvZmZzZXQgb2YgdGhlIGNvbXBhcmlzb25UaW1lc3RhbXAgZnJvbSB0aGUgcHJvZ3JhbVRpbWUgdGltZXN0YW1wIGluIHNlY29uZHMuXG4gKiBJZiB0aGUgb2Zmc2V0IHJldHVybmVkIGlzIHBvc2l0aXZlLCB0aGUgcHJvZ3JhbVRpbWUgb2NjdXJzIGFmdGVyIHRoZVxuICogY29tcGFyaXNvblRpbWVzdGFtcC5cbiAqIElmIHRoZSBvZmZzZXQgaXMgbmVnYXRpdmUsIHRoZSBwcm9ncmFtVGltZSBvY2N1cnMgYmVmb3JlIHRoZSBjb21wYXJpc29uVGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb21wYXJpc29uVGltZVN0YW1wIEFuIElTTy04NjAxIHRpbWVzdGFtcCB0byBjb21wYXJlIGFnYWluc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9ncmFtVGltZSBUaGUgcHJvZ3JhbVRpbWUgYXMgYW4gSVNPLTg2MDEgc3RyaW5nXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IG9mZnNldFxuICovXG5cblxudmFyIGdldE9mZnNldEZyb21UaW1lc3RhbXAgPSBmdW5jdGlvbiBnZXRPZmZzZXRGcm9tVGltZXN0YW1wKGNvbXBhcmlzb25UaW1lU3RhbXAsIHByb2dyYW1UaW1lKSB7XG4gIHZhciBzZWdtZW50RGF0ZVRpbWUgPSB2b2lkIDA7XG4gIHZhciBwcm9ncmFtRGF0ZVRpbWUgPSB2b2lkIDA7XG5cbiAgdHJ5IHtcbiAgICBzZWdtZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZShjb21wYXJpc29uVGltZVN0YW1wKTtcbiAgICBwcm9ncmFtRGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm9ncmFtVGltZSk7XG4gIH0gY2F0Y2ggKGUpIHsvLyBUT0RPIGhhbmRsZSBlcnJvclxuICB9XG5cbiAgdmFyIHNlZ21lbnRUaW1lRXBvY2ggPSBzZWdtZW50RGF0ZVRpbWUuZ2V0VGltZSgpO1xuICB2YXIgcHJvZ3JhbVRpbWVFcG9jaCA9IHByb2dyYW1EYXRlVGltZS5nZXRUaW1lKCk7XG4gIHJldHVybiAocHJvZ3JhbVRpbWVFcG9jaCAtIHNlZ21lbnRUaW1lRXBvY2gpIC8gMTAwMDtcbn07XG4vKipcbiAqIENoZWNrcyB0aGF0IGFsbCBzZWdtZW50cyBpbiB0aGlzIHBsYXlsaXN0IGhhdmUgcHJvZ3JhbURhdGVUaW1lIHRhZ3MuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0IEEgcGxheWxpc3Qgb2JqZWN0XG4gKi9cblxuXG52YXIgdmVyaWZ5UHJvZ3JhbURhdGVUaW1lVGFncyA9IGZ1bmN0aW9uIHZlcmlmeVByb2dyYW1EYXRlVGltZVRhZ3MocGxheWxpc3QpIHtcbiAgaWYgKCFwbGF5bGlzdC5zZWdtZW50cyB8fCBwbGF5bGlzdC5zZWdtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYXlsaXN0LnNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1tpXTtcblxuICAgIGlmICghc2VnbWVudC5kYXRlVGltZU9iamVjdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgcHJvZ3JhbVRpbWUgb2YgdGhlIG1lZGlhIGdpdmVuIGEgcGxheWxpc3QgYW5kIGEgcGxheWVyVGltZS5cbiAqIFRoZSBwbGF5bGlzdCBtdXN0IGhhdmUgcHJvZ3JhbURhdGVUaW1lIHRhZ3MgZm9yIGEgcHJvZ3JhbURhdGVUaW1lIHRhZyB0byBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB0aW1lIHJlcXVlc3RlZCBoYXZlIG5vdCBiZWVuIGJ1ZmZlcmVkIHlldCwgYW4gZXN0aW1hdGVcbiAqIG1heSBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzLnBsYXlsaXN0IEEgcGxheWxpc3Qgb2JqZWN0IHRvIHNlYXJjaCB3aXRoaW5cbiAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIEEgcGxheWVyVGltZSBpbiBzZWNvbmRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayhlcnIsIHByb2dyYW1UaW1lKVxuICogQHJldHVybnMge1N0cmluZ30gZXJyLm1lc3NhZ2UgQSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwcm9ncmFtVGltZVxuICogQHJldHVybnMge051bWJlcn0gcHJvZ3JhbVRpbWUubWVkaWFTZWNvbmRzIFRoZSBzdHJlYW1UaW1lIGluIHNlY29uZHNcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHByb2dyYW1UaW1lLnByb2dyYW1EYXRlVGltZSBUaGUgcHJvZ3JhbVRpbWUgYXMgYW4gSVNPLTg2MDEgU3RyaW5nXG4gKi9cblxuXG52YXIgZ2V0UHJvZ3JhbVRpbWUgPSBmdW5jdGlvbiBnZXRQcm9ncmFtVGltZShfcmVmKSB7XG4gIHZhciBwbGF5bGlzdCA9IF9yZWYucGxheWxpc3QsXG4gICAgICBfcmVmJHRpbWUgPSBfcmVmLnRpbWUsXG4gICAgICB0aW1lID0gX3JlZiR0aW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmVmJHRpbWUsXG4gICAgICBjYWxsYmFjayA9IF9yZWYuY2FsbGJhY2s7XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0UHJvZ3JhbVRpbWU6IGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmICghcGxheWxpc3QgfHwgdGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHtcbiAgICAgIG1lc3NhZ2U6ICdnZXRQcm9ncmFtVGltZTogcGxheWxpc3QgYW5kIHRpbWUgbXVzdCBiZSBwcm92aWRlZCdcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBtYXRjaGVkU2VnbWVudCA9IGZpbmRTZWdtZW50Rm9yUGxheWVyVGltZSh0aW1lLCBwbGF5bGlzdCk7XG5cbiAgaWYgKCFtYXRjaGVkU2VnbWVudCkge1xuICAgIHJldHVybiBjYWxsYmFjayh7XG4gICAgICBtZXNzYWdlOiAndmFsaWQgcHJvZ3JhbVRpbWUgd2FzIG5vdCBmb3VuZCdcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChtYXRjaGVkU2VnbWVudC50eXBlID09PSAnZXN0aW1hdGUnKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHtcbiAgICAgIG1lc3NhZ2U6ICdBY2N1cmF0ZSBwcm9ncmFtVGltZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nICsgJyBQbGVhc2Ugc2VlayB0byBlLnNlZWtUaW1lIGFuZCB0cnkgYWdhaW4nLFxuICAgICAgc2Vla1RpbWU6IG1hdGNoZWRTZWdtZW50LmVzdGltYXRlZFN0YXJ0XG4gICAgfSk7XG4gIH1cblxuICB2YXIgcHJvZ3JhbVRpbWVPYmplY3QgPSB7XG4gICAgbWVkaWFTZWNvbmRzOiB0aW1lXG4gIH07XG4gIHZhciBwcm9ncmFtVGltZSA9IHBsYXllclRpbWVUb1Byb2dyYW1UaW1lKHRpbWUsIG1hdGNoZWRTZWdtZW50LnNlZ21lbnQpO1xuXG4gIGlmIChwcm9ncmFtVGltZSkge1xuICAgIHByb2dyYW1UaW1lT2JqZWN0LnByb2dyYW1EYXRlVGltZSA9IHByb2dyYW1UaW1lLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcHJvZ3JhbVRpbWVPYmplY3QpO1xufTtcbi8qKlxuICogU2Vla3MgaW4gdGhlIHBsYXllciB0byBhIHRpbWUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwcm9ncmFtVGltZSBJU08tODYwMSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmdzLnByb2dyYW1UaW1lIEEgcHJvZ3JhbVRpbWUgdG8gc2VlayB0byBhcyBhbiBJU08tODYwMSBTdHJpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzLnBsYXlsaXN0IEEgcGxheWxpc3QgdG8gbG9vayB3aXRoaW5cbiAqIEBwYXJhbSB7TnVtYmVyfSBhcmdzLnJldHJ5Q291bnQgVGhlIG51bWJlciBvZiB0aW1lcyB0byB0cnkgZm9yIGFuIGFjY3VyYXRlIHNlZWsuIERlZmF1bHQgaXMgMi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFyZ3Muc2Vla1RvIEEgbWV0aG9kIHRvIHBlcmZvcm0gYSBzZWVrXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFyZ3MucGF1c2VBZnRlclNlZWsgV2hldGhlciB0byBlbmQgaW4gYSBwYXVzZWQgc3RhdGUgYWZ0ZXIgc2Vla2luZy4gRGVmYXVsdCBpcyB0cnVlLlxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MudGVjaCBUaGUgdGVjaCB0byBzZWVrIG9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcmdzLmNhbGxiYWNrKGVyciwgbmV3VGltZSkgQSBjYWxsYmFjayB0byByZXR1cm4gdGhlIG5ldyB0aW1lIHRvXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBlcnIubWVzc2FnZSBBIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IG5ld1RpbWUgVGhlIGV4YWN0IHRpbWUgdGhhdCB3YXMgc2Vla2VkIHRvIGluIHNlY29uZHNcbiAqL1xuXG5cbnZhciBzZWVrVG9Qcm9ncmFtVGltZSA9IGZ1bmN0aW9uIHNlZWtUb1Byb2dyYW1UaW1lKF9yZWYyKSB7XG4gIHZhciBwcm9ncmFtVGltZSA9IF9yZWYyLnByb2dyYW1UaW1lLFxuICAgICAgcGxheWxpc3QgPSBfcmVmMi5wbGF5bGlzdCxcbiAgICAgIF9yZWYyJHJldHJ5Q291bnQgPSBfcmVmMi5yZXRyeUNvdW50LFxuICAgICAgcmV0cnlDb3VudCA9IF9yZWYyJHJldHJ5Q291bnQgPT09IHVuZGVmaW5lZCA/IDIgOiBfcmVmMiRyZXRyeUNvdW50LFxuICAgICAgc2Vla1RvID0gX3JlZjIuc2Vla1RvLFxuICAgICAgX3JlZjIkcGF1c2VBZnRlclNlZWsgPSBfcmVmMi5wYXVzZUFmdGVyU2VlayxcbiAgICAgIHBhdXNlQWZ0ZXJTZWVrID0gX3JlZjIkcGF1c2VBZnRlclNlZWsgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmMiRwYXVzZUFmdGVyU2VlayxcbiAgICAgIHRlY2ggPSBfcmVmMi50ZWNoLFxuICAgICAgY2FsbGJhY2sgPSBfcmVmMi5jYWxsYmFjaztcblxuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZWVrVG9Qcm9ncmFtVGltZTogY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9ncmFtVGltZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXBsYXlsaXN0IHx8ICFzZWVrVG8pIHtcbiAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgbWVzc2FnZTogJ3NlZWtUb1Byb2dyYW1UaW1lOiBwcm9ncmFtVGltZSwgc2Vla1RvIGFuZCBwbGF5bGlzdCBtdXN0IGJlIHByb3ZpZGVkJ1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwbGF5bGlzdC5lbmRMaXN0ICYmICF0ZWNoLmhhc1N0YXJ0ZWRfKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHtcbiAgICAgIG1lc3NhZ2U6ICdwbGF5ZXIgbXVzdCBiZSBwbGF5aW5nIGEgbGl2ZSBzdHJlYW0gdG8gc3RhcnQgYnVmZmVyaW5nJ1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCF2ZXJpZnlQcm9ncmFtRGF0ZVRpbWVUYWdzKHBsYXlsaXN0KSkge1xuICAgIHJldHVybiBjYWxsYmFjayh7XG4gICAgICBtZXNzYWdlOiAncHJvZ3JhbURhdGVUaW1lIHRhZ3MgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgbWFuaWZlc3QgJyArIHBsYXlsaXN0LnJlc29sdmVkVXJpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgbWF0Y2hlZFNlZ21lbnQgPSBmaW5kU2VnbWVudEZvclByb2dyYW1UaW1lKHByb2dyYW1UaW1lLCBwbGF5bGlzdCk7IC8vIG5vIG1hdGNoXG5cbiAgaWYgKCFtYXRjaGVkU2VnbWVudCkge1xuICAgIHJldHVybiBjYWxsYmFjayh7XG4gICAgICBtZXNzYWdlOiBwcm9ncmFtVGltZSArICcgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyZWFtJ1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHNlZ21lbnQgPSBtYXRjaGVkU2VnbWVudC5zZWdtZW50O1xuICB2YXIgbWVkaWFPZmZzZXQgPSBnZXRPZmZzZXRGcm9tVGltZXN0YW1wKHNlZ21lbnQuZGF0ZVRpbWVPYmplY3QsIHByb2dyYW1UaW1lKTtcblxuICBpZiAobWF0Y2hlZFNlZ21lbnQudHlwZSA9PT0gJ2VzdGltYXRlJykge1xuICAgIC8vIHdlJ3ZlIHJ1biBvdXQgb2YgcmV0cmllc1xuICAgIGlmIChyZXRyeUNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgICBtZXNzYWdlOiBwcm9ncmFtVGltZSArICcgaXMgbm90IGJ1ZmZlcmVkIHlldC4gVHJ5IGFnYWluJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Vla1RvKG1hdGNoZWRTZWdtZW50LmVzdGltYXRlZFN0YXJ0ICsgbWVkaWFPZmZzZXQpO1xuICAgIHRlY2gub25lKCdzZWVrZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWVrVG9Qcm9ncmFtVGltZSh7XG4gICAgICAgIHByb2dyYW1UaW1lOiBwcm9ncmFtVGltZSxcbiAgICAgICAgcGxheWxpc3Q6IHBsYXlsaXN0LFxuICAgICAgICByZXRyeUNvdW50OiByZXRyeUNvdW50IC0gMSxcbiAgICAgICAgc2Vla1RvOiBzZWVrVG8sXG4gICAgICAgIHBhdXNlQWZ0ZXJTZWVrOiBwYXVzZUFmdGVyU2VlayxcbiAgICAgICAgdGVjaDogdGVjaCxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH0gLy8gU2luY2UgdGhlIHNlZ21lbnQuc3RhcnQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBidWZmZXJlZCBlbmQgb3IgZW5kaW5nIHRpbWVcbiAgLy8gb2YgdGhlIHByaW9yIHNlZ21lbnQsIHRoZSBzZWVrVG9UaW1lIGRvZXNuJ3QgbmVlZCB0byBhY2NvdW50IGZvciBhbnkgdHJhbnNtdXhlclxuICAvLyBtb2RpZmljYXRpb25zLlxuXG5cbiAgdmFyIHNlZWtUb1RpbWUgPSBzZWdtZW50LnN0YXJ0ICsgbWVkaWFPZmZzZXQ7XG5cbiAgdmFyIHNlZWtlZENhbGxiYWNrID0gZnVuY3Rpb24gc2Vla2VkQ2FsbGJhY2soKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHRlY2guY3VycmVudFRpbWUoKSk7XG4gIH07IC8vIGxpc3RlbiBmb3Igc2Vla2VkIGV2ZW50XG5cblxuICB0ZWNoLm9uZSgnc2Vla2VkJywgc2Vla2VkQ2FsbGJhY2spOyAvLyBwYXVzZSBiZWZvcmUgc2Vla2luZyBhcyB2aWRlby5qcyB3aWxsIHJlc3RvcmUgdGhpcyBzdGF0ZVxuXG4gIGlmIChwYXVzZUFmdGVyU2Vlaykge1xuICAgIHRlY2gucGF1c2UoKTtcbiAgfVxuXG4gIHNlZWtUbyhzZWVrVG9UaW1lKTtcbn07XG4vKipcbiAqIHJhbmdlc1xuICpcbiAqIFV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIFRpbWVSYW5nZXMuXG4gKlxuICovXG4vLyBGdWRnZSBmYWN0b3IgdG8gYWNjb3VudCBmb3IgVGltZVJhbmdlcyByb3VuZGluZ1xuXG5cbnZhciBUSU1FX0ZVREdFX0ZBQ1RPUiA9IDEgLyAzMDsgLy8gQ29tcGFyaXNvbnMgYmV0d2VlbiB0aW1lIHZhbHVlcyBzdWNoIGFzIGN1cnJlbnQgdGltZSBhbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyZWQgcmFuZ2Vcbi8vIGNhbiBiZSBtaXNsZWFkaW5nIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIGRpZmZlcmVuY2VzIG9yIHdoZW4gdGhlIGN1cnJlbnQgbWVkaWEgaGFzIHBvb3JseVxuLy8gYWxpZ25lZCBhdWRpbyBhbmQgdmlkZW8sIHdoaWNoIGNhbiBjYXVzZSB2YWx1ZXMgdG8gYmUgc2xpZ2h0bHkgb2ZmIGZyb20gd2hhdCB5b3Ugd291bGRcbi8vIGV4cGVjdC4gVGhpcyB2YWx1ZSBpcyB3aGF0IHdlIGNvbnNpZGVyIHRvIGJlIHNhZmUgdG8gdXNlIGluIHN1Y2ggY29tcGFyaXNvbnMgdG8gYWNjb3VudFxuLy8gZm9yIHRoZXNlIHNjZW5hcmlvcy5cblxudmFyIFNBRkVfVElNRV9ERUxUQSA9IFRJTUVfRlVER0VfRkFDVE9SICogMztcblxudmFyIGZpbHRlclJhbmdlcyA9IGZ1bmN0aW9uIGZpbHRlclJhbmdlcyh0aW1lUmFuZ2VzLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIGkgPSB2b2lkIDA7XG5cbiAgaWYgKHRpbWVSYW5nZXMgJiYgdGltZVJhbmdlcy5sZW5ndGgpIHtcbiAgICAvLyBTZWFyY2ggZm9yIHJhbmdlcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGVcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByZWRpY2F0ZSh0aW1lUmFuZ2VzLnN0YXJ0KGkpLCB0aW1lUmFuZ2VzLmVuZChpKSkpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKFt0aW1lUmFuZ2VzLnN0YXJ0KGkpLCB0aW1lUmFuZ2VzLmVuZChpKV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2aWRlb2pzJDEuY3JlYXRlVGltZVJhbmdlcyhyZXN1bHRzKTtcbn07XG4vKipcbiAqIEF0dGVtcHRzIHRvIGZpbmQgdGhlIGJ1ZmZlcmVkIFRpbWVSYW5nZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWRcbiAqIHRpbWUuXG4gKiBAcGFyYW0ge1RpbWVSYW5nZXN9IGJ1ZmZlcmVkIC0gdGhlIFRpbWVSYW5nZXMgb2JqZWN0IHRvIHF1ZXJ5XG4gKiBAcGFyYW0ge251bWJlcn0gdGltZSAgLSB0aGUgdGltZSB0byBmaWx0ZXIgb24uXG4gKiBAcmV0dXJucyB7VGltZVJhbmdlc30gYSBuZXcgVGltZVJhbmdlcyBvYmplY3RcbiAqL1xuXG5cbnZhciBmaW5kUmFuZ2UgPSBmdW5jdGlvbiBmaW5kUmFuZ2UoYnVmZmVyZWQsIHRpbWUpIHtcbiAgcmV0dXJuIGZpbHRlclJhbmdlcyhidWZmZXJlZCwgZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3RhcnQgLSBTQUZFX1RJTUVfREVMVEEgPD0gdGltZSAmJiBlbmQgKyBTQUZFX1RJTUVfREVMVEEgPj0gdGltZTtcbiAgfSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBUaW1lUmFuZ2VzIHRoYXQgYmVnaW4gbGF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUuXG4gKiBAcGFyYW0ge1RpbWVSYW5nZXN9IHRpbWVSYW5nZXMgLSB0aGUgVGltZVJhbmdlcyBvYmplY3QgdG8gcXVlcnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gdGhlIHRpbWUgdG8gZmlsdGVyIG9uLlxuICogQHJldHVybnMge1RpbWVSYW5nZXN9IGEgbmV3IFRpbWVSYW5nZXMgb2JqZWN0LlxuICovXG5cblxudmFyIGZpbmROZXh0UmFuZ2UgPSBmdW5jdGlvbiBmaW5kTmV4dFJhbmdlKHRpbWVSYW5nZXMsIHRpbWUpIHtcbiAgcmV0dXJuIGZpbHRlclJhbmdlcyh0aW1lUmFuZ2VzLCBmdW5jdGlvbiAoc3RhcnQpIHtcbiAgICByZXR1cm4gc3RhcnQgLSBUSU1FX0ZVREdFX0ZBQ1RPUiA+PSB0aW1lO1xuICB9KTtcbn07XG4vKipcbiAqIFJldHVybnMgZ2FwcyB3aXRoaW4gYSBsaXN0IG9mIFRpbWVSYW5nZXNcbiAqIEBwYXJhbSB7VGltZVJhbmdlc30gYnVmZmVyZWQgLSB0aGUgVGltZVJhbmdlcyBvYmplY3RcbiAqIEByZXR1cm4ge1RpbWVSYW5nZXN9IGEgVGltZVJhbmdlcyBvYmplY3Qgb2YgZ2Fwc1xuICovXG5cblxudmFyIGZpbmRHYXBzID0gZnVuY3Rpb24gZmluZEdhcHMoYnVmZmVyZWQpIHtcbiAgaWYgKGJ1ZmZlcmVkLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoKTtcbiAgfVxuXG4gIHZhciByYW5nZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGJ1ZmZlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHN0YXJ0ID0gYnVmZmVyZWQuZW5kKGkgLSAxKTtcbiAgICB2YXIgZW5kID0gYnVmZmVyZWQuc3RhcnQoaSk7XG4gICAgcmFuZ2VzLnB1c2goW3N0YXJ0LCBlbmRdKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlb2pzJDEuY3JlYXRlVGltZVJhbmdlcyhyYW5nZXMpO1xufTtcbi8qKlxuICogR2V0cyBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyBmb3IgYSBUaW1lUmFuZ2VcbiAqXG4gKiBAcGFyYW0ge1RpbWVSYW5nZX0gcmFuZ2VcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nXG4gKi9cblxuXG52YXIgcHJpbnRhYmxlUmFuZ2UgPSBmdW5jdGlvbiBwcmludGFibGVSYW5nZShyYW5nZSkge1xuICB2YXIgc3RyQXJyID0gW107XG5cbiAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZS5sZW5ndGg7IGkrKykge1xuICAgIHN0ckFyci5wdXNoKHJhbmdlLnN0YXJ0KGkpICsgJyA9PiAnICsgcmFuZ2UuZW5kKGkpKTtcbiAgfVxuXG4gIHJldHVybiBzdHJBcnIuam9pbignLCAnKTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiB0aW1lIGxlZnQgaW4gc2Vjb25kcyB1bnRpbCB0aGUgcGxheWVyIGhpdHMgdGhlIGVuZCBvZiB0aGVcbiAqIGJ1ZmZlciBhbmQgY2F1c2VzIGEgcmVidWZmZXJcbiAqXG4gKiBAcGFyYW0ge1RpbWVSYW5nZX0gYnVmZmVyZWRcbiAqICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIGJ1ZmZlclxuICogQHBhcmFtIHtOdW1uYmVyfSBjdXJyZW50VGltZVxuICogICAgICAgIFRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIHBsYXllclxuICogQHBhcmFtIHtOdW1iZXJ9IHBsYXliYWNrUmF0ZVxuICogICAgICAgIFRoZSBjdXJyZW50IHBsYXliYWNrIHJhdGUgb2YgdGhlIHBsYXllci4gRGVmYXVsdHMgdG8gMS5cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqICAgICAgICAgVGltZSB1bnRpbCB0aGUgcGxheWVyIGhhcyB0byBzdGFydCByZWJ1ZmZlcmluZyBpbiBzZWNvbmRzLlxuICogQGZ1bmN0aW9uIHRpbWVVbnRpbFJlYnVmZmVyXG4gKi9cblxuXG52YXIgdGltZVVudGlsUmVidWZmZXIgPSBmdW5jdGlvbiB0aW1lVW50aWxSZWJ1ZmZlcihidWZmZXJlZCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIHBsYXliYWNrUmF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcbiAgdmFyIGJ1ZmZlcmVkRW5kID0gYnVmZmVyZWQubGVuZ3RoID8gYnVmZmVyZWQuZW5kKGJ1ZmZlcmVkLmxlbmd0aCAtIDEpIDogMDtcbiAgcmV0dXJuIChidWZmZXJlZEVuZCAtIGN1cnJlbnRUaW1lKSAvIHBsYXliYWNrUmF0ZTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgVGltZVJhbmdlcyBvYmplY3QgaW50byBhbiBhcnJheSByZXByZXNlbnRhdGlvblxuICogQHBhcmFtIHtUaW1lUmFuZ2VzfSB0aW1lUmFuZ2VzXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cblxuXG52YXIgdGltZVJhbmdlc1RvQXJyYXkgPSBmdW5jdGlvbiB0aW1lUmFuZ2VzVG9BcnJheSh0aW1lUmFuZ2VzKSB7XG4gIHZhciB0aW1lUmFuZ2VzTGlzdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGltZVJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHRpbWVSYW5nZXNMaXN0LnB1c2goe1xuICAgICAgc3RhcnQ6IHRpbWVSYW5nZXMuc3RhcnQoaSksXG4gICAgICBlbmQ6IHRpbWVSYW5nZXMuZW5kKGkpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGltZVJhbmdlc0xpc3Q7XG59O1xuLyoqXG4gKiBAZmlsZSBjcmVhdGUtdGV4dC10cmFja3MtaWYtbmVjZXNzYXJ5LmpzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgdGV4dCB0cmFja3Mgb24gdmlkZW8uanMgaWYgdGhleSBleGlzdCBvbiBhIHNlZ21lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZUJ1ZmZlciB0aGUgVlNCIG9yIEZTQlxuICogQHBhcmFtIHtPYmplY3R9IG1lZGlhU291cmNlIHRoZSBIVE1MIG1lZGlhIHNvdXJjZVxuICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnQgdGhlIHNlZ21lbnQgdGhhdCBtYXkgY29udGFpbiB0aGUgdGV4dCB0cmFja1xuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciBjcmVhdGVUZXh0VHJhY2tzSWZOZWNlc3NhcnkgPSBmdW5jdGlvbiBjcmVhdGVUZXh0VHJhY2tzSWZOZWNlc3Nhcnkoc291cmNlQnVmZmVyLCBtZWRpYVNvdXJjZSwgc2VnbWVudCkge1xuICB2YXIgcGxheWVyID0gbWVkaWFTb3VyY2UucGxheWVyXzsgLy8gY3JlYXRlIGFuIGluLWJhbmQgY2FwdGlvbiB0cmFjayBpZiBvbmUgaXMgcHJlc2VudCBpbiB0aGUgc2VnbWVudFxuXG4gIGlmIChzZWdtZW50LmNhcHRpb25zICYmIHNlZ21lbnQuY2FwdGlvbnMubGVuZ3RoKSB7XG4gICAgaWYgKCFzb3VyY2VCdWZmZXIuaW5iYW5kVGV4dFRyYWNrc18pIHtcbiAgICAgIHNvdXJjZUJ1ZmZlci5pbmJhbmRUZXh0VHJhY2tzXyA9IHt9O1xuICAgIH1cblxuICAgIGZvciAodmFyIHRyYWNrSWQgaW4gc2VnbWVudC5jYXB0aW9uU3RyZWFtcykge1xuICAgICAgaWYgKCFzb3VyY2VCdWZmZXIuaW5iYW5kVGV4dFRyYWNrc19bdHJhY2tJZF0pIHtcbiAgICAgICAgcGxheWVyLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy02MDgnXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgdHJhY2sgPSBwbGF5ZXIudGV4dFRyYWNrcygpLmdldFRyYWNrQnlJZCh0cmFja0lkKTtcblxuICAgICAgICBpZiAodHJhY2spIHtcbiAgICAgICAgICAvLyBSZXN1c2UgYW4gZXhpc3RpbmcgdHJhY2sgd2l0aCBhIENDIyBpZCBiZWNhdXNlIHRoaXMgd2FzXG4gICAgICAgICAgLy8gdmVyeSBsaWtlbHkgY3JlYXRlZCBieSB2aWRlb2pzLWNvbnRyaWItaGxzIGZyb20gaW5mb3JtYXRpb25cbiAgICAgICAgICAvLyBpbiB0aGUgbTN1OCBmb3IgdXMgdG8gdXNlXG4gICAgICAgICAgc291cmNlQnVmZmVyLmluYmFuZFRleHRUcmFja3NfW3RyYWNrSWRdID0gdHJhY2s7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSB0cmFjayB3aXRoIHRoZSBkZWZhdWx0IGBDQyNgIGxhYmVsIGFuZFxuICAgICAgICAgIC8vIHdpdGhvdXQgYSBsYW5ndWFnZVxuICAgICAgICAgIHNvdXJjZUJ1ZmZlci5pbmJhbmRUZXh0VHJhY2tzX1t0cmFja0lkXSA9IHBsYXllci5hZGRSZW1vdGVUZXh0VHJhY2soe1xuICAgICAgICAgICAga2luZDogJ2NhcHRpb25zJyxcbiAgICAgICAgICAgIGlkOiB0cmFja0lkLFxuICAgICAgICAgICAgbGFiZWw6IHRyYWNrSWRcbiAgICAgICAgICB9LCBmYWxzZSkudHJhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc2VnbWVudC5tZXRhZGF0YSAmJiBzZWdtZW50Lm1ldGFkYXRhLmxlbmd0aCAmJiAhc291cmNlQnVmZmVyLm1ldGFkYXRhVHJhY2tfKSB7XG4gICAgc291cmNlQnVmZmVyLm1ldGFkYXRhVHJhY2tfID0gcGxheWVyLmFkZFJlbW90ZVRleHRUcmFjayh7XG4gICAgICBraW5kOiAnbWV0YWRhdGEnLFxuICAgICAgbGFiZWw6ICdUaW1lZCBNZXRhZGF0YSdcbiAgICB9LCBmYWxzZSkudHJhY2s7XG4gICAgc291cmNlQnVmZmVyLm1ldGFkYXRhVHJhY2tfLmluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUgPSBzZWdtZW50Lm1ldGFkYXRhLmRpc3BhdGNoVHlwZTtcbiAgfVxufTtcbi8qKlxuICogQGZpbGUgcmVtb3ZlLWN1ZXMtZnJvbS10cmFjay5qc1xuICovXG5cbi8qKlxuICogUmVtb3ZlIGN1ZXMgZnJvbSBhIHRyYWNrIG9uIHZpZGVvLmpzLlxuICpcbiAqIEBwYXJhbSB7RG91YmxlfSBzdGFydCBzdGFydCBvZiB3aGVyZSB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjdWVcbiAqIEBwYXJhbSB7RG91YmxlfSBlbmQgZW5kIG9mIHdoZXJlIHRoZSB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmFjayB0aGUgdGV4dCB0cmFjayB0byByZW1vdmUgdGhlIGN1ZXMgZnJvbVxuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciByZW1vdmVDdWVzRnJvbVRyYWNrID0gZnVuY3Rpb24gcmVtb3ZlQ3Vlc0Zyb21UcmFjayhzdGFydCwgZW5kLCB0cmFjaykge1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgdmFyIGN1ZSA9IHZvaWQgMDtcblxuICBpZiAoIXRyYWNrKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCF0cmFjay5jdWVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaSA9IHRyYWNrLmN1ZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBjdWUgPSB0cmFjay5jdWVzW2ldOyAvLyBSZW1vdmUgYW55IG92ZXJsYXBwaW5nIGN1ZVxuXG4gICAgaWYgKGN1ZS5zdGFydFRpbWUgPD0gZW5kICYmIGN1ZS5lbmRUaW1lID49IHN0YXJ0KSB7XG4gICAgICB0cmFjay5yZW1vdmVDdWUoY3VlKTtcbiAgICB9XG4gIH1cbn07XG4vKipcbiAqIEBmaWxlIGFkZC10ZXh0LXRyYWNrLWRhdGEuanNcbiAqL1xuXG4vKipcbiAqIERlZmluZSBwcm9wZXJ0aWVzIG9uIGEgY3VlIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSxcbiAqIGJ1dCB3YXJuIHRoZSB1c2VyIHRoYXQgdGhlIHdheSB0aGF0IHRoZXkgYXJlIHVzaW5nIGl0XG4gKiBpcyBkZXByaWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgYXQgYSBsYXRlciBkYXRlLlxuICpcbiAqIEBwYXJhbSB7Q3VlfSBjdWUgdGhlIGN1ZSB0byBhZGQgdGhlIHByb3BlcnRpZXMgb25cbiAqIEBwcml2YXRlXG4gKi9cblxuXG52YXIgZGVwcmVjYXRlT2xkQ3VlID0gZnVuY3Rpb24gZGVwcmVjYXRlT2xkQ3VlKGN1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjdWUuZnJhbWUsIHtcbiAgICBpZDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHZpZGVvanMkMS5sb2cud2FybignY3VlLmZyYW1lLmlkIGlzIGRlcHJlY2F0ZWQuIFVzZSBjdWUudmFsdWUua2V5IGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBjdWUudmFsdWUua2V5O1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ2N1ZS5mcmFtZS52YWx1ZSBpcyBkZXByZWNhdGVkLiBVc2UgY3VlLnZhbHVlLmRhdGEgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIGN1ZS52YWx1ZS5kYXRhO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJpdmF0ZURhdGE6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ2N1ZS5mcmFtZS5wcml2YXRlRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgY3VlLnZhbHVlLmRhdGEgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIGN1ZS52YWx1ZS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgZHVyYXRpb25PZlZpZGVvID0gZnVuY3Rpb24gZHVyYXRpb25PZlZpZGVvKGR1cmF0aW9uKSB7XG4gIHZhciBkdXIgPSB2b2lkIDA7XG5cbiAgaWYgKGlzTmFOKGR1cmF0aW9uKSB8fCBNYXRoLmFicyhkdXJhdGlvbikgPT09IEluZmluaXR5KSB7XG4gICAgZHVyID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgfSBlbHNlIHtcbiAgICBkdXIgPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHJldHVybiBkdXI7XG59O1xuLyoqXG4gKiBBZGQgdGV4dCB0cmFjayBkYXRhIHRvIGEgc291cmNlIGhhbmRsZXIgZ2l2ZW4gdGhlIGNhcHRpb25zIGFuZFxuICogbWV0YWRhdGEgZnJvbSB0aGUgYnVmZmVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VIYW5kbGVyIHRoZSB2aXJ0dWFsIHNvdXJjZSBidWZmZXJcbiAqIEBwYXJhbSB7QXJyYXl9IGNhcHRpb25BcnJheSBhbiBhcnJheSBvZiBjYXB0aW9uIGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1ldGFkYXRhQXJyYXkgYW4gYXJyYXkgb2YgbWV0YSBkYXRhXG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIGFkZFRleHRUcmFja0RhdGEgPSBmdW5jdGlvbiBhZGRUZXh0VHJhY2tEYXRhKHNvdXJjZUhhbmRsZXIsIGNhcHRpb25BcnJheSwgbWV0YWRhdGFBcnJheSkge1xuICB2YXIgQ3VlID0gd2luZG93JDEuV2ViS2l0RGF0YUN1ZSB8fCB3aW5kb3ckMS5WVFRDdWU7XG5cbiAgaWYgKGNhcHRpb25BcnJheSkge1xuICAgIGNhcHRpb25BcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChjYXB0aW9uKSB7XG4gICAgICB2YXIgdHJhY2sgPSBjYXB0aW9uLnN0cmVhbTtcbiAgICAgIHRoaXMuaW5iYW5kVGV4dFRyYWNrc19bdHJhY2tdLmFkZEN1ZShuZXcgQ3VlKGNhcHRpb24uc3RhcnRUaW1lICsgdGhpcy50aW1lc3RhbXBPZmZzZXQsIGNhcHRpb24uZW5kVGltZSArIHRoaXMudGltZXN0YW1wT2Zmc2V0LCBjYXB0aW9uLnRleHQpKTtcbiAgICB9LCBzb3VyY2VIYW5kbGVyKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YUFycmF5KSB7XG4gICAgdmFyIHZpZGVvRHVyYXRpb24gPSBkdXJhdGlvbk9mVmlkZW8oc291cmNlSGFuZGxlci5tZWRpYVNvdXJjZV8uZHVyYXRpb24pO1xuICAgIG1ldGFkYXRhQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAobWV0YWRhdGEpIHtcbiAgICAgIHZhciB0aW1lID0gbWV0YWRhdGEuY3VlVGltZSArIHRoaXMudGltZXN0YW1wT2Zmc2V0OyAvLyBpZiB0aW1lIGlzbid0IGEgZmluaXRlIG51bWJlciBiZXR3ZWVuIDAgYW5kIEluZmluaXR5LCBsaWtlIE5hTixcbiAgICAgIC8vIGlnbm9yZSB0aGlzIGJpdCBvZiBtZXRhZGF0YS5cbiAgICAgIC8vIFRoaXMgbGlrZWx5IG9jY3VycyB3aGVuIHlvdSBoYXZlIGFuIG5vbi10aW1lZCBJRDMgdGFnIGxpa2UgVElUMixcbiAgICAgIC8vIHdoaWNoIGlzIHRoZSBcIlRpdGxlL1NvbmduYW1lL0NvbnRlbnQgZGVzY3JpcHRpb25cIiBmcmFtZVxuXG4gICAgICBpZiAodHlwZW9mIHRpbWUgIT09ICdudW1iZXInIHx8IHdpbmRvdyQxLmlzTmFOKHRpbWUpIHx8IHRpbWUgPCAwIHx8ICEodGltZSA8IEluZmluaXR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1ldGFkYXRhLmZyYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChmcmFtZSkge1xuICAgICAgICB2YXIgY3VlID0gbmV3IEN1ZSh0aW1lLCB0aW1lLCBmcmFtZS52YWx1ZSB8fCBmcmFtZS51cmwgfHwgZnJhbWUuZGF0YSB8fCAnJyk7XG4gICAgICAgIGN1ZS5mcmFtZSA9IGZyYW1lO1xuICAgICAgICBjdWUudmFsdWUgPSBmcmFtZTtcbiAgICAgICAgZGVwcmVjYXRlT2xkQ3VlKGN1ZSk7XG4gICAgICAgIHRoaXMubWV0YWRhdGFUcmFja18uYWRkQ3VlKGN1ZSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9LCBzb3VyY2VIYW5kbGVyKTsgLy8gVXBkYXRpbmcgdGhlIG1ldGFkZXRhIGN1ZXMgc28gdGhhdFxuICAgIC8vIHRoZSBlbmRUaW1lIG9mIGVhY2ggY3VlIGlzIHRoZSBzdGFydFRpbWUgb2YgdGhlIG5leHQgY3VlXG4gICAgLy8gdGhlIGVuZFRpbWUgb2YgbGFzdCBjdWUgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSB2aWRlb1xuXG4gICAgaWYgKHNvdXJjZUhhbmRsZXIubWV0YWRhdGFUcmFja18gJiYgc291cmNlSGFuZGxlci5tZXRhZGF0YVRyYWNrXy5jdWVzICYmIHNvdXJjZUhhbmRsZXIubWV0YWRhdGFUcmFja18uY3Vlcy5sZW5ndGgpIHtcbiAgICAgIHZhciBjdWVzID0gc291cmNlSGFuZGxlci5tZXRhZGF0YVRyYWNrXy5jdWVzO1xuICAgICAgdmFyIGN1ZXNBcnJheSA9IFtdOyAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBUZXh0VHJhY2tDdWVMaXN0Li4uXG4gICAgICAvLyAuLi5kaXNyZWdhcmRpbmcgY3VlcyB3aXRoIGEgZmFsc2V5IHZhbHVlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3Vlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3Vlc1tpXSkge1xuICAgICAgICAgIGN1ZXNBcnJheS5wdXNoKGN1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9IC8vIEdyb3VwIGN1ZXMgYnkgdGhlaXIgc3RhcnRUaW1lIHZhbHVlXG5cblxuICAgICAgdmFyIGN1ZXNHcm91cGVkQnlTdGFydFRpbWUgPSBjdWVzQXJyYXkucmVkdWNlKGZ1bmN0aW9uIChvYmosIGN1ZSkge1xuICAgICAgICB2YXIgdGltZVNsb3QgPSBvYmpbY3VlLnN0YXJ0VGltZV0gfHwgW107XG4gICAgICAgIHRpbWVTbG90LnB1c2goY3VlKTtcbiAgICAgICAgb2JqW2N1ZS5zdGFydFRpbWVdID0gdGltZVNsb3Q7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LCB7fSk7IC8vIFNvcnQgc3RhcnRUaW1lcyBieSBhc2NlbmRpbmcgb3JkZXJcblxuICAgICAgdmFyIHNvcnRlZFN0YXJ0VGltZXMgPSBPYmplY3Qua2V5cyhjdWVzR3JvdXBlZEJ5U3RhcnRUaW1lKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoYSkgLSBOdW1iZXIoYik7XG4gICAgICB9KTsgLy8gTWFwIGVhY2ggY3VlIGdyb3VwJ3MgZW5kVGltZSB0byB0aGUgbmV4dCBncm91cCdzIHN0YXJ0VGltZVxuXG4gICAgICBzb3J0ZWRTdGFydFRpbWVzLmZvckVhY2goZnVuY3Rpb24gKHN0YXJ0VGltZSwgaWR4KSB7XG4gICAgICAgIHZhciBjdWVHcm91cCA9IGN1ZXNHcm91cGVkQnlTdGFydFRpbWVbc3RhcnRUaW1lXTtcbiAgICAgICAgdmFyIG5leHRUaW1lID0gTnVtYmVyKHNvcnRlZFN0YXJ0VGltZXNbaWR4ICsgMV0pIHx8IHZpZGVvRHVyYXRpb247IC8vIE1hcCBlYWNoIGN1ZSdzIGVuZFRpbWUgdGhlIG5leHQgZ3JvdXAncyBzdGFydFRpbWVcblxuICAgICAgICBjdWVHcm91cC5mb3JFYWNoKGZ1bmN0aW9uIChjdWUpIHtcbiAgICAgICAgICBjdWUuZW5kVGltZSA9IG5leHRUaW1lO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge30sXG4gICAgVEFSR0VUID0gdHlwZW9mIFN5bWJvbCA9PT0gJ3VuZGVmaW5lZCcgPyAnX190YXJnZXQnIDogU3ltYm9sKCksXG4gICAgU0NSSVBUX1RZUEUgPSAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXG4gICAgQmxvYkJ1aWxkZXIgPSB3aW4uQmxvYkJ1aWxkZXIgfHwgd2luLldlYktpdEJsb2JCdWlsZGVyIHx8IHdpbi5Nb3pCbG9iQnVpbGRlciB8fCB3aW4uTVNCbG9iQnVpbGRlcixcbiAgICBVUkwgPSB3aW4uVVJMIHx8IHdpbi53ZWJraXRVUkwgfHwgVVJMICYmIFVSTC5tc1VSTCxcbiAgICBXb3JrZXIgPSB3aW4uV29ya2VyO1xuLyoqXG4gKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgV2ViIFdvcmtlciBjb2RlIHRoYXQgaXMgY29uc3RydWN0aWJsZS5cbiAqXG4gKiBAZnVuY3Rpb24gc2hpbVdvcmtlclxuICpcbiAqIEBwYXJhbSB7IFN0cmluZyB9ICAgIGZpbGVuYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlXG4gKiBAcGFyYW0geyBGdW5jdGlvbiB9ICBmbiAgICAgICAgICBGdW5jdGlvbiB3cmFwcGluZyB0aGUgY29kZSBvZiB0aGUgd29ya2VyXG4gKi9cblxuZnVuY3Rpb24gc2hpbVdvcmtlcihmaWxlbmFtZSwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNoaW1Xb3JrZXIoZm9yY2VGYWxsYmFjaykge1xuICAgIHZhciBvID0gdGhpcztcblxuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybiBuZXcgV29ya2VyKGZpbGVuYW1lKTtcbiAgICB9IGVsc2UgaWYgKFdvcmtlciAmJiAhZm9yY2VGYWxsYmFjaykge1xuICAgICAgLy8gQ29udmVydCB0aGUgZnVuY3Rpb24ncyBpbm5lciBjb2RlIHRvIGEgc3RyaW5nIHRvIGNvbnN0cnVjdCB0aGUgd29ya2VyXG4gICAgICB2YXIgc291cmNlID0gZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9eZnVuY3Rpb24uKz97LywgJycpLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgICBvYmpVUkwgPSBjcmVhdGVTb3VyY2VPYmplY3Qoc291cmNlKTtcbiAgICAgIHRoaXNbVEFSR0VUXSA9IG5ldyBXb3JrZXIob2JqVVJMKTtcbiAgICAgIHdyYXBUZXJtaW5hdGUodGhpc1tUQVJHRVRdLCBvYmpVUkwpO1xuICAgICAgcmV0dXJuIHRoaXNbVEFSR0VUXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNlbGZTaGltID0ge1xuICAgICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobSkge1xuICAgICAgICAgIGlmIChvLm9ubWVzc2FnZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIG8ub25tZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBtLFxuICAgICAgICAgICAgICAgIHRhcmdldDogc2VsZlNoaW1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmbi5jYWxsKHNlbGZTaGltKTtcblxuICAgICAgdGhpcy5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNlbGZTaGltLm9ubWVzc2FnZSh7XG4gICAgICAgICAgICBkYXRhOiBtLFxuICAgICAgICAgICAgdGFyZ2V0OiBvXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5pc1RoaXNUaHJlYWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcbn0gLy8gVGVzdCBXb3JrZXIgY2FwYWJpbGl0aWVzXG5cblxuaWYgKFdvcmtlcikge1xuICB2YXIgdGVzdFdvcmtlcixcbiAgICAgIG9ialVSTCA9IGNyZWF0ZVNvdXJjZU9iamVjdCgnc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7fScpLFxuICAgICAgdGVzdEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG5cbiAgdHJ5IHtcbiAgICB0ZXN0V29ya2VyID0gbmV3IFdvcmtlcihvYmpVUkwpOyAvLyBOYXRpdmUgYnJvd3NlciBvbiBzb21lIFNhbXN1bmcgZGV2aWNlcyB0aHJvd3MgZm9yIHRyYW5zZmVyYWJsZXMsIGxldCdzIGRldGVjdCBpdFxuXG4gICAgdGVzdFdvcmtlci5wb3N0TWVzc2FnZSh0ZXN0QXJyYXksIFt0ZXN0QXJyYXkuYnVmZmVyXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBXb3JrZXIgPSBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqVVJMKTtcblxuICAgIGlmICh0ZXN0V29ya2VyKSB7XG4gICAgICB0ZXN0V29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2VPYmplY3Qoc3RyKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3N0cl0sIHtcbiAgICAgIHR5cGU6IFNDUklQVF9UWVBFXG4gICAgfSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYkJ1aWxkZXIoKTtcbiAgICBibG9iLmFwcGVuZChzdHIpO1xuICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IuZ2V0QmxvYih0eXBlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcFRlcm1pbmF0ZSh3b3JrZXIsIG9ialVSTCkge1xuICBpZiAoIXdvcmtlciB8fCAhb2JqVVJMKSByZXR1cm47XG4gIHZhciB0ZXJtID0gd29ya2VyLnRlcm1pbmF0ZTtcbiAgd29ya2VyLm9ialVSTCA9IG9ialVSTDtcblxuICB3b3JrZXIudGVybWluYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh3b3JrZXIub2JqVVJMKSBVUkwucmV2b2tlT2JqZWN0VVJMKHdvcmtlci5vYmpVUkwpO1xuICAgIHRlcm0uY2FsbCh3b3JrZXIpO1xuICB9O1xufVxuXG52YXIgVHJhbnNtdXhXb3JrZXIgPSBuZXcgc2hpbVdvcmtlcihcIi4vdHJhbnNtdXhlci13b3JrZXIud29ya2VyLmpzXCIsIGZ1bmN0aW9uICh3aW5kb3csIGRvY3VtZW50JCQxKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgdHJhbnNtdXhlcldvcmtlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKlxuICAgICAqIEEgbGlnaHR3ZWlnaHQgcmVhZGFibGUgc3RyZWFtIGltcGxlbWVudGlvbiB0aGF0IGhhbmRsZXMgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogT2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBzdHJlYW1zIHNob3VsZCBjYWxsIGluaXQgaW4gdGhlaXIgY29uc3RydWN0b3JzLlxuICAgICAqL1xuICAgIHZhciBTdHJlYW0gPSBmdW5jdGlvbiBTdHJlYW0oKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAgICAgKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSB0aGUgZXZlbnQgbmFtZVxuICAgICAgICAgKiBAcGFyYW0gbGlzdGVuZXIge2Z1bmN0aW9ufSB0aGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGFuIGV2ZW50IG9mXG4gICAgICAgICAqIHRoZSBzcGVjaWZpZWQgdHlwZSBvY2N1cnNcbiAgICAgICAgICovXG5cbiAgICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICAgIGlmICghbGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcnNbdHlwZV0uY29uY2F0KGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAgICAgKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSB0aGUgZXZlbnQgbmFtZVxuICAgICAgICAgKiBAcGFyYW0gbGlzdGVuZXIge2Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBmb3IgdGhpc1xuICAgICAgICAgKiB0eXBlIG9mIGV2ZW50IHRocm91Z2ggYG9uYFxuICAgICAgICAgKi9cblxuXG4gICAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgICAgdmFyIGluZGV4O1xuXG4gICAgICAgICAgaWYgKCFsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbmRleCA9IGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcnNbdHlwZV0uc2xpY2UoKTtcbiAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRyaWdnZXIgYW4gZXZlbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIG9uIHRoaXMgc3RyZWFtLiBBbnkgYWRkaXRpb25hbFxuICAgICAgICAgKiBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8gZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSB0aGUgZXZlbnQgbmFtZVxuICAgICAgICAgKi9cblxuXG4gICAgICAgIHRoaXMudHJpZ2dlciA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrcywgaSwgbGVuZ3RoLCBhcmdzO1xuICAgICAgICAgIGNhbGxiYWNrcyA9IGxpc3RlbmVyc1t0eXBlXTtcblxuICAgICAgICAgIGlmICghY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSAvLyBTbGljaW5nIHRoZSBhcmd1bWVudHMgb24gZXZlcnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZFxuICAgICAgICAgIC8vIGNhbiBhZGQgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygb3ZlcmhlYWQuIEF2b2lkIHRoZVxuICAgICAgICAgIC8vIGludGVybWVkaWF0ZSBvYmplY3QgY3JlYXRpb24gZm9yIHRoZSBjb21tb24gY2FzZSBvZiBhXG4gICAgICAgICAgLy8gc2luZ2xlIGNhbGxiYWNrIGFyZ3VtZW50XG5cblxuICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBsZW5ndGggPSBjYWxsYmFja3MubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVzdHJveXMgdGhlIHN0cmVhbSBhbmQgY2xlYW5zIHVwLlxuICAgICAgICAgKi9cblxuXG4gICAgICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3J3YXJkcyBhbGwgYGRhdGFgIGV2ZW50cyBvbiB0aGlzIHN0cmVhbSB0byB0aGUgZGVzdGluYXRpb24gc3RyZWFtLiBUaGVcbiAgICAgKiBkZXN0aW5hdGlvbiBzdHJlYW0gc2hvdWxkIHByb3ZpZGUgYSBtZXRob2QgYHB1c2hgIHRvIHJlY2VpdmUgdGhlIGRhdGFcbiAgICAgKiBldmVudHMgYXMgdGhleSBhcnJpdmUuXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIHtzdHJlYW19IHRoZSBzdHJlYW0gdGhhdCB3aWxsIHJlY2VpdmUgYWxsIGBkYXRhYCBldmVudHNcbiAgICAgKiBAcGFyYW0gYXV0b0ZsdXNoIHtib29sZWFufSBpZiBmYWxzZSwgd2Ugd2lsbCBub3QgY2FsbCBgZmx1c2hgIG9uIHRoZSBkZXN0aW5hdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGN1cnJlbnQgc3RyZWFtIGVtaXRzIGEgJ2RvbmUnIGV2ZW50XG4gICAgICogQHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvc3RyZWFtLmh0bWwjc3RyZWFtX3JlYWRhYmxlX3BpcGVfZGVzdGluYXRpb25fb3B0aW9uc1xuICAgICAqL1xuXG5cbiAgICBTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uKCdkb25lJywgZnVuY3Rpb24gKGZsdXNoU291cmNlKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uLmZsdXNoKGZsdXNoU291cmNlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbigncGFydGlhbGRvbmUnLCBmdW5jdGlvbiAoZmx1c2hTb3VyY2UpIHtcbiAgICAgICAgZGVzdGluYXRpb24ucGFydGlhbEZsdXNoKGZsdXNoU291cmNlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbignZW5kZWR0aW1lbGluZScsIGZ1bmN0aW9uIChmbHVzaFNvdXJjZSkge1xuICAgICAgICBkZXN0aW5hdGlvbi5lbmRUaW1lbGluZShmbHVzaFNvdXJjZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub24oJ3Jlc2V0JywgZnVuY3Rpb24gKGZsdXNoU291cmNlKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uLnJlc2V0KGZsdXNoU291cmNlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH07IC8vIERlZmF1bHQgc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBvdmVycmlkZGVuIHRvIHBlcmZvcm1cbiAgICAvLyBhY3R1YWwgd29yay4gVGhlc2UgYXJlIHByb3ZpZGVkIGJ5IHRoZSBwcm90b3R5cGUgYXMgYSBzb3J0IG9mIG5vLW9wXG4gICAgLy8gaW1wbGVtZW50YXRpb24gc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciB0aGVpciBleGlzdGVuY2UgaW4gdGhlXG4gICAgLy8gYHBpcGVgIGZ1bmN0aW9uIGFib3ZlLlxuXG5cbiAgICBTdHJlYW0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgZGF0YSk7XG4gICAgfTtcblxuICAgIFN0cmVhbS5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoZmx1c2hTb3VyY2UpIHtcbiAgICAgIHRoaXMudHJpZ2dlcignZG9uZScsIGZsdXNoU291cmNlKTtcbiAgICB9O1xuXG4gICAgU3RyZWFtLnByb3RvdHlwZS5wYXJ0aWFsRmx1c2ggPSBmdW5jdGlvbiAoZmx1c2hTb3VyY2UpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigncGFydGlhbGRvbmUnLCBmbHVzaFNvdXJjZSk7XG4gICAgfTtcblxuICAgIFN0cmVhbS5wcm90b3R5cGUuZW5kVGltZWxpbmUgPSBmdW5jdGlvbiAoZmx1c2hTb3VyY2UpIHtcbiAgICAgIHRoaXMudHJpZ2dlcignZW5kZWR0aW1lbGluZScsIGZsdXNoU291cmNlKTtcbiAgICB9O1xuXG4gICAgU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIChmbHVzaFNvdXJjZSkge1xuICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldCcsIGZsdXNoU291cmNlKTtcbiAgICB9O1xuXG4gICAgdmFyIHN0cmVhbSA9IFN0cmVhbTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKlxuICAgICAqIEZ1bmN0aW9ucyB0aGF0IGdlbmVyYXRlIGZyYWdtZW50ZWQgTVA0cyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggTWVkaWFcbiAgICAgKiBTb3VyY2UgRXh0ZW5zaW9ucy5cbiAgICAgKi9cblxuICAgIHZhciBVSU5UMzJfTUFYID0gTWF0aC5wb3coMiwgMzIpIC0gMTtcbiAgICB2YXIgYm94LCBkaW5mLCBlc2RzLCBmdHlwLCBtZGF0LCBtZmhkLCBtaW5mLCBtb29mLCBtb292LCBtdmV4LCBtdmhkLCB0cmFrLCB0a2hkLCBtZGlhLCBtZGhkLCBoZGxyLCBzZHRwLCBzdGJsLCBzdHNkLCB0cmFmLCB0cmV4LCB0cnVuLCB0eXBlcywgTUFKT1JfQlJBTkQsIE1JTk9SX1ZFUlNJT04sIEFWQzFfQlJBTkQsIFZJREVPX0hETFIsIEFVRElPX0hETFIsIEhETFJfVFlQRVMsIFZNSEQsIFNNSEQsIERSRUYsIFNUQ08sIFNUU0MsIFNUU1osIFNUVFM7IC8vIHByZS1jYWxjdWxhdGUgY29uc3RhbnRzXG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGk7XG4gICAgICB0eXBlcyA9IHtcbiAgICAgICAgYXZjMTogW10sXG4gICAgICAgIC8vIGNvZGluZ25hbWVcbiAgICAgICAgYXZjQzogW10sXG4gICAgICAgIGJ0cnQ6IFtdLFxuICAgICAgICBkaW5mOiBbXSxcbiAgICAgICAgZHJlZjogW10sXG4gICAgICAgIGVzZHM6IFtdLFxuICAgICAgICBmdHlwOiBbXSxcbiAgICAgICAgaGRscjogW10sXG4gICAgICAgIG1kYXQ6IFtdLFxuICAgICAgICBtZGhkOiBbXSxcbiAgICAgICAgbWRpYTogW10sXG4gICAgICAgIG1maGQ6IFtdLFxuICAgICAgICBtaW5mOiBbXSxcbiAgICAgICAgbW9vZjogW10sXG4gICAgICAgIG1vb3Y6IFtdLFxuICAgICAgICBtcDRhOiBbXSxcbiAgICAgICAgLy8gY29kaW5nbmFtZVxuICAgICAgICBtdmV4OiBbXSxcbiAgICAgICAgbXZoZDogW10sXG4gICAgICAgIHBhc3A6IFtdLFxuICAgICAgICBzZHRwOiBbXSxcbiAgICAgICAgc21oZDogW10sXG4gICAgICAgIHN0Ymw6IFtdLFxuICAgICAgICBzdGNvOiBbXSxcbiAgICAgICAgc3RzYzogW10sXG4gICAgICAgIHN0c2Q6IFtdLFxuICAgICAgICBzdHN6OiBbXSxcbiAgICAgICAgc3R0czogW10sXG4gICAgICAgIHN0eXA6IFtdLFxuICAgICAgICB0ZmR0OiBbXSxcbiAgICAgICAgdGZoZDogW10sXG4gICAgICAgIHRyYWY6IFtdLFxuICAgICAgICB0cmFrOiBbXSxcbiAgICAgICAgdHJ1bjogW10sXG4gICAgICAgIHRyZXg6IFtdLFxuICAgICAgICB0a2hkOiBbXSxcbiAgICAgICAgdm1oZDogW11cbiAgICAgIH07IC8vIEluIGVudmlyb25tZW50cyB3aGVyZSBVaW50OEFycmF5IGlzIHVuZGVmaW5lZCAoZS5nLiwgSUU4KSwgc2tpcCBzZXQgdXAgc28gdGhhdCB3ZVxuICAgICAgLy8gZG9uJ3QgdGhyb3cgYW4gZXJyb3JcblxuICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSBpbiB0eXBlcykge1xuICAgICAgICBpZiAodHlwZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICB0eXBlc1tpXSA9IFtpLmNoYXJDb2RlQXQoMCksIGkuY2hhckNvZGVBdCgxKSwgaS5jaGFyQ29kZUF0KDIpLCBpLmNoYXJDb2RlQXQoMyldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIE1BSk9SX0JSQU5EID0gbmV3IFVpbnQ4QXJyYXkoWydpJy5jaGFyQ29kZUF0KDApLCAncycuY2hhckNvZGVBdCgwKSwgJ28nLmNoYXJDb2RlQXQoMCksICdtJy5jaGFyQ29kZUF0KDApXSk7XG4gICAgICBBVkMxX0JSQU5EID0gbmV3IFVpbnQ4QXJyYXkoWydhJy5jaGFyQ29kZUF0KDApLCAndicuY2hhckNvZGVBdCgwKSwgJ2MnLmNoYXJDb2RlQXQoMCksICcxJy5jaGFyQ29kZUF0KDApXSk7XG4gICAgICBNSU5PUl9WRVJTSU9OID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDFdKTtcbiAgICAgIFZJREVPX0hETFIgPSBuZXcgVWludDhBcnJheShbMHgwMCwgLy8gdmVyc2lvbiAwXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAvLyBmbGFnc1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcHJlX2RlZmluZWRcbiAgICAgIDB4NzYsIDB4NjksIDB4NjQsIDB4NjUsIC8vIGhhbmRsZXJfdHlwZTogJ3ZpZGUnXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyByZXNlcnZlZFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAweDU2LCAweDY5LCAweDY0LCAweDY1LCAweDZmLCAweDQ4LCAweDYxLCAweDZlLCAweDY0LCAweDZjLCAweDY1LCAweDcyLCAweDAwIC8vIG5hbWU6ICdWaWRlb0hhbmRsZXInXG4gICAgICBdKTtcbiAgICAgIEFVRElPX0hETFIgPSBuZXcgVWludDhBcnJheShbMHgwMCwgLy8gdmVyc2lvbiAwXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAvLyBmbGFnc1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcHJlX2RlZmluZWRcbiAgICAgIDB4NzMsIDB4NmYsIDB4NzUsIDB4NmUsIC8vIGhhbmRsZXJfdHlwZTogJ3NvdW4nXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyByZXNlcnZlZFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAweDUzLCAweDZmLCAweDc1LCAweDZlLCAweDY0LCAweDQ4LCAweDYxLCAweDZlLCAweDY0LCAweDZjLCAweDY1LCAweDcyLCAweDAwIC8vIG5hbWU6ICdTb3VuZEhhbmRsZXInXG4gICAgICBdKTtcbiAgICAgIEhETFJfVFlQRVMgPSB7XG4gICAgICAgIHZpZGVvOiBWSURFT19IRExSLFxuICAgICAgICBhdWRpbzogQVVESU9fSERMUlxuICAgICAgfTtcbiAgICAgIERSRUYgPSBuZXcgVWludDhBcnJheShbMHgwMCwgLy8gdmVyc2lvbiAwXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAvLyBmbGFnc1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgLy8gZW50cnlfY291bnRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIC8vIGVudHJ5X3NpemVcbiAgICAgIDB4NzUsIDB4NzIsIDB4NmMsIDB4MjAsIC8vICd1cmwnIHR5cGVcbiAgICAgIDB4MDAsIC8vIHZlcnNpb24gMFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMSAvLyBlbnRyeV9mbGFnc1xuICAgICAgXSk7XG4gICAgICBTTUhEID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAweDAwLCAweDAwLCAvLyBiYWxhbmNlLCAwIG1lYW5zIGNlbnRlcmVkXG4gICAgICAweDAwLCAweDAwIC8vIHJlc2VydmVkXG4gICAgICBdKTtcbiAgICAgIFNUQ08gPSBuZXcgVWludDhBcnJheShbMHgwMCwgLy8gdmVyc2lvblxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZmxhZ3NcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgLy8gZW50cnlfY291bnRcbiAgICAgIF0pO1xuICAgICAgU1RTQyA9IFNUQ087XG4gICAgICBTVFNaID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyBzYW1wbGVfc2l6ZVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvLyBzYW1wbGVfY291bnRcbiAgICAgIF0pO1xuICAgICAgU1RUUyA9IFNUQ087XG4gICAgICBWTUhEID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIC8vIGZsYWdzXG4gICAgICAweDAwLCAweDAwLCAvLyBncmFwaGljc21vZGVcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgLy8gb3Bjb2xvclxuICAgICAgXSk7XG4gICAgfSkoKTtcblxuICAgIGJveCA9IGZ1bmN0aW9uIGJveCh0eXBlKSB7XG4gICAgICB2YXIgcGF5bG9hZCA9IFtdLFxuICAgICAgICAgIHNpemUgPSAwLFxuICAgICAgICAgIGksXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHZpZXc7XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcGF5bG9hZC5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBwYXlsb2FkLmxlbmd0aDsgLy8gY2FsY3VsYXRlIHRoZSB0b3RhbCBzaXplIHdlIG5lZWQgdG8gYWxsb2NhdGVcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBzaXplICs9IHBheWxvYWRbaV0uYnl0ZUxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSArIDgpO1xuICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhyZXN1bHQuYnVmZmVyLCByZXN1bHQuYnl0ZU9mZnNldCwgcmVzdWx0LmJ5dGVMZW5ndGgpO1xuICAgICAgdmlldy5zZXRVaW50MzIoMCwgcmVzdWx0LmJ5dGVMZW5ndGgpO1xuICAgICAgcmVzdWx0LnNldCh0eXBlLCA0KTsgLy8gY29weSB0aGUgcGF5bG9hZCBpbnRvIHRoZSByZXN1bHRcblxuICAgICAgZm9yIChpID0gMCwgc2l6ZSA9IDg7IGkgPCBwYXlsb2FkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQocGF5bG9hZFtpXSwgc2l6ZSk7XG4gICAgICAgIHNpemUgKz0gcGF5bG9hZFtpXS5ieXRlTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBkaW5mID0gZnVuY3Rpb24gZGluZigpIHtcbiAgICAgIHJldHVybiBib3godHlwZXMuZGluZiwgYm94KHR5cGVzLmRyZWYsIERSRUYpKTtcbiAgICB9O1xuXG4gICAgZXNkcyA9IGZ1bmN0aW9uIGVzZHModHJhY2spIHtcbiAgICAgIHJldHVybiBib3godHlwZXMuZXNkcywgbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAvLyBFU19EZXNjcmlwdG9yXG4gICAgICAweDAzLCAvLyB0YWcsIEVTX0Rlc2NyVGFnXG4gICAgICAweDE5LCAvLyBsZW5ndGhcbiAgICAgIDB4MDAsIDB4MDAsIC8vIEVTX0lEXG4gICAgICAweDAwLCAvLyBzdHJlYW1EZXBlbmRlbmNlRmxhZywgVVJMX2ZsYWcsIHJlc2VydmVkLCBzdHJlYW1Qcmlvcml0eVxuICAgICAgLy8gRGVjb2RlckNvbmZpZ0Rlc2NyaXB0b3JcbiAgICAgIDB4MDQsIC8vIHRhZywgRGVjb2RlckNvbmZpZ0Rlc2NyVGFnXG4gICAgICAweDExLCAvLyBsZW5ndGhcbiAgICAgIDB4NDAsIC8vIG9iamVjdCB0eXBlXG4gICAgICAweDE1LCAvLyBzdHJlYW1UeXBlXG4gICAgICAweDAwLCAweDA2LCAweDAwLCAvLyBidWZmZXJTaXplREJcbiAgICAgIDB4MDAsIDB4MDAsIDB4ZGEsIDB4YzAsIC8vIG1heEJpdHJhdGVcbiAgICAgIDB4MDAsIDB4MDAsIDB4ZGEsIDB4YzAsIC8vIGF2Z0JpdHJhdGVcbiAgICAgIC8vIERlY29kZXJTcGVjaWZpY0luZm9cbiAgICAgIDB4MDUsIC8vIHRhZywgRGVjb2RlclNwZWNpZmljSW5mb1RhZ1xuICAgICAgMHgwMiwgLy8gbGVuZ3RoXG4gICAgICAvLyBJU08vSUVDIDE0NDk2LTMsIEF1ZGlvU3BlY2lmaWNDb25maWdcbiAgICAgIC8vIGZvciBzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4IHNlZSBJU08vSUVDIDEzODE4LTc6MjAwNiwgOC4xLjMuMi4yLCBUYWJsZSAzNVxuICAgICAgdHJhY2suYXVkaW9vYmplY3R0eXBlIDw8IDMgfCB0cmFjay5zYW1wbGluZ2ZyZXF1ZW5jeWluZGV4ID4+PiAxLCB0cmFjay5zYW1wbGluZ2ZyZXF1ZW5jeWluZGV4IDw8IDcgfCB0cmFjay5jaGFubmVsY291bnQgPDwgMywgMHgwNiwgMHgwMSwgMHgwMiAvLyBHQVNwZWNpZmljQ29uZmlnXG4gICAgICBdKSk7XG4gICAgfTtcblxuICAgIGZ0eXAgPSBmdW5jdGlvbiBmdHlwKCkge1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5mdHlwLCBNQUpPUl9CUkFORCwgTUlOT1JfVkVSU0lPTiwgTUFKT1JfQlJBTkQsIEFWQzFfQlJBTkQpO1xuICAgIH07XG5cbiAgICBoZGxyID0gZnVuY3Rpb24gaGRscih0eXBlKSB7XG4gICAgICByZXR1cm4gYm94KHR5cGVzLmhkbHIsIEhETFJfVFlQRVNbdHlwZV0pO1xuICAgIH07XG5cbiAgICBtZGF0ID0gZnVuY3Rpb24gbWRhdChkYXRhKSB7XG4gICAgICByZXR1cm4gYm94KHR5cGVzLm1kYXQsIGRhdGEpO1xuICAgIH07XG5cbiAgICBtZGhkID0gZnVuY3Rpb24gbWRoZCh0cmFjaykge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAvLyB2ZXJzaW9uIDBcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAvLyBjcmVhdGlvbl90aW1lXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAzLCAvLyBtb2RpZmljYXRpb25fdGltZVxuICAgICAgMHgwMCwgMHgwMSwgMHg1ZiwgMHg5MCwgLy8gdGltZXNjYWxlLCA5MCwwMDAgXCJ0aWNrc1wiIHBlciBzZWNvbmRcbiAgICAgIHRyYWNrLmR1cmF0aW9uID4+PiAyNCAmIDB4RkYsIHRyYWNrLmR1cmF0aW9uID4+PiAxNiAmIDB4RkYsIHRyYWNrLmR1cmF0aW9uID4+PiA4ICYgMHhGRiwgdHJhY2suZHVyYXRpb24gJiAweEZGLCAvLyBkdXJhdGlvblxuICAgICAgMHg1NSwgMHhjNCwgLy8gJ3VuZCcgbGFuZ3VhZ2UgKHVuZGV0ZXJtaW5lZClcbiAgICAgIDB4MDAsIDB4MDBdKTsgLy8gVXNlIHRoZSBzYW1wbGUgcmF0ZSBmcm9tIHRoZSB0cmFjayBtZXRhZGF0YSwgd2hlbiBpdCBpc1xuICAgICAgLy8gZGVmaW5lZC4gVGhlIHNhbXBsZSByYXRlIGNhbiBiZSBwYXJzZWQgb3V0IG9mIGFuIEFEVFMgaGVhZGVyLCBmb3JcbiAgICAgIC8vIGluc3RhbmNlLlxuXG4gICAgICBpZiAodHJhY2suc2FtcGxlcmF0ZSkge1xuICAgICAgICByZXN1bHRbMTJdID0gdHJhY2suc2FtcGxlcmF0ZSA+Pj4gMjQgJiAweEZGO1xuICAgICAgICByZXN1bHRbMTNdID0gdHJhY2suc2FtcGxlcmF0ZSA+Pj4gMTYgJiAweEZGO1xuICAgICAgICByZXN1bHRbMTRdID0gdHJhY2suc2FtcGxlcmF0ZSA+Pj4gOCAmIDB4RkY7XG4gICAgICAgIHJlc3VsdFsxNV0gPSB0cmFjay5zYW1wbGVyYXRlICYgMHhGRjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJveCh0eXBlcy5tZGhkLCByZXN1bHQpO1xuICAgIH07XG5cbiAgICBtZGlhID0gZnVuY3Rpb24gbWRpYSh0cmFjaykge1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5tZGlhLCBtZGhkKHRyYWNrKSwgaGRscih0cmFjay50eXBlKSwgbWluZih0cmFjaykpO1xuICAgIH07XG5cbiAgICBtZmhkID0gZnVuY3Rpb24gbWZoZChzZXF1ZW5jZU51bWJlcikge1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5tZmhkLCBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZmxhZ3NcbiAgICAgIChzZXF1ZW5jZU51bWJlciAmIDB4RkYwMDAwMDApID4+IDI0LCAoc2VxdWVuY2VOdW1iZXIgJiAweEZGMDAwMCkgPj4gMTYsIChzZXF1ZW5jZU51bWJlciAmIDB4RkYwMCkgPj4gOCwgc2VxdWVuY2VOdW1iZXIgJiAweEZGIC8vIHNlcXVlbmNlX251bWJlclxuICAgICAgXSkpO1xuICAgIH07XG5cbiAgICBtaW5mID0gZnVuY3Rpb24gbWluZih0cmFjaykge1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5taW5mLCB0cmFjay50eXBlID09PSAndmlkZW8nID8gYm94KHR5cGVzLnZtaGQsIFZNSEQpIDogYm94KHR5cGVzLnNtaGQsIFNNSEQpLCBkaW5mKCksIHN0YmwodHJhY2spKTtcbiAgICB9O1xuXG4gICAgbW9vZiA9IGZ1bmN0aW9uIG1vb2Yoc2VxdWVuY2VOdW1iZXIsIHRyYWNrcykge1xuICAgICAgdmFyIHRyYWNrRnJhZ21lbnRzID0gW10sXG4gICAgICAgICAgaSA9IHRyYWNrcy5sZW5ndGg7IC8vIGJ1aWxkIHRyYWYgYm94ZXMgZm9yIGVhY2ggdHJhY2sgZnJhZ21lbnRcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB0cmFja0ZyYWdtZW50c1tpXSA9IHRyYWYodHJhY2tzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJveC5hcHBseShudWxsLCBbdHlwZXMubW9vZiwgbWZoZChzZXF1ZW5jZU51bWJlcildLmNvbmNhdCh0cmFja0ZyYWdtZW50cykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG1vdmllIGJveC5cbiAgICAgKiBAcGFyYW0gdHJhY2tzIHthcnJheX0gdGhlIHRyYWNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb3ZpZVxuICAgICAqIEBzZWUgSVNPL0lFQyAxNDQ5Ni0xMjoyMDEyKEUpLCBzZWN0aW9uIDguMi4xXG4gICAgICovXG5cblxuICAgIG1vb3YgPSBmdW5jdGlvbiBtb292KHRyYWNrcykge1xuICAgICAgdmFyIGkgPSB0cmFja3MubGVuZ3RoLFxuICAgICAgICAgIGJveGVzID0gW107XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgYm94ZXNbaV0gPSB0cmFrKHRyYWNrc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBib3guYXBwbHkobnVsbCwgW3R5cGVzLm1vb3YsIG12aGQoMHhmZmZmZmZmZildLmNvbmNhdChib3hlcykuY29uY2F0KG12ZXgodHJhY2tzKSkpO1xuICAgIH07XG5cbiAgICBtdmV4ID0gZnVuY3Rpb24gbXZleCh0cmFja3MpIHtcbiAgICAgIHZhciBpID0gdHJhY2tzLmxlbmd0aCxcbiAgICAgICAgICBib3hlcyA9IFtdO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGJveGVzW2ldID0gdHJleCh0cmFja3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYm94LmFwcGx5KG51bGwsIFt0eXBlcy5tdmV4XS5jb25jYXQoYm94ZXMpKTtcbiAgICB9O1xuXG4gICAgbXZoZCA9IGZ1bmN0aW9uIG12aGQoZHVyYXRpb24pIHtcbiAgICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAvLyB2ZXJzaW9uIDBcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAvLyBjcmVhdGlvbl90aW1lXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAvLyBtb2RpZmljYXRpb25fdGltZVxuICAgICAgMHgwMCwgMHgwMSwgMHg1ZiwgMHg5MCwgLy8gdGltZXNjYWxlLCA5MCwwMDAgXCJ0aWNrc1wiIHBlciBzZWNvbmRcbiAgICAgIChkdXJhdGlvbiAmIDB4RkYwMDAwMDApID4+IDI0LCAoZHVyYXRpb24gJiAweEZGMDAwMCkgPj4gMTYsIChkdXJhdGlvbiAmIDB4RkYwMCkgPj4gOCwgZHVyYXRpb24gJiAweEZGLCAvLyBkdXJhdGlvblxuICAgICAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgLy8gMS4wIHJhdGVcbiAgICAgIDB4MDEsIDB4MDAsIC8vIDEuMCB2b2x1bWVcbiAgICAgIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyByZXNlcnZlZFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHRyYW5zZm9ybWF0aW9uOiB1bml0eSBtYXRyaXhcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHByZV9kZWZpbmVkXG4gICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmIC8vIG5leHRfdHJhY2tfSURcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5tdmhkLCBieXRlcyk7XG4gICAgfTtcblxuICAgIHNkdHAgPSBmdW5jdGlvbiBzZHRwKHRyYWNrKSB7XG4gICAgICB2YXIgc2FtcGxlcyA9IHRyYWNrLnNhbXBsZXMgfHwgW10sXG4gICAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSg0ICsgc2FtcGxlcy5sZW5ndGgpLFxuICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgIGk7IC8vIGxlYXZlIHRoZSBmdWxsIGJveCBoZWFkZXIgKDQgYnl0ZXMpIGFsbCB6ZXJvXG4gICAgICAvLyB3cml0ZSB0aGUgc2FtcGxlIHRhYmxlXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZsYWdzID0gc2FtcGxlc1tpXS5mbGFncztcbiAgICAgICAgYnl0ZXNbaSArIDRdID0gZmxhZ3MuZGVwZW5kc09uIDw8IDQgfCBmbGFncy5pc0RlcGVuZGVkT24gPDwgMiB8IGZsYWdzLmhhc1JlZHVuZGFuY3k7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBib3godHlwZXMuc2R0cCwgYnl0ZXMpO1xuICAgIH07XG5cbiAgICBzdGJsID0gZnVuY3Rpb24gc3RibCh0cmFjaykge1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy5zdGJsLCBzdHNkKHRyYWNrKSwgYm94KHR5cGVzLnN0dHMsIFNUVFMpLCBib3godHlwZXMuc3RzYywgU1RTQyksIGJveCh0eXBlcy5zdHN6LCBTVFNaKSwgYm94KHR5cGVzLnN0Y28sIFNUQ08pKTtcbiAgICB9O1xuXG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2aWRlb1NhbXBsZSwgYXVkaW9TYW1wbGU7XG5cbiAgICAgIHN0c2QgPSBmdW5jdGlvbiBzdHNkKHRyYWNrKSB7XG4gICAgICAgIHJldHVybiBib3godHlwZXMuc3RzZCwgbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb24gMFxuICAgICAgICAweDAwLCAweDAwLCAweDAwLCAvLyBmbGFnc1xuICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxXSksIHRyYWNrLnR5cGUgPT09ICd2aWRlbycgPyB2aWRlb1NhbXBsZSh0cmFjaykgOiBhdWRpb1NhbXBsZSh0cmFjaykpO1xuICAgICAgfTtcblxuICAgICAgdmlkZW9TYW1wbGUgPSBmdW5jdGlvbiB2aWRlb1NhbXBsZSh0cmFjaykge1xuICAgICAgICB2YXIgc3BzID0gdHJhY2suc3BzIHx8IFtdLFxuICAgICAgICAgICAgcHBzID0gdHJhY2sucHBzIHx8IFtdLFxuICAgICAgICAgICAgc2VxdWVuY2VQYXJhbWV0ZXJTZXRzID0gW10sXG4gICAgICAgICAgICBwaWN0dXJlUGFyYW1ldGVyU2V0cyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGF2YzFCb3g7IC8vIGFzc2VtYmxlIHRoZSBTUFNzXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNlcXVlbmNlUGFyYW1ldGVyU2V0cy5wdXNoKChzcHNbaV0uYnl0ZUxlbmd0aCAmIDB4RkYwMCkgPj4+IDgpO1xuICAgICAgICAgIHNlcXVlbmNlUGFyYW1ldGVyU2V0cy5wdXNoKHNwc1tpXS5ieXRlTGVuZ3RoICYgMHhGRik7IC8vIHNlcXVlbmNlUGFyYW1ldGVyU2V0TGVuZ3RoXG5cbiAgICAgICAgICBzZXF1ZW5jZVBhcmFtZXRlclNldHMgPSBzZXF1ZW5jZVBhcmFtZXRlclNldHMuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNwc1tpXSkpOyAvLyBTUFNcbiAgICAgICAgfSAvLyBhc3NlbWJsZSB0aGUgUFBTc1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHBpY3R1cmVQYXJhbWV0ZXJTZXRzLnB1c2goKHBwc1tpXS5ieXRlTGVuZ3RoICYgMHhGRjAwKSA+Pj4gOCk7XG4gICAgICAgICAgcGljdHVyZVBhcmFtZXRlclNldHMucHVzaChwcHNbaV0uYnl0ZUxlbmd0aCAmIDB4RkYpO1xuICAgICAgICAgIHBpY3R1cmVQYXJhbWV0ZXJTZXRzID0gcGljdHVyZVBhcmFtZXRlclNldHMuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHBwc1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXZjMUJveCA9IFt0eXBlcy5hdmMxLCBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgICAgMHgwMCwgMHgwMSwgLy8gZGF0YV9yZWZlcmVuY2VfaW5kZXhcbiAgICAgICAgMHgwMCwgMHgwMCwgLy8gcHJlX2RlZmluZWRcbiAgICAgICAgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcHJlX2RlZmluZWRcbiAgICAgICAgKHRyYWNrLndpZHRoICYgMHhmZjAwKSA+PiA4LCB0cmFjay53aWR0aCAmIDB4ZmYsIC8vIHdpZHRoXG4gICAgICAgICh0cmFjay5oZWlnaHQgJiAweGZmMDApID4+IDgsIHRyYWNrLmhlaWdodCAmIDB4ZmYsIC8vIGhlaWdodFxuICAgICAgICAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAvLyBob3JpenJlc29sdXRpb25cbiAgICAgICAgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgLy8gdmVydHJlc29sdXRpb25cbiAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgICAgMHgwMCwgMHgwMSwgLy8gZnJhbWVfY291bnRcbiAgICAgICAgMHgxMywgMHg3NiwgMHg2OSwgMHg2NCwgMHg2NSwgMHg2ZiwgMHg2YSwgMHg3MywgMHgyZCwgMHg2MywgMHg2ZiwgMHg2ZSwgMHg3NCwgMHg3MiwgMHg2OSwgMHg2MiwgMHgyZCwgMHg2OCwgMHg2YywgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gY29tcHJlc3Nvcm5hbWVcbiAgICAgICAgMHgwMCwgMHgxOCwgLy8gZGVwdGggPSAyNFxuICAgICAgICAweDExLCAweDExIC8vIHByZV9kZWZpbmVkID0gLTFcbiAgICAgICAgXSksIGJveCh0eXBlcy5hdmNDLCBuZXcgVWludDhBcnJheShbMHgwMSwgLy8gY29uZmlndXJhdGlvblZlcnNpb25cbiAgICAgICAgdHJhY2sucHJvZmlsZUlkYywgLy8gQVZDUHJvZmlsZUluZGljYXRpb25cbiAgICAgICAgdHJhY2sucHJvZmlsZUNvbXBhdGliaWxpdHksIC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eVxuICAgICAgICB0cmFjay5sZXZlbElkYywgLy8gQVZDTGV2ZWxJbmRpY2F0aW9uXG4gICAgICAgIDB4ZmYgLy8gbGVuZ3RoU2l6ZU1pbnVzT25lLCBoYXJkLWNvZGVkIHRvIDQgYnl0ZXNcbiAgICAgICAgXS5jb25jYXQoW3Nwcy5sZW5ndGhdLCAvLyBudW1PZlNlcXVlbmNlUGFyYW1ldGVyU2V0c1xuICAgICAgICBzZXF1ZW5jZVBhcmFtZXRlclNldHMsIC8vIFwiU1BTXCJcbiAgICAgICAgW3Bwcy5sZW5ndGhdLCAvLyBudW1PZlBpY3R1cmVQYXJhbWV0ZXJTZXRzXG4gICAgICAgIHBpY3R1cmVQYXJhbWV0ZXJTZXRzIC8vIFwiUFBTXCJcbiAgICAgICAgKSkpLCBib3godHlwZXMuYnRydCwgbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MWMsIDB4OWMsIDB4ODAsIC8vIGJ1ZmZlclNpemVEQlxuICAgICAgICAweDAwLCAweDJkLCAweGM2LCAweGMwLCAvLyBtYXhCaXRyYXRlXG4gICAgICAgIDB4MDAsIDB4MmQsIDB4YzYsIDB4YzAgLy8gYXZnQml0cmF0ZVxuICAgICAgICBdKSldO1xuXG4gICAgICAgIGlmICh0cmFjay5zYXJSYXRpbykge1xuICAgICAgICAgIHZhciBoU3BhY2luZyA9IHRyYWNrLnNhclJhdGlvWzBdLFxuICAgICAgICAgICAgICB2U3BhY2luZyA9IHRyYWNrLnNhclJhdGlvWzFdO1xuICAgICAgICAgIGF2YzFCb3gucHVzaChib3godHlwZXMucGFzcCwgbmV3IFVpbnQ4QXJyYXkoWyhoU3BhY2luZyAmIDB4RkYwMDAwMDApID4+IDI0LCAoaFNwYWNpbmcgJiAweEZGMDAwMCkgPj4gMTYsIChoU3BhY2luZyAmIDB4RkYwMCkgPj4gOCwgaFNwYWNpbmcgJiAweEZGLCAodlNwYWNpbmcgJiAweEZGMDAwMDAwKSA+PiAyNCwgKHZTcGFjaW5nICYgMHhGRjAwMDApID4+IDE2LCAodlNwYWNpbmcgJiAweEZGMDApID4+IDgsIHZTcGFjaW5nICYgMHhGRl0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm94LmFwcGx5KG51bGwsIGF2YzFCb3gpO1xuICAgICAgfTtcblxuICAgICAgYXVkaW9TYW1wbGUgPSBmdW5jdGlvbiBhdWRpb1NhbXBsZSh0cmFjaykge1xuICAgICAgICByZXR1cm4gYm94KHR5cGVzLm1wNGEsIG5ldyBVaW50OEFycmF5KFsvLyBTYW1wbGVFbnRyeSwgSVNPL0lFQyAxNDQ5Ni0xMlxuICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyByZXNlcnZlZFxuICAgICAgICAweDAwLCAweDAxLCAvLyBkYXRhX3JlZmVyZW5jZV9pbmRleFxuICAgICAgICAvLyBBdWRpb1NhbXBsZUVudHJ5LCBJU08vSUVDIDE0NDk2LTEyXG4gICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAgICh0cmFjay5jaGFubmVsY291bnQgJiAweGZmMDApID4+IDgsIHRyYWNrLmNoYW5uZWxjb3VudCAmIDB4ZmYsIC8vIGNoYW5uZWxjb3VudFxuICAgICAgICAodHJhY2suc2FtcGxlc2l6ZSAmIDB4ZmYwMCkgPj4gOCwgdHJhY2suc2FtcGxlc2l6ZSAmIDB4ZmYsIC8vIHNhbXBsZXNpemVcbiAgICAgICAgMHgwMCwgMHgwMCwgLy8gcHJlX2RlZmluZWRcbiAgICAgICAgMHgwMCwgMHgwMCwgLy8gcmVzZXJ2ZWRcbiAgICAgICAgKHRyYWNrLnNhbXBsZXJhdGUgJiAweGZmMDApID4+IDgsIHRyYWNrLnNhbXBsZXJhdGUgJiAweGZmLCAweDAwLCAweDAwIC8vIHNhbXBsZXJhdGUsIDE2LjE2XG4gICAgICAgIC8vIE1QNEF1ZGlvU2FtcGxlRW50cnksIElTTy9JRUMgMTQ0OTYtMTRcbiAgICAgICAgXSksIGVzZHModHJhY2spKTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIHRraGQgPSBmdW5jdGlvbiB0a2hkKHRyYWNrKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb24gMFxuICAgICAgMHgwMCwgMHgwMCwgMHgwNywgLy8gZmxhZ3NcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGNyZWF0aW9uX3RpbWVcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIG1vZGlmaWNhdGlvbl90aW1lXG4gICAgICAodHJhY2suaWQgJiAweEZGMDAwMDAwKSA+PiAyNCwgKHRyYWNrLmlkICYgMHhGRjAwMDApID4+IDE2LCAodHJhY2suaWQgJiAweEZGMDApID4+IDgsIHRyYWNrLmlkICYgMHhGRiwgLy8gdHJhY2tfSURcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAodHJhY2suZHVyYXRpb24gJiAweEZGMDAwMDAwKSA+PiAyNCwgKHRyYWNrLmR1cmF0aW9uICYgMHhGRjAwMDApID4+IDE2LCAodHJhY2suZHVyYXRpb24gJiAweEZGMDApID4+IDgsIHRyYWNrLmR1cmF0aW9uICYgMHhGRiwgLy8gZHVyYXRpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIHJlc2VydmVkXG4gICAgICAweDAwLCAweDAwLCAvLyBsYXllclxuICAgICAgMHgwMCwgMHgwMCwgLy8gYWx0ZXJuYXRlX2dyb3VwXG4gICAgICAweDAxLCAweDAwLCAvLyBub24tYXVkaW8gdHJhY2sgdm9sdW1lXG4gICAgICAweDAwLCAweDAwLCAvLyByZXNlcnZlZFxuICAgICAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gdHJhbnNmb3JtYXRpb246IHVuaXR5IG1hdHJpeFxuICAgICAgKHRyYWNrLndpZHRoICYgMHhGRjAwKSA+PiA4LCB0cmFjay53aWR0aCAmIDB4RkYsIDB4MDAsIDB4MDAsIC8vIHdpZHRoXG4gICAgICAodHJhY2suaGVpZ2h0ICYgMHhGRjAwKSA+PiA4LCB0cmFjay5oZWlnaHQgJiAweEZGLCAweDAwLCAweDAwIC8vIGhlaWdodFxuICAgICAgXSk7XG4gICAgICByZXR1cm4gYm94KHR5cGVzLnRraGQsIHJlc3VsdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBhIHRyYWNrIGZyYWdtZW50ICh0cmFmKSBib3guIEEgdHJhZiBib3ggY29sbGVjdHMgbWV0YWRhdGFcbiAgICAgKiBhYm91dCB0cmFja3MgaW4gYSBtb3ZpZSBmcmFnbWVudCAobW9vZikgYm94LlxuICAgICAqL1xuXG5cbiAgICB0cmFmID0gZnVuY3Rpb24gdHJhZih0cmFjaykge1xuICAgICAgdmFyIHRyYWNrRnJhZ21lbnRIZWFkZXIsIHRyYWNrRnJhZ21lbnREZWNvZGVUaW1lLCB0cmFja0ZyYWdtZW50UnVuLCBzYW1wbGVEZXBlbmRlbmN5VGFibGUsIGRhdGFPZmZzZXQsIHVwcGVyV29yZEJhc2VNZWRpYURlY29kZVRpbWUsIGxvd2VyV29yZEJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICB0cmFja0ZyYWdtZW50SGVhZGVyID0gYm94KHR5cGVzLnRmaGQsIG5ldyBVaW50OEFycmF5KFsweDAwLCAvLyB2ZXJzaW9uIDBcbiAgICAgIDB4MDAsIDB4MDAsIDB4M2EsIC8vIGZsYWdzXG4gICAgICAodHJhY2suaWQgJiAweEZGMDAwMDAwKSA+PiAyNCwgKHRyYWNrLmlkICYgMHhGRjAwMDApID4+IDE2LCAodHJhY2suaWQgJiAweEZGMDApID4+IDgsIHRyYWNrLmlkICYgMHhGRiwgLy8gdHJhY2tfSURcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIC8vIHNhbXBsZV9kZXNjcmlwdGlvbl9pbmRleFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZGVmYXVsdF9zYW1wbGVfZHVyYXRpb25cbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGRlZmF1bHRfc2FtcGxlX3NpemVcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgLy8gZGVmYXVsdF9zYW1wbGVfZmxhZ3NcbiAgICAgIF0pKTtcbiAgICAgIHVwcGVyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgPSBNYXRoLmZsb29yKHRyYWNrLmJhc2VNZWRpYURlY29kZVRpbWUgLyAoVUlOVDMyX01BWCArIDEpKTtcbiAgICAgIGxvd2VyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgPSBNYXRoLmZsb29yKHRyYWNrLmJhc2VNZWRpYURlY29kZVRpbWUgJSAoVUlOVDMyX01BWCArIDEpKTtcbiAgICAgIHRyYWNrRnJhZ21lbnREZWNvZGVUaW1lID0gYm94KHR5cGVzLnRmZHQsIG5ldyBVaW50OEFycmF5KFsweDAxLCAvLyB2ZXJzaW9uIDFcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGZsYWdzXG4gICAgICAvLyBiYXNlTWVkaWFEZWNvZGVUaW1lXG4gICAgICB1cHBlcldvcmRCYXNlTWVkaWFEZWNvZGVUaW1lID4+PiAyNCAmIDB4RkYsIHVwcGVyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgPj4+IDE2ICYgMHhGRiwgdXBwZXJXb3JkQmFzZU1lZGlhRGVjb2RlVGltZSA+Pj4gOCAmIDB4RkYsIHVwcGVyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgJiAweEZGLCBsb3dlcldvcmRCYXNlTWVkaWFEZWNvZGVUaW1lID4+PiAyNCAmIDB4RkYsIGxvd2VyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgPj4+IDE2ICYgMHhGRiwgbG93ZXJXb3JkQmFzZU1lZGlhRGVjb2RlVGltZSA+Pj4gOCAmIDB4RkYsIGxvd2VyV29yZEJhc2VNZWRpYURlY29kZVRpbWUgJiAweEZGXSkpOyAvLyB0aGUgZGF0YSBvZmZzZXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2ZcbiAgICAgIC8vIHRoZSBjb250YWluaW5nIG1vb2YgdG8gdGhlIGZpcnN0IHBheWxvYWQgYnl0ZSBvZiB0aGUgYXNzb2NpYXRlZFxuICAgICAgLy8gbWRhdFxuXG4gICAgICBkYXRhT2Zmc2V0ID0gMzIgKyAvLyB0ZmhkXG4gICAgICAyMCArIC8vIHRmZHRcbiAgICAgIDggKyAvLyB0cmFmIGhlYWRlclxuICAgICAgMTYgKyAvLyBtZmhkXG4gICAgICA4ICsgLy8gbW9vZiBoZWFkZXJcbiAgICAgIDg7IC8vIG1kYXQgaGVhZGVyXG4gICAgICAvLyBhdWRpbyB0cmFja3MgcmVxdWlyZSBsZXNzIG1ldGFkYXRhXG5cbiAgICAgIGlmICh0cmFjay50eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgIHRyYWNrRnJhZ21lbnRSdW4gPSB0cnVuKHRyYWNrLCBkYXRhT2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIGJveCh0eXBlcy50cmFmLCB0cmFja0ZyYWdtZW50SGVhZGVyLCB0cmFja0ZyYWdtZW50RGVjb2RlVGltZSwgdHJhY2tGcmFnbWVudFJ1bik7XG4gICAgICB9IC8vIHZpZGVvIHRyYWNrcyBzaG91bGQgY29udGFpbiBhbiBpbmRlcGVuZGVudCBhbmQgZGlzcG9zYWJsZSBzYW1wbGVzXG4gICAgICAvLyBib3ggKHNkdHApXG4gICAgICAvLyBnZW5lcmF0ZSBvbmUgYW5kIGFkanVzdCBvZmZzZXRzIHRvIG1hdGNoXG5cblxuICAgICAgc2FtcGxlRGVwZW5kZW5jeVRhYmxlID0gc2R0cCh0cmFjayk7XG4gICAgICB0cmFja0ZyYWdtZW50UnVuID0gdHJ1bih0cmFjaywgc2FtcGxlRGVwZW5kZW5jeVRhYmxlLmxlbmd0aCArIGRhdGFPZmZzZXQpO1xuICAgICAgcmV0dXJuIGJveCh0eXBlcy50cmFmLCB0cmFja0ZyYWdtZW50SGVhZGVyLCB0cmFja0ZyYWdtZW50RGVjb2RlVGltZSwgdHJhY2tGcmFnbWVudFJ1biwgc2FtcGxlRGVwZW5kZW5jeVRhYmxlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIGEgdHJhY2sgYm94LlxuICAgICAqIEBwYXJhbSB0cmFjayB7b2JqZWN0fSBhIHRyYWNrIGRlZmluaXRpb25cbiAgICAgKiBAcmV0dXJuIHtVaW50OEFycmF5fSB0aGUgdHJhY2sgYm94XG4gICAgICovXG5cblxuICAgIHRyYWsgPSBmdW5jdGlvbiB0cmFrKHRyYWNrKSB7XG4gICAgICB0cmFjay5kdXJhdGlvbiA9IHRyYWNrLmR1cmF0aW9uIHx8IDB4ZmZmZmZmZmY7XG4gICAgICByZXR1cm4gYm94KHR5cGVzLnRyYWssIHRraGQodHJhY2spLCBtZGlhKHRyYWNrKSk7XG4gICAgfTtcblxuICAgIHRyZXggPSBmdW5jdGlvbiB0cmV4KHRyYWNrKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIC8vIHZlcnNpb24gMFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZmxhZ3NcbiAgICAgICh0cmFjay5pZCAmIDB4RkYwMDAwMDApID4+IDI0LCAodHJhY2suaWQgJiAweEZGMDAwMCkgPj4gMTYsICh0cmFjay5pZCAmIDB4RkYwMCkgPj4gOCwgdHJhY2suaWQgJiAweEZGLCAvLyB0cmFja19JRFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgLy8gZGVmYXVsdF9zYW1wbGVfZGVzY3JpcHRpb25faW5kZXhcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyBkZWZhdWx0X3NhbXBsZV9zaXplXG4gICAgICAweDAwLCAweDAxLCAweDAwLCAweDAxIC8vIGRlZmF1bHRfc2FtcGxlX2ZsYWdzXG4gICAgICBdKTsgLy8gdGhlIGxhc3QgdHdvIGJ5dGVzIG9mIGRlZmF1bHRfc2FtcGxlX2ZsYWdzIGlzIHRoZSBzYW1wbGVcbiAgICAgIC8vIGRlZ3JhZGF0aW9uIHByaW9yaXR5LCBhIGhpbnQgYWJvdXQgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBzYW1wbGVcbiAgICAgIC8vIHJlbGF0aXZlIHRvIG90aGVycy4gTG93ZXIgdGhlIGRlZ3JhZGF0aW9uIHByaW9yaXR5IGZvciBhbGwgc2FtcGxlXG4gICAgICAvLyB0eXBlcyBvdGhlciB0aGFuIHZpZGVvLlxuXG4gICAgICBpZiAodHJhY2sudHlwZSAhPT0gJ3ZpZGVvJykge1xuICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gMHgwMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJveCh0eXBlcy50cmV4LCByZXN1bHQpO1xuICAgIH07XG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGF1ZGlvVHJ1biwgdmlkZW9UcnVuLCB0cnVuSGVhZGVyOyAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIGFsbCBzYW1wbGVzIGFyZSB1bmlmb3JtLiBUaGF0IGlzLCBpZiBhXG4gICAgICAvLyBkdXJhdGlvbiBpcyBwcmVzZW50IGZvciB0aGUgZmlyc3Qgc2FtcGxlLCBpdCB3aWxsIGJlIHByZXNlbnQgZm9yXG4gICAgICAvLyBhbGwgc3Vic2VxdWVudCBzYW1wbGVzLlxuICAgICAgLy8gc2VlIElTTy9JRUMgMTQ0OTYtMTI6MjAxMiwgU2VjdGlvbiA4LjguOC4xXG5cbiAgICAgIHRydW5IZWFkZXIgPSBmdW5jdGlvbiB0cnVuSGVhZGVyKHNhbXBsZXMsIG9mZnNldCkge1xuICAgICAgICB2YXIgZHVyYXRpb25QcmVzZW50ID0gMCxcbiAgICAgICAgICAgIHNpemVQcmVzZW50ID0gMCxcbiAgICAgICAgICAgIGZsYWdzUHJlc2VudCA9IDAsXG4gICAgICAgICAgICBjb21wb3NpdGlvblRpbWVPZmZzZXQgPSAwOyAvLyB0cnVuIGZsYWcgY29uc3RhbnRzXG5cbiAgICAgICAgaWYgKHNhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHNhbXBsZXNbMF0uZHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZHVyYXRpb25QcmVzZW50ID0gMHgxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzYW1wbGVzWzBdLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2l6ZVByZXNlbnQgPSAweDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNhbXBsZXNbMF0uZmxhZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmxhZ3NQcmVzZW50ID0gMHg0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzYW1wbGVzWzBdLmNvbXBvc2l0aW9uVGltZU9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb3NpdGlvblRpbWVPZmZzZXQgPSAweDg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsweDAwLCAvLyB2ZXJzaW9uIDBcbiAgICAgICAgMHgwMCwgZHVyYXRpb25QcmVzZW50IHwgc2l6ZVByZXNlbnQgfCBmbGFnc1ByZXNlbnQgfCBjb21wb3NpdGlvblRpbWVPZmZzZXQsIDB4MDEsIC8vIGZsYWdzXG4gICAgICAgIChzYW1wbGVzLmxlbmd0aCAmIDB4RkYwMDAwMDApID4+PiAyNCwgKHNhbXBsZXMubGVuZ3RoICYgMHhGRjAwMDApID4+PiAxNiwgKHNhbXBsZXMubGVuZ3RoICYgMHhGRjAwKSA+Pj4gOCwgc2FtcGxlcy5sZW5ndGggJiAweEZGLCAvLyBzYW1wbGVfY291bnRcbiAgICAgICAgKG9mZnNldCAmIDB4RkYwMDAwMDApID4+PiAyNCwgKG9mZnNldCAmIDB4RkYwMDAwKSA+Pj4gMTYsIChvZmZzZXQgJiAweEZGMDApID4+PiA4LCBvZmZzZXQgJiAweEZGIC8vIGRhdGFfb2Zmc2V0XG4gICAgICAgIF07XG4gICAgICB9O1xuXG4gICAgICB2aWRlb1RydW4gPSBmdW5jdGlvbiB2aWRlb1RydW4odHJhY2ssIG9mZnNldCkge1xuICAgICAgICB2YXIgYnl0ZXMsIHNhbXBsZXMsIHNhbXBsZSwgaTtcbiAgICAgICAgc2FtcGxlcyA9IHRyYWNrLnNhbXBsZXMgfHwgW107XG4gICAgICAgIG9mZnNldCArPSA4ICsgMTIgKyAxNiAqIHNhbXBsZXMubGVuZ3RoO1xuICAgICAgICBieXRlcyA9IHRydW5IZWFkZXIoc2FtcGxlcywgb2Zmc2V0KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNhbXBsZSA9IHNhbXBsZXNbaV07XG4gICAgICAgICAgYnl0ZXMgPSBieXRlcy5jb25jYXQoWyhzYW1wbGUuZHVyYXRpb24gJiAweEZGMDAwMDAwKSA+Pj4gMjQsIChzYW1wbGUuZHVyYXRpb24gJiAweEZGMDAwMCkgPj4+IDE2LCAoc2FtcGxlLmR1cmF0aW9uICYgMHhGRjAwKSA+Pj4gOCwgc2FtcGxlLmR1cmF0aW9uICYgMHhGRiwgLy8gc2FtcGxlX2R1cmF0aW9uXG4gICAgICAgICAgKHNhbXBsZS5zaXplICYgMHhGRjAwMDAwMCkgPj4+IDI0LCAoc2FtcGxlLnNpemUgJiAweEZGMDAwMCkgPj4+IDE2LCAoc2FtcGxlLnNpemUgJiAweEZGMDApID4+PiA4LCBzYW1wbGUuc2l6ZSAmIDB4RkYsIC8vIHNhbXBsZV9zaXplXG4gICAgICAgICAgc2FtcGxlLmZsYWdzLmlzTGVhZGluZyA8PCAyIHwgc2FtcGxlLmZsYWdzLmRlcGVuZHNPbiwgc2FtcGxlLmZsYWdzLmlzRGVwZW5kZWRPbiA8PCA2IHwgc2FtcGxlLmZsYWdzLmhhc1JlZHVuZGFuY3kgPDwgNCB8IHNhbXBsZS5mbGFncy5wYWRkaW5nVmFsdWUgPDwgMSB8IHNhbXBsZS5mbGFncy5pc05vblN5bmNTYW1wbGUsIHNhbXBsZS5mbGFncy5kZWdyYWRhdGlvblByaW9yaXR5ICYgMHhGMCA8PCA4LCBzYW1wbGUuZmxhZ3MuZGVncmFkYXRpb25Qcmlvcml0eSAmIDB4MEYsIC8vIHNhbXBsZV9mbGFnc1xuICAgICAgICAgIChzYW1wbGUuY29tcG9zaXRpb25UaW1lT2Zmc2V0ICYgMHhGRjAwMDAwMCkgPj4+IDI0LCAoc2FtcGxlLmNvbXBvc2l0aW9uVGltZU9mZnNldCAmIDB4RkYwMDAwKSA+Pj4gMTYsIChzYW1wbGUuY29tcG9zaXRpb25UaW1lT2Zmc2V0ICYgMHhGRjAwKSA+Pj4gOCwgc2FtcGxlLmNvbXBvc2l0aW9uVGltZU9mZnNldCAmIDB4RkYgLy8gc2FtcGxlX2NvbXBvc2l0aW9uX3RpbWVfb2Zmc2V0XG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm94KHR5cGVzLnRydW4sIG5ldyBVaW50OEFycmF5KGJ5dGVzKSk7XG4gICAgICB9O1xuXG4gICAgICBhdWRpb1RydW4gPSBmdW5jdGlvbiBhdWRpb1RydW4odHJhY2ssIG9mZnNldCkge1xuICAgICAgICB2YXIgYnl0ZXMsIHNhbXBsZXMsIHNhbXBsZSwgaTtcbiAgICAgICAgc2FtcGxlcyA9IHRyYWNrLnNhbXBsZXMgfHwgW107XG4gICAgICAgIG9mZnNldCArPSA4ICsgMTIgKyA4ICogc2FtcGxlcy5sZW5ndGg7XG4gICAgICAgIGJ5dGVzID0gdHJ1bkhlYWRlcihzYW1wbGVzLCBvZmZzZXQpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2FtcGxlID0gc2FtcGxlc1tpXTtcbiAgICAgICAgICBieXRlcyA9IGJ5dGVzLmNvbmNhdChbKHNhbXBsZS5kdXJhdGlvbiAmIDB4RkYwMDAwMDApID4+PiAyNCwgKHNhbXBsZS5kdXJhdGlvbiAmIDB4RkYwMDAwKSA+Pj4gMTYsIChzYW1wbGUuZHVyYXRpb24gJiAweEZGMDApID4+PiA4LCBzYW1wbGUuZHVyYXRpb24gJiAweEZGLCAvLyBzYW1wbGVfZHVyYXRpb25cbiAgICAgICAgICAoc2FtcGxlLnNpemUgJiAweEZGMDAwMDAwKSA+Pj4gMjQsIChzYW1wbGUuc2l6ZSAmIDB4RkYwMDAwKSA+Pj4gMTYsIChzYW1wbGUuc2l6ZSAmIDB4RkYwMCkgPj4+IDgsIHNhbXBsZS5zaXplICYgMHhGRl0pOyAvLyBzYW1wbGVfc2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJveCh0eXBlcy50cnVuLCBuZXcgVWludDhBcnJheShieXRlcykpO1xuICAgICAgfTtcblxuICAgICAgdHJ1biA9IGZ1bmN0aW9uIHRydW4odHJhY2ssIG9mZnNldCkge1xuICAgICAgICBpZiAodHJhY2sudHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgIHJldHVybiBhdWRpb1RydW4odHJhY2ssIG9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlkZW9UcnVuKHRyYWNrLCBvZmZzZXQpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgdmFyIG1wNEdlbmVyYXRvciA9IHtcbiAgICAgIGZ0eXA6IGZ0eXAsXG4gICAgICBtZGF0OiBtZGF0LFxuICAgICAgbW9vZjogbW9vZixcbiAgICAgIG1vb3Y6IG1vb3YsXG4gICAgICBpbml0U2VnbWVudDogZnVuY3Rpb24gaW5pdFNlZ21lbnQodHJhY2tzKSB7XG4gICAgICAgIHZhciBmaWxlVHlwZSA9IGZ0eXAoKSxcbiAgICAgICAgICAgIG1vdmllID0gbW9vdih0cmFja3MpLFxuICAgICAgICAgICAgcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShmaWxlVHlwZS5ieXRlTGVuZ3RoICsgbW92aWUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJlc3VsdC5zZXQoZmlsZVR5cGUpO1xuICAgICAgICByZXN1bHQuc2V0KG1vdmllLCBmaWxlVHlwZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIG11eC5qc1xuICAgICAqXG4gICAgICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gICAgICogTGljZW5zZWQgQXBhY2hlLTIuMCBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy9tdXguanMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICAgICAqL1xuICAgIC8vIENvbnZlcnQgYW4gYXJyYXkgb2YgbmFsIHVuaXRzIGludG8gYW4gYXJyYXkgb2YgZnJhbWVzIHdpdGggZWFjaCBmcmFtZSBiZWluZ1xuICAgIC8vIGNvbXBvc2VkIG9mIHRoZSBuYWwgdW5pdHMgdGhhdCBtYWtlIHVwIHRoYXQgZnJhbWVcbiAgICAvLyBBbHNvIGtlZXAgdHJhY2sgb2YgY3VtbXVsYXRpdmUgZGF0YSBhYm91dCB0aGUgZnJhbWUgZnJvbSB0aGUgbmFsIHVuaXRzIHN1Y2hcbiAgICAvLyBhcyB0aGUgZnJhbWUgZHVyYXRpb24sIHN0YXJ0aW5nIHB0cywgZXRjLlxuXG4gICAgdmFyIGdyb3VwTmFsc0ludG9GcmFtZXMgPSBmdW5jdGlvbiBncm91cE5hbHNJbnRvRnJhbWVzKG5hbFVuaXRzKSB7XG4gICAgICB2YXIgaSxcbiAgICAgICAgICBjdXJyZW50TmFsLFxuICAgICAgICAgIGN1cnJlbnRGcmFtZSA9IFtdLFxuICAgICAgICAgIGZyYW1lcyA9IFtdOyAvLyBUT0RPIGFkZGVkIGZvciBMSExTLCBtYWtlIHN1cmUgdGhpcyBpcyBPS1xuXG4gICAgICBmcmFtZXMuYnl0ZUxlbmd0aCA9IDA7XG4gICAgICBmcmFtZXMubmFsQ291bnQgPSAwO1xuICAgICAgZnJhbWVzLmR1cmF0aW9uID0gMDtcbiAgICAgIGN1cnJlbnRGcmFtZS5ieXRlTGVuZ3RoID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG5hbFVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnROYWwgPSBuYWxVbml0c1tpXTsgLy8gU3BsaXQgb24gJ2F1ZCctdHlwZSBuYWwgdW5pdHNcblxuICAgICAgICBpZiAoY3VycmVudE5hbC5uYWxVbml0VHlwZSA9PT0gJ2FjY2Vzc191bml0X2RlbGltaXRlcl9yYnNwJykge1xuICAgICAgICAgIC8vIFNpbmNlIHRoZSB2ZXJ5IGZpcnN0IG5hbCB1bml0IGlzIGV4cGVjdGVkIHRvIGJlIGFuIEFVRFxuICAgICAgICAgIC8vIG9ubHkgcHVzaCB0byB0aGUgZnJhbWVzIGFycmF5IHdoZW4gY3VycmVudEZyYW1lIGlzIG5vdCBlbXB0eVxuICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjdXJyZW50RnJhbWUuZHVyYXRpb24gPSBjdXJyZW50TmFsLmR0cyAtIGN1cnJlbnRGcmFtZS5kdHM7IC8vIFRPRE8gYWRkZWQgZm9yIExITFMsIG1ha2Ugc3VyZSB0aGlzIGlzIE9LXG5cbiAgICAgICAgICAgIGZyYW1lcy5ieXRlTGVuZ3RoICs9IGN1cnJlbnRGcmFtZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgZnJhbWVzLm5hbENvdW50ICs9IGN1cnJlbnRGcmFtZS5sZW5ndGg7XG4gICAgICAgICAgICBmcmFtZXMuZHVyYXRpb24gKz0gY3VycmVudEZyYW1lLmR1cmF0aW9uO1xuICAgICAgICAgICAgZnJhbWVzLnB1c2goY3VycmVudEZyYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50RnJhbWUgPSBbY3VycmVudE5hbF07XG4gICAgICAgICAgY3VycmVudEZyYW1lLmJ5dGVMZW5ndGggPSBjdXJyZW50TmFsLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBjdXJyZW50RnJhbWUucHRzID0gY3VycmVudE5hbC5wdHM7XG4gICAgICAgICAgY3VycmVudEZyYW1lLmR0cyA9IGN1cnJlbnROYWwuZHRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNwZWNpZmljYWxseSBmbGFnIGtleSBmcmFtZXMgZm9yIGVhc2Ugb2YgdXNlIGxhdGVyXG4gICAgICAgICAgaWYgKGN1cnJlbnROYWwubmFsVW5pdFR5cGUgPT09ICdzbGljZV9sYXllcl93aXRob3V0X3BhcnRpdGlvbmluZ19yYnNwX2lkcicpIHtcbiAgICAgICAgICAgIGN1cnJlbnRGcmFtZS5rZXlGcmFtZSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEZyYW1lLmR1cmF0aW9uID0gY3VycmVudE5hbC5kdHMgLSBjdXJyZW50RnJhbWUuZHRzO1xuICAgICAgICAgIGN1cnJlbnRGcmFtZS5ieXRlTGVuZ3RoICs9IGN1cnJlbnROYWwuZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGN1cnJlbnRGcmFtZS5wdXNoKGN1cnJlbnROYWwpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEZvciB0aGUgbGFzdCBmcmFtZSwgdXNlIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJldmlvdXMgZnJhbWUgaWYgd2VcbiAgICAgIC8vIGhhdmUgbm90aGluZyBiZXR0ZXIgdG8gZ28gb25cblxuXG4gICAgICBpZiAoZnJhbWVzLmxlbmd0aCAmJiAoIWN1cnJlbnRGcmFtZS5kdXJhdGlvbiB8fCBjdXJyZW50RnJhbWUuZHVyYXRpb24gPD0gMCkpIHtcbiAgICAgICAgY3VycmVudEZyYW1lLmR1cmF0aW9uID0gZnJhbWVzW2ZyYW1lcy5sZW5ndGggLSAxXS5kdXJhdGlvbjtcbiAgICAgIH0gLy8gUHVzaCB0aGUgZmluYWwgZnJhbWVcbiAgICAgIC8vIFRPRE8gYWRkZWQgZm9yIExITFMsIG1ha2Ugc3VyZSB0aGlzIGlzIE9LXG5cblxuICAgICAgZnJhbWVzLmJ5dGVMZW5ndGggKz0gY3VycmVudEZyYW1lLmJ5dGVMZW5ndGg7XG4gICAgICBmcmFtZXMubmFsQ291bnQgKz0gY3VycmVudEZyYW1lLmxlbmd0aDtcbiAgICAgIGZyYW1lcy5kdXJhdGlvbiArPSBjdXJyZW50RnJhbWUuZHVyYXRpb247XG4gICAgICBmcmFtZXMucHVzaChjdXJyZW50RnJhbWUpO1xuICAgICAgcmV0dXJuIGZyYW1lcztcbiAgICB9OyAvLyBDb252ZXJ0IGFuIGFycmF5IG9mIGZyYW1lcyBpbnRvIGFuIGFycmF5IG9mIEdvcCB3aXRoIGVhY2ggR29wIGJlaW5nIGNvbXBvc2VkXG4gICAgLy8gb2YgdGhlIGZyYW1lcyB0aGF0IG1ha2UgdXAgdGhhdCBHb3BcbiAgICAvLyBBbHNvIGtlZXAgdHJhY2sgb2YgY3VtbXVsYXRpdmUgZGF0YSBhYm91dCB0aGUgR29wIGZyb20gdGhlIGZyYW1lcyBzdWNoIGFzIHRoZVxuICAgIC8vIEdvcCBkdXJhdGlvbiwgc3RhcnRpbmcgcHRzLCBldGMuXG5cblxuICAgIHZhciBncm91cEZyYW1lc0ludG9Hb3BzID0gZnVuY3Rpb24gZ3JvdXBGcmFtZXNJbnRvR29wcyhmcmFtZXMpIHtcbiAgICAgIHZhciBpLFxuICAgICAgICAgIGN1cnJlbnRGcmFtZSxcbiAgICAgICAgICBjdXJyZW50R29wID0gW10sXG4gICAgICAgICAgZ29wcyA9IFtdOyAvLyBXZSBtdXN0IHByZS1zZXQgc29tZSBvZiB0aGUgdmFsdWVzIG9uIHRoZSBHb3Agc2luY2Ugd2VcbiAgICAgIC8vIGtlZXAgcnVubmluZyB0b3RhbHMgb2YgdGhlc2UgdmFsdWVzXG5cbiAgICAgIGN1cnJlbnRHb3AuYnl0ZUxlbmd0aCA9IDA7XG4gICAgICBjdXJyZW50R29wLm5hbENvdW50ID0gMDtcbiAgICAgIGN1cnJlbnRHb3AuZHVyYXRpb24gPSAwO1xuICAgICAgY3VycmVudEdvcC5wdHMgPSBmcmFtZXNbMF0ucHRzO1xuICAgICAgY3VycmVudEdvcC5kdHMgPSBmcmFtZXNbMF0uZHRzOyAvLyBzdG9yZSBzb21lIG1ldGFkYXRhIGFib3V0IGFsbCB0aGUgR29wc1xuXG4gICAgICBnb3BzLmJ5dGVMZW5ndGggPSAwO1xuICAgICAgZ29wcy5uYWxDb3VudCA9IDA7XG4gICAgICBnb3BzLmR1cmF0aW9uID0gMDtcbiAgICAgIGdvcHMucHRzID0gZnJhbWVzWzBdLnB0cztcbiAgICAgIGdvcHMuZHRzID0gZnJhbWVzWzBdLmR0cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdXJyZW50RnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRGcmFtZS5rZXlGcmFtZSkge1xuICAgICAgICAgIC8vIFNpbmNlIHRoZSB2ZXJ5IGZpcnN0IGZyYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGtleWZyYW1lXG4gICAgICAgICAgLy8gb25seSBwdXNoIHRvIHRoZSBnb3BzIGFycmF5IHdoZW4gY3VycmVudEdvcCBpcyBub3QgZW1wdHlcbiAgICAgICAgICBpZiAoY3VycmVudEdvcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGdvcHMucHVzaChjdXJyZW50R29wKTtcbiAgICAgICAgICAgIGdvcHMuYnl0ZUxlbmd0aCArPSBjdXJyZW50R29wLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBnb3BzLm5hbENvdW50ICs9IGN1cnJlbnRHb3AubmFsQ291bnQ7XG4gICAgICAgICAgICBnb3BzLmR1cmF0aW9uICs9IGN1cnJlbnRHb3AuZHVyYXRpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEdvcCA9IFtjdXJyZW50RnJhbWVdO1xuICAgICAgICAgIGN1cnJlbnRHb3AubmFsQ291bnQgPSBjdXJyZW50RnJhbWUubGVuZ3RoO1xuICAgICAgICAgIGN1cnJlbnRHb3AuYnl0ZUxlbmd0aCA9IGN1cnJlbnRGcmFtZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGN1cnJlbnRHb3AucHRzID0gY3VycmVudEZyYW1lLnB0cztcbiAgICAgICAgICBjdXJyZW50R29wLmR0cyA9IGN1cnJlbnRGcmFtZS5kdHM7XG4gICAgICAgICAgY3VycmVudEdvcC5kdXJhdGlvbiA9IGN1cnJlbnRGcmFtZS5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50R29wLmR1cmF0aW9uICs9IGN1cnJlbnRGcmFtZS5kdXJhdGlvbjtcbiAgICAgICAgICBjdXJyZW50R29wLm5hbENvdW50ICs9IGN1cnJlbnRGcmFtZS5sZW5ndGg7XG4gICAgICAgICAgY3VycmVudEdvcC5ieXRlTGVuZ3RoICs9IGN1cnJlbnRGcmFtZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGN1cnJlbnRHb3AucHVzaChjdXJyZW50RnJhbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnb3BzLmxlbmd0aCAmJiBjdXJyZW50R29wLmR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgY3VycmVudEdvcC5kdXJhdGlvbiA9IGdvcHNbZ29wcy5sZW5ndGggLSAxXS5kdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgZ29wcy5ieXRlTGVuZ3RoICs9IGN1cnJlbnRHb3AuYnl0ZUxlbmd0aDtcbiAgICAgIGdvcHMubmFsQ291bnQgKz0gY3VycmVudEdvcC5uYWxDb3VudDtcbiAgICAgIGdvcHMuZHVyYXRpb24gKz0gY3VycmVudEdvcC5kdXJhdGlvbjsgLy8gcHVzaCB0aGUgZmluYWwgR29wXG5cbiAgICAgIGdvcHMucHVzaChjdXJyZW50R29wKTtcbiAgICAgIHJldHVybiBnb3BzO1xuICAgIH07XG4gICAgLypcbiAgICAgKiBTZWFyY2ggZm9yIHRoZSBmaXJzdCBrZXlmcmFtZSBpbiB0aGUgR09QcyBhbmQgdGhyb3cgYXdheSBhbGwgZnJhbWVzXG4gICAgICogdW50aWwgdGhhdCBrZXlmcmFtZS4gVGhlbiBleHRlbmQgdGhlIGR1cmF0aW9uIG9mIHRoZSBwdWxsZWQga2V5ZnJhbWVcbiAgICAgKiBhbmQgcHVsbCB0aGUgUFRTIGFuZCBEVFMgb2YgdGhlIGtleWZyYW1lIHNvIHRoYXQgaXQgY292ZXJzIHRoZSB0aW1lXG4gICAgICogcmFuZ2Ugb2YgdGhlIGZyYW1lcyB0aGF0IHdlcmUgZGlzcG9zZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBnb3BzIHZpZGVvIEdPUHNcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG1vZGlmaWVkIHZpZGVvIEdPUHNcbiAgICAgKi9cblxuXG4gICAgdmFyIGV4dGVuZEZpcnN0S2V5RnJhbWUgPSBmdW5jdGlvbiBleHRlbmRGaXJzdEtleUZyYW1lKGdvcHMpIHtcbiAgICAgIHZhciBjdXJyZW50R29wO1xuXG4gICAgICBpZiAoIWdvcHNbMF1bMF0ua2V5RnJhbWUgJiYgZ29wcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgR09QXG4gICAgICAgIGN1cnJlbnRHb3AgPSBnb3BzLnNoaWZ0KCk7XG4gICAgICAgIGdvcHMuYnl0ZUxlbmd0aCAtPSBjdXJyZW50R29wLmJ5dGVMZW5ndGg7XG4gICAgICAgIGdvcHMubmFsQ291bnQgLT0gY3VycmVudEdvcC5uYWxDb3VudDsgLy8gRXh0ZW5kIHRoZSBmaXJzdCBmcmFtZSBvZiB3aGF0IGlzIG5vdyB0aGVcbiAgICAgICAgLy8gZmlyc3QgZ29wIHRvIGNvdmVyIHRoZSB0aW1lIHBlcmlvZCBvZiB0aGVcbiAgICAgICAgLy8gZnJhbWVzIHdlIGp1c3QgcmVtb3ZlZFxuXG4gICAgICAgIGdvcHNbMF1bMF0uZHRzID0gY3VycmVudEdvcC5kdHM7XG4gICAgICAgIGdvcHNbMF1bMF0ucHRzID0gY3VycmVudEdvcC5wdHM7XG4gICAgICAgIGdvcHNbMF1bMF0uZHVyYXRpb24gKz0gY3VycmVudEdvcC5kdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdvcHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHNhbXBsZSBvYmplY3RcbiAgICAgKiBzZWUgSVNPL0lFQyAxNDQ5Ni0xMjoyMDEyLCBzZWN0aW9uIDguNi40LjNcbiAgICAgKi9cblxuXG4gICAgdmFyIGNyZWF0ZURlZmF1bHRTYW1wbGUgPSBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2FtcGxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgZmxhZ3M6IHtcbiAgICAgICAgICBpc0xlYWRpbmc6IDAsXG4gICAgICAgICAgZGVwZW5kc09uOiAxLFxuICAgICAgICAgIGlzRGVwZW5kZWRPbjogMCxcbiAgICAgICAgICBoYXNSZWR1bmRhbmN5OiAwLFxuICAgICAgICAgIGRlZ3JhZGF0aW9uUHJpb3JpdHk6IDAsXG4gICAgICAgICAgaXNOb25TeW5jU2FtcGxlOiAxXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICAvKlxuICAgICAqIENvbGxhdGVzIGluZm9ybWF0aW9uIGZyb20gYSB2aWRlbyBmcmFtZSBpbnRvIGFuIG9iamVjdCBmb3IgZXZlbnR1YWxcbiAgICAgKiBlbnRyeSBpbnRvIGFuIE1QNCBzYW1wbGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZnJhbWUgdGhlIHZpZGVvIGZyYW1lXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGRhdGFPZmZzZXQgdGhlIGJ5dGUgb2Zmc2V0IHRvIHBvc2l0aW9uIHRoZSBzYW1wbGVcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHNhbXBsZSB0YWJsZSBpbmZvIGZvciBhIGZyYW1lXG4gICAgICovXG5cblxuICAgIHZhciBzYW1wbGVGb3JGcmFtZSA9IGZ1bmN0aW9uIHNhbXBsZUZvckZyYW1lKGZyYW1lLCBkYXRhT2Zmc2V0KSB7XG4gICAgICB2YXIgc2FtcGxlID0gY3JlYXRlRGVmYXVsdFNhbXBsZSgpO1xuICAgICAgc2FtcGxlLmRhdGFPZmZzZXQgPSBkYXRhT2Zmc2V0O1xuICAgICAgc2FtcGxlLmNvbXBvc2l0aW9uVGltZU9mZnNldCA9IGZyYW1lLnB0cyAtIGZyYW1lLmR0cztcbiAgICAgIHNhbXBsZS5kdXJhdGlvbiA9IGZyYW1lLmR1cmF0aW9uO1xuICAgICAgc2FtcGxlLnNpemUgPSA0ICogZnJhbWUubGVuZ3RoOyAvLyBTcGFjZSBmb3IgbmFsIHVuaXQgc2l6ZVxuXG4gICAgICBzYW1wbGUuc2l6ZSArPSBmcmFtZS5ieXRlTGVuZ3RoO1xuXG4gICAgICBpZiAoZnJhbWUua2V5RnJhbWUpIHtcbiAgICAgICAgc2FtcGxlLmZsYWdzLmRlcGVuZHNPbiA9IDI7XG4gICAgICAgIHNhbXBsZS5mbGFncy5pc05vblN5bmNTYW1wbGUgPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2FtcGxlO1xuICAgIH07IC8vIGdlbmVyYXRlIHRoZSB0cmFjaydzIHNhbXBsZSB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGdvcHNcblxuXG4gICAgdmFyIGdlbmVyYXRlU2FtcGxlVGFibGUgPSBmdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVRhYmxlKGdvcHMsIGJhc2VEYXRhT2Zmc2V0KSB7XG4gICAgICB2YXIgaCxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHNhbXBsZSxcbiAgICAgICAgICBjdXJyZW50R29wLFxuICAgICAgICAgIGN1cnJlbnRGcmFtZSxcbiAgICAgICAgICBkYXRhT2Zmc2V0ID0gYmFzZURhdGFPZmZzZXQgfHwgMCxcbiAgICAgICAgICBzYW1wbGVzID0gW107XG5cbiAgICAgIGZvciAoaCA9IDA7IGggPCBnb3BzLmxlbmd0aDsgaCsrKSB7XG4gICAgICAgIGN1cnJlbnRHb3AgPSBnb3BzW2hdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJyZW50R29wLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEdvcFtpXTtcbiAgICAgICAgICBzYW1wbGUgPSBzYW1wbGVGb3JGcmFtZShjdXJyZW50RnJhbWUsIGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGRhdGFPZmZzZXQgKz0gc2FtcGxlLnNpemU7XG4gICAgICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNhbXBsZXM7XG4gICAgfTsgLy8gZ2VuZXJhdGUgdGhlIHRyYWNrJ3MgcmF3IG1kYXQgZGF0YSBmcm9tIGFuIGFycmF5IG9mIGdvcHNcblxuXG4gICAgdmFyIGNvbmNhdGVuYXRlTmFsRGF0YSA9IGZ1bmN0aW9uIGNvbmNhdGVuYXRlTmFsRGF0YShnb3BzKSB7XG4gICAgICB2YXIgaCxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGosXG4gICAgICAgICAgY3VycmVudEdvcCxcbiAgICAgICAgICBjdXJyZW50RnJhbWUsXG4gICAgICAgICAgY3VycmVudE5hbCxcbiAgICAgICAgICBkYXRhT2Zmc2V0ID0gMCxcbiAgICAgICAgICBuYWxzQnl0ZUxlbmd0aCA9IGdvcHMuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBudW1iZXJPZk5hbHMgPSBnb3BzLm5hbENvdW50LFxuICAgICAgICAgIHRvdGFsQnl0ZUxlbmd0aCA9IG5hbHNCeXRlTGVuZ3RoICsgNCAqIG51bWJlck9mTmFscyxcbiAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKSxcbiAgICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyKTsgLy8gRm9yIGVhY2ggR29wLi5cblxuICAgICAgZm9yIChoID0gMDsgaCA8IGdvcHMubGVuZ3RoOyBoKyspIHtcbiAgICAgICAgY3VycmVudEdvcCA9IGdvcHNbaF07IC8vIEZvciBlYWNoIEZyYW1lLi5cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VycmVudEdvcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1cnJlbnRHb3BbaV07IC8vIEZvciBlYWNoIE5BTC4uXG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY3VycmVudEZyYW1lLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjdXJyZW50TmFsID0gY3VycmVudEZyYW1lW2pdO1xuICAgICAgICAgICAgdmlldy5zZXRVaW50MzIoZGF0YU9mZnNldCwgY3VycmVudE5hbC5kYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgZGF0YU9mZnNldCArPSA0O1xuICAgICAgICAgICAgZGF0YS5zZXQoY3VycmVudE5hbC5kYXRhLCBkYXRhT2Zmc2V0KTtcbiAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gY3VycmVudE5hbC5kYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07IC8vIGdlbmVyYXRlIHRoZSB0cmFjaydzIHNhbXBsZSB0YWJsZSBmcm9tIGEgZnJhbWVcblxuXG4gICAgdmFyIGdlbmVyYXRlU2FtcGxlVGFibGVGb3JGcmFtZSA9IGZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlVGFibGVGb3JGcmFtZShmcmFtZSwgYmFzZURhdGFPZmZzZXQpIHtcbiAgICAgIHZhciBzYW1wbGUsXG4gICAgICAgICAgZGF0YU9mZnNldCA9IGJhc2VEYXRhT2Zmc2V0IHx8IDAsXG4gICAgICAgICAgc2FtcGxlcyA9IFtdO1xuICAgICAgc2FtcGxlID0gc2FtcGxlRm9yRnJhbWUoZnJhbWUsIGRhdGFPZmZzZXQpO1xuICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7XG4gICAgICByZXR1cm4gc2FtcGxlcztcbiAgICB9OyAvLyBnZW5lcmF0ZSB0aGUgdHJhY2sncyByYXcgbWRhdCBkYXRhIGZyb20gYSBmcmFtZVxuXG5cbiAgICB2YXIgY29uY2F0ZW5hdGVOYWxEYXRhRm9yRnJhbWUgPSBmdW5jdGlvbiBjb25jYXRlbmF0ZU5hbERhdGFGb3JGcmFtZShmcmFtZSkge1xuICAgICAgdmFyIGksXG4gICAgICAgICAgY3VycmVudE5hbCxcbiAgICAgICAgICBkYXRhT2Zmc2V0ID0gMCxcbiAgICAgICAgICBuYWxzQnl0ZUxlbmd0aCA9IGZyYW1lLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgbnVtYmVyT2ZOYWxzID0gZnJhbWUubGVuZ3RoLFxuICAgICAgICAgIHRvdGFsQnl0ZUxlbmd0aCA9IG5hbHNCeXRlTGVuZ3RoICsgNCAqIG51bWJlck9mTmFscyxcbiAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKSxcbiAgICAgICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyKTsgLy8gRm9yIGVhY2ggTkFMLi5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnROYWwgPSBmcmFtZVtpXTtcbiAgICAgICAgdmlldy5zZXRVaW50MzIoZGF0YU9mZnNldCwgY3VycmVudE5hbC5kYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7XG4gICAgICAgIGRhdGEuc2V0KGN1cnJlbnROYWwuZGF0YSwgZGF0YU9mZnNldCk7XG4gICAgICAgIGRhdGFPZmZzZXQgKz0gY3VycmVudE5hbC5kYXRhLmJ5dGVMZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICB2YXIgZnJhbWVVdGlscyA9IHtcbiAgICAgIGdyb3VwTmFsc0ludG9GcmFtZXM6IGdyb3VwTmFsc0ludG9GcmFtZXMsXG4gICAgICBncm91cEZyYW1lc0ludG9Hb3BzOiBncm91cEZyYW1lc0ludG9Hb3BzLFxuICAgICAgZXh0ZW5kRmlyc3RLZXlGcmFtZTogZXh0ZW5kRmlyc3RLZXlGcmFtZSxcbiAgICAgIGdlbmVyYXRlU2FtcGxlVGFibGU6IGdlbmVyYXRlU2FtcGxlVGFibGUsXG4gICAgICBjb25jYXRlbmF0ZU5hbERhdGE6IGNvbmNhdGVuYXRlTmFsRGF0YSxcbiAgICAgIGdlbmVyYXRlU2FtcGxlVGFibGVGb3JGcmFtZTogZ2VuZXJhdGVTYW1wbGVUYWJsZUZvckZyYW1lLFxuICAgICAgY29uY2F0ZW5hdGVOYWxEYXRhRm9yRnJhbWU6IGNvbmNhdGVuYXRlTmFsRGF0YUZvckZyYW1lXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKi9cblxuICAgIHZhciBoaWdoUHJlZml4ID0gWzMzLCAxNiwgNSwgMzIsIDE2NCwgMjddO1xuICAgIHZhciBsb3dQcmVmaXggPSBbMzMsIDY1LCAxMDgsIDg0LCAxLCAyLCA0LCA4LCAxNjgsIDIsIDQsIDgsIDE3LCAxOTEsIDI1Ml07XG5cbiAgICB2YXIgemVyb0ZpbGwgPSBmdW5jdGlvbiB6ZXJvRmlsbChjb3VudCkge1xuICAgICAgdmFyIGEgPSBbXTtcblxuICAgICAgd2hpbGUgKGNvdW50LS0pIHtcbiAgICAgICAgYS5wdXNoKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYTtcbiAgICB9O1xuXG4gICAgdmFyIG1ha2VUYWJsZSA9IGZ1bmN0aW9uIG1ha2VUYWJsZShtZXRhVGFibGUpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhtZXRhVGFibGUpLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBuZXcgVWludDhBcnJheShtZXRhVGFibGVba2V5XS5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgcGFydCkge1xuICAgICAgICAgIHJldHVybiBhcnIuY29uY2F0KHBhcnQpO1xuICAgICAgICB9LCBbXSkpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfSwge30pO1xuICAgIH07IC8vIEZyYW1lcy1vZi1zaWxlbmNlIHRvIHVzZSBmb3IgZmlsbGluZyBpbiBtaXNzaW5nIEFBQyBmcmFtZXNcblxuXG4gICAgdmFyIGNvbmVPZlNpbGVuY2UgPSB7XG4gICAgICA5NjAwMDogW2hpZ2hQcmVmaXgsIFsyMjcsIDY0XSwgemVyb0ZpbGwoMTU0KSwgWzU2XV0sXG4gICAgICA4ODIwMDogW2hpZ2hQcmVmaXgsIFsyMzFdLCB6ZXJvRmlsbCgxNzApLCBbNTZdXSxcbiAgICAgIDY0MDAwOiBbaGlnaFByZWZpeCwgWzI0OCwgMTkyXSwgemVyb0ZpbGwoMjQwKSwgWzU2XV0sXG4gICAgICA0ODAwMDogW2hpZ2hQcmVmaXgsIFsyNTUsIDE5Ml0sIHplcm9GaWxsKDI2OCksIFs1NSwgMTQ4LCAxMjhdLCB6ZXJvRmlsbCg1NCksIFsxMTJdXSxcbiAgICAgIDQ0MTAwOiBbaGlnaFByZWZpeCwgWzI1NSwgMTkyXSwgemVyb0ZpbGwoMjY4KSwgWzU1LCAxNjMsIDEyOF0sIHplcm9GaWxsKDg0KSwgWzExMl1dLFxuICAgICAgMzIwMDA6IFtoaWdoUHJlZml4LCBbMjU1LCAxOTJdLCB6ZXJvRmlsbCgyNjgpLCBbNTUsIDIzNF0sIHplcm9GaWxsKDIyNiksIFsxMTJdXSxcbiAgICAgIDI0MDAwOiBbaGlnaFByZWZpeCwgWzI1NSwgMTkyXSwgemVyb0ZpbGwoMjY4KSwgWzU1LCAyNTUsIDEyOF0sIHplcm9GaWxsKDI2OCksIFsxMTEsIDExMl0sIHplcm9GaWxsKDEyNiksIFsyMjRdXSxcbiAgICAgIDE2MDAwOiBbaGlnaFByZWZpeCwgWzI1NSwgMTkyXSwgemVyb0ZpbGwoMjY4KSwgWzU1LCAyNTUsIDEyOF0sIHplcm9GaWxsKDI2OCksIFsxMTEsIDI1NV0sIHplcm9GaWxsKDI2OSksIFsyMjMsIDEwOF0sIHplcm9GaWxsKDE5NSksIFsxLCAxOTJdXSxcbiAgICAgIDEyMDAwOiBbbG93UHJlZml4LCB6ZXJvRmlsbCgyNjgpLCBbMywgMTI3LCAyNDhdLCB6ZXJvRmlsbCgyNjgpLCBbNiwgMjU1LCAyNDBdLCB6ZXJvRmlsbCgyNjgpLCBbMTMsIDI1NSwgMjI0XSwgemVyb0ZpbGwoMjY4KSwgWzI3LCAyNTMsIDEyOF0sIHplcm9GaWxsKDI1OSksIFs1Nl1dLFxuICAgICAgMTEwMjU6IFtsb3dQcmVmaXgsIHplcm9GaWxsKDI2OCksIFszLCAxMjcsIDI0OF0sIHplcm9GaWxsKDI2OCksIFs2LCAyNTUsIDI0MF0sIHplcm9GaWxsKDI2OCksIFsxMywgMjU1LCAyMjRdLCB6ZXJvRmlsbCgyNjgpLCBbMjcsIDI1NSwgMTkyXSwgemVyb0ZpbGwoMjY4KSwgWzU1LCAxNzUsIDEyOF0sIHplcm9GaWxsKDEwOCksIFsxMTJdXSxcbiAgICAgIDgwMDA6IFtsb3dQcmVmaXgsIHplcm9GaWxsKDI2OCksIFszLCAxMjEsIDE2XSwgemVyb0ZpbGwoNDcpLCBbN11dXG4gICAgfTtcbiAgICB2YXIgc2lsZW5jZSA9IG1ha2VUYWJsZShjb25lT2ZTaWxlbmNlKTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKi9cblxuICAgIHZhciBPTkVfU0VDT05EX0lOX1RTID0gOTAwMDAsXG4gICAgICAgIC8vIDkwa0h6IGNsb2NrXG4gICAgc2Vjb25kc1RvVmlkZW9UcyxcbiAgICAgICAgc2Vjb25kc1RvQXVkaW9UcyxcbiAgICAgICAgdmlkZW9Uc1RvU2Vjb25kcyxcbiAgICAgICAgYXVkaW9Uc1RvU2Vjb25kcyxcbiAgICAgICAgYXVkaW9Uc1RvVmlkZW9UcyxcbiAgICAgICAgdmlkZW9Uc1RvQXVkaW9UcyxcbiAgICAgICAgbWV0YWRhdGFUc1RvU2Vjb25kcztcblxuICAgIHNlY29uZHNUb1ZpZGVvVHMgPSBmdW5jdGlvbiBzZWNvbmRzVG9WaWRlb1RzKHNlY29uZHMpIHtcbiAgICAgIHJldHVybiBzZWNvbmRzICogT05FX1NFQ09ORF9JTl9UUztcbiAgICB9O1xuXG4gICAgc2Vjb25kc1RvQXVkaW9UcyA9IGZ1bmN0aW9uIHNlY29uZHNUb0F1ZGlvVHMoc2Vjb25kcywgc2FtcGxlUmF0ZSkge1xuICAgICAgcmV0dXJuIHNlY29uZHMgKiBzYW1wbGVSYXRlO1xuICAgIH07XG5cbiAgICB2aWRlb1RzVG9TZWNvbmRzID0gZnVuY3Rpb24gdmlkZW9Uc1RvU2Vjb25kcyh0aW1lc3RhbXApIHtcbiAgICAgIHJldHVybiB0aW1lc3RhbXAgLyBPTkVfU0VDT05EX0lOX1RTO1xuICAgIH07XG5cbiAgICBhdWRpb1RzVG9TZWNvbmRzID0gZnVuY3Rpb24gYXVkaW9Uc1RvU2Vjb25kcyh0aW1lc3RhbXAsIHNhbXBsZVJhdGUpIHtcbiAgICAgIHJldHVybiB0aW1lc3RhbXAgLyBzYW1wbGVSYXRlO1xuICAgIH07XG5cbiAgICBhdWRpb1RzVG9WaWRlb1RzID0gZnVuY3Rpb24gYXVkaW9Uc1RvVmlkZW9Ucyh0aW1lc3RhbXAsIHNhbXBsZVJhdGUpIHtcbiAgICAgIHJldHVybiBzZWNvbmRzVG9WaWRlb1RzKGF1ZGlvVHNUb1NlY29uZHModGltZXN0YW1wLCBzYW1wbGVSYXRlKSk7XG4gICAgfTtcblxuICAgIHZpZGVvVHNUb0F1ZGlvVHMgPSBmdW5jdGlvbiB2aWRlb1RzVG9BdWRpb1RzKHRpbWVzdGFtcCwgc2FtcGxlUmF0ZSkge1xuICAgICAgcmV0dXJuIHNlY29uZHNUb0F1ZGlvVHModmlkZW9Uc1RvU2Vjb25kcyh0aW1lc3RhbXApLCBzYW1wbGVSYXRlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkanVzdCBJRDMgdGFnIG9yIGNhcHRpb24gdGltaW5nIGluZm9ybWF0aW9uIGJ5IHRoZSB0aW1lbGluZSBwdHMgdmFsdWVzXG4gICAgICogKGlmIGtlZXBPcmlnaW5hbFRpbWVzdGFtcHMgaXMgZmFsc2UpIGFuZCBjb252ZXJ0IHRvIHNlY29uZHNcbiAgICAgKi9cblxuXG4gICAgbWV0YWRhdGFUc1RvU2Vjb25kcyA9IGZ1bmN0aW9uIG1ldGFkYXRhVHNUb1NlY29uZHModGltZXN0YW1wLCB0aW1lbGluZVN0YXJ0UHRzLCBrZWVwT3JpZ2luYWxUaW1lc3RhbXBzKSB7XG4gICAgICByZXR1cm4gdmlkZW9Uc1RvU2Vjb25kcyhrZWVwT3JpZ2luYWxUaW1lc3RhbXBzID8gdGltZXN0YW1wIDogdGltZXN0YW1wIC0gdGltZWxpbmVTdGFydFB0cyk7XG4gICAgfTtcblxuICAgIHZhciBjbG9jayA9IHtcbiAgICAgIE9ORV9TRUNPTkRfSU5fVFM6IE9ORV9TRUNPTkRfSU5fVFMsXG4gICAgICBzZWNvbmRzVG9WaWRlb1RzOiBzZWNvbmRzVG9WaWRlb1RzLFxuICAgICAgc2Vjb25kc1RvQXVkaW9Uczogc2Vjb25kc1RvQXVkaW9UcyxcbiAgICAgIHZpZGVvVHNUb1NlY29uZHM6IHZpZGVvVHNUb1NlY29uZHMsXG4gICAgICBhdWRpb1RzVG9TZWNvbmRzOiBhdWRpb1RzVG9TZWNvbmRzLFxuICAgICAgYXVkaW9Uc1RvVmlkZW9UczogYXVkaW9Uc1RvVmlkZW9UcyxcbiAgICAgIHZpZGVvVHNUb0F1ZGlvVHM6IHZpZGVvVHNUb0F1ZGlvVHMsXG4gICAgICBtZXRhZGF0YVRzVG9TZWNvbmRzOiBtZXRhZGF0YVRzVG9TZWNvbmRzXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFN1bSB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnRpZXMgb2YgdGhlIGRhdGEgaW4gZWFjaCBBQUMgZnJhbWVcbiAgICAgKi9cblxuICAgIHZhciBzdW1GcmFtZUJ5dGVMZW5ndGhzID0gZnVuY3Rpb24gc3VtRnJhbWVCeXRlTGVuZ3RocyhhcnJheSkge1xuICAgICAgdmFyIGksXG4gICAgICAgICAgY3VycmVudE9iaixcbiAgICAgICAgICBzdW0gPSAwOyAvLyBzdW0gdGhlIGJ5dGVMZW5ndGgncyBhbGwgZWFjaCBuYWwgdW5pdCBpbiB0aGUgZnJhbWVcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnRPYmogPSBhcnJheVtpXTtcbiAgICAgICAgc3VtICs9IGN1cnJlbnRPYmouZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VtO1xuICAgIH07IC8vIFBvc3NpYmx5IHBhZCAocHJlZml4KSB0aGUgYXVkaW8gdHJhY2sgd2l0aCBzaWxlbmNlIGlmIGFwcGVuZGluZyB0aGlzIHRyYWNrXG4gICAgLy8gd291bGQgbGVhZCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGEgZ2FwIGluIHRoZSBhdWRpbyBidWZmZXJcblxuXG4gICAgdmFyIHByZWZpeFdpdGhTaWxlbmNlID0gZnVuY3Rpb24gcHJlZml4V2l0aFNpbGVuY2UodHJhY2ssIGZyYW1lcywgYXVkaW9BcHBlbmRTdGFydFRzLCB2aWRlb0Jhc2VNZWRpYURlY29kZVRpbWUpIHtcbiAgICAgIHZhciBiYXNlTWVkaWFEZWNvZGVUaW1lVHMsXG4gICAgICAgICAgZnJhbWVEdXJhdGlvbiA9IDAsXG4gICAgICAgICAgYXVkaW9HYXBEdXJhdGlvbiA9IDAsXG4gICAgICAgICAgYXVkaW9GaWxsRnJhbWVDb3VudCA9IDAsXG4gICAgICAgICAgYXVkaW9GaWxsRHVyYXRpb24gPSAwLFxuICAgICAgICAgIHNpbGVudEZyYW1lLFxuICAgICAgICAgIGksXG4gICAgICAgICAgZmlyc3RGcmFtZTtcblxuICAgICAgaWYgKCFmcmFtZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYmFzZU1lZGlhRGVjb2RlVGltZVRzID0gY2xvY2suYXVkaW9Uc1RvVmlkZW9Ucyh0cmFjay5iYXNlTWVkaWFEZWNvZGVUaW1lLCB0cmFjay5zYW1wbGVyYXRlKTsgLy8gZGV0ZXJtaW5lIGZyYW1lIGNsb2NrIGR1cmF0aW9uIGJhc2VkIG9uIHNhbXBsZSByYXRlLCByb3VuZCB1cCB0byBhdm9pZCBvdmVyZmlsbHNcblxuICAgICAgZnJhbWVEdXJhdGlvbiA9IE1hdGguY2VpbChjbG9jay5PTkVfU0VDT05EX0lOX1RTIC8gKHRyYWNrLnNhbXBsZXJhdGUgLyAxMDI0KSk7XG5cbiAgICAgIGlmIChhdWRpb0FwcGVuZFN0YXJ0VHMgJiYgdmlkZW9CYXNlTWVkaWFEZWNvZGVUaW1lKSB7XG4gICAgICAgIC8vIGluc2VydCB0aGUgc2hvcnRlc3QgcG9zc2libGUgYW1vdW50IChhdWRpbyBnYXAgb3IgYXVkaW8gdG8gdmlkZW8gZ2FwKVxuICAgICAgICBhdWRpb0dhcER1cmF0aW9uID0gYmFzZU1lZGlhRGVjb2RlVGltZVRzIC0gTWF0aC5tYXgoYXVkaW9BcHBlbmRTdGFydFRzLCB2aWRlb0Jhc2VNZWRpYURlY29kZVRpbWUpOyAvLyBudW1iZXIgb2YgZnVsbCBmcmFtZXMgaW4gdGhlIGF1ZGlvIGdhcFxuXG4gICAgICAgIGF1ZGlvRmlsbEZyYW1lQ291bnQgPSBNYXRoLmZsb29yKGF1ZGlvR2FwRHVyYXRpb24gLyBmcmFtZUR1cmF0aW9uKTtcbiAgICAgICAgYXVkaW9GaWxsRHVyYXRpb24gPSBhdWRpb0ZpbGxGcmFtZUNvdW50ICogZnJhbWVEdXJhdGlvbjtcbiAgICAgIH0gLy8gZG9uJ3QgYXR0ZW1wdCB0byBmaWxsIGdhcHMgc21hbGxlciB0aGFuIGEgc2luZ2xlIGZyYW1lIG9yIGxhcmdlclxuICAgICAgLy8gdGhhbiBhIGhhbGYgc2Vjb25kXG5cblxuICAgICAgaWYgKGF1ZGlvRmlsbEZyYW1lQ291bnQgPCAxIHx8IGF1ZGlvRmlsbER1cmF0aW9uID4gY2xvY2suT05FX1NFQ09ORF9JTl9UUyAvIDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaWxlbnRGcmFtZSA9IHNpbGVuY2VbdHJhY2suc2FtcGxlcmF0ZV07XG5cbiAgICAgIGlmICghc2lsZW50RnJhbWUpIHtcbiAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHNpbGVudCBmcmFtZSBwcmVnZW5lcmF0ZWQgZm9yIHRoZSBzYW1wbGUgcmF0ZSwgc28gdXNlIGEgZnJhbWVcbiAgICAgICAgLy8gZnJvbSB0aGUgY29udGVudCBpbnN0ZWFkXG4gICAgICAgIHNpbGVudEZyYW1lID0gZnJhbWVzWzBdLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhdWRpb0ZpbGxGcmFtZUNvdW50OyBpKyspIHtcbiAgICAgICAgZmlyc3RGcmFtZSA9IGZyYW1lc1swXTtcbiAgICAgICAgZnJhbWVzLnNwbGljZSgwLCAwLCB7XG4gICAgICAgICAgZGF0YTogc2lsZW50RnJhbWUsXG4gICAgICAgICAgZHRzOiBmaXJzdEZyYW1lLmR0cyAtIGZyYW1lRHVyYXRpb24sXG4gICAgICAgICAgcHRzOiBmaXJzdEZyYW1lLnB0cyAtIGZyYW1lRHVyYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyYWNrLmJhc2VNZWRpYURlY29kZVRpbWUgLT0gTWF0aC5mbG9vcihjbG9jay52aWRlb1RzVG9BdWRpb1RzKGF1ZGlvRmlsbER1cmF0aW9uLCB0cmFjay5zYW1wbGVyYXRlKSk7XG4gICAgfTsgLy8gSWYgdGhlIGF1ZGlvIHNlZ21lbnQgZXh0ZW5kcyBiZWZvcmUgdGhlIGVhcmxpZXN0IGFsbG93ZWQgZHRzXG4gICAgLy8gdmFsdWUsIHJlbW92ZSBBQUMgZnJhbWVzIHVudGlsIHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgZWFybGllc3RcbiAgICAvLyBhbGxvd2VkIERUUyBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCB3aXRoIGEgbmVnYXRpdmUgYmFzZU1lZGlhLVxuICAgIC8vIERlY29kZVRpbWUgZm9yIHRoZSBhdWRpbyB0cmFja1xuXG5cbiAgICB2YXIgdHJpbUFkdHNGcmFtZXNCeUVhcmxpZXN0RHRzID0gZnVuY3Rpb24gdHJpbUFkdHNGcmFtZXNCeUVhcmxpZXN0RHRzKGFkdHNGcmFtZXMsIHRyYWNrLCBlYXJsaWVzdEFsbG93ZWREdHMpIHtcbiAgICAgIGlmICh0cmFjay5taW5TZWdtZW50RHRzID49IGVhcmxpZXN0QWxsb3dlZER0cykge1xuICAgICAgICByZXR1cm4gYWR0c0ZyYW1lcztcbiAgICAgIH0gLy8gV2Ugd2lsbCBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBlYXJsaWVzdCBzZWdtZW50IER0c1xuXG5cbiAgICAgIHRyYWNrLm1pblNlZ21lbnREdHMgPSBJbmZpbml0eTtcbiAgICAgIHJldHVybiBhZHRzRnJhbWVzLmZpbHRlcihmdW5jdGlvbiAoY3VycmVudEZyYW1lKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYWxsb3dlZCBmcmFtZSwga2VlcCBpdCBhbmQgcmVjb3JkIGl0J3MgRHRzXG4gICAgICAgIGlmIChjdXJyZW50RnJhbWUuZHRzID49IGVhcmxpZXN0QWxsb3dlZER0cykge1xuICAgICAgICAgIHRyYWNrLm1pblNlZ21lbnREdHMgPSBNYXRoLm1pbih0cmFjay5taW5TZWdtZW50RHRzLCBjdXJyZW50RnJhbWUuZHRzKTtcbiAgICAgICAgICB0cmFjay5taW5TZWdtZW50UHRzID0gdHJhY2subWluU2VnbWVudER0cztcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIGRpc2NhcmQgaXRcblxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07IC8vIGdlbmVyYXRlIHRoZSB0cmFjaydzIHJhdyBtZGF0IGRhdGEgZnJvbSBhbiBhcnJheSBvZiBmcmFtZXNcblxuXG4gICAgdmFyIGdlbmVyYXRlU2FtcGxlVGFibGUkMSA9IGZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlVGFibGUoZnJhbWVzKSB7XG4gICAgICB2YXIgaSxcbiAgICAgICAgICBjdXJyZW50RnJhbWUsXG4gICAgICAgICAgc2FtcGxlcyA9IFtdO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnRGcmFtZSA9IGZyYW1lc1tpXTtcbiAgICAgICAgc2FtcGxlcy5wdXNoKHtcbiAgICAgICAgICBzaXplOiBjdXJyZW50RnJhbWUuZGF0YS5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGR1cmF0aW9uOiAxMDI0IC8vIEZvciBBQUMgYXVkaW8sIGFsbCBzYW1wbGVzIGNvbnRhaW4gMTAyNCBzYW1wbGVzXG5cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzYW1wbGVzO1xuICAgIH07IC8vIGdlbmVyYXRlIHRoZSB0cmFjaydzIHNhbXBsZSB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGZyYW1lc1xuXG5cbiAgICB2YXIgY29uY2F0ZW5hdGVGcmFtZURhdGEgPSBmdW5jdGlvbiBjb25jYXRlbmF0ZUZyYW1lRGF0YShmcmFtZXMpIHtcbiAgICAgIHZhciBpLFxuICAgICAgICAgIGN1cnJlbnRGcmFtZSxcbiAgICAgICAgICBkYXRhT2Zmc2V0ID0gMCxcbiAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoc3VtRnJhbWVCeXRlTGVuZ3RocyhmcmFtZXMpKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdXJyZW50RnJhbWUgPSBmcmFtZXNbaV07XG4gICAgICAgIGRhdGEuc2V0KGN1cnJlbnRGcmFtZS5kYXRhLCBkYXRhT2Zmc2V0KTtcbiAgICAgICAgZGF0YU9mZnNldCArPSBjdXJyZW50RnJhbWUuZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgdmFyIGF1ZGlvRnJhbWVVdGlscyA9IHtcbiAgICAgIHByZWZpeFdpdGhTaWxlbmNlOiBwcmVmaXhXaXRoU2lsZW5jZSxcbiAgICAgIHRyaW1BZHRzRnJhbWVzQnlFYXJsaWVzdER0czogdHJpbUFkdHNGcmFtZXNCeUVhcmxpZXN0RHRzLFxuICAgICAgZ2VuZXJhdGVTYW1wbGVUYWJsZTogZ2VuZXJhdGVTYW1wbGVUYWJsZSQxLFxuICAgICAgY29uY2F0ZW5hdGVGcmFtZURhdGE6IGNvbmNhdGVuYXRlRnJhbWVEYXRhXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKi9cblxuICAgIHZhciBPTkVfU0VDT05EX0lOX1RTJDEgPSBjbG9jay5PTkVfU0VDT05EX0lOX1RTO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB0cmFjayBhbmQgdGhlXG4gICAgICogZHVyYXRpb24gZm9yIGVhY2ggZnJhbWUvc2FtcGxlIHdlIHByb2Nlc3MgaW4gb3JkZXIgdG8gY2FsY3VsYXRlXG4gICAgICogdGhlIGJhc2VNZWRpYURlY29kZVRpbWVcbiAgICAgKi9cblxuICAgIHZhciBjb2xsZWN0RHRzSW5mbyA9IGZ1bmN0aW9uIGNvbGxlY3REdHNJbmZvKHRyYWNrLCBkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEucHRzID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAodHJhY2sudGltZWxpbmVTdGFydEluZm8ucHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay50aW1lbGluZVN0YXJ0SW5mby5wdHMgPSBkYXRhLnB0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFjay5taW5TZWdtZW50UHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay5taW5TZWdtZW50UHRzID0gZGF0YS5wdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhY2subWluU2VnbWVudFB0cyA9IE1hdGgubWluKHRyYWNrLm1pblNlZ21lbnRQdHMsIGRhdGEucHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFjay5tYXhTZWdtZW50UHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay5tYXhTZWdtZW50UHRzID0gZGF0YS5wdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhY2subWF4U2VnbWVudFB0cyA9IE1hdGgubWF4KHRyYWNrLm1heFNlZ21lbnRQdHMsIGRhdGEucHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGEuZHRzID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAodHJhY2sudGltZWxpbmVTdGFydEluZm8uZHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay50aW1lbGluZVN0YXJ0SW5mby5kdHMgPSBkYXRhLmR0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFjay5taW5TZWdtZW50RHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay5taW5TZWdtZW50RHRzID0gZGF0YS5kdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhY2subWluU2VnbWVudER0cyA9IE1hdGgubWluKHRyYWNrLm1pblNlZ21lbnREdHMsIGRhdGEuZHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFjay5tYXhTZWdtZW50RHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFjay5tYXhTZWdtZW50RHRzID0gZGF0YS5kdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhY2subWF4U2VnbWVudER0cyA9IE1hdGgubWF4KHRyYWNrLm1heFNlZ21lbnREdHMsIGRhdGEuZHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2xlYXIgdmFsdWVzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBiYXNlTWVkaWFEZWNvZGVUaW1lIGJldHdlZW5cbiAgICAgKiB0cmFja3NcbiAgICAgKi9cblxuXG4gICAgdmFyIGNsZWFyRHRzSW5mbyA9IGZ1bmN0aW9uIGNsZWFyRHRzSW5mbyh0cmFjaykge1xuICAgICAgZGVsZXRlIHRyYWNrLm1pblNlZ21lbnREdHM7XG4gICAgICBkZWxldGUgdHJhY2subWF4U2VnbWVudER0cztcbiAgICAgIGRlbGV0ZSB0cmFjay5taW5TZWdtZW50UHRzO1xuICAgICAgZGVsZXRlIHRyYWNrLm1heFNlZ21lbnRQdHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNrJ3MgYmFzZU1lZGlhRGVjb2RlVGltZSBiYXNlZCBvbiB0aGUgZWFybGllc3RcbiAgICAgKiBEVFMgdGhlIHRyYW5zbXV4ZXIgaGFzIGV2ZXIgc2VlbiBhbmQgdGhlIG1pbmltdW0gRFRTIGZvciB0aGVcbiAgICAgKiBjdXJyZW50IHRyYWNrXG4gICAgICogQHBhcmFtIHRyYWNrIHtvYmplY3R9IHRyYWNrIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ga2VlcE9yaWdpbmFsVGltZXN0YW1wcyB7Ym9vbGVhbn0gSWYgdHJ1ZSwga2VlcCB0aGUgdGltZXN0YW1wc1xuICAgICAqICAgICAgICBpbiB0aGUgc291cmNlOyBmYWxzZSB0byBhZGp1c3QgdGhlIGZpcnN0IHNlZ21lbnQgdG8gc3RhcnQgYXQgMC5cbiAgICAgKi9cblxuXG4gICAgdmFyIGNhbGN1bGF0ZVRyYWNrQmFzZU1lZGlhRGVjb2RlVGltZSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVRyYWNrQmFzZU1lZGlhRGVjb2RlVGltZSh0cmFjaywga2VlcE9yaWdpbmFsVGltZXN0YW1wcykge1xuICAgICAgdmFyIGJhc2VNZWRpYURlY29kZVRpbWUsXG4gICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgbWluU2VnbWVudER0cyA9IHRyYWNrLm1pblNlZ21lbnREdHM7IC8vIE9wdGlvbmFsbHkgYWRqdXN0IHRoZSB0aW1lIHNvIHRoZSBmaXJzdCBzZWdtZW50IHN0YXJ0cyBhdCB6ZXJvLlxuXG4gICAgICBpZiAoIWtlZXBPcmlnaW5hbFRpbWVzdGFtcHMpIHtcbiAgICAgICAgbWluU2VnbWVudER0cyAtPSB0cmFjay50aW1lbGluZVN0YXJ0SW5mby5kdHM7XG4gICAgICB9IC8vIHRyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmJhc2VNZWRpYURlY29kZVRpbWUgaXMgdGhlIGxvY2F0aW9uLCBpbiB0aW1lLCB3aGVyZVxuICAgICAgLy8gd2Ugd2FudCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHNlZ21lbnQgdG8gYmUgcGxhY2VkXG5cblxuICAgICAgYmFzZU1lZGlhRGVjb2RlVGltZSA9IHRyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmJhc2VNZWRpYURlY29kZVRpbWU7IC8vIEFkZCB0byB0aGF0IHRoZSBkaXN0YW5jZSB0aGlzIHNlZ21lbnQgaXMgZnJvbSB0aGUgdmVyeSBmaXJzdFxuXG4gICAgICBiYXNlTWVkaWFEZWNvZGVUaW1lICs9IG1pblNlZ21lbnREdHM7IC8vIGJhc2VNZWRpYURlY29kZVRpbWUgbXVzdCBub3QgYmVjb21lIG5lZ2F0aXZlXG5cbiAgICAgIGJhc2VNZWRpYURlY29kZVRpbWUgPSBNYXRoLm1heCgwLCBiYXNlTWVkaWFEZWNvZGVUaW1lKTtcblxuICAgICAgaWYgKHRyYWNrLnR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgLy8gQXVkaW8gaGFzIGEgZGlmZmVyZW50IGNsb2NrIGVxdWFsIHRvIHRoZSBzYW1wbGluZ19yYXRlIHNvIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gc2NhbGUgdGhlIFBUUyB2YWx1ZXMgaW50byB0aGUgY2xvY2sgcmF0ZSBvZiB0aGUgdHJhY2tcbiAgICAgICAgc2NhbGUgPSB0cmFjay5zYW1wbGVyYXRlIC8gT05FX1NFQ09ORF9JTl9UUyQxO1xuICAgICAgICBiYXNlTWVkaWFEZWNvZGVUaW1lICo9IHNjYWxlO1xuICAgICAgICBiYXNlTWVkaWFEZWNvZGVUaW1lID0gTWF0aC5mbG9vcihiYXNlTWVkaWFEZWNvZGVUaW1lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgfTtcblxuICAgIHZhciB0cmFja0RlY29kZUluZm8gPSB7XG4gICAgICBjbGVhckR0c0luZm86IGNsZWFyRHRzSW5mbyxcbiAgICAgIGNhbGN1bGF0ZVRyYWNrQmFzZU1lZGlhRGVjb2RlVGltZTogY2FsY3VsYXRlVHJhY2tCYXNlTWVkaWFEZWNvZGVUaW1lLFxuICAgICAgY29sbGVjdER0c0luZm86IGNvbGxlY3REdHNJbmZvXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKlxuICAgICAqIFJlYWRzIGluLWJhbmQgY2FwdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgdmlkZW8gZWxlbWVudGFyeVxuICAgICAqIHN0cmVhbS4gQ2FwdGlvbnMgbXVzdCBmb2xsb3cgdGhlIENFQS03MDggc3RhbmRhcmQgZm9yIGluamVjdGlvblxuICAgICAqIGludG8gYW4gTVBFRy0yIHRyYW5zcG9ydCBzdHJlYW1zLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ0VBLTcwOFxuICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuZ3BvLmdvdi9mZHN5cy9wa2cvQ0ZSLTIwMDctdGl0bGU0Ny12b2wxL3BkZi9DRlItMjAwNy10aXRsZTQ3LXZvbDEtc2VjMTUtMTE5LnBkZlxuICAgICAqL1xuICAgIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKSBOQUwgdW5pdHMgaGF2ZSBhXG4gICAgLy8gcGF5bG9hZCB0eXBlIGZpZWxkIHRvIGluZGljYXRlIGhvdyB0aGV5IGFyZSB0byBiZVxuICAgIC8vIGludGVycHJldGVkLiBDRUFTLTcwOCBjYXB0aW9uIGNvbnRlbnQgaXMgYWx3YXlzIHRyYW5zbWl0dGVkIHdpdGhcbiAgICAvLyBwYXlsb2FkIHR5cGUgMHgwNC5cblxuICAgIHZhciBVU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzUgPSA0LFxuICAgICAgICBSQlNQX1RSQUlMSU5HX0JJVFMgPSAxMjg7XG4gICAgLyoqXG4gICAgICAqIFBhcnNlIGEgc3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpIE5BTCB1bml0LlxuICAgICAgKiBTdG9wcyBwYXJzaW5nIG9uY2UgYSBtZXNzYWdlIG9mIHR5cGUgSVRVIFQgVDM1IGhhcyBiZWVuIGZvdW5kLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0gYnl0ZXMge1VpbnQ4QXJyYXl9IHRoZSBieXRlcyBvZiBhIFNFSSBOQUwgdW5pdFxuICAgICAgKiBAcmV0dXJuIHtvYmplY3R9IHRoZSBwYXJzZWQgU0VJIHBheWxvYWRcbiAgICAgICogQHNlZSBSZWMuIElUVS1UIEguMjY0LCA3LjMuMi4zLjFcbiAgICAgICovXG5cbiAgICB2YXIgcGFyc2VTZWkgPSBmdW5jdGlvbiBwYXJzZVNlaShieXRlcykge1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgcGF5bG9hZFR5cGU6IC0xLFxuICAgICAgICBwYXlsb2FkU2l6ZTogMFxuICAgICAgfSxcbiAgICAgICAgICBwYXlsb2FkVHlwZSA9IDAsXG4gICAgICAgICAgcGF5bG9hZFNpemUgPSAwOyAvLyBnbyB0aHJvdWdoIHRoZSBzZWlfcmJzcCBwYXJzaW5nIGVhY2ggZWFjaCBpbmRpdmlkdWFsIHNlaV9tZXNzYWdlXG5cbiAgICAgIHdoaWxlIChpIDwgYnl0ZXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBzdG9wIG9uY2Ugd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgc2VpX3Jic3BcbiAgICAgICAgaWYgKGJ5dGVzW2ldID09PSBSQlNQX1RSQUlMSU5HX0JJVFMpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBQYXJzZSBwYXlsb2FkIHR5cGVcblxuXG4gICAgICAgIHdoaWxlIChieXRlc1tpXSA9PT0gMHhGRikge1xuICAgICAgICAgIHBheWxvYWRUeXBlICs9IDI1NTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICBwYXlsb2FkVHlwZSArPSBieXRlc1tpKytdOyAvLyBQYXJzZSBwYXlsb2FkIHNpemVcblxuICAgICAgICB3aGlsZSAoYnl0ZXNbaV0gPT09IDB4RkYpIHtcbiAgICAgICAgICBwYXlsb2FkU2l6ZSArPSAyNTU7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF5bG9hZFNpemUgKz0gYnl0ZXNbaSsrXTsgLy8gdGhpcyBzZWlfbWVzc2FnZSBpcyBhIDYwOC83MDggY2FwdGlvbiBzbyBzYXZlIGl0IGFuZCBicmVha1xuICAgICAgICAvLyB0aGVyZSBjYW4gb25seSBldmVyIGJlIG9uZSBjYXB0aW9uIG1lc3NhZ2UgaW4gYSBmcmFtZSdzIHNlaVxuXG4gICAgICAgIGlmICghcmVzdWx0LnBheWxvYWQgJiYgcGF5bG9hZFR5cGUgPT09IFVTRVJfREFUQV9SRUdJU1RFUkVEX0lUVV9UX1QzNSkge1xuICAgICAgICAgIHJlc3VsdC5wYXlsb2FkVHlwZSA9IHBheWxvYWRUeXBlO1xuICAgICAgICAgIHJlc3VsdC5wYXlsb2FkU2l6ZSA9IHBheWxvYWRTaXplO1xuICAgICAgICAgIHJlc3VsdC5wYXlsb2FkID0gYnl0ZXMuc3ViYXJyYXkoaSwgaSArIHBheWxvYWRTaXplKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBza2lwIHRoZSBwYXlsb2FkIGFuZCBwYXJzZSB0aGUgbmV4dCBtZXNzYWdlXG5cblxuICAgICAgICBpICs9IHBheWxvYWRTaXplO1xuICAgICAgICBwYXlsb2FkVHlwZSA9IDA7XG4gICAgICAgIHBheWxvYWRTaXplID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9OyAvLyBzZWUgQU5TSS9TQ1RFIDEyOC0xICgyMDEzKSwgc2VjdGlvbiA4LjFcblxuXG4gICAgdmFyIHBhcnNlVXNlckRhdGEgPSBmdW5jdGlvbiBwYXJzZVVzZXJEYXRhKHNlaSkge1xuICAgICAgLy8gaXR1X3RfdDM1X2NvbnRyeV9jb2RlIG11c3QgYmUgMTgxIChVbml0ZWQgU3RhdGVzKSBmb3JcbiAgICAgIC8vIGNhcHRpb25zXG4gICAgICBpZiAoc2VpLnBheWxvYWRbMF0gIT09IDE4MSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gaXR1X3RfdDM1X3Byb3ZpZGVyX2NvZGUgc2hvdWxkIGJlIDQ5IChBVFNDKSBmb3IgY2FwdGlvbnNcblxuXG4gICAgICBpZiAoKHNlaS5wYXlsb2FkWzFdIDw8IDggfCBzZWkucGF5bG9hZFsyXSkgIT09IDQ5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB0aGUgdXNlcl9pZGVudGlmaWVyIHNob3VsZCBiZSBcIkdBOTRcIiB0byBpbmRpY2F0ZSBBVFNDMSBkYXRhXG5cblxuICAgICAgaWYgKFN0cmluZy5mcm9tQ2hhckNvZGUoc2VpLnBheWxvYWRbM10sIHNlaS5wYXlsb2FkWzRdLCBzZWkucGF5bG9hZFs1XSwgc2VpLnBheWxvYWRbNl0pICE9PSAnR0E5NCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIGZpbmFsbHksIHVzZXJfZGF0YV90eXBlX2NvZGUgc2hvdWxkIGJlIDB4MDMgZm9yIGNhcHRpb24gZGF0YVxuXG5cbiAgICAgIGlmIChzZWkucGF5bG9hZFs3XSAhPT0gMHgwMykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gcmV0dXJuIHRoZSB1c2VyX2RhdGFfdHlwZV9zdHJ1Y3R1cmUgYW5kIHN0cmlwIHRoZSB0cmFpbGluZ1xuICAgICAgLy8gbWFya2VyIGJpdHNcblxuXG4gICAgICByZXR1cm4gc2VpLnBheWxvYWQuc3ViYXJyYXkoOCwgc2VpLnBheWxvYWQubGVuZ3RoIC0gMSk7XG4gICAgfTsgLy8gc2VlIENFQS03MDgtRCwgc2VjdGlvbiA0LjRcblxuXG4gICAgdmFyIHBhcnNlQ2FwdGlvblBhY2tldHMgPSBmdW5jdGlvbiBwYXJzZUNhcHRpb25QYWNrZXRzKHB0cywgdXNlckRhdGEpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW10sXG4gICAgICAgICAgaSxcbiAgICAgICAgICBjb3VudCxcbiAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgZGF0YTsgLy8gaWYgdGhpcyBpcyBqdXN0IGZpbGxlciwgcmV0dXJuIGltbWVkaWF0ZWx5XG5cbiAgICAgIGlmICghKHVzZXJEYXRhWzBdICYgMHg0MCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9IC8vIHBhcnNlIG91dCB0aGUgY2NfZGF0YV8xIGFuZCBjY19kYXRhXzIgZmllbGRzXG5cblxuICAgICAgY291bnQgPSB1c2VyRGF0YVswXSAmIDB4MWY7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIG9mZnNldCA9IGkgKiAzO1xuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIHR5cGU6IHVzZXJEYXRhW29mZnNldCArIDJdICYgMHgwMyxcbiAgICAgICAgICBwdHM6IHB0c1xuICAgICAgICB9OyAvLyBjYXB0dXJlIGNjIGRhdGEgd2hlbiBjY192YWxpZCBpcyAxXG5cbiAgICAgICAgaWYgKHVzZXJEYXRhW29mZnNldCArIDJdICYgMHgwNCkge1xuICAgICAgICAgIGRhdGEuY2NEYXRhID0gdXNlckRhdGFbb2Zmc2V0ICsgM10gPDwgOCB8IHVzZXJEYXRhW29mZnNldCArIDRdO1xuICAgICAgICAgIHJlc3VsdHMucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgPSBmdW5jdGlvbiBkaXNjYXJkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGRhdGEpIHtcbiAgICAgIHZhciBsZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zID0gW10sXG4gICAgICAgICAgaSA9IDEsXG4gICAgICAgICAgbmV3TGVuZ3RoLFxuICAgICAgICAgIG5ld0RhdGE7IC8vIEZpbmQgYWxsIGBFbXVsYXRpb24gUHJldmVudGlvbiBCeXRlc2BcblxuICAgICAgd2hpbGUgKGkgPCBsZW5ndGggLSAyKSB7XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAweDAzKSB7XG4gICAgICAgICAgZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zLnB1c2goaSArIDIpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gSWYgbm8gRW11bGF0aW9uIFByZXZlbnRpb24gQnl0ZXMgd2VyZSBmb3VuZCBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGFycmF5XG5cblxuICAgICAgaWYgKGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9IC8vIENyZWF0ZSBhIG5ldyBhcnJheSB0byBob2xkIHRoZSBOQUwgdW5pdCBkYXRhXG5cblxuICAgICAgbmV3TGVuZ3RoID0gbGVuZ3RoIC0gZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zLmxlbmd0aDtcbiAgICAgIG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgdmFyIHNvdXJjZUluZGV4ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG5ld0xlbmd0aDsgc291cmNlSW5kZXgrKywgaSsrKSB7XG4gICAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zWzBdKSB7XG4gICAgICAgICAgLy8gU2tpcCB0aGlzIGJ5dGVcbiAgICAgICAgICBzb3VyY2VJbmRleCsrOyAvLyBSZW1vdmUgdGhpcyBwb3NpdGlvbiBpbmRleFxuXG4gICAgICAgICAgZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdEYXRhW2ldID0gZGF0YVtzb3VyY2VJbmRleF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdEYXRhO1xuICAgIH07IC8vIGV4cG9ydHNcblxuXG4gICAgdmFyIGNhcHRpb25QYWNrZXRQYXJzZXIgPSB7XG4gICAgICBwYXJzZVNlaTogcGFyc2VTZWksXG4gICAgICBwYXJzZVVzZXJEYXRhOiBwYXJzZVVzZXJEYXRhLFxuICAgICAgcGFyc2VDYXB0aW9uUGFja2V0czogcGFyc2VDYXB0aW9uUGFja2V0cyxcbiAgICAgIGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXM6IGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMsXG4gICAgICBVU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzU6IFVTRVJfREFUQV9SRUdJU1RFUkVEX0lUVV9UX1QzNVxuICAgIH07IC8vIC0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTGluayBUbyBUcmFuc3BvcnRcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgdmFyIENhcHRpb25TdHJlYW0gPSBmdW5jdGlvbiBDYXB0aW9uU3RyZWFtKCkge1xuICAgICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jYXB0aW9uUGFja2V0c18gPSBbXTtcbiAgICAgIHRoaXMuY2NTdHJlYW1zXyA9IFtuZXcgQ2VhNjA4U3RyZWFtKDAsIDApLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBuZXcgQ2VhNjA4U3RyZWFtKDAsIDEpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBuZXcgQ2VhNjA4U3RyZWFtKDEsIDApLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBuZXcgQ2VhNjA4U3RyZWFtKDEsIDEpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIF07XG4gICAgICB0aGlzLnJlc2V0KCk7IC8vIGZvcndhcmQgZGF0YSBhbmQgZG9uZSBldmVudHMgZnJvbSBDQ3MgdG8gdGhpcyBDYXB0aW9uU3RyZWFtXG5cbiAgICAgIHRoaXMuY2NTdHJlYW1zXy5mb3JFYWNoKGZ1bmN0aW9uIChjYykge1xuICAgICAgICBjYy5vbignZGF0YScsIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMsICdkYXRhJykpO1xuICAgICAgICBjYy5vbigncGFydGlhbGRvbmUnLCB0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCAncGFydGlhbGRvbmUnKSk7XG4gICAgICAgIGNjLm9uKCdkb25lJywgdGhpcy50cmlnZ2VyLmJpbmQodGhpcywgJ2RvbmUnKSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG5cbiAgICBDYXB0aW9uU3RyZWFtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgc2VpLCB1c2VyRGF0YSwgbmV3Q2FwdGlvblBhY2tldHM7IC8vIG9ubHkgZXhhbWluZSBTRUkgTkFMc1xuXG4gICAgICBpZiAoZXZlbnQubmFsVW5pdFR5cGUgIT09ICdzZWlfcmJzcCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBwYXJzZSB0aGUgc2VpXG5cblxuICAgICAgc2VpID0gY2FwdGlvblBhY2tldFBhcnNlci5wYXJzZVNlaShldmVudC5lc2NhcGVkUkJTUCk7IC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCB1c2VyX2RhdGFfcmVnaXN0ZXJlZF9pdHVfdF90MzVcblxuICAgICAgaWYgKHNlaS5wYXlsb2FkVHlwZSAhPT0gY2FwdGlvblBhY2tldFBhcnNlci5VU0VSX0RBVEFfUkVHSVNURVJFRF9JVFVfVF9UMzUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBwYXJzZSBvdXQgdGhlIHVzZXIgZGF0YSBwYXlsb2FkXG5cblxuICAgICAgdXNlckRhdGEgPSBjYXB0aW9uUGFja2V0UGFyc2VyLnBhcnNlVXNlckRhdGEoc2VpKTsgLy8gaWdub3JlIHVucmVjb2duaXplZCB1c2VyRGF0YVxuXG4gICAgICBpZiAoIXVzZXJEYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gU29tZXRpbWVzLCB0aGUgc2FtZSBzZWdtZW50ICMgd2lsbCBiZSBkb3dubG9hZGVkIHR3aWNlLiBUbyBzdG9wIHRoZVxuICAgICAgLy8gY2FwdGlvbiBkYXRhIGZyb20gYmVpbmcgcHJvY2Vzc2VkIHR3aWNlLCB3ZSB0cmFjayB0aGUgbGF0ZXN0IGR0cyB3ZSd2ZVxuICAgICAgLy8gcmVjZWl2ZWQgYW5kIGlnbm9yZSBldmVyeXRoaW5nIHdpdGggYSBkdHMgYmVmb3JlIHRoYXQuIEhvd2V2ZXIsIHNpbmNlXG4gICAgICAvLyBkYXRhIGZvciBhIHNwZWNpZmljIGR0cyBjYW4gYmUgc3BsaXQgYWNyb3NzIHBhY2tldHMgb24gZWl0aGVyIHNpZGUgb2ZcbiAgICAgIC8vIGEgc2VnbWVudCBib3VuZGFyeSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgKmRvbid0KiBpZ25vcmUgdGhlIHBhY2tldHNcbiAgICAgIC8vIGZyb20gdGhlICpuZXh0KiBzZWdtZW50IHRoYXQgaGF2ZSBkdHMgPT09IHRoaXMubGF0ZXN0RHRzXy4gQnkgY29uc3RhbnRseVxuICAgICAgLy8gdHJhY2tpbmcgdGhlIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHdpdGggZHRzID09PSB0aGlzLmxhdGVzdER0c18sIHdlXG4gICAgICAvLyBrbm93IGhvdyBtYW55IHNob3VsZCBiZSBpZ25vcmVkIG9uY2Ugd2Ugc3RhcnQgcmVjZWl2aW5nIGR1cGxpY2F0ZXMuXG5cblxuICAgICAgaWYgKGV2ZW50LmR0cyA8IHRoaXMubGF0ZXN0RHRzXykge1xuICAgICAgICAvLyBXZSd2ZSBzdGFydGVkIGdldHRpbmcgb2xkZXIgZGF0YSwgc28gc2V0IHRoZSBmbGFnLlxuICAgICAgICB0aGlzLmlnbm9yZU5leHRFcXVhbER0c18gPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmR0cyA9PT0gdGhpcy5sYXRlc3REdHNfICYmIHRoaXMuaWdub3JlTmV4dEVxdWFsRHRzXykge1xuICAgICAgICB0aGlzLm51bVNhbWVEdHNfLS07XG5cbiAgICAgICAgaWYgKCF0aGlzLm51bVNhbWVEdHNfKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgdGhlIGxhc3QgZHVwbGljYXRlIHBhY2tldCwgdGltZSB0byBzdGFydCBwcm9jZXNzaW5nIGFnYWluXG4gICAgICAgICAgdGhpcy5pZ25vcmVOZXh0RXF1YWxEdHNfID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHBhcnNlIG91dCBDQyBkYXRhIHBhY2tldHMgYW5kIHNhdmUgdGhlbSBmb3IgbGF0ZXJcblxuXG4gICAgICBuZXdDYXB0aW9uUGFja2V0cyA9IGNhcHRpb25QYWNrZXRQYXJzZXIucGFyc2VDYXB0aW9uUGFja2V0cyhldmVudC5wdHMsIHVzZXJEYXRhKTtcbiAgICAgIHRoaXMuY2FwdGlvblBhY2tldHNfID0gdGhpcy5jYXB0aW9uUGFja2V0c18uY29uY2F0KG5ld0NhcHRpb25QYWNrZXRzKTtcblxuICAgICAgaWYgKHRoaXMubGF0ZXN0RHRzXyAhPT0gZXZlbnQuZHRzKSB7XG4gICAgICAgIHRoaXMubnVtU2FtZUR0c18gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm51bVNhbWVEdHNfKys7XG4gICAgICB0aGlzLmxhdGVzdER0c18gPSBldmVudC5kdHM7XG4gICAgfTtcblxuICAgIENhcHRpb25TdHJlYW0ucHJvdG90eXBlLmZsdXNoQ0NTdHJlYW1zID0gZnVuY3Rpb24gKGZsdXNoVHlwZSkge1xuICAgICAgdGhpcy5jY1N0cmVhbXNfLmZvckVhY2goZnVuY3Rpb24gKGNjKSB7XG4gICAgICAgIHJldHVybiBmbHVzaFR5cGUgPT09ICdmbHVzaCcgPyBjYy5mbHVzaCgpIDogY2MucGFydGlhbEZsdXNoKCk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuZmx1c2hTdHJlYW0gPSBmdW5jdGlvbiAoZmx1c2hUeXBlKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgcGFyc2VkIGNhcHRpb25zIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICBpZiAoIXRoaXMuY2FwdGlvblBhY2tldHNfLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZsdXNoQ0NTdHJlYW1zKGZsdXNoVHlwZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gSW4gQ2hyb21lLCB0aGUgQXJyYXkjc29ydCBmdW5jdGlvbiBpcyBub3Qgc3RhYmxlIHNvIGFkZCBhXG4gICAgICAvLyBwcmVzb3J0SW5kZXggdGhhdCB3ZSBjYW4gdXNlIHRvIGVuc3VyZSB3ZSBnZXQgYSBzdGFibGUtc29ydFxuXG5cbiAgICAgIHRoaXMuY2FwdGlvblBhY2tldHNfLmZvckVhY2goZnVuY3Rpb24gKGVsZW0sIGlkeCkge1xuICAgICAgICBlbGVtLnByZXNvcnRJbmRleCA9IGlkeDtcbiAgICAgIH0pOyAvLyBzb3J0IGNhcHRpb24gYnl0ZS1wYWlycyBiYXNlZCBvbiB0aGVpciBQVFMgdmFsdWVzXG5cbiAgICAgIHRoaXMuY2FwdGlvblBhY2tldHNfLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgaWYgKGEucHRzID09PSBiLnB0cykge1xuICAgICAgICAgIHJldHVybiBhLnByZXNvcnRJbmRleCAtIGIucHJlc29ydEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGEucHRzIC0gYi5wdHM7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FwdGlvblBhY2tldHNfLmZvckVhY2goZnVuY3Rpb24gKHBhY2tldCkge1xuICAgICAgICBpZiAocGFja2V0LnR5cGUgPCAyKSB7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggcGFja2V0IHRvIHRoZSByaWdodCBDZWE2MDhTdHJlYW1cbiAgICAgICAgICB0aGlzLmRpc3BhdGNoQ2VhNjA4UGFja2V0KHBhY2tldCk7XG4gICAgICAgIH0gLy8gdGhpcyBpcyB3aGVyZSBhbiAnZWxzZScgd291bGQgZ28gZm9yIGEgZGlzcGF0Y2hpbmcgcGFja2V0c1xuICAgICAgICAvLyB0byBhIHRoZW9yZXRpY2FsIENlYTcwOFN0cmVhbSB0aGF0IGhhbmRsZXMgU0VSVklDRW4gZGF0YVxuXG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuY2FwdGlvblBhY2tldHNfLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLmZsdXNoQ0NTdHJlYW1zKGZsdXNoVHlwZSk7XG4gICAgfTtcblxuICAgIENhcHRpb25TdHJlYW0ucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmx1c2hTdHJlYW0oJ2ZsdXNoJyk7XG4gICAgfTsgLy8gT25seSBjYWxsZWQgaWYgaGFuZGxpbmcgcGFydGlhbCBkYXRhXG5cblxuICAgIENhcHRpb25TdHJlYW0ucHJvdG90eXBlLnBhcnRpYWxGbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsdXNoU3RyZWFtKCdwYXJ0aWFsRmx1c2gnKTtcbiAgICB9O1xuXG4gICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmxhdGVzdER0c18gPSBudWxsO1xuICAgICAgdGhpcy5pZ25vcmVOZXh0RXF1YWxEdHNfID0gZmFsc2U7XG4gICAgICB0aGlzLm51bVNhbWVEdHNfID0gMDtcbiAgICAgIHRoaXMuYWN0aXZlQ2VhNjA4Q2hhbm5lbF8gPSBbbnVsbCwgbnVsbF07XG4gICAgICB0aGlzLmNjU3RyZWFtc18uZm9yRWFjaChmdW5jdGlvbiAoY2NTdHJlYW0pIHtcbiAgICAgICAgY2NTdHJlYW0ucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgIH07IC8vIEZyb20gdGhlIENFQS02MDggc3BlYzpcblxuICAgIC8qXG4gICAgICogV2hlbiBYRFMgc3ViLXBhY2tldHMgYXJlIGludGVybGVhdmVkIHdpdGggb3RoZXIgc2VydmljZXMsIHRoZSBlbmQgb2YgZWFjaCBzdWItcGFja2V0IHNoYWxsIGJlIGZvbGxvd2VkXG4gICAgICogYnkgYSBjb250cm9sIHBhaXIgdG8gY2hhbmdlIHRvIGEgZGlmZmVyZW50IHNlcnZpY2UuIFdoZW4gYW55IG9mIHRoZSBjb250cm9sIGNvZGVzIGZyb20gMHgxMCB0byAweDFGIGlzXG4gICAgICogdXNlZCB0byBiZWdpbiBhIGNvbnRyb2wgY29kZSBwYWlyLCBpdCBpbmRpY2F0ZXMgdGhlIHJldHVybiB0byBjYXB0aW9uaW5nIG9yIFRleHQgZGF0YS4gVGhlIGNvbnRyb2wgY29kZSBwYWlyXG4gICAgICogYW5kIHN1YnNlcXVlbnQgZGF0YSBzaG91bGQgdGhlbiBiZSBwcm9jZXNzZWQgYWNjb3JkaW5nIHRvIHRoZSBGQ0MgcnVsZXMuIEl0IG1heSBiZSBuZWNlc3NhcnkgZm9yIHRoZVxuICAgICAqIGxpbmUgMjEgZGF0YSBlbmNvZGVyIHRvIGF1dG9tYXRpY2FsbHkgaW5zZXJ0IGEgY29udHJvbCBjb2RlIHBhaXIgKGkuZS4gUkNMLCBSVTIsIFJVMywgUlU0LCBSREMsIG9yIFJURClcbiAgICAgKiB0byBzd2l0Y2ggdG8gY2FwdGlvbmluZyBvciBUZXh0LlxuICAgICovXG4gICAgLy8gV2l0aCB0aGF0IGluIG1pbmQsIHdlIGlnbm9yZSBhbnkgZGF0YSBiZXR3ZWVuIGFuIFhEUyBjb250cm9sIGNvZGUgYW5kIGFcbiAgICAvLyBzdWJzZXF1ZW50IGNsb3NlZC1jYXB0aW9uaW5nIGNvbnRyb2wgY29kZS5cblxuXG4gICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuZGlzcGF0Y2hDZWE2MDhQYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgICAvLyBOT1RFOiBwYWNrZXQudHlwZSBpcyB0aGUgQ0VBNjA4IGZpZWxkXG4gICAgICBpZiAodGhpcy5zZXRzVGV4dE9yWERTQWN0aXZlKHBhY2tldCkpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDZWE2MDhDaGFubmVsX1twYWNrZXQudHlwZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNldHNDaGFubmVsMUFjdGl2ZShwYWNrZXQpKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2VhNjA4Q2hhbm5lbF9bcGFja2V0LnR5cGVdID0gMDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXRzQ2hhbm5lbDJBY3RpdmUocGFja2V0KSkge1xuICAgICAgICB0aGlzLmFjdGl2ZUNlYTYwOENoYW5uZWxfW3BhY2tldC50eXBlXSA9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmFjdGl2ZUNlYTYwOENoYW5uZWxfW3BhY2tldC50eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHJlY2VpdmVkIGFueXRoaW5nIHRvIHNldCB0aGUgYWN0aXZlIGNoYW5uZWwsIG9yIHRoZVxuICAgICAgICAvLyBwYWNrZXRzIGFyZSBUZXh0L1hEUyBkYXRhLCBkaXNjYXJkIHRoZSBkYXRhOyB3ZSBkb24ndCB3YW50IGp1bWJsZWRcbiAgICAgICAgLy8gY2FwdGlvbnNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNjU3RyZWFtc19bKHBhY2tldC50eXBlIDw8IDEpICsgdGhpcy5hY3RpdmVDZWE2MDhDaGFubmVsX1twYWNrZXQudHlwZV1dLnB1c2gocGFja2V0KTtcbiAgICB9O1xuXG4gICAgQ2FwdGlvblN0cmVhbS5wcm90b3R5cGUuc2V0c0NoYW5uZWwxQWN0aXZlID0gZnVuY3Rpb24gKHBhY2tldCkge1xuICAgICAgcmV0dXJuIChwYWNrZXQuY2NEYXRhICYgMHg3ODAwKSA9PT0gMHgxMDAwO1xuICAgIH07XG5cbiAgICBDYXB0aW9uU3RyZWFtLnByb3RvdHlwZS5zZXRzQ2hhbm5lbDJBY3RpdmUgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgICByZXR1cm4gKHBhY2tldC5jY0RhdGEgJiAweDc4MDApID09PSAweDE4MDA7XG4gICAgfTtcblxuICAgIENhcHRpb25TdHJlYW0ucHJvdG90eXBlLnNldHNUZXh0T3JYRFNBY3RpdmUgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgICByZXR1cm4gKHBhY2tldC5jY0RhdGEgJiAweDcxMDApID09PSAweDAxMDAgfHwgKHBhY2tldC5jY0RhdGEgJiAweDc4ZmUpID09PSAweDEwMmEgfHwgKHBhY2tldC5jY0RhdGEgJiAweDc4ZmUpID09PSAweDE4MmE7XG4gICAgfTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNlc3Npb24gdG8gQXBwbGljYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVGhpcyBoYXNoIG1hcHMgbm9uLUFTQ0lJLCBzcGVjaWFsLCBhbmQgZXh0ZW5kZWQgY2hhcmFjdGVyIGNvZGVzIHRvIHRoZWlyXG4gICAgLy8gcHJvcGVyIFVuaWNvZGUgZXF1aXZhbGVudC4gVGhlIGZpcnN0IGtleXMgdGhhdCBhcmUgb25seSBhIHNpbmdsZSBieXRlXG4gICAgLy8gYXJlIHRoZSBub24tc3RhbmRhcmQgQVNDSUkgY2hhcmFjdGVycywgd2hpY2ggc2ltcGx5IG1hcCB0aGUgQ0VBNjA4IGJ5dGVcbiAgICAvLyB0byB0aGUgc3RhbmRhcmQgQVNDSUkvVW5pY29kZS4gVGhlIHR3by1ieXRlIGtleXMgdGhhdCBmb2xsb3cgYXJlIHRoZSBDRUE2MDhcbiAgICAvLyBjaGFyYWN0ZXIgY29kZXMsIGJ1dCBoYXZlIHRoZWlyIE1TQiBiaXRtYXNrZWQgd2l0aCAweDAzIHNvIHRoYXQgYSBsb29rdXBcbiAgICAvLyBjYW4gYmUgcGVyZm9ybWVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGZpZWxkIGFuZCBkYXRhIGNoYW5uZWwgb24gd2hpY2ggdGhlXG4gICAgLy8gY2hhcmFjdGVyIGNvZGUgd2FzIHJlY2VpdmVkLlxuXG5cbiAgICB2YXIgQ0hBUkFDVEVSX1RSQU5TTEFUSU9OID0ge1xuICAgICAgMHgyYTogMHhlMSxcbiAgICAgIC8vIMOhXG4gICAgICAweDVjOiAweGU5LFxuICAgICAgLy8gw6lcbiAgICAgIDB4NWU6IDB4ZWQsXG4gICAgICAvLyDDrVxuICAgICAgMHg1ZjogMHhmMyxcbiAgICAgIC8vIMOzXG4gICAgICAweDYwOiAweGZhLFxuICAgICAgLy8gw7pcbiAgICAgIDB4N2I6IDB4ZTcsXG4gICAgICAvLyDDp1xuICAgICAgMHg3YzogMHhmNyxcbiAgICAgIC8vIMO3XG4gICAgICAweDdkOiAweGQxLFxuICAgICAgLy8gw5FcbiAgICAgIDB4N2U6IDB4ZjEsXG4gICAgICAvLyDDsVxuICAgICAgMHg3ZjogMHgyNTg4LFxuICAgICAgLy8g4paIXG4gICAgICAweDAxMzA6IDB4YWUsXG4gICAgICAvLyDCrlxuICAgICAgMHgwMTMxOiAweGIwLFxuICAgICAgLy8gwrBcbiAgICAgIDB4MDEzMjogMHhiZCxcbiAgICAgIC8vIMK9XG4gICAgICAweDAxMzM6IDB4YmYsXG4gICAgICAvLyDCv1xuICAgICAgMHgwMTM0OiAweDIxMjIsXG4gICAgICAvLyDihKJcbiAgICAgIDB4MDEzNTogMHhhMixcbiAgICAgIC8vIMKiXG4gICAgICAweDAxMzY6IDB4YTMsXG4gICAgICAvLyDCo1xuICAgICAgMHgwMTM3OiAweDI2NmEsXG4gICAgICAvLyDimapcbiAgICAgIDB4MDEzODogMHhlMCxcbiAgICAgIC8vIMOgXG4gICAgICAweDAxMzk6IDB4YTAsXG4gICAgICAvL1xuICAgICAgMHgwMTNhOiAweGU4LFxuICAgICAgLy8gw6hcbiAgICAgIDB4MDEzYjogMHhlMixcbiAgICAgIC8vIMOiXG4gICAgICAweDAxM2M6IDB4ZWEsXG4gICAgICAvLyDDqlxuICAgICAgMHgwMTNkOiAweGVlLFxuICAgICAgLy8gw65cbiAgICAgIDB4MDEzZTogMHhmNCxcbiAgICAgIC8vIMO0XG4gICAgICAweDAxM2Y6IDB4ZmIsXG4gICAgICAvLyDDu1xuICAgICAgMHgwMjIwOiAweGMxLFxuICAgICAgLy8gw4FcbiAgICAgIDB4MDIyMTogMHhjOSxcbiAgICAgIC8vIMOJXG4gICAgICAweDAyMjI6IDB4ZDMsXG4gICAgICAvLyDDk1xuICAgICAgMHgwMjIzOiAweGRhLFxuICAgICAgLy8gw5pcbiAgICAgIDB4MDIyNDogMHhkYyxcbiAgICAgIC8vIMOcXG4gICAgICAweDAyMjU6IDB4ZmMsXG4gICAgICAvLyDDvFxuICAgICAgMHgwMjI2OiAweDIwMTgsXG4gICAgICAvLyDigJhcbiAgICAgIDB4MDIyNzogMHhhMSxcbiAgICAgIC8vIMKhXG4gICAgICAweDAyMjg6IDB4MmEsXG4gICAgICAvLyAqXG4gICAgICAweDAyMjk6IDB4MjcsXG4gICAgICAvLyAnXG4gICAgICAweDAyMmE6IDB4MjAxNCxcbiAgICAgIC8vIOKAlFxuICAgICAgMHgwMjJiOiAweGE5LFxuICAgICAgLy8gwqlcbiAgICAgIDB4MDIyYzogMHgyMTIwLFxuICAgICAgLy8g4oSgXG4gICAgICAweDAyMmQ6IDB4MjAyMixcbiAgICAgIC8vIOKAolxuICAgICAgMHgwMjJlOiAweDIwMWMsXG4gICAgICAvLyDigJxcbiAgICAgIDB4MDIyZjogMHgyMDFkLFxuICAgICAgLy8g4oCdXG4gICAgICAweDAyMzA6IDB4YzAsXG4gICAgICAvLyDDgFxuICAgICAgMHgwMjMxOiAweGMyLFxuICAgICAgLy8gw4JcbiAgICAgIDB4MDIzMjogMHhjNyxcbiAgICAgIC8vIMOHXG4gICAgICAweDAyMzM6IDB4YzgsXG4gICAgICAvLyDDiFxuICAgICAgMHgwMjM0OiAweGNhLFxuICAgICAgLy8gw4pcbiAgICAgIDB4MDIzNTogMHhjYixcbiAgICAgIC8vIMOLXG4gICAgICAweDAyMzY6IDB4ZWIsXG4gICAgICAvLyDDq1xuICAgICAgMHgwMjM3OiAweGNlLFxuICAgICAgLy8gw45cbiAgICAgIDB4MDIzODogMHhjZixcbiAgICAgIC8vIMOPXG4gICAgICAweDAyMzk6IDB4ZWYsXG4gICAgICAvLyDDr1xuICAgICAgMHgwMjNhOiAweGQ0LFxuICAgICAgLy8gw5RcbiAgICAgIDB4MDIzYjogMHhkOSxcbiAgICAgIC8vIMOZXG4gICAgICAweDAyM2M6IDB4ZjksXG4gICAgICAvLyDDuVxuICAgICAgMHgwMjNkOiAweGRiLFxuICAgICAgLy8gw5tcbiAgICAgIDB4MDIzZTogMHhhYixcbiAgICAgIC8vIMKrXG4gICAgICAweDAyM2Y6IDB4YmIsXG4gICAgICAvLyDCu1xuICAgICAgMHgwMzIwOiAweGMzLFxuICAgICAgLy8gw4NcbiAgICAgIDB4MDMyMTogMHhlMyxcbiAgICAgIC8vIMOjXG4gICAgICAweDAzMjI6IDB4Y2QsXG4gICAgICAvLyDDjVxuICAgICAgMHgwMzIzOiAweGNjLFxuICAgICAgLy8gw4xcbiAgICAgIDB4MDMyNDogMHhlYyxcbiAgICAgIC8vIMOsXG4gICAgICAweDAzMjU6IDB4ZDIsXG4gICAgICAvLyDDklxuICAgICAgMHgwMzI2OiAweGYyLFxuICAgICAgLy8gw7JcbiAgICAgIDB4MDMyNzogMHhkNSxcbiAgICAgIC8vIMOVXG4gICAgICAweDAzMjg6IDB4ZjUsXG4gICAgICAvLyDDtVxuICAgICAgMHgwMzI5OiAweDdiLFxuICAgICAgLy8ge1xuICAgICAgMHgwMzJhOiAweDdkLFxuICAgICAgLy8gfVxuICAgICAgMHgwMzJiOiAweDVjLFxuICAgICAgLy8gXFxcbiAgICAgIDB4MDMyYzogMHg1ZSxcbiAgICAgIC8vIF5cbiAgICAgIDB4MDMyZDogMHg1ZixcbiAgICAgIC8vIF9cbiAgICAgIDB4MDMyZTogMHg3YyxcbiAgICAgIC8vIHxcbiAgICAgIDB4MDMyZjogMHg3ZSxcbiAgICAgIC8vIH5cbiAgICAgIDB4MDMzMDogMHhjNCxcbiAgICAgIC8vIMOEXG4gICAgICAweDAzMzE6IDB4ZTQsXG4gICAgICAvLyDDpFxuICAgICAgMHgwMzMyOiAweGQ2LFxuICAgICAgLy8gw5ZcbiAgICAgIDB4MDMzMzogMHhmNixcbiAgICAgIC8vIMO2XG4gICAgICAweDAzMzQ6IDB4ZGYsXG4gICAgICAvLyDDn1xuICAgICAgMHgwMzM1OiAweGE1LFxuICAgICAgLy8gwqVcbiAgICAgIDB4MDMzNjogMHhhNCxcbiAgICAgIC8vIMKkXG4gICAgICAweDAzMzc6IDB4MjUwMixcbiAgICAgIC8vIOKUglxuICAgICAgMHgwMzM4OiAweGM1LFxuICAgICAgLy8gw4VcbiAgICAgIDB4MDMzOTogMHhlNSxcbiAgICAgIC8vIMOlXG4gICAgICAweDAzM2E6IDB4ZDgsXG4gICAgICAvLyDDmFxuICAgICAgMHgwMzNiOiAweGY4LFxuICAgICAgLy8gw7hcbiAgICAgIDB4MDMzYzogMHgyNTBjLFxuICAgICAgLy8g4pSMXG4gICAgICAweDAzM2Q6IDB4MjUxMCxcbiAgICAgIC8vIOKUkFxuICAgICAgMHgwMzNlOiAweDI1MTQsXG4gICAgICAvLyDilJRcbiAgICAgIDB4MDMzZjogMHgyNTE4IC8vIOKUmFxuXG4gICAgfTtcblxuICAgIHZhciBnZXRDaGFyRnJvbUNvZGUgPSBmdW5jdGlvbiBnZXRDaGFyRnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICBjb2RlID0gQ0hBUkFDVEVSX1RSQU5TTEFUSU9OW2NvZGVdIHx8IGNvZGU7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9OyAvLyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgcm93IGluIGEgQ0VBLTYwOCBkaXNwbGF5IGJ1ZmZlclxuXG5cbiAgICB2YXIgQk9UVE9NX1JPVyA9IDE0OyAvLyBUaGlzIGFycmF5IGlzIHVzZWQgZm9yIG1hcHBpbmcgUEFDcyAtPiByb3cgIywgc2luY2UgdGhlcmUncyBubyB3YXkgb2ZcbiAgICAvLyBnZXR0aW5nIGl0IHRocm91Z2ggYml0IGxvZ2ljLlxuXG4gICAgdmFyIFJPV1MgPSBbMHgxMTAwLCAweDExMjAsIDB4MTIwMCwgMHgxMjIwLCAweDE1MDAsIDB4MTUyMCwgMHgxNjAwLCAweDE2MjAsIDB4MTcwMCwgMHgxNzIwLCAweDEwMDAsIDB4MTMwMCwgMHgxMzIwLCAweDE0MDAsIDB4MTQyMF07IC8vIENFQS02MDggY2FwdGlvbnMgYXJlIHJlbmRlcmVkIG9udG8gYSAzNHgxNSBtYXRyaXggb2YgY2hhcmFjdGVyXG4gICAgLy8gY2VsbHMuIFRoZSBcImJvdHRvbVwiIHJvdyBpcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBvdXRlciBhcnJheS5cblxuICAgIHZhciBjcmVhdGVEaXNwbGF5QnVmZmVyID0gZnVuY3Rpb24gY3JlYXRlRGlzcGxheUJ1ZmZlcigpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgICBpID0gQk9UVE9NX1JPVyArIDE7XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB2YXIgQ2VhNjA4U3RyZWFtID0gZnVuY3Rpb24gQ2VhNjA4U3RyZWFtKGZpZWxkLCBkYXRhQ2hhbm5lbCkge1xuICAgICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmZpZWxkXyA9IGZpZWxkIHx8IDA7XG4gICAgICB0aGlzLmRhdGFDaGFubmVsXyA9IGRhdGFDaGFubmVsIHx8IDA7XG4gICAgICB0aGlzLm5hbWVfID0gJ0NDJyArICgodGhpcy5maWVsZF8gPDwgMSB8IHRoaXMuZGF0YUNoYW5uZWxfKSArIDEpO1xuICAgICAgdGhpcy5zZXRDb25zdGFudHMoKTtcbiAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgdGhpcy5wdXNoID0gZnVuY3Rpb24gKHBhY2tldCkge1xuICAgICAgICB2YXIgZGF0YSwgc3dhcCwgY2hhcjAsIGNoYXIxLCB0ZXh0OyAvLyByZW1vdmUgdGhlIHBhcml0eSBiaXRzXG5cbiAgICAgICAgZGF0YSA9IHBhY2tldC5jY0RhdGEgJiAweDdmN2Y7IC8vIGlnbm9yZSBkdXBsaWNhdGUgY29udHJvbCBjb2RlczsgdGhlIHNwZWMgZGVtYW5kcyB0aGV5J3JlIHNlbnQgdHdpY2VcblxuICAgICAgICBpZiAoZGF0YSA9PT0gdGhpcy5sYXN0Q29udHJvbENvZGVfKSB7XG4gICAgICAgICAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gbnVsbDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgY29udHJvbCBjb2Rlc1xuXG5cbiAgICAgICAgaWYgKChkYXRhICYgMHhmMDAwKSA9PT0gMHgxMDAwKSB7XG4gICAgICAgICAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhICE9PSB0aGlzLlBBRERJTkdfKSB7XG4gICAgICAgICAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXIwID0gZGF0YSA+Pj4gODtcbiAgICAgICAgY2hhcjEgPSBkYXRhICYgMHhmZjtcblxuICAgICAgICBpZiAoZGF0YSA9PT0gdGhpcy5QQURESU5HXykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSB0aGlzLlJFU1VNRV9DQVBUSU9OX0xPQURJTkdfKSB7XG4gICAgICAgICAgdGhpcy5tb2RlXyA9ICdwb3BPbic7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5FTkRfT0ZfQ0FQVElPTl8pIHtcbiAgICAgICAgICAvLyBJZiBhbiBFT0MgaXMgcmVjZWl2ZWQgd2hpbGUgaW4gcGFpbnQtb24gbW9kZSwgdGhlIGRpc3BsYXllZCBjYXB0aW9uXG4gICAgICAgICAgLy8gdGV4dCBzaG91bGQgYmUgc3dhcHBlZCB0byBub24tZGlzcGxheWVkIG1lbW9yeSBhcyBpZiBpdCB3YXMgYSBwb3Atb25cbiAgICAgICAgICAvLyBjYXB0aW9uLiBCZWNhdXNlIG9mIHRoYXQsIHdlIHNob3VsZCBleHBsaWNpdGx5IHN3aXRjaCBiYWNrIHRvIHBvcC1vblxuICAgICAgICAgIC8vIG1vZGVcbiAgICAgICAgICB0aGlzLm1vZGVfID0gJ3BvcE9uJztcbiAgICAgICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZyhwYWNrZXQucHRzKTsgLy8gaWYgYSBjYXB0aW9uIHdhcyBiZWluZyBkaXNwbGF5ZWQsIGl0J3MgZ29uZSBub3dcblxuICAgICAgICAgIHRoaXMuZmx1c2hEaXNwbGF5ZWQocGFja2V0LnB0cyk7IC8vIGZsaXAgbWVtb3J5XG5cbiAgICAgICAgICBzd2FwID0gdGhpcy5kaXNwbGF5ZWRfO1xuICAgICAgICAgIHRoaXMuZGlzcGxheWVkXyA9IHRoaXMubm9uRGlzcGxheWVkXztcbiAgICAgICAgICB0aGlzLm5vbkRpc3BsYXllZF8gPSBzd2FwOyAvLyBzdGFydCBtZWFzdXJpbmcgdGhlIHRpbWUgdG8gZGlzcGxheSB0aGUgY2FwdGlvblxuXG4gICAgICAgICAgdGhpcy5zdGFydFB0c18gPSBwYWNrZXQucHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuUk9MTF9VUF8yX1JPV1NfKSB7XG4gICAgICAgICAgdGhpcy5yb2xsVXBSb3dzXyA9IDI7XG4gICAgICAgICAgdGhpcy5zZXRSb2xsVXAocGFja2V0LnB0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5ST0xMX1VQXzNfUk9XU18pIHtcbiAgICAgICAgICB0aGlzLnJvbGxVcFJvd3NfID0gMztcbiAgICAgICAgICB0aGlzLnNldFJvbGxVcChwYWNrZXQucHRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09PSB0aGlzLlJPTExfVVBfNF9ST1dTXykge1xuICAgICAgICAgIHRoaXMucm9sbFVwUm93c18gPSA0O1xuICAgICAgICAgIHRoaXMuc2V0Um9sbFVwKHBhY2tldC5wdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuQ0FSUklBR0VfUkVUVVJOXykge1xuICAgICAgICAgIHRoaXMuY2xlYXJGb3JtYXR0aW5nKHBhY2tldC5wdHMpO1xuICAgICAgICAgIHRoaXMuZmx1c2hEaXNwbGF5ZWQocGFja2V0LnB0cyk7XG4gICAgICAgICAgdGhpcy5zaGlmdFJvd3NVcF8oKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UHRzXyA9IHBhY2tldC5wdHM7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5CQUNLU1BBQ0VfKSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZV8gPT09ICdwb3BPbicpIHtcbiAgICAgICAgICAgIHRoaXMubm9uRGlzcGxheWVkX1t0aGlzLnJvd19dID0gdGhpcy5ub25EaXNwbGF5ZWRfW3RoaXMucm93X10uc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gdGhpcy5FUkFTRV9ESVNQTEFZRURfTUVNT1JZXykge1xuICAgICAgICAgIHRoaXMuZmx1c2hEaXNwbGF5ZWQocGFja2V0LnB0cyk7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuRVJBU0VfTk9OX0RJU1BMQVlFRF9NRU1PUllfKSB7XG4gICAgICAgICAgdGhpcy5ub25EaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IHRoaXMuUkVTVU1FX0RJUkVDVF9DQVBUSU9OSU5HXykge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGVfICE9PSAncGFpbnRPbicpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBwcm9wZXIgY2FwdGlvbiBwb3NpdGlvbmluZyBpc1xuICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWRcbiAgICAgICAgICAgIHRoaXMuZmx1c2hEaXNwbGF5ZWQocGFja2V0LnB0cyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZF8gPSBjcmVhdGVEaXNwbGF5QnVmZmVyKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tb2RlXyA9ICdwYWludE9uJztcbiAgICAgICAgICB0aGlzLnN0YXJ0UHRzXyA9IHBhY2tldC5wdHM7IC8vIEFwcGVuZCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gY2FwdGlvbiB0ZXh0XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NwZWNpYWxDaGFyYWN0ZXIoY2hhcjAsIGNoYXIxKSkge1xuICAgICAgICAgIC8vIEJpdG1hc2sgY2hhcjAgc28gdGhhdCB3ZSBjYW4gYXBwbHkgY2hhcmFjdGVyIHRyYW5zZm9ybWF0aW9uc1xuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgZmllbGQgYW5kIGRhdGEgY2hhbm5lbC5cbiAgICAgICAgICAvLyBUaGVuIGJ5dGUtc2hpZnQgdG8gdGhlIGxlZnQgYW5kIE9SIHdpdGggY2hhcjEgc28gd2UgY2FuIHBhc3MgdGhlXG4gICAgICAgICAgLy8gZW50aXJlIGNoYXJhY3RlciBjb2RlIHRvIGBnZXRDaGFyRnJvbUNvZGVgLlxuICAgICAgICAgIGNoYXIwID0gKGNoYXIwICYgMHgwMykgPDwgODtcbiAgICAgICAgICB0ZXh0ID0gZ2V0Q2hhckZyb21Db2RlKGNoYXIwIHwgY2hhcjEpO1xuICAgICAgICAgIHRoaXNbdGhpcy5tb2RlX10ocGFja2V0LnB0cywgdGV4dCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5fKys7IC8vIEFwcGVuZCBleHRlbmRlZCBjaGFyYWN0ZXJzIHRvIGNhcHRpb24gdGV4dFxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHRDaGFyYWN0ZXIoY2hhcjAsIGNoYXIxKSkge1xuICAgICAgICAgIC8vIEV4dGVuZGVkIGNoYXJhY3RlcnMgYWx3YXlzIGZvbGxvdyB0aGVpciBcIm5vbi1leHRlbmRlZFwiIGVxdWl2YWxlbnRzLlxuICAgICAgICAgIC8vIElFIGlmIGEgXCLDqFwiIGlzIGRlc2lyZWQsIHlvdSdsbCBhbHdheXMgcmVjZWl2ZSBcImXDqFwiOyBub24tY29tcGxpYW50XG4gICAgICAgICAgLy8gZGVjb2RlcnMgYXJlIHN1cHBvc2VkIHRvIGRyb3AgdGhlIFwiw6hcIiwgd2hpbGUgY29tcGxpYW50IGRlY29kZXJzXG4gICAgICAgICAgLy8gYmFja3NwYWNlIHRoZSBcImVcIiBhbmQgaW5zZXJ0IFwiw6hcIi5cbiAgICAgICAgICAvLyBEZWxldGUgdGhlIHByZXZpb3VzIGNoYXJhY3RlclxuICAgICAgICAgIGlmICh0aGlzLm1vZGVfID09PSAncG9wT24nKSB7XG4gICAgICAgICAgICB0aGlzLm5vbkRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IHRoaXMubm9uRGlzcGxheWVkX1t0aGlzLnJvd19dLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X10gPSB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXS5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgfSAvLyBCaXRtYXNrIGNoYXIwIHNvIHRoYXQgd2UgY2FuIGFwcGx5IGNoYXJhY3RlciB0cmFuc2Zvcm1hdGlvbnNcbiAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGZpZWxkIGFuZCBkYXRhIGNoYW5uZWwuXG4gICAgICAgICAgLy8gVGhlbiBieXRlLXNoaWZ0IHRvIHRoZSBsZWZ0IGFuZCBPUiB3aXRoIGNoYXIxIHNvIHdlIGNhbiBwYXNzIHRoZVxuICAgICAgICAgIC8vIGVudGlyZSBjaGFyYWN0ZXIgY29kZSB0byBgZ2V0Q2hhckZyb21Db2RlYC5cblxuXG4gICAgICAgICAgY2hhcjAgPSAoY2hhcjAgJiAweDAzKSA8PCA4O1xuICAgICAgICAgIHRleHQgPSBnZXRDaGFyRnJvbUNvZGUoY2hhcjAgfCBjaGFyMSk7XG4gICAgICAgICAgdGhpc1t0aGlzLm1vZGVfXShwYWNrZXQucHRzLCB0ZXh0KTtcbiAgICAgICAgICB0aGlzLmNvbHVtbl8rKzsgLy8gUHJvY2VzcyBtaWQtcm93IGNvZGVzXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc01pZFJvd0NvZGUoY2hhcjAsIGNoYXIxKSkge1xuICAgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIG5vdCBhZGRpdGl2ZSwgc28gY2xlYXIgYWxsIGZvcm1hdHRpbmdcbiAgICAgICAgICB0aGlzLmNsZWFyRm9ybWF0dGluZyhwYWNrZXQucHRzKTsgLy8gQWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCwgbWlkLXJvdyBjb2Rlc1xuICAgICAgICAgIC8vIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHNwYWNlcywgc28gYWRkIG9uZSBub3dcblxuICAgICAgICAgIHRoaXNbdGhpcy5tb2RlX10ocGFja2V0LnB0cywgJyAnKTtcbiAgICAgICAgICB0aGlzLmNvbHVtbl8rKztcblxuICAgICAgICAgIGlmICgoY2hhcjEgJiAweGUpID09PSAweGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybWF0dGluZyhwYWNrZXQucHRzLCBbJ2knXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChjaGFyMSAmIDB4MSkgPT09IDB4MSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGb3JtYXR0aW5nKHBhY2tldC5wdHMsIFsndSddKTtcbiAgICAgICAgICB9IC8vIERldGVjdCBvZmZzZXQgY29udHJvbCBjb2RlcyBhbmQgYWRqdXN0IGN1cnNvclxuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc09mZnNldENvbnRyb2xDb2RlKGNoYXIwLCBjaGFyMSkpIHtcbiAgICAgICAgICAvLyBDdXJzb3IgcG9zaXRpb24gaXMgc2V0IGJ5IGluZGVudCBQQUMgKHNlZSBiZWxvdykgaW4gNC1jb2x1bW5cbiAgICAgICAgICAvLyBpbmNyZW1lbnRzLCB3aXRoIGFuIGFkZGl0aW9uYWwgb2Zmc2V0IGNvZGUgb2YgMS0zIHRvIHJlYWNoIGFueVxuICAgICAgICAgIC8vIG9mIHRoZSAzMiBjb2x1bW5zIHNwZWNpZmllZCBieSBDRUEtNjA4LiBTbyBhbGwgd2UgbmVlZCB0byBkb1xuICAgICAgICAgIC8vIGhlcmUgaXMgaW5jcmVtZW50IHRoZSBjb2x1bW4gY3Vyc29yIGJ5IHRoZSBnaXZlbiBvZmZzZXQuXG4gICAgICAgICAgdGhpcy5jb2x1bW5fICs9IGNoYXIxICYgMHgwMzsgLy8gRGV0ZWN0IFBBQ3MgKFByZWFtYmxlIEFkZHJlc3MgQ29kZXMpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1BBQyhjaGFyMCwgY2hhcjEpKSB7XG4gICAgICAgICAgLy8gVGhlcmUncyBubyBsb2dpYyBmb3IgUEFDIC0+IHJvdyBtYXBwaW5nLCBzbyB3ZSBoYXZlIHRvIGp1c3RcbiAgICAgICAgICAvLyBmaW5kIHRoZSByb3cgY29kZSBpbiBhbiBhcnJheSBhbmQgdXNlIGl0cyBpbmRleCA6KFxuICAgICAgICAgIHZhciByb3cgPSBST1dTLmluZGV4T2YoZGF0YSAmIDB4MWYyMCk7IC8vIENvbmZpZ3VyZSB0aGUgY2FwdGlvbiB3aW5kb3cgaWYgd2UncmUgaW4gcm9sbC11cCBtb2RlXG5cbiAgICAgICAgICBpZiAodGhpcy5tb2RlXyA9PT0gJ3JvbGxVcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBiYXNlIHJvdyBpcyBpbmNvcnJlY3RseSBzZXQuXG4gICAgICAgICAgICAvLyBBcyBwZXIgdGhlIHJlY29tbWVuZGF0aW9uIGluIENFQS02MDgoQmFzZSBSb3cgSW1wbGVtZW50YXRpb24pLCBkZWZlciB0byB0aGUgbnVtYmVyXG4gICAgICAgICAgICAvLyBvZiByb2xsLXVwIHJvd3Mgc2V0LlxuICAgICAgICAgICAgaWYgKHJvdyAtIHRoaXMucm9sbFVwUm93c18gKyAxIDwgMCkge1xuICAgICAgICAgICAgICByb3cgPSB0aGlzLnJvbGxVcFJvd3NfIC0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSb2xsVXAocGFja2V0LnB0cywgcm93KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93ICE9PSB0aGlzLnJvd18pIHtcbiAgICAgICAgICAgIC8vIGZvcm1hdHRpbmcgaXMgb25seSBwZXJzaXN0ZW50IGZvciBjdXJyZW50IHJvd1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm1hdHRpbmcocGFja2V0LnB0cyk7XG4gICAgICAgICAgICB0aGlzLnJvd18gPSByb3c7XG4gICAgICAgICAgfSAvLyBBbGwgUEFDcyBjYW4gYXBwbHkgdW5kZXJsaW5lLCBzbyBkZXRlY3QgYW5kIGFwcGx5XG4gICAgICAgICAgLy8gKEFsbCBvZGQtbnVtYmVyZWQgc2Vjb25kIGJ5dGVzIHNldCB1bmRlcmxpbmUpXG5cblxuICAgICAgICAgIGlmIChjaGFyMSAmIDB4MSAmJiB0aGlzLmZvcm1hdHRpbmdfLmluZGV4T2YoJ3UnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybWF0dGluZyhwYWNrZXQucHRzLCBbJ3UnXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChkYXRhICYgMHgxMCkgPT09IDB4MTApIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGdvdCBhbiBpbmRlbnQgbGV2ZWwgY29kZS4gRWFjaCBzdWNjZXNzaXZlIGV2ZW4gbnVtYmVyXG4gICAgICAgICAgICAvLyBpbmNyZW1lbnRzIHRoZSBjb2x1bW4gY3Vyc29yIGJ5IDQsIHNvIHdlIGNhbiBnZXQgdGhlIGRlc2lyZWRcbiAgICAgICAgICAgIC8vIGNvbHVtbiBwb3NpdGlvbiBieSBiaXQtc2hpZnRpbmcgdG8gdGhlIHJpZ2h0ICh0byBnZXQgbi8yKVxuICAgICAgICAgICAgLy8gYW5kIG11bHRpcGx5aW5nIGJ5IDQuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbl8gPSAoKGRhdGEgJiAweGUpID4+IDEpICogNDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5pc0NvbG9yUEFDKGNoYXIxKSkge1xuICAgICAgICAgICAgLy8gaXQncyBhIGNvbG9yIGNvZGUsIHRob3VnaCB3ZSBvbmx5IHN1cHBvcnQgd2hpdGUsIHdoaWNoXG4gICAgICAgICAgICAvLyBjYW4gYmUgZWl0aGVyIG5vcm1hbCBvciBpdGFsaWNpemVkLiB3aGl0ZSBpdGFsaWNzIGNhbiBiZVxuICAgICAgICAgICAgLy8gZWl0aGVyIDB4NGUgb3IgMHg2ZSBkZXBlbmRpbmcgb24gdGhlIHJvdywgc28gd2UganVzdFxuICAgICAgICAgICAgLy8gYml0d2lzZS1hbmQgd2l0aCAweGUgdG8gc2VlIGlmIGl0YWxpY3Mgc2hvdWxkIGJlIHR1cm5lZCBvblxuICAgICAgICAgICAgaWYgKChjaGFyMSAmIDB4ZSkgPT09IDB4ZSkge1xuICAgICAgICAgICAgICB0aGlzLmFkZEZvcm1hdHRpbmcocGFja2V0LnB0cywgWydpJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgaGF2ZSBhIG5vcm1hbCBjaGFyYWN0ZXIgaW4gY2hhcjAsIGFuZCBwb3NzaWJseSBvbmUgaW4gY2hhcjFcblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOb3JtYWxDaGFyKGNoYXIwKSkge1xuICAgICAgICAgIGlmIChjaGFyMSA9PT0gMHgwMCkge1xuICAgICAgICAgICAgY2hhcjEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRleHQgPSBnZXRDaGFyRnJvbUNvZGUoY2hhcjApO1xuICAgICAgICAgIHRleHQgKz0gZ2V0Q2hhckZyb21Db2RlKGNoYXIxKTtcbiAgICAgICAgICB0aGlzW3RoaXMubW9kZV9dKHBhY2tldC5wdHMsIHRleHQpO1xuICAgICAgICAgIHRoaXMuY29sdW1uXyArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgfSAvLyBmaW5pc2ggZGF0YSBwcm9jZXNzaW5nXG5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7IC8vIFRyaWdnZXIgYSBjdWUgcG9pbnQgdGhhdCBjYXB0dXJlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVcbiAgICAvLyBkaXNwbGF5IGJ1ZmZlclxuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5mbHVzaERpc3BsYXllZCA9IGZ1bmN0aW9uIChwdHMpIHtcbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5kaXNwbGF5ZWRfIC8vIHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3RyaW5nXG4gICAgICAubWFwKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcm93LnRyaW0oKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIE9yZGluYXJpbHksIHRoaXMgc2hvdWxkbid0IGhhcHBlbi4gSG93ZXZlciwgY2FwdGlvblxuICAgICAgICAgIC8vIHBhcnNpbmcgZXJyb3JzIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9ucyBhbmRcbiAgICAgICAgICAvLyBicmVhayBwbGF5YmFjay5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NraXBwaW5nIG1hbGZvcm1lZCBjYXB0aW9uLicpO1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSkgLy8gY29tYmluZSBhbGwgdGV4dCByb3dzIHRvIGRpc3BsYXkgaW4gb25lIGN1ZVxuICAgICAgLmpvaW4oJ1xcbicpIC8vIGFuZCByZW1vdmUgYmxhbmsgcm93cyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kLCBidXQgbm90IHRoZSBtaWRkbGVcbiAgICAgIC5yZXBsYWNlKC9eXFxuK3xcXG4rJC9nLCAnJyk7XG5cbiAgICAgIGlmIChjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCB7XG4gICAgICAgICAgc3RhcnRQdHM6IHRoaXMuc3RhcnRQdHNfLFxuICAgICAgICAgIGVuZFB0czogcHRzLFxuICAgICAgICAgIHRleHQ6IGNvbnRlbnQsXG4gICAgICAgICAgc3RyZWFtOiB0aGlzLm5hbWVfXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogWmVybyBvdXQgdGhlIGRhdGEsIHVzZWQgZm9yIHN0YXJ0dXAgYW5kIG9uIHNlZWtcbiAgICAgKi9cblxuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMubW9kZV8gPSAncG9wT24nOyAvLyBXaGVuIGluIHJvbGwtdXAgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJvdyB0aGF0IHdpbGxcbiAgICAgIC8vIGFjdHVhbGx5IGRpc3BsYXkgY2FwdGlvbnMuIElmIGEgY2FwdGlvbiBpcyBzaGlmdGVkIHRvIGEgcm93XG4gICAgICAvLyB3aXRoIGEgbG93ZXIgaW5kZXggdGhhbiB0aGlzLCBpdCBpcyBjbGVhcmVkIGZyb20gdGhlIGRpc3BsYXlcbiAgICAgIC8vIGJ1ZmZlclxuXG4gICAgICB0aGlzLnRvcFJvd18gPSAwO1xuICAgICAgdGhpcy5zdGFydFB0c18gPSAwO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgICAgdGhpcy5ub25EaXNwbGF5ZWRfID0gY3JlYXRlRGlzcGxheUJ1ZmZlcigpO1xuICAgICAgdGhpcy5sYXN0Q29udHJvbENvZGVfID0gbnVsbDsgLy8gVHJhY2sgcm93IGFuZCBjb2x1bW4gZm9yIHByb3BlciBsaW5lLWJyZWFraW5nIGFuZCBzcGFjaW5nXG5cbiAgICAgIHRoaXMuY29sdW1uXyA9IDA7XG4gICAgICB0aGlzLnJvd18gPSBCT1RUT01fUk9XO1xuICAgICAgdGhpcy5yb2xsVXBSb3dzXyA9IDI7IC8vIFRoaXMgdmFyaWFibGUgaG9sZHMgY3VycmVudGx5LWFwcGxpZWQgZm9ybWF0dGluZ1xuXG4gICAgICB0aGlzLmZvcm1hdHRpbmdfID0gW107XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGNvbnRyb2wgY29kZSBhbmQgcmVsYXRlZCBjb25zdGFudHMgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cblxuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5zZXRDb25zdGFudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgaGF2ZSB0aGVzZSB1c2VzOlxuICAgICAgLy8gZXh0XyA6ICAgIGNoYXIwIGZvciBtaWQtcm93IGNvZGVzLCBhbmQgdGhlIGJhc2UgZm9yIGV4dGVuZGVkXG4gICAgICAvLyAgICAgICAgICAgY2hhcnMgKGV4dF8rMCwgZXh0XysxLCBhbmQgZXh0XysyIGFyZSBjaGFyMHMgZm9yXG4gICAgICAvLyAgICAgICAgICAgZXh0ZW5kZWQgY29kZXMpXG4gICAgICAvLyBjb250cm9sXzogY2hhcjAgZm9yIGNvbnRyb2wgY29kZXMsIGV4Y2VwdCBieXRlLXNoaWZ0ZWQgdG8gdGhlXG4gICAgICAvLyAgICAgICAgICAgbGVmdCBzbyB0aGF0IHdlIGNhbiBkbyB0aGlzLmNvbnRyb2xfIHwgQ09OVFJPTF9DT0RFXG4gICAgICAvLyBvZmZzZXRfOiAgY2hhcjAgZm9yIHRhYiBvZmZzZXQgY29kZXNcbiAgICAgIC8vXG4gICAgICAvLyBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgY29udHJvbCBjb2RlcywgYW5kIF9vbmx5XyBjb250cm9sIGNvZGVzLFxuICAgICAgLy8gZGlmZmVyIGJldHdlZW4gZmllbGQgMSBhbmQgZmllbGQyLiBGaWVsZCAyIGNvbnRyb2wgY29kZXMgYXJlIGFsd2F5c1xuICAgICAgLy8gdGhlaXIgZmllbGQgMSB2YWx1ZSBwbHVzIDEuIFRoYXQncyB3aHkgdGhlcmUncyB0aGUgXCJ8IGZpZWxkXCIgb24gdGhlXG4gICAgICAvLyBjb250cm9sIHZhbHVlLlxuICAgICAgaWYgKHRoaXMuZGF0YUNoYW5uZWxfID09PSAwKSB7XG4gICAgICAgIHRoaXMuQkFTRV8gPSAweDEwO1xuICAgICAgICB0aGlzLkVYVF8gPSAweDExO1xuICAgICAgICB0aGlzLkNPTlRST0xfID0gKDB4MTQgfCB0aGlzLmZpZWxkXykgPDwgODtcbiAgICAgICAgdGhpcy5PRkZTRVRfID0gMHgxNztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhQ2hhbm5lbF8gPT09IDEpIHtcbiAgICAgICAgdGhpcy5CQVNFXyA9IDB4MTg7XG4gICAgICAgIHRoaXMuRVhUXyA9IDB4MTk7XG4gICAgICAgIHRoaXMuQ09OVFJPTF8gPSAoMHgxYyB8IHRoaXMuZmllbGRfKSA8PCA4O1xuICAgICAgICB0aGlzLk9GRlNFVF8gPSAweDFmO1xuICAgICAgfSAvLyBDb25zdGFudHMgZm9yIHRoZSBMU0J5dGUgY29tbWFuZCBjb2RlcyByZWNvZ25pemVkIGJ5IENlYTYwOFN0cmVhbS4gVGhpc1xuICAgICAgLy8gbGlzdCBpcyBub3QgZXhoYXVzdGl2ZS4gRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3RpbmcgYW5kIHNlbWFudGljcyBzZWVcbiAgICAgIC8vIGh0dHA6Ly93d3cuZ3BvLmdvdi9mZHN5cy9wa2cvQ0ZSLTIwMTAtdGl0bGU0Ny12b2wxL3BkZi9DRlItMjAxMC10aXRsZTQ3LXZvbDEtc2VjMTUtMTE5LnBkZlxuICAgICAgLy8gUGFkZGluZ1xuXG5cbiAgICAgIHRoaXMuUEFERElOR18gPSAweDAwMDA7IC8vIFBvcC1vbiBNb2RlXG5cbiAgICAgIHRoaXMuUkVTVU1FX0NBUFRJT05fTE9BRElOR18gPSB0aGlzLkNPTlRST0xfIHwgMHgyMDtcbiAgICAgIHRoaXMuRU5EX09GX0NBUFRJT05fID0gdGhpcy5DT05UUk9MXyB8IDB4MmY7IC8vIFJvbGwtdXAgTW9kZVxuXG4gICAgICB0aGlzLlJPTExfVVBfMl9ST1dTXyA9IHRoaXMuQ09OVFJPTF8gfCAweDI1O1xuICAgICAgdGhpcy5ST0xMX1VQXzNfUk9XU18gPSB0aGlzLkNPTlRST0xfIHwgMHgyNjtcbiAgICAgIHRoaXMuUk9MTF9VUF80X1JPV1NfID0gdGhpcy5DT05UUk9MXyB8IDB4Mjc7XG4gICAgICB0aGlzLkNBUlJJQUdFX1JFVFVSTl8gPSB0aGlzLkNPTlRST0xfIHwgMHgyZDsgLy8gcGFpbnQtb24gbW9kZVxuXG4gICAgICB0aGlzLlJFU1VNRV9ESVJFQ1RfQ0FQVElPTklOR18gPSB0aGlzLkNPTlRST0xfIHwgMHgyOTsgLy8gRXJhc3VyZVxuXG4gICAgICB0aGlzLkJBQ0tTUEFDRV8gPSB0aGlzLkNPTlRST0xfIHwgMHgyMTtcbiAgICAgIHRoaXMuRVJBU0VfRElTUExBWUVEX01FTU9SWV8gPSB0aGlzLkNPTlRST0xfIHwgMHgyYztcbiAgICAgIHRoaXMuRVJBU0VfTk9OX0RJU1BMQVlFRF9NRU1PUllfID0gdGhpcy5DT05UUk9MXyB8IDB4MmU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXRlY3RzIGlmIHRoZSAyLWJ5dGUgcGFja2V0IGRhdGEgaXMgYSBzcGVjaWFsIGNoYXJhY3RlclxuICAgICAqXG4gICAgICogU3BlY2lhbCBjaGFyYWN0ZXJzIGhhdmUgYSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDNmLFxuICAgICAqIHdpdGggdGhlIGZpcnN0IGJ5dGUgYmVpbmcgMHgxMSAoZm9yIGRhdGEgY2hhbm5lbCAxKSBvciAweDE5IChmb3JcbiAgICAgKiBkYXRhIGNoYW5uZWwgMikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMCBUaGUgZmlyc3QgYnl0ZVxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIxIFRoZSBzZWNvbmQgYnl0ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIDIgYnl0ZXMgYXJlIGFuIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAgICovXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNTcGVjaWFsQ2hhcmFjdGVyID0gZnVuY3Rpb24gKGNoYXIwLCBjaGFyMSkge1xuICAgICAgcmV0dXJuIGNoYXIwID09PSB0aGlzLkVYVF8gJiYgY2hhcjEgPj0gMHgzMCAmJiBjaGFyMSA8PSAweDNmO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRGV0ZWN0cyBpZiB0aGUgMi1ieXRlIHBhY2tldCBkYXRhIGlzIGFuIGV4dGVuZGVkIGNoYXJhY3RlclxuICAgICAqXG4gICAgICogRXh0ZW5kZWQgY2hhcmFjdGVycyBoYXZlIGEgc2Vjb25kIGJ5dGUgaW4gdGhlIHJhbmdlIDB4MjAgdG8gMHgzZixcbiAgICAgKiB3aXRoIHRoZSBmaXJzdCBieXRlIGJlaW5nIDB4MTIgb3IgMHgxMyAoZm9yIGRhdGEgY2hhbm5lbCAxKSBvclxuICAgICAqIDB4MWEgb3IgMHgxYiAoZm9yIGRhdGEgY2hhbm5lbCAyKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIwIFRoZSBmaXJzdCBieXRlXG4gICAgICogQHBhcmFtICB7SW50ZWdlcn0gY2hhcjEgVGhlIHNlY29uZCBieXRlXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgV2hldGhlciB0aGUgMiBieXRlcyBhcmUgYW4gZXh0ZW5kZWQgY2hhcmFjdGVyXG4gICAgICovXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNFeHRDaGFyYWN0ZXIgPSBmdW5jdGlvbiAoY2hhcjAsIGNoYXIxKSB7XG4gICAgICByZXR1cm4gKGNoYXIwID09PSB0aGlzLkVYVF8gKyAxIHx8IGNoYXIwID09PSB0aGlzLkVYVF8gKyAyKSAmJiBjaGFyMSA+PSAweDIwICYmIGNoYXIxIDw9IDB4M2Y7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXRlY3RzIGlmIHRoZSAyLWJ5dGUgcGFja2V0IGlzIGEgbWlkLXJvdyBjb2RlXG4gICAgICpcbiAgICAgKiBNaWQtcm93IGNvZGVzIGhhdmUgYSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmFuZ2UgMHgyMCB0byAweDJmLCB3aXRoXG4gICAgICogdGhlIGZpcnN0IGJ5dGUgYmVpbmcgMHgxMSAoZm9yIGRhdGEgY2hhbm5lbCAxKSBvciAweDE5IChmb3IgZGF0YVxuICAgICAqIGNoYW5uZWwgMikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMCBUaGUgZmlyc3QgYnl0ZVxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIxIFRoZSBzZWNvbmQgYnl0ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIDIgYnl0ZXMgYXJlIGEgbWlkLXJvdyBjb2RlXG4gICAgICovXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNNaWRSb3dDb2RlID0gZnVuY3Rpb24gKGNoYXIwLCBjaGFyMSkge1xuICAgICAgcmV0dXJuIGNoYXIwID09PSB0aGlzLkVYVF8gJiYgY2hhcjEgPj0gMHgyMCAmJiBjaGFyMSA8PSAweDJmO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRGV0ZWN0cyBpZiB0aGUgMi1ieXRlIHBhY2tldCBpcyBhbiBvZmZzZXQgY29udHJvbCBjb2RlXG4gICAgICpcbiAgICAgKiBPZmZzZXQgY29udHJvbCBjb2RlcyBoYXZlIGEgc2Vjb25kIGJ5dGUgaW4gdGhlIHJhbmdlIDB4MjEgdG8gMHgyMyxcbiAgICAgKiB3aXRoIHRoZSBmaXJzdCBieXRlIGJlaW5nIDB4MTcgKGZvciBkYXRhIGNoYW5uZWwgMSkgb3IgMHgxZiAoZm9yXG4gICAgICogZGF0YSBjaGFubmVsIDIpLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7SW50ZWdlcn0gY2hhcjAgVGhlIGZpcnN0IGJ5dGVcbiAgICAgKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICBXaGV0aGVyIHRoZSAyIGJ5dGVzIGFyZSBhbiBvZmZzZXQgY29udHJvbCBjb2RlXG4gICAgICovXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuaXNPZmZzZXRDb250cm9sQ29kZSA9IGZ1bmN0aW9uIChjaGFyMCwgY2hhcjEpIHtcbiAgICAgIHJldHVybiBjaGFyMCA9PT0gdGhpcy5PRkZTRVRfICYmIGNoYXIxID49IDB4MjEgJiYgY2hhcjEgPD0gMHgyMztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERldGVjdHMgaWYgdGhlIDItYnl0ZSBwYWNrZXQgaXMgYSBQcmVhbWJsZSBBZGRyZXNzIENvZGVcbiAgICAgKlxuICAgICAqIFBBQ3MgaGF2ZSBhIGZpcnN0IGJ5dGUgaW4gdGhlIHJhbmdlIDB4MTAgdG8gMHgxNyAoZm9yIGRhdGEgY2hhbm5lbCAxKVxuICAgICAqIG9yIDB4MTggdG8gMHgxZiAoZm9yIGRhdGEgY2hhbm5lbCAyKSwgd2l0aCB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlXG4gICAgICogcmFuZ2UgMHg0MCB0byAweDdmLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7SW50ZWdlcn0gY2hhcjAgVGhlIGZpcnN0IGJ5dGVcbiAgICAgKiBAcGFyYW0gIHtJbnRlZ2VyfSBjaGFyMSBUaGUgc2Vjb25kIGJ5dGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICBXaGV0aGVyIHRoZSAyIGJ5dGVzIGFyZSBhIFBBQ1xuICAgICAqL1xuXG5cbiAgICBDZWE2MDhTdHJlYW0ucHJvdG90eXBlLmlzUEFDID0gZnVuY3Rpb24gKGNoYXIwLCBjaGFyMSkge1xuICAgICAgcmV0dXJuIGNoYXIwID49IHRoaXMuQkFTRV8gJiYgY2hhcjAgPCB0aGlzLkJBU0VfICsgOCAmJiBjaGFyMSA+PSAweDQwICYmIGNoYXIxIDw9IDB4N2Y7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXRlY3RzIGlmIGEgcGFja2V0J3Mgc2Vjb25kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIG9mIGEgUEFDIGNvbG9yIGNvZGVcbiAgICAgKlxuICAgICAqIFBBQyBjb2xvciBjb2RlcyBoYXZlIHRoZSBzZWNvbmQgYnl0ZSBiZSBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDRmLCBvclxuICAgICAqIDB4NjAgdG8gMHg2Zi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIxIFRoZSBzZWNvbmQgYnl0ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFdoZXRoZXIgdGhlIGJ5dGUgaXMgYSBjb2xvciBQQUNcbiAgICAgKi9cblxuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pc0NvbG9yUEFDID0gZnVuY3Rpb24gKGNoYXIxKSB7XG4gICAgICByZXR1cm4gY2hhcjEgPj0gMHg0MCAmJiBjaGFyMSA8PSAweDRmIHx8IGNoYXIxID49IDB4NjAgJiYgY2hhcjEgPD0gMHg3ZjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERldGVjdHMgaWYgYSBzaW5nbGUgYnl0ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgYSBub3JtYWwgY2hhcmFjdGVyXG4gICAgICpcbiAgICAgKiBOb3JtYWwgdGV4dCBieXRlcyBhcmUgaW4gdGhlIHJhbmdlIDB4MjAgdG8gMHg3Zi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IGNoYXIgIFRoZSBieXRlXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgV2hldGhlciB0aGUgYnl0ZSBpcyBhIG5vcm1hbCBjaGFyYWN0ZXJcbiAgICAgKi9cblxuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5pc05vcm1hbENoYXIgPSBmdW5jdGlvbiAoX2NoYXIpIHtcbiAgICAgIHJldHVybiBfY2hhciA+PSAweDIwICYmIF9jaGFyIDw9IDB4N2Y7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHJvbGwtdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0ludGVnZXJ9IHB0cyAgICAgICAgIEN1cnJlbnQgUFRTXG4gICAgICogQHBhcmFtICB7SW50ZWdlcn0gbmV3QmFzZVJvdyAgVXNlZCBieSBQQUNzIHRvIHNsaWRlIHRoZSBjdXJyZW50IHdpbmRvdyB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbmV3IHBvc2l0aW9uXG4gICAgICovXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuc2V0Um9sbFVwID0gZnVuY3Rpb24gKHB0cywgbmV3QmFzZVJvdykge1xuICAgICAgLy8gUmVzZXQgdGhlIGJhc2Ugcm93IHRvIHRoZSBib3R0b20gcm93IHdoZW4gc3dpdGNoaW5nIG1vZGVzXG4gICAgICBpZiAodGhpcy5tb2RlXyAhPT0gJ3JvbGxVcCcpIHtcbiAgICAgICAgdGhpcy5yb3dfID0gQk9UVE9NX1JPVztcbiAgICAgICAgdGhpcy5tb2RlXyA9ICdyb2xsVXAnOyAvLyBTcGVjIHNheXMgdG8gd2lwZSBtZW1vcmllcyB3aGVuIHN3aXRjaGluZyB0byByb2xsLXVwXG5cbiAgICAgICAgdGhpcy5mbHVzaERpc3BsYXllZChwdHMpO1xuICAgICAgICB0aGlzLm5vbkRpc3BsYXllZF8gPSBjcmVhdGVEaXNwbGF5QnVmZmVyKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkXyA9IGNyZWF0ZURpc3BsYXlCdWZmZXIoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0Jhc2VSb3cgIT09IHVuZGVmaW5lZCAmJiBuZXdCYXNlUm93ICE9PSB0aGlzLnJvd18pIHtcbiAgICAgICAgLy8gbW92ZSBjdXJyZW50bHkgZGlzcGxheWVkIGNhcHRpb25zICh1cCBvciBkb3duKSB0byB0aGUgbmV3IGJhc2Ugcm93XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb2xsVXBSb3dzXzsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRfW25ld0Jhc2VSb3cgLSBpXSA9IHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd18gLSBpXTtcbiAgICAgICAgICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfIC0gaV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmV3QmFzZVJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld0Jhc2VSb3cgPSB0aGlzLnJvd187XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9wUm93XyA9IG5ld0Jhc2VSb3cgLSB0aGlzLnJvbGxVcFJvd3NfICsgMTtcbiAgICB9OyAvLyBBZGRzIHRoZSBvcGVuaW5nIEhUTUwgdGFnIGZvciB0aGUgcGFzc2VkIGNoYXJhY3RlciB0byB0aGUgY2FwdGlvbiB0ZXh0LFxuICAgIC8vIGFuZCBrZWVwcyB0cmFjayBvZiBpdCBmb3IgbGF0ZXIgY2xvc2luZ1xuXG5cbiAgICBDZWE2MDhTdHJlYW0ucHJvdG90eXBlLmFkZEZvcm1hdHRpbmcgPSBmdW5jdGlvbiAocHRzLCBmb3JtYXQpIHtcbiAgICAgIHRoaXMuZm9ybWF0dGluZ18gPSB0aGlzLmZvcm1hdHRpbmdfLmNvbmNhdChmb3JtYXQpO1xuICAgICAgdmFyIHRleHQgPSBmb3JtYXQucmVkdWNlKGZ1bmN0aW9uICh0ZXh0LCBmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgKyAnPCcgKyBmb3JtYXQgKyAnPic7XG4gICAgICB9LCAnJyk7XG4gICAgICB0aGlzW3RoaXMubW9kZV9dKHB0cywgdGV4dCk7XG4gICAgfTsgLy8gQWRkcyBIVE1MIGNsb3NpbmcgdGFncyBmb3IgY3VycmVudCBmb3JtYXR0aW5nIHRvIGNhcHRpb24gdGV4dCBhbmRcbiAgICAvLyBjbGVhcnMgcmVtZW1iZXJlZCBmb3JtYXR0aW5nXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUuY2xlYXJGb3JtYXR0aW5nID0gZnVuY3Rpb24gKHB0cykge1xuICAgICAgaWYgKCF0aGlzLmZvcm1hdHRpbmdfLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0ZXh0ID0gdGhpcy5mb3JtYXR0aW5nXy5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uICh0ZXh0LCBmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgKyAnPC8nICsgZm9ybWF0ICsgJz4nO1xuICAgICAgfSwgJycpO1xuICAgICAgdGhpcy5mb3JtYXR0aW5nXyA9IFtdO1xuICAgICAgdGhpc1t0aGlzLm1vZGVfXShwdHMsIHRleHQpO1xuICAgIH07IC8vIE1vZGUgSW1wbGVtZW50YXRpb25zXG5cblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUucG9wT24gPSBmdW5jdGlvbiAocHRzLCB0ZXh0KSB7XG4gICAgICB2YXIgYmFzZVJvdyA9IHRoaXMubm9uRGlzcGxheWVkX1t0aGlzLnJvd19dOyAvLyBidWZmZXIgY2hhcmFjdGVyc1xuXG4gICAgICBiYXNlUm93ICs9IHRleHQ7XG4gICAgICB0aGlzLm5vbkRpc3BsYXllZF9bdGhpcy5yb3dfXSA9IGJhc2VSb3c7XG4gICAgfTtcblxuICAgIENlYTYwOFN0cmVhbS5wcm90b3R5cGUucm9sbFVwID0gZnVuY3Rpb24gKHB0cywgdGV4dCkge1xuICAgICAgdmFyIGJhc2VSb3cgPSB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXTtcbiAgICAgIGJhc2VSb3cgKz0gdGV4dDtcbiAgICAgIHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dID0gYmFzZVJvdztcbiAgICB9O1xuXG4gICAgQ2VhNjA4U3RyZWFtLnByb3RvdHlwZS5zaGlmdFJvd3NVcF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaTsgLy8gY2xlYXIgb3V0IGluYWN0aXZlIHJvd3NcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudG9wUm93XzsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkX1tpXSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSB0aGlzLnJvd18gKyAxOyBpIDwgQk9UVE9NX1JPVyArIDE7IGkrKykge1xuICAgICAgICB0aGlzLmRpc3BsYXllZF9baV0gPSAnJztcbiAgICAgIH0gLy8gc2hpZnQgZGlzcGxheWVkIHJvd3MgdXBcblxuXG4gICAgICBmb3IgKGkgPSB0aGlzLnRvcFJvd187IGkgPCB0aGlzLnJvd187IGkrKykge1xuICAgICAgICB0aGlzLmRpc3BsYXllZF9baV0gPSB0aGlzLmRpc3BsYXllZF9baSArIDFdO1xuICAgICAgfSAvLyBjbGVhciBvdXQgdGhlIGJvdHRvbSByb3dcblxuXG4gICAgICB0aGlzLmRpc3BsYXllZF9bdGhpcy5yb3dfXSA9ICcnO1xuICAgIH07XG5cbiAgICBDZWE2MDhTdHJlYW0ucHJvdG90eXBlLnBhaW50T24gPSBmdW5jdGlvbiAocHRzLCB0ZXh0KSB7XG4gICAgICB2YXIgYmFzZVJvdyA9IHRoaXMuZGlzcGxheWVkX1t0aGlzLnJvd19dO1xuICAgICAgYmFzZVJvdyArPSB0ZXh0O1xuICAgICAgdGhpcy5kaXNwbGF5ZWRfW3RoaXMucm93X10gPSBiYXNlUm93O1xuICAgIH07IC8vIGV4cG9ydHNcblxuXG4gICAgdmFyIGNhcHRpb25TdHJlYW0gPSB7XG4gICAgICBDYXB0aW9uU3RyZWFtOiBDYXB0aW9uU3RyZWFtLFxuICAgICAgQ2VhNjA4U3RyZWFtOiBDZWE2MDhTdHJlYW1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIG11eC5qc1xuICAgICAqXG4gICAgICogQ29weXJpZ2h0IChjKSBCcmlnaHRjb3ZlXG4gICAgICogTGljZW5zZWQgQXBhY2hlLTIuMCBodHRwczovL2dpdGh1Yi5jb20vdmlkZW9qcy9tdXguanMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICAgICAqL1xuXG4gICAgdmFyIHN0cmVhbVR5cGVzID0ge1xuICAgICAgSDI2NF9TVFJFQU1fVFlQRTogMHgxQixcbiAgICAgIEFEVFNfU1RSRUFNX1RZUEU6IDB4MEYsXG4gICAgICBNRVRBREFUQV9TVFJFQU1fVFlQRTogMHgxNVxuICAgIH07XG4gICAgdmFyIE1BWF9UUyA9IDg1ODk5MzQ1OTI7XG4gICAgdmFyIFJPX1RIUkVTSCA9IDQyOTQ5NjcyOTY7XG4gICAgdmFyIFRZUEVfU0hBUkVEID0gJ3NoYXJlZCc7XG5cbiAgICB2YXIgaGFuZGxlUm9sbG92ZXIgPSBmdW5jdGlvbiBoYW5kbGVSb2xsb3Zlcih2YWx1ZSwgcmVmZXJlbmNlKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gMTtcblxuICAgICAgaWYgKHZhbHVlID4gcmVmZXJlbmNlKSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHRpbWVzdGFtcCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3VyIHJlZmVyZW5jZSB0aW1lc3RhbXAgYW5kIHdlIGRldGVjdCBhXG4gICAgICAgIC8vIHRpbWVzdGFtcCByb2xsb3ZlciwgdGhpcyBtZWFucyB0aGUgcm9sbCBvdmVyIGlzIGhhcHBlbmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLlxuICAgICAgICAvLyBFeGFtcGxlIHNjZW5hcmlvOiBFbnRlciBhIGxvbmcgc3RyZWFtL3ZpZGVvIGp1c3QgYWZ0ZXIgYSByb2xsb3ZlciBvY2N1cnJlZC4gVGhlIHJlZmVyZW5jZVxuICAgICAgICAvLyBwb2ludCB3aWxsIGJlIHNldCB0byBhIHNtYWxsIG51bWJlciwgZS5nLiAxLiBUaGUgdXNlciB0aGVuIHNlZWtzIGJhY2t3YXJkcyBvdmVyIHRoZVxuICAgICAgICAvLyByb2xsb3ZlciBwb2ludC4gSW4gbG9hZGluZyB0aGlzIHNlZ21lbnQsIHRoZSB0aW1lc3RhbXAgdmFsdWVzIHdpbGwgYmUgdmVyeSBsYXJnZSxcbiAgICAgICAgLy8gZS5nLiAyXjMzIC0gMS4gU2luY2UgdGhpcyBjb21lcyBiZWZvcmUgdGhlIGRhdGEgd2UgbG9hZGVkIHByZXZpb3VzbHksIHdlIHdhbnQgdG8gYWRqdXN0XG4gICAgICAgIC8vIHRoZSB0aW1lIHN0YW1wIHRvIGJlIGB2YWx1ZSAtIDJeMzNgLlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgIH0gLy8gTm90ZTogQSBzZWVrIGZvcndhcmRzIG9yIGJhY2sgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhlIFJPX1RIUkVTSCAoMl4zMiwgfjEzIGhvdXJzKSB3aWxsXG4gICAgICAvLyBjYXVzZSBhbiBpbmNvcnJlY3QgYWRqdXN0bWVudC5cblxuXG4gICAgICB3aGlsZSAoTWF0aC5hYnMocmVmZXJlbmNlIC0gdmFsdWUpID4gUk9fVEhSRVNIKSB7XG4gICAgICAgIHZhbHVlICs9IGRpcmVjdGlvbiAqIE1BWF9UUztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICB2YXIgVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0gPSBmdW5jdGlvbiBUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbSh0eXBlKSB7XG4gICAgICB2YXIgbGFzdERUUywgcmVmZXJlbmNlRFRTO1xuICAgICAgVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0ucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTsgLy8gVGhlIFwic2hhcmVkXCIgdHlwZSBpcyB1c2VkIGluIGNhc2VzIHdoZXJlIGEgc3RyZWFtIHdpbGwgY29udGFpbiBtdXhlZFxuICAgICAgLy8gdmlkZW8gYW5kIGF1ZGlvLiBXZSBjb3VsZCB1c2UgYHVuZGVmaW5lZGAgaGVyZSwgYnV0IGhhdmluZyBhIHN0cmluZ1xuICAgICAgLy8gbWFrZXMgZGVidWdnaW5nIGEgbGl0dGxlIGNsZWFyZXIuXG5cbiAgICAgIHRoaXMudHlwZV8gPSB0eXBlIHx8IFRZUEVfU0hBUkVEO1xuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAvLyBBbnkgXCJzaGFyZWRcIiByb2xsb3ZlciBzdHJlYW1zIHdpbGwgYWNjZXB0IF9hbGxfIGRhdGEuIE90aGVyd2lzZSxcbiAgICAgICAgLy8gc3RyZWFtcyB3aWxsIG9ubHkgYWNjZXB0IGRhdGEgdGhhdCBtYXRjaGVzIHRoZWlyIHR5cGUuXG4gICAgICAgIGlmICh0aGlzLnR5cGVfICE9PSBUWVBFX1NIQVJFRCAmJiBkYXRhLnR5cGUgIT09IHRoaXMudHlwZV8pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVmZXJlbmNlRFRTID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZWZlcmVuY2VEVFMgPSBkYXRhLmR0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuZHRzID0gaGFuZGxlUm9sbG92ZXIoZGF0YS5kdHMsIHJlZmVyZW5jZURUUyk7XG4gICAgICAgIGRhdGEucHRzID0gaGFuZGxlUm9sbG92ZXIoZGF0YS5wdHMsIHJlZmVyZW5jZURUUyk7XG4gICAgICAgIGxhc3REVFMgPSBkYXRhLmR0cztcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgZGF0YSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZWZlcmVuY2VEVFMgPSBsYXN0RFRTO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2RvbmUnKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZW5kVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdlbmRlZHRpbWVsaW5lJyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRpc2NvbnRpbnVpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlZmVyZW5jZURUUyA9IHZvaWQgMDtcbiAgICAgICAgbGFzdERUUyA9IHZvaWQgMDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGlzY29udGludWl0eSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3Jlc2V0Jyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgdmFyIHRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtID0ge1xuICAgICAgVGltZXN0YW1wUm9sbG92ZXJTdHJlYW06IFRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtLFxuICAgICAgaGFuZGxlUm9sbG92ZXI6IGhhbmRsZVJvbGxvdmVyXG4gICAgfTtcblxuICAgIHZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24gcGVyY2VudEVuY29kZShieXRlcywgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGksXG4gICAgICAgICAgcmVzdWx0ID0gJyc7XG5cbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9ICclJyArICgnMDAnICsgYnl0ZXNbaV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBieXRlIHJhbmdlLFxuICAgIC8vIGludGVycHJldGVkIGFzIFVUZi04LlxuICAgIHBhcnNlVXRmOCA9IGZ1bmN0aW9uIHBhcnNlVXRmOChieXRlcywgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwZXJjZW50RW5jb2RlKGJ5dGVzLCBzdGFydCwgZW5kKSk7XG4gICAgfSxcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBieXRlIHJhbmdlLFxuICAgIC8vIGludGVycHJldGVkIGFzIElTTy04ODU5LTEuXG4gICAgcGFyc2VJc284ODU5MSA9IGZ1bmN0aW9uIHBhcnNlSXNvODg1OTEoYnl0ZXMsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiB1bmVzY2FwZShwZXJjZW50RW5jb2RlKGJ5dGVzLCBzdGFydCwgZW5kKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuICAgIH0sXG4gICAgICAgIHBhcnNlU3luY1NhZmVJbnRlZ2VyID0gZnVuY3Rpb24gcGFyc2VTeW5jU2FmZUludGVnZXIoZGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGFbMF0gPDwgMjEgfCBkYXRhWzFdIDw8IDE0IHwgZGF0YVsyXSA8PCA3IHwgZGF0YVszXTtcbiAgICB9LFxuICAgICAgICB0YWdQYXJzZXJzID0ge1xuICAgICAgVFhYWDogZnVuY3Rpb24gVFhYWCh0YWcpIHtcbiAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgaWYgKHRhZy5kYXRhWzBdICE9PSAzKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGZyYW1lcyB3aXRoIHVucmVjb2duaXplZCBjaGFyYWN0ZXIgZW5jb2RpbmdzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMTsgaSA8IHRhZy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRhZy5kYXRhW2ldID09PSAwKSB7XG4gICAgICAgICAgICAvLyBwYXJzZSB0aGUgdGV4dCBmaWVsZHNcbiAgICAgICAgICAgIHRhZy5kZXNjcmlwdGlvbiA9IHBhcnNlVXRmOCh0YWcuZGF0YSwgMSwgaSk7IC8vIGRvIG5vdCBpbmNsdWRlIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gdGhlIHRhZyB2YWx1ZVxuXG4gICAgICAgICAgICB0YWcudmFsdWUgPSBwYXJzZVV0ZjgodGFnLmRhdGEsIGkgKyAxLCB0YWcuZGF0YS5sZW5ndGgpLnJlcGxhY2UoL1xcMCokLywgJycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGFnLmRhdGEgPSB0YWcudmFsdWU7XG4gICAgICB9LFxuICAgICAgV1hYWDogZnVuY3Rpb24gV1hYWCh0YWcpIHtcbiAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgaWYgKHRhZy5kYXRhWzBdICE9PSAzKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGZyYW1lcyB3aXRoIHVucmVjb2duaXplZCBjaGFyYWN0ZXIgZW5jb2RpbmdzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMTsgaSA8IHRhZy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRhZy5kYXRhW2ldID09PSAwKSB7XG4gICAgICAgICAgICAvLyBwYXJzZSB0aGUgZGVzY3JpcHRpb24gYW5kIFVSTCBmaWVsZHNcbiAgICAgICAgICAgIHRhZy5kZXNjcmlwdGlvbiA9IHBhcnNlVXRmOCh0YWcuZGF0YSwgMSwgaSk7XG4gICAgICAgICAgICB0YWcudXJsID0gcGFyc2VVdGY4KHRhZy5kYXRhLCBpICsgMSwgdGFnLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFBSSVY6IGZ1bmN0aW9uIFBSSVYodGFnKSB7XG4gICAgICAgIHZhciBpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0YWcuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0YWcuZGF0YVtpXSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcGFyc2UgdGhlIGRlc2NyaXB0aW9uIGFuZCBVUkwgZmllbGRzXG4gICAgICAgICAgICB0YWcub3duZXIgPSBwYXJzZUlzbzg4NTkxKHRhZy5kYXRhLCAwLCBpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRhZy5wcml2YXRlRGF0YSA9IHRhZy5kYXRhLnN1YmFycmF5KGkgKyAxKTtcbiAgICAgICAgdGFnLmRhdGEgPSB0YWcucHJpdmF0ZURhdGE7XG4gICAgICB9XG4gICAgfSxcbiAgICAgICAgX01ldGFkYXRhU3RyZWFtO1xuXG4gICAgX01ldGFkYXRhU3RyZWFtID0gZnVuY3Rpb24gTWV0YWRhdGFTdHJlYW0ob3B0aW9ucykge1xuICAgICAgdmFyIHNldHRpbmdzID0ge1xuICAgICAgICBkZWJ1ZzogISEob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnKSxcbiAgICAgICAgLy8gdGhlIGJ5dGVzIG9mIHRoZSBwcm9ncmFtLWxldmVsIGRlc2NyaXB0b3IgZmllbGQgaW4gTVAyVFxuICAgICAgICAvLyBzZWUgSVNPL0lFQyAxMzgxOC0xOjIwMTMgKEUpLCBzZWN0aW9uIDIuNiBcIlByb2dyYW0gYW5kXG4gICAgICAgIC8vIHByb2dyYW0gZWxlbWVudCBkZXNjcmlwdG9yc1wiXG4gICAgICAgIGRlc2NyaXB0b3I6IG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNjcmlwdG9yXG4gICAgICB9LFxuICAgICAgICAgIC8vIHRoZSB0b3RhbCBzaXplIGluIGJ5dGVzIG9mIHRoZSBJRDMgdGFnIGJlaW5nIHBhcnNlZFxuICAgICAgdGFnU2l6ZSA9IDAsXG4gICAgICAgICAgLy8gdGFnIGRhdGEgdGhhdCBpcyBub3QgY29tcGxldGUgZW5vdWdoIHRvIGJlIHBhcnNlZFxuICAgICAgYnVmZmVyID0gW10sXG4gICAgICAgICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIGJ1ZmZlclxuICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICAgICAgaTtcblxuICAgICAgX01ldGFkYXRhU3RyZWFtLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7IC8vIGNhbGN1bGF0ZSB0aGUgdGV4dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoIHR5cGVcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNzdGVwcy10by1leHBvc2UtYS1tZWRpYS1yZXNvdXJjZS1zcGVjaWZpYy10ZXh0LXRyYWNrXG5cblxuICAgICAgdGhpcy5kaXNwYXRjaFR5cGUgPSBzdHJlYW1UeXBlcy5NRVRBREFUQV9TVFJFQU1fVFlQRS50b1N0cmluZygxNik7XG5cbiAgICAgIGlmIChzZXR0aW5ncy5kZXNjcmlwdG9yKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXR0aW5ncy5kZXNjcmlwdG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaFR5cGUgKz0gKCcwMCcgKyBzZXR0aW5ncy5kZXNjcmlwdG9yW2ldLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHVzaCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICB2YXIgdGFnLCBmcmFtZVN0YXJ0LCBmcmFtZVNpemUsIGZyYW1lLCBpLCBmcmFtZUhlYWRlcjtcblxuICAgICAgICBpZiAoY2h1bmsudHlwZSAhPT0gJ3RpbWVkLW1ldGFkYXRhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBpZiBkYXRhX2FsaWdubWVudF9pbmRpY2F0b3IgaXMgc2V0IGluIHRoZSBQRVMgaGVhZGVyLFxuICAgICAgICAvLyB3ZSBtdXN0IGhhdmUgdGhlIHN0YXJ0IG9mIGEgbmV3IElEMyB0YWcuIEFzc3VtZSBhbnl0aGluZ1xuICAgICAgICAvLyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciB3YXMgbWFsZm9ybWVkIGFuZCB0aHJvdyBpdCBvdXRcblxuXG4gICAgICAgIGlmIChjaHVuay5kYXRhQWxpZ25tZW50SW5kaWNhdG9yKSB7XG4gICAgICAgICAgYnVmZmVyU2l6ZSA9IDA7XG4gICAgICAgICAgYnVmZmVyLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gLy8gaWdub3JlIGV2ZW50cyB0aGF0IGRvbid0IGxvb2sgbGlrZSBJRDMgZGF0YVxuXG5cbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDAgJiYgKGNodW5rLmRhdGEubGVuZ3RoIDwgMTAgfHwgY2h1bmsuZGF0YVswXSAhPT0gJ0knLmNoYXJDb2RlQXQoMCkgfHwgY2h1bmsuZGF0YVsxXSAhPT0gJ0QnLmNoYXJDb2RlQXQoMCkgfHwgY2h1bmsuZGF0YVsyXSAhPT0gJzMnLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1NraXBwaW5nIHVucmVjb2duaXplZCBtZXRhZGF0YSBwYWNrZXQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gYWRkIHRoaXMgY2h1bmsgdG8gdGhlIGRhdGEgd2UndmUgY29sbGVjdGVkIHNvIGZhclxuXG5cbiAgICAgICAgYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICBidWZmZXJTaXplICs9IGNodW5rLmRhdGEuYnl0ZUxlbmd0aDsgLy8gZ3JhYiB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGZyYW1lIGZyb20gdGhlIElEMyBoZWFkZXJcblxuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIC8vIHRoZSBmcmFtZSBzaXplIGlzIHRyYW5zbWl0dGVkIGFzIGEgMjgtYml0IGludGVnZXIgaW4gdGhlXG4gICAgICAgICAgLy8gbGFzdCBmb3VyIGJ5dGVzIG9mIHRoZSBJRDMgaGVhZGVyLlxuICAgICAgICAgIC8vIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIGJ5dGUgaXMgZHJvcHBlZCBhbmQgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb25jYXRlbmF0ZWQgdG8gcmVjb3ZlciB0aGUgYWN0dWFsIHZhbHVlLlxuICAgICAgICAgIHRhZ1NpemUgPSBwYXJzZVN5bmNTYWZlSW50ZWdlcihjaHVuay5kYXRhLnN1YmFycmF5KDYsIDEwKSk7IC8vIElEMyByZXBvcnRzIHRoZSB0YWcgc2l6ZSBleGNsdWRpbmcgdGhlIGhlYWRlciBidXQgaXQncyBtb3JlXG4gICAgICAgICAgLy8gY29udmVuaWVudCBmb3Igb3VyIGNvbXBhcmlzb25zIHRvIGluY2x1ZGUgaXRcblxuICAgICAgICAgIHRhZ1NpemUgKz0gMTA7XG4gICAgICAgIH0gLy8gaWYgdGhlIGVudGlyZSBmcmFtZSBoYXMgbm90IGFycml2ZWQsIHdhaXQgZm9yIG1vcmUgZGF0YVxuXG5cbiAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCB0YWdTaXplKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGNvbGxlY3QgdGhlIGVudGlyZSBmcmFtZSBzbyBpdCBjYW4gYmUgcGFyc2VkXG5cblxuICAgICAgICB0YWcgPSB7XG4gICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkodGFnU2l6ZSksXG4gICAgICAgICAgZnJhbWVzOiBbXSxcbiAgICAgICAgICBwdHM6IGJ1ZmZlclswXS5wdHMsXG4gICAgICAgICAgZHRzOiBidWZmZXJbMF0uZHRzXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhZ1NpemU7KSB7XG4gICAgICAgICAgdGFnLmRhdGEuc2V0KGJ1ZmZlclswXS5kYXRhLnN1YmFycmF5KDAsIHRhZ1NpemUgLSBpKSwgaSk7XG4gICAgICAgICAgaSArPSBidWZmZXJbMF0uZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGJ1ZmZlclNpemUgLT0gYnVmZmVyWzBdLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgfSAvLyBmaW5kIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZnJhbWUgYW5kIHRoZSBlbmQgb2YgdGhlIHRhZ1xuXG5cbiAgICAgICAgZnJhbWVTdGFydCA9IDEwO1xuXG4gICAgICAgIGlmICh0YWcuZGF0YVs1XSAmIDB4NDApIHtcbiAgICAgICAgICAvLyBhZHZhbmNlIHRoZSBmcmFtZSBzdGFydCBwYXN0IHRoZSBleHRlbmRlZCBoZWFkZXJcbiAgICAgICAgICBmcmFtZVN0YXJ0ICs9IDQ7IC8vIGhlYWRlciBzaXplIGZpZWxkXG5cbiAgICAgICAgICBmcmFtZVN0YXJ0ICs9IHBhcnNlU3luY1NhZmVJbnRlZ2VyKHRhZy5kYXRhLnN1YmFycmF5KDEwLCAxNCkpOyAvLyBjbGlwIGFueSBwYWRkaW5nIG9mZiB0aGUgZW5kXG5cbiAgICAgICAgICB0YWdTaXplIC09IHBhcnNlU3luY1NhZmVJbnRlZ2VyKHRhZy5kYXRhLnN1YmFycmF5KDE2LCAyMCkpO1xuICAgICAgICB9IC8vIHBhcnNlIG9uZSBvciBtb3JlIElEMyBmcmFtZXNcbiAgICAgICAgLy8gaHR0cDovL2lkMy5vcmcvaWQzdjIuMy4wI0lEM3YyX2ZyYW1lX292ZXJ2aWV3XG5cblxuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBmcmFtZVxuICAgICAgICAgIGZyYW1lU2l6ZSA9IHBhcnNlU3luY1NhZmVJbnRlZ2VyKHRhZy5kYXRhLnN1YmFycmF5KGZyYW1lU3RhcnQgKyA0LCBmcmFtZVN0YXJ0ICsgOCkpO1xuXG4gICAgICAgICAgaWYgKGZyYW1lU2l6ZSA8IDEpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ01hbGZvcm1lZCBJRDMgZnJhbWUgZW5jb3VudGVyZWQuIFNraXBwaW5nIG1ldGFkYXRhIHBhcnNpbmcuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnJhbWVIZWFkZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRhZy5kYXRhW2ZyYW1lU3RhcnRdLCB0YWcuZGF0YVtmcmFtZVN0YXJ0ICsgMV0sIHRhZy5kYXRhW2ZyYW1lU3RhcnQgKyAyXSwgdGFnLmRhdGFbZnJhbWVTdGFydCArIDNdKTtcbiAgICAgICAgICBmcmFtZSA9IHtcbiAgICAgICAgICAgIGlkOiBmcmFtZUhlYWRlcixcbiAgICAgICAgICAgIGRhdGE6IHRhZy5kYXRhLnN1YmFycmF5KGZyYW1lU3RhcnQgKyAxMCwgZnJhbWVTdGFydCArIGZyYW1lU2l6ZSArIDEwKVxuICAgICAgICAgIH07XG4gICAgICAgICAgZnJhbWUua2V5ID0gZnJhbWUuaWQ7XG5cbiAgICAgICAgICBpZiAodGFnUGFyc2Vyc1tmcmFtZS5pZF0pIHtcbiAgICAgICAgICAgIHRhZ1BhcnNlcnNbZnJhbWUuaWRdKGZyYW1lKTsgLy8gaGFuZGxlIHRoZSBzcGVjaWFsIFBSSVYgZnJhbWUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3RhcnRcbiAgICAgICAgICAgIC8vIHRpbWUgZm9yIHJhdyBBQUMgZGF0YVxuXG4gICAgICAgICAgICBpZiAoZnJhbWUub3duZXIgPT09ICdjb20uYXBwbGUuc3RyZWFtaW5nLnRyYW5zcG9ydFN0cmVhbVRpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgICAgdmFyIGQgPSBmcmFtZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgc2l6ZSA9IChkWzNdICYgMHgwMSkgPDwgMzAgfCBkWzRdIDw8IDIyIHwgZFs1XSA8PCAxNCB8IGRbNl0gPDwgNiB8IGRbN10gPj4+IDI7XG4gICAgICAgICAgICAgIHNpemUgKj0gNDtcbiAgICAgICAgICAgICAgc2l6ZSArPSBkWzddICYgMHgwMztcbiAgICAgICAgICAgICAgZnJhbWUudGltZVN0YW1wID0gc2l6ZTsgLy8gaW4gcmF3IEFBQywgYWxsIHN1YnNlcXVlbnQgZGF0YSB3aWxsIGJlIHRpbWVzdGFtcGVkIGJhc2VkXG4gICAgICAgICAgICAgIC8vIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGZyYW1lXG4gICAgICAgICAgICAgIC8vIHdlIGNvdWxkbid0IGhhdmUga25vd24gdGhlIGFwcHJvcHJpYXRlIHB0cyBhbmQgZHRzIGJlZm9yZVxuICAgICAgICAgICAgICAvLyBwYXJzaW5nIHRoaXMgSUQzIHRhZyBzbyBzZXQgdGhvc2UgdmFsdWVzIG5vd1xuXG4gICAgICAgICAgICAgIGlmICh0YWcucHRzID09PSB1bmRlZmluZWQgJiYgdGFnLmR0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGFnLnB0cyA9IGZyYW1lLnRpbWVTdGFtcDtcbiAgICAgICAgICAgICAgICB0YWcuZHRzID0gZnJhbWUudGltZVN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd0aW1lc3RhbXAnLCBmcmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFnLmZyYW1lcy5wdXNoKGZyYW1lKTtcbiAgICAgICAgICBmcmFtZVN0YXJ0ICs9IDEwOyAvLyBhZHZhbmNlIHBhc3QgdGhlIGZyYW1lIGhlYWRlclxuXG4gICAgICAgICAgZnJhbWVTdGFydCArPSBmcmFtZVNpemU7IC8vIGFkdmFuY2UgcGFzdCB0aGUgZnJhbWUgYm9keVxuICAgICAgICB9IHdoaWxlIChmcmFtZVN0YXJ0IDwgdGFnU2l6ZSk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgdGFnKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9NZXRhZGF0YVN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgdmFyIG1ldGFkYXRhU3RyZWFtID0gX01ldGFkYXRhU3RyZWFtO1xuICAgIHZhciBUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbSQxID0gdGltZXN0YW1wUm9sbG92ZXJTdHJlYW0uVGltZXN0YW1wUm9sbG92ZXJTdHJlYW07IC8vIG9iamVjdCB0eXBlc1xuXG4gICAgdmFyIF9UcmFuc3BvcnRQYWNrZXRTdHJlYW0sIF9UcmFuc3BvcnRQYXJzZVN0cmVhbSwgX0VsZW1lbnRhcnlTdHJlYW07IC8vIGNvbnN0YW50c1xuXG5cbiAgICB2YXIgTVAyVF9QQUNLRVRfTEVOR1RIID0gMTg4LFxuICAgICAgICAvLyBieXRlc1xuICAgIFNZTkNfQllURSA9IDB4NDc7XG4gICAgLyoqXG4gICAgICogU3BsaXRzIGFuIGluY29taW5nIHN0cmVhbSBvZiBiaW5hcnkgZGF0YSBpbnRvIE1QRUctMiBUcmFuc3BvcnRcbiAgICAgKiBTdHJlYW0gcGFja2V0cy5cbiAgICAgKi9cblxuICAgIF9UcmFuc3BvcnRQYWNrZXRTdHJlYW0gPSBmdW5jdGlvbiBUcmFuc3BvcnRQYWNrZXRTdHJlYW0oKSB7XG4gICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoTVAyVF9QQUNLRVRfTEVOR1RIKSxcbiAgICAgICAgICBieXRlc0luQnVmZmVyID0gMDtcblxuICAgICAgX1RyYW5zcG9ydFBhY2tldFN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpOyAvLyBEZWxpdmVyIG5ldyBieXRlcyB0byB0aGUgc3RyZWFtLlxuXG4gICAgICAvKipcbiAgICAgICAqIFNwbGl0IGEgc3RyZWFtIG9mIGRhdGEgaW50byBNMlRTIHBhY2tldHNcbiAgICAgICoqL1xuXG5cbiAgICAgIHRoaXMucHVzaCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgICBlbmRJbmRleCA9IE1QMlRfUEFDS0VUX0xFTkdUSCxcbiAgICAgICAgICAgIGV2ZXJ5dGhpbmc7IC8vIElmIHRoZXJlIGFyZSBieXRlcyByZW1haW5pbmcgZnJvbSB0aGUgbGFzdCBzZWdtZW50LCBwcmVwZW5kIHRoZW0gdG8gdGhlXG4gICAgICAgIC8vIGJ5dGVzIHRoYXQgd2VyZSBwdXNoZWQgaW5cblxuICAgICAgICBpZiAoYnl0ZXNJbkJ1ZmZlcikge1xuICAgICAgICAgIGV2ZXJ5dGhpbmcgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoICsgYnl0ZXNJbkJ1ZmZlcik7XG4gICAgICAgICAgZXZlcnl0aGluZy5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzSW5CdWZmZXIpKTtcbiAgICAgICAgICBldmVyeXRoaW5nLnNldChieXRlcywgYnl0ZXNJbkJ1ZmZlcik7XG4gICAgICAgICAgYnl0ZXNJbkJ1ZmZlciA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlcnl0aGluZyA9IGJ5dGVzO1xuICAgICAgICB9IC8vIFdoaWxlIHdlIGhhdmUgZW5vdWdoIGRhdGEgZm9yIGEgcGFja2V0XG5cblxuICAgICAgICB3aGlsZSAoZW5kSW5kZXggPCBldmVyeXRoaW5nLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAvLyBMb29rIGZvciBhIHBhaXIgb2Ygc3RhcnQgYW5kIGVuZCBzeW5jIGJ5dGVzIGluIHRoZSBkYXRhLi5cbiAgICAgICAgICBpZiAoZXZlcnl0aGluZ1tzdGFydEluZGV4XSA9PT0gU1lOQ19CWVRFICYmIGV2ZXJ5dGhpbmdbZW5kSW5kZXhdID09PSBTWU5DX0JZVEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgcGFja2V0IHNvIGVtaXQgaXQgYW5kIGp1bXAgb25lIHdob2xlIHBhY2tldCBmb3J3YXJkIGluXG4gICAgICAgICAgICAvLyB0aGUgc3RyZWFtXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBldmVyeXRoaW5nLnN1YmFycmF5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7XG4gICAgICAgICAgICBzdGFydEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgICAgICAgIGVuZEluZGV4ICs9IE1QMlRfUEFDS0VUX0xFTkdUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgc29tZWhvdyBiZWNvbWUgZGUtc3luY2hyb25pemVkIGFuZCB3ZSBuZWVkIHRvIHN0ZXBcbiAgICAgICAgICAvLyBmb3J3YXJkIG9uZSBieXRlIGF0IGEgdGltZSB1bnRpbCB3ZSBmaW5kIGEgcGFpciBvZiBzeW5jIGJ5dGVzIHRoYXQgZGVub3RlXG4gICAgICAgICAgLy8gYSBwYWNrZXRcblxuXG4gICAgICAgICAgc3RhcnRJbmRleCsrO1xuICAgICAgICAgIGVuZEluZGV4Kys7XG4gICAgICAgIH0gLy8gSWYgdGhlcmUgd2FzIHNvbWUgZGF0YSBsZWZ0IG92ZXIgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCB0aGF0IGNvdWxkbid0XG4gICAgICAgIC8vIHBvc3NpYmx5IGJlIGEgd2hvbGUgcGFja2V0LCBrZWVwIGl0IGJlY2F1c2UgaXQgbWlnaHQgYmUgdGhlIHN0YXJ0IG9mIGEgcGFja2V0XG4gICAgICAgIC8vIHRoYXQgY29udGludWVzIGluIHRoZSBuZXh0IHNlZ21lbnRcblxuXG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgZXZlcnl0aGluZy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgYnVmZmVyLnNldChldmVyeXRoaW5nLnN1YmFycmF5KHN0YXJ0SW5kZXgpLCAwKTtcbiAgICAgICAgICBieXRlc0luQnVmZmVyID0gZXZlcnl0aGluZy5ieXRlTGVuZ3RoIC0gc3RhcnRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogUGFzc2VzIGlkZW50aWZpZWQgTTJUUyBwYWNrZXRzIHRvIHRoZSBUcmFuc3BvcnRQYXJzZVN0cmVhbSB0byBiZSBwYXJzZWRcbiAgICAgICoqL1xuXG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIHRoZSBidWZmZXIgY29udGFpbnMgYSB3aG9sZSBwYWNrZXQgd2hlbiB3ZSBhcmUgYmVpbmcgZmx1c2hlZCwgZW1pdCBpdFxuICAgICAgICAvLyBhbmQgZW1wdHkgdGhlIGJ1ZmZlci4gT3RoZXJ3aXNlIGhvbGQgb250byB0aGUgZGF0YSBiZWNhdXNlIGl0IG1heSBiZVxuICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGRlY29kaW5nIHRoZSBuZXh0IHNlZ21lbnRcbiAgICAgICAgaWYgKGJ5dGVzSW5CdWZmZXIgPT09IE1QMlRfUEFDS0VUX0xFTkdUSCAmJiBidWZmZXJbMF0gPT09IFNZTkNfQllURSkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YScsIGJ1ZmZlcik7XG4gICAgICAgICAgYnl0ZXNJbkJ1ZmZlciA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2RvbmUnKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZW5kVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdlbmRlZHRpbWVsaW5lJyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBieXRlc0luQnVmZmVyID0gMDtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldCcpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgX1RyYW5zcG9ydFBhY2tldFN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgLyoqXG4gICAgICogQWNjZXB0cyBhbiBNUDJUIFRyYW5zcG9ydFBhY2tldFN0cmVhbSBhbmQgZW1pdHMgZGF0YSBldmVudHMgd2l0aCBwYXJzZWRcbiAgICAgKiBmb3JtcyBvZiB0aGUgaW5kaXZpZHVhbCB0cmFuc3BvcnQgc3RyZWFtIHBhY2tldHMuXG4gICAgICovXG5cbiAgICBfVHJhbnNwb3J0UGFyc2VTdHJlYW0gPSBmdW5jdGlvbiBUcmFuc3BvcnRQYXJzZVN0cmVhbSgpIHtcbiAgICAgIHZhciBwYXJzZVBzaSwgcGFyc2VQYXQsIHBhcnNlUG10LCBzZWxmO1xuXG4gICAgICBfVHJhbnNwb3J0UGFyc2VTdHJlYW0ucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuICAgICAgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnBhY2tldHNXYWl0aW5nRm9yUG10ID0gW107XG4gICAgICB0aGlzLnByb2dyYW1NYXBUYWJsZSA9IHVuZGVmaW5lZDtcblxuICAgICAgcGFyc2VQc2kgPSBmdW5jdGlvbiBwYXJzZVBzaShwYXlsb2FkLCBwc2kpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7IC8vIFBTSSBwYWNrZXRzIG1heSBiZSBzcGxpdCBpbnRvIG11bHRpcGxlIHNlY3Rpb25zIGFuZCB0aG9zZVxuICAgICAgICAvLyBzZWN0aW9ucyBtYXkgYmUgc3BsaXQgaW50byBtdWx0aXBsZSBwYWNrZXRzLiBJZiBhIFBTSVxuICAgICAgICAvLyBzZWN0aW9uIHN0YXJ0cyBpbiB0aGlzIHBhY2tldCwgdGhlIHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3JcbiAgICAgICAgLy8gd2lsbCBiZSB0cnVlIGFuZCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGF5bG9hZCB3aWxsIGluZGljYXRlXG4gICAgICAgIC8vIHRoZSBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAgICAgIC8vIHNlY3Rpb24uXG5cbiAgICAgICAgaWYgKHBzaS5wYXlsb2FkVW5pdFN0YXJ0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgb2Zmc2V0ICs9IHBheWxvYWRbb2Zmc2V0XSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHNpLnR5cGUgPT09ICdwYXQnKSB7XG4gICAgICAgICAgcGFyc2VQYXQocGF5bG9hZC5zdWJhcnJheShvZmZzZXQpLCBwc2kpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlUG10KHBheWxvYWQuc3ViYXJyYXkob2Zmc2V0KSwgcHNpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcGFyc2VQYXQgPSBmdW5jdGlvbiBwYXJzZVBhdChwYXlsb2FkLCBwYXQpIHtcbiAgICAgICAgcGF0LnNlY3Rpb25fbnVtYmVyID0gcGF5bG9hZFs3XTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcblxuICAgICAgICBwYXQubGFzdF9zZWN0aW9uX251bWJlciA9IHBheWxvYWRbOF07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIC8vIHNraXAgdGhlIFBTSSBoZWFkZXIgYW5kIHBhcnNlIHRoZSBmaXJzdCBQTVQgZW50cnlcblxuICAgICAgICBzZWxmLnBtdFBpZCA9IChwYXlsb2FkWzEwXSAmIDB4MUYpIDw8IDggfCBwYXlsb2FkWzExXTtcbiAgICAgICAgcGF0LnBtdFBpZCA9IHNlbGYucG10UGlkO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogUGFyc2Ugb3V0IHRoZSByZWxldmFudCBmaWVsZHMgb2YgYSBQcm9ncmFtIE1hcCBUYWJsZSAoUE1UKS5cbiAgICAgICAqIEBwYXJhbSBwYXlsb2FkIHtVaW50OEFycmF5fSB0aGUgUE1ULXNwZWNpZmljIHBvcnRpb24gb2YgYW4gTVAyVFxuICAgICAgICogcGFja2V0LiBUaGUgZmlyc3QgYnl0ZSBpbiB0aGlzIGFycmF5IHNob3VsZCBiZSB0aGUgdGFibGVfaWRcbiAgICAgICAqIGZpZWxkLlxuICAgICAgICogQHBhcmFtIHBtdCB7b2JqZWN0fSB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIGRlY29yYXRlZCB3aXRoXG4gICAgICAgKiBmaWVsZHMgcGFyc2VkIGZyb20gdGhlIFBNVC5cbiAgICAgICAqL1xuXG5cbiAgICAgIHBhcnNlUG10ID0gZnVuY3Rpb24gcGFyc2VQbXQocGF5bG9hZCwgcG10KSB7XG4gICAgICAgIHZhciBzZWN0aW9uTGVuZ3RoLCB0YWJsZUVuZCwgcHJvZ3JhbUluZm9MZW5ndGgsIG9mZnNldDsgLy8gUE1UcyBjYW4gYmUgc2VudCBhaGVhZCBvZiB0aGUgdGltZSB3aGVuIHRoZXkgc2hvdWxkIGFjdHVhbGx5XG4gICAgICAgIC8vIHRha2UgZWZmZWN0LiBXZSBkb24ndCBiZWxpZXZlIHRoaXMgc2hvdWxkIGV2ZXIgYmUgdGhlIGNhc2VcbiAgICAgICAgLy8gZm9yIEhMUyBidXQgd2UnbGwgaWdub3JlIFwiZm9yd2FyZFwiIFBNVCBkZWNsYXJhdGlvbnMgaWYgd2Ugc2VlXG4gICAgICAgIC8vIHRoZW0uIEZ1dHVyZSBQTVQgZGVjbGFyYXRpb25zIGhhdmUgdGhlIGN1cnJlbnRfbmV4dF9pbmRpY2F0b3JcbiAgICAgICAgLy8gc2V0IHRvIHplcm8uXG5cbiAgICAgICAgaWYgKCEocGF5bG9hZFs1XSAmIDB4MDEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcHJvZ3JhbSBtYXAgdGFibGVcblxuXG4gICAgICAgIHNlbGYucHJvZ3JhbU1hcFRhYmxlID0ge1xuICAgICAgICAgIHZpZGVvOiBudWxsLFxuICAgICAgICAgIGF1ZGlvOiBudWxsLFxuICAgICAgICAgICd0aW1lZC1tZXRhZGF0YSc6IHt9XG4gICAgICAgIH07IC8vIHRoZSBtYXBwaW5nIHRhYmxlIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZWN0aW9uXG5cbiAgICAgICAgc2VjdGlvbkxlbmd0aCA9IChwYXlsb2FkWzFdICYgMHgwZikgPDwgOCB8IHBheWxvYWRbMl07XG4gICAgICAgIHRhYmxlRW5kID0gMyArIHNlY3Rpb25MZW5ndGggLSA0OyAvLyB0byBkZXRlcm1pbmUgd2hlcmUgdGhlIHRhYmxlIGlzLCB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93XG4gICAgICAgIC8vIGxvbmcgdGhlIHByb2dyYW0gaW5mbyBkZXNjcmlwdG9ycyBhcmVcblxuICAgICAgICBwcm9ncmFtSW5mb0xlbmd0aCA9IChwYXlsb2FkWzEwXSAmIDB4MGYpIDw8IDggfCBwYXlsb2FkWzExXTsgLy8gYWR2YW5jZSB0aGUgb2Zmc2V0IHRvIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbWFwcGluZyB0YWJsZVxuXG4gICAgICAgIG9mZnNldCA9IDEyICsgcHJvZ3JhbUluZm9MZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IHRhYmxlRW5kKSB7XG4gICAgICAgICAgdmFyIHN0cmVhbVR5cGUgPSBwYXlsb2FkW29mZnNldF07XG4gICAgICAgICAgdmFyIHBpZCA9IChwYXlsb2FkW29mZnNldCArIDFdICYgMHgxRikgPDwgOCB8IHBheWxvYWRbb2Zmc2V0ICsgMl07IC8vIG9ubHkgbWFwIGEgc2luZ2xlIGVsZW1lbnRhcnlfcGlkIGZvciBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtIHR5cGVzXG4gICAgICAgICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgYmUgZG9uZSBmb3IgbWV0YWRhdGEgdG9vPyBmb3Igbm93IG1haW50YWluIGJlaGF2aW9yIG9mXG4gICAgICAgICAgLy8gICAgICAgbXVsdGlwbGUgbWV0YWRhdGEgc3RyZWFtc1xuXG4gICAgICAgICAgaWYgKHN0cmVhbVR5cGUgPT09IHN0cmVhbVR5cGVzLkgyNjRfU1RSRUFNX1RZUEUgJiYgc2VsZi5wcm9ncmFtTWFwVGFibGUudmlkZW8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNlbGYucHJvZ3JhbU1hcFRhYmxlLnZpZGVvID0gcGlkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtVHlwZSA9PT0gc3RyZWFtVHlwZXMuQURUU19TVFJFQU1fVFlQRSAmJiBzZWxmLnByb2dyYW1NYXBUYWJsZS5hdWRpbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5wcm9ncmFtTWFwVGFibGUuYXVkaW8gPSBwaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW1UeXBlID09PSBzdHJlYW1UeXBlcy5NRVRBREFUQV9TVFJFQU1fVFlQRSkge1xuICAgICAgICAgICAgLy8gbWFwIHBpZCB0byBzdHJlYW0gdHlwZSBmb3IgbWV0YWRhdGEgc3RyZWFtc1xuICAgICAgICAgICAgc2VsZi5wcm9ncmFtTWFwVGFibGVbJ3RpbWVkLW1ldGFkYXRhJ11bcGlkXSA9IHN0cmVhbVR5cGU7XG4gICAgICAgICAgfSAvLyBtb3ZlIHRvIHRoZSBuZXh0IHRhYmxlIGVudHJ5XG4gICAgICAgICAgLy8gc2tpcCBwYXN0IHRoZSBlbGVtZW50YXJ5IHN0cmVhbSBkZXNjcmlwdG9ycywgaWYgcHJlc2VudFxuXG5cbiAgICAgICAgICBvZmZzZXQgKz0gKChwYXlsb2FkW29mZnNldCArIDNdICYgMHgwRikgPDwgOCB8IHBheWxvYWRbb2Zmc2V0ICsgNF0pICsgNTtcbiAgICAgICAgfSAvLyByZWNvcmQgdGhlIG1hcCBvbiB0aGUgcGFja2V0IGFzIHdlbGxcblxuXG4gICAgICAgIHBtdC5wcm9ncmFtTWFwVGFibGUgPSBzZWxmLnByb2dyYW1NYXBUYWJsZTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIERlbGl2ZXIgYSBuZXcgTVAyVCBwYWNrZXQgdG8gdGhlIG5leHQgc3RyZWFtIGluIHRoZSBwaXBlbGluZS5cbiAgICAgICAqL1xuXG5cbiAgICAgIHRoaXMucHVzaCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9LFxuICAgICAgICAgICAgb2Zmc2V0ID0gNDtcbiAgICAgICAgcmVzdWx0LnBheWxvYWRVbml0U3RhcnRJbmRpY2F0b3IgPSAhIShwYWNrZXRbMV0gJiAweDQwKTsgLy8gcGlkIGlzIGEgMTMtYml0IGZpZWxkIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGJpdCBvZiBwYWNrZXRbMV1cblxuICAgICAgICByZXN1bHQucGlkID0gcGFja2V0WzFdICYgMHgxZjtcbiAgICAgICAgcmVzdWx0LnBpZCA8PD0gODtcbiAgICAgICAgcmVzdWx0LnBpZCB8PSBwYWNrZXRbMl07IC8vIGlmIGFuIGFkYXB0aW9uIGZpZWxkIGlzIHByZXNlbnQsIGl0cyBsZW5ndGggaXMgc3BlY2lmaWVkIGJ5IHRoZVxuICAgICAgICAvLyBmaWZ0aCBieXRlIG9mIHRoZSBUUyBwYWNrZXQgaGVhZGVyLiBUaGUgYWRhcHRhdGlvbiBmaWVsZCBpc1xuICAgICAgICAvLyB1c2VkIHRvIGFkZCBzdHVmZmluZyB0byBQRVMgcGFja2V0cyB0aGF0IGRvbid0IGZpbGwgYSBjb21wbGV0ZVxuICAgICAgICAvLyBUUyBwYWNrZXQsIGFuZCB0byBzcGVjaWZ5IHNvbWUgZm9ybXMgb2YgdGltaW5nIGFuZCBjb250cm9sIGRhdGFcbiAgICAgICAgLy8gdGhhdCB3ZSBkbyBub3QgY3VycmVudGx5IHVzZS5cblxuICAgICAgICBpZiAoKHBhY2tldFszXSAmIDB4MzApID4+PiA0ID4gMHgwMSkge1xuICAgICAgICAgIG9mZnNldCArPSBwYWNrZXRbb2Zmc2V0XSArIDE7XG4gICAgICAgIH0gLy8gcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCBiYXNlZCBvbiB0aGUgdHlwZVxuXG5cbiAgICAgICAgaWYgKHJlc3VsdC5waWQgPT09IDApIHtcbiAgICAgICAgICByZXN1bHQudHlwZSA9ICdwYXQnO1xuICAgICAgICAgIHBhcnNlUHNpKHBhY2tldC5zdWJhcnJheShvZmZzZXQpLCByZXN1bHQpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YScsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnBpZCA9PT0gdGhpcy5wbXRQaWQpIHtcbiAgICAgICAgICByZXN1bHQudHlwZSA9ICdwbXQnO1xuICAgICAgICAgIHBhcnNlUHNpKHBhY2tldC5zdWJhcnJheShvZmZzZXQpLCByZXN1bHQpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YScsIHJlc3VsdCk7IC8vIGlmIHRoZXJlIGFyZSBhbnkgcGFja2V0cyB3YWl0aW5nIGZvciBhIFBNVCB0byBiZSBmb3VuZCwgcHJvY2VzcyB0aGVtIG5vd1xuXG4gICAgICAgICAgd2hpbGUgKHRoaXMucGFja2V0c1dhaXRpbmdGb3JQbXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NQZXNfLmFwcGx5KHRoaXMsIHRoaXMucGFja2V0c1dhaXRpbmdGb3JQbXQuc2hpZnQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZ3JhbU1hcFRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIHdlIGhhdmUgbm90IHNlZW4gYSBQTVQgeWV0LCBkZWZlciBmdXJ0aGVyIHByb2Nlc3Npbmcgb2ZcbiAgICAgICAgICAvLyBQRVMgcGFja2V0cyB1bnRpbCBvbmUgaGFzIGJlZW4gcGFyc2VkXG4gICAgICAgICAgdGhpcy5wYWNrZXRzV2FpdGluZ0ZvclBtdC5wdXNoKFtwYWNrZXQsIG9mZnNldCwgcmVzdWx0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzUGVzXyhwYWNrZXQsIG9mZnNldCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5wcm9jZXNzUGVzXyA9IGZ1bmN0aW9uIChwYWNrZXQsIG9mZnNldCwgcmVzdWx0KSB7XG4gICAgICAgIC8vIHNldCB0aGUgYXBwcm9wcmlhdGUgc3RyZWFtIHR5cGVcbiAgICAgICAgaWYgKHJlc3VsdC5waWQgPT09IHRoaXMucHJvZ3JhbU1hcFRhYmxlLnZpZGVvKSB7XG4gICAgICAgICAgcmVzdWx0LnN0cmVhbVR5cGUgPSBzdHJlYW1UeXBlcy5IMjY0X1NUUkVBTV9UWVBFO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5waWQgPT09IHRoaXMucHJvZ3JhbU1hcFRhYmxlLmF1ZGlvKSB7XG4gICAgICAgICAgcmVzdWx0LnN0cmVhbVR5cGUgPSBzdHJlYW1UeXBlcy5BRFRTX1NUUkVBTV9UWVBFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIG5vdCB2aWRlbyBvciBhdWRpbywgaXQgaXMgdGltZWQtbWV0YWRhdGEgb3IgdW5rbm93blxuICAgICAgICAgIC8vIGlmIHVua25vd24sIHN0cmVhbVR5cGUgd2lsbCBiZSB1bmRlZmluZWRcbiAgICAgICAgICByZXN1bHQuc3RyZWFtVHlwZSA9IHRoaXMucHJvZ3JhbU1hcFRhYmxlWyd0aW1lZC1tZXRhZGF0YSddW3Jlc3VsdC5waWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnR5cGUgPSAncGVzJztcbiAgICAgICAgcmVzdWx0LmRhdGEgPSBwYWNrZXQuc3ViYXJyYXkob2Zmc2V0KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgcmVzdWx0KTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9UcmFuc3BvcnRQYXJzZVN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgX1RyYW5zcG9ydFBhcnNlU3RyZWFtLlNUUkVBTV9UWVBFUyA9IHtcbiAgICAgIGgyNjQ6IDB4MWIsXG4gICAgICBhZHRzOiAweDBmXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZWNvbnNpc3R1dGVzIHByb2dyYW0gZWxlbWVudGFyeSBzdHJlYW0gKFBFUykgcGFja2V0cyBmcm9tIHBhcnNlZFxuICAgICAqIHRyYW5zcG9ydCBzdHJlYW0gcGFja2V0cy4gVGhhdCBpcywgaWYgeW91IHBpcGUgYW5cbiAgICAgKiBtcDJ0LlRyYW5zcG9ydFBhcnNlU3RyZWFtIGludG8gYSBtcDJ0LkVsZW1lbnRhcnlTdHJlYW0sIHRoZSBvdXRwdXRcbiAgICAgKiBldmVudHMgd2lsbCBiZSBldmVudHMgd2hpY2ggY2FwdHVyZSB0aGUgYnl0ZXMgZm9yIGluZGl2aWR1YWwgUEVTXG4gICAgICogcGFja2V0cyBwbHVzIHJlbGV2YW50IG1ldGFkYXRhIHRoYXQgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gdGhlXG4gICAgICogY29udGFpbmVyLlxuICAgICAqL1xuXG4gICAgX0VsZW1lbnRhcnlTdHJlYW0gPSBmdW5jdGlvbiBFbGVtZW50YXJ5U3RyZWFtKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgIC8vIFBFUyBwYWNrZXQgZnJhZ21lbnRzXG4gICAgICB2aWRlbyA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0sXG4gICAgICAgICAgYXVkaW8gPSB7XG4gICAgICAgIGRhdGE6IFtdLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9LFxuICAgICAgICAgIHRpbWVkTWV0YWRhdGEgPSB7XG4gICAgICAgIGRhdGE6IFtdLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9LFxuICAgICAgICAgIHByb2dyYW1NYXBUYWJsZSxcbiAgICAgICAgICBwYXJzZVBlcyA9IGZ1bmN0aW9uIHBhcnNlUGVzKHBheWxvYWQsIHBlcykge1xuICAgICAgICB2YXIgcHRzRHRzRmxhZ3M7IC8vIGdldCB0aGUgcGFja2V0IGxlbmd0aCwgdGhpcyB3aWxsIGJlIDAgZm9yIHZpZGVvXG5cbiAgICAgICAgcGVzLnBhY2tldExlbmd0aCA9IDYgKyAocGF5bG9hZFs0XSA8PCA4IHwgcGF5bG9hZFs1XSk7IC8vIGZpbmQgb3V0IGlmIHRoaXMgcGFja2V0cyBzdGFydHMgYSBuZXcga2V5ZnJhbWVcblxuICAgICAgICBwZXMuZGF0YUFsaWdubWVudEluZGljYXRvciA9IChwYXlsb2FkWzZdICYgMHgwNCkgIT09IDA7IC8vIFBFUyBwYWNrZXRzIG1heSBiZSBhbm5vdGF0ZWQgd2l0aCBhIFBUUyB2YWx1ZSwgb3IgYSBQVFMgdmFsdWVcbiAgICAgICAgLy8gYW5kIGEgRFRTIHZhbHVlLiBEZXRlcm1pbmUgd2hhdCBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgaXNcbiAgICAgICAgLy8gYXZhaWxhYmxlIHRvIHdvcmsgd2l0aC5cblxuICAgICAgICBwdHNEdHNGbGFncyA9IHBheWxvYWRbN107IC8vIFBUUyBhbmQgRFRTIGFyZSBub3JtYWxseSBzdG9yZWQgYXMgYSAzMy1iaXQgbnVtYmVyLiAgSmF2YXNjcmlwdFxuICAgICAgICAvLyBwZXJmb3JtcyBhbGwgYml0d2lzZSBvcGVyYXRpb25zIG9uIDMyLWJpdCBpbnRlZ2VycyBidXQgamF2YXNjcmlwdFxuICAgICAgICAvLyBzdXBwb3J0cyBhIG11Y2ggZ3JlYXRlciByYW5nZSAoNTItYml0cykgb2YgaW50ZWdlciB1c2luZyBzdGFuZGFyZFxuICAgICAgICAvLyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucy5cbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgMzEtYml0IHZhbHVlIHVzaW5nIGJpdHdpc2Ugb3BlcmF0b3JzIG92ZXIgdGhlIDMxXG4gICAgICAgIC8vIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhbmQgdGhlbiBtdWx0aXBseSBieSA0IChlcXVhbCB0byBhIGxlZnQtc2hpZnRcbiAgICAgICAgLy8gb2YgMikgYmVmb3JlIHdlIGFkZCB0aGUgZmluYWwgMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZVxuICAgICAgICAvLyB0aW1lc3RhbXAgKGVxdWFsIHRvIGFuIE9SLilcblxuICAgICAgICBpZiAocHRzRHRzRmxhZ3MgJiAweEMwKSB7XG4gICAgICAgICAgLy8gdGhlIFBUUyBhbmQgRFRTIGFyZSBub3Qgd3JpdHRlbiBvdXQgZGlyZWN0bHkuIEZvciBpbmZvcm1hdGlvblxuICAgICAgICAgIC8vIG9uIGhvdyB0aGV5IGFyZSBlbmNvZGVkLCBzZWVcbiAgICAgICAgICAvLyBodHRwOi8vZHZkLnNvdXJjZWZvcmdlLm5ldC9kdmRpbmZvL3Blcy1oZHIuaHRtbFxuICAgICAgICAgIHBlcy5wdHMgPSAocGF5bG9hZFs5XSAmIDB4MEUpIDw8IDI3IHwgKHBheWxvYWRbMTBdICYgMHhGRikgPDwgMjAgfCAocGF5bG9hZFsxMV0gJiAweEZFKSA8PCAxMiB8IChwYXlsb2FkWzEyXSAmIDB4RkYpIDw8IDUgfCAocGF5bG9hZFsxM10gJiAweEZFKSA+Pj4gMztcbiAgICAgICAgICBwZXMucHRzICo9IDQ7IC8vIExlZnQgc2hpZnQgYnkgMlxuXG4gICAgICAgICAgcGVzLnB0cyArPSAocGF5bG9hZFsxM10gJiAweDA2KSA+Pj4gMTsgLy8gT1IgYnkgdGhlIHR3byBMU0JzXG5cbiAgICAgICAgICBwZXMuZHRzID0gcGVzLnB0cztcblxuICAgICAgICAgIGlmIChwdHNEdHNGbGFncyAmIDB4NDApIHtcbiAgICAgICAgICAgIHBlcy5kdHMgPSAocGF5bG9hZFsxNF0gJiAweDBFKSA8PCAyNyB8IChwYXlsb2FkWzE1XSAmIDB4RkYpIDw8IDIwIHwgKHBheWxvYWRbMTZdICYgMHhGRSkgPDwgMTIgfCAocGF5bG9hZFsxN10gJiAweEZGKSA8PCA1IHwgKHBheWxvYWRbMThdICYgMHhGRSkgPj4+IDM7XG4gICAgICAgICAgICBwZXMuZHRzICo9IDQ7IC8vIExlZnQgc2hpZnQgYnkgMlxuXG4gICAgICAgICAgICBwZXMuZHRzICs9IChwYXlsb2FkWzE4XSAmIDB4MDYpID4+PiAxOyAvLyBPUiBieSB0aGUgdHdvIExTQnNcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdGhlIGRhdGEgc2VjdGlvbiBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFBFUyBoZWFkZXIuXG4gICAgICAgIC8vIHBlc19oZWFkZXJfZGF0YV9sZW5ndGggc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzXG4gICAgICAgIC8vIHRoYXQgZm9sbG93IHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGZpZWxkLlxuXG5cbiAgICAgICAgcGVzLmRhdGEgPSBwYXlsb2FkLnN1YmFycmF5KDkgKyBwYXlsb2FkWzhdKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICAqIFBhc3MgY29tcGxldGVseSBwYXJzZWQgUEVTIHBhY2tldHMgdG8gdGhlIG5leHQgc3RyZWFtIGluIHRoZSBwaXBlbGluZVxuICAgICAgICoqL1xuICAgICAgZmx1c2hTdHJlYW0gPSBmdW5jdGlvbiBmbHVzaFN0cmVhbShzdHJlYW0kJDEsIHR5cGUsIGZvcmNlRmx1c2gpIHtcbiAgICAgICAgdmFyIHBhY2tldERhdGEgPSBuZXcgVWludDhBcnJheShzdHJlYW0kJDEuc2l6ZSksXG4gICAgICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sXG4gICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgICAgICBwYWNrZXRGbHVzaGFibGUgPSBmYWxzZSxcbiAgICAgICAgICAgIGZyYWdtZW50OyAvLyBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggYnVmZmVyZWQgZGF0YSBmb3IgYSBjb21wbGV0ZVxuICAgICAgICAvLyBQRVMgaGVhZGVyXG5cbiAgICAgICAgaWYgKCFzdHJlYW0kJDEuZGF0YS5sZW5ndGggfHwgc3RyZWFtJCQxLnNpemUgPCA5KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQudHJhY2tJZCA9IHN0cmVhbSQkMS5kYXRhWzBdLnBpZDsgLy8gcmVhc3NlbWJsZSB0aGUgcGFja2V0XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbSQkMS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZnJhZ21lbnQgPSBzdHJlYW0kJDEuZGF0YVtpXTtcbiAgICAgICAgICBwYWNrZXREYXRhLnNldChmcmFnbWVudC5kYXRhLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSBmcmFnbWVudC5kYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIH0gLy8gcGFyc2UgYXNzZW1ibGVkIHBhY2tldCdzIFBFUyBoZWFkZXJcblxuXG4gICAgICAgIHBhcnNlUGVzKHBhY2tldERhdGEsIGV2ZW50KTsgLy8gbm9uLXZpZGVvIFBFUyBwYWNrZXRzIE1VU1QgaGF2ZSBhIG5vbi16ZXJvIFBFU19wYWNrZXRfbGVuZ3RoXG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHN0cmVhbSBkYXRhIHRvIGZpbGwgdGhlIHBhY2tldFxuXG4gICAgICAgIHBhY2tldEZsdXNoYWJsZSA9IHR5cGUgPT09ICd2aWRlbycgfHwgZXZlbnQucGFja2V0TGVuZ3RoIDw9IHN0cmVhbSQkMS5zaXplOyAvLyBmbHVzaCBwZW5kaW5nIHBhY2tldHMgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIHJpZ2h0XG5cbiAgICAgICAgaWYgKGZvcmNlRmx1c2ggfHwgcGFja2V0Rmx1c2hhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtJCQxLnNpemUgPSAwO1xuICAgICAgICAgIHN0cmVhbSQkMS5kYXRhLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gLy8gb25seSBlbWl0IHBhY2tldHMgdGhhdCBhcmUgY29tcGxldGUuIHRoaXMgaXMgdG8gYXZvaWQgYXNzZW1ibGluZ1xuICAgICAgICAvLyBpbmNvbXBsZXRlIFBFUyBwYWNrZXRzIGR1ZSB0byBwb29yIHNlZ21lbnRhdGlvblxuXG5cbiAgICAgICAgaWYgKHBhY2tldEZsdXNoYWJsZSkge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX0VsZW1lbnRhcnlTdHJlYW0ucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcbiAgICAgIC8qKlxuICAgICAgICogSWRlbnRpZmllcyBNMlRTIHBhY2tldCB0eXBlcyBhbmQgcGFyc2VzIFBFUyBwYWNrZXRzIHVzaW5nIG1ldGFkYXRhXG4gICAgICAgKiBwYXJzZWQgZnJvbSB0aGUgUE1UXG4gICAgICAgKiovXG5cblxuICAgICAgdGhpcy5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgKHtcbiAgICAgICAgICBwYXQ6IGZ1bmN0aW9uIHBhdCgpIHsvLyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBQTVQgdG8gYXJyaXZlIGFzIHdlbGwgYmVmb3JlIHdlXG4gICAgICAgICAgICAvLyBoYXZlIGFueSBtZWFuaW5nZnVsIG1ldGFkYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXM6IGZ1bmN0aW9uIHBlcygpIHtcbiAgICAgICAgICAgIHZhciBzdHJlYW0kJDEsIHN0cmVhbVR5cGU7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5zdHJlYW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2Ugc3RyZWFtVHlwZXMuSDI2NF9TVFJFQU1fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBzdHJlYW1UeXBlcy5IMjY0X1NUUkVBTV9UWVBFOlxuICAgICAgICAgICAgICAgIHN0cmVhbSQkMSA9IHZpZGVvO1xuICAgICAgICAgICAgICAgIHN0cmVhbVR5cGUgPSAndmlkZW8nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2Ugc3RyZWFtVHlwZXMuQURUU19TVFJFQU1fVFlQRTpcbiAgICAgICAgICAgICAgICBzdHJlYW0kJDEgPSBhdWRpbztcbiAgICAgICAgICAgICAgICBzdHJlYW1UeXBlID0gJ2F1ZGlvJztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHN0cmVhbVR5cGVzLk1FVEFEQVRBX1NUUkVBTV9UWVBFOlxuICAgICAgICAgICAgICAgIHN0cmVhbSQkMSA9IHRpbWVkTWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgc3RyZWFtVHlwZSA9ICd0aW1lZC1tZXRhZGF0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdW5rbm93biBzdHJlYW0gdHlwZXNcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IC8vIGlmIGEgbmV3IHBhY2tldCBpcyBzdGFydGluZywgd2UgY2FuIGZsdXNoIHRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAgIC8vIHBhY2tldFxuXG5cbiAgICAgICAgICAgIGlmIChkYXRhLnBheWxvYWRVbml0U3RhcnRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgZmx1c2hTdHJlYW0oc3RyZWFtJCQxLCBzdHJlYW1UeXBlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gYnVmZmVyIHRoaXMgZnJhZ21lbnQgdW50aWwgd2UgYXJlIHN1cmUgd2UndmUgcmVjZWl2ZWQgdGhlXG4gICAgICAgICAgICAvLyBjb21wbGV0ZSBwYXlsb2FkXG5cblxuICAgICAgICAgICAgc3RyZWFtJCQxLmRhdGEucHVzaChkYXRhKTtcbiAgICAgICAgICAgIHN0cmVhbSQkMS5zaXplICs9IGRhdGEuZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcG10OiBmdW5jdGlvbiBwbXQoKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdtZXRhZGF0YScsXG4gICAgICAgICAgICAgIHRyYWNrczogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9ncmFtTWFwVGFibGUgPSBkYXRhLnByb2dyYW1NYXBUYWJsZTsgLy8gdHJhbnNsYXRlIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zIHRvIHRyYWNrc1xuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbU1hcFRhYmxlLnZpZGVvICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnRyYWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0aW1lbGluZVN0YXJ0SW5mbzoge1xuICAgICAgICAgICAgICAgICAgYmFzZU1lZGlhRGVjb2RlVGltZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWQ6ICtwcm9ncmFtTWFwVGFibGUudmlkZW8sXG4gICAgICAgICAgICAgICAgY29kZWM6ICdhdmMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd2aWRlbydcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9ncmFtTWFwVGFibGUuYXVkaW8gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZXZlbnQudHJhY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpbWVsaW5lU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBiYXNlTWVkaWFEZWNvZGVUaW1lOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpZDogK3Byb2dyYW1NYXBUYWJsZS5hdWRpbyxcbiAgICAgICAgICAgICAgICBjb2RlYzogJ2FkdHMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhdWRpbydcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pW2RhdGEudHlwZV0oKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZpZGVvLnNpemUgPSAwO1xuICAgICAgICB2aWRlby5kYXRhLmxlbmd0aCA9IDA7XG4gICAgICAgIGF1ZGlvLnNpemUgPSAwO1xuICAgICAgICBhdWRpby5kYXRhLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmVzZXQnKTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIEZsdXNoIGFueSByZW1haW5pbmcgaW5wdXQuIFZpZGVvIFBFUyBwYWNrZXRzIG1heSBiZSBvZiB2YXJpYWJsZVxuICAgICAgICogbGVuZ3RoLiBOb3JtYWxseSwgdGhlIHN0YXJ0IG9mIGEgbmV3IHZpZGVvIHBhY2tldCBjYW4gdHJpZ2dlciB0aGVcbiAgICAgICAqIGZpbmFsaXphdGlvbiBvZiB0aGUgcHJldmlvdXMgcGFja2V0LiBUaGF0IGlzIG5vdCBwb3NzaWJsZSBpZiBub1xuICAgICAgICogbW9yZSB2aWRlbyBpcyBmb3J0aGNvbWluZywgaG93ZXZlci4gSW4gdGhhdCBjYXNlLCBzb21lIG90aGVyXG4gICAgICAgKiBtZWNoYW5pc20gKGxpa2UgdGhlIGVuZCBvZiB0aGUgZmlsZSkgaGFzIHRvIGJlIGVtcGxveWVkLiBXaGVuIGl0IGlzXG4gICAgICAgKiBjbGVhciB0aGF0IG5vIGFkZGl0aW9uYWwgZGF0YSBpcyBmb3J0aGNvbWluZywgY2FsbGluZyB0aGlzIG1ldGhvZFxuICAgICAgICogd2lsbCBmbHVzaCB0aGUgYnVmZmVyZWQgcGFja2V0cy5cbiAgICAgICAqL1xuXG5cbiAgICAgIHRoaXMuZmx1c2hTdHJlYW1zXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gISFUSElTIE9SREVSIElTIElNUE9SVEFOVCEhXG4gICAgICAgIC8vIHZpZGVvIGZpcnN0IHRoZW4gYXVkaW9cbiAgICAgICAgZmx1c2hTdHJlYW0odmlkZW8sICd2aWRlbycpO1xuICAgICAgICBmbHVzaFN0cmVhbShhdWRpbywgJ2F1ZGlvJyk7XG4gICAgICAgIGZsdXNoU3RyZWFtKHRpbWVkTWV0YWRhdGEsICd0aW1lZC1tZXRhZGF0YScpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mbHVzaFN0cmVhbXNfKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignZG9uZScpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgX0VsZW1lbnRhcnlTdHJlYW0ucHJvdG90eXBlID0gbmV3IHN0cmVhbSgpO1xuICAgIHZhciBtMnRzID0ge1xuICAgICAgUEFUX1BJRDogMHgwMDAwLFxuICAgICAgTVAyVF9QQUNLRVRfTEVOR1RIOiBNUDJUX1BBQ0tFVF9MRU5HVEgsXG4gICAgICBUcmFuc3BvcnRQYWNrZXRTdHJlYW06IF9UcmFuc3BvcnRQYWNrZXRTdHJlYW0sXG4gICAgICBUcmFuc3BvcnRQYXJzZVN0cmVhbTogX1RyYW5zcG9ydFBhcnNlU3RyZWFtLFxuICAgICAgRWxlbWVudGFyeVN0cmVhbTogX0VsZW1lbnRhcnlTdHJlYW0sXG4gICAgICBUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbTogVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0kMSxcbiAgICAgIENhcHRpb25TdHJlYW06IGNhcHRpb25TdHJlYW0uQ2FwdGlvblN0cmVhbSxcbiAgICAgIENlYTYwOFN0cmVhbTogY2FwdGlvblN0cmVhbS5DZWE2MDhTdHJlYW0sXG4gICAgICBNZXRhZGF0YVN0cmVhbTogbWV0YWRhdGFTdHJlYW1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgdHlwZSBpbiBzdHJlYW1UeXBlcykge1xuICAgICAgaWYgKHN0cmVhbVR5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSB7XG4gICAgICAgIG0ydHNbdHlwZV0gPSBzdHJlYW1UeXBlc1t0eXBlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbTJ0c18xID0gbTJ0cztcbiAgICB2YXIgT05FX1NFQ09ORF9JTl9UUyQyID0gY2xvY2suT05FX1NFQ09ORF9JTl9UUztcblxuICAgIHZhciBfQWR0c1N0cmVhbTtcblxuICAgIHZhciBBRFRTX1NBTVBMSU5HX0ZSRVFVRU5DSUVTID0gWzk2MDAwLCA4ODIwMCwgNjQwMDAsIDQ4MDAwLCA0NDEwMCwgMzIwMDAsIDI0MDAwLCAyMjA1MCwgMTYwMDAsIDEyMDAwLCAxMTAyNSwgODAwMCwgNzM1MF07XG4gICAgLypcbiAgICAgKiBBY2NlcHRzIGEgRWxlbWVudGFyeVN0cmVhbSBhbmQgZW1pdHMgZGF0YSBldmVudHMgd2l0aCBwYXJzZWRcbiAgICAgKiBBQUMgQXVkaW8gRnJhbWVzIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuIElucHV0IGF1ZGlvIGluIEFEVFNcbiAgICAgKiBmb3JtYXQgaXMgdW5wYWNrZWQgYW5kIHJlLWVtaXR0ZWQgYXMgQUFDIGZyYW1lcy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cDovL3dpa2kubXVsdGltZWRpYS5jeC9pbmRleC5waHA/dGl0bGU9QURUU1xuICAgICAqIEBzZWUgaHR0cDovL3dpa2kubXVsdGltZWRpYS5jeC8/dGl0bGU9VW5kZXJzdGFuZGluZ19BQUNcbiAgICAgKi9cblxuICAgIF9BZHRzU3RyZWFtID0gZnVuY3Rpb24gQWR0c1N0cmVhbShoYW5kbGVQYXJ0aWFsU2VnbWVudHMpIHtcbiAgICAgIHZhciBidWZmZXIsXG4gICAgICAgICAgZnJhbWVOdW0gPSAwO1xuXG4gICAgICBfQWR0c1N0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGZyYW1lTGVuZ3RoLFxuICAgICAgICAgICAgcHJvdGVjdGlvblNraXBCeXRlcyxcbiAgICAgICAgICAgIGZyYW1lRW5kLFxuICAgICAgICAgICAgb2xkQnVmZmVyLFxuICAgICAgICAgICAgc2FtcGxlQ291bnQsXG4gICAgICAgICAgICBhZHRzRnJhbWVEdXJhdGlvbjtcblxuICAgICAgICBpZiAoIWhhbmRsZVBhcnRpYWxTZWdtZW50cykge1xuICAgICAgICAgIGZyYW1lTnVtID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYWNrZXQudHlwZSAhPT0gJ2F1ZGlvJykge1xuICAgICAgICAgIC8vIGlnbm9yZSBub24tYXVkaW8gZGF0YVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBQcmVwZW5kIGFueSBkYXRhIGluIHRoZSBidWZmZXIgdG8gdGhlIGlucHV0IGRhdGEgc28gdGhhdCB3ZSBjYW4gcGFyc2VcbiAgICAgICAgLy8gYWFjIGZyYW1lcyB0aGUgY3Jvc3MgYSBQRVMgcGFja2V0IGJvdW5kYXJ5XG5cblxuICAgICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgICAgb2xkQnVmZmVyID0gYnVmZmVyO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KG9sZEJ1ZmZlci5ieXRlTGVuZ3RoICsgcGFja2V0LmRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgYnVmZmVyLnNldChvbGRCdWZmZXIpO1xuICAgICAgICAgIGJ1ZmZlci5zZXQocGFja2V0LmRhdGEsIG9sZEJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXIgPSBwYWNrZXQuZGF0YTtcbiAgICAgICAgfSAvLyB1bnBhY2sgYW55IEFEVFMgZnJhbWVzIHdoaWNoIGhhdmUgYmVlbiBmdWxseSByZWNlaXZlZFxuICAgICAgICAvLyBmb3IgZGV0YWlscyBvbiB0aGUgQURUUyBoZWFkZXIsIHNlZSBodHRwOi8vd2lraS5tdWx0aW1lZGlhLmN4L2luZGV4LnBocD90aXRsZT1BRFRTXG5cblxuICAgICAgICB3aGlsZSAoaSArIDUgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gTG9vayBmb3IgdGhlIHN0YXJ0IG9mIGFuIEFEVFMgaGVhZGVyLi5cbiAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9PSAweEZGIHx8IChidWZmZXJbaSArIDFdICYgMHhGNikgIT09IDB4RjApIHtcbiAgICAgICAgICAgIC8vIElmIGEgdmFsaWQgaGVhZGVyIHdhcyBub3QgZm91bmQsICBqdW1wIG9uZSBmb3J3YXJkIGFuZCBhdHRlbXB0IHRvXG4gICAgICAgICAgICAvLyBmaW5kIGEgdmFsaWQgQURUUyBoZWFkZXIgc3RhcnRpbmcgYXQgdGhlIG5leHQgYnl0ZVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBUaGUgcHJvdGVjdGlvbiBza2lwIGJpdCB0ZWxscyB1cyBpZiB3ZSBoYXZlIDIgYnl0ZXMgb2YgQ1JDIGRhdGEgYXQgdGhlXG4gICAgICAgICAgLy8gZW5kIG9mIHRoZSBBRFRTIGhlYWRlclxuXG5cbiAgICAgICAgICBwcm90ZWN0aW9uU2tpcEJ5dGVzID0gKH5idWZmZXJbaSArIDFdICYgMHgwMSkgKiAyOyAvLyBGcmFtZSBsZW5ndGggaXMgYSAxMyBiaXQgaW50ZWdlciBzdGFydGluZyAxNiBiaXRzIGZyb20gdGhlXG4gICAgICAgICAgLy8gZW5kIG9mIHRoZSBzeW5jIHNlcXVlbmNlXG5cbiAgICAgICAgICBmcmFtZUxlbmd0aCA9IChidWZmZXJbaSArIDNdICYgMHgwMykgPDwgMTEgfCBidWZmZXJbaSArIDRdIDw8IDMgfCAoYnVmZmVyW2kgKyA1XSAmIDB4ZTApID4+IDU7XG4gICAgICAgICAgc2FtcGxlQ291bnQgPSAoKGJ1ZmZlcltpICsgNl0gJiAweDAzKSArIDEpICogMTAyNDtcbiAgICAgICAgICBhZHRzRnJhbWVEdXJhdGlvbiA9IHNhbXBsZUNvdW50ICogT05FX1NFQ09ORF9JTl9UUyQyIC8gQURUU19TQU1QTElOR19GUkVRVUVOQ0lFU1soYnVmZmVyW2kgKyAyXSAmIDB4M2MpID4+PiAyXTtcbiAgICAgICAgICBmcmFtZUVuZCA9IGkgKyBmcmFtZUxlbmd0aDsgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSB0byBhY3R1YWxseSBmaW5pc2ggdGhpcyBBRFRTIGZyYW1lLCByZXR1cm5cbiAgICAgICAgICAvLyBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhXG5cbiAgICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGggPCBmcmFtZUVuZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBkZWxpdmVyIHRoZSBjb21wbGV0ZSBBQUMgZnJhbWVcblxuXG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgICAgICAgcHRzOiBwYWNrZXQucHRzICsgZnJhbWVOdW0gKiBhZHRzRnJhbWVEdXJhdGlvbixcbiAgICAgICAgICAgIGR0czogcGFja2V0LmR0cyArIGZyYW1lTnVtICogYWR0c0ZyYW1lRHVyYXRpb24sXG4gICAgICAgICAgICBzYW1wbGVDb3VudDogc2FtcGxlQ291bnQsXG4gICAgICAgICAgICBhdWRpb29iamVjdHR5cGU6IChidWZmZXJbaSArIDJdID4+PiA2ICYgMHgwMykgKyAxLFxuICAgICAgICAgICAgY2hhbm5lbGNvdW50OiAoYnVmZmVyW2kgKyAyXSAmIDEpIDw8IDIgfCAoYnVmZmVyW2kgKyAzXSAmIDB4YzApID4+PiA2LFxuICAgICAgICAgICAgc2FtcGxlcmF0ZTogQURUU19TQU1QTElOR19GUkVRVUVOQ0lFU1soYnVmZmVyW2kgKyAyXSAmIDB4M2MpID4+PiAyXSxcbiAgICAgICAgICAgIHNhbXBsaW5nZnJlcXVlbmN5aW5kZXg6IChidWZmZXJbaSArIDJdICYgMHgzYykgPj4+IDIsXG4gICAgICAgICAgICAvLyBhc3N1bWUgSVNPL0lFQyAxNDQ5Ni0xMiBBdWRpb1NhbXBsZUVudHJ5IGRlZmF1bHQgb2YgMTZcbiAgICAgICAgICAgIHNhbXBsZXNpemU6IDE2LFxuICAgICAgICAgICAgZGF0YTogYnVmZmVyLnN1YmFycmF5KGkgKyA3ICsgcHJvdGVjdGlvblNraXBCeXRlcywgZnJhbWVFbmQpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZnJhbWVOdW0rKzsgLy8gSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgY2xlYXIgaXQgYW5kIHJldHVyblxuXG4gICAgICAgICAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSBmcmFtZUVuZCkge1xuICAgICAgICAgICAgYnVmZmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gLy8gUmVtb3ZlIHRoZSBmaW5pc2hlZCBmcmFtZSBmcm9tIHRoZSBidWZmZXIgYW5kIHN0YXJ0IHRoZSBwcm9jZXNzIGFnYWluXG5cblxuICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShmcmFtZUVuZCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZyYW1lTnVtID0gMDtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkb25lJyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBidWZmZXIgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmVzZXQnKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZW5kVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJ1ZmZlciA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdlbmRlZHRpbWVsaW5lJyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfQWR0c1N0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgdmFyIGFkdHMgPSBfQWR0c1N0cmVhbTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKi9cblxuICAgIHZhciBFeHBHb2xvbWI7XG4gICAgLyoqXG4gICAgICogUGFyc2VyIGZvciBleHBvbmVudGlhbCBHb2xvbWIgY29kZXMsIGEgdmFyaWFibGUtYml0d2lkdGggbnVtYmVyIGVuY29kaW5nXG4gICAgICogc2NoZW1lIHVzZWQgYnkgaDI2NC5cbiAgICAgKi9cblxuICAgIEV4cEdvbG9tYiA9IGZ1bmN0aW9uIEV4cEdvbG9tYih3b3JraW5nRGF0YSkge1xuICAgICAgdmFyIC8vIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBleGFtaW5lIGluIHdvcmtpbmdEYXRhXG4gICAgICB3b3JraW5nQnl0ZXNBdmFpbGFibGUgPSB3b3JraW5nRGF0YS5ieXRlTGVuZ3RoLFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHdvcmQgYmVpbmcgZXhhbWluZWRcbiAgICAgIHdvcmtpbmdXb3JkID0gMCxcbiAgICAgICAgICAvLyA6dWludFxuICAgICAgLy8gdGhlIG51bWJlciBvZiBiaXRzIGxlZnQgdG8gZXhhbWluZSBpbiB0aGUgY3VycmVudCB3b3JkXG4gICAgICB3b3JraW5nQml0c0F2YWlsYWJsZSA9IDA7IC8vIDp1aW50O1xuICAgICAgLy8gKCk6dWludFxuXG4gICAgICB0aGlzLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIDggKiB3b3JraW5nQnl0ZXNBdmFpbGFibGU7XG4gICAgICB9OyAvLyAoKTp1aW50XG5cblxuICAgICAgdGhpcy5iaXRzQXZhaWxhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gOCAqIHdvcmtpbmdCeXRlc0F2YWlsYWJsZSArIHdvcmtpbmdCaXRzQXZhaWxhYmxlO1xuICAgICAgfTsgLy8gKCk6dm9pZFxuXG5cbiAgICAgIHRoaXMubG9hZFdvcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHdvcmtpbmdEYXRhLmJ5dGVMZW5ndGggLSB3b3JraW5nQnl0ZXNBdmFpbGFibGUsXG4gICAgICAgICAgICB3b3JraW5nQnl0ZXMgPSBuZXcgVWludDhBcnJheSg0KSxcbiAgICAgICAgICAgIGF2YWlsYWJsZUJ5dGVzID0gTWF0aC5taW4oNCwgd29ya2luZ0J5dGVzQXZhaWxhYmxlKTtcblxuICAgICAgICBpZiAoYXZhaWxhYmxlQnl0ZXMgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGJ5dGVzIGF2YWlsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgd29ya2luZ0J5dGVzLnNldCh3b3JraW5nRGF0YS5zdWJhcnJheShwb3NpdGlvbiwgcG9zaXRpb24gKyBhdmFpbGFibGVCeXRlcykpO1xuICAgICAgICB3b3JraW5nV29yZCA9IG5ldyBEYXRhVmlldyh3b3JraW5nQnl0ZXMuYnVmZmVyKS5nZXRVaW50MzIoMCk7IC8vIHRyYWNrIHRoZSBhbW91bnQgb2Ygd29ya2luZ0RhdGEgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWRcblxuICAgICAgICB3b3JraW5nQml0c0F2YWlsYWJsZSA9IGF2YWlsYWJsZUJ5dGVzICogODtcbiAgICAgICAgd29ya2luZ0J5dGVzQXZhaWxhYmxlIC09IGF2YWlsYWJsZUJ5dGVzO1xuICAgICAgfTsgLy8gKGNvdW50OmludCk6dm9pZFxuXG5cbiAgICAgIHRoaXMuc2tpcEJpdHMgPSBmdW5jdGlvbiAoY291bnQpIHtcbiAgICAgICAgdmFyIHNraXBCeXRlczsgLy8gOmludFxuXG4gICAgICAgIGlmICh3b3JraW5nQml0c0F2YWlsYWJsZSA+IGNvdW50KSB7XG4gICAgICAgICAgd29ya2luZ1dvcmQgPDw9IGNvdW50O1xuICAgICAgICAgIHdvcmtpbmdCaXRzQXZhaWxhYmxlIC09IGNvdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvdW50IC09IHdvcmtpbmdCaXRzQXZhaWxhYmxlO1xuICAgICAgICAgIHNraXBCeXRlcyA9IE1hdGguZmxvb3IoY291bnQgLyA4KTtcbiAgICAgICAgICBjb3VudCAtPSBza2lwQnl0ZXMgKiA4O1xuICAgICAgICAgIHdvcmtpbmdCeXRlc0F2YWlsYWJsZSAtPSBza2lwQnl0ZXM7XG4gICAgICAgICAgdGhpcy5sb2FkV29yZCgpO1xuICAgICAgICAgIHdvcmtpbmdXb3JkIDw8PSBjb3VudDtcbiAgICAgICAgICB3b3JraW5nQml0c0F2YWlsYWJsZSAtPSBjb3VudDtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gKHNpemU6aW50KTp1aW50XG5cblxuICAgICAgdGhpcy5yZWFkQml0cyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHZhciBiaXRzID0gTWF0aC5taW4od29ya2luZ0JpdHNBdmFpbGFibGUsIHNpemUpLFxuICAgICAgICAgICAgLy8gOnVpbnRcbiAgICAgICAgdmFsdSA9IHdvcmtpbmdXb3JkID4+PiAzMiAtIGJpdHM7IC8vIDp1aW50XG4gICAgICAgIC8vIGlmIHNpemUgPiAzMSwgaGFuZGxlIGVycm9yXG5cbiAgICAgICAgd29ya2luZ0JpdHNBdmFpbGFibGUgLT0gYml0cztcblxuICAgICAgICBpZiAod29ya2luZ0JpdHNBdmFpbGFibGUgPiAwKSB7XG4gICAgICAgICAgd29ya2luZ1dvcmQgPDw9IGJpdHM7XG4gICAgICAgIH0gZWxzZSBpZiAod29ya2luZ0J5dGVzQXZhaWxhYmxlID4gMCkge1xuICAgICAgICAgIHRoaXMubG9hZFdvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpdHMgPSBzaXplIC0gYml0cztcblxuICAgICAgICBpZiAoYml0cyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdmFsdSA8PCBiaXRzIHwgdGhpcy5yZWFkQml0cyhiaXRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1O1xuICAgICAgfTsgLy8gKCk6dWludFxuXG5cbiAgICAgIHRoaXMuc2tpcExlYWRpbmdaZXJvcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxlYWRpbmdaZXJvQ291bnQ7IC8vIDp1aW50XG5cbiAgICAgICAgZm9yIChsZWFkaW5nWmVyb0NvdW50ID0gMDsgbGVhZGluZ1plcm9Db3VudCA8IHdvcmtpbmdCaXRzQXZhaWxhYmxlOyArK2xlYWRpbmdaZXJvQ291bnQpIHtcbiAgICAgICAgICBpZiAoKHdvcmtpbmdXb3JkICYgMHg4MDAwMDAwMCA+Pj4gbGVhZGluZ1plcm9Db3VudCkgIT09IDApIHtcbiAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBiaXQgb2Ygd29ya2luZyB3b3JkIGlzIDFcbiAgICAgICAgICAgIHdvcmtpbmdXb3JkIDw8PSBsZWFkaW5nWmVyb0NvdW50O1xuICAgICAgICAgICAgd29ya2luZ0JpdHNBdmFpbGFibGUgLT0gbGVhZGluZ1plcm9Db3VudDtcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nWmVyb0NvdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyB3ZSBleGhhdXN0ZWQgd29ya2luZ1dvcmQgYW5kIHN0aWxsIGhhdmUgbm90IGZvdW5kIGEgMVxuXG5cbiAgICAgICAgdGhpcy5sb2FkV29yZCgpO1xuICAgICAgICByZXR1cm4gbGVhZGluZ1plcm9Db3VudCArIHRoaXMuc2tpcExlYWRpbmdaZXJvcygpO1xuICAgICAgfTsgLy8gKCk6dm9pZFxuXG5cbiAgICAgIHRoaXMuc2tpcFVuc2lnbmVkRXhwR29sb21iID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNraXBCaXRzKDEgKyB0aGlzLnNraXBMZWFkaW5nWmVyb3MoKSk7XG4gICAgICB9OyAvLyAoKTp2b2lkXG5cblxuICAgICAgdGhpcy5za2lwRXhwR29sb21iID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNraXBCaXRzKDEgKyB0aGlzLnNraXBMZWFkaW5nWmVyb3MoKSk7XG4gICAgICB9OyAvLyAoKTp1aW50XG5cblxuICAgICAgdGhpcy5yZWFkVW5zaWduZWRFeHBHb2xvbWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjbHogPSB0aGlzLnNraXBMZWFkaW5nWmVyb3MoKTsgLy8gOnVpbnRcblxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQml0cyhjbHogKyAxKSAtIDE7XG4gICAgICB9OyAvLyAoKTppbnRcblxuXG4gICAgICB0aGlzLnJlYWRFeHBHb2xvbWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ID0gdGhpcy5yZWFkVW5zaWduZWRFeHBHb2xvbWIoKTsgLy8gOmludFxuXG4gICAgICAgIGlmICgweDAxICYgdmFsdSkge1xuICAgICAgICAgIC8vIHRoZSBudW1iZXIgaXMgb2RkIGlmIHRoZSBsb3cgb3JkZXIgYml0IGlzIHNldFxuICAgICAgICAgIHJldHVybiAxICsgdmFsdSA+Pj4gMTsgLy8gYWRkIDEgdG8gbWFrZSBpdCBldmVuLCBhbmQgZGl2aWRlIGJ5IDJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAtMSAqICh2YWx1ID4+PiAxKTsgLy8gZGl2aWRlIGJ5IHR3byB0aGVuIG1ha2UgaXQgbmVnYXRpdmVcbiAgICAgIH07IC8vIFNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zXG4gICAgICAvLyA6Qm9vbGVhblxuXG5cbiAgICAgIHRoaXMucmVhZEJvb2xlYW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRCaXRzKDEpID09PSAxO1xuICAgICAgfTsgLy8gKCk6aW50XG5cblxuICAgICAgdGhpcy5yZWFkVW5zaWduZWRCeXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQml0cyg4KTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubG9hZFdvcmQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGV4cEdvbG9tYiA9IEV4cEdvbG9tYjtcblxuICAgIHZhciBfSDI2NFN0cmVhbSwgX05hbEJ5dGVTdHJlYW07XG5cbiAgICB2YXIgUFJPRklMRVNfV0lUSF9PUFRJT05BTF9TUFNfREFUQTtcbiAgICAvKipcbiAgICAgKiBBY2NlcHRzIGEgTkFMIHVuaXQgYnl0ZSBzdHJlYW0gYW5kIHVucGFja3MgdGhlIGVtYmVkZGVkIE5BTCB1bml0cy5cbiAgICAgKi9cblxuICAgIF9OYWxCeXRlU3RyZWFtID0gZnVuY3Rpb24gTmFsQnl0ZVN0cmVhbSgpIHtcbiAgICAgIHZhciBzeW5jUG9pbnQgPSAwLFxuICAgICAgICAgIGksXG4gICAgICAgICAgYnVmZmVyO1xuXG4gICAgICBfTmFsQnl0ZVN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgLypcbiAgICAgICAqIFNjYW5zIGEgYnl0ZSBzdHJlYW0gYW5kIHRyaWdnZXJzIGEgZGF0YSBldmVudCB3aXRoIHRoZSBOQUwgdW5pdHMgZm91bmQuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBFdmVudCByZWNlaXZlZCBmcm9tIEgyNjRTdHJlYW1cbiAgICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YS5kYXRhIFRoZSBoMjY0IGJ5dGUgc3RyZWFtIHRvIGJlIHNjYW5uZWRcbiAgICAgICAqXG4gICAgICAgKiBAc2VlIEgyNjRTdHJlYW0ucHVzaFxuICAgICAgICovXG5cblxuICAgICAgdGhpcy5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHN3YXBCdWZmZXI7XG5cbiAgICAgICAgaWYgKCFidWZmZXIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhLmRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dhcEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5ieXRlTGVuZ3RoICsgZGF0YS5kYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgIHN3YXBCdWZmZXIuc2V0KGJ1ZmZlcik7XG4gICAgICAgICAgc3dhcEJ1ZmZlci5zZXQoZGF0YS5kYXRhLCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgYnVmZmVyID0gc3dhcEJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aDsgLy8gUmVjLiBJVFUtVCBILjI2NCwgQW5uZXggQlxuICAgICAgICAvLyBzY2FuIGZvciBOQUwgdW5pdCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGEgbWF0Y2ggbG9va3MgbGlrZSB0aGlzOlxuICAgICAgICAvLyAwIDAgMSAuLiBOQUwgLi4gMCAwIDFcbiAgICAgICAgLy8gXiBzeW5jIHBvaW50ICAgICAgICBeIGlcbiAgICAgICAgLy8gb3IgdGhpczpcbiAgICAgICAgLy8gMCAwIDEgLi4gTkFMIC4uIDAgMCAwXG4gICAgICAgIC8vIF4gc3luYyBwb2ludCAgICAgICAgXiBpXG4gICAgICAgIC8vIGFkdmFuY2UgdGhlIHN5bmMgcG9pbnQgdG8gYSBOQUwgc3RhcnQsIGlmIG5lY2Vzc2FyeVxuXG4gICAgICAgIGZvciAoOyBzeW5jUG9pbnQgPCBsZW4gLSAzOyBzeW5jUG9pbnQrKykge1xuICAgICAgICAgIGlmIChidWZmZXJbc3luY1BvaW50ICsgMl0gPT09IDEpIHtcbiAgICAgICAgICAgIC8vIHRoZSBzeW5jIHBvaW50IGlzIHByb3Blcmx5IGFsaWduZWRcbiAgICAgICAgICAgIGkgPSBzeW5jUG9pbnQgKyA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgICAvLyBsb29rIGF0IHRoZSBjdXJyZW50IGJ5dGUgdG8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mXG4gICAgICAgICAgLy8gYSBOQUwgdW5pdCBib3VuZGFyeVxuICAgICAgICAgIHN3aXRjaCAoYnVmZmVyW2ldKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIC8vIHNraXAgcGFzdCBub24tc3luYyBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltpIC0gMV0gIT09IDApIHtcbiAgICAgICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyW2kgLSAyXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSAvLyBkZWxpdmVyIHRoZSBOQUwgdW5pdCBpZiBpdCBpc24ndCBlbXB0eVxuXG5cbiAgICAgICAgICAgICAgaWYgKHN5bmNQb2ludCArIDMgIT09IGkgLSAyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgYnVmZmVyLnN1YmFycmF5KHN5bmNQb2ludCArIDMsIGkgLSAyKSk7XG4gICAgICAgICAgICAgIH0gLy8gZHJvcCB0cmFpbGluZyB6ZXJvZXNcblxuXG4gICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGJ1ZmZlcltpXSAhPT0gMSAmJiBpIDwgbGVuKTtcblxuICAgICAgICAgICAgICBzeW5jUG9pbnQgPSBpIC0gMjtcbiAgICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAvLyBza2lwIHBhc3Qgbm9uLXN5bmMgc2VxdWVuY2VzXG4gICAgICAgICAgICAgIGlmIChidWZmZXJbaSAtIDFdICE9PSAwIHx8IGJ1ZmZlcltpIC0gMl0gIT09IDApIHtcbiAgICAgICAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gLy8gZGVsaXZlciB0aGUgTkFMIHVuaXRcblxuXG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YScsIGJ1ZmZlci5zdWJhcnJheShzeW5jUG9pbnQgKyAzLCBpIC0gMikpO1xuICAgICAgICAgICAgICBzeW5jUG9pbnQgPSBpIC0gMjtcbiAgICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgYnl0ZSBpc24ndCBhIG9uZSBvciB6ZXJvLCBzbyBpdCBjYW5ub3QgYmUgcGFydFxuICAgICAgICAgICAgICAvLyBvZiBhIHN5bmMgc2VxdWVuY2VcbiAgICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZmlsdGVyIG91dCB0aGUgTkFMIHVuaXRzIHRoYXQgd2VyZSBkZWxpdmVyZWRcblxuXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShzeW5jUG9pbnQpO1xuICAgICAgICBpIC09IHN5bmNQb2ludDtcbiAgICAgICAgc3luY1BvaW50ID0gMDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHN5bmNQb2ludCA9IDA7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmVzZXQnKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGRlbGl2ZXIgdGhlIGxhc3QgYnVmZmVyZWQgTkFMIHVuaXRcbiAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXIuYnl0ZUxlbmd0aCA+IDMpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBidWZmZXIuc3ViYXJyYXkoc3luY1BvaW50ICsgMykpO1xuICAgICAgICB9IC8vIHJlc2V0IHRoZSBzdHJlYW0gc3RhdGVcblxuXG4gICAgICAgIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHN5bmNQb2ludCA9IDA7XG4gICAgICAgIHRoaXMudHJpZ2dlcignZG9uZScpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lbmRUaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2VuZGVkdGltZWxpbmUnKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9OYWxCeXRlU3RyZWFtLnByb3RvdHlwZSA9IG5ldyBzdHJlYW0oKTsgLy8gdmFsdWVzIG9mIHByb2ZpbGVfaWRjIHRoYXQgaW5kaWNhdGUgYWRkaXRpb25hbCBmaWVsZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBTUFNcbiAgICAvLyBzZWUgUmVjb21tZW5kYXRpb24gSVRVLVQgSC4yNjQgKDQvMjAxMyksXG4gICAgLy8gNy4zLjIuMS4xIFNlcXVlbmNlIHBhcmFtZXRlciBzZXQgZGF0YSBzeW50YXhcblxuICAgIFBST0ZJTEVTX1dJVEhfT1BUSU9OQUxfU1BTX0RBVEEgPSB7XG4gICAgICAxMDA6IHRydWUsXG4gICAgICAxMTA6IHRydWUsXG4gICAgICAxMjI6IHRydWUsXG4gICAgICAyNDQ6IHRydWUsXG4gICAgICA0NDogdHJ1ZSxcbiAgICAgIDgzOiB0cnVlLFxuICAgICAgODY6IHRydWUsXG4gICAgICAxMTg6IHRydWUsXG4gICAgICAxMjg6IHRydWUsXG4gICAgICAxMzg6IHRydWUsXG4gICAgICAxMzk6IHRydWUsXG4gICAgICAxMzQ6IHRydWVcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFjY2VwdHMgaW5wdXQgZnJvbSBhIEVsZW1lbnRhcnlTdHJlYW0gYW5kIHByb2R1Y2VzIEguMjY0IE5BTCB1bml0IGRhdGFcbiAgICAgKiBldmVudHMuXG4gICAgICovXG5cbiAgICBfSDI2NFN0cmVhbSA9IGZ1bmN0aW9uIEgyNjRTdHJlYW0oKSB7XG4gICAgICB2YXIgbmFsQnl0ZVN0cmVhbSA9IG5ldyBfTmFsQnl0ZVN0cmVhbSgpLFxuICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgdHJhY2tJZCxcbiAgICAgICAgICBjdXJyZW50UHRzLFxuICAgICAgICAgIGN1cnJlbnREdHMsXG4gICAgICAgICAgZGlzY2FyZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyxcbiAgICAgICAgICByZWFkU2VxdWVuY2VQYXJhbWV0ZXJTZXQsXG4gICAgICAgICAgc2tpcFNjYWxpbmdMaXN0O1xuXG4gICAgICBfSDI2NFN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG4gICAgICBzZWxmID0gdGhpcztcbiAgICAgIC8qXG4gICAgICAgKiBQdXNoZXMgYSBwYWNrZXQgZnJvbSBhIHN0cmVhbSBvbnRvIHRoZSBOYWxCeXRlU3RyZWFtXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhY2tldCAtIEEgcGFja2V0IHJlY2VpdmVkIGZyb20gYSBzdHJlYW1cbiAgICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gcGFja2V0LmRhdGEgLSBUaGUgcmF3IGJ5dGVzIG9mIHRoZSBwYWNrZXRcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBwYWNrZXQuZHRzIC0gRGVjb2RlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2V0XG4gICAgICAgKiBAcGFyYW0ge051bWJlcn0gcGFja2V0LnB0cyAtIFByZXNlbnRhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIHBhY2tldFxuICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHBhY2tldC50cmFja0lkIC0gVGhlIGlkIG9mIHRoZSBoMjY0IHRyYWNrIHRoaXMgcGFja2V0IGNhbWUgZnJvbVxuICAgICAgICogQHBhcmFtIHsoJ3ZpZGVvJ3wnYXVkaW8nKX0gcGFja2V0LnR5cGUgLSBUaGUgdHlwZSBvZiBwYWNrZXRcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgdGhpcy5wdXNoID0gZnVuY3Rpb24gKHBhY2tldCkge1xuICAgICAgICBpZiAocGFja2V0LnR5cGUgIT09ICd2aWRlbycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cmFja0lkID0gcGFja2V0LnRyYWNrSWQ7XG4gICAgICAgIGN1cnJlbnRQdHMgPSBwYWNrZXQucHRzO1xuICAgICAgICBjdXJyZW50RHRzID0gcGFja2V0LmR0cztcbiAgICAgICAgbmFsQnl0ZVN0cmVhbS5wdXNoKHBhY2tldCk7XG4gICAgICB9O1xuICAgICAgLypcbiAgICAgICAqIElkZW50aWZ5IE5BTCB1bml0IHR5cGVzIGFuZCBwYXNzIG9uIHRoZSBOQUxVLCB0cmFja0lkLCBwcmVzZW50YXRpb24gYW5kIGRlY29kZSB0aW1lc3RhbXBzXG4gICAgICAgKiBmb3IgdGhlIE5BTFVzIHRvIHRoZSBuZXh0IHN0cmVhbSBjb21wb25lbnQuXG4gICAgICAgKiBBbHNvLCBwcmVwcm9jZXNzIGNhcHRpb24gYW5kIHNlcXVlbmNlIHBhcmFtZXRlciBOQUxVcy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGEgLSBBIE5BTCB1bml0IGlkZW50aWZpZWQgYnkgYE5hbEJ5dGVTdHJlYW0ucHVzaGBcbiAgICAgICAqIEBzZWUgTmFsQnl0ZVN0cmVhbS5wdXNoXG4gICAgICAgKi9cblxuXG4gICAgICBuYWxCeXRlU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0ge1xuICAgICAgICAgIHRyYWNrSWQ6IHRyYWNrSWQsXG4gICAgICAgICAgcHRzOiBjdXJyZW50UHRzLFxuICAgICAgICAgIGR0czogY3VycmVudER0cyxcbiAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChkYXRhWzBdICYgMHgxZikge1xuICAgICAgICAgIGNhc2UgMHgwNTpcbiAgICAgICAgICAgIGV2ZW50Lm5hbFVuaXRUeXBlID0gJ3NsaWNlX2xheWVyX3dpdGhvdXRfcGFydGl0aW9uaW5nX3Jic3BfaWRyJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDA2OlxuICAgICAgICAgICAgZXZlbnQubmFsVW5pdFR5cGUgPSAnc2VpX3Jic3AnO1xuICAgICAgICAgICAgZXZlbnQuZXNjYXBlZFJCU1AgPSBkaXNjYXJkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGRhdGEuc3ViYXJyYXkoMSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDc6XG4gICAgICAgICAgICBldmVudC5uYWxVbml0VHlwZSA9ICdzZXFfcGFyYW1ldGVyX3NldF9yYnNwJztcbiAgICAgICAgICAgIGV2ZW50LmVzY2FwZWRSQlNQID0gZGlzY2FyZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhkYXRhLnN1YmFycmF5KDEpKTtcbiAgICAgICAgICAgIGV2ZW50LmNvbmZpZyA9IHJlYWRTZXF1ZW5jZVBhcmFtZXRlclNldChldmVudC5lc2NhcGVkUkJTUCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHgwODpcbiAgICAgICAgICAgIGV2ZW50Lm5hbFVuaXRUeXBlID0gJ3BpY19wYXJhbWV0ZXJfc2V0X3Jic3AnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDk6XG4gICAgICAgICAgICBldmVudC5uYWxVbml0VHlwZSA9ICdhY2Nlc3NfdW5pdF9kZWxpbWl0ZXJfcmJzcCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBUaGlzIHRyaWdnZXJzIGRhdGEgb24gdGhlIEgyNjRTdHJlYW1cblxuXG4gICAgICAgIHNlbGYudHJpZ2dlcignZGF0YScsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgICAgbmFsQnl0ZVN0cmVhbS5vbignZG9uZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdkb25lJyk7XG4gICAgICB9KTtcbiAgICAgIG5hbEJ5dGVTdHJlYW0ub24oJ3BhcnRpYWxkb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoJ3BhcnRpYWxkb25lJyk7XG4gICAgICB9KTtcbiAgICAgIG5hbEJ5dGVTdHJlYW0ub24oJ3Jlc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc2V0Jyk7XG4gICAgICB9KTtcbiAgICAgIG5hbEJ5dGVTdHJlYW0ub24oJ2VuZGVkdGltZWxpbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcignZW5kZWR0aW1lbGluZScpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5hbEJ5dGVTdHJlYW0uZmx1c2goKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucGFydGlhbEZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBuYWxCeXRlU3RyZWFtLnBhcnRpYWxGbHVzaCgpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbmFsQnl0ZVN0cmVhbS5yZXNldCgpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lbmRUaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbmFsQnl0ZVN0cmVhbS5lbmRUaW1lbGluZSgpO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogQWR2YW5jZSB0aGUgRXhwR29sb21iIGRlY29kZXIgcGFzdCBhIHNjYWxpbmcgbGlzdC4gVGhlIHNjYWxpbmdcbiAgICAgICAqIGxpc3QgaXMgb3B0aW9uYWxseSB0cmFuc21pdHRlZCBhcyBwYXJ0IG9mIGEgc2VxdWVuY2UgcGFyYW1ldGVyXG4gICAgICAgKiBzZXQgYW5kIGlzIG5vdCByZWxldmFudCB0byB0cmFuc211eGluZy5cbiAgICAgICAqIEBwYXJhbSBjb3VudCB7bnVtYmVyfSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyBzY2FsaW5nIGxpc3RcbiAgICAgICAqIEBwYXJhbSBleHBHb2xvbWJEZWNvZGVyIHtvYmplY3R9IGFuIEV4cEdvbG9tYiBwb2ludGVkIHRvIHRoZVxuICAgICAgICogc3RhcnQgb2YgYSBzY2FsaW5nIGxpc3RcbiAgICAgICAqIEBzZWUgUmVjb21tZW5kYXRpb24gSVRVLVQgSC4yNjQsIFNlY3Rpb24gNy4zLjIuMS4xLjFcbiAgICAgICAqL1xuXG5cbiAgICAgIHNraXBTY2FsaW5nTGlzdCA9IGZ1bmN0aW9uIHNraXBTY2FsaW5nTGlzdChjb3VudCwgZXhwR29sb21iRGVjb2Rlcikge1xuICAgICAgICB2YXIgbGFzdFNjYWxlID0gOCxcbiAgICAgICAgICAgIG5leHRTY2FsZSA9IDgsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgZGVsdGFTY2FsZTtcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIGlmIChuZXh0U2NhbGUgIT09IDApIHtcbiAgICAgICAgICAgIGRlbHRhU2NhbGUgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRFeHBHb2xvbWIoKTtcbiAgICAgICAgICAgIG5leHRTY2FsZSA9IChsYXN0U2NhbGUgKyBkZWx0YVNjYWxlICsgMjU2KSAlIDI1NjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0U2NhbGUgPSBuZXh0U2NhbGUgPT09IDAgPyBsYXN0U2NhbGUgOiBuZXh0U2NhbGU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIEV4cHVuZ2UgYW55IFwiRW11bGF0aW9uIFByZXZlbnRpb25cIiBieXRlcyBmcm9tIGEgXCJSYXcgQnl0ZVxuICAgICAgICogU2VxdWVuY2UgUGF5bG9hZFwiXG4gICAgICAgKiBAcGFyYW0gZGF0YSB7VWludDhBcnJheX0gdGhlIGJ5dGVzIG9mIGEgUkJTUCBmcm9tIGEgTkFMXG4gICAgICAgKiB1bml0XG4gICAgICAgKiBAcmV0dXJuIHtVaW50OEFycmF5fSB0aGUgUkJTUCB3aXRob3V0IGFueSBFbXVsYXRpb25cbiAgICAgICAqIFByZXZlbnRpb24gQnl0ZXNcbiAgICAgICAqL1xuXG5cbiAgICAgIGRpc2NhcmRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgPSBmdW5jdGlvbiBkaXNjYXJkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGRhdGEpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aCxcbiAgICAgICAgICAgIGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucyA9IFtdLFxuICAgICAgICAgICAgaSA9IDEsXG4gICAgICAgICAgICBuZXdMZW5ndGgsXG4gICAgICAgICAgICBuZXdEYXRhOyAvLyBGaW5kIGFsbCBgRW11bGF0aW9uIFByZXZlbnRpb24gQnl0ZXNgXG5cbiAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggLSAyKSB7XG4gICAgICAgICAgaWYgKGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDB4MDMpIHtcbiAgICAgICAgICAgIGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucy5wdXNoKGkgKyAyKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJZiBubyBFbXVsYXRpb24gUHJldmVudGlvbiBCeXRlcyB3ZXJlIGZvdW5kIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbFxuICAgICAgICAvLyBhcnJheVxuXG5cbiAgICAgICAgaWYgKGVtdWxhdGlvblByZXZlbnRpb25CeXRlc1Bvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gaG9sZCB0aGUgTkFMIHVuaXQgZGF0YVxuXG5cbiAgICAgICAgbmV3TGVuZ3RoID0gbGVuZ3RoIC0gZW11bGF0aW9uUHJldmVudGlvbkJ5dGVzUG9zaXRpb25zLmxlbmd0aDtcbiAgICAgICAgbmV3RGF0YSA9IG5ldyBVaW50OEFycmF5KG5ld0xlbmd0aCk7XG4gICAgICAgIHZhciBzb3VyY2VJbmRleCA9IDA7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG5ld0xlbmd0aDsgc291cmNlSW5kZXgrKywgaSsrKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSBlbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNQb3NpdGlvbnNbMF0pIHtcbiAgICAgICAgICAgIC8vIFNraXAgdGhpcyBieXRlXG4gICAgICAgICAgICBzb3VyY2VJbmRleCsrOyAvLyBSZW1vdmUgdGhpcyBwb3NpdGlvbiBpbmRleFxuXG4gICAgICAgICAgICBlbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNQb3NpdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdEYXRhW2ldID0gZGF0YVtzb3VyY2VJbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3RGF0YTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIFJlYWQgYSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0IGFuZCByZXR1cm4gc29tZSBpbnRlcmVzdGluZyB2aWRlb1xuICAgICAgICogcHJvcGVydGllcy4gQSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0IGlzIHRoZSBIMjY0IG1ldGFkYXRhIHRoYXRcbiAgICAgICAqIGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiB1cGNvbWluZyB2aWRlbyBmcmFtZXMuXG4gICAgICAgKiBAcGFyYW0gZGF0YSB7VWludDhBcnJheX0gdGhlIGJ5dGVzIG9mIGEgc2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgICogQHJldHVybiB7b2JqZWN0fSBhbiBvYmplY3Qgd2l0aCBjb25maWd1cmF0aW9uIHBhcnNlZCBmcm9tIHRoZVxuICAgICAgICogc2VxdWVuY2UgcGFyYW1ldGVyIHNldCwgaW5jbHVkaW5nIHRoZSBkaW1lbnNpb25zIG9mIHRoZVxuICAgICAgICogYXNzb2NpYXRlZCB2aWRlbyBmcmFtZXMuXG4gICAgICAgKi9cblxuXG4gICAgICByZWFkU2VxdWVuY2VQYXJhbWV0ZXJTZXQgPSBmdW5jdGlvbiByZWFkU2VxdWVuY2VQYXJhbWV0ZXJTZXQoZGF0YSkge1xuICAgICAgICB2YXIgZnJhbWVDcm9wTGVmdE9mZnNldCA9IDAsXG4gICAgICAgICAgICBmcmFtZUNyb3BSaWdodE9mZnNldCA9IDAsXG4gICAgICAgICAgICBmcmFtZUNyb3BUb3BPZmZzZXQgPSAwLFxuICAgICAgICAgICAgZnJhbWVDcm9wQm90dG9tT2Zmc2V0ID0gMCxcbiAgICAgICAgICAgIHNhclNjYWxlID0gMSxcbiAgICAgICAgICAgIGV4cEdvbG9tYkRlY29kZXIsXG4gICAgICAgICAgICBwcm9maWxlSWRjLFxuICAgICAgICAgICAgbGV2ZWxJZGMsXG4gICAgICAgICAgICBwcm9maWxlQ29tcGF0aWJpbGl0eSxcbiAgICAgICAgICAgIGNocm9tYUZvcm1hdElkYyxcbiAgICAgICAgICAgIHBpY09yZGVyQ250VHlwZSxcbiAgICAgICAgICAgIG51bVJlZkZyYW1lc0luUGljT3JkZXJDbnRDeWNsZSxcbiAgICAgICAgICAgIHBpY1dpZHRoSW5NYnNNaW51czEsXG4gICAgICAgICAgICBwaWNIZWlnaHRJbk1hcFVuaXRzTWludXMxLFxuICAgICAgICAgICAgZnJhbWVNYnNPbmx5RmxhZyxcbiAgICAgICAgICAgIHNjYWxpbmdMaXN0Q291bnQsXG4gICAgICAgICAgICBzYXJSYXRpbyxcbiAgICAgICAgICAgIGFzcGVjdFJhdGlvSWRjLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZXhwR29sb21iRGVjb2RlciA9IG5ldyBleHBHb2xvbWIoZGF0YSk7XG4gICAgICAgIHByb2ZpbGVJZGMgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEJ5dGUoKTsgLy8gcHJvZmlsZV9pZGNcblxuICAgICAgICBwcm9maWxlQ29tcGF0aWJpbGl0eSA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkQnl0ZSgpOyAvLyBjb25zdHJhaW50X3NldFswLTVdX2ZsYWdcblxuICAgICAgICBsZXZlbElkYyA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkQnl0ZSgpOyAvLyBsZXZlbF9pZGMgdSg4KVxuXG4gICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcFVuc2lnbmVkRXhwR29sb21iKCk7IC8vIHNlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gICAgICAgIC8vIHNvbWUgcHJvZmlsZXMgaGF2ZSBtb3JlIG9wdGlvbmFsIGRhdGEgd2UgZG9uJ3QgbmVlZFxuXG4gICAgICAgIGlmIChQUk9GSUxFU19XSVRIX09QVElPTkFMX1NQU19EQVRBW3Byb2ZpbGVJZGNdKSB7XG4gICAgICAgICAgY2hyb21hRm9ybWF0SWRjID0gZXhwR29sb21iRGVjb2Rlci5yZWFkVW5zaWduZWRFeHBHb2xvbWIoKTtcblxuICAgICAgICAgIGlmIChjaHJvbWFGb3JtYXRJZGMgPT09IDMpIHtcbiAgICAgICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcEJpdHMoMSk7IC8vIHNlcGFyYXRlX2NvbG91cl9wbGFuZV9mbGFnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXhwR29sb21iRGVjb2Rlci5za2lwVW5zaWduZWRFeHBHb2xvbWIoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG5cbiAgICAgICAgICBleHBHb2xvbWJEZWNvZGVyLnNraXBVbnNpZ25lZEV4cEdvbG9tYigpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuXG4gICAgICAgICAgZXhwR29sb21iRGVjb2Rlci5za2lwQml0cygxKTsgLy8gcXBwcmltZV95X3plcm9fdHJhbnNmb3JtX2J5cGFzc19mbGFnXG5cbiAgICAgICAgICBpZiAoZXhwR29sb21iRGVjb2Rlci5yZWFkQm9vbGVhbigpKSB7XG4gICAgICAgICAgICAvLyBzZXFfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnXG4gICAgICAgICAgICBzY2FsaW5nTGlzdENvdW50ID0gY2hyb21hRm9ybWF0SWRjICE9PSAzID8gOCA6IDEyO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NhbGluZ0xpc3RDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChleHBHb2xvbWJEZWNvZGVyLnJlYWRCb29sZWFuKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXFfc2NhbGluZ19saXN0X3ByZXNlbnRfZmxhZ1sgaSBdXG4gICAgICAgICAgICAgICAgaWYgKGkgPCA2KSB7XG4gICAgICAgICAgICAgICAgICBza2lwU2NhbGluZ0xpc3QoMTYsIGV4cEdvbG9tYkRlY29kZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBza2lwU2NhbGluZ0xpc3QoNjQsIGV4cEdvbG9tYkRlY29kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcFVuc2lnbmVkRXhwR29sb21iKCk7IC8vIGxvZzJfbWF4X2ZyYW1lX251bV9taW51czRcblxuICAgICAgICBwaWNPcmRlckNudFR5cGUgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEV4cEdvbG9tYigpO1xuXG4gICAgICAgIGlmIChwaWNPcmRlckNudFR5cGUgPT09IDApIHtcbiAgICAgICAgICBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEV4cEdvbG9tYigpOyAvLyBsb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czRcbiAgICAgICAgfSBlbHNlIGlmIChwaWNPcmRlckNudFR5cGUgPT09IDEpIHtcbiAgICAgICAgICBleHBHb2xvbWJEZWNvZGVyLnNraXBCaXRzKDEpOyAvLyBkZWx0YV9waWNfb3JkZXJfYWx3YXlzX3plcm9fZmxhZ1xuXG4gICAgICAgICAgZXhwR29sb21iRGVjb2Rlci5za2lwRXhwR29sb21iKCk7IC8vIG9mZnNldF9mb3Jfbm9uX3JlZl9waWNcblxuICAgICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcEV4cEdvbG9tYigpOyAvLyBvZmZzZXRfZm9yX3RvcF90b19ib3R0b21fZmllbGRcblxuICAgICAgICAgIG51bVJlZkZyYW1lc0luUGljT3JkZXJDbnRDeWNsZSA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkRXhwR29sb21iKCk7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUmVmRnJhbWVzSW5QaWNPcmRlckNudEN5Y2xlOyBpKyspIHtcbiAgICAgICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcEV4cEdvbG9tYigpOyAvLyBvZmZzZXRfZm9yX3JlZl9mcmFtZVsgaSBdXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXhwR29sb21iRGVjb2Rlci5za2lwVW5zaWduZWRFeHBHb2xvbWIoKTsgLy8gbWF4X251bV9yZWZfZnJhbWVzXG5cbiAgICAgICAgZXhwR29sb21iRGVjb2Rlci5za2lwQml0cygxKTsgLy8gZ2Fwc19pbl9mcmFtZV9udW1fdmFsdWVfYWxsb3dlZF9mbGFnXG5cbiAgICAgICAgcGljV2lkdGhJbk1ic01pbnVzMSA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkRXhwR29sb21iKCk7XG4gICAgICAgIHBpY0hlaWdodEluTWFwVW5pdHNNaW51czEgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEV4cEdvbG9tYigpO1xuICAgICAgICBmcmFtZU1ic09ubHlGbGFnID0gZXhwR29sb21iRGVjb2Rlci5yZWFkQml0cygxKTtcblxuICAgICAgICBpZiAoZnJhbWVNYnNPbmx5RmxhZyA9PT0gMCkge1xuICAgICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcEJpdHMoMSk7IC8vIG1iX2FkYXB0aXZlX2ZyYW1lX2ZpZWxkX2ZsYWdcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cEdvbG9tYkRlY29kZXIuc2tpcEJpdHMoMSk7IC8vIGRpcmVjdF84eDhfaW5mZXJlbmNlX2ZsYWdcblxuICAgICAgICBpZiAoZXhwR29sb21iRGVjb2Rlci5yZWFkQm9vbGVhbigpKSB7XG4gICAgICAgICAgLy8gZnJhbWVfY3JvcHBpbmdfZmxhZ1xuICAgICAgICAgIGZyYW1lQ3JvcExlZnRPZmZzZXQgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEV4cEdvbG9tYigpO1xuICAgICAgICAgIGZyYW1lQ3JvcFJpZ2h0T2Zmc2V0ID0gZXhwR29sb21iRGVjb2Rlci5yZWFkVW5zaWduZWRFeHBHb2xvbWIoKTtcbiAgICAgICAgICBmcmFtZUNyb3BUb3BPZmZzZXQgPSBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEV4cEdvbG9tYigpO1xuICAgICAgICAgIGZyYW1lQ3JvcEJvdHRvbU9mZnNldCA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkRXhwR29sb21iKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXhwR29sb21iRGVjb2Rlci5yZWFkQm9vbGVhbigpKSB7XG4gICAgICAgICAgLy8gdnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnXG4gICAgICAgICAgaWYgKGV4cEdvbG9tYkRlY29kZXIucmVhZEJvb2xlYW4oKSkge1xuICAgICAgICAgICAgLy8gYXNwZWN0X3JhdGlvX2luZm9fcHJlc2VudF9mbGFnXG4gICAgICAgICAgICBhc3BlY3RSYXRpb0lkYyA9IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkQnl0ZSgpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGFzcGVjdFJhdGlvSWRjKSB7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBzYXJSYXRpbyA9IFsxLCAxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMTIsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMTAsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMTYsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbNDAsIDMzXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMjQsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMjAsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbMzIsIDExXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbODAsIDMzXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHNhclJhdGlvID0gWzE4LCAxMV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICBzYXJSYXRpbyA9IFsxNSwgMTFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbNjQsIDMzXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgIHNhclJhdGlvID0gWzE2MCwgOTldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgc2FyUmF0aW8gPSBbNCwgM107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICBzYXJSYXRpbyA9IFszLCAyXTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgIHNhclJhdGlvID0gWzIsIDFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMjU1OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNhclJhdGlvID0gW2V4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkQnl0ZSgpIDw8IDggfCBleHBHb2xvbWJEZWNvZGVyLnJlYWRVbnNpZ25lZEJ5dGUoKSwgZXhwR29sb21iRGVjb2Rlci5yZWFkVW5zaWduZWRCeXRlKCkgPDwgOCB8IGV4cEdvbG9tYkRlY29kZXIucmVhZFVuc2lnbmVkQnl0ZSgpXTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNhclJhdGlvKSB7XG4gICAgICAgICAgICAgIHNhclNjYWxlID0gc2FyUmF0aW9bMF0gLyBzYXJSYXRpb1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb2ZpbGVJZGM6IHByb2ZpbGVJZGMsXG4gICAgICAgICAgbGV2ZWxJZGM6IGxldmVsSWRjLFxuICAgICAgICAgIHByb2ZpbGVDb21wYXRpYmlsaXR5OiBwcm9maWxlQ29tcGF0aWJpbGl0eSxcbiAgICAgICAgICB3aWR0aDogTWF0aC5jZWlsKCgocGljV2lkdGhJbk1ic01pbnVzMSArIDEpICogMTYgLSBmcmFtZUNyb3BMZWZ0T2Zmc2V0ICogMiAtIGZyYW1lQ3JvcFJpZ2h0T2Zmc2V0ICogMikgKiBzYXJTY2FsZSksXG4gICAgICAgICAgaGVpZ2h0OiAoMiAtIGZyYW1lTWJzT25seUZsYWcpICogKHBpY0hlaWdodEluTWFwVW5pdHNNaW51czEgKyAxKSAqIDE2IC0gZnJhbWVDcm9wVG9wT2Zmc2V0ICogMiAtIGZyYW1lQ3JvcEJvdHRvbU9mZnNldCAqIDIsXG4gICAgICAgICAgc2FyUmF0aW86IHNhclJhdGlvXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfSDI2NFN0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgdmFyIGgyNjQgPSB7XG4gICAgICBIMjY0U3RyZWFtOiBfSDI2NFN0cmVhbSxcbiAgICAgIE5hbEJ5dGVTdHJlYW06IF9OYWxCeXRlU3RyZWFtXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBtdXguanNcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgQnJpZ2h0Y292ZVxuICAgICAqIExpY2Vuc2VkIEFwYWNoZS0yLjAgaHR0cHM6Ly9naXRodWIuY29tL3ZpZGVvanMvbXV4LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgKlxuICAgICAqIFV0aWxpdGllcyB0byBkZXRlY3QgYmFzaWMgcHJvcGVydGllcyBhbmQgbWV0YWRhdGEgYWJvdXQgQWFjIGRhdGEuXG4gICAgICovXG5cbiAgICB2YXIgQURUU19TQU1QTElOR19GUkVRVUVOQ0lFUyQxID0gWzk2MDAwLCA4ODIwMCwgNjQwMDAsIDQ4MDAwLCA0NDEwMCwgMzIwMDAsIDI0MDAwLCAyMjA1MCwgMTYwMDAsIDEyMDAwLCAxMTAyNSwgODAwMCwgNzM1MF07XG5cbiAgICB2YXIgaXNMaWtlbHlBYWNEYXRhID0gZnVuY3Rpb24gaXNMaWtlbHlBYWNEYXRhKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhWzBdID09PSAnSScuY2hhckNvZGVBdCgwKSAmJiBkYXRhWzFdID09PSAnRCcuY2hhckNvZGVBdCgwKSAmJiBkYXRhWzJdID09PSAnMycuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgcGFyc2VTeW5jU2FmZUludGVnZXIkMSA9IGZ1bmN0aW9uIHBhcnNlU3luY1NhZmVJbnRlZ2VyKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhWzBdIDw8IDIxIHwgZGF0YVsxXSA8PCAxNCB8IGRhdGFbMl0gPDwgNyB8IGRhdGFbM107XG4gICAgfTsgLy8gcmV0dXJuIGEgcGVyY2VudC1lbmNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgYnl0ZSByYW5nZVxuICAgIC8vIEBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QZXJjZW50LWVuY29kaW5nXG5cblxuICAgIHZhciBwZXJjZW50RW5jb2RlJDEgPSBmdW5jdGlvbiBwZXJjZW50RW5jb2RlKGJ5dGVzLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaSxcbiAgICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gJyUnICsgKCcwMCcgKyBieXRlc1tpXS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9OyAvLyByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGJ5dGUgcmFuZ2UsXG4gICAgLy8gaW50ZXJwcmV0ZWQgYXMgSVNPLTg4NTktMS5cblxuXG4gICAgdmFyIHBhcnNlSXNvODg1OTEkMSA9IGZ1bmN0aW9uIHBhcnNlSXNvODg1OTEoYnl0ZXMsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiB1bmVzY2FwZShwZXJjZW50RW5jb2RlJDEoYnl0ZXMsIHN0YXJ0LCBlbmQpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgfTtcblxuICAgIHZhciBwYXJzZUlkM1RhZ1NpemUgPSBmdW5jdGlvbiBwYXJzZUlkM1RhZ1NpemUoaGVhZGVyLCBieXRlSW5kZXgpIHtcbiAgICAgIHZhciByZXR1cm5TaXplID0gaGVhZGVyW2J5dGVJbmRleCArIDZdIDw8IDIxIHwgaGVhZGVyW2J5dGVJbmRleCArIDddIDw8IDE0IHwgaGVhZGVyW2J5dGVJbmRleCArIDhdIDw8IDcgfCBoZWFkZXJbYnl0ZUluZGV4ICsgOV0sXG4gICAgICAgICAgZmxhZ3MgPSBoZWFkZXJbYnl0ZUluZGV4ICsgNV0sXG4gICAgICAgICAgZm9vdGVyUHJlc2VudCA9IChmbGFncyAmIDE2KSA+PiA0O1xuXG4gICAgICBpZiAoZm9vdGVyUHJlc2VudCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU2l6ZSArIDIwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuU2l6ZSArIDEwO1xuICAgIH07XG5cbiAgICB2YXIgcGFyc2VBZHRzU2l6ZSA9IGZ1bmN0aW9uIHBhcnNlQWR0c1NpemUoaGVhZGVyLCBieXRlSW5kZXgpIHtcbiAgICAgIHZhciBsb3dUaHJlZSA9IChoZWFkZXJbYnl0ZUluZGV4ICsgNV0gJiAweEUwKSA+PiA1LFxuICAgICAgICAgIG1pZGRsZSA9IGhlYWRlcltieXRlSW5kZXggKyA0XSA8PCAzLFxuICAgICAgICAgIGhpZ2hUd28gPSBoZWFkZXJbYnl0ZUluZGV4ICsgM10gJiAweDMgPDwgMTE7XG4gICAgICByZXR1cm4gaGlnaFR3byB8IG1pZGRsZSB8IGxvd1RocmVlO1xuICAgIH07XG5cbiAgICB2YXIgcGFyc2VUeXBlID0gZnVuY3Rpb24gcGFyc2VUeXBlKGhlYWRlciwgYnl0ZUluZGV4KSB7XG4gICAgICBpZiAoaGVhZGVyW2J5dGVJbmRleF0gPT09ICdJJy5jaGFyQ29kZUF0KDApICYmIGhlYWRlcltieXRlSW5kZXggKyAxXSA9PT0gJ0QnLmNoYXJDb2RlQXQoMCkgJiYgaGVhZGVyW2J5dGVJbmRleCArIDJdID09PSAnMycuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICByZXR1cm4gJ3RpbWVkLW1ldGFkYXRhJztcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyW2J5dGVJbmRleF0gJiAweGZmID09PSAweGZmICYmIChoZWFkZXJbYnl0ZUluZGV4ICsgMV0gJiAweGYwKSA9PT0gMHhmMCkge1xuICAgICAgICByZXR1cm4gJ2F1ZGlvJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBwYXJzZVNhbXBsZVJhdGUgPSBmdW5jdGlvbiBwYXJzZVNhbXBsZVJhdGUocGFja2V0KSB7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpICsgNSA8IHBhY2tldC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHBhY2tldFtpXSAhPT0gMHhGRiB8fCAocGFja2V0W2kgKyAxXSAmIDB4RjYpICE9PSAweEYwKSB7XG4gICAgICAgICAgLy8gSWYgYSB2YWxpZCBoZWFkZXIgd2FzIG5vdCBmb3VuZCwgIGp1bXAgb25lIGZvcndhcmQgYW5kIGF0dGVtcHQgdG9cbiAgICAgICAgICAvLyBmaW5kIGEgdmFsaWQgQURUUyBoZWFkZXIgc3RhcnRpbmcgYXQgdGhlIG5leHQgYnl0ZVxuICAgICAgICAgIGkrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBRFRTX1NBTVBMSU5HX0ZSRVFVRU5DSUVTJDFbKHBhY2tldFtpICsgMl0gJiAweDNjKSA+Pj4gMl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgcGFyc2VBYWNUaW1lc3RhbXAgPSBmdW5jdGlvbiBwYXJzZUFhY1RpbWVzdGFtcChwYWNrZXQpIHtcbiAgICAgIHZhciBmcmFtZVN0YXJ0LCBmcmFtZVNpemUsIGZyYW1lLCBmcmFtZUhlYWRlcjsgLy8gZmluZCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGZyYW1lIGFuZCB0aGUgZW5kIG9mIHRoZSB0YWdcblxuICAgICAgZnJhbWVTdGFydCA9IDEwO1xuXG4gICAgICBpZiAocGFja2V0WzVdICYgMHg0MCkge1xuICAgICAgICAvLyBhZHZhbmNlIHRoZSBmcmFtZSBzdGFydCBwYXN0IHRoZSBleHRlbmRlZCBoZWFkZXJcbiAgICAgICAgZnJhbWVTdGFydCArPSA0OyAvLyBoZWFkZXIgc2l6ZSBmaWVsZFxuXG4gICAgICAgIGZyYW1lU3RhcnQgKz0gcGFyc2VTeW5jU2FmZUludGVnZXIkMShwYWNrZXQuc3ViYXJyYXkoMTAsIDE0KSk7XG4gICAgICB9IC8vIHBhcnNlIG9uZSBvciBtb3JlIElEMyBmcmFtZXNcbiAgICAgIC8vIGh0dHA6Ly9pZDMub3JnL2lkM3YyLjMuMCNJRDN2Ml9mcmFtZV9vdmVydmlld1xuXG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBmcmFtZVxuICAgICAgICBmcmFtZVNpemUgPSBwYXJzZVN5bmNTYWZlSW50ZWdlciQxKHBhY2tldC5zdWJhcnJheShmcmFtZVN0YXJ0ICsgNCwgZnJhbWVTdGFydCArIDgpKTtcblxuICAgICAgICBpZiAoZnJhbWVTaXplIDwgMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJhbWVIZWFkZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhY2tldFtmcmFtZVN0YXJ0XSwgcGFja2V0W2ZyYW1lU3RhcnQgKyAxXSwgcGFja2V0W2ZyYW1lU3RhcnQgKyAyXSwgcGFja2V0W2ZyYW1lU3RhcnQgKyAzXSk7XG5cbiAgICAgICAgaWYgKGZyYW1lSGVhZGVyID09PSAnUFJJVicpIHtcbiAgICAgICAgICBmcmFtZSA9IHBhY2tldC5zdWJhcnJheShmcmFtZVN0YXJ0ICsgMTAsIGZyYW1lU3RhcnQgKyBmcmFtZVNpemUgKyAxMCk7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZyYW1lW2ldID09PSAwKSB7XG4gICAgICAgICAgICAgIHZhciBvd25lciA9IHBhcnNlSXNvODg1OTEkMShmcmFtZSwgMCwgaSk7XG5cbiAgICAgICAgICAgICAgaWYgKG93bmVyID09PSAnY29tLmFwcGxlLnN0cmVhbWluZy50cmFuc3BvcnRTdHJlYW1UaW1lc3RhbXAnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBmcmFtZS5zdWJhcnJheShpICsgMSk7XG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSAoZFszXSAmIDB4MDEpIDw8IDMwIHwgZFs0XSA8PCAyMiB8IGRbNV0gPDwgMTQgfCBkWzZdIDw8IDYgfCBkWzddID4+PiAyO1xuICAgICAgICAgICAgICAgIHNpemUgKj0gNDtcbiAgICAgICAgICAgICAgICBzaXplICs9IGRbN10gJiAweDAzO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaXplO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnJhbWVTdGFydCArPSAxMDsgLy8gYWR2YW5jZSBwYXN0IHRoZSBmcmFtZSBoZWFkZXJcblxuICAgICAgICBmcmFtZVN0YXJ0ICs9IGZyYW1lU2l6ZTsgLy8gYWR2YW5jZSBwYXN0IHRoZSBmcmFtZSBib2R5XG4gICAgICB9IHdoaWxlIChmcmFtZVN0YXJ0IDwgcGFja2V0LmJ5dGVMZW5ndGgpO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHV0aWxzID0ge1xuICAgICAgaXNMaWtlbHlBYWNEYXRhOiBpc0xpa2VseUFhY0RhdGEsXG4gICAgICBwYXJzZUlkM1RhZ1NpemU6IHBhcnNlSWQzVGFnU2l6ZSxcbiAgICAgIHBhcnNlQWR0c1NpemU6IHBhcnNlQWR0c1NpemUsXG4gICAgICBwYXJzZVR5cGU6IHBhcnNlVHlwZSxcbiAgICAgIHBhcnNlU2FtcGxlUmF0ZTogcGFyc2VTYW1wbGVSYXRlLFxuICAgICAgcGFyc2VBYWNUaW1lc3RhbXA6IHBhcnNlQWFjVGltZXN0YW1wXG4gICAgfTsgLy8gQ29uc3RhbnRzXG5cbiAgICB2YXIgX0FhY1N0cmVhbTtcbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYW4gaW5jb21pbmcgc3RyZWFtIG9mIGJpbmFyeSBkYXRhIGludG8gQURUUyBhbmQgSUQzIEZyYW1lcy5cbiAgICAgKi9cblxuXG4gICAgX0FhY1N0cmVhbSA9IGZ1bmN0aW9uIEFhY1N0cmVhbSgpIHtcbiAgICAgIHZhciBldmVyeXRoaW5nID0gbmV3IFVpbnQ4QXJyYXkoKSxcbiAgICAgICAgICB0aW1lU3RhbXAgPSAwO1xuXG4gICAgICBfQWFjU3RyZWFtLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7XG5cbiAgICAgIHRoaXMuc2V0VGltZXN0YW1wID0gZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICB0aW1lU3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIGZyYW1lU2l6ZSA9IDAsXG4gICAgICAgICAgICBieXRlSW5kZXggPSAwLFxuICAgICAgICAgICAgYnl0ZXNMZWZ0LFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYWNrZXQsXG4gICAgICAgICAgICB0ZW1wTGVuZ3RoOyAvLyBJZiB0aGVyZSBhcmUgYnl0ZXMgcmVtYWluaW5nIGZyb20gdGhlIGxhc3Qgc2VnbWVudCwgcHJlcGVuZCB0aGVtIHRvIHRoZVxuICAgICAgICAvLyBieXRlcyB0aGF0IHdlcmUgcHVzaGVkIGluXG5cbiAgICAgICAgaWYgKGV2ZXJ5dGhpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgdGVtcExlbmd0aCA9IGV2ZXJ5dGhpbmcubGVuZ3RoO1xuICAgICAgICAgIGV2ZXJ5dGhpbmcgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoICsgdGVtcExlbmd0aCk7XG4gICAgICAgICAgZXZlcnl0aGluZy5zZXQoZXZlcnl0aGluZy5zdWJhcnJheSgwLCB0ZW1wTGVuZ3RoKSk7XG4gICAgICAgICAgZXZlcnl0aGluZy5zZXQoYnl0ZXMsIHRlbXBMZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZXJ5dGhpbmcgPSBieXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChldmVyeXRoaW5nLmxlbmd0aCAtIGJ5dGVJbmRleCA+PSAzKSB7XG4gICAgICAgICAgaWYgKGV2ZXJ5dGhpbmdbYnl0ZUluZGV4XSA9PT0gJ0knLmNoYXJDb2RlQXQoMCkgJiYgZXZlcnl0aGluZ1tieXRlSW5kZXggKyAxXSA9PT0gJ0QnLmNoYXJDb2RlQXQoMCkgJiYgZXZlcnl0aGluZ1tieXRlSW5kZXggKyAyXSA9PT0gJzMnLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgICAgIC8vIEV4aXQgZWFybHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCB0byBwYXJzZVxuICAgICAgICAgICAgLy8gdGhlIElEMyB0YWcgaGVhZGVyXG4gICAgICAgICAgICBpZiAoZXZlcnl0aGluZy5sZW5ndGggLSBieXRlSW5kZXggPCAxMCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgZnJhbWVzaXplXG5cblxuICAgICAgICAgICAgZnJhbWVTaXplID0gdXRpbHMucGFyc2VJZDNUYWdTaXplKGV2ZXJ5dGhpbmcsIGJ5dGVJbmRleCk7IC8vIEV4aXQgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW4gdGhlIGJ1ZmZlclxuICAgICAgICAgICAgLy8gdG8gZW1pdCBhIGZ1bGwgcGFja2V0XG4gICAgICAgICAgICAvLyBBZGQgdG8gYnl0ZUluZGV4IHRvIHN1cHBvcnQgbXVsdGlwbGUgSUQzIHRhZ3MgaW4gc2VxdWVuY2VcblxuICAgICAgICAgICAgaWYgKGJ5dGVJbmRleCArIGZyYW1lU2l6ZSA+IGV2ZXJ5dGhpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaHVuayA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RpbWVkLW1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgZGF0YTogZXZlcnl0aGluZy5zdWJhcnJheShieXRlSW5kZXgsIGJ5dGVJbmRleCArIGZyYW1lU2l6ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgICAgICBieXRlSW5kZXggKz0gZnJhbWVTaXplO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgoZXZlcnl0aGluZ1tieXRlSW5kZXhdICYgMHhmZikgPT09IDB4ZmYgJiYgKGV2ZXJ5dGhpbmdbYnl0ZUluZGV4ICsgMV0gJiAweGYwKSA9PT0gMHhmMCkge1xuICAgICAgICAgICAgLy8gRXhpdCBlYXJseSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIHRvIHBhcnNlXG4gICAgICAgICAgICAvLyB0aGUgQURUUyBmcmFtZSBoZWFkZXJcbiAgICAgICAgICAgIGlmIChldmVyeXRoaW5nLmxlbmd0aCAtIGJ5dGVJbmRleCA8IDcpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyYW1lU2l6ZSA9IHV0aWxzLnBhcnNlQWR0c1NpemUoZXZlcnl0aGluZywgYnl0ZUluZGV4KTsgLy8gRXhpdCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbiB0aGUgYnVmZmVyXG4gICAgICAgICAgICAvLyB0byBlbWl0IGEgZnVsbCBwYWNrZXRcblxuICAgICAgICAgICAgaWYgKGJ5dGVJbmRleCArIGZyYW1lU2l6ZSA+IGV2ZXJ5dGhpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYWNrZXQgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdhdWRpbycsXG4gICAgICAgICAgICAgIGRhdGE6IGV2ZXJ5dGhpbmcuc3ViYXJyYXkoYnl0ZUluZGV4LCBieXRlSW5kZXggKyBmcmFtZVNpemUpLFxuICAgICAgICAgICAgICBwdHM6IHRpbWVTdGFtcCxcbiAgICAgICAgICAgICAgZHRzOiB0aW1lU3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCBwYWNrZXQpO1xuICAgICAgICAgICAgYnl0ZUluZGV4ICs9IGZyYW1lU2l6ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ5dGVJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXNMZWZ0ID0gZXZlcnl0aGluZy5sZW5ndGggLSBieXRlSW5kZXg7XG5cbiAgICAgICAgaWYgKGJ5dGVzTGVmdCA+IDApIHtcbiAgICAgICAgICBldmVyeXRoaW5nID0gZXZlcnl0aGluZy5zdWJhcnJheShieXRlSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZXJ5dGhpbmcgPSBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBldmVyeXRoaW5nID0gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldCcpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lbmRUaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXZlcnl0aGluZyA9IG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignZW5kZWR0aW1lbGluZScpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgX0FhY1N0cmVhbS5wcm90b3R5cGUgPSBuZXcgc3RyZWFtKCk7XG4gICAgdmFyIGFhYyA9IF9BYWNTdHJlYW07XG4gICAgdmFyIEgyNjRTdHJlYW0gPSBoMjY0LkgyNjRTdHJlYW07XG4gICAgdmFyIGlzTGlrZWx5QWFjRGF0YSQxID0gdXRpbHMuaXNMaWtlbHlBYWNEYXRhO1xuICAgIHZhciBPTkVfU0VDT05EX0lOX1RTJDMgPSBjbG9jay5PTkVfU0VDT05EX0lOX1RTOyAvLyBjb25zdGFudHNcblxuICAgIHZhciBBVURJT19QUk9QRVJUSUVTID0gWydhdWRpb29iamVjdHR5cGUnLCAnY2hhbm5lbGNvdW50JywgJ3NhbXBsZXJhdGUnLCAnc2FtcGxpbmdmcmVxdWVuY3lpbmRleCcsICdzYW1wbGVzaXplJ107XG4gICAgdmFyIFZJREVPX1BST1BFUlRJRVMgPSBbJ3dpZHRoJywgJ2hlaWdodCcsICdwcm9maWxlSWRjJywgJ2xldmVsSWRjJywgJ3Byb2ZpbGVDb21wYXRpYmlsaXR5JywgJ3NhclJhdGlvJ107IC8vIG9iamVjdCB0eXBlc1xuXG4gICAgdmFyIF9WaWRlb1NlZ21lbnRTdHJlYW0sIF9BdWRpb1NlZ21lbnRTdHJlYW0sIF9UcmFuc211eGVyLCBfQ29hbGVzY2VTdHJlYW07XG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gYXJyYXlzIChldmVuIHR5cGVkKSBmb3Igc2FtZS1uZXNzXG4gICAgICovXG5cblxuICAgIHZhciBhcnJheUVxdWFscyA9IGZ1bmN0aW9uIGFycmF5RXF1YWxzKGEsIGIpIHtcbiAgICAgIHZhciBpO1xuXG4gICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gY29tcGFyZSB0aGUgdmFsdWUgb2YgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheVxuXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgZ2VuZXJhdGVWaWRlb1NlZ21lbnRUaW1pbmdJbmZvID0gZnVuY3Rpb24gZ2VuZXJhdGVWaWRlb1NlZ21lbnRUaW1pbmdJbmZvKGJhc2VNZWRpYURlY29kZVRpbWUsIHN0YXJ0RHRzLCBzdGFydFB0cywgZW5kRHRzLCBlbmRQdHMsIHByZXBlbmRlZENvbnRlbnREdXJhdGlvbikge1xuICAgICAgdmFyIHB0c09mZnNldEZyb21EdHMgPSBzdGFydFB0cyAtIHN0YXJ0RHRzLFxuICAgICAgICAgIGRlY29kZUR1cmF0aW9uID0gZW5kRHRzIC0gc3RhcnREdHMsXG4gICAgICAgICAgcHJlc2VudGF0aW9uRHVyYXRpb24gPSBlbmRQdHMgLSBzdGFydFB0czsgLy8gVGhlIFBUUyBhbmQgRFRTIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIGFjdHVhbCBzdHJlYW0gdGltZXMgZnJvbSB0aGUgc2VnbWVudCxcbiAgICAgIC8vIGhvd2V2ZXIsIHRoZSBwbGF5ZXIgdGltZSB2YWx1ZXMgd2lsbCByZWZsZWN0IGEgc3RhcnQgZnJvbSB0aGUgYmFzZU1lZGlhRGVjb2RlVGltZS5cbiAgICAgIC8vIEluIG9yZGVyIHRvIHByb3ZpZGUgcmVsZXZhbnQgdmFsdWVzIGZvciB0aGUgcGxheWVyIHRpbWVzLCBiYXNlIHRpbWluZyBpbmZvIG9uIHRoZVxuICAgICAgLy8gYmFzZU1lZGlhRGVjb2RlVGltZSBhbmQgdGhlIERUUyBhbmQgUFRTIGR1cmF0aW9ucyBvZiB0aGUgc2VnbWVudC5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICBkdHM6IGJhc2VNZWRpYURlY29kZVRpbWUsXG4gICAgICAgICAgcHRzOiBiYXNlTWVkaWFEZWNvZGVUaW1lICsgcHRzT2Zmc2V0RnJvbUR0c1xuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBkdHM6IGJhc2VNZWRpYURlY29kZVRpbWUgKyBkZWNvZGVEdXJhdGlvbixcbiAgICAgICAgICBwdHM6IGJhc2VNZWRpYURlY29kZVRpbWUgKyBwcmVzZW50YXRpb25EdXJhdGlvblxuICAgICAgICB9LFxuICAgICAgICBwcmVwZW5kZWRDb250ZW50RHVyYXRpb246IHByZXBlbmRlZENvbnRlbnREdXJhdGlvbixcbiAgICAgICAgYmFzZU1lZGlhRGVjb2RlVGltZTogYmFzZU1lZGlhRGVjb2RlVGltZVxuICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBzaW5nbGUtdHJhY2ssIElTTyBCTUZGIG1lZGlhIHNlZ21lbnQgZnJvbSBBQUMgZGF0YVxuICAgICAqIGV2ZW50cy4gVGhlIG91dHB1dCBvZiB0aGlzIHN0cmVhbSBjYW4gYmUgZmVkIHRvIGEgU291cmNlQnVmZmVyXG4gICAgICogY29uZmlndXJlZCB3aXRoIGEgc3VpdGFibGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudC5cbiAgICAgKiBAcGFyYW0gdHJhY2sge29iamVjdH0gdHJhY2sgbWV0YWRhdGEgY29uZmlndXJhdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IHRyYW5zbXV4ZXIgb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzIHtib29sZWFufSBJZiB0cnVlLCBrZWVwIHRoZSB0aW1lc3RhbXBzXG4gICAgICogICAgICAgIGluIHRoZSBzb3VyY2U7IGZhbHNlIHRvIGFkanVzdCB0aGUgZmlyc3Qgc2VnbWVudCB0byBzdGFydCBhdCAwLlxuICAgICAqL1xuXG5cbiAgICBfQXVkaW9TZWdtZW50U3RyZWFtID0gZnVuY3Rpb24gQXVkaW9TZWdtZW50U3RyZWFtKHRyYWNrLCBvcHRpb25zKSB7XG4gICAgICB2YXIgYWR0c0ZyYW1lcyA9IFtdLFxuICAgICAgICAgIHNlcXVlbmNlTnVtYmVyID0gMCxcbiAgICAgICAgICBlYXJsaWVzdEFsbG93ZWREdHMgPSAwLFxuICAgICAgICAgIGF1ZGlvQXBwZW5kU3RhcnRUcyA9IDAsXG4gICAgICAgICAgdmlkZW9CYXNlTWVkaWFEZWNvZGVUaW1lID0gSW5maW5pdHk7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgX0F1ZGlvU2VnbWVudFN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0cmFja0RlY29kZUluZm8uY29sbGVjdER0c0luZm8odHJhY2ssIGRhdGEpO1xuXG4gICAgICAgIGlmICh0cmFjaykge1xuICAgICAgICAgIEFVRElPX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgdHJhY2tbcHJvcF0gPSBkYXRhW3Byb3BdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIGJ1ZmZlciBhdWRpbyBkYXRhIHVudGlsIGVuZCgpIGlzIGNhbGxlZFxuXG5cbiAgICAgICAgYWR0c0ZyYW1lcy5wdXNoKGRhdGEpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXRFYXJsaWVzdER0cyA9IGZ1bmN0aW9uIChlYXJsaWVzdER0cykge1xuICAgICAgICBlYXJsaWVzdEFsbG93ZWREdHMgPSBlYXJsaWVzdER0cyAtIHRyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldFZpZGVvQmFzZU1lZGlhRGVjb2RlVGltZSA9IGZ1bmN0aW9uIChiYXNlTWVkaWFEZWNvZGVUaW1lKSB7XG4gICAgICAgIHZpZGVvQmFzZU1lZGlhRGVjb2RlVGltZSA9IGJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldEF1ZGlvQXBwZW5kU3RhcnQgPSBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgIGF1ZGlvQXBwZW5kU3RhcnRUcyA9IHRpbWVzdGFtcDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmcmFtZXMsIG1vb2YsIG1kYXQsIGJveGVzLCBmcmFtZUR1cmF0aW9uOyAvLyByZXR1cm4gZWFybHkgaWYgbm8gYXVkaW8gZGF0YSBoYXMgYmVlbiBvYnNlcnZlZFxuXG4gICAgICAgIGlmIChhZHRzRnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlcignZG9uZScsICdBdWRpb1NlZ21lbnRTdHJlYW0nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmcmFtZXMgPSBhdWRpb0ZyYW1lVXRpbHMudHJpbUFkdHNGcmFtZXNCeUVhcmxpZXN0RHRzKGFkdHNGcmFtZXMsIHRyYWNrLCBlYXJsaWVzdEFsbG93ZWREdHMpO1xuICAgICAgICB0cmFjay5iYXNlTWVkaWFEZWNvZGVUaW1lID0gdHJhY2tEZWNvZGVJbmZvLmNhbGN1bGF0ZVRyYWNrQmFzZU1lZGlhRGVjb2RlVGltZSh0cmFjaywgb3B0aW9ucy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzKTtcbiAgICAgICAgYXVkaW9GcmFtZVV0aWxzLnByZWZpeFdpdGhTaWxlbmNlKHRyYWNrLCBmcmFtZXMsIGF1ZGlvQXBwZW5kU3RhcnRUcywgdmlkZW9CYXNlTWVkaWFEZWNvZGVUaW1lKTsgLy8gd2UgaGF2ZSB0byBidWlsZCB0aGUgaW5kZXggZnJvbSBieXRlIGxvY2F0aW9ucyB0b1xuICAgICAgICAvLyBzYW1wbGVzICh0aGF0IGlzLCBhZHRzIGZyYW1lcykgaW4gdGhlIGF1ZGlvIGRhdGFcblxuICAgICAgICB0cmFjay5zYW1wbGVzID0gYXVkaW9GcmFtZVV0aWxzLmdlbmVyYXRlU2FtcGxlVGFibGUoZnJhbWVzKTsgLy8gY29uY2F0ZW5hdGUgdGhlIGF1ZGlvIGRhdGEgdG8gY29uc3R1Y3QgdGhlIG1kYXRcblxuICAgICAgICBtZGF0ID0gbXA0R2VuZXJhdG9yLm1kYXQoYXVkaW9GcmFtZVV0aWxzLmNvbmNhdGVuYXRlRnJhbWVEYXRhKGZyYW1lcykpO1xuICAgICAgICBhZHRzRnJhbWVzID0gW107XG4gICAgICAgIG1vb2YgPSBtcDRHZW5lcmF0b3IubW9vZihzZXF1ZW5jZU51bWJlciwgW3RyYWNrXSk7XG4gICAgICAgIGJveGVzID0gbmV3IFVpbnQ4QXJyYXkobW9vZi5ieXRlTGVuZ3RoICsgbWRhdC5ieXRlTGVuZ3RoKTsgLy8gYnVtcCB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBuZXh0IHRpbWVcblxuICAgICAgICBzZXF1ZW5jZU51bWJlcisrO1xuICAgICAgICBib3hlcy5zZXQobW9vZik7XG4gICAgICAgIGJveGVzLnNldChtZGF0LCBtb29mLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0cmFja0RlY29kZUluZm8uY2xlYXJEdHNJbmZvKHRyYWNrKTtcbiAgICAgICAgZnJhbWVEdXJhdGlvbiA9IE1hdGguY2VpbChPTkVfU0VDT05EX0lOX1RTJDMgKiAxMDI0IC8gdHJhY2suc2FtcGxlcmF0ZSk7IC8vIFRPRE8gdGhpcyBjaGVjayB3YXMgYWRkZWQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKHBhcnRpY3VsYXJseSB3aXRoXG4gICAgICAgIC8vIHRlc3RzKSBvbiBhZGRpbmcgdGhlIHRpbWluZ0luZm8gZXZlbnQuIEhvd2V2ZXIsIGl0IHNlZW1zIHVubGlrZWx5IHRoYXQgdGhlcmUncyBhXG4gICAgICAgIC8vIHZhbGlkIHVzZS1jYXNlIHdoZXJlIGFuIGluaXQgc2VnbWVudC9kYXRhIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2l0aG91dCBhc3NvY2lhdGVkXG4gICAgICAgIC8vIGZyYW1lcy4gTGVhdmluZyBmb3Igbm93LCBidXQgc2hvdWxkIGJlIGxvb2tlZCBpbnRvLlxuXG4gICAgICAgIGlmIChmcmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCd0aW1pbmdJbmZvJywge1xuICAgICAgICAgICAgc3RhcnQ6IGZyYW1lc1swXS5kdHMsXG4gICAgICAgICAgICBlbmQ6IGZyYW1lc1swXS5kdHMgKyBmcmFtZXMubGVuZ3RoICogZnJhbWVEdXJhdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywge1xuICAgICAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAgICAgICBib3hlczogYm94ZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignZG9uZScsICdBdWRpb1NlZ21lbnRTdHJlYW0nKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyYWNrRGVjb2RlSW5mby5jbGVhckR0c0luZm8odHJhY2spO1xuICAgICAgICBhZHRzRnJhbWVzID0gW107XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmVzZXQnKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9BdWRpb1NlZ21lbnRTdHJlYW0ucHJvdG90eXBlID0gbmV3IHN0cmVhbSgpO1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBzaW5nbGUtdHJhY2ssIElTTyBCTUZGIG1lZGlhIHNlZ21lbnQgZnJvbSBIMjY0IGRhdGFcbiAgICAgKiBldmVudHMuIFRoZSBvdXRwdXQgb2YgdGhpcyBzdHJlYW0gY2FuIGJlIGZlZCB0byBhIFNvdXJjZUJ1ZmZlclxuICAgICAqIGNvbmZpZ3VyZWQgd2l0aCBhIHN1aXRhYmxlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQuXG4gICAgICogQHBhcmFtIHRyYWNrIHtvYmplY3R9IHRyYWNrIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyB7b2JqZWN0fSB0cmFuc211eGVyIG9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIG9wdGlvbnMuYWxpZ25Hb3BzQXRFbmQge2Jvb2xlYW59IElmIHRydWUsIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGVcbiAgICAgKiAgICAgICAgZ29wc1RvQWxpZ25XaXRoIGxpc3Qgd2hlbiBhdHRlbXB0aW5nIHRvIGFsaWduIGdvcCBwdHNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzIHtib29sZWFufSBJZiB0cnVlLCBrZWVwIHRoZSB0aW1lc3RhbXBzXG4gICAgICogICAgICAgIGluIHRoZSBzb3VyY2U7IGZhbHNlIHRvIGFkanVzdCB0aGUgZmlyc3Qgc2VnbWVudCB0byBzdGFydCBhdCAwLlxuICAgICAqL1xuXG4gICAgX1ZpZGVvU2VnbWVudFN0cmVhbSA9IGZ1bmN0aW9uIFZpZGVvU2VnbWVudFN0cmVhbSh0cmFjaywgb3B0aW9ucykge1xuICAgICAgdmFyIHNlcXVlbmNlTnVtYmVyID0gMCxcbiAgICAgICAgICBuYWxVbml0cyA9IFtdLFxuICAgICAgICAgIGdvcHNUb0FsaWduV2l0aCA9IFtdLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBwcHM7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgX1ZpZGVvU2VnbWVudFN0cmVhbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG4gICAgICBkZWxldGUgdHJhY2subWluUFRTO1xuICAgICAgdGhpcy5nb3BDYWNoZV8gPSBbXTtcbiAgICAgIC8qKlxuICAgICAgICAqIENvbnN0cnVjdHMgYSBJU08gQk1GRiBzZWdtZW50IGdpdmVuIEgyNjQgbmFsVW5pdHNcbiAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFsVW5pdCBBIGRhdGEgZXZlbnQgcmVwcmVzZW50aW5nIGEgbmFsVW5pdFxuICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYWxVbml0Lm5hbFVuaXRUeXBlXG4gICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbFVuaXQuY29uZmlnIFByb3BlcnRpZXMgZm9yIGEgbXA0IHRyYWNrXG4gICAgICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBuYWxVbml0LmRhdGEgVGhlIG5hbFVuaXQgYnl0ZXNcbiAgICAgICAgKiBAc2VlIGxpYi9jb2RlY3MvaDI2NC5qc1xuICAgICAgICoqL1xuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAobmFsVW5pdCkge1xuICAgICAgICB0cmFja0RlY29kZUluZm8uY29sbGVjdER0c0luZm8odHJhY2ssIG5hbFVuaXQpOyAvLyByZWNvcmQgdGhlIHRyYWNrIGNvbmZpZ1xuXG4gICAgICAgIGlmIChuYWxVbml0Lm5hbFVuaXRUeXBlID09PSAnc2VxX3BhcmFtZXRlcl9zZXRfcmJzcCcgJiYgIWNvbmZpZykge1xuICAgICAgICAgIGNvbmZpZyA9IG5hbFVuaXQuY29uZmlnO1xuICAgICAgICAgIHRyYWNrLnNwcyA9IFtuYWxVbml0LmRhdGFdO1xuICAgICAgICAgIFZJREVPX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgdHJhY2tbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFsVW5pdC5uYWxVbml0VHlwZSA9PT0gJ3BpY19wYXJhbWV0ZXJfc2V0X3Jic3AnICYmICFwcHMpIHtcbiAgICAgICAgICBwcHMgPSBuYWxVbml0LmRhdGE7XG4gICAgICAgICAgdHJhY2sucHBzID0gW25hbFVuaXQuZGF0YV07XG4gICAgICAgIH0gLy8gYnVmZmVyIHZpZGVvIHVudGlsIGZsdXNoKCkgaXMgY2FsbGVkXG5cblxuICAgICAgICBuYWxVbml0cy5wdXNoKG5hbFVuaXQpO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICAqIFBhc3MgY29uc3RydWN0ZWQgSVNPIEJNRkYgdHJhY2sgYW5kIGJveGVzIG9uIHRvIHRoZVxuICAgICAgICAqIG5leHQgc3RyZWFtIGluIHRoZSBwaXBlbGluZVxuICAgICAgICoqL1xuXG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmcmFtZXMsXG4gICAgICAgICAgICBnb3BGb3JGdXNpb24sXG4gICAgICAgICAgICBnb3BzLFxuICAgICAgICAgICAgbW9vZixcbiAgICAgICAgICAgIG1kYXQsXG4gICAgICAgICAgICBib3hlcyxcbiAgICAgICAgICAgIHByZXBlbmRlZENvbnRlbnREdXJhdGlvbiA9IDAsXG4gICAgICAgICAgICBmaXJzdEdvcCxcbiAgICAgICAgICAgIGxhc3RHb3A7IC8vIFRocm93IGF3YXkgbmFsVW5pdHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBieXRlIHN0cmVhbSB1bnRpbFxuICAgICAgICAvLyB3ZSBmaW5kIHRoZSBmaXJzdCBBVURcblxuICAgICAgICB3aGlsZSAobmFsVW5pdHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG5hbFVuaXRzWzBdLm5hbFVuaXRUeXBlID09PSAnYWNjZXNzX3VuaXRfZGVsaW1pdGVyX3Jic3AnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuYWxVbml0cy5zaGlmdCgpO1xuICAgICAgICB9IC8vIFJldHVybiBlYXJseSBpZiBubyB2aWRlbyBkYXRhIGhhcyBiZWVuIG9ic2VydmVkXG5cblxuICAgICAgICBpZiAobmFsVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFN0cmVhbV8oKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RvbmUnLCAnVmlkZW9TZWdtZW50U3RyZWFtJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIE9yZ2FuaXplIHRoZSByYXcgbmFsLXVuaXRzIGludG8gYXJyYXlzIHRoYXQgcmVwcmVzZW50XG4gICAgICAgIC8vIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RzIHN1Y2ggYXMgZnJhbWVzIGFuZCBnb3BzXG4gICAgICAgIC8vIChncm91cC1vZi1waWN0dXJlcylcblxuXG4gICAgICAgIGZyYW1lcyA9IGZyYW1lVXRpbHMuZ3JvdXBOYWxzSW50b0ZyYW1lcyhuYWxVbml0cyk7XG4gICAgICAgIGdvcHMgPSBmcmFtZVV0aWxzLmdyb3VwRnJhbWVzSW50b0dvcHMoZnJhbWVzKTsgLy8gSWYgdGhlIGZpcnN0IGZyYW1lIG9mIHRoaXMgZnJhZ21lbnQgaXMgbm90IGEga2V5ZnJhbWUgd2UgaGF2ZVxuICAgICAgICAvLyBhIHByb2JsZW0gc2luY2UgTVNFIChvbiBDaHJvbWUpIHJlcXVpcmVzIGEgbGVhZGluZyBrZXlmcmFtZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgaGF2ZSB0d28gYXBwcm9hY2hlcyB0byByZXBhaXJpbmcgdGhpcyBzaXR1YXRpb246XG4gICAgICAgIC8vIDEpIEdPUC1GVVNJT046XG4gICAgICAgIC8vICAgIFRoaXMgaXMgd2hlcmUgd2Uga2VlcCB0cmFjayBvZiB0aGUgR09QUyAoZ3JvdXAtb2YtcGljdHVyZXMpXG4gICAgICAgIC8vICAgIGZyb20gcHJldmlvdXMgZnJhZ21lbnRzIGFuZCBhdHRlbXB0IHRvIGZpbmQgb25lIHRoYXQgd2UgY2FuXG4gICAgICAgIC8vICAgIHByZXBlbmQgdG8gdGhlIGN1cnJlbnQgZnJhZ21lbnQgaW4gb3JkZXIgdG8gY3JlYXRlIGEgdmFsaWRcbiAgICAgICAgLy8gICAgZnJhZ21lbnQuXG4gICAgICAgIC8vIDIpIEtFWUZSQU1FLVBVTExJTkc6XG4gICAgICAgIC8vICAgIEhlcmUgd2Ugc2VhcmNoIGZvciB0aGUgZmlyc3Qga2V5ZnJhbWUgaW4gdGhlIGZyYWdtZW50IGFuZFxuICAgICAgICAvLyAgICB0aHJvdyBhd2F5IGFsbCB0aGUgZnJhbWVzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBmcmFnbWVudFxuICAgICAgICAvLyAgICBhbmQgdGhhdCBrZXlmcmFtZS4gV2UgdGhlbiBleHRlbmQgdGhlIGR1cmF0aW9uIGFuZCBwdWxsIHRoZVxuICAgICAgICAvLyAgICBQVFMgb2YgdGhlIGtleWZyYW1lIGZvcndhcmQgc28gdGhhdCBpdCBjb3ZlcnMgdGhlIHRpbWUgcmFuZ2VcbiAgICAgICAgLy8gICAgb2YgdGhlIGZyYW1lcyB0aGF0IHdlcmUgZGlzcG9zZWQgb2YuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICMxIGlzIGZhciBwcmVmZXJlYWJsZSBvdmVyICMyIHdoaWNoIGNhbiBjYXVzZSBcInN0dXR0ZXJpbmdcIiBidXRcbiAgICAgICAgLy8gcmVxdWlyZXMgbW9yZSB0aGluZ3MgdG8gYmUganVzdCByaWdodC5cblxuICAgICAgICBpZiAoIWdvcHNbMF1bMF0ua2V5RnJhbWUpIHtcbiAgICAgICAgICAvLyBTZWFyY2ggZm9yIGEgZ29wIGZvciBmdXNpb24gZnJvbSBvdXIgZ29wQ2FjaGVcbiAgICAgICAgICBnb3BGb3JGdXNpb24gPSB0aGlzLmdldEdvcEZvckZ1c2lvbl8obmFsVW5pdHNbMF0sIHRyYWNrKTtcblxuICAgICAgICAgIGlmIChnb3BGb3JGdXNpb24pIHtcbiAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSB0aW1pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlZ21lbnQsIHNhdmVcbiAgICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBwcmVwZW5kZWQgdG8gdGhlIG9yaWdpbmFsIHNlZ21lbnQgZHVlIHRvIEdPUCBmdXNpb25cbiAgICAgICAgICAgIHByZXBlbmRlZENvbnRlbnREdXJhdGlvbiA9IGdvcEZvckZ1c2lvbi5kdXJhdGlvbjtcbiAgICAgICAgICAgIGdvcHMudW5zaGlmdChnb3BGb3JGdXNpb24pOyAvLyBBZGp1c3QgR29wcycgbWV0YWRhdGEgdG8gYWNjb3VudCBmb3IgdGhlIGluY2x1c2lvbiBvZiB0aGVcbiAgICAgICAgICAgIC8vIG5ldyBnb3AgYXQgdGhlIGJlZ2lubmluZ1xuXG4gICAgICAgICAgICBnb3BzLmJ5dGVMZW5ndGggKz0gZ29wRm9yRnVzaW9uLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBnb3BzLm5hbENvdW50ICs9IGdvcEZvckZ1c2lvbi5uYWxDb3VudDtcbiAgICAgICAgICAgIGdvcHMucHRzID0gZ29wRm9yRnVzaW9uLnB0cztcbiAgICAgICAgICAgIGdvcHMuZHRzID0gZ29wRm9yRnVzaW9uLmR0cztcbiAgICAgICAgICAgIGdvcHMuZHVyYXRpb24gKz0gZ29wRm9yRnVzaW9uLmR1cmF0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIGNhbmRpZGF0ZSBnb3AgZmFsbCBiYWNrIHRvIGtleWZyYW1lLXB1bGxpbmdcbiAgICAgICAgICAgIGdvcHMgPSBmcmFtZVV0aWxzLmV4dGVuZEZpcnN0S2V5RnJhbWUoZ29wcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyaW0gZ29wcyB0byBhbGlnbiB3aXRoIGdvcHNUb0FsaWduV2l0aFxuXG5cbiAgICAgICAgaWYgKGdvcHNUb0FsaWduV2l0aC5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgYWxpZ25lZEdvcHM7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5hbGlnbkdvcHNBdEVuZCkge1xuICAgICAgICAgICAgYWxpZ25lZEdvcHMgPSB0aGlzLmFsaWduR29wc0F0RW5kXyhnb3BzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxpZ25lZEdvcHMgPSB0aGlzLmFsaWduR29wc0F0U3RhcnRfKGdvcHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghYWxpZ25lZEdvcHMpIHtcbiAgICAgICAgICAgIC8vIHNhdmUgYWxsIHRoZSBuYWxzIGluIHRoZSBsYXN0IEdPUCBpbnRvIHRoZSBnb3AgY2FjaGVcbiAgICAgICAgICAgIHRoaXMuZ29wQ2FjaGVfLnVuc2hpZnQoe1xuICAgICAgICAgICAgICBnb3A6IGdvcHMucG9wKCksXG4gICAgICAgICAgICAgIHBwczogdHJhY2sucHBzLFxuICAgICAgICAgICAgICBzcHM6IHRyYWNrLnNwc1xuICAgICAgICAgICAgfSk7IC8vIEtlZXAgYSBtYXhpbXVtIG9mIDYgR09QcyBpbiB0aGUgY2FjaGVcblxuICAgICAgICAgICAgdGhpcy5nb3BDYWNoZV8ubGVuZ3RoID0gTWF0aC5taW4oNiwgdGhpcy5nb3BDYWNoZV8ubGVuZ3RoKTsgLy8gQ2xlYXIgbmFsVW5pdHNcblxuICAgICAgICAgICAgbmFsVW5pdHMgPSBbXTsgLy8gcmV0dXJuIGVhcmx5IG5vIGdvcHMgY2FuIGJlIGFsaWduZWQgd2l0aCBkZXNpcmVkIGdvcHNUb0FsaWduV2l0aFxuXG4gICAgICAgICAgICB0aGlzLnJlc2V0U3RyZWFtXygpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkb25lJywgJ1ZpZGVvU2VnbWVudFN0cmVhbScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gLy8gU29tZSBnb3BzIHdlcmUgdHJpbW1lZC4gY2xlYXIgZHRzIGluZm8gc28gbWluU2VnbWVudER0cyBhbmQgcHRzIGFyZSBjb3JyZWN0XG4gICAgICAgICAgLy8gd2hlbiByZWNhbGN1bGF0ZWQgYmVmb3JlIHNlbmRpbmcgb2ZmIHRvIENvYWxlc2NlU3RyZWFtXG5cblxuICAgICAgICAgIHRyYWNrRGVjb2RlSW5mby5jbGVhckR0c0luZm8odHJhY2spO1xuICAgICAgICAgIGdvcHMgPSBhbGlnbmVkR29wcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYWNrRGVjb2RlSW5mby5jb2xsZWN0RHRzSW5mbyh0cmFjaywgZ29wcyk7IC8vIEZpcnN0LCB3ZSBoYXZlIHRvIGJ1aWxkIHRoZSBpbmRleCBmcm9tIGJ5dGUgbG9jYXRpb25zIHRvXG4gICAgICAgIC8vIHNhbXBsZXMgKHRoYXQgaXMsIGZyYW1lcykgaW4gdGhlIHZpZGVvIGRhdGFcblxuICAgICAgICB0cmFjay5zYW1wbGVzID0gZnJhbWVVdGlscy5nZW5lcmF0ZVNhbXBsZVRhYmxlKGdvcHMpOyAvLyBDb25jYXRlbmF0ZSB0aGUgdmlkZW8gZGF0YSBhbmQgY29uc3RydWN0IHRoZSBtZGF0XG5cbiAgICAgICAgbWRhdCA9IG1wNEdlbmVyYXRvci5tZGF0KGZyYW1lVXRpbHMuY29uY2F0ZW5hdGVOYWxEYXRhKGdvcHMpKTtcbiAgICAgICAgdHJhY2suYmFzZU1lZGlhRGVjb2RlVGltZSA9IHRyYWNrRGVjb2RlSW5mby5jYWxjdWxhdGVUcmFja0Jhc2VNZWRpYURlY29kZVRpbWUodHJhY2ssIG9wdGlvbnMua2VlcE9yaWdpbmFsVGltZXN0YW1wcyk7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncHJvY2Vzc2VkR29wc0luZm8nLCBnb3BzLm1hcChmdW5jdGlvbiAoZ29wKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHB0czogZ29wLnB0cyxcbiAgICAgICAgICAgIGR0czogZ29wLmR0cyxcbiAgICAgICAgICAgIGJ5dGVMZW5ndGg6IGdvcC5ieXRlTGVuZ3RoXG4gICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBmaXJzdEdvcCA9IGdvcHNbMF07XG4gICAgICAgIGxhc3RHb3AgPSBnb3BzW2dvcHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMudHJpZ2dlcignc2VnbWVudFRpbWluZ0luZm8nLCBnZW5lcmF0ZVZpZGVvU2VnbWVudFRpbWluZ0luZm8odHJhY2suYmFzZU1lZGlhRGVjb2RlVGltZSwgZmlyc3RHb3AuZHRzLCBmaXJzdEdvcC5wdHMsIGxhc3RHb3AuZHRzICsgbGFzdEdvcC5kdXJhdGlvbiwgbGFzdEdvcC5wdHMgKyBsYXN0R29wLmR1cmF0aW9uLCBwcmVwZW5kZWRDb250ZW50RHVyYXRpb24pKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd0aW1pbmdJbmZvJywge1xuICAgICAgICAgIHN0YXJ0OiBnb3BzWzBdLmR0cyxcbiAgICAgICAgICBlbmQ6IGdvcHNbZ29wcy5sZW5ndGggLSAxXS5kdHMgKyBnb3BzW2dvcHMubGVuZ3RoIC0gMV0uZHVyYXRpb25cbiAgICAgICAgfSk7IC8vIHNhdmUgYWxsIHRoZSBuYWxzIGluIHRoZSBsYXN0IEdPUCBpbnRvIHRoZSBnb3AgY2FjaGVcblxuICAgICAgICB0aGlzLmdvcENhY2hlXy51bnNoaWZ0KHtcbiAgICAgICAgICBnb3A6IGdvcHMucG9wKCksXG4gICAgICAgICAgcHBzOiB0cmFjay5wcHMsXG4gICAgICAgICAgc3BzOiB0cmFjay5zcHNcbiAgICAgICAgfSk7IC8vIEtlZXAgYSBtYXhpbXVtIG9mIDYgR09QcyBpbiB0aGUgY2FjaGVcblxuICAgICAgICB0aGlzLmdvcENhY2hlXy5sZW5ndGggPSBNYXRoLm1pbig2LCB0aGlzLmdvcENhY2hlXy5sZW5ndGgpOyAvLyBDbGVhciBuYWxVbml0c1xuXG4gICAgICAgIG5hbFVuaXRzID0gW107XG4gICAgICAgIHRoaXMudHJpZ2dlcignYmFzZU1lZGlhRGVjb2RlVGltZScsIHRyYWNrLmJhc2VNZWRpYURlY29kZVRpbWUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3RpbWVsaW5lU3RhcnRJbmZvJywgdHJhY2sudGltZWxpbmVTdGFydEluZm8pO1xuICAgICAgICBtb29mID0gbXA0R2VuZXJhdG9yLm1vb2Yoc2VxdWVuY2VOdW1iZXIsIFt0cmFja10pOyAvLyBpdCB3b3VsZCBiZSBncmVhdCB0byBhbGxvY2F0ZSB0aGlzIGFycmF5IHVwIGZyb250IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdGhyb3dpbmcgYXdheSBodW5kcmVkcyBvZiBtZWRpYSBzZWdtZW50IGZyYWdtZW50c1xuXG4gICAgICAgIGJveGVzID0gbmV3IFVpbnQ4QXJyYXkobW9vZi5ieXRlTGVuZ3RoICsgbWRhdC5ieXRlTGVuZ3RoKTsgLy8gQnVtcCB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBuZXh0IHRpbWVcblxuICAgICAgICBzZXF1ZW5jZU51bWJlcisrO1xuICAgICAgICBib3hlcy5zZXQobW9vZik7XG4gICAgICAgIGJveGVzLnNldChtZGF0LCBtb29mLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGEnLCB7XG4gICAgICAgICAgdHJhY2s6IHRyYWNrLFxuICAgICAgICAgIGJveGVzOiBib3hlc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFN0cmVhbV8oKTsgLy8gQ29udGludWUgd2l0aCB0aGUgZmx1c2ggcHJvY2VzcyBub3dcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2RvbmUnLCAnVmlkZW9TZWdtZW50U3RyZWFtJyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlc2V0U3RyZWFtXygpO1xuICAgICAgICBuYWxVbml0cyA9IFtdO1xuICAgICAgICB0aGlzLmdvcENhY2hlXy5sZW5ndGggPSAwO1xuICAgICAgICBnb3BzVG9BbGlnbldpdGgubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldCcpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5yZXNldFN0cmVhbV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyYWNrRGVjb2RlSW5mby5jbGVhckR0c0luZm8odHJhY2spOyAvLyByZXNldCBjb25maWcgYW5kIHBwcyBiZWNhdXNlIHRoZXkgbWF5IGRpZmZlciBhY3Jvc3Mgc2VnbWVudHNcbiAgICAgICAgLy8gZm9yIGluc3RhbmNlLCB3aGVuIHdlIGFyZSByZW5kaXRpb24gc3dpdGNoaW5nXG5cbiAgICAgICAgY29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgICBwcHMgPSB1bmRlZmluZWQ7XG4gICAgICB9OyAvLyBTZWFyY2ggZm9yIGEgY2FuZGlkYXRlIEdvcCBmb3IgZ29wLWZ1c2lvbiBmcm9tIHRoZSBnb3AgY2FjaGUgYW5kXG4gICAgICAvLyByZXR1cm4gaXQgb3IgcmV0dXJuIG51bGwgaWYgbm8gZ29vZCBjYW5kaWRhdGUgd2FzIGZvdW5kXG5cblxuICAgICAgdGhpcy5nZXRHb3BGb3JGdXNpb25fID0gZnVuY3Rpb24gKG5hbFVuaXQpIHtcbiAgICAgICAgdmFyIGhhbGZTZWNvbmQgPSA0NTAwMCxcbiAgICAgICAgICAgIC8vIEhhbGYtYS1zZWNvbmQgaW4gYSA5MGtoeiBjbG9ja1xuICAgICAgICBhbGxvd2FibGVPdmVybGFwID0gMTAwMDAsXG4gICAgICAgICAgICAvLyBBYm91dCAzIGZyYW1lcyBAIDMwZnBzXG4gICAgICAgIG5lYXJlc3REaXN0YW5jZSA9IEluZmluaXR5LFxuICAgICAgICAgICAgZHRzRGlzdGFuY2UsXG4gICAgICAgICAgICBuZWFyZXN0R29wT2JqLFxuICAgICAgICAgICAgY3VycmVudEdvcCxcbiAgICAgICAgICAgIGN1cnJlbnRHb3BPYmosXG4gICAgICAgICAgICBpOyAvLyBTZWFyY2ggZm9yIHRoZSBHT1AgbmVhcmVzdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgbmFsIHVuaXRcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5nb3BDYWNoZV8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjdXJyZW50R29wT2JqID0gdGhpcy5nb3BDYWNoZV9baV07XG4gICAgICAgICAgY3VycmVudEdvcCA9IGN1cnJlbnRHb3BPYmouZ29wOyAvLyBSZWplY3QgR29wcyB3aXRoIGRpZmZlcmVudCBTUFMgb3IgUFBTXG5cbiAgICAgICAgICBpZiAoISh0cmFjay5wcHMgJiYgYXJyYXlFcXVhbHModHJhY2sucHBzWzBdLCBjdXJyZW50R29wT2JqLnBwc1swXSkpIHx8ICEodHJhY2suc3BzICYmIGFycmF5RXF1YWxzKHRyYWNrLnNwc1swXSwgY3VycmVudEdvcE9iai5zcHNbMF0pKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBSZWplY3QgR29wcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBuZWdhdGl2ZSBiYXNlTWVkaWFEZWNvZGVUaW1lXG5cblxuICAgICAgICAgIGlmIChjdXJyZW50R29wLmR0cyA8IHRyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmR0cykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBnb3AgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmFsVW5pdFxuXG5cbiAgICAgICAgICBkdHNEaXN0YW5jZSA9IG5hbFVuaXQuZHRzIC0gY3VycmVudEdvcC5kdHMgLSBjdXJyZW50R29wLmR1cmF0aW9uOyAvLyBPbmx5IGNvbnNpZGVyIEdPUFMgdGhhdCBzdGFydCBiZWZvcmUgdGhlIG5hbCB1bml0IGFuZCBlbmQgd2l0aGluXG4gICAgICAgICAgLy8gYSBoYWxmLXNlY29uZCBvZiB0aGUgbmFsIHVuaXRcblxuICAgICAgICAgIGlmIChkdHNEaXN0YW5jZSA+PSAtYWxsb3dhYmxlT3ZlcmxhcCAmJiBkdHNEaXN0YW5jZSA8PSBoYWxmU2Vjb25kKSB7XG4gICAgICAgICAgICAvLyBBbHdheXMgdXNlIHRoZSBjbG9zZXN0IEdPUCB3ZSBmb3VuZCBpZiB0aGVyZSBpcyBtb3JlIHRoYW5cbiAgICAgICAgICAgIC8vIG9uZSBjYW5kaWRhdGVcbiAgICAgICAgICAgIGlmICghbmVhcmVzdEdvcE9iaiB8fCBuZWFyZXN0RGlzdGFuY2UgPiBkdHNEaXN0YW5jZSkge1xuICAgICAgICAgICAgICBuZWFyZXN0R29wT2JqID0gY3VycmVudEdvcE9iajtcbiAgICAgICAgICAgICAgbmVhcmVzdERpc3RhbmNlID0gZHRzRGlzdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lYXJlc3RHb3BPYmopIHtcbiAgICAgICAgICByZXR1cm4gbmVhcmVzdEdvcE9iai5nb3A7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07IC8vIHRyaW0gZ29wIGxpc3QgdG8gdGhlIGZpcnN0IGdvcCBmb3VuZCB0aGF0IGhhcyBhIG1hdGNoaW5nIHB0cyB3aXRoIGEgZ29wIGluIHRoZSBsaXN0XG4gICAgICAvLyBvZiBnb3BzVG9BbGlnbldpdGggc3RhcnRpbmcgZnJvbSB0aGUgU1RBUlQgb2YgdGhlIGxpc3RcblxuXG4gICAgICB0aGlzLmFsaWduR29wc0F0U3RhcnRfID0gZnVuY3Rpb24gKGdvcHMpIHtcbiAgICAgICAgdmFyIGFsaWduSW5kZXgsIGdvcEluZGV4LCBhbGlnbiwgZ29wLCBieXRlTGVuZ3RoLCBuYWxDb3VudCwgZHVyYXRpb24sIGFsaWduZWRHb3BzO1xuICAgICAgICBieXRlTGVuZ3RoID0gZ29wcy5ieXRlTGVuZ3RoO1xuICAgICAgICBuYWxDb3VudCA9IGdvcHMubmFsQ291bnQ7XG4gICAgICAgIGR1cmF0aW9uID0gZ29wcy5kdXJhdGlvbjtcbiAgICAgICAgYWxpZ25JbmRleCA9IGdvcEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWxpZ25JbmRleCA8IGdvcHNUb0FsaWduV2l0aC5sZW5ndGggJiYgZ29wSW5kZXggPCBnb3BzLmxlbmd0aCkge1xuICAgICAgICAgIGFsaWduID0gZ29wc1RvQWxpZ25XaXRoW2FsaWduSW5kZXhdO1xuICAgICAgICAgIGdvcCA9IGdvcHNbZ29wSW5kZXhdO1xuXG4gICAgICAgICAgaWYgKGFsaWduLnB0cyA9PT0gZ29wLnB0cykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdvcC5wdHMgPiBhbGlnbi5wdHMpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY3VycmVudCBnb3Agc3RhcnRzIGFmdGVyIHRoZSBjdXJyZW50IGdvcCB3ZSB3YW50IHRvIGFsaWduIG9uLCBzbyBpbmNyZW1lbnRcbiAgICAgICAgICAgIC8vIGFsaWduIGluZGV4XG4gICAgICAgICAgICBhbGlnbkluZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGN1cnJlbnQgZ29wIHN0YXJ0cyBiZWZvcmUgdGhlIGN1cnJlbnQgZ29wIHdlIHdhbnQgdG8gYWxpZ24gb24uIHNvIGluY3JlbWVudCBnb3BcbiAgICAgICAgICAvLyBpbmRleFxuXG5cbiAgICAgICAgICBnb3BJbmRleCsrO1xuICAgICAgICAgIGJ5dGVMZW5ndGggLT0gZ29wLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgbmFsQ291bnQgLT0gZ29wLm5hbENvdW50O1xuICAgICAgICAgIGR1cmF0aW9uIC09IGdvcC5kdXJhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnb3BJbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIG5vIGdvcHMgdG8gdHJpbVxuICAgICAgICAgIHJldHVybiBnb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdvcEluZGV4ID09PSBnb3BzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIGFsbCBnb3BzIHRyaW1tZWQsIHNraXAgYXBwZW5kaW5nIGFsbCBnb3BzXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBhbGlnbmVkR29wcyA9IGdvcHMuc2xpY2UoZ29wSW5kZXgpO1xuICAgICAgICBhbGlnbmVkR29wcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgICAgYWxpZ25lZEdvcHMuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgYWxpZ25lZEdvcHMubmFsQ291bnQgPSBuYWxDb3VudDtcbiAgICAgICAgYWxpZ25lZEdvcHMucHRzID0gYWxpZ25lZEdvcHNbMF0ucHRzO1xuICAgICAgICBhbGlnbmVkR29wcy5kdHMgPSBhbGlnbmVkR29wc1swXS5kdHM7XG4gICAgICAgIHJldHVybiBhbGlnbmVkR29wcztcbiAgICAgIH07IC8vIHRyaW0gZ29wIGxpc3QgdG8gdGhlIGZpcnN0IGdvcCBmb3VuZCB0aGF0IGhhcyBhIG1hdGNoaW5nIHB0cyB3aXRoIGEgZ29wIGluIHRoZSBsaXN0XG4gICAgICAvLyBvZiBnb3BzVG9BbGlnbldpdGggc3RhcnRpbmcgZnJvbSB0aGUgRU5EIG9mIHRoZSBsaXN0XG5cblxuICAgICAgdGhpcy5hbGlnbkdvcHNBdEVuZF8gPSBmdW5jdGlvbiAoZ29wcykge1xuICAgICAgICB2YXIgYWxpZ25JbmRleCwgZ29wSW5kZXgsIGFsaWduLCBnb3AsIGFsaWduRW5kSW5kZXgsIG1hdGNoRm91bmQ7XG4gICAgICAgIGFsaWduSW5kZXggPSBnb3BzVG9BbGlnbldpdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgZ29wSW5kZXggPSBnb3BzLmxlbmd0aCAtIDE7XG4gICAgICAgIGFsaWduRW5kSW5kZXggPSBudWxsO1xuICAgICAgICBtYXRjaEZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKGFsaWduSW5kZXggPj0gMCAmJiBnb3BJbmRleCA+PSAwKSB7XG4gICAgICAgICAgYWxpZ24gPSBnb3BzVG9BbGlnbldpdGhbYWxpZ25JbmRleF07XG4gICAgICAgICAgZ29wID0gZ29wc1tnb3BJbmRleF07XG5cbiAgICAgICAgICBpZiAoYWxpZ24ucHRzID09PSBnb3AucHRzKSB7XG4gICAgICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhbGlnbi5wdHMgPiBnb3AucHRzKSB7XG4gICAgICAgICAgICBhbGlnbkluZGV4LS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWxpZ25JbmRleCA9PT0gZ29wc1RvQWxpZ25XaXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIGdvcC5wdHMgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IGFsaWdubWVudCBjYW5kaWRhdGUuIElmIG5vIG1hdGNoIGlzIGZvdW5kXG4gICAgICAgICAgICAvLyBieSB0aGUgZW5kIG9mIHRoaXMgbG9vcCwgd2Ugc3RpbGwgd2FudCB0byBhcHBlbmQgZ29wcyB0aGF0IGNvbWUgYWZ0ZXIgdGhpc1xuICAgICAgICAgICAgLy8gcG9pbnRcbiAgICAgICAgICAgIGFsaWduRW5kSW5kZXggPSBnb3BJbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnb3BJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYXRjaEZvdW5kICYmIGFsaWduRW5kSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0cmltSW5kZXg7XG5cbiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHtcbiAgICAgICAgICB0cmltSW5kZXggPSBnb3BJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmltSW5kZXggPSBhbGlnbkVuZEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaW1JbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFsaWduZWRHb3BzID0gZ29wcy5zbGljZSh0cmltSW5kZXgpO1xuICAgICAgICB2YXIgbWV0YWRhdGEgPSBhbGlnbmVkR29wcy5yZWR1Y2UoZnVuY3Rpb24gKHRvdGFsLCBnb3ApIHtcbiAgICAgICAgICB0b3RhbC5ieXRlTGVuZ3RoICs9IGdvcC5ieXRlTGVuZ3RoO1xuICAgICAgICAgIHRvdGFsLmR1cmF0aW9uICs9IGdvcC5kdXJhdGlvbjtcbiAgICAgICAgICB0b3RhbC5uYWxDb3VudCArPSBnb3AubmFsQ291bnQ7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgYnl0ZUxlbmd0aDogMCxcbiAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICBuYWxDb3VudDogMFxuICAgICAgICB9KTtcbiAgICAgICAgYWxpZ25lZEdvcHMuYnl0ZUxlbmd0aCA9IG1ldGFkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGFsaWduZWRHb3BzLmR1cmF0aW9uID0gbWV0YWRhdGEuZHVyYXRpb247XG4gICAgICAgIGFsaWduZWRHb3BzLm5hbENvdW50ID0gbWV0YWRhdGEubmFsQ291bnQ7XG4gICAgICAgIGFsaWduZWRHb3BzLnB0cyA9IGFsaWduZWRHb3BzWzBdLnB0cztcbiAgICAgICAgYWxpZ25lZEdvcHMuZHRzID0gYWxpZ25lZEdvcHNbMF0uZHRzO1xuICAgICAgICByZXR1cm4gYWxpZ25lZEdvcHM7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFsaWduR29wc1dpdGggPSBmdW5jdGlvbiAobmV3R29wc1RvQWxpZ25XaXRoKSB7XG4gICAgICAgIGdvcHNUb0FsaWduV2l0aCA9IG5ld0dvcHNUb0FsaWduV2l0aDtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9WaWRlb1NlZ21lbnRTdHJlYW0ucHJvdG90eXBlID0gbmV3IHN0cmVhbSgpO1xuICAgIC8qKlxuICAgICAqIEEgU3RyZWFtIHRoYXQgY2FuIGNvbWJpbmUgbXVsdGlwbGUgc3RyZWFtcyAoaWUuIGF1ZGlvICYgdmlkZW8pXG4gICAgICogaW50byBhIHNpbmdsZSBvdXRwdXQgc2VnbWVudCBmb3IgTVNFLiBBbHNvIHN1cHBvcnRzIGF1ZGlvLW9ubHlcbiAgICAgKiBhbmQgdmlkZW8tb25seSBzdHJlYW1zLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IHRyYW5zbXV4ZXIgb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzIHtib29sZWFufSBJZiB0cnVlLCBrZWVwIHRoZSB0aW1lc3RhbXBzXG4gICAgICogICAgICAgIGluIHRoZSBzb3VyY2U7IGZhbHNlIHRvIGFkanVzdCB0aGUgZmlyc3Qgc2VnbWVudCB0byBzdGFydCBhdCBtZWRpYSB0aW1lbGluZSBzdGFydC5cbiAgICAgKi9cblxuICAgIF9Db2FsZXNjZVN0cmVhbSA9IGZ1bmN0aW9uIENvYWxlc2NlU3RyZWFtKG9wdGlvbnMsIG1ldGFkYXRhU3RyZWFtKSB7XG4gICAgICAvLyBOdW1iZXIgb2YgVHJhY2tzIHBlciBvdXRwdXQgc2VnbWVudFxuICAgICAgLy8gSWYgZ3JlYXRlciB0aGFuIDEsIHdlIGNvbWJpbmUgbXVsdGlwbGVcbiAgICAgIC8vIHRyYWNrcyBpbnRvIGEgc2luZ2xlIHNlZ21lbnRcbiAgICAgIHRoaXMubnVtYmVyT2ZUcmFja3MgPSAwO1xuICAgICAgdGhpcy5tZXRhZGF0YVN0cmVhbSA9IG1ldGFkYXRhU3RyZWFtO1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZW11eCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5yZW11eFRyYWNrcyA9ICEhb3B0aW9ucy5yZW11eDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtdXhUcmFja3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMua2VlcE9yaWdpbmFsVGltZXN0YW1wcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMua2VlcE9yaWdpbmFsVGltZXN0YW1wcyA9IG9wdGlvbnMua2VlcE9yaWdpbmFsVGltZXN0YW1wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua2VlcE9yaWdpbmFsVGltZXN0YW1wcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdUcmFja3MgPSBbXTtcbiAgICAgIHRoaXMudmlkZW9UcmFjayA9IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdCb3hlcyA9IFtdO1xuICAgICAgdGhpcy5wZW5kaW5nQ2FwdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMucGVuZGluZ01ldGFkYXRhID0gW107XG4gICAgICB0aGlzLnBlbmRpbmdCeXRlcyA9IDA7XG4gICAgICB0aGlzLmVtaXR0ZWRUcmFja3MgPSAwO1xuXG4gICAgICBfQ29hbGVzY2VTdHJlYW0ucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTsgLy8gVGFrZSBvdXRwdXQgZnJvbSBtdWx0aXBsZVxuXG5cbiAgICAgIHRoaXMucHVzaCA9IGZ1bmN0aW9uIChvdXRwdXQpIHtcbiAgICAgICAgLy8gYnVmZmVyIGluY29taW5nIGNhcHRpb25zIHVudGlsIHRoZSBhc3NvY2lhdGVkIHZpZGVvIHNlZ21lbnRcbiAgICAgICAgLy8gZmluaXNoZXNcbiAgICAgICAgaWYgKG91dHB1dC50ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0NhcHRpb25zLnB1c2gob3V0cHV0KTtcbiAgICAgICAgfSAvLyBidWZmZXIgaW5jb21pbmcgaWQzIHRhZ3MgdW50aWwgdGhlIGZpbmFsIGZsdXNoXG5cblxuICAgICAgICBpZiAob3V0cHV0LmZyYW1lcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdNZXRhZGF0YS5wdXNoKG91dHB1dCk7XG4gICAgICAgIH0gLy8gQWRkIHRoaXMgdHJhY2sgdG8gdGhlIGxpc3Qgb2YgcGVuZGluZyB0cmFja3MgYW5kIHN0b3JlXG4gICAgICAgIC8vIGltcG9ydGFudCBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgdGhlIGNvbnN0cnVjdGlvbiBvZlxuICAgICAgICAvLyB0aGUgZmluYWwgc2VnbWVudFxuXG5cbiAgICAgICAgdGhpcy5wZW5kaW5nVHJhY2tzLnB1c2gob3V0cHV0LnRyYWNrKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQnl0ZXMgKz0gb3V0cHV0LmJveGVzLmJ5dGVMZW5ndGg7IC8vIFRPRE86IGlzIHRoZXJlIGFuIGlzc3VlIGZvciB0aGlzIGFnYWluc3QgY2hyb21lP1xuICAgICAgICAvLyBXZSB1bnNoaWZ0IGF1ZGlvIGFuZCBwdXNoIHZpZGVvIGJlY2F1c2VcbiAgICAgICAgLy8gYXMgb2YgQ2hyb21lIDc1IHdoZW4gc3dpdGNoaW5nIGZyb21cbiAgICAgICAgLy8gb25lIGluaXQgc2VnbWVudCB0byBhbm90aGVyIGlmIHRoZSB2aWRlb1xuICAgICAgICAvLyBtZGF0IGRvZXMgbm90IGFwcGVhciBhZnRlciB0aGUgYXVkaW8gbWRhdFxuICAgICAgICAvLyBvbmx5IGF1ZGlvIHdpbGwgcGxheSBmb3IgdGhlIGR1cmF0aW9uIG9mIG91ciB0cmFuc211eC5cblxuICAgICAgICBpZiAob3V0cHV0LnRyYWNrLnR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICB0aGlzLnZpZGVvVHJhY2sgPSBvdXRwdXQudHJhY2s7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQm94ZXMucHVzaChvdXRwdXQuYm94ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dHB1dC50cmFjay50eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgdGhpcy5hdWRpb1RyYWNrID0gb3V0cHV0LnRyYWNrO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0JveGVzLnVuc2hpZnQob3V0cHV0LmJveGVzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgX0NvYWxlc2NlU3RyZWFtLnByb3RvdHlwZSA9IG5ldyBzdHJlYW0oKTtcblxuICAgIF9Db2FsZXNjZVN0cmVhbS5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoZmx1c2hTb3VyY2UpIHtcbiAgICAgIHZhciBvZmZzZXQgPSAwLFxuICAgICAgICAgIGV2ZW50ID0ge1xuICAgICAgICBjYXB0aW9uczogW10sXG4gICAgICAgIGNhcHRpb25TdHJlYW1zOiB7fSxcbiAgICAgICAgbWV0YWRhdGE6IFtdLFxuICAgICAgICBpbmZvOiB7fVxuICAgICAgfSxcbiAgICAgICAgICBjYXB0aW9uLFxuICAgICAgICAgIGlkMyxcbiAgICAgICAgICBpbml0U2VnbWVudCxcbiAgICAgICAgICB0aW1lbGluZVN0YXJ0UHRzID0gMCxcbiAgICAgICAgICBpO1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nVHJhY2tzLmxlbmd0aCA8IHRoaXMubnVtYmVyT2ZUcmFja3MpIHtcbiAgICAgICAgaWYgKGZsdXNoU291cmNlICE9PSAnVmlkZW9TZWdtZW50U3RyZWFtJyAmJiBmbHVzaFNvdXJjZSAhPT0gJ0F1ZGlvU2VnbWVudFN0cmVhbScpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYmVjYXVzZSB3ZSBoYXZlbid0IHJlY2VpdmVkIGEgZmx1c2ggZnJvbSBhIGRhdGEtZ2VuZXJhdGluZ1xuICAgICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHNlZ21lbnQgKG1lYW5pbmcgdGhhdCB3ZSBoYXZlIG9ubHkgcmVjaWV2ZWQgbWV0YS1kYXRhXG4gICAgICAgICAgLy8gb3IgY2FwdGlvbnMuKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbXV4VHJhY2tzKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHVudGlsIHdlIGhhdmUgZW5vdWdoIHRyYWNrcyBmcm9tIHRoZSBwaXBlbGluZSB0byByZW11eCAoaWYgd2VcbiAgICAgICAgICAvLyBhcmUgcmVtdXhpbmcgYXVkaW8gYW5kIHZpZGVvIGludG8gYSBzaW5nbGUgTVA0KVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlbmRpbmdUcmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgd2UgcmVjZWl2ZSBhIGZsdXNoIHdpdGhvdXQgYW55IGRhdGEgaGF2aW5nIGJlZW5cbiAgICAgICAgICAvLyByZWNlaXZlZCB3ZSBjb25zaWRlciBpdCBhbiBlbWl0dGVkIHRyYWNrIGZvciB0aGUgcHVycG9zZXMgb2YgY29hbGVzY2luZ1xuICAgICAgICAgIC8vIGBkb25lYCBldmVudHMuXG4gICAgICAgICAgLy8gV2UgZG8gdGhpcyBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYW4gYXVkaW8gYW5kIHZpZGVvIHRyYWNrIGluIHRoZVxuICAgICAgICAgIC8vIHNlZ21lbnQgYnV0IG5vIGF1ZGlvIGRhdGEuIChzZWVuIGluIHNldmVyYWwgcGxheWxpc3RzIHdpdGggYWx0ZXJuYXRlXG4gICAgICAgICAgLy8gYXVkaW8gdHJhY2tzIGFuZCBubyBhdWRpbyBwcmVzZW50IGluIHRoZSBtYWluIFRTIHNlZ21lbnRzLilcbiAgICAgICAgICB0aGlzLmVtaXR0ZWRUcmFja3MrKztcblxuICAgICAgICAgIGlmICh0aGlzLmVtaXR0ZWRUcmFja3MgPj0gdGhpcy5udW1iZXJPZlRyYWNrcykge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkb25lJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZWRUcmFja3MgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aWRlb1RyYWNrKSB7XG4gICAgICAgIHRpbWVsaW5lU3RhcnRQdHMgPSB0aGlzLnZpZGVvVHJhY2sudGltZWxpbmVTdGFydEluZm8ucHRzO1xuICAgICAgICBWSURFT19QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBldmVudC5pbmZvW3Byb3BdID0gdGhpcy52aWRlb1RyYWNrW3Byb3BdO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdWRpb1RyYWNrKSB7XG4gICAgICAgIHRpbWVsaW5lU3RhcnRQdHMgPSB0aGlzLmF1ZGlvVHJhY2sudGltZWxpbmVTdGFydEluZm8ucHRzO1xuICAgICAgICBBVURJT19QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBldmVudC5pbmZvW3Byb3BdID0gdGhpcy5hdWRpb1RyYWNrW3Byb3BdO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlkZW9UcmFjayB8fCB0aGlzLmF1ZGlvVHJhY2spIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1RyYWNrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBldmVudC50eXBlID0gdGhpcy5wZW5kaW5nVHJhY2tzWzBdLnR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQudHlwZSA9ICdjb21iaW5lZCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXR0ZWRUcmFja3MgKz0gdGhpcy5wZW5kaW5nVHJhY2tzLmxlbmd0aDtcbiAgICAgICAgaW5pdFNlZ21lbnQgPSBtcDRHZW5lcmF0b3IuaW5pdFNlZ21lbnQodGhpcy5wZW5kaW5nVHJhY2tzKTsgLy8gQ3JlYXRlIGEgbmV3IHR5cGVkIGFycmF5IHRvIGhvbGQgdGhlIGluaXQgc2VnbWVudFxuXG4gICAgICAgIGV2ZW50LmluaXRTZWdtZW50ID0gbmV3IFVpbnQ4QXJyYXkoaW5pdFNlZ21lbnQuYnl0ZUxlbmd0aCk7IC8vIENyZWF0ZSBhbiBpbml0IHNlZ21lbnQgY29udGFpbmluZyBhIG1vb3ZcbiAgICAgICAgLy8gYW5kIHRyYWNrIGRlZmluaXRpb25zXG5cbiAgICAgICAgZXZlbnQuaW5pdFNlZ21lbnQuc2V0KGluaXRTZWdtZW50KTsgLy8gQ3JlYXRlIGEgbmV3IHR5cGVkIGFycmF5IHRvIGhvbGQgdGhlIG1vb2YrbWRhdHNcblxuICAgICAgICBldmVudC5kYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5wZW5kaW5nQnl0ZXMpOyAvLyBBcHBlbmQgZWFjaCBtb29mK21kYXQgKG9uZSBwZXIgdHJhY2spIHRvZ2V0aGVyXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMucGVuZGluZ0JveGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZXZlbnQuZGF0YS5zZXQodGhpcy5wZW5kaW5nQm94ZXNbaV0sIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IHRoaXMucGVuZGluZ0JveGVzW2ldLmJ5dGVMZW5ndGg7XG4gICAgICAgIH0gLy8gVHJhbnNsYXRlIGNhcHRpb24gUFRTIHRpbWVzIGludG8gc2Vjb25kIG9mZnNldHMgdG8gbWF0Y2ggdGhlXG4gICAgICAgIC8vIHZpZGVvIHRpbWVsaW5lIGZvciB0aGUgc2VnbWVudCwgYW5kIGFkZCB0cmFjayBpbmZvXG5cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nQ2FwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYXB0aW9uID0gdGhpcy5wZW5kaW5nQ2FwdGlvbnNbaV07XG4gICAgICAgICAgY2FwdGlvbi5zdGFydFRpbWUgPSBjbG9jay5tZXRhZGF0YVRzVG9TZWNvbmRzKGNhcHRpb24uc3RhcnRQdHMsIHRpbWVsaW5lU3RhcnRQdHMsIHRoaXMua2VlcE9yaWdpbmFsVGltZXN0YW1wcyk7XG4gICAgICAgICAgY2FwdGlvbi5lbmRUaW1lID0gY2xvY2subWV0YWRhdGFUc1RvU2Vjb25kcyhjYXB0aW9uLmVuZFB0cywgdGltZWxpbmVTdGFydFB0cywgdGhpcy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzKTtcbiAgICAgICAgICBldmVudC5jYXB0aW9uU3RyZWFtc1tjYXB0aW9uLnN0cmVhbV0gPSB0cnVlO1xuICAgICAgICAgIGV2ZW50LmNhcHRpb25zLnB1c2goY2FwdGlvbik7XG4gICAgICAgIH0gLy8gVHJhbnNsYXRlIElEMyBmcmFtZSBQVFMgdGltZXMgaW50byBzZWNvbmQgb2Zmc2V0cyB0byBtYXRjaCB0aGVcbiAgICAgICAgLy8gdmlkZW8gdGltZWxpbmUgZm9yIHRoZSBzZWdtZW50XG5cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nTWV0YWRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZDMgPSB0aGlzLnBlbmRpbmdNZXRhZGF0YVtpXTtcbiAgICAgICAgICBpZDMuY3VlVGltZSA9IGNsb2NrLm1ldGFkYXRhVHNUb1NlY29uZHMoaWQzLnB0cywgdGltZWxpbmVTdGFydFB0cywgdGhpcy5rZWVwT3JpZ2luYWxUaW1lc3RhbXBzKTtcbiAgICAgICAgICBldmVudC5tZXRhZGF0YS5wdXNoKGlkMyk7XG4gICAgICAgIH0gLy8gV2UgYWRkIHRoaXMgdG8gZXZlcnkgc2luZ2xlIGVtaXR0ZWQgc2VnbWVudCBldmVuIHRob3VnaCB3ZSBvbmx5IG5lZWRcbiAgICAgICAgLy8gaXQgZm9yIHRoZSBmaXJzdFxuXG5cbiAgICAgICAgZXZlbnQubWV0YWRhdGEuZGlzcGF0Y2hUeXBlID0gdGhpcy5tZXRhZGF0YVN0cmVhbS5kaXNwYXRjaFR5cGU7IC8vIFJlc2V0IHN0cmVhbSBzdGF0ZVxuXG4gICAgICAgIHRoaXMucGVuZGluZ1RyYWNrcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLnZpZGVvVHJhY2sgPSBudWxsO1xuICAgICAgICB0aGlzLnBlbmRpbmdCb3hlcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXB0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLnBlbmRpbmdCeXRlcyA9IDA7XG4gICAgICAgIHRoaXMucGVuZGluZ01ldGFkYXRhLmxlbmd0aCA9IDA7IC8vIEVtaXQgdGhlIGJ1aWx0IHNlZ21lbnRcbiAgICAgICAgLy8gV2UgaW5jbHVkZSBjYXB0aW9ucyBhbmQgSUQzIHRhZ3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LFxuICAgICAgICAvLyBpZGVhbGx5IHdlIHNob3VsZCBzZW5kIG9ubHkgdmlkZW8gYW5kIGF1ZGlvIGluIHRoZSBkYXRhIGV2ZW50XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhJywgZXZlbnQpOyAvLyBFbWl0IGVhY2ggY2FwdGlvbiB0byB0aGUgb3V0c2lkZSB3b3JsZFxuICAgICAgICAvLyBJZGVhbGx5LCB0aGlzIHdvdWxkIGhhcHBlbiBpbW1lZGlhdGVseSBvbiBwYXJzaW5nIGNhcHRpb25zLFxuICAgICAgICAvLyBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB2aWRlbyBkYXRhIGlzIHNlbnQgYmFjayBmaXJzdFxuICAgICAgICAvLyBzbyB0aGF0IGNhcHRpb24gdGltaW5nIGNhbiBiZSBhZGp1c3RlZCB0byBtYXRjaCB2aWRlbyB0aW1pbmdcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnQuY2FwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYXB0aW9uID0gZXZlbnQuY2FwdGlvbnNbaV07XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdjYXB0aW9uJywgY2FwdGlvbik7XG4gICAgICAgIH0gLy8gRW1pdCBlYWNoIGlkMyB0YWcgdG8gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgLy8gSWRlYWxseSwgdGhpcyB3b3VsZCBoYXBwZW4gaW1tZWRpYXRlbHkgb24gcGFyc2luZyB0aGUgdGFnLFxuICAgICAgICAvLyBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB2aWRlbyBkYXRhIGlzIHNlbnQgYmFjayBmaXJzdFxuICAgICAgICAvLyBzbyB0aGF0IElEMyBmcmFtZSB0aW1pbmcgY2FuIGJlIGFkanVzdGVkIHRvIG1hdGNoIHZpZGVvIHRpbWluZ1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50Lm1ldGFkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWQzID0gZXZlbnQubWV0YWRhdGFbaV07XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdpZDNGcmFtZScsIGlkMyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT25seSBlbWl0IGBkb25lYCBpZiBhbGwgdHJhY2tzIGhhdmUgYmVlbiBmbHVzaGVkIGFuZCBlbWl0dGVkXG5cblxuICAgICAgaWYgKHRoaXMuZW1pdHRlZFRyYWNrcyA+PSB0aGlzLm51bWJlck9mVHJhY2tzKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignZG9uZScpO1xuICAgICAgICB0aGlzLmVtaXR0ZWRUcmFja3MgPSAwO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfQ29hbGVzY2VTdHJlYW0ucHJvdG90eXBlLnNldFJlbXV4ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgdGhpcy5yZW11eFRyYWNrcyA9IHZhbDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgU3RyZWFtIHRoYXQgZXhwZWN0cyBNUDJUIGJpbmFyeSBkYXRhIGFzIGlucHV0IGFuZCBwcm9kdWNlc1xuICAgICAqIGNvcnJlc3BvbmRpbmcgbWVkaWEgc2VnbWVudHMsIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBNZWRpYSBTb3VyY2VcbiAgICAgKiBFeHRlbnNpb24gKE1TRSkgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9ydCB0aGUgSVNPIEJNRkYgYnl0ZVxuICAgICAqIHN0cmVhbSBmb3JtYXQsIGxpa2UgQ2hyb21lLlxuICAgICAqL1xuXG5cbiAgICBfVHJhbnNtdXhlciA9IGZ1bmN0aW9uIFRyYW5zbXV4ZXIob3B0aW9ucykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGhhc0ZsdXNoZWQgPSB0cnVlLFxuICAgICAgICAgIHZpZGVvVHJhY2ssXG4gICAgICAgICAgYXVkaW9UcmFjaztcblxuICAgICAgX1RyYW5zbXV4ZXIucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICB0aGlzLmJhc2VNZWRpYURlY29kZVRpbWUgPSBvcHRpb25zLmJhc2VNZWRpYURlY29kZVRpbWUgfHwgMDtcbiAgICAgIHRoaXMudHJhbnNtdXhQaXBlbGluZV8gPSB7fTtcblxuICAgICAgdGhpcy5zZXR1cEFhY1BpcGVsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGlwZWxpbmUgPSB7fTtcbiAgICAgICAgdGhpcy50cmFuc211eFBpcGVsaW5lXyA9IHBpcGVsaW5lO1xuICAgICAgICBwaXBlbGluZS50eXBlID0gJ2FhYyc7XG4gICAgICAgIHBpcGVsaW5lLm1ldGFkYXRhU3RyZWFtID0gbmV3IG0ydHNfMS5NZXRhZGF0YVN0cmVhbSgpOyAvLyBzZXQgdXAgdGhlIHBhcnNpbmcgcGlwZWxpbmVcblxuICAgICAgICBwaXBlbGluZS5hYWNTdHJlYW0gPSBuZXcgYWFjKCk7XG4gICAgICAgIHBpcGVsaW5lLmF1ZGlvVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0gPSBuZXcgbTJ0c18xLlRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtKCdhdWRpbycpO1xuICAgICAgICBwaXBlbGluZS50aW1lZE1ldGFkYXRhVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0gPSBuZXcgbTJ0c18xLlRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtKCd0aW1lZC1tZXRhZGF0YScpO1xuICAgICAgICBwaXBlbGluZS5hZHRzU3RyZWFtID0gbmV3IGFkdHMoKTtcbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0gPSBuZXcgX0NvYWxlc2NlU3RyZWFtKG9wdGlvbnMsIHBpcGVsaW5lLm1ldGFkYXRhU3RyZWFtKTtcbiAgICAgICAgcGlwZWxpbmUuaGVhZE9mUGlwZWxpbmUgPSBwaXBlbGluZS5hYWNTdHJlYW07XG4gICAgICAgIHBpcGVsaW5lLmFhY1N0cmVhbS5waXBlKHBpcGVsaW5lLmF1ZGlvVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0pLnBpcGUocGlwZWxpbmUuYWR0c1N0cmVhbSk7XG4gICAgICAgIHBpcGVsaW5lLmFhY1N0cmVhbS5waXBlKHBpcGVsaW5lLnRpbWVkTWV0YWRhdGFUaW1lc3RhbXBSb2xsb3ZlclN0cmVhbSkucGlwZShwaXBlbGluZS5tZXRhZGF0YVN0cmVhbSkucGlwZShwaXBlbGluZS5jb2FsZXNjZVN0cmVhbSk7XG4gICAgICAgIHBpcGVsaW5lLm1ldGFkYXRhU3RyZWFtLm9uKCd0aW1lc3RhbXAnLCBmdW5jdGlvbiAoZnJhbWUpIHtcbiAgICAgICAgICBwaXBlbGluZS5hYWNTdHJlYW0uc2V0VGltZXN0YW1wKGZyYW1lLnRpbWVTdGFtcCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwaXBlbGluZS5hYWNTdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICd0aW1lZC1tZXRhZGF0YScgJiYgIXBpcGVsaW5lLmF1ZGlvU2VnbWVudFN0cmVhbSkge1xuICAgICAgICAgICAgYXVkaW9UcmFjayA9IGF1ZGlvVHJhY2sgfHwge1xuICAgICAgICAgICAgICB0aW1lbGluZVN0YXJ0SW5mbzoge1xuICAgICAgICAgICAgICAgIGJhc2VNZWRpYURlY29kZVRpbWU6IHNlbGYuYmFzZU1lZGlhRGVjb2RlVGltZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb2RlYzogJ2FkdHMnLFxuICAgICAgICAgICAgICB0eXBlOiAnYXVkaW8nXG4gICAgICAgICAgICB9OyAvLyBob29rIHVwIHRoZSBhdWRpbyBzZWdtZW50IHN0cmVhbSB0byB0aGUgZmlyc3QgdHJhY2sgd2l0aCBhYWMgZGF0YVxuXG4gICAgICAgICAgICBwaXBlbGluZS5jb2FsZXNjZVN0cmVhbS5udW1iZXJPZlRyYWNrcysrO1xuICAgICAgICAgICAgcGlwZWxpbmUuYXVkaW9TZWdtZW50U3RyZWFtID0gbmV3IF9BdWRpb1NlZ21lbnRTdHJlYW0oYXVkaW9UcmFjaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBwaXBlbGluZS5hdWRpb1NlZ21lbnRTdHJlYW0ub24oJ3RpbWluZ0luZm8nLCBzZWxmLnRyaWdnZXIuYmluZChzZWxmLCAnYXVkaW9UaW1pbmdJbmZvJykpOyAvLyBTZXQgdXAgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIGF1ZGlvIHBpcGVsaW5lXG5cbiAgICAgICAgICAgIHBpcGVsaW5lLmFkdHNTdHJlYW0ucGlwZShwaXBlbGluZS5hdWRpb1NlZ21lbnRTdHJlYW0pLnBpcGUocGlwZWxpbmUuY29hbGVzY2VTdHJlYW0pO1xuICAgICAgICAgIH0gLy8gZW1pdCBwbXQgaW5mb1xuXG5cbiAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3RyYWNraW5mbycsIHtcbiAgICAgICAgICAgIGhhc0F1ZGlvOiAhIWF1ZGlvVHJhY2ssXG4gICAgICAgICAgICBoYXNWaWRlbzogISF2aWRlb1RyYWNrXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pOyAvLyBSZS1lbWl0IGFueSBkYXRhIGNvbWluZyBmcm9tIHRoZSBjb2FsZXNjZSBzdHJlYW0gdG8gdGhlIG91dHNpZGUgd29ybGRcblxuICAgICAgICBwaXBlbGluZS5jb2FsZXNjZVN0cmVhbS5vbignZGF0YScsIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMsICdkYXRhJykpOyAvLyBMZXQgdGhlIGNvbnN1bWVyIGtub3cgd2UgaGF2ZSBmaW5pc2hlZCBmbHVzaGluZyB0aGUgZW50aXJlIHBpcGVsaW5lXG5cbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0ub24oJ2RvbmUnLCB0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCAnZG9uZScpKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2V0dXBUc1BpcGVsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGlwZWxpbmUgPSB7fTtcbiAgICAgICAgdGhpcy50cmFuc211eFBpcGVsaW5lXyA9IHBpcGVsaW5lO1xuICAgICAgICBwaXBlbGluZS50eXBlID0gJ3RzJztcbiAgICAgICAgcGlwZWxpbmUubWV0YWRhdGFTdHJlYW0gPSBuZXcgbTJ0c18xLk1ldGFkYXRhU3RyZWFtKCk7IC8vIHNldCB1cCB0aGUgcGFyc2luZyBwaXBlbGluZVxuXG4gICAgICAgIHBpcGVsaW5lLnBhY2tldFN0cmVhbSA9IG5ldyBtMnRzXzEuVHJhbnNwb3J0UGFja2V0U3RyZWFtKCk7XG4gICAgICAgIHBpcGVsaW5lLnBhcnNlU3RyZWFtID0gbmV3IG0ydHNfMS5UcmFuc3BvcnRQYXJzZVN0cmVhbSgpO1xuICAgICAgICBwaXBlbGluZS5lbGVtZW50YXJ5U3RyZWFtID0gbmV3IG0ydHNfMS5FbGVtZW50YXJ5U3RyZWFtKCk7XG4gICAgICAgIHBpcGVsaW5lLnRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtID0gbmV3IG0ydHNfMS5UaW1lc3RhbXBSb2xsb3ZlclN0cmVhbSgpO1xuICAgICAgICBwaXBlbGluZS5hZHRzU3RyZWFtID0gbmV3IGFkdHMoKTtcbiAgICAgICAgcGlwZWxpbmUuaDI2NFN0cmVhbSA9IG5ldyBIMjY0U3RyZWFtKCk7XG4gICAgICAgIHBpcGVsaW5lLmNhcHRpb25TdHJlYW0gPSBuZXcgbTJ0c18xLkNhcHRpb25TdHJlYW0oKTtcbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0gPSBuZXcgX0NvYWxlc2NlU3RyZWFtKG9wdGlvbnMsIHBpcGVsaW5lLm1ldGFkYXRhU3RyZWFtKTtcbiAgICAgICAgcGlwZWxpbmUuaGVhZE9mUGlwZWxpbmUgPSBwaXBlbGluZS5wYWNrZXRTdHJlYW07IC8vIGRpc2Fzc2VtYmxlIE1QRUcyLVRTIHBhY2tldHMgaW50byBlbGVtZW50YXJ5IHN0cmVhbXNcblxuICAgICAgICBwaXBlbGluZS5wYWNrZXRTdHJlYW0ucGlwZShwaXBlbGluZS5wYXJzZVN0cmVhbSkucGlwZShwaXBlbGluZS5lbGVtZW50YXJ5U3RyZWFtKS5waXBlKHBpcGVsaW5lLnRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtKTsgLy8gISFUSElTIE9SREVSIElTIElNUE9SVEFOVCEhXG4gICAgICAgIC8vIGRlbXV4IHRoZSBzdHJlYW1zXG5cbiAgICAgICAgcGlwZWxpbmUudGltZXN0YW1wUm9sbG92ZXJTdHJlYW0ucGlwZShwaXBlbGluZS5oMjY0U3RyZWFtKTtcbiAgICAgICAgcGlwZWxpbmUudGltZXN0YW1wUm9sbG92ZXJTdHJlYW0ucGlwZShwaXBlbGluZS5hZHRzU3RyZWFtKTtcbiAgICAgICAgcGlwZWxpbmUudGltZXN0YW1wUm9sbG92ZXJTdHJlYW0ucGlwZShwaXBlbGluZS5tZXRhZGF0YVN0cmVhbSkucGlwZShwaXBlbGluZS5jb2FsZXNjZVN0cmVhbSk7IC8vIEhvb2sgdXAgQ0VBLTYwOC83MDggY2FwdGlvbiBzdHJlYW1cblxuICAgICAgICBwaXBlbGluZS5oMjY0U3RyZWFtLnBpcGUocGlwZWxpbmUuY2FwdGlvblN0cmVhbSkucGlwZShwaXBlbGluZS5jb2FsZXNjZVN0cmVhbSk7XG4gICAgICAgIHBpcGVsaW5lLmVsZW1lbnRhcnlTdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ21ldGFkYXRhJykge1xuICAgICAgICAgICAgaSA9IGRhdGEudHJhY2tzLmxlbmd0aDsgLy8gc2NhbiB0aGUgdHJhY2tzIGxpc3RlZCBpbiB0aGUgbWV0YWRhdGFcblxuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICBpZiAoIXZpZGVvVHJhY2sgJiYgZGF0YS50cmFja3NbaV0udHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgIHZpZGVvVHJhY2sgPSBkYXRhLnRyYWNrc1tpXTtcbiAgICAgICAgICAgICAgICB2aWRlb1RyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmJhc2VNZWRpYURlY29kZVRpbWUgPSBzZWxmLmJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWF1ZGlvVHJhY2sgJiYgZGF0YS50cmFja3NbaV0udHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2sgPSBkYXRhLnRyYWNrc1tpXTtcbiAgICAgICAgICAgICAgICBhdWRpb1RyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmJhc2VNZWRpYURlY29kZVRpbWUgPSBzZWxmLmJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gaG9vayB1cCB0aGUgdmlkZW8gc2VnbWVudCBzdHJlYW0gdG8gdGhlIGZpcnN0IHRyYWNrIHdpdGggaDI2NCBkYXRhXG5cblxuICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2sgJiYgIXBpcGVsaW5lLnZpZGVvU2VnbWVudFN0cmVhbSkge1xuICAgICAgICAgICAgICBwaXBlbGluZS5jb2FsZXNjZVN0cmVhbS5udW1iZXJPZlRyYWNrcysrO1xuICAgICAgICAgICAgICBwaXBlbGluZS52aWRlb1NlZ21lbnRTdHJlYW0gPSBuZXcgX1ZpZGVvU2VnbWVudFN0cmVhbSh2aWRlb1RyYWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgcGlwZWxpbmUudmlkZW9TZWdtZW50U3RyZWFtLm9uKCd0aW1lbGluZVN0YXJ0SW5mbycsIGZ1bmN0aW9uICh0aW1lbGluZVN0YXJ0SW5mbykge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdmlkZW8gZW1pdHMgdGltZWxpbmVTdGFydEluZm8gZGF0YSBhZnRlciBhIGZsdXNoLCB3ZSBmb3J3YXJkIHRoYXRcbiAgICAgICAgICAgICAgICAvLyBpbmZvIHRvIHRoZSBBdWRpb1NlZ21lbnRTdHJlYW0sIGlmIGl0IGV4aXN0cywgYmVjYXVzZSB2aWRlbyB0aW1lbGluZVxuICAgICAgICAgICAgICAgIC8vIGRhdGEgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFjaykge1xuICAgICAgICAgICAgICAgICAgYXVkaW9UcmFjay50aW1lbGluZVN0YXJ0SW5mbyA9IHRpbWVsaW5lU3RhcnRJbmZvOyAvLyBPbiB0aGUgZmlyc3Qgc2VnbWVudCB3ZSB0cmltIEFBQyBmcmFtZXMgdGhhdCBleGlzdCBiZWZvcmUgdGhlXG4gICAgICAgICAgICAgICAgICAvLyB2ZXJ5IGVhcmxpZXN0IERUUyB3ZSBoYXZlIHNlZW4gaW4gdmlkZW8gYmVjYXVzZSBDaHJvbWUgd2lsbFxuICAgICAgICAgICAgICAgICAgLy8gaW50ZXJwcmV0IGFueSB2aWRlbyB0cmFjayB3aXRoIGEgYmFzZU1lZGlhRGVjb2RlVGltZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgICAvLyBub24temVybyBhcyBhIGdhcC5cblxuICAgICAgICAgICAgICAgICAgcGlwZWxpbmUuYXVkaW9TZWdtZW50U3RyZWFtLnNldEVhcmxpZXN0RHRzKHRpbWVsaW5lU3RhcnRJbmZvLmR0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcGlwZWxpbmUudmlkZW9TZWdtZW50U3RyZWFtLm9uKCdwcm9jZXNzZWRHb3BzSW5mbycsIHNlbGYudHJpZ2dlci5iaW5kKHNlbGYsICdnb3BJbmZvJykpO1xuICAgICAgICAgICAgICBwaXBlbGluZS52aWRlb1NlZ21lbnRTdHJlYW0ub24oJ3NlZ21lbnRUaW1pbmdJbmZvJywgc2VsZi50cmlnZ2VyLmJpbmQoc2VsZiwgJ3ZpZGVvU2VnbWVudFRpbWluZ0luZm8nKSk7XG4gICAgICAgICAgICAgIHBpcGVsaW5lLnZpZGVvU2VnbWVudFN0cmVhbS5vbignYmFzZU1lZGlhRGVjb2RlVGltZScsIGZ1bmN0aW9uIChiYXNlTWVkaWFEZWNvZGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGlvVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmF1ZGlvU2VnbWVudFN0cmVhbS5zZXRWaWRlb0Jhc2VNZWRpYURlY29kZVRpbWUoYmFzZU1lZGlhRGVjb2RlVGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcGlwZWxpbmUudmlkZW9TZWdtZW50U3RyZWFtLm9uKCd0aW1pbmdJbmZvJywgc2VsZi50cmlnZ2VyLmJpbmQoc2VsZiwgJ3ZpZGVvVGltaW5nSW5mbycpKTsgLy8gU2V0IHVwIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSB2aWRlbyBwaXBlbGluZVxuXG4gICAgICAgICAgICAgIHBpcGVsaW5lLmgyNjRTdHJlYW0ucGlwZShwaXBlbGluZS52aWRlb1NlZ21lbnRTdHJlYW0pLnBpcGUocGlwZWxpbmUuY29hbGVzY2VTdHJlYW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXVkaW9UcmFjayAmJiAhcGlwZWxpbmUuYXVkaW9TZWdtZW50U3RyZWFtKSB7XG4gICAgICAgICAgICAgIC8vIGhvb2sgdXAgdGhlIGF1ZGlvIHNlZ21lbnQgc3RyZWFtIHRvIHRoZSBmaXJzdCB0cmFjayB3aXRoIGFhYyBkYXRhXG4gICAgICAgICAgICAgIHBpcGVsaW5lLmNvYWxlc2NlU3RyZWFtLm51bWJlck9mVHJhY2tzKys7XG4gICAgICAgICAgICAgIHBpcGVsaW5lLmF1ZGlvU2VnbWVudFN0cmVhbSA9IG5ldyBfQXVkaW9TZWdtZW50U3RyZWFtKGF1ZGlvVHJhY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgICBwaXBlbGluZS5hdWRpb1NlZ21lbnRTdHJlYW0ub24oJ3RpbWluZ0luZm8nLCBzZWxmLnRyaWdnZXIuYmluZChzZWxmLCAnYXVkaW9UaW1pbmdJbmZvJykpOyAvLyBTZXQgdXAgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIGF1ZGlvIHBpcGVsaW5lXG5cbiAgICAgICAgICAgICAgcGlwZWxpbmUuYWR0c1N0cmVhbS5waXBlKHBpcGVsaW5lLmF1ZGlvU2VnbWVudFN0cmVhbSkucGlwZShwaXBlbGluZS5jb2FsZXNjZVN0cmVhbSk7XG4gICAgICAgICAgICB9IC8vIGVtaXQgcG10IGluZm9cblxuXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3RyYWNraW5mbycsIHtcbiAgICAgICAgICAgICAgaGFzQXVkaW86ICEhYXVkaW9UcmFjayxcbiAgICAgICAgICAgICAgaGFzVmlkZW86ICEhdmlkZW9UcmFja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gUmUtZW1pdCBhbnkgZGF0YSBjb21pbmcgZnJvbSB0aGUgY29hbGVzY2Ugc3RyZWFtIHRvIHRoZSBvdXRzaWRlIHdvcmxkXG5cbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0ub24oJ2RhdGEnLCB0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCAnZGF0YScpKTtcbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0ub24oJ2lkM0ZyYW1lJywgZnVuY3Rpb24gKGlkM0ZyYW1lKSB7XG4gICAgICAgICAgaWQzRnJhbWUuZGlzcGF0Y2hUeXBlID0gcGlwZWxpbmUubWV0YWRhdGFTdHJlYW0uZGlzcGF0Y2hUeXBlO1xuICAgICAgICAgIHNlbGYudHJpZ2dlcignaWQzRnJhbWUnLCBpZDNGcmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBwaXBlbGluZS5jb2FsZXNjZVN0cmVhbS5vbignY2FwdGlvbicsIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMsICdjYXB0aW9uJykpOyAvLyBMZXQgdGhlIGNvbnN1bWVyIGtub3cgd2UgaGF2ZSBmaW5pc2hlZCBmbHVzaGluZyB0aGUgZW50aXJlIHBpcGVsaW5lXG5cbiAgICAgICAgcGlwZWxpbmUuY29hbGVzY2VTdHJlYW0ub24oJ2RvbmUnLCB0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCAnZG9uZScpKTtcbiAgICAgIH07IC8vIGhvb2sgdXAgdGhlIHNlZ21lbnQgc3RyZWFtcyBvbmNlIHRyYWNrIG1ldGFkYXRhIGlzIGRlbGl2ZXJlZFxuXG5cbiAgICAgIHRoaXMuc2V0QmFzZU1lZGlhRGVjb2RlVGltZSA9IGZ1bmN0aW9uIChiYXNlTWVkaWFEZWNvZGVUaW1lKSB7XG4gICAgICAgIHZhciBwaXBlbGluZSA9IHRoaXMudHJhbnNtdXhQaXBlbGluZV87XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBPcmlnaW5hbFRpbWVzdGFtcHMpIHtcbiAgICAgICAgICB0aGlzLmJhc2VNZWRpYURlY29kZVRpbWUgPSBiYXNlTWVkaWFEZWNvZGVUaW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF1ZGlvVHJhY2spIHtcbiAgICAgICAgICBhdWRpb1RyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLmR0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBhdWRpb1RyYWNrLnRpbWVsaW5lU3RhcnRJbmZvLnB0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cmFja0RlY29kZUluZm8uY2xlYXJEdHNJbmZvKGF1ZGlvVHJhY2spO1xuXG4gICAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBPcmlnaW5hbFRpbWVzdGFtcHMpIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhY2sudGltZWxpbmVTdGFydEluZm8uYmFzZU1lZGlhRGVjb2RlVGltZSA9IGJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBpcGVsaW5lLmF1ZGlvVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0pIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmF1ZGlvVGltZXN0YW1wUm9sbG92ZXJTdHJlYW0uZGlzY29udGludWl0eSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWRlb1RyYWNrKSB7XG4gICAgICAgICAgaWYgKHBpcGVsaW5lLnZpZGVvU2VnbWVudFN0cmVhbSkge1xuICAgICAgICAgICAgcGlwZWxpbmUudmlkZW9TZWdtZW50U3RyZWFtLmdvcENhY2hlXyA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpZGVvVHJhY2sudGltZWxpbmVTdGFydEluZm8uZHRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHZpZGVvVHJhY2sudGltZWxpbmVTdGFydEluZm8ucHRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRyYWNrRGVjb2RlSW5mby5jbGVhckR0c0luZm8odmlkZW9UcmFjayk7XG4gICAgICAgICAgcGlwZWxpbmUuY2FwdGlvblN0cmVhbS5yZXNldCgpO1xuXG4gICAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBPcmlnaW5hbFRpbWVzdGFtcHMpIHtcbiAgICAgICAgICAgIHZpZGVvVHJhY2sudGltZWxpbmVTdGFydEluZm8uYmFzZU1lZGlhRGVjb2RlVGltZSA9IGJhc2VNZWRpYURlY29kZVRpbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBpcGVsaW5lLnRpbWVzdGFtcFJvbGxvdmVyU3RyZWFtKSB7XG4gICAgICAgICAgcGlwZWxpbmUudGltZXN0YW1wUm9sbG92ZXJTdHJlYW0uZGlzY29udGludWl0eSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldEF1ZGlvQXBwZW5kU3RhcnQgPSBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG4gICAgICAgIGlmIChhdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy50cmFuc211eFBpcGVsaW5lXy5hdWRpb1NlZ21lbnRTdHJlYW0uc2V0QXVkaW9BcHBlbmRTdGFydCh0aW1lc3RhbXApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNldFJlbXV4ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnRyYW5zbXV4UGlwZWxpbmVfO1xuICAgICAgICBvcHRpb25zLnJlbXV4ID0gdmFsO1xuXG4gICAgICAgIGlmIChwaXBlbGluZSAmJiBwaXBlbGluZS5jb2FsZXNjZVN0cmVhbSkge1xuICAgICAgICAgIHBpcGVsaW5lLmNvYWxlc2NlU3RyZWFtLnNldFJlbXV4KHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYWxpZ25Hb3BzV2l0aCA9IGZ1bmN0aW9uIChnb3BzVG9BbGlnbldpdGgpIHtcbiAgICAgICAgaWYgKHZpZGVvVHJhY2sgJiYgdGhpcy50cmFuc211eFBpcGVsaW5lXy52aWRlb1NlZ21lbnRTdHJlYW0pIHtcbiAgICAgICAgICB0aGlzLnRyYW5zbXV4UGlwZWxpbmVfLnZpZGVvU2VnbWVudFN0cmVhbS5hbGlnbkdvcHNXaXRoKGdvcHNUb0FsaWduV2l0aCk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIGZlZWQgaW5jb21pbmcgZGF0YSB0byB0aGUgZnJvbnQgb2YgdGhlIHBhcnNpbmcgcGlwZWxpbmVcblxuXG4gICAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoaGFzRmx1c2hlZCkge1xuICAgICAgICAgIHZhciBpc0FhYyA9IGlzTGlrZWx5QWFjRGF0YSQxKGRhdGEpO1xuXG4gICAgICAgICAgaWYgKGlzQWFjICYmIHRoaXMudHJhbnNtdXhQaXBlbGluZV8udHlwZSAhPT0gJ2FhYycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBBYWNQaXBlbGluZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWlzQWFjICYmIHRoaXMudHJhbnNtdXhQaXBlbGluZV8udHlwZSAhPT0gJ3RzJykge1xuICAgICAgICAgICAgdGhpcy5zZXR1cFRzUGlwZWxpbmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYXNGbHVzaGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zbXV4UGlwZWxpbmVfLmhlYWRPZlBpcGVsaW5lLnB1c2goZGF0YSk7XG4gICAgICB9OyAvLyBmbHVzaCBhbnkgYnVmZmVyZWQgZGF0YVxuXG5cbiAgICAgIHRoaXMuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc0ZsdXNoZWQgPSB0cnVlOyAvLyBTdGFydCBhdCB0aGUgdG9wIG9mIHRoZSBwaXBlbGluZSBhbmQgZmx1c2ggYWxsIHBlbmRpbmcgd29ya1xuXG4gICAgICAgIHRoaXMudHJhbnNtdXhQaXBlbGluZV8uaGVhZE9mUGlwZWxpbmUuZmx1c2goKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZW5kVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudHJhbnNtdXhQaXBlbGluZV8uaGVhZE9mUGlwZWxpbmUuZW5kVGltZWxpbmUoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zbXV4UGlwZWxpbmVfLmhlYWRPZlBpcGVsaW5lKSB7XG4gICAgICAgICAgdGhpcy50cmFuc211eFBpcGVsaW5lXy5oZWFkT2ZQaXBlbGluZS5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9OyAvLyBDYXB0aW9uIGRhdGEgaGFzIHRvIGJlIHJlc2V0IHdoZW4gc2Vla2luZyBvdXRzaWRlIGJ1ZmZlcmVkIHJhbmdlXG5cblxuICAgICAgdGhpcy5yZXNldENhcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy50cmFuc211eFBpcGVsaW5lXy5jYXB0aW9uU3RyZWFtKSB7XG4gICAgICAgICAgdGhpcy50cmFuc211eFBpcGVsaW5lXy5jYXB0aW9uU3RyZWFtLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIF9UcmFuc211eGVyLnByb3RvdHlwZSA9IG5ldyBzdHJlYW0oKTtcbiAgICB2YXIgdHJhbnNtdXhlciA9IHtcbiAgICAgIFRyYW5zbXV4ZXI6IF9UcmFuc211eGVyLFxuICAgICAgVmlkZW9TZWdtZW50U3RyZWFtOiBfVmlkZW9TZWdtZW50U3RyZWFtLFxuICAgICAgQXVkaW9TZWdtZW50U3RyZWFtOiBfQXVkaW9TZWdtZW50U3RyZWFtLFxuICAgICAgQVVESU9fUFJPUEVSVElFUzogQVVESU9fUFJPUEVSVElFUyxcbiAgICAgIFZJREVPX1BST1BFUlRJRVM6IFZJREVPX1BST1BFUlRJRVMsXG4gICAgICAvLyBleHBvcnRlZCBmb3IgdGVzdGluZ1xuICAgICAgZ2VuZXJhdGVWaWRlb1NlZ21lbnRUaW1pbmdJbmZvOiBnZW5lcmF0ZVZpZGVvU2VnbWVudFRpbWluZ0luZm9cbiAgICB9O1xuXG4gICAgdmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgfTtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogQGZpbGUgdHJhbnNtdXhlci13b3JrZXIuanNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJlLWVtaXRzIHRyYW5zbXV4ZXIgZXZlbnRzIGJ5IGNvbnZlcnRpbmcgdGhlbSBpbnRvIG1lc3NhZ2VzIHRvIHRoZVxuICAgICAqIHdvcmxkIG91dHNpZGUgdGhlIHdvcmtlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0cmFuc211eGVyIHRoZSB0cmFuc211eGVyIHRvIHdpcmUgZXZlbnRzIG9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuXG4gICAgdmFyIHdpcmVUcmFuc211eGVyRXZlbnRzID0gZnVuY3Rpb24gd2lyZVRyYW5zbXV4ZXJFdmVudHMoc2VsZiwgdHJhbnNtdXhlciQkMSkge1xuICAgICAgdHJhbnNtdXhlciQkMS5vbignZGF0YScsIGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgICAgIC8vIHRyYW5zZmVyIG93bmVyc2hpcCBvZiB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZlclxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGRvaW5nIGEgY29weSB0byBzYXZlIG1lbW9yeVxuICAgICAgICAvLyBBcnJheUJ1ZmZlcnMgYXJlIHRyYW5zZmVyYWJsZSBidXQgZ2VuZXJpYyBUeXBlZEFycmF5cyBhcmUgbm90XG4gICAgICAgIC8vIEBsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfV29ya2Vyc19BUEkvVXNpbmdfd2ViX3dvcmtlcnMjUGFzc2luZ19kYXRhX2J5X3RyYW5zZmVycmluZ19vd25lcnNoaXBfKHRyYW5zZmVyYWJsZV9vYmplY3RzKVxuICAgICAgICB2YXIgaW5pdEFycmF5ID0gc2VnbWVudC5pbml0U2VnbWVudDtcbiAgICAgICAgc2VnbWVudC5pbml0U2VnbWVudCA9IHtcbiAgICAgICAgICBkYXRhOiBpbml0QXJyYXkuYnVmZmVyLFxuICAgICAgICAgIGJ5dGVPZmZzZXQ6IGluaXRBcnJheS5ieXRlT2Zmc2V0LFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGluaXRBcnJheS5ieXRlTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0eXBlZEFycmF5ID0gc2VnbWVudC5kYXRhO1xuICAgICAgICBzZWdtZW50LmRhdGEgPSB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgYWN0aW9uOiAnZGF0YScsXG4gICAgICAgICAgc2VnbWVudDogc2VnbWVudCxcbiAgICAgICAgICBieXRlT2Zmc2V0OiB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsXG4gICAgICAgICAgYnl0ZUxlbmd0aDogdHlwZWRBcnJheS5ieXRlTGVuZ3RoXG4gICAgICAgIH0sIFtzZWdtZW50LmRhdGFdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHJhbnNtdXhlciQkMS5jYXB0aW9uU3RyZWFtKSB7XG4gICAgICAgIHRyYW5zbXV4ZXIkJDEuY2FwdGlvblN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjYXB0aW9uKSB7XG4gICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBhY3Rpb246ICdjYXB0aW9uJyxcbiAgICAgICAgICAgIGRhdGE6IGNhcHRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zbXV4ZXIkJDEub24oJ2RvbmUnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246ICdkb25lJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdHJhbnNtdXhlciQkMS5vbignZ29wSW5mbycsIGZ1bmN0aW9uIChnb3BJbmZvKSB7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGFjdGlvbjogJ2dvcEluZm8nLFxuICAgICAgICAgIGdvcEluZm86IGdvcEluZm9cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRyYW5zbXV4ZXIkJDEub24oJ3ZpZGVvU2VnbWVudFRpbWluZ0luZm8nLCBmdW5jdGlvbiAodmlkZW9TZWdtZW50VGltaW5nSW5mbykge1xuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246ICd2aWRlb1NlZ21lbnRUaW1pbmdJbmZvJyxcbiAgICAgICAgICB2aWRlb1NlZ21lbnRUaW1pbmdJbmZvOiB2aWRlb1NlZ21lbnRUaW1pbmdJbmZvXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBbGwgaW5jb21pbmcgbWVzc2FnZXMgcm91dGUgdGhyb3VnaCB0aGlzIGhhc2guIElmIG5vIGZ1bmN0aW9uIGV4aXN0c1xuICAgICAqIHRvIGhhbmRsZSBhbiBpbmNvbWluZyBtZXNzYWdlLCB0aGVuIHdlIGlnbm9yZSB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBNZXNzYWdlSGFuZGxlcnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBpbml0aWFsaXplIHdpdGhcbiAgICAgKi9cblxuXG4gICAgdmFyIE1lc3NhZ2VIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIE1lc3NhZ2VIYW5kbGVycyhzZWxmLCBvcHRpb25zKSB7XG4gICAgICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIE1lc3NhZ2VIYW5kbGVycyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBpbml0aWFsaXplIG91ciB3ZWIgd29ya2VyIGFuZCB3aXJlIGFsbCB0aGUgZXZlbnRzLlxuICAgICAgICovXG5cblxuICAgICAgY3JlYXRlQ2xhc3MoTWVzc2FnZUhhbmRsZXJzLCBbe1xuICAgICAgICBrZXk6ICdpbml0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgICAgaWYgKHRoaXMudHJhbnNtdXhlcikge1xuICAgICAgICAgICAgdGhpcy50cmFuc211eGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRyYW5zbXV4ZXIgPSBuZXcgdHJhbnNtdXhlci5UcmFuc211eGVyKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgd2lyZVRyYW5zbXV4ZXJFdmVudHModGhpcy5zZWxmLCB0aGlzLnRyYW5zbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGRhdGEgKGEgdHMgc2VnbWVudCkgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc211eGVyIHBpcGVsaW5lIGZvclxuICAgICAgICAgKiBwcm9jZXNzaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBkYXRhIGRhdGEgdG8gcHVzaCBpbnRvIHRoZSBtdXhlclxuICAgICAgICAgKi9cblxuICAgICAgfSwge1xuICAgICAgICBrZXk6ICdwdXNoJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2goZGF0YSkge1xuICAgICAgICAgIC8vIENhc3QgYXJyYXkgYnVmZmVyIHRvIGNvcnJlY3QgdHlwZSBmb3IgdHJhbnNtdXhlclxuICAgICAgICAgIHZhciBzZWdtZW50ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5kYXRhLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgdGhpcy50cmFuc211eGVyLnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlY3JlYXRlIHRoZSB0cmFuc211eGVyIHNvIHRoYXQgdGhlIG5leHQgc2VnbWVudCBhZGRlZCB2aWEgYHB1c2hgXG4gICAgICAgICAqIHN0YXJ0IHdpdGggYSBmcmVzaCB0cmFuc211eGVyLlxuICAgICAgICAgKi9cblxuICAgICAgfSwge1xuICAgICAgICBrZXk6ICdyZXNldCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgYGJhc2VNZWRpYURlY29kZVRpbWVgIHRpbWUgZm9yIHRoZVxuICAgICAgICAgKiBuZXh0IHNlZ21lbnQgcHVzaGVkIGluLiBTdWJzZXF1ZW50IHNlZ21lbnRzIHdpbGwgaGF2ZSB0aGVpciBgYmFzZU1lZGlhRGVjb2RlVGltZWBcbiAgICAgICAgICogc2V0IHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBiYXNlZCBvbiB0aGUgUFRTIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgdXNlZCB0byBzZXQgdGhlIHRpbWVzdGFtcCBvZmZzZXQgaW4gdGhlIG11eGVyXG4gICAgICAgICAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIGtleTogJ3NldFRpbWVzdGFtcE9mZnNldCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRUaW1lc3RhbXBPZmZzZXQoZGF0YSkge1xuICAgICAgICAgIHZhciB0aW1lc3RhbXBPZmZzZXQgPSBkYXRhLnRpbWVzdGFtcE9mZnNldCB8fCAwO1xuICAgICAgICAgIHRoaXMudHJhbnNtdXhlci5zZXRCYXNlTWVkaWFEZWNvZGVUaW1lKE1hdGgucm91bmQodGltZXN0YW1wT2Zmc2V0ICogOTAwMDApKTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6ICdzZXRBdWRpb0FwcGVuZFN0YXJ0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEF1ZGlvQXBwZW5kU3RhcnQoZGF0YSkge1xuICAgICAgICAgIHRoaXMudHJhbnNtdXhlci5zZXRBdWRpb0FwcGVuZFN0YXJ0KE1hdGguY2VpbChkYXRhLmFwcGVuZFN0YXJ0ICogOTAwMDApKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yY2VzIHRoZSBwaXBlbGluZSB0byBmaW5pc2ggcHJvY2Vzc2luZyB0aGUgbGFzdCBzZWdtZW50IGFuZCBlbWl0IGl0J3NcbiAgICAgICAgICogcmVzdWx0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgZXZlbnQgZGF0YSwgbm90IHJlYWxseSB1c2VkXG4gICAgICAgICAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIGtleTogJ2ZsdXNoJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZsdXNoKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zbXV4ZXIuZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6ICdyZXNldENhcHRpb25zJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0Q2FwdGlvbnMoKSB7XG4gICAgICAgICAgdGhpcy50cmFuc211eGVyLnJlc2V0Q2FwdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6ICdhbGlnbkdvcHNXaXRoJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFsaWduR29wc1dpdGgoZGF0YSkge1xuICAgICAgICAgIHRoaXMudHJhbnNtdXhlci5hbGlnbkdvcHNXaXRoKGRhdGEuZ29wc1RvQWxpZ25XaXRoLnNsaWNlKCkpO1xuICAgICAgICB9XG4gICAgICB9XSk7XG4gICAgICByZXR1cm4gTWVzc2FnZUhhbmRsZXJzO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiBPdXIgd2ViIHdyb2tlciBpbnRlcmZhY2Ugc28gdGhhdCB0aGluZ3MgY2FuIHRhbGsgdG8gbXV4LmpzXG4gICAgICogdGhhdCB3aWxsIGJlIHJ1bm5pbmcgaW4gYSB3ZWIgd29ya2VyLiB0aGUgc2NvcGUgaXMgcGFzc2VkIHRvIHRoaXMgYnlcbiAgICAgKiB3ZWJ3b3JraWZ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlbGYgdGhlIHNjb3BlIGZvciB0aGUgd2ViIHdvcmtlclxuICAgICAqL1xuXG5cbiAgICB2YXIgVHJhbnNtdXhlcldvcmtlciA9IGZ1bmN0aW9uIFRyYW5zbXV4ZXJXb3JrZXIoc2VsZikge1xuICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSAnaW5pdCcgJiYgZXZlbnQuZGF0YS5vcHRpb25zKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcnMgPSBuZXcgTWVzc2FnZUhhbmRsZXJzKHNlbGYsIGV2ZW50LmRhdGEub3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVycykge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzID0gbmV3IE1lc3NhZ2VIYW5kbGVycyhzZWxmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuYWN0aW9uICYmIGV2ZW50LmRhdGEuYWN0aW9uICE9PSAnaW5pdCcpIHtcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcnNbZXZlbnQuZGF0YS5hY3Rpb25dKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyc1tldmVudC5kYXRhLmFjdGlvbl0oZXZlbnQuZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgdHJhbnNtdXhlcldvcmtlciA9IG5ldyBUcmFuc211eGVyV29ya2VyKHNlbGYpO1xuICAgIHJldHVybiB0cmFuc211eGVyV29ya2VyO1xuICB9KCk7XG59KTtcbi8qKlxuICogQGZpbGUgLSBjb2RlY3MuanMgLSBIYW5kbGVzIHRhc2tzIHJlZ2FyZGluZyBjb2RlYyBzdHJpbmdzIHN1Y2ggYXMgdHJhbnNsYXRpbmcgdGhlbSB0b1xuICogY29kZWMgc3RyaW5ncywgb3IgdHJhbnNsYXRpbmcgY29kZWMgc3RyaW5ncyBpbnRvIG9iamVjdHMgdGhhdCBjYW4gYmUgZXhhbWluZWQuXG4gKi9cbi8vIERlZmF1bHQgY29kZWMgcGFyYW1ldGVycyBpZiBub25lIHdlcmUgcHJvdmlkZWQgZm9yIHZpZGVvIGFuZC9vciBhdWRpb1xuXG52YXIgZGVmYXVsdENvZGVjcyA9IHtcbiAgdmlkZW9Db2RlYzogJ2F2YzEnLFxuICB2aWRlb09iamVjdFR5cGVJbmRpY2F0b3I6ICcuNGQ0MDBkJyxcbiAgLy8gQUFDLUxDXG4gIGF1ZGlvUHJvZmlsZTogJzInXG59O1xuLyoqXG4gKiBSZXBsYWNlIHRoZSBvbGQgYXBwbGUtc3R5bGUgYGF2YzEuPGRkPi48ZGQ+YCBjb2RlYyBzdHJpbmcgd2l0aCB0aGUgc3RhbmRhcmRcbiAqIGBhdmMxLjxoaGhoaGg+YFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGNvZGVjcyBhbiBhcnJheSBvZiBjb2RlYyBzdHJpbmdzIHRvIGZpeFxuICogQHJldHVybiB7QXJyYXl9IHRoZSB0cmFuc2xhdGVkIGNvZGVjIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciB0cmFuc2xhdGVMZWdhY3lDb2RlY3MgPSBmdW5jdGlvbiB0cmFuc2xhdGVMZWdhY3lDb2RlY3MoY29kZWNzKSB7XG4gIHJldHVybiBjb2RlY3MubWFwKGZ1bmN0aW9uIChjb2RlYykge1xuICAgIHJldHVybiBjb2RlYy5yZXBsYWNlKC9hdmMxXFwuKFxcZCspXFwuKFxcZCspL2ksIGZ1bmN0aW9uIChvcmlnLCBwcm9maWxlLCBhdmNMZXZlbCkge1xuICAgICAgdmFyIHByb2ZpbGVIZXggPSAoJzAwJyArIE51bWJlcihwcm9maWxlKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcbiAgICAgIHZhciBhdmNMZXZlbEhleCA9ICgnMDAnICsgTnVtYmVyKGF2Y0xldmVsKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcbiAgICAgIHJldHVybiAnYXZjMS4nICsgcHJvZmlsZUhleCArICcwMCcgKyBhdmNMZXZlbEhleDtcbiAgICB9KTtcbiAgfSk7XG59O1xuLyoqXG4gKiBQYXJzZXMgYSBjb2RlYyBzdHJpbmcgdG8gcmV0cmlldmUgdGhlIG51bWJlciBvZiBjb2RlY3Mgc3BlY2lmaWVkLFxuICogdGhlIHZpZGVvIGNvZGVjIGFuZCBvYmplY3QgdHlwZSBpbmRpY2F0b3IsIGFuZCB0aGUgYXVkaW8gcHJvZmlsZS5cbiAqL1xuXG5cbnZhciBwYXJzZUNvZGVjcyA9IGZ1bmN0aW9uIHBhcnNlQ29kZWNzKCkge1xuICB2YXIgY29kZWNzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBjb2RlY0NvdW50OiAwXG4gIH07XG4gIHZhciBwYXJzZWQgPSB2b2lkIDA7XG4gIHJlc3VsdC5jb2RlY0NvdW50ID0gY29kZWNzLnNwbGl0KCcsJykubGVuZ3RoO1xuICByZXN1bHQuY29kZWNDb3VudCA9IHJlc3VsdC5jb2RlY0NvdW50IHx8IDI7IC8vIHBhcnNlIHRoZSB2aWRlbyBjb2RlY1xuXG4gIHBhcnNlZCA9IC8oXnxcXHN8LCkrKGF2Y1sxM10pKFteICxdKikvaS5leGVjKGNvZGVjcyk7XG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIHJlc3VsdC52aWRlb0NvZGVjID0gcGFyc2VkWzJdO1xuICAgIHJlc3VsdC52aWRlb09iamVjdFR5cGVJbmRpY2F0b3IgPSBwYXJzZWRbM107XG4gIH0gLy8gcGFyc2UgdGhlIGxhc3QgZmllbGQgb2YgdGhlIGF1ZGlvIGNvZGVjXG5cblxuICByZXN1bHQuYXVkaW9Qcm9maWxlID0gLyhefFxcc3wsKSttcDRhLlswLTlBLUZhLWZdK1xcLihbMC05QS1GYS1mXSspL2kuZXhlYyhjb2RlY3MpO1xuICByZXN1bHQuYXVkaW9Qcm9maWxlID0gcmVzdWx0LmF1ZGlvUHJvZmlsZSAmJiByZXN1bHQuYXVkaW9Qcm9maWxlWzJdO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogUmVwbGFjZSBjb2RlY3MgaW4gdGhlIGNvZGVjIHN0cmluZyB3aXRoIHRoZSBvbGQgYXBwbGUtc3R5bGUgYGF2YzEuPGRkPi48ZGQ+YCB0byB0aGVcbiAqIHN0YW5kYXJkIGBhdmMxLjxoaGhoaGg+YC5cbiAqXG4gKiBAcGFyYW0gY29kZWNTdHJpbmcge1N0cmluZ30gdGhlIGNvZGVjIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSB0aGUgY29kZWMgc3RyaW5nIHdpdGggb2xkIGFwcGxlLXN0eWxlIGNvZGVjcyByZXBsYWNlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuXG52YXIgbWFwTGVnYWN5QXZjQ29kZWNzID0gZnVuY3Rpb24gbWFwTGVnYWN5QXZjQ29kZWNzKGNvZGVjU3RyaW5nKSB7XG4gIHJldHVybiBjb2RlY1N0cmluZy5yZXBsYWNlKC9hdmMxXFwuKFxcZCspXFwuKFxcZCspL2ksIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiB0cmFuc2xhdGVMZWdhY3lDb2RlY3MoW21hdGNoXSlbMF07XG4gIH0pO1xufTtcbi8qKlxuICogQnVpbGQgYSBtZWRpYSBtaW1lLXR5cGUgc3RyaW5nIGZyb20gYSBzZXQgb2YgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgZWl0aGVyICdhdWRpbycgb3IgJ3ZpZGVvJ1xuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRhaW5lciBlaXRoZXIgJ21wMnQnIG9yICdtcDQnXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlY3MgYW4gYXJyYXkgb2YgY29kZWMgc3RyaW5ncyB0byBhZGRcbiAqIEByZXR1cm4ge1N0cmluZ30gYSB2YWxpZCBtZWRpYSBtaW1lLXR5cGVcbiAqL1xuXG5cbnZhciBtYWtlTWltZVR5cGVTdHJpbmcgPSBmdW5jdGlvbiBtYWtlTWltZVR5cGVTdHJpbmcodHlwZSwgY29udGFpbmVyLCBjb2RlY3MpIHtcbiAgLy8gVGhlIGNvZGVjcyBhcnJheSBpcyBmaWx0ZXJlZCBzbyB0aGF0IGZhbHNleSB2YWx1ZXMgYXJlXG4gIC8vIGRyb3BwZWQgYW5kIGRvbid0IGNhdXNlIEFycmF5I2pvaW4gdG8gY3JlYXRlIHNwdXJpb3VzXG4gIC8vIGNvbW1hc1xuICByZXR1cm4gdHlwZSArICcvJyArIGNvbnRhaW5lciArICc7IGNvZGVjcz1cIicgKyBjb2RlY3MuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICEhYztcbiAgfSkuam9pbignLCAnKSArICdcIic7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB0eXBlIGNvbnRhaW5lciBiYXNlZCBvbiBpbmZvcm1hdGlvbiBpbiB0aGUgcGxheWxpc3RcbiAqIEBwYXJhbSB7UGxheWxpc3R9IG1lZGlhIHRoZSBjdXJyZW50IG1lZGlhIHBsYXlsaXN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgdmFsaWQgbWVkaWEgY29udGFpbmVyIHR5cGVcbiAqL1xuXG5cbnZhciBnZXRDb250YWluZXJUeXBlID0gZnVuY3Rpb24gZ2V0Q29udGFpbmVyVHlwZShtZWRpYSkge1xuICAvLyBBbiBpbml0aWFsaXphdGlvbiBzZWdtZW50IG1lYW5zIHRoZSBtZWRpYSBwbGF5bGlzdCBpcyBhbiBpZnJhbWVcbiAgLy8gcGxheWxpc3Qgb3IgaXMgdXNpbmcgdGhlIG1wNCBjb250YWluZXIuIFdlIGRvbid0IGN1cnJlbnRseVxuICAvLyBzdXBwb3J0IGlmcmFtZSBwbGF5bGlzdHMsIHNvIGFzc3VtZSB0aGlzIGlzIHNpZ25hbGxpbmcgbXA0XG4gIC8vIGZyYWdtZW50cy5cbiAgaWYgKG1lZGlhLnNlZ21lbnRzICYmIG1lZGlhLnNlZ21lbnRzLmxlbmd0aCAmJiBtZWRpYS5zZWdtZW50c1swXS5tYXApIHtcbiAgICByZXR1cm4gJ21wNCc7XG4gIH1cblxuICByZXR1cm4gJ21wMnQnO1xufTtcbi8qKlxuICogUmV0dXJucyBhIHNldCBvZiBjb2RlYyBzdHJpbmdzIHBhcnNlZCBmcm9tIHRoZSBwbGF5bGlzdCBvciB0aGUgZGVmYXVsdFxuICogY29kZWMgc3RyaW5ncyBpZiBubyBjb2RlY3Mgd2VyZSBzcGVjaWZpZWQgaW4gdGhlIHBsYXlsaXN0XG4gKiBAcGFyYW0ge1BsYXlsaXN0fSBtZWRpYSB0aGUgY3VycmVudCBtZWRpYSBwbGF5bGlzdFxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCB0aGUgdmlkZW8gYW5kIGF1ZGlvIGNvZGVjc1xuICovXG5cblxudmFyIGdldENvZGVjcyA9IGZ1bmN0aW9uIGdldENvZGVjcyhtZWRpYSkge1xuICAvLyBpZiB0aGUgY29kZWNzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhlXG4gIC8vIGRlZmF1bHRzXG4gIHZhciBtZWRpYUF0dHJpYnV0ZXMgPSBtZWRpYS5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmIChtZWRpYUF0dHJpYnV0ZXMuQ09ERUNTKSB7XG4gICAgcmV0dXJuIHBhcnNlQ29kZWNzKG1lZGlhQXR0cmlidXRlcy5DT0RFQ1MpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRDb2RlY3M7XG59O1xuXG52YXIgYXVkaW9Qcm9maWxlRnJvbURlZmF1bHQgPSBmdW5jdGlvbiBhdWRpb1Byb2ZpbGVGcm9tRGVmYXVsdChtYXN0ZXIsIGF1ZGlvR3JvdXBJZCkge1xuICBpZiAoIW1hc3Rlci5tZWRpYUdyb3Vwcy5BVURJTyB8fCAhYXVkaW9Hcm91cElkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYXVkaW9Hcm91cCA9IG1hc3Rlci5tZWRpYUdyb3Vwcy5BVURJT1thdWRpb0dyb3VwSWRdO1xuXG4gIGlmICghYXVkaW9Hcm91cCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgbmFtZSBpbiBhdWRpb0dyb3VwKSB7XG4gICAgdmFyIGF1ZGlvVHlwZSA9IGF1ZGlvR3JvdXBbbmFtZV07XG5cbiAgICBpZiAoYXVkaW9UeXBlW1wiZGVmYXVsdFwiXSAmJiBhdWRpb1R5cGUucGxheWxpc3RzKSB7XG4gICAgICAvLyBjb2RlYyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBwbGF5bGlzdHMgd2l0aGluIHRoZSBhdWRpbyB0eXBlXG4gICAgICByZXR1cm4gcGFyc2VDb2RlY3MoYXVkaW9UeXBlLnBsYXlsaXN0c1swXS5hdHRyaWJ1dGVzLkNPREVDUykuYXVkaW9Qcm9maWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgTUlNRSB0eXBlIHN0cmluZ3MgZm9yIGEgd29ya2luZyBjb25maWd1cmF0aW9uIG9mXG4gKiBTb3VyY2VCdWZmZXJzIHRvIHBsYXkgdmFyaWFudCBzdHJlYW1zIGluIGEgbWFzdGVyIHBsYXlsaXN0LiBJZlxuICogdGhlcmUgaXMgbm8gcG9zc2libGUgd29ya2luZyBjb25maWd1cmF0aW9uLCBhbiBlbXB0eSBhcnJheSB3aWxsIGJlXG4gKiByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gbWFzdGVyIHtPYmplY3R9IHRoZSBtM3U4IG9iamVjdCBmb3IgdGhlIG1hc3RlciBwbGF5bGlzdFxuICogQHBhcmFtIG1lZGlhIHtPYmplY3R9IHRoZSBtM3U4IG9iamVjdCBmb3IgdGhlIHZhcmlhbnQgcGxheWxpc3RcbiAqIEByZXR1cm4ge0FycmF5fSB0aGUgTUlNRSB0eXBlIHN0cmluZ3MuIElmIHRoZSBhcnJheSBoYXMgbW9yZSB0aGFuXG4gKiBvbmUgZW50cnksIHRoZSBmaXJzdCBlbGVtZW50IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB2aWRlb1xuICogU291cmNlQnVmZmVyIGFuZCB0aGUgc2Vjb25kIHRvIHRoZSBhdWRpbyBTb3VyY2VCdWZmZXIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciBtaW1lVHlwZXNGb3JQbGF5bGlzdCA9IGZ1bmN0aW9uIG1pbWVUeXBlc0ZvclBsYXlsaXN0KG1hc3RlciwgbWVkaWEpIHtcbiAgdmFyIGNvbnRhaW5lclR5cGUgPSBnZXRDb250YWluZXJUeXBlKG1lZGlhKTtcbiAgdmFyIGNvZGVjSW5mbyA9IGdldENvZGVjcyhtZWRpYSk7XG4gIHZhciBtZWRpYUF0dHJpYnV0ZXMgPSBtZWRpYS5hdHRyaWJ1dGVzIHx8IHt9OyAvLyBEZWZhdWx0IGNvbmRpdGlvbiBmb3IgYSB0cmFkaXRpb25hbCBITFMgKG5vIGRlbXV4ZWQgYXVkaW8vdmlkZW8pXG5cbiAgdmFyIGlzTXV4ZWQgPSB0cnVlO1xuICB2YXIgaXNNYWF0ID0gZmFsc2U7XG5cbiAgaWYgKCFtZWRpYSkge1xuICAgIC8vIE5vdCBlbm91Z2ggaW5mb3JtYXRpb25cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAobWFzdGVyLm1lZGlhR3JvdXBzLkFVRElPICYmIG1lZGlhQXR0cmlidXRlcy5BVURJTykge1xuICAgIHZhciBhdWRpb0dyb3VwID0gbWFzdGVyLm1lZGlhR3JvdXBzLkFVRElPW21lZGlhQXR0cmlidXRlcy5BVURJT107IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgaW4gYSBtdWx0aXBsZS1hdWRpbyB0cmFjayBzY2VuYXJpb1xuXG4gICAgaWYgKGF1ZGlvR3JvdXApIHtcbiAgICAgIGlzTWFhdCA9IHRydWU7IC8vIFN0YXJ0IHdpdGggdGhlIGV2ZXJ5dGhpbmcgZGVtdXhlZCB0aGVuLi4uXG5cbiAgICAgIGlzTXV4ZWQgPSBmYWxzZTsgLy8gLi4uY2hlY2sgdG8gc2VlIGlmIGFueSBhdWRpbyBncm91cCB0cmFja3MgYXJlIG11eGVkIChpZS4gbGFja2luZyBhIHVyaSlcblxuICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiBhdWRpb0dyb3VwKSB7XG4gICAgICAgIC8vIGVpdGhlciBhIHVyaSBpcyBwcmVzZW50IChpZiB0aGUgY2FzZSBvZiBITFMgYW5kIGFuIGV4dGVybmFsIHBsYXlsaXN0KSwgb3JcbiAgICAgICAgLy8gcGxheWxpc3RzIGlzIHByZXNlbnQgKGluIHRoZSBjYXNlIG9mIERBU0ggd2hlcmUgd2UgZG9uJ3QgaGF2ZSBleHRlcm5hbCBhdWRpb1xuICAgICAgICAvLyBwbGF5bGlzdHMpXG4gICAgICAgIGlmICghYXVkaW9Hcm91cFtncm91cElkXS51cmkgJiYgIWF1ZGlvR3JvdXBbZ3JvdXBJZF0ucGxheWxpc3RzKSB7XG4gICAgICAgICAgaXNNdXhlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSExTIHdpdGggbXVsdGlwbGUtYXVkaW8gdHJhY2tzIG11c3QgYWx3YXlzIGdldCBhbiBhdWRpbyBjb2RlYy5cbiAgLy8gUHV0IGFub3RoZXIgd2F5LCB0aGVyZSBpcyBubyB3YXkgdG8gaGF2ZSBhIHZpZGVvLW9ubHkgbXVsdGlwbGUtYXVkaW8gSExTIVxuXG5cbiAgaWYgKGlzTWFhdCAmJiAhY29kZWNJbmZvLmF1ZGlvUHJvZmlsZSkge1xuICAgIGlmICghaXNNdXhlZCkge1xuICAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIGNvZGVjcyB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGF1ZGlvIG1lZGlhIGdyb3VwIHBsYXlsaXN0IGJ1dFxuICAgICAgLy8gbm90IG9uIHRoZSByZW5kaXRpb24gcGxheWxpc3QuIFRoaXMgaXMgbW9zdGx5IHRoZSBjYXNlIGZvciBEQVNILCB3aGVyZSBhdWRpbyBhbmRcbiAgICAgIC8vIHZpZGVvIGFyZSBhbHdheXMgc2VwYXJhdGUgKGFuZCBzZXBhcmF0ZWx5IHNwZWNpZmllZCkuXG4gICAgICBjb2RlY0luZm8uYXVkaW9Qcm9maWxlID0gYXVkaW9Qcm9maWxlRnJvbURlZmF1bHQobWFzdGVyLCBtZWRpYUF0dHJpYnV0ZXMuQVVESU8pO1xuICAgIH1cblxuICAgIGlmICghY29kZWNJbmZvLmF1ZGlvUHJvZmlsZSkge1xuICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdNdWx0aXBsZSBhdWRpbyB0cmFja3MgcHJlc2VudCBidXQgbm8gYXVkaW8gY29kZWMgc3RyaW5nIGlzIHNwZWNpZmllZC4gJyArICdBdHRlbXB0aW5nIHRvIHVzZSB0aGUgZGVmYXVsdCBhdWRpbyBjb2RlYyAobXA0YS40MC4yKScpO1xuICAgICAgY29kZWNJbmZvLmF1ZGlvUHJvZmlsZSA9IGRlZmF1bHRDb2RlY3MuYXVkaW9Qcm9maWxlO1xuICAgIH1cbiAgfSAvLyBHZW5lcmF0ZSB0aGUgZmluYWwgY29kZWMgc3RyaW5ncyBmcm9tIHRoZSBjb2RlYyBvYmplY3QgZ2VuZXJhdGVkIGFib3ZlXG5cblxuICB2YXIgY29kZWNTdHJpbmdzID0ge307XG5cbiAgaWYgKGNvZGVjSW5mby52aWRlb0NvZGVjKSB7XG4gICAgY29kZWNTdHJpbmdzLnZpZGVvID0gJycgKyBjb2RlY0luZm8udmlkZW9Db2RlYyArIGNvZGVjSW5mby52aWRlb09iamVjdFR5cGVJbmRpY2F0b3I7XG4gIH1cblxuICBpZiAoY29kZWNJbmZvLmF1ZGlvUHJvZmlsZSkge1xuICAgIGNvZGVjU3RyaW5ncy5hdWRpbyA9ICdtcDRhLjQwLicgKyBjb2RlY0luZm8uYXVkaW9Qcm9maWxlO1xuICB9IC8vIEZpbmFsbHksIG1ha2UgYW5kIHJldHVybiBhbiBhcnJheSB3aXRoIHByb3BlciBtaW1lLXR5cGVzIGRlcGVuZGluZyBvblxuICAvLyB0aGUgY29uZmlndXJhdGlvblxuXG5cbiAgdmFyIGp1c3RBdWRpbyA9IG1ha2VNaW1lVHlwZVN0cmluZygnYXVkaW8nLCBjb250YWluZXJUeXBlLCBbY29kZWNTdHJpbmdzLmF1ZGlvXSk7XG4gIHZhciBqdXN0VmlkZW8gPSBtYWtlTWltZVR5cGVTdHJpbmcoJ3ZpZGVvJywgY29udGFpbmVyVHlwZSwgW2NvZGVjU3RyaW5ncy52aWRlb10pO1xuICB2YXIgYm90aFZpZGVvQXVkaW8gPSBtYWtlTWltZVR5cGVTdHJpbmcoJ3ZpZGVvJywgY29udGFpbmVyVHlwZSwgW2NvZGVjU3RyaW5ncy52aWRlbywgY29kZWNTdHJpbmdzLmF1ZGlvXSk7XG5cbiAgaWYgKGlzTWFhdCkge1xuICAgIGlmICghaXNNdXhlZCAmJiBjb2RlY1N0cmluZ3MudmlkZW8pIHtcbiAgICAgIHJldHVybiBbanVzdFZpZGVvLCBqdXN0QXVkaW9dO1xuICAgIH1cblxuICAgIGlmICghaXNNdXhlZCAmJiAhY29kZWNTdHJpbmdzLnZpZGVvKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBtdXhlZCBjb250ZW50IGFuZCBubyB2aWRlbyBjb2RlYyBzdHJpbmcsIHNvIHRoaXMgaXMgYW4gYXVkaW8gb25seVxuICAgICAgLy8gc3RyZWFtIHdpdGggYWx0ZXJuYXRlIGF1ZGlvLlxuICAgICAgcmV0dXJuIFtqdXN0QXVkaW8sIGp1c3RBdWRpb107XG4gICAgfSAvLyBUaGVyZSBleGlzdHMgdGhlIHBvc3NpYmxpdHkgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIGEgYHZpZGVvL2NvbnRhaW5lcmBcbiAgICAvLyBtaW1lLXR5cGUgZm9yIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXJyYXkgZXZlbiB3aGVuIHRoZXJlIGlzIG9ubHkgYXVkaW8uXG4gICAgLy8gVGhpcyBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHByb2JsZW0gYW5kIHNpbXBsaWZpZXMgdGhlIGNvZGUuXG5cblxuICAgIHJldHVybiBbYm90aFZpZGVvQXVkaW8sIGp1c3RBdWRpb107XG4gIH0gLy8gSWYgdGhlcmUgaXMgbm8gdmlkZW8gY29kZWMgYXQgYWxsLCBhbHdheXMganVzdCByZXR1cm4gYSBzaW5nbGVcbiAgLy8gYXVkaW8vPGNvbnRhaW5lcj4gbWltZS10eXBlXG5cblxuICBpZiAoIWNvZGVjU3RyaW5ncy52aWRlbykge1xuICAgIHJldHVybiBbanVzdEF1ZGlvXTtcbiAgfSAvLyBXaGVuIG5vdCB1c2luZyBzZXBhcmF0ZSBhdWRpbyBtZWRpYSBncm91cHMsIGF1ZGlvIGFuZCB2aWRlbyBpc1xuICAvLyAqYWx3YXlzKiBtdXhlZFxuXG5cbiAgcmV0dXJuIFtib3RoVmlkZW9BdWRpb107XG59O1xuLyoqXG4gKiBQYXJzZSBhIGNvbnRlbnQgdHlwZSBoZWFkZXIgaW50byBhIHR5cGUgYW5kIHBhcmFtZXRlcnNcbiAqIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBjb250ZW50IHR5cGUgaGVhZGVyXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYXJzZWQgY29udGVudC10eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIHBhcnNlQ29udGVudFR5cGUgPSBmdW5jdGlvbiBwYXJzZUNvbnRlbnRUeXBlKHR5cGUpIHtcbiAgdmFyIG9iamVjdCA9IHtcbiAgICB0eXBlOiAnJyxcbiAgICBwYXJhbWV0ZXJzOiB7fVxuICB9O1xuICB2YXIgcGFyYW1ldGVycyA9IHR5cGUudHJpbSgpLnNwbGl0KCc7Jyk7IC8vIGZpcnN0IHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGJlIGNvbnRlbnQtdHlwZVxuXG4gIG9iamVjdC50eXBlID0gcGFyYW1ldGVycy5zaGlmdCgpLnRyaW0oKTtcbiAgcGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICB2YXIgcGFpciA9IHBhcmFtZXRlci50cmltKCkuc3BsaXQoJz0nKTtcblxuICAgIGlmIChwYWlyLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBuYW1lID0gcGFpclswXS5yZXBsYWNlKC9cIi9nLCAnJykudHJpbSgpO1xuICAgICAgdmFyIHZhbHVlID0gcGFpclsxXS5yZXBsYWNlKC9cIi9nLCAnJykudHJpbSgpO1xuICAgICAgb2JqZWN0LnBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbi8qKlxuICogQ2hlY2sgaWYgYSBjb2RlYyBzdHJpbmcgcmVmZXJzIHRvIGFuIGF1ZGlvIGNvZGVjLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlYyBjb2RlYyBzdHJpbmcgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGlmIHRoaXMgaXMgYW4gYXVkaW8gY29kZWNcbiAqIEBwcml2YXRlXG4gKi9cblxuXG52YXIgaXNBdWRpb0NvZGVjID0gZnVuY3Rpb24gaXNBdWRpb0NvZGVjKGNvZGVjKSB7XG4gIHJldHVybiAvbXA0YVxcLlxcZCsuXFxkKy9pLnRlc3QoY29kZWMpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgYSBjb2RlYyBzdHJpbmcgcmVmZXJzIHRvIGEgdmlkZW8gY29kZWMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGNvZGVjIGNvZGVjIHN0cmluZyB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn0gaWYgdGhpcyBpcyBhIHZpZGVvIGNvZGVjXG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIGlzVmlkZW9Db2RlYyA9IGZ1bmN0aW9uIGlzVmlkZW9Db2RlYyhjb2RlYykge1xuICByZXR1cm4gL2F2YzFcXC5bXFxkYS1mXSsvaS50ZXN0KGNvZGVjKTtcbn07XG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGdvcHMgaW4gdGhlIGJ1ZmZlciB0aGF0IGhhdmUgYSBwdHMgdmFsdWUgb2YgMyBzZWNvbmRzIG9yIG1vcmUgaW5cbiAqIGZyb250IG9mIGN1cnJlbnQgdGltZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBidWZmZXJcbiAqICAgICAgICBUaGUgY3VycmVudCBidWZmZXIgb2YgZ29wIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gY3VycmVudFRpbWVcbiAqICAgICAgICBUaGUgY3VycmVudCB0aW1lXG4gKiBAcGFyYW0ge0RvdWJsZX0gbWFwcGluZ1xuICogICAgICAgIE9mZnNldCB0byBtYXAgZGlzcGxheSB0aW1lIHRvIHN0cmVhbSBwcmVzZW50YXRpb24gdGltZVxuICogQHJldHVybiB7QXJyYXl9XG4gKiAgICAgICAgIExpc3Qgb2YgZ29wcyBjb25zaWRlcmVkIHNhZmUgdG8gYXBwZW5kIG92ZXJcbiAqL1xuXG5cbnZhciBnb3BzU2FmZVRvQWxpZ25XaXRoID0gZnVuY3Rpb24gZ29wc1NhZmVUb0FsaWduV2l0aChidWZmZXIsIGN1cnJlbnRUaW1lLCBtYXBwaW5nKSB7XG4gIGlmICh0eXBlb2YgY3VycmVudFRpbWUgPT09ICd1bmRlZmluZWQnIHx8IGN1cnJlbnRUaW1lID09PSBudWxsIHx8ICFidWZmZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vIHB0cyB2YWx1ZSBmb3IgY3VycmVudCB0aW1lICsgMyBzZWNvbmRzIHRvIGdpdmUgYSBiaXQgbW9yZSB3aWdnbGUgcm9vbVxuXG5cbiAgdmFyIGN1cnJlbnRUaW1lUHRzID0gTWF0aC5jZWlsKChjdXJyZW50VGltZSAtIG1hcHBpbmcgKyAzKSAqIDkwMDAwKTtcbiAgdmFyIGkgPSB2b2lkIDA7XG5cbiAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbaV0ucHRzID4gY3VycmVudFRpbWVQdHMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWZmZXIuc2xpY2UoaSk7XG59O1xuLyoqXG4gKiBBcHBlbmRzIGdvcCBpbmZvcm1hdGlvbiAodGltaW5nIGFuZCBieXRlTGVuZ3RoKSByZWNlaXZlZCBieSB0aGUgdHJhbnNtdXhlciBmb3IgdGhlXG4gKiBnb3BzIGFwcGVuZGVkIGluIHRoZSBsYXN0IGNhbGwgdG8gYXBwZW5kQnVmZmVyXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYnVmZmVyXG4gKiAgICAgICAgVGhlIGN1cnJlbnQgYnVmZmVyIG9mIGdvcCBpbmZvcm1hdGlvblxuICogQHBhcmFtIHtBcnJheX0gZ29wc1xuICogICAgICAgIExpc3Qgb2YgbmV3IGdvcCBpbmZvcm1hdGlvblxuICogQHBhcmFtIHtib29sZWFufSByZXBsYWNlXG4gKiAgICAgICAgSWYgdHJ1ZSwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggdGhlIG5ldyBnb3AgaW5mb3JtYXRpb24uIElmIGZhbHNlLCBhcHBlbmQgdGhlXG4gKiAgICAgICAgbmV3IGdvcCBpbmZvcm1hdGlvbiB0byB0aGUgYnVmZmVyIGluIHRoZSByaWdodCBsb2NhdGlvbiBvZiB0aW1lLlxuICogQHJldHVybiB7QXJyYXl9XG4gKiAgICAgICAgIFVwZGF0ZWQgbGlzdCBvZiBnb3AgaW5mb3JtYXRpb25cbiAqL1xuXG5cbnZhciB1cGRhdGVHb3BCdWZmZXIgPSBmdW5jdGlvbiB1cGRhdGVHb3BCdWZmZXIoYnVmZmVyLCBnb3BzLCByZXBsYWNlKSB7XG4gIGlmICghZ29wcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgaWYgKHJlcGxhY2UpIHtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gc2FmZSBhcHBlbmQgbW9kZSwgdGhlbiBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0aGUgZ29wIGJ1ZmZlclxuICAgIC8vIHdpdGggdGhlIG1vc3QgcmVjZW50IGFwcGVuZWRlZCBkYXRhLiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgd2hlbiBhcHBlbmRpbmdcbiAgICAvLyBmdXR1cmUgc2VnbWVudHMsIHdlIG9ubHkgdHJ5IHRvIGFsaWduIHdpdGggZ29wcyB0aGF0IGFyZSBib3RoIGFoZWFkIG9mIGN1cnJlbnRcbiAgICAvLyB0aW1lIGFuZCBpbiB0aGUgbGFzdCBzZWdtZW50IGFwcGVuZGVkLlxuICAgIHJldHVybiBnb3BzLnNsaWNlKCk7XG4gIH1cblxuICB2YXIgc3RhcnQgPSBnb3BzWzBdLnB0cztcbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoaTsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbaV0ucHRzID49IHN0YXJ0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGkpLmNvbmNhdChnb3BzKTtcbn07XG4vKipcbiAqIFJlbW92ZXMgZ29wIGluZm9ybWF0aW9uIGluIGJ1ZmZlciB0aGF0IG92ZXJsYXBzIHdpdGggcHJvdmlkZWQgc3RhcnQgYW5kIGVuZFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGJ1ZmZlclxuICogICAgICAgIFRoZSBjdXJyZW50IGJ1ZmZlciBvZiBnb3AgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSB7RG91YmxlfSBzdGFydFxuICogICAgICAgIHBvc2l0aW9uIHRvIHN0YXJ0IHRoZSByZW1vdmUgYXRcbiAqIEBwYXJhbSB7RG91YmxlfSBlbmRcbiAqICAgICAgICBwb3NpdGlvbiB0byBlbmQgdGhlIHJlbW92ZSBhdFxuICogQHBhcmFtIHtEb3VibGV9IG1hcHBpbmdcbiAqICAgICAgICBPZmZzZXQgdG8gbWFwIGRpc3BsYXkgdGltZSB0byBzdHJlYW0gcHJlc2VudGF0aW9uIHRpbWVcbiAqL1xuXG5cbnZhciByZW1vdmVHb3BCdWZmZXIgPSBmdW5jdGlvbiByZW1vdmVHb3BCdWZmZXIoYnVmZmVyLCBzdGFydCwgZW5kLCBtYXBwaW5nKSB7XG4gIHZhciBzdGFydFB0cyA9IE1hdGguY2VpbCgoc3RhcnQgLSBtYXBwaW5nKSAqIDkwMDAwKTtcbiAgdmFyIGVuZFB0cyA9IE1hdGguY2VpbCgoZW5kIC0gbWFwcGluZykgKiA5MDAwMCk7XG4gIHZhciB1cGRhdGVkQnVmZmVyID0gYnVmZmVyLnNsaWNlKCk7XG4gIHZhciBpID0gYnVmZmVyLmxlbmd0aDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKGJ1ZmZlcltpXS5wdHMgPD0gZW5kUHRzKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICAvLyBubyByZW1vdmFsIGJlY2F1c2UgZW5kIG9mIHJlbW92ZSByYW5nZSBpcyBiZWZvcmUgc3RhcnQgb2YgYnVmZmVyXG4gICAgcmV0dXJuIHVwZGF0ZWRCdWZmZXI7XG4gIH1cblxuICB2YXIgaiA9IGkgKyAxO1xuXG4gIHdoaWxlIChqLS0pIHtcbiAgICBpZiAoYnVmZmVyW2pdLnB0cyA8PSBzdGFydFB0cykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IC8vIGNsYW1wIHJlbW92ZSByYW5nZSBzdGFydCB0byAwIGluZGV4XG5cblxuICBqID0gTWF0aC5tYXgoaiwgMCk7XG4gIHVwZGF0ZWRCdWZmZXIuc3BsaWNlKGosIGkgLSBqICsgMSk7XG4gIHJldHVybiB1cGRhdGVkQnVmZmVyO1xufTtcblxudmFyIGJ1ZmZlcmVkID0gZnVuY3Rpb24gYnVmZmVyZWQodmlkZW9CdWZmZXIsIGF1ZGlvQnVmZmVyLCBhdWRpb0Rpc2FibGVkKSB7XG4gIHZhciBzdGFydCA9IG51bGw7XG4gIHZhciBlbmQgPSBudWxsO1xuICB2YXIgYXJpdHkgPSAwO1xuICB2YXIgZXh0ZW50cyA9IFtdO1xuICB2YXIgcmFuZ2VzID0gW107IC8vIG5laXRoZXIgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQgeWV0XG5cbiAgaWYgKCF2aWRlb0J1ZmZlciAmJiAhYXVkaW9CdWZmZXIpIHtcbiAgICByZXR1cm4gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZSgpO1xuICB9IC8vIG9ubHkgb25lIGJ1ZmZlciBpcyBjb25maWd1cmVkXG5cblxuICBpZiAoIXZpZGVvQnVmZmVyKSB7XG4gICAgcmV0dXJuIGF1ZGlvQnVmZmVyLmJ1ZmZlcmVkO1xuICB9XG5cbiAgaWYgKCFhdWRpb0J1ZmZlcikge1xuICAgIHJldHVybiB2aWRlb0J1ZmZlci5idWZmZXJlZDtcbiAgfSAvLyBib3RoIGJ1ZmZlcnMgYXJlIGNvbmZpZ3VyZWRcblxuXG4gIGlmIChhdWRpb0Rpc2FibGVkKSB7XG4gICAgcmV0dXJuIHZpZGVvQnVmZmVyLmJ1ZmZlcmVkO1xuICB9IC8vIGJvdGggYnVmZmVycyBhcmUgZW1wdHlcblxuXG4gIGlmICh2aWRlb0J1ZmZlci5idWZmZXJlZC5sZW5ndGggPT09IDAgJiYgYXVkaW9CdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHZpZGVvanMkMS5jcmVhdGVUaW1lUmFuZ2UoKTtcbiAgfSAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBib3RoIGJ1ZmZlcnMgYW5kIGNyZWF0ZSBhblxuICAvLyBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3b1xuXG5cbiAgdmFyIHZpZGVvQnVmZmVyZWQgPSB2aWRlb0J1ZmZlci5idWZmZXJlZDtcbiAgdmFyIGF1ZGlvQnVmZmVyZWQgPSBhdWRpb0J1ZmZlci5idWZmZXJlZDtcbiAgdmFyIGNvdW50ID0gdmlkZW9CdWZmZXJlZC5sZW5ndGg7IC8vIEEpIEdhdGhlciB1cCBhbGwgc3RhcnQgYW5kIGVuZCB0aW1lc1xuXG4gIHdoaWxlIChjb3VudC0tKSB7XG4gICAgZXh0ZW50cy5wdXNoKHtcbiAgICAgIHRpbWU6IHZpZGVvQnVmZmVyZWQuc3RhcnQoY291bnQpLFxuICAgICAgdHlwZTogJ3N0YXJ0J1xuICAgIH0pO1xuICAgIGV4dGVudHMucHVzaCh7XG4gICAgICB0aW1lOiB2aWRlb0J1ZmZlcmVkLmVuZChjb3VudCksXG4gICAgICB0eXBlOiAnZW5kJ1xuICAgIH0pO1xuICB9XG5cbiAgY291bnQgPSBhdWRpb0J1ZmZlcmVkLmxlbmd0aDtcblxuICB3aGlsZSAoY291bnQtLSkge1xuICAgIGV4dGVudHMucHVzaCh7XG4gICAgICB0aW1lOiBhdWRpb0J1ZmZlcmVkLnN0YXJ0KGNvdW50KSxcbiAgICAgIHR5cGU6ICdzdGFydCdcbiAgICB9KTtcbiAgICBleHRlbnRzLnB1c2goe1xuICAgICAgdGltZTogYXVkaW9CdWZmZXJlZC5lbmQoY291bnQpLFxuICAgICAgdHlwZTogJ2VuZCdcbiAgICB9KTtcbiAgfSAvLyBCKSBTb3J0IHRoZW0gYnkgdGltZVxuXG5cbiAgZXh0ZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEudGltZSAtIGIudGltZTtcbiAgfSk7IC8vIEMpIEdvIGFsb25nIG9uZSBieSBvbmUgaW5jcmVtZW50aW5nIGFyaXR5IGZvciBzdGFydCBhbmQgZGVjcmVtZW50aW5nXG4gIC8vICAgIGFyaXR5IGZvciBlbmRzXG5cbiAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZXh0ZW50cy5sZW5ndGg7IGNvdW50KyspIHtcbiAgICBpZiAoZXh0ZW50c1tjb3VudF0udHlwZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgYXJpdHkrKzsgLy8gRCkgSWYgYXJpdHkgaXMgZXZlciBpbmNyZW1lbnRlZCB0byAyIHdlIGFyZSBlbnRlcmluZyBhblxuICAgICAgLy8gICAgb3ZlcmxhcHBpbmcgcmFuZ2VcblxuICAgICAgaWYgKGFyaXR5ID09PSAyKSB7XG4gICAgICAgIHN0YXJ0ID0gZXh0ZW50c1tjb3VudF0udGltZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4dGVudHNbY291bnRdLnR5cGUgPT09ICdlbmQnKSB7XG4gICAgICBhcml0eS0tOyAvLyBFKSBJZiBhcml0eSBpcyBldmVyIGRlY3JlbWVudGVkIHRvIDEgd2UgbGVhdmluZyBhblxuICAgICAgLy8gICAgb3ZlcmxhcHBpbmcgcmFuZ2VcblxuICAgICAgaWYgKGFyaXR5ID09PSAxKSB7XG4gICAgICAgIGVuZCA9IGV4dGVudHNbY291bnRdLnRpbWU7XG4gICAgICB9XG4gICAgfSAvLyBGKSBSZWNvcmQgb3ZlcmxhcHBpbmcgcmFuZ2VzXG5cblxuICAgIGlmIChzdGFydCAhPT0gbnVsbCAmJiBlbmQgIT09IG51bGwpIHtcbiAgICAgIHJhbmdlcy5wdXNoKFtzdGFydCwgZW5kXSk7XG4gICAgICBzdGFydCA9IG51bGw7XG4gICAgICBlbmQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2aWRlb2pzJDEuY3JlYXRlVGltZVJhbmdlcyhyYW5nZXMpO1xufTtcbi8qKlxuICogQGZpbGUgdmlydHVhbC1zb3VyY2UtYnVmZmVyLmpzXG4gKi9cblxuXG52YXIgT05FX1NFQ09ORF9JTl9UUyA9IDkwMDAwOyAvLyBXZSBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgU291cmNlQnVmZmVyIHNvIHRoYXQgd2UgY2FuIG1hbmFnZSB0aGVcbi8vIHN0YXRlIG9mIHRoZSBgdXBkYXRpbmdgIHByb3BlcnR5IG1hbnVhbGx5LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZVxuLy8gRmlyZWZveCBjaGFuZ2VzIGB1cGRhdGluZ2AgdG8gZmFsc2UgbG9uZyBiZWZvcmUgdHJpZ2dlcmluZyBgdXBkYXRlZW5kYFxuLy8gZXZlbnRzIGFuZCB0aGF0IHdhcyBjYXVzaW5nIHN0cmFuZ2UgcHJvYmxlbXMgaW4gdmlkZW9qcy1jb250cmliLWhsc1xuXG52YXIgbWFrZVdyYXBwZWRTb3VyY2VCdWZmZXIgPSBmdW5jdGlvbiBtYWtlV3JhcHBlZFNvdXJjZUJ1ZmZlcihtZWRpYVNvdXJjZSwgbWltZVR5cGUpIHtcbiAgdmFyIHNvdXJjZUJ1ZmZlciA9IG1lZGlhU291cmNlLmFkZFNvdXJjZUJ1ZmZlcihtaW1lVHlwZSk7XG4gIHZhciB3cmFwcGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgd3JhcHBlci51cGRhdGluZyA9IGZhbHNlO1xuICB3cmFwcGVyLnJlYWxCdWZmZXJfID0gc291cmNlQnVmZmVyO1xuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGtleSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlQnVmZmVyW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdyYXBwZXJba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlcltrZXldLmFwcGx5KHNvdXJjZUJ1ZmZlciwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd3JhcHBlcltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZXIsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlQnVmZmVyW2tleV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHYpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlQnVmZmVyW2tleV0gPSB2O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZUJ1ZmZlcikge1xuICAgIF9sb29wKGtleSk7XG4gIH1cblxuICByZXR1cm4gd3JhcHBlcjtcbn07XG4vKipcbiAqIFZpcnR1YWxTb3VyY2VCdWZmZXJzIGV4aXN0IHNvIHRoYXQgd2UgY2FuIHRyYW5zbXV4IG5vbiBuYXRpdmUgZm9ybWF0c1xuICogaW50byBhIG5hdGl2ZSBmb3JtYXQsIGJ1dCBrZWVwIHRoZSBzYW1lIGFwaSBhcyBhIG5hdGl2ZSBzb3VyY2UgYnVmZmVyLlxuICogSXQgY3JlYXRlcyBhIHRyYW5zbXV4ZXIsIHRoYXQgd29ya3MgaW4gaXRzIG93biB0aHJlYWQgKGEgd2ViIHdvcmtlcikgYW5kXG4gKiB0aGF0IHRyYW5zbXV4ZXIgbXV4ZXMgdGhlIGRhdGEgaW50byBhIG5hdGl2ZSBmb3JtYXQuIFZpcnR1YWxTb3VyY2VCdWZmZXIgd2lsbFxuICogdGhlbiBzZW5kIGFsbCBvZiB0aGF0IGRhdGEgdG8gdGhlIG5haXZlIHNvdXJjZWJ1ZmZlciBzbyB0aGF0IGl0IGlzXG4gKiBpbmRlc3Rpbmd1aXNoYWJsZSBmcm9tIGEgbmF0aXZlbHkgc3VwcG9ydGVkIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge0h0bWxNZWRpYVNvdXJjZX0gbWVkaWFTb3VyY2UgdGhlIHBhcmVudCBtZWRpYVNvdXJjZVxuICogQHBhcmFtIHtBcnJheX0gY29kZWNzIGFycmF5IG9mIGNvZGVjcyB0aGF0IHdlIHdpbGwgYmUgZGVhbGluZyB3aXRoXG4gKiBAY2xhc3MgVmlydHVhbFNvdXJjZUJ1ZmZlclxuICogQGV4dGVuZHMgdmlkZW8uanMuRXZlbnRUYXJnZXRcbiAqL1xuXG5cbnZhciBWaXJ0dWFsU291cmNlQnVmZmVyID0gZnVuY3Rpb24gKF92aWRlb2pzJEV2ZW50VGFyZ2V0KSB7XG4gIGluaGVyaXRzKFZpcnR1YWxTb3VyY2VCdWZmZXIsIF92aWRlb2pzJEV2ZW50VGFyZ2V0KTtcblxuICBmdW5jdGlvbiBWaXJ0dWFsU291cmNlQnVmZmVyKG1lZGlhU291cmNlLCBjb2RlY3MpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBWaXJ0dWFsU291cmNlQnVmZmVyKTtcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFZpcnR1YWxTb3VyY2VCdWZmZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihWaXJ0dWFsU291cmNlQnVmZmVyKSkuY2FsbCh0aGlzLCB2aWRlb2pzJDEuRXZlbnRUYXJnZXQpKTtcblxuICAgIF90aGlzLnRpbWVzdGFtcE9mZnNldF8gPSAwO1xuICAgIF90aGlzLnBlbmRpbmdCdWZmZXJzXyA9IFtdO1xuICAgIF90aGlzLmJ1ZmZlclVwZGF0aW5nXyA9IGZhbHNlO1xuICAgIF90aGlzLm1lZGlhU291cmNlXyA9IG1lZGlhU291cmNlO1xuICAgIF90aGlzLmNvZGVjc18gPSBjb2RlY3M7XG4gICAgX3RoaXMuYXVkaW9Db2RlY18gPSBudWxsO1xuICAgIF90aGlzLnZpZGVvQ29kZWNfID0gbnVsbDtcbiAgICBfdGhpcy5hdWRpb0Rpc2FibGVkXyA9IGZhbHNlO1xuICAgIF90aGlzLmFwcGVuZEF1ZGlvSW5pdFNlZ21lbnRfID0gdHJ1ZTtcbiAgICBfdGhpcy5nb3BCdWZmZXJfID0gW107XG4gICAgX3RoaXMudGltZU1hcHBpbmdfID0gMDtcbiAgICBfdGhpcy5zYWZlQXBwZW5kXyA9IHZpZGVvanMkMS5icm93c2VyLklFX1ZFUlNJT04gPj0gMTE7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICByZW11eDogZmFsc2UsXG4gICAgICBhbGlnbkdvcHNBdEVuZDogX3RoaXMuc2FmZUFwcGVuZF9cbiAgICB9O1xuXG4gICAgX3RoaXMuY29kZWNzXy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlYykge1xuICAgICAgaWYgKGlzQXVkaW9Db2RlYyhjb2RlYykpIHtcbiAgICAgICAgX3RoaXMuYXVkaW9Db2RlY18gPSBjb2RlYztcbiAgICAgIH0gZWxzZSBpZiAoaXNWaWRlb0NvZGVjKGNvZGVjKSkge1xuICAgICAgICBfdGhpcy52aWRlb0NvZGVjXyA9IGNvZGVjO1xuICAgICAgfVxuICAgIH0pOyAvLyBhcHBlbmQgbXV4ZWQgc2VnbWVudHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBuYXRpdmUgYnVmZmVycyBhc1xuICAgIC8vIHNvb24gYXMgdGhleSBhcmUgYXZhaWxhYmxlXG5cblxuICAgIF90aGlzLnRyYW5zbXV4ZXJfID0gbmV3IFRyYW5zbXV4V29ya2VyKCk7XG5cbiAgICBfdGhpcy50cmFuc211eGVyXy5wb3N0TWVzc2FnZSh7XG4gICAgICBhY3Rpb246ICdpbml0JyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9KTtcblxuICAgIF90aGlzLnRyYW5zbXV4ZXJfLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSAnZGF0YScpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRhdGFfKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSAnZG9uZScpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRvbmVfKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSAnZ29wSW5mbycpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmFwcGVuZEdvcEluZm9fKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSAndmlkZW9TZWdtZW50VGltaW5nSW5mbycpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnZpZGVvU2VnbWVudFRpbWluZ0luZm9fKGV2ZW50LmRhdGEudmlkZW9TZWdtZW50VGltaW5nSW5mbyk7XG4gICAgICB9XG4gICAgfTsgLy8gdGhpcyB0aW1lc3RhbXBPZmZzZXQgaXMgYSBwcm9wZXJ0eSB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiByZXNldHRpbmdcbiAgICAvLyBiYXNlTWVkaWFEZWNvZGVUaW1lIGluIHRoZSB0cmFuc211eGVyIG9uIHRoZSBzZXR0ZXJcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAndGltZXN0YW1wT2Zmc2V0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbWVzdGFtcE9mZnNldF87XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQkJDEodmFsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPj0gMCkge1xuICAgICAgICAgIHRoaXMudGltZXN0YW1wT2Zmc2V0XyA9IHZhbDtcbiAgICAgICAgICB0aGlzLmFwcGVuZEF1ZGlvSW5pdFNlZ21lbnRfID0gdHJ1ZTsgLy8gcmVzZXQgZ29wIGJ1ZmZlciBvbiB0aW1lc3RhbXBvZmZzZXQgYXMgdGhpcyBzaWduYWxzIGEgY2hhbmdlIGluIHRpbWVsaW5lXG5cbiAgICAgICAgICB0aGlzLmdvcEJ1ZmZlcl8ubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLnRpbWVNYXBwaW5nXyA9IDA7IC8vIFdlIGhhdmUgdG8gdGVsbCB0aGUgdHJhbnNtdXhlciB0byBzZXQgdGhlIGJhc2VNZWRpYURlY29kZVRpbWUgdG9cbiAgICAgICAgICAvLyB0aGUgZGVzaXJlZCB0aW1lc3RhbXBPZmZzZXQgZm9yIHRoZSBuZXh0IHNlZ21lbnRcblxuICAgICAgICAgIHRoaXMudHJhbnNtdXhlcl8ucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgYWN0aW9uOiAnc2V0VGltZXN0YW1wT2Zmc2V0JyxcbiAgICAgICAgICAgIHRpbWVzdGFtcE9mZnNldDogdmFsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gc2V0dGluZyB0aGUgYXBwZW5kIHdpbmRvdyBhZmZlY3RzIGJvdGggc291cmNlIGJ1ZmZlcnNcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ2FwcGVuZFdpbmRvd1N0YXJ0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy52aWRlb0J1ZmZlcl8gfHwgdGhpcy5hdWRpb0J1ZmZlcl8pLmFwcGVuZFdpbmRvd1N0YXJ0O1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHN0YXJ0KSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvQnVmZmVyXykge1xuICAgICAgICAgIHRoaXMudmlkZW9CdWZmZXJfLmFwcGVuZFdpbmRvd1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdWRpb0J1ZmZlcl8pIHtcbiAgICAgICAgICB0aGlzLmF1ZGlvQnVmZmVyXy5hcHBlbmRXaW5kb3dTdGFydCA9IHN0YXJ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vIHRoaXMgYnVmZmVyIGlzIFwidXBkYXRpbmdcIiBpZiBlaXRoZXIgb2YgaXRzIG5hdGl2ZSBidWZmZXJzIGFyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAndXBkYXRpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuYnVmZmVyVXBkYXRpbmdfIHx8ICF0aGlzLmF1ZGlvRGlzYWJsZWRfICYmIHRoaXMuYXVkaW9CdWZmZXJfICYmIHRoaXMuYXVkaW9CdWZmZXJfLnVwZGF0aW5nIHx8IHRoaXMudmlkZW9CdWZmZXJfICYmIHRoaXMudmlkZW9CdWZmZXJfLnVwZGF0aW5nKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gdGhlIGJ1ZmZlcmVkIHByb3BlcnR5IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGJ1ZmZlcmVkXG4gICAgLy8gcmFuZ2VzIG9mIHRoZSBuYXRpdmUgc291cmNlIGJ1ZmZlcnNcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ2J1ZmZlcmVkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBidWZmZXJlZCh0aGlzLnZpZGVvQnVmZmVyXywgdGhpcy5hdWRpb0J1ZmZlcl8sIHRoaXMuYXVkaW9EaXNhYmxlZF8pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogV2hlbiB3ZSBnZXQgYSBkYXRhIGV2ZW50IGZyb20gdGhlIHRyYW5zbXV4ZXJcbiAgICogd2UgY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZCBoYW5kbGUgdGhlIGRhdGEgdGhhdFxuICAgKiB3YXMgc2VudCB0byB1c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCB0aGUgZGF0YSBldmVudCBmcm9tIHRoZSB0cmFuc211eGVyXG4gICAqL1xuXG5cbiAgY3JlYXRlQ2xhc3MoVmlydHVhbFNvdXJjZUJ1ZmZlciwgW3tcbiAgICBrZXk6ICdkYXRhXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGFfKGV2ZW50KSB7XG4gICAgICB2YXIgc2VnbWVudCA9IGV2ZW50LmRhdGEuc2VnbWVudDsgLy8gQ2FzdCBBcnJheUJ1ZmZlciB0byBUeXBlZEFycmF5XG5cbiAgICAgIHNlZ21lbnQuZGF0YSA9IG5ldyBVaW50OEFycmF5KHNlZ21lbnQuZGF0YSwgZXZlbnQuZGF0YS5ieXRlT2Zmc2V0LCBldmVudC5kYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgc2VnbWVudC5pbml0U2VnbWVudCA9IG5ldyBVaW50OEFycmF5KHNlZ21lbnQuaW5pdFNlZ21lbnQuZGF0YSwgc2VnbWVudC5pbml0U2VnbWVudC5ieXRlT2Zmc2V0LCBzZWdtZW50LmluaXRTZWdtZW50LmJ5dGVMZW5ndGgpO1xuICAgICAgY3JlYXRlVGV4dFRyYWNrc0lmTmVjZXNzYXJ5KHRoaXMsIHRoaXMubWVkaWFTb3VyY2VfLCBzZWdtZW50KTsgLy8gQWRkIHRoZSBzZWdtZW50cyB0byB0aGUgcGVuZGluZ0J1ZmZlcnMgYXJyYXlcblxuICAgICAgdGhpcy5wZW5kaW5nQnVmZmVyc18ucHVzaChzZWdtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiB3ZSBnZXQgYSBkb25lIGV2ZW50IGZyb20gdGhlIHRyYW5zbXV4ZXJcbiAgICAgKiB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIHdlIHByb2Nlc3MgYWxsXG4gICAgICogb2YgdGhlIHBlbmRpbmcgZGF0YSB0aGF0IHdlIGhhdmUgYmVlbiBzYXZpbmcgaW4gdGhlXG4gICAgICogZGF0YV8gZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgdGhlIGRvbmUgZXZlbnQgZnJvbSB0aGUgdHJhbnNtdXhlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkb25lXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRvbmVfKGV2ZW50KSB7XG4gICAgICAvLyBEb24ndCBwcm9jZXNzIGFuZCBhcHBlbmQgZGF0YSBpZiB0aGUgbWVkaWFTb3VyY2UgaXMgY2xvc2VkXG4gICAgICBpZiAodGhpcy5tZWRpYVNvdXJjZV8ucmVhZHlTdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQnVmZmVyc18ubGVuZ3RoID0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBBbGwgYnVmZmVycyBzaG91bGQgaGF2ZSBiZWVuIGZsdXNoZWQgZnJvbSB0aGUgbXV4ZXJcbiAgICAgIC8vIHN0YXJ0IHByb2Nlc3NpbmcgYW55dGhpbmcgd2UgaGF2ZSByZWNlaXZlZFxuXG5cbiAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmdTZWdtZW50c18oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd2aWRlb1NlZ21lbnRUaW1pbmdJbmZvXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZpZGVvU2VnbWVudFRpbWluZ0luZm9fKHRpbWluZ0luZm8pIHtcbiAgICAgIHZhciB0aW1pbmdJbmZvSW5TZWNvbmRzID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGRlY29kZTogdGltaW5nSW5mby5zdGFydC5kdHMgLyBPTkVfU0VDT05EX0lOX1RTLFxuICAgICAgICAgIHByZXNlbnRhdGlvbjogdGltaW5nSW5mby5zdGFydC5wdHMgLyBPTkVfU0VDT05EX0lOX1RTXG4gICAgICAgIH0sXG4gICAgICAgIGVuZDoge1xuICAgICAgICAgIGRlY29kZTogdGltaW5nSW5mby5lbmQuZHRzIC8gT05FX1NFQ09ORF9JTl9UUyxcbiAgICAgICAgICBwcmVzZW50YXRpb246IHRpbWluZ0luZm8uZW5kLnB0cyAvIE9ORV9TRUNPTkRfSU5fVFNcbiAgICAgICAgfSxcbiAgICAgICAgYmFzZU1lZGlhRGVjb2RlVGltZTogdGltaW5nSW5mby5iYXNlTWVkaWFEZWNvZGVUaW1lIC8gT05FX1NFQ09ORF9JTl9UU1xuICAgICAgfTtcblxuICAgICAgaWYgKHRpbWluZ0luZm8ucHJlcGVuZGVkQ29udGVudER1cmF0aW9uKSB7XG4gICAgICAgIHRpbWluZ0luZm9JblNlY29uZHMucHJlcGVuZGVkQ29udGVudER1cmF0aW9uID0gdGltaW5nSW5mby5wcmVwZW5kZWRDb250ZW50RHVyYXRpb24gLyBPTkVfU0VDT05EX0lOX1RTO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAndmlkZW9TZWdtZW50VGltaW5nSW5mbycsXG4gICAgICAgIHZpZGVvU2VnbWVudFRpbWluZ0luZm86IHRpbWluZ0luZm9JblNlY29uZHNcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgb3VyIGludGVybmFsIG5hdGl2ZSBhdWRpby92aWRlbyBzb3VyY2UgYnVmZmVycyBhbmQgYWRkXG4gICAgICogZXZlbnQgaGFuZGxlcnMgdG8gdGhlbSB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICAgKiAxLiB0aGV5IGRvIG5vdCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBtZWRpYVNvdXJjZVxuICAgICAqIDIuIHRoaXMgVlNCIGhhcyBhIGNvZGVjIGZvciB0aGVtXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjcmVhdGVSZWFsU291cmNlQnVmZmVyc18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVSZWFsU291cmNlQnVmZmVyc18oKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHR5cGVzID0gWydhdWRpbycsICd2aWRlbyddO1xuICAgICAgdHlwZXMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAvLyBEb24ndCBjcmVhdGUgYSBTb3VyY2VCdWZmZXIgb2YgdGhpcyB0eXBlIGlmIHdlIGRvbid0IGhhdmUgYVxuICAgICAgICAvLyBjb2RlYyBmb3IgaXRcbiAgICAgICAgaWYgKCFfdGhpczJbdHlwZSArICdDb2RlY18nXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBEbyBub3RoaW5nIGlmIGEgU291cmNlQnVmZmVyIG9mIHRoaXMgdHlwZSBhbHJlYWR5IGV4aXN0c1xuXG5cbiAgICAgICAgaWYgKF90aGlzMlt0eXBlICsgJ0J1ZmZlcl8nXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBudWxsOyAvLyBJZiB0aGUgbWVkaWFzb3VyY2UgYWxyZWFkeSBoYXMgYSBTb3VyY2VCdWZmZXIgZm9yIHRoZSBjb2RlY1xuICAgICAgICAvLyB1c2UgdGhhdFxuXG4gICAgICAgIGlmIChfdGhpczIubWVkaWFTb3VyY2VfW3R5cGUgKyAnQnVmZmVyXyddKSB7XG4gICAgICAgICAgYnVmZmVyID0gX3RoaXMyLm1lZGlhU291cmNlX1t0eXBlICsgJ0J1ZmZlcl8nXTsgLy8gSW4gbXVsdGlwbGUgYXVkaW8gdHJhY2sgY2FzZXMsIHRoZSBhdWRpbyBzb3VyY2UgYnVmZmVyIGlzIGRpc2FibGVkXG4gICAgICAgICAgLy8gb24gdGhlIG1haW4gVmlydHVhbFNvdXJjZUJ1ZmZlciBieSB0aGUgSFRNTE1lZGlhU291cmNlIG11Y2ggZWFybGllclxuICAgICAgICAgIC8vIHRoYW4gY3JlYXRlUmVhbFNvdXJjZUJ1ZmZlcnNfIGlzIGNhbGxlZCB0byBjcmVhdGUgdGhlIHNlY29uZFxuICAgICAgICAgIC8vIFZpcnR1YWxTb3VyY2VCdWZmZXIgYmVjYXVzZSB0aGF0IGhhcHBlbnMgYXMgYSBzaWRlLWVmZmVjdCBvZlxuICAgICAgICAgIC8vIHZpZGVvanMtY29udHJpYi1obHMgc3RhcnRpbmcgdGhlIGF1ZGlvU2VnbWVudExvYWRlci4gQXMgYSByZXN1bHQsXG4gICAgICAgICAgLy8gdGhlIGF1ZGlvQnVmZmVyIGlzIGVzc2VudGlhbGx5IFwib3duZXJsZXNzXCIgYW5kIG5vIG9uZSB3aWxsIHRvZ2dsZVxuICAgICAgICAgIC8vIHRoZSBgdXBkYXRpbmdgIHN0YXRlIGJhY2sgdG8gZmFsc2Ugb25jZSB0aGUgYHVwZGF0ZWVuZGAgZXZlbnQgaXMgcmVjZWl2ZWRcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFNldHRpbmcgYHVwZGF0aW5nYCB0byBmYWxzZSBtYW51YWxseSB3aWxsIHdvcmsgYXJvdW5kIHRoaXNcbiAgICAgICAgICAvLyBzaXR1YXRpb24gYW5kIGFsbG93IHdvcmsgdG8gY29udGludWVcblxuICAgICAgICAgIGJ1ZmZlci51cGRhdGluZyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjb2RlY1Byb3BlcnR5ID0gdHlwZSArICdDb2RlY18nO1xuICAgICAgICAgIHZhciBtaW1lVHlwZSA9IHR5cGUgKyAnL21wNDtjb2RlY3M9XCInICsgX3RoaXMyW2NvZGVjUHJvcGVydHldICsgJ1wiJztcbiAgICAgICAgICBidWZmZXIgPSBtYWtlV3JhcHBlZFNvdXJjZUJ1ZmZlcihfdGhpczIubWVkaWFTb3VyY2VfLm5hdGl2ZU1lZGlhU291cmNlXywgbWltZVR5cGUpO1xuICAgICAgICAgIF90aGlzMi5tZWRpYVNvdXJjZV9bdHlwZSArICdCdWZmZXJfJ10gPSBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczJbdHlwZSArICdCdWZmZXJfJ10gPSBidWZmZXI7IC8vIFdpcmUgdXAgdGhlIGV2ZW50cyB0byB0aGUgU291cmNlQnVmZmVyXG5cbiAgICAgICAgWyd1cGRhdGUnLCAndXBkYXRlc3RhcnQnLCAndXBkYXRlZW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBidWZmZXIuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gaWYgYXVkaW8gaXMgZGlzYWJsZWRcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nICYmIF90aGlzMi5hdWRpb0Rpc2FibGVkXykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ3VwZGF0ZWVuZCcpIHtcbiAgICAgICAgICAgICAgX3RoaXMyW3R5cGUgKyAnQnVmZmVyXyddLnVwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzaG91bGRUcmlnZ2VyID0gdHlwZXMuZXZlcnkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgLy8gc2tpcCBjaGVja2luZyBhdWRpbydzIHVwZGF0aW5nIHN0YXR1cyBpZiBhdWRpb1xuICAgICAgICAgICAgICAvLyBpcyBub3QgZW5hYmxlZFxuICAgICAgICAgICAgICBpZiAodCA9PT0gJ2F1ZGlvJyAmJiBfdGhpczIuYXVkaW9EaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSAvLyBpZiB0aGUgb3RoZXIgdHlwZSBpcyB1cGRhdGluZyB3ZSBkb24ndCB0cmlnZ2VyXG5cblxuICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gdCAmJiBfdGhpczJbdCArICdCdWZmZXJfJ10gJiYgX3RoaXMyW3QgKyAnQnVmZmVyXyddLnVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi50cmlnZ2VyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW11bGF0ZSB0aGUgbmF0aXZlIG1lZGlhc291cmNlIGZ1bmN0aW9uLCBidXQgb3VyIGZ1bmN0aW9uIHdpbGxcbiAgICAgKiBzZW5kIGFsbCBvZiB0aGUgcHJvcG9zZWQgc2VnbWVudHMgdG8gdGhlIHRyYW5zbXV4ZXIgc28gdGhhdCB3ZVxuICAgICAqIGNhbiB0cmFuc211eCB0aGVtIGJlZm9yZSB3ZSBhcHBlbmQgdGhlbSB0byBvdXIgaW50ZXJuYWxcbiAgICAgKiBuYXRpdmUgc291cmNlIGJ1ZmZlcnMgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NvdXJjZUJ1ZmZlci9hcHBlbmRCdWZmZXJcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHNlZ21lbnQgdGhlIHNlZ21lbnQgdG8gYXBwZW5kIHRvIHRoZSBidWZmZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYXBwZW5kQnVmZmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwZW5kQnVmZmVyKHNlZ21lbnQpIHtcbiAgICAgIC8vIFN0YXJ0IHRoZSBpbnRlcm5hbCBcInVwZGF0aW5nXCIgc3RhdGVcbiAgICAgIHRoaXMuYnVmZmVyVXBkYXRpbmdfID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuYXVkaW9CdWZmZXJfICYmIHRoaXMuYXVkaW9CdWZmZXJfLmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgYXVkaW9CdWZmZXJlZCA9IHRoaXMuYXVkaW9CdWZmZXJfLmJ1ZmZlcmVkO1xuICAgICAgICB0aGlzLnRyYW5zbXV4ZXJfLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246ICdzZXRBdWRpb0FwcGVuZFN0YXJ0JyxcbiAgICAgICAgICBhcHBlbmRTdGFydDogYXVkaW9CdWZmZXJlZC5lbmQoYXVkaW9CdWZmZXJlZC5sZW5ndGggLSAxKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlkZW9CdWZmZXJfKSB7XG4gICAgICAgIHRoaXMudHJhbnNtdXhlcl8ucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGFjdGlvbjogJ2FsaWduR29wc1dpdGgnLFxuICAgICAgICAgIGdvcHNUb0FsaWduV2l0aDogZ29wc1NhZmVUb0FsaWduV2l0aCh0aGlzLmdvcEJ1ZmZlcl8sIHRoaXMubWVkaWFTb3VyY2VfLnBsYXllcl8gPyB0aGlzLm1lZGlhU291cmNlXy5wbGF5ZXJfLmN1cnJlbnRUaW1lKCkgOiBudWxsLCB0aGlzLnRpbWVNYXBwaW5nXylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhbnNtdXhlcl8ucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBhY3Rpb246ICdwdXNoJyxcbiAgICAgICAgLy8gU2VuZCB0aGUgdHlwZWQtYXJyYXkgb2YgZGF0YSBhcyBhbiBBcnJheUJ1ZmZlciBzbyB0aGF0XG4gICAgICAgIC8vIGl0IGNhbiBiZSBzZW50IGFzIGEgXCJUcmFuc2ZlcmFibGVcIiBhbmQgYXZvaWQgdGhlIGNvc3RseVxuICAgICAgICAvLyBtZW1vcnkgY29weVxuICAgICAgICBkYXRhOiBzZWdtZW50LmJ1ZmZlcixcbiAgICAgICAgLy8gVG8gcmVjcmVhdGUgdGhlIG9yaWdpbmFsIHR5cGVkLWFycmF5LCB3ZSBuZWVkIGluZm9ybWF0aW9uXG4gICAgICAgIC8vIGFib3V0IHdoYXQgcG9ydGlvbiBvZiB0aGUgQXJyYXlCdWZmZXIgaXQgd2FzIGEgdmlldyBpbnRvXG4gICAgICAgIGJ5dGVPZmZzZXQ6IHNlZ21lbnQuYnl0ZU9mZnNldCxcbiAgICAgICAgYnl0ZUxlbmd0aDogc2VnbWVudC5ieXRlTGVuZ3RoXG4gICAgICB9LCBbc2VnbWVudC5idWZmZXJdKTtcbiAgICAgIHRoaXMudHJhbnNtdXhlcl8ucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBhY3Rpb246ICdmbHVzaCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGdvcCBpbmZvcm1hdGlvbiAodGltaW5nIGFuZCBieXRlTGVuZ3RoKSByZWNlaXZlZCBieSB0aGUgdHJhbnNtdXhlciBmb3IgdGhlXG4gICAgICogZ29wcyBhcHBlbmRlZCBpbiB0aGUgbGFzdCBjYWxsIHRvIGFwcGVuZEJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICAgKiAgICAgICAgVGhlIGdvcEluZm8gZXZlbnQgZnJvbSB0aGUgdHJhbnNtdXhlclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGV2ZW50LmRhdGEuZ29wSW5mb1xuICAgICAqICAgICAgICBMaXN0IG9mIGdvcCBpbmZvIHRvIGFwcGVuZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhcHBlbmRHb3BJbmZvXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGVuZEdvcEluZm9fKGV2ZW50KSB7XG4gICAgICB0aGlzLmdvcEJ1ZmZlcl8gPSB1cGRhdGVHb3BCdWZmZXIodGhpcy5nb3BCdWZmZXJfLCBldmVudC5kYXRhLmdvcEluZm8sIHRoaXMuc2FmZUFwcGVuZF8pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbXVsYXRlIHRoZSBuYXRpdmUgbWVkaWFzb3VyY2UgZnVuY3Rpb24gYW5kIHJlbW92ZSBwYXJ0c1xuICAgICAqIG9mIHRoZSBidWZmZXIgZnJvbSBhbnkgb2Ygb3VyIGludGVybmFsIGJ1ZmZlcnMgdGhhdCBleGlzdFxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NvdXJjZUJ1ZmZlci9yZW1vdmVcbiAgICAgKiBAcGFyYW0ge0RvdWJsZX0gc3RhcnQgcG9zaXRpb24gdG8gc3RhcnQgdGhlIHJlbW92ZSBhdFxuICAgICAqIEBwYXJhbSB7RG91YmxlfSBlbmQgcG9zaXRpb24gdG8gZW5kIHRoZSByZW1vdmUgYXRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVtb3ZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIGlmICh0aGlzLnZpZGVvQnVmZmVyXykge1xuICAgICAgICB0aGlzLnZpZGVvQnVmZmVyXy51cGRhdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMudmlkZW9CdWZmZXJfLnJlbW92ZShzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5nb3BCdWZmZXJfID0gcmVtb3ZlR29wQnVmZmVyKHRoaXMuZ29wQnVmZmVyXywgc3RhcnQsIGVuZCwgdGhpcy50aW1lTWFwcGluZ18pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuYXVkaW9EaXNhYmxlZF8gJiYgdGhpcy5hdWRpb0J1ZmZlcl8pIHtcbiAgICAgICAgdGhpcy5hdWRpb0J1ZmZlcl8udXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmF1ZGlvQnVmZmVyXy5yZW1vdmUoc3RhcnQsIGVuZCk7XG4gICAgICB9IC8vIFJlbW92ZSBNZXRhZGF0YSBDdWVzIChpZDMpXG5cblxuICAgICAgcmVtb3ZlQ3Vlc0Zyb21UcmFjayhzdGFydCwgZW5kLCB0aGlzLm1ldGFkYXRhVHJhY2tfKTsgLy8gUmVtb3ZlIEFueSBDYXB0aW9uc1xuXG4gICAgICBpZiAodGhpcy5pbmJhbmRUZXh0VHJhY2tzXykge1xuICAgICAgICBmb3IgKHZhciB0cmFjayBpbiB0aGlzLmluYmFuZFRleHRUcmFja3NfKSB7XG4gICAgICAgICAgcmVtb3ZlQ3Vlc0Zyb21UcmFjayhzdGFydCwgZW5kLCB0aGlzLmluYmFuZFRleHRUcmFja3NfW3RyYWNrXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBhbnkgc2VnbWVudHMgdGhhdCB0aGUgbXV4ZXIgaGFzIG91dHB1dFxuICAgICAqIENvbmNhdGVuYXRlIHNlZ21lbnRzIHRvZ2V0aGVyIGJhc2VkIG9uIHR5cGUgYW5kIGFwcGVuZCB0aGVtIGludG9cbiAgICAgKiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZUJ1ZmZlcnNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Byb2Nlc3NQZW5kaW5nU2VnbWVudHNfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2Vzc1BlbmRpbmdTZWdtZW50c18oKSB7XG4gICAgICB2YXIgc29ydGVkU2VnbWVudHMgPSB7XG4gICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgc2VnbWVudHM6IFtdLFxuICAgICAgICAgIGJ5dGVzOiAwXG4gICAgICAgIH0sXG4gICAgICAgIGF1ZGlvOiB7XG4gICAgICAgICAgc2VnbWVudHM6IFtdLFxuICAgICAgICAgIGJ5dGVzOiAwXG4gICAgICAgIH0sXG4gICAgICAgIGNhcHRpb25zOiBbXSxcbiAgICAgICAgbWV0YWRhdGE6IFtdXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMucGVuZGluZ0J1ZmZlcnNfLmxlbmd0aCkge1xuICAgICAgICAvLyBXZSBhcmUgbm8gbG9uZ2VyIGluIHRoZSBpbnRlcm5hbCBcInVwZGF0aW5nXCIgc3RhdGVcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGVlbmQnKTtcbiAgICAgICAgdGhpcy5idWZmZXJVcGRhdGluZ18gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBTb3J0IHNlZ21lbnRzIGludG8gc2VwYXJhdGUgdmlkZW8vYXVkaW8gYXJyYXlzIGFuZFxuICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGVpciB0b3RhbCBieXRlIGxlbmd0aHNcblxuXG4gICAgICBzb3J0ZWRTZWdtZW50cyA9IHRoaXMucGVuZGluZ0J1ZmZlcnNfLnJlZHVjZShmdW5jdGlvbiAoc2VnbWVudE9iaiwgc2VnbWVudCkge1xuICAgICAgICB2YXIgdHlwZSA9IHNlZ21lbnQudHlwZTtcbiAgICAgICAgdmFyIGRhdGEgPSBzZWdtZW50LmRhdGE7XG4gICAgICAgIHZhciBpbml0U2VnbWVudCA9IHNlZ21lbnQuaW5pdFNlZ21lbnQ7XG4gICAgICAgIHNlZ21lbnRPYmpbdHlwZV0uc2VnbWVudHMucHVzaChkYXRhKTtcbiAgICAgICAgc2VnbWVudE9ialt0eXBlXS5ieXRlcyArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIHNlZ21lbnRPYmpbdHlwZV0uaW5pdFNlZ21lbnQgPSBpbml0U2VnbWVudDsgLy8gR2F0aGVyIGFueSBjYXB0aW9ucyBpbnRvIGEgc2luZ2xlIGFycmF5XG5cbiAgICAgICAgaWYgKHNlZ21lbnQuY2FwdGlvbnMpIHtcbiAgICAgICAgICBzZWdtZW50T2JqLmNhcHRpb25zID0gc2VnbWVudE9iai5jYXB0aW9ucy5jb25jYXQoc2VnbWVudC5jYXB0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VnbWVudC5pbmZvKSB7XG4gICAgICAgICAgc2VnbWVudE9ialt0eXBlXS5pbmZvID0gc2VnbWVudC5pbmZvO1xuICAgICAgICB9IC8vIEdhdGhlciBhbnkgbWV0YWRhdGEgaW50byBhIHNpbmdsZSBhcnJheVxuXG5cbiAgICAgICAgaWYgKHNlZ21lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICBzZWdtZW50T2JqLm1ldGFkYXRhID0gc2VnbWVudE9iai5tZXRhZGF0YS5jb25jYXQoc2VnbWVudC5tZXRhZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VnbWVudE9iajtcbiAgICAgIH0sIHNvcnRlZFNlZ21lbnRzKTsgLy8gQ3JlYXRlIHRoZSByZWFsIHNvdXJjZSBidWZmZXJzIGlmIHRoZXkgZG9uJ3QgZXhpc3QgYnkgbm93IHNpbmNlIHdlXG4gICAgICAvLyBmaW5hbGx5IGFyZSBzdXJlIHdoYXQgdHJhY2tzIGFyZSBjb250YWluZWQgaW4gdGhlIHNvdXJjZVxuXG4gICAgICBpZiAoIXRoaXMudmlkZW9CdWZmZXJfICYmICF0aGlzLmF1ZGlvQnVmZmVyXykge1xuICAgICAgICAvLyBSZW1vdmUgYW55IGNvZGVjcyB0aGF0IG1heSBoYXZlIGJlZW4gc3BlY2lmaWVkIGJ5IGRlZmF1bHQgYnV0XG4gICAgICAgIC8vIGFyZSBubyBsb25nZXIgYXBwbGljYWJsZSBub3dcbiAgICAgICAgaWYgKHNvcnRlZFNlZ21lbnRzLnZpZGVvLmJ5dGVzID09PSAwKSB7XG4gICAgICAgICAgdGhpcy52aWRlb0NvZGVjXyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc29ydGVkU2VnbWVudHMuYXVkaW8uYnl0ZXMgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmF1ZGlvQ29kZWNfID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JlYXRlUmVhbFNvdXJjZUJ1ZmZlcnNfKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0ZWRTZWdtZW50cy5hdWRpby5pbmZvKSB7XG4gICAgICAgIHRoaXMubWVkaWFTb3VyY2VfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICdhdWRpb2luZm8nLFxuICAgICAgICAgIGluZm86IHNvcnRlZFNlZ21lbnRzLmF1ZGlvLmluZm9cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0ZWRTZWdtZW50cy52aWRlby5pbmZvKSB7XG4gICAgICAgIHRoaXMubWVkaWFTb3VyY2VfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd2aWRlb2luZm8nLFxuICAgICAgICAgIGluZm86IHNvcnRlZFNlZ21lbnRzLnZpZGVvLmluZm9cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZEF1ZGlvSW5pdFNlZ21lbnRfKSB7XG4gICAgICAgIGlmICghdGhpcy5hdWRpb0Rpc2FibGVkXyAmJiB0aGlzLmF1ZGlvQnVmZmVyXykge1xuICAgICAgICAgIHNvcnRlZFNlZ21lbnRzLmF1ZGlvLnNlZ21lbnRzLnVuc2hpZnQoc29ydGVkU2VnbWVudHMuYXVkaW8uaW5pdFNlZ21lbnQpO1xuICAgICAgICAgIHNvcnRlZFNlZ21lbnRzLmF1ZGlvLmJ5dGVzICs9IHNvcnRlZFNlZ21lbnRzLmF1ZGlvLmluaXRTZWdtZW50LmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFwcGVuZEF1ZGlvSW5pdFNlZ21lbnRfID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmlnZ2VyVXBkYXRlZW5kID0gZmFsc2U7IC8vIE1lcmdlIG11bHRpcGxlIHZpZGVvIGFuZCBhdWRpbyBzZWdtZW50cyBpbnRvIG9uZSBhbmQgYXBwZW5kXG5cbiAgICAgIGlmICh0aGlzLnZpZGVvQnVmZmVyXyAmJiBzb3J0ZWRTZWdtZW50cy52aWRlby5ieXRlcykge1xuICAgICAgICBzb3J0ZWRTZWdtZW50cy52aWRlby5zZWdtZW50cy51bnNoaWZ0KHNvcnRlZFNlZ21lbnRzLnZpZGVvLmluaXRTZWdtZW50KTtcbiAgICAgICAgc29ydGVkU2VnbWVudHMudmlkZW8uYnl0ZXMgKz0gc29ydGVkU2VnbWVudHMudmlkZW8uaW5pdFNlZ21lbnQuYnl0ZUxlbmd0aDtcbiAgICAgICAgdGhpcy5jb25jYXRBbmRBcHBlbmRTZWdtZW50c18oc29ydGVkU2VnbWVudHMudmlkZW8sIHRoaXMudmlkZW9CdWZmZXJfKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0J1ZmZlcl8gJiYgKHRoaXMuYXVkaW9EaXNhYmxlZF8gfHwgIXRoaXMuYXVkaW9CdWZmZXJfKSkge1xuICAgICAgICAvLyBUaGUgdHJhbnNtdXhlciBkaWQgbm90IHJldHVybiBhbnkgYnl0ZXMgb2YgdmlkZW8sIG1lYW5pbmcgaXQgd2FzIGFsbCB0cmltbWVkXG4gICAgICAgIC8vIGZvciBnb3AgYWxpZ25tZW50LiBTaW5jZSB3ZSBoYXZlIGEgdmlkZW8gYnVmZmVyIGFuZCBhdWRpbyBpcyBkaXNhYmxlZCwgdXBkYXRlZW5kXG4gICAgICAgIC8vIHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkIGJ5IHRoaXMgc291cmNlIGJ1ZmZlciwgd2hpY2ggd2lsbCBjYXVzZSBjb250cmliLWhsc1xuICAgICAgICAvLyB0byBiZSBzdHVjayBmb3JldmVyIHdhaXRpbmcgZm9yIHVwZGF0ZWVuZC4gSWYgYXVkaW8gaXMgbm90IGRpc2FibGVkLCB1cGRhdGVlbmRcbiAgICAgICAgLy8gd2lsbCBiZSB0cmlnZ2VyZWQgYnkgdGhlIGF1ZGlvIGJ1ZmZlciwgd2hpY2ggd2lsbCBiZSBzZW50IHVwd2FyZHMgc2luY2UgdGhlIHZpZGVvXG4gICAgICAgIC8vIGJ1ZmZlciB3aWxsIG5vdCBiZSBpbiBhbiB1cGRhdGluZyBzdGF0ZS5cbiAgICAgICAgdHJpZ2dlclVwZGF0ZWVuZCA9IHRydWU7XG4gICAgICB9IC8vIEFkZCB0ZXh0LXRyYWNrIGRhdGEgZm9yIGFsbFxuXG5cbiAgICAgIGFkZFRleHRUcmFja0RhdGEodGhpcywgc29ydGVkU2VnbWVudHMuY2FwdGlvbnMsIHNvcnRlZFNlZ21lbnRzLm1ldGFkYXRhKTtcblxuICAgICAgaWYgKCF0aGlzLmF1ZGlvRGlzYWJsZWRfICYmIHRoaXMuYXVkaW9CdWZmZXJfKSB7XG4gICAgICAgIHRoaXMuY29uY2F0QW5kQXBwZW5kU2VnbWVudHNfKHNvcnRlZFNlZ21lbnRzLmF1ZGlvLCB0aGlzLmF1ZGlvQnVmZmVyXyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0J1ZmZlcnNfLmxlbmd0aCA9IDA7XG5cbiAgICAgIGlmICh0cmlnZ2VyVXBkYXRlZW5kKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlZW5kJyk7XG4gICAgICB9IC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIGludGVybmFsIFwidXBkYXRpbmdcIiBzdGF0ZVxuXG5cbiAgICAgIHRoaXMuYnVmZmVyVXBkYXRpbmdfID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbWJpbmUgYWxsIHNlZ21lbnRzIGludG8gYSBzaW5nbGUgVWludDhBcnJheSBhbmQgdGhlbiBhcHBlbmQgdGhlbVxuICAgICAqIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWdtZW50T2JqXG4gICAgICogQHBhcmFtIHtTb3VyY2VCdWZmZXJ9IGRlc3RpbmF0aW9uQnVmZmVyIG5hdGl2ZSBzb3VyY2UgYnVmZmVyIHRvIGFwcGVuZCBkYXRhIHRvXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29uY2F0QW5kQXBwZW5kU2VnbWVudHNfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uY2F0QW5kQXBwZW5kU2VnbWVudHNfKHNlZ21lbnRPYmosIGRlc3RpbmF0aW9uQnVmZmVyKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgIHZhciB0ZW1wQnVmZmVyID0gdm9pZCAwO1xuXG4gICAgICBpZiAoc2VnbWVudE9iai5ieXRlcykge1xuICAgICAgICB0ZW1wQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoc2VnbWVudE9iai5ieXRlcyk7IC8vIENvbWJpbmUgdGhlIGluZGl2aWR1YWwgc2VnbWVudHMgaW50byBvbmUgbGFyZ2UgdHlwZWQtYXJyYXlcblxuICAgICAgICBzZWdtZW50T2JqLnNlZ21lbnRzLmZvckVhY2goZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICAgICAgICB0ZW1wQnVmZmVyLnNldChzZWdtZW50LCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSBzZWdtZW50LmJ5dGVMZW5ndGg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGVzdGluYXRpb25CdWZmZXIudXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIGRlc3RpbmF0aW9uQnVmZmVyLmFwcGVuZEJ1ZmZlcih0ZW1wQnVmZmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5tZWRpYVNvdXJjZV8ucGxheWVyXykge1xuICAgICAgICAgICAgdGhpcy5tZWRpYVNvdXJjZV8ucGxheWVyXy5lcnJvcih7XG4gICAgICAgICAgICAgIGNvZGU6IC0zLFxuICAgICAgICAgICAgICB0eXBlOiAnQVBQRU5EX0JVRkZFUl9FUlInLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yOiBlcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtdWxhdGUgdGhlIG5hdGl2ZSBtZWRpYXNvdXJjZSBmdW5jdGlvbi4gYWJvcnQgYW55IHNvdXJlQnVmZmVyXG4gICAgICogYWN0aW9ucyBhbmQgdGhyb3cgb3V0IGFueSB1bi1hcHBlbmRlZCBkYXRhLlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NvdXJjZUJ1ZmZlci9hYm9ydFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhYm9ydCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KCkge1xuICAgICAgaWYgKHRoaXMudmlkZW9CdWZmZXJfKSB7XG4gICAgICAgIHRoaXMudmlkZW9CdWZmZXJfLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5hdWRpb0Rpc2FibGVkXyAmJiB0aGlzLmF1ZGlvQnVmZmVyXykge1xuICAgICAgICB0aGlzLmF1ZGlvQnVmZmVyXy5hYm9ydCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50cmFuc211eGVyXykge1xuICAgICAgICB0aGlzLnRyYW5zbXV4ZXJfLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246ICdyZXNldCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0J1ZmZlcnNfLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLmJ1ZmZlclVwZGF0aW5nXyA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gVmlydHVhbFNvdXJjZUJ1ZmZlcjtcbn0odmlkZW9qcyQxLkV2ZW50VGFyZ2V0KTtcbi8qKlxuICogQGZpbGUgaHRtbC1tZWRpYS1zb3VyY2UuanNcbiAqL1xuXG4vKipcbiAqIE91ciBNZWRpYVNvdXJjZSBpbXBsZW1lbnRhdGlvbiBpbiBIVE1MLCBtaW1pY3MgbmF0aXZlXG4gKiBNZWRpYVNvdXJjZSB3aGVyZS9pZiBwb3NzaWJsZS5cbiAqXG4gKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFTb3VyY2VcbiAqIEBjbGFzcyBIdG1sTWVkaWFTb3VyY2VcbiAqIEBleHRlbmRzIHZpZGVvanMuRXZlbnRUYXJnZXRcbiAqL1xuXG5cbnZhciBIdG1sTWVkaWFTb3VyY2UgPSBmdW5jdGlvbiAoX3ZpZGVvanMkRXZlbnRUYXJnZXQpIHtcbiAgaW5oZXJpdHMoSHRtbE1lZGlhU291cmNlLCBfdmlkZW9qcyRFdmVudFRhcmdldCk7XG5cbiAgZnVuY3Rpb24gSHRtbE1lZGlhU291cmNlKCkge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEh0bWxNZWRpYVNvdXJjZSk7XG5cbiAgICB2YXIgX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChIdG1sTWVkaWFTb3VyY2UuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihIdG1sTWVkaWFTb3VyY2UpKS5jYWxsKHRoaXMpKTtcblxuICAgIHZhciBwcm9wZXJ0eSA9IHZvaWQgMDtcbiAgICBfdGhpcy5uYXRpdmVNZWRpYVNvdXJjZV8gPSBuZXcgd2luZG93JDEuTWVkaWFTb3VyY2UoKTsgLy8gZGVsZWdhdGUgdG8gdGhlIG5hdGl2ZSBNZWRpYVNvdXJjZSdzIG1ldGhvZHMgYnkgZGVmYXVsdFxuXG4gICAgZm9yIChwcm9wZXJ0eSBpbiBfdGhpcy5uYXRpdmVNZWRpYVNvdXJjZV8pIHtcbiAgICAgIGlmICghKHByb3BlcnR5IGluIEh0bWxNZWRpYVNvdXJjZS5wcm90b3R5cGUpICYmIHR5cGVvZiBfdGhpcy5uYXRpdmVNZWRpYVNvdXJjZV9bcHJvcGVydHldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIF90aGlzW3Byb3BlcnR5XSA9IF90aGlzLm5hdGl2ZU1lZGlhU291cmNlX1twcm9wZXJ0eV0uYmluZChfdGhpcy5uYXRpdmVNZWRpYVNvdXJjZV8pO1xuICAgICAgfVxuICAgIH0gLy8gZW11bGF0ZSBgZHVyYXRpb25gIGFuZCBgc2Vla2FibGVgIHVudGlsIHNlZWtpbmcgY2FuIGJlXG4gICAgLy8gaGFuZGxlZCB1bmlmb3JtbHkgZm9yIGxpdmUgc3RyZWFtc1xuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL21lZGlhLXNvdXJjZS9pc3N1ZXMvNVxuXG5cbiAgICBfdGhpcy5kdXJhdGlvbl8gPSBOYU47XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnZHVyYXRpb24nLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHVyYXRpb25fID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmR1cmF0aW9uXztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5kdXJhdGlvbjtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCQkMShkdXJhdGlvbikge1xuICAgICAgICB0aGlzLmR1cmF0aW9uXyA9IGR1cmF0aW9uO1xuXG4gICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcbiAgICAgICAgICB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3NlZWthYmxlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIGlmICh0aGlzLmR1cmF0aW9uXyA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXR1cm4gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoW1swLCB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5kdXJhdGlvbl1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5zZWVrYWJsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICdyZWFkeVN0YXRlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5yZWFkeVN0YXRlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ2FjdGl2ZVNvdXJjZUJ1ZmZlcnMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlU291cmNlQnVmZmVyc187XG4gICAgICB9XG4gICAgfSk7IC8vIHRoZSBsaXN0IG9mIHZpcnR1YWwgYW5kIG5hdGl2ZSBTb3VyY2VCdWZmZXJzIGNyZWF0ZWQgYnkgdGhpc1xuICAgIC8vIE1lZGlhU291cmNlXG5cbiAgICBfdGhpcy5zb3VyY2VCdWZmZXJzID0gW107XG4gICAgX3RoaXMuYWN0aXZlU291cmNlQnVmZmVyc18gPSBbXTtcbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIGxpc3Qgb2YgYWN0aXZlIHNvdXJjZSBidWZmZXJzIGJhc2VkIHVwb24gdmFyaW91c1xuICAgICAqIGltZm9ybWF0aW9uIGZyb20gSExTIGFuZCB2aWRlby5qc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICAgIF90aGlzLnVwZGF0ZUFjdGl2ZVNvdXJjZUJ1ZmZlcnNfID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmV0YWluIHRoZSByZWZlcmVuY2UgYnV0IGVtcHR5IHRoZSBhcnJheVxuICAgICAgX3RoaXMuYWN0aXZlU291cmNlQnVmZmVyc18ubGVuZ3RoID0gMDsgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgc291cmNlIGJ1ZmZlciwgdGhlbiBpdCB3aWxsIGFsd2F5cyBiZSBhY3RpdmUgYW5kIGF1ZGlvIHdpbGxcbiAgICAgIC8vIGJlIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjb2RlYyBvZiB0aGUgc291cmNlIGJ1ZmZlclxuXG4gICAgICBpZiAoX3RoaXMuc291cmNlQnVmZmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHNvdXJjZUJ1ZmZlciA9IF90aGlzLnNvdXJjZUJ1ZmZlcnNbMF07XG4gICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRBdWRpb0luaXRTZWdtZW50XyA9IHRydWU7XG4gICAgICAgIHNvdXJjZUJ1ZmZlci5hdWRpb0Rpc2FibGVkXyA9ICFzb3VyY2VCdWZmZXIuYXVkaW9Db2RlY187XG5cbiAgICAgICAgX3RoaXMuYWN0aXZlU291cmNlQnVmZmVyc18ucHVzaChzb3VyY2VCdWZmZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhlcmUgYXJlIDIgc291cmNlIGJ1ZmZlcnMsIGEgY29tYmluZWQgKHBvc3NpYmx5IHZpZGVvIG9ubHkpIHNvdXJjZSBidWZmZXIgYW5kXG4gICAgICAvLyBhbmQgYW4gYXVkaW8gb25seSBzb3VyY2UgYnVmZmVyLlxuICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIGF1ZGlvIGluIHRoZSBjb21iaW5lZCB2aXJ0dWFsIHNvdXJjZSBidWZmZXIgaXMgZW5hYmxlZFxuICAgICAgLy8gYW5kIHRoZSBhdWRpby1vbmx5IHNvdXJjZSBidWZmZXIgKGlmIGl0IGV4aXN0cykgaXMgZGlzYWJsZWQuXG5cblxuICAgICAgdmFyIGRpc2FibGVDb21iaW5lZCA9IGZhbHNlO1xuICAgICAgdmFyIGRpc2FibGVBdWRpb09ubHkgPSB0cnVlOyAvLyBUT0RPOiBtYXliZSB3ZSBjYW4gc3RvcmUgdGhlIHNvdXJjZWJ1ZmZlcnMgb24gdGhlIHRyYWNrIG9iamVjdHM/XG4gICAgICAvLyBzYWZhcmkgbWF5IGRvIHNvbWV0aGluZyBsaWtlIHRoaXNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRyYWNrID0gX3RoaXMucGxheWVyXy5hdWRpb1RyYWNrcygpW2ldO1xuXG4gICAgICAgIGlmICh0cmFjay5lbmFibGVkICYmIHRyYWNrLmtpbmQgIT09ICdtYWluJykge1xuICAgICAgICAgIC8vIFRoZSBlbmFibGVkIHRyYWNrIGlzIGFuIGFsdGVybmF0ZSBhdWRpbyB0cmFjayBzbyBkaXNhYmxlIHRoZSBhdWRpbyBpblxuICAgICAgICAgIC8vIHRoZSBjb21iaW5lZCBzb3VyY2UgYnVmZmVyIGFuZCBlbmFibGUgdGhlIGF1ZGlvLW9ubHkgc291cmNlIGJ1ZmZlci5cbiAgICAgICAgICBkaXNhYmxlQ29tYmluZWQgPSB0cnVlO1xuICAgICAgICAgIGRpc2FibGVBdWRpb09ubHkgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5zb3VyY2VCdWZmZXJzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUJ1ZmZlciwgaW5kZXgpIHtcbiAgICAgICAgLyogZXNsaW5zdC1kaXNhYmxlICovXG4gICAgICAgIC8vIFRPRE8gb25jZSBjb2RlY3MgYXJlIHJlcXVpcmVkLCB3ZSBjYW4gc3dpdGNoIHRvIHVzaW5nIHRoZSBjb2RlY3MgdG8gZGV0ZXJtaW5lXG4gICAgICAgIC8vICAgICAgd2hhdCBzdHJlYW0gaXMgdGhlIHZpZGVvIHN0cmVhbSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB2aWRlb1RyYWNrc1xuXG4gICAgICAgIC8qIGVzbGluc3QtZW5hYmxlICovXG4gICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRBdWRpb0luaXRTZWdtZW50XyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNvdXJjZUJ1ZmZlci52aWRlb0NvZGVjXyAmJiBzb3VyY2VCdWZmZXIuYXVkaW9Db2RlY18pIHtcbiAgICAgICAgICAvLyBjb21iaW5lZFxuICAgICAgICAgIHNvdXJjZUJ1ZmZlci5hdWRpb0Rpc2FibGVkXyA9IGRpc2FibGVDb21iaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VCdWZmZXIudmlkZW9Db2RlY18gJiYgIXNvdXJjZUJ1ZmZlci5hdWRpb0NvZGVjXykge1xuICAgICAgICAgIC8vIElmIHRoZSBcImNvbWJpbmVkXCIgc291cmNlIGJ1ZmZlciBpcyB2aWRlbyBvbmx5LCB0aGVuIHdlIGRvIG5vdCB3YW50XG4gICAgICAgICAgLy8gZGlzYWJsZSB0aGUgYXVkaW8tb25seSBzb3VyY2UgYnVmZmVyICh0aGlzIGlzIG1vc3RseSBmb3IgZGVtdXhlZFxuICAgICAgICAgIC8vIGF1ZGlvIGFuZCB2aWRlbyBobHMpXG4gICAgICAgICAgc291cmNlQnVmZmVyLmF1ZGlvRGlzYWJsZWRfID0gdHJ1ZTtcbiAgICAgICAgICBkaXNhYmxlQXVkaW9Pbmx5ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNvdXJjZUJ1ZmZlci52aWRlb0NvZGVjXyAmJiBzb3VyY2VCdWZmZXIuYXVkaW9Db2RlY18pIHtcbiAgICAgICAgICAvLyBhdWRpbyBvbmx5XG4gICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYXVkaW8gb25seSB3aXRoIGFsdGVybmF0ZSBhdWRpbyBhbmQgZGlzYWJsZUF1ZGlvT25seSBpcyB0cnVlXG4gICAgICAgICAgLy8gdGhpcyBtZWFucyB3ZSB3YW50IHRvIGRpc2FibGUgdGhlIGF1ZGlvIG9uIHRoZSBhbHRlcm5hdGUgYXVkaW8gc291cmNlYnVmZmVyXG4gICAgICAgICAgLy8gYnV0IG5vdCB0aGUgbWFpbiBcImNvbWJpbmVkXCIgc291cmNlIGJ1ZmZlci4gVGhlIFwiY29tYmluZWRcIiBzb3VyY2UgYnVmZmVyIGlzXG4gICAgICAgICAgLy8gYWx3YXlzIGF0IGluZGV4IDAsIHNvIHRoaXMgZW5zdXJlcyBhdWRpbyB3b24ndCBiZSBkaXNhYmxlZCBpbiBib3RoIHNvdXJjZVxuICAgICAgICAgIC8vIGJ1ZmZlcnMuXG4gICAgICAgICAgc291cmNlQnVmZmVyLmF1ZGlvRGlzYWJsZWRfID0gaW5kZXggPyBkaXNhYmxlQXVkaW9Pbmx5IDogIWRpc2FibGVBdWRpb09ubHk7XG5cbiAgICAgICAgICBpZiAoc291cmNlQnVmZmVyLmF1ZGlvRGlzYWJsZWRfKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuYWN0aXZlU291cmNlQnVmZmVyc18ucHVzaChzb3VyY2VCdWZmZXIpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLm9uUGxheWVyTWVkaWFjaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc291cmNlQnVmZmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VCdWZmZXIpIHtcbiAgICAgICAgc291cmNlQnVmZmVyLmFwcGVuZEF1ZGlvSW5pdFNlZ21lbnRfID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5vbkhsc1Jlc2V0XyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNvdXJjZUJ1ZmZlcnMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlQnVmZmVyKSB7XG4gICAgICAgIGlmIChzb3VyY2VCdWZmZXIudHJhbnNtdXhlcl8pIHtcbiAgICAgICAgICBzb3VyY2VCdWZmZXIudHJhbnNtdXhlcl8ucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgYWN0aW9uOiAncmVzZXRDYXB0aW9ucydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLm9uSGxzU2VnbWVudFRpbWVNYXBwaW5nXyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuc291cmNlQnVmZmVycy5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci50aW1lTWFwcGluZ18gPSBldmVudC5tYXBwaW5nO1xuICAgICAgfSk7XG4gICAgfTsgLy8gUmUtZW1pdCBNZWRpYVNvdXJjZSBldmVudHMgb24gdGhlIHBvbHlmaWxsXG5cblxuICAgIFsnc291cmNlb3BlbicsICdzb3VyY2VjbG9zZScsICdzb3VyY2VlbmRlZCddLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgdGhpcy5uYXRpdmVNZWRpYVNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMpKTtcbiAgICB9LCBfdGhpcyk7IC8vIGNhcHR1cmUgdGhlIGFzc29jaWF0ZWQgcGxheWVyIHdoZW4gdGhlIE1lZGlhU291cmNlIGlzXG4gICAgLy8gc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkXG5cbiAgICBfdGhpcy5vbignc291cmNlb3BlbicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gR2V0IHRoZSBwbGF5ZXIgdGhpcyBNZWRpYVNvdXJjZSBpcyBhdHRhY2hlZCB0b1xuICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyBfdGhpcy51cmxfICsgJ1wiXScpO1xuXG4gICAgICBpZiAoIXZpZGVvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucGxheWVyXyA9IHZpZGVvanMkMSh2aWRlby5wYXJlbnROb2RlKTtcblxuICAgICAgaWYgKCFfdGhpcy5wbGF5ZXJfKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gaGxzLXJlc2V0IGlzIGZpcmVkIGJ5IHZpZGVvanMuSGxzIG9uIHRvIHRoZSB0ZWNoIGFmdGVyIHRoZSBtYWluIFNlZ21lbnRMb2FkZXJcbiAgICAgIC8vIHJlc2V0cyBpdHMgc3RhdGUgYW5kIGZsdXNoZXMgdGhlIGJ1ZmZlclxuXG5cbiAgICAgIF90aGlzLnBsYXllcl8udGVjaF8ub24oJ2hscy1yZXNldCcsIF90aGlzLm9uSGxzUmVzZXRfKTsgLy8gaGxzLXNlZ21lbnQtdGltZS1tYXBwaW5nIGlzIGZpcmVkIGJ5IHZpZGVvanMuSGxzIG9uIHRvIHRoZSB0ZWNoIGFmdGVyIHRoZSBtYWluXG4gICAgICAvLyBTZWdtZW50TG9hZGVyIGluc3BlY3RzIGFuIE1UUyBzZWdtZW50IGFuZCBoYXMgYW4gYWNjdXJhdGUgc3RyZWFtIHRvIGRpc3BsYXlcbiAgICAgIC8vIHRpbWUgbWFwcGluZ1xuXG5cbiAgICAgIF90aGlzLnBsYXllcl8udGVjaF8ub24oJ2hscy1zZWdtZW50LXRpbWUtbWFwcGluZycsIF90aGlzLm9uSGxzU2VnbWVudFRpbWVNYXBwaW5nXyk7XG5cbiAgICAgIGlmIChfdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzICYmIF90aGlzLnBsYXllcl8uYXVkaW9UcmFja3MoKSkge1xuICAgICAgICBfdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkub24oJ2NoYW5nZScsIF90aGlzLnVwZGF0ZUFjdGl2ZVNvdXJjZUJ1ZmZlcnNfKTtcblxuICAgICAgICBfdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkub24oJ2FkZHRyYWNrJywgX3RoaXMudXBkYXRlQWN0aXZlU291cmNlQnVmZmVyc18pO1xuXG4gICAgICAgIF90aGlzLnBsYXllcl8uYXVkaW9UcmFja3MoKS5vbigncmVtb3ZldHJhY2snLCBfdGhpcy51cGRhdGVBY3RpdmVTb3VyY2VCdWZmZXJzXyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnBsYXllcl8ub24oJ21lZGlhY2hhbmdlJywgX3RoaXMub25QbGF5ZXJNZWRpYWNoYW5nZV8pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMub24oJ3NvdXJjZWVuZGVkJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgZHVyYXRpb24gPSBkdXJhdGlvbk9mVmlkZW8oX3RoaXMuZHVyYXRpb24pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnNvdXJjZUJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZWJ1ZmZlciA9IF90aGlzLnNvdXJjZUJ1ZmZlcnNbaV07XG4gICAgICAgIHZhciBjdWVzID0gc291cmNlYnVmZmVyLm1ldGFkYXRhVHJhY2tfICYmIHNvdXJjZWJ1ZmZlci5tZXRhZGF0YVRyYWNrXy5jdWVzO1xuXG4gICAgICAgIGlmIChjdWVzICYmIGN1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY3Vlc1tjdWVzLmxlbmd0aCAtIDFdLmVuZFRpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyBleHBsaWNpdGx5IHRlcm1pbmF0ZSBhbnkgV2ViV29ya2VycyB0aGF0IHdlcmUgY3JlYXRlZFxuICAgIC8vIGJ5IFNvdXJjZUhhbmRsZXJzXG5cblxuICAgIF90aGlzLm9uKCdzb3VyY2VjbG9zZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdGhpcy5zb3VyY2VCdWZmZXJzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUJ1ZmZlcikge1xuICAgICAgICBpZiAoc291cmNlQnVmZmVyLnRyYW5zbXV4ZXJfKSB7XG4gICAgICAgICAgc291cmNlQnVmZmVyLnRyYW5zbXV4ZXJfLnRlcm1pbmF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc291cmNlQnVmZmVycy5sZW5ndGggPSAwO1xuXG4gICAgICBpZiAoIXRoaXMucGxheWVyXykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBsYXllcl8uYXVkaW9UcmFja3MgJiYgdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkub2ZmKCdjaGFuZ2UnLCB0aGlzLnVwZGF0ZUFjdGl2ZVNvdXJjZUJ1ZmZlcnNfKTtcbiAgICAgICAgdGhpcy5wbGF5ZXJfLmF1ZGlvVHJhY2tzKCkub2ZmKCdhZGR0cmFjaycsIHRoaXMudXBkYXRlQWN0aXZlU291cmNlQnVmZmVyc18pO1xuICAgICAgICB0aGlzLnBsYXllcl8uYXVkaW9UcmFja3MoKS5vZmYoJ3JlbW92ZXRyYWNrJywgdGhpcy51cGRhdGVBY3RpdmVTb3VyY2VCdWZmZXJzXyk7XG4gICAgICB9IC8vIFdlIGNhbiBvbmx5IGNoYW5nZSB0aGlzIGlmIHRoZSBwbGF5ZXIgaGFzbid0IGJlZW4gZGlzcG9zZWQgb2YgeWV0XG4gICAgICAvLyBiZWNhdXNlIGBvZmZgIGV2ZW50dWFsbHkgdHJpZXMgdG8gdXNlIHRoZSBlbF8gcHJvcGVydHkuIElmIGl0IGhhc1xuICAgICAgLy8gYmVlbiBkaXNwb3NlZCBvZiwgdGhlbiBkb24ndCB3b3JyeSBhYm91dCBpdCBiZWNhdXNlIHRoZXJlIGFyZSBub1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnMgbGVmdCB0byB1bmJpbmQgYW55d2F5XG5cblxuICAgICAgaWYgKHRoaXMucGxheWVyXy5lbF8pIHtcbiAgICAgICAgdGhpcy5wbGF5ZXJfLm9mZignbWVkaWFjaGFuZ2UnLCB0aGlzLm9uUGxheWVyTWVkaWFjaGFuZ2VfKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxheWVyXy50ZWNoXyAmJiB0aGlzLnBsYXllcl8udGVjaF8uZWxfKSB7XG4gICAgICAgIHRoaXMucGxheWVyXy50ZWNoXy5vZmYoJ2hscy1yZXNldCcsIHRoaXMub25IbHNSZXNldF8pO1xuICAgICAgICB0aGlzLnBsYXllcl8udGVjaF8ub2ZmKCdobHMtc2VnbWVudC10aW1lLW1hcHBpbmcnLCB0aGlzLm9uSGxzU2VnbWVudFRpbWVNYXBwaW5nXyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHJhbmdlIHRoYXQgdGhhdCBjYW4gbm93IGJlIHNlZWtlZCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtEb3VibGV9IHN0YXJ0IHdoZXJlIHRvIHN0YXJ0IHRoZSBhZGRpdGlvblxuICAgKiBAcGFyYW0ge0RvdWJsZX0gZW5kIHdoZXJlIHRvIGVuZCB0aGUgYWRkaXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBjcmVhdGVDbGFzcyhIdG1sTWVkaWFTb3VyY2UsIFt7XG4gICAga2V5OiAnYWRkU2Vla2FibGVSYW5nZV8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRTZWVrYWJsZVJhbmdlXyhzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgZXJyb3IgPSB2b2lkIDA7XG5cbiAgICAgIGlmICh0aGlzLmR1cmF0aW9uICE9PSBJbmZpbml0eSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignTWVkaWFTb3VyY2UuYWRkU2Vla2FibGVSYW5nZSgpIGNhbiBvbmx5IGJlIGludm9rZWQgJyArICd3aGVuIHRoZSBkdXJhdGlvbiBpcyBJbmZpbml0eScpO1xuICAgICAgICBlcnJvci5uYW1lID0gJ0ludmFsaWRTdGF0ZUVycm9yJztcbiAgICAgICAgZXJyb3IuY29kZSA9IDExO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZCA+IHRoaXMubmF0aXZlTWVkaWFTb3VyY2VfLmR1cmF0aW9uIHx8IGlzTmFOKHRoaXMubmF0aXZlTWVkaWFTb3VyY2VfLmR1cmF0aW9uKSkge1xuICAgICAgICB0aGlzLm5hdGl2ZU1lZGlhU291cmNlXy5kdXJhdGlvbiA9IGVuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgc291cmNlIGJ1ZmZlciB0byB0aGUgbWVkaWEgc291cmNlLlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhU291cmNlL2FkZFNvdXJjZUJ1ZmZlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBjb250ZW50LXR5cGUgb2YgdGhlIGNvbnRlbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBjcmVhdGVkIHNvdXJjZSBidWZmZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYWRkU291cmNlQnVmZmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkU291cmNlQnVmZmVyKHR5cGUpIHtcbiAgICAgIHZhciBidWZmZXIgPSB2b2lkIDA7XG4gICAgICB2YXIgcGFyc2VkVHlwZSA9IHBhcnNlQ29udGVudFR5cGUodHlwZSk7IC8vIENyZWF0ZSBhIFZpcnR1YWxTb3VyY2VCdWZmZXIgdG8gdHJhbnNtdXggTVBFRy0yIHRyYW5zcG9ydFxuICAgICAgLy8gc3RyZWFtIHNlZ21lbnRzIGludG8gZnJhZ21lbnRlZCBNUDRzXG5cbiAgICAgIGlmICgvXih2aWRlb3xhdWRpbylcXC9tcDJ0JC9pLnRlc3QocGFyc2VkVHlwZS50eXBlKSkge1xuICAgICAgICB2YXIgY29kZWNzID0gW107XG5cbiAgICAgICAgaWYgKHBhcnNlZFR5cGUucGFyYW1ldGVycyAmJiBwYXJzZWRUeXBlLnBhcmFtZXRlcnMuY29kZWNzKSB7XG4gICAgICAgICAgY29kZWNzID0gcGFyc2VkVHlwZS5wYXJhbWV0ZXJzLmNvZGVjcy5zcGxpdCgnLCcpO1xuICAgICAgICAgIGNvZGVjcyA9IHRyYW5zbGF0ZUxlZ2FjeUNvZGVjcyhjb2RlY3MpO1xuICAgICAgICAgIGNvZGVjcyA9IGNvZGVjcy5maWx0ZXIoZnVuY3Rpb24gKGNvZGVjKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBdWRpb0NvZGVjKGNvZGVjKSB8fCBpc1ZpZGVvQ29kZWMoY29kZWMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGVjcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb2RlY3MgPSBbJ2F2YzEuNGQ0MDBkJywgJ21wNGEuNDAuMiddO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyID0gbmV3IFZpcnR1YWxTb3VyY2VCdWZmZXIodGhpcywgY29kZWNzKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VCdWZmZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIElmIGFub3RoZXIgVmlydHVhbFNvdXJjZUJ1ZmZlciBhbHJlYWR5IGV4aXN0cywgdGhlbiB3ZSBhcmUgY3JlYXRpbmcgYVxuICAgICAgICAgIC8vIFNvdXJjZUJ1ZmZlciBmb3IgYW4gYWx0ZXJuYXRlIGF1ZGlvIHRyYWNrIGFuZCB0aGVyZWZvcmUgd2Uga25vdyB0aGF0XG4gICAgICAgICAgLy8gdGhlIHNvdXJjZSBoYXMgYm90aCBhbiBhdWRpbyBhbmQgdmlkZW8gdHJhY2suXG4gICAgICAgICAgLy8gVGhhdCBtZWFucyB3ZSBzaG91bGQgdHJpZ2dlciB0aGUgbWFudWFsIGNyZWF0aW9uIG9mIHRoZSByZWFsXG4gICAgICAgICAgLy8gU291cmNlQnVmZmVycyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSB0cmFuc211eGVyIHRvIHJldHVybiBkYXRhXG4gICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJzWzBdLmNyZWF0ZVJlYWxTb3VyY2VCdWZmZXJzXygpO1xuICAgICAgICAgIGJ1ZmZlci5jcmVhdGVSZWFsU291cmNlQnVmZmVyc18oKTsgLy8gQXV0b21hdGljYWxseSBkaXNhYmxlIHRoZSBhdWRpbyBvbiB0aGUgZmlyc3Qgc291cmNlIGJ1ZmZlciBpZlxuICAgICAgICAgIC8vIGEgc2Vjb25kIHNvdXJjZSBidWZmZXIgaXMgZXZlciBjcmVhdGVkXG5cbiAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlcnNbMF0uYXVkaW9EaXNhYmxlZF8gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGJ1ZmZlciA9IHRoaXMubmF0aXZlTWVkaWFTb3VyY2VfLmFkZFNvdXJjZUJ1ZmZlcih0eXBlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3VyY2VCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBIdG1sTWVkaWFTb3VyY2U7XG59KHZpZGVvanMkMS5FdmVudFRhcmdldCk7XG4vKipcbiAqIEBmaWxlIHZpZGVvanMtY29udHJpYi1tZWRpYS1zb3VyY2VzLmpzXG4gKi9cblxuXG52YXIgdXJsQ291bnQgPSAwOyAvLyAtLS0tLS0tLS0tLS1cbi8vIE1lZGlhIFNvdXJjZVxuLy8gLS0tLS0tLS0tLS0tXG4vLyBzdG9yZSByZWZlcmVuY2VzIHRvIHRoZSBtZWRpYSBzb3VyY2VzIHNvIHRoZXkgY2FuIGJlIGNvbm5lY3RlZFxuLy8gdG8gYSB2aWRlbyBlbGVtZW50IChhIHN3ZiBvYmplY3QpXG4vLyBUT0RPOiBjYW4gd2Ugc3RvcmUgdGhpcyBzb21ld2hlcmUgbG9jYWwgdG8gdGhpcyBtb2R1bGU/XG5cbnZpZGVvanMkMS5tZWRpYVNvdXJjZXMgPSB7fTtcbi8qKlxuICogUHJvdmlkZSBhIG1ldGhvZCBmb3IgYSBzd2Ygb2JqZWN0IHRvIG5vdGlmeSBKUyB0aGF0IGFcbiAqIG1lZGlhIHNvdXJjZSBpcyBub3cgb3Blbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNPYmplY3RVUkwgc3RyaW5nIHJlZmVyZW5jaW5nIHRoZSBNU0UgT2JqZWN0IFVSTFxuICogQHBhcmFtIHtTdHJpbmd9IHN3ZklkIHRoZSBzd2YgaWRcbiAqL1xuXG52YXIgb3BlbiA9IGZ1bmN0aW9uIG9wZW4obXNPYmplY3RVUkwsIHN3ZklkKSB7XG4gIHZhciBtZWRpYVNvdXJjZSA9IHZpZGVvanMkMS5tZWRpYVNvdXJjZXNbbXNPYmplY3RVUkxdO1xuXG4gIGlmIChtZWRpYVNvdXJjZSkge1xuICAgIG1lZGlhU291cmNlLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ3NvdXJjZW9wZW4nLFxuICAgICAgc3dmSWQ6IHN3ZklkXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZWRpYSBTb3VyY2Ugbm90IGZvdW5kIChWaWRlby5qcyknKTtcbiAgfVxufTtcbi8qKlxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBuYXRpdmUgTWVkaWFTb3VyY2Ugb2JqZWN0IGV4aXN0cyBhbmQgc3VwcG9ydHNcbiAqIGFuIE1QNCBjb250YWluZXIgd2l0aCBib3RoIEguMjY0IHZpZGVvIGFuZCBBQUMtTEMgYXVkaW8uXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gaWYgIG5hdGl2ZSBtZWRpYSBzb3VyY2VzIGFyZSBzdXBwb3J0ZWRcbiAqL1xuXG5cbnZhciBzdXBwb3J0c05hdGl2ZU1lZGlhU291cmNlcyA9IGZ1bmN0aW9uIHN1cHBvcnRzTmF0aXZlTWVkaWFTb3VyY2VzKCkge1xuICByZXR1cm4gISF3aW5kb3ckMS5NZWRpYVNvdXJjZSAmJiAhIXdpbmRvdyQxLk1lZGlhU291cmNlLmlzVHlwZVN1cHBvcnRlZCAmJiB3aW5kb3ckMS5NZWRpYVNvdXJjZS5pc1R5cGVTdXBwb3J0ZWQoJ3ZpZGVvL21wNDtjb2RlY3M9XCJhdmMxLjRkNDAwZCxtcDRhLjQwLjJcIicpO1xufTtcbi8qKlxuICogQW4gZW11bGF0aW9uIG9mIHRoZSBNZWRpYVNvdXJjZSBBUEkgc28gdGhhdCB3ZSBjYW4gc3VwcG9ydFxuICogbmF0aXZlIGFuZCBub24tbmF0aXZlIGZ1bmN0aW9uYWxpdHkuIHJldHVybnMgYW4gaW5zdGFuY2Ugb2ZcbiAqIEh0bWxNZWRpYVNvdXJjZS5cbiAqXG4gKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFTb3VyY2UvTWVkaWFTb3VyY2VcbiAqL1xuXG5cbnZhciBNZWRpYVNvdXJjZSA9IGZ1bmN0aW9uIE1lZGlhU291cmNlKCkge1xuICB0aGlzLk1lZGlhU291cmNlID0ge1xuICAgIG9wZW46IG9wZW4sXG4gICAgc3VwcG9ydHNOYXRpdmVNZWRpYVNvdXJjZXM6IHN1cHBvcnRzTmF0aXZlTWVkaWFTb3VyY2VzXG4gIH07XG5cbiAgaWYgKHN1cHBvcnRzTmF0aXZlTWVkaWFTb3VyY2VzKCkpIHtcbiAgICByZXR1cm4gbmV3IEh0bWxNZWRpYVNvdXJjZSgpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIGNyZWF0ZSBhIHZpcnR1YWwgTWVkaWFTb3VyY2UgZm9yIHRoaXMgdmlkZW8nKTtcbn07XG5cbk1lZGlhU291cmNlLm9wZW4gPSBvcGVuO1xuTWVkaWFTb3VyY2Uuc3VwcG9ydHNOYXRpdmVNZWRpYVNvdXJjZXMgPSBzdXBwb3J0c05hdGl2ZU1lZGlhU291cmNlcztcbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFVSTCBmb3Igb3VyIE1TRSBvYmplY3RcbiAqIGltcGxlbWVudGF0aW9uLCB0aGlzIG9iamVjdCBpcyBleHBvc2VkIHVuZGVyIHZpZGVvanMuVVJMXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkxcbiAqL1xuXG52YXIgVVJMJDEgPSB7XG4gIC8qKlxuICAgKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgY3JlYXRlT2JqZWN0VVJMIGZvciBvdXIgb2JqZWN0cy5cbiAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgbmF0aXZlIG9yIGVtdWxhdGVkIG1lZGlhU291cmNlIHRvIGEgYmxvYlxuICAgKiB1cmwgc28gdGhhdCBpdCBjYW4gYmUgbG9hZGVkIGludG8gdmlkZW8uanNcbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcbiAgICogQHBhcmFtIHtNZWRpYVNvdXJjZX0gb2JqZWN0IHRoZSBvYmplY3QgdG8gY3JlYXRlIGEgYmxvYiB1cmwgdG9cbiAgICovXG4gIGNyZWF0ZU9iamVjdFVSTDogZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKG9iamVjdCkge1xuICAgIHZhciBvYmplY3RVcmxQcmVmaXggPSAnYmxvYjp2anMtbWVkaWEtc291cmNlLyc7XG4gICAgdmFyIHVybCA9IHZvaWQgMDsgLy8gdXNlIHRoZSBuYXRpdmUgTWVkaWFTb3VyY2UgdG8gZ2VuZXJhdGUgYW4gb2JqZWN0IFVSTFxuXG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEh0bWxNZWRpYVNvdXJjZSkge1xuICAgICAgdXJsID0gd2luZG93JDEuVVJMLmNyZWF0ZU9iamVjdFVSTChvYmplY3QubmF0aXZlTWVkaWFTb3VyY2VfKTtcbiAgICAgIG9iamVjdC51cmxfID0gdXJsO1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9IC8vIGlmIHRoZSBvYmplY3QgaXNuJ3QgYW4gZW11bGF0ZWQgTWVkaWFTb3VyY2UsIGRlbGVnYXRlIHRvIHRoZVxuICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICBpZiAoIShvYmplY3QgaW5zdGFuY2VvZiBIdG1sTWVkaWFTb3VyY2UpKSB7XG4gICAgICB1cmwgPSB3aW5kb3ckMS5VUkwuY3JlYXRlT2JqZWN0VVJMKG9iamVjdCk7XG4gICAgICBvYmplY3QudXJsXyA9IHVybDtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfSAvLyBidWlsZCBhIFVSTCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcCBiYWNrIHRvIHRoZSBlbXVsYXRlZFxuICAgIC8vIE1lZGlhU291cmNlXG5cblxuICAgIHVybCA9IG9iamVjdFVybFByZWZpeCArIHVybENvdW50O1xuICAgIHVybENvdW50Kys7IC8vIHNldHVwIHRoZSBtYXBwaW5nIGJhY2sgdG8gb2JqZWN0XG5cbiAgICB2aWRlb2pzJDEubWVkaWFTb3VyY2VzW3VybF0gPSBvYmplY3Q7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufTtcbnZpZGVvanMkMS5NZWRpYVNvdXJjZSA9IE1lZGlhU291cmNlO1xudmlkZW9qcyQxLlVSTCA9IFVSTCQxO1xudmFyIEV2ZW50VGFyZ2V0JDEkMSA9IHZpZGVvanMkMS5FdmVudFRhcmdldCxcbiAgICBtZXJnZU9wdGlvbnMkMiA9IHZpZGVvanMkMS5tZXJnZU9wdGlvbnM7XG4vKipcbiAqIFJldHVybnMgYSBuZXcgbWFzdGVyIG1hbmlmZXN0IHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIGFuIHVwZGF0ZWQgbWFzdGVyIG1hbmlmZXN0XG4gKiBpbnRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRNYXN0ZXJcbiAqICAgICAgICBUaGUgb2xkIHBhcnNlZCBtcGQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gbmV3TWFzdGVyXG4gKiAgICAgICAgVGhlIHVwZGF0ZWQgcGFyc2VkIG1wZCBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgQSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgb3JpZ2luYWwgbWFzdGVyIG1hbmlmZXN0IHdpdGggdGhlIHVwZGF0ZWQgbWVkaWFcbiAqICAgICAgICAgcGxheWxpc3RzIG1lcmdlZCBpblxuICovXG5cbnZhciB1cGRhdGVNYXN0ZXIkMSA9IGZ1bmN0aW9uIHVwZGF0ZU1hc3RlciQkMShvbGRNYXN0ZXIsIG5ld01hc3Rlcikge1xuICB2YXIgbm9DaGFuZ2VzID0gdm9pZCAwO1xuICB2YXIgdXBkYXRlID0gbWVyZ2VPcHRpb25zJDIob2xkTWFzdGVyLCB7XG4gICAgLy8gVGhlc2UgYXJlIHRvcCBsZXZlbCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVwZGF0ZWRcbiAgICBkdXJhdGlvbjogbmV3TWFzdGVyLmR1cmF0aW9uLFxuICAgIG1pbmltdW1VcGRhdGVQZXJpb2Q6IG5ld01hc3Rlci5taW5pbXVtVXBkYXRlUGVyaW9kXG4gIH0pOyAvLyBGaXJzdCB1cGRhdGUgdGhlIHBsYXlsaXN0cyBpbiBwbGF5bGlzdCBsaXN0XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdNYXN0ZXIucGxheWxpc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYXlsaXN0VXBkYXRlID0gdXBkYXRlTWFzdGVyKHVwZGF0ZSwgbmV3TWFzdGVyLnBsYXlsaXN0c1tpXSk7XG5cbiAgICBpZiAocGxheWxpc3RVcGRhdGUpIHtcbiAgICAgIHVwZGF0ZSA9IHBsYXlsaXN0VXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBub0NoYW5nZXMgPSB0cnVlO1xuICAgIH1cbiAgfSAvLyBUaGVuIHVwZGF0ZSBtZWRpYSBncm91cCBwbGF5bGlzdHNcblxuXG4gIGZvckVhY2hNZWRpYUdyb3VwKG5ld01hc3RlciwgZnVuY3Rpb24gKHByb3BlcnRpZXMsIHR5cGUsIGdyb3VwLCBsYWJlbCkge1xuICAgIGlmIChwcm9wZXJ0aWVzLnBsYXlsaXN0cyAmJiBwcm9wZXJ0aWVzLnBsYXlsaXN0cy5sZW5ndGgpIHtcbiAgICAgIHZhciB1cmkgPSBwcm9wZXJ0aWVzLnBsYXlsaXN0c1swXS51cmk7XG5cbiAgICAgIHZhciBfcGxheWxpc3RVcGRhdGUgPSB1cGRhdGVNYXN0ZXIodXBkYXRlLCBwcm9wZXJ0aWVzLnBsYXlsaXN0c1swXSk7XG5cbiAgICAgIGlmIChfcGxheWxpc3RVcGRhdGUpIHtcbiAgICAgICAgdXBkYXRlID0gX3BsYXlsaXN0VXBkYXRlOyAvLyB1cGRhdGUgdGhlIHBsYXlsaXN0IHJlZmVyZW5jZSB3aXRoaW4gbWVkaWEgZ3JvdXBzXG5cbiAgICAgICAgdXBkYXRlLm1lZGlhR3JvdXBzW3R5cGVdW2dyb3VwXVtsYWJlbF0ucGxheWxpc3RzWzBdID0gdXBkYXRlLnBsYXlsaXN0c1t1cmldO1xuICAgICAgICBub0NoYW5nZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChub0NoYW5nZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59O1xuXG52YXIgZ2VuZXJhdGVTaWR4S2V5ID0gZnVuY3Rpb24gZ2VuZXJhdGVTaWR4S2V5KHNpZHhJbmZvKSB7XG4gIC8vIHNob3VsZCBiZSBub24taW5jbHVzaXZlXG4gIHZhciBzaWR4Qnl0ZVJhbmdlRW5kID0gc2lkeEluZm8uYnl0ZXJhbmdlLm9mZnNldCArIHNpZHhJbmZvLmJ5dGVyYW5nZS5sZW5ndGggLSAxO1xuICByZXR1cm4gc2lkeEluZm8udXJpICsgJy0nICsgc2lkeEluZm8uYnl0ZXJhbmdlLm9mZnNldCArICctJyArIHNpZHhCeXRlUmFuZ2VFbmQ7XG59OyAvLyBTSURYIHNob3VsZCBiZSBlcXVpdmFsZW50IGlmIHRoZSBVUkkgYW5kIGJ5dGVyYW5nZXMgb2YgdGhlIFNJRFggbWF0Y2guXG4vLyBJZiB0aGUgU0lEWHMgaGF2ZSBtYXBzLCB0aGUgdHdvIG1hcHMgc2hvdWxkIG1hdGNoLFxuLy8gYm90aCBgYWAgYW5kIGBiYCBtaXNzaW5nIFNJRFhzIGlzIGNvbnNpZGVyZWQgbWF0Y2hpbmcuXG4vLyBJZiBgYWAgb3IgYGJgIGJ1dCBub3QgYm90aCBoYXZlIGEgbWFwLCB0aGV5IGFyZW4ndCBtYXRjaGluZy5cblxuXG52YXIgZXF1aXZhbGVudFNpZHggPSBmdW5jdGlvbiBlcXVpdmFsZW50U2lkeChhLCBiKSB7XG4gIHZhciBuZWl0aGVyTWFwID0gQm9vbGVhbighYS5tYXAgJiYgIWIubWFwKTtcbiAgdmFyIGVxdWl2YWxlbnRNYXAgPSBuZWl0aGVyTWFwIHx8IEJvb2xlYW4oYS5tYXAgJiYgYi5tYXAgJiYgYS5tYXAuYnl0ZXJhbmdlLm9mZnNldCA9PT0gYi5tYXAuYnl0ZXJhbmdlLm9mZnNldCAmJiBhLm1hcC5ieXRlcmFuZ2UubGVuZ3RoID09PSBiLm1hcC5ieXRlcmFuZ2UubGVuZ3RoKTtcbiAgcmV0dXJuIGVxdWl2YWxlbnRNYXAgJiYgYS51cmkgPT09IGIudXJpICYmIGEuYnl0ZXJhbmdlLm9mZnNldCA9PT0gYi5ieXRlcmFuZ2Uub2Zmc2V0ICYmIGEuYnl0ZXJhbmdlLmxlbmd0aCA9PT0gYi5ieXRlcmFuZ2UubGVuZ3RoO1xufTsgLy8gZXhwb3J0ZWQgZm9yIHRlc3RpbmdcblxuXG52YXIgY29tcGFyZVNpZHhFbnRyeSA9IGZ1bmN0aW9uIGNvbXBhcmVTaWR4RW50cnkocGxheWxpc3RzLCBvbGRTaWR4TWFwcGluZykge1xuICB2YXIgbmV3U2lkeE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciB1cmkgaW4gcGxheWxpc3RzKSB7XG4gICAgdmFyIHBsYXlsaXN0ID0gcGxheWxpc3RzW3VyaV07XG4gICAgdmFyIGN1cnJlbnRTaWR4SW5mbyA9IHBsYXlsaXN0LnNpZHg7XG5cbiAgICBpZiAoY3VycmVudFNpZHhJbmZvKSB7XG4gICAgICB2YXIga2V5ID0gZ2VuZXJhdGVTaWR4S2V5KGN1cnJlbnRTaWR4SW5mbyk7XG5cbiAgICAgIGlmICghb2xkU2lkeE1hcHBpbmdba2V5XSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIHNhdmVkU2lkeEluZm8gPSBvbGRTaWR4TWFwcGluZ1trZXldLnNpZHhJbmZvO1xuXG4gICAgICBpZiAoZXF1aXZhbGVudFNpZHgoc2F2ZWRTaWR4SW5mbywgY3VycmVudFNpZHhJbmZvKSkge1xuICAgICAgICBuZXdTaWR4TWFwcGluZ1trZXldID0gb2xkU2lkeE1hcHBpbmdba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U2lkeE1hcHBpbmc7XG59O1xuLyoqXG4gKiAgQSBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgb3V0IGNoYW5nZWQgaXRlbXMgYXMgdGhleSBuZWVkIHRvIGJlIHJlcXVlc3RlZCBzZXBhcmF0ZWx5LlxuICpcbiAqICBUaGUgbWV0aG9kIGlzIGV4cG9ydGVkIGZvciB0ZXN0aW5nXG4gKlxuICogIEBwYXJhbSB7T2JqZWN0fSBtYXN0ZXJYbWwgdGhlIG1wZCBYTUxcbiAqICBAcGFyYW0ge3N0cmluZ30gc3JjVXJsIHRoZSBtcGQgdXJsXG4gKiAgQHBhcmFtIHtEYXRlfSBjbGllbnRPZmZzZXQgYSB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiBzZXJ2ZXIgYW5kIGNsaWVudCAocGFzc2VkIHRocm91Z2ggYW5kIG5vdCB1c2VkKVxuICogIEBwYXJhbSB7T2JqZWN0fSBvbGRTaWR4TWFwcGluZyB0aGUgU0lEWCB0byBjb21wYXJlIGFnYWluc3RcbiAqL1xuXG5cbnZhciBmaWx0ZXJDaGFuZ2VkU2lkeE1hcHBpbmdzID0gZnVuY3Rpb24gZmlsdGVyQ2hhbmdlZFNpZHhNYXBwaW5ncyhtYXN0ZXJYbWwsIHNyY1VybCwgY2xpZW50T2Zmc2V0LCBvbGRTaWR4TWFwcGluZykge1xuICAvLyBEb24ndCBwYXNzIGN1cnJlbnQgc2lkeCBtYXBwaW5nXG4gIHZhciBtYXN0ZXIgPSBwYXJzZShtYXN0ZXJYbWwsIHtcbiAgICBtYW5pZmVzdFVyaTogc3JjVXJsLFxuICAgIGNsaWVudE9mZnNldDogY2xpZW50T2Zmc2V0XG4gIH0pO1xuICB2YXIgdmlkZW9TaWR4ID0gY29tcGFyZVNpZHhFbnRyeShtYXN0ZXIucGxheWxpc3RzLCBvbGRTaWR4TWFwcGluZyk7XG4gIHZhciBtZWRpYUdyb3VwU2lkeCA9IHZpZGVvU2lkeDtcbiAgZm9yRWFjaE1lZGlhR3JvdXAobWFzdGVyLCBmdW5jdGlvbiAocHJvcGVydGllcywgbWVkaWFUeXBlLCBncm91cEtleSwgbGFiZWxLZXkpIHtcbiAgICBpZiAocHJvcGVydGllcy5wbGF5bGlzdHMgJiYgcHJvcGVydGllcy5wbGF5bGlzdHMubGVuZ3RoKSB7XG4gICAgICB2YXIgcGxheWxpc3RzID0gcHJvcGVydGllcy5wbGF5bGlzdHM7XG4gICAgICBtZWRpYUdyb3VwU2lkeCA9IG1lcmdlT3B0aW9ucyQyKG1lZGlhR3JvdXBTaWR4LCBjb21wYXJlU2lkeEVudHJ5KHBsYXlsaXN0cywgb2xkU2lkeE1hcHBpbmcpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbWVkaWFHcm91cFNpZHg7XG59OyAvLyBleHBvcnRlZCBmb3IgdGVzdGluZ1xuXG5cbnZhciByZXF1ZXN0U2lkeF8gPSBmdW5jdGlvbiByZXF1ZXN0U2lkeF8oc2lkeFJhbmdlLCBwbGF5bGlzdCwgeGhyLCBvcHRpb25zLCBmaW5pc2hQcm9jZXNzaW5nRm4pIHtcbiAgdmFyIHNpZHhJbmZvID0ge1xuICAgIC8vIHJlc29sdmUgdGhlIHNlZ21lbnQgVVJMIHJlbGF0aXZlIHRvIHRoZSBwbGF5bGlzdFxuICAgIHVyaTogcmVzb2x2ZU1hbmlmZXN0UmVkaXJlY3Qob3B0aW9ucy5oYW5kbGVNYW5pZmVzdFJlZGlyZWN0cywgc2lkeFJhbmdlLnJlc29sdmVkVXJpKSxcbiAgICAvLyByZXNvbHZlZFVyaTogc2lkeFJhbmdlLnJlc29sdmVkVXJpLFxuICAgIGJ5dGVyYW5nZTogc2lkeFJhbmdlLmJ5dGVyYW5nZSxcbiAgICAvLyB0aGUgc2VnbWVudCdzIHBsYXlsaXN0XG4gICAgcGxheWxpc3Q6IHBsYXlsaXN0XG4gIH07XG4gIHZhciBzaWR4UmVxdWVzdE9wdGlvbnMgPSB2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHNpZHhJbmZvLCB7XG4gICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgIGhlYWRlcnM6IHNlZ21lbnRYaHJIZWFkZXJzKHNpZHhJbmZvKVxuICB9KTtcbiAgcmV0dXJuIHhocihzaWR4UmVxdWVzdE9wdGlvbnMsIGZpbmlzaFByb2Nlc3NpbmdGbik7XG59O1xuXG52YXIgRGFzaFBsYXlsaXN0TG9hZGVyID0gZnVuY3Rpb24gKF9FdmVudFRhcmdldCkge1xuICBpbmhlcml0cyhEYXNoUGxheWxpc3RMb2FkZXIsIF9FdmVudFRhcmdldCk7IC8vIERhc2hQbGF5bGlzdExvYWRlciBtdXN0IGFjY2VwdCBlaXRoZXIgYSBzcmMgdXJsIG9yIGEgcGxheWxpc3QgYmVjYXVzZSBzdWJzZXF1ZW50XG4gIC8vIHBsYXlsaXN0IGxvYWRlciBzZXR1cHMgZnJvbSBtZWRpYSBncm91cHMgd2lsbCBleHBlY3QgdG8gYmUgYWJsZSB0byBwYXNzIGEgcGxheWxpc3RcbiAgLy8gKHNpbmNlIHRoZXJlIGFyZW4ndCBleHRlcm5hbCBVUkxzIHRvIG1lZGlhIHBsYXlsaXN0cyB3aXRoIERBU0gpXG5cbiAgZnVuY3Rpb24gRGFzaFBsYXlsaXN0TG9hZGVyKHNyY1VybE9yUGxheWxpc3QsIGhscykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgbWFzdGVyUGxheWxpc3RMb2FkZXIgPSBhcmd1bWVudHNbM107XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgRGFzaFBsYXlsaXN0TG9hZGVyKTtcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKERhc2hQbGF5bGlzdExvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKERhc2hQbGF5bGlzdExvYWRlcikpLmNhbGwodGhpcykpO1xuXG4gICAgdmFyIF9vcHRpb25zJHdpdGhDcmVkZW50aSA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSBfb3B0aW9ucyR3aXRoQ3JlZGVudGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX29wdGlvbnMkd2l0aENyZWRlbnRpLFxuICAgICAgICBfb3B0aW9ucyRoYW5kbGVNYW5pZmUgPSBvcHRpb25zLmhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzLFxuICAgICAgICBoYW5kbGVNYW5pZmVzdFJlZGlyZWN0cyA9IF9vcHRpb25zJGhhbmRsZU1hbmlmZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfb3B0aW9ucyRoYW5kbGVNYW5pZmU7XG4gICAgX3RoaXMuaGxzXyA9IGhscztcbiAgICBfdGhpcy53aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHM7XG4gICAgX3RoaXMuaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHMgPSBoYW5kbGVNYW5pZmVzdFJlZGlyZWN0cztcblxuICAgIGlmICghc3JjVXJsT3JQbGF5bGlzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIG5vbi1lbXB0eSBwbGF5bGlzdCBVUkwgb3IgcGxheWxpc3QgaXMgcmVxdWlyZWQnKTtcbiAgICB9IC8vIGV2ZW50IG5hbWluZz9cblxuXG4gICAgX3RoaXMub24oJ21pbmltdW1VcGRhdGVQZXJpb2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5yZWZyZXNoWG1sXygpO1xuICAgIH0pOyAvLyBsaXZlIHBsYXlsaXN0IHN0YWxlbmVzcyB0aW1lb3V0XG5cblxuICAgIF90aGlzLm9uKCdtZWRpYXVwZGF0ZXRpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5yZWZyZXNoTWVkaWFfKF90aGlzLm1lZGlhKCkudXJpKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0gJ0hBVkVfTk9USElORyc7XG4gICAgX3RoaXMubG9hZGVkUGxheWxpc3RzXyA9IHt9OyAvLyBpbml0aWFsaXplIHRoZSBsb2FkZXIgc3RhdGVcbiAgICAvLyBUaGUgbWFzdGVyUGxheWxpc3RMb2FkZXIgd2lsbCBiZSBjcmVhdGVkIHdpdGggYSBzdHJpbmdcblxuICAgIGlmICh0eXBlb2Ygc3JjVXJsT3JQbGF5bGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIF90aGlzLnNyY1VybCA9IHNyY1VybE9yUGxheWxpc3Q7IC8vIFRPRE86IHJlc2V0IHNpZHhNYXBwaW5nIGJldHdlZW4gcGVyaW9kIGNoYW5nZXNcbiAgICAgIC8vIG9uY2UgbXVsdGktcGVyaW9kIGlzIHJlZmFjdG9yZWRcblxuICAgICAgX3RoaXMuc2lkeE1hcHBpbmdfID0ge307XG4gICAgICByZXR1cm4gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyk7XG4gICAgfVxuXG4gICAgX3RoaXMuc2V0dXBDaGlsZExvYWRlcihtYXN0ZXJQbGF5bGlzdExvYWRlciwgc3JjVXJsT3JQbGF5bGlzdCk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBjcmVhdGVDbGFzcyhEYXNoUGxheWxpc3RMb2FkZXIsIFt7XG4gICAga2V5OiAnc2V0dXBDaGlsZExvYWRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwQ2hpbGRMb2FkZXIobWFzdGVyUGxheWxpc3RMb2FkZXIsIHBsYXlsaXN0KSB7XG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXyA9IG1hc3RlclBsYXlsaXN0TG9hZGVyO1xuICAgICAgdGhpcy5jaGlsZFBsYXlsaXN0XyA9IHBsYXlsaXN0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rpc3Bvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgdGhpcy5zdG9wUmVxdWVzdCgpO1xuICAgICAgdGhpcy5sb2FkZWRQbGF5bGlzdHNfID0ge307XG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5taW5pbXVtVXBkYXRlUGVyaW9kVGltZW91dF8pO1xuICAgICAgd2luZG93JDEuY2xlYXJUaW1lb3V0KHRoaXMubWVkaWFSZXF1ZXN0Xyk7XG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhc1BlbmRpbmdSZXF1ZXN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzUGVuZGluZ1JlcXVlc3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0IHx8IHRoaXMubWVkaWFSZXF1ZXN0XztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzdG9wUmVxdWVzdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BSZXF1ZXN0KCkge1xuICAgICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgICB2YXIgb2xkUmVxdWVzdCA9IHRoaXMucmVxdWVzdDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgb2xkUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICBvbGRSZXF1ZXN0LmFib3J0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2lkeFJlcXVlc3RGaW5pc2hlZF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaWR4UmVxdWVzdEZpbmlzaGVkXyhwbGF5bGlzdCwgbWFzdGVyLCBzdGFydGluZ1N0YXRlLCBkb25lRm4pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgcmVxdWVzdCkge1xuICAgICAgICAvLyBkaXNwb3NlZFxuICAgICAgICBpZiAoIV90aGlzMi5yZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIHBlbmRpbmcgcmVxdWVzdCBpcyBjbGVhcmVkXG5cblxuICAgICAgICBfdGhpczIucmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIF90aGlzMi5lcnJvciA9IHtcbiAgICAgICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiAnREFTSCBwbGF5bGlzdCByZXF1ZXN0IGVycm9yIGF0IFVSTDogJyArIHBsYXlsaXN0LnVyaSxcbiAgICAgICAgICAgIHJlc3BvbnNlOiByZXF1ZXN0LnJlc3BvbnNlLFxuICAgICAgICAgICAgLy8gTUVESUFfRVJSX05FVFdPUktcbiAgICAgICAgICAgIGNvZGU6IDJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHN0YXJ0aW5nU3RhdGUpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZSA9IHN0YXJ0aW5nU3RhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ2Vycm9yJyk7XG5cbiAgICAgICAgICByZXR1cm4gZG9uZUZuKG1hc3RlciwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgdmFyIHNpZHggPSBtcDRJbnNwZWN0b3IucGFyc2VTaWR4KGJ5dGVzLnN1YmFycmF5KDgpKTtcbiAgICAgICAgcmV0dXJuIGRvbmVGbihtYXN0ZXIsIHNpZHgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdtZWRpYScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1lZGlhKHBsYXlsaXN0KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpczsgLy8gZ2V0dGVyXG5cblxuICAgICAgaWYgKCFwbGF5bGlzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZWRpYV87XG4gICAgICB9IC8vIHNldHRlclxuXG5cbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnSEFWRV9OT1RISU5HJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2l0Y2ggbWVkaWEgcGxheWxpc3QgZnJvbSAnICsgdGhpcy5zdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydGluZ1N0YXRlID0gdGhpcy5zdGF0ZTsgLy8gZmluZCB0aGUgcGxheWxpc3Qgb2JqZWN0IGlmIHRoZSB0YXJnZXQgcGxheWxpc3QgaGFzIGJlZW4gc3BlY2lmaWVkIGJ5IFVSSVxuXG4gICAgICBpZiAodHlwZW9mIHBsYXlsaXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIXRoaXMubWFzdGVyLnBsYXlsaXN0c1twbGF5bGlzdF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcGxheWxpc3QgVVJJOiAnICsgcGxheWxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGxheWxpc3QgPSB0aGlzLm1hc3Rlci5wbGF5bGlzdHNbcGxheWxpc3RdO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWVkaWFDaGFuZ2UgPSAhdGhpcy5tZWRpYV8gfHwgcGxheWxpc3QudXJpICE9PSB0aGlzLm1lZGlhXy51cmk7IC8vIHN3aXRjaCB0byBwcmV2aW91c2x5IGxvYWRlZCBwbGF5bGlzdHMgaW1tZWRpYXRlbHlcblxuICAgICAgaWYgKG1lZGlhQ2hhbmdlICYmIHRoaXMubG9hZGVkUGxheWxpc3RzX1twbGF5bGlzdC51cmldICYmIHRoaXMubG9hZGVkUGxheWxpc3RzX1twbGF5bGlzdC51cmldLmVuZExpc3QpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdIQVZFX01FVEFEQVRBJztcbiAgICAgICAgdGhpcy5tZWRpYV8gPSBwbGF5bGlzdDsgLy8gdHJpZ2dlciBtZWRpYSBjaGFuZ2UgaWYgdGhlIGFjdGl2ZSBtZWRpYSBoYXMgYmVlbiB1cGRhdGVkXG5cbiAgICAgICAgaWYgKG1lZGlhQ2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdtZWRpYWNoYW5naW5nJyk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdtZWRpYWNoYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBzd2l0Y2hpbmcgdG8gdGhlIGFjdGl2ZSBwbGF5bGlzdCBpcyBhIG5vLW9wXG5cblxuICAgICAgaWYgKCFtZWRpYUNoYW5nZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHN3aXRjaGluZyBmcm9tIGFuIGFscmVhZHkgbG9hZGVkIHBsYXlsaXN0XG5cblxuICAgICAgaWYgKHRoaXMubWVkaWFfKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignbWVkaWFjaGFuZ2luZycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBsYXlsaXN0LnNpZHgpIHtcbiAgICAgICAgLy8gQ29udGludWUgYXN5bmNocm9ub3VzbHkgaWYgdGhlcmUgaXMgbm8gc2lkeFxuICAgICAgICAvLyB3YWl0IG9uZSB0aWNrIHRvIGFsbG93IGhhdmVNYXN0ZXIgdG8gcnVuIGZpcnN0IG9uIGEgY2hpbGQgbG9hZGVyXG4gICAgICAgIHRoaXMubWVkaWFSZXF1ZXN0XyA9IHdpbmRvdyQxLnNldFRpbWVvdXQodGhpcy5oYXZlTWV0YWRhdGEuYmluZCh0aGlzLCB7XG4gICAgICAgICAgc3RhcnRpbmdTdGF0ZTogc3RhcnRpbmdTdGF0ZSxcbiAgICAgICAgICBwbGF5bGlzdDogcGxheWxpc3RcbiAgICAgICAgfSksIDApOyAvLyBleGl0IGVhcmx5IGFuZCBkb24ndCBkbyBzaWR4IHdvcmtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHdlIGhhdmUgc2lkeCBtYXBwaW5nc1xuXG5cbiAgICAgIHZhciBvbGRNYXN0ZXIgPSB2b2lkIDA7XG4gICAgICB2YXIgc2lkeE1hcHBpbmcgPSB2b2lkIDA7IC8vIHNpZHhNYXBwaW5nIGlzIHVzZWQgd2hlbiBwYXJzaW5nIHRoZSBtYXN0ZXJYbWwsIHNvIHN0b3JlXG4gICAgICAvLyBpdCBvbiB0aGUgbWFzdGVyUGxheWxpc3RMb2FkZXJcblxuICAgICAgaWYgKHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfKSB7XG4gICAgICAgIG9sZE1hc3RlciA9IHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3RlcjtcbiAgICAgICAgc2lkeE1hcHBpbmcgPSB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5zaWR4TWFwcGluZ187XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRNYXN0ZXIgPSB0aGlzLm1hc3RlcjtcbiAgICAgICAgc2lkeE1hcHBpbmcgPSB0aGlzLnNpZHhNYXBwaW5nXztcbiAgICAgIH1cblxuICAgICAgdmFyIHNpZHhLZXkgPSBnZW5lcmF0ZVNpZHhLZXkocGxheWxpc3Quc2lkeCk7XG4gICAgICBzaWR4TWFwcGluZ1tzaWR4S2V5XSA9IHtcbiAgICAgICAgc2lkeEluZm86IHBsYXlsaXN0LnNpZHhcbiAgICAgIH07XG4gICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0U2lkeF8ocGxheWxpc3Quc2lkeCwgcGxheWxpc3QsIHRoaXMuaGxzXy54aHIsIHtcbiAgICAgICAgaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHM6IHRoaXMuaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHNcbiAgICAgIH0sIHRoaXMuc2lkeFJlcXVlc3RGaW5pc2hlZF8ocGxheWxpc3QsIG9sZE1hc3Rlciwgc3RhcnRpbmdTdGF0ZSwgZnVuY3Rpb24gKG5ld01hc3Rlciwgc2lkeCkge1xuICAgICAgICBpZiAoIW5ld01hc3RlciB8fCAhc2lkeCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHJlcXVlc3Qgc2lkeCcpO1xuICAgICAgICB9IC8vIHVwZGF0ZSBsb2FkZXIncyBzaWR4TWFwcGluZyB3aXRoIHBhcnNlZCBzaWR4IGJveFxuXG5cbiAgICAgICAgc2lkeE1hcHBpbmdbc2lkeEtleV0uc2lkeCA9IHNpZHg7IC8vIGV2ZXJ5dGhpbmcgaXMgcmVhZHkganVzdCBjb250aW51ZSB0byBoYXZlTWV0YWRhdGFcblxuICAgICAgICBfdGhpczMuaGF2ZU1ldGFkYXRhKHtcbiAgICAgICAgICBzdGFydGluZ1N0YXRlOiBzdGFydGluZ1N0YXRlLFxuICAgICAgICAgIHBsYXlsaXN0OiBuZXdNYXN0ZXIucGxheWxpc3RzW3BsYXlsaXN0LnVyaV1cbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGF2ZU1ldGFkYXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGF2ZU1ldGFkYXRhKF9yZWYpIHtcbiAgICAgIHZhciBzdGFydGluZ1N0YXRlID0gX3JlZi5zdGFydGluZ1N0YXRlLFxuICAgICAgICAgIHBsYXlsaXN0ID0gX3JlZi5wbGF5bGlzdDtcbiAgICAgIHRoaXMuc3RhdGUgPSAnSEFWRV9NRVRBREFUQSc7XG4gICAgICB0aGlzLmxvYWRlZFBsYXlsaXN0c19bcGxheWxpc3QudXJpXSA9IHBsYXlsaXN0O1xuICAgICAgdGhpcy5tZWRpYVJlcXVlc3RfID0gbnVsbDsgLy8gVGhpcyB3aWxsIHRyaWdnZXIgbG9hZGVkcGxheWxpc3RcblxuICAgICAgdGhpcy5yZWZyZXNoTWVkaWFfKHBsYXlsaXN0LnVyaSk7IC8vIGZpcmUgbG9hZGVkbWV0YWRhdGEgdGhlIGZpcnN0IHRpbWUgYSBtZWRpYSBwbGF5bGlzdCBpcyBsb2FkZWRcbiAgICAgIC8vIHRvIHJlc29sdmUgc2V0dXAgb2YgbWVkaWEgZ3JvdXBzXG5cbiAgICAgIGlmIChzdGFydGluZ1N0YXRlID09PSAnSEFWRV9NQVNURVInKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignbG9hZGVkbWV0YWRhdGEnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyaWdnZXIgbWVkaWEgY2hhbmdlIGlmIHRoZSBhY3RpdmUgbWVkaWEgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgICB0aGlzLnRyaWdnZXIoJ21lZGlhY2hhbmdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncGF1c2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICAgIHRoaXMuc3RvcFJlcXVlc3QoKTtcbiAgICAgIHdpbmRvdyQxLmNsZWFyVGltZW91dCh0aGlzLm1lZGlhVXBkYXRlVGltZW91dCk7XG4gICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5taW5pbXVtVXBkYXRlUGVyaW9kVGltZW91dF8pO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ0hBVkVfTk9USElORycpIHtcbiAgICAgICAgLy8gSWYgd2UgcGF1c2UgdGhlIGxvYWRlciBiZWZvcmUgYW55IGRhdGEgaGFzIGJlZW4gcmV0cmlldmVkLCBpdHMgYXMgaWYgd2UgbmV2ZXJcbiAgICAgICAgLy8gc3RhcnRlZCwgc28gcmVzZXQgdG8gYW4gdW5zdGFydGVkIHN0YXRlLlxuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdsb2FkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZChpc0ZpbmFsUmVuZGl0aW9uKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgd2luZG93JDEuY2xlYXJUaW1lb3V0KHRoaXMubWVkaWFVcGRhdGVUaW1lb3V0KTtcbiAgICAgIHdpbmRvdyQxLmNsZWFyVGltZW91dCh0aGlzLm1pbmltdW1VcGRhdGVQZXJpb2RUaW1lb3V0Xyk7XG4gICAgICB2YXIgbWVkaWEgPSB0aGlzLm1lZGlhKCk7XG5cbiAgICAgIGlmIChpc0ZpbmFsUmVuZGl0aW9uKSB7XG4gICAgICAgIHZhciBkZWxheSA9IG1lZGlhID8gbWVkaWEudGFyZ2V0RHVyYXRpb24gLyAyICogMTAwMCA6IDUgKiAxMDAwO1xuICAgICAgICB0aGlzLm1lZGlhVXBkYXRlVGltZW91dCA9IHdpbmRvdyQxLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQubG9hZCgpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gYmVjYXVzZSB0aGUgcGxheWxpc3RzIGFyZSBpbnRlcm5hbCB0byB0aGUgbWFuaWZlc3QsIGxvYWQgc2hvdWxkIGVpdGhlciBsb2FkIHRoZVxuICAgICAgLy8gbWFpbiBtYW5pZmVzdCwgb3IgZG8gbm90aGluZyBidXQgdHJpZ2dlciBhbiBldmVudFxuXG5cbiAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyaWdnZXIoJ2xvYWRlZHBsYXlsaXN0Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgbWFzdGVyIHhtbCBzdHJpbmcgYW5kIHVwZGF0ZXMgcGxheWxpc3QgdXJpIHJlZmVyZW5jZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKiAgICAgICAgIFRoZSBwYXJzZWQgbXBkIG1hbmlmZXN0IG9iamVjdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwYXJzZU1hc3RlclhtbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlTWFzdGVyWG1sKCkge1xuICAgICAgdmFyIG1hc3RlciA9IHBhcnNlKHRoaXMubWFzdGVyWG1sXywge1xuICAgICAgICBtYW5pZmVzdFVyaTogdGhpcy5zcmNVcmwsXG4gICAgICAgIGNsaWVudE9mZnNldDogdGhpcy5jbGllbnRPZmZzZXRfLFxuICAgICAgICBzaWR4TWFwcGluZzogdGhpcy5zaWR4TWFwcGluZ19cbiAgICAgIH0pO1xuICAgICAgbWFzdGVyLnVyaSA9IHRoaXMuc3JjVXJsOyAvLyBTZXQgdXAgcGhvbnkgVVJJcyBmb3IgdGhlIHBsYXlsaXN0cyBzaW5jZSB3ZSB3b24ndCBoYXZlIGV4dGVybmFsIFVSSXMgZm9yIERBU0hcbiAgICAgIC8vIGJ1dCByZWZlcmVuY2UgcGxheWxpc3RzIGJ5IHRoZWlyIFVSSSB0aHJvdWdob3V0IHRoZSBwcm9qZWN0XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgY3JlYXRlIHRoZSBkdW1teSB1cmlzIGluIG1wZC1wYXJzZXIgYXMgd2VsbCAobGVhbmluZyB0b3dhcmRzIHllcykuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFzdGVyLnBsYXlsaXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGhvbnlVcmkgPSAncGxhY2Vob2xkZXItdXJpLScgKyBpO1xuICAgICAgICBtYXN0ZXIucGxheWxpc3RzW2ldLnVyaSA9IHBob255VXJpOyAvLyBzZXQgdXAgYnkgVVJJIHJlZmVyZW5jZXNcblxuICAgICAgICBtYXN0ZXIucGxheWxpc3RzW3Bob255VXJpXSA9IG1hc3Rlci5wbGF5bGlzdHNbaV07XG4gICAgICB9IC8vIHNldCB1cCBwaG9ueSBVUklzIGZvciB0aGUgbWVkaWEgZ3JvdXAgcGxheWxpc3RzIHNpbmNlIHdlIHdvbid0IGhhdmUgZXh0ZXJuYWxcbiAgICAgIC8vIFVSSXMgZm9yIERBU0ggYnV0IHJlZmVyZW5jZSBwbGF5bGlzdHMgYnkgdGhlaXIgVVJJIHRocm91Z2hvdXQgdGhlIHByb2plY3RcblxuXG4gICAgICBmb3JFYWNoTWVkaWFHcm91cChtYXN0ZXIsIGZ1bmN0aW9uIChwcm9wZXJ0aWVzLCBtZWRpYVR5cGUsIGdyb3VwS2V5LCBsYWJlbEtleSkge1xuICAgICAgICBpZiAocHJvcGVydGllcy5wbGF5bGlzdHMgJiYgcHJvcGVydGllcy5wbGF5bGlzdHMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIF9waG9ueVVyaSA9ICdwbGFjZWhvbGRlci11cmktJyArIG1lZGlhVHlwZSArICctJyArIGdyb3VwS2V5ICsgJy0nICsgbGFiZWxLZXk7XG5cbiAgICAgICAgICBwcm9wZXJ0aWVzLnBsYXlsaXN0c1swXS51cmkgPSBfcGhvbnlVcmk7IC8vIHNldHVwIFVSSSByZWZlcmVuY2VzXG5cbiAgICAgICAgICBtYXN0ZXIucGxheWxpc3RzW19waG9ueVVyaV0gPSBwcm9wZXJ0aWVzLnBsYXlsaXN0c1swXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXR1cE1lZGlhUGxheWxpc3RzKG1hc3Rlcik7XG4gICAgICByZXNvbHZlTWVkaWFHcm91cFVyaXMobWFzdGVyKTtcbiAgICAgIHJldHVybiBtYXN0ZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RhcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlOyAvLyBXZSBkb24ndCBuZWVkIHRvIHJlcXVlc3QgdGhlIG1hc3RlciBtYW5pZmVzdCBhZ2FpblxuICAgICAgLy8gQ2FsbCB0aGlzIGFzeW5jaHJvbm91c2x5IHRvIG1hdGNoIHRoZSB4aHIgcmVxdWVzdCBiZWhhdmlvciBiZWxvd1xuXG4gICAgICBpZiAodGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8pIHtcbiAgICAgICAgdGhpcy5tZWRpYVJlcXVlc3RfID0gd2luZG93JDEuc2V0VGltZW91dCh0aGlzLmhhdmVNYXN0ZXJfLmJpbmQodGhpcyksIDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHJlcXVlc3QgdGhlIHNwZWNpZmllZCBVUkxcblxuXG4gICAgICB0aGlzLnJlcXVlc3QgPSB0aGlzLmhsc18ueGhyKHtcbiAgICAgICAgdXJpOiB0aGlzLnNyY1VybCxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc1xuICAgICAgfSwgZnVuY3Rpb24gKGVycm9yLCByZXEpIHtcbiAgICAgICAgLy8gZGlzcG9zZWRcbiAgICAgICAgaWYgKCFfdGhpczUucmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBjbGVhciB0aGUgbG9hZGVyJ3MgcmVxdWVzdCByZWZlcmVuY2VcblxuXG4gICAgICAgIF90aGlzNS5yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBfdGhpczUuZXJyb3IgPSB7XG4gICAgICAgICAgICBzdGF0dXM6IHJlcS5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiAnREFTSCBwbGF5bGlzdCByZXF1ZXN0IGVycm9yIGF0IFVSTDogJyArIF90aGlzNS5zcmNVcmwsXG4gICAgICAgICAgICByZXNwb25zZVRleHQ6IHJlcS5yZXNwb25zZVRleHQsXG4gICAgICAgICAgICAvLyBNRURJQV9FUlJfTkVUV09SS1xuICAgICAgICAgICAgY29kZTogMlxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoX3RoaXM1LnN0YXRlID09PSAnSEFWRV9OT1RISU5HJykge1xuICAgICAgICAgICAgX3RoaXM1LnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXM1LnRyaWdnZXIoJ2Vycm9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczUubWFzdGVyWG1sXyA9IHJlcS5yZXNwb25zZVRleHQ7XG5cbiAgICAgICAgaWYgKHJlcS5yZXNwb25zZUhlYWRlcnMgJiYgcmVxLnJlc3BvbnNlSGVhZGVycy5kYXRlKSB7XG4gICAgICAgICAgX3RoaXM1Lm1hc3RlckxvYWRlZF8gPSBEYXRlLnBhcnNlKHJlcS5yZXNwb25zZUhlYWRlcnMuZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM1Lm1hc3RlckxvYWRlZF8gPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM1LnNyY1VybCA9IHJlc29sdmVNYW5pZmVzdFJlZGlyZWN0KF90aGlzNS5oYW5kbGVNYW5pZmVzdFJlZGlyZWN0cywgX3RoaXM1LnNyY1VybCwgcmVxKTtcblxuICAgICAgICBfdGhpczUuc3luY0NsaWVudFNlcnZlckNsb2NrXyhfdGhpczUub25DbGllbnRTZXJ2ZXJDbG9ja1N5bmNfLmJpbmQoX3RoaXM1KSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSBtYXN0ZXIgeG1sIGZvciBVVENUaW1pbmcgbm9kZSB0byBzeW5jIHRoZSBjbGllbnQgY2xvY2sgdG8gdGhlIHNlcnZlclxuICAgICAqIGNsb2NrLiBJZiB0aGUgVVRDVGltaW5nIG5vZGUgcmVxdWlyZXMgYSBIRUFEIG9yIEdFVCByZXF1ZXN0LCB0aGF0IHJlcXVlc3QgaXMgbWFkZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGRvbmVcbiAgICAgKiAgICAgICAgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGNsb2NrIHN5bmMgaGFzIGNvbXBsZXRlZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzeW5jQ2xpZW50U2VydmVyQ2xvY2tfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3luY0NsaWVudFNlcnZlckNsb2NrXyhkb25lKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIHV0Y1RpbWluZyA9IHBhcnNlVVRDVGltaW5nKHRoaXMubWFzdGVyWG1sXyk7IC8vIE5vIFVUQ1RpbWluZyBlbGVtZW50IGZvdW5kIGluIHRoZSBtcGQuIFVzZSBEYXRlIGhlYWRlciBmcm9tIG1wZCByZXF1ZXN0IGFzIHRoZVxuICAgICAgLy8gc2VydmVyIGNsb2NrXG5cbiAgICAgIGlmICh1dGNUaW1pbmcgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jbGllbnRPZmZzZXRfID0gdGhpcy5tYXN0ZXJMb2FkZWRfIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0Y1RpbWluZy5tZXRob2QgPT09ICdESVJFQ1QnKSB7XG4gICAgICAgIHRoaXMuY2xpZW50T2Zmc2V0XyA9IHV0Y1RpbWluZy52YWx1ZSAtIERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdCA9IHRoaXMuaGxzXy54aHIoe1xuICAgICAgICB1cmk6IHJlc29sdmVVcmwodGhpcy5zcmNVcmwsIHV0Y1RpbWluZy52YWx1ZSksXG4gICAgICAgIG1ldGhvZDogdXRjVGltaW5nLm1ldGhvZCxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc1xuICAgICAgfSwgZnVuY3Rpb24gKGVycm9yLCByZXEpIHtcbiAgICAgICAgLy8gZGlzcG9zZWRcbiAgICAgICAgaWYgKCFfdGhpczYucmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIC8vIHN5bmMgcmVxdWVzdCBmYWlsZWQsIGZhbGwgYmFjayB0byB1c2luZyBkYXRlIGhlYWRlciBmcm9tIG1wZFxuICAgICAgICAgIC8vIFRPRE86IGxvZyB3YXJuaW5nXG4gICAgICAgICAgX3RoaXM2LmNsaWVudE9mZnNldF8gPSBfdGhpczYubWFzdGVyTG9hZGVkXyAtIERhdGUubm93KCk7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXJ2ZXJUaW1lID0gdm9pZCAwO1xuXG4gICAgICAgIGlmICh1dGNUaW1pbmcubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgICBpZiAoIXJlcS5yZXNwb25zZUhlYWRlcnMgfHwgIXJlcS5yZXNwb25zZUhlYWRlcnMuZGF0ZSkge1xuICAgICAgICAgICAgLy8gZXhwZWN0ZWQgZGF0ZSBoZWFkZXIgbm90IHByZXNldCwgZmFsbCBiYWNrIHRvIHVzaW5nIGRhdGUgaGVhZGVyIGZyb20gbXBkXG4gICAgICAgICAgICAvLyBUT0RPOiBsb2cgd2FybmluZ1xuICAgICAgICAgICAgc2VydmVyVGltZSA9IF90aGlzNi5tYXN0ZXJMb2FkZWRfO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJUaW1lID0gRGF0ZS5wYXJzZShyZXEucmVzcG9uc2VIZWFkZXJzLmRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXJ2ZXJUaW1lID0gRGF0ZS5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzNi5jbGllbnRPZmZzZXRfID0gc2VydmVyVGltZSAtIERhdGUubm93KCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhdmVNYXN0ZXJfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGF2ZU1hc3Rlcl8oKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ0hBVkVfTUFTVEVSJzsgLy8gY2xlYXIgbWVkaWEgcmVxdWVzdFxuXG4gICAgICB0aGlzLm1lZGlhUmVxdWVzdF8gPSBudWxsO1xuXG4gICAgICBpZiAoIXRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfKSB7XG4gICAgICAgIHRoaXMubWFzdGVyID0gdGhpcy5wYXJzZU1hc3RlclhtbCgpOyAvLyBXZSBoYXZlIHRoZSBtYXN0ZXIgcGxheWxpc3QgYXQgdGhpcyBwb2ludCwgc29cbiAgICAgICAgLy8gdHJpZ2dlciB0aGlzIHRvIGFsbG93IE1hc3RlclBsYXlsaXN0Q29udHJvbGxlclxuICAgICAgICAvLyB0byBtYWtlIGFuIGluaXRpYWwgcGxheWxpc3Qgc2VsZWN0aW9uXG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdsb2FkZWRwbGF5bGlzdCcpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5tZWRpYV8pIHtcbiAgICAgICAgLy8gbm8gbWVkaWEgcGxheWxpc3Qgd2FzIHNwZWNpZmljYWxseSBzZWxlY3RlZCBzbyBzZWxlY3RcbiAgICAgICAgLy8gdGhlIG9uZSB0aGUgY2hpbGQgcGxheWxpc3QgbG9hZGVyIHdhcyBjcmVhdGVkIHdpdGhcbiAgICAgICAgdGhpcy5tZWRpYSh0aGlzLmNoaWxkUGxheWxpc3RfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlciBmb3IgYWZ0ZXIgY2xpZW50L3NlcnZlciBjbG9jayBzeW5jaHJvbml6YXRpb24gaGFzIGhhcHBlbmVkLiBTZXRzIHVwXG4gICAgICogeG1sIHJlZnJlc2ggdGltZXIgaWYgc3BlY2lmaWNlZCBieSB0aGUgbWFuaWZlc3QuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uQ2xpZW50U2VydmVyQ2xvY2tTeW5jXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2xpZW50U2VydmVyQ2xvY2tTeW5jXygpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB0aGlzLmhhdmVNYXN0ZXJfKCk7XG5cbiAgICAgIGlmICghdGhpcy5oYXNQZW5kaW5nUmVxdWVzdCgpICYmICF0aGlzLm1lZGlhXykge1xuICAgICAgICB0aGlzLm1lZGlhKHRoaXMubWFzdGVyLnBsYXlsaXN0c1swXSk7XG4gICAgICB9IC8vIFRPRE86IG1pbmltdW1VcGRhdGVQZXJpb2QgY2FuIGhhdmUgYSB2YWx1ZSBvZiAwLiBDdXJyZW50bHkgdGhlIG1hbmlmZXN0IHdpbGwgbm90XG4gICAgICAvLyBiZSByZWZyZXNoZWQgd2hlbiB0aGlzIGlzIHRoZSBjYXNlLiBUaGUgaW50ZXItb3AgZ3VpZGUgc2F5cyB0aGF0IHdoZW4gdGhlXG4gICAgICAvLyBtaW5pbXVtVXBkYXRlUGVyaW9kIGlzIDAsIHRoZSBtYW5pZmVzdCBzaG91bGQgb3V0bGluZSBhbGwgY3VycmVudGx5IGF2YWlsYWJsZVxuICAgICAgLy8gc2VnbWVudHMsIGJ1dCBmdXR1cmUgc2VnbWVudHMgbWF5IHJlcXVpcmUgYW4gdXBkYXRlLiBJIHRoaW5rIGEgZ29vZCBzb2x1dGlvblxuICAgICAgLy8gd291bGQgYmUgdG8gdXBkYXRlIHRoZSBtYW5pZmVzdCBhdCB0aGUgc2FtZSByYXRlIHRoYXQgdGhlIG1lZGlhIHBsYXlsaXN0c1xuICAgICAgLy8gYXJlIFwicmVmcmVzaGVkXCIsIGkuZS4gZXZlcnkgdGFyZ2V0RHVyYXRpb24uXG5cblxuICAgICAgaWYgKHRoaXMubWFzdGVyICYmIHRoaXMubWFzdGVyLm1pbmltdW1VcGRhdGVQZXJpb2QpIHtcbiAgICAgICAgdGhpcy5taW5pbXVtVXBkYXRlUGVyaW9kVGltZW91dF8gPSB3aW5kb3ckMS5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczcudHJpZ2dlcignbWluaW11bVVwZGF0ZVBlcmlvZCcpO1xuICAgICAgICB9LCB0aGlzLm1hc3Rlci5taW5pbXVtVXBkYXRlUGVyaW9kKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBtYXN0ZXIgeG1sIGFuZCB1cGRhdGVzIHRoZSBwYXJzZWQgbWFzdGVyIG1hbmlmZXN0XG4gICAgICogVE9ETzogRG9lcyB0aGUgY2xpZW50IG9mZnNldCBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCB3aGVuIHRoZSB4bWwgaXMgcmVmcmVzaGVkP1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZWZyZXNoWG1sXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlZnJlc2hYbWxfKCkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7IC8vIFRoZSBzcmNVcmwgaGVyZSAqbWF5KiBuZWVkIHRvIHBhc3MgdGhyb3VnaCBoYW5kbGVNYW5pZmVzdHNSZWRpcmVjdHMgd2hlblxuICAgICAgLy8gc2lkeCBpcyBpbXBsZW1lbnRlZFxuXG5cbiAgICAgIHRoaXMucmVxdWVzdCA9IHRoaXMuaGxzXy54aHIoe1xuICAgICAgICB1cmk6IHRoaXMuc3JjVXJsLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyb3IsIHJlcSkge1xuICAgICAgICAvLyBkaXNwb3NlZFxuICAgICAgICBpZiAoIV90aGlzOC5yZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGNsZWFyIHRoZSBsb2FkZXIncyByZXF1ZXN0IHJlZmVyZW5jZVxuXG5cbiAgICAgICAgX3RoaXM4LnJlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIF90aGlzOC5lcnJvciA9IHtcbiAgICAgICAgICAgIHN0YXR1czogcmVxLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdEQVNIIHBsYXlsaXN0IHJlcXVlc3QgZXJyb3IgYXQgVVJMOiAnICsgX3RoaXM4LnNyY1VybCxcbiAgICAgICAgICAgIHJlc3BvbnNlVGV4dDogcmVxLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgICAgIC8vIE1FRElBX0VSUl9ORVRXT1JLXG4gICAgICAgICAgICBjb2RlOiAyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChfdGhpczguc3RhdGUgPT09ICdIQVZFX05PVEhJTkcnKSB7XG4gICAgICAgICAgICBfdGhpczguc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpczgudHJpZ2dlcignZXJyb3InKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzOC5tYXN0ZXJYbWxfID0gcmVxLnJlc3BvbnNlVGV4dDsgLy8gVGhpcyB3aWxsIGZpbHRlciBvdXQgdXBkYXRlZCBzaWR4IGluZm8gZnJvbSB0aGUgbWFwcGluZ1xuXG4gICAgICAgIF90aGlzOC5zaWR4TWFwcGluZ18gPSBmaWx0ZXJDaGFuZ2VkU2lkeE1hcHBpbmdzKF90aGlzOC5tYXN0ZXJYbWxfLCBfdGhpczguc3JjVXJsLCBfdGhpczguY2xpZW50T2Zmc2V0XywgX3RoaXM4LnNpZHhNYXBwaW5nXyk7XG5cbiAgICAgICAgdmFyIG1hc3RlciA9IF90aGlzOC5wYXJzZU1hc3RlclhtbCgpO1xuXG4gICAgICAgIHZhciB1cGRhdGVkTWFzdGVyID0gdXBkYXRlTWFzdGVyJDEoX3RoaXM4Lm1hc3RlciwgbWFzdGVyKTtcblxuICAgICAgICB2YXIgY3VycmVudFNpZHhJbmZvID0gX3RoaXM4Lm1lZGlhKCkuc2lkeDtcblxuICAgICAgICBpZiAodXBkYXRlZE1hc3Rlcikge1xuICAgICAgICAgIGlmIChjdXJyZW50U2lkeEluZm8pIHtcbiAgICAgICAgICAgIHZhciBzaWR4S2V5ID0gZ2VuZXJhdGVTaWR4S2V5KGN1cnJlbnRTaWR4SW5mbyk7IC8vIHRoZSBzaWR4IHdhcyB1cGRhdGVkLCBzbyB0aGUgcHJldmlvdXMgbWFwcGluZyB3YXMgcmVtb3ZlZFxuXG4gICAgICAgICAgICBpZiAoIV90aGlzOC5zaWR4TWFwcGluZ19bc2lkeEtleV0pIHtcbiAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0ID0gX3RoaXM4Lm1lZGlhKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXM4LnJlcXVlc3QgPSByZXF1ZXN0U2lkeF8ocGxheWxpc3Quc2lkeCwgcGxheWxpc3QsIF90aGlzOC5obHNfLnhociwge1xuICAgICAgICAgICAgICAgIGhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzOiBfdGhpczguaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHNcbiAgICAgICAgICAgICAgfSwgX3RoaXM4LnNpZHhSZXF1ZXN0RmluaXNoZWRfKHBsYXlsaXN0LCBtYXN0ZXIsIF90aGlzOC5zdGF0ZSwgZnVuY3Rpb24gKG5ld01hc3Rlciwgc2lkeCkge1xuICAgICAgICAgICAgICAgIGlmICghbmV3TWFzdGVyIHx8ICFzaWR4KSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byByZXF1ZXN0IHNpZHggb24gbWluaW11bVVwZGF0ZVBlcmlvZCcpO1xuICAgICAgICAgICAgICAgIH0gLy8gdXBkYXRlIGxvYWRlcidzIHNpZHhNYXBwaW5nIHdpdGggcGFyc2VkIHNpZHggYm94XG5cblxuICAgICAgICAgICAgICAgIF90aGlzOC5zaWR4TWFwcGluZ19bc2lkeEtleV0uc2lkeCA9IHNpZHg7XG4gICAgICAgICAgICAgICAgX3RoaXM4Lm1pbmltdW1VcGRhdGVQZXJpb2RUaW1lb3V0XyA9IHdpbmRvdyQxLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgX3RoaXM4LnRyaWdnZXIoJ21pbmltdW1VcGRhdGVQZXJpb2QnKTtcbiAgICAgICAgICAgICAgICB9LCBfdGhpczgubWFzdGVyLm1pbmltdW1VcGRhdGVQZXJpb2QpOyAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgY3VycmVudCBwbGF5bGlzdD9cblxuICAgICAgICAgICAgICAgIF90aGlzOC5yZWZyZXNoTWVkaWFfKF90aGlzOC5tZWRpYSgpLnVyaSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXM4Lm1hc3RlciA9IHVwZGF0ZWRNYXN0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM4Lm1pbmltdW1VcGRhdGVQZXJpb2RUaW1lb3V0XyA9IHdpbmRvdyQxLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzOC50cmlnZ2VyKCdtaW5pbXVtVXBkYXRlUGVyaW9kJyk7XG4gICAgICAgIH0sIF90aGlzOC5tYXN0ZXIubWluaW11bVVwZGF0ZVBlcmlvZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBtZWRpYSBwbGF5bGlzdCBieSByZS1wYXJzaW5nIHRoZSBtYXN0ZXIgeG1sIGFuZCB1cGRhdGluZyBwbGF5bGlzdFxuICAgICAqIHJlZmVyZW5jZXMuIElmIHRoaXMgaXMgYW4gYWx0ZXJuYXRlIGxvYWRlciwgdGhlIHVwZGF0ZWQgcGFyc2VkIG1hbmlmZXN0IGlzIHJldHJpZXZlZFxuICAgICAqIGZyb20gdGhlIG1hc3RlciBsb2FkZXIuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JlZnJlc2hNZWRpYV8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWZyZXNoTWVkaWFfKG1lZGlhVXJpKSB7XG4gICAgICB2YXIgX3RoaXM5ID0gdGhpcztcblxuICAgICAgaWYgKCFtZWRpYVVyaSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZnJlc2hNZWRpYV8gbXVzdCB0YWtlIGEgbWVkaWEgdXJpJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGRNYXN0ZXIgPSB2b2lkIDA7XG4gICAgICB2YXIgbmV3TWFzdGVyID0gdm9pZCAwO1xuXG4gICAgICBpZiAodGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8pIHtcbiAgICAgICAgb2xkTWFzdGVyID0gdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWFzdGVyO1xuICAgICAgICBuZXdNYXN0ZXIgPSB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5wYXJzZU1hc3RlclhtbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2xkTWFzdGVyID0gdGhpcy5tYXN0ZXI7XG4gICAgICAgIG5ld01hc3RlciA9IHRoaXMucGFyc2VNYXN0ZXJYbWwoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZWRNYXN0ZXIgPSB1cGRhdGVNYXN0ZXIkMShvbGRNYXN0ZXIsIG5ld01hc3Rlcik7XG5cbiAgICAgIGlmICh1cGRhdGVkTWFzdGVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXykge1xuICAgICAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3RlciA9IHVwZGF0ZWRNYXN0ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXN0ZXIgPSB1cGRhdGVkTWFzdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZWRpYV8gPSB1cGRhdGVkTWFzdGVyLnBsYXlsaXN0c1ttZWRpYVVyaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1lZGlhXyA9IG5ld01hc3Rlci5wbGF5bGlzdHNbbWVkaWFVcmldO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3BsYXlsaXN0dW5jaGFuZ2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5tZWRpYSgpLmVuZExpc3QpIHtcbiAgICAgICAgdGhpcy5tZWRpYVVwZGF0ZVRpbWVvdXQgPSB3aW5kb3ckMS5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczkudHJpZ2dlcignbWVkaWF1cGRhdGV0aW1lb3V0Jyk7XG4gICAgICAgIH0sIHJlZnJlc2hEZWxheSh0aGlzLm1lZGlhKCksICEhdXBkYXRlZE1hc3RlcikpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyaWdnZXIoJ2xvYWRlZHBsYXlsaXN0Jyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEYXNoUGxheWxpc3RMb2FkZXI7XG59KEV2ZW50VGFyZ2V0JDEkMSk7XG5cbnZhciBsb2dnZXIgPSBmdW5jdGlvbiBsb2dnZXIoc291cmNlKSB7XG4gIGlmICh2aWRlb2pzJDEubG9nLmRlYnVnKSB7XG4gICAgcmV0dXJuIHZpZGVvanMkMS5sb2cuZGVidWcuYmluZCh2aWRlb2pzJDEsICdWSFM6Jywgc291cmNlICsgJyA+Jyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge307XG59O1xuXG5mdW5jdGlvbiBub29wKCkge31cbi8qKlxuICogQGZpbGUgc291cmNlLXVwZGF0ZXIuanNcbiAqL1xuXG4vKipcbiAqIEEgcXVldWUgb2YgY2FsbGJhY2tzIHRvIGJlIHNlcmlhbGl6ZWQgYW5kIGFwcGxpZWQgd2hlbiBhXG4gKiBNZWRpYVNvdXJjZSBhbmQgaXRzIGFzc29jaWF0ZWQgU291cmNlQnVmZmVycyBhcmUgbm90IGluIHRoZVxuICogdXBkYXRpbmcgc3RhdGUuIEl0IGlzIHVzZWQgYnkgdGhlIHNlZ21lbnQgbG9hZGVyIHRvIHVwZGF0ZSB0aGVcbiAqIHVuZGVybHlpbmcgU291cmNlQnVmZmVycyB3aGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgZm9yIGluc3RhbmNlLlxuICpcbiAqIEBjbGFzcyBTb3VyY2VVcGRhdGVyXG4gKiBAcGFyYW0ge01lZGlhU291cmNlfSBtZWRpYVNvdXJjZSB0aGUgTWVkaWFTb3VyY2UgdG8gY3JlYXRlIHRoZVxuICogU291cmNlQnVmZmVyIGZyb21cbiAqIEBwYXJhbSB7U3RyaW5nfSBtaW1lVHlwZSB0aGUgZGVzaXJlZCBNSU1FIHR5cGUgb2YgdGhlIHVuZGVybHlpbmdcbiAqIFNvdXJjZUJ1ZmZlclxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZUJ1ZmZlckVtaXR0ZXIgYW4gZXZlbnQgZW1pdHRlciB0aGF0IGZpcmVzIHdoZW4gYSBzb3VyY2UgYnVmZmVyIGlzXG4gKiBhZGRlZCB0byB0aGUgbWVkaWEgc291cmNlXG4gKi9cblxuXG52YXIgU291cmNlVXBkYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU291cmNlVXBkYXRlcihtZWRpYVNvdXJjZSwgbWltZVR5cGUsIHR5cGUsIHNvdXJjZUJ1ZmZlckVtaXR0ZXIpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBTb3VyY2VVcGRhdGVyKTtcbiAgICB0aGlzLmNhbGxiYWNrc18gPSBbXTtcbiAgICB0aGlzLnBlbmRpbmdDYWxsYmFja18gPSBudWxsO1xuICAgIHRoaXMudGltZXN0YW1wT2Zmc2V0XyA9IDA7XG4gICAgdGhpcy5tZWRpYVNvdXJjZSA9IG1lZGlhU291cmNlO1xuICAgIHRoaXMucHJvY2Vzc2VkQXBwZW5kXyA9IGZhbHNlO1xuICAgIHRoaXMudHlwZV8gPSB0eXBlO1xuICAgIHRoaXMubWltZVR5cGVfID0gbWltZVR5cGU7XG4gICAgdGhpcy5sb2dnZXJfID0gbG9nZ2VyKCdTb3VyY2VVcGRhdGVyWycgKyB0eXBlICsgJ11bJyArIG1pbWVUeXBlICsgJ10nKTtcblxuICAgIGlmIChtZWRpYVNvdXJjZS5yZWFkeVN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgbWVkaWFTb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignc291cmNlb3BlbicsIHRoaXMuY3JlYXRlU291cmNlQnVmZmVyXy5iaW5kKHRoaXMsIG1pbWVUeXBlLCBzb3VyY2VCdWZmZXJFbWl0dGVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlU291cmNlQnVmZmVyXyhtaW1lVHlwZSwgc291cmNlQnVmZmVyRW1pdHRlcik7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2xhc3MoU291cmNlVXBkYXRlciwgW3tcbiAgICBrZXk6ICdjcmVhdGVTb3VyY2VCdWZmZXJfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU291cmNlQnVmZmVyXyhtaW1lVHlwZSwgc291cmNlQnVmZmVyRW1pdHRlcikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5zb3VyY2VCdWZmZXJfID0gdGhpcy5tZWRpYVNvdXJjZS5hZGRTb3VyY2VCdWZmZXIobWltZVR5cGUpO1xuICAgICAgdGhpcy5sb2dnZXJfKCdjcmVhdGVkIFNvdXJjZUJ1ZmZlcicpO1xuXG4gICAgICBpZiAoc291cmNlQnVmZmVyRW1pdHRlcikge1xuICAgICAgICBzb3VyY2VCdWZmZXJFbWl0dGVyLnRyaWdnZXIoJ3NvdXJjZWJ1ZmZlcmFkZGVkJyk7XG5cbiAgICAgICAgaWYgKHRoaXMubWVkaWFTb3VyY2Uuc291cmNlQnVmZmVycy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgLy8gVGhlcmUncyBhbm90aGVyIHNvdXJjZSBidWZmZXIgd2UgbXVzdCB3YWl0IGZvciBiZWZvcmUgd2UgY2FuIHN0YXJ0IHVwZGF0aW5nXG4gICAgICAgICAgLy8gb3VyIG93biAob3IgZWxzZSB3ZSBjYW4gZ2V0IGludG8gYSBiYWQgc3RhdGUsIGkuZS4sIGFwcGVuZGluZyB2aWRlby9hdWRpbyBkYXRhXG4gICAgICAgICAgLy8gYmVmb3JlIHRoZSBvdGhlciB2aWRlby9hdWRpbyBzb3VyY2UgYnVmZmVyIGlzIGF2YWlsYWJsZSBhbmQgbGVhZGluZyB0byBhIHZpZGVvXG4gICAgICAgICAgLy8gb3IgYXVkaW8gb25seSBidWZmZXIpLlxuICAgICAgICAgIHNvdXJjZUJ1ZmZlckVtaXR0ZXIub24oJ3NvdXJjZWJ1ZmZlcmFkZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc3RhcnRfKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhcnRfKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc3RhcnRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRfKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc3RhcnRlZF8gPSB0cnVlOyAvLyBydW4gY29tcGxldGlvbiBoYW5kbGVycyBhbmQgcHJvY2VzcyBjYWxsYmFja3MgYXMgdXBkYXRlZW5kXG4gICAgICAvLyBldmVudHMgZmlyZVxuXG4gICAgICB0aGlzLm9uVXBkYXRlZW5kQ2FsbGJhY2tfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGVuZGluZ0NhbGxiYWNrID0gX3RoaXMyLnBlbmRpbmdDYWxsYmFja187XG4gICAgICAgIF90aGlzMi5wZW5kaW5nQ2FsbGJhY2tfID0gbnVsbDtcbiAgICAgICAgX3RoaXMyLnNvdXJjZUJ1ZmZlcl8ucmVtb3ZpbmcgPSBmYWxzZTtcblxuICAgICAgICBfdGhpczIubG9nZ2VyXygnYnVmZmVyZWQgWycgKyBwcmludGFibGVSYW5nZShfdGhpczIuYnVmZmVyZWQoKSkgKyAnXScpO1xuXG4gICAgICAgIGlmIChwZW5kaW5nQ2FsbGJhY2spIHtcbiAgICAgICAgICBwZW5kaW5nQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi5ydW5DYWxsYmFja18oKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc291cmNlQnVmZmVyXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVlbmQnLCB0aGlzLm9uVXBkYXRlZW5kQ2FsbGJhY2tfKTtcbiAgICAgIHRoaXMucnVuQ2FsbGJhY2tfKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0cyB0aGUgY3VycmVudCBzZWdtZW50IGFuZCByZXNldHMgdGhlIHNlZ21lbnQgcGFyc2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZG9uZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gZG9uZVxuICAgICAqIEBzZWUgaHR0cDovL3czYy5naXRodWIuaW8vbWVkaWEtc291cmNlLyN3aWRsLVNvdXJjZUJ1ZmZlci1hYm9ydC12b2lkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Fib3J0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQoZG9uZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3NlZEFwcGVuZF8pIHtcbiAgICAgICAgdGhpcy5xdWV1ZUNhbGxiYWNrXyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnNvdXJjZUJ1ZmZlcl8uYWJvcnQoKTtcbiAgICAgICAgfSwgZG9uZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFF1ZXVlIGFuIHVwZGF0ZSB0byBhcHBlbmQgYW4gQXJyYXlCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBieXRlc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGRvbmUgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkb25lXG4gICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3dpZGwtU291cmNlQnVmZmVyLWFwcGVuZEJ1ZmZlci12b2lkLUFycmF5QnVmZmVyLWRhdGFcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYXBwZW5kQnVmZmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwZW5kQnVmZmVyKGNvbmZpZywgZG9uZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRoaXMucHJvY2Vzc2VkQXBwZW5kXyA9IHRydWU7XG4gICAgICB0aGlzLnF1ZXVlQ2FsbGJhY2tfKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbmZpZy52aWRlb1NlZ21lbnRUaW1pbmdJbmZvQ2FsbGJhY2spIHtcbiAgICAgICAgICBfdGhpczQuc291cmNlQnVmZmVyXy5hZGRFdmVudExpc3RlbmVyKCd2aWRlb1NlZ21lbnRUaW1pbmdJbmZvJywgY29uZmlnLnZpZGVvU2VnbWVudFRpbWluZ0luZm9DYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczQuc291cmNlQnVmZmVyXy5hcHBlbmRCdWZmZXIoY29uZmlnLmJ5dGVzKTtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbmZpZy52aWRlb1NlZ21lbnRUaW1pbmdJbmZvQ2FsbGJhY2spIHtcbiAgICAgICAgICBfdGhpczQuc291cmNlQnVmZmVyXy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aWRlb1NlZ21lbnRUaW1pbmdJbmZvJywgY29uZmlnLnZpZGVvU2VnbWVudFRpbWluZ0luZm9DYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoYXQgVGltZVJhbmdlcyBhcmUgYnVmZmVyZWQgaW4gdGhlIG1hbmFnZWQgU291cmNlQnVmZmVyLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3dpZGwtU291cmNlQnVmZmVyLWJ1ZmZlcmVkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2J1ZmZlcmVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYnVmZmVyZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuc291cmNlQnVmZmVyXykge1xuICAgICAgICByZXR1cm4gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlQnVmZmVyXy5idWZmZXJlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUXVldWUgYW4gdXBkYXRlIHRvIHJlbW92ZSBhIHRpbWUgcmFuZ2UgZnJvbSB0aGUgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IHdoZXJlIHRvIHN0YXJ0IHRoZSByZW1vdmFsXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGVuZCB3aGVyZSB0byBlbmQgdGhlIHJlbW92YWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZG9uZT1ub29wXSBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSByZW1vdmVcbiAgICAgKiBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhLXNvdXJjZS8jd2lkbC1Tb3VyY2VCdWZmZXItcmVtb3ZlLXZvaWQtZG91YmxlLXN0YXJ0LXVucmVzdHJpY3RlZC1kb3VibGUtZW5kXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JlbW92ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGRvbmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5vb3A7XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3NlZEFwcGVuZF8pIHtcbiAgICAgICAgdGhpcy5xdWV1ZUNhbGxiYWNrXyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM1LmxvZ2dlcl8oJ3JlbW92ZSBbJyArIHN0YXJ0ICsgJyA9PiAnICsgZW5kICsgJ10nKTtcblxuICAgICAgICAgIF90aGlzNS5zb3VyY2VCdWZmZXJfLnJlbW92aW5nID0gdHJ1ZTtcblxuICAgICAgICAgIF90aGlzNS5zb3VyY2VCdWZmZXJfLnJlbW92ZShzdGFydCwgZW5kKTtcbiAgICAgICAgfSwgZG9uZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVuZGVybHlpbmcgc291cmNlQnVmZmVyIGlzIHVwZGF0aW5nIG9yIG5vdFxuICAgICAqXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gdGhlIHVwZGF0aW5nIHN0YXR1cyBvZiB0aGUgU291cmNlQnVmZmVyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0aW5nJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRpbmcoKSB7XG4gICAgICAvLyB3ZSBhcmUgdXBkYXRpbmcgaWYgdGhlIHNvdXJjZWJ1ZmZlciBpcyB1cGRhdGluZyBvclxuICAgICAgcmV0dXJuICF0aGlzLnNvdXJjZUJ1ZmZlcl8gfHwgdGhpcy5zb3VyY2VCdWZmZXJfLnVwZGF0aW5nIHx8IC8vIGlmIHdlIGhhdmUgYSBwZW5kaW5nIGNhbGxiYWNrIHRoYXQgaXMgbm90IG91ciBpbnRlcm5hbCBub29wXG4gICAgICAhIXRoaXMucGVuZGluZ0NhbGxiYWNrXyAmJiB0aGlzLnBlbmRpbmdDYWxsYmFja18gIT09IG5vb3A7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldC9nZXQgdGhlIHRpbWVzdGFtcG9mZnNldCBvbiB0aGUgU291cmNlQnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSB0aW1lc3RhbXAgb2Zmc2V0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RpbWVzdGFtcE9mZnNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRpbWVzdGFtcE9mZnNldChvZmZzZXQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICBpZiAodHlwZW9mIG9mZnNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZUNhbGxiYWNrXyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM2LnNvdXJjZUJ1ZmZlcl8udGltZXN0YW1wT2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgICAgICAgX3RoaXM2LnJ1bkNhbGxiYWNrXygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50aW1lc3RhbXBPZmZzZXRfID0gb2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50aW1lc3RhbXBPZmZzZXRfO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBRdWV1ZSBhIGNhbGxiYWNrIHRvIHJ1blxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdxdWV1ZUNhbGxiYWNrXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHF1ZXVlQ2FsbGJhY2tfKGNhbGxiYWNrLCBkb25lKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrc18ucHVzaChbY2FsbGJhY2suYmluZCh0aGlzKSwgZG9uZV0pO1xuICAgICAgdGhpcy5ydW5DYWxsYmFja18oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGEgcXVldWVkIGNhbGxiYWNrXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3J1bkNhbGxiYWNrXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1bkNhbGxiYWNrXygpIHtcbiAgICAgIHZhciBjYWxsYmFja3MgPSB2b2lkIDA7XG5cbiAgICAgIGlmICghdGhpcy51cGRhdGluZygpICYmIHRoaXMuY2FsbGJhY2tzXy5sZW5ndGggJiYgdGhpcy5zdGFydGVkXykge1xuICAgICAgICBjYWxsYmFja3MgPSB0aGlzLmNhbGxiYWNrc18uc2hpZnQoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2FsbGJhY2tfID0gY2FsbGJhY2tzWzFdO1xuICAgICAgICBjYWxsYmFja3NbMF0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlzcG9zZSBvZiB0aGUgc291cmNlIHVwZGF0ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIHNvdXJjZUJ1ZmZlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNwb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB2YXIgZGlzcG9zZUZuID0gZnVuY3Rpb24gZGlzcG9zZUZuKCkge1xuICAgICAgICBpZiAoX3RoaXM3LnNvdXJjZUJ1ZmZlcl8gJiYgX3RoaXM3Lm1lZGlhU291cmNlLnJlYWR5U3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgICAgIF90aGlzNy5zb3VyY2VCdWZmZXJfLmFib3J0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczcuc291cmNlQnVmZmVyXy5yZW1vdmVFdmVudExpc3RlbmVyKCd1cGRhdGVlbmQnLCBkaXNwb3NlRm4pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zb3VyY2VCdWZmZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VwZGF0ZWVuZCcsIHRoaXMub25VcGRhdGVlbmRDYWxsYmFja18pO1xuXG4gICAgICBpZiAodGhpcy5zb3VyY2VCdWZmZXJfLnJlbW92aW5nKSB7XG4gICAgICAgIHRoaXMuc291cmNlQnVmZmVyXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVlbmQnLCBkaXNwb3NlRm4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcG9zZUZuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTb3VyY2VVcGRhdGVyO1xufSgpO1xuXG52YXIgQ29uZmlnID0ge1xuICBHT0FMX0JVRkZFUl9MRU5HVEg6IDMwLFxuICBNQVhfR09BTF9CVUZGRVJfTEVOR1RIOiA2MCxcbiAgR09BTF9CVUZGRVJfTEVOR1RIX1JBVEU6IDEsXG4gIC8vIDAuNSBNQi9zXG4gIElOSVRJQUxfQkFORFdJRFRIOiA0MTk0MzA0LFxuICAvLyBBIGZ1ZGdlIGZhY3RvciB0byBhcHBseSB0byBhZHZlcnRpc2VkIHBsYXlsaXN0IGJpdHJhdGVzIHRvIGFjY291bnQgZm9yXG4gIC8vIHRlbXBvcmFyeSBmbHVjYXRpb25zIGluIGNsaWVudCBiYW5kd2lkdGhcbiAgQkFORFdJRFRIX1ZBUklBTkNFOiAxLjIsXG4gIC8vIEhvdyBtdWNoIG9mIHRoZSBidWZmZXIgbXVzdCBiZSBmaWxsZWQgYmVmb3JlIHdlIGNvbnNpZGVyIHVwc3dpdGNoaW5nXG4gIEJVRkZFUl9MT1dfV0FURVJfTElORTogMCxcbiAgTUFYX0JVRkZFUl9MT1dfV0FURVJfTElORTogMzAsXG4gIEJVRkZFUl9MT1dfV0FURVJfTElORV9SQVRFOiAxXG59O1xudmFyIFJFUVVFU1RfRVJST1JTID0ge1xuICBGQUlMVVJFOiAyLFxuICBUSU1FT1VUOiAtMTAxLFxuICBBQk9SVEVEOiAtMTAyXG59O1xuLyoqXG4gKiBBYm9ydCBhbGwgcmVxdWVzdHNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aXZlWGhycyAtIGFuIG9iamVjdCB0aGF0IHRyYWNrcyBhbGwgWEhSIHJlcXVlc3RzXG4gKi9cblxudmFyIGFib3J0QWxsID0gZnVuY3Rpb24gYWJvcnRBbGwoYWN0aXZlWGhycykge1xuICBhY3RpdmVYaHJzLmZvckVhY2goZnVuY3Rpb24gKHhocikge1xuICAgIHhoci5hYm9ydCgpO1xuICB9KTtcbn07XG4vKipcbiAqIEdhdGhlciBpbXBvcnRhbnQgYmFuZHdpZHRoIHN0YXRzIG9uY2UgYSByZXF1ZXN0IGhhcyBjb21wbGV0ZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCAtIHRoZSBYSFIgcmVxdWVzdCBmcm9tIHdoaWNoIHRvIGdhdGhlciBzdGF0c1xuICovXG5cblxudmFyIGdldFJlcXVlc3RTdGF0cyA9IGZ1bmN0aW9uIGdldFJlcXVlc3RTdGF0cyhyZXF1ZXN0KSB7XG4gIHJldHVybiB7XG4gICAgYmFuZHdpZHRoOiByZXF1ZXN0LmJhbmR3aWR0aCxcbiAgICBieXRlc1JlY2VpdmVkOiByZXF1ZXN0LmJ5dGVzUmVjZWl2ZWQgfHwgMCxcbiAgICByb3VuZFRyaXBUaW1lOiByZXF1ZXN0LnJvdW5kVHJpcFRpbWUgfHwgMFxuICB9O1xufTtcbi8qKlxuICogSWYgcG9zc2libGUgZ2F0aGVyIGJhbmR3aWR0aCBzdGF0cyBhcyBhIHJlcXVlc3QgaXMgaW5cbiAqIHByb2dyZXNzXG4gKlxuICogQHBhcmFtIHtFdmVudH0gcHJvZ3Jlc3NFdmVudCAtIGFuIGV2ZW50IG9iamVjdCBmcm9tIGFuIFhIUidzIHByb2dyZXNzIGV2ZW50XG4gKi9cblxuXG52YXIgZ2V0UHJvZ3Jlc3NTdGF0cyA9IGZ1bmN0aW9uIGdldFByb2dyZXNzU3RhdHMocHJvZ3Jlc3NFdmVudCkge1xuICB2YXIgcmVxdWVzdCA9IHByb2dyZXNzRXZlbnQudGFyZ2V0O1xuICB2YXIgcm91bmRUcmlwVGltZSA9IERhdGUubm93KCkgLSByZXF1ZXN0LnJlcXVlc3RUaW1lO1xuICB2YXIgc3RhdHMgPSB7XG4gICAgYmFuZHdpZHRoOiBJbmZpbml0eSxcbiAgICBieXRlc1JlY2VpdmVkOiAwLFxuICAgIHJvdW5kVHJpcFRpbWU6IHJvdW5kVHJpcFRpbWUgfHwgMFxuICB9O1xuICBzdGF0cy5ieXRlc1JlY2VpdmVkID0gcHJvZ3Jlc3NFdmVudC5sb2FkZWQ7IC8vIFRoaXMgY2FuIHJlc3VsdCBpbiBJbmZpbml0eSBpZiBzdGF0cy5yb3VuZFRyaXBUaW1lIGlzIDAgYnV0IHRoYXQgaXMgb2tcbiAgLy8gYmVjYXVzZSB3ZSBzaG91bGQgb25seSB1c2UgYmFuZHdpZHRoIHN0YXRzIG9uIHByb2dyZXNzIHRvIGRldGVybWluZSB3aGVuXG4gIC8vIGFib3J0IGEgcmVxdWVzdCBlYXJseSBkdWUgdG8gaW5zdWZmaWNpZW50IGJhbmR3aWR0aFxuXG4gIHN0YXRzLmJhbmR3aWR0aCA9IE1hdGguZmxvb3Ioc3RhdHMuYnl0ZXNSZWNlaXZlZCAvIHN0YXRzLnJvdW5kVHJpcFRpbWUgKiA4ICogMTAwMCk7XG4gIHJldHVybiBzdGF0cztcbn07XG4vKipcbiAqIEhhbmRsZSBhbGwgZXJyb3IgY29uZGl0aW9ucyBpbiBvbmUgcGxhY2UgYW5kIHJldHVybiBhbiBvYmplY3RcbiAqIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgLSBpZiBub24tbnVsbCBzaWduYWxzIGFuIGVycm9yIG9jY3VyZWQgd2l0aCB0aGUgWEhSXG4gKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCAtICB0aGUgWEhSIHJlcXVlc3QgdGhhdCBwb3NzaWJseSBnZW5lcmF0ZWQgdGhlIGVycm9yXG4gKi9cblxuXG52YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKGVycm9yLCByZXF1ZXN0KSB7XG4gIGlmIChyZXF1ZXN0LnRpbWVkb3V0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiAnSExTIHJlcXVlc3QgdGltZWQtb3V0IGF0IFVSTDogJyArIHJlcXVlc3QudXJpLFxuICAgICAgY29kZTogUkVRVUVTVF9FUlJPUlMuVElNRU9VVCxcbiAgICAgIHhocjogcmVxdWVzdFxuICAgIH07XG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiAnSExTIHJlcXVlc3QgYWJvcnRlZCBhdCBVUkw6ICcgKyByZXF1ZXN0LnVyaSxcbiAgICAgIGNvZGU6IFJFUVVFU1RfRVJST1JTLkFCT1JURUQsXG4gICAgICB4aHI6IHJlcXVlc3RcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiAnSExTIHJlcXVlc3QgZXJyb3JlZCBhdCBVUkw6ICcgKyByZXF1ZXN0LnVyaSxcbiAgICAgIGNvZGU6IFJFUVVFU1RfRVJST1JTLkZBSUxVUkUsXG4gICAgICB4aHI6IHJlcXVlc3RcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLyoqXG4gKiBIYW5kbGUgcmVzcG9uc2VzIGZvciBrZXkgZGF0YSBhbmQgY29udmVydCB0aGUga2V5IGRhdGEgdG8gdGhlIGNvcnJlY3QgZm9ybWF0XG4gKiBmb3IgdGhlIGRlY3J5cHRpb24gc3RlcCBsYXRlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWdtZW50IC0gYSBzaW1wbGlmaWVkIGNvcHkgb2YgdGhlIHNlZ21lbnRJbmZvIG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIFNlZ21lbnRMb2FkZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmlzaFByb2Nlc3NpbmdGbiAtIGEgY2FsbGJhY2sgdG8gZXhlY3V0ZSB0byBjb250aW51ZSBwcm9jZXNzaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJlcXVlc3RcbiAqL1xuXG5cbnZhciBoYW5kbGVLZXlSZXNwb25zZSA9IGZ1bmN0aW9uIGhhbmRsZUtleVJlc3BvbnNlKHNlZ21lbnQsIGZpbmlzaFByb2Nlc3NpbmdGbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0KSB7XG4gICAgdmFyIHJlc3BvbnNlID0gcmVxdWVzdC5yZXNwb25zZTtcbiAgICB2YXIgZXJyb3JPYmogPSBoYW5kbGVFcnJvcnMoZXJyb3IsIHJlcXVlc3QpO1xuXG4gICAgaWYgKGVycm9yT2JqKSB7XG4gICAgICByZXR1cm4gZmluaXNoUHJvY2Vzc2luZ0ZuKGVycm9yT2JqLCBzZWdtZW50KTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgIHJldHVybiBmaW5pc2hQcm9jZXNzaW5nRm4oe1xuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBITFMga2V5IGF0IFVSTDogJyArIHJlcXVlc3QudXJpLFxuICAgICAgICBjb2RlOiBSRVFVRVNUX0VSUk9SUy5GQUlMVVJFLFxuICAgICAgICB4aHI6IHJlcXVlc3RcbiAgICAgIH0sIHNlZ21lbnQpO1xuICAgIH1cblxuICAgIHZhciB2aWV3ID0gbmV3IERhdGFWaWV3KHJlc3BvbnNlKTtcbiAgICBzZWdtZW50LmtleS5ieXRlcyA9IG5ldyBVaW50MzJBcnJheShbdmlldy5nZXRVaW50MzIoMCksIHZpZXcuZ2V0VWludDMyKDQpLCB2aWV3LmdldFVpbnQzMig4KSwgdmlldy5nZXRVaW50MzIoMTIpXSk7XG4gICAgcmV0dXJuIGZpbmlzaFByb2Nlc3NpbmdGbihudWxsLCBzZWdtZW50KTtcbiAgfTtcbn07XG4vKipcbiAqIEhhbmRsZSBpbml0LXNlZ21lbnQgcmVzcG9uc2VzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnQgLSBhIHNpbXBsaWZpZWQgY29weSBvZiB0aGUgc2VnbWVudEluZm8gb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gU2VnbWVudExvYWRlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmluaXNoUHJvY2Vzc2luZ0ZuIC0gYSBjYWxsYmFjayB0byBleGVjdXRlIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmVxdWVzdFxuICovXG5cblxudmFyIGhhbmRsZUluaXRTZWdtZW50UmVzcG9uc2UgPSBmdW5jdGlvbiBoYW5kbGVJbml0U2VnbWVudFJlc3BvbnNlKHNlZ21lbnQsIGNhcHRpb25QYXJzZXIsIGZpbmlzaFByb2Nlc3NpbmdGbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0KSB7XG4gICAgdmFyIHJlc3BvbnNlID0gcmVxdWVzdC5yZXNwb25zZTtcbiAgICB2YXIgZXJyb3JPYmogPSBoYW5kbGVFcnJvcnMoZXJyb3IsIHJlcXVlc3QpO1xuXG4gICAgaWYgKGVycm9yT2JqKSB7XG4gICAgICByZXR1cm4gZmluaXNoUHJvY2Vzc2luZ0ZuKGVycm9yT2JqLCBzZWdtZW50KTtcbiAgICB9IC8vIHN0b3AgcHJvY2Vzc2luZyBpZiByZWNlaXZlZCBlbXB0eSBjb250ZW50XG5cblxuICAgIGlmIChyZXNwb25zZS5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmluaXNoUHJvY2Vzc2luZ0ZuKHtcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogJ0VtcHR5IEhMUyBzZWdtZW50IGNvbnRlbnQgYXQgVVJMOiAnICsgcmVxdWVzdC51cmksXG4gICAgICAgIGNvZGU6IFJFUVVFU1RfRVJST1JTLkZBSUxVUkUsXG4gICAgICAgIHhocjogcmVxdWVzdFxuICAgICAgfSwgc2VnbWVudCk7XG4gICAgfVxuXG4gICAgc2VnbWVudC5tYXAuYnl0ZXMgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTsgLy8gSW5pdGlhbGl6ZSBDYXB0aW9uUGFyc2VyIGlmIGl0IGhhc24ndCBiZWVuIHlldFxuXG4gICAgaWYgKGNhcHRpb25QYXJzZXIgJiYgIWNhcHRpb25QYXJzZXIuaXNJbml0aWFsaXplZCgpKSB7XG4gICAgICBjYXB0aW9uUGFyc2VyLmluaXQoKTtcbiAgICB9XG5cbiAgICBzZWdtZW50Lm1hcC50aW1lc2NhbGVzID0gbXA0cHJvYmUudGltZXNjYWxlKHNlZ21lbnQubWFwLmJ5dGVzKTtcbiAgICBzZWdtZW50Lm1hcC52aWRlb1RyYWNrSWRzID0gbXA0cHJvYmUudmlkZW9UcmFja0lkcyhzZWdtZW50Lm1hcC5ieXRlcyk7XG4gICAgcmV0dXJuIGZpbmlzaFByb2Nlc3NpbmdGbihudWxsLCBzZWdtZW50KTtcbiAgfTtcbn07XG4vKipcbiAqIFJlc3BvbnNlIGhhbmRsZXIgZm9yIHNlZ21lbnQtcmVxdWVzdHMgYmVpbmcgc3VyZSB0byBzZXQgdGhlIGNvcnJlY3RcbiAqIHByb3BlcnR5IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzZWdtZW50IGlzIGVuY3J5cGVkIG9yIG5vdFxuICogQWxzbyByZWNvcmRzIGFuZCBrZWVwcyB0cmFjayBvZiBzdGF0cyB0aGF0IGFyZSB1c2VkIGZvciBBQlIgcHVycG9zZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudCAtIGEgc2ltcGxpZmllZCBjb3B5IG9mIHRoZSBzZWdtZW50SW5mbyBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBTZWdtZW50TG9hZGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5pc2hQcm9jZXNzaW5nRm4gLSBhIGNhbGxiYWNrIHRvIGV4ZWN1dGUgdG8gY29udGludWUgcHJvY2Vzc2luZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByZXF1ZXN0XG4gKi9cblxuXG52YXIgaGFuZGxlU2VnbWVudFJlc3BvbnNlID0gZnVuY3Rpb24gaGFuZGxlU2VnbWVudFJlc3BvbnNlKHNlZ21lbnQsIGNhcHRpb25QYXJzZXIsIGZpbmlzaFByb2Nlc3NpbmdGbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0KSB7XG4gICAgdmFyIHJlc3BvbnNlID0gcmVxdWVzdC5yZXNwb25zZTtcbiAgICB2YXIgZXJyb3JPYmogPSBoYW5kbGVFcnJvcnMoZXJyb3IsIHJlcXVlc3QpO1xuICAgIHZhciBwYXJzZWQgPSB2b2lkIDA7XG5cbiAgICBpZiAoZXJyb3JPYmopIHtcbiAgICAgIHJldHVybiBmaW5pc2hQcm9jZXNzaW5nRm4oZXJyb3JPYmosIHNlZ21lbnQpO1xuICAgIH0gLy8gc3RvcCBwcm9jZXNzaW5nIGlmIHJlY2VpdmVkIGVtcHR5IGNvbnRlbnRcblxuXG4gICAgaWYgKHJlc3BvbnNlLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmaW5pc2hQcm9jZXNzaW5nRm4oe1xuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBtZXNzYWdlOiAnRW1wdHkgSExTIHNlZ21lbnQgY29udGVudCBhdCBVUkw6ICcgKyByZXF1ZXN0LnVyaSxcbiAgICAgICAgY29kZTogUkVRVUVTVF9FUlJPUlMuRkFJTFVSRSxcbiAgICAgICAgeGhyOiByZXF1ZXN0XG4gICAgICB9LCBzZWdtZW50KTtcbiAgICB9XG5cbiAgICBzZWdtZW50LnN0YXRzID0gZ2V0UmVxdWVzdFN0YXRzKHJlcXVlc3QpO1xuXG4gICAgaWYgKHNlZ21lbnQua2V5KSB7XG4gICAgICBzZWdtZW50LmVuY3J5cHRlZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnQuYnl0ZXMgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICB9IC8vIFRoaXMgaXMgbGlrZWx5IGFuIEZNUDQgYW5kIGhhcyB0aGUgaW5pdCBzZWdtZW50LlxuICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBDYXB0aW9uUGFyc2VyIGluIGNhc2UgdGhlcmUgYXJlIGNhcHRpb25zLlxuXG5cbiAgICBpZiAoY2FwdGlvblBhcnNlciAmJiBzZWdtZW50Lm1hcCAmJiBzZWdtZW50Lm1hcC5ieXRlcykge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBDYXB0aW9uUGFyc2VyIGlmIGl0IGhhc24ndCBiZWVuIHlldFxuICAgICAgaWYgKCFjYXB0aW9uUGFyc2VyLmlzSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgICBjYXB0aW9uUGFyc2VyLmluaXQoKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VkID0gY2FwdGlvblBhcnNlci5wYXJzZShzZWdtZW50LmJ5dGVzLCBzZWdtZW50Lm1hcC52aWRlb1RyYWNrSWRzLCBzZWdtZW50Lm1hcC50aW1lc2NhbGVzKTtcblxuICAgICAgaWYgKHBhcnNlZCAmJiBwYXJzZWQuY2FwdGlvbnMpIHtcbiAgICAgICAgc2VnbWVudC5jYXB0aW9uU3RyZWFtcyA9IHBhcnNlZC5jYXB0aW9uU3RyZWFtcztcbiAgICAgICAgc2VnbWVudC5mbXA0Q2FwdGlvbnMgPSBwYXJzZWQuY2FwdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmlzaFByb2Nlc3NpbmdGbihudWxsLCBzZWdtZW50KTtcbiAgfTtcbn07XG4vKipcbiAqIERlY3J5cHQgdGhlIHNlZ21lbnQgdmlhIHRoZSBkZWNyeXB0aW9uIHdlYiB3b3JrZXJcbiAqXG4gKiBAcGFyYW0ge1dlYldvcmtlcn0gZGVjcnlwdGVyIC0gYSBXZWJXb3JrZXIgaW50ZXJmYWNlIHRvIEFFUy0xMjggZGVjcnlwdGlvbiByb3V0aW5lc1xuICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnQgLSBhIHNpbXBsaWZpZWQgY29weSBvZiB0aGUgc2VnbWVudEluZm8gb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gU2VnbWVudExvYWRlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZG9uZUZuIC0gYSBjYWxsYmFjayB0aGF0IGlzIGV4ZWN1dGVkIGFmdGVyIGRlY3J5cHRpb24gaGFzIGNvbXBsZXRlZFxuICovXG5cblxudmFyIGRlY3J5cHRTZWdtZW50ID0gZnVuY3Rpb24gZGVjcnlwdFNlZ21lbnQoZGVjcnlwdGVyLCBzZWdtZW50LCBkb25lRm4pIHtcbiAgdmFyIGRlY3J5cHRpb25IYW5kbGVyID0gZnVuY3Rpb24gZGVjcnlwdGlvbkhhbmRsZXIoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZGF0YS5zb3VyY2UgPT09IHNlZ21lbnQucmVxdWVzdElkKSB7XG4gICAgICBkZWNyeXB0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGRlY3J5cHRpb25IYW5kbGVyKTtcbiAgICAgIHZhciBkZWNyeXB0ZWQgPSBldmVudC5kYXRhLmRlY3J5cHRlZDtcbiAgICAgIHNlZ21lbnQuYnl0ZXMgPSBuZXcgVWludDhBcnJheShkZWNyeXB0ZWQuYnl0ZXMsIGRlY3J5cHRlZC5ieXRlT2Zmc2V0LCBkZWNyeXB0ZWQuYnl0ZUxlbmd0aCk7XG4gICAgICByZXR1cm4gZG9uZUZuKG51bGwsIHNlZ21lbnQpO1xuICAgIH1cbiAgfTtcblxuICBkZWNyeXB0ZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGRlY3J5cHRpb25IYW5kbGVyKTtcbiAgdmFyIGtleUJ5dGVzID0gdm9pZCAwO1xuXG4gIGlmIChzZWdtZW50LmtleS5ieXRlcy5zbGljZSkge1xuICAgIGtleUJ5dGVzID0gc2VnbWVudC5rZXkuYnl0ZXMuc2xpY2UoKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlCeXRlcyA9IG5ldyBVaW50MzJBcnJheShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzZWdtZW50LmtleS5ieXRlcykpO1xuICB9IC8vIHRoaXMgaXMgYW4gZW5jcnlwdGVkIHNlZ21lbnRcbiAgLy8gaW5jcmVtZW50YWxseSBkZWNyeXB0IHRoZSBzZWdtZW50XG5cblxuICBkZWNyeXB0ZXIucG9zdE1lc3NhZ2UoY3JlYXRlVHJhbnNmZXJhYmxlTWVzc2FnZSh7XG4gICAgc291cmNlOiBzZWdtZW50LnJlcXVlc3RJZCxcbiAgICBlbmNyeXB0ZWQ6IHNlZ21lbnQuZW5jcnlwdGVkQnl0ZXMsXG4gICAga2V5OiBrZXlCeXRlcyxcbiAgICBpdjogc2VnbWVudC5rZXkuaXZcbiAgfSksIFtzZWdtZW50LmVuY3J5cHRlZEJ5dGVzLmJ1ZmZlciwga2V5Qnl0ZXMuYnVmZmVyXSk7XG59O1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBhbGwgWEhScyB0byBmaW5pc2ggKHdpdGggZWl0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAqIGJlZm9yZSBjb250aW51ZWluZyBwcm9jZXNzaW5nIHZpYSBpdCdzIGNhbGxiYWNrLiBUaGUgZnVuY3Rpb24gZ2F0aGVycyBlcnJvcnNcbiAqIGZyb20gZWFjaCByZXF1ZXN0IGludG8gYSBzaW5nbGUgZXJyb3JzIGFycmF5IHNvIHRoYXQgdGhlIGVycm9yIHN0YXR1cyBmb3JcbiAqIGVhY2ggcmVxdWVzdCBjYW4gYmUgZXhhbWluZWQgbGF0ZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFjdGl2ZVhocnMgLSBhbiBvYmplY3QgdGhhdCB0cmFja3MgYWxsIFhIUiByZXF1ZXN0c1xuICogQHBhcmFtIHtXZWJXb3JrZXJ9IGRlY3J5cHRlciAtIGEgV2ViV29ya2VyIGludGVyZmFjZSB0byBBRVMtMTI4IGRlY3J5cHRpb24gcm91dGluZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRvbmVGbiAtIGEgY2FsbGJhY2sgdGhhdCBpcyBleGVjdXRlZCBhZnRlciBhbGwgcmVzb3VyY2VzIGhhdmUgYmVlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCBhbmQgYW55IGRlY3J5cHRpb24gY29tcGxldGVkXG4gKi9cblxuXG52YXIgd2FpdEZvckNvbXBsZXRpb24gPSBmdW5jdGlvbiB3YWl0Rm9yQ29tcGxldGlvbihhY3RpdmVYaHJzLCBkZWNyeXB0ZXIsIGRvbmVGbikge1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgZGlkRXJyb3IgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnJvciwgc2VnbWVudCkge1xuICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgZGlkRXJyb3IgPSB0cnVlOyAvLyBJZiB0aGVyZSBhcmUgZXJyb3JzLCB3ZSBoYXZlIHRvIGFib3J0IGFueSBvdXRzdGFuZGluZyByZXF1ZXN0c1xuXG4gICAgICBhYm9ydEFsbChhY3RpdmVYaHJzKTsgLy8gRXZlbiB0aG91Z2ggdGhlIHJlcXVlc3RzIGFib3ZlIGFyZSBhYm9ydGVkLCBhbmQgaW4gdGhlb3J5IHdlIGNvdWxkIHdhaXQgdW50aWwgd2VcbiAgICAgIC8vIGhhbmRsZSB0aGUgYWJvcnRlZCBldmVudHMgZnJvbSB0aG9zZSByZXF1ZXN0cywgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UgbWF5XG4gICAgICAvLyBuZXZlciBnZXQgYW4gYWJvcnRlZCBldmVudC4gRm9yIGluc3RhbmNlLCBpZiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGlzIGxvc3QgYW5kXG4gICAgICAvLyB0aGVyZSB3ZXJlIHR3byByZXF1ZXN0cywgdGhlIGZpcnN0IG1heSBoYXZlIHRyaWdnZXJlZCBhbiBlcnJvciBpbW1lZGlhdGVseSwgd2hpbGVcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVxdWVzdCByZW1haW5zIHVuc2VudC4gSW4gdGhhdCBjYXNlLCB0aGUgYWJvcnRlZCBhbGdvcml0aG0gd2lsbCBub3RcbiAgICAgIC8vIHRyaWdnZXIgYW4gYWJvcnQ6IHNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1hYm9ydCgpLW1ldGhvZFxuICAgICAgLy9cbiAgICAgIC8vIFdlIGFsc28gY2FuJ3QgcmVseSBvbiB0aGUgcmVhZHkgc3RhdGUgb2YgdGhlIFhIUiwgc2luY2UgdGhlIHJlcXVlc3QgdGhhdFxuICAgICAgLy8gdHJpZ2dlcmVkIHRoZSBjb25uZWN0aW9uIGVycm9yIG1heSBhbHNvIHNob3cgYXMgYSByZWFkeSBzdGF0ZSBvZiAwICh1bnNlbnQpLlxuICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGZpbmlzaCB0aGlzIGdyb3VwIG9mIHJlcXVlc3RzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaXJzdFxuICAgICAgLy8gc2VlbiBlcnJvci5cblxuICAgICAgcmV0dXJuIGRvbmVGbihlcnJvciwgc2VnbWVudCk7XG4gICAgfVxuXG4gICAgY291bnQgKz0gMTtcblxuICAgIGlmIChjb3VudCA9PT0gYWN0aXZlWGhycy5sZW5ndGgpIHtcbiAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hlbiAqYWxsKiBvZiB0aGUgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWRcbiAgICAgIHNlZ21lbnQuZW5kT2ZBbGxSZXF1ZXN0cyA9IERhdGUubm93KCk7XG5cbiAgICAgIGlmIChzZWdtZW50LmVuY3J5cHRlZEJ5dGVzKSB7XG4gICAgICAgIHJldHVybiBkZWNyeXB0U2VnbWVudChkZWNyeXB0ZXIsIHNlZ21lbnQsIGRvbmVGbik7XG4gICAgICB9IC8vIE90aGVyd2lzZSwgZXZlcnl0aGluZyBpcyByZWFkeSBqdXN0IGNvbnRpbnVlXG5cblxuICAgICAgcmV0dXJuIGRvbmVGbihudWxsLCBzZWdtZW50KTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBTaW1wbGUgcHJvZ3Jlc3MgZXZlbnQgY2FsbGJhY2sgaGFuZGxlciB0aGF0IGdhdGhlcnMgc29tZSBzdGF0cyBiZWZvcmVcbiAqIGV4ZWN1dGluZyBhIHByb3ZpZGVkIGNhbGxiYWNrIHdpdGggdGhlIGBzZWdtZW50YCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudCAtIGEgc2ltcGxpZmllZCBjb3B5IG9mIHRoZSBzZWdtZW50SW5mbyBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBTZWdtZW50TG9hZGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9ncmVzc0ZuIC0gYSBjYWxsYmFjayB0aGF0IGlzIGV4ZWN1dGVkIGVhY2ggdGltZSBhIHByb2dyZXNzIGV2ZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gdGhlIHByb2dyZXNzIGV2ZW50IG9iamVjdCBmcm9tIFhNTEh0dHBSZXF1ZXN0XG4gKi9cblxuXG52YXIgaGFuZGxlUHJvZ3Jlc3MgPSBmdW5jdGlvbiBoYW5kbGVQcm9ncmVzcyhzZWdtZW50LCBwcm9ncmVzc0ZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBzZWdtZW50LnN0YXRzID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyhzZWdtZW50LnN0YXRzLCBnZXRQcm9ncmVzc1N0YXRzKGV2ZW50KSk7IC8vIHJlY29yZCB0aGUgdGltZSB0aGF0IHdlIHJlY2VpdmUgdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YVxuXG4gICAgaWYgKCFzZWdtZW50LnN0YXRzLmZpcnN0Qnl0ZXNSZWNlaXZlZEF0ICYmIHNlZ21lbnQuc3RhdHMuYnl0ZXNSZWNlaXZlZCkge1xuICAgICAgc2VnbWVudC5zdGF0cy5maXJzdEJ5dGVzUmVjZWl2ZWRBdCA9IERhdGUubm93KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2dyZXNzRm4oZXZlbnQsIHNlZ21lbnQpO1xuICB9O1xufTtcbi8qKlxuICogTG9hZCBhbGwgcmVzb3VyY2VzIGFuZCBkb2VzIGFueSBwcm9jZXNzaW5nIG5lY2Vzc2FyeSBmb3IgYSBtZWRpYS1zZWdtZW50XG4gKlxuICogRmVhdHVyZXM6XG4gKiAgIGRlY3J5cHRzIHRoZSBtZWRpYS1zZWdtZW50IGlmIGl0IGhhcyBhIGtleSB1cmkgYW5kIGFuIGl2XG4gKiAgIGFib3J0cyAqYWxsKiByZXF1ZXN0cyBpZiAqYW55KiBvbmUgcmVxdWVzdCBmYWlsc1xuICpcbiAqIFRoZSBzZWdtZW50IG9iamVjdCwgYXQgbWluaW11bSwgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICoge1xuICogICByZXNvbHZlZFVyaTogU3RyaW5nLFxuICogICBbYnl0ZXJhbmdlXToge1xuICogICAgIG9mZnNldDogTnVtYmVyLFxuICogICAgIGxlbmd0aDogTnVtYmVyXG4gKiAgIH0sXG4gKiAgIFtrZXldOiB7XG4gKiAgICAgcmVzb2x2ZWRVcmk6IFN0cmluZ1xuICogICAgIFtieXRlcmFuZ2VdOiB7XG4gKiAgICAgICBvZmZzZXQ6IE51bWJlcixcbiAqICAgICAgIGxlbmd0aDogTnVtYmVyXG4gKiAgICAgfSxcbiAqICAgICBpdjoge1xuICogICAgICAgYnl0ZXM6IFVpbnQzMkFycmF5XG4gKiAgICAgfVxuICogICB9LFxuICogICBbbWFwXToge1xuICogICAgIHJlc29sdmVkVXJpOiBTdHJpbmcsXG4gKiAgICAgW2J5dGVyYW5nZV06IHtcbiAqICAgICAgIG9mZnNldDogTnVtYmVyLFxuICogICAgICAgbGVuZ3RoOiBOdW1iZXJcbiAqICAgICB9LFxuICogICAgIFtieXRlc106IFVpbnQ4QXJyYXlcbiAqICAgfVxuICogfVxuICogLi4ud2hlcmUgW25hbWVdIGRlbm90ZXMgb3B0aW9uYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHhociAtIGFuIGluc3RhbmNlIG9mIHRoZSB4aHIgd3JhcHBlciBpbiB4aHIuanNcbiAqIEBwYXJhbSB7T2JqZWN0fSB4aHJPcHRpb25zIC0gdGhlIGJhc2Ugb3B0aW9ucyB0byBwcm92aWRlIHRvIGFsbCB4aHIgcmVxdWVzdHNcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSBkZWNyeXB0aW9uV29ya2VyIC0gYSBXZWJXb3JrZXIgaW50ZXJmYWNlIHRvIEFFUy0xMjhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGlvbiByb3V0aW5lc1xuICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnQgLSBhIHNpbXBsaWZpZWQgY29weSBvZiB0aGUgc2VnbWVudEluZm8gb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gU2VnbWVudExvYWRlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvZ3Jlc3NGbiAtIGEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBwcm9ncmVzcyBldmVudHMgZnJvbSB0aGUgbWFpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQncyB4aHIgcmVxdWVzdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZG9uZUZuIC0gYSBjYWxsYmFjayB0aGF0IGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBhbGwgcmVxdWVzdHMgaGF2ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkIG9yIGZhaWxlZFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gaW52b2tlZCwgaW1tZWRpYXRlbHkgYWJvcnRzIGFsbFxuICogICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyByZXF1ZXN0c1xuICovXG5cblxudmFyIG1lZGlhU2VnbWVudFJlcXVlc3QgPSBmdW5jdGlvbiBtZWRpYVNlZ21lbnRSZXF1ZXN0KHhociwgeGhyT3B0aW9ucywgZGVjcnlwdGlvbldvcmtlciwgY2FwdGlvblBhcnNlciwgc2VnbWVudCwgcHJvZ3Jlc3NGbiwgZG9uZUZuKSB7XG4gIHZhciBhY3RpdmVYaHJzID0gW107XG4gIHZhciBmaW5pc2hQcm9jZXNzaW5nRm4gPSB3YWl0Rm9yQ29tcGxldGlvbihhY3RpdmVYaHJzLCBkZWNyeXB0aW9uV29ya2VyLCBkb25lRm4pOyAvLyBvcHRpb25hbGx5LCByZXF1ZXN0IHRoZSBkZWNyeXB0aW9uIGtleVxuXG4gIGlmIChzZWdtZW50LmtleSAmJiAhc2VnbWVudC5rZXkuYnl0ZXMpIHtcbiAgICB2YXIga2V5UmVxdWVzdE9wdGlvbnMgPSB2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHhock9wdGlvbnMsIHtcbiAgICAgIHVyaTogc2VnbWVudC5rZXkucmVzb2x2ZWRVcmksXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICB9KTtcbiAgICB2YXIga2V5UmVxdWVzdENhbGxiYWNrID0gaGFuZGxlS2V5UmVzcG9uc2Uoc2VnbWVudCwgZmluaXNoUHJvY2Vzc2luZ0ZuKTtcbiAgICB2YXIga2V5WGhyID0geGhyKGtleVJlcXVlc3RPcHRpb25zLCBrZXlSZXF1ZXN0Q2FsbGJhY2spO1xuICAgIGFjdGl2ZVhocnMucHVzaChrZXlYaHIpO1xuICB9IC8vIG9wdGlvbmFsbHksIHJlcXVlc3QgdGhlIGFzc29jaWF0ZWQgbWVkaWEgaW5pdCBzZWdtZW50XG5cblxuICBpZiAoc2VnbWVudC5tYXAgJiYgIXNlZ21lbnQubWFwLmJ5dGVzKSB7XG4gICAgdmFyIGluaXRTZWdtZW50T3B0aW9ucyA9IHZpZGVvanMkMS5tZXJnZU9wdGlvbnMoeGhyT3B0aW9ucywge1xuICAgICAgdXJpOiBzZWdtZW50Lm1hcC5yZXNvbHZlZFVyaSxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgICAgIGhlYWRlcnM6IHNlZ21lbnRYaHJIZWFkZXJzKHNlZ21lbnQubWFwKVxuICAgIH0pO1xuICAgIHZhciBpbml0U2VnbWVudFJlcXVlc3RDYWxsYmFjayA9IGhhbmRsZUluaXRTZWdtZW50UmVzcG9uc2Uoc2VnbWVudCwgY2FwdGlvblBhcnNlciwgZmluaXNoUHJvY2Vzc2luZ0ZuKTtcbiAgICB2YXIgaW5pdFNlZ21lbnRYaHIgPSB4aHIoaW5pdFNlZ21lbnRPcHRpb25zLCBpbml0U2VnbWVudFJlcXVlc3RDYWxsYmFjayk7XG4gICAgYWN0aXZlWGhycy5wdXNoKGluaXRTZWdtZW50WGhyKTtcbiAgfVxuXG4gIHZhciBzZWdtZW50UmVxdWVzdE9wdGlvbnMgPSB2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHhock9wdGlvbnMsIHtcbiAgICB1cmk6IHNlZ21lbnQucmVzb2x2ZWRVcmksXG4gICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgIGhlYWRlcnM6IHNlZ21lbnRYaHJIZWFkZXJzKHNlZ21lbnQpXG4gIH0pO1xuICB2YXIgc2VnbWVudFJlcXVlc3RDYWxsYmFjayA9IGhhbmRsZVNlZ21lbnRSZXNwb25zZShzZWdtZW50LCBjYXB0aW9uUGFyc2VyLCBmaW5pc2hQcm9jZXNzaW5nRm4pO1xuICB2YXIgc2VnbWVudFhociA9IHhocihzZWdtZW50UmVxdWVzdE9wdGlvbnMsIHNlZ21lbnRSZXF1ZXN0Q2FsbGJhY2spO1xuICBzZWdtZW50WGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgaGFuZGxlUHJvZ3Jlc3Moc2VnbWVudCwgcHJvZ3Jlc3NGbikpO1xuICBhY3RpdmVYaHJzLnB1c2goc2VnbWVudFhocik7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFib3J0QWxsKGFjdGl2ZVhocnMpO1xuICB9O1xufTsgLy8gVXRpbGl0aWVzXG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NTIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIGFuIGVsZW1lbnRcbiAqIHVzaW5nIGBnZXRDb21wdXRlZFN0eWxlYC4gRmlyZWZveCBoYXMgYSBsb25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlXG4gKiBnZXRDb21wdXRlZFN0eWxlKCkgbWF5IHJldHVybiBudWxsIHdoZW4gcnVubmluZyBpbiBhbiBpZnJhbWUgd2l0aFxuICogYGRpc3BsYXk6IG5vbmVgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4Mzk3XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCB0aGUgaHRtbGVsZW1lbnQgdG8gd29yayBvblxuICogQHBhcmFtIHtzdHJpbmd9IHRoZSBwcm9wcmV0eSB0byBnZXQgdGhlIHN0eWxlIGZvclxuICovXG5cblxudmFyIHNhZmVHZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24gc2FmZUdldENvbXB1dGVkU3R5bGUoZWwsIHByb3BlcnR5KSB7XG4gIHZhciByZXN1bHQgPSB2b2lkIDA7XG5cbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlc3VsdCA9IHdpbmRvdyQxLmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFtwcm9wZXJ0eV07XG59O1xuLyoqXG4gKiBSZXN1YWJsZSBzdGFibGUgc29ydCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7UGxheWxpc3RzfSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc29ydEZuIERpZmZlcmVudCBjb21wYXJhdG9yc1xuICogQGZ1bmN0aW9uIHN0YWJsZVNvcnRcbiAqL1xuXG5cbnZhciBzdGFibGVTb3J0ID0gZnVuY3Rpb24gc3RhYmxlU29ydChhcnJheSwgc29ydEZuKSB7XG4gIHZhciBuZXdBcnJheSA9IGFycmF5LnNsaWNlKCk7XG4gIGFycmF5LnNvcnQoZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgdmFyIGNtcCA9IHNvcnRGbihsZWZ0LCByaWdodCk7XG5cbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3QXJyYXkuaW5kZXhPZihsZWZ0KSAtIG5ld0FycmF5LmluZGV4T2YocmlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjbXA7XG4gIH0pO1xufTtcbi8qKlxuICogQSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIHNvcnQgdHdvIHBsYXlsaXN0IG9iamVjdCBieSBiYW5kd2lkdGguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxlZnQgYSBtZWRpYSBwbGF5bGlzdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHJldHVybiB7TnVtYmVyfSBHcmVhdGVyIHRoYW4gemVybyBpZiB0aGUgYmFuZHdpZHRoIGF0dHJpYnV0ZSBvZlxuICogbGVmdCBpcyBncmVhdGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIG9mIHJpZ2h0LiBMZXNzXG4gKiB0aGFuIHplcm8gaWYgdGhlIGJhbmR3aWR0aCBvZiByaWdodCBpcyBncmVhdGVyIHRoYW4gbGVmdCBhbmRcbiAqIGV4YWN0bHkgemVybyBpZiB0aGUgdHdvIGFyZSBlcXVhbC5cbiAqL1xuXG5cbnZhciBjb21wYXJlUGxheWxpc3RCYW5kd2lkdGggPSBmdW5jdGlvbiBjb21wYXJlUGxheWxpc3RCYW5kd2lkdGgobGVmdCwgcmlnaHQpIHtcbiAgdmFyIGxlZnRCYW5kd2lkdGggPSB2b2lkIDA7XG4gIHZhciByaWdodEJhbmR3aWR0aCA9IHZvaWQgMDtcblxuICBpZiAobGVmdC5hdHRyaWJ1dGVzLkJBTkRXSURUSCkge1xuICAgIGxlZnRCYW5kd2lkdGggPSBsZWZ0LmF0dHJpYnV0ZXMuQkFORFdJRFRIO1xuICB9XG5cbiAgbGVmdEJhbmR3aWR0aCA9IGxlZnRCYW5kd2lkdGggfHwgd2luZG93JDEuTnVtYmVyLk1BWF9WQUxVRTtcblxuICBpZiAocmlnaHQuYXR0cmlidXRlcy5CQU5EV0lEVEgpIHtcbiAgICByaWdodEJhbmR3aWR0aCA9IHJpZ2h0LmF0dHJpYnV0ZXMuQkFORFdJRFRIO1xuICB9XG5cbiAgcmlnaHRCYW5kd2lkdGggPSByaWdodEJhbmR3aWR0aCB8fCB3aW5kb3ckMS5OdW1iZXIuTUFYX1ZBTFVFO1xuICByZXR1cm4gbGVmdEJhbmR3aWR0aCAtIHJpZ2h0QmFuZHdpZHRoO1xufTtcbi8qKlxuICogQSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIHNvcnQgdHdvIHBsYXlsaXN0IG9iamVjdCBieSByZXNvbHV0aW9uICh3aWR0aCkuXG4gKiBAcGFyYW0ge09iamVjdH0gbGVmdCBhIG1lZGlhIHBsYXlsaXN0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IGEgbWVkaWEgcGxheWxpc3Qgb2JqZWN0XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSByZXNvbHV0aW9uLndpZHRoIGF0dHJpYnV0ZSBvZlxuICogbGVmdCBpcyBncmVhdGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIG9mIHJpZ2h0LiBMZXNzXG4gKiB0aGFuIHplcm8gaWYgdGhlIHJlc29sdXRpb24ud2lkdGggb2YgcmlnaHQgaXMgZ3JlYXRlciB0aGFuIGxlZnQgYW5kXG4gKiBleGFjdGx5IHplcm8gaWYgdGhlIHR3byBhcmUgZXF1YWwuXG4gKi9cblxuXG52YXIgY29tcGFyZVBsYXlsaXN0UmVzb2x1dGlvbiA9IGZ1bmN0aW9uIGNvbXBhcmVQbGF5bGlzdFJlc29sdXRpb24obGVmdCwgcmlnaHQpIHtcbiAgdmFyIGxlZnRXaWR0aCA9IHZvaWQgMDtcbiAgdmFyIHJpZ2h0V2lkdGggPSB2b2lkIDA7XG5cbiAgaWYgKGxlZnQuYXR0cmlidXRlcy5SRVNPTFVUSU9OICYmIGxlZnQuYXR0cmlidXRlcy5SRVNPTFVUSU9OLndpZHRoKSB7XG4gICAgbGVmdFdpZHRoID0gbGVmdC5hdHRyaWJ1dGVzLlJFU09MVVRJT04ud2lkdGg7XG4gIH1cblxuICBsZWZ0V2lkdGggPSBsZWZ0V2lkdGggfHwgd2luZG93JDEuTnVtYmVyLk1BWF9WQUxVRTtcblxuICBpZiAocmlnaHQuYXR0cmlidXRlcy5SRVNPTFVUSU9OICYmIHJpZ2h0LmF0dHJpYnV0ZXMuUkVTT0xVVElPTi53aWR0aCkge1xuICAgIHJpZ2h0V2lkdGggPSByaWdodC5hdHRyaWJ1dGVzLlJFU09MVVRJT04ud2lkdGg7XG4gIH1cblxuICByaWdodFdpZHRoID0gcmlnaHRXaWR0aCB8fCB3aW5kb3ckMS5OdW1iZXIuTUFYX1ZBTFVFOyAvLyBOT1RFIC0gRmFsbGJhY2sgdG8gYmFuZHdpZHRoIHNvcnQgYXMgYXBwcm9wcmlhdGUgaW4gY2FzZXMgd2hlcmUgbXVsdGlwbGUgcmVuZGl0aW9uc1xuICAvLyBoYXZlIHRoZSBzYW1lIG1lZGlhIGRpbWVuc2lvbnMvIHJlc29sdXRpb25cblxuICBpZiAobGVmdFdpZHRoID09PSByaWdodFdpZHRoICYmIGxlZnQuYXR0cmlidXRlcy5CQU5EV0lEVEggJiYgcmlnaHQuYXR0cmlidXRlcy5CQU5EV0lEVEgpIHtcbiAgICByZXR1cm4gbGVmdC5hdHRyaWJ1dGVzLkJBTkRXSURUSCAtIHJpZ2h0LmF0dHJpYnV0ZXMuQkFORFdJRFRIO1xuICB9XG5cbiAgcmV0dXJuIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGg7XG59O1xuLyoqXG4gKiBDaG9vc2VzIHRoZSBhcHByb3ByaWF0ZSBtZWRpYSBwbGF5bGlzdCBiYXNlZCBvbiBiYW5kd2lkdGggYW5kIHBsYXllciBzaXplXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG1hc3RlclxuICogICAgICAgIE9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWFzdGVyIG1hbmlmZXN0XG4gKiBAcGFyYW0ge051bWJlcn0gcGxheWVyQmFuZHdpZHRoXG4gKiAgICAgICAgQ3VycmVudCBjYWxjdWxhdGVkIGJhbmR3aWR0aCBvZiB0aGUgcGxheWVyXG4gKiBAcGFyYW0ge051bWJlcn0gcGxheWVyV2lkdGhcbiAqICAgICAgICBDdXJyZW50IHdpZHRoIG9mIHRoZSBwbGF5ZXIgZWxlbWVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHBsYXllckhlaWdodFxuICogICAgICAgIEN1cnJlbnQgaGVpZ2h0IG9mIHRoZSBwbGF5ZXIgZWxlbWVudFxuICogQHBhcmFtIHtCb29sZWFufSBsaW1pdFJlbmRpdGlvbkJ5UGxheWVyRGltZW5zaW9uc1xuICogICAgICAgIFRydWUgaWYgdGhlIHBsYXllciB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSB1c2VkIGR1cmluZyB0aGUgc2VsZWN0aW9uLCBmYWxzZSBvdGhlcndpc2VcbiAqIEByZXR1cm4ge1BsYXlsaXN0fSB0aGUgaGlnaGVzdCBiaXRyYXRlIHBsYXlsaXN0IGxlc3MgdGhhbiB0aGVcbiAqIGN1cnJlbnRseSBkZXRlY3RlZCBiYW5kd2lkdGgsIGFjY291bnRpbmcgZm9yIHNvbWUgYW1vdW50IG9mXG4gKiBiYW5kd2lkdGggdmFyaWFuY2VcbiAqL1xuXG5cbnZhciBzaW1wbGVTZWxlY3RvciA9IGZ1bmN0aW9uIHNpbXBsZVNlbGVjdG9yKG1hc3RlciwgcGxheWVyQmFuZHdpZHRoLCBwbGF5ZXJXaWR0aCwgcGxheWVySGVpZ2h0LCBsaW1pdFJlbmRpdGlvbkJ5UGxheWVyRGltZW5zaW9ucykge1xuICAvLyBjb252ZXJ0IHRoZSBwbGF5bGlzdHMgdG8gYW4gaW50ZXJtZWRpYXJ5IHJlcHJlc2VudGF0aW9uIHRvIG1ha2UgY29tcGFyaXNvbnMgZWFzaWVyXG4gIHZhciBzb3J0ZWRQbGF5bGlzdFJlcHMgPSBtYXN0ZXIucGxheWxpc3RzLm1hcChmdW5jdGlvbiAocGxheWxpc3QpIHtcbiAgICB2YXIgd2lkdGggPSB2b2lkIDA7XG4gICAgdmFyIGhlaWdodCA9IHZvaWQgMDtcbiAgICB2YXIgYmFuZHdpZHRoID0gdm9pZCAwO1xuICAgIHdpZHRoID0gcGxheWxpc3QuYXR0cmlidXRlcy5SRVNPTFVUSU9OICYmIHBsYXlsaXN0LmF0dHJpYnV0ZXMuUkVTT0xVVElPTi53aWR0aDtcbiAgICBoZWlnaHQgPSBwbGF5bGlzdC5hdHRyaWJ1dGVzLlJFU09MVVRJT04gJiYgcGxheWxpc3QuYXR0cmlidXRlcy5SRVNPTFVUSU9OLmhlaWdodDtcbiAgICBiYW5kd2lkdGggPSBwbGF5bGlzdC5hdHRyaWJ1dGVzLkJBTkRXSURUSDtcbiAgICBiYW5kd2lkdGggPSBiYW5kd2lkdGggfHwgd2luZG93JDEuTnVtYmVyLk1BWF9WQUxVRTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFuZHdpZHRoOiBiYW5kd2lkdGgsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHBsYXlsaXN0OiBwbGF5bGlzdFxuICAgIH07XG4gIH0pO1xuICBzdGFibGVTb3J0KHNvcnRlZFBsYXlsaXN0UmVwcywgZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgcmV0dXJuIGxlZnQuYmFuZHdpZHRoIC0gcmlnaHQuYmFuZHdpZHRoO1xuICB9KTsgLy8gZmlsdGVyIG91dCBhbnkgcGxheWxpc3RzIHRoYXQgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGR1ZSB0b1xuICAvLyBpbmNvbXBhdGlibGUgY29uZmlndXJhdGlvbnNcblxuICBzb3J0ZWRQbGF5bGlzdFJlcHMgPSBzb3J0ZWRQbGF5bGlzdFJlcHMuZmlsdGVyKGZ1bmN0aW9uIChyZXApIHtcbiAgICByZXR1cm4gIVBsYXlsaXN0LmlzSW5jb21wYXRpYmxlKHJlcC5wbGF5bGlzdCk7XG4gIH0pOyAvLyBmaWx0ZXIgb3V0IGFueSBwbGF5bGlzdHMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWQgbWFudWFsbHkgdGhyb3VnaCB0aGUgcmVwcmVzZW50YXRpb25zXG4gIC8vIGFwaSBvciBibGFja2xpc3RlZCB0ZW1wb3JhcmlseSBkdWUgdG8gcGxheWJhY2sgZXJyb3JzLlxuXG4gIHZhciBlbmFibGVkUGxheWxpc3RSZXBzID0gc29ydGVkUGxheWxpc3RSZXBzLmZpbHRlcihmdW5jdGlvbiAocmVwKSB7XG4gICAgcmV0dXJuIFBsYXlsaXN0LmlzRW5hYmxlZChyZXAucGxheWxpc3QpO1xuICB9KTtcblxuICBpZiAoIWVuYWJsZWRQbGF5bGlzdFJlcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIGVuYWJsZWQgcGxheWxpc3RzLCB0aGVuIHRoZXkgaGF2ZSBhbGwgYmVlbiBibGFja2xpc3RlZCBvciBkaXNhYmxlZFxuICAgIC8vIGJ5IHRoZSB1c2VyIHRocm91Z2ggdGhlIHJlcHJlc2VudGF0aW9ucyBhcGkuIEluIHRoaXMgY2FzZSwgaWdub3JlIGJsYWNrbGlzdGluZyBhbmRcbiAgICAvLyBmYWxsYmFjayB0byB3aGF0IHRoZSB1c2VyIHdhbnRzIGJ5IHVzaW5nIHBsYXlsaXN0cyB0aGUgdXNlciBoYXMgbm90IGRpc2FibGVkLlxuICAgIGVuYWJsZWRQbGF5bGlzdFJlcHMgPSBzb3J0ZWRQbGF5bGlzdFJlcHMuZmlsdGVyKGZ1bmN0aW9uIChyZXApIHtcbiAgICAgIHJldHVybiAhUGxheWxpc3QuaXNEaXNhYmxlZChyZXAucGxheWxpc3QpO1xuICAgIH0pO1xuICB9IC8vIGZpbHRlciBvdXQgYW55IHZhcmlhbnQgdGhhdCBoYXMgZ3JlYXRlciBlZmZlY3RpdmUgYml0cmF0ZVxuICAvLyB0aGFuIHRoZSBjdXJyZW50IGVzdGltYXRlZCBiYW5kd2lkdGhcblxuXG4gIHZhciBiYW5kd2lkdGhQbGF5bGlzdFJlcHMgPSBlbmFibGVkUGxheWxpc3RSZXBzLmZpbHRlcihmdW5jdGlvbiAocmVwKSB7XG4gICAgcmV0dXJuIHJlcC5iYW5kd2lkdGggKiBDb25maWcuQkFORFdJRFRIX1ZBUklBTkNFIDwgcGxheWVyQmFuZHdpZHRoO1xuICB9KTtcbiAgdmFyIGhpZ2hlc3RSZW1haW5pbmdCYW5kd2lkdGhSZXAgPSBiYW5kd2lkdGhQbGF5bGlzdFJlcHNbYmFuZHdpZHRoUGxheWxpc3RSZXBzLmxlbmd0aCAtIDFdOyAvLyBnZXQgYWxsIG9mIHRoZSByZW5kaXRpb25zIHdpdGggdGhlIHNhbWUgKGhpZ2hlc3QpIGJhbmR3aWR0aFxuICAvLyBhbmQgdGhlbiB0YWtpbmcgdGhlIHZlcnkgZmlyc3QgZWxlbWVudFxuXG4gIHZhciBiYW5kd2lkdGhCZXN0UmVwID0gYmFuZHdpZHRoUGxheWxpc3RSZXBzLmZpbHRlcihmdW5jdGlvbiAocmVwKSB7XG4gICAgcmV0dXJuIHJlcC5iYW5kd2lkdGggPT09IGhpZ2hlc3RSZW1haW5pbmdCYW5kd2lkdGhSZXAuYmFuZHdpZHRoO1xuICB9KVswXTsgLy8gaWYgd2UncmUgbm90IGdvaW5nIHRvIGxpbWl0IHJlbmRpdGlvbnMgYnkgcGxheWVyIHNpemUsIG1ha2UgYW4gZWFybHkgZGVjaXNpb24uXG5cbiAgaWYgKGxpbWl0UmVuZGl0aW9uQnlQbGF5ZXJEaW1lbnNpb25zID09PSBmYWxzZSkge1xuICAgIHZhciBfY2hvc2VuUmVwID0gYmFuZHdpZHRoQmVzdFJlcCB8fCBlbmFibGVkUGxheWxpc3RSZXBzWzBdIHx8IHNvcnRlZFBsYXlsaXN0UmVwc1swXTtcblxuICAgIHJldHVybiBfY2hvc2VuUmVwID8gX2Nob3NlblJlcC5wbGF5bGlzdCA6IG51bGw7XG4gIH0gLy8gZmlsdGVyIG91dCBwbGF5bGlzdHMgd2l0aG91dCByZXNvbHV0aW9uIGluZm9ybWF0aW9uXG5cblxuICB2YXIgaGF2ZVJlc29sdXRpb24gPSBiYW5kd2lkdGhQbGF5bGlzdFJlcHMuZmlsdGVyKGZ1bmN0aW9uIChyZXApIHtcbiAgICByZXR1cm4gcmVwLndpZHRoICYmIHJlcC5oZWlnaHQ7XG4gIH0pOyAvLyBzb3J0IHZhcmlhbnRzIGJ5IHJlc29sdXRpb25cblxuICBzdGFibGVTb3J0KGhhdmVSZXNvbHV0aW9uLCBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbGVmdC53aWR0aCAtIHJpZ2h0LndpZHRoO1xuICB9KTsgLy8gaWYgd2UgaGF2ZSB0aGUgZXhhY3QgcmVzb2x1dGlvbiBhcyB0aGUgcGxheWVyIHVzZSBpdFxuXG4gIHZhciByZXNvbHV0aW9uQmVzdFJlcExpc3QgPSBoYXZlUmVzb2x1dGlvbi5maWx0ZXIoZnVuY3Rpb24gKHJlcCkge1xuICAgIHJldHVybiByZXAud2lkdGggPT09IHBsYXllcldpZHRoICYmIHJlcC5oZWlnaHQgPT09IHBsYXllckhlaWdodDtcbiAgfSk7XG4gIGhpZ2hlc3RSZW1haW5pbmdCYW5kd2lkdGhSZXAgPSByZXNvbHV0aW9uQmVzdFJlcExpc3RbcmVzb2x1dGlvbkJlc3RSZXBMaXN0Lmxlbmd0aCAtIDFdOyAvLyBlbnN1cmUgdGhhdCB3ZSBwaWNrIHRoZSBoaWdoZXN0IGJhbmR3aWR0aCB2YXJpYW50IHRoYXQgaGF2ZSBleGFjdCByZXNvbHV0aW9uXG5cbiAgdmFyIHJlc29sdXRpb25CZXN0UmVwID0gcmVzb2x1dGlvbkJlc3RSZXBMaXN0LmZpbHRlcihmdW5jdGlvbiAocmVwKSB7XG4gICAgcmV0dXJuIHJlcC5iYW5kd2lkdGggPT09IGhpZ2hlc3RSZW1haW5pbmdCYW5kd2lkdGhSZXAuYmFuZHdpZHRoO1xuICB9KVswXTtcbiAgdmFyIHJlc29sdXRpb25QbHVzT25lTGlzdCA9IHZvaWQgMDtcbiAgdmFyIHJlc29sdXRpb25QbHVzT25lU21hbGxlc3QgPSB2b2lkIDA7XG4gIHZhciByZXNvbHV0aW9uUGx1c09uZVJlcCA9IHZvaWQgMDsgLy8gZmluZCB0aGUgc21hbGxlc3QgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBwbGF5ZXJcbiAgLy8gaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb2YgZXhhY3QgcmVzb2x1dGlvblxuXG4gIGlmICghcmVzb2x1dGlvbkJlc3RSZXApIHtcbiAgICByZXNvbHV0aW9uUGx1c09uZUxpc3QgPSBoYXZlUmVzb2x1dGlvbi5maWx0ZXIoZnVuY3Rpb24gKHJlcCkge1xuICAgICAgcmV0dXJuIHJlcC53aWR0aCA+IHBsYXllcldpZHRoIHx8IHJlcC5oZWlnaHQgPiBwbGF5ZXJIZWlnaHQ7XG4gICAgfSk7IC8vIGZpbmQgYWxsIHRoZSB2YXJpYW50cyBoYXZlIHRoZSBzYW1lIHNtYWxsZXN0IHJlc29sdXRpb25cblxuICAgIHJlc29sdXRpb25QbHVzT25lU21hbGxlc3QgPSByZXNvbHV0aW9uUGx1c09uZUxpc3QuZmlsdGVyKGZ1bmN0aW9uIChyZXApIHtcbiAgICAgIHJldHVybiByZXAud2lkdGggPT09IHJlc29sdXRpb25QbHVzT25lTGlzdFswXS53aWR0aCAmJiByZXAuaGVpZ2h0ID09PSByZXNvbHV0aW9uUGx1c09uZUxpc3RbMF0uaGVpZ2h0O1xuICAgIH0pOyAvLyBlbnN1cmUgdGhhdCB3ZSBhbHNvIHBpY2sgdGhlIGhpZ2hlc3QgYmFuZHdpZHRoIHZhcmlhbnQgdGhhdFxuICAgIC8vIGlzIGp1c3QtbGFyZ2VyLXRoYW4gdGhlIHZpZGVvIHBsYXllclxuXG4gICAgaGlnaGVzdFJlbWFpbmluZ0JhbmR3aWR0aFJlcCA9IHJlc29sdXRpb25QbHVzT25lU21hbGxlc3RbcmVzb2x1dGlvblBsdXNPbmVTbWFsbGVzdC5sZW5ndGggLSAxXTtcbiAgICByZXNvbHV0aW9uUGx1c09uZVJlcCA9IHJlc29sdXRpb25QbHVzT25lU21hbGxlc3QuZmlsdGVyKGZ1bmN0aW9uIChyZXApIHtcbiAgICAgIHJldHVybiByZXAuYmFuZHdpZHRoID09PSBoaWdoZXN0UmVtYWluaW5nQmFuZHdpZHRoUmVwLmJhbmR3aWR0aDtcbiAgICB9KVswXTtcbiAgfSAvLyBmYWxsYmFjayBjaGFpbiBvZiB2YXJpYW50c1xuXG5cbiAgdmFyIGNob3NlblJlcCA9IHJlc29sdXRpb25QbHVzT25lUmVwIHx8IHJlc29sdXRpb25CZXN0UmVwIHx8IGJhbmR3aWR0aEJlc3RSZXAgfHwgZW5hYmxlZFBsYXlsaXN0UmVwc1swXSB8fCBzb3J0ZWRQbGF5bGlzdFJlcHNbMF07XG4gIHJldHVybiBjaG9zZW5SZXAgPyBjaG9zZW5SZXAucGxheWxpc3QgOiBudWxsO1xufTsgLy8gUGxheWxpc3QgU2VsZWN0b3JzXG5cbi8qKlxuICogQ2hvb3NlcyB0aGUgYXBwcm9wcmlhdGUgbWVkaWEgcGxheWxpc3QgYmFzZWQgb24gdGhlIG1vc3QgcmVjZW50XG4gKiBiYW5kd2lkdGggZXN0aW1hdGUgYW5kIHRoZSBwbGF5ZXIgc2l6ZS5cbiAqXG4gKiBFeHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gaW5zdGFuY2Ugb2YgSGxzSGFuZGxlclxuICpcbiAqIEByZXR1cm4ge1BsYXlsaXN0fSB0aGUgaGlnaGVzdCBiaXRyYXRlIHBsYXlsaXN0IGxlc3MgdGhhbiB0aGVcbiAqIGN1cnJlbnRseSBkZXRlY3RlZCBiYW5kd2lkdGgsIGFjY291bnRpbmcgZm9yIHNvbWUgYW1vdW50IG9mXG4gKiBiYW5kd2lkdGggdmFyaWFuY2VcbiAqL1xuXG5cbnZhciBsYXN0QmFuZHdpZHRoU2VsZWN0b3IgPSBmdW5jdGlvbiBsYXN0QmFuZHdpZHRoU2VsZWN0b3IoKSB7XG4gIHJldHVybiBzaW1wbGVTZWxlY3Rvcih0aGlzLnBsYXlsaXN0cy5tYXN0ZXIsIHRoaXMuc3lzdGVtQmFuZHdpZHRoLCBwYXJzZUludChzYWZlR2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRlY2hfLmVsKCksICd3aWR0aCcpLCAxMCksIHBhcnNlSW50KHNhZmVHZXRDb21wdXRlZFN0eWxlKHRoaXMudGVjaF8uZWwoKSwgJ2hlaWdodCcpLCAxMCksIHRoaXMubGltaXRSZW5kaXRpb25CeVBsYXllckRpbWVuc2lvbnMpO1xufTtcbi8qKlxuICogQ2hvb3NlcyB0aGUgYXBwcm9wcmlhdGUgbWVkaWEgcGxheWxpc3QgYmFzZWQgb24gdGhlIHBvdGVudGlhbCB0byByZWJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5nc1xuICogICAgICAgIE9iamVjdCBvZiBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byB1c2UgdGhpcyBzZWxlY3RvclxuICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzLm1hc3RlclxuICogICAgICAgIE9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWFzdGVyIG1hbmlmZXN0XG4gKiBAcGFyYW0ge051bWJlcn0gc2V0dGluZ3MuY3VycmVudFRpbWVcbiAqICAgICAgICBUaGUgY3VycmVudCB0aW1lIG9mIHRoZSBwbGF5ZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzZXR0aW5ncy5iYW5kd2lkdGhcbiAqICAgICAgICBDdXJyZW50IG1lYXN1cmVkIGJhbmR3aWR0aFxuICogQHBhcmFtIHtOdW1iZXJ9IHNldHRpbmdzLmR1cmF0aW9uXG4gKiAgICAgICAgRHVyYXRpb24gb2YgdGhlIG1lZGlhXG4gKiBAcGFyYW0ge051bWJlcn0gc2V0dGluZ3Muc2VnbWVudER1cmF0aW9uXG4gKiAgICAgICAgU2VnbWVudCBkdXJhdGlvbiB0byBiZSB1c2VkIGluIHJvdW5kIHRyaXAgdGltZSBjYWxjdWxhdGlvbnNcbiAqIEBwYXJhbSB7TnVtYmVyfSBzZXR0aW5ncy50aW1lVW50aWxSZWJ1ZmZlclxuICogICAgICAgIFRpbWUgbGVmdCBpbiBzZWNvbmRzIHVudGlsIHRoZSBwbGF5ZXIgaGFzIHRvIHJlYnVmZmVyXG4gKiBAcGFyYW0ge051bWJlcn0gc2V0dGluZ3MuY3VycmVudFRpbWVsaW5lXG4gKiAgICAgICAgVGhlIGN1cnJlbnQgdGltZWxpbmUgc2VnbWVudHMgYXJlIGJlaW5nIGxvYWRlZCBmcm9tXG4gKiBAcGFyYW0ge1N5bmNDb250cm9sbGVyfSBzZXR0aW5ncy5zeW5jQ29udHJvbGxlclxuICogICAgICAgIFN5bmNDb250cm9sbGVyIGZvciBkZXRlcm1pbmluZyBpZiB3ZSBoYXZlIGEgc3luYyBwb2ludCBmb3IgYSBnaXZlbiBwbGF5bGlzdFxuICogQHJldHVybiB7T2JqZWN0fG51bGx9XG4gKiAgICAgICAgIHtPYmplY3R9IHJldHVybi5wbGF5bGlzdFxuICogICAgICAgICBUaGUgaGlnaGVzdCBiYW5kd2lkdGggcGxheWxpc3Qgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlYnVmZmVyaW5nXG4gKiAgICAgICAgIHtOdW1iZXJ9IHJldHVybi5yZWJ1ZmZlcmluZ0ltcGFjdFxuICogICAgICAgICBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBzd2l0Y2hpbmcgdG8gdGhpcyBwbGF5bGlzdCB3aWxsIHJlYnVmZmVyLiBBXG4gKiAgICAgICAgIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoYXQgc3dpdGNoaW5nIHdpbGwgY2F1c2UgemVybyByZWJ1ZmZlcmluZy5cbiAqL1xuXG5cbnZhciBtaW5SZWJ1ZmZlck1heEJhbmR3aWR0aFNlbGVjdG9yID0gZnVuY3Rpb24gbWluUmVidWZmZXJNYXhCYW5kd2lkdGhTZWxlY3RvcihzZXR0aW5ncykge1xuICB2YXIgbWFzdGVyID0gc2V0dGluZ3MubWFzdGVyLFxuICAgICAgY3VycmVudFRpbWUgPSBzZXR0aW5ncy5jdXJyZW50VGltZSxcbiAgICAgIGJhbmR3aWR0aCA9IHNldHRpbmdzLmJhbmR3aWR0aCxcbiAgICAgIGR1cmF0aW9uJCQxID0gc2V0dGluZ3MuZHVyYXRpb24sXG4gICAgICBzZWdtZW50RHVyYXRpb24gPSBzZXR0aW5ncy5zZWdtZW50RHVyYXRpb24sXG4gICAgICB0aW1lVW50aWxSZWJ1ZmZlciA9IHNldHRpbmdzLnRpbWVVbnRpbFJlYnVmZmVyLFxuICAgICAgY3VycmVudFRpbWVsaW5lID0gc2V0dGluZ3MuY3VycmVudFRpbWVsaW5lLFxuICAgICAgc3luY0NvbnRyb2xsZXIgPSBzZXR0aW5ncy5zeW5jQ29udHJvbGxlcjsgLy8gZmlsdGVyIG91dCBhbnkgcGxheWxpc3RzIHRoYXQgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGR1ZSB0b1xuICAvLyBpbmNvbXBhdGlibGUgY29uZmlndXJhdGlvbnNcblxuICB2YXIgY29tcGF0aWJsZVBsYXlsaXN0cyA9IG1hc3Rlci5wbGF5bGlzdHMuZmlsdGVyKGZ1bmN0aW9uIChwbGF5bGlzdCkge1xuICAgIHJldHVybiAhUGxheWxpc3QuaXNJbmNvbXBhdGlibGUocGxheWxpc3QpO1xuICB9KTsgLy8gZmlsdGVyIG91dCBhbnkgcGxheWxpc3RzIHRoYXQgaGF2ZSBiZWVuIGRpc2FibGVkIG1hbnVhbGx5IHRocm91Z2ggdGhlIHJlcHJlc2VudGF0aW9uc1xuICAvLyBhcGkgb3IgYmxhY2tsaXN0ZWQgdGVtcG9yYXJpbHkgZHVlIHRvIHBsYXliYWNrIGVycm9ycy5cblxuICB2YXIgZW5hYmxlZFBsYXlsaXN0cyA9IGNvbXBhdGlibGVQbGF5bGlzdHMuZmlsdGVyKFBsYXlsaXN0LmlzRW5hYmxlZCk7XG5cbiAgaWYgKCFlbmFibGVkUGxheWxpc3RzLmxlbmd0aCkge1xuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBlbmFibGVkIHBsYXlsaXN0cywgdGhlbiB0aGV5IGhhdmUgYWxsIGJlZW4gYmxhY2tsaXN0ZWQgb3IgZGlzYWJsZWRcbiAgICAvLyBieSB0aGUgdXNlciB0aHJvdWdoIHRoZSByZXByZXNlbnRhdGlvbnMgYXBpLiBJbiB0aGlzIGNhc2UsIGlnbm9yZSBibGFja2xpc3RpbmcgYW5kXG4gICAgLy8gZmFsbGJhY2sgdG8gd2hhdCB0aGUgdXNlciB3YW50cyBieSB1c2luZyBwbGF5bGlzdHMgdGhlIHVzZXIgaGFzIG5vdCBkaXNhYmxlZC5cbiAgICBlbmFibGVkUGxheWxpc3RzID0gY29tcGF0aWJsZVBsYXlsaXN0cy5maWx0ZXIoZnVuY3Rpb24gKHBsYXlsaXN0KSB7XG4gICAgICByZXR1cm4gIVBsYXlsaXN0LmlzRGlzYWJsZWQocGxheWxpc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGJhbmR3aWR0aFBsYXlsaXN0cyA9IGVuYWJsZWRQbGF5bGlzdHMuZmlsdGVyKFBsYXlsaXN0Lmhhc0F0dHJpYnV0ZS5iaW5kKG51bGwsICdCQU5EV0lEVEgnKSk7XG4gIHZhciByZWJ1ZmZlcmluZ0VzdGltYXRlcyA9IGJhbmR3aWR0aFBsYXlsaXN0cy5tYXAoZnVuY3Rpb24gKHBsYXlsaXN0KSB7XG4gICAgdmFyIHN5bmNQb2ludCA9IHN5bmNDb250cm9sbGVyLmdldFN5bmNQb2ludChwbGF5bGlzdCwgZHVyYXRpb24kJDEsIGN1cnJlbnRUaW1lbGluZSwgY3VycmVudFRpbWUpOyAvLyBJZiB0aGVyZSBpcyBubyBzeW5jIHBvaW50IGZvciB0aGlzIHBsYXlsaXN0LCBzd2l0Y2hpbmcgdG8gaXQgd2lsbCByZXF1aXJlIGFcbiAgICAvLyBzeW5jIHJlcXVlc3QgZmlyc3QuIFRoaXMgd2lsbCBkb3VibGUgdGhlIHJlcXVlc3QgdGltZVxuXG4gICAgdmFyIG51bVJlcXVlc3RzID0gc3luY1BvaW50ID8gMSA6IDI7XG4gICAgdmFyIHJlcXVlc3RUaW1lRXN0aW1hdGUgPSBQbGF5bGlzdC5lc3RpbWF0ZVNlZ21lbnRSZXF1ZXN0VGltZShzZWdtZW50RHVyYXRpb24sIGJhbmR3aWR0aCwgcGxheWxpc3QpO1xuICAgIHZhciByZWJ1ZmZlcmluZ0ltcGFjdCA9IHJlcXVlc3RUaW1lRXN0aW1hdGUgKiBudW1SZXF1ZXN0cyAtIHRpbWVVbnRpbFJlYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICBwbGF5bGlzdDogcGxheWxpc3QsXG4gICAgICByZWJ1ZmZlcmluZ0ltcGFjdDogcmVidWZmZXJpbmdJbXBhY3RcbiAgICB9O1xuICB9KTtcbiAgdmFyIG5vUmVidWZmZXJpbmdQbGF5bGlzdHMgPSByZWJ1ZmZlcmluZ0VzdGltYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGVzdGltYXRlKSB7XG4gICAgcmV0dXJuIGVzdGltYXRlLnJlYnVmZmVyaW5nSW1wYWN0IDw9IDA7XG4gIH0pOyAvLyBTb3J0IGJ5IGJhbmR3aWR0aCBERVNDXG5cbiAgc3RhYmxlU29ydChub1JlYnVmZmVyaW5nUGxheWxpc3RzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlUGxheWxpc3RCYW5kd2lkdGgoYi5wbGF5bGlzdCwgYS5wbGF5bGlzdCk7XG4gIH0pO1xuXG4gIGlmIChub1JlYnVmZmVyaW5nUGxheWxpc3RzLmxlbmd0aCkge1xuICAgIHJldHVybiBub1JlYnVmZmVyaW5nUGxheWxpc3RzWzBdO1xuICB9XG5cbiAgc3RhYmxlU29ydChyZWJ1ZmZlcmluZ0VzdGltYXRlcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5yZWJ1ZmZlcmluZ0ltcGFjdCAtIGIucmVidWZmZXJpbmdJbXBhY3Q7XG4gIH0pO1xuICByZXR1cm4gcmVidWZmZXJpbmdFc3RpbWF0ZXNbMF0gfHwgbnVsbDtcbn07XG4vKipcbiAqIENob29zZXMgdGhlIGFwcHJvcHJpYXRlIG1lZGlhIHBsYXlsaXN0LCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlIGxvd2VzdCBiaXRyYXRlXG4gKiBvbmUgd2l0aCB2aWRlby4gIElmIG5vIHJlbmRpdGlvbnMgd2l0aCB2aWRlbyBleGlzdCwgcmV0dXJuIHRoZSBsb3dlc3QgYXVkaW8gcmVuZGl0aW9uLlxuICpcbiAqIEV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBpbnN0YW5jZSBvZiBIbHNIYW5kbGVyXG4gKlxuICogQHJldHVybiB7T2JqZWN0fG51bGx9XG4gKiAgICAgICAgIHtPYmplY3R9IHJldHVybi5wbGF5bGlzdFxuICogICAgICAgICBUaGUgbG93ZXN0IGJpdHJhdGUgcGxheWxpc3QgdGhhdCBjb250YWlucyBhIHZpZGVvIGNvZGVjLiAgSWYgbm8gc3VjaCByZW5kaXRpb25cbiAqICAgICAgICAgZXhpc3RzIHBpY2sgdGhlIGxvd2VzdCBhdWRpbyByZW5kaXRpb24uXG4gKi9cblxuXG52YXIgbG93ZXN0Qml0cmF0ZUNvbXBhdGlibGVWYXJpYW50U2VsZWN0b3IgPSBmdW5jdGlvbiBsb3dlc3RCaXRyYXRlQ29tcGF0aWJsZVZhcmlhbnRTZWxlY3RvcigpIHtcbiAgLy8gZmlsdGVyIG91dCBhbnkgcGxheWxpc3RzIHRoYXQgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGR1ZSB0b1xuICAvLyBpbmNvbXBhdGlibGUgY29uZmlndXJhdGlvbnMgb3IgcGxheWJhY2sgZXJyb3JzXG4gIHZhciBwbGF5bGlzdHMgPSB0aGlzLnBsYXlsaXN0cy5tYXN0ZXIucGxheWxpc3RzLmZpbHRlcihQbGF5bGlzdC5pc0VuYWJsZWQpOyAvLyBTb3J0IGFzY2VuZGluZyBieSBiaXRyYXRlXG5cbiAgc3RhYmxlU29ydChwbGF5bGlzdHMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVQbGF5bGlzdEJhbmR3aWR0aChhLCBiKTtcbiAgfSk7IC8vIFBhcnNlIGFuZCBhc3N1bWUgdGhhdCBwbGF5bGlzdHMgd2l0aCBubyB2aWRlbyBjb2RlYyBoYXZlIG5vIHZpZGVvXG4gIC8vICh0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLCBhbHRob3VnaCBpdCBpcyBnZW5lcmFsbHkgdHJ1ZSkuXG4gIC8vXG4gIC8vIElmIGFuIGVudGlyZSBtYW5pZmVzdCBoYXMgbm8gdmFsaWQgdmlkZW9zIGV2ZXJ5dGhpbmcgd2lsbCBnZXQgZmlsdGVyZWRcbiAgLy8gb3V0LlxuXG4gIHZhciBwbGF5bGlzdHNXaXRoVmlkZW8gPSBwbGF5bGlzdHMuZmlsdGVyKGZ1bmN0aW9uIChwbGF5bGlzdCkge1xuICAgIHJldHVybiBwYXJzZUNvZGVjcyhwbGF5bGlzdC5hdHRyaWJ1dGVzLkNPREVDUykudmlkZW9Db2RlYztcbiAgfSk7XG4gIHJldHVybiBwbGF5bGlzdHNXaXRoVmlkZW9bMF0gfHwgbnVsbDtcbn07XG4vKipcbiAqIENyZWF0ZSBjYXB0aW9ucyB0ZXh0IHRyYWNrcyBvbiB2aWRlby5qcyBpZiB0aGV5IGRvIG5vdCBleGlzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbmJhbmRUZXh0VHJhY2tzIGEgcmVmZXJlbmNlIHRvIGN1cnJlbnQgaW5iYW5kVGV4dFRyYWNrc1xuICogQHBhcmFtIHtPYmplY3R9IHRlY2ggdGhlIHZpZGVvLmpzIHRlY2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXB0aW9uU3RyZWFtcyB0aGUgY2FwdGlvbiBzdHJlYW1zIHRvIGNyZWF0ZVxuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciBjcmVhdGVDYXB0aW9uc1RyYWNrSWZOb3RFeGlzdHMgPSBmdW5jdGlvbiBjcmVhdGVDYXB0aW9uc1RyYWNrSWZOb3RFeGlzdHMoaW5iYW5kVGV4dFRyYWNrcywgdGVjaCwgY2FwdGlvblN0cmVhbXMpIHtcbiAgZm9yICh2YXIgdHJhY2tJZCBpbiBjYXB0aW9uU3RyZWFtcykge1xuICAgIGlmICghaW5iYW5kVGV4dFRyYWNrc1t0cmFja0lkXSkge1xuICAgICAgdGVjaC50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgbmFtZTogJ2hscy02MDgnXG4gICAgICB9KTtcbiAgICAgIHZhciB0cmFjayA9IHRlY2gudGV4dFRyYWNrcygpLmdldFRyYWNrQnlJZCh0cmFja0lkKTtcblxuICAgICAgaWYgKHRyYWNrKSB7XG4gICAgICAgIC8vIFJlc3VzZSBhbiBleGlzdGluZyB0cmFjayB3aXRoIGEgQ0MjIGlkIGJlY2F1c2UgdGhpcyB3YXNcbiAgICAgICAgLy8gdmVyeSBsaWtlbHkgY3JlYXRlZCBieSB2aWRlb2pzLWNvbnRyaWItaGxzIGZyb20gaW5mb3JtYXRpb25cbiAgICAgICAgLy8gaW4gdGhlIG0zdTggZm9yIHVzIHRvIHVzZVxuICAgICAgICBpbmJhbmRUZXh0VHJhY2tzW3RyYWNrSWRdID0gdHJhY2s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBhIHRyYWNrIHdpdGggdGhlIGRlZmF1bHQgYENDI2AgbGFiZWwgYW5kXG4gICAgICAgIC8vIHdpdGhvdXQgYSBsYW5ndWFnZVxuICAgICAgICBpbmJhbmRUZXh0VHJhY2tzW3RyYWNrSWRdID0gdGVjaC5hZGRSZW1vdGVUZXh0VHJhY2soe1xuICAgICAgICAgIGtpbmQ6ICdjYXB0aW9ucycsXG4gICAgICAgICAgaWQ6IHRyYWNrSWQsXG4gICAgICAgICAgbGFiZWw6IHRyYWNrSWRcbiAgICAgICAgfSwgZmFsc2UpLnRyYWNrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGFkZENhcHRpb25EYXRhID0gZnVuY3Rpb24gYWRkQ2FwdGlvbkRhdGEoX3JlZikge1xuICB2YXIgaW5iYW5kVGV4dFRyYWNrcyA9IF9yZWYuaW5iYW5kVGV4dFRyYWNrcyxcbiAgICAgIGNhcHRpb25BcnJheSA9IF9yZWYuY2FwdGlvbkFycmF5LFxuICAgICAgdGltZXN0YW1wT2Zmc2V0ID0gX3JlZi50aW1lc3RhbXBPZmZzZXQ7XG5cbiAgaWYgKCFjYXB0aW9uQXJyYXkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgQ3VlID0gd2luZG93LldlYktpdERhdGFDdWUgfHwgd2luZG93LlZUVEN1ZTtcbiAgY2FwdGlvbkFycmF5LmZvckVhY2goZnVuY3Rpb24gKGNhcHRpb24pIHtcbiAgICB2YXIgdHJhY2sgPSBjYXB0aW9uLnN0cmVhbTtcbiAgICB2YXIgc3RhcnRUaW1lID0gY2FwdGlvbi5zdGFydFRpbWU7XG4gICAgdmFyIGVuZFRpbWUgPSBjYXB0aW9uLmVuZFRpbWU7XG5cbiAgICBpZiAoIWluYmFuZFRleHRUcmFja3NbdHJhY2tdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhcnRUaW1lICs9IHRpbWVzdGFtcE9mZnNldDtcbiAgICBlbmRUaW1lICs9IHRpbWVzdGFtcE9mZnNldDtcbiAgICBpbmJhbmRUZXh0VHJhY2tzW3RyYWNrXS5hZGRDdWUobmV3IEN1ZShzdGFydFRpbWUsIGVuZFRpbWUsIGNhcHRpb24udGV4dCkpO1xuICB9KTtcbn07XG4vKipcbiAqIEBmaWxlIHNlZ21lbnQtbG9hZGVyLmpzXG4gKi9cbi8vIGluIG1zXG5cblxudmFyIENIRUNLX0JVRkZFUl9ERUxBWSA9IDUwMDtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB3ZSBzaG91bGQgY2FsbCBlbmRPZlN0cmVhbSBvbiB0aGUgbWVkaWEgc291cmNlIGJhc2VkXG4gKiBvbiB0aGUgc3RhdGUgb2YgdGhlIGJ1ZmZlciBvciBpZiBhcHBlbmVkIHNlZ21lbnQgd2FzIHRoZSBmaW5hbFxuICogc2VnbWVudCBpbiB0aGUgcGxheWxpc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0IGEgbWVkaWEgcGxheWxpc3Qgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gbWVkaWFTb3VyY2UgdGhlIE1lZGlhU291cmNlIG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXJ9IHNlZ21lbnRJbmRleCB0aGUgaW5kZXggb2Ygc2VnbWVudCB3ZSBsYXN0IGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZG8gd2UgbmVlZCB0byBjYWxsIGVuZE9mU3RyZWFtIG9uIHRoZSBNZWRpYVNvdXJjZVxuICovXG5cbnZhciBkZXRlY3RFbmRPZlN0cmVhbSA9IGZ1bmN0aW9uIGRldGVjdEVuZE9mU3RyZWFtKHBsYXlsaXN0LCBtZWRpYVNvdXJjZSwgc2VnbWVudEluZGV4KSB7XG4gIGlmICghcGxheWxpc3QgfHwgIW1lZGlhU291cmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gcGxheWxpc3Quc2VnbWVudHM7IC8vIGRldGVybWluZSBhIGZldyBib29sZWFuIHZhbHVlcyB0byBoZWxwIG1ha2UgdGhlIGJyYW5jaCBiZWxvdyBlYXNpZXJcbiAgLy8gdG8gcmVhZFxuXG4gIHZhciBhcHBlbmRlZExhc3RTZWdtZW50ID0gc2VnbWVudEluZGV4ID09PSBzZWdtZW50cy5sZW5ndGg7IC8vIGlmIHdlJ3ZlIGJ1ZmZlcmVkIHRvIHRoZSBlbmQgb2YgdGhlIHZpZGVvLCB3ZSBuZWVkIHRvIGNhbGwgZW5kT2ZTdHJlYW1cbiAgLy8gc28gdGhhdCBNZWRpYVNvdXJjZXMgY2FuIHRyaWdnZXIgdGhlIGBlbmRlZGAgZXZlbnQgd2hlbiBpdCBydW5zIG91dCBvZlxuICAvLyBidWZmZXJlZCBkYXRhIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgbWVcblxuICByZXR1cm4gcGxheWxpc3QuZW5kTGlzdCAmJiBtZWRpYVNvdXJjZS5yZWFkeVN0YXRlID09PSAnb3BlbicgJiYgYXBwZW5kZWRMYXN0U2VnbWVudDtcbn07XG5cbnZhciBmaW5pdGUgPSBmdW5jdGlvbiBmaW5pdGUobnVtKSB7XG4gIHJldHVybiB0eXBlb2YgbnVtID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShudW0pO1xufTtcblxudmFyIGlsbGVnYWxNZWRpYVN3aXRjaCA9IGZ1bmN0aW9uIGlsbGVnYWxNZWRpYVN3aXRjaChsb2FkZXJUeXBlLCBzdGFydGluZ01lZGlhLCBuZXdTZWdtZW50TWVkaWEpIHtcbiAgLy8gQWx0aG91Z2ggdGhlc2UgY2hlY2tzIHNob3VsZCBtb3N0IGxpa2VseSBjb3ZlciBub24gJ21haW4nIHR5cGVzLCBmb3Igbm93IGl0IG5hcnJvd3NcbiAgLy8gdGhlIHNjb3BlIG9mIG91ciBjaGVja3MuXG4gIGlmIChsb2FkZXJUeXBlICE9PSAnbWFpbicgfHwgIXN0YXJ0aW5nTWVkaWEgfHwgIW5ld1NlZ21lbnRNZWRpYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFuZXdTZWdtZW50TWVkaWEuY29udGFpbnNBdWRpbyAmJiAhbmV3U2VnbWVudE1lZGlhLmNvbnRhaW5zVmlkZW8pIHtcbiAgICByZXR1cm4gJ05laXRoZXIgYXVkaW8gbm9yIHZpZGVvIGZvdW5kIGluIHNlZ21lbnQuJztcbiAgfVxuXG4gIGlmIChzdGFydGluZ01lZGlhLmNvbnRhaW5zVmlkZW8gJiYgIW5ld1NlZ21lbnRNZWRpYS5jb250YWluc1ZpZGVvKSB7XG4gICAgcmV0dXJuICdPbmx5IGF1ZGlvIGZvdW5kIGluIHNlZ21lbnQgd2hlbiB3ZSBleHBlY3RlZCB2aWRlby4nICsgJyBXZSBjYW5cXCd0IHN3aXRjaCB0byBhdWRpbyBvbmx5IGZyb20gYSBzdHJlYW0gdGhhdCBoYWQgdmlkZW8uJyArICcgVG8gZ2V0IHJpZCBvZiB0aGlzIG1lc3NhZ2UsIHBsZWFzZSBhZGQgY29kZWMgaW5mb3JtYXRpb24gdG8gdGhlIG1hbmlmZXN0Lic7XG4gIH1cblxuICBpZiAoIXN0YXJ0aW5nTWVkaWEuY29udGFpbnNWaWRlbyAmJiBuZXdTZWdtZW50TWVkaWEuY29udGFpbnNWaWRlbykge1xuICAgIHJldHVybiAnVmlkZW8gZm91bmQgaW4gc2VnbWVudCB3aGVuIHdlIGV4cGVjdGVkIG9ubHkgYXVkaW8uJyArICcgV2UgY2FuXFwndCBzd2l0Y2ggdG8gYSBzdHJlYW0gd2l0aCB2aWRlbyBmcm9tIGFuIGF1ZGlvIG9ubHkgc3RyZWFtLicgKyAnIFRvIGdldCByaWQgb2YgdGhpcyBtZXNzYWdlLCBwbGVhc2UgYWRkIGNvZGVjIGluZm9ybWF0aW9uIHRvIHRoZSBtYW5pZmVzdC4nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIGEgdGltZSB2YWx1ZSB0aGF0IGlzIHNhZmUgdG8gcmVtb3ZlIGZyb20gdGhlIGJhY2sgYnVmZmVyIHdpdGhvdXQgaW50ZXJ1cHRpbmdcbiAqIHBsYXliYWNrLlxuICpcbiAqIEBwYXJhbSB7VGltZVJhbmdlfSBzZWVrYWJsZVxuICogICAgICAgIFRoZSBjdXJyZW50IHNlZWthYmxlIHJhbmdlXG4gKiBAcGFyYW0ge051bWJlcn0gY3VycmVudFRpbWVcbiAqICAgICAgICBUaGUgY3VycmVudCB0aW1lIG9mIHRoZSBwbGF5ZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0YXJnZXREdXJhdGlvblxuICogICAgICAgIFRoZSB0YXJnZXQgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnQgcGxheWxpc3RcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqICAgICAgICAgVGltZSB0aGF0IGlzIHNhZmUgdG8gcmVtb3ZlIGZyb20gdGhlIGJhY2sgYnVmZmVyIHdpdGhvdXQgaW50ZXJ1cHRpbmcgcGxheWJhY2tcbiAqL1xuXG5cbnZhciBzYWZlQmFja0J1ZmZlclRyaW1UaW1lID0gZnVuY3Rpb24gc2FmZUJhY2tCdWZmZXJUcmltVGltZShzZWVrYWJsZSQkMSwgY3VycmVudFRpbWUsIHRhcmdldER1cmF0aW9uKSB7XG4gIHZhciByZW1vdmVUb1RpbWUgPSB2b2lkIDA7XG5cbiAgaWYgKHNlZWthYmxlJCQxLmxlbmd0aCAmJiBzZWVrYWJsZSQkMS5zdGFydCgwKSA+IDAgJiYgc2Vla2FibGUkJDEuc3RhcnQoMCkgPCBjdXJyZW50VGltZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYSBzZWVrYWJsZSByYW5nZSB1c2UgdGhhdCBhcyB0aGUgbGltaXQgZm9yIHdoYXQgY2FuIGJlIHJlbW92ZWQgc2FmZWx5XG4gICAgcmVtb3ZlVG9UaW1lID0gc2Vla2FibGUkJDEuc3RhcnQoMCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHJlbW92ZSBhbnl0aGluZyBvbGRlciB0aGFuIDMwIHNlY29uZHMgYmVmb3JlIHRoZSBjdXJyZW50IHBsYXkgaGVhZFxuICAgIHJlbW92ZVRvVGltZSA9IGN1cnJlbnRUaW1lIC0gMzA7XG4gIH0gLy8gRG9uJ3QgYWxsb3cgcmVtb3ZpbmcgZnJvbSB0aGUgYnVmZmVyIHdpdGhpbiB0YXJnZXQgZHVyYXRpb24gb2YgY3VycmVudCB0aW1lXG4gIC8vIHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiByZW1vdmluZyB0aGUgR09QIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQgd2hpY2ggY291bGRcbiAgLy8gY2F1c2UgcGxheWJhY2sgc3RhbGxzLlxuXG5cbiAgcmV0dXJuIE1hdGgubWluKHJlbW92ZVRvVGltZSwgY3VycmVudFRpbWUgLSB0YXJnZXREdXJhdGlvbik7XG59O1xuXG52YXIgc2VnbWVudEluZm9TdHJpbmcgPSBmdW5jdGlvbiBzZWdtZW50SW5mb1N0cmluZyhzZWdtZW50SW5mbykge1xuICB2YXIgX3NlZ21lbnRJbmZvJHNlZ21lbnQgPSBzZWdtZW50SW5mby5zZWdtZW50LFxuICAgICAgc3RhcnQgPSBfc2VnbWVudEluZm8kc2VnbWVudC5zdGFydCxcbiAgICAgIGVuZCA9IF9zZWdtZW50SW5mbyRzZWdtZW50LmVuZCxcbiAgICAgIF9zZWdtZW50SW5mbyRwbGF5bGlzdCA9IHNlZ21lbnRJbmZvLnBsYXlsaXN0LFxuICAgICAgc2VxID0gX3NlZ21lbnRJbmZvJHBsYXlsaXN0Lm1lZGlhU2VxdWVuY2UsXG4gICAgICBpZCA9IF9zZWdtZW50SW5mbyRwbGF5bGlzdC5pZCxcbiAgICAgIF9zZWdtZW50SW5mbyRwbGF5bGlzdDIgPSBfc2VnbWVudEluZm8kcGxheWxpc3Quc2VnbWVudHMsXG4gICAgICBzZWdtZW50cyA9IF9zZWdtZW50SW5mbyRwbGF5bGlzdDIgPT09IHVuZGVmaW5lZCA/IFtdIDogX3NlZ21lbnRJbmZvJHBsYXlsaXN0MixcbiAgICAgIGluZGV4ID0gc2VnbWVudEluZm8ubWVkaWFJbmRleCxcbiAgICAgIHRpbWVsaW5lID0gc2VnbWVudEluZm8udGltZWxpbmU7XG4gIHJldHVybiBbJ2FwcGVuZGluZyBbJyArIGluZGV4ICsgJ10gb2YgWycgKyBzZXEgKyAnLCAnICsgKHNlcSArIHNlZ21lbnRzLmxlbmd0aCkgKyAnXSBmcm9tIHBsYXlsaXN0IFsnICsgaWQgKyAnXScsICdbJyArIHN0YXJ0ICsgJyA9PiAnICsgZW5kICsgJ10gaW4gdGltZWxpbmUgWycgKyB0aW1lbGluZSArICddJ10uam9pbignICcpO1xufTtcbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgbWFuYWdlcyBzZWdtZW50IGxvYWRpbmcgYW5kIGFwcGVuZGluZy5cbiAqXG4gKiBAY2xhc3MgU2VnbWVudExvYWRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIG9wdGlvbnNcbiAqIEBleHRlbmRzIHZpZGVvanMuRXZlbnRUYXJnZXRcbiAqL1xuXG5cbnZhciBTZWdtZW50TG9hZGVyID0gZnVuY3Rpb24gKF92aWRlb2pzJEV2ZW50VGFyZ2V0KSB7XG4gIGluaGVyaXRzKFNlZ21lbnRMb2FkZXIsIF92aWRlb2pzJEV2ZW50VGFyZ2V0KTtcblxuICBmdW5jdGlvbiBTZWdtZW50TG9hZGVyKHNldHRpbmdzKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VnbWVudExvYWRlcik7IC8vIGNoZWNrIHByZS1jb25kaXRpb25zXG5cbiAgICB2YXIgX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTZWdtZW50TG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU2VnbWVudExvYWRlcikpLmNhbGwodGhpcykpO1xuXG4gICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5pdGlhbGl6YXRpb24gc2V0dGluZ3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5jdXJyZW50VGltZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gY3VycmVudFRpbWUgZ2V0dGVyIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIGlmICghc2V0dGluZ3MubWVkaWFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIE1lZGlhU291cmNlIHNwZWNpZmllZCcpO1xuICAgIH0gLy8gcHVibGljIHByb3BlcnRpZXNcblxuXG4gICAgX3RoaXMuYmFuZHdpZHRoID0gc2V0dGluZ3MuYmFuZHdpZHRoO1xuICAgIF90aGlzLnRocm91Z2hwdXQgPSB7XG4gICAgICByYXRlOiAwLFxuICAgICAgY291bnQ6IDBcbiAgICB9O1xuICAgIF90aGlzLnJvdW5kVHJpcCA9IE5hTjtcblxuICAgIF90aGlzLnJlc2V0U3RhdHNfKCk7XG5cbiAgICBfdGhpcy5tZWRpYUluZGV4ID0gbnVsbDsgLy8gcHJpdmF0ZSBzZXR0aW5nc1xuXG4gICAgX3RoaXMuaGFzUGxheWVkXyA9IHNldHRpbmdzLmhhc1BsYXllZDtcbiAgICBfdGhpcy5jdXJyZW50VGltZV8gPSBzZXR0aW5ncy5jdXJyZW50VGltZTtcbiAgICBfdGhpcy5zZWVrYWJsZV8gPSBzZXR0aW5ncy5zZWVrYWJsZTtcbiAgICBfdGhpcy5zZWVraW5nXyA9IHNldHRpbmdzLnNlZWtpbmc7XG4gICAgX3RoaXMuZHVyYXRpb25fID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgX3RoaXMubWVkaWFTb3VyY2VfID0gc2V0dGluZ3MubWVkaWFTb3VyY2U7XG4gICAgX3RoaXMuaGxzXyA9IHNldHRpbmdzLmhscztcbiAgICBfdGhpcy5sb2FkZXJUeXBlXyA9IHNldHRpbmdzLmxvYWRlclR5cGU7XG4gICAgX3RoaXMuc3RhcnRpbmdNZWRpYV8gPSB2b2lkIDA7XG4gICAgX3RoaXMuc2VnbWVudE1ldGFkYXRhVHJhY2tfID0gc2V0dGluZ3Muc2VnbWVudE1ldGFkYXRhVHJhY2s7XG4gICAgX3RoaXMuZ29hbEJ1ZmZlckxlbmd0aF8gPSBzZXR0aW5ncy5nb2FsQnVmZmVyTGVuZ3RoO1xuICAgIF90aGlzLnNvdXJjZVR5cGVfID0gc2V0dGluZ3Muc291cmNlVHlwZTtcbiAgICBfdGhpcy5pbmJhbmRUZXh0VHJhY2tzXyA9IHNldHRpbmdzLmluYmFuZFRleHRUcmFja3M7XG4gICAgX3RoaXMuc3RhdGVfID0gJ0lOSVQnOyAvLyBwcml2YXRlIGluc3RhbmNlIHZhcmlhYmxlc1xuXG4gICAgX3RoaXMuY2hlY2tCdWZmZXJUaW1lb3V0XyA9IG51bGw7XG4gICAgX3RoaXMuZXJyb3JfID0gdm9pZCAwO1xuICAgIF90aGlzLmN1cnJlbnRUaW1lbGluZV8gPSAtMTtcbiAgICBfdGhpcy5wZW5kaW5nU2VnbWVudF8gPSBudWxsO1xuICAgIF90aGlzLm1pbWVUeXBlXyA9IG51bGw7XG4gICAgX3RoaXMuc291cmNlVXBkYXRlcl8gPSBudWxsO1xuICAgIF90aGlzLnhock9wdGlvbnNfID0gbnVsbDsgLy8gRnJhZ21lbnRlZCBtcDQgcGxheWJhY2tcblxuICAgIF90aGlzLmFjdGl2ZUluaXRTZWdtZW50SWRfID0gbnVsbDtcbiAgICBfdGhpcy5pbml0U2VnbWVudHNfID0ge307IC8vIEhMU2UgcGxheWJhY2tcblxuICAgIF90aGlzLmNhY2hlRW5jcnlwdGlvbktleXNfID0gc2V0dGluZ3MuY2FjaGVFbmNyeXB0aW9uS2V5cztcbiAgICBfdGhpcy5rZXlDYWNoZV8gPSB7fTsgLy8gRm1wNCBDYXB0aW9uUGFyc2VyXG5cbiAgICBpZiAoX3RoaXMubG9hZGVyVHlwZV8gPT09ICdtYWluJykge1xuICAgICAgX3RoaXMuY2FwdGlvblBhcnNlcl8gPSBuZXcgQ2FwdGlvblBhcnNlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5jYXB0aW9uUGFyc2VyXyA9IG51bGw7XG4gICAgfVxuXG4gICAgX3RoaXMuZGVjcnlwdGVyXyA9IHNldHRpbmdzLmRlY3J5cHRlcjsgLy8gTWFuYWdlcyB0aGUgdHJhY2tpbmcgYW5kIGdlbmVyYXRpb24gb2Ygc3luYy1wb2ludHMsIG1hcHBpbmdzXG4gICAgLy8gYmV0d2VlbiBhIHRpbWUgaW4gdGhlIGRpc3BsYXkgdGltZSBhbmQgYSBzZWdtZW50IGluZGV4IHdpdGhpblxuICAgIC8vIGEgcGxheWxpc3RcblxuICAgIF90aGlzLnN5bmNDb250cm9sbGVyXyA9IHNldHRpbmdzLnN5bmNDb250cm9sbGVyO1xuICAgIF90aGlzLnN5bmNQb2ludF8gPSB7XG4gICAgICBzZWdtZW50SW5kZXg6IDAsXG4gICAgICB0aW1lOiAwXG4gICAgfTtcblxuICAgIF90aGlzLnN5bmNDb250cm9sbGVyXy5vbignc3luY2luZm91cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMudHJpZ2dlcignc3luY2luZm91cGRhdGUnKTtcbiAgICB9KTtcblxuICAgIF90aGlzLm1lZGlhU291cmNlXy5hZGRFdmVudExpc3RlbmVyKCdzb3VyY2VvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmVuZGVkXyA9IGZhbHNlO1xuICAgIH0pOyAvLyAuLi5mb3IgZGV0ZXJtaW5pbmcgdGhlIGZldGNoIGxvY2F0aW9uXG5cblxuICAgIF90aGlzLmZldGNoQXRCdWZmZXJfID0gZmFsc2U7XG4gICAgX3RoaXMubG9nZ2VyXyA9IGxvZ2dlcignU2VnbWVudExvYWRlclsnICsgX3RoaXMubG9hZGVyVHlwZV8gKyAnXScpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YXRlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlXztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCQkMShuZXdTdGF0ZSkge1xuICAgICAgICBpZiAobmV3U3RhdGUgIT09IHRoaXMuc3RhdGVfKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJfKHRoaXMuc3RhdGVfICsgJyAtPiAnICsgbmV3U3RhdGUpO1xuICAgICAgICAgIHRoaXMuc3RhdGVfID0gbmV3U3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIHJlc2V0IGFsbCBvZiBvdXIgbWVkaWEgc3RhdHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBjcmVhdGVDbGFzcyhTZWdtZW50TG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0U3RhdHNfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRTdGF0c18oKSB7XG4gICAgICB0aGlzLm1lZGlhQnl0ZXNUcmFuc2ZlcnJlZCA9IDA7XG4gICAgICB0aGlzLm1lZGlhUmVxdWVzdHMgPSAwO1xuICAgICAgdGhpcy5tZWRpYVJlcXVlc3RzQWJvcnRlZCA9IDA7XG4gICAgICB0aGlzLm1lZGlhUmVxdWVzdHNUaW1lZG91dCA9IDA7XG4gICAgICB0aGlzLm1lZGlhUmVxdWVzdHNFcnJvcmVkID0gMDtcbiAgICAgIHRoaXMubWVkaWFUcmFuc2ZlckR1cmF0aW9uID0gMDtcbiAgICAgIHRoaXMubWVkaWFTZWNvbmRzTG9hZGVkID0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlzcG9zZSBvZiB0aGUgU2VnbWVudExvYWRlciBhbmQgcmVzZXQgdG8gdGhlIGRlZmF1bHQgc3RhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZGlzcG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ0RJU1BPU0VEJztcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIHRoaXMuYWJvcnRfKCk7XG5cbiAgICAgIGlmICh0aGlzLnNvdXJjZVVwZGF0ZXJfKSB7XG4gICAgICAgIHRoaXMuc291cmNlVXBkYXRlcl8uZGlzcG9zZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc2V0U3RhdHNfKCk7XG5cbiAgICAgIGlmICh0aGlzLmNhcHRpb25QYXJzZXJfKSB7XG4gICAgICAgIHRoaXMuY2FwdGlvblBhcnNlcl8ucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogYWJvcnQgYW55dGhpbmcgdGhhdCBpcyBjdXJyZW50bHkgZG9pbmcgb24gd2l0aCB0aGUgU2VnbWVudExvYWRlclxuICAgICAqIGFuZCByZXNldCB0byBhIGRlZmF1bHQgc3RhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYWJvcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSAnV0FJVElORycpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1NlZ21lbnRfKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nU2VnbWVudF8gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFib3J0XygpOyAvLyBXZSBhYm9ydGVkIHRoZSByZXF1ZXN0cyB3ZSB3ZXJlIHdhaXRpbmcgb24sIHNvIHJlc2V0IHRoZSBsb2FkZXIncyBzdGF0ZSB0byBSRUFEWVxuICAgICAgLy8gc2luY2Ugd2UgYXJlIG5vIGxvbmdlciBcIndhaXRpbmdcIiBvbiBhbnkgcmVxdWVzdHMuIFhIUiBjYWxsYmFjayBpcyBub3QgYWx3YXlzIHJ1blxuICAgICAgLy8gd2hlbiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkLiBUaGlzIHdpbGwgcHJldmVudCB0aGUgbG9hZGVyIGZyb20gYmVpbmcgc3R1Y2sgaW4gdGhlXG4gICAgICAvLyBXQUlUSU5HIHN0YXRlIGluZGVmaW5pdGVseS5cblxuICAgICAgdGhpcy5zdGF0ZSA9ICdSRUFEWSc7IC8vIGRvbid0IHdhaXQgZm9yIGJ1ZmZlciBjaGVjayB0aW1lb3V0cyB0byBiZWdpbiBmZXRjaGluZyB0aGVcbiAgICAgIC8vIG5leHQgc2VnbWVudFxuXG4gICAgICBpZiAoIXRoaXMucGF1c2VkKCkpIHtcbiAgICAgICAgdGhpcy5tb25pdG9yQnVmZmVyXygpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBhYm9ydCBhbGwgcGVuZGluZyB4aHIgcmVxdWVzdHMgYW5kIG51bGwgYW55IHBlbmRpbmcgc2VnZW1lbnRzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhYm9ydF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydF8oKSB7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nU2VnbWVudF8pIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VnbWVudF8uYWJvcnRSZXF1ZXN0cygpO1xuICAgICAgfSAvLyBjbGVhciBvdXQgdGhlIHNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkXG5cblxuICAgICAgdGhpcy5wZW5kaW5nU2VnbWVudF8gPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzZXQgYW4gZXJyb3Igb24gdGhlIHNlZ21lbnQgbG9hZGVyIGFuZCBudWxsIG91dCBhbnkgcGVuZGluZyBzZWdlbWVudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIHRoZSBlcnJvciB0byBzZXQgb24gdGhlIFNlZ21lbnRMb2FkZXJcbiAgICAgKiBAcmV0dXJuIHtFcnJvcn0gdGhlIGVycm9yIHRoYXQgd2FzIHNldCBvciB0aGF0IGlzIGN1cnJlbnRseSBzZXRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihfZXJyb3IpIHtcbiAgICAgIGlmICh0eXBlb2YgX2Vycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmVycm9yXyA9IF9lcnJvcjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wZW5kaW5nU2VnbWVudF8gPSBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JfO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VuZE9mU3RyZWFtJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5kT2ZTdHJlYW0oKSB7XG4gICAgICB0aGlzLmVuZGVkXyA9IHRydWU7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICB0aGlzLnRyaWdnZXIoJ2VuZGVkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCB0aW1lIHJhbmdlcyBhcmUgYnVmZmVyZWRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1RpbWVSYW5nZX1cbiAgICAgKiAgICAgICAgIFRpbWVSYW5nZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJ1ZmZlcmVkIHJhbmdlc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdidWZmZXJlZF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWZmZXJlZF8oKSB7XG4gICAgICBpZiAoIXRoaXMuc291cmNlVXBkYXRlcl8pIHtcbiAgICAgICAgcmV0dXJuIHZpZGVvanMkMS5jcmVhdGVUaW1lUmFuZ2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVVwZGF0ZXJfLmJ1ZmZlcmVkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgaW5pdCBzZWdtZW50IGZvciB0aGUgcHJvdmlkZWQgbWFwXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwXG4gICAgICogICAgICAgIFRoZSBtYXAgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5pdCBzZWdtZW50IHRvIGdldCBvciBzZXRcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBzZXRcbiAgICAgKiAgICAgICAgSWYgdHJ1ZSwgdGhlIGluaXQgc2VnbWVudCBmb3IgdGhlIHByb3ZpZGVkIG1hcCBzaG91bGQgYmUgc2F2ZWRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogICAgICAgICBtYXAgb2JqZWN0IGZvciBkZXNpcmVkIGluaXQgc2VnbWVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbml0U2VnbWVudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRTZWdtZW50KG1hcCkge1xuICAgICAgdmFyIHNldCQkMSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICAgIGlmICghbWFwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgaWQgPSBpbml0U2VnbWVudElkKG1hcCk7XG4gICAgICB2YXIgc3RvcmVkTWFwID0gdGhpcy5pbml0U2VnbWVudHNfW2lkXTtcblxuICAgICAgaWYgKHNldCQkMSAmJiAhc3RvcmVkTWFwICYmIG1hcC5ieXRlcykge1xuICAgICAgICB0aGlzLmluaXRTZWdtZW50c19baWRdID0gc3RvcmVkTWFwID0ge1xuICAgICAgICAgIHJlc29sdmVkVXJpOiBtYXAucmVzb2x2ZWRVcmksXG4gICAgICAgICAgYnl0ZXJhbmdlOiBtYXAuYnl0ZXJhbmdlLFxuICAgICAgICAgIGJ5dGVzOiBtYXAuYnl0ZXMsXG4gICAgICAgICAgdGltZXNjYWxlczogbWFwLnRpbWVzY2FsZXMsXG4gICAgICAgICAgdmlkZW9UcmFja0lkczogbWFwLnZpZGVvVHJhY2tJZHNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3JlZE1hcCB8fCBtYXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMga2V5IGZvciB0aGUgcHJvdmlkZWQga2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAgICogICAgICAgIFRoZSBrZXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUga2V5IHRvIGdldCBvciBzZXRcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBzZXRcbiAgICAgKiAgICAgICAgSWYgdHJ1ZSwgdGhlIGtleSBmb3IgdGhlIHByb3ZpZGVkIGtleSBzaG91bGQgYmUgc2F2ZWRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogICAgICAgICBLZXkgb2JqZWN0IGZvciBkZXNpcmVkIGtleVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZWdtZW50S2V5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VnbWVudEtleShrZXkpIHtcbiAgICAgIHZhciBzZXQkJDEgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkID0gc2VnbWVudEtleUlkKGtleSk7XG4gICAgICB2YXIgc3RvcmVkS2V5ID0gdGhpcy5rZXlDYWNoZV9baWRdOyAvLyBUT0RPOiBXZSBzaG91bGQgdXNlIHRoZSBIVFRQIEV4cGlyZXMgaGVhZGVyIHRvIGludmFsaWRhdGUgb3VyIGNhY2hlIHBlclxuICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXBhbnRvcy1odHRwLWxpdmUtc3RyZWFtaW5nLTIzI3NlY3Rpb24tNi4yLjNcblxuICAgICAgaWYgKHRoaXMuY2FjaGVFbmNyeXB0aW9uS2V5c18gJiYgc2V0JCQxICYmICFzdG9yZWRLZXkgJiYga2V5LmJ5dGVzKSB7XG4gICAgICAgIHRoaXMua2V5Q2FjaGVfW2lkXSA9IHN0b3JlZEtleSA9IHtcbiAgICAgICAgICByZXNvbHZlZFVyaToga2V5LnJlc29sdmVkVXJpLFxuICAgICAgICAgIGJ5dGVzOiBrZXkuYnl0ZXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgcmVzb2x2ZWRVcmk6IChzdG9yZWRLZXkgfHwga2V5KS5yZXNvbHZlZFVyaVxuICAgICAgfTtcblxuICAgICAgaWYgKHN0b3JlZEtleSkge1xuICAgICAgICByZXN1bHQuYnl0ZXMgPSBzdG9yZWRLZXkuYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgY29uZmlndXJhdGlvbiByZXF1aXJlZCBmb3IgbG9hZGluZyBpcyBwcmVzZW50LCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoZSBhbGwgY29uZmlndXJhdGlvbiBpcyByZWFkeSBmb3IgbG9hZGluZ1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NvdWxkQmVnaW5Mb2FkaW5nXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvdWxkQmVnaW5Mb2FkaW5nXygpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlsaXN0XyAmJiAoIC8vIHRoZSBzb3VyY2UgdXBkYXRlciBpcyBjcmVhdGVkIHdoZW4gaW5pdF8gaXMgY2FsbGVkLCBzbyBlaXRoZXIgaGF2aW5nIGFcbiAgICAgIC8vIHNvdXJjZSB1cGRhdGVyIG9yIGJlaW5nIGluIHRoZSBJTklUIHN0YXRlIHdpdGggYSBtaW1lVHlwZSBpcyBlbm91Z2hcbiAgICAgIC8vIHRvIHNheSB3ZSBoYXZlIGFsbCB0aGUgbmVlZGVkIGNvbmZpZ3VyYXRpb24gdG8gc3RhcnQgbG9hZGluZy5cbiAgICAgIHRoaXMuc291cmNlVXBkYXRlcl8gfHwgdGhpcy5taW1lVHlwZV8gJiYgdGhpcy5zdGF0ZSA9PT0gJ0lOSVQnKSAmJiAhdGhpcy5wYXVzZWQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogbG9hZCBhIHBsYXlsaXN0IGFuZCBzdGFydCB0byBmaWxsIHRoZSBidWZmZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAvLyB1bi1wYXVzZVxuICAgICAgdGhpcy5tb25pdG9yQnVmZmVyXygpOyAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgcGxheWxpc3QgeWV0LCBrZWVwIHdhaXRpbmcgZm9yIG9uZSB0byBiZVxuICAgICAgLy8gc3BlY2lmaWVkXG5cbiAgICAgIGlmICghdGhpcy5wbGF5bGlzdF8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIGZvciB0aGlzXG5cblxuICAgICAgdGhpcy5zeW5jQ29udHJvbGxlcl8uc2V0RGF0ZVRpbWVNYXBwaW5nKHRoaXMucGxheWxpc3RfKTsgLy8gaWYgYWxsIHRoZSBjb25maWd1cmF0aW9uIGlzIHJlYWR5LCBpbml0aWFsaXplIGFuZCBiZWdpbiBsb2FkaW5nXG5cbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnSU5JVCcgJiYgdGhpcy5jb3VsZEJlZ2luTG9hZGluZ18oKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0XygpO1xuICAgICAgfSAvLyBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcgYSBzZWdtZW50IGFscmVhZHksIGRvbid0XG4gICAgICAvLyBraWNrIG9mZiBhbiBhZGRpdGlvbmFsIHNlZ21lbnQgcmVxdWVzdFxuXG5cbiAgICAgIGlmICghdGhpcy5jb3VsZEJlZ2luTG9hZGluZ18oKSB8fCB0aGlzLnN0YXRlICE9PSAnUkVBRFknICYmIHRoaXMuc3RhdGUgIT09ICdJTklUJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhdGUgPSAnUkVBRFknO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmNlIGFsbCB0aGUgc3RhcnRpbmcgcGFyYW1ldGVycyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBiZWdpblxuICAgICAqIG9wZXJhdGlvbi4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBmcm9tIHRoZSBJTklUXG4gICAgICogc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbml0XycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRfKCkge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdSRUFEWSc7XG4gICAgICB0aGlzLnNvdXJjZVVwZGF0ZXJfID0gbmV3IFNvdXJjZVVwZGF0ZXIodGhpcy5tZWRpYVNvdXJjZV8sIHRoaXMubWltZVR5cGVfLCB0aGlzLmxvYWRlclR5cGVfLCB0aGlzLnNvdXJjZUJ1ZmZlckVtaXR0ZXJfKTtcbiAgICAgIHRoaXMucmVzZXRFdmVyeXRoaW5nKCk7XG4gICAgICByZXR1cm4gdGhpcy5tb25pdG9yQnVmZmVyXygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzZXQgYSBwbGF5bGlzdCBvbiB0aGUgc2VnbWVudCBsb2FkZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGxheWxpc3RMb2FkZXJ9IG1lZGlhIHRoZSBwbGF5bGlzdCB0byBzZXQgb24gdGhlIHNlZ21lbnQgbG9hZGVyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3BsYXlsaXN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGxheWxpc3QobmV3UGxheWxpc3QpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCFuZXdQbGF5bGlzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGRQbGF5bGlzdCA9IHRoaXMucGxheWxpc3RfO1xuICAgICAgdmFyIHNlZ21lbnRJbmZvID0gdGhpcy5wZW5kaW5nU2VnbWVudF87XG4gICAgICB0aGlzLnBsYXlsaXN0XyA9IG5ld1BsYXlsaXN0O1xuICAgICAgdGhpcy54aHJPcHRpb25zXyA9IG9wdGlvbnM7IC8vIHdoZW4gd2UgaGF2ZW4ndCBzdGFydGVkIHBsYXlpbmcgeWV0LCB0aGUgc3RhcnQgb2YgYSBsaXZlIHBsYXlsaXN0XG4gICAgICAvLyBpcyBhbHdheXMgb3VyIHplcm8tdGltZSBzbyBmb3JjZSBhIHN5bmMgdXBkYXRlIGVhY2ggdGltZSB0aGUgcGxheWxpc3RcbiAgICAgIC8vIGlzIHJlZnJlc2hlZCBmcm9tIHRoZSBzZXJ2ZXJcblxuICAgICAgaWYgKCF0aGlzLmhhc1BsYXllZF8oKSkge1xuICAgICAgICBuZXdQbGF5bGlzdC5zeW5jSW5mbyA9IHtcbiAgICAgICAgICBtZWRpYVNlcXVlbmNlOiBuZXdQbGF5bGlzdC5tZWRpYVNlcXVlbmNlLFxuICAgICAgICAgIHRpbWU6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9sZElkID0gbnVsbDtcblxuICAgICAgaWYgKG9sZFBsYXlsaXN0KSB7XG4gICAgICAgIGlmIChvbGRQbGF5bGlzdC5pZCkge1xuICAgICAgICAgIG9sZElkID0gb2xkUGxheWxpc3QuaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAob2xkUGxheWxpc3QudXJpKSB7XG4gICAgICAgICAgb2xkSWQgPSBvbGRQbGF5bGlzdC51cmk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXJfKCdwbGF5bGlzdCB1cGRhdGUgWycgKyBvbGRJZCArICcgPT4gJyArIChuZXdQbGF5bGlzdC5pZCB8fCBuZXdQbGF5bGlzdC51cmkpICsgJ10nKTsgLy8gaW4gVk9ELCB0aGlzIGlzIGFsd2F5cyBhIHJlbmRpdGlvbiBzd2l0Y2ggKG9yIHdlIHVwZGF0ZWQgb3VyIHN5bmNJbmZvIGFib3ZlKVxuICAgICAgLy8gaW4gTElWRSwgd2UgYWx3YXlzIHdhbnQgdG8gdXBkYXRlIHdpdGggbmV3IHBsYXlsaXN0cyAoaW5jbHVkaW5nIHJlZnJlc2hlcylcblxuICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jaW5mb3VwZGF0ZScpOyAvLyBpZiB3ZSB3ZXJlIHVucGF1c2VkIGJ1dCB3YWl0aW5nIGZvciBhIHBsYXlsaXN0LCBzdGFydFxuICAgICAgLy8gYnVmZmVyaW5nIG5vd1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ0lOSVQnICYmIHRoaXMuY291bGRCZWdpbkxvYWRpbmdfKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdF8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvbGRQbGF5bGlzdCB8fCBvbGRQbGF5bGlzdC51cmkgIT09IG5ld1BsYXlsaXN0LnVyaSkge1xuICAgICAgICBpZiAodGhpcy5tZWRpYUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gd2UgbXVzdCBcInJlc3luY1wiIHRoZSBzZWdtZW50IGxvYWRlciB3aGVuIHdlIHN3aXRjaCByZW5kaXRpb25zIGFuZFxuICAgICAgICAgIC8vIHRoZSBzZWdtZW50IGxvYWRlciBpcyBhbHJlYWR5IHN5bmNlZCB0byB0aGUgcHJldmlvdXMgcmVuZGl0aW9uXG4gICAgICAgICAgdGhpcy5yZXN5bmNMb2FkZXIoKTtcbiAgICAgICAgfSAvLyB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gYG9sZFBsYXlsaXN0YCBiZWluZyBkZWZpbmVkXG5cblxuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHdlIHJlbG9hZGVkIHRoZSBzYW1lIHBsYXlsaXN0IHNvIHdlIGFyZSBpbiBhIGxpdmUgc2NlbmFyaW9cbiAgICAgIC8vIGFuZCB3ZSB3aWxsIGxpa2VseSBuZWVkIHRvIGFkanVzdCB0aGUgbWVkaWFJbmRleFxuXG5cbiAgICAgIHZhciBtZWRpYVNlcXVlbmNlRGlmZiA9IG5ld1BsYXlsaXN0Lm1lZGlhU2VxdWVuY2UgLSBvbGRQbGF5bGlzdC5tZWRpYVNlcXVlbmNlO1xuICAgICAgdGhpcy5sb2dnZXJfKCdsaXZlIHdpbmRvdyBzaGlmdCBbJyArIG1lZGlhU2VxdWVuY2VEaWZmICsgJ10nKTsgLy8gdXBkYXRlIHRoZSBtZWRpYUluZGV4IG9uIHRoZSBTZWdtZW50TG9hZGVyXG4gICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHdlIGNhbiBhYm9ydCBhIHJlcXVlc3QgYW5kIHRoaXMgdmFsdWUgbXVzdCBiZVxuICAgICAgLy8gZXF1YWwgdG8gdGhlIGxhc3QgYXBwZW5kZWQgbWVkaWFJbmRleFxuXG4gICAgICBpZiAodGhpcy5tZWRpYUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWVkaWFJbmRleCAtPSBtZWRpYVNlcXVlbmNlRGlmZjtcbiAgICAgIH0gLy8gdXBkYXRlIHRoZSBtZWRpYUluZGV4IG9uIHRoZSBTZWdtZW50SW5mbyBvYmplY3RcbiAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugd2Ugd2lsbCB1cGRhdGUgdGhpcy5tZWRpYUluZGV4IHdpdGggdGhpcyB2YWx1ZVxuICAgICAgLy8gaW4gYGhhbmRsZVVwZGF0ZUVuZF9gIGFmdGVyIHRoZSBzZWdtZW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBlbmRlZFxuXG5cbiAgICAgIGlmIChzZWdtZW50SW5mbykge1xuICAgICAgICBzZWdtZW50SW5mby5tZWRpYUluZGV4IC09IG1lZGlhU2VxdWVuY2VEaWZmOyAvLyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVmZXJlbmNlZCBzZWdtZW50IHNvIHRoYXQgdGltaW5nIGluZm9ybWF0aW9uIGlzXG4gICAgICAgIC8vIHNhdmVkIGZvciB0aGUgbmV3IHBsYXlsaXN0J3Mgc2VnbWVudCwgaG93ZXZlciwgaWYgdGhlIHNlZ21lbnQgZmVsbCBvZmYgdGhlXG4gICAgICAgIC8vIHBsYXlsaXN0LCB3ZSBjYW4gbGVhdmUgdGhlIG9sZCByZWZlcmVuY2UgYW5kIGp1c3QgbG9zZSB0aGUgdGltaW5nIGluZm9cblxuICAgICAgICBpZiAoc2VnbWVudEluZm8ubWVkaWFJbmRleCA+PSAwKSB7XG4gICAgICAgICAgc2VnbWVudEluZm8uc2VnbWVudCA9IG5ld1BsYXlsaXN0LnNlZ21lbnRzW3NlZ21lbnRJbmZvLm1lZGlhSW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3luY0NvbnRyb2xsZXJfLnNhdmVFeHBpcmVkU2VnbWVudEluZm8ob2xkUGxheWxpc3QsIG5ld1BsYXlsaXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJldmVudCB0aGUgbG9hZGVyIGZyb20gZmV0Y2hpbmcgYWRkaXRpb25hbCBzZWdtZW50cy4gSWYgdGhlcmVcbiAgICAgKiBpcyBhIHNlZ21lbnQgcmVxdWVzdCBvdXRzdGFuZGluZywgaXQgd2lsbCBmaW5pc2ggcHJvY2Vzc2luZ1xuICAgICAqIGJlZm9yZSB0aGUgbG9hZGVyIGhhbHRzLiBBIHNlZ21lbnQgbG9hZGVyIGNhbiBiZSB1bnBhdXNlZCBieVxuICAgICAqIGNhbGxpbmcgbG9hZCgpLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwYXVzZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tCdWZmZXJUaW1lb3V0Xykge1xuICAgICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5jaGVja0J1ZmZlclRpbWVvdXRfKTtcbiAgICAgICAgdGhpcy5jaGVja0J1ZmZlclRpbWVvdXRfID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBzZWdtZW50IGxvYWRlciBpcyBmZXRjaGluZyBhZGRpdGlvbmFsXG4gICAgICogc2VnbWVudHMgd2hlbiBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkuIFRoaXMgcHJvcGVydHkgY2FuIGJlXG4gICAgICogbW9kaWZpZWQgdGhyb3VnaCBjYWxscyB0byBwYXVzZSgpIGFuZCBsb2FkKCkuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3BhdXNlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQnVmZmVyVGltZW91dF8gPT09IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNyZWF0ZS9zZXQgdGhlIGZvbGxvd2luZyBtaW1ldHlwZSBvbiB0aGUgU291cmNlQnVmZmVyIHRocm91Z2ggYVxuICAgICAqIFNvdXJjZVVwZGF0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtaW1lVHlwZSB0aGUgbWltZSB0eXBlIHN0cmluZyB0byB1c2VcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlQnVmZmVyRW1pdHRlciBhbiBldmVudCBlbWl0dGVyIHRoYXQgZmlyZXMgd2hlbiBhIHNvdXJjZSBidWZmZXJcbiAgICAgKiBpcyBhZGRlZCB0byB0aGUgbWVkaWEgc291cmNlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ21pbWVUeXBlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWltZVR5cGUoX21pbWVUeXBlLCBzb3VyY2VCdWZmZXJFbWl0dGVyKSB7XG4gICAgICBpZiAodGhpcy5taW1lVHlwZV8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1pbWVUeXBlXyA9IF9taW1lVHlwZTtcbiAgICAgIHRoaXMuc291cmNlQnVmZmVyRW1pdHRlcl8gPSBzb3VyY2VCdWZmZXJFbWl0dGVyOyAvLyBpZiB3ZSB3ZXJlIHVucGF1c2VkIGJ1dCB3YWl0aW5nIGZvciBhIHNvdXJjZVVwZGF0ZXIsIHN0YXJ0XG4gICAgICAvLyBidWZmZXJpbmcgbm93XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnSU5JVCcgJiYgdGhpcy5jb3VsZEJlZ2luTG9hZGluZ18oKSkge1xuICAgICAgICB0aGlzLmluaXRfKCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBhbGwgdGhlIGJ1ZmZlcmVkIGRhdGEgYW5kIHJlc2V0IHRoZSBTZWdtZW50TG9hZGVyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2RvbmVdIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHJlbW92ZVxuICAgICAqIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldEV2ZXJ5dGhpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldEV2ZXJ5dGhpbmcoZG9uZSkge1xuICAgICAgdGhpcy5lbmRlZF8gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXRMb2FkZXIoKTtcbiAgICAgIHRoaXMucmVtb3ZlKDAsIHRoaXMuZHVyYXRpb25fKCksIGRvbmUpOyAvLyBjbGVhcnMgZm1wNCBjYXB0aW9uc1xuXG4gICAgICBpZiAodGhpcy5jYXB0aW9uUGFyc2VyXykge1xuICAgICAgICB0aGlzLmNhcHRpb25QYXJzZXJfLmNsZWFyQWxsQ2FwdGlvbnMoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldGV2ZXJ5dGhpbmcnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yY2UgdGhlIFNlZ21lbnRMb2FkZXIgdG8gcmVzeW5jIGFuZCBzdGFydCBsb2FkaW5nIGFyb3VuZCB0aGUgY3VycmVudFRpbWUgaW5zdGVhZFxuICAgICAqIG9mIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogVXNlZnVsIGZvciBmYXN0IHF1YWxpdHkgY2hhbmdlc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldExvYWRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0TG9hZGVyKCkge1xuICAgICAgdGhpcy5mZXRjaEF0QnVmZmVyXyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXN5bmNMb2FkZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yY2UgdGhlIFNlZ21lbnRMb2FkZXIgdG8gcmVzdGFydCBzeW5jaHJvbml6YXRpb24gYW5kIG1ha2UgYSBjb25zZXJ2YXRpdmUgZ3Vlc3NcbiAgICAgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBzaW1wbGUgd2Fsay1mb3J3YXJkIG1ldGhvZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXN5bmNMb2FkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXN5bmNMb2FkZXIoKSB7XG4gICAgICB0aGlzLm1lZGlhSW5kZXggPSBudWxsO1xuICAgICAgdGhpcy5zeW5jUG9pbnRfID0gbnVsbDtcbiAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFueSBkYXRhIGluIHRoZSBzb3VyY2UgYnVmZmVyIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lc1xuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydCAtIHRoZSBzdGFydCB0aW1lIG9mIHRoZSByZWdpb24gdG8gcmVtb3ZlIGZyb20gdGhlIGJ1ZmZlclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBlbmQgLSB0aGUgZW5kIHRpbWUgb2YgdGhlIHJlZ2lvbiB0byByZW1vdmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2RvbmVdIC0gYW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgcmVtb3ZlXG4gICAgICogb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JlbW92ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShzdGFydCwgZW5kLCBkb25lKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VVcGRhdGVyXykge1xuICAgICAgICB0aGlzLnNvdXJjZVVwZGF0ZXJfLnJlbW92ZShzdGFydCwgZW5kLCBkb25lKTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlQ3Vlc0Zyb21UcmFjayhzdGFydCwgZW5kLCB0aGlzLnNlZ21lbnRNZXRhZGF0YVRyYWNrXyk7XG5cbiAgICAgIGlmICh0aGlzLmluYmFuZFRleHRUcmFja3NfKSB7XG4gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuaW5iYW5kVGV4dFRyYWNrc18pIHtcbiAgICAgICAgICByZW1vdmVDdWVzRnJvbVRyYWNrKHN0YXJ0LCBlbmQsIHRoaXMuaW5iYW5kVGV4dFRyYWNrc19baWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiAocmUtKXNjaGVkdWxlIG1vbml0b3JCdWZmZXJUaWNrXyB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbW9uaXRvckJ1ZmZlcl8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtb25pdG9yQnVmZmVyXygpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrQnVmZmVyVGltZW91dF8pIHtcbiAgICAgICAgd2luZG93JDEuY2xlYXJUaW1lb3V0KHRoaXMuY2hlY2tCdWZmZXJUaW1lb3V0Xyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tCdWZmZXJUaW1lb3V0XyA9IHdpbmRvdyQxLnNldFRpbWVvdXQodGhpcy5tb25pdG9yQnVmZmVyVGlja18uYmluZCh0aGlzKSwgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzIGxvbmcgYXMgdGhlIFNlZ21lbnRMb2FkZXIgaXMgaW4gdGhlIFJFQURZIHN0YXRlLCBwZXJpb2RpY2FsbHlcbiAgICAgKiBpbnZva2UgZmlsbEJ1ZmZlcl8oKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ21vbml0b3JCdWZmZXJUaWNrXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1vbml0b3JCdWZmZXJUaWNrXygpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnUkVBRFknKSB7XG4gICAgICAgIHRoaXMuZmlsbEJ1ZmZlcl8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2hlY2tCdWZmZXJUaW1lb3V0Xykge1xuICAgICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQodGhpcy5jaGVja0J1ZmZlclRpbWVvdXRfKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja0J1ZmZlclRpbWVvdXRfID0gd2luZG93JDEuc2V0VGltZW91dCh0aGlzLm1vbml0b3JCdWZmZXJUaWNrXy5iaW5kKHRoaXMpLCBDSEVDS19CVUZGRVJfREVMQVkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaWxsIHRoZSBidWZmZXIgd2l0aCBzZWdlbWVudHMgdW5sZXNzIHRoZSBzb3VyY2VCdWZmZXJzIGFyZVxuICAgICAqIGN1cnJlbnRseSB1cGRhdGluZ1xuICAgICAqXG4gICAgICogTm90ZTogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBtb25pdG9yQnVmZmVyX1xuICAgICAqIGFuZCBuZXZlciBkaXJlY3RseVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZmlsbEJ1ZmZlcl8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWxsQnVmZmVyXygpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZVVwZGF0ZXJfLnVwZGF0aW5nKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3luY1BvaW50Xykge1xuICAgICAgICB0aGlzLnN5bmNQb2ludF8gPSB0aGlzLnN5bmNDb250cm9sbGVyXy5nZXRTeW5jUG9pbnQodGhpcy5wbGF5bGlzdF8sIHRoaXMuZHVyYXRpb25fKCksIHRoaXMuY3VycmVudFRpbWVsaW5lXywgdGhpcy5jdXJyZW50VGltZV8oKSk7XG4gICAgICB9IC8vIHNlZSBpZiB3ZSBuZWVkIHRvIGJlZ2luIGxvYWRpbmcgaW1tZWRpYXRlbHlcblxuXG4gICAgICB2YXIgc2VnbWVudEluZm8gPSB0aGlzLmNoZWNrQnVmZmVyXyh0aGlzLmJ1ZmZlcmVkXygpLCB0aGlzLnBsYXlsaXN0XywgdGhpcy5tZWRpYUluZGV4LCB0aGlzLmhhc1BsYXllZF8oKSwgdGhpcy5jdXJyZW50VGltZV8oKSwgdGhpcy5zeW5jUG9pbnRfKTtcblxuICAgICAgaWYgKCFzZWdtZW50SW5mbykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzRW5kT2ZTdHJlYW1fKHNlZ21lbnRJbmZvLm1lZGlhSW5kZXgpKSB7XG4gICAgICAgIHRoaXMuZW5kT2ZTdHJlYW0oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudEluZm8ubWVkaWFJbmRleCA9PT0gdGhpcy5wbGF5bGlzdF8uc2VnbWVudHMubGVuZ3RoIC0gMSAmJiB0aGlzLm1lZGlhU291cmNlXy5yZWFkeVN0YXRlID09PSAnZW5kZWQnICYmICF0aGlzLnNlZWtpbmdfKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBXZSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRpbWVzdGFtcE9mZnNldCBvZiB0aGUgc291cmNlQnVmZmVyIGlmOlxuICAgICAgLy8gLSBUaGUgc2VnbWVudC50aW1lbGluZSAhPT0gdGhpcy5jdXJyZW50VGltZWxpbmVcbiAgICAgIC8vICAgKHdlIGFyZSBjcm9zc2luZyBhIGRpc2NvbnRpbnVpdHkgc29tZWhvdylcbiAgICAgIC8vIC0gVGhlIFwidGltZXN0YW1wT2Zmc2V0XCIgZm9yIHRoZSBzdGFydCBvZiB0aGlzIHNlZ21lbnQgaXMgbGVzcyB0aGFuXG4gICAgICAvLyAgIHRoZSBjdXJyZW50bHkgc2V0IHRpbWVzdGFtcE9mZnNldFxuICAgICAgLy8gQWxzbywgY2xlYXIgY2FwdGlvbnMgaWYgd2UgYXJlIGNyb3NzaW5nIGEgZGlzY29udGludWl0eSBib3VuZGFyeVxuICAgICAgLy8gUHJldmlvdXNseSwgd2UgY2hhbmdlZCB0aGUgdGltZXN0YW1wT2Zmc2V0IGlmIHRoZSBzdGFydCBvZiB0aGlzIHNlZ21lbnRcbiAgICAgIC8vIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudGx5IHNldCB0aW1lc3RhbXBPZmZzZXQgYnV0IHRoaXMgaXNuJ3Qgd2FudGVkXG4gICAgICAvLyBhcyBpdCBjYW4gcHJvZHVjZSBiYWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgYXJvdW5kIGxvbmcgcnVubmluZ1xuICAgICAgLy8gbGl2ZSBzdHJlYW1zXG5cblxuICAgICAgaWYgKHNlZ21lbnRJbmZvLnRpbWVsaW5lICE9PSB0aGlzLmN1cnJlbnRUaW1lbGluZV8pIHtcbiAgICAgICAgdGhpcy5zeW5jQ29udHJvbGxlcl8ucmVzZXQoKTtcbiAgICAgICAgc2VnbWVudEluZm8udGltZXN0YW1wT2Zmc2V0ID0gc2VnbWVudEluZm8uc3RhcnRPZlNlZ21lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FwdGlvblBhcnNlcl8pIHtcbiAgICAgICAgICB0aGlzLmNhcHRpb25QYXJzZXJfLmNsZWFyQWxsQ2FwdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRTZWdtZW50XyhzZWdtZW50SW5mbyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhpcyBzZWdtZW50IGxvYWRlciBpcyBhdCB0aGUgZW5kIG9mIGl0J3Mgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1lZGlhSW5kZXggdGhlIGluZGV4IG9mIHNlZ21lbnQgd2UgbGFzdCBhcHBlbmRlZFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcGxheWxpc3Q9dGhpcy5wbGF5bGlzdF9dIGEgbWVkaWEgcGxheWxpc3Qgb2JqZWN0XG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgYXQgZW5kIG9mIHN0cmVhbSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0VuZE9mU3RyZWFtXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5kT2ZTdHJlYW1fKG1lZGlhSW5kZXgpIHtcbiAgICAgIHZhciBwbGF5bGlzdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5wbGF5bGlzdF87XG4gICAgICByZXR1cm4gZGV0ZWN0RW5kT2ZTdHJlYW0ocGxheWxpc3QsIHRoaXMubWVkaWFTb3VyY2VfLCBtZWRpYUluZGV4KSAmJiAhdGhpcy5zb3VyY2VVcGRhdGVyXy51cGRhdGluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoYXQgc2VnbWVudCByZXF1ZXN0IHNob3VsZCBiZSBtYWRlLCBnaXZlbiBjdXJyZW50IHBsYXliYWNrXG4gICAgICogc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RpbWVSYW5nZXN9IGJ1ZmZlcmVkIC0gdGhlIHN0YXRlIG9mIHRoZSBidWZmZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcGxheWxpc3QgLSB0aGUgcGxheWxpc3Qgb2JqZWN0IHRvIGZldGNoIHNlZ21lbnRzIGZyb21cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbWVkaWFJbmRleCAtIHRoZSBwcmV2aW91cyBtZWRpYUluZGV4IGZldGNoZWQgb3IgbnVsbFxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaGFzUGxheWVkIC0gYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB3ZSBoYXZlIHBsYXllZCBvciBub3RcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gY3VycmVudFRpbWUgLSB0aGUgcGxheWJhY2sgcG9zaXRpb24gaW4gc2Vjb25kc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzeW5jUG9pbnQgLSBhIHNlZ21lbnQgaW5mbyBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlXG4gICAgICogQHJldHVybnMge09iamVjdH0gYSBzZWdtZW50IHJlcXVlc3Qgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBzZWdtZW50IHRvIGxvYWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2hlY2tCdWZmZXJfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tCdWZmZXJfKGJ1ZmZlcmVkLCBwbGF5bGlzdCwgbWVkaWFJbmRleCwgaGFzUGxheWVkLCBjdXJyZW50VGltZSwgc3luY1BvaW50KSB7XG4gICAgICB2YXIgbGFzdEJ1ZmZlcmVkRW5kID0gMDtcbiAgICAgIHZhciBzdGFydE9mU2VnbWVudCA9IHZvaWQgMDtcblxuICAgICAgaWYgKGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBsYXN0QnVmZmVyZWRFbmQgPSBidWZmZXJlZC5lbmQoYnVmZmVyZWQubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWZmZXJlZFRpbWUgPSBNYXRoLm1heCgwLCBsYXN0QnVmZmVyZWRFbmQgLSBjdXJyZW50VGltZSk7XG5cbiAgICAgIGlmICghcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBpZiB0aGVyZSBpcyBwbGVudHkgb2YgY29udGVudCBidWZmZXJlZCwgYW5kIHRoZSB2aWRlbyBoYXNcbiAgICAgIC8vIGJlZW4gcGxheWVkIGJlZm9yZSByZWxheCBmb3IgYXdoaWxlXG5cblxuICAgICAgaWYgKGJ1ZmZlcmVkVGltZSA+PSB0aGlzLmdvYWxCdWZmZXJMZW5ndGhfKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIGlmIHRoZSB2aWRlbyBoYXMgbm90IHlldCBwbGF5ZWQgb25jZSwgYW5kIHdlIGFscmVhZHkgaGF2ZVxuICAgICAgLy8gb25lIHNlZ21lbnQgZG93bmxvYWRlZCBkbyBub3RoaW5nXG5cblxuICAgICAgaWYgKCFoYXNQbGF5ZWQgJiYgYnVmZmVyZWRUaW1lID49IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIFdoZW4gdGhlIHN5bmNQb2ludCBpcyBudWxsLCB0aGVyZSBpcyBubyB3YXkgb2YgZGV0ZXJtaW5pbmcgYSBnb29kXG4gICAgICAvLyBjb25zZXJ2YXRpdmUgc2VnbWVudCBpbmRleCB0byBmZXRjaCBmcm9tXG4gICAgICAvLyBUaGUgYmVzdCB0aGluZyB0byBkbyBoZXJlIGlzIHRvIGdldCB0aGUga2luZCBvZiBzeW5jLXBvaW50IGRhdGEgYnlcbiAgICAgIC8vIG1ha2luZyBhIHJlcXVlc3RcblxuXG4gICAgICBpZiAoc3luY1BvaW50ID09PSBudWxsKSB7XG4gICAgICAgIG1lZGlhSW5kZXggPSB0aGlzLmdldFN5bmNTZWdtZW50Q2FuZGlkYXRlXyhwbGF5bGlzdCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlU2VnbWVudEluZm9fKHBsYXlsaXN0LCBtZWRpYUluZGV4LCBudWxsLCB0cnVlKTtcbiAgICAgIH0gLy8gVW5kZXIgbm9ybWFsIHBsYXliYWNrIGNvbmRpdGlvbnMgZmV0Y2hpbmcgaXMgYSBzaW1wbGUgd2FsayBmb3J3YXJkXG5cblxuICAgICAgaWYgKG1lZGlhSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1ttZWRpYUluZGV4XTtcbiAgICAgICAgc3RhcnRPZlNlZ21lbnQgPSBsYXN0QnVmZmVyZWRFbmQ7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlU2VnbWVudEluZm9fKHBsYXlsaXN0LCBtZWRpYUluZGV4ICsgMSwgc3RhcnRPZlNlZ21lbnQsIGZhbHNlKTtcbiAgICAgIH0gLy8gVGhlcmUgaXMgYSBzeW5jLXBvaW50IGJ1dCB0aGUgbGFjayBvZiBhIG1lZGlhSW5kZXggaW5kaWNhdGVzIHRoYXRcbiAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBhIGdvb2QgY29uc2VydmF0aXZlIGd1ZXNzIGFib3V0IHdoaWNoIHNlZ21lbnQgdG9cbiAgICAgIC8vIGZldGNoXG5cblxuICAgICAgaWYgKHRoaXMuZmV0Y2hBdEJ1ZmZlcl8pIHtcbiAgICAgICAgLy8gRmluZCB0aGUgc2VnbWVudCBjb250YWluaW5nIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICAgICAgICB2YXIgbWVkaWFTb3VyY2VJbmZvID0gUGxheWxpc3QuZ2V0TWVkaWFJbmZvRm9yVGltZShwbGF5bGlzdCwgbGFzdEJ1ZmZlcmVkRW5kLCBzeW5jUG9pbnQuc2VnbWVudEluZGV4LCBzeW5jUG9pbnQudGltZSk7XG4gICAgICAgIG1lZGlhSW5kZXggPSBtZWRpYVNvdXJjZUluZm8ubWVkaWFJbmRleDtcbiAgICAgICAgc3RhcnRPZlNlZ21lbnQgPSBtZWRpYVNvdXJjZUluZm8uc3RhcnRUaW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCB0aGUgc2VnbWVudCBjb250YWluaW5nIGN1cnJlbnRUaW1lXG4gICAgICAgIHZhciBfbWVkaWFTb3VyY2VJbmZvID0gUGxheWxpc3QuZ2V0TWVkaWFJbmZvRm9yVGltZShwbGF5bGlzdCwgY3VycmVudFRpbWUsIHN5bmNQb2ludC5zZWdtZW50SW5kZXgsIHN5bmNQb2ludC50aW1lKTtcblxuICAgICAgICBtZWRpYUluZGV4ID0gX21lZGlhU291cmNlSW5mby5tZWRpYUluZGV4O1xuICAgICAgICBzdGFydE9mU2VnbWVudCA9IF9tZWRpYVNvdXJjZUluZm8uc3RhcnRUaW1lO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVNlZ21lbnRJbmZvXyhwbGF5bGlzdCwgbWVkaWFJbmRleCwgc3RhcnRPZlNlZ21lbnQsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNlZ21lbnQgbG9hZGVyIGhhcyBubyByZWNvdXJzZSBleGNlcHQgdG8gZmV0Y2ggYSBzZWdtZW50IGluIHRoZVxuICAgICAqIGN1cnJlbnQgcGxheWxpc3QgYW5kIHVzZSB0aGUgaW50ZXJuYWwgdGltZXN0YW1wcyBpbiB0aGF0IHNlZ21lbnQgdG9cbiAgICAgKiBnZW5lcmF0ZSBhIHN5bmNQb2ludC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZ29vZCBjYW5kaWRhdGUgaW5kZXhcbiAgICAgKiBmb3IgdGhhdCBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0IC0gdGhlIHBsYXlsaXN0IG9iamVjdCB0byBsb29rIGZvciBhXG4gICAgICogQHJldHVybnMge051bWJlcn0gQW4gaW5kZXggb2YgYSBzZWdtZW50IGZyb20gdGhlIHBsYXlsaXN0IHRvIGxvYWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0U3luY1NlZ21lbnRDYW5kaWRhdGVfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3luY1NlZ21lbnRDYW5kaWRhdGVfKHBsYXlsaXN0KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuY3VycmVudFRpbWVsaW5lXyA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50SW5kZXhBcnJheSA9IHBsYXlsaXN0LnNlZ21lbnRzLm1hcChmdW5jdGlvbiAocywgaSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRpbWVsaW5lOiBzLnRpbWVsaW5lLFxuICAgICAgICAgIHNlZ21lbnRJbmRleDogaVxuICAgICAgICB9O1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiBzLnRpbWVsaW5lID09PSBfdGhpczIuY3VycmVudFRpbWVsaW5lXztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VnbWVudEluZGV4QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50SW5kZXhBcnJheVtNYXRoLm1pbihzZWdtZW50SW5kZXhBcnJheS5sZW5ndGggLSAxLCAxKV0uc2VnbWVudEluZGV4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTWF0aC5tYXgocGxheWxpc3Quc2VnbWVudHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2VuZXJhdGVTZWdtZW50SW5mb18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZVNlZ21lbnRJbmZvXyhwbGF5bGlzdCwgbWVkaWFJbmRleCwgc3RhcnRPZlNlZ21lbnQsIGlzU3luY1JlcXVlc3QpIHtcbiAgICAgIGlmIChtZWRpYUluZGV4IDwgMCB8fCBtZWRpYUluZGV4ID49IHBsYXlsaXN0LnNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlZ21lbnQgPSBwbGF5bGlzdC5zZWdtZW50c1ttZWRpYUluZGV4XTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlcXVlc3RJZDogJ3NlZ21lbnQtbG9hZGVyLScgKyBNYXRoLnJhbmRvbSgpLFxuICAgICAgICAvLyByZXNvbHZlIHRoZSBzZWdtZW50IFVSTCByZWxhdGl2ZSB0byB0aGUgcGxheWxpc3RcbiAgICAgICAgdXJpOiBzZWdtZW50LnJlc29sdmVkVXJpLFxuICAgICAgICAvLyB0aGUgc2VnbWVudCdzIG1lZGlhSW5kZXggYXQgdGhlIHRpbWUgaXQgd2FzIHJlcXVlc3RlZFxuICAgICAgICBtZWRpYUluZGV4OiBtZWRpYUluZGV4LFxuICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgdGhlIFNlZ21lbnRMb2FkZXIncyBzdGF0ZSB3aXRoIHRoaXNcbiAgICAgICAgLy8gc2VnbWVudCdzIG1lZGlhSW5kZXhcbiAgICAgICAgaXNTeW5jUmVxdWVzdDogaXNTeW5jUmVxdWVzdCxcbiAgICAgICAgc3RhcnRPZlNlZ21lbnQ6IHN0YXJ0T2ZTZWdtZW50LFxuICAgICAgICAvLyB0aGUgc2VnbWVudCdzIHBsYXlsaXN0XG4gICAgICAgIHBsYXlsaXN0OiBwbGF5bGlzdCxcbiAgICAgICAgLy8gdW5lbmNyeXB0ZWQgYnl0ZXMgb2YgdGhlIHNlZ21lbnRcbiAgICAgICAgYnl0ZXM6IG51bGwsXG4gICAgICAgIC8vIHdoZW4gYSBrZXkgaXMgZGVmaW5lZCBmb3IgdGhpcyBzZWdtZW50LCB0aGUgZW5jcnlwdGVkIGJ5dGVzXG4gICAgICAgIGVuY3J5cHRlZEJ5dGVzOiBudWxsLFxuICAgICAgICAvLyBUaGUgdGFyZ2V0IHRpbWVzdGFtcE9mZnNldCBmb3IgdGhpcyBzZWdtZW50IHdoZW4gd2UgYXBwZW5kIGl0XG4gICAgICAgIC8vIHRvIHRoZSBzb3VyY2UgYnVmZmVyXG4gICAgICAgIHRpbWVzdGFtcE9mZnNldDogbnVsbCxcbiAgICAgICAgLy8gVGhlIHRpbWVsaW5lIHRoYXQgdGhlIHNlZ21lbnQgaXMgaW5cbiAgICAgICAgdGltZWxpbmU6IHNlZ21lbnQudGltZWxpbmUsXG4gICAgICAgIC8vIFRoZSBleHBlY3RlZCBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudCBpbiBzZWNvbmRzXG4gICAgICAgIGR1cmF0aW9uOiBzZWdtZW50LmR1cmF0aW9uLFxuICAgICAgICAvLyByZXRhaW4gdGhlIHNlZ21lbnQgaW4gY2FzZSB0aGUgcGxheWxpc3QgdXBkYXRlcyB3aGlsZSBkb2luZyBhbiBhc3luYyBwcm9jZXNzXG4gICAgICAgIHNlZ21lbnQ6IHNlZ21lbnRcbiAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIG5ldHdvcmsgaGFzIGVub3VnaCBiYW5kd2lkdGggdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgc2VnbWVudFxuICAgICAqIHJlcXVlc3QgaW4gYSB0aW1lbHkgbWFubmVyLiBJZiBub3QsIHRoZSByZXF1ZXN0IHdpbGwgYmUgYWJvcnRlZCBlYXJseSBhbmQgYmFuZHdpZHRoXG4gICAgICogdXBkYXRlZCB0byB0cmlnZ2VyIGEgcGxheWxpc3Qgc3dpdGNoLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRzXG4gICAgICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHN0YXRzIGFib3V0IHRoZSByZXF1ZXN0IHRpbWluZyBhbmQgc2l6ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Fib3J0UmVxdWVzdEVhcmx5XycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0UmVxdWVzdEVhcmx5XyhzdGF0cykge1xuICAgICAgaWYgKHRoaXMuaGxzXy50ZWNoXy5wYXVzZWQoKSB8fCAvLyBEb24ndCBhYm9ydCBpZiB0aGUgY3VycmVudCBwbGF5bGlzdCBpcyBvbiB0aGUgbG93ZXN0RW5hYmxlZFJlbmRpdGlvblxuICAgICAgLy8gVE9ETzogUmVwbGFjZSB1c2luZyB0aW1lb3V0IHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGlzIHBsYXlsaXN0IGlzXG4gICAgICAvLyAgICAgICB0aGUgbG93ZXN0RW5hYmxlZFJlbmRpdGlvbi5cbiAgICAgICF0aGlzLnhock9wdGlvbnNfLnRpbWVvdXQgfHwgLy8gRG9uJ3QgYWJvcnQgaWYgd2UgaGF2ZSBubyBiYW5kd2lkdGggaW5mb3JtYXRpb24gdG8gZXN0aW1hdGUgc2VnbWVudCBzaXplc1xuICAgICAgIXRoaXMucGxheWxpc3RfLmF0dHJpYnV0ZXMuQkFORFdJRFRIKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gV2FpdCBhdCBsZWFzdCAxIHNlY29uZCBzaW5jZSB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGJlZm9yZVxuICAgICAgLy8gdXNpbmcgdGhlIGNhbGN1bGF0ZWQgYmFuZHdpZHRoIGZyb20gdGhlIHByb2dyZXNzIGV2ZW50IHRvIGFsbG93IHRoZSBiaXRyYXRlXG4gICAgICAvLyB0byBzdGFiaWxpemVcblxuXG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIChzdGF0cy5maXJzdEJ5dGVzUmVjZWl2ZWRBdCB8fCBEYXRlLm5vdygpKSA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLmN1cnJlbnRUaW1lXygpO1xuICAgICAgdmFyIG1lYXN1cmVkQmFuZHdpZHRoID0gc3RhdHMuYmFuZHdpZHRoO1xuICAgICAgdmFyIHNlZ21lbnREdXJhdGlvbiA9IHRoaXMucGVuZGluZ1NlZ21lbnRfLmR1cmF0aW9uO1xuICAgICAgdmFyIHJlcXVlc3RUaW1lUmVtYWluaW5nID0gUGxheWxpc3QuZXN0aW1hdGVTZWdtZW50UmVxdWVzdFRpbWUoc2VnbWVudER1cmF0aW9uLCBtZWFzdXJlZEJhbmR3aWR0aCwgdGhpcy5wbGF5bGlzdF8sIHN0YXRzLmJ5dGVzUmVjZWl2ZWQpOyAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIHRpbWVVbnRpbFJlYnVmZmVyIHNvIHdlIHN0aWxsIGNvbnNpZGVyIGFuIGVhcmx5IGFib3J0XG4gICAgICAvLyBpZiB3ZSBhcmUgb25seSBsZWZ0IHdpdGggbGVzcyB0aGFuIDEgc2Vjb25kIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICAgICAgLy8gQSBuZWdhdGl2ZSB0aW1lVW50aWxSZWJ1ZmZlcmluZyBpbmRpY2F0ZXMgd2UgYXJlIGFscmVhZHkgcmVidWZmZXJpbmdcblxuICAgICAgdmFyIHRpbWVVbnRpbFJlYnVmZmVyJCQxID0gdGltZVVudGlsUmVidWZmZXIodGhpcy5idWZmZXJlZF8oKSwgY3VycmVudFRpbWUsIHRoaXMuaGxzXy50ZWNoXy5wbGF5YmFja1JhdGUoKSkgLSAxOyAvLyBPbmx5IGNvbnNpZGVyIGFib3J0aW5nIGVhcmx5IGlmIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBmaW5pc2ggdGhlIGRvd25sb2FkXG4gICAgICAvLyBpcyBsYXJnZXIgdGhhbiB0aGUgZXN0aW1hdGVkIHRpbWUgdW50aWwgdGhlIHBsYXllciBydW5zIG91dCBvZiBmb3J3YXJkIGJ1ZmZlclxuXG4gICAgICBpZiAocmVxdWVzdFRpbWVSZW1haW5pbmcgPD0gdGltZVVudGlsUmVidWZmZXIkJDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3dpdGNoQ2FuZGlkYXRlID0gbWluUmVidWZmZXJNYXhCYW5kd2lkdGhTZWxlY3Rvcih7XG4gICAgICAgIG1hc3RlcjogdGhpcy5obHNfLnBsYXlsaXN0cy5tYXN0ZXIsXG4gICAgICAgIGN1cnJlbnRUaW1lOiBjdXJyZW50VGltZSxcbiAgICAgICAgYmFuZHdpZHRoOiBtZWFzdXJlZEJhbmR3aWR0aCxcbiAgICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb25fKCksXG4gICAgICAgIHNlZ21lbnREdXJhdGlvbjogc2VnbWVudER1cmF0aW9uLFxuICAgICAgICB0aW1lVW50aWxSZWJ1ZmZlcjogdGltZVVudGlsUmVidWZmZXIkJDEsXG4gICAgICAgIGN1cnJlbnRUaW1lbGluZTogdGhpcy5jdXJyZW50VGltZWxpbmVfLFxuICAgICAgICBzeW5jQ29udHJvbGxlcjogdGhpcy5zeW5jQ29udHJvbGxlcl9cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXN3aXRjaENhbmRpZGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWJ1ZmZlcmluZ0ltcGFjdCA9IHJlcXVlc3RUaW1lUmVtYWluaW5nIC0gdGltZVVudGlsUmVidWZmZXIkJDE7XG4gICAgICB2YXIgdGltZVNhdmVkQnlTd2l0Y2hpbmcgPSByZWJ1ZmZlcmluZ0ltcGFjdCAtIHN3aXRjaENhbmRpZGF0ZS5yZWJ1ZmZlcmluZ0ltcGFjdDtcbiAgICAgIHZhciBtaW5pbXVtVGltZVNhdmluZyA9IDAuNTsgLy8gSWYgd2UgYXJlIGFscmVhZHkgcmVidWZmZXJpbmcsIGluY3JlYXNlIHRoZSBhbW91bnQgb2YgdmFyaWFuY2Ugd2UgYWRkIHRvIHRoZVxuICAgICAgLy8gcG90ZW50aWFsIHJvdW5kIHRyaXAgdGltZSBvZiB0aGUgbmV3IHJlcXVlc3Qgc28gdGhhdCB3ZSBhcmUgbm90IHRvbyBhZ2dyZXNzaXZlXG4gICAgICAvLyB3aXRoIHN3aXRjaGluZyB0byBhIHBsYXlsaXN0IHRoYXQgbWlnaHQgc2F2ZSB1cyBhIGZyYWN0aW9uIG9mIGEgc2Vjb25kLlxuXG4gICAgICBpZiAodGltZVVudGlsUmVidWZmZXIkJDEgPD0gVElNRV9GVURHRV9GQUNUT1IpIHtcbiAgICAgICAgbWluaW11bVRpbWVTYXZpbmcgPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN3aXRjaENhbmRpZGF0ZS5wbGF5bGlzdCB8fCBzd2l0Y2hDYW5kaWRhdGUucGxheWxpc3QudXJpID09PSB0aGlzLnBsYXlsaXN0Xy51cmkgfHwgdGltZVNhdmVkQnlTd2l0Y2hpbmcgPCBtaW5pbXVtVGltZVNhdmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHNldCB0aGUgYmFuZHdpZHRoIHRvIHRoYXQgb2YgdGhlIGRlc2lyZWQgcGxheWxpc3QgYmVpbmcgc3VyZSB0byBzY2FsZSBieVxuICAgICAgLy8gQkFORFdJRFRIX1ZBUklBTkNFIGFuZCBhZGQgb25lIHNvIHRoZSBwbGF5bGlzdCBzZWxlY3RvciBkb2VzIG5vdCBleGNsdWRlIGl0XG4gICAgICAvLyBkb24ndCB0cmlnZ2VyIGEgYmFuZHdpZHRodXBkYXRlIGFzIHRoZSBiYW5kd2lkdGggaXMgYXJ0aWZpYWxcblxuXG4gICAgICB0aGlzLmJhbmR3aWR0aCA9IHN3aXRjaENhbmRpZGF0ZS5wbGF5bGlzdC5hdHRyaWJ1dGVzLkJBTkRXSURUSCAqIENvbmZpZy5CQU5EV0lEVEhfVkFSSUFOQ0UgKyAxO1xuICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgdGhpcy50cmlnZ2VyKCdlYXJseWFib3J0Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogWEhSIGBwcm9ncmVzc2AgZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH1cbiAgICAgKiAgICAgICAgVGhlIFhIUiBgcHJvZ3Jlc3NgIGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNpbXBsZVNlZ21lbnRcbiAgICAgKiAgICAgICAgQSBzaW1wbGlmaWVkIHNlZ21lbnQgb2JqZWN0IGNvcHlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVQcm9ncmVzc18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVQcm9ncmVzc18oZXZlbnQsIHNpbXBsZVNlZ21lbnQpIHtcbiAgICAgIGlmICghdGhpcy5wZW5kaW5nU2VnbWVudF8gfHwgc2ltcGxlU2VnbWVudC5yZXF1ZXN0SWQgIT09IHRoaXMucGVuZGluZ1NlZ21lbnRfLnJlcXVlc3RJZCB8fCB0aGlzLmFib3J0UmVxdWVzdEVhcmx5XyhzaW1wbGVTZWdtZW50LnN0YXRzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJpZ2dlcigncHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogbG9hZCBhIHNwZWNpZmljIHNlZ21lbnQgZnJvbSBhIHJlcXVlc3QgaW50byB0aGUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdsb2FkU2VnbWVudF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkU2VnbWVudF8oc2VnbWVudEluZm8pIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnV0FJVElORyc7XG4gICAgICB0aGlzLnBlbmRpbmdTZWdtZW50XyA9IHNlZ21lbnRJbmZvO1xuICAgICAgdGhpcy50cmltQmFja0J1ZmZlcl8oc2VnbWVudEluZm8pO1xuICAgICAgc2VnbWVudEluZm8uYWJvcnRSZXF1ZXN0cyA9IG1lZGlhU2VnbWVudFJlcXVlc3QodGhpcy5obHNfLnhociwgdGhpcy54aHJPcHRpb25zXywgdGhpcy5kZWNyeXB0ZXJfLCB0aGlzLmNhcHRpb25QYXJzZXJfLCB0aGlzLmNyZWF0ZVNpbXBsaWZpZWRTZWdtZW50T2JqXyhzZWdtZW50SW5mbyksIC8vIHByb2dyZXNzIGNhbGxiYWNrXG4gICAgICB0aGlzLmhhbmRsZVByb2dyZXNzXy5iaW5kKHRoaXMpLCB0aGlzLnNlZ21lbnRSZXF1ZXN0RmluaXNoZWRfLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cmltIHRoZSBiYWNrIGJ1ZmZlciBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG9vIG11Y2ggZGF0YVxuICAgICAqIGluIHRoZSBzb3VyY2UgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnRJbmZvIC0gdGhlIGN1cnJlbnQgc2VnbWVudFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0cmltQmFja0J1ZmZlcl8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmltQmFja0J1ZmZlcl8oc2VnbWVudEluZm8pIHtcbiAgICAgIHZhciByZW1vdmVUb1RpbWUgPSBzYWZlQmFja0J1ZmZlclRyaW1UaW1lKHRoaXMuc2Vla2FibGVfKCksIHRoaXMuY3VycmVudFRpbWVfKCksIHRoaXMucGxheWxpc3RfLnRhcmdldER1cmF0aW9uIHx8IDEwKTsgLy8gQ2hyb21lIGhhcyBhIGhhcmQgbGltaXQgb2YgMTUwTUIgb2ZcbiAgICAgIC8vIGJ1ZmZlciBhbmQgYSB2ZXJ5IGNvbnNlcnZhdGl2ZSBcImdhcmJhZ2UgY29sbGVjdG9yXCJcbiAgICAgIC8vIFdlIG1hbnVhbGx5IGNsZWFyIG91dCB0aGUgb2xkIGJ1ZmZlciB0byBlbnN1cmVcbiAgICAgIC8vIHdlIGRvbid0IHRyaWdnZXIgdGhlIFF1b3RhRXhjZWVkZWQgZXJyb3JcbiAgICAgIC8vIG9uIHRoZSBzb3VyY2UgYnVmZmVyIGR1cmluZyBzdWJzZXF1ZW50IGFwcGVuZHNcblxuICAgICAgaWYgKHJlbW92ZVRvVGltZSA+IDApIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoMCwgcmVtb3ZlVG9UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogY3JlYXRlZCBhIHNpbXBsaWZpZWQgY29weSBvZiB0aGUgc2VnbWVudCBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAqIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHRoZSBYSFIgYW5kIGRlY3J5cHRpb25cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudEluZm8gLSB0aGUgY3VycmVudCBzZWdtZW50XG4gICAgICogQHJldHVybnMge09iamVjdH0gYSBzaW1wbGlmaWVkIHNlZ21lbnQgb2JqZWN0IGNvcHlcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY3JlYXRlU2ltcGxpZmllZFNlZ21lbnRPYmpfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2ltcGxpZmllZFNlZ21lbnRPYmpfKHNlZ21lbnRJbmZvKSB7XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRJbmZvLnNlZ21lbnQ7XG4gICAgICB2YXIgc2ltcGxlU2VnbWVudCA9IHtcbiAgICAgICAgcmVzb2x2ZWRVcmk6IHNlZ21lbnQucmVzb2x2ZWRVcmksXG4gICAgICAgIGJ5dGVyYW5nZTogc2VnbWVudC5ieXRlcmFuZ2UsXG4gICAgICAgIHJlcXVlc3RJZDogc2VnbWVudEluZm8ucmVxdWVzdElkXG4gICAgICB9O1xuXG4gICAgICBpZiAoc2VnbWVudC5rZXkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG1lZGlhIHNlcXVlbmNlIGlzIGdyZWF0ZXIgdGhhbiAyXjMyLCB0aGUgSVYgd2lsbCBiZSBpbmNvcnJlY3RcbiAgICAgICAgLy8gYXNzdW1pbmcgMTBzIHNlZ21lbnRzLCB0aGF0IHdvdWxkIGJlIGFib3V0IDEzMDAgeWVhcnNcbiAgICAgICAgdmFyIGl2ID0gc2VnbWVudC5rZXkuaXYgfHwgbmV3IFVpbnQzMkFycmF5KFswLCAwLCAwLCBzZWdtZW50SW5mby5tZWRpYUluZGV4ICsgc2VnbWVudEluZm8ucGxheWxpc3QubWVkaWFTZXF1ZW5jZV0pO1xuICAgICAgICBzaW1wbGVTZWdtZW50LmtleSA9IHRoaXMuc2VnbWVudEtleShzZWdtZW50LmtleSk7XG4gICAgICAgIHNpbXBsZVNlZ21lbnQua2V5Lml2ID0gaXY7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50Lm1hcCkge1xuICAgICAgICBzaW1wbGVTZWdtZW50Lm1hcCA9IHRoaXMuaW5pdFNlZ21lbnQoc2VnbWVudC5tYXApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2ltcGxlU2VnbWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBjYWxsYmFjayBmcm9tIHRoZSBzZWdtZW50UmVxdWVzdCBmdW5jdGlvbiBhbmQgc2V0IHRoZVxuICAgICAqIGFzc29jaWF0ZWQgU2VnbWVudExvYWRlciBzdGF0ZSBhbmQgZXJyb3JzIGlmIG5lY2Vzc2FyeVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2VnbWVudFJlcXVlc3RGaW5pc2hlZF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZWdtZW50UmVxdWVzdEZpbmlzaGVkXyhlcnJvciwgc2ltcGxlU2VnbWVudCkge1xuICAgICAgLy8gZXZlcnkgcmVxdWVzdCBjb3VudHMgYXMgYSBtZWRpYSByZXF1ZXN0IGV2ZW4gaWYgaXQgaGFzIGJlZW4gYWJvcnRlZFxuICAgICAgLy8gb3IgY2FuY2VsZWQgZHVlIHRvIGEgdGltZW91dFxuICAgICAgdGhpcy5tZWRpYVJlcXVlc3RzICs9IDE7XG5cbiAgICAgIGlmIChzaW1wbGVTZWdtZW50LnN0YXRzKSB7XG4gICAgICAgIHRoaXMubWVkaWFCeXRlc1RyYW5zZmVycmVkICs9IHNpbXBsZVNlZ21lbnQuc3RhdHMuYnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgdGhpcy5tZWRpYVRyYW5zZmVyRHVyYXRpb24gKz0gc2ltcGxlU2VnbWVudC5zdGF0cy5yb3VuZFRyaXBUaW1lO1xuICAgICAgfSAvLyBUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZCBhbmQgdGhlIFNlZ21lbnRMb2FkZXIgaGFzIGFscmVhZHkgYmVlbiByZXNldFxuXG5cbiAgICAgIGlmICghdGhpcy5wZW5kaW5nU2VnbWVudF8pIHtcbiAgICAgICAgdGhpcy5tZWRpYVJlcXVlc3RzQWJvcnRlZCArPSAxO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkIGFuZCB0aGUgU2VnbWVudExvYWRlciBoYXMgYWxyZWFkeSBzdGFydGVkXG4gICAgICAvLyBhbm90aGVyIHJlcXVlc3QuIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSB0aW1lb3V0IGZvciBhbiBhYm9ydGVkXG4gICAgICAvLyByZXF1ZXN0IHRyaWdnZXJzIGR1ZSB0byBhIGxpbWl0YXRpb24gaW4gdGhlIFhIUiBsaWJyYXJ5XG4gICAgICAvLyBkbyBub3QgY291bnQgdGhpcyBhcyBhbnkgc29ydCBvZiByZXF1ZXN0IG9yIHdlIHJpc2sgZG91YmxlLWNvdW50aW5nXG5cblxuICAgICAgaWYgKHNpbXBsZVNlZ21lbnQucmVxdWVzdElkICE9PSB0aGlzLnBlbmRpbmdTZWdtZW50Xy5yZXF1ZXN0SWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBhbiBlcnJvciBvY2N1cnJlZCBmcm9tIHRoZSBhY3RpdmUgcGVuZGluZ1NlZ21lbnRfIHNvIHJlc2V0IGV2ZXJ5dGhpbmdcblxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VnbWVudF8gPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ1JFQURZJzsgLy8gdGhlIHJlcXVlc3RzIHdlcmUgYWJvcnRlZCBqdXN0IHJlY29yZCB0aGUgYWJvcnRlZCBzdGF0IGFuZCBleGl0XG4gICAgICAgIC8vIHRoaXMgaXMgbm90IGEgdHJ1ZSBlcnJvciBjb25kaXRpb24gYW5kIG5vdGhpbmcgY29ycmVjdGl2ZSBuZWVkc1xuICAgICAgICAvLyB0byBiZSBkb25lXG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFJFUVVFU1RfRVJST1JTLkFCT1JURUQpIHtcbiAgICAgICAgICB0aGlzLm1lZGlhUmVxdWVzdHNBYm9ydGVkICs9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXVzZSgpOyAvLyB0aGUgZXJyb3IgaXMgcmVhbGx5IGp1c3QgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVlc3RzIHRpbWVkLW91dFxuICAgICAgICAvLyBzZXQgdGhlIGJhbmR3aWR0aCB0byBhIHZlcnkgbG93IHZhbHVlIGFuZCB0cmlnZ2VyIGFuIEFCUiBzd2l0Y2ggdG9cbiAgICAgICAgLy8gdGFrZSBlbWVyZ2VuY3kgYWN0aW9uXG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFJFUVVFU1RfRVJST1JTLlRJTUVPVVQpIHtcbiAgICAgICAgICB0aGlzLm1lZGlhUmVxdWVzdHNUaW1lZG91dCArPSAxO1xuICAgICAgICAgIHRoaXMuYmFuZHdpZHRoID0gMTtcbiAgICAgICAgICB0aGlzLnJvdW5kVHJpcCA9IE5hTjtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2JhbmR3aWR0aHVwZGF0ZScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBpZiBjb250cm9sLWZsb3cgaGFzIGFycml2ZWQgaGVyZSwgdGhlbiB0aGUgZXJyb3IgaXMgcmVhbFxuICAgICAgICAvLyBlbWl0IGFuIGVycm9yIGV2ZW50IHRvIGJsYWNrbGlzdCB0aGUgY3VycmVudCBwbGF5bGlzdFxuXG5cbiAgICAgICAgdGhpcy5tZWRpYVJlcXVlc3RzRXJyb3JlZCArPSAxO1xuICAgICAgICB0aGlzLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHRoZSByZXNwb25zZSB3YXMgYSBzdWNjZXNzIHNvIHNldCBhbnkgYmFuZHdpZHRoIHN0YXRzIHRoZSByZXF1ZXN0XG4gICAgICAvLyBnZW5lcmF0ZWQgZm9yIEFCUiBwdXJwb3Nlc1xuXG5cbiAgICAgIHRoaXMuYmFuZHdpZHRoID0gc2ltcGxlU2VnbWVudC5zdGF0cy5iYW5kd2lkdGg7XG4gICAgICB0aGlzLnJvdW5kVHJpcCA9IHNpbXBsZVNlZ21lbnQuc3RhdHMucm91bmRUcmlwVGltZTsgLy8gaWYgdGhpcyByZXF1ZXN0IGluY2x1ZGVkIGFuIGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIHNhdmUgdGhhdCBkYXRhXG4gICAgICAvLyB0byB0aGUgaW5pdFNlZ21lbnQgY2FjaGVcblxuICAgICAgaWYgKHNpbXBsZVNlZ21lbnQubWFwKSB7XG4gICAgICAgIHNpbXBsZVNlZ21lbnQubWFwID0gdGhpcy5pbml0U2VnbWVudChzaW1wbGVTZWdtZW50Lm1hcCwgdHJ1ZSk7XG4gICAgICB9IC8vIGlmIHRoaXMgcmVxdWVzdCBpbmNsdWRlZCBhIHNlZ21lbnQga2V5LCBzYXZlIHRoYXQgZGF0YSBpbiB0aGUgY2FjaGVcblxuXG4gICAgICBpZiAoc2ltcGxlU2VnbWVudC5rZXkpIHtcbiAgICAgICAgdGhpcy5zZWdtZW50S2V5KHNpbXBsZVNlZ21lbnQua2V5LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9jZXNzU2VnbWVudFJlc3BvbnNlXyhzaW1wbGVTZWdtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW92ZSBhbnkgaW1wb3J0YW50IGRhdGEgZnJvbSB0aGUgc2ltcGxpZmllZCBzZWdtZW50IG9iamVjdFxuICAgICAqIGJhY2sgdG8gdGhlIHJlYWwgc2VnbWVudCBvYmplY3QgZm9yIGZ1dHVyZSBwaGFzZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Byb2Nlc3NTZWdtZW50UmVzcG9uc2VfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnRSZXNwb25zZV8oc2ltcGxlU2VnbWVudCkge1xuICAgICAgdmFyIHNlZ21lbnRJbmZvID0gdGhpcy5wZW5kaW5nU2VnbWVudF87XG4gICAgICBzZWdtZW50SW5mby5ieXRlcyA9IHNpbXBsZVNlZ21lbnQuYnl0ZXM7XG5cbiAgICAgIGlmIChzaW1wbGVTZWdtZW50Lm1hcCkge1xuICAgICAgICBzZWdtZW50SW5mby5zZWdtZW50Lm1hcC5ieXRlcyA9IHNpbXBsZVNlZ21lbnQubWFwLmJ5dGVzO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50SW5mby5lbmRPZkFsbFJlcXVlc3RzID0gc2ltcGxlU2VnbWVudC5lbmRPZkFsbFJlcXVlc3RzOyAvLyBUaGlzIGhhcyBmbXA0IGNhcHRpb25zLCBhZGQgdGhlbSB0byB0ZXh0IHRyYWNrc1xuXG4gICAgICBpZiAoc2ltcGxlU2VnbWVudC5mbXA0Q2FwdGlvbnMpIHtcbiAgICAgICAgY3JlYXRlQ2FwdGlvbnNUcmFja0lmTm90RXhpc3RzKHRoaXMuaW5iYW5kVGV4dFRyYWNrc18sIHRoaXMuaGxzXy50ZWNoXywgc2ltcGxlU2VnbWVudC5jYXB0aW9uU3RyZWFtcyk7XG4gICAgICAgIGFkZENhcHRpb25EYXRhKHtcbiAgICAgICAgICBpbmJhbmRUZXh0VHJhY2tzOiB0aGlzLmluYmFuZFRleHRUcmFja3NfLFxuICAgICAgICAgIGNhcHRpb25BcnJheTogc2ltcGxlU2VnbWVudC5mbXA0Q2FwdGlvbnMsXG4gICAgICAgICAgLy8gZm1wNHMgd2lsbCBub3QgaGF2ZSBhIHRpbWVzdGFtcCBvZmZzZXRcbiAgICAgICAgICB0aW1lc3RhbXBPZmZzZXQ6IDBcbiAgICAgICAgfSk7IC8vIFJlc2V0IHN0b3JlZCBjYXB0aW9ucyBzaW5jZSB3ZSBhZGRlZCBwYXJzZWRcbiAgICAgICAgLy8gY2FwdGlvbnMgdG8gYSB0ZXh0IHRyYWNrIGF0IHRoaXMgcG9pbnRcblxuICAgICAgICBpZiAodGhpcy5jYXB0aW9uUGFyc2VyXykge1xuICAgICAgICAgIHRoaXMuY2FwdGlvblBhcnNlcl8uY2xlYXJQYXJzZWRDYXB0aW9ucygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlU2VnbWVudF8oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogYXBwZW5kIGEgZGVjcnlwdGVkIHNlZ2VtZW50IHRvIHRoZSBTb3VyY2VCdWZmZXIgdGhyb3VnaCBhIFNvdXJjZVVwZGF0ZXJcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVNlZ21lbnRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlU2VnbWVudF8oKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdTZWdtZW50Xykge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ1JFQURZJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VnbWVudEluZm8gPSB0aGlzLnBlbmRpbmdTZWdtZW50XztcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudEluZm8uc2VnbWVudDtcbiAgICAgIHZhciB0aW1pbmdJbmZvID0gdGhpcy5zeW5jQ29udHJvbGxlcl8ucHJvYmVTZWdtZW50SW5mbyhzZWdtZW50SW5mbyk7IC8vIFdoZW4gd2UgaGF2ZSBvdXIgZmlyc3QgdGltaW5nIGluZm8sIGRldGVybWluZSB3aGF0IG1lZGlhIHR5cGVzIHRoaXMgbG9hZGVyIGlzXG4gICAgICAvLyBkZWFsaW5nIHdpdGguIEFsdGhvdWdoIHdlJ3JlIG1haW50YWluaW5nIGV4dHJhIHN0YXRlLCBpdCBoZWxwcyB0byBwcmVzZXJ2ZSB0aGVcbiAgICAgIC8vIHNlcGFyYXRpb24gb2Ygc2VnbWVudCBsb2FkZXIgZnJvbSB0aGUgYWN0dWFsIHNvdXJjZSBidWZmZXJzLlxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnRpbmdNZWRpYV8gPT09ICd1bmRlZmluZWQnICYmIHRpbWluZ0luZm8gJiYgKCAvLyBHdWFyZCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHdlJ3JlIG5vdCBnZXR0aW5nIHRpbWluZyBpbmZvIGF0IGFsbCB1bnRpbCB3ZSBhcmVcbiAgICAgIC8vIGNlcnRhaW4gdGhhdCBhbGwgc3RyZWFtcyB3aWxsIHByb3ZpZGUgaXQuXG4gICAgICB0aW1pbmdJbmZvLmNvbnRhaW5zQXVkaW8gfHwgdGltaW5nSW5mby5jb250YWluc1ZpZGVvKSkge1xuICAgICAgICB0aGlzLnN0YXJ0aW5nTWVkaWFfID0ge1xuICAgICAgICAgIGNvbnRhaW5zQXVkaW86IHRpbWluZ0luZm8uY29udGFpbnNBdWRpbyxcbiAgICAgICAgICBjb250YWluc1ZpZGVvOiB0aW1pbmdJbmZvLmNvbnRhaW5zVmlkZW9cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlsbGVnYWxNZWRpYVN3aXRjaEVycm9yID0gaWxsZWdhbE1lZGlhU3dpdGNoKHRoaXMubG9hZGVyVHlwZV8sIHRoaXMuc3RhcnRpbmdNZWRpYV8sIHRpbWluZ0luZm8pO1xuXG4gICAgICBpZiAoaWxsZWdhbE1lZGlhU3dpdGNoRXJyb3IpIHtcbiAgICAgICAgdGhpcy5lcnJvcih7XG4gICAgICAgICAgbWVzc2FnZTogaWxsZWdhbE1lZGlhU3dpdGNoRXJyb3IsXG4gICAgICAgICAgYmxhY2tsaXN0RHVyYXRpb246IEluZmluaXR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRJbmZvLmlzU3luY1JlcXVlc3QpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jaW5mb3VwZGF0ZScpO1xuICAgICAgICB0aGlzLnBlbmRpbmdTZWdtZW50XyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnUkVBRFknO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50SW5mby50aW1lc3RhbXBPZmZzZXQgIT09IG51bGwgJiYgc2VnbWVudEluZm8udGltZXN0YW1wT2Zmc2V0ICE9PSB0aGlzLnNvdXJjZVVwZGF0ZXJfLnRpbWVzdGFtcE9mZnNldCgpKSB7XG4gICAgICAgIC8vIFN1YnRyYWN0IGFueSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFBUUyBhbmQgRFRTIHRpbWVzIG9mIHRoZSBmaXJzdCBmcmFtZVxuICAgICAgICAvLyBmcm9tIHRoZSB0aW1lU3RhbXBPZmZzZXQgKHdoaWNoIGN1cnJlbnRseSBlcXVhbHMgdGhlIGJ1ZmZlcmVkLmVuZCkgdG8gcHJldmVudFxuICAgICAgICAvLyBjcmVhdGluZyBhbnkgZ2FwcyBpbiB0aGUgYnVmZmVyXG4gICAgICAgIGlmICh0aW1pbmdJbmZvICYmIHRpbWluZ0luZm8uc2VnbWVudFRpbWVzdGFtcEluZm8pIHtcbiAgICAgICAgICB2YXIgcHRzU3RhcnRUaW1lID0gdGltaW5nSW5mby5zZWdtZW50VGltZXN0YW1wSW5mb1swXS5wdHNUaW1lO1xuICAgICAgICAgIHZhciBkdHNTdGFydFRpbWUgPSB0aW1pbmdJbmZvLnNlZ21lbnRUaW1lc3RhbXBJbmZvWzBdLmR0c1RpbWU7XG4gICAgICAgICAgc2VnbWVudEluZm8udGltZXN0YW1wT2Zmc2V0IC09IHB0c1N0YXJ0VGltZSAtIGR0c1N0YXJ0VGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc291cmNlVXBkYXRlcl8udGltZXN0YW1wT2Zmc2V0KHNlZ21lbnRJbmZvLnRpbWVzdGFtcE9mZnNldCk7IC8vIGZpcmVkIHdoZW4gYSB0aW1lc3RhbXAgb2Zmc2V0IGlzIHNldCBpbiBITFMgKGNhbiBhbHNvIGlkZW50aWZ5IGRpc2NvbnRpbnVpdGllcylcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3RpbWVzdGFtcG9mZnNldCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGltZWxpbmVNYXBwaW5nID0gdGhpcy5zeW5jQ29udHJvbGxlcl8ubWFwcGluZ0ZvclRpbWVsaW5lKHNlZ21lbnRJbmZvLnRpbWVsaW5lKTtcblxuICAgICAgaWYgKHRpbWVsaW5lTWFwcGluZyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICdzZWdtZW50dGltZW1hcHBpbmcnLFxuICAgICAgICAgIG1hcHBpbmc6IHRpbWVsaW5lTWFwcGluZ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9ICdBUFBFTkRJTkcnOyAvLyBpZiB0aGUgbWVkaWEgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBpcyBjaGFuZ2luZywgYXBwZW5kIGl0XG4gICAgICAvLyBiZWZvcmUgdGhlIGNvbnRlbnQgc2VnbWVudFxuXG4gICAgICBpZiAoc2VnbWVudC5tYXApIHtcbiAgICAgICAgdmFyIGluaXRJZCA9IGluaXRTZWdtZW50SWQoc2VnbWVudC5tYXApO1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVJbml0U2VnbWVudElkXyB8fCB0aGlzLmFjdGl2ZUluaXRTZWdtZW50SWRfICE9PSBpbml0SWQpIHtcbiAgICAgICAgICB2YXIgaW5pdFNlZ21lbnQgPSB0aGlzLmluaXRTZWdtZW50KHNlZ21lbnQubWFwKTtcbiAgICAgICAgICB0aGlzLnNvdXJjZVVwZGF0ZXJfLmFwcGVuZEJ1ZmZlcih7XG4gICAgICAgICAgICBieXRlczogaW5pdFNlZ21lbnQuYnl0ZXNcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczMuYWN0aXZlSW5pdFNlZ21lbnRJZF8gPSBpbml0SWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VnbWVudEluZm8uYnl0ZUxlbmd0aCA9IHNlZ21lbnRJbmZvLmJ5dGVzLmJ5dGVMZW5ndGg7XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VnbWVudC5zdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHNlZ21lbnQuZW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLm1lZGlhU2Vjb25kc0xvYWRlZCArPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1lZGlhU2Vjb25kc0xvYWRlZCArPSBzZWdtZW50LmR1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ2dlcl8oc2VnbWVudEluZm9TdHJpbmcoc2VnbWVudEluZm8pKTtcbiAgICAgIHRoaXMuc291cmNlVXBkYXRlcl8uYXBwZW5kQnVmZmVyKHtcbiAgICAgICAgYnl0ZXM6IHNlZ21lbnRJbmZvLmJ5dGVzLFxuICAgICAgICB2aWRlb1NlZ21lbnRUaW1pbmdJbmZvQ2FsbGJhY2s6IHRoaXMuaGFuZGxlVmlkZW9TZWdtZW50VGltaW5nSW5mb18uYmluZCh0aGlzLCBzZWdtZW50SW5mby5yZXF1ZXN0SWQpXG4gICAgICB9LCB0aGlzLmhhbmRsZVVwZGF0ZUVuZF8uYmluZCh0aGlzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlVmlkZW9TZWdtZW50VGltaW5nSW5mb18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVWaWRlb1NlZ21lbnRUaW1pbmdJbmZvXyhyZXF1ZXN0SWQsIGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMucGVuZGluZ1NlZ21lbnRfIHx8IHJlcXVlc3RJZCAhPT0gdGhpcy5wZW5kaW5nU2VnbWVudF8ucmVxdWVzdElkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlZ21lbnQgPSB0aGlzLnBlbmRpbmdTZWdtZW50Xy5zZWdtZW50O1xuXG4gICAgICBpZiAoIXNlZ21lbnQudmlkZW9UaW1pbmdJbmZvKSB7XG4gICAgICAgIHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvID0ge307XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvLnRyYW5zbXV4ZXJQcmVwZW5kZWRTZWNvbmRzID0gZXZlbnQudmlkZW9TZWdtZW50VGltaW5nSW5mby5wcmVwZW5kZWRDb250ZW50RHVyYXRpb24gfHwgMDtcbiAgICAgIHNlZ21lbnQudmlkZW9UaW1pbmdJbmZvLnRyYW5zbXV4ZWRQcmVzZW50YXRpb25TdGFydCA9IGV2ZW50LnZpZGVvU2VnbWVudFRpbWluZ0luZm8uc3RhcnQucHJlc2VudGF0aW9uO1xuICAgICAgc2VnbWVudC52aWRlb1RpbWluZ0luZm8udHJhbnNtdXhlZFByZXNlbnRhdGlvbkVuZCA9IGV2ZW50LnZpZGVvU2VnbWVudFRpbWluZ0luZm8uZW5kLnByZXNlbnRhdGlvbjsgLy8gbWFpbmx5IHVzZWQgYXMgYSByZWZlcmVuY2UgZm9yIGRlYnVnZ2luZ1xuXG4gICAgICBzZWdtZW50LnZpZGVvVGltaW5nSW5mby5iYXNlTWVkaWFEZWNvZGVUaW1lID0gZXZlbnQudmlkZW9TZWdtZW50VGltaW5nSW5mby5iYXNlTWVkaWFEZWNvZGVUaW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB0byBydW4gd2hlbiBhcHBlbmRCdWZmZXIgaXMgZmluaXNoZWQuIGRldGVjdHMgaWYgd2UgYXJlXG4gICAgICogaW4gYSBnb29kIHN0YXRlIHRvIGRvIHRoaW5ncyB3aXRoIHRoZSBkYXRhIHdlIGdvdCwgb3IgaWYgd2UgbmVlZFxuICAgICAqIHRvIHdhaXQgZm9yIG1vcmVcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVVwZGF0ZUVuZF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVVcGRhdGVFbmRfKCkge1xuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdTZWdtZW50Xykge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ1JFQURZJztcblxuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKCkpIHtcbiAgICAgICAgICB0aGlzLm1vbml0b3JCdWZmZXJfKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50SW5mbyA9IHRoaXMucGVuZGluZ1NlZ21lbnRfO1xuICAgICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50SW5mby5zZWdtZW50O1xuICAgICAgdmFyIGlzV2Fsa2luZ0ZvcndhcmQgPSB0aGlzLm1lZGlhSW5kZXggIT09IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdTZWdtZW50XyA9IG51bGw7XG4gICAgICB0aGlzLnJlY29yZFRocm91Z2hwdXRfKHNlZ21lbnRJbmZvKTtcbiAgICAgIHRoaXMuYWRkU2VnbWVudE1ldGFkYXRhQ3VlXyhzZWdtZW50SW5mbyk7XG4gICAgICB0aGlzLnN0YXRlID0gJ1JFQURZJztcbiAgICAgIHRoaXMubWVkaWFJbmRleCA9IHNlZ21lbnRJbmZvLm1lZGlhSW5kZXg7XG4gICAgICB0aGlzLmZldGNoQXRCdWZmZXJfID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3VycmVudFRpbWVsaW5lXyA9IHNlZ21lbnRJbmZvLnRpbWVsaW5lOyAvLyBXZSBtdXN0IHVwZGF0ZSB0aGUgc3luY2luZm8gdG8gcmVjYWxjdWxhdGUgdGhlIHNlZWthYmxlIHJhbmdlIGJlZm9yZVxuICAgICAgLy8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25hbCBvdGhlcndpc2UgaXQgbWF5IGNvbnNpZGVyIHRoaXMgYSBiYWQgXCJndWVzc1wiXG4gICAgICAvLyBhbmQgYXR0ZW1wdCB0byByZXN5bmMgd2hlbiB0aGUgcG9zdC11cGRhdGUgc2Vla2FibGUgd2luZG93IGFuZCBsaXZlXG4gICAgICAvLyBwb2ludCB3b3VsZCBtZWFuIHRoYXQgdGhpcyB3YXMgdGhlIHBlcmZlY3Qgc2VnbWVudCB0byBmZXRjaFxuXG4gICAgICB0aGlzLnRyaWdnZXIoJ3N5bmNpbmZvdXBkYXRlJyk7IC8vIElmIHdlIHByZXZpb3VzbHkgYXBwZW5kZWQgYSBzZWdtZW50IHRoYXQgZW5kcyBtb3JlIHRoYW4gMyB0YXJnZXREdXJhdGlvbnMgYmVmb3JlXG4gICAgICAvLyB0aGUgY3VycmVudFRpbWVfIHRoYXQgbWVhbnMgdGhhdCBvdXIgY29uc2VydmF0aXZlIGd1ZXNzIHdhcyB0b28gY29uc2VydmF0aXZlLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCByZXNldCB0aGUgbG9hZGVyIHN0YXRlIHNvIHRoYXQgd2UgdHJ5IHRvIHVzZSBhbnkgaW5mb3JtYXRpb24gZ2FpbmVkXG4gICAgICAvLyBmcm9tIHRoZSBwcmV2aW91cyByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldywgbW9yZSBhY2N1cmF0ZSwgc3luYy1wb2ludC5cblxuICAgICAgaWYgKHNlZ21lbnQuZW5kICYmIHRoaXMuY3VycmVudFRpbWVfKCkgLSBzZWdtZW50LmVuZCA+IHNlZ21lbnRJbmZvLnBsYXlsaXN0LnRhcmdldER1cmF0aW9uICogMykge1xuICAgICAgICB0aGlzLnJlc2V0RXZlcnl0aGluZygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvbid0IGRvIGEgcmVuZGl0aW9uIHN3aXRjaCB1bmxlc3Mgd2UgaGF2ZSBlbm91Z2ggdGltZSB0byBnZXQgYSBzeW5jIHNlZ21lbnRcbiAgICAgIC8vIGFuZCBjb25zZXJ2YXRpdmVseSBndWVzc1xuXG5cbiAgICAgIGlmIChpc1dhbGtpbmdGb3J3YXJkKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignYmFuZHdpZHRodXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJpZ2dlcigncHJvZ3Jlc3MnKTsgLy8gYW55IHRpbWUgYW4gdXBkYXRlIGZpbmlzaGVzIGFuZCB0aGUgbGFzdCBzZWdtZW50IGlzIGluIHRoZVxuICAgICAgLy8gYnVmZmVyLCBlbmQgdGhlIHN0cmVhbS4gdGhpcyBlbnN1cmVzIHRoZSBcImVuZGVkXCIgZXZlbnQgd2lsbFxuICAgICAgLy8gZmlyZSBpZiBwbGF5YmFjayByZWFjaGVzIHRoYXQgcG9pbnQuXG5cbiAgICAgIGlmICh0aGlzLmlzRW5kT2ZTdHJlYW1fKHNlZ21lbnRJbmZvLm1lZGlhSW5kZXggKyAxLCBzZWdtZW50SW5mby5wbGF5bGlzdCkpIHtcbiAgICAgICAgdGhpcy5lbmRPZlN0cmVhbSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMucGF1c2VkKCkpIHtcbiAgICAgICAgdGhpcy5tb25pdG9yQnVmZmVyXygpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIHRoZSBjdXJyZW50IHRocm91Z2hwdXQgb2YgdGhlIGRlY3J5cHQsIHRyYW5zbXV4LCBhbmQgYXBwZW5kXG4gICAgICogcG9ydGlvbiBvZiB0aGUgc2VtZ21lbnQgcGlwZWxpbmUuIGB0aHJvdWdocHV0LnJhdGVgIGlzIGEgdGhlIGN1bXVsYXRpdmVcbiAgICAgKiBtb3ZpbmcgYXZlcmFnZSBvZiB0aGUgdGhyb3VnaHB1dC4gYHRocm91Z2hwdXQuY291bnRgIGlzIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBkYXRhIHBvaW50cyBpbiB0aGUgYXZlcmFnZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnRJbmZvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgbG9hZFNlZ21lbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVjb3JkVGhyb3VnaHB1dF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWNvcmRUaHJvdWdocHV0XyhzZWdtZW50SW5mbykge1xuICAgICAgdmFyIHJhdGUgPSB0aGlzLnRocm91Z2hwdXQucmF0ZTsgLy8gQWRkIG9uZSB0byB0aGUgdGltZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgYXR0ZW1wdCB0byBkaXZpZGVcbiAgICAgIC8vIGJ5IHplcm8gaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRocm91Z2hwdXQgaXMgcmlkaWN1bG91c2x5IGhpZ2hcblxuICAgICAgdmFyIHNlZ21lbnRQcm9jZXNzaW5nVGltZSA9IERhdGUubm93KCkgLSBzZWdtZW50SW5mby5lbmRPZkFsbFJlcXVlc3RzICsgMTsgLy8gTXVsdGlwbHkgYnkgODAwMCB0byBjb252ZXJ0IGZyb20gYnl0ZXMvbWlsbGlzZWNvbmQgdG8gYml0cy9zZWNvbmRcblxuICAgICAgdmFyIHNlZ21lbnRQcm9jZXNzaW5nVGhyb3VnaHB1dCA9IE1hdGguZmxvb3Ioc2VnbWVudEluZm8uYnl0ZUxlbmd0aCAvIHNlZ21lbnRQcm9jZXNzaW5nVGltZSAqIDggKiAxMDAwKTsgLy8gVGhpcyBpcyBqdXN0IGEgY3VtdWxhdGl2ZSBtb3ZpbmcgYXZlcmFnZSBjYWxjdWxhdGlvbjpcbiAgICAgIC8vICAgbmV3QXZnID0gb2xkQXZnICsgKHNhbXBsZSAtIG9sZEF2ZykgLyAoc2FtcGxlQ291bnQgKyAxKVxuXG4gICAgICB0aGlzLnRocm91Z2hwdXQucmF0ZSArPSAoc2VnbWVudFByb2Nlc3NpbmdUaHJvdWdocHV0IC0gcmF0ZSkgLyArK3RoaXMudGhyb3VnaHB1dC5jb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGN1ZSB0byB0aGUgc2VnbWVudC1tZXRhZGF0YSB0cmFjayB3aXRoIHNvbWUgbWV0YWRhdGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG4gICAgICogc2VnbWVudFxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudEluZm9cbiAgICAgKiAgICAgICAgdGhlIG9iamVjdCByZXR1cm5lZCBieSBsb2FkU2VnbWVudFxuICAgICAqIEBtZXRob2QgYWRkU2VnbWVudE1ldGFkYXRhQ3VlX1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhZGRTZWdtZW50TWV0YWRhdGFDdWVfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkU2VnbWVudE1ldGFkYXRhQ3VlXyhzZWdtZW50SW5mbykge1xuICAgICAgaWYgKCF0aGlzLnNlZ21lbnRNZXRhZGF0YVRyYWNrXykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudEluZm8uc2VnbWVudDtcbiAgICAgIHZhciBzdGFydCA9IHNlZ21lbnQuc3RhcnQ7XG4gICAgICB2YXIgZW5kID0gc2VnbWVudC5lbmQ7IC8vIERvIG5vdCB0cnkgYWRkaW5nIHRoZSBjdWUgaWYgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgYXJlIGludmFsaWQuXG5cbiAgICAgIGlmICghZmluaXRlKHN0YXJ0KSB8fCAhZmluaXRlKGVuZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZW1vdmVDdWVzRnJvbVRyYWNrKHN0YXJ0LCBlbmQsIHRoaXMuc2VnbWVudE1ldGFkYXRhVHJhY2tfKTtcbiAgICAgIHZhciBDdWUgPSB3aW5kb3ckMS5XZWJLaXREYXRhQ3VlIHx8IHdpbmRvdyQxLlZUVEN1ZTtcbiAgICAgIHZhciB2YWx1ZSA9IHtcbiAgICAgICAgY3VzdG9tOiBzZWdtZW50LmN1c3RvbSxcbiAgICAgICAgZGF0ZVRpbWVPYmplY3Q6IHNlZ21lbnQuZGF0ZVRpbWVPYmplY3QsXG4gICAgICAgIGRhdGVUaW1lU3RyaW5nOiBzZWdtZW50LmRhdGVUaW1lU3RyaW5nLFxuICAgICAgICBiYW5kd2lkdGg6IHNlZ21lbnRJbmZvLnBsYXlsaXN0LmF0dHJpYnV0ZXMuQkFORFdJRFRILFxuICAgICAgICByZXNvbHV0aW9uOiBzZWdtZW50SW5mby5wbGF5bGlzdC5hdHRyaWJ1dGVzLlJFU09MVVRJT04sXG4gICAgICAgIGNvZGVjczogc2VnbWVudEluZm8ucGxheWxpc3QuYXR0cmlidXRlcy5DT0RFQ1MsXG4gICAgICAgIGJ5dGVMZW5ndGg6IHNlZ21lbnRJbmZvLmJ5dGVMZW5ndGgsXG4gICAgICAgIHVyaTogc2VnbWVudEluZm8udXJpLFxuICAgICAgICB0aW1lbGluZTogc2VnbWVudEluZm8udGltZWxpbmUsXG4gICAgICAgIHBsYXlsaXN0OiBzZWdtZW50SW5mby5wbGF5bGlzdC51cmksXG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBlbmRcbiAgICAgIH07XG4gICAgICB2YXIgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIHZhciBjdWUgPSBuZXcgQ3VlKHN0YXJ0LCBlbmQsIGRhdGEpOyAvLyBBdHRhY2ggdGhlIG1ldGFkYXRhIHRvIHRoZSB2YWx1ZSBwcm9wZXJ0eSBvZiB0aGUgY3VlIHRvIGtlZXAgY29uc2lzdGVuY3kgYmV0d2VlblxuICAgICAgLy8gdGhlIGRpZmZlcmVuY2VzIG9mIFdlYktpdERhdGFDdWUgaW4gc2FmYXJpIGFuZCBWVFRDdWUgaW4gb3RoZXIgYnJvd3NlcnNcblxuICAgICAgY3VlLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnNlZ21lbnRNZXRhZGF0YVRyYWNrXy5hZGRDdWUoY3VlKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlZ21lbnRMb2FkZXI7XG59KHZpZGVvanMkMS5FdmVudFRhcmdldCk7XG5cbnZhciB1aW50OFRvVXRmOCA9IGZ1bmN0aW9uIHVpbnQ4VG9VdGY4KHVpbnRBcnJheSkge1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHVpbnRBcnJheSkpKTtcbn07XG4vKipcbiAqIEBmaWxlIHZ0dC1zZWdtZW50LWxvYWRlci5qc1xuICovXG5cblxudmFyIFZUVF9MSU5FX1RFUk1JTkFUT1JTID0gbmV3IFVpbnQ4QXJyYXkoJ1xcblxcbicuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoX2NoYXIyKSB7XG4gIHJldHVybiBfY2hhcjIuY2hhckNvZGVBdCgwKTtcbn0pKTtcbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgbWFuYWdlcyBzZWdtZW50IGxvYWRpbmcgYW5kIGFwcGVuZGluZy5cbiAqXG4gKiBAY2xhc3MgVlRUU2VnbWVudExvYWRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIG9wdGlvbnNcbiAqIEBleHRlbmRzIHZpZGVvanMuRXZlbnRUYXJnZXRcbiAqL1xuXG52YXIgVlRUU2VnbWVudExvYWRlciA9IGZ1bmN0aW9uIChfU2VnbWVudExvYWRlcikge1xuICBpbmhlcml0cyhWVFRTZWdtZW50TG9hZGVyLCBfU2VnbWVudExvYWRlcik7XG5cbiAgZnVuY3Rpb24gVlRUU2VnbWVudExvYWRlcihzZXR0aW5ncykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBWVFRTZWdtZW50TG9hZGVyKTsgLy8gU2VnbWVudExvYWRlciByZXF1aXJlcyBhIE1lZGlhU291cmNlIGJlIHNwZWNpZmllZCBvciBpdCB3aWxsIHRocm93IGFuIGVycm9yO1xuICAgIC8vIGhvd2V2ZXIsIFZUVFNlZ21lbnRMb2FkZXIgaGFzIG5vIG5lZWQgb2YgYSBtZWRpYSBzb3VyY2UsIHNvIGRlbGV0ZSB0aGUgcmVmZXJlbmNlXG5cbiAgICB2YXIgX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChWVFRTZWdtZW50TG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVlRUU2VnbWVudExvYWRlcikpLmNhbGwodGhpcywgc2V0dGluZ3MsIG9wdGlvbnMpKTtcblxuICAgIF90aGlzLm1lZGlhU291cmNlXyA9IG51bGw7XG4gICAgX3RoaXMuc3VidGl0bGVzVHJhY2tfID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGljaCB0aW1lIHJhbmdlcyBhcmUgYnVmZmVyZWRcbiAgICpcbiAgICogQHJldHVybiB7VGltZVJhbmdlfVxuICAgKiAgICAgICAgIFRpbWVSYW5nZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJ1ZmZlcmVkIHJhbmdlc1xuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKFZUVFNlZ21lbnRMb2FkZXIsIFt7XG4gICAga2V5OiAnYnVmZmVyZWRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYnVmZmVyZWRfKCkge1xuICAgICAgaWYgKCF0aGlzLnN1YnRpdGxlc1RyYWNrXyB8fCAhdGhpcy5zdWJ0aXRsZXNUcmFja18uY3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHZpZGVvanMkMS5jcmVhdGVUaW1lUmFuZ2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdWVzID0gdGhpcy5zdWJ0aXRsZXNUcmFja18uY3VlcztcbiAgICAgIHZhciBzdGFydCA9IGN1ZXNbMF0uc3RhcnRUaW1lO1xuICAgICAgdmFyIGVuZCA9IGN1ZXNbY3Vlcy5sZW5ndGggLSAxXS5zdGFydFRpbWU7XG4gICAgICByZXR1cm4gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoW1tzdGFydCwgZW5kXV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGluaXQgc2VnbWVudCBmb3IgdGhlIHByb3ZpZGVkIG1hcFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcFxuICAgICAqICAgICAgICBUaGUgbWFwIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGluaXQgc2VnbWVudCB0byBnZXQgb3Igc2V0XG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gc2V0XG4gICAgICogICAgICAgIElmIHRydWUsIHRoZSBpbml0IHNlZ21lbnQgZm9yIHRoZSBwcm92aWRlZCBtYXAgc2hvdWxkIGJlIHNhdmVkXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqICAgICAgICAgbWFwIG9iamVjdCBmb3IgZGVzaXJlZCBpbml0IHNlZ21lbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaW5pdFNlZ21lbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0U2VnbWVudChtYXApIHtcbiAgICAgIHZhciBzZXQkJDEgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICBpZiAoIW1hcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkID0gaW5pdFNlZ21lbnRJZChtYXApO1xuICAgICAgdmFyIHN0b3JlZE1hcCA9IHRoaXMuaW5pdFNlZ21lbnRzX1tpZF07XG5cbiAgICAgIGlmIChzZXQkJDEgJiYgIXN0b3JlZE1hcCAmJiBtYXAuYnl0ZXMpIHtcbiAgICAgICAgLy8gYXBwZW5kIFdlYlZUVCBsaW5lIHRlcm1pbmF0b3JzIHRvIHRoZSBtZWRpYSBpbml0aWFsaXphdGlvbiBzZWdtZW50IGlmIGl0IGV4aXN0c1xuICAgICAgICAvLyB0byBmb2xsb3cgdGhlIFdlYlZUVCBzcGVjIChodHRwczovL3czYy5naXRodWIuaW8vd2VidnR0LyNmaWxlLXN0cnVjdHVyZSkgdGhhdFxuICAgICAgICAvLyByZXF1aXJlcyB0d28gb3IgbW9yZSBXZWJWVFQgbGluZSB0ZXJtaW5hdG9ycyBiZXR3ZWVuIHRoZSBXZWJWVFQgaGVhZGVyIGFuZCB0aGVcbiAgICAgICAgLy8gcmVzdCBvZiB0aGUgZmlsZVxuICAgICAgICB2YXIgY29tYmluZWRCeXRlTGVuZ3RoID0gVlRUX0xJTkVfVEVSTUlOQVRPUlMuYnl0ZUxlbmd0aCArIG1hcC5ieXRlcy5ieXRlTGVuZ3RoO1xuICAgICAgICB2YXIgY29tYmluZWRTZWdtZW50ID0gbmV3IFVpbnQ4QXJyYXkoY29tYmluZWRCeXRlTGVuZ3RoKTtcbiAgICAgICAgY29tYmluZWRTZWdtZW50LnNldChtYXAuYnl0ZXMpO1xuICAgICAgICBjb21iaW5lZFNlZ21lbnQuc2V0KFZUVF9MSU5FX1RFUk1JTkFUT1JTLCBtYXAuYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMuaW5pdFNlZ21lbnRzX1tpZF0gPSBzdG9yZWRNYXAgPSB7XG4gICAgICAgICAgcmVzb2x2ZWRVcmk6IG1hcC5yZXNvbHZlZFVyaSxcbiAgICAgICAgICBieXRlcmFuZ2U6IG1hcC5ieXRlcmFuZ2UsXG4gICAgICAgICAgYnl0ZXM6IGNvbWJpbmVkU2VnbWVudFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmVkTWFwIHx8IG1hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGZvciBsb2FkaW5nIGlzIHByZXNlbnQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhlIGFsbCBjb25maWd1cmF0aW9uIGlzIHJlYWR5IGZvciBsb2FkaW5nXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY291bGRCZWdpbkxvYWRpbmdfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY291bGRCZWdpbkxvYWRpbmdfKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheWxpc3RfICYmIHRoaXMuc3VidGl0bGVzVHJhY2tfICYmICF0aGlzLnBhdXNlZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmNlIGFsbCB0aGUgc3RhcnRpbmcgcGFyYW1ldGVycyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBiZWdpblxuICAgICAqIG9wZXJhdGlvbi4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBmcm9tIHRoZSBJTklUXG4gICAgICogc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbml0XycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRfKCkge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdSRUFEWSc7XG4gICAgICB0aGlzLnJlc2V0RXZlcnl0aGluZygpO1xuICAgICAgcmV0dXJuIHRoaXMubW9uaXRvckJ1ZmZlcl8oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGEgc3VidGl0bGUgdHJhY2sgb24gdGhlIHNlZ21lbnQgbG9hZGVyIHRvIGFkZCBzdWJ0aXRsZXMgdG9cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VGV4dFRyYWNrPX0gdHJhY2tcbiAgICAgKiAgICAgICAgVGhlIHRleHQgdHJhY2sgdG8gYWRkIGxvYWRlZCBzdWJ0aXRsZXMgdG9cbiAgICAgKiBAcmV0dXJuIHtUZXh0VHJhY2t9XG4gICAgICogICAgICAgIFJldHVybnMgdGhlIHN1YnRpdGxlcyB0cmFja1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0cmFjaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyYWNrKF90cmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBfdHJhY2sgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnRpdGxlc1RyYWNrXztcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdWJ0aXRsZXNUcmFja18gPSBfdHJhY2s7IC8vIGlmIHdlIHdlcmUgdW5wYXVzZWQgYnV0IHdhaXRpbmcgZm9yIGEgc291cmNlVXBkYXRlciwgc3RhcnRcbiAgICAgIC8vIGJ1ZmZlcmluZyBub3dcblxuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdJTklUJyAmJiB0aGlzLmNvdWxkQmVnaW5Mb2FkaW5nXygpKSB7XG4gICAgICAgIHRoaXMuaW5pdF8oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc3VidGl0bGVzVHJhY2tfO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW55IGRhdGEgaW4gdGhlIHNvdXJjZSBidWZmZXIgYmV0d2VlbiBzdGFydCBhbmQgZW5kIHRpbWVzXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IC0gdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHJlZ2lvbiB0byByZW1vdmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGVuZCAtIHRoZSBlbmQgdGltZSBvZiB0aGUgcmVnaW9uIHRvIHJlbW92ZSBmcm9tIHRoZSBidWZmZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVtb3ZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJlbW92ZUN1ZXNGcm9tVHJhY2soc3RhcnQsIGVuZCwgdGhpcy5zdWJ0aXRsZXNUcmFja18pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaWxsIHRoZSBidWZmZXIgd2l0aCBzZWdlbWVudHMgdW5sZXNzIHRoZSBzb3VyY2VCdWZmZXJzIGFyZVxuICAgICAqIGN1cnJlbnRseSB1cGRhdGluZ1xuICAgICAqXG4gICAgICogTm90ZTogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBtb25pdG9yQnVmZmVyX1xuICAgICAqIGFuZCBuZXZlciBkaXJlY3RseVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZmlsbEJ1ZmZlcl8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWxsQnVmZmVyXygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuc3luY1BvaW50Xykge1xuICAgICAgICB0aGlzLnN5bmNQb2ludF8gPSB0aGlzLnN5bmNDb250cm9sbGVyXy5nZXRTeW5jUG9pbnQodGhpcy5wbGF5bGlzdF8sIHRoaXMuZHVyYXRpb25fKCksIHRoaXMuY3VycmVudFRpbWVsaW5lXywgdGhpcy5jdXJyZW50VGltZV8oKSk7XG4gICAgICB9IC8vIHNlZSBpZiB3ZSBuZWVkIHRvIGJlZ2luIGxvYWRpbmcgaW1tZWRpYXRlbHlcblxuXG4gICAgICB2YXIgc2VnbWVudEluZm8gPSB0aGlzLmNoZWNrQnVmZmVyXyh0aGlzLmJ1ZmZlcmVkXygpLCB0aGlzLnBsYXlsaXN0XywgdGhpcy5tZWRpYUluZGV4LCB0aGlzLmhhc1BsYXllZF8oKSwgdGhpcy5jdXJyZW50VGltZV8oKSwgdGhpcy5zeW5jUG9pbnRfKTtcbiAgICAgIHNlZ21lbnRJbmZvID0gdGhpcy5za2lwRW1wdHlTZWdtZW50c18oc2VnbWVudEluZm8pO1xuXG4gICAgICBpZiAoIXNlZ21lbnRJbmZvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3luY0NvbnRyb2xsZXJfLnRpbWVzdGFtcE9mZnNldEZvclRpbWVsaW5lKHNlZ21lbnRJbmZvLnRpbWVsaW5lKSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRoZSB0aW1lc3RhbXAgb2Zmc2V0IHRoYXQgd2UgbmVlZCB0byBzeW5jIHN1YnRpdGxlcy5cbiAgICAgICAgLy8gUmVydW4gb24gYSB0aW1lc3RhbXAgb2Zmc2V0IG9yIHVzZXIgaW50ZXJhY3Rpb24uXG4gICAgICAgIHZhciBjaGVja1RpbWVzdGFtcE9mZnNldCA9IGZ1bmN0aW9uIGNoZWNrVGltZXN0YW1wT2Zmc2V0KCkge1xuICAgICAgICAgIF90aGlzMi5zdGF0ZSA9ICdSRUFEWSc7XG5cbiAgICAgICAgICBpZiAoIV90aGlzMi5wYXVzZWQoKSkge1xuICAgICAgICAgICAgLy8gaWYgbm90IHBhdXNlZCwgcXVldWUgYSBidWZmZXIgY2hlY2sgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgICAgICAgICAgX3RoaXMyLm1vbml0b3JCdWZmZXJfKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3luY0NvbnRyb2xsZXJfLm9uZSgndGltZXN0YW1wb2Zmc2V0JywgY2hlY2tUaW1lc3RhbXBPZmZzZXQpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ1dBSVRJTkdfT05fVElNRUxJTkUnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZFNlZ21lbnRfKHNlZ21lbnRJbmZvKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJldmVudHMgdGhlIHNlZ21lbnQgbG9hZGVyIGZyb20gcmVxdWVzdGluZyBzZWdtZW50cyB3ZSBrbm93IGNvbnRhaW4gbm8gc3VidGl0bGVzXG4gICAgICogYnkgd2Fsa2luZyBmb3J3YXJkIHVudGlsIHdlIGZpbmQgdGhlIG5leHQgc2VnbWVudCB0aGF0IHdlIGRvbid0IGtub3cgd2hldGhlciBpdCBpc1xuICAgICAqIGVtcHR5IG9yIG5vdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWdtZW50SW5mb1xuICAgICAqICAgICAgICBhIHNlZ21lbnQgaW5mbyBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgc2VnbWVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKiAgICAgICAgIGEgc2VnbWVudCBpbmZvIG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgY3VycmVudCBzZWdtZW50XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NraXBFbXB0eVNlZ21lbnRzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNraXBFbXB0eVNlZ21lbnRzXyhzZWdtZW50SW5mbykge1xuICAgICAgd2hpbGUgKHNlZ21lbnRJbmZvICYmIHNlZ21lbnRJbmZvLnNlZ21lbnQuZW1wdHkpIHtcbiAgICAgICAgc2VnbWVudEluZm8gPSB0aGlzLmdlbmVyYXRlU2VnbWVudEluZm9fKHNlZ21lbnRJbmZvLnBsYXlsaXN0LCBzZWdtZW50SW5mby5tZWRpYUluZGV4ICsgMSwgc2VnbWVudEluZm8uc3RhcnRPZlNlZ21lbnQgKyBzZWdtZW50SW5mby5kdXJhdGlvbiwgc2VnbWVudEluZm8uaXNTeW5jUmVxdWVzdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWdtZW50SW5mbztcbiAgICB9XG4gICAgLyoqXG4gICAgICogYXBwZW5kIGEgZGVjcnlwdGVkIHNlZ2VtZW50IHRvIHRoZSBTb3VyY2VCdWZmZXIgdGhyb3VnaCBhIFNvdXJjZVVwZGF0ZXJcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZVNlZ21lbnRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlU2VnbWVudF8oKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdTZWdtZW50XyB8fCAhdGhpcy5zdWJ0aXRsZXNUcmFja18pIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdSRUFEWSc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9ICdBUFBFTkRJTkcnO1xuICAgICAgdmFyIHNlZ21lbnRJbmZvID0gdGhpcy5wZW5kaW5nU2VnbWVudF87XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRJbmZvLnNlZ21lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHZ0dGpzIGhhcyBsb2FkZWQsIG90aGVyd2lzZSwgd2FpdCB0aWxsIGl0IGZpbmlzaGVkIGxvYWRpbmdcblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3ckMS5XZWJWVFQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdWJ0aXRsZXNUcmFja18gJiYgdGhpcy5zdWJ0aXRsZXNUcmFja18udGVjaF8pIHtcbiAgICAgICAgdmFyIGxvYWRIYW5kbGVyID0gdm9pZCAwO1xuXG4gICAgICAgIHZhciBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiBlcnJvckhhbmRsZXIoKSB7XG4gICAgICAgICAgX3RoaXMzLnN1YnRpdGxlc1RyYWNrXy50ZWNoXy5vZmYoJ3Z0dGpzbG9hZGVkJywgbG9hZEhhbmRsZXIpO1xuXG4gICAgICAgICAgX3RoaXMzLmVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBsb2FkaW5nIHZ0dC5qcydcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIF90aGlzMy5zdGF0ZSA9ICdSRUFEWSc7XG5cbiAgICAgICAgICBfdGhpczMucGF1c2UoKTtcblxuICAgICAgICAgIF90aGlzMy50cmlnZ2VyKCdlcnJvcicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxvYWRIYW5kbGVyID0gZnVuY3Rpb24gbG9hZEhhbmRsZXIoKSB7XG4gICAgICAgICAgX3RoaXMzLnN1YnRpdGxlc1RyYWNrXy50ZWNoXy5vZmYoJ3Z0dGpzZXJyb3InLCBlcnJvckhhbmRsZXIpO1xuXG4gICAgICAgICAgX3RoaXMzLmhhbmRsZVNlZ21lbnRfKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdXQUlUSU5HX09OX1ZUVEpTJztcbiAgICAgICAgdGhpcy5zdWJ0aXRsZXNUcmFja18udGVjaF8ub25lKCd2dHRqc2xvYWRlZCcsIGxvYWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zdWJ0aXRsZXNUcmFja18udGVjaF8ub25lKCd2dHRqc2Vycm9yJywgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50LnJlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VWVFRDdWVzXyhzZWdtZW50SW5mbyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdSRUFEWSc7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlcignZXJyb3InKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVUaW1lTWFwcGluZ18oc2VnbWVudEluZm8sIHRoaXMuc3luY0NvbnRyb2xsZXJfLnRpbWVsaW5lc1tzZWdtZW50SW5mby50aW1lbGluZV0sIHRoaXMucGxheWxpc3RfKTtcblxuICAgICAgaWYgKHNlZ21lbnRJbmZvLmlzU3luY1JlcXVlc3QpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jaW5mb3VwZGF0ZScpO1xuICAgICAgICB0aGlzLnBlbmRpbmdTZWdtZW50XyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnUkVBRFknO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRJbmZvLmJ5dGVMZW5ndGggPSBzZWdtZW50SW5mby5ieXRlcy5ieXRlTGVuZ3RoO1xuICAgICAgdGhpcy5tZWRpYVNlY29uZHNMb2FkZWQgKz0gc2VnbWVudC5kdXJhdGlvbjtcblxuICAgICAgaWYgKHNlZ21lbnRJbmZvLmN1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlbW92ZSBhbnkgb3ZlcmxhcHBpbmcgY3VlcyB0byBwcmV2ZW50IGRvdWJsaW5nXG4gICAgICAgIHRoaXMucmVtb3ZlKHNlZ21lbnRJbmZvLmN1ZXNbMF0uZW5kVGltZSwgc2VnbWVudEluZm8uY3Vlc1tzZWdtZW50SW5mby5jdWVzLmxlbmd0aCAtIDFdLmVuZFRpbWUpO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50SW5mby5jdWVzLmZvckVhY2goZnVuY3Rpb24gKGN1ZSkge1xuICAgICAgICBfdGhpczMuc3VidGl0bGVzVHJhY2tfLmFkZEN1ZShjdWUpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVuZF8oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXNlcyB0aGUgV2ViVlRUIHBhcnNlciB0byBwYXJzZSB0aGUgc2VnbWVudCByZXNwb25zZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlZ21lbnRJbmZvXG4gICAgICogICAgICAgIGEgc2VnbWVudCBpbmZvIG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgY3VycmVudCBzZWdtZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncGFyc2VWVFRDdWVzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlVlRUQ3Vlc18oc2VnbWVudEluZm8pIHtcbiAgICAgIHZhciBkZWNvZGVyID0gdm9pZCAwO1xuICAgICAgdmFyIGRlY29kZUJ5dGVzVG9TdHJpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3ckMS5UZXh0RGVjb2RlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkZWNvZGVyID0gbmV3IHdpbmRvdyQxLlRleHREZWNvZGVyKCd1dGY4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWNvZGVyID0gd2luZG93JDEuV2ViVlRULlN0cmluZ0RlY29kZXIoKTtcbiAgICAgICAgZGVjb2RlQnl0ZXNUb1N0cmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJzZXIgPSBuZXcgd2luZG93JDEuV2ViVlRULlBhcnNlcih3aW5kb3ckMSwgd2luZG93JDEudnR0anMsIGRlY29kZXIpO1xuICAgICAgc2VnbWVudEluZm8uY3VlcyA9IFtdO1xuICAgICAgc2VnbWVudEluZm8udGltZXN0YW1wbWFwID0ge1xuICAgICAgICBNUEVHVFM6IDAsXG4gICAgICAgIExPQ0FMOiAwXG4gICAgICB9O1xuICAgICAgcGFyc2VyLm9uY3VlID0gc2VnbWVudEluZm8uY3Vlcy5wdXNoLmJpbmQoc2VnbWVudEluZm8uY3Vlcyk7XG5cbiAgICAgIHBhcnNlci5vbnRpbWVzdGFtcG1hcCA9IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRJbmZvLnRpbWVzdGFtcG1hcCA9IG1hcDtcbiAgICAgIH07XG5cbiAgICAgIHBhcnNlci5vbnBhcnNpbmdlcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ0Vycm9yIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyBjdWVzOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2VnbWVudEluZm8uc2VnbWVudC5tYXApIHtcbiAgICAgICAgdmFyIG1hcERhdGEgPSBzZWdtZW50SW5mby5zZWdtZW50Lm1hcC5ieXRlcztcblxuICAgICAgICBpZiAoZGVjb2RlQnl0ZXNUb1N0cmluZykge1xuICAgICAgICAgIG1hcERhdGEgPSB1aW50OFRvVXRmOChtYXBEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5wYXJzZShtYXBEYXRhKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlZ21lbnREYXRhID0gc2VnbWVudEluZm8uYnl0ZXM7XG5cbiAgICAgIGlmIChkZWNvZGVCeXRlc1RvU3RyaW5nKSB7XG4gICAgICAgIHNlZ21lbnREYXRhID0gdWludDhUb1V0Zjgoc2VnbWVudERhdGEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucGFyc2Uoc2VnbWVudERhdGEpO1xuICAgICAgcGFyc2VyLmZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2YgYW55IGN1ZXMgcGFyc2VkIGJ5IHRoZSBXZWJWVFQgcGFyc2VyIHVzaW5nXG4gICAgICogdGhlIGluZm9ybWF0aW9uIHBhcnNlZCBmcm9tIHRoZSBYLVRJTUVTVEFNUC1NQVAgaGVhZGVyIGFuZCBhIFRTIHRvIG1lZGlhIHRpbWUgbWFwcGluZ1xuICAgICAqIGZyb20gdGhlIFN5bmNDb250cm9sbGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VnbWVudEluZm9cbiAgICAgKiAgICAgICAgYSBzZWdtZW50IGluZm8gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHNlZ21lbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZ09ialxuICAgICAqICAgICAgICBvYmplY3QgY29udGFpbmluZyBhIG1hcHBpbmcgZnJvbSBUUyB0byBtZWRpYSB0aW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0XG4gICAgICogICAgICAgIHRoZSBwbGF5bGlzdCBvYmplY3QgY29udGFpbmluZyB0aGUgc2VnbWVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0ZVRpbWVNYXBwaW5nXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVRpbWVNYXBwaW5nXyhzZWdtZW50SW5mbywgbWFwcGluZ09iaiwgcGxheWxpc3QpIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudEluZm8uc2VnbWVudDtcblxuICAgICAgaWYgKCFtYXBwaW5nT2JqKSB7XG4gICAgICAgIC8vIElmIHRoZSBzeW5jIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBhIG1hcHBpbmcgb2YgVFMgdG8gTWVkaWEgVGltZSBmb3IgdGhlXG4gICAgICAgIC8vIHRpbWVsaW5lLCB0aGVuIHdlIGRvbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgY3VlXG4gICAgICAgIC8vIHN0YXJ0L2VuZCB0aW1lc1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2VnbWVudEluZm8uY3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGN1ZXMsIHdlIGFsc28gZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gc2VnbWVudCB0aW1pbmcuIE1hcmsgdGhhdCB0aGUgc2VnbWVudCBjb250YWlucyBubyBjdWVzIHNvIHdlIGRvbid0IHJlLXJlcXVlc3RcbiAgICAgICAgLy8gYW4gZW1wdHkgc2VnbWVudC5cbiAgICAgICAgc2VnbWVudC5lbXB0eSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRpbWVzdGFtcG1hcCA9IHNlZ21lbnRJbmZvLnRpbWVzdGFtcG1hcDtcbiAgICAgIHZhciBkaWZmID0gdGltZXN0YW1wbWFwLk1QRUdUUyAvIDkwMDAwIC0gdGltZXN0YW1wbWFwLkxPQ0FMICsgbWFwcGluZ09iai5tYXBwaW5nO1xuICAgICAgc2VnbWVudEluZm8uY3Vlcy5mb3JFYWNoKGZ1bmN0aW9uIChjdWUpIHtcbiAgICAgICAgLy8gRmlyc3QgY29udmVydCBjdWUgdGltZSB0byBUUyB0aW1lIHVzaW5nIHRoZSB0aW1lc3RhbXAtbWFwIHByb3ZpZGVkIHdpdGhpbiB0aGUgdnR0XG4gICAgICAgIGN1ZS5zdGFydFRpbWUgKz0gZGlmZjtcbiAgICAgICAgY3VlLmVuZFRpbWUgKz0gZGlmZjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXBsYXlsaXN0LnN5bmNJbmZvKSB7XG4gICAgICAgIHZhciBmaXJzdFN0YXJ0ID0gc2VnbWVudEluZm8uY3Vlc1swXS5zdGFydFRpbWU7XG4gICAgICAgIHZhciBsYXN0U3RhcnQgPSBzZWdtZW50SW5mby5jdWVzW3NlZ21lbnRJbmZvLmN1ZXMubGVuZ3RoIC0gMV0uc3RhcnRUaW1lO1xuICAgICAgICBwbGF5bGlzdC5zeW5jSW5mbyA9IHtcbiAgICAgICAgICBtZWRpYVNlcXVlbmNlOiBwbGF5bGlzdC5tZWRpYVNlcXVlbmNlICsgc2VnbWVudEluZm8ubWVkaWFJbmRleCxcbiAgICAgICAgICB0aW1lOiBNYXRoLm1pbihmaXJzdFN0YXJ0LCBsYXN0U3RhcnQgLSBzZWdtZW50LmR1cmF0aW9uKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gVlRUU2VnbWVudExvYWRlcjtcbn0oU2VnbWVudExvYWRlcik7XG4vKipcbiAqIEBmaWxlIGFkLWN1ZS10YWdzLmpzXG4gKi9cblxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgYW4gYWQgY3VlIHRoYXQgb3ZlcmxhcHMgd2l0aCB0aGUgZ2l2ZW4gbWVkaWFUaW1lXG4gKi9cblxuXG52YXIgZmluZEFkQ3VlID0gZnVuY3Rpb24gZmluZEFkQ3VlKHRyYWNrLCBtZWRpYVRpbWUpIHtcbiAgdmFyIGN1ZXMgPSB0cmFjay5jdWVzO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY3Vlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdWUgPSBjdWVzW2ldO1xuXG4gICAgaWYgKG1lZGlhVGltZSA+PSBjdWUuYWRTdGFydFRpbWUgJiYgbWVkaWFUaW1lIDw9IGN1ZS5hZEVuZFRpbWUpIHtcbiAgICAgIHJldHVybiBjdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgdXBkYXRlQWRDdWVzID0gZnVuY3Rpb24gdXBkYXRlQWRDdWVzKG1lZGlhLCB0cmFjaykge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAwO1xuXG4gIGlmICghbWVkaWEuc2VnbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVkaWFUaW1lID0gb2Zmc2V0O1xuICB2YXIgY3VlID0gdm9pZCAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWEuc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IG1lZGlhLnNlZ21lbnRzW2ldO1xuXG4gICAgaWYgKCFjdWUpIHtcbiAgICAgIC8vIFNpbmNlIHRoZSBjdWVzIHdpbGwgc3BhbiBmb3IgYXQgbGVhc3QgdGhlIHNlZ21lbnQgZHVyYXRpb24sIGFkZGluZyBhIGZ1ZGdlXG4gICAgICAvLyBmYWN0b3Igb2YgaGFsZiBzZWdtZW50IGR1cmF0aW9uIHdpbGwgcHJldmVudCBkdXBsaWNhdGUgY3VlcyBmcm9tIGJlaW5nXG4gICAgICAvLyBjcmVhdGVkIHdoZW4gdGltaW5nIGluZm8gaXMgbm90IGV4YWN0IChlLmcuIGN1ZSBzdGFydCB0aW1lIGluaXRpYWxpemVkXG4gICAgICAvLyBhdCAxMC4wMDY2NzcsIGJ1dCBuZXh0IGNhbGwgbWVkaWFUaW1lIGlzIDEwLjAwMzMzMiApXG4gICAgICBjdWUgPSBmaW5kQWRDdWUodHJhY2ssIG1lZGlhVGltZSArIHNlZ21lbnQuZHVyYXRpb24gLyAyKTtcbiAgICB9XG5cbiAgICBpZiAoY3VlKSB7XG4gICAgICBpZiAoJ2N1ZUluJyBpbiBzZWdtZW50KSB7XG4gICAgICAgIC8vIEZvdW5kIGEgQ1VFLUlOIHNvIGVuZCB0aGUgY3VlXG4gICAgICAgIGN1ZS5lbmRUaW1lID0gbWVkaWFUaW1lO1xuICAgICAgICBjdWUuYWRFbmRUaW1lID0gbWVkaWFUaW1lO1xuICAgICAgICBtZWRpYVRpbWUgKz0gc2VnbWVudC5kdXJhdGlvbjtcbiAgICAgICAgY3VlID0gbnVsbDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVRpbWUgPCBjdWUuZW5kVGltZSkge1xuICAgICAgICAvLyBBbHJlYWR5IHByb2Nlc3NlZCB0aGlzIG1lZGlhVGltZSBmb3IgdGhpcyBjdWVcbiAgICAgICAgbWVkaWFUaW1lICs9IHNlZ21lbnQuZHVyYXRpb247XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBvdGhlcndpc2UgZXh0ZW5kIGN1ZSB1bnRpbCBhIENVRS1JTiBpcyBmb3VuZFxuXG5cbiAgICAgIGN1ZS5lbmRUaW1lICs9IHNlZ21lbnQuZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgnY3VlT3V0JyBpbiBzZWdtZW50KSB7XG4gICAgICAgIGN1ZSA9IG5ldyB3aW5kb3ckMS5WVFRDdWUobWVkaWFUaW1lLCBtZWRpYVRpbWUgKyBzZWdtZW50LmR1cmF0aW9uLCBzZWdtZW50LmN1ZU91dCk7XG4gICAgICAgIGN1ZS5hZFN0YXJ0VGltZSA9IG1lZGlhVGltZTsgLy8gQXNzdW1lcyB0YWcgZm9ybWF0IHRvIGJlXG4gICAgICAgIC8vICNFWFQtWC1DVUUtT1VUOjMwXG5cbiAgICAgICAgY3VlLmFkRW5kVGltZSA9IG1lZGlhVGltZSArIHBhcnNlRmxvYXQoc2VnbWVudC5jdWVPdXQpO1xuICAgICAgICB0cmFjay5hZGRDdWUoY3VlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCdjdWVPdXRDb250JyBpbiBzZWdtZW50KSB7XG4gICAgICAgIC8vIEVudGVyZWQgaW50byB0aGUgbWlkZGxlIG9mIGFuIGFkIGN1ZVxuICAgICAgICB2YXIgYWRPZmZzZXQgPSB2b2lkIDA7XG4gICAgICAgIHZhciBhZFRvdGFsID0gdm9pZCAwOyAvLyBBc3N1bWVzIHRhZyBmb3JtYXRlIHRvIGJlXG4gICAgICAgIC8vICNFWFQtWC1DVUUtT1VULUNPTlQ6MTAvMzBcblxuICAgICAgICB2YXIgX3NlZ21lbnQkY3VlT3V0Q29udCRzID0gc2VnbWVudC5jdWVPdXRDb250LnNwbGl0KCcvJykubWFwKHBhcnNlRmxvYXQpO1xuXG4gICAgICAgIHZhciBfc2VnbWVudCRjdWVPdXRDb250JHMyID0gc2xpY2VkVG9BcnJheShfc2VnbWVudCRjdWVPdXRDb250JHMsIDIpO1xuXG4gICAgICAgIGFkT2Zmc2V0ID0gX3NlZ21lbnQkY3VlT3V0Q29udCRzMlswXTtcbiAgICAgICAgYWRUb3RhbCA9IF9zZWdtZW50JGN1ZU91dENvbnQkczJbMV07XG4gICAgICAgIGN1ZSA9IG5ldyB3aW5kb3ckMS5WVFRDdWUobWVkaWFUaW1lLCBtZWRpYVRpbWUgKyBzZWdtZW50LmR1cmF0aW9uLCAnJyk7XG4gICAgICAgIGN1ZS5hZFN0YXJ0VGltZSA9IG1lZGlhVGltZSAtIGFkT2Zmc2V0O1xuICAgICAgICBjdWUuYWRFbmRUaW1lID0gY3VlLmFkU3RhcnRUaW1lICsgYWRUb3RhbDtcbiAgICAgICAgdHJhY2suYWRkQ3VlKGN1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVkaWFUaW1lICs9IHNlZ21lbnQuZHVyYXRpb247XG4gIH1cbn07XG4vKipcbiAqIEBmaWxlIHN5bmMtY29udHJvbGxlci5qc1xuICovXG5cblxudmFyIHRzcHJvYmUgPSB0c0luc3BlY3Rvci5pbnNwZWN0O1xudmFyIHN5bmNQb2ludFN0cmF0ZWdpZXMgPSBbLy8gU3RhdGVneSBcIlZPRFwiOiBIYW5kbGUgdGhlIFZPRC1jYXNlIHdoZXJlIHRoZSBzeW5jLXBvaW50IGlzICphbHdheXMqXG4vLyAgICAgICAgICAgICAgICB0aGUgZXF1aXZhbGVuY2UgZGlzcGxheS10aW1lIDAgPT09IHNlZ21lbnQtaW5kZXggMFxue1xuICBuYW1lOiAnVk9EJyxcbiAgcnVuOiBmdW5jdGlvbiBydW4oc3luY0NvbnRyb2xsZXIsIHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgIGlmIChkdXJhdGlvbiQkMSAhPT0gSW5maW5pdHkpIHtcbiAgICAgIHZhciBzeW5jUG9pbnQgPSB7XG4gICAgICAgIHRpbWU6IDAsXG4gICAgICAgIHNlZ21lbnRJbmRleDogMFxuICAgICAgfTtcbiAgICAgIHJldHVybiBzeW5jUG9pbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0sIC8vIFN0YXRlZ3kgXCJQcm9ncmFtRGF0ZVRpbWVcIjogV2UgaGF2ZSBhIHByb2dyYW0tZGF0ZS10aW1lIHRhZyBpbiB0aGlzIHBsYXlsaXN0XG57XG4gIG5hbWU6ICdQcm9ncmFtRGF0ZVRpbWUnLFxuICBydW46IGZ1bmN0aW9uIHJ1bihzeW5jQ29udHJvbGxlciwgcGxheWxpc3QsIGR1cmF0aW9uJCQxLCBjdXJyZW50VGltZWxpbmUsIGN1cnJlbnRUaW1lKSB7XG4gICAgaWYgKCFzeW5jQ29udHJvbGxlci5kYXRldGltZVRvRGlzcGxheVRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBzZWdtZW50cyA9IHBsYXlsaXN0LnNlZ21lbnRzIHx8IFtdO1xuICAgIHZhciBzeW5jUG9pbnQgPSBudWxsO1xuICAgIHZhciBsYXN0RGlzdGFuY2UgPSBudWxsO1xuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG5cbiAgICAgIGlmIChzZWdtZW50LmRhdGVUaW1lT2JqZWN0KSB7XG4gICAgICAgIHZhciBzZWdtZW50VGltZSA9IHNlZ21lbnQuZGF0ZVRpbWVPYmplY3QuZ2V0VGltZSgpIC8gMTAwMDtcbiAgICAgICAgdmFyIHNlZ21lbnRTdGFydCA9IHNlZ21lbnRUaW1lICsgc3luY0NvbnRyb2xsZXIuZGF0ZXRpbWVUb0Rpc3BsYXlUaW1lO1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLmFicyhjdXJyZW50VGltZSAtIHNlZ21lbnRTdGFydCk7IC8vIE9uY2UgdGhlIGRpc3RhbmNlIGJlZ2lucyB0byBpbmNyZWFzZSwgb3IgaWYgZGlzdGFuY2UgaXMgMCwgd2UgaGF2ZSBwYXNzZWRcbiAgICAgICAgLy8gY3VycmVudFRpbWUgYW5kIGNhbiBzdG9wIGxvb2tpbmcgZm9yIGJldHRlciBjYW5kaWRhdGVzXG5cbiAgICAgICAgaWYgKGxhc3REaXN0YW5jZSAhPT0gbnVsbCAmJiAoZGlzdGFuY2UgPT09IDAgfHwgbGFzdERpc3RhbmNlIDwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgc3luY1BvaW50ID0ge1xuICAgICAgICAgIHRpbWU6IHNlZ21lbnRTdGFydCxcbiAgICAgICAgICBzZWdtZW50SW5kZXg6IGlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3luY1BvaW50O1xuICB9XG59LCAvLyBTdGF0ZWd5IFwiU2VnbWVudFwiOiBXZSBoYXZlIGEga25vd24gdGltZSBtYXBwaW5nIGZvciBhIHRpbWVsaW5lIGFuZCBhXG4vLyAgICAgICAgICAgICAgICAgICAgc2VnbWVudCBpbiB0aGUgY3VycmVudCB0aW1lbGluZSB3aXRoIHRpbWluZyBkYXRhXG57XG4gIG5hbWU6ICdTZWdtZW50JyxcbiAgcnVuOiBmdW5jdGlvbiBydW4oc3luY0NvbnRyb2xsZXIsIHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgIHZhciBzZWdtZW50cyA9IHBsYXlsaXN0LnNlZ21lbnRzIHx8IFtdO1xuICAgIHZhciBzeW5jUG9pbnQgPSBudWxsO1xuICAgIHZhciBsYXN0RGlzdGFuY2UgPSBudWxsO1xuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG5cbiAgICAgIGlmIChzZWdtZW50LnRpbWVsaW5lID09PSBjdXJyZW50VGltZWxpbmUgJiYgdHlwZW9mIHNlZ21lbnQuc3RhcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguYWJzKGN1cnJlbnRUaW1lIC0gc2VnbWVudC5zdGFydCk7IC8vIE9uY2UgdGhlIGRpc3RhbmNlIGJlZ2lucyB0byBpbmNyZWFzZSwgd2UgaGF2ZSBwYXNzZWRcbiAgICAgICAgLy8gY3VycmVudFRpbWUgYW5kIGNhbiBzdG9wIGxvb2tpbmcgZm9yIGJldHRlciBjYW5kaWRhdGVzXG5cbiAgICAgICAgaWYgKGxhc3REaXN0YW5jZSAhPT0gbnVsbCAmJiBsYXN0RGlzdGFuY2UgPCBkaXN0YW5jZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzeW5jUG9pbnQgfHwgbGFzdERpc3RhbmNlID09PSBudWxsIHx8IGxhc3REaXN0YW5jZSA+PSBkaXN0YW5jZSkge1xuICAgICAgICAgIGxhc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIHN5bmNQb2ludCA9IHtcbiAgICAgICAgICAgIHRpbWU6IHNlZ21lbnQuc3RhcnQsXG4gICAgICAgICAgICBzZWdtZW50SW5kZXg6IGlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN5bmNQb2ludDtcbiAgfVxufSwgLy8gU3RhdGVneSBcIkRpc2NvbnRpbnVpdHlcIjogV2UgaGF2ZSBhIGRpc2NvbnRpbnVpdHkgd2l0aCBhIGtub3duXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheS10aW1lXG57XG4gIG5hbWU6ICdEaXNjb250aW51aXR5JyxcbiAgcnVuOiBmdW5jdGlvbiBydW4oc3luY0NvbnRyb2xsZXIsIHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgIHZhciBzeW5jUG9pbnQgPSBudWxsO1xuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgMDtcblxuICAgIGlmIChwbGF5bGlzdC5kaXNjb250aW51aXR5U3RhcnRzICYmIHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTdGFydHMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGFzdERpc3RhbmNlID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGF5bGlzdC5kaXNjb250aW51aXR5U3RhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWdtZW50SW5kZXggPSBwbGF5bGlzdC5kaXNjb250aW51aXR5U3RhcnRzW2ldO1xuICAgICAgICB2YXIgZGlzY29udGludWl0eSA9IHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTZXF1ZW5jZSArIGkgKyAxO1xuICAgICAgICB2YXIgZGlzY29udGludWl0eVN5bmMgPSBzeW5jQ29udHJvbGxlci5kaXNjb250aW51aXRpZXNbZGlzY29udGludWl0eV07XG5cbiAgICAgICAgaWYgKGRpc2NvbnRpbnVpdHlTeW5jKSB7XG4gICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoY3VycmVudFRpbWUgLSBkaXNjb250aW51aXR5U3luYy50aW1lKTsgLy8gT25jZSB0aGUgZGlzdGFuY2UgYmVnaW5zIHRvIGluY3JlYXNlLCB3ZSBoYXZlIHBhc3NlZFxuICAgICAgICAgIC8vIGN1cnJlbnRUaW1lIGFuZCBjYW4gc3RvcCBsb29raW5nIGZvciBiZXR0ZXIgY2FuZGlkYXRlc1xuXG4gICAgICAgICAgaWYgKGxhc3REaXN0YW5jZSAhPT0gbnVsbCAmJiBsYXN0RGlzdGFuY2UgPCBkaXN0YW5jZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzeW5jUG9pbnQgfHwgbGFzdERpc3RhbmNlID09PSBudWxsIHx8IGxhc3REaXN0YW5jZSA+PSBkaXN0YW5jZSkge1xuICAgICAgICAgICAgbGFzdERpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgICAgICBzeW5jUG9pbnQgPSB7XG4gICAgICAgICAgICAgIHRpbWU6IGRpc2NvbnRpbnVpdHlTeW5jLnRpbWUsXG4gICAgICAgICAgICAgIHNlZ21lbnRJbmRleDogc2VnbWVudEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzeW5jUG9pbnQ7XG4gIH1cbn0sIC8vIFN0YXRlZ3kgXCJQbGF5bGlzdFwiOiBXZSBoYXZlIGEgcGxheWxpc3Qgd2l0aCBhIGtub3duIG1hcHBpbmcgb2Zcbi8vICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCBpbmRleCB0byBkaXNwbGF5IHRpbWVcbntcbiAgbmFtZTogJ1BsYXlsaXN0JyxcbiAgcnVuOiBmdW5jdGlvbiBydW4oc3luY0NvbnRyb2xsZXIsIHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgIGlmIChwbGF5bGlzdC5zeW5jSW5mbykge1xuICAgICAgdmFyIHN5bmNQb2ludCA9IHtcbiAgICAgICAgdGltZTogcGxheWxpc3Quc3luY0luZm8udGltZSxcbiAgICAgICAgc2VnbWVudEluZGV4OiBwbGF5bGlzdC5zeW5jSW5mby5tZWRpYVNlcXVlbmNlIC0gcGxheWxpc3QubWVkaWFTZXF1ZW5jZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBzeW5jUG9pbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1dO1xuXG52YXIgU3luY0NvbnRyb2xsZXIgPSBmdW5jdGlvbiAoX3ZpZGVvanMkRXZlbnRUYXJnZXQpIHtcbiAgaW5oZXJpdHMoU3luY0NvbnRyb2xsZXIsIF92aWRlb2pzJEV2ZW50VGFyZ2V0KTtcblxuICBmdW5jdGlvbiBTeW5jQ29udHJvbGxlcigpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBTeW5jQ29udHJvbGxlcik7IC8vIFNlZ21lbnQgTG9hZGVyIHN0YXRlIHZhcmlhYmxlcy4uLlxuICAgIC8vIC4uLmZvciBzeW5jaGluZyBhY3Jvc3MgdmFyaWFudHNcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFN5bmNDb250cm9sbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3luY0NvbnRyb2xsZXIpKS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzLmluc3BlY3RDYWNoZV8gPSB1bmRlZmluZWQ7IC8vIC4uLmZvciBzeW5jaGluZyBhY3Jvc3MgdmFyaWFudHNcblxuICAgIF90aGlzLnRpbWVsaW5lcyA9IFtdO1xuICAgIF90aGlzLmRpc2NvbnRpbnVpdGllcyA9IFtdO1xuICAgIF90aGlzLmRhdGV0aW1lVG9EaXNwbGF5VGltZSA9IG51bGw7XG4gICAgX3RoaXMubG9nZ2VyXyA9IGxvZ2dlcignU3luY0NvbnRyb2xsZXInKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmQgYSBzeW5jLXBvaW50IGZvciB0aGUgcGxheWxpc3Qgc3BlY2lmaWVkXG4gICAqXG4gICAqIEEgc3luYy1wb2ludCBpcyBkZWZpbmVkIGFzIGEga25vd24gbWFwcGluZyBmcm9tIGRpc3BsYXktdGltZSB0b1xuICAgKiBhIHNlZ21lbnQtaW5kZXggaW4gdGhlIGN1cnJlbnQgcGxheWxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UGxheWxpc3R9IHBsYXlsaXN0XG4gICAqICAgICAgICBUaGUgcGxheWxpc3QgdGhhdCBuZWVkcyBhIHN5bmMtcG9pbnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGR1cmF0aW9uXG4gICAqICAgICAgICBEdXJhdGlvbiBvZiB0aGUgTWVkaWFTb3VyY2UgKEluZmluaXRlIGlmIHBsYXlpbmcgYSBsaXZlIHNvdXJjZSlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGN1cnJlbnRUaW1lbGluZVxuICAgKiAgICAgICAgVGhlIGxhc3QgdGltZWxpbmUgZnJvbSB3aGljaCBhIHNlZ21lbnQgd2FzIGxvYWRlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKiAgICAgICAgICBBIHN5bmMtcG9pbnQgb2JqZWN0XG4gICAqL1xuXG5cbiAgY3JlYXRlQ2xhc3MoU3luY0NvbnRyb2xsZXIsIFt7XG4gICAga2V5OiAnZ2V0U3luY1BvaW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3luY1BvaW50KHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgICAgdmFyIHN5bmNQb2ludHMgPSB0aGlzLnJ1blN0cmF0ZWdpZXNfKHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgIGlmICghc3luY1BvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2lnbmFsIHRoYXQgd2UgbmVlZCB0byBhdHRlbXB0IHRvIGdldCBhIHN5bmMtcG9pbnQgbWFudWFsbHlcbiAgICAgICAgLy8gYnkgZmV0Y2hpbmcgYSBzZWdtZW50IGluIHRoZSBwbGF5bGlzdCBhbmQgY29uc3RydWN0aW5nXG4gICAgICAgIC8vIGEgc3luYy1wb2ludCBmcm9tIHRoYXQgaW5mb3JtYXRpb25cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIE5vdyBmaW5kIHRoZSBzeW5jLXBvaW50IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgY3VycmVudFRpbWUgYmVjYXVzZVxuICAgICAgLy8gdGhhdCBzaG91bGQgcmVzdWx0IGluIHRoZSBtb3N0IGFjY3VyYXRlIGd1ZXNzIGFib3V0IHdoaWNoIHNlZ21lbnRcbiAgICAgIC8vIHRvIGZldGNoXG5cblxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0U3luY1BvaW50XyhzeW5jUG9pbnRzLCB7XG4gICAgICAgIGtleTogJ3RpbWUnLFxuICAgICAgICB2YWx1ZTogY3VycmVudFRpbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgaGFzIGV4cGlyZWQgb2ZmIHRoZSBwbGF5bGlzdCBkdXJpbmcgcGxheWJhY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGxheWxpc3R9IHBsYXlsaXN0XG4gICAgICogICAgICAgIFBsYXlsaXN0IG9iamVjdCB0byBjYWxjdWxhdGUgZXhwaXJlZCBmcm9tXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGR1cmF0aW9uXG4gICAgICogICAgICAgIER1cmF0aW9uIG9mIHRoZSBNZWRpYVNvdXJjZSAoSW5maW5pdHkgaWYgcGxheWxpbmcgYSBsaXZlIHNvdXJjZSlcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfG51bGx9XG4gICAgICogICAgICAgICAgVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgaGFzIGV4cGlyZWQgb2ZmIHRoZSBwbGF5bGlzdCBkdXJpbmcgcGxheWJhY2suIE51bGxcbiAgICAgKiAgICAgICAgICBpZiBubyBzeW5jLXBvaW50cyBmb3IgdGhlIHBsYXlsaXN0IGNhbiBiZSBmb3VuZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0RXhwaXJlZFRpbWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFeHBpcmVkVGltZShwbGF5bGlzdCwgZHVyYXRpb24kJDEpIHtcbiAgICAgIGlmICghcGxheWxpc3QgfHwgIXBsYXlsaXN0LnNlZ21lbnRzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3luY1BvaW50cyA9IHRoaXMucnVuU3RyYXRlZ2llc18ocGxheWxpc3QsIGR1cmF0aW9uJCQxLCBwbGF5bGlzdC5kaXNjb250aW51aXR5U2VxdWVuY2UsIDApOyAvLyBXaXRob3V0IHN5bmMtcG9pbnRzLCB0aGVyZSBpcyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB0aGUgZXhwaXJlZCB0aW1lXG5cbiAgICAgIGlmICghc3luY1BvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBzeW5jUG9pbnQgPSB0aGlzLnNlbGVjdFN5bmNQb2ludF8oc3luY1BvaW50cywge1xuICAgICAgICBrZXk6ICdzZWdtZW50SW5kZXgnLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7IC8vIElmIHRoZSBzeW5jLXBvaW50IGlzIGJleW9uZCB0aGUgc3RhcnQgb2YgdGhlIHBsYXlsaXN0LCB3ZSB3YW50IHRvIHN1YnRyYWN0IHRoZVxuICAgICAgLy8gZHVyYXRpb24gZnJvbSBpbmRleCAwIHRvIHN5bmNQb2ludC5zZWdtZW50SW5kZXggaW5zdGVhZCBvZiBhZGRpbmcuXG5cbiAgICAgIGlmIChzeW5jUG9pbnQuc2VnbWVudEluZGV4ID4gMCkge1xuICAgICAgICBzeW5jUG9pbnQudGltZSAqPSAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE1hdGguYWJzKHN5bmNQb2ludC50aW1lICsgc3VtRHVyYXRpb25zKHBsYXlsaXN0LCBzeW5jUG9pbnQuc2VnbWVudEluZGV4LCAwKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWFjaCBzeW5jLXBvaW50IHN0cmF0ZWd5IGFuZCByZXR1cm5zIGEgbGlzdCBvZiBzeW5jLXBvaW50cyByZXR1cm5lZCBieSB0aGVcbiAgICAgKiBzdHJhdGVnaWVzXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7UGxheWxpc3R9IHBsYXlsaXN0XG4gICAgICogICAgICAgIFRoZSBwbGF5bGlzdCB0aGF0IG5lZWRzIGEgc3luYy1wb2ludFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkdXJhdGlvblxuICAgICAqICAgICAgICBEdXJhdGlvbiBvZiB0aGUgTWVkaWFTb3VyY2UgKEluZmluaXR5IGlmIHBsYXlpbmcgYSBsaXZlIHNvdXJjZSlcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gY3VycmVudFRpbWVsaW5lXG4gICAgICogICAgICAgIFRoZSBsYXN0IHRpbWVsaW5lIGZyb20gd2hpY2ggYSBzZWdtZW50IHdhcyBsb2FkZWRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAgICogICAgICAgICAgQSBsaXN0IG9mIHN5bmMtcG9pbnQgb2JqZWN0c1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdydW5TdHJhdGVnaWVzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1blN0cmF0ZWdpZXNfKHBsYXlsaXN0LCBkdXJhdGlvbiQkMSwgY3VycmVudFRpbWVsaW5lLCBjdXJyZW50VGltZSkge1xuICAgICAgdmFyIHN5bmNQb2ludHMgPSBbXTsgLy8gVHJ5IHRvIGZpbmQgYSBzeW5jLXBvaW50IGluIGJ5IHV0aWxpemluZyB2YXJpb3VzIHN0cmF0ZWdpZXMuLi5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW5jUG9pbnRTdHJhdGVnaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdHJhdGVneSA9IHN5bmNQb2ludFN0cmF0ZWdpZXNbaV07XG4gICAgICAgIHZhciBzeW5jUG9pbnQgPSBzdHJhdGVneS5ydW4odGhpcywgcGxheWxpc3QsIGR1cmF0aW9uJCQxLCBjdXJyZW50VGltZWxpbmUsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoc3luY1BvaW50KSB7XG4gICAgICAgICAgc3luY1BvaW50LnN0cmF0ZWd5ID0gc3RyYXRlZ3kubmFtZTtcbiAgICAgICAgICBzeW5jUG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5Lm5hbWUsXG4gICAgICAgICAgICBzeW5jUG9pbnQ6IHN5bmNQb2ludFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzeW5jUG9pbnRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRoZSBzeW5jLXBvaW50IG5lYXJlc3QgdGhlIHNwZWNpZmllZCB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc3luY1BvaW50c1xuICAgICAqICAgICAgICBMaXN0IG9mIHN5bmMtcG9pbnRzIHRvIHNlbGVjdCBmcm9tXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgICAqICAgICAgICBPYmplY3Qgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgYW5kIHZhbHVlIHdlIGFyZSB0YXJnZXRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0LmtleVxuICAgICAqICAgICAgICBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIHRhcmdldC4gTXVzdCBiZSBlaXRoZXIgJ3RpbWUnIG9yICdzZWdtZW50SW5kZXgnXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRhcmdldC52YWx1ZVxuICAgICAqICAgICAgICBUaGUgdmFsdWUgdG8gdGFyZ2V0IGZvciB0aGUgc3BlY2lmaWVkIGtleS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAqICAgICAgICAgIFRoZSBzeW5jLXBvaW50IG5lYXJlc3QgdGhlIHRhcmdldFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZWxlY3RTeW5jUG9pbnRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VsZWN0U3luY1BvaW50XyhzeW5jUG9pbnRzLCB0YXJnZXQpIHtcbiAgICAgIHZhciBiZXN0U3luY1BvaW50ID0gc3luY1BvaW50c1swXS5zeW5jUG9pbnQ7XG4gICAgICB2YXIgYmVzdERpc3RhbmNlID0gTWF0aC5hYnMoc3luY1BvaW50c1swXS5zeW5jUG9pbnRbdGFyZ2V0LmtleV0gLSB0YXJnZXQudmFsdWUpO1xuICAgICAgdmFyIGJlc3RTdHJhdGVneSA9IHN5bmNQb2ludHNbMF0uc3RyYXRlZ3k7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3luY1BvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3RGlzdGFuY2UgPSBNYXRoLmFicyhzeW5jUG9pbnRzW2ldLnN5bmNQb2ludFt0YXJnZXQua2V5XSAtIHRhcmdldC52YWx1ZSk7XG5cbiAgICAgICAgaWYgKG5ld0Rpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgYmVzdERpc3RhbmNlID0gbmV3RGlzdGFuY2U7XG4gICAgICAgICAgYmVzdFN5bmNQb2ludCA9IHN5bmNQb2ludHNbaV0uc3luY1BvaW50O1xuICAgICAgICAgIGJlc3RTdHJhdGVneSA9IHN5bmNQb2ludHNbaV0uc3RyYXRlZ3k7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXJfKCdzeW5jUG9pbnQgZm9yIFsnICsgdGFyZ2V0LmtleSArICc6ICcgKyB0YXJnZXQudmFsdWUgKyAnXSBjaG9zZW4gd2l0aCBzdHJhdGVneScgKyAoJyBbJyArIGJlc3RTdHJhdGVneSArICddOiBbdGltZTonICsgYmVzdFN5bmNQb2ludC50aW1lICsgJywnKSArICgnIHNlZ21lbnRJbmRleDonICsgYmVzdFN5bmNQb2ludC5zZWdtZW50SW5kZXggKyAnXScpKTtcbiAgICAgIHJldHVybiBiZXN0U3luY1BvaW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYXZlIGFueSBtZXRhLWRhdGEgcHJlc2VudCBvbiB0aGUgc2VnbWVudHMgd2hlbiBzZWdtZW50cyBsZWF2ZVxuICAgICAqIHRoZSBsaXZlIHdpbmRvdyB0byB0aGUgcGxheWxpc3QgdG8gYWxsb3cgZm9yIHN5bmNocm9uaXphdGlvbiBhdCB0aGVcbiAgICAgKiBwbGF5bGlzdCBsZXZlbCBsYXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGxheWxpc3R9IG9sZFBsYXlsaXN0IC0gVGhlIHByZXZpb3VzIGFjdGl2ZSBwbGF5bGlzdFxuICAgICAqIEBwYXJhbSB7UGxheWxpc3R9IG5ld1BsYXlsaXN0IC0gVGhlIHVwZGF0ZWQgYW5kIG1vc3QgY3VycmVudCBwbGF5bGlzdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzYXZlRXhwaXJlZFNlZ21lbnRJbmZvJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2F2ZUV4cGlyZWRTZWdtZW50SW5mbyhvbGRQbGF5bGlzdCwgbmV3UGxheWxpc3QpIHtcbiAgICAgIHZhciBtZWRpYVNlcXVlbmNlRGlmZiA9IG5ld1BsYXlsaXN0Lm1lZGlhU2VxdWVuY2UgLSBvbGRQbGF5bGlzdC5tZWRpYVNlcXVlbmNlOyAvLyBXaGVuIGEgc2VnbWVudCBleHBpcmVzIGZyb20gdGhlIHBsYXlsaXN0IGFuZCBpdCBoYXMgYSBzdGFydCB0aW1lXG4gICAgICAvLyBzYXZlIHRoYXQgaW5mb3JtYXRpb24gYXMgYSBwb3NzaWJsZSBzeW5jLXBvaW50IHJlZmVyZW5jZSBpbiBmdXR1cmVcblxuICAgICAgZm9yICh2YXIgaSA9IG1lZGlhU2VxdWVuY2VEaWZmIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGxhc3RSZW1vdmVkU2VnbWVudCA9IG9sZFBsYXlsaXN0LnNlZ21lbnRzW2ldO1xuXG4gICAgICAgIGlmIChsYXN0UmVtb3ZlZFNlZ21lbnQgJiYgdHlwZW9mIGxhc3RSZW1vdmVkU2VnbWVudC5zdGFydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBuZXdQbGF5bGlzdC5zeW5jSW5mbyA9IHtcbiAgICAgICAgICAgIG1lZGlhU2VxdWVuY2U6IG9sZFBsYXlsaXN0Lm1lZGlhU2VxdWVuY2UgKyBpLFxuICAgICAgICAgICAgdGltZTogbGFzdFJlbW92ZWRTZWdtZW50LnN0YXJ0XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmxvZ2dlcl8oJ3BsYXlsaXN0IHJlZnJlc2ggc3luYzogW3RpbWU6JyArIG5ld1BsYXlsaXN0LnN5bmNJbmZvLnRpbWUgKyAnLCcgKyAoJyBtZWRpYVNlcXVlbmNlOiAnICsgbmV3UGxheWxpc3Quc3luY0luZm8ubWVkaWFTZXF1ZW5jZSArICddJykpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlcignc3luY2luZm91cGRhdGUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYXZlIHRoZSBtYXBwaW5nIGZyb20gcGxheWxpc3QncyBQcm9ncmFtRGF0ZVRpbWUgdG8gZGlzcGxheS4gVGhpcyBzaG91bGRcbiAgICAgKiBvbmx5IGV2ZXIgaGFwcGVuIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIHBsYXliYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQbGF5bGlzdH0gcGxheWxpc3QgLSBUaGUgY3VycmVudGx5IGFjdGl2ZSBwbGF5bGlzdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXREYXRlVGltZU1hcHBpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREYXRlVGltZU1hcHBpbmcocGxheWxpc3QpIHtcbiAgICAgIGlmICghdGhpcy5kYXRldGltZVRvRGlzcGxheVRpbWUgJiYgcGxheWxpc3Quc2VnbWVudHMgJiYgcGxheWxpc3Quc2VnbWVudHMubGVuZ3RoICYmIHBsYXlsaXN0LnNlZ21lbnRzWzBdLmRhdGVUaW1lT2JqZWN0KSB7XG4gICAgICAgIHZhciBwbGF5bGlzdFRpbWVzdGFtcCA9IHBsYXlsaXN0LnNlZ21lbnRzWzBdLmRhdGVUaW1lT2JqZWN0LmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVUb0Rpc3BsYXlUaW1lID0gLXBsYXlsaXN0VGltZXN0YW1wO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGluc3BlY3Rpb24gY2FjaGUgd2hlbiB3ZSBkbyBhIHJlbmRpdGlvblxuICAgICAqIHN3aXRjaFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgdGhpcy5pbnNwZWN0Q2FjaGVfID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9iZSBvciBpbnNwZWN0IGEgZm1wNCBvciBhbiBtcGVnMi10cyBzZWdtZW50IHRvIGRldGVybWluZSB0aGUgc3RhcnRcbiAgICAgKiBhbmQgZW5kIG9mIHRoZSBzZWdtZW50IGluIGl0J3MgaW50ZXJuYWwgXCJtZWRpYSB0aW1lXCIuIFVzZWQgdG8gZ2VuZXJhdGVcbiAgICAgKiBtYXBwaW5ncyBmcm9tIHRoYXQgaW50ZXJuYWwgXCJtZWRpYSB0aW1lXCIgdG8gdGhlIGRpc3BsYXkgdGltZSB0aGF0IGlzXG4gICAgICogc2hvd24gb24gdGhlIHBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2VnbWVudEluZm99IHNlZ21lbnRJbmZvIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHJlcXVlc3QgaW5mb3JtYXRpb25cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncHJvYmVTZWdtZW50SW5mbycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByb2JlU2VnbWVudEluZm8oc2VnbWVudEluZm8pIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudEluZm8uc2VnbWVudDtcbiAgICAgIHZhciBwbGF5bGlzdCA9IHNlZ21lbnRJbmZvLnBsYXlsaXN0O1xuICAgICAgdmFyIHRpbWluZ0luZm8gPSB2b2lkIDA7XG5cbiAgICAgIGlmIChzZWdtZW50Lm1hcCkge1xuICAgICAgICB0aW1pbmdJbmZvID0gdGhpcy5wcm9iZU1wNFNlZ21lbnRfKHNlZ21lbnRJbmZvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWluZ0luZm8gPSB0aGlzLnByb2JlVHNTZWdtZW50XyhzZWdtZW50SW5mbyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aW1pbmdJbmZvKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZVNlZ21lbnRUaW1lTWFwcGluZ18oc2VnbWVudEluZm8sIHRpbWluZ0luZm8pKSB7XG4gICAgICAgICAgdGhpcy5zYXZlRGlzY29udGludWl0eVN5bmNJbmZvXyhzZWdtZW50SW5mbyk7IC8vIElmIHRoZSBwbGF5bGlzdCBkb2VzIG5vdCBoYXZlIHN5bmMgaW5mb3JtYXRpb24geWV0LCByZWNvcmQgdGhhdCBpbmZvcm1hdGlvblxuICAgICAgICAgIC8vIG5vdyB3aXRoIHNlZ21lbnQgdGltaW5nIGluZm9ybWF0aW9uXG5cbiAgICAgICAgICBpZiAoIXBsYXlsaXN0LnN5bmNJbmZvKSB7XG4gICAgICAgICAgICBwbGF5bGlzdC5zeW5jSW5mbyA9IHtcbiAgICAgICAgICAgICAgbWVkaWFTZXF1ZW5jZTogcGxheWxpc3QubWVkaWFTZXF1ZW5jZSArIHNlZ21lbnRJbmZvLm1lZGlhSW5kZXgsXG4gICAgICAgICAgICAgIHRpbWU6IHNlZ21lbnQuc3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aW1pbmdJbmZvO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9iZSBhbiBmbXA0IG9yIGFuIG1wZWcyLXRzIHNlZ21lbnQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFydCBvZiB0aGUgc2VnbWVudFxuICAgICAqIGluIGl0J3MgaW50ZXJuYWwgXCJtZWRpYSB0aW1lXCIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7U2VnbWVudEluZm99IHNlZ21lbnRJbmZvIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHJlcXVlc3QgaW5mb3JtYXRpb25cbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBzdGFydCBhbmQgZW5kIHRpbWUgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCBpbiBcIm1lZGlhIHRpbWVcIlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9iZU1wNFNlZ21lbnRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvYmVNcDRTZWdtZW50XyhzZWdtZW50SW5mbykge1xuICAgICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50SW5mby5zZWdtZW50O1xuICAgICAgdmFyIHRpbWVzY2FsZXMgPSBtcDRwcm9iZS50aW1lc2NhbGUoc2VnbWVudC5tYXAuYnl0ZXMpO1xuICAgICAgdmFyIHN0YXJ0VGltZSA9IG1wNHByb2JlLnN0YXJ0VGltZSh0aW1lc2NhbGVzLCBzZWdtZW50SW5mby5ieXRlcyk7XG5cbiAgICAgIGlmIChzZWdtZW50SW5mby50aW1lc3RhbXBPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgc2VnbWVudEluZm8udGltZXN0YW1wT2Zmc2V0IC09IHN0YXJ0VGltZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0VGltZSxcbiAgICAgICAgZW5kOiBzdGFydFRpbWUgKyBzZWdtZW50LmR1cmF0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9iZSBhbiBtcGVnMi10cyBzZWdtZW50IHRvIGRldGVybWluZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VnbWVudFxuICAgICAqIGluIGl0J3MgaW50ZXJuYWwgXCJtZWRpYSB0aW1lXCIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7U2VnbWVudEluZm99IHNlZ21lbnRJbmZvIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHJlcXVlc3QgaW5mb3JtYXRpb25cbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBzdGFydCBhbmQgZW5kIHRpbWUgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCBpbiBcIm1lZGlhIHRpbWVcIlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9iZVRzU2VnbWVudF8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9iZVRzU2VnbWVudF8oc2VnbWVudEluZm8pIHtcbiAgICAgIHZhciB0aW1lSW5mbyA9IHRzcHJvYmUoc2VnbWVudEluZm8uYnl0ZXMsIHRoaXMuaW5zcGVjdENhY2hlXyk7XG4gICAgICB2YXIgc2VnbWVudFN0YXJ0VGltZSA9IHZvaWQgMDtcbiAgICAgIHZhciBzZWdtZW50RW5kVGltZSA9IHZvaWQgMDtcbiAgICAgIHZhciBzZWdtZW50VGltZXN0YW1wSW5mbyA9IHZvaWQgMDtcblxuICAgICAgaWYgKCF0aW1lSW5mbykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRpbWVJbmZvLnZpZGVvICYmIHRpbWVJbmZvLnZpZGVvLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLmluc3BlY3RDYWNoZV8gPSB0aW1lSW5mby52aWRlb1sxXS5kdHM7XG4gICAgICAgIHNlZ21lbnRTdGFydFRpbWUgPSB0aW1lSW5mby52aWRlb1swXS5kdHNUaW1lO1xuICAgICAgICBzZWdtZW50RW5kVGltZSA9IHRpbWVJbmZvLnZpZGVvWzFdLmR0c1RpbWU7XG4gICAgICAgIHNlZ21lbnRUaW1lc3RhbXBJbmZvID0gdGltZUluZm8udmlkZW87XG4gICAgICB9IGVsc2UgaWYgKHRpbWVJbmZvLmF1ZGlvICYmIHRpbWVJbmZvLmF1ZGlvLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLmluc3BlY3RDYWNoZV8gPSB0aW1lSW5mby5hdWRpb1sxXS5kdHM7XG4gICAgICAgIHNlZ21lbnRTdGFydFRpbWUgPSB0aW1lSW5mby5hdWRpb1swXS5kdHNUaW1lO1xuICAgICAgICBzZWdtZW50RW5kVGltZSA9IHRpbWVJbmZvLmF1ZGlvWzFdLmR0c1RpbWU7XG4gICAgICAgIHNlZ21lbnRUaW1lc3RhbXBJbmZvID0gdGltZUluZm8uYXVkaW87XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9iZWRJbmZvID0ge1xuICAgICAgICBzZWdtZW50VGltZXN0YW1wSW5mbzogc2VnbWVudFRpbWVzdGFtcEluZm8sXG4gICAgICAgIHN0YXJ0OiBzZWdtZW50U3RhcnRUaW1lLFxuICAgICAgICBlbmQ6IHNlZ21lbnRFbmRUaW1lLFxuICAgICAgICBjb250YWluc1ZpZGVvOiB0aW1lSW5mby52aWRlbyAmJiB0aW1lSW5mby52aWRlby5sZW5ndGggPT09IDIsXG4gICAgICAgIGNvbnRhaW5zQXVkaW86IHRpbWVJbmZvLmF1ZGlvICYmIHRpbWVJbmZvLmF1ZGlvLmxlbmd0aCA9PT0gMlxuICAgICAgfTtcbiAgICAgIHJldHVybiBwcm9iZWRJbmZvO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3RpbWVzdGFtcE9mZnNldEZvclRpbWVsaW5lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGltZXN0YW1wT2Zmc2V0Rm9yVGltZWxpbmUodGltZWxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lbGluZXNbdGltZWxpbmVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMudGltZWxpbmVzW3RpbWVsaW5lXS50aW1lO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ21hcHBpbmdGb3JUaW1lbGluZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hcHBpbmdGb3JUaW1lbGluZSh0aW1lbGluZSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpbWVsaW5lc1t0aW1lbGluZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50aW1lbGluZXNbdGltZWxpbmVdLm1hcHBpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZSB0aGUgXCJtZWRpYSB0aW1lXCIgZm9yIGEgc2VnbWVudCB0byBnZW5lcmF0ZSBhIG1hcHBpbmcgdG8gXCJkaXNwbGF5IHRpbWVcIiBhbmRcbiAgICAgKiBzYXZlIHRoYXQgZGlzcGxheSB0aW1lIHRvIHRoZSBzZWdtZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge1NlZ21lbnRJbmZvfSBzZWdtZW50SW5mb1xuICAgICAqICAgICAgICBUaGUgY3VycmVudCBhY3RpdmUgcmVxdWVzdCBpbmZvcm1hdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0aW1pbmdJbmZvXG4gICAgICogICAgICAgIFRoZSBzdGFydCBhbmQgZW5kIHRpbWUgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCBpbiBcIm1lZGlhIHRpbWVcIlxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqICAgICAgICAgIFJldHVybnMgZmFsc2UgaWYgc2VnbWVudCB0aW1lIG1hcHBpbmcgY291bGQgbm90IGJlIGNhbGN1bGF0ZWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2FsY3VsYXRlU2VnbWVudFRpbWVNYXBwaW5nXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZVNlZ21lbnRUaW1lTWFwcGluZ18oc2VnbWVudEluZm8sIHRpbWluZ0luZm8pIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudEluZm8uc2VnbWVudDtcbiAgICAgIHZhciBtYXBwaW5nT2JqID0gdGhpcy50aW1lbGluZXNbc2VnbWVudEluZm8udGltZWxpbmVdO1xuXG4gICAgICBpZiAoc2VnbWVudEluZm8udGltZXN0YW1wT2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgIG1hcHBpbmdPYmogPSB7XG4gICAgICAgICAgdGltZTogc2VnbWVudEluZm8uc3RhcnRPZlNlZ21lbnQsXG4gICAgICAgICAgbWFwcGluZzogc2VnbWVudEluZm8uc3RhcnRPZlNlZ21lbnQgLSB0aW1pbmdJbmZvLnN0YXJ0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGltZWxpbmVzW3NlZ21lbnRJbmZvLnRpbWVsaW5lXSA9IG1hcHBpbmdPYmo7XG4gICAgICAgIHRoaXMudHJpZ2dlcigndGltZXN0YW1wb2Zmc2V0Jyk7XG4gICAgICAgIHRoaXMubG9nZ2VyXygndGltZSBtYXBwaW5nIGZvciB0aW1lbGluZSAnICsgc2VnbWVudEluZm8udGltZWxpbmUgKyAnOiAnICsgKCdbdGltZTogJyArIG1hcHBpbmdPYmoudGltZSArICddIFttYXBwaW5nOiAnICsgbWFwcGluZ09iai5tYXBwaW5nICsgJ10nKSk7XG4gICAgICAgIHNlZ21lbnQuc3RhcnQgPSBzZWdtZW50SW5mby5zdGFydE9mU2VnbWVudDtcbiAgICAgICAgc2VnbWVudC5lbmQgPSB0aW1pbmdJbmZvLmVuZCArIG1hcHBpbmdPYmoubWFwcGluZztcbiAgICAgIH0gZWxzZSBpZiAobWFwcGluZ09iaikge1xuICAgICAgICBzZWdtZW50LnN0YXJ0ID0gdGltaW5nSW5mby5zdGFydCArIG1hcHBpbmdPYmoubWFwcGluZztcbiAgICAgICAgc2VnbWVudC5lbmQgPSB0aW1pbmdJbmZvLmVuZCArIG1hcHBpbmdPYmoubWFwcGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVhY2ggdGltZSB3ZSBoYXZlIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHBsYXlsaXN0LCBhdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgbG9jYXRpb25cbiAgICAgKiBpbiBkaXNwbGF5IG9mIHRoZSBzdGFydCBvZiB0aGUgZGlzY29udGludWl0eSBhbmQgc2F2ZSB0aGF0LiBXZSBhbHNvIHNhdmUgYW4gYWNjdXJhY3lcbiAgICAgKiB2YWx1ZSBzbyB0aGF0IHdlIHNhdmUgdmFsdWVzIHdpdGggdGhlIG1vc3QgYWNjdXJhY3kgKGNsb3Nlc3QgdG8gMC4pXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7U2VnbWVudEluZm99IHNlZ21lbnRJbmZvIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHJlcXVlc3QgaW5mb3JtYXRpb25cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2F2ZURpc2NvbnRpbnVpdHlTeW5jSW5mb18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzYXZlRGlzY29udGludWl0eVN5bmNJbmZvXyhzZWdtZW50SW5mbykge1xuICAgICAgdmFyIHBsYXlsaXN0ID0gc2VnbWVudEluZm8ucGxheWxpc3Q7XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRJbmZvLnNlZ21lbnQ7IC8vIElmIHRoZSBjdXJyZW50IHNlZ21lbnQgaXMgYSBkaXNjb250aW51aXR5IHRoZW4gd2Uga25vdyBleGFjdGx5IHdoZXJlXG4gICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGFuZCBpdCdzIGFjY3VyYWN5IGlzIDAgKGdyZWF0ZXIgYWNjdXJhY3kgdmFsdWVzXG4gICAgICAvLyBtZWFuIG1vcmUgYXBwcm94aW1hdGlvbilcblxuICAgICAgaWYgKHNlZ21lbnQuZGlzY29udGludWl0eSkge1xuICAgICAgICB0aGlzLmRpc2NvbnRpbnVpdGllc1tzZWdtZW50LnRpbWVsaW5lXSA9IHtcbiAgICAgICAgICB0aW1lOiBzZWdtZW50LnN0YXJ0LFxuICAgICAgICAgIGFjY3VyYWN5OiAwXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTdGFydHMgJiYgcGxheWxpc3QuZGlzY29udGludWl0eVN0YXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciBmdXR1cmUgZGlzY29udGludWl0aWVzIHRoYXQgd2UgY2FuIHByb3ZpZGUgYmV0dGVyIHRpbWluZ1xuICAgICAgICAvLyBpbmZvcm1hdGlvbiBmb3IgYW5kIHNhdmUgdGhhdCBpbmZvcm1hdGlvbiBmb3Igc3luYyBwdXJwb3Nlc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTdGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgc2VnbWVudEluZGV4ID0gcGxheWxpc3QuZGlzY29udGludWl0eVN0YXJ0c1tpXTtcbiAgICAgICAgICB2YXIgZGlzY29udGludWl0eSA9IHBsYXlsaXN0LmRpc2NvbnRpbnVpdHlTZXF1ZW5jZSArIGkgKyAxO1xuICAgICAgICAgIHZhciBtZWRpYUluZGV4RGlmZiA9IHNlZ21lbnRJbmRleCAtIHNlZ21lbnRJbmZvLm1lZGlhSW5kZXg7XG4gICAgICAgICAgdmFyIGFjY3VyYWN5ID0gTWF0aC5hYnMobWVkaWFJbmRleERpZmYpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmRpc2NvbnRpbnVpdGllc1tkaXNjb250aW51aXR5XSB8fCB0aGlzLmRpc2NvbnRpbnVpdGllc1tkaXNjb250aW51aXR5XS5hY2N1cmFjeSA+IGFjY3VyYWN5KSB7XG4gICAgICAgICAgICB2YXIgdGltZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKG1lZGlhSW5kZXhEaWZmIDwgMCkge1xuICAgICAgICAgICAgICB0aW1lID0gc2VnbWVudC5zdGFydCAtIHN1bUR1cmF0aW9ucyhwbGF5bGlzdCwgc2VnbWVudEluZm8ubWVkaWFJbmRleCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRpbWUgPSBzZWdtZW50LmVuZCArIHN1bUR1cmF0aW9ucyhwbGF5bGlzdCwgc2VnbWVudEluZm8ubWVkaWFJbmRleCArIDEsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlzY29udGludWl0aWVzW2Rpc2NvbnRpbnVpdHldID0ge1xuICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxuICAgICAgICAgICAgICBhY2N1cmFjeTogYWNjdXJhY3lcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTeW5jQ29udHJvbGxlcjtcbn0odmlkZW9qcyQxLkV2ZW50VGFyZ2V0KTtcblxudmFyIERlY3J5cHRlciQxID0gbmV3IHNoaW1Xb3JrZXIoXCIuL2RlY3J5cHRlci13b3JrZXIud29ya2VyLmpzXCIsIGZ1bmN0aW9uICh3aW5kb3csIGRvY3VtZW50JCQxKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZGVjcnlwdGVyV29ya2VyID0gZnVuY3Rpb24gKCkge1xuICAgIC8qXG4gICAgICogcGtjczcucGFkXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2JyaWdodGNvdmUvcGtjczdcbiAgICAgKlxuICAgICAqIENvcHlyaWdodCAoYykgMjAxNCBCcmlnaHRjb3ZlXG4gICAgICogTGljZW5zZWQgdW5kZXIgdGhlIGFwYWNoZTIgbGljZW5zZS5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1YmFycmF5IG9mIGEgVWludDhBcnJheSB3aXRob3V0IFBLQ1MjNyBwYWRkaW5nLlxuICAgICAqIEBwYXJhbSBwYWRkZWQge1VpbnQ4QXJyYXl9IHVuZW5jcnlwdGVkIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHBhZGRlZFxuICAgICAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9IHRoZSB1bnBhZGRlZCBieXRlc1xuICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTY1MlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVucGFkKHBhZGRlZCkge1xuICAgICAgcmV0dXJuIHBhZGRlZC5zdWJhcnJheSgwLCBwYWRkZWQuYnl0ZUxlbmd0aCAtIHBhZGRlZFtwYWRkZWQuYnl0ZUxlbmd0aCAtIDFdKTtcbiAgICB9XG5cbiAgICB2YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiBjbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICAgIH07XG5cbiAgICB2YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IGZ1bmN0aW9uIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgICAgaWYgKCFzZWxmKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZmlsZSBhZXMuanNcbiAgICAgKlxuICAgICAqIFRoaXMgZmlsZSBjb250YWlucyBhbiBhZGFwdGF0aW9uIG9mIHRoZSBBRVMgZGVjcnlwdGlvbiBhbGdvcml0aG1cbiAgICAgKiBmcm9tIHRoZSBTdGFuZGZvcmQgSmF2YXNjcmlwdCBDcnlwdG9ncmFwaHkgTGlicmFyeS4gVGhhdCB3b3JrIGlzXG4gICAgICogY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbnMgbm90aWNlOlxuICAgICAqXG4gICAgICogQ29weXJpZ2h0IDIwMDktMjAxMCBFbWlseSBTdGFyaywgTWlrZSBIYW1idXJnLCBEYW4gQm9uZWguXG4gICAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgICAgKlxuICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICAgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAgICAgKiBtZXQ6XG4gICAgICpcbiAgICAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAgKlxuICAgICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAgICAgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICAgICAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICAgICAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICAgKlxuICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUlxuICAgICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gICAgICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICAgICAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBPUiBDT05UUklCVVRPUlMgQkVcbiAgICAgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gICAgICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0ZcbiAgICAgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1JcbiAgICAgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSxcbiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRVxuICAgICAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU5cbiAgICAgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAgICAgKlxuICAgICAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvblxuICAgICAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmdcbiAgICAgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgYXV0aG9ycy5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZCB0aGUgUy1ib3ggdGFibGVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuXG4gICAgdmFyIHByZWNvbXB1dGUgPSBmdW5jdGlvbiBwcmVjb21wdXRlKCkge1xuICAgICAgdmFyIHRhYmxlcyA9IFtbW10sIFtdLCBbXSwgW10sIFtdXSwgW1tdLCBbXSwgW10sIFtdLCBbXV1dO1xuICAgICAgdmFyIGVuY1RhYmxlID0gdGFibGVzWzBdO1xuICAgICAgdmFyIGRlY1RhYmxlID0gdGFibGVzWzFdO1xuICAgICAgdmFyIHNib3ggPSBlbmNUYWJsZVs0XTtcbiAgICAgIHZhciBzYm94SW52ID0gZGVjVGFibGVbNF07XG4gICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgIHZhciB4ID0gdm9pZCAwO1xuICAgICAgdmFyIHhJbnYgPSB2b2lkIDA7XG4gICAgICB2YXIgZCA9IFtdO1xuICAgICAgdmFyIHRoID0gW107XG4gICAgICB2YXIgeDIgPSB2b2lkIDA7XG4gICAgICB2YXIgeDQgPSB2b2lkIDA7XG4gICAgICB2YXIgeDggPSB2b2lkIDA7XG4gICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgIHZhciB0RW5jID0gdm9pZCAwO1xuICAgICAgdmFyIHREZWMgPSB2b2lkIDA7IC8vIENvbXB1dGUgZG91YmxlIGFuZCB0aGlyZCB0YWJsZXNcblxuICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgIHRoWyhkW2ldID0gaSA8PCAxIF4gKGkgPj4gNykgKiAyODMpIF4gaV0gPSBpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHggPSB4SW52ID0gMDsgIXNib3hbeF07IHggXj0geDIgfHwgMSwgeEludiA9IHRoW3hJbnZdIHx8IDEpIHtcbiAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG4gICAgICAgIHMgPSB4SW52IF4geEludiA8PCAxIF4geEludiA8PCAyIF4geEludiA8PCAzIF4geEludiA8PCA0O1xuICAgICAgICBzID0gcyA+PiA4IF4gcyAmIDI1NSBeIDk5O1xuICAgICAgICBzYm94W3hdID0gcztcbiAgICAgICAgc2JveEludltzXSA9IHg7IC8vIENvbXB1dGUgTWl4Q29sdW1uc1xuXG4gICAgICAgIHg4ID0gZFt4NCA9IGRbeDIgPSBkW3hdXV07XG4gICAgICAgIHREZWMgPSB4OCAqIDB4MTAxMDEwMSBeIHg0ICogMHgxMDAwMSBeIHgyICogMHgxMDEgXiB4ICogMHgxMDEwMTAwO1xuICAgICAgICB0RW5jID0gZFtzXSAqIDB4MTAxIF4gcyAqIDB4MTAxMDEwMDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgZW5jVGFibGVbaV1beF0gPSB0RW5jID0gdEVuYyA8PCAyNCBeIHRFbmMgPj4+IDg7XG4gICAgICAgICAgZGVjVGFibGVbaV1bc10gPSB0RGVjID0gdERlYyA8PCAyNCBeIHREZWMgPj4+IDg7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ29tcGFjdGlmeS4gQ29uc2lkZXJhYmxlIHNwZWVkdXAgb24gRmlyZWZveC5cblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgIGVuY1RhYmxlW2ldID0gZW5jVGFibGVbaV0uc2xpY2UoMCk7XG4gICAgICAgIGRlY1RhYmxlW2ldID0gZGVjVGFibGVbaV0uc2xpY2UoMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YWJsZXM7XG4gICAgfTtcblxuICAgIHZhciBhZXNUYWJsZXMgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlIG91dCBhbiBBRVMga2V5IGZvciBib3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uIFRoaXNcbiAgICAgKiBpcyBhIGxvdy1sZXZlbCBjbGFzcy4gVXNlIGEgY2lwaGVyIG1vZGUgdG8gZG8gYnVsayBlbmNyeXB0aW9uLlxuICAgICAqXG4gICAgICogQGNsYXNzIEFFU1xuICAgICAqIEBwYXJhbSBrZXkge0FycmF5fSBUaGUga2V5IGFzIGFuIGFycmF5IG9mIDQsIDYgb3IgOCB3b3Jkcy5cbiAgICAgKi9cblxuICAgIHZhciBBRVMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBBRVMoa2V5KSB7XG4gICAgICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEFFUyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXhwYW5kZWQgUy1ib3ggYW5kIGludmVyc2UgUy1ib3ggdGFibGVzLiBUaGVzZSB3aWxsIGJlIGNvbXB1dGVkXG4gICAgICAgICAqIG9uIHRoZSBjbGllbnQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHNlbmQgdGhlbSBkb3duIHRoZSB3aXJlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGVyZSBhcmUgdHdvIHRhYmxlcywgX3RhYmxlc1swXSBpcyBmb3IgZW5jcnlwdGlvbiBhbmRcbiAgICAgICAgICogX3RhYmxlc1sxXSBpcyBmb3IgZGVjcnlwdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGZpcnN0IDQgc3ViLXRhYmxlcyBhcmUgdGhlIGV4cGFuZGVkIFMtYm94IHdpdGggTWl4Q29sdW1ucy4gVGhlXG4gICAgICAgICAqIGxhc3QgKF90YWJsZXNbMDFdWzRdKSBpcyB0aGUgUy1ib3ggaXRzZWxmLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSB5ZXQgdG8gcHJlY29tcHV0ZSB0aGUgUy1ib3ggdGFibGVzXG4gICAgICAgIC8vIGRvIHNvIG5vd1xuXG4gICAgICAgIGlmICghYWVzVGFibGVzKSB7XG4gICAgICAgICAgYWVzVGFibGVzID0gcHJlY29tcHV0ZSgpO1xuICAgICAgICB9IC8vIHRoZW4gbWFrZSBhIGNvcHkgb2YgdGhhdCBvYmplY3QgZm9yIHVzZVxuXG5cbiAgICAgICAgdGhpcy5fdGFibGVzID0gW1thZXNUYWJsZXNbMF1bMF0uc2xpY2UoKSwgYWVzVGFibGVzWzBdWzFdLnNsaWNlKCksIGFlc1RhYmxlc1swXVsyXS5zbGljZSgpLCBhZXNUYWJsZXNbMF1bM10uc2xpY2UoKSwgYWVzVGFibGVzWzBdWzRdLnNsaWNlKCldLCBbYWVzVGFibGVzWzFdWzBdLnNsaWNlKCksIGFlc1RhYmxlc1sxXVsxXS5zbGljZSgpLCBhZXNUYWJsZXNbMV1bMl0uc2xpY2UoKSwgYWVzVGFibGVzWzFdWzNdLnNsaWNlKCksIGFlc1RhYmxlc1sxXVs0XS5zbGljZSgpXV07XG4gICAgICAgIHZhciBpID0gdm9pZCAwO1xuICAgICAgICB2YXIgaiA9IHZvaWQgMDtcbiAgICAgICAgdmFyIHRtcCA9IHZvaWQgMDtcbiAgICAgICAgdmFyIGVuY0tleSA9IHZvaWQgMDtcbiAgICAgICAgdmFyIGRlY0tleSA9IHZvaWQgMDtcbiAgICAgICAgdmFyIHNib3ggPSB0aGlzLl90YWJsZXNbMF1bNF07XG4gICAgICAgIHZhciBkZWNUYWJsZSA9IHRoaXMuX3RhYmxlc1sxXTtcbiAgICAgICAgdmFyIGtleUxlbiA9IGtleS5sZW5ndGg7XG4gICAgICAgIHZhciByY29uID0gMTtcblxuICAgICAgICBpZiAoa2V5TGVuICE9PSA0ICYmIGtleUxlbiAhPT0gNiAmJiBrZXlMZW4gIT09IDgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWVzIGtleSBzaXplJyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbmNLZXkgPSBrZXkuc2xpY2UoMCk7XG4gICAgICAgIGRlY0tleSA9IFtdO1xuICAgICAgICB0aGlzLl9rZXkgPSBbZW5jS2V5LCBkZWNLZXldOyAvLyBzY2hlZHVsZSBlbmNyeXB0aW9uIGtleXNcblxuICAgICAgICBmb3IgKGkgPSBrZXlMZW47IGkgPCA0ICoga2V5TGVuICsgMjg7IGkrKykge1xuICAgICAgICAgIHRtcCA9IGVuY0tleVtpIC0gMV07IC8vIGFwcGx5IHNib3hcblxuICAgICAgICAgIGlmIChpICUga2V5TGVuID09PSAwIHx8IGtleUxlbiA9PT0gOCAmJiBpICUga2V5TGVuID09PSA0KSB7XG4gICAgICAgICAgICB0bXAgPSBzYm94W3RtcCA+Pj4gMjRdIDw8IDI0IF4gc2JveFt0bXAgPj4gMTYgJiAyNTVdIDw8IDE2IF4gc2JveFt0bXAgPj4gOCAmIDI1NV0gPDwgOCBeIHNib3hbdG1wICYgMjU1XTsgLy8gc2hpZnQgcm93cyBhbmQgYWRkIHJjb25cblxuICAgICAgICAgICAgaWYgKGkgJSBrZXlMZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgdG1wID0gdG1wIDw8IDggXiB0bXAgPj4+IDI0IF4gcmNvbiA8PCAyNDtcbiAgICAgICAgICAgICAgcmNvbiA9IHJjb24gPDwgMSBeIChyY29uID4+IDcpICogMjgzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVuY0tleVtpXSA9IGVuY0tleVtpIC0ga2V5TGVuXSBeIHRtcDtcbiAgICAgICAgfSAvLyBzY2hlZHVsZSBkZWNyeXB0aW9uIGtleXNcblxuXG4gICAgICAgIGZvciAoaiA9IDA7IGk7IGorKywgaS0tKSB7XG4gICAgICAgICAgdG1wID0gZW5jS2V5W2ogJiAzID8gaSA6IGkgLSA0XTtcblxuICAgICAgICAgIGlmIChpIDw9IDQgfHwgaiA8IDQpIHtcbiAgICAgICAgICAgIGRlY0tleVtqXSA9IHRtcDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVjS2V5W2pdID0gZGVjVGFibGVbMF1bc2JveFt0bXAgPj4+IDI0XV0gXiBkZWNUYWJsZVsxXVtzYm94W3RtcCA+PiAxNiAmIDI1NV1dIF4gZGVjVGFibGVbMl1bc2JveFt0bXAgPj4gOCAmIDI1NV1dIF4gZGVjVGFibGVbM11bc2JveFt0bXAgJiAyNTVdXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogRGVjcnlwdCAxNiBieXRlcywgc3BlY2lmaWVkIGFzIGZvdXIgMzItYml0IHdvcmRzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBlbmNyeXB0ZWQwIHRoZSBmaXJzdCB3b3JkIHRvIGRlY3J5cHRcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBlbmNyeXB0ZWQxIHRoZSBzZWNvbmQgd29yZCB0byBkZWNyeXB0XG4gICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5jcnlwdGVkMiB0aGUgdGhpcmQgd29yZCB0byBkZWNyeXB0XG4gICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5jcnlwdGVkMyB0aGUgZm91cnRoIHdvcmQgdG8gZGVjcnlwdFxuICAgICAgICogQHBhcmFtIHtJbnQzMkFycmF5fSBvdXQgdGhlIGFycmF5IHRvIHdyaXRlIHRoZSBkZWNyeXB0ZWQgd29yZHNcbiAgICAgICAqIGludG9cbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBvdXRwdXQgYXJyYXkgdG8gc3RhcnRcbiAgICAgICAqIHdyaXRpbmcgcmVzdWx0c1xuICAgICAgICogQHJldHVybiB7QXJyYXl9IFRoZSBwbGFpbnRleHQuXG4gICAgICAgKi9cblxuXG4gICAgICBBRVMucHJvdG90eXBlLmRlY3J5cHQgPSBmdW5jdGlvbiBkZWNyeXB0JCQxKGVuY3J5cHRlZDAsIGVuY3J5cHRlZDEsIGVuY3J5cHRlZDIsIGVuY3J5cHRlZDMsIG91dCwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXlbMV07IC8vIHN0YXRlIHZhcmlhYmxlcyBhLGIsYyxkIGFyZSBsb2FkZWQgd2l0aCBwcmUtd2hpdGVuZWQgZGF0YVxuXG4gICAgICAgIHZhciBhID0gZW5jcnlwdGVkMCBeIGtleVswXTtcbiAgICAgICAgdmFyIGIgPSBlbmNyeXB0ZWQzIF4ga2V5WzFdO1xuICAgICAgICB2YXIgYyA9IGVuY3J5cHRlZDIgXiBrZXlbMl07XG4gICAgICAgIHZhciBkID0gZW5jcnlwdGVkMSBeIGtleVszXTtcbiAgICAgICAgdmFyIGEyID0gdm9pZCAwO1xuICAgICAgICB2YXIgYjIgPSB2b2lkIDA7XG4gICAgICAgIHZhciBjMiA9IHZvaWQgMDsgLy8ga2V5Lmxlbmd0aCA9PT0gMiA/XG5cbiAgICAgICAgdmFyIG5Jbm5lclJvdW5kcyA9IGtleS5sZW5ndGggLyA0IC0gMjtcbiAgICAgICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgICAgIHZhciBrSW5kZXggPSA0O1xuICAgICAgICB2YXIgdGFibGUgPSB0aGlzLl90YWJsZXNbMV07IC8vIGxvYWQgdXAgdGhlIHRhYmxlc1xuXG4gICAgICAgIHZhciB0YWJsZTAgPSB0YWJsZVswXTtcbiAgICAgICAgdmFyIHRhYmxlMSA9IHRhYmxlWzFdO1xuICAgICAgICB2YXIgdGFibGUyID0gdGFibGVbMl07XG4gICAgICAgIHZhciB0YWJsZTMgPSB0YWJsZVszXTtcbiAgICAgICAgdmFyIHNib3ggPSB0YWJsZVs0XTsgLy8gSW5uZXIgcm91bmRzLiBDcmliYmVkIGZyb20gT3BlblNTTC5cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbklubmVyUm91bmRzOyBpKyspIHtcbiAgICAgICAgICBhMiA9IHRhYmxlMFthID4+PiAyNF0gXiB0YWJsZTFbYiA+PiAxNiAmIDI1NV0gXiB0YWJsZTJbYyA+PiA4ICYgMjU1XSBeIHRhYmxlM1tkICYgMjU1XSBeIGtleVtrSW5kZXhdO1xuICAgICAgICAgIGIyID0gdGFibGUwW2IgPj4+IDI0XSBeIHRhYmxlMVtjID4+IDE2ICYgMjU1XSBeIHRhYmxlMltkID4+IDggJiAyNTVdIF4gdGFibGUzW2EgJiAyNTVdIF4ga2V5W2tJbmRleCArIDFdO1xuICAgICAgICAgIGMyID0gdGFibGUwW2MgPj4+IDI0XSBeIHRhYmxlMVtkID4+IDE2ICYgMjU1XSBeIHRhYmxlMlthID4+IDggJiAyNTVdIF4gdGFibGUzW2IgJiAyNTVdIF4ga2V5W2tJbmRleCArIDJdO1xuICAgICAgICAgIGQgPSB0YWJsZTBbZCA+Pj4gMjRdIF4gdGFibGUxW2EgPj4gMTYgJiAyNTVdIF4gdGFibGUyW2IgPj4gOCAmIDI1NV0gXiB0YWJsZTNbYyAmIDI1NV0gXiBrZXlba0luZGV4ICsgM107XG4gICAgICAgICAga0luZGV4ICs9IDQ7XG4gICAgICAgICAgYSA9IGEyO1xuICAgICAgICAgIGIgPSBiMjtcbiAgICAgICAgICBjID0gYzI7XG4gICAgICAgIH0gLy8gTGFzdCByb3VuZC5cblxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICBvdXRbKDMgJiAtaSkgKyBvZmZzZXRdID0gc2JveFthID4+PiAyNF0gPDwgMjQgXiBzYm94W2IgPj4gMTYgJiAyNTVdIDw8IDE2IF4gc2JveFtjID4+IDggJiAyNTVdIDw8IDggXiBzYm94W2QgJiAyNTVdIF4ga2V5W2tJbmRleCsrXTtcbiAgICAgICAgICBhMiA9IGE7XG4gICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgYiA9IGM7XG4gICAgICAgICAgYyA9IGQ7XG4gICAgICAgICAgZCA9IGEyO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQUVTO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiBAZmlsZSBzdHJlYW0uanNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEEgbGlnaHR3ZWlnaHQgcmVhZGFibGUgc3RyZWFtIGltcGxlbWVudGlvbiB0aGF0IGhhbmRsZXMgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICpcbiAgICAgKiBAY2xhc3MgU3RyZWFtXG4gICAgICovXG5cblxuICAgIHZhciBTdHJlYW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBTdHJlYW0oKSB7XG4gICAgICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFN0cmVhbSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0ge307XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBldmVudCBuYW1lXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciB0aGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGFuIGV2ZW50IG9mXG4gICAgICAgKiB0aGUgc3BlY2lmaWVkIHR5cGUgb2NjdXJzXG4gICAgICAgKi9cblxuXG4gICAgICBTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICAgIHRoaXMubGlzdGVuZXJzW3R5cGVdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RlbmVyc1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZSBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSBldmVudCBuYW1lXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAgYSBmdW5jdGlvbiBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgZm9yIHRoaXNcbiAgICAgICAqIHR5cGUgb2YgZXZlbnQgdGhyb3VnaCBgb25gXG4gICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBpZiB3ZSBjb3VsZCB0dXJuIGl0IG9mZiBvciBub3RcbiAgICAgICAqL1xuXG5cbiAgICAgIFN0cmVhbS5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTE7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBUcmlnZ2VyIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBvbiB0aGlzIHN0cmVhbS4gQW55IGFkZGl0aW9uYWxcbiAgICAgICAqIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIGV2ZW50IG5hbWVcbiAgICAgICAqL1xuXG5cbiAgICAgIFN0cmVhbS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIHRyaWdnZXIodHlwZSkge1xuICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnNbdHlwZV07XG5cbiAgICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2xpY2luZyB0aGUgYXJndW1lbnRzIG9uIGV2ZXJ5IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2RcbiAgICAgICAgLy8gY2FuIGFkZCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBvdmVyaGVhZC4gQXZvaWQgdGhlXG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBvYmplY3QgY3JlYXRpb24gZm9yIHRoZSBjb21tb24gY2FzZSBvZiBhXG4gICAgICAgIC8vIHNpbmdsZSBjYWxsYmFjayBhcmd1bWVudFxuXG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICB2YXIgX2xlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7XG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2xlbmd0aDsgKytfaSkge1xuICAgICAgICAgICAgY2FsbGJhY2tzW19pXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIERlc3Ryb3lzIHRoZSBzdHJlYW0gYW5kIGNsZWFucyB1cC5cbiAgICAgICAqL1xuXG5cbiAgICAgIFN0cmVhbS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0ge307XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBGb3J3YXJkcyBhbGwgYGRhdGFgIGV2ZW50cyBvbiB0aGlzIHN0cmVhbSB0byB0aGUgZGVzdGluYXRpb24gc3RyZWFtLiBUaGVcbiAgICAgICAqIGRlc3RpbmF0aW9uIHN0cmVhbSBzaG91bGQgcHJvdmlkZSBhIG1ldGhvZCBgcHVzaGAgdG8gcmVjZWl2ZSB0aGUgZGF0YVxuICAgICAgICogZXZlbnRzIGFzIHRoZXkgYXJyaXZlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7U3RyZWFtfSBkZXN0aW5hdGlvbiB0aGUgc3RyZWFtIHRoYXQgd2lsbCByZWNlaXZlIGFsbCBgZGF0YWAgZXZlbnRzXG4gICAgICAgKiBAc2VlIGh0dHA6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fcmVhZGFibGVfcGlwZV9kZXN0aW5hdGlvbl9vcHRpb25zXG4gICAgICAgKi9cblxuXG4gICAgICBTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiBwaXBlKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGRlc3RpbmF0aW9uLnB1c2goZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFN0cmVhbTtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogQGZpbGUgYXN5bmMtc3RyZWFtLmpzXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBTdHJlYW0gY2xhc3MgdG8gdXNlIHNldFRpZW1vdXRcbiAgICAgKiBhbmQgcnVuIHN0cmVhbSBcImpvYnNcIiBBc3luY2hyb25vdXNseVxuICAgICAqXG4gICAgICogQGNsYXNzIEFzeW5jU3RyZWFtXG4gICAgICogQGV4dGVuZHMgU3RyZWFtXG4gICAgICovXG5cblxuICAgIHZhciBBc3luY1N0cmVhbSQkMSA9IGZ1bmN0aW9uIChfU3RyZWFtKSB7XG4gICAgICBpbmhlcml0cyhBc3luY1N0cmVhbSQkMSwgX1N0cmVhbSk7XG5cbiAgICAgIGZ1bmN0aW9uIEFzeW5jU3RyZWFtJCQxKCkge1xuICAgICAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBBc3luY1N0cmVhbSQkMSk7XG5cbiAgICAgICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfU3RyZWFtLmNhbGwodGhpcywgU3RyZWFtKSk7XG5cbiAgICAgICAgX3RoaXMuam9icyA9IFtdO1xuICAgICAgICBfdGhpcy5kZWxheSA9IDE7XG4gICAgICAgIF90aGlzLnRpbWVvdXRfID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBwcm9jZXNzIGFuIGFzeW5jIGpvYlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKi9cblxuXG4gICAgICBBc3luY1N0cmVhbSQkMS5wcm90b3R5cGUucHJvY2Vzc0pvYl8gPSBmdW5jdGlvbiBwcm9jZXNzSm9iXygpIHtcbiAgICAgICAgdGhpcy5qb2JzLnNoaWZ0KCkoKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudGltZW91dF8gPSBzZXRUaW1lb3V0KHRoaXMucHJvY2Vzc0pvYl8uYmluZCh0aGlzKSwgdGhpcy5kZWxheSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0XyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIHB1c2ggYSBqb2IgaW50byB0aGUgc3RyZWFtXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gam9iIHRoZSBqb2IgdG8gcHVzaCBpbnRvIHRoZSBzdHJlYW1cbiAgICAgICAqL1xuXG5cbiAgICAgIEFzeW5jU3RyZWFtJCQxLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaChqb2IpIHtcbiAgICAgICAgdGhpcy5qb2JzLnB1c2goam9iKTtcblxuICAgICAgICBpZiAoIXRoaXMudGltZW91dF8pIHtcbiAgICAgICAgICB0aGlzLnRpbWVvdXRfID0gc2V0VGltZW91dCh0aGlzLnByb2Nlc3NKb2JfLmJpbmQodGhpcyksIHRoaXMuZGVsYXkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQXN5bmNTdHJlYW0kJDE7XG4gICAgfShTdHJlYW0pO1xuICAgIC8qKlxuICAgICAqIEBmaWxlIGRlY3J5cHRlci5qc1xuICAgICAqXG4gICAgICogQW4gYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIEFFUy0xMjggQ0JDIGRlY3J5cHRpb24gd2l0aFxuICAgICAqIFBLQ1MjNyBwYWRkaW5nLlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBuZXR3b3JrLW9yZGVyIChiaWctZW5kaWFuKSBieXRlcyBpbnRvIHRoZWlyIGxpdHRsZS1lbmRpYW5cbiAgICAgKiByZXByZXNlbnRhdGlvbi5cbiAgICAgKi9cblxuXG4gICAgdmFyIG50b2ggPSBmdW5jdGlvbiBudG9oKHdvcmQpIHtcbiAgICAgIHJldHVybiB3b3JkIDw8IDI0IHwgKHdvcmQgJiAweGZmMDApIDw8IDggfCAod29yZCAmIDB4ZmYwMDAwKSA+PiA4IHwgd29yZCA+Pj4gMjQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZWNyeXB0IGJ5dGVzIHVzaW5nIEFFUy0xMjggd2l0aCBDQkMgYW5kIFBLQ1MjNyBwYWRkaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBlbmNyeXB0ZWQgdGhlIGVuY3J5cHRlZCBieXRlc1xuICAgICAqIEBwYXJhbSB7VWludDMyQXJyYXl9IGtleSB0aGUgYnl0ZXMgb2YgdGhlIGRlY3J5cHRpb24ga2V5XG4gICAgICogQHBhcmFtIHtVaW50MzJBcnJheX0gaW5pdFZlY3RvciB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJVikgdG9cbiAgICAgKiB1c2UgZm9yIHRoZSBmaXJzdCByb3VuZCBvZiBDQkMuXG4gICAgICogQHJldHVybiB7VWludDhBcnJheX0gdGhlIGRlY3J5cHRlZCBieXRlc1xuICAgICAqXG4gICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FkdmFuY2VkX0VuY3J5cHRpb25fU3RhbmRhcmRcbiAgICAgKiBAc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmxvY2tfY2lwaGVyX21vZGVfb2Zfb3BlcmF0aW9uI0NpcGhlcl9CbG9ja19DaGFpbmluZ18uMjhDQkMuMjlcbiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzE1XG4gICAgICovXG5cblxuICAgIHZhciBkZWNyeXB0JCQxID0gZnVuY3Rpb24gZGVjcnlwdCQkMShlbmNyeXB0ZWQsIGtleSwgaW5pdFZlY3Rvcikge1xuICAgICAgLy8gd29yZC1sZXZlbCBhY2Nlc3MgdG8gdGhlIGVuY3J5cHRlZCBieXRlc1xuICAgICAgdmFyIGVuY3J5cHRlZDMyID0gbmV3IEludDMyQXJyYXkoZW5jcnlwdGVkLmJ1ZmZlciwgZW5jcnlwdGVkLmJ5dGVPZmZzZXQsIGVuY3J5cHRlZC5ieXRlTGVuZ3RoID4+IDIpO1xuICAgICAgdmFyIGRlY2lwaGVyID0gbmV3IEFFUyhBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrZXkpKTsgLy8gYnl0ZSBhbmQgd29yZC1sZXZlbCBhY2Nlc3MgZm9yIHRoZSBkZWNyeXB0ZWQgb3V0cHV0XG5cbiAgICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShlbmNyeXB0ZWQuYnl0ZUxlbmd0aCk7XG4gICAgICB2YXIgZGVjcnlwdGVkMzIgPSBuZXcgSW50MzJBcnJheShkZWNyeXB0ZWQuYnVmZmVyKTsgLy8gdGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3Igd29ya2luZyB3aXRoIHRoZSBJViwgZW5jcnlwdGVkLCBhbmRcbiAgICAgIC8vIGRlY3J5cHRlZCBkYXRhXG5cbiAgICAgIHZhciBpbml0MCA9IHZvaWQgMDtcbiAgICAgIHZhciBpbml0MSA9IHZvaWQgMDtcbiAgICAgIHZhciBpbml0MiA9IHZvaWQgMDtcbiAgICAgIHZhciBpbml0MyA9IHZvaWQgMDtcbiAgICAgIHZhciBlbmNyeXB0ZWQwID0gdm9pZCAwO1xuICAgICAgdmFyIGVuY3J5cHRlZDEgPSB2b2lkIDA7XG4gICAgICB2YXIgZW5jcnlwdGVkMiA9IHZvaWQgMDtcbiAgICAgIHZhciBlbmNyeXB0ZWQzID0gdm9pZCAwOyAvLyBpdGVyYXRpb24gdmFyaWFibGVcblxuICAgICAgdmFyIHdvcmRJeCA9IHZvaWQgMDsgLy8gcHVsbCBvdXQgdGhlIHdvcmRzIG9mIHRoZSBJViB0byBlbnN1cmUgd2UgZG9uJ3QgbW9kaWZ5IHRoZVxuICAgICAgLy8gcGFzc2VkLWluIHJlZmVyZW5jZSBhbmQgZWFzaWVyIGFjY2Vzc1xuXG4gICAgICBpbml0MCA9IGluaXRWZWN0b3JbMF07XG4gICAgICBpbml0MSA9IGluaXRWZWN0b3JbMV07XG4gICAgICBpbml0MiA9IGluaXRWZWN0b3JbMl07XG4gICAgICBpbml0MyA9IGluaXRWZWN0b3JbM107IC8vIGRlY3J5cHQgZm91ciB3b3JkIHNlcXVlbmNlcywgYXBwbHlpbmcgY2lwaGVyLWJsb2NrIGNoYWluaW5nIChDQkMpXG4gICAgICAvLyB0byBlYWNoIGRlY3J5cHRlZCBibG9ja1xuXG4gICAgICBmb3IgKHdvcmRJeCA9IDA7IHdvcmRJeCA8IGVuY3J5cHRlZDMyLmxlbmd0aDsgd29yZEl4ICs9IDQpIHtcbiAgICAgICAgLy8gY29udmVydCBiaWctZW5kaWFuIChuZXR3b3JrIG9yZGVyKSB3b3JkcyBpbnRvIGxpdHRsZS1lbmRpYW5cbiAgICAgICAgLy8gKGphdmFzY3JpcHQgb3JkZXIpXG4gICAgICAgIGVuY3J5cHRlZDAgPSBudG9oKGVuY3J5cHRlZDMyW3dvcmRJeF0pO1xuICAgICAgICBlbmNyeXB0ZWQxID0gbnRvaChlbmNyeXB0ZWQzMlt3b3JkSXggKyAxXSk7XG4gICAgICAgIGVuY3J5cHRlZDIgPSBudG9oKGVuY3J5cHRlZDMyW3dvcmRJeCArIDJdKTtcbiAgICAgICAgZW5jcnlwdGVkMyA9IG50b2goZW5jcnlwdGVkMzJbd29yZEl4ICsgM10pOyAvLyBkZWNyeXB0IHRoZSBibG9ja1xuXG4gICAgICAgIGRlY2lwaGVyLmRlY3J5cHQoZW5jcnlwdGVkMCwgZW5jcnlwdGVkMSwgZW5jcnlwdGVkMiwgZW5jcnlwdGVkMywgZGVjcnlwdGVkMzIsIHdvcmRJeCk7IC8vIFhPUiB3aXRoIHRoZSBJViwgYW5kIHJlc3RvcmUgbmV0d29yayBieXRlLW9yZGVyIHRvIG9idGFpbiB0aGVcbiAgICAgICAgLy8gcGxhaW50ZXh0XG5cbiAgICAgICAgZGVjcnlwdGVkMzJbd29yZEl4XSA9IG50b2goZGVjcnlwdGVkMzJbd29yZEl4XSBeIGluaXQwKTtcbiAgICAgICAgZGVjcnlwdGVkMzJbd29yZEl4ICsgMV0gPSBudG9oKGRlY3J5cHRlZDMyW3dvcmRJeCArIDFdIF4gaW5pdDEpO1xuICAgICAgICBkZWNyeXB0ZWQzMlt3b3JkSXggKyAyXSA9IG50b2goZGVjcnlwdGVkMzJbd29yZEl4ICsgMl0gXiBpbml0Mik7XG4gICAgICAgIGRlY3J5cHRlZDMyW3dvcmRJeCArIDNdID0gbnRvaChkZWNyeXB0ZWQzMlt3b3JkSXggKyAzXSBeIGluaXQzKTsgLy8gc2V0dXAgdGhlIElWIGZvciB0aGUgbmV4dCByb3VuZFxuXG4gICAgICAgIGluaXQwID0gZW5jcnlwdGVkMDtcbiAgICAgICAgaW5pdDEgPSBlbmNyeXB0ZWQxO1xuICAgICAgICBpbml0MiA9IGVuY3J5cHRlZDI7XG4gICAgICAgIGluaXQzID0gZW5jcnlwdGVkMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoZSBgRGVjcnlwdGVyYCBjbGFzcyB0aGF0IG1hbmFnZXMgZGVjcnlwdGlvbiBvZiBBRVNcbiAgICAgKiBkYXRhIHRocm91Z2ggYEFzeW5jU3RyZWFtYCBvYmplY3RzIGFuZCB0aGUgYGRlY3J5cHRgXG4gICAgICogZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZW5jcnlwdGVkIHRoZSBlbmNyeXB0ZWQgYnl0ZXNcbiAgICAgKiBAcGFyYW0ge1VpbnQzMkFycmF5fSBrZXkgdGhlIGJ5dGVzIG9mIHRoZSBkZWNyeXB0aW9uIGtleVxuICAgICAqIEBwYXJhbSB7VWludDMyQXJyYXl9IGluaXRWZWN0b3IgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpIHRvXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZG9uZSB0aGUgZnVuY3Rpb24gdG8gcnVuIHdoZW4gZG9uZVxuICAgICAqIEBjbGFzcyBEZWNyeXB0ZXJcbiAgICAgKi9cblxuXG4gICAgdmFyIERlY3J5cHRlciQkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIERlY3J5cHRlciQkMShlbmNyeXB0ZWQsIGtleSwgaW5pdFZlY3RvciwgZG9uZSkge1xuICAgICAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBEZWNyeXB0ZXIkJDEpO1xuICAgICAgICB2YXIgc3RlcCA9IERlY3J5cHRlciQkMS5TVEVQO1xuICAgICAgICB2YXIgZW5jcnlwdGVkMzIgPSBuZXcgSW50MzJBcnJheShlbmNyeXB0ZWQuYnVmZmVyKTtcbiAgICAgICAgdmFyIGRlY3J5cHRlZCA9IG5ldyBVaW50OEFycmF5KGVuY3J5cHRlZC5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB0aGlzLmFzeW5jU3RyZWFtXyA9IG5ldyBBc3luY1N0cmVhbSQkMSgpOyAvLyBzcGxpdCB1cCB0aGUgZW5jcnlwdGlvbiBqb2IgYW5kIGRvIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBhc3luY2hyb25vdXNseVxuXG4gICAgICAgIHRoaXMuYXN5bmNTdHJlYW1fLnB1c2godGhpcy5kZWNyeXB0Q2h1bmtfKGVuY3J5cHRlZDMyLnN1YmFycmF5KGksIGkgKyBzdGVwKSwga2V5LCBpbml0VmVjdG9yLCBkZWNyeXB0ZWQpKTtcblxuICAgICAgICBmb3IgKGkgPSBzdGVwOyBpIDwgZW5jcnlwdGVkMzIubGVuZ3RoOyBpICs9IHN0ZXApIHtcbiAgICAgICAgICBpbml0VmVjdG9yID0gbmV3IFVpbnQzMkFycmF5KFtudG9oKGVuY3J5cHRlZDMyW2kgLSA0XSksIG50b2goZW5jcnlwdGVkMzJbaSAtIDNdKSwgbnRvaChlbmNyeXB0ZWQzMltpIC0gMl0pLCBudG9oKGVuY3J5cHRlZDMyW2kgLSAxXSldKTtcbiAgICAgICAgICB0aGlzLmFzeW5jU3RyZWFtXy5wdXNoKHRoaXMuZGVjcnlwdENodW5rXyhlbmNyeXB0ZWQzMi5zdWJhcnJheShpLCBpICsgc3RlcCksIGtleSwgaW5pdFZlY3RvciwgZGVjcnlwdGVkKSk7XG4gICAgICAgIH0gLy8gaW52b2tlIHRoZSBkb25lKCkgY2FsbGJhY2sgd2hlbiBldmVyeXRoaW5nIGlzIGZpbmlzaGVkXG5cblxuICAgICAgICB0aGlzLmFzeW5jU3RyZWFtXy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyByZW1vdmUgcGtjcyM3IHBhZGRpbmcgZnJvbSB0aGUgZGVjcnlwdGVkIGJ5dGVzXG4gICAgICAgICAgZG9uZShudWxsLCB1bnBhZChkZWNyeXB0ZWQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIGEgZ2V0dGVyIGZvciBzdGVwIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBwcm9jZXNzIGF0IG9uZSB0aW1lXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7TnVtYmVyfSB0aGUgdmFsdWUgb2Ygc3RlcCAzMjAwMFxuICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqL1xuXG5cbiAgICAgIERlY3J5cHRlciQkMS5wcm90b3R5cGUuZGVjcnlwdENodW5rXyA9IGZ1bmN0aW9uIGRlY3J5cHRDaHVua18oZW5jcnlwdGVkLCBrZXksIGluaXRWZWN0b3IsIGRlY3J5cHRlZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBieXRlcyA9IGRlY3J5cHQkJDEoZW5jcnlwdGVkLCBrZXksIGluaXRWZWN0b3IpO1xuICAgICAgICAgIGRlY3J5cHRlZC5zZXQoYnl0ZXMsIGVuY3J5cHRlZC5ieXRlT2Zmc2V0KTtcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNyZWF0ZUNsYXNzKERlY3J5cHRlciQkMSwgbnVsbCwgW3tcbiAgICAgICAga2V5OiAnU1RFUCcsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgIC8vIDQgKiA4MDAwO1xuICAgICAgICAgIHJldHVybiAzMjAwMDtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuICAgICAgcmV0dXJuIERlY3J5cHRlciQkMTtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogQGZpbGUgYmluLXV0aWxzLmpzXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBmb3Igc2VuZGluZyB0byBhIHdlYiB3b3JrZXIgbW9kaWZ5aW5nIHByb3BlcnRpZXMgdGhhdCBhcmUgVHlwZWRBcnJheXNcbiAgICAgKiBpbnRvIGEgbmV3IG9iamVjdCB3aXRoIHNlcGVyYXRlZCBwcm9wZXJ0aWVzIGZvciB0aGUgYnVmZmVyLCBieXRlT2Zmc2V0LCBhbmQgYnl0ZUxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtZXNzYWdlXG4gICAgICogICAgICAgIE9iamVjdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgdG8gc2VuZCB0byB0aGUgd2ViIHdvcmtlclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKiAgICAgICAgIE1vZGlmaWVkIG1lc3NhZ2Ugd2l0aCBUeXBlZEFycmF5IHZhbHVlcyBleHBhbmRlZFxuICAgICAqIEBmdW5jdGlvbiBjcmVhdGVUcmFuc2ZlcmFibGVNZXNzYWdlXG4gICAgICovXG5cblxuICAgIHZhciBjcmVhdGVUcmFuc2ZlcmFibGVNZXNzYWdlID0gZnVuY3Rpb24gY3JlYXRlVHJhbnNmZXJhYmxlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICB2YXIgdHJhbnNmZXJhYmxlID0ge307XG4gICAgICBPYmplY3Qua2V5cyhtZXNzYWdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gbWVzc2FnZVtrZXldO1xuXG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgICAgICAgdHJhbnNmZXJhYmxlW2tleV0gPSB7XG4gICAgICAgICAgICBieXRlczogdmFsdWUuYnVmZmVyLFxuICAgICAgICAgICAgYnl0ZU9mZnNldDogdmFsdWUuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIGJ5dGVMZW5ndGg6IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zZmVyYWJsZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE91ciB3ZWIgd29ya2VyIGludGVyZmFjZSBzbyB0aGF0IHRoaW5ncyBjYW4gdGFsayB0byBhZXMtZGVjcnlwdGVyXG4gICAgICogdGhhdCB3aWxsIGJlIHJ1bm5pbmcgaW4gYSB3ZWIgd29ya2VyLiB0aGUgc2NvcGUgaXMgcGFzc2VkIHRvIHRoaXMgYnlcbiAgICAgKiB3ZWJ3b3JraWZ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlbGZcbiAgICAgKiAgICAgICAgdGhlIHNjb3BlIGZvciB0aGUgd2ViIHdvcmtlclxuICAgICAqL1xuXG5cbiAgICB2YXIgRGVjcnlwdGVyV29ya2VyID0gZnVuY3Rpb24gRGVjcnlwdGVyV29ya2VyKHNlbGYpIHtcbiAgICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhID0gZXZlbnQuZGF0YTtcbiAgICAgICAgdmFyIGVuY3J5cHRlZCA9IG5ldyBVaW50OEFycmF5KGRhdGEuZW5jcnlwdGVkLmJ5dGVzLCBkYXRhLmVuY3J5cHRlZC5ieXRlT2Zmc2V0LCBkYXRhLmVuY3J5cHRlZC5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdmFyIGtleSA9IG5ldyBVaW50MzJBcnJheShkYXRhLmtleS5ieXRlcywgZGF0YS5rZXkuYnl0ZU9mZnNldCwgZGF0YS5rZXkuYnl0ZUxlbmd0aCAvIDQpO1xuICAgICAgICB2YXIgaXYgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5pdi5ieXRlcywgZGF0YS5pdi5ieXRlT2Zmc2V0LCBkYXRhLml2LmJ5dGVMZW5ndGggLyA0KTtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3LCBoYW5kbGUtY2FsbGJhY2stZXJyICovXG5cbiAgICAgICAgbmV3IERlY3J5cHRlciQkMShlbmNyeXB0ZWQsIGtleSwgaXYsIGZ1bmN0aW9uIChlcnIsIGJ5dGVzKSB7XG4gICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShjcmVhdGVUcmFuc2ZlcmFibGVNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UsXG4gICAgICAgICAgICBkZWNyeXB0ZWQ6IGJ5dGVzXG4gICAgICAgICAgfSksIFtieXRlcy5idWZmZXJdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBkZWNyeXB0ZXJXb3JrZXIgPSBuZXcgRGVjcnlwdGVyV29ya2VyKHNlbGYpO1xuICAgIHJldHVybiBkZWNyeXB0ZXJXb3JrZXI7XG4gIH0oKTtcbn0pO1xuLyoqXG4gKiBDb252ZXJ0IHRoZSBwcm9wZXJ0aWVzIG9mIGFuIEhMUyB0cmFjayBpbnRvIGFuIGF1ZGlvVHJhY2tLaW5kLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGF1ZGlvVHJhY2tLaW5kXyA9IGZ1bmN0aW9uIGF1ZGlvVHJhY2tLaW5kXyhwcm9wZXJ0aWVzKSB7XG4gIHZhciBraW5kID0gcHJvcGVydGllc1tcImRlZmF1bHRcIl0gPyAnbWFpbicgOiAnYWx0ZXJuYXRpdmUnO1xuXG4gIGlmIChwcm9wZXJ0aWVzLmNoYXJhY3RlcmlzdGljcyAmJiBwcm9wZXJ0aWVzLmNoYXJhY3RlcmlzdGljcy5pbmRleE9mKCdwdWJsaWMuYWNjZXNzaWJpbGl0eS5kZXNjcmliZXMtdmlkZW8nKSA+PSAwKSB7XG4gICAga2luZCA9ICdtYWluLWRlc2MnO1xuICB9XG5cbiAgcmV0dXJuIGtpbmQ7XG59O1xuLyoqXG4gKiBQYXVzZSBwcm92aWRlZCBzZWdtZW50IGxvYWRlciBhbmQgcGxheWxpc3QgbG9hZGVyIGlmIGFjdGl2ZVxuICpcbiAqIEBwYXJhbSB7U2VnbWVudExvYWRlcn0gc2VnbWVudExvYWRlclxuICogICAgICAgIFNlZ21lbnRMb2FkZXIgdG8gcGF1c2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZWRpYVR5cGVcbiAqICAgICAgICBBY3RpdmUgbWVkaWEgdHlwZVxuICogQGZ1bmN0aW9uIHN0b3BMb2FkZXJzXG4gKi9cblxuXG52YXIgc3RvcExvYWRlcnMgPSBmdW5jdGlvbiBzdG9wTG9hZGVycyhzZWdtZW50TG9hZGVyLCBtZWRpYVR5cGUpIHtcbiAgc2VnbWVudExvYWRlci5hYm9ydCgpO1xuICBzZWdtZW50TG9hZGVyLnBhdXNlKCk7XG5cbiAgaWYgKG1lZGlhVHlwZSAmJiBtZWRpYVR5cGUuYWN0aXZlUGxheWxpc3RMb2FkZXIpIHtcbiAgICBtZWRpYVR5cGUuYWN0aXZlUGxheWxpc3RMb2FkZXIucGF1c2UoKTtcbiAgICBtZWRpYVR5cGUuYWN0aXZlUGxheWxpc3RMb2FkZXIgPSBudWxsO1xuICB9XG59O1xuLyoqXG4gKiBTdGFydCBsb2FkaW5nIHByb3ZpZGVkIHNlZ21lbnQgbG9hZGVyIGFuZCBwbGF5bGlzdCBsb2FkZXJcbiAqXG4gKiBAcGFyYW0ge1BsYXlsaXN0TG9hZGVyfSBwbGF5bGlzdExvYWRlclxuICogICAgICAgIFBsYXlsaXN0TG9hZGVyIHRvIHN0YXJ0IGxvYWRpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZWRpYVR5cGVcbiAqICAgICAgICBBY3RpdmUgbWVkaWEgdHlwZVxuICogQGZ1bmN0aW9uIHN0YXJ0TG9hZGVyc1xuICovXG5cblxudmFyIHN0YXJ0TG9hZGVycyA9IGZ1bmN0aW9uIHN0YXJ0TG9hZGVycyhwbGF5bGlzdExvYWRlciwgbWVkaWFUeXBlKSB7XG4gIC8vIFNlZ21lbnQgbG9hZGVyIHdpbGwgYmUgc3RhcnRlZCBhZnRlciBgbG9hZGVkbWV0YWRhdGFgIG9yIGBsb2FkZWRwbGF5bGlzdGAgZnJvbSB0aGVcbiAgLy8gcGxheWxpc3QgbG9hZGVyXG4gIG1lZGlhVHlwZS5hY3RpdmVQbGF5bGlzdExvYWRlciA9IHBsYXlsaXN0TG9hZGVyO1xuICBwbGF5bGlzdExvYWRlci5sb2FkKCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1lZGlhIGdyb3VwIGNoYW5nZXMuIEl0IHBlcmZvcm1zIGFcbiAqIG5vbi1kZXN0cnVjdGl2ZSAocHJlc2VydmUgdGhlIGJ1ZmZlcikgcmVzeW5jIG9mIHRoZSBTZWdtZW50TG9hZGVyLiBUaGlzIGlzIGJlY2F1c2UgYVxuICogY2hhbmdlIG9mIGdyb3VwIGlzIG1lcmVseSBhIHJlbmRpdGlvbiBzd2l0Y2ggb2YgdGhlIHNhbWUgY29udGVudCBhdCBhbm90aGVyIGVuY29kaW5nLFxuICogcmF0aGVyIHRoYW4gYSBjaGFuZ2Ugb2YgY29udGVudCwgc3VjaCBhcyBzd2l0Y2hpbmcgYXVkaW8gZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5nc1xuICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGZvciBtZWRpYSBncm91cHNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogICAgICAgICBIYW5kbGVyIGZvciBhIG5vbi1kZXN0cnVjdGl2ZSByZXN5bmMgb2YgU2VnbWVudExvYWRlciB3aGVuIHRoZSBhY3RpdmUgbWVkaWFcbiAqICAgICAgICAgZ3JvdXAgY2hhbmdlcy5cbiAqIEBmdW5jdGlvbiBvbkdyb3VwQ2hhbmdlZFxuICovXG5cblxudmFyIG9uR3JvdXBDaGFuZ2VkID0gZnVuY3Rpb24gb25Hcm91cENoYW5nZWQodHlwZSwgc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3NldHRpbmdzJHNlZ21lbnRMb2FkID0gc2V0dGluZ3Muc2VnbWVudExvYWRlcnMsXG4gICAgICAgIHNlZ21lbnRMb2FkZXIgPSBfc2V0dGluZ3Mkc2VnbWVudExvYWRbdHlwZV0sXG4gICAgICAgIG1haW5TZWdtZW50TG9hZGVyID0gX3NldHRpbmdzJHNlZ21lbnRMb2FkLm1haW4sXG4gICAgICAgIG1lZGlhVHlwZSA9IHNldHRpbmdzLm1lZGlhVHlwZXNbdHlwZV07XG4gICAgdmFyIGFjdGl2ZVRyYWNrID0gbWVkaWFUeXBlLmFjdGl2ZVRyYWNrKCk7XG4gICAgdmFyIGFjdGl2ZUdyb3VwID0gbWVkaWFUeXBlLmFjdGl2ZUdyb3VwKGFjdGl2ZVRyYWNrKTtcbiAgICB2YXIgcHJldmlvdXNBY3RpdmVMb2FkZXIgPSBtZWRpYVR5cGUuYWN0aXZlUGxheWxpc3RMb2FkZXI7XG4gICAgc3RvcExvYWRlcnMoc2VnbWVudExvYWRlciwgbWVkaWFUeXBlKTtcblxuICAgIGlmICghYWN0aXZlR3JvdXApIHtcbiAgICAgIC8vIHRoZXJlIGlzIG5vIGdyb3VwIGFjdGl2ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghYWN0aXZlR3JvdXAucGxheWxpc3RMb2FkZXIpIHtcbiAgICAgIGlmIChwcmV2aW91c0FjdGl2ZUxvYWRlcikge1xuICAgICAgICAvLyBUaGUgcHJldmlvdXMgZ3JvdXAgaGFkIGEgcGxheWxpc3QgbG9hZGVyIGJ1dCB0aGUgbmV3IGFjdGl2ZSBncm91cCBkb2VzIG5vdFxuICAgICAgICAvLyB0aGlzIG1lYW5zIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBkZW11eGVkIHRvIG11eGVkIGF1ZGlvLiBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0b1xuICAgICAgICAvLyBkbyBhIGRlc3RydWN0aXZlIHJlc2V0IG9mIHRoZSBtYWluIHNlZ21lbnQgbG9hZGVyIGFuZCBub3QgcmVzdGFydCB0aGUgYXVkaW9cbiAgICAgICAgLy8gbG9hZGVycy5cbiAgICAgICAgbWFpblNlZ21lbnRMb2FkZXIucmVzZXRFdmVyeXRoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE5vbi1kZXN0cnVjdGl2ZSByZXN5bmNcblxuXG4gICAgc2VnbWVudExvYWRlci5yZXN5bmNMb2FkZXIoKTtcbiAgICBzdGFydExvYWRlcnMoYWN0aXZlR3JvdXAucGxheWxpc3RMb2FkZXIsIG1lZGlhVHlwZSk7XG4gIH07XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1lZGlhIHRyYWNrIGNoYW5nZXMuIEl0IHBlcmZvcm1zIGFcbiAqIGRlc3RydWN0aXZlIHJlc2V0IG9mIHRoZSBTZWdtZW50TG9hZGVyIHRvIGVuc3VyZSB3ZSBzdGFydCBsb2FkaW5nIGFzIGNsb3NlIHRvXG4gKiBjdXJyZW50VGltZSBhcyBwb3NzaWJsZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogICAgICAgIE1lZGlhR3JvdXAgdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gKiAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIG1lZGlhIGdyb3Vwc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiAgICAgICAgIEhhbmRsZXIgZm9yIGEgZGVzdHJ1Y3RpdmUgcmVzZXQgb2YgU2VnbWVudExvYWRlciB3aGVuIHRoZSBhY3RpdmUgbWVkaWFcbiAqICAgICAgICAgdHJhY2sgY2hhbmdlcy5cbiAqIEBmdW5jdGlvbiBvblRyYWNrQ2hhbmdlZFxuICovXG5cblxudmFyIG9uVHJhY2tDaGFuZ2VkID0gZnVuY3Rpb24gb25UcmFja0NoYW5nZWQodHlwZSwgc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3NldHRpbmdzJHNlZ21lbnRMb2FkMiA9IHNldHRpbmdzLnNlZ21lbnRMb2FkZXJzLFxuICAgICAgICBzZWdtZW50TG9hZGVyID0gX3NldHRpbmdzJHNlZ21lbnRMb2FkMlt0eXBlXSxcbiAgICAgICAgbWFpblNlZ21lbnRMb2FkZXIgPSBfc2V0dGluZ3Mkc2VnbWVudExvYWQyLm1haW4sXG4gICAgICAgIG1lZGlhVHlwZSA9IHNldHRpbmdzLm1lZGlhVHlwZXNbdHlwZV07XG4gICAgdmFyIGFjdGl2ZVRyYWNrID0gbWVkaWFUeXBlLmFjdGl2ZVRyYWNrKCk7XG4gICAgdmFyIGFjdGl2ZUdyb3VwID0gbWVkaWFUeXBlLmFjdGl2ZUdyb3VwKGFjdGl2ZVRyYWNrKTtcbiAgICB2YXIgcHJldmlvdXNBY3RpdmVMb2FkZXIgPSBtZWRpYVR5cGUuYWN0aXZlUGxheWxpc3RMb2FkZXI7XG4gICAgc3RvcExvYWRlcnMoc2VnbWVudExvYWRlciwgbWVkaWFUeXBlKTtcblxuICAgIGlmICghYWN0aXZlR3JvdXApIHtcbiAgICAgIC8vIHRoZXJlIGlzIG5vIGdyb3VwIGFjdGl2ZSBzbyB3ZSBkbyBub3Qgd2FudCB0byByZXN0YXJ0IGxvYWRlcnNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2ZUdyb3VwLnBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAvLyB3aGVuIHN3aXRjaGluZyBmcm9tIGRlbXV4ZWQgYXVkaW8vdmlkZW8gdG8gbXV4ZWQgYXVkaW8vdmlkZW8gKG5vdGVkIGJ5IG5vIHBsYXlsaXN0XG4gICAgICAvLyBsb2FkZXIgZm9yIHRoZSBhdWRpbyBncm91cCksIHdlIHdhbnQgdG8gZG8gYSBkZXN0cnVjdGl2ZSByZXNldCBvZiB0aGUgbWFpbiBzZWdtZW50XG4gICAgICAvLyBsb2FkZXIgYW5kIG5vdCByZXN0YXJ0IHRoZSBhdWRpbyBsb2FkZXJzXG4gICAgICBtYWluU2VnbWVudExvYWRlci5yZXNldEV2ZXJ5dGhpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNBY3RpdmVMb2FkZXIgPT09IGFjdGl2ZUdyb3VwLnBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAvLyBOb3RoaW5nIGhhcyBhY3R1YWxseSBjaGFuZ2VkLiBUaGlzIGNhbiBoYXBwZW4gYmVjYXVzZSB0cmFjayBjaGFuZ2UgZXZlbnRzIGNhbiBmaXJlXG4gICAgICAvLyBtdWx0aXBsZSB0aW1lcyBmb3IgYSBcInNpbmdsZVwiIGNoYW5nZS4gT25lIGZvciBlbmFibGluZyB0aGUgbmV3IGFjdGl2ZSB0cmFjaywgYW5kXG4gICAgICAvLyBvbmUgZm9yIGRpc2FibGluZyB0aGUgdHJhY2sgdGhhdCB3YXMgYWN0aXZlXG4gICAgICBzdGFydExvYWRlcnMoYWN0aXZlR3JvdXAucGxheWxpc3RMb2FkZXIsIG1lZGlhVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRMb2FkZXIudHJhY2spIHtcbiAgICAgIC8vIEZvciBXZWJWVFQsIHNldCB0aGUgbmV3IHRleHQgdHJhY2sgaW4gdGhlIHNlZ21lbnRsb2FkZXJcbiAgICAgIHNlZ21lbnRMb2FkZXIudHJhY2soYWN0aXZlVHJhY2spO1xuICAgIH0gLy8gZGVzdHJ1Y3RpdmUgcmVzZXRcblxuXG4gICAgc2VnbWVudExvYWRlci5yZXNldEV2ZXJ5dGhpbmcoKTtcbiAgICBzdGFydExvYWRlcnMoYWN0aXZlR3JvdXAucGxheWxpc3RMb2FkZXIsIG1lZGlhVHlwZSk7XG4gIH07XG59O1xuXG52YXIgb25FcnJvciA9IHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIFNlZ21lbnRMb2FkZXIgb3IgUGxheWxpc3RMb2FkZXIgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAgICogICAgICAgIE1lZGlhR3JvdXAgdHlwZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3NcbiAgICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGZvciBtZWRpYSBncm91cHNcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqICAgICAgICAgRXJyb3IgaGFuZGxlci4gTG9ncyB3YXJuaW5nIChvciBlcnJvciBpZiB0aGUgcGxheWxpc3QgaXMgYmxhY2tsaXN0ZWQpIHRvXG4gICAqICAgICAgICAgY29uc29sZSBhbmQgc3dpdGNoZXMgYmFjayB0byBkZWZhdWx0IGF1ZGlvIHRyYWNrLlxuICAgKiBAZnVuY3Rpb24gb25FcnJvci5BVURJT1xuICAgKi9cbiAgQVVESU86IGZ1bmN0aW9uIEFVRElPKHR5cGUsIHNldHRpbmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWdtZW50TG9hZGVyID0gc2V0dGluZ3Muc2VnbWVudExvYWRlcnNbdHlwZV0sXG4gICAgICAgICAgbWVkaWFUeXBlID0gc2V0dGluZ3MubWVkaWFUeXBlc1t0eXBlXSxcbiAgICAgICAgICBibGFja2xpc3RDdXJyZW50UGxheWxpc3QgPSBzZXR0aW5ncy5ibGFja2xpc3RDdXJyZW50UGxheWxpc3Q7XG4gICAgICBzdG9wTG9hZGVycyhzZWdtZW50TG9hZGVyLCBtZWRpYVR5cGUpOyAvLyBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IGF1ZGlvIHRyYWNrXG5cbiAgICAgIHZhciBhY3RpdmVUcmFjayA9IG1lZGlhVHlwZS5hY3RpdmVUcmFjaygpO1xuICAgICAgdmFyIGFjdGl2ZUdyb3VwID0gbWVkaWFUeXBlLmFjdGl2ZUdyb3VwKCk7XG4gICAgICB2YXIgaWQgPSAoYWN0aXZlR3JvdXAuZmlsdGVyKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICByZXR1cm4gZ3JvdXBbXCJkZWZhdWx0XCJdO1xuICAgICAgfSlbMF0gfHwgYWN0aXZlR3JvdXBbMF0pLmlkO1xuICAgICAgdmFyIGRlZmF1bHRUcmFjayA9IG1lZGlhVHlwZS50cmFja3NbaWRdO1xuXG4gICAgICBpZiAoYWN0aXZlVHJhY2sgPT09IGRlZmF1bHRUcmFjaykge1xuICAgICAgICAvLyBEZWZhdWx0IHRyYWNrIGVuY291bnRlcmVkIGFuIGVycm9yLiBBbGwgd2UgY2FuIGRvIG5vdyBpcyBibGFja2xpc3QgdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gcmVuZGl0aW9uIGFuZCBob3BlIGFub3RoZXIgd2lsbCBzd2l0Y2ggYXVkaW8gZ3JvdXBzXG4gICAgICAgIGJsYWNrbGlzdEN1cnJlbnRQbGF5bGlzdCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2JsZW0gZW5jb3VudGVyZWQgbG9hZGluZyB0aGUgZGVmYXVsdCBhdWRpbyB0cmFjay4nXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvanMkMS5sb2cud2FybignUHJvYmxlbSBlbmNvdW50ZXJlZCBsb2FkaW5nIHRoZSBhbHRlcm5hdGUgYXVkaW8gdHJhY2suJyArICdTd2l0Y2hpbmcgYmFjayB0byBkZWZhdWx0LicpO1xuXG4gICAgICBmb3IgKHZhciB0cmFja0lkIGluIG1lZGlhVHlwZS50cmFja3MpIHtcbiAgICAgICAgbWVkaWFUeXBlLnRyYWNrc1t0cmFja0lkXS5lbmFibGVkID0gbWVkaWFUeXBlLnRyYWNrc1t0cmFja0lkXSA9PT0gZGVmYXVsdFRyYWNrO1xuICAgICAgfVxuXG4gICAgICBtZWRpYVR5cGUub25UcmFja0NoYW5nZWQoKTtcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBTZWdtZW50TG9hZGVyIG9yIFBsYXlsaXN0TG9hZGVyIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqICAgICAgICBPYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgbWVkaWEgZ3JvdXBzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKiAgICAgICAgIEVycm9yIGhhbmRsZXIuIExvZ3Mgd2FybmluZyB0byBjb25zb2xlIGFuZCBkaXNhYmxlcyB0aGUgYWN0aXZlIHN1YnRpdGxlIHRyYWNrXG4gICAqIEBmdW5jdGlvbiBvbkVycm9yLlNVQlRJVExFU1xuICAgKi9cbiAgU1VCVElUTEVTOiBmdW5jdGlvbiBTVUJUSVRMRVModHlwZSwgc2V0dGluZ3MpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlZ21lbnRMb2FkZXIgPSBzZXR0aW5ncy5zZWdtZW50TG9hZGVyc1t0eXBlXSxcbiAgICAgICAgICBtZWRpYVR5cGUgPSBzZXR0aW5ncy5tZWRpYVR5cGVzW3R5cGVdO1xuICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdQcm9ibGVtIGVuY291bnRlcmVkIGxvYWRpbmcgdGhlIHN1YnRpdGxlIHRyYWNrLicgKyAnRGlzYWJsaW5nIHN1YnRpdGxlIHRyYWNrLicpO1xuICAgICAgc3RvcExvYWRlcnMoc2VnbWVudExvYWRlciwgbWVkaWFUeXBlKTtcbiAgICAgIHZhciB0cmFjayA9IG1lZGlhVHlwZS5hY3RpdmVUcmFjaygpO1xuXG4gICAgICBpZiAodHJhY2spIHtcbiAgICAgICAgdHJhY2subW9kZSA9ICdkaXNhYmxlZCc7XG4gICAgICB9XG5cbiAgICAgIG1lZGlhVHlwZS5vblRyYWNrQ2hhbmdlZCgpO1xuICAgIH07XG4gIH1cbn07XG52YXIgc2V0dXBMaXN0ZW5lcnMgPSB7XG4gIC8qKlxuICAgKiBTZXR1cCBldmVudCBsaXN0ZW5lcnMgZm9yIGF1ZGlvIHBsYXlsaXN0IGxvYWRlclxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICAgKiAgICAgICAgTWVkaWFHcm91cCB0eXBlXG4gICAqIEBwYXJhbSB7UGxheWxpc3RMb2FkZXJ8bnVsbH0gcGxheWxpc3RMb2FkZXJcbiAgICogICAgICAgIFBsYXlsaXN0TG9hZGVyIHRvIHJlZ2lzdGVyIGxpc3RlbmVycyBvblxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3NcbiAgICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGZvciBtZWRpYSBncm91cHNcbiAgICogQGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzLkFVRElPXG4gICAqL1xuICBBVURJTzogZnVuY3Rpb24gQVVESU8odHlwZSwgcGxheWxpc3RMb2FkZXIsIHNldHRpbmdzKSB7XG4gICAgaWYgKCFwbGF5bGlzdExvYWRlcikge1xuICAgICAgLy8gbm8gcGxheWxpc3QgbG9hZGVyIG1lYW5zIGF1ZGlvIHdpbGwgYmUgbXV4ZWQgd2l0aCB0aGUgdmlkZW9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGVjaCA9IHNldHRpbmdzLnRlY2gsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zID0gc2V0dGluZ3MucmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIHNlZ21lbnRMb2FkZXIgPSBzZXR0aW5ncy5zZWdtZW50TG9hZGVyc1t0eXBlXTtcbiAgICBwbGF5bGlzdExvYWRlci5vbignbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWVkaWEgPSBwbGF5bGlzdExvYWRlci5tZWRpYSgpO1xuICAgICAgc2VnbWVudExvYWRlci5wbGF5bGlzdChtZWRpYSwgcmVxdWVzdE9wdGlvbnMpOyAvLyBpZiB0aGUgdmlkZW8gaXMgYWxyZWFkeSBwbGF5aW5nLCBvciBpZiB0aGlzIGlzbid0IGEgbGl2ZSB2aWRlbyBhbmQgcHJlbG9hZFxuICAgICAgLy8gcGVybWl0cywgc3RhcnQgZG93bmxvYWRpbmcgc2VnbWVudHNcblxuICAgICAgaWYgKCF0ZWNoLnBhdXNlZCgpIHx8IG1lZGlhLmVuZExpc3QgJiYgdGVjaC5wcmVsb2FkKCkgIT09ICdub25lJykge1xuICAgICAgICBzZWdtZW50TG9hZGVyLmxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwbGF5bGlzdExvYWRlci5vbignbG9hZGVkcGxheWxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWdtZW50TG9hZGVyLnBsYXlsaXN0KHBsYXlsaXN0TG9hZGVyLm1lZGlhKCksIHJlcXVlc3RPcHRpb25zKTsgLy8gSWYgdGhlIHBsYXllciBpc24ndCBwYXVzZWQsIGVuc3VyZSB0aGF0IHRoZSBzZWdtZW50IGxvYWRlciBpcyBydW5uaW5nXG5cbiAgICAgIGlmICghdGVjaC5wYXVzZWQoKSkge1xuICAgICAgICBzZWdtZW50TG9hZGVyLmxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwbGF5bGlzdExvYWRlci5vbignZXJyb3InLCBvbkVycm9yW3R5cGVdKHR5cGUsIHNldHRpbmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHVwIGV2ZW50IGxpc3RlbmVycyBmb3Igc3VidGl0bGUgcGxheWxpc3QgbG9hZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtQbGF5bGlzdExvYWRlcnxudWxsfSBwbGF5bGlzdExvYWRlclxuICAgKiAgICAgICAgUGxheWxpc3RMb2FkZXIgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzIG9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5nc1xuICAgKiAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIG1lZGlhIGdyb3Vwc1xuICAgKiBAZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMuU1VCVElUTEVTXG4gICAqL1xuICBTVUJUSVRMRVM6IGZ1bmN0aW9uIFNVQlRJVExFUyh0eXBlLCBwbGF5bGlzdExvYWRlciwgc2V0dGluZ3MpIHtcbiAgICB2YXIgdGVjaCA9IHNldHRpbmdzLnRlY2gsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zID0gc2V0dGluZ3MucmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIHNlZ21lbnRMb2FkZXIgPSBzZXR0aW5ncy5zZWdtZW50TG9hZGVyc1t0eXBlXSxcbiAgICAgICAgbWVkaWFUeXBlID0gc2V0dGluZ3MubWVkaWFUeXBlc1t0eXBlXTtcbiAgICBwbGF5bGlzdExvYWRlci5vbignbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWVkaWEgPSBwbGF5bGlzdExvYWRlci5tZWRpYSgpO1xuICAgICAgc2VnbWVudExvYWRlci5wbGF5bGlzdChtZWRpYSwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgc2VnbWVudExvYWRlci50cmFjayhtZWRpYVR5cGUuYWN0aXZlVHJhY2soKSk7IC8vIGlmIHRoZSB2aWRlbyBpcyBhbHJlYWR5IHBsYXlpbmcsIG9yIGlmIHRoaXMgaXNuJ3QgYSBsaXZlIHZpZGVvIGFuZCBwcmVsb2FkXG4gICAgICAvLyBwZXJtaXRzLCBzdGFydCBkb3dubG9hZGluZyBzZWdtZW50c1xuXG4gICAgICBpZiAoIXRlY2gucGF1c2VkKCkgfHwgbWVkaWEuZW5kTGlzdCAmJiB0ZWNoLnByZWxvYWQoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIHNlZ21lbnRMb2FkZXIubG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBsYXlsaXN0TG9hZGVyLm9uKCdsb2FkZWRwbGF5bGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlZ21lbnRMb2FkZXIucGxheWxpc3QocGxheWxpc3RMb2FkZXIubWVkaWEoKSwgcmVxdWVzdE9wdGlvbnMpOyAvLyBJZiB0aGUgcGxheWVyIGlzbid0IHBhdXNlZCwgZW5zdXJlIHRoYXQgdGhlIHNlZ21lbnQgbG9hZGVyIGlzIHJ1bm5pbmdcblxuICAgICAgaWYgKCF0ZWNoLnBhdXNlZCgpKSB7XG4gICAgICAgIHNlZ21lbnRMb2FkZXIubG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBsYXlsaXN0TG9hZGVyLm9uKCdlcnJvcicsIG9uRXJyb3JbdHlwZV0odHlwZSwgc2V0dGluZ3MpKTtcbiAgfVxufTtcbnZhciBpbml0aWFsaXplID0ge1xuICAvKipcbiAgICogU2V0dXAgUGxheWxpc3RMb2FkZXJzIGFuZCBBdWRpb1RyYWNrcyBmb3IgdGhlIGF1ZGlvIGdyb3Vwc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICAgKiAgICAgICAgTWVkaWFHcm91cCB0eXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5nc1xuICAgKiAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIG1lZGlhIGdyb3Vwc1xuICAgKiBAZnVuY3Rpb24gaW5pdGlhbGl6ZS5BVURJT1xuICAgKi9cbiAgJ0FVRElPJzogZnVuY3Rpb24gQVVESU8odHlwZSwgc2V0dGluZ3MpIHtcbiAgICB2YXIgaGxzID0gc2V0dGluZ3MuaGxzLFxuICAgICAgICBzb3VyY2VUeXBlID0gc2V0dGluZ3Muc291cmNlVHlwZSxcbiAgICAgICAgc2VnbWVudExvYWRlciA9IHNldHRpbmdzLnNlZ21lbnRMb2FkZXJzW3R5cGVdLFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyA9IHNldHRpbmdzLnJlcXVlc3RPcHRpb25zLFxuICAgICAgICBtZWRpYUdyb3VwcyA9IHNldHRpbmdzLm1hc3Rlci5tZWRpYUdyb3VwcyxcbiAgICAgICAgX3NldHRpbmdzJG1lZGlhVHlwZXMkID0gc2V0dGluZ3MubWVkaWFUeXBlc1t0eXBlXSxcbiAgICAgICAgZ3JvdXBzID0gX3NldHRpbmdzJG1lZGlhVHlwZXMkLmdyb3VwcyxcbiAgICAgICAgdHJhY2tzID0gX3NldHRpbmdzJG1lZGlhVHlwZXMkLnRyYWNrcyxcbiAgICAgICAgbWFzdGVyUGxheWxpc3RMb2FkZXIgPSBzZXR0aW5ncy5tYXN0ZXJQbGF5bGlzdExvYWRlcjsgLy8gZm9yY2UgYSBkZWZhdWx0IGlmIHdlIGhhdmUgbm9uZVxuXG4gICAgaWYgKCFtZWRpYUdyb3Vwc1t0eXBlXSB8fCBPYmplY3Qua2V5cyhtZWRpYUdyb3Vwc1t0eXBlXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBtZWRpYUdyb3Vwc1t0eXBlXSA9IHtcbiAgICAgICAgbWFpbjoge1xuICAgICAgICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICAgICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBncm91cElkIGluIG1lZGlhR3JvdXBzW3R5cGVdKSB7XG4gICAgICBpZiAoIWdyb3Vwc1tncm91cElkXSkge1xuICAgICAgICBncm91cHNbZ3JvdXBJZF0gPSBbXTtcbiAgICAgIH0gLy8gTGlzdCBvZiBwbGF5bGlzdHMgdGhhdCBoYXZlIGFuIEFVRElPIGF0dHJpYnV0ZSB2YWx1ZSBtYXRjaGluZyB0aGUgY3VycmVudFxuICAgICAgLy8gZ3JvdXAgSURcblxuXG4gICAgICBmb3IgKHZhciB2YXJpYW50TGFiZWwgaW4gbWVkaWFHcm91cHNbdHlwZV1bZ3JvdXBJZF0pIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBtZWRpYUdyb3Vwc1t0eXBlXVtncm91cElkXVt2YXJpYW50TGFiZWxdO1xuICAgICAgICB2YXIgcGxheWxpc3RMb2FkZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMucmVzb2x2ZWRVcmkpIHtcbiAgICAgICAgICBwbGF5bGlzdExvYWRlciA9IG5ldyBQbGF5bGlzdExvYWRlcihwcm9wZXJ0aWVzLnJlc29sdmVkVXJpLCBobHMsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLnBsYXlsaXN0cyAmJiBzb3VyY2VUeXBlID09PSAnZGFzaCcpIHtcbiAgICAgICAgICBwbGF5bGlzdExvYWRlciA9IG5ldyBEYXNoUGxheWxpc3RMb2FkZXIocHJvcGVydGllcy5wbGF5bGlzdHNbMF0sIGhscywgcmVxdWVzdE9wdGlvbnMsIG1hc3RlclBsYXlsaXN0TG9hZGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBubyByZXNvbHZlZFVyaSBtZWFucyB0aGUgYXVkaW8gaXMgbXV4ZWQgd2l0aCB0aGUgdmlkZW8gd2hlbiB1c2luZyB0aGlzXG4gICAgICAgICAgLy8gYXVkaW8gdHJhY2tcbiAgICAgICAgICBwbGF5bGlzdExvYWRlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyh7XG4gICAgICAgICAgaWQ6IHZhcmlhbnRMYWJlbCxcbiAgICAgICAgICBwbGF5bGlzdExvYWRlcjogcGxheWxpc3RMb2FkZXJcbiAgICAgICAgfSwgcHJvcGVydGllcyk7XG4gICAgICAgIHNldHVwTGlzdGVuZXJzW3R5cGVdKHR5cGUsIHByb3BlcnRpZXMucGxheWxpc3RMb2FkZXIsIHNldHRpbmdzKTtcbiAgICAgICAgZ3JvdXBzW2dyb3VwSWRdLnB1c2gocHJvcGVydGllcyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFja3NbdmFyaWFudExhYmVsXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YXIgdHJhY2sgPSBuZXcgdmlkZW9qcyQxLkF1ZGlvVHJhY2soe1xuICAgICAgICAgICAgaWQ6IHZhcmlhbnRMYWJlbCxcbiAgICAgICAgICAgIGtpbmQ6IGF1ZGlvVHJhY2tLaW5kXyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IHByb3BlcnRpZXMubGFuZ3VhZ2UsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogcHJvcGVydGllc1tcImRlZmF1bHRcIl0sXG4gICAgICAgICAgICBsYWJlbDogdmFyaWFudExhYmVsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHJhY2tzW3ZhcmlhbnRMYWJlbF0gPSB0cmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gc2V0dXAgc2luZ2xlIGVycm9yIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBzZWdtZW50IGxvYWRlclxuXG5cbiAgICBzZWdtZW50TG9hZGVyLm9uKCdlcnJvcicsIG9uRXJyb3JbdHlwZV0odHlwZSwgc2V0dGluZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0dXAgUGxheWxpc3RMb2FkZXJzIGFuZCBUZXh0VHJhY2tzIGZvciB0aGUgc3VidGl0bGUgZ3JvdXBzXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqICAgICAgICBPYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgbWVkaWEgZ3JvdXBzXG4gICAqIEBmdW5jdGlvbiBpbml0aWFsaXplLlNVQlRJVExFU1xuICAgKi9cbiAgJ1NVQlRJVExFUyc6IGZ1bmN0aW9uIFNVQlRJVExFUyh0eXBlLCBzZXR0aW5ncykge1xuICAgIHZhciB0ZWNoID0gc2V0dGluZ3MudGVjaCxcbiAgICAgICAgaGxzID0gc2V0dGluZ3MuaGxzLFxuICAgICAgICBzb3VyY2VUeXBlID0gc2V0dGluZ3Muc291cmNlVHlwZSxcbiAgICAgICAgc2VnbWVudExvYWRlciA9IHNldHRpbmdzLnNlZ21lbnRMb2FkZXJzW3R5cGVdLFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyA9IHNldHRpbmdzLnJlcXVlc3RPcHRpb25zLFxuICAgICAgICBtZWRpYUdyb3VwcyA9IHNldHRpbmdzLm1hc3Rlci5tZWRpYUdyb3VwcyxcbiAgICAgICAgX3NldHRpbmdzJG1lZGlhVHlwZXMkMiA9IHNldHRpbmdzLm1lZGlhVHlwZXNbdHlwZV0sXG4gICAgICAgIGdyb3VwcyA9IF9zZXR0aW5ncyRtZWRpYVR5cGVzJDIuZ3JvdXBzLFxuICAgICAgICB0cmFja3MgPSBfc2V0dGluZ3MkbWVkaWFUeXBlcyQyLnRyYWNrcyxcbiAgICAgICAgbWFzdGVyUGxheWxpc3RMb2FkZXIgPSBzZXR0aW5ncy5tYXN0ZXJQbGF5bGlzdExvYWRlcjtcblxuICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbWVkaWFHcm91cHNbdHlwZV0pIHtcbiAgICAgIGlmICghZ3JvdXBzW2dyb3VwSWRdKSB7XG4gICAgICAgIGdyb3Vwc1tncm91cElkXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciB2YXJpYW50TGFiZWwgaW4gbWVkaWFHcm91cHNbdHlwZV1bZ3JvdXBJZF0pIHtcbiAgICAgICAgaWYgKG1lZGlhR3JvdXBzW3R5cGVdW2dyb3VwSWRdW3ZhcmlhbnRMYWJlbF0uZm9yY2VkKSB7XG4gICAgICAgICAgLy8gU3VidGl0bGUgcGxheWxpc3RzIHdpdGggdGhlIGZvcmNlZCBhdHRyaWJ1dGUgYXJlIG5vdCBzZWxlY3RhYmxlIGluIFNhZmFyaS5cbiAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQXBwbGUncyBITFMgQXV0aG9yaW5nIFNwZWNpZmljYXRpb246XG4gICAgICAgICAgLy8gICBJZiBjb250ZW50IGhhcyBmb3JjZWQgc3VidGl0bGVzIGFuZCByZWd1bGFyIHN1YnRpdGxlcyBpbiBhIGdpdmVuIGxhbmd1YWdlLFxuICAgICAgICAgIC8vICAgdGhlIHJlZ3VsYXIgc3VidGl0bGVzIHRyYWNrIGluIHRoYXQgbGFuZ3VhZ2UgTVVTVCBjb250YWluIGJvdGggdGhlIGZvcmNlZFxuICAgICAgICAgIC8vICAgc3VidGl0bGVzIGFuZCB0aGUgcmVndWxhciBzdWJ0aXRsZXMgZm9yIHRoYXQgbGFuZ3VhZ2UuXG4gICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzIHJlcXVpcmVtZW50IGFuZCB0aGF0IFNhZmFyaSBkb2VzIG5vdCBhZGQgZm9yY2VkIHN1YnRpdGxlcyxcbiAgICAgICAgICAvLyBmb3JjZWQgc3VidGl0bGVzIGFyZSBza2lwcGVkIGhlcmUgdG8gbWFpbnRhaW4gY29uc2lzdGVudCBleHBlcmllbmNlIGFjcm9zc1xuICAgICAgICAgIC8vIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbWVkaWFHcm91cHNbdHlwZV1bZ3JvdXBJZF1bdmFyaWFudExhYmVsXTtcbiAgICAgICAgdmFyIHBsYXlsaXN0TG9hZGVyID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnaGxzJykge1xuICAgICAgICAgIHBsYXlsaXN0TG9hZGVyID0gbmV3IFBsYXlsaXN0TG9hZGVyKHByb3BlcnRpZXMucmVzb2x2ZWRVcmksIGhscywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdkYXNoJykge1xuICAgICAgICAgIHBsYXlsaXN0TG9hZGVyID0gbmV3IERhc2hQbGF5bGlzdExvYWRlcihwcm9wZXJ0aWVzLnBsYXlsaXN0c1swXSwgaGxzLCByZXF1ZXN0T3B0aW9ucywgbWFzdGVyUGxheWxpc3RMb2FkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcyA9IHZpZGVvanMkMS5tZXJnZU9wdGlvbnMoe1xuICAgICAgICAgIGlkOiB2YXJpYW50TGFiZWwsXG4gICAgICAgICAgcGxheWxpc3RMb2FkZXI6IHBsYXlsaXN0TG9hZGVyXG4gICAgICAgIH0sIHByb3BlcnRpZXMpO1xuICAgICAgICBzZXR1cExpc3RlbmVyc1t0eXBlXSh0eXBlLCBwcm9wZXJ0aWVzLnBsYXlsaXN0TG9hZGVyLCBzZXR0aW5ncyk7XG4gICAgICAgIGdyb3Vwc1tncm91cElkXS5wdXNoKHByb3BlcnRpZXMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdHJhY2tzW3ZhcmlhbnRMYWJlbF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdmFyIHRyYWNrID0gdGVjaC5hZGRSZW1vdGVUZXh0VHJhY2soe1xuICAgICAgICAgICAgaWQ6IHZhcmlhbnRMYWJlbCxcbiAgICAgICAgICAgIGtpbmQ6ICdzdWJ0aXRsZXMnLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHByb3BlcnRpZXNbXCJkZWZhdWx0XCJdICYmIHByb3BlcnRpZXMuYXV0b3NlbGVjdCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBwcm9wZXJ0aWVzLmxhbmd1YWdlLFxuICAgICAgICAgICAgbGFiZWw6IHZhcmlhbnRMYWJlbFxuICAgICAgICAgIH0sIGZhbHNlKS50cmFjaztcbiAgICAgICAgICB0cmFja3NbdmFyaWFudExhYmVsXSA9IHRyYWNrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBzZXR1cCBzaW5nbGUgZXJyb3IgZXZlbnQgaGFuZGxlciBmb3IgdGhlIHNlZ21lbnQgbG9hZGVyXG5cblxuICAgIHNlZ21lbnRMb2FkZXIub24oJ2Vycm9yJywgb25FcnJvclt0eXBlXSh0eXBlLCBzZXR0aW5ncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXR1cCBUZXh0VHJhY2tzIGZvciB0aGUgY2xvc2VkLWNhcHRpb24gZ3JvdXBzXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqICAgICAgICBPYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgbWVkaWEgZ3JvdXBzXG4gICAqIEBmdW5jdGlvbiBpbml0aWFsaXplWydDTE9TRUQtQ0FQVElPTlMnXVxuICAgKi9cbiAgJ0NMT1NFRC1DQVBUSU9OUyc6IGZ1bmN0aW9uIENMT1NFRENBUFRJT05TKHR5cGUsIHNldHRpbmdzKSB7XG4gICAgdmFyIHRlY2ggPSBzZXR0aW5ncy50ZWNoLFxuICAgICAgICBtZWRpYUdyb3VwcyA9IHNldHRpbmdzLm1hc3Rlci5tZWRpYUdyb3VwcyxcbiAgICAgICAgX3NldHRpbmdzJG1lZGlhVHlwZXMkMyA9IHNldHRpbmdzLm1lZGlhVHlwZXNbdHlwZV0sXG4gICAgICAgIGdyb3VwcyA9IF9zZXR0aW5ncyRtZWRpYVR5cGVzJDMuZ3JvdXBzLFxuICAgICAgICB0cmFja3MgPSBfc2V0dGluZ3MkbWVkaWFUeXBlcyQzLnRyYWNrcztcblxuICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbWVkaWFHcm91cHNbdHlwZV0pIHtcbiAgICAgIGlmICghZ3JvdXBzW2dyb3VwSWRdKSB7XG4gICAgICAgIGdyb3Vwc1tncm91cElkXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciB2YXJpYW50TGFiZWwgaW4gbWVkaWFHcm91cHNbdHlwZV1bZ3JvdXBJZF0pIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBtZWRpYUdyb3Vwc1t0eXBlXVtncm91cElkXVt2YXJpYW50TGFiZWxdOyAvLyBXZSBvbmx5IHN1cHBvcnQgQ0VBNjA4IGNhcHRpb25zIGZvciBub3csIHNvIGlnbm9yZSBhbnl0aGluZyB0aGF0XG4gICAgICAgIC8vIGRvZXNuJ3QgdXNlIGEgQ0N4IElOU1RSRUFNLUlEXG5cbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmluc3RyZWFtSWQubWF0Y2goL0NDXFxkLykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBObyBQbGF5bGlzdExvYWRlciBpcyByZXF1aXJlZCBmb3IgQ2xvc2VkLUNhcHRpb25zIGJlY2F1c2UgdGhlIGNhcHRpb25zIGFyZVxuICAgICAgICAvLyBlbWJlZGRlZCB3aXRoaW4gdGhlIHZpZGVvIHN0cmVhbVxuXG5cbiAgICAgICAgZ3JvdXBzW2dyb3VwSWRdLnB1c2godmlkZW9qcyQxLm1lcmdlT3B0aW9ucyh7XG4gICAgICAgICAgaWQ6IHZhcmlhbnRMYWJlbFxuICAgICAgICB9LCBwcm9wZXJ0aWVzKSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFja3NbdmFyaWFudExhYmVsXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YXIgdHJhY2sgPSB0ZWNoLmFkZFJlbW90ZVRleHRUcmFjayh7XG4gICAgICAgICAgICBpZDogcHJvcGVydGllcy5pbnN0cmVhbUlkLFxuICAgICAgICAgICAga2luZDogJ2NhcHRpb25zJyxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBwcm9wZXJ0aWVzW1wiZGVmYXVsdFwiXSAmJiBwcm9wZXJ0aWVzLmF1dG9zZWxlY3QsXG4gICAgICAgICAgICBsYW5ndWFnZTogcHJvcGVydGllcy5sYW5ndWFnZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YXJpYW50TGFiZWxcbiAgICAgICAgICB9LCBmYWxzZSkudHJhY2s7XG4gICAgICAgICAgdHJhY2tzW3ZhcmlhbnRMYWJlbF0gPSB0cmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHVzZWQgdG8gZ2V0IHRoZSBhY3RpdmUgZ3JvdXAgb2YgdGhlIHByb3ZpZGVkIHR5cGVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogICAgICAgIE1lZGlhR3JvdXAgdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gKiAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIG1lZGlhIGdyb3Vwc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiAgICAgICAgIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYWN0aXZlIG1lZGlhIGdyb3VwIGZvciB0aGUgcHJvdmlkZWQgdHlwZS4gVGFrZXMgYW5cbiAqICAgICAgICAgb3B0aW9uYWwgcGFyYW1ldGVyIHtUZXh0VHJhY2t9IHRyYWNrLiBJZiBubyB0cmFjayBpcyBwcm92aWRlZCwgYSBsaXN0IG9mIGFsbFxuICogICAgICAgICB2YXJpYW50cyBpbiB0aGUgZ3JvdXAsIG90aGVyd2lzZSB0aGUgdmFyaWFudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZFxuICogICAgICAgICB0cmFjayBpcyByZXR1cm5lZC5cbiAqIEBmdW5jdGlvbiBhY3RpdmVHcm91cFxuICovXG5cbnZhciBhY3RpdmVHcm91cCA9IGZ1bmN0aW9uIGFjdGl2ZUdyb3VwKHR5cGUsIHNldHRpbmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodHJhY2spIHtcbiAgICB2YXIgbWFzdGVyUGxheWxpc3RMb2FkZXIgPSBzZXR0aW5ncy5tYXN0ZXJQbGF5bGlzdExvYWRlcixcbiAgICAgICAgZ3JvdXBzID0gc2V0dGluZ3MubWVkaWFUeXBlc1t0eXBlXS5ncm91cHM7XG4gICAgdmFyIG1lZGlhID0gbWFzdGVyUGxheWxpc3RMb2FkZXIubWVkaWEoKTtcblxuICAgIGlmICghbWVkaWEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YXJpYW50cyA9IG51bGw7XG5cbiAgICBpZiAobWVkaWEuYXR0cmlidXRlc1t0eXBlXSkge1xuICAgICAgdmFyaWFudHMgPSBncm91cHNbbWVkaWEuYXR0cmlidXRlc1t0eXBlXV07XG4gICAgfVxuXG4gICAgdmFyaWFudHMgPSB2YXJpYW50cyB8fCBncm91cHMubWFpbjtcblxuICAgIGlmICh0eXBlb2YgdHJhY2sgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdmFyaWFudHM7XG4gICAgfVxuXG4gICAgaWYgKHRyYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBBbiBhY3RpdmUgdHJhY2sgd2FzIHNwZWNpZmllZCBzbyBhIGNvcnJlc3BvbmRpbmcgZ3JvdXAgaXMgZXhwZWN0ZWQuIHRyYWNrID09PSBudWxsXG4gICAgICAvLyBtZWFucyBubyB0cmFjayBpcyBjdXJyZW50bHkgYWN0aXZlIHNvIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZ3JvdXBcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYW50cy5maWx0ZXIoZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICByZXR1cm4gcHJvcHMuaWQgPT09IHRyYWNrLmlkO1xuICAgIH0pWzBdIHx8IG51bGw7XG4gIH07XG59O1xuXG52YXIgYWN0aXZlVHJhY2sgPSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhlIGFjdGl2ZSB0cmFjayBvZiB0eXBlIHByb3ZpZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqICAgICAgICBPYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgbWVkaWEgZ3JvdXBzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKiAgICAgICAgIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYWN0aXZlIG1lZGlhIHRyYWNrIGZvciB0aGUgcHJvdmlkZWQgdHlwZS4gUmV0dXJuc1xuICAgKiAgICAgICAgIG51bGwgaWYgbm8gdHJhY2sgaXMgYWN0aXZlXG4gICAqIEBmdW5jdGlvbiBhY3RpdmVUcmFjay5BVURJT1xuICAgKi9cbiAgQVVESU86IGZ1bmN0aW9uIEFVRElPKHR5cGUsIHNldHRpbmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0cmFja3MgPSBzZXR0aW5ncy5tZWRpYVR5cGVzW3R5cGVdLnRyYWNrcztcblxuICAgICAgZm9yICh2YXIgaWQgaW4gdHJhY2tzKSB7XG4gICAgICAgIGlmICh0cmFja3NbaWRdLmVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJhY2tzW2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhlIGFjdGl2ZSB0cmFjayBvZiB0eXBlIHByb3ZpZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqICAgICAgICBNZWRpYUdyb3VwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqICAgICAgICBPYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgbWVkaWEgZ3JvdXBzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKiAgICAgICAgIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYWN0aXZlIG1lZGlhIHRyYWNrIGZvciB0aGUgcHJvdmlkZWQgdHlwZS4gUmV0dXJuc1xuICAgKiAgICAgICAgIG51bGwgaWYgbm8gdHJhY2sgaXMgYWN0aXZlXG4gICAqIEBmdW5jdGlvbiBhY3RpdmVUcmFjay5TVUJUSVRMRVNcbiAgICovXG4gIFNVQlRJVExFUzogZnVuY3Rpb24gU1VCVElUTEVTKHR5cGUsIHNldHRpbmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0cmFja3MgPSBzZXR0aW5ncy5tZWRpYVR5cGVzW3R5cGVdLnRyYWNrcztcblxuICAgICAgZm9yICh2YXIgaWQgaW4gdHJhY2tzKSB7XG4gICAgICAgIGlmICh0cmFja3NbaWRdLm1vZGUgPT09ICdzaG93aW5nJykge1xuICAgICAgICAgIHJldHVybiB0cmFja3NbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn07XG4vKipcbiAqIFNldHVwIFBsYXlsaXN0TG9hZGVycyBhbmQgVHJhY2tzIGZvciBtZWRpYSBncm91cHMgKEF1ZGlvLCBTdWJ0aXRsZXMsXG4gKiBDbG9zZWQtQ2FwdGlvbnMpIHNwZWNpZmllZCBpbiB0aGUgbWFzdGVyIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5nc1xuICogICAgICAgIE9iamVjdCBjb250YWluaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGZvciBzZXR0aW5nIHVwIHRoZSBtZWRpYSBncm91cHNcbiAqIEBwYXJhbSB7U2VnbWVudExvYWRlcn0gc2V0dGluZ3Muc2VnbWVudExvYWRlcnMuQVVESU9cbiAqICAgICAgICBBdWRpbyBzZWdtZW50IGxvYWRlclxuICogQHBhcmFtIHtTZWdtZW50TG9hZGVyfSBzZXR0aW5ncy5zZWdtZW50TG9hZGVycy5TVUJUSVRMRVNcbiAqICAgICAgICBTdWJ0aXRsZSBzZWdtZW50IGxvYWRlclxuICogQHBhcmFtIHtTZWdtZW50TG9hZGVyfSBzZXR0aW5ncy5zZWdtZW50TG9hZGVycy5tYWluXG4gKiAgICAgICAgTWFpbiBzZWdtZW50IGxvYWRlclxuICogQHBhcmFtIHtUZWNofSBzZXR0aW5ncy50ZWNoXG4gKiAgICAgICAgVGhlIHRlY2ggb2YgdGhlIHBsYXllclxuICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzLnJlcXVlc3RPcHRpb25zXG4gKiAgICAgICAgWEhSIHJlcXVlc3Qgb3B0aW9ucyB1c2VkIGJ5IHRoZSBzZWdtZW50IGxvYWRlcnNcbiAqIEBwYXJhbSB7UGxheWxpc3RMb2FkZXJ9IHNldHRpbmdzLm1hc3RlclBsYXlsaXN0TG9hZGVyXG4gKiAgICAgICAgUGxheWxpc3RMb2FkZXIgZm9yIHRoZSBtYXN0ZXIgc291cmNlXG4gKiBAcGFyYW0ge0hsc0hhbmRsZXJ9IHNldHRpbmdzLmhsc1xuICogICAgICAgIEhMUyBTb3VyY2VIYW5kbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MubWFzdGVyXG4gKiAgICAgICAgVGhlIHBhcnNlZCBtYXN0ZXIgbWFuaWZlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncy5tZWRpYVR5cGVzXG4gKiAgICAgICAgT2JqZWN0IHRvIHN0b3JlIHRoZSBsb2FkZXJzLCB0cmFja3MsIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGVhY2ggbWVkaWEgdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGluZ3MuYmxhY2tsaXN0Q3VycmVudFBsYXlsaXN0XG4gKiAgICAgICAgQmxhY2tsaXN0cyB0aGUgY3VycmVudCByZW5kaXRpb24gYW5kIGZvcmNlcyBhIHJlbmRpdGlvbiBzd2l0Y2guXG4gKiBAZnVuY3Rpb24gc2V0dXBNZWRpYUdyb3Vwc1xuICovXG5cbnZhciBzZXR1cE1lZGlhR3JvdXBzID0gZnVuY3Rpb24gc2V0dXBNZWRpYUdyb3VwcyhzZXR0aW5ncykge1xuICBbJ0FVRElPJywgJ1NVQlRJVExFUycsICdDTE9TRUQtQ0FQVElPTlMnXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaW5pdGlhbGl6ZVt0eXBlXSh0eXBlLCBzZXR0aW5ncyk7XG4gIH0pO1xuICB2YXIgbWVkaWFUeXBlcyA9IHNldHRpbmdzLm1lZGlhVHlwZXMsXG4gICAgICBtYXN0ZXJQbGF5bGlzdExvYWRlciA9IHNldHRpbmdzLm1hc3RlclBsYXlsaXN0TG9hZGVyLFxuICAgICAgdGVjaCA9IHNldHRpbmdzLnRlY2gsXG4gICAgICBobHMgPSBzZXR0aW5ncy5obHM7IC8vIHNldHVwIGFjdGl2ZSBncm91cCBhbmQgdHJhY2sgZ2V0dGVycyBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsZXJzXG5cbiAgWydBVURJTycsICdTVUJUSVRMRVMnXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgbWVkaWFUeXBlc1t0eXBlXS5hY3RpdmVHcm91cCA9IGFjdGl2ZUdyb3VwKHR5cGUsIHNldHRpbmdzKTtcbiAgICBtZWRpYVR5cGVzW3R5cGVdLmFjdGl2ZVRyYWNrID0gYWN0aXZlVHJhY2tbdHlwZV0odHlwZSwgc2V0dGluZ3MpO1xuICAgIG1lZGlhVHlwZXNbdHlwZV0ub25Hcm91cENoYW5nZWQgPSBvbkdyb3VwQ2hhbmdlZCh0eXBlLCBzZXR0aW5ncyk7XG4gICAgbWVkaWFUeXBlc1t0eXBlXS5vblRyYWNrQ2hhbmdlZCA9IG9uVHJhY2tDaGFuZ2VkKHR5cGUsIHNldHRpbmdzKTtcbiAgfSk7IC8vIERPIE5PVCBlbmFibGUgdGhlIGRlZmF1bHQgc3VidGl0bGUgb3IgY2FwdGlvbiB0cmFjay5cbiAgLy8gRE8gZW5hYmxlIHRoZSBkZWZhdWx0IGF1ZGlvIHRyYWNrXG5cbiAgdmFyIGF1ZGlvR3JvdXAgPSBtZWRpYVR5cGVzLkFVRElPLmFjdGl2ZUdyb3VwKCk7XG4gIHZhciBncm91cElkID0gKGF1ZGlvR3JvdXAuZmlsdGVyKGZ1bmN0aW9uIChncm91cCkge1xuICAgIHJldHVybiBncm91cFtcImRlZmF1bHRcIl07XG4gIH0pWzBdIHx8IGF1ZGlvR3JvdXBbMF0pLmlkO1xuICBtZWRpYVR5cGVzLkFVRElPLnRyYWNrc1tncm91cElkXS5lbmFibGVkID0gdHJ1ZTtcbiAgbWVkaWFUeXBlcy5BVURJTy5vblRyYWNrQ2hhbmdlZCgpO1xuICBtYXN0ZXJQbGF5bGlzdExvYWRlci5vbignbWVkaWFjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgWydBVURJTycsICdTVUJUSVRMRVMnXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICByZXR1cm4gbWVkaWFUeXBlc1t0eXBlXS5vbkdyb3VwQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9KTsgLy8gY3VzdG9tIGF1ZGlvIHRyYWNrIGNoYW5nZSBldmVudCBoYW5kbGVyIGZvciB1c2FnZSBldmVudFxuXG4gIHZhciBvbkF1ZGlvVHJhY2tDaGFuZ2VkID0gZnVuY3Rpb24gb25BdWRpb1RyYWNrQ2hhbmdlZCgpIHtcbiAgICBtZWRpYVR5cGVzLkFVRElPLm9uVHJhY2tDaGFuZ2VkKCk7XG4gICAgdGVjaC50cmlnZ2VyKHtcbiAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICBuYW1lOiAnaGxzLWF1ZGlvLWNoYW5nZSdcbiAgICB9KTtcbiAgfTtcblxuICB0ZWNoLmF1ZGlvVHJhY2tzKCkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25BdWRpb1RyYWNrQ2hhbmdlZCk7XG4gIHRlY2gucmVtb3RlVGV4dFRyYWNrcygpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG1lZGlhVHlwZXMuU1VCVElUTEVTLm9uVHJhY2tDaGFuZ2VkKTtcbiAgaGxzLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIHRlY2guYXVkaW9UcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkF1ZGlvVHJhY2tDaGFuZ2VkKTtcbiAgICB0ZWNoLnJlbW90ZVRleHRUcmFja3MoKS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBtZWRpYVR5cGVzLlNVQlRJVExFUy5vblRyYWNrQ2hhbmdlZCk7XG4gIH0pOyAvLyBjbGVhciBleGlzdGluZyBhdWRpbyB0cmFja3MgYW5kIGFkZCB0aGUgb25lcyB3ZSBqdXN0IGNyZWF0ZWRcblxuICB0ZWNoLmNsZWFyVHJhY2tzKCdhdWRpbycpO1xuXG4gIGZvciAodmFyIGlkIGluIG1lZGlhVHlwZXMuQVVESU8udHJhY2tzKSB7XG4gICAgdGVjaC5hdWRpb1RyYWNrcygpLmFkZFRyYWNrKG1lZGlhVHlwZXMuQVVESU8udHJhY2tzW2lkXSk7XG4gIH1cbn07XG4vKipcbiAqIENyZWF0ZXMgc2tlbGV0b24gb2JqZWN0IHVzZWQgdG8gc3RvcmUgdGhlIGxvYWRlcnMsIHRyYWNrcywgYW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgZWFjaFxuICogbWVkaWEgdHlwZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqICAgICAgICAgT2JqZWN0IHRvIHN0b3JlIHRoZSBsb2FkZXJzLCB0cmFja3MsIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGVhY2ggbWVkaWEgdHlwZVxuICogQGZ1bmN0aW9uIGNyZWF0ZU1lZGlhVHlwZXNcbiAqL1xuXG5cbnZhciBjcmVhdGVNZWRpYVR5cGVzID0gZnVuY3Rpb24gY3JlYXRlTWVkaWFUeXBlcygpIHtcbiAgdmFyIG1lZGlhVHlwZXMgPSB7fTtcbiAgWydBVURJTycsICdTVUJUSVRMRVMnLCAnQ0xPU0VELUNBUFRJT05TJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIG1lZGlhVHlwZXNbdHlwZV0gPSB7XG4gICAgICBncm91cHM6IHt9LFxuICAgICAgdHJhY2tzOiB7fSxcbiAgICAgIGFjdGl2ZVBsYXlsaXN0TG9hZGVyOiBudWxsLFxuICAgICAgYWN0aXZlR3JvdXA6IG5vb3AsXG4gICAgICBhY3RpdmVUcmFjazogbm9vcCxcbiAgICAgIG9uR3JvdXBDaGFuZ2VkOiBub29wLFxuICAgICAgb25UcmFja0NoYW5nZWQ6IG5vb3BcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIG1lZGlhVHlwZXM7XG59O1xuLyoqXG4gKiBAZmlsZSBtYXN0ZXItcGxheWxpc3QtY29udHJvbGxlci5qc1xuICovXG5cblxudmFyIEFCT1JUX0VBUkxZX0JMQUNLTElTVF9TRUNPTkRTID0gNjAgKiAyO1xudmFyIEhscyA9IHZvaWQgMDsgLy8gU2VnbWVudExvYWRlciBzdGF0cyB0aGF0IG5lZWQgdG8gaGF2ZSBlYWNoIGxvYWRlcidzXG4vLyB2YWx1ZXMgc3VtbWVkIHRvIGNhbGN1bGF0ZSB0aGUgZmluYWwgdmFsdWVcblxudmFyIGxvYWRlclN0YXRzID0gWydtZWRpYVJlcXVlc3RzJywgJ21lZGlhUmVxdWVzdHNBYm9ydGVkJywgJ21lZGlhUmVxdWVzdHNUaW1lZG91dCcsICdtZWRpYVJlcXVlc3RzRXJyb3JlZCcsICdtZWRpYVRyYW5zZmVyRHVyYXRpb24nLCAnbWVkaWFCeXRlc1RyYW5zZmVycmVkJ107XG5cbnZhciBzdW1Mb2FkZXJTdGF0ID0gZnVuY3Rpb24gc3VtTG9hZGVyU3RhdChzdGF0KSB7XG4gIHJldHVybiB0aGlzLmF1ZGlvU2VnbWVudExvYWRlcl9bc3RhdF0gKyB0aGlzLm1haW5TZWdtZW50TG9hZGVyX1tzdGF0XTtcbn07XG4vKipcbiAqIHRoZSBtYXN0ZXIgcGxheWxpc3QgY29udHJvbGxlciBjb250cm9sbGVyIGFsbCBpbnRlcmFjdG9uc1xuICogYmV0d2VlbiBwbGF5bGlzdHMgYW5kIHNlZ21lbnRsb2FkZXJzLiBBdCB0aGlzIHRpbWUgdGhpcyBtYWlubHlcbiAqIGludm9sdmVzIGEgbWFzdGVyIHBsYXlsaXN0IGFuZCBhIHNlcmllcyBvZiBhdWRpbyBwbGF5bGlzdHNcbiAqIGlmIHRoZXkgYXJlIGF2YWlsYWJsZVxuICpcbiAqIEBjbGFzcyBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJcbiAqIEBleHRlbmRzIHZpZGVvanMuRXZlbnRUYXJnZXRcbiAqL1xuXG5cbnZhciBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXIgPSBmdW5jdGlvbiAoX3ZpZGVvanMkRXZlbnRUYXJnZXQpIHtcbiAgaW5oZXJpdHMoTWFzdGVyUGxheWxpc3RDb250cm9sbGVyLCBfdmlkZW9qcyRFdmVudFRhcmdldCk7XG5cbiAgZnVuY3Rpb24gTWFzdGVyUGxheWxpc3RDb250cm9sbGVyKG9wdGlvbnMpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXIpO1xuXG4gICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoTWFzdGVyUGxheWxpc3RDb250cm9sbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTWFzdGVyUGxheWxpc3RDb250cm9sbGVyKSkuY2FsbCh0aGlzKSk7XG5cbiAgICB2YXIgdXJsID0gb3B0aW9ucy51cmwsXG4gICAgICAgIGhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzID0gb3B0aW9ucy5oYW5kbGVNYW5pZmVzdFJlZGlyZWN0cyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIHRlY2ggPSBvcHRpb25zLnRlY2gsXG4gICAgICAgIGJhbmR3aWR0aCA9IG9wdGlvbnMuYmFuZHdpZHRoLFxuICAgICAgICBleHRlcm5IbHMgPSBvcHRpb25zLmV4dGVybkhscyxcbiAgICAgICAgdXNlQ3VlVGFncyA9IG9wdGlvbnMudXNlQ3VlVGFncyxcbiAgICAgICAgYmxhY2tsaXN0RHVyYXRpb24gPSBvcHRpb25zLmJsYWNrbGlzdER1cmF0aW9uLFxuICAgICAgICBlbmFibGVMb3dJbml0aWFsUGxheWxpc3QgPSBvcHRpb25zLmVuYWJsZUxvd0luaXRpYWxQbGF5bGlzdCxcbiAgICAgICAgc291cmNlVHlwZSA9IG9wdGlvbnMuc291cmNlVHlwZSxcbiAgICAgICAgc2Vla1RvID0gb3B0aW9ucy5zZWVrVG8sXG4gICAgICAgIGNhY2hlRW5jcnlwdGlvbktleXMgPSBvcHRpb25zLmNhY2hlRW5jcnlwdGlvbktleXM7XG5cbiAgICBpZiAoIXVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIG5vbi1lbXB0eSBwbGF5bGlzdCBVUkwgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBIbHMgPSBleHRlcm5IbHM7XG4gICAgX3RoaXMud2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzO1xuICAgIF90aGlzLnRlY2hfID0gdGVjaDtcbiAgICBfdGhpcy5obHNfID0gdGVjaC5obHM7XG4gICAgX3RoaXMuc2Vla1RvXyA9IHNlZWtUbztcbiAgICBfdGhpcy5zb3VyY2VUeXBlXyA9IHNvdXJjZVR5cGU7XG4gICAgX3RoaXMudXNlQ3VlVGFnc18gPSB1c2VDdWVUYWdzO1xuICAgIF90aGlzLmJsYWNrbGlzdER1cmF0aW9uID0gYmxhY2tsaXN0RHVyYXRpb247XG4gICAgX3RoaXMuZW5hYmxlTG93SW5pdGlhbFBsYXlsaXN0ID0gZW5hYmxlTG93SW5pdGlhbFBsYXlsaXN0O1xuXG4gICAgaWYgKF90aGlzLnVzZUN1ZVRhZ3NfKSB7XG4gICAgICBfdGhpcy5jdWVUYWdzVHJhY2tfID0gX3RoaXMudGVjaF8uYWRkVGV4dFRyYWNrKCdtZXRhZGF0YScsICdhZC1jdWVzJyk7XG4gICAgICBfdGhpcy5jdWVUYWdzVHJhY2tfLmluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUgPSAnJztcbiAgICB9XG5cbiAgICBfdGhpcy5yZXF1ZXN0T3B0aW9uc18gPSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzOiBoYW5kbGVNYW5pZmVzdFJlZGlyZWN0cyxcbiAgICAgIHRpbWVvdXQ6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLm1lZGlhVHlwZXNfID0gY3JlYXRlTWVkaWFUeXBlcygpO1xuICAgIF90aGlzLm1lZGlhU291cmNlID0gbmV3IHZpZGVvanMkMS5NZWRpYVNvdXJjZSgpOyAvLyBsb2FkIHRoZSBtZWRpYSBzb3VyY2UgaW50byB0aGUgcGxheWVyXG5cbiAgICBfdGhpcy5tZWRpYVNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdzb3VyY2VvcGVuJywgX3RoaXMuaGFuZGxlU291cmNlT3Blbl8uYmluZChfdGhpcykpO1xuXG4gICAgX3RoaXMuc2Vla2FibGVfID0gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoKTtcblxuICAgIF90aGlzLmhhc1BsYXllZF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIF90aGlzLnN5bmNDb250cm9sbGVyXyA9IG5ldyBTeW5jQ29udHJvbGxlcihvcHRpb25zKTtcbiAgICBfdGhpcy5zZWdtZW50TWV0YWRhdGFUcmFja18gPSB0ZWNoLmFkZFJlbW90ZVRleHRUcmFjayh7XG4gICAgICBraW5kOiAnbWV0YWRhdGEnLFxuICAgICAgbGFiZWw6ICdzZWdtZW50LW1ldGFkYXRhJ1xuICAgIH0sIGZhbHNlKS50cmFjaztcbiAgICBfdGhpcy5kZWNyeXB0ZXJfID0gbmV3IERlY3J5cHRlciQxKCk7XG4gICAgX3RoaXMuaW5iYW5kVGV4dFRyYWNrc18gPSB7fTtcbiAgICB2YXIgc2VnbWVudExvYWRlclNldHRpbmdzID0ge1xuICAgICAgaGxzOiBfdGhpcy5obHNfLFxuICAgICAgbWVkaWFTb3VyY2U6IF90aGlzLm1lZGlhU291cmNlLFxuICAgICAgY3VycmVudFRpbWU6IF90aGlzLnRlY2hfLmN1cnJlbnRUaW1lLmJpbmQoX3RoaXMudGVjaF8pLFxuICAgICAgc2Vla2FibGU6IGZ1bmN0aW9uIHNlZWthYmxlJCQxKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuc2Vla2FibGUoKTtcbiAgICAgIH0sXG4gICAgICBzZWVraW5nOiBmdW5jdGlvbiBzZWVraW5nKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMudGVjaF8uc2Vla2luZygpO1xuICAgICAgfSxcbiAgICAgIGR1cmF0aW9uOiBmdW5jdGlvbiBkdXJhdGlvbiQkMSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm1lZGlhU291cmNlLmR1cmF0aW9uO1xuICAgICAgfSxcbiAgICAgIGhhc1BsYXllZDogZnVuY3Rpb24gaGFzUGxheWVkKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFzUGxheWVkXygpO1xuICAgICAgfSxcbiAgICAgIGdvYWxCdWZmZXJMZW5ndGg6IGZ1bmN0aW9uIGdvYWxCdWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nb2FsQnVmZmVyTGVuZ3RoKCk7XG4gICAgICB9LFxuICAgICAgYmFuZHdpZHRoOiBiYW5kd2lkdGgsXG4gICAgICBzeW5jQ29udHJvbGxlcjogX3RoaXMuc3luY0NvbnRyb2xsZXJfLFxuICAgICAgZGVjcnlwdGVyOiBfdGhpcy5kZWNyeXB0ZXJfLFxuICAgICAgc291cmNlVHlwZTogX3RoaXMuc291cmNlVHlwZV8sXG4gICAgICBpbmJhbmRUZXh0VHJhY2tzOiBfdGhpcy5pbmJhbmRUZXh0VHJhY2tzXyxcbiAgICAgIGNhY2hlRW5jcnlwdGlvbktleXM6IGNhY2hlRW5jcnlwdGlvbktleXNcbiAgICB9O1xuICAgIF90aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXyA9IF90aGlzLnNvdXJjZVR5cGVfID09PSAnZGFzaCcgPyBuZXcgRGFzaFBsYXlsaXN0TG9hZGVyKHVybCwgX3RoaXMuaGxzXywgX3RoaXMucmVxdWVzdE9wdGlvbnNfKSA6IG5ldyBQbGF5bGlzdExvYWRlcih1cmwsIF90aGlzLmhsc18sIF90aGlzLnJlcXVlc3RPcHRpb25zXyk7XG5cbiAgICBfdGhpcy5zZXR1cE1hc3RlclBsYXlsaXN0TG9hZGVyTGlzdGVuZXJzXygpOyAvLyBzZXR1cCBzZWdtZW50IGxvYWRlcnNcbiAgICAvLyBjb21iaW5lZCBhdWRpby92aWRlbyBvciBqdXN0IHZpZGVvIHdoZW4gYWx0ZXJuYXRlIGF1ZGlvIHRyYWNrIGlzIHNlbGVjdGVkXG5cblxuICAgIF90aGlzLm1haW5TZWdtZW50TG9hZGVyXyA9IG5ldyBTZWdtZW50TG9hZGVyKHZpZGVvanMkMS5tZXJnZU9wdGlvbnMoc2VnbWVudExvYWRlclNldHRpbmdzLCB7XG4gICAgICBzZWdtZW50TWV0YWRhdGFUcmFjazogX3RoaXMuc2VnbWVudE1ldGFkYXRhVHJhY2tfLFxuICAgICAgbG9hZGVyVHlwZTogJ21haW4nXG4gICAgfSksIG9wdGlvbnMpOyAvLyBhbHRlcm5hdGUgYXVkaW8gdHJhY2tcblxuICAgIF90aGlzLmF1ZGlvU2VnbWVudExvYWRlcl8gPSBuZXcgU2VnbWVudExvYWRlcih2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHNlZ21lbnRMb2FkZXJTZXR0aW5ncywge1xuICAgICAgbG9hZGVyVHlwZTogJ2F1ZGlvJ1xuICAgIH0pLCBvcHRpb25zKTtcbiAgICBfdGhpcy5zdWJ0aXRsZVNlZ21lbnRMb2FkZXJfID0gbmV3IFZUVFNlZ21lbnRMb2FkZXIodmlkZW9qcyQxLm1lcmdlT3B0aW9ucyhzZWdtZW50TG9hZGVyU2V0dGluZ3MsIHtcbiAgICAgIGxvYWRlclR5cGU6ICd2dHQnXG4gICAgfSksIG9wdGlvbnMpO1xuXG4gICAgX3RoaXMuc2V0dXBTZWdtZW50TG9hZGVyTGlzdGVuZXJzXygpOyAvLyBDcmVhdGUgU2VnbWVudExvYWRlciBzdGF0LWdldHRlcnNcblxuXG4gICAgbG9hZGVyU3RhdHMuZm9yRWFjaChmdW5jdGlvbiAoc3RhdCkge1xuICAgICAgX3RoaXNbc3RhdCArICdfJ10gPSBzdW1Mb2FkZXJTdGF0LmJpbmQoX3RoaXMsIHN0YXQpO1xuICAgIH0pO1xuICAgIF90aGlzLmxvZ2dlcl8gPSBsb2dnZXIoJ01QQycpO1xuXG4gICAgX3RoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLmxvYWQoKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgb24gdGhlIG1hc3RlciBwbGF5bGlzdCBsb2FkZXIuIEEgaGVscGVyXG4gICAqIGZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Rpb24gdGltZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBjcmVhdGVDbGFzcyhNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXIsIFt7XG4gICAga2V5OiAnc2V0dXBNYXN0ZXJQbGF5bGlzdExvYWRlckxpc3RlbmVyc18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXR1cE1hc3RlclBsYXlsaXN0TG9hZGVyTGlzdGVuZXJzXygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5vbignbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZWRpYSA9IF90aGlzMi5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKTtcblxuICAgICAgICB2YXIgcmVxdWVzdFRpbWVvdXQgPSBtZWRpYS50YXJnZXREdXJhdGlvbiAqIDEuNSAqIDEwMDA7IC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgYXZhaWxhYmxlIHBsYXlsaXN0cywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyB0aW1lb3V0IHRoZSByZXF1ZXN0LlxuXG4gICAgICAgIGlmIChpc0xvd2VzdEVuYWJsZWRSZW5kaXRpb24oX3RoaXMyLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tYXN0ZXIsIF90aGlzMi5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKSkpIHtcbiAgICAgICAgICBfdGhpczIucmVxdWVzdE9wdGlvbnNfLnRpbWVvdXQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5yZXF1ZXN0T3B0aW9uc18udGltZW91dCA9IHJlcXVlc3RUaW1lb3V0O1xuICAgICAgICB9IC8vIGlmIHRoaXMgaXNuJ3QgYSBsaXZlIHZpZGVvIGFuZCBwcmVsb2FkIHBlcm1pdHMsIHN0YXJ0XG4gICAgICAgIC8vIGRvd25sb2FkaW5nIHNlZ21lbnRzXG5cblxuICAgICAgICBpZiAobWVkaWEuZW5kTGlzdCAmJiBfdGhpczIudGVjaF8ucHJlbG9hZCgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICBfdGhpczIubWFpblNlZ21lbnRMb2FkZXJfLnBsYXlsaXN0KG1lZGlhLCBfdGhpczIucmVxdWVzdE9wdGlvbnNfKTtcblxuICAgICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0dXBNZWRpYUdyb3Vwcyh7XG4gICAgICAgICAgc291cmNlVHlwZTogX3RoaXMyLnNvdXJjZVR5cGVfLFxuICAgICAgICAgIHNlZ21lbnRMb2FkZXJzOiB7XG4gICAgICAgICAgICBBVURJTzogX3RoaXMyLmF1ZGlvU2VnbWVudExvYWRlcl8sXG4gICAgICAgICAgICBTVUJUSVRMRVM6IF90aGlzMi5zdWJ0aXRsZVNlZ21lbnRMb2FkZXJfLFxuICAgICAgICAgICAgbWFpbjogX3RoaXMyLm1haW5TZWdtZW50TG9hZGVyX1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVjaDogX3RoaXMyLnRlY2hfLFxuICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiBfdGhpczIucmVxdWVzdE9wdGlvbnNfLFxuICAgICAgICAgIG1hc3RlclBsYXlsaXN0TG9hZGVyOiBfdGhpczIubWFzdGVyUGxheWxpc3RMb2FkZXJfLFxuICAgICAgICAgIGhsczogX3RoaXMyLmhsc18sXG4gICAgICAgICAgbWFzdGVyOiBfdGhpczIubWFzdGVyKCksXG4gICAgICAgICAgbWVkaWFUeXBlczogX3RoaXMyLm1lZGlhVHlwZXNfLFxuICAgICAgICAgIGJsYWNrbGlzdEN1cnJlbnRQbGF5bGlzdDogX3RoaXMyLmJsYWNrbGlzdEN1cnJlbnRQbGF5bGlzdC5iaW5kKF90aGlzMilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMyLnRyaWdnZXJQcmVzZW5jZVVzYWdlXyhfdGhpczIubWFzdGVyKCksIG1lZGlhKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIF90aGlzMi5zZXR1cFNvdXJjZUJ1ZmZlcnNfKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ0ZhaWxlZCB0byBjcmVhdGUgU291cmNlQnVmZmVycycsIGUpO1xuICAgICAgICAgIHJldHVybiBfdGhpczIubWVkaWFTb3VyY2UuZW5kT2ZTdHJlYW0oJ2RlY29kZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLnNldHVwRmlyc3RQbGF5KCk7XG5cbiAgICAgICAgaWYgKCFfdGhpczIubWVkaWFUeXBlc18uQVVESU8uYWN0aXZlUGxheWxpc3RMb2FkZXIgfHwgX3RoaXMyLm1lZGlhVHlwZXNfLkFVRElPLmFjdGl2ZVBsYXlsaXN0TG9hZGVyLm1lZGlhKCkpIHtcbiAgICAgICAgICBfdGhpczIudHJpZ2dlcignc2VsZWN0ZWRpbml0aWFsbWVkaWEnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBtdXN0IHdhaXQgZm9yIHRoZSBhY3RpdmUgYXVkaW8gcGxheWxpc3QgbG9hZGVyIHRvXG4gICAgICAgICAgLy8gZmluaXNoIHNldHRpbmcgdXAgYmVmb3JlIHRyaWdnZXJpbmcgdGhpcyBldmVudCBzbyB0aGVcbiAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgQVBJIGFuZCBFTUUgc2V0dXAgaXMgY29ycmVjdFxuICAgICAgICAgIF90aGlzMi5tZWRpYVR5cGVzXy5BVURJTy5hY3RpdmVQbGF5bGlzdExvYWRlci5vbmUoJ2xvYWRlZG1ldGFkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnRyaWdnZXIoJ3NlbGVjdGVkaW5pdGlhbG1lZGlhJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ub24oJ2xvYWRlZHBsYXlsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdXBkYXRlZFBsYXlsaXN0ID0gX3RoaXMyLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYSgpO1xuXG4gICAgICAgIGlmICghdXBkYXRlZFBsYXlsaXN0KSB7XG4gICAgICAgICAgLy8gYmxhY2tsaXN0IGFueSB2YXJpYW50cyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSBzZWxlY3RpbmdcbiAgICAgICAgICAvLyBhbiBpbml0aWFsIG1lZGlhIGFzIHRoZSBwbGF5bGlzdCBzZWxlY3RvcnMgZG8gbm90IGNvbnNpZGVyIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgICAgIF90aGlzMi5leGNsdWRlVW5zdXBwb3J0ZWRWYXJpYW50c18oKTtcblxuICAgICAgICAgIHZhciBzZWxlY3RlZE1lZGlhID0gdm9pZCAwO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5lbmFibGVMb3dJbml0aWFsUGxheWxpc3QpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWEgPSBfdGhpczIuc2VsZWN0SW5pdGlhbFBsYXlsaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE1lZGlhKSB7XG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhID0gX3RoaXMyLnNlbGVjdFBsYXlsaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMyLmluaXRpYWxNZWRpYV8gPSBzZWxlY3RlZE1lZGlhO1xuXG4gICAgICAgICAgX3RoaXMyLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYShfdGhpczIuaW5pdGlhbE1lZGlhXyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3RoaXMyLnVzZUN1ZVRhZ3NfKSB7XG4gICAgICAgICAgX3RoaXMyLnVwZGF0ZUFkQ3Vlc18odXBkYXRlZFBsYXlsaXN0KTtcbiAgICAgICAgfSAvLyBUT0RPOiBDcmVhdGUgYSBuZXcgZXZlbnQgb24gdGhlIFBsYXlsaXN0TG9hZGVyIHRoYXQgc2lnbmFsc1xuICAgICAgICAvLyB0aGF0IHRoZSBzZWdtZW50cyBoYXZlIGNoYW5nZWQgaW4gc29tZSB3YXkgYW5kIHVzZSB0aGF0IHRvXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgU2VnbWVudExvYWRlciBpbnN0ZWFkIG9mIGRvaW5nIGl0IHR3aWNlIGhlcmUgYW5kXG4gICAgICAgIC8vIG9uIGBtZWRpYWNoYW5nZWBcblxuXG4gICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ucGxheWxpc3QodXBkYXRlZFBsYXlsaXN0LCBfdGhpczIucmVxdWVzdE9wdGlvbnNfKTtcblxuICAgICAgICBfdGhpczIudXBkYXRlRHVyYXRpb24oKTsgLy8gSWYgdGhlIHBsYXllciBpc24ndCBwYXVzZWQsIGVuc3VyZSB0aGF0IHRoZSBzZWdtZW50IGxvYWRlciBpcyBydW5uaW5nLFxuICAgICAgICAvLyBhcyBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0IHdhcyB0ZW1wb3JhcmlseSBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yXG4gICAgICAgIC8vIGEgcGxheWxpc3QgKGUuZy4sIGluIGNhc2UgdGhlIHBsYXlsaXN0IGVycm9yZWQgYW5kIHdlIHJlLXJlcXVlc3RlZCBpdCkuXG5cblxuICAgICAgICBpZiAoIV90aGlzMi50ZWNoXy5wYXVzZWQoKSkge1xuICAgICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ubG9hZCgpO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5hdWRpb1NlZ21lbnRMb2FkZXJfKSB7XG4gICAgICAgICAgICBfdGhpczIuYXVkaW9TZWdtZW50TG9hZGVyXy5sb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1cGRhdGVkUGxheWxpc3QuZW5kTGlzdCkge1xuICAgICAgICAgIHZhciBhZGRTZWVrYWJsZVJhbmdlID0gZnVuY3Rpb24gYWRkU2Vla2FibGVSYW5nZSgpIHtcbiAgICAgICAgICAgIHZhciBzZWVrYWJsZSQkMSA9IF90aGlzMi5zZWVrYWJsZSgpO1xuXG4gICAgICAgICAgICBpZiAoc2Vla2FibGUkJDEubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5tZWRpYVNvdXJjZS5hZGRTZWVrYWJsZVJhbmdlXyhzZWVrYWJsZSQkMS5zdGFydCgwKSwgc2Vla2FibGUkJDEuZW5kKDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5kdXJhdGlvbigpICE9PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgdmFyIG9uRHVyYXRpb25jaGFuZ2UgPSBmdW5jdGlvbiBvbkR1cmF0aW9uY2hhbmdlKCkge1xuICAgICAgICAgICAgICBpZiAoX3RoaXMyLmR1cmF0aW9uKCkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgYWRkU2Vla2FibGVSYW5nZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF90aGlzMi50ZWNoXy5vbmUoJ2R1cmF0aW9uY2hhbmdlJywgb25EdXJhdGlvbmNoYW5nZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIF90aGlzMi50ZWNoXy5vbmUoJ2R1cmF0aW9uY2hhbmdlJywgb25EdXJhdGlvbmNoYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZFNlZWthYmxlUmFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuYmxhY2tsaXN0Q3VycmVudFBsYXlsaXN0KF90aGlzMi5tYXN0ZXJQbGF5bGlzdExvYWRlcl8uZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5vbignbWVkaWFjaGFuZ2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLm1haW5TZWdtZW50TG9hZGVyXy5hYm9ydCgpO1xuXG4gICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ucGF1c2UoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ub24oJ21lZGlhY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbWVkaWEgPSBfdGhpczIubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCk7XG5cbiAgICAgICAgdmFyIHJlcXVlc3RUaW1lb3V0ID0gbWVkaWEudGFyZ2V0RHVyYXRpb24gKiAxLjUgKiAxMDAwOyAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGF2YWlsYWJsZSBwbGF5bGlzdHMsIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gdGltZW91dCB0aGUgcmVxdWVzdC5cblxuICAgICAgICBpZiAoaXNMb3dlc3RFbmFibGVkUmVuZGl0aW9uKF90aGlzMi5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWFzdGVyLCBfdGhpczIubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCkpKSB7XG4gICAgICAgICAgX3RoaXMyLnJlcXVlc3RPcHRpb25zXy50aW1lb3V0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIucmVxdWVzdE9wdGlvbnNfLnRpbWVvdXQgPSByZXF1ZXN0VGltZW91dDtcbiAgICAgICAgfSAvLyBUT0RPOiBDcmVhdGUgYSBuZXcgZXZlbnQgb24gdGhlIFBsYXlsaXN0TG9hZGVyIHRoYXQgc2lnbmFsc1xuICAgICAgICAvLyB0aGF0IHRoZSBzZWdtZW50cyBoYXZlIGNoYW5nZWQgaW4gc29tZSB3YXkgYW5kIHVzZSB0aGF0IHRvXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgU2VnbWVudExvYWRlciBpbnN0ZWFkIG9mIGRvaW5nIGl0IHR3aWNlIGhlcmUgYW5kXG4gICAgICAgIC8vIG9uIGBsb2FkZWRwbGF5bGlzdGBcblxuXG4gICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ucGxheWxpc3QobWVkaWEsIF90aGlzMi5yZXF1ZXN0T3B0aW9uc18pO1xuXG4gICAgICAgIF90aGlzMi5tYWluU2VnbWVudExvYWRlcl8ubG9hZCgpO1xuXG4gICAgICAgIF90aGlzMi50ZWNoXy50cmlnZ2VyKHtcbiAgICAgICAgICB0eXBlOiAnbWVkaWFjaGFuZ2UnLFxuICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm9uKCdwbGF5bGlzdHVuY2hhbmdlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRQbGF5bGlzdCA9IF90aGlzMi5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKTtcblxuICAgICAgICB2YXIgcGxheWxpc3RPdXRkYXRlZCA9IF90aGlzMi5zdHVja0F0UGxheWxpc3RFbmRfKHVwZGF0ZWRQbGF5bGlzdCk7XG5cbiAgICAgICAgaWYgKHBsYXlsaXN0T3V0ZGF0ZWQpIHtcbiAgICAgICAgICAvLyBQbGF5bGlzdCBoYXMgc3RvcHBlZCB1cGRhdGluZyBhbmQgd2UncmUgc3R1Y2sgYXQgaXRzIGVuZC4gVHJ5IHRvXG4gICAgICAgICAgLy8gYmxhY2tsaXN0IGl0IGFuZCBzd2l0Y2ggdG8gYW5vdGhlciBwbGF5bGlzdCBpbiB0aGUgaG9wZSB0aGF0IHRoYXRcbiAgICAgICAgICAvLyBvbmUgaXMgdXBkYXRpbmcgKGFuZCBnaXZlIHRoZSBwbGF5ZXIgYSBjaGFuY2UgdG8gcmUtYWRqdXN0IHRvIHRoZVxuICAgICAgICAgIC8vIHNhZmUgbGl2ZSBwb2ludCkuXG4gICAgICAgICAgX3RoaXMyLmJsYWNrbGlzdEN1cnJlbnRQbGF5bGlzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnUGxheWxpc3Qgbm8gbG9uZ2VyIHVwZGF0aW5nLidcbiAgICAgICAgICB9KTsgLy8gdXNlZnVsIGZvciBtb25pdG9yaW5nIFFvU1xuXG5cbiAgICAgICAgICBfdGhpczIudGVjaF8udHJpZ2dlcigncGxheWxpc3RzdHVjaycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm9uKCdyZW5kaXRpb25kaXNhYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy1yZW5kaXRpb24tZGlzYWJsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5vbigncmVuZGl0aW9uZW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy1yZW5kaXRpb24tZW5hYmxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRyaWdnZXJyaW5nIHByZXNlbmNlIHVzYWdlIGV2ZW50cyBvbmNlIHBlciBzb3VyY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RyaWdnZXJQcmVzZW5jZVVzYWdlXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyaWdnZXJQcmVzZW5jZVVzYWdlXyhtYXN0ZXIsIG1lZGlhKSB7XG4gICAgICB2YXIgbWVkaWFHcm91cHMgPSBtYXN0ZXIubWVkaWFHcm91cHMgfHwge307XG4gICAgICB2YXIgZGVmYXVsdERlbXV4ZWQgPSB0cnVlO1xuICAgICAgdmFyIGF1ZGlvR3JvdXBLZXlzID0gT2JqZWN0LmtleXMobWVkaWFHcm91cHMuQVVESU8pO1xuXG4gICAgICBmb3IgKHZhciBtZWRpYUdyb3VwIGluIG1lZGlhR3JvdXBzLkFVRElPKSB7XG4gICAgICAgIGZvciAodmFyIGxhYmVsIGluIG1lZGlhR3JvdXBzLkFVRElPW21lZGlhR3JvdXBdKSB7XG4gICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBtZWRpYUdyb3Vwcy5BVURJT1ttZWRpYUdyb3VwXVtsYWJlbF07XG5cbiAgICAgICAgICBpZiAoIXByb3BlcnRpZXMudXJpKSB7XG4gICAgICAgICAgICBkZWZhdWx0RGVtdXhlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdERlbXV4ZWQpIHtcbiAgICAgICAgdGhpcy50ZWNoXy50cmlnZ2VyKHtcbiAgICAgICAgICB0eXBlOiAndXNhZ2UnLFxuICAgICAgICAgIG5hbWU6ICdobHMtZGVtdXhlZCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhtZWRpYUdyb3Vwcy5TVUJUSVRMRVMpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy13ZWJ2dHQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoSGxzLlBsYXlsaXN0LmlzQWVzKG1lZGlhKSkge1xuICAgICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy1hZXMnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoSGxzLlBsYXlsaXN0LmlzRm1wNChtZWRpYSkpIHtcbiAgICAgICAgdGhpcy50ZWNoXy50cmlnZ2VyKHtcbiAgICAgICAgICB0eXBlOiAndXNhZ2UnLFxuICAgICAgICAgIG5hbWU6ICdobHMtZm1wNCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdWRpb0dyb3VwS2V5cy5sZW5ndGggJiYgT2JqZWN0LmtleXMobWVkaWFHcm91cHMuQVVESU9bYXVkaW9Hcm91cEtleXNbMF1dKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgICBuYW1lOiAnaGxzLWFsdGVybmF0ZS1hdWRpbydcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnVzZUN1ZVRhZ3NfKSB7XG4gICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgICBuYW1lOiAnaGxzLXBsYXlsaXN0LWN1ZS10YWdzJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNlZ21lbnQgbG9hZGVycy4gQSBoZWxwZXIgZnVuY3Rpb25cbiAgICAgKiBmb3IgY29uc3RydWN0aW9uIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXR1cFNlZ21lbnRMb2FkZXJMaXN0ZW5lcnNfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0dXBTZWdtZW50TG9hZGVyTGlzdGVuZXJzXygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5vbignYmFuZHdpZHRodXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dFBsYXlsaXN0ID0gX3RoaXMzLnNlbGVjdFBsYXlsaXN0KCk7XG5cbiAgICAgICAgdmFyIGN1cnJlbnRQbGF5bGlzdCA9IF90aGlzMy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKTtcblxuICAgICAgICB2YXIgYnVmZmVyZWQgPSBfdGhpczMudGVjaF8uYnVmZmVyZWQoKTtcblxuICAgICAgICB2YXIgZm9yd2FyZEJ1ZmZlciA9IGJ1ZmZlcmVkLmxlbmd0aCA/IGJ1ZmZlcmVkLmVuZChidWZmZXJlZC5sZW5ndGggLSAxKSAtIF90aGlzMy50ZWNoXy5jdXJyZW50VGltZSgpIDogMDtcblxuICAgICAgICB2YXIgYnVmZmVyTG93V2F0ZXJMaW5lID0gX3RoaXMzLmJ1ZmZlckxvd1dhdGVyTGluZSgpOyAvLyBJZiB0aGUgcGxheWxpc3QgaXMgbGl2ZSwgdGhlbiB3ZSB3YW50IHRvIG5vdCB0YWtlIGxvdyB3YXRlciBsaW5lIGludG8gYWNjb3VudC5cbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIGluIExJVkUsIHRoZSBwbGF5ZXIgcGxheXMgMyBzZWdtZW50cyBmcm9tIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgIC8vIHBsYXlsaXN0LCBhbmQgaWYgYEJVRkZFUl9MT1dfV0FURVJfTElORWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBkdXJhdGlvbiBhdmFpbGJsZVxuICAgICAgICAvLyBpbiB0aG9zZSBzZWdtZW50cywgYSB2aWV3ZXIgd2lsbCBuZXZlciBleHBlcmllbmNlIGEgcmVuZGl0aW9uIHVwc3dpdGNoLlxuXG5cbiAgICAgICAgaWYgKCFjdXJyZW50UGxheWxpc3QuZW5kTGlzdCB8fCAvLyBGb3IgdGhlIHNhbWUgcmVhc29uIGFzIExJVkUsIHdlIGlnbm9yZSB0aGUgbG93IHdhdGVyIGxpbmUgd2hlbiB0aGUgVk9EXG4gICAgICAgIC8vIGR1cmF0aW9uIGlzIGJlbG93IHRoZSBtYXggcG90ZW50aWFsIGxvdyB3YXRlciBsaW5lXG4gICAgICAgIF90aGlzMy5kdXJhdGlvbigpIDwgQ29uZmlnLk1BWF9CVUZGRVJfTE9XX1dBVEVSX0xJTkUgfHwgLy8gd2Ugd2FudCB0byBzd2l0Y2ggZG93biB0byBsb3dlciByZXNvbHV0aW9ucyBxdWlja2x5IHRvIGNvbnRpbnVlIHBsYXliYWNrLCBidXRcbiAgICAgICAgbmV4dFBsYXlsaXN0LmF0dHJpYnV0ZXMuQkFORFdJRFRIIDwgY3VycmVudFBsYXlsaXN0LmF0dHJpYnV0ZXMuQkFORFdJRFRIIHx8IC8vIGVuc3VyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyIGJlZm9yZSB3ZSBzd2l0Y2ggdXAgdG8gcHJldmVudCB1cyBydW5uaW5nIG91dCBvZlxuICAgICAgICAvLyBidWZmZXIgd2hpbGUgbG9hZGluZyBhIGhpZ2hlciByZW5kaXRpb24uXG4gICAgICAgIGZvcndhcmRCdWZmZXIgPj0gYnVmZmVyTG93V2F0ZXJMaW5lKSB7XG4gICAgICAgICAgX3RoaXMzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYShuZXh0UGxheWxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMzLnRlY2hfLnRyaWdnZXIoJ2JhbmR3aWR0aHVwZGF0ZScpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5vbigncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy50cmlnZ2VyKCdwcm9ncmVzcycpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5ibGFja2xpc3RDdXJyZW50UGxheWxpc3QoX3RoaXMzLm1haW5TZWdtZW50TG9hZGVyXy5lcnJvcigpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ub24oJ3N5bmNpbmZvdXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMub25TeW5jSW5mb1VwZGF0ZV8oKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ub24oJ3RpbWVzdGFtcG9mZnNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgbmFtZTogJ2hscy10aW1lc3RhbXAtb2Zmc2V0J1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hdWRpb1NlZ21lbnRMb2FkZXJfLm9uKCdzeW5jaW5mb3VwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLm9uU3luY0luZm9VcGRhdGVfKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFpblNlZ21lbnRMb2FkZXJfLm9uKCdlbmRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLm9uRW5kT2ZTdHJlYW0oKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ub24oJ2Vhcmx5YWJvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5ibGFja2xpc3RDdXJyZW50UGxheWxpc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdBYm9ydGVkIGVhcmx5IGJlY2F1c2UgdGhlcmUgaXNuXFwndCBlbm91Z2ggYmFuZHdpZHRoIHRvIGNvbXBsZXRlIHRoZSAnICsgJ3JlcXVlc3Qgd2l0aG91dCByZWJ1ZmZlcmluZy4nXG4gICAgICAgIH0sIEFCT1JUX0VBUkxZX0JMQUNLTElTVF9TRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ub24oJ3Jlc2V0ZXZlcnl0aGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgcGxheWluZyBhbiBNVFMgc3RyZWFtLCBhIHZpZGVvanMuTWVkaWFTb3VyY2UgaXMgbGlzdGVuaW5nIGZvclxuICAgICAgICAvLyBobHMtcmVzZXQgdG8gcmVzZXQgY2FwdGlvbiBwYXJzaW5nIHN0YXRlIGluIHRoZSB0cmFuc211eGVyXG4gICAgICAgIF90aGlzMy50ZWNoXy50cmlnZ2VyKCdobHMtcmVzZXQnKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ub24oJ3NlZ21lbnR0aW1lbWFwcGluZycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAvLyBJZiBwbGF5aW5nIGFuIE1UUyBzdHJlYW0gaW4gaHRtbCwgYSB2aWRlb2pzLk1lZGlhU291cmNlIGlzIGxpc3RlbmluZyBmb3JcbiAgICAgICAgLy8gaGxzLXNlZ21lbnQtdGltZS1tYXBwaW5nIHVwZGF0ZSBpdHMgaW50ZXJuYWwgbWFwcGluZyBvZiBzdHJlYW0gdG8gZGlzcGxheSB0aW1lXG4gICAgICAgIF90aGlzMy50ZWNoXy50cmlnZ2VyKHtcbiAgICAgICAgICB0eXBlOiAnaGxzLXNlZ21lbnQtdGltZS1tYXBwaW5nJyxcbiAgICAgICAgICBtYXBwaW5nOiBldmVudC5tYXBwaW5nXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmF1ZGlvU2VnbWVudExvYWRlcl8ub24oJ2VuZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMub25FbmRPZlN0cmVhbSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnbWVkaWFTZWNvbmRzTG9hZGVkXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1lZGlhU2Vjb25kc0xvYWRlZF8oKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5hdWRpb1NlZ21lbnRMb2FkZXJfLm1lZGlhU2Vjb25kc0xvYWRlZCArIHRoaXMubWFpblNlZ21lbnRMb2FkZXJfLm1lZGlhU2Vjb25kc0xvYWRlZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbG9hZCBvbiBvdXIgU2VnbWVudExvYWRlcnNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5sb2FkKCk7XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhVHlwZXNfLkFVRElPLmFjdGl2ZVBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAgIHRoaXMuYXVkaW9TZWdtZW50TG9hZGVyXy5sb2FkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhVHlwZXNfLlNVQlRJVExFUy5hY3RpdmVQbGF5bGlzdExvYWRlcikge1xuICAgICAgICB0aGlzLnN1YnRpdGxlU2VnbWVudExvYWRlcl8ubG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZS10dW5lIHBsYXliYWNrIHF1YWxpdHkgbGV2ZWwgZm9yIHRoZSBjdXJyZW50IHBsYXllclxuICAgICAqIGNvbmRpdGlvbnMgd2l0aG91dCBwZXJmb3JtaW5nIGRlc3RydWN0aXZlIGFjdGlvbnMsIGxpa2VcbiAgICAgKiByZW1vdmluZyBhbHJlYWR5IGJ1ZmZlcmVkIGNvbnRlbnRcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Ntb290aFF1YWxpdHlDaGFuZ2VfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc21vb3RoUXVhbGl0eUNoYW5nZV8oKSB7XG4gICAgICB2YXIgbWVkaWEgPSB0aGlzLnNlbGVjdFBsYXlsaXN0KCk7XG5cbiAgICAgIGlmIChtZWRpYSAhPT0gdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKSkge1xuICAgICAgICB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYShtZWRpYSk7XG4gICAgICAgIHRoaXMubWFpblNlZ21lbnRMb2FkZXJfLnJlc2V0TG9hZGVyKCk7IC8vIGRvbid0IG5lZWQgdG8gcmVzZXQgYXVkaW8gYXMgaXQgaXMgcmVzZXQgd2hlbiBtZWRpYSBjaGFuZ2VzXG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlLXR1bmUgcGxheWJhY2sgcXVhbGl0eSBsZXZlbCBmb3IgdGhlIGN1cnJlbnQgcGxheWVyXG4gICAgICogY29uZGl0aW9ucy4gVGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIGRlc3RydWN0aXZlIGFjdGlvbnMgbGlrZSByZW1vdmluZ1xuICAgICAqIGFscmVhZHkgYnVmZmVyZWQgY29udGVudCBpbiBvcmRlciB0byByZWFkanVzdCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgICAqIHBsYXlsaXN0IHF1aWNrbHkuIFRoaXMgaXMgZ29vZCBmb3IgbWFudWFsIHF1YWxpdHkgY2hhbmdlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZmFzdFF1YWxpdHlDaGFuZ2VfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmFzdFF1YWxpdHlDaGFuZ2VfKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBtZWRpYSA9IHRoaXMuc2VsZWN0UGxheWxpc3QoKTtcblxuICAgICAgaWYgKG1lZGlhID09PSB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEobWVkaWEpOyAvLyBEZWxldGUgYWxsIGJ1ZmZlcmVkIGRhdGEgdG8gYWxsb3cgYW4gaW1tZWRpYXRlIHF1YWxpdHkgc3dpdGNoLCB0aGVuIHNlZWsgdG8gZ2l2ZVxuICAgICAgLy8gdGhlIGJyb3dzZXIgYSBraWNrIHRvIHJlbW92ZSBhbnkgY2FjaGVkIGZyYW1lcyBmcm9tIHRoZSBwcmV2aW91cyByZW5kdGlvbiAoLjA0IHNlY29uZHNcbiAgICAgIC8vIGFoZWFkIGlzIHJvdWdobHkgdGhlIG1pbmltdW0gdGhhdCB3aWxsIGFjY29tcGxpc2ggdGhpcyBhY3Jvc3MgYSB2YXJpZXR5IG9mIGNvbnRlbnRcbiAgICAgIC8vIGluIElFIGFuZCBFZGdlLCBidXQgc2Vla2luZyBpbiBwbGFjZSBpcyBzdWZmaWNpZW50IG9uIGFsbCBvdGhlciBicm93c2VycylcbiAgICAgIC8vIEVkZ2UvSUUgYnVnOiBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xNDYwMDM3NS9cbiAgICAgIC8vIENocm9tZSBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY1MTkwNFxuXG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5yZXNldEV2ZXJ5dGhpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIG5vdCBhIHR5cGljYWwgc2Vlaywgd2UgYXZvaWQgdGhlIHNlZWtUbyBtZXRob2Qgd2hpY2ggY2FuIGNhdXNlIHNlZ21lbnRzXG4gICAgICAgIC8vIGZyb20gdGhlIHByZXZpb3VzbHkgZW5hYmxlZCByZW5kaXRpb24gdG8gbG9hZCBiZWZvcmUgdGhlIG5ldyBwbGF5bGlzdCBoYXMgZmluaXNoZWQgbG9hZGluZ1xuICAgICAgICBpZiAodmlkZW9qcyQxLmJyb3dzZXIuSUVfVkVSU0lPTiB8fCB2aWRlb2pzJDEuYnJvd3Nlci5JU19FREdFKSB7XG4gICAgICAgICAgX3RoaXM0LnRlY2hfLnNldEN1cnJlbnRUaW1lKF90aGlzNC50ZWNoXy5jdXJyZW50VGltZSgpICsgMC4wNCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM0LnRlY2hfLnNldEN1cnJlbnRUaW1lKF90aGlzNC50ZWNoXy5jdXJyZW50VGltZSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIGRvbid0IG5lZWQgdG8gcmVzZXQgYXVkaW8gYXMgaXQgaXMgcmVzZXQgd2hlbiBtZWRpYSBjaGFuZ2VzXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJlZ2luIHBsYXliYWNrLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwbGF5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIGlmICh0aGlzLnNldHVwRmlyc3RQbGF5KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50ZWNoXy5lbmRlZCgpKSB7XG4gICAgICAgIHRoaXMuc2Vla1RvXygwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzUGxheWVkXygpKSB7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2Vla2FibGUkJDEgPSB0aGlzLnRlY2hfLnNlZWthYmxlKCk7IC8vIGlmIHRoZSB2aWV3ZXIgaGFzIHBhdXNlZCBhbmQgd2UgZmVsbCBvdXQgb2YgdGhlIGxpdmUgd2luZG93LFxuICAgICAgLy8gc2VlayBmb3J3YXJkIHRvIHRoZSBsaXZlIHBvaW50XG5cbiAgICAgIGlmICh0aGlzLnRlY2hfLmR1cmF0aW9uKCkgPT09IEluZmluaXR5KSB7XG4gICAgICAgIGlmICh0aGlzLnRlY2hfLmN1cnJlbnRUaW1lKCkgPCBzZWVrYWJsZSQkMS5zdGFydCgwKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlZWtUb18oc2Vla2FibGUkJDEuZW5kKHNlZWthYmxlJCQxLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWVrIHRvIHRoZSBsYXRlc3QgbWVkaWEgcG9zaXRpb24gaWYgdGhpcyBpcyBhIGxpdmUgdmlkZW8gYW5kIHRoZVxuICAgICAqIHBsYXllciBhbmQgdmlkZW8gYXJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NldHVwRmlyc3RQbGF5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0dXBGaXJzdFBsYXkoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIG1lZGlhID0gdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEoKTsgLy8gQ2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIGJlZ2luIGJ1ZmZlcmluZyBmb3IgdGhlIGZpcnN0IGNhbGwgdG8gcGxheVxuICAgICAgLy8gIElmIDEpIHRoZXJlIGlzIG5vIGFjdGl2ZSBtZWRpYVxuICAgICAgLy8gICAgIDIpIHRoZSBwbGF5ZXIgaXMgcGF1c2VkXG4gICAgICAvLyAgICAgMykgdGhlIGZpcnN0IHBsYXkgaGFzIGFscmVhZHkgYmVlbiBzZXR1cFxuICAgICAgLy8gdGhlbiBleGl0IGVhcmx5XG5cbiAgICAgIGlmICghbWVkaWEgfHwgdGhpcy50ZWNoXy5wYXVzZWQoKSB8fCB0aGlzLmhhc1BsYXllZF8oKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHdoZW4gdGhlIHZpZGVvIGlzIGEgbGl2ZSBzdHJlYW1cblxuXG4gICAgICBpZiAoIW1lZGlhLmVuZExpc3QpIHtcbiAgICAgICAgdmFyIHNlZWthYmxlJCQxID0gdGhpcy5zZWVrYWJsZSgpO1xuXG4gICAgICAgIGlmICghc2Vla2FibGUkJDEubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gd2l0aG91dCBhIHNlZWthYmxlIHJhbmdlLCB0aGUgcGxheWVyIGNhbm5vdCBzZWVrIHRvIGJlZ2luIGJ1ZmZlcmluZyBhdCB0aGUgbGl2ZVxuICAgICAgICAgIC8vIHBvaW50XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZGVvanMkMS5icm93c2VyLklFX1ZFUlNJT04gJiYgdGhpcy50ZWNoXy5yZWFkeVN0YXRlKCkgPT09IDApIHtcbiAgICAgICAgICAvLyBJRTExIHRocm93cyBhbiBJbnZhbGlkU3RhdGVFcnJvciBpZiB5b3UgdHJ5IHRvIHNldCBjdXJyZW50VGltZSB3aGlsZSB0aGVcbiAgICAgICAgICAvLyByZWFkeVN0YXRlIGlzIDAsIHNvIGl0IG11c3QgYmUgZGVsYXllZCB1bnRpbCB0aGUgdGVjaCBmaXJlcyBsb2FkZWRtZXRhZGF0YS5cbiAgICAgICAgICB0aGlzLnRlY2hfLm9uZSgnbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczUudHJpZ2dlcignZmlyc3RwbGF5Jyk7XG5cbiAgICAgICAgICAgIF90aGlzNS5zZWVrVG9fKHNlZWthYmxlJCQxLmVuZCgwKSk7XG5cbiAgICAgICAgICAgIF90aGlzNS5oYXNQbGF5ZWRfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IC8vIHRyaWdnZXIgZmlyc3RwbGF5IHRvIGluZm9ybSB0aGUgc291cmNlIGhhbmRsZXIgdG8gaWdub3JlIHRoZSBuZXh0IHNlZWsgZXZlbnRcblxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignZmlyc3RwbGF5Jyk7IC8vIHNlZWsgdG8gdGhlIGxpdmUgcG9pbnRcblxuICAgICAgICB0aGlzLnNlZWtUb18oc2Vla2FibGUkJDEuZW5kKDApKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNQbGF5ZWRfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07IC8vIHdlIGNhbiBiZWdpbiBsb2FkaW5nIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgcmVhZHlcblxuXG4gICAgICB0aGlzLmxvYWQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBoYW5kbGUgdGhlIHNvdXJjZW9wZW4gZXZlbnQgb24gdGhlIE1lZGlhU291cmNlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVTb3VyY2VPcGVuXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVNvdXJjZU9wZW5fKCkge1xuICAgICAgLy8gT25seSBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgc291cmNlIGJ1ZmZlciBpZiBub25lIGFscmVhZHkgZXhpc3QuXG4gICAgICAvLyBoYW5kbGVTb3VyY2VPcGVuIGlzIGFsc28gY2FsbGVkIHdoZW4gd2UgYXJlIFwicmUtb3BlbmluZ1wiIGEgc291cmNlIGJ1ZmZlclxuICAgICAgLy8gYWZ0ZXIgYGVuZE9mU3RyZWFtYCBoYXMgYmVlbiBjYWxsZWQgKGluIHJlc3BvbnNlIHRvIGEgc2VlayBmb3IgaW5zdGFuY2UpXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNldHVwU291cmNlQnVmZmVyc18oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdGYWlsZWQgdG8gY3JlYXRlIFNvdXJjZSBCdWZmZXJzJywgZSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1lZGlhU291cmNlLmVuZE9mU3RyZWFtKCdkZWNvZGUnKTtcbiAgICAgIH0gLy8gaWYgYXV0b3BsYXkgaXMgZW5hYmxlZCwgYmVnaW4gcGxheWJhY2suIFRoaXMgaXMgZHVwbGljYXRpdmUgb2ZcbiAgICAgIC8vIGNvZGUgaW4gdmlkZW8uanMgYnV0IGlzIHJlcXVpcmVkIGJlY2F1c2UgcGxheSgpIG11c3QgYmUgaW52b2tlZFxuICAgICAgLy8gKmFmdGVyKiB0aGUgbWVkaWEgc291cmNlIGhhcyBvcGVuZWQuXG5cblxuICAgICAgaWYgKHRoaXMudGVjaF8uYXV0b3BsYXkoKSkge1xuICAgICAgICB2YXIgcGxheVByb21pc2UgPSB0aGlzLnRlY2hfLnBsYXkoKTsgLy8gQ2F0Y2gvc2lsZW5jZSBlcnJvciB3aGVuIGEgcGF1c2UgaW50ZXJydXB0cyBhIHBsYXkgcmVxdWVzdFxuICAgICAgICAvLyBvbiBicm93c2VycyB3aGljaCByZXR1cm4gYSBwcm9taXNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBwbGF5UHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBsYXlQcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwbGF5UHJvbWlzZS50aGVuKG51bGwsIGZ1bmN0aW9uIChlKSB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50cmlnZ2VyKCdzb3VyY2VvcGVuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxzIGVuZE9mU3RyZWFtIG9uIHRoZSBtZWRpYSBzb3VyY2Ugd2hlbiBhbGwgYWN0aXZlIHN0cmVhbSB0eXBlcyBoYXZlIGNhbGxlZFxuICAgICAqIGVuZE9mU3RyZWFtXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyZWFtVHlwZVxuICAgICAqICAgICAgICBTdHJlYW0gdHlwZSBvZiB0aGUgc2VnbWVudCBsb2FkZXIgdGhhdCBjYWxsZWQgZW5kT2ZTdHJlYW1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbkVuZE9mU3RyZWFtJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25FbmRPZlN0cmVhbSgpIHtcbiAgICAgIHZhciBpc0VuZE9mU3RyZWFtID0gdGhpcy5tYWluU2VnbWVudExvYWRlcl8uZW5kZWRfO1xuXG4gICAgICBpZiAodGhpcy5tZWRpYVR5cGVzXy5BVURJTy5hY3RpdmVQbGF5bGlzdExvYWRlcikge1xuICAgICAgICAvLyBpZiB0aGUgYXVkaW8gcGxheWxpc3QgbG9hZGVyIGV4aXN0cywgdGhlbiBhbHRlcm5hdGUgYXVkaW8gaXMgYWN0aXZlXG4gICAgICAgIGlmICghdGhpcy5tYWluU2VnbWVudExvYWRlcl8uc3RhcnRpbmdNZWRpYV8gfHwgdGhpcy5tYWluU2VnbWVudExvYWRlcl8uc3RhcnRpbmdNZWRpYV8uY29udGFpbnNWaWRlbykge1xuICAgICAgICAgIC8vIGlmIHdlIGRvIG5vdCBrbm93IGlmIHRoZSBtYWluIHNlZ21lbnQgbG9hZGVyIGNvbnRhaW5zIHZpZGVvIHlldCBvciBpZiB3ZVxuICAgICAgICAgIC8vIGRlZmluaXRpdmVseSBrbm93IHRoZSBtYWluIHNlZ21lbnQgbG9hZGVyIGNvbnRhaW5zIHZpZGVvLCB0aGVuIHdlIG5lZWQgdG8gd2FpdFxuICAgICAgICAgIC8vIGZvciBib3RoIG1haW4gYW5kIGF1ZGlvIHNlZ21lbnQgbG9hZGVycyB0byBjYWxsIGVuZE9mU3RyZWFtXG4gICAgICAgICAgaXNFbmRPZlN0cmVhbSA9IGlzRW5kT2ZTdHJlYW0gJiYgdGhpcy5hdWRpb1NlZ21lbnRMb2FkZXJfLmVuZGVkXztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UganVzdCByZWx5IG9uIHRoZSBhdWRpbyBsb2FkZXJcbiAgICAgICAgICBpc0VuZE9mU3RyZWFtID0gdGhpcy5hdWRpb1NlZ21lbnRMb2FkZXJfLmVuZGVkXztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRW5kT2ZTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ2dlcl8oJ2NhbGxpbmcgbWVkaWFTb3VyY2UuZW5kT2ZTdHJlYW0oKScpOyAvLyBvbiBjaHJvbWUgY2FsbGluZyBlbmRPZlN0cmVhbSBjYW4gc29tZXRpbWVzIGNhdXNlIGFuIGV4Y2VwdGlvbixcbiAgICAgIC8vIGV2ZW4gd2hlbiB0aGUgbWVkaWEgc291cmNlIGlzIGluIGEgdmFsaWQgc3RhdGUuXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubWVkaWFTb3VyY2UuZW5kT2ZTdHJlYW0oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdGYWlsZWQgdG8gY2FsbCBtZWRpYSBzb3VyY2UgZW5kT2ZTdHJlYW0nLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBwbGF5bGlzdCBoYXMgc3RvcHBlZCBiZWluZyB1cGRhdGVkXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHBsYXlsaXN0IHRoZSBtZWRpYSBwbGF5bGlzdCBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSBwbGF5bGlzdCBoYXMgc3RvcHBlZCBiZWluZyB1cGRhdGVkIG9yIG5vdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzdHVja0F0UGxheWxpc3RFbmRfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3R1Y2tBdFBsYXlsaXN0RW5kXyhwbGF5bGlzdCkge1xuICAgICAgdmFyIHNlZWthYmxlJCQxID0gdGhpcy5zZWVrYWJsZSgpO1xuXG4gICAgICBpZiAoIXNlZWthYmxlJCQxLmxlbmd0aCkge1xuICAgICAgICAvLyBwbGF5bGlzdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSBzdHVja1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBleHBpcmVkID0gdGhpcy5zeW5jQ29udHJvbGxlcl8uZ2V0RXhwaXJlZFRpbWUocGxheWxpc3QsIHRoaXMubWVkaWFTb3VyY2UuZHVyYXRpb24pO1xuXG4gICAgICBpZiAoZXhwaXJlZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGRvZXMgbm90IHVzZSB0aGUgc2FmZSBsaXZlIGVuZCB0byBjYWxjdWxhdGUgcGxheWxpc3QgZW5kLCBzaW5jZSB3ZVxuICAgICAgLy8gZG9uJ3Qgd2FudCB0byBzYXkgd2UgYXJlIHN0dWNrIHdoaWxlIHRoZXJlIGlzIHN0aWxsIGNvbnRlbnRcblxuXG4gICAgICB2YXIgYWJzb2x1dGVQbGF5bGlzdEVuZCA9IEhscy5QbGF5bGlzdC5wbGF5bGlzdEVuZChwbGF5bGlzdCwgZXhwaXJlZCk7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnRlY2hfLmN1cnJlbnRUaW1lKCk7XG4gICAgICB2YXIgYnVmZmVyZWQgPSB0aGlzLnRlY2hfLmJ1ZmZlcmVkKCk7XG5cbiAgICAgIGlmICghYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJldHVybiB0cnVlIGlmIHRoZSBwbGF5aGVhZCByZWFjaGVkIHRoZSBhYnNvbHV0ZSBlbmQgb2YgdGhlIHBsYXlsaXN0XG4gICAgICAgIHJldHVybiBhYnNvbHV0ZVBsYXlsaXN0RW5kIC0gY3VycmVudFRpbWUgPD0gU0FGRV9USU1FX0RFTFRBO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnVmZmVyZWRFbmQgPSBidWZmZXJlZC5lbmQoYnVmZmVyZWQubGVuZ3RoIC0gMSk7IC8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIHRvbyBsaXR0bGUgYnVmZmVyIGxlZnQgYW5kIGJ1ZmZlciBoYXMgcmVhY2hlZCBhYnNvbHV0ZVxuICAgICAgLy8gZW5kIG9mIHBsYXlsaXN0XG5cbiAgICAgIHJldHVybiBidWZmZXJlZEVuZCAtIGN1cnJlbnRUaW1lIDw9IFNBRkVfVElNRV9ERUxUQSAmJiBhYnNvbHV0ZVBsYXlsaXN0RW5kIC0gYnVmZmVyZWRFbmQgPD0gU0FGRV9USU1FX0RFTFRBO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbGFja2xpc3RzIGEgcGxheWxpc3Qgd2hlbiBhbiBlcnJvciBvY2N1cnMgZm9yIGEgc2V0IGFtb3VudCBvZiB0aW1lXG4gICAgICogbWFraW5nIGl0IHVuYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYnkgdGhlIHJlbmRpdGlvbiBzZWxlY3Rpb24gYWxnb3JpdGhtXG4gICAgICogYW5kIHRoZW4gZm9yY2VzIGEgbmV3IHBsYXlsaXN0IChyZW5kaXRpb24pIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gZXJyb3IgYW4gb3B0aW9uYWwgZXJyb3IgdGhhdCBtYXkgaW5jbHVkZSB0aGUgcGxheWxpc3RcbiAgICAgKiB0byBibGFja2xpc3RcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IGJsYWNrbGlzdER1cmF0aW9uIGFuIG9wdGlvbmFsIG51bWJlciBvZiBzZWNvbmRzIHRvIGJsYWNrbGlzdCB0aGVcbiAgICAgKiBwbGF5bGlzdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdibGFja2xpc3RDdXJyZW50UGxheWxpc3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBibGFja2xpc3RDdXJyZW50UGxheWxpc3QoKSB7XG4gICAgICB2YXIgZXJyb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGJsYWNrbGlzdER1cmF0aW9uID0gYXJndW1lbnRzWzFdO1xuICAgICAgdmFyIGN1cnJlbnRQbGF5bGlzdCA9IHZvaWQgMDtcbiAgICAgIHZhciBuZXh0UGxheWxpc3QgPSB2b2lkIDA7IC8vIElmIHRoZSBgZXJyb3JgIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIHBsYXlsaXN0IGxvYWRlciwgaXQgd2lsbCBjb250YWluXG4gICAgICAvLyB0aGUgcGxheWxpc3Qgd2Ugd2VyZSB0cnlpbmcgdG8gbG9hZCAoYnV0IGZhaWxlZCkgYW5kIHRoYXQgc2hvdWxkIGJlXG4gICAgICAvLyBibGFja2xpc3RlZCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxheWxpc3Qgd2hpY2ggaXMgbGlrZWx5XG4gICAgICAvLyBvdXQtb2YtZGF0ZSBpbiB0aGlzIHNjZW5hcmlvXG5cbiAgICAgIGN1cnJlbnRQbGF5bGlzdCA9IGVycm9yLnBsYXlsaXN0IHx8IHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCk7XG4gICAgICBibGFja2xpc3REdXJhdGlvbiA9IGJsYWNrbGlzdER1cmF0aW9uIHx8IGVycm9yLmJsYWNrbGlzdER1cmF0aW9uIHx8IHRoaXMuYmxhY2tsaXN0RHVyYXRpb247IC8vIElmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcGxheWxpc3QsIHRoZW4gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZVxuICAgICAgLy8gdHJ5aW5nIHRvIGxvYWQgdGhlIG1hc3RlciBPUiB3aGlsZSB3ZSB3ZXJlIGRpc3Bvc2luZyBvZiB0aGUgdGVjaFxuXG4gICAgICBpZiAoIWN1cnJlbnRQbGF5bGlzdCkge1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZWRpYVNvdXJjZS5lbmRPZlN0cmVhbSgnbmV0d29yaycpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlcignZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXNGaW5hbFJlbmRpdGlvbiA9IHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3Rlci5wbGF5bGlzdHMuZmlsdGVyKGlzRW5hYmxlZCkubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIHBsYXlsaXN0cyA9IHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3Rlci5wbGF5bGlzdHM7XG5cbiAgICAgIGlmIChwbGF5bGlzdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIE5ldmVyIGJsYWNrbGlzdGluZyB0aGlzIHBsYXlsaXN0IGJlY2F1c2UgaXQncyB0aGUgb25seSBwbGF5bGlzdFxuICAgICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ1Byb2JsZW0gZW5jb3VudGVyZWQgd2l0aCB0aGUgY3VycmVudCAnICsgJ0hMUyBwbGF5bGlzdC4gVHJ5aW5nIGFnYWluIHNpbmNlIGl0IGlzIHRoZSBvbmx5IHBsYXlsaXN0LicpO1xuICAgICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoJ3JldHJ5cGxheWxpc3QnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLmxvYWQoaXNGaW5hbFJlbmRpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ZpbmFsUmVuZGl0aW9uKSB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIG9uIHRoZSBmaW5hbCBub24tYmxhY2tsaXN0ZWQgcGxheWxpc3QsIGFuZCB3ZSdyZSBhYm91dCB0byBibGFja2xpc3RcbiAgICAgICAgLy8gaXQsIGluc3RlYWQgb2YgZXJyaW5nIHRoZSBwbGF5ZXIgb3IgcmV0cnlpbmcgdGhpcyBwbGF5bGlzdCwgY2xlYXIgb3V0IHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGJsYWNrbGlzdC4gVGhpcyBhbGxvd3Mgb3RoZXIgcGxheWxpc3RzIHRvIGJlIGF0dGVtcHRlZCBpbiBjYXNlIGFueSBoYXZlIGJlZW5cbiAgICAgICAgLy8gZml4ZWQuXG4gICAgICAgIHZpZGVvanMkMS5sb2cud2FybignUmVtb3ZpbmcgYWxsIHBsYXlsaXN0cyBmcm9tIHRoZSBibGFja2xpc3QgYmVjYXVzZSB0aGUgbGFzdCAnICsgJ3JlbmRpdGlvbiBpcyBhYm91dCB0byBiZSBibGFja2xpc3RlZC4nKTtcbiAgICAgICAgcGxheWxpc3RzLmZvckVhY2goZnVuY3Rpb24gKHBsYXlsaXN0KSB7XG4gICAgICAgICAgaWYgKHBsYXlsaXN0LmV4Y2x1ZGVVbnRpbCAhPT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwbGF5bGlzdC5leGNsdWRlVW50aWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gVGVjaG5pY2FsbHkgd2UgYXJlIHJldHJ5aW5nIGEgcGxheWxpc3QsIGluIHRoYXQgd2UgYXJlIHNpbXBseSByZXRyeWluZyBhIHByZXZpb3VzXG4gICAgICAgIC8vIHBsYXlsaXN0LiBUaGlzIGlzIG5lZWRlZCBmb3IgdXNlcnMgcmVseWluZyBvbiB0aGUgcmV0cnlwbGF5bGlzdCBldmVudCB0byBjYXRjaCBhXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgdGhlIHBsYXllciBtaWdodCBiZSBzdHVjayBhbmQgbG9vcGluZyB0aHJvdWdoIFwiZGVhZFwiIHBsYXlsaXN0cy5cblxuICAgICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoJ3JldHJ5cGxheWxpc3QnKTtcbiAgICAgIH0gLy8gQmxhY2tsaXN0IHRoaXMgcGxheWxpc3RcblxuXG4gICAgICBjdXJyZW50UGxheWxpc3QuZXhjbHVkZVVudGlsID0gRGF0ZS5ub3coKSArIGJsYWNrbGlzdER1cmF0aW9uICogMTAwMDtcbiAgICAgIHRoaXMudGVjaF8udHJpZ2dlcignYmxhY2tsaXN0cGxheWxpc3QnKTtcbiAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgIG5hbWU6ICdobHMtcmVuZGl0aW9uLWJsYWNrbGlzdGVkJ1xuICAgICAgfSk7IC8vIFNlbGVjdCBhIG5ldyBwbGF5bGlzdFxuXG4gICAgICBuZXh0UGxheWxpc3QgPSB0aGlzLnNlbGVjdFBsYXlsaXN0KCk7XG4gICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ1Byb2JsZW0gZW5jb3VudGVyZWQgd2l0aCB0aGUgY3VycmVudCBITFMgcGxheWxpc3QuJyArIChlcnJvci5tZXNzYWdlID8gJyAnICsgZXJyb3IubWVzc2FnZSA6ICcnKSArICcgU3dpdGNoaW5nIHRvIGFub3RoZXIgcGxheWxpc3QuJyk7XG4gICAgICByZXR1cm4gdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8ubWVkaWEobmV4dFBsYXlsaXN0LCBpc0ZpbmFsUmVuZGl0aW9uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF1c2UgYWxsIHNlZ21lbnQgbG9hZGVyc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwYXVzZUxvYWRpbmcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXVzZUxvYWRpbmcoKSB7XG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5wYXVzZSgpO1xuXG4gICAgICBpZiAodGhpcy5tZWRpYVR5cGVzXy5BVURJTy5hY3RpdmVQbGF5bGlzdExvYWRlcikge1xuICAgICAgICB0aGlzLmF1ZGlvU2VnbWVudExvYWRlcl8ucGF1c2UoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWVkaWFUeXBlc18uU1VCVElUTEVTLmFjdGl2ZVBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAgIHRoaXMuc3VidGl0bGVTZWdtZW50TG9hZGVyXy5wYXVzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIGN1cnJlbnQgdGltZSBvbiBhbGwgc2VnbWVudCBsb2FkZXJzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RpbWVSYW5nZX0gY3VycmVudFRpbWUgdGhlIGN1cnJlbnQgdGltZSB0byBzZXRcbiAgICAgKiBAcmV0dXJuIHtUaW1lUmFuZ2V9IHRoZSBjdXJyZW50IHRpbWVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0Q3VycmVudFRpbWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50VGltZShjdXJyZW50VGltZSkge1xuICAgICAgdmFyIGJ1ZmZlcmVkID0gZmluZFJhbmdlKHRoaXMudGVjaF8uYnVmZmVyZWQoKSwgY3VycmVudFRpbWUpO1xuXG4gICAgICBpZiAoISh0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXyAmJiB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYSgpKSkge1xuICAgICAgICAvLyByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlIG1ldGFkYXRhIGlzIG5vdCByZWFkeSB5ZXRcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IC8vIGl0J3MgY2xlYXJseSBhbiBlZGdlLWNhc2UgYnV0IGRvbid0IHRocm93biBhbiBlcnJvciBpZiBhc2tlZCB0b1xuICAgICAgLy8gc2VlayB3aXRoaW4gYW4gZW1wdHkgcGxheWxpc3RcblxuXG4gICAgICBpZiAoIXRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCkuc2VnbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IC8vIEluIGZsYXNoIHBsYXliYWNrLCB0aGUgc2VnbWVudCBsb2FkZXJzIHNob3VsZCBiZSByZXNldCBvbiBldmVyeSBzZWVrLCBldmVuXG4gICAgICAvLyBpbiBidWZmZXIgc2Vla3MuIElmIHRoZSBzZWVrIGxvY2F0aW9uIGlzIGFscmVhZHkgYnVmZmVyZWQsIGNvbnRpbnVlIGJ1ZmZlcmluZyBhc1xuICAgICAgLy8gdXN1YWxcbiAgICAgIC8vIFRPRE86IHJlZG8gdGhpcyBjb21tZW50XG5cblxuICAgICAgaWYgKGJ1ZmZlcmVkICYmIGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFRpbWU7XG4gICAgICB9IC8vIGNhbmNlbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBzbyB3ZSBiZWdpbiBidWZmZXJpbmcgYXQgdGhlIG5ld1xuICAgICAgLy8gbG9jYXRpb25cblxuXG4gICAgICB0aGlzLm1haW5TZWdtZW50TG9hZGVyXy5yZXNldEV2ZXJ5dGhpbmcoKTtcbiAgICAgIHRoaXMubWFpblNlZ21lbnRMb2FkZXJfLmFib3J0KCk7XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhVHlwZXNfLkFVRElPLmFjdGl2ZVBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAgIHRoaXMuYXVkaW9TZWdtZW50TG9hZGVyXy5yZXNldEV2ZXJ5dGhpbmcoKTtcbiAgICAgICAgdGhpcy5hdWRpb1NlZ21lbnRMb2FkZXJfLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhVHlwZXNfLlNVQlRJVExFUy5hY3RpdmVQbGF5bGlzdExvYWRlcikge1xuICAgICAgICB0aGlzLnN1YnRpdGxlU2VnbWVudExvYWRlcl8ucmVzZXRFdmVyeXRoaW5nKCk7XG4gICAgICAgIHRoaXMuc3VidGl0bGVTZWdtZW50TG9hZGVyXy5hYm9ydCgpO1xuICAgICAgfSAvLyBzdGFydCBzZWdtZW50IGxvYWRlciBsb2FkaW5nIGluIGNhc2UgdGhleSBhcmUgcGF1c2VkXG5cblxuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldCB0aGUgY3VycmVudCBkdXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybiB7VGltZVJhbmdlfSB0aGUgZHVyYXRpb25cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZHVyYXRpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkdXJhdGlvbiQkMSgpIHtcbiAgICAgIGlmICghdGhpcy5tYXN0ZXJQbGF5bGlzdExvYWRlcl8pIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhU291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lZGlhU291cmNlLmR1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gSGxzLlBsYXlsaXN0LmR1cmF0aW9uKHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjaGVjayB0aGUgc2Vla2FibGUgcmFuZ2VcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1RpbWVSYW5nZX0gdGhlIHNlZWthYmxlIHJhbmdlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NlZWthYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2Vla2FibGUkJDEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWVrYWJsZV87XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25TeW5jSW5mb1VwZGF0ZV8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblN5bmNJbmZvVXBkYXRlXygpIHtcbiAgICAgIHZhciBtYWluU2Vla2FibGUgPSB2b2lkIDA7XG4gICAgICB2YXIgYXVkaW9TZWVrYWJsZSA9IHZvaWQgMDtcblxuICAgICAgaWYgKCF0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBtZWRpYSA9IHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCk7XG5cbiAgICAgIGlmICghbWVkaWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXhwaXJlZCA9IHRoaXMuc3luY0NvbnRyb2xsZXJfLmdldEV4cGlyZWRUaW1lKG1lZGlhLCB0aGlzLm1lZGlhU291cmNlLmR1cmF0aW9uKTtcblxuICAgICAgaWYgKGV4cGlyZWQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gbm90IGVub3VnaCBpbmZvcm1hdGlvbiB0byB1cGRhdGUgc2Vla2FibGVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYWluU2Vla2FibGUgPSBIbHMuUGxheWxpc3Quc2Vla2FibGUobWVkaWEsIGV4cGlyZWQpO1xuXG4gICAgICBpZiAobWFpblNlZWthYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lZGlhVHlwZXNfLkFVRElPLmFjdGl2ZVBsYXlsaXN0TG9hZGVyKSB7XG4gICAgICAgIG1lZGlhID0gdGhpcy5tZWRpYVR5cGVzXy5BVURJTy5hY3RpdmVQbGF5bGlzdExvYWRlci5tZWRpYSgpO1xuICAgICAgICBleHBpcmVkID0gdGhpcy5zeW5jQ29udHJvbGxlcl8uZ2V0RXhwaXJlZFRpbWUobWVkaWEsIHRoaXMubWVkaWFTb3VyY2UuZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChleHBpcmVkID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXVkaW9TZWVrYWJsZSA9IEhscy5QbGF5bGlzdC5zZWVrYWJsZShtZWRpYSwgZXhwaXJlZCk7XG5cbiAgICAgICAgaWYgKGF1ZGlvU2Vla2FibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGRFbmQgPSB2b2lkIDA7XG4gICAgICB2YXIgb2xkU3RhcnQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICh0aGlzLnNlZWthYmxlXyAmJiB0aGlzLnNlZWthYmxlXy5sZW5ndGgpIHtcbiAgICAgICAgb2xkRW5kID0gdGhpcy5zZWVrYWJsZV8uZW5kKDApO1xuICAgICAgICBvbGRTdGFydCA9IHRoaXMuc2Vla2FibGVfLnN0YXJ0KDApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWF1ZGlvU2Vla2FibGUpIHtcbiAgICAgICAgLy8gc2Vla2FibGUgaGFzIGJlZW4gY2FsY3VsYXRlZCBiYXNlZCBvbiBidWZmZXJpbmcgdmlkZW8gZGF0YSBzbyBpdFxuICAgICAgICAvLyBjYW4gYmUgcmV0dXJuZWQgZGlyZWN0bHlcbiAgICAgICAgdGhpcy5zZWVrYWJsZV8gPSBtYWluU2Vla2FibGU7XG4gICAgICB9IGVsc2UgaWYgKGF1ZGlvU2Vla2FibGUuc3RhcnQoMCkgPiBtYWluU2Vla2FibGUuZW5kKDApIHx8IG1haW5TZWVrYWJsZS5zdGFydCgwKSA+IGF1ZGlvU2Vla2FibGUuZW5kKDApKSB7XG4gICAgICAgIC8vIHNlZWthYmxlcyBhcmUgcHJldHR5IGZhciBvZmYsIHJlbHkgb24gbWFpblxuICAgICAgICB0aGlzLnNlZWthYmxlXyA9IG1haW5TZWVrYWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Vla2FibGVfID0gdmlkZW9qcyQxLmNyZWF0ZVRpbWVSYW5nZXMoW1thdWRpb1NlZWthYmxlLnN0YXJ0KDApID4gbWFpblNlZWthYmxlLnN0YXJ0KDApID8gYXVkaW9TZWVrYWJsZS5zdGFydCgwKSA6IG1haW5TZWVrYWJsZS5zdGFydCgwKSwgYXVkaW9TZWVrYWJsZS5lbmQoMCkgPCBtYWluU2Vla2FibGUuZW5kKDApID8gYXVkaW9TZWVrYWJsZS5lbmQoMCkgOiBtYWluU2Vla2FibGUuZW5kKDApXV0pO1xuICAgICAgfSAvLyBzZWVrYWJsZSBpcyB0aGUgc2FtZSBhcyBsYXN0IHRpbWVcblxuXG4gICAgICBpZiAodGhpcy5zZWVrYWJsZV8gJiYgdGhpcy5zZWVrYWJsZV8ubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlZWthYmxlXy5lbmQoMCkgPT09IG9sZEVuZCAmJiB0aGlzLnNlZWthYmxlXy5zdGFydCgwKSA9PT0gb2xkU3RhcnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXJfKCdzZWVrYWJsZSB1cGRhdGVkIFsnICsgcHJpbnRhYmxlUmFuZ2UodGhpcy5zZWVrYWJsZV8pICsgJ10nKTtcbiAgICAgIHRoaXMudGVjaF8udHJpZ2dlcignc2Vla2FibGVjaGFuZ2VkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgcGxheWVyIGR1cmF0aW9uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0ZUR1cmF0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlRHVyYXRpb24oKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIG9sZER1cmF0aW9uID0gdGhpcy5tZWRpYVNvdXJjZS5kdXJhdGlvbjtcbiAgICAgIHZhciBuZXdEdXJhdGlvbiA9IEhscy5QbGF5bGlzdC5kdXJhdGlvbih0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYSgpKTtcbiAgICAgIHZhciBidWZmZXJlZCA9IHRoaXMudGVjaF8uYnVmZmVyZWQoKTtcblxuICAgICAgdmFyIHNldER1cmF0aW9uID0gZnVuY3Rpb24gc2V0RHVyYXRpb24oKSB7XG4gICAgICAgIC8vIG9uIGZpcmVmb3ggc2V0dGluZyB0aGUgZHVyYXRpb24gbWF5IHNvbWV0aW1lcyBjYXVzZSBhbiBleGNlcHRpb25cbiAgICAgICAgLy8gZXZlbiBpZiB0aGUgbWVkaWEgc291cmNlIGlzIG9wZW4gYW5kIHNvdXJjZSBidWZmZXJzIGFyZSBub3RcbiAgICAgICAgLy8gdXBkYXRpbmcsIHNvbWV0aGluZyBhYm91dCB0aGUgbWVkaWEgc291cmNlIGJlaW5nIGluIGFuIGludmFsaWQgc3RhdGUuXG4gICAgICAgIF90aGlzNi5sb2dnZXJfKCdTZXR0aW5nIGR1cmF0aW9uIGZyb20gJyArIF90aGlzNi5tZWRpYVNvdXJjZS5kdXJhdGlvbiArICcgPT4gJyArIG5ld0R1cmF0aW9uKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIF90aGlzNi5tZWRpYVNvdXJjZS5kdXJhdGlvbiA9IG5ld0R1cmF0aW9uO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdGYWlsZWQgdG8gc2V0IG1lZGlhIHNvdXJjZSBkdXJhdGlvbicsIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM2LnRlY2hfLnRyaWdnZXIoJ2R1cmF0aW9uY2hhbmdlJyk7XG5cbiAgICAgICAgX3RoaXM2Lm1lZGlhU291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NvdXJjZW9wZW4nLCBzZXREdXJhdGlvbik7XG4gICAgICB9O1xuXG4gICAgICBpZiAoYnVmZmVyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXdEdXJhdGlvbiA9IE1hdGgubWF4KG5ld0R1cmF0aW9uLCBidWZmZXJlZC5lbmQoYnVmZmVyZWQubGVuZ3RoIC0gMSkpO1xuICAgICAgfSAvLyBpZiB0aGUgZHVyYXRpb24gaGFzIGNoYW5nZWQsIGludmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZVxuXG5cbiAgICAgIGlmIChvbGREdXJhdGlvbiAhPT0gbmV3RHVyYXRpb24pIHtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBkdXJhdGlvblxuICAgICAgICBpZiAodGhpcy5tZWRpYVNvdXJjZS5yZWFkeVN0YXRlICE9PSAnb3BlbicpIHtcbiAgICAgICAgICB0aGlzLm1lZGlhU291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3NvdXJjZW9wZW4nLCBzZXREdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0RHVyYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBkaXNwb3NlIG9mIHRoZSBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXIgYW5kIGV2ZXJ5dGhpbmdcbiAgICAgKiB0aGF0IGl0IGNvbnRyb2xzXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Rpc3Bvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZGVjcnlwdGVyXy50ZXJtaW5hdGUoKTtcbiAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMubWFpblNlZ21lbnRMb2FkZXJfLmRpc3Bvc2UoKTtcbiAgICAgIFsnQVVESU8nLCAnU1VCVElUTEVTJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICB2YXIgZ3JvdXBzID0gX3RoaXM3Lm1lZGlhVHlwZXNfW3R5cGVdLmdyb3VwcztcblxuICAgICAgICBmb3IgKHZhciBpZCBpbiBncm91cHMpIHtcbiAgICAgICAgICBncm91cHNbaWRdLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgICAgICBpZiAoZ3JvdXAucGxheWxpc3RMb2FkZXIpIHtcbiAgICAgICAgICAgICAgZ3JvdXAucGxheWxpc3RMb2FkZXIuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXVkaW9TZWdtZW50TG9hZGVyXy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLnN1YnRpdGxlU2VnbWVudExvYWRlcl8uZGlzcG9zZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIG1hc3RlciBwbGF5bGlzdCBvYmplY3QgaWYgd2UgaGF2ZSBvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIG1hc3RlciBwbGF5bGlzdCBvYmplY3QgdGhhdCB3ZSBwYXJzZWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbWFzdGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFzdGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3RlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxheWxpc3RcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwbGF5bGlzdCBvYmplY3QgdGhhdCB3ZSBwYXJzZWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbWVkaWEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtZWRpYSgpIHtcbiAgICAgIC8vIHBsYXlsaXN0IGxvYWRlciB3aWxsIG5vdCByZXR1cm4gbWVkaWEgaWYgaXQgaGFzIG5vdCBiZWVuIGZ1bGx5IGxvYWRlZFxuICAgICAgcmV0dXJuIHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1lZGlhKCkgfHwgdGhpcy5pbml0aWFsTWVkaWFfO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzZXR1cCBvdXIgaW50ZXJuYWwgc291cmNlIGJ1ZmZlcnMgb24gb3VyIHNlZ21lbnQgTG9hZGVyc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0dXBTb3VyY2VCdWZmZXJzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwU291cmNlQnVmZmVyc18oKSB7XG4gICAgICB2YXIgbWVkaWEgPSB0aGlzLm1hc3RlclBsYXlsaXN0TG9hZGVyXy5tZWRpYSgpO1xuICAgICAgdmFyIG1pbWVUeXBlcyA9IHZvaWQgMDsgLy8gd2FpdCB1bnRpbCBhIG1lZGlhIHBsYXlsaXN0IGlzIGF2YWlsYWJsZSBhbmQgdGhlIE1lZGlhIFNvdXJjZSBpc1xuICAgICAgLy8gYXR0YWNoZWRcblxuICAgICAgaWYgKCFtZWRpYSB8fCB0aGlzLm1lZGlhU291cmNlLnJlYWR5U3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1pbWVUeXBlcyA9IG1pbWVUeXBlc0ZvclBsYXlsaXN0KHRoaXMubWFzdGVyUGxheWxpc3RMb2FkZXJfLm1hc3RlciwgbWVkaWEpO1xuXG4gICAgICBpZiAobWltZVR5cGVzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9ICdObyBjb21wYXRpYmxlIFNvdXJjZUJ1ZmZlciBjb25maWd1cmF0aW9uIGZvciB0aGUgdmFyaWFudCBzdHJlYW06JyArIG1lZGlhLnJlc29sdmVkVXJpO1xuICAgICAgICByZXR1cm4gdGhpcy5tZWRpYVNvdXJjZS5lbmRPZlN0cmVhbSgnZGVjb2RlJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlndXJlTG9hZGVyTWltZVR5cGVzXyhtaW1lVHlwZXMpOyAvLyBleGNsdWRlIGFueSBpbmNvbXBhdGlibGUgdmFyaWFudCBzdHJlYW1zIGZyb20gZnV0dXJlIHBsYXlsaXN0XG4gICAgICAvLyBzZWxlY3Rpb25cblxuICAgICAgdGhpcy5leGNsdWRlSW5jb21wYXRpYmxlVmFyaWFudHNfKG1lZGlhKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb25maWd1cmVMb2FkZXJNaW1lVHlwZXNfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uZmlndXJlTG9hZGVyTWltZVR5cGVzXyhtaW1lVHlwZXMpIHtcbiAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGRlbXV4ZWQsIHdlIGNhbid0IHN0YXJ0IGFwcGVuZGluZyBzZWdtZW50cyB0byBhIHNvdXJjZSBidWZmZXJcbiAgICAgIC8vIHVudGlsIGJvdGggc291cmNlIGJ1ZmZlcnMgYXJlIHNldCB1cCwgb3IgZWxzZSB0aGUgYnJvd3NlciBtYXkgbm90IGxldCB1cyBhZGQgdGhlXG4gICAgICAvLyBzZWNvbmQgc291cmNlIGJ1ZmZlciAoaXQgd2lsbCBhc3N1bWUgd2UgYXJlIHBsYXlpbmcgZWl0aGVyIGF1ZGlvIG9ubHkgb3IgdmlkZW9cbiAgICAgIC8vIG9ubHkpLlxuICAgICAgdmFyIHNvdXJjZUJ1ZmZlckVtaXR0ZXIgPSAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG1pbWUgdHlwZVxuICAgICAgbWltZVR5cGVzLmxlbmd0aCA+IDEgJiYgLy8gYW5kIHRoZSBmaXJzdCBtaW1lIHR5cGUgZG9lcyBub3QgaGF2ZSBtdXhlZCB2aWRlbyBhbmQgYXVkaW9cbiAgICAgIG1pbWVUeXBlc1swXS5pbmRleE9mKCcsJykgPT09IC0xICYmIC8vIGFuZCB0aGUgdHdvIG1pbWUgdHlwZXMgYXJlIGRpZmZlcmVudCAodGhleSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIGNhc2Ugb2YgYXVkaW9cbiAgICAgIC8vIG9ubHkgd2l0aCBhbHRlcm5hdGUgYXVkaW8pXG4gICAgICBtaW1lVHlwZXNbMF0gIT09IG1pbWVUeXBlc1sxXSA/IC8vIHRoZW4gd2Ugd2FudCB0byB3YWl0IG9uIHRoZSBzZWNvbmQgc291cmNlIGJ1ZmZlclxuICAgICAgbmV3IHZpZGVvanMkMS5FdmVudFRhcmdldCgpIDogLy8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBhcyB0aGUgY29udGVudCBpcyBlaXRoZXIgYXVkaW8gb25seSxcbiAgICAgIC8vIHZpZGVvIG9ubHksIG9yIG11eGVkIGNvbnRlbnQuXG4gICAgICBudWxsO1xuICAgICAgdGhpcy5tYWluU2VnbWVudExvYWRlcl8ubWltZVR5cGUobWltZVR5cGVzWzBdLCBzb3VyY2VCdWZmZXJFbWl0dGVyKTtcblxuICAgICAgaWYgKG1pbWVUeXBlc1sxXSkge1xuICAgICAgICB0aGlzLmF1ZGlvU2VnbWVudExvYWRlcl8ubWltZVR5cGUobWltZVR5cGVzWzFdLCBzb3VyY2VCdWZmZXJFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmxhY2tsaXN0cyBwbGF5bGlzdHMgd2l0aCBjb2RlY3MgdGhhdCBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2V4Y2x1ZGVVbnN1cHBvcnRlZFZhcmlhbnRzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4Y2x1ZGVVbnN1cHBvcnRlZFZhcmlhbnRzXygpIHtcbiAgICAgIHRoaXMubWFzdGVyKCkucGxheWxpc3RzLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhbnQpIHtcbiAgICAgICAgaWYgKHZhcmlhbnQuYXR0cmlidXRlcy5DT0RFQ1MgJiYgd2luZG93JDEuTWVkaWFTb3VyY2UgJiYgd2luZG93JDEuTWVkaWFTb3VyY2UuaXNUeXBlU3VwcG9ydGVkICYmICF3aW5kb3ckMS5NZWRpYVNvdXJjZS5pc1R5cGVTdXBwb3J0ZWQoJ3ZpZGVvL21wNDsgY29kZWNzPVwiJyArIG1hcExlZ2FjeUF2Y0NvZGVjcyh2YXJpYW50LmF0dHJpYnV0ZXMuQ09ERUNTKSArICdcIicpKSB7XG4gICAgICAgICAgdmFyaWFudC5leGNsdWRlVW50aWwgPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsYWNrbGlzdCBwbGF5bGlzdHMgdGhhdCBhcmUga25vd24gdG8gYmUgY29kZWMgb3JcbiAgICAgKiBzdHJlYW0taW5jb21wYXRpYmxlIHdpdGggdGhlIFNvdXJjZUJ1ZmZlciBjb25maWd1cmF0aW9uLiBGb3JcbiAgICAgKiBpbnN0YW5jZSwgTWVkaWEgU291cmNlIEV4dGVuc2lvbnMgd291bGQgY2F1c2UgdGhlIHZpZGVvIGVsZW1lbnQgdG9cbiAgICAgKiBzdGFsbCB3YWl0aW5nIGZvciB2aWRlbyBkYXRhIGlmIHlvdSBzd2l0Y2hlZCBmcm9tIGEgdmFyaWFudCB3aXRoXG4gICAgICogdmlkZW8gYW5kIGF1ZGlvIHRvIGFuIGF1ZGlvLW9ubHkgb25lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1lZGlhIGEgbWVkaWEgcGxheWxpc3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50XG4gICAgICogc2V0IG9mIFNvdXJjZUJ1ZmZlcnMuIFZhcmlhbnRzIGluIHRoZSBjdXJyZW50IG1hc3RlciBwbGF5bGlzdCB0aGF0XG4gICAgICogZG8gbm90IGFwcGVhciB0byBoYXZlIGNvbXBhdGlibGUgY29kZWMgb3Igc3RyZWFtIGNvbmZpZ3VyYXRpb25zXG4gICAgICogd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBkZWZhdWx0IHBsYXlsaXN0IHNlbGVjdGlvbiBhbGdvcml0aG1cbiAgICAgKiBpbmRlZmluaXRlbHkuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZXhjbHVkZUluY29tcGF0aWJsZVZhcmlhbnRzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4Y2x1ZGVJbmNvbXBhdGlibGVWYXJpYW50c18obWVkaWEpIHtcbiAgICAgIHZhciBjb2RlY0NvdW50ID0gMjtcbiAgICAgIHZhciB2aWRlb0NvZGVjID0gbnVsbDtcbiAgICAgIHZhciBjb2RlY3MgPSB2b2lkIDA7XG5cbiAgICAgIGlmIChtZWRpYS5hdHRyaWJ1dGVzLkNPREVDUykge1xuICAgICAgICBjb2RlY3MgPSBwYXJzZUNvZGVjcyhtZWRpYS5hdHRyaWJ1dGVzLkNPREVDUyk7XG4gICAgICAgIHZpZGVvQ29kZWMgPSBjb2RlY3MudmlkZW9Db2RlYztcbiAgICAgICAgY29kZWNDb3VudCA9IGNvZGVjcy5jb2RlY0NvdW50O1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hc3RlcigpLnBsYXlsaXN0cy5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYW50KSB7XG4gICAgICAgIHZhciB2YXJpYW50Q29kZWNzID0ge1xuICAgICAgICAgIGNvZGVjQ291bnQ6IDIsXG4gICAgICAgICAgdmlkZW9Db2RlYzogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh2YXJpYW50LmF0dHJpYnV0ZXMuQ09ERUNTKSB7XG4gICAgICAgICAgdmFyaWFudENvZGVjcyA9IHBhcnNlQ29kZWNzKHZhcmlhbnQuYXR0cmlidXRlcy5DT0RFQ1MpO1xuICAgICAgICB9IC8vIGlmIHRoZSBzdHJlYW1zIGRpZmZlciBpbiB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhdWRpbyBvclxuICAgICAgICAvLyB2aWRlbywgdGhleSBhcmUgaW5jb21wYXRpYmxlXG5cblxuICAgICAgICBpZiAodmFyaWFudENvZGVjcy5jb2RlY0NvdW50ICE9PSBjb2RlY0NvdW50KSB7XG4gICAgICAgICAgdmFyaWFudC5leGNsdWRlVW50aWwgPSBJbmZpbml0eTtcbiAgICAgICAgfSAvLyBpZiBoLjI2NCBpcyBzcGVjaWZpZWQgb24gdGhlIGN1cnJlbnQgcGxheWxpc3QsIHNvbWUgZmxhdm9yIG9mXG4gICAgICAgIC8vIGl0IG11c3QgYmUgc3BlY2lmaWVkIG9uIGFsbCBjb21wYXRpYmxlIHZhcmlhbnRzXG5cblxuICAgICAgICBpZiAodmFyaWFudENvZGVjcy52aWRlb0NvZGVjICE9PSB2aWRlb0NvZGVjKSB7XG4gICAgICAgICAgdmFyaWFudC5leGNsdWRlVW50aWwgPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlQWRDdWVzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUFkQ3Vlc18obWVkaWEpIHtcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgdmFyIHNlZWthYmxlJCQxID0gdGhpcy5zZWVrYWJsZSgpO1xuXG4gICAgICBpZiAoc2Vla2FibGUkJDEubGVuZ3RoKSB7XG4gICAgICAgIG9mZnNldCA9IHNlZWthYmxlJCQxLnN0YXJ0KDApO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVBZEN1ZXMobWVkaWEsIHRoaXMuY3VlVGFnc1RyYWNrXywgb2Zmc2V0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZGVzaXJlZCBmb3J3YXJkIGJ1ZmZlciBsZW5ndGggYmFzZWQgb24gY3VycmVudCB0aW1lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IERlc2lyZWQgZm9yd2FyZCBidWZmZXIgbGVuZ3RoIGluIHNlY29uZHNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ29hbEJ1ZmZlckxlbmd0aCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdvYWxCdWZmZXJMZW5ndGgoKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnRlY2hfLmN1cnJlbnRUaW1lKCk7XG4gICAgICB2YXIgaW5pdGlhbCA9IENvbmZpZy5HT0FMX0JVRkZFUl9MRU5HVEg7XG4gICAgICB2YXIgcmF0ZSA9IENvbmZpZy5HT0FMX0JVRkZFUl9MRU5HVEhfUkFURTtcbiAgICAgIHZhciBtYXggPSBNYXRoLm1heChpbml0aWFsLCBDb25maWcuTUFYX0dPQUxfQlVGRkVSX0xFTkdUSCk7XG4gICAgICByZXR1cm4gTWF0aC5taW4oaW5pdGlhbCArIGN1cnJlbnRUaW1lICogcmF0ZSwgbWF4KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZGVzaXJlZCBidWZmZXIgbG93IHdhdGVyIGxpbmUgYmFzZWQgb24gY3VycmVudCB0aW1lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IERlc2lyZWQgYnVmZmVyIGxvdyB3YXRlciBsaW5lIGluIHNlY29uZHNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYnVmZmVyTG93V2F0ZXJMaW5lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYnVmZmVyTG93V2F0ZXJMaW5lKCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy50ZWNoXy5jdXJyZW50VGltZSgpO1xuICAgICAgdmFyIGluaXRpYWwgPSBDb25maWcuQlVGRkVSX0xPV19XQVRFUl9MSU5FO1xuICAgICAgdmFyIHJhdGUgPSBDb25maWcuQlVGRkVSX0xPV19XQVRFUl9MSU5FX1JBVEU7XG4gICAgICB2YXIgbWF4ID0gTWF0aC5tYXgoaW5pdGlhbCwgQ29uZmlnLk1BWF9CVUZGRVJfTE9XX1dBVEVSX0xJTkUpO1xuICAgICAgcmV0dXJuIE1hdGgubWluKGluaXRpYWwgKyBjdXJyZW50VGltZSAqIHJhdGUsIG1heCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXI7XG59KHZpZGVvanMkMS5FdmVudFRhcmdldCk7XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjdHMgYXMgdGhlIEVuYWJsZS9kaXNhYmxlIHBsYXlsaXN0IGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7UGxheWxpc3RMb2FkZXJ9IGxvYWRlciAtIFRoZSBtYXN0ZXIgcGxheWxpc3QgbG9hZGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGxheWxpc3RVcmkgLSB1cmkgb2YgdGhlIHBsYXlsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFuZ2VQbGF5bGlzdEZuIC0gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgYVxuICogcGxheWxpc3QncyBlbmFibGVkLXN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuIFdpbGwgTk9UIGJlIGNhbGxlZCBpZiBhXG4gKiBwbGF5bGlzdCdzIGVuYWJsZWQtc3RhdGUgaXMgdW5jaGFuZ2VkXG4gKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGUgLSBWYWx1ZSB0byBzZXQgdGhlIHBsYXlsaXN0IGVuYWJsZWQtc3RhdGUgdG9cbiAqIG9yIGlmIHVuZGVmaW5lZCByZXR1cm5zIHRoZSBjdXJyZW50IGVuYWJsZWQtc3RhdGUgZm9yIHRoZSBwbGF5bGlzdFxuICogQHJldHVybiB7RnVuY3Rpb259IEZ1bmN0aW9uIGZvciBzZXR0aW5nL2dldHRpbmcgZW5hYmxlZFxuICovXG5cblxudmFyIGVuYWJsZUZ1bmN0aW9uID0gZnVuY3Rpb24gZW5hYmxlRnVuY3Rpb24obG9hZGVyLCBwbGF5bGlzdFVyaSwgY2hhbmdlUGxheWxpc3RGbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVuYWJsZSkge1xuICAgIHZhciBwbGF5bGlzdCA9IGxvYWRlci5tYXN0ZXIucGxheWxpc3RzW3BsYXlsaXN0VXJpXTtcbiAgICB2YXIgaW5jb21wYXRpYmxlID0gaXNJbmNvbXBhdGlibGUocGxheWxpc3QpO1xuICAgIHZhciBjdXJyZW50bHlFbmFibGVkID0gaXNFbmFibGVkKHBsYXlsaXN0KTtcblxuICAgIGlmICh0eXBlb2YgZW5hYmxlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnRseUVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZSkge1xuICAgICAgZGVsZXRlIHBsYXlsaXN0LmRpc2FibGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBwbGF5bGlzdC5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZSAhPT0gY3VycmVudGx5RW5hYmxlZCAmJiAhaW5jb21wYXRpYmxlKSB7XG4gICAgICAvLyBFbnN1cmUgdGhlIG91dHNpZGUgd29ybGQga25vd3MgYWJvdXQgb3VyIGNoYW5nZXNcbiAgICAgIGNoYW5nZVBsYXlsaXN0Rm4oKTtcblxuICAgICAgaWYgKGVuYWJsZSkge1xuICAgICAgICBsb2FkZXIudHJpZ2dlcigncmVuZGl0aW9uZW5hYmxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9hZGVyLnRyaWdnZXIoJ3JlbmRpdGlvbmRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuYWJsZTtcbiAgfTtcbn07XG4vKipcbiAqIFRoZSByZXByZXNlbnRhdGlvbiBvYmplY3QgZW5jYXBzdWxhdGVzIHRoZSBwdWJsaWNseSB2aXNpYmxlIGluZm9ybWF0aW9uXG4gKiBpbiBhIG1lZGlhIHBsYXlsaXN0IGFsb25nIHdpdGggYSBzZXR0ZXIvZ2V0dGVyLXR5cGUgZnVuY3Rpb24gKGVuYWJsZWQpXG4gKiBmb3IgY2hhbmdpbmcgdGhlIGVuYWJsZWQtc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIHBsYXlsaXN0IGVudHJ5XG4gKlxuICogQGNsYXNzIFJlcHJlc2VudGF0aW9uXG4gKi9cblxuXG52YXIgUmVwcmVzZW50YXRpb24gPSBmdW5jdGlvbiBSZXByZXNlbnRhdGlvbihobHNIYW5kbGVyLCBwbGF5bGlzdCwgaWQpIHtcbiAgY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVwcmVzZW50YXRpb24pO1xuICB2YXIgbXBjID0gaGxzSGFuZGxlci5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLFxuICAgICAgc21vb3RoUXVhbGl0eUNoYW5nZSA9IGhsc0hhbmRsZXIub3B0aW9uc18uc21vb3RoUXVhbGl0eUNoYW5nZTsgLy8gR2V0IGEgcmVmZXJlbmNlIHRvIGEgYm91bmQgdmVyc2lvbiBvZiB0aGUgcXVhbGl0eSBjaGFuZ2UgZnVuY3Rpb25cblxuICB2YXIgY2hhbmdlVHlwZSA9IHNtb290aFF1YWxpdHlDaGFuZ2UgPyAnc21vb3RoJyA6ICdmYXN0JztcbiAgdmFyIHF1YWxpdHlDaGFuZ2VGdW5jdGlvbiA9IG1wY1tjaGFuZ2VUeXBlICsgJ1F1YWxpdHlDaGFuZ2VfJ10uYmluZChtcGMpOyAvLyBzb21lIHBsYXlsaXN0IGF0dHJpYnV0ZXMgYXJlIG9wdGlvbmFsXG5cbiAgaWYgKHBsYXlsaXN0LmF0dHJpYnV0ZXMuUkVTT0xVVElPTikge1xuICAgIHZhciByZXNvbHV0aW9uID0gcGxheWxpc3QuYXR0cmlidXRlcy5SRVNPTFVUSU9OO1xuICAgIHRoaXMud2lkdGggPSByZXNvbHV0aW9uLndpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gcmVzb2x1dGlvbi5oZWlnaHQ7XG4gIH1cblxuICB0aGlzLmJhbmR3aWR0aCA9IHBsYXlsaXN0LmF0dHJpYnV0ZXMuQkFORFdJRFRIOyAvLyBUaGUgaWQgaXMgc2ltcGx5IHRoZSBvcmRpbmFsaXR5IG9mIHRoZSBtZWRpYSBwbGF5bGlzdFxuICAvLyB3aXRoaW4gdGhlIG1hc3RlciBwbGF5bGlzdFxuXG4gIHRoaXMuaWQgPSBpZDsgLy8gUGFydGlhbGx5LWFwcGx5IHRoZSBlbmFibGVGdW5jdGlvbiB0byBjcmVhdGUgYSBwbGF5bGlzdC1cbiAgLy8gc3BlY2lmaWMgdmFyaWFudFxuXG4gIHRoaXMuZW5hYmxlZCA9IGVuYWJsZUZ1bmN0aW9uKGhsc0hhbmRsZXIucGxheWxpc3RzLCBwbGF5bGlzdC51cmksIHF1YWxpdHlDaGFuZ2VGdW5jdGlvbik7XG59O1xuLyoqXG4gKiBBIG1peGluIGZ1bmN0aW9uIHRoYXQgYWRkcyB0aGUgYHJlcHJlc2VudGF0aW9uc2AgYXBpIHRvIGFuIGluc3RhbmNlXG4gKiBvZiB0aGUgSGxzSGFuZGxlciBjbGFzc1xuICogQHBhcmFtIHtIbHNIYW5kbGVyfSBobHNIYW5kbGVyIC0gQW4gaW5zdGFuY2Ugb2YgSGxzSGFuZGxlciB0byBhZGQgdGhlXG4gKiByZXByZXNlbnRhdGlvbiBBUEkgaW50b1xuICovXG5cblxudmFyIHJlbmRpdGlvblNlbGVjdGlvbk1peGluID0gZnVuY3Rpb24gcmVuZGl0aW9uU2VsZWN0aW9uTWl4aW4oaGxzSGFuZGxlcikge1xuICB2YXIgcGxheWxpc3RzID0gaGxzSGFuZGxlci5wbGF5bGlzdHM7IC8vIEFkZCBhIHNpbmdsZSBBUEktc3BlY2lmaWMgZnVuY3Rpb24gdG8gdGhlIEhsc0hhbmRsZXIgaW5zdGFuY2VcblxuICBobHNIYW5kbGVyLnJlcHJlc2VudGF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGxheWxpc3RzLm1hc3Rlci5wbGF5bGlzdHMuZmlsdGVyKGZ1bmN0aW9uIChtZWRpYSkge1xuICAgICAgcmV0dXJuICFpc0luY29tcGF0aWJsZShtZWRpYSk7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICByZXR1cm4gbmV3IFJlcHJlc2VudGF0aW9uKGhsc0hhbmRsZXIsIGUsIGUudXJpKTtcbiAgICB9KTtcbiAgfTtcbn07XG4vKipcbiAqIEBmaWxlIHBsYXliYWNrLXdhdGNoZXIuanNcbiAqXG4gKiBQbGF5YmFjayBzdGFydHMsIGFuZCBub3cgbXkgd2F0Y2ggYmVnaW5zLiBJdCBzaGFsbCBub3QgZW5kIHVudGlsIG15IGRlYXRoLiBJIHNoYWxsXG4gKiB0YWtlIG5vIHdhaXQsIGhvbGQgbm8gdW5jbGVhcmVkIHRpbWVvdXRzLCBmYXRoZXIgbm8gYmFkIHNlZWtzLiBJIHNoYWxsIHdlYXIgbm8gY3Jvd25zXG4gKiBhbmQgd2luIG5vIGdsb3J5LiBJIHNoYWxsIGxpdmUgYW5kIGRpZSBhdCBteSBwb3N0LiBJIGFtIHRoZSBjb3JyZWN0b3Igb2YgdGhlIHVuZGVyZmxvdy5cbiAqIEkgYW0gdGhlIHdhdGNoZXIgb2YgZ2Fwcy4gSSBhbSB0aGUgc2hpZWxkIHRoYXQgZ3VhcmRzIHRoZSByZWFsbXMgb2Ygc2Vla2FibGUuIEkgcGxlZGdlXG4gKiBteSBsaWZlIGFuZCBob25vciB0byB0aGUgUGxheWJhY2sgV2F0Y2gsIGZvciB0aGlzIFBsYXllciBhbmQgYWxsIHRoZSBQbGF5ZXJzIHRvIGNvbWUuXG4gKi9cbi8vIFNldCBvZiBldmVudHMgdGhhdCByZXNldCB0aGUgcGxheWJhY2std2F0Y2hlciB0aW1lIGNoZWNrIGxvZ2ljIGFuZCBjbGVhciB0aGUgdGltZW91dFxuXG5cbnZhciB0aW1lckNhbmNlbEV2ZW50cyA9IFsnc2Vla2luZycsICdzZWVrZWQnLCAncGF1c2UnLCAncGxheWluZycsICdlcnJvciddO1xuLyoqXG4gKiBAY2xhc3MgUGxheWJhY2tXYXRjaGVyXG4gKi9cblxudmFyIFBsYXliYWNrV2F0Y2hlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gUGxheWJhY2tXYXRjaGVyIG9iamVjdC5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIGFuIG9iamVjdCB0aGF0IGluY2x1ZGVzIHRoZSB0ZWNoIGFuZCBzZXR0aW5nc1xuICAgKi9cbiAgZnVuY3Rpb24gUGxheWJhY2tXYXRjaGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgUGxheWJhY2tXYXRjaGVyKTtcbiAgICB0aGlzLnRlY2hfID0gb3B0aW9ucy50ZWNoO1xuICAgIHRoaXMuc2Vla2FibGUgPSBvcHRpb25zLnNlZWthYmxlO1xuICAgIHRoaXMuc2Vla1RvID0gb3B0aW9ucy5zZWVrVG87XG4gICAgdGhpcy5hbGxvd1NlZWtzV2l0aGluVW5zYWZlTGl2ZVdpbmRvdyA9IG9wdGlvbnMuYWxsb3dTZWVrc1dpdGhpblVuc2FmZUxpdmVXaW5kb3c7XG4gICAgdGhpcy5tZWRpYSA9IG9wdGlvbnMubWVkaWE7XG4gICAgdGhpcy5jb25zZWN1dGl2ZVVwZGF0ZXMgPSAwO1xuICAgIHRoaXMubGFzdFJlY29yZGVkVGltZSA9IG51bGw7XG4gICAgdGhpcy50aW1lcl8gPSBudWxsO1xuICAgIHRoaXMuY2hlY2tDdXJyZW50VGltZVRpbWVvdXRfID0gbnVsbDtcbiAgICB0aGlzLmxvZ2dlcl8gPSBsb2dnZXIoJ1BsYXliYWNrV2F0Y2hlcicpO1xuICAgIHRoaXMubG9nZ2VyXygnaW5pdGlhbGl6ZScpO1xuXG4gICAgdmFyIGNhblBsYXlIYW5kbGVyID0gZnVuY3Rpb24gY2FuUGxheUhhbmRsZXIoKSB7XG4gICAgICByZXR1cm4gX3RoaXMubW9uaXRvckN1cnJlbnRUaW1lXygpO1xuICAgIH07XG5cbiAgICB2YXIgd2FpdGluZ0hhbmRsZXIgPSBmdW5jdGlvbiB3YWl0aW5nSGFuZGxlcigpIHtcbiAgICAgIHJldHVybiBfdGhpcy50ZWNoV2FpdGluZ18oKTtcbiAgICB9O1xuXG4gICAgdmFyIGNhbmNlbFRpbWVySGFuZGxlciA9IGZ1bmN0aW9uIGNhbmNlbFRpbWVySGFuZGxlcigpIHtcbiAgICAgIHJldHVybiBfdGhpcy5jYW5jZWxUaW1lcl8oKTtcbiAgICB9O1xuXG4gICAgdmFyIGZpeGVzQmFkU2Vla3NIYW5kbGVyID0gZnVuY3Rpb24gZml4ZXNCYWRTZWVrc0hhbmRsZXIoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZml4ZXNCYWRTZWVrc18oKTtcbiAgICB9O1xuXG4gICAgdGhpcy50ZWNoXy5vbignc2Vla2FibGVjaGFuZ2VkJywgZml4ZXNCYWRTZWVrc0hhbmRsZXIpO1xuICAgIHRoaXMudGVjaF8ub24oJ3dhaXRpbmcnLCB3YWl0aW5nSGFuZGxlcik7XG4gICAgdGhpcy50ZWNoXy5vbih0aW1lckNhbmNlbEV2ZW50cywgY2FuY2VsVGltZXJIYW5kbGVyKTtcbiAgICB0aGlzLnRlY2hfLm9uKCdjYW5wbGF5JywgY2FuUGxheUhhbmRsZXIpOyAvLyBEZWZpbmUgdGhlIGRpc3Bvc2UgZnVuY3Rpb24gdG8gY2xlYW4gdXAgb3VyIGV2ZW50c1xuXG4gICAgdGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMubG9nZ2VyXygnZGlzcG9zZScpO1xuXG4gICAgICBfdGhpcy50ZWNoXy5vZmYoJ3NlZWthYmxlY2hhbmdlZCcsIGZpeGVzQmFkU2Vla3NIYW5kbGVyKTtcblxuICAgICAgX3RoaXMudGVjaF8ub2ZmKCd3YWl0aW5nJywgd2FpdGluZ0hhbmRsZXIpO1xuXG4gICAgICBfdGhpcy50ZWNoXy5vZmYodGltZXJDYW5jZWxFdmVudHMsIGNhbmNlbFRpbWVySGFuZGxlcik7XG5cbiAgICAgIF90aGlzLnRlY2hfLm9mZignY2FucGxheScsIGNhblBsYXlIYW5kbGVyKTtcblxuICAgICAgaWYgKF90aGlzLmNoZWNrQ3VycmVudFRpbWVUaW1lb3V0Xykge1xuICAgICAgICB3aW5kb3ckMS5jbGVhclRpbWVvdXQoX3RoaXMuY2hlY2tDdXJyZW50VGltZVRpbWVvdXRfKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2FuY2VsVGltZXJfKCk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGVyaW9kaWNhbGx5IGNoZWNrIGN1cnJlbnQgdGltZSB0byBzZWUgaWYgcGxheWJhY2sgc3RvcHBlZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKFBsYXliYWNrV2F0Y2hlciwgW3tcbiAgICBrZXk6ICdtb25pdG9yQ3VycmVudFRpbWVfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbW9uaXRvckN1cnJlbnRUaW1lXygpIHtcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50VGltZV8oKTtcblxuICAgICAgaWYgKHRoaXMuY2hlY2tDdXJyZW50VGltZVRpbWVvdXRfKSB7XG4gICAgICAgIHdpbmRvdyQxLmNsZWFyVGltZW91dCh0aGlzLmNoZWNrQ3VycmVudFRpbWVUaW1lb3V0Xyk7XG4gICAgICB9IC8vIDQyID0gMjQgZnBzIC8vIDI1MCBpcyB3aGF0IFdlYmtpdCB1c2VzIC8vIEZGIHVzZXMgMTVcblxuXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudFRpbWVUaW1lb3V0XyA9IHdpbmRvdyQxLnNldFRpbWVvdXQodGhpcy5tb25pdG9yQ3VycmVudFRpbWVfLmJpbmQodGhpcyksIDI1MCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZW11bGF0ZSB0aGUgXCJ3YWl0aW5nXCIgZXZlbnQgb25cbiAgICAgKiBicm93c2VycyB0aGF0IGRvIG5vdCBlbWl0IGl0IHdoZW4gdGhleSBhcmUgd2FpdGluZyBmb3IgbW9yZVxuICAgICAqIGRhdGEgdG8gY29udGludWUgcGxheWJhY2tcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NoZWNrQ3VycmVudFRpbWVfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tDdXJyZW50VGltZV8oKSB7XG4gICAgICBpZiAodGhpcy50ZWNoXy5zZWVraW5nKCkgJiYgdGhpcy5maXhlc0JhZFNlZWtzXygpKSB7XG4gICAgICAgIHRoaXMuY29uc2VjdXRpdmVVcGRhdGVzID0gMDtcbiAgICAgICAgdGhpcy5sYXN0UmVjb3JkZWRUaW1lID0gdGhpcy50ZWNoXy5jdXJyZW50VGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRlY2hfLnBhdXNlZCgpIHx8IHRoaXMudGVjaF8uc2Vla2luZygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy50ZWNoXy5jdXJyZW50VGltZSgpO1xuICAgICAgdmFyIGJ1ZmZlcmVkID0gdGhpcy50ZWNoXy5idWZmZXJlZCgpO1xuXG4gICAgICBpZiAodGhpcy5sYXN0UmVjb3JkZWRUaW1lID09PSBjdXJyZW50VGltZSAmJiAoIWJ1ZmZlcmVkLmxlbmd0aCB8fCBjdXJyZW50VGltZSArIFNBRkVfVElNRV9ERUxUQSA+PSBidWZmZXJlZC5lbmQoYnVmZmVyZWQubGVuZ3RoIC0gMSkpKSB7XG4gICAgICAgIC8vIElmIGN1cnJlbnQgdGltZSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBmaW5hbCBidWZmZXJlZCByZWdpb24sIHRoZW4gYW55IHBsYXliYWNrXG4gICAgICAgIC8vIHN0YWxsIGlzIG1vc3QgbGlrZWx5IGNhdXNlZCBieSBidWZmZXJpbmcgaW4gYSBsb3cgYmFuZHdpZHRoIGVudmlyb25tZW50LiBUaGUgdGVjaFxuICAgICAgICAvLyBzaG91bGQgZmlyZSBhIGB3YWl0aW5nYCBldmVudCBpbiB0aGlzIHNjZW5hcmlvLCBidXQgZHVlIHRvIGJyb3dzZXIgYW5kIHRlY2hcbiAgICAgICAgLy8gaW5jb25zaXN0ZW5jaWVzLiBDYWxsaW5nIGB0ZWNoV2FpdGluZ19gIGhlcmUgYWxsb3dzIHVzIHRvIHNpbXVsYXRlXG4gICAgICAgIC8vIHJlc3BvbmRpbmcgdG8gYSBuYXRpdmUgYHdhaXRpbmdgIGV2ZW50IHdoZW4gdGhlIHRlY2ggZmFpbHMgdG8gZW1pdCBvbmUuXG4gICAgICAgIHJldHVybiB0aGlzLnRlY2hXYWl0aW5nXygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25zZWN1dGl2ZVVwZGF0ZXMgPj0gNSAmJiBjdXJyZW50VGltZSA9PT0gdGhpcy5sYXN0UmVjb3JkZWRUaW1lKSB7XG4gICAgICAgIHRoaXMuY29uc2VjdXRpdmVVcGRhdGVzKys7XG4gICAgICAgIHRoaXMud2FpdGluZ18oKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRpbWUgPT09IHRoaXMubGFzdFJlY29yZGVkVGltZSkge1xuICAgICAgICB0aGlzLmNvbnNlY3V0aXZlVXBkYXRlcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25zZWN1dGl2ZVVwZGF0ZXMgPSAwO1xuICAgICAgICB0aGlzLmxhc3RSZWNvcmRlZFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FuY2VscyBhbnkgcGVuZGluZyB0aW1lcnMgYW5kIHJlc2V0cyB0aGUgJ3RpbWV1cGRhdGUnIG1lY2hhbmlzbVxuICAgICAqIGRlc2lnbmVkIHRvIGRldGVjdCB0aGF0IHdlIGFyZSBzdGFsbGVkXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjYW5jZWxUaW1lcl8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYW5jZWxUaW1lcl8oKSB7XG4gICAgICB0aGlzLmNvbnNlY3V0aXZlVXBkYXRlcyA9IDA7XG5cbiAgICAgIGlmICh0aGlzLnRpbWVyXykge1xuICAgICAgICB0aGlzLmxvZ2dlcl8oJ2NhbmNlbFRpbWVyXycpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcl8pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVyXyA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpeGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlcmUncyBhIGJhZCBzZWVrXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgdGFrZW4gdG8gZml4IHRoZSBzZWVrXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZml4ZXNCYWRTZWVrc18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaXhlc0JhZFNlZWtzXygpIHtcbiAgICAgIHZhciBzZWVraW5nID0gdGhpcy50ZWNoXy5zZWVraW5nKCk7XG5cbiAgICAgIGlmICghc2Vla2luZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWVrYWJsZSA9IHRoaXMuc2Vla2FibGUoKTtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IHRoaXMudGVjaF8uY3VycmVudFRpbWUoKTtcbiAgICAgIHZhciBpc0FmdGVyU2Vla2FibGVSYW5nZSA9IHRoaXMuYWZ0ZXJTZWVrYWJsZVdpbmRvd18oc2Vla2FibGUsIGN1cnJlbnRUaW1lLCB0aGlzLm1lZGlhKCksIHRoaXMuYWxsb3dTZWVrc1dpdGhpblVuc2FmZUxpdmVXaW5kb3cpO1xuICAgICAgdmFyIHNlZWtUbyA9IHZvaWQgMDtcblxuICAgICAgaWYgKGlzQWZ0ZXJTZWVrYWJsZVJhbmdlKSB7XG4gICAgICAgIHZhciBzZWVrYWJsZUVuZCA9IHNlZWthYmxlLmVuZChzZWVrYWJsZS5sZW5ndGggLSAxKTsgLy8gc3luYyB0byBsaXZlIHBvaW50IChpZiBWT0QsIG91ciBzZWVrYWJsZSB3YXMgdXBkYXRlZCBhbmQgd2UncmUgc2ltcGx5IGFkanVzdGluZylcblxuICAgICAgICBzZWVrVG8gPSBzZWVrYWJsZUVuZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYmVmb3JlU2Vla2FibGVXaW5kb3dfKHNlZWthYmxlLCBjdXJyZW50VGltZSkpIHtcbiAgICAgICAgdmFyIHNlZWthYmxlU3RhcnQgPSBzZWVrYWJsZS5zdGFydCgwKTsgLy8gc3luYyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXZlIHdpbmRvd1xuICAgICAgICAvLyBwcm92aWRlIGEgYnVmZmVyIG9mIC4xIHNlY29uZHMgdG8gaGFuZGxlIHJvdW5kaW5nL2ltcHJlY2lzZSBudW1iZXJzXG5cbiAgICAgICAgc2Vla1RvID0gc2Vla2FibGVTdGFydCArIFNBRkVfVElNRV9ERUxUQTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzZWVrVG8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyXygnVHJ5aW5nIHRvIHNlZWsgb3V0c2lkZSBvZiBzZWVrYWJsZSBhdCB0aW1lICcgKyBjdXJyZW50VGltZSArICcgd2l0aCAnICsgKCdzZWVrYWJsZSByYW5nZSAnICsgcHJpbnRhYmxlUmFuZ2Uoc2Vla2FibGUpICsgJy4gU2Vla2luZyB0byAnKSArIChzZWVrVG8gKyAnLicpKTtcbiAgICAgICAgdGhpcy5zZWVrVG8oc2Vla1RvKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlciBmb3Igc2l0dWF0aW9ucyB3aGVuIHdlIGRldGVybWluZSB0aGUgcGxheWVyIGlzIHdhaXRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd3YWl0aW5nXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdhaXRpbmdfKCkge1xuICAgICAgaWYgKHRoaXMudGVjaFdhaXRpbmdfKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBBbGwgdGVjaCB3YWl0aW5nIGNoZWNrcyBmYWlsZWQuIFVzZSBsYXN0IHJlc29ydCBjb3JyZWN0aW9uXG5cblxuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy50ZWNoXy5jdXJyZW50VGltZSgpO1xuICAgICAgdmFyIGJ1ZmZlcmVkID0gdGhpcy50ZWNoXy5idWZmZXJlZCgpO1xuICAgICAgdmFyIGN1cnJlbnRSYW5nZSA9IGZpbmRSYW5nZShidWZmZXJlZCwgY3VycmVudFRpbWUpOyAvLyBTb21ldGltZXMgdGhlIHBsYXllciBjYW4gc3RhbGwgZm9yIHVua25vd24gcmVhc29ucyB3aXRoaW4gYSBjb250aWd1b3VzIGJ1ZmZlcmVkXG4gICAgICAvLyByZWdpb24gd2l0aCBubyBpbmRpY2F0aW9uIHRoYXQgYW55dGhpbmcgaXMgYW1pc3MgKHNlZW4gaW4gRmlyZWZveCkuIFNlZWtpbmcgdG9cbiAgICAgIC8vIGN1cnJlbnRUaW1lIGlzIHVzdWFsbHkgZW5vdWdoIHRvIGtpY2tzdGFydCB0aGUgcGxheWVyLiBUaGlzIGNoZWNrcyB0aGF0IHRoZSBwbGF5ZXJcbiAgICAgIC8vIGlzIGN1cnJlbnRseSB3aXRoaW4gYSBidWZmZXJlZCByZWdpb24gYmVmb3JlIGF0dGVtcHRpbmcgYSBjb3JyZWN0aXZlIHNlZWsuXG4gICAgICAvLyBDaHJvbWUgZG9lcyBub3QgYXBwZWFyIHRvIGNvbnRpbnVlIGB0aW1ldXBkYXRlYCBldmVudHMgYWZ0ZXIgYSBgd2FpdGluZ2AgZXZlbnRcbiAgICAgIC8vIHVudGlsIHRoZXJlIGlzIH4gMyBzZWNvbmRzIG9mIGZvcndhcmQgYnVmZmVyIGF2YWlsYWJsZS4gUGxheWJhY2tXYXRjaGVyIHNob3VsZCBhbHNvXG4gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgfjMgc2Vjb25kcyBvZiBmb3J3YXJkIGJ1ZmZlciBiZWZvcmUgdGFraW5nIGFueSBjb3JyZWN0aXZlIGFjdGlvblxuICAgICAgLy8gdG8gYXZvaWQgdHJpZ2dlcmluZyBhbiBgdW5rbm93bndhaXRpbmdgIGV2ZW50IHdoZW4gdGhlIG5ldHdvcmsgaXMgc2xvdy5cblxuICAgICAgaWYgKGN1cnJlbnRSYW5nZS5sZW5ndGggJiYgY3VycmVudFRpbWUgKyAzIDw9IGN1cnJlbnRSYW5nZS5lbmQoMCkpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxUaW1lcl8oKTtcbiAgICAgICAgdGhpcy5zZWVrVG8oY3VycmVudFRpbWUpO1xuICAgICAgICB0aGlzLmxvZ2dlcl8oJ1N0b3BwZWQgYXQgJyArIGN1cnJlbnRUaW1lICsgJyB3aGlsZSBpbnNpZGUgYSBidWZmZXJlZCByZWdpb24gJyArICgnWycgKyBjdXJyZW50UmFuZ2Uuc3RhcnQoMCkgKyAnIC0+ICcgKyBjdXJyZW50UmFuZ2UuZW5kKDApICsgJ10uIEF0dGVtcHRpbmcgdG8gcmVzdW1lICcpICsgJ3BsYXliYWNrIGJ5IHNlZWtpbmcgdG8gdGhlIGN1cnJlbnQgdGltZS4nKTsgLy8gdW5rbm93biB3YWl0aW5nIGNvcnJlY3Rpb25zIG1heSBiZSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgUW9TXG5cbiAgICAgICAgdGhpcy50ZWNoXy50cmlnZ2VyKHtcbiAgICAgICAgICB0eXBlOiAndXNhZ2UnLFxuICAgICAgICAgIG5hbWU6ICdobHMtdW5rbm93bi13YWl0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIGZvciBzaXR1YXRpb25zIHdoZW4gdGhlIHRlY2ggZmlyZXMgYSBgd2FpdGluZ2AgZXZlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICogICAgICAgICBUcnVlIGlmIGFuIGFjdGlvbiAob3Igbm9uZSkgd2FzIG5lZWRlZCB0byBjb3JyZWN0IHRoZSB3YWl0aW5nLiBGYWxzZSBpZiBub1xuICAgICAqICAgICAgICAgY2hlY2tzIHBhc3NlZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RlY2hXYWl0aW5nXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRlY2hXYWl0aW5nXygpIHtcbiAgICAgIHZhciBzZWVrYWJsZSA9IHRoaXMuc2Vla2FibGUoKTtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IHRoaXMudGVjaF8uY3VycmVudFRpbWUoKTtcblxuICAgICAgaWYgKHRoaXMudGVjaF8uc2Vla2luZygpICYmIHRoaXMuZml4ZXNCYWRTZWVrc18oKSkge1xuICAgICAgICAvLyBUZWNoIGlzIHNlZWtpbmcgb3IgYmFkIHNlZWsgZml4ZWQsIG5vIGFjdGlvbiBuZWVkZWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRlY2hfLnNlZWtpbmcoKSB8fCB0aGlzLnRpbWVyXyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUZWNoIGlzIHNlZWtpbmcgb3IgYWxyZWFkeSB3YWl0aW5nIG9uIGFub3RoZXIgYWN0aW9uLCBubyBhY3Rpb24gbmVlZGVkXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5iZWZvcmVTZWVrYWJsZVdpbmRvd18oc2Vla2FibGUsIGN1cnJlbnRUaW1lKSkge1xuICAgICAgICB2YXIgbGl2ZVBvaW50ID0gc2Vla2FibGUuZW5kKHNlZWthYmxlLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLmxvZ2dlcl8oJ0ZlbGwgb3V0IG9mIGxpdmUgd2luZG93IGF0IHRpbWUgJyArIGN1cnJlbnRUaW1lICsgJy4gU2Vla2luZyB0byAnICsgKCdsaXZlIHBvaW50IChzZWVrYWJsZSBlbmQpICcgKyBsaXZlUG9pbnQpKTtcbiAgICAgICAgdGhpcy5jYW5jZWxUaW1lcl8oKTtcbiAgICAgICAgdGhpcy5zZWVrVG8obGl2ZVBvaW50KTsgLy8gbGl2ZSB3aW5kb3cgcmVzeW5jcyBtYXkgYmUgdXNlZnVsIGZvciBtb25pdG9yaW5nIFFvU1xuXG4gICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgICBuYW1lOiAnaGxzLWxpdmUtcmVzeW5jJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWZmZXJlZCA9IHRoaXMudGVjaF8uYnVmZmVyZWQoKTtcbiAgICAgIHZhciBuZXh0UmFuZ2UgPSBmaW5kTmV4dFJhbmdlKGJ1ZmZlcmVkLCBjdXJyZW50VGltZSk7XG5cbiAgICAgIGlmICh0aGlzLnZpZGVvVW5kZXJmbG93XyhuZXh0UmFuZ2UsIGJ1ZmZlcmVkLCBjdXJyZW50VGltZSkpIHtcbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIHZpZGVvIHVuZGVyZmxvd2VkIGFuZCB3YXMgc3R1Y2sgaW4gYSBnYXAsIHRoZSBhdWRpbyBvdmVycGxheWVkXG4gICAgICAgIC8vIHRoZSBnYXAsIGxlYWRpbmcgY3VycmVudFRpbWUgaW50byBhIGJ1ZmZlcmVkIHJhbmdlLiBTZWVraW5nIHRvIGN1cnJlbnRUaW1lXG4gICAgICAgIC8vIGFsbG93cyB0aGUgdmlkZW8gdG8gY2F0Y2ggdXAgdG8gdGhlIGF1ZGlvIHBvc2l0aW9uIHdpdGhvdXQgbG9zaW5nIGFueSBhdWRpb1xuICAgICAgICAvLyAob25seSBzdWZmZXJpbmcgfjMgc2Vjb25kcyBvZiBmcm96ZW4gdmlkZW8gYW5kIGEgcGF1c2UgaW4gYXVkaW8gcGxheWJhY2spLlxuICAgICAgICB0aGlzLmNhbmNlbFRpbWVyXygpO1xuICAgICAgICB0aGlzLnNlZWtUbyhjdXJyZW50VGltZSk7IC8vIHZpZGVvIHVuZGVyZmxvdyBtYXkgYmUgdXNlZnVsIGZvciBtb25pdG9yaW5nIFFvU1xuXG4gICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgICBuYW1lOiAnaGxzLXZpZGVvLXVuZGVyZmxvdydcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBjaGVjayBmb3IgZ2FwXG5cblxuICAgICAgaWYgKG5leHRSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBkaWZmZXJlbmNlID0gbmV4dFJhbmdlLnN0YXJ0KDApIC0gY3VycmVudFRpbWU7XG4gICAgICAgIHRoaXMubG9nZ2VyXygnU3RvcHBlZCBhdCAnICsgY3VycmVudFRpbWUgKyAnLCBzZXR0aW5nIHRpbWVyIGZvciAnICsgZGlmZmVyZW5jZSArICcsIHNlZWtpbmcgJyArICgndG8gJyArIG5leHRSYW5nZS5zdGFydCgwKSkpO1xuICAgICAgICB0aGlzLnRpbWVyXyA9IHNldFRpbWVvdXQodGhpcy5za2lwVGhlR2FwXy5iaW5kKHRoaXMpLCBkaWZmZXJlbmNlICogMTAwMCwgY3VycmVudFRpbWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gQWxsIGNoZWNrcyBmYWlsZWQuIFJldHVybmluZyBmYWxzZSB0byBpbmRpY2F0ZSBmYWlsdXJlIHRvIGNvcnJlY3Qgd2FpdGluZ1xuXG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdhZnRlclNlZWthYmxlV2luZG93XycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFmdGVyU2Vla2FibGVXaW5kb3dfKHNlZWthYmxlLCBjdXJyZW50VGltZSwgcGxheWxpc3QpIHtcbiAgICAgIHZhciBhbGxvd1NlZWtzV2l0aGluVW5zYWZlTGl2ZVdpbmRvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG5cbiAgICAgIGlmICghc2Vla2FibGUubGVuZ3RoKSB7XG4gICAgICAgIC8vIHdlIGNhbid0IG1ha2UgYSBzb2xpZCBjYXNlIGlmIHRoZXJlJ3Mgbm8gc2Vla2FibGUsIGRlZmF1bHQgdG8gZmFsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxsb3dlZEVuZCA9IHNlZWthYmxlLmVuZChzZWVrYWJsZS5sZW5ndGggLSAxKSArIFNBRkVfVElNRV9ERUxUQTtcbiAgICAgIHZhciBpc0xpdmUgPSAhcGxheWxpc3QuZW5kTGlzdDtcblxuICAgICAgaWYgKGlzTGl2ZSAmJiBhbGxvd1NlZWtzV2l0aGluVW5zYWZlTGl2ZVdpbmRvdykge1xuICAgICAgICBhbGxvd2VkRW5kID0gc2Vla2FibGUuZW5kKHNlZWthYmxlLmxlbmd0aCAtIDEpICsgcGxheWxpc3QudGFyZ2V0RHVyYXRpb24gKiAzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFRpbWUgPiBhbGxvd2VkRW5kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnYmVmb3JlU2Vla2FibGVXaW5kb3dfJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmVmb3JlU2Vla2FibGVXaW5kb3dfKHNlZWthYmxlLCBjdXJyZW50VGltZSkge1xuICAgICAgaWYgKHNlZWthYmxlLmxlbmd0aCAmJiAvLyBjYW4ndCBmYWxsIGJlZm9yZSAwIGFuZCAwIHNlZWthYmxlIHN0YXJ0IGlkZW50aWZpZXMgVk9EIHN0cmVhbVxuICAgICAgc2Vla2FibGUuc3RhcnQoMCkgPiAwICYmIGN1cnJlbnRUaW1lIDwgc2Vla2FibGUuc3RhcnQoMCkgLSBTQUZFX1RJTUVfREVMVEEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd2aWRlb1VuZGVyZmxvd18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2aWRlb1VuZGVyZmxvd18obmV4dFJhbmdlLCBidWZmZXJlZCwgY3VycmVudFRpbWUpIHtcbiAgICAgIGlmIChuZXh0UmFuZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIG5leHQgcmFuZ2UsIHRoZXJlIGlzIHN0aWxsIGEgcG9zc2liaWxpdHkgd2UgYXJlXG4gICAgICAgIC8vIHN0dWNrIGluIGEgZ2FwIGR1ZSB0byB2aWRlbyB1bmRlcmZsb3cuXG4gICAgICAgIHZhciBnYXAgPSB0aGlzLmdhcEZyb21WaWRlb1VuZGVyZmxvd18oYnVmZmVyZWQsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoZ2FwKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJfKCdFbmNvdW50ZXJlZCBhIGdhcCBpbiB2aWRlbyBmcm9tICcgKyBnYXAuc3RhcnQgKyAnIHRvICcgKyBnYXAuZW5kICsgJy4gJyArICgnU2Vla2luZyB0byBjdXJyZW50IHRpbWUgJyArIGN1cnJlbnRUaW1lKSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaW1lciBjYWxsYmFjay4gSWYgcGxheWJhY2sgc3RpbGwgaGFzIG5vdCBwcm9jZWVkZWQsIHRoZW4gd2Ugc2Vla1xuICAgICAqIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBidWZmZXJlZCByZWdpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdza2lwVGhlR2FwXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNraXBUaGVHYXBfKHNjaGVkdWxlZEN1cnJlbnRUaW1lKSB7XG4gICAgICB2YXIgYnVmZmVyZWQgPSB0aGlzLnRlY2hfLmJ1ZmZlcmVkKCk7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnRlY2hfLmN1cnJlbnRUaW1lKCk7XG4gICAgICB2YXIgbmV4dFJhbmdlID0gZmluZE5leHRSYW5nZShidWZmZXJlZCwgY3VycmVudFRpbWUpO1xuICAgICAgdGhpcy5jYW5jZWxUaW1lcl8oKTtcblxuICAgICAgaWYgKG5leHRSYW5nZS5sZW5ndGggPT09IDAgfHwgY3VycmVudFRpbWUgIT09IHNjaGVkdWxlZEN1cnJlbnRUaW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXJfKCdza2lwVGhlR2FwXzonLCAnY3VycmVudFRpbWU6JywgY3VycmVudFRpbWUsICdzY2hlZHVsZWQgY3VycmVudFRpbWU6Jywgc2NoZWR1bGVkQ3VycmVudFRpbWUsICduZXh0UmFuZ2Ugc3RhcnQ6JywgbmV4dFJhbmdlLnN0YXJ0KDApKTsgLy8gb25seSBzZWVrIGlmIHdlIHN0aWxsIGhhdmUgbm90IHBsYXllZFxuXG4gICAgICB0aGlzLnNlZWtUbyhuZXh0UmFuZ2Uuc3RhcnQoMCkgKyBUSU1FX0ZVREdFX0ZBQ1RPUik7XG4gICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAndXNhZ2UnLFxuICAgICAgICBuYW1lOiAnaGxzLWdhcC1za2lwJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2FwRnJvbVZpZGVvVW5kZXJmbG93XycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdhcEZyb21WaWRlb1VuZGVyZmxvd18oYnVmZmVyZWQsIGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBBdCBsZWFzdCBpbiBDaHJvbWUsIGlmIHRoZXJlIGlzIGEgZ2FwIGluIHRoZSB2aWRlbyBidWZmZXIsIHRoZSBhdWRpbyB3aWxsIGNvbnRpbnVlXG4gICAgICAvLyBwbGF5aW5nIGZvciB+MyBzZWNvbmRzIGFmdGVyIHRoZSB2aWRlbyBnYXAgc3RhcnRzLiBUaGlzIGlzIGRvbmUgdG8gYWNjb3VudCBmb3JcbiAgICAgIC8vIHZpZGVvIGJ1ZmZlciB1bmRlcmZsb3cvdW5kZXJydW4gKG5vdGUgdGhhdCB0aGlzIGlzIG5vdCBkb25lIHdoZW4gdGhlcmUgaXMgYXVkaW9cbiAgICAgIC8vIGJ1ZmZlciB1bmRlcmZsb3cvdW5kZXJydW4gLS0gaW4gdGhhdCBjYXNlIHRoZSB2aWRlbyB3aWxsIHN0b3AgYXMgc29vbiBhcyBpdFxuICAgICAgLy8gZW5jb3VudGVycyB0aGUgZ2FwLCBhcyBhdWRpbyBzdGFsbHMgYXJlIG1vcmUgbm90aWNlYWJsZS9qYXJyaW5nIHRvIGEgdXNlciB0aGFuXG4gICAgICAvLyB2aWRlbyBzdGFsbHMpLiBUaGUgcGxheWVyJ3MgdGltZSB3aWxsIHJlZmxlY3QgdGhlIHBsYXl0aHJvdWdoIG9mIGF1ZGlvLCBzbyB0aGVcbiAgICAgIC8vIHRpbWUgd2lsbCBhcHBlYXIgYXMgaWYgd2UgYXJlIGluIGEgYnVmZmVyZWQgcmVnaW9uLCBldmVuIGlmIHdlIGFyZSBzdHVjayBpbiBhXG4gICAgICAvLyBcImdhcC5cIlxuICAgICAgLy9cbiAgICAgIC8vIEV4YW1wbGU6XG4gICAgICAvLyB2aWRlbyBidWZmZXI6ICAgMCA9PiAxMC4xLCAxMC4yID0+IDIwXG4gICAgICAvLyBhdWRpbyBidWZmZXI6ICAgMCA9PiAyMFxuICAgICAgLy8gb3ZlcmFsbCBidWZmZXI6IDAgPT4gMTAuMSwgMTAuMiA9PiAyMFxuICAgICAgLy8gY3VycmVudCB0aW1lOiAxM1xuICAgICAgLy9cbiAgICAgIC8vIENocm9tZSdzIHZpZGVvIGZyb3plIGF0IDEwIHNlY29uZHMsIHdoZXJlIHRoZSB2aWRlbyBidWZmZXIgZW5jb3VudGVyZWQgdGhlIGdhcCxcbiAgICAgIC8vIGhvd2V2ZXIsIHRoZSBhdWRpbyBjb250aW51ZWQgcGxheWluZyB1bnRpbCBpdCByZWFjaGVkIH4zIHNlY29uZHMgcGFzdCB0aGUgZ2FwXG4gICAgICAvLyAoMTMgc2Vjb25kcyksIGF0IHdoaWNoIHBvaW50IGl0IHN0b3BzIGFzIHdlbGwuIFNpbmNlIGN1cnJlbnQgdGltZSBpcyBwYXN0IHRoZVxuICAgICAgLy8gZ2FwLCBmaW5kTmV4dFJhbmdlIHdpbGwgcmV0dXJuIG5vIHJhbmdlcy5cbiAgICAgIC8vXG4gICAgICAvLyBUbyBjaGVjayBmb3IgdGhpcyBpc3N1ZSwgd2Ugc2VlIGlmIHRoZXJlIGlzIGEgZ2FwIHRoYXQgc3RhcnRzIHNvbWV3aGVyZSB3aXRoaW5cbiAgICAgIC8vIGEgMyBzZWNvbmQgcmFuZ2UgKDMgc2Vjb25kcyArLy0gMSBzZWNvbmQpIGJhY2sgZnJvbSBvdXIgY3VycmVudCB0aW1lLlxuICAgICAgdmFyIGdhcHMgPSBmaW5kR2FwcyhidWZmZXJlZCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2Fwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3RhcnQgPSBnYXBzLnN0YXJ0KGkpO1xuICAgICAgICB2YXIgZW5kID0gZ2Fwcy5lbmQoaSk7IC8vIGdhcCBpcyBzdGFydHMgbm8gbW9yZSB0aGFuIDQgc2Vjb25kcyBiYWNrXG5cbiAgICAgICAgaWYgKGN1cnJlbnRUaW1lIC0gc3RhcnQgPCA0ICYmIGN1cnJlbnRUaW1lIC0gc3RhcnQgPiAyKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogZW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFBsYXliYWNrV2F0Y2hlcjtcbn0oKTtcblxudmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICBlcnJvckludGVydmFsOiAzMCxcbiAgZ2V0U291cmNlOiBmdW5jdGlvbiBnZXRTb3VyY2UobmV4dCkge1xuICAgIHZhciB0ZWNoID0gdGhpcy50ZWNoKHtcbiAgICAgIElXaWxsTm90VXNlVGhpc0luUGx1Z2luczogdHJ1ZVxuICAgIH0pO1xuICAgIHZhciBzb3VyY2VPYmogPSB0ZWNoLmN1cnJlbnRTb3VyY2VfO1xuICAgIHJldHVybiBuZXh0KHNvdXJjZU9iaik7XG4gIH1cbn07XG4vKipcbiAqIE1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBwbHVnaW5cbiAqXG4gKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyIGEgcmVmZXJlbmNlIHRvIGEgdmlkZW9qcyBQbGF5ZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gYW4gb2JqZWN0IHdpdGggcGx1Z2luIG9wdGlvbnNcbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGluaXRQbHVnaW4gPSBmdW5jdGlvbiBpbml0UGx1Z2luKHBsYXllciwgb3B0aW9ucykge1xuICB2YXIgbGFzdENhbGxlZCA9IDA7XG4gIHZhciBzZWVrVG8gPSAwO1xuICB2YXIgbG9jYWxPcHRpb25zID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyhkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIHBsYXllci5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgcGxheWVyLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgIG5hbWU6ICdobHMtZXJyb3ItcmVsb2FkLWluaXRpYWxpemVkJ1xuICAgIH0pO1xuICB9KTtcbiAgLyoqXG4gICAqIFBsYXllciBtb2RpZmljYXRpb25zIHRvIHBlcmZvcm0gdGhhdCBtdXN0IHdhaXQgdW50aWwgYGxvYWRlZG1ldGFkYXRhYFxuICAgKiBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdmFyIGxvYWRlZE1ldGFkYXRhSGFuZGxlciA9IGZ1bmN0aW9uIGxvYWRlZE1ldGFkYXRhSGFuZGxlcigpIHtcbiAgICBpZiAoc2Vla1RvKSB7XG4gICAgICBwbGF5ZXIuY3VycmVudFRpbWUoc2Vla1RvKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBTZXQgdGhlIHNvdXJjZSBvbiB0aGUgcGxheWVyIGVsZW1lbnQsIHBsYXksIGFuZCBzZWVrIGlmIG5lY2Vzc2FyeVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBzb3VyY2UgdXJsIGFuZCBtaW1lLXR5cGUgdG8gcGxheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHZhciBzZXRTb3VyY2UgPSBmdW5jdGlvbiBzZXRTb3VyY2Uoc291cmNlT2JqKSB7XG4gICAgaWYgKHNvdXJjZU9iaiA9PT0gbnVsbCB8fCBzb3VyY2VPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZWtUbyA9IHBsYXllci5kdXJhdGlvbigpICE9PSBJbmZpbml0eSAmJiBwbGF5ZXIuY3VycmVudFRpbWUoKSB8fCAwO1xuICAgIHBsYXllci5vbmUoJ2xvYWRlZG1ldGFkYXRhJywgbG9hZGVkTWV0YWRhdGFIYW5kbGVyKTtcbiAgICBwbGF5ZXIuc3JjKHNvdXJjZU9iaik7XG4gICAgcGxheWVyLnRyaWdnZXIoe1xuICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgIG5hbWU6ICdobHMtZXJyb3ItcmVsb2FkJ1xuICAgIH0pO1xuICAgIHBsYXllci5wbGF5KCk7XG4gIH07XG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGdldCBhIHNvdXJjZSBmcm9tIGVpdGhlciB0aGUgYnVpbHQtaW4gZ2V0U291cmNlIGZ1bmN0aW9uXG4gICAqIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIHByb3ZpZGVkIHZpYSB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHZhciBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiBlcnJvckhhbmRsZXIoKSB7XG4gICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gcmVsb2FkIHRoZSBzb3VyY2UgaWYgYSBzb3VyY2UtcmVsb2FkIG9jY3VycmVkIGJlZm9yZVxuICAgIC8vICdlcnJvckludGVydmFsJyB0aW1lIGhhcyBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHNvdXJjZS1yZWxvYWRcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RDYWxsZWQgPCBsb2NhbE9wdGlvbnMuZXJyb3JJbnRlcnZhbCAqIDEwMDApIHtcbiAgICAgIHBsYXllci50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgbmFtZTogJ2hscy1lcnJvci1yZWxvYWQtY2FuY2VsZWQnXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWxvY2FsT3B0aW9ucy5nZXRTb3VyY2UgfHwgdHlwZW9mIGxvY2FsT3B0aW9ucy5nZXRTb3VyY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZpZGVvanMkMS5sb2cuZXJyb3IoJ0VSUk9SOiByZWxvYWRTb3VyY2VPbkVycm9yIC0gVGhlIG9wdGlvbiBnZXRTb3VyY2UgbXVzdCBiZSBhIGZ1bmN0aW9uIScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhc3RDYWxsZWQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBsb2NhbE9wdGlvbnMuZ2V0U291cmNlLmNhbGwocGxheWVyLCBzZXRTb3VyY2UpO1xuICB9O1xuICAvKipcbiAgICogVW5iaW5kIGFueSBldmVudCBoYW5kbGVycyB0aGF0IHdlcmUgYm91bmQgYnkgdGhlIHBsdWdpblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHZhciBjbGVhbnVwRXZlbnRzID0gZnVuY3Rpb24gY2xlYW51cEV2ZW50cygpIHtcbiAgICBwbGF5ZXIub2ZmKCdsb2FkZWRtZXRhZGF0YScsIGxvYWRlZE1ldGFkYXRhSGFuZGxlcik7XG4gICAgcGxheWVyLm9mZignZXJyb3InLCBlcnJvckhhbmRsZXIpO1xuICAgIHBsYXllci5vZmYoJ2Rpc3Bvc2UnLCBjbGVhbnVwRXZlbnRzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENsZWFudXAgYmVmb3JlIHJlLWluaXRpYWxpemluZyB0aGUgcGx1Z2luXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbbmV3T3B0aW9uc10gYW4gb2JqZWN0IHdpdGggcGx1Z2luIG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICB2YXIgcmVpbml0UGx1Z2luID0gZnVuY3Rpb24gcmVpbml0UGx1Z2luKG5ld09wdGlvbnMpIHtcbiAgICBjbGVhbnVwRXZlbnRzKCk7XG4gICAgaW5pdFBsdWdpbihwbGF5ZXIsIG5ld09wdGlvbnMpO1xuICB9O1xuXG4gIHBsYXllci5vbignZXJyb3InLCBlcnJvckhhbmRsZXIpO1xuICBwbGF5ZXIub24oJ2Rpc3Bvc2UnLCBjbGVhbnVwRXZlbnRzKTsgLy8gT3ZlcndyaXRlIHRoZSBwbHVnaW4gZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gY29ycmVjdGx5IGNsZWFudXAgYmVmb3JlXG4gIC8vIGluaXRpYWxpemluZyB0aGUgcGx1Z2luXG5cbiAgcGxheWVyLnJlbG9hZFNvdXJjZU9uRXJyb3IgPSByZWluaXRQbHVnaW47XG59O1xuLyoqXG4gKiBSZWxvYWQgdGhlIHNvdXJjZSB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkIGFzIGxvbmcgYXMgdGhlcmVcbiAqIHdhc24ndCBhbiBlcnJvciBwcmV2aW91c2x5IHdpdGhpbiB0aGUgbGFzdCAzMCBzZWNvbmRzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBhbiBvYmplY3Qgd2l0aCBwbHVnaW4gb3B0aW9uc1xuICovXG5cblxudmFyIHJlbG9hZFNvdXJjZU9uRXJyb3IgPSBmdW5jdGlvbiByZWxvYWRTb3VyY2VPbkVycm9yKG9wdGlvbnMpIHtcbiAgaW5pdFBsdWdpbih0aGlzLCBvcHRpb25zKTtcbn07XG5cbnZhciB2ZXJzaW9uJDEgPSBcIjEuMTAuNlwiOyAvLyBzaW5jZSBWSFMgaGFuZGxlcyBITFMgYW5kIERBU0ggKGFuZCBpbiB0aGUgZnV0dXJlLCBtb3JlIHR5cGVzKSwgdXNlICogdG8gY2FwdHVyZSBhbGxcblxudmlkZW9qcyQxLnVzZSgnKicsIGZ1bmN0aW9uIChwbGF5ZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBzZXRTb3VyY2U6IGZ1bmN0aW9uIHNldFNvdXJjZShzcmNPYmosIG5leHQpIHtcbiAgICAgIC8vIHBhc3MgbnVsbCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc291cmNlIGlzIG5vdCByZWplY3RlZFxuICAgICAgbmV4dChudWxsLCBzcmNPYmopO1xuICAgIH0sXG4gICAgLy8gVkhTIG5lZWRzIHRvIGtub3cgd2hlbiBzZWVrcyBoYXBwZW4uIEZvciBleHRlcm5hbCBzZWVrcyAoZ2VuZXJhdGVkIGF0IHRoZSBwbGF5ZXJcbiAgICAvLyBsZXZlbCksIHRoaXMgbWlkZGxld2FyZSB3aWxsIGNhcHR1cmUgdGhlIGFjdGlvbi4gRm9yIGludGVybmFsIHNlZWtzIChnZW5lcmF0ZWQgYXRcbiAgICAvLyB0aGUgdGVjaCBsZXZlbCksIHdlIHVzZSBhIHdyYXBwZWQgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IG9uIG91ciBvd25cbiAgICAvLyAoc3BlY2lmaWVkIGVsc2V3aGVyZSkuXG4gICAgc2V0Q3VycmVudFRpbWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRUaW1lKHRpbWUpIHtcbiAgICAgIGlmIChwbGF5ZXIudmhzICYmIHBsYXllci5jdXJyZW50U291cmNlKCkuc3JjID09PSBwbGF5ZXIudmhzLnNvdXJjZV8uc3JjKSB7XG4gICAgICAgIHBsYXllci52aHMuc2V0Q3VycmVudFRpbWUodGltZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH0sXG4gICAgLy8gU3luYyBWSFMgYWZ0ZXIgcGxheSByZXF1ZXN0cy5cbiAgICAvLyBUaGlzIHNwZWNpZmljYWxseSBoYW5kbGVzIHJlcGxheSB3aGVyZSB0aGUgb3JkZXIgb2YgYWN0aW9ucyBpc1xuICAgIC8vIHBsYXksIHZpZGVvIGVsZW1lbnQgd2lsbCBzZWVrIHRvIDAgKHNraXBwaW5nIHRoZSBzZXRDdXJyZW50VGltZSBtaWRkbGV3YXJlKVxuICAgIC8vIHRoZW4gdHJpZ2dlcnMgYSBwbGF5IGV2ZW50LlxuICAgIHBsYXk6IGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgICBpZiAocGxheWVyLnZocyAmJiBwbGF5ZXIuY3VycmVudFNvdXJjZSgpLnNyYyA9PT0gcGxheWVyLnZocy5zb3VyY2VfLnNyYykge1xuICAgICAgICBwbGF5ZXIudmhzLnNldEN1cnJlbnRUaW1lKHBsYXllci50ZWNoXy5jdXJyZW50VGltZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59KTtcbi8qKlxuICogQGZpbGUgdmlkZW9qcy1odHRwLXN0cmVhbWluZy5qc1xuICpcbiAqIFRoZSBtYWluIGZpbGUgZm9yIHRoZSBITFMgcHJvamVjdC5cbiAqIExpY2Vuc2U6IGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL3ZpZGVvanMtaHR0cC1zdHJlYW1pbmcvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbnZhciBIbHMkMSA9IHtcbiAgUGxheWxpc3RMb2FkZXI6IFBsYXlsaXN0TG9hZGVyLFxuICBQbGF5bGlzdDogUGxheWxpc3QsXG4gIERlY3J5cHRlcjogRGVjcnlwdGVyLFxuICBBc3luY1N0cmVhbTogQXN5bmNTdHJlYW0sXG4gIGRlY3J5cHQ6IGRlY3J5cHQsXG4gIHV0aWxzOiB1dGlscyxcbiAgU1RBTkRBUkRfUExBWUxJU1RfU0VMRUNUT1I6IGxhc3RCYW5kd2lkdGhTZWxlY3RvcixcbiAgSU5JVElBTF9QTEFZTElTVF9TRUxFQ1RPUjogbG93ZXN0Qml0cmF0ZUNvbXBhdGlibGVWYXJpYW50U2VsZWN0b3IsXG4gIGNvbXBhcmVQbGF5bGlzdEJhbmR3aWR0aDogY29tcGFyZVBsYXlsaXN0QmFuZHdpZHRoLFxuICBjb21wYXJlUGxheWxpc3RSZXNvbHV0aW9uOiBjb21wYXJlUGxheWxpc3RSZXNvbHV0aW9uLFxuICB4aHI6IHhockZhY3RvcnkoKVxufTsgLy8gRGVmaW5lIGdldHRlci9zZXR0ZXJzIGZvciBjb25maWcgcHJvcGVyaXRlc1xuXG5bJ0dPQUxfQlVGRkVSX0xFTkdUSCcsICdNQVhfR09BTF9CVUZGRVJfTEVOR1RIJywgJ0dPQUxfQlVGRkVSX0xFTkdUSF9SQVRFJywgJ0JVRkZFUl9MT1dfV0FURVJfTElORScsICdNQVhfQlVGRkVSX0xPV19XQVRFUl9MSU5FJywgJ0JVRkZFUl9MT1dfV0FURVJfTElORV9SQVRFJywgJ0JBTkRXSURUSF9WQVJJQU5DRSddLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhscyQxLCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICB2aWRlb2pzJDEubG9nLndhcm4oJ3VzaW5nIEhscy4nICsgcHJvcCArICcgaXMgVU5TQUZFIGJlIHN1cmUgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nJyk7XG4gICAgICByZXR1cm4gQ29uZmlnW3Byb3BdO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQkJDEodmFsdWUpIHtcbiAgICAgIHZpZGVvanMkMS5sb2cud2FybigndXNpbmcgSGxzLicgKyBwcm9wICsgJyBpcyBVTlNBRkUgYmUgc3VyZSB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcnKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHZpZGVvanMkMS5sb2cud2FybigndmFsdWUgb2YgSGxzLicgKyBwcm9wICsgJyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgQ29uZmlnW3Byb3BdID0gdmFsdWU7XG4gICAgfVxuICB9KTtcbn0pO1xudmFyIExPQ0FMX1NUT1JBR0VfS0VZJDEgPSAndmlkZW9qcy12aHMnO1xuXG52YXIgc2ltcGxlVHlwZUZyb21Tb3VyY2VUeXBlID0gZnVuY3Rpb24gc2ltcGxlVHlwZUZyb21Tb3VyY2VUeXBlKHR5cGUpIHtcbiAgdmFyIG1wZWd1cmxSRSA9IC9eKGF1ZGlvfHZpZGVvfGFwcGxpY2F0aW9uKVxcLyh4LXx2bmRcXC5hcHBsZVxcLik/bXBlZ3VybC9pO1xuXG4gIGlmIChtcGVndXJsUkUudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnaGxzJztcbiAgfVxuXG4gIHZhciBkYXNoUkUgPSAvXmFwcGxpY2F0aW9uXFwvZGFzaFxcK3htbC9pO1xuXG4gIGlmIChkYXNoUkUudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZGFzaCc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkSW5kZXggb2YgdGhlIFF1YWxpdHlMZXZlbExpc3Qgd2hlbiBhIG1lZGlhY2hhbmdlIGhhcHBlbnMgaW4gaGxzLlxuICpcbiAqIEBwYXJhbSB7UXVhbGl0eUxldmVsTGlzdH0gcXVhbGl0eUxldmVscyBUaGUgUXVhbGl0eUxldmVsTGlzdCB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge1BsYXlsaXN0TG9hZGVyfSBwbGF5bGlzdExvYWRlciBQbGF5bGlzdExvYWRlciBjb250YWluaW5nIHRoZSBuZXcgbWVkaWEgaW5mby5cbiAqIEBmdW5jdGlvbiBoYW5kbGVIbHNNZWRpYUNoYW5nZVxuICovXG5cblxudmFyIGhhbmRsZUhsc01lZGlhQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlSGxzTWVkaWFDaGFuZ2UocXVhbGl0eUxldmVscywgcGxheWxpc3RMb2FkZXIpIHtcbiAgdmFyIG5ld1BsYXlsaXN0ID0gcGxheWxpc3RMb2FkZXIubWVkaWEoKTtcbiAgdmFyIHNlbGVjdGVkSW5kZXggPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YWxpdHlMZXZlbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocXVhbGl0eUxldmVsc1tpXS5pZCA9PT0gbmV3UGxheWxpc3QudXJpKSB7XG4gICAgICBzZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHF1YWxpdHlMZXZlbHMuc2VsZWN0ZWRJbmRleF8gPSBzZWxlY3RlZEluZGV4O1xuICBxdWFsaXR5TGV2ZWxzLnRyaWdnZXIoe1xuICAgIHNlbGVjdGVkSW5kZXg6IHNlbGVjdGVkSW5kZXgsXG4gICAgdHlwZTogJ2NoYW5nZSdcbiAgfSk7XG59O1xuLyoqXG4gKiBBZGRzIHF1YWxpdHkgbGV2ZWxzIHRvIGxpc3Qgb25jZSBwbGF5bGlzdCBtZXRhZGF0YSBpcyBhdmFpbGFibGVcbiAqXG4gKiBAcGFyYW0ge1F1YWxpdHlMZXZlbExpc3R9IHF1YWxpdHlMZXZlbHMgVGhlIFF1YWxpdHlMZXZlbExpc3QgdG8gYXR0YWNoIGV2ZW50cyB0by5cbiAqIEBwYXJhbSB7T2JqZWN0fSBobHMgSGxzIG9iamVjdCB0byBsaXN0ZW4gdG8gZm9yIG1lZGlhIGV2ZW50cy5cbiAqIEBmdW5jdGlvbiBoYW5kbGVIbHNMb2FkZWRNZXRhZGF0YVxuICovXG5cblxudmFyIGhhbmRsZUhsc0xvYWRlZE1ldGFkYXRhID0gZnVuY3Rpb24gaGFuZGxlSGxzTG9hZGVkTWV0YWRhdGEocXVhbGl0eUxldmVscywgaGxzKSB7XG4gIGhscy5yZXByZXNlbnRhdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXApIHtcbiAgICBxdWFsaXR5TGV2ZWxzLmFkZFF1YWxpdHlMZXZlbChyZXApO1xuICB9KTtcbiAgaGFuZGxlSGxzTWVkaWFDaGFuZ2UocXVhbGl0eUxldmVscywgaGxzLnBsYXlsaXN0cyk7XG59OyAvLyBITFMgaXMgYSBzb3VyY2UgaGFuZGxlciwgbm90IGEgdGVjaC4gTWFrZSBzdXJlIGF0dGVtcHRzIHRvIHVzZSBpdFxuLy8gYXMgb25lIGRvIG5vdCBjYXVzZSBleGNlcHRpb25zLlxuXG5cbkhscyQxLmNhblBsYXlTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB2aWRlb2pzJDEubG9nLndhcm4oJ0hMUyBpcyBubyBsb25nZXIgYSB0ZWNoLiBQbGVhc2UgcmVtb3ZlIGl0IGZyb20gJyArICd5b3VyIHBsYXllclxcJ3MgdGVjaE9yZGVyLicpO1xufTtcblxudmFyIGVtZUtleVN5c3RlbXMgPSBmdW5jdGlvbiBlbWVLZXlTeXN0ZW1zKGtleVN5c3RlbU9wdGlvbnMsIHZpZGVvUGxheWxpc3QsIGF1ZGlvUGxheWxpc3QpIHtcbiAgaWYgKCFrZXlTeXN0ZW1PcHRpb25zKSB7XG4gICAgcmV0dXJuIGtleVN5c3RlbU9wdGlvbnM7XG4gIH0gLy8gdXBzZXJ0IHRoZSBjb250ZW50IHR5cGVzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBwbGF5bGlzdFxuXG5cbiAgdmFyIGtleVN5c3RlbUNvbnRlbnRUeXBlcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleVN5c3RlbSBpbiBrZXlTeXN0ZW1PcHRpb25zKSB7XG4gICAga2V5U3lzdGVtQ29udGVudFR5cGVzW2tleVN5c3RlbV0gPSB7XG4gICAgICBhdWRpb0NvbnRlbnRUeXBlOiAnYXVkaW8vbXA0OyBjb2RlY3M9XCInICsgYXVkaW9QbGF5bGlzdC5hdHRyaWJ1dGVzLkNPREVDUyArICdcIicsXG4gICAgICB2aWRlb0NvbnRlbnRUeXBlOiAndmlkZW8vbXA0OyBjb2RlY3M9XCInICsgdmlkZW9QbGF5bGlzdC5hdHRyaWJ1dGVzLkNPREVDUyArICdcIidcbiAgICB9O1xuXG4gICAgaWYgKHZpZGVvUGxheWxpc3QuY29udGVudFByb3RlY3Rpb24gJiYgdmlkZW9QbGF5bGlzdC5jb250ZW50UHJvdGVjdGlvbltrZXlTeXN0ZW1dICYmIHZpZGVvUGxheWxpc3QuY29udGVudFByb3RlY3Rpb25ba2V5U3lzdGVtXS5wc3NoKSB7XG4gICAgICBrZXlTeXN0ZW1Db250ZW50VHlwZXNba2V5U3lzdGVtXS5wc3NoID0gdmlkZW9QbGF5bGlzdC5jb250ZW50UHJvdGVjdGlvbltrZXlTeXN0ZW1dLnBzc2g7XG4gICAgfSAvLyB2aWRlb2pzLWNvbnRyaWItZW1lIGFjY2VwdHMgdGhlIG9wdGlvbiBvZiBzcGVjaWZ5aW5nOiAnY29tLnNvbWUuY2RtJzogJ3VybCdcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIHByZXZlbnQgb3ZlcndyaXRpbmcgdGhlIFVSTCBlbnRpcmVseVxuXG5cbiAgICBpZiAodHlwZW9mIGtleVN5c3RlbU9wdGlvbnNba2V5U3lzdGVtXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGtleVN5c3RlbUNvbnRlbnRUeXBlc1trZXlTeXN0ZW1dLnVybCA9IGtleVN5c3RlbU9wdGlvbnNba2V5U3lzdGVtXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyhrZXlTeXN0ZW1PcHRpb25zLCBrZXlTeXN0ZW1Db250ZW50VHlwZXMpO1xufTtcblxudmFyIHNldHVwRW1lT3B0aW9ucyA9IGZ1bmN0aW9uIHNldHVwRW1lT3B0aW9ucyhobHNIYW5kbGVyKSB7XG4gIGlmIChobHNIYW5kbGVyLm9wdGlvbnNfLnNvdXJjZVR5cGUgIT09ICdkYXNoJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwbGF5ZXIgPSB2aWRlb2pzJDEucGxheWVyc1tobHNIYW5kbGVyLnRlY2hfLm9wdGlvbnNfLnBsYXllcklkXTtcblxuICBpZiAocGxheWVyLmVtZSkge1xuICAgIHZhciBzb3VyY2VPcHRpb25zID0gZW1lS2V5U3lzdGVtcyhobHNIYW5kbGVyLnNvdXJjZV8ua2V5U3lzdGVtcywgaGxzSGFuZGxlci5wbGF5bGlzdHMubWVkaWEoKSwgaGxzSGFuZGxlci5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1lZGlhVHlwZXNfLkFVRElPLmFjdGl2ZVBsYXlsaXN0TG9hZGVyLm1lZGlhKCkpO1xuXG4gICAgaWYgKHNvdXJjZU9wdGlvbnMpIHtcbiAgICAgIHBsYXllci5jdXJyZW50U291cmNlKCkua2V5U3lzdGVtcyA9IHNvdXJjZU9wdGlvbnM7IC8vIHdvcmtzIGFyb3VuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04OTU0NDlcblxuICAgICAgaWYgKHBsYXllci5lbWUuaW5pdGlhbGl6ZU1lZGlhS2V5cykge1xuICAgICAgICBwbGF5ZXIuZW1lLmluaXRpYWxpemVNZWRpYUtleXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBnZXRWaHNMb2NhbFN0b3JhZ2UgPSBmdW5jdGlvbiBnZXRWaHNMb2NhbFN0b3JhZ2UoKSB7XG4gIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHN0b3JlZE9iamVjdCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShMT0NBTF9TVE9SQUdFX0tFWSQxKTtcblxuICBpZiAoIXN0b3JlZE9iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWRPYmplY3QpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc29tZW9uZSBtYXkgaGF2ZSB0YW1wZXJlZCB3aXRoIHRoZSB2YWx1ZVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG52YXIgdXBkYXRlVmhzTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24gdXBkYXRlVmhzTG9jYWxTdG9yYWdlKG9wdGlvbnMpIHtcbiAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG9iamVjdFRvU3RvcmUgPSBnZXRWaHNMb2NhbFN0b3JhZ2UoKTtcbiAgb2JqZWN0VG9TdG9yZSA9IG9iamVjdFRvU3RvcmUgPyB2aWRlb2pzJDEubWVyZ2VPcHRpb25zKG9iamVjdFRvU3RvcmUsIG9wdGlvbnMpIDogb3B0aW9ucztcblxuICB0cnkge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFX0tFWSQxLCBKU09OLnN0cmluZ2lmeShvYmplY3RUb1N0b3JlKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaHJvd3MgaWYgc3RvcmFnZSBpcyBmdWxsIChlLmcuLCBhbHdheXMgb24gaU9TIDUrIFNhZmFyaSBwcml2YXRlIG1vZGUsIHdoZXJlXG4gICAgLy8gc3RvcmFnZSBpcyBzZXQgdG8gMCkuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2Uvc2V0SXRlbSNFeGNlcHRpb25zXG4gICAgLy8gTm8gbmVlZCB0byBwZXJmb3JtIGFueSBvcGVyYXRpb24uXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdFRvU3RvcmU7XG59O1xuLyoqXG4gKiBXaGV0aGVyIHRoZSBicm93c2VyIGhhcyBidWlsdC1pbiBITFMgc3VwcG9ydC5cbiAqL1xuXG5cbkhscyQxLnN1cHBvcnRzTmF0aXZlSGxzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOyAvLyBuYXRpdmUgSExTIGlzIGRlZmluaXRlbHkgbm90IHN1cHBvcnRlZCBpZiBIVE1MNSB2aWRlbyBpc24ndFxuXG4gIGlmICghdmlkZW9qcyQxLmdldFRlY2goJ0h0bWw1JykuaXNTdXBwb3J0ZWQoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBITFMgbWFuaWZlc3RzIGNhbiBnbyBieSBtYW55IG1pbWUtdHlwZXNcblxuXG4gIHZhciBjYW5QbGF5ID0gWy8vIEFwcGxlIHNhbnRpb25lZFxuICAnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnLCAvLyBBcHBsZSBzYW5jdGlvbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAnYXVkaW8vbXBlZ3VybCcsIC8vIFZlcnkgY29tbW9uXG4gICdhdWRpby94LW1wZWd1cmwnLCAvLyBWZXJ5IGNvbW1vblxuICAnYXBwbGljYXRpb24veC1tcGVndXJsJywgLy8gSW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzc1xuICAndmlkZW8veC1tcGVndXJsJywgJ3ZpZGVvL21wZWd1cmwnLCAnYXBwbGljYXRpb24vbXBlZ3VybCddO1xuICByZXR1cm4gY2FuUGxheS5zb21lKGZ1bmN0aW9uIChjYW5JdFBsYXkpIHtcbiAgICByZXR1cm4gL21heWJlfHByb2JhYmx5L2kudGVzdCh2aWRlby5jYW5QbGF5VHlwZShjYW5JdFBsYXkpKTtcbiAgfSk7XG59KCk7XG5cbkhscyQxLnN1cHBvcnRzTmF0aXZlRGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF2aWRlb2pzJDEuZ2V0VGVjaCgnSHRtbDUnKS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC9tYXliZXxwcm9iYWJseS9pLnRlc3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKS5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vZGFzaCt4bWwnKSk7XG59KCk7XG5cbkhscyQxLnN1cHBvcnRzVHlwZU5hdGl2ZWx5ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09ICdobHMnKSB7XG4gICAgcmV0dXJuIEhscyQxLnN1cHBvcnRzTmF0aXZlSGxzO1xuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdkYXNoJykge1xuICAgIHJldHVybiBIbHMkMS5zdXBwb3J0c05hdGl2ZURhc2g7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuLyoqXG4gKiBITFMgaXMgYSBzb3VyY2UgaGFuZGxlciwgbm90IGEgdGVjaC4gTWFrZSBzdXJlIGF0dGVtcHRzIHRvIHVzZSBpdFxuICogYXMgb25lIGRvIG5vdCBjYXVzZSBleGNlcHRpb25zLlxuICovXG5cblxuSGxzJDEuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB2aWRlb2pzJDEubG9nLndhcm4oJ0hMUyBpcyBubyBsb25nZXIgYSB0ZWNoLiBQbGVhc2UgcmVtb3ZlIGl0IGZyb20gJyArICd5b3VyIHBsYXllclxcJ3MgdGVjaE9yZGVyLicpO1xufTtcblxudmFyIENvbXBvbmVudCQxID0gdmlkZW9qcyQxLmdldENvbXBvbmVudCgnQ29tcG9uZW50Jyk7XG4vKipcbiAqIFRoZSBIbHMgSGFuZGxlciBvYmplY3QsIHdoZXJlIHdlIG9yY2hlc3RyYXRlIGFsbCBvZiB0aGUgcGFydHNcbiAqIG9mIEhMUyB0byBpbnRlcmFjdCB3aXRoIHZpZGVvLmpzXG4gKlxuICogQGNsYXNzIEhsc0hhbmRsZXJcbiAqIEBleHRlbmRzIHZpZGVvanMuQ29tcG9uZW50XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIHRoZSBzb3J1Y2Ugb2JqZWN0XG4gKiBAcGFyYW0ge1RlY2h9IHRlY2ggdGhlIHBhcmVudCB0ZWNoIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3B0aW9uYWwgYW5kIHJlcXVpcmVkIG9wdGlvbnNcbiAqL1xuXG52YXIgSGxzSGFuZGxlciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKEhsc0hhbmRsZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEhsc0hhbmRsZXIoc291cmNlLCB0ZWNoLCBvcHRpb25zKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgSGxzSGFuZGxlcik7IC8vIHRlY2gucGxheWVyKCkgaXMgZGVwcmVjYXRlZCBidXQgc2V0dXAgYSByZWZlcmVuY2UgdG8gSExTIGZvclxuICAgIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG5cbiAgICB2YXIgX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChIbHNIYW5kbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSGxzSGFuZGxlcikpLmNhbGwodGhpcywgdGVjaCwgb3B0aW9ucy5obHMpKTtcblxuICAgIGlmICh0ZWNoLm9wdGlvbnNfICYmIHRlY2gub3B0aW9uc18ucGxheWVySWQpIHtcbiAgICAgIHZhciBfcGxheWVyID0gdmlkZW9qcyQxKHRlY2gub3B0aW9uc18ucGxheWVySWQpO1xuXG4gICAgICBpZiAoIV9wbGF5ZXIuaGFzT3duUHJvcGVydHkoJ2hscycpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfcGxheWVyLCAnaGxzJywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgdmlkZW9qcyQxLmxvZy53YXJuKCdwbGF5ZXIuaGxzIGlzIGRlcHJlY2F0ZWQuIFVzZSBwbGF5ZXIudGVjaCgpLmhscyBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgdGVjaC50cmlnZ2VyKHtcbiAgICAgICAgICAgICAgdHlwZTogJ3VzYWdlJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2hscy1wbGF5ZXItYWNjZXNzJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFNldCB1cCBhIHJlZmVyZW5jZSB0byB0aGUgSGxzSGFuZGxlciBmcm9tIHBsYXllci52aHMuIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHN0YXJ0XG4gICAgICAvLyBtaWdyYXRpbmcgZnJvbSBwbGF5ZXIudGVjaF8uaGxzLi4uIHRvIHBsYXllci52aHMuLi4gZm9yIEFQSSBhY2Nlc3MuIEFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzbid0IHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvcm0gb2YgcmVmZXJlbmNlIGZvciB2aWRlby5qcyAoc2luY2UgYWxsIEFQSXMgc2hvdWxkXG4gICAgICAvLyBiZSBwcm92aWRlZCB0aHJvdWdoIGNvcmUgdmlkZW8uanMpLCBpdCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBwbHVnaW5zLCBhbmQgdmhzXG4gICAgICAvLyB3aWxsIGFjdCBhY2NvcmRpbmdseS5cblxuXG4gICAgICBfcGxheWVyLnZocyA9IF90aGlzOyAvLyBkZXByZWNhdGVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgX3BsYXllci5kYXNoID0gX3RoaXM7XG4gICAgICBfdGhpcy5wbGF5ZXJfID0gX3BsYXllcjtcbiAgICB9XG5cbiAgICBfdGhpcy50ZWNoXyA9IHRlY2g7XG4gICAgX3RoaXMuc291cmNlXyA9IHNvdXJjZTtcbiAgICBfdGhpcy5zdGF0cyA9IHt9O1xuXG4gICAgX3RoaXMuc2V0T3B0aW9uc18oKTtcblxuICAgIGlmIChfdGhpcy5vcHRpb25zXy5vdmVycmlkZU5hdGl2ZSAmJiB0ZWNoLm92ZXJyaWRlTmF0aXZlQXVkaW9UcmFja3MgJiYgdGVjaC5vdmVycmlkZU5hdGl2ZVZpZGVvVHJhY2tzKSB7XG4gICAgICB0ZWNoLm92ZXJyaWRlTmF0aXZlQXVkaW9UcmFja3ModHJ1ZSk7XG4gICAgICB0ZWNoLm92ZXJyaWRlTmF0aXZlVmlkZW9UcmFja3ModHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChfdGhpcy5vcHRpb25zXy5vdmVycmlkZU5hdGl2ZSAmJiAodGVjaC5mZWF0dXJlc05hdGl2ZVZpZGVvVHJhY2tzIHx8IHRlY2guZmVhdHVyZXNOYXRpdmVBdWRpb1RyYWNrcykpIHtcbiAgICAgIC8vIG92ZXJyaWRpbmcgbmF0aXZlIEhMUyBvbmx5IHdvcmtzIGlmIGF1ZGlvIHRyYWNrcyBoYXZlIGJlZW4gZW11bGF0ZWRcbiAgICAgIC8vIGVycm9yIGVhcmx5IGlmIHdlJ3JlIG1pc2NvbmZpZ3VyZWRcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3ZlcnJpZGluZyBuYXRpdmUgSExTIHJlcXVpcmVzIGVtdWxhdGVkIHRyYWNrcy4gJyArICdTZWUgaHR0cHM6Ly9naXQuaW8vdk1wakInKTtcbiAgICB9IC8vIGxpc3RlbiBmb3IgZnVsbHNjcmVlbmNoYW5nZSBldmVudHMgZm9yIHRoaXMgcGxheWVyIHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gYWRqdXN0IG91ciBxdWFsaXR5IHNlbGVjdGlvbiBxdWlja2x5XG5cblxuICAgIF90aGlzLm9uKGRvY3VtZW50LCBbJ2Z1bGxzY3JlZW5jaGFuZ2UnLCAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsICdtb3pmdWxsc2NyZWVuY2hhbmdlJywgJ01TRnVsbHNjcmVlbkNoYW5nZSddLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBmdWxsc2NyZWVuRWxlbWVudCA9IGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50IHx8IGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IHx8IGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQ7XG5cbiAgICAgIGlmIChmdWxsc2NyZWVuRWxlbWVudCAmJiBmdWxsc2NyZWVuRWxlbWVudC5jb250YWlucyhfdGhpcy50ZWNoXy5lbCgpKSkge1xuICAgICAgICBfdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLnNtb290aFF1YWxpdHlDaGFuZ2VfKCk7XG4gICAgICB9XG4gICAgfSk7IC8vIEhhbmRsZSBzZWVraW5nIHdoZW4gbG9vcGluZyAtIG1pZGRsZXdhcmUgZG9lc24ndCBoYW5kbGUgdGhpcyBzZWVrIGV2ZW50IGZyb20gdGhlIHRlY2hcblxuXG4gICAgX3RoaXMub24oX3RoaXMudGVjaF8sICdzZWVraW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMudGVjaF8uY3VycmVudFRpbWUoKSA9PT0gMCAmJiB0aGlzLnRlY2hfLnBsYXllcl8ubG9vcCgpKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWUoMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy50ZWNoXywgJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXykge1xuICAgICAgICB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ucGF1c2VMb2FkaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfdGhpcy5vbihfdGhpcy50ZWNoXywgJ3BsYXknLCBfdGhpcy5wbGF5KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEhsc0hhbmRsZXIsIFt7XG4gICAga2V5OiAnc2V0T3B0aW9uc18nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcHRpb25zXygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzOyAvLyBkZWZhdWx0c1xuXG5cbiAgICAgIHRoaXMub3B0aW9uc18ud2l0aENyZWRlbnRpYWxzID0gdGhpcy5vcHRpb25zXy53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG4gICAgICB0aGlzLm9wdGlvbnNfLmhhbmRsZU1hbmlmZXN0UmVkaXJlY3RzID0gdGhpcy5vcHRpb25zXy5oYW5kbGVNYW5pZmVzdFJlZGlyZWN0cyB8fCBmYWxzZTtcbiAgICAgIHRoaXMub3B0aW9uc18ubGltaXRSZW5kaXRpb25CeVBsYXllckRpbWVuc2lvbnMgPSB0aGlzLm9wdGlvbnNfLmxpbWl0UmVuZGl0aW9uQnlQbGF5ZXJEaW1lbnNpb25zID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIHRoaXMub3B0aW9uc18uc21vb3RoUXVhbGl0eUNoYW5nZSA9IHRoaXMub3B0aW9uc18uc21vb3RoUXVhbGl0eUNoYW5nZSB8fCBmYWxzZTtcbiAgICAgIHRoaXMub3B0aW9uc18udXNlQmFuZHdpZHRoRnJvbUxvY2FsU3RvcmFnZSA9IHR5cGVvZiB0aGlzLnNvdXJjZV8udXNlQmFuZHdpZHRoRnJvbUxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyB0aGlzLnNvdXJjZV8udXNlQmFuZHdpZHRoRnJvbUxvY2FsU3RvcmFnZSA6IHRoaXMub3B0aW9uc18udXNlQmFuZHdpZHRoRnJvbUxvY2FsU3RvcmFnZSB8fCBmYWxzZTtcbiAgICAgIHRoaXMub3B0aW9uc18uY3VzdG9tVGFnUGFyc2VycyA9IHRoaXMub3B0aW9uc18uY3VzdG9tVGFnUGFyc2VycyB8fCBbXTtcbiAgICAgIHRoaXMub3B0aW9uc18uY3VzdG9tVGFnTWFwcGVycyA9IHRoaXMub3B0aW9uc18uY3VzdG9tVGFnTWFwcGVycyB8fCBbXTtcbiAgICAgIHRoaXMub3B0aW9uc18uY2FjaGVFbmNyeXB0aW9uS2V5cyA9IHRoaXMub3B0aW9uc18uY2FjaGVFbmNyeXB0aW9uS2V5cyB8fCBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnNfLmJsYWNrbGlzdER1cmF0aW9uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLm9wdGlvbnNfLmJsYWNrbGlzdER1cmF0aW9uID0gNSAqIDYwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9uc18uYmFuZHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zXy51c2VCYW5kd2lkdGhGcm9tTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgdmFyIHN0b3JlZE9iamVjdCA9IGdldFZoc0xvY2FsU3RvcmFnZSgpO1xuXG4gICAgICAgICAgaWYgKHN0b3JlZE9iamVjdCAmJiBzdG9yZWRPYmplY3QuYmFuZHdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNfLmJhbmR3aWR0aCA9IHN0b3JlZE9iamVjdC5iYW5kd2lkdGg7XG4gICAgICAgICAgICB0aGlzLnRlY2hfLnRyaWdnZXIoe1xuICAgICAgICAgICAgICB0eXBlOiAndXNhZ2UnLFxuICAgICAgICAgICAgICBuYW1lOiAnaGxzLWJhbmR3aWR0aC1mcm9tLWxvY2FsLXN0b3JhZ2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RvcmVkT2JqZWN0ICYmIHN0b3JlZE9iamVjdC50aHJvdWdocHV0KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNfLnRocm91Z2hwdXQgPSBzdG9yZWRPYmplY3QudGhyb3VnaHB1dDtcbiAgICAgICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcih7XG4gICAgICAgICAgICAgIHR5cGU6ICd1c2FnZScsXG4gICAgICAgICAgICAgIG5hbWU6ICdobHMtdGhyb3VnaHB1dC1mcm9tLWxvY2FsLXN0b3JhZ2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaWYgYmFuZHdpZHRoIHdhcyBub3Qgc2V0IGJ5IG9wdGlvbnMgb3IgcHVsbGVkIGZyb20gbG9jYWwgc3RvcmFnZSwgc3RhcnQgcGxheWxpc3RcbiAgICAgIC8vIHNlbGVjdGlvbiBhdCBhIHJlYXNvbmFibGUgYmFuZHdpZHRoXG5cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnNfLmJhbmR3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zXy5iYW5kd2lkdGggPSBDb25maWcuSU5JVElBTF9CQU5EV0lEVEg7XG4gICAgICB9IC8vIElmIHRoZSBiYW5kd2lkdGggbnVtYmVyIGlzIHVuY2hhbmdlZCBmcm9tIHRoZSBpbml0aWFsIHNldHRpbmdcbiAgICAgIC8vIHRoZW4gdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGVuYWJsZUxvd0luaXRpYWxQbGF5bGlzdCBvcHRpb25cblxuXG4gICAgICB0aGlzLm9wdGlvbnNfLmVuYWJsZUxvd0luaXRpYWxQbGF5bGlzdCA9IHRoaXMub3B0aW9uc18uZW5hYmxlTG93SW5pdGlhbFBsYXlsaXN0ICYmIHRoaXMub3B0aW9uc18uYmFuZHdpZHRoID09PSBDb25maWcuSU5JVElBTF9CQU5EV0lEVEg7IC8vIGdyYWIgb3B0aW9ucyBwYXNzZWQgdG8gcGxheWVyLnNyY1xuXG4gICAgICBbJ3dpdGhDcmVkZW50aWFscycsICdsaW1pdFJlbmRpdGlvbkJ5UGxheWVyRGltZW5zaW9ucycsICdiYW5kd2lkdGgnLCAnc21vb3RoUXVhbGl0eUNoYW5nZScsICdjdXN0b21UYWdQYXJzZXJzJywgJ2N1c3RvbVRhZ01hcHBlcnMnLCAnaGFuZGxlTWFuaWZlc3RSZWRpcmVjdHMnLCAnY2FjaGVFbmNyeXB0aW9uS2V5cyddLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5zb3VyY2VfW29wdGlvbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbnNfW29wdGlvbl0gPSBfdGhpczIuc291cmNlX1tvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGltaXRSZW5kaXRpb25CeVBsYXllckRpbWVuc2lvbnMgPSB0aGlzLm9wdGlvbnNfLmxpbWl0UmVuZGl0aW9uQnlQbGF5ZXJEaW1lbnNpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYWxsZWQgd2hlbiBwbGF5ZXIuc3JjIGdldHMgY2FsbGVkLCBoYW5kbGUgYSBuZXcgc291cmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjIHRoZSBzb3VyY2Ugb2JqZWN0IHRvIGhhbmRsZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzcmMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzcmMoX3NyYywgdHlwZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7IC8vIGRvIG5vdGhpbmcgaWYgdGhlIHNyYyBpcyBmYWxzZXlcblxuXG4gICAgICBpZiAoIV9zcmMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldE9wdGlvbnNfKCk7IC8vIGFkZCBtYXN0ZXIgcGxheWxpc3QgY29udHJvbGxlciBvcHRpb25zXG5cbiAgICAgIHRoaXMub3B0aW9uc18udXJsID0gdGhpcy5zb3VyY2VfLnNyYztcbiAgICAgIHRoaXMub3B0aW9uc18udGVjaCA9IHRoaXMudGVjaF87XG4gICAgICB0aGlzLm9wdGlvbnNfLmV4dGVybkhscyA9IEhscyQxO1xuICAgICAgdGhpcy5vcHRpb25zXy5zb3VyY2VUeXBlID0gc2ltcGxlVHlwZUZyb21Tb3VyY2VUeXBlKHR5cGUpOyAvLyBXaGVuZXZlciB3ZSBzZWVrIGludGVybmFsbHksIHdlIHNob3VsZCB1cGRhdGUgYm90aCB0aGUgdGVjaCBhbmQgY2FsbCBvdXIgb3duXG4gICAgICAvLyBzZXRDdXJyZW50VGltZSBmdW5jdGlvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBcInNlZWtpbmdcIiBldmVudHMgYXJlbid0IGFsd2F5c1xuICAgICAgLy8gcmVsaWFibGUuIEV4dGVybmFsIHNlZWtzICh2aWEgdGhlIHBsYXllciBvYmplY3QpIGFyZSBoYW5kbGVkIHZpYSBtaWRkbGV3YXJlLlxuXG4gICAgICB0aGlzLm9wdGlvbnNfLnNlZWtUbyA9IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIF90aGlzMy50ZWNoXy5zZXRDdXJyZW50VGltZSh0aW1lKTtcblxuICAgICAgICBfdGhpczMuc2V0Q3VycmVudFRpbWUodGltZSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8gPSBuZXcgTWFzdGVyUGxheWxpc3RDb250cm9sbGVyKHRoaXMub3B0aW9uc18pO1xuICAgICAgdGhpcy5wbGF5YmFja1dhdGNoZXJfID0gbmV3IFBsYXliYWNrV2F0Y2hlcih2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHRoaXMub3B0aW9uc18sIHtcbiAgICAgICAgc2Vla2FibGU6IGZ1bmN0aW9uIHNlZWthYmxlJCQxKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuc2Vla2FibGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVkaWE6IGZ1bmN0aW9uIG1lZGlhKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tZWRpYSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGxheWVyID0gdmlkZW9qcyQxLnBsYXllcnNbX3RoaXMzLnRlY2hfLm9wdGlvbnNfLnBsYXllcklkXTtcbiAgICAgICAgcGxheWVyLmVycm9yKF90aGlzMy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLmVycm9yKTtcbiAgICAgIH0pOyAvLyBgdGhpc2AgaW4gc2VsZWN0UGxheWxpc3Qgc2hvdWxkIGJlIHRoZSBIbHNIYW5kbGVyIGZvciBiYWNrd2FyZHNcbiAgICAgIC8vIGNvbXBhdGliaWxpdHkgd2l0aCA8IHYyXG5cbiAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5zZWxlY3RQbGF5bGlzdCA9IHRoaXMuc2VsZWN0UGxheWxpc3QgPyB0aGlzLnNlbGVjdFBsYXlsaXN0LmJpbmQodGhpcykgOiBIbHMkMS5TVEFOREFSRF9QTEFZTElTVF9TRUxFQ1RPUi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLnNlbGVjdEluaXRpYWxQbGF5bGlzdCA9IEhscyQxLklOSVRJQUxfUExBWUxJU1RfU0VMRUNUT1IuYmluZCh0aGlzKTsgLy8gcmUtZXhwb3NlIHNvbWUgaW50ZXJuYWwgb2JqZWN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCA8IHYyXG5cbiAgICAgIHRoaXMucGxheWxpc3RzID0gdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1hc3RlclBsYXlsaXN0TG9hZGVyXztcbiAgICAgIHRoaXMubWVkaWFTb3VyY2UgPSB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWVkaWFTb3VyY2U7IC8vIFByb3h5IGFzc2lnbm1lbnQgb2Ygc29tZSBwcm9wZXJ0aWVzIHRvIHRoZSBtYXN0ZXIgcGxheWxpc3RcbiAgICAgIC8vIGNvbnRyb2xsZXIuIFVzaW5nIGEgY3VzdG9tIHByb3BlcnR5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gd2l0aCA8IHYyXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICAgICAgc2VsZWN0UGxheWxpc3Q6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8uc2VsZWN0UGxheWxpc3Q7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCQkMShzZWxlY3RQbGF5bGlzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLnNlbGVjdFBsYXlsaXN0ID0gc2VsZWN0UGxheWxpc3QuYmluZCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRocm91Z2hwdXQ6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWFpblNlZ21lbnRMb2FkZXJfLnRocm91Z2hwdXQucmF0ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHRocm91Z2hwdXQpIHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tYWluU2VnbWVudExvYWRlcl8udGhyb3VnaHB1dC5yYXRlID0gdGhyb3VnaHB1dDsgLy8gQnkgc2V0dGluZyBgY291bnRgIHRvIDEgdGhlIHRocm91Z2hwdXQgdmFsdWUgYmVjb21lcyB0aGUgc3RhcnRpbmcgdmFsdWVcbiAgICAgICAgICAgIC8vIGZvciB0aGUgY3VtdWxhdGl2ZSBhdmVyYWdlXG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tYWluU2VnbWVudExvYWRlcl8udGhyb3VnaHB1dC5jb3VudCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiYW5kd2lkdGg6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWFpblNlZ21lbnRMb2FkZXJfLmJhbmR3aWR0aDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKGJhbmR3aWR0aCkge1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1haW5TZWdtZW50TG9hZGVyXy5iYW5kd2lkdGggPSBiYW5kd2lkdGg7IC8vIHNldHRpbmcgdGhlIGJhbmR3aWR0aCBtYW51YWxseSByZXNldHMgdGhlIHRocm91Z2hwdXQgY291bnRlclxuICAgICAgICAgICAgLy8gYGNvdW50YCBpcyBzZXQgdG8gemVybyB0aGF0IGN1cnJlbnQgdmFsdWUgb2YgYHJhdGVgIGlzbid0IGluY2x1ZGVkXG4gICAgICAgICAgICAvLyBpbiB0aGUgY3VtdWxhdGl2ZSBhdmVyYWdlXG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tYWluU2VnbWVudExvYWRlcl8udGhyb3VnaHB1dCA9IHtcbiAgICAgICAgICAgICAgcmF0ZTogMCxcbiAgICAgICAgICAgICAgY291bnQ6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgc3lzdGVtQmFuZHdpZHRoYCBpcyBhIGNvbWJpbmF0aW9uIG9mIHR3byBzZXJpYWwgcHJvY2Vzc2VzIGJpdC1yYXRlcy4gVGhlIGZpcnN0XG4gICAgICAgICAqIGlzIHRoZSBuZXR3b3JrIGJpdHJhdGUgcHJvdmlkZWQgYnkgYGJhbmR3aWR0aGAgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGJpdHJhdGUgb2ZcbiAgICAgICAgICogdGhlIGVudGlyZSBwcm9jZXNzIGFmdGVyIHRoYXQgLSBkZWNyeXB0aW9uLCB0cmFuc211eGluZywgYW5kIGFwcGVuZGluZyAtIHByb3ZpZGVkXG4gICAgICAgICAqIGJ5IGB0aHJvdWdocHV0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogU2luY2UgdGhlIHR3byBwcm9jZXNzIGFyZSBzZXJpYWwsIHRoZSBvdmVyYWxsIHN5c3RlbSBiYW5kd2lkdGggaXMgZ2l2ZW4gYnk6XG4gICAgICAgICAqICAgc3lzQmFuZHdpZHRoID0gMSAvICgxIC8gYmFuZHdpZHRoICsgMSAvIHRocm91Z2hwdXQpXG4gICAgICAgICAqL1xuICAgICAgICBzeXN0ZW1CYW5kd2lkdGg6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHZhciBpbnZCYW5kd2lkdGggPSAxIC8gKHRoaXMuYmFuZHdpZHRoIHx8IDEpO1xuICAgICAgICAgICAgdmFyIGludlRocm91Z2hwdXQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRocm91Z2hwdXQgPiAwKSB7XG4gICAgICAgICAgICAgIGludlRocm91Z2hwdXQgPSAxIC8gdGhpcy50aHJvdWdocHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW52VGhyb3VnaHB1dCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzeXN0ZW1CaXRyYXRlID0gTWF0aC5mbG9vcigxIC8gKGludkJhbmR3aWR0aCArIGludlRocm91Z2hwdXQpKTtcbiAgICAgICAgICAgIHJldHVybiBzeXN0ZW1CaXRyYXRlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQkJDEoKSB7XG4gICAgICAgICAgICB2aWRlb2pzJDEubG9nLmVycm9yKCdUaGUgXCJzeXN0ZW1CYW5kd2lkdGhcIiBwcm9wZXJ0eSBpcyByZWFkLW9ubHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zXy5iYW5kd2lkdGgpIHtcbiAgICAgICAgdGhpcy5iYW5kd2lkdGggPSB0aGlzLm9wdGlvbnNfLmJhbmR3aWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9uc18udGhyb3VnaHB1dCkge1xuICAgICAgICB0aGlzLnRocm91Z2hwdXQgPSB0aGlzLm9wdGlvbnNfLnRocm91Z2hwdXQ7XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMuc3RhdHMsIHtcbiAgICAgICAgYmFuZHdpZHRoOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLmJhbmR3aWR0aCB8fCAwO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWRpYVJlcXVlc3RzOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWVkaWFSZXF1ZXN0c18oKSB8fCAwO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWRpYVJlcXVlc3RzQWJvcnRlZDoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1lZGlhUmVxdWVzdHNBYm9ydGVkXygpIHx8IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1lZGlhUmVxdWVzdHNUaW1lZG91dDoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1lZGlhUmVxdWVzdHNUaW1lZG91dF8oKSB8fCAwO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWRpYVJlcXVlc3RzRXJyb3JlZDoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1lZGlhUmVxdWVzdHNFcnJvcmVkXygpIHx8IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1lZGlhVHJhbnNmZXJEdXJhdGlvbjoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm1lZGlhVHJhbnNmZXJEdXJhdGlvbl8oKSB8fCAwO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWRpYUJ5dGVzVHJhbnNmZXJyZWQ6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tZWRpYUJ5dGVzVHJhbnNmZXJyZWRfKCkgfHwgMDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgbWVkaWFTZWNvbmRzTG9hZGVkOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWVkaWFTZWNvbmRzTG9hZGVkXygpIHx8IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJ1ZmZlcmVkOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGltZVJhbmdlc1RvQXJyYXkoX3RoaXMzLnRlY2hfLmJ1ZmZlcmVkKCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50VGltZToge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy50ZWNoXy5jdXJyZW50VGltZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50U291cmNlOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLnRlY2hfLmN1cnJlbnRTb3VyY2VfO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50VGVjaDoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy50ZWNoXy5uYW1lXztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMudGVjaF8uZHVyYXRpb24oKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgbWFzdGVyOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLnBsYXlsaXN0cy5tYXN0ZXI7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXllckRpbWVuc2lvbnM6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMudGVjaF8uY3VycmVudERpbWVuc2lvbnMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgc2Vla2FibGU6IHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzVG9BcnJheShfdGhpczMudGVjaF8uc2Vla2FibGUoKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVzdGFtcDoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHZpZGVvUGxheWJhY2tRdWFsaXR5OiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLnRlY2hfLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy50ZWNoXy5vbmUoJ2NhbnBsYXknLCB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8uc2V0dXBGaXJzdFBsYXkuYmluZCh0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8pKTtcbiAgICAgIHRoaXMudGVjaF8ub24oJ2JhbmR3aWR0aHVwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzMy5vcHRpb25zXy51c2VCYW5kd2lkdGhGcm9tTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgdXBkYXRlVmhzTG9jYWxTdG9yYWdlKHtcbiAgICAgICAgICAgIGJhbmR3aWR0aDogX3RoaXMzLmJhbmR3aWR0aCxcbiAgICAgICAgICAgIHRocm91Z2hwdXQ6IE1hdGgucm91bmQoX3RoaXMzLnRocm91Z2hwdXQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLm9uKCdzZWxlY3RlZGluaXRpYWxtZWRpYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQWRkIHRoZSBtYW51YWwgcmVuZGl0aW9uIG1peC1pbiB0byBIbHNIYW5kbGVyXG4gICAgICAgIHJlbmRpdGlvblNlbGVjdGlvbk1peGluKF90aGlzMyk7XG4gICAgICAgIHNldHVwRW1lT3B0aW9ucyhfdGhpczMpO1xuICAgICAgfSk7IC8vIHRoZSBiYW5kd2lkdGggb2YgdGhlIHByaW1hcnkgc2VnbWVudCBsb2FkZXIgaXMgb3VyIGJlc3RcbiAgICAgIC8vIGVzdGltYXRlIG9mIG92ZXJhbGwgYmFuZHdpZHRoXG5cbiAgICAgIHRoaXMub24odGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLCAncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudGVjaF8udHJpZ2dlcigncHJvZ3Jlc3MnKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50ZWNoXy5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMuc2V0dXBRdWFsaXR5TGV2ZWxzXygpO1xuICAgICAgfSk7IC8vIGRvIG5vdGhpbmcgaWYgdGhlIHRlY2ggaGFzIGJlZW4gZGlzcG9zZWQgYWxyZWFkeVxuICAgICAgLy8gdGhpcyBjYW4gb2NjdXIgaWYgc29tZW9uZSBzZXRzIHRoZSBzcmMgaW4gcGxheWVyLnJlYWR5KCksIGZvciBpbnN0YW5jZVxuXG4gICAgICBpZiAoIXRoaXMudGVjaF8uZWwoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGVjaF8uc3JjKHZpZGVvanMkMS5VUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tZWRpYVNvdXJjZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgcXVhbGl0eSBsZXZlbHMgYW5kIHNldHMgbGlzdGVuZXJzIHRvIHVwZGF0ZSB0aGVtLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXR1cFF1YWxpdHlMZXZlbHNfXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0dXBRdWFsaXR5TGV2ZWxzXycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwUXVhbGl0eUxldmVsc18oKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHBsYXllciA9IHZpZGVvanMkMS5wbGF5ZXJzW3RoaXMudGVjaF8ub3B0aW9uc18ucGxheWVySWRdO1xuXG4gICAgICBpZiAocGxheWVyICYmIHBsYXllci5xdWFsaXR5TGV2ZWxzKSB7XG4gICAgICAgIHRoaXMucXVhbGl0eUxldmVsc18gPSBwbGF5ZXIucXVhbGl0eUxldmVscygpO1xuICAgICAgICB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ub24oJ3NlbGVjdGVkaW5pdGlhbG1lZGlhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGhhbmRsZUhsc0xvYWRlZE1ldGFkYXRhKF90aGlzNC5xdWFsaXR5TGV2ZWxzXywgX3RoaXM0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGxheWxpc3RzLm9uKCdtZWRpYWNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVIbHNNZWRpYUNoYW5nZShfdGhpczQucXVhbGl0eUxldmVsc18sIF90aGlzNC5wbGF5bGlzdHMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmVnaW4gcGxheWluZyB0aGUgdmlkZW8uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3BsYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwbGF5KCkge1xuICAgICAgdGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfLnBsYXkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb24gaW4gTWFzdGVyUGxheWxpc3RDb250cm9sbGVyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NldEN1cnJlbnRUaW1lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUpIHtcbiAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5zZXRDdXJyZW50VGltZShjdXJyZW50VGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGEgd3JhcHBlciBhcm91bmQgdGhlIGZ1bmN0aW9uIGluIE1hc3RlclBsYXlsaXN0Q29udHJvbGxlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkdXJhdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGR1cmF0aW9uJCQxKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5kdXJhdGlvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBhIHdyYXBwZXIgYXJvdW5kIHRoZSBmdW5jdGlvbiBpbiBNYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2Vla2FibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZWVrYWJsZSQkMSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8uc2Vla2FibGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWJvcnQgYWxsIG91dHN0YW5kaW5nIHdvcmsgYW5kIGNsZWFudXAuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Rpc3Bvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgaWYgKHRoaXMucGxheWJhY2tXYXRjaGVyXykge1xuICAgICAgICB0aGlzLnBsYXliYWNrV2F0Y2hlcl8uZGlzcG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXN0ZXJQbGF5bGlzdENvbnRyb2xsZXJfKSB7XG4gICAgICAgIHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5kaXNwb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnF1YWxpdHlMZXZlbHNfKSB7XG4gICAgICAgIHRoaXMucXVhbGl0eUxldmVsc18uZGlzcG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wbGF5ZXJfKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsYXllcl8udmhzO1xuICAgICAgICBkZWxldGUgdGhpcy5wbGF5ZXJfLmRhc2g7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsYXllcl8uaGxzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50ZWNoXyAmJiB0aGlzLnRlY2hfLmhscykge1xuICAgICAgICBkZWxldGUgdGhpcy50ZWNoXy5obHM7XG4gICAgICB9XG5cbiAgICAgIGdldCQxKEhsc0hhbmRsZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSGxzSGFuZGxlci5wcm90b3R5cGUpLCAnZGlzcG9zZScsIHRoaXMpLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29udmVydFRvUHJvZ3JhbVRpbWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb252ZXJ0VG9Qcm9ncmFtVGltZSh0aW1lLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGdldFByb2dyYW1UaW1lKHtcbiAgICAgICAgcGxheWxpc3Q6IHRoaXMubWFzdGVyUGxheWxpc3RDb250cm9sbGVyXy5tZWRpYSgpLFxuICAgICAgICB0aW1lOiB0aW1lLFxuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgIH0pO1xuICAgIH0gLy8gdGhlIHBsYXllciBtdXN0IGJlIHBsYXlpbmcgYmVmb3JlIGNhbGxpbmcgdGhpc1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZWVrVG9Qcm9ncmFtVGltZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNlZWtUb1Byb2dyYW1UaW1lJCQxKHByb2dyYW1UaW1lLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHBhdXNlQWZ0ZXJTZWVrID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgICAgdmFyIHJldHJ5Q291bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDI7XG4gICAgICByZXR1cm4gc2Vla1RvUHJvZ3JhbVRpbWUoe1xuICAgICAgICBwcm9ncmFtVGltZTogcHJvZ3JhbVRpbWUsXG4gICAgICAgIHBsYXlsaXN0OiB0aGlzLm1hc3RlclBsYXlsaXN0Q29udHJvbGxlcl8ubWVkaWEoKSxcbiAgICAgICAgcmV0cnlDb3VudDogcmV0cnlDb3VudCxcbiAgICAgICAgcGF1c2VBZnRlclNlZWs6IHBhdXNlQWZ0ZXJTZWVrLFxuICAgICAgICBzZWVrVG86IHRoaXMub3B0aW9uc18uc2Vla1RvLFxuICAgICAgICB0ZWNoOiB0aGlzLm9wdGlvbnNfLnRlY2gsXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBIbHNIYW5kbGVyO1xufShDb21wb25lbnQkMSk7XG4vKipcbiAqIFRoZSBTb3VyY2UgSGFuZGxlciBvYmplY3QsIHdoaWNoIGluZm9ybXMgdmlkZW8uanMgd2hhdCBhZGRpdGlvbmFsXG4gKiBNSU1FIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIHNldHMgdXAgcGxheWJhY2suIEl0IGlzIHJlZ2lzdGVyZWRcbiAqIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGFwcHJvcHJpYXRlIHRlY2ggYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZlxuICogdGhlIGJyb3dzZXIgaXQgaXMgcnVubmluZyBpbi4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB1c2Ugb3IgbW9kaWZ5XG4gKiB0aGlzIG9iamVjdCBpbiBub3JtYWwgdXNhZ2UuXG4gKi9cblxuXG52YXIgSGxzU291cmNlSGFuZGxlciA9IHtcbiAgbmFtZTogJ3ZpZGVvanMtaHR0cC1zdHJlYW1pbmcnLFxuICBWRVJTSU9OOiB2ZXJzaW9uJDEsXG4gIGNhbkhhbmRsZVNvdXJjZTogZnVuY3Rpb24gY2FuSGFuZGxlU291cmNlKHNyY09iaikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbG9jYWxPcHRpb25zID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyh2aWRlb2pzJDEub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIEhsc1NvdXJjZUhhbmRsZXIuY2FuUGxheVR5cGUoc3JjT2JqLnR5cGUsIGxvY2FsT3B0aW9ucyk7XG4gIH0sXG4gIGhhbmRsZVNvdXJjZTogZnVuY3Rpb24gaGFuZGxlU291cmNlKHNvdXJjZSwgdGVjaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgbG9jYWxPcHRpb25zID0gdmlkZW9qcyQxLm1lcmdlT3B0aW9ucyh2aWRlb2pzJDEub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGVjaC5obHMgPSBuZXcgSGxzSGFuZGxlcihzb3VyY2UsIHRlY2gsIGxvY2FsT3B0aW9ucyk7XG4gICAgdGVjaC5obHMueGhyID0geGhyRmFjdG9yeSgpO1xuICAgIHRlY2guaGxzLnNyYyhzb3VyY2Uuc3JjLCBzb3VyY2UudHlwZSk7XG4gICAgcmV0dXJuIHRlY2guaGxzO1xuICB9LFxuICBjYW5QbGF5VHlwZTogZnVuY3Rpb24gY2FuUGxheVR5cGUodHlwZSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBfdmlkZW9qcyRtZXJnZU9wdGlvbnMgPSB2aWRlb2pzJDEubWVyZ2VPcHRpb25zKHZpZGVvanMkMS5vcHRpb25zLCBvcHRpb25zKSxcbiAgICAgICAgb3ZlcnJpZGVOYXRpdmUgPSBfdmlkZW9qcyRtZXJnZU9wdGlvbnMuaGxzLm92ZXJyaWRlTmF0aXZlO1xuXG4gICAgdmFyIHN1cHBvcnRlZFR5cGUgPSBzaW1wbGVUeXBlRnJvbVNvdXJjZVR5cGUodHlwZSk7XG4gICAgdmFyIGNhblVzZU1zZVBsYXliYWNrID0gc3VwcG9ydGVkVHlwZSAmJiAoIUhscyQxLnN1cHBvcnRzVHlwZU5hdGl2ZWx5KHN1cHBvcnRlZFR5cGUpIHx8IG92ZXJyaWRlTmF0aXZlKTtcbiAgICByZXR1cm4gY2FuVXNlTXNlUGxheWJhY2sgPyAnbWF5YmUnIDogJyc7XG4gIH1cbn07XG5cbmlmICh0eXBlb2YgdmlkZW9qcyQxLk1lZGlhU291cmNlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdmlkZW9qcyQxLlVSTCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmlkZW9qcyQxLk1lZGlhU291cmNlID0gTWVkaWFTb3VyY2U7XG4gIHZpZGVvanMkMS5VUkwgPSBVUkwkMTtcbn0gLy8gcmVnaXN0ZXIgc291cmNlIGhhbmRsZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRlY2hzXG5cblxuaWYgKE1lZGlhU291cmNlLnN1cHBvcnRzTmF0aXZlTWVkaWFTb3VyY2VzKCkpIHtcbiAgdmlkZW9qcyQxLmdldFRlY2goJ0h0bWw1JykucmVnaXN0ZXJTb3VyY2VIYW5kbGVyKEhsc1NvdXJjZUhhbmRsZXIsIDApO1xufVxuXG52aWRlb2pzJDEuSGxzSGFuZGxlciA9IEhsc0hhbmRsZXI7XG52aWRlb2pzJDEuSGxzU291cmNlSGFuZGxlciA9IEhsc1NvdXJjZUhhbmRsZXI7XG52aWRlb2pzJDEuSGxzID0gSGxzJDE7XG5cbmlmICghdmlkZW9qcyQxLnVzZSkge1xuICB2aWRlb2pzJDEucmVnaXN0ZXJDb21wb25lbnQoJ0hscycsIEhscyQxKTtcbn1cblxudmlkZW9qcyQxLm9wdGlvbnMuaGxzID0gdmlkZW9qcyQxLm9wdGlvbnMuaGxzIHx8IHt9O1xuXG5pZiAodmlkZW9qcyQxLnJlZ2lzdGVyUGx1Z2luKSB7XG4gIHZpZGVvanMkMS5yZWdpc3RlclBsdWdpbigncmVsb2FkU291cmNlT25FcnJvcicsIHJlbG9hZFNvdXJjZU9uRXJyb3IpO1xufSBlbHNlIHtcbiAgdmlkZW9qcyQxLnBsdWdpbigncmVsb2FkU291cmNlT25FcnJvcicsIHJlbG9hZFNvdXJjZU9uRXJyb3IpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2aWRlb2pzJDE7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQVlBOzs7QUFzQkE7Ozs7Ozs7OztBQVlBO0FBT0E7QUFJQTtBQUVBO0FBR0E7QUFHQTtBQUdBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFFQTtBQUdBO0FBVUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7QUFTQTs7Ozs7Ozs7Ozs7O0FBZUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTs7Ozs7Ozs7Ozs7QUFzQkE7Ozs7Ozs7O0FBc0JBOzs7Ozs7OztBQWNBO0FBR0E7OztBQVNBOztBQVVBOztBQVdBOzs7OztBQWFBOzs7OztBQWVBOzs7Ozs7QUFnQkE7OztBQWVBOzs7QUFRQTs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7Ozs7QUFlQTs7Ozs7Ozs7Ozs7QUFjQTs7Ozs7Ozs7QUFjQTs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTs7Ozs7O0FBaUJBOzs7Ozs7Ozs7QUErQkE7Ozs7OztBQVdBOzs7QUFRQTs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBOzs7QUFpQkE7Ozs7Ozs7Ozs7QUFZQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7OztBQWtCQTs7Ozs7QUFXQTtBQUVBOzs7Ozs7OztBQVlBOzs7Ozs7QUFXQTtBQUVBO0FBQ0E7Ozs7Ozs7OztBQWlCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0E7QUFnQkE7QUFDQTtBQUVBO0FBR0E7QUFIQTs7Ozs7Ozs7Ozs7QUFpQ0E7Ozs7Ozs7O0FBbUJBOzs7Ozs7Ozs7Ozs7OztBQXVCQTs7Ozs7Ozs7Ozs7QUFzQkE7QUFHQTtBQUZBOzs7Ozs7Ozs7OztBQXNCQTs7Ozs7Ozs7Ozs7Ozs7QUE0QkE7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUVBO0FBQ0E7QUFDQTtBQVNBO0FBR0E7Ozs7Ozs7O0FBc0JBOzs7Ozs7Ozs7Ozs7QUF5QkE7QUFFQTtBQUNBO0FBRUE7QUFRQTtBQUVBO0FBRUE7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQXNCQTs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7Ozs7O0FBYUE7O0FBT0E7O0FBV0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQTs7Ozs7Ozs7OztBQWlDQTs7Ozs7Ozs7Ozs7O0FBY0E7QUF1QkE7Ozs7Ozs7Ozs7QUFpQkE7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBOzs7Ozs7OztBQTZCQTs7Ozs7Ozs7QUFhQTs7Ozs7Ozs7Ozs7OztBQXNCQTs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUE0QkE7Ozs7Ozs7Ozs7OztBQW9CQTs7Ozs7Ozs7QUFhQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBR0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBOzs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7Ozs7QUF1Q0E7O0FBTUE7QUFFQTtBQVNBO0FBSUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQVJBO0FBSkE7Ozs7Ozs7OztBQXNDQTs7OztBQWNBOzs7Ozs7O0FBaUJBOzs7QUFRQTs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7QUFlQTs7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFPQTs7Ozs7QUFRQTs7O0FBUUE7QUEyQkE7QUFHQTtBQUdBOzs7Ozs7Ozs7QUFpQ0E7Ozs7Ozs7O0FBV0E7Ozs7Ozs7O0FBVUE7QUFPQTtBQUVBO0FBQ0E7QUFFQTtBQVFBO0FBT0E7Ozs7Ozs7Ozs7Ozs7O0FBcUJBO0FBR0E7Ozs7Ozs7O0FBY0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFPQTtBQUtBO0FBS0E7QUFZQTtBQVlBO0FBV0E7QUFRQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBT0E7O0FBTUE7QUFhQTs7QUFNQTs7Ozs7Ozs7Ozs7Ozs7QUFpQkE7QUFXQTtBQTJCQTs7Ozs7Ozs7Ozs7O0FBK0NBO0FBRUE7QUFNQTtBQVNBO0FBT0E7QUFZQTtBQUtBO0FBTUE7Ozs7Ozs7Ozs7Ozs7OztBQTJCQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQVVBO0FBRUE7QUFHQTtBQUdBO0FBQUE7QUFTQTtBQUVBO0FBRUE7QUFLQTtBQUtBOzs7Ozs7Ozs7OztBQWVBO0FBV0E7Ozs7Ozs7Ozs7OztBQWlCQTtBQU9BO0FBRUE7OztBQWdCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7OztBQWlCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQTs7QUE0Q0E7Ozs7Ozs7QUFTQTs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7QUFhQTs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7O0FBWUE7QUFFQTtBQUNBOzs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7QUFhQTs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7QUFhQTtBQUVBO0FBQ0E7QUFVQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUF5QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUF1QkE7QUFPQTtBQWlCQTs7O0FBY0E7Ozs7Ozs7O0FBVUE7Ozs7Ozs7QUFlQTs7Ozs7Ozs7O0FBdUJBO0FBRUE7QUFDQTs7Ozs7Ozs7O0FBZUE7Ozs7Ozs7OztBQWlCQTs7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7Ozs7OztBQXNCQTtBQUVBO0FBQ0E7QUFPQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBMENBOzs7OztBQWlCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQWVBO0FBRUE7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQTtBQWNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBO0FBY0E7QUFBQTtBQVlBO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQUVBO0FBQUE7QUFNQTtBQUlBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUF3QkE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkE7QUFRQTtBQXFCQTs7O0FBYUE7Ozs7O0FBT0E7Ozs7O0FBT0E7Ozs7Ozs7Ozs7OztBQWVBO0FBSUE7QUFPQTtBQUNBO0FBVUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBO0FBRUE7QUFFQTtBQUVBOzs7QUFZQTs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7QUFtQkE7Ozs7Ozs7Ozs7O0FBc0JBOzs7QUFRQTs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTs7OztBQWlDQTs7Ozs7OztBQVNBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUVBO0FBQUE7QUFPQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFNQTtBQU9BO0FBRUE7QUFtREE7QUFLQTtBQUVBOzs7O0FBV0E7Ozs7Ozs7OztBQWFBO0FBS0E7QUFTQTtBQU9BO0FBWUE7Ozs7O0FBNUNBOzs7Ozs7Ozs7O0FBc0RBOzs7OztBQWdCQTs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7Ozs7OztBQTJDQTs7Ozs7QUEwQ0E7Ozs7OztBQVdBOzs7OztBQVlBOzs7Ozs7OztBQVdBOzs7Ozs7OztBQWNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBdUNBO0FBSUE7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFqQkE7QUFvQ0E7QUFHQTtBQU1BO0FBR0E7QUFPQTs7Ozs7O0FBbkVBOztBQThFQTtBQTZDQTtBQUtBO0FBQ0E7QUFFQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQVVBO0FBREE7QUE0QkE7QUFDQTtBQUNBOzs7Ozs7O0FBdEZBO0FBdUdBO0FBQ0E7Ozs7Ozs7QUFIQTtBQWtDQTs7OztBQW5CQTtBQWdDQTtBQUdBO0FBUUE7Ozs7O0FBUUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdEJBOzs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQTs7Ozs7Ozs7O0FBdUJBOzs7OztBQWVBOzs7OztBQVdBOzs7Ozs7Ozs7O0FBV0E7OztBQWdCQTs7O0FBU0E7Ozs7O0FBU0E7Ozs7O0FBV0E7Ozs7Ozs7Ozs7Ozs7O0FBV0E7Ozs7Ozs7Ozs7QUFvQkE7Ozs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7Ozs7QUFhQTs7Ozs7Ozs7Ozs7OztBQW1CQTs7Ozs7Ozs7QUFtQkE7QUFnQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZBO0FBc0NBO0FBS0E7QUFTQTs7Ozs7QUFPQTtBQUtBO0FBR0E7QUFLQTtBQUtBO0FBRUE7QUFDQTtBQUdBOzs7Ozs7Ozs7OztBQWhEQTtBQXlFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFiQTs7Ozs7Ozs7QUFBQTs7Ozs7OztBQTRDQTs7Ozs7OztBQWdCQTs7QUFhQTs7QUFRQTs7Ozs7O0FBUUE7QUFlQTtBQUNBOzs7Ozs7OztBQUpBOzs7Ozs7Ozs7Ozs7QUFtQkE7QUFvQkE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUlBO0FBRUE7QUFLQTtBQUVBO0FBS0E7QUFJQTtBQUNBO0FBZUE7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUVBO0FBRUE7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF4RUE7QUFzR0E7QUFLQTtBQUlBO0FBQ0E7QUFFQTtBQUVBO0FBTUE7Ozs7O0FBdEJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFvRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFMQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQTs7Ozs7Ozs7Ozs7Ozs7QUE4QkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQTtBQXVDQTtBQUtBO0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQVhBO0FBMkNBOzs7Ozs7Ozs7QUFGQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBO0FBOENBO0FBMEJBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBckNBOzs7Ozs7O0FBb0ZBOzs7QUE0REE7Ozs7OztBQVdBOzs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBU0E7Ozs7OztBQVNBOzs7Ozs7QUFTQTs7Ozs7O0FBaUJBOzs7Ozs7QUFTQTtBQUVBO0FBQ0E7Ozs7OztBQXlCQTs7Ozs7O0FBU0E7Ozs7OztBQVNBOzs7Ozs7Ozs7QUFZQTs7Ozs7O0FBU0E7Ozs7OztBQWlCQTtBQU1BOzs7Ozs7QUFhQTs7Ozs7O0FBU0E7Ozs7OztBQVNBOzs7Ozs7QUFTQTs7O0FBMkJBOzs7Ozs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7Ozs7OztBQWVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQTs7Ozs7O0FBYUE7Ozs7Ozs7Ozs7O0FBaUNBOzs7QUFjQTs7Ozs7Ozs7Ozs7QUFhQTtBQWlCQTs7OztBQWVBOzs7Ozs7QUFRQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQU9BOztBQVdBOzs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBO0FBRUE7QUFDQTtBQVFBO0FBR0E7QUFDQTs7OztBQWtCQTs7Ozs7QUFRQTs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7Ozs7O0FBZUE7Ozs7O0FBUUE7QUFPQTtBQUVBO0FBR0E7QUFHQTs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7QUFhQTs7Ozs7QUFhQTs7Ozs7Ozs7OztBQVdBOzs7Ozs7Ozs7OztBQWlDQTs7Ozs7Ozs7OztBQStCQTs7Ozs7Ozs7QUE4QkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBO0FBU0E7QUFDQTtBQUdBOzs7OztBQXlCQTs7Ozs7QUFjQTs7Ozs7QUFlQTs7Ozs7O0FBV0E7QUFlQTs7Ozs7QUFIQTs7Ozs7QUEyQkE7QUFFQTtBQUVBO0FBR0E7QUFHQTtBQVFBOzs7OztBQVlBOzs7Ozs7OztBQXhDQTs7Ozs7O0FBdURBOzs7OztBQTZCQTs7Ozs7QUFzQkE7Ozs7Ozs7O0FBbkNBO0FBMERBO0FBRUE7QUFDQTtBQVVBOzs7QUFsQkE7Ozs7Ozs7OztBQWlDQTs7Ozs7QUEwQkE7QUFFQTtBQUVBOzs7OztBQVVBO0FBRUE7QUFPQTs7Ozs7QUFsQ0E7Ozs7O0FBdURBOzs7OztBQVNBOzs7Ozs7Ozs7Ozs7OztBQWhCQTs7OztBQW1DQTs7OztBQWNBOzs7O0FBaUJBO0FBZUE7QUFTQTs7OztBQVhBOzs7OztBQThEQTs7Ozs7QUFhQTs7Ozs7OztBQWFBOzs7OztBQWdCQTs7Ozs7OztBQXNCQTtBQWNBOzs7Ozs7O0FBV0E7Ozs7Ozs7QUF2QkE7Ozs7Ozs7QUFxRUE7Ozs7Ozs7QUE3QkE7Ozs7O0FBcUVBOzs7OztBQVFBO0FBTUE7Ozs7Ozs7Ozs7O0FBaUJBO0FBT0E7Ozs7O0FBV0E7Ozs7O0FBV0E7QUFRQTtBQUNBOzs7Ozs7O0FBcUJBO0FBWUE7QUFNQTtBQUNBO0FBQ0E7OztBQWdCQTs7Ozs7Ozs7OztBQTJCQTtBQU9BOzs7OztBQVdBOzs7OztBQVdBO0FBUUE7QUFDQTs7O0FBY0E7Ozs7Ozs7QUF3QkE7QUFZQTs7O0FBcUJBOzs7OztBQXNCQTs7Ozs7OztBQW1CQTs7O0FBc0JBO0FBWUE7O0FBa0JBOztBQUdBOzs7OztBQVNBOzs7OztBQWFBOzs7Ozs7O0FBb0JBO0FBY0E7Ozs7Ozs7Ozs7O0FBWkE7Ozs7Ozs7QUE4QkE7O0FBOENBOzs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBOzs7O0FBS0E7Ozs7O0FBU0E7Ozs7O0FBU0E7Ozs7Ozs7O0FBaUJBOzs7Ozs7OztBQUVBOztBQTBEQTs7Ozs7O0FBT0E7Ozs7OztBQWdCQTs7Ozs7O0FBZ0JBOzs7Ozs7QUFlQTs7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBOzs7Ozs7O0FBQUE7Ozs7Ozs7QUFBQTs7Ozs7OztBQUFBOzs7Ozs7OztBQW1EQTs7O0FBdUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQTs7Ozs7Ozs7O0FBV0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQVFBO0FBR0E7QUFDQTtBQUdBO0FBS0E7QUFHQTs7Ozs7Ozs7Ozs7QUErQkE7QUFFQTtBQUVBOzs7Ozs7Ozs7OztBQW9CQTs7Ozs7Ozs7O0FBdUJBO0FBSUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBdUJBOzs7Ozs7Ozs7O0FBa0RBO0FBZ0JBO0FBRUE7QUFHQTtBQUNBOzs7OztBQXNCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUNBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQXdCQTs7Ozs7Ozs7QUFnQkE7Ozs7Ozs7O0FBK0JBOzs7OztBQVVBOzs7OztBQWlCQTtBQU9BO0FBa0NBOzs7OztBQXFCQTtBQWVBOzs7OztBQWJBOztBQXlEQTs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQTs7Ozs7Ozs7QUFzQkE7QUFNQTs7Ozs7Ozs7O0FBZ0JBO0FBR0E7QUFDQTtBQUVBOzs7OztBQWtCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkE7Ozs7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O0FBZUE7QUFHQTtBQUlBO0FBS0E7QUFLQTtBQUNBO0FBR0E7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7O0FBQUE7QUF5RkE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFBQTtBQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7QUFBQTtBQXlPQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQXlGQTtBQUNBO0FBRUE7Ozs7OztBQUFBOzs7Ozs7QUFBQTs7Ozs7O0FBQUE7Ozs7Ozs7O0FBd0NBOzs7Ozs7OztBQVdBO0FBRUE7Ozs7Ozs7Ozs7O0FBb0JBO0FBRUE7QUFBQTs7Ozs7Ozs7Ozs7QUF1QkE7O0FBUUE7QUFHQTtBQUtBOzs7OztBQUFBOzs7Ozs7O0FBQUE7Ozs7O0FBQUE7Ozs7Ozs7QUFBQTs7Ozs7QUFBQTs7Ozs7OztBQUFBOzs7OztBQUFBOzs7Ozs7O0FBQUE7Ozs7O0FBQUE7Ozs7Ozs7QUFBQTs7Ozs7QUFBQTs7Ozs7OztBQUFBOzs7OztBQUFBOzs7Ozs7O0FBQUE7Ozs7O0FBQUE7Ozs7Ozs7QUFBQTs7Ozs7QUFBQTs7Ozs7OztBQUFBOzs7OztBQUFBOzs7Ozs7O0FBQUE7Ozs7O0FBQUE7Ozs7Ozs7QUFBQTtBQWlMQTtBQUNBO0FBRUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBd0JBOzs7Ozs7Ozs7OztBQWlCQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBc0JBO0FBRUE7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUtBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFZQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFJQTtBQUNBO0FBSUE7Ozs7O0FBZUE7QUFHQTtBQU9BO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFZQTtBQUNBO0FBR0E7QUFPQTtBQWVBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFLQTtBQUVBO0FBR0E7QUFHQTs7Ozs7OztBQTBCQTs7Ozs7QUFXQTtBQUVBO0FBRUE7QUFTQTtBQXlCQTtBQUNBO0FBRUE7QUFJQTtBQUdBO0FBS0E7Ozs7O0FBOURBO0FBbUZBO0FBR0E7QUFnQkE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBYUE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUVBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQVVBO0FBS0E7QUFFQTtBQU9BO0FBR0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUVBOzs7Ozs7Ozs7QUF0SUE7Ozs7Ozs7OztBQXNKQTs7Ozs7Ozs7Ozs7OztBQWVBO0FBNEJBOzs7Ozs7Ozs7Ozs7O0FBVEE7Ozs7Ozs7Ozs7Ozs7QUF3Q0E7Ozs7Ozs7O0FBdUNBOzs7Ozs7Ozs7QUFBQTtBQTBDQTtBQUtBO0FBRUE7Ozs7O0FBYkE7QUFrREE7QUFFQTtBQUdBO0FBR0E7QUFJQTtB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QTs7Ozs7Ozs7Ozs7O0FBY0E7Ozs7OztBQVVBOzs7Ozs7QUFTQTs7Ozs7QUFRQTs7Ozs7Ozs7O0FBWUE7Ozs7Ozs7OztBQWVBOzs7Ozs7Ozs7OztBQWlCQTs7Ozs7Ozs7Ozs7OztBQW9CQTs7Ozs7Ozs7Ozs7OztBQXFCQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FBc0NBO0FBRUE7QUFDQTtBQWVBOzs7Ozs7Ozs7Ozs7O0FBd0JBOzs7Ozs7O0FBV0E7QUFNQTtBQUVBO0FBSUE7QUFFQTtBQUVBOztBQU9BOzs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7OztBQTBCQTs7Ozs7OztBQXFCQTs7Ozs7QUFxQkE7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBOzs7Ozs7Ozs7QUFwQkE7Ozs7Ozs7Ozs7Ozs7O0FBa0NBO0FBcUNBO0FBRUE7Ozs7Ozs7OztBQWxCQTs7Ozs7Ozs7OztBQXdDQTs7Ozs7Ozs7QUF1QkE7Ozs7Ozs7Ozs7O0FBZ0RBOzs7O0FBT0E7Ozs7QUFRQTs7OztBQVVBOzs7OztBQVVBOzs7Ozs7QUFRQTs7Ozs7QUFPQTs7Ozs7O0FBUUE7Ozs7Ozs7Ozs7Ozs7QUFlQTs7O0FBS0E7Ozs7Ozs7Ozs7OztBQWFBO0FBZ0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQXdCQTs7O0FBYUE7Ozs7Ozs7OztBQVdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvRkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBZUE7QUFFQTs7Ozs7QUFlQTs7Ozs7Ozs7Ozs7QUFjQTs7Ozs7Ozs7QUFvQkE7Ozs7Ozs7O0FBY0E7Ozs7Ozs7Ozs7O0FBd0JBO0FBYUE7QUFjQTtBQUNBO0FBR0E7Ozs7QUFPQTs7Ozs7QUFRQTs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7OztBQW1CQTtBQXFCQTtBQUVBOzs7Ozs7OztBQWdCQTtBQUVBO0FBQ0E7Ozs7Ozs7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QUNBO0FBRUE7QUFMQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBU0E7QUFHQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQXpDQTtBQTdIQTtBQTBMQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQUE7O0FBOEJBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUlBOztBQU9BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUdBO0FBS0E7QUFFQTs7Ozs7Ozs7OztBQWlCQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7OztBQWdCQTs7Ozs7Ozs7QUFjQTs7Ozs7OztBQWFBOzs7Ozs7QUFZQTtBQUVBO0FBSUE7QUFPQTtBQVlBO0FBR0E7QUFPQTtBQUdBO0FBYUE7QUFHQTtBQWFBO0FBU0E7QUFLQTtBQVVBOzs7OztBQVdBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBVUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQW9EQTtBQUNBO0FBSUE7QUFDQTtBQWpCQTtBQTZCQTtBQU1BO0FBRUE7QUFZQTtBQU1BO0FBWUE7QUFlQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFJQTtBQUdBO0FBY0E7QUFDQTtBQUdBO0FBTUE7QUFHQTtBQU9BO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUtBO0FBZUE7QUFJQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFJQTtBQVlBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQVlBO0FBMUNBO0FBcURBO0FBR0E7QUFFQTs7O0FBTUE7QUFNQTs7QUFLQTtBQUlBO0FBRUE7QUFVQTtBQUVBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFHQTs7QUFVQTtBQUVBO0FBQ0E7QUFDQTs7O0FBeUJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBY0E7QUFDQTtBQUVBOzs7Ozs7O0FBYUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFNQTtBQUVBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQU1BO0FBRUE7QUFHQTtBQUlBOztBQU9BO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFTQTtBQUtBO0FBQ0E7QUFRQTtBQU1BO0FBQ0E7Ozs7Ozs7QUF1QkE7QUFHQTtBQWdCQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUdBOztBQU1BO0FBU0E7QUFFQTtBQU1BO0FBT0E7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUdBOzs7QUFZQTtBQUdBO0FBRkE7QUFPQTtBQXFCQTtBQUdBO0FBR0E7QUFHQTtBQVVBOzs7Ozs7OztBQTZDQTtBQUVBO0FBQ0E7Ozs7Ozs7QUE2Q0E7QUFxQkE7QUFFQTtBQUdBO0FBUUE7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUVBO0FBSUE7QUFFQTtBQUtBO0FBU0E7QUFLQTtBQU1BOzs7OztBQTZCQTs7O0FBTUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUtBO0FBWUE7QUFLQTtBQUdBO0FBZUE7QUFHQTtBQUNBO0FBRUE7QUFrQkE7QUFHQTtBQUdBO0FBT0E7QUFLQTtBQUtBO0FBS0E7QUFHQTtBQUlBO0FBR0E7QUFFQTtBQUdBO0FBUkE7QUFVQTtBQUdBO0FBS0E7O0FBZ0JBOzs7Ozs7QUFlQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBT0E7QUFDQTtBQUdBO0FBU0E7QUFLQTtBQVVBO0FBTUE7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QTtBQUNBO0FBRUE7Ozs7QUFlQTs7OztBQVlBOzs7OztBQWVBO0FBU0E7QUFDQTtBQUVBOzs7Ozs7QUFZQTs7Ozs7Ozs7QUF5Q0E7Ozs7Ozs7QUFpQ0E7QUFVQTtBQVdBOzs7Ozs7Ozs7QUFxQkE7QUFXQTtBQWdCQTtBQUdBO0FBRUE7Ozs7Ozs7QUF5QkE7QUFrQkE7QUFHQTs7Ozs7Ozs7OztBQW9CQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBT0E7Ozs7Ozs7OztBQWdCQTtBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlEQTtBQUlBO0FBV0E7QUF5QkE7Ozs7Ozs7OztBQVlBOzs7Ozs7QUF3QkE7Ozs7Ozs7OztBQXdCQTs7Ozs7Ozs7QUE0QkE7QUFlQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBO0FBRUE7QUFrQkE7QUFFQTtBQUdBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFJQTtBQUdBO0FBSUE7QUFFQTtBQUlBO0FBT0E7QUFJQTtBQUlBO0FBS0E7QUFNQTtBQUVBO0FBS0E7QUFHQTtBQUVBO0FBT0E7QUFJQTs7Ozs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQTtBQVNBO0FBRUE7QUFHQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBUUE7QUFFQTtBQVlBOzs7Ozs7Ozs7O0FBMEJBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQWVBO0FBV0E7QUFDQTtBQUNBO0FBR0E7QUFDQTs7QUFxQ0E7QUFHQTs7Ozs7Ozs7O0FBWUE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBU0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBaUNBO0FBS0E7QUFHQTtBQUVBO0FBQ0E7QUFHQTs7Ozs7O0FBeUJBO0FBTUE7QUFlQTtBQVdBO0FBZUE7QUFRQTtBQUdBO0FBR0E7QUFPQTtBQUNBO0FBRUE7QUFlQTs7OztBQXNCQTs7QUFBQTs7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\n//# sourceURL=webpack-internal:///../node_modules/video.js/dist/video.es.js\n"); - -/***/ }), - -/***/ "../node_modules/video.js/node_modules/global/document.js": -/*!****************************************************************!*\ - !*** ../node_modules/video.js/node_modules/global/document.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var topLevel = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : {};\n\nvar minDoc = __webpack_require__(/*! min-document */ 0);\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL25vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL25vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanM/ODFmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG52YXIgZG9jY3k7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9jY3kgPSBkb2N1bWVudDtcbn0gZWxzZSB7XG4gICAgZG9jY3kgPSB0b3BMZXZlbFsnX19HTE9CQUxfRE9DVU1FTlRfQ0FDSEVANCddO1xuXG4gICAgaWYgKCFkb2NjeSkge1xuICAgICAgICBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J10gPSBtaW5Eb2M7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/video.js/node_modules/global/document.js\n"); - -/***/ }), - -/***/ "../node_modules/video.js/node_modules/global/window.js": -/*!**************************************************************!*\ - !*** ../node_modules/video.js/node_modules/global/window.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\") {\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvLmpzL25vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlby5qcy9ub2RlX21vZHVsZXMvZ2xvYmFsL3dpbmRvdy5qcz9jMGJiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/video.js/node_modules/global/window.js\n"); - -/***/ }), - -/***/ "../node_modules/videojs-event-tracking/dist/videojs-event-tracking.es.js": -/*!********************************************************************************!*\ - !*** ../node_modules/videojs-event-tracking/dist/videojs-event-tracking.es.js ***! - \********************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/video.es.js\");\n\nvar version = \"1.0.1\";\n/**\n * @function BufferTracking\n * @param {Object} [options={}]\n * An object of options left to the plugin author to define.\n *\n * Can contain the following optional configuration, passed during plugin initialization:\n * bufferingConfig.includeScrub => Boolean indicating whether buffering metrics\n * should be considered for computation while user is scrubbing on the video player.\n *\n *\n * Tracks when the video player is marked as buffering and waits until the player\n * has made some progress.\n *\n * Example Usage:\n * player.on('tracking:buffered', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => currentTime: current second of video playback\n * => readyState: video#readyState value\n * => secondsToLoad: Total amount of time in seconds buffering took\n * => bufferCount: Total buffer events for this source\n */\n\nvar BufferTracking = function BufferTracking(config) {\n var _this = this;\n\n var timer = null;\n var scrubbing = false;\n var bufferPosition = false;\n var bufferStart = false;\n var bufferEnd = false;\n var bufferCount = 0;\n var readyState = false;\n\n var reset = function reset() {\n if (timer) {\n clearTimeout(timer);\n }\n\n scrubbing = false;\n bufferPosition = false;\n bufferStart = false;\n bufferEnd = false;\n bufferCount = 0;\n readyState = false;\n };\n\n var onPause = function onPause() {\n bufferStart = false;\n\n if (_this.scrubbing() && !(config.bufferingConfig && config.bufferingConfig.includeScrub)) {\n scrubbing = true;\n timer = setTimeout(function () {\n scrubbing = false;\n }, 200);\n }\n };\n\n var onPlayerWaiting = function onPlayerWaiting() {\n if (bufferStart === false && scrubbing === false && _this.currentTime() > 0) {\n bufferStart = new Date();\n bufferPosition = +_this.currentTime().toFixed(0);\n readyState = +_this.readyState();\n }\n };\n\n var onTimeupdate = function onTimeupdate() {\n var curTime = +_this.currentTime().toFixed(0);\n\n if (bufferStart && curTime !== bufferPosition) {\n bufferEnd = new Date();\n var secondsToLoad = (bufferEnd - bufferStart) / 1000;\n bufferStart = false;\n bufferPosition = false;\n bufferCount++;\n\n _this.trigger('tracking:buffered', {\n currentTime: +curTime,\n readyState: +readyState,\n secondsToLoad: +secondsToLoad.toFixed(3),\n bufferCount: +bufferCount\n });\n }\n };\n\n this.on('dispose', reset);\n this.on('loadstart', reset);\n this.on('ended', reset);\n this.on('pause', onPause);\n this.on('waiting', onPlayerWaiting);\n this.on('timeupdate', onTimeupdate);\n};\n/**\n * Tracks when users pause the video.\n *\n * Example Usage:\n * player.on('tracking:pause', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => pauseCount: Total number of Pause events triggered\n *\n * @function PauseTracking\n * @param {Object} [config={}]\n * An object of config left to the plugin author to define.\n */\n\n\nvar PauseTracking = function PauseTracking(config) {\n var player = this;\n var pauseCount = 0;\n var timer = null;\n var locked = false;\n\n var reset = function reset(e) {\n if (timer) {\n clearTimeout(timer);\n }\n\n pauseCount = 0;\n locked = false;\n };\n\n player.on('dispose', reset);\n player.on('loadstart', reset);\n player.on('ended', reset);\n player.on('pause', function () {\n if (player.scrubbing() || locked) {\n return;\n }\n\n timer = setTimeout(function () {\n pauseCount++;\n player.trigger('tracking:pause', {\n pauseCount: pauseCount\n });\n }, 300);\n });\n};\n/**\n * Track Overall Percentile (1st, 2nd, 3rd, and 4th) of Completion\n * This event triggers each quarter of a video.\n *\n * Example Usage:\n * player.on('tracking:first-quarter', (e, data) => console.log(data))\n * player.on('tracking:second-quarter', (e, data) => console.log(data))\n * player.on('tracking:third-quarter', (e, data) => console.log(data))\n * player.on('tracking:fourth-quarter', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => pauseCount: Total number of Pause events triggered\n * => seekCount: Total number of Seek events triggered\n * => currentTime: Current second video is on\n * => duration: Total duration of video\n *\n * @function PercentileTracking\n * @param {Object} [config={}]\n * An object of config left to the plugin author to define.\n */\n\n\nvar PercentileTracking = function PercentileTracking(config) {\n var player = this;\n var first = false;\n var second = false;\n var third = false;\n var duration = 0;\n var pauseCount = 0;\n var seekCount = 0;\n\n var reset = function reset(e) {\n first = false;\n second = false;\n third = false;\n duration = 0;\n pauseCount = 0;\n seekCount = 0;\n };\n\n var incPause = function incPause() {\n return pauseCount++;\n };\n\n var incSeek = function incSeek() {\n return seekCount++;\n };\n\n player.on('dispose', reset);\n player.on('loadstart', reset);\n player.on('tracking:pause', incPause);\n player.on('tracking:seek', incSeek);\n player.on('timeupdate', function () {\n var curTime = +player.currentTime().toFixed(0);\n var data = {\n seekCount: seekCount,\n pauseCount: pauseCount,\n currentTime: curTime,\n duration: duration\n };\n\n switch (curTime) {\n case first:\n first = false;\n player.trigger('tracking:first-quarter', data);\n break;\n\n case second:\n second = false;\n player.trigger('tracking:second-quarter', data);\n break;\n\n case third:\n third = false;\n player.trigger('tracking:third-quarter', data);\n break;\n }\n });\n player.on('ended', function () {\n var data = {\n seekCount: seekCount,\n pauseCount: pauseCount,\n currentTime: duration,\n duration: duration\n };\n player.trigger('tracking:fourth-quarter', data);\n });\n player.on('durationchange', function () {\n duration = +player.duration().toFixed(0);\n\n if (duration > 0) {\n var quarter = (duration / 4).toFixed(0);\n first = +quarter;\n second = +quarter * 2;\n third = +quarter * 3;\n }\n });\n};\n/**\n * Track Overall Performance\n * This event triggers when the player has changed sources, has ended, or\n * has been destroyed.\n *\n * Example Usage:\n * player.on('tracking:performance', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => pauseCount: Total number of Pause events triggered\n * => seekCount: Total number of Seek events triggered\n * => bufferCount: Total number of Buffer events triggered\n * => totalDuration: Total duration provided by the file\n * => watchedDuration: Total number of seconds watched (not seeked past)\n * => bufferDuration: Total seconds that buffering has occured\n * => initialLoadTime: Seconds it took for the initial frame to appear\n *\n * @function PerformanceTracking\n * @param {Object} [config={}]\n * An object of config left to the plugin author to define.\n */\n\n\nvar PerformanceTracking = function PerformanceTracking(config) {\n if (typeof config === 'undefined' || typeof config.performance !== 'function') {\n return;\n }\n\n var player = this;\n var seekCount = 0;\n var pauseCount = 0;\n var bufferCount = 0;\n var totalDuration = 0;\n var watchedDuration = 0;\n var bufferDuration = 0;\n var initialLoadTime = 0;\n var timestamps = [];\n\n var reset = function reset() {\n seekCount = 0;\n pauseCount = 0;\n bufferCount = 0;\n totalDuration = 0;\n watchedDuration = 0;\n bufferDuration = 0;\n initialLoadTime = 0;\n timestamps = [];\n };\n\n var trigger = function trigger() {\n var data = {\n pauseCount: pauseCount,\n seekCount: seekCount,\n bufferCount: bufferCount,\n totalDuration: totalDuration,\n watchedDuration: watchedDuration,\n bufferDuration: bufferDuration,\n initialLoadTime: initialLoadTime\n };\n config.performance.call(player, data);\n };\n\n var triggerAndReset = function triggerAndReset() {\n trigger();\n reset();\n };\n\n if (typeof window.addEventListener === 'function') {\n window.addEventListener('beforeunload', triggerAndReset);\n player.on('dispose', function () {\n window.removeEventListener('beforeunload', triggerAndReset);\n });\n }\n\n player.on('loadstart', function () {\n if (totalDuration > 0) {\n trigger();\n }\n\n reset();\n });\n player.on('ended', triggerAndReset);\n player.on('dispose', triggerAndReset);\n player.on('timeupdate', function () {\n var curTime = +player.currentTime().toFixed(0);\n\n if (timestamps.indexOf(curTime) < 0) {\n timestamps.push(curTime);\n }\n\n watchedDuration = timestamps.length;\n });\n player.on('loadeddata', function (e, data) {\n totalDuration = +player.duration().toFixed(0);\n });\n player.on('tracking:seek', function (e, data) {\n seekCount = data.seekCount;\n });\n player.on('tracking:pause', function (e, data) {\n pauseCount = data.pauseCount;\n });\n player.on('tracking:buffered', function (e, data) {\n bufferCount = data.bufferCount;\n bufferDuration = +(bufferDuration + data.secondsToLoad).toFixed(3);\n });\n player.on('tracking:firstplay', function (e, data) {\n initialLoadTime = data.secondsToLoad;\n });\n};\n/**\n * Track Initial Play Event\n * This event is triggered when the video has been played for the first time.\n * If you are looking to track play events, simply listen on the player for a normal\n * \"play\" or \"playing\" event.\n *\n * Example Usage:\n * player.on('tracking:firstplay', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => secondsToLoad: Total number of seconds between the player initializing\n * a play request and when the first frame begins.\n *\n * @function PlayTracking\n * @param {Object} [config={}]\n * An object of config left to the plugin author to define.\n */\n\n\nvar PlayTracking = function PlayTracking(config) {\n var _this = this;\n\n var firstplay = false;\n var loadstart = 0;\n var loadend = 0;\n var secondsToLoad = 0;\n\n var reset = function reset() {\n firstplay = false;\n loadstart = 0;\n loadend = 0;\n secondsToLoad = 0;\n };\n\n var onLoadStart = function onLoadStart() {\n reset();\n loadstart = new Date();\n };\n\n var onLoadedData = function onLoadedData() {\n loadend = new Date();\n secondsToLoad = (loadend - loadstart) / 1000;\n };\n\n var onPlaying = function onPlaying() {\n if (!firstplay) {\n firstplay = true;\n\n _this.trigger('tracking:firstplay', {\n secondsToLoad: +secondsToLoad.toFixed(3)\n });\n }\n };\n\n this.on('dispose', reset);\n this.on('loadstart', onLoadStart);\n this.on('loadeddata', onLoadedData);\n this.on('playing', onPlaying);\n};\n/**\n * Track Seeking Events\n * During playback, we are tracking how many times a person seeks, and\n * the position a user has seeked to.\n *\n * Example Usage:\n * player.on('tracking:seek', (e, data) => console.log(data))\n *\n * Data Attributes:\n * => seekCount: total number of seeks that has occuring during this file\n * => seekTo: Position, in seconds, that has been seeked to.\n *\n * @function SeekTracking\n * @param {Object} [config={}]\n * An object of config left to the plugin author to define.\n */\n\n\nvar SeekTracking = function SeekTracking(config) {\n var player = this;\n var seekCount = 0;\n var locked = true;\n\n var reset = function reset() {\n seekCount = 0;\n locked = true;\n };\n\n player.on('dispose', reset);\n player.on('loadstart', reset);\n player.on('ended', reset);\n player.on('play', function () {\n locked = false;\n });\n player.on('pause', function () {\n if (locked || !player.scrubbing()) {\n return;\n }\n\n var curTime = +player.currentTime().toFixed(0);\n seekCount++;\n player.trigger('tracking:seek', {\n seekCount: +seekCount,\n seekTo: curTime\n });\n });\n}; // Cross-compatibility for Video.js 5 and 6.\n\n\nvar registerPlugin = video_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].registerPlugin || video_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].plugin;\nvar getPlugin = video_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getPlugin || video_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].plugin;\n/**\n * Event Tracking for VideoJS\n *\n * @function eventTracking\n * @param {Object} [options={}]\n * An object of options left to the plugin author to define.\n */\n\nvar eventTracking = function eventTracking(options) {\n PauseTracking.apply(this, arguments);\n BufferTracking.apply(this, arguments);\n PercentileTracking.apply(this, arguments);\n PlayTracking.apply(this, arguments);\n SeekTracking.apply(this, arguments);\n PerformanceTracking.apply(this, arguments);\n}; // Register the plugin with video.js, avoid double registration\n\n\nif (typeof getPlugin('eventTracking') === 'undefined') {\n registerPlugin('eventTracking', eventTracking);\n} // Include the version number.\n\n\neventTracking.VERSION = version;\n/* harmony default export */ __webpack_exports__[\"default\"] = (eventTracking);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtZXZlbnQtdHJhY2tpbmcvZGlzdC92aWRlb2pzLWV2ZW50LXRyYWNraW5nLmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlb2pzLWV2ZW50LXRyYWNraW5nL2Rpc3QvdmlkZW9qcy1ldmVudC10cmFja2luZy5lcy5qcz8wMDI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2aWRlb2pzIGZyb20gJ3ZpZGVvLmpzJztcblxudmFyIHZlcnNpb24gPSBcIjEuMC4xXCI7XG5cbi8qKlxuICogQGZ1bmN0aW9uIEJ1ZmZlclRyYWNraW5nXG4gKiBAcGFyYW0gICAge09iamVjdH0gW29wdGlvbnM9e31dXG4gKiAgICAgICAgICAgQW4gb2JqZWN0IG9mIG9wdGlvbnMgbGVmdCB0byB0aGUgcGx1Z2luIGF1dGhvciB0byBkZWZpbmUuXG4gKlxuICogICAgICAgICAgIENhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgY29uZmlndXJhdGlvbiwgcGFzc2VkIGR1cmluZyBwbHVnaW4gaW5pdGlhbGl6YXRpb246XG4gKiAgICAgICAgICAgYnVmZmVyaW5nQ29uZmlnLmluY2x1ZGVTY3J1YiA9PiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBidWZmZXJpbmcgbWV0cmljc1xuICogICAgICAgICAgIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBjb21wdXRhdGlvbiB3aGlsZSB1c2VyIGlzIHNjcnViYmluZyBvbiB0aGUgdmlkZW8gcGxheWVyLlxuICpcbiAqXG4gKiBUcmFja3Mgd2hlbiB0aGUgdmlkZW8gcGxheWVyIGlzIG1hcmtlZCBhcyBidWZmZXJpbmcgYW5kIHdhaXRzIHVudGlsIHRoZSBwbGF5ZXJcbiAqIGhhcyBtYWRlIHNvbWUgcHJvZ3Jlc3MuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqIHBsYXllci5vbigndHJhY2tpbmc6YnVmZmVyZWQnLCAoZSwgZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpXG4gKlxuICogRGF0YSBBdHRyaWJ1dGVzOlxuICogPT4gY3VycmVudFRpbWU6ICAgIGN1cnJlbnQgc2Vjb25kIG9mIHZpZGVvIHBsYXliYWNrXG4gKiA9PiByZWFkeVN0YXRlOiAgICAgdmlkZW8jcmVhZHlTdGF0ZSB2YWx1ZVxuICogPT4gc2Vjb25kc1RvTG9hZDogIFRvdGFsIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYnVmZmVyaW5nIHRvb2tcbiAqID0+IGJ1ZmZlckNvdW50OiAgICBUb3RhbCBidWZmZXIgZXZlbnRzIGZvciB0aGlzIHNvdXJjZVxuICovXG5cbnZhciBCdWZmZXJUcmFja2luZyA9IGZ1bmN0aW9uIEJ1ZmZlclRyYWNraW5nKGNvbmZpZykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciB0aW1lciA9IG51bGw7XG4gIHZhciBzY3J1YmJpbmcgPSBmYWxzZTtcbiAgdmFyIGJ1ZmZlclBvc2l0aW9uID0gZmFsc2U7XG4gIHZhciBidWZmZXJTdGFydCA9IGZhbHNlO1xuICB2YXIgYnVmZmVyRW5kID0gZmFsc2U7XG4gIHZhciBidWZmZXJDb3VudCA9IDA7XG4gIHZhciByZWFkeVN0YXRlID0gZmFsc2U7XG5cbiAgdmFyIHJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgICBzY3J1YmJpbmcgPSBmYWxzZTtcbiAgICBidWZmZXJQb3NpdGlvbiA9IGZhbHNlO1xuICAgIGJ1ZmZlclN0YXJ0ID0gZmFsc2U7XG4gICAgYnVmZmVyRW5kID0gZmFsc2U7XG4gICAgYnVmZmVyQ291bnQgPSAwO1xuICAgIHJlYWR5U3RhdGUgPSBmYWxzZTtcbiAgfTtcblxuICB2YXIgb25QYXVzZSA9IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgYnVmZmVyU3RhcnQgPSBmYWxzZTtcblxuICAgIGlmIChfdGhpcy5zY3J1YmJpbmcoKSAmJiAhKGNvbmZpZy5idWZmZXJpbmdDb25maWcgJiYgY29uZmlnLmJ1ZmZlcmluZ0NvbmZpZy5pbmNsdWRlU2NydWIpKSB7XG4gICAgICBzY3J1YmJpbmcgPSB0cnVlO1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NydWJiaW5nID0gZmFsc2U7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgb25QbGF5ZXJXYWl0aW5nID0gZnVuY3Rpb24gb25QbGF5ZXJXYWl0aW5nKCkge1xuICAgIGlmIChidWZmZXJTdGFydCA9PT0gZmFsc2UgJiYgc2NydWJiaW5nID09PSBmYWxzZSAmJiBfdGhpcy5jdXJyZW50VGltZSgpID4gMCkge1xuICAgICAgYnVmZmVyU3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgYnVmZmVyUG9zaXRpb24gPSArX3RoaXMuY3VycmVudFRpbWUoKS50b0ZpeGVkKDApO1xuICAgICAgcmVhZHlTdGF0ZSA9ICtfdGhpcy5yZWFkeVN0YXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBvblRpbWV1cGRhdGUgPSBmdW5jdGlvbiBvblRpbWV1cGRhdGUoKSB7XG4gICAgdmFyIGN1clRpbWUgPSArX3RoaXMuY3VycmVudFRpbWUoKS50b0ZpeGVkKDApO1xuXG4gICAgaWYgKGJ1ZmZlclN0YXJ0ICYmIGN1clRpbWUgIT09IGJ1ZmZlclBvc2l0aW9uKSB7XG4gICAgICBidWZmZXJFbmQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICB2YXIgc2Vjb25kc1RvTG9hZCA9IChidWZmZXJFbmQgLSBidWZmZXJTdGFydCkgLyAxMDAwO1xuXG4gICAgICBidWZmZXJTdGFydCA9IGZhbHNlO1xuICAgICAgYnVmZmVyUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIGJ1ZmZlckNvdW50Kys7XG5cbiAgICAgIF90aGlzLnRyaWdnZXIoJ3RyYWNraW5nOmJ1ZmZlcmVkJywge1xuICAgICAgICBjdXJyZW50VGltZTogK2N1clRpbWUsXG4gICAgICAgIHJlYWR5U3RhdGU6ICtyZWFkeVN0YXRlLFxuICAgICAgICBzZWNvbmRzVG9Mb2FkOiArc2Vjb25kc1RvTG9hZC50b0ZpeGVkKDMpLFxuICAgICAgICBidWZmZXJDb3VudDogK2J1ZmZlckNvdW50XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5vbignZGlzcG9zZScsIHJlc2V0KTtcbiAgdGhpcy5vbignbG9hZHN0YXJ0JywgcmVzZXQpO1xuICB0aGlzLm9uKCdlbmRlZCcsIHJlc2V0KTtcbiAgdGhpcy5vbigncGF1c2UnLCBvblBhdXNlKTtcbiAgdGhpcy5vbignd2FpdGluZycsIG9uUGxheWVyV2FpdGluZyk7XG4gIHRoaXMub24oJ3RpbWV1cGRhdGUnLCBvblRpbWV1cGRhdGUpO1xufTtcblxuLyoqXG4gKiBUcmFja3Mgd2hlbiB1c2VycyBwYXVzZSB0aGUgdmlkZW8uXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqIHBsYXllci5vbigndHJhY2tpbmc6cGF1c2UnLCAoZSwgZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpXG4gKlxuICogRGF0YSBBdHRyaWJ1dGVzOlxuICogPT4gcGF1c2VDb3VudDogICAgICAgVG90YWwgbnVtYmVyIG9mIFBhdXNlIGV2ZW50cyB0cmlnZ2VyZWRcbiAqXG4gKiBAZnVuY3Rpb24gUGF1c2VUcmFja2luZ1xuICogQHBhcmFtICAgIHtPYmplY3R9IFtjb25maWc9e31dXG4gKiAgICAgICAgICAgQW4gb2JqZWN0IG9mIGNvbmZpZyBsZWZ0IHRvIHRoZSBwbHVnaW4gYXV0aG9yIHRvIGRlZmluZS5cbiAqL1xuXG52YXIgUGF1c2VUcmFja2luZyA9IGZ1bmN0aW9uIFBhdXNlVHJhY2tpbmcoY29uZmlnKSB7XG4gIHZhciBwbGF5ZXIgPSB0aGlzO1xuICB2YXIgcGF1c2VDb3VudCA9IDA7XG4gIHZhciB0aW1lciA9IG51bGw7XG4gIHZhciBsb2NrZWQgPSBmYWxzZTtcbiAgdmFyIHJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gICAgcGF1c2VDb3VudCA9IDA7XG4gICAgbG9ja2VkID0gZmFsc2U7XG4gIH07XG5cbiAgcGxheWVyLm9uKCdkaXNwb3NlJywgcmVzZXQpO1xuICBwbGF5ZXIub24oJ2xvYWRzdGFydCcsIHJlc2V0KTtcbiAgcGxheWVyLm9uKCdlbmRlZCcsIHJlc2V0KTtcbiAgcGxheWVyLm9uKCdwYXVzZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGxheWVyLnNjcnViYmluZygpIHx8IGxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBwYXVzZUNvdW50Kys7XG4gICAgICBwbGF5ZXIudHJpZ2dlcigndHJhY2tpbmc6cGF1c2UnLCB7IHBhdXNlQ291bnQ6IHBhdXNlQ291bnQgfSk7XG4gICAgfSwgMzAwKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYWNrIE92ZXJhbGwgUGVyY2VudGlsZSAoMXN0LCAybmQsIDNyZCwgYW5kIDR0aCkgb2YgQ29tcGxldGlvblxuICogVGhpcyBldmVudCB0cmlnZ2VycyBlYWNoIHF1YXJ0ZXIgb2YgYSB2aWRlby5cbiAqXG4gKiBFeGFtcGxlIFVzYWdlOlxuICogcGxheWVyLm9uKCd0cmFja2luZzpmaXJzdC1xdWFydGVyJywgKGUsIGRhdGEpID0+IGNvbnNvbGUubG9nKGRhdGEpKVxuICogcGxheWVyLm9uKCd0cmFja2luZzpzZWNvbmQtcXVhcnRlcicsIChlLCBkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSlcbiAqIHBsYXllci5vbigndHJhY2tpbmc6dGhpcmQtcXVhcnRlcicsIChlLCBkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSlcbiAqIHBsYXllci5vbigndHJhY2tpbmc6Zm91cnRoLXF1YXJ0ZXInLCAoZSwgZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpXG4gKlxuICogRGF0YSBBdHRyaWJ1dGVzOlxuICogPT4gcGF1c2VDb3VudDogICAgICAgVG90YWwgbnVtYmVyIG9mIFBhdXNlIGV2ZW50cyB0cmlnZ2VyZWRcbiAqID0+IHNlZWtDb3VudDogICAgICAgIFRvdGFsIG51bWJlciBvZiBTZWVrIGV2ZW50cyB0cmlnZ2VyZWRcbiAqID0+IGN1cnJlbnRUaW1lOiAgICAgIEN1cnJlbnQgc2Vjb25kIHZpZGVvIGlzIG9uXG4gKiA9PiBkdXJhdGlvbjogICAgICAgICBUb3RhbCBkdXJhdGlvbiBvZiB2aWRlb1xuICpcbiAqIEBmdW5jdGlvbiBQZXJjZW50aWxlVHJhY2tpbmdcbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBbY29uZmlnPXt9XVxuICogICAgICAgICAgIEFuIG9iamVjdCBvZiBjb25maWcgbGVmdCB0byB0aGUgcGx1Z2luIGF1dGhvciB0byBkZWZpbmUuXG4gKi9cblxudmFyIFBlcmNlbnRpbGVUcmFja2luZyA9IGZ1bmN0aW9uIFBlcmNlbnRpbGVUcmFja2luZyhjb25maWcpIHtcbiAgdmFyIHBsYXllciA9IHRoaXM7XG4gIHZhciBmaXJzdCA9IGZhbHNlO1xuICB2YXIgc2Vjb25kID0gZmFsc2U7XG4gIHZhciB0aGlyZCA9IGZhbHNlO1xuICB2YXIgZHVyYXRpb24gPSAwO1xuICB2YXIgcGF1c2VDb3VudCA9IDA7XG4gIHZhciBzZWVrQ291bnQgPSAwO1xuXG4gIHZhciByZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICBmaXJzdCA9IGZhbHNlO1xuICAgIHNlY29uZCA9IGZhbHNlO1xuICAgIHRoaXJkID0gZmFsc2U7XG4gICAgZHVyYXRpb24gPSAwO1xuICAgIHBhdXNlQ291bnQgPSAwO1xuICAgIHNlZWtDb3VudCA9IDA7XG4gIH07XG5cbiAgdmFyIGluY1BhdXNlID0gZnVuY3Rpb24gaW5jUGF1c2UoKSB7XG4gICAgcmV0dXJuIHBhdXNlQ291bnQrKztcbiAgfTtcbiAgdmFyIGluY1NlZWsgPSBmdW5jdGlvbiBpbmNTZWVrKCkge1xuICAgIHJldHVybiBzZWVrQ291bnQrKztcbiAgfTtcblxuICBwbGF5ZXIub24oJ2Rpc3Bvc2UnLCByZXNldCk7XG4gIHBsYXllci5vbignbG9hZHN0YXJ0JywgcmVzZXQpO1xuICBwbGF5ZXIub24oJ3RyYWNraW5nOnBhdXNlJywgaW5jUGF1c2UpO1xuICBwbGF5ZXIub24oJ3RyYWNraW5nOnNlZWsnLCBpbmNTZWVrKTtcbiAgcGxheWVyLm9uKCd0aW1ldXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBjdXJUaW1lID0gK3BsYXllci5jdXJyZW50VGltZSgpLnRvRml4ZWQoMCk7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBzZWVrQ291bnQ6IHNlZWtDb3VudCxcbiAgICAgIHBhdXNlQ291bnQ6IHBhdXNlQ291bnQsXG4gICAgICBjdXJyZW50VGltZTogY3VyVGltZSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblxuICAgIH07XG5cbiAgICBzd2l0Y2ggKGN1clRpbWUpIHtcbiAgICAgIGNhc2UgZmlyc3Q6XG4gICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIHBsYXllci50cmlnZ2VyKCd0cmFja2luZzpmaXJzdC1xdWFydGVyJywgZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBzZWNvbmQ6XG4gICAgICAgIHNlY29uZCA9IGZhbHNlO1xuICAgICAgICBwbGF5ZXIudHJpZ2dlcigndHJhY2tpbmc6c2Vjb25kLXF1YXJ0ZXInLCBkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXJkOlxuICAgICAgICB0aGlyZCA9IGZhbHNlO1xuICAgICAgICBwbGF5ZXIudHJpZ2dlcigndHJhY2tpbmc6dGhpcmQtcXVhcnRlcicsIGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xuICBwbGF5ZXIub24oJ2VuZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgc2Vla0NvdW50OiBzZWVrQ291bnQsXG4gICAgICBwYXVzZUNvdW50OiBwYXVzZUNvdW50LFxuICAgICAgY3VycmVudFRpbWU6IGR1cmF0aW9uLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uXG4gICAgfTtcblxuICAgIHBsYXllci50cmlnZ2VyKCd0cmFja2luZzpmb3VydGgtcXVhcnRlcicsIGRhdGEpO1xuICB9KTtcblxuICBwbGF5ZXIub24oJ2R1cmF0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIGR1cmF0aW9uID0gK3BsYXllci5kdXJhdGlvbigpLnRvRml4ZWQoMCk7XG4gICAgaWYgKGR1cmF0aW9uID4gMCkge1xuICAgICAgdmFyIHF1YXJ0ZXIgPSAoZHVyYXRpb24gLyA0KS50b0ZpeGVkKDApO1xuXG4gICAgICBmaXJzdCA9ICtxdWFydGVyO1xuICAgICAgc2Vjb25kID0gK3F1YXJ0ZXIgKiAyO1xuICAgICAgdGhpcmQgPSArcXVhcnRlciAqIDM7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogVHJhY2sgT3ZlcmFsbCBQZXJmb3JtYW5jZVxuICogVGhpcyBldmVudCB0cmlnZ2VycyB3aGVuIHRoZSBwbGF5ZXIgaGFzIGNoYW5nZWQgc291cmNlcywgaGFzIGVuZGVkLCBvclxuICogaGFzIGJlZW4gZGVzdHJveWVkLlxuICpcbiAqIEV4YW1wbGUgVXNhZ2U6XG4gKiBwbGF5ZXIub24oJ3RyYWNraW5nOnBlcmZvcm1hbmNlJywgKGUsIGRhdGEpID0+IGNvbnNvbGUubG9nKGRhdGEpKVxuICpcbiAqIERhdGEgQXR0cmlidXRlczpcbiAqID0+IHBhdXNlQ291bnQ6ICAgICAgIFRvdGFsIG51bWJlciBvZiBQYXVzZSBldmVudHMgdHJpZ2dlcmVkXG4gKiA9PiBzZWVrQ291bnQ6ICAgICAgICBUb3RhbCBudW1iZXIgb2YgU2VlayBldmVudHMgdHJpZ2dlcmVkXG4gKiA9PiBidWZmZXJDb3VudDogICAgICBUb3RhbCBudW1iZXIgb2YgQnVmZmVyIGV2ZW50cyB0cmlnZ2VyZWRcbiAqID0+IHRvdGFsRHVyYXRpb246ICAgIFRvdGFsIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBmaWxlXG4gKiA9PiB3YXRjaGVkRHVyYXRpb246ICBUb3RhbCBudW1iZXIgb2Ygc2Vjb25kcyB3YXRjaGVkIChub3Qgc2Vla2VkIHBhc3QpXG4gKiA9PiBidWZmZXJEdXJhdGlvbjogICBUb3RhbCBzZWNvbmRzIHRoYXQgYnVmZmVyaW5nIGhhcyBvY2N1cmVkXG4gKiA9PiBpbml0aWFsTG9hZFRpbWU6ICBTZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBpbml0aWFsIGZyYW1lIHRvIGFwcGVhclxuICpcbiAqIEBmdW5jdGlvbiBQZXJmb3JtYW5jZVRyYWNraW5nXG4gKiBAcGFyYW0gICAge09iamVjdH0gW2NvbmZpZz17fV1cbiAqICAgICAgICAgICBBbiBvYmplY3Qgb2YgY29uZmlnIGxlZnQgdG8gdGhlIHBsdWdpbiBhdXRob3IgdG8gZGVmaW5lLlxuICovXG52YXIgUGVyZm9ybWFuY2VUcmFja2luZyA9IGZ1bmN0aW9uIFBlcmZvcm1hbmNlVHJhY2tpbmcoY29uZmlnKSB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgY29uZmlnLnBlcmZvcm1hbmNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBsYXllciA9IHRoaXM7XG4gIHZhciBzZWVrQ291bnQgPSAwO1xuICB2YXIgcGF1c2VDb3VudCA9IDA7XG4gIHZhciBidWZmZXJDb3VudCA9IDA7XG4gIHZhciB0b3RhbER1cmF0aW9uID0gMDtcbiAgdmFyIHdhdGNoZWREdXJhdGlvbiA9IDA7XG4gIHZhciBidWZmZXJEdXJhdGlvbiA9IDA7XG4gIHZhciBpbml0aWFsTG9hZFRpbWUgPSAwO1xuICB2YXIgdGltZXN0YW1wcyA9IFtdO1xuXG4gIHZhciByZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHNlZWtDb3VudCA9IDA7XG4gICAgcGF1c2VDb3VudCA9IDA7XG4gICAgYnVmZmVyQ291bnQgPSAwO1xuICAgIHRvdGFsRHVyYXRpb24gPSAwO1xuICAgIHdhdGNoZWREdXJhdGlvbiA9IDA7XG4gICAgYnVmZmVyRHVyYXRpb24gPSAwO1xuICAgIGluaXRpYWxMb2FkVGltZSA9IDA7XG4gICAgdGltZXN0YW1wcyA9IFtdO1xuICB9O1xuXG4gIHZhciB0cmlnZ2VyID0gZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIHBhdXNlQ291bnQ6IHBhdXNlQ291bnQsXG4gICAgICBzZWVrQ291bnQ6IHNlZWtDb3VudCxcbiAgICAgIGJ1ZmZlckNvdW50OiBidWZmZXJDb3VudCxcbiAgICAgIHRvdGFsRHVyYXRpb246IHRvdGFsRHVyYXRpb24sXG4gICAgICB3YXRjaGVkRHVyYXRpb246IHdhdGNoZWREdXJhdGlvbixcbiAgICAgIGJ1ZmZlckR1cmF0aW9uOiBidWZmZXJEdXJhdGlvbixcbiAgICAgIGluaXRpYWxMb2FkVGltZTogaW5pdGlhbExvYWRUaW1lXG4gICAgfTtcblxuICAgIGNvbmZpZy5wZXJmb3JtYW5jZS5jYWxsKHBsYXllciwgZGF0YSk7XG4gIH07XG5cbiAgdmFyIHRyaWdnZXJBbmRSZXNldCA9IGZ1bmN0aW9uIHRyaWdnZXJBbmRSZXNldCgpIHtcbiAgICB0cmlnZ2VyKCk7XG4gICAgcmVzZXQoKTtcbiAgfTtcblxuICBpZiAodHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRyaWdnZXJBbmRSZXNldCk7XG4gICAgcGxheWVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRyaWdnZXJBbmRSZXNldCk7XG4gICAgfSk7XG4gIH1cblxuICBwbGF5ZXIub24oJ2xvYWRzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodG90YWxEdXJhdGlvbiA+IDApIHtcbiAgICAgIHRyaWdnZXIoKTtcbiAgICB9XG4gICAgcmVzZXQoKTtcbiAgfSk7XG4gIHBsYXllci5vbignZW5kZWQnLCB0cmlnZ2VyQW5kUmVzZXQpO1xuICBwbGF5ZXIub24oJ2Rpc3Bvc2UnLCB0cmlnZ2VyQW5kUmVzZXQpO1xuICBwbGF5ZXIub24oJ3RpbWV1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1clRpbWUgPSArcGxheWVyLmN1cnJlbnRUaW1lKCkudG9GaXhlZCgwKTtcblxuICAgIGlmICh0aW1lc3RhbXBzLmluZGV4T2YoY3VyVGltZSkgPCAwKSB7XG4gICAgICB0aW1lc3RhbXBzLnB1c2goY3VyVGltZSk7XG4gICAgfVxuICAgIHdhdGNoZWREdXJhdGlvbiA9IHRpbWVzdGFtcHMubGVuZ3RoO1xuICB9KTtcbiAgcGxheWVyLm9uKCdsb2FkZWRkYXRhJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICB0b3RhbER1cmF0aW9uID0gK3BsYXllci5kdXJhdGlvbigpLnRvRml4ZWQoMCk7XG4gIH0pO1xuICBwbGF5ZXIub24oJ3RyYWNraW5nOnNlZWsnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgIHNlZWtDb3VudCA9IGRhdGEuc2Vla0NvdW50O1xuICB9KTtcbiAgcGxheWVyLm9uKCd0cmFja2luZzpwYXVzZScsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgcGF1c2VDb3VudCA9IGRhdGEucGF1c2VDb3VudDtcbiAgfSk7XG4gIHBsYXllci5vbigndHJhY2tpbmc6YnVmZmVyZWQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgIGJ1ZmZlckNvdW50ID0gZGF0YS5idWZmZXJDb3VudDtcblxuICAgIGJ1ZmZlckR1cmF0aW9uID0gKyhidWZmZXJEdXJhdGlvbiArIGRhdGEuc2Vjb25kc1RvTG9hZCkudG9GaXhlZCgzKTtcbiAgfSk7XG4gIHBsYXllci5vbigndHJhY2tpbmc6Zmlyc3RwbGF5JywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICBpbml0aWFsTG9hZFRpbWUgPSBkYXRhLnNlY29uZHNUb0xvYWQ7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFjayBJbml0aWFsIFBsYXkgRXZlbnRcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHZpZGVvIGhhcyBiZWVuIHBsYXllZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gKiBJZiB5b3UgYXJlIGxvb2tpbmcgdG8gdHJhY2sgcGxheSBldmVudHMsIHNpbXBseSBsaXN0ZW4gb24gdGhlIHBsYXllciBmb3IgYSBub3JtYWxcbiAqIFwicGxheVwiIG9yIFwicGxheWluZ1wiIGV2ZW50LlxuICpcbiAqIEV4YW1wbGUgVXNhZ2U6XG4gKiBwbGF5ZXIub24oJ3RyYWNraW5nOmZpcnN0cGxheScsIChlLCBkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSlcbiAqXG4gKiBEYXRhIEF0dHJpYnV0ZXM6XG4gKiA9PiBzZWNvbmRzVG9Mb2FkOiBUb3RhbCBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBwbGF5ZXIgaW5pdGlhbGl6aW5nXG4gKiAgICAgICAgICAgICAgICAgICBhIHBsYXkgcmVxdWVzdCBhbmQgd2hlbiB0aGUgZmlyc3QgZnJhbWUgYmVnaW5zLlxuICpcbiAqIEBmdW5jdGlvbiBQbGF5VHJhY2tpbmdcbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBbY29uZmlnPXt9XVxuICogICAgICAgICAgIEFuIG9iamVjdCBvZiBjb25maWcgbGVmdCB0byB0aGUgcGx1Z2luIGF1dGhvciB0byBkZWZpbmUuXG4gKi9cblxudmFyIFBsYXlUcmFja2luZyA9IGZ1bmN0aW9uIFBsYXlUcmFja2luZyhjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgZmlyc3RwbGF5ID0gZmFsc2U7XG4gIHZhciBsb2Fkc3RhcnQgPSAwO1xuICB2YXIgbG9hZGVuZCA9IDA7XG4gIHZhciBzZWNvbmRzVG9Mb2FkID0gMDtcblxuICB2YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBmaXJzdHBsYXkgPSBmYWxzZTtcbiAgICBsb2Fkc3RhcnQgPSAwO1xuICAgIGxvYWRlbmQgPSAwO1xuICAgIHNlY29uZHNUb0xvYWQgPSAwO1xuICB9O1xuXG4gIHZhciBvbkxvYWRTdGFydCA9IGZ1bmN0aW9uIG9uTG9hZFN0YXJ0KCkge1xuICAgIHJlc2V0KCk7XG4gICAgbG9hZHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgfTtcblxuICB2YXIgb25Mb2FkZWREYXRhID0gZnVuY3Rpb24gb25Mb2FkZWREYXRhKCkge1xuICAgIGxvYWRlbmQgPSBuZXcgRGF0ZSgpO1xuICAgIHNlY29uZHNUb0xvYWQgPSAobG9hZGVuZCAtIGxvYWRzdGFydCkgLyAxMDAwO1xuICB9O1xuXG4gIHZhciBvblBsYXlpbmcgPSBmdW5jdGlvbiBvblBsYXlpbmcoKSB7XG4gICAgaWYgKCFmaXJzdHBsYXkpIHtcbiAgICAgIGZpcnN0cGxheSA9IHRydWU7XG4gICAgICBfdGhpcy50cmlnZ2VyKCd0cmFja2luZzpmaXJzdHBsYXknLCB7XG4gICAgICAgIHNlY29uZHNUb0xvYWQ6ICtzZWNvbmRzVG9Mb2FkLnRvRml4ZWQoMylcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLm9uKCdkaXNwb3NlJywgcmVzZXQpO1xuICB0aGlzLm9uKCdsb2Fkc3RhcnQnLCBvbkxvYWRTdGFydCk7XG4gIHRoaXMub24oJ2xvYWRlZGRhdGEnLCBvbkxvYWRlZERhdGEpO1xuICB0aGlzLm9uKCdwbGF5aW5nJywgb25QbGF5aW5nKTtcbn07XG5cbi8qKlxuICogVHJhY2sgU2Vla2luZyBFdmVudHNcbiAqIER1cmluZyBwbGF5YmFjaywgd2UgYXJlIHRyYWNraW5nIGhvdyBtYW55IHRpbWVzIGEgcGVyc29uIHNlZWtzLCBhbmRcbiAqIHRoZSBwb3NpdGlvbiBhIHVzZXIgaGFzIHNlZWtlZCB0by5cbiAqXG4gKiBFeGFtcGxlIFVzYWdlOlxuICogcGxheWVyLm9uKCd0cmFja2luZzpzZWVrJywgKGUsIGRhdGEpID0+IGNvbnNvbGUubG9nKGRhdGEpKVxuICpcbiAqIERhdGEgQXR0cmlidXRlczpcbiAqID0+IHNlZWtDb3VudDogdG90YWwgbnVtYmVyIG9mIHNlZWtzIHRoYXQgaGFzIG9jY3VyaW5nIGR1cmluZyB0aGlzIGZpbGVcbiAqID0+IHNlZWtUbzogUG9zaXRpb24sIGluIHNlY29uZHMsIHRoYXQgaGFzIGJlZW4gc2Vla2VkIHRvLlxuICpcbiAqIEBmdW5jdGlvbiBTZWVrVHJhY2tpbmdcbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBbY29uZmlnPXt9XVxuICogICAgICAgICAgIEFuIG9iamVjdCBvZiBjb25maWcgbGVmdCB0byB0aGUgcGx1Z2luIGF1dGhvciB0byBkZWZpbmUuXG4gKi9cbnZhciBTZWVrVHJhY2tpbmcgPSBmdW5jdGlvbiBTZWVrVHJhY2tpbmcoY29uZmlnKSB7XG4gIHZhciBwbGF5ZXIgPSB0aGlzO1xuICB2YXIgc2Vla0NvdW50ID0gMDtcbiAgdmFyIGxvY2tlZCA9IHRydWU7XG4gIHZhciByZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHNlZWtDb3VudCA9IDA7XG4gICAgbG9ja2VkID0gdHJ1ZTtcbiAgfTtcblxuICBwbGF5ZXIub24oJ2Rpc3Bvc2UnLCByZXNldCk7XG4gIHBsYXllci5vbignbG9hZHN0YXJ0JywgcmVzZXQpO1xuICBwbGF5ZXIub24oJ2VuZGVkJywgcmVzZXQpO1xuICBwbGF5ZXIub24oJ3BsYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgbG9ja2VkID0gZmFsc2U7XG4gIH0pO1xuICBwbGF5ZXIub24oJ3BhdXNlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmIChsb2NrZWQgfHwgIXBsYXllci5zY3J1YmJpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjdXJUaW1lID0gK3BsYXllci5jdXJyZW50VGltZSgpLnRvRml4ZWQoMCk7XG5cbiAgICBzZWVrQ291bnQrKztcbiAgICBwbGF5ZXIudHJpZ2dlcigndHJhY2tpbmc6c2VlaycsIHtcbiAgICAgIHNlZWtDb3VudDogK3NlZWtDb3VudCxcbiAgICAgIHNlZWtUbzogY3VyVGltZVxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIENyb3NzLWNvbXBhdGliaWxpdHkgZm9yIFZpZGVvLmpzIDUgYW5kIDYuXG52YXIgcmVnaXN0ZXJQbHVnaW4gPSB2aWRlb2pzLnJlZ2lzdGVyUGx1Z2luIHx8IHZpZGVvanMucGx1Z2luO1xudmFyIGdldFBsdWdpbiA9IHZpZGVvanMuZ2V0UGx1Z2luIHx8IHZpZGVvanMucGx1Z2luO1xuXG4vKipcbiAqIEV2ZW50IFRyYWNraW5nIGZvciBWaWRlb0pTXG4gKlxuICogQGZ1bmN0aW9uIGV2ZW50VHJhY2tpbmdcbiAqIEBwYXJhbSAgICB7T2JqZWN0fSBbb3B0aW9ucz17fV1cbiAqICAgICAgICAgICBBbiBvYmplY3Qgb2Ygb3B0aW9ucyBsZWZ0IHRvIHRoZSBwbHVnaW4gYXV0aG9yIHRvIGRlZmluZS5cbiAqL1xudmFyIGV2ZW50VHJhY2tpbmcgPSBmdW5jdGlvbiBldmVudFRyYWNraW5nKG9wdGlvbnMpIHtcbiAgUGF1c2VUcmFja2luZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBCdWZmZXJUcmFja2luZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBQZXJjZW50aWxlVHJhY2tpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgUGxheVRyYWNraW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIFNlZWtUcmFja2luZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBQZXJmb3JtYW5jZVRyYWNraW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG4vLyBSZWdpc3RlciB0aGUgcGx1Z2luIHdpdGggdmlkZW8uanMsIGF2b2lkIGRvdWJsZSByZWdpc3RyYXRpb25cbmlmICh0eXBlb2YgZ2V0UGx1Z2luKCdldmVudFRyYWNraW5nJykgPT09ICd1bmRlZmluZWQnKSB7XG4gIHJlZ2lzdGVyUGx1Z2luKCdldmVudFRyYWNraW5nJywgZXZlbnRUcmFja2luZyk7XG59XG5cbi8vIEluY2x1ZGUgdGhlIHZlcnNpb24gbnVtYmVyLlxuZXZlbnRUcmFja2luZy5WRVJTSU9OID0gdmVyc2lvbjtcblxuZXhwb3J0IGRlZmF1bHQgZXZlbnRUcmFja2luZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBbEJBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEVBO0FBdUVBOzs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBTEE7QUFoQkE7QUE0QkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFUQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBUkE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQWhFQTtBQTRFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFYQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU5BO0FBUUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUVBO0FBSEE7QUFLQTtBQUNBO0FBREE7QUFsRkE7QUF1RkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBTkE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBckNBO0FBd0NBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFmQTtBQUNBO0FBQ0E7QUE2QkE7QUFDQTtBQUVBOzs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/videojs-event-tracking/dist/videojs-event-tracking.es.js\n"); - -/***/ }), - -/***/ "../node_modules/videojs-vtt.js/lib/browser-index.js": -/*!***********************************************************!*\ - !*** ../node_modules/videojs-vtt.js/lib/browser-index.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\nvar window = __webpack_require__(/*! global/window */ \"../node_modules/global/window.js\");\n\nvar vttjs = module.exports = {\n WebVTT: __webpack_require__(/*! ./vtt.js */ \"../node_modules/videojs-vtt.js/lib/vtt.js\"),\n VTTCue: __webpack_require__(/*! ./vttcue.js */ \"../node_modules/videojs-vtt.js/lib/vttcue.js\"),\n VTTRegion: __webpack_require__(/*! ./vttregion.js */ \"../node_modules/videojs-vtt.js/lib/vttregion.js\")\n};\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function () {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function () {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi9icm93c2VyLWluZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92aWRlb2pzLXZ0dC5qcy9saWIvYnJvd3Nlci1pbmRleC5qcz81MGFjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMgdnR0LmpzIENvbnRyaWJ1dG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gRGVmYXVsdCBleHBvcnRzIGZvciBOb2RlLiBFeHBvcnQgdGhlIGV4dGVuZGVkIHZlcnNpb25zIG9mIFZUVEN1ZSBhbmRcbi8vIFZUVFJlZ2lvbiBpbiBOb2RlIHNpbmNlIHdlIGxpa2VseSB3YW50IHRoZSBjYXBhYmlsaXR5IHRvIGNvbnZlcnQgYmFjayBhbmRcbi8vIGZvcnRoIGJldHdlZW4gSlNPTi4gSWYgd2UgZG9uJ3QgdGhlbiBpdCdzIG5vdCB0aGF0IGJpZyBvZiBhIGRlYWwgc2luY2Ugd2UncmVcbi8vIG9mZiBicm93c2VyLlxuXG52YXIgd2luZG93ID0gcmVxdWlyZSgnZ2xvYmFsL3dpbmRvdycpO1xuXG52YXIgdnR0anMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2ViVlRUOiByZXF1aXJlKFwiLi92dHQuanNcIiksXG4gIFZUVEN1ZTogcmVxdWlyZShcIi4vdnR0Y3VlLmpzXCIpLFxuICBWVFRSZWdpb246IHJlcXVpcmUoXCIuL3Z0dHJlZ2lvbi5qc1wiKVxufTtcblxud2luZG93LnZ0dGpzID0gdnR0anM7XG53aW5kb3cuV2ViVlRUID0gdnR0anMuV2ViVlRUO1xuXG52YXIgY3VlU2hpbSA9IHZ0dGpzLlZUVEN1ZTtcbnZhciByZWdpb25TaGltID0gdnR0anMuVlRUUmVnaW9uO1xudmFyIG5hdGl2ZVZUVEN1ZSA9IHdpbmRvdy5WVFRDdWU7XG52YXIgbmF0aXZlVlRUUmVnaW9uID0gd2luZG93LlZUVFJlZ2lvbjtcblxudnR0anMuc2hpbSA9IGZ1bmN0aW9uKCkge1xuICB3aW5kb3cuVlRUQ3VlID0gY3VlU2hpbTtcbiAgd2luZG93LlZUVFJlZ2lvbiA9IHJlZ2lvblNoaW07XG59O1xuXG52dHRqcy5yZXN0b3JlID0gZnVuY3Rpb24oKSB7XG4gIHdpbmRvdy5WVFRDdWUgPSBuYXRpdmVWVFRDdWU7XG4gIHdpbmRvdy5WVFRSZWdpb24gPSBuYXRpdmVWVFRSZWdpb247XG59O1xuXG5pZiAoIXdpbmRvdy5WVFRDdWUpIHtcbiAgdnR0anMuc2hpbSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/videojs-vtt.js/lib/browser-index.js\n"); - -/***/ }), - -/***/ "../node_modules/videojs-vtt.js/lib/vtt.js": -/*!*************************************************!*\ - !*** ../node_modules/videojs-vtt.js/lib/vtt.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar _objCreate = Object.create || function () {\n function F() {}\n\n return function (o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n\n F.prototype = o;\n return new F();\n };\n}(); // Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\n\n\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\n\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError; // ParsingError metadata for acceptable ParsingErrors.\n\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n}; // Try to parse input as a time stamp.\n\nfunction parseTimeStamp(input) {\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{2})(:\\d{2})?\\.(\\d{3})/);\n\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n} // A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\n\n\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function set(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function get(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function has(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function alt(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function integer(k, v) {\n if (/^-?\\d+$/.test(v)) {\n // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function percent(k, v) {\n var m;\n\n if (m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/)) {\n v = parseFloat(v);\n\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n\n return false;\n }\n}; // Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\n\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n\n var kv = groups[i].split(keyValueDelim);\n\n if (kv.length !== 2) {\n continue;\n }\n\n var k = kv[0];\n var v = kv[1];\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input; // 4.1 WebVTT timestamp\n\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp, \"Malformed timestamp: \" + oInput);\n } // Remove time stamp from input.\n\n\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n } // 4.4.2 WebVTT cue settings\n\n\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n\n break;\n\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n\n break;\n\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n\n break;\n\n case \"size\":\n settings.percent(k, v);\n break;\n\n case \"align\":\n settings.alt(k, v, [\"start\", \"middle\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/); // Apply default values for any missing fields.\n\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n cue.line = settings.get(\"line\", \"auto\");\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n cue.align = settings.get(\"align\", \"middle\");\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n middle: \"middle\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n } // 4.1 WebVTT cue timings.\n\n\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n\n skipWhitespace();\n\n if (input.substr(0, 3) !== \"-->\") {\n // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp, \"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n }\n\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n // 4.1 WebVTT cue settings list.\n\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\nvar ESCAPE = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"‎\": \"\\u200E\",\n \"‏\": \"\\u200F\",\n \" \": \"\\xA0\"\n};\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n}; // Parse content into a document fragment.\n\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n } // Consume 'n' characters from the input.\n\n\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/); // If there is some text before the next tag, return it, otherwise return\n // the tag.\n\n return consume(m[1] ? m[1] : m[2]);\n } // Unescape a string 's'.\n\n\n function unescape1(e) {\n return ESCAPE[e];\n }\n\n function unescape(s) {\n while (m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/)) {\n s = s.replace(m[0], unescape1);\n }\n\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] || NEEDS_PARENT[element.localName] === current.localName;\n } // Create an element for this tag.\n\n\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n\n if (!tagName) {\n return null;\n }\n\n var element = window.document.createElement(tagName);\n element.localName = tagName;\n var name = TAG_ANNOTATION[type];\n\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length && tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n } // Otherwise just ignore the end tag.\n\n\n continue;\n }\n\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/); // If we can't parse the tag, skip to the next tag.\n\n if (!m) {\n continue;\n } // Try to construct an element, and ignore the tag if we couldn't.\n\n\n node = createElement(m[1], m[3]);\n\n if (!node) {\n continue;\n } // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n\n\n if (!shouldAdd(current, node)) {\n continue;\n } // Set the class list (as a list of classes, separated by space).\n\n\n if (m[2]) {\n node.className = m[2].substr(1).replace('.', ' ');\n } // Append the node to the current node, and enter the scope of the new\n // node.\n\n\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n } // Text nodes are leaf nodes.\n\n\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n} // This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n\n\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6], [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d], [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6], [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5], [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815], [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858], [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f], [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c], [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1], [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc], [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808], [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855], [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f], [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13], [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58], [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72], [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f], [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32], [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42], [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f], [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59], [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62], [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77], [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b], [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n\n return text;\n }\n\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n\n while (text = nextTextNode(nodeStack)) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" && (cue.snapToLines || cue.line >= 0 && cue.line <= 100)) {\n return cue.line;\n }\n\n if (!cue.track || !cue.track.textTrackList || !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n\n return ++count * -1;\n}\n\nfunction StyleBox() {} // Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\n\n\nStyleBox.prototype.applyStyles = function (styles, div) {\n div = div || this.div;\n\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function (val, unit) {\n return val === 0 ? 0 : val + unit;\n}; // Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\n\n\nfunction CueStyleBox(window, cue, styleOptions) {\n StyleBox.call(this);\n this.cue = cue; // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: \"rgba(255, 255, 255, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\",\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\" : cue.vertical === \"lr\" ? \"vertical-lr\" : \"vertical-rl\",\n unicodeBidi: \"plaintext\"\n };\n this.applyStyles(styles, this.cueDiv); // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except \"middle\" which is \"center\" in CSS.\n\n this.div = window.document.createElement(\"div\");\n styles = {\n direction: determineBidi(this.cueDiv),\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\" : cue.vertical === \"lr\" ? \"vertical-lr\" : \"vertical-rl\",\n unicodeBidi: \"plaintext\",\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n this.applyStyles(styles);\n this.div.appendChild(this.cueDiv); // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n\n var textPos = 0;\n\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n\n case \"middle\":\n textPos = cue.position - cue.size / 2;\n break;\n\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n } // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n\n\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n }); // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function (box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\n\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox; // Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\n\nfunction BoxPosition(obj) {\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) && rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect(); // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n\n lh = rects ? Math.max(rects[0] && rects[0].height || 0, obj.height / rects.length) : 0;\n }\n\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || top + (obj.height || height);\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n} // Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\n\n\nBoxPosition.prototype.move = function (axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n}; // Check if this box overlaps another box, b2.\n\n\nBoxPosition.prototype.overlaps = function (b2) {\n return this.left < b2.right && this.right > b2.left && this.top < b2.bottom && this.bottom > b2.top;\n}; // Check if this box overlaps any other boxes in boxes.\n\n\nBoxPosition.prototype.overlapsAny = function (boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n\n return false;\n}; // Check if this box is within another box.\n\n\nBoxPosition.prototype.within = function (container) {\n return this.top >= container.top && this.bottom <= container.bottom && this.left >= container.left && this.right <= container.right;\n}; // Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\n\n\nBoxPosition.prototype.overlapsOppositeAxis = function (container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n\n case \"-x\":\n return this.right > container.right;\n\n case \"+y\":\n return this.top < container.top;\n\n case \"-y\":\n return this.bottom > container.bottom;\n }\n}; // Find the percentage of the area that this box is overlapping with another\n// box.\n\n\nBoxPosition.prototype.intersectPercentage = function (b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n}; // Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\n\n\nBoxPosition.prototype.toCSSCompatValues = function (reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n}; // Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\n\n\nBoxPosition.getSimpleBoxPosition = function (obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n obj = obj.div ? obj.div.getBoundingClientRect() : obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || top + (obj.height || height),\n width: obj.width || width\n };\n return ret;\n}; // Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\n\n\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) || b.within(containerBox) && b.overlapsAny(boxPositions)) {\n b.move(axis[i]);\n } // We found a spot where we aren't overlapping anything. This is our\n // best position.\n\n\n if (b.within(containerBox)) {\n return b;\n }\n\n var p = b.intersectPercentage(containerBox); // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n } // Reset the box position to the specified position.\n\n\n b = new BoxPosition(specifiedPosition);\n }\n\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = []; // If we have a line number to align the cue to.\n\n if (cue.snapToLines) {\n var size;\n\n switch (cue.vertical) {\n case \"\":\n axis = [\"+y\", \"-y\"];\n size = \"height\";\n break;\n\n case \"rl\":\n axis = [\"+x\", \"-x\"];\n size = \"width\";\n break;\n\n case \"lr\":\n axis = [\"-x\", \"+x\"];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0]; // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n } // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n\n\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n } // Move the box to the specified position. This may not be its best\n // position.\n\n\n boxPosition.move(initialAxis, position);\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = boxPosition.lineHeight / containerBox.height * 100;\n\n switch (cue.lineAlign) {\n case \"middle\":\n linePos -= calculatedPercentage / 2;\n break;\n\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n } // Apply initial line position to the cue box.\n\n\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [\"+y\", \"-x\", \"+x\", \"-y\"]; // Get the box position again after we've applied the specified positioning\n // to it.\n\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {} // Nothing\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\n\n\nWebVTT.StringDecoder = function () {\n return {\n decode: function decode(data) {\n if (!data) {\n return \"\";\n }\n\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function (window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\"; // Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\n\nWebVTT.processCues = function (window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n } // Remove all previous children.\n\n\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay); // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n\n return false;\n } // We don't need to recompute the cues' display states. Just reuse them.\n\n\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function () {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i]; // Compute the intial position and styles of the cue div.\n\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div); // Move the cue div to it's correct line position.\n\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions); // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n\n cue.displayState = styleBox.div;\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function (window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function reportOrThrowError(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function parse(data) {\n var self = this; // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {\n stream: true\n });\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n\n var line = buffer.substr(0, pos); // Advance the buffer early in case we fail below.\n\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n\n self.buffer = buffer.substr(pos);\n return line;\n } // 3.4 WebVTT region and WebVTT region settings syntax\n\n\n function parseRegion(input) {\n var settings = new Settings();\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n\n case \"width\":\n settings.percent(k, v);\n break;\n\n case \"lines\":\n settings.integer(k, v);\n break;\n\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n\n if (xy.length !== 2) {\n break;\n } // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n\n\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/); // Create the region, using default values for any values that were not\n // specified.\n\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\"); // Register the region.\n\n self.onregion && self.onregion(region); // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n } // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n\n\n function parseTimestampMap(input) {\n var settings = new Settings();\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n } // 3.2 WebVTT metadata header syntax\n\n\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n } // 5.1 WebVTT file parsing.\n\n\n try {\n var line;\n\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n\n continue;\n\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n\n continue;\n\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n } // 19-29 - Allow any number of line terminators, then initialize new cue values.\n\n\n if (!line) {\n continue;\n }\n\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n self.state = \"CUE\"; // 30-39 - Check if self line contains an optional identifier or timing data.\n\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n\n // Process line as start of a cue.\n\n /*falls through*/\n\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e); // In case of an error ignore rest of the cue.\n\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n\n self.state = \"CUETEXT\";\n continue;\n\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1; // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n\n self.cue.text += line;\n continue;\n\n case \"BADCUE\":\n // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e); // If we are currently parsing a cue, report what we have.\n\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n\n self.cue = null; // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n\n return this;\n },\n flush: function flush() {\n var self = this;\n\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode(); // Synthesize the end of the current cue or region.\n\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n } // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n\n\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch (e) {\n self.reportOrThrowError(e);\n }\n\n self.onflush && self.onflush();\n return this;\n }\n};\nmodule.exports = WebVTT;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHQuanM/MGVjMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzIHZ0dC5qcyBDb250cmlidXRvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIC0qLSBNb2RlOiBKYXZhOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovXG4vKiB2aW06IHNldCBzaGlmdHdpZHRoPTIgdGFic3RvcD0yIGF1dG9pbmRlbnQgY2luZGVudCBleHBhbmR0YWI6ICovXG52YXIgX29iakNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBGKCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKG8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPYmplY3QuY3JlYXRlIHNoaW0gb25seSBhY2NlcHRzIG9uZSBwYXJhbWV0ZXIuJyk7XG4gICAgfVxuICAgIEYucHJvdG90eXBlID0gbztcbiAgICByZXR1cm4gbmV3IEYoKTtcbiAgfTtcbn0pKCk7XG5cbi8vIENyZWF0ZXMgYSBuZXcgUGFyc2VyRXJyb3Igb2JqZWN0IGZyb20gYW4gZXJyb3JEYXRhIG9iamVjdC4gVGhlIGVycm9yRGF0YVxuLy8gb2JqZWN0IHNob3VsZCBoYXZlIGRlZmF1bHQgY29kZSBhbmQgbWVzc2FnZSBwcm9wZXJ0aWVzLiBUaGUgZGVmYXVsdCBtZXNzYWdlXG4vLyBwcm9wZXJ0eSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHBhc3NpbmcgaW4gYSBtZXNzYWdlIHBhcmFtZXRlci5cbi8vIFNlZSBQYXJzaW5nRXJyb3IuRXJyb3JzIGJlbG93IGZvciBhY2NlcHRhYmxlIGVycm9ycy5cbmZ1bmN0aW9uIFBhcnNpbmdFcnJvcihlcnJvckRhdGEsIG1lc3NhZ2UpIHtcbiAgdGhpcy5uYW1lID0gXCJQYXJzaW5nRXJyb3JcIjtcbiAgdGhpcy5jb2RlID0gZXJyb3JEYXRhLmNvZGU7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3JEYXRhLm1lc3NhZ2U7XG59XG5QYXJzaW5nRXJyb3IucHJvdG90eXBlID0gX29iakNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUGFyc2luZ0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNpbmdFcnJvcjtcblxuLy8gUGFyc2luZ0Vycm9yIG1ldGFkYXRhIGZvciBhY2NlcHRhYmxlIFBhcnNpbmdFcnJvcnMuXG5QYXJzaW5nRXJyb3IuRXJyb3JzID0ge1xuICBCYWRTaWduYXR1cmU6IHtcbiAgICBjb2RlOiAwLFxuICAgIG1lc3NhZ2U6IFwiTWFsZm9ybWVkIFdlYlZUVCBzaWduYXR1cmUuXCJcbiAgfSxcbiAgQmFkVGltZVN0YW1wOiB7XG4gICAgY29kZTogMSxcbiAgICBtZXNzYWdlOiBcIk1hbGZvcm1lZCB0aW1lIHN0YW1wLlwiXG4gIH1cbn07XG5cbi8vIFRyeSB0byBwYXJzZSBpbnB1dCBhcyBhIHRpbWUgc3RhbXAuXG5mdW5jdGlvbiBwYXJzZVRpbWVTdGFtcChpbnB1dCkge1xuXG4gIGZ1bmN0aW9uIGNvbXB1dGVTZWNvbmRzKGgsIG0sIHMsIGYpIHtcbiAgICByZXR1cm4gKGggfCAwKSAqIDM2MDAgKyAobSB8IDApICogNjAgKyAocyB8IDApICsgKGYgfCAwKSAvIDEwMDA7XG4gIH1cblxuICB2YXIgbSA9IGlucHV0Lm1hdGNoKC9eKFxcZCspOihcXGR7Mn0pKDpcXGR7Mn0pP1xcLihcXGR7M30pLyk7XG4gIGlmICghbSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKG1bM10pIHtcbiAgICAvLyBUaW1lc3RhbXAgdGFrZXMgdGhlIGZvcm0gb2YgW2hvdXJzXTpbbWludXRlc106W3NlY29uZHNdLlttaWxsaXNlY29uZHNdXG4gICAgcmV0dXJuIGNvbXB1dGVTZWNvbmRzKG1bMV0sIG1bMl0sIG1bM10ucmVwbGFjZShcIjpcIiwgXCJcIiksIG1bNF0pO1xuICB9IGVsc2UgaWYgKG1bMV0gPiA1OSkge1xuICAgIC8vIFRpbWVzdGFtcCB0YWtlcyB0aGUgZm9ybSBvZiBbaG91cnNdOlttaW51dGVzXS5bbWlsbGlzZWNvbmRzXVxuICAgIC8vIEZpcnN0IHBvc2l0aW9uIGlzIGhvdXJzIGFzIGl0J3Mgb3ZlciA1OS5cbiAgICByZXR1cm4gY29tcHV0ZVNlY29uZHMobVsxXSwgbVsyXSwgMCwgIG1bNF0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFRpbWVzdGFtcCB0YWtlcyB0aGUgZm9ybSBvZiBbbWludXRlc106W3NlY29uZHNdLlttaWxsaXNlY29uZHNdXG4gICAgcmV0dXJuIGNvbXB1dGVTZWNvbmRzKDAsIG1bMV0sIG1bMl0sIG1bNF0pO1xuICB9XG59XG5cbi8vIEEgc2V0dGluZ3Mgb2JqZWN0IGhvbGRzIGtleS92YWx1ZSBwYWlycyBhbmQgd2lsbCBpZ25vcmUgYW55dGhpbmcgYnV0IHRoZSBmaXJzdFxuLy8gYXNzaWdubWVudCB0byBhIHNwZWNpZmljIGtleS5cbmZ1bmN0aW9uIFNldHRpbmdzKCkge1xuICB0aGlzLnZhbHVlcyA9IF9vYmpDcmVhdGUobnVsbCk7XG59XG5cblNldHRpbmdzLnByb3RvdHlwZSA9IHtcbiAgLy8gT25seSBhY2NlcHQgdGhlIGZpcnN0IGFzc2lnbm1lbnQgdG8gYW55IGtleS5cbiAgc2V0OiBmdW5jdGlvbihrLCB2KSB7XG4gICAgaWYgKCF0aGlzLmdldChrKSAmJiB2ICE9PSBcIlwiKSB7XG4gICAgICB0aGlzLnZhbHVlc1trXSA9IHY7XG4gICAgfVxuICB9LFxuICAvLyBSZXR1cm4gdGhlIHZhbHVlIGZvciBhIGtleSwgb3IgYSBkZWZhdWx0IHZhbHVlLlxuICAvLyBJZiAnZGVmYXVsdEtleScgaXMgcGFzc2VkIHRoZW4gJ2RmbHQnIGlzIGFzc3VtZWQgdG8gYmUgYW4gb2JqZWN0IHdpdGhcbiAgLy8gYSBudW1iZXIgb2YgcG9zc2libGUgZGVmYXVsdCB2YWx1ZXMgYXMgcHJvcGVydGllcyB3aGVyZSAnZGVmYXVsdEtleScgaXNcbiAgLy8gdGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIGNob3Nlbjsgb3RoZXJ3aXNlIGl0J3MgYXNzdW1lZCB0byBiZVxuICAvLyBhIHNpbmdsZSB2YWx1ZS5cbiAgZ2V0OiBmdW5jdGlvbihrLCBkZmx0LCBkZWZhdWx0S2V5KSB7XG4gICAgaWYgKGRlZmF1bHRLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhcyhrKSA/IHRoaXMudmFsdWVzW2tdIDogZGZsdFtkZWZhdWx0S2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzKGspID8gdGhpcy52YWx1ZXNba10gOiBkZmx0O1xuICB9LFxuICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgYSB2YWx1ZSBmb3IgYSBrZXkuXG4gIGhhczogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBrIGluIHRoaXMudmFsdWVzO1xuICB9LFxuICAvLyBBY2NlcHQgYSBzZXR0aW5nIGlmIGl0cyBvbmUgb2YgdGhlIGdpdmVuIGFsdGVybmF0aXZlcy5cbiAgYWx0OiBmdW5jdGlvbihrLCB2LCBhKSB7XG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBhLmxlbmd0aDsgKytuKSB7XG4gICAgICBpZiAodiA9PT0gYVtuXSkge1xuICAgICAgICB0aGlzLnNldChrLCB2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvLyBBY2NlcHQgYSBzZXR0aW5nIGlmIGl0cyBhIHZhbGlkIChzaWduZWQpIGludGVnZXIuXG4gIGludGVnZXI6IGZ1bmN0aW9uKGssIHYpIHtcbiAgICBpZiAoL14tP1xcZCskLy50ZXN0KHYpKSB7IC8vIGludGVnZXJcbiAgICAgIHRoaXMuc2V0KGssIHBhcnNlSW50KHYsIDEwKSk7XG4gICAgfVxuICB9LFxuICAvLyBBY2NlcHQgYSBzZXR0aW5nIGlmIGl0cyBhIHZhbGlkIHBlcmNlbnRhZ2UuXG4gIHBlcmNlbnQ6IGZ1bmN0aW9uKGssIHYpIHtcbiAgICB2YXIgbTtcbiAgICBpZiAoKG0gPSB2Lm1hdGNoKC9eKFtcXGRdezEsM30pKFxcLltcXGRdKik/JSQvKSkpIHtcbiAgICAgIHYgPSBwYXJzZUZsb2F0KHYpO1xuICAgICAgaWYgKHYgPj0gMCAmJiB2IDw9IDEwMCkge1xuICAgICAgICB0aGlzLnNldChrLCB2KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBhcnNlIGlucHV0IGludG8gZ3JvdXBzIHNlcGFyYXRlZCBieSAnZ3JvdXBEZWxpbScsIGFuZFxuLy8gaW50ZXJwcmV0ZSBlYWNoIGdyb3VwIGFzIGEga2V5L3ZhbHVlIHBhaXIgc2VwYXJhdGVkIGJ5ICdrZXlWYWx1ZURlbGltJy5cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhpbnB1dCwgY2FsbGJhY2ssIGtleVZhbHVlRGVsaW0sIGdyb3VwRGVsaW0pIHtcbiAgdmFyIGdyb3VwcyA9IGdyb3VwRGVsaW0gPyBpbnB1dC5zcGxpdChncm91cERlbGltKSA6IFtpbnB1dF07XG4gIGZvciAodmFyIGkgaW4gZ3JvdXBzKSB7XG4gICAgaWYgKHR5cGVvZiBncm91cHNbaV0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIga3YgPSBncm91cHNbaV0uc3BsaXQoa2V5VmFsdWVEZWxpbSk7XG4gICAgaWYgKGt2Lmxlbmd0aCAhPT0gMikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBrID0ga3ZbMF07XG4gICAgdmFyIHYgPSBrdlsxXTtcbiAgICBjYWxsYmFjayhrLCB2KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUN1ZShpbnB1dCwgY3VlLCByZWdpb25MaXN0KSB7XG4gIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCBpbnB1dCBpZiB3ZSBuZWVkIHRvIHRocm93IGFuIGVycm9yLlxuICB2YXIgb0lucHV0ID0gaW5wdXQ7XG4gIC8vIDQuMSBXZWJWVFQgdGltZXN0YW1wXG4gIGZ1bmN0aW9uIGNvbnN1bWVUaW1lU3RhbXAoKSB7XG4gICAgdmFyIHRzID0gcGFyc2VUaW1lU3RhbXAoaW5wdXQpO1xuICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNpbmdFcnJvcihQYXJzaW5nRXJyb3IuRXJyb3JzLkJhZFRpbWVTdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk1hbGZvcm1lZCB0aW1lc3RhbXA6IFwiICsgb0lucHV0KTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRpbWUgc3RhbXAgZnJvbSBpbnB1dC5cbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL15bXlxcc2EtekEtWi1dKy8sIFwiXCIpO1xuICAgIHJldHVybiB0cztcbiAgfVxuXG4gIC8vIDQuNC4yIFdlYlZUVCBjdWUgc2V0dGluZ3NcbiAgZnVuY3Rpb24gY29uc3VtZUN1ZVNldHRpbmdzKGlucHV0LCBjdWUpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoKTtcblxuICAgIHBhcnNlT3B0aW9ucyhpbnB1dCwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgIHN3aXRjaCAoaykge1xuICAgICAgY2FzZSBcInJlZ2lvblwiOlxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IHJlZ2lvbiB3ZSBwYXJzZWQgd2l0aCB0aGUgc2FtZSByZWdpb24gaWQuXG4gICAgICAgIGZvciAodmFyIGkgPSByZWdpb25MaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKHJlZ2lvbkxpc3RbaV0uaWQgPT09IHYpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLnNldChrLCByZWdpb25MaXN0W2ldLnJlZ2lvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmVydGljYWxcIjpcbiAgICAgICAgc2V0dGluZ3MuYWx0KGssIHYsIFtcInJsXCIsIFwibHJcIl0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgIHZhciB2YWxzID0gdi5zcGxpdChcIixcIiksXG4gICAgICAgICAgICB2YWxzMCA9IHZhbHNbMF07XG4gICAgICAgIHNldHRpbmdzLmludGVnZXIoaywgdmFsczApO1xuICAgICAgICBzZXR0aW5ncy5wZXJjZW50KGssIHZhbHMwKSA/IHNldHRpbmdzLnNldChcInNuYXBUb0xpbmVzXCIsIGZhbHNlKSA6IG51bGw7XG4gICAgICAgIHNldHRpbmdzLmFsdChrLCB2YWxzMCwgW1wiYXV0b1wiXSk7XG4gICAgICAgIGlmICh2YWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHNldHRpbmdzLmFsdChcImxpbmVBbGlnblwiLCB2YWxzWzFdLCBbXCJzdGFydFwiLCBcIm1pZGRsZVwiLCBcImVuZFwiXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICAgICAgdmFscyA9IHYuc3BsaXQoXCIsXCIpO1xuICAgICAgICBzZXR0aW5ncy5wZXJjZW50KGssIHZhbHNbMF0pO1xuICAgICAgICBpZiAodmFscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBzZXR0aW5ncy5hbHQoXCJwb3NpdGlvbkFsaWduXCIsIHZhbHNbMV0sIFtcInN0YXJ0XCIsIFwibWlkZGxlXCIsIFwiZW5kXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHNldHRpbmdzLnBlcmNlbnQoaywgdik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFsaWduXCI6XG4gICAgICAgIHNldHRpbmdzLmFsdChrLCB2LCBbXCJzdGFydFwiLCBcIm1pZGRsZVwiLCBcImVuZFwiLCBcImxlZnRcIiwgXCJyaWdodFwiXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sIC86LywgL1xccy8pO1xuXG4gICAgLy8gQXBwbHkgZGVmYXVsdCB2YWx1ZXMgZm9yIGFueSBtaXNzaW5nIGZpZWxkcy5cbiAgICBjdWUucmVnaW9uID0gc2V0dGluZ3MuZ2V0KFwicmVnaW9uXCIsIG51bGwpO1xuICAgIGN1ZS52ZXJ0aWNhbCA9IHNldHRpbmdzLmdldChcInZlcnRpY2FsXCIsIFwiXCIpO1xuICAgIGN1ZS5saW5lID0gc2V0dGluZ3MuZ2V0KFwibGluZVwiLCBcImF1dG9cIik7XG4gICAgY3VlLmxpbmVBbGlnbiA9IHNldHRpbmdzLmdldChcImxpbmVBbGlnblwiLCBcInN0YXJ0XCIpO1xuICAgIGN1ZS5zbmFwVG9MaW5lcyA9IHNldHRpbmdzLmdldChcInNuYXBUb0xpbmVzXCIsIHRydWUpO1xuICAgIGN1ZS5zaXplID0gc2V0dGluZ3MuZ2V0KFwic2l6ZVwiLCAxMDApO1xuICAgIGN1ZS5hbGlnbiA9IHNldHRpbmdzLmdldChcImFsaWduXCIsIFwibWlkZGxlXCIpO1xuICAgIGN1ZS5wb3NpdGlvbiA9IHNldHRpbmdzLmdldChcInBvc2l0aW9uXCIsIHtcbiAgICAgIHN0YXJ0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIG1pZGRsZTogNTAsXG4gICAgICBlbmQ6IDEwMCxcbiAgICAgIHJpZ2h0OiAxMDBcbiAgICB9LCBjdWUuYWxpZ24pO1xuICAgIGN1ZS5wb3NpdGlvbkFsaWduID0gc2V0dGluZ3MuZ2V0KFwicG9zaXRpb25BbGlnblwiLCB7XG4gICAgICBzdGFydDogXCJzdGFydFwiLFxuICAgICAgbGVmdDogXCJzdGFydFwiLFxuICAgICAgbWlkZGxlOiBcIm1pZGRsZVwiLFxuICAgICAgZW5kOiBcImVuZFwiLFxuICAgICAgcmlnaHQ6IFwiZW5kXCJcbiAgICB9LCBjdWUuYWxpZ24pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2tpcFdoaXRlc3BhY2UoKSB7XG4gICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9eXFxzKy8sIFwiXCIpO1xuICB9XG5cbiAgLy8gNC4xIFdlYlZUVCBjdWUgdGltaW5ncy5cbiAgc2tpcFdoaXRlc3BhY2UoKTtcbiAgY3VlLnN0YXJ0VGltZSA9IGNvbnN1bWVUaW1lU3RhbXAoKTsgICAvLyAoMSkgY29sbGVjdCBjdWUgc3RhcnQgdGltZVxuICBza2lwV2hpdGVzcGFjZSgpO1xuICBpZiAoaW5wdXQuc3Vic3RyKDAsIDMpICE9PSBcIi0tPlwiKSB7ICAgICAvLyAoMykgbmV4dCBjaGFyYWN0ZXJzIG11c3QgbWF0Y2ggXCItLT5cIlxuICAgIHRocm93IG5ldyBQYXJzaW5nRXJyb3IoUGFyc2luZ0Vycm9yLkVycm9ycy5CYWRUaW1lU3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIk1hbGZvcm1lZCB0aW1lIHN0YW1wICh0aW1lIHN0YW1wcyBtdXN0IGJlIHNlcGFyYXRlZCBieSAnLS0+Jyk6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9JbnB1dCk7XG4gIH1cbiAgaW5wdXQgPSBpbnB1dC5zdWJzdHIoMyk7XG4gIHNraXBXaGl0ZXNwYWNlKCk7XG4gIGN1ZS5lbmRUaW1lID0gY29uc3VtZVRpbWVTdGFtcCgpOyAgICAgLy8gKDUpIGNvbGxlY3QgY3VlIGVuZCB0aW1lXG5cbiAgLy8gNC4xIFdlYlZUVCBjdWUgc2V0dGluZ3MgbGlzdC5cbiAgc2tpcFdoaXRlc3BhY2UoKTtcbiAgY29uc3VtZUN1ZVNldHRpbmdzKGlucHV0LCBjdWUpO1xufVxuXG52YXIgRVNDQVBFID0ge1xuICBcIiZhbXA7XCI6IFwiJlwiLFxuICBcIiZsdDtcIjogXCI8XCIsXG4gIFwiJmd0O1wiOiBcIj5cIixcbiAgXCImbHJtO1wiOiBcIlxcdTIwMGVcIixcbiAgXCImcmxtO1wiOiBcIlxcdTIwMGZcIixcbiAgXCImbmJzcDtcIjogXCJcXHUwMGEwXCJcbn07XG5cbnZhciBUQUdfTkFNRSA9IHtcbiAgYzogXCJzcGFuXCIsXG4gIGk6IFwiaVwiLFxuICBiOiBcImJcIixcbiAgdTogXCJ1XCIsXG4gIHJ1Ynk6IFwicnVieVwiLFxuICBydDogXCJydFwiLFxuICB2OiBcInNwYW5cIixcbiAgbGFuZzogXCJzcGFuXCJcbn07XG5cbnZhciBUQUdfQU5OT1RBVElPTiA9IHtcbiAgdjogXCJ0aXRsZVwiLFxuICBsYW5nOiBcImxhbmdcIlxufTtcblxudmFyIE5FRURTX1BBUkVOVCA9IHtcbiAgcnQ6IFwicnVieVwiXG59O1xuXG4vLyBQYXJzZSBjb250ZW50IGludG8gYSBkb2N1bWVudCBmcmFnbWVudC5cbmZ1bmN0aW9uIHBhcnNlQ29udGVudCh3aW5kb3csIGlucHV0KSB7XG4gIGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgICAvLyBDaGVjayBmb3IgZW5kLW9mLXN0cmluZy5cbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lICduJyBjaGFyYWN0ZXJzIGZyb20gdGhlIGlucHV0LlxuICAgIGZ1bmN0aW9uIGNvbnN1bWUocmVzdWx0KSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cihyZXN1bHQubGVuZ3RoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG0gPSBpbnB1dC5tYXRjaCgvXihbXjxdKikoPFtePl0qPj8pPy8pO1xuICAgIC8vIElmIHRoZXJlIGlzIHNvbWUgdGV4dCBiZWZvcmUgdGhlIG5leHQgdGFnLCByZXR1cm4gaXQsIG90aGVyd2lzZSByZXR1cm5cbiAgICAvLyB0aGUgdGFnLlxuICAgIHJldHVybiBjb25zdW1lKG1bMV0gPyBtWzFdIDogbVsyXSk7XG4gIH1cblxuICAvLyBVbmVzY2FwZSBhIHN0cmluZyAncycuXG4gIGZ1bmN0aW9uIHVuZXNjYXBlMShlKSB7XG4gICAgcmV0dXJuIEVTQ0FQRVtlXTtcbiAgfVxuICBmdW5jdGlvbiB1bmVzY2FwZShzKSB7XG4gICAgd2hpbGUgKChtID0gcy5tYXRjaCgvJihhbXB8bHR8Z3R8bHJtfHJsbXxuYnNwKTsvKSkpIHtcbiAgICAgIHMgPSBzLnJlcGxhY2UobVswXSwgdW5lc2NhcGUxKTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRBZGQoY3VycmVudCwgZWxlbWVudCkge1xuICAgIHJldHVybiAhTkVFRFNfUEFSRU5UW2VsZW1lbnQubG9jYWxOYW1lXSB8fFxuICAgICAgICAgICBORUVEU19QQVJFTlRbZWxlbWVudC5sb2NhbE5hbWVdID09PSBjdXJyZW50LmxvY2FsTmFtZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhbiBlbGVtZW50IGZvciB0aGlzIHRhZy5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBhbm5vdGF0aW9uKSB7XG4gICAgdmFyIHRhZ05hbWUgPSBUQUdfTkFNRVt0eXBlXTtcbiAgICBpZiAoIXRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICAgIGVsZW1lbnQubG9jYWxOYW1lID0gdGFnTmFtZTtcbiAgICB2YXIgbmFtZSA9IFRBR19BTk5PVEFUSU9OW3R5cGVdO1xuICAgIGlmIChuYW1lICYmIGFubm90YXRpb24pIHtcbiAgICAgIGVsZW1lbnRbbmFtZV0gPSBhbm5vdGF0aW9uLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICB2YXIgcm9vdERpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgY3VycmVudCA9IHJvb3REaXYsXG4gICAgICB0LFxuICAgICAgdGFnU3RhY2sgPSBbXTtcblxuICB3aGlsZSAoKHQgPSBuZXh0VG9rZW4oKSkgIT09IG51bGwpIHtcbiAgICBpZiAodFswXSA9PT0gJzwnKSB7XG4gICAgICBpZiAodFsxXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgLy8gSWYgdGhlIGNsb3NpbmcgdGFnIG1hdGNoZXMsIG1vdmUgYmFjayB1cCB0byB0aGUgcGFyZW50IG5vZGUuXG4gICAgICAgIGlmICh0YWdTdGFjay5sZW5ndGggJiZcbiAgICAgICAgICAgIHRhZ1N0YWNrW3RhZ1N0YWNrLmxlbmd0aCAtIDFdID09PSB0LnN1YnN0cigyKS5yZXBsYWNlKFwiPlwiLCBcIlwiKSkge1xuICAgICAgICAgIHRhZ1N0YWNrLnBvcCgpO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgaWdub3JlIHRoZSBlbmQgdGFnLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciB0cyA9IHBhcnNlVGltZVN0YW1wKHQuc3Vic3RyKDEsIHQubGVuZ3RoIC0gMikpO1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBpZiAodHMpIHtcbiAgICAgICAgLy8gVGltZXN0YW1wcyBhcmUgbGVhZCBub2RlcyBhcyB3ZWxsLlxuICAgICAgICBub2RlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihcInRpbWVzdGFtcFwiLCB0cyk7XG4gICAgICAgIGN1cnJlbnQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIG0gPSB0Lm1hdGNoKC9ePChbXi5cXHMvMC05Pl0rKShcXC5bXlxcc1xcXFw+XSspPyhbXj5cXFxcXSspPyhcXFxcPyk+PyQvKTtcbiAgICAgIC8vIElmIHdlIGNhbid0IHBhcnNlIHRoZSB0YWcsIHNraXAgdG8gdGhlIG5leHQgdGFnLlxuICAgICAgaWYgKCFtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVHJ5IHRvIGNvbnN0cnVjdCBhbiBlbGVtZW50LCBhbmQgaWdub3JlIHRoZSB0YWcgaWYgd2UgY291bGRuJ3QuXG4gICAgICBub2RlID0gY3JlYXRlRWxlbWVudChtWzFdLCBtWzNdKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIERldGVybWluZSBpZiB0aGUgdGFnIHNob3VsZCBiZSBhZGRlZCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiB3aGVyZSBpdFxuICAgICAgLy8gaXMgcGxhY2VkIGluIHRoZSBjdWV0ZXh0LlxuICAgICAgaWYgKCFzaG91bGRBZGQoY3VycmVudCwgbm9kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBTZXQgdGhlIGNsYXNzIGxpc3QgKGFzIGEgbGlzdCBvZiBjbGFzc2VzLCBzZXBhcmF0ZWQgYnkgc3BhY2UpLlxuICAgICAgaWYgKG1bMl0pIHtcbiAgICAgICAgbm9kZS5jbGFzc05hbWUgPSBtWzJdLnN1YnN0cigxKS5yZXBsYWNlKCcuJywgJyAnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGVuZCB0aGUgbm9kZSB0byB0aGUgY3VycmVudCBub2RlLCBhbmQgZW50ZXIgdGhlIHNjb3BlIG9mIHRoZSBuZXdcbiAgICAgIC8vIG5vZGUuXG4gICAgICB0YWdTdGFjay5wdXNoKG1bMV0pO1xuICAgICAgY3VycmVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGN1cnJlbnQgPSBub2RlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gVGV4dCBub2RlcyBhcmUgbGVhZiBub2Rlcy5cbiAgICBjdXJyZW50LmFwcGVuZENoaWxkKHdpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh1bmVzY2FwZSh0KSkpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3REaXY7XG59XG5cbi8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCB0aGUgVW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhIHN0cm9uZ1xuLy8gcmlnaHQtdG8tbGVmdCBjYXRlZ29yeS4gV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgdGhlc2UgY2hhcmFjdGVycyBhcmVcbi8vIHdyaXR0ZW4gcmlnaHQtdG8tbGVmdCBmb3Igc3VyZS4gSXQgd2FzIGdlbmVyYXRlZCBieSBwdWxsaW5nIGFsbCB0aGUgc3Ryb25nXG4vLyByaWdodC10by1sZWZ0IGNoYXJhY3RlcnMgb3V0IG9mIHRoZSBVbmljb2RlIGRhdGEgdGFibGUuIFRoYXQgdGFibGUgY2FuXG4vLyBmb3VuZCBhdDogaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9Vbmljb2RlRGF0YS50eHRcbnZhciBzdHJvbmdSVExSYW5nZXMgPSBbWzB4NWJlLCAweDViZV0sIFsweDVjMCwgMHg1YzBdLCBbMHg1YzMsIDB4NWMzXSwgWzB4NWM2LCAweDVjNl0sXG4gWzB4NWQwLCAweDVlYV0sIFsweDVmMCwgMHg1ZjRdLCBbMHg2MDgsIDB4NjA4XSwgWzB4NjBiLCAweDYwYl0sIFsweDYwZCwgMHg2MGRdLFxuIFsweDYxYiwgMHg2MWJdLCBbMHg2MWUsIDB4NjRhXSwgWzB4NjZkLCAweDY2Zl0sIFsweDY3MSwgMHg2ZDVdLCBbMHg2ZTUsIDB4NmU2XSxcbiBbMHg2ZWUsIDB4NmVmXSwgWzB4NmZhLCAweDcwZF0sIFsweDcwZiwgMHg3MTBdLCBbMHg3MTIsIDB4NzJmXSwgWzB4NzRkLCAweDdhNV0sXG4gWzB4N2IxLCAweDdiMV0sIFsweDdjMCwgMHg3ZWFdLCBbMHg3ZjQsIDB4N2Y1XSwgWzB4N2ZhLCAweDdmYV0sIFsweDgwMCwgMHg4MTVdLFxuIFsweDgxYSwgMHg4MWFdLCBbMHg4MjQsIDB4ODI0XSwgWzB4ODI4LCAweDgyOF0sIFsweDgzMCwgMHg4M2VdLCBbMHg4NDAsIDB4ODU4XSxcbiBbMHg4NWUsIDB4ODVlXSwgWzB4OGEwLCAweDhhMF0sIFsweDhhMiwgMHg4YWNdLCBbMHgyMDBmLCAweDIwMGZdLFxuIFsweGZiMWQsIDB4ZmIxZF0sIFsweGZiMWYsIDB4ZmIyOF0sIFsweGZiMmEsIDB4ZmIzNl0sIFsweGZiMzgsIDB4ZmIzY10sXG4gWzB4ZmIzZSwgMHhmYjNlXSwgWzB4ZmI0MCwgMHhmYjQxXSwgWzB4ZmI0MywgMHhmYjQ0XSwgWzB4ZmI0NiwgMHhmYmMxXSxcbiBbMHhmYmQzLCAweGZkM2RdLCBbMHhmZDUwLCAweGZkOGZdLCBbMHhmZDkyLCAweGZkYzddLCBbMHhmZGYwLCAweGZkZmNdLFxuIFsweGZlNzAsIDB4ZmU3NF0sIFsweGZlNzYsIDB4ZmVmY10sIFsweDEwODAwLCAweDEwODA1XSwgWzB4MTA4MDgsIDB4MTA4MDhdLFxuIFsweDEwODBhLCAweDEwODM1XSwgWzB4MTA4MzcsIDB4MTA4MzhdLCBbMHgxMDgzYywgMHgxMDgzY10sIFsweDEwODNmLCAweDEwODU1XSxcbiBbMHgxMDg1NywgMHgxMDg1Zl0sIFsweDEwOTAwLCAweDEwOTFiXSwgWzB4MTA5MjAsIDB4MTA5MzldLCBbMHgxMDkzZiwgMHgxMDkzZl0sXG4gWzB4MTA5ODAsIDB4MTA5YjddLCBbMHgxMDliZSwgMHgxMDliZl0sIFsweDEwYTAwLCAweDEwYTAwXSwgWzB4MTBhMTAsIDB4MTBhMTNdLFxuIFsweDEwYTE1LCAweDEwYTE3XSwgWzB4MTBhMTksIDB4MTBhMzNdLCBbMHgxMGE0MCwgMHgxMGE0N10sIFsweDEwYTUwLCAweDEwYTU4XSxcbiBbMHgxMGE2MCwgMHgxMGE3Zl0sIFsweDEwYjAwLCAweDEwYjM1XSwgWzB4MTBiNDAsIDB4MTBiNTVdLCBbMHgxMGI1OCwgMHgxMGI3Ml0sXG4gWzB4MTBiNzgsIDB4MTBiN2ZdLCBbMHgxMGMwMCwgMHgxMGM0OF0sIFsweDFlZTAwLCAweDFlZTAzXSwgWzB4MWVlMDUsIDB4MWVlMWZdLFxuIFsweDFlZTIxLCAweDFlZTIyXSwgWzB4MWVlMjQsIDB4MWVlMjRdLCBbMHgxZWUyNywgMHgxZWUyN10sIFsweDFlZTI5LCAweDFlZTMyXSxcbiBbMHgxZWUzNCwgMHgxZWUzN10sIFsweDFlZTM5LCAweDFlZTM5XSwgWzB4MWVlM2IsIDB4MWVlM2JdLCBbMHgxZWU0MiwgMHgxZWU0Ml0sXG4gWzB4MWVlNDcsIDB4MWVlNDddLCBbMHgxZWU0OSwgMHgxZWU0OV0sIFsweDFlZTRiLCAweDFlZTRiXSwgWzB4MWVlNGQsIDB4MWVlNGZdLFxuIFsweDFlZTUxLCAweDFlZTUyXSwgWzB4MWVlNTQsIDB4MWVlNTRdLCBbMHgxZWU1NywgMHgxZWU1N10sIFsweDFlZTU5LCAweDFlZTU5XSxcbiBbMHgxZWU1YiwgMHgxZWU1Yl0sIFsweDFlZTVkLCAweDFlZTVkXSwgWzB4MWVlNWYsIDB4MWVlNWZdLCBbMHgxZWU2MSwgMHgxZWU2Ml0sXG4gWzB4MWVlNjQsIDB4MWVlNjRdLCBbMHgxZWU2NywgMHgxZWU2YV0sIFsweDFlZTZjLCAweDFlZTcyXSwgWzB4MWVlNzQsIDB4MWVlNzddLFxuIFsweDFlZTc5LCAweDFlZTdjXSwgWzB4MWVlN2UsIDB4MWVlN2VdLCBbMHgxZWU4MCwgMHgxZWU4OV0sIFsweDFlZThiLCAweDFlZTliXSxcbiBbMHgxZWVhMSwgMHgxZWVhM10sIFsweDFlZWE1LCAweDFlZWE5XSwgWzB4MWVlYWIsIDB4MWVlYmJdLCBbMHgxMGZmZmQsIDB4MTBmZmZkXV07XG5cbmZ1bmN0aW9uIGlzU3Ryb25nUlRMQ2hhcihjaGFyQ29kZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cm9uZ1JUTFJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJyZW50UmFuZ2UgPSBzdHJvbmdSVExSYW5nZXNbaV07XG4gICAgaWYgKGNoYXJDb2RlID49IGN1cnJlbnRSYW5nZVswXSAmJiBjaGFyQ29kZSA8PSBjdXJyZW50UmFuZ2VbMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lQmlkaShjdWVEaXYpIHtcbiAgdmFyIG5vZGVTdGFjayA9IFtdLFxuICAgICAgdGV4dCA9IFwiXCIsXG4gICAgICBjaGFyQ29kZTtcblxuICBpZiAoIWN1ZURpdiB8fCAhY3VlRGl2LmNoaWxkTm9kZXMpIHtcbiAgICByZXR1cm4gXCJsdHJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hOb2Rlcyhub2RlU3RhY2ssIG5vZGUpIHtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBub2RlU3RhY2sucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRUZXh0Tm9kZShub2RlU3RhY2spIHtcbiAgICBpZiAoIW5vZGVTdGFjayB8fCAhbm9kZVN0YWNrLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBub2RlU3RhY2sucG9wKCksXG4gICAgICAgIHRleHQgPSBub2RlLnRleHRDb250ZW50IHx8IG5vZGUuaW5uZXJUZXh0O1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBtYXRjaCBhbGwgdW5pY29kZSB0eXBlIEIgY2hhcmFjdGVycyAocGFyYWdyYXBoXG4gICAgICAvLyBzZXBhcmF0b3IgY2hhcmFjdGVycykuIFNlZSBpc3N1ZSAjMTE1LlxuICAgICAgdmFyIG0gPSB0ZXh0Lm1hdGNoKC9eLiooXFxufFxccikvKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIG5vZGVTdGFjay5sZW5ndGggPSAwO1xuICAgICAgICByZXR1cm4gbVswXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAobm9kZS50YWdOYW1lID09PSBcInJ1YnlcIikge1xuICAgICAgcmV0dXJuIG5leHRUZXh0Tm9kZShub2RlU3RhY2spO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgICBwdXNoTm9kZXMobm9kZVN0YWNrLCBub2RlKTtcbiAgICAgIHJldHVybiBuZXh0VGV4dE5vZGUobm9kZVN0YWNrKTtcbiAgICB9XG4gIH1cblxuICBwdXNoTm9kZXMobm9kZVN0YWNrLCBjdWVEaXYpO1xuICB3aGlsZSAoKHRleHQgPSBuZXh0VGV4dE5vZGUobm9kZVN0YWNrKSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGlzU3Ryb25nUlRMQ2hhcihjaGFyQ29kZSkpIHtcbiAgICAgICAgcmV0dXJuIFwicnRsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBcImx0clwiO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTGluZVBvcyhjdWUpIHtcbiAgaWYgKHR5cGVvZiBjdWUubGluZSA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgKGN1ZS5zbmFwVG9MaW5lcyB8fCAoY3VlLmxpbmUgPj0gMCAmJiBjdWUubGluZSA8PSAxMDApKSkge1xuICAgIHJldHVybiBjdWUubGluZTtcbiAgfVxuICBpZiAoIWN1ZS50cmFjayB8fCAhY3VlLnRyYWNrLnRleHRUcmFja0xpc3QgfHxcbiAgICAgICFjdWUudHJhY2sudGV4dFRyYWNrTGlzdC5tZWRpYUVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIHRyYWNrID0gY3VlLnRyYWNrLFxuICAgICAgdHJhY2tMaXN0ID0gdHJhY2sudGV4dFRyYWNrTGlzdCxcbiAgICAgIGNvdW50ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFja0xpc3QubGVuZ3RoICYmIHRyYWNrTGlzdFtpXSAhPT0gdHJhY2s7IGkrKykge1xuICAgIGlmICh0cmFja0xpc3RbaV0ubW9kZSA9PT0gXCJzaG93aW5nXCIpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuICB9XG4gIHJldHVybiArK2NvdW50ICogLTE7XG59XG5cbmZ1bmN0aW9uIFN0eWxlQm94KCkge1xufVxuXG4vLyBBcHBseSBzdHlsZXMgdG8gYSBkaXYuIElmIHRoZXJlIGlzIG5vIGRpdiBwYXNzZWQgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGVcbi8vIGRpdiBvbiAndGhpcycuXG5TdHlsZUJveC5wcm90b3R5cGUuYXBwbHlTdHlsZXMgPSBmdW5jdGlvbihzdHlsZXMsIGRpdikge1xuICBkaXYgPSBkaXYgfHwgdGhpcy5kaXY7XG4gIGZvciAodmFyIHByb3AgaW4gc3R5bGVzKSB7XG4gICAgaWYgKHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgZGl2LnN0eWxlW3Byb3BdID0gc3R5bGVzW3Byb3BdO1xuICAgIH1cbiAgfVxufTtcblxuU3R5bGVCb3gucHJvdG90eXBlLmZvcm1hdFN0eWxlID0gZnVuY3Rpb24odmFsLCB1bml0KSB7XG4gIHJldHVybiB2YWwgPT09IDAgPyAwIDogdmFsICsgdW5pdDtcbn07XG5cbi8vIENvbnN0cnVjdHMgdGhlIGNvbXB1dGVkIGRpc3BsYXkgc3RhdGUgb2YgdGhlIGN1ZSAoYSBkaXYpLiBQbGFjZXMgdGhlIGRpdlxuLy8gaW50byB0aGUgb3ZlcmxheSB3aGljaCBzaG91bGQgYmUgYSBibG9jayBsZXZlbCBlbGVtZW50ICh1c3VhbGx5IGEgZGl2KS5cbmZ1bmN0aW9uIEN1ZVN0eWxlQm94KHdpbmRvdywgY3VlLCBzdHlsZU9wdGlvbnMpIHtcbiAgU3R5bGVCb3guY2FsbCh0aGlzKTtcbiAgdGhpcy5jdWUgPSBjdWU7XG5cbiAgLy8gUGFyc2Ugb3VyIGN1ZSdzIHRleHQgaW50byBhIERPTSB0cmVlIHJvb3RlZCBhdCAnY3VlRGl2Jy4gVGhpcyBkaXYgd2lsbFxuICAvLyBoYXZlIGlubGluZSBwb3NpdGlvbmluZyBhbmQgd2lsbCBmdW5jdGlvbiBhcyB0aGUgY3VlIGJhY2tncm91bmQgYm94LlxuICB0aGlzLmN1ZURpdiA9IHBhcnNlQ29udGVudCh3aW5kb3csIGN1ZS50ZXh0KTtcbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBjb2xvcjogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDEpXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiAgXCJyZ2JhKDAsIDAsIDAsIDAuOClcIixcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBkaXNwbGF5OiBcImlubGluZVwiLFxuICAgIHdyaXRpbmdNb2RlOiBjdWUudmVydGljYWwgPT09IFwiXCIgPyBcImhvcml6b250YWwtdGJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VlLnZlcnRpY2FsID09PSBcImxyXCIgPyBcInZlcnRpY2FsLWxyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwidmVydGljYWwtcmxcIixcbiAgICB1bmljb2RlQmlkaTogXCJwbGFpbnRleHRcIlxuICB9O1xuXG4gIHRoaXMuYXBwbHlTdHlsZXMoc3R5bGVzLCB0aGlzLmN1ZURpdik7XG5cbiAgLy8gQ3JlYXRlIGFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBkaXYgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlIGN1ZVxuICAvLyBkaXYuIE5vdGUsIGFsbCBXZWJWVFQgY3VlLXNldHRpbmcgYWxpZ25tZW50cyBhcmUgZXF1aXZhbGVudCB0byB0aGUgQ1NTXG4gIC8vIG1pcnJvcnMgb2YgdGhlbSBleGNlcHQgXCJtaWRkbGVcIiB3aGljaCBpcyBcImNlbnRlclwiIGluIENTUy5cbiAgdGhpcy5kaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgc3R5bGVzID0ge1xuICAgIGRpcmVjdGlvbjogZGV0ZXJtaW5lQmlkaSh0aGlzLmN1ZURpdiksXG4gICAgd3JpdGluZ01vZGU6IGN1ZS52ZXJ0aWNhbCA9PT0gXCJcIiA/IFwiaG9yaXpvbnRhbC10YlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdWUudmVydGljYWwgPT09IFwibHJcIiA/IFwidmVydGljYWwtbHJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJ2ZXJ0aWNhbC1ybFwiLFxuICAgIHVuaWNvZGVCaWRpOiBcInBsYWludGV4dFwiLFxuICAgIHRleHRBbGlnbjogY3VlLmFsaWduID09PSBcIm1pZGRsZVwiID8gXCJjZW50ZXJcIiA6IGN1ZS5hbGlnbixcbiAgICBmb250OiBzdHlsZU9wdGlvbnMuZm9udCxcbiAgICB3aGl0ZVNwYWNlOiBcInByZS1saW5lXCIsXG4gICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIlxuICB9O1xuXG4gIHRoaXMuYXBwbHlTdHlsZXMoc3R5bGVzKTtcbiAgdGhpcy5kaXYuYXBwZW5kQ2hpbGQodGhpcy5jdWVEaXYpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmVmZXJlbmNlIGVkZ2Ugb2YgdGhlIHZpZXdwb3J0IHRvIHRoZSB0ZXh0XG4gIC8vIHBvc2l0aW9uIG9mIHRoZSBjdWUgYm94LiBUaGUgcmVmZXJlbmNlIGVkZ2Ugd2lsbCBiZSByZXNvbHZlZCBsYXRlciB3aGVuXG4gIC8vIHRoZSBib3ggb3JpZW50YXRpb24gc3R5bGVzIGFyZSBhcHBsaWVkLlxuICB2YXIgdGV4dFBvcyA9IDA7XG4gIHN3aXRjaCAoY3VlLnBvc2l0aW9uQWxpZ24pIHtcbiAgY2FzZSBcInN0YXJ0XCI6XG4gICAgdGV4dFBvcyA9IGN1ZS5wb3NpdGlvbjtcbiAgICBicmVhaztcbiAgY2FzZSBcIm1pZGRsZVwiOlxuICAgIHRleHRQb3MgPSBjdWUucG9zaXRpb24gLSAoY3VlLnNpemUgLyAyKTtcbiAgICBicmVhaztcbiAgY2FzZSBcImVuZFwiOlxuICAgIHRleHRQb3MgPSBjdWUucG9zaXRpb24gLSBjdWUuc2l6ZTtcbiAgICBicmVhaztcbiAgfVxuXG4gIC8vIEhvcml6b250YWwgYm94IG9yaWVudGF0aW9uOyB0ZXh0UG9zIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlXG4gIC8vIGFyZWEgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm94IGFuZCBjdWUuc2l6ZSBpcyB0aGUgZGlzdGFuY2UgZXh0ZW5kaW5nIHRvXG4gIC8vIHRoZSByaWdodCBmcm9tIHRoZXJlLlxuICBpZiAoY3VlLnZlcnRpY2FsID09PSBcIlwiKSB7XG4gICAgdGhpcy5hcHBseVN0eWxlcyh7XG4gICAgICBsZWZ0OiAgdGhpcy5mb3JtYXRTdHlsZSh0ZXh0UG9zLCBcIiVcIiksXG4gICAgICB3aWR0aDogdGhpcy5mb3JtYXRTdHlsZShjdWUuc2l6ZSwgXCIlXCIpXG4gICAgfSk7XG4gIC8vIFZlcnRpY2FsIGJveCBvcmllbnRhdGlvbjsgdGV4dFBvcyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIGVkZ2Ugb2YgdGhlXG4gIC8vIGFyZWEgdG8gdGhlIHRvcCBlZGdlIG9mIHRoZSBib3ggYW5kIGN1ZS5zaXplIGlzIHRoZSBoZWlnaHQgZXh0ZW5kaW5nXG4gIC8vIGRvd253YXJkcyBmcm9tIHRoZXJlLlxuICB9IGVsc2Uge1xuICAgIHRoaXMuYXBwbHlTdHlsZXMoe1xuICAgICAgdG9wOiB0aGlzLmZvcm1hdFN0eWxlKHRleHRQb3MsIFwiJVwiKSxcbiAgICAgIGhlaWdodDogdGhpcy5mb3JtYXRTdHlsZShjdWUuc2l6ZSwgXCIlXCIpXG4gICAgfSk7XG4gIH1cblxuICB0aGlzLm1vdmUgPSBmdW5jdGlvbihib3gpIHtcbiAgICB0aGlzLmFwcGx5U3R5bGVzKHtcbiAgICAgIHRvcDogdGhpcy5mb3JtYXRTdHlsZShib3gudG9wLCBcInB4XCIpLFxuICAgICAgYm90dG9tOiB0aGlzLmZvcm1hdFN0eWxlKGJveC5ib3R0b20sIFwicHhcIiksXG4gICAgICBsZWZ0OiB0aGlzLmZvcm1hdFN0eWxlKGJveC5sZWZ0LCBcInB4XCIpLFxuICAgICAgcmlnaHQ6IHRoaXMuZm9ybWF0U3R5bGUoYm94LnJpZ2h0LCBcInB4XCIpLFxuICAgICAgaGVpZ2h0OiB0aGlzLmZvcm1hdFN0eWxlKGJveC5oZWlnaHQsIFwicHhcIiksXG4gICAgICB3aWR0aDogdGhpcy5mb3JtYXRTdHlsZShib3gud2lkdGgsIFwicHhcIilcbiAgICB9KTtcbiAgfTtcbn1cbkN1ZVN0eWxlQm94LnByb3RvdHlwZSA9IF9vYmpDcmVhdGUoU3R5bGVCb3gucHJvdG90eXBlKTtcbkN1ZVN0eWxlQm94LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN1ZVN0eWxlQm94O1xuXG4vLyBSZXByZXNlbnRzIHRoZSBjby1vcmRpbmF0ZXMgb2YgYW4gRWxlbWVudCBpbiBhIHdheSB0aGF0IHdlIGNhbiBlYXNpbHlcbi8vIGNvbXB1dGUgdGhpbmdzIHdpdGggc3VjaCBhcyBpZiBpdCBvdmVybGFwcyBvciBpbnRlcnNlY3RzIHdpdGggYW5vdGhlciBFbGVtZW50LlxuLy8gQ2FuIGluaXRpYWxpemUgaXQgd2l0aCBlaXRoZXIgYSBTdHlsZUJveCBvciBhbm90aGVyIEJveFBvc2l0aW9uLlxuZnVuY3Rpb24gQm94UG9zaXRpb24ob2JqKSB7XG4gIC8vIEVpdGhlciBhIEJveFBvc2l0aW9uIHdhcyBwYXNzZWQgaW4gYW5kIHdlIG5lZWQgdG8gY29weSBpdCwgb3IgYSBTdHlsZUJveFxuICAvLyB3YXMgcGFzc2VkIGluIGFuZCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHJlc3VsdHMgb2YgJ2dldEJvdW5kaW5nQ2xpZW50UmVjdCdcbiAgLy8gYXMgdGhlIG9iamVjdCByZXR1cm5lZCBpcyByZWFkb25seS4gQWxsIGNvLW9yZGluYXRlIHZhbHVlcyBhcmUgaW4gcmVmZXJlbmNlXG4gIC8vIHRvIHRoZSB2aWV3cG9ydCBvcmlnaW4gKHRvcCBsZWZ0KS5cbiAgdmFyIGxoLCBoZWlnaHQsIHdpZHRoLCB0b3A7XG4gIGlmIChvYmouZGl2KSB7XG4gICAgaGVpZ2h0ID0gb2JqLmRpdi5vZmZzZXRIZWlnaHQ7XG4gICAgd2lkdGggPSBvYmouZGl2Lm9mZnNldFdpZHRoO1xuICAgIHRvcCA9IG9iai5kaXYub2Zmc2V0VG9wO1xuXG4gICAgdmFyIHJlY3RzID0gKHJlY3RzID0gb2JqLmRpdi5jaGlsZE5vZGVzKSAmJiAocmVjdHMgPSByZWN0c1swXSkgJiZcbiAgICAgICAgICAgICAgICByZWN0cy5nZXRDbGllbnRSZWN0cyAmJiByZWN0cy5nZXRDbGllbnRSZWN0cygpO1xuICAgIG9iaiA9IG9iai5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gSW4gY2VydGFpbiBjYXNlcyB0aGUgb3V0dGVyIGRpdiB3aWxsIGJlIHNsaWdodGx5IGxhcmdlciB0aGVuIHRoZSBzdW0gb2ZcbiAgICAvLyB0aGUgaW5uZXIgZGl2J3MgbGluZXMuIFRoaXMgY291bGQgYmUgZHVlIHRvIGJvbGQgdGV4dCwgZXRjLCBvbiBzb21lIHBsYXRmb3Jtcy5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGdldCB0aGUgYXZlcmFnZSBsaW5lIGhlaWdodCBhbmQgdXNlIHRoYXQuIFRoaXMgd2lsbFxuICAgIC8vIHJlc3VsdCBpbiB0aGUgZGVzaXJlZCBiZWhhdmlvdXIuXG4gICAgbGggPSByZWN0cyA/IE1hdGgubWF4KChyZWN0c1swXSAmJiByZWN0c1swXS5oZWlnaHQpIHx8IDAsIG9iai5oZWlnaHQgLyByZWN0cy5sZW5ndGgpXG4gICAgICAgICAgICAgICA6IDA7XG5cbiAgfVxuICB0aGlzLmxlZnQgPSBvYmoubGVmdDtcbiAgdGhpcy5yaWdodCA9IG9iai5yaWdodDtcbiAgdGhpcy50b3AgPSBvYmoudG9wIHx8IHRvcDtcbiAgdGhpcy5oZWlnaHQgPSBvYmouaGVpZ2h0IHx8IGhlaWdodDtcbiAgdGhpcy5ib3R0b20gPSBvYmouYm90dG9tIHx8ICh0b3AgKyAob2JqLmhlaWdodCB8fCBoZWlnaHQpKTtcbiAgdGhpcy53aWR0aCA9IG9iai53aWR0aCB8fCB3aWR0aDtcbiAgdGhpcy5saW5lSGVpZ2h0ID0gbGggIT09IHVuZGVmaW5lZCA/IGxoIDogb2JqLmxpbmVIZWlnaHQ7XG59XG5cbi8vIE1vdmUgdGhlIGJveCBhbG9uZyBhIHBhcnRpY3VsYXIgYXhpcy4gT3B0aW9uYWxseSBwYXNzIGluIGFuIGFtb3VudCB0byBtb3ZlXG4vLyB0aGUgYm94LiBJZiBubyBhbW91bnQgaXMgcGFzc2VkIHRoZW4gdGhlIGRlZmF1bHQgaXMgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZVxuLy8gYm94LlxuQm94UG9zaXRpb24ucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbihheGlzLCB0b01vdmUpIHtcbiAgdG9Nb3ZlID0gdG9Nb3ZlICE9PSB1bmRlZmluZWQgPyB0b01vdmUgOiB0aGlzLmxpbmVIZWlnaHQ7XG4gIHN3aXRjaCAoYXhpcykge1xuICBjYXNlIFwiK3hcIjpcbiAgICB0aGlzLmxlZnQgKz0gdG9Nb3ZlO1xuICAgIHRoaXMucmlnaHQgKz0gdG9Nb3ZlO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiLXhcIjpcbiAgICB0aGlzLmxlZnQgLT0gdG9Nb3ZlO1xuICAgIHRoaXMucmlnaHQgLT0gdG9Nb3ZlO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiK3lcIjpcbiAgICB0aGlzLnRvcCArPSB0b01vdmU7XG4gICAgdGhpcy5ib3R0b20gKz0gdG9Nb3ZlO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiLXlcIjpcbiAgICB0aGlzLnRvcCAtPSB0b01vdmU7XG4gICAgdGhpcy5ib3R0b20gLT0gdG9Nb3ZlO1xuICAgIGJyZWFrO1xuICB9XG59O1xuXG4vLyBDaGVjayBpZiB0aGlzIGJveCBvdmVybGFwcyBhbm90aGVyIGJveCwgYjIuXG5Cb3hQb3NpdGlvbi5wcm90b3R5cGUub3ZlcmxhcHMgPSBmdW5jdGlvbihiMikge1xuICByZXR1cm4gdGhpcy5sZWZ0IDwgYjIucmlnaHQgJiZcbiAgICAgICAgIHRoaXMucmlnaHQgPiBiMi5sZWZ0ICYmXG4gICAgICAgICB0aGlzLnRvcCA8IGIyLmJvdHRvbSAmJlxuICAgICAgICAgdGhpcy5ib3R0b20gPiBiMi50b3A7XG59O1xuXG4vLyBDaGVjayBpZiB0aGlzIGJveCBvdmVybGFwcyBhbnkgb3RoZXIgYm94ZXMgaW4gYm94ZXMuXG5Cb3hQb3NpdGlvbi5wcm90b3R5cGUub3ZlcmxhcHNBbnkgPSBmdW5jdGlvbihib3hlcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxhcHMoYm94ZXNbaV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gQ2hlY2sgaWYgdGhpcyBib3ggaXMgd2l0aGluIGFub3RoZXIgYm94LlxuQm94UG9zaXRpb24ucHJvdG90eXBlLndpdGhpbiA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuICByZXR1cm4gdGhpcy50b3AgPj0gY29udGFpbmVyLnRvcCAmJlxuICAgICAgICAgdGhpcy5ib3R0b20gPD0gY29udGFpbmVyLmJvdHRvbSAmJlxuICAgICAgICAgdGhpcy5sZWZ0ID49IGNvbnRhaW5lci5sZWZ0ICYmXG4gICAgICAgICB0aGlzLnJpZ2h0IDw9IGNvbnRhaW5lci5yaWdodDtcbn07XG5cbi8vIENoZWNrIGlmIHRoaXMgYm94IGlzIGVudGlyZWx5IHdpdGhpbiB0aGUgY29udGFpbmVyIG9yIGl0IGlzIG92ZXJsYXBwaW5nXG4vLyBvbiB0aGUgZWRnZSBvcHBvc2l0ZSBvZiB0aGUgYXhpcyBkaXJlY3Rpb24gcGFzc2VkLiBGb3IgZXhhbXBsZSwgaWYgXCIreFwiIGlzXG4vLyBwYXNzZWQgYW5kIHRoZSBib3ggaXMgb3ZlcmxhcHBpbmcgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgY29udGFpbmVyLCB0aGVuXG4vLyByZXR1cm4gdHJ1ZS5cbkJveFBvc2l0aW9uLnByb3RvdHlwZS5vdmVybGFwc09wcG9zaXRlQXhpcyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXhpcykge1xuICBzd2l0Y2ggKGF4aXMpIHtcbiAgY2FzZSBcIit4XCI6XG4gICAgcmV0dXJuIHRoaXMubGVmdCA8IGNvbnRhaW5lci5sZWZ0O1xuICBjYXNlIFwiLXhcIjpcbiAgICByZXR1cm4gdGhpcy5yaWdodCA+IGNvbnRhaW5lci5yaWdodDtcbiAgY2FzZSBcIit5XCI6XG4gICAgcmV0dXJuIHRoaXMudG9wIDwgY29udGFpbmVyLnRvcDtcbiAgY2FzZSBcIi15XCI6XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tID4gY29udGFpbmVyLmJvdHRvbTtcbiAgfVxufTtcblxuLy8gRmluZCB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYXJlYSB0aGF0IHRoaXMgYm94IGlzIG92ZXJsYXBwaW5nIHdpdGggYW5vdGhlclxuLy8gYm94LlxuQm94UG9zaXRpb24ucHJvdG90eXBlLmludGVyc2VjdFBlcmNlbnRhZ2UgPSBmdW5jdGlvbihiMikge1xuICB2YXIgeCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMucmlnaHQsIGIyLnJpZ2h0KSAtIE1hdGgubWF4KHRoaXMubGVmdCwgYjIubGVmdCkpLFxuICAgICAgeSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuYm90dG9tLCBiMi5ib3R0b20pIC0gTWF0aC5tYXgodGhpcy50b3AsIGIyLnRvcCkpLFxuICAgICAgaW50ZXJzZWN0QXJlYSA9IHggKiB5O1xuICByZXR1cm4gaW50ZXJzZWN0QXJlYSAvICh0aGlzLmhlaWdodCAqIHRoaXMud2lkdGgpO1xufTtcblxuLy8gQ29udmVydCB0aGUgcG9zaXRpb25zIGZyb20gdGhpcyBib3ggdG8gQ1NTIGNvbXBhdGlibGUgcG9zaXRpb25zIHVzaW5nXG4vLyB0aGUgcmVmZXJlbmNlIGNvbnRhaW5lcidzIHBvc2l0aW9ucy4gVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWNhdXNlIHRoaXNcbi8vIGJveCdzIHBvc2l0aW9ucyBhcmUgaW4gcmVmZXJlbmNlIHRvIHRoZSB2aWV3cG9ydCBvcmlnaW4sIHdoZXJlYXMsIENTU1xuLy8gdmFsdWVzIGFyZSBpbiByZWZlcmVjbmUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBlZGdlcy5cbkJveFBvc2l0aW9uLnByb3RvdHlwZS50b0NTU0NvbXBhdFZhbHVlcyA9IGZ1bmN0aW9uKHJlZmVyZW5jZSkge1xuICByZXR1cm4ge1xuICAgIHRvcDogdGhpcy50b3AgLSByZWZlcmVuY2UudG9wLFxuICAgIGJvdHRvbTogcmVmZXJlbmNlLmJvdHRvbSAtIHRoaXMuYm90dG9tLFxuICAgIGxlZnQ6IHRoaXMubGVmdCAtIHJlZmVyZW5jZS5sZWZ0LFxuICAgIHJpZ2h0OiByZWZlcmVuY2UucmlnaHQgLSB0aGlzLnJpZ2h0LFxuICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgd2lkdGg6IHRoaXMud2lkdGhcbiAgfTtcbn07XG5cbi8vIEdldCBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBib3gncyBwb3NpdGlvbiB3aXRob3V0IGFueXRoaW5nIGV4dHJhLlxuLy8gQ2FuIHBhc3MgYSBTdHlsZUJveCwgSFRNTEVsZW1lbnQsIG9yIGFub3RoZXIgQm94UG9zaXRvbi5cbkJveFBvc2l0aW9uLmdldFNpbXBsZUJveFBvc2l0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciBoZWlnaHQgPSBvYmouZGl2ID8gb2JqLmRpdi5vZmZzZXRIZWlnaHQgOiBvYmoudGFnTmFtZSA/IG9iai5vZmZzZXRIZWlnaHQgOiAwO1xuICB2YXIgd2lkdGggPSBvYmouZGl2ID8gb2JqLmRpdi5vZmZzZXRXaWR0aCA6IG9iai50YWdOYW1lID8gb2JqLm9mZnNldFdpZHRoIDogMDtcbiAgdmFyIHRvcCA9IG9iai5kaXYgPyBvYmouZGl2Lm9mZnNldFRvcCA6IG9iai50YWdOYW1lID8gb2JqLm9mZnNldFRvcCA6IDA7XG5cbiAgb2JqID0gb2JqLmRpdiA/IG9iai5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOlxuICAgICAgICAgICAgICAgIG9iai50YWdOYW1lID8gb2JqLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDogb2JqO1xuICB2YXIgcmV0ID0ge1xuICAgIGxlZnQ6IG9iai5sZWZ0LFxuICAgIHJpZ2h0OiBvYmoucmlnaHQsXG4gICAgdG9wOiBvYmoudG9wIHx8IHRvcCxcbiAgICBoZWlnaHQ6IG9iai5oZWlnaHQgfHwgaGVpZ2h0LFxuICAgIGJvdHRvbTogb2JqLmJvdHRvbSB8fCAodG9wICsgKG9iai5oZWlnaHQgfHwgaGVpZ2h0KSksXG4gICAgd2lkdGg6IG9iai53aWR0aCB8fCB3aWR0aFxuICB9O1xuICByZXR1cm4gcmV0O1xufTtcblxuLy8gTW92ZSBhIFN0eWxlQm94IHRvIGl0cyBzcGVjaWZpZWQsIG9yIG5leHQgYmVzdCwgcG9zaXRpb24uIFRoZSBjb250YWluZXJCb3hcbi8vIGlzIHRoZSBib3ggdGhhdCBjb250YWlucyB0aGUgU3R5bGVCb3gsIHN1Y2ggYXMgYSBkaXYuIGJveFBvc2l0aW9ucyBhcmVcbi8vIGEgbGlzdCBvZiBvdGhlciBib3hlcyB0aGF0IHRoZSBzdHlsZUJveCBjYW4ndCBvdmVybGFwIHdpdGguXG5mdW5jdGlvbiBtb3ZlQm94VG9MaW5lUG9zaXRpb24od2luZG93LCBzdHlsZUJveCwgY29udGFpbmVyQm94LCBib3hQb3NpdGlvbnMpIHtcblxuICAvLyBGaW5kIHRoZSBiZXN0IHBvc2l0aW9uIGZvciBhIGN1ZSBib3gsIGIsIG9uIHRoZSB2aWRlby4gVGhlIGF4aXMgcGFyYW1ldGVyXG4gIC8vIGlzIGEgbGlzdCBvZiBheGlzLCB0aGUgb3JkZXIgb2Ygd2hpY2gsIGl0IHdpbGwgbW92ZSB0aGUgYm94IGFsb25nLiBGb3IgZXhhbXBsZTpcbiAgLy8gUGFzc2luZyBbXCIreFwiLCBcIi14XCJdIHdpbGwgbW92ZSB0aGUgYm94IGZpcnN0IGFsb25nIHRoZSB4IGF4aXMgaW4gdGhlIHBvc2l0aXZlXG4gIC8vIGRpcmVjdGlvbi4gSWYgaXQgZG9lc24ndCBmaW5kIGEgZ29vZCBwb3NpdGlvbiBmb3IgaXQgdGhlcmUgaXQgd2lsbCB0aGVuIG1vdmVcbiAgLy8gaXQgYWxvbmcgdGhlIHggYXhpcyBpbiB0aGUgbmVnYXRpdmUgZGlyZWN0aW9uLlxuICBmdW5jdGlvbiBmaW5kQmVzdFBvc2l0aW9uKGIsIGF4aXMpIHtcbiAgICB2YXIgYmVzdFBvc2l0aW9uLFxuICAgICAgICBzcGVjaWZpZWRQb3NpdGlvbiA9IG5ldyBCb3hQb3NpdGlvbihiKSxcbiAgICAgICAgcGVyY2VudGFnZSA9IDE7IC8vIEhpZ2hlc3QgcG9zc2libGUgc28gdGhlIGZpcnN0IHRoaW5nIHdlIGdldCBpcyBiZXR0ZXIuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF4aXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHdoaWxlIChiLm92ZXJsYXBzT3Bwb3NpdGVBeGlzKGNvbnRhaW5lckJveCwgYXhpc1tpXSkgfHxcbiAgICAgICAgICAgICAoYi53aXRoaW4oY29udGFpbmVyQm94KSAmJiBiLm92ZXJsYXBzQW55KGJveFBvc2l0aW9ucykpKSB7XG4gICAgICAgIGIubW92ZShheGlzW2ldKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGZvdW5kIGEgc3BvdCB3aGVyZSB3ZSBhcmVuJ3Qgb3ZlcmxhcHBpbmcgYW55dGhpbmcuIFRoaXMgaXMgb3VyXG4gICAgICAvLyBiZXN0IHBvc2l0aW9uLlxuICAgICAgaWYgKGIud2l0aGluKGNvbnRhaW5lckJveCkpIHtcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICB9XG4gICAgICB2YXIgcCA9IGIuaW50ZXJzZWN0UGVyY2VudGFnZShjb250YWluZXJCb3gpO1xuICAgICAgLy8gSWYgd2UncmUgb3V0c2lkZSB0aGUgY29udGFpbmVyIGJveCBsZXNzIHRoZW4gd2Ugd2VyZSBvbiBvdXIgbGFzdCB0cnlcbiAgICAgIC8vIHRoZW4gcmVtZW1iZXIgdGhpcyBwb3NpdGlvbiBhcyB0aGUgYmVzdCBwb3NpdGlvbi5cbiAgICAgIGlmIChwZXJjZW50YWdlID4gcCkge1xuICAgICAgICBiZXN0UG9zaXRpb24gPSBuZXcgQm94UG9zaXRpb24oYik7XG4gICAgICAgIHBlcmNlbnRhZ2UgPSBwO1xuICAgICAgfVxuICAgICAgLy8gUmVzZXQgdGhlIGJveCBwb3NpdGlvbiB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICAgICAgYiA9IG5ldyBCb3hQb3NpdGlvbihzcGVjaWZpZWRQb3NpdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0UG9zaXRpb24gfHwgc3BlY2lmaWVkUG9zaXRpb247XG4gIH1cblxuICB2YXIgYm94UG9zaXRpb24gPSBuZXcgQm94UG9zaXRpb24oc3R5bGVCb3gpLFxuICAgICAgY3VlID0gc3R5bGVCb3guY3VlLFxuICAgICAgbGluZVBvcyA9IGNvbXB1dGVMaW5lUG9zKGN1ZSksXG4gICAgICBheGlzID0gW107XG5cbiAgLy8gSWYgd2UgaGF2ZSBhIGxpbmUgbnVtYmVyIHRvIGFsaWduIHRoZSBjdWUgdG8uXG4gIGlmIChjdWUuc25hcFRvTGluZXMpIHtcbiAgICB2YXIgc2l6ZTtcbiAgICBzd2l0Y2ggKGN1ZS52ZXJ0aWNhbCkge1xuICAgIGNhc2UgXCJcIjpcbiAgICAgIGF4aXMgPSBbIFwiK3lcIiwgXCIteVwiIF07XG4gICAgICBzaXplID0gXCJoZWlnaHRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJybFwiOlxuICAgICAgYXhpcyA9IFsgXCIreFwiLCBcIi14XCIgXTtcbiAgICAgIHNpemUgPSBcIndpZHRoXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibHJcIjpcbiAgICAgIGF4aXMgPSBbIFwiLXhcIiwgXCIreFwiIF07XG4gICAgICBzaXplID0gXCJ3aWR0aFwiO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHN0ZXAgPSBib3hQb3NpdGlvbi5saW5lSGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbiA9IHN0ZXAgKiBNYXRoLnJvdW5kKGxpbmVQb3MpLFxuICAgICAgICBtYXhQb3NpdGlvbiA9IGNvbnRhaW5lckJveFtzaXplXSArIHN0ZXAsXG4gICAgICAgIGluaXRpYWxBeGlzID0gYXhpc1swXTtcblxuICAgIC8vIElmIHRoZSBzcGVjaWZpZWQgaW50aWFsIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhlbiB0aGUgbWF4IHBvc2l0aW9uIHRoZW5cbiAgICAvLyBjbGFtcCB0aGUgYm94IHRvIHRoZSBhbW91bnQgb2Ygc3RlcHMgaXQgd291bGQgdGFrZSBmb3IgdGhlIGJveCB0b1xuICAgIC8vIHJlYWNoIHRoZSBtYXggcG9zaXRpb24uXG4gICAgaWYgKE1hdGguYWJzKHBvc2l0aW9uKSA+IG1heFBvc2l0aW9uKSB7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIDwgMCA/IC0xIDogMTtcbiAgICAgIHBvc2l0aW9uICo9IE1hdGguY2VpbChtYXhQb3NpdGlvbiAvIHN0ZXApICogc3RlcDtcbiAgICB9XG5cbiAgICAvLyBJZiBjb21wdXRlZCBsaW5lIHBvc2l0aW9uIHJldHVybnMgbmVnYXRpdmUgdGhlbiBsaW5lIG51bWJlcnMgYXJlXG4gICAgLy8gcmVsYXRpdmUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gaW5zdGVhZCBvZiB0aGUgdG9wLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gbmVlZCB0byBpbmNyZWFzZSBvdXIgaW5pdGlhbCBwb3NpdGlvbiBieSB0aGUgbGVuZ3RoIG9yIHdpZHRoIG9mIHRoZVxuICAgIC8vIHZpZGVvLCBkZXBlbmRpbmcgb24gdGhlIHdyaXRpbmcgZGlyZWN0aW9uLCBhbmQgcmV2ZXJzZSBvdXIgYXhpcyBkaXJlY3Rpb25zLlxuICAgIGlmIChsaW5lUG9zIDwgMCkge1xuICAgICAgcG9zaXRpb24gKz0gY3VlLnZlcnRpY2FsID09PSBcIlwiID8gY29udGFpbmVyQm94LmhlaWdodCA6IGNvbnRhaW5lckJveC53aWR0aDtcbiAgICAgIGF4aXMgPSBheGlzLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICAvLyBNb3ZlIHRoZSBib3ggdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gVGhpcyBtYXkgbm90IGJlIGl0cyBiZXN0XG4gICAgLy8gcG9zaXRpb24uXG4gICAgYm94UG9zaXRpb24ubW92ZShpbml0aWFsQXhpcywgcG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIHBlcmNlbnRhZ2UgbGluZSB2YWx1ZSBmb3IgdGhlIGN1ZS5cbiAgICB2YXIgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSAoYm94UG9zaXRpb24ubGluZUhlaWdodCAvIGNvbnRhaW5lckJveC5oZWlnaHQpICogMTAwO1xuXG4gICAgc3dpdGNoIChjdWUubGluZUFsaWduKSB7XG4gICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgbGluZVBvcyAtPSAoY2FsY3VsYXRlZFBlcmNlbnRhZ2UgLyAyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgIGxpbmVQb3MgLT0gY2FsY3VsYXRlZFBlcmNlbnRhZ2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBBcHBseSBpbml0aWFsIGxpbmUgcG9zaXRpb24gdG8gdGhlIGN1ZSBib3guXG4gICAgc3dpdGNoIChjdWUudmVydGljYWwpIHtcbiAgICBjYXNlIFwiXCI6XG4gICAgICBzdHlsZUJveC5hcHBseVN0eWxlcyh7XG4gICAgICAgIHRvcDogc3R5bGVCb3guZm9ybWF0U3R5bGUobGluZVBvcywgXCIlXCIpXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJybFwiOlxuICAgICAgc3R5bGVCb3guYXBwbHlTdHlsZXMoe1xuICAgICAgICBsZWZ0OiBzdHlsZUJveC5mb3JtYXRTdHlsZShsaW5lUG9zLCBcIiVcIilcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxyXCI6XG4gICAgICBzdHlsZUJveC5hcHBseVN0eWxlcyh7XG4gICAgICAgIHJpZ2h0OiBzdHlsZUJveC5mb3JtYXRTdHlsZShsaW5lUG9zLCBcIiVcIilcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXhpcyA9IFsgXCIreVwiLCBcIi14XCIsIFwiK3hcIiwgXCIteVwiIF07XG5cbiAgICAvLyBHZXQgdGhlIGJveCBwb3NpdGlvbiBhZ2FpbiBhZnRlciB3ZSd2ZSBhcHBsaWVkIHRoZSBzcGVjaWZpZWQgcG9zaXRpb25pbmdcbiAgICAvLyB0byBpdC5cbiAgICBib3hQb3NpdGlvbiA9IG5ldyBCb3hQb3NpdGlvbihzdHlsZUJveCk7XG4gIH1cblxuICB2YXIgYmVzdFBvc2l0aW9uID0gZmluZEJlc3RQb3NpdGlvbihib3hQb3NpdGlvbiwgYXhpcyk7XG4gIHN0eWxlQm94Lm1vdmUoYmVzdFBvc2l0aW9uLnRvQ1NTQ29tcGF0VmFsdWVzKGNvbnRhaW5lckJveCkpO1xufVxuXG5mdW5jdGlvbiBXZWJWVFQoKSB7XG4gIC8vIE5vdGhpbmdcbn1cblxuLy8gSGVscGVyIHRvIGFsbG93IHN0cmluZ3MgdG8gYmUgZGVjb2RlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJpbmFyeSB1dGY4IGRhdGEuXG5XZWJWVFQuU3RyaW5nRGVjb2RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIGRlY29kZTogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIC0gZXhwZWN0ZWQgc3RyaW5nIGRhdGEuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoZGF0YSkpO1xuICAgIH1cbiAgfTtcbn07XG5cbldlYlZUVC5jb252ZXJ0Q3VlVG9ET01UcmVlID0gZnVuY3Rpb24od2luZG93LCBjdWV0ZXh0KSB7XG4gIGlmICghd2luZG93IHx8ICFjdWV0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHBhcnNlQ29udGVudCh3aW5kb3csIGN1ZXRleHQpO1xufTtcblxudmFyIEZPTlRfU0laRV9QRVJDRU5UID0gMC4wNTtcbnZhciBGT05UX1NUWUxFID0gXCJzYW5zLXNlcmlmXCI7XG52YXIgQ1VFX0JBQ0tHUk9VTkRfUEFERElORyA9IFwiMS41JVwiO1xuXG4vLyBSdW5zIHRoZSBwcm9jZXNzaW5nIG1vZGVsIG92ZXIgdGhlIGN1ZXMgYW5kIHJlZ2lvbnMgcGFzc2VkIHRvIGl0LlxuLy8gQHBhcmFtIG92ZXJsYXkgQSBibG9jayBsZXZlbCBlbGVtZW50ICh1c3VhbGx5IGEgZGl2KSB0aGF0IHRoZSBjb21wdXRlZCBjdWVzXG4vLyAgICAgICAgICAgICAgICBhbmQgcmVnaW9ucyB3aWxsIGJlIHBsYWNlZCBpbnRvLlxuV2ViVlRULnByb2Nlc3NDdWVzID0gZnVuY3Rpb24od2luZG93LCBjdWVzLCBvdmVybGF5KSB7XG4gIGlmICghd2luZG93IHx8ICFjdWVzIHx8ICFvdmVybGF5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBSZW1vdmUgYWxsIHByZXZpb3VzIGNoaWxkcmVuLlxuICB3aGlsZSAob3ZlcmxheS5maXJzdENoaWxkKSB7XG4gICAgb3ZlcmxheS5yZW1vdmVDaGlsZChvdmVybGF5LmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgdmFyIHBhZGRlZE92ZXJsYXkgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcGFkZGVkT3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgcGFkZGVkT3ZlcmxheS5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gIHBhZGRlZE92ZXJsYXkuc3R5bGUucmlnaHQgPSBcIjBcIjtcbiAgcGFkZGVkT3ZlcmxheS5zdHlsZS50b3AgPSBcIjBcIjtcbiAgcGFkZGVkT3ZlcmxheS5zdHlsZS5ib3R0b20gPSBcIjBcIjtcbiAgcGFkZGVkT3ZlcmxheS5zdHlsZS5tYXJnaW4gPSBDVUVfQkFDS0dST1VORF9QQURESU5HO1xuICBvdmVybGF5LmFwcGVuZENoaWxkKHBhZGRlZE92ZXJsYXkpO1xuXG4gIC8vIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGRpc3BsYXkgc3RhdGVzIG9mIHRoZSBjdWVzLiBUaGlzIGNvdWxkXG4gIC8vIGJlIHRoZSBjYXNlIGlmIGEgY3VlJ3Mgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjb21wdXRhdGlvbiBvclxuICAvLyBpZiBpdCBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LlxuICBmdW5jdGlvbiBzaG91bGRDb21wdXRlKGN1ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjdWVzW2ldLmhhc0JlZW5SZXNldCB8fCAhY3Vlc1tpXS5kaXNwbGF5U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVjb21wdXRlIHRoZSBjdWVzJyBkaXNwbGF5IHN0YXRlcy4gSnVzdCByZXVzZSB0aGVtLlxuICBpZiAoIXNob3VsZENvbXB1dGUoY3VlcykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhZGRlZE92ZXJsYXkuYXBwZW5kQ2hpbGQoY3Vlc1tpXS5kaXNwbGF5U3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYm94UG9zaXRpb25zID0gW10sXG4gICAgICBjb250YWluZXJCb3ggPSBCb3hQb3NpdGlvbi5nZXRTaW1wbGVCb3hQb3NpdGlvbihwYWRkZWRPdmVybGF5KSxcbiAgICAgIGZvbnRTaXplID0gTWF0aC5yb3VuZChjb250YWluZXJCb3guaGVpZ2h0ICogRk9OVF9TSVpFX1BFUkNFTlQgKiAxMDApIC8gMTAwO1xuICB2YXIgc3R5bGVPcHRpb25zID0ge1xuICAgIGZvbnQ6IGZvbnRTaXplICsgXCJweCBcIiArIEZPTlRfU1RZTEVcbiAgfTtcblxuICAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0eWxlQm94LCBjdWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1ZSA9IGN1ZXNbaV07XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIGludGlhbCBwb3NpdGlvbiBhbmQgc3R5bGVzIG9mIHRoZSBjdWUgZGl2LlxuICAgICAgc3R5bGVCb3ggPSBuZXcgQ3VlU3R5bGVCb3god2luZG93LCBjdWUsIHN0eWxlT3B0aW9ucyk7XG4gICAgICBwYWRkZWRPdmVybGF5LmFwcGVuZENoaWxkKHN0eWxlQm94LmRpdik7XG5cbiAgICAgIC8vIE1vdmUgdGhlIGN1ZSBkaXYgdG8gaXQncyBjb3JyZWN0IGxpbmUgcG9zaXRpb24uXG4gICAgICBtb3ZlQm94VG9MaW5lUG9zaXRpb24od2luZG93LCBzdHlsZUJveCwgY29udGFpbmVyQm94LCBib3hQb3NpdGlvbnMpO1xuXG4gICAgICAvLyBSZW1lbWJlciB0aGUgY29tcHV0ZWQgZGl2IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgaXQgbGF0ZXJcbiAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgdG9vLlxuICAgICAgY3VlLmRpc3BsYXlTdGF0ZSA9IHN0eWxlQm94LmRpdjtcblxuICAgICAgYm94UG9zaXRpb25zLnB1c2goQm94UG9zaXRpb24uZ2V0U2ltcGxlQm94UG9zaXRpb24oc3R5bGVCb3gpKTtcbiAgICB9XG4gIH0pKCk7XG59O1xuXG5XZWJWVFQuUGFyc2VyID0gZnVuY3Rpb24od2luZG93LCB2dHRqcywgZGVjb2Rlcikge1xuICBpZiAoIWRlY29kZXIpIHtcbiAgICBkZWNvZGVyID0gdnR0anM7XG4gICAgdnR0anMgPSB7fTtcbiAgfVxuICBpZiAoIXZ0dGpzKSB7XG4gICAgdnR0anMgPSB7fTtcbiAgfVxuXG4gIHRoaXMud2luZG93ID0gd2luZG93O1xuICB0aGlzLnZ0dGpzID0gdnR0anM7XG4gIHRoaXMuc3RhdGUgPSBcIklOSVRJQUxcIjtcbiAgdGhpcy5idWZmZXIgPSBcIlwiO1xuICB0aGlzLmRlY29kZXIgPSBkZWNvZGVyIHx8IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIik7XG4gIHRoaXMucmVnaW9uTGlzdCA9IFtdO1xufTtcblxuV2ViVlRULlBhcnNlci5wcm90b3R5cGUgPSB7XG4gIC8vIElmIHRoZSBlcnJvciBpcyBhIFBhcnNpbmdFcnJvciB0aGVuIHJlcG9ydCBpdCB0byB0aGUgY29uc3VtZXIgaWZcbiAgLy8gcG9zc2libGUuIElmIGl0J3Mgbm90IGEgUGFyc2luZ0Vycm9yIHRoZW4gdGhyb3cgaXQgbGlrZSBub3JtYWwuXG4gIHJlcG9ydE9yVGhyb3dFcnJvcjogZnVuY3Rpb24oZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICB0aGlzLm9ucGFyc2luZ2Vycm9yICYmIHRoaXMub25wYXJzaW5nZXJyb3IoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9LFxuICBwYXJzZTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHRoZW4gd2Ugd29uJ3QgZGVjb2RlIGl0LCBidXQgd2lsbCBqdXN0IHRyeSB0byBwYXJzZVxuICAgIC8vIHdoYXRldmVyIGlzIGluIGJ1ZmZlciBhbHJlYWR5LiBUaGlzIG1heSBvY2N1ciBpbiBjaXJjdW1zdGFuY2VzLCBmb3JcbiAgICAvLyBleGFtcGxlIHdoZW4gZmx1c2goKSBpcyBjYWxsZWQuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vIFRyeSB0byBkZWNvZGUgdGhlIGRhdGEgdGhhdCB3ZSByZWNlaXZlZC5cbiAgICAgIHNlbGYuYnVmZmVyICs9IHNlbGYuZGVjb2Rlci5kZWNvZGUoZGF0YSwge3N0cmVhbTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbGxlY3ROZXh0TGluZSgpIHtcbiAgICAgIHZhciBidWZmZXIgPSBzZWxmLmJ1ZmZlcjtcbiAgICAgIHZhciBwb3MgPSAwO1xuICAgICAgd2hpbGUgKHBvcyA8IGJ1ZmZlci5sZW5ndGggJiYgYnVmZmVyW3Bvc10gIT09ICdcXHInICYmIGJ1ZmZlcltwb3NdICE9PSAnXFxuJykge1xuICAgICAgICArK3BvcztcbiAgICAgIH1cbiAgICAgIHZhciBsaW5lID0gYnVmZmVyLnN1YnN0cigwLCBwb3MpO1xuICAgICAgLy8gQWR2YW5jZSB0aGUgYnVmZmVyIGVhcmx5IGluIGNhc2Ugd2UgZmFpbCBiZWxvdy5cbiAgICAgIGlmIChidWZmZXJbcG9zXSA9PT0gJ1xccicpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICB9XG4gICAgICBpZiAoYnVmZmVyW3Bvc10gPT09ICdcXG4nKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIuc3Vic3RyKHBvcyk7XG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9XG5cbiAgICAvLyAzLjQgV2ViVlRUIHJlZ2lvbiBhbmQgV2ViVlRUIHJlZ2lvbiBzZXR0aW5ncyBzeW50YXhcbiAgICBmdW5jdGlvbiBwYXJzZVJlZ2lvbihpbnB1dCkge1xuICAgICAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKCk7XG5cbiAgICAgIHBhcnNlT3B0aW9ucyhpbnB1dCwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgc3dpdGNoIChrKSB7XG4gICAgICAgIGNhc2UgXCJpZFwiOlxuICAgICAgICAgIHNldHRpbmdzLnNldChrLCB2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgICAgc2V0dGluZ3MucGVyY2VudChrLCB2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImxpbmVzXCI6XG4gICAgICAgICAgc2V0dGluZ3MuaW50ZWdlcihrLCB2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlZ2lvbmFuY2hvclwiOlxuICAgICAgICBjYXNlIFwidmlld3BvcnRhbmNob3JcIjpcbiAgICAgICAgICB2YXIgeHkgPSB2LnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHh5Lmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGJvdGggeCBhbmQgeSBwYXJzZSwgc28gdXNlIGEgdGVtcG9yYXJ5XG4gICAgICAgICAgLy8gc2V0dGluZ3Mgb2JqZWN0IGhlcmUuXG4gICAgICAgICAgdmFyIGFuY2hvciA9IG5ldyBTZXR0aW5ncygpO1xuICAgICAgICAgIGFuY2hvci5wZXJjZW50KFwieFwiLCB4eVswXSk7XG4gICAgICAgICAgYW5jaG9yLnBlcmNlbnQoXCJ5XCIsIHh5WzFdKTtcbiAgICAgICAgICBpZiAoIWFuY2hvci5oYXMoXCJ4XCIpIHx8ICFhbmNob3IuaGFzKFwieVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdzLnNldChrICsgXCJYXCIsIGFuY2hvci5nZXQoXCJ4XCIpKTtcbiAgICAgICAgICBzZXR0aW5ncy5zZXQoayArIFwiWVwiLCBhbmNob3IuZ2V0KFwieVwiKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgICBzZXR0aW5ncy5hbHQoaywgdiwgW1widXBcIl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCAvPS8sIC9cXHMvKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSByZWdpb24sIHVzaW5nIGRlZmF1bHQgdmFsdWVzIGZvciBhbnkgdmFsdWVzIHRoYXQgd2VyZSBub3RcbiAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgIGlmIChzZXR0aW5ncy5oYXMoXCJpZFwiKSkge1xuICAgICAgICB2YXIgcmVnaW9uID0gbmV3IChzZWxmLnZ0dGpzLlZUVFJlZ2lvbiB8fCBzZWxmLndpbmRvdy5WVFRSZWdpb24pKCk7XG4gICAgICAgIHJlZ2lvbi53aWR0aCA9IHNldHRpbmdzLmdldChcIndpZHRoXCIsIDEwMCk7XG4gICAgICAgIHJlZ2lvbi5saW5lcyA9IHNldHRpbmdzLmdldChcImxpbmVzXCIsIDMpO1xuICAgICAgICByZWdpb24ucmVnaW9uQW5jaG9yWCA9IHNldHRpbmdzLmdldChcInJlZ2lvbmFuY2hvclhcIiwgMCk7XG4gICAgICAgIHJlZ2lvbi5yZWdpb25BbmNob3JZID0gc2V0dGluZ3MuZ2V0KFwicmVnaW9uYW5jaG9yWVwiLCAxMDApO1xuICAgICAgICByZWdpb24udmlld3BvcnRBbmNob3JYID0gc2V0dGluZ3MuZ2V0KFwidmlld3BvcnRhbmNob3JYXCIsIDApO1xuICAgICAgICByZWdpb24udmlld3BvcnRBbmNob3JZID0gc2V0dGluZ3MuZ2V0KFwidmlld3BvcnRhbmNob3JZXCIsIDEwMCk7XG4gICAgICAgIHJlZ2lvbi5zY3JvbGwgPSBzZXR0aW5ncy5nZXQoXCJzY3JvbGxcIiwgXCJcIik7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSByZWdpb24uXG4gICAgICAgIHNlbGYub25yZWdpb24gJiYgc2VsZi5vbnJlZ2lvbihyZWdpb24pO1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgVlRUUmVnaW9uIGZvciBsYXRlciBpbiBjYXNlIHdlIHBhcnNlIGFueSBWVFRDdWVzIHRoYXRcbiAgICAgICAgLy8gcmVmZXJlbmNlIGl0LlxuICAgICAgICBzZWxmLnJlZ2lvbkxpc3QucHVzaCh7XG4gICAgICAgICAgaWQ6IHNldHRpbmdzLmdldChcImlkXCIpLFxuICAgICAgICAgIHJlZ2lvbjogcmVnaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyYWZ0LXBhbnRvcy1odHRwLWxpdmUtc3RyZWFtaW5nLTIwXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXBhbnRvcy1odHRwLWxpdmUtc3RyZWFtaW5nLTIwI3NlY3Rpb24tMy41XG4gICAgLy8gMy41IFdlYlZUVFxuICAgIGZ1bmN0aW9uIHBhcnNlVGltZXN0YW1wTWFwKGlucHV0KSB7XG4gICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoKTtcblxuICAgICAgcGFyc2VPcHRpb25zKGlucHV0LCBmdW5jdGlvbihrLCB2KSB7XG4gICAgICAgIHN3aXRjaChrKSB7XG4gICAgICAgIGNhc2UgXCJNUEVHVFwiOlxuICAgICAgICAgIHNldHRpbmdzLmludGVnZXIoayArICdTJywgdik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0NBXCI6XG4gICAgICAgICAgc2V0dGluZ3Muc2V0KGsgKyAnTCcsIHBhcnNlVGltZVN0YW1wKHYpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgL1teXFxkXTovLCAvLC8pO1xuXG4gICAgICBzZWxmLm9udGltZXN0YW1wbWFwICYmIHNlbGYub250aW1lc3RhbXBtYXAoe1xuICAgICAgICBcIk1QRUdUU1wiOiBzZXR0aW5ncy5nZXQoXCJNUEVHVFNcIiksXG4gICAgICAgIFwiTE9DQUxcIjogc2V0dGluZ3MuZ2V0KFwiTE9DQUxcIilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDMuMiBXZWJWVFQgbWV0YWRhdGEgaGVhZGVyIHN5bnRheFxuICAgIGZ1bmN0aW9uIHBhcnNlSGVhZGVyKGlucHV0KSB7XG4gICAgICBpZiAoaW5wdXQubWF0Y2goL1gtVElNRVNUQU1QLU1BUC8pKSB7XG4gICAgICAgIC8vIFRoaXMgbGluZSBjb250YWlucyBITFMgWC1USU1FU1RBTVAtTUFQIG1ldGFkYXRhXG4gICAgICAgIHBhcnNlT3B0aW9ucyhpbnB1dCwgZnVuY3Rpb24oaywgdikge1xuICAgICAgICAgIHN3aXRjaChrKSB7XG4gICAgICAgICAgY2FzZSBcIlgtVElNRVNUQU1QLU1BUFwiOlxuICAgICAgICAgICAgcGFyc2VUaW1lc3RhbXBNYXAodik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0sIC89Lyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZU9wdGlvbnMoaW5wdXQsIGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICAgICAgc3dpdGNoIChrKSB7XG4gICAgICAgICAgY2FzZSBcIlJlZ2lvblwiOlxuICAgICAgICAgICAgLy8gMy4zIFdlYlZUVCByZWdpb24gbWV0YWRhdGEgaGVhZGVyIHN5bnRheFxuICAgICAgICAgICAgcGFyc2VSZWdpb24odik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0sIC86Lyk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAvLyA1LjEgV2ViVlRUIGZpbGUgcGFyc2luZy5cbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmU7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gXCJJTklUSUFMXCIpIHtcbiAgICAgICAgLy8gV2UgY2FuJ3Qgc3RhcnQgcGFyc2luZyB1bnRpbCB3ZSBoYXZlIHRoZSBmaXJzdCBsaW5lLlxuICAgICAgICBpZiAoIS9cXHJcXG58XFxuLy50ZXN0KHNlbGYuYnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZSA9IGNvbGxlY3ROZXh0TGluZSgpO1xuXG4gICAgICAgIHZhciBtID0gbGluZS5tYXRjaCgvXldFQlZUVChbIFxcdF0uKik/JC8pO1xuICAgICAgICBpZiAoIW0gfHwgIW1bMF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2luZ0Vycm9yKFBhcnNpbmdFcnJvci5FcnJvcnMuQmFkU2lnbmF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuc3RhdGUgPSBcIkhFQURFUlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxyZWFkeUNvbGxlY3RlZExpbmUgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChzZWxmLmJ1ZmZlcikge1xuICAgICAgICAvLyBXZSBjYW4ndCBwYXJzZSBhIGxpbmUgdW50aWwgd2UgaGF2ZSB0aGUgZnVsbCBsaW5lLlxuICAgICAgICBpZiAoIS9cXHJcXG58XFxuLy50ZXN0KHNlbGYuYnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbHJlYWR5Q29sbGVjdGVkTGluZSkge1xuICAgICAgICAgIGxpbmUgPSBjb2xsZWN0TmV4dExpbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbHJlYWR5Q29sbGVjdGVkTGluZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChzZWxmLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgXCJIRUFERVJcIjpcbiAgICAgICAgICAvLyAxMy0xOCAtIEFsbG93IGEgaGVhZGVyIChtZXRhZGF0YSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLlxuICAgICAgICAgIGlmICgvOi8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgcGFyc2VIZWFkZXIobGluZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghbGluZSkge1xuICAgICAgICAgICAgLy8gQW4gZW1wdHkgbGluZSB0ZXJtaW5hdGVzIHRoZSBoZWFkZXIgYW5kIHN0YXJ0cyB0aGUgYm9keSAoY3VlcykuXG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJJRFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSBcIk5PVEVcIjpcbiAgICAgICAgICAvLyBJZ25vcmUgTk9URSBibG9ja3MuXG4gICAgICAgICAgaWYgKCFsaW5lKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJJRFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSBcIklEXCI6XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzdGFydCBvZiBOT1RFIGJsb2Nrcy5cbiAgICAgICAgICBpZiAoL15OT1RFKCR8WyBcXHRdKS8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IFwiTk9URVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIDE5LTI5IC0gQWxsb3cgYW55IG51bWJlciBvZiBsaW5lIHRlcm1pbmF0b3JzLCB0aGVuIGluaXRpYWxpemUgbmV3IGN1ZSB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCFsaW5lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5jdWUgPSBuZXcgKHNlbGYudnR0anMuVlRUQ3VlIHx8IHNlbGYud2luZG93LlZUVEN1ZSkoMCwgMCwgXCJcIik7XG4gICAgICAgICAgc2VsZi5zdGF0ZSA9IFwiQ1VFXCI7XG4gICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiBzZWxmIGxpbmUgY29udGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS5cbiAgICAgICAgICBpZiAobGluZS5pbmRleE9mKFwiLS0+XCIpID09PSAtMSkge1xuICAgICAgICAgICAgc2VsZi5jdWUuaWQgPSBsaW5lO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFByb2Nlc3MgbGluZSBhcyBzdGFydCBvZiBhIGN1ZS5cbiAgICAgICAgICAvKmZhbGxzIHRocm91Z2gqL1xuICAgICAgICBjYXNlIFwiQ1VFXCI6XG4gICAgICAgICAgLy8gNDAgLSBDb2xsZWN0IGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VDdWUobGluZSwgc2VsZi5jdWUsIHNlbGYucmVnaW9uTGlzdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgc2VsZi5yZXBvcnRPclRocm93RXJyb3IoZSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGVycm9yIGlnbm9yZSByZXN0IG9mIHRoZSBjdWUuXG4gICAgICAgICAgICBzZWxmLmN1ZSA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJCQURDVUVcIjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnN0YXRlID0gXCJDVUVURVhUXCI7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgXCJDVUVURVhUXCI6XG4gICAgICAgICAgdmFyIGhhc1N1YnN0cmluZyA9IGxpbmUuaW5kZXhPZihcIi0tPlwiKSAhPT0gLTE7XG4gICAgICAgICAgLy8gMzQgLSBJZiB3ZSBoYXZlIGFuIGVtcHR5IGxpbmUgdGhlbiByZXBvcnQgdGhlIGN1ZS5cbiAgICAgICAgICAvLyAzNSAtIElmIHdlIGhhdmUgdGhlIHNwZWNpYWwgc3Vic3RyaW5nICctLT4nIHRoZW4gcmVwb3J0IHRoZSBjdWUsXG4gICAgICAgICAgLy8gYnV0IGRvIG5vdCBjb2xsZWN0IHRoZSBsaW5lIGFzIHdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgY3VycmVudFxuICAgICAgICAgIC8vIG9uZSBhcyBhIG5ldyBjdWUuXG4gICAgICAgICAgaWYgKCFsaW5lIHx8IGhhc1N1YnN0cmluZyAmJiAoYWxyZWFkeUNvbGxlY3RlZExpbmUgPSB0cnVlKSkge1xuICAgICAgICAgICAgLy8gV2UgYXJlIGRvbmUgcGFyc2luZyBzZWxmIGN1ZS5cbiAgICAgICAgICAgIHNlbGYub25jdWUgJiYgc2VsZi5vbmN1ZShzZWxmLmN1ZSk7XG4gICAgICAgICAgICBzZWxmLmN1ZSA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJJRFwiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxmLmN1ZS50ZXh0KSB7XG4gICAgICAgICAgICBzZWxmLmN1ZS50ZXh0ICs9IFwiXFxuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuY3VlLnRleHQgKz0gbGluZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSBcIkJBRENVRVwiOiAvLyBCQURDVUVcbiAgICAgICAgICAvLyA1NC02MiAtIENvbGxlY3QgYW5kIGRpc2NhcmQgdGhlIHJlbWFpbmluZyBjdWUuXG4gICAgICAgICAgaWYgKCFsaW5lKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJJRFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNlbGYucmVwb3J0T3JUaHJvd0Vycm9yKGUpO1xuXG4gICAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IHBhcnNpbmcgYSBjdWUsIHJlcG9ydCB3aGF0IHdlIGhhdmUuXG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gXCJDVUVURVhUXCIgJiYgc2VsZi5jdWUgJiYgc2VsZi5vbmN1ZSkge1xuICAgICAgICBzZWxmLm9uY3VlKHNlbGYuY3VlKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuY3VlID0gbnVsbDtcbiAgICAgIC8vIEVudGVyIEJBRFdFQlZUVCBzdGF0ZSBpZiBoZWFkZXIgd2FzIG5vdCBwYXJzZWQgY29ycmVjdGx5IG90aGVyd2lzZVxuICAgICAgLy8gYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQgc28gZW50ZXIgQkFEQ1VFIHN0YXRlLlxuICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGUgPT09IFwiSU5JVElBTFwiID8gXCJCQURXRUJWVFRcIiA6IFwiQkFEQ1VFXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBmbHVzaDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0cnkge1xuICAgICAgLy8gRmluaXNoIGRlY29kaW5nIHRoZSBzdHJlYW0uXG4gICAgICBzZWxmLmJ1ZmZlciArPSBzZWxmLmRlY29kZXIuZGVjb2RlKCk7XG4gICAgICAvLyBTeW50aGVzaXplIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY3VlIG9yIHJlZ2lvbi5cbiAgICAgIGlmIChzZWxmLmN1ZSB8fCBzZWxmLnN0YXRlID09PSBcIkhFQURFUlwiKSB7XG4gICAgICAgIHNlbGYuYnVmZmVyICs9IFwiXFxuXFxuXCI7XG4gICAgICAgIHNlbGYucGFyc2UoKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlJ3ZlIGZsdXNoZWQsIHBhcnNlZCwgYW5kIHdlJ3JlIHN0aWxsIG9uIHRoZSBJTklUSUFMIHN0YXRlIHRoZW5cbiAgICAgIC8vIHRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggb2YgdGhlIHN0cmVhbSB0byBwYXJzZSB0aGUgZmlyc3RcbiAgICAgIC8vIGxpbmUuXG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gXCJJTklUSUFMXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNpbmdFcnJvcihQYXJzaW5nRXJyb3IuRXJyb3JzLkJhZFNpZ25hdHVyZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBzZWxmLnJlcG9ydE9yVGhyb3dFcnJvcihlKTtcbiAgICB9XG4gICAgc2VsZi5vbmZsdXNoICYmIHNlbGYub25mbHVzaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYlZUVDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFMQTtBQUZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUxBO0FBQ0E7QUFXQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBcEJBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3QkE7QUErQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBbkNBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWhEQTtBQW9EQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFaQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQW5DQTtBQURBO0FBQ0E7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFwRkE7QUFDQTtBQUNBO0FBc0ZBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFoQkE7QUFDQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvQkE7QUFDQTtBQUNBO0FBa0NBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUxBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUFDQTtBQUNBO0FBdUJBO0FBQ0E7QUFBQTtBQUNBO0FBM0JBO0FBOEJBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFoQ0E7QUFDQTtBQUNBO0FBaUNBO0FBQ0E7QUFwQ0E7QUF1Q0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUE1Q0E7QUFDQTtBQUNBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQURBO0FBS0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVpBO0FBZUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFEQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFGQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBREE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQURBO0FBY0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUpBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQURBO0FBWUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQWZBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFmQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBQ0E7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQTNCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBcENBO0FBd0NBO0FBQ0E7QUFDQTtBQURBO0FBekNBO0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFmQTtBQUNBO0FBaUJBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVRBO0FBREE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBNUJBO0FBQ0E7QUFDQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFsQkE7QUE5Q0E7QUFDQTtBQW1FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBMUJBO0FBQ0E7QUFDQTtBQTRCQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBN0JBO0FBREE7QUFtQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQXRGQTtBQTBGQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBRkE7QUExR0E7QUFDQTtBQUNBO0FBK0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBRkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQURBO0FBUUE7QUFwSUE7QUFDQTtBQUNBO0FBdUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBdkVBO0FBeUVBO0FBeEdBO0FBMEdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBeFFBO0FBMFFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBL1JBO0FBa1NBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/videojs-vtt.js/lib/vtt.js\n"); - -/***/ }), - -/***/ "../node_modules/videojs-vtt.js/lib/vttcue.js": -/*!****************************************************!*\ - !*** ../node_modules/videojs-vtt.js/lib/vttcue.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": 1,\n \"lr\": 1,\n \"rl\": 1\n};\nvar alignSetting = {\n \"start\": 1,\n \"middle\": 1,\n \"end\": 1,\n \"left\": 1,\n \"right\": 1\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n this.hasBeenReset = false;\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = 50;\n var _positionAlign = \"middle\";\n var _size = 50;\n var _align = \"middle\";\n Object.defineProperties(this, {\n \"id\": {\n enumerable: true,\n get: function get() {\n return _id;\n },\n set: function set(value) {\n _id = \"\" + value;\n }\n },\n \"pauseOnExit\": {\n enumerable: true,\n get: function get() {\n return _pauseOnExit;\n },\n set: function set(value) {\n _pauseOnExit = !!value;\n }\n },\n \"startTime\": {\n enumerable: true,\n get: function get() {\n return _startTime;\n },\n set: function set(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n\n _startTime = value;\n this.hasBeenReset = true;\n }\n },\n \"endTime\": {\n enumerable: true,\n get: function get() {\n return _endTime;\n },\n set: function set(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n\n _endTime = value;\n this.hasBeenReset = true;\n }\n },\n \"text\": {\n enumerable: true,\n get: function get() {\n return _text;\n },\n set: function set(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n },\n \"region\": {\n enumerable: true,\n get: function get() {\n return _region;\n },\n set: function set(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n },\n \"vertical\": {\n enumerable: true,\n get: function get() {\n return _vertical;\n },\n set: function set(value) {\n var setting = findDirectionSetting(value); // Have to check for false because the setting an be an empty string.\n\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n\n _vertical = setting;\n this.hasBeenReset = true;\n }\n },\n \"snapToLines\": {\n enumerable: true,\n get: function get() {\n return _snapToLines;\n },\n set: function set(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n },\n \"line\": {\n enumerable: true,\n get: function get() {\n return _line;\n },\n set: function set(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n }\n\n _line = value;\n this.hasBeenReset = true;\n }\n },\n \"lineAlign\": {\n enumerable: true,\n get: function get() {\n return _lineAlign;\n },\n set: function set(value) {\n var setting = findAlignSetting(value);\n\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n },\n \"position\": {\n enumerable: true,\n get: function get() {\n return _position;\n },\n set: function set(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n\n _position = value;\n this.hasBeenReset = true;\n }\n },\n \"positionAlign\": {\n enumerable: true,\n get: function get() {\n return _positionAlign;\n },\n set: function set(value) {\n var setting = findAlignSetting(value);\n\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n },\n \"size\": {\n enumerable: true,\n get: function get() {\n return _size;\n },\n set: function set(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n\n _size = value;\n this.hasBeenReset = true;\n }\n },\n \"align\": {\n enumerable: true,\n get: function get() {\n return _align;\n },\n set: function set(value) {\n var setting = findAlignSetting(value);\n\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n\n _align = setting;\n this.hasBeenReset = true;\n }\n }\n });\n /**\n * Other <track> spec defined properties\n */\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n\n this.displayState = undefined;\n}\n/**\n * VTTCue methods\n */\n\n\nVTTCue.prototype.getCueAsHTML = function () {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHRjdWUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHRjdWUuanM/ZGI0MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzIHZ0dC5qcyBDb250cmlidXRvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBhdXRvS2V5d29yZCA9IFwiYXV0b1wiO1xudmFyIGRpcmVjdGlvblNldHRpbmcgPSB7XG4gIFwiXCI6IDEsXG4gIFwibHJcIjogMSxcbiAgXCJybFwiOiAxXG59O1xudmFyIGFsaWduU2V0dGluZyA9IHtcbiAgXCJzdGFydFwiOiAxLFxuICBcIm1pZGRsZVwiOiAxLFxuICBcImVuZFwiOiAxLFxuICBcImxlZnRcIjogMSxcbiAgXCJyaWdodFwiOiAxXG59O1xuXG5mdW5jdGlvbiBmaW5kRGlyZWN0aW9uU2V0dGluZyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkaXIgPSBkaXJlY3Rpb25TZXR0aW5nW3ZhbHVlLnRvTG93ZXJDYXNlKCldO1xuICByZXR1cm4gZGlyID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmaW5kQWxpZ25TZXR0aW5nKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGFsaWduID0gYWxpZ25TZXR0aW5nW3ZhbHVlLnRvTG93ZXJDYXNlKCldO1xuICByZXR1cm4gYWxpZ24gPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIFZUVEN1ZShzdGFydFRpbWUsIGVuZFRpbWUsIHRleHQpIHtcbiAgLyoqXG4gICAqIFNoaW0gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJvcGVydGllcy4gVGhlc2UgcHJvcGVydGllcyBhcmUgbm90IGluXG4gICAqIHRoZSBzcGVjLlxuICAgKi9cblxuICAvLyBMZXRzIHVzIGtub3cgd2hlbiB0aGUgVlRUQ3VlJ3MgZGF0YSBoYXMgY2hhbmdlZCBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgbmVlZFxuICAvLyB0byByZWNvbXB1dGUgaXRzIGRpc3BsYXkgc3RhdGUuIFRoaXMgbGV0cyB1cyBjb21wdXRlIGl0cyBkaXNwbGF5IHN0YXRlXG4gIC8vIGxhemlseS5cbiAgdGhpcy5oYXNCZWVuUmVzZXQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVlRUQ3VlIGFuZCBUZXh0VHJhY2tDdWUgcHJvcGVydGllc1xuICAgKiBodHRwOi8vZGV2LnczLm9yZy9odG1sNS93ZWJ2dHQvI3Z0dGN1ZS1pbnRlcmZhY2VcbiAgICovXG5cbiAgdmFyIF9pZCA9IFwiXCI7XG4gIHZhciBfcGF1c2VPbkV4aXQgPSBmYWxzZTtcbiAgdmFyIF9zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gIHZhciBfZW5kVGltZSA9IGVuZFRpbWU7XG4gIHZhciBfdGV4dCA9IHRleHQ7XG4gIHZhciBfcmVnaW9uID0gbnVsbDtcbiAgdmFyIF92ZXJ0aWNhbCA9IFwiXCI7XG4gIHZhciBfc25hcFRvTGluZXMgPSB0cnVlO1xuICB2YXIgX2xpbmUgPSBcImF1dG9cIjtcbiAgdmFyIF9saW5lQWxpZ24gPSBcInN0YXJ0XCI7XG4gIHZhciBfcG9zaXRpb24gPSA1MDtcbiAgdmFyIF9wb3NpdGlvbkFsaWduID0gXCJtaWRkbGVcIjtcbiAgdmFyIF9zaXplID0gNTA7XG4gIHZhciBfYWxpZ24gPSBcIm1pZGRsZVwiO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICBcImlkXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2lkO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgX2lkID0gXCJcIiArIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBcInBhdXNlT25FeGl0XCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3BhdXNlT25FeGl0O1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgX3BhdXNlT25FeGl0ID0gISF2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJzdGFydFRpbWVcIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3RhcnRUaW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdGFydCB0aW1lIG11c3QgYmUgc2V0IHRvIGEgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfc3RhcnRUaW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzQmVlblJlc2V0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJlbmRUaW1lXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2VuZFRpbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVuZCB0aW1lIG11c3QgYmUgc2V0IHRvIGEgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfZW5kVGltZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc0JlZW5SZXNldCA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwidGV4dFwiOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF90ZXh0O1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgX3RleHQgPSBcIlwiICsgdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzQmVlblJlc2V0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJyZWdpb25cIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcmVnaW9uO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgX3JlZ2lvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc0JlZW5SZXNldCA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwidmVydGljYWxcIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfdmVydGljYWw7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgc2V0dGluZyA9IGZpbmREaXJlY3Rpb25TZXR0aW5nKHZhbHVlKTtcbiAgICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgZmFsc2UgYmVjYXVzZSB0aGUgc2V0dGluZyBhbiBiZSBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICAgIGlmIChzZXR0aW5nID09PSBmYWxzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkFuIGludmFsaWQgb3IgaWxsZWdhbCBzdHJpbmcgd2FzIHNwZWNpZmllZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX3ZlcnRpY2FsID0gc2V0dGluZztcbiAgICAgICAgdGhpcy5oYXNCZWVuUmVzZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBcInNuYXBUb0xpbmVzXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3NuYXBUb0xpbmVzO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgX3NuYXBUb0xpbmVzID0gISF2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNCZWVuUmVzZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImxpbmVcIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfbGluZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiYgdmFsdWUgIT09IGF1dG9LZXl3b3JkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiQW4gaW52YWxpZCBudW1iZXIgb3IgaWxsZWdhbCBzdHJpbmcgd2FzIHNwZWNpZmllZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX2xpbmUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNCZWVuUmVzZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImxpbmVBbGlnblwiOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9saW5lQWxpZ247XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgc2V0dGluZyA9IGZpbmRBbGlnblNldHRpbmcodmFsdWUpO1xuICAgICAgICBpZiAoIXNldHRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9saW5lQWxpZ24gPSBzZXR0aW5nO1xuICAgICAgICB0aGlzLmhhc0JlZW5SZXNldCA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwicG9zaXRpb25cIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcG9zaXRpb247XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMTAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zaXRpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX3Bvc2l0aW9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzQmVlblJlc2V0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJwb3NpdGlvbkFsaWduXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3Bvc2l0aW9uQWxpZ247XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgc2V0dGluZyA9IGZpbmRBbGlnblNldHRpbmcodmFsdWUpO1xuICAgICAgICBpZiAoIXNldHRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9wb3NpdGlvbkFsaWduID0gc2V0dGluZztcbiAgICAgICAgdGhpcy5oYXNCZWVuUmVzZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBcInNpemVcIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc2l6ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAxMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXplIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9zaXplID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzQmVlblJlc2V0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJhbGlnblwiOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9hbGlnbjtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBzZXR0aW5nID0gZmluZEFsaWduU2V0dGluZyh2YWx1ZSk7XG4gICAgICAgIGlmICghc2V0dGluZykge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkFuIGludmFsaWQgb3IgaWxsZWdhbCBzdHJpbmcgd2FzIHNwZWNpZmllZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX2FsaWduID0gc2V0dGluZztcbiAgICAgICAgdGhpcy5oYXNCZWVuUmVzZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIE90aGVyIDx0cmFjaz4gc3BlYyBkZWZpbmVkIHByb3BlcnRpZXNcbiAgICovXG5cbiAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1lbnQuaHRtbCN0ZXh0LXRyYWNrLWN1ZS1kaXNwbGF5LXN0YXRlXG4gIHRoaXMuZGlzcGxheVN0YXRlID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZUVEN1ZSBtZXRob2RzXG4gKi9cblxuVlRUQ3VlLnByb3RvdHlwZS5nZXRDdWVBc0hUTUwgPSBmdW5jdGlvbigpIHtcbiAgLy8gQXNzdW1lIFdlYlZUVC5jb252ZXJ0Q3VlVG9ET01UcmVlIGlzIG9uIHRoZSBnbG9iYWwuXG4gIHJldHVybiBXZWJWVFQuY29udmVydEN1ZVRvRE9NVHJlZSh3aW5kb3csIHRoaXMudGV4dCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZUVEN1ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWEE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBYkE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBWkE7QUExS0E7QUEwTEE7OztBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/videojs-vtt.js/lib/vttcue.js\n"); - -/***/ }), - -/***/ "../node_modules/videojs-vtt.js/lib/vttregion.js": -/*!*******************************************************!*\ - !*** ../node_modules/videojs-vtt.js/lib/vttregion.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && value >= 0 && value <= 100;\n} // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\n\n\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function get() {\n return _width;\n },\n set: function set(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function get() {\n return _lines;\n },\n set: function set(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function get() {\n return _regionAnchorY;\n },\n set: function set(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function get() {\n return _regionAnchorX;\n },\n set: function set(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function get() {\n return _viewportAnchorY;\n },\n set: function set(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function get() {\n return _viewportAnchorX;\n },\n set: function set(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function get() {\n return _scroll;\n },\n set: function set(value) {\n var setting = findScrollSetting(value); // Have to check for false as an empty string is a legal value.\n\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n\n _scroll = setting;\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHRyZWdpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3ZpZGVvanMtdnR0LmpzL2xpYi92dHRyZWdpb24uanM/MTkyNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzIHZ0dC5qcyBDb250cmlidXRvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBzY3JvbGxTZXR0aW5nID0ge1xuICBcIlwiOiB0cnVlLFxuICBcInVwXCI6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGZpbmRTY3JvbGxTZXR0aW5nKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNjcm9sbCA9IHNjcm9sbFNldHRpbmdbdmFsdWUudG9Mb3dlckNhc2UoKV07XG4gIHJldHVybiBzY3JvbGwgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRQZXJjZW50VmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxMDApO1xufVxuXG4vLyBWVFRSZWdpb24gc2hpbSBodHRwOi8vZGV2LnczLm9yZy9odG1sNS93ZWJ2dHQvI3Z0dHJlZ2lvbi1pbnRlcmZhY2VcbmZ1bmN0aW9uIFZUVFJlZ2lvbigpIHtcbiAgdmFyIF93aWR0aCA9IDEwMDtcbiAgdmFyIF9saW5lcyA9IDM7XG4gIHZhciBfcmVnaW9uQW5jaG9yWCA9IDA7XG4gIHZhciBfcmVnaW9uQW5jaG9yWSA9IDEwMDtcbiAgdmFyIF92aWV3cG9ydEFuY2hvclggPSAwO1xuICB2YXIgX3ZpZXdwb3J0QW5jaG9yWSA9IDEwMDtcbiAgdmFyIF9zY3JvbGwgPSBcIlwiO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICBcIndpZHRoXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3dpZHRoO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkUGVyY2VudFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldpZHRoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF93aWR0aCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJsaW5lc1wiOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9saW5lcztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTGluZXMgbXVzdCBiZSBzZXQgdG8gYSBudW1iZXIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9saW5lcyA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZWdpb25BbmNob3JZXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3JlZ2lvbkFuY2hvclk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzVmFsaWRQZXJjZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uQW5jaG9yWCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfcmVnaW9uQW5jaG9yWSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJyZWdpb25BbmNob3JYXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3JlZ2lvbkFuY2hvclg7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZighaXNWYWxpZFBlcmNlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWdpb25BbmNob3JZIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWdpb25BbmNob3JYID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBcInZpZXdwb3J0QW5jaG9yWVwiOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF92aWV3cG9ydEFuY2hvclk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzVmFsaWRQZXJjZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmlld3BvcnRBbmNob3JZIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF92aWV3cG9ydEFuY2hvclkgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwidmlld3BvcnRBbmNob3JYXCI6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3ZpZXdwb3J0QW5jaG9yWDtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNWYWxpZFBlcmNlbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWaWV3cG9ydEFuY2hvclggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX3ZpZXdwb3J0QW5jaG9yWCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJzY3JvbGxcIjoge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc2Nyb2xsO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIHNldHRpbmcgPSBmaW5kU2Nyb2xsU2V0dGluZyh2YWx1ZSk7XG4gICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGZhbHNlIGFzIGFuIGVtcHR5IHN0cmluZyBpcyBhIGxlZ2FsIHZhbHVlLlxuICAgICAgICBpZiAoc2V0dGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9zY3JvbGwgPSBzZXR0aW5nO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVlRUUmVnaW9uO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVpBO0FBekVBO0FBd0ZBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/videojs-vtt.js/lib/vttregion.js\n"); - -/***/ }), - -/***/ "../node_modules/warning/warning.js": -/*!******************************************!*\ - !*** ../node_modules/warning/warning.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = undefined !== 'production';\n\nvar warning = function warning() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvd2FybmluZy93YXJuaW5nLmpzPzE0ODUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciBfX0RFVl9fID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAoX19ERVZfXykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMSA/IGxlbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAxOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDFdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfVxuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkobnVsbCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztBQU9BO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQWRBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/warning/warning.js\n"); - -/***/ }), - -/***/ "../node_modules/webpack/buildin/amd-options.js": -/*!******************************************************!*\ - !*** ../node_modules/webpack/buildin/amd-options.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9hbWQtb3B0aW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2FtZC1vcHRpb25zLmpzPzJiNjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/webpack/buildin/amd-options.js\n"); - -/***/ }), - -/***/ "../node_modules/webpack/buildin/global.js": -/*!*************************************************!*\ - !*** ../node_modules/webpack/buildin/global.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanM/YTQyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/webpack/buildin/global.js\n"); - -/***/ }), - -/***/ "../node_modules/webpack/buildin/harmony-module.js": -/*!*********************************************************!*\ - !*** ../node_modules/webpack/buildin/harmony-module.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (originalModule) {\n if (!originalModule.webpackPolyfill) {\n var module = Object.create(originalModule); // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n Object.defineProperty(module, \"exports\", {\n enumerable: true\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzPzNhN2EiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xuXHRpZiAoIW9yaWdpbmFsTW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdHZhciBtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG9yaWdpbmFsTW9kdWxlKTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJleHBvcnRzXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWVcblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBdEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/webpack/buildin/harmony-module.js\n"); - -/***/ }), - -/***/ "../node_modules/webpack/buildin/module.js": -/*!*************************************************!*\ - !*** ../node_modules/webpack/buildin/module.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanM/NDY4MCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFwQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/webpack/buildin/module.js\n"); - -/***/ }), - -/***/ "../node_modules/x-is-string/index.js": -/*!********************************************!*\ - !*** ../node_modules/x-is-string/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("var toString = Object.prototype.toString;\nmodule.exports = isString;\n\nfunction isString(obj) {\n return toString.call(obj) === \"[object String]\";\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3gtaXMtc3RyaW5nL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy94LWlzLXN0cmluZy9pbmRleC5qcz8wNjRlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZ1xuXG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgU3RyaW5nXVwiXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/x-is-string/index.js\n"); - -/***/ }), - -/***/ "../node_modules/xhr/index.js": -/*!************************************!*\ - !*** ../node_modules/xhr/index.js ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nvar window = __webpack_require__(/*! global/window */ \"../node_modules/xhr/node_modules/global/window.js\");\n\nvar isFunction = __webpack_require__(/*! is-function */ \"../node_modules/is-function/index.js\");\n\nvar parseHeaders = __webpack_require__(/*! parse-headers */ \"../node_modules/parse-headers/parse-headers.js\");\n\nvar xtend = __webpack_require__(/*! xtend */ \"../node_modules/xtend/immutable.js\");\n\nmodule.exports = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest = \"withCredentials\" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window.XDomainRequest;\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n\n if (typeof uri === \"string\") {\n params = {\n uri: uri\n };\n }\n } else {\n params = xtend(options, {\n uri: uri\n });\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === \"undefined\") {\n throw new Error(\"callback argument missing\");\n }\n\n var called = false;\n\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n\n if (!(evt instanceof Error)) {\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\"));\n }\n\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n } // will load the data & process the response in a special response object\n\n\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n };\n\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\");\n }\n\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = xhr.url = options.uri || options.url;\n var method = xhr.method = options.method || \"GET\";\n var body = options.body || options.data;\n var headers = xhr.headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n };\n\n if (\"json\" in options && options.json !== false) {\n isJson = true;\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function.\n\n xhr.onprogress = function () {// IE must die\n };\n\n xhr.onabort = function () {\n aborted = true;\n };\n\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password); //has to be after open\n\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n } // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n\n\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n\n xhr.abort(\"timeout\");\n var e = new Error(\"XMLHttpRequest timeout\");\n e.code = \"ETIMEDOUT\";\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\");\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType;\n }\n\n if (\"beforeSend\" in options && typeof options.beforeSend === \"function\") {\n options.beforeSend(xhr);\n } // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n\n\n xhr.send(body || null);\n return xhr;\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML;\n }\n\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\";\n\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n\n return null;\n}\n\nfunction noop() {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3hoci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMveGhyL2luZGV4LmpzP2Y5ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9hZEZ1bmMsIDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgICAgICAvLyBDaHJvbWUgd2l0aCByZXF1ZXN0VHlwZT1ibG9iIHRocm93cyBlcnJvcnMgYXJyb3VuZCB3aGVuIGV2ZW4gdGVzdGluZyBhY2Nlc3MgdG8gcmVzcG9uc2VUZXh0XG4gICAgICAgIHZhciBib2R5ID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgZ2V0WG1sKHhocilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm9keVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhXG4gICAgdmFyIGhlYWRlcnMgPSB4aHIuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHZhciBzeW5jID0gISFvcHRpb25zLnN5bmNcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcbiAgICB2YXIgdGltZW91dFRpbWVyXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJpLFxuICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICB9XG5cbiAgICBpZiAoXCJqc29uXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uID09PSB0cnVlID8gYm9keSA6IG9wdGlvbnMuanNvbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFkeXN0YXRlY2hhbmdlXG4gICAgeGhyLm9ubG9hZCA9IGxvYWRGdW5jXG4gICAgeGhyLm9uZXJyb3IgPSBlcnJvckZ1bmNcbiAgICAvLyBJRTkgbXVzdCBoYXZlIG9ucHJvZ3Jlc3MgYmUgc2V0IHRvIGEgdW5pcXVlIGZ1bmN0aW9uLlxuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJRSBtdXN0IGRpZVxuICAgIH1cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZXJyb3JGdW5jXG4gICAgeGhyLm9wZW4obWV0aG9kLCB1cmksICFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkKVxuICAgIC8vaGFzIHRvIGJlIGFmdGVyIG9wZW5cbiAgICBpZighc3luYykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRpb25zLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICAvLyBDYW5ub3Qgc2V0IHRpbWVvdXQgd2l0aCBzeW5jIHJlcXVlc3RcbiAgICAvLyBub3Qgc2V0dGluZyB0aW1lb3V0IG9uIHRoZSB4aHIgb2JqZWN0LCBiZWNhdXNlIG9mIG9sZCB3ZWJraXRzIGV0Yy4gbm90IGhhbmRsaW5nIHRoYXQgY29ycmVjdGx5XG4gICAgLy8gYm90aCBucG0ncyByZXF1ZXN0IGFuZCBqcXVlcnkgMS54IHVzZSB0aGlzIGtpbmQgb2YgdGltZW91dCwgc28gdGhpcyBpcyBiZWluZyBjb25zaXN0ZW50XG4gICAgaWYgKCFzeW5jICYmIG9wdGlvbnMudGltZW91dCA+IDAgKSB7XG4gICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIC8vIE1pY3Jvc29mdCBFZGdlIGJyb3dzZXIgc2VuZHMgXCJ1bmRlZmluZWRcIiB3aGVuIHNlbmQgaXMgY2FsbGVkIHdpdGggdW5kZWZpbmVkIHZhbHVlLlxuICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHNwZWMgc2F5cyB0byBwYXNzIG51bGwgYXMgYm9keSB0byBpbmRpY2F0ZSBubyBib2R5XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXVndHVyL3hoci9pc3N1ZXMvMTAwLlxuICAgIHhoci5zZW5kKGJvZHkgfHwgbnVsbClcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIGdldFhtbCh4aHIpIHtcbiAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICB9XG4gICAgdmFyIGZpcmVmb3hCdWdUYWtlbkVmZmVjdCA9IHhoci5yZXNwb25zZVhNTCAmJiB4aHIucmVzcG9uc2VYTUwuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lID09PSBcInBhcnNlcmVycm9yXCJcbiAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiAhZmlyZWZveEJ1Z1Rha2VuRWZmZWN0KSB7XG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBub29wKCkge31cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFKQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUE1Q0E7QUFDQTtBQUNBO0FBOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbElBO0FBcUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFuS0E7QUF1S0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../node_modules/xhr/index.js\n"); - -/***/ }), - -/***/ "../node_modules/xhr/node_modules/global/window.js": -/*!*********************************************************!*\ - !*** ../node_modules/xhr/node_modules/global/window.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("/* WEBPACK VAR INJECTION */(function(global) {var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\") {\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3hoci9ub2RlX21vZHVsZXMvZ2xvYmFsL3dpbmRvdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMveGhyL25vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzPzUyNTAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSBnbG9iYWw7XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKXtcbiAgICB3aW4gPSBzZWxmO1xufSBlbHNlIHtcbiAgICB3aW4gPSB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../node_modules/xhr/node_modules/global/window.js\n"); - -/***/ }), - -/***/ "../node_modules/xtend/immutable.js": -/*!******************************************!*\ - !*** ../node_modules/xtend/immutable.js ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("module.exports = extend;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {};\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMveHRlbmQvaW1tdXRhYmxlLmpzP2Q2MWMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBleHRlbmRcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciB0YXJnZXQgPSB7fVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXVxuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../node_modules/xtend/immutable.js\n"); - -/***/ }), - -/***/ "../package.json": -/*!***********************!*\ - !*** ../package.json ***! - \***********************/ -/*! exports provided: name, version, description, keywords, license, homepage, bugs, repository, author, main, scripts, dependencies, devDependencies, engines, lbrySettings, default */ -/***/ (function(module) { - -eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"lbry\\\",\\\"version\\\":\\\"0.44.0\\\",\\\"description\\\":\\\"A browser for the LBRY network, a digital marketplace controlled by its users.\\\",\\\"keywords\\\":[\\\"lbry\\\"],\\\"license\\\":\\\"MIT\\\",\\\"homepage\\\":\\\"https://lbry.com/\\\",\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/lbryio/lbry-desktop/issues\\\"},\\\"repository\\\":{\\\"type\\\":\\\"git\\\",\\\"url\\\":\\\"https://github.com/lbryio/lbry-desktop\\\"},\\\"author\\\":{\\\"name\\\":\\\"LBRY Inc.\\\",\\\"email\\\":\\\"hello@lbry.com\\\"},\\\"main\\\":\\\"./dist/electron/main.js\\\",\\\"scripts\\\":{\\\"compile:electron\\\":\\\"node --max_old_space_size=4096 ./node_modules/webpack/bin/webpack.js --config webpack.electron.config.js\\\",\\\"compile:web\\\":\\\"cd ./lbrytv && node --max_old_space_size=4096 ./node_modules/webpack/bin/webpack.js --config webpack.config.js\\\",\\\"compile\\\":\\\"cross-env NODE_ENV=production yarn compile:electron && cross-env NODE_ENV=production yarn compile:web\\\",\\\"dev\\\":\\\"yarn dev:electron\\\",\\\"dev:electron\\\":\\\"cross-env NODE_ENV=development node ./electron/devServer.js\\\",\\\"dev:web\\\":\\\"cd ./lbrytv && yarn dev\\\",\\\"dev:web-server\\\":\\\"cross-env NODE_ENV=development yarn compile:web && concurrently \\\\\\\"cross-env NODE_ENV=development yarn compile:web --watch\\\\\\\" \\\\\\\"cd ./lbrytv && yarn dev:server\\\\\\\"\\\",\\\"dev:internal-apis\\\":\\\"LBRY_API_URL='http://localhost:8080' yarn dev:electron\\\",\\\"dev:iatv\\\":\\\"LBRY_API_URL='http://localhost:15400' SDK_API_URL='http://localhost:15100' yarn dev:web\\\",\\\"run:web\\\":\\\"cross-env NODE_ENV=production yarn compile:web && node ./dist/web/server.js\\\",\\\"run:web-server\\\":\\\"cross-env NODE_ENV=production yarn compile:web && cd ./lbrytv && yarn dev:server\\\",\\\"pack\\\":\\\"electron-builder --dir\\\",\\\"dist\\\":\\\"electron-builder\\\",\\\"build\\\":\\\"cross-env NODE_ENV=production yarn compile:electron && electron-builder build\\\",\\\"build:dir\\\":\\\"yarn build -- --dir -c.compression=store -c.mac.identity=null\\\",\\\"lint\\\":\\\"eslint 'src/**/*.{js,jsx}' --fix && flow\\\",\\\"format\\\":\\\"prettier 'src/**/*.{js,jsx,scss,json}' --write\\\",\\\"flow-defs\\\":\\\"flow-typed install\\\",\\\"precommit\\\":\\\"lint-staged\\\",\\\"preinstall\\\":\\\"yarn cache clean lbry-redux && yarn cache clean lbryinc\\\",\\\"postinstall\\\":\\\"cd ./lbrytv && yarn && cd .. && if-env NODE_ENV=production && yarn postinstall:warning || if-env APP_ENV=web && echo 'Done installing deps' || yarn postinstall:electron\\\",\\\"postinstall:electron\\\":\\\"electron-builder install-app-deps && node ./build/downloadDaemon.js\\\",\\\"postinstall:warning\\\":\\\"echo '\\\\n\\\\nWARNING\\\\n\\\\nNot all node modules were installed because NODE_ENV is set to \\\\\\\"production\\\\\\\".\\\\nThis should only be set after installing dependencies with \\\\\\\"yarn\\\\\\\". The app will not work.\\\\n\\\\n'\\\"},\\\"dependencies\\\":{\\\"auto-launch\\\":\\\"^5.0.5\\\",\\\"electron-dl\\\":\\\"^1.11.0\\\",\\\"electron-log\\\":\\\"^2.2.12\\\",\\\"electron-notarize\\\":\\\"^0.1.1\\\",\\\"electron-updater\\\":\\\"^4.2.4\\\",\\\"express\\\":\\\"^4.17.1\\\",\\\"if-env\\\":\\\"^1.0.4\\\"},\\\"devDependencies\\\":{\\\"@babel/core\\\":\\\"^7.0.0\\\",\\\"@babel/plugin-proposal-class-properties\\\":\\\"^7.0.0\\\",\\\"@babel/plugin-proposal-decorators\\\":\\\"^7.3.0\\\",\\\"@babel/plugin-proposal-object-rest-spread\\\":\\\"^7.6.2\\\",\\\"@babel/plugin-syntax-dynamic-import\\\":\\\"^7.2.0\\\",\\\"@babel/plugin-transform-flow-strip-types\\\":\\\"^7.2.3\\\",\\\"@babel/plugin-transform-runtime\\\":\\\"^7.4.3\\\",\\\"@babel/polyfill\\\":\\\"^7.2.5\\\",\\\"@babel/preset-env\\\":\\\"^7.7.1\\\",\\\"@babel/preset-flow\\\":\\\"^7.0.0\\\",\\\"@babel/preset-react\\\":\\\"^7.0.0\\\",\\\"@babel/register\\\":\\\"^7.0.0\\\",\\\"@exponent/electron-cookies\\\":\\\"^2.0.0\\\",\\\"@hot-loader/react-dom\\\":\\\"^16.8\\\",\\\"@lbry/components\\\":\\\"^4.0.1\\\",\\\"@reach/menu-button\\\":\\\"0.7.4\\\",\\\"@reach/rect\\\":\\\"^0.2.1\\\",\\\"@reach/tabs\\\":\\\"^0.1.5\\\",\\\"@sentry/browser\\\":\\\"^5.12.1\\\",\\\"@sentry/webpack-plugin\\\":\\\"^1.10.0\\\",\\\"@types/three\\\":\\\"^0.93.1\\\",\\\"adm-zip\\\":\\\"^0.4.13\\\",\\\"async-exit-hook\\\":\\\"^2.0.1\\\",\\\"babel-eslint\\\":\\\"^10.0.1\\\",\\\"babel-loader\\\":\\\"^8.0.5\\\",\\\"babel-plugin-add-module-exports\\\":\\\"^1.0.0\\\",\\\"babel-plugin-import-glob\\\":\\\"^2.0.0\\\",\\\"babel-plugin-transform-imports\\\":\\\"^1.5.1\\\",\\\"babel-plugin-transform-object-rest-spread\\\":\\\"^6.26.0\\\",\\\"bluebird\\\":\\\"^3.5.1\\\",\\\"chalk\\\":\\\"^2.4.2\\\",\\\"classnames\\\":\\\"^2.2.5\\\",\\\"codemirror\\\":\\\"^5.39.2\\\",\\\"concurrently\\\":\\\"^4.1.2\\\",\\\"connected-react-router\\\":\\\"^6.4.0\\\",\\\"copy-webpack-plugin\\\":\\\"^4.6.0\\\",\\\"country-data\\\":\\\"^0.0.31\\\",\\\"cross-env\\\":\\\"^5.2.0\\\",\\\"css-doodle\\\":\\\"^0.7.1\\\",\\\"css-loader\\\":\\\"^2.1.0\\\",\\\"cssnano\\\":\\\"^4.1.10\\\",\\\"dat.gui\\\":\\\"^0.7.2\\\",\\\"decompress\\\":\\\"^4.2.0\\\",\\\"del\\\":\\\"^3.0.0\\\",\\\"devtron\\\":\\\"^1.4.0\\\",\\\"dom-scroll-into-view\\\":\\\"^1.2.1\\\",\\\"electron\\\":\\\"4.1.0\\\",\\\"electron-builder\\\":\\\"^22.4.0\\\",\\\"electron-devtools-installer\\\":\\\"^2.2.4\\\",\\\"electron-is-dev\\\":\\\"^0.3.0\\\",\\\"electron-webpack\\\":\\\"^2.7.4\\\",\\\"electron-window-state\\\":\\\"^4.1.1\\\",\\\"eslint\\\":\\\"^5.15.2\\\",\\\"eslint-config-prettier\\\":\\\"^2.9.0\\\",\\\"eslint-config-standard\\\":\\\"^12.0.0\\\",\\\"eslint-config-standard-jsx\\\":\\\"^6.0.2\\\",\\\"eslint-import-resolver-webpack\\\":\\\"^0.11.0\\\",\\\"eslint-plugin-flowtype\\\":\\\"^2.46.1\\\",\\\"eslint-plugin-import\\\":\\\"^2.10.0\\\",\\\"eslint-plugin-jsx-a11y\\\":\\\"^6.0.3\\\",\\\"eslint-plugin-node\\\":\\\"^8.0.1\\\",\\\"eslint-plugin-prettier\\\":\\\"^2.6.0\\\",\\\"eslint-plugin-promise\\\":\\\"^4.0.1\\\",\\\"eslint-plugin-react\\\":\\\"^7.7.0\\\",\\\"eslint-plugin-react-hooks\\\":\\\"^1.6.0\\\",\\\"eslint-plugin-standard\\\":\\\"^4.0.1\\\",\\\"file-loader\\\":\\\"^4.2.0\\\",\\\"flow-bin\\\":\\\"^0.97.0\\\",\\\"flow-typed\\\":\\\"^2.3.0\\\",\\\"formik\\\":\\\"^0.10.4\\\",\\\"hast-util-sanitize\\\":\\\"^1.1.2\\\",\\\"history\\\":\\\"^4.9.0\\\",\\\"husky\\\":\\\"^3.1.0\\\",\\\"imagesloaded\\\":\\\"^4.1.4\\\",\\\"json-loader\\\":\\\"^0.5.4\\\",\\\"lbry-format\\\":\\\"https://github.com/lbryio/lbry-format.git\\\",\\\"lbry-redux\\\":\\\"lbryio/lbry-redux#1097a63d44a20b87e443fbaa48f95fe3ea5e3f70\\\",\\\"lbryinc\\\":\\\"lbryio/lbryinc#0addc624db54000b0447f4539f91f5758d26eef3\\\",\\\"lint-staged\\\":\\\"^7.0.2\\\",\\\"localforage\\\":\\\"^1.7.1\\\",\\\"lodash-es\\\":\\\"^4.17.14\\\",\\\"mammoth\\\":\\\"^1.4.6\\\",\\\"moment\\\":\\\"^2.22.0\\\",\\\"node-abi\\\":\\\"^2.5.1\\\",\\\"node-fetch\\\":\\\"^2.3.0\\\",\\\"node-libs-browser\\\":\\\"^2.1.0\\\",\\\"node-loader\\\":\\\"^0.6.0\\\",\\\"node-sass\\\":\\\"^4.11.0\\\",\\\"nodemon\\\":\\\"^1.19.1\\\",\\\"postcss-import\\\":\\\"^12.0.1\\\",\\\"postcss-loader\\\":\\\"^3.0.0\\\",\\\"preprocess-loader\\\":\\\"^0.3.0\\\",\\\"prettier\\\":\\\"^1.11.1\\\",\\\"prop-types\\\":\\\"^15.6.2\\\",\\\"qrcode.react\\\":\\\"^0.8.0\\\",\\\"raw-loader\\\":\\\"^2.0.0\\\",\\\"rc-progress\\\":\\\"^2.0.6\\\",\\\"react\\\":\\\"^16.8.2\\\",\\\"react-confetti\\\":\\\"^4.0.1\\\",\\\"react-dom\\\":\\\"^16.8.2\\\",\\\"react-draggable\\\":\\\"^3.3.0\\\",\\\"react-ga\\\":\\\"^2.5.7\\\",\\\"react-google-recaptcha\\\":\\\"^2.0.1\\\",\\\"react-hot-loader\\\":\\\"^4.11.1\\\",\\\"react-modal\\\":\\\"^3.1.7\\\",\\\"react-paginate\\\":\\\"^5.2.1\\\",\\\"react-redux\\\":\\\"^6.0.1\\\",\\\"react-router\\\":\\\"^5.1.0\\\",\\\"react-router-dom\\\":\\\"^5.1.0\\\",\\\"react-simplemde-editor\\\":\\\"^4.0.0\\\",\\\"react-spring\\\":\\\"^8.0.20\\\",\\\"react-sticky-box\\\":\\\"^0.8.0\\\",\\\"reakit\\\":\\\"^1.0.0-beta.13\\\",\\\"redux\\\":\\\"^3.6.0\\\",\\\"redux-persist\\\":\\\"^5.10.0\\\",\\\"redux-persist-transform-compress\\\":\\\"^4.2.0\\\",\\\"redux-persist-transform-filter\\\":\\\"0.0.16\\\",\\\"redux-thunk\\\":\\\"^2.2.0\\\",\\\"remark\\\":\\\"^9.0.0\\\",\\\"remark-attr\\\":\\\"^0.8.3\\\",\\\"remark-emoji\\\":\\\"^2.0.1\\\",\\\"remark-react\\\":\\\"^4.0.3\\\",\\\"reselect\\\":\\\"^3.0.0\\\",\\\"sass-loader\\\":\\\"^7.1.0\\\",\\\"semver\\\":\\\"^5.3.0\\\",\\\"stream-to-blob-url\\\":\\\"^2.1.1\\\",\\\"strip-markdown\\\":\\\"^3.0.3\\\",\\\"style-loader\\\":\\\"^0.23.1\\\",\\\"terser-webpack-plugin\\\":\\\"^1.2.3\\\",\\\"three\\\":\\\"^0.93.0\\\",\\\"three-full\\\":\\\"^17.1.0\\\",\\\"tiny-relative-date\\\":\\\"^1.3.0\\\",\\\"tree-kill\\\":\\\"^1.1.0\\\",\\\"unist-util-visit\\\":\\\"^1.4.1\\\",\\\"video.js\\\":\\\"^7.2.2\\\",\\\"videojs-event-tracking\\\":\\\"^1.0.1\\\",\\\"villain-react\\\":\\\"^1.0.6\\\",\\\"wavesurfer.js\\\":\\\"^2.2.1\\\",\\\"webpack\\\":\\\"^4.28.4\\\",\\\"webpack-bundle-analyzer\\\":\\\"^3.1.0\\\",\\\"webpack-cli\\\":\\\"^3.3.10\\\",\\\"webpack-config-utils\\\":\\\"^2.3.1\\\",\\\"webpack-dev-middleware\\\":\\\"^3.6.0\\\",\\\"webpack-dev-server\\\":\\\"^3.9.0\\\",\\\"webpack-hot-middleware\\\":\\\"^2.24.3\\\",\\\"webpack-merge\\\":\\\"^4.2.1\\\",\\\"webpack-node-externals\\\":\\\"^1.7.2\\\",\\\"y18n\\\":\\\"^4.0.0\\\",\\\"yarnhook\\\":\\\"^0.2.0\\\"},\\\"engines\\\":{\\\"node\\\":\\\">=7\\\",\\\"yarn\\\":\\\"^1.3\\\"},\\\"lbrySettings\\\":{\\\"lbrynetDaemonVersion\\\":\\\"0.67.2\\\",\\\"lbrynetDaemonUrlTemplate\\\":\\\"https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-OSNAME.zip\\\",\\\"lbrynetDaemonDir\\\":\\\"static/daemon\\\",\\\"lbrynetDaemonFileName\\\":\\\"lbrynet\\\"}}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vcGFja2FnZS5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../package.json\n"); - -/***/ }), - -/***/ "../static/img/busy.gif": -/*!******************************!*\ - !*** ../static/img/busy.gif ***! - \******************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/busy.gif\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vc3RhdGljL2ltZy9idXN5LmdpZi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zdGF0aWMvaW1nL2J1c3kuZ2lmP2EyMTQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1nL2J1c3kuZ2lmXCI7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../static/img/busy.gif\n"); - -/***/ }), - -/***/ "../static/img/unlocklbry.svg": -/*!************************************!*\ - !*** ../static/img/unlocklbry.svg ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/unlocklbry.svg\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vc3RhdGljL2ltZy91bmxvY2tsYnJ5LnN2Zy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi9zdGF0aWMvaW1nL3VubG9ja2xicnkuc3ZnPzAwMzQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1nL3VubG9ja2xicnkuc3ZnXCI7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../static/img/unlocklbry.svg\n"); - -/***/ }), - -/***/ "../ui/analytics.js": -/*!**************************!*\ - !*** ../ui/analytics.js ***! - \**************************/ -/*! exports provided: SHARE_INTERNAL, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHARE_INTERNAL\", function() { return SHARE_INTERNAL; });\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_ga__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-ga */ \"../node_modules/react-ga/dist/esm/index.js\");\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @sentry/browser */ \"../node_modules/@sentry/browser/esm/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ \"../ui/store.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ \"../ui/index.jsx\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nvar isProduction = undefined === 'production';\nvar devInternalApis = undefined;\nvar LBRY_TV_MINUS_PIRATE_BAY_UA_ID = 'UA-60403362-16';\nvar LBRY_TV_UA_ID = 'UA-60403362-12';\nvar DESKTOP_UA_ID = 'UA-60403362-13';\nvar SECOND_TRACKER_NAME = 'tracker2';\nvar SHARE_INTERNAL = 'shareInternal';\nvar SHARE_THIRD_PARTY = 'shareThirdParty';\nvar internalAnalyticsEnabled = true || false;\nvar thirdPartyAnalyticsEnabled = true || false;\nvar analytics = {\n error: function error(message) {\n return new Promise(function (resolve) {\n if (internalAnalyticsEnabled && isProduction) {\n return lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('event', 'desktop_error', {\n error_message: message\n }).then(function () {\n resolve(true);\n });\n } else {\n resolve(false);\n }\n });\n },\n sentryError: function sentryError(error, errorInfo) {\n return new Promise(function (resolve) {\n if (internalAnalyticsEnabled && isProduction) {\n _sentry_browser__WEBPACK_IMPORTED_MODULE_2__[\"withScope\"](function (scope) {\n scope.setExtras(errorInfo);\n var eventId = _sentry_browser__WEBPACK_IMPORTED_MODULE_2__[\"captureException\"](error);\n resolve(eventId);\n });\n } else {\n resolve(null);\n }\n });\n },\n pageView: function pageView(path) {\n if (thirdPartyAnalyticsEnabled) {\n react_ga__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pageview(path, [SECOND_TRACKER_NAME]);\n }\n },\n setUser: function setUser(userId) {\n if (thirdPartyAnalyticsEnabled && userId) {\n react_ga__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set({\n userId: userId\n });\n }\n },\n toggleInternal: function toggleInternal(enabled) {// Always collect analytics on lbry.tv\n },\n toggleThirdParty: function toggleThirdParty(enabled) {// Always collect analytics on lbry.tv\n },\n apiLogView: function apiLogView(uri, outpoint, claimId, timeToStart) {\n return new Promise(function (resolve, reject) {\n if (internalAnalyticsEnabled && (isProduction || devInternalApis)) {\n var params = {\n uri: uri,\n outpoint: outpoint,\n claim_id: claimId\n }; // lbry.tv streams from AWS so we don't care about the time to start\n\n if (timeToStart && !true) {\n params.time_to_start = timeToStart;\n }\n\n resolve(lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('file', 'view', params));\n } else {\n resolve();\n }\n });\n },\n apiLogSearch: function apiLogSearch() {\n if (internalAnalyticsEnabled && isProduction) {\n lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('event', 'search');\n }\n },\n apiLogPublish: function apiLogPublish(claimResult) {\n if (internalAnalyticsEnabled && isProduction) {\n var uri = claimResult.permanent_url,\n claimId = claimResult.claim_id,\n txid = claimResult.txid,\n nout = claimResult.nout,\n signingChannel = claimResult.signing_channel;\n var channelClaimId;\n\n if (signingChannel) {\n channelClaimId = signingChannel.claim_id;\n }\n\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n var params = {\n uri: uri,\n claim_id: claimId,\n outpoint: outpoint\n };\n\n if (channelClaimId) {\n params['channel_claim_id'] = channelClaimId;\n }\n\n lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('event', 'publish', params);\n }\n },\n apiSyncTags: function apiSyncTags(params) {\n if (internalAnalyticsEnabled && isProduction) {\n lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('content_tags', 'sync', params);\n }\n },\n apiSearchFeedback: function apiSearchFeedback(query, vote) {\n if (isProduction) {\n // We don't need to worry about analytics enabled here because users manually click on the button to provide feedback\n lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('feedback', 'search', {\n query: query,\n vote: vote\n });\n }\n },\n videoStartEvent: function videoStartEvent(claimId, duration) {\n sendGaTimingEvent('Media', 'TimeToStart', Number((duration * 1000).toFixed(0)), claimId);\n sendPromMetric('time_to_start', duration);\n },\n videoBufferEvent: function videoBufferEvent(claimId, currentTime) {\n sendGaTimingEvent('Media', 'BufferTimestamp', currentTime * 1000, claimId);\n sendPromMetric('buffer');\n },\n tagFollowEvent: function tagFollowEvent(tag, following, location) {\n sendGaEvent(following ? 'Tag-Follow' : 'Tag-Unfollow', tag);\n },\n channelBlockEvent: function channelBlockEvent(uri, blocked, location) {\n sendGaEvent(blocked ? 'Channel-Hidden' : 'Channel-Unhidden', uri);\n },\n emailProvidedEvent: function emailProvidedEvent() {\n sendGaEvent('Engagement', 'Email-Provided');\n },\n emailVerifiedEvent: function emailVerifiedEvent() {\n sendGaEvent('Engagement', 'Email-Verified');\n },\n rewardEligibleEvent: function rewardEligibleEvent() {\n sendGaEvent('Engagement', 'Reward-Eligible');\n },\n openUrlEvent: function openUrlEvent(url) {\n sendGaEvent('Engagement', 'Open-Url', url);\n },\n trendingAlgorithmEvent: function trendingAlgorithmEvent(trendingAlgorithm) {\n sendGaEvent('Engagement', 'Trending-Algorithm', trendingAlgorithm);\n },\n startupEvent: function startupEvent() {\n sendGaEvent('Startup', 'Startup');\n },\n readyEvent: function readyEvent(timeToReady) {\n sendGaEvent('Startup', 'App-Ready');\n sendGaTimingEvent('Startup', 'App-Ready', timeToReady);\n }\n};\n\nfunction sendGaEvent(category, action, label, value) {\n if (thirdPartyAnalyticsEnabled && isProduction) {\n react_ga__WEBPACK_IMPORTED_MODULE_1__[\"default\"].event(_objectSpread({\n category: category,\n action: action\n }, label ? {\n label: label\n } : {}, {}, value ? {\n value: value\n } : {}), [SECOND_TRACKER_NAME]);\n }\n}\n\nfunction sendGaTimingEvent(category, action, timeInMs, label) {\n if (thirdPartyAnalyticsEnabled && isProduction) {\n react_ga__WEBPACK_IMPORTED_MODULE_1__[\"default\"].timing(_objectSpread({\n category: category,\n variable: action,\n value: timeInMs\n }, label ? {\n label: label\n } : {}), [SECOND_TRACKER_NAME]);\n }\n}\n\nfunction sendPromMetric(name, value) {\n if (true) {\n var url = new URL(_index__WEBPACK_IMPORTED_MODULE_4__[\"SDK_API_PATH\"] + '/metric/ui');\n var params = {\n name: name,\n value: value ? value.toString() : ''\n };\n url.search = new URLSearchParams(params).toString();\n return fetch(url, {\n method: 'post'\n });\n }\n}\n\nvar gaTrackers = [];\n\nif (false) {} else {\n gaTrackers.push({\n trackingId: LBRY_TV_UA_ID\n });\n var search = window.location.search;\n var urlParams = new URLSearchParams(search);\n var isPirateBayUser = urlParams.get('utm_source') === 'PB';\n\n if (!isPirateBayUser) {\n gaTrackers.push({\n trackingId: LBRY_TV_MINUS_PIRATE_BAY_UA_ID,\n gaOptions: {\n name: SECOND_TRACKER_NAME\n }\n });\n }\n}\n\nreact_ga__WEBPACK_IMPORTED_MODULE_1__[\"default\"].initialize(gaTrackers, {\n testMode: undefined !== 'production',\n cookieDomain: 'auto',\n siteSpeedSampleRate: 100 // un-comment to see events as they are sent to google\n // debug: true,\n\n}); // Manually call the first page view\n// React Router doesn't include this on `history.listen`\n\nanalytics.pageView(window.location.pathname + window.location.search);\n; // Listen for url changes and report\n// This will include search queries\n\n_store__WEBPACK_IMPORTED_MODULE_3__[\"history\"].listen(function (location) {\n var pathname = location.pathname,\n search = location.search;\n var page = \"\".concat(pathname).concat(search);\n analytics.pageView(page);\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (analytics);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvYW5hbHl0aWNzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2FuYWx5dGljcy5qcz8xYTk0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgeyBMYnJ5aW8gfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBSZWFjdEdBIGZyb20gJ3JlYWN0LWdhJztcbmltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuaW1wb3J0IHsgaGlzdG9yeSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHsgU0RLX0FQSV9QQVRIIH0gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG5jb25zdCBkZXZJbnRlcm5hbEFwaXMgPSBwcm9jZXNzLmVudi5MQlJZX0FQSV9VUkw7XG5jb25zdCBMQlJZX1RWX01JTlVTX1BJUkFURV9CQVlfVUFfSUQgPSAnVUEtNjA0MDMzNjItMTYnO1xuY29uc3QgTEJSWV9UVl9VQV9JRCA9ICdVQS02MDQwMzM2Mi0xMic7XG5jb25zdCBERVNLVE9QX1VBX0lEID0gJ1VBLTYwNDAzMzYyLTEzJztcbmNvbnN0IFNFQ09ORF9UUkFDS0VSX05BTUUgPSAndHJhY2tlcjInO1xuXG5leHBvcnQgY29uc3QgU0hBUkVfSU5URVJOQUwgPSAnc2hhcmVJbnRlcm5hbCc7XG5jb25zdCBTSEFSRV9USElSRF9QQVJUWSA9ICdzaGFyZVRoaXJkUGFydHknO1xuXG5cbnR5cGUgQW5hbHl0aWNzID0ge1xuICBlcnJvcjogc3RyaW5nID0+IFByb21pc2U8YW55PixcbiAgc2VudHJ5RXJyb3I6ICh7fSwge30pID0+IFByb21pc2U8YW55PixcbiAgcGFnZVZpZXc6IHN0cmluZyA9PiB2b2lkLFxuICBzZXRVc2VyOiBPYmplY3QgPT4gdm9pZCxcbiAgdG9nZ2xlSW50ZXJuYWw6IChib29sZWFuLCA/Ym9vbGVhbikgPT4gdm9pZCxcbiAgdG9nZ2xlVGhpcmRQYXJ0eTogKGJvb2xlYW4sID9ib29sZWFuKSA9PiB2b2lkLFxuICBhcGlMb2dWaWV3OiAoc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgP251bWJlciwgPygpID0+IHZvaWQpID0+IFByb21pc2U8YW55PixcbiAgYXBpTG9nUHVibGlzaDogKENoYW5uZWxDbGFpbSB8IFN0cmVhbUNsYWltKSA9PiB2b2lkLFxuICBhcGlTeW5jVGFnczogKHt9KSA9PiB2b2lkLFxuICB0YWdGb2xsb3dFdmVudDogKHN0cmluZywgYm9vbGVhbiwgc3RyaW5nKSA9PiB2b2lkLFxuICB2aWRlb1N0YXJ0RXZlbnQ6IChzdHJpbmcsIG51bWJlcikgPT4gdm9pZCxcbiAgdmlkZW9CdWZmZXJFdmVudDogKHN0cmluZywgbnVtYmVyKSA9PiB2b2lkLFxuICBlbWFpbFByb3ZpZGVkRXZlbnQ6ICgpID0+IHZvaWQsXG4gIGVtYWlsVmVyaWZpZWRFdmVudDogKCkgPT4gdm9pZCxcbiAgcmV3YXJkRWxpZ2libGVFdmVudDogKCkgPT4gdm9pZCxcbiAgc3RhcnR1cEV2ZW50OiAoKSA9PiB2b2lkLFxuICByZWFkeUV2ZW50OiBudW1iZXIgPT4gdm9pZCxcbiAgb3BlblVybEV2ZW50OiBzdHJpbmcgPT4gdm9pZCxcbn07XG5cbnR5cGUgTG9nUHVibGlzaFBhcmFtcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltX2lkOiBzdHJpbmcsXG4gIG91dHBvaW50OiBzdHJpbmcsXG4gIGNoYW5uZWxfY2xhaW1faWQ/OiBzdHJpbmcsXG59O1xuXG5sZXQgaW50ZXJuYWxBbmFseXRpY3NFbmFibGVkOiBib29sZWFuID0gSVNfV0VCIHx8IGZhbHNlO1xubGV0IHRoaXJkUGFydHlBbmFseXRpY3NFbmFibGVkOiBib29sZWFuID0gSVNfV0VCIHx8IGZhbHNlO1xuXG5jb25zdCBhbmFseXRpY3M6IEFuYWx5dGljcyA9IHtcbiAgZXJyb3I6IG1lc3NhZ2UgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmIChpbnRlcm5hbEFuYWx5dGljc0VuYWJsZWQgJiYgaXNQcm9kdWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBMYnJ5aW8uY2FsbCgnZXZlbnQnLCAnZGVza3RvcF9lcnJvcicsIHsgZXJyb3JfbWVzc2FnZTogbWVzc2FnZSB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBzZW50cnlFcnJvcjogKGVycm9yLCBlcnJvckluZm8pID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoaW50ZXJuYWxBbmFseXRpY3NFbmFibGVkICYmIGlzUHJvZHVjdGlvbikge1xuICAgICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYXMoZXJyb3JJbmZvKTtcbiAgICAgICAgICBjb25zdCBldmVudElkID0gU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgIHJlc29sdmUoZXZlbnRJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgcGFnZVZpZXc6IHBhdGggPT4ge1xuICAgIGlmICh0aGlyZFBhcnR5QW5hbHl0aWNzRW5hYmxlZCkge1xuICAgICAgUmVhY3RHQS5wYWdldmlldyhwYXRoLCBbU0VDT05EX1RSQUNLRVJfTkFNRV0pO1xuICAgIH1cbiAgfSxcbiAgc2V0VXNlcjogdXNlcklkID0+IHtcbiAgICBpZiAodGhpcmRQYXJ0eUFuYWx5dGljc0VuYWJsZWQgJiYgdXNlcklkKSB7XG4gICAgICBSZWFjdEdBLnNldCh7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9LFxuICB0b2dnbGVJbnRlcm5hbDogKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBhbmFseXRpY3Mgb24gbGJyeS50dlxuICB9LFxuXG4gIHRvZ2dsZVRoaXJkUGFydHk6IChlbmFibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgYW5hbHl0aWNzIG9uIGxicnkudHZcbiAgfSxcblxuICBhcGlMb2dWaWV3OiAodXJpLCBvdXRwb2ludCwgY2xhaW1JZCwgdGltZVRvU3RhcnQpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGludGVybmFsQW5hbHl0aWNzRW5hYmxlZCAmJiAoaXNQcm9kdWN0aW9uIHx8IGRldkludGVybmFsQXBpcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiB7XG4gICAgICAgICAgdXJpOiBzdHJpbmcsXG4gICAgICAgICAgb3V0cG9pbnQ6IHN0cmluZyxcbiAgICAgICAgICBjbGFpbV9pZDogc3RyaW5nLFxuICAgICAgICAgIHRpbWVfdG9fc3RhcnQ/OiBudW1iZXIsXG4gICAgICAgIH0gPSB7XG4gICAgICAgICAgdXJpLFxuICAgICAgICAgIG91dHBvaW50LFxuICAgICAgICAgIGNsYWltX2lkOiBjbGFpbUlkLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGxicnkudHYgc3RyZWFtcyBmcm9tIEFXUyBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSB0aW1lIHRvIHN0YXJ0XG4gICAgICAgIGlmICh0aW1lVG9TdGFydCAmJiAhSVNfV0VCKSB7XG4gICAgICAgICAgcGFyYW1zLnRpbWVfdG9fc3RhcnQgPSB0aW1lVG9TdGFydDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoTGJyeWlvLmNhbGwoJ2ZpbGUnLCAndmlldycsIHBhcmFtcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBhcGlMb2dTZWFyY2g6ICgpID0+IHtcbiAgICBpZiAoaW50ZXJuYWxBbmFseXRpY3NFbmFibGVkICYmIGlzUHJvZHVjdGlvbikge1xuICAgICAgTGJyeWlvLmNhbGwoJ2V2ZW50JywgJ3NlYXJjaCcpO1xuICAgIH1cbiAgfSxcbiAgYXBpTG9nUHVibGlzaDogKGNsYWltUmVzdWx0OiBDaGFubmVsQ2xhaW0gfCBTdHJlYW1DbGFpbSkgPT4ge1xuICAgIGlmIChpbnRlcm5hbEFuYWx5dGljc0VuYWJsZWQgJiYgaXNQcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCB7IHBlcm1hbmVudF91cmw6IHVyaSwgY2xhaW1faWQ6IGNsYWltSWQsIHR4aWQsIG5vdXQsIHNpZ25pbmdfY2hhbm5lbDogc2lnbmluZ0NoYW5uZWwgfSA9IGNsYWltUmVzdWx0O1xuICAgICAgbGV0IGNoYW5uZWxDbGFpbUlkO1xuICAgICAgaWYgKHNpZ25pbmdDaGFubmVsKSB7XG4gICAgICAgIGNoYW5uZWxDbGFpbUlkID0gc2lnbmluZ0NoYW5uZWwuY2xhaW1faWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuICAgICAgY29uc3QgcGFyYW1zOiBMb2dQdWJsaXNoUGFyYW1zID0geyB1cmksIGNsYWltX2lkOiBjbGFpbUlkLCBvdXRwb2ludCB9O1xuICAgICAgaWYgKGNoYW5uZWxDbGFpbUlkKSB7XG4gICAgICAgIHBhcmFtc1snY2hhbm5lbF9jbGFpbV9pZCddID0gY2hhbm5lbENsYWltSWQ7XG4gICAgICB9XG5cbiAgICAgIExicnlpby5jYWxsKCdldmVudCcsICdwdWJsaXNoJywgcGFyYW1zKTtcbiAgICB9XG4gIH0sXG5cbiAgYXBpU3luY1RhZ3M6IHBhcmFtcyA9PiB7XG4gICAgaWYgKGludGVybmFsQW5hbHl0aWNzRW5hYmxlZCAmJiBpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIExicnlpby5jYWxsKCdjb250ZW50X3RhZ3MnLCAnc3luYycsIHBhcmFtcyk7XG4gICAgfVxuICB9LFxuXG4gIGFwaVNlYXJjaEZlZWRiYWNrOiAocXVlcnksIHZvdGUpID0+IHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFuYWx5dGljcyBlbmFibGVkIGhlcmUgYmVjYXVzZSB1c2VycyBtYW51YWxseSBjbGljayBvbiB0aGUgYnV0dG9uIHRvIHByb3ZpZGUgZmVlZGJhY2tcbiAgICAgIExicnlpby5jYWxsKCdmZWVkYmFjaycsICdzZWFyY2gnLCB7IHF1ZXJ5LCB2b3RlIH0pO1xuICAgIH1cbiAgfSxcbiAgdmlkZW9TdGFydEV2ZW50OiAoY2xhaW1JZCwgZHVyYXRpb24pID0+IHtcbiAgICBzZW5kR2FUaW1pbmdFdmVudCgnTWVkaWEnLCAnVGltZVRvU3RhcnQnLCBOdW1iZXIoKGR1cmF0aW9uICogMTAwMCkudG9GaXhlZCgwKSksIGNsYWltSWQpO1xuICAgIHNlbmRQcm9tTWV0cmljKCd0aW1lX3RvX3N0YXJ0JywgZHVyYXRpb24pO1xuICB9LFxuICB2aWRlb0J1ZmZlckV2ZW50OiAoY2xhaW1JZCwgY3VycmVudFRpbWUpID0+IHtcbiAgICBzZW5kR2FUaW1pbmdFdmVudCgnTWVkaWEnLCAnQnVmZmVyVGltZXN0YW1wJywgY3VycmVudFRpbWUgKiAxMDAwLCBjbGFpbUlkKTtcbiAgICBzZW5kUHJvbU1ldHJpYygnYnVmZmVyJyk7XG4gIH0sXG4gIHRhZ0ZvbGxvd0V2ZW50OiAodGFnLCBmb2xsb3dpbmcsIGxvY2F0aW9uKSA9PiB7XG4gICAgc2VuZEdhRXZlbnQoZm9sbG93aW5nID8gJ1RhZy1Gb2xsb3cnIDogJ1RhZy1VbmZvbGxvdycsIHRhZyk7XG4gIH0sXG4gIGNoYW5uZWxCbG9ja0V2ZW50OiAodXJpLCBibG9ja2VkLCBsb2NhdGlvbikgPT4ge1xuICAgIHNlbmRHYUV2ZW50KGJsb2NrZWQgPyAnQ2hhbm5lbC1IaWRkZW4nIDogJ0NoYW5uZWwtVW5oaWRkZW4nLCB1cmkpO1xuICB9LFxuICBlbWFpbFByb3ZpZGVkRXZlbnQ6ICgpID0+IHtcbiAgICBzZW5kR2FFdmVudCgnRW5nYWdlbWVudCcsICdFbWFpbC1Qcm92aWRlZCcpO1xuICB9LFxuICBlbWFpbFZlcmlmaWVkRXZlbnQ6ICgpID0+IHtcbiAgICBzZW5kR2FFdmVudCgnRW5nYWdlbWVudCcsICdFbWFpbC1WZXJpZmllZCcpO1xuICB9LFxuICByZXdhcmRFbGlnaWJsZUV2ZW50OiAoKSA9PiB7XG4gICAgc2VuZEdhRXZlbnQoJ0VuZ2FnZW1lbnQnLCAnUmV3YXJkLUVsaWdpYmxlJyk7XG4gIH0sXG4gIG9wZW5VcmxFdmVudDogKHVybDogc3RyaW5nKSA9PiB7XG4gICAgc2VuZEdhRXZlbnQoJ0VuZ2FnZW1lbnQnLCAnT3Blbi1VcmwnLCB1cmwpO1xuICB9LFxuICB0cmVuZGluZ0FsZ29yaXRobUV2ZW50OiAodHJlbmRpbmdBbGdvcml0aG06IHN0cmluZykgPT4ge1xuICAgIHNlbmRHYUV2ZW50KCdFbmdhZ2VtZW50JywgJ1RyZW5kaW5nLUFsZ29yaXRobScsIHRyZW5kaW5nQWxnb3JpdGhtKTtcbiAgfSxcbiAgc3RhcnR1cEV2ZW50OiAoKSA9PiB7XG4gICAgc2VuZEdhRXZlbnQoJ1N0YXJ0dXAnLCAnU3RhcnR1cCcpO1xuICB9LFxuICByZWFkeUV2ZW50OiAodGltZVRvUmVhZHk6IG51bWJlcikgPT4ge1xuICAgIHNlbmRHYUV2ZW50KCdTdGFydHVwJywgJ0FwcC1SZWFkeScpO1xuICAgIHNlbmRHYVRpbWluZ0V2ZW50KCdTdGFydHVwJywgJ0FwcC1SZWFkeScsIHRpbWVUb1JlYWR5KTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHNlbmRHYUV2ZW50KGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkge1xuICBpZiAodGhpcmRQYXJ0eUFuYWx5dGljc0VuYWJsZWQgJiYgaXNQcm9kdWN0aW9uKSB7XG4gICAgUmVhY3RHQS5ldmVudChcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgLi4uKGxhYmVsID8geyBsYWJlbCB9IDoge30pLFxuICAgICAgICAuLi4odmFsdWUgPyB7IHZhbHVlIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgW1NFQ09ORF9UUkFDS0VSX05BTUVdXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZW5kR2FUaW1pbmdFdmVudChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgdGltZUluTXM6IG51bWJlciwgbGFiZWw/OiBzdHJpbmcpIHtcbiAgaWYgKHRoaXJkUGFydHlBbmFseXRpY3NFbmFibGVkICYmIGlzUHJvZHVjdGlvbikge1xuICAgIFJlYWN0R0EudGltaW5nKFxuICAgICAge1xuICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgdmFyaWFibGU6IGFjdGlvbixcbiAgICAgICAgdmFsdWU6IHRpbWVJbk1zLFxuICAgICAgICAuLi4obGFiZWwgPyB7IGxhYmVsIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgW1NFQ09ORF9UUkFDS0VSX05BTUVdXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZW5kUHJvbU1ldHJpYyhuYW1lOiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSB7XG4gIGlmIChJU19XRUIpIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTChTREtfQVBJX1BBVEggKyAnL21ldHJpYy91aScpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6ICcnIH07XG4gICAgdXJsLnNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xuICAgIHJldHVybiBmZXRjaCh1cmwsIHsgbWV0aG9kOiAncG9zdCcgfSk7XG4gIH1cbn1cblxubGV0IGdhVHJhY2tlcnMgPSBbXTtcblxuaWYgKCFJU19XRUIpIHtcbiAgZ2FUcmFja2Vycy5wdXNoKHtcbiAgICB0cmFja2luZ0lkOiBERVNLVE9QX1VBX0lELFxuICB9KTtcbn0gZWxzZSB7XG4gIGdhVHJhY2tlcnMucHVzaCh7XG4gICAgdHJhY2tpbmdJZDogTEJSWV9UVl9VQV9JRCxcbiAgfSk7XG5cbiAgY29uc3QgeyBzZWFyY2ggfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCBpc1BpcmF0ZUJheVVzZXIgPSB1cmxQYXJhbXMuZ2V0KCd1dG1fc291cmNlJykgPT09ICdQQic7XG5cbiAgaWYgKCFpc1BpcmF0ZUJheVVzZXIpIHtcbiAgICBnYVRyYWNrZXJzLnB1c2goe1xuICAgICAgdHJhY2tpbmdJZDogTEJSWV9UVl9NSU5VU19QSVJBVEVfQkFZX1VBX0lELFxuICAgICAgZ2FPcHRpb25zOiB7XG4gICAgICAgIG5hbWU6IFNFQ09ORF9UUkFDS0VSX05BTUUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cblJlYWN0R0EuaW5pdGlhbGl6ZShnYVRyYWNrZXJzLCB7XG4gIHRlc3RNb2RlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICBjb29raWVEb21haW46ICdhdXRvJyxcbiAgc2l0ZVNwZWVkU2FtcGxlUmF0ZTogMTAwLFxuICAvLyB1bi1jb21tZW50IHRvIHNlZSBldmVudHMgYXMgdGhleSBhcmUgc2VudCB0byBnb29nbGVcbiAgLy8gZGVidWc6IHRydWUsXG59KTtcblxuLy8gTWFudWFsbHkgY2FsbCB0aGUgZmlyc3QgcGFnZSB2aWV3XG4vLyBSZWFjdCBSb3V0ZXIgZG9lc24ndCBpbmNsdWRlIHRoaXMgb24gYGhpc3RvcnkubGlzdGVuYFxuYW5hbHl0aWNzLnBhZ2VWaWV3KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG47XG5cbi8vIExpc3RlbiBmb3IgdXJsIGNoYW5nZXMgYW5kIHJlcG9ydFxuLy8gVGhpcyB3aWxsIGluY2x1ZGUgc2VhcmNoIHF1ZXJpZXNcbmhpc3RvcnkubGlzdGVuKGxvY2F0aW9uID0+IHtcbiAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoIH0gPSBsb2NhdGlvbjtcblxuICBjb25zdCBwYWdlID0gYCR7cGF0aG5hbWV9JHtzZWFyY2h9YDtcbiAgYW5hbHl0aWNzLnBhZ2VWaWV3KHBhZ2UpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFuYWx5dGljcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUErQkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQVBBO0FBRkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUNBO0FBVEE7QUFiQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQTVCQTtBQThCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFwQ0E7QUFzQ0E7QUF0Q0E7QUEwQ0E7QUExQ0E7QUE4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBckJBO0FBL0NBO0FBdUVBO0FBQ0E7QUFDQTtBQUNBO0FBMUVBO0FBNEVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExRkE7QUE2RkE7QUFDQTtBQUNBO0FBQ0E7QUFoR0E7QUFtR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXZHQTtBQXlHQTtBQUNBO0FBQ0E7QUEzR0E7QUE2R0E7QUFDQTtBQUNBO0FBL0dBO0FBaUhBO0FBQ0E7QUFsSEE7QUFvSEE7QUFDQTtBQXJIQTtBQXVIQTtBQUNBO0FBeEhBO0FBMEhBO0FBQ0E7QUEzSEE7QUE2SEE7QUFDQTtBQTlIQTtBQWdJQTtBQUNBO0FBaklBO0FBbUlBO0FBQ0E7QUFwSUE7QUFzSUE7QUFDQTtBQXZJQTtBQXlJQTtBQUNBO0FBQ0E7QUFDQTtBQTVJQTtBQUNBO0FBOElBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFIQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFLQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFBO0FBS0E7QUFDQTtBQURBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUFBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUpBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/analytics.js\n"); - -/***/ }), - -/***/ "../ui/app.js": -/*!********************!*\ - !*** ../ui/app.js ***! - \********************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! store */ \"../ui/store.js\");\n\nvar env = undefined || 'production';\nvar logs = [];\nvar app = {\n env: env,\n store: store__WEBPACK_IMPORTED_MODULE_0__[\"store\"],\n logs: logs,\n log: function log(message) {\n logs.push(message);\n }\n};\nglobal.app = app; // Lbryinc needs access to the redux store for dispatching auth-releated actions\n\nglobal.store = app.store;\n/* harmony default export */ __webpack_exports__[\"default\"] = (app);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvYXBwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2FwcC5qcz9jOTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0b3JlIH0gZnJvbSAnc3RvcmUnO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCAncHJvZHVjdGlvbic7XG5cbmNvbnN0IGxvZ3MgPSBbXTtcbmNvbnN0IGFwcCA9IHtcbiAgZW52LFxuICBzdG9yZSxcbiAgbG9ncyxcbiAgbG9nKG1lc3NhZ2UpIHtcbiAgICBsb2dzLnB1c2gobWVzc2FnZSk7XG4gIH0sXG59O1xuXG5nbG9iYWwuYXBwID0gYXBwO1xuXG4vLyBMYnJ5aW5jIG5lZWRzIGFjY2VzcyB0byB0aGUgcmVkdXggc3RvcmUgZm9yIGRpc3BhdGNoaW5nIGF1dGgtcmVsZWF0ZWQgYWN0aW9uc1xuZ2xvYmFsLnN0b3JlID0gYXBwLnN0b3JlO1xuXG5leHBvcnQgZGVmYXVsdCBhcHA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUVBO0FBRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/app.js\n"); - -/***/ }), - -/***/ "../ui/component/IframeReact/index.js": -/*!********************************************!*\ - !*** ../ui/component/IframeReact/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/IframeReact/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L0lmcmFtZVJlYWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9JZnJhbWVSZWFjdC9pbmRleC5qcz85MTI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgSWZyYW1lUmVhY3QgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9ICgpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShJZnJhbWVSZWFjdCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/IframeReact/index.js\n"); - -/***/ }), - -/***/ "../ui/component/IframeReact/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/IframeReact/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return I18nMessage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction I18nMessage(props) {\n var src = props.src,\n title = props.title; // const iframeRef = useRef();\n // const [iframeHeight, setIframeHeight] = useState('80vh');\n\n function onLoad() {\n /*\n iframe domain restrictions prevent naive design :-(\n const obj = iframeRef.current;\n if (obj) {\n setIframeHeight(obj.contentWindow.document.body.scrollHeight + 'px');\n }\n */\n }\n\n return (// style={{height: iframeHeight}}\n // ref={iframeRef}\n react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"iframe\", {\n src: src,\n title: title,\n onLoad: onLoad\n })\n );\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L0lmcmFtZVJlYWN0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9JZnJhbWVSZWFjdC92aWV3LmpzeD80MDk2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICBmdWxsSGVpZ2h0OiBib29sZWFuLFxuICBzcmM6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEkxOG5NZXNzYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHNyYywgdGl0bGUgfSA9IHByb3BzO1xuXG4gIC8vIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZigpO1xuXG4gIC8vIGNvbnN0IFtpZnJhbWVIZWlnaHQsIHNldElmcmFtZUhlaWdodF0gPSB1c2VTdGF0ZSgnODB2aCcpO1xuXG4gIGZ1bmN0aW9uIG9uTG9hZCgpIHtcbiAgICAvKlxuXG4gICAgaWZyYW1lIGRvbWFpbiByZXN0cmljdGlvbnMgcHJldmVudCBuYWl2ZSBkZXNpZ24gOi0oXG5cbiAgICBjb25zdCBvYmogPSBpZnJhbWVSZWYuY3VycmVudDtcbiAgICBpZiAob2JqKSB7XG4gICAgICBzZXRJZnJhbWVIZWlnaHQob2JqLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgKyAncHgnKTtcbiAgICB9XG5cbiAgICAqL1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBzdHlsZT17e2hlaWdodDogaWZyYW1lSGVpZ2h0fX1cbiAgICAvLyByZWY9e2lmcmFtZVJlZn1cbiAgICA8aWZyYW1lIHNyYz17c3JjfSB0aXRsZT17dGl0bGV9IG9uTG9hZD17b25Mb2FkfSAvPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/IframeReact/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/abandonedChannelPreview/index.js": -/*!********************************************************!*\ - !*** ../ui/component/abandonedChannelPreview/index.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/abandonedChannelPreview/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doChannelUnsubscribe: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doChannelUnsubscribe\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2FiYW5kb25lZENoYW5uZWxQcmV2aWV3L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9hYmFuZG9uZWRDaGFubmVsUHJldmlldy9pbmRleC5qcz8wZTE4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0NoYW5uZWxVbnN1YnNjcmliZSB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgQWJhbmRvbmVkQ2hhbm5lbFByZXZpZXcgZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAge1xuICAgIGRvQ2hhbm5lbFVuc3Vic2NyaWJlLFxuICB9XG4pKEFiYW5kb25lZENoYW5uZWxQcmV2aWV3KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/abandonedChannelPreview/index.js\n"); - -/***/ }), - -/***/ "../ui/component/abandonedChannelPreview/view.jsx": -/*!********************************************************!*\ - !*** ../ui/component/abandonedChannelPreview/view.jsx ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _constants_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../constants/icons */ \"../ui/constants/icons.js\");\n\n\n\n\n\n\n\nfunction AbandonedChannelPreview(props) {\n var uri = props.uri,\n doChannelUnsubscribe = props.doChannelUnsubscribe,\n type = props.type;\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"parseURI\"])(uri),\n channelName = _parseURI.channelName;\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('claim-preview__wrapper', 'claim-preview__wrapper--notice')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('claim-preview', {\n 'claim-preview--large': type === 'large'\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview-metadata\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview-info\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__title\"\n }, channelName)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__subtitle\"\n }, __(\"This channel may have been unpublished.\"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n iconColor: \"red\",\n icon: _constants_icons__WEBPACK_IMPORTED_MODULE_5__[\"UNSUBSCRIBE\"],\n button: 'alt',\n label: __('Unfollow'),\n onClick: function onClick(e) {\n e.stopPropagation();\n doChannelUnsubscribe({\n channelName: \"@\".concat(channelName),\n uri: uri\n });\n }\n })))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AbandonedChannelPreview);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2FiYW5kb25lZENoYW5uZWxQcmV2aWV3L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9hYmFuZG9uZWRDaGFubmVsUHJldmlldy92aWV3LmpzeD9kYjQwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ2hhbm5lbFRodW1ibmFpbCBmcm9tICdjb21wb25lbnQvY2hhbm5lbFRodW1ibmFpbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJy4uLy4uL2NvbnN0YW50cy9pY29ucyc7XG5cbnR5cGUgU3Vic2NyaXB0aW9uQXJncyA9IHtcbiAgY2hhbm5lbE5hbWU6IHN0cmluZyxcbiAgdXJpOiBzdHJpbmcsXG59O1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgZG9DaGFubmVsVW5zdWJzY3JpYmU6IFN1YnNjcmlwdGlvbkFyZ3MgPT4gdm9pZCxcbiAgdHlwZTogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gQWJhbmRvbmVkQ2hhbm5lbFByZXZpZXcocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCBkb0NoYW5uZWxVbnN1YnNjcmliZSwgdHlwZSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgY2hhbm5lbE5hbWUgfSA9IHBhcnNlVVJJKHVyaSk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1wcmV2aWV3X193cmFwcGVyJywgJ2NsYWltLXByZXZpZXdfX3dyYXBwZXItLW5vdGljZScpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1wcmV2aWV3JywgeyAnY2xhaW0tcHJldmlldy0tbGFyZ2UnOiB0eXBlID09PSAnbGFyZ2UnIH0pfT5cbiAgICAgICAgPENoYW5uZWxUaHVtYm5haWwgdXJpPXt1cml9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlld19fdGV4dFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlldy1tZXRhZGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3LWluZm9cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3X190aXRsZVwiPntjaGFubmVsTmFtZX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9fc3VidGl0bGVcIj57X18oYFRoaXMgY2hhbm5lbCBtYXkgaGF2ZSBiZWVuIHVucHVibGlzaGVkLmApfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlld19fYWN0aW9uc1wiPlxuICAgICAgICAgICAgey8qIFN1YnNjcmliZUJ1dHRvbiB1c2VzIHJlc29sdmVkIHBlcm1hbmVudFVyaTsgbW9kaWZ5aW5nIGl0IGRpZG4ndCBzZWVtIHdvcnRoIGl0LiAqL31cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgaWNvbkNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuVU5TVUJTQ1JJQkV9XG4gICAgICAgICAgICAgIGJ1dHRvbj17J2FsdCd9XG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnVW5mb2xsb3cnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBkb0NoYW5uZWxVbnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBjaGFubmVsTmFtZTogYEAke2NoYW5uZWxOYW1lfWAsXG4gICAgICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFiYW5kb25lZENoYW5uZWxQcmV2aWV3O1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFYQTtBQWtCQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/abandonedChannelPreview/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/app/index.js": -/*!************************************!*\ - !*** ../ui/component/app/index.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_hot_loader_root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-hot-loader/root */ \"../node_modules/react-hot-loader/root.js\");\n/* harmony import */ var react_hot_loader_root__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_hot_loader_root__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./view */ \"../ui/component/app/view.jsx\");\n\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUser\"])(state),\n accessToken: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectAccessToken\"])(state),\n theme: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectThemePath\"])(state),\n language: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"LANGUAGE\"])(state),\n languages: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectLoadedLanguages\"])(state),\n autoUpdateDownloaded: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectAutoUpdateDownloaded\"])(state),\n isUpgradeAvailable: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectIsUpgradeAvailable\"])(state),\n syncEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"])(state),\n syncError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectGetSyncErrorMessage\"])(state),\n uploadCount: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUploadCount\"])(state),\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUnclaimedRewards\"])(state),\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n analyticsTagSync: function analyticsTagSync() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doAnalyticsTagSync\"])());\n },\n fetchTransactions: function fetchTransactions(page, pageSize) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"doFetchTransactions\"])(page, pageSize));\n },\n fetchAccessToken: function fetchAccessToken() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doFetchAccessToken\"])());\n },\n fetchChannelListMine: function fetchChannelListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"doFetchChannelListMine\"])());\n },\n setLanguage: function setLanguage(language) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_7__[\"doSetLanguage\"])(language));\n },\n signIn: function signIn() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doSignIn\"])());\n },\n requestDownloadUpgrade: function requestDownloadUpgrade() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doDownloadUpgradeRequested\"])());\n },\n checkSync: function checkSync() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doSyncWithPreferences\"])());\n },\n updatePreferences: function updatePreferences() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doGetAndPopulatePreferences\"])());\n },\n setReferrer: function setReferrer(referrer, doClaim) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doUserSetReferrer\"])(referrer, doClaim));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_hot_loader_root__WEBPACK_IMPORTED_MODULE_1__[\"hot\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_2__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_9__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2FwcC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvYXBwL2luZGV4LmpzP2NkZmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCB7IGhvdCB9IGZyb20gJ3JlYWN0LWhvdC1sb2FkZXIvcm9vdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgc2VsZWN0VXNlcixcbiAgc2VsZWN0QWNjZXNzVG9rZW4sXG4gIGRvRmV0Y2hBY2Nlc3NUb2tlbixcbiAgc2VsZWN0R2V0U3luY0Vycm9yTWVzc2FnZSxcbiAgc2VsZWN0VXBsb2FkQ291bnQsXG4gIHNlbGVjdFVuY2xhaW1lZFJld2FyZHMsXG4gIGRvVXNlclNldFJlZmVycmVyLFxuICBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbCxcbn0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBkb0ZldGNoVHJhbnNhY3Rpb25zLCBkb0ZldGNoQ2hhbm5lbExpc3RNaW5lIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZywgc2VsZWN0TG9hZGVkTGFuZ3VhZ2VzLCBzZWxlY3RUaGVtZVBhdGggfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgc2VsZWN0SXNVcGdyYWRlQXZhaWxhYmxlLCBzZWxlY3RBdXRvVXBkYXRlRG93bmxvYWRlZCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9hcHAnO1xuaW1wb3J0IHsgZG9TZXRMYW5ndWFnZSB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgZG9Eb3dubG9hZFVwZ3JhZGVSZXF1ZXN0ZWQsXG4gIGRvU2lnbkluLFxuICBkb1N5bmNXaXRoUHJlZmVyZW5jZXMsXG4gIGRvR2V0QW5kUG9wdWxhdGVQcmVmZXJlbmNlcyxcbiAgZG9BbmFseXRpY3NUYWdTeW5jLFxufSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgQXBwIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICBhY2Nlc3NUb2tlbjogc2VsZWN0QWNjZXNzVG9rZW4oc3RhdGUpLFxuICB0aGVtZTogc2VsZWN0VGhlbWVQYXRoKHN0YXRlKSxcbiAgbGFuZ3VhZ2U6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkxBTkdVQUdFKShzdGF0ZSksXG4gIGxhbmd1YWdlczogc2VsZWN0TG9hZGVkTGFuZ3VhZ2VzKHN0YXRlKSxcbiAgYXV0b1VwZGF0ZURvd25sb2FkZWQ6IHNlbGVjdEF1dG9VcGRhdGVEb3dubG9hZGVkKHN0YXRlKSxcbiAgaXNVcGdyYWRlQXZhaWxhYmxlOiBzZWxlY3RJc1VwZ3JhZGVBdmFpbGFibGUoc3RhdGUpLFxuICBzeW5jRW5hYmxlZDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuRU5BQkxFX1NZTkMpKHN0YXRlKSxcbiAgc3luY0Vycm9yOiBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlKHN0YXRlKSxcbiAgdXBsb2FkQ291bnQ6IHNlbGVjdFVwbG9hZENvdW50KHN0YXRlKSxcbiAgcmV3YXJkczogc2VsZWN0VW5jbGFpbWVkUmV3YXJkcyhzdGF0ZSksXG4gIGlzQXV0aGVudGljYXRlZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBhbmFseXRpY3NUYWdTeW5jOiAoKSA9PiBkaXNwYXRjaChkb0FuYWx5dGljc1RhZ1N5bmMoKSksXG4gIGZldGNoVHJhbnNhY3Rpb25zOiAocGFnZSwgcGFnZVNpemUpID0+IGRpc3BhdGNoKGRvRmV0Y2hUcmFuc2FjdGlvbnMocGFnZSwgcGFnZVNpemUpKSxcbiAgZmV0Y2hBY2Nlc3NUb2tlbjogKCkgPT4gZGlzcGF0Y2goZG9GZXRjaEFjY2Vzc1Rva2VuKCkpLFxuICBmZXRjaENoYW5uZWxMaXN0TWluZTogKCkgPT4gZGlzcGF0Y2goZG9GZXRjaENoYW5uZWxMaXN0TWluZSgpKSxcbiAgc2V0TGFuZ3VhZ2U6IGxhbmd1YWdlID0+IGRpc3BhdGNoKGRvU2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpKSxcbiAgc2lnbkluOiAoKSA9PiBkaXNwYXRjaChkb1NpZ25JbigpKSxcbiAgcmVxdWVzdERvd25sb2FkVXBncmFkZTogKCkgPT4gZGlzcGF0Y2goZG9Eb3dubG9hZFVwZ3JhZGVSZXF1ZXN0ZWQoKSksXG4gIGNoZWNrU3luYzogKCkgPT4gZGlzcGF0Y2goZG9TeW5jV2l0aFByZWZlcmVuY2VzKCkpLFxuICB1cGRhdGVQcmVmZXJlbmNlczogKCkgPT4gZGlzcGF0Y2goZG9HZXRBbmRQb3B1bGF0ZVByZWZlcmVuY2VzKCkpLFxuICBzZXRSZWZlcnJlcjogKHJlZmVycmVyLCBkb0NsYWltKSA9PiBkaXNwYXRjaChkb1VzZXJTZXRSZWZlcnJlcihyZWZlcnJlciwgZG9DbGFpbSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdChjb25uZWN0KHNlbGVjdCwgcGVyZm9ybSkoQXBwKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBQUE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBSEE7QUFJQTtBQUFBO0FBSkE7QUFLQTtBQUFBO0FBTEE7QUFNQTtBQUFBO0FBTkE7QUFPQTtBQUFBO0FBUEE7QUFRQTtBQUFBO0FBUkE7QUFTQTtBQUFBO0FBVEE7QUFVQTtBQUFBO0FBQUE7QUFWQTtBQUFBO0FBQ0E7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/app/index.js\n"); - -/***/ }), - -/***/ "../ui/component/app/view.jsx": -/*!************************************!*\ - !*** ../ui/component/app/view.jsx ***! - \************************************/ -/*! exports provided: MAIN_WRAPPER_CLASS, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAIN_WRAPPER_CLASS\", function() { return MAIN_WRAPPER_CLASS; });\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_router_index__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/router/index */ \"../ui/component/router/index.js\");\n/* harmony import */ var modal_modalRouter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! modal/modalRouter */ \"../ui/modal/modalRouter/index.js\");\n/* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-modal */ \"../node_modules/react-modal/lib/index.js\");\n/* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var util_enhanced_layout__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! util/enhanced-layout */ \"../ui/util/enhanced-layout.js\");\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n/* harmony import */ var component_fileRenderFloating__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/fileRenderFloating */ \"../ui/component/fileRenderFloating/index.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var effects_use_previous__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! effects/use-previous */ \"../ui/effects/use-previous.js\");\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var lbrytv_component_openInAppLink__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! lbrytv/component/openInAppLink */ \"./component/openInAppLink/index.js\");\n/* harmony import */ var lbrytv_component_youtubeReferralWelcome__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! lbrytv/component/youtubeReferralWelcome */ \"./component/youtubeReferralWelcome/index.js\");\n/* harmony import */ var lbrytv_component_nag_degraded_performance__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! lbrytv/component/nag-degraded-performance */ \"./component/nag-degraded-performance.jsx\");\n/* harmony import */ var lbrytv_component_nag_data_collection__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! lbrytv/component/nag-data-collection */ \"./component/nag-data-collection.jsx\");\n/* harmony import */ var lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! lbrytv/effects/use-degraded-performance */ \"./effects/use-degraded-performance.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar MAIN_WRAPPER_CLASS = 'main-wrapper';\nvar SYNC_INTERVAL = 1000 * 60 * 5; // 5 minutes\n// button numbers pulled from https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n\nvar MOUSE_BACK_BTN = 3;\nvar MOUSE_FORWARD_BTN = 4;\n\nfunction App(props) {\n var theme = props.theme,\n fetchTransactions = props.fetchTransactions,\n user = props.user,\n fetchAccessToken = props.fetchAccessToken,\n fetchChannelListMine = props.fetchChannelListMine,\n signIn = props.signIn,\n autoUpdateDownloaded = props.autoUpdateDownloaded,\n isUpgradeAvailable = props.isUpgradeAvailable,\n requestDownloadUpgrade = props.requestDownloadUpgrade,\n syncEnabled = props.syncEnabled,\n checkSync = props.checkSync,\n uploadCount = props.uploadCount,\n history = props.history,\n syncError = props.syncError,\n language = props.language,\n languages = props.languages,\n setLanguage = props.setLanguage,\n updatePreferences = props.updatePreferences,\n rewards = props.rewards,\n setReferrer = props.setReferrer,\n analyticsTagSync = props.analyticsTagSync,\n isAuthenticated = props.isAuthenticated;\n var appRef = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useRef\"])();\n var isEnhancedLayout = Object(util_enhanced_layout__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n hasSignedIn = _useState2[0],\n setHasSignedIn = _useState2[1];\n\n var userId = user && user.id;\n var hasVerifiedEmail = user && user.has_verified_email;\n var isRewardApproved = user && user.is_reward_approved;\n var previousUserId = Object(effects_use_previous__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(userId);\n var previousHasVerifiedEmail = Object(effects_use_previous__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(hasVerifiedEmail);\n var previousRewardApproved = Object(effects_use_previous__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(isRewardApproved);\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_16__[\"default\"])('analytics-nag', true),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n showAnalyticsNag = _usePersistedState2[0],\n setShowAnalyticsNag = _usePersistedState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_OK\"]),\n _useState4 = _slicedToArray(_useState3, 2),\n lbryTvApiStatus = _useState4[0],\n setLbryTvApiStatus = _useState4[1];\n\n var _props$location = props.location,\n pathname = _props$location.pathname,\n hash = _props$location.hash,\n search = _props$location.search;\n var showUpgradeButton = autoUpdateDownloaded || process.platform === 'linux' && isUpgradeAvailable; // referral claiming\n\n var referredRewardAvailable = rewards && rewards.some(function (reward) {\n return reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_15__[\"rewards\"].TYPE_REFEREE;\n });\n var urlParams = new URLSearchParams(search);\n var rawReferrerParam = urlParams.get('r');\n var sanitizedReferrerParam = rawReferrerParam && rawReferrerParam.replace(':', '#');\n var shouldHideNag = pathname.startsWith(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"EMBED\"])) || pathname.startsWith(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH_VERIFY\"]));\n var uri;\n\n try {\n var newpath = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"buildURI\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"parseURI\"])(pathname.slice(1).replace(/:/g, '#')));\n uri = newpath + hash;\n } catch (e) {}\n\n function handleAnalyticsDismiss() {\n setShowAnalyticsNag(false);\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (!uploadCount) return;\n\n var handleBeforeUnload = function handleBeforeUnload(event) {\n event.preventDefault();\n event.returnValue = 'magic'; // without setting this to something it doesn't work\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n return function () {\n return window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [uploadCount]); // allows user to navigate history using the forward and backward buttons on a mouse\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n var handleForwardAndBackButtons = function handleForwardAndBackButtons(e) {\n switch (e.button) {\n case MOUSE_BACK_BTN:\n history.index > 0 && history.goBack();\n break;\n\n case MOUSE_FORWARD_BTN:\n history.index < history.length - 1 && history.goForward();\n break;\n }\n };\n\n window.addEventListener('mouseup', handleForwardAndBackButtons);\n return function () {\n return window.removeEventListener('mouseup', handleForwardAndBackButtons);\n };\n });\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (referredRewardAvailable && sanitizedReferrerParam && isRewardApproved) {\n setReferrer(sanitizedReferrerParam, true);\n } else if (referredRewardAvailable && sanitizedReferrerParam) {\n setReferrer(sanitizedReferrerParam, false);\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [sanitizedReferrerParam, isRewardApproved, referredRewardAvailable]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n var wrapperElement = appRef.current;\n\n if (wrapperElement) {\n react_modal__WEBPACK_IMPORTED_MODULE_7___default.a.setAppElement(wrapperElement);\n }\n\n fetchAccessToken();\n }, [appRef, fetchAccessToken, fetchChannelListMine, fetchTransactions]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n // $FlowFixMe\n document.documentElement.setAttribute('theme', theme);\n }, [theme]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (!languages.includes(language)) {\n setLanguage(language);\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [language, languages]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (previousUserId === undefined && userId) {\n analytics__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setUser(userId);\n }\n }, [previousUserId, userId]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n // Check that previousHasVerifiedEmail was not undefined instead of just not truthy\n // This ensures we don't fire the emailVerified event on the initial user fetch\n if (previousHasVerifiedEmail === false && hasVerifiedEmail) {\n analytics__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emailVerifiedEvent();\n }\n }, [previousHasVerifiedEmail, hasVerifiedEmail, signIn]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (previousRewardApproved === false && isRewardApproved) {\n analytics__WEBPACK_IMPORTED_MODULE_3__[\"default\"].rewardEligibleEvent();\n }\n }, [previousRewardApproved, isRewardApproved]); // Keep this at the end to ensure initial setup effects are run first\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n // Wait for balance to be populated on desktop so we know when we can begin syncing\n if (!hasSignedIn && hasVerifiedEmail) {\n signIn();\n setHasSignedIn(true);\n }\n }, [hasVerifiedEmail, signIn, hasSignedIn]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (hasVerifiedEmail && syncEnabled) {\n checkSync();\n analyticsTagSync();\n var syncInterval = setInterval(function () {\n checkSync();\n }, SYNC_INTERVAL);\n return function () {\n clearInterval(syncInterval);\n };\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [hasVerifiedEmail, syncEnabled, checkSync]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (syncError && isAuthenticated) {\n history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=\").concat(pathname));\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [syncError, pathname, isAuthenticated]);\n Object(lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"useDegradedPerformance\"])(setLbryTvApiStatus); // Require an internal-api user on lbry.tv\n // This also prevents the site from loading in the un-authed state while we wait for internal-apis to return for the first time\n // It's not needed on desktop since there is no un-authed state\n\n if (!user) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(MAIN_WRAPPER_CLASS, {}),\n ref: appRef,\n onContextMenu: true ? undefined : undefined\n }, true && lbryTvApiStatus === lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_DOWN\"] ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"main--empty\",\n title: __('lbry.tv is currently down'),\n subtitle: __('My wheel broke, but the good news is that someone from LBRY is working on it.')\n }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_router_index__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(modal_modalRouter__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_fileRenderFloating__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n pageUri: uri\n }), isEnhancedLayout && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"yrbl--enhanced\"\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(lbrytv_component_youtubeReferralWelcome__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null), !shouldHideNag && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(lbrytv_component_openInAppLink__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n uri: uri\n }), (lbryTvApiStatus === lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_DEGRADED\"] || lbryTvApiStatus === lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_FAILING\"]) && !shouldHideNag && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(lbrytv_component_nag_degraded_performance__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n onClose: function onClose() {\n return setLbryTvApiStatus(lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_OK\"]);\n }\n }), lbryTvApiStatus === lbrytv_effects_use_degraded_performance__WEBPACK_IMPORTED_MODULE_21__[\"STATUS_OK\"] && showAnalyticsNag && !shouldHideNag && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(lbrytv_component_nag_data_collection__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n onClose: handleAnalyticsDismiss\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_12__[\"withRouter\"])(App));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2FwcC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvYXBwL3ZpZXcuanN4P2JkNzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgeyBidWlsZFVSSSwgcGFyc2VVUkksIFRYX0xJU1QgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnY29tcG9uZW50L3JvdXRlci9pbmRleCc7XG5pbXBvcnQgTW9kYWxSb3V0ZXIgZnJvbSAnbW9kYWwvbW9kYWxSb3V0ZXInO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IHsgb3BlbkNvbnRleHRNZW51IH0gZnJvbSAndXRpbC9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHVzZUtvbmFtaUxpc3RlbmVyIGZyb20gJ3V0aWwvZW5oYW5jZWQtbGF5b3V0JztcbmltcG9ydCBZcmJsIGZyb20gJ2NvbXBvbmVudC95cmJsJztcbmltcG9ydCBGaWxlUmVuZGVyRmxvYXRpbmcgZnJvbSAnY29tcG9uZW50L2ZpbGVSZW5kZXJGbG9hdGluZyc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB1c2VQcmV2aW91cyBmcm9tICdlZmZlY3RzL3VzZS1wcmV2aW91cyc7XG5pbXBvcnQgTmFnIGZyb20gJ2NvbXBvbmVudC9jb21tb24vbmFnJztcbmltcG9ydCB7IHJld2FyZHMgYXMgUkVXQVJEUyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5pbXBvcnQgT3BlbkluQXBwTGluayBmcm9tICdsYnJ5dHYvY29tcG9uZW50L29wZW5JbkFwcExpbmsnO1xuaW1wb3J0IFlvdXR1YmVXZWxjb21lIGZyb20gJ2xicnl0di9jb21wb25lbnQveW91dHViZVJlZmVycmFsV2VsY29tZSc7XG5pbXBvcnQgTmFnRGVncmFkZWRQZXJmb3JtYW5jZSBmcm9tICdsYnJ5dHYvY29tcG9uZW50L25hZy1kZWdyYWRlZC1wZXJmb3JtYW5jZSc7XG5pbXBvcnQgTmFnRGF0YUNvbGxlY3Rpb24gZnJvbSAnbGJyeXR2L2NvbXBvbmVudC9uYWctZGF0YS1jb2xsZWN0aW9uJztcbmltcG9ydCB7XG4gIHVzZURlZ3JhZGVkUGVyZm9ybWFuY2UsXG4gIFNUQVRVU19PSyxcbiAgU1RBVFVTX0RFR1JBREVELFxuICBTVEFUVVNfRkFJTElORyxcbiAgU1RBVFVTX0RPV04sXG59IGZyb20gJ2xicnl0di9lZmZlY3RzL3VzZS1kZWdyYWRlZC1wZXJmb3JtYW5jZSc7XG5leHBvcnQgY29uc3QgTUFJTl9XUkFQUEVSX0NMQVNTID0gJ21haW4td3JhcHBlcic7XG5jb25zdCBTWU5DX0lOVEVSVkFMID0gMTAwMCAqIDYwICogNTsgLy8gNSBtaW51dGVzXG5cbi8vIGJ1dHRvbiBudW1iZXJzIHB1bGxlZCBmcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L2J1dHRvblxuY29uc3QgTU9VU0VfQkFDS19CVE4gPSAzO1xuY29uc3QgTU9VU0VfRk9SV0FSRF9CVE4gPSA0O1xuXG50eXBlIFByb3BzID0ge1xuICBhbGVydEVycm9yOiAoc3RyaW5nIHwge30pID0+IHZvaWQsXG4gIHBhZ2VUaXRsZTogP3N0cmluZyxcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgbGFuZ3VhZ2VzOiBBcnJheTxzdHJpbmc+LFxuICB0aGVtZTogc3RyaW5nLFxuICB1c2VyOiA/eyBpZDogc3RyaW5nLCBoYXNfdmVyaWZpZWRfZW1haWw6IGJvb2xlYW4sIGlzX3Jld2FyZF9hcHByb3ZlZDogYm9vbGVhbiB9LFxuICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nLCBoYXNoOiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nIH0sXG4gIGhpc3Rvcnk6IHtcbiAgICBnb0JhY2s6ICgpID0+IHZvaWQsXG4gICAgZ29Gb3J3YXJkOiAoKSA9PiB2b2lkLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgcHVzaDogc3RyaW5nID0+IHZvaWQsXG4gIH0sXG4gIGZldGNoVHJhbnNhY3Rpb25zOiAobnVtYmVyLCBudW1iZXIpID0+IHZvaWQsXG4gIGZldGNoQWNjZXNzVG9rZW46ICgpID0+IHZvaWQsXG4gIGZldGNoQ2hhbm5lbExpc3RNaW5lOiAoKSA9PiB2b2lkLFxuICBzaWduSW46ICgpID0+IHZvaWQsXG4gIHJlcXVlc3REb3dubG9hZFVwZ3JhZGU6ICgpID0+IHZvaWQsXG4gIG9uU2lnbmVkSW46ICgpID0+IHZvaWQsXG4gIHNldExhbmd1YWdlOiBzdHJpbmcgPT4gdm9pZCxcbiAgaXNVcGdyYWRlQXZhaWxhYmxlOiBib29sZWFuLFxuICBhdXRvVXBkYXRlRG93bmxvYWRlZDogYm9vbGVhbixcbiAgY2hlY2tTeW5jOiAoKSA9PiB2b2lkLFxuICB1cGRhdGVQcmVmZXJlbmNlczogKCkgPT4gdm9pZCxcbiAgc3luY0VuYWJsZWQ6IGJvb2xlYW4sXG4gIHVwbG9hZENvdW50OiBudW1iZXIsXG4gIGJhbGFuY2U6ID9udW1iZXIsXG4gIHN5bmNFcnJvcjogP3N0cmluZyxcbiAgcmV3YXJkczogQXJyYXk8UmV3YXJkPixcbiAgc2V0UmVmZXJyZXI6IChzdHJpbmcsIGJvb2xlYW4pID0+IHZvaWQsXG4gIGFuYWx5dGljc1RhZ1N5bmM6ICgpID0+IHZvaWQsXG4gIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIEFwcChwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lLFxuICAgIGZldGNoVHJhbnNhY3Rpb25zLFxuICAgIHVzZXIsXG4gICAgZmV0Y2hBY2Nlc3NUb2tlbixcbiAgICBmZXRjaENoYW5uZWxMaXN0TWluZSxcbiAgICBzaWduSW4sXG4gICAgYXV0b1VwZGF0ZURvd25sb2FkZWQsXG4gICAgaXNVcGdyYWRlQXZhaWxhYmxlLFxuICAgIHJlcXVlc3REb3dubG9hZFVwZ3JhZGUsXG4gICAgc3luY0VuYWJsZWQsXG4gICAgY2hlY2tTeW5jLFxuICAgIHVwbG9hZENvdW50LFxuICAgIGhpc3RvcnksXG4gICAgc3luY0Vycm9yLFxuICAgIGxhbmd1YWdlLFxuICAgIGxhbmd1YWdlcyxcbiAgICBzZXRMYW5ndWFnZSxcbiAgICB1cGRhdGVQcmVmZXJlbmNlcyxcbiAgICByZXdhcmRzLFxuICAgIHNldFJlZmVycmVyLFxuICAgIGFuYWx5dGljc1RhZ1N5bmMsXG4gICAgaXNBdXRoZW50aWNhdGVkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgYXBwUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGlzRW5oYW5jZWRMYXlvdXQgPSB1c2VLb25hbWlMaXN0ZW5lcigpO1xuICBjb25zdCBbaGFzU2lnbmVkSW4sIHNldEhhc1NpZ25lZEluXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdXNlcklkID0gdXNlciAmJiB1c2VyLmlkO1xuICBjb25zdCBoYXNWZXJpZmllZEVtYWlsID0gdXNlciAmJiB1c2VyLmhhc192ZXJpZmllZF9lbWFpbDtcbiAgY29uc3QgaXNSZXdhcmRBcHByb3ZlZCA9IHVzZXIgJiYgdXNlci5pc19yZXdhcmRfYXBwcm92ZWQ7XG4gIGNvbnN0IHByZXZpb3VzVXNlcklkID0gdXNlUHJldmlvdXModXNlcklkKTtcbiAgY29uc3QgcHJldmlvdXNIYXNWZXJpZmllZEVtYWlsID0gdXNlUHJldmlvdXMoaGFzVmVyaWZpZWRFbWFpbCk7XG4gIGNvbnN0IHByZXZpb3VzUmV3YXJkQXBwcm92ZWQgPSB1c2VQcmV2aW91cyhpc1Jld2FyZEFwcHJvdmVkKTtcbiAgY29uc3QgW3Nob3dBbmFseXRpY3NOYWcsIHNldFNob3dBbmFseXRpY3NOYWddID0gdXNlUGVyc2lzdGVkU3RhdGUoJ2FuYWx5dGljcy1uYWcnLCB0cnVlKTtcbiAgY29uc3QgW2xicnlUdkFwaVN0YXR1cywgc2V0TGJyeVR2QXBpU3RhdHVzXSA9IHVzZVN0YXRlKFNUQVRVU19PSyk7XG4gIGNvbnN0IHsgcGF0aG5hbWUsIGhhc2gsIHNlYXJjaCB9ID0gcHJvcHMubG9jYXRpb247XG4gIGNvbnN0IHNob3dVcGdyYWRlQnV0dG9uID0gYXV0b1VwZGF0ZURvd25sb2FkZWQgfHwgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcgJiYgaXNVcGdyYWRlQXZhaWxhYmxlKTtcbiAgLy8gcmVmZXJyYWwgY2xhaW1pbmdcbiAgY29uc3QgcmVmZXJyZWRSZXdhcmRBdmFpbGFibGUgPSByZXdhcmRzICYmIHJld2FyZHMuc29tZShyZXdhcmQgPT4gcmV3YXJkLnJld2FyZF90eXBlID09PSBSRVdBUkRTLlRZUEVfUkVGRVJFRSk7XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgcmF3UmVmZXJyZXJQYXJhbSA9IHVybFBhcmFtcy5nZXQoJ3InKTtcbiAgY29uc3Qgc2FuaXRpemVkUmVmZXJyZXJQYXJhbSA9IHJhd1JlZmVycmVyUGFyYW0gJiYgcmF3UmVmZXJyZXJQYXJhbS5yZXBsYWNlKCc6JywgJyMnKTtcbiAgY29uc3Qgc2hvdWxkSGlkZU5hZyA9IHBhdGhuYW1lLnN0YXJ0c1dpdGgoYC8kLyR7UEFHRVMuRU1CRUR9YCkgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChgLyQvJHtQQUdFUy5BVVRIX1ZFUklGWX1gKTtcblxuICBsZXQgdXJpO1xuICB0cnkge1xuICAgIGNvbnN0IG5ld3BhdGggPSBidWlsZFVSSShwYXJzZVVSSShwYXRobmFtZS5zbGljZSgxKS5yZXBsYWNlKC86L2csICcjJykpKTtcbiAgICB1cmkgPSBuZXdwYXRoICsgaGFzaDtcbiAgfSBjYXRjaCAoZSkge31cblxuICBmdW5jdGlvbiBoYW5kbGVBbmFseXRpY3NEaXNtaXNzKCkge1xuICAgIHNldFNob3dBbmFseXRpY3NOYWcoZmFsc2UpO1xuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXVwbG9hZENvdW50KSByZXR1cm47XG4gICAgY29uc3QgaGFuZGxlQmVmb3JlVW5sb2FkID0gZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gJ21hZ2ljJzsgLy8gd2l0aG91dCBzZXR0aW5nIHRoaXMgdG8gc29tZXRoaW5nIGl0IGRvZXNuJ3Qgd29ya1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGhhbmRsZUJlZm9yZVVubG9hZCk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpO1xuICB9LCBbdXBsb2FkQ291bnRdKTtcblxuICAvLyBhbGxvd3MgdXNlciB0byBuYXZpZ2F0ZSBoaXN0b3J5IHVzaW5nIHRoZSBmb3J3YXJkIGFuZCBiYWNrd2FyZCBidXR0b25zIG9uIGEgbW91c2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVGb3J3YXJkQW5kQmFja0J1dHRvbnMgPSBlID0+IHtcbiAgICAgIHN3aXRjaCAoZS5idXR0b24pIHtcbiAgICAgICAgY2FzZSBNT1VTRV9CQUNLX0JUTjpcbiAgICAgICAgICBoaXN0b3J5LmluZGV4ID4gMCAmJiBoaXN0b3J5LmdvQmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE1PVVNFX0ZPUldBUkRfQlROOlxuICAgICAgICAgIGhpc3RvcnkuaW5kZXggPCBoaXN0b3J5Lmxlbmd0aCAtIDEgJiYgaGlzdG9yeS5nb0ZvcndhcmQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlRm9yd2FyZEFuZEJhY2tCdXR0b25zKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVGb3J3YXJkQW5kQmFja0J1dHRvbnMpO1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWZlcnJlZFJld2FyZEF2YWlsYWJsZSAmJiBzYW5pdGl6ZWRSZWZlcnJlclBhcmFtICYmIGlzUmV3YXJkQXBwcm92ZWQpIHtcbiAgICAgIHNldFJlZmVycmVyKHNhbml0aXplZFJlZmVycmVyUGFyYW0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAocmVmZXJyZWRSZXdhcmRBdmFpbGFibGUgJiYgc2FuaXRpemVkUmVmZXJyZXJQYXJhbSkge1xuICAgICAgc2V0UmVmZXJyZXIoc2FuaXRpemVkUmVmZXJyZXJQYXJhbSwgZmFsc2UpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtzYW5pdGl6ZWRSZWZlcnJlclBhcmFtLCBpc1Jld2FyZEFwcHJvdmVkLCByZWZlcnJlZFJld2FyZEF2YWlsYWJsZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50OiB3cmFwcGVyRWxlbWVudCB9ID0gYXBwUmVmO1xuICAgIGlmICh3cmFwcGVyRWxlbWVudCkge1xuICAgICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KHdyYXBwZXJFbGVtZW50KTtcbiAgICB9XG4gICAgZmV0Y2hBY2Nlc3NUb2tlbigpO1xuXG4gIH0sIFthcHBSZWYsIGZldGNoQWNjZXNzVG9rZW4sIGZldGNoQ2hhbm5lbExpc3RNaW5lLCBmZXRjaFRyYW5zYWN0aW9uc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RoZW1lJywgdGhlbWUpO1xuICB9LCBbdGhlbWVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtsYW5ndWFnZSwgbGFuZ3VhZ2VzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlvdXNVc2VySWQgPT09IHVuZGVmaW5lZCAmJiB1c2VySWQpIHtcbiAgICAgIGFuYWx5dGljcy5zZXRVc2VyKHVzZXJJZCk7XG4gICAgfVxuICB9LCBbcHJldmlvdXNVc2VySWQsIHVzZXJJZF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQ2hlY2sgdGhhdCBwcmV2aW91c0hhc1ZlcmlmaWVkRW1haWwgd2FzIG5vdCB1bmRlZmluZWQgaW5zdGVhZCBvZiBqdXN0IG5vdCB0cnV0aHlcbiAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZG9uJ3QgZmlyZSB0aGUgZW1haWxWZXJpZmllZCBldmVudCBvbiB0aGUgaW5pdGlhbCB1c2VyIGZldGNoXG4gICAgaWYgKHByZXZpb3VzSGFzVmVyaWZpZWRFbWFpbCA9PT0gZmFsc2UgJiYgaGFzVmVyaWZpZWRFbWFpbCkge1xuICAgICAgYW5hbHl0aWNzLmVtYWlsVmVyaWZpZWRFdmVudCgpO1xuICAgIH1cbiAgfSwgW3ByZXZpb3VzSGFzVmVyaWZpZWRFbWFpbCwgaGFzVmVyaWZpZWRFbWFpbCwgc2lnbkluXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmlvdXNSZXdhcmRBcHByb3ZlZCA9PT0gZmFsc2UgJiYgaXNSZXdhcmRBcHByb3ZlZCkge1xuICAgICAgYW5hbHl0aWNzLnJld2FyZEVsaWdpYmxlRXZlbnQoKTtcbiAgICB9XG4gIH0sIFtwcmV2aW91c1Jld2FyZEFwcHJvdmVkLCBpc1Jld2FyZEFwcHJvdmVkXSk7XG5cbiAgLy8gS2VlcCB0aGlzIGF0IHRoZSBlbmQgdG8gZW5zdXJlIGluaXRpYWwgc2V0dXAgZWZmZWN0cyBhcmUgcnVuIGZpcnN0XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgYmFsYW5jZSB0byBiZSBwb3B1bGF0ZWQgb24gZGVza3RvcCBzbyB3ZSBrbm93IHdoZW4gd2UgY2FuIGJlZ2luIHN5bmNpbmdcbiAgICBpZiAoIWhhc1NpZ25lZEluICYmIGhhc1ZlcmlmaWVkRW1haWwpIHtcbiAgICAgIHNpZ25JbigpO1xuICAgICAgc2V0SGFzU2lnbmVkSW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbaGFzVmVyaWZpZWRFbWFpbCwgc2lnbkluLCBoYXNTaWduZWRJbl0pO1xuXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzVmVyaWZpZWRFbWFpbCAmJiBzeW5jRW5hYmxlZCkge1xuICAgICAgY2hlY2tTeW5jKCk7XG4gICAgICBhbmFseXRpY3NUYWdTeW5jKCk7XG4gICAgICBsZXQgc3luY0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBjaGVja1N5bmMoKTtcbiAgICAgIH0sIFNZTkNfSU5URVJWQUwpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhckludGVydmFsKHN5bmNJbnRlcnZhbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtoYXNWZXJpZmllZEVtYWlsLCBzeW5jRW5hYmxlZCwgY2hlY2tTeW5jXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3luY0Vycm9yICYmIGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgaGlzdG9yeS5wdXNoKGAvJC8ke1BBR0VTLkFVVEh9P3JlZGlyZWN0PSR7cGF0aG5hbWV9YCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3N5bmNFcnJvciwgcGF0aG5hbWUsIGlzQXV0aGVudGljYXRlZF0pO1xuXG4gIHVzZURlZ3JhZGVkUGVyZm9ybWFuY2Uoc2V0TGJyeVR2QXBpU3RhdHVzKTtcblxuICAvLyBSZXF1aXJlIGFuIGludGVybmFsLWFwaSB1c2VyIG9uIGxicnkudHZcbiAgLy8gVGhpcyBhbHNvIHByZXZlbnRzIHRoZSBzaXRlIGZyb20gbG9hZGluZyBpbiB0aGUgdW4tYXV0aGVkIHN0YXRlIHdoaWxlIHdlIHdhaXQgZm9yIGludGVybmFsLWFwaXMgdG8gcmV0dXJuIGZvciB0aGUgZmlyc3QgdGltZVxuICAvLyBJdCdzIG5vdCBuZWVkZWQgb24gZGVza3RvcCBzaW5jZSB0aGVyZSBpcyBubyB1bi1hdXRoZWQgc3RhdGVcbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhNQUlOX1dSQVBQRVJfQ0xBU1MsIHtcbiAgICAgIH0pfVxuICAgICAgcmVmPXthcHBSZWZ9XG4gICAgICBvbkNvbnRleHRNZW51PXtJU19XRUIgPyB1bmRlZmluZWQgOiBlID0+IG9wZW5Db250ZXh0TWVudShlKX1cbiAgICA+XG4gICAgICB7SVNfV0VCICYmIGxicnlUdkFwaVN0YXR1cyA9PT0gU1RBVFVTX0RPV04gPyAoXG4gICAgICAgIDxZcmJsXG4gICAgICAgICAgY2xhc3NOYW1lPVwibWFpbi0tZW1wdHlcIlxuICAgICAgICAgIHRpdGxlPXtfXygnbGJyeS50diBpcyBjdXJyZW50bHkgZG93bicpfVxuICAgICAgICAgIHN1YnRpdGxlPXtfXygnTXkgd2hlZWwgYnJva2UsIGJ1dCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgc29tZW9uZSBmcm9tIExCUlkgaXMgd29ya2luZyBvbiBpdC4nKX1cbiAgICAgICAgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8Um91dGVyIC8+XG4gICAgICAgICAgPE1vZGFsUm91dGVyIC8+XG4gICAgICAgICAgPEZpbGVSZW5kZXJGbG9hdGluZyBwYWdlVXJpPXt1cml9IC8+XG4gICAgICAgICAge2lzRW5oYW5jZWRMYXlvdXQgJiYgPFlyYmwgY2xhc3NOYW1lPVwieXJibC0tZW5oYW5jZWRcIiAvPn1cblxuICAgICAgICAgIHt9XG5cbiAgICAgICAgICB7fVxuICAgICAgICAgIDxZb3V0dWJlV2VsY29tZSAvPlxuICAgICAgICAgIHshc2hvdWxkSGlkZU5hZyAmJiA8T3BlbkluQXBwTGluayB1cmk9e3VyaX0gLz59XG4gICAgICAgICAgeyhsYnJ5VHZBcGlTdGF0dXMgPT09IFNUQVRVU19ERUdSQURFRCB8fCBsYnJ5VHZBcGlTdGF0dXMgPT09IFNUQVRVU19GQUlMSU5HKSAmJiAhc2hvdWxkSGlkZU5hZyAmJiAoXG4gICAgICAgICAgICA8TmFnRGVncmFkZWRQZXJmb3JtYW5jZSBvbkNsb3NlPXsoKSA9PiBzZXRMYnJ5VHZBcGlTdGF0dXMoU1RBVFVTX09LKX0gLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsYnJ5VHZBcGlTdGF0dXMgPT09IFNUQVRVU19PSyAmJiBzaG93QW5hbHl0aWNzTmFnICYmICFzaG91bGRIaWRlTmFnICYmIChcbiAgICAgICAgICAgIDxOYWdEYXRhQ29sbGVjdGlvbiBvbkNsb3NlPXtoYW5kbGVBbmFseXRpY3NEaXNtaXNzfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge31cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoQXBwKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEJBO0FBQ0E7QUFDQTtBQTVCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFzQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQVBBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQU5BO0FBREE7QUFDQTtBQVNBO0FBQ0E7QUFBQTtBQUFBO0FBWkE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBSkE7QUFDQTtBQURBO0FBU0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBU0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBUkE7QUFDQTtBQURBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQURBO0FBT0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLGdEQUFBO0FBSkE7QUFRQTtBQUNBO0FBQ0E7QUFIQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/app/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/autoplayCountdown/index.js": -/*!**************************************************!*\ - !*** ../ui/component/autoplayCountdown/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/autoplayCountdown/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var nextRecommendedUri = Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectNextUnplayedRecommended\"])(props.uri)(state);\n return {\n nextRecommendedUri: nextRecommendedUri,\n nextRecommendedClaim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(nextRecommendedUri)(state),\n autoplay: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"AUTOPLAY\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setPlayingUri: function setPlayingUri(uri) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_5__[\"doSetPlayingUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2F1dG9wbGF5Q291bnRkb3duL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9hdXRvcGxheUNvdW50ZG93bi9pbmRleC5qcz9mOGQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNFVFRJTkdTIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsYWltRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0TmV4dFVucGxheWVkUmVjb21tZW5kZWQgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvY29udGVudCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NldFBsYXlpbmdVcmkgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2NvbnRlbnQnO1xuaW1wb3J0IFJlY29tbWVuZGVkVmlkZW9zIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgY29uc3QgbmV4dFJlY29tbWVuZGVkVXJpID0gbWFrZVNlbGVjdE5leHRVbnBsYXllZFJlY29tbWVuZGVkKHByb3BzLnVyaSkoc3RhdGUpO1xuICByZXR1cm4ge1xuICAgIG5leHRSZWNvbW1lbmRlZFVyaSxcbiAgICBuZXh0UmVjb21tZW5kZWRDbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKG5leHRSZWNvbW1lbmRlZFVyaSkoc3RhdGUpLFxuICAgIGF1dG9wbGF5OiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPUExBWSkoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNldFBsYXlpbmdVcmk6IHVyaSA9PiBkaXNwYXRjaChkb1NldFBsYXlpbmdVcmkodXJpKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFJlY29tbWVuZGVkVmlkZW9zKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/autoplayCountdown/index.js\n"); - -/***/ }), - -/***/ "../ui/component/autoplayCountdown/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/autoplayCountdown/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\nfunction AutoplayCountdown(props) {\n var nextRecommendedUri = props.nextRecommendedUri,\n nextRecommendedClaim = props.nextRecommendedClaim,\n setPlayingUri = props.setPlayingUri,\n push = props.history.push;\n var nextTitle = nextRecommendedClaim && nextRecommendedClaim.value && nextRecommendedClaim.value.title;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(5),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n timer = _React$useState2[0],\n setTimer = _React$useState2[1];\n\n var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n timerCanceled = _React$useState4[0],\n setTimerCanceled = _React$useState4[1];\n\n var navigateUrl;\n\n if (nextTitle) {\n navigateUrl = Object(util_url__WEBPACK_IMPORTED_MODULE_4__[\"formatLbryUrlForWeb\"])(nextRecommendedUri);\n }\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n var interval;\n\n if (!timerCanceled) {\n interval = setInterval(function () {\n var newTime = timer - 1;\n\n if (newTime === 0) {\n // Set the playingUri to null so the app doesn't try to make a floating window with the video that just finished\n setPlayingUri(null);\n push(navigateUrl);\n } else {\n setTimer(timer - 1);\n }\n }, 1000);\n }\n\n return function () {\n clearInterval(interval);\n };\n }, [timer, navigateUrl, push, timerCanceled, setPlayingUri, nextRecommendedUri]);\n\n if (timerCanceled) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"video-overlay__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"video-overlay__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tokens: {\n channel: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n link: true,\n uri: nextRecommendedUri\n })\n }\n }, \"Up Next by %channel%\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"video-overlay__title\"\n }, nextTitle), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"video-overlay__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"video-overlay__subtitle\"\n }, __('Playing in %seconds_left% seconds', {\n seconds_left: timer\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions--centered\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n label: __('Cancel'),\n button: \"link\",\n onClick: function onClick() {\n return setTimerCanceled(true);\n }\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_5__[\"withRouter\"])(AutoplayCountdown));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2F1dG9wbGF5Q291bnRkb3duL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9hdXRvcGxheUNvdW50ZG93bi92aWV3LmpzeD8zMjkzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBVcmlJbmRpY2F0b3IgZnJvbSAnY29tcG9uZW50L3VyaUluZGljYXRvcic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcbmltcG9ydCB7IGZvcm1hdExicnlVcmxGb3JXZWIgfSBmcm9tICd1dGlsL3VybCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeTogeyBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBuZXh0UmVjb21tZW5kZWRDbGFpbTogP1N0cmVhbUNsYWltLFxuICBuZXh0UmVjb21tZW5kZWRVcmk6IHN0cmluZyxcbiAgc2V0UGxheWluZ1VyaTogKHN0cmluZyB8IG51bGwpID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBBdXRvcGxheUNvdW50ZG93bihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG5leHRSZWNvbW1lbmRlZFVyaSxcbiAgICBuZXh0UmVjb21tZW5kZWRDbGFpbSxcbiAgICBzZXRQbGF5aW5nVXJpLFxuICAgIGhpc3Rvcnk6IHsgcHVzaCB9LFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG5leHRUaXRsZSA9IG5leHRSZWNvbW1lbmRlZENsYWltICYmIG5leHRSZWNvbW1lbmRlZENsYWltLnZhbHVlICYmIG5leHRSZWNvbW1lbmRlZENsYWltLnZhbHVlLnRpdGxlO1xuICBjb25zdCBbdGltZXIsIHNldFRpbWVyXSA9IFJlYWN0LnVzZVN0YXRlKDUpO1xuICBjb25zdCBbdGltZXJDYW5jZWxlZCwgc2V0VGltZXJDYW5jZWxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgbGV0IG5hdmlnYXRlVXJsO1xuICBpZiAobmV4dFRpdGxlKSB7XG4gICAgbmF2aWdhdGVVcmwgPSBmb3JtYXRMYnJ5VXJsRm9yV2ViKG5leHRSZWNvbW1lbmRlZFVyaSk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBpbnRlcnZhbDtcbiAgICBpZiAoIXRpbWVyQ2FuY2VsZWQpIHtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdUaW1lID0gdGltZXIgLSAxO1xuICAgICAgICBpZiAobmV3VGltZSA9PT0gMCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcGxheWluZ1VyaSB0byBudWxsIHNvIHRoZSBhcHAgZG9lc24ndCB0cnkgdG8gbWFrZSBhIGZsb2F0aW5nIHdpbmRvdyB3aXRoIHRoZSB2aWRlbyB0aGF0IGp1c3QgZmluaXNoZWRcbiAgICAgICAgICBzZXRQbGF5aW5nVXJpKG51bGwpO1xuICAgICAgICAgIHB1c2gobmF2aWdhdGVVcmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVyKHRpbWVyIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfTtcbiAgfSwgW3RpbWVyLCBuYXZpZ2F0ZVVybCwgcHVzaCwgdGltZXJDYW5jZWxlZCwgc2V0UGxheWluZ1VyaSwgbmV4dFJlY29tbWVuZGVkVXJpXSk7XG5cbiAgaWYgKHRpbWVyQ2FuY2VsZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlby1vdmVybGF5X193cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvLW92ZXJsYXlfX3N1YnRpdGxlXCI+XG4gICAgICAgIDxJMThuTWVzc2FnZSB0b2tlbnM9e3sgY2hhbm5lbDogPFVyaUluZGljYXRvciBsaW5rIHVyaT17bmV4dFJlY29tbWVuZGVkVXJpfSAvPiB9fT5cbiAgICAgICAgICBVcCBOZXh0IGJ5ICVjaGFubmVsJVxuICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvLW92ZXJsYXlfX3RpdGxlXCI+e25leHRUaXRsZX08L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlby1vdmVybGF5X19hY3Rpb25zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlkZW8tb3ZlcmxheV9fc3VidGl0bGVcIj5cbiAgICAgICAgICB7X18oJ1BsYXlpbmcgaW4gJXNlY29uZHNfbGVmdCUgc2Vjb25kcycsIHsgc2Vjb25kc19sZWZ0OiB0aW1lciB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9ucy0tY2VudGVyZWRcIj5cbiAgICAgICAgICA8QnV0dG9uIGxhYmVsPXtfXygnQ2FuY2VsJyl9IGJ1dHRvbj1cImxpbmtcIiBvbkNsaWNrPXsoKSA9PiBzZXRUaW1lckNhbmNlbGVkKHRydWUpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEF1dG9wbGF5Q291bnRkb3duKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQWRBO0FBQ0E7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/autoplayCountdown/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/blockButton/index.js": -/*!********************************************!*\ - !*** ../ui/component/blockButton/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/blockButton/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n channelIsBlocked: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectChannelIsBlocked\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n shortUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectShortUrlForUri\"])(props.uri)(state),\n permanentUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPermanentUrlForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n toggleBlockChannel: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToggleBlockChannel\"],\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2Jsb2NrQnV0dG9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9ibG9ja0J1dHRvbi9pbmRleC5qcz9kNzllIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBzZWxlY3RDaGFubmVsSXNCbG9ja2VkLFxuICBkb1RvZ2dsZUJsb2NrQ2hhbm5lbCxcbiAgZG9Ub2FzdCxcbiAgbWFrZVNlbGVjdENsYWltSXNNaW5lLFxuICBtYWtlU2VsZWN0U2hvcnRVcmxGb3JVcmksXG4gIG1ha2VTZWxlY3RQZXJtYW5lbnRVcmxGb3JVcmksXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEJsb2NrQnV0dG9uIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNoYW5uZWxJc0Jsb2NrZWQ6IHNlbGVjdENoYW5uZWxJc0Jsb2NrZWQocHJvcHMudXJpKShzdGF0ZSksXG4gIGNsYWltSXNNaW5lOiBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUocHJvcHMudXJpKShzdGF0ZSksXG4gIHNob3J0VXJsOiBtYWtlU2VsZWN0U2hvcnRVcmxGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHBlcm1hbmVudFVybDogbWFrZVNlbGVjdFBlcm1hbmVudFVybEZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHtcbiAgICB0b2dnbGVCbG9ja0NoYW5uZWw6IGRvVG9nZ2xlQmxvY2tDaGFubmVsLFxuICAgIGRvVG9hc3QsXG4gIH1cbikoQmxvY2tCdXR0b24pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUdBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/blockButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/blockButton/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/blockButton/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BlockButton; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_hover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-hover */ \"../ui/effects/use-hover.js\");\n\n\n\n\n\nfunction BlockButton(props) {\n var permanentUrl = props.permanentUrl,\n shortUrl = props.shortUrl,\n toggleBlockChannel = props.toggleBlockChannel,\n channelIsBlocked = props.channelIsBlocked,\n claimIsMine = props.claimIsMine,\n doToast = props.doToast;\n var blockRef = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"])();\n var isHovering = Object(effects_use_hover__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(blockRef);\n var blockLabel = channelIsBlocked ? __('Blocked') : __('Block');\n\n var blockedOverride = channelIsBlocked && isHovering && __('Unblock');\n\n return permanentUrl && !claimIsMine ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n ref: blockRef,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"BLOCK\"],\n button: 'alt',\n label: blockedOverride || blockLabel,\n requiresAuth: true,\n onClick: function onClick(e) {\n e.stopPropagation();\n\n if (!channelIsBlocked) {\n doToast({\n message: \"Blocked \".concat(shortUrl),\n linkText: 'Manage',\n linkTarget: \"/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"BLOCKED\"])\n });\n }\n\n toggleBlockChannel(permanentUrl);\n }\n }) : null;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2Jsb2NrQnV0dG9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9ibG9ja0J1dHRvbi92aWV3LmpzeD82YjBkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHVzZUhvdmVyIGZyb20gJ2VmZmVjdHMvdXNlLWhvdmVyJztcblxudHlwZSBQcm9wcyA9IHtcbiAgcGVybWFuZW50VXJsOiA/c3RyaW5nLFxuICBzaG9ydFVybDogc3RyaW5nLFxuICBpc1N1YnNjcmliZWQ6IGJvb2xlYW4sXG4gIHRvZ2dsZUJsb2NrQ2hhbm5lbDogKHVyaTogc3RyaW5nKSA9PiB2b2lkLFxuICBjaGFubmVsSXNCbG9ja2VkOiBib29sZWFuLFxuICBjbGFpbUlzTWluZTogYm9vbGVhbixcbiAgZG9Ub2FzdDogKHsgbWVzc2FnZTogc3RyaW5nLCBsaW5rVGV4dDogc3RyaW5nLCBsaW5rVGFyZ2V0OiBzdHJpbmcgfSkgPT4gdm9pZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJsb2NrQnV0dG9uKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHBlcm1hbmVudFVybCwgc2hvcnRVcmwsIHRvZ2dsZUJsb2NrQ2hhbm5lbCwgY2hhbm5lbElzQmxvY2tlZCwgY2xhaW1Jc01pbmUsIGRvVG9hc3QgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGJsb2NrUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGlzSG92ZXJpbmcgPSB1c2VIb3ZlcihibG9ja1JlZik7XG4gIGNvbnN0IGJsb2NrTGFiZWwgPSBjaGFubmVsSXNCbG9ja2VkID8gX18oJ0Jsb2NrZWQnKSA6IF9fKCdCbG9jaycpO1xuICBjb25zdCBibG9ja2VkT3ZlcnJpZGUgPSBjaGFubmVsSXNCbG9ja2VkICYmIGlzSG92ZXJpbmcgJiYgX18oJ1VuYmxvY2snKTtcblxuICByZXR1cm4gcGVybWFuZW50VXJsICYmICFjbGFpbUlzTWluZSA/IChcbiAgICA8QnV0dG9uXG4gICAgICByZWY9e2Jsb2NrUmVmfVxuICAgICAgaWNvbj17SUNPTlMuQkxPQ0t9XG4gICAgICBidXR0b249eydhbHQnfVxuICAgICAgbGFiZWw9e2Jsb2NrZWRPdmVycmlkZSB8fCBibG9ja0xhYmVsfVxuICAgICAgcmVxdWlyZXNBdXRoPXtJU19XRUJ9XG4gICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKCFjaGFubmVsSXNCbG9ja2VkKSB7XG4gICAgICAgICAgZG9Ub2FzdCh7IG1lc3NhZ2U6IGBCbG9ja2VkICR7c2hvcnRVcmx9YCwgbGlua1RleHQ6ICdNYW5hZ2UnLCBsaW5rVGFyZ2V0OiBgLyR7UEFHRVMuQkxPQ0tFRH1gIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9nZ2xlQmxvY2tDaGFubmVsKHBlcm1hbmVudFVybCk7XG4gICAgICB9fVxuICAgIC8+XG4gICkgOiBudWxsO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZ0JBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/blockButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/button/index.js": -/*!***************************************!*\ - !*** ../ui/component/button/index.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/component/button/view.jsx\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n\n\n\n\n\nvar mapStateToProps = function mapStateToProps(state) {\n return {\n pathname: state.router.location.pathname,\n emailVerified: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar ConnectedButton = Object(react_redux__WEBPACK_IMPORTED_MODULE_2__[\"connect\"])(mapStateToProps)(_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react__WEBPACK_IMPORTED_MODULE_1__[\"forwardRef\"])(function (props, ref) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ConnectedButton, _extends({}, props, {\n myref: ref\n }));\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2J1dHRvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvYnV0dG9uL2luZGV4LmpzP2I3NmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1dHRvbiBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gc3RhdGUgPT4gKHtcbiAgcGF0aG5hbWU6IHN0YXRlLnJvdXRlci5sb2NhdGlvbi5wYXRobmFtZSxcbiAgZW1haWxWZXJpZmllZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxufSk7XG5cbmNvbnN0IENvbm5lY3RlZEJ1dHRvbiA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShCdXR0b24pO1xuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiA8Q29ubmVjdGVkQnV0dG9uIHsuLi5wcm9wc30gbXlyZWY9e3JlZn0gLz4pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/button/index.js\n"); - -/***/ }), - -/***/ "../ui/component/button/view.jsx": -/*!***************************************!*\ - !*** ../ui/component/button/view.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_ga__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-ga */ \"../node_modules/react-ga/dist/esm/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var effects_use_combined_refs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! effects/use-combined-refs */ \"../ui/effects/use-combined-refs.js\");\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n // use forwardRef to allow consumers to pass refs to the button content if they want to\n// flow requires forwardRef have default type arguments passed to it\n\nvar Button = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function (props, ref) {\n var _props$type = props.type,\n type = _props$type === void 0 ? 'button' : _props$type,\n _onClick = props.onClick,\n href = props.href,\n title = props.title,\n label = props.label,\n icon = props.icon,\n iconRight = props.iconRight,\n disabled = props.disabled,\n children = props.children,\n navigate = props.navigate,\n className = props.className,\n description = props.description,\n button = props.button,\n iconSize = props.iconSize,\n iconColor = props.iconColor,\n activeClass = props.activeClass,\n emailVerified = props.emailVerified,\n requiresAuth = props.requiresAuth,\n myref = props.myref,\n dispatch = props.dispatch,\n pathname = props.pathname,\n otherProps = _objectWithoutProperties(props, [\"type\", \"onClick\", \"href\", \"title\", \"label\", \"icon\", \"iconRight\", \"disabled\", \"children\", \"navigate\", \"className\", \"description\", \"button\", \"iconSize\", \"iconColor\", \"activeClass\", \"emailVerified\", \"requiresAuth\", \"myref\", \"dispatch\", \"pathname\"]);\n\n var combinedClassName = classnames__WEBPACK_IMPORTED_MODULE_2___default()('button', button ? {\n 'button--primary': button === 'primary',\n 'button--secondary': button === 'secondary',\n 'button--alt': button === 'alt',\n 'button--inverse': button === 'inverse',\n 'button--close': button === 'close',\n 'button--disabled': disabled,\n 'button--link': button === 'link'\n } : 'button--no-style', className);\n var innerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var combinedRef = Object(effects_use_combined_refs__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(ref, innerRef, myref);\n var size = iconSize || !label && !children ? 18 : undefined; // Fall back to default\n\n var content = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"button__content\"\n }, icon && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n icon: icon,\n iconColor: iconColor,\n size: size\n }), label && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"button__label\"\n }, label), children && children, iconRight && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n icon: iconRight,\n iconColor: iconColor,\n size: size\n }));\n\n if (href) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_ga__WEBPACK_IMPORTED_MODULE_5__[\"OutboundLink\"], _extends({\n eventLabel: \"outboundClick\",\n to: href,\n target: \"_blank\",\n className: combinedClassName,\n onClick: _onClick\n }, otherProps), content);\n } // Handle lbry:// uris passed in, or already formatted web urls\n\n\n var path = navigate;\n\n if (path) {\n if (path.startsWith('lbry://')) {\n path = Object(util_url__WEBPACK_IMPORTED_MODULE_4__[\"formatLbryUrlForWeb\"])(path);\n } else if (!path.startsWith('/')) {\n // Force a leading slash so new paths aren't appended on to the current path\n path = \"/\".concat(path);\n }\n }\n\n if (requiresAuth && !emailVerified) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__[\"NavLink\"], {\n exact: true,\n onClick: function onClick(e) {\n e.stopPropagation();\n },\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_6__[\"AUTH\"], \"?redirect=\").concat(pathname),\n title: title,\n disabled: disabled,\n className: combinedClassName,\n activeClassName: activeClass\n }, content);\n }\n\n return path ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__[\"NavLink\"], _extends({\n exact: true,\n to: path,\n title: title,\n disabled: disabled,\n onClick: function onClick(e) {\n e.stopPropagation();\n\n if (_onClick) {\n _onClick();\n }\n },\n className: combinedClassName,\n activeClassName: activeClass\n }, otherProps), content) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", _extends({\n ref: combinedRef,\n title: title,\n \"aria-label\": description || label || title,\n className: combinedClassName,\n onClick: function onClick(e) {\n if (_onClick) {\n e.stopPropagation();\n\n _onClick(e);\n }\n },\n disabled: disabled,\n type: type\n }, otherProps), content);\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Button);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2J1dHRvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvYnV0dG9uL3ZpZXcuanN4P2NlZmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBOYXZMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuaW1wb3J0IHsgT3V0Ym91bmRMaW5rIH0gZnJvbSAncmVhY3QtZ2EnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCB1c2VDb21iaW5lZFJlZnMgZnJvbSAnZWZmZWN0cy91c2UtY29tYmluZWQtcmVmcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlkOiA/c3RyaW5nLFxuICBocmVmOiA/c3RyaW5nLFxuICB0aXRsZTogP3N0cmluZyxcbiAgbGFiZWw6ID9zdHJpbmcsXG4gIGljb246ID9zdHJpbmcsXG4gIGljb25SaWdodDogP3N0cmluZyxcbiAgZGlzYWJsZWQ6ID9ib29sZWFuLFxuICBjaGlsZHJlbjogP05vZGUsXG4gIG5hdmlnYXRlOiA/c3RyaW5nLFxuICBjbGFzc05hbWU6ID9zdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiA/c3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIGJ1dHRvbjogP3N0cmluZywgLy8gcHJpbWFyeSwgc2Vjb25kYXJ5LCBhbHQsIGxpbmtcbiAgaWNvblNpemU/OiBudW1iZXIsXG4gIGljb25Db2xvcj86IHN0cmluZyxcbiAgYWN0aXZlQ2xhc3M/OiBzdHJpbmcsXG4gIGlubmVyUmVmOiA/YW55LFxuICAvLyBFdmVudHNcbiAgb25DbGljazogPyhhbnkpID0+IGFueSxcbiAgb25Nb3VzZUVudGVyOiA/KGFueSkgPT4gYW55LFxuICBvbk1vdXNlTGVhdmU6ID8oYW55KSA9PiBhbnksXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIGVtYWlsVmVyaWZpZWQ6IGJvb2xlYW4sXG4gIHJlcXVpcmVzQXV0aDogP2Jvb2xlYW4sXG4gIG15cmVmOiBhbnksXG4gIGRpc3BhdGNoOiBhbnksXG59O1xuXG4vLyB1c2UgZm9yd2FyZFJlZiB0byBhbGxvdyBjb25zdW1lcnMgdG8gcGFzcyByZWZzIHRvIHRoZSBidXR0b24gY29udGVudCBpZiB0aGV5IHdhbnQgdG9cbi8vIGZsb3cgcmVxdWlyZXMgZm9yd2FyZFJlZiBoYXZlIGRlZmF1bHQgdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0XG5jb25zdCBCdXR0b24gPSBmb3J3YXJkUmVmPGFueSwge30+KChwcm9wczogUHJvcHMsIHJlZjogYW55KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0eXBlID0gJ2J1dHRvbicsXG4gICAgb25DbGljayxcbiAgICBocmVmLFxuICAgIHRpdGxlLFxuICAgIGxhYmVsLFxuICAgIGljb24sXG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGJlIHVzZWQuIFJlZ3VsYXIgYnV0dG9ucyBzaG91bGQganVzdCB1c2UgYGljb25gXG4gICAgLy8gYGljb25SaWdodGAgaXMgdXNlZCBmb3IgdGhlIGhlYWRlciAoaG9tZSkgYnV0dG9uIHdpdGggdGhlIExCUlkgaWNvbiBhbmQgZXh0ZXJuYWwgbGlua3MgdGhhdCBhcmUgZGlzcGxheWVkIGlubGluZVxuICAgIGljb25SaWdodCxcbiAgICBkaXNhYmxlZCxcbiAgICBjaGlsZHJlbixcbiAgICBuYXZpZ2F0ZSxcbiAgICBjbGFzc05hbWUsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgYnV0dG9uLFxuICAgIGljb25TaXplLFxuICAgIGljb25Db2xvcixcbiAgICBhY3RpdmVDbGFzcyxcbiAgICBlbWFpbFZlcmlmaWVkLFxuICAgIHJlcXVpcmVzQXV0aCxcbiAgICBteXJlZixcbiAgICBkaXNwYXRjaCwgLy8gPGJ1dHRvbj4gZG9lc24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBkaXNwYXRjaFxuICAgIHBhdGhuYW1lLFxuICAgIC4uLm90aGVyUHJvcHNcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGNvbWJpbmVkQ2xhc3NOYW1lID0gY2xhc3NuYW1lcyhcbiAgICAnYnV0dG9uJyxcbiAgICBidXR0b25cbiAgICAgID8ge1xuICAgICAgICAgICdidXR0b24tLXByaW1hcnknOiBidXR0b24gPT09ICdwcmltYXJ5JyxcbiAgICAgICAgICAnYnV0dG9uLS1zZWNvbmRhcnknOiBidXR0b24gPT09ICdzZWNvbmRhcnknLFxuICAgICAgICAgICdidXR0b24tLWFsdCc6IGJ1dHRvbiA9PT0gJ2FsdCcsXG4gICAgICAgICAgJ2J1dHRvbi0taW52ZXJzZSc6IGJ1dHRvbiA9PT0gJ2ludmVyc2UnLFxuICAgICAgICAgICdidXR0b24tLWNsb3NlJzogYnV0dG9uID09PSAnY2xvc2UnLFxuICAgICAgICAgICdidXR0b24tLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAgICAgJ2J1dHRvbi0tbGluayc6IGJ1dHRvbiA9PT0gJ2xpbmsnLFxuICAgICAgICB9XG4gICAgICA6ICdidXR0b24tLW5vLXN0eWxlJyxcbiAgICBjbGFzc05hbWVcbiAgKTtcblxuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgY29tYmluZWRSZWYgPSB1c2VDb21iaW5lZFJlZnMocmVmLCBpbm5lclJlZiwgbXlyZWYpO1xuICBjb25zdCBzaXplID0gaWNvblNpemUgfHwgKCFsYWJlbCAmJiAhY2hpbGRyZW4pID8gMTggOiB1bmRlZmluZWQ7IC8vIEZhbGwgYmFjayB0byBkZWZhdWx0XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJidXR0b25fX2NvbnRlbnRcIj5cbiAgICAgIHtpY29uICYmIDxJY29uIGljb249e2ljb259IGljb25Db2xvcj17aWNvbkNvbG9yfSBzaXplPXtzaXplfSAvPn1cbiAgICAgIHtsYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9XCJidXR0b25fX2xhYmVsXCI+e2xhYmVsfTwvc3Bhbj59XG4gICAgICB7Y2hpbGRyZW4gJiYgY2hpbGRyZW59XG4gICAgICB7aWNvblJpZ2h0ICYmIDxJY29uIGljb249e2ljb25SaWdodH0gaWNvbkNvbG9yPXtpY29uQ29sb3J9IHNpemU9e3NpemV9IC8+fVxuICAgIDwvc3Bhbj5cbiAgKTtcblxuICBpZiAoaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8T3V0Ym91bmRMaW5rXG4gICAgICAgIGV2ZW50TGFiZWw9XCJvdXRib3VuZENsaWNrXCJcbiAgICAgICAgdG89e2hyZWZ9XG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y29tYmluZWRDbGFzc05hbWV9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvT3V0Ym91bmRMaW5rPlxuICAgICk7XG4gIH1cblxuICAvLyBIYW5kbGUgbGJyeTovLyB1cmlzIHBhc3NlZCBpbiwgb3IgYWxyZWFkeSBmb3JtYXR0ZWQgd2ViIHVybHNcbiAgbGV0IHBhdGggPSBuYXZpZ2F0ZTtcbiAgaWYgKHBhdGgpIHtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCdsYnJ5Oi8vJykpIHtcbiAgICAgIHBhdGggPSBmb3JtYXRMYnJ5VXJsRm9yV2ViKHBhdGgpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAvLyBGb3JjZSBhIGxlYWRpbmcgc2xhc2ggc28gbmV3IHBhdGhzIGFyZW4ndCBhcHBlbmRlZCBvbiB0byB0aGUgY3VycmVudCBwYXRoXG4gICAgICBwYXRoID0gYC8ke3BhdGh9YDtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxdWlyZXNBdXRoICYmICFlbWFpbFZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxOYXZMaW5rXG4gICAgICAgIGV4YWN0XG4gICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICAgIHRvPXtgLyQvJHtQQUdFUy5BVVRIfT9yZWRpcmVjdD0ke3BhdGhuYW1lfWB9XG4gICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVkQ2xhc3NOYW1lfVxuICAgICAgICBhY3RpdmVDbGFzc05hbWU9e2FjdGl2ZUNsYXNzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvTmF2TGluaz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHBhdGggPyAoXG4gICAgPE5hdkxpbmtcbiAgICAgIGV4YWN0XG4gICAgICB0bz17cGF0aH1cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgIG9uQ2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17Y29tYmluZWRDbGFzc05hbWV9XG4gICAgICBhY3RpdmVDbGFzc05hbWU9e2FjdGl2ZUNsYXNzfVxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC9OYXZMaW5rPlxuICApIDogKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29tYmluZWRSZWZ9XG4gICAgICB0aXRsZT17dGl0bGV9XG4gICAgICBhcmlhLWxhYmVsPXtkZXNjcmlwdGlvbiB8fCBsYWJlbCB8fCB0aXRsZX1cbiAgICAgIGNsYXNzTmFtZT17Y29tYmluZWRDbGFzc05hbWV9XG4gICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIG9uQ2xpY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC9idXR0b24+XG4gICk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUEyQkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQTNEQTtBQUNBO0FBQ0E7QUF1RUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQWNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBO0FBWkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFaQTtBQXhIQTtBQTRJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/button/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/cardVerify/index.js": -/*!*******************************************!*\ - !*** ../ui/component/cardVerify/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/cardVerify/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserEmail\"])(state)\n };\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NhcmRWZXJpZnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NhcmRWZXJpZnkvaW5kZXguanM/MGZhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlckVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgQ2FyZFZlcmlmeSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBlbWFpbDogc2VsZWN0VXNlckVtYWlsKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gKCkgPT4gKHt9KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKENhcmRWZXJpZnkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/cardVerify/index.js\n"); - -/***/ }), - -/***/ "../ui/component/cardVerify/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/cardVerify/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n/* eslint-disable no-undef */\n\n/* eslint-disable react/prop-types */\n\n\n\n\nvar scriptLoading = false;\nvar scriptLoaded = false;\nvar scriptDidError = false; // Flow does not like the way this stripe plugin works\n// Disabled because it was a huge pain\n// type Props = {\n// disabled: boolean,\n// label: ?string,\n// email: string,\n// // =====================================================\n// // Required by stripe\n// // see Stripe docs for more info:\n// // https://stripe.com/docs/checkout#integration-custom\n// // =====================================================\n// // Your publishable key (test or live).\n// // can't use \"key\" as a prop in react, so have to change the keyname\n// stripeKey: string,\n// // The callback to invoke when the Checkout process is complete.\n// // function(token)\n// // token is the token object created.\n// // token.id can be used to create a charge or customer.\n// // token.email contains the email address entered by the user.\n// token: string,\n// };\n\nvar CardVerify = /*#__PURE__*/function (_React$Component) {\n _inherits(CardVerify, _React$Component);\n\n function CardVerify(props) {\n var _this;\n\n _classCallCheck(this, CardVerify);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(CardVerify).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"onScriptLoaded\", function () {\n if (!CardVerify.stripeHandler) {\n CardVerify.stripeHandler = StripeCheckout.configure({\n key: _this.props.stripeKey\n });\n\n if (_this.hasPendingClick) {\n _this.showStripeDialog();\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onScriptError\", function () {\n _this.setState({\n scriptFailedToLoad: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClosed\", function () {\n _this.setState({\n open: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function () {\n if (scriptDidError) {\n try {\n throw new Error('Tried to call onClick, but StripeCheckout failed to load');\n } catch (x) {}\n } else if (CardVerify.stripeHandler) {\n _this.showStripeDialog();\n } else {\n _this.hasPendingClick = true;\n }\n });\n\n _this.state = {\n open: false,\n scriptFailedToLoad: false\n };\n return _this;\n }\n\n _createClass(CardVerify, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n if (scriptLoaded) {\n return;\n }\n\n if (scriptLoading) {\n return;\n }\n\n scriptLoading = true;\n var script = document.createElement('script');\n script.src = 'https://checkout.stripe.com/checkout.js';\n script.async = true;\n\n this.loadPromise = function () {\n var canceled = false;\n var promise = new Promise(function (resolve, reject) {\n script.onload = function () {\n scriptLoaded = true;\n scriptLoading = false;\n resolve();\n\n _this2.onScriptLoaded();\n };\n\n script.onerror = function (event) {\n scriptDidError = true;\n scriptLoading = false;\n reject(event);\n\n _this2.onScriptError(event);\n };\n });\n var wrappedPromise = new Promise(function (resolve, reject) {\n promise.then(function () {\n return canceled ? reject({\n isCanceled: true\n }) : resolve();\n });\n promise[\"catch\"](function (error) {\n return canceled ? reject({\n isCanceled: true\n }) : reject(error);\n });\n });\n return {\n promise: wrappedPromise,\n reject: function reject() {\n canceled = true;\n }\n };\n }();\n\n this.loadPromise.promise.then(this.onScriptLoaded)[\"catch\"](this.onScriptError); // $FlowFixMe\n\n document.body.appendChild(script);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (!scriptLoading) {\n this.updateStripeHandler();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.loadPromise) {\n this.loadPromise.reject();\n }\n\n if (CardVerify.stripeHandler && this.state.open) {\n CardVerify.stripeHandler.close();\n }\n }\n }, {\n key: \"updateStripeHandler\",\n value: function updateStripeHandler() {\n if (!CardVerify.stripeHandler) {\n CardVerify.stripeHandler = StripeCheckout.configure({\n key: this.props.stripeKey\n });\n }\n }\n }, {\n key: \"showStripeDialog\",\n value: function showStripeDialog() {\n this.setState({\n open: true\n });\n CardVerify.stripeHandler.open({\n allowRememberMe: false,\n closed: this.onClosed,\n description: __('Confirm Identity'),\n email: this.props.email,\n locale: 'auto',\n panelLabel: 'Verify',\n token: this.props.token,\n zipCode: true\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var scriptFailedToLoad = this.props.scriptFailedToLoad;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, scriptFailedToLoad && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, \"There was an error connecting to Stripe. Please try again later.\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n label: this.props.label,\n disabled: this.props.disabled || this.state.open || this.hasPendingClick,\n onClick: this.onClick.bind(this)\n }));\n }\n }]);\n\n return CardVerify;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CardVerify);\n/* eslint-enable no-undef */\n\n/* eslint-enable react/prop-types */\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NhcmRWZXJpZnkvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NhcmRWZXJpZnkvdmlldy5qc3g/ZDdlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbmxldCBzY3JpcHRMb2FkaW5nID0gZmFsc2U7XG5sZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG5sZXQgc2NyaXB0RGlkRXJyb3IgPSBmYWxzZTtcblxuLy8gRmxvdyBkb2VzIG5vdCBsaWtlIHRoZSB3YXkgdGhpcyBzdHJpcGUgcGx1Z2luIHdvcmtzXG4vLyBEaXNhYmxlZCBiZWNhdXNlIGl0IHdhcyBhIGh1Z2UgcGFpblxuLy8gdHlwZSBQcm9wcyA9IHtcbi8vICAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4vLyAgIGxhYmVsOiA/c3RyaW5nLFxuLy8gICBlbWFpbDogc3RyaW5nLFxuXG4vLyAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAgIC8vIFJlcXVpcmVkIGJ5IHN0cmlwZVxuLy8gICAvLyBzZWUgU3RyaXBlIGRvY3MgZm9yIG1vcmUgaW5mbzpcbi8vICAgLy8gICBodHRwczovL3N0cmlwZS5jb20vZG9jcy9jaGVja291dCNpbnRlZ3JhdGlvbi1jdXN0b21cbi8vICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gICAvLyBZb3VyIHB1Ymxpc2hhYmxlIGtleSAodGVzdCBvciBsaXZlKS5cbi8vICAgLy8gY2FuJ3QgdXNlIFwia2V5XCIgYXMgYSBwcm9wIGluIHJlYWN0LCBzbyBoYXZlIHRvIGNoYW5nZSB0aGUga2V5bmFtZVxuLy8gICBzdHJpcGVLZXk6IHN0cmluZyxcblxuLy8gICAvLyBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIENoZWNrb3V0IHByb2Nlc3MgaXMgY29tcGxldGUuXG4vLyAgIC8vICAgZnVuY3Rpb24odG9rZW4pXG4vLyAgIC8vICAgICB0b2tlbiBpcyB0aGUgdG9rZW4gb2JqZWN0IGNyZWF0ZWQuXG4vLyAgIC8vICAgICB0b2tlbi5pZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBjaGFyZ2Ugb3IgY3VzdG9tZXIuXG4vLyAgIC8vICAgICB0b2tlbi5lbWFpbCBjb250YWlucyB0aGUgZW1haWwgYWRkcmVzcyBlbnRlcmVkIGJ5IHRoZSB1c2VyLlxuLy8gICB0b2tlbjogc3RyaW5nLFxuLy8gfTtcblxuY2xhc3MgQ2FyZFZlcmlmeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIHNjcmlwdEZhaWxlZFRvTG9hZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2NyaXB0TG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjcmlwdExvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LnNyYyA9ICdodHRwczovL2NoZWNrb3V0LnN0cmlwZS5jb20vY2hlY2tvdXQuanMnO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG5cbiAgICB0aGlzLmxvYWRQcm9taXNlID0gKCgpID0+IHtcbiAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHNjcmlwdExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgdGhpcy5vblNjcmlwdExvYWRlZCgpO1xuICAgICAgICB9O1xuICAgICAgICBzY3JpcHQub25lcnJvciA9IGV2ZW50ID0+IHtcbiAgICAgICAgICBzY3JpcHREaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgc2NyaXB0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJlamVjdChldmVudCk7XG4gICAgICAgICAgdGhpcy5vblNjcmlwdEVycm9yKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb21pc2UudGhlbigoKSA9PiAoY2FuY2VsZWQgPyByZWplY3QoeyBpc0NhbmNlbGVkOiB0cnVlIH0pIDogcmVzb2x2ZSgpKSk7XG4gICAgICAgIHByb21pc2UuY2F0Y2goZXJyb3IgPT4gKGNhbmNlbGVkID8gcmVqZWN0KHsgaXNDYW5jZWxlZDogdHJ1ZSB9KSA6IHJlamVjdChlcnJvcikpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9taXNlOiB3cmFwcGVkUHJvbWlzZSxcbiAgICAgICAgcmVqZWN0KCkge1xuICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIHRoaXMubG9hZFByb21pc2UucHJvbWlzZS50aGVuKHRoaXMub25TY3JpcHRMb2FkZWQpLmNhdGNoKHRoaXMub25TY3JpcHRFcnJvcik7XG5cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGlmICghc2NyaXB0TG9hZGluZykge1xuICAgICAgdGhpcy51cGRhdGVTdHJpcGVIYW5kbGVyKCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMubG9hZFByb21pc2UpIHtcbiAgICAgIHRoaXMubG9hZFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICAgIGlmIChDYXJkVmVyaWZ5LnN0cmlwZUhhbmRsZXIgJiYgdGhpcy5zdGF0ZS5vcGVuKSB7XG4gICAgICBDYXJkVmVyaWZ5LnN0cmlwZUhhbmRsZXIuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBvblNjcmlwdExvYWRlZCA9ICgpID0+IHtcbiAgICBpZiAoIUNhcmRWZXJpZnkuc3RyaXBlSGFuZGxlcikge1xuICAgICAgQ2FyZFZlcmlmeS5zdHJpcGVIYW5kbGVyID0gU3RyaXBlQ2hlY2tvdXQuY29uZmlndXJlKHtcbiAgICAgICAga2V5OiB0aGlzLnByb3BzLnN0cmlwZUtleSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuaGFzUGVuZGluZ0NsaWNrKSB7XG4gICAgICAgIHRoaXMuc2hvd1N0cmlwZURpYWxvZygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvblNjcmlwdEVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2NyaXB0RmFpbGVkVG9Mb2FkOiB0cnVlIH0pO1xuICB9O1xuXG4gIG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcbiAgfTtcblxuICB1cGRhdGVTdHJpcGVIYW5kbGVyKCkge1xuICAgIGlmICghQ2FyZFZlcmlmeS5zdHJpcGVIYW5kbGVyKSB7XG4gICAgICBDYXJkVmVyaWZ5LnN0cmlwZUhhbmRsZXIgPSBTdHJpcGVDaGVja291dC5jb25maWd1cmUoe1xuICAgICAgICBrZXk6IHRoaXMucHJvcHMuc3RyaXBlS2V5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2hvd1N0cmlwZURpYWxvZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICBDYXJkVmVyaWZ5LnN0cmlwZUhhbmRsZXIub3Blbih7XG4gICAgICBhbGxvd1JlbWVtYmVyTWU6IGZhbHNlLFxuICAgICAgY2xvc2VkOiB0aGlzLm9uQ2xvc2VkLFxuICAgICAgZGVzY3JpcHRpb246IF9fKCdDb25maXJtIElkZW50aXR5JyksXG4gICAgICBlbWFpbDogdGhpcy5wcm9wcy5lbWFpbCxcbiAgICAgIGxvY2FsZTogJ2F1dG8nLFxuICAgICAgcGFuZWxMYWJlbDogJ1ZlcmlmeScsXG4gICAgICB0b2tlbjogdGhpcy5wcm9wcy50b2tlbixcbiAgICAgIHppcENvZGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmIChzY3JpcHREaWRFcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBjYWxsIG9uQ2xpY2ssIGJ1dCBTdHJpcGVDaGVja291dCBmYWlsZWQgdG8gbG9hZCcpO1xuICAgICAgfSBjYXRjaCAoeCkge31cbiAgICB9IGVsc2UgaWYgKENhcmRWZXJpZnkuc3RyaXBlSGFuZGxlcikge1xuICAgICAgdGhpcy5zaG93U3RyaXBlRGlhbG9nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFzUGVuZGluZ0NsaWNrID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgc2NyaXB0RmFpbGVkVG9Mb2FkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHtzY3JpcHRGYWlsZWRUb0xvYWQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPlRoZXJlIHdhcyBhbiBlcnJvciBjb25uZWN0aW5nIHRvIFN0cmlwZS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgbGFiZWw9e3RoaXMucHJvcHMubGFiZWx9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWQgfHwgdGhpcy5zdGF0ZS5vcGVuIHx8IHRoaXMuaGFzUGVuZGluZ0NsaWNrfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGljay5iaW5kKHRoaXMpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXJkVmVyaWZ5O1xuLyogZXNsaW50LWVuYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWVuYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBMEVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQWpGQTtBQUNBO0FBREE7QUFxRkE7QUFBQTtBQUFBO0FBckZBO0FBQ0E7QUFEQTtBQXlGQTtBQUFBO0FBQUE7QUF6RkE7QUFDQTtBQURBO0FBbUhBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQURBO0FBR0E7QUFDQTtBQTNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU1BO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBUEE7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFyQkE7QUFDQTtBQTRCQTtBQUNBO0FBRUE7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTs7O0FBY0E7QUFBQTtBQUdBO0FBR0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFRQTs7OztBQWhKQTtBQUNBO0FBa0pBO0FBQ0E7QUFDQTtBQUFBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/cardVerify/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelAbout/index.js": -/*!*********************************************!*\ - !*** ../ui/component/channelAbout/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/channelAbout/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n description: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'description')(state),\n website: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'website_url')(state),\n email: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'email')(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxBYm91dC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbEFib3V0L2luZGV4LmpzPzcxYjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmksIG1ha2VTZWxlY3RDbGFpbUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IENoYW5uZWxBYm91dCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBkZXNjcmlwdGlvbjogbWFrZVNlbGVjdE1ldGFkYXRhSXRlbUZvclVyaShwcm9wcy51cmksICdkZXNjcmlwdGlvbicpKHN0YXRlKSxcbiAgd2Vic2l0ZTogbWFrZVNlbGVjdE1ldGFkYXRhSXRlbUZvclVyaShwcm9wcy51cmksICd3ZWJzaXRlX3VybCcpKHN0YXRlKSxcbiAgZW1haWw6IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkocHJvcHMudXJpLCAnZW1haWwnKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIG51bGwpKENoYW5uZWxBYm91dCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/channelAbout/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelAbout/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/channelAbout/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/markdown-preview */ \"../ui/component/common/markdown-preview.jsx\");\n/* harmony import */ var component_claimTags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimTags */ \"../ui/component/claimTags/index.js\");\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_dateTime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/dateTime */ \"../ui/component/dateTime/index.js\");\n\n\n\n\n\n\n\n\nvar formatEmail = function formatEmail(email) {\n if (email) {\n var protocolRegex = new RegExp('^mailto:', 'i');\n var protocol = protocolRegex.exec(email);\n return protocol ? email : \"mailto:\".concat(email);\n }\n\n return null;\n};\n\nfunction ChannelAbout(props) {\n var claim = props.claim,\n uri = props.uri,\n description = props.description,\n email = props.email,\n website = props.website;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"section card--section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, description && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text media__info-text--constrained\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n content: description\n })), email && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Contact')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n content: formatEmail(email)\n }))), website && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Site')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n content: website\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Tags')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimTags__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri,\n type: \"large\"\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Total Publishes')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, claim.meta.claims_in_channel), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Last Updated')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n timeAgo: true,\n uri: uri\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Claim ID')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text media__info-text--constrained\"\n }, claim.claim_id)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, __('Staked LBC')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n badge: false,\n amount: parseFloat(claim.amount) + parseFloat(claim.meta.support_amount),\n precision: 8\n }), ' ', \"(\", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('view other claims at lbry://%name%', {\n name: claim.name\n }),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_5__[\"TOP\"], \"?name=\").concat(claim.name)\n }), \")\"))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelAbout);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxBYm91dC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbEFib3V0L3ZpZXcuanN4PzUyZTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNYXJrZG93blByZXZpZXcgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3JztcbmltcG9ydCBDbGFpbVRhZ3MgZnJvbSAnY29tcG9uZW50L2NsYWltVGFncyc7XG5pbXBvcnQgQ3JlZGl0QW1vdW50IGZyb20gJ2NvbXBvbmVudC9jb21tb24vY3JlZGl0LWFtb3VudCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBEYXRlVGltZSBmcm9tICdjb21wb25lbnQvZGF0ZVRpbWUnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFpbTogQ2hhbm5lbENsYWltLFxuICB1cmk6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gIGVtYWlsOiA/c3RyaW5nLFxuICB3ZWJzaXRlOiA/c3RyaW5nLFxufTtcblxuY29uc3QgZm9ybWF0RW1haWwgPSAoZW1haWw6IHN0cmluZykgPT4ge1xuICBpZiAoZW1haWwpIHtcbiAgICBjb25zdCBwcm90b2NvbFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXm1haWx0bzonLCAnaScpO1xuICAgIGNvbnN0IHByb3RvY29sID0gcHJvdG9jb2xSZWdleC5leGVjKGVtYWlsKTtcbiAgICByZXR1cm4gcHJvdG9jb2wgPyBlbWFpbCA6IGBtYWlsdG86JHtlbWFpbH1gO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZnVuY3Rpb24gQ2hhbm5lbEFib3V0KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNsYWltLCB1cmksIGRlc2NyaXB0aW9uLCBlbWFpbCwgd2Vic2l0ZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInNlY3Rpb24gY2FyZC0tc2VjdGlvblwiPlxuICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAge2Rlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVkaWFfX2luZm8tdGV4dCBtZWRpYV9faW5mby10ZXh0LS1jb25zdHJhaW5lZFwiPlxuICAgICAgICAgICAgICA8TWFya2Rvd25QcmV2aWV3IGNvbnRlbnQ9e2Rlc2NyaXB0aW9ufSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZW1haWwgJiYgKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICA8bGFiZWw+e19fKCdDb250YWN0Jyl9PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9faW5mby10ZXh0XCI+XG4gICAgICAgICAgICAgICAgPE1hcmtkb3duUHJldmlldyBjb250ZW50PXtmb3JtYXRFbWFpbChlbWFpbCl9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt3ZWJzaXRlICYmIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgPGxhYmVsPntfXygnU2l0ZScpfTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVkaWFfX2luZm8tdGV4dFwiPlxuICAgICAgICAgICAgICAgIDxNYXJrZG93blByZXZpZXcgY29udGVudD17d2Vic2l0ZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8bGFiZWw+e19fKCdUYWdzJyl9PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lZGlhX19pbmZvLXRleHRcIj5cbiAgICAgICAgICAgIDxDbGFpbVRhZ3MgdXJpPXt1cml9IHR5cGU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bGFiZWw+e19fKCdUb3RhbCBQdWJsaXNoZXMnKX08L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVkaWFfX2luZm8tdGV4dFwiPntjbGFpbS5tZXRhLmNsYWltc19pbl9jaGFubmVsfTwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsPntfXygnTGFzdCBVcGRhdGVkJyl9PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lZGlhX19pbmZvLXRleHRcIj5cbiAgICAgICAgICAgIDxEYXRlVGltZSB0aW1lQWdvIHVyaT17dXJpfSAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsPntfXygnQ2xhaW0gSUQnKX08L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVkaWFfX2luZm8tdGV4dFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9faW5mby10ZXh0IG1lZGlhX19pbmZvLXRleHQtLWNvbnN0cmFpbmVkXCI+e2NsYWltLmNsYWltX2lkfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsPntfXygnU3Rha2VkIExCQycpfTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9faW5mby10ZXh0XCI+XG4gICAgICAgICAgICA8Q3JlZGl0QW1vdW50XG4gICAgICAgICAgICAgIGJhZGdlPXtmYWxzZX1cbiAgICAgICAgICAgICAgYW1vdW50PXtwYXJzZUZsb2F0KGNsYWltLmFtb3VudCkgKyBwYXJzZUZsb2F0KGNsYWltLm1ldGEuc3VwcG9ydF9hbW91bnQpfVxuICAgICAgICAgICAgICBwcmVjaXNpb249ezh9XG4gICAgICAgICAgICAvPnsnICd9XG4gICAgICAgICAgICAoXG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICBsYWJlbD17X18oJ3ZpZXcgb3RoZXIgY2xhaW1zIGF0IGxicnk6Ly8lbmFtZSUnLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogY2xhaW0ubmFtZSxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5UT1B9P25hbWU9JHtjbGFpbS5uYW1lfWB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsQWJvdXQ7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUxBO0FBYUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelAbout/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelContent/index.js": -/*!***********************************************!*\ - !*** ../ui/component/channelContent/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/channelContent/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var search = props.location.search;\n var urlParams = new URLSearchParams(search);\n var page = urlParams.get('page') || 0;\n return {\n pageOfClaimsInChannel: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimsInChannelForPage\"])(props.uri, page)(state),\n fetching: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectFetchingChannelClaims\"])(props.uri)(state),\n totalPages: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectTotalPagesInChannelSearch\"])(props.uri, constants_claim__WEBPACK_IMPORTED_MODULE_2__[\"PAGE_SIZE\"])(state),\n channelIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n channelIsBlocked: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectChannelIsBlocked\"])(props.uri)(state),\n claim: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimForUri\"])(props.uri)(state),\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchClaims: function fetchClaims(uri, page) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_1__[\"doFetchClaimsByChannel\"])(uri, page));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDb250ZW50L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsQ29udGVudC9pbmRleC5qcz9jNWE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0ZldGNoQ2xhaW1zQnlDaGFubmVsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCB7IFBBR0VfU0laRSB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yUGFnZSxcbiAgbWFrZVNlbGVjdEZldGNoaW5nQ2hhbm5lbENsYWltcyxcbiAgbWFrZVNlbGVjdENsYWltSXNNaW5lLFxuICBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaCxcbiAgc2VsZWN0Q2hhbm5lbElzQmxvY2tlZCxcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBDaGFubmVsUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoIH0gPSBwcm9wcy5sb2NhdGlvbjtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCBwYWdlID0gdXJsUGFyYW1zLmdldCgncGFnZScpIHx8IDA7XG4gIHJldHVybiB7XG4gICAgcGFnZU9mQ2xhaW1zSW5DaGFubmVsOiBtYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yUGFnZShwcm9wcy51cmksIHBhZ2UpKHN0YXRlKSxcbiAgICBmZXRjaGluZzogbWFrZVNlbGVjdEZldGNoaW5nQ2hhbm5lbENsYWltcyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgICB0b3RhbFBhZ2VzOiBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaChwcm9wcy51cmksIFBBR0VfU0laRSkoc3RhdGUpLFxuICAgIGNoYW5uZWxJc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICBjaGFubmVsSXNCbG9ja2VkOiBzZWxlY3RDaGFubmVsSXNCbG9ja2VkKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGNsYWltOiBwcm9wcy51cmkgJiYgbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGlzQXV0aGVudGljYXRlZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGZldGNoQ2xhaW1zOiAodXJpLCBwYWdlKSA9PiBkaXNwYXRjaChkb0ZldGNoQ2xhaW1zQnlDaGFubmVsKHVyaSwgcGFnZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKENoYW5uZWxQYWdlKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBSkE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/channelContent/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelContent/view.jsx": -/*!***********************************************!*\ - !*** ../ui/component/channelContent/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_hiddenNsfwClaims__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/hiddenNsfwClaims */ \"../ui/component/hiddenNsfwClaims/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lbrytv/component/ads */ \"./component/ads.jsx\");\n\n\n\n\n\n\n\n\nfunction ChannelContent(props) {\n var uri = props.uri,\n fetching = props.fetching,\n channelIsMine = props.channelIsMine,\n channelIsBlocked = props.channelIsBlocked,\n channelIsBlackListed = props.channelIsBlackListed,\n claim = props.claim,\n isAuthenticated = props.isAuthenticated;\n var claimsInChannel = claim && claim.meta.claims_in_channel || 0;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, !fetching && Boolean(claimsInChannel) && !channelIsBlocked && !channelIsBlackListed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_hiddenNsfwClaims__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri\n }), !fetching && channelIsBlackListed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card card--section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this channel from our applications.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/dmca\",\n label: __('Read More')\n }))), !fetching && channelIsBlocked && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card--section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"help\"\n }, __('You have blocked this channel content.'))), !channelIsMine && claimsInChannel > 0 && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_hiddenNsfwClaims__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri\n }), claim && claimsInChannel > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n channelIds: [claim.claim_id],\n defaultOrderBy: constants_claim_search__WEBPACK_IMPORTED_MODULE_5__[\"ORDER_BY_NEW\"],\n injectedItem: !isAuthenticated && true && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n type: \"video\"\n })\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, \"This channel hasn't published anything yet\"));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(ChannelContent));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDb250ZW50L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsQ29udGVudC92aWV3LmpzeD85Mzc4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSGlkZGVuTnNmd0NsYWltcyBmcm9tICdjb21wb25lbnQvaGlkZGVuTnNmd0NsYWltcyc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENsYWltTGlzdERpc2NvdmVyIGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3REaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBDUyBmcm9tICdjb25zdGFudHMvY2xhaW1fc2VhcmNoJztcbmltcG9ydCBBZHMgZnJvbSAnbGJyeXR2L2NvbXBvbmVudC9hZHMnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgdG90YWxQYWdlczogbnVtYmVyLFxuICBmZXRjaGluZzogYm9vbGVhbixcbiAgcGFyYW1zOiB7IHBhZ2U6IG51bWJlciB9LFxuICBwYWdlT2ZDbGFpbXNJbkNoYW5uZWw6IEFycmF5PFN0cmVhbUNsYWltPixcbiAgY2hhbm5lbElzQmxvY2tlZDogYm9vbGVhbixcbiAgY2hhbm5lbElzTWluZTogYm9vbGVhbixcbiAgZmV0Y2hDbGFpbXM6IChzdHJpbmcsIG51bWJlcikgPT4gdm9pZCxcbiAgY2hhbm5lbElzQmxhY2tMaXN0ZWQ6IGJvb2xlYW4sXG4gIGNsYWltOiA/Q2xhaW0sXG4gIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIENoYW5uZWxDb250ZW50KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHVyaSwgZmV0Y2hpbmcsIGNoYW5uZWxJc01pbmUsIGNoYW5uZWxJc0Jsb2NrZWQsIGNoYW5uZWxJc0JsYWNrTGlzdGVkLCBjbGFpbSwgaXNBdXRoZW50aWNhdGVkIH0gPSBwcm9wcztcbiAgY29uc3QgY2xhaW1zSW5DaGFubmVsID0gKGNsYWltICYmIGNsYWltLm1ldGEuY2xhaW1zX2luX2NoYW5uZWwpIHx8IDA7XG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7IWZldGNoaW5nICYmIEJvb2xlYW4oY2xhaW1zSW5DaGFubmVsKSAmJiAhY2hhbm5lbElzQmxvY2tlZCAmJiAhY2hhbm5lbElzQmxhY2tMaXN0ZWQgJiYgKFxuICAgICAgICA8SGlkZGVuTnNmd0NsYWltcyB1cmk9e3VyaX0gLz5cbiAgICAgICl9XG5cbiAgICAgIHshZmV0Y2hpbmcgJiYgY2hhbm5lbElzQmxhY2tMaXN0ZWQgJiYgKFxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJjYXJkIGNhcmQtLXNlY3Rpb25cIj5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICAgJ0luIHJlc3BvbnNlIHRvIGEgY29tcGxhaW50IHdlIHJlY2VpdmVkIHVuZGVyIHRoZSBVUyBEaWdpdGFsIE1pbGxlbm5pdW0gQ29weXJpZ2h0IEFjdCwgd2UgaGF2ZSBibG9ja2VkIGFjY2VzcyB0byB0aGlzIGNoYW5uZWwgZnJvbSBvdXIgYXBwbGljYXRpb25zLidcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL2RtY2FcIiBsYWJlbD17X18oJ1JlYWQgTW9yZScpfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICApfVxuXG4gICAgICB7IWZldGNoaW5nICYmIGNoYW5uZWxJc0Jsb2NrZWQgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiaGVscFwiPntfXygnWW91IGhhdmUgYmxvY2tlZCB0aGlzIGNoYW5uZWwgY29udGVudC4nKX08L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHshY2hhbm5lbElzTWluZSAmJiBjbGFpbXNJbkNoYW5uZWwgPiAwICYmIDxIaWRkZW5Oc2Z3Q2xhaW1zIHVyaT17dXJpfSAvPn1cblxuICAgICAge2NsYWltICYmIGNsYWltc0luQ2hhbm5lbCA+IDAgPyAoXG4gICAgICAgIDxDbGFpbUxpc3REaXNjb3ZlclxuICAgICAgICAgIGNoYW5uZWxJZHM9e1tjbGFpbS5jbGFpbV9pZF19XG4gICAgICAgICAgZGVmYXVsdE9yZGVyQnk9e0NTLk9SREVSX0JZX05FV31cbiAgICAgICAgICBpbmplY3RlZEl0ZW09eyFpc0F1dGhlbnRpY2F0ZWQgJiYgSVNfV0VCICYmIDxBZHMgdHlwZT1cInZpZGVvXCIgLz59XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYWluLS1lbXB0eVwiPlRoaXMgY2hhbm5lbCBoYXNuJ3QgcHVibGlzaGVkIGFueXRoaW5nIHlldDwvc2VjdGlvbj5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihDaGFubmVsQ29udGVudCk7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUdBO0FBQUE7QUFJQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBTUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/channelContent/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelCreate/index.js": -/*!**********************************************!*\ - !*** ../ui/component/channelCreate/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/channelCreate/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nvar select = function select(state) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectBalance\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n createChannel: function createChannel(name, amount) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doCreateChannel\"])(name, amount));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDcmVhdGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDcmVhdGUvaW5kZXguanM/Y2NmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IENoYW5uZWxDcmVhdGUgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IHNlbGVjdEJhbGFuY2UsIGRvQ3JlYXRlQ2hhbm5lbCB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBiYWxhbmNlOiBzZWxlY3RCYWxhbmNlKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY3JlYXRlQ2hhbm5lbDogKG5hbWUsIGFtb3VudCkgPT4gZGlzcGF0Y2goZG9DcmVhdGVDaGFubmVsKG5hbWUsIGFtb3VudCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShDaGFubmVsQ3JlYXRlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/channelCreate/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelCreate/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/channelCreate/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar ChannelCreate = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ChannelCreate, _React$PureComponent);\n\n function ChannelCreate(props) {\n var _this;\n\n _classCallCheck(this, ChannelCreate);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ChannelCreate).call(this, props));\n _this.state = {\n newChannelName: '',\n newChannelBid: 0.1,\n creatingChannel: false,\n newChannelNameError: '',\n newChannelBidError: '',\n createChannelError: undefined\n };\n _assertThisInitialized(_this).handleNewChannelNameChange = _this.handleNewChannelNameChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleNewChannelBidChange = _this.handleNewChannelBidChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleCreateChannel = _this.handleCreateChannel.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ChannelCreate, [{\n key: \"handleNewChannelNameChange\",\n value: function handleNewChannelNameChange(event) {\n var newChannelName = event.target.value;\n\n if (newChannelName.startsWith('@')) {\n newChannelName = newChannelName.slice(1);\n }\n\n var newChannelNameError;\n\n if (newChannelName.length > 0 && !Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"isNameValid\"])(newChannelName, false)) {\n newChannelNameError = constants_claim__WEBPACK_IMPORTED_MODULE_5__[\"INVALID_NAME_ERROR\"];\n }\n\n this.setState({\n newChannelNameError: newChannelNameError,\n newChannelName: newChannelName\n });\n }\n }, {\n key: \"handleNewChannelBidChange\",\n value: function handleNewChannelBidChange(newChannelBid) {\n var balance = this.props.balance;\n var newChannelBidError;\n\n if (newChannelBid === 0) {\n newChannelBidError = __('Your deposit cannot be 0');\n } else if (newChannelBid === balance) {\n newChannelBidError = __('Please decrease your deposit to account for transaction fees');\n } else if (newChannelBid > balance) {\n newChannelBidError = __('Deposit cannot be higher than your balance');\n } else if (newChannelBid < constants_claim__WEBPACK_IMPORTED_MODULE_5__[\"MINIMUM_PUBLISH_BID\"]) {\n newChannelBidError = __('Your deposit must be higher');\n }\n\n this.setState({\n newChannelBid: newChannelBid,\n newChannelBidError: newChannelBidError\n });\n }\n }, {\n key: \"handleCreateChannel\",\n value: function handleCreateChannel() {\n var _this2 = this;\n\n var _this$props = this.props,\n balance = _this$props.balance,\n createChannel = _this$props.createChannel,\n onSuccess = _this$props.onSuccess;\n var _this$state = this.state,\n newChannelBid = _this$state.newChannelBid,\n newChannelName = _this$state.newChannelName;\n var channelName = \"@\".concat(newChannelName.trim());\n\n if (newChannelBid > balance) {\n return;\n }\n\n this.setState({\n creatingChannel: true,\n createChannelError: undefined\n });\n\n var success = function success(channelClaim) {\n _this2.setState({\n creatingChannel: false\n });\n\n analytics__WEBPACK_IMPORTED_MODULE_4__[\"default\"].apiLogPublish(channelClaim);\n\n if (onSuccess !== undefined) {\n onSuccess(_objectSpread({}, _this2.props, {}, _this2.state));\n }\n };\n\n var failure = function failure() {\n _this2.setState({\n creatingChannel: false,\n createChannelError: __('Unable to create channel due to an internal error.')\n });\n };\n\n createChannel(channelName, newChannelBid).then(success, failure);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n var _this$state2 = this.state,\n newChannelName = _this$state2.newChannelName,\n newChannelNameError = _this$state2.newChannelNameError,\n newChannelBid = _this$state2.newChannelBid,\n newChannelBidError = _this$state2.newChannelBidError,\n creatingChannel = _this$state2.creatingChannel,\n createChannelError = _this$state2.createChannelError;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: this.handleCreateChannel\n }, createChannelError && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, createChannelError), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n label: __('Name'),\n name: \"channel-input\",\n type: \"text\",\n placeholder: __('ChannelName'),\n error: newChannelNameError,\n value: newChannelName,\n onChange: this.handleNewChannelNameChange\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n className: \"form-field--price-amount\",\n name: \"channel-deposit\",\n label: __('Deposit (LBC)'),\n step: \"any\",\n min: \"0\",\n type: \"number\",\n helper: __('This LBC remains yours. It is a deposit to reserve the name and can be undone at any time.'),\n error: newChannelBidError,\n value: newChannelBid,\n onChange: function onChange(event) {\n return _this3.handleNewChannelBidChange(parseFloat(event.target.value));\n },\n onWheel: function onWheel(e) {\n return e.stopPropagation();\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n type: \"submit\",\n button: \"primary\",\n label: !creatingChannel ? __('Create channel') : __('Creating channel...'),\n disabled: !newChannelName || !newChannelBid || creatingChannel || newChannelNameError || newChannelBidError\n }))));\n }\n }]);\n\n return ChannelCreate;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelCreate);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDcmVhdGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NoYW5uZWxDcmVhdGUvdmlldy5qc3g/Y2Y5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzTmFtZVZhbGlkIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBGb3JtLCBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBhbmFseXRpY3MgZnJvbSAnYW5hbHl0aWNzJztcblxuaW1wb3J0IHsgTUlOSU1VTV9QVUJMSVNIX0JJRCwgSU5WQUxJRF9OQU1FX0VSUk9SIH0gZnJvbSAnY29uc3RhbnRzL2NsYWltJztcblxudHlwZSBQcm9wcyA9IHtcbiAgYmFsYW5jZTogbnVtYmVyLFxuICBjcmVhdGVDaGFubmVsOiAoc3RyaW5nLCBudW1iZXIpID0+IFByb21pc2U8YW55PixcbiAgb25TdWNjZXNzPzogKHt9KSA9PiB2b2lkLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgbmV3Q2hhbm5lbE5hbWU6IHN0cmluZyxcbiAgbmV3Q2hhbm5lbEJpZDogbnVtYmVyLFxuICBjcmVhdGluZ0NoYW5uZWw6IGJvb2xlYW4sXG4gIG5ld0NoYW5uZWxOYW1lRXJyb3I6IHN0cmluZyxcbiAgbmV3Q2hhbm5lbEJpZEVycm9yOiBzdHJpbmcsXG4gIGNyZWF0ZUNoYW5uZWxFcnJvcjogP3N0cmluZyxcbn07XG5cbmNsYXNzIENoYW5uZWxDcmVhdGUgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbmV3Q2hhbm5lbE5hbWU6ICcnLFxuICAgICAgbmV3Q2hhbm5lbEJpZDogMC4xLFxuICAgICAgY3JlYXRpbmdDaGFubmVsOiBmYWxzZSxcbiAgICAgIG5ld0NoYW5uZWxOYW1lRXJyb3I6ICcnLFxuICAgICAgbmV3Q2hhbm5lbEJpZEVycm9yOiAnJyxcbiAgICAgIGNyZWF0ZUNoYW5uZWxFcnJvcjogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICAodGhpczogYW55KS5oYW5kbGVOZXdDaGFubmVsTmFtZUNoYW5nZSA9IHRoaXMuaGFuZGxlTmV3Q2hhbm5lbE5hbWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5oYW5kbGVOZXdDaGFubmVsQmlkQ2hhbmdlID0gdGhpcy5oYW5kbGVOZXdDaGFubmVsQmlkQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgKHRoaXM6IGFueSkuaGFuZGxlQ3JlYXRlQ2hhbm5lbCA9IHRoaXMuaGFuZGxlQ3JlYXRlQ2hhbm5lbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlTmV3Q2hhbm5lbE5hbWVDaGFuZ2UoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICBsZXQgbmV3Q2hhbm5lbE5hbWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAobmV3Q2hhbm5lbE5hbWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBuZXdDaGFubmVsTmFtZSA9IG5ld0NoYW5uZWxOYW1lLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGxldCBuZXdDaGFubmVsTmFtZUVycm9yO1xuICAgIGlmIChuZXdDaGFubmVsTmFtZS5sZW5ndGggPiAwICYmICFpc05hbWVWYWxpZChuZXdDaGFubmVsTmFtZSwgZmFsc2UpKSB7XG4gICAgICBuZXdDaGFubmVsTmFtZUVycm9yID0gSU5WQUxJRF9OQU1FX0VSUk9SO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbmV3Q2hhbm5lbE5hbWVFcnJvcixcbiAgICAgIG5ld0NoYW5uZWxOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTmV3Q2hhbm5lbEJpZENoYW5nZShuZXdDaGFubmVsQmlkOiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGJhbGFuY2UgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IG5ld0NoYW5uZWxCaWRFcnJvcjtcbiAgICBpZiAobmV3Q2hhbm5lbEJpZCA9PT0gMCkge1xuICAgICAgbmV3Q2hhbm5lbEJpZEVycm9yID0gX18oJ1lvdXIgZGVwb3NpdCBjYW5ub3QgYmUgMCcpO1xuICAgIH0gZWxzZSBpZiAobmV3Q2hhbm5lbEJpZCA9PT0gYmFsYW5jZSkge1xuICAgICAgbmV3Q2hhbm5lbEJpZEVycm9yID0gX18oJ1BsZWFzZSBkZWNyZWFzZSB5b3VyIGRlcG9zaXQgdG8gYWNjb3VudCBmb3IgdHJhbnNhY3Rpb24gZmVlcycpO1xuICAgIH0gZWxzZSBpZiAobmV3Q2hhbm5lbEJpZCA+IGJhbGFuY2UpIHtcbiAgICAgIG5ld0NoYW5uZWxCaWRFcnJvciA9IF9fKCdEZXBvc2l0IGNhbm5vdCBiZSBoaWdoZXIgdGhhbiB5b3VyIGJhbGFuY2UnKTtcbiAgICB9IGVsc2UgaWYgKG5ld0NoYW5uZWxCaWQgPCBNSU5JTVVNX1BVQkxJU0hfQklEKSB7XG4gICAgICBuZXdDaGFubmVsQmlkRXJyb3IgPSBfXygnWW91ciBkZXBvc2l0IG11c3QgYmUgaGlnaGVyJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBuZXdDaGFubmVsQmlkLFxuICAgICAgbmV3Q2hhbm5lbEJpZEVycm9yLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ3JlYXRlQ2hhbm5lbCgpIHtcbiAgICBjb25zdCB7IGJhbGFuY2UsIGNyZWF0ZUNoYW5uZWwsIG9uU3VjY2VzcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IG5ld0NoYW5uZWxCaWQsIG5ld0NoYW5uZWxOYW1lIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgY2hhbm5lbE5hbWUgPSBgQCR7bmV3Q2hhbm5lbE5hbWUudHJpbSgpfWA7XG5cbiAgICBpZiAobmV3Q2hhbm5lbEJpZCA+IGJhbGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNyZWF0aW5nQ2hhbm5lbDogdHJ1ZSxcbiAgICAgIGNyZWF0ZUNoYW5uZWxFcnJvcjogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9IGNoYW5uZWxDbGFpbSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY3JlYXRpbmdDaGFubmVsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgYW5hbHl0aWNzLmFwaUxvZ1B1Ymxpc2goY2hhbm5lbENsYWltKTtcblxuICAgICAgaWYgKG9uU3VjY2VzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9uU3VjY2Vzcyh7IC4uLnRoaXMucHJvcHMsIC4uLnRoaXMuc3RhdGUgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY3JlYXRpbmdDaGFubmVsOiBmYWxzZSxcbiAgICAgICAgY3JlYXRlQ2hhbm5lbEVycm9yOiBfXygnVW5hYmxlIHRvIGNyZWF0ZSBjaGFubmVsIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4nKSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjcmVhdGVDaGFubmVsKGNoYW5uZWxOYW1lLCBuZXdDaGFubmVsQmlkKS50aGVuKHN1Y2Nlc3MsIGZhaWx1cmUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5ld0NoYW5uZWxOYW1lLFxuICAgICAgbmV3Q2hhbm5lbE5hbWVFcnJvcixcbiAgICAgIG5ld0NoYW5uZWxCaWQsXG4gICAgICBuZXdDaGFubmVsQmlkRXJyb3IsXG4gICAgICBjcmVhdGluZ0NoYW5uZWwsXG4gICAgICBjcmVhdGVDaGFubmVsRXJyb3IsXG4gICAgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlQ3JlYXRlQ2hhbm5lbH0+XG4gICAgICAgIHtjcmVhdGVDaGFubmVsRXJyb3IgJiYgPGRpdiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+e2NyZWF0ZUNoYW5uZWxFcnJvcn08L2Rpdj59XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgbGFiZWw9e19fKCdOYW1lJyl9XG4gICAgICAgICAgICBuYW1lPVwiY2hhbm5lbC1pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17X18oJ0NoYW5uZWxOYW1lJyl9XG4gICAgICAgICAgICBlcnJvcj17bmV3Q2hhbm5lbE5hbWVFcnJvcn1cbiAgICAgICAgICAgIHZhbHVlPXtuZXdDaGFubmVsTmFtZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU5ld0NoYW5uZWxOYW1lQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1maWVsZC0tcHJpY2UtYW1vdW50XCJcbiAgICAgICAgICAgIG5hbWU9XCJjaGFubmVsLWRlcG9zaXRcIlxuICAgICAgICAgICAgbGFiZWw9e19fKCdEZXBvc2l0IChMQkMpJyl9XG4gICAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBoZWxwZXI9e19fKCdUaGlzIExCQyByZW1haW5zIHlvdXJzLiBJdCBpcyBhIGRlcG9zaXQgdG8gcmVzZXJ2ZSB0aGUgbmFtZSBhbmQgY2FuIGJlIHVuZG9uZSBhdCBhbnkgdGltZS4nKX1cbiAgICAgICAgICAgIGVycm9yPXtuZXdDaGFubmVsQmlkRXJyb3J9XG4gICAgICAgICAgICB2YWx1ZT17bmV3Q2hhbm5lbEJpZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0aGlzLmhhbmRsZU5ld0NoYW5uZWxCaWRDaGFuZ2UocGFyc2VGbG9hdChldmVudC50YXJnZXQudmFsdWUpKX1cbiAgICAgICAgICAgIG9uV2hlZWw9e2UgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIGxhYmVsPXshY3JlYXRpbmdDaGFubmVsID8gX18oJ0NyZWF0ZSBjaGFubmVsJykgOiBfXygnQ3JlYXRpbmcgY2hhbm5lbC4uLicpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgIW5ld0NoYW5uZWxOYW1lIHx8ICFuZXdDaGFubmVsQmlkIHx8IGNyZWF0aW5nQ2hhbm5lbCB8fCBuZXdDaGFubmVsTmFtZUVycm9yIHx8IG5ld0NoYW5uZWxCaWRFcnJvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRm9ybT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxDcmVhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFnQkE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFkQTtBQWVBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7O0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7OztBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBTUE7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFWQTtBQVdBO0FBQUE7QUFBQTtBQVhBO0FBYUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFZQTs7OztBQTVJQTtBQUNBO0FBOElBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelCreate/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelDiscussion/index.js": -/*!**************************************************!*\ - !*** ../ui/component/channelDiscussion/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/channelDiscussion/view.jsx\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, null)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxEaXNjdXNzaW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRGlzY3Vzc2lvbi9pbmRleC5qcz8yY2MwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgQ2hhbm5lbERpc2N1c3Npb24gZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgbnVsbFxuKShDaGFubmVsRGlzY3Vzc2lvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/channelDiscussion/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelDiscussion/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/channelDiscussion/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_commentsList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/commentsList */ \"../ui/component/commentsList/index.js\");\n/* harmony import */ var component_commentCreate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/commentCreate */ \"../ui/component/commentCreate/index.js\");\n\n\n\n\nfunction ChannelDiscussion(props) {\n var uri = props.uri;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_commentCreate__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_commentsList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelDiscussion);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxEaXNjdXNzaW9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRGlzY3Vzc2lvbi92aWV3LmpzeD9mYmMzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbW1lbnRzTGlzdCBmcm9tICdjb21wb25lbnQvY29tbWVudHNMaXN0JztcbmltcG9ydCBDb21tZW50Q3JlYXRlIGZyb20gJ2NvbXBvbmVudC9jb21tZW50Q3JlYXRlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBDaGFubmVsRGlzY3Vzc2lvbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgdXJpID0gcHJvcHMudXJpO1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJzZWN0aW9uXCI+XG4gICAgICAgIDxDb21tZW50Q3JlYXRlIHVyaT17dXJpfSAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwic2VjdGlvblwiPlxuICAgICAgICA8Q29tbWVudHNMaXN0IHVyaT17dXJpfSAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsRGlzY3Vzc2lvbjtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/channelDiscussion/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelEdit/index.js": -/*!********************************************!*\ - !*** ../ui/component/channelEdit/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/channelEdit/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n thumbnailUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n coverUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectCoverForUri\"])(props.uri)(state),\n page: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectCurrentChannelPage\"])(state),\n description: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'description')(state),\n website: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'website_url')(state),\n email: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'email')(state),\n tags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'tags')(state),\n locations: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'locations')(state),\n languages: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'languages')(state),\n amount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectAmountForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n updateChannel: function updateChannel(params) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateChannel\"])(params));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxFZGl0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRWRpdC9pbmRleC5qcz81MGUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0VGl0bGVGb3JVcmksXG4gIG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmksXG4gIG1ha2VTZWxlY3RDb3ZlckZvclVyaSxcbiAgc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlLFxuICBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpLFxuICBkb1VwZGF0ZUNoYW5uZWwsXG4gIG1ha2VTZWxlY3RBbW91bnRGb3JVcmksXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgQ2hhbm5lbFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGh1bWJuYWlsVXJsOiBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjb3ZlclVybDogbWFrZVNlbGVjdENvdmVyRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBwYWdlOiBzZWxlY3RDdXJyZW50Q2hhbm5lbFBhZ2Uoc3RhdGUpLFxuICBkZXNjcmlwdGlvbjogbWFrZVNlbGVjdE1ldGFkYXRhSXRlbUZvclVyaShwcm9wcy51cmksICdkZXNjcmlwdGlvbicpKHN0YXRlKSxcbiAgd2Vic2l0ZTogbWFrZVNlbGVjdE1ldGFkYXRhSXRlbUZvclVyaShwcm9wcy51cmksICd3ZWJzaXRlX3VybCcpKHN0YXRlKSxcbiAgZW1haWw6IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkocHJvcHMudXJpLCAnZW1haWwnKShzdGF0ZSksXG4gIHRhZ3M6IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkocHJvcHMudXJpLCAndGFncycpKHN0YXRlKSxcbiAgbG9jYXRpb25zOiBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpKHByb3BzLnVyaSwgJ2xvY2F0aW9ucycpKHN0YXRlKSxcbiAgbGFuZ3VhZ2VzOiBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpKHByb3BzLnVyaSwgJ2xhbmd1YWdlcycpKHN0YXRlKSxcbiAgYW1vdW50OiBtYWtlU2VsZWN0QW1vdW50Rm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICB1cGRhdGVDaGFubmVsOiBwYXJhbXMgPT4gZGlzcGF0Y2goZG9VcGRhdGVDaGFubmVsKHBhcmFtcykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShDaGFubmVsUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUFBO0FBQ0E7QUFjQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelEdit/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelEdit/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/channelEdit/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_selectAsset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/selectAsset */ \"../ui/component/selectAsset/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var component_tagsSearch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/tagsSearch */ \"../ui/component/tagsSearch/index.js\");\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction ChannelForm(props) {\n var claim = props.claim,\n title = props.title,\n coverUrl = props.coverUrl,\n description = props.description,\n website = props.website,\n email = props.email,\n thumbnailUrl = props.thumbnailUrl,\n tags = props.tags,\n locations = props.locations,\n languages = props.languages,\n amount = props.amount,\n setEditing = props.setEditing,\n updateChannel = props.updateChannel,\n updateThumb = props.updateThumb,\n updateCover = props.updateCover;\n var claimId = claim.claim_id; // fill this in with sdk data\n\n var channelParams = {\n website: website,\n email: email,\n coverUrl: coverUrl,\n thumbnailUrl: thumbnailUrl,\n description: description,\n title: title,\n amount: amount,\n claim_id: claimId,\n languages: languages || [],\n locations: locations || [],\n tags: tags ? tags.map(function (tag) {\n return {\n name: tag\n };\n }) : []\n };\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(channelParams),\n _useState2 = _slicedToArray(_useState, 2),\n params = _useState2[0],\n setParams = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState4 = _slicedToArray(_useState3, 2),\n bidError = _useState4[0],\n setBidError = _useState4[1]; // If a user changes tabs, update the url so it stays on the same page if they refresh.\n // We don't want to use links here because we can't animate the tab change and using links\n // would alter the Tab label's role attribute, which should stay role=\"tab\" to work with keyboards/screen readers.\n\n\n var handleBidChange = function handleBidChange(bid) {\n var balance = props.balance,\n amount = props.amount;\n var totalAvailableBidAmount = parseFloat(amount) + parseFloat(balance);\n setParams(_objectSpread({}, params, {\n amount: bid\n }));\n setBidError('');\n\n if (bid <= 0.0 || isNaN(bid)) {\n setBidError(__('Deposit cannot be 0'));\n } else if (totalAvailableBidAmount === bid) {\n setBidError(__('Please decrease your deposit to account for transaction fees'));\n } else if (totalAvailableBidAmount < bid) {\n setBidError(__('Deposit cannot be higher than your balance'));\n } else if (bid < constants_claim__WEBPACK_IMPORTED_MODULE_5__[\"MINIMUM_PUBLISH_BID\"]) {\n setBidError(__('Your deposit must be higher'));\n }\n };\n\n var handleThumbnailChange = function handleThumbnailChange(thumbnailUrl) {\n setParams(_objectSpread({}, params, {\n thumbnailUrl: thumbnailUrl\n }));\n updateThumb(thumbnailUrl);\n };\n\n var handleCoverChange = function handleCoverChange(coverUrl) {\n setParams(_objectSpread({}, params, {\n coverUrl: coverUrl\n }));\n updateCover(coverUrl);\n };\n\n var handleSubmit = function handleSubmit() {\n updateChannel(params);\n setEditing(false);\n }; // TODO clear and bail after submit\n\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: 'card--section'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_selectAsset__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onUpdate: function onUpdate(v) {\n return handleThumbnailChange(v);\n },\n currentValue: params.thumbnailUrl,\n assetName: 'Thumbnail',\n recommended: __('Recommended ratio is 1:1')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_selectAsset__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onUpdate: function onUpdate(v) {\n return handleCoverChange(v);\n },\n currentValue: params.coverUrl,\n assetName: 'Cover',\n recommended: __('Recommended ratio is 6.25:1')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n name: \"channel_title2\",\n label: __('Title'),\n placeholder: __('Titular Title'),\n disabled: false,\n value: params.title,\n onChange: function onChange(e) {\n return setParams(_objectSpread({}, params, {\n title: e.target.value\n }));\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n className: \"form-field--price-amount\",\n type: \"number\",\n name: \"content_bid2\",\n step: \"any\",\n label: __('Deposit (LBC)'),\n postfix: \"LBC\",\n value: params.amount,\n error: bidError,\n min: \"0.0\",\n disabled: false,\n onChange: function onChange(event) {\n return handleBidChange(parseFloat(event.target.value));\n },\n placeholder: 0.1\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n name: \"channel_website2\",\n label: __('Website'),\n placeholder: __('aprettygoodsite.com'),\n disabled: false,\n value: params.website,\n onChange: function onChange(e) {\n return setParams(_objectSpread({}, params, {\n website: e.target.value\n }));\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n name: \"content_email2\",\n label: __('Email'),\n placeholder: __('yourstruly@example.com'),\n disabled: false,\n value: params.email,\n onChange: function onChange(e) {\n return setParams(_objectSpread({}, params, {\n email: e.target.value\n }));\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"markdown\",\n name: \"content_description2\",\n label: __('Description'),\n placeholder: __('Description of your content'),\n value: params.description,\n disabled: false,\n onChange: function onChange(text) {\n return setParams(_objectSpread({}, params, {\n description: text\n }));\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tagsSearch__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n suggestMature: true,\n disableAutoFocus: true,\n tagsPassedIn: params.tags || [],\n label: __('Tags Selected'),\n onRemove: function onRemove(clickedTag) {\n var newTags = params.tags.slice().filter(function (tag) {\n return tag.name !== clickedTag.name;\n });\n setParams(_objectSpread({}, params, {\n tags: newTags\n }));\n },\n onSelect: function onSelect(newTags) {\n newTags.forEach(function (newTag) {\n if (!params.tags.map(function (savedTag) {\n return savedTag.name;\n }).includes(newTag.name)) {\n setParams(_objectSpread({}, params, {\n tags: [].concat(_toConsumableArray(params.tags), [newTag])\n }));\n } else {\n // If it already exists and the user types it in, remove it\n setParams(_objectSpread({}, params, {\n tags: params.tags.filter(function (tag) {\n return tag.name !== newTag.name;\n })\n }));\n }\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'card__actions'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n label: __('Submit'),\n onClick: handleSubmit\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n navigate: \"$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_4__[\"CHANNELS\"])\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('After submitting, you will not see the changes immediately. Please check back in a few minutes.')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelForm);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxFZGl0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRWRpdC92aWV3LmpzeD84ZWIzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBTZWxlY3RBc3NldCBmcm9tICdjb21wb25lbnQvc2VsZWN0QXNzZXQnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCB7IE1JTklNVU1fUFVCTElTSF9CSUQgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IFRhZ3NTZWFyY2ggZnJvbSAnY29tcG9uZW50L3RhZ3NTZWFyY2gnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFpbTogQ2hhbm5lbENsYWltLFxuICB0aXRsZTogP3N0cmluZyxcbiAgYW1vdW50OiBzdHJpbmcsXG4gIGNvdmVyVXJsOiA/c3RyaW5nLFxuICB0aHVtYm5haWxVcmw6ID9zdHJpbmcsXG4gIGxvY2F0aW9uOiB7IHNlYXJjaDogc3RyaW5nIH0sXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHdlYnNpdGU6IHN0cmluZyxcbiAgZW1haWw6IHN0cmluZyxcbiAgYmFsYW5jZTogbnVtYmVyLFxuICB0YWdzOiBBcnJheTxzdHJpbmc+LFxuICBsb2NhdGlvbnM6IEFycmF5PHN0cmluZz4sXG4gIGxhbmd1YWdlczogQXJyYXk8c3RyaW5nPixcbiAgdXBkYXRlQ2hhbm5lbDogYW55ID0+IHZvaWQsXG4gIHVwZGF0ZVRodW1iOiBzdHJpbmcgPT4gdm9pZCxcbiAgdXBkYXRlQ292ZXI6IHN0cmluZyA9PiB2b2lkLFxuICBzZXRFZGl0aW5nOiBib29sZWFuID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBDaGFubmVsRm9ybShwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYWltLFxuICAgIHRpdGxlLFxuICAgIGNvdmVyVXJsLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHdlYnNpdGUsXG4gICAgZW1haWwsXG4gICAgdGh1bWJuYWlsVXJsLFxuICAgIHRhZ3MsXG4gICAgbG9jYXRpb25zLFxuICAgIGxhbmd1YWdlcyxcbiAgICBhbW91bnQsXG4gICAgc2V0RWRpdGluZyxcbiAgICB1cGRhdGVDaGFubmVsLFxuICAgIHVwZGF0ZVRodW1iLFxuICAgIHVwZGF0ZUNvdmVyLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgY2xhaW1faWQ6IGNsYWltSWQgfSA9IGNsYWltO1xuXG4gIC8vIGZpbGwgdGhpcyBpbiB3aXRoIHNkayBkYXRhXG4gIGNvbnN0IGNoYW5uZWxQYXJhbXMgPSB7XG4gICAgd2Vic2l0ZSxcbiAgICBlbWFpbCxcbiAgICBjb3ZlclVybCxcbiAgICB0aHVtYm5haWxVcmwsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgdGl0bGUsXG4gICAgYW1vdW50LFxuICAgIGNsYWltX2lkOiBjbGFpbUlkLFxuICAgIGxhbmd1YWdlczogbGFuZ3VhZ2VzIHx8IFtdLFxuICAgIGxvY2F0aW9uczogbG9jYXRpb25zIHx8IFtdLFxuICAgIHRhZ3M6IHRhZ3NcbiAgICAgID8gdGFncy5tYXAodGFnID0+IHtcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiB0YWcgfTtcbiAgICAgICAgfSlcbiAgICAgIDogW10sXG4gIH07XG5cbiAgY29uc3QgW3BhcmFtcywgc2V0UGFyYW1zXSA9IHVzZVN0YXRlKGNoYW5uZWxQYXJhbXMpO1xuICBjb25zdCBbYmlkRXJyb3IsIHNldEJpZEVycm9yXSA9IHVzZVN0YXRlKCcnKTtcblxuICAvLyBJZiBhIHVzZXIgY2hhbmdlcyB0YWJzLCB1cGRhdGUgdGhlIHVybCBzbyBpdCBzdGF5cyBvbiB0aGUgc2FtZSBwYWdlIGlmIHRoZXkgcmVmcmVzaC5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgbGlua3MgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFuaW1hdGUgdGhlIHRhYiBjaGFuZ2UgYW5kIHVzaW5nIGxpbmtzXG4gIC8vIHdvdWxkIGFsdGVyIHRoZSBUYWIgbGFiZWwncyByb2xlIGF0dHJpYnV0ZSwgd2hpY2ggc2hvdWxkIHN0YXkgcm9sZT1cInRhYlwiIHRvIHdvcmsgd2l0aCBrZXlib2FyZHMvc2NyZWVuIHJlYWRlcnMuXG5cbiAgY29uc3QgaGFuZGxlQmlkQ2hhbmdlID0gKGJpZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgeyBiYWxhbmNlLCBhbW91bnQgfSA9IHByb3BzO1xuICAgIGNvbnN0IHRvdGFsQXZhaWxhYmxlQmlkQW1vdW50ID0gcGFyc2VGbG9hdChhbW91bnQpICsgcGFyc2VGbG9hdChiYWxhbmNlKTtcbiAgICBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIGFtb3VudDogYmlkIH0pO1xuICAgIHNldEJpZEVycm9yKCcnKTtcbiAgICBpZiAoYmlkIDw9IDAuMCB8fCBpc05hTihiaWQpKSB7XG4gICAgICBzZXRCaWRFcnJvcihfXygnRGVwb3NpdCBjYW5ub3QgYmUgMCcpKTtcbiAgICB9IGVsc2UgaWYgKHRvdGFsQXZhaWxhYmxlQmlkQW1vdW50ID09PSBiaWQpIHtcbiAgICAgIHNldEJpZEVycm9yKF9fKCdQbGVhc2UgZGVjcmVhc2UgeW91ciBkZXBvc2l0IHRvIGFjY291bnQgZm9yIHRyYW5zYWN0aW9uIGZlZXMnKSk7XG4gICAgfSBlbHNlIGlmICh0b3RhbEF2YWlsYWJsZUJpZEFtb3VudCA8IGJpZCkge1xuICAgICAgc2V0QmlkRXJyb3IoX18oJ0RlcG9zaXQgY2Fubm90IGJlIGhpZ2hlciB0aGFuIHlvdXIgYmFsYW5jZScpKTtcbiAgICB9IGVsc2UgaWYgKGJpZCA8IE1JTklNVU1fUFVCTElTSF9CSUQpIHtcbiAgICAgIHNldEJpZEVycm9yKF9fKCdZb3VyIGRlcG9zaXQgbXVzdCBiZSBoaWdoZXInKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVRodW1ibmFpbENoYW5nZSA9ICh0aHVtYm5haWxVcmw6IHN0cmluZykgPT4ge1xuICAgIHNldFBhcmFtcyh7IC4uLnBhcmFtcywgdGh1bWJuYWlsVXJsIH0pO1xuICAgIHVwZGF0ZVRodW1iKHRodW1ibmFpbFVybCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ292ZXJDaGFuZ2UgPSAoY292ZXJVcmw6IHN0cmluZykgPT4ge1xuICAgIHNldFBhcmFtcyh7IC4uLnBhcmFtcywgY292ZXJVcmwgfSk7XG4gICAgdXBkYXRlQ292ZXIoY292ZXJVcmwpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICB1cGRhdGVDaGFubmVsKHBhcmFtcyk7XG4gICAgc2V0RWRpdGluZyhmYWxzZSk7XG4gIH07XG5cbiAgLy8gVE9ETyBjbGVhciBhbmQgYmFpbCBhZnRlciBzdWJtaXRcbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9eydjYXJkLS1zZWN0aW9uJ30+XG4gICAgICA8U2VsZWN0QXNzZXRcbiAgICAgICAgb25VcGRhdGU9e3YgPT4gaGFuZGxlVGh1bWJuYWlsQ2hhbmdlKHYpfVxuICAgICAgICBjdXJyZW50VmFsdWU9e3BhcmFtcy50aHVtYm5haWxVcmx9XG4gICAgICAgIGFzc2V0TmFtZT17J1RodW1ibmFpbCd9XG4gICAgICAgIHJlY29tbWVuZGVkPXtfXygnUmVjb21tZW5kZWQgcmF0aW8gaXMgMToxJyl9XG4gICAgICAvPlxuXG4gICAgICA8U2VsZWN0QXNzZXRcbiAgICAgICAgb25VcGRhdGU9e3YgPT4gaGFuZGxlQ292ZXJDaGFuZ2Uodil9XG4gICAgICAgIGN1cnJlbnRWYWx1ZT17cGFyYW1zLmNvdmVyVXJsfVxuICAgICAgICBhc3NldE5hbWU9eydDb3Zlcid9XG4gICAgICAgIHJlY29tbWVuZGVkPXtfXygnUmVjb21tZW5kZWQgcmF0aW8gaXMgNi4yNToxJyl9XG4gICAgICAvPlxuXG4gICAgICA8Rm9ybUZpZWxkXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgbmFtZT1cImNoYW5uZWxfdGl0bGUyXCJcbiAgICAgICAgbGFiZWw9e19fKCdUaXRsZScpfVxuICAgICAgICBwbGFjZWhvbGRlcj17X18oJ1RpdHVsYXIgVGl0bGUnKX1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICB2YWx1ZT17cGFyYW1zLnRpdGxlfVxuICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIHRpdGxlOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgIC8+XG4gICAgICA8Rm9ybUZpZWxkXG4gICAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLXByaWNlLWFtb3VudFwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBuYW1lPVwiY29udGVudF9iaWQyXCJcbiAgICAgICAgc3RlcD1cImFueVwiXG4gICAgICAgIGxhYmVsPXtfXygnRGVwb3NpdCAoTEJDKScpfVxuICAgICAgICBwb3N0Zml4PVwiTEJDXCJcbiAgICAgICAgdmFsdWU9e3BhcmFtcy5hbW91bnR9XG4gICAgICAgIGVycm9yPXtiaWRFcnJvcn1cbiAgICAgICAgbWluPVwiMC4wXCJcbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQmlkQ2hhbmdlKHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlKSl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXswLjF9XG4gICAgICAvPlxuXG4gICAgICA8Rm9ybUZpZWxkXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgbmFtZT1cImNoYW5uZWxfd2Vic2l0ZTJcIlxuICAgICAgICBsYWJlbD17X18oJ1dlYnNpdGUnKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdhcHJldHR5Z29vZHNpdGUuY29tJyl9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgdmFsdWU9e3BhcmFtcy53ZWJzaXRlfVxuICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIHdlYnNpdGU6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgLz5cblxuICAgICAgPEZvcm1GaWVsZFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIG5hbWU9XCJjb250ZW50X2VtYWlsMlwiXG4gICAgICAgIGxhYmVsPXtfXygnRW1haWwnKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e19fKCd5b3Vyc3RydWx5QGV4YW1wbGUuY29tJyl9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgdmFsdWU9e3BhcmFtcy5lbWFpbH1cbiAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0UGFyYW1zKHsgLi4ucGFyYW1zLCBlbWFpbDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAvPlxuXG4gICAgICA8Rm9ybUZpZWxkXG4gICAgICAgIHR5cGU9XCJtYXJrZG93blwiXG4gICAgICAgIG5hbWU9XCJjb250ZW50X2Rlc2NyaXB0aW9uMlwiXG4gICAgICAgIGxhYmVsPXtfXygnRGVzY3JpcHRpb24nKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdEZXNjcmlwdGlvbiBvZiB5b3VyIGNvbnRlbnQnKX1cbiAgICAgICAgdmFsdWU9e3BhcmFtcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBvbkNoYW5nZT17dGV4dCA9PiBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIGRlc2NyaXB0aW9uOiB0ZXh0IH0pfVxuICAgICAgLz5cblxuICAgICAgPFRhZ3NTZWFyY2hcbiAgICAgICAgc3VnZ2VzdE1hdHVyZVxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzXG4gICAgICAgIHRhZ3NQYXNzZWRJbj17cGFyYW1zLnRhZ3MgfHwgW119XG4gICAgICAgIGxhYmVsPXtfXygnVGFncyBTZWxlY3RlZCcpfVxuICAgICAgICBvblJlbW92ZT17Y2xpY2tlZFRhZyA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3VGFncyA9IHBhcmFtcy50YWdzLnNsaWNlKCkuZmlsdGVyKHRhZyA9PiB0YWcubmFtZSAhPT0gY2xpY2tlZFRhZy5uYW1lKTtcbiAgICAgICAgICBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIHRhZ3M6IG5ld1RhZ3MgfSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uU2VsZWN0PXtuZXdUYWdzID0+IHtcbiAgICAgICAgICBuZXdUYWdzLmZvckVhY2gobmV3VGFnID0+IHtcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnRhZ3MubWFwKHNhdmVkVGFnID0+IHNhdmVkVGFnLm5hbWUpLmluY2x1ZGVzKG5ld1RhZy5uYW1lKSkge1xuICAgICAgICAgICAgICBzZXRQYXJhbXMoeyAuLi5wYXJhbXMsIHRhZ3M6IFsuLi5wYXJhbXMudGFncywgbmV3VGFnXSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIGFuZCB0aGUgdXNlciB0eXBlcyBpdCBpbiwgcmVtb3ZlIGl0XG4gICAgICAgICAgICAgIHNldFBhcmFtcyh7IC4uLnBhcmFtcywgdGFnczogcGFyYW1zLnRhZ3MuZmlsdGVyKHRhZyA9PiB0YWcubmFtZSAhPT0gbmV3VGFnLm5hbWUpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2FyZF9fYWN0aW9ucyd9PlxuICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ1N1Ym1pdCcpfSBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9IC8+XG4gICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG5hdmlnYXRlPXtgJC8ke1BBR0VTLkNIQU5ORUxTfWB9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAge19fKCdBZnRlciBzdWJtaXR0aW5nLCB5b3Ugd2lsbCBub3Qgc2VlIHRoZSBjaGFuZ2VzIGltbWVkaWF0ZWx5LiBQbGVhc2UgY2hlY2sgYmFjayBpbiBhIGZldyBtaW51dGVzLicpfVxuICAgICAgPC9wPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFxQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBWEE7QUFDQTtBQXRCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQTFFQTtBQUNBO0FBQ0E7QUE0RUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFRQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBWUE7QUFaQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU5BO0FBUUE7QUFsQkE7QUFvQkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelEdit/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelForm/index.js": -/*!********************************************!*\ - !*** ../ui/component/channelForm/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/publish */ \"../ui/redux/actions/publish.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/channelForm/view.jsx\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar select = function select(state) {\n return _objectSpread({}, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectPublishFormValues\"])(state), {\n // The winning claim for a short lbry uri\n amountNeededForTakeover: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTakeOverAmount\"])(state),\n // My previously published claims under this short lbry uri\n myClaimForUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimForUri\"])(state),\n // If I clicked the \"edit\" button, have I changed the uri?\n // Need this to make it easier to find the source on previously published content\n isStillEditing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsStillEditing\"])(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsResolvingPublishUris\"])(state),\n totalRewardValue: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUnclaimedRewardValue\"])(state)\n });\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n },\n clearPublish: function clearPublish() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClearPublish\"])());\n },\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n },\n publish: function publish(filePath) {\n return dispatch(Object(redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__[\"doPublishDesktop\"])(filePath));\n },\n prepareEdit: function prepareEdit(claim, uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doPrepareEdit\"])(claim, uri));\n },\n resetThumbnailStatus: function resetThumbnailStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResetThumbnailStatus\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxGb3JtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRm9ybS9pbmRleC5qcz8zOGM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBkb1Jlc29sdmVVcmksXG4gIHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzLFxuICBzZWxlY3RJc1N0aWxsRWRpdGluZyxcbiAgc2VsZWN0TXlDbGFpbUZvclVyaSxcbiAgc2VsZWN0SXNSZXNvbHZpbmdQdWJsaXNoVXJpcyxcbiAgc2VsZWN0VGFrZU92ZXJBbW91bnQsXG4gIGRvUmVzZXRUaHVtYm5haWxTdGF0dXMsXG4gIGRvQ2xlYXJQdWJsaXNoLFxuICBkb1VwZGF0ZVB1Ymxpc2hGb3JtLFxuICBkb1ByZXBhcmVFZGl0LFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGRvUHVibGlzaERlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IHsgc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWUgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBDaGFubmVsRm9ybSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICAuLi5zZWxlY3RQdWJsaXNoRm9ybVZhbHVlcyhzdGF0ZSksXG4gIC8vIFRoZSB3aW5uaW5nIGNsYWltIGZvciBhIHNob3J0IGxicnkgdXJpXG4gIGFtb3VudE5lZWRlZEZvclRha2VvdmVyOiBzZWxlY3RUYWtlT3ZlckFtb3VudChzdGF0ZSksXG4gIC8vIE15IHByZXZpb3VzbHkgcHVibGlzaGVkIGNsYWltcyB1bmRlciB0aGlzIHNob3J0IGxicnkgdXJpXG4gIG15Q2xhaW1Gb3JVcmk6IHNlbGVjdE15Q2xhaW1Gb3JVcmkoc3RhdGUpLFxuICAvLyBJZiBJIGNsaWNrZWQgdGhlIFwiZWRpdFwiIGJ1dHRvbiwgaGF2ZSBJIGNoYW5nZWQgdGhlIHVyaT9cbiAgLy8gTmVlZCB0aGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgdGhlIHNvdXJjZSBvbiBwcmV2aW91c2x5IHB1Ymxpc2hlZCBjb250ZW50XG4gIGlzU3RpbGxFZGl0aW5nOiBzZWxlY3RJc1N0aWxsRWRpdGluZyhzdGF0ZSksXG4gIGlzUmVzb2x2aW5nVXJpOiBzZWxlY3RJc1Jlc29sdmluZ1B1Ymxpc2hVcmlzKHN0YXRlKSxcbiAgdG90YWxSZXdhcmRWYWx1ZTogc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWUoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxuICBjbGVhclB1Ymxpc2g6ICgpID0+IGRpc3BhdGNoKGRvQ2xlYXJQdWJsaXNoKCkpLFxuICByZXNvbHZlVXJpOiB1cmkgPT4gZGlzcGF0Y2goZG9SZXNvbHZlVXJpKHVyaSkpLFxuICBwdWJsaXNoOiBmaWxlUGF0aCA9PiBkaXNwYXRjaChkb1B1Ymxpc2hEZXNrdG9wKGZpbGVQYXRoKSksXG4gIHByZXBhcmVFZGl0OiAoY2xhaW0sIHVyaSkgPT4gZGlzcGF0Y2goZG9QcmVwYXJlRWRpdChjbGFpbSwgdXJpKSksXG4gIHJlc2V0VGh1bWJuYWlsU3RhdHVzOiAoKSA9PiBkaXNwYXRjaChkb1Jlc2V0VGh1bWJuYWlsU3RhdHVzKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShDaGFubmVsRm9ybSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUhBO0FBSUE7QUFBQTtBQUpBO0FBS0E7QUFBQTtBQUxBO0FBTUE7QUFBQTtBQUFBO0FBTkE7QUFBQTtBQUNBO0FBUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelForm/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelForm/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/channelForm/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_channelCreate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/channelCreate */ \"../ui/component/channelCreate/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n\n\n\n\n\n\n\nfunction ChannelForm(props) {\n var name = props.name,\n channel = props.channel,\n resolveUri = props.resolveUri,\n updatePublishForm = props.updatePublishForm,\n onSuccess = props.onSuccess; // Every time the channel or name changes, resolve the uris to find winning bid amounts\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // If they are midway through a channel creation, treat it as anonymous until it completes\n var channelName = channel === constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"CHANNEL_NEW\"] ? '' : channel; // We are only going to store the full uri, but we need to resolve the uri with and without the channel name\n\n var uri;\n\n try {\n uri = name && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n streamName: name,\n channelName: channelName\n });\n } catch (e) {}\n\n if (channelName && name) {\n // resolve without the channel name so we know the winning bid for it\n try {\n var uriLessChannel = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n streamName: name\n });\n resolveUri(uriLessChannel);\n } catch (e) {}\n }\n\n var isValid = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"isURIValid\"])(uri);\n\n if (uri && isValid) {\n resolveUri(uri);\n updatePublishForm({\n uri: uri\n });\n }\n }, [name, channel, resolveUri, updatePublishForm]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_5__[\"CHANNEL\"],\n title: \"Create a New Channel\",\n subtitle: \"This is a username or handle that your content can be found under.\",\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelCreate__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSuccess: onSuccess,\n onChannelChange: function onChannelChange(channel) {\n return updatePublishForm({\n channel: channel\n });\n }\n }))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelForm);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxGb3JtL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jaGFubmVsRm9ybS92aWV3LmpzeD8wMTYwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ0hBTk5FTF9ORVcgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IHsgYnVpbGRVUkksIGlzVVJJVmFsaWQgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDaGFubmVsQ3JlYXRlIGZyb20gJ2NvbXBvbmVudC9jaGFubmVsQ3JlYXRlJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuXG50eXBlIFByb3BzID0ge1xuICBuYW1lOiA/c3RyaW5nLFxuICBjaGFubmVsOiBzdHJpbmcsXG4gIHJlc29sdmVVcmk6IHN0cmluZyA9PiB2b2lkLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogYW55ID0+IHZvaWQsXG4gIG9uU3VjY2VzczogKCkgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIENoYW5uZWxGb3JtKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG5hbWUsIGNoYW5uZWwsIHJlc29sdmVVcmksIHVwZGF0ZVB1Ymxpc2hGb3JtLCBvblN1Y2Nlc3MgfSA9IHByb3BzO1xuXG4gIC8vIEV2ZXJ5IHRpbWUgdGhlIGNoYW5uZWwgb3IgbmFtZSBjaGFuZ2VzLCByZXNvbHZlIHRoZSB1cmlzIHRvIGZpbmQgd2lubmluZyBiaWQgYW1vdW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElmIHRoZXkgYXJlIG1pZHdheSB0aHJvdWdoIGEgY2hhbm5lbCBjcmVhdGlvbiwgdHJlYXQgaXQgYXMgYW5vbnltb3VzIHVudGlsIGl0IGNvbXBsZXRlc1xuICAgIGNvbnN0IGNoYW5uZWxOYW1lID0gY2hhbm5lbCA9PT0gQ0hBTk5FTF9ORVcgPyAnJyA6IGNoYW5uZWw7XG5cbiAgICAvLyBXZSBhcmUgb25seSBnb2luZyB0byBzdG9yZSB0aGUgZnVsbCB1cmksIGJ1dCB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlIHVyaSB3aXRoIGFuZCB3aXRob3V0IHRoZSBjaGFubmVsIG5hbWVcbiAgICBsZXQgdXJpO1xuICAgIHRyeSB7XG4gICAgICB1cmkgPSBuYW1lICYmIGJ1aWxkVVJJKHsgc3RyZWFtTmFtZTogbmFtZSwgY2hhbm5lbE5hbWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIGlmIChjaGFubmVsTmFtZSAmJiBuYW1lKSB7XG4gICAgICAvLyByZXNvbHZlIHdpdGhvdXQgdGhlIGNoYW5uZWwgbmFtZSBzbyB3ZSBrbm93IHRoZSB3aW5uaW5nIGJpZCBmb3IgaXRcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVyaUxlc3NDaGFubmVsID0gYnVpbGRVUkkoeyBzdHJlYW1OYW1lOiBuYW1lIH0pO1xuICAgICAgICByZXNvbHZlVXJpKHVyaUxlc3NDaGFubmVsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZCA9IGlzVVJJVmFsaWQodXJpKTtcbiAgICBpZiAodXJpICYmIGlzVmFsaWQpIHtcbiAgICAgIHJlc29sdmVVcmkodXJpKTtcbiAgICAgIHVwZGF0ZVB1Ymxpc2hGb3JtKHsgdXJpIH0pO1xuICAgIH1cbiAgfSwgW25hbWUsIGNoYW5uZWwsIHJlc29sdmVVcmksIHVwZGF0ZVB1Ymxpc2hGb3JtXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICA8Q2FyZFxuICAgICAgICBpY29uPXtJQ09OUy5DSEFOTkVMfVxuICAgICAgICB0aXRsZT1cIkNyZWF0ZSBhIE5ldyBDaGFubmVsXCJcbiAgICAgICAgc3VidGl0bGU9XCJUaGlzIGlzIGEgdXNlcm5hbWUgb3IgaGFuZGxlIHRoYXQgeW91ciBjb250ZW50IGNhbiBiZSBmb3VuZCB1bmRlci5cIlxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8Q2hhbm5lbENyZWF0ZSBvblN1Y2Nlc3M9e29uU3VjY2Vzc30gb25DaGFubmVsQ2hhbmdlPXtjaGFubmVsID0+IHVwZGF0ZVB1Ymxpc2hGb3JtKHsgY2hhbm5lbCB9KX0gLz5cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxGb3JtO1xuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUF0QkE7QUF5QkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFZQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelForm/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelSelector/index.js": -/*!************************************************!*\ - !*** ../ui/component/channelSelector/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/channelSelector/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nvar select = function select(state) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxTZWxlY3Rvci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbFNlbGVjdG9yL2luZGV4LmpzP2UyN2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBTZWxlY3RDaGFubmVsIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBzZWxlY3RNeUNoYW5uZWxDbGFpbXMgfSBmcm9tICdsYnJ5LXJlZHV4JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgY2hhbm5lbHM6IHNlbGVjdE15Q2hhbm5lbENsYWltcyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKFNlbGVjdENoYW5uZWwpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/channelSelector/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelSelector/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/channelSelector/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var _reach_menu_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @reach/menu-button */ \"../node_modules/@reach/menu-button/dist/menu-button.esm.js\");\n/* harmony import */ var component_channelTitle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/channelTitle */ \"../ui/component/channelTitle/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n\n\n\n\n\n\n\n\nfunction ChannelListItem(props) {\n var uri = props.uri,\n _props$isSelected = props.isSelected,\n isSelected = _props$isSelected === void 0 ? false : _props$isSelected;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('channel__list-item', {\n 'channel__list-item--selected': isSelected\n })\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelTitle__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }), isSelected && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWN\"]\n }));\n}\n\nfunction ChannelSelector(props) {\n var channels = props.channels,\n selectedChannelUrl = props.selectedChannelUrl,\n onChannelSelect = props.onChannelSelect;\n\n if (!channels || !selectedChannelUrl) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_4__[\"Menu\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_4__[\"MenuButton\"], {\n className: \"\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ChannelListItem, {\n uri: selectedChannelUrl,\n isSelected: true\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_4__[\"MenuList\"], {\n className: \"menu__list\"\n }, channels && channels.map(function (channel) {\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_4__[\"MenuItem\"], {\n key: channel.canonical_url,\n onSelect: function onSelect() {\n if (selectedChannelUrl !== channel.canonical_url) {\n onChannelSelect(channel.canonical_url);\n }\n }\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ChannelListItem, {\n uri: channel.canonical_url\n }));\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelSelector);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxTZWxlY3Rvci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbFNlbGVjdG9yL3ZpZXcuanN4P2QzMjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2hhbm5lbFRodW1ibmFpbCBmcm9tICdjb21wb25lbnQvY2hhbm5lbFRodW1ibmFpbCc7XG5pbXBvcnQgeyBNZW51LCBNZW51TGlzdCwgTWVudUJ1dHRvbiwgTWVudUl0ZW0gfSBmcm9tICdAcmVhY2gvbWVudS1idXR0b24nO1xuaW1wb3J0IENoYW5uZWxUaXRsZSBmcm9tICdjb21wb25lbnQvY2hhbm5lbFRpdGxlJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNlbGVjdGVkQ2hhbm5lbFVybDogc3RyaW5nLCAvLyBjdXJyZW50bHkgc2VsZWN0ZWQgY2hhbm5lbFxuICBjaGFubmVsczogP0FycmF5PENoYW5uZWxDbGFpbT4sXG4gIG9uQ2hhbm5lbFNlbGVjdDogKHVybDogc3RyaW5nKSA9PiB2b2lkLFxufTtcblxudHlwZSBMaXN0SXRlbVByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBDaGFubmVsTGlzdEl0ZW0ocHJvcHM6IExpc3RJdGVtUHJvcHMpIHtcbiAgY29uc3QgeyB1cmksIGlzU2VsZWN0ZWQgPSBmYWxzZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2hhbm5lbF9fbGlzdC1pdGVtJywgeyAnY2hhbm5lbF9fbGlzdC1pdGVtLS1zZWxlY3RlZCc6IGlzU2VsZWN0ZWQgfSl9PlxuICAgICAgPENoYW5uZWxUaHVtYm5haWwgdXJpPXt1cml9IC8+XG4gICAgICA8Q2hhbm5lbFRpdGxlIHVyaT17dXJpfSAvPlxuICAgICAge2lzU2VsZWN0ZWQgJiYgPEljb24gaWNvbj17SUNPTlMuRE9XTn0gLz59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENoYW5uZWxTZWxlY3Rvcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjaGFubmVscywgc2VsZWN0ZWRDaGFubmVsVXJsLCBvbkNoYW5uZWxTZWxlY3QgfSA9IHByb3BzO1xuXG4gIGlmICghY2hhbm5lbHMgfHwgIXNlbGVjdGVkQ2hhbm5lbFVybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPE1lbnU+XG4gICAgICAgIDxNZW51QnV0dG9uIGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxDaGFubmVsTGlzdEl0ZW0gdXJpPXtzZWxlY3RlZENoYW5uZWxVcmx9IGlzU2VsZWN0ZWQgLz5cbiAgICAgICAgPC9NZW51QnV0dG9uPlxuICAgICAgICA8TWVudUxpc3QgY2xhc3NOYW1lPVwibWVudV9fbGlzdFwiPlxuICAgICAgICAgIHtjaGFubmVscyAmJlxuICAgICAgICAgICAgY2hhbm5lbHMubWFwKGNoYW5uZWwgPT4gKFxuICAgICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e2NoYW5uZWwuY2Fub25pY2FsX3VybH1cbiAgICAgICAgICAgICAgICBvblNlbGVjdD17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hhbm5lbFVybCAhPT0gY2hhbm5lbC5jYW5vbmljYWxfdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbm5lbFNlbGVjdChjaGFubmVsLmNhbm9uaWNhbF91cmwpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbExpc3RJdGVtIHVyaT17Y2hhbm5lbC5jYW5vbmljYWxfdXJsfSAvPlxuICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvTWVudUxpc3Q+XG4gICAgICA8L01lbnU+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTZWxlY3RvcjtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFBQTtBQWpCQTtBQXdCQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelSelector/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelThumbnail/gerbil.png": -/*!***************************************************!*\ - !*** ../ui/component/channelThumbnail/gerbil.png ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/gerbil.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwvZ2VyYmlsLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbFRodW1ibmFpbC9nZXJiaWwucG5nP2JhMTMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1nL2dlcmJpbC5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/channelThumbnail/gerbil.png\n"); - -/***/ }), - -/***/ "../ui/component/channelThumbnail/index.js": -/*!*************************************************!*\ - !*** ../ui/component/channelThumbnail/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/channelThumbnail/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwvaW5kZXguanM/NjJkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IENoYW5uZWxUaHVtYm5haWwgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgdGh1bWJuYWlsOiBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgbnVsbFxuKShDaGFubmVsVGh1bWJuYWlsKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelThumbnail/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelThumbnail/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/channelThumbnail/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _gerbil_png__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gerbil.png */ \"../ui/component/channelThumbnail/gerbil.png\");\n/* harmony import */ var _gerbil_png__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_gerbil_png__WEBPACK_IMPORTED_MODULE_3__);\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nfunction ChannelThumbnail(props) {\n var _classnames;\n\n var thumbnail = props.thumbnail,\n uri = props.uri,\n className = props.className,\n thumbnailPreview = props.thumbnailPreview,\n obscure = props.obscure,\n _props$small = props.small,\n small = _props$small === void 0 ? false : _props$small;\n var showThumb = !obscure && !!thumbnail || thumbnailPreview; // Generate a random color class based on the first letter of the channel name\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"parseURI\"])(uri),\n channelName = _parseURI.channelName;\n\n var initializer;\n var colorClassName;\n\n if (channelName) {\n initializer = channelName.charCodeAt(0) - 65; // will be between 0 and 57\n\n colorClassName = \"channel-thumbnail__default--\".concat(Math.abs(initializer % 4));\n } else {\n colorClassName = \"channel-thumbnail__default--4\";\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('channel-thumbnail', className, (_classnames = {}, _defineProperty(_classnames, colorClassName, !showThumb), _defineProperty(_classnames, 'channel-thumbnail--small', small), _classnames))\n }, !showThumb && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n alt: __('Channel profile picture'),\n className: \"channel-thumbnail__default\",\n src: thumbnailPreview || _gerbil_png__WEBPACK_IMPORTED_MODULE_3___default.a\n }), showThumb && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n alt: __('Channel profile picture'),\n className: \"channel-thumbnail__custom\",\n src: thumbnailPreview || thumbnail\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelThumbnail);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwvdmlldy5qc3g/MDAwNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHBhcnNlVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBHZXJiaWwgZnJvbSAnLi9nZXJiaWwucG5nJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGh1bWJuYWlsOiA/c3RyaW5nLFxuICB1cmk6ID9zdHJpbmcsXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgdGh1bWJuYWlsUHJldmlldzogP3N0cmluZyxcbiAgb2JzY3VyZT86IGJvb2xlYW4sXG4gIHNtYWxsPzogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIENoYW5uZWxUaHVtYm5haWwocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdGh1bWJuYWlsLCB1cmksIGNsYXNzTmFtZSwgdGh1bWJuYWlsUHJldmlldywgb2JzY3VyZSwgc21hbGwgPSBmYWxzZSB9ID0gcHJvcHM7XG4gIGNvbnN0IHNob3dUaHVtYiA9ICghb2JzY3VyZSAmJiAhIXRodW1ibmFpbCkgfHwgdGh1bWJuYWlsUHJldmlldztcblxuICAvLyBHZW5lcmF0ZSBhIHJhbmRvbSBjb2xvciBjbGFzcyBiYXNlZCBvbiB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBjaGFubmVsIG5hbWVcbiAgY29uc3QgeyBjaGFubmVsTmFtZSB9ID0gcGFyc2VVUkkodXJpKTtcblxuICBsZXQgaW5pdGlhbGl6ZXI7XG4gIGxldCBjb2xvckNsYXNzTmFtZTtcbiAgaWYgKGNoYW5uZWxOYW1lKSB7XG4gICAgaW5pdGlhbGl6ZXIgPSBjaGFubmVsTmFtZS5jaGFyQ29kZUF0KDApIC0gNjU7IC8vIHdpbGwgYmUgYmV0d2VlbiAwIGFuZCA1N1xuICAgIGNvbG9yQ2xhc3NOYW1lID0gYGNoYW5uZWwtdGh1bWJuYWlsX19kZWZhdWx0LS0ke01hdGguYWJzKGluaXRpYWxpemVyICUgNCl9YDtcbiAgfSBlbHNlIHtcbiAgICBjb2xvckNsYXNzTmFtZSA9IGBjaGFubmVsLXRodW1ibmFpbF9fZGVmYXVsdC0tNGA7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NoYW5uZWwtdGh1bWJuYWlsJywgY2xhc3NOYW1lLCB7XG4gICAgICAgIFtjb2xvckNsYXNzTmFtZV06ICFzaG93VGh1bWIsXG4gICAgICAgICdjaGFubmVsLXRodW1ibmFpbC0tc21hbGwnOiBzbWFsbCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIHshc2hvd1RodW1iICYmIChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGFsdD17X18oJ0NoYW5uZWwgcHJvZmlsZSBwaWN0dXJlJyl9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiY2hhbm5lbC10aHVtYm5haWxfX2RlZmF1bHRcIlxuICAgICAgICAgIHNyYz17dGh1bWJuYWlsUHJldmlldyB8fCBHZXJiaWx9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge3Nob3dUaHVtYiAmJiAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBhbHQ9e19fKCdDaGFubmVsIHByb2ZpbGUgcGljdHVyZScpfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImNoYW5uZWwtdGh1bWJuYWlsX19jdXN0b21cIlxuICAgICAgICAgIHNyYz17dGh1bWJuYWlsUHJldmlldyB8fCB0aHVtYm5haWx9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsVGh1bWJuYWlsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFEQTtBQVFBO0FBQ0E7QUFDQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/channelThumbnail/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/channelTitle/index.js": -/*!*********************************************!*\ - !*** ../ui/component/channelTitle/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/channelTitle/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaXRsZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbFRpdGxlL2luZGV4LmpzP2Q0ZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgbWFrZVNlbGVjdFRpdGxlRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgQ2hhbm5lbFRpdGxlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIHRpdGxlOiBtYWtlU2VsZWN0VGl0bGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKENoYW5uZWxUaXRsZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/channelTitle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/channelTitle/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/channelTitle/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction ChannelTitle(props) {\n var title = props.title,\n claim = props.claim;\n\n if (!claim) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__title\"\n }, title || claim.name);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelTitle);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NoYW5uZWxUaXRsZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2hhbm5lbFRpdGxlL3ZpZXcuanN4PzYzZDUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYWltOiA/Q2hhbm5lbENsYWltLFxuICB0aXRsZTogP3N0cmluZyxcbn07XG5cbmZ1bmN0aW9uIENoYW5uZWxUaXRsZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB0aXRsZSwgY2xhaW0gfSA9IHByb3BzO1xuXG4gIGlmICghY2xhaW0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXdfX3RpdGxlXCI+e3RpdGxlIHx8IGNsYWltLm5hbWV9PC9kaXY+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsVGl0bGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/channelTitle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimEffectiveAmount/index.js": -/*!*****************************************************!*\ - !*** ../ui/component/claimEffectiveAmount/index.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimEffectiveAmount/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri, false)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltRWZmZWN0aXZlQW1vdW50L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbUVmZmVjdGl2ZUFtb3VudC9pbmRleC5qcz8xNjRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDbGFpbVJlcG9zdEF1dGhvciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSwgZmFsc2UpKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCkoQ2xhaW1SZXBvc3RBdXRob3IpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimEffectiveAmount/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimEffectiveAmount/view.jsx": -/*!*****************************************************!*\ - !*** ../ui/component/claimEffectiveAmount/view.jsx ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction ClaimRepostAuthor(props) {\n var claim = props.claim;\n\n if (!claim) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, claim.meta.effective_amount, \" LBC\");\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimRepostAuthor);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltRWZmZWN0aXZlQW1vdW50L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbUVmZmVjdGl2ZUFtb3VudC92aWV3LmpzeD9jNzU3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06ID9DbGFpbSxcbn07XG5cbmZ1bmN0aW9uIENsYWltUmVwb3N0QXV0aG9yKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNsYWltIH0gPSBwcm9wcztcblxuICBpZiAoIWNsYWltKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gPHNwYW4+e2NsYWltLm1ldGEuZWZmZWN0aXZlX2Ftb3VudH0gTEJDPC9zcGFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xhaW1SZXBvc3RBdXRob3I7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimEffectiveAmount/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimInsufficientCredits/index.js": -/*!*********************************************************!*\ - !*** ../ui/component/claimInsufficientCredits/index.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimInsufficientCredits/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n isInsufficientCredits: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectInsufficientCreditsForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltSW5zdWZmaWNpZW50Q3JlZGl0cy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1JbnN1ZmZpY2llbnRDcmVkaXRzL2luZGV4LmpzPzE4N2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RJbnN1ZmZpY2llbnRDcmVkaXRzRm9yVXJpIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQnO1xuaW1wb3J0IENsYWltSW5zdWZmaWNpZW50Q3JlZGl0cyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBpc0luc3VmZmljaWVudENyZWRpdHM6IG1ha2VTZWxlY3RJbnN1ZmZpY2llbnRDcmVkaXRzRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShDbGFpbUluc3VmZmljaWVudENyZWRpdHMpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimInsufficientCredits/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimInsufficientCredits/view.jsx": -/*!*********************************************************!*\ - !*** ../ui/component/claimInsufficientCredits/view.jsx ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n\nfunction ClaimInsufficientCredits(props) {\n var isInsufficientCredits = props.isInsufficientCredits,\n fileInfo = props.fileInfo;\n\n if (fileInfo || !isInsufficientCredits) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"media__insufficient-credits help--warning\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n reward_link: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n navigate: \"/$/rewards\",\n label: __('Rewards')\n })\n }\n }, \"The publisher has chosen to charge LBC to view this content. Your balance is currently too low to view it. Check out %reward_link% for free LBC or send more LBC to your wallet.\"));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimInsufficientCredits);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltSW5zdWZmaWNpZW50Q3JlZGl0cy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1JbnN1ZmZpY2llbnRDcmVkaXRzL3ZpZXcuanN4PzBjYWMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGZpbGVJbmZvOiBGaWxlTGlzdEl0ZW0sXG4gIGlzSW5zdWZmaWNpZW50Q3JlZGl0czogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIENsYWltSW5zdWZmaWNpZW50Q3JlZGl0cyhwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBpc0luc3VmZmljaWVudENyZWRpdHMsIGZpbGVJbmZvIH0gPSBwcm9wcztcblxuICBpZiAoZmlsZUluZm8gfHwgIWlzSW5zdWZmaWNpZW50Q3JlZGl0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lZGlhX19pbnN1ZmZpY2llbnQtY3JlZGl0cyBoZWxwLS13YXJuaW5nXCI+XG4gICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgcmV3YXJkX2xpbms6IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG5hdmlnYXRlPVwiLyQvcmV3YXJkc1wiIGxhYmVsPXtfXygnUmV3YXJkcycpfSAvPixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgVGhlIHB1Ymxpc2hlciBoYXMgY2hvc2VuIHRvIGNoYXJnZSBMQkMgdG8gdmlldyB0aGlzIGNvbnRlbnQuIFlvdXIgYmFsYW5jZSBpcyBjdXJyZW50bHkgdG9vIGxvdyB0byB2aWV3IGl0LiBDaGVja1xuICAgICAgICBvdXQgJXJld2FyZF9saW5rJSBmb3IgZnJlZSBMQkMgb3Igc2VuZCBtb3JlIExCQyB0byB5b3VyIHdhbGxldC5cbiAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsYWltSW5zdWZmaWNpZW50Q3JlZGl0cztcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFVQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimInsufficientCredits/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimLink/index.js": -/*!******************************************!*\ - !*** ../ui/component/claimLink/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/claimLink/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n uri: props.uri,\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectBlackListedOutpoints\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGluay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1MaW5rL2luZGV4LmpzPzQ5YzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IHsgZG9SZXNvbHZlVXJpLCBtYWtlU2VsZWN0VGl0bGVGb3JVcmksIG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5cbmltcG9ydCB7IHNlbGVjdEJsYWNrTGlzdGVkT3V0cG9pbnRzIH0gZnJvbSAnbGJyeWluYyc7XG5cbmltcG9ydCBDbGFpbUxpbmsgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHVyaTogcHJvcHMudXJpLFxuICAgIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICBpc1Jlc29sdmluZ1VyaTogbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiBzZWxlY3RCbGFja0xpc3RlZE91dHBvaW50cyhzdGF0ZSksXG4gIH07XG59O1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVzb2x2ZVVyaTogdXJpID0+IGRpc3BhdGNoKGRvUmVzb2x2ZVVyaSh1cmkpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoQ2xhaW1MaW5rKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQURBO0FBQ0E7QUFTQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimLink/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimLink/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/claimLink/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_previewLink__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/previewLink */ \"../ui/component/previewLink/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nvar ClaimLink = /*#__PURE__*/function (_React$Component) {\n _inherits(ClaimLink, _React$Component);\n\n function ClaimLink() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ClaimLink);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ClaimLink)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"resolve\", function (props) {\n var isResolvingUri = props.isResolvingUri,\n resolveUri = props.resolveUri,\n claim = props.claim,\n uri = props.uri;\n\n if (!isResolvingUri && claim === undefined && uri) {\n resolveUri(uri);\n }\n });\n\n return _this;\n }\n\n _createClass(ClaimLink, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.resolve(this.props);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.resolve(this.props);\n }\n }, {\n key: \"isClaimBlackListed\",\n value: function isClaimBlackListed() {\n var _this$props = this.props,\n claim = _this$props.claim,\n blackListedOutpoints = _this$props.blackListedOutpoints;\n var signingChannel = claim && claim.signing_channel;\n\n if (claim && blackListedOutpoints) {\n var blackListed = false;\n blackListed = blackListedOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n return blackListed;\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n uri = _this$props2.uri,\n claim = _this$props2.claim,\n title = _this$props2.title,\n className = _this$props2.className,\n autoEmbed = _this$props2.autoEmbed,\n children = _this$props2.children,\n isResolvingUri = _this$props2.isResolvingUri;\n var isUnresolved = !isResolvingUri && !claim || !claim;\n var isBlacklisted = this.isClaimBlackListed();\n\n if (isBlacklisted || isUnresolved) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", null, children);\n }\n\n var claimName = claim.name,\n valueType = claim.value_type;\n var isChannel = valueType === 'channel';\n var showPreview = autoEmbed === true && !isUnresolved;\n\n if (isChannel) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri,\n link: true,\n addTooltip: true\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n label: children,\n title: title || claimName,\n button: 'link',\n navigate: uri,\n className: className\n }), showPreview && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_previewLink__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri\n }));\n }\n }]);\n\n return ClaimLink;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n_defineProperty(ClaimLink, \"defaultProps\", {\n href: null,\n link: false,\n title: null,\n thumbnail: null,\n autoEmbed: false,\n description: null,\n isResolvingUri: false\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimLink);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGluay92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1MaW5rL3ZpZXcuanN4PzUzYTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgUHJldmlld0xpbmsgZnJvbSAnY29tcG9uZW50L3ByZXZpZXdMaW5rJztcbmltcG9ydCBVcmlJbmRpY2F0b3IgZnJvbSAnY29tcG9uZW50L3VyaUluZGljYXRvcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICB0aXRsZTogP3N0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZSxcbiAgY2xhc3NOYW1lOiA/c3RyaW5nLFxuICBhdXRvRW1iZWQ6ID9ib29sZWFuLFxuICBkZXNjcmlwdGlvbjogP3N0cmluZyxcbiAgaXNSZXNvbHZpbmdVcmk6IGJvb2xlYW4sXG4gIHJlc29sdmVVcmk6IHN0cmluZyA9PiB2b2lkLFxuICBibGFja0xpc3RlZE91dHBvaW50czogQXJyYXk8e1xuICAgIHR4aWQ6IHN0cmluZyxcbiAgICBub3V0OiBudW1iZXIsXG4gIH0+LFxufTtcblxuY2xhc3MgQ2xhaW1MaW5rIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgaHJlZjogbnVsbCxcbiAgICBsaW5rOiBmYWxzZSxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0aHVtYm5haWw6IG51bGwsXG4gICAgYXV0b0VtYmVkOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICBpc1Jlc29sdmluZ1VyaTogZmFsc2UsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZXNvbHZlKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMucmVzb2x2ZSh0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGlzQ2xhaW1CbGFja0xpc3RlZCgpIHtcbiAgICBjb25zdCB7IGNsYWltLCBibGFja0xpc3RlZE91dHBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBzaWduaW5nQ2hhbm5lbCA9IGNsYWltICYmIGNsYWltLnNpZ25pbmdfY2hhbm5lbDtcbiAgICBpZiAoY2xhaW0gJiYgYmxhY2tMaXN0ZWRPdXRwb2ludHMpIHtcbiAgICAgIGxldCBibGFja0xpc3RlZCA9IGZhbHNlO1xuXG4gICAgICBibGFja0xpc3RlZCA9IGJsYWNrTGlzdGVkT3V0cG9pbnRzLnNvbWUoXG4gICAgICAgIG91dHBvaW50ID0+XG4gICAgICAgICAgKHNpZ25pbmdDaGFubmVsICYmIG91dHBvaW50LnR4aWQgPT09IHNpZ25pbmdDaGFubmVsLnR4aWQgJiYgb3V0cG9pbnQubm91dCA9PT0gc2lnbmluZ0NoYW5uZWwubm91dCkgfHxcbiAgICAgICAgICAob3V0cG9pbnQudHhpZCA9PT0gY2xhaW0udHhpZCAmJiBvdXRwb2ludC5ub3V0ID09PSBjbGFpbS5ub3V0KVxuICAgICAgKTtcbiAgICAgIHJldHVybiBibGFja0xpc3RlZDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgaXNSZXNvbHZpbmdVcmksIHJlc29sdmVVcmksIGNsYWltLCB1cmkgfSA9IHByb3BzO1xuXG4gICAgaWYgKCFpc1Jlc29sdmluZ1VyaSAmJiBjbGFpbSA9PT0gdW5kZWZpbmVkICYmIHVyaSkge1xuICAgICAgcmVzb2x2ZVVyaSh1cmkpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB1cmksIGNsYWltLCB0aXRsZSwgY2xhc3NOYW1lLCBhdXRvRW1iZWQsIGNoaWxkcmVuLCBpc1Jlc29sdmluZ1VyaSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1VucmVzb2x2ZWQgPSAoIWlzUmVzb2x2aW5nVXJpICYmICFjbGFpbSkgfHwgIWNsYWltO1xuICAgIGNvbnN0IGlzQmxhY2tsaXN0ZWQgPSB0aGlzLmlzQ2xhaW1CbGFja0xpc3RlZCgpO1xuXG4gICAgaWYgKGlzQmxhY2tsaXN0ZWQgfHwgaXNVbnJlc29sdmVkKSB7XG4gICAgICByZXR1cm4gPHNwYW4+e2NoaWxkcmVufTwvc3Bhbj47XG4gICAgfVxuXG4gICAgY29uc3QgeyBuYW1lOiBjbGFpbU5hbWUsIHZhbHVlX3R5cGU6IHZhbHVlVHlwZSB9ID0gY2xhaW07XG4gICAgY29uc3QgaXNDaGFubmVsID0gdmFsdWVUeXBlID09PSAnY2hhbm5lbCc7XG4gICAgY29uc3Qgc2hvd1ByZXZpZXcgPSBhdXRvRW1iZWQgPT09IHRydWUgJiYgIWlzVW5yZXNvbHZlZDtcblxuICAgICBpZihpc0NoYW5uZWwpe1xuICAgICAgIHJldHVybiA8VXJpSW5kaWNhdG9yIHVyaT17dXJpfSBsaW5rIGFkZFRvb2x0aXAgLz5cbiAgICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17Y2hpbGRyZW59IHRpdGxlPXt0aXRsZSB8fCBjbGFpbU5hbWV9IGJ1dHRvbj17J2xpbmsnfSBuYXZpZ2F0ZT17dXJpfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gLz5cbiAgICAgICAge3Nob3dQcmV2aWV3ICYmIDxQcmV2aWV3TGluayB1cmk9e3VyaX0gLz59XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xhaW1MaW5rO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBNUJBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBS0E7QUFDQTtBQUNBOzs7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7QUFqRUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBa0VBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimLink/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimList/index.js": -/*!******************************************!*\ - !*** ../ui/component/claimList/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/claimList/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1MaXN0L2luZGV4LmpzPzY4YWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBDbGFpbUxpc3QgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShDbGFpbUxpc3QpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimList/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimList/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/claimList/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ClaimList; });\n/* harmony import */ var component_app_view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! component/app/view */ \"../ui/component/app/view.jsx\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nvar SORT_NEW = 'new';\nvar SORT_OLD = 'old';\nfunction ClaimList(props) {\n var uris = props.uris,\n headerAltControls = props.headerAltControls,\n loading = props.loading,\n persistedStorageKey = props.persistedStorageKey,\n empty = props.empty,\n defaultSort = props.defaultSort,\n type = props.type,\n header = props.header,\n onScrollBottom = props.onScrollBottom,\n pageSize = props.pageSize,\n page = props.page,\n id = props.id,\n showHiddenByUser = props.showHiddenByUser,\n headerLabel = props.headerLabel,\n showUnresolvedClaims = props.showUnresolvedClaims,\n renderProperties = props.renderProperties,\n includeSupportAction = props.includeSupportAction,\n hideBlock = props.hideBlock,\n injectedItem = props.injectedItem,\n timedOutMessage = props.timedOutMessage;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])({}),\n _useState2 = _slicedToArray(_useState, 2),\n scrollBottomCbMap = _useState2[0],\n setScrollBottomCbMap = _useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(persistedStorageKey, SORT_NEW),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n currentSort = _usePersistedState2[0],\n setCurrentSort = _usePersistedState2[1];\n\n var timedOut = uris === null;\n var urisLength = uris && uris.length || 0;\n var sortedUris = urisLength > 0 && (currentSort === SORT_NEW ? uris : uris.slice().reverse()) || [];\n\n function handleSortChange() {\n setCurrentSort(currentSort === SORT_NEW ? SORT_OLD : SORT_NEW);\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n setScrollBottomCbMap({});\n }, [id, setScrollBottomCbMap]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n function handleScroll(e) {\n if (page && pageSize && onScrollBottom && !scrollBottomCbMap[page]) {\n var mainElWrapper = document.querySelector(\".\".concat(component_app_view__WEBPACK_IMPORTED_MODULE_0__[\"MAIN_WRAPPER_CLASS\"]));\n\n if (mainElWrapper && !loading && urisLength >= pageSize) {\n var contentWrapperAtBottomOfPage = window.scrollY + window.innerHeight >= mainElWrapper.offsetHeight;\n\n if (contentWrapperAtBottomOfPage) {\n onScrollBottom(); // Save that we've fetched this page to avoid weird stuff happening with fast scrolling\n\n setScrollBottomCbMap(_objectSpread({}, scrollBottomCbMap, _defineProperty({}, page, true)));\n }\n }\n }\n }\n\n if (onScrollBottom) {\n window.addEventListener('scroll', handleScroll);\n return function () {\n window.removeEventListener('scroll', handleScroll);\n };\n }\n }, [loading, onScrollBottom, urisLength, pageSize, page, setScrollBottomCbMap]);\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"section\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-list', {\n 'claim-list--small': type === 'small'\n })\n }, header !== false && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, headerLabel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"label\", {\n className: \"claim-list__header-label\"\n }, headerLabel), header && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-list__header', {\n 'section__title--small': type === 'small'\n })\n }, header, loading && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n type: \"small\"\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"claim-list__alt-controls\"\n }, headerAltControls, defaultSort && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_5__[\"FormField\"], {\n className: \"claim-list__dropdown\",\n type: \"select\",\n name: \"file_sort\",\n value: currentSort,\n onChange: handleSortChange\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: SORT_NEW\n }, __('Newest First')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: SORT_OLD\n }, __('Oldest First')))))), urisLength > 0 && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"ul\", {\n className: \"card ul--no-style\"\n }, sortedUris.map(function (uri, index) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, {\n key: uri\n }, injectedItem && index === 4 && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"li\", null, injectedItem), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri,\n type: type,\n includeSupportAction: includeSupportAction,\n showUnresolvedClaim: showUnresolvedClaims,\n properties: renderProperties || (type !== 'small' ? undefined : false),\n showUserBlocked: showHiddenByUser,\n hideBlock: hideBlock,\n customShouldHide: function customShouldHide(claim) {\n // Hack to hide spee.ch thumbnail publishes\n // If it meets these requirements, it was probably uploaded here:\n // https://github.com/lbryio/lbry-redux/blob/master/src/redux/actions/publish.js#L74-L79\n if (claim.name.length === 24 && !claim.name.includes(' ') && claim.value.author === 'Spee.ch') {\n return true;\n } else {\n return false;\n }\n }\n }));\n })), !timedOut && urisLength === 0 && !loading && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"empty empty--centered\"\n }, empty || __('No results')), timedOut && timedOutMessage && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"empty empty--centered\"\n }, timedOutMessage));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGlzdC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1MaXN0L3ZpZXcuanN4PzNiMjAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IE1BSU5fV1JBUFBFUl9DTEFTUyB9IGZyb20gJ2NvbXBvbmVudC9hcHAvdmlldyc7XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5cbmNvbnN0IFNPUlRfTkVXID0gJ25ldyc7XG5jb25zdCBTT1JUX09MRCA9ICdvbGQnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmlzOiBBcnJheTxzdHJpbmc+LFxuICBoZWFkZXI6IE5vZGUgfCBib29sZWFuLFxuICBoZWFkZXJBbHRDb250cm9sczogTm9kZSxcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgdHlwZTogc3RyaW5nLFxuICBlbXB0eT86IHN0cmluZyxcbiAgZGVmYXVsdFNvcnQ/OiBib29sZWFuLFxuICBvblNjcm9sbEJvdHRvbT86IGFueSA9PiB2b2lkLFxuICBwYWdlPzogbnVtYmVyLFxuICBwYWdlU2l6ZT86IG51bWJlcixcbiAgaWQ/OiBzdHJpbmcsXG4gIC8vIElmIHVzaW5nIHRoZSBkZWZhdWx0IGhlYWRlciwgdGhpcyBpcyBhIHVuaXF1ZSBJRCBuZWVkZWQgdG8gcGVyc2lzdCB0aGUgc3RhdGUgb2YgdGhlIGZpbHRlciBzZXR0aW5nXG4gIHBlcnNpc3RlZFN0b3JhZ2VLZXk/OiBzdHJpbmcsXG4gIHNob3dIaWRkZW5CeVVzZXI6IGJvb2xlYW4sXG4gIGhlYWRlckxhYmVsPzogc3RyaW5nIHwgTm9kZSxcbiAgc2hvd1VucmVzb2x2ZWRDbGFpbXM/OiBib29sZWFuLFxuICByZW5kZXJQcm9wZXJ0aWVzOiA/KENsYWltKSA9PiBOb2RlLFxuICBpbmNsdWRlU3VwcG9ydEFjdGlvbj86IGJvb2xlYW4sXG4gIGhpZGVCbG9jazogYm9vbGVhbixcbiAgaW5qZWN0ZWRJdGVtOiA/Tm9kZSxcbiAgdGltZWRPdXRNZXNzYWdlPzogTm9kZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENsYWltTGlzdChwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHVyaXMsXG4gICAgaGVhZGVyQWx0Q29udHJvbHMsXG4gICAgbG9hZGluZyxcbiAgICBwZXJzaXN0ZWRTdG9yYWdlS2V5LFxuICAgIGVtcHR5LFxuICAgIGRlZmF1bHRTb3J0LFxuICAgIHR5cGUsXG4gICAgaGVhZGVyLFxuICAgIG9uU2Nyb2xsQm90dG9tLFxuICAgIHBhZ2VTaXplLFxuICAgIHBhZ2UsXG4gICAgaWQsXG4gICAgc2hvd0hpZGRlbkJ5VXNlcixcbiAgICBoZWFkZXJMYWJlbCxcbiAgICBzaG93VW5yZXNvbHZlZENsYWltcyxcbiAgICByZW5kZXJQcm9wZXJ0aWVzLFxuICAgIGluY2x1ZGVTdXBwb3J0QWN0aW9uLFxuICAgIGhpZGVCbG9jayxcbiAgICBpbmplY3RlZEl0ZW0sXG4gICAgdGltZWRPdXRNZXNzYWdlLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtzY3JvbGxCb3R0b21DYk1hcCwgc2V0U2Nyb2xsQm90dG9tQ2JNYXBdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbY3VycmVudFNvcnQsIHNldEN1cnJlbnRTb3J0XSA9IHVzZVBlcnNpc3RlZFN0YXRlKHBlcnNpc3RlZFN0b3JhZ2VLZXksIFNPUlRfTkVXKTtcbiAgY29uc3QgdGltZWRPdXQgPSB1cmlzID09PSBudWxsO1xuICBjb25zdCB1cmlzTGVuZ3RoID0gKHVyaXMgJiYgdXJpcy5sZW5ndGgpIHx8IDA7XG4gIGNvbnN0IHNvcnRlZFVyaXMgPSAodXJpc0xlbmd0aCA+IDAgJiYgKGN1cnJlbnRTb3J0ID09PSBTT1JUX05FVyA/IHVyaXMgOiB1cmlzLnNsaWNlKCkucmV2ZXJzZSgpKSkgfHwgW107XG5cbiAgZnVuY3Rpb24gaGFuZGxlU29ydENoYW5nZSgpIHtcbiAgICBzZXRDdXJyZW50U29ydChjdXJyZW50U29ydCA9PT0gU09SVF9ORVcgPyBTT1JUX09MRCA6IFNPUlRfTkVXKTtcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2Nyb2xsQm90dG9tQ2JNYXAoe30pO1xuICB9LCBbaWQsIHNldFNjcm9sbEJvdHRvbUNiTWFwXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBoYW5kbGVTY3JvbGwoZSkge1xuICAgICAgaWYgKHBhZ2UgJiYgcGFnZVNpemUgJiYgb25TY3JvbGxCb3R0b20gJiYgIXNjcm9sbEJvdHRvbUNiTWFwW3BhZ2VdKSB7XG4gICAgICAgIGNvbnN0IG1haW5FbFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtNQUlOX1dSQVBQRVJfQ0xBU1N9YCk7XG5cbiAgICAgICAgaWYgKG1haW5FbFdyYXBwZXIgJiYgIWxvYWRpbmcgJiYgdXJpc0xlbmd0aCA+PSBwYWdlU2l6ZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyQXRCb3R0b21PZlBhZ2UgPSB3aW5kb3cuc2Nyb2xsWSArIHdpbmRvdy5pbm5lckhlaWdodCA+PSBtYWluRWxXcmFwcGVyLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgIGlmIChjb250ZW50V3JhcHBlckF0Qm90dG9tT2ZQYWdlKSB7XG4gICAgICAgICAgICBvblNjcm9sbEJvdHRvbSgpO1xuXG4gICAgICAgICAgICAvLyBTYXZlIHRoYXQgd2UndmUgZmV0Y2hlZCB0aGlzIHBhZ2UgdG8gYXZvaWQgd2VpcmQgc3R1ZmYgaGFwcGVuaW5nIHdpdGggZmFzdCBzY3JvbGxpbmdcbiAgICAgICAgICAgIHNldFNjcm9sbEJvdHRvbUNiTWFwKHsgLi4uc2Nyb2xsQm90dG9tQ2JNYXAsIFtwYWdlXTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob25TY3JvbGxCb3R0b20pIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbbG9hZGluZywgb25TY3JvbGxCb3R0b20sIHVyaXNMZW5ndGgsIHBhZ2VTaXplLCBwYWdlLCBzZXRTY3JvbGxCb3R0b21DYk1hcF0pO1xuXG4gIHJldHVybiAoXG4gICAgPHNlY3Rpb25cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2xhaW0tbGlzdCcsIHtcbiAgICAgICAgJ2NsYWltLWxpc3QtLXNtYWxsJzogdHlwZSA9PT0gJ3NtYWxsJyxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIHtoZWFkZXIgIT09IGZhbHNlICYmIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIHtoZWFkZXJMYWJlbCAmJiA8bGFiZWwgY2xhc3NOYW1lPVwiY2xhaW0tbGlzdF9faGVhZGVyLWxhYmVsXCI+e2hlYWRlckxhYmVsfTwvbGFiZWw+fVxuICAgICAgICAgIHtoZWFkZXIgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NsYWltLWxpc3RfX2hlYWRlcicsIHsgJ3NlY3Rpb25fX3RpdGxlLS1zbWFsbCc6IHR5cGUgPT09ICdzbWFsbCcgfSl9PlxuICAgICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgICB7bG9hZGluZyAmJiA8U3Bpbm5lciB0eXBlPVwic21hbGxcIiAvPn1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1saXN0X19hbHQtY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICB7aGVhZGVyQWx0Q29udHJvbHN9XG4gICAgICAgICAgICAgICAge2RlZmF1bHRTb3J0ICYmIChcbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2xhaW0tbGlzdF9fZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbGVfc29ydFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjdXJyZW50U29ydH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNvcnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9e1NPUlRfTkVXfT57X18oJ05ld2VzdCBGaXJzdCcpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXtTT1JUX09MRH0+e19fKCdPbGRlc3QgRmlyc3QnKX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG5cbiAgICAgIHt1cmlzTGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDx1bCBjbGFzc05hbWU9XCJjYXJkIHVsLS1uby1zdHlsZVwiPlxuICAgICAgICAgIHtzb3J0ZWRVcmlzLm1hcCgodXJpLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17dXJpfT5cbiAgICAgICAgICAgICAge2luamVjdGVkSXRlbSAmJiBpbmRleCA9PT0gNCAmJiA8bGk+e2luamVjdGVkSXRlbX08L2xpPn1cbiAgICAgICAgICAgICAgPENsYWltUHJldmlld1xuICAgICAgICAgICAgICAgIHVyaT17dXJpfVxuICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgICAgaW5jbHVkZVN1cHBvcnRBY3Rpb249e2luY2x1ZGVTdXBwb3J0QWN0aW9ufVxuICAgICAgICAgICAgICAgIHNob3dVbnJlc29sdmVkQ2xhaW09e3Nob3dVbnJlc29sdmVkQ2xhaW1zfVxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM9e3JlbmRlclByb3BlcnRpZXMgfHwgKHR5cGUgIT09ICdzbWFsbCcgPyB1bmRlZmluZWQgOiBmYWxzZSl9XG4gICAgICAgICAgICAgICAgc2hvd1VzZXJCbG9ja2VkPXtzaG93SGlkZGVuQnlVc2VyfVxuICAgICAgICAgICAgICAgIGhpZGVCbG9jaz17aGlkZUJsb2NrfVxuICAgICAgICAgICAgICAgIGN1c3RvbVNob3VsZEhpZGU9eyhjbGFpbTogU3RyZWFtQ2xhaW0pID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhY2sgdG8gaGlkZSBzcGVlLmNoIHRodW1ibmFpbCBwdWJsaXNoZXNcbiAgICAgICAgICAgICAgICAgIC8vIElmIGl0IG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cywgaXQgd2FzIHByb2JhYmx5IHVwbG9hZGVkIGhlcmU6XG4gICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktcmVkdXgvYmxvYi9tYXN0ZXIvc3JjL3JlZHV4L2FjdGlvbnMvcHVibGlzaC5qcyNMNzQtTDc5XG4gICAgICAgICAgICAgICAgICBpZiAoY2xhaW0ubmFtZS5sZW5ndGggPT09IDI0ICYmICFjbGFpbS5uYW1lLmluY2x1ZGVzKCcgJykgJiYgY2xhaW0udmFsdWUuYXV0aG9yID09PSAnU3BlZS5jaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdWw+XG4gICAgICApfVxuICAgICAgeyF0aW1lZE91dCAmJiB1cmlzTGVuZ3RoID09PSAwICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJlbXB0eSBlbXB0eS0tY2VudGVyZWRcIj57ZW1wdHkgfHwgX18oJ05vIHJlc3VsdHMnKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICB7dGltZWRPdXQgJiYgdGltZWRPdXRNZXNzYWdlICYmIDxkaXYgY2xhc3NOYW1lPVwiZW1wdHkgZW1wdHktLWNlbnRlcmVkXCI+e3RpbWVkT3V0TWVzc2FnZX08L2Rpdj59XG4gICAgPC9zZWN0aW9uPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUEwQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQXhCQTtBQTJCQTtBQUVBO0FBQ0E7QUFEQTtBQURBO0FBT0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQVVBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBakJBO0FBckNBO0FBNkRBO0FBQUE7QUFFQTtBQUFBO0FBR0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimList/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimListDiscover/index.js": -/*!**************************************************!*\ - !*** ../ui/component/claimListDiscover/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/tags */ \"../ui/redux/actions/tags.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/claimListDiscover/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n claimSearchByQuery: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimSearchByQuery\"])(state),\n loading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFetchingClaimSearch\"])(state),\n showNsfw: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_MATURE)(state),\n showReposts: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_REPOSTS)(state),\n hiddenUris: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state)\n };\n};\n\nvar perform = {\n doClaimSearch: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClaimSearch\"],\n doToggleTagFollowDesktop: redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__[\"doToggleTagFollowDesktop\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGlzdERpc2NvdmVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbUxpc3REaXNjb3Zlci9pbmRleC5qcz84ZTkyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBkb0NsYWltU2VhcmNoLFxuICBzZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnksXG4gIHNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2gsXG4gIHNlbGVjdEJsb2NrZWRDaGFubmVscyxcbiAgU0VUVElOR1MsXG4gIHNlbGVjdEZvbGxvd2VkVGFncyxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3RhZ3MnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IENsYWltTGlzdERpc2NvdmVyIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbiAgY2xhaW1TZWFyY2hCeVF1ZXJ5OiBzZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnkoc3RhdGUpLFxuICBsb2FkaW5nOiBzZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoKHN0YXRlKSxcbiAgc2hvd05zZnc6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlNIT1dfTUFUVVJFKShzdGF0ZSksXG4gIHNob3dSZXBvc3RzOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX1JFUE9TVFMpKHN0YXRlKSxcbiAgaGlkZGVuVXJpczogc2VsZWN0QmxvY2tlZENoYW5uZWxzKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0ge1xuICBkb0NsYWltU2VhcmNoLFxuICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoQ2xhaW1MaXN0RGlzY292ZXIpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimListDiscover/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimListDiscover/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/claimListDiscover/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var util_string__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! util/string */ \"../ui/util/string.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ClaimListDiscover(props) {\n var doClaimSearch = props.doClaimSearch,\n claimSearchByQuery = props.claimSearchByQuery,\n tags = props.tags,\n defaultTags = props.defaultTags,\n loading = props.loading,\n meta = props.meta,\n channelIds = props.channelIds,\n showNsfw = props.showNsfw,\n history = props.history,\n location = props.location,\n hiddenUris = props.hiddenUris,\n hiddenNsfwMessage = props.hiddenNsfwMessage,\n defaultOrderBy = props.defaultOrderBy,\n orderBy = props.orderBy,\n headerLabel = props.headerLabel,\n header = props.header,\n name = props.name,\n claimType = props.claimType,\n pageSize = props.pageSize,\n hideBlock = props.hideBlock,\n defaultClaimType = props.defaultClaimType,\n streamType = props.streamType,\n defaultStreamType = props.defaultStreamType,\n freshness = props.freshness,\n _props$defaultFreshne = props.defaultFreshness,\n defaultFreshness = _props$defaultFreshne === void 0 ? constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_WEEK\"] : _props$defaultFreshne,\n renderProperties = props.renderProperties,\n includeSupportAction = props.includeSupportAction,\n repostedClaimId = props.repostedClaimId,\n hideFilter = props.hideFilter,\n followedTags = props.followedTags,\n injectedItem = props.injectedItem;\n var didNavigateForward = history.action === 'PUSH';\n var search = location.search;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(1),\n _useState2 = _slicedToArray(_useState, 2),\n page = _useState2[0],\n setPage = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(),\n _useState4 = _slicedToArray(_useState3, 2),\n forceRefresh = _useState4[0],\n setForceRefresh = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n expanded = _useState6[0],\n setExpanded = _useState6[1];\n\n var followed = followedTags && followedTags.map(function (t) {\n return t.name;\n }) || [];\n var urlParams = new URLSearchParams(search);\n var tagsParam = // can be 'x,y,z' or 'x' or ['x','y'] or CS.CONSTANT\n tags && getParamFromTags(tags) || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]) !== null && urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]) || defaultTags && getParamFromTags(defaultTags);\n var orderParam = orderBy || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_KEY\"]) || defaultOrderBy || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TRENDING\"];\n var freshnessParam = freshness || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"]) || defaultFreshness;\n var contentTypeParam = urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"]);\n var claimTypeParam = claimType || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_TYPES\"].includes(contentTypeParam) && contentTypeParam || defaultClaimType || null;\n var streamTypeParam = streamType || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_TYPES\"].includes(contentTypeParam) && contentTypeParam || defaultStreamType || null;\n var durationParam = urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"]) || null;\n var showDuration = !(claimType && claimType === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_CHANNEL\"]);\n\n var isFiltered = function isFiltered() {\n return Boolean(urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"]) || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"]) || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"]) || urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]));\n };\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (isFiltered()) setExpanded(true); // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n var options = {\n page_size: pageSize || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"PAGE_SIZE\"],\n page: page,\n name: name,\n claim_type: claimType || undefined,\n // no_totals makes it so the sdk doesn't have to calculate total number pages for pagination\n // it's faster, but we will need to remove it if we start using total_pages\n no_totals: true,\n channel_ids: channelIds || [],\n not_channel_ids: // If channelIds were passed in, we don't need not_channel_ids\n !channelIds && hiddenUris && hiddenUris.length ? hiddenUris.map(function (hiddenUri) {\n return hiddenUri.split('#')[1];\n }) : [],\n not_tags: !showNsfw ? lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"MATURE_TAGS\"] : [],\n order_by: orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TRENDING\"] ? constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TRENDING_VALUE\"] : orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_NEW\"] ? constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_NEW_VALUE\"] : constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TOP_VALUE\"] // Sort by top\n\n };\n\n if (repostedClaimId) {\n // SDK chokes on reposted_claim_id of null or false, needs to not be present if no value\n options.reposted_claim_id = repostedClaimId;\n }\n\n if (orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TOP\"] && freshnessParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_ALL\"]) {\n options.release_time = \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_7___default()().subtract(1, freshnessParam).startOf('hour').unix()));\n } else if (orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_NEW\"] || orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TRENDING\"]) {\n // Warning - hack below\n // If users are following more than 10 channels or tags, limit results to stuff less than a year old\n // For more than 20, drop it down to 6 months\n // This helps with timeout issues for users that are following a ton of stuff\n // https://github.com/lbryio/lbry-sdk/issues/2420\n if (options.channel_ids && options.channel_ids.length > 20 || options.any_tags && options.any_tags.length > 20) {\n options.release_time = \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_7___default()().subtract(3, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_MONTH\"]).startOf('week').unix()));\n } else if (options.channel_ids && options.channel_ids.length > 10 || options.any_tags && options.any_tags.length > 10) {\n options.release_time = \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_7___default()().subtract(1, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_YEAR\"]).startOf('week').unix()));\n } else {\n // Hack for at least the New page until https://github.com/lbryio/lbry-sdk/issues/2591 is fixed\n options.release_time = \"<\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_7___default()().startOf('minute').unix()));\n }\n }\n\n if (durationParam) {\n if (durationParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_SHORT\"]) {\n options.duration = '<=1800';\n } else if (durationParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_LONG\"]) {\n options.duration = '>=1800';\n }\n }\n\n if (streamTypeParam) {\n if (streamTypeParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_ALL\"]) {\n options.stream_types = [streamTypeParam];\n }\n }\n\n if (claimTypeParam) {\n if (claimTypeParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_ALL\"]) {\n if (Array.isArray(claimTypeParam)) {\n options.claim_type = claimTypeParam;\n } else {\n options.claim_type = [claimTypeParam];\n }\n }\n }\n\n if (tagsParam) {\n if (tagsParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] && tagsParam !== '') {\n if (tagsParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]) {\n options.any_tags = followed;\n } else if (Array.isArray(tagsParam)) {\n options.any_tags = tagsParam;\n } else {\n options.any_tags = tagsParam.split(',');\n }\n }\n } // https://github.com/lbryio/lbry-desktop/issues/3774\n // if (!showReposts) {\n // if (Array.isArray(options.claim_type)) {\n // options.claim_type = options.claim_type.filter(claimType => claimType !== 'repost');\n // } else {\n // options.claim_type = ['stream', 'channel'];\n // }\n // }\n\n\n var hasMatureTags = tagsParam && tagsParam.split(',').some(function (t) {\n return lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"MATURE_TAGS\"].includes(t);\n });\n var claimSearchCacheQuery = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"createNormalizedClaimSearchKey\"])(options);\n var claimSearchResult = claimSearchByQuery[claimSearchCacheQuery];\n var shouldPerformSearch = claimSearchResult === undefined || didNavigateForward || !loading && claimSearchResult && claimSearchResult.length < constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"PAGE_SIZE\"] * page && claimSearchResult.length % constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"PAGE_SIZE\"] === 0; // Don't use the query from createNormalizedClaimSearchKey for the effect since that doesn't include page & release_time\n\n var optionsStringForEffect = JSON.stringify(options);\n var timedOutMessage = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n tokens: {\n again: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n label: __('try again in a few seconds.'),\n onClick: function onClick() {\n return setForceRefresh(Date.now());\n }\n })\n }\n }, \"Sorry, your request timed out. Modify your options or %again%\")), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n tokens: {\n contact_support: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n label: __('contact support'),\n href: \"https://lbry.com/faq/support\"\n })\n }\n }, \"If you continue to have issues, please %contact_support%.\")));\n\n function handleChange(change) {\n var url = buildUrl(change);\n setPage(1);\n history.push(url);\n }\n\n function getParamFromTags(t) {\n if (t === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] || t === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]) {\n return t;\n } else if (Array.isArray(t)) {\n return t.join(',');\n }\n }\n\n function buildUrl(delta) {\n var newUrlParams = new URLSearchParams();\n constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"KEYS\"].forEach(function (k) {\n // $FlowFixMe append() can't take null as second arg, but get() can return null\n if (urlParams.get(k) !== null) newUrlParams.append(k, urlParams.get(k));\n });\n\n switch (delta.key) {\n case constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_KEY\"]:\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_KEY\"], delta.value);\n break;\n\n case constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"]:\n if (delta.value === defaultFreshness || delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_DEFAULT\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"]);\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"], delta.value);\n }\n\n break;\n\n case constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"]:\n if (delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_CHANNEL\"] || delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_REPOST\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"]);\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"], delta.value);\n } else if (delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_ALL\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"]);\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"], delta.value);\n }\n\n break;\n\n case constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"]:\n if (delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_ALL\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"]);\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"], delta.value);\n }\n\n break;\n\n case constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]:\n if (delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"]) {\n if (defaultTags === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]);\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"], delta.value);\n }\n } else if (delta.value === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]) {\n if (defaultTags === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]) {\n newUrlParams[\"delete\"](constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"]);\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"], delta.value); // redundant but special\n }\n } else {\n newUrlParams.set(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"], delta.value);\n }\n\n break;\n }\n\n return \"?\".concat(newUrlParams.toString());\n }\n\n function handleScrollBottom() {\n if (!loading) {\n setPage(page + 1);\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (shouldPerformSearch) {\n var searchOptions = JSON.parse(optionsStringForEffect);\n doClaimSearch(searchOptions);\n }\n }, [doClaimSearch, shouldPerformSearch, optionsStringForEffect, forceRefresh]);\n var defaultHeader = repostedClaimId ? null : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__wrapper'\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__top'\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__top-row'\n }, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TYPES\"].map(function (type) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: type,\n button: \"alt\",\n onClick: function onClick(e) {\n return handleChange({\n key: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_KEY\"],\n value: type\n });\n },\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(\"button-toggle button-toggle--\".concat(type), {\n 'button-toggle--active': orderParam === type\n }),\n disabled: orderBy,\n icon: Object(util_string__WEBPACK_IMPORTED_MODULE_10__[\"toCapitalCase\"])(type),\n label: __(Object(util_string__WEBPACK_IMPORTED_MODULE_10__[\"toCapitalCase\"])(type))\n });\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, !hideFilter && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: 'alt',\n \"aria-label\": __('More'),\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(\"button-toggle button-toggle--top button-toggle--more\", {\n 'button-toggle--custom': isFiltered()\n }),\n icon: Object(util_string__WEBPACK_IMPORTED_MODULE_10__[\"toCapitalCase\"])(constants_icons__WEBPACK_IMPORTED_MODULE_12__[\"SLIDERS\"]),\n onClick: function onClick() {\n return setExpanded(!expanded);\n }\n }))), expanded && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('card--inline', \"claim-search__menus\")\n }, orderParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"ORDER_BY_TOP\"] && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__input-container'\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_5__[\"FormField\"], {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('claim-search__dropdown', {\n 'claim-search__dropdown--selected': freshnessParam !== defaultFreshness\n }),\n type: \"select\",\n name: \"trending_time\",\n label: __('How Fresh'),\n value: freshnessParam,\n onChange: function onChange(e) {\n return handleChange({\n key: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_KEY\"],\n value: e.target.value\n });\n }\n }, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_TYPES\"].map(function (time) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: time,\n value: time\n }, time === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_DAY\"] && __('Today'), time !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_ALL\"] && time !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_DEFAULT\"] && time !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_DAY\"] && __('This ' + Object(util_string__WEBPACK_IMPORTED_MODULE_10__[\"toCapitalCase\"])(time))\n /* yes, concat before i18n, since it is read from const */\n , time === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_ALL\"] && __('All time'), time === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FRESH_DEFAULT\"] && __('Default'));\n }))), !claimType && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('claim-search__input-container', {\n 'claim-search__input-container--selected': contentTypeParam\n })\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_5__[\"FormField\"], {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('claim-search__dropdown', {\n 'claim-search__dropdown--selected': contentTypeParam\n }),\n type: \"select\",\n name: \"claimType\",\n label: __('Content Type'),\n value: contentTypeParam || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_ALL\"],\n onChange: function onChange(e) {\n return handleChange({\n key: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_KEY\"],\n value: e.target.value\n });\n }\n }, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_TYPES\"].map(function (type) {\n if (type !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_CHANNEL\"] || type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_CHANNEL\"] && !channelIds) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: type,\n value: type\n }, type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_CHANNEL\"] && __('Channel'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CLAIM_REPOST\"] && __('Repost'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_VIDEO\"] && __('Video'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_AUDIO\"] && __('Audio'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_IMAGE\"] && __('Image'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_MODEL\"] && __('Model'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_BINARY\"] && __('Other'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_DOCUMENT\"] && __('Document'), type === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"CONTENT_ALL\"] && __('Any'));\n }\n }))), showDuration && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__input-container'\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_5__[\"FormField\"], {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('claim-search__dropdown', {\n 'claim-search__dropdown--selected': durationParam\n }),\n label: __('Duration'),\n type: \"select\",\n name: \"duration\",\n disabled: !(contentTypeParam === null || streamTypeParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_AUDIO\"] || streamTypeParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"FILE_VIDEO\"]),\n value: durationParam || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_ALL\"],\n onChange: function onChange(e) {\n return handleChange({\n key: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_KEY\"],\n value: e.target.value\n });\n }\n }, constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_TYPES\"].map(function (dur) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: dur,\n value: dur\n }, dur === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_SHORT\"] && __('Short'), dur === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_LONG\"] && __('Long'), dur === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"DURATION_ALL\"] && __('Any'));\n }))), !tags && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: 'claim-search__input-container'\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_5__[\"FormField\"], {\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()('claim-search__dropdown', {\n 'claim-search__dropdown--selected': (!defaultTags || defaultTags === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"]) && tagsParam && tagsParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] || defaultTags === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"] && tagsParam !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]\n }),\n label: __('Tags'),\n type: \"select\",\n name: \"tags\",\n value: tagsParam || constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"],\n onChange: function onChange(e) {\n return handleChange({\n key: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_KEY\"],\n value: e.target.value\n });\n }\n }, [constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"], constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"]].concat(_toConsumableArray(followed), _toConsumableArray(followed.includes(tagsParam) || tagsParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] || tagsParam === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"] ? [] : [tagsParam])).map(function (tag) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: tag,\n value: tag,\n className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({\n 'claim-search__input-special': !followed.includes(tag)\n })\n }, followed.includes(tag) && typeof tag === 'string' && Object(util_string__WEBPACK_IMPORTED_MODULE_10__[\"toCapitalCase\"])(__(tag)), tag === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] && __('Any'), tag === constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"] && __('Following'), !followed.includes(tag) && tag !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_ALL\"] && tag !== constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"TAGS_FOLLOWED\"] && __('Other'));\n })))))), hasMatureTags && hiddenNsfwMessage);\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: claimSearchCacheQuery,\n loading: loading,\n uris: claimSearchResult,\n header: header || defaultHeader,\n headerLabel: headerLabel,\n headerAltControls: meta,\n onScrollBottom: handleScrollBottom,\n page: page,\n pageSize: constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"PAGE_SIZE\"],\n timedOutMessage: timedOutMessage,\n renderProperties: renderProperties,\n includeSupportAction: includeSupportAction,\n hideBlock: hideBlock,\n injectedItem: injectedItem\n }), loading && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card\"\n }, new Array(constants_claim_search__WEBPACK_IMPORTED_MODULE_3__[\"PAGE_SIZE\"]).fill(1).map(function (x, i) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n key: i,\n placeholder: \"loading\"\n });\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(ClaimListDiscover));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltTGlzdERpc2NvdmVyL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbUxpc3REaXNjb3Zlci92aWV3LmpzeD8wN2Y4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgeyBjcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXksIE1BVFVSRV9UQUdTIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBDbGFpbUxpc3QgZnJvbSAnY29tcG9uZW50L2NsYWltTGlzdCc7XG5pbXBvcnQgQ2xhaW1QcmV2aWV3IGZyb20gJ2NvbXBvbmVudC9jbGFpbVByZXZpZXcnO1xuaW1wb3J0IHsgdG9DYXBpdGFsQ2FzZSB9IGZyb20gJ3V0aWwvc3RyaW5nJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpczogQXJyYXk8c3RyaW5nPixcbiAgc3Vic2NyaWJlZENoYW5uZWxzOiBBcnJheTxTdWJzY3JpcHRpb24+LFxuICBkb0NsYWltU2VhcmNoOiAoe30pID0+IHZvaWQsXG4gIGxvYWRpbmc6IGJvb2xlYW4sXG4gIHBlcnNvbmFsVmlldzogYm9vbGVhbixcbiAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wOiBzdHJpbmcgPT4gdm9pZCxcbiAgbWV0YT86IE5vZGUsXG4gIHNob3dOc2Z3OiBib29sZWFuLFxuICAvLyBzaG93UmVwb3N0czogYm9vbGVhbixcbiAgaGlzdG9yeTogeyBhY3Rpb246IHN0cmluZywgcHVzaDogc3RyaW5nID0+IHZvaWQsIHJlcGxhY2U6IHN0cmluZyA9PiB2b2lkIH0sXG4gIGxvY2F0aW9uOiB7IHNlYXJjaDogc3RyaW5nLCBwYXRobmFtZTogc3RyaW5nIH0sXG4gIGNsYWltU2VhcmNoQnlRdWVyeToge1xuICAgIFtzdHJpbmddOiBBcnJheTxzdHJpbmc+LFxuICB9LFxuICBoaWRkZW5VcmlzOiBBcnJheTxzdHJpbmc+LFxuICBoaWRkZW5Oc2Z3TWVzc2FnZT86IE5vZGUsXG4gIGNoYW5uZWxJZHM/OiBBcnJheTxzdHJpbmc+LFxuICB0YWdzOiBzdHJpbmcsIC8vIHRoZXNlIGFyZSBqdXN0IGdvaW5nIHRvIGJlIHN0cmluZy4gcGFzcyBhIENTViBpZiB5b3Ugd2FudCBtdWx0aVxuICBkZWZhdWx0VGFnczogc3RyaW5nLFxuICBvcmRlckJ5PzogQXJyYXk8c3RyaW5nPixcbiAgZGVmYXVsdE9yZGVyQnk/OiBzdHJpbmcsXG4gIGZyZXNobmVzcz86IHN0cmluZyxcbiAgZGVmYXVsdEZyZXNobmVzcz86IHN0cmluZyxcbiAgaGVhZGVyPzogTm9kZSxcbiAgaGVhZGVyTGFiZWw/OiBzdHJpbmcgfCBOb2RlLFxuICBuYW1lPzogc3RyaW5nLFxuICBoaWRlQmxvY2s/OiBib29sZWFuLFxuICBoaWRlRmlsdGVyPzogYm9vbGVhbixcbiAgY2xhaW1UeXBlPzogQXJyYXk8c3RyaW5nPixcbiAgZGVmYXVsdENsYWltVHlwZT86IEFycmF5PHN0cmluZz4sXG4gIHN0cmVhbVR5cGU/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICBkZWZhdWx0U3RyZWFtVHlwZT86IHN0cmluZyB8IEFycmF5PHN0cmluZz4sXG4gIHJlbmRlclByb3BlcnRpZXM/OiBDbGFpbSA9PiBOb2RlLFxuICBpbmNsdWRlU3VwcG9ydEFjdGlvbj86IGJvb2xlYW4sXG4gIHJlcG9zdGVkQ2xhaW1JZD86IHN0cmluZyxcbiAgcGFnZVNpemU/OiBudW1iZXIsXG4gIGZvbGxvd2VkVGFncz86IEFycmF5PFRhZz4sXG4gIGluamVjdGVkSXRlbTogP05vZGUsXG59O1xuXG5mdW5jdGlvbiBDbGFpbUxpc3REaXNjb3Zlcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGRvQ2xhaW1TZWFyY2gsXG4gICAgY2xhaW1TZWFyY2hCeVF1ZXJ5LFxuICAgIHRhZ3MsXG4gICAgZGVmYXVsdFRhZ3MsXG4gICAgbG9hZGluZyxcbiAgICBtZXRhLFxuICAgIGNoYW5uZWxJZHMsXG4gICAgc2hvd05zZncsXG4gICAgLy8gc2hvd1JlcG9zdHMsXG4gICAgaGlzdG9yeSxcbiAgICBsb2NhdGlvbixcbiAgICBoaWRkZW5VcmlzLFxuICAgIGhpZGRlbk5zZndNZXNzYWdlLFxuICAgIGRlZmF1bHRPcmRlckJ5LFxuICAgIG9yZGVyQnksXG4gICAgaGVhZGVyTGFiZWwsXG4gICAgaGVhZGVyLFxuICAgIG5hbWUsXG4gICAgY2xhaW1UeXBlLFxuICAgIHBhZ2VTaXplLFxuICAgIGhpZGVCbG9jayxcbiAgICBkZWZhdWx0Q2xhaW1UeXBlLFxuICAgIHN0cmVhbVR5cGUsXG4gICAgZGVmYXVsdFN0cmVhbVR5cGUsXG4gICAgZnJlc2huZXNzLFxuICAgIGRlZmF1bHRGcmVzaG5lc3MgPSBDUy5GUkVTSF9XRUVLLFxuICAgIHJlbmRlclByb3BlcnRpZXMsXG4gICAgaW5jbHVkZVN1cHBvcnRBY3Rpb24sXG4gICAgcmVwb3N0ZWRDbGFpbUlkLFxuICAgIGhpZGVGaWx0ZXIsXG4gICAgZm9sbG93ZWRUYWdzLFxuICAgIGluamVjdGVkSXRlbSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkaWROYXZpZ2F0ZUZvcndhcmQgPSBoaXN0b3J5LmFjdGlvbiA9PT0gJ1BVU0gnO1xuICBjb25zdCB7IHNlYXJjaCB9ID0gbG9jYXRpb247XG5cbiAgY29uc3QgW3BhZ2UsIHNldFBhZ2VdID0gdXNlU3RhdGUoMSk7XG4gIGNvbnN0IFtmb3JjZVJlZnJlc2gsIHNldEZvcmNlUmVmcmVzaF0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZm9sbG93ZWQgPSAoZm9sbG93ZWRUYWdzICYmIGZvbGxvd2VkVGFncy5tYXAodCA9PiB0Lm5hbWUpKSB8fCBbXTtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCB0YWdzUGFyYW0gPSAvLyBjYW4gYmUgJ3gseSx6JyBvciAneCcgb3IgWyd4JywneSddIG9yIENTLkNPTlNUQU5UXG4gICAgKHRhZ3MgJiYgZ2V0UGFyYW1Gcm9tVGFncyh0YWdzKSkgfHxcbiAgICAodXJsUGFyYW1zLmdldChDUy5UQUdTX0tFWSkgIT09IG51bGwgJiYgdXJsUGFyYW1zLmdldChDUy5UQUdTX0tFWSkpIHx8XG4gICAgKGRlZmF1bHRUYWdzICYmIGdldFBhcmFtRnJvbVRhZ3MoZGVmYXVsdFRhZ3MpKTtcbiAgY29uc3Qgb3JkZXJQYXJhbSA9IG9yZGVyQnkgfHwgdXJsUGFyYW1zLmdldChDUy5PUkRFUl9CWV9LRVkpIHx8IGRlZmF1bHRPcmRlckJ5IHx8IENTLk9SREVSX0JZX1RSRU5ESU5HO1xuICBjb25zdCBmcmVzaG5lc3NQYXJhbSA9IGZyZXNobmVzcyB8fCB1cmxQYXJhbXMuZ2V0KENTLkZSRVNIX0tFWSkgfHwgZGVmYXVsdEZyZXNobmVzcztcbiAgY29uc3QgY29udGVudFR5cGVQYXJhbSA9IHVybFBhcmFtcy5nZXQoQ1MuQ09OVEVOVF9LRVkpO1xuICBjb25zdCBjbGFpbVR5cGVQYXJhbSA9XG4gICAgY2xhaW1UeXBlIHx8IChDUy5DTEFJTV9UWVBFUy5pbmNsdWRlcyhjb250ZW50VHlwZVBhcmFtKSAmJiBjb250ZW50VHlwZVBhcmFtKSB8fCBkZWZhdWx0Q2xhaW1UeXBlIHx8IG51bGw7XG4gIGNvbnN0IHN0cmVhbVR5cGVQYXJhbSA9XG4gICAgc3RyZWFtVHlwZSB8fCAoQ1MuRklMRV9UWVBFUy5pbmNsdWRlcyhjb250ZW50VHlwZVBhcmFtKSAmJiBjb250ZW50VHlwZVBhcmFtKSB8fCBkZWZhdWx0U3RyZWFtVHlwZSB8fCBudWxsO1xuICBjb25zdCBkdXJhdGlvblBhcmFtID0gdXJsUGFyYW1zLmdldChDUy5EVVJBVElPTl9LRVkpIHx8IG51bGw7XG5cbiAgY29uc3Qgc2hvd0R1cmF0aW9uID0gIShjbGFpbVR5cGUgJiYgY2xhaW1UeXBlID09PSBDUy5DTEFJTV9DSEFOTkVMKTtcbiAgY29uc3QgaXNGaWx0ZXJlZCA9ICgpID0+XG4gICAgQm9vbGVhbihcbiAgICAgIHVybFBhcmFtcy5nZXQoQ1MuRlJFU0hfS0VZKSB8fFxuICAgICAgICB1cmxQYXJhbXMuZ2V0KENTLkNPTlRFTlRfS0VZKSB8fFxuICAgICAgICB1cmxQYXJhbXMuZ2V0KENTLkRVUkFUSU9OX0tFWSkgfHxcbiAgICAgICAgdXJsUGFyYW1zLmdldChDUy5UQUdTX0tFWSlcbiAgICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRmlsdGVyZWQoKSkgc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgbGV0IG9wdGlvbnM6IHtcbiAgICBwYWdlX3NpemU6IG51bWJlcixcbiAgICBwYWdlOiBudW1iZXIsXG4gICAgbm9fdG90YWxzOiBib29sZWFuLFxuICAgIGFueV90YWdzPzogQXJyYXk8c3RyaW5nPixcbiAgICBub3RfdGFnczogQXJyYXk8c3RyaW5nPixcbiAgICBjaGFubmVsX2lkczogQXJyYXk8c3RyaW5nPixcbiAgICBub3RfY2hhbm5lbF9pZHM6IEFycmF5PHN0cmluZz4sXG4gICAgb3JkZXJfYnk6IEFycmF5PHN0cmluZz4sXG4gICAgcmVsZWFzZV90aW1lPzogc3RyaW5nLFxuICAgIGNsYWltX3R5cGU/OiBBcnJheTxzdHJpbmc+LFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgZHVyYXRpb24/OiBzdHJpbmcsXG4gICAgcmVwb3N0ZWRfY2xhaW1faWQ/OiBzdHJpbmcsXG4gICAgc3RyZWFtX3R5cGVzPzogYW55LFxuICB9ID0ge1xuICAgIHBhZ2Vfc2l6ZTogcGFnZVNpemUgfHwgQ1MuUEFHRV9TSVpFLFxuICAgIHBhZ2UsXG4gICAgbmFtZSxcbiAgICBjbGFpbV90eXBlOiBjbGFpbVR5cGUgfHwgdW5kZWZpbmVkLFxuICAgIC8vIG5vX3RvdGFscyBtYWtlcyBpdCBzbyB0aGUgc2RrIGRvZXNuJ3QgaGF2ZSB0byBjYWxjdWxhdGUgdG90YWwgbnVtYmVyIHBhZ2VzIGZvciBwYWdpbmF0aW9uXG4gICAgLy8gaXQncyBmYXN0ZXIsIGJ1dCB3ZSB3aWxsIG5lZWQgdG8gcmVtb3ZlIGl0IGlmIHdlIHN0YXJ0IHVzaW5nIHRvdGFsX3BhZ2VzXG4gICAgbm9fdG90YWxzOiB0cnVlLFxuICAgIGNoYW5uZWxfaWRzOiBjaGFubmVsSWRzIHx8IFtdLFxuICAgIG5vdF9jaGFubmVsX2lkczpcbiAgICAgIC8vIElmIGNoYW5uZWxJZHMgd2VyZSBwYXNzZWQgaW4sIHdlIGRvbid0IG5lZWQgbm90X2NoYW5uZWxfaWRzXG4gICAgICAhY2hhbm5lbElkcyAmJiBoaWRkZW5VcmlzICYmIGhpZGRlblVyaXMubGVuZ3RoID8gaGlkZGVuVXJpcy5tYXAoaGlkZGVuVXJpID0+IGhpZGRlblVyaS5zcGxpdCgnIycpWzFdKSA6IFtdLFxuICAgIG5vdF90YWdzOiAhc2hvd05zZncgPyBNQVRVUkVfVEFHUyA6IFtdLFxuICAgIG9yZGVyX2J5OlxuICAgICAgb3JkZXJQYXJhbSA9PT0gQ1MuT1JERVJfQllfVFJFTkRJTkdcbiAgICAgICAgPyBDUy5PUkRFUl9CWV9UUkVORElOR19WQUxVRVxuICAgICAgICA6IG9yZGVyUGFyYW0gPT09IENTLk9SREVSX0JZX05FV1xuICAgICAgICA/IENTLk9SREVSX0JZX05FV19WQUxVRVxuICAgICAgICA6IENTLk9SREVSX0JZX1RPUF9WQUxVRSwgLy8gU29ydCBieSB0b3BcbiAgfTtcblxuICBpZiAocmVwb3N0ZWRDbGFpbUlkKSB7XG4gICAgLy8gU0RLIGNob2tlcyBvbiByZXBvc3RlZF9jbGFpbV9pZCBvZiBudWxsIG9yIGZhbHNlLCBuZWVkcyB0byBub3QgYmUgcHJlc2VudCBpZiBubyB2YWx1ZVxuICAgIG9wdGlvbnMucmVwb3N0ZWRfY2xhaW1faWQgPSByZXBvc3RlZENsYWltSWQ7XG4gIH1cblxuICBpZiAob3JkZXJQYXJhbSA9PT0gQ1MuT1JERVJfQllfVE9QICYmIGZyZXNobmVzc1BhcmFtICE9PSBDUy5GUkVTSF9BTEwpIHtcbiAgICBvcHRpb25zLnJlbGVhc2VfdGltZSA9IGA+JHtNYXRoLmZsb29yKFxuICAgICAgbW9tZW50KClcbiAgICAgICAgLnN1YnRyYWN0KDEsIGZyZXNobmVzc1BhcmFtKVxuICAgICAgICAuc3RhcnRPZignaG91cicpXG4gICAgICAgIC51bml4KClcbiAgICApfWA7XG4gIH0gZWxzZSBpZiAob3JkZXJQYXJhbSA9PT0gQ1MuT1JERVJfQllfTkVXIHx8IG9yZGVyUGFyYW0gPT09IENTLk9SREVSX0JZX1RSRU5ESU5HKSB7XG4gICAgLy8gV2FybmluZyAtIGhhY2sgYmVsb3dcbiAgICAvLyBJZiB1c2VycyBhcmUgZm9sbG93aW5nIG1vcmUgdGhhbiAxMCBjaGFubmVscyBvciB0YWdzLCBsaW1pdCByZXN1bHRzIHRvIHN0dWZmIGxlc3MgdGhhbiBhIHllYXIgb2xkXG4gICAgLy8gRm9yIG1vcmUgdGhhbiAyMCwgZHJvcCBpdCBkb3duIHRvIDYgbW9udGhzXG4gICAgLy8gVGhpcyBoZWxwcyB3aXRoIHRpbWVvdXQgaXNzdWVzIGZvciB1c2VycyB0aGF0IGFyZSBmb2xsb3dpbmcgYSB0b24gb2Ygc3R1ZmZcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktc2RrL2lzc3Vlcy8yNDIwXG4gICAgaWYgKFxuICAgICAgKG9wdGlvbnMuY2hhbm5lbF9pZHMgJiYgb3B0aW9ucy5jaGFubmVsX2lkcy5sZW5ndGggPiAyMCkgfHxcbiAgICAgIChvcHRpb25zLmFueV90YWdzICYmIG9wdGlvbnMuYW55X3RhZ3MubGVuZ3RoID4gMjApXG4gICAgKSB7XG4gICAgICBvcHRpb25zLnJlbGVhc2VfdGltZSA9IGA+JHtNYXRoLmZsb29yKFxuICAgICAgICBtb21lbnQoKVxuICAgICAgICAgIC5zdWJ0cmFjdCgzLCBDUy5GUkVTSF9NT05USClcbiAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgLnVuaXgoKVxuICAgICAgKX1gO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAob3B0aW9ucy5jaGFubmVsX2lkcyAmJiBvcHRpb25zLmNoYW5uZWxfaWRzLmxlbmd0aCA+IDEwKSB8fFxuICAgICAgKG9wdGlvbnMuYW55X3RhZ3MgJiYgb3B0aW9ucy5hbnlfdGFncy5sZW5ndGggPiAxMClcbiAgICApIHtcbiAgICAgIG9wdGlvbnMucmVsZWFzZV90aW1lID0gYD4ke01hdGguZmxvb3IoXG4gICAgICAgIG1vbWVudCgpXG4gICAgICAgICAgLnN1YnRyYWN0KDEsIENTLkZSRVNIX1lFQVIpXG4gICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgIC51bml4KClcbiAgICAgICl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFjayBmb3IgYXQgbGVhc3QgdGhlIE5ldyBwYWdlIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vbGJyeS1zZGsvaXNzdWVzLzI1OTEgaXMgZml4ZWRcbiAgICAgIG9wdGlvbnMucmVsZWFzZV90aW1lID0gYDwke01hdGguZmxvb3IoXG4gICAgICAgIG1vbWVudCgpXG4gICAgICAgICAgLnN0YXJ0T2YoJ21pbnV0ZScpXG4gICAgICAgICAgLnVuaXgoKVxuICAgICAgKX1gO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkdXJhdGlvblBhcmFtKSB7XG4gICAgaWYgKGR1cmF0aW9uUGFyYW0gPT09IENTLkRVUkFUSU9OX1NIT1JUKSB7XG4gICAgICBvcHRpb25zLmR1cmF0aW9uID0gJzw9MTgwMCc7XG4gICAgfSBlbHNlIGlmIChkdXJhdGlvblBhcmFtID09PSBDUy5EVVJBVElPTl9MT05HKSB7XG4gICAgICBvcHRpb25zLmR1cmF0aW9uID0gJz49MTgwMCc7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0cmVhbVR5cGVQYXJhbSkge1xuICAgIGlmIChzdHJlYW1UeXBlUGFyYW0gIT09IENTLkNPTlRFTlRfQUxMKSB7XG4gICAgICBvcHRpb25zLnN0cmVhbV90eXBlcyA9IFtzdHJlYW1UeXBlUGFyYW1dO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjbGFpbVR5cGVQYXJhbSkge1xuICAgIGlmIChjbGFpbVR5cGVQYXJhbSAhPT0gQ1MuQ09OVEVOVF9BTEwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNsYWltVHlwZVBhcmFtKSkge1xuICAgICAgICBvcHRpb25zLmNsYWltX3R5cGUgPSBjbGFpbVR5cGVQYXJhbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuY2xhaW1fdHlwZSA9IFtjbGFpbVR5cGVQYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhZ3NQYXJhbSkge1xuICAgIGlmICh0YWdzUGFyYW0gIT09IENTLlRBR1NfQUxMICYmIHRhZ3NQYXJhbSAhPT0gJycpIHtcbiAgICAgIGlmICh0YWdzUGFyYW0gPT09IENTLlRBR1NfRk9MTE9XRUQpIHtcbiAgICAgICAgb3B0aW9ucy5hbnlfdGFncyA9IGZvbGxvd2VkO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhZ3NQYXJhbSkpIHtcbiAgICAgICAgb3B0aW9ucy5hbnlfdGFncyA9IHRhZ3NQYXJhbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuYW55X3RhZ3MgPSB0YWdzUGFyYW0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LWRlc2t0b3AvaXNzdWVzLzM3NzRcbiAgLy8gaWYgKCFzaG93UmVwb3N0cykge1xuICAvLyAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuY2xhaW1fdHlwZSkpIHtcbiAgLy8gICAgIG9wdGlvbnMuY2xhaW1fdHlwZSA9IG9wdGlvbnMuY2xhaW1fdHlwZS5maWx0ZXIoY2xhaW1UeXBlID0+IGNsYWltVHlwZSAhPT0gJ3JlcG9zdCcpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBvcHRpb25zLmNsYWltX3R5cGUgPSBbJ3N0cmVhbScsICdjaGFubmVsJ107XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgY29uc3QgaGFzTWF0dXJlVGFncyA9IHRhZ3NQYXJhbSAmJiB0YWdzUGFyYW0uc3BsaXQoJywnKS5zb21lKHQgPT4gTUFUVVJFX1RBR1MuaW5jbHVkZXModCkpO1xuICBjb25zdCBjbGFpbVNlYXJjaENhY2hlUXVlcnkgPSBjcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXkob3B0aW9ucyk7XG4gIGNvbnN0IGNsYWltU2VhcmNoUmVzdWx0ID0gY2xhaW1TZWFyY2hCeVF1ZXJ5W2NsYWltU2VhcmNoQ2FjaGVRdWVyeV07XG5cbiAgY29uc3Qgc2hvdWxkUGVyZm9ybVNlYXJjaCA9XG4gICAgY2xhaW1TZWFyY2hSZXN1bHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIGRpZE5hdmlnYXRlRm9yd2FyZCB8fFxuICAgICghbG9hZGluZyAmJlxuICAgICAgY2xhaW1TZWFyY2hSZXN1bHQgJiZcbiAgICAgIGNsYWltU2VhcmNoUmVzdWx0Lmxlbmd0aCA8IENTLlBBR0VfU0laRSAqIHBhZ2UgJiZcbiAgICAgIGNsYWltU2VhcmNoUmVzdWx0Lmxlbmd0aCAlIENTLlBBR0VfU0laRSA9PT0gMCk7XG5cbiAgLy8gRG9uJ3QgdXNlIHRoZSBxdWVyeSBmcm9tIGNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleSBmb3IgdGhlIGVmZmVjdCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBwYWdlICYgcmVsZWFzZV90aW1lXG4gIGNvbnN0IG9wdGlvbnNTdHJpbmdGb3JFZmZlY3QgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcblxuICBjb25zdCB0aW1lZE91dE1lc3NhZ2UgPSAoXG4gICAgPGRpdj5cbiAgICAgIDxwPlxuICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgIGFnYWluOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICBsYWJlbD17X18oJ3RyeSBhZ2FpbiBpbiBhIGZldyBzZWNvbmRzLicpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEZvcmNlUmVmcmVzaChEYXRlLm5vdygpKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIFNvcnJ5LCB5b3VyIHJlcXVlc3QgdGltZWQgb3V0LiBNb2RpZnkgeW91ciBvcHRpb25zIG9yICVhZ2FpbiVcbiAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgIGNvbnRhY3Rfc3VwcG9ydDogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdjb250YWN0IHN1cHBvcnQnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3N1cHBvcnRcIiAvPixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgSWYgeW91IGNvbnRpbnVlIHRvIGhhdmUgaXNzdWVzLCBwbGVhc2UgJWNvbnRhY3Rfc3VwcG9ydCUuXG4gICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGNoYW5nZSkge1xuICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKGNoYW5nZSk7XG4gICAgc2V0UGFnZSgxKTtcbiAgICBoaXN0b3J5LnB1c2godXJsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhcmFtRnJvbVRhZ3ModCkge1xuICAgIGlmICh0ID09PSBDUy5UQUdTX0FMTCB8fCB0ID09PSBDUy5UQUdTX0ZPTExPV0VEKSB7XG4gICAgICByZXR1cm4gdDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgIHJldHVybiB0LmpvaW4oJywnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFVybChkZWx0YSkge1xuICAgIGNvbnN0IG5ld1VybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBDUy5LRVlTLmZvckVhY2goayA9PiB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIGFwcGVuZCgpIGNhbid0IHRha2UgbnVsbCBhcyBzZWNvbmQgYXJnLCBidXQgZ2V0KCkgY2FuIHJldHVybiBudWxsXG4gICAgICBpZiAodXJsUGFyYW1zLmdldChrKSAhPT0gbnVsbCkgbmV3VXJsUGFyYW1zLmFwcGVuZChrLCB1cmxQYXJhbXMuZ2V0KGspKTtcbiAgICB9KTtcblxuICAgIHN3aXRjaCAoZGVsdGEua2V5KSB7XG4gICAgICBjYXNlIENTLk9SREVSX0JZX0tFWTpcbiAgICAgICAgbmV3VXJsUGFyYW1zLnNldChDUy5PUkRFUl9CWV9LRVksIGRlbHRhLnZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENTLkZSRVNIX0tFWTpcbiAgICAgICAgaWYgKGRlbHRhLnZhbHVlID09PSBkZWZhdWx0RnJlc2huZXNzIHx8IGRlbHRhLnZhbHVlID09PSBDUy5GUkVTSF9ERUZBVUxUKSB7XG4gICAgICAgICAgbmV3VXJsUGFyYW1zLmRlbGV0ZShDUy5GUkVTSF9LRVkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1VybFBhcmFtcy5zZXQoQ1MuRlJFU0hfS0VZLCBkZWx0YS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENTLkNPTlRFTlRfS0VZOlxuICAgICAgICBpZiAoZGVsdGEudmFsdWUgPT09IENTLkNMQUlNX0NIQU5ORUwgfHwgZGVsdGEudmFsdWUgPT09IENTLkNMQUlNX1JFUE9TVCkge1xuICAgICAgICAgIG5ld1VybFBhcmFtcy5kZWxldGUoQ1MuRFVSQVRJT05fS0VZKTtcbiAgICAgICAgICBuZXdVcmxQYXJhbXMuc2V0KENTLkNPTlRFTlRfS0VZLCBkZWx0YS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEudmFsdWUgPT09IENTLkNPTlRFTlRfQUxMKSB7XG4gICAgICAgICAgbmV3VXJsUGFyYW1zLmRlbGV0ZShDUy5DT05URU5UX0tFWSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VXJsUGFyYW1zLnNldChDUy5DT05URU5UX0tFWSwgZGVsdGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDUy5EVVJBVElPTl9LRVk6XG4gICAgICAgIGlmIChkZWx0YS52YWx1ZSA9PT0gQ1MuRFVSQVRJT05fQUxMKSB7XG4gICAgICAgICAgbmV3VXJsUGFyYW1zLmRlbGV0ZShDUy5EVVJBVElPTl9LRVkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1VybFBhcmFtcy5zZXQoQ1MuRFVSQVRJT05fS0VZLCBkZWx0YS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENTLlRBR1NfS0VZOlxuICAgICAgICBpZiAoZGVsdGEudmFsdWUgPT09IENTLlRBR1NfQUxMKSB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRUYWdzID09PSBDUy5UQUdTX0FMTCkge1xuICAgICAgICAgICAgbmV3VXJsUGFyYW1zLmRlbGV0ZShDUy5UQUdTX0tFWSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1VybFBhcmFtcy5zZXQoQ1MuVEFHU19LRVksIGRlbHRhLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEudmFsdWUgPT09IENTLlRBR1NfRk9MTE9XRUQpIHtcbiAgICAgICAgICBpZiAoZGVmYXVsdFRhZ3MgPT09IENTLlRBR1NfRk9MTE9XRUQpIHtcbiAgICAgICAgICAgIG5ld1VybFBhcmFtcy5kZWxldGUoQ1MuVEFHU19LRVkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdVcmxQYXJhbXMuc2V0KENTLlRBR1NfS0VZLCBkZWx0YS52YWx1ZSk7IC8vIHJlZHVuZGFudCBidXQgc3BlY2lhbFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdVcmxQYXJhbXMuc2V0KENTLlRBR1NfS0VZLCBkZWx0YS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBgPyR7bmV3VXJsUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAoIWxvYWRpbmcpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcmZvcm1TZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmdGb3JFZmZlY3QpO1xuICAgICAgZG9DbGFpbVNlYXJjaChzZWFyY2hPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkb0NsYWltU2VhcmNoLCBzaG91bGRQZXJmb3JtU2VhcmNoLCBvcHRpb25zU3RyaW5nRm9yRWZmZWN0LCBmb3JjZVJlZnJlc2hdKTtcblxuICBjb25zdCBkZWZhdWx0SGVhZGVyID0gcmVwb3N0ZWRDbGFpbUlkID8gbnVsbCA6IChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17J2NsYWltLXNlYXJjaF9fd3JhcHBlcid9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NsYWltLXNlYXJjaF9fdG9wJ30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjbGFpbS1zZWFyY2hfX3RvcC1yb3cnfT5cbiAgICAgICAgICAgIHtDUy5PUkRFUl9CWV9UWVBFUy5tYXAodHlwZSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3R5cGV9XG4gICAgICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+XG4gICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IENTLk9SREVSX0JZX0tFWSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoYGJ1dHRvbi10b2dnbGUgYnV0dG9uLXRvZ2dsZS0tJHt0eXBlfWAsIHtcbiAgICAgICAgICAgICAgICAgICdidXR0b24tdG9nZ2xlLS1hY3RpdmUnOiBvcmRlclBhcmFtID09PSB0eXBlLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtvcmRlckJ5fVxuICAgICAgICAgICAgICAgIGljb249e3RvQ2FwaXRhbENhc2UodHlwZSl9XG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKHRvQ2FwaXRhbENhc2UodHlwZSkpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHshaGlkZUZpbHRlciAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249eydhbHQnfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e19fKCdNb3JlJyl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGBidXR0b24tdG9nZ2xlIGJ1dHRvbi10b2dnbGUtLXRvcCBidXR0b24tdG9nZ2xlLS1tb3JlYCwge1xuICAgICAgICAgICAgICAgICAgJ2J1dHRvbi10b2dnbGUtLWN1c3RvbSc6IGlzRmlsdGVyZWQoKSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXt0b0NhcGl0YWxDYXNlKElDT05TLlNMSURFUlMpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEV4cGFuZGVkKCFleHBhbmRlZCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2V4cGFuZGVkICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NhcmQtLWlubGluZScsIGBjbGFpbS1zZWFyY2hfX21lbnVzYCl9PlxuICAgICAgICAgICAgICB7LyogRlJFU0hORVNTIEZJRUxEICovfVxuICAgICAgICAgICAgICB7b3JkZXJQYXJhbSA9PT0gQ1MuT1JERVJfQllfVE9QICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NsYWltLXNlYXJjaF9faW5wdXQtY29udGFpbmVyJ30+XG4gICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2xhaW0tc2VhcmNoX19kcm9wZG93bicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAnY2xhaW0tc2VhcmNoX19kcm9wZG93bi0tc2VsZWN0ZWQnOiBmcmVzaG5lc3NQYXJhbSAhPT0gZGVmYXVsdEZyZXNobmVzcyxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwidHJlbmRpbmdfdGltZVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnSG93IEZyZXNoJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmcmVzaG5lc3NQYXJhbX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBDUy5GUkVTSF9LRVksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Q1MuRlJFU0hfVFlQRVMubWFwKHRpbWUgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXt0aW1lfSB2YWx1ZT17dGltZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogaTE4Zml4bWUgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGltZSA9PT0gQ1MuRlJFU0hfREFZICYmIF9fKCdUb2RheScpfVxuICAgICAgICAgICAgICAgICAgICAgICAge3RpbWUgIT09IENTLkZSRVNIX0FMTCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lICE9PSBDUy5GUkVTSF9ERUZBVUxUICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgIT09IENTLkZSRVNIX0RBWSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBfXygnVGhpcyAnICsgdG9DYXBpdGFsQ2FzZSh0aW1lKSkgLyogeWVzLCBjb25jYXQgYmVmb3JlIGkxOG4sIHNpbmNlIGl0IGlzIHJlYWQgZnJvbSBjb25zdCAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aW1lID09PSBDUy5GUkVTSF9BTEwgJiYgX18oJ0FsbCB0aW1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGltZSA9PT0gQ1MuRlJFU0hfREVGQVVMVCAmJiBfXygnRGVmYXVsdCcpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBDT05URU5UX1RZUEVTIEZJRUxEICovfVxuICAgICAgICAgICAgICB7IWNsYWltVHlwZSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1zZWFyY2hfX2lucHV0LWNvbnRhaW5lcicsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2NsYWltLXNlYXJjaF9faW5wdXQtY29udGFpbmVyLS1zZWxlY3RlZCc6IGNvbnRlbnRUeXBlUGFyYW0sXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2xhaW0tc2VhcmNoX19kcm9wZG93bicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAnY2xhaW0tc2VhcmNoX19kcm9wZG93bi0tc2VsZWN0ZWQnOiBjb250ZW50VHlwZVBhcmFtLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjbGFpbVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0NvbnRlbnQgVHlwZScpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29udGVudFR5cGVQYXJhbSB8fCBDUy5DT05URU5UX0FMTH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBDUy5DT05URU5UX0tFWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtDUy5DT05URU5UX1RZUEVTLm1hcCh0eXBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gQ1MuQ0xBSU1fQ0hBTk5FTCB8fCAodHlwZSA9PT0gQ1MuQ0xBSU1fQ0hBTk5FTCAmJiAhY2hhbm5lbElkcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXt0eXBlfSB2YWx1ZT17dHlwZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIGkxOGZpeG1lICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlID09PSBDUy5DTEFJTV9DSEFOTkVMICYmIF9fKCdDaGFubmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkNMQUlNX1JFUE9TVCAmJiBfXygnUmVwb3N0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkZJTEVfVklERU8gJiYgX18oJ1ZpZGVvJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkZJTEVfQVVESU8gJiYgX18oJ0F1ZGlvJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkZJTEVfSU1BR0UgJiYgX18oJ0ltYWdlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkZJTEVfTU9ERUwgJiYgX18oJ01vZGVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUgPT09IENTLkZJTEVfQklOQVJZICYmIF9fKCdPdGhlcicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlID09PSBDUy5GSUxFX0RPQ1VNRU5UICYmIF9fKCdEb2N1bWVudCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlID09PSBDUy5DT05URU5UX0FMTCAmJiBfXygnQW55Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHsvKiBEVVJBVElPTlMgRklFTEQgKi99XG4gICAgICAgICAgICAgIHtzaG93RHVyYXRpb24gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2xhaW0tc2VhcmNoX19pbnB1dC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1zZWFyY2hfX2Ryb3Bkb3duJywge1xuICAgICAgICAgICAgICAgICAgICAgICdjbGFpbS1zZWFyY2hfX2Ryb3Bkb3duLS1zZWxlY3RlZCc6IGR1cmF0aW9uUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0R1cmF0aW9uJyl9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlUGFyYW0gPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVR5cGVQYXJhbSA9PT0gQ1MuRklMRV9BVURJTyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtVHlwZVBhcmFtID09PSBDUy5GSUxFX1ZJREVPXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkdXJhdGlvblBhcmFtIHx8IENTLkRVUkFUSU9OX0FMTH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBDUy5EVVJBVElPTl9LRVksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Q1MuRFVSQVRJT05fVFlQRVMubWFwKGR1ciA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2R1cn0gdmFsdWU9e2R1cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogaTE4Zml4bWUgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZHVyID09PSBDUy5EVVJBVElPTl9TSE9SVCAmJiBfXygnU2hvcnQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkdXIgPT09IENTLkRVUkFUSU9OX0xPTkcgJiYgX18oJ0xvbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkdXIgPT09IENTLkRVUkFUSU9OX0FMTCAmJiBfXygnQW55Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHsvKiBUQUdTIEZJRUxEICovfVxuICAgICAgICAgICAgICB7IXRhZ3MgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2xhaW0tc2VhcmNoX19pbnB1dC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1zZWFyY2hfX2Ryb3Bkb3duJywge1xuICAgICAgICAgICAgICAgICAgICAgICdjbGFpbS1zZWFyY2hfX2Ryb3Bkb3duLS1zZWxlY3RlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAoKCFkZWZhdWx0VGFncyB8fCBkZWZhdWx0VGFncyA9PT0gQ1MuVEFHU19BTEwpICYmIHRhZ3NQYXJhbSAmJiB0YWdzUGFyYW0gIT09IENTLlRBR1NfQUxMKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHRUYWdzID09PSBDUy5UQUdTX0ZPTExPV0VEICYmIHRhZ3NQYXJhbSAhPT0gQ1MuVEFHU19GT0xMT1dFRCksXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1RhZ3MnKX1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0YWdzXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RhZ3NQYXJhbSB8fCBDUy5UQUdTX0FMTH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBDUy5UQUdTX0tFWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgICAgICAgICAgQ1MuVEFHU19BTEwsXG4gICAgICAgICAgICAgICAgICAgICAgQ1MuVEFHU19GT0xMT1dFRCxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5mb2xsb3dlZCxcbiAgICAgICAgICAgICAgICAgICAgICAuLi4oZm9sbG93ZWQuaW5jbHVkZXModGFnc1BhcmFtKSB8fCB0YWdzUGFyYW0gPT09IENTLlRBR1NfQUxMIHx8IHRhZ3NQYXJhbSA9PT0gQ1MuVEFHU19GT0xMT1dFRFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbdGFnc1BhcmFtXSksIC8vIGlmIHRoZXkgdW5mb2xsb3cgd2hpbGUgZmlsdGVyZWQsIGFkZCBPdGhlclxuICAgICAgICAgICAgICAgICAgICBdLm1hcCh0YWcgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dGFnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RhZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjbGFpbS1zZWFyY2hfX2lucHV0LXNwZWNpYWwnOiAhZm9sbG93ZWQuaW5jbHVkZXModGFnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmb2xsb3dlZC5pbmNsdWRlcyh0YWcpICYmIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmIHRvQ2FwaXRhbENhc2UoX18odGFnKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGFnID09PSBDUy5UQUdTX0FMTCAmJiBfXygnQW55Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGFnID09PSBDUy5UQUdTX0ZPTExPV0VEICYmIF9fKCdGb2xsb3dpbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHshZm9sbG93ZWQuaW5jbHVkZXModGFnKSAmJiB0YWcgIT09IENTLlRBR1NfQUxMICYmIHRhZyAhPT0gQ1MuVEFHU19GT0xMT1dFRCAmJiBfXygnT3RoZXInKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtoYXNNYXR1cmVUYWdzICYmIGhpZGRlbk5zZndNZXNzYWdlfVxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8Q2xhaW1MaXN0XG4gICAgICAgIGlkPXtjbGFpbVNlYXJjaENhY2hlUXVlcnl9XG4gICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgIHVyaXM9e2NsYWltU2VhcmNoUmVzdWx0fVxuICAgICAgICBoZWFkZXI9e2hlYWRlciB8fCBkZWZhdWx0SGVhZGVyfVxuICAgICAgICBoZWFkZXJMYWJlbD17aGVhZGVyTGFiZWx9XG4gICAgICAgIGhlYWRlckFsdENvbnRyb2xzPXttZXRhfVxuICAgICAgICBvblNjcm9sbEJvdHRvbT17aGFuZGxlU2Nyb2xsQm90dG9tfVxuICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICBwYWdlU2l6ZT17Q1MuUEFHRV9TSVpFfVxuICAgICAgICB0aW1lZE91dE1lc3NhZ2U9e3RpbWVkT3V0TWVzc2FnZX1cbiAgICAgICAgcmVuZGVyUHJvcGVydGllcz17cmVuZGVyUHJvcGVydGllc31cbiAgICAgICAgaW5jbHVkZVN1cHBvcnRBY3Rpb249e2luY2x1ZGVTdXBwb3J0QWN0aW9ufVxuICAgICAgICBoaWRlQmxvY2s9e2hpZGVCbG9ja31cbiAgICAgICAgaW5qZWN0ZWRJdGVtPXtpbmplY3RlZEl0ZW19XG4gICAgICAvPlxuXG4gICAgICB7bG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiPlxuICAgICAgICAgIHtuZXcgQXJyYXkoQ1MuUEFHRV9TSVpFKS5maWxsKDEpLm1hcCgoeCwgaSkgPT4gKFxuICAgICAgICAgICAgPENsYWltUHJldmlldyBrZXk9e2l9IHBsYWNlaG9sZGVyPVwibG9hZGluZ1wiIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKENsYWltTGlzdERpc2NvdmVyKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEwQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUNBO0FBbkNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUF3Q0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQURBO0FBS0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFKQTtBQWNBO0FBSkE7QUFXQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUEzTEE7QUE4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFRQTtBQUVBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUZBO0FBREE7QUFnQkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQTVDQTtBQUNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQUpBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBZEE7QUFIQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFQQTtBQWNBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBREE7QUFSQTtBQWVBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFOQTtBQXBCQTtBQXNDQTtBQUNBO0FBREE7QUFEQTtBQU1BO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQURBO0FBUkE7QUFnQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWFBO0FBekVBO0FBZ0ZBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQURBO0FBZkE7QUFzQkE7QUFDQTtBQUFBO0FBQUE7QUF4R0E7QUFvSEE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQURBO0FBVkE7QUF3QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFyTEE7QUE4TUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFrQkE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBdEJBO0FBNEJBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimListDiscover/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimPreview/index.js": -/*!*********************************************!*\ - !*** ../ui/component/claimPreview/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/claimPreview/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n pending: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsPending\"])(props.uri)(state),\n claim: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n obscureNsfw: !Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectShowMatureContent\"])(state),\n claimIsMine: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n isResolvingUri: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.uri)(state),\n thumbnail: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n cover: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectCoverForUri\"])(props.uri)(state),\n nsfw: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsNsfw\"])(props.uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectBlackListedOutpoints\"])(state),\n filteredOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectFilteredOutpoints\"])(state),\n blockedChannelUris: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state),\n hasVisitedUri: props.uri && Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectHasVisitedUri\"])(props.uri)(state),\n channelIsBlocked: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectChannelIsBlocked\"])(props.uri)(state),\n isSubscribed: props.uri && Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectIsSubscribed\"])(props.uri, true)(state),\n streamingUrl: props.uri && Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectStreamingUrlForUriWebProxy\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n },\n getFile: function getFile(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFileGet\"])(uri, false));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlldy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1QcmV2aWV3L2luZGV4LmpzP2Y5YmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvUmVzb2x2ZVVyaSxcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBtYWtlU2VsZWN0SXNVcmlSZXNvbHZpbmcsXG4gIG1ha2VTZWxlY3RDbGFpbUlzTWluZSxcbiAgbWFrZVNlbGVjdENsYWltSXNQZW5kaW5nLFxuICBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpLFxuICBtYWtlU2VsZWN0Q292ZXJGb3JVcmksXG4gIG1ha2VTZWxlY3RDbGFpbUlzTnNmdyxcbiAgc2VsZWN0QmxvY2tlZENoYW5uZWxzLFxuICBzZWxlY3RDaGFubmVsSXNCbG9ja2VkLFxuICBkb0ZpbGVHZXQsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMsIHNlbGVjdEZpbHRlcmVkT3V0cG9pbnRzIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBzZWxlY3RTaG93TWF0dXJlQ29udGVudCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0SGFzVmlzaXRlZFVyaSwgbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaVdlYlByb3h5IH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdElzU3Vic2NyaWJlZCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCBDbGFpbVByZXZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgcGVuZGluZzogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RDbGFpbUlzUGVuZGluZyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW06IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIG9ic2N1cmVOc2Z3OiAhc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQoc3RhdGUpLFxuICBjbGFpbUlzTWluZTogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgaXNSZXNvbHZpbmdVcmk6IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0SXNVcmlSZXNvbHZpbmcocHJvcHMudXJpKShzdGF0ZSksXG4gIHRodW1ibmFpbDogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGNvdmVyOiBwcm9wcy51cmkgJiYgbWFrZVNlbGVjdENvdmVyRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBuc2Z3OiBwcm9wcy51cmkgJiYgbWFrZVNlbGVjdENsYWltSXNOc2Z3KHByb3BzLnVyaSkoc3RhdGUpLFxuICBibGFja0xpc3RlZE91dHBvaW50czogc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMoc3RhdGUpLFxuICBmaWx0ZXJlZE91dHBvaW50czogc2VsZWN0RmlsdGVyZWRPdXRwb2ludHMoc3RhdGUpLFxuICBibG9ja2VkQ2hhbm5lbFVyaXM6IHNlbGVjdEJsb2NrZWRDaGFubmVscyhzdGF0ZSksXG4gIGhhc1Zpc2l0ZWRVcmk6IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0SGFzVmlzaXRlZFVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2hhbm5lbElzQmxvY2tlZDogcHJvcHMudXJpICYmIHNlbGVjdENoYW5uZWxJc0Jsb2NrZWQocHJvcHMudXJpKShzdGF0ZSksXG4gIGlzU3Vic2NyaWJlZDogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RJc1N1YnNjcmliZWQocHJvcHMudXJpLCB0cnVlKShzdGF0ZSksXG4gIHN0cmVhbWluZ1VybDogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVzb2x2ZVVyaTogdXJpID0+IGRpc3BhdGNoKGRvUmVzb2x2ZVVyaSh1cmkpKSxcbiAgZ2V0RmlsZTogdXJpID0+IGRpc3BhdGNoKGRvRmlsZUdldCh1cmksIGZhbHNlKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKENsYWltUHJldmlldyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQUFBO0FBQ0E7QUFpQkE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimPreview/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimPreview/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/claimPreview/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var util_object__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! util/object */ \"../ui/util/object.js\");\n/* harmony import */ var component_fileThumbnail__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/fileThumbnail */ \"../ui/component/fileThumbnail/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_fileProperties__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/fileProperties */ \"../ui/component/fileProperties/index.js\");\n/* harmony import */ var component_claimTags__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/claimTags */ \"../ui/component/claimTags/index.js\");\n/* harmony import */ var component_subscribeButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/subscribeButton */ \"../ui/component/subscribeButton/index.js\");\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var component_blockButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/blockButton */ \"../ui/component/blockButton/index.js\");\n/* harmony import */ var component_claimSupportButton__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/claimSupportButton */ \"../ui/component/claimSupportButton/index.js\");\n/* harmony import */ var effects_use_get_thumbnail__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! effects/use-get-thumbnail */ \"../ui/effects/use-get-thumbnail.js\");\n/* harmony import */ var component_claimPreviewTitle__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! component/claimPreviewTitle */ \"../ui/component/claimPreviewTitle/index.js\");\n/* harmony import */ var component_claimPreviewSubtitle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! component/claimPreviewSubtitle */ \"../ui/component/claimPreviewSubtitle/index.js\");\n/* harmony import */ var component_claimRepostAuthor__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! component/claimRepostAuthor */ \"../ui/component/claimRepostAuthor/index.js\");\n/* harmony import */ var component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! component/fileDownloadLink */ \"../ui/component/fileDownloadLink/index.js\");\n/* harmony import */ var component_abandonedChannelPreview__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! component/abandonedChannelPreview */ \"../ui/component/abandonedChannelPreview/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ClaimPreview = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"forwardRef\"])(function (props, ref) {\n var obscureNsfw = props.obscureNsfw,\n claimIsMine = props.claimIsMine,\n pending = props.pending,\n history = props.history,\n uri = props.uri,\n isResolvingUri = props.isResolvingUri,\n thumbnail = props.thumbnail,\n nsfw = props.nsfw,\n resolveUri = props.resolveUri,\n claim = props.claim,\n placeholder = props.placeholder,\n type = props.type,\n blackListedOutpoints = props.blackListedOutpoints,\n filteredOutpoints = props.filteredOutpoints,\n blockedChannelUris = props.blockedChannelUris,\n hasVisitedUri = props.hasVisitedUri,\n showUserBlocked = props.showUserBlocked,\n channelIsBlocked = props.channelIsBlocked,\n isSubscribed = props.isSubscribed,\n actions = props.actions,\n properties = props.properties,\n onClick = props.onClick,\n hideBlock = props.hideBlock,\n getFile = props.getFile,\n streamingUrl = props.streamingUrl,\n customShouldHide = props.customShouldHide,\n showUnresolvedClaim = props.showUnresolvedClaim,\n includeSupportAction = props.includeSupportAction;\n var shouldFetch = claim === undefined || claim !== null && claim.value_type === 'channel' && Object(util_object__WEBPACK_IMPORTED_MODULE_6__[\"isEmpty\"])(claim.meta) && !pending;\n var abandoned = !isResolvingUri && !claim;\n var showPublishLink = abandoned && !showUnresolvedClaim && placeholder === 'publish';\n var hideActions = type === 'small' || type === 'tooltip';\n var canonicalUrl = claim && claim.canonical_url;\n var isValid = false;\n\n if (uri) {\n try {\n Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(uri);\n isValid = true;\n } catch (e) {\n isValid = false;\n }\n }\n\n var isChannel = isValid ? Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(uri).isChannel : false;\n var signingChannel = claim && claim.signing_channel;\n var navigateUrl = Object(util_url__WEBPACK_IMPORTED_MODULE_5__[\"formatLbryUrlForWeb\"])(claim && claim.canonical_url || uri || '/');\n var navLinkProps = {\n to: navigateUrl,\n onClick: function onClick(e) {\n return e.stopPropagation();\n }\n }; // do not block abandoned and nsfw claims if showUserBlocked is passed\n\n var shouldHide = placeholder !== 'loading' && !showUserBlocked && (abandoned && !showUnresolvedClaim && !showPublishLink || !claimIsMine && obscureNsfw && nsfw); // This will be replaced once blocking is done at the wallet server level\n\n if (claim && !claimIsMine && !shouldHide && blackListedOutpoints) {\n shouldHide = blackListedOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n } // We're checking to see if the stream outpoint\n // or signing channel outpoint is in the filter list\n\n\n if (claim && !claimIsMine && !shouldHide && filteredOutpoints) {\n shouldHide = filteredOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n } // block stream claims\n\n\n if (claim && !shouldHide && !showUserBlocked && blockedChannelUris.length && signingChannel) {\n shouldHide = blockedChannelUris.some(function (blockedUri) {\n return blockedUri === signingChannel.permanent_url;\n });\n } // block channel claims if we can't control for them in claim search\n // e.g. fetchRecommendedSubscriptions\n\n\n if (claim && isChannel && !shouldHide && !showUserBlocked && blockedChannelUris.length) {\n shouldHide = blockedChannelUris.some(function (blockedUri) {\n return blockedUri === claim.permanent_url;\n });\n }\n\n if (!shouldHide && customShouldHide && claim) {\n if (customShouldHide(claim)) {\n shouldHide = true;\n }\n } // Weird placement warning\n // Make sure this happens after we figure out if this claim needs to be hidden\n\n\n var thumbnailUrl = Object(effects_use_get_thumbnail__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(uri, claim, streamingUrl, getFile, shouldHide) || thumbnail;\n\n function handleContextMenu(e) {}\n\n function handleOnClick(e) {\n if (onClick) {\n onClick(e);\n }\n\n if (claim && !pending) {\n history.push(navigateUrl);\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isValid && !isResolvingUri && shouldFetch && uri) {\n resolveUri(uri);\n }\n }, [isValid, isResolvingUri, uri, resolveUri, shouldFetch]);\n\n if (shouldHide) {\n return null;\n }\n\n if (placeholder === 'loading' || claim === undefined || isResolvingUri && !claim) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n disabled: true,\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-preview__wrapper', {\n 'claim-preview__wrapper--channel': isChannel && type !== 'inline',\n 'claim-preview__wrapper--inline': type === 'inline'\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-preview', {\n 'claim-preview--large': type === 'large'\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder media__thumb\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder claim-preview__title\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder media__subtitle\"\n }))));\n }\n\n if (!shouldFetch && showUnresolvedClaim && !isResolvingUri && claim === null) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_abandonedChannelPreview__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n uri: uri,\n type: true\n });\n }\n\n if (placeholder === 'publish' && !claim && uri.startsWith('lbry://@')) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n ref: ref,\n role: \"link\",\n onClick: pending || type === 'inline' ? undefined : handleOnClick,\n onContextMenu: handleContextMenu,\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-preview__wrapper', {\n 'claim-preview__wrapper--channel': isChannel && type !== 'inline',\n 'claim-preview__wrapper--inline': type === 'inline',\n 'claim-preview__wrapper--small': type === 'small'\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimRepostAuthor__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('claim-preview', {\n 'claim-preview--small': type === 'small' || type === 'tooltip',\n 'claim-preview--large': type === 'large',\n 'claim-preview--inline': type === 'inline',\n 'claim-preview--tooltip': type === 'tooltip',\n 'claim-preview--channel': isChannel,\n 'claim-preview--visited': !isChannel && !claimIsMine && hasVisitedUri,\n 'claim-preview--pending': pending\n })\n }, isChannel && claim ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n uri: uri,\n link: true\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n uri: uri,\n obscure: channelIsBlocked\n })) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__[\"NavLink\"], navLinkProps, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileThumbnail__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n thumbnail: thumbnailUrl\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview-metadata\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview-info\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__[\"NavLink\"], navLinkProps, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreviewTitle__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n uri: uri\n })), !isChannel && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileProperties__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n uri: uri\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreviewSubtitle__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n uri: uri,\n type: type\n })), type !== 'small' && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__actions\"\n }, !pending && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, hideActions ? null : actions !== undefined ? actions : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions--inline\"\n }, isChannel && !channelIsBlocked && !claimIsMine && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_subscribeButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n uri: uri.startsWith('lbry://') ? uri : \"lbry://\".concat(uri)\n }), !hideBlock && isChannel && !isSubscribed && !claimIsMine && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_blockButton__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n uri: uri.startsWith('lbry://') ? uri : \"lbry://\".concat(uri)\n }), includeSupportAction && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimSupportButton__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n uri: uri\n }))), claim && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, typeof properties === 'function' ? properties(claim) : properties !== undefined ? properties : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimTags__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n uri: uri,\n type: type\n }))))));\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__[\"withRouter\"])(ClaimPreview));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlldy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1QcmV2aWV3L3ZpZXcuanN4P2FkNzUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBOYXZMaW5rLCB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHBhcnNlVVJJLCBjb252ZXJ0VG9TaGFyZUxpbmsgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IG9wZW5Db3B5TGlua01lbnUgfSBmcm9tICd1dGlsL2NvbnRleHQtbWVudSc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ3V0aWwvb2JqZWN0JztcbmltcG9ydCBGaWxlVGh1bWJuYWlsIGZyb20gJ2NvbXBvbmVudC9maWxlVGh1bWJuYWlsJztcbmltcG9ydCBVcmlJbmRpY2F0b3IgZnJvbSAnY29tcG9uZW50L3VyaUluZGljYXRvcic7XG5pbXBvcnQgRmlsZVByb3BlcnRpZXMgZnJvbSAnY29tcG9uZW50L2ZpbGVQcm9wZXJ0aWVzJztcbmltcG9ydCBDbGFpbVRhZ3MgZnJvbSAnY29tcG9uZW50L2NsYWltVGFncyc7XG5pbXBvcnQgU3Vic2NyaWJlQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9zdWJzY3JpYmVCdXR0b24nO1xuaW1wb3J0IENoYW5uZWxUaHVtYm5haWwgZnJvbSAnY29tcG9uZW50L2NoYW5uZWxUaHVtYm5haWwnO1xuaW1wb3J0IEJsb2NrQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9ibG9ja0J1dHRvbic7XG5pbXBvcnQgQ2xhaW1TdXBwb3J0QnV0dG9uIGZyb20gJ2NvbXBvbmVudC9jbGFpbVN1cHBvcnRCdXR0b24nO1xuaW1wb3J0IHVzZUdldFRodW1ibmFpbCBmcm9tICdlZmZlY3RzL3VzZS1nZXQtdGh1bWJuYWlsJztcbmltcG9ydCBDbGFpbVByZXZpZXdUaXRsZSBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3VGl0bGUnO1xuaW1wb3J0IENsYWltUHJldmlld1N1YnRpdGxlIGZyb20gJ2NvbXBvbmVudC9jbGFpbVByZXZpZXdTdWJ0aXRsZSc7XG5pbXBvcnQgQ2xhaW1SZXBvc3RBdXRob3IgZnJvbSAnY29tcG9uZW50L2NsYWltUmVwb3N0QXV0aG9yJztcbmltcG9ydCBGaWxlRG93bmxvYWRMaW5rIGZyb20gJ2NvbXBvbmVudC9maWxlRG93bmxvYWRMaW5rJztcbmltcG9ydCBBYmFuZG9uZWRDaGFubmVsUHJldmlldyBmcm9tICdjb21wb25lbnQvYWJhbmRvbmVkQ2hhbm5lbFByZXZpZXcnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06ID9DbGFpbSxcbiAgb2JzY3VyZU5zZnc6IGJvb2xlYW4sXG4gIHNob3dVc2VyQmxvY2tlZDogYm9vbGVhbixcbiAgY2xhaW1Jc01pbmU6IGJvb2xlYW4sXG4gIHBlbmRpbmc/OiBib29sZWFuLFxuICByZXNvbHZlVXJpOiBzdHJpbmcgPT4gdm9pZCxcbiAgaXNSZXNvbHZpbmdVcmk6IGJvb2xlYW4sXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbiAgdGh1bWJuYWlsOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIG5zZnc6IGJvb2xlYW4sXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gIHR5cGU6IHN0cmluZyxcbiAgaGFzVmlzaXRlZFVyaTogYm9vbGVhbixcbiAgYmxhY2tMaXN0ZWRPdXRwb2ludHM6IEFycmF5PHtcbiAgICB0eGlkOiBzdHJpbmcsXG4gICAgbm91dDogbnVtYmVyLFxuICB9PixcbiAgZmlsdGVyZWRPdXRwb2ludHM6IEFycmF5PHtcbiAgICB0eGlkOiBzdHJpbmcsXG4gICAgbm91dDogbnVtYmVyLFxuICB9PixcbiAgYmxvY2tlZENoYW5uZWxVcmlzOiBBcnJheTxzdHJpbmc+LFxuICBjaGFubmVsSXNCbG9ja2VkOiBib29sZWFuLFxuICBpc1N1YnNjcmliZWQ6IGJvb2xlYW4sXG4gIGFjdGlvbnM6IGJvb2xlYW4gfCBOb2RlIHwgc3RyaW5nIHwgbnVtYmVyLFxuICBwcm9wZXJ0aWVzOiBib29sZWFuIHwgTm9kZSB8IHN0cmluZyB8IG51bWJlciB8IChDbGFpbSA9PiBOb2RlKSxcbiAgb25DbGljaz86IGFueSA9PiBhbnksXG4gIGhpZGVCbG9jaz86IGJvb2xlYW4sXG4gIHN0cmVhbWluZ1VybDogP3N0cmluZyxcbiAgZ2V0RmlsZTogc3RyaW5nID0+IHZvaWQsXG4gIGN1c3RvbVNob3VsZEhpZGU/OiBDbGFpbSA9PiBib29sZWFuLFxuICBzaG93VW5yZXNvbHZlZENsYWltPzogYm9vbGVhbixcbiAgaW5jbHVkZVN1cHBvcnRBY3Rpb24/OiBib29sZWFuLFxufTtcblxuY29uc3QgQ2xhaW1QcmV2aWV3ID0gZm9yd2FyZFJlZjxhbnksIHt9PigocHJvcHM6IFByb3BzLCByZWY6IGFueSkgPT4ge1xuICBjb25zdCB7XG4gICAgb2JzY3VyZU5zZncsXG4gICAgY2xhaW1Jc01pbmUsXG4gICAgcGVuZGluZyxcbiAgICBoaXN0b3J5LFxuICAgIHVyaSxcbiAgICBpc1Jlc29sdmluZ1VyaSxcbiAgICB0aHVtYm5haWwsXG4gICAgbnNmdyxcbiAgICByZXNvbHZlVXJpLFxuICAgIGNsYWltLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHR5cGUsXG4gICAgYmxhY2tMaXN0ZWRPdXRwb2ludHMsXG4gICAgZmlsdGVyZWRPdXRwb2ludHMsXG4gICAgYmxvY2tlZENoYW5uZWxVcmlzLFxuICAgIGhhc1Zpc2l0ZWRVcmksXG4gICAgc2hvd1VzZXJCbG9ja2VkLFxuICAgIGNoYW5uZWxJc0Jsb2NrZWQsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIGFjdGlvbnMsXG4gICAgcHJvcGVydGllcyxcbiAgICBvbkNsaWNrLFxuICAgIGhpZGVCbG9jayxcbiAgICBnZXRGaWxlLFxuICAgIHN0cmVhbWluZ1VybCxcbiAgICBjdXN0b21TaG91bGRIaWRlLFxuICAgIHNob3dVbnJlc29sdmVkQ2xhaW0sXG4gICAgaW5jbHVkZVN1cHBvcnRBY3Rpb24sXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgc2hvdWxkRmV0Y2ggPVxuICAgIGNsYWltID09PSB1bmRlZmluZWQgfHwgKGNsYWltICE9PSBudWxsICYmIGNsYWltLnZhbHVlX3R5cGUgPT09ICdjaGFubmVsJyAmJiBpc0VtcHR5KGNsYWltLm1ldGEpICYmICFwZW5kaW5nKTtcbiAgY29uc3QgYWJhbmRvbmVkID0gIWlzUmVzb2x2aW5nVXJpICYmICFjbGFpbTtcbiAgY29uc3Qgc2hvd1B1Ymxpc2hMaW5rID0gYWJhbmRvbmVkICYmICFzaG93VW5yZXNvbHZlZENsYWltICYmIHBsYWNlaG9sZGVyID09PSAncHVibGlzaCc7XG4gIGNvbnN0IGhpZGVBY3Rpb25zID0gdHlwZSA9PT0gJ3NtYWxsJyB8fCB0eXBlID09PSAndG9vbHRpcCc7XG4gIGNvbnN0IGNhbm9uaWNhbFVybCA9IGNsYWltICYmIGNsYWltLmNhbm9uaWNhbF91cmw7XG5cbiAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgaWYgKHVyaSkge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZVVSSSh1cmkpO1xuICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzQ2hhbm5lbCA9IGlzVmFsaWQgPyBwYXJzZVVSSSh1cmkpLmlzQ2hhbm5lbCA6IGZhbHNlO1xuICBjb25zdCBzaWduaW5nQ2hhbm5lbCA9IGNsYWltICYmIGNsYWltLnNpZ25pbmdfY2hhbm5lbDtcbiAgY29uc3QgbmF2aWdhdGVVcmwgPSBmb3JtYXRMYnJ5VXJsRm9yV2ViKChjbGFpbSAmJiBjbGFpbS5jYW5vbmljYWxfdXJsKSB8fCB1cmkgfHwgJy8nKTtcbiAgY29uc3QgbmF2TGlua1Byb3BzID0ge1xuICAgIHRvOiBuYXZpZ2F0ZVVybCxcbiAgICBvbkNsaWNrOiBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCksXG4gIH07XG5cbiAgLy8gZG8gbm90IGJsb2NrIGFiYW5kb25lZCBhbmQgbnNmdyBjbGFpbXMgaWYgc2hvd1VzZXJCbG9ja2VkIGlzIHBhc3NlZFxuICBsZXQgc2hvdWxkSGlkZSA9XG4gICAgcGxhY2Vob2xkZXIgIT09ICdsb2FkaW5nJyAmJlxuICAgICFzaG93VXNlckJsb2NrZWQgJiZcbiAgICAoKGFiYW5kb25lZCAmJiAhc2hvd1VucmVzb2x2ZWRDbGFpbSAmJiAhc2hvd1B1Ymxpc2hMaW5rKSB8fCAoIWNsYWltSXNNaW5lICYmIG9ic2N1cmVOc2Z3ICYmIG5zZncpKTtcblxuICAvLyBUaGlzIHdpbGwgYmUgcmVwbGFjZWQgb25jZSBibG9ja2luZyBpcyBkb25lIGF0IHRoZSB3YWxsZXQgc2VydmVyIGxldmVsXG4gIGlmIChjbGFpbSAmJiAhY2xhaW1Jc01pbmUgJiYgIXNob3VsZEhpZGUgJiYgYmxhY2tMaXN0ZWRPdXRwb2ludHMpIHtcbiAgICBzaG91bGRIaWRlID0gYmxhY2tMaXN0ZWRPdXRwb2ludHMuc29tZShcbiAgICAgIG91dHBvaW50ID0+XG4gICAgICAgIChzaWduaW5nQ2hhbm5lbCAmJiBvdXRwb2ludC50eGlkID09PSBzaWduaW5nQ2hhbm5lbC50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IHNpZ25pbmdDaGFubmVsLm5vdXQpIHx8XG4gICAgICAgIChvdXRwb2ludC50eGlkID09PSBjbGFpbS50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IGNsYWltLm5vdXQpXG4gICAgKTtcbiAgfVxuICAvLyBXZSdyZSBjaGVja2luZyB0byBzZWUgaWYgdGhlIHN0cmVhbSBvdXRwb2ludFxuICAvLyBvciBzaWduaW5nIGNoYW5uZWwgb3V0cG9pbnQgaXMgaW4gdGhlIGZpbHRlciBsaXN0XG4gIGlmIChjbGFpbSAmJiAhY2xhaW1Jc01pbmUgJiYgIXNob3VsZEhpZGUgJiYgZmlsdGVyZWRPdXRwb2ludHMpIHtcbiAgICBzaG91bGRIaWRlID0gZmlsdGVyZWRPdXRwb2ludHMuc29tZShcbiAgICAgIG91dHBvaW50ID0+XG4gICAgICAgIChzaWduaW5nQ2hhbm5lbCAmJiBvdXRwb2ludC50eGlkID09PSBzaWduaW5nQ2hhbm5lbC50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IHNpZ25pbmdDaGFubmVsLm5vdXQpIHx8XG4gICAgICAgIChvdXRwb2ludC50eGlkID09PSBjbGFpbS50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IGNsYWltLm5vdXQpXG4gICAgKTtcbiAgfVxuICAvLyBibG9jayBzdHJlYW0gY2xhaW1zXG4gIGlmIChjbGFpbSAmJiAhc2hvdWxkSGlkZSAmJiAhc2hvd1VzZXJCbG9ja2VkICYmIGJsb2NrZWRDaGFubmVsVXJpcy5sZW5ndGggJiYgc2lnbmluZ0NoYW5uZWwpIHtcbiAgICBzaG91bGRIaWRlID0gYmxvY2tlZENoYW5uZWxVcmlzLnNvbWUoYmxvY2tlZFVyaSA9PiBibG9ja2VkVXJpID09PSBzaWduaW5nQ2hhbm5lbC5wZXJtYW5lbnRfdXJsKTtcbiAgfVxuICAvLyBibG9jayBjaGFubmVsIGNsYWltcyBpZiB3ZSBjYW4ndCBjb250cm9sIGZvciB0aGVtIGluIGNsYWltIHNlYXJjaFxuICAvLyBlLmcuIGZldGNoUmVjb21tZW5kZWRTdWJzY3JpcHRpb25zXG4gIGlmIChjbGFpbSAmJiBpc0NoYW5uZWwgJiYgIXNob3VsZEhpZGUgJiYgIXNob3dVc2VyQmxvY2tlZCAmJiBibG9ja2VkQ2hhbm5lbFVyaXMubGVuZ3RoKSB7XG4gICAgc2hvdWxkSGlkZSA9IGJsb2NrZWRDaGFubmVsVXJpcy5zb21lKGJsb2NrZWRVcmkgPT4gYmxvY2tlZFVyaSA9PT0gY2xhaW0ucGVybWFuZW50X3VybCk7XG4gIH1cblxuICBpZiAoIXNob3VsZEhpZGUgJiYgY3VzdG9tU2hvdWxkSGlkZSAmJiBjbGFpbSkge1xuICAgIGlmIChjdXN0b21TaG91bGRIaWRlKGNsYWltKSkge1xuICAgICAgc2hvdWxkSGlkZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gV2VpcmQgcGxhY2VtZW50IHdhcm5pbmdcbiAgLy8gTWFrZSBzdXJlIHRoaXMgaGFwcGVucyBhZnRlciB3ZSBmaWd1cmUgb3V0IGlmIHRoaXMgY2xhaW0gbmVlZHMgdG8gYmUgaGlkZGVuXG4gIGNvbnN0IHRodW1ibmFpbFVybCA9IHVzZUdldFRodW1ibmFpbCh1cmksIGNsYWltLCBzdHJlYW1pbmdVcmwsIGdldEZpbGUsIHNob3VsZEhpZGUpIHx8IHRodW1ibmFpbDtcblxuICBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShlKSB7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPbkNsaWNrKGUpIHtcbiAgICBpZiAob25DbGljaykge1xuICAgICAgb25DbGljayhlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhaW0gJiYgIXBlbmRpbmcpIHtcbiAgICAgIGhpc3RvcnkucHVzaChuYXZpZ2F0ZVVybCk7XG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWYWxpZCAmJiAhaXNSZXNvbHZpbmdVcmkgJiYgc2hvdWxkRmV0Y2ggJiYgdXJpKSB7XG4gICAgICByZXNvbHZlVXJpKHVyaSk7XG4gICAgfVxuICB9LCBbaXNWYWxpZCwgaXNSZXNvbHZpbmdVcmksIHVyaSwgcmVzb2x2ZVVyaSwgc2hvdWxkRmV0Y2hdKTtcblxuICBpZiAoc2hvdWxkSGlkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBsYWNlaG9sZGVyID09PSAnbG9hZGluZycgfHwgY2xhaW0gPT09IHVuZGVmaW5lZCB8fCAoaXNSZXNvbHZpbmdVcmkgJiYgIWNsYWltKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1wcmV2aWV3X193cmFwcGVyJywge1xuICAgICAgICAgICdjbGFpbS1wcmV2aWV3X193cmFwcGVyLS1jaGFubmVsJzogaXNDaGFubmVsICYmIHR5cGUgIT09ICdpbmxpbmUnLFxuICAgICAgICAgICdjbGFpbS1wcmV2aWV3X193cmFwcGVyLS1pbmxpbmUnOiB0eXBlID09PSAnaW5saW5lJyxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjbGFpbS1wcmV2aWV3JywgeyAnY2xhaW0tcHJldmlldy0tbGFyZ2UnOiB0eXBlID09PSAnbGFyZ2UnIH0pfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYWNlaG9sZGVyIG1lZGlhX190aHVtYlwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwbGFjZWhvbGRlcl9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwbGFjZWhvbGRlciBjbGFpbS1wcmV2aWV3X190aXRsZVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYWNlaG9sZGVyIG1lZGlhX19zdWJ0aXRsZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG4gIGlmICghc2hvdWxkRmV0Y2ggJiYgc2hvd1VucmVzb2x2ZWRDbGFpbSAmJiAhaXNSZXNvbHZpbmdVcmkgJiYgY2xhaW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gPEFiYW5kb25lZENoYW5uZWxQcmV2aWV3IHVyaT17dXJpfSB0eXBlIC8+O1xuICB9XG4gIGlmIChwbGFjZWhvbGRlciA9PT0gJ3B1Ymxpc2gnICYmICFjbGFpbSAmJiB1cmkuc3RhcnRzV2l0aCgnbGJyeTovL0AnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIHJlZj17cmVmfVxuICAgICAgcm9sZT1cImxpbmtcIlxuICAgICAgb25DbGljaz17cGVuZGluZyB8fCB0eXBlID09PSAnaW5saW5lJyA/IHVuZGVmaW5lZCA6IGhhbmRsZU9uQ2xpY2t9XG4gICAgICBvbkNvbnRleHRNZW51PXtoYW5kbGVDb250ZXh0TWVudX1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2xhaW0tcHJldmlld19fd3JhcHBlcicsIHtcbiAgICAgICAgJ2NsYWltLXByZXZpZXdfX3dyYXBwZXItLWNoYW5uZWwnOiBpc0NoYW5uZWwgJiYgdHlwZSAhPT0gJ2lubGluZScsXG4gICAgICAgICdjbGFpbS1wcmV2aWV3X193cmFwcGVyLS1pbmxpbmUnOiB0eXBlID09PSAnaW5saW5lJyxcbiAgICAgICAgJ2NsYWltLXByZXZpZXdfX3dyYXBwZXItLXNtYWxsJzogdHlwZSA9PT0gJ3NtYWxsJyxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxDbGFpbVJlcG9zdEF1dGhvciB1cmk9e3VyaX0gLz5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NsYWltLXByZXZpZXcnLCB7XG4gICAgICAgICAgJ2NsYWltLXByZXZpZXctLXNtYWxsJzogdHlwZSA9PT0gJ3NtYWxsJyB8fCB0eXBlID09PSAndG9vbHRpcCcsXG4gICAgICAgICAgJ2NsYWltLXByZXZpZXctLWxhcmdlJzogdHlwZSA9PT0gJ2xhcmdlJyxcbiAgICAgICAgICAnY2xhaW0tcHJldmlldy0taW5saW5lJzogdHlwZSA9PT0gJ2lubGluZScsXG4gICAgICAgICAgJ2NsYWltLXByZXZpZXctLXRvb2x0aXAnOiB0eXBlID09PSAndG9vbHRpcCcsXG4gICAgICAgICAgJ2NsYWltLXByZXZpZXctLWNoYW5uZWwnOiBpc0NoYW5uZWwsXG4gICAgICAgICAgJ2NsYWltLXByZXZpZXctLXZpc2l0ZWQnOiAhaXNDaGFubmVsICYmICFjbGFpbUlzTWluZSAmJiBoYXNWaXNpdGVkVXJpLFxuICAgICAgICAgICdjbGFpbS1wcmV2aWV3LS1wZW5kaW5nJzogcGVuZGluZyxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIHtpc0NoYW5uZWwgJiYgY2xhaW0gPyAoXG4gICAgICAgICAgPFVyaUluZGljYXRvciB1cmk9e3VyaX0gbGluaz5cbiAgICAgICAgICAgIDxDaGFubmVsVGh1bWJuYWlsIHVyaT17dXJpfSBvYnNjdXJlPXtjaGFubmVsSXNCbG9ja2VkfSAvPlxuICAgICAgICAgIDwvVXJpSW5kaWNhdG9yPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxOYXZMaW5rIHsuLi5uYXZMaW5rUHJvcHN9PlxuICAgICAgICAgICAgPEZpbGVUaHVtYm5haWwgdGh1bWJuYWlsPXt0aHVtYm5haWxVcmx9PlxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgPC9GaWxlVGh1bWJuYWlsPlxuICAgICAgICAgIDwvTmF2TGluaz5cbiAgICAgICAgKX1cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXdfX3RleHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXctbWV0YWRhdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlldy1pbmZvXCI+XG4gICAgICAgICAgICAgIDxOYXZMaW5rIHsuLi5uYXZMaW5rUHJvcHN9PlxuICAgICAgICAgICAgICAgIDxDbGFpbVByZXZpZXdUaXRsZSB1cmk9e3VyaX0gLz5cbiAgICAgICAgICAgICAgPC9OYXZMaW5rPlxuICAgICAgICAgICAgICB7IWlzQ2hhbm5lbCAmJiA8RmlsZVByb3BlcnRpZXMgdXJpPXt1cml9IC8+fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Q2xhaW1QcmV2aWV3U3VidGl0bGUgdXJpPXt1cml9IHR5cGU9e3R5cGV9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3R5cGUgIT09ICdzbWFsbCcgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3X19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIHshcGVuZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAge2hpZGVBY3Rpb25zID8gbnVsbCA6IGFjdGlvbnMgIT09IHVuZGVmaW5lZCA/IChcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zLS1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNDaGFubmVsICYmICFjaGFubmVsSXNCbG9ja2VkICYmICFjbGFpbUlzTWluZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U3Vic2NyaWJlQnV0dG9uIHVyaT17dXJpLnN0YXJ0c1dpdGgoJ2xicnk6Ly8nKSA/IHVyaSA6IGBsYnJ5Oi8vJHt1cml9YH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHshaGlkZUJsb2NrICYmIGlzQ2hhbm5lbCAmJiAhaXNTdWJzY3JpYmVkICYmICFjbGFpbUlzTWluZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tCdXR0b24gdXJpPXt1cmkuc3RhcnRzV2l0aCgnbGJyeTovLycpID8gdXJpIDogYGxicnk6Ly8ke3VyaX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGVTdXBwb3J0QWN0aW9uICYmIDxDbGFpbVN1cHBvcnRCdXR0b24gdXJpPXt1cml9IC8+fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2NsYWltICYmIChcbiAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICB7dHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMoY2xhaW0pXG4gICAgICAgICAgICAgICAgICApIDogcHJvcGVydGllcyAhPT0gdW5kZWZpbmVkID8gKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8Q2xhaW1UYWdzIHVyaT17dXJpfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoQ2xhaW1QcmV2aWV3KTtcbiJdLCJtYXBwaW5ncyI6IkFBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXdDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0JBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBREE7QUFoRUE7QUF1RUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUF6RUE7QUFDQTtBQUNBO0FBOEVBO0FBQ0E7QUFBQTtBQUFBO0FBakZBO0FBb0ZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUZBO0FBZ0dBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTEE7QUFXQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBREE7QUFZQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBTUE7QUFBQTtBQUVBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFBQTtBQVlBO0FBQUE7QUFBQTtBQTdOQTtBQXlPQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimPreview/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewSubtitle/index.js": -/*!*****************************************************!*\ - !*** ../ui/component/claimPreviewSubtitle/index.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/claimPreviewSubtitle/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(props.uri)(state),\n pending: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimIsPending\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n beginPublish: function beginPublish(name) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doClearPublish\"])());\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doPrepareEdit\"])({\n name: name\n }));\n dispatch(Object(connected_react_router__WEBPACK_IMPORTED_MODULE_3__[\"push\"])(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"])));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1N1YnRpdGxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVByZXZpZXdTdWJ0aXRsZS9pbmRleC5qcz8wMDQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsYWltRm9yVXJpLCBtYWtlU2VsZWN0Q2xhaW1Jc1BlbmRpbmcsIGRvQ2xlYXJQdWJsaXNoLCBkb1ByZXBhcmVFZGl0IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBwdXNoIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcic7XG5pbXBvcnQgQ2xhaW1QcmV2aWV3U3VidGl0bGUgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgcGVuZGluZzogbWFrZVNlbGVjdENsYWltSXNQZW5kaW5nKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBiZWdpblB1Ymxpc2g6IG5hbWUgPT4ge1xuICAgIGRpc3BhdGNoKGRvQ2xlYXJQdWJsaXNoKCkpO1xuICAgIGRpc3BhdGNoKGRvUHJlcGFyZUVkaXQoeyBuYW1lIH0pKTtcbiAgICBkaXNwYXRjaChwdXNoKGAvJC8ke1BBR0VTLlBVQkxJU0h9YCkpO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShDbGFpbVByZXZpZXdTdWJ0aXRsZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewSubtitle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewSubtitle/view.jsx": -/*!*****************************************************!*\ - !*** ../ui/component/claimPreviewSubtitle/view.jsx ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_dateTime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/dateTime */ \"../ui/component/dateTime/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nfunction ClaimPreviewSubtitle(props) {\n var pending = props.pending,\n uri = props.uri,\n claim = props.claim,\n type = props.type,\n beginPublish = props.beginPublish;\n var claimsInChannel = claim && claim.meta.claims_in_channel || 0;\n var isChannel;\n var name;\n\n try {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"parseURI\"])(uri);\n\n name = _parseURI.streamName;\n isChannel = _parseURI.isChannel;\n } catch (e) {}\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__subtitle\"\n }, claim ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n link: true\n }), ' ', pending ? __('Pending...') : claim && (isChannel ? type !== 'inline' && \"\".concat(claimsInChannel, \" \").concat(__('publishes')) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n timeAgo: true,\n uri: uri\n }))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('Publish something and claim this spot!')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: function onClick() {\n return beginPublish(name);\n },\n button: \"primary\",\n label: __('Publish to %uri%', {\n uri: uri\n })\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimPreviewSubtitle);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1N1YnRpdGxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVByZXZpZXdTdWJ0aXRsZS92aWV3LmpzeD9iNjUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFVyaUluZGljYXRvciBmcm9tICdjb21wb25lbnQvdXJpSW5kaWNhdG9yJztcbmltcG9ydCBEYXRlVGltZSBmcm9tICdjb21wb25lbnQvZGF0ZVRpbWUnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IHBhcnNlVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBjbGFpbTogP0NsYWltLFxuICBwZW5kaW5nPzogYm9vbGVhbixcbiAgdHlwZTogc3RyaW5nLFxuICBiZWdpblB1Ymxpc2g6IHN0cmluZyA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gQ2xhaW1QcmV2aWV3U3VidGl0bGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgcGVuZGluZywgdXJpLCBjbGFpbSwgdHlwZSwgYmVnaW5QdWJsaXNoIH0gPSBwcm9wcztcbiAgY29uc3QgY2xhaW1zSW5DaGFubmVsID0gKGNsYWltICYmIGNsYWltLm1ldGEuY2xhaW1zX2luX2NoYW5uZWwpIHx8IDA7XG5cbiAgbGV0IGlzQ2hhbm5lbDtcbiAgbGV0IG5hbWU7XG4gIHRyeSB7XG4gICAgKHsgc3RyZWFtTmFtZTogbmFtZSwgaXNDaGFubmVsIH0gPSBwYXJzZVVSSSh1cmkpKTtcbiAgfSBjYXRjaCAoZSkge31cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWVkaWFfX3N1YnRpdGxlXCI+XG4gICAgICB7Y2xhaW0gPyAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8VXJpSW5kaWNhdG9yIHVyaT17dXJpfSBsaW5rIC8+eycgJ31cbiAgICAgICAgICB7cGVuZGluZ1xuICAgICAgICAgICAgPyBfXygnUGVuZGluZy4uLicpXG4gICAgICAgICAgICA6IGNsYWltICYmXG4gICAgICAgICAgICAgIChpc0NoYW5uZWwgPyAoXG4gICAgICAgICAgICAgICAgdHlwZSAhPT0gJ2lubGluZScgJiYgYCR7Y2xhaW1zSW5DaGFubmVsfSAke19fKCdwdWJsaXNoZXMnKX1gXG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPERhdGVUaW1lIHRpbWVBZ28gdXJpPXt1cml9IC8+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgKSA6IChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxkaXY+e19fKCdQdWJsaXNoIHNvbWV0aGluZyBhbmQgY2xhaW0gdGhpcyBzcG90IScpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBiZWdpblB1Ymxpc2gobmFtZSl9IGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ1B1Ymxpc2ggdG8gJXVyaSUnLCB7IHVyaSB9KX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsYWltUHJldmlld1N1YnRpdGxlO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQU9BO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewSubtitle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewTile/index.js": -/*!*************************************************!*\ - !*** ../ui/component/claimPreviewTile/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/claimPreviewTile/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n channel: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectChannelForClaimUri\"])(props.uri)(state),\n isResolvingUri: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.uri)(state),\n thumbnail: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n title: props.uri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectBlackListedOutpoints\"])(state),\n filteredOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectFilteredOutpoints\"])(state),\n blockedChannelUris: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state),\n showMature: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectShowMatureContent\"])(state),\n isMature: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsNsfw\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n },\n getFile: function getFile(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFileGet\"])(uri, false));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpbGUvaW5kZXguanM/YzQzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgZG9SZXNvbHZlVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyxcbiAgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSxcbiAgbWFrZVNlbGVjdFRpdGxlRm9yVXJpLFxuICBkb0ZpbGVHZXQsXG4gIG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmksXG4gIHNlbGVjdEJsb2NrZWRDaGFubmVscyxcbiAgbWFrZVNlbGVjdENsYWltSXNOc2Z3LFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEJsYWNrTGlzdGVkT3V0cG9pbnRzLCBzZWxlY3RGaWx0ZXJlZE91dHBvaW50cyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IENsYWltUHJldmlld1RpbGUgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2xhaW06IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGNoYW5uZWw6IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBpc1Jlc29sdmluZ1VyaTogcHJvcHMudXJpICYmIG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGh1bWJuYWlsOiBwcm9wcy51cmkgJiYgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGl0bGU6IHByb3BzLnVyaSAmJiBtYWtlU2VsZWN0VGl0bGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiBzZWxlY3RCbGFja0xpc3RlZE91dHBvaW50cyhzdGF0ZSksXG4gIGZpbHRlcmVkT3V0cG9pbnRzOiBzZWxlY3RGaWx0ZXJlZE91dHBvaW50cyhzdGF0ZSksXG4gIGJsb2NrZWRDaGFubmVsVXJpczogc2VsZWN0QmxvY2tlZENoYW5uZWxzKHN0YXRlKSxcbiAgc2hvd01hdHVyZTogc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQoc3RhdGUpLFxuICBpc01hdHVyZTogbWFrZVNlbGVjdENsYWltSXNOc2Z3KHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICByZXNvbHZlVXJpOiB1cmkgPT4gZGlzcGF0Y2goZG9SZXNvbHZlVXJpKHVyaSkpLFxuICBnZXRGaWxlOiB1cmkgPT4gZGlzcGF0Y2goZG9GaWxlR2V0KHVyaSwgZmFsc2UpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoQ2xhaW1QcmV2aWV3VGlsZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewTile/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewTile/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/claimPreviewTile/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var component_fileThumbnail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/fileThumbnail */ \"../ui/component/fileThumbnail/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_common_truncated_text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/truncated-text */ \"../ui/component/common/truncated-text.jsx\");\n/* harmony import */ var component_dateTime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/dateTime */ \"../ui/component/dateTime/index.js\");\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var component_subscribeButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/subscribeButton */ \"../ui/component/subscribeButton/index.js\");\n/* harmony import */ var effects_use_get_thumbnail__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! effects/use-get-thumbnail */ \"../ui/effects/use-get-thumbnail.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var component_fileProperties__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/fileProperties */ \"../ui/component/fileProperties/index.js\");\n/* harmony import */ var component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/fileDownloadLink */ \"../ui/component/fileDownloadLink/index.js\");\n/* harmony import */ var component_claimRepostAuthor__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/claimRepostAuthor */ \"../ui/component/claimRepostAuthor/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ClaimPreviewTile(props) {\n var history = props.history,\n uri = props.uri,\n isResolvingUri = props.isResolvingUri,\n thumbnail = props.thumbnail,\n title = props.title,\n resolveUri = props.resolveUri,\n claim = props.claim,\n placeholder = props.placeholder,\n blackListedOutpoints = props.blackListedOutpoints,\n filteredOutpoints = props.filteredOutpoints,\n getFile = props.getFile,\n streamingUrl = props.streamingUrl,\n blockedChannelUris = props.blockedChannelUris,\n isMature = props.isMature,\n showMature = props.showMature;\n var isRepost = claim && claim.repost_channel_url;\n var shouldFetch = claim === undefined;\n var thumbnailUrl = Object(effects_use_get_thumbnail__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(uri, claim, streamingUrl, getFile, placeholder) || thumbnail;\n var claimsInChannel = claim && claim.meta.claims_in_channel || 0;\n var canonicalUrl = claim && claim.canonical_url;\n var navigateUrl = Object(util_url__WEBPACK_IMPORTED_MODULE_10__[\"formatLbryUrlForWeb\"])(canonicalUrl || uri || '/');\n var navLinkProps = {\n to: navigateUrl,\n onClick: function onClick(e) {\n return e.stopPropagation();\n }\n };\n var isChannel;\n var isValid = false;\n\n if (uri) {\n try {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"parseURI\"])(uri);\n\n isChannel = _parseURI.isChannel;\n isValid = true;\n } catch (e) {\n isValid = false;\n }\n }\n\n var signingChannel = claim && claim.signing_channel;\n var channelThumbnail;\n\n if (signingChannel) {\n channelThumbnail = // I should be able to just pass the the uri to <ChannelThumbnail /> but it wasn't working\n // Come back to me\n signingChannel.value && signingChannel.value.thumbnail && signingChannel.value.thumbnail.url || undefined;\n }\n\n function handleClick(e) {\n if (navigateUrl) {\n history.push(navigateUrl);\n }\n }\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (isValid && !isResolvingUri && shouldFetch && uri) {\n resolveUri(uri);\n }\n }, [isValid, isResolvingUri, uri, resolveUri, shouldFetch]);\n var shouldHide = false;\n\n if (isMature && !showMature) {\n // Unfortunately needed until this is resolved\n // https://github.com/lbryio/lbry-sdk/issues/2785\n shouldHide = true;\n } // This will be replaced once blocking is done at the wallet server level\n\n\n if (claim && !shouldHide && blackListedOutpoints) {\n shouldHide = blackListedOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n } // We're checking to see if the stream outpoint\n // or signing channel outpoint is in the filter list\n\n\n if (claim && !shouldHide && filteredOutpoints) {\n shouldHide = filteredOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n } // block stream claims\n\n\n if (claim && !shouldHide && blockedChannelUris.length && signingChannel) {\n shouldHide = blockedChannelUris.some(function (blockedUri) {\n return blockedUri === signingChannel.permanent_url;\n });\n } // block channel claims if we can't control for them in claim search\n // e.g. fetchRecommendedSubscriptions\n\n\n if (claim && isChannel && !shouldHide && blockedChannelUris.length) {\n shouldHide = blockedChannelUris.some(function (blockedUri) {\n return blockedUri === claim.permanent_url;\n });\n }\n\n if (shouldHide) {\n return null;\n }\n\n if (placeholder || isResolvingUri) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('claim-preview--tile', {})\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder media__thumb\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder claim-tile__title\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder claim-tile__info\"\n })));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n role: \"link\",\n onClick: handleClick,\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('card claim-preview--tile', {\n 'claim-preview__wrapper--channel': isChannel\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"NavLink\"], navLinkProps, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileThumbnail__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n thumbnail: thumbnailUrl\n }, !isChannel && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-tile__file-properties\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileProperties__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n uri: uri,\n small: true\n }))))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"NavLink\"], navLinkProps, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"claim-tile__title\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_truncated_text__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: title || claim && claim.name,\n lines: 2\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-tile__info\"\n }, isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-tile__about--channel\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_subscribeButton__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n uri: uri,\n shrinkOnMobile: true\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"claim-tile__publishes\"\n }, claimsInChannel === 1 ? __('%claimsInChannel% publish', {\n claimsInChannel: claimsInChannel\n }) : __('%claimsInChannel% publishes', {\n claimsInChannel: claimsInChannel\n }))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri,\n link: true,\n hideAnonymous: true\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n thumbnailPreview: channelThumbnail\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-tile__about\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri,\n link: true\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n timeAgo: true,\n uri: uri\n })))), isRepost && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-tile__repost-author\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimRepostAuthor__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n uri: uri\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(ClaimPreviewTile));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpbGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpbGUvdmlldy5qc3g/NmQ3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTmF2TGluaywgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEZpbGVUaHVtYm5haWwgZnJvbSAnY29tcG9uZW50L2ZpbGVUaHVtYm5haWwnO1xuaW1wb3J0IFVyaUluZGljYXRvciBmcm9tICdjb21wb25lbnQvdXJpSW5kaWNhdG9yJztcbmltcG9ydCBUcnVuY2F0ZWRUZXh0IGZyb20gJ2NvbXBvbmVudC9jb21tb24vdHJ1bmNhdGVkLXRleHQnO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gJ2NvbXBvbmVudC9kYXRlVGltZSc7XG5pbXBvcnQgQ2hhbm5lbFRodW1ibmFpbCBmcm9tICdjb21wb25lbnQvY2hhbm5lbFRodW1ibmFpbCc7XG5pbXBvcnQgU3Vic2NyaWJlQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9zdWJzY3JpYmVCdXR0b24nO1xuaW1wb3J0IHVzZUdldFRodW1ibmFpbCBmcm9tICdlZmZlY3RzL3VzZS1nZXQtdGh1bWJuYWlsJztcbmltcG9ydCB7IGZvcm1hdExicnlVcmxGb3JXZWIgfSBmcm9tICd1dGlsL3VybCc7XG5pbXBvcnQgeyBwYXJzZVVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEZpbGVQcm9wZXJ0aWVzIGZyb20gJ2NvbXBvbmVudC9maWxlUHJvcGVydGllcyc7XG5pbXBvcnQgRmlsZURvd25sb2FkTGluayBmcm9tICdjb21wb25lbnQvZmlsZURvd25sb2FkTGluayc7XG5pbXBvcnQgQ2xhaW1SZXBvc3RBdXRob3IgZnJvbSAnY29tcG9uZW50L2NsYWltUmVwb3N0QXV0aG9yJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltOiA/Q2xhaW0sXG4gIHJlc29sdmVVcmk6IHN0cmluZyA9PiB2b2lkLFxuICBpc1Jlc29sdmluZ1VyaTogYm9vbGVhbixcbiAgaGlzdG9yeTogeyBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICB0aHVtYm5haWw6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IGJvb2xlYW4sXG4gIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiBBcnJheTx7XG4gICAgdHhpZDogc3RyaW5nLFxuICAgIG5vdXQ6IG51bWJlcixcbiAgfT4sXG4gIGZpbHRlcmVkT3V0cG9pbnRzOiBBcnJheTx7XG4gICAgdHhpZDogc3RyaW5nLFxuICAgIG5vdXQ6IG51bWJlcixcbiAgfT4sXG4gIGJsb2NrZWRDaGFubmVsVXJpczogQXJyYXk8c3RyaW5nPixcbiAgZ2V0RmlsZTogc3RyaW5nID0+IHZvaWQsXG4gIHBsYWNlaG9sZGVyOiBib29sZWFuLFxuICBzdHJlYW1pbmdVcmw6IHN0cmluZyxcbiAgaXNNYXR1cmU6IGJvb2xlYW4sXG4gIHNob3dNYXR1cmU6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBDbGFpbVByZXZpZXdUaWxlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgaGlzdG9yeSxcbiAgICB1cmksXG4gICAgaXNSZXNvbHZpbmdVcmksXG4gICAgdGh1bWJuYWlsLFxuICAgIHRpdGxlLFxuICAgIHJlc29sdmVVcmksXG4gICAgY2xhaW0sXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgYmxhY2tMaXN0ZWRPdXRwb2ludHMsXG4gICAgZmlsdGVyZWRPdXRwb2ludHMsXG4gICAgZ2V0RmlsZSxcbiAgICBzdHJlYW1pbmdVcmwsXG4gICAgYmxvY2tlZENoYW5uZWxVcmlzLFxuICAgIGlzTWF0dXJlLFxuICAgIHNob3dNYXR1cmUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaXNSZXBvc3QgPSBjbGFpbSAmJiBjbGFpbS5yZXBvc3RfY2hhbm5lbF91cmw7XG4gIGNvbnN0IHNob3VsZEZldGNoID0gY2xhaW0gPT09IHVuZGVmaW5lZDtcbiAgY29uc3QgdGh1bWJuYWlsVXJsID0gdXNlR2V0VGh1bWJuYWlsKHVyaSwgY2xhaW0sIHN0cmVhbWluZ1VybCwgZ2V0RmlsZSwgcGxhY2Vob2xkZXIpIHx8IHRodW1ibmFpbDtcbiAgY29uc3QgY2xhaW1zSW5DaGFubmVsID0gKGNsYWltICYmIGNsYWltLm1ldGEuY2xhaW1zX2luX2NoYW5uZWwpIHx8IDA7XG4gIGNvbnN0IGNhbm9uaWNhbFVybCA9IGNsYWltICYmIGNsYWltLmNhbm9uaWNhbF91cmw7XG4gIGNvbnN0IG5hdmlnYXRlVXJsID0gZm9ybWF0TGJyeVVybEZvcldlYihjYW5vbmljYWxVcmwgfHwgdXJpIHx8ICcvJyk7XG5cbiAgY29uc3QgbmF2TGlua1Byb3BzID0ge1xuICAgIHRvOiBuYXZpZ2F0ZVVybCxcbiAgICBvbkNsaWNrOiBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCksXG4gIH07XG5cbiAgbGV0IGlzQ2hhbm5lbDtcbiAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgaWYgKHVyaSkge1xuICAgIHRyeSB7XG4gICAgICAoeyBpc0NoYW5uZWwgfSA9IHBhcnNlVVJJKHVyaSkpO1xuICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdDaGFubmVsID0gY2xhaW0gJiYgY2xhaW0uc2lnbmluZ19jaGFubmVsO1xuICBsZXQgY2hhbm5lbFRodW1ibmFpbDtcbiAgaWYgKHNpZ25pbmdDaGFubmVsKSB7XG4gICAgY2hhbm5lbFRodW1ibmFpbCA9XG4gICAgICAvLyBJIHNob3VsZCBiZSBhYmxlIHRvIGp1c3QgcGFzcyB0aGUgdGhlIHVyaSB0byA8Q2hhbm5lbFRodW1ibmFpbCAvPiBidXQgaXQgd2Fzbid0IHdvcmtpbmdcbiAgICAgIC8vIENvbWUgYmFjayB0byBtZVxuICAgICAgKHNpZ25pbmdDaGFubmVsLnZhbHVlICYmIHNpZ25pbmdDaGFubmVsLnZhbHVlLnRodW1ibmFpbCAmJiBzaWduaW5nQ2hhbm5lbC52YWx1ZS50aHVtYm5haWwudXJsKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgaWYgKG5hdmlnYXRlVXJsKSB7XG4gICAgICBoaXN0b3J5LnB1c2gobmF2aWdhdGVVcmwpO1xuICAgIH1cbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzVmFsaWQgJiYgIWlzUmVzb2x2aW5nVXJpICYmIHNob3VsZEZldGNoICYmIHVyaSkge1xuICAgICAgcmVzb2x2ZVVyaSh1cmkpO1xuICAgIH1cbiAgfSwgW2lzVmFsaWQsIGlzUmVzb2x2aW5nVXJpLCB1cmksIHJlc29sdmVVcmksIHNob3VsZEZldGNoXSk7XG5cbiAgbGV0IHNob3VsZEhpZGUgPSBmYWxzZTtcblxuICBpZiAoaXNNYXR1cmUgJiYgIXNob3dNYXR1cmUpIHtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5IG5lZWRlZCB1bnRpbCB0aGlzIGlzIHJlc29sdmVkXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LXNkay9pc3N1ZXMvMjc4NVxuICAgIHNob3VsZEhpZGUgPSB0cnVlO1xuICB9XG5cbiAgLy8gVGhpcyB3aWxsIGJlIHJlcGxhY2VkIG9uY2UgYmxvY2tpbmcgaXMgZG9uZSBhdCB0aGUgd2FsbGV0IHNlcnZlciBsZXZlbFxuICBpZiAoY2xhaW0gJiYgIXNob3VsZEhpZGUgJiYgYmxhY2tMaXN0ZWRPdXRwb2ludHMpIHtcbiAgICBzaG91bGRIaWRlID0gYmxhY2tMaXN0ZWRPdXRwb2ludHMuc29tZShcbiAgICAgIG91dHBvaW50ID0+XG4gICAgICAgIChzaWduaW5nQ2hhbm5lbCAmJiBvdXRwb2ludC50eGlkID09PSBzaWduaW5nQ2hhbm5lbC50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IHNpZ25pbmdDaGFubmVsLm5vdXQpIHx8XG4gICAgICAgIChvdXRwb2ludC50eGlkID09PSBjbGFpbS50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IGNsYWltLm5vdXQpXG4gICAgKTtcbiAgfVxuICAvLyBXZSdyZSBjaGVja2luZyB0byBzZWUgaWYgdGhlIHN0cmVhbSBvdXRwb2ludFxuICAvLyBvciBzaWduaW5nIGNoYW5uZWwgb3V0cG9pbnQgaXMgaW4gdGhlIGZpbHRlciBsaXN0XG4gIGlmIChjbGFpbSAmJiAhc2hvdWxkSGlkZSAmJiBmaWx0ZXJlZE91dHBvaW50cykge1xuICAgIHNob3VsZEhpZGUgPSBmaWx0ZXJlZE91dHBvaW50cy5zb21lKFxuICAgICAgb3V0cG9pbnQgPT5cbiAgICAgICAgKHNpZ25pbmdDaGFubmVsICYmIG91dHBvaW50LnR4aWQgPT09IHNpZ25pbmdDaGFubmVsLnR4aWQgJiYgb3V0cG9pbnQubm91dCA9PT0gc2lnbmluZ0NoYW5uZWwubm91dCkgfHxcbiAgICAgICAgKG91dHBvaW50LnR4aWQgPT09IGNsYWltLnR4aWQgJiYgb3V0cG9pbnQubm91dCA9PT0gY2xhaW0ubm91dClcbiAgICApO1xuICB9XG5cbiAgLy8gYmxvY2sgc3RyZWFtIGNsYWltc1xuICBpZiAoY2xhaW0gJiYgIXNob3VsZEhpZGUgJiYgYmxvY2tlZENoYW5uZWxVcmlzLmxlbmd0aCAmJiBzaWduaW5nQ2hhbm5lbCkge1xuICAgIHNob3VsZEhpZGUgPSBibG9ja2VkQ2hhbm5lbFVyaXMuc29tZShibG9ja2VkVXJpID0+IGJsb2NrZWRVcmkgPT09IHNpZ25pbmdDaGFubmVsLnBlcm1hbmVudF91cmwpO1xuICB9XG4gIC8vIGJsb2NrIGNoYW5uZWwgY2xhaW1zIGlmIHdlIGNhbid0IGNvbnRyb2wgZm9yIHRoZW0gaW4gY2xhaW0gc2VhcmNoXG4gIC8vIGUuZy4gZmV0Y2hSZWNvbW1lbmRlZFN1YnNjcmlwdGlvbnNcbiAgaWYgKGNsYWltICYmIGlzQ2hhbm5lbCAmJiAhc2hvdWxkSGlkZSAmJiBibG9ja2VkQ2hhbm5lbFVyaXMubGVuZ3RoKSB7XG4gICAgc2hvdWxkSGlkZSA9IGJsb2NrZWRDaGFubmVsVXJpcy5zb21lKGJsb2NrZWRVcmkgPT4gYmxvY2tlZFVyaSA9PT0gY2xhaW0ucGVybWFuZW50X3VybCk7XG4gIH1cblxuICBpZiAoc2hvdWxkSGlkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBsYWNlaG9sZGVyIHx8IGlzUmVzb2x2aW5nVXJpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NsYWltLXByZXZpZXctLXRpbGUnLCB7fSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYWNlaG9sZGVyIG1lZGlhX190aHVtYlwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGxhY2Vob2xkZXJfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYWNlaG9sZGVyIGNsYWltLXRpbGVfX3RpdGxlXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYWNlaG9sZGVyIGNsYWltLXRpbGVfX2luZm9cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICByb2xlPVwibGlua1wiXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2FyZCBjbGFpbS1wcmV2aWV3LS10aWxlJywge1xuICAgICAgICAnY2xhaW0tcHJldmlld19fd3JhcHBlci0tY2hhbm5lbCc6IGlzQ2hhbm5lbCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxOYXZMaW5rIHsuLi5uYXZMaW5rUHJvcHN9PlxuICAgICAgICA8RmlsZVRodW1ibmFpbCB0aHVtYm5haWw9e3RodW1ibmFpbFVybH0+XG4gICAgICAgICAgeyFpc0NoYW5uZWwgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXRpbGVfX2ZpbGUtcHJvcGVydGllc1wiPlxuICAgICAgICAgICAgICAgIDxGaWxlUHJvcGVydGllcyB1cmk9e3VyaX0gc21hbGwgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRmlsZVRodW1ibmFpbD5cbiAgICAgIDwvTmF2TGluaz5cbiAgICAgIDxOYXZMaW5rIHsuLi5uYXZMaW5rUHJvcHN9PlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwiY2xhaW0tdGlsZV9fdGl0bGVcIj5cbiAgICAgICAgICA8VHJ1bmNhdGVkVGV4dCB0ZXh0PXt0aXRsZSB8fCAoY2xhaW0gJiYgY2xhaW0ubmFtZSl9IGxpbmVzPXsyfSAvPlxuICAgICAgICA8L2gyPlxuICAgICAgPC9OYXZMaW5rPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS10aWxlX19pbmZvXCI+XG4gICAgICAgICAge2lzQ2hhbm5lbCA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tdGlsZV9fYWJvdXQtLWNoYW5uZWxcIj5cbiAgICAgICAgICAgICAgPFN1YnNjcmliZUJ1dHRvbiB1cmk9e3VyaX0gc2hyaW5rT25Nb2JpbGUgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2xhaW0tdGlsZV9fcHVibGlzaGVzXCI+XG4gICAgICAgICAgICAgICAge2NsYWltc0luQ2hhbm5lbCA9PT0gMVxuICAgICAgICAgICAgICAgICAgPyBfXygnJWNsYWltc0luQ2hhbm5lbCUgcHVibGlzaCcsIHsgY2xhaW1zSW5DaGFubmVsIH0pXG4gICAgICAgICAgICAgICAgICA6IF9fKCclY2xhaW1zSW5DaGFubmVsJSBwdWJsaXNoZXMnLCB7IGNsYWltc0luQ2hhbm5lbCB9KX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPFVyaUluZGljYXRvciB1cmk9e3VyaX0gbGluayBoaWRlQW5vbnltb3VzPlxuICAgICAgICAgICAgICAgIDxDaGFubmVsVGh1bWJuYWlsIHRodW1ibmFpbFByZXZpZXc9e2NoYW5uZWxUaHVtYm5haWx9IC8+XG4gICAgICAgICAgICAgIDwvVXJpSW5kaWNhdG9yPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tdGlsZV9fYWJvdXRcIj5cbiAgICAgICAgICAgICAgICA8VXJpSW5kaWNhdG9yIHVyaT17dXJpfSBsaW5rIC8+XG4gICAgICAgICAgICAgICAgPERhdGVUaW1lIHRpbWVBZ28gdXJpPXt1cml9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2lzUmVwb3N0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXRpbGVfX3JlcG9zdC1hdXRob3JcIj5cbiAgICAgICAgICAgIDxDbGFpbVJlcG9zdEF1dGhvciB1cmk9e3VyaX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoQ2xhaW1QcmV2aWV3VGlsZSk7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTBCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5FQTtBQUNBO0FBQ0E7QUFxRUE7QUFDQTtBQUNBO0FBREE7QUF4RUE7QUErRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFqRkE7QUFDQTtBQUNBO0FBdUZBO0FBQ0E7QUFBQTtBQUFBO0FBMUZBO0FBNkZBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewTile/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewTitle/index.js": -/*!**************************************************!*\ - !*** ../ui/component/claimPreviewTitle/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimPreviewTitle/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpdGxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVByZXZpZXdUaXRsZS9pbmRleC5qcz9mYWRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksIG1ha2VTZWxlY3RUaXRsZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IENsYWltUHJldmlld1RpdGxlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHRpdGxlOiBtYWtlU2VsZWN0VGl0bGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKENsYWltUHJldmlld1RpdGxlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewTitle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimPreviewTitle/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/claimPreviewTitle/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_truncated_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/truncated-text */ \"../ui/component/common/truncated-text.jsx\");\n\n\n\nfunction ClaimPreviewTitle(props) {\n var title = props.title,\n claim = props.claim;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__title\"\n }, claim ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_truncated_text__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: title || claim.name,\n lines: 2\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('Nothing here')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimPreviewTitle);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUHJldmlld1RpdGxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVByZXZpZXdUaXRsZS92aWV3LmpzeD85MGVjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRydW5jYXRlZFRleHQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi90cnVuY2F0ZWQtdGV4dCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBjbGFpbTogP0NsYWltLFxuICB0aXRsZTogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gQ2xhaW1QcmV2aWV3VGl0bGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdGl0bGUsIGNsYWltIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlld19fdGl0bGVcIj5cbiAgICAgIHtjbGFpbSA/IDxUcnVuY2F0ZWRUZXh0IHRleHQ9e3RpdGxlIHx8IGNsYWltLm5hbWV9IGxpbmVzPXsyfSAvPiA6IDxzcGFuPntfXygnTm90aGluZyBoZXJlJyl9PC9zcGFuPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xhaW1QcmV2aWV3VGl0bGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimPreviewTitle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimRepostAuthor/index.js": -/*!**************************************************!*\ - !*** ../ui/component/claimRepostAuthor/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimRepostAuthor/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUmVwb3N0QXV0aG9yL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVJlcG9zdEF1dGhvci9pbmRleC5qcz84ZTVhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDbGFpbVJlcG9zdEF1dGhvciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShDbGFpbVJlcG9zdEF1dGhvcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimRepostAuthor/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimRepostAuthor/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/claimRepostAuthor/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n\n\n\n\n\n\nfunction ClaimRepostAuthor(props) {\n var claim = props.claim;\n var repostChannelUrl = claim && claim.repost_channel_url;\n\n if (!repostChannelUrl) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"claim-preview__repost-author\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REPOST\"],\n size: 10\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n repost_channel_link: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n link: true,\n uri: repostChannelUrl\n })\n }\n }, \"%repost_channel_link% reposted\"));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimRepostAuthor);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltUmVwb3N0QXV0aG9yL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVJlcG9zdEF1dGhvci92aWV3LmpzeD9mYmQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IFVyaUluZGljYXRvciBmcm9tICdjb21wb25lbnQvdXJpSW5kaWNhdG9yJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBjbGFpbTogP0NsYWltLFxufTtcblxuZnVuY3Rpb24gQ2xhaW1SZXBvc3RBdXRob3IocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgY2xhaW0gfSA9IHByb3BzO1xuICBjb25zdCByZXBvc3RDaGFubmVsVXJsID0gY2xhaW0gJiYgY2xhaW0ucmVwb3N0X2NoYW5uZWxfdXJsO1xuXG4gIGlmICghcmVwb3N0Q2hhbm5lbFVybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXdfX3JlcG9zdC1hdXRob3JcIj5cbiAgICAgIDxJY29uIGljb249e0lDT05TLlJFUE9TVH0gc2l6ZT17MTB9IC8+XG4gICAgICA8STE4bk1lc3NhZ2UgdG9rZW5zPXt7IHJlcG9zdF9jaGFubmVsX2xpbms6IDxVcmlJbmRpY2F0b3IgbGluayB1cmk9e3JlcG9zdENoYW5uZWxVcmx9IC8+IH19PlxuICAgICAgICAlcmVwb3N0X2NoYW5uZWxfbGluayUgcmVwb3N0ZWRcbiAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsYWltUmVwb3N0QXV0aG9yO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimRepostAuthor/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimSupportButton/index.js": -/*!***************************************************!*\ - !*** ../ui/component/claimSupportButton/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimSupportButton/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doOpenModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doOpenModal\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltU3VwcG9ydEJ1dHRvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1TdXBwb3J0QnV0dG9uL2luZGV4LmpzP2ExNzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IENsYWltU3VwcG9ydEJ1dHRvbiBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBudWxsLFxuICB7XG4gICAgZG9PcGVuTW9kYWwsXG4gIH1cbikoQ2xhaW1TdXBwb3J0QnV0dG9uKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimSupportButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimSupportButton/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/claimSupportButton/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ClaimSupportButton; });\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\nfunction ClaimSupportButton(props) {\n var doOpenModal = props.doOpenModal,\n uri = props.uri;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SUPPORT\"],\n label: __('Support'),\n requiresAuth: true,\n title: __('Support this claim'),\n onClick: function onClick() {\n return doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SEND_TIP\"], {\n uri: uri,\n isSupport: true\n });\n }\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltU3VwcG9ydEJ1dHRvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1TdXBwb3J0QnV0dG9uL3ZpZXcuanN4Pzg2YjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgZG9PcGVuTW9kYWw6IChzdHJpbmcsIHt9KSA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2xhaW1TdXBwb3J0QnV0dG9uKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGRvT3Blbk1vZGFsLCB1cmkgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgIGljb249e0lDT05TLlNVUFBPUlR9XG4gICAgICBsYWJlbD17X18oJ1N1cHBvcnQnKX1cbiAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgdGl0bGU9e19fKCdTdXBwb3J0IHRoaXMgY2xhaW0nKX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IGRvT3Blbk1vZGFsKE1PREFMUy5TRU5EX1RJUCwgeyB1cmksIGlzU3VwcG9ydDogdHJ1ZSB9KX1cbiAgICAvPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFTQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/claimSupportButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimTags/index.js": -/*!******************************************!*\ - !*** ../ui/component/claimTags/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimTags/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n tags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTagsForUri\"])(props.uri)(state),\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVGFncy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1UYWdzL2luZGV4LmpzP2RiZWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RUYWdzRm9yVXJpLCBzZWxlY3RGb2xsb3dlZFRhZ3MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDbGFpbVRhZ3MgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgdGFnczogbWFrZVNlbGVjdFRhZ3NGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIG51bGxcbikoQ2xhaW1UYWdzKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimTags/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimTags/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/claimTags/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ClaimTags; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_tag__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/tag */ \"../ui/component/tag/index.js\");\n\n\n\nvar SLIM_TAGS = 1;\nvar NORMAL_TAGS = 3;\nvar LARGE_TAGS = 10;\nfunction ClaimTags(props) {\n var tags = props.tags,\n followedTags = props.followedTags,\n type = props.type;\n var numberOfTags = type === 'small' ? SLIM_TAGS : type === 'large' ? LARGE_TAGS : NORMAL_TAGS;\n var tagsToDisplay = [];\n\n if (tags.includes('mature')) {\n tagsToDisplay.push('mature');\n }\n\n for (var i = 0; tagsToDisplay.length < numberOfTags - 2; i++) {\n var tag = followedTags[i];\n\n if (!tag) {\n break;\n }\n\n if (tags.includes(tag.name)) {\n tagsToDisplay.push(tag.name);\n }\n }\n\n var sortedTags = tags.sort(function (a, b) {\n return a.localeCompare(b);\n });\n\n for (var i = 0; i < sortedTags.length; i++) {\n var _tag = sortedTags[i];\n\n if (!_tag || tagsToDisplay.length === numberOfTags) {\n break;\n }\n\n if (!tagsToDisplay.includes(_tag)) {\n tagsToDisplay.push(_tag);\n }\n }\n\n if (!tagsToDisplay.length) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('file-properties', {\n 'file-properties--large': type === 'large'\n })\n }, tagsToDisplay.map(function (tag) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_tag__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: tag,\n title: tag,\n name: tag\n });\n }));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVGFncy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1UYWdzL3ZpZXcuanN4P2E0ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFRhZyBmcm9tICdjb21wb25lbnQvdGFnJztcblxuY29uc3QgU0xJTV9UQUdTID0gMTtcbmNvbnN0IE5PUk1BTF9UQUdTID0gMztcbmNvbnN0IExBUkdFX1RBR1MgPSAxMDtcblxudHlwZSBQcm9wcyA9IHtcbiAgdGFnczogQXJyYXk8c3RyaW5nPixcbiAgZm9sbG93ZWRUYWdzOiBBcnJheTxUYWc+LFxuICB0eXBlOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDbGFpbVRhZ3MocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdGFncywgZm9sbG93ZWRUYWdzLCB0eXBlIH0gPSBwcm9wcztcbiAgY29uc3QgbnVtYmVyT2ZUYWdzID0gdHlwZSA9PT0gJ3NtYWxsJyA/IFNMSU1fVEFHUyA6IHR5cGUgPT09ICdsYXJnZScgPyBMQVJHRV9UQUdTIDogTk9STUFMX1RBR1M7XG5cbiAgbGV0IHRhZ3NUb0Rpc3BsYXkgPSBbXTtcblxuICBpZiAodGFncy5pbmNsdWRlcygnbWF0dXJlJykpIHtcbiAgICB0YWdzVG9EaXNwbGF5LnB1c2goJ21hdHVyZScpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRhZ3NUb0Rpc3BsYXkubGVuZ3RoIDwgbnVtYmVyT2ZUYWdzIC0gMjsgaSsrKSB7XG4gICAgY29uc3QgdGFnID0gZm9sbG93ZWRUYWdzW2ldO1xuICAgIGlmICghdGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFncy5pbmNsdWRlcyh0YWcubmFtZSkpIHtcbiAgICAgIHRhZ3NUb0Rpc3BsYXkucHVzaCh0YWcubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc29ydGVkVGFncyA9IHRhZ3Muc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRlZFRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YWcgPSBzb3J0ZWRUYWdzW2ldO1xuICAgIGlmICghdGFnIHx8IHRhZ3NUb0Rpc3BsYXkubGVuZ3RoID09PSBudW1iZXJPZlRhZ3MpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICghdGFnc1RvRGlzcGxheS5pbmNsdWRlcyh0YWcpKSB7XG4gICAgICB0YWdzVG9EaXNwbGF5LnB1c2godGFnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRhZ3NUb0Rpc3BsYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdmaWxlLXByb3BlcnRpZXMnLCB7ICdmaWxlLXByb3BlcnRpZXMtLWxhcmdlJzogdHlwZSA9PT0gJ2xhcmdlJyB9KX0+XG4gICAgICB7dGFnc1RvRGlzcGxheS5tYXAodGFnID0+IChcbiAgICAgICAgPFRhZyBrZXk9e3RhZ30gdGl0bGU9e3RhZ30gbmFtZT17dGFnfSAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimTags/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimTilesDiscover/index.js": -/*!***************************************************!*\ - !*** ../ui/component/claimTilesDiscover/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/tags */ \"../ui/redux/actions/tags.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/claimTilesDiscover/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n claimSearchByQuery: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimSearchByQuery\"])(state),\n loading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFetchingClaimSearch\"])(state),\n showNsfw: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_MATURE)(state),\n showReposts: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_REPOSTS)(state),\n hiddenUris: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state)\n };\n};\n\nvar perform = {\n doClaimSearch: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClaimSearch\"],\n doToggleTagFollowDesktop: redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__[\"doToggleTagFollowDesktop\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVGlsZXNEaXNjb3Zlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1UaWxlc0Rpc2NvdmVyL2luZGV4LmpzP2Q4MDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvQ2xhaW1TZWFyY2gsXG4gIHNlbGVjdENsYWltU2VhcmNoQnlRdWVyeSxcbiAgc2VsZWN0RmV0Y2hpbmdDbGFpbVNlYXJjaCxcbiAgc2VsZWN0QmxvY2tlZENoYW5uZWxzLFxuICBTRVRUSU5HUyxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3RhZ3MnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IENsYWltTGlzdERpc2NvdmVyIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGNsYWltU2VhcmNoQnlRdWVyeTogc2VsZWN0Q2xhaW1TZWFyY2hCeVF1ZXJ5KHN0YXRlKSxcbiAgbG9hZGluZzogc2VsZWN0RmV0Y2hpbmdDbGFpbVNlYXJjaChzdGF0ZSksXG4gIHNob3dOc2Z3OiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX01BVFVSRSkoc3RhdGUpLFxuICBzaG93UmVwb3N0czogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuU0hPV19SRVBPU1RTKShzdGF0ZSksXG4gIGhpZGRlblVyaXM6IHNlbGVjdEJsb2NrZWRDaGFubmVscyhzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IHtcbiAgZG9DbGFpbVNlYXJjaCxcbiAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKENsYWltTGlzdERpc2NvdmVyKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUZBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimTilesDiscover/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimTilesDiscover/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/claimTilesDiscover/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_claimPreviewTile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimPreviewTile */ \"../ui/component/claimPreviewTile/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\nfunction ClaimTilesDiscover(props) {\n var doClaimSearch = props.doClaimSearch,\n claimSearchByQuery = props.claimSearchByQuery,\n showNsfw = props.showNsfw,\n hiddenUris = props.hiddenUris,\n tags = props.tags,\n channelIds = props.channelIds,\n notChannelIds = props.notChannelIds,\n orderBy = props.orderBy,\n _props$pageSize = props.pageSize,\n pageSize = _props$pageSize === void 0 ? 8 : _props$pageSize,\n releaseTime = props.releaseTime,\n claimType = props.claimType,\n timestamp = props.timestamp;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n hasSearched = _React$useState2[0],\n setHasSearched = _React$useState2[1];\n\n var options = {\n page_size: pageSize,\n claim_type: claimType || undefined,\n // no_totals makes it so the sdk doesn't have to calculate total number pages for pagination\n // it's faster, but we will need to remove it if we start using total_pages\n no_totals: true,\n any_tags: tags || [],\n not_tags: !showNsfw ? lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"MATURE_TAGS\"] : [],\n channel_ids: channelIds || [],\n not_channel_ids: notChannelIds || ( // If channelIds were passed in, we don't need not_channel_ids\n !channelIds && hiddenUris && hiddenUris.length ? hiddenUris.map(function (hiddenUri) {\n return hiddenUri.split('#')[1];\n }) : []),\n order_by: orderBy || ['trending_group', 'trending_mixed']\n };\n\n if (releaseTime) {\n options.release_time = releaseTime;\n } // https://github.com/lbryio/lbry-desktop/issues/3774\n // if (!showReposts) {\n // if (Array.isArray(options.claim_type)) {\n // options.claim_type = options.claim_type.filter(claimType => claimType !== 'repost');\n // } else {\n // options.claim_type = ['stream', 'channel'];\n // }\n // }\n\n\n if (claimType) {\n options.claim_type = claimType;\n }\n\n if (timestamp) {\n options.timestamp = timestamp;\n }\n\n var claimSearchCacheQuery = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"createNormalizedClaimSearchKey\"])(options);\n var uris = claimSearchByQuery[claimSearchCacheQuery] || [];\n var shouldPerformSearch = !hasSearched || uris.length === 0; // Don't use the query from createNormalizedClaimSearchKey for the effect since that doesn't include page & release_time\n\n var optionsStringForEffect = JSON.stringify(options);\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (shouldPerformSearch) {\n var searchOptions = JSON.parse(optionsStringForEffect);\n doClaimSearch(searchOptions);\n setHasSearched(true);\n }\n }, [doClaimSearch, shouldPerformSearch, optionsStringForEffect, hasSearched]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"claim-grid\"\n }, uris && uris.length ? uris.map(function (uri) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreviewTile__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: uri,\n uri: uri\n });\n }) : new Array(pageSize).fill(1).map(function (x, i) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreviewTile__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: i,\n placeholder: true\n });\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimTilesDiscover);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVGlsZXNEaXNjb3Zlci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY2xhaW1UaWxlc0Rpc2NvdmVyL3ZpZXcuanN4PzY4MDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVOb3JtYWxpemVkQ2xhaW1TZWFyY2hLZXksIE1BVFVSRV9UQUdTIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgQ2xhaW1QcmV2aWV3VGlsZSBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3VGlsZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaXM6IEFycmF5PHN0cmluZz4sXG4gIGRvQ2xhaW1TZWFyY2g6ICh7fSkgPT4gdm9pZCxcbiAgc2hvd05zZnc6IGJvb2xlYW4sXG4gIHNob3dSZXBvc3RzOiBib29sZWFuLFxuICBoaXN0b3J5OiB7IGFjdGlvbjogc3RyaW5nLCBwdXNoOiBzdHJpbmcgPT4gdm9pZCwgcmVwbGFjZTogc3RyaW5nID0+IHZvaWQgfSxcbiAgY2xhaW1TZWFyY2hCeVF1ZXJ5OiB7XG4gICAgW3N0cmluZ106IEFycmF5PHN0cmluZz4sXG4gIH0sXG4gIC8vIGNsYWltIHNlYXJjaCBvcHRpb25zIGFyZSBiZWxvd1xuICB0YWdzOiBBcnJheTxzdHJpbmc+LFxuICBoaWRkZW5VcmlzOiBBcnJheTxzdHJpbmc+LFxuICBjaGFubmVsSWRzPzogQXJyYXk8c3RyaW5nPixcbiAgbm90Q2hhbm5lbElkcz86IEFycmF5PHN0cmluZz4sXG4gIHBhZ2VTaXplOiBudW1iZXIsXG4gIG9yZGVyQnk/OiBBcnJheTxzdHJpbmc+LFxuICByZWxlYXNlVGltZT86IHN0cmluZyxcbiAgY2xhaW1UeXBlPzogQXJyYXk8c3RyaW5nPixcbiAgdGltZXN0YW1wPzogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gQ2xhaW1UaWxlc0Rpc2NvdmVyKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgZG9DbGFpbVNlYXJjaCxcbiAgICBjbGFpbVNlYXJjaEJ5UXVlcnksXG4gICAgc2hvd05zZncsXG4gICAgLy8gc2hvd1JlcG9zdHMsXG4gICAgaGlkZGVuVXJpcyxcbiAgICAvLyBCZWxvdyBhcmUgb3B0aW9ucyB0byBwYXNzIHRoYXQgYXJlIGZvcndhcmRlZCB0byBjbGFpbV9zZWFyY2hcbiAgICB0YWdzLFxuICAgIGNoYW5uZWxJZHMsXG4gICAgbm90Q2hhbm5lbElkcyxcbiAgICBvcmRlckJ5LFxuICAgIHBhZ2VTaXplID0gOCxcbiAgICByZWxlYXNlVGltZSxcbiAgICBjbGFpbVR5cGUsXG4gICAgdGltZXN0YW1wLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtoYXNTZWFyY2hlZCwgc2V0SGFzU2VhcmNoZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvcHRpb25zOiB7XG4gICAgcGFnZV9zaXplOiBudW1iZXIsXG4gICAgbm9fdG90YWxzOiBib29sZWFuLFxuICAgIGFueV90YWdzOiBBcnJheTxzdHJpbmc+LFxuICAgIGNoYW5uZWxfaWRzOiBBcnJheTxzdHJpbmc+LFxuICAgIGNoYW5uZWxfaWRzOiBBcnJheTxzdHJpbmc+LFxuICAgIG5vdF9jaGFubmVsX2lkczogQXJyYXk8c3RyaW5nPixcbiAgICBub3RfdGFnczogQXJyYXk8c3RyaW5nPixcbiAgICBvcmRlcl9ieTogQXJyYXk8c3RyaW5nPixcbiAgICByZWxlYXNlX3RpbWU/OiBzdHJpbmcsXG4gICAgY2xhaW1fdHlwZT86IEFycmF5PHN0cmluZz4sXG4gICAgdGltZXN0YW1wPzogc3RyaW5nLFxuICB9ID0ge1xuICAgIHBhZ2Vfc2l6ZTogcGFnZVNpemUsXG4gICAgY2xhaW1fdHlwZTogY2xhaW1UeXBlIHx8IHVuZGVmaW5lZCxcbiAgICAvLyBub190b3RhbHMgbWFrZXMgaXQgc28gdGhlIHNkayBkb2Vzbid0IGhhdmUgdG8gY2FsY3VsYXRlIHRvdGFsIG51bWJlciBwYWdlcyBmb3IgcGFnaW5hdGlvblxuICAgIC8vIGl0J3MgZmFzdGVyLCBidXQgd2Ugd2lsbCBuZWVkIHRvIHJlbW92ZSBpdCBpZiB3ZSBzdGFydCB1c2luZyB0b3RhbF9wYWdlc1xuICAgIG5vX3RvdGFsczogdHJ1ZSxcbiAgICBhbnlfdGFnczogdGFncyB8fCBbXSxcbiAgICBub3RfdGFnczogIXNob3dOc2Z3ID8gTUFUVVJFX1RBR1MgOiBbXSxcbiAgICBjaGFubmVsX2lkczogY2hhbm5lbElkcyB8fCBbXSxcbiAgICBub3RfY2hhbm5lbF9pZHM6XG4gICAgICBub3RDaGFubmVsSWRzIHx8XG4gICAgICAvLyBJZiBjaGFubmVsSWRzIHdlcmUgcGFzc2VkIGluLCB3ZSBkb24ndCBuZWVkIG5vdF9jaGFubmVsX2lkc1xuICAgICAgKCFjaGFubmVsSWRzICYmIGhpZGRlblVyaXMgJiYgaGlkZGVuVXJpcy5sZW5ndGggPyBoaWRkZW5VcmlzLm1hcChoaWRkZW5VcmkgPT4gaGlkZGVuVXJpLnNwbGl0KCcjJylbMV0pIDogW10pLFxuICAgIG9yZGVyX2J5OiBvcmRlckJ5IHx8IFsndHJlbmRpbmdfZ3JvdXAnLCAndHJlbmRpbmdfbWl4ZWQnXSxcbiAgfTtcblxuICBpZiAocmVsZWFzZVRpbWUpIHtcbiAgICBvcHRpb25zLnJlbGVhc2VfdGltZSA9IHJlbGVhc2VUaW1lO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LWRlc2t0b3AvaXNzdWVzLzM3NzRcbiAgLy8gaWYgKCFzaG93UmVwb3N0cykge1xuICAvLyAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuY2xhaW1fdHlwZSkpIHtcbiAgLy8gICAgIG9wdGlvbnMuY2xhaW1fdHlwZSA9IG9wdGlvbnMuY2xhaW1fdHlwZS5maWx0ZXIoY2xhaW1UeXBlID0+IGNsYWltVHlwZSAhPT0gJ3JlcG9zdCcpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBvcHRpb25zLmNsYWltX3R5cGUgPSBbJ3N0cmVhbScsICdjaGFubmVsJ107XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaWYgKGNsYWltVHlwZSkge1xuICAgIG9wdGlvbnMuY2xhaW1fdHlwZSA9IGNsYWltVHlwZTtcbiAgfVxuXG4gIGlmICh0aW1lc3RhbXApIHtcbiAgICBvcHRpb25zLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgfVxuXG4gIGNvbnN0IGNsYWltU2VhcmNoQ2FjaGVRdWVyeSA9IGNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleShvcHRpb25zKTtcbiAgY29uc3QgdXJpcyA9IGNsYWltU2VhcmNoQnlRdWVyeVtjbGFpbVNlYXJjaENhY2hlUXVlcnldIHx8IFtdO1xuICBjb25zdCBzaG91bGRQZXJmb3JtU2VhcmNoID0gIWhhc1NlYXJjaGVkIHx8IHVyaXMubGVuZ3RoID09PSAwO1xuICAvLyBEb24ndCB1c2UgdGhlIHF1ZXJ5IGZyb20gY3JlYXRlTm9ybWFsaXplZENsYWltU2VhcmNoS2V5IGZvciB0aGUgZWZmZWN0IHNpbmNlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHBhZ2UgJiByZWxlYXNlX3RpbWVcbiAgY29uc3Qgb3B0aW9uc1N0cmluZ0ZvckVmZmVjdCA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcmZvcm1TZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmdGb3JFZmZlY3QpO1xuICAgICAgZG9DbGFpbVNlYXJjaChzZWFyY2hPcHRpb25zKTtcbiAgICAgIHNldEhhc1NlYXJjaGVkKHRydWUpO1xuICAgIH1cbiAgfSwgW2RvQ2xhaW1TZWFyY2gsIHNob3VsZFBlcmZvcm1TZWFyY2gsIG9wdGlvbnNTdHJpbmdGb3JFZmZlY3QsIGhhc1NlYXJjaGVkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8dWwgY2xhc3NOYW1lPVwiY2xhaW0tZ3JpZFwiPlxuICAgICAge3VyaXMgJiYgdXJpcy5sZW5ndGhcbiAgICAgICAgPyB1cmlzLm1hcCh1cmkgPT4gPENsYWltUHJldmlld1RpbGUga2V5PXt1cml9IHVyaT17dXJpfSAvPilcbiAgICAgICAgOiBuZXcgQXJyYXkocGFnZVNpemUpLmZpbGwoMSkubWFwKCh4LCBpKSA9PiA8Q2xhaW1QcmV2aWV3VGlsZSBrZXk9e2l9IHBsYWNlaG9sZGVyIC8+KX1cbiAgICA8L3VsPlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgQ2xhaW1UaWxlc0Rpc2NvdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXNCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaUJBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQS9DQTtBQW1EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFPQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimTilesDiscover/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/claimUri/index.js": -/*!*****************************************!*\ - !*** ../ui/component/claimUri/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/claimUri/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n shortUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectCanonicalUrlForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVXJpL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVVyaS9pbmRleC5qcz8wYTgyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2Fub25pY2FsVXJsRm9yVXJpLCBkb1RvYXN0IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgQ2xhaW1VcmkgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgc2hvcnRVcmw6IG1ha2VTZWxlY3RDYW5vbmljYWxVcmxGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICB7XG4gICAgZG9Ub2FzdCxcbiAgfVxuKShDbGFpbVVyaSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBR0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/claimUri/index.js\n"); - -/***/ }), - -/***/ "../ui/component/claimUri/view.jsx": -/*!*****************************************!*\ - !*** ../ui/component/claimUri/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\n\nfunction ClaimUri(props) {\n var shortUrl = props.shortUrl,\n uri = props.uri,\n doToast = props.doToast,\n _props$inline = props.inline,\n inline = _props$inline === void 0 ? false : _props$inline,\n _props$noShortUrl = props.noShortUrl,\n noShortUrl = _props$noShortUrl === void 0 ? false : _props$noShortUrl;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('media__uri', {\n 'media__uri--inline': inline\n }),\n label: noShortUrl ? uri : shortUrl || uri,\n onClick: function onClick() {\n electron__WEBPACK_IMPORTED_MODULE_2__[\"clipboard\"].writeText(shortUrl || uri);\n doToast({\n message: __('Copied')\n });\n }\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClaimUri);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NsYWltVXJpL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jbGFpbVVyaS92aWV3LmpzeD8zYjllIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjbGlwYm9hcmQgfSBmcm9tICdlbGVjdHJvbic7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBzaG9ydFVybDogP3N0cmluZyxcbiAgdXJpOiBzdHJpbmcsXG4gIGRvVG9hc3Q6ICh7IG1lc3NhZ2U6IHN0cmluZyB9KSA9PiB2b2lkLFxuICBpbmxpbmU/OiBib29sZWFuLFxuICBub1Nob3J0VXJsPzogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIENsYWltVXJpKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHNob3J0VXJsLCB1cmksIGRvVG9hc3QsIGlubGluZSA9IGZhbHNlLCBub1Nob3J0VXJsID0gZmFsc2UgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ21lZGlhX191cmknLCB7ICdtZWRpYV9fdXJpLS1pbmxpbmUnOiBpbmxpbmUgfSl9XG4gICAgICBsYWJlbD17bm9TaG9ydFVybCA/IHVyaSA6IHNob3J0VXJsIHx8IHVyaX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgY2xpcGJvYXJkLndyaXRlVGV4dChzaG9ydFVybCB8fCB1cmkpO1xuICAgICAgICBkb1RvYXN0KHtcbiAgICAgICAgICBtZXNzYWdlOiBfXygnQ29waWVkJyksXG4gICAgICAgIH0pO1xuICAgICAgfX1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDbGFpbVVyaTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQVRBO0FBWUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/claimUri/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/comment/index.js": -/*!****************************************!*\ - !*** ../ui/component/comment/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/comment/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n pending: props.authorUri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsPending\"])(props.authorUri)(state),\n channel: props.authorUri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.authorUri)(state),\n isResolvingUri: props.authorUri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.authorUri)(state),\n thumbnail: props.authorUri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.authorUri)(state),\n channelIsBlocked: props.authorUri && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectChannelIsBlocked\"])(props.authorUri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n },\n updateComment: function updateComment(commentId, comment) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doCommentUpdate\"])(commentId, comment));\n },\n deleteComment: function deleteComment(commentId) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doCommentAbandon\"])(commentId));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1lbnQvaW5kZXguanM/ZTU1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgZG9SZXNvbHZlVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Jc1BlbmRpbmcsXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbiAgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSxcbiAgbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nLFxuICBzZWxlY3RDaGFubmVsSXNCbG9ja2VkLFxuICBkb0NvbW1lbnRVcGRhdGUsIC8vIGRvRWRpdENvbW1lbnQgd291bGQgYmUgYSBtb3JlIGZpdHRpbmcgbmFtZVxuICBkb0NvbW1lbnRBYmFuZG9uLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDb21tZW50IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIHBlbmRpbmc6IHByb3BzLmF1dGhvclVyaSAmJiBtYWtlU2VsZWN0Q2xhaW1Jc1BlbmRpbmcocHJvcHMuYXV0aG9yVXJpKShzdGF0ZSksXG4gIGNoYW5uZWw6IHByb3BzLmF1dGhvclVyaSAmJiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMuYXV0aG9yVXJpKShzdGF0ZSksXG4gIGlzUmVzb2x2aW5nVXJpOiBwcm9wcy5hdXRob3JVcmkgJiYgbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nKHByb3BzLmF1dGhvclVyaSkoc3RhdGUpLFxuICB0aHVtYm5haWw6IHByb3BzLmF1dGhvclVyaSAmJiBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpKHByb3BzLmF1dGhvclVyaSkoc3RhdGUpLFxuICBjaGFubmVsSXNCbG9ja2VkOiBwcm9wcy5hdXRob3JVcmkgJiYgc2VsZWN0Q2hhbm5lbElzQmxvY2tlZChwcm9wcy5hdXRob3JVcmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVzb2x2ZVVyaTogdXJpID0+IGRpc3BhdGNoKGRvUmVzb2x2ZVVyaSh1cmkpKSxcbiAgdXBkYXRlQ29tbWVudDogKGNvbW1lbnRJZCwgY29tbWVudCkgPT4gZGlzcGF0Y2goZG9Db21tZW50VXBkYXRlKGNvbW1lbnRJZCwgY29tbWVudCkpLFxuICBkZWxldGVDb21tZW50OiBjb21tZW50SWQgPT4gZGlzcGF0Y2goZG9Db21tZW50QWJhbmRvbihjb21tZW50SWQpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCwgcGVyZm9ybSkoQ29tbWVudCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/comment/index.js\n"); - -/***/ }), - -/***/ "../ui/component/comment/view.jsx": -/*!****************************************!*\ - !*** ../ui/component/comment/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_object__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/object */ \"../ui/util/object.js\");\n/* harmony import */ var tiny_relative_date__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tiny-relative-date */ \"../node_modules/tiny-relative-date/src/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_expandable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/expandable */ \"../ui/component/expandable/index.js\");\n/* harmony import */ var component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/markdown-preview */ \"../ui/component/common/markdown-preview.jsx\");\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var _reach_menu_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @reach/menu-button */ \"../node_modules/@reach/menu-button/dist/menu-button.esm.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_commentCreate__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/commentCreate */ \"../ui/component/commentCreate/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_12__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar LENGTH_TO_COLLAPSE = 300;\nvar ESCAPE_KEY = 27;\n\nfunction Comment(props) {\n var uri = props.uri,\n author = props.author,\n authorUri = props.authorUri,\n timePosted = props.timePosted,\n message = props.message,\n pending = props.pending,\n channel = props.channel,\n isResolvingUri = props.isResolvingUri,\n resolveUri = props.resolveUri,\n channelIsBlocked = props.channelIsBlocked,\n commentIsMine = props.commentIsMine,\n commentId = props.commentId,\n parentId = props.parentId,\n updateComment = props.updateComment,\n deleteComment = props.deleteComment;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isEditing = _useState2[0],\n setEditing = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(message),\n _useState4 = _slicedToArray(_useState3, 2),\n editedMessage = _useState4[0],\n setCommentValue = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(editedMessage.length),\n _useState6 = _slicedToArray(_useState5, 2),\n charCount = _useState6[0],\n setCharCount = _useState6[1]; // used for controlling the visibility of the menu icon\n\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState8 = _slicedToArray(_useState7, 2),\n mouseIsHovering = _useState8[0],\n setMouseHover = _useState8[1]; // used for controlling visibility of reply comment component\n\n\n var _useState9 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState10 = _slicedToArray(_useState9, 2),\n isReplying = _useState10[0],\n setReplying = _useState10[1]; // to debounce subsequent requests\n\n\n var shouldFetch = channel === undefined || channel !== null && channel.value_type === 'channel' && Object(util_object__WEBPACK_IMPORTED_MODULE_1__[\"isEmpty\"])(channel.meta) && !pending;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // If author was extracted from the URI, then it must be valid.\n if (authorUri && author && !isResolvingUri && shouldFetch) {\n resolveUri(authorUri);\n }\n\n if (isEditing) {\n setCharCount(editedMessage.length); // a user will try and press the escape key to cancel editing their comment\n\n var handleEscape = function handleEscape(event) {\n if (event.keyCode === ESCAPE_KEY) {\n setEditing(false);\n }\n };\n\n window.addEventListener('keydown', handleEscape); // removes the listener so it doesn't cause problems elsewhere in the app\n\n return function () {\n window.removeEventListener('keydown', handleEscape);\n };\n }\n }, [isResolvingUri, shouldFetch, author, authorUri, resolveUri, editedMessage, isEditing, setEditing]);\n\n function handleSetEditing() {\n setEditing(true);\n }\n\n function handleEditMessageChanged(event) {\n setCommentValue(event.target.value);\n }\n\n function handleSubmit() {\n updateComment(commentId, editedMessage);\n setEditing(false);\n setReplying(false);\n }\n\n function handleDeleteComment() {\n deleteComment(commentId);\n }\n\n function handleReply() {\n setReplying(true);\n }\n\n function handleMouseOver() {\n setMouseHover(true);\n }\n\n function handleMouseOut() {\n setMouseHover(false);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_12___default()('comment', {\n comment__reply: parentId !== null\n }),\n onMouseOver: handleMouseOver,\n onMouseOut: handleMouseOut\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__author-thumbnail\"\n }, authorUri ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: authorUri,\n obscure: channelIsBlocked,\n small: true\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n small: true\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__body_container\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__meta\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__meta-information\"\n }, !author ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"comment__author\"\n }, __('Anonymous')) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"button--uri-indicator truncated-text comment__author\",\n navigate: authorUri,\n label: author\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"time\", {\n className: \"comment__time\",\n dateTime: timePosted\n }, Object(tiny_relative_date__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(timePosted))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__menu\"\n }, commentIsMine && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_7__[\"Menu\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_7__[\"MenuButton\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n size: 18,\n className: mouseIsHovering ? 'comment__menu-icon--hovering' : 'comment__menu-icon',\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_9__[\"MORE_VERTICAL\"]\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_7__[\"MenuList\"], {\n className: \"comment__menu-list\"\n }, commentIsMine ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_7__[\"MenuItem\"], {\n className: \"comment__menu-option\",\n onSelect: handleSetEditing\n }, __('Edit')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_7__[\"MenuItem\"], {\n className: \"comment__menu-option\",\n onSelect: handleDeleteComment\n }, __('Delete'))) : '')))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, isEditing ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_10__[\"Form\"], {\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_10__[\"FormField\"], {\n type: \"textarea\",\n name: \"editing_comment\",\n value: editedMessage,\n charCount: charCount,\n onChange: handleEditMessageChanged\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n label: __('Done'),\n requiresAuth: true,\n disabled: message === editedMessage\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: function onClick() {\n return setEditing(false);\n }\n }))) : editedMessage.length >= LENGTH_TO_COLLAPSE ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__message\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_expandable__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n content: message\n }))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"comment__message\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n content: message\n }))), !parentId && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n requiresAuth: true,\n className: \"comment__reply-button\",\n onClick: handleReply,\n label: __('Reply')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, isReplying ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_commentCreate__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n uri: uri,\n parentId: commentId,\n onDoneReplying: function onDoneReplying() {\n return setReplying(false);\n },\n onCancelReplying: function onCancelReplying() {\n return setReplying(false);\n }\n }) : '')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Comment);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1lbnQvdmlldy5qc3g/MTRlNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAndXRpbC9vYmplY3QnO1xuaW1wb3J0IHJlbGF0aXZlRGF0ZSBmcm9tICd0aW55LXJlbGF0aXZlLWRhdGUnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBFeHBhbmRhYmxlIGZyb20gJ2NvbXBvbmVudC9leHBhbmRhYmxlJztcbmltcG9ydCBNYXJrZG93blByZXZpZXcgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3JztcbmltcG9ydCBDaGFubmVsVGh1bWJuYWlsIGZyb20gJ2NvbXBvbmVudC9jaGFubmVsVGh1bWJuYWlsJztcbmltcG9ydCB7IE1lbnUsIE1lbnVMaXN0LCBNZW51QnV0dG9uLCBNZW51SXRlbSB9IGZyb20gJ0ByZWFjaC9tZW51LWJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQ29tbWVudENyZWF0ZSBmcm9tICdjb21wb25lbnQvY29tbWVudENyZWF0ZSc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGF1dGhvcjogP3N0cmluZywgLy8gTEJSWSBDaGFubmVsIE5hbWUsIGUuZy4gQGNoYW5uZWxcbiAgYXV0aG9yVXJpOiBzdHJpbmcsIC8vIGZ1bGwgTEJSWSBDaGFubmVsIFVSSTogbGJyeTovL0BjaGFubmVsIzEyMy4uLlxuICBjb21tZW50SWQ6IHN0cmluZywgLy8gc2hhMjU2IGRpZ2VzdCBpZGVudGlmeWluZyB0aGUgY29tbWVudFxuICBwYXJlbnRJZDogc3RyaW5nLCAvLyBzaGEyNTYgZGlnZXN0IGlkZW50aWZ5aW5nIHRoZSBwYXJlbnQgb2YgdGhlIGNvbW1lbnRcbiAgbWVzc2FnZTogc3RyaW5nLCAvLyBjb21tZW50IGJvZHlcbiAgdGltZVBvc3RlZDogbnVtYmVyLCAvLyBDb21tZW50IHRpbWVzdGFtcFxuICBjaGFubmVsOiA/Q2xhaW0sIC8vIENoYW5uZWwgQ2xhaW0sIHJldHJpZXZlZCB0byBvYnRhaW4gdGh1bWJuYWlsXG4gIHBlbmRpbmc/OiBib29sZWFuLFxuICByZXNvbHZlVXJpOiBzdHJpbmcgPT4gdm9pZCwgLy8gcmVzb2x2ZXMgdGhlIFVSSVxuICBpc1Jlc29sdmluZ1VyaTogYm9vbGVhbiwgLy8gaWYgdGhlIFVSSSBpcyBjdXJyZW50bHkgYmVpbmcgcmVzb2x2ZWRcbiAgY2hhbm5lbElzQmxvY2tlZDogYm9vbGVhbiwgLy8gaWYgdGhlIGNoYW5uZWwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlIGFwcFxuICBjbGFpbUlzTWluZTogYm9vbGVhbiwgLy8gaWYgeW91IGNvbnRyb2wgdGhlIGNsYWltIHdoaWNoIHRoaXMgY29tbWVudCB3YXMgcG9zdGVkIG9uXG4gIGNvbW1lbnRJc01pbmU6IGJvb2xlYW4sIC8vIGlmIHRoaXMgY29tbWVudCB3YXMgc2lnbmVkIGJ5IGFuIG93bmVkIGNoYW5uZWxcbiAgdXBkYXRlQ29tbWVudDogKHN0cmluZywgc3RyaW5nKSA9PiB2b2lkLFxuICBkZWxldGVDb21tZW50OiBzdHJpbmcgPT4gdm9pZCxcbn07XG5cbmNvbnN0IExFTkdUSF9UT19DT0xMQVBTRSA9IDMwMDtcbmNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuZnVuY3Rpb24gQ29tbWVudChwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHVyaSxcbiAgICBhdXRob3IsXG4gICAgYXV0aG9yVXJpLFxuICAgIHRpbWVQb3N0ZWQsXG4gICAgbWVzc2FnZSxcbiAgICBwZW5kaW5nLFxuICAgIGNoYW5uZWwsXG4gICAgaXNSZXNvbHZpbmdVcmksXG4gICAgcmVzb2x2ZVVyaSxcbiAgICBjaGFubmVsSXNCbG9ja2VkLFxuICAgIGNvbW1lbnRJc01pbmUsXG4gICAgY29tbWVudElkLFxuICAgIHBhcmVudElkLFxuICAgIHVwZGF0ZUNvbW1lbnQsXG4gICAgZGVsZXRlQ29tbWVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtpc0VkaXRpbmcsIHNldEVkaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGVkTWVzc2FnZSwgc2V0Q29tbWVudFZhbHVlXSA9IHVzZVN0YXRlKG1lc3NhZ2UpO1xuICBjb25zdCBbY2hhckNvdW50LCBzZXRDaGFyQ291bnRdID0gdXNlU3RhdGUoZWRpdGVkTWVzc2FnZS5sZW5ndGgpO1xuXG4gIC8vIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtZW51IGljb25cbiAgY29uc3QgW21vdXNlSXNIb3ZlcmluZywgc2V0TW91c2VIb3Zlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gdXNlZCBmb3IgY29udHJvbGxpbmcgdmlzaWJpbGl0eSBvZiByZXBseSBjb21tZW50IGNvbXBvbmVudFxuICBjb25zdCBbaXNSZXBseWluZywgc2V0UmVwbHlpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIHRvIGRlYm91bmNlIHN1YnNlcXVlbnQgcmVxdWVzdHNcbiAgY29uc3Qgc2hvdWxkRmV0Y2ggPVxuICAgIGNoYW5uZWwgPT09IHVuZGVmaW5lZCB8fFxuICAgIChjaGFubmVsICE9PSBudWxsICYmIGNoYW5uZWwudmFsdWVfdHlwZSA9PT0gJ2NoYW5uZWwnICYmIGlzRW1wdHkoY2hhbm5lbC5tZXRhKSAmJiAhcGVuZGluZyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJZiBhdXRob3Igd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkksIHRoZW4gaXQgbXVzdCBiZSB2YWxpZC5cbiAgICBpZiAoYXV0aG9yVXJpICYmIGF1dGhvciAmJiAhaXNSZXNvbHZpbmdVcmkgJiYgc2hvdWxkRmV0Y2gpIHtcbiAgICAgIHJlc29sdmVVcmkoYXV0aG9yVXJpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICBzZXRDaGFyQ291bnQoZWRpdGVkTWVzc2FnZS5sZW5ndGgpO1xuXG4gICAgICAvLyBhIHVzZXIgd2lsbCB0cnkgYW5kIHByZXNzIHRoZSBlc2NhcGUga2V5IHRvIGNhbmNlbCBlZGl0aW5nIHRoZWlyIGNvbW1lbnRcbiAgICAgIGNvbnN0IGhhbmRsZUVzY2FwZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgICBzZXRFZGl0aW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVFc2NhcGUpO1xuXG4gICAgICAvLyByZW1vdmVzIHRoZSBsaXN0ZW5lciBzbyBpdCBkb2Vzbid0IGNhdXNlIHByb2JsZW1zIGVsc2V3aGVyZSBpbiB0aGUgYXBwXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUVzY2FwZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzUmVzb2x2aW5nVXJpLCBzaG91bGRGZXRjaCwgYXV0aG9yLCBhdXRob3JVcmksIHJlc29sdmVVcmksIGVkaXRlZE1lc3NhZ2UsIGlzRWRpdGluZywgc2V0RWRpdGluZ10pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNldEVkaXRpbmcoKSB7XG4gICAgc2V0RWRpdGluZyh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVkaXRNZXNzYWdlQ2hhbmdlZChldmVudCkge1xuICAgIHNldENvbW1lbnRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KCkge1xuICAgIHVwZGF0ZUNvbW1lbnQoY29tbWVudElkLCBlZGl0ZWRNZXNzYWdlKTtcbiAgICBzZXRFZGl0aW5nKGZhbHNlKTtcbiAgICBzZXRSZXBseWluZyhmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEZWxldGVDb21tZW50KCkge1xuICAgIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5KCkge1xuICAgIHNldFJlcGx5aW5nKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKCkge1xuICAgIHNldE1vdXNlSG92ZXIodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dCgpIHtcbiAgICBzZXRNb3VzZUhvdmVyKGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NvbW1lbnQnLCB7IGNvbW1lbnRfX3JlcGx5OiBwYXJlbnRJZCAhPT0gbnVsbCB9KX1cbiAgICAgIG9uTW91c2VPdmVyPXtoYW5kbGVNb3VzZU92ZXJ9XG4gICAgICBvbk1vdXNlT3V0PXtoYW5kbGVNb3VzZU91dH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbW1lbnRfX2F1dGhvci10aHVtYm5haWxcIj5cbiAgICAgICAge2F1dGhvclVyaSA/IDxDaGFubmVsVGh1bWJuYWlsIHVyaT17YXV0aG9yVXJpfSBvYnNjdXJlPXtjaGFubmVsSXNCbG9ja2VkfSBzbWFsbCAvPiA6IDxDaGFubmVsVGh1bWJuYWlsIHNtYWxsIC8+fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29tbWVudF9fYm9keV9jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb21tZW50X19tZXRhXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb21tZW50X19tZXRhLWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICB7IWF1dGhvciA/IChcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY29tbWVudF9fYXV0aG9yXCI+e19fKCdBbm9ueW1vdXMnKX08L3NwYW4+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnV0dG9uLS11cmktaW5kaWNhdG9yIHRydW5jYXRlZC10ZXh0IGNvbW1lbnRfX2F1dGhvclwiXG4gICAgICAgICAgICAgICAgbmF2aWdhdGU9e2F1dGhvclVyaX1cbiAgICAgICAgICAgICAgICBsYWJlbD17YXV0aG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDx0aW1lIGNsYXNzTmFtZT1cImNvbW1lbnRfX3RpbWVcIiBkYXRlVGltZT17dGltZVBvc3RlZH0+XG4gICAgICAgICAgICAgIHtyZWxhdGl2ZURhdGUodGltZVBvc3RlZCl9XG4gICAgICAgICAgICA8L3RpbWU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb21tZW50X19tZW51XCI+XG4gICAgICAgICAgICB7Y29tbWVudElzTWluZSAmJiAoXG4gICAgICAgICAgICAgIDxNZW51PlxuICAgICAgICAgICAgICAgIDxNZW51QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgc2l6ZT17MTh9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW91c2VJc0hvdmVyaW5nID8gJ2NvbW1lbnRfX21lbnUtaWNvbi0taG92ZXJpbmcnIDogJ2NvbW1lbnRfX21lbnUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgIGljb249e0lDT05TLk1PUkVfVkVSVElDQUx9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8TWVudUxpc3QgY2xhc3NOYW1lPVwiY29tbWVudF9fbWVudS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICB7Y29tbWVudElzTWluZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbSBjbGFzc05hbWU9XCJjb21tZW50X19tZW51LW9wdGlvblwiIG9uU2VsZWN0PXtoYW5kbGVTZXRFZGl0aW5nfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfXygnRWRpdCcpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIGNsYXNzTmFtZT1cImNvbW1lbnRfX21lbnUtb3B0aW9uXCIgb25TZWxlY3Q9e2hhbmRsZURlbGV0ZUNvbW1lbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge19fKCdEZWxldGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9NZW51TGlzdD5cbiAgICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2lzRWRpdGluZyA/IChcbiAgICAgICAgICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZWRpdGluZ19jb21tZW50XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZWRpdGVkTWVzc2FnZX1cbiAgICAgICAgICAgICAgICBjaGFyQ291bnQ9e2NoYXJDb3VudH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRWRpdE1lc3NhZ2VDaGFuZ2VkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdEb25lJyl9XG4gICAgICAgICAgICAgICAgICByZXF1aXJlc0F1dGg9e0lTX1dFQn1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXttZXNzYWdlID09PSBlZGl0ZWRNZXNzYWdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdDYW5jZWwnKX0gb25DbGljaz17KCkgPT4gc2V0RWRpdGluZyhmYWxzZSl9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICkgOiBlZGl0ZWRNZXNzYWdlLmxlbmd0aCA+PSBMRU5HVEhfVE9fQ09MTEFQU0UgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbW1lbnRfX21lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPEV4cGFuZGFibGU+XG4gICAgICAgICAgICAgICAgPE1hcmtkb3duUHJldmlldyBjb250ZW50PXttZXNzYWdlfSAvPlxuICAgICAgICAgICAgICA8L0V4cGFuZGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb21tZW50X19tZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxNYXJrZG93blByZXZpZXcgY29udGVudD17bWVzc2FnZX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IXBhcmVudElkICYmIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29tbWVudF9fcmVwbHktYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlcGx5fVxuICAgICAgICAgICAgbGFiZWw9e19fKCdSZXBseScpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2lzUmVwbHlpbmcgPyAoXG4gICAgICAgICAgICA8Q29tbWVudENyZWF0ZVxuICAgICAgICAgICAgICB1cmk9e3VyaX1cbiAgICAgICAgICAgICAgcGFyZW50SWQ9e2NvbW1lbnRJZH1cbiAgICAgICAgICAgICAgb25Eb25lUmVwbHlpbmc9eygpID0+IHNldFJlcGx5aW5nKGZhbHNlKX1cbiAgICAgICAgICAgICAgb25DYW5jZWxSZXBseWluZz17KCkgPT4gc2V0UmVwbHlpbmcoZmFsc2UpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUE0QkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUF0QkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBY0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBRUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFBQTtBQUpBO0FBYUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/comment/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/commentCreate/index.js": -/*!**********************************************!*\ - !*** ../ui/component/commentCreate/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/commentCreate/view.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n commentingEnabled: true ? Boolean(Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUserVerifiedEmail\"])(state)) : undefined,\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyChannelClaims\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n createComment: function createComment(comment, claimId, channel, parentId) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doCommentCreate\"])(comment, claimId, channel, parentId));\n },\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"CommentCreate\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnRDcmVhdGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1lbnRDcmVhdGUvaW5kZXguanM/Y2JkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9Db21tZW50Q3JlYXRlLCBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksIHNlbGVjdE15Q2hhbm5lbENsYWltcyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBDb21tZW50Q3JlYXRlIH0gZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNvbW1lbnRpbmdFbmFibGVkOiBJU19XRUIgPyBCb29sZWFuKHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsKHN0YXRlKSkgOiB0cnVlLFxuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY3JlYXRlQ29tbWVudDogKGNvbW1lbnQsIGNsYWltSWQsIGNoYW5uZWwsIHBhcmVudElkKSA9PlxuICAgIGRpc3BhdGNoKGRvQ29tbWVudENyZWF0ZShjb21tZW50LCBjbGFpbUlkLCBjaGFubmVsLCBwYXJlbnRJZCkpLFxuICBvcGVuTW9kYWw6IChtb2RhbCwgcHJvcHMpID0+IGRpc3BhdGNoKGRvT3Blbk1vZGFsKG1vZGFsLCBwcm9wcykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShDb21tZW50Q3JlYXRlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/commentCreate/index.js\n"); - -/***/ }), - -/***/ "../ui/component/commentCreate/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/commentCreate/view.jsx ***! - \**********************************************/ -/*! exports provided: CommentCreate */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CommentCreate\", function() { return CommentCreate; });\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_selectChannel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/selectChannel */ \"../ui/component/selectChannel/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var _i18nMessage_view__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../i18nMessage/view */ \"../ui/component/i18nMessage/view.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\nfunction CommentCreate(props) {\n var commentingEnabled = props.commentingEnabled,\n createComment = props.createComment,\n claim = props.claim,\n openModal = props.openModal,\n channels = props.channels,\n parentId = props.parentId,\n onDoneReplying = props.onDoneReplying,\n onCancelReplying = props.onCancelReplying;\n var claimId = claim.claim_id;\n var isReply = !!parentId;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_1___default.a.useState(''),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n commentValue = _React$useState2[0],\n setCommentValue = _React$useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_6__[\"default\"])('comment-acknowledge', false),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n commentAck = _usePersistedState2[0],\n setCommentAck = _usePersistedState2[1];\n\n var _usePersistedState3 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_6__[\"default\"])('comment-channel', ''),\n _usePersistedState4 = _slicedToArray(_usePersistedState3, 2),\n channel = _usePersistedState4[0],\n setChannel = _usePersistedState4[1];\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(commentValue.length),\n _useState2 = _slicedToArray(_useState, 2),\n charCount = _useState2[0],\n setCharCount = _useState2[1];\n\n var topChannel = channels && channels.reduce(function (top, channel) {\n var topClaimCount = top && top.meta && top.meta.claims_in_channel || 0;\n var currentClaimCount = channel && channel.meta && channel.meta.claims_in_channel || 0;\n return topClaimCount >= currentClaimCount ? top : channel;\n });\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n // set default channel\n if ((channel === '' || channel === 'anonymous') && topChannel) {\n handleChannelChange(topChannel.name);\n }\n }, [channel, topChannel]);\n\n function handleCommentChange(event) {\n setCommentValue(event.target.value);\n }\n\n function handleChannelChange(channel) {\n setChannel(channel);\n }\n\n function handleCommentAck() {\n setCommentAck(true);\n }\n\n function onTextareaFocus() {\n if (!commentAck) {\n openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_7__[\"COMMENT_ACKNOWEDGEMENT\"], {\n onCommentAcknowledge: handleCommentAck\n });\n }\n }\n\n function handleSubmit() {\n if (channel !== constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"] && commentValue.length) {\n createComment(commentValue, claimId, channel, parentId);\n }\n\n setCommentValue('');\n\n if (onDoneReplying) {\n onDoneReplying();\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n return setCharCount(commentValue.length);\n }, [commentValue]);\n\n if (!commentingEnabled) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_i18nMessage_view__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tokens: {\n sign_in_link: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n requiresAuth: true,\n label: __('sign in')\n })\n }\n }, \"Please %sign_in_link% to comment.\");\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"Form\"], {\n onSubmit: handleSubmit,\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('comment__create', {\n 'comment__create--reply': isReply\n })\n }, !isReply && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_selectChannel__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n channel: channel,\n hideAnon: true,\n onChannelChange: handleChannelChange\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n disabled: channel === constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"],\n type: \"textarea\",\n name: \"content_description\",\n label: isReply ? __('Replying as %reply_channel%', {\n reply_channel: channel\n }) : __('Comment'),\n onFocus: onTextareaFocus,\n placeholder: __('Say something about this...'),\n value: commentValue,\n charCount: charCount,\n onChange: handleCommentChange,\n autoFocus: isReply\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"primary\",\n disabled: channel === constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"] || !commentValue.length,\n type: \"submit\",\n label: isReply ? __('Reply') : __('Post'),\n requiresAuth: true\n }), isReply && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: function onClick() {\n if (onCancelReplying) {\n onCancelReplying();\n }\n }\n })));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnRDcmVhdGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1lbnRDcmVhdGUvdmlldy5qc3g/YjU5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgQ0hBTk5FTF9ORVcgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENoYW5uZWxTZWN0aW9uIGZyb20gJ2NvbXBvbmVudC9zZWxlY3RDaGFubmVsJztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuaW1wb3J0ICogYXMgTU9EQUxTIGZyb20gJ2NvbnN0YW50cy9tb2RhbF90eXBlcyc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnLi4vaTE4bk1lc3NhZ2Uvdmlldyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1lbnRpbmdFbmFibGVkOiBib29sZWFuLFxuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBvcGVuTW9kYWw6IChpZDogc3RyaW5nLCB7IG9uQ29tbWVudEFja25vd2xlZGdlOiAoKSA9PiB2b2lkIH0pID0+IHZvaWQsXG4gIGNyZWF0ZUNvbW1lbnQ6IChzdHJpbmcsIHN0cmluZywgc3RyaW5nLCA/c3RyaW5nKSA9PiB2b2lkLFxuICBjaGFubmVsczogP0FycmF5PENoYW5uZWxDbGFpbT4sXG4gIHBhcmVudElkPzogc3RyaW5nLFxuICBvbkRvbmVSZXBseWluZz86ICgpID0+IHZvaWQsXG4gIG9uQ2FuY2VsUmVwbHlpbmc/OiAoKSA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbW1lbnRDcmVhdGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjb21tZW50aW5nRW5hYmxlZCxcbiAgICBjcmVhdGVDb21tZW50LFxuICAgIGNsYWltLFxuICAgIG9wZW5Nb2RhbCxcbiAgICBjaGFubmVscyxcbiAgICBwYXJlbnRJZCxcbiAgICBvbkRvbmVSZXBseWluZyxcbiAgICBvbkNhbmNlbFJlcGx5aW5nLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgY2xhaW1faWQ6IGNsYWltSWQgfSA9IGNsYWltO1xuICBjb25zdCBpc1JlcGx5ID0gISFwYXJlbnRJZDtcbiAgY29uc3QgW2NvbW1lbnRWYWx1ZSwgc2V0Q29tbWVudFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2NvbW1lbnRBY2ssIHNldENvbW1lbnRBY2tdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ2NvbW1lbnQtYWNrbm93bGVkZ2UnLCBmYWxzZSk7XG4gIGNvbnN0IFtjaGFubmVsLCBzZXRDaGFubmVsXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCdjb21tZW50LWNoYW5uZWwnLCAnJyk7XG4gIGNvbnN0IFtjaGFyQ291bnQsIHNldENoYXJDb3VudF0gPSB1c2VTdGF0ZShjb21tZW50VmFsdWUubGVuZ3RoKTtcblxuICBjb25zdCB0b3BDaGFubmVsID1cbiAgICBjaGFubmVscyAmJlxuICAgIGNoYW5uZWxzLnJlZHVjZSgodG9wLCBjaGFubmVsKSA9PiB7XG4gICAgICBjb25zdCB0b3BDbGFpbUNvdW50ID0gKHRvcCAmJiB0b3AubWV0YSAmJiB0b3AubWV0YS5jbGFpbXNfaW5fY2hhbm5lbCkgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRDbGFpbUNvdW50ID0gKGNoYW5uZWwgJiYgY2hhbm5lbC5tZXRhICYmIGNoYW5uZWwubWV0YS5jbGFpbXNfaW5fY2hhbm5lbCkgfHwgMDtcbiAgICAgIHJldHVybiB0b3BDbGFpbUNvdW50ID49IGN1cnJlbnRDbGFpbUNvdW50ID8gdG9wIDogY2hhbm5lbDtcbiAgICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIHNldCBkZWZhdWx0IGNoYW5uZWxcbiAgICBpZiAoKGNoYW5uZWwgPT09ICcnIHx8IGNoYW5uZWwgPT09ICdhbm9ueW1vdXMnKSAmJiB0b3BDaGFubmVsKSB7XG4gICAgICBoYW5kbGVDaGFubmVsQ2hhbmdlKHRvcENoYW5uZWwubmFtZSk7XG4gICAgfVxuICB9LCBbY2hhbm5lbCwgdG9wQ2hhbm5lbF0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbW1lbnRDaGFuZ2UoZXZlbnQpIHtcbiAgICBzZXRDb21tZW50VmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5uZWxDaGFuZ2UoY2hhbm5lbCkge1xuICAgIHNldENoYW5uZWwoY2hhbm5lbCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb21tZW50QWNrKCkge1xuICAgIHNldENvbW1lbnRBY2sodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRleHRhcmVhRm9jdXMoKSB7XG4gICAgaWYgKCFjb21tZW50QWNrKSB7XG4gICAgICBvcGVuTW9kYWwoTU9EQUxTLkNPTU1FTlRfQUNLTk9XRURHRU1FTlQsIHsgb25Db21tZW50QWNrbm93bGVkZ2U6IGhhbmRsZUNvbW1lbnRBY2sgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KCkge1xuICAgIGlmIChjaGFubmVsICE9PSBDSEFOTkVMX05FVyAmJiBjb21tZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVDb21tZW50KGNvbW1lbnRWYWx1ZSwgY2xhaW1JZCwgY2hhbm5lbCwgcGFyZW50SWQpO1xuICAgIH1cbiAgICBzZXRDb21tZW50VmFsdWUoJycpO1xuICAgIGlmIChvbkRvbmVSZXBseWluZykge1xuICAgICAgb25Eb25lUmVwbHlpbmcoKTtcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4gc2V0Q2hhckNvdW50KGNvbW1lbnRWYWx1ZS5sZW5ndGgpLCBbY29tbWVudFZhbHVlXSk7XG5cbiAgaWYgKCFjb21tZW50aW5nRW5hYmxlZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8STE4bk1lc3NhZ2UgdG9rZW5zPXt7IHNpZ25faW5fbGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgcmVxdWlyZXNBdXRoIGxhYmVsPXtfXygnc2lnbiBpbicpfSAvPiB9fT5cbiAgICAgICAgUGxlYXNlICVzaWduX2luX2xpbmslIHRvIGNvbW1lbnQuXG4gICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY29tbWVudF9fY3JlYXRlJywgeyAnY29tbWVudF9fY3JlYXRlLS1yZXBseSc6IGlzUmVwbHkgfSl9PlxuICAgICAgeyFpc1JlcGx5ICYmIDxDaGFubmVsU2VjdGlvbiBjaGFubmVsPXtjaGFubmVsfSBoaWRlQW5vbiBvbkNoYW5uZWxDaGFuZ2U9e2hhbmRsZUNoYW5uZWxDaGFuZ2V9IC8+fVxuICAgICAgPEZvcm1GaWVsZFxuICAgICAgICBkaXNhYmxlZD17Y2hhbm5lbCA9PT0gQ0hBTk5FTF9ORVd9XG4gICAgICAgIHR5cGU9XCJ0ZXh0YXJlYVwiXG4gICAgICAgIG5hbWU9XCJjb250ZW50X2Rlc2NyaXB0aW9uXCJcbiAgICAgICAgbGFiZWw9e2lzUmVwbHkgPyBfXygnUmVwbHlpbmcgYXMgJXJlcGx5X2NoYW5uZWwlJywgeyByZXBseV9jaGFubmVsOiBjaGFubmVsIH0pIDogX18oJ0NvbW1lbnQnKX1cbiAgICAgICAgb25Gb2N1cz17b25UZXh0YXJlYUZvY3VzfVxuICAgICAgICBwbGFjZWhvbGRlcj17X18oJ1NheSBzb21ldGhpbmcgYWJvdXQgdGhpcy4uLicpfVxuICAgICAgICB2YWx1ZT17Y29tbWVudFZhbHVlfVxuICAgICAgICBjaGFyQ291bnQ9e2NoYXJDb3VudH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNvbW1lbnRDaGFuZ2V9XG4gICAgICAgIGF1dG9Gb2N1cz17aXNSZXBseX1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgIGRpc2FibGVkPXtjaGFubmVsID09PSBDSEFOTkVMX05FVyB8fCAhY29tbWVudFZhbHVlLmxlbmd0aH1cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICBsYWJlbD17aXNSZXBseSA/IF9fKCdSZXBseScpIDogX18oJ1Bvc3QnKX1cbiAgICAgICAgICByZXF1aXJlc0F1dGg9e0lTX1dFQn1cbiAgICAgICAgLz5cbiAgICAgICAge2lzUmVwbHkgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgbGFiZWw9e19fKCdDYW5jZWwnKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG9uQ2FuY2VsUmVwbHlpbmcpIHtcbiAgICAgICAgICAgICAgICBvbkNhbmNlbFJlcGx5aW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvRm9ybT5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUE7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFpQkE7QUFHQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBYUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/commentCreate/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/commentsList/index.js": -/*!*********************************************!*\ - !*** ../ui/component/commentsList/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/commentsList/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n myChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyChannelClaims\"])(state),\n comments: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectCommentsForUri\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchComments: function fetchComments(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doCommentList\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnRzTGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbWVudHNMaXN0L2luZGV4LmpzPzRkN2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDb21tZW50c0ZvclVyaSwgZG9Db21tZW50TGlzdCwgbWFrZVNlbGVjdENsYWltSXNNaW5lLCBzZWxlY3RNeUNoYW5uZWxDbGFpbXMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDb21tZW50c0xpc3QgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgbXlDaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgY29tbWVudHM6IG1ha2VTZWxlY3RDb21tZW50c0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW1Jc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgZmV0Y2hDb21tZW50czogdXJpID0+IGRpc3BhdGNoKGRvQ29tbWVudExpc3QodXJpKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKENvbW1lbnRzTGlzdCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/commentsList/index.js\n"); - -/***/ }), - -/***/ "../ui/component/commentsList/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/commentsList/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_comment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/comment */ \"../ui/component/comment/index.js\");\n\n\n\nfunction CommentList(props) {\n var fetchComments = props.fetchComments,\n uri = props.uri,\n comments = props.comments,\n claimIsMine = props.claimIsMine,\n myChannels = props.myChannels; // todo: implement comment_list --mine in SDK so redux can grab with selectCommentIsMine\n\n var isMyComment = function isMyComment(channelId) {\n if (myChannels != null && channelId != null) {\n for (var i = 0; i < myChannels.length; i++) {\n if (myChannels[i].claim_id === channelId) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n fetchComments(uri);\n }, [fetchComments, uri]);\n\n function sortByParent(arrayOfComments) {\n var parentComments = arrayOfComments.filter(function (comment) {\n return comment.parent_id === undefined;\n });\n var childComments = arrayOfComments.filter(function (comment) {\n return comment.parent_id !== undefined;\n });\n var sortedArray = [];\n parentComments.forEach(function (parentComment) {\n sortedArray.push(parentComment);\n childComments.filter(function (childComment) {\n return childComment.parent_id === parentComment.comment_id;\n }).forEach(function (childComment) {\n sortedArray.push(childComment);\n });\n });\n return sortedArray;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"comments\"\n }, comments && sortByParent(comments).map(function (comment) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_comment__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n authorUri: comment.channel_url,\n author: comment.channel_name,\n claimId: comment.claim_id,\n commentId: comment.comment_id,\n key: comment.channel_id + comment.comment_id,\n message: comment.comment,\n parentId: comment.parent_id || null,\n timePosted: comment.timestamp * 1000,\n claimIsMine: claimIsMine,\n commentIsMine: comment.channel_id && isMyComment(comment.channel_id)\n });\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CommentList);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1lbnRzTGlzdC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbWVudHNMaXN0L3ZpZXcuanN4PzdmNTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29tbWVudCBmcm9tICdjb21wb25lbnQvY29tbWVudCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1lbnRzOiBBcnJheTxhbnk+LFxuICBmZXRjaENvbW1lbnRzOiBzdHJpbmcgPT4gdm9pZCxcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltSXNNaW5lOiBib29sZWFuLFxuICBteUNoYW5uZWxzOiA/QXJyYXk8Q2hhbm5lbENsYWltPixcbn07XG5cbmZ1bmN0aW9uIENvbW1lbnRMaXN0KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGZldGNoQ29tbWVudHMsIHVyaSwgY29tbWVudHMsIGNsYWltSXNNaW5lLCBteUNoYW5uZWxzIH0gPSBwcm9wcztcblxuICAvLyB0b2RvOiBpbXBsZW1lbnQgY29tbWVudF9saXN0IC0tbWluZSBpbiBTREsgc28gcmVkdXggY2FuIGdyYWIgd2l0aCBzZWxlY3RDb21tZW50SXNNaW5lXG4gIGNvbnN0IGlzTXlDb21tZW50ID0gKGNoYW5uZWxJZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG15Q2hhbm5lbHMgIT0gbnVsbCAmJiBjaGFubmVsSWQgIT0gbnVsbCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBteUNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChteUNoYW5uZWxzW2ldLmNsYWltX2lkID09PSBjaGFubmVsSWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaENvbW1lbnRzKHVyaSk7XG4gIH0sIFtmZXRjaENvbW1lbnRzLCB1cmldKTtcblxuICBmdW5jdGlvbiBzb3J0QnlQYXJlbnQoYXJyYXlPZkNvbW1lbnRzKSB7XG4gICAgbGV0IHBhcmVudENvbW1lbnRzID0gYXJyYXlPZkNvbW1lbnRzLmZpbHRlcihjb21tZW50ID0+IGNvbW1lbnQucGFyZW50X2lkID09PSB1bmRlZmluZWQpO1xuICAgIGxldCBjaGlsZENvbW1lbnRzID0gYXJyYXlPZkNvbW1lbnRzLmZpbHRlcihjb21tZW50ID0+IGNvbW1lbnQucGFyZW50X2lkICE9PSB1bmRlZmluZWQpO1xuICAgIGxldCBzb3J0ZWRBcnJheSA9IFtdO1xuXG4gICAgcGFyZW50Q29tbWVudHMuZm9yRWFjaChwYXJlbnRDb21tZW50ID0+IHtcbiAgICAgIHNvcnRlZEFycmF5LnB1c2gocGFyZW50Q29tbWVudCk7XG5cbiAgICAgIGNoaWxkQ29tbWVudHNcbiAgICAgICAgLmZpbHRlcihjaGlsZENvbW1lbnQgPT4gY2hpbGRDb21tZW50LnBhcmVudF9pZCA9PT0gcGFyZW50Q29tbWVudC5jb21tZW50X2lkKVxuICAgICAgICAuZm9yRWFjaChjaGlsZENvbW1lbnQgPT4ge1xuICAgICAgICAgIHNvcnRlZEFycmF5LnB1c2goY2hpbGRDb21tZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc29ydGVkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx1bCBjbGFzc05hbWU9XCJjb21tZW50c1wiPlxuICAgICAge2NvbW1lbnRzICYmXG4gICAgICAgIHNvcnRCeVBhcmVudChjb21tZW50cykubWFwKGNvbW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q29tbWVudFxuICAgICAgICAgICAgICB1cmk9e3VyaX1cbiAgICAgICAgICAgICAgYXV0aG9yVXJpPXtjb21tZW50LmNoYW5uZWxfdXJsfVxuICAgICAgICAgICAgICBhdXRob3I9e2NvbW1lbnQuY2hhbm5lbF9uYW1lfVxuICAgICAgICAgICAgICBjbGFpbUlkPXtjb21tZW50LmNsYWltX2lkfVxuICAgICAgICAgICAgICBjb21tZW50SWQ9e2NvbW1lbnQuY29tbWVudF9pZH1cbiAgICAgICAgICAgICAga2V5PXtjb21tZW50LmNoYW5uZWxfaWQgKyBjb21tZW50LmNvbW1lbnRfaWR9XG4gICAgICAgICAgICAgIG1lc3NhZ2U9e2NvbW1lbnQuY29tbWVudH1cbiAgICAgICAgICAgICAgcGFyZW50SWQ9e2NvbW1lbnQucGFyZW50X2lkIHx8IG51bGx9XG4gICAgICAgICAgICAgIHRpbWVQb3N0ZWQ9e2NvbW1lbnQudGltZXN0YW1wICogMTAwMH1cbiAgICAgICAgICAgICAgY2xhaW1Jc01pbmU9e2NsYWltSXNNaW5lfVxuICAgICAgICAgICAgICBjb21tZW50SXNNaW5lPXtjb21tZW50LmNoYW5uZWxfaWQgJiYgaXNNeUNvbW1lbnQoY29tbWVudC5jaGFubmVsX2lkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC91bD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVudExpc3Q7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFIQTtBQUhBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFMQTtBQXNCQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/commentsList/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/busy-indicator.jsx": -/*!*************************************************!*\ - !*** ../ui/component/common/busy-indicator.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\nvar BusyIndicator = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(BusyIndicator, _React$PureComponent);\n\n function BusyIndicator() {\n _classCallCheck(this, BusyIndicator);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(BusyIndicator).apply(this, arguments));\n }\n\n _createClass(BusyIndicator, [{\n key: \"render\",\n value: function render() {\n var message = this.props.message;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"busy-indicator\"\n }, message, \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"busy-indicator__loader\"\n }));\n }\n }]);\n\n return BusyIndicator;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(BusyIndicator, \"defaultProps\", {\n message: ''\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BusyIndicator);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9idXN5LWluZGljYXRvci5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9idXN5LWluZGljYXRvci5qc3g/N2FmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9IHtcbiAgbWVzc2FnZTogP3N0cmluZyxcbn07XG5cbmNsYXNzIEJ1c3lJbmRpY2F0b3IgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbWVzc2FnZTogJycsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJidXN5LWluZGljYXRvclwiPlxuICAgICAgICB7bWVzc2FnZX0gPHNwYW4gY2xhc3NOYW1lPVwiYnVzeS1pbmRpY2F0b3JfX2xvYWRlclwiIC8+XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdXN5SW5kaWNhdG9yO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUtBOzs7Ozs7Ozs7OztBQUtBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7QUFiQTtBQUNBO0FBREE7QUFFQTtBQURBO0FBQ0E7QUFjQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/busy-indicator.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/card.jsx": -/*!***************************************!*\ - !*** ../ui/component/common/card.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Card; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/string */ \"../ui/util/string.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\nfunction Card(props) {\n var title = props.title,\n subtitle = props.subtitle,\n body = props.body,\n actions = props.actions,\n icon = props.icon,\n className = props.className,\n _props$isPageTitle = props.isPageTitle,\n isPageTitle = _props$isPageTitle === void 0 ? false : _props$isPageTitle,\n _props$isBodyTable = props.isBodyTable,\n isBodyTable = _props$isBodyTable === void 0 ? false : _props$isBodyTable,\n defaultExpand = props.defaultExpand;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(defaultExpand),\n _useState2 = _slicedToArray(_useState, 2),\n expanded = _useState2[0],\n setExpanded = _useState2[1];\n\n var expandable = defaultExpand !== undefined;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(className, 'card')\n }, (title || subtitle) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__header--between\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__section--flex\"\n }, icon && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sectionIcon: true,\n icon: icon\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, isPageTitle && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"card__title\"\n }, title), !isPageTitle && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"card__title\"\n }, title), subtitle && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__subtitle\"\n }, subtitle))), expandable && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__expand-btn\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: 'alt',\n \"aria-label\": __('More'),\n icon: expanded ? Object(util_string__WEBPACK_IMPORTED_MODULE_4__[\"toCapitalCase\"])(constants_icons__WEBPACK_IMPORTED_MODULE_5__[\"SUBTRACT\"]) : Object(util_string__WEBPACK_IMPORTED_MODULE_4__[\"toCapitalCase\"])(constants_icons__WEBPACK_IMPORTED_MODULE_5__[\"ADD\"]),\n onClick: function onClick() {\n return setExpanded(!expanded);\n }\n }))), (!expandable || expandable && expanded) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, body && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('card__body', {\n 'card__body--no-title': !title && !subtitle,\n 'card__body--table': isBodyTable\n })\n }, body), actions && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__main-actions\"\n }, actions)));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9jYXJkLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2NhcmQuanN4PzgwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyB0b0NhcGl0YWxDYXNlIH0gZnJvbSAndXRpbC9zdHJpbmcnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGl0bGU/OiBzdHJpbmcgfCBOb2RlLFxuICBzdWJ0aXRsZT86IHN0cmluZyB8IE5vZGUsXG4gIGJvZHk/OiBzdHJpbmcgfCBOb2RlLFxuICBhY3Rpb25zPzogc3RyaW5nIHwgTm9kZSxcbiAgaWNvbj86IHN0cmluZyxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBpc1BhZ2VUaXRsZT86IGJvb2xlYW4sXG4gIGlzQm9keVRhYmxlPzogYm9vbGVhbixcbiAgZGVmYXVsdEV4cGFuZD86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXJkKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgc3VidGl0bGUsXG4gICAgYm9keSxcbiAgICBhY3Rpb25zLFxuICAgIGljb24sXG4gICAgY2xhc3NOYW1lLFxuICAgIGlzUGFnZVRpdGxlID0gZmFsc2UsXG4gICAgaXNCb2R5VGFibGUgPSBmYWxzZSxcbiAgICBkZWZhdWx0RXhwYW5kLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoZGVmYXVsdEV4cGFuZCk7XG4gIGNvbnN0IGV4cGFuZGFibGUgPSBkZWZhdWx0RXhwYW5kICE9PSB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY2xhc3NOYW1lLCAnY2FyZCcpfT5cbiAgICAgIHsodGl0bGUgfHwgc3VidGl0bGUpICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19oZWFkZXItLWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX3NlY3Rpb24tLWZsZXhcIj5cbiAgICAgICAgICAgIHtpY29uICYmIDxJY29uIHNlY3Rpb25JY29uIGljb249e2ljb259IC8+fVxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge2lzUGFnZVRpdGxlICYmIDxoMSBjbGFzc05hbWU9XCJjYXJkX190aXRsZVwiPnt0aXRsZX08L2gxPn1cbiAgICAgICAgICAgICAgeyFpc1BhZ2VUaXRsZSAmJiA8aDIgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGVcIj57dGl0bGV9PC9oMj59XG4gICAgICAgICAgICAgIHtzdWJ0aXRsZSAmJiA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX3N1YnRpdGxlXCI+e3N1YnRpdGxlfTwvZGl2Pn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtleHBhbmRhYmxlICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fZXhwYW5kLWJ0blwiPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYnV0dG9uPXsnYWx0J31cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtfXygnTW9yZScpfVxuICAgICAgICAgICAgICAgIGljb249e2V4cGFuZGVkID8gdG9DYXBpdGFsQ2FzZShJQ09OUy5TVUJUUkFDVCkgOiB0b0NhcGl0YWxDYXNlKElDT05TLkFERCl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZGVkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHsoIWV4cGFuZGFibGUgfHwgKGV4cGFuZGFibGUgJiYgZXhwYW5kZWQpKSAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2JvZHkgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NhcmRfX2JvZHknLCB7XG4gICAgICAgICAgICAgICAgJ2NhcmRfX2JvZHktLW5vLXRpdGxlJzogIXRpdGxlICYmICFzdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICAnY2FyZF9fYm9keS0tdGFibGUnOiBpc0JvZHlUYWJsZSxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtib2R5fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWN0aW9ucyAmJiA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX21haW4tYWN0aW9uc1wiPnthY3Rpb25zfTwvZGl2Pn1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVlBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSkE7QUFjQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBU0E7QUFBQTtBQUtBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/card.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/credit-amount.jsx": -/*!************************************************!*\ - !*** ../ui/component/common/credit-amount.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar CreditAmount = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CreditAmount, _React$PureComponent);\n\n function CreditAmount() {\n _classCallCheck(this, CreditAmount);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(CreditAmount).apply(this, arguments));\n }\n\n _createClass(CreditAmount, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n amount = _this$props.amount,\n precision = _this$props.precision,\n showFullPrice = _this$props.showFullPrice,\n showFree = _this$props.showFree,\n showPlus = _this$props.showPlus,\n isEstimate = _this$props.isEstimate,\n fee = _this$props.fee,\n showLBC = _this$props.showLBC,\n badge = _this$props.badge;\n var minimumRenderableAmount = Math.pow(10, -1 * precision);\n var fullPrice = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"formatFullPrice\"])(amount, 2);\n var isFree = parseFloat(amount) === 0;\n var formattedAmount;\n\n if (showFullPrice) {\n formattedAmount = fullPrice;\n } else {\n formattedAmount = amount > 0 && amount < minimumRenderableAmount ? \"<\".concat(minimumRenderableAmount) : Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"formatCredits\"])(amount, precision, true);\n }\n\n var amountText;\n\n if (showFree && isFree) {\n amountText = __('Free');\n } else {\n amountText = formattedAmount;\n\n if (showPlus && amount > 0) {\n amountText = \"+\".concat(amountText);\n }\n\n if (showLBC) {\n amountText = __('%amount% LBC', {\n amount: amountText\n });\n }\n\n if (fee) {\n amountText = __('%amount% fee', {\n amount: amountText\n });\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n title: fullPrice,\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()({\n badge: badge,\n 'badge--cost': badge && amount > 0,\n 'badge--free': badge && isFree\n })\n }, amountText, isEstimate ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"credit-amount__estimate\",\n title: __('This is an estimate and does not include data fees')\n }, \"*\") : null);\n }\n }]);\n\n return CreditAmount;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(CreditAmount, \"defaultProps\", {\n precision: 2,\n showFree: false,\n showFullPrice: false,\n showPlus: false,\n showLBC: true,\n badge: true\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CreditAmount);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9jcmVkaXQtYW1vdW50LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2NyZWRpdC1hbW91bnQuanN4P2NiNTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZvcm1hdENyZWRpdHMsIGZvcm1hdEZ1bGxQcmljZSB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG50eXBlIFByb3BzID0ge1xuICBhbW91bnQ6IG51bWJlcixcbiAgcHJlY2lzaW9uOiBudW1iZXIsXG4gIHNob3dGcmVlOiBib29sZWFuLFxuICBzaG93RnVsbFByaWNlOiBib29sZWFuLFxuICBzaG93UGx1czogYm9vbGVhbixcbiAgaXNFc3RpbWF0ZT86IGJvb2xlYW4sXG4gIHNob3dMQkM/OiBib29sZWFuLFxuICBmZWU/OiBib29sZWFuLFxuICBiYWRnZT86IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBDcmVkaXRBbW91bnQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcHJlY2lzaW9uOiAyLFxuICAgIHNob3dGcmVlOiBmYWxzZSxcbiAgICBzaG93RnVsbFByaWNlOiBmYWxzZSxcbiAgICBzaG93UGx1czogZmFsc2UsXG4gICAgc2hvd0xCQzogdHJ1ZSxcbiAgICBiYWRnZTogdHJ1ZSxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBhbW91bnQsIHByZWNpc2lvbiwgc2hvd0Z1bGxQcmljZSwgc2hvd0ZyZWUsIHNob3dQbHVzLCBpc0VzdGltYXRlLCBmZWUsIHNob3dMQkMsIGJhZGdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgbWluaW11bVJlbmRlcmFibGVBbW91bnQgPSAxMCAqKiAoLTEgKiBwcmVjaXNpb24pO1xuICAgIGNvbnN0IGZ1bGxQcmljZSA9IGZvcm1hdEZ1bGxQcmljZShhbW91bnQsIDIpO1xuICAgIGNvbnN0IGlzRnJlZSA9IHBhcnNlRmxvYXQoYW1vdW50KSA9PT0gMDtcblxuICAgIGxldCBmb3JtYXR0ZWRBbW91bnQ7XG4gICAgaWYgKHNob3dGdWxsUHJpY2UpIHtcbiAgICAgIGZvcm1hdHRlZEFtb3VudCA9IGZ1bGxQcmljZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybWF0dGVkQW1vdW50ID1cbiAgICAgICAgYW1vdW50ID4gMCAmJiBhbW91bnQgPCBtaW5pbXVtUmVuZGVyYWJsZUFtb3VudFxuICAgICAgICAgID8gYDwke21pbmltdW1SZW5kZXJhYmxlQW1vdW50fWBcbiAgICAgICAgICA6IGZvcm1hdENyZWRpdHMoYW1vdW50LCBwcmVjaXNpb24sIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBhbW91bnRUZXh0O1xuICAgIGlmIChzaG93RnJlZSAmJiBpc0ZyZWUpIHtcbiAgICAgIGFtb3VudFRleHQgPSBfXygnRnJlZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbW91bnRUZXh0ID0gZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICBpZiAoc2hvd1BsdXMgJiYgYW1vdW50ID4gMCkge1xuICAgICAgICBhbW91bnRUZXh0ID0gYCske2Ftb3VudFRleHR9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dMQkMpIHtcbiAgICAgICAgYW1vdW50VGV4dCA9IF9fKCclYW1vdW50JSBMQkMnLCB7IGFtb3VudDogYW1vdW50VGV4dCB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZlZSkge1xuICAgICAgICBhbW91bnRUZXh0ID0gX18oJyVhbW91bnQlIGZlZScsIHsgYW1vdW50OiBhbW91bnRUZXh0IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICB0aXRsZT17ZnVsbFByaWNlfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoe1xuICAgICAgICAgIGJhZGdlLFxuICAgICAgICAgICdiYWRnZS0tY29zdCc6IGJhZGdlICYmIGFtb3VudCA+IDAsXG4gICAgICAgICAgJ2JhZGdlLS1mcmVlJzogYmFkZ2UgJiYgaXNGcmVlLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAge2Ftb3VudFRleHR9XG5cbiAgICAgICAge2lzRXN0aW1hdGUgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY3JlZGl0LWFtb3VudF9fZXN0aW1hdGVcIiB0aXRsZT17X18oJ1RoaXMgaXMgYW4gZXN0aW1hdGUgYW5kIGRvZXMgbm90IGluY2x1ZGUgZGF0YSBmZWVzJyl9PlxuICAgICAgICAgICAgKlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcmVkaXRBbW91bnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFhQTs7Ozs7Ozs7Ozs7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFXQTtBQUFBO0FBQUE7QUFNQTs7OztBQWhFQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUNBO0FBaUVBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/credit-amount.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/error-text.jsx": -/*!*********************************************!*\ - !*** ../ui/component/common/error-text.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ErrorText; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction ErrorText(props) {\n var children = props.children;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, children);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9lcnJvci10ZXh0LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2Vycm9yLXRleHQuanN4P2M3NzUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBhbnksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFcnJvclRleHQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+e2NoaWxkcmVufTwvc3Bhbj47XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/error-text.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/file-exporter.jsx": -/*!************************************************!*\ - !*** ../ui/component/common/file-exporter.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_parse_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util/parse-data */ \"../ui/util/parse-data.js\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_5__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\nvar FileExporter = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FileExporter, _React$PureComponent);\n\n function FileExporter() {\n var _this;\n\n _classCallCheck(this, FileExporter);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(FileExporter).call(this));\n _assertThisInitialized(_this).handleButtonClick = _this.handleButtonClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(FileExporter, [{\n key: \"handleFileCreation\",\n value: function handleFileCreation(filename, data) {\n var onFileCreated = this.props.onFileCreated;\n }\n }, {\n key: \"handleButtonClick\",\n value: function handleButtonClick() {\n var _this2 = this;\n\n var _this$props = this.props,\n title = _this$props.title,\n data = _this$props.data,\n defaultPath = _this$props.defaultPath,\n filters = _this$props.filters;\n var options = {\n title: title,\n defaultPath: defaultPath,\n filters: [{\n name: 'CSV',\n extensions: ['csv']\n }, {\n name: 'JSON',\n extensions: ['json']\n }]\n };\n electron__WEBPACK_IMPORTED_MODULE_4__[\"remote\"].dialog.showSaveDialog(electron__WEBPACK_IMPORTED_MODULE_4__[\"remote\"].getCurrentWindow(), options, function (filename) {\n // User hit cancel so do nothing:\n if (!filename) return; // Get extension and remove initial dot\n // Parse data to string with the chosen format\n\n var parsed = Object(util_parse_data__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(data, format, filters); // Write file\n\n if (parsed) {\n _this2.handleFileCreation(filename, parsed);\n }\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n label = _this$props2.label,\n disabled = _this$props2.disabled;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n disabled: disabled,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOAD\"],\n label: label || __('Export'),\n onClick: this.handleButtonClick\n });\n }\n }]);\n\n return FileExporter;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n_defineProperty(FileExporter, \"defaultProps\", {\n filters: []\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileExporter);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9maWxlLWV4cG9ydGVyLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2ZpbGUtZXhwb3J0ZXIuanN4P2JhOTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHBhcnNlRGF0YSBmcm9tICd1dGlsL3BhcnNlLWRhdGEnO1xuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSAnZWxlY3Ryb24nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IEFycmF5PGFueT4sXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRlZmF1bHRQYXRoPzogc3RyaW5nLFxuICBmaWx0ZXJzOiBBcnJheTxzdHJpbmc+LFxuICBvbkZpbGVDcmVhdGVkPzogc3RyaW5nID0+IHZvaWQsXG4gIGRpc2FibGVkOiBib29sZWFuLFxufTtcblxuY2xhc3MgRmlsZUV4cG9ydGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGZpbHRlcnM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgKHRoaXM6IGFueSkuaGFuZGxlQnV0dG9uQ2xpY2sgPSB0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVGaWxlQ3JlYXRpb24oZmlsZW5hbWU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgY29uc3QgeyBvbkZpbGVDcmVhdGVkIH0gPSB0aGlzLnByb3BzO1xuICB9XG5cbiAgaGFuZGxlQnV0dG9uQ2xpY2soKSB7XG4gICAgY29uc3QgeyB0aXRsZSwgZGF0YSwgZGVmYXVsdFBhdGgsIGZpbHRlcnMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZWZhdWx0UGF0aCxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDU1YnLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IFsnY3N2J10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnSlNPTicsXG4gICAgICAgICAgZXh0ZW5zaW9uczogWydqc29uJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICByZW1vdGUuZGlhbG9nLnNob3dTYXZlRGlhbG9nKHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCksIG9wdGlvbnMsIGZpbGVuYW1lID0+IHtcbiAgICAgIC8vIFVzZXIgaGl0IGNhbmNlbCBzbyBkbyBub3RoaW5nOlxuICAgICAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuO1xuICAgICAgLy8gR2V0IGV4dGVuc2lvbiBhbmQgcmVtb3ZlIGluaXRpYWwgZG90XG4gICAgICAvLyBQYXJzZSBkYXRhIHRvIHN0cmluZyB3aXRoIHRoZSBjaG9zZW4gZm9ybWF0XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURhdGEoZGF0YSwgZm9ybWF0LCBmaWx0ZXJzKTtcbiAgICAgIC8vIFdyaXRlIGZpbGVcbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWxlQ3JlYXRpb24oZmlsZW5hbWUsIHBhcnNlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBsYWJlbCwgZGlzYWJsZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCdXR0b25cbiAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaWNvbj17SUNPTlMuRE9XTkxPQUR9XG4gICAgICAgIGxhYmVsPXtsYWJlbCB8fCBfXygnRXhwb3J0Jyl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQnV0dG9uQ2xpY2t9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUV4cG9ydGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTs7O0FBS0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUdBO0FBQ0E7OztBQUNBO0FBQUE7QUFFQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBUkE7QUFlQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTs7OztBQXhEQTtBQUNBO0FBREE7QUFFQTtBQURBO0FBQ0E7QUF5REE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/file-exporter.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/file-selector.jsx": -/*!************************************************!*\ - !*** ../ui/component/common/file-selector.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar FileSelector = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FileSelector, _React$PureComponent);\n\n _createClass(FileSelector, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // If the form has just been cleared,\n // clear the file input\n if (prevProps.currentPath && !this.props.currentPath) {\n this.fileInput.current.value = null;\n }\n }\n }]);\n\n function FileSelector() {\n var _this;\n\n _classCallCheck(this, FileSelector);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(FileSelector).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"fileInput\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"handleFileInputSelection\", function () {\n var files = _this.fileInput.current.files;\n\n if (!files) {\n return;\n }\n\n var file = files[0];\n\n if (_this.props.onFileChosen) {\n _this.props.onFileChosen(file);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"fileInputButton\", function () {\n _this.fileInput.current.click();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"input\", void 0);\n\n _this.fileInput = react__WEBPACK_IMPORTED_MODULE_0__[\"createRef\"]();\n _this.handleFileInputSelection = _this.handleFileInputSelection.bind(_assertThisInitialized(_this));\n _this.fileInputButton = _this.fileInputButton.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(FileSelector, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n type = _this$props.type,\n currentPath = _this$props.currentPath,\n label = _this$props.label,\n fileLabel = _this$props.fileLabel,\n directoryLabel = _this$props.directoryLabel,\n placeholder = _this$props.placeholder,\n accept = _this$props.accept,\n error = _this$props.error,\n disabled = _this$props.disabled;\n var buttonLabel = type === 'file' ? fileLabel || __('Choose File') : directoryLabel || __('Choose Directory');\n var placeHolder = currentPath || placeholder;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n label: label,\n webkitdirectory: \"true\",\n className: \"form-field--copyable\",\n error: error,\n disabled: disabled,\n type: \"text\",\n readOnly: \"readonly\",\n value: placeHolder || __('Choose a file'),\n inputButton: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"secondary\",\n disabled: disabled,\n onClick: this.fileInputButton,\n label: buttonLabel\n })\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"input\", {\n type: 'file',\n style: {\n display: 'none'\n },\n accept: accept,\n ref: this.fileInput,\n onChange: function onChange() {\n return _this2.handleFileInputSelection();\n },\n webkitdirectory: type === 'openDirectory' ? 'True' : null\n }));\n }\n }]);\n\n return FileSelector;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n_defineProperty(FileSelector, \"defaultProps\", {\n type: 'file'\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileSelector);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9maWxlLXNlbGVjdG9yLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2ZpbGUtc2VsZWN0b3IuanN4PzJiMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHR5cGU6IHN0cmluZyxcbiAgY3VycmVudFBhdGg/OiA/c3RyaW5nLFxuICBvbkZpbGVDaG9zZW46IFdlYkZpbGUgPT4gdm9pZCxcbiAgbGFiZWw/OiBzdHJpbmcsXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nLFxuICBmaWxlTGFiZWw/OiBzdHJpbmcsXG4gIGRpcmVjdG9yeUxhYmVsPzogc3RyaW5nLFxuICBhY2NlcHQ/OiBzdHJpbmcsXG4gIGVycm9yPzogc3RyaW5nLFxuICBkaXNhYmxlZD86IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBGaWxlU2VsZWN0b3IgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFByb3BzKSB7XG4gICAgLy8gSWYgdGhlIGZvcm0gaGFzIGp1c3QgYmVlbiBjbGVhcmVkLFxuICAgIC8vIGNsZWFyIHRoZSBmaWxlIGlucHV0XG4gICAgaWYgKHByZXZQcm9wcy5jdXJyZW50UGF0aCAmJiAhdGhpcy5wcm9wcy5jdXJyZW50UGF0aCkge1xuICAgICAgdGhpcy5maWxlSW5wdXQuY3VycmVudC52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB0eXBlOiAnZmlsZScsXG4gIH07XG5cbiAgZmlsZUlucHV0OiBSZWFjdC5FbGVtZW50UmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmZpbGVJbnB1dCA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0U2VsZWN0aW9uID0gdGhpcy5oYW5kbGVGaWxlSW5wdXRTZWxlY3Rpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmZpbGVJbnB1dEJ1dHRvbiA9IHRoaXMuZmlsZUlucHV0QnV0dG9uLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVGaWxlSW5wdXRTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5maWxlSW5wdXQuY3VycmVudDtcbiAgICBpZiAoIWZpbGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xuICAgIGlmICh0aGlzLnByb3BzLm9uRmlsZUNob3Nlbikge1xuICAgICAgdGhpcy5wcm9wcy5vbkZpbGVDaG9zZW4oZmlsZSk7XG4gICAgfVxuICB9O1xuXG4gIGZpbGVJbnB1dEJ1dHRvbiA9ICgpID0+IHtcbiAgICB0aGlzLmZpbGVJbnB1dC5jdXJyZW50LmNsaWNrKCk7XG4gIH07XG5cbiAgaW5wdXQ6ID9IVE1MSW5wdXRFbGVtZW50O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHR5cGUsIGN1cnJlbnRQYXRoLCBsYWJlbCwgZmlsZUxhYmVsLCBkaXJlY3RvcnlMYWJlbCwgcGxhY2Vob2xkZXIsIGFjY2VwdCwgZXJyb3IsIGRpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGJ1dHRvbkxhYmVsID0gdHlwZSA9PT0gJ2ZpbGUnID8gZmlsZUxhYmVsIHx8IF9fKCdDaG9vc2UgRmlsZScpIDogZGlyZWN0b3J5TGFiZWwgfHwgX18oJ0Nob29zZSBEaXJlY3RvcnknKTtcbiAgICBjb25zdCBwbGFjZUhvbGRlciA9IGN1cnJlbnRQYXRoIHx8IHBsYWNlaG9sZGVyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICB3ZWJraXRkaXJlY3Rvcnk9XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWZpZWxkLS1jb3B5YWJsZVwiXG4gICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcmVhZE9ubHk9XCJyZWFkb25seVwiXG4gICAgICAgICAgdmFsdWU9e3BsYWNlSG9sZGVyIHx8IF9fKCdDaG9vc2UgYSBmaWxlJyl9XG4gICAgICAgICAgaW5wdXRCdXR0b249e1xuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJzZWNvbmRhcnlcIiBkaXNhYmxlZD17ZGlzYWJsZWR9IG9uQ2xpY2s9e3RoaXMuZmlsZUlucHV0QnV0dG9ufSBsYWJlbD17YnV0dG9uTGFiZWx9IC8+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPXsnZmlsZSd9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgICAgcmVmPXt0aGlzLmZpbGVJbnB1dH1cbiAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gdGhpcy5oYW5kbGVGaWxlSW5wdXRTZWxlY3Rpb24oKX1cbiAgICAgICAgICB3ZWJraXRkaXJlY3Rvcnk9e3R5cGUgPT09ICdvcGVuRGlyZWN0b3J5JyA/ICdUcnVlJyA6IG51bGx9XG4gICAgICAgIC8+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVNlbGVjdG9yO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQWNBOzs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFRQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFoQkE7QUFDQTtBQURBO0FBb0JBO0FBcEJBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFLQTtBQUNBOzs7QUFtQkE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVkE7QUFjQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFNQTtBQU5BO0FBVUE7Ozs7QUF0RUE7QUFDQTtBQURBO0FBVUE7QUFEQTtBQUNBO0FBK0RBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/file-selector.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/form-components/form-field-price.jsx": -/*!*******************************************************************!*\ - !*** ../ui/component/common/form-components/form-field-price.jsx ***! - \*******************************************************************/ -/*! exports provided: FormFieldPrice, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormFieldPrice\", function() { return FormFieldPrice; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form_field__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form-field */ \"../ui/component/common/form-components/form-field.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\nvar FormFieldPrice = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FormFieldPrice, _React$PureComponent);\n\n function FormFieldPrice(props) {\n var _this;\n\n _classCallCheck(this, FormFieldPrice);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(FormFieldPrice).call(this, props));\n _assertThisInitialized(_this).handleAmountChange = _this.handleAmountChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleCurrencyChange = _this.handleCurrencyChange.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(FormFieldPrice, [{\n key: \"handleAmountChange\",\n value: function handleAmountChange(event) {\n var _this$props = this.props,\n price = _this$props.price,\n onChange = _this$props.onChange;\n var amount = event.target.value ? parseFloat(event.target.value) : undefined;\n onChange({\n currency: price.currency,\n amount: amount\n });\n }\n }, {\n key: \"handleCurrencyChange\",\n value: function handleCurrencyChange(event) {\n var _this$props2 = this.props,\n price = _this$props2.price,\n onChange = _this$props2.onChange;\n onChange({\n currency: event.target.value,\n amount: price.amount\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n price = _this$props3.price,\n placeholder = _this$props3.placeholder,\n min = _this$props3.min,\n disabled = _this$props3.disabled,\n name = _this$props3.name,\n step = _this$props3.step;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](_form_field__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n name: \"\".concat(name, \"_amount\"),\n label: __('Price'),\n type: \"number\",\n className: \"form-field--price-amount\",\n min: min,\n value: price.amount,\n onWheel: function onWheel(e) {\n return e.preventDefault();\n },\n onChange: this.handleAmountChange,\n placeholder: placeholder || 5,\n disabled: disabled,\n step: step || 'any'\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](_form_field__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('Currency'),\n name: \"\".concat(name, \"_currency\"),\n type: \"select\",\n id: \"\".concat(name, \"_currency\"),\n className: \"input--currency-select\",\n disabled: disabled,\n onChange: this.handleCurrencyChange,\n value: price.currency\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: \"LBC\"\n }, __('LBRY Credits (LBC)')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: \"USD\"\n }, __('US Dollars'))));\n }\n }]);\n\n return FormFieldPrice;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FormFieldPrice);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZC1wcmljZS5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZC1wcmljZS5qc3g/ZWQxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi9mb3JtLWZpZWxkJztcblxudHlwZSBGb3JtUHJpY2UgPSB7XG4gIGFtb3VudDogP251bWJlcixcbiAgY3VycmVuY3k6IHN0cmluZyxcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHByaWNlOiBGb3JtUHJpY2UsXG4gIG9uQ2hhbmdlOiBGb3JtUHJpY2UgPT4gdm9pZCxcbiAgcGxhY2Vob2xkZXI6IG51bWJlcixcbiAgbWluOiBudW1iZXIsXG4gIGRpc2FibGVkOiBib29sZWFuLFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0ZXA6ID9udW1iZXIsXG59O1xuXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkUHJpY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgICh0aGlzOiBhbnkpLmhhbmRsZUFtb3VudENoYW5nZSA9IHRoaXMuaGFuZGxlQW1vdW50Q2hhbmdlLmJpbmQodGhpcyk7XG4gICAgKHRoaXM6IGFueSkuaGFuZGxlQ3VycmVuY3lDaGFuZ2UgPSB0aGlzLmhhbmRsZUN1cnJlbmN5Q2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVBbW91bnRDaGFuZ2UoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICBjb25zdCB7IHByaWNlLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhbW91bnQgPSBldmVudC50YXJnZXQudmFsdWUgPyBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgb25DaGFuZ2Uoe1xuICAgICAgY3VycmVuY3k6IHByaWNlLmN1cnJlbmN5LFxuICAgICAgYW1vdW50LFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ3VycmVuY3lDaGFuZ2UoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICBjb25zdCB7IHByaWNlLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBvbkNoYW5nZSh7XG4gICAgICBjdXJyZW5jeTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgYW1vdW50OiBwcmljZS5hbW91bnQsXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBwcmljZSwgcGxhY2Vob2xkZXIsIG1pbiwgZGlzYWJsZWQsIG5hbWUsIHN0ZXAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0LWdyb3VwIGNsYXNzPVwiZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWRcIj5cbiAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgIG5hbWU9e2Ake25hbWV9X2Ftb3VudGB9XG4gICAgICAgICAgbGFiZWw9e19fKCdQcmljZScpfVxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLXByaWNlLWFtb3VudFwiXG4gICAgICAgICAgbWluPXttaW59XG4gICAgICAgICAgdmFsdWU9e3ByaWNlLmFtb3VudH1cbiAgICAgICAgICBvbldoZWVsPXtlID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVBbW91bnRDaGFuZ2V9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8IDV9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIHN0ZXA9e3N0ZXAgfHwgJ2FueSd9XG4gICAgICAgIC8+XG4gICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICBsYWJlbD17X18oJ0N1cnJlbmN5Jyl9XG4gICAgICAgICAgbmFtZT17YCR7bmFtZX1fY3VycmVuY3lgfVxuICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgIGlkPXtgJHtuYW1lfV9jdXJyZW5jeWB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaW5wdXQtLWN1cnJlbmN5LXNlbGVjdFwiXG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUN1cnJlbmN5Q2hhbmdlfVxuICAgICAgICAgIHZhbHVlPXtwcmljZS5jdXJyZW5jeX1cbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJMQkNcIj57X18oJ0xCUlkgQ3JlZGl0cyAoTEJDKScpfTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJVU0RcIj57X18oJ1VTIERvbGxhcnMnKX08L29wdGlvbj5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8L2ZpZWxkc2V0LWdyb3VwPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9ybUZpZWxkUHJpY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFpQkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUpBO0FBS0E7QUFDQTtBQVBBO0FBQUE7QUFBQTtBQVFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQWZBO0FBQUE7QUFBQTtBQWlCQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBdkJBO0FBQUE7QUFBQTtBQXlCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBMURBO0FBQ0E7QUFEQTtBQUFBO0FBNkRBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/form-components/form-field-price.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/form-components/form-field.jsx": -/*!*************************************************************!*\ - !*** ../ui/component/common/form-components/form-field.jsx ***! - \*************************************************************/ -/*! exports provided: FormField, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormField\", function() { return FormField; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom_server__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/server */ \"../node_modules/@hot-loader/react-dom/server.browser.js\");\n/* harmony import */ var react_dom_server__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom_server__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_simplemde_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-simplemde-editor */ \"../node_modules/react-simplemde-editor/lib/index.js\");\n/* harmony import */ var react_simplemde_editor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_simplemde_editor__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_markdown_preview_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/markdown-preview-internal */ \"../ui/component/common/markdown-preview-internal.jsx\");\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var constants_comments__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/comments */ \"../ui/constants/comments.js\");\n/* harmony import */ var easymde_dist_easymde_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! easymde/dist/easymde.min.css */ \"../node_modules/easymde/dist/easymde.min.css\");\n/* harmony import */ var easymde_dist_easymde_min_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(easymde_dist_easymde_min_css__WEBPACK_IMPORTED_MODULE_6__);\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\nvar FormField = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FormField, _React$PureComponent);\n\n function FormField(props) {\n var _this;\n\n _classCallCheck(this, FormField);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(FormField).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"input\", void 0);\n\n _this.input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef();\n return _this;\n }\n\n _createClass(FormField, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var autoFocus = this.props.autoFocus;\n var input = this.input.current;\n\n if (input && autoFocus) {\n input.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n render = _this$props.render,\n label = _this$props.label,\n prefix = _this$props.prefix,\n postfix = _this$props.postfix,\n error = _this$props.error,\n helper = _this$props.helper,\n name = _this$props.name,\n type = _this$props.type,\n children = _this$props.children,\n stretch = _this$props.stretch,\n affixClass = _this$props.affixClass,\n autoFocus = _this$props.autoFocus,\n inputButton = _this$props.inputButton,\n labelOnLeft = _this$props.labelOnLeft,\n blockWrap = _this$props.blockWrap,\n charCount = _this$props.charCount,\n _this$props$textAreaM = _this$props.textAreaMaxLength,\n textAreaMaxLength = _this$props$textAreaM === void 0 ? constants_comments__WEBPACK_IMPORTED_MODULE_5__[\"MAX_CHARACTERS_IN_COMMENT\"] : _this$props$textAreaM,\n inputProps = _objectWithoutProperties(_this$props, [\"render\", \"label\", \"prefix\", \"postfix\", \"error\", \"helper\", \"name\", \"type\", \"children\", \"stretch\", \"affixClass\", \"autoFocus\", \"inputButton\", \"labelOnLeft\", \"blockWrap\", \"charCount\", \"textAreaMaxLength\"]);\n\n var errorMessage = _typeof(error) === 'object' ? error.message : error;\n var Wrapper = blockWrap ? function (_ref) {\n var innerChildren = _ref.children;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", {\n \"class\": \"radio\"\n }, innerChildren);\n } : function (_ref2) {\n var innerChildren = _ref2.children;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"radio\"\n }, innerChildren);\n };\n var input;\n\n if (type) {\n if (type === 'radio') {\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Wrapper, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n id: name,\n type: \"radio\"\n }, inputProps)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, label));\n } else if (type === 'checkbox') {\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"checkbox\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n id: name,\n type: \"checkbox\"\n }, inputProps)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, label));\n } else if (type === 'range') {\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n id: name,\n type: \"range\"\n }, inputProps)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, label));\n } else if (type === 'select') {\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, (label || errorMessage) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, errorMessage ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, errorMessage) : label), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"select\", _extends({\n id: name\n }, inputProps), children));\n } else if (type === 'markdown') {\n var handleEvents = {\n contextmenu: util_context_menu__WEBPACK_IMPORTED_MODULE_4__[\"openEditorMenu\"]\n };\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-field--SimpleMDE\",\n onContextMenu: util_context_menu__WEBPACK_IMPORTED_MODULE_4__[\"stopContextMenu\"]\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, label), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_simplemde_editor__WEBPACK_IMPORTED_MODULE_2___default.a, _extends({}, inputProps, {\n id: name,\n type: \"textarea\",\n events: handleEvents,\n options: {\n spellChecker: true,\n hideIcons: ['heading', 'image', 'fullscreen', 'side-by-side'],\n previewRender: function previewRender(plainText) {\n var preview = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview_internal__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n content: plainText\n });\n return react_dom_server__WEBPACK_IMPORTED_MODULE_1___default.a.renderToString(preview);\n }\n }\n }))));\n } else if (type === 'textarea') {\n var hasCharCount = charCount !== undefined && charCount >= 0;\n var countInfo = hasCharCount && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"comment__char-count\"\n }, \"\".concat(charCount || '0', \"/\").concat(textAreaMaxLength));\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, label), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"textarea\", _extends({\n type: type,\n id: name,\n maxLength: textAreaMaxLength,\n ref: this.input\n }, inputProps)), countInfo);\n } else {\n var inputElement = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n type: type,\n id: name\n }, inputProps, {\n ref: this.input\n }));\n var inner = inputButton ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input-submit\", null, inputElement, inputButton) : inputElement;\n input = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, (label || errorMessage) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, errorMessage ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, errorMessage) : label), prefix && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: name\n }, prefix), inner));\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, input, helper && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-field__help\"\n }, helper));\n }\n }]);\n\n return FormField;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(FormField, \"defaultProps\", {\n labelOnLeft: false,\n blockWrap: true\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FormField);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZC5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZC5qc3g/OWY1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50UmVmLCBOb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTVNlcnZlciBmcm9tICdyZWFjdC1kb20vc2VydmVyJztcbmltcG9ydCBTaW1wbGVNREUgZnJvbSAncmVhY3Qtc2ltcGxlbWRlLWVkaXRvcic7XG5pbXBvcnQgTWFya2Rvd25QcmV2aWV3IGZyb20gJ2NvbXBvbmVudC9jb21tb24vbWFya2Rvd24tcHJldmlldy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBvcGVuRWRpdG9yTWVudSwgc3RvcENvbnRleHRNZW51IH0gZnJvbSAndXRpbC9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgTUFYX0NIQVJBQ1RFUlNfSU5fQ09NTUVOVCBhcyBkZWZhdWx0VGV4dEFyZWFMaW1pdCB9IGZyb20gJ2NvbnN0YW50cy9jb21tZW50cyc7XG5pbXBvcnQgJ2Vhc3ltZGUvZGlzdC9lYXN5bWRlLm1pbi5jc3MnO1xuXG50eXBlIFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nIHwgTm9kZSxcbiAgcmVuZGVyPzogKCkgPT4gUmVhY3QkTm9kZSxcbiAgcHJlZml4Pzogc3RyaW5nLFxuICBwb3N0Zml4Pzogc3RyaW5nLFxuICBlcnJvcj86IHN0cmluZyB8IGJvb2xlYW4sXG4gIGhlbHBlcj86IHN0cmluZyB8IFJlYWN0JE5vZGUsXG4gIHR5cGU/OiBzdHJpbmcsXG4gIG9uQ2hhbmdlPzogYW55ID0+IGFueSxcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyLFxuICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IG51bWJlcixcbiAgY2hpbGRyZW4/OiBSZWFjdCROb2RlLFxuICBzdHJldGNoPzogYm9vbGVhbixcbiAgYWZmaXhDbGFzcz86IHN0cmluZywgLy8gY2xhc3MgYXBwbGllZCB0byBwcmVmaXgvcG9zdGZpeCBsYWJlbFxuICBhdXRvRm9jdXM/OiBib29sZWFuLFxuICBsYWJlbE9uTGVmdDogYm9vbGVhbixcbiAgaW5wdXRQcm9wcz86IHtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXG4gIH0sXG4gIGlucHV0QnV0dG9uPzogUmVhY3QkTm9kZSxcbiAgYmxvY2tXcmFwOiBib29sZWFuLFxuICBjaGFyQ291bnQ/OiBudW1iZXIsXG4gIHRleHRBcmVhTWF4TGVuZ3RoPzogbnVtYmVyLFxuICByYW5nZT86IG51bWJlcixcbiAgbWluPzogbnVtYmVyLFxuICBtYXg/OiBudW1iZXIsXG59O1xuXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGxhYmVsT25MZWZ0OiBmYWxzZSxcbiAgICBibG9ja1dyYXA6IHRydWUsXG4gIH07XG5cbiAgaW5wdXQ6IHsgY3VycmVudDogRWxlbWVudFJlZjxhbnk+IH07XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaW5wdXQgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgYXV0b0ZvY3VzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5jdXJyZW50O1xuXG4gICAgaWYgKGlucHV0ICYmIGF1dG9Gb2N1cykge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVuZGVyLFxuICAgICAgbGFiZWwsXG4gICAgICBwcmVmaXgsXG4gICAgICBwb3N0Zml4LFxuICAgICAgZXJyb3IsXG4gICAgICBoZWxwZXIsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgc3RyZXRjaCxcbiAgICAgIGFmZml4Q2xhc3MsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBpbnB1dEJ1dHRvbixcbiAgICAgIGxhYmVsT25MZWZ0LFxuICAgICAgYmxvY2tXcmFwLFxuICAgICAgY2hhckNvdW50LFxuICAgICAgdGV4dEFyZWFNYXhMZW5ndGggPSBkZWZhdWx0VGV4dEFyZWFMaW1pdCxcbiAgICAgIC4uLmlucHV0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnID8gZXJyb3IubWVzc2FnZSA6IGVycm9yO1xuICAgIGNvbnN0IFdyYXBwZXIgPSBibG9ja1dyYXBcbiAgICAgID8gKHsgY2hpbGRyZW46IGlubmVyQ2hpbGRyZW4gfSkgPT4gPGZpZWxkc2V0LXNlY3Rpb24gY2xhc3M9XCJyYWRpb1wiPntpbm5lckNoaWxkcmVufTwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgIDogKHsgY2hpbGRyZW46IGlubmVyQ2hpbGRyZW4gfSkgPT4gPHNwYW4gY2xhc3NOYW1lPVwicmFkaW9cIj57aW5uZXJDaGlsZHJlbn08L3NwYW4+O1xuXG4gICAgbGV0IGlucHV0O1xuICAgIGlmICh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICBpbnB1dCA9IChcbiAgICAgICAgICA8V3JhcHBlcj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD17bmFtZX0gdHlwZT1cInJhZGlvXCIgey4uLmlucHV0UHJvcHN9IC8+XG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17bmFtZX0+e2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgPC9XcmFwcGVyPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD17bmFtZX0gdHlwZT1cImNoZWNrYm94XCIgey4uLmlucHV0UHJvcHN9IC8+XG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17bmFtZX0+e2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgaW5wdXQgPSAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD17bmFtZX0gdHlwZT1cInJhbmdlXCIgey4uLmlucHV0UHJvcHN9IC8+XG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17bmFtZX0+e2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgICAgeyhsYWJlbCB8fCBlcnJvck1lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9e25hbWV9PntlcnJvck1lc3NhZ2UgPyA8c3BhbiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+e2Vycm9yTWVzc2FnZX08L3NwYW4+IDogbGFiZWx9PC9sYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8c2VsZWN0IGlkPXtuYW1lfSB7Li4uaW5wdXRQcm9wc30+XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21hcmtkb3duJykge1xuICAgICAgICBjb25zdCBoYW5kbGVFdmVudHMgPSB7XG4gICAgICAgICAgY29udGV4dG1lbnU6IG9wZW5FZGl0b3JNZW51LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1maWVsZC0tU2ltcGxlTURFXCIgb25Db250ZXh0TWVudT17c3RvcENvbnRleHRNZW51fT5cbiAgICAgICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17bmFtZX0+e2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxTaW1wbGVNREVcbiAgICAgICAgICAgICAgICB7Li4uaW5wdXRQcm9wc31cbiAgICAgICAgICAgICAgICBpZD17bmFtZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgIGV2ZW50cz17aGFuZGxlRXZlbnRzfVxuICAgICAgICAgICAgICAgIG9wdGlvbnM9e3tcbiAgICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2tlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGhpZGVJY29uczogWydoZWFkaW5nJywgJ2ltYWdlJywgJ2Z1bGxzY3JlZW4nLCAnc2lkZS1ieS1zaWRlJ10sXG4gICAgICAgICAgICAgICAgICBwcmV2aWV3UmVuZGVyKHBsYWluVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3ID0gPE1hcmtkb3duUHJldmlldyBjb250ZW50PXtwbGFpblRleHR9IC8+O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9TdHJpbmcocHJldmlldyk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgY29uc3QgaGFzQ2hhckNvdW50ID0gY2hhckNvdW50ICE9PSB1bmRlZmluZWQgJiYgY2hhckNvdW50ID49IDA7XG4gICAgICAgIGNvbnN0IGNvdW50SW5mbyA9IGhhc0NoYXJDb3VudCAmJiAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY29tbWVudF9fY2hhci1jb3VudFwiPntgJHtjaGFyQ291bnQgfHwgJzAnfS8ke3RleHRBcmVhTWF4TGVuZ3RofWB9PC9zcGFuPlxuICAgICAgICApO1xuICAgICAgICBpbnB1dCA9IChcbiAgICAgICAgICA8ZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtuYW1lfT57bGFiZWx9PC9sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSB0eXBlPXt0eXBlfSBpZD17bmFtZX0gbWF4TGVuZ3RoPXt0ZXh0QXJlYU1heExlbmd0aH0gcmVmPXt0aGlzLmlucHV0fSB7Li4uaW5wdXRQcm9wc30gLz5cbiAgICAgICAgICAgIHtjb3VudEluZm99XG4gICAgICAgICAgPC9maWVsZHNldC1zZWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gPGlucHV0IHR5cGU9e3R5cGV9IGlkPXtuYW1lfSB7Li4uaW5wdXRQcm9wc30gcmVmPXt0aGlzLmlucHV0fSAvPjtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBpbnB1dEJ1dHRvbiA/IChcbiAgICAgICAgICA8aW5wdXQtc3VibWl0PlxuICAgICAgICAgICAge2lucHV0RWxlbWVudH1cbiAgICAgICAgICAgIHtpbnB1dEJ1dHRvbn1cbiAgICAgICAgICA8L2lucHV0LXN1Ym1pdD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBpbnB1dEVsZW1lbnRcbiAgICAgICAgKTtcblxuICAgICAgICBpbnB1dCA9IChcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8ZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgICAgeyhsYWJlbCB8fCBlcnJvck1lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17bmFtZX0+XG4gICAgICAgICAgICAgICAgICB7ZXJyb3JNZXNzYWdlID8gPHNwYW4gY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPntlcnJvck1lc3NhZ2V9PC9zcGFuPiA6IGxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtwcmVmaXggJiYgPGxhYmVsIGh0bWxGb3I9e25hbWV9PntwcmVmaXh9PC9sYWJlbD59XG4gICAgICAgICAgICAgIHtpbm5lcn1cbiAgICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHtpbnB1dH1cblxuICAgICAgICB7aGVscGVyICYmIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1maWVsZF9faGVscFwiPntoZWxwZXJ9PC9kaXY+fVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1GaWVsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQStCQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFDQTtBQVpBO0FBQUE7QUFBQTtBQWFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQUE7QUFBQTtBQXNCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBUUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFOQTtBQVlBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU5BO0FBTEE7QUFUQTtBQTJCQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFSQTtBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBU0E7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFHQTtBQTFKQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBRkE7QUFDQTtBQTJKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/form-components/form-field.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/form-components/form.jsx": -/*!*******************************************************!*\ - !*** ../ui/component/common/form-components/form.jsx ***! - \*******************************************************/ -/*! exports provided: Form, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return Form; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\nvar Form = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(Form, _React$PureComponent);\n\n function Form() {\n _classCallCheck(this, Form);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Form).apply(this, arguments));\n }\n\n _createClass(Form, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n _onSubmit = _this$props.onSubmit,\n otherProps = _objectWithoutProperties(_this$props, [\"children\", \"onSubmit\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"form\", _extends({\n noValidate: true,\n className: \"form\",\n onSubmit: function onSubmit(event) {\n event.preventDefault();\n\n _onSubmit(event);\n }\n }, otherProps), children);\n }\n }]);\n\n return Form;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Form);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS5qc3g/YjgyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuTm9kZSxcbiAgb25TdWJtaXQ6IGFueSA9PiBhbnksXG59O1xuXG5leHBvcnQgY2xhc3MgRm9ybSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIG9uU3VibWl0LCAuLi5vdGhlclByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9ybVxuICAgICAgICBub1ZhbGlkYXRlXG4gICAgICAgIGNsYXNzTmFtZT1cImZvcm1cIlxuICAgICAgICBvblN1Ym1pdD17ZXZlbnQgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgb25TdWJtaXQoZXZlbnQpO1xuICAgICAgICB9fVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9mb3JtPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9ybTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFZQTtBQWhCQTtBQUNBO0FBREE7QUFBQTtBQW1CQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/form-components/form.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/form-components/submit.jsx": -/*!*********************************************************!*\ - !*** ../ui/component/common/form-components/submit.jsx ***! - \*********************************************************/ -/*! exports provided: Submit, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Submit\", function() { return Submit; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\nvar Submit = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(Submit, _React$PureComponent);\n\n function Submit() {\n _classCallCheck(this, Submit);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Submit).apply(this, arguments));\n }\n\n _createClass(Submit, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n label = _this$props.label,\n disabled = _this$props.disabled,\n otherProps = _objectWithoutProperties(_this$props, [\"label\", \"disabled\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({\n button: \"primary\",\n type: \"submit\",\n label: label,\n disabled: disabled\n }, otherProps));\n }\n }]);\n\n return Submit;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n_defineProperty(Submit, \"defaultProps\", {\n label: 'Submit'\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Submit);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvc3VibWl0LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2Zvcm0tY29tcG9uZW50cy9zdWJtaXQuanN4PzBhOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRpc2FibGVkOiBib29sZWFuLFxufTtcblxuZXhwb3J0IGNsYXNzIFN1Ym1pdCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBsYWJlbDogJ1N1Ym1pdCcsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbGFiZWwsIGRpc2FibGVkLCAuLi5vdGhlclByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgbGFiZWw9e2xhYmVsfSBkaXNhYmxlZD17ZGlzYWJsZWR9IHsuLi5vdGhlclByb3BzfSAvPjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWJtaXQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFSQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQURBO0FBQ0E7QUFTQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/form-components/submit.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/form.jsx": -/*!***************************************!*\ - !*** ../ui/component/common/form.jsx ***! - \***************************************/ -/*! exports provided: Form, FormField, FormFieldPrice, Submit */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _form_components_form__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./form-components/form */ \"../ui/component/common/form-components/form.jsx\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return _form_components_form__WEBPACK_IMPORTED_MODULE_0__[\"Form\"]; });\n\n/* harmony import */ var _form_components_form_field__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form-components/form-field */ \"../ui/component/common/form-components/form-field.jsx\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FormField\", function() { return _form_components_form_field__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"]; });\n\n/* harmony import */ var _form_components_form_field_price__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./form-components/form-field-price */ \"../ui/component/common/form-components/form-field-price.jsx\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FormFieldPrice\", function() { return _form_components_form_field_price__WEBPACK_IMPORTED_MODULE_2__[\"FormFieldPrice\"]; });\n\n/* harmony import */ var _form_components_submit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./form-components/submit */ \"../ui/component/common/form-components/submit.jsx\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Submit\", function() { return _form_components_submit__WEBPACK_IMPORTED_MODULE_3__[\"Submit\"]; });\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9mb3JtLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2Zvcm0uanN4PzY3OGEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRm9ybSB9IGZyb20gJy4vZm9ybS1jb21wb25lbnRzL2Zvcm0nO1xuZXhwb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5leHBvcnQgeyBGb3JtRmllbGRQcmljZSB9IGZyb20gJy4vZm9ybS1jb21wb25lbnRzL2Zvcm0tZmllbGQtcHJpY2UnO1xuZXhwb3J0IHsgU3VibWl0IH0gZnJvbSAnLi9mb3JtLWNvbXBvbmVudHMvc3VibWl0JztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/common/form.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/help-link.jsx": -/*!********************************************!*\ - !*** ../ui/component/common/help-link.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return HelpLink; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\nfunction HelpLink(props) {\n var href = props.href,\n navigate = props.navigate;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"icon--help\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"],\n description: __('Help'),\n href: href,\n navigate: navigate\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9oZWxwLWxpbmsuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jb21tb24vaGVscC1saW5rLmpzeD8yYzNmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhyZWY/OiBzdHJpbmcsXG4gIG5hdmlnYXRlPzogc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGVscExpbmsocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgaHJlZiwgbmF2aWdhdGUgfSA9IHByb3BzO1xuICByZXR1cm4gPEJ1dHRvbiBjbGFzc05hbWU9XCJpY29uLS1oZWxwXCIgaWNvbj17SUNPTlMuSEVMUH0gZGVzY3JpcHRpb249e19fKCdIZWxwJyl9IGhyZWY9e2hyZWZ9IG5hdmlnYXRlPXtuYXZpZ2F0ZX0gLz47XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/help-link.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/hidden-nsfw.jsx": -/*!**********************************************!*\ - !*** ../ui/component/common/hidden-nsfw.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return HiddenNsfw; });\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n\n\n\nfunction HiddenNsfw(props) {\n var _props$type = props.type,\n type = _props$type === void 0 ? 'page' : _props$type;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section--padded section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"icon--hidden\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"EYE_OFF\"]\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n tokens: {\n type: type,\n settings: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('settings'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"]),\n requiresAuth: true\n })\n }\n }, \"Content may be hidden on this %type% because of your %settings%.\"));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9oaWRkZW4tbnNmdy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9oaWRkZW4tbnNmdy5qc3g/MDNkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdHlwZT86IHN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhpZGRlbk5zZncocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdHlwZSA9ICdwYWdlJyB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb24tLXBhZGRlZCBzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgPEljb24gY2xhc3NOYW1lPVwiaWNvbi0taGlkZGVuXCIgaWNvbj17SUNPTlMuRVlFX09GRn0gLz5cbiAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHNldHRpbmdzOiAoXG4gICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ3NldHRpbmdzJyl9IG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5TRVRUSU5HU31gfSByZXF1aXJlc0F1dGg9e0lTX1dFQn0gLz5cbiAgICAgICAgICApLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICBDb250ZW50IG1heSBiZSBoaWRkZW4gb24gdGhpcyAldHlwZSUgYmVjYXVzZSBvZiB5b3VyICVzZXR0aW5ncyUuXG4gICAgICA8L0kxOG5NZXNzYWdlPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQURBO0FBWUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/hidden-nsfw.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/icon-custom.jsx": -/*!**********************************************!*\ - !*** ../ui/component/common/icon-custom.jsx ***! - \**********************************************/ -/*! exports provided: icons */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\nvar _icons;\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n} // A housing for all of our icons. Mostly taken from https://github.com/feathericons/react-feather\n\n\n\n // Returns a react component\n// Icons with tooltips need to use this function so the ref can be properly forwarded\n\nvar buildIcon = function buildIcon(iconStrokes) {\n var customSvgValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object(react__WEBPACK_IMPORTED_MODULE_1__[\"forwardRef\"])(function (props, ref) {\n var _props$size = props.size,\n size = _props$size === void 0 ? 24 : _props$size,\n _props$color = props.color,\n color = _props$color === void 0 ? 'currentColor' : _props$color,\n otherProps = _objectWithoutProperties(props, [\"size\", \"color\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"svg\", _extends({\n ref: ref,\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n width: size,\n height: size,\n fill: \"none\",\n stroke: color,\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, otherProps, customSvgValues), iconStrokes);\n });\n};\n\nvar icons = (_icons = {}, _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LBRY\"], function () {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"svg\", {\n stroke: \"currentColor\",\n fill: \"currentColor\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 322 254\",\n className: \"icon lbry-icon\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M296,85.9V100l-138.8,85.3L52.6,134l0.2-7.9l104,51.2L289,96.1v-5.8L164.2,30.1L25,116.2v38.5l131.8,65.2 l137.6-84.4l3.9,6l-141.1,86.4L18.1,159.1v-46.8l145.8-90.2C163.9,22.1,296,85.9,296,85.9z\"\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M294.3,150.9l2-12.6l-12.2-2.1l0.8-4.9l17.1,2.9l-2.8,17.5L294.3,150.9L294.3,150.9z\"\n }));\n}), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FEATURED\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"8\",\n r: \"7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ARROW_LEFT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"15 18 9 12 15 6\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ARROW_RIGHT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"9 18 15 12 9 6\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HOME\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n strokeWidth: \"2\",\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M1, 11 L12, 2 C12, 2 22.9999989, 11.0000005 23, 11\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M3, 10 C3, 10 3, 10.4453982 3, 10.9968336 L3, 20.0170446 C3, 20.5675806 3.43788135, 21.0138782 4.00292933, 21.0138781 L8.99707067, 21.0138779 C9.55097324, 21.0138779 10, 20.5751284 10, 20.0089602 L10, 15.0049177 C10, 14.449917 10.4433532, 14 11.0093689, 14 L12.9906311, 14 C13.5480902, 14 14, 14.4387495 14, 15.0049177 L14, 20.0089602 C14, 20.5639609 14.4378817, 21.0138779 15.0029302, 21.0138779 L19.9970758, 21.0138781 C20.5509789, 21.0138782 21.000006, 20.56848 21.000006, 20.0170446 L21.0000057, 10\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M8, 18 L5, 18 L5, 18 C2.790861, 18 1, 16.209139 1, 14 C1, 11.790861 2.790861, 10 5, 10 C5.35840468, 10 5.70579988, 10.0471371 6.03632437, 10.1355501 C6.01233106, 9.92702603 6, 9.71495305 6, 9.5 C6, 6.46243388 8.46243388, 4 11.5, 4 C14.0673313, 4 16.2238156, 5.7590449 16.8299648, 8.1376465 C17.2052921, 8.04765874 17.5970804, 8 18, 8 C20.7614237, 8 23, 10.2385763 23, 13 C23, 15.7614237 20.7614237, 18 18, 18 L16, 18\",\n strokeLinejoin: \"round\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M12, 13 L12, 21\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n strokeLinejoin: \"round\",\n transform: \"translate(12.000000, 12.500000) scale(1, -1) translate(-12.000000, -12.500000)\",\n points: \"15 11 12 14 9 11\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBSCRIBE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UNSUBSCRIBE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M 12,5.67 10.94,4.61 C 5.7533356,-0.57666427 -2.0266644,7.2033357 3.16,12.39 l 1.06,1.06 7.78,7.78 7.78,-7.78 1.06,-1.06 c 2.149101,-2.148092 2.149101,-5.6319078 0,-7.78 -2.148092,-2.1491008 -5.631908,-2.1491008 -7.78,0 L 9.4481298,8.2303201 15.320603,9.2419066 11.772427,13.723825\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ACCOUNT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"7\",\n r: \"4\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"OVERVIEW\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"22 12 18 12 15 21 9 3 6 12 2 12\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"WALLET\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"1\",\n y: \"4\",\n width: \"22\",\n height: \"16\",\n rx: \"2\",\n ry: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"1\",\n y1: \"10\",\n x2: \"23\",\n y2: \"10\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LIBRARY\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EDIT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polygon\", {\n points: \"18 2 22 6 12 16 8 16 8 12 18 2\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOAD\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"7 10 12 15 17 10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"15\",\n x2: \"12\",\n y2: \"3\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"17\",\n x2: \"12\",\n y2: \"17\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"BLOCK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4.93\",\n y1: \"4.93\",\n x2: \"19.07\",\n y2: \"19.07\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UNBLOCK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LIGHT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"5\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DARK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SEARCH\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"11\",\n cy: \"11\",\n r: \"8\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"21\",\n y1: \"21\",\n x2: \"16.65\",\n y2: \"16.65\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TIP\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"20 12 20 22 4 22 4 12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"2\",\n y: \"7\",\n width: \"20\",\n height: \"5\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"22\",\n x2: \"12\",\n y2: \"7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SHARE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"18\",\n cy: \"5\",\n r: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"6\",\n cy: \"12\",\n r: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"18\",\n cy: \"19\",\n r: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"8.59\",\n y1: \"13.51\",\n x2: \"15.42\",\n y2: \"17.49\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"15.41\",\n y1: \"6.51\",\n x2: \"8.59\",\n y2: \"10.49\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REPORT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4\",\n y1: \"22\",\n x2: \"4\",\n y2: \"15\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EXTERNAL\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DELETE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"3 6 5 6 21 6\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"COPY\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"9\",\n y: \"9\",\n width: \"13\",\n height: \"13\",\n rx: \"2\",\n ry: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ADD\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"5\",\n x2: \"12\",\n y2: \"19\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"5\",\n y1: \"12\",\n x2: \"19\",\n y2: \"12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBTRACT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"5\",\n y1: \"12\",\n x2: \"19\",\n y2: \"12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHAT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"YES\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"NO\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UP\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n transform: \"matrix(1,0,0,-1,0,24.707107)\",\n points: \"6 9 12 15 18 9\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWN\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"6 9 12 15 18 9\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FULLSCREEN\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"\n}))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FILE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"13 2 13 9 20 9\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"WEB\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"2\",\n y1: \"12\",\n x2: \"22\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ALERT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"8\",\n x2: \"12\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"16\",\n x2: \"12\",\n y2: \"16\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UNLOCK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"3\",\n y: \"11\",\n width: \"18\",\n height: \"11\",\n rx: \"2\",\n ry: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M7 11V7a5 5 0 0 1 9.9-1\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LOCK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"3\",\n y: \"11\",\n width: \"18\",\n height: \"11\",\n rx: \"2\",\n ry: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M7 11V7a5 5 0 0 1 10 0v4\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TAG\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"7\",\n y1: \"7\",\n x2: \"7\",\n y2: \"7\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"23 6 13.5 15.5 8.5 10.5 1 18\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"17 6 23 6 23 12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EYE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"3\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EYE_OFF\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"1\",\n y1: \"1\",\n x2: \"23\",\n y2: \"23\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VIEW\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"10 17 15 12 10 7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"15\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SIGN_IN\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"10 17 15 12 10 7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"15\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SIGN_OUT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"16 17 21 12 16 7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"9\",\n y2: \"12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PHONE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"MENU\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"3\",\n y1: \"12\",\n x2: \"21\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"3\",\n y1: \"6\",\n x2: \"21\",\n y2: \"6\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"3\",\n y1: \"18\",\n x2: \"21\",\n y2: \"18\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polygon\", {\n points: \"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TRENDING\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"23 6 13.5 15.5 8.5 10.5 1 18\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"17 6 23 6 23 12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TOP\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"20\",\n x2: \"12\",\n y2: \"10\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"18\",\n y1: \"20\",\n x2: \"18\",\n y2: \"4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"6\",\n y1: \"20\",\n x2: \"6\",\n y2: \"16\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"NEW\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"12 9 12 12 13.5 13.5\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"\n}), ' '))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"9\",\n cy: \"7\",\n r: \"4\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M23 21v-2a4 4 0 0 0-3-3.87\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M16 3.13a4 4 0 0 1 0 7.75\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VIDEO\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polygon\", {\n points: \"23 7 16 12 23 17 23 7\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"1\",\n y: \"5\",\n width: \"15\",\n height: \"14\",\n rx: \"2\",\n ry: \"2\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"AUDIO\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M3 18v-6a9 9 0 0 1 18 0v6\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"IMAGE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"rect\", {\n x: \"3\",\n y: \"3\",\n width: \"18\",\n height: \"18\",\n rx: \"2\",\n ry: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"8.5\",\n cy: \"8.5\",\n r: \"1.5\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"21 15 16 10 5 21\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TEXT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"14 2 14 8 20 8\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"16\",\n y1: \"13\",\n x2: \"8\",\n y2: \"13\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"16\",\n y1: \"17\",\n x2: \"8\",\n y2: \"17\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"10 9 9 9 8 9\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOADABLE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"17 21 17 13 7 13 7 21\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"7 3 7 8 15 8\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REPOST\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"17 1 21 5 17 9\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M3 11V9a4 4 0 0 1 4-4h14\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"7 23 3 19 7 15\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M21 13v2a4 4 0 0 1-4 4H3\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"MORE_VERTICAL\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"5\",\n r: \"1\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"1\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"12\",\n cy: \"19\",\n r: \"1\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VALIDATED\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"20 6 9 17 4 12\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SLIDERS\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4\",\n y1: \"21\",\n x2: \"4\",\n y2: \"14\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"4\",\n y1: \"10\",\n x2: \"4\",\n y2: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"12\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"12\",\n y1: \"8\",\n x2: \"12\",\n y2: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"20\",\n y1: \"21\",\n x2: \"20\",\n y2: \"16\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"20\",\n y1: \"12\",\n x2: \"20\",\n y2: \"3\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"1\",\n y1: \"14\",\n x2: \"7\",\n y2: \"14\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"9\",\n y1: \"8\",\n x2: \"15\",\n y2: \"8\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"line\", {\n x1: \"17\",\n y1: \"16\",\n x2: \"23\",\n y2: \"16\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ANALYTICS\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M 8.4312337,1.6285136 V 9.4232264 L 2.2367584,22.725564 H 22.030217 L 15.773797,9.2902071 V 1.6285136 Z\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"M 4.2426407,18.166369 H 12.197591\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n d: \"m 6.363961,14.188893 h 5.701048\"\n})))), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TWITTER\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 30C0 13.4315 13.4315 0 30 0C46.5685 0 60 13.4315 60 30C60 46.5685 46.5685 60 30 60C13.4315 60 0 46.5685 0 30Z\",\n fill: \"#55ACEE\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M29.1015 24.3844L29.1645 25.4224L28.1152 25.2953C24.2961 24.8081 20.9596 23.1556 18.1267 20.3804L16.7417 19.0034L16.385 20.0203C15.6295 22.2871 16.1122 24.681 17.686 26.291C18.5254 27.1808 18.3365 27.3079 16.8886 26.7783C16.385 26.6088 15.9443 26.4817 15.9023 26.5453C15.7554 26.6935 16.2591 28.6214 16.6578 29.384C17.2034 30.4433 18.3155 31.4814 19.5326 32.0957L20.5609 32.583L19.3438 32.6042C18.1686 32.6042 18.1267 32.6254 18.2526 33.0702C18.6723 34.4473 20.33 35.909 22.1767 36.5446L23.4777 36.9895L22.3445 37.6674C20.6658 38.6419 18.6933 39.1927 16.7207 39.2351C15.7764 39.2563 15 39.341 15 39.4046C15 39.6164 17.5601 40.8028 19.05 41.2689C23.5197 42.6459 28.8287 42.0527 32.8157 39.7012C35.6486 38.0275 38.4815 34.7015 39.8035 31.4814C40.517 29.7654 41.2305 26.63 41.2305 25.1259C41.2305 24.1513 41.2934 24.0242 42.4686 22.8591C43.161 22.1811 43.8116 21.4397 43.9375 21.2278C44.1473 20.8253 44.1263 20.8253 43.0561 21.1854C41.2724 21.821 41.0206 21.7362 41.902 20.7829C42.5525 20.105 43.3289 18.8763 43.3289 18.5161C43.3289 18.4526 43.0141 18.5585 42.6574 18.7492C42.2797 18.961 41.4403 19.2788 40.8108 19.4694L39.6776 19.8296L38.6494 19.1305C38.0828 18.7492 37.2854 18.3255 36.8657 18.1983C35.7955 17.9017 34.1587 17.9441 33.1935 18.2831C30.5704 19.2364 28.9126 21.6939 29.1015 24.3844Z\",\n fill: \"white\"\n})), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FACEBOOK\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 30C0 13.4315 13.4315 0 30 0C46.5685 0 60 13.4315 60 30C60 46.5685 46.5685 60 30 60C13.4315 60 0 46.5685 0 30Z\",\n fill: \"#3B5998\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.1269 47.6393V31.3178H37.6324L38.2295 25.6933H33.1269L33.1346 22.8781C33.1346 21.4112 33.274 20.6251 35.381 20.6251H38.1976V15H33.6915C28.2789 15 26.3738 17.7285 26.3738 22.317V25.6939H23V31.3184H26.3738V47.6393H33.1269Z\",\n fill: \"white\"\n})), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REDDIT\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30 60C46.5685 60 60 46.5685 60 30C60 13.4315 46.5685 0 30 0C13.4315 0 0 13.4315 0 30C0 46.5685 13.4315 60 30 60Z\",\n fill: \"#FF5700\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M52 29.6094C52 26.8656 49.7581 24.6331 47.0017 24.6331C45.7411 24.6331 44.5908 25.1045 43.7108 25.8741C40.5791 23.8712 36.4389 22.5679 31.854 22.3398L34.2649 14.753L40.843 16.2952C40.9167 18.5053 42.7408 20.2824 44.9793 20.2824C47.2636 20.2824 49.1224 18.4323 49.1224 16.1575C49.1224 13.8827 47.2632 12.0326 44.9793 12.0326C43.3199 12.0326 41.8896 13.0109 41.228 14.4159L33.8364 12.6845C33.3468 12.5702 32.8494 12.8509 32.6994 13.3286L29.8452 22.3101C24.9638 22.4055 20.5352 23.718 17.2164 25.8084C16.3462 25.0768 15.2228 24.6331 13.9983 24.6331C11.2419 24.6336 9 26.8656 9 29.6094C9 31.3563 9.91082 32.8922 11.2819 33.7795C11.2121 34.2251 11.1744 34.6766 11.1744 35.1334C11.1744 42.2094 19.8037 47.9664 30.412 47.9664C41.0194 47.9664 49.6497 42.2094 49.6497 35.1334C49.6497 34.7097 49.6174 34.2908 49.5573 33.8763C51.0159 33.0084 52 31.4235 52 29.6094ZM44.9792 13.9503C46.2022 13.9503 47.1971 14.9413 47.1971 16.159C47.1971 17.3766 46.2022 18.3671 44.9792 18.3671C43.7556 18.3671 42.7607 17.3766 42.7607 16.159C42.7607 14.9413 43.7556 13.9503 44.9792 13.9503ZM10.9253 29.6094C10.9253 27.9228 12.3037 26.5499 13.9978 26.5499C14.57 26.5499 15.1046 26.71 15.5644 26.9829C13.8498 28.3699 12.5666 30.002 11.843 31.786C11.2766 31.2309 10.9253 30.4608 10.9253 29.6094ZM47.7244 35.1344C47.7244 41.1527 39.957 46.0502 30.412 46.0502C20.8655 46.0502 13.0996 41.1532 13.0996 35.1344C13.0996 34.9223 13.1113 34.7131 13.1299 34.5044C13.1881 33.8647 13.3366 33.2391 13.5628 32.6329C14.1497 31.0615 15.2755 29.6196 16.8132 28.3902C17.3053 27.9967 17.8384 27.625 18.4091 27.2781C21.5242 25.3852 25.7548 24.2177 30.412 24.2177C35.1366 24.2177 39.4244 25.4183 42.5497 27.3599C43.1219 27.7145 43.6536 28.0949 44.1432 28.4973C45.6198 29.7081 46.6992 31.1199 47.2685 32.6548C47.4928 33.2629 47.6413 33.889 47.697 34.5302C47.7141 34.7311 47.7244 34.9315 47.7244 35.1344ZM49.03 31.9003C48.3269 30.0979 47.0467 28.4492 45.333 27.0447C45.8138 26.7328 46.3865 26.5499 47.0022 26.5499C48.6968 26.5499 50.0752 27.9223 50.0752 29.6094C50.0742 30.5216 49.6687 31.3399 49.03 31.9003Z\",\n fill: \"white\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M27.0214 32.827C27.0214 31.2109 25.705 29.855 24.0813 29.855C22.458 29.855 21.0967 31.2109 21.0967 32.827C21.0967 34.4426 22.4585 35.7547 24.0813 35.7547C25.705 35.7527 27.0214 34.4426 27.0214 32.827Z\",\n fill: \"white\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.9632 29.8541C35.34 29.8541 33.9742 31.2094 33.9742 32.8255C33.9742 34.4421 35.34 35.7532 36.9632 35.7532C38.5869 35.7532 39.9043 34.4431 39.9043 32.8255C39.9033 31.2084 38.5869 29.8541 36.9632 29.8541Z\",\n fill: \"white\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.1325 39.9224C35.0434 41.0053 33.2095 41.5312 30.5225 41.5312C30.5142 41.5312 30.5068 41.5336 30.499 41.5336C30.4907 41.5336 30.4839 41.5312 30.4761 41.5312C27.7886 41.5312 25.9542 41.0053 24.8665 39.9224C24.4908 39.5478 23.8809 39.5478 23.5052 39.9224C23.1289 40.2974 23.1289 40.9041 23.5052 41.2772C24.9716 42.7377 27.252 43.4484 30.4761 43.4484C30.4844 43.4484 30.4912 43.4455 30.499 43.4455C30.5068 43.4455 30.5142 43.4484 30.5225 43.4484C33.746 43.4484 36.027 42.7377 37.4948 41.2782C37.8716 40.9031 37.8716 40.297 37.4958 39.9233C37.1191 39.5487 36.5093 39.5487 36.1325 39.9224Z\",\n fill: \"white\"\n})), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TELEGRAM\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30 60C46.5685 60 60 46.5685 60 30C60 13.4315 46.5685 0 30 0C13.4315 0 0 13.4315 0 30C0 46.5685 13.4315 60 30 60Z\",\n fill: \"url(#paint0_linear)\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24.5 43.75C23.5281 43.75 23.6933 43.383 23.3581 42.4576L20.5 33.0515L42.5 20\",\n fill: \"#C8DAEA\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24.5 43.75C25.25 43.75 25.5814 43.407 26 43L30 39.1105L25.0105 36.1017\",\n fill: \"#A9C9DD\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.01 36.1025L37.1 45.0347C38.4796 45.796 39.4753 45.4018 39.819 43.7539L44.7402 20.5631C45.2441 18.5431 43.9702 17.6269 42.6504 18.2261L13.7529 29.3688C11.7804 30.16 11.7919 31.2605 13.3933 31.7508L20.8091 34.0654L37.9773 23.2341C38.7878 22.7427 39.5317 23.0069 38.9211 23.5487\",\n fill: \"url(#paint1_linear)\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"defs\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: \"22.503\",\n y1: \"2.502\",\n x2: \"7.503\",\n y2: \"37.5\",\n gradientUnits: \"userSpaceOnUse\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"stop\", {\n stopColor: \"#37AEE2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#1E96C8\"\n})), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: \"26.2445\",\n y1: \"31.8428\",\n x2: \"29.4499\",\n y2: \"42.2115\",\n gradientUnits: \"userSpaceOnUse\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"stop\", {\n stopColor: \"#EFF7FC\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"white\"\n})))), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LINKEDIN\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 30C0 13.4315 13.4315 0 30 0C46.5685 0 60 13.4315 60 30C60 46.5685 46.5685 60 30 60C13.4315 60 0 46.5685 0 30Z\",\n fill: \"#0077B5\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.6484 18.5283C21.6042 16.5255 20.1721 15 17.8462 15C15.5205 15 14 16.5255 14 18.5283C14 20.4897 15.4756 22.0592 17.7581 22.0592H17.8015C20.1721 22.0592 21.6484 20.4897 21.6484 18.5283ZM21.2007 24.8473H14.4021V45.2744H21.2007V24.8473ZM37.8914 24.3677C42.3652 24.3677 45.7192 27.2878 45.7192 33.5621L45.719 45.2745H38.9207V34.3459C38.9207 31.601 37.9368 29.7278 35.4756 29.7278C33.5974 29.7278 32.4785 30.9906 31.9873 32.2102C31.8074 32.6473 31.7634 33.2563 31.7634 33.8668V45.275H24.9639C24.9639 45.275 25.0535 26.7646 24.9639 24.8479H31.7634V27.7412C32.6658 26.3503 34.2817 24.3677 37.8914 24.3677Z\",\n fill: \"white\"\n})), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EMBED\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 30C0 13.4315 13.4315 0 30 0C46.5685 0 60 13.4315 60 30C60 46.5685 46.5685 60 30 60C13.4315 60 0 46.5685 0 30Z\",\n fill: \"#eee\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", {\n transform: \"scale(1.2)\"\n}, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"15 18 9 12 15 6\",\n stroke: \"black\",\n transform: \"translate(6,12)\",\n strokeWidth: \"2\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"polyline\", {\n points: \"9 18 15 12 9 6\",\n stroke: \"black\",\n transform: \"translate(20,12)\",\n strokeWidth: \"2\"\n}))), {\n viewBox: '0 0 60 60'\n})), _defineProperty(_icons, constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"MORE\"], buildIcon(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"g\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 30C0 13.4315 13.4315 0 30 0C46.5685 0 60 13.4315 60 30C60 46.5685 46.5685 60 30 60C13.4315 60 0 46.5685 0 30Z\",\n fill: \"#eee\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"20\",\n cy: \"30\",\n r: \"2\",\n stroke: \"black\",\n fill: \"black\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"30\",\n cy: \"30\",\n r: \"2\",\n stroke: \"black\",\n fill: \"black\"\n}), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"circle\", {\n cx: \"40\",\n cy: \"30\",\n r: \"2\",\n stroke: \"black\",\n fill: \"black\"\n})), {\n viewBox: '0 0 60 60'\n})), _icons);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9pY29uLWN1c3RvbS5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9pY29uLWN1c3RvbS5qc3g/MDQ4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLy8gQSBob3VzaW5nIGZvciBhbGwgb2Ygb3VyIGljb25zLiBNb3N0bHkgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVhdGhlcmljb25zL3JlYWN0LWZlYXRoZXJcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIHNpemU6IG51bWJlcixcbiAgY29sb3I6IHN0cmluZyxcbn07XG5cbi8vIFJldHVybnMgYSByZWFjdCBjb21wb25lbnRcbi8vIEljb25zIHdpdGggdG9vbHRpcHMgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBzbyB0aGUgcmVmIGNhbiBiZSBwcm9wZXJseSBmb3J3YXJkZWRcbmNvbnN0IGJ1aWxkSWNvbiA9IChpY29uU3Ryb2tlczogUmVhY3QkTm9kZSwgY3VzdG9tU3ZnVmFsdWVzID0ge30pID0+XG4gIGZvcndhcmRSZWYoKHByb3BzOiBJY29uUHJvcHMsIHJlZikgPT4ge1xuICAgIGNvbnN0IHsgc2l6ZSA9IDI0LCBjb2xvciA9ICdjdXJyZW50Q29sb3InLCAuLi5vdGhlclByb3BzIH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPHN2Z1xuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICB3aWR0aD17c2l6ZX1cbiAgICAgICAgaGVpZ2h0PXtzaXplfVxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZT17Y29sb3J9XG4gICAgICAgIHN0cm9rZVdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgey4uLmN1c3RvbVN2Z1ZhbHVlc31cbiAgICAgID5cbiAgICAgICAge2ljb25TdHJva2VzfVxuICAgICAgPC9zdmc+XG4gICAgKTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBpY29ucyA9IHtcbiAgLy8gVGhlIExCUlkgaWNvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBpY29uIHNldCBzbyBkb24ndCB1c2UgYnVpbGRJY29uKClcbiAgW0lDT05TLkxCUlldOiAoKSA9PiAoXG4gICAgPHN2ZyBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDMyMiAyNTRcIiBjbGFzc05hbWU9XCJpY29uIGxicnktaWNvblwiPlxuICAgICAgPHBhdGggZD1cIk0yOTYsODUuOVYxMDBsLTEzOC44LDg1LjNMNTIuNiwxMzRsMC4yLTcuOWwxMDQsNTEuMkwyODksOTYuMXYtNS44TDE2NC4yLDMwLjFMMjUsMTE2LjJ2MzguNWwxMzEuOCw2NS4yIGwxMzcuNi04NC40bDMuOSw2bC0xNDEuMSw4Ni40TDE4LjEsMTU5LjF2LTQ2LjhsMTQ1LjgtOTAuMkMxNjMuOSwyMi4xLDI5Niw4NS45LDI5Niw4NS45elwiIC8+XG4gICAgICA8cGF0aCBkPVwiTTI5NC4zLDE1MC45bDItMTIuNmwtMTIuMi0yLjFsMC44LTQuOWwxNy4xLDIuOWwtMi44LDE3LjVMMjk0LjMsMTUwLjlMMjk0LjMsMTUwLjl6XCIgLz5cbiAgICA8L3N2Zz5cbiAgKSxcbiAgW0lDT05TLkZFQVRVUkVEXTogYnVpbGRJY29uKFxuICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbFJ1bGU9XCJldmVub2RkXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCI+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjhcIiByPVwiN1wiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiOC4yMSAxMy44OSA3IDIzIDEyIDIwIDE3IDIzIDE1Ljc5IDEzLjg4XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5BUlJPV19MRUZUXTogYnVpbGRJY29uKFxuICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbFJ1bGU9XCJldmVub2RkXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCI+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTUgMTggOSAxMiAxNSA2XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5BUlJPV19SSUdIVF06IGJ1aWxkSWNvbihcbiAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGxSdWxlPVwiZXZlbm9kZFwiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiPlxuICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjkgMTggMTUgMTIgOSA2XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5IT01FXTogYnVpbGRJY29uKFxuICAgIDxnIHN0cm9rZVdpZHRoPVwiMlwiIGZpbGw9XCJub25lXCIgZmlsbFJ1bGU9XCJldmVub2RkXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgPHBhdGggZD1cIk0xLCAxMSBMMTIsIDIgQzEyLCAyIDIyLjk5OTk5ODksIDExLjAwMDAwMDUgMjMsIDExXCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNMywgMTAgQzMsIDEwIDMsIDEwLjQ0NTM5ODIgMywgMTAuOTk2ODMzNiBMMywgMjAuMDE3MDQ0NiBDMywgMjAuNTY3NTgwNiAzLjQzNzg4MTM1LCAyMS4wMTM4NzgyIDQuMDAyOTI5MzMsIDIxLjAxMzg3ODEgTDguOTk3MDcwNjcsIDIxLjAxMzg3NzkgQzkuNTUwOTczMjQsIDIxLjAxMzg3NzkgMTAsIDIwLjU3NTEyODQgMTAsIDIwLjAwODk2MDIgTDEwLCAxNS4wMDQ5MTc3IEMxMCwgMTQuNDQ5OTE3IDEwLjQ0MzM1MzIsIDE0IDExLjAwOTM2ODksIDE0IEwxMi45OTA2MzExLCAxNCBDMTMuNTQ4MDkwMiwgMTQgMTQsIDE0LjQzODc0OTUgMTQsIDE1LjAwNDkxNzcgTDE0LCAyMC4wMDg5NjAyIEMxNCwgMjAuNTYzOTYwOSAxNC40Mzc4ODE3LCAyMS4wMTM4Nzc5IDE1LjAwMjkzMDIsIDIxLjAxMzg3NzkgTDE5Ljk5NzA3NTgsIDIxLjAxMzg3ODEgQzIwLjU1MDk3ODksIDIxLjAxMzg3ODIgMjEuMDAwMDA2LCAyMC41Njg0OCAyMS4wMDAwMDYsIDIwLjAxNzA0NDYgTDIxLjAwMDAwNTcsIDEwXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5QVUJMSVNIXTogYnVpbGRJY29uKFxuICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbFJ1bGU9XCJldmVub2RkXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTgsIDE4IEw1LCAxOCBMNSwgMTggQzIuNzkwODYxLCAxOCAxLCAxNi4yMDkxMzkgMSwgMTQgQzEsIDExLjc5MDg2MSAyLjc5MDg2MSwgMTAgNSwgMTAgQzUuMzU4NDA0NjgsIDEwIDUuNzA1Nzk5ODgsIDEwLjA0NzEzNzEgNi4wMzYzMjQzNywgMTAuMTM1NTUwMSBDNi4wMTIzMzEwNiwgOS45MjcwMjYwMyA2LCA5LjcxNDk1MzA1IDYsIDkuNSBDNiwgNi40NjI0MzM4OCA4LjQ2MjQzMzg4LCA0IDExLjUsIDQgQzE0LjA2NzMzMTMsIDQgMTYuMjIzODE1NiwgNS43NTkwNDQ5IDE2LjgyOTk2NDgsIDguMTM3NjQ2NSBDMTcuMjA1MjkyMSwgOC4wNDc2NTg3NCAxNy41OTcwODA0LCA4IDE4LCA4IEMyMC43NjE0MjM3LCA4IDIzLCAxMC4yMzg1NzYzIDIzLCAxMyBDMjMsIDE1Ljc2MTQyMzcgMjAuNzYxNDIzNywgMTggMTgsIDE4IEwxNiwgMThcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aCBkPVwiTTEyLCAxMyBMMTIsIDIxXCIgLz5cbiAgICAgIDxwb2x5bGluZVxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEyLjAwMDAwMCwgMTIuNTAwMDAwKSBzY2FsZSgxLCAtMSkgdHJhbnNsYXRlKC0xMi4wMDAwMDAsIC0xMi41MDAwMDApXCJcbiAgICAgICAgcG9pbnRzPVwiMTUgMTEgMTIgMTQgOSAxMVwiXG4gICAgICAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlNVQlNDUklCRV06IGJ1aWxkSWNvbihcbiAgICA8cGF0aCBkPVwiTTIwLjg0IDQuNjFhNS41IDUuNSAwIDAgMC03Ljc4IDBMMTIgNS42N2wtMS4wNi0xLjA2YTUuNSA1LjUgMCAwIDAtNy43OCA3Ljc4bDEuMDYgMS4wNkwxMiAyMS4yM2w3Ljc4LTcuNzggMS4wNi0xLjA2YTUuNSA1LjUgMCAwIDAgMC03Ljc4elwiIC8+XG4gICksXG4gIFtJQ09OUy5VTlNVQlNDUklCRV06IGJ1aWxkSWNvbihcbiAgICA8cGF0aCBkPVwiTSAxMiw1LjY3IDEwLjk0LDQuNjEgQyA1Ljc1MzMzNTYsLTAuNTc2NjY0MjcgLTIuMDI2NjY0NCw3LjIwMzMzNTcgMy4xNiwxMi4zOSBsIDEuMDYsMS4wNiA3Ljc4LDcuNzggNy43OCwtNy43OCAxLjA2LC0xLjA2IGMgMi4xNDkxMDEsLTIuMTQ4MDkyIDIuMTQ5MTAxLC01LjYzMTkwNzggMCwtNy43OCAtMi4xNDgwOTIsLTIuMTQ5MTAwOCAtNS42MzE5MDgsLTIuMTQ5MTAwOCAtNy43OCwwIEwgOS40NDgxMjk4LDguMjMwMzIwMSAxNS4zMjA2MDMsOS4yNDE5MDY2IDExLjc3MjQyNywxMy43MjM4MjVcIiAvPlxuICApLFxuICBbSUNPTlMuU0VUVElOR1NdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjNcIiAvPlxuICAgICAgPHBhdGggZD1cIk0xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5BQ0NPVU5UXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyXCIgLz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiN1wiIHI9XCI0XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5PVkVSVklFV106IGJ1aWxkSWNvbig8cG9seWxpbmUgcG9pbnRzPVwiMjIgMTIgMTggMTIgMTUgMjEgOSAzIDYgMTIgMiAxMlwiIC8+KSxcbiAgW0lDT05TLldBTExFVF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjRcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMTZcIiByeD1cIjJcIiByeT1cIjJcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxXCIgeTE9XCIxMFwiIHgyPVwiMjNcIiB5Mj1cIjEwXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5MSUJSQVJZXTogYnVpbGRJY29uKDxwYXRoIGQ9XCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIiAvPiksXG4gIFtJQ09OUy5FRElUXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0yMCAxNC42NlYyMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoNS4zNFwiIC8+XG4gICAgICA8cG9seWdvbiBwb2ludHM9XCIxOCAyIDIyIDYgMTIgMTYgOCAxNiA4IDEyIDE4IDJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkRPV05MT0FEXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI3IDEwIDEyIDE1IDE3IDEwXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjE1XCIgeDI9XCIxMlwiIHkyPVwiM1wiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuSEVMUF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiAvPlxuICAgICAgPHBhdGggZD1cIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgM1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCIxN1wiIHgyPVwiMTJcIiB5Mj1cIjE3XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5CTE9DS106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiAvPlxuICAgICAgPGxpbmUgeDE9XCI0LjkzXCIgeTE9XCI0LjkzXCIgeDI9XCIxOS4wN1wiIHkyPVwiMTkuMDdcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlVOQkxPQ0tdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5MSUdIVF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiNVwiIC8+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCIxXCIgeDI9XCIxMlwiIHkyPVwiM1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCIyMVwiIHgyPVwiMTJcIiB5Mj1cIjIzXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiNC4yMlwiIHkxPVwiNC4yMlwiIHgyPVwiNS42NFwiIHkyPVwiNS42NFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjE4LjM2XCIgeTE9XCIxOC4zNlwiIHgyPVwiMTkuNzhcIiB5Mj1cIjE5Ljc4XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMVwiIHkxPVwiMTJcIiB4Mj1cIjNcIiB5Mj1cIjEyXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMjFcIiB5MT1cIjEyXCIgeDI9XCIyM1wiIHkyPVwiMTJcIiAvPlxuICAgICAgPGxpbmUgeDE9XCI0LjIyXCIgeTE9XCIxOS43OFwiIHgyPVwiNS42NFwiIHkyPVwiMTguMzZcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxOC4zNlwiIHkxPVwiNS42NFwiIHgyPVwiMTkuNzhcIiB5Mj1cIjQuMjJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkRBUktdOiBidWlsZEljb24oPHBhdGggZD1cIk0yMSAxMi43OUE5IDkgMCAxIDEgMTEuMjEgMyA3IDcgMCAwIDAgMjEgMTIuNzl6XCIgLz4pLFxuICBbSUNPTlMuU0VBUkNIXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMjFcIiB5MT1cIjIxXCIgeDI9XCIxNi42NVwiIHkyPVwiMTYuNjVcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlRJUF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIyMCAxMiAyMCAyMiA0IDIyIDQgMTJcIiAvPlxuICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCI1XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjIyXCIgeDI9XCIxMlwiIHkyPVwiN1wiIC8+XG4gICAgICA8cGF0aCBkPVwiTTEyIDdINy41YTIuNSAyLjUgMCAwIDEgMC01QzExIDIgMTIgNyAxMiA3elwiIC8+XG4gICAgICA8cGF0aCBkPVwiTTEyIDdoNC41YTIuNSAyLjUgMCAwIDAgMC01QzEzIDIgMTIgNyAxMiA3elwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuU0hBUkVdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8Y2lyY2xlIGN4PVwiMThcIiBjeT1cIjVcIiByPVwiM1wiIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiMTJcIiByPVwiM1wiIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiMThcIiBjeT1cIjE5XCIgcj1cIjNcIiAvPlxuICAgICAgPGxpbmUgeDE9XCI4LjU5XCIgeTE9XCIxMy41MVwiIHgyPVwiMTUuNDJcIiB5Mj1cIjE3LjQ5XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTUuNDFcIiB5MT1cIjYuNTFcIiB4Mj1cIjguNTlcIiB5Mj1cIjEwLjQ5XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5SRVBPUlRdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aCBkPVwiTTQgMTVzMS0xIDQtMSA1IDIgOCAyIDQtMSA0LTFWM3MtMSAxLTQgMS01LTItOC0yLTQgMS00IDF6XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiNFwiIHkxPVwiMjJcIiB4Mj1cIjRcIiB5Mj1cIjE1XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5FWFRFUk5BTF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTUgMyAyMSAzIDIxIDlcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxMFwiIHkxPVwiMTRcIiB4Mj1cIjIxXCIgeTI9XCIzXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5ERUxFVEVdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMyA2IDUgNiAyMSA2XCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2bTMgMFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkNPUFldOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cmVjdCB4PVwiOVwiIHk9XCI5XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgcng9XCIyXCIgcnk9XCIyXCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNNSAxNUg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDlhMiAyIDAgMCAxIDIgMnYxXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5SRU1PVkVdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8bGluZSB4MT1cIjE4XCIgeTE9XCI2XCIgeDI9XCI2XCIgeTI9XCIxOFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuQUREXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPGxpbmUgeDE9XCIxMlwiIHkxPVwiNVwiIHgyPVwiMTJcIiB5Mj1cIjE5XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiNVwiIHkxPVwiMTJcIiB4Mj1cIjE5XCIgeTI9XCIxMlwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuU1VCVFJBQ1RdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8bGluZSB4MT1cIjVcIiB5MT1cIjEyXCIgeDI9XCIxOVwiIHkyPVwiMTJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkNIQVRdOiBidWlsZEljb24oXG4gICAgPHBhdGggZD1cIk0yMSAxMS41YTguMzggOC4zOCAwIDAgMS0uOSAzLjggOC41IDguNSAwIDAgMS03LjYgNC43IDguMzggOC4zOCAwIDAgMS0zLjgtLjlMMyAyMWwxLjktNS43YTguMzggOC4zOCAwIDAgMS0uOS0zLjggOC41IDguNSAwIDAgMSA0LjctNy42IDguMzggOC4zOCAwIDAgMSAzLjgtLjloLjVhOC40OCA4LjQ4IDAgMCAxIDggOHYuNXpcIiAvPlxuICApLFxuICBbSUNPTlMuWUVTXTogYnVpbGRJY29uKFxuICAgIDxwYXRoIGQ9XCJNMTQgOVY1YTMgMyAwIDAgMC0zLTNsLTQgOXYxMWgxMS4yOGEyIDIgMCAwIDAgMi0xLjdsMS4zOC05YTIgMiAwIDAgMC0yLTIuM3pNNyAyMkg0YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmgzXCIgLz5cbiAgKSxcbiAgW0lDT05TLk5PXTogYnVpbGRJY29uKFxuICAgIDxwYXRoIGQ9XCJNMTAgMTV2NGEzIDMgMCAwIDAgMyAzbDQtOVYySDUuNzJhMiAyIDAgMCAwLTIgMS43bC0xLjM4IDlhMiAyIDAgMCAwIDIgMi4zem03LTEzaDIuNjdBMi4zMSAyLjMxIDAgMCAxIDIyIDR2N2EyLjMxIDIuMzEgMCAwIDEtMi4zMyAySDE3XCIgLz5cbiAgKSxcbiAgW0lDT05TLlVQXTogYnVpbGRJY29uKDxwb2x5bGluZSB0cmFuc2Zvcm09XCJtYXRyaXgoMSwwLDAsLTEsMCwyNC43MDcxMDcpXCIgcG9pbnRzPVwiNiA5IDEyIDE1IDE4IDlcIiAvPiksXG4gIFtJQ09OUy5ET1dOXTogYnVpbGRJY29uKDxwb2x5bGluZSBwb2ludHM9XCI2IDkgMTIgMTUgMTggOVwiIC8+KSxcbiAgW0lDT05TLkZVTExTQ1JFRU5dOiBidWlsZEljb24oXG4gICAgPHBhdGggZD1cIk04IDNINWEyIDIgMCAwIDAtMiAydjNtMTggMFY1YTIgMiAwIDAgMC0yLTJoLTNtMCAxOGgzYTIgMiAwIDAgMCAyLTJ2LTNNMyAxNnYzYTIgMiAwIDAgMCAyIDJoM1wiIC8+XG4gICksXG4gIFtJQ09OUy5GSUxFXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0xMyAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOXpcIiAvPlxuICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjEzIDIgMTMgOSAyMCA5XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5DSEFOTkVMXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCI0XCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNMTYgOHY1YTMgMyAwIDAgMCA2IDB2LTFhMTAgMTAgMCAxIDAtMy45MiA3Ljk0XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5XRUJdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMlwiIHkxPVwiMTJcIiB4Mj1cIjIyXCIgeTI9XCIxMlwiIC8+XG4gICAgICA8cGF0aCBkPVwiTTEyIDJhMTUuMyAxNS4zIDAgMCAxIDQgMTAgMTUuMyAxNS4zIDAgMCAxLTQgMTAgMTUuMyAxNS4zIDAgMCAxLTQtMTAgMTUuMyAxNS4zIDAgMCAxIDQtMTB6XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5BTEVSVF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMlwiIHkyPVwiMTZcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlVOTE9DS106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjExXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjExXCIgcng9XCIyXCIgcnk9XCIyXCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMVwiIC8+XG4gICAgPC9nPlxuICApLFxuXG4gIFtJQ09OUy5MT0NLXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiMTFcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTFcIiByeD1cIjJcIiByeT1cIjJcIiAvPlxuICAgICAgPHBhdGggZD1cIk03IDExVjdhNSA1IDAgMCAxIDEwIDB2NFwiIC8+XG4gICAgPC9nPlxuICApLFxuXG4gIFtJQ09OUy5UQUddOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aCBkPVwiTTIwLjU5IDEzLjQxbC03LjE3IDcuMTdhMiAyIDAgMCAxLTIuODMgMEwyIDEyVjJoMTBsOC41OSA4LjU5YTIgMiAwIDAgMSAwIDIuODJ6XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiN1wiIHgyPVwiN1wiIHkyPVwiN1wiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuU1VQUE9SVF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIyMyA2IDEzLjUgMTUuNSA4LjUgMTAuNSAxIDE4XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxNyA2IDIzIDYgMjMgMTJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkVZRV06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMSAxMnM0LTggMTEtOCAxMSA4IDExIDgtNCA4LTExIDgtMTEtOC0xMS04elwiIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjNcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkVZRV9PRkZdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aCBkPVwiTTE3Ljk0IDE3Ljk0QTEwLjA3IDEwLjA3IDAgMCAxIDEyIDIwYy03IDAtMTEtOC0xMS04YTE4LjQ1IDE4LjQ1IDAgMCAxIDUuMDYtNS45NE05LjkgNC4yNEE5LjEyIDkuMTIgMCAwIDEgMTIgNGM3IDAgMTEgOCAxMSA4YTE4LjUgMTguNSAwIDAgMS0yLjE2IDMuMTltLTYuNzItMS4wN2EzIDMgMCAxIDEtNC4yNC00LjI0XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMVwiIHkxPVwiMVwiIHgyPVwiMjNcIiB5Mj1cIjIzXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5WSUVXXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxMCAxNyAxNSAxMiAxMCA3XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTVcIiB5MT1cIjEyXCIgeDI9XCIzXCIgeTI9XCIxMlwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuU0lHTl9JTl06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNFwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTAgMTcgMTUgMTIgMTAgN1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjE1XCIgeTE9XCIxMlwiIHgyPVwiM1wiIHkyPVwiMTJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlNJR05fT1VUXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk05IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNFwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTYgMTcgMjEgMTIgMTYgN1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjIxXCIgeTE9XCIxMlwiIHgyPVwiOVwiIHkyPVwiMTJcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlBIT05FXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuTUVOVV06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxsaW5lIHgxPVwiM1wiIHkxPVwiMTJcIiB4Mj1cIjIxXCIgeTI9XCIxMlwiIC8+XG4gICAgICA8bGluZSB4MT1cIjNcIiB5MT1cIjZcIiB4Mj1cIjIxXCIgeTI9XCI2XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiM1wiIHkxPVwiMThcIiB4Mj1cIjIxXCIgeTI9XCIxOFwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuRElTQ09WRVJdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgLz5cbiAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjE2LjI0IDcuNzYgMTQuMTIgMTQuMTIgNy43NiAxNi4yNCA5Ljg4IDkuODggMTYuMjQgNy43NlwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuVFJFTkRJTkddOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMjMgNiAxMy41IDE1LjUgOC41IDEwLjUgMSAxOFwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTcgNiAyMyA2IDIzIDEyXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5UT1BdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCIyMFwiIHgyPVwiMTJcIiB5Mj1cIjEwXCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMThcIiB5MT1cIjIwXCIgeDI9XCIxOFwiIHkyPVwiNFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjZcIiB5MT1cIjIwXCIgeDI9XCI2XCIgeTI9XCIxNlwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuTkVXXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCI3XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxMiA5IDEyIDEyIDEzLjUgMTMuNVwiIC8+XG4gICAgICA8cGF0aCBkPVwiTTE2LjUxIDE3LjM1bC0uMzUgMy44M2EyIDIgMCAwIDEtMiAxLjgySDkuODNhMiAyIDAgMCAxLTItMS44MmwtLjM1LTMuODNtLjAxLTEwLjdsLjM1LTMuODNBMiAyIDAgMCAxIDkuODMgMWg0LjM1YTIgMiAwIDAgMSAyIDEuODJsLjM1IDMuODNcIiAvPnsnICd9XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuSU5WSVRFXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGggZD1cIk0xNyAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCIgLz5cbiAgICAgIDxjaXJjbGUgY3g9XCI5XCIgY3k9XCI3XCIgcj1cIjRcIiAvPlxuICAgICAgPHBhdGggZD1cIk0yMyAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3XCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNMTYgMy4xM2E0IDQgMCAwIDEgMCA3Ljc1XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5WSURFT106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjIzIDcgMTYgMTIgMjMgMTcgMjMgN1wiIC8+XG4gICAgICA8cmVjdCB4PVwiMVwiIHk9XCI1XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE0XCIgcng9XCIyXCIgcnk9XCIyXCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5BVURJT106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMyAxOHYtNmE5IDkgMCAwIDEgMTggMHY2XCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNMjEgMTlhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoM3pNMyAxOWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAwIDItMnYtM2EyIDIgMCAwIDAtMi0ySDN6XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5JTUFHRV06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjJcIiByeT1cIjJcIiAvPlxuICAgICAgPGNpcmNsZSBjeD1cIjguNVwiIGN5PVwiOC41XCIgcj1cIjEuNVwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMjEgMTUgMTYgMTAgNSAyMVwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuVEVYVF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxNCAyIDE0IDggMjAgOFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjE2XCIgeTE9XCIxM1wiIHgyPVwiOFwiIHkyPVwiMTNcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxNlwiIHkxPVwiMTdcIiB4Mj1cIjhcIiB5Mj1cIjE3XCIgLz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxMCA5IDkgOSA4IDlcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkRPV05MT0FEQUJMRV06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNMTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMWw1IDV2MTFhMiAyIDAgMCAxLTIgMnpcIiAvPlxuICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjE3IDIxIDE3IDEzIDcgMTMgNyAyMVwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiNyAzIDcgOCAxNSA4XCIgLz5cbiAgICA8L2c+XG4gICksXG4gIFtJQ09OUy5SRVBPU1RdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTcgMSAyMSA1IDE3IDlcIiAvPlxuICAgICAgPHBhdGggZD1cIk0zIDExVjlhNCA0IDAgMCAxIDQtNGgxNFwiIC8+XG4gICAgICA8cG9seWxpbmUgcG9pbnRzPVwiNyAyMyAzIDE5IDcgMTVcIiAvPlxuICAgICAgPHBhdGggZD1cIk0yMSAxM3YyYTQgNCAwIDAgMS00IDRIM1wiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuTU9SRV9WRVJUSUNBTF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiNVwiIHI9XCIxXCIgLz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMVwiIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE5XCIgcj1cIjFcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLlZBTElEQVRFRF06IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIyMCA2IDkgMTcgNCAxMlwiIC8+XG4gICAgPC9nPlxuICApLFxuICBbSUNPTlMuU0xJREVSU106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxsaW5lIHgxPVwiNFwiIHkxPVwiMjFcIiB4Mj1cIjRcIiB5Mj1cIjE0XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiNFwiIHkxPVwiMTBcIiB4Mj1cIjRcIiB5Mj1cIjNcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxMlwiIHkxPVwiMjFcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiIC8+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiM1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjIwXCIgeTE9XCIyMVwiIHgyPVwiMjBcIiB5Mj1cIjE2XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMjBcIiB5MT1cIjEyXCIgeDI9XCIyMFwiIHkyPVwiM1wiIC8+XG4gICAgICA8bGluZSB4MT1cIjFcIiB5MT1cIjE0XCIgeDI9XCI3XCIgeTI9XCIxNFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjlcIiB5MT1cIjhcIiB4Mj1cIjE1XCIgeTI9XCI4XCIgLz5cbiAgICAgIDxsaW5lIHgxPVwiMTdcIiB5MT1cIjE2XCIgeDI9XCIyM1wiIHkyPVwiMTZcIiAvPlxuICAgIDwvZz5cbiAgKSxcbiAgW0lDT05TLkFOQUxZVElDU106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoIGQ9XCJNIDguNDMxMjMzNywxLjYyODUxMzYgViA5LjQyMzIyNjQgTCAyLjIzNjc1ODQsMjIuNzI1NTY0IEggMjIuMDMwMjE3IEwgMTUuNzczNzk3LDkuMjkwMjA3MSBWIDEuNjI4NTEzNiBaXCIgLz5cbiAgICAgIDxwYXRoIGQ9XCJNIDQuMjQyNjQwNywxOC4xNjYzNjkgSCAxMi4xOTc1OTFcIiAvPlxuICAgICAgPHBhdGggZD1cIm0gNi4zNjM5NjEsMTQuMTg4ODkzIGggNS43MDEwNDhcIiAvPlxuICAgIDwvZz5cbiAgKSxcblxuICAvL1xuICAvLyBTaGFyZSBtb2RhbCBzb2NpYWwgaWNvbnNcbiAgLy9cbiAgW0lDT05TLlRXSVRURVJdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTAgMzBDMCAxMy40MzE1IDEzLjQzMTUgMCAzMCAwQzQ2LjU2ODUgMCA2MCAxMy40MzE1IDYwIDMwQzYwIDQ2LjU2ODUgNDYuNTY4NSA2MCAzMCA2MEMxMy40MzE1IDYwIDAgNDYuNTY4NSAwIDMwWlwiXG4gICAgICAgIGZpbGw9XCIjNTVBQ0VFXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTI5LjEwMTUgMjQuMzg0NEwyOS4xNjQ1IDI1LjQyMjRMMjguMTE1MiAyNS4yOTUzQzI0LjI5NjEgMjQuODA4MSAyMC45NTk2IDIzLjE1NTYgMTguMTI2NyAyMC4zODA0TDE2Ljc0MTcgMTkuMDAzNEwxNi4zODUgMjAuMDIwM0MxNS42Mjk1IDIyLjI4NzEgMTYuMTEyMiAyNC42ODEgMTcuNjg2IDI2LjI5MUMxOC41MjU0IDI3LjE4MDggMTguMzM2NSAyNy4zMDc5IDE2Ljg4ODYgMjYuNzc4M0MxNi4zODUgMjYuNjA4OCAxNS45NDQzIDI2LjQ4MTcgMTUuOTAyMyAyNi41NDUzQzE1Ljc1NTQgMjYuNjkzNSAxNi4yNTkxIDI4LjYyMTQgMTYuNjU3OCAyOS4zODRDMTcuMjAzNCAzMC40NDMzIDE4LjMxNTUgMzEuNDgxNCAxOS41MzI2IDMyLjA5NTdMMjAuNTYwOSAzMi41ODNMMTkuMzQzOCAzMi42MDQyQzE4LjE2ODYgMzIuNjA0MiAxOC4xMjY3IDMyLjYyNTQgMTguMjUyNiAzMy4wNzAyQzE4LjY3MjMgMzQuNDQ3MyAyMC4zMyAzNS45MDkgMjIuMTc2NyAzNi41NDQ2TDIzLjQ3NzcgMzYuOTg5NUwyMi4zNDQ1IDM3LjY2NzRDMjAuNjY1OCAzOC42NDE5IDE4LjY5MzMgMzkuMTkyNyAxNi43MjA3IDM5LjIzNTFDMTUuNzc2NCAzOS4yNTYzIDE1IDM5LjM0MSAxNSAzOS40MDQ2QzE1IDM5LjYxNjQgMTcuNTYwMSA0MC44MDI4IDE5LjA1IDQxLjI2ODlDMjMuNTE5NyA0Mi42NDU5IDI4LjgyODcgNDIuMDUyNyAzMi44MTU3IDM5LjcwMTJDMzUuNjQ4NiAzOC4wMjc1IDM4LjQ4MTUgMzQuNzAxNSAzOS44MDM1IDMxLjQ4MTRDNDAuNTE3IDI5Ljc2NTQgNDEuMjMwNSAyNi42MyA0MS4yMzA1IDI1LjEyNTlDNDEuMjMwNSAyNC4xNTEzIDQxLjI5MzQgMjQuMDI0MiA0Mi40Njg2IDIyLjg1OTFDNDMuMTYxIDIyLjE4MTEgNDMuODExNiAyMS40Mzk3IDQzLjkzNzUgMjEuMjI3OEM0NC4xNDczIDIwLjgyNTMgNDQuMTI2MyAyMC44MjUzIDQzLjA1NjEgMjEuMTg1NEM0MS4yNzI0IDIxLjgyMSA0MS4wMjA2IDIxLjczNjIgNDEuOTAyIDIwLjc4MjlDNDIuNTUyNSAyMC4xMDUgNDMuMzI4OSAxOC44NzYzIDQzLjMyODkgMTguNTE2MUM0My4zMjg5IDE4LjQ1MjYgNDMuMDE0MSAxOC41NTg1IDQyLjY1NzQgMTguNzQ5MkM0Mi4yNzk3IDE4Ljk2MSA0MS40NDAzIDE5LjI3ODggNDAuODEwOCAxOS40Njk0TDM5LjY3NzYgMTkuODI5NkwzOC42NDk0IDE5LjEzMDVDMzguMDgyOCAxOC43NDkyIDM3LjI4NTQgMTguMzI1NSAzNi44NjU3IDE4LjE5ODNDMzUuNzk1NSAxNy45MDE3IDM0LjE1ODcgMTcuOTQ0MSAzMy4xOTM1IDE4LjI4MzFDMzAuNTcwNCAxOS4yMzY0IDI4LjkxMjYgMjEuNjkzOSAyOS4xMDE1IDI0LjM4NDRaXCJcbiAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgIC8+XG4gICAgPC9nPixcbiAgICB7XG4gICAgICB2aWV3Qm94OiAnMCAwIDYwIDYwJyxcbiAgICB9XG4gICksXG4gIFtJQ09OUy5GQUNFQk9PS106IGJ1aWxkSWNvbihcbiAgICA8Zz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMCAzMEMwIDEzLjQzMTUgMTMuNDMxNSAwIDMwIDBDNDYuNTY4NSAwIDYwIDEzLjQzMTUgNjAgMzBDNjAgNDYuNTY4NSA0Ni41Njg1IDYwIDMwIDYwQzEzLjQzMTUgNjAgMCA0Ni41Njg1IDAgMzBaXCJcbiAgICAgICAgZmlsbD1cIiMzQjU5OThcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMzMuMTI2OSA0Ny42MzkzVjMxLjMxNzhIMzcuNjMyNEwzOC4yMjk1IDI1LjY5MzNIMzMuMTI2OUwzMy4xMzQ2IDIyLjg3ODFDMzMuMTM0NiAyMS40MTEyIDMzLjI3NCAyMC42MjUxIDM1LjM4MSAyMC42MjUxSDM4LjE5NzZWMTVIMzMuNjkxNUMyOC4yNzg5IDE1IDI2LjM3MzggMTcuNzI4NSAyNi4zNzM4IDIyLjMxN1YyNS42OTM5SDIzVjMxLjMxODRIMjYuMzczOFY0Ny42MzkzSDMzLjEyNjlaXCJcbiAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgIC8+XG4gICAgPC9nPixcbiAgICB7XG4gICAgICB2aWV3Qm94OiAnMCAwIDYwIDYwJyxcbiAgICB9XG4gICksXG4gIFtJQ09OUy5SRURESVRdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTMwIDYwQzQ2LjU2ODUgNjAgNjAgNDYuNTY4NSA2MCAzMEM2MCAxMy40MzE1IDQ2LjU2ODUgMCAzMCAwQzEzLjQzMTUgMCAwIDEzLjQzMTUgMCAzMEMwIDQ2LjU2ODUgMTMuNDMxNSA2MCAzMCA2MFpcIlxuICAgICAgICBmaWxsPVwiI0ZGNTcwMFwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk01MiAyOS42MDk0QzUyIDI2Ljg2NTYgNDkuNzU4MSAyNC42MzMxIDQ3LjAwMTcgMjQuNjMzMUM0NS43NDExIDI0LjYzMzEgNDQuNTkwOCAyNS4xMDQ1IDQzLjcxMDggMjUuODc0MUM0MC41NzkxIDIzLjg3MTIgMzYuNDM4OSAyMi41Njc5IDMxLjg1NCAyMi4zMzk4TDM0LjI2NDkgMTQuNzUzTDQwLjg0MyAxNi4yOTUyQzQwLjkxNjcgMTguNTA1MyA0Mi43NDA4IDIwLjI4MjQgNDQuOTc5MyAyMC4yODI0QzQ3LjI2MzYgMjAuMjgyNCA0OS4xMjI0IDE4LjQzMjMgNDkuMTIyNCAxNi4xNTc1QzQ5LjEyMjQgMTMuODgyNyA0Ny4yNjMyIDEyLjAzMjYgNDQuOTc5MyAxMi4wMzI2QzQzLjMxOTkgMTIuMDMyNiA0MS44ODk2IDEzLjAxMDkgNDEuMjI4IDE0LjQxNTlMMzMuODM2NCAxMi42ODQ1QzMzLjM0NjggMTIuNTcwMiAzMi44NDk0IDEyLjg1MDkgMzIuNjk5NCAxMy4zMjg2TDI5Ljg0NTIgMjIuMzEwMUMyNC45NjM4IDIyLjQwNTUgMjAuNTM1MiAyMy43MTggMTcuMjE2NCAyNS44MDg0QzE2LjM0NjIgMjUuMDc2OCAxNS4yMjI4IDI0LjYzMzEgMTMuOTk4MyAyNC42MzMxQzExLjI0MTkgMjQuNjMzNiA5IDI2Ljg2NTYgOSAyOS42MDk0QzkgMzEuMzU2MyA5LjkxMDgyIDMyLjg5MjIgMTEuMjgxOSAzMy43Nzk1QzExLjIxMjEgMzQuMjI1MSAxMS4xNzQ0IDM0LjY3NjYgMTEuMTc0NCAzNS4xMzM0QzExLjE3NDQgNDIuMjA5NCAxOS44MDM3IDQ3Ljk2NjQgMzAuNDEyIDQ3Ljk2NjRDNDEuMDE5NCA0Ny45NjY0IDQ5LjY0OTcgNDIuMjA5NCA0OS42NDk3IDM1LjEzMzRDNDkuNjQ5NyAzNC43MDk3IDQ5LjYxNzQgMzQuMjkwOCA0OS41NTczIDMzLjg3NjNDNTEuMDE1OSAzMy4wMDg0IDUyIDMxLjQyMzUgNTIgMjkuNjA5NFpNNDQuOTc5MiAxMy45NTAzQzQ2LjIwMjIgMTMuOTUwMyA0Ny4xOTcxIDE0Ljk0MTMgNDcuMTk3MSAxNi4xNTlDNDcuMTk3MSAxNy4zNzY2IDQ2LjIwMjIgMTguMzY3MSA0NC45NzkyIDE4LjM2NzFDNDMuNzU1NiAxOC4zNjcxIDQyLjc2MDcgMTcuMzc2NiA0Mi43NjA3IDE2LjE1OUM0Mi43NjA3IDE0Ljk0MTMgNDMuNzU1NiAxMy45NTAzIDQ0Ljk3OTIgMTMuOTUwM1pNMTAuOTI1MyAyOS42MDk0QzEwLjkyNTMgMjcuOTIyOCAxMi4zMDM3IDI2LjU0OTkgMTMuOTk3OCAyNi41NDk5QzE0LjU3IDI2LjU0OTkgMTUuMTA0NiAyNi43MSAxNS41NjQ0IDI2Ljk4MjlDMTMuODQ5OCAyOC4zNjk5IDEyLjU2NjYgMzAuMDAyIDExLjg0MyAzMS43ODZDMTEuMjc2NiAzMS4yMzA5IDEwLjkyNTMgMzAuNDYwOCAxMC45MjUzIDI5LjYwOTRaTTQ3LjcyNDQgMzUuMTM0NEM0Ny43MjQ0IDQxLjE1MjcgMzkuOTU3IDQ2LjA1MDIgMzAuNDEyIDQ2LjA1MDJDMjAuODY1NSA0Ni4wNTAyIDEzLjA5OTYgNDEuMTUzMiAxMy4wOTk2IDM1LjEzNDRDMTMuMDk5NiAzNC45MjIzIDEzLjExMTMgMzQuNzEzMSAxMy4xMjk5IDM0LjUwNDRDMTMuMTg4MSAzMy44NjQ3IDEzLjMzNjYgMzMuMjM5MSAxMy41NjI4IDMyLjYzMjlDMTQuMTQ5NyAzMS4wNjE1IDE1LjI3NTUgMjkuNjE5NiAxNi44MTMyIDI4LjM5MDJDMTcuMzA1MyAyNy45OTY3IDE3LjgzODQgMjcuNjI1IDE4LjQwOTEgMjcuMjc4MUMyMS41MjQyIDI1LjM4NTIgMjUuNzU0OCAyNC4yMTc3IDMwLjQxMiAyNC4yMTc3QzM1LjEzNjYgMjQuMjE3NyAzOS40MjQ0IDI1LjQxODMgNDIuNTQ5NyAyNy4zNTk5QzQzLjEyMTkgMjcuNzE0NSA0My42NTM2IDI4LjA5NDkgNDQuMTQzMiAyOC40OTczQzQ1LjYxOTggMjkuNzA4MSA0Ni42OTkyIDMxLjExOTkgNDcuMjY4NSAzMi42NTQ4QzQ3LjQ5MjggMzMuMjYyOSA0Ny42NDEzIDMzLjg4OSA0Ny42OTcgMzQuNTMwMkM0Ny43MTQxIDM0LjczMTEgNDcuNzI0NCAzNC45MzE1IDQ3LjcyNDQgMzUuMTM0NFpNNDkuMDMgMzEuOTAwM0M0OC4zMjY5IDMwLjA5NzkgNDcuMDQ2NyAyOC40NDkyIDQ1LjMzMyAyNy4wNDQ3QzQ1LjgxMzggMjYuNzMyOCA0Ni4zODY1IDI2LjU0OTkgNDcuMDAyMiAyNi41NDk5QzQ4LjY5NjggMjYuNTQ5OSA1MC4wNzUyIDI3LjkyMjMgNTAuMDc1MiAyOS42MDk0QzUwLjA3NDIgMzAuNTIxNiA0OS42Njg3IDMxLjMzOTkgNDkuMDMgMzEuOTAwM1pcIlxuICAgICAgICBmaWxsPVwid2hpdGVcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMjcuMDIxNCAzMi44MjdDMjcuMDIxNCAzMS4yMTA5IDI1LjcwNSAyOS44NTUgMjQuMDgxMyAyOS44NTVDMjIuNDU4IDI5Ljg1NSAyMS4wOTY3IDMxLjIxMDkgMjEuMDk2NyAzMi44MjdDMjEuMDk2NyAzNC40NDI2IDIyLjQ1ODUgMzUuNzU0NyAyNC4wODEzIDM1Ljc1NDdDMjUuNzA1IDM1Ljc1MjcgMjcuMDIxNCAzNC40NDI2IDI3LjAyMTQgMzIuODI3WlwiXG4gICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0zNi45NjMyIDI5Ljg1NDFDMzUuMzQgMjkuODU0MSAzMy45NzQyIDMxLjIwOTQgMzMuOTc0MiAzMi44MjU1QzMzLjk3NDIgMzQuNDQyMSAzNS4zNCAzNS43NTMyIDM2Ljk2MzIgMzUuNzUzMkMzOC41ODY5IDM1Ljc1MzIgMzkuOTA0MyAzNC40NDMxIDM5LjkwNDMgMzIuODI1NUMzOS45MDMzIDMxLjIwODQgMzguNTg2OSAyOS44NTQxIDM2Ljk2MzIgMjkuODU0MVpcIlxuICAgICAgICBmaWxsPVwid2hpdGVcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMzYuMTMyNSAzOS45MjI0QzM1LjA0MzQgNDEuMDA1MyAzMy4yMDk1IDQxLjUzMTIgMzAuNTIyNSA0MS41MzEyQzMwLjUxNDIgNDEuNTMxMiAzMC41MDY4IDQxLjUzMzYgMzAuNDk5IDQxLjUzMzZDMzAuNDkwNyA0MS41MzM2IDMwLjQ4MzkgNDEuNTMxMiAzMC40NzYxIDQxLjUzMTJDMjcuNzg4NiA0MS41MzEyIDI1Ljk1NDIgNDEuMDA1MyAyNC44NjY1IDM5LjkyMjRDMjQuNDkwOCAzOS41NDc4IDIzLjg4MDkgMzkuNTQ3OCAyMy41MDUyIDM5LjkyMjRDMjMuMTI4OSA0MC4yOTc0IDIzLjEyODkgNDAuOTA0MSAyMy41MDUyIDQxLjI3NzJDMjQuOTcxNiA0Mi43Mzc3IDI3LjI1MiA0My40NDg0IDMwLjQ3NjEgNDMuNDQ4NEMzMC40ODQ0IDQzLjQ0ODQgMzAuNDkxMiA0My40NDU1IDMwLjQ5OSA0My40NDU1QzMwLjUwNjggNDMuNDQ1NSAzMC41MTQyIDQzLjQ0ODQgMzAuNTIyNSA0My40NDg0QzMzLjc0NiA0My40NDg0IDM2LjAyNyA0Mi43Mzc3IDM3LjQ5NDggNDEuMjc4MkMzNy44NzE2IDQwLjkwMzEgMzcuODcxNiA0MC4yOTcgMzcuNDk1OCAzOS45MjMzQzM3LjExOTEgMzkuNTQ4NyAzNi41MDkzIDM5LjU0ODcgMzYuMTMyNSAzOS45MjI0WlwiXG4gICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAvPlxuICAgIDwvZz4sXG4gICAge1xuICAgICAgdmlld0JveDogJzAgMCA2MCA2MCcsXG4gICAgfVxuICApLFxuICBbSUNPTlMuVEVMRUdSQU1dOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTMwIDYwQzQ2LjU2ODUgNjAgNjAgNDYuNTY4NSA2MCAzMEM2MCAxMy40MzE1IDQ2LjU2ODUgMCAzMCAwQzEzLjQzMTUgMCAwIDEzLjQzMTUgMCAzMEMwIDQ2LjU2ODUgMTMuNDMxNSA2MCAzMCA2MFpcIlxuICAgICAgICBmaWxsPVwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0yNC41IDQzLjc1QzIzLjUyODEgNDMuNzUgMjMuNjkzMyA0My4zODMgMjMuMzU4MSA0Mi40NTc2TDIwLjUgMzMuMDUxNUw0Mi41IDIwXCJcbiAgICAgICAgZmlsbD1cIiNDOERBRUFcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMjQuNSA0My43NUMyNS4yNSA0My43NSAyNS41ODE0IDQzLjQwNyAyNiA0M0wzMCAzOS4xMTA1TDI1LjAxMDUgMzYuMTAxN1wiXG4gICAgICAgIGZpbGw9XCIjQTlDOUREXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTI1LjAxIDM2LjEwMjVMMzcuMSA0NS4wMzQ3QzM4LjQ3OTYgNDUuNzk2IDM5LjQ3NTMgNDUuNDAxOCAzOS44MTkgNDMuNzUzOUw0NC43NDAyIDIwLjU2MzFDNDUuMjQ0MSAxOC41NDMxIDQzLjk3MDIgMTcuNjI2OSA0Mi42NTA0IDE4LjIyNjFMMTMuNzUyOSAyOS4zNjg4QzExLjc4MDQgMzAuMTYgMTEuNzkxOSAzMS4yNjA1IDEzLjM5MzMgMzEuNzUwOEwyMC44MDkxIDM0LjA2NTRMMzcuOTc3MyAyMy4yMzQxQzM4Ljc4NzggMjIuNzQyNyAzOS41MzE3IDIzLjAwNjkgMzguOTIxMSAyMy41NDg3XCJcbiAgICAgICAgZmlsbD1cInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgLz5cbiAgICAgIDxkZWZzPlxuICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwYWludDBfbGluZWFyXCIgeDE9XCIyMi41MDNcIiB5MT1cIjIuNTAyXCIgeDI9XCI3LjUwM1wiIHkyPVwiMzcuNVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxuICAgICAgICAgIDxzdG9wIHN0b3BDb2xvcj1cIiMzN0FFRTJcIiAvPlxuICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjFcIiBzdG9wQ29sb3I9XCIjMUU5NkM4XCIgLz5cbiAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgPGxpbmVhckdyYWRpZW50XG4gICAgICAgICAgaWQ9XCJwYWludDFfbGluZWFyXCJcbiAgICAgICAgICB4MT1cIjI2LjI0NDVcIlxuICAgICAgICAgIHkxPVwiMzEuODQyOFwiXG4gICAgICAgICAgeDI9XCIyOS40NDk5XCJcbiAgICAgICAgICB5Mj1cIjQyLjIxMTVcIlxuICAgICAgICAgIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3RvcCBzdG9wQ29sb3I9XCIjRUZGN0ZDXCIgLz5cbiAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIxXCIgc3RvcENvbG9yPVwid2hpdGVcIiAvPlxuICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxuICAgICAgPC9kZWZzPlxuICAgIDwvZz4sXG4gICAge1xuICAgICAgdmlld0JveDogJzAgMCA2MCA2MCcsXG4gICAgfVxuICApLFxuICBbSUNPTlMuTElOS0VESU5dOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTAgMzBDMCAxMy40MzE1IDEzLjQzMTUgMCAzMCAwQzQ2LjU2ODUgMCA2MCAxMy40MzE1IDYwIDMwQzYwIDQ2LjU2ODUgNDYuNTY4NSA2MCAzMCA2MEMxMy40MzE1IDYwIDAgNDYuNTY4NSAwIDMwWlwiXG4gICAgICAgIGZpbGw9XCIjMDA3N0I1XCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTIxLjY0ODQgMTguNTI4M0MyMS42MDQyIDE2LjUyNTUgMjAuMTcyMSAxNSAxNy44NDYyIDE1QzE1LjUyMDUgMTUgMTQgMTYuNTI1NSAxNCAxOC41MjgzQzE0IDIwLjQ4OTcgMTUuNDc1NiAyMi4wNTkyIDE3Ljc1ODEgMjIuMDU5MkgxNy44MDE1QzIwLjE3MjEgMjIuMDU5MiAyMS42NDg0IDIwLjQ4OTcgMjEuNjQ4NCAxOC41MjgzWk0yMS4yMDA3IDI0Ljg0NzNIMTQuNDAyMVY0NS4yNzQ0SDIxLjIwMDdWMjQuODQ3M1pNMzcuODkxNCAyNC4zNjc3QzQyLjM2NTIgMjQuMzY3NyA0NS43MTkyIDI3LjI4NzggNDUuNzE5MiAzMy41NjIxTDQ1LjcxOSA0NS4yNzQ1SDM4LjkyMDdWMzQuMzQ1OUMzOC45MjA3IDMxLjYwMSAzNy45MzY4IDI5LjcyNzggMzUuNDc1NiAyOS43Mjc4QzMzLjU5NzQgMjkuNzI3OCAzMi40Nzg1IDMwLjk5MDYgMzEuOTg3MyAzMi4yMTAyQzMxLjgwNzQgMzIuNjQ3MyAzMS43NjM0IDMzLjI1NjMgMzEuNzYzNCAzMy44NjY4VjQ1LjI3NUgyNC45NjM5QzI0Ljk2MzkgNDUuMjc1IDI1LjA1MzUgMjYuNzY0NiAyNC45NjM5IDI0Ljg0NzlIMzEuNzYzNFYyNy43NDEyQzMyLjY2NTggMjYuMzUwMyAzNC4yODE3IDI0LjM2NzcgMzcuODkxNCAyNC4zNjc3WlwiXG4gICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAvPlxuICAgIDwvZz4sXG4gICAge1xuICAgICAgdmlld0JveDogJzAgMCA2MCA2MCcsXG4gICAgfVxuICApLFxuICBbSUNPTlMuRU1CRURdOiBidWlsZEljb24oXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTAgMzBDMCAxMy40MzE1IDEzLjQzMTUgMCAzMCAwQzQ2LjU2ODUgMCA2MCAxMy40MzE1IDYwIDMwQzYwIDQ2LjU2ODUgNDYuNTY4NSA2MCAzMCA2MEMxMy40MzE1IDYwIDAgNDYuNTY4NSAwIDMwWlwiXG4gICAgICAgIGZpbGw9XCIjZWVlXCJcbiAgICAgIC8+XG4gICAgICA8ZyB0cmFuc2Zvcm09XCJzY2FsZSgxLjIpXCI+XG4gICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxNSAxOCA5IDEyIDE1IDZcIiBzdHJva2U9XCJibGFja1wiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2LDEyKVwiIHN0cm9rZVdpZHRoPVwiMlwiIC8+XG4gICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI5IDE4IDE1IDEyIDkgNlwiIHN0cm9rZT1cImJsYWNrXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIwLDEyKVwiIHN0cm9rZVdpZHRoPVwiMlwiIC8+XG4gICAgICA8L2c+XG4gICAgPC9nPixcbiAgICB7XG4gICAgICB2aWV3Qm94OiAnMCAwIDYwIDYwJyxcbiAgICB9XG4gICksXG4gIFtJQ09OUy5NT1JFXTogYnVpbGRJY29uKFxuICAgIDxnPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0wIDMwQzAgMTMuNDMxNSAxMy40MzE1IDAgMzAgMEM0Ni41Njg1IDAgNjAgMTMuNDMxNSA2MCAzMEM2MCA0Ni41Njg1IDQ2LjU2ODUgNjAgMzAgNjBDMTMuNDMxNSA2MCAwIDQ2LjU2ODUgMCAzMFpcIlxuICAgICAgICBmaWxsPVwiI2VlZVwiXG4gICAgICAvPlxuICAgICAgPGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIzMFwiIHI9XCIyXCIgc3Ryb2tlPVwiYmxhY2tcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgPGNpcmNsZSBjeD1cIjMwXCIgY3k9XCIzMFwiIHI9XCIyXCIgc3Ryb2tlPVwiYmxhY2tcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgPGNpcmNsZSBjeD1cIjQwXCIgY3k9XCIzMFwiIHI9XCIyXCIgc3Ryb2tlPVwiYmxhY2tcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgIDwvZz4sXG4gICAge1xuICAgICAgdmlld0JveDogJzAgMCA2MCA2MCcsXG4gICAgfVxuICApLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUpBO0FBQUE7QUFDQTtBQXNCQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBSUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBUUE7QUFBQTtBQUdBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUdBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBS0E7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBUUE7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQURBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/icon-custom.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/icon.jsx": -/*!***************************************!*\ - !*** ../ui/component/common/icon.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/tooltip */ \"../ui/component/common/tooltip.jsx\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _icon_custom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon-custom */ \"../ui/component/common/icon-custom.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n // It would be nice to standardize this somehow\n// These are copied from `scss/vars`, can they both come from the same source?\n\nvar RED_COLOR = '#e2495e';\nvar GREEN_COLOR = '#44b098';\nvar BLUE_COLOR = '#49b2e2';\n\nvar IconComponent = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(IconComponent, _React$PureComponent);\n\n function IconComponent() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, IconComponent);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(IconComponent)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"getTooltip\", function (icon) {\n switch (icon) {\n case constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FEATURED\"]:\n return __('Featured content. Earn rewards for watching.');\n\n case constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOAD\"]:\n return __('This file is in your library.');\n\n case constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBSCRIBE\"]:\n return __('You are subscribed to this channel.');\n\n case constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"]:\n return __('Your settings.');\n\n default:\n return null;\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getIconColor\", function (color) {\n switch (color) {\n case 'red':\n return RED_COLOR;\n\n case 'green':\n return GREEN_COLOR;\n\n case 'blue':\n return BLUE_COLOR;\n\n default:\n return color;\n }\n });\n\n return _this;\n }\n\n _createClass(IconComponent, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n icon = _this$props.icon,\n tooltip = _this$props.tooltip,\n customTooltipText = _this$props.customTooltipText,\n iconColor = _this$props.iconColor,\n size = _this$props.size,\n className = _this$props.className,\n _this$props$sectionIc = _this$props.sectionIcon,\n sectionIcon = _this$props$sectionIc === void 0 ? false : _this$props$sectionIc;\n var Icon = _icon_custom__WEBPACK_IMPORTED_MODULE_4__[\"icons\"][this.props.icon];\n\n if (!Icon) {\n return null;\n }\n\n var color;\n\n if (iconColor) {\n color = this.getIconColor(iconColor);\n }\n\n var iconSize = size || 16;\n var tooltipText;\n\n if (tooltip) {\n tooltipText = customTooltipText || this.getTooltip(icon);\n }\n\n var component = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Icon, {\n size: sectionIcon ? 20 : iconSize,\n className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(\"icon icon--\".concat(icon), className),\n color: color\n });\n var inner = sectionIcon ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", {\n className: \"icon__wrapper icon__wrapper--\".concat(icon)\n }, component) : component;\n return tooltipText ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_tooltip__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n label: tooltipText\n }, inner) : inner;\n }\n }]);\n\n return IconComponent;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (IconComponent);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9pY29uLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2ljb24uanN4PzExNTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnY29tcG9uZW50L2NvbW1vbi90b29sdGlwJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgaWNvbnMgfSBmcm9tICcuL2ljb24tY3VzdG9tJztcblxuLy8gSXQgd291bGQgYmUgbmljZSB0byBzdGFuZGFyZGl6ZSB0aGlzIHNvbWVob3dcbi8vIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBgc2Nzcy92YXJzYCwgY2FuIHRoZXkgYm90aCBjb21lIGZyb20gdGhlIHNhbWUgc291cmNlP1xuY29uc3QgUkVEX0NPTE9SID0gJyNlMjQ5NWUnO1xuY29uc3QgR1JFRU5fQ09MT1IgPSAnIzQ0YjA5OCc7XG5jb25zdCBCTFVFX0NPTE9SID0gJyM0OWIyZTInO1xuXG50eXBlIFByb3BzID0ge1xuICBpY29uOiBzdHJpbmcsXG4gIHRvb2x0aXA/OiBib29sZWFuLFxuICBjdXN0b21Ub29sdGlwVGV4dD86IHN0cmluZyxcbiAgaWNvbkNvbG9yPzogc3RyaW5nLFxuICBzaXplPzogbnVtYmVyLFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIHNlY3Rpb25JY29uPzogYm9vbGVhbixcbn07XG5cbmNsYXNzIEljb25Db21wb25lbnQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIGdldFRvb2x0aXAgPSAoaWNvbjogc3RyaW5nKSA9PiB7XG4gICAgc3dpdGNoIChpY29uKSB7XG4gICAgICBjYXNlIElDT05TLkZFQVRVUkVEOlxuICAgICAgICByZXR1cm4gX18oJ0ZlYXR1cmVkIGNvbnRlbnQuIEVhcm4gcmV3YXJkcyBmb3Igd2F0Y2hpbmcuJyk7XG4gICAgICBjYXNlIElDT05TLkRPV05MT0FEOlxuICAgICAgICByZXR1cm4gX18oJ1RoaXMgZmlsZSBpcyBpbiB5b3VyIGxpYnJhcnkuJyk7XG4gICAgICBjYXNlIElDT05TLlNVQlNDUklCRTpcbiAgICAgICAgcmV0dXJuIF9fKCdZb3UgYXJlIHN1YnNjcmliZWQgdG8gdGhpcyBjaGFubmVsLicpO1xuICAgICAgY2FzZSBJQ09OUy5TRVRUSU5HUzpcbiAgICAgICAgcmV0dXJuIF9fKCdZb3VyIHNldHRpbmdzLicpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGdldEljb25Db2xvciA9IChjb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncmVkJzpcbiAgICAgICAgcmV0dXJuIFJFRF9DT0xPUjtcbiAgICAgIGNhc2UgJ2dyZWVuJzpcbiAgICAgICAgcmV0dXJuIEdSRUVOX0NPTE9SO1xuICAgICAgY2FzZSAnYmx1ZSc6XG4gICAgICAgIHJldHVybiBCTFVFX0NPTE9SO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpY29uLCB0b29sdGlwLCBjdXN0b21Ub29sdGlwVGV4dCwgaWNvbkNvbG9yLCBzaXplLCBjbGFzc05hbWUsIHNlY3Rpb25JY29uID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgSWNvbiA9IGljb25zW3RoaXMucHJvcHMuaWNvbl07XG5cbiAgICBpZiAoIUljb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjb2xvcjtcbiAgICBpZiAoaWNvbkNvbG9yKSB7XG4gICAgICBjb2xvciA9IHRoaXMuZ2V0SWNvbkNvbG9yKGljb25Db2xvcik7XG4gICAgfVxuXG4gICAgY29uc3QgaWNvblNpemUgPSBzaXplIHx8IDE2O1xuXG4gICAgbGV0IHRvb2x0aXBUZXh0O1xuICAgIGlmICh0b29sdGlwKSB7XG4gICAgICB0b29sdGlwVGV4dCA9IGN1c3RvbVRvb2x0aXBUZXh0IHx8IHRoaXMuZ2V0VG9vbHRpcChpY29uKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSAoXG4gICAgICA8SWNvbiBzaXplPXtzZWN0aW9uSWNvbiA/IDIwIDogaWNvblNpemV9IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhgaWNvbiBpY29uLS0ke2ljb259YCwgY2xhc3NOYW1lKX0gY29sb3I9e2NvbG9yfSAvPlxuICAgICk7XG5cbiAgICBjb25zdCBpbm5lciA9IHNlY3Rpb25JY29uID8gPHNwYW4gY2xhc3NOYW1lPXtgaWNvbl9fd3JhcHBlciBpY29uX193cmFwcGVyLS0ke2ljb259YH0+e2NvbXBvbmVudH08L3NwYW4+IDogY29tcG9uZW50O1xuXG4gICAgcmV0dXJuIHRvb2x0aXBUZXh0ID8gPFRvb2x0aXAgbGFiZWw9e3Rvb2x0aXBUZXh0fT57aW5uZXJ9PC9Ub29sdGlwPiA6IGlubmVyO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25Db21wb25lbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFXQTs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBVkE7OztBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7Ozs7Ozs7O0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTs7OztBQXhEQTtBQUNBO0FBMERBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/icon.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/lbc-symbol.jsx": -/*!*********************************************!*\ - !*** ../ui/component/common/lbc-symbol.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar LbcSymbol = function LbcSymbol() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"LBC\");\n}; // ℄\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (LbcSymbol);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9sYmMtc3ltYm9sLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL2xiYy1zeW1ib2wuanN4P2E0ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IExiY1N5bWJvbCA9ICgpID0+IDxzcGFuPkxCQzwvc3Bhbj47IC8vIOKEhFxuXG5leHBvcnQgZGVmYXVsdCBMYmNTeW1ib2w7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/lbc-symbol.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/loading-screen.jsx": -/*!*************************************************!*\ - !*** ../ui/component/common/loading-screen.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar LoadingScreen = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(LoadingScreen, _React$PureComponent);\n\n function LoadingScreen() {\n _classCallCheck(this, LoadingScreen);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(LoadingScreen).apply(this, arguments));\n }\n\n _createClass(LoadingScreen, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n status = _this$props.status,\n spinner = _this$props.spinner;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"content__loading\"\n }, spinner && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n light: true\n }), status && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"content__loading-text\"\n }, status));\n }\n }]);\n\n return LoadingScreen;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(LoadingScreen, \"defaultProps\", {\n spinner: true\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (LoadingScreen);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9sb2FkaW5nLXNjcmVlbi5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9sb2FkaW5nLXNjcmVlbi5qc3g/OGYyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcblxudHlwZSBQcm9wcyA9IHtcbiAgc3RhdHVzPzogc3RyaW5nLFxuICBzcGlubmVyOiBib29sZWFuLFxufTtcblxuY2xhc3MgTG9hZGluZ1NjcmVlbiBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBzcGlubmVyOiB0cnVlLFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgc3Bpbm5lciB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50X19sb2FkaW5nXCI+XG4gICAgICAgIHtzcGlubmVyICYmIDxTcGlubmVyIGxpZ2h0IC8+fVxuICAgICAgICB7c3RhdHVzICYmIDxzcGFuIGNsYXNzTmFtZT1cImNvbnRlbnRfX2xvYWRpbmctdGV4dFwiPntzdGF0dXN9PC9zcGFuPn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9hZGluZ1NjcmVlbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFNQTs7Ozs7Ozs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7Ozs7QUFiQTtBQUNBO0FBREE7QUFFQTtBQURBO0FBQ0E7QUFjQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/loading-screen.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/markdown-preview-internal.jsx": -/*!************************************************************!*\ - !*** ../ui/component/common/markdown-preview-internal.jsx ***! - \************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var remark__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! remark */ \"../node_modules/remark/index.js\");\n/* harmony import */ var remark__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(remark__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var remark_attr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! remark-attr */ \"../node_modules/remark-attr/dist/index.js\");\n/* harmony import */ var remark_attr__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(remark_attr__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var strip_markdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! strip-markdown */ \"../node_modules/strip-markdown/index.js\");\n/* harmony import */ var strip_markdown__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(strip_markdown__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var remark_emoji__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! remark-emoji */ \"../node_modules/remark-emoji/index.js\");\n/* harmony import */ var remark_emoji__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(remark_emoji__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var remark_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! remark-react */ \"../node_modules/remark-react/index.js\");\n/* harmony import */ var remark_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(remark_react__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_externalLink__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/externalLink */ \"../ui/component/externalLink/index.js\");\n/* harmony import */ var hast_util_sanitize_lib_github_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! hast-util-sanitize/lib/github.json */ \"../node_modules/hast-util-sanitize/lib/github.json\");\nvar hast_util_sanitize_lib_github_json__WEBPACK_IMPORTED_MODULE_7___namespace = /*#__PURE__*/__webpack_require__.t(/*! hast-util-sanitize/lib/github.json */ \"../node_modules/hast-util-sanitize/lib/github.json\", 1);\n/* harmony import */ var util_remark_lbry__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! util/remark-lbry */ \"../ui/util/remark-lbry.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_10__);\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SimpleText = function SimpleText(props) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", null, props.children);\n};\n\nvar SimpleLink = function SimpleLink(props) {\n var title = props.title,\n children = props.children;\n var href = props.href;\n\n if ( true && href && href.startsWith('lbry://')) {\n href = Object(util_url__WEBPACK_IMPORTED_MODULE_10__[\"formatLbryUrlForWeb\"])(href); // using Link after formatLbryUrl to handle \"/\" vs \"#/\"\n // for web and desktop scenarios respectively\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react_router_dom__WEBPACK_IMPORTED_MODULE_9__[\"Link\"], {\n title: title,\n to: href,\n onClick: function onClick(e) {\n e.stopPropagation();\n }\n }, children);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"a\", {\n href: href,\n title: title\n }, children);\n}; // Use github sanitation schema\n\n\nvar schema = _objectSpread({}, hast_util_sanitize_lib_github_json__WEBPACK_IMPORTED_MODULE_7__); // Extend sanitation schema to support lbry protocol\n\n\nschema.protocols.href.push('lbry');\nschema.attributes.a.push('embed');\n\nvar MarkdownPreview = function MarkdownPreview(props) {\n var content = props.content,\n strip = props.strip,\n promptLinks = props.promptLinks;\n var remarkOptions = {\n sanitize: schema,\n fragment: react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"],\n remarkReactComponents: {\n a: promptLinks ? component_externalLink__WEBPACK_IMPORTED_MODULE_6__[\"default\"] : SimpleLink,\n // Workaraund of remarkOptions.Fragment\n div: react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"]\n }\n };\n var remarkAttrOpts = {\n scope: 'extended',\n elements: ['link'],\n extend: {\n link: ['embed']\n },\n defaultValue: true\n }; // Strip all content and just render text\n\n if (strip) {\n // Remove new lines and extra space\n remarkOptions.remarkReactComponents.p = SimpleText;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: \"markdown-preview\"\n }, remark__WEBPACK_IMPORTED_MODULE_1___default()().use(strip_markdown__WEBPACK_IMPORTED_MODULE_3___default.a).use(remark_react__WEBPACK_IMPORTED_MODULE_5___default.a, remarkOptions).processSync(content).contents);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"markdown-preview\"\n }, remark__WEBPACK_IMPORTED_MODULE_1___default()().use(remark_attr__WEBPACK_IMPORTED_MODULE_2___default.a, remarkAttrOpts) // Remark plugins for lbry urls\n // Note: The order is important\n .use(util_remark_lbry__WEBPACK_IMPORTED_MODULE_8__[\"formatedLinks\"]).use(util_remark_lbry__WEBPACK_IMPORTED_MODULE_8__[\"inlineLinks\"]) // Emojis\n .use(remark_emoji__WEBPACK_IMPORTED_MODULE_4___default.a).use(remark_react__WEBPACK_IMPORTED_MODULE_5___default.a, remarkOptions).processSync(content).contents);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MarkdownPreview);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3LWludGVybmFsLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL21hcmtkb3duLXByZXZpZXctaW50ZXJuYWwuanN4PzI3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCByZW1hcmsgZnJvbSAncmVtYXJrJztcbmltcG9ydCByZW1hcmtBdHRyIGZyb20gJ3JlbWFyay1hdHRyJztcbmltcG9ydCByZW1hcmtTdHJpcCBmcm9tICdzdHJpcC1tYXJrZG93bic7XG5pbXBvcnQgcmVtYXJrRW1vamkgZnJvbSAncmVtYXJrLWVtb2ppJztcbmltcG9ydCByZWFjdFJlbmRlcmVyIGZyb20gJ3JlbWFyay1yZWFjdCc7XG5pbXBvcnQgRXh0ZXJuYWxMaW5rIGZyb20gJ2NvbXBvbmVudC9leHRlcm5hbExpbmsnO1xuaW1wb3J0IGRlZmF1bHRTY2hlbWEgZnJvbSAnaGFzdC11dGlsLXNhbml0aXplL2xpYi9naXRodWIuanNvbic7XG5pbXBvcnQgeyBmb3JtYXRlZExpbmtzLCBpbmxpbmVMaW5rcyB9IGZyb20gJ3V0aWwvcmVtYXJrLWxicnknO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgZm9ybWF0TGJyeVVybEZvcldlYiB9IGZyb20gJ3V0aWwvdXJsJztcblxudHlwZSBTaW1wbGVUZXh0UHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuTm9kZSxcbn07XG5cbnR5cGUgU2ltcGxlTGlua1Byb3BzID0ge1xuICBocmVmPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgY2hpbGRyZW4/OiBSZWFjdC5Ob2RlLFxufTtcblxudHlwZSBNYXJrZG93blByb3BzID0ge1xuICBzdHJpcD86IGJvb2xlYW4sXG4gIGNvbnRlbnQ6ID9zdHJpbmcsXG4gIHByb21wdExpbmtzPzogYm9vbGVhbixcbn07XG5cbmNvbnN0IFNpbXBsZVRleHQgPSAocHJvcHM6IFNpbXBsZVRleHRQcm9wcykgPT4ge1xuICByZXR1cm4gPHNwYW4+e3Byb3BzLmNoaWxkcmVufTwvc3Bhbj47XG59O1xuXG5jb25zdCBTaW1wbGVMaW5rID0gKHByb3BzOiBTaW1wbGVMaW5rUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0aXRsZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICBsZXQgeyBocmVmIH0gPSBwcm9wcztcbiAgaWYgKElTX1dFQiAmJiBocmVmICYmIGhyZWYuc3RhcnRzV2l0aCgnbGJyeTovLycpKSB7XG4gICAgaHJlZiA9IGZvcm1hdExicnlVcmxGb3JXZWIoaHJlZik7XG4gICAgLy8gdXNpbmcgTGluayBhZnRlciBmb3JtYXRMYnJ5VXJsIHRvIGhhbmRsZSBcIi9cIiB2cyBcIiMvXCJcbiAgICAvLyBmb3Igd2ViIGFuZCBkZXNrdG9wIHNjZW5hcmlvcyByZXNwZWN0aXZlbHlcbiAgICByZXR1cm4gKFxuICAgICAgPExpbmtcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICB0bz17aHJlZn1cbiAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9MaW5rPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSB0aXRsZT17dGl0bGV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKTtcbn07XG5cbi8vIFVzZSBnaXRodWIgc2FuaXRhdGlvbiBzY2hlbWFcbmNvbnN0IHNjaGVtYSA9IHsgLi4uZGVmYXVsdFNjaGVtYSB9O1xuXG4vLyBFeHRlbmQgc2FuaXRhdGlvbiBzY2hlbWEgdG8gc3VwcG9ydCBsYnJ5IHByb3RvY29sXG5zY2hlbWEucHJvdG9jb2xzLmhyZWYucHVzaCgnbGJyeScpO1xuc2NoZW1hLmF0dHJpYnV0ZXMuYS5wdXNoKCdlbWJlZCcpO1xuXG5jb25zdCBNYXJrZG93blByZXZpZXcgPSAocHJvcHM6IE1hcmtkb3duUHJvcHMpID0+IHtcbiAgY29uc3QgeyBjb250ZW50LCBzdHJpcCwgcHJvbXB0TGlua3MgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHJlbWFya09wdGlvbnM6IE9iamVjdCA9IHtcbiAgICBzYW5pdGl6ZTogc2NoZW1hLFxuICAgIGZyYWdtZW50OiBSZWFjdC5GcmFnbWVudCxcbiAgICByZW1hcmtSZWFjdENvbXBvbmVudHM6IHtcbiAgICAgIGE6IHByb21wdExpbmtzID8gRXh0ZXJuYWxMaW5rIDogU2ltcGxlTGluayxcbiAgICAgIC8vIFdvcmthcmF1bmQgb2YgcmVtYXJrT3B0aW9ucy5GcmFnbWVudFxuICAgICAgZGl2OiBSZWFjdC5GcmFnbWVudCxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHJlbWFya0F0dHJPcHRzID0ge1xuICAgIHNjb3BlOiAnZXh0ZW5kZWQnLFxuICAgIGVsZW1lbnRzOiBbJ2xpbmsnXSxcbiAgICBleHRlbmQ6IHsgbGluazogWydlbWJlZCddIH0sXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICB9O1xuXG4gIC8vIFN0cmlwIGFsbCBjb250ZW50IGFuZCBqdXN0IHJlbmRlciB0ZXh0XG4gIGlmIChzdHJpcCkge1xuICAgIC8vIFJlbW92ZSBuZXcgbGluZXMgYW5kIGV4dHJhIHNwYWNlXG4gICAgcmVtYXJrT3B0aW9ucy5yZW1hcmtSZWFjdENvbXBvbmVudHMucCA9IFNpbXBsZVRleHQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hcmtkb3duLXByZXZpZXdcIj5cbiAgICAgICAge1xuICAgICAgICAgIHJlbWFyaygpXG4gICAgICAgICAgICAudXNlKHJlbWFya1N0cmlwKVxuICAgICAgICAgICAgLnVzZShyZWFjdFJlbmRlcmVyLCByZW1hcmtPcHRpb25zKVxuICAgICAgICAgICAgLnByb2Nlc3NTeW5jKGNvbnRlbnQpLmNvbnRlbnRzXG4gICAgICAgIH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1hcmtkb3duLXByZXZpZXdcIj5cbiAgICAgIHtcbiAgICAgICAgcmVtYXJrKClcbiAgICAgICAgICAudXNlKHJlbWFya0F0dHIsIHJlbWFya0F0dHJPcHRzKVxuICAgICAgICAgIC8vIFJlbWFyayBwbHVnaW5zIGZvciBsYnJ5IHVybHNcbiAgICAgICAgICAvLyBOb3RlOiBUaGUgb3JkZXIgaXMgaW1wb3J0YW50XG4gICAgICAgICAgLnVzZShmb3JtYXRlZExpbmtzKVxuICAgICAgICAgIC51c2UoaW5saW5lTGlua3MpXG4gICAgICAgICAgLy8gRW1vamlzXG4gICAgICAgICAgLnVzZShyZW1hcmtFbW9qaSlcbiAgICAgICAgICAudXNlKHJlYWN0UmVuZGVyZXIsIHJlbWFya09wdGlvbnMpXG4gICAgICAgICAgLnByb2Nlc3NTeW5jKGNvbnRlbnQpLmNvbnRlbnRzXG4gICAgICB9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXJrZG93blByZXZpZXc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBcEJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSkE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFLQTtBQUhBO0FBQUE7QUF2Q0E7QUFDQTtBQXFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/markdown-preview-internal.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/markdown-preview.jsx": -/*!***************************************************!*\ - !*** ../ui/component/common/markdown-preview.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _markdown_preview_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./markdown-preview-internal */ \"../ui/component/common/markdown-preview-internal.jsx\");\n\n\n\nvar MarkdownPreview = function MarkdownPreview(props) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_markdown_preview_internal__WEBPACK_IMPORTED_MODULE_1__[\"default\"], props);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MarkdownPreview);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL21hcmtkb3duLXByZXZpZXcuanN4PzVhNzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1hcmtEb3duUHJldmlldyBmcm9tICcuL21hcmtkb3duLXByZXZpZXctaW50ZXJuYWwnO1xuXG5jb25zdCBNYXJrZG93blByZXZpZXcgPSBwcm9wcyA9PiB7XG4gIHJldHVybiA8TWFya0Rvd25QcmV2aWV3IHsuLi5wcm9wc30gLz47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXJrZG93blByZXZpZXc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/markdown-preview.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/nag.jsx": -/*!**************************************!*\ - !*** ../ui/component/common/nag.jsx ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Nag; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n\n\n\n\nfunction Nag(props) {\n var message = props.message,\n actionText = props.actionText,\n href = props.href,\n onClick = props.onClick,\n onClose = props.onClose,\n type = props.type,\n inline = props.inline;\n var buttonProps = onClick ? {\n onClick: onClick\n } : {\n href: href\n };\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('nag', {\n 'nag--helpful': type === 'helpful',\n 'nag--error': type === 'error',\n 'nag--inline': inline\n })\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"nag__message\"\n }, message), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('nag__button', {\n 'nag__button--helpful': type === 'helpful',\n 'nag__button--error': type === 'error'\n })\n }, buttonProps), actionText), onClose && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('nag__button nag__close', {\n 'nag__button--helpful': type === 'helpful',\n 'nag__button--error': type === 'error'\n }),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n onClick: onClose\n }));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9uYWcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9jb21tb24vbmFnLmpzeD8zZWNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbWVzc2FnZTogc3RyaW5nIHwgTm9kZSxcbiAgYWN0aW9uVGV4dDogc3RyaW5nLFxuICBocmVmPzogc3RyaW5nLFxuICB0eXBlPzogc3RyaW5nLFxuICBpbmxpbmU/OiBib29sZWFuLFxuICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcbiAgb25DbG9zZT86ICgpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOYWcocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgbWVzc2FnZSwgYWN0aW9uVGV4dCwgaHJlZiwgb25DbGljaywgb25DbG9zZSwgdHlwZSwgaW5saW5lIH0gPSBwcm9wcztcblxuICBjb25zdCBidXR0b25Qcm9wcyA9IG9uQ2xpY2sgPyB7IG9uQ2xpY2sgfSA6IHsgaHJlZiB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCduYWcnLCB7XG4gICAgICAgICduYWctLWhlbHBmdWwnOiB0eXBlID09PSAnaGVscGZ1bCcsXG4gICAgICAgICduYWctLWVycm9yJzogdHlwZSA9PT0gJ2Vycm9yJyxcbiAgICAgICAgJ25hZy0taW5saW5lJzogaW5saW5lLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJuYWdfX21lc3NhZ2VcIj57bWVzc2FnZX08L2Rpdj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCduYWdfX2J1dHRvbicsIHtcbiAgICAgICAgICAnbmFnX19idXR0b24tLWhlbHBmdWwnOiB0eXBlID09PSAnaGVscGZ1bCcsXG4gICAgICAgICAgJ25hZ19fYnV0dG9uLS1lcnJvcic6IHR5cGUgPT09ICdlcnJvcicsXG4gICAgICAgIH0pfVxuICAgICAgICB7Li4uYnV0dG9uUHJvcHN9XG4gICAgICA+XG4gICAgICAgIHthY3Rpb25UZXh0fVxuICAgICAgPC9CdXR0b24+XG4gICAgICB7b25DbG9zZSAmJiAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ25hZ19fYnV0dG9uIG5hZ19fY2xvc2UnLCB7XG4gICAgICAgICAgICAnbmFnX19idXR0b24tLWhlbHBmdWwnOiB0eXBlID09PSAnaGVscGZ1bCcsXG4gICAgICAgICAgICAnbmFnX19idXR0b24tLWVycm9yJzogdHlwZSA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICB9KX1cbiAgICAgICAgICBpY29uPXtJQ09OUy5SRU1PVkV9XG4gICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBT0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFXQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFOQTtBQVdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/common/nag.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/paginate.jsx": -/*!*******************************************!*\ - !*** ../ui/component/common/paginate.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var react_paginate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-paginate */ \"../node_modules/react-paginate/dist/index.js\");\n/* harmony import */ var react_paginate__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_paginate__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\nvar PAGINATE_PARAM = 'page';\n\nfunction Paginate(props) {\n var _props$totalPages = props.totalPages,\n totalPages = _props$totalPages === void 0 ? 1 : _props$totalPages,\n loading = props.loading,\n location = props.location,\n history = props.history,\n onPageChange = props.onPageChange;\n var search = location.search;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(''),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n textValue = _React$useState2[0],\n setTextValue = _React$useState2[1];\n\n var urlParams = new URLSearchParams(search);\n var currentPage = Number(urlParams.get(PAGINATE_PARAM)) || 1;\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n\n function handleChangePage(newPageNumber) {\n if (onPageChange) {\n onPageChange(newPageNumber);\n }\n\n if (currentPage !== newPageNumber) {\n var params = new URLSearchParams(search);\n params.set(PAGINATE_PARAM, newPageNumber.toString());\n history.push('?' + params.toString());\n }\n }\n\n function handlePaginateKeyUp() {\n var newPage = Number(textValue);\n\n if (newPage && newPage > 0 && newPage <= totalPages) {\n handleChangePage(newPage);\n }\n }\n\n return (// Hide the paginate controls if we are loading or there is only one page\n // It should still be rendered to trigger the onPageChange callback\n react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n style: totalPages <= 1 || loading ? {\n display: 'none'\n } : null,\n onSubmit: handlePaginateKeyUp\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed fieldgroup--paginate\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_paginate__WEBPACK_IMPORTED_MODULE_3___default.a, {\n pageCount: totalPages,\n pageRangeDisplayed: 2,\n previousLabel: \"\\u2039\",\n nextLabel: \"\\u203A\",\n activeClassName: \"pagination__item--selected\",\n pageClassName: \"pagination__item\",\n previousClassName: \"pagination__item pagination__item--previous\",\n nextClassName: \"pagination__item pagination__item--next\",\n breakClassName: \"pagination__item pagination__item--break\",\n marginPagesDisplayed: 2,\n onPageChange: function onPageChange(e) {\n return handleChangePage(e.selected + 1);\n },\n forcePage: currentPage - 1,\n initialPage: currentPage - 1,\n containerClassName: \"pagination\"\n })), !isMobile && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n value: textValue,\n onChange: function onChange(e) {\n return setTextValue(e.target.value);\n },\n className: \"paginate-channel\",\n label: __('Go to page:'),\n type: \"text\",\n name: \"paginate-file\"\n })))\n );\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_1__[\"withRouter\"])(Paginate));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9wYWdpbmF0ZS5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi9wYWdpbmF0ZS5qc3g/N2I1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBSZWFjdFBhZ2luYXRlIGZyb20gJ3JlYWN0LXBhZ2luYXRlJztcbmltcG9ydCB1c2VJc01vYmlsZSBmcm9tICdlZmZlY3RzL3VzZS1pcy1tb2JpbGUnO1xuXG5jb25zdCBQQUdJTkFURV9QQVJBTSA9ICdwYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgdG90YWxQYWdlczogbnVtYmVyLFxuICBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZyB9LFxuICBoaXN0b3J5OiB7IHB1c2g6IHN0cmluZyA9PiB2b2lkIH0sXG4gIG9uUGFnZUNoYW5nZT86IG51bWJlciA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gUGFnaW5hdGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdG90YWxQYWdlcyA9IDEsIGxvYWRpbmcsIGxvY2F0aW9uLCBoaXN0b3J5LCBvblBhZ2VDaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCB7IHNlYXJjaCB9ID0gbG9jYXRpb247XG4gIGNvbnN0IFt0ZXh0VmFsdWUsIHNldFRleHRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgY3VycmVudFBhZ2UgPSBOdW1iZXIodXJsUGFyYW1zLmdldChQQUdJTkFURV9QQVJBTSkpIHx8IDE7XG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlSXNNb2JpbGUoKTtcblxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VQYWdlKG5ld1BhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIGlmIChvblBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9uUGFnZUNoYW5nZShuZXdQYWdlTnVtYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFBhZ2UgIT09IG5ld1BhZ2VOdW1iZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgICAgIHBhcmFtcy5zZXQoUEFHSU5BVEVfUEFSQU0sIG5ld1BhZ2VOdW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICBoaXN0b3J5LnB1c2goJz8nICsgcGFyYW1zLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBhZ2luYXRlS2V5VXAoKSB7XG4gICAgY29uc3QgbmV3UGFnZSA9IE51bWJlcih0ZXh0VmFsdWUpO1xuICAgIGlmIChuZXdQYWdlICYmIG5ld1BhZ2UgPiAwICYmIG5ld1BhZ2UgPD0gdG90YWxQYWdlcykge1xuICAgICAgaGFuZGxlQ2hhbmdlUGFnZShuZXdQYWdlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIEhpZGUgdGhlIHBhZ2luYXRlIGNvbnRyb2xzIGlmIHdlIGFyZSBsb2FkaW5nIG9yIHRoZXJlIGlzIG9ubHkgb25lIHBhZ2VcbiAgICAvLyBJdCBzaG91bGQgc3RpbGwgYmUgcmVuZGVyZWQgdG8gdHJpZ2dlciB0aGUgb25QYWdlQ2hhbmdlIGNhbGxiYWNrXG4gICAgPEZvcm0gc3R5bGU9e3RvdGFsUGFnZXMgPD0gMSB8fCBsb2FkaW5nID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IG51bGx9IG9uU3VibWl0PXtoYW5kbGVQYWdpbmF0ZUtleVVwfT5cbiAgICAgIDxmaWVsZHNldC1ncm91cCBjbGFzcz1cImZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkIGZpZWxkZ3JvdXAtLXBhZ2luYXRlXCI+XG4gICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgIDxSZWFjdFBhZ2luYXRlXG4gICAgICAgICAgICBwYWdlQ291bnQ9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICBwYWdlUmFuZ2VEaXNwbGF5ZWQ9ezJ9XG4gICAgICAgICAgICBwcmV2aW91c0xhYmVsPVwi4oC5XCJcbiAgICAgICAgICAgIG5leHRMYWJlbD1cIuKAulwiXG4gICAgICAgICAgICBhY3RpdmVDbGFzc05hbWU9XCJwYWdpbmF0aW9uX19pdGVtLS1zZWxlY3RlZFwiXG4gICAgICAgICAgICBwYWdlQ2xhc3NOYW1lPVwicGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICBwcmV2aW91c0NsYXNzTmFtZT1cInBhZ2luYXRpb25fX2l0ZW0gcGFnaW5hdGlvbl9faXRlbS0tcHJldmlvdXNcIlxuICAgICAgICAgICAgbmV4dENsYXNzTmFtZT1cInBhZ2luYXRpb25fX2l0ZW0gcGFnaW5hdGlvbl9faXRlbS0tbmV4dFwiXG4gICAgICAgICAgICBicmVha0NsYXNzTmFtZT1cInBhZ2luYXRpb25fX2l0ZW0gcGFnaW5hdGlvbl9faXRlbS0tYnJlYWtcIlxuICAgICAgICAgICAgbWFyZ2luUGFnZXNEaXNwbGF5ZWQ9ezJ9XG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U9e2UgPT4gaGFuZGxlQ2hhbmdlUGFnZShlLnNlbGVjdGVkICsgMSl9XG4gICAgICAgICAgICBmb3JjZVBhZ2U9e2N1cnJlbnRQYWdlIC0gMX1cbiAgICAgICAgICAgIGluaXRpYWxQYWdlPXtjdXJyZW50UGFnZSAtIDF9XG4gICAgICAgICAgICBjb250YWluZXJDbGFzc05hbWU9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2ZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgIHshaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIHZhbHVlPXt0ZXh0VmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXRUZXh0VmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicGFnaW5hdGUtY2hhbm5lbFwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ0dvIHRvIHBhZ2U6Jyl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBuYW1lPVwicGFnaW5hdGUtZmlsZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZmllbGRzZXQtZ3JvdXA+XG4gICAgPC9Gb3JtPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFBhZ2luYXRlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBWUE7QUFDQTtBQUNBO0FBZEE7QUFtQkE7QUFDQTtBQUFBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBeEJBO0FBb0NBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/common/paginate.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/qr-code.jsx": -/*!******************************************!*\ - !*** ../ui/component/common/qr-code.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var qrcode_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! qrcode.react */ \"../node_modules/qrcode.react/lib/index.js\");\n/* harmony import */ var qrcode_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(qrcode_react__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar QRCode = /*#__PURE__*/function (_React$Component) {\n _inherits(QRCode, _React$Component);\n\n function QRCode() {\n _classCallCheck(this, QRCode);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(QRCode).apply(this, arguments));\n }\n\n _createClass(QRCode, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n value = _this$props.value,\n paddingRight = _this$props.paddingRight,\n paddingTop = _this$props.paddingTop;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('qr-code', {\n 'qr-code--right-padding': paddingRight,\n 'qr-code--top-padding': paddingTop\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(qrcode_react__WEBPACK_IMPORTED_MODULE_2___default.a, {\n value: value\n }));\n }\n }]);\n\n return QRCode;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n_defineProperty(QRCode, \"defaultProps\", {\n paddingRight: false,\n paddingTop: false\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (QRCode);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi9xci1jb2RlLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL3FyLWNvZGUuanN4Pzg3ZmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0UXJDb2RlIGZyb20gJ3FyY29kZS5yZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHZhbHVlOiBzdHJpbmcsXG4gIHBhZGRpbmdSaWdodD86IGJvb2xlYW4sXG4gIHBhZGRpbmdUb3A/OiBib29sZWFuLFxufTtcblxuY2xhc3MgUVJDb2RlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcGFkZGluZ1JpZ2h0OiBmYWxzZSxcbiAgICBwYWRkaW5nVG9wOiBmYWxzZSxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nVG9wIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncXItY29kZScsIHtcbiAgICAgICAgICAncXItY29kZS0tcmlnaHQtcGFkZGluZyc6IHBhZGRpbmdSaWdodCxcbiAgICAgICAgICAncXItY29kZS0tdG9wLXBhZGRpbmcnOiBwYWRkaW5nVG9wLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgPFJlYWN0UXJDb2RlIHZhbHVlPXt2YWx1ZX0gLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUVJDb2RlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7Ozs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQUE7QUFHQTs7OztBQWxCQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBRkE7QUFDQTtBQW1CQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/qr-code.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/tabs.jsx": -/*!***************************************!*\ - !*** ../ui/component/common/tabs.jsx ***! - \***************************************/ -/*! exports provided: Tabs, TabList, Tab, TabPanels, TabPanel */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tabs\", function() { return Tabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabList\", function() { return TabList; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tab\", function() { return Tab; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabPanels\", function() { return TabPanels; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabPanel\", function() { return TabPanel; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _reach_tabs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @reach/tabs */ \"../node_modules/@reach/tabs/es/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _reach_rect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reach/rect */ \"../node_modules/@reach/rect/es/index.js\");\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n // Tabs are a compound component\n// The components are used individually, but they will still interact and share state\n// When using, at a minimum you must arrange the components in this pattern\n// When the <Tab> at index 0 is active, the TabPanel at index 0 will be displayed\n//\n// <Tabs onChange={...} index={...}>\n// <TabList>\n// <Tab>Tab label 1</Tab>\n// <Tab>Tab label 2</Tab>\n// ...\n// </TabList>\n// <TabPanels>\n// <TabPanel>Content for Tab 1</TabPanel>\n// <TabPanel>Content for Tab 2</TabPanel>\n// ...\n// </TabPanels>\n// </Tabs>\n//\n// the base @reach/tabs components handle all the focus/accessibilty labels\n// We're just adding some styling\n// Use context so child TabPanels can set the active tab, which is kept in Tabs' state\n\nvar AnimatedContext = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"])();\n\nfunction Tabs(props) {\n // Store the position of the selected Tab so we can animate the \"active\" bar to its position\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n _useState2 = _slicedToArray(_useState, 2),\n selectedRect = _useState2[0],\n setSelectedRect = _useState2[1]; // Create a ref of the parent element so we can measure the relative \"left\" for the bar for the child Tab's\n\n\n var tabsRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n var tabsRect = Object(_reach_rect__WEBPACK_IMPORTED_MODULE_3__[\"useRect\"])(tabsRef);\n var tabLabels = props.children[0];\n var tabContent = props.children[1];\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(AnimatedContext.Provider, {\n value: setSelectedRect\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_tabs__WEBPACK_IMPORTED_MODULE_1__[\"Tabs\"], _extends({\n className: \"tabs\"\n }, props, {\n ref: tabsRef\n }), tabLabels, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"tab__divider\",\n style: {\n left: selectedRect && tabsRect && selectedRect.left - tabsRect.left,\n width: selectedRect && selectedRect.width\n }\n }), tabContent));\n} //\n// The wrapper for the list of tab labels that users can click\n\n\nfunction TabList(props) {\n var className = props.className,\n rest = _objectWithoutProperties(props, [\"className\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_tabs__WEBPACK_IMPORTED_MODULE_1__[\"TabList\"], _extends({\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('tabs__list', className)\n }, rest));\n} //\n// The links that users click\n// Accesses `setSelectedRect` from context to set itself as active if needed\n// Flow doesn't understand we don't have to pass it in ourselves\n\n\nfunction Tab(props) {\n // @reach/tabs provides an `isSelected` prop\n // We could also useContext to read it manually\n var isSelected = props.isSelected; // Each tab measures itself\n\n var ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n var rect = Object(_reach_rect__WEBPACK_IMPORTED_MODULE_3__[\"useRect\"])(ref, isSelected); // and calls up to the parent when it becomes selected\n // we useLayoutEffect to avoid flicker\n\n var setSelectedRect = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(AnimatedContext);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useLayoutEffect\"])(function () {\n if (isSelected) setSelectedRect(rect);\n }, [isSelected, rect, setSelectedRect]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_tabs__WEBPACK_IMPORTED_MODULE_1__[\"Tab\"], _extends({\n ref: ref\n }, props, {\n className: \"tab\"\n }));\n} //\n// The wrapper for TabPanel\n\n\nfunction TabPanels(props) {\n var header = props.header,\n rest = _objectWithoutProperties(props, [\"header\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, header, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_tabs__WEBPACK_IMPORTED_MODULE_1__[\"TabPanels\"], rest));\n} //\n// The wrapper for content when it's associated Tab is selected\n\n\nfunction TabPanel(props) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_reach_tabs__WEBPACK_IMPORTED_MODULE_1__[\"TabPanel\"], _extends({\n className: \"tab__panel\"\n }, props));\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi90YWJzLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL3RhYnMuanN4PzQzMjAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ29udGV4dCwgdXNlTGF5b3V0RWZmZWN0LCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgVGFicyBhcyBSZWFjaFRhYnMsXG4gIFRhYiBhcyBSZWFjaFRhYixcbiAgVGFiTGlzdCBhcyBSZWFjaFRhYkxpc3QsXG4gIFRhYlBhbmVscyBhcyBSZWFjaFRhYlBhbmVscyxcbiAgVGFiUGFuZWwgYXMgUmVhY2hUYWJQYW5lbCxcbn0gZnJvbSAnQHJlYWNoL3RhYnMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VSZWN0IH0gZnJvbSAnQHJlYWNoL3JlY3QnO1xuXG4vLyBUYWJzIGFyZSBhIGNvbXBvdW5kIGNvbXBvbmVudFxuLy8gVGhlIGNvbXBvbmVudHMgYXJlIHVzZWQgaW5kaXZpZHVhbGx5LCBidXQgdGhleSB3aWxsIHN0aWxsIGludGVyYWN0IGFuZCBzaGFyZSBzdGF0ZVxuLy8gV2hlbiB1c2luZywgYXQgYSBtaW5pbXVtIHlvdSBtdXN0IGFycmFuZ2UgdGhlIGNvbXBvbmVudHMgaW4gdGhpcyBwYXR0ZXJuXG4vLyBXaGVuIHRoZSA8VGFiPiBhdCBpbmRleCAwIGlzIGFjdGl2ZSwgdGhlIFRhYlBhbmVsIGF0IGluZGV4IDAgd2lsbCBiZSBkaXNwbGF5ZWRcbi8vXG4vLyA8VGFicyBvbkNoYW5nZT17Li4ufSBpbmRleD17Li4ufT5cbi8vICAgPFRhYkxpc3Q+XG4vLyAgICAgPFRhYj5UYWIgbGFiZWwgMTwvVGFiPlxuLy8gICAgIDxUYWI+VGFiIGxhYmVsIDI8L1RhYj5cbi8vICAgICAuLi5cbi8vICAgPC9UYWJMaXN0PlxuLy8gICA8VGFiUGFuZWxzPlxuLy8gICAgIDxUYWJQYW5lbD5Db250ZW50IGZvciBUYWIgMTwvVGFiUGFuZWw+XG4vLyAgICAgPFRhYlBhbmVsPkNvbnRlbnQgZm9yIFRhYiAyPC9UYWJQYW5lbD5cbi8vICAgICAuLi5cbi8vICAgPC9UYWJQYW5lbHM+XG4vLyA8L1RhYnM+XG4vL1xuLy8gdGhlIGJhc2UgQHJlYWNoL3RhYnMgY29tcG9uZW50cyBoYW5kbGUgYWxsIHRoZSBmb2N1cy9hY2Nlc3NpYmlsdHkgbGFiZWxzXG4vLyBXZSdyZSBqdXN0IGFkZGluZyBzb21lIHN0eWxpbmdcblxudHlwZSBUYWJzUHJvcHMgPSB7XG4gIGluZGV4PzogbnVtYmVyLFxuICBvbkNoYW5nZT86IG51bWJlciA9PiB2b2lkLFxuICBjaGlsZHJlbjogQXJyYXk8UmVhY3QkTm9kZT4sXG59O1xuXG4vLyBVc2UgY29udGV4dCBzbyBjaGlsZCBUYWJQYW5lbHMgY2FuIHNldCB0aGUgYWN0aXZlIHRhYiwgd2hpY2ggaXMga2VwdCBpbiBUYWJzJyBzdGF0ZVxuY29uc3QgQW5pbWF0ZWRDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxhbnk+KCk7XG5cbmZ1bmN0aW9uIFRhYnMocHJvcHM6IFRhYnNQcm9wcykge1xuICAvLyBTdG9yZSB0aGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIFRhYiBzbyB3ZSBjYW4gYW5pbWF0ZSB0aGUgXCJhY3RpdmVcIiBiYXIgdG8gaXRzIHBvc2l0aW9uXG4gIGNvbnN0IFtzZWxlY3RlZFJlY3QsIHNldFNlbGVjdGVkUmVjdF0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAvLyBDcmVhdGUgYSByZWYgb2YgdGhlIHBhcmVudCBlbGVtZW50IHNvIHdlIGNhbiBtZWFzdXJlIHRoZSByZWxhdGl2ZSBcImxlZnRcIiBmb3IgdGhlIGJhciBmb3IgdGhlIGNoaWxkIFRhYidzXG4gIGNvbnN0IHRhYnNSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgdGFic1JlY3QgPSB1c2VSZWN0KHRhYnNSZWYpO1xuXG4gIGNvbnN0IHRhYkxhYmVscyA9IHByb3BzLmNoaWxkcmVuWzBdO1xuICBjb25zdCB0YWJDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5bMV07XG5cbiAgcmV0dXJuIChcbiAgICA8QW5pbWF0ZWRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzZXRTZWxlY3RlZFJlY3R9PlxuICAgICAgPFJlYWNoVGFicyBjbGFzc05hbWU9XCJ0YWJzXCIgey4uLnByb3BzfSByZWY9e3RhYnNSZWZ9PlxuICAgICAgICB7dGFiTGFiZWxzfVxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJ0YWJfX2RpdmlkZXJcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBsZWZ0OiBzZWxlY3RlZFJlY3QgJiYgdGFic1JlY3QgJiYgc2VsZWN0ZWRSZWN0LmxlZnQgLSB0YWJzUmVjdC5sZWZ0LFxuICAgICAgICAgICAgd2lkdGg6IHNlbGVjdGVkUmVjdCAmJiBzZWxlY3RlZFJlY3Qud2lkdGgsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cblxuICAgICAgICB7dGFiQ29udGVudH1cbiAgICAgIDwvUmVhY2hUYWJzPlxuICAgIDwvQW5pbWF0ZWRDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vL1xuLy8gVGhlIHdyYXBwZXIgZm9yIHRoZSBsaXN0IG9mIHRhYiBsYWJlbHMgdGhhdCB1c2VycyBjYW4gY2xpY2tcbnR5cGUgVGFiTGlzdFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmcsXG59O1xuZnVuY3Rpb24gVGFiTGlzdChwcm9wczogVGFiTGlzdFByb3BzKSB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIDxSZWFjaFRhYkxpc3QgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCd0YWJzX19saXN0JywgY2xhc3NOYW1lKX0gey4uLnJlc3R9IC8+O1xufVxuXG4vL1xuLy8gVGhlIGxpbmtzIHRoYXQgdXNlcnMgY2xpY2tcbi8vIEFjY2Vzc2VzIGBzZXRTZWxlY3RlZFJlY3RgIGZyb20gY29udGV4dCB0byBzZXQgaXRzZWxmIGFzIGFjdGl2ZSBpZiBuZWVkZWRcbi8vIEZsb3cgZG9lc24ndCB1bmRlcnN0YW5kIHdlIGRvbid0IGhhdmUgdG8gcGFzcyBpdCBpbiBvdXJzZWx2ZXNcbnR5cGUgVGFiUHJvcHMgPSB7XG4gIGlzU2VsZWN0ZWQ/OiBCb29sZWFuLFxufTtcbmZ1bmN0aW9uIFRhYihwcm9wczogVGFiUHJvcHMpIHtcbiAgLy8gQHJlYWNoL3RhYnMgcHJvdmlkZXMgYW4gYGlzU2VsZWN0ZWRgIHByb3BcbiAgLy8gV2UgY291bGQgYWxzbyB1c2VDb250ZXh0IHRvIHJlYWQgaXQgbWFudWFsbHlcbiAgY29uc3QgeyBpc1NlbGVjdGVkIH0gPSBwcm9wcztcblxuICAvLyBFYWNoIHRhYiBtZWFzdXJlcyBpdHNlbGZcbiAgY29uc3QgcmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHJlY3QgPSB1c2VSZWN0KHJlZiwgaXNTZWxlY3RlZCk7XG5cbiAgLy8gYW5kIGNhbGxzIHVwIHRvIHRoZSBwYXJlbnQgd2hlbiBpdCBiZWNvbWVzIHNlbGVjdGVkXG4gIC8vIHdlIHVzZUxheW91dEVmZmVjdCB0byBhdm9pZCBmbGlja2VyXG4gIGNvbnN0IHNldFNlbGVjdGVkUmVjdCA9IHVzZUNvbnRleHQoQW5pbWF0ZWRDb250ZXh0KTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTZWxlY3RlZCkgc2V0U2VsZWN0ZWRSZWN0KHJlY3QpO1xuICB9LCBbaXNTZWxlY3RlZCwgcmVjdCwgc2V0U2VsZWN0ZWRSZWN0XSk7XG5cbiAgcmV0dXJuIDxSZWFjaFRhYiByZWY9e3JlZn0gey4uLnByb3BzfSBjbGFzc05hbWU9XCJ0YWJcIiAvPjtcbn1cblxuLy9cbi8vIFRoZSB3cmFwcGVyIGZvciBUYWJQYW5lbFxudHlwZSBUYWJQYW5lbHNQcm9wcyA9IHtcbiAgaGVhZGVyPzogUmVhY3QkTm9kZSxcbn07XG5mdW5jdGlvbiBUYWJQYW5lbHMocHJvcHM6IFRhYlBhbmVsc1Byb3BzKSB7XG4gIGNvbnN0IHsgaGVhZGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7aGVhZGVyfVxuICAgICAgPFJlYWNoVGFiUGFuZWxzIHsuLi5yZXN0fSAvPlxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG5cbi8vXG4vLyBUaGUgd3JhcHBlciBmb3IgY29udGVudCB3aGVuIGl0J3MgYXNzb2NpYXRlZCBUYWIgaXMgc2VsZWN0ZWRcbmZ1bmN0aW9uIFRhYlBhbmVsKHByb3BzOiBhbnkpIHtcbiAgcmV0dXJuIDxSZWFjaFRhYlBhbmVsIGNsYXNzTmFtZT1cInRhYl9fcGFuZWxcIiB7Li4ucHJvcHN9IC8+O1xufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJMaXN0LCBUYWIsIFRhYlBhbmVscywgVGFiUGFuZWwgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/common/tabs.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/tooltip.jsx": -/*!******************************************!*\ - !*** ../ui/component/common/tooltip.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction Tooltip(props) {\n var children = props.children,\n label = props.label;\n\n if (typeof label !== 'string') {\n return children;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n title: label\n }, children);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Tooltip);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi90b29sdGlwLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL3Rvb2x0aXAuanN4PzJjMjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxhYmVsOiBzdHJpbmcgfCBOb2RlLFxuICBjaGlsZHJlbjogTm9kZSxcbn07XG5cbmZ1bmN0aW9uIFRvb2x0aXAocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGxhYmVsIH0gPSBwcm9wcztcblxuICBpZiAodHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHJldHVybiA8c3BhbiB0aXRsZT17bGFiZWx9PntjaGlsZHJlbn08L3NwYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwO1xuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/tooltip.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/transaction-link.jsx": -/*!***************************************************!*\ - !*** ../ui/component/common/transaction-link.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\nvar TransactionLink = function TransactionLink(props) {\n var id = props.id;\n var href = \"https://explorer.lbry.com/tx/\".concat(id);\n var label = id.substr(0, 7);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: href,\n label: label\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionLink);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi90cmFuc2FjdGlvbi1saW5rLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29tbW9uL3RyYW5zYWN0aW9uLWxpbmsuanN4PzY5YTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBpZDogc3RyaW5nLFxufTtcblxuY29uc3QgVHJhbnNhY3Rpb25MaW5rID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBocmVmID0gYGh0dHBzOi8vZXhwbG9yZXIubGJyeS5jb20vdHgvJHtpZH1gO1xuICBjb25zdCBsYWJlbCA9IGlkLnN1YnN0cigwLCA3KTtcblxuICByZXR1cm4gPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj17aHJlZn0gbGFiZWw9e2xhYmVsfSAvPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zYWN0aW9uTGluaztcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQUNBO0FBUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/common/transaction-link.jsx\n"); - -/***/ }), - -/***/ "../ui/component/common/truncated-text.jsx": -/*!*************************************************!*\ - !*** ../ui/component/common/truncated-text.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar TruncatedText = function TruncatedText(props) {\n var text = props.text,\n children = props.children,\n lines = props.lines,\n showTooltip = props.showTooltip;\n var tooltip = showTooltip ? children || text : '';\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n title: tooltip,\n className: \"truncated-text\",\n style: {\n WebkitLineClamp: lines\n }\n }, children || text);\n};\n\nTruncatedText.defaultProps = {\n showTooltip: true\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (TruncatedText);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvbW1vbi90cnVuY2F0ZWQtdGV4dC5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NvbW1vbi90cnVuY2F0ZWQtdGV4dC5qc3g/NTU0MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICB0ZXh0PzogP3N0cmluZyxcbiAgbGluZXM6IG51bWJlcixcbiAgc2hvd1Rvb2x0aXA/OiBib29sZWFuLFxuICBjaGlsZHJlbj86IFJlYWN0Lk5vZGUsXG59O1xuXG5jb25zdCBUcnVuY2F0ZWRUZXh0ID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IHRleHQsIGNoaWxkcmVuLCBsaW5lcywgc2hvd1Rvb2x0aXAgfSA9IHByb3BzO1xuICBjb25zdCB0b29sdGlwID0gc2hvd1Rvb2x0aXAgPyBjaGlsZHJlbiB8fCB0ZXh0IDogJyc7XG4gIHJldHVybiAoXG4gICAgPHNwYW4gdGl0bGU9e3Rvb2x0aXB9IGNsYXNzTmFtZT1cInRydW5jYXRlZC10ZXh0XCIgc3R5bGU9e3sgV2Via2l0TGluZUNsYW1wOiBsaW5lcyB9fT5cbiAgICAgIHtjaGlsZHJlbiB8fCB0ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblRydW5jYXRlZFRleHQuZGVmYXVsdFByb3BzID0ge1xuICBzaG93VG9vbHRpcDogdHJ1ZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRydW5jYXRlZFRleHQ7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUpBO0FBQ0E7QUFTQTtBQUNBO0FBREE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/common/truncated-text.jsx\n"); - -/***/ }), - -/***/ "../ui/component/copyableText/index.js": -/*!*********************************************!*\ - !*** ../ui/component/copyableText/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/copyableText/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvcHlhYmxlVGV4dC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29weWFibGVUZXh0L2luZGV4LmpzPzE3YTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvVG9hc3QgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDb3B5YWJsZVRleHQgZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAge1xuICAgIGRvVG9hc3QsXG4gIH1cbikoQ29weWFibGVUZXh0KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/copyableText/index.js\n"); - -/***/ }), - -/***/ "../ui/component/copyableText/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/copyableText/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CopyableText; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nfunction CopyableText(props) {\n var copyable = props.copyable,\n doToast = props.doToast,\n snackMessage = props.snackMessage,\n label = props.label,\n _props$primaryButton = props.primaryButton,\n primaryButton = _props$primaryButton === void 0 ? false : _props$primaryButton;\n var input = Object(react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"])();\n\n function copyToClipboard() {\n var topRef = input.current;\n\n if (topRef && topRef.input && topRef.input.current) {\n topRef.input.current.select();\n }\n\n document.execCommand('copy');\n }\n\n function onFocus() {\n // We have to go a layer deep since the input is inside the form component\n var topRef = input.current;\n\n if (topRef && topRef.input && topRef.input.current) {\n topRef.input.current.select();\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n className: \"form-field--copyable\",\n readOnly: true,\n label: label,\n value: copyable || '',\n ref: input,\n onFocus: onFocus,\n inputButton: react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: primaryButton ? 'primary' : 'secondary',\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"COPY\"],\n onClick: function onClick() {\n copyToClipboard();\n doToast({\n message: snackMessage || __('Text copied')\n });\n }\n })\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NvcHlhYmxlVGV4dC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvY29weWFibGVUZXh0L3ZpZXcuanN4PzMwYjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvcHlhYmxlOiBzdHJpbmcsXG4gIHNuYWNrTWVzc2FnZTogP3N0cmluZyxcbiAgZG9Ub2FzdDogKHsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQsXG4gIGxhYmVsPzogc3RyaW5nLFxuICBwcmltYXJ5QnV0dG9uPzogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvcHlhYmxlVGV4dChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjb3B5YWJsZSwgZG9Ub2FzdCwgc25hY2tNZXNzYWdlLCBsYWJlbCwgcHJpbWFyeUJ1dHRvbiA9IGZhbHNlIH0gPSBwcm9wcztcblxuICBjb25zdCBpbnB1dCA9IHVzZVJlZigpO1xuXG4gIGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZCgpIHtcbiAgICBjb25zdCB0b3BSZWYgPSBpbnB1dC5jdXJyZW50O1xuICAgIGlmICh0b3BSZWYgJiYgdG9wUmVmLmlucHV0ICYmIHRvcFJlZi5pbnB1dC5jdXJyZW50KSB7XG4gICAgICB0b3BSZWYuaW5wdXQuY3VycmVudC5zZWxlY3QoKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgLy8gV2UgaGF2ZSB0byBnbyBhIGxheWVyIGRlZXAgc2luY2UgdGhlIGlucHV0IGlzIGluc2lkZSB0aGUgZm9ybSBjb21wb25lbnRcbiAgICBjb25zdCB0b3BSZWYgPSBpbnB1dC5jdXJyZW50O1xuICAgIGlmICh0b3BSZWYgJiYgdG9wUmVmLmlucHV0ICYmIHRvcFJlZi5pbnB1dC5jdXJyZW50KSB7XG4gICAgICB0b3BSZWYuaW5wdXQuY3VycmVudC5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGb3JtRmllbGRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLWNvcHlhYmxlXCJcbiAgICAgIHJlYWRPbmx5XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICB2YWx1ZT17Y29weWFibGUgfHwgJyd9XG4gICAgICByZWY9e2lucHV0fVxuICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgIGlucHV0QnV0dG9uPXtcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGJ1dHRvbj17cHJpbWFyeUJ1dHRvbiA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknfVxuICAgICAgICAgIGljb249e0lDT05TLkNPUFl9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgY29weVRvQ2xpcGJvYXJkKCk7XG4gICAgICAgICAgICBkb1RvYXN0KHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogc25hY2tNZXNzYWdlIHx8IF9fKCdUZXh0IGNvcGllZCcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFUQTtBQXNCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/copyableText/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/creatorAnalytics/index.js": -/*!*************************************************!*\ - !*** ../ui/component/creatorAnalytics/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/creatorAnalytics/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyChannelClaims\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFetchingMyChannels\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n prepareEdit: function prepareEdit(channelName) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doPrepareEdit\"])({\n signing_channel: {\n name: channelName\n }\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NyZWF0b3JBbmFseXRpY3MvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NyZWF0b3JBbmFseXRpY3MvaW5kZXguanM/MjcxOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0TXlDaGFubmVsQ2xhaW1zLCBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMsIGRvUHJlcGFyZUVkaXQgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDcmVhdG9yQW5hbHl0aWNzIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGNoYW5uZWxzOiBzZWxlY3RNeUNoYW5uZWxDbGFpbXMoc3RhdGUpLFxuICBmZXRjaGluZ0NoYW5uZWxzOiBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBwcmVwYXJlRWRpdDogY2hhbm5lbE5hbWUgPT4gZGlzcGF0Y2goZG9QcmVwYXJlRWRpdCh7IHNpZ25pbmdfY2hhbm5lbDogeyBuYW1lOiBjaGFubmVsTmFtZSB9IH0pKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCwgcGVyZm9ybSkoQ3JlYXRvckFuYWx5dGljcyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/creatorAnalytics/index.js\n"); - -/***/ }), - -/***/ "../ui/component/creatorAnalytics/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/creatorAnalytics/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CreatorAnalytics; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_channelSelector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/channelSelector */ \"../ui/component/channelSelector/index.js\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction CreatorAnalytics(props) {\n var channels = props.channels,\n prepareEdit = props.prepareEdit;\n var history = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_12__[\"useHistory\"])();\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_2___default.a.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n stats = _React$useState2[0],\n setStats = _React$useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_9__[\"default\"])('analytics-selected-channel'),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n selectedChannelUrl = _usePersistedState2[0],\n setSelectedChannelUrl = _usePersistedState2[1];\n\n var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2___default.a.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n fetchingStats = _React$useState4[0],\n setFetchingStats = _React$useState4[1];\n\n var hasChannels = channels && channels.length > 0;\n var firstChannel = hasChannels && channels[0];\n var firstChannelUrl = firstChannel && (firstChannel.canonical_url || firstChannel.permanent_url); // permanent_url is needed for pending publishes\n\n var selectedChannelClaim = channels && channels.find(function (claim) {\n return claim.canonical_url === selectedChannelUrl || claim.permanent_url === selectedChannelUrl;\n });\n var selectedChannelClaimId = selectedChannelClaim && selectedChannelClaim.claim_id;\n var channelFoundForSelectedChannelUrl = channels && channels.find(function (channel) {\n return selectedChannelUrl === channel.canonical_url || selectedChannelUrl === channel.permanent_url;\n });\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n // set default channel\n if ((!selectedChannelUrl || !channelFoundForSelectedChannelUrl) && firstChannelUrl) {\n setSelectedChannelUrl(firstChannelUrl);\n }\n }, [selectedChannelUrl, firstChannelUrl, channelFoundForSelectedChannelUrl]);\n var channelForEffect = JSON.stringify(selectedChannelClaim);\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n if (selectedChannelClaimId && channelForEffect) {\n setFetchingStats(true);\n lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"Lbryio\"].call('reports', 'content', {\n claim_id: selectedChannelClaimId\n }).then(function (res) {\n setFetchingStats(false);\n setStats(res);\n })[\"catch\"](function () {\n var channelToSend = JSON.parse(channelForEffect);\n analytics__WEBPACK_IMPORTED_MODULE_13__[\"default\"].apiLogPublish(channelToSend);\n setFetchingStats(false);\n });\n }\n }, [selectedChannelClaimId, channelForEffect, setFetchingStats, setStats]);\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelSelector__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n selectedChannelUrl: selectedChannelUrl,\n onChannelSelect: function onChannelSelect(newChannelUrl) {\n setStats(null);\n setSelectedChannelUrl(newChannelUrl);\n }\n })), fetchingStats && !stats && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n delayed: true\n })), !fetchingStats && !stats && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n title: __(\"You haven't published anything with this channel yet!\"),\n subtitle: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n button: \"primary\",\n label: __('Publish Something'),\n onClick: function onClick() {\n if (selectedChannelClaim) {\n prepareEdit(selectedChannelClaim.name);\n history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"PUBLISH\"]));\n }\n }\n })\n })), stats && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"columns\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n iconColor: true,\n title: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, stats.ChannelSubs, \" followers\"),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBSCRIBE\"],\n subtitle: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"card__data-subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, 0 > -1 && '+', ' ', __('%follower_count_weekly_change% this week', {\n follower_count_weekly_change: stats.ChannelSubChange || 0\n })), stats.ChannelSubChange > 0 && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"],\n iconColor: \"green\",\n size: 18\n }))\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EYE\"],\n title: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('%all_content_views% views', {\n all_content_views: stats.AllContentViews\n })),\n subtitle: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"card__data-subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('+ %all_content_views_weekly_change% this week', {\n all_content_views_weekly_change: stats.AllContentViewChange || 0\n })), stats.AllContentViewChange > 0 && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"],\n iconColor: \"green\",\n size: 18\n }))\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"card__data-subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('Most Viewed Content'))),\n body: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"card--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: stats.VideoURITopAllTime\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section__subtitle card__data-subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('%all_time_top_views% views - %all_time_views_weekly_change% this week', {\n all_time_top_views: stats.VideoViewsTopAllTime,\n all_time_views_weekly_change: stats.VideoViewChangeTopAllTime\n })), stats.VideoViewChangeTopAllTime > 0 && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"],\n iconColor: \"green\",\n size: 18\n })))\n })));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2NyZWF0b3JBbmFseXRpY3Mvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2NyZWF0b3JBbmFseXRpY3Mvdmlldy5qc3g/MjMyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGJyeWlvIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgQ2hhbm5lbFNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudC9jaGFubmVsU2VsZWN0b3InO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgU3Bpbm5lciBmcm9tICdjb21wb25lbnQvc3Bpbm5lcic7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IFlyYmwgZnJvbSAnY29tcG9uZW50L3lyYmwnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IGFuYWx5dGljcyBmcm9tICdhbmFseXRpY3MnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGFubmVsczogQXJyYXk8Q2hhbm5lbENsYWltPixcbiAgZmV0Y2hpbmdDaGFubmVsczogYm9vbGVhbixcbiAgcHJlcGFyZUVkaXQ6IHN0cmluZyA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRvckFuYWx5dGljcyhwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjaGFubmVscywgcHJlcGFyZUVkaXQgfSA9IHByb3BzO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBbc3RhdHMsIHNldFN0YXRzXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IFtzZWxlY3RlZENoYW5uZWxVcmwsIHNldFNlbGVjdGVkQ2hhbm5lbFVybF0gPSB1c2VQZXJzaXN0ZWRTdGF0ZSgnYW5hbHl0aWNzLXNlbGVjdGVkLWNoYW5uZWwnKTtcbiAgY29uc3QgW2ZldGNoaW5nU3RhdHMsIHNldEZldGNoaW5nU3RhdHNdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYXNDaGFubmVscyA9IGNoYW5uZWxzICYmIGNoYW5uZWxzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGZpcnN0Q2hhbm5lbCA9IGhhc0NoYW5uZWxzICYmIGNoYW5uZWxzWzBdO1xuICBjb25zdCBmaXJzdENoYW5uZWxVcmwgPSBmaXJzdENoYW5uZWwgJiYgKGZpcnN0Q2hhbm5lbC5jYW5vbmljYWxfdXJsIHx8IGZpcnN0Q2hhbm5lbC5wZXJtYW5lbnRfdXJsKTsgLy8gcGVybWFuZW50X3VybCBpcyBuZWVkZWQgZm9yIHBlbmRpbmcgcHVibGlzaGVzXG4gIGNvbnN0IHNlbGVjdGVkQ2hhbm5lbENsYWltID1cbiAgICBjaGFubmVscyAmJlxuICAgIGNoYW5uZWxzLmZpbmQoY2xhaW0gPT4gY2xhaW0uY2Fub25pY2FsX3VybCA9PT0gc2VsZWN0ZWRDaGFubmVsVXJsIHx8IGNsYWltLnBlcm1hbmVudF91cmwgPT09IHNlbGVjdGVkQ2hhbm5lbFVybCk7XG4gIGNvbnN0IHNlbGVjdGVkQ2hhbm5lbENsYWltSWQgPSBzZWxlY3RlZENoYW5uZWxDbGFpbSAmJiBzZWxlY3RlZENoYW5uZWxDbGFpbS5jbGFpbV9pZDtcbiAgY29uc3QgY2hhbm5lbEZvdW5kRm9yU2VsZWN0ZWRDaGFubmVsVXJsID1cbiAgICBjaGFubmVscyAmJlxuICAgIGNoYW5uZWxzLmZpbmQoY2hhbm5lbCA9PiB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRDaGFubmVsVXJsID09PSBjaGFubmVsLmNhbm9uaWNhbF91cmwgfHwgc2VsZWN0ZWRDaGFubmVsVXJsID09PSBjaGFubmVsLnBlcm1hbmVudF91cmw7XG4gICAgfSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBzZXQgZGVmYXVsdCBjaGFubmVsXG4gICAgaWYgKCghc2VsZWN0ZWRDaGFubmVsVXJsIHx8ICFjaGFubmVsRm91bmRGb3JTZWxlY3RlZENoYW5uZWxVcmwpICYmIGZpcnN0Q2hhbm5lbFVybCkge1xuICAgICAgc2V0U2VsZWN0ZWRDaGFubmVsVXJsKGZpcnN0Q2hhbm5lbFVybCk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRDaGFubmVsVXJsLCBmaXJzdENoYW5uZWxVcmwsIGNoYW5uZWxGb3VuZEZvclNlbGVjdGVkQ2hhbm5lbFVybF0pO1xuXG4gIGNvbnN0IGNoYW5uZWxGb3JFZmZlY3QgPSBKU09OLnN0cmluZ2lmeShzZWxlY3RlZENoYW5uZWxDbGFpbSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkQ2hhbm5lbENsYWltSWQgJiYgY2hhbm5lbEZvckVmZmVjdCkge1xuICAgICAgc2V0RmV0Y2hpbmdTdGF0cyh0cnVlKTtcbiAgICAgIExicnlpby5jYWxsKCdyZXBvcnRzJywgJ2NvbnRlbnQnLCB7IGNsYWltX2lkOiBzZWxlY3RlZENoYW5uZWxDbGFpbUlkIH0pXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgc2V0RmV0Y2hpbmdTdGF0cyhmYWxzZSk7XG4gICAgICAgICAgc2V0U3RhdHMocmVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsVG9TZW5kID0gSlNPTi5wYXJzZShjaGFubmVsRm9yRWZmZWN0KTtcbiAgICAgICAgICBhbmFseXRpY3MuYXBpTG9nUHVibGlzaChjaGFubmVsVG9TZW5kKTtcbiAgICAgICAgICBzZXRGZXRjaGluZ1N0YXRzKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRDaGFubmVsQ2xhaW1JZCwgY2hhbm5lbEZvckVmZmVjdCwgc2V0RmV0Y2hpbmdTdGF0cywgc2V0U3RhdHNdKTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvblwiPlxuICAgICAgICA8Q2hhbm5lbFNlbGVjdG9yXG4gICAgICAgICAgc2VsZWN0ZWRDaGFubmVsVXJsPXtzZWxlY3RlZENoYW5uZWxVcmx9XG4gICAgICAgICAgb25DaGFubmVsU2VsZWN0PXtuZXdDaGFubmVsVXJsID0+IHtcbiAgICAgICAgICAgIHNldFN0YXRzKG51bGwpO1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDaGFubmVsVXJsKG5ld0NoYW5uZWxVcmwpO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtmZXRjaGluZ1N0YXRzICYmICFzdGF0cyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWFpbi0tZW1wdHlcIj5cbiAgICAgICAgICA8U3Bpbm5lciBkZWxheWVkIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHshZmV0Y2hpbmdTdGF0cyAmJiAhc3RhdHMgJiYgKFxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYWluLS1lbXB0eVwiPlxuICAgICAgICAgIDxZcmJsXG4gICAgICAgICAgICB0aXRsZT17X18oXCJZb3UgaGF2ZW4ndCBwdWJsaXNoZWQgYW55dGhpbmcgd2l0aCB0aGlzIGNoYW5uZWwgeWV0IVwiKX1cbiAgICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnUHVibGlzaCBTb21ldGhpbmcnKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRDaGFubmVsQ2xhaW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlcGFyZUVkaXQoc2VsZWN0ZWRDaGFubmVsQ2xhaW0ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpc3RvcnkucHVzaChgLyQvJHtQQUdFUy5QVUJMSVNIfWApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgKX1cbiAgICAgIHtzdGF0cyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sdW1uc1wiPlxuICAgICAgICAgICAgPENhcmRcbiAgICAgICAgICAgICAgaWNvbkNvbG9yXG4gICAgICAgICAgICAgIHRpdGxlPXs8c3Bhbj57c3RhdHMuQ2hhbm5lbFN1YnN9IGZvbGxvd2Vyczwvc3Bhbj59XG4gICAgICAgICAgICAgIGljb249e0lDT05TLlNVQlNDUklCRX1cbiAgICAgICAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fZGF0YS1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHswID4gLTEgJiYgJysnfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHtfXygnJWZvbGxvd2VyX2NvdW50X3dlZWtseV9jaGFuZ2UlIHRoaXMgd2VlaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlcl9jb3VudF93ZWVrbHlfY2hhbmdlOiBzdGF0cy5DaGFubmVsU3ViQ2hhbmdlIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3N0YXRzLkNoYW5uZWxTdWJDaGFuZ2UgPiAwICYmIDxJY29uIGljb249e0lDT05TLlNVUFBPUlR9IGljb25Db2xvcj1cImdyZWVuXCIgc2l6ZT17MTh9IC8+fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENhcmRcbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuRVlFfVxuICAgICAgICAgICAgICB0aXRsZT17PHNwYW4+e19fKCclYWxsX2NvbnRlbnRfdmlld3MlIHZpZXdzJywgeyBhbGxfY29udGVudF92aWV3czogc3RhdHMuQWxsQ29udGVudFZpZXdzIH0pfTwvc3Bhbj59XG4gICAgICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2RhdGEtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB7X18oJysgJWFsbF9jb250ZW50X3ZpZXdzX3dlZWtseV9jaGFuZ2UlIHRoaXMgd2VlaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGxfY29udGVudF92aWV3c193ZWVrbHlfY2hhbmdlOiBzdGF0cy5BbGxDb250ZW50Vmlld0NoYW5nZSB8fCAwLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHtzdGF0cy5BbGxDb250ZW50Vmlld0NoYW5nZSA+IDAgJiYgPEljb24gaWNvbj17SUNPTlMuU1VQUE9SVH0gaWNvbkNvbG9yPVwiZ3JlZW5cIiBzaXplPXsxOH0gLz59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2RhdGEtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57X18oJ01vc3QgVmlld2VkIENvbnRlbnQnKX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keT17XG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgPENsYWltUHJldmlldyB1cmk9e3N0YXRzLlZpZGVvVVJJVG9wQWxsVGltZX0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX3N1YnRpdGxlIGNhcmRfX2RhdGEtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB7X18oJyVhbGxfdGltZV90b3Bfdmlld3MlIHZpZXdzIC0gJWFsbF90aW1lX3ZpZXdzX3dlZWtseV9jaGFuZ2UlIHRoaXMgd2VlaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGxfdGltZV90b3Bfdmlld3M6IHN0YXRzLlZpZGVvVmlld3NUb3BBbGxUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGFsbF90aW1lX3ZpZXdzX3dlZWtseV9jaGFuZ2U6IHN0YXRzLlZpZGVvVmlld0NoYW5nZVRvcEFsbFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3N0YXRzLlZpZGVvVmlld0NoYW5nZVRvcEFsbFRpbWUgPiAwICYmIDxJY29uIGljb249e0lDT05TLlNVUFBPUlR9IGljb25Db2xvcj1cImdyZWVuXCIgc2l6ZT17MTh9IC8+fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUdBO0FBQ0E7QUFHQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBYkE7QUFnQkE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBU0E7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUhBO0FBa0JBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBWkE7QUFpQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFWQTtBQWlCQTtBQUNBO0FBQUE7QUFJQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFGQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBbEJBO0FBMkJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/creatorAnalytics/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/dateTime/index.js": -/*!*****************************************!*\ - !*** ../ui/component/dateTime/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/dateTime/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n date: props.date || Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectDateForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2RhdGVUaW1lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9kYXRlVGltZS9pbmRleC5qcz8xZmE0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0RGF0ZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGRhdGU6IHByb3BzLmRhdGUgfHwgbWFrZVNlbGVjdERhdGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShEYXRlVGltZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/dateTime/index.js\n"); - -/***/ }), - -/***/ "../ui/component/dateTime/view.jsx": -/*!*****************************************!*\ - !*** ../ui/component/dateTime/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar DateTime = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(DateTime, _React$PureComponent);\n\n function DateTime() {\n _classCallCheck(this, DateTime);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DateTime).apply(this, arguments));\n }\n\n _createClass(DateTime, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n date = _this$props.date,\n timeAgo = _this$props.timeAgo;\n var show = this.props.show || DateTime.SHOW_BOTH;\n\n if (timeAgo) {\n if (!date) {\n return null;\n } // Moment is very liberal with it's rounding\n // Wait to show \"two years ago\" until it's actually been two years (or higher)\n\n\n var numberOfYearsSincePublish = Math.floor(moment__WEBPACK_IMPORTED_MODULE_1___default()().diff(date, 'years'));\n\n if (numberOfYearsSincePublish === 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfYearsSincePublish% year ago', {\n numberOfYearsSincePublish: numberOfYearsSincePublish\n }));\n } else if (numberOfYearsSincePublish > 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfYearsSincePublish% years ago', {\n numberOfYearsSincePublish: numberOfYearsSincePublish\n }));\n }\n\n var numberOfMonthsSincePublish = Math.floor(moment__WEBPACK_IMPORTED_MODULE_1___default()().diff(date, 'months'));\n\n if (numberOfMonthsSincePublish === 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfMonthsSincePublish% month ago', {\n numberOfMonthsSincePublish: numberOfMonthsSincePublish\n }));\n } else if (numberOfMonthsSincePublish > 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfMonthsSincePublish% months ago', {\n numberOfMonthsSincePublish: numberOfMonthsSincePublish\n }));\n }\n\n var numberOfDaysSincePublish = Math.floor(moment__WEBPACK_IMPORTED_MODULE_1___default()().diff(date, 'days'));\n\n if (numberOfDaysSincePublish === 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfDaysSincePublish% day ago', {\n numberOfDaysSincePublish: numberOfDaysSincePublish\n }));\n } else if (numberOfDaysSincePublish > 1) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('%numberOfDaysSincePublish% days ago', {\n numberOfDaysSincePublish: numberOfDaysSincePublish\n }));\n } // \"just now\", \"a few minutes ago\"\n\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, moment__WEBPACK_IMPORTED_MODULE_1___default()(date).from(moment__WEBPACK_IMPORTED_MODULE_1___default()()));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, date && (show === DateTime.SHOW_BOTH || show === DateTime.SHOW_DATE) && moment__WEBPACK_IMPORTED_MODULE_1___default()(date).format('MMMM Do, YYYY'), show === DateTime.SHOW_BOTH && ' ', date && (show === DateTime.SHOW_BOTH || show === DateTime.SHOW_TIME) && date.toLocaleTimeString(), !date && '...');\n }\n }]);\n\n return DateTime;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(DateTime, \"SHOW_DATE\", 'date');\n\n_defineProperty(DateTime, \"SHOW_TIME\", 'time');\n\n_defineProperty(DateTime, \"SHOW_BOTH\", 'both');\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (DateTime);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2RhdGVUaW1lL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9kYXRlVGltZS92aWV3LmpzeD9mODkxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG50eXBlIFByb3BzID0ge1xuICBkYXRlPzogYW55LFxuICB0aW1lQWdvPzogYm9vbGVhbixcbiAgZm9ybWF0T3B0aW9uczoge30sXG4gIHNob3c/OiBzdHJpbmcsXG59O1xuXG5jbGFzcyBEYXRlVGltZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgc3RhdGljIFNIT1dfREFURSA9ICdkYXRlJztcbiAgc3RhdGljIFNIT1dfVElNRSA9ICd0aW1lJztcbiAgc3RhdGljIFNIT1dfQk9USCA9ICdib3RoJztcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkYXRlLCB0aW1lQWdvIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNob3cgPSB0aGlzLnByb3BzLnNob3cgfHwgRGF0ZVRpbWUuU0hPV19CT1RIO1xuXG4gICAgaWYgKHRpbWVBZ28pIHtcbiAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gTW9tZW50IGlzIHZlcnkgbGliZXJhbCB3aXRoIGl0J3Mgcm91bmRpbmdcbiAgICAgIC8vIFdhaXQgdG8gc2hvdyBcInR3byB5ZWFycyBhZ29cIiB1bnRpbCBpdCdzIGFjdHVhbGx5IGJlZW4gdHdvIHllYXJzIChvciBoaWdoZXIpXG4gICAgICBjb25zdCBudW1iZXJPZlllYXJzU2luY2VQdWJsaXNoID0gTWF0aC5mbG9vcihtb21lbnQoKS5kaWZmKGRhdGUsICd5ZWFycycpKTtcblxuICAgICAgaWYgKG51bWJlck9mWWVhcnNTaW5jZVB1Ymxpc2ggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIDxzcGFuPntfXygnJW51bWJlck9mWWVhcnNTaW5jZVB1Ymxpc2glIHllYXIgYWdvJywgeyBudW1iZXJPZlllYXJzU2luY2VQdWJsaXNoIH0pfTwvc3Bhbj47XG4gICAgICB9IGVsc2UgaWYgKG51bWJlck9mWWVhcnNTaW5jZVB1Ymxpc2ggPiAxKSB7XG4gICAgICAgIHJldHVybiA8c3Bhbj57X18oJyVudW1iZXJPZlllYXJzU2luY2VQdWJsaXNoJSB5ZWFycyBhZ28nLCB7IG51bWJlck9mWWVhcnNTaW5jZVB1Ymxpc2ggfSl9PC9zcGFuPjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtYmVyT2ZNb250aHNTaW5jZVB1Ymxpc2ggPSBNYXRoLmZsb29yKG1vbWVudCgpLmRpZmYoZGF0ZSwgJ21vbnRocycpKTtcbiAgICAgIGlmIChudW1iZXJPZk1vbnRoc1NpbmNlUHVibGlzaCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gPHNwYW4+e19fKCclbnVtYmVyT2ZNb250aHNTaW5jZVB1Ymxpc2glIG1vbnRoIGFnbycsIHsgbnVtYmVyT2ZNb250aHNTaW5jZVB1Ymxpc2ggfSl9PC9zcGFuPjtcbiAgICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZNb250aHNTaW5jZVB1Ymxpc2ggPiAxKSB7XG4gICAgICAgIHJldHVybiA8c3Bhbj57X18oJyVudW1iZXJPZk1vbnRoc1NpbmNlUHVibGlzaCUgbW9udGhzIGFnbycsIHsgbnVtYmVyT2ZNb250aHNTaW5jZVB1Ymxpc2ggfSl9PC9zcGFuPjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtYmVyT2ZEYXlzU2luY2VQdWJsaXNoID0gTWF0aC5mbG9vcihtb21lbnQoKS5kaWZmKGRhdGUsICdkYXlzJykpO1xuICAgICAgaWYgKG51bWJlck9mRGF5c1NpbmNlUHVibGlzaCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gPHNwYW4+e19fKCclbnVtYmVyT2ZEYXlzU2luY2VQdWJsaXNoJSBkYXkgYWdvJywgeyBudW1iZXJPZkRheXNTaW5jZVB1Ymxpc2ggfSl9PC9zcGFuPjtcbiAgICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZEYXlzU2luY2VQdWJsaXNoID4gMSkge1xuICAgICAgICByZXR1cm4gPHNwYW4+e19fKCclbnVtYmVyT2ZEYXlzU2luY2VQdWJsaXNoJSBkYXlzIGFnbycsIHsgbnVtYmVyT2ZEYXlzU2luY2VQdWJsaXNoIH0pfTwvc3Bhbj47XG4gICAgICB9XG5cbiAgICAgIC8vIFwianVzdCBub3dcIiwgXCJhIGZldyBtaW51dGVzIGFnb1wiXG4gICAgICByZXR1cm4gPHNwYW4+e21vbWVudChkYXRlKS5mcm9tKG1vbWVudCgpKX08L3NwYW4+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8c3Bhbj5cbiAgICAgICAge2RhdGUgJiYgKHNob3cgPT09IERhdGVUaW1lLlNIT1dfQk9USCB8fCBzaG93ID09PSBEYXRlVGltZS5TSE9XX0RBVEUpICYmIG1vbWVudChkYXRlKS5mb3JtYXQoJ01NTU0gRG8sIFlZWVknKX1cbiAgICAgICAge3Nob3cgPT09IERhdGVUaW1lLlNIT1dfQk9USCAmJiAnICd9XG4gICAgICAgIHtkYXRlICYmIChzaG93ID09PSBEYXRlVGltZS5TSE9XX0JPVEggfHwgc2hvdyA9PT0gRGF0ZVRpbWUuU0hPV19USU1FKSAmJiBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygpfVxuICAgICAgICB7IWRhdGUgJiYgJy4uLid9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBUUE7Ozs7Ozs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQTFCQTtBQUNBO0FBQ0E7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFRQTs7OztBQWxEQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUNBO0FBb0RBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/dateTime/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/embedTextArea/index.js": -/*!**********************************************!*\ - !*** ../ui/component/embedTextArea/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/embedTextArea/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2VtYmVkVGV4dEFyZWEvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2VtYmVkVGV4dEFyZWEvaW5kZXguanM/ZDdiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9Ub2FzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEVtYmVkVGV4dEFyZWEgZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAge1xuICAgIGRvVG9hc3QsXG4gIH1cbikoRW1iZWRUZXh0QXJlYSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/embedTextArea/index.js\n"); - -/***/ }), - -/***/ "../ui/component/embedTextArea/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/embedTextArea/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return EmbedTextArea; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/lbrytv */ \"../ui/util/lbrytv.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_lbrytv__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nfunction EmbedTextArea(props) {\n var doToast = props.doToast,\n snackMessage = props.snackMessage,\n label = props.label,\n claim = props.claim;\n var claimId = claim.claim_id,\n name = claim.name;\n var input = Object(react__WEBPACK_IMPORTED_MODULE_3__[\"useRef\"])();\n var streamUrl = Object(util_lbrytv__WEBPACK_IMPORTED_MODULE_4__[\"generateEmbedUrl\"])(name, claimId);\n var embedText = \"<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"\".concat(streamUrl, \"\\\" allowfullscreen></iframe>\");\n\n function copyToClipboard() {\n var topRef = input.current;\n\n if (topRef && topRef.input && topRef.input.current) {\n topRef.input.current.select();\n document.execCommand('copy');\n doToast({\n message: snackMessage || 'Embed link copied'\n });\n }\n }\n\n function onFocus() {\n // We have to go a layer deep since the input is inside the form component\n var topRef = input && input.current;\n\n if (topRef && topRef.input && topRef.input.current) {\n topRef.input.current.select();\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"textarea\",\n className: \"form-field--copyable\",\n label: label,\n value: embedText || '',\n ref: input,\n onFocus: onFocus\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"COPY\"],\n button: \"secondary\",\n label: __('Copy'),\n onClick: function onClick() {\n copyToClipboard();\n }\n })));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2VtYmVkVGV4dEFyZWEvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2VtYmVkVGV4dEFyZWEvdmlldy5qc3g/ZGEwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdlbmVyYXRlRW1iZWRVcmwgfSBmcm9tICd1dGlsL2xicnl0dic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvcHlhYmxlOiBzdHJpbmcsXG4gIHNuYWNrTWVzc2FnZTogP3N0cmluZyxcbiAgZG9Ub2FzdDogKHsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQsXG4gIGxhYmVsPzogc3RyaW5nLFxuICBjbGFpbTogQ2xhaW0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbWJlZFRleHRBcmVhKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGRvVG9hc3QsIHNuYWNrTWVzc2FnZSwgbGFiZWwsIGNsYWltIH0gPSBwcm9wcztcbiAgY29uc3QgeyBjbGFpbV9pZDogY2xhaW1JZCwgbmFtZSB9ID0gY2xhaW07XG4gIGNvbnN0IGlucHV0ID0gdXNlUmVmKCk7XG5cbiAgY29uc3Qgc3RyZWFtVXJsID0gZ2VuZXJhdGVFbWJlZFVybChuYW1lLCBjbGFpbUlkKTtcbiAgbGV0IGVtYmVkVGV4dCA9IGA8aWZyYW1lIHdpZHRoPVwiNTYwXCIgaGVpZ2h0PVwiMzE1XCIgc3JjPVwiJHtzdHJlYW1Vcmx9XCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7XG5cbiAgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKCkge1xuICAgIGNvbnN0IHRvcFJlZiA9IGlucHV0LmN1cnJlbnQ7XG4gICAgaWYgKHRvcFJlZiAmJiB0b3BSZWYuaW5wdXQgJiYgdG9wUmVmLmlucHV0LmN1cnJlbnQpIHtcbiAgICAgIHRvcFJlZi5pbnB1dC5jdXJyZW50LnNlbGVjdCgpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIGRvVG9hc3QoeyBtZXNzYWdlOiBzbmFja01lc3NhZ2UgfHwgJ0VtYmVkIGxpbmsgY29waWVkJyB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIC8vIFdlIGhhdmUgdG8gZ28gYSBsYXllciBkZWVwIHNpbmNlIHRoZSBpbnB1dCBpcyBpbnNpZGUgdGhlIGZvcm0gY29tcG9uZW50XG4gICAgY29uc3QgdG9wUmVmID0gaW5wdXQgJiYgaW5wdXQuY3VycmVudDtcbiAgICBpZiAodG9wUmVmICYmIHRvcFJlZi5pbnB1dCAmJiB0b3BSZWYuaW5wdXQuY3VycmVudCkge1xuICAgICAgdG9wUmVmLmlucHV0LmN1cnJlbnQuc2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25cIj5cbiAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1maWVsZC0tY29weWFibGVcIlxuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIHZhbHVlPXtlbWJlZFRleHQgfHwgJyd9XG4gICAgICAgIHJlZj17aW5wdXR9XG4gICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGljb249e0lDT05TLkNPUFl9XG4gICAgICAgICAgYnV0dG9uPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICBsYWJlbD17X18oJ0NvcHknKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQoKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFXQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/embedTextArea/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/errorBoundary/index.js": -/*!**********************************************!*\ - !*** ../ui/component/errorBoundary/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/component/errorBoundary/view.jsx\");\n // TODO: bring in device/user(?) info in the future\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2Vycm9yQm91bmRhcnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2Vycm9yQm91bmRhcnkvaW5kZXguanM/ZDA1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL3ZpZXcnO1xuXG4vLyBUT0RPOiBicmluZyBpbiBkZXZpY2UvdXNlcig/KSBpbmZvIGluIHRoZSBmdXR1cmVcbmV4cG9ydCBkZWZhdWx0IEVycm9yQm91bmRhcnk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/errorBoundary/index.js\n"); - -/***/ }), - -/***/ "../ui/component/errorBoundary/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/errorBoundary/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var native__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! native */ \"../ui/native.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_7__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inherits(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n _classCallCheck(this, ErrorBoundary);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ErrorBoundary).call(this));\n _this.state = {\n hasError: false,\n sentryEventId: undefined,\n desktopErrorReported: false\n };\n _assertThisInitialized(_this).refresh = _this.refresh.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ErrorBoundary, [{\n key: \"componentDidCatch\",\n value: function componentDidCatch(error, errorInfo) {\n var _this2 = this;\n\n analytics__WEBPACK_IMPORTED_MODULE_4__[\"default\"].sentryError(error, errorInfo).then(function (sentryEventId) {\n _this2.setState({\n sentryEventId: sentryEventId\n });\n });\n }\n }, {\n key: \"refresh\",\n value: function refresh() {\n var history = this.props.history; // use history.replace instead of history.push so the user can't click back to the errored page\n\n history.replace('');\n this.setState({\n hasError: false\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var hasError = this.state.hasError;\n var _this$state = this.state,\n sentryEventId = _this$state.sentryEventId,\n desktopErrorReported = _this$state.desktopErrorReported;\n var errorWasReported = true ? sentryEventId !== null : undefined;\n\n if (hasError) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"main main--full-width main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n type: \"sad\",\n title: __('Aw shucks!'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n tokens: {\n refreshing_the_app_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n className: \"load-screen__button\",\n label: __('refreshing the app'),\n onClick: this.refresh\n })\n }\n }, \"There was an error. Try %refreshing_the_app_link% to fix it. If that doesn't work, try pressing Ctrl+R/Cmd+R.\")\n }), !errorWasReported && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, __('You are not currently sharing diagnostic data so this error was not reported.'))), errorWasReported && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, __('Error ID: %sentryEventId%', {\n sentryEventId: sentryEventId\n }))));\n }\n\n return this.props.children;\n }\n }], [{\n key: \"getDerivedStateFromError\",\n value: function getDerivedStateFromError() {\n return {\n hasError: true\n };\n }\n }]);\n\n return ErrorBoundary;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(ErrorBoundary));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2Vycm9yQm91bmRhcnkvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2Vycm9yQm91bmRhcnkvdmlldy5qc3g/MGQ5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBZcmJsIGZyb20gJ2NvbXBvbmVudC95cmJsJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBhbmFseXRpY3MgZnJvbSAnYW5hbHl0aWNzJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IE5hdGl2ZSBmcm9tICduYXRpdmUnO1xuaW1wb3J0IHsgTGJyeSB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogTm9kZSxcbiAgaGlzdG9yeToge1xuICAgIHJlcGxhY2U6IHN0cmluZyA9PiB2b2lkLFxuICB9LFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgaGFzRXJyb3I6IGJvb2xlYW4sXG4gIHNlbnRyeUV2ZW50SWQ6ID9zdHJpbmcsXG4gIGRlc2t0b3BFcnJvclJlcG9ydGVkOiBib29sZWFuLFxufTtcblxuY2xhc3MgRXJyb3JCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0YXRlID0geyBoYXNFcnJvcjogZmFsc2UsIHNlbnRyeUV2ZW50SWQ6IHVuZGVmaW5lZCwgZGVza3RvcEVycm9yUmVwb3J0ZWQ6IGZhbHNlIH07XG5cbiAgICAodGhpczogYW55KS5yZWZyZXNoID0gdGhpcy5yZWZyZXNoLmJpbmQodGhpcyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkge1xuICAgIHJldHVybiB7IGhhc0Vycm9yOiB0cnVlIH07XG4gIH1cblxuICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgYW5hbHl0aWNzLnNlbnRyeUVycm9yKGVycm9yLCBlcnJvckluZm8pLnRoZW4oc2VudHJ5RXZlbnRJZCA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2VudHJ5RXZlbnRJZCB9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBjb25zdCB7IGhpc3RvcnkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyB1c2UgaGlzdG9yeS5yZXBsYWNlIGluc3RlYWQgb2YgaGlzdG9yeS5wdXNoIHNvIHRoZSB1c2VyIGNhbid0IGNsaWNrIGJhY2sgdG8gdGhlIGVycm9yZWQgcGFnZVxuICAgIGhpc3RvcnkucmVwbGFjZSgnJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGhhc0Vycm9yIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgc2VudHJ5RXZlbnRJZCwgZGVza3RvcEVycm9yUmVwb3J0ZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBlcnJvcldhc1JlcG9ydGVkID0gSVNfV0VCID8gc2VudHJ5RXZlbnRJZCAhPT0gbnVsbCA6IGRlc2t0b3BFcnJvclJlcG9ydGVkO1xuXG4gICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1haW4gbWFpbi0tZnVsbC13aWR0aCBtYWluLS1lbXB0eVwiPlxuICAgICAgICAgIDxZcmJsXG4gICAgICAgICAgICB0eXBlPVwic2FkXCJcbiAgICAgICAgICAgIHRpdGxlPXtfXygnQXcgc2h1Y2tzIScpfVxuICAgICAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgIHJlZnJlc2hpbmdfdGhlX2FwcF9saW5rOiAoXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsb2FkLXNjcmVlbl9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ3JlZnJlc2hpbmcgdGhlIGFwcCcpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucmVmcmVzaH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFRoZXJlIHdhcyBhbiBlcnJvci4gVHJ5ICVyZWZyZXNoaW5nX3RoZV9hcHBfbGluayUgdG8gZml4IGl0LiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5IHByZXNzaW5nXG4gICAgICAgICAgICAgICAgQ3RybCtSL0NtZCtSLlxuICAgICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyFlcnJvcldhc1JlcG9ydGVkICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXJyb3Itd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+XG4gICAgICAgICAgICAgICAge19fKCdZb3UgYXJlIG5vdCBjdXJyZW50bHkgc2hhcmluZyBkaWFnbm9zdGljIGRhdGEgc28gdGhpcyBlcnJvciB3YXMgbm90IHJlcG9ydGVkLicpfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2Vycm9yV2FzUmVwb3J0ZWQgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJlcnJvci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImVycm9yLXRleHRcIj57X18oJ0Vycm9yIElEOiAlc2VudHJ5RXZlbnRJZCUnLCB7IHNlbnRyeUV2ZW50SWQgfSl9PC9zcGFuPlxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoRXJyb3JCb3VuZGFyeSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFKQTtBQUtBO0FBQ0E7OztBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFJQTs7O0FBRUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7QUFEQTtBQUpBO0FBc0JBO0FBQUE7QUFDQTtBQUFBO0FBT0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7OztBQXRFQTtBQUNBO0FBQUE7QUFBQTtBQUNBOzs7O0FBVkE7QUFDQTtBQWdGQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/errorBoundary/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/expandable/index.js": -/*!*******************************************!*\ - !*** ../ui/component/expandable/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/expandable/view.jsx\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, null)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2V4cGFuZGFibGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2V4cGFuZGFibGUvaW5kZXguanM/ZmRiOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IEV4cGFuZGFibGUgZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgbnVsbFxuKShFeHBhbmRhYmxlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/expandable/index.js\n"); - -/***/ }), - -/***/ "../ui/component/expandable/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/expandable/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Expandable; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var _reach_rect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reach/rect */ \"../node_modules/@reach/rect/es/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\nvar COLLAPSED_HEIGHT = 120;\nfunction Expandable(props) {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n expanded = _useState2[0],\n setExpanded = _useState2[1];\n\n var children = props.children;\n var ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n var rect = Object(_reach_rect__WEBPACK_IMPORTED_MODULE_3__[\"useRect\"])(ref);\n\n function handleClick() {\n setExpanded(!expanded);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n ref: ref\n }, rect && rect.height > COLLAPSED_HEIGHT ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n ref: ref\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()({\n 'expandable--open': expanded,\n 'expandable--closed': !expanded\n })\n }, children), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n className: \"expandable__button\",\n label: expanded ? __('Less') : __('More'),\n onClick: handleClick\n })) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, children));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2V4cGFuZGFibGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2V4cGFuZGFibGUvdmlldy5qc3g/NGYwMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyB1c2VSZWN0IH0gZnJvbSAnQHJlYWNoL3JlY3QnO1xuXG5jb25zdCBDT0xMQVBTRURfSEVJR0hUID0gMTIwO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QkTm9kZSB8IEFycmF5PFJlYWN0JE5vZGU+LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXhwYW5kYWJsZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgcmVjdCA9IHVzZVJlY3QocmVmKTtcblxuICBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICBzZXRFeHBhbmRlZCghZXhwYW5kZWQpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfT5cbiAgICAgIHtyZWN0ICYmIHJlY3QuaGVpZ2h0ID4gQ09MTEFQU0VEX0hFSUdIVCA/IChcbiAgICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgICAgICAgJ2V4cGFuZGFibGUtLW9wZW4nOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgJ2V4cGFuZGFibGUtLWNsb3NlZCc6ICFleHBhbmRlZCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZGFibGVfX2J1dHRvblwiXG4gICAgICAgICAgICBsYWJlbD17ZXhwYW5kZWQgPyBfXygnTGVzcycpIDogX18oJ01vcmUnKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdj57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBWUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/expandable/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/externalLink/index.js": -/*!*********************************************!*\ - !*** ../ui/component/externalLink/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/externalLink/view.jsx\");\n\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2V4dGVybmFsTGluay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZXh0ZXJuYWxMaW5rL2luZGV4LmpzPzZjYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IEV4dGVybmFsTGluayBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoKSA9PiAoe30pO1xuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIG9wZW5Nb2RhbDogKG1vZGFsLCBwcm9wcykgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwobW9kYWwsIHByb3BzKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKEV4dGVybmFsTGluayk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/externalLink/index.js\n"); - -/***/ }), - -/***/ "../ui/component/externalLink/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/externalLink/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimLink__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/claimLink */ \"../ui/component/claimLink/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\nvar ExternalLink = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ExternalLink, _React$PureComponent);\n\n function ExternalLink() {\n _classCallCheck(this, ExternalLink);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ExternalLink).apply(this, arguments));\n }\n\n _createClass(ExternalLink, [{\n key: \"createLink\",\n value: function createLink() {\n var _this$props = this.props,\n href = _this$props.href,\n title = _this$props.title,\n embed = _this$props.embed,\n children = _this$props.children,\n openModal = _this$props.openModal; // Regex for url protocol\n\n var protocolRegex = new RegExp('^(https?|lbry|mailto)+:', 'i');\n var protocol = href ? protocolRegex.exec(href) : null; // Return plain text if no valid url\n\n var element = react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"span\", null, children); // Return external link if protocol is http or https\n\n if (protocol && (protocol[0] === 'http:' || protocol[0] === 'https:' || protocol[0] === 'mailto:')) {\n element = react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n iconRight: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"EXTERNAL\"],\n title: title || href,\n label: children,\n className: \"button--external-link\",\n onClick: function onClick() {\n openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CONFIRM_EXTERNAL_RESOURCE\"], {\n uri: href,\n isTrusted: false\n });\n }\n });\n } // Return local link if protocol is lbry uri\n\n\n if (protocol && protocol[0] === 'lbry:' && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"isURIValid\"])(href)) {\n element = react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_claimLink__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: href,\n autoEmbed: embed\n }, children);\n }\n\n return element;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var RenderLink = function RenderLink() {\n return _this.createLink();\n };\n\n return react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](RenderLink, null);\n }\n }]);\n\n return ExternalLink;\n}(react__WEBPACK_IMPORTED_MODULE_2__[\"PureComponent\"]);\n\n_defineProperty(ExternalLink, \"defaultProps\", {\n href: null,\n title: null,\n embed: false\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ExternalLink);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2V4dGVybmFsTGluay92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZXh0ZXJuYWxMaW5rL3ZpZXcuanN4PzFmOTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzVVJJVmFsaWQgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ2xhaW1MaW5rIGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpbmsnO1xuXG50eXBlIFByb3BzID0ge1xuICBocmVmOiBzdHJpbmcsXG4gIHRpdGxlPzogc3RyaW5nLFxuICBlbWJlZD86IGJvb2xlYW4sXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlLFxuICBvcGVuTW9kYWw6IChpZDogc3RyaW5nLCB7IHVyaTogc3RyaW5nIH0pID0+IHZvaWQsXG59O1xuXG5jbGFzcyBFeHRlcm5hbExpbmsgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgaHJlZjogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICBlbWJlZDogZmFsc2UsXG4gIH07XG5cbiAgY3JlYXRlTGluaygpIHtcbiAgICBjb25zdCB7IGhyZWYsIHRpdGxlLCBlbWJlZCwgY2hpbGRyZW4sIG9wZW5Nb2RhbCB9ID0gdGhpcy5wcm9wcztcbiAgICAvLyBSZWdleCBmb3IgdXJsIHByb3RvY29sXG4gICAgY29uc3QgcHJvdG9jb2xSZWdleCA9IG5ldyBSZWdFeHAoJ14oaHR0cHM/fGxicnl8bWFpbHRvKSs6JywgJ2knKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IGhyZWYgPyBwcm90b2NvbFJlZ2V4LmV4ZWMoaHJlZikgOiBudWxsO1xuICAgIC8vIFJldHVybiBwbGFpbiB0ZXh0IGlmIG5vIHZhbGlkIHVybFxuICAgIGxldCBlbGVtZW50ID0gPHNwYW4+e2NoaWxkcmVufTwvc3Bhbj47XG4gICAgLy8gUmV0dXJuIGV4dGVybmFsIGxpbmsgaWYgcHJvdG9jb2wgaXMgaHR0cCBvciBodHRwc1xuICAgIGlmIChwcm90b2NvbCAmJiAocHJvdG9jb2xbMF0gPT09ICdodHRwOicgfHwgcHJvdG9jb2xbMF0gPT09ICdodHRwczonIHx8IHByb3RvY29sWzBdID09PSAnbWFpbHRvOicpKSB7XG4gICAgICBlbGVtZW50ID0gKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgaWNvblJpZ2h0PXtJQ09OUy5FWFRFUk5BTH1cbiAgICAgICAgICB0aXRsZT17dGl0bGUgfHwgaHJlZn1cbiAgICAgICAgICBsYWJlbD17Y2hpbGRyZW59XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYnV0dG9uLS1leHRlcm5hbC1saW5rXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBvcGVuTW9kYWwoTU9EQUxTLkNPTkZJUk1fRVhURVJOQUxfUkVTT1VSQ0UsIHsgdXJpOiBocmVmLCBpc1RydXN0ZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gbG9jYWwgbGluayBpZiBwcm90b2NvbCBpcyBsYnJ5IHVyaVxuICAgIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbFswXSA9PT0gJ2xicnk6JyAmJiBpc1VSSVZhbGlkKGhyZWYpKSB7XG4gICAgICBlbGVtZW50ID0gKFxuICAgICAgICA8Q2xhaW1MaW5rIHVyaT17aHJlZn0gYXV0b0VtYmVkPXtlbWJlZH0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0NsYWltTGluaz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgUmVuZGVyTGluayA9ICgpID0+IHRoaXMuY3JlYXRlTGluaygpO1xuICAgIHJldHVybiA8UmVuZGVyTGluayAvPjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFeHRlcm5hbExpbms7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBOzs7Ozs7Ozs7OztBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFSQTtBQVZBO0FBQ0E7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTs7OztBQTVDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBNkNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/externalLink/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileActions/index.js": -/*!********************************************!*\ - !*** ../ui/component/fileActions/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! fs */ \"./stubs/fs.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./view */ \"../ui/component/fileActions/view.jsx\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_8__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state),\n costInfo: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectCostInfoForUri\"])(props.uri)(state),\n supportOption: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"SUPPORT_OPTION\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_5__[\"doOpenModal\"])(modal, props));\n },\n prepareEdit: function prepareEdit(publishData, uri, fileInfo) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doPrepareEdit\"])(publishData, uri, fileInfo, fs__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_7__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVBY3Rpb25zL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlQWN0aW9ucy9pbmRleC5qcz9hNzMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsYWltSXNNaW5lLCBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmksIG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgZG9QcmVwYXJlRWRpdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgRmlsZUFjdGlvbnMgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IG1ha2VTZWxlY3RGaWxlUmVuZGVyTW9kZUZvclVyaSB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9jb250ZW50JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW1Jc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgZmlsZUluZm86IG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgcmVuZGVyTW9kZTogbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjb3N0SW5mbzogbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBzdXBwb3J0T3B0aW9uOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TVVBQT1JUX09QVElPTikoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBvcGVuTW9kYWw6IChtb2RhbCwgcHJvcHMpID0+IGRpc3BhdGNoKGRvT3Blbk1vZGFsKG1vZGFsLCBwcm9wcykpLFxuICBwcmVwYXJlRWRpdDogKHB1Ymxpc2hEYXRhLCB1cmksIGZpbGVJbmZvKSA9PiBkaXNwYXRjaChkb1ByZXBhcmVFZGl0KHB1Ymxpc2hEYXRhLCB1cmksIGZpbGVJbmZvLCBmcykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlQWN0aW9ucyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFDQTtBQVFBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileActions/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileActions/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/fileActions/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/fileDownloadLink */ \"../ui/component/fileDownloadLink/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\n\n\n\n\n\n\n\n\n\nfunction FileActions(props) {\n var fileInfo = props.fileInfo,\n uri = props.uri,\n openModal = props.openModal,\n claimIsMine = props.claimIsMine,\n claim = props.claim,\n costInfo = props.costInfo,\n renderMode = props.renderMode,\n supportOption = props.supportOption,\n prepareEdit = props.prepareEdit;\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n var webShareable = costInfo && costInfo.cost === 0 && constants_file_render_modes__WEBPACK_IMPORTED_MODULE_6__[\"WEB_SHAREABLE_MODES\"].includes(renderMode);\n var showDelete = claimIsMine || fileInfo && (fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0);\n var claimId = claim && claim.claim_id;\n var signingChannel = claim.signing_channel;\n var channelName = signingChannel && signingChannel.name; // We want to use the short form uri for editing\n // This is what the user is used to seeing, they don't care about the claim id\n // We will select the claim id before they publish\n\n var editUri;\n\n if (claimIsMine) {\n var uriObject = {\n streamName: claim.name,\n streamClaimId: claim.claim_id\n };\n\n if (channelName) {\n uriObject.channelName = channelName;\n }\n\n editUri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"buildURI\"])(uriObject);\n }\n\n var ActionWrapper = function ActionWrapper(props) {\n return isMobile ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, props.children) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section__actions section__actions--no-margin\"\n }, props.children);\n };\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"media__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ActionWrapper, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SHARE\"],\n label: __('Share'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SOCIAL_SHARE\"], {\n uri: uri,\n webShareable: webShareable\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"REPOST\"],\n label: __('Repost %count%', {\n count: claim.meta.reposted > 0 ? \"(\".concat(claim.meta.reposted, \")\") : ''\n }),\n requiresAuth: true,\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"REPOST\"], {\n uri: uri\n });\n }\n }), !claimIsMine && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"TIP\"],\n label: __('Tip'),\n requiresAuth: true,\n title: __('Send a tip to this creator'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SEND_TIP\"], {\n uri: uri,\n claimIsMine: claimIsMine,\n isSupport: false\n });\n }\n }), (claimIsMine || !claimIsMine && supportOption) && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SUPPORT\"],\n label: __('Support'),\n requiresAuth: true,\n title: __('Support this claim'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SEND_TIP\"], {\n uri: uri,\n claimIsMine: claimIsMine,\n isSupport: true\n });\n }\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ActionWrapper, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), claimIsMine && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"EDIT\"],\n label: __('Edit'),\n navigate: \"/$/publish\",\n onClick: function onClick() {\n prepareEdit(claim, editUri, fileInfo);\n }\n }), showDelete && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Remove from your library'),\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"DELETE\"],\n description: __('Delete'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CONFIRM_FILE_REMOVE\"], {\n uri: uri\n });\n }\n }), !claimIsMine && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Report content'),\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"REPORT\"],\n href: \"https://lbry.com/dmca/\".concat(claimId)\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileActions);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVBY3Rpb25zL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlQWN0aW9ucy92aWV3LmpzeD9mNTJmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBGaWxlRG93bmxvYWRMaW5rIGZyb20gJ2NvbXBvbmVudC9maWxlRG93bmxvYWRMaW5rJztcbmltcG9ydCB7IGJ1aWxkVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgKiBhcyBSRU5ERVJfTU9ERVMgZnJvbSAnY29uc3RhbnRzL2ZpbGVfcmVuZGVyX21vZGVzJztcbmltcG9ydCB1c2VJc01vYmlsZSBmcm9tICdlZmZlY3RzL3VzZS1pcy1tb2JpbGUnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBvcGVuTW9kYWw6IChpZDogc3RyaW5nLCB7IHVyaTogc3RyaW5nLCBjbGFpbUlzTWluZT86IGJvb2xlYW4sIGlzU3VwcG9ydD86IGJvb2xlYW4gfSkgPT4gdm9pZCxcbiAgcHJlcGFyZUVkaXQ6ICh7fSwgc3RyaW5nLCB7fSkgPT4gdm9pZCxcbiAgY2xhaW1Jc01pbmU6IGJvb2xlYW4sXG4gIGZpbGVJbmZvOiBGaWxlTGlzdEl0ZW0sXG4gIGNvc3RJbmZvOiA/eyBjb3N0OiBudW1iZXIgfSxcbiAgcmVuZGVyTW9kZTogc3RyaW5nLFxuICBzdXBwb3J0T3B0aW9uOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gRmlsZUFjdGlvbnMocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZmlsZUluZm8sIHVyaSwgb3Blbk1vZGFsLCBjbGFpbUlzTWluZSwgY2xhaW0sIGNvc3RJbmZvLCByZW5kZXJNb2RlLCBzdXBwb3J0T3B0aW9uLCBwcmVwYXJlRWRpdCB9ID0gcHJvcHM7XG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlSXNNb2JpbGUoKTtcbiAgY29uc3Qgd2ViU2hhcmVhYmxlID0gY29zdEluZm8gJiYgY29zdEluZm8uY29zdCA9PT0gMCAmJiBSRU5ERVJfTU9ERVMuV0VCX1NIQVJFQUJMRV9NT0RFUy5pbmNsdWRlcyhyZW5kZXJNb2RlKTtcbiAgY29uc3Qgc2hvd0RlbGV0ZSA9IGNsYWltSXNNaW5lIHx8IChmaWxlSW5mbyAmJiAoZmlsZUluZm8ud3JpdHRlbl9ieXRlcyA+IDAgfHwgZmlsZUluZm8uYmxvYnNfY29tcGxldGVkID4gMCkpO1xuICBjb25zdCBjbGFpbUlkID0gY2xhaW0gJiYgY2xhaW0uY2xhaW1faWQ7XG4gIGNvbnN0IHsgc2lnbmluZ19jaGFubmVsOiBzaWduaW5nQ2hhbm5lbCB9ID0gY2xhaW07XG4gIGNvbnN0IGNoYW5uZWxOYW1lID0gc2lnbmluZ0NoYW5uZWwgJiYgc2lnbmluZ0NoYW5uZWwubmFtZTtcbiAgLy8gV2Ugd2FudCB0byB1c2UgdGhlIHNob3J0IGZvcm0gdXJpIGZvciBlZGl0aW5nXG4gIC8vIFRoaXMgaXMgd2hhdCB0aGUgdXNlciBpcyB1c2VkIHRvIHNlZWluZywgdGhleSBkb24ndCBjYXJlIGFib3V0IHRoZSBjbGFpbSBpZFxuICAvLyBXZSB3aWxsIHNlbGVjdCB0aGUgY2xhaW0gaWQgYmVmb3JlIHRoZXkgcHVibGlzaFxuICBsZXQgZWRpdFVyaTtcbiAgaWYgKGNsYWltSXNNaW5lKSB7XG4gICAgY29uc3QgdXJpT2JqZWN0OiB7IHN0cmVhbU5hbWU6IHN0cmluZywgc3RyZWFtQ2xhaW1JZDogc3RyaW5nLCBjaGFubmVsTmFtZT86IHN0cmluZyB9ID0ge1xuICAgICAgc3RyZWFtTmFtZTogY2xhaW0ubmFtZSxcbiAgICAgIHN0cmVhbUNsYWltSWQ6IGNsYWltLmNsYWltX2lkLFxuICAgIH07XG4gICAgaWYgKGNoYW5uZWxOYW1lKSB7XG4gICAgICB1cmlPYmplY3QuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcbiAgICB9XG5cbiAgICBlZGl0VXJpID0gYnVpbGRVUkkodXJpT2JqZWN0KTtcbiAgfVxuXG4gIGNvbnN0IEFjdGlvbldyYXBwZXIgPSAocHJvcHM6IHsgY2hpbGRyZW46IE5vZGUgfSkgPT5cbiAgICBpc01vYmlsZSA/IChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD57cHJvcHMuY2hpbGRyZW59PC9SZWFjdC5GcmFnbWVudD5cbiAgICApIDogKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zIHNlY3Rpb25fX2FjdGlvbnMtLW5vLW1hcmdpblwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9fYWN0aW9uc1wiPlxuICAgICAgPEFjdGlvbldyYXBwZXI+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBidXR0b249XCJhbHRcIlxuICAgICAgICAgIGljb249e0lDT05TLlNIQVJFfVxuICAgICAgICAgIGxhYmVsPXtfXygnU2hhcmUnKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLlNPQ0lBTF9TSEFSRSwgeyB1cmksIHdlYlNoYXJlYWJsZSB9KX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgICAgaWNvbj17SUNPTlMuUkVQT1NUfVxuICAgICAgICAgIGxhYmVsPXtfXygnUmVwb3N0ICVjb3VudCUnLCB7IGNvdW50OiBjbGFpbS5tZXRhLnJlcG9zdGVkID4gMCA/IGAoJHtjbGFpbS5tZXRhLnJlcG9zdGVkfSlgIDogJycgfSl9XG4gICAgICAgICAgcmVxdWlyZXNBdXRoPXtJU19XRUJ9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3Blbk1vZGFsKE1PREFMUy5SRVBPU1QsIHsgdXJpIH0pfVxuICAgICAgICAvPlxuXG4gICAgICAgIHshY2xhaW1Jc01pbmUgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgICAgICBpY29uPXtJQ09OUy5USVB9XG4gICAgICAgICAgICBsYWJlbD17X18oJ1RpcCcpfVxuICAgICAgICAgICAgcmVxdWlyZXNBdXRoPXtJU19XRUJ9XG4gICAgICAgICAgICB0aXRsZT17X18oJ1NlbmQgYSB0aXAgdG8gdGhpcyBjcmVhdG9yJyl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLlNFTkRfVElQLCB7IHVyaSwgY2xhaW1Jc01pbmUsIGlzU3VwcG9ydDogZmFsc2UgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyhjbGFpbUlzTWluZSB8fCAoIWNsYWltSXNNaW5lICYmIHN1cHBvcnRPcHRpb24pKSAmJiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgIGljb249e0lDT05TLlNVUFBPUlR9XG4gICAgICAgICAgICBsYWJlbD17X18oJ1N1cHBvcnQnKX1cbiAgICAgICAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgICAgICAgdGl0bGU9e19fKCdTdXBwb3J0IHRoaXMgY2xhaW0nKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wZW5Nb2RhbChNT0RBTFMuU0VORF9USVAsIHsgdXJpLCBjbGFpbUlzTWluZSwgaXNTdXBwb3J0OiB0cnVlIH0pfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L0FjdGlvbldyYXBwZXI+XG5cbiAgICAgIDxBY3Rpb25XcmFwcGVyPlxuICAgICAgICA8RmlsZURvd25sb2FkTGluayB1cmk9e3VyaX0gLz5cblxuICAgICAgICB7Y2xhaW1Jc01pbmUgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgICAgICBpY29uPXtJQ09OUy5FRElUfVxuICAgICAgICAgICAgbGFiZWw9e19fKCdFZGl0Jyl9XG4gICAgICAgICAgICBuYXZpZ2F0ZT1cIi8kL3B1Ymxpc2hcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBwcmVwYXJlRWRpdChjbGFpbSwgZWRpdFVyaSwgZmlsZUluZm8pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHtzaG93RGVsZXRlICYmIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17X18oJ1JlbW92ZSBmcm9tIHlvdXIgbGlicmFyeScpfVxuICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgIGljb249e0lDT05TLkRFTEVURX1cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfXygnRGVsZXRlJyl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLkNPTkZJUk1fRklMRV9SRU1PVkUsIHsgdXJpIH0pfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshY2xhaW1Jc01pbmUgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpdGxlPXtfXygnUmVwb3J0IGNvbnRlbnQnKX1cbiAgICAgICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgICAgICBpY29uPXtJQ09OUy5SRVBPUlR9XG4gICAgICAgICAgICBocmVmPXtgaHR0cHM6Ly9sYnJ5LmNvbS9kbWNhLyR7Y2xhaW1JZH1gfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L0FjdGlvbldyYXBwZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVBY3Rpb25zO1xuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU5BO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFZQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileActions/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileAuthor/index.js": -/*!*******************************************!*\ - !*** ../ui/component/fileAuthor/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/fileAuthor/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n channelUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectChannelForClaimUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVBdXRob3IvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVBdXRob3IvaW5kZXguanM/ZDgyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEZpbGVBdXRob3IgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2hhbm5lbFVyaTogbWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCkoRmlsZUF1dGhvcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileAuthor/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileAuthor/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/fileAuthor/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n\n\n\nfunction FileAuthor(props) {\n var channelUri = props.channelUri;\n return channelUri ? react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimPreview__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: channelUri,\n type: \"inline\",\n properties: false,\n hideBlock: true\n }) : react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"claim-preview--inline claim-preview__title\"\n }, __('Anonymous'));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileAuthor);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVBdXRob3Ivdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVBdXRob3Ivdmlldy5qc3g/OTQ4YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hhbm5lbFVyaTogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gRmlsZUF1dGhvcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjaGFubmVsVXJpIH0gPSBwcm9wcztcblxuICByZXR1cm4gY2hhbm5lbFVyaSA/IChcbiAgICA8Q2xhaW1QcmV2aWV3IHVyaT17Y2hhbm5lbFVyaX0gdHlwZT1cImlubGluZVwiIHByb3BlcnRpZXM9e2ZhbHNlfSBoaWRlQmxvY2sgLz5cbiAgKSA6IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXctLWlubGluZSBjbGFpbS1wcmV2aWV3X190aXRsZVwiPntfXygnQW5vbnltb3VzJyl9PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVBdXRob3I7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileAuthor/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileDescription/index.js": -/*!************************************************!*\ - !*** ../ui/component/fileDescription/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/fileDescription/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataForUri\"])(props.uri)(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state),\n tags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTagsForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEZXNjcmlwdGlvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZURlc2NyaXB0aW9uL2luZGV4LmpzPzQ0NWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpLCBtYWtlU2VsZWN0VGFnc0ZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlciB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IEZpbGVEZXNjcmlwdGlvbiBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBtZXRhZGF0YTogbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICB1c2VyOiBzZWxlY3RVc2VyKHN0YXRlKSxcbiAgdGFnczogbWFrZVNlbGVjdFRhZ3NGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIG51bGwpKEZpbGVEZXNjcmlwdGlvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileDescription/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileDescription/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/fileDescription/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/markdown-preview */ \"../ui/component/common/markdown-preview.jsx\");\n/* harmony import */ var component_claimTags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimTags */ \"../ui/component/claimTags/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar FileDescription = /*#__PURE__*/function (_PureComponent) {\n _inherits(FileDescription, _PureComponent);\n\n function FileDescription() {\n _classCallCheck(this, FileDescription);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(FileDescription).apply(this, arguments));\n }\n\n _createClass(FileDescription, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n uri = _this$props.uri,\n claim = _this$props.claim,\n metadata = _this$props.metadata,\n tags = _this$props.tags;\n\n if (!claim || !metadata) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __('Empty claim or metadata info.'));\n }\n\n var description = metadata.description;\n if (!description && !(tags && tags.length)) return null;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Description'),\n defaultExpand: true,\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, description && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__info-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n content: description\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimTags__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri,\n type: \"large\"\n }))\n }));\n }\n }]);\n\n return FileDescription;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileDescription);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEZXNjcmlwdGlvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZURlc2NyaXB0aW9uL3ZpZXcuanN4P2JhOGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNYXJrZG93blByZXZpZXcgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3JztcbmltcG9ydCBDbGFpbVRhZ3MgZnJvbSAnY29tcG9uZW50L2NsYWltVGFncyc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBtZXRhZGF0YTogU3RyZWFtTWV0YWRhdGEsXG4gIHVzZXI6ID9hbnksXG4gIHRhZ3M6IGFueSxcbn07XG5cbmNsYXNzIEZpbGVEZXNjcmlwdGlvbiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdXJpLCBjbGFpbSwgbWV0YWRhdGEsIHRhZ3MgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIWNsYWltIHx8ICFtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImVtcHR5XCI+e19fKCdFbXB0eSBjbGFpbSBvciBtZXRhZGF0YSBpbmZvLicpfTwvc3Bhbj47XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiB9ID0gbWV0YWRhdGE7XG5cbiAgICBpZiAoIWRlc2NyaXB0aW9uICYmICEodGFncyAmJiB0YWdzLmxlbmd0aCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxDYXJkXG4gICAgICAgICAgdGl0bGU9e19fKCdEZXNjcmlwdGlvbicpfVxuICAgICAgICAgIGRlZmF1bHRFeHBhbmRcbiAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9faW5mby10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICA8TWFya2Rvd25QcmV2aWV3IGNvbnRlbnQ9e2Rlc2NyaXB0aW9ufSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q2xhaW1UYWdzIHVyaT17dXJpfSB0eXBlPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVEZXNjcmlwdGlvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBVkE7QUFnQkE7Ozs7QUE3QkE7QUFDQTtBQStCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileDescription/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileDetails/index.js": -/*!********************************************!*\ - !*** ../ui/component/fileDetails/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_file__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/file */ \"../ui/redux/actions/file.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/fileDetails/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n contentType: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectContentTypeForUri\"])(props.uri)(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataForUri\"])(props.uri)(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openFolder: function openFolder(path) {\n return dispatch(Object(redux_actions_file__WEBPACK_IMPORTED_MODULE_3__[\"doOpenFileInFolder\"])(path));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEZXRhaWxzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlRGV0YWlscy9pbmRleC5qcz9kMjM0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIG1ha2VTZWxlY3RDb250ZW50VHlwZUZvclVyaSxcbiAgbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpLFxuICBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmksXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlciB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgZG9PcGVuRmlsZUluRm9sZGVyIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9maWxlJztcbmltcG9ydCBGaWxlRGV0YWlscyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjb250ZW50VHlwZTogbWFrZVNlbGVjdENvbnRlbnRUeXBlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBmaWxlSW5mbzogbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBtZXRhZGF0YTogbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICB1c2VyOiBzZWxlY3RVc2VyKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3BlbkZvbGRlcjogcGF0aCA9PiBkaXNwYXRjaChkb09wZW5GaWxlSW5Gb2xkZXIocGF0aCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShGaWxlRGV0YWlscyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileDetails/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileDetails/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/fileDetails/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar FileDetails = /*#__PURE__*/function (_PureComponent) {\n _inherits(FileDetails, _PureComponent);\n\n function FileDetails() {\n _classCallCheck(this, FileDetails);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(FileDetails).apply(this, arguments));\n }\n\n _createClass(FileDetails, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n uri = _this$props.uri,\n claim = _this$props.claim,\n contentType = _this$props.contentType,\n fileInfo = _this$props.fileInfo,\n metadata = _this$props.metadata,\n openFolder = _this$props.openFolder;\n\n if (!claim || !metadata) {\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __('Empty claim or metadata info.'));\n }\n\n var languages = metadata.languages,\n license = metadata.license;\n var mediaType = contentType || 'unknown';\n var fileSize = metadata.source && metadata.source.size ? formatBytes(metadata.source.size) : fileInfo && fileInfo.download_path && formatBytes(fileInfo.written_bytes);\n var downloadPath = fileInfo && fileInfo.download_path ? path__WEBPACK_IMPORTED_MODULE_4___default.a.normalize(fileInfo.download_path) : null;\n var downloadNote; // If the path is blank, file is not available. Streamed files won't have any blobs saved\n // Create path from name so the folder opens on click.\n\n if (fileInfo && fileInfo.blobs_completed >= 1 && fileInfo.download_path === null) {\n downloadPath = \"\".concat(fileInfo.download_directory, \"/\").concat(fileInfo.file_name);\n downloadNote = 'This file may have been streamed, moved or deleted';\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: __('File Details'),\n defaultExpand: false,\n actions: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"table\", {\n className: \"table table--condensed table--fixed table--file-details\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tbody\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, \" \", __('Content Type')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, mediaType)), claim && claim.meta.reposted > 0 && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, __('Reposts')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('View %count% reposts', {\n count: claim.meta.reposted\n }),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"], \"?\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_1__[\"REPOSTED_URI_KEY\"], \"=\").concat(encodeURIComponent(uri))\n }))), fileSize && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, \" \", __('File Size')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, fileSize)), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, \" \", __('Claim ID')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, claim.claim_id)), languages && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, __('Languages')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, languages.join(' '))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, __('License')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, license)), downloadPath && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, __('Downloaded to')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n className: \"button--download-link\",\n onClick: function onClick() {\n if (downloadPath) {\n openFolder(downloadPath);\n }\n },\n label: downloadNote || downloadPath.replace(/(.{10})/g, \"$1\\u200B\")\n })))))\n }));\n }\n }]);\n\n return FileDetails;\n}(react__WEBPACK_IMPORTED_MODULE_2__[\"PureComponent\"]); // move this with other helper functions when we re-use it\n\n\nfunction formatBytes(bytes) {\n var decimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n if (bytes === 0) return '0 Bytes';\n var k = 1024;\n var dm = decimals < 0 ? 0 : decimals;\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileDetails);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEZXRhaWxzL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlRGV0YWlscy92aWV3LmpzeD83ZGZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBmaWxlSW5mbzogRmlsZUxpc3RJdGVtLFxuICBtZXRhZGF0YTogU3RyZWFtTWV0YWRhdGEsXG4gIG9wZW5Gb2xkZXI6IHN0cmluZyA9PiB2b2lkLFxuICBjb250ZW50VHlwZTogc3RyaW5nLFxuICB1c2VyOiA/YW55LFxufTtcblxuY2xhc3MgRmlsZURldGFpbHMgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHVyaSwgY2xhaW0sIGNvbnRlbnRUeXBlLCBmaWxlSW5mbywgbWV0YWRhdGEsIG9wZW5Gb2xkZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIWNsYWltIHx8ICFtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImVtcHR5XCI+e19fKCdFbXB0eSBjbGFpbSBvciBtZXRhZGF0YSBpbmZvLicpfTwvc3Bhbj47XG4gICAgfVxuXG4gICAgY29uc3QgeyBsYW5ndWFnZXMsIGxpY2Vuc2UgfSA9IG1ldGFkYXRhO1xuXG4gICAgY29uc3QgbWVkaWFUeXBlID0gY29udGVudFR5cGUgfHwgJ3Vua25vd24nO1xuICAgIGNvbnN0IGZpbGVTaXplID1cbiAgICAgIG1ldGFkYXRhLnNvdXJjZSAmJiBtZXRhZGF0YS5zb3VyY2Uuc2l6ZVxuICAgICAgICA/IGZvcm1hdEJ5dGVzKG1ldGFkYXRhLnNvdXJjZS5zaXplKVxuICAgICAgICA6IGZpbGVJbmZvICYmIGZpbGVJbmZvLmRvd25sb2FkX3BhdGggJiYgZm9ybWF0Qnl0ZXMoZmlsZUluZm8ud3JpdHRlbl9ieXRlcyk7XG4gICAgbGV0IGRvd25sb2FkUGF0aCA9IGZpbGVJbmZvICYmIGZpbGVJbmZvLmRvd25sb2FkX3BhdGggPyBwYXRoLm5vcm1hbGl6ZShmaWxlSW5mby5kb3dubG9hZF9wYXRoKSA6IG51bGw7XG4gICAgbGV0IGRvd25sb2FkTm90ZTtcbiAgICAvLyBJZiB0aGUgcGF0aCBpcyBibGFuaywgZmlsZSBpcyBub3QgYXZhaWxhYmxlLiBTdHJlYW1lZCBmaWxlcyB3b24ndCBoYXZlIGFueSBibG9icyBzYXZlZFxuICAgIC8vIENyZWF0ZSBwYXRoIGZyb20gbmFtZSBzbyB0aGUgZm9sZGVyIG9wZW5zIG9uIGNsaWNrLlxuICAgIGlmIChmaWxlSW5mbyAmJiBmaWxlSW5mby5ibG9ic19jb21wbGV0ZWQgPj0gMSAmJiBmaWxlSW5mby5kb3dubG9hZF9wYXRoID09PSBudWxsKSB7XG4gICAgICBkb3dubG9hZFBhdGggPSBgJHtmaWxlSW5mby5kb3dubG9hZF9kaXJlY3Rvcnl9LyR7ZmlsZUluZm8uZmlsZV9uYW1lfWA7XG4gICAgICBkb3dubG9hZE5vdGUgPSAnVGhpcyBmaWxlIG1heSBoYXZlIGJlZW4gc3RyZWFtZWQsIG1vdmVkIG9yIGRlbGV0ZWQnO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxDYXJkXG4gICAgICAgICAgdGl0bGU9e19fKCdGaWxlIERldGFpbHMnKX1cbiAgICAgICAgICBkZWZhdWx0RXhwYW5kPXtmYWxzZX1cbiAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS0tY29uZGVuc2VkIHRhYmxlLS1maXhlZCB0YWJsZS0tZmlsZS1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQ+IHtfXygnQ29udGVudCBUeXBlJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZD57bWVkaWFUeXBlfTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB7Y2xhaW0gJiYgY2xhaW0ubWV0YS5yZXBvc3RlZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdSZXBvc3RzJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdWaWV3ICVjb3VudCUgcmVwb3N0cycsIHsgY291bnQ6IGNsYWltLm1ldGEucmVwb3N0ZWQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuRElTQ09WRVJ9PyR7Q1MuUkVQT1NURURfVVJJX0tFWX09JHtlbmNvZGVVUklDb21wb25lbnQodXJpKX1gfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2ZpbGVTaXplICYmIChcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPiB7X18oJ0ZpbGUgU2l6ZScpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57ZmlsZVNpemV9PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQ+IHtfXygnQ2xhaW0gSUQnKX08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPntjbGFpbS5jbGFpbV9pZH08L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICAgICAgICB7bGFuZ3VhZ2VzICYmIChcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPntfXygnTGFuZ3VhZ2VzJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPntsYW5ndWFnZXMuam9pbignICcpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRkPntfXygnTGljZW5zZScpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+e2xpY2Vuc2V9PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIHtkb3dubG9hZFBhdGggJiYgKFxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdEb3dubG9hZGVkIHRvJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIHsvKiB7ZG93bmxvYWRQYXRoLnJlcGxhY2UoLyguezEwfSkvZywgJyQxXFx1MjAwYicpfSAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ1dHRvbi0tZG93bmxvYWQtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3dubG9hZFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRm9sZGVyKGRvd25sb2FkUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17ZG93bmxvYWROb3RlIHx8IGRvd25sb2FkUGF0aC5yZXBsYWNlKC8oLnsxMH0pL2csICckMVxcdTIwMGInKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cbi8vIG1vdmUgdGhpcyB3aXRoIG90aGVyIGhlbHBlciBmdW5jdGlvbnMgd2hlbiB3ZSByZS11c2UgaXRcbmZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQnl0ZXMnO1xuXG4gIGNvbnN0IGsgPSAxMDI0O1xuICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG5cbiAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZURldGFpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQUFBO0FBU0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBUkE7QUFoREE7QUFtRUE7Ozs7QUE3RkE7QUFDQTtBQUNBO0FBOEZBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileDetails/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileDownloadLink/index.js": -/*!*************************************************!*\ - !*** ../ui/component/fileDownloadLink/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/fileDownloadLink/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n downloading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectDownloadingForUri\"])(props.uri)(state),\n loading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectLoadingForUri\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n costInfo: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectCostInfoForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doOpenModal\"])(modal, props));\n },\n pause: function pause() {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"doSetPlayingUri\"])(null));\n },\n download: function download(uri) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"doPlayUri\"])(uri, false, true, function () {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doAnalyticsView\"])(uri));\n }));\n },\n triggerViewEvent: function triggerViewEvent(uri) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doAnalyticsView\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEb3dubG9hZExpbmsvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVEb3dubG9hZExpbmsvaW5kZXguanM/Nzg4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpLFxuICBtYWtlU2VsZWN0RG93bmxvYWRpbmdGb3JVcmksXG4gIG1ha2VTZWxlY3RMb2FkaW5nRm9yVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUsXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IGRvT3Blbk1vZGFsLCBkb0FuYWx5dGljc1ZpZXcgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBkb1NldFBsYXlpbmdVcmksIGRvUGxheVVyaSB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvY29udGVudCc7XG5pbXBvcnQgRmlsZURvd25sb2FkTGluayBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBmaWxlSW5mbzogbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBkb3dubG9hZGluZzogbWFrZVNlbGVjdERvd25sb2FkaW5nRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBsb2FkaW5nOiBtYWtlU2VsZWN0TG9hZGluZ0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW1Jc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY29zdEluZm86IG1ha2VTZWxlY3RDb3N0SW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3Blbk1vZGFsOiAobW9kYWwsIHByb3BzKSA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChtb2RhbCwgcHJvcHMpKSxcbiAgcGF1c2U6ICgpID0+IGRpc3BhdGNoKGRvU2V0UGxheWluZ1VyaShudWxsKSksXG4gIGRvd25sb2FkOiB1cmkgPT4gZGlzcGF0Y2goZG9QbGF5VXJpKHVyaSwgZmFsc2UsIHRydWUsICgpID0+IGRpc3BhdGNoKGRvQW5hbHl0aWNzVmlldyh1cmkpKSkpLFxuICB0cmlnZ2VyVmlld0V2ZW50OiB1cmkgPT4gZGlzcGF0Y2goZG9BbmFseXRpY3NWaWV3KHVyaSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShGaWxlRG93bmxvYWRMaW5rKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFJQTtBQUFBO0FBQUE7QUFKQTtBQUFBO0FBQ0E7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileDownloadLink/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileDownloadLink/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/fileDownloadLink/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/lbrytv */ \"../ui/util/lbrytv.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_lbrytv__WEBPACK_IMPORTED_MODULE_4__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\nfunction FileDownloadLink(props) {\n var fileInfo = props.fileInfo,\n downloading = props.downloading,\n loading = props.loading,\n openModal = props.openModal,\n pause = props.pause,\n claimIsMine = props.claimIsMine,\n download = props.download,\n uri = props.uri,\n claim = props.claim,\n triggerViewEvent = props.triggerViewEvent,\n costInfo = props.costInfo,\n _props$buttonType = props.buttonType,\n buttonType = _props$buttonType === void 0 ? 'alt' : _props$buttonType,\n _props$showLabel = props.showLabel,\n showLabel = _props$showLabel === void 0 ? false : _props$showLabel,\n _props$hideOpenButton = props.hideOpenButton,\n hideOpenButton = _props$hideOpenButton === void 0 ? false : _props$hideOpenButton,\n _props$hideDownloadSt = props.hideDownloadStatus,\n hideDownloadStatus = _props$hideDownloadSt === void 0 ? false : _props$hideDownloadSt;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n viewEventSent = _useState2[0],\n setViewEventSent = _useState2[1];\n\n var cost = costInfo ? Number(costInfo.cost) : 0;\n var isPaidContent = cost > 0;\n\n if (!claim || true && isPaidContent) {\n return null;\n }\n\n var name = claim.name,\n claimId = claim.claim_id,\n value = claim.value;\n var fileName = value && value.source && value.source.name;\n var downloadUrl = Object(util_lbrytv__WEBPACK_IMPORTED_MODULE_4__[\"generateDownloadUrl\"])(name, claimId);\n\n function handleDownload(e) {\n ;\n\n if (!viewEventSent) {\n triggerViewEvent(uri);\n }\n\n setViewEventSent(true);\n ;\n }\n\n if (downloading || loading) {\n var progress = fileInfo && fileInfo.written_bytes > 0 ? fileInfo.written_bytes / fileInfo.total_bytes * 100 : 0;\n\n var _label = fileInfo && fileInfo.written_bytes > 0 ? progress.toFixed(0) + __('% downloaded') : __('Connecting...');\n\n return hideDownloadStatus ? null : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"download-text\"\n }, _label);\n }\n\n if (fileInfo && fileInfo.download_path && fileInfo.completed) {\n var openLabel = __('Open file');\n\n return hideOpenButton ? null : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: buttonType,\n title: openLabel,\n label: showLabel ? openLabel : null,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EXTERNAL\"],\n onClick: function onClick() {\n pause();\n openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"CONFIRM_EXTERNAL_RESOURCE\"], {\n path: fileInfo.download_path,\n isMine: claimIsMine\n });\n }\n });\n }\n\n var label = true ? __('Download') : undefined;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: buttonType,\n title: label,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOAD\"],\n label: showLabel ? label : null,\n onClick: handleDownload,\n download: fileName,\n href: downloadUrl\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileDownloadLink);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVEb3dubG9hZExpbmsvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVEb3dubG9hZExpbmsvdmlldy5qc3g/NDRmOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IGdlbmVyYXRlRG93bmxvYWRVcmwgfSBmcm9tICd1dGlsL2xicnl0dic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBjbGFpbTogU3RyZWFtQ2xhaW0sXG4gIGNsYWltSXNNaW5lOiBib29sZWFuLFxuICBkb3dubG9hZGluZzogYm9vbGVhbixcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgZmlsZUluZm86ID9GaWxlTGlzdEl0ZW0sXG4gIG9wZW5Nb2RhbDogKGlkOiBzdHJpbmcsIHsgcGF0aDogc3RyaW5nIH0pID0+IHZvaWQsXG4gIHBhdXNlOiAoKSA9PiB2b2lkLFxuICBkb3dubG9hZDogc3RyaW5nID0+IHZvaWQsXG4gIHRyaWdnZXJWaWV3RXZlbnQ6IHN0cmluZyA9PiB2b2lkLFxuICBjb3N0SW5mbzogP3sgY29zdDogc3RyaW5nIH0sXG4gIGJ1dHRvblR5cGU6ID9zdHJpbmcsXG4gIHNob3dMYWJlbDogP2Jvb2xlYW4sXG4gIGhpZGVPcGVuQnV0dG9uOiBib29sZWFuLFxuICBoaWRlRG93bmxvYWRTdGF0dXM6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBGaWxlRG93bmxvYWRMaW5rKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgZmlsZUluZm8sXG4gICAgZG93bmxvYWRpbmcsXG4gICAgbG9hZGluZyxcbiAgICBvcGVuTW9kYWwsXG4gICAgcGF1c2UsXG4gICAgY2xhaW1Jc01pbmUsXG4gICAgZG93bmxvYWQsXG4gICAgdXJpLFxuICAgIGNsYWltLFxuICAgIHRyaWdnZXJWaWV3RXZlbnQsXG4gICAgY29zdEluZm8sXG4gICAgYnV0dG9uVHlwZSA9ICdhbHQnLFxuICAgIHNob3dMYWJlbCA9IGZhbHNlLFxuICAgIGhpZGVPcGVuQnV0dG9uID0gZmFsc2UsXG4gICAgaGlkZURvd25sb2FkU3RhdHVzID0gZmFsc2UsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBbdmlld0V2ZW50U2VudCwgc2V0Vmlld0V2ZW50U2VudF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29zdCA9IGNvc3RJbmZvID8gTnVtYmVyKGNvc3RJbmZvLmNvc3QpIDogMDtcbiAgY29uc3QgaXNQYWlkQ29udGVudCA9IGNvc3QgPiAwO1xuICBpZiAoIWNsYWltIHx8IChJU19XRUIgJiYgaXNQYWlkQ29udGVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgbmFtZSwgY2xhaW1faWQ6IGNsYWltSWQsIHZhbHVlIH0gPSBjbGFpbTtcbiAgY29uc3QgZmlsZU5hbWUgPSB2YWx1ZSAmJiB2YWx1ZS5zb3VyY2UgJiYgdmFsdWUuc291cmNlLm5hbWU7XG4gIGNvbnN0IGRvd25sb2FkVXJsID0gZ2VuZXJhdGVEb3dubG9hZFVybChuYW1lLCBjbGFpbUlkKTtcblxuICBmdW5jdGlvbiBoYW5kbGVEb3dubG9hZChlKSB7XG47XG4gICAgaWYgKCF2aWV3RXZlbnRTZW50KSB7XG4gICAgICB0cmlnZ2VyVmlld0V2ZW50KHVyaSk7XG4gICAgfVxuICAgIHNldFZpZXdFdmVudFNlbnQodHJ1ZSk7XG47XG4gIH1cblxuICBpZiAoZG93bmxvYWRpbmcgfHwgbG9hZGluZykge1xuICAgIGNvbnN0IHByb2dyZXNzID0gZmlsZUluZm8gJiYgZmlsZUluZm8ud3JpdHRlbl9ieXRlcyA+IDAgPyAoZmlsZUluZm8ud3JpdHRlbl9ieXRlcyAvIGZpbGVJbmZvLnRvdGFsX2J5dGVzKSAqIDEwMCA6IDA7XG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgZmlsZUluZm8gJiYgZmlsZUluZm8ud3JpdHRlbl9ieXRlcyA+IDAgPyBwcm9ncmVzcy50b0ZpeGVkKDApICsgX18oJyUgZG93bmxvYWRlZCcpIDogX18oJ0Nvbm5lY3RpbmcuLi4nKTtcblxuICAgIHJldHVybiBoaWRlRG93bmxvYWRTdGF0dXMgPyBudWxsIDogPHNwYW4gY2xhc3NOYW1lPVwiZG93bmxvYWQtdGV4dFwiPntsYWJlbH08L3NwYW4+O1xuICB9XG5cbiAgaWYgKGZpbGVJbmZvICYmIGZpbGVJbmZvLmRvd25sb2FkX3BhdGggJiYgZmlsZUluZm8uY29tcGxldGVkKSB7XG4gICAgY29uc3Qgb3BlbkxhYmVsID0gX18oJ09wZW4gZmlsZScpO1xuICAgIHJldHVybiBoaWRlT3BlbkJ1dHRvbiA/IG51bGwgOiAoXG4gICAgICA8QnV0dG9uXG4gICAgICAgIGJ1dHRvbj17YnV0dG9uVHlwZX1cbiAgICAgICAgdGl0bGU9e29wZW5MYWJlbH1cbiAgICAgICAgbGFiZWw9e3Nob3dMYWJlbCA/IG9wZW5MYWJlbCA6IG51bGx9XG4gICAgICAgIGljb249e0lDT05TLkVYVEVSTkFMfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgcGF1c2UoKTtcbiAgICAgICAgICBvcGVuTW9kYWwoTU9EQUxTLkNPTkZJUk1fRVhURVJOQUxfUkVTT1VSQ0UsIHsgcGF0aDogZmlsZUluZm8uZG93bmxvYWRfcGF0aCwgaXNNaW5lOiBjbGFpbUlzTWluZSB9KTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0gSVNfV0VCID8gX18oJ0Rvd25sb2FkJykgOiBfXygnRG93bmxvYWQgdG8geW91ciBMaWJyYXJ5Jyk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBidXR0b249e2J1dHRvblR5cGV9XG4gICAgICB0aXRsZT17bGFiZWx9XG4gICAgICBpY29uPXtJQ09OUy5ET1dOTE9BRH1cbiAgICAgIGxhYmVsPXtzaG93TGFiZWwgPyBsYWJlbCA6IG51bGx9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVEb3dubG9hZH1cbiAgICAgIGRvd25sb2FkPXtmaWxlTmFtZX1cbiAgICAgIGhyZWY9e2Rvd25sb2FkVXJsfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVEb3dubG9hZExpbms7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUExQkE7QUFBQTtBQUFBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileDownloadLink/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/filePrice/index.js": -/*!******************************************!*\ - !*** ../ui/component/filePrice/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/filePrice/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n costInfo: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectCostInfoForUri\"])(props.uri)(state),\n fetching: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectFetchingCostInfoForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchCostInfo: function fetchCostInfo(uri) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doFetchCostInfoForUri\"])(uri));\n } // cancelFetchCostInfo: (uri) => dispatch(doCancelFetchCostInfoForUri(uri))\n\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVQcmljZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVByaWNlL2luZGV4LmpzP2Y2MTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpLCBkb0ZldGNoQ29zdEluZm9Gb3JVcmksIG1ha2VTZWxlY3RGZXRjaGluZ0Nvc3RJbmZvRm9yVXJpIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgRmlsZVByaWNlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNvc3RJbmZvOiBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGZldGNoaW5nOiBtYWtlU2VsZWN0RmV0Y2hpbmdDb3N0SW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgZmV0Y2hDb3N0SW5mbzogdXJpID0+IGRpc3BhdGNoKGRvRmV0Y2hDb3N0SW5mb0ZvclVyaSh1cmkpKSxcbiAgLy8gY2FuY2VsRmV0Y2hDb3N0SW5mbzogKHVyaSkgPT4gZGlzcGF0Y2goZG9DYW5jZWxGZXRjaENvc3RJbmZvRm9yVXJpKHVyaSkpXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKEZpbGVQcmljZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/filePrice/index.js\n"); - -/***/ }), - -/***/ "../ui/component/filePrice/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/filePrice/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar FilePrice = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FilePrice, _React$PureComponent);\n\n function FilePrice() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, FilePrice);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FilePrice)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"fetchCost\", function (props) {\n var costInfo = props.costInfo,\n fetchCostInfo = props.fetchCostInfo,\n uri = props.uri,\n fetching = props.fetching,\n claim = props.claim;\n\n if (costInfo === undefined && !fetching && claim) {\n fetchCostInfo(uri);\n }\n });\n\n return _this;\n }\n\n _createClass(FilePrice, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.fetchCost(this.props);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.fetchCost(this.props);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n costInfo = _this$props.costInfo,\n showFullPrice = _this$props.showFullPrice,\n badge = _this$props.badge,\n inheritStyle = _this$props.inheritStyle,\n showLBC = _this$props.showLBC,\n hideFree = _this$props.hideFree;\n\n if (costInfo && (!costInfo.cost || !costInfo.cost && hideFree)) {\n return null;\n }\n\n return costInfo ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n showFree: true,\n badge: badge,\n inheritStyle: inheritStyle,\n showLBC: showLBC,\n amount: costInfo.cost,\n isEstimate: !costInfo.includesData,\n showFullPrice: showFullPrice\n }) : null;\n }\n }]);\n\n return FilePrice;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(FilePrice, \"defaultProps\", {\n showFullPrice: false\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FilePrice);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVQcmljZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVByaWNlL3ZpZXcuanN4P2IxODkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ3JlZGl0QW1vdW50IGZyb20gJ2NvbXBvbmVudC9jb21tb24vY3JlZGl0LWFtb3VudCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNob3dGdWxsUHJpY2U6IGJvb2xlYW4sXG4gIGNvc3RJbmZvOiA/eyBpbmNsdWRlc0RhdGE6IGJvb2xlYW4sIGNvc3Q6IG51bWJlciB9LFxuICBmZXRjaENvc3RJbmZvOiBzdHJpbmcgPT4gdm9pZCxcbiAgdXJpOiBzdHJpbmcsXG4gIGZldGNoaW5nOiBib29sZWFuLFxuICBjbGFpbTogP3t9LFxuICAvLyBiZWxvdyBwcm9wcyBhcmUganVzdCBwYXNzZWQgdG8gPENyZWRpdEFtb3VudCAvPlxuICBiYWRnZT86IGJvb2xlYW4sXG4gIGluaGVyaXRTdHlsZT86IGJvb2xlYW4sXG4gIHNob3dMQkM/OiBib29sZWFuLFxuICBoaWRlRnJlZT86IGJvb2xlYW4sIC8vIGhpZGUgdGhlIGZpbGUgcHJpY2UgaWYgaXQncyBmcmVlXG59O1xuXG5jbGFzcyBGaWxlUHJpY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgc2hvd0Z1bGxQcmljZTogZmFsc2UsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5mZXRjaENvc3QodGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy5mZXRjaENvc3QodGhpcy5wcm9wcyk7XG4gIH1cblxuICBmZXRjaENvc3QgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjb3N0SW5mbywgZmV0Y2hDb3N0SW5mbywgdXJpLCBmZXRjaGluZywgY2xhaW0gfSA9IHByb3BzO1xuXG4gICAgaWYgKGNvc3RJbmZvID09PSB1bmRlZmluZWQgJiYgIWZldGNoaW5nICYmIGNsYWltKSB7XG4gICAgICBmZXRjaENvc3RJbmZvKHVyaSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNvc3RJbmZvLCBzaG93RnVsbFByaWNlLCBiYWRnZSwgaW5oZXJpdFN0eWxlLCBzaG93TEJDLCBoaWRlRnJlZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoY29zdEluZm8gJiYgKCFjb3N0SW5mby5jb3N0IHx8ICghY29zdEluZm8uY29zdCAmJiBoaWRlRnJlZSkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29zdEluZm8gPyAoXG4gICAgICA8Q3JlZGl0QW1vdW50XG4gICAgICAgIHNob3dGcmVlXG4gICAgICAgIGJhZGdlPXtiYWRnZX1cbiAgICAgICAgaW5oZXJpdFN0eWxlPXtpbmhlcml0U3R5bGV9XG4gICAgICAgIHNob3dMQkM9e3Nob3dMQkN9XG4gICAgICAgIGFtb3VudD17Y29zdEluZm8uY29zdH1cbiAgICAgICAgaXNFc3RpbWF0ZT17IWNvc3RJbmZvLmluY2x1ZGVzRGF0YX1cbiAgICAgICAgc2hvd0Z1bGxQcmljZT17c2hvd0Z1bGxQcmljZX1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVByaWNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQWVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBYkE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQVVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7Ozs7QUF0Q0E7QUFDQTtBQURBO0FBRUE7QUFEQTtBQUNBO0FBdUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/filePrice/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileProperties/index.js": -/*!***********************************************!*\ - !*** ../ui/component/fileProperties/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/fileProperties/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n downloaded: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFilePartlyDownloaded\"])(props.uri)(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsSubscribed\"])(props.uri)(state),\n isNew: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsNew\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVQcm9wZXJ0aWVzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlUHJvcGVydGllcy9pbmRleC5qcz82MGU3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0RmlsZVBhcnRseURvd25sb2FkZWQsIG1ha2VTZWxlY3RDbGFpbUlzTWluZSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdElzU3Vic2NyaWJlZCwgbWFrZVNlbGVjdElzTmV3IH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IEZpbGVQcm9wZXJ0aWVzIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGRvd25sb2FkZWQ6IG1ha2VTZWxlY3RGaWxlUGFydGx5RG93bmxvYWRlZChwcm9wcy51cmkpKHN0YXRlKSxcbiAgaXNTdWJzY3JpYmVkOiBtYWtlU2VsZWN0SXNTdWJzY3JpYmVkKHByb3BzLnVyaSkoc3RhdGUpLFxuICBpc05ldzogbWFrZVNlbGVjdElzTmV3KHByb3BzLnVyaSkoc3RhdGUpLFxuICBjbGFpbUlzTWluZTogbWFrZVNlbGVjdENsYWltSXNNaW5lKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgbnVsbFxuKShGaWxlUHJvcGVydGllcyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileProperties/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileProperties/view.jsx": -/*!***********************************************!*\ - !*** ../ui/component/fileProperties/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FileProperties; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_filePrice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/filePrice */ \"../ui/component/filePrice/index.js\");\n/* harmony import */ var component_videoDuration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/videoDuration */ \"../ui/component/videoDuration/index.js\");\n/* harmony import */ var component_fileType__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/fileType */ \"../ui/component/fileType/index.js\");\n\n\n\n\n\n\n\nfunction FileProperties(props) {\n var uri = props.uri,\n downloaded = props.downloaded,\n claimIsMine = props.claimIsMine,\n isSubscribed = props.isSubscribed,\n _props$small = props.small,\n small = _props$small === void 0 ? false : _props$small;\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_2___default()('file-properties', {\n 'file-properties--small': small\n })\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_filePrice__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n hideFree: true,\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_videoDuration__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_fileType__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri\n }), isSubscribed && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_icon__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tooltip: true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBSCRIBE\"]\n }), !claimIsMine && downloaded && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_icon__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tooltip: true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LIBRARY\"]\n }));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVQcm9wZXJ0aWVzL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlUHJvcGVydGllcy92aWV3LmpzeD8wY2M3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0IEZpbGVQcmljZSBmcm9tICdjb21wb25lbnQvZmlsZVByaWNlJztcbmltcG9ydCBWaWRlb0R1cmF0aW9uIGZyb20gJ2NvbXBvbmVudC92aWRlb0R1cmF0aW9uJztcbmltcG9ydCBGaWxlVHlwZSBmcm9tICdjb21wb25lbnQvZmlsZVR5cGUnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgZG93bmxvYWRlZDogYm9vbGVhbixcbiAgY2xhaW1Jc01pbmU6IGJvb2xlYW4sXG4gIGlzU3Vic2NyaWJlZDogYm9vbGVhbixcbiAgaXNOZXc6IGJvb2xlYW4sXG4gIHNtYWxsOiBib29sZWFuLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmlsZVByb3BlcnRpZXMocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCBkb3dubG9hZGVkLCBjbGFpbUlzTWluZSwgaXNTdWJzY3JpYmVkLCBzbWFsbCA9IGZhbHNlIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdmaWxlLXByb3BlcnRpZXMnLCB7ICdmaWxlLXByb3BlcnRpZXMtLXNtYWxsJzogc21hbGwgfSl9PlxuICAgICAgPEZpbGVQcmljZSBoaWRlRnJlZSB1cmk9e3VyaX0gLz5cbiAgICAgIDxWaWRlb0R1cmF0aW9uIHVyaT17dXJpfSAvPlxuICAgICAgPEZpbGVUeXBlIHVyaT17dXJpfSAvPlxuICAgICAge2lzU3Vic2NyaWJlZCAmJiA8SWNvbiB0b29sdGlwIGljb249e2ljb25zLlNVQlNDUklCRX0gLz59XG4gICAgICB7IWNsYWltSXNNaW5lICYmIGRvd25sb2FkZWQgJiYgPEljb24gdG9vbHRpcCBpY29uPXtpY29ucy5MSUJSQVJZfSAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileProperties/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileRender/index.js": -/*!*******************************************!*\ - !*** ../ui/component/fileRender/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/fileRender/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var autoplay = props.embedded ? false : Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_2__[\"AUTOPLAY\"])(state);\n return {\n currentTheme: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_2__[\"THEME\"])(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n contentType: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectContentTypeForUri\"])(props.uri)(state),\n downloadPath: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectDownloadPathForUri\"])(props.uri)(state),\n fileExtension: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectFileExtensionForUri\"])(props.uri)(state),\n streamingUrl: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectStreamingUrlForUriWebProxy\"])(props.uri)(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state),\n autoplay: autoplay\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setPlayingUri: function setPlayingUri(uri) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_5__[\"doSetPlayingUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXIvaW5kZXguanM/NTE5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpLFxuICBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmksXG4gIG1ha2VTZWxlY3REb3dubG9hZFBhdGhGb3JVcmksXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCB7XG4gIG1ha2VTZWxlY3RGaWxlUmVuZGVyTW9kZUZvclVyaSxcbiAgbWFrZVNlbGVjdEZpbGVFeHRlbnNpb25Gb3JVcmksXG4gIG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eSxcbn0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQnO1xuaW1wb3J0IHsgZG9TZXRQbGF5aW5nVXJpIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCBGaWxlUmVuZGVyIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgY29uc3QgYXV0b3BsYXkgPSBwcm9wcy5lbWJlZGRlZCA/IGZhbHNlIDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT1BMQVkpKHN0YXRlKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGhlbWU6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlRIRU1FKShzdGF0ZSksXG4gICAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICB0aHVtYm5haWw6IG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgY29udGVudFR5cGU6IG1ha2VTZWxlY3RDb250ZW50VHlwZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICBkb3dubG9hZFBhdGg6IG1ha2VTZWxlY3REb3dubG9hZFBhdGhGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgZmlsZUV4dGVuc2lvbjogbWFrZVNlbGVjdEZpbGVFeHRlbnNpb25Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgc3RyZWFtaW5nVXJsOiBtYWtlU2VsZWN0U3RyZWFtaW5nVXJsRm9yVXJpV2ViUHJveHkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgcmVuZGVyTW9kZTogbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGF1dG9wbGF5OiBhdXRvcGxheSxcbiAgfTtcbn07XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBzZXRQbGF5aW5nVXJpOiB1cmkgPT4gZGlzcGF0Y2goZG9TZXRQbGF5aW5nVXJpKHVyaSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlUmVuZGVyKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBRkE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRender/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileRender/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/fileRender/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! config */ \"../config.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var component_viewers_videoViewer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/viewers/videoViewer */ \"../ui/component/viewers/videoViewer/index.js\");\n/* harmony import */ var component_viewers_imageViewer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/viewers/imageViewer */ \"../ui/component/viewers/imageViewer.jsx\");\n/* harmony import */ var component_viewers_appViewer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/viewers/appViewer */ \"../ui/component/viewers/appViewer/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var component_autoplayCountdown__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/autoplayCountdown */ \"../ui/component/autoplayCountdown/index.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! fs */ \"./stubs/fs.js\");\n/* harmony import */ var component_viewers_documentViewer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/viewers/documentViewer */ \"../ui/component/viewers/documentViewer.jsx\");\n/* harmony import */ var component_viewers_pdfViewer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/viewers/pdfViewer */ \"../ui/component/viewers/pdfViewer.jsx\");\n/* harmony import */ var component_viewers_htmlViewer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! component/viewers/htmlViewer */ \"../ui/component/viewers/htmlViewer.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar FileRender = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(FileRender, _React$PureComponent);\n\n function FileRender(props) {\n var _this;\n\n _classCallCheck(this, FileRender);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(FileRender).call(this, props));\n _this.state = {\n showAutoplayCountdown: false,\n showEmbededMessage: false\n };\n _assertThisInitialized(_this).escapeListener = _this.escapeListener.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onEndedAutoplay = _this.onEndedAutoplay.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onEndedEmbedded = _this.onEndedEmbedded.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).getOnEndedCb = _this.getOnEndedCb.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onStartedCb = _this.onStartedCb.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(FileRender, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n window.addEventListener('keydown', this.escapeListener, true);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('keydown', this.escapeListener, true);\n }\n }, {\n key: \"escapeListener\",\n value: function escapeListener(e) {\n if (e.keyCode === 27) {\n e.preventDefault();\n this.exitFullscreen();\n return false;\n }\n }\n }, {\n key: \"exitFullscreen\",\n value: function exitFullscreen() {\n electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].getCurrentWindow().setFullScreen(false);\n }\n }, {\n key: \"onStartedCb\",\n value: function onStartedCb() {\n var onStartedCallback = this.props.onStartedCallback;\n\n if (onStartedCallback) {\n onStartedCallback();\n }\n }\n }, {\n key: \"getOnEndedCb\",\n value: function getOnEndedCb() {\n var _this$props = this.props,\n setPlayingUri = _this$props.setPlayingUri,\n currentlyFloating = _this$props.currentlyFloating,\n embedded = _this$props.embedded;\n\n if (embedded) {\n return this.onEndedEmbedded;\n }\n\n if (!currentlyFloating) {\n return this.onEndedAutoplay;\n }\n\n return function () {\n return setPlayingUri(null);\n };\n }\n }, {\n key: \"onEndedAutoplay\",\n value: function onEndedAutoplay() {\n var autoplay = this.props.autoplay;\n\n if (autoplay) {\n this.setState({\n showAutoplayCountdown: true\n });\n }\n }\n }, {\n key: \"onEndedEmbedded\",\n value: function onEndedEmbedded() {\n this.setState({\n showEmbededMessage: true\n });\n }\n }, {\n key: \"renderViewer\",\n value: function renderViewer() {\n var _this$props2 = this.props,\n currentTheme = _this$props2.currentTheme,\n contentType = _this$props2.contentType,\n downloadPath = _this$props2.downloadPath,\n fileExtension = _this$props2.fileExtension,\n streamingUrl = _this$props2.streamingUrl,\n uri = _this$props2.uri,\n renderMode = _this$props2.renderMode;\n var source = streamingUrl;\n\n switch (renderMode) {\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"AUDIO\"]:\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"VIDEO\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_videoViewer__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri,\n source: source,\n contentType: contentType,\n onEndedCb: this.getOnEndedCb(),\n onStartedCb: this.onStartedCb\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"IMAGE\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_imageViewer__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri,\n source: source\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"HTML\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_htmlViewer__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n source: downloadPath || source\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"DOCUMENT\"]:\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"MARKDOWN\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_documentViewer__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n source: {\n stream: source,\n fileExtension: fileExtension,\n contentType: contentType\n },\n renderMode: renderMode,\n theme: currentTheme\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"DOCX\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(DocxViewer, {\n source: downloadPath\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"PDF\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_pdfViewer__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n source: downloadPath || source\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"CAD\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ThreeViewer, {\n source: {\n fileExtension: fileExtension,\n downloadPath: downloadPath // ThreeViewer stopped working here https://github.com/lbryio/lbry-desktop/pull/3918/files#diff-440a978a7dea2b088abd77a26fdae9b8L129\n // It requires `fileType`\n\n },\n theme: currentTheme\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"COMIC\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(ComicBookViewer, {\n source: {\n fileExtension: fileExtension,\n downloadPath: downloadPath\n },\n theme: currentTheme\n });\n\n case constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"APPLICATION\"]:\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_viewers_appViewer__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n uri: uri\n });\n }\n\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n uri = _this$props3.uri,\n currentlyFloating = _this$props3.currentlyFloating,\n embedded = _this$props3.embedded,\n renderMode = _this$props3.renderMode;\n var _this$state = this.state,\n showAutoplayCountdown = _this$state.showAutoplayCountdown,\n showEmbededMessage = _this$state.showEmbededMessage;\n var lbrytvLink = \"\".concat(config__WEBPACK_IMPORTED_MODULE_0__[\"URL\"]).concat(Object(util_url__WEBPACK_IMPORTED_MODULE_11__[\"formatLbryUrlForWeb\"])(uri), \"?src=embed\");\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_3___default()({\n 'file-render': !embedded,\n 'file-render--document': constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"TEXT_MODES\"].includes(renderMode) && !embedded,\n 'file-render__embed': embedded\n })\n }, embedded && showEmbededMessage && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"video-overlay__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"video-overlay__title\"\n }, __('See more on lbry.tv')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"video-overlay__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section__actions--centered\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n label: __('Explore'),\n button: \"primary\",\n href: lbrytvLink\n })))), !currentlyFloating && showAutoplayCountdown && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_autoplayCountdown__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2__[\"Suspense\"], {\n fallback: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null)\n }, this.renderViewer()));\n }\n }]);\n\n return FileRender;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_9__[\"withRouter\"])(FileRender));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXIvdmlldy5qc3g/NGJmZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAnY29uZmlnJztcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0ICogYXMgUkVOREVSX01PREVTIGZyb20gJ2NvbnN0YW50cy9maWxlX3JlbmRlcl9tb2Rlcyc7XG5pbXBvcnQgVmlkZW9WaWV3ZXIgZnJvbSAnY29tcG9uZW50L3ZpZXdlcnMvdmlkZW9WaWV3ZXInO1xuaW1wb3J0IEltYWdlVmlld2VyIGZyb20gJ2NvbXBvbmVudC92aWV3ZXJzL2ltYWdlVmlld2VyJztcbmltcG9ydCBBcHBWaWV3ZXIgZnJvbSAnY29tcG9uZW50L3ZpZXdlcnMvYXBwVmlld2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgQXV0b3BsYXlDb3VudGRvd24gZnJvbSAnY29tcG9uZW50L2F1dG9wbGF5Q291bnRkb3duJztcbmltcG9ydCB7IGZvcm1hdExicnlVcmxGb3JXZWIgfSBmcm9tICd1dGlsL3VybCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgRG9jdW1lbnRWaWV3ZXIgZnJvbSAnY29tcG9uZW50L3ZpZXdlcnMvZG9jdW1lbnRWaWV3ZXInO1xuaW1wb3J0IFBkZlZpZXdlciBmcm9tICdjb21wb25lbnQvdmlld2Vycy9wZGZWaWV3ZXInO1xuaW1wb3J0IEh0bWxWaWV3ZXIgZnJvbSAnY29tcG9uZW50L3ZpZXdlcnMvaHRtbFZpZXdlcic7XG5cblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIHN0cmVhbWluZ1VybDogc3RyaW5nLFxuICBlbWJlZGRlZD86IGJvb2xlYW4sXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgY3VycmVudFRoZW1lOiBzdHJpbmcsXG4gIGRvd25sb2FkUGF0aDogc3RyaW5nLFxuICBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcsXG4gIGF1dG9wbGF5OiBib29sZWFuLFxuICBzZXRQbGF5aW5nVXJpOiAoc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCxcbiAgY3VycmVudGx5RmxvYXRpbmc6IGJvb2xlYW4sXG4gIHJlbmRlck1vZGU6IHN0cmluZyxcbiAgdGh1bWJuYWlsOiBzdHJpbmcsXG4gIG9uU3RhcnRlZENhbGxiYWNrOiAoKSA9PiB2b2lkLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgc2hvd0F1dG9wbGF5Q291bnRkb3duOiBib29sZWFuLFxuICBzaG93RW1iZWRlZE1lc3NhZ2U6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBGaWxlUmVuZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNob3dBdXRvcGxheUNvdW50ZG93bjogZmFsc2UsXG4gICAgICBzaG93RW1iZWRlZE1lc3NhZ2U6IGZhbHNlLFxuICAgIH07XG5cbiAgICAodGhpczogYW55KS5lc2NhcGVMaXN0ZW5lciA9IHRoaXMuZXNjYXBlTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vbkVuZGVkQXV0b3BsYXkgPSB0aGlzLm9uRW5kZWRBdXRvcGxheS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLm9uRW5kZWRFbWJlZGRlZCA9IHRoaXMub25FbmRlZEVtYmVkZGVkLmJpbmQodGhpcyk7XG4gICAgKHRoaXM6IGFueSkuZ2V0T25FbmRlZENiID0gdGhpcy5nZXRPbkVuZGVkQ2IuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vblN0YXJ0ZWRDYiA9IHRoaXMub25TdGFydGVkQ2IuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5lc2NhcGVMaXN0ZW5lciwgdHJ1ZSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuZXNjYXBlTGlzdGVuZXIsIHRydWUpO1xuICB9XG5cbiAgZXNjYXBlTGlzdGVuZXIoZTogU3ludGhldGljS2V5Ym9hcmRFdmVudDwqPikge1xuICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIHRoaXMuZXhpdEZ1bGxzY3JlZW4oKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGV4aXRGdWxsc2NyZWVuKCkge1xuICAgIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0RnVsbFNjcmVlbihmYWxzZSk7XG4gIH1cblxuICBvblN0YXJ0ZWRDYigpIHtcbiAgICBjb25zdCB7IG9uU3RhcnRlZENhbGxiYWNrIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKG9uU3RhcnRlZENhbGxiYWNrKSB7XG4gICAgICBvblN0YXJ0ZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldE9uRW5kZWRDYigpIHtcbiAgICBjb25zdCB7IHNldFBsYXlpbmdVcmksIGN1cnJlbnRseUZsb2F0aW5nLCBlbWJlZGRlZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChlbWJlZGRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMub25FbmRlZEVtYmVkZGVkO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudGx5RmxvYXRpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLm9uRW5kZWRBdXRvcGxheTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gc2V0UGxheWluZ1VyaShudWxsKTtcbiAgfVxuXG4gIG9uRW5kZWRBdXRvcGxheSgpIHtcbiAgICBjb25zdCB7IGF1dG9wbGF5IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChhdXRvcGxheSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNob3dBdXRvcGxheUNvdW50ZG93bjogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBvbkVuZGVkRW1iZWRkZWQoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNob3dFbWJlZGVkTWVzc2FnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlbmRlclZpZXdlcigpIHtcbiAgICBjb25zdCB7IGN1cnJlbnRUaGVtZSwgY29udGVudFR5cGUsIGRvd25sb2FkUGF0aCwgZmlsZUV4dGVuc2lvbiwgc3RyZWFtaW5nVXJsLCB1cmksIHJlbmRlck1vZGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtaW5nVXJsO1xuXG4gICAgc3dpdGNoIChyZW5kZXJNb2RlKSB7XG4gICAgICBjYXNlIFJFTkRFUl9NT0RFUy5BVURJTzpcbiAgICAgIGNhc2UgUkVOREVSX01PREVTLlZJREVPOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxWaWRlb1ZpZXdlclxuICAgICAgICAgICAgdXJpPXt1cml9XG4gICAgICAgICAgICBzb3VyY2U9e3NvdXJjZX1cbiAgICAgICAgICAgIGNvbnRlbnRUeXBlPXtjb250ZW50VHlwZX1cbiAgICAgICAgICAgIG9uRW5kZWRDYj17dGhpcy5nZXRPbkVuZGVkQ2IoKX1cbiAgICAgICAgICAgIG9uU3RhcnRlZENiPXt0aGlzLm9uU3RhcnRlZENifVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICBjYXNlIFJFTkRFUl9NT0RFUy5JTUFHRTpcbiAgICAgICAgcmV0dXJuIDxJbWFnZVZpZXdlciB1cmk9e3VyaX0gc291cmNlPXtzb3VyY2V9IC8+O1xuICAgICAgY2FzZSBSRU5ERVJfTU9ERVMuSFRNTDpcbiAgICAgICAgcmV0dXJuIDxIdG1sVmlld2VyIHNvdXJjZT17ZG93bmxvYWRQYXRoIHx8IHNvdXJjZX0gLz47XG4gICAgICBjYXNlIFJFTkRFUl9NT0RFUy5ET0NVTUVOVDpcbiAgICAgIGNhc2UgUkVOREVSX01PREVTLk1BUktET1dOOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEb2N1bWVudFZpZXdlclxuICAgICAgICAgICAgc291cmNlPXt7XG4gICAgICAgICAgICAgIHN0cmVhbTogc291cmNlLFxuICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uLFxuICAgICAgICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZW5kZXJNb2RlPXtyZW5kZXJNb2RlfVxuICAgICAgICAgICAgdGhlbWU9e2N1cnJlbnRUaGVtZX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgY2FzZSBSRU5ERVJfTU9ERVMuRE9DWDpcbiAgICAgICAgcmV0dXJuIDxEb2N4Vmlld2VyIHNvdXJjZT17ZG93bmxvYWRQYXRofSAvPjtcbiAgICAgIGNhc2UgUkVOREVSX01PREVTLlBERjpcbiAgICAgICAgcmV0dXJuIDxQZGZWaWV3ZXIgc291cmNlPXtkb3dubG9hZFBhdGggfHwgc291cmNlfSAvPjtcbiAgICAgIGNhc2UgUkVOREVSX01PREVTLkNBRDpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VGhyZWVWaWV3ZXJcbiAgICAgICAgICAgIHNvdXJjZT17e1xuICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uLFxuICAgICAgICAgICAgICBkb3dubG9hZFBhdGgsXG4gICAgICAgICAgICAgIC8vIFRocmVlVmlld2VyIHN0b3BwZWQgd29ya2luZyBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vbGJyeS1kZXNrdG9wL3B1bGwvMzkxOC9maWxlcyNkaWZmLTQ0MGE5NzhhN2RlYTJiMDg4YWJkNzdhMjZmZGFlOWI4TDEyOVxuICAgICAgICAgICAgICAvLyBJdCByZXF1aXJlcyBgZmlsZVR5cGVgXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGhlbWU9e2N1cnJlbnRUaGVtZX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgY2FzZSBSRU5ERVJfTU9ERVMuQ09NSUM6XG4gICAgICAgIHJldHVybiA8Q29taWNCb29rVmlld2VyIHNvdXJjZT17eyBmaWxlRXh0ZW5zaW9uLCBkb3dubG9hZFBhdGggfX0gdGhlbWU9e2N1cnJlbnRUaGVtZX0gLz47XG4gICAgICBjYXNlIFJFTkRFUl9NT0RFUy5BUFBMSUNBVElPTjpcbiAgICAgICAgcmV0dXJuIDxBcHBWaWV3ZXIgdXJpPXt1cml9IC8+O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdXJpLCBjdXJyZW50bHlGbG9hdGluZywgZW1iZWRkZWQsIHJlbmRlck1vZGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzaG93QXV0b3BsYXlDb3VudGRvd24sIHNob3dFbWJlZGVkTWVzc2FnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBsYnJ5dHZMaW5rID0gYCR7VVJMfSR7Zm9ybWF0TGJyeVVybEZvcldlYih1cmkpfT9zcmM9ZW1iZWRgO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgICAnZmlsZS1yZW5kZXInOiAhZW1iZWRkZWQsXG4gICAgICAgICAgJ2ZpbGUtcmVuZGVyLS1kb2N1bWVudCc6IFJFTkRFUl9NT0RFUy5URVhUX01PREVTLmluY2x1ZGVzKHJlbmRlck1vZGUpICYmICFlbWJlZGRlZCxcbiAgICAgICAgICAnZmlsZS1yZW5kZXJfX2VtYmVkJzogZW1iZWRkZWQsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICB7ZW1iZWRkZWQgJiYgc2hvd0VtYmVkZWRNZXNzYWdlICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvLW92ZXJsYXlfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlkZW8tb3ZlcmxheV9fdGl0bGVcIj57X18oJ1NlZSBtb3JlIG9uIGxicnkudHYnKX08L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlby1vdmVybGF5X19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9ucy0tY2VudGVyZWRcIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGxhYmVsPXtfXygnRXhwbG9yZScpfSBidXR0b249XCJwcmltYXJ5XCIgaHJlZj17bGJyeXR2TGlua30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgeyFjdXJyZW50bHlGbG9hdGluZyAmJiBzaG93QXV0b3BsYXlDb3VudGRvd24gJiYgPEF1dG9wbGF5Q291bnRkb3duIHVyaT17dXJpfSAvPn1cbiAgICAgICAgPFN1c3BlbnNlIGZhbGxiYWNrPXs8ZGl2IC8+fT57dGhpcy5yZW5kZXJWaWV3ZXIoKX08L1N1c3BlbnNlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEZpbGVSZW5kZXIpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXdCQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFhQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTEE7QUFNQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQWhEQTtBQUNBO0FBa0RBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFRQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUdBOzs7O0FBN0pBO0FBQ0E7QUErSkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRender/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderDownload/index.js": -/*!***************************************************!*\ - !*** ../ui/component/fileRenderDownload/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/fileRenderDownload/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJEb3dubG9hZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVJlbmRlckRvd25sb2FkL2luZGV4LmpzPzU0ODAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RGaWxlUmVuZGVyTW9kZUZvclVyaSB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9jb250ZW50JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IEZpbGVSZW5kZXJEb3dubG9hZCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICByZW5kZXJNb2RlOiBtYWtlU2VsZWN0RmlsZVJlbmRlck1vZGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihjb25uZWN0KHNlbGVjdCkoRmlsZVJlbmRlckRvd25sb2FkKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileRenderDownload/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderDownload/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/fileRenderDownload/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FileRenderDownload; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/fileDownloadLink */ \"../ui/component/fileDownloadLink/index.js\");\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\n\nfunction FileRenderDownload(props) {\n var uri = props.uri,\n renderMode = props.renderMode,\n isFree = props.isFree;\n\n if (constants_file_render_modes__WEBPACK_IMPORTED_MODULE_2__[\"UNSUPPORTED_IN_THIS_APP\"].includes(renderMode)) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: isFree ? __('Download or Get the App') : __('Get the App'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, isFree ? __('This content can be downloaded from lbry.tv, but not displayed. It will display in LBRY Desktop, an app for desktop computers.') : __('Paid content requires a full LBRY app.')),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, isFree && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n buttonType: \"primary\",\n showLabel: true\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: !isFree ? 'primary' : 'link',\n label: __('Get the App'),\n href: \"https://lbry.com/get\"\n }))\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Download'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileDownloadLink__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n buttonType: \"primary\",\n showLabel: true\n })\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJEb3dubG9hZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVJlbmRlckRvd25sb2FkL3ZpZXcuanN4P2MzMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmlsZURvd25sb2FkTGluayBmcm9tICdjb21wb25lbnQvZmlsZURvd25sb2FkTGluayc7XG5pbXBvcnQgKiBhcyBSRU5ERVJfTU9ERVMgZnJvbSAnY29uc3RhbnRzL2ZpbGVfcmVuZGVyX21vZGVzJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgaXNGcmVlOiBib29sZWFuLFxuICByZW5kZXJNb2RlOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaWxlUmVuZGVyRG93bmxvYWQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCByZW5kZXJNb2RlLCBpc0ZyZWUgfSA9IHByb3BzO1xuXG4gIGlmIChSRU5ERVJfTU9ERVMuVU5TVVBQT1JURURfSU5fVEhJU19BUFAuaW5jbHVkZXMocmVuZGVyTW9kZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRcbiAgICAgICAgdGl0bGU9e2lzRnJlZSA/IF9fKCdEb3dubG9hZCBvciBHZXQgdGhlIEFwcCcpIDogX18oJ0dldCB0aGUgQXBwJyl9XG4gICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHtpc0ZyZWVcbiAgICAgICAgICAgICAgPyBfXyhcbiAgICAgICAgICAgICAgICAgICdUaGlzIGNvbnRlbnQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBsYnJ5LnR2LCBidXQgbm90IGRpc3BsYXllZC4gSXQgd2lsbCBkaXNwbGF5IGluIExCUlkgRGVza3RvcCwgYW4gYXBwIGZvciBkZXNrdG9wIGNvbXB1dGVycy4nXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF9fKCdQYWlkIGNvbnRlbnQgcmVxdWlyZXMgYSBmdWxsIExCUlkgYXBwLicpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzRnJlZSAmJiA8RmlsZURvd25sb2FkTGluayB1cmk9e3VyaX0gYnV0dG9uVHlwZT1cInByaW1hcnlcIiBzaG93TGFiZWwgLz59XG4gICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj17IWlzRnJlZSA/ICdwcmltYXJ5JyA6ICdsaW5rJ30gbGFiZWw9e19fKCdHZXQgdGhlIEFwcCcpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9nZXRcIiAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gPENhcmQgdGl0bGU9e19fKCdEb3dubG9hZCcpfSBhY3Rpb25zPXs8RmlsZURvd25sb2FkTGluayB1cmk9e3VyaX0gYnV0dG9uVHlwZT1cInByaW1hcnlcIiBzaG93TGFiZWwgLz59IC8+O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQVNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWRBO0FBbUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRenderDownload/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderFloating/index.js": -/*!***************************************************!*\ - !*** ../ui/component/fileRenderFloating/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./view */ \"../ui/component/fileRenderFloating/view.jsx\");\n\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var uri = Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"selectPlayingUri\"])(state);\n return {\n uri: uri,\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTitleForUri\"])(uri)(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectFileInfoForUri\"])(uri)(state),\n isPlaying: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectIsPlaying\"])(uri)(state),\n streamingUrl: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectStreamingUrlForUriWebProxy\"])(uri)(state),\n floatingPlayerEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"FLOATING_PLAYER\"])(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectFileRenderModeForUri\"])(uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n clearPlayingUri: function clearPlayingUri() {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_6__[\"doSetPlayingUri\"])(null));\n },\n triggerAnalyticsView: function triggerAnalyticsView(uri, timeToStart) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_8__[\"doAnalyticsView\"])(uri, timeToStart));\n },\n claimRewards: function claimRewards() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doClaimEligiblePurchaseRewards\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_7__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_9__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJGbG9hdGluZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVJlbmRlckZsb2F0aW5nL2luZGV4LmpzPzUxOWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmksIG1ha2VTZWxlY3RUaXRsZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9DbGFpbUVsaWdpYmxlUHVyY2hhc2VSZXdhcmRzIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0SXNQbGF5aW5nLFxuICBzZWxlY3RQbGF5aW5nVXJpLFxuICBtYWtlU2VsZWN0RmlsZVJlbmRlck1vZGVGb3JVcmksXG4gIG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eSxcbn0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgZG9TZXRQbGF5aW5nVXJpIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgZG9BbmFseXRpY3NWaWV3IH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IEZpbGVSZW5kZXJGbG9hdGluZyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHVyaSA9IHNlbGVjdFBsYXlpbmdVcmkoc3RhdGUpO1xuICByZXR1cm4ge1xuICAgIHVyaSxcbiAgICB0aXRsZTogbWFrZVNlbGVjdFRpdGxlRm9yVXJpKHVyaSkoc3RhdGUpLFxuICAgIGZpbGVJbmZvOiBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKShzdGF0ZSksXG4gICAgaXNQbGF5aW5nOiBtYWtlU2VsZWN0SXNQbGF5aW5nKHVyaSkoc3RhdGUpLFxuICAgIHN0cmVhbWluZ1VybDogbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaVdlYlByb3h5KHVyaSkoc3RhdGUpLFxuICAgIGZsb2F0aW5nUGxheWVyRW5hYmxlZDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuRkxPQVRJTkdfUExBWUVSKShzdGF0ZSksXG4gICAgcmVuZGVyTW9kZTogbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpKHVyaSkoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsZWFyUGxheWluZ1VyaTogKCkgPT4gZGlzcGF0Y2goZG9TZXRQbGF5aW5nVXJpKG51bGwpKSxcbiAgdHJpZ2dlckFuYWx5dGljc1ZpZXc6ICh1cmksIHRpbWVUb1N0YXJ0KSA9PiBkaXNwYXRjaChkb0FuYWx5dGljc1ZpZXcodXJpLCB0aW1lVG9TdGFydCkpLFxuICBjbGFpbVJld2FyZHM6ICgpID0+IGRpc3BhdGNoKGRvQ2xhaW1FbGlnaWJsZVB1cmNoYXNlUmV3YXJkcygpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlUmVuZGVyRmxvYXRpbmcpKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUZBO0FBQ0E7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileRenderFloating/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderFloating/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/fileRenderFloating/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FloatingViewer; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_common_loading_screen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/loading-screen */ \"../ui/component/common/loading-screen.jsx\");\n/* harmony import */ var component_fileRender__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/fileRender */ \"../ui/component/fileRender/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var effects_use_previous__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! effects/use-previous */ \"../ui/effects/use-previous.js\");\n/* harmony import */ var page_file_view__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! page/file/view */ \"../ui/page/file/view.jsx\");\n/* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-draggable */ \"../node_modules/react-draggable/dist/react-draggable.js\");\n/* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_draggable__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var component_common_tooltip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/common/tooltip */ \"../ui/component/common/tooltip.jsx\");\n/* harmony import */ var util_full_screen__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! util/full-screen */ \"../ui/util/full-screen.js\");\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction FloatingViewer(props) {\n var isPlaying = props.isPlaying,\n fileInfo = props.fileInfo,\n uri = props.uri,\n streamingUrl = props.streamingUrl,\n pageUri = props.pageUri,\n title = props.title,\n clearPlayingUri = props.clearPlayingUri,\n floatingPlayerEnabled = props.floatingPlayerEnabled,\n triggerAnalyticsView = props.triggerAnalyticsView,\n claimRewards = props.claimRewards,\n renderMode = props.renderMode;\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_14__[\"default\"])();\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(),\n _useState2 = _slicedToArray(_useState, 2),\n playTime = _useState2[0],\n setPlayTime = _useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('inline-file-viewer:rect'),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n fileViewerRect = _usePersistedState2[0],\n setFileViewerRect = _usePersistedState2[1];\n\n var _usePersistedState3 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('floating-file-viewer:position', {\n x: -25,\n y: window.innerHeight - 400\n }),\n _usePersistedState4 = _slicedToArray(_usePersistedState3, 2),\n position = _usePersistedState4[0],\n setPosition = _usePersistedState4[1];\n\n var inline = pageUri === uri;\n var isPlayable = constants_file_render_modes__WEBPACK_IMPORTED_MODULE_1__[\"FLOATING_MODES\"].includes(renderMode);\n var isReadyToPlay = isPlayable && (streamingUrl || fileInfo && fileInfo.completed);\n var loadingMessage = fileInfo && fileInfo.blobs_completed >= 1 && (!fileInfo.download_path || !fileInfo.written_bytes) ? __(\"It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds.\") : __('Loading');\n var previousUri = Object(effects_use_previous__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(uri);\n var isNewView = uri && previousUri !== uri && isPlaying;\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n hasRecordedView = _useState4[0],\n setHasRecordedView = _useState4[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n function handleResize() {\n var element = document.querySelector(\".\".concat(page_file_view__WEBPACK_IMPORTED_MODULE_10__[\"FILE_WRAPPER_CLASS\"]));\n\n if (!element) {\n return;\n }\n\n var rect = element.getBoundingClientRect(); // @FlowFixMe\n\n setFileViewerRect(rect);\n }\n\n handleResize();\n window.addEventListener('resize', handleResize);\n Object(util_full_screen__WEBPACK_IMPORTED_MODULE_13__[\"onFullscreenChange\"])(window, 'add', handleResize);\n return function () {\n window.removeEventListener('resize', handleResize);\n Object(util_full_screen__WEBPACK_IMPORTED_MODULE_13__[\"onFullscreenChange\"])(window, 'remove', handleResize);\n };\n }, [setFileViewerRect, inline]);\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n if (isNewView) {\n setPlayTime(Date.now());\n }\n }, [isNewView, uri]);\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n if (playTime && isReadyToPlay && !hasRecordedView) {\n var timeToStart = Date.now() - playTime;\n triggerAnalyticsView(uri, timeToStart).then(function () {\n claimRewards();\n setHasRecordedView(false); // This is a terrible variable name, rename this\n\n setPlayTime(null);\n });\n }\n }, [setPlayTime, triggerAnalyticsView, isReadyToPlay, hasRecordedView, playTime, uri, claimRewards]);\n\n if (!isPlayable || !isPlaying || !uri || !inline && (isMobile || !floatingPlayerEnabled)) {\n return null;\n }\n\n function handleDrag(e, ui) {\n var x = position.x,\n y = position.y;\n var newX = x + ui.deltaX;\n var newY = y + ui.deltaY;\n setPosition({\n x: newX,\n y: newY\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_draggable__WEBPACK_IMPORTED_MODULE_11___default.a, {\n onDrag: handleDrag,\n defaultPosition: position,\n position: inline ? {\n x: 0,\n y: 0\n } : position,\n bounds: \"parent\",\n disabled: inline,\n handle: \".draggable\",\n cancel: \".button\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_4___default()('content__viewer', {\n 'content__viewer--floating': !inline,\n 'content__viewer--inline': inline\n }),\n style: inline && fileViewerRect ? {\n width: fileViewerRect.width,\n height: fileViewerRect.height,\n left: fileViewerRect.x\n } : {}\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_4___default()('content__wrapper', {\n 'content__wrapper--floating': !inline\n })\n }, !inline && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"draggable content__floating-header\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"media__uri--inline\"\n }, uri), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"content__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tooltip__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n label: __('View File')\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n navigate: uri,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VIEW\"],\n button: \"primary\"\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tooltip__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n label: __('Close')\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: clearPlayingUri,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n button: \"primary\"\n })))), isReadyToPlay ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_fileRender__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n currentlyFloating: !inline,\n uri: uri\n }) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_loading_screen__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n status: loadingMessage\n }), !inline && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"draggable content__info\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"claim-preview__title\",\n title: title || uri\n }, title || uri), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n link: true,\n addTooltip: false,\n uri: uri\n })))));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJGbG9hdGluZy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVJlbmRlckZsb2F0aW5nL3ZpZXcuanN4P2VlMWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgKiBhcyBSRU5ERVJfTU9ERVMgZnJvbSAnY29uc3RhbnRzL2ZpbGVfcmVuZGVyX21vZGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IExvYWRpbmdTY3JlZW4gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9sb2FkaW5nLXNjcmVlbic7XG5pbXBvcnQgRmlsZVJlbmRlciBmcm9tICdjb21wb25lbnQvZmlsZVJlbmRlcic7XG5pbXBvcnQgVXJpSW5kaWNhdG9yIGZyb20gJ2NvbXBvbmVudC91cmlJbmRpY2F0b3InO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnZWZmZWN0cy91c2UtcHJldmlvdXMnO1xuaW1wb3J0IHsgRklMRV9XUkFQUEVSX0NMQVNTIH0gZnJvbSAncGFnZS9maWxlL3ZpZXcnO1xuaW1wb3J0IERyYWdnYWJsZSBmcm9tICdyZWFjdC1kcmFnZ2FibGUnO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnY29tcG9uZW50L2NvbW1vbi90b29sdGlwJztcbmltcG9ydCB7IG9uRnVsbHNjcmVlbkNoYW5nZSB9IGZyb20gJ3V0aWwvZnVsbC1zY3JlZW4nO1xuaW1wb3J0IHVzZUlzTW9iaWxlIGZyb20gJ2VmZmVjdHMvdXNlLWlzLW1vYmlsZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlzTG9hZGluZzogYm9vbGVhbixcbiAgaXNQbGF5aW5nOiBib29sZWFuLFxuICBmaWxlSW5mbzogRmlsZUxpc3RJdGVtLFxuICB1cmk6IHN0cmluZyxcbiAgc3RyZWFtaW5nVXJsPzogc3RyaW5nLFxuICBmbG9hdGluZ1BsYXllcjogYm9vbGVhbixcbiAgcGFnZVVyaTogP3N0cmluZyxcbiAgdGl0bGU6ID9zdHJpbmcsXG4gIGZsb2F0aW5nUGxheWVyRW5hYmxlZDogYm9vbGVhbixcbiAgY2xlYXJQbGF5aW5nVXJpOiAoKSA9PiB2b2lkLFxuICB0cmlnZ2VyQW5hbHl0aWNzVmlldzogKHN0cmluZywgbnVtYmVyKSA9PiBQcm9taXNlPGFueT4sXG4gIHJlbmRlck1vZGU6IHN0cmluZyxcbiAgY2xhaW1SZXdhcmRzOiAoKSA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmxvYXRpbmdWaWV3ZXIocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpc1BsYXlpbmcsXG4gICAgZmlsZUluZm8sXG4gICAgdXJpLFxuICAgIHN0cmVhbWluZ1VybCxcbiAgICBwYWdlVXJpLFxuICAgIHRpdGxlLFxuICAgIGNsZWFyUGxheWluZ1VyaSxcbiAgICBmbG9hdGluZ1BsYXllckVuYWJsZWQsXG4gICAgdHJpZ2dlckFuYWx5dGljc1ZpZXcsXG4gICAgY2xhaW1SZXdhcmRzLFxuICAgIHJlbmRlck1vZGUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaXNNb2JpbGUgPSB1c2VJc01vYmlsZSgpO1xuICBjb25zdCBbcGxheVRpbWUsIHNldFBsYXlUaW1lXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtmaWxlVmlld2VyUmVjdCwgc2V0RmlsZVZpZXdlclJlY3RdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ2lubGluZS1maWxlLXZpZXdlcjpyZWN0Jyk7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlUGVyc2lzdGVkU3RhdGUoJ2Zsb2F0aW5nLWZpbGUtdmlld2VyOnBvc2l0aW9uJywge1xuICAgIHg6IC0yNSxcbiAgICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLSA0MDAsXG4gIH0pO1xuICBjb25zdCBpbmxpbmUgPSBwYWdlVXJpID09PSB1cmk7XG4gIGNvbnN0IGlzUGxheWFibGUgPSBSRU5ERVJfTU9ERVMuRkxPQVRJTkdfTU9ERVMuaW5jbHVkZXMocmVuZGVyTW9kZSk7XG4gIGNvbnN0IGlzUmVhZHlUb1BsYXkgPSBpc1BsYXlhYmxlICYmIChzdHJlYW1pbmdVcmwgfHwgKGZpbGVJbmZvICYmIGZpbGVJbmZvLmNvbXBsZXRlZCkpO1xuICBjb25zdCBsb2FkaW5nTWVzc2FnZSA9XG4gICAgZmlsZUluZm8gJiYgZmlsZUluZm8uYmxvYnNfY29tcGxldGVkID49IDEgJiYgKCFmaWxlSW5mby5kb3dubG9hZF9wYXRoIHx8ICFmaWxlSW5mby53cml0dGVuX2J5dGVzKVxuICAgICAgPyBfXyhcIkl0IGxvb2tzIGxpa2UgeW91IGRlbGV0ZWQgb3IgbW92ZWQgdGhpcyBmaWxlLiBXZSdyZSByZWJ1aWxkaW5nIGl0IG5vdy4gSXQgd2lsbCBvbmx5IHRha2UgYSBmZXcgc2Vjb25kcy5cIilcbiAgICAgIDogX18oJ0xvYWRpbmcnKTtcbiAgY29uc3QgcHJldmlvdXNVcmkgPSB1c2VQcmV2aW91cyh1cmkpO1xuICBjb25zdCBpc05ld1ZpZXcgPSB1cmkgJiYgcHJldmlvdXNVcmkgIT09IHVyaSAmJiBpc1BsYXlpbmc7XG4gIGNvbnN0IFtoYXNSZWNvcmRlZFZpZXcsIHNldEhhc1JlY29yZGVkVmlld10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7RklMRV9XUkFQUEVSX0NMQVNTfWApO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvLyBARmxvd0ZpeE1lXG4gICAgICBzZXRGaWxlVmlld2VyUmVjdChyZWN0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNpemUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICBvbkZ1bGxzY3JlZW5DaGFuZ2Uod2luZG93LCAnYWRkJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICBvbkZ1bGxzY3JlZW5DaGFuZ2Uod2luZG93LCAncmVtb3ZlJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbc2V0RmlsZVZpZXdlclJlY3QsIGlubGluZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTmV3Vmlldykge1xuICAgICAgc2V0UGxheVRpbWUoRGF0ZS5ub3coKSk7XG4gICAgfVxuICB9LCBbaXNOZXdWaWV3LCB1cmldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwbGF5VGltZSAmJiBpc1JlYWR5VG9QbGF5ICYmICFoYXNSZWNvcmRlZFZpZXcpIHtcbiAgICAgIGNvbnN0IHRpbWVUb1N0YXJ0ID0gRGF0ZS5ub3coKSAtIHBsYXlUaW1lO1xuICAgICAgdHJpZ2dlckFuYWx5dGljc1ZpZXcodXJpLCB0aW1lVG9TdGFydCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNsYWltUmV3YXJkcygpO1xuICAgICAgICBzZXRIYXNSZWNvcmRlZFZpZXcoZmFsc2UpOyAvLyBUaGlzIGlzIGEgdGVycmlibGUgdmFyaWFibGUgbmFtZSwgcmVuYW1lIHRoaXNcbiAgICAgICAgc2V0UGxheVRpbWUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtzZXRQbGF5VGltZSwgdHJpZ2dlckFuYWx5dGljc1ZpZXcsIGlzUmVhZHlUb1BsYXksIGhhc1JlY29yZGVkVmlldywgcGxheVRpbWUsIHVyaSwgY2xhaW1SZXdhcmRzXSk7XG5cbiAgaWYgKCFpc1BsYXlhYmxlIHx8ICFpc1BsYXlpbmcgfHwgIXVyaSB8fCAoIWlubGluZSAmJiAoaXNNb2JpbGUgfHwgIWZsb2F0aW5nUGxheWVyRW5hYmxlZCkpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEcmFnKGUsIHVpKSB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBwb3NpdGlvbjtcbiAgICBjb25zdCBuZXdYID0geCArIHVpLmRlbHRhWDtcbiAgICBjb25zdCBuZXdZID0geSArIHVpLmRlbHRhWTtcbiAgICBzZXRQb3NpdGlvbih7XG4gICAgICB4OiBuZXdYLFxuICAgICAgeTogbmV3WSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERyYWdnYWJsZVxuICAgICAgb25EcmFnPXtoYW5kbGVEcmFnfVxuICAgICAgZGVmYXVsdFBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgIHBvc2l0aW9uPXtpbmxpbmUgPyB7IHg6IDAsIHk6IDAgfSA6IHBvc2l0aW9ufVxuICAgICAgYm91bmRzPVwicGFyZW50XCJcbiAgICAgIGRpc2FibGVkPXtpbmxpbmV9XG4gICAgICBoYW5kbGU9XCIuZHJhZ2dhYmxlXCJcbiAgICAgIGNhbmNlbD1cIi5idXR0b25cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjb250ZW50X192aWV3ZXInLCB7XG4gICAgICAgICAgJ2NvbnRlbnRfX3ZpZXdlci0tZmxvYXRpbmcnOiAhaW5saW5lLFxuICAgICAgICAgICdjb250ZW50X192aWV3ZXItLWlubGluZSc6IGlubGluZSxcbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtcbiAgICAgICAgICBpbmxpbmUgJiYgZmlsZVZpZXdlclJlY3RcbiAgICAgICAgICAgID8geyB3aWR0aDogZmlsZVZpZXdlclJlY3Qud2lkdGgsIGhlaWdodDogZmlsZVZpZXdlclJlY3QuaGVpZ2h0LCBsZWZ0OiBmaWxlVmlld2VyUmVjdC54IH1cbiAgICAgICAgICAgIDoge31cbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjb250ZW50X193cmFwcGVyJywge1xuICAgICAgICAgICAgJ2NvbnRlbnRfX3dyYXBwZXItLWZsb2F0aW5nJzogIWlubGluZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIHshaW5saW5lICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZHJhZ2dhYmxlIGNvbnRlbnRfX2Zsb2F0aW5nLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtZWRpYV9fdXJpLS1pbmxpbmVcIj57dXJpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50X19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgbGFiZWw9e19fKCdWaWV3IEZpbGUnKX0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIG5hdmlnYXRlPXt1cml9IGljb249e0lDT05TLlZJRVd9IGJ1dHRvbj1cInByaW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcCBsYWJlbD17X18oJ0Nsb3NlJyl9PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtjbGVhclBsYXlpbmdVcml9IGljb249e0lDT05TLlJFTU9WRX0gYnV0dG9uPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7aXNSZWFkeVRvUGxheSA/IChcbiAgICAgICAgICAgIDxGaWxlUmVuZGVyIGN1cnJlbnRseUZsb2F0aW5nPXshaW5saW5lfSB1cmk9e3VyaX0gLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExvYWRpbmdTY3JlZW4gc3RhdHVzPXtsb2FkaW5nTWVzc2FnZX0gLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHshaW5saW5lICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZHJhZ2dhYmxlIGNvbnRlbnRfX2luZm9cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3X190aXRsZVwiIHRpdGxlPXt0aXRsZSB8fCB1cml9PlxuICAgICAgICAgICAgICAgIHt0aXRsZSB8fCB1cml9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8VXJpSW5kaWNhdG9yIGxpbmsgYWRkVG9vbHRpcD17ZmFsc2V9IHVyaT17dXJpfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RyYWdnYWJsZT5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFrQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0E7QUFDQTtBQWZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFrQkE7QUFDQTtBQUZBO0FBakJBO0FBQUE7QUFBQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBOUJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWZBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFLQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFQQTtBQVlBO0FBQ0E7QUFEQTtBQURBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileRenderFloating/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderInitiator/index.js": -/*!****************************************************!*\ - !*** ../ui/component/fileRenderInitiator/index.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./view */ \"../ui/component/fileRenderInitiator/view.jsx\");\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n obscurePreview: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectShouldObscurePreview\"])(props.uri)(state),\n isPlaying: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectIsPlaying\"])(props.uri)(state),\n playingUri: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"selectPlayingUri\"])(state),\n insufficientCredits: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectInsufficientCreditsForUri\"])(props.uri)(state),\n streamingUrl: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectStreamingUrlForUriWebProxy\"])(props.uri)(state),\n autoplay: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"AUTOPLAY\"])(state),\n hasCostInfo: Boolean(Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectCostInfoForUri\"])(props.uri)(state)),\n costInfo: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectCostInfoForUri\"])(props.uri)(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n play: function play(uri) {\n dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_2__[\"doSetPlayingUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_6__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_8__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbml0aWF0b3IvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbml0aWF0b3IvaW5kZXguanM/YTZiMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvUGxheVVyaSwgZG9TZXRQbGF5aW5nVXJpIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCB7IG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSwgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSwgbWFrZVNlbGVjdENsYWltRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdElzUGxheWluZyxcbiAgbWFrZVNlbGVjdFNob3VsZE9ic2N1cmVQcmV2aWV3LFxuICBzZWxlY3RQbGF5aW5nVXJpLFxuICBtYWtlU2VsZWN0SW5zdWZmaWNpZW50Q3JlZGl0c0ZvclVyaSxcbiAgbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaVdlYlByb3h5LFxuICBtYWtlU2VsZWN0RmlsZVJlbmRlck1vZGVGb3JVcmksXG59IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9jb250ZW50JztcbmltcG9ydCBGaWxlUmVuZGVySW5pdGlhdG9yIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIHRodW1ibmFpbDogbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgZmlsZUluZm86IG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgb2JzY3VyZVByZXZpZXc6IG1ha2VTZWxlY3RTaG91bGRPYnNjdXJlUHJldmlldyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgaXNQbGF5aW5nOiBtYWtlU2VsZWN0SXNQbGF5aW5nKHByb3BzLnVyaSkoc3RhdGUpLFxuICBwbGF5aW5nVXJpOiBzZWxlY3RQbGF5aW5nVXJpKHN0YXRlKSxcbiAgaW5zdWZmaWNpZW50Q3JlZGl0czogbWFrZVNlbGVjdEluc3VmZmljaWVudENyZWRpdHNGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHN0cmVhbWluZ1VybDogbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaVdlYlByb3h5KHByb3BzLnVyaSkoc3RhdGUpLFxuICBhdXRvcGxheTogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT1BMQVkpKHN0YXRlKSxcbiAgaGFzQ29zdEluZm86IEJvb2xlYW4obWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpKSxcbiAgY29zdEluZm86IG1ha2VTZWxlY3RDb3N0SW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgcmVuZGVyTW9kZTogbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBwbGF5OiB1cmkgPT4ge1xuICAgIGRpc3BhdGNoKGRvU2V0UGxheWluZ1VyaSh1cmkpKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlUmVuZGVySW5pdGlhdG9yKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBQUE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRenderInitiator/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderInitiator/view.jsx": -/*!****************************************************!*\ - !*** ../ui/component/fileRenderInitiator/view.jsx ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FileRenderInitiator; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_detect_typing__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/detect-typing */ \"../ui/util/detect-typing.js\");\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n// This component is entirely for triggering the start of a file view\n// The actual viewer for a file exists in TextViewer and FloatingViewer\n// They can't exist in one component because we need to handle/listen for the start of a new file view\n// while a file is currently being viewed\n\n\n\n\n\n\n\nvar SPACE_BAR_KEYCODE = 32;\nfunction FileRenderInitiator(props) {\n var play = props.play,\n isPlaying = props.isPlaying,\n fileInfo = props.fileInfo,\n uri = props.uri,\n obscurePreview = props.obscurePreview,\n insufficientCredits = props.insufficientCredits,\n history = props.history,\n thumbnail = props.thumbnail,\n autoplay = props.autoplay,\n renderMode = props.renderMode,\n hasCostInfo = props.hasCostInfo,\n costInfo = props.costInfo;\n var cost = costInfo && costInfo.cost;\n var isFree = hasCostInfo && cost === 0;\n var fileStatus = fileInfo && fileInfo.status;\n var isPlayable = constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"FLOATING_MODES\"].includes(renderMode); // Wrap this in useCallback because we need to use it to the keyboard effect\n // If we don't a new instance will be created for every render and react will think the dependencies have changed, which will add/remove the listener for every render\n\n var viewFile = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (e) {\n if (e) {\n e.stopPropagation();\n }\n\n play(uri);\n }, [play, uri]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // This is just for beginning to download a file\n // Play/Pause/Fullscreen will be handled by the respective viewers because not every file type should behave the same\n function handleKeyDown(e) {\n if (!Object(util_detect_typing__WEBPACK_IMPORTED_MODULE_5__[\"default\"])() && e.keyCode === SPACE_BAR_KEYCODE) {\n e.preventDefault();\n\n if (!isPlaying || fileStatus === 'stopped') {\n viewFile(e);\n }\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return function () {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isPlaying, fileStatus, viewFile]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var videoOnPage = document.querySelector('video');\n\n if (isFree && (autoplay && !videoOnPage && isPlayable || constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"AUTO_RENDER_MODES\"].includes(renderMode))) {\n viewFile();\n }\n }, [autoplay, viewFile, isFree, renderMode]);\n /*\n once content is playing, let the appropriate <FileRender> take care of it...\n but for playables, always render so area can be used to fill with floating player\n */\n\n if (isPlaying && !isPlayable) {\n return null;\n }\n\n var showAppNag = true && (!isFree || constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"UNSUPPORTED_IN_THIS_APP\"].includes(renderMode));\n var disabled = showAppNag || !fileInfo && insufficientCredits;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n onClick: disabled ? undefined : viewFile,\n style: thumbnail && !obscurePreview ? {\n backgroundImage: \"url(\\\"\".concat(thumbnail, \"\\\")\")\n } : {},\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('content__cover', {\n 'content__cover--disabled': disabled,\n 'card__media--nsfw': obscurePreview\n })\n }, showAppNag && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n type: \"helpful\",\n inline: true,\n message: __('This content requires LBRY Desktop to display.'),\n actionText: __('Get the App'),\n href: \"https://lbry.com/get\"\n }), insufficientCredits && !showAppNag && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n type: \"helpful\",\n inline: true,\n message: __('You need more credits to purchase this.'),\n actionText: __('Open Rewards'),\n onClick: function onClick() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"REWARDS\"]));\n }\n }), !disabled && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: viewFile,\n iconSize: 30,\n title: isPlayable ? __('Play') : __('View'),\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('button--icon', {\n 'button--play': isPlayable,\n 'button--view': !isPlayable\n })\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbml0aWF0b3Ivdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbml0aWF0b3Ivdmlldy5qc3g/ZjkxYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLy8gVGhpcyBjb21wb25lbnQgaXMgZW50aXJlbHkgZm9yIHRyaWdnZXJpbmcgdGhlIHN0YXJ0IG9mIGEgZmlsZSB2aWV3XG4vLyBUaGUgYWN0dWFsIHZpZXdlciBmb3IgYSBmaWxlIGV4aXN0cyBpbiBUZXh0Vmlld2VyIGFuZCBGbG9hdGluZ1ZpZXdlclxuLy8gVGhleSBjYW4ndCBleGlzdCBpbiBvbmUgY29tcG9uZW50IGJlY2F1c2Ugd2UgbmVlZCB0byBoYW5kbGUvbGlzdGVuIGZvciB0aGUgc3RhcnQgb2YgYSBuZXcgZmlsZSB2aWV3XG4vLyB3aGlsZSBhIGZpbGUgaXMgY3VycmVudGx5IGJlaW5nIHZpZXdlZFxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgKiBhcyBSRU5ERVJfTU9ERVMgZnJvbSAnY29uc3RhbnRzL2ZpbGVfcmVuZGVyX21vZGVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgaXNVc2VyVHlwaW5nIGZyb20gJ3V0aWwvZGV0ZWN0LXR5cGluZyc7XG5pbXBvcnQgTmFnIGZyb20gJ2NvbXBvbmVudC9jb21tb24vbmFnJztcblxuY29uc3QgU1BBQ0VfQkFSX0tFWUNPREUgPSAzMjtcblxudHlwZSBQcm9wcyA9IHtcbiAgcGxheTogc3RyaW5nID0+IHZvaWQsXG4gIGlzTG9hZGluZzogYm9vbGVhbixcbiAgaXNQbGF5aW5nOiBib29sZWFuLFxuICBmaWxlSW5mbzogRmlsZUxpc3RJdGVtLFxuICB1cmk6IHN0cmluZyxcbiAgaGlzdG9yeTogeyBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBvYnNjdXJlUHJldmlldzogYm9vbGVhbixcbiAgaW5zdWZmaWNpZW50Q3JlZGl0czogYm9vbGVhbixcbiAgdGh1bWJuYWlsPzogc3RyaW5nLFxuICBhdXRvcGxheTogYm9vbGVhbixcbiAgaGFzQ29zdEluZm86IGJvb2xlYW4sXG4gIGNvc3RJbmZvOiBhbnksXG4gIGlubGluZTogYm9vbGVhbixcbiAgcmVuZGVyTW9kZTogc3RyaW5nLFxuICBjbGFpbTogU3RyZWFtQ2xhaW0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaWxlUmVuZGVySW5pdGlhdG9yKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgcGxheSxcbiAgICBpc1BsYXlpbmcsXG4gICAgZmlsZUluZm8sXG4gICAgdXJpLFxuICAgIG9ic2N1cmVQcmV2aWV3LFxuICAgIGluc3VmZmljaWVudENyZWRpdHMsXG4gICAgaGlzdG9yeSxcbiAgICB0aHVtYm5haWwsXG4gICAgYXV0b3BsYXksXG4gICAgcmVuZGVyTW9kZSxcbiAgICBoYXNDb3N0SW5mbyxcbiAgICBjb3N0SW5mbyxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGNvc3QgPSBjb3N0SW5mbyAmJiBjb3N0SW5mby5jb3N0O1xuICBjb25zdCBpc0ZyZWUgPSBoYXNDb3N0SW5mbyAmJiBjb3N0ID09PSAwO1xuICBjb25zdCBmaWxlU3RhdHVzID0gZmlsZUluZm8gJiYgZmlsZUluZm8uc3RhdHVzO1xuICBjb25zdCBpc1BsYXlhYmxlID0gUkVOREVSX01PREVTLkZMT0FUSU5HX01PREVTLmluY2x1ZGVzKHJlbmRlck1vZGUpO1xuXG4gIC8vIFdyYXAgdGhpcyBpbiB1c2VDYWxsYmFjayBiZWNhdXNlIHdlIG5lZWQgdG8gdXNlIGl0IHRvIHRoZSBrZXlib2FyZCBlZmZlY3RcbiAgLy8gSWYgd2UgZG9uJ3QgYSBuZXcgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkIGZvciBldmVyeSByZW5kZXIgYW5kIHJlYWN0IHdpbGwgdGhpbmsgdGhlIGRlcGVuZGVuY2llcyBoYXZlIGNoYW5nZWQsIHdoaWNoIHdpbGwgYWRkL3JlbW92ZSB0aGUgbGlzdGVuZXIgZm9yIGV2ZXJ5IHJlbmRlclxuICBjb25zdCB2aWV3RmlsZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlPzogU3ludGhldGljSW5wdXRFdmVudDwqPiB8IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHBsYXkodXJpKTtcbiAgICB9LFxuICAgIFtwbGF5LCB1cmldXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGJlZ2lubmluZyB0byBkb3dubG9hZCBhIGZpbGVcbiAgICAvLyBQbGF5L1BhdXNlL0Z1bGxzY3JlZW4gd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSByZXNwZWN0aXZlIHZpZXdlcnMgYmVjYXVzZSBub3QgZXZlcnkgZmlsZSB0eXBlIHNob3VsZCBiZWhhdmUgdGhlIHNhbWVcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgIGlmICghaXNVc2VyVHlwaW5nKCkgJiYgZS5rZXlDb2RlID09PSBTUEFDRV9CQVJfS0VZQ09ERSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCFpc1BsYXlpbmcgfHwgZmlsZVN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgdmlld0ZpbGUoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIH07XG4gIH0sIFtpc1BsYXlpbmcsIGZpbGVTdGF0dXMsIHZpZXdGaWxlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB2aWRlb09uUGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7XG4gICAgaWYgKGlzRnJlZSAmJiAoKGF1dG9wbGF5ICYmICF2aWRlb09uUGFnZSAmJiBpc1BsYXlhYmxlKSB8fCBSRU5ERVJfTU9ERVMuQVVUT19SRU5ERVJfTU9ERVMuaW5jbHVkZXMocmVuZGVyTW9kZSkpKSB7XG4gICAgICB2aWV3RmlsZSgpO1xuICAgIH1cbiAgfSwgW2F1dG9wbGF5LCB2aWV3RmlsZSwgaXNGcmVlLCByZW5kZXJNb2RlXSk7XG5cbiAgLypcbiAgb25jZSBjb250ZW50IGlzIHBsYXlpbmcsIGxldCB0aGUgYXBwcm9wcmlhdGUgPEZpbGVSZW5kZXI+IHRha2UgY2FyZSBvZiBpdC4uLlxuICBidXQgZm9yIHBsYXlhYmxlcywgYWx3YXlzIHJlbmRlciBzbyBhcmVhIGNhbiBiZSB1c2VkIHRvIGZpbGwgd2l0aCBmbG9hdGluZyBwbGF5ZXJcbiAgICovXG4gIGlmIChpc1BsYXlpbmcgJiYgIWlzUGxheWFibGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNob3dBcHBOYWcgPSBJU19XRUIgJiYgKCFpc0ZyZWUgfHwgUkVOREVSX01PREVTLlVOU1VQUE9SVEVEX0lOX1RISVNfQVBQLmluY2x1ZGVzKHJlbmRlck1vZGUpKTtcblxuICBjb25zdCBkaXNhYmxlZCA9IHNob3dBcHBOYWcgfHwgKCFmaWxlSW5mbyAmJiBpbnN1ZmZpY2llbnRDcmVkaXRzKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIG9uQ2xpY2s9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogdmlld0ZpbGV9XG4gICAgICBzdHlsZT17dGh1bWJuYWlsICYmICFvYnNjdXJlUHJldmlldyA/IHsgYmFja2dyb3VuZEltYWdlOiBgdXJsKFwiJHt0aHVtYm5haWx9XCIpYCB9IDoge319XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NvbnRlbnRfX2NvdmVyJywge1xuICAgICAgICAnY29udGVudF9fY292ZXItLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAgICdjYXJkX19tZWRpYS0tbnNmdyc6IG9ic2N1cmVQcmV2aWV3LFxuICAgICAgfSl9XG4gICAgPlxuICAgICAge3Nob3dBcHBOYWcgJiYgKFxuICAgICAgICA8TmFnXG4gICAgICAgICAgdHlwZT1cImhlbHBmdWxcIlxuICAgICAgICAgIGlubGluZVxuICAgICAgICAgIG1lc3NhZ2U9e19fKCdUaGlzIGNvbnRlbnQgcmVxdWlyZXMgTEJSWSBEZXNrdG9wIHRvIGRpc3BsYXkuJyl9XG4gICAgICAgICAgYWN0aW9uVGV4dD17X18oJ0dldCB0aGUgQXBwJyl9XG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZ2V0XCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7aW5zdWZmaWNpZW50Q3JlZGl0cyAmJiAhc2hvd0FwcE5hZyAmJiAoXG4gICAgICAgIDxOYWdcbiAgICAgICAgICB0eXBlPVwiaGVscGZ1bFwiXG4gICAgICAgICAgaW5saW5lXG4gICAgICAgICAgbWVzc2FnZT17X18oJ1lvdSBuZWVkIG1vcmUgY3JlZGl0cyB0byBwdXJjaGFzZSB0aGlzLicpfVxuICAgICAgICAgIGFjdGlvblRleHQ9e19fKCdPcGVuIFJld2FyZHMnKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuUkVXQVJEU31gKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7IWRpc2FibGVkICYmIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e3ZpZXdGaWxlfVxuICAgICAgICAgIGljb25TaXplPXszMH1cbiAgICAgICAgICB0aXRsZT17aXNQbGF5YWJsZSA/IF9fKCdQbGF5JykgOiBfXygnVmlldycpfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnYnV0dG9uLS1pY29uJywge1xuICAgICAgICAgICAgJ2J1dHRvbi0tcGxheSc6IGlzUGxheWFibGUsXG4gICAgICAgICAgICAnYnV0dG9uLS12aWV3JzogIWlzUGxheWFibGUsXG4gICAgICAgICAgfSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFvQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBZEE7QUFtQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFPQTs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUpBO0FBWUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRenderInitiator/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderInline/index.js": -/*!*************************************************!*\ - !*** ../ui/component/fileRenderInline/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/fileRenderInline/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n isPlaying: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectIsPlaying\"])(props.uri)(state),\n streamingUrl: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectStreamingUrlForUriWebProxy\"])(props.uri)(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n triggerAnalyticsView: function triggerAnalyticsView(uri, timeToStart) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_5__[\"doAnalyticsView\"])(uri, timeToStart));\n },\n claimRewards: function claimRewards() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doClaimEligiblePurchaseRewards\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbmxpbmUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbmxpbmUvaW5kZXguanM/MDIyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0NsYWltRWxpZ2libGVQdXJjaGFzZVJld2FyZHMgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7XG4gIG1ha2VTZWxlY3RGaWxlUmVuZGVyTW9kZUZvclVyaSxcbiAgbWFrZVNlbGVjdElzUGxheWluZyxcbiAgbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaVdlYlByb3h5LFxufSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvY29udGVudCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGRvQW5hbHl0aWNzVmlldyB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBGaWxlUmVuZGVySW5saW5lIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGZpbGVJbmZvOiBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGlzUGxheWluZzogbWFrZVNlbGVjdElzUGxheWluZyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgc3RyZWFtaW5nVXJsOiBtYWtlU2VsZWN0U3RyZWFtaW5nVXJsRm9yVXJpV2ViUHJveHkocHJvcHMudXJpKShzdGF0ZSksXG4gIHJlbmRlck1vZGU6IG1ha2VTZWxlY3RGaWxlUmVuZGVyTW9kZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgdHJpZ2dlckFuYWx5dGljc1ZpZXc6ICh1cmksIHRpbWVUb1N0YXJ0KSA9PiBkaXNwYXRjaChkb0FuYWx5dGljc1ZpZXcodXJpLCB0aW1lVG9TdGFydCkpLFxuICBjbGFpbVJld2FyZHM6ICgpID0+IGRpc3BhdGNoKGRvQ2xhaW1FbGlnaWJsZVB1cmNoYXNlUmV3YXJkcygpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlUmVuZGVySW5saW5lKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRenderInline/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileRenderInline/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/fileRenderInline/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FileRenderInline; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_fileRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/fileRender */ \"../ui/component/fileRender/index.js\");\n/* harmony import */ var component_common_loading_screen__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/loading-screen */ \"../ui/component/common/loading-screen.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\nfunction FileRenderInline(props) {\n var isPlaying = props.isPlaying,\n fileInfo = props.fileInfo,\n uri = props.uri,\n streamingUrl = props.streamingUrl,\n triggerAnalyticsView = props.triggerAnalyticsView,\n claimRewards = props.claimRewards;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n _useState2 = _slicedToArray(_useState, 2),\n playTime = _useState2[0],\n setPlayTime = _useState2[1];\n\n var isReadyToPlay = streamingUrl || fileInfo && fileInfo.completed;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isPlaying) {\n setPlayTime(Date.now());\n }\n }, [isPlaying, setPlayTime, uri]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (playTime && isReadyToPlay) {\n var timeToStart = Date.now() - playTime;\n triggerAnalyticsView(uri, timeToStart).then(function () {\n claimRewards();\n setPlayTime(null);\n });\n }\n }, [setPlayTime, claimRewards, triggerAnalyticsView, isReadyToPlay, playTime, uri]);\n\n if (!isPlaying) {\n return null;\n }\n\n return isReadyToPlay ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileRender__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_loading_screen__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n status: __('Preparing your content')\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbmxpbmUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVSZW5kZXJJbmxpbmUvdmlldy5qc3g/OGM0NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmlsZVJlbmRlciBmcm9tICdjb21wb25lbnQvZmlsZVJlbmRlcic7XG5pbXBvcnQgTG9hZGluZ1NjcmVlbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2xvYWRpbmctc2NyZWVuJztcblxudHlwZSBQcm9wcyA9IHtcbiAgaXNQbGF5aW5nOiBib29sZWFuLFxuICBmaWxlSW5mbzogRmlsZUxpc3RJdGVtLFxuICB1cmk6IHN0cmluZyxcbiAgcmVuZGVyTW9kZTogc3RyaW5nLFxuICBzdHJlYW1pbmdVcmw/OiBzdHJpbmcsXG4gIHRyaWdnZXJBbmFseXRpY3NWaWV3OiAoc3RyaW5nLCBudW1iZXIpID0+IFByb21pc2U8YW55PixcbiAgY2xhaW1SZXdhcmRzOiAoKSA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmlsZVJlbmRlcklubGluZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBpc1BsYXlpbmcsIGZpbGVJbmZvLCB1cmksIHN0cmVhbWluZ1VybCwgdHJpZ2dlckFuYWx5dGljc1ZpZXcsIGNsYWltUmV3YXJkcyB9ID0gcHJvcHM7XG4gIGNvbnN0IFtwbGF5VGltZSwgc2V0UGxheVRpbWVdID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgaXNSZWFkeVRvUGxheSA9IHN0cmVhbWluZ1VybCB8fCAoZmlsZUluZm8gJiYgZmlsZUluZm8uY29tcGxldGVkKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1BsYXlpbmcpIHtcbiAgICAgIHNldFBsYXlUaW1lKERhdGUubm93KCkpO1xuICAgIH1cbiAgfSwgW2lzUGxheWluZywgc2V0UGxheVRpbWUsIHVyaV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBsYXlUaW1lICYmIGlzUmVhZHlUb1BsYXkpIHtcbiAgICAgIGNvbnN0IHRpbWVUb1N0YXJ0ID0gRGF0ZS5ub3coKSAtIHBsYXlUaW1lO1xuXG4gICAgICB0cmlnZ2VyQW5hbHl0aWNzVmlldyh1cmksIHRpbWVUb1N0YXJ0KS50aGVuKCgpID0+IHtcbiAgICAgICAgY2xhaW1SZXdhcmRzKCk7XG4gICAgICAgIHNldFBsYXlUaW1lKG51bGwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2V0UGxheVRpbWUsIGNsYWltUmV3YXJkcywgdHJpZ2dlckFuYWx5dGljc1ZpZXcsIGlzUmVhZHlUb1BsYXksIHBsYXlUaW1lLCB1cmldKTtcblxuICBpZiAoIWlzUGxheWluZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlzUmVhZHlUb1BsYXkgPyA8RmlsZVJlbmRlciB1cmk9e3VyaX0gLz4gOiA8TG9hZGluZ1NjcmVlbiBzdGF0dXM9e19fKCdQcmVwYXJpbmcgeW91ciBjb250ZW50Jyl9IC8+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFSQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileRenderInline/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileSubtitle/index.js": -/*!*********************************************!*\ - !*** ../ui/component/fileSubtitle/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/fileSubtitle/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n pendingAmount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPendingAmountByUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVTdWJ0aXRsZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVN1YnRpdGxlL2luZGV4LmpzP2ZhMzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgbWFrZVNlbGVjdFBlbmRpbmdBbW91bnRCeVVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEZpbGVTdWJ0aXRsZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBwZW5kaW5nQW1vdW50OiBtYWtlU2VsZWN0UGVuZGluZ0Ftb3VudEJ5VXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCkoRmlsZVN1YnRpdGxlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileSubtitle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileSubtitle/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/fileSubtitle/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_dateTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/dateTime */ \"../ui/component/dateTime/index.js\");\n/* harmony import */ var component_fileViewCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/fileViewCount */ \"../ui/component/fileViewCount/index.js\");\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n\n\n\n\n\nfunction FileSubtitle(props) {\n var uri = props.uri,\n claim = props.claim,\n pendingAmount = props.pendingAmount;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"media__subtitle--between\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n show: component_dateTime__WEBPACK_IMPORTED_MODULE_1__[\"default\"].SHOW_DATE\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n badge: false,\n amount: parseFloat(claim.amount) + parseFloat(pendingAmount || claim.meta.support_amount),\n precision: 2\n }), ' • '\n /* this is bad, but it's quick! */\n , react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileViewCount__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileSubtitle);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVTdWJ0aXRsZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVN1YnRpdGxlL3ZpZXcuanN4PzUyNmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSAnY29tcG9uZW50L2RhdGVUaW1lJztcbmltcG9ydCBGaWxlVmlld0NvdW50IGZyb20gJ2NvbXBvbmVudC9maWxlVmlld0NvdW50JztcbmltcG9ydCBDcmVkaXRBbW91bnQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jcmVkaXQtYW1vdW50JztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgcGVuZGluZ0Ftb3VudDogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gRmlsZVN1YnRpdGxlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHVyaSwgY2xhaW0sIHBlbmRpbmdBbW91bnQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9fc3VidGl0bGUtLWJldHdlZW5cIj5cbiAgICAgIDxEYXRlVGltZSB1cmk9e3VyaX0gc2hvdz17RGF0ZVRpbWUuU0hPV19EQVRFfSAvPlxuICAgICAgPHNwYW4+XG4gICAgICAgIDxDcmVkaXRBbW91bnRcbiAgICAgICAgICBiYWRnZT17ZmFsc2V9XG4gICAgICAgICAgYW1vdW50PXtwYXJzZUZsb2F0KGNsYWltLmFtb3VudCkgKyBwYXJzZUZsb2F0KHBlbmRpbmdBbW91bnQgfHwgY2xhaW0ubWV0YS5zdXBwb3J0X2Ftb3VudCl9XG4gICAgICAgICAgcHJlY2lzaW9uPXsyfVxuICAgICAgICAvPlxuICAgICAgICB7JyDigKIgJyAvKiB0aGlzIGlzIGJhZCwgYnV0IGl0J3MgcXVpY2shICovfVxuICAgICAgICA8RmlsZVZpZXdDb3VudCB1cmk9e3VyaX0gLz5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVN1YnRpdGxlO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBTkE7QUFPQTtBQUFBO0FBSUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileSubtitle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileThumbnail/index.js": -/*!**********************************************!*\ - !*** ../ui/component/fileThumbnail/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/component/fileThumbnail/view.jsx\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUaHVtYm5haWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVUaHVtYm5haWwvaW5kZXguanM/MmEzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2FyZE1lZGlhIGZyb20gJy4vdmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IENhcmRNZWRpYTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileThumbnail/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileThumbnail/placeholder.png": -/*!*****************************************************!*\ - !*** ../ui/component/fileThumbnail/placeholder.png ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/placeholder.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUaHVtYm5haWwvcGxhY2Vob2xkZXIucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlVGh1bWJuYWlsL3BsYWNlaG9sZGVyLnBuZz9iMDgzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImltZy9wbGFjZWhvbGRlci5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileThumbnail/placeholder.png\n"); - -/***/ }), - -/***/ "../ui/component/fileThumbnail/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/fileThumbnail/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _placeholder_png__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./placeholder.png */ \"../ui/component/fileThumbnail/placeholder.png\");\n/* harmony import */ var _placeholder_png__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_placeholder_png__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n // import FreezeframeWrapper from './FreezeframeWrapper';\n\n\nvar className = 'media__thumb';\n\nvar CardMedia = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CardMedia, _React$PureComponent);\n\n function CardMedia() {\n _classCallCheck(this, CardMedia);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(CardMedia).apply(this, arguments));\n }\n\n _createClass(CardMedia, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n thumbnail = _this$props.thumbnail,\n children = _this$props.children; // Disabling temporarily to see if people complain\n // if (thumbnail && thumbnail.endsWith('gif')) {\n // return <FreezeframeWrapper src={thumbnail} className={className} />;\n // }\n\n var url; // Pass image urls through a compression proxy\n\n url = thumbnail || _placeholder_png__WEBPACK_IMPORTED_MODULE_1___default.a; // url = thumbnail\n // ? 'https://ext.thumbnails.lbry.com/400x,q55/' +\n // // The image server will redirect if we don't remove the double slashes after http(s)\n // thumbnail.replace('https://', 'https:/').replace('http://', 'http:/')\n // : Placeholder;\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n style: {\n backgroundImage: \"url('\".concat(url.replace(/'/g, \"\\\\'\"), \"')\")\n },\n className: className\n }, children);\n }\n }]);\n\n return CardMedia;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CardMedia);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUaHVtYm5haWwvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVUaHVtYm5haWwvdmlldy5qc3g/NzZjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8vIGltcG9ydCBGcmVlemVmcmFtZVdyYXBwZXIgZnJvbSAnLi9GcmVlemVmcmFtZVdyYXBwZXInO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJy4vcGxhY2Vob2xkZXIucG5nJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGh1bWJuYWlsOiA/c3RyaW5nLCAvLyBleHRlcm5hbGx5IHNvdXJjZWQgaW1hZ2VcbiAgY2hpbGRyZW4/OiBOb2RlLFxufTtcblxuY29uc3QgY2xhc3NOYW1lID0gJ21lZGlhX190aHVtYic7XG5cbmNsYXNzIENhcmRNZWRpYSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdGh1bWJuYWlsLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIERpc2FibGluZyB0ZW1wb3JhcmlseSB0byBzZWUgaWYgcGVvcGxlIGNvbXBsYWluXG4gICAgLy8gaWYgKHRodW1ibmFpbCAmJiB0aHVtYm5haWwuZW5kc1dpdGgoJ2dpZicpKSB7XG4gICAgLy8gICByZXR1cm4gPEZyZWV6ZWZyYW1lV3JhcHBlciBzcmM9e3RodW1ibmFpbH0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IC8+O1xuICAgIC8vIH1cbiAgICBsZXQgdXJsO1xuICAgIC8vIFBhc3MgaW1hZ2UgdXJscyB0aHJvdWdoIGEgY29tcHJlc3Npb24gcHJveHlcbiAgICB1cmwgPSB0aHVtYm5haWwgfHwgUGxhY2Vob2xkZXI7XG4gICAgLy8gdXJsID0gdGh1bWJuYWlsXG4gICAgLy8gICA/ICdodHRwczovL2V4dC50aHVtYm5haWxzLmxicnkuY29tLzQwMHgscTU1LycgK1xuICAgIC8vICAgICAvLyBUaGUgaW1hZ2Ugc2VydmVyIHdpbGwgcmVkaXJlY3QgaWYgd2UgZG9uJ3QgcmVtb3ZlIHRoZSBkb3VibGUgc2xhc2hlcyBhZnRlciBodHRwKHMpXG4gICAgLy8gICAgIHRodW1ibmFpbC5yZXBsYWNlKCdodHRwczovLycsICdodHRwczovJykucmVwbGFjZSgnaHR0cDovLycsICdodHRwOi8nKVxuICAgIC8vICAgOiBQbGFjZWhvbGRlcjtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IGJhY2tncm91bmRJbWFnZTogYHVybCgnJHt1cmwucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpYCB9fSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FyZE1lZGlhO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQXRCQTtBQUNBO0FBd0JBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileThumbnail/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileTitle/index.js": -/*!******************************************!*\ - !*** ../ui/component/fileTitle/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/fileTitle/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n isInsufficientCredits: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectInsufficientCreditsForUri\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUaXRsZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVRpdGxlL2luZGV4LmpzP2IzYmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RUaXRsZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdEluc3VmZmljaWVudENyZWRpdHNGb3JVcmkgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvY29udGVudCc7XG5pbXBvcnQgRmlsZVRpdGxlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGlzSW5zdWZmaWNpZW50Q3JlZGl0czogbWFrZVNlbGVjdEluc3VmZmljaWVudENyZWRpdHNGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHRpdGxlOiBtYWtlU2VsZWN0VGl0bGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKEZpbGVUaXRsZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileTitle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileTitle/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/fileTitle/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_filePrice__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/filePrice */ \"../ui/component/filePrice/index.js\");\n/* harmony import */ var component_claimInsufficientCredits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimInsufficientCredits */ \"../ui/component/claimInsufficientCredits/index.js\");\n/* harmony import */ var component_fileSubtitle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/fileSubtitle */ \"../ui/component/fileSubtitle/index.js\");\n/* harmony import */ var component_fileAuthor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/fileAuthor */ \"../ui/component/fileAuthor/index.js\");\n/* harmony import */ var component_fileActions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/fileActions */ \"../ui/component/fileActions/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n\n\n\n\n\n\n\n\n\nfunction FileTitle(props) {\n var title = props.title,\n uri = props.uri,\n nsfw = props.nsfw;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isPageTitle: true,\n title: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, title, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_filePrice__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n badge: true,\n uri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"normalizeURI\"])(uri)\n }), nsfw && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: \"media__title-badge\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: \"badge badge--tag-mature\"\n }, __('Mature')))),\n body: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimInsufficientCredits__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileSubtitle__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileAuthor__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n })),\n actions: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileActions__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri\n })\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileTitle);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUaXRsZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvZmlsZVRpdGxlL3ZpZXcuanN4PzUyZjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vcm1hbGl6ZVVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEZpbGVQcmljZSBmcm9tICdjb21wb25lbnQvZmlsZVByaWNlJztcbmltcG9ydCBDbGFpbUluc3VmZmljaWVudENyZWRpdHMgZnJvbSAnY29tcG9uZW50L2NsYWltSW5zdWZmaWNpZW50Q3JlZGl0cyc7XG5pbXBvcnQgRmlsZVN1YnRpdGxlIGZyb20gJ2NvbXBvbmVudC9maWxlU3VidGl0bGUnO1xuaW1wb3J0IEZpbGVBdXRob3IgZnJvbSAnY29tcG9uZW50L2ZpbGVBdXRob3InO1xuaW1wb3J0IEZpbGVBY3Rpb25zIGZyb20gJ2NvbXBvbmVudC9maWxlQWN0aW9ucyc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbiAgbnNmdzogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIEZpbGVUaXRsZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB0aXRsZSwgdXJpLCBuc2Z3IH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpc1BhZ2VUaXRsZVxuICAgICAgdGl0bGU9e1xuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAge3RpdGxlfVxuICAgICAgICAgIDxGaWxlUHJpY2UgYmFkZ2UgdXJpPXtub3JtYWxpemVVUkkodXJpKX0gLz5cbiAgICAgICAgICB7bnNmdyAmJiAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtZWRpYV9fdGl0bGUtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmFkZ2UgYmFkZ2UtLXRhZy1tYXR1cmVcIj57X18oJ01hdHVyZScpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgfVxuICAgICAgYm9keT17XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8Q2xhaW1JbnN1ZmZpY2llbnRDcmVkaXRzIHVyaT17dXJpfSAvPlxuICAgICAgICAgIDxGaWxlU3VidGl0bGUgdXJpPXt1cml9IC8+XG4gICAgICAgICAgPEZpbGVBdXRob3IgdXJpPXt1cml9IC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgICBhY3Rpb25zPXs8RmlsZUFjdGlvbnMgdXJpPXt1cml9IC8+fVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVUaXRsZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQXBCQTtBQXVCQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileTitle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileType/index.js": -/*!*****************************************!*\ - !*** ../ui/component/fileType/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/fileType/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n mediaType: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMediaTypeForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUeXBlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlVHlwZS9pbmRleC5qcz8wZmQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgbWVkaWFUeXBlOiBtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShGaWxlVHlwZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/fileType/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileType/view.jsx": -/*!*****************************************!*\ - !*** ../ui/component/fileType/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n\n\n\n\nfunction FileType(props) {\n var mediaType = props.mediaType;\n\n if (mediaType === 'image') {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"IMAGE\"]\n });\n } else if (mediaType === 'audio') {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"AUDIO\"]\n });\n } else if (mediaType === 'video') {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VIDEO\"]\n });\n } else if (mediaType === 'text') {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TEXT\"]\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOADABLE\"]\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileType);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVUeXBlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9maWxlVHlwZS92aWV3LmpzeD9kZjY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBtZWRpYVR5cGU6IHN0cmluZyxcbn07XG5cbmZ1bmN0aW9uIEZpbGVUeXBlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG1lZGlhVHlwZSB9ID0gcHJvcHM7XG5cbiAgaWYgKG1lZGlhVHlwZSA9PT0gJ2ltYWdlJykge1xuICAgIHJldHVybiA8SWNvbiBpY29uPXtJQ09OUy5JTUFHRX0gLz47XG4gIH0gZWxzZSBpZiAobWVkaWFUeXBlID09PSAnYXVkaW8nKSB7XG4gICAgcmV0dXJuIDxJY29uIGljb249e0lDT05TLkFVRElPfSAvPjtcbiAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycpIHtcbiAgICByZXR1cm4gPEljb24gaWNvbj17SUNPTlMuVklERU99IC8+O1xuICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgcmV0dXJuIDxJY29uIGljb249e0lDT05TLlRFWFR9IC8+O1xuICB9XG5cbiAgcmV0dXJuIDxJY29uIGljb249e0lDT05TLkRPV05MT0FEQUJMRX0gLz47XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVUeXBlO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileType/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileValues/index.js": -/*!*******************************************!*\ - !*** ../ui/component/fileValues/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/fileValues/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n contentType: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectContentTypeForUri\"])(props.uri)(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataForUri\"])(props.uri)(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state),\n pendingAmount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPendingAmountByUri\"])(props.uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVWYWx1ZXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVWYWx1ZXMvaW5kZXguanM/NzNhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmksXG4gIG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSxcbiAgbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpLFxuICBtYWtlU2VsZWN0UGVuZGluZ0Ftb3VudEJ5VXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlciB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5cbmltcG9ydCBGaWxlVmFsdWVzIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGNvbnRlbnRUeXBlOiBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGZpbGVJbmZvOiBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIG1ldGFkYXRhOiBtYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICBwZW5kaW5nQW1vdW50OiBtYWtlU2VsZWN0UGVuZGluZ0Ftb3VudEJ5VXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjbGFpbUlzTWluZTogbWFrZVNlbGVjdENsYWltSXNNaW5lKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBvcGVuTW9kYWw6IChtb2RhbCwgcHJvcHMpID0+IGRpc3BhdGNoKGRvT3Blbk1vZGFsKG1vZGFsLCBwcm9wcykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlVmFsdWVzKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQUE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileValues/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileValues/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/fileValues/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_common_help_link__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/help-link */ \"../ui/component/common/help-link.jsx\");\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\n\nvar FileValues = /*#__PURE__*/function (_PureComponent) {\n _inherits(FileValues, _PureComponent);\n\n function FileValues() {\n _classCallCheck(this, FileValues);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(FileValues).apply(this, arguments));\n }\n\n _createClass(FileValues, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n uri = _this$props.uri,\n claim = _this$props.claim,\n metadata = _this$props.metadata,\n openModal = _this$props.openModal,\n pendingAmount = _this$props.pendingAmount,\n claimIsMine = _this$props.claimIsMine;\n\n if (!claim || !metadata) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __('Empty claim or metadata info.'));\n }\n\n var supportsAmount = claim && claim.meta && claim.meta.support_amount && Number(claim.meta.support_amount);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: __('LBC Details'),\n defaultExpand: false,\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"table\", {\n className: \"table table--condensed table--fixed table--lbc-details\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tbody\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, \" \", __('Original Publish Amount')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, claim && claim.amount ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n badge: false,\n amount: Number(claim.amount),\n precision: 2\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, \"...\"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, ' ', __('Supports and Tips'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_help_link__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n href: \"https://lbry.com/faq/tipping\"\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, claimIsMine && !pendingAmount && Boolean(supportsAmount) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n className: \"expandable__button\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"UNLOCK\"],\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n badge: false,\n amount: Number(supportsAmount),\n precision: 2\n }),\n onClick: function onClick() {\n openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"LIQUIDATE_SUPPORTS\"], {\n uri: uri\n });\n }\n }), ' '), (!claimIsMine || claimIsMine && !pendingAmount && supportsAmount === 0) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n badge: false,\n amount: Number(supportsAmount),\n precision: 2\n }), claimIsMine && pendingAmount && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n type: 'small'\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('Total Staked Amount'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_help_link__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n href: \"https://lbry.com/faq/tipping\"\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n badge: false,\n amount: Number(claim.meta.effective_amount),\n precision: 2\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, __('Community Choice?'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_help_link__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n href: \"https://lbry.com/faq/naming\"\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: claim.meta.is_controlling ? __('Yes') : __('No'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_5__[\"TOP\"], \"?name=\").concat(claim.name)\n })))))\n }));\n }\n }]);\n\n return FileValues;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileValues);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVWYWx1ZXMvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVWYWx1ZXMvdmlldy5qc3g/N2I2MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgSGVscExpbmsgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9oZWxwLWxpbmsnO1xuaW1wb3J0IENyZWRpdEFtb3VudCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NyZWRpdC1hbW91bnQnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgZmlsZUluZm86IEZpbGVMaXN0SXRlbSxcbiAgbWV0YWRhdGE6IFN0cmVhbU1ldGFkYXRhLFxuICBvcGVuRm9sZGVyOiBzdHJpbmcgPT4gdm9pZCxcbiAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgdXNlcjogP2FueSxcbiAgcGVuZGluZ0Ftb3VudDogc3RyaW5nLFxuICBvcGVuTW9kYWw6IChpZDogc3RyaW5nLCB7IHVyaTogc3RyaW5nIH0pID0+IHZvaWQsXG4gIGNsYWltSXNNaW5lOiBib29sZWFuLFxufTtcblxuY2xhc3MgRmlsZVZhbHVlcyBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdXJpLCBjbGFpbSwgbWV0YWRhdGEsIG9wZW5Nb2RhbCwgcGVuZGluZ0Ftb3VudCwgY2xhaW1Jc01pbmUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFjbGFpbSB8fCAhbWV0YWRhdGEpIHtcbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJlbXB0eVwiPntfXygnRW1wdHkgY2xhaW0gb3IgbWV0YWRhdGEgaW5mby4nKX08L3NwYW4+O1xuICAgIH1cbiAgICBjb25zdCBzdXBwb3J0c0Ftb3VudCA9IGNsYWltICYmIGNsYWltLm1ldGEgJiYgY2xhaW0ubWV0YS5zdXBwb3J0X2Ftb3VudCAmJiBOdW1iZXIoY2xhaW0ubWV0YS5zdXBwb3J0X2Ftb3VudCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgPENhcmRcbiAgICAgICAgICB0aXRsZT17X18oJ0xCQyBEZXRhaWxzJyl9XG4gICAgICAgICAgZGVmYXVsdEV4cGFuZD17ZmFsc2V9XG4gICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtLWNvbmRlbnNlZCB0YWJsZS0tZml4ZWQgdGFibGUtLWxiYy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQ+IHtfXygnT3JpZ2luYWwgUHVibGlzaCBBbW91bnQnKX08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICB7Y2xhaW0gJiYgY2xhaW0uYW1vdW50ID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxDcmVkaXRBbW91bnQgYmFkZ2U9e2ZhbHNlfSBhbW91bnQ9e051bWJlcihjbGFpbS5hbW91bnQpfSBwcmVjaXNpb249ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHA+Li4uPC9wPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAge19fKCdTdXBwb3J0cyBhbmQgVGlwcycpfVxuICAgICAgICAgICAgICAgICAgICA8SGVscExpbmsgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3RpcHBpbmdcIiAvPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAge2NsYWltSXNNaW5lICYmICFwZW5kaW5nQW1vdW50ICYmIEJvb2xlYW4oc3VwcG9ydHNBbW91bnQpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZXhwYW5kYWJsZV9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17SUNPTlMuVU5MT0NLfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17PENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IGFtb3VudD17TnVtYmVyKHN1cHBvcnRzQW1vdW50KX0gcHJlY2lzaW9uPXsyfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5Nb2RhbChNT0RBTFMuTElRVUlEQVRFX1NVUFBPUlRTLCB7IHVyaSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgeyghY2xhaW1Jc01pbmUgfHwgKGNsYWltSXNNaW5lICYmICFwZW5kaW5nQW1vdW50ICYmIHN1cHBvcnRzQW1vdW50ID09PSAwKSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxDcmVkaXRBbW91bnQgYmFkZ2U9e2ZhbHNlfSBhbW91bnQ9e051bWJlcihzdXBwb3J0c0Ftb3VudCl9IHByZWNpc2lvbj17Mn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICB7Y2xhaW1Jc01pbmUgJiYgcGVuZGluZ0Ftb3VudCAmJiA8U3Bpbm5lciB0eXBlPXsnc21hbGwnfSAvPn1cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAge19fKCdUb3RhbCBTdGFrZWQgQW1vdW50Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgPEhlbHBMaW5rIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS90aXBwaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8Q3JlZGl0QW1vdW50IGJhZGdlPXtmYWxzZX0gYW1vdW50PXtOdW1iZXIoY2xhaW0ubWV0YS5lZmZlY3RpdmVfYW1vdW50KX0gcHJlY2lzaW9uPXsyfSAvPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAge19fKCdDb21tdW5pdHkgQ2hvaWNlPycpfVxuICAgICAgICAgICAgICAgICAgICA8SGVscExpbmsgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL25hbWluZ1wiIC8+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2NsYWltLm1ldGEuaXNfY29udHJvbGxpbmcgPyBfXygnWWVzJykgOiBfXygnTm8nKX1cbiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuVE9QfT9uYW1lPSR7Y2xhaW0ubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVZhbHVlcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY0E7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQVVBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQVBBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBT0E7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUhBO0FBNURBO0FBeUVBOzs7O0FBbEZBO0FBQ0E7QUFvRkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileValues/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/fileViewCount/index.js": -/*!**********************************************!*\ - !*** ../ui/component/fileViewCount/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/fileViewCount/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimForUri\"])(props.uri)(state),\n viewCount: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectViewCountForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchViewCount: function fetchViewCount(claimId) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doFetchViewCount\"])(claimId));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVWaWV3Q291bnQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVWaWV3Q291bnQvaW5kZXguanM/NDEwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9GZXRjaFZpZXdDb3VudCwgbWFrZVNlbGVjdFZpZXdDb3VudEZvclVyaSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IEZpbGVWaWV3Q291bnQgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICB2aWV3Q291bnQ6IG1ha2VTZWxlY3RWaWV3Q291bnRGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGZldGNoVmlld0NvdW50OiBjbGFpbUlkID0+IGRpc3BhdGNoKGRvRmV0Y2hWaWV3Q291bnQoY2xhaW1JZCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlVmlld0NvdW50KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/fileViewCount/index.js\n"); - -/***/ }), - -/***/ "../ui/component/fileViewCount/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/fileViewCount/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_help_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/help-link */ \"../ui/component/common/help-link.jsx\");\n\n\n\nfunction FileViewCount(props) {\n var claim = props.claim,\n uri = props.uri,\n fetchViewCount = props.fetchViewCount,\n viewCount = props.viewCount;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (claim && claim.claim_id) {\n fetchViewCount(claim.claim_id);\n }\n }, [fetchViewCount, uri, claim]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, viewCount !== 1 ? __('%view_count% Views', {\n view_count: viewCount\n }) : __('1 View'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_help_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"https://lbry.com/faq/views\"\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileViewCount);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ZpbGVWaWV3Q291bnQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ZpbGVWaWV3Q291bnQvdmlldy5qc3g/MjMyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBIZWxwTGluayBmcm9tICdjb21wb25lbnQvY29tbW9uL2hlbHAtbGluayc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgZmV0Y2hWaWV3Q291bnQ6IHN0cmluZyA9PiB2b2lkLFxuICB1cmk6IHN0cmluZyxcbiAgdmlld0NvdW50OiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBGaWxlVmlld0NvdW50KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNsYWltLCB1cmksIGZldGNoVmlld0NvdW50LCB2aWV3Q291bnQgfSA9IHByb3BzO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsYWltICYmIGNsYWltLmNsYWltX2lkKSB7XG4gICAgICBmZXRjaFZpZXdDb3VudChjbGFpbS5jbGFpbV9pZCk7XG4gICAgfVxuICB9LCBbZmV0Y2hWaWV3Q291bnQsIHVyaSwgY2xhaW1dKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuPlxuICAgICAge3ZpZXdDb3VudCAhPT0gMSA/IF9fKCcldmlld19jb3VudCUgVmlld3MnLCB7IHZpZXdfY291bnQ6IHZpZXdDb3VudCB9KSA6IF9fKCcxIFZpZXcnKX1cbiAgICAgIDxIZWxwTGluayBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvdmlld3NcIiAvPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVZpZXdDb3VudDtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/fileViewCount/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/header/index.js": -/*!***************************************!*\ - !*** ../ui/component/header/index.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./view */ \"../ui/component/header/view.jsx\");\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectBalance\"])(state),\n language: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"LANGUAGE\"])(state),\n // trigger redraw on language change\n roundedBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"formatCredits\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectBalance\"])(state) || 0, 2, true),\n currentTheme: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"THEME\"])(state),\n automaticDarkModeEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"AUTOMATIC_DARK_MODE_ENABLED\"])(state),\n hideBalance: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"HIDE_BALANCE\"])(state),\n authenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUserVerifiedEmail\"])(state),\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUserEmail\"])(state),\n syncError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectGetSyncErrorMessage\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setClientSetting: function setClientSetting(key, value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_5__[\"doSetClientSetting\"])(key, value));\n },\n signOut: function signOut() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_6__[\"doSignOut\"])());\n },\n openMobileNavigation: function openMobileNavigation() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_6__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"MOBILE_NAVIGATION\"]));\n },\n openChannelCreate: function openChannelCreate() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_6__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"CREATE_CHANNEL\"]));\n },\n openSignOutModal: function openSignOutModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_6__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"SIGN_OUT\"]));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_8__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2hlYWRlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvaGVhZGVyL2luZGV4LmpzP2I1MDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEJhbGFuY2UsIGZvcm1hdENyZWRpdHMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsLCBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlLCBzZWxlY3RVc2VyRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IGRvU2V0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgZG9TaWduT3V0LCBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCBIZWFkZXIgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgYmFsYW5jZTogc2VsZWN0QmFsYW5jZShzdGF0ZSksXG4gIGxhbmd1YWdlOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5MQU5HVUFHRSkoc3RhdGUpLCAvLyB0cmlnZ2VyIHJlZHJhdyBvbiBsYW5ndWFnZSBjaGFuZ2VcbiAgcm91bmRlZEJhbGFuY2U6IGZvcm1hdENyZWRpdHMoc2VsZWN0QmFsYW5jZShzdGF0ZSkgfHwgMCwgMiwgdHJ1ZSksXG4gIGN1cnJlbnRUaGVtZTogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuVEhFTUUpKHN0YXRlKSxcbiAgYXV0b21hdGljRGFya01vZGVFbmFibGVkOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPTUFUSUNfREFSS19NT0RFX0VOQUJMRUQpKHN0YXRlKSxcbiAgaGlkZUJhbGFuY2U6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkhJREVfQkFMQU5DRSkoc3RhdGUpLFxuICBhdXRoZW50aWNhdGVkOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG4gIGVtYWlsOiBzZWxlY3RVc2VyRW1haWwoc3RhdGUpLFxuICBzeW5jRXJyb3I6IHNlbGVjdEdldFN5bmNFcnJvck1lc3NhZ2Uoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBzZXRDbGllbnRTZXR0aW5nOiAoa2V5LCB2YWx1ZSkgPT4gZGlzcGF0Y2goZG9TZXRDbGllbnRTZXR0aW5nKGtleSwgdmFsdWUpKSxcbiAgc2lnbk91dDogKCkgPT4gZGlzcGF0Y2goZG9TaWduT3V0KCkpLFxuICBvcGVuTW9iaWxlTmF2aWdhdGlvbjogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLk1PQklMRV9OQVZJR0FUSU9OKSksXG4gIG9wZW5DaGFubmVsQ3JlYXRlOiAoKSA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChNT0RBTFMuQ1JFQVRFX0NIQU5ORUwpKSxcbiAgb3BlblNpZ25PdXRNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLlNJR05fT1VUKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKEhlYWRlcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFBQTtBQUNBO0FBV0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFKQTtBQUtBO0FBQUE7QUFBQTtBQUxBO0FBQUE7QUFDQTtBQU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/header/index.js\n"); - -/***/ }), - -/***/ "../ui/component/header/view.jsx": -/*!***************************************!*\ - !*** ../ui/component/header/view.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_lbc_symbol__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/lbc-symbol */ \"../ui/component/common/lbc-symbol.jsx\");\n/* harmony import */ var component_wunderbar__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/wunderbar */ \"../ui/component/wunderbar/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var _reach_menu_button__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @reach/menu-button */ \"../node_modules/@reach/menu-button/dist/menu-button.esm.js\");\n/* harmony import */ var component_common_tooltip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/common/tooltip */ \"../ui/component/common/tooltip.jsx\");\n/* harmony import */ var component_navigationButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/navigationButton */ \"../ui/component/navigationButton/index.js\");\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Header = function Header(props) {\n var roundedBalance = props.roundedBalance,\n history = props.history,\n setClientSetting = props.setClientSetting,\n currentTheme = props.currentTheme,\n automaticDarkModeEnabled = props.automaticDarkModeEnabled,\n hideBalance = props.hideBalance,\n email = props.email,\n authenticated = props.authenticated,\n authHeader = props.authHeader,\n signOut = props.signOut,\n syncError = props.syncError,\n openMobileNavigation = props.openMobileNavigation,\n openChannelCreate = props.openChannelCreate,\n openSignOutModal = props.openSignOutModal; // on the verify page don't let anyone escape other than by closing the tab to keep session data consistent\n\n var isVerifyPage = history.location.pathname.includes(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"AUTH_VERIFY\"]); // Sign out if they click the \"x\" when they are on the password prompt\n\n var authHeaderAction = syncError ? {\n onClick: signOut\n } : {\n navigate: '/'\n };\n var homeButtonNavigationProps = isVerifyPage ? {} : authHeader ? authHeaderAction : {\n navigate: '/'\n };\n var closeButtonNavigationProps = authHeader ? authHeaderAction : {\n onClick: function onClick() {\n return history.goBack();\n }\n };\n\n function handleThemeToggle() {\n if (automaticDarkModeEnabled) {\n setClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"AUTOMATIC_DARK_MODE_ENABLED\"], false);\n }\n\n if (currentTheme === 'dark') {\n setClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"THEME\"], 'light');\n } else {\n setClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"THEME\"], 'dark');\n }\n }\n\n function getWalletTitle() {\n return hideBalance ? __('Wallet') : react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment, null, roundedBalance, \" \", react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_lbc_symbol__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"header\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_5___default()('header', {\n 'header--minimal': authHeader,\n 'header--noauth-web': !authenticated\n })\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"header__contents\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"header__navigation\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({\n className: \"header__navigation-item header__navigation-item--lbry header__navigation-item--button-mobile\",\n label: __('LBRY'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LBRY\"],\n onClick: function onClick() {\n return window.scrollTo(0, 0);\n }\n }, homeButtonNavigationProps)), !authHeader && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_wunderbar__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null)), !authHeader ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_5___default()('header__menu', {\n 'header__menu--with-balance': false || authenticated\n })\n }, ( false || authenticated) && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": __('Your wallet'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"WALLET\"]),\n className: \"header__navigation-item menu__title header__navigation-item--balance\",\n label: getWalletTitle()\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"Menu\"], null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuButton\"], {\n className: \"header__navigation-item menu__title header__navigation-item--icon\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n \"aria-label\": __('Publish a file, or create a channel')\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: 18,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"]\n }))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuList\"], {\n className: \"menu__list--header\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"PUBLISH\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"]\n }), __('Publish')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: openChannelCreate\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL\"]\n }), __('New Channel')))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"Menu\"], null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuButton\"], {\n className: \"header__navigation-item menu__title header__navigation-item--icon\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n \"aria-label\": __('Your account')\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: 18,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ACCOUNT\"]\n }))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuList\"], {\n className: \"menu__list--header\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"PUBLISHED\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"]\n }), __('Publishes')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"CHANNELS\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL\"]\n }), __('Channels')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"CREATOR_DASHBOARD\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ANALYTICS\"]\n }), __('Creator Analytics'), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"badge badge--alert\"\n }, \"New!\"))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"REWARDS\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FEATURED\"]\n }), __('Rewards')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"INVITE\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"]\n }), __('Invites')), authenticated ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n onSelect: true ? signOut : undefined\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"menu__link\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SIGN_OUT\"]\n }), __('Sign Out')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"menu__link-help\"\n }, email)) : react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"AUTH\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SIGN_IN\"]\n }), __('Sign In'))))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"Menu\"], null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuButton\"], {\n className: \"header__navigation-item menu__title header__navigation-item--icon\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n \"aria-label\": __('Settings')\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: 18,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"]\n }))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuList\"], {\n className: \"menu__list--header\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"SETTINGS\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n tootlip: true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"]\n }), __('Settings')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: function onSelect() {\n return history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"HELP\"]));\n }\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n \"aria-hidden\": true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"]\n }), __('Help')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_reach_menu_button__WEBPACK_IMPORTED_MODULE_10__[\"MenuItem\"], {\n className: \"menu__link\",\n onSelect: handleThemeToggle\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n icon: currentTheme === 'light' ? constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DARK\"] : constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LIGHT\"]\n }), currentTheme === 'light' ? __('Dark') : __('Light')))), true && !authenticated && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"AUTH\"]),\n button: \"primary\",\n label: __('Sign In')\n })) : !isVerifyPage && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"header__menu\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", null), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_tooltip__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n label: __('Go Back')\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({\n button: \"link\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"]\n }, closeButtonNavigationProps)))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onClick: openMobileNavigation,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"MENU\"],\n iconSize: 24,\n className: \"header__menu--mobile\"\n })));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Header));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2hlYWRlci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvaGVhZGVyL3ZpZXcuanN4PzY4YjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IExiY1N5bWJvbCBmcm9tICdjb21wb25lbnQvY29tbW9uL2xiYy1zeW1ib2wnO1xuaW1wb3J0IFd1bmRlckJhciBmcm9tICdjb21wb25lbnQvd3VuZGVyYmFyJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5pbXBvcnQgeyBNZW51LCBNZW51TGlzdCwgTWVudUJ1dHRvbiwgTWVudUl0ZW0gfSBmcm9tICdAcmVhY2gvbWVudS1idXR0b24nO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnY29tcG9uZW50L2NvbW1vbi90b29sdGlwJztcbmltcG9ydCBOYXZpZ2F0aW9uQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9uYXZpZ2F0aW9uQnV0dG9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgYmFsYW5jZTogc3RyaW5nLFxuICByb3VuZGVkQmFsYW5jZTogbnVtYmVyLFxuICBoaXN0b3J5OiB7XG4gICAgZW50aXRpZXM6IHt9W10sXG4gICAgZ29CYWNrOiAoKSA9PiB2b2lkLFxuICAgIGdvRm9yd2FyZDogKCkgPT4gdm9pZCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGxlbmd0aDogbnVtYmVyLFxuICAgIGxvY2F0aW9uOiB7IHBhdGhuYW1lOiBzdHJpbmcgfSxcbiAgICBwdXNoOiBzdHJpbmcgPT4gdm9pZCxcbiAgfSxcbiAgY3VycmVudFRoZW1lOiBzdHJpbmcsXG4gIGF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZDogYm9vbGVhbixcbiAgc2V0Q2xpZW50U2V0dGluZzogKHN0cmluZywgYm9vbGVhbiB8IHN0cmluZykgPT4gdm9pZCxcbiAgaGlkZUJhbGFuY2U6IGJvb2xlYW4sXG4gIGVtYWlsOiA/c3RyaW5nLFxuICBhdXRoZW50aWNhdGVkOiBib29sZWFuLFxuICBhdXRoSGVhZGVyOiBib29sZWFuLFxuICBzeW5jRXJyb3I6ID9zdHJpbmcsXG4gIHNpZ25PdXQ6ICgpID0+IHZvaWQsXG4gIG9wZW5Nb2JpbGVOYXZpZ2F0aW9uOiAoKSA9PiB2b2lkLFxuICBvcGVuQ2hhbm5lbENyZWF0ZTogKCkgPT4gdm9pZCxcbiAgb3BlblNpZ25PdXRNb2RhbDogKCkgPT4gdm9pZCxcbn07XG5cbmNvbnN0IEhlYWRlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIHJvdW5kZWRCYWxhbmNlLFxuICAgIGhpc3RvcnksXG4gICAgc2V0Q2xpZW50U2V0dGluZyxcbiAgICBjdXJyZW50VGhlbWUsXG4gICAgYXV0b21hdGljRGFya01vZGVFbmFibGVkLFxuICAgIGhpZGVCYWxhbmNlLFxuICAgIGVtYWlsLFxuICAgIGF1dGhlbnRpY2F0ZWQsXG4gICAgYXV0aEhlYWRlcixcbiAgICBzaWduT3V0LFxuICAgIHN5bmNFcnJvcixcbiAgICBvcGVuTW9iaWxlTmF2aWdhdGlvbixcbiAgICBvcGVuQ2hhbm5lbENyZWF0ZSxcbiAgICBvcGVuU2lnbk91dE1vZGFsLFxuICB9ID0gcHJvcHM7XG5cbiAgLy8gb24gdGhlIHZlcmlmeSBwYWdlIGRvbid0IGxldCBhbnlvbmUgZXNjYXBlIG90aGVyIHRoYW4gYnkgY2xvc2luZyB0aGUgdGFiIHRvIGtlZXAgc2Vzc2lvbiBkYXRhIGNvbnNpc3RlbnRcbiAgY29uc3QgaXNWZXJpZnlQYWdlID0gaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZS5pbmNsdWRlcyhQQUdFUy5BVVRIX1ZFUklGWSk7XG5cbiAgLy8gU2lnbiBvdXQgaWYgdGhleSBjbGljayB0aGUgXCJ4XCIgd2hlbiB0aGV5IGFyZSBvbiB0aGUgcGFzc3dvcmQgcHJvbXB0XG4gIGNvbnN0IGF1dGhIZWFkZXJBY3Rpb24gPSBzeW5jRXJyb3IgPyB7IG9uQ2xpY2s6IHNpZ25PdXQgfSA6IHsgbmF2aWdhdGU6ICcvJyB9O1xuICBjb25zdCBob21lQnV0dG9uTmF2aWdhdGlvblByb3BzID0gaXNWZXJpZnlQYWdlID8ge30gOiBhdXRoSGVhZGVyID8gYXV0aEhlYWRlckFjdGlvbiA6IHsgbmF2aWdhdGU6ICcvJyB9O1xuICBjb25zdCBjbG9zZUJ1dHRvbk5hdmlnYXRpb25Qcm9wcyA9IGF1dGhIZWFkZXIgPyBhdXRoSGVhZGVyQWN0aW9uIDogeyBvbkNsaWNrOiAoKSA9PiBoaXN0b3J5LmdvQmFjaygpIH07XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGhlbWVUb2dnbGUoKSB7XG4gICAgaWYgKGF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZCkge1xuICAgICAgc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPTUFUSUNfREFSS19NT0RFX0VOQUJMRUQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFRoZW1lID09PSAnZGFyaycpIHtcbiAgICAgIHNldENsaWVudFNldHRpbmcoU0VUVElOR1MuVEhFTUUsICdsaWdodCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlRIRU1FLCAnZGFyaycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdhbGxldFRpdGxlKCkge1xuICAgIHJldHVybiBoaWRlQmFsYW5jZSA/IChcbiAgICAgIF9fKCdXYWxsZXQnKVxuICAgICkgOiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHtyb3VuZGVkQmFsYW5jZX0gPExiY1N5bWJvbCAvPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8aGVhZGVyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2hlYWRlcicsIHtcbiAgICAgICAgJ2hlYWRlci0tbWluaW1hbCc6IGF1dGhIZWFkZXIsXG4gICAgICAgICdoZWFkZXItLW5vYXV0aC13ZWInOiAhYXV0aGVudGljYXRlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyX19jb250ZW50c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvblwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtIGhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1sYnJ5IGhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1idXR0b24tbW9iaWxlXCJcbiAgICAgICAgICAgIGxhYmVsPXtfXygnTEJSWScpfVxuICAgICAgICAgICAgaWNvbj17SUNPTlMuTEJSWX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHdpbmRvdy5zY3JvbGxUbygwLCAwKX1cbiAgICAgICAgICAgIHsuLi5ob21lQnV0dG9uTmF2aWdhdGlvblByb3BzfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICB7fVxuXG4gICAgICAgICAgeyFhdXRoSGVhZGVyICYmIDxXdW5kZXJCYXIgLz59XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHshYXV0aEhlYWRlciA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnaGVhZGVyX19tZW51JywgeyAnaGVhZGVyX19tZW51LS13aXRoLWJhbGFuY2UnOiAhSVNfV0VCIHx8IGF1dGhlbnRpY2F0ZWQgfSl9PlxuICAgICAgICAgICAgeyghSVNfV0VCIHx8IGF1dGhlbnRpY2F0ZWQpICYmIChcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e19fKCdZb3VyIHdhbGxldCcpfVxuICAgICAgICAgICAgICAgICAgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLldBTExFVH1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0gbWVudV9fdGl0bGUgaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLWJhbGFuY2VcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e2dldFdhbGxldFRpdGxlKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8TWVudT5cbiAgICAgICAgICAgICAgICAgIDxNZW51QnV0dG9uIGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtIG1lbnVfX3RpdGxlIGhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtbGFiZWw9e19fKCdQdWJsaXNoIGEgZmlsZSwgb3IgY3JlYXRlIGEgY2hhbm5lbCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBzaXplPXsxOH0gaWNvbj17SUNPTlMuUFVCTElTSH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9NZW51QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPE1lbnVMaXN0IGNsYXNzTmFtZT1cIm1lbnVfX2xpc3QtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuUFVCTElTSH1gKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gYXJpYS1oaWRkZW4gaWNvbj17SUNPTlMuUFVCTElTSH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICB7X18oJ1B1Ymxpc2gnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIGNsYXNzTmFtZT1cIm1lbnVfX2xpbmtcIiBvblNlbGVjdD17b3BlbkNoYW5uZWxDcmVhdGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIGljb249e0lDT05TLkNIQU5ORUx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAge19fKCdOZXcgQ2hhbm5lbCcpfVxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgPC9NZW51TGlzdD5cbiAgICAgICAgICAgICAgICA8L01lbnU+XG5cbiAgICAgICAgICAgICAgICA8TWVudT5cbiAgICAgICAgICAgICAgICAgIDxNZW51QnV0dG9uIGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtIG1lbnVfX3RpdGxlIGhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtbGFiZWw9e19fKCdZb3VyIGFjY291bnQnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gc2l6ZT17MTh9IGljb249e0lDT05TLkFDQ09VTlR9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxNZW51TGlzdCBjbGFzc05hbWU9XCJtZW51X19saXN0LS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIGNsYXNzTmFtZT1cIm1lbnVfX2xpbmtcIiBvblNlbGVjdD17KCkgPT4gaGlzdG9yeS5wdXNoKGAvJC8ke1BBR0VTLlBVQkxJU0hFRH1gKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gYXJpYS1oaWRkZW4gaWNvbj17SUNPTlMuUFVCTElTSH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICB7X18oJ1B1Ymxpc2hlcycpfVxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuQ0hBTk5FTFN9YCl9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIGljb249e0lDT05TLkNIQU5ORUx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAge19fKCdDaGFubmVscycpfVxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuQ1JFQVRPUl9EQVNIQk9BUkR9YCl9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIGljb249e0lDT05TLkFOQUxZVElDU30gLz5cbiAgICAgICAgICAgICAgICAgICAgICB7X18oJ0NyZWF0b3IgQW5hbHl0aWNzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiYWRnZSBiYWRnZS0tYWxlcnRcIj5OZXchPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIGNsYXNzTmFtZT1cIm1lbnVfX2xpbmtcIiBvblNlbGVjdD17KCkgPT4gaGlzdG9yeS5wdXNoKGAvJC8ke1BBR0VTLlJFV0FSRFN9YCl9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIGljb249e0lDT05TLkZFQVRVUkVEfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIHtfXygnUmV3YXJkcycpfVxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuSU5WSVRFfWApfT5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBhcmlhLWhpZGRlbiBpY29uPXtJQ09OUy5JTlZJVEV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAge19fKCdJbnZpdGVzJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XG5cbiAgICAgICAgICAgICAgICAgICAge2F1dGhlbnRpY2F0ZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIG9uU2VsZWN0PXtJU19XRUIgPyBzaWduT3V0IDogb3BlblNpZ25PdXRNb2RhbH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lbnVfX2xpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gYXJpYS1oaWRkZW4gaWNvbj17SUNPTlMuU0lHTl9PVVR9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtfXygnU2lnbiBPdXQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWVudV9fbGluay1oZWxwXCI+e2VtYWlsfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbSBjbGFzc05hbWU9XCJtZW51X19saW5rXCIgb25TZWxlY3Q9eygpID0+IGhpc3RvcnkucHVzaChgLyQvJHtQQUdFUy5BVVRIfWApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIGljb249e0lDT05TLlNJR05fSU59IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X18oJ1NpZ24gSW4nKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9NZW51TGlzdD5cbiAgICAgICAgICAgICAgICA8L01lbnU+XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPE1lbnU+XG4gICAgICAgICAgICAgIDxNZW51QnV0dG9uIGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtIG1lbnVfX3RpdGxlIGhlYWRlcl9fbmF2aWdhdGlvbi1pdGVtLS1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1sYWJlbD17X18oJ1NldHRpbmdzJyl9PlxuICAgICAgICAgICAgICAgICAgPEljb24gc2l6ZT17MTh9IGljb249e0lDT05TLlNFVFRJTkdTfSAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9NZW51QnV0dG9uPlxuICAgICAgICAgICAgICA8TWVudUxpc3QgY2xhc3NOYW1lPVwibWVudV9fbGlzdC0taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPE1lbnVJdGVtIGNsYXNzTmFtZT1cIm1lbnVfX2xpbmtcIiBvblNlbGVjdD17KCkgPT4gaGlzdG9yeS5wdXNoKGAvJC8ke1BBR0VTLlNFVFRJTkdTfWApfT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIGFyaWEtaGlkZGVuIHRvb3RsaXAgaWNvbj17SUNPTlMuU0VUVElOR1N9IC8+XG4gICAgICAgICAgICAgICAgICB7X18oJ1NldHRpbmdzJyl9XG4gICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXsoKSA9PiBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuSEVMUH1gKX0+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBhcmlhLWhpZGRlbiBpY29uPXtJQ09OUy5IRUxQfSAvPlxuICAgICAgICAgICAgICAgICAge19fKCdIZWxwJyl9XG4gICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICAgICAgICA8TWVudUl0ZW0gY2xhc3NOYW1lPVwibWVudV9fbGlua1wiIG9uU2VsZWN0PXtoYW5kbGVUaGVtZVRvZ2dsZX0+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBpY29uPXtjdXJyZW50VGhlbWUgPT09ICdsaWdodCcgPyBJQ09OUy5EQVJLIDogSUNPTlMuTElHSFR9IC8+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudFRoZW1lID09PSAnbGlnaHQnID8gX18oJ0RhcmsnKSA6IF9fKCdMaWdodCcpfVxuICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgICAgIDwvTWVudUxpc3Q+XG4gICAgICAgICAgICA8L01lbnU+XG4gICAgICAgICAgICB7SVNfV0VCICYmICFhdXRoZW50aWNhdGVkICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuQVVUSH1gfSBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdTaWduIEluJyl9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgICFpc1ZlcmlmeVBhZ2UgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXJfX21lbnVcIj5cbiAgICAgICAgICAgICAgey8qIEFkZCBhbiBlbXB0eSBzcGFuIGhlcmUgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBzdHlsZSBhcyBhYm92ZSAqL31cbiAgICAgICAgICAgICAgey8qIFRoaXMgcHVzaGVzIHRoZSBjbG9zZSBidXR0b24gdG8gdGhlIHJpZ2h0IHNpZGUgKi99XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgIDxUb29sdGlwIGxhYmVsPXtfXygnR28gQmFjaycpfT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBpY29uPXtJQ09OUy5SRU1PVkV9IHsuLi5jbG9zZUJ1dHRvbk5hdmlnYXRpb25Qcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29wZW5Nb2JpbGVOYXZpZ2F0aW9ufSBpY29uPXtJQ09OUy5NRU5VfSBpY29uU2l6ZT17MjR9IGNsYXNzTmFtZT1cImhlYWRlcl9fbWVudS0tbW9iaWxlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihIZWFkZXIpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEyQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFrQkE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSkE7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF4TEE7QUFDQTtBQTZMQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/header/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/hiddenNsfwClaims/index.js": -/*!*************************************************!*\ - !*** ../ui/component/hiddenNsfwClaims/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/hiddenNsfwClaims/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n var uri = props.uri,\n uris = props.uris;\n var numberOfHiddenClaims;\n\n if (uri) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"parseURI\"])(uri),\n isChannel = _parseURI.isChannel;\n\n numberOfHiddenClaims = isChannel ? Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectOmittedCountForChannel\"])(uri)(state) : Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectNsfwCountFromUris\"])([uri])(state);\n } else if (uris) {\n numberOfHiddenClaims = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectNsfwCountFromUris\"])(uris)(state);\n }\n\n return {\n numberOfHiddenClaims: numberOfHiddenClaims,\n obscureNsfw: !Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__[\"selectShowMatureContent\"])(state)\n };\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2hpZGRlbk5zZndDbGFpbXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2hpZGRlbk5zZndDbGFpbXMvaW5kZXguanM/YzQ4YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdE5zZndDb3VudEZyb21VcmlzLCBtYWtlU2VsZWN0T21pdHRlZENvdW50Rm9yQ2hhbm5lbCwgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFNob3dNYXR1cmVDb250ZW50IH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCBIaWRkZW5Oc2Z3Q2xhaW1zIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgY29uc3QgeyB1cmksIHVyaXMgfSA9IHByb3BzO1xuXG4gIGxldCBudW1iZXJPZkhpZGRlbkNsYWltcztcbiAgaWYgKHVyaSkge1xuICAgIGNvbnN0IHsgaXNDaGFubmVsIH0gPSBwYXJzZVVSSSh1cmkpO1xuICAgIG51bWJlck9mSGlkZGVuQ2xhaW1zID0gaXNDaGFubmVsXG4gICAgICA/IG1ha2VTZWxlY3RPbWl0dGVkQ291bnRGb3JDaGFubmVsKHVyaSkoc3RhdGUpXG4gICAgICA6IG1ha2VTZWxlY3ROc2Z3Q291bnRGcm9tVXJpcyhbdXJpXSkoc3RhdGUpO1xuICB9IGVsc2UgaWYgKHVyaXMpIHtcbiAgICBudW1iZXJPZkhpZGRlbkNsYWltcyA9IG1ha2VTZWxlY3ROc2Z3Q291bnRGcm9tVXJpcyh1cmlzKShzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlck9mSGlkZGVuQ2xhaW1zLFxuICAgIG9ic2N1cmVOc2Z3OiAhc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9ICgpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShIaWRkZW5Oc2Z3Q2xhaW1zKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWJBO0FBQ0E7QUFrQkE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/hiddenNsfwClaims/index.js\n"); - -/***/ }), - -/***/ "../ui/component/hiddenNsfwClaims/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/hiddenNsfwClaims/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (props) {\n var number = props.numberOfHiddenClaims,\n obscureNsfw = props.obscureNsfw;\n return obscureNsfw && Boolean(number) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section--padded section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n content_viewing_preferences_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n navigate: \"/$/settings\",\n label: __('content viewing preferences')\n }),\n number: number\n }\n }, number > 1 ? '%number% files hidden due to your %content_viewing_preferences_link%' : '1 file hidden due to your %content_viewing_preferences_link%'));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2hpZGRlbk5zZndDbGFpbXMvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2hpZGRlbk5zZndDbGFpbXMvdmlldy5qc3g/MWIzMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbnVtYmVyT2ZIaWRkZW5DbGFpbXM6IG51bWJlcixcbiAgb2JzY3VyZU5zZnc6IGJvb2xlYW4sXG4gIGNsYXNzTmFtZTogP3N0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgeyBudW1iZXJPZkhpZGRlbkNsYWltczogbnVtYmVyLCBvYnNjdXJlTnNmdyB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICBvYnNjdXJlTnNmdyAmJlxuICAgIEJvb2xlYW4obnVtYmVyKSAmJiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb24tLXBhZGRlZCBzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgIGNvbnRlbnRfdmlld2luZ19wcmVmZXJlbmNlc19saW5rOiAoXG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG5hdmlnYXRlPVwiLyQvc2V0dGluZ3NcIiBsYWJlbD17X18oJ2NvbnRlbnQgdmlld2luZyBwcmVmZXJlbmNlcycpfSAvPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7bnVtYmVyID4gMVxuICAgICAgICAgICAgPyAnJW51bWJlciUgZmlsZXMgaGlkZGVuIGR1ZSB0byB5b3VyICVjb250ZW50X3ZpZXdpbmdfcHJlZmVyZW5jZXNfbGluayUnXG4gICAgICAgICAgICA6ICcxIGZpbGUgaGlkZGVuIGR1ZSB0byB5b3VyICVjb250ZW50X3ZpZXdpbmdfcHJlZmVyZW5jZXNfbGluayUnfVxuICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBSkE7QUFEQTtBQVBBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/hiddenNsfwClaims/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/i18nMessage/index.js": -/*!********************************************!*\ - !*** ../ui/component/i18nMessage/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/i18nMessage/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2kxOG5NZXNzYWdlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9pMThuTWVzc2FnZS9pbmRleC5qcz9lMmM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgaTE4biBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe30pO1xuXG5jb25zdCBwZXJmb3JtID0gKCkgPT4gKHt9KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKGkxOG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/i18nMessage/index.js\n"); - -/***/ }), - -/***/ "../ui/component/i18nMessage/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/i18nMessage/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return I18nMessage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction I18nMessage(props) {\n var message = __(props.children),\n regexp = /%\\w+%/g,\n matchingGroups = message.match(regexp);\n\n if (!matchingGroups) {\n return message;\n }\n\n var messageSubstrings = props.children.split(regexp),\n tokens = props.tokens;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, messageSubstrings.map(function (substring, index) {\n var token = index < matchingGroups.length ? matchingGroups[index].substring(1, matchingGroups[index].length - 1) : null; // get token without % on each side\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {\n key: index\n }, substring, token && tokens[token]);\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2kxOG5NZXNzYWdlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9pMThuTWVzc2FnZS92aWV3LmpzeD8xMzgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICB0b2tlbnM6IE9iamVjdCxcbiAgY2hpbGRyZW46IHN0cmluZywgLy8gZS5nLiBcIlJlYWQgJWZhcV9saW5rJSBmb3IgbW9yZSBkZXRhaWxcIlxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSTE4bk1lc3NhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBfXyhwcm9wcy5jaGlsZHJlbiksXG4gICAgcmVnZXhwID0gLyVcXHcrJS9nLFxuICAgIG1hdGNoaW5nR3JvdXBzID0gbWVzc2FnZS5tYXRjaChyZWdleHApO1xuXG4gIGlmICghbWF0Y2hpbmdHcm91cHMpIHtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VTdWJzdHJpbmdzID0gcHJvcHMuY2hpbGRyZW4uc3BsaXQocmVnZXhwKSxcbiAgICB0b2tlbnMgPSBwcm9wcy50b2tlbnM7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7bWVzc2FnZVN1YnN0cmluZ3MubWFwKChzdWJzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID1cbiAgICAgICAgICBpbmRleCA8IG1hdGNoaW5nR3JvdXBzLmxlbmd0aCA/IG1hdGNoaW5nR3JvdXBzW2luZGV4XS5zdWJzdHJpbmcoMSwgbWF0Y2hpbmdHcm91cHNbaW5kZXhdLmxlbmd0aCAtIDEpIDogbnVsbDsgLy8gZ2V0IHRva2VuIHdpdGhvdXQgJSBvbiBlYWNoIHNpZGVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpbmRleH0+XG4gICAgICAgICAgICB7c3Vic3RyaW5nfVxuICAgICAgICAgICAge3Rva2VuICYmIHRva2Vuc1t0b2tlbl19XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFjQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/i18nMessage/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/inviteList/index.js": -/*!*******************************************!*\ - !*** ../ui/component/inviteList/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/inviteList/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n invitees: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInvitees\"])(state),\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInviteStatusIsPending\"])(state),\n referralReward: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectReferralReward\"])(state)\n };\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZUxpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ludml0ZUxpc3QvaW5kZXguanM/ZjFkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0UmVmZXJyYWxSZXdhcmQsIHNlbGVjdFVzZXJJbnZpdGVlcywgc2VsZWN0VXNlckludml0ZVN0YXR1c0lzUGVuZGluZyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IEludml0ZUxpc3QgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgaW52aXRlZXM6IHNlbGVjdFVzZXJJbnZpdGVlcyhzdGF0ZSksXG4gIGlzUGVuZGluZzogc2VsZWN0VXNlckludml0ZVN0YXR1c0lzUGVuZGluZyhzdGF0ZSksXG4gIHJlZmVycmFsUmV3YXJkOiBzZWxlY3RSZWZlcnJhbFJld2FyZChzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9ICgpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShJbnZpdGVMaXN0KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/inviteList/index.js\n"); - -/***/ }), - -/***/ "../ui/component/inviteList/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/inviteList/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_rewardLink__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/rewardLink */ \"../ui/component/rewardLink/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar InviteList = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(InviteList, _React$PureComponent);\n\n function InviteList() {\n _classCallCheck(this, InviteList);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(InviteList).apply(this, arguments));\n }\n\n _createClass(InviteList, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n invitees = _this$props.invitees,\n referralReward = _this$props.referralReward;\n\n if (!invitees || !invitees.length) {\n return null;\n }\n\n var rewardAmount = 0;\n\n var rewardHelp = __(\"Woah, you have a lot of friends! You've claimed the maximum amount of invite rewards. Email %email% if you'd like to be whitelisted for more invites.\", {\n email: 'hello@lbry.com'\n });\n\n if (referralReward) {\n rewardAmount = referralReward.reward_amount;\n rewardHelp = referralReward.reward_description;\n }\n\n var showClaimable = invitees.some(function (invite) {\n return invite.invite_reward_claimable && !invite.invite_reward_claimed;\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table__header\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table__header-text--between\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"card__title\"\n }, __('Invite History')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, rewardHelp)), referralReward && showClaimable && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_rewardLink__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: true,\n label: __(\"Claim Your \".concat(rewardAmount, \" LBC Invite Reward\")),\n claim_code: referralReward.claim_code\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"table\", {\n className: \"table section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"thead\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Invitee Email')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Invite Status')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Reward')))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tbody\", null, invitees.map(function (invitee) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", {\n key: invitee.email\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, invitee.email), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, invitee.invite_accepted ? __('Accepted') : __('Not Accepted'))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, invitee.invite_reward_claimed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('Claimed')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_3__[\"COMPLETE\"]\n })), !invitee.invite_reward_claimed && (invitee.invite_reward_claimable ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('Claimable')) : __('Unclaimable'))));\n })))));\n }\n }]);\n\n return InviteList;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InviteList);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZUxpc3Qvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ludml0ZUxpc3Qvdmlldy5qc3g/ZWE0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZXdhcmRMaW5rIGZyb20gJ2NvbXBvbmVudC9yZXdhcmRMaW5rJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuXG50eXBlIFByb3BzID0ge1xuICBpbnZpdGVlczogP0FycmF5PHtcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGludml0ZV9hY2NlcHRlZDogYm9vbGVhbixcbiAgICBpbnZpdGVfcmV3YXJkX2NsYWltZWQ6IGJvb2xlYW4sXG4gICAgaW52aXRlX3Jld2FyZF9jbGFpbWFibGU6IGJvb2xlYW4sXG4gIH0+LFxuICByZWZlcnJhbFJld2FyZDogP1Jld2FyZCxcbn07XG5cbmNsYXNzIEludml0ZUxpc3QgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGludml0ZWVzLCByZWZlcnJhbFJld2FyZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghaW52aXRlZXMgfHwgIWludml0ZWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHJld2FyZEFtb3VudCA9IDA7XG4gICAgbGV0IHJld2FyZEhlbHAgPSBfXyhcbiAgICAgIFwiV29haCwgeW91IGhhdmUgYSBsb3Qgb2YgZnJpZW5kcyEgWW91J3ZlIGNsYWltZWQgdGhlIG1heGltdW0gYW1vdW50IG9mIGludml0ZSByZXdhcmRzLiBFbWFpbCAlZW1haWwlIGlmIHlvdSdkIGxpa2UgdG8gYmUgd2hpdGVsaXN0ZWQgZm9yIG1vcmUgaW52aXRlcy5cIixcbiAgICAgIHsgZW1haWw6ICdoZWxsb0BsYnJ5LmNvbScgfVxuICAgICk7XG5cbiAgICBpZiAocmVmZXJyYWxSZXdhcmQpIHtcbiAgICAgIHJld2FyZEFtb3VudCA9IHJlZmVycmFsUmV3YXJkLnJld2FyZF9hbW91bnQ7XG4gICAgICByZXdhcmRIZWxwID0gcmVmZXJyYWxSZXdhcmQucmV3YXJkX2Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBjb25zdCBzaG93Q2xhaW1hYmxlID0gaW52aXRlZXMuc29tZShpbnZpdGUgPT4gaW52aXRlLmludml0ZV9yZXdhcmRfY2xhaW1hYmxlICYmICFpbnZpdGUuaW52aXRlX3Jld2FyZF9jbGFpbWVkKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJjYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFibGVfX2hlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFibGVfX2hlYWRlci10ZXh0LS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGVcIj57X18oJ0ludml0ZSBIaXN0b3J5Jyl9PC9oMj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj57cmV3YXJkSGVscH08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge3JlZmVycmFsUmV3YXJkICYmIHNob3dDbGFpbWFibGUgJiYgKFxuICAgICAgICAgICAgICA8UmV3YXJkTGlua1xuICAgICAgICAgICAgICAgIGJ1dHRvblxuICAgICAgICAgICAgICAgIGxhYmVsPXtfXyhgQ2xhaW0gWW91ciAke3Jld2FyZEFtb3VudH0gTEJDIEludml0ZSBSZXdhcmRgKX1cbiAgICAgICAgICAgICAgICBjbGFpbV9jb2RlPXtyZWZlcnJhbFJld2FyZC5jbGFpbV9jb2RlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJsZV9fd3JhcHBlclwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSBzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGg+e19fKCdJbnZpdGVlIEVtYWlsJyl9PC90aD5cbiAgICAgICAgICAgICAgICA8dGg+e19fKCdJbnZpdGUgU3RhdHVzJyl9PC90aD5cbiAgICAgICAgICAgICAgICA8dGg+e19fKCdSZXdhcmQnKX08L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAge2ludml0ZWVzLm1hcChpbnZpdGVlID0+IChcbiAgICAgICAgICAgICAgICA8dHIga2V5PXtpbnZpdGVlLmVtYWlsfT5cbiAgICAgICAgICAgICAgICAgIDx0ZD57aW52aXRlZS5lbWFpbH08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57aW52aXRlZS5pbnZpdGVfYWNjZXB0ZWQgPyBfXygnQWNjZXB0ZWQnKSA6IF9fKCdOb3QgQWNjZXB0ZWQnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICB7aW52aXRlZS5pbnZpdGVfcmV3YXJkX2NsYWltZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntfXygnQ2xhaW1lZCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGljb249e0lDT05TLkNPTVBMRVRFfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgeyFpbnZpdGVlLmludml0ZV9yZXdhcmRfY2xhaW1lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgIChpbnZpdGVlLmludml0ZV9yZXdhcmRfY2xhaW1hYmxlID8gPHNwYW4+e19fKCdDbGFpbWFibGUnKX08L3NwYW4+IDogX18oJ1VuY2xhaW1hYmxlJykpfVxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnZpdGVMaXN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBSEE7QUFTQTtBQUFBO0FBQ0E7QUFBQTtBQVNBO0FBQ0E7QUFBQTtBQVNBO0FBQUE7QUF2Q0E7QUFxREE7Ozs7QUF6RUE7QUFDQTtBQTJFQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/inviteList/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/inviteNew/index.js": -/*!******************************************!*\ - !*** ../ui/component/inviteNew/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/inviteNew/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n errorMessage: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInviteNewErrorMessage\"])(state),\n invitesRemaining: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInvitesRemaining\"])(state),\n referralLink: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInviteReferralLink\"])(state),\n referralCode: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInviteReferralCode\"])(state),\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserInviteNewIsPending\"])(state),\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectFetchingMyChannels\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n inviteNew: function inviteNew(email) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserInviteNew\"])(email));\n },\n fetchChannelListMine: function fetchChannelListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doFetchChannelListMine\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZU5ldy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvaW52aXRlTmV3L2luZGV4LmpzPzIxNDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdFVzZXJJbnZpdGVzUmVtYWluaW5nLFxuICBzZWxlY3RVc2VySW52aXRlTmV3SXNQZW5kaW5nLFxuICBzZWxlY3RVc2VySW52aXRlTmV3RXJyb3JNZXNzYWdlLFxuICBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxMaW5rLFxuICBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxDb2RlLFxuICBkb1VzZXJJbnZpdGVOZXcsXG59IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgc2VsZWN0TXlDaGFubmVsQ2xhaW1zLCBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMsIGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBJbnZpdGVOZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZXJyb3JNZXNzYWdlOiBzZWxlY3RVc2VySW52aXRlTmV3RXJyb3JNZXNzYWdlKHN0YXRlKSxcbiAgaW52aXRlc1JlbWFpbmluZzogc2VsZWN0VXNlckludml0ZXNSZW1haW5pbmcoc3RhdGUpLFxuICByZWZlcnJhbExpbms6IHNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbExpbmsoc3RhdGUpLFxuICByZWZlcnJhbENvZGU6IHNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbENvZGUoc3RhdGUpLFxuICBpc1BlbmRpbmc6IHNlbGVjdFVzZXJJbnZpdGVOZXdJc1BlbmRpbmcoc3RhdGUpLFxuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgZmV0Y2hpbmdDaGFubmVsczogc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgaW52aXRlTmV3OiBlbWFpbCA9PiBkaXNwYXRjaChkb1VzZXJJbnZpdGVOZXcoZW1haWwpKSxcbiAgZmV0Y2hDaGFubmVsTGlzdE1pbmU6ICgpID0+IGRpc3BhdGNoKGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKEludml0ZU5ldyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQUE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/inviteNew/index.js\n"); - -/***/ }), - -/***/ "../ui/component/inviteNew/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/inviteNew/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_copyableText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/copyableText */ \"../ui/component/copyableText/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! config */ \"../config.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(config__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_selectChannel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/selectChannel */ \"../ui/component/selectChannel/index.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\nfunction InviteNew(props) {\n var inviteNew = props.inviteNew,\n errorMessage = props.errorMessage,\n isPending = props.isPending,\n _props$referralCode = props.referralCode,\n referralCode = _props$referralCode === void 0 ? '' : _props$referralCode,\n channels = props.channels;\n var rewardAmount = 20; // Email\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n email = _useState2[0],\n setEmail = _useState2[1];\n\n function handleSubmit() {\n inviteNew(email);\n }\n\n function handleEmailChanged(event) {\n setEmail(event.target.value);\n } // Referral link\n\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(referralCode),\n _useState4 = _slicedToArray(_useState3, 2),\n referralSource = _useState4[0],\n setReferralSource = _useState4[1];\n\n function handleReferralChange(code) {\n setReferralSource(code); // TODO: keep track of this in an array?\n\n var matchingChannel = channels && channels.find(function (ch) {\n return ch.name === code;\n });\n\n if (matchingChannel) {\n analytics__WEBPACK_IMPORTED_MODULE_7__[\"default\"].apiLogPublish(matchingChannel);\n }\n }\n\n var topChannel = channels && channels.reduce(function (top, channel) {\n var topClaimCount = top && top.meta && top.meta.claims_in_channel || 0;\n var currentClaimCount = channel && channel.meta && channel.meta.claims_in_channel || 0;\n return topClaimCount >= currentClaimCount ? top : channel;\n });\n var referralString = channels && channels.length && referralSource !== referralCode ? lookupUrlByClaimName(referralSource, channels) : referralSource;\n var referral = \"\".concat(config__WEBPACK_IMPORTED_MODULE_5__[\"URL\"], \"/$/invite/\").concat(referralString.replace('#', ':'));\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // set default channel\n if (topChannel) {\n handleReferralChange(topChannel.name);\n }\n }, [topChannel]);\n\n function lookupUrlByClaimName(name, channels) {\n var claim = channels.find(function (channel) {\n return channel.name === name;\n });\n return claim && claim.canonical_url ? claim.canonical_url.replace('lbry://', '') : name;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'columns'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __('Invite Link'),\n subtitle: __('Share this link with friends (or enemies) and get %reward_amount% LBC when they join lbry.tv', {\n reward_amount: rewardAmount\n }),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_copyableText__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: __('Your invite link'),\n copyable: referral\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_selectChannel__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n channel: referralSource,\n onChannelChange: function onChannelChange(channel) {\n return handleReferralChange(channel);\n },\n label: 'Customize link',\n hideAnon: true,\n injected: [referralCode]\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tokens: {\n rewards_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n navigate: \"/$/rewards\",\n label: __('rewards')\n }),\n referral_faq_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('FAQ'),\n href: \"https://lbry.com/faq/referrals\"\n })\n }\n }, \"Earn %rewards_link% for inviting your friends. Read our %referral_faq_link% to learn more.\")))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __('Invite by Email'),\n subtitle: __('Invite someone you know by email and earn %reward_amount% LBC when they join lbry.tv.', {\n reward_amount: rewardAmount\n }),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"text\",\n label: \"Email\",\n placeholder: \"youremail@example.org\",\n name: \"email\",\n value: email,\n error: errorMessage,\n inputButton: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"secondary\",\n type: \"submit\",\n label: \"Invite\",\n disabled: isPending || !email\n }),\n onChange: function onChange(event) {\n handleEmailChanged(event);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tokens: {\n rewards_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n navigate: \"/$/rewards\",\n label: __('rewards')\n }),\n referral_faq_link: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('FAQ'),\n href: \"https://lbry.com/faq/referrals\"\n })\n }\n }, \"Earn %rewards_link% for inviting your friends. Read our %referral_faq_link% to learn more.\"))))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InviteNew);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZU5ldy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvaW52aXRlTmV3L3ZpZXcuanN4PzY1ZTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IEZvcm0sIEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQ29weWFibGVUZXh0IGZyb20gJ2NvbXBvbmVudC9jb3B5YWJsZVRleHQnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgU2VsZWN0Q2hhbm5lbCBmcm9tICdjb21wb25lbnQvc2VsZWN0Q2hhbm5lbCc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgZXJyb3JNZXNzYWdlOiA/c3RyaW5nLFxuICBpbnZpdGVOZXc6IHN0cmluZyA9PiB2b2lkLFxuICBpc1BlbmRpbmc6IGJvb2xlYW4sXG4gIHJlZmVycmFsTGluazogc3RyaW5nLFxuICByZWZlcnJhbENvZGU6IHN0cmluZyxcbiAgY2hhbm5lbHM6ID9BcnJheTxDaGFubmVsQ2xhaW0+LFxufTtcblxuZnVuY3Rpb24gSW52aXRlTmV3KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGludml0ZU5ldywgZXJyb3JNZXNzYWdlLCBpc1BlbmRpbmcsIHJlZmVycmFsQ29kZSA9ICcnLCBjaGFubmVscyB9ID0gcHJvcHM7XG4gIGNvbnN0IHJld2FyZEFtb3VudCA9IDIwO1xuXG4gIC8vIEVtYWlsXG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gdXNlU3RhdGUoJycpO1xuICBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoKSB7XG4gICAgaW52aXRlTmV3KGVtYWlsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVtYWlsQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgc2V0RW1haWwoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIC8vIFJlZmVycmFsIGxpbmtcbiAgY29uc3QgW3JlZmVycmFsU291cmNlLCBzZXRSZWZlcnJhbFNvdXJjZV0gPSB1c2VTdGF0ZShyZWZlcnJhbENvZGUpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlZmVycmFsQ2hhbmdlKGNvZGUpIHtcbiAgICBzZXRSZWZlcnJhbFNvdXJjZShjb2RlKTtcbiAgICAvLyBUT0RPOiBrZWVwIHRyYWNrIG9mIHRoaXMgaW4gYW4gYXJyYXk/XG4gICAgY29uc3QgbWF0Y2hpbmdDaGFubmVsID0gY2hhbm5lbHMgJiYgY2hhbm5lbHMuZmluZChjaCA9PiBjaC5uYW1lID09PSBjb2RlKTtcbiAgICBpZiAobWF0Y2hpbmdDaGFubmVsKSB7XG4gICAgICBhbmFseXRpY3MuYXBpTG9nUHVibGlzaChtYXRjaGluZ0NoYW5uZWwpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRvcENoYW5uZWwgPVxuICAgIGNoYW5uZWxzICYmXG4gICAgY2hhbm5lbHMucmVkdWNlKCh0b3AsIGNoYW5uZWwpID0+IHtcbiAgICAgIGNvbnN0IHRvcENsYWltQ291bnQgPSAodG9wICYmIHRvcC5tZXRhICYmIHRvcC5tZXRhLmNsYWltc19pbl9jaGFubmVsKSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudENsYWltQ291bnQgPSAoY2hhbm5lbCAmJiBjaGFubmVsLm1ldGEgJiYgY2hhbm5lbC5tZXRhLmNsYWltc19pbl9jaGFubmVsKSB8fCAwO1xuICAgICAgcmV0dXJuIHRvcENsYWltQ291bnQgPj0gY3VycmVudENsYWltQ291bnQgPyB0b3AgOiBjaGFubmVsO1xuICAgIH0pO1xuICBjb25zdCByZWZlcnJhbFN0cmluZyA9XG4gICAgY2hhbm5lbHMgJiYgY2hhbm5lbHMubGVuZ3RoICYmIHJlZmVycmFsU291cmNlICE9PSByZWZlcnJhbENvZGVcbiAgICAgID8gbG9va3VwVXJsQnlDbGFpbU5hbWUocmVmZXJyYWxTb3VyY2UsIGNoYW5uZWxzKVxuICAgICAgOiByZWZlcnJhbFNvdXJjZTtcblxuICBjb25zdCByZWZlcnJhbCA9IGAke1VSTH0vJC9pbnZpdGUvJHtyZWZlcnJhbFN0cmluZy5yZXBsYWNlKCcjJywgJzonKX1gO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gc2V0IGRlZmF1bHQgY2hhbm5lbFxuICAgIGlmICh0b3BDaGFubmVsKSB7XG4gICAgICBoYW5kbGVSZWZlcnJhbENoYW5nZSh0b3BDaGFubmVsLm5hbWUpO1xuICAgIH1cbiAgfSwgW3RvcENoYW5uZWxdKTtcblxuICBmdW5jdGlvbiBsb29rdXBVcmxCeUNsYWltTmFtZShuYW1lLCBjaGFubmVscykge1xuICAgIGNvbnN0IGNsYWltID0gY2hhbm5lbHMuZmluZChjaGFubmVsID0+IGNoYW5uZWwubmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIGNsYWltICYmIGNsYWltLmNhbm9uaWNhbF91cmwgPyBjbGFpbS5jYW5vbmljYWxfdXJsLnJlcGxhY2UoJ2xicnk6Ly8nLCAnJykgOiBuYW1lO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17J2NvbHVtbnMnfT5cbiAgICAgIDxDYXJkXG4gICAgICAgIHRpdGxlPXtfXygnSW52aXRlIExpbmsnKX1cbiAgICAgICAgc3VidGl0bGU9e19fKCdTaGFyZSB0aGlzIGxpbmsgd2l0aCBmcmllbmRzIChvciBlbmVtaWVzKSBhbmQgZ2V0ICVyZXdhcmRfYW1vdW50JSBMQkMgd2hlbiB0aGV5IGpvaW4gbGJyeS50dicsIHtcbiAgICAgICAgICByZXdhcmRfYW1vdW50OiByZXdhcmRBbW91bnQsXG4gICAgICAgIH0pfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8Q29weWFibGVUZXh0IGxhYmVsPXtfXygnWW91ciBpbnZpdGUgbGluaycpfSBjb3B5YWJsZT17cmVmZXJyYWx9IC8+XG4gICAgICAgICAgICA8U2VsZWN0Q2hhbm5lbFxuICAgICAgICAgICAgICBjaGFubmVsPXtyZWZlcnJhbFNvdXJjZX1cbiAgICAgICAgICAgICAgb25DaGFubmVsQ2hhbmdlPXtjaGFubmVsID0+IGhhbmRsZVJlZmVycmFsQ2hhbmdlKGNoYW5uZWwpfVxuICAgICAgICAgICAgICBsYWJlbD17J0N1c3RvbWl6ZSBsaW5rJ31cbiAgICAgICAgICAgICAgaGlkZUFub25cbiAgICAgICAgICAgICAgaW5qZWN0ZWQ9e1tyZWZlcnJhbENvZGVdfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgIHJld2FyZHNfbGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbmF2aWdhdGU9XCIvJC9yZXdhcmRzXCIgbGFiZWw9e19fKCdyZXdhcmRzJyl9IC8+LFxuICAgICAgICAgICAgICAgICAgcmVmZXJyYWxfZmFxX2xpbms6IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnRkFRJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9yZWZlcnJhbHNcIiAvPixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgRWFybiAlcmV3YXJkc19saW5rJSBmb3IgaW52aXRpbmcgeW91ciBmcmllbmRzLiBSZWFkIG91ciAlcmVmZXJyYWxfZmFxX2xpbmslIHRvIGxlYXJuIG1vcmUuXG4gICAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgfVxuICAgICAgLz5cblxuICAgICAgPENhcmRcbiAgICAgICAgdGl0bGU9e19fKCdJbnZpdGUgYnkgRW1haWwnKX1cbiAgICAgICAgc3VidGl0bGU9e19fKCdJbnZpdGUgc29tZW9uZSB5b3Uga25vdyBieSBlbWFpbCBhbmQgZWFybiAlcmV3YXJkX2Ftb3VudCUgTEJDIHdoZW4gdGhleSBqb2luIGxicnkudHYuJywge1xuICAgICAgICAgIHJld2FyZF9hbW91bnQ6IHJld2FyZEFtb3VudCxcbiAgICAgICAgfSl9XG4gICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiRW1haWxcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwieW91cmVtYWlsQGV4YW1wbGUub3JnXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtlbWFpbH1cbiAgICAgICAgICAgICAgICBlcnJvcj17ZXJyb3JNZXNzYWdlfVxuICAgICAgICAgICAgICAgIGlucHV0QnV0dG9uPXs8QnV0dG9uIGJ1dHRvbj1cInNlY29uZGFyeVwiIHR5cGU9XCJzdWJtaXRcIiBsYWJlbD1cIkludml0ZVwiIGRpc2FibGVkPXtpc1BlbmRpbmcgfHwgIWVtYWlsfSAvPn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlRW1haWxDaGFuZ2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgcmV3YXJkc19saW5rOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBuYXZpZ2F0ZT1cIi8kL3Jld2FyZHNcIiBsYWJlbD17X18oJ3Jld2FyZHMnKX0gLz4sXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmFsX2ZhcV9saW5rOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0ZBUScpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvcmVmZXJyYWxzXCIgLz4sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEVhcm4gJXJld2FyZHNfbGluayUgZm9yIGludml0aW5nIHlvdXIgZnJpZW5kcy4gUmVhZCBvdXIgJXJlZmVycmFsX2ZhcV9saW5rJSB0byBsZWFybiBtb3JlLlxuICAgICAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbnZpdGVOZXc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUZBO0FBR0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFqQkE7QUErQkE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQXJCQTtBQW9DQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/inviteNew/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/invited/index.js": -/*!****************************************!*\ - !*** ../ui/component/invited/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/invited/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUser\"])(state),\n referrerSetPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectSetReferrerPending\"])(state),\n referrerSetError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectSetReferrerError\"])(state),\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUnclaimedRewards\"])(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsSubscribed\"])(props.fullUri)(state),\n fullUri: props.fullUri,\n referrer: props.referrer\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n claimReward: function claimReward() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doClaimRewardType\"])(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"rewards\"].TYPE_REFEREE));\n },\n setReferrer: function setReferrer(referrer) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserSetReferrer\"])(referrer));\n },\n channelSubscribe: function channelSubscribe(uri) {\n return dispatch(Object(redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"doChannelSubscribe\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_5__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZWQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ludml0ZWQvaW5kZXguanM/M2JhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgc2VsZWN0VXNlcixcbiAgZG9DbGFpbVJld2FyZFR5cGUsXG4gIGRvVXNlclNldFJlZmVycmVyLFxuICBzZWxlY3RTZXRSZWZlcnJlclBlbmRpbmcsXG4gIHNlbGVjdFNldFJlZmVycmVyRXJyb3IsXG4gIHJld2FyZHMgYXMgUkVXQVJEUyxcbiAgc2VsZWN0VW5jbGFpbWVkUmV3YXJkcyxcbn0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0SXNTdWJzY3JpYmVkIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgZG9DaGFubmVsU3Vic2NyaWJlIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCBJbnZpdGVkIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICAgIHJlZmVycmVyU2V0UGVuZGluZzogc2VsZWN0U2V0UmVmZXJyZXJQZW5kaW5nKHN0YXRlKSxcbiAgICByZWZlcnJlclNldEVycm9yOiBzZWxlY3RTZXRSZWZlcnJlckVycm9yKHN0YXRlKSxcbiAgICByZXdhcmRzOiBzZWxlY3RVbmNsYWltZWRSZXdhcmRzKHN0YXRlKSxcbiAgICBpc1N1YnNjcmliZWQ6IG1ha2VTZWxlY3RJc1N1YnNjcmliZWQocHJvcHMuZnVsbFVyaSkoc3RhdGUpLFxuICAgIGZ1bGxVcmk6IHByb3BzLmZ1bGxVcmksXG4gICAgcmVmZXJyZXI6IHByb3BzLnJlZmVycmVyLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsYWltUmV3YXJkOiAoKSA9PiBkaXNwYXRjaChkb0NsYWltUmV3YXJkVHlwZShSRVdBUkRTLlRZUEVfUkVGRVJFRSkpLFxuICBzZXRSZWZlcnJlcjogcmVmZXJyZXIgPT4gZGlzcGF0Y2goZG9Vc2VyU2V0UmVmZXJyZXIocmVmZXJyZXIpKSxcbiAgY2hhbm5lbFN1YnNjcmliZTogdXJpID0+IGRpc3BhdGNoKGRvQ2hhbm5lbFN1YnNjcmliZSh1cmkpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoSW52aXRlZClcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBREE7QUFDQTtBQVdBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/invited/index.js\n"); - -/***/ }), - -/***/ "../ui/component/invited/view.jsx": -/*!****************************************!*\ - !*** ../ui/component/invited/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\nfunction Invited(props) {\n var user = props.user,\n claimReward = props.claimReward,\n setReferrer = props.setReferrer,\n referrerSetPending = props.referrerSetPending,\n referrerSetError = props.referrerSetError,\n channelSubscribe = props.channelSubscribe,\n history = props.history,\n rewards = props.rewards,\n fullUri = props.fullUri,\n referrer = props.referrer,\n isSubscribed = props.isSubscribed;\n var refUri = referrer && 'lbry://' + referrer.replace(':', '#');\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"parseURI\"])(refUri),\n referrerIsChannel = _parseURI.isChannel,\n referrerChannelName = _parseURI.claimName,\n referrerChannelClaimId = _parseURI.channelClaimId;\n\n var channelUri = referrerIsChannel && Object(util_url__WEBPACK_IMPORTED_MODULE_7__[\"formatLbryUrlForWeb\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"buildURI\"])({\n channelName: referrerChannelName,\n channelClaimId: referrerChannelClaimId\n }));\n var rewardsApproved = user && user.is_reward_approved;\n var hasVerifiedEmail = user && user.has_verified_email;\n var referredRewardAvailable = rewards && rewards.some(function (reward) {\n return reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_REFEREE;\n });\n var redirect = channelUri || \"/\"; // always follow if it's a channel\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (fullUri && !isSubscribed) {\n channelSubscribe({\n channelName: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"parseURI\"])(fullUri).claimName,\n uri: fullUri\n });\n }\n }, [fullUri, isSubscribed]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (!referrerSetPending && hasVerifiedEmail) {\n claimReward();\n }\n }, [referrerSetPending, hasVerifiedEmail]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (referrer) {\n setReferrer(referrer.replace(':', '#'));\n }\n }, [referrer]);\n\n function handleDone() {\n history.push(redirect);\n }\n\n if (referrerSetError === lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"ERRORS\"].ALREADY_CLAIMED) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __(\"Whoa\"),\n subtitle: referrerIsChannel ? __(\"You've already claimed your referrer, but we've followed this channel for you.\") : __(\"You've already claimed your referrer.\"),\n body: referrerIsChannel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"claim-preview--channel\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: refUri,\n uri: refUri,\n actions: '',\n type: 'small'\n })),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n label: __('Done!'),\n onClick: handleDone\n }))\n });\n }\n\n if (referrerSetError && referredRewardAvailable) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __(\"Welcome!\"),\n subtitle: __(\"Something went wrong with your invite link. You can set and claim your invite reward after signing in.\"),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"error-text\"\n }, __('Not a valid invite')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n label: hasVerifiedEmail ? __('Verify') : __('Create Account'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=/$/\").concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"REWARDS\"])\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Explore'),\n onClick: handleDone\n })))\n });\n }\n\n if (!rewardsApproved) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __(\"You're invited!\"),\n subtitle: referrerIsChannel ? __(\"Content freedom and a present from %channel_name% are waiting for you. Create an account to claim it.\", {\n channel_name: referrerChannelName\n }) : __(\"Content freedom and a present are waiting for you. Create an account to claim it.\"),\n body: referrerIsChannel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"claim-preview--channel\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: refUri,\n uri: refUri,\n actions: '',\n type: 'small'\n })),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n label: hasVerifiedEmail ? __('Finish Account') : __('Create Account'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=/$/\").concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"], \"/\").concat(referrer)\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Skip'),\n onClick: handleDone\n }))\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __(\"Welcome!\"),\n subtitle: referrerIsChannel ? __(\"We've followed your invitee for you. Check them out!\") : __(\"Congrats!\"),\n body: referrerIsChannel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"claim-preview--channel\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: refUri,\n uri: refUri,\n actions: '',\n type: 'small'\n })),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n label: __('Done'),\n onClick: handleDone\n }))\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Invited);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L2ludml0ZWQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L2ludml0ZWQvdmlldy5qc3g/NWUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgeyBidWlsZFVSSSwgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHJld2FyZHMgYXMgUkVXQVJEUywgRVJST1JTIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuXG50eXBlIFByb3BzID0ge1xuICB1c2VyOiBhbnksXG4gIGNsYWltUmV3YXJkOiAoKSA9PiB2b2lkLFxuICBzZXRSZWZlcnJlcjogc3RyaW5nID0+IHZvaWQsXG4gIHJlZmVycmVyU2V0UGVuZGluZzogYm9vbGVhbixcbiAgcmVmZXJyZXJTZXRFcnJvcjogc3RyaW5nLFxuICBjaGFubmVsU3Vic2NyaWJlOiAoc3ViOiBTdWJzY3JpcHRpb24pID0+IHZvaWQsXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbiAgcmV3YXJkczogQXJyYXk8UmV3YXJkPixcbiAgcmVmZXJyZXI6IHN0cmluZyxcbiAgZnVsbFVyaTogc3RyaW5nLFxuICBpc1N1YnNjcmliZWQ6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBJbnZpdGVkKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICBjbGFpbVJld2FyZCxcbiAgICBzZXRSZWZlcnJlcixcbiAgICByZWZlcnJlclNldFBlbmRpbmcsXG4gICAgcmVmZXJyZXJTZXRFcnJvcixcbiAgICBjaGFubmVsU3Vic2NyaWJlLFxuICAgIGhpc3RvcnksXG4gICAgcmV3YXJkcyxcbiAgICBmdWxsVXJpLFxuICAgIHJlZmVycmVyLFxuICAgIGlzU3Vic2NyaWJlZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHJlZlVyaSA9IHJlZmVycmVyICYmICdsYnJ5Oi8vJyArIHJlZmVycmVyLnJlcGxhY2UoJzonLCAnIycpO1xuICBjb25zdCB7XG4gICAgaXNDaGFubmVsOiByZWZlcnJlcklzQ2hhbm5lbCxcbiAgICBjbGFpbU5hbWU6IHJlZmVycmVyQ2hhbm5lbE5hbWUsXG4gICAgY2hhbm5lbENsYWltSWQ6IHJlZmVycmVyQ2hhbm5lbENsYWltSWQsXG4gIH0gPSBwYXJzZVVSSShyZWZVcmkpO1xuICBjb25zdCBjaGFubmVsVXJpID1cbiAgICByZWZlcnJlcklzQ2hhbm5lbCAmJlxuICAgIGZvcm1hdExicnlVcmxGb3JXZWIoYnVpbGRVUkkoeyBjaGFubmVsTmFtZTogcmVmZXJyZXJDaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQ6IHJlZmVycmVyQ2hhbm5lbENsYWltSWQgfSkpO1xuICBjb25zdCByZXdhcmRzQXBwcm92ZWQgPSB1c2VyICYmIHVzZXIuaXNfcmV3YXJkX2FwcHJvdmVkO1xuICBjb25zdCBoYXNWZXJpZmllZEVtYWlsID0gdXNlciAmJiB1c2VyLmhhc192ZXJpZmllZF9lbWFpbDtcbiAgY29uc3QgcmVmZXJyZWRSZXdhcmRBdmFpbGFibGUgPSByZXdhcmRzICYmIHJld2FyZHMuc29tZShyZXdhcmQgPT4gcmV3YXJkLnJld2FyZF90eXBlID09PSBSRVdBUkRTLlRZUEVfUkVGRVJFRSk7XG4gIGNvbnN0IHJlZGlyZWN0ID0gY2hhbm5lbFVyaSB8fCBgL2A7XG5cbiAgLy8gYWx3YXlzIGZvbGxvdyBpZiBpdCdzIGEgY2hhbm5lbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmdWxsVXJpICYmICFpc1N1YnNjcmliZWQpIHtcbiAgICAgIGNoYW5uZWxTdWJzY3JpYmUoe1xuICAgICAgICBjaGFubmVsTmFtZTogcGFyc2VVUkkoZnVsbFVyaSkuY2xhaW1OYW1lLFxuICAgICAgICB1cmk6IGZ1bGxVcmksXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtmdWxsVXJpLCBpc1N1YnNjcmliZWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcmVmZXJyZXJTZXRQZW5kaW5nICYmIGhhc1ZlcmlmaWVkRW1haWwpIHtcbiAgICAgIGNsYWltUmV3YXJkKCk7XG4gICAgfVxuICB9LCBbcmVmZXJyZXJTZXRQZW5kaW5nLCBoYXNWZXJpZmllZEVtYWlsXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmVmZXJyZXIpIHtcbiAgICAgIHNldFJlZmVycmVyKHJlZmVycmVyLnJlcGxhY2UoJzonLCAnIycpKTtcbiAgICB9XG4gIH0sIFtyZWZlcnJlcl0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZURvbmUoKSB7XG4gICAgaGlzdG9yeS5wdXNoKHJlZGlyZWN0KTtcbiAgfVxuXG4gIGlmIChyZWZlcnJlclNldEVycm9yID09PSBFUlJPUlMuQUxSRUFEWV9DTEFJTUVEKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDYXJkXG4gICAgICAgIHRpdGxlPXtfXyhgV2hvYWApfVxuICAgICAgICBzdWJ0aXRsZT17XG4gICAgICAgICAgcmVmZXJyZXJJc0NoYW5uZWxcbiAgICAgICAgICAgID8gX18oYFlvdSd2ZSBhbHJlYWR5IGNsYWltZWQgeW91ciByZWZlcnJlciwgYnV0IHdlJ3ZlIGZvbGxvd2VkIHRoaXMgY2hhbm5lbCBmb3IgeW91LmApXG4gICAgICAgICAgICA6IF9fKGBZb3UndmUgYWxyZWFkeSBjbGFpbWVkIHlvdXIgcmVmZXJyZXIuYClcbiAgICAgICAgfVxuICAgICAgICBib2R5PXtcbiAgICAgICAgICByZWZlcnJlcklzQ2hhbm5lbCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXctLWNoYW5uZWxcIj5cbiAgICAgICAgICAgICAgPENsYWltUHJldmlldyBrZXk9e3JlZlVyaX0gdXJpPXtyZWZVcml9IGFjdGlvbnM9eycnfSB0eXBlPXsnc21hbGwnfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdEb25lIScpfSBvbkNsaWNrPXtoYW5kbGVEb25lfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICBpZiAocmVmZXJyZXJTZXRFcnJvciAmJiByZWZlcnJlZFJld2FyZEF2YWlsYWJsZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q2FyZFxuICAgICAgICB0aXRsZT17X18oYFdlbGNvbWUhYCl9XG4gICAgICAgIHN1YnRpdGxlPXtfXyhcbiAgICAgICAgICBgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB5b3VyIGludml0ZSBsaW5rLiBZb3UgY2FuIHNldCBhbmQgY2xhaW0geW91ciBpbnZpdGUgcmV3YXJkIGFmdGVyIHNpZ25pbmcgaW4uYFxuICAgICAgICApfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPntfXygnTm90IGEgdmFsaWQgaW52aXRlJyl9PC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBsYWJlbD17aGFzVmVyaWZpZWRFbWFpbCA/IF9fKCdWZXJpZnknKSA6IF9fKCdDcmVhdGUgQWNjb3VudCcpfVxuICAgICAgICAgICAgICAgIG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5BVVRIfT9yZWRpcmVjdD0vJC8ke1BBR0VTLlJFV0FSRFN9YH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdFeHBsb3JlJyl9IG9uQ2xpY2s9e2hhbmRsZURvbmV9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgaWYgKCFyZXdhcmRzQXBwcm92ZWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRcbiAgICAgICAgdGl0bGU9e19fKGBZb3UncmUgaW52aXRlZCFgKX1cbiAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgIHJlZmVycmVySXNDaGFubmVsXG4gICAgICAgICAgICA/IF9fKFxuICAgICAgICAgICAgICAgIGBDb250ZW50IGZyZWVkb20gYW5kIGEgcHJlc2VudCBmcm9tICVjaGFubmVsX25hbWUlIGFyZSB3YWl0aW5nIGZvciB5b3UuIENyZWF0ZSBhbiBhY2NvdW50IHRvIGNsYWltIGl0LmAsXG4gICAgICAgICAgICAgICAgeyBjaGFubmVsX25hbWU6IHJlZmVycmVyQ2hhbm5lbE5hbWUgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF9fKGBDb250ZW50IGZyZWVkb20gYW5kIGEgcHJlc2VudCBhcmUgd2FpdGluZyBmb3IgeW91LiBDcmVhdGUgYW4gYWNjb3VudCB0byBjbGFpbSBpdC5gKVxuICAgICAgICB9XG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIHJlZmVycmVySXNDaGFubmVsICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlldy0tY2hhbm5lbFwiPlxuICAgICAgICAgICAgICA8Q2xhaW1QcmV2aWV3IGtleT17cmVmVXJpfSB1cmk9e3JlZlVyaX0gYWN0aW9ucz17Jyd9IHR5cGU9eydzbWFsbCd9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBsYWJlbD17aGFzVmVyaWZpZWRFbWFpbCA/IF9fKCdGaW5pc2ggQWNjb3VudCcpIDogX18oJ0NyZWF0ZSBBY2NvdW50Jyl9XG4gICAgICAgICAgICAgIG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5BVVRIfT9yZWRpcmVjdD0vJC8ke1BBR0VTLklOVklURX0vJHtyZWZlcnJlcn1gfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnU2tpcCcpfSBvbkNsaWNrPXtoYW5kbGVEb25lfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICB0aXRsZT17X18oYFdlbGNvbWUhYCl9XG4gICAgICBzdWJ0aXRsZT17cmVmZXJyZXJJc0NoYW5uZWwgPyBfXyhgV2UndmUgZm9sbG93ZWQgeW91ciBpbnZpdGVlIGZvciB5b3UuIENoZWNrIHRoZW0gb3V0IWApIDogX18oYENvbmdyYXRzIWApfVxuICAgICAgYm9keT17XG4gICAgICAgIHJlZmVycmVySXNDaGFubmVsICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsYWltLXByZXZpZXctLWNoYW5uZWxcIj5cbiAgICAgICAgICAgIDxDbGFpbVByZXZpZXcga2V5PXtyZWZVcml9IHVyaT17cmVmVXJpfSBhY3Rpb25zPXsnJ30gdHlwZT17J3NtYWxsJ30gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYWN0aW9ucz17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIGxhYmVsPXtfXygnRG9uZScpfSBvbkNsaWNrPXtoYW5kbGVEb25lfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbnZpdGVkO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQWhCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBb0JBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQU5BO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFoQkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUFBO0FBSUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUF4QkE7QUE2QkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVpBO0FBaUJBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/invited/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/navigationButton/index.js": -/*!*************************************************!*\ - !*** ../ui/component/navigationButton/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/component/navigationButton/view.jsx\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L25hdmlnYXRpb25CdXR0b24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L25hdmlnYXRpb25CdXR0b24vaW5kZXguanM/NzhlOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTmF2aWdhdGlvbkJ1dHRvbiBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/navigationButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/navigationButton/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/navigationButton/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n // the maximum length of history to show per button\n\nvar MAX_HISTORY_SIZE = 12; // determines which slice of entries should make up the back or forward button drop-downs (isBackward vs !isBackward respectively)\n\nvar sliceEntries = function sliceEntries(currentIndex, entries, historyLength, isBackward, maxSize) {\n var l = isBackward ? 0 : currentIndex + 1;\n var r = isBackward ? currentIndex : historyLength;\n var exceedsMax = maxSize < r - l;\n\n if (!exceedsMax) {\n return entries.slice(l, r);\n } else if (isBackward) {\n l = r - maxSize;\n } else {\n r = l + maxSize;\n }\n\n return entries.slice(l, r);\n};\n\nvar NavigationButton = function NavigationButton(props) {\n var isBackward = props.isBackward,\n history = props.history;\n var entries = history.entries,\n go = history.go;\n var currentIndex = history.index;\n var historyLength = history.length;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n showHistory = _useState2[0],\n setShowHistory = _useState2[1]; // creates an <li> intended for the button's <ul>\n\n\n var makeItem = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (entry, index) {\n // difference between the current index and the index of the entry\n var backwardDif = index - (currentIndex < MAX_HISTORY_SIZE ? currentIndex : MAX_HISTORY_SIZE);\n var forwardDif = index + 1;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"header__navigation-button\",\n role: \"link\",\n key: entry.key,\n onMouseDown: function onMouseDown() {\n setShowHistory(false);\n go(isBackward ? backwardDif : forwardDif);\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, entry.title), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"header__navigation-button-help\"\n }, entry.pathname === '/' ? __('Home') : entry.pathname));\n }, [currentIndex, isBackward, go]);\n var slicedEntries = sliceEntries(currentIndex, entries, historyLength, isBackward, MAX_HISTORY_SIZE);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"header__navigation-item header__navigation-item--\".concat(isBackward ? 'back' : 'forward'),\n description: isBackward ? __('Navigate back') : __('Navigate forward'),\n onBlur: function onBlur() {\n return setShowHistory(false);\n },\n onClick: function onClick() {\n return isBackward ? history.goBack() : history.goForward();\n },\n onContextMenu: function onContextMenu(e) {\n setShowHistory(!showHistory); // the following three lines prevent the regular context menu (right click menu) from appearing\n\n e.preventDefault();\n e.stopPropagation();\n return false;\n },\n icon: isBackward ? constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"ARROW_LEFT\"] : constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"ARROW_RIGHT\"],\n iconSize: 18,\n disabled: slicedEntries.length === 0\n }), showHistory && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: 'header__navigation-dropdown'\n }, slicedEntries.map(makeItem)));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NavigationButton);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L25hdmlnYXRpb25CdXR0b24vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L25hdmlnYXRpb25CdXR0b24vdmlldy5qc3g/YTc2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG4vLyB0aGUgbWF4aW11bSBsZW5ndGggb2YgaGlzdG9yeSB0byBzaG93IHBlciBidXR0b25cbmNvbnN0IE1BWF9ISVNUT1JZX1NJWkUgPSAxMjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXNCYWNrd2FyZDogYm9vbGVhbixcbiAgaGlzdG9yeToge1xuICAgIGVudHJpZXM6IEFycmF5PHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHBhdGhuYW1lOiBzdHJpbmcgfT4sXG4gICAgZ286IG51bWJlciA9PiB2b2lkLFxuICAgIGdvQmFjazogKCkgPT4gdm9pZCxcbiAgICBnb0ZvcndhcmQ6ICgpID0+IHZvaWQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nIH0sXG4gICAgcHVzaDogc3RyaW5nID0+IHZvaWQsXG4gIH0sXG59O1xuXG4vLyBkZXRlcm1pbmVzIHdoaWNoIHNsaWNlIG9mIGVudHJpZXMgc2hvdWxkIG1ha2UgdXAgdGhlIGJhY2sgb3IgZm9yd2FyZCBidXR0b24gZHJvcC1kb3ducyAoaXNCYWNrd2FyZCB2cyAhaXNCYWNrd2FyZCByZXNwZWN0aXZlbHkpXG5jb25zdCBzbGljZUVudHJpZXMgPSAoY3VycmVudEluZGV4LCBlbnRyaWVzLCBoaXN0b3J5TGVuZ3RoLCBpc0JhY2t3YXJkLCBtYXhTaXplKSA9PiB7XG4gIGxldCBsID0gaXNCYWNrd2FyZCA/IDAgOiBjdXJyZW50SW5kZXggKyAxO1xuICBsZXQgciA9IGlzQmFja3dhcmQgPyBjdXJyZW50SW5kZXggOiBoaXN0b3J5TGVuZ3RoO1xuICBjb25zdCBleGNlZWRzTWF4ID0gbWF4U2l6ZSA8IHIgLSBsO1xuICBpZiAoIWV4Y2VlZHNNYXgpIHtcbiAgICByZXR1cm4gZW50cmllcy5zbGljZShsLCByKTtcbiAgfSBlbHNlIGlmIChpc0JhY2t3YXJkKSB7XG4gICAgbCA9IHIgLSBtYXhTaXplO1xuICB9IGVsc2Uge1xuICAgIHIgPSBsICsgbWF4U2l6ZTtcbiAgfVxuICByZXR1cm4gZW50cmllcy5zbGljZShsLCByKTtcbn07XG5cbmNvbnN0IE5hdmlnYXRpb25CdXR0b24gPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaXNCYWNrd2FyZCwgaGlzdG9yeSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZW50cmllcywgZ28gfSA9IGhpc3Rvcnk7XG4gIGNvbnN0IGN1cnJlbnRJbmRleCA9IGhpc3RvcnkuaW5kZXg7XG4gIGNvbnN0IGhpc3RvcnlMZW5ndGggPSBoaXN0b3J5Lmxlbmd0aDtcbiAgY29uc3QgW3Nob3dIaXN0b3J5LCBzZXRTaG93SGlzdG9yeV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gY3JlYXRlcyBhbiA8bGk+IGludGVuZGVkIGZvciB0aGUgYnV0dG9uJ3MgPHVsPlxuICBjb25zdCBtYWtlSXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChlbnRyeTogeyBwYXRobmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBrZXk6IHN0cmluZyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBpbmRleCBvZiB0aGUgZW50cnlcbiAgICAgIGNvbnN0IGJhY2t3YXJkRGlmID0gaW5kZXggLSAoY3VycmVudEluZGV4IDwgTUFYX0hJU1RPUllfU0laRSA/IGN1cnJlbnRJbmRleCA6IE1BWF9ISVNUT1JZX1NJWkUpO1xuICAgICAgY29uc3QgZm9yd2FyZERpZiA9IGluZGV4ICsgMTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaVxuICAgICAgICAgIGNsYXNzTmFtZT1cImhlYWRlcl9fbmF2aWdhdGlvbi1idXR0b25cIlxuICAgICAgICAgIHJvbGU9XCJsaW5rXCJcbiAgICAgICAgICBrZXk9e2VudHJ5LmtleX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd0hpc3RvcnkoZmFsc2UpO1xuICAgICAgICAgICAgZ28oaXNCYWNrd2FyZCA/IGJhY2t3YXJkRGlmIDogZm9yd2FyZERpZik7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPntlbnRyeS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGVhZGVyX19uYXZpZ2F0aW9uLWJ1dHRvbi1oZWxwXCI+e2VudHJ5LnBhdGhuYW1lID09PSAnLycgPyBfXygnSG9tZScpIDogZW50cnkucGF0aG5hbWV9PC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjdXJyZW50SW5kZXgsIGlzQmFja3dhcmQsIGdvXVxuICApO1xuICBjb25zdCBzbGljZWRFbnRyaWVzID0gc2xpY2VFbnRyaWVzKGN1cnJlbnRJbmRleCwgZW50cmllcywgaGlzdG9yeUxlbmd0aCwgaXNCYWNrd2FyZCwgTUFYX0hJU1RPUllfU0laRSk7XG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtgaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0gaGVhZGVyX19uYXZpZ2F0aW9uLWl0ZW0tLSR7aXNCYWNrd2FyZCA/ICdiYWNrJyA6ICdmb3J3YXJkJ31gfVxuICAgICAgICBkZXNjcmlwdGlvbj17aXNCYWNrd2FyZCA/IF9fKCdOYXZpZ2F0ZSBiYWNrJykgOiBfXygnTmF2aWdhdGUgZm9yd2FyZCcpfVxuICAgICAgICBvbkJsdXI9eygpID0+IHNldFNob3dIaXN0b3J5KGZhbHNlKX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gKGlzQmFja3dhcmQgPyBoaXN0b3J5LmdvQmFjaygpIDogaGlzdG9yeS5nb0ZvcndhcmQoKSl9XG4gICAgICAgIG9uQ29udGV4dE1lbnU9e2UgPT4ge1xuICAgICAgICAgIHNldFNob3dIaXN0b3J5KCFzaG93SGlzdG9yeSk7XG4gICAgICAgICAgLy8gdGhlIGZvbGxvd2luZyB0aHJlZSBsaW5lcyBwcmV2ZW50IHRoZSByZWd1bGFyIGNvbnRleHQgbWVudSAocmlnaHQgY2xpY2sgbWVudSkgZnJvbSBhcHBlYXJpbmdcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICAgIGljb249e2lzQmFja3dhcmQgPyBJQ09OUy5BUlJPV19MRUZUIDogSUNPTlMuQVJST1dfUklHSFR9XG4gICAgICAgIGljb25TaXplPXsxOH1cbiAgICAgICAgZGlzYWJsZWQ9e3NsaWNlZEVudHJpZXMubGVuZ3RoID09PSAwfVxuICAgICAgLz5cbiAgICAgIHtzaG93SGlzdG9yeSAmJiA8dWwgY2xhc3NOYW1lPXsnaGVhZGVyX19uYXZpZ2F0aW9uLWRyb3Bkb3duJ30+e3NsaWNlZEVudHJpZXMubWFwKG1ha2VJdGVtKX08L3VsPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBWEE7QUFDQTtBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQUE7QUFoQkE7QUFzQkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFJQTtBQUFBO0FBSkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQUE7QUFqREE7QUFDQTtBQW9EQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/navigationButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/page/index.js": -/*!*************************************!*\ - !*** ../ui/component/page/index.js ***! - \*************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/page/view.jsx\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])()(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3BhZ2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3BhZ2UvaW5kZXguanM/Y2M3MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnLi92aWV3JztcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdCgpKFBhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/page/index.js\n"); - -/***/ }), - -/***/ "../ui/component/page/view.jsx": -/*!*************************************!*\ - !*** ../ui/component/page/view.jsx ***! - \*************************************/ -/*! exports provided: MAIN_CLASS, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAIN_CLASS\", function() { return MAIN_CLASS; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_sideNavigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/sideNavigation */ \"../ui/component/sideNavigation/index.js\");\n/* harmony import */ var component_header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/header */ \"../ui/component/header/index.js\");\n\n\n\n\nvar MAIN_CLASS = 'main';\n\nfunction Page(props) {\n var children = props.children,\n className = props.className,\n _props$authPage = props.authPage,\n authPage = _props$authPage === void 0 ? false : _props$authPage,\n noHeader = props.noHeader;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, !noHeader && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_header__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n authHeader: authPage\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('main-wrapper__inner')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"main\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(MAIN_CLASS, className, {\n 'main--full-width': authPage\n })\n }, children), !authPage && !noHeader && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_sideNavigation__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null)));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Page);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3BhZ2Uvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3BhZ2Uvdmlldy5qc3g/MDY1MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgU2lkZU5hdmlnYXRpb24gZnJvbSAnY29tcG9uZW50L3NpZGVOYXZpZ2F0aW9uJztcbmltcG9ydCBIZWFkZXIgZnJvbSAnY29tcG9uZW50L2hlYWRlcic7XG5cbmV4cG9ydCBjb25zdCBNQUlOX0NMQVNTID0gJ21haW4nO1xudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IE5vZGUgfCBBcnJheTxOb2RlPixcbiAgY2xhc3NOYW1lOiA/c3RyaW5nLFxuICBhdXRvVXBkYXRlRG93bmxvYWRlZDogYm9vbGVhbixcbiAgaXNVcGdyYWRlQXZhaWxhYmxlOiBib29sZWFuLFxuICBhdXRoUGFnZTogYm9vbGVhbixcbiAgbm9IZWFkZXI6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGF1dGhQYWdlID0gZmFsc2UsIG5vSGVhZGVyIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHshbm9IZWFkZXIgJiYgPEhlYWRlciBhdXRoSGVhZGVyPXthdXRoUGFnZX0gLz59XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbWFpbi13cmFwcGVyX19pbm5lcicpfT5cbiAgICAgICAgPG1haW4gY2xhc3NOYW1lPXtjbGFzc25hbWVzKE1BSU5fQ0xBU1MsIGNsYXNzTmFtZSwgeyAnbWFpbi0tZnVsbC13aWR0aCc6IGF1dGhQYWdlIH0pfT57Y2hpbGRyZW59PC9tYWluPlxuICAgICAgICB7IWF1dGhQYWdlICYmICFub0hlYWRlciAmJiA8U2lkZU5hdmlnYXRpb24gLz59XG4gICAgICA8L2Rpdj5cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlO1xuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/page/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/previewLink/index.js": -/*!********************************************!*\ - !*** ../ui/component/previewLink/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/previewLink/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n uri: props.uri,\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n description: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataItemForUri\"])(props.uri, 'description')(state),\n channelIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectBlackListedOutpoints\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ByZXZpZXdMaW5rL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wcmV2aWV3TGluay9pbmRleC5qcz82MzYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCB7XG4gIGRvUmVzb2x2ZVVyaSxcbiAgbWFrZVNlbGVjdENsYWltSXNNaW5lLFxuICBtYWtlU2VsZWN0VGl0bGVGb3JVcmksXG4gIG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmksXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbiAgbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nLFxuICBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcblxuaW1wb3J0IHsgc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMgfSBmcm9tICdsYnJ5aW5jJztcblxuaW1wb3J0IFByZXZpZXdMaW5rIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB1cmk6IHByb3BzLnVyaSxcbiAgICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIHRpdGxlOiBtYWtlU2VsZWN0VGl0bGVGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gICAgdGh1bWJuYWlsOiBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGRlc2NyaXB0aW9uOiBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpKHByb3BzLnVyaSwgJ2Rlc2NyaXB0aW9uJykoc3RhdGUpLFxuICAgIGNoYW5uZWxJc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICBpc1Jlc29sdmluZ1VyaTogbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nKHByb3BzLnVyaSkoc3RhdGUpLFxuICAgIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiBzZWxlY3RCbGFja0xpc3RlZE91dHBvaW50cyhzdGF0ZSksXG4gIH07XG59O1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVzb2x2ZVVyaTogdXJpID0+IGRpc3BhdGNoKGRvUmVzb2x2ZVVyaSh1cmkpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoUHJldmlld0xpbmspO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBREE7QUFDQTtBQVlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/previewLink/index.js\n"); - -/***/ }), - -/***/ "../ui/component/previewLink/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/previewLink/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_common_truncated_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/truncated-text */ \"../ui/component/common/truncated-text.jsx\");\n/* harmony import */ var component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/markdown-preview */ \"../ui/component/common/markdown-preview.jsx\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_5__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\nvar PreviewLink = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(PreviewLink, _React$PureComponent);\n\n function PreviewLink() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, PreviewLink);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(PreviewLink)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"handleClick\", function () {\n var _this$props = _this.props,\n uri = _this$props.uri,\n history = _this$props.history;\n history.push(Object(util_url__WEBPACK_IMPORTED_MODULE_5__[\"formatLbryUrlForWeb\"])(uri));\n });\n\n return _this;\n }\n\n _createClass(PreviewLink, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n uri = _this$props2.uri,\n title = _this$props2.title,\n description = _this$props2.description,\n thumbnail = _this$props2.thumbnail;\n var placeholder = 'static/img/placeholder.png';\n var thumbnailStyle = {\n backgroundImage: \"url(\".concat(thumbnail || placeholder, \")\")\n };\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'preview-link',\n role: \"button\",\n onClick: this.handleClick\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'claim-preview'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n style: thumbnailStyle,\n className: 'preview-link__thumbnail media__thumb'\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'claim-preview-metadata'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'claim-preview-info'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'claim-preview__title'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_truncated_text__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n text: title,\n lines: 1\n }))), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'media__subtitle'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_uriIndicator__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n link: true\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'claim-preview-properties'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", {\n className: 'preview-link__description media__subtitle'\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_truncated_text__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n lines: 2,\n showTooltip: false\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n content: description,\n strip: true\n })))))));\n }\n }]);\n\n return PreviewLink;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(PreviewLink));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ByZXZpZXdMaW5rL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wcmV2aWV3TGluay92aWV3LmpzeD8wZTNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVXJpSW5kaWNhdG9yIGZyb20gJ2NvbXBvbmVudC91cmlJbmRpY2F0b3InO1xuaW1wb3J0IFRydW5jYXRlZFRleHQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi90cnVuY2F0ZWQtdGV4dCc7XG5pbXBvcnQgTWFya2Rvd25QcmV2aWV3IGZyb20gJ2NvbXBvbmVudC9jb21tb24vbWFya2Rvd24tcHJldmlldyc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgdGl0bGU6ID9zdHJpbmcsXG4gIHRodW1ibmFpbDogP3N0cmluZyxcbiAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbn07XG5cbmNsYXNzIFByZXZpZXdMaW5rIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBoYW5kbGVDbGljayA9ICgpID0+IHtcbiAgICBjb25zdCB7IHVyaSwgaGlzdG9yeSB9ID0gdGhpcy5wcm9wcztcbiAgICBoaXN0b3J5LnB1c2goZm9ybWF0TGJyeVVybEZvcldlYih1cmkpKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB1cmksIHRpdGxlLCBkZXNjcmlwdGlvbiwgdGh1bWJuYWlsIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gJ3N0YXRpYy9pbWcvcGxhY2Vob2xkZXIucG5nJztcblxuICAgIGNvbnN0IHRodW1ibmFpbFN0eWxlID0ge1xuICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7dGh1bWJuYWlsIHx8IHBsYWNlaG9sZGVyfSlgLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXsncHJldmlldy1saW5rJ30gcm9sZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydjbGFpbS1wcmV2aWV3J30+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3RodW1ibmFpbFN0eWxlfSBjbGFzc05hbWU9eydwcmV2aWV3LWxpbmtfX3RodW1ibmFpbCBtZWRpYV9fdGh1bWInfSAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17J2NsYWltLXByZXZpZXctbWV0YWRhdGEnfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17J2NsYWltLXByZXZpZXctaW5mbyd9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydjbGFpbS1wcmV2aWV3X190aXRsZSd9PlxuICAgICAgICAgICAgICAgIDxUcnVuY2F0ZWRUZXh0IHRleHQ9e3RpdGxlfSBsaW5lcz17MX0gLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXsnbWVkaWFfX3N1YnRpdGxlJ30+XG4gICAgICAgICAgICAgIDxVcmlJbmRpY2F0b3IgdXJpPXt1cml9IGxpbmsgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17J2NsYWltLXByZXZpZXctcHJvcGVydGllcyd9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydwcmV2aWV3LWxpbmtfX2Rlc2NyaXB0aW9uIG1lZGlhX19zdWJ0aXRsZSd9PlxuICAgICAgICAgICAgICAgIDxUcnVuY2F0ZWRUZXh0IGxpbmVzPXsyfSBzaG93VG9vbHRpcD17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgPE1hcmtkb3duUHJldmlldyBjb250ZW50PXtkZXNjcmlwdGlvbn0gc3RyaXAgLz5cbiAgICAgICAgICAgICAgICA8L1RydW5jYXRlZFRleHQ+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoUHJldmlld0xpbmspO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7Ozs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQVFBOzs7O0FBdENBO0FBQ0E7QUF3Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/previewLink/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/privacyAgreement/index.js": -/*!*************************************************!*\ - !*** ../ui/component/privacyAgreement/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! config.js */ \"../config.js\");\n/* harmony import */ var config_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(config_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/privacyAgreement/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n authenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setWelcomeVersion: function setWelcomeVersion(version) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doSetWelcomeVersion\"])(version || config_js__WEBPACK_IMPORTED_MODULE_4__[\"WELCOME_VERSION\"]));\n },\n setShareDataInternal: function setShareDataInternal(share) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_1__[\"doSetDaemonSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"DAEMON_SETTINGS\"].SHARE_USAGE_DATA, share));\n },\n setShareDataThirdParty: function setShareDataThirdParty(share) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doToggle3PAnalytics\"])(share));\n },\n signOut: function signOut() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doSignOut\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ByaXZhY3lBZ3JlZW1lbnQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ByaXZhY3lBZ3JlZW1lbnQvaW5kZXguanM/MmNkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9TZXREYWVtb25TZXR0aW5nIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NldFdlbGNvbWVWZXJzaW9uLCBkb1RvZ2dsZTNQQW5hbHl0aWNzLCBkb1NpZ25PdXQgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBEQUVNT05fU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IFdFTENPTUVfVkVSU0lPTiB9IGZyb20gJ2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbCB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFByaXZhY3lBZ3JlZW1lbnQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgYXV0aGVudGljYXRlZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBzZXRXZWxjb21lVmVyc2lvbjogdmVyc2lvbiA9PiBkaXNwYXRjaChkb1NldFdlbGNvbWVWZXJzaW9uKHZlcnNpb24gfHwgV0VMQ09NRV9WRVJTSU9OKSksXG4gIHNldFNoYXJlRGF0YUludGVybmFsOiBzaGFyZSA9PiBkaXNwYXRjaChkb1NldERhZW1vblNldHRpbmcoREFFTU9OX1NFVFRJTkdTLlNIQVJFX1VTQUdFX0RBVEEsIHNoYXJlKSksXG4gIHNldFNoYXJlRGF0YVRoaXJkUGFydHk6IHNoYXJlID0+IGRpc3BhdGNoKGRvVG9nZ2xlM1BBbmFseXRpY3Moc2hhcmUpKSxcbiAgc2lnbk91dDogKCkgPT4gZGlzcGF0Y2goZG9TaWduT3V0KCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShQcml2YWN5QWdyZWVtZW50KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUhBO0FBSUE7QUFBQTtBQUFBO0FBSkE7QUFBQTtBQUNBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/privacyAgreement/index.js\n"); - -/***/ }), - -/***/ "../ui/component/privacyAgreement/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/privacyAgreement/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form-components/form-field */ \"../ui/component/common/form-components/form-field.jsx\");\n/* harmony import */ var component_common_form_components_form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/form-components/form */ \"../ui/component/common/form-components/form.jsx\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var static_img_unlocklbry_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! static/img/unlocklbry.svg */ \"../static/img/unlocklbry.svg\");\n/* harmony import */ var static_img_unlocklbry_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(static_img_unlocklbry_svg__WEBPACK_IMPORTED_MODULE_6__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n // $FlowFixMe cannot resolve ...\n\n\nvar FREE = 'free';\nvar LIMITED = 'limited';\nvar NONE = 'none';\n\nfunction PrivacyAgreement(props) {\n var setWelcomeVersion = props.setWelcomeVersion,\n setShareDataInternal = props.setShareDataInternal,\n setShareDataThirdParty = props.setShareDataThirdParty,\n history = props.history,\n authenticated = props.authenticated,\n signOut = props.signOut;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(undefined),\n _useState2 = _slicedToArray(_useState, 2),\n share = _useState2[0],\n setShare = _useState2[1]; // preload\n\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n agree = _useState4[0],\n setAgree = _useState4[1]; // preload\n\n\n function handleSubmit() {\n if (share === FREE) {\n setShareDataInternal(true);\n setShareDataThirdParty(true);\n } else if (share === LIMITED) {\n setShareDataInternal(true);\n setShareDataThirdParty(false);\n } else {\n setShareDataInternal(false);\n setShareDataThirdParty(false);\n }\n\n setWelcomeVersion();\n history.replace(\"/\");\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--contained\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'columns'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Welcome')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", {\n className: \"section__subtitle\"\n }, __(\"LBRY takes privacy and choice seriously. Just a few questions before you enter the land of content freedom. \"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n src: static_img_unlocklbry_svg__WEBPACK_IMPORTED_MODULE_6___default.a,\n className: \"privacy-img\"\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"hr\", null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__body section__subtitle\"\n }, __('Can this app send information about your usage to inform publishers and improve the software?')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form__WEBPACK_IMPORTED_MODULE_4__[\"Form\"], {\n onSubmit: handleSubmit,\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n name: 'shareFreely',\n type: \"radio\",\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('Yes, including with third-party analytics platforms'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"\\uD83D\\uDE04\")),\n helper: __(\"Sending information to third parties (e.g. Google Analytics or Mixpanel) allows us to use detailed\\n analytical reports to improve all aspects of LBRY.\"),\n checked: share === FREE,\n onChange: function onChange(e) {\n return setShare(FREE);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n name: 'shareWithLBRY',\n type: \"radio\",\n checked: share === LIMITED,\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('Yes, but only with LBRY, Inc.'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"\\uD83D\\uDE42\")),\n helper: __(\"Sharing information with LBRY, Inc. allows us to report to publishers how their content is doing, as\\n well as track basic usage and performance. This is the minimum required to earn rewards from LBRY, Inc.\"),\n onChange: function onChange(e) {\n return setShare(LIMITED);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n disabled: authenticated,\n name: 'shareNot',\n type: \"radio\",\n checked: share === NONE,\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('No'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"\\uD83D\\uDE22\")),\n helper: __(\"No information will be sent directly to LBRY, Inc. or third-parties about your usage. Note that as\\n peer-to-peer software, your IP address and potentially other system information can be sent to other\\n users, though this information is not stored permanently.\"),\n onChange: function onChange(e) {\n return setShare(NONE);\n }\n }), authenticated && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card--inline section--padded\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n signout_button: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('Sign Out'),\n onClick: signOut\n })\n }\n }, \"You are signed into lbry.tv which automatically shares data with LBRY inc. %signout_button%.\")))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n terms: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://www.lbry.com/termsofservice\",\n label: __('Terms of Service')\n })\n }\n }, \"Do you agree to the %terms%?\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n name: 'agreeButton',\n type: \"radio\",\n label: 'Yes',\n checked: agree === true,\n onChange: function onChange(e) {\n return setAgree(e.target.checked);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n name: 'disagreeButton',\n type: \"radio\",\n checked: agree === false,\n label: __('No'),\n onChange: function onChange(e) {\n return setAgree(!e.target.checked);\n }\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'card__actions'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n label: __(\"Let's go\"),\n disabled: !share || !agree,\n type: \"submit\"\n })), share === NONE && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('While we respect the desire for maximally private usage, please note that choosing this option hurts the ability for creators to understand how their content is performing.'))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_5__[\"withRouter\"])(PrivacyAgreement));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ByaXZhY3lBZ3JlZW1lbnQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ByaXZhY3lBZ3JlZW1lbnQvdmlldy5qc3g/YWU1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtLWNvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG4vLyAkRmxvd0ZpeE1lIGNhbm5vdCByZXNvbHZlIC4uLlxuaW1wb3J0IGltYWdlIGZyb20gJ3N0YXRpYy9pbWcvdW5sb2NrbGJyeS5zdmcnO1xuXG5jb25zdCBGUkVFID0gJ2ZyZWUnO1xuY29uc3QgTElNSVRFRCA9ICdsaW1pdGVkJztcbmNvbnN0IE5PTkUgPSAnbm9uZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNldFdlbGNvbWVWZXJzaW9uOiAoKSA9PiB2b2lkLFxuICBzaWduT3V0OiAoKSA9PiB2b2lkLFxuICBzZXRTaGFyZURhdGFJbnRlcm5hbDogYm9vbGVhbiA9PiB2b2lkLFxuICBzZXRTaGFyZURhdGFUaGlyZFBhcnR5OiBib29sZWFuID0+IHZvaWQsXG4gIGhpc3Rvcnk6IHsgcmVwbGFjZTogc3RyaW5nID0+IHZvaWQgfSxcbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIFByaXZhY3lBZ3JlZW1lbnQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgc2V0V2VsY29tZVZlcnNpb24sIHNldFNoYXJlRGF0YUludGVybmFsLCBzZXRTaGFyZURhdGFUaGlyZFBhcnR5LCBoaXN0b3J5LCBhdXRoZW50aWNhdGVkLCBzaWduT3V0IH0gPSBwcm9wcztcbiAgY29uc3QgW3NoYXJlLCBzZXRTaGFyZV0gPSB1c2VTdGF0ZSh1bmRlZmluZWQpOyAvLyBwcmVsb2FkXG4gIGNvbnN0IFthZ3JlZSwgc2V0QWdyZWVdID0gdXNlU3RhdGUoZmFsc2UpOyAvLyBwcmVsb2FkXG5cbiAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KCkge1xuICAgIGlmIChzaGFyZSA9PT0gRlJFRSkge1xuICAgICAgc2V0U2hhcmVEYXRhSW50ZXJuYWwodHJ1ZSk7XG4gICAgICBzZXRTaGFyZURhdGFUaGlyZFBhcnR5KHRydWUpO1xuICAgIH0gZWxzZSBpZiAoc2hhcmUgPT09IExJTUlURUQpIHtcbiAgICAgIHNldFNoYXJlRGF0YUludGVybmFsKHRydWUpO1xuICAgICAgc2V0U2hhcmVEYXRhVGhpcmRQYXJ0eShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNoYXJlRGF0YUludGVybmFsKGZhbHNlKTtcbiAgICAgIHNldFNoYXJlRGF0YVRoaXJkUGFydHkoZmFsc2UpO1xuICAgIH1cbiAgICBzZXRXZWxjb21lVmVyc2lvbigpO1xuICAgIGhpc3RvcnkucmVwbGFjZShgL2ApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYWluLS1jb250YWluZWRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29sdW1ucyd9PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oJ1dlbGNvbWUnKX08L2gxPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICBgTEJSWSB0YWtlcyBwcml2YWN5IGFuZCBjaG9pY2Ugc2VyaW91c2x5LiBKdXN0IGEgZmV3IHF1ZXN0aW9ucyBiZWZvcmUgeW91IGVudGVyIHRoZSBsYW5kIG9mIGNvbnRlbnQgZnJlZWRvbS4gYFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW1nIHNyYz17aW1hZ2V9IGNsYXNzTmFtZT1cInByaXZhY3ktaW1nXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxociAvPlxuICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keSBzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICB7X18oJ0NhbiB0aGlzIGFwcCBzZW5kIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgdXNhZ2UgdG8gaW5mb3JtIHB1Ymxpc2hlcnMgYW5kIGltcHJvdmUgdGhlIHNvZnR3YXJlPycpfVxuICAgICAgPC9wPlxuICAgICAgPEZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keVwiPlxuICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgbmFtZT17J3NoYXJlRnJlZWx5J31cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge19fKCdZZXMsIGluY2x1ZGluZyB3aXRoIHRoaXJkLXBhcnR5IGFuYWx5dGljcyBwbGF0Zm9ybXMnKX0gPHNwYW4+8J+YhDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWxwZXI9e19fKGBTZW5kaW5nIGluZm9ybWF0aW9uIHRvIHRoaXJkIHBhcnRpZXMgKGUuZy4gR29vZ2xlIEFuYWx5dGljcyBvciBNaXhwYW5lbCkgYWxsb3dzIHVzIHRvIHVzZSBkZXRhaWxlZFxuICAgICAgICAgICAgICAgIGFuYWx5dGljYWwgcmVwb3J0cyB0byBpbXByb3ZlIGFsbCBhc3BlY3RzIG9mIExCUlkuYCl9XG4gICAgICAgICAgICBjaGVja2VkPXtzaGFyZSA9PT0gRlJFRX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldFNoYXJlKEZSRUUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgbmFtZT17J3NoYXJlV2l0aExCUlknfVxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3NoYXJlID09PSBMSU1JVEVEfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtfXygnWWVzLCBidXQgb25seSB3aXRoIExCUlksIEluYy4nKX0gPHNwYW4+8J+Zgjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWxwZXI9e19fKFxuICAgICAgICAgICAgICBgU2hhcmluZyBpbmZvcm1hdGlvbiB3aXRoIExCUlksIEluYy4gYWxsb3dzIHVzIHRvIHJlcG9ydCB0byBwdWJsaXNoZXJzIGhvdyB0aGVpciBjb250ZW50IGlzIGRvaW5nLCBhc1xuICAgICAgICAgICAgICAgIHdlbGwgYXMgdHJhY2sgYmFzaWMgdXNhZ2UgYW5kIHBlcmZvcm1hbmNlLiBUaGlzIGlzIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGVhcm4gcmV3YXJkcyBmcm9tIExCUlksIEluYy5gXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0U2hhcmUoTElNSVRFRCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBkaXNhYmxlZD17YXV0aGVudGljYXRlZH1cbiAgICAgICAgICAgIG5hbWU9eydzaGFyZU5vdCd9XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgY2hlY2tlZD17c2hhcmUgPT09IE5PTkV9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge19fKCdObycpfSA8c3Bhbj7wn5iiPC9zcGFuPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhlbHBlcj17X18oYE5vIGluZm9ybWF0aW9uIHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byBMQlJZLCBJbmMuIG9yIHRoaXJkLXBhcnRpZXMgYWJvdXQgeW91ciB1c2FnZS4gTm90ZSB0aGF0IGFzXG4gICAgICAgICAgICAgICAgcGVlci10by1wZWVyIHNvZnR3YXJlLCB5b3VyIElQIGFkZHJlc3MgYW5kIHBvdGVudGlhbGx5IG90aGVyIHN5c3RlbSBpbmZvcm1hdGlvbiBjYW4gYmUgc2VudCB0byBvdGhlclxuICAgICAgICAgICAgICAgIHVzZXJzLCB0aG91Z2ggdGhpcyBpbmZvcm1hdGlvbiBpcyBub3Qgc3RvcmVkIHBlcm1hbmVudGx5LmApfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0U2hhcmUoTk9ORSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7YXV0aGVudGljYXRlZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtLWlubGluZSBzZWN0aW9uLS1wYWRkZWRcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscC0taW5saW5lXCI+XG4gICAgICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgc2lnbm91dF9idXR0b246IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnU2lnbiBPdXQnKX0gb25DbGljaz17c2lnbk91dH0gLz4sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFlvdSBhcmUgc2lnbmVkIGludG8gbGJyeS50diB3aGljaCBhdXRvbWF0aWNhbGx5IHNoYXJlcyBkYXRhIHdpdGggTEJSWSBpbmMuICVzaWdub3V0X2J1dHRvbiUuXG4gICAgICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9maWVsZHNldD5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2JvZHlcIj5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgICAgIHRlcm1zOiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cubGJyeS5jb20vdGVybXNvZnNlcnZpY2VcIiBsYWJlbD17X18oJ1Rlcm1zIG9mIFNlcnZpY2UnKX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBEbyB5b3UgYWdyZWUgdG8gdGhlICV0ZXJtcyU/XG4gICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIG5hbWU9eydhZ3JlZUJ1dHRvbid9XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGxhYmVsPXsnWWVzJ31cbiAgICAgICAgICAgICAgY2hlY2tlZD17YWdyZWUgPT09IHRydWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldEFncmVlKGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgbmFtZT17J2Rpc2FncmVlQnV0dG9uJ31cbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgY2hlY2tlZD17YWdyZWUgPT09IGZhbHNlfVxuICAgICAgICAgICAgICBsYWJlbD17X18oJ05vJyl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldEFncmVlKCFlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2FyZF9fYWN0aW9ucyd9PlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIGxhYmVsPXtfXyhgTGV0J3MgZ29gKX0gZGlzYWJsZWQ9eyFzaGFyZSB8fCAhYWdyZWV9IHR5cGU9XCJzdWJtaXRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3NoYXJlID09PSBOT05FICYmIChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgICB7X18oXG4gICAgICAgICAgICAgICdXaGlsZSB3ZSByZXNwZWN0IHRoZSBkZXNpcmUgZm9yIG1heGltYWxseSBwcml2YXRlIHVzYWdlLCBwbGVhc2Ugbm90ZSB0aGF0IGNob29zaW5nIHRoaXMgb3B0aW9uIGh1cnRzIHRoZSBhYmlsaXR5IGZvciBjcmVhdG9ycyB0byB1bmRlcnN0YW5kIGhvdyB0aGVpciBjb250ZW50IGlzIHBlcmZvcm1pbmcuJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICl9XG4gICAgICA8L0Zvcm0+XG4gICAgPC9zZWN0aW9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFByaXZhY3lBZ3JlZW1lbnQpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFJQTtBQUFBO0FBQUE7QUFiQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFHQTtBQUFBO0FBQUE7QUFiQTtBQWdCQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUxBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/privacyAgreement/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishAdditionalOptions/index.js": -/*!*********************************************************!*\ - !*** ../ui/component/publishAdditionalOptions/index.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/publishAdditionalOptions/view.jsx\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar select = function select(state) {\n return _objectSpread({}, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectPublishFormValues\"])(state));\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hBZGRpdGlvbmFsT3B0aW9ucy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcHVibGlzaEFkZGl0aW9uYWxPcHRpb25zL2luZGV4LmpzPzNjMjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzLCBkb1VwZGF0ZVB1Ymxpc2hGb3JtIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgUHVibGlzaFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgLi4uc2VsZWN0UHVibGlzaEZvcm1WYWx1ZXMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishAdditionalOptions/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishAdditionalOptions/license-type.jsx": -/*!*****************************************************************!*\ - !*** ../ui/component/publishAdditionalOptions/license-type.jsx ***! - \*****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var constants_licenses__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/licenses */ \"../ui/constants/licenses.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar LicenseType = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(LicenseType, _React$PureComponent);\n\n function LicenseType() {\n var _this;\n\n _classCallCheck(this, LicenseType);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(LicenseType).call(this));\n _assertThisInitialized(_this).handleLicenseOnChange = _this.handleLicenseOnChange.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(LicenseType, [{\n key: \"handleLicenseOnChange\",\n value: function handleLicenseOnChange(event) {\n var handleLicenseChange = this.props.handleLicenseChange; // $FlowFixMe\n\n var _event$target = event.target,\n options = _event$target.options,\n selectedIndex = _event$target.selectedIndex;\n var selectedOption = options[selectedIndex];\n var licenseType = selectedOption.value;\n var licenseUrl = selectedOption.getAttribute('data-url');\n handleLicenseChange(licenseType, licenseUrl);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n licenseType = _this$props.licenseType,\n otherLicenseDescription = _this$props.otherLicenseDescription,\n licenseUrl = _this$props.licenseUrl,\n handleLicenseDescriptionChange = _this$props.handleLicenseDescriptionChange,\n handleLicenseUrlChange = _this$props.handleLicenseUrlChange;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n name: \"license\",\n label: __('License (Optional)'),\n type: \"select\",\n value: licenseType,\n onChange: this.handleLicenseOnChange\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"NONE\"]\n }, __('None')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"PUBLIC_DOMAIN\"]\n }, __('Public Domain')), constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"CC_LICENSES\"].map(function (_ref) {\n var value = _ref.value,\n url = _ref.url;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n key: value,\n value: value,\n \"data-url\": url\n }, value);\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"COPYRIGHT\"]\n }, __('Copyrighted...')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n value: constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"OTHER\"]\n }, __('Other...')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n disabled: true\n }, __('Legacy Licences')), constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"LEGACY_CC_LICENSES\"].map(function (_ref2) {\n var value = _ref2.value,\n url = _ref2.url;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n key: value,\n value: value,\n \"data-url\": url\n }, value);\n })), licenseType === constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"COPYRIGHT\"] && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('Copyright notice'),\n type: \"text\",\n name: \"copyright-notice\",\n value: otherLicenseDescription,\n onChange: handleLicenseDescriptionChange\n }), licenseType === constants_licenses__WEBPACK_IMPORTED_MODULE_2__[\"OTHER\"] && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"legend\", null, __('Provide a description and link to your license')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"fieldset-group\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('License description'),\n placeholder: __(\"The 'cool' license - TM\"),\n type: \"text\",\n name: \"other-license-description\",\n value: otherLicenseDescription,\n onChange: handleLicenseDescriptionChange\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('License URL'),\n placeholder: __('mywebsite.com/license'),\n type: \"text\",\n name: \"other-license-url\",\n value: licenseUrl,\n onChange: handleLicenseUrlChange\n }))));\n }\n }]);\n\n return LicenseType;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (LicenseType);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hBZGRpdGlvbmFsT3B0aW9ucy9saWNlbnNlLXR5cGUuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoQWRkaXRpb25hbE9wdGlvbnMvbGljZW5zZS10eXBlLmpzeD9hNzZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgQ0NfTElDRU5TRVMsIExFR0FDWV9DQ19MSUNFTlNFUywgQ09QWVJJR0hULCBPVEhFUiwgUFVCTElDX0RPTUFJTiwgTk9ORSB9IGZyb20gJ2NvbnN0YW50cy9saWNlbnNlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxpY2Vuc2VUeXBlOiA/c3RyaW5nLFxuICBsaWNlbnNlVXJsOiA/c3RyaW5nLFxuICBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbjogP3N0cmluZyxcbiAgaGFuZGxlTGljZW5zZUNoYW5nZTogKHN0cmluZywgc3RyaW5nKSA9PiB2b2lkLFxuICBoYW5kbGVMaWNlbnNlRGVzY3JpcHRpb25DaGFuZ2U6IChTeW50aGV0aWNJbnB1dEV2ZW50PCo+KSA9PiB2b2lkLFxuICBoYW5kbGVMaWNlbnNlVXJsQ2hhbmdlOiAoU3ludGhldGljSW5wdXRFdmVudDwqPikgPT4gdm9pZCxcbn07XG5cbmNsYXNzIExpY2Vuc2VUeXBlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgKHRoaXM6IGFueSkuaGFuZGxlTGljZW5zZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVMaWNlbnNlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUxpY2Vuc2VPbkNoYW5nZShldmVudDogU3ludGhldGljSW5wdXRFdmVudDwqPikge1xuICAgIGNvbnN0IHsgaGFuZGxlTGljZW5zZUNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgY29uc3QgeyBvcHRpb25zLCBzZWxlY3RlZEluZGV4IH0gPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW3NlbGVjdGVkSW5kZXhdO1xuICAgIGNvbnN0IGxpY2Vuc2VUeXBlID0gc2VsZWN0ZWRPcHRpb24udmFsdWU7XG4gICAgY29uc3QgbGljZW5zZVVybCA9IHNlbGVjdGVkT3B0aW9uLmdldEF0dHJpYnV0ZSgnZGF0YS11cmwnKTtcblxuICAgIGhhbmRsZUxpY2Vuc2VDaGFuZ2UobGljZW5zZVR5cGUsIGxpY2Vuc2VVcmwpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGxpY2Vuc2VUeXBlLFxuICAgICAgb3RoZXJMaWNlbnNlRGVzY3JpcHRpb24sXG4gICAgICBsaWNlbnNlVXJsLFxuICAgICAgaGFuZGxlTGljZW5zZURlc2NyaXB0aW9uQ2hhbmdlLFxuICAgICAgaGFuZGxlTGljZW5zZVVybENoYW5nZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICBuYW1lPVwibGljZW5zZVwiXG4gICAgICAgICAgbGFiZWw9e19fKCdMaWNlbnNlIChPcHRpb25hbCknKX1cbiAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICB2YWx1ZT17bGljZW5zZVR5cGV9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlTGljZW5zZU9uQ2hhbmdlfVxuICAgICAgICA+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT17Tk9ORX0+e19fKCdOb25lJyl9PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT17UFVCTElDX0RPTUFJTn0+e19fKCdQdWJsaWMgRG9tYWluJyl9PC9vcHRpb24+XG4gICAgICAgICAge0NDX0xJQ0VOU0VTLm1hcCgoeyB2YWx1ZSwgdXJsIH0pID0+IChcbiAgICAgICAgICAgIDxvcHRpb24ga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBkYXRhLXVybD17dXJsfT5cbiAgICAgICAgICAgICAge3ZhbHVlfVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgKSl9XG5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPXtDT1BZUklHSFR9PntfXygnQ29weXJpZ2h0ZWQuLi4nKX08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPXtPVEhFUn0+e19fKCdPdGhlci4uLicpfTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQ+e19fKCdMZWdhY3kgTGljZW5jZXMnKX08L29wdGlvbj5cbiAgICAgICAgICB7TEVHQUNZX0NDX0xJQ0VOU0VTLm1hcCgoeyB2YWx1ZSwgdXJsIH0pID0+IChcbiAgICAgICAgICAgIDxvcHRpb24ga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBkYXRhLXVybD17dXJsfT5cbiAgICAgICAgICAgICAge3ZhbHVlfVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuXG4gICAgICAgIHtsaWNlbnNlVHlwZSA9PT0gQ09QWVJJR0hUICYmIChcbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBsYWJlbD17X18oJ0NvcHlyaWdodCBub3RpY2UnKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG5hbWU9XCJjb3B5cmlnaHQtbm90aWNlXCJcbiAgICAgICAgICAgIHZhbHVlPXtvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVMaWNlbnNlRGVzY3JpcHRpb25DaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7bGljZW5zZVR5cGUgPT09IE9USEVSICYmIChcbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntfXygnUHJvdmlkZSBhIGRlc2NyaXB0aW9uIGFuZCBsaW5rIHRvIHlvdXIgbGljZW5zZScpfTwvbGVnZW5kPlxuICAgICAgICAgICAgPGZpZWxkc2V0LWdyb3VwPlxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKCdMaWNlbnNlIGRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKFwiVGhlICdjb29sJyBsaWNlbnNlIC0gVE1cIil9XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJvdGhlci1saWNlbnNlLWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17b3RoZXJMaWNlbnNlRGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUxpY2Vuc2VEZXNjcmlwdGlvbkNoYW5nZX1cbiAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKCdMaWNlbnNlIFVSTCcpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtfXygnbXl3ZWJzaXRlLmNvbS9saWNlbnNlJyl9XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJvdGhlci1saWNlbnNlLXVybFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2xpY2Vuc2VVcmx9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUxpY2Vuc2VVcmxDaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0LWdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGljZW5zZVR5cGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBSEE7QUFJQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVZBO0FBZUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFwQkE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQWFBOzs7O0FBMUZBO0FBQ0E7QUE0RkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/publishAdditionalOptions/license-type.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishAdditionalOptions/view.jsx": -/*!*********************************************************!*\ - !*** ../ui/component/publishAdditionalOptions/view.jsx ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var _license_type__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./license-type */ \"../ui/component/publishAdditionalOptions/license-type.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction PublishAdvanced(props) {\n var language = props.language,\n name = props.name,\n licenseType = props.licenseType,\n otherLicenseDescription = props.otherLicenseDescription,\n licenseUrl = props.licenseUrl,\n updatePublishForm = props.updatePublishForm;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_2__[\"default\"])('publish-advanced-options', true),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n hideSection = _usePersistedState2[0],\n setHideSection = _usePersistedState2[1];\n\n function toggleHideSection() {\n setHideSection(!hideSection);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, !hideSection && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()({\n 'card--disabled': !name\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n label: __('Language'),\n type: \"select\",\n name: \"content_language\",\n value: language,\n onChange: function onChange(event) {\n return updatePublishForm({\n language: event.target.value\n });\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"en\"\n }, __('English')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"zh\"\n }, __('Chinese')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"fr\"\n }, __('French')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"de\"\n }, __('German')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"jp\"\n }, __('Japanese')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"ru\"\n }, __('Russian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"es\"\n }, __('Spanish')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"id\"\n }, __('Indonesian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"fi\"\n }, __('Finnish')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"kn\"\n }, __('Kannada')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"it\"\n }, __('Italian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"nl\"\n }, __('Dutch')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"tr\"\n }, __('Turkish')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"pl\"\n }, __('Polish')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"ms\"\n }, __('Malay')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"pt\"\n }, __('Portuguese')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"vi\"\n }, __('Vietnamese')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"th\"\n }, __('Thai')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"ar\"\n }, __('Arabic')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"cs\"\n }, __('Czech')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"hr\"\n }, __('Croatian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"km\"\n }, __('Khmer')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"ko\"\n }, __('Korean')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"no\"\n }, __('Norwegian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"ro\"\n }, __('Romanian')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"hi\"\n }, __('Hindi')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"el\"\n }, __('Greek'))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_license_type__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n licenseType: licenseType,\n otherLicenseDescription: otherLicenseDescription,\n licenseUrl: licenseUrl,\n handleLicenseChange: function handleLicenseChange(newLicenseType, newLicenseUrl) {\n return updatePublishForm({\n licenseType: newLicenseType,\n licenseUrl: newLicenseUrl\n });\n },\n handleLicenseDescriptionChange: function handleLicenseDescriptionChange(event) {\n return updatePublishForm({\n otherLicenseDescription: event.target.value\n });\n },\n handleLicenseUrlChange: function handleLicenseUrlChange(event) {\n return updatePublishForm({\n licenseUrl: event.target.value\n });\n }\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n label: hideSection ? __('Additional Options') : __('Hide'),\n button: \"link\",\n onClick: toggleHideSection\n })))\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishAdvanced);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hBZGRpdGlvbmFsT3B0aW9ucy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcHVibGlzaEFkZGl0aW9uYWxPcHRpb25zL3ZpZXcuanN4PzY3ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgTGljZW5zZVR5cGUgZnJvbSAnLi9saWNlbnNlLXR5cGUnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbGFuZ3VhZ2U6ID9zdHJpbmcsXG4gIG5hbWU6ID9zdHJpbmcsXG4gIGxpY2Vuc2VUeXBlOiA/c3RyaW5nLFxuICBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbjogP3N0cmluZyxcbiAgbGljZW5zZVVybDogP3N0cmluZyxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gIHVwZGF0ZVB1Ymxpc2hGb3JtOiAoe30pID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBQdWJsaXNoQWR2YW5jZWQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgbGFuZ3VhZ2UsIG5hbWUsIGxpY2Vuc2VUeXBlLCBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbiwgbGljZW5zZVVybCwgdXBkYXRlUHVibGlzaEZvcm0gfSA9IHByb3BzO1xuICBjb25zdCBbaGlkZVNlY3Rpb24sIHNldEhpZGVTZWN0aW9uXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCdwdWJsaXNoLWFkdmFuY2VkLW9wdGlvbnMnLCB0cnVlKTtcblxuICBmdW5jdGlvbiB0b2dnbGVIaWRlU2VjdGlvbigpIHtcbiAgICBzZXRIaWRlU2VjdGlvbighaGlkZVNlY3Rpb24pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgYWN0aW9ucz17XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7IWhpZGVTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHsgJ2NhcmQtLWRpc2FibGVkJzogIW5hbWUgfSl9PlxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKCdMYW5ndWFnZScpfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJjb250ZW50X2xhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17bGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHVwZGF0ZVB1Ymxpc2hGb3JtKHsgbGFuZ3VhZ2U6IGV2ZW50LnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlblwiPntfXygnRW5nbGlzaCcpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ6aFwiPntfXygnQ2hpbmVzZScpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmclwiPntfXygnRnJlbmNoJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRlXCI+e19fKCdHZXJtYW4nKX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwianBcIj57X18oJ0phcGFuZXNlJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJ1XCI+e19fKCdSdXNzaWFuJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVzXCI+e19fKCdTcGFuaXNoJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImlkXCI+e19fKCdJbmRvbmVzaWFuJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZpXCI+e19fKCdGaW5uaXNoJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImtuXCI+e19fKCdLYW5uYWRhJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIml0XCI+e19fKCdJdGFsaWFuJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5sXCI+e19fKCdEdXRjaCcpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0clwiPntfXygnVHVya2lzaCcpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwbFwiPntfXygnUG9saXNoJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1zXCI+e19fKCdNYWxheScpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwdFwiPntfXygnUG9ydHVndWVzZScpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ2aVwiPntfXygnVmlldG5hbWVzZScpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0aFwiPntfXygnVGhhaScpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhclwiPntfXygnQXJhYmljJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNzXCI+e19fKCdDemVjaCcpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJoclwiPntfXygnQ3JvYXRpYW4nKX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwia21cIj57X18oJ0tobWVyJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImtvXCI+e19fKCdLb3JlYW4nKX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9cIj57X18oJ05vcndlZ2lhbicpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyb1wiPntfXygnUm9tYW5pYW4nKX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaGlcIj57X18oJ0hpbmRpJyl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVsXCI+e19fKCdHcmVlaycpfTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L0Zvcm1GaWVsZD5cblxuICAgICAgICAgICAgICA8TGljZW5zZVR5cGVcbiAgICAgICAgICAgICAgICBsaWNlbnNlVHlwZT17bGljZW5zZVR5cGV9XG4gICAgICAgICAgICAgICAgb3RoZXJMaWNlbnNlRGVzY3JpcHRpb249e290aGVyTGljZW5zZURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgIGxpY2Vuc2VVcmw9e2xpY2Vuc2VVcmx9XG4gICAgICAgICAgICAgICAgaGFuZGxlTGljZW5zZUNoYW5nZT17KG5ld0xpY2Vuc2VUeXBlLCBuZXdMaWNlbnNlVXJsKSA9PlxuICAgICAgICAgICAgICAgICAgdXBkYXRlUHVibGlzaEZvcm0oe1xuICAgICAgICAgICAgICAgICAgICBsaWNlbnNlVHlwZTogbmV3TGljZW5zZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VVcmw6IG5ld0xpY2Vuc2VVcmwsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVMaWNlbnNlRGVzY3JpcHRpb25DaGFuZ2U9e2V2ZW50ID0+XG4gICAgICAgICAgICAgICAgICB1cGRhdGVQdWJsaXNoRm9ybSh7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyTGljZW5zZURlc2NyaXB0aW9uOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVMaWNlbnNlVXJsQ2hhbmdlPXtldmVudCA9PiB1cGRhdGVQdWJsaXNoRm9ybSh7IGxpY2Vuc2VVcmw6IGV2ZW50LnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9e2hpZGVTZWN0aW9uID8gX18oJ0FkZGl0aW9uYWwgT3B0aW9ucycpIDogX18oJ0hpZGUnKX1cbiAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUhpZGVTZWN0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoQWR2YW5jZWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQUxBO0FBVUE7QUFBQTtBQUVBO0FBREE7QUFYQTtBQWVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFmQTtBQW9CQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUE5REE7QUF3RUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishAdditionalOptions/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishFile/index.js": -/*!********************************************!*\ - !*** ../ui/component/publishFile/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/publishFile/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n name: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('name')(state),\n filePath: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('filePath')(state),\n optimize: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('optimize')(state),\n isStillEditing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsStillEditing\"])(state),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state),\n publishing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('publishing')(state),\n ffmpegStatus: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__[\"selectFfmpegStatus\"])(state),\n size: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('fileSize')(state),\n duration: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('fileDur')(state),\n isVid: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('fileVid')(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n clearPublish: function clearPublish() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClearPublish\"])());\n },\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n },\n showToast: function showToast(message) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"])({\n message: message,\n isError: true\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGaWxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRmlsZS9pbmRleC5qcz9kYzdjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBzZWxlY3RCYWxhbmNlLFxuICBzZWxlY3RJc1N0aWxsRWRpdGluZyxcbiAgbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUsXG4gIGRvVXBkYXRlUHVibGlzaEZvcm0sXG4gIGRvVG9hc3QsXG4gIGRvQ2xlYXJQdWJsaXNoLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEZmbXBlZ1N0YXR1cyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgUHVibGlzaFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgbmFtZTogbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUoJ25hbWUnKShzdGF0ZSksXG4gIGZpbGVQYXRoOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnZmlsZVBhdGgnKShzdGF0ZSksXG4gIG9wdGltaXplOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnb3B0aW1pemUnKShzdGF0ZSksXG4gIGlzU3RpbGxFZGl0aW5nOiBzZWxlY3RJc1N0aWxsRWRpdGluZyhzdGF0ZSksXG4gIGJhbGFuY2U6IHNlbGVjdEJhbGFuY2Uoc3RhdGUpLFxuICBwdWJsaXNoaW5nOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgncHVibGlzaGluZycpKHN0YXRlKSxcbiAgZmZtcGVnU3RhdHVzOiBzZWxlY3RGZm1wZWdTdGF0dXMoc3RhdGUpLFxuICBzaXplOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnZmlsZVNpemUnKShzdGF0ZSksXG4gIGR1cmF0aW9uOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnZmlsZUR1cicpKHN0YXRlKSxcbiAgaXNWaWQ6IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlKCdmaWxlVmlkJykoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbGVhclB1Ymxpc2g6ICgpID0+IGRpc3BhdGNoKGRvQ2xlYXJQdWJsaXNoKCkpLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxuICBzaG93VG9hc3Q6IG1lc3NhZ2UgPT4gZGlzcGF0Y2goZG9Ub2FzdCh7IG1lc3NhZ2UsIGlzRXJyb3I6IHRydWUgfSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishFile/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishFile/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/publishFile/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_file_selector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/file-selector */ \"../ui/component/common/file-selector.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var _i18nMessage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\nfunction PublishFile(props) {\n var name = props.name,\n balance = props.balance,\n filePath = props.filePath,\n isStillEditing = props.isStillEditing,\n updatePublishForm = props.updatePublishForm,\n disabled = props.disabled,\n publishing = props.publishing,\n inProgress = props.inProgress,\n clearPublish = props.clearPublish,\n optimize = props.optimize,\n _props$ffmpegStatus = props.ffmpegStatus,\n ffmpegStatus = _props$ffmpegStatus === void 0 ? {} : _props$ffmpegStatus,\n size = props.size,\n duration = props.duration,\n isVid = props.isVid;\n var available = ffmpegStatus.available;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n oversized = _useState2[0],\n setOversized = _useState2[1];\n\n var RECOMMENDED_BITRATE = 6000000;\n var TV_PUBLISH_SIZE_LIMIT = 1073741824;\n var UPLOAD_SIZE_MESSAGE = 'Lbrytv uploads are limited to 1 GB. Download the app for unrestricted publishing.';\n var PROCESSING_MB_PER_SECOND = 0.5;\n var MINUTES_THRESHOLD = 30;\n var HOURS_THRESHOLD = MINUTES_THRESHOLD * 60;\n var sizeInMB = Number(size) / 1000000;\n var secondsToProcess = sizeInMB / PROCESSING_MB_PER_SECOND; // clear warnings\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (!filePath || filePath === '') {\n updateOptimizeState(0, 0, false);\n setOversized(false);\n }\n }, [filePath]);\n var currentFile = '';\n\n if (filePath) {\n if (typeof filePath === 'string') {\n currentFile = filePath;\n } else {\n currentFile = filePath.name;\n }\n }\n\n function updateOptimizeState(duration, size, isvid) {\n updatePublishForm({\n fileDur: duration,\n fileSize: size,\n fileVid: isvid\n });\n }\n\n function getBitrate(size, duration) {\n var s = Number(size);\n var d = Number(duration);\n\n if (s && d) {\n return s * 8 / d;\n } else {\n return 0;\n }\n }\n\n function getTimeForMB(s) {\n if (s < MINUTES_THRESHOLD) {\n return Math.floor(secondsToProcess);\n } else if (s >= MINUTES_THRESHOLD && s < HOURS_THRESHOLD) {\n return Math.floor(secondsToProcess / 60);\n } else {\n return Math.floor(secondsToProcess / 60 / 60);\n }\n }\n\n function getUnitsForMB(s) {\n if (s < MINUTES_THRESHOLD) {\n if (secondsToProcess > 1) return 'seconds';\n return 'second';\n } else if (s >= MINUTES_THRESHOLD && s < HOURS_THRESHOLD) {\n if (Math.floor(secondsToProcess / 60) > 1) return 'minutes';\n return 'minute';\n } else {\n if (Math.floor(secondsToProcess / 3600) > 1) return 'hours';\n return 'hour';\n }\n }\n\n function getMessage() {\n if (oversized) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help--error\"\n }, __(UPLOAD_SIZE_MESSAGE), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Publishing Guide'),\n href: \"https://lbry.com/faq/video-publishing-guide\"\n }));\n }\n\n if (isVid && duration && getBitrate(size, duration) > RECOMMENDED_BITRATE) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help--warning\"\n }, __('Your video has a bitrate over 5 mbps. We suggest transcoding to provide viewers the best experience.'), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Publishing Guide'),\n href: \"https://lbry.com/faq/video-publishing-guide\"\n }));\n }\n\n if (isVid && !duration) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help--warning\"\n }, __('Your video may not be the best format. Use MP4s in H264/AAC format and a friendly bitrate (720p) for more reliable streaming.'), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Publishing Guide'),\n href: \"https://lbry.com/faq/video-publishing-guide\"\n }));\n }\n\n if (!!isStillEditing && name) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __(\"If you don't choose a file, the file from your existing claim %name% will be used\", {\n name: name\n }));\n }\n\n if (!isStillEditing) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('For video content, use MP4s in H264/AAC format and a friendly bitrate (720p) for more reliable streaming. Lbrytv uploads are restricted to 1GB.'), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Publishing Guide'),\n href: \"https://lbry.com/faq/video-publishing-guide\"\n }));\n }\n }\n\n function handleFileChange(file) {\n var showToast = props.showToast;\n window.URL = window.URL || window.webkitURL; // if electron, we'll set filePath to the path string because SDK is handling publishing.\n // if web, we set the filePath (dumb name) to the File() object\n // File.path will be undefined from web due to browser security, so it will default to the File Object.\n\n setOversized(false); // select file, start to select a new one, then cancel\n\n if (!file) {\n updatePublishForm({\n filePath: '',\n name: ''\n });\n return;\n } // if video, extract duration so we can warn about bitrate\n\n\n var contentType = file.type.split('/');\n var isVideo = contentType[0] === 'video';\n var isMp4 = contentType[1] === 'mp4';\n\n if (isVideo) {\n if (isMp4) {\n var video = document.createElement('video');\n video.preload = 'metadata';\n\n video.onloadedmetadata = function () {\n updateOptimizeState(video.duration, file.size, isVideo);\n window.URL.revokeObjectURL(video.src);\n };\n\n video.onerror = function () {\n updateOptimizeState(0, file.size, isVideo);\n };\n\n video.src = window.URL.createObjectURL(file);\n } else {\n updateOptimizeState(0, file.size, isVideo);\n }\n } // we only need to enforce file sizes on 'web'\n\n\n if (typeof file !== 'string') {\n if (file && file.size && Number(file.size) > TV_PUBLISH_SIZE_LIMIT) {\n setOversized(true);\n showToast(__(UPLOAD_SIZE_MESSAGE));\n updatePublishForm({\n filePath: '',\n name: ''\n });\n return;\n }\n }\n\n var publishFormParams = {\n filePath: file.path || file\n }; // Strip off extention and replace invalid characters\n\n var fileName = name || file.name.substr(0, file.name.lastIndexOf('.')) || file.name;\n var INVALID_URI_CHARS = new RegExp(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"regexInvalidURI\"], 'gu');\n var parsedFileName = fileName.replace(INVALID_URI_CHARS, '-');\n\n if (!isStillEditing) {\n publishFormParams.name = parsedFileName;\n }\n\n updatePublishForm(publishFormParams);\n }\n\n var title;\n\n if (publishing) {\n title = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, __('Publishing'), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n type: 'small'\n }));\n } else {\n title = isStillEditing ? __('Edit') : __('Publish');\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"],\n disabled: disabled || balance === 0,\n title: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, title, ' ', inProgress && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"close\",\n label: __('Cancel'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n onClick: clearPublish\n })),\n subtitle: isStillEditing ? __('You are currently editing a claim.') : __('Publish something totally wacky and wild.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_file_selector__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n disabled: disabled,\n currentPath: currentFile,\n onFileChosen: handleFileChange\n }), getMessage())\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishFile);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGaWxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRmlsZS92aWV3LmpzeD9mYmFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZWdleEludmFsaWRVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBGaWxlU2VsZWN0b3IgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9maWxlLXNlbGVjdG9yJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICcuLi9pMThuTWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5hbWU6ID9zdHJpbmcsXG4gIGZpbGVQYXRoOiBzdHJpbmcgfCBXZWJGaWxlLFxuICBpc1N0aWxsRWRpdGluZzogYm9vbGVhbixcbiAgYmFsYW5jZTogbnVtYmVyLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogKHt9KSA9PiB2b2lkLFxuICBkaXNhYmxlZDogYm9vbGVhbixcbiAgcHVibGlzaGluZzogYm9vbGVhbixcbiAgc2hvd1RvYXN0OiBzdHJpbmcgPT4gdm9pZCxcbiAgaW5Qcm9ncmVzczogYm9vbGVhbixcbiAgY2xlYXJQdWJsaXNoOiAoKSA9PiB2b2lkLFxuICBmZm1wZWdTdGF0dXM6IGFueSxcbiAgb3B0aW1pemU6IGJvb2xlYW4sXG4gIHNpemU6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgaXNWaWQ6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBQdWJsaXNoRmlsZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgYmFsYW5jZSxcbiAgICBmaWxlUGF0aCxcbiAgICBpc1N0aWxsRWRpdGluZyxcbiAgICB1cGRhdGVQdWJsaXNoRm9ybSxcbiAgICBkaXNhYmxlZCxcbiAgICBwdWJsaXNoaW5nLFxuICAgIGluUHJvZ3Jlc3MsXG4gICAgY2xlYXJQdWJsaXNoLFxuICAgIG9wdGltaXplLFxuICAgIGZmbXBlZ1N0YXR1cyA9IHt9LFxuICAgIHNpemUsXG4gICAgZHVyYXRpb24sXG4gICAgaXNWaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7IGF2YWlsYWJsZSB9ID0gZmZtcGVnU3RhdHVzO1xuICBjb25zdCBbb3ZlcnNpemVkLCBzZXRPdmVyc2l6ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBSRUNPTU1FTkRFRF9CSVRSQVRFID0gNjAwMDAwMDtcbiAgY29uc3QgVFZfUFVCTElTSF9TSVpFX0xJTUlUOiBudW1iZXIgPSAxMDczNzQxODI0O1xuICBjb25zdCBVUExPQURfU0laRV9NRVNTQUdFID0gJ0xicnl0diB1cGxvYWRzIGFyZSBsaW1pdGVkIHRvIDEgR0IuIERvd25sb2FkIHRoZSBhcHAgZm9yIHVucmVzdHJpY3RlZCBwdWJsaXNoaW5nLic7XG4gIGNvbnN0IFBST0NFU1NJTkdfTUJfUEVSX1NFQ09ORCA9IDAuNTtcbiAgY29uc3QgTUlOVVRFU19USFJFU0hPTEQgPSAzMDtcbiAgY29uc3QgSE9VUlNfVEhSRVNIT0xEID0gTUlOVVRFU19USFJFU0hPTEQgKiA2MDtcblxuICBjb25zdCBzaXplSW5NQiA9IE51bWJlcihzaXplKSAvIDEwMDAwMDA7XG4gIGNvbnN0IHNlY29uZHNUb1Byb2Nlc3MgPSBzaXplSW5NQiAvIFBST0NFU1NJTkdfTUJfUEVSX1NFQ09ORDtcblxuICAvLyBjbGVhciB3YXJuaW5nc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZmlsZVBhdGggfHwgZmlsZVBhdGggPT09ICcnKSB7XG4gICAgICB1cGRhdGVPcHRpbWl6ZVN0YXRlKDAsIDAsIGZhbHNlKTtcbiAgICAgIHNldE92ZXJzaXplZChmYWxzZSk7XG4gICAgfVxuICB9LCBbZmlsZVBhdGhdKTtcblxuICBsZXQgY3VycmVudEZpbGUgPSAnJztcbiAgaWYgKGZpbGVQYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBmaWxlUGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN1cnJlbnRGaWxlID0gZmlsZVBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRGaWxlID0gZmlsZVBhdGgubmFtZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVPcHRpbWl6ZVN0YXRlKGR1cmF0aW9uLCBzaXplLCBpc3ZpZCkge1xuICAgIHVwZGF0ZVB1Ymxpc2hGb3JtKHsgZmlsZUR1cjogZHVyYXRpb24sIGZpbGVTaXplOiBzaXplLCBmaWxlVmlkOiBpc3ZpZCB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJpdHJhdGUoc2l6ZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBzID0gTnVtYmVyKHNpemUpO1xuICAgIGNvbnN0IGQgPSBOdW1iZXIoZHVyYXRpb24pO1xuICAgIGlmIChzICYmIGQpIHtcbiAgICAgIHJldHVybiAocyAqIDgpIC8gZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGltZUZvck1CKHMpIHtcbiAgICBpZiAocyA8IE1JTlVURVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzVG9Qcm9jZXNzKTtcbiAgICB9IGVsc2UgaWYgKHMgPj0gTUlOVVRFU19USFJFU0hPTEQgJiYgcyA8IEhPVVJTX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Vjb25kc1RvUHJvY2VzcyAvIDYwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Vjb25kc1RvUHJvY2VzcyAvIDYwIC8gNjApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVuaXRzRm9yTUIocykge1xuICAgIGlmIChzIDwgTUlOVVRFU19USFJFU0hPTEQpIHtcbiAgICAgIGlmIChzZWNvbmRzVG9Qcm9jZXNzID4gMSkgcmV0dXJuICdzZWNvbmRzJztcbiAgICAgIHJldHVybiAnc2Vjb25kJztcbiAgICB9IGVsc2UgaWYgKHMgPj0gTUlOVVRFU19USFJFU0hPTEQgJiYgcyA8IEhPVVJTX1RIUkVTSE9MRCkge1xuICAgICAgaWYgKE1hdGguZmxvb3Ioc2Vjb25kc1RvUHJvY2VzcyAvIDYwKSA+IDEpIHJldHVybiAnbWludXRlcyc7XG4gICAgICByZXR1cm4gJ21pbnV0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChNYXRoLmZsb29yKHNlY29uZHNUb1Byb2Nlc3MgLyAzNjAwKSA+IDEpIHJldHVybiAnaG91cnMnO1xuICAgICAgcmV0dXJuICdob3VyJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlKCkge1xuICAgIGlmIChvdmVyc2l6ZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHAtLWVycm9yXCI+XG4gICAgICAgICAge19fKFVQTE9BRF9TSVpFX01FU1NBR0UpfXsnICd9XG4gICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdQdWJsaXNoaW5nIEd1aWRlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS92aWRlby1wdWJsaXNoaW5nLWd1aWRlXCIgLz5cbiAgICAgICAgPC9wPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzVmlkICYmIGR1cmF0aW9uICYmIGdldEJpdHJhdGUoc2l6ZSwgZHVyYXRpb24pID4gUkVDT01NRU5ERURfQklUUkFURSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscC0td2FybmluZ1wiPlxuICAgICAgICAgIHtfXygnWW91ciB2aWRlbyBoYXMgYSBiaXRyYXRlIG92ZXIgNSBtYnBzLiBXZSBzdWdnZXN0IHRyYW5zY29kaW5nIHRvIHByb3ZpZGUgdmlld2VycyB0aGUgYmVzdCBleHBlcmllbmNlLicpfXsnICd9XG4gICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdQdWJsaXNoaW5nIEd1aWRlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS92aWRlby1wdWJsaXNoaW5nLWd1aWRlXCIgLz5cbiAgICAgICAgPC9wPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNWaWQgJiYgIWR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwLS13YXJuaW5nXCI+XG4gICAgICAgICAge19fKFxuICAgICAgICAgICAgJ1lvdXIgdmlkZW8gbWF5IG5vdCBiZSB0aGUgYmVzdCBmb3JtYXQuIFVzZSBNUDRzIGluIEgyNjQvQUFDIGZvcm1hdCBhbmQgYSBmcmllbmRseSBiaXRyYXRlICg3MjBwKSBmb3IgbW9yZSByZWxpYWJsZSBzdHJlYW1pbmcuJ1xuICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ1B1Ymxpc2hpbmcgR3VpZGUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3ZpZGVvLXB1Ymxpc2hpbmctZ3VpZGVcIiAvPlxuICAgICAgICA8L3A+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghIWlzU3RpbGxFZGl0aW5nICYmIG5hbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICB7X18oXCJJZiB5b3UgZG9uJ3QgY2hvb3NlIGEgZmlsZSwgdGhlIGZpbGUgZnJvbSB5b3VyIGV4aXN0aW5nIGNsYWltICVuYW1lJSB3aWxsIGJlIHVzZWRcIiwgeyBuYW1lOiBuYW1lIH0pfVxuICAgICAgICA8L3A+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWlzU3RpbGxFZGl0aW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAge19fKFxuICAgICAgICAgICAgJ0ZvciB2aWRlbyBjb250ZW50LCB1c2UgTVA0cyBpbiBIMjY0L0FBQyBmb3JtYXQgYW5kIGEgZnJpZW5kbHkgYml0cmF0ZSAoNzIwcCkgZm9yIG1vcmUgcmVsaWFibGUgc3RyZWFtaW5nLiBMYnJ5dHYgdXBsb2FkcyBhcmUgcmVzdHJpY3RlZCB0byAxR0IuJ1xuICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ1B1Ymxpc2hpbmcgR3VpZGUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3ZpZGVvLXB1Ymxpc2hpbmctZ3VpZGVcIiAvPlxuICAgICAgICA8L3A+XG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmlsZUNoYW5nZShmaWxlOiBXZWJGaWxlKSB7XG4gICAgY29uc3QgeyBzaG93VG9hc3QgfSA9IHByb3BzO1xuICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgLy8gaWYgZWxlY3Ryb24sIHdlJ2xsIHNldCBmaWxlUGF0aCB0byB0aGUgcGF0aCBzdHJpbmcgYmVjYXVzZSBTREsgaXMgaGFuZGxpbmcgcHVibGlzaGluZy5cbiAgICAvLyBpZiB3ZWIsIHdlIHNldCB0aGUgZmlsZVBhdGggKGR1bWIgbmFtZSkgdG8gdGhlIEZpbGUoKSBvYmplY3RcbiAgICAvLyBGaWxlLnBhdGggd2lsbCBiZSB1bmRlZmluZWQgZnJvbSB3ZWIgZHVlIHRvIGJyb3dzZXIgc2VjdXJpdHksIHNvIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgRmlsZSBPYmplY3QuXG4gICAgc2V0T3ZlcnNpemVkKGZhbHNlKTtcblxuICAgIC8vIHNlbGVjdCBmaWxlLCBzdGFydCB0byBzZWxlY3QgYSBuZXcgb25lLCB0aGVuIGNhbmNlbFxuICAgIGlmICghZmlsZSkge1xuICAgICAgdXBkYXRlUHVibGlzaEZvcm0oeyBmaWxlUGF0aDogJycsIG5hbWU6ICcnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB2aWRlbywgZXh0cmFjdCBkdXJhdGlvbiBzbyB3ZSBjYW4gd2FybiBhYm91dCBiaXRyYXRlXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBmaWxlLnR5cGUuc3BsaXQoJy8nKTtcbiAgICBjb25zdCBpc1ZpZGVvID0gY29udGVudFR5cGVbMF0gPT09ICd2aWRlbyc7XG4gICAgY29uc3QgaXNNcDQgPSBjb250ZW50VHlwZVsxXSA9PT0gJ21wNCc7XG4gICAgaWYgKGlzVmlkZW8pIHtcbiAgICAgIGlmIChpc01wNCkge1xuICAgICAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgIHZpZGVvLnByZWxvYWQgPSAnbWV0YWRhdGEnO1xuICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdXBkYXRlT3B0aW1pemVTdGF0ZSh2aWRlby5kdXJhdGlvbiwgZmlsZS5zaXplLCBpc1ZpZGVvKTtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh2aWRlby5zcmMpO1xuICAgICAgICB9O1xuICAgICAgICB2aWRlby5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdXBkYXRlT3B0aW1pemVTdGF0ZSgwLCBmaWxlLnNpemUsIGlzVmlkZW8pO1xuICAgICAgICB9O1xuICAgICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZU9wdGltaXplU3RhdGUoMCwgZmlsZS5zaXplLCBpc1ZpZGVvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBvbmx5IG5lZWQgdG8gZW5mb3JjZSBmaWxlIHNpemVzIG9uICd3ZWInXG4gICAgaWYgKHR5cGVvZiBmaWxlICE9PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGZpbGUgJiYgZmlsZS5zaXplICYmIE51bWJlcihmaWxlLnNpemUpID4gVFZfUFVCTElTSF9TSVpFX0xJTUlUKSB7XG4gICAgICAgIHNldE92ZXJzaXplZCh0cnVlKTtcbiAgICAgICAgc2hvd1RvYXN0KF9fKFVQTE9BRF9TSVpFX01FU1NBR0UpKTtcbiAgICAgICAgdXBkYXRlUHVibGlzaEZvcm0oeyBmaWxlUGF0aDogJycsIG5hbWU6ICcnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGlzaEZvcm1QYXJhbXM6IHsgZmlsZVBhdGg6IHN0cmluZyB8IFdlYkZpbGUsIG5hbWU/OiBzdHJpbmcsIG9wdGltaXplPzogYm9vbGVhbiB9ID0ge1xuICAgICAgZmlsZVBhdGg6IGZpbGUucGF0aCB8fCBmaWxlLFxuICAgIH07XG4gICAgLy8gU3RyaXAgb2ZmIGV4dGVudGlvbiBhbmQgcmVwbGFjZSBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICBsZXQgZmlsZU5hbWUgPSBuYW1lIHx8IGZpbGUubmFtZS5zdWJzdHIoMCwgZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJykpIHx8IGZpbGUubmFtZTtcbiAgICBsZXQgSU5WQUxJRF9VUklfQ0hBUlMgPSBuZXcgUmVnRXhwKHJlZ2V4SW52YWxpZFVSSSwgJ2d1Jyk7XG4gICAgbGV0IHBhcnNlZEZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZShJTlZBTElEX1VSSV9DSEFSUywgJy0nKTtcbiAgICBpZiAoIWlzU3RpbGxFZGl0aW5nKSB7XG4gICAgICBwdWJsaXNoRm9ybVBhcmFtcy5uYW1lID0gcGFyc2VkRmlsZU5hbWU7XG4gICAgfVxuICAgIHVwZGF0ZVB1Ymxpc2hGb3JtKHB1Ymxpc2hGb3JtUGFyYW1zKTtcbiAgfVxuXG4gIGxldCB0aXRsZTtcbiAgaWYgKHB1Ymxpc2hpbmcpIHtcbiAgICB0aXRsZSA9IChcbiAgICAgIDxzcGFuPlxuICAgICAgICB7X18oJ1B1Ymxpc2hpbmcnKX1cbiAgICAgICAgPFNwaW5uZXIgdHlwZT17J3NtYWxsJ30gLz5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRpdGxlID0gaXNTdGlsbEVkaXRpbmcgPyBfXygnRWRpdCcpIDogX18oJ1B1Ymxpc2gnKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENhcmRcbiAgICAgIGljb249e0lDT05TLlBVQkxJU0h9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgYmFsYW5jZSA9PT0gMH1cbiAgICAgIHRpdGxlPXtcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIHt0aXRsZX17JyAnfVxuICAgICAgICAgIHtpblByb2dyZXNzICYmIDxCdXR0b24gYnV0dG9uPVwiY2xvc2VcIiBsYWJlbD17X18oJ0NhbmNlbCcpfSBpY29uPXtJQ09OUy5SRU1PVkV9IG9uQ2xpY2s9e2NsZWFyUHVibGlzaH0gLz59XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgICBzdWJ0aXRsZT17XG4gICAgICAgIGlzU3RpbGxFZGl0aW5nID8gX18oJ1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjbGFpbS4nKSA6IF9fKCdQdWJsaXNoIHNvbWV0aGluZyB0b3RhbGx5IHdhY2t5IGFuZCB3aWxkLicpXG4gICAgICB9XG4gICAgICBhY3Rpb25zPXtcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxGaWxlU2VsZWN0b3IgZGlzYWJsZWQ9e2Rpc2FibGVkfSBjdXJyZW50UGF0aD17Y3VycmVudEZpbGV9IG9uRmlsZUNob3Nlbj17aGFuZGxlRmlsZUNoYW5nZX0gLz5cbiAgICAgICAgICB7Z2V0TWVzc2FnZSgpfVxuICAgICAgICAgIHt9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaEZpbGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVhBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBVkE7QUFZQTtBQUNBO0FBL0JBO0FBQ0E7QUFDQTtBQWlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQWRBO0FBcUJBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/publishFile/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishForm/index.js": -/*!********************************************!*\ - !*** ../ui/component/publishForm/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/publish */ \"../ui/redux/actions/publish.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/publishForm/view.jsx\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar select = function select(state) {\n return _objectSpread({}, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectPublishFormValues\"])(state), {\n // The winning claim for a short lbry uri\n amountNeededForTakeover: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTakeOverAmount\"])(state),\n // My previously published claims under this short lbry uri\n myClaimForUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimForUri\"])(state),\n // If I clicked the \"edit\" button, have I changed the uri?\n // Need this to make it easier to find the source on previously published content\n isStillEditing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsStillEditing\"])(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsResolvingPublishUris\"])(state),\n totalRewardValue: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUnclaimedRewardValue\"])(state)\n });\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n },\n clearPublish: function clearPublish() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClearPublish\"])());\n },\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n },\n publish: function publish(filePath) {\n return dispatch(Object(redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__[\"doPublishDesktop\"])(filePath));\n },\n prepareEdit: function prepareEdit(claim, uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doPrepareEdit\"])(claim, uri));\n },\n resetThumbnailStatus: function resetThumbnailStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResetThumbnailStatus\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGb3JtL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRm9ybS9pbmRleC5qcz80YzIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBkb1Jlc29sdmVVcmksXG4gIHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzLFxuICBzZWxlY3RJc1N0aWxsRWRpdGluZyxcbiAgc2VsZWN0TXlDbGFpbUZvclVyaSxcbiAgc2VsZWN0SXNSZXNvbHZpbmdQdWJsaXNoVXJpcyxcbiAgc2VsZWN0VGFrZU92ZXJBbW91bnQsXG4gIGRvUmVzZXRUaHVtYm5haWxTdGF0dXMsXG4gIGRvQ2xlYXJQdWJsaXNoLFxuICBkb1VwZGF0ZVB1Ymxpc2hGb3JtLFxuICBkb1ByZXBhcmVFZGl0LFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGRvUHVibGlzaERlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IHsgc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWUgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBQdWJsaXNoUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICAuLi5zZWxlY3RQdWJsaXNoRm9ybVZhbHVlcyhzdGF0ZSksXG4gIC8vIFRoZSB3aW5uaW5nIGNsYWltIGZvciBhIHNob3J0IGxicnkgdXJpXG4gIGFtb3VudE5lZWRlZEZvclRha2VvdmVyOiBzZWxlY3RUYWtlT3ZlckFtb3VudChzdGF0ZSksXG4gIC8vIE15IHByZXZpb3VzbHkgcHVibGlzaGVkIGNsYWltcyB1bmRlciB0aGlzIHNob3J0IGxicnkgdXJpXG4gIG15Q2xhaW1Gb3JVcmk6IHNlbGVjdE15Q2xhaW1Gb3JVcmkoc3RhdGUpLFxuICAvLyBJZiBJIGNsaWNrZWQgdGhlIFwiZWRpdFwiIGJ1dHRvbiwgaGF2ZSBJIGNoYW5nZWQgdGhlIHVyaT9cbiAgLy8gTmVlZCB0aGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgdGhlIHNvdXJjZSBvbiBwcmV2aW91c2x5IHB1Ymxpc2hlZCBjb250ZW50XG4gIGlzU3RpbGxFZGl0aW5nOiBzZWxlY3RJc1N0aWxsRWRpdGluZyhzdGF0ZSksXG4gIGlzUmVzb2x2aW5nVXJpOiBzZWxlY3RJc1Jlc29sdmluZ1B1Ymxpc2hVcmlzKHN0YXRlKSxcbiAgdG90YWxSZXdhcmRWYWx1ZTogc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWUoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxuICBjbGVhclB1Ymxpc2g6ICgpID0+IGRpc3BhdGNoKGRvQ2xlYXJQdWJsaXNoKCkpLFxuICByZXNvbHZlVXJpOiB1cmkgPT4gZGlzcGF0Y2goZG9SZXNvbHZlVXJpKHVyaSkpLFxuICBwdWJsaXNoOiBmaWxlUGF0aCA9PiBkaXNwYXRjaChkb1B1Ymxpc2hEZXNrdG9wKGZpbGVQYXRoKSksXG4gIHByZXBhcmVFZGl0OiAoY2xhaW0sIHVyaSkgPT4gZGlzcGF0Y2goZG9QcmVwYXJlRWRpdChjbGFpbSwgdXJpKSksXG4gIHJlc2V0VGh1bWJuYWlsU3RhdHVzOiAoKSA9PiBkaXNwYXRjaChkb1Jlc2V0VGh1bWJuYWlsU3RhdHVzKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUhBO0FBSUE7QUFBQTtBQUpBO0FBS0E7QUFBQTtBQUxBO0FBTUE7QUFBQTtBQUFBO0FBTkE7QUFBQTtBQUNBO0FBUUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishForm/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishForm/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/publishForm/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_selectChannel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/selectChannel */ \"../ui/component/selectChannel/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_tagsSelect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/tagsSelect */ \"../ui/component/tagsSelect/index.js\");\n/* harmony import */ var component_publishText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/publishText */ \"../ui/component/publishText/index.js\");\n/* harmony import */ var component_publishPrice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/publishPrice */ \"../ui/component/publishPrice/index.js\");\n/* harmony import */ var component_publishFile__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/publishFile */ \"../ui/component/publishFile/index.js\");\n/* harmony import */ var component_publishName__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/publishName */ \"../ui/component/publishName/index.js\");\n/* harmony import */ var component_publishAdditionalOptions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/publishAdditionalOptions */ \"../ui/component/publishAdditionalOptions/index.js\");\n/* harmony import */ var component_publishFormErrors__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/publishFormErrors */ \"../ui/component/publishFormErrors/index.js\");\n/* harmony import */ var component_selectThumbnail__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/selectThumbnail */ \"../ui/component/selectThumbnail/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n/*\n On submit, this component calls publish, which dispatches doPublishDesktop.\n doPublishDesktop calls lbry-redux Lbry publish method using lbry-redux publish state as params.\n Publish simply instructs the SDK to find the file path on disk and publish it with the provided metadata.\n On web, the Lbry publish method call is overridden in platform/web/api-setup, using a function in platform/web/publish.\n File upload is carried out in the background by that function.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction PublishForm(props) {\n var thumbnail = props.thumbnail,\n name = props.name,\n channel = props.channel,\n editingURI = props.editingURI,\n resolveUri = props.resolveUri,\n title = props.title,\n bid = props.bid,\n bidError = props.bidError,\n uploadThumbnailStatus = props.uploadThumbnailStatus,\n resetThumbnailStatus = props.resetThumbnailStatus,\n updatePublishForm = props.updatePublishForm,\n filePath = props.filePath,\n publishing = props.publishing,\n clearPublish = props.clearPublish,\n isStillEditing = props.isStillEditing,\n tags = props.tags,\n publish = props.publish,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled;\n var TAGS_LIMIT = 5;\n var formDisabled = !filePath && !editingURI || publishing;\n var isInProgress = filePath || editingURI || name || title; // If they are editing, they don't need a new file chosen\n\n var formValidLessFile = name && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"isNameValid\"])(name, false) && title && bid && !bidError && !(uploadThumbnailStatus === lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"THUMBNAIL_STATUSES\"].IN_PROGRESS);\n var formValid = editingURI && !filePath ? isStillEditing && formValidLessFile : formValidLessFile;\n var submitLabel;\n\n if (isStillEditing) {\n submitLabel = !publishing ? __('Edit') : __('Editing...');\n } else {\n submitLabel = !publishing ? __('Publish') : __('Publishing...');\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (!thumbnail) {\n resetThumbnailStatus();\n }\n }, [thumbnail, resetThumbnailStatus]); // Every time the channel or name changes, resolve the uris to find winning bid amounts\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // If they are midway through a channel creation, treat it as anonymous until it completes\n var channelName = channel === constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"CHANNEL_ANONYMOUS\"] || channel === constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"CHANNEL_NEW\"] ? '' : channel; // We are only going to store the full uri, but we need to resolve the uri with and without the channel name\n\n var uri;\n\n try {\n uri = name && Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n streamName: name,\n channelName: channelName\n });\n } catch (e) {}\n\n if (channelName && name) {\n // resolve without the channel name so we know the winning bid for it\n try {\n var uriLessChannel = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n streamName: name\n });\n resolveUri(uriLessChannel);\n } catch (e) {}\n }\n\n var isValid = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"isURIValid\"])(uri);\n\n if (uri && isValid) {\n resolveUri(uri);\n updatePublishForm({\n uri: uri\n });\n }\n }, [name, channel, resolveUri, updatePublishForm]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card-stack\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishFile__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n disabled: disabled || publishing,\n inProgress: isInProgress\n }), !publishing && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_5___default()({\n 'card--disabled': formDisabled\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishText__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n disabled: formDisabled\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_selectThumbnail__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null)\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tagsSelect__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n suggestMature: true,\n disableAutoFocus: true,\n hideHeader: true,\n label: __('Selected Tags'),\n empty: __('No tags added'),\n limitSelect: TAGS_LIMIT,\n help: __('Add tags that are relevant to your content. If mature content, ensure it is tagged mature. Tag abuse and missing mature tags will not be tolerated.'),\n placeholder: __('gaming, crypto'),\n onSelect: function onSelect(newTags) {\n var validatedTags = [];\n newTags.forEach(function (newTag) {\n if (!tags.some(function (tag) {\n return tag.name === newTag.name;\n })) {\n validatedTags.push(newTag);\n }\n });\n updatePublishForm({\n tags: [].concat(_toConsumableArray(tags), validatedTags)\n });\n },\n onRemove: function onRemove(clickedTag) {\n var newTags = tags.slice().filter(function (tag) {\n return tag.name !== clickedTag.name;\n });\n updatePublishForm({\n tags: newTags\n });\n },\n tagsChosen: tags\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_selectChannel__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n channel: channel,\n onChannelChange: function onChannelChange(channel) {\n return updatePublishForm({\n channel: channel\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('This is a username or handle that your content can be found under.'), ' ', __('Ex. @Marvel, @TheBeatles, @BooksByJoe')))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishName__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: formDisabled\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishPrice__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n disabled: formDisabled\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishAdditionalOptions__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n disabled: formDisabled\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", null, !formDisabled && !formValid && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishFormErrors__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n onClick: function onClick() {\n return publish(filePath);\n },\n label: submitLabel,\n disabled: formDisabled || !formValid || uploadThumbnailStatus === lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"THUMBNAIL_STATUSES\"].IN_PROGRESS\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n onClick: clearPublish,\n label: __('Cancel')\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('By continuing, you accept the'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n href: \"https://www.lbry.com/termsofservice\",\n label: __('LBRY Terms of Service')\n }), \".\")));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishForm);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGb3JtL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRm9ybS92aWV3LmpzeD9iNjE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbi8qXG4gIE9uIHN1Ym1pdCwgdGhpcyBjb21wb25lbnQgY2FsbHMgcHVibGlzaCwgd2hpY2ggZGlzcGF0Y2hlcyBkb1B1Ymxpc2hEZXNrdG9wLlxuICBkb1B1Ymxpc2hEZXNrdG9wIGNhbGxzIGxicnktcmVkdXggTGJyeSBwdWJsaXNoIG1ldGhvZCB1c2luZyBsYnJ5LXJlZHV4IHB1Ymxpc2ggc3RhdGUgYXMgcGFyYW1zLlxuICBQdWJsaXNoIHNpbXBseSBpbnN0cnVjdHMgdGhlIFNESyB0byBmaW5kIHRoZSBmaWxlIHBhdGggb24gZGlzayBhbmQgcHVibGlzaCBpdCB3aXRoIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgT24gd2ViLCB0aGUgTGJyeSBwdWJsaXNoIG1ldGhvZCBjYWxsIGlzIG92ZXJyaWRkZW4gaW4gcGxhdGZvcm0vd2ViL2FwaS1zZXR1cCwgdXNpbmcgYSBmdW5jdGlvbiBpbiBwbGF0Zm9ybS93ZWIvcHVibGlzaC5cbiAgRmlsZSB1cGxvYWQgaXMgY2FycmllZCBvdXQgaW4gdGhlIGJhY2tncm91bmQgYnkgdGhhdCBmdW5jdGlvbi5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENIQU5ORUxfTkVXLCBDSEFOTkVMX0FOT05ZTU9VUyB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQgeyBidWlsZFVSSSwgaXNVUklWYWxpZCwgaXNOYW1lVmFsaWQsIFRIVU1CTkFJTF9TVEFUVVNFUyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBTZWxlY3RDaGFubmVsIGZyb20gJ2NvbXBvbmVudC9zZWxlY3RDaGFubmVsJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFRhZ3NTZWxlY3QgZnJvbSAnY29tcG9uZW50L3RhZ3NTZWxlY3QnO1xuaW1wb3J0IFB1Ymxpc2hUZXh0IGZyb20gJ2NvbXBvbmVudC9wdWJsaXNoVGV4dCc7XG5pbXBvcnQgUHVibGlzaFByaWNlIGZyb20gJ2NvbXBvbmVudC9wdWJsaXNoUHJpY2UnO1xuaW1wb3J0IFB1Ymxpc2hGaWxlIGZyb20gJ2NvbXBvbmVudC9wdWJsaXNoRmlsZSc7XG5pbXBvcnQgUHVibGlzaE5hbWUgZnJvbSAnY29tcG9uZW50L3B1Ymxpc2hOYW1lJztcbmltcG9ydCBQdWJsaXNoQWRkaXRpb25hbE9wdGlvbnMgZnJvbSAnY29tcG9uZW50L3B1Ymxpc2hBZGRpdGlvbmFsT3B0aW9ucyc7XG5pbXBvcnQgUHVibGlzaEZvcm1FcnJvcnMgZnJvbSAnY29tcG9uZW50L3B1Ymxpc2hGb3JtRXJyb3JzJztcbmltcG9ydCBTZWxlY3RUaHVtYm5haWwgZnJvbSAnY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbCc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICBkaXNhYmxlZDogYm9vbGVhbixcbiAgdGFnczogQXJyYXk8VGFnPixcbiAgcHVibGlzaDogKD9zdHJpbmcpID0+IHZvaWQsXG4gIGZpbGVQYXRoOiA/c3RyaW5nLFxuICBiaWQ6ID9udW1iZXIsXG4gIGJpZEVycm9yOiA/c3RyaW5nLFxuICBlZGl0aW5nVVJJOiA/c3RyaW5nLFxuICB0aXRsZTogP3N0cmluZyxcbiAgdGh1bWJuYWlsOiA/c3RyaW5nLFxuICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6ID9zdHJpbmcsXG4gIHRodW1ibmFpbFBhdGg6ID9zdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiA/c3RyaW5nLFxuICBsYW5ndWFnZTogc3RyaW5nLFxuICBuc2Z3OiBib29sZWFuLFxuICBjb250ZW50SXNGcmVlOiBib29sZWFuLFxuICBmZWU6IHtcbiAgICBhbW91bnQ6IHN0cmluZyxcbiAgICBjdXJyZW5jeTogc3RyaW5nLFxuICB9LFxuICBjaGFubmVsOiBzdHJpbmcsXG4gIG5hbWU6ID9zdHJpbmcsXG4gIG5hbWVFcnJvcjogP3N0cmluZyxcbiAgaXNSZXNvbHZpbmdVcmk6IGJvb2xlYW4sXG4gIHdpbm5pbmdCaWRGb3JDbGFpbVVyaTogbnVtYmVyLFxuICBteUNsYWltRm9yVXJpOiA/U3RyZWFtQ2xhaW0sXG4gIGxpY2Vuc2VUeXBlOiBzdHJpbmcsXG4gIG90aGVyTGljZW5zZURlc2NyaXB0aW9uOiA/c3RyaW5nLFxuICBsaWNlbnNlVXJsOiA/c3RyaW5nLFxuICB1cmk6ID9zdHJpbmcsXG4gIHB1Ymxpc2hpbmc6IGJvb2xlYW4sXG4gIGJhbGFuY2U6IG51bWJlcixcbiAgaXNTdGlsbEVkaXRpbmc6IGJvb2xlYW4sXG4gIGNsZWFyUHVibGlzaDogKCkgPT4gdm9pZCxcbiAgcmVzb2x2ZVVyaTogc3RyaW5nID0+IHZvaWQsXG4gIHNjcm9sbFRvVG9wOiAoKSA9PiB2b2lkLFxuICBwcmVwYXJlRWRpdDogKGNsYWltOiBhbnksIHVyaTogc3RyaW5nKSA9PiB2b2lkLFxuICByZXNldFRodW1ibmFpbFN0YXR1czogKCkgPT4gdm9pZCxcbiAgYW1vdW50TmVlZGVkRm9yVGFrZW92ZXI6ID9udW1iZXIsXG4gIC8vIEFkZCBiYWNrIHR5cGVcbiAgdXBkYXRlUHVibGlzaEZvcm06IGFueSA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gUHVibGlzaEZvcm0ocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB0aHVtYm5haWwsXG4gICAgbmFtZSxcbiAgICBjaGFubmVsLFxuICAgIGVkaXRpbmdVUkksXG4gICAgcmVzb2x2ZVVyaSxcbiAgICB0aXRsZSxcbiAgICBiaWQsXG4gICAgYmlkRXJyb3IsXG4gICAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzLFxuICAgIHJlc2V0VGh1bWJuYWlsU3RhdHVzLFxuICAgIHVwZGF0ZVB1Ymxpc2hGb3JtLFxuICAgIGZpbGVQYXRoLFxuICAgIHB1Ymxpc2hpbmcsXG4gICAgY2xlYXJQdWJsaXNoLFxuICAgIGlzU3RpbGxFZGl0aW5nLFxuICAgIHRhZ3MsXG4gICAgcHVibGlzaCxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFRBR1NfTElNSVQgPSA1O1xuICBjb25zdCBmb3JtRGlzYWJsZWQgPSAoIWZpbGVQYXRoICYmICFlZGl0aW5nVVJJKSB8fCBwdWJsaXNoaW5nO1xuICBjb25zdCBpc0luUHJvZ3Jlc3MgPSBmaWxlUGF0aCB8fCBlZGl0aW5nVVJJIHx8IG5hbWUgfHwgdGl0bGU7XG5cbiAgLy8gSWYgdGhleSBhcmUgZWRpdGluZywgdGhleSBkb24ndCBuZWVkIGEgbmV3IGZpbGUgY2hvc2VuXG4gIGNvbnN0IGZvcm1WYWxpZExlc3NGaWxlID1cbiAgICBuYW1lICYmXG4gICAgaXNOYW1lVmFsaWQobmFtZSwgZmFsc2UpICYmXG4gICAgdGl0bGUgJiZcbiAgICBiaWQgJiZcbiAgICAhYmlkRXJyb3IgJiZcbiAgICAhKHVwbG9hZFRodW1ibmFpbFN0YXR1cyA9PT0gVEhVTUJOQUlMX1NUQVRVU0VTLklOX1BST0dSRVNTKTtcbiAgY29uc3QgZm9ybVZhbGlkID0gZWRpdGluZ1VSSSAmJiAhZmlsZVBhdGggPyBpc1N0aWxsRWRpdGluZyAmJiBmb3JtVmFsaWRMZXNzRmlsZSA6IGZvcm1WYWxpZExlc3NGaWxlO1xuXG4gIGxldCBzdWJtaXRMYWJlbDtcbiAgaWYgKGlzU3RpbGxFZGl0aW5nKSB7XG4gICAgc3VibWl0TGFiZWwgPSAhcHVibGlzaGluZyA/IF9fKCdFZGl0JykgOiBfXygnRWRpdGluZy4uLicpO1xuICB9IGVsc2Uge1xuICAgIHN1Ym1pdExhYmVsID0gIXB1Ymxpc2hpbmcgPyBfXygnUHVibGlzaCcpIDogX18oJ1B1Ymxpc2hpbmcuLi4nKTtcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF0aHVtYm5haWwpIHtcbiAgICAgIHJlc2V0VGh1bWJuYWlsU3RhdHVzKCk7XG4gICAgfVxuICB9LCBbdGh1bWJuYWlsLCByZXNldFRodW1ibmFpbFN0YXR1c10pO1xuXG4gIC8vIEV2ZXJ5IHRpbWUgdGhlIGNoYW5uZWwgb3IgbmFtZSBjaGFuZ2VzLCByZXNvbHZlIHRoZSB1cmlzIHRvIGZpbmQgd2lubmluZyBiaWQgYW1vdW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElmIHRoZXkgYXJlIG1pZHdheSB0aHJvdWdoIGEgY2hhbm5lbCBjcmVhdGlvbiwgdHJlYXQgaXQgYXMgYW5vbnltb3VzIHVudGlsIGl0IGNvbXBsZXRlc1xuICAgIGNvbnN0IGNoYW5uZWxOYW1lID0gY2hhbm5lbCA9PT0gQ0hBTk5FTF9BTk9OWU1PVVMgfHwgY2hhbm5lbCA9PT0gQ0hBTk5FTF9ORVcgPyAnJyA6IGNoYW5uZWw7XG5cbiAgICAvLyBXZSBhcmUgb25seSBnb2luZyB0byBzdG9yZSB0aGUgZnVsbCB1cmksIGJ1dCB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlIHVyaSB3aXRoIGFuZCB3aXRob3V0IHRoZSBjaGFubmVsIG5hbWVcbiAgICBsZXQgdXJpO1xuICAgIHRyeSB7XG4gICAgICB1cmkgPSBuYW1lICYmIGJ1aWxkVVJJKHsgc3RyZWFtTmFtZTogbmFtZSwgY2hhbm5lbE5hbWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIGlmIChjaGFubmVsTmFtZSAmJiBuYW1lKSB7XG4gICAgICAvLyByZXNvbHZlIHdpdGhvdXQgdGhlIGNoYW5uZWwgbmFtZSBzbyB3ZSBrbm93IHRoZSB3aW5uaW5nIGJpZCBmb3IgaXRcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVyaUxlc3NDaGFubmVsID0gYnVpbGRVUkkoeyBzdHJlYW1OYW1lOiBuYW1lIH0pO1xuICAgICAgICByZXNvbHZlVXJpKHVyaUxlc3NDaGFubmVsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZCA9IGlzVVJJVmFsaWQodXJpKTtcbiAgICBpZiAodXJpICYmIGlzVmFsaWQpIHtcbiAgICAgIHJlc29sdmVVcmkodXJpKTtcbiAgICAgIHVwZGF0ZVB1Ymxpc2hGb3JtKHsgdXJpIH0pO1xuICAgIH1cbiAgfSwgW25hbWUsIGNoYW5uZWwsIHJlc29sdmVVcmksIHVwZGF0ZVB1Ymxpc2hGb3JtXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtc3RhY2tcIj5cbiAgICAgIDxQdWJsaXNoRmlsZSBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgcHVibGlzaGluZ30gaW5Qcm9ncmVzcz17aXNJblByb2dyZXNzfSAvPlxuICAgICAgeyFwdWJsaXNoaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoeyAnY2FyZC0tZGlzYWJsZWQnOiBmb3JtRGlzYWJsZWQgfSl9PlxuICAgICAgICAgIDxQdWJsaXNoVGV4dCBkaXNhYmxlZD17Zm9ybURpc2FibGVkfSAvPlxuICAgICAgICAgIDxDYXJkIGFjdGlvbnM9ezxTZWxlY3RUaHVtYm5haWwgLz59IC8+XG5cbiAgICAgICAgICA8VGFnc1NlbGVjdFxuICAgICAgICAgICAgc3VnZ2VzdE1hdHVyZVxuICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1c1xuICAgICAgICAgICAgaGlkZUhlYWRlclxuICAgICAgICAgICAgbGFiZWw9e19fKCdTZWxlY3RlZCBUYWdzJyl9XG4gICAgICAgICAgICBlbXB0eT17X18oJ05vIHRhZ3MgYWRkZWQnKX1cbiAgICAgICAgICAgIGxpbWl0U2VsZWN0PXtUQUdTX0xJTUlUfVxuICAgICAgICAgICAgaGVscD17X18oXG4gICAgICAgICAgICAgICdBZGQgdGFncyB0aGF0IGFyZSByZWxldmFudCB0byB5b3VyIGNvbnRlbnQuIElmIG1hdHVyZSBjb250ZW50LCBlbnN1cmUgaXQgaXMgdGFnZ2VkIG1hdHVyZS4gVGFnIGFidXNlIGFuZCBtaXNzaW5nIG1hdHVyZSB0YWdzIHdpbGwgbm90IGJlIHRvbGVyYXRlZC4nXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdnYW1pbmcsIGNyeXB0bycpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e25ld1RhZ3MgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRUYWdzID0gW107XG4gICAgICAgICAgICAgIG5ld1RhZ3MuZm9yRWFjaChuZXdUYWcgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFncy5zb21lKHRhZyA9PiB0YWcubmFtZSA9PT0gbmV3VGFnLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZWRUYWdzLnB1c2gobmV3VGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB1cGRhdGVQdWJsaXNoRm9ybSh7IHRhZ3M6IFsuLi50YWdzLCAuLi52YWxpZGF0ZWRUYWdzXSB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblJlbW92ZT17Y2xpY2tlZFRhZyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1RhZ3MgPSB0YWdzLnNsaWNlKCkuZmlsdGVyKHRhZyA9PiB0YWcubmFtZSAhPT0gY2xpY2tlZFRhZy5uYW1lKTtcbiAgICAgICAgICAgICAgdXBkYXRlUHVibGlzaEZvcm0oeyB0YWdzOiBuZXdUYWdzIH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRhZ3NDaG9zZW49e3RhZ3N9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RDaGFubmVsIGNoYW5uZWw9e2NoYW5uZWx9IG9uQ2hhbm5lbENoYW5nZT17Y2hhbm5lbCA9PiB1cGRhdGVQdWJsaXNoRm9ybSh7IGNoYW5uZWwgfSl9IC8+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgICAgICAgICAge19fKCdUaGlzIGlzIGEgdXNlcm5hbWUgb3IgaGFuZGxlIHRoYXQgeW91ciBjb250ZW50IGNhbiBiZSBmb3VuZCB1bmRlci4nKX17JyAnfVxuICAgICAgICAgICAgICAgICAge19fKCdFeC4gQE1hcnZlbCwgQFRoZUJlYXRsZXMsIEBCb29rc0J5Sm9lJyl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8UHVibGlzaE5hbWUgZGlzYWJsZWQ9e2Zvcm1EaXNhYmxlZH0gLz5cbiAgICAgICAgICA8UHVibGlzaFByaWNlIGRpc2FibGVkPXtmb3JtRGlzYWJsZWR9IC8+XG4gICAgICAgICAgPFB1Ymxpc2hBZGRpdGlvbmFsT3B0aW9ucyBkaXNhYmxlZD17Zm9ybURpc2FibGVkfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c2VjdGlvbj5cbiAgICAgICAgeyFmb3JtRGlzYWJsZWQgJiYgIWZvcm1WYWxpZCAmJiA8UHVibGlzaEZvcm1FcnJvcnMgLz59XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwdWJsaXNoKGZpbGVQYXRoKX1cbiAgICAgICAgICAgIGxhYmVsPXtzdWJtaXRMYWJlbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtmb3JtRGlzYWJsZWQgfHwgIWZvcm1WYWxpZCB8fCB1cGxvYWRUaHVtYm5haWxTdGF0dXMgPT09IFRIVU1CTkFJTF9TVEFUVVNFUy5JTl9QUk9HUkVTU31cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG9uQ2xpY2s9e2NsZWFyUHVibGlzaH0gbGFiZWw9e19fKCdDYW5jZWwnKX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICB7X18oJ0J5IGNvbnRpbnVpbmcsIHlvdSBhY2NlcHQgdGhlJyl9eycgJ31cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cubGJyeS5jb20vdGVybXNvZnNlcnZpY2VcIiBsYWJlbD17X18oJ0xCUlkgVGVybXMgb2YgU2VydmljZScpfSAvPi5cbiAgICAgICAgPC9wPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoRm9ybTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTRDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQXRCQTtBQXlCQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQUE7QUFBQTtBQWxCQTtBQW9CQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQXRCQTtBQXdCQTtBQXhCQTtBQTRCQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBWUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUZBO0FBR0E7QUFDQTtBQUpBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/publishForm/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishFormErrors/index.js": -/*!**************************************************!*\ - !*** ../ui/component/publishFormErrors/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/publishFormErrors/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n name: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('name')(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('title')(state),\n bid: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('bid')(state),\n bidError: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('bidError')(state),\n editingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('editingUri')(state),\n uploadThumbnailStatus: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('uploadThumbnailStatus')(state),\n isStillEditing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsStillEditing\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGb3JtRXJyb3JzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRm9ybUVycm9ycy9pbmRleC5qcz9mZGM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSwgc2VsZWN0SXNTdGlsbEVkaXRpbmcgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBQdWJsaXNoUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBuYW1lOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnbmFtZScpKHN0YXRlKSxcbiAgdGl0bGU6IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlKCd0aXRsZScpKHN0YXRlKSxcbiAgYmlkOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnYmlkJykoc3RhdGUpLFxuICBiaWRFcnJvcjogbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUoJ2JpZEVycm9yJykoc3RhdGUpLFxuICBlZGl0aW5nVXJpOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnZWRpdGluZ1VyaScpKHN0YXRlKSxcbiAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgndXBsb2FkVGh1bWJuYWlsU3RhdHVzJykoc3RhdGUpLFxuICBpc1N0aWxsRWRpdGluZzogc2VsZWN0SXNTdGlsbEVkaXRpbmcoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgbnVsbFxuKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQUE7QUFDQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/publishFormErrors/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishFormErrors/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/publishFormErrors/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n\n\n\n\nfunction PublishFormErrors(props) {\n var name = props.name,\n title = props.title,\n bid = props.bid,\n bidError = props.bidError,\n editingURI = props.editingURI,\n filePath = props.filePath,\n isStillEditing = props.isStillEditing,\n uploadThumbnailStatus = props.uploadThumbnailStatus; // These are extra help\n // If there is an error it will be presented as an inline error as well\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, !title && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('A title is required')), !name && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('A URL is required')), !Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"isNameValid\"])(name, false) && constants_claim__WEBPACK_IMPORTED_MODULE_2__[\"INVALID_NAME_ERROR\"], !bid && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('A deposit amount is required')), bidError && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('Please check your deposit amount.')), uploadThumbnailStatus === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].IN_PROGRESS && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('Please wait for thumbnail to finish uploading')), !!editingURI && !isStillEditing && !filePath && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, __('Please reselect a file after changing the LBRY URL')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishFormErrors);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hGb3JtRXJyb3JzL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoRm9ybUVycm9ycy92aWV3LmpzeD9mM2M5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVEhVTUJOQUlMX1NUQVRVU0VTLCBpc05hbWVWYWxpZCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgSU5WQUxJRF9OQU1FX0VSUk9SIH0gZnJvbSAnY29uc3RhbnRzL2NsYWltJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGl0bGU6ID9zdHJpbmcsXG4gIG5hbWU6ID9zdHJpbmcsXG4gIGJpZDogP3N0cmluZyxcbiAgYmlkRXJyb3I6ID9zdHJpbmcsXG4gIGVkaXRpbmdVUkk6ID9zdHJpbmcsXG4gIGZpbGVQYXRoOiA/c3RyaW5nLFxuICBpc1N0aWxsRWRpdGluZzogYm9vbGVhbixcbiAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzOiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBQdWJsaXNoRm9ybUVycm9ycyhwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBuYW1lLCB0aXRsZSwgYmlkLCBiaWRFcnJvciwgZWRpdGluZ1VSSSwgZmlsZVBhdGgsIGlzU3RpbGxFZGl0aW5nLCB1cGxvYWRUaHVtYm5haWxTdGF0dXMgfSA9IHByb3BzO1xuXG4gIC8vIFRoZXNlIGFyZSBleHRyYSBoZWxwXG4gIC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIGl0IHdpbGwgYmUgcHJlc2VudGVkIGFzIGFuIGlubGluZSBlcnJvciBhcyB3ZWxsXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+XG4gICAgICB7IXRpdGxlICYmIDxkaXY+e19fKCdBIHRpdGxlIGlzIHJlcXVpcmVkJyl9PC9kaXY+fVxuICAgICAgeyFuYW1lICYmIDxkaXY+e19fKCdBIFVSTCBpcyByZXF1aXJlZCcpfTwvZGl2Pn1cbiAgICAgIHshaXNOYW1lVmFsaWQobmFtZSwgZmFsc2UpICYmIElOVkFMSURfTkFNRV9FUlJPUn1cbiAgICAgIHshYmlkICYmIDxkaXY+e19fKCdBIGRlcG9zaXQgYW1vdW50IGlzIHJlcXVpcmVkJyl9PC9kaXY+fVxuICAgICAge2JpZEVycm9yICYmIDxkaXY+e19fKCdQbGVhc2UgY2hlY2sgeW91ciBkZXBvc2l0IGFtb3VudC4nKX08L2Rpdj59XG4gICAgICB7dXBsb2FkVGh1bWJuYWlsU3RhdHVzID09PSBUSFVNQk5BSUxfU1RBVFVTRVMuSU5fUFJPR1JFU1MgJiYgKFxuICAgICAgICA8ZGl2PntfXygnUGxlYXNlIHdhaXQgZm9yIHRodW1ibmFpbCB0byBmaW5pc2ggdXBsb2FkaW5nJyl9PC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhZWRpdGluZ1VSSSAmJiAhaXNTdGlsbEVkaXRpbmcgJiYgIWZpbGVQYXRoICYmIChcbiAgICAgICAgPGRpdj57X18oJ1BsZWFzZSByZXNlbGVjdCBhIGZpbGUgYWZ0ZXIgY2hhbmdpbmcgdGhlIExCUlkgVVJMJyl9PC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoRm9ybUVycm9ycztcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishFormErrors/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishName/bid-help-text.jsx": -/*!*****************************************************!*\ - !*** ../ui/component/publishName/bid-help-text.jsx ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {function BidHelpText(props) {\n var uri = props.uri,\n isResolvingUri = props.isResolvingUri,\n amountNeededForTakeover = props.amountNeededForTakeover;\n var bidHelpText;\n\n if (uri) {\n if (isResolvingUri) {\n bidHelpText = __('Checking the winning claim amount...');\n } else if (amountNeededForTakeover === 0) {\n bidHelpText = __('You currently have the highest bid for this name.');\n } else if (!amountNeededForTakeover) {\n bidHelpText = __('Any amount will give you the highest bid, but larger amounts help your content be trusted and discovered.');\n } else {\n bidHelpText = __('If you bid more than %amount% LBC, when someone navigates to %uri%, it will load your published content. However, you can get a longer version of this URL for any bid.', {\n amount: amountNeededForTakeover,\n uri: uri\n });\n }\n } else {\n bidHelpText = __('This LBC remains yours and the deposit can be undone at any time.');\n }\n\n return bidHelpText;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BidHelpText);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hOYW1lL2JpZC1oZWxwLXRleHQuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoTmFtZS9iaWQtaGVscC10ZXh0LmpzeD9hMGM2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG50eXBlIFByb3BzID0ge1xuICB1cmk6ID9zdHJpbmcsXG4gIGlzUmVzb2x2aW5nVXJpOiBib29sZWFuLFxuICBhbW91bnROZWVkZWRGb3JUYWtlb3ZlcjogbnVtYmVyLFxufTtcblxuZnVuY3Rpb24gQmlkSGVscFRleHQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCBpc1Jlc29sdmluZ1VyaSwgYW1vdW50TmVlZGVkRm9yVGFrZW92ZXIgfSA9IHByb3BzO1xuXG4gIGxldCBiaWRIZWxwVGV4dDtcblxuICBpZiAodXJpKSB7XG4gICAgaWYgKGlzUmVzb2x2aW5nVXJpKSB7XG4gICAgICBiaWRIZWxwVGV4dCA9IF9fKCdDaGVja2luZyB0aGUgd2lubmluZyBjbGFpbSBhbW91bnQuLi4nKTtcbiAgICB9IGVsc2UgaWYgKGFtb3VudE5lZWRlZEZvclRha2VvdmVyID09PSAwKSB7XG4gICAgICBiaWRIZWxwVGV4dCA9IF9fKCdZb3UgY3VycmVudGx5IGhhdmUgdGhlIGhpZ2hlc3QgYmlkIGZvciB0aGlzIG5hbWUuJyk7XG4gICAgfSBlbHNlIGlmICghYW1vdW50TmVlZGVkRm9yVGFrZW92ZXIpIHtcbiAgICAgIGJpZEhlbHBUZXh0ID0gX18oXG4gICAgICAgICdBbnkgYW1vdW50IHdpbGwgZ2l2ZSB5b3UgdGhlIGhpZ2hlc3QgYmlkLCBidXQgbGFyZ2VyIGFtb3VudHMgaGVscCB5b3VyIGNvbnRlbnQgYmUgdHJ1c3RlZCBhbmQgZGlzY292ZXJlZC4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaWRIZWxwVGV4dCA9IF9fKFxuICAgICAgICAnSWYgeW91IGJpZCBtb3JlIHRoYW4gJWFtb3VudCUgTEJDLCB3aGVuIHNvbWVvbmUgbmF2aWdhdGVzIHRvICV1cmklLCBpdCB3aWxsIGxvYWQgeW91ciBwdWJsaXNoZWQgY29udGVudC4gSG93ZXZlciwgeW91IGNhbiBnZXQgYSBsb25nZXIgdmVyc2lvbiBvZiB0aGlzIFVSTCBmb3IgYW55IGJpZC4nLFxuICAgICAgICB7XG4gICAgICAgICAgYW1vdW50OiBhbW91bnROZWVkZWRGb3JUYWtlb3ZlcixcbiAgICAgICAgICB1cmk6IHVyaSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmlkSGVscFRleHQgPSBfXygnVGhpcyBMQkMgcmVtYWlucyB5b3VycyBhbmQgdGhlIGRlcG9zaXQgY2FuIGJlIHVuZG9uZSBhdCBhbnkgdGltZS4nKTtcbiAgfVxuXG4gIHJldHVybiBiaWRIZWxwVGV4dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQmlkSGVscFRleHQ7XG4iXSwibWFwcGluZ3MiOiJBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUtBO0FBR0E7QUFDQTtBQUZBO0FBS0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/publishName/bid-help-text.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishName/index.js": -/*!********************************************!*\ - !*** ../ui/component/publishName/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/publishName/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n name: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('name')(state),\n channel: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('channel')(state),\n bid: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('bid')(state),\n uri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('uri')(state),\n isStillEditing: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsStillEditing\"])(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsResolvingPublishUris\"])(state),\n amountNeededForTakeover: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTakeOverAmount\"])(state),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state),\n myClaimForUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimForUri\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n },\n prepareEdit: function prepareEdit(claim, uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doPrepareEdit\"])(claim, uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hOYW1lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoTmFtZS9pbmRleC5qcz9lOWM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSxcbiAgc2VsZWN0SXNTdGlsbEVkaXRpbmcsXG4gIHNlbGVjdE15Q2xhaW1Gb3JVcmksXG4gIHNlbGVjdElzUmVzb2x2aW5nUHVibGlzaFVyaXMsXG4gIHNlbGVjdFRha2VPdmVyQW1vdW50LFxuICBkb1VwZGF0ZVB1Ymxpc2hGb3JtLFxuICBkb1ByZXBhcmVFZGl0LFxuICBzZWxlY3RCYWxhbmNlLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcblxuaW1wb3J0IFB1Ymxpc2hQYWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIG5hbWU6IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlKCduYW1lJykoc3RhdGUpLFxuICBjaGFubmVsOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnY2hhbm5lbCcpKHN0YXRlKSxcbiAgYmlkOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnYmlkJykoc3RhdGUpLFxuICB1cmk6IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlKCd1cmknKShzdGF0ZSksXG4gIGlzU3RpbGxFZGl0aW5nOiBzZWxlY3RJc1N0aWxsRWRpdGluZyhzdGF0ZSksXG4gIGlzUmVzb2x2aW5nVXJpOiBzZWxlY3RJc1Jlc29sdmluZ1B1Ymxpc2hVcmlzKHN0YXRlKSxcbiAgYW1vdW50TmVlZGVkRm9yVGFrZW92ZXI6IHNlbGVjdFRha2VPdmVyQW1vdW50KHN0YXRlKSxcbiAgYmFsYW5jZTogc2VsZWN0QmFsYW5jZShzdGF0ZSksXG4gIG15Q2xhaW1Gb3JVcmk6IHNlbGVjdE15Q2xhaW1Gb3JVcmkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxuICBwcmVwYXJlRWRpdDogKGNsYWltLCB1cmkpID0+IGRpc3BhdGNoKGRvUHJlcGFyZUVkaXQoY2xhaW0sIHVyaSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUFBO0FBQ0E7QUFXQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishName/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishName/name-help-text.jsx": -/*!******************************************************!*\ - !*** ../ui/component/publishName/name-help-text.jsx ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nfunction NameHelpText(props) {\n var uri = props.uri,\n myClaimForUri = props.myClaimForUri,\n onEditMyClaim = props.onEditMyClaim,\n isStillEditing = props.isStillEditing;\n var nameHelpText;\n\n if (isStillEditing) {\n nameHelpText = __('You are currently editing this claim. If you change the URL, you will need to reselect a file.');\n } else if (uri && myClaimForUri) {\n var editUri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n streamName: myClaimForUri.name,\n streamClaimId: myClaimForUri.claim_id\n });\n nameHelpText = react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, __('You already have a claim at'), \" \".concat(uri, \" \"), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: \"Edit it\",\n onClick: function onClick() {\n return onEditMyClaim(myClaimForUri, editUri);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"br\", null), __('Publishing will update your existing claim.'));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, nameHelpText || react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", null, __('Create a URL for this content. Simpler names are easier to find and remember.')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (NameHelpText);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hOYW1lL25hbWUtaGVscC10ZXh0LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcHVibGlzaE5hbWUvbmFtZS1oZWxwLXRleHQuanN4P2FmYTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBidWlsZFVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6ID9zdHJpbmcsXG4gIG15Q2xhaW1Gb3JVcmk6ID9TdHJlYW1DbGFpbSxcbiAgaXNTdGlsbEVkaXRpbmc6IGJvb2xlYW4sXG4gIG9uRWRpdE15Q2xhaW06IChhbnksIHN0cmluZykgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIE5hbWVIZWxwVGV4dChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB1cmksIG15Q2xhaW1Gb3JVcmksIG9uRWRpdE15Q2xhaW0sIGlzU3RpbGxFZGl0aW5nIH0gPSBwcm9wcztcblxuICBsZXQgbmFtZUhlbHBUZXh0O1xuXG4gIGlmIChpc1N0aWxsRWRpdGluZykge1xuICAgIG5hbWVIZWxwVGV4dCA9IF9fKCdZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIHRoaXMgY2xhaW0uIElmIHlvdSBjaGFuZ2UgdGhlIFVSTCwgeW91IHdpbGwgbmVlZCB0byByZXNlbGVjdCBhIGZpbGUuJyk7XG4gIH0gZWxzZSBpZiAodXJpICYmIG15Q2xhaW1Gb3JVcmkpIHtcbiAgICBjb25zdCBlZGl0VXJpID0gYnVpbGRVUkkoe1xuICAgICAgc3RyZWFtTmFtZTogbXlDbGFpbUZvclVyaS5uYW1lLFxuICAgICAgc3RyZWFtQ2xhaW1JZDogbXlDbGFpbUZvclVyaS5jbGFpbV9pZCxcbiAgICB9KTtcblxuICAgIG5hbWVIZWxwVGV4dCA9IChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAge19fKCdZb3UgYWxyZWFkeSBoYXZlIGEgY2xhaW0gYXQnKX1cbiAgICAgICAge2AgJHt1cml9IGB9XG4gICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPVwiRWRpdCBpdFwiIG9uQ2xpY2s9eygpID0+IG9uRWRpdE15Q2xhaW0obXlDbGFpbUZvclVyaSwgZWRpdFVyaSl9IC8+XG4gICAgICAgIDxiciAvPlxuICAgICAgICB7X18oJ1B1Ymxpc2hpbmcgd2lsbCB1cGRhdGUgeW91ciBleGlzdGluZyBjbGFpbS4nKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge25hbWVIZWxwVGV4dCB8fCAoXG4gICAgICAgIDxzcGFuPntfXygnQ3JlYXRlIGEgVVJMIGZvciB0aGlzIGNvbnRlbnQuIFNpbXBsZXIgbmFtZXMgYXJlIGVhc2llciB0byBmaW5kIGFuZCByZW1lbWJlci4nKX08L3NwYW4+XG4gICAgICApfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hbWVIZWxwVGV4dDtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/publishName/name-help-text.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishName/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/publishName/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var _name_help_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./name-help-text */ \"../ui/component/publishName/name-help-text.jsx\");\n/* harmony import */ var _bid_help_text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bid-help-text */ \"../ui/component/publishName/bid-help-text.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction PublishName(props) {\n var name = props.name,\n channel = props.channel,\n uri = props.uri,\n isStillEditing = props.isStillEditing,\n myClaimForUri = props.myClaimForUri,\n bid = props.bid,\n isResolvingUri = props.isResolvingUri,\n amountNeededForTakeover = props.amountNeededForTakeover,\n prepareEdit = props.prepareEdit,\n updatePublishForm = props.updatePublishForm,\n balance = props.balance;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(undefined),\n _useState2 = _slicedToArray(_useState, 2),\n nameError = _useState2[0],\n setNameError = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(undefined),\n _useState4 = _slicedToArray(_useState3, 2),\n bidError = _useState4[0],\n setBidError = _useState4[1];\n\n var previousBidAmount = myClaimForUri && Number(myClaimForUri.amount);\n\n function editExistingClaim() {\n if (myClaimForUri) {\n prepareEdit(myClaimForUri, uri);\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n var nameError;\n\n if (!name) {\n nameError = __('A name is required');\n } else if (!Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"isNameValid\"])(name, false)) {\n nameError = constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"INVALID_NAME_ERROR\"];\n }\n\n setNameError(nameError);\n }, [name]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n var totalAvailableBidAmount = previousBidAmount ? previousBidAmount + balance : balance;\n var bidError;\n\n if (bid === 0) {\n bidError = __('Deposit cannot be 0');\n } else if (bid < constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"MINIMUM_PUBLISH_BID\"]) {\n bidError = __('Your deposit must be higher');\n } else if (totalAvailableBidAmount < bid) {\n bidError = __('Deposit cannot be higher than your balance');\n } else if (totalAvailableBidAmount <= bid + 0.05) {\n bidError = __('Please decrease your deposit to account for transaction fees or acquire more LBC.');\n }\n\n setBidError(bidError);\n updatePublishForm({\n bidError: bidError\n });\n }, [bid, previousBidAmount, balance, updatePublishForm]);\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed fieldset-group--disabled-prefix\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"label\", null, __('Name')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"form-field__prefix\"\n }, \"lbry://\".concat(!channel || channel === constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_ANONYMOUS\"] || channel === constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"] ? '' : \"\".concat(channel, \"/\")))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"text\",\n name: \"content_name\",\n value: name,\n error: nameError,\n onChange: function onChange(event) {\n return updatePublishForm({\n name: event.target.value\n });\n }\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"form-field__help\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_name_help_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri,\n isStillEditing: isStillEditing,\n myClaimForUri: myClaimForUri,\n onEditMyClaim: editExistingClaim\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"number\",\n name: \"content_bid\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0.123\",\n className: \"form-field--price-amount\",\n label: __('Deposit (LBC)'),\n postfix: \"LBC\",\n value: bid,\n error: bidError,\n disabled: !name,\n onChange: function onChange(event) {\n return updatePublishForm({\n bid: parseFloat(event.target.value)\n });\n },\n onWheel: function onWheel(e) {\n return e.stopPropagation();\n },\n helper: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_bid_help_text__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: 'lbry://' + name,\n amountNeededForTakeover: amountNeededForTakeover,\n isResolvingUri: isResolvingUri\n })\n }))\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishName);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hOYW1lL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoTmFtZS92aWV3LmpzeD83ODEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgeyBDSEFOTkVMX05FVywgQ0hBTk5FTF9BTk9OWU1PVVMsIE1JTklNVU1fUFVCTElTSF9CSUQsIElOVkFMSURfTkFNRV9FUlJPUiB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzTmFtZVZhbGlkIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IE5hbWVIZWxwVGV4dCBmcm9tICcuL25hbWUtaGVscC10ZXh0JztcbmltcG9ydCBCaWRIZWxwVGV4dCBmcm9tICcuL2JpZC1oZWxwLXRleHQnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nLFxuICBjaGFubmVsOiBzdHJpbmcsXG4gIHVyaTogc3RyaW5nLFxuICBiaWQ6IG51bWJlcixcbiAgYmFsYW5jZTogbnVtYmVyLFxuICBpc1N0aWxsRWRpdGluZzogYm9vbGVhbixcbiAgbXlDbGFpbUZvclVyaTogP1N0cmVhbUNsYWltLFxuICBpc1Jlc29sdmluZ1VyaTogYm9vbGVhbixcbiAgYW1vdW50TmVlZGVkRm9yVGFrZW92ZXI6IG51bWJlcixcbiAgcHJlcGFyZUVkaXQ6ICh7fSwgc3RyaW5nKSA9PiB2b2lkLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogKHt9KSA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gUHVibGlzaE5hbWUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNoYW5uZWwsXG4gICAgdXJpLFxuICAgIGlzU3RpbGxFZGl0aW5nLFxuICAgIG15Q2xhaW1Gb3JVcmksXG4gICAgYmlkLFxuICAgIGlzUmVzb2x2aW5nVXJpLFxuICAgIGFtb3VudE5lZWRlZEZvclRha2VvdmVyLFxuICAgIHByZXBhcmVFZGl0LFxuICAgIHVwZGF0ZVB1Ymxpc2hGb3JtLFxuICAgIGJhbGFuY2UsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW25hbWVFcnJvciwgc2V0TmFtZUVycm9yXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIGNvbnN0IFtiaWRFcnJvciwgc2V0QmlkRXJyb3JdID0gdXNlU3RhdGUodW5kZWZpbmVkKTtcbiAgY29uc3QgcHJldmlvdXNCaWRBbW91bnQgPSBteUNsYWltRm9yVXJpICYmIE51bWJlcihteUNsYWltRm9yVXJpLmFtb3VudCk7XG5cbiAgZnVuY3Rpb24gZWRpdEV4aXN0aW5nQ2xhaW0oKSB7XG4gICAgaWYgKG15Q2xhaW1Gb3JVcmkpIHtcbiAgICAgIHByZXBhcmVFZGl0KG15Q2xhaW1Gb3JVcmksIHVyaSk7XG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbmFtZUVycm9yO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgbmFtZUVycm9yID0gX18oJ0EgbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFtZVZhbGlkKG5hbWUsIGZhbHNlKSkge1xuICAgICAgbmFtZUVycm9yID0gSU5WQUxJRF9OQU1FX0VSUk9SO1xuICAgIH1cblxuICAgIHNldE5hbWVFcnJvcihuYW1lRXJyb3IpO1xuICB9LCBbbmFtZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdG90YWxBdmFpbGFibGVCaWRBbW91bnQgPSBwcmV2aW91c0JpZEFtb3VudCA/IHByZXZpb3VzQmlkQW1vdW50ICsgYmFsYW5jZSA6IGJhbGFuY2U7XG5cbiAgICBsZXQgYmlkRXJyb3I7XG4gICAgaWYgKGJpZCA9PT0gMCkge1xuICAgICAgYmlkRXJyb3IgPSBfXygnRGVwb3NpdCBjYW5ub3QgYmUgMCcpO1xuICAgIH0gZWxzZSBpZiAoYmlkIDwgTUlOSU1VTV9QVUJMSVNIX0JJRCkge1xuICAgICAgYmlkRXJyb3IgPSBfXygnWW91ciBkZXBvc2l0IG11c3QgYmUgaGlnaGVyJyk7XG4gICAgfSBlbHNlIGlmICh0b3RhbEF2YWlsYWJsZUJpZEFtb3VudCA8IGJpZCkge1xuICAgICAgYmlkRXJyb3IgPSBfXygnRGVwb3NpdCBjYW5ub3QgYmUgaGlnaGVyIHRoYW4geW91ciBiYWxhbmNlJyk7XG4gICAgfSBlbHNlIGlmICh0b3RhbEF2YWlsYWJsZUJpZEFtb3VudCA8PSBiaWQgKyAwLjA1KSB7XG4gICAgICBiaWRFcnJvciA9IF9fKCdQbGVhc2UgZGVjcmVhc2UgeW91ciBkZXBvc2l0IHRvIGFjY291bnQgZm9yIHRyYW5zYWN0aW9uIGZlZXMgb3IgYWNxdWlyZSBtb3JlIExCQy4nKTtcbiAgICB9XG5cbiAgICBzZXRCaWRFcnJvcihiaWRFcnJvcik7XG4gICAgdXBkYXRlUHVibGlzaEZvcm0oeyBiaWRFcnJvcjogYmlkRXJyb3IgfSk7XG4gIH0sIFtiaWQsIHByZXZpb3VzQmlkQW1vdW50LCBiYWxhbmNlLCB1cGRhdGVQdWJsaXNoRm9ybV0pO1xuXG4gIHJldHVybiAoXG4gICAgPENhcmRcbiAgICAgIGFjdGlvbnM9e1xuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPGZpZWxkc2V0LWdyb3VwIGNsYXNzPVwiZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWQgZmllbGRzZXQtZ3JvdXAtLWRpc2FibGVkLXByZWZpeFwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICAgIDxsYWJlbD57X18oJ05hbWUnKX08L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZmllbGRfX3ByZWZpeFwiPntgbGJyeTovLyR7XG4gICAgICAgICAgICAgICAgIWNoYW5uZWwgfHwgY2hhbm5lbCA9PT0gQ0hBTk5FTF9BTk9OWU1PVVMgfHwgY2hhbm5lbCA9PT0gQ0hBTk5FTF9ORVcgPyAnJyA6IGAke2NoYW5uZWx9L2BcbiAgICAgICAgICAgICAgfWB9PC9kaXY+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRfbmFtZVwiXG4gICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICBlcnJvcj17bmFtZUVycm9yfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gdXBkYXRlUHVibGlzaEZvcm0oeyBuYW1lOiBldmVudC50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZmllbGRzZXQtZ3JvdXA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWZpZWxkX19oZWxwXCI+XG4gICAgICAgICAgICA8TmFtZUhlbHBUZXh0XG4gICAgICAgICAgICAgIHVyaT17dXJpfVxuICAgICAgICAgICAgICBpc1N0aWxsRWRpdGluZz17aXNTdGlsbEVkaXRpbmd9XG4gICAgICAgICAgICAgIG15Q2xhaW1Gb3JVcmk9e215Q2xhaW1Gb3JVcml9XG4gICAgICAgICAgICAgIG9uRWRpdE15Q2xhaW09e2VkaXRFeGlzdGluZ0NsYWltfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG5hbWU9XCJjb250ZW50X2JpZFwiXG4gICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwLjEyM1wiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWZpZWxkLS1wcmljZS1hbW91bnRcIlxuICAgICAgICAgICAgbGFiZWw9e19fKCdEZXBvc2l0IChMQkMpJyl9XG4gICAgICAgICAgICBwb3N0Zml4PVwiTEJDXCJcbiAgICAgICAgICAgIHZhbHVlPXtiaWR9XG4gICAgICAgICAgICBlcnJvcj17YmlkRXJyb3J9XG4gICAgICAgICAgICBkaXNhYmxlZD17IW5hbWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gdXBkYXRlUHVibGlzaEZvcm0oeyBiaWQ6IHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlKSB9KX1cbiAgICAgICAgICAgIG9uV2hlZWw9e2UgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgIGhlbHBlcj17XG4gICAgICAgICAgICAgIDxCaWRIZWxwVGV4dFxuICAgICAgICAgICAgICAgIHVyaT17J2xicnk6Ly8nICsgbmFtZX1cbiAgICAgICAgICAgICAgICBhbW91bnROZWVkZWRGb3JUYWtlb3Zlcj17YW1vdW50TmVlZGVkRm9yVGFrZW92ZXJ9XG4gICAgICAgICAgICAgICAgaXNSZXNvbHZpbmdVcmk9e2lzUmVzb2x2aW5nVXJpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaE5hbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBZkE7QUFrQkE7QUFFQTtBQUVBO0FBQUE7QUFHQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTEE7QUFRQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVpBO0FBYUE7QUFBQTtBQWJBO0FBY0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQWZBO0FBMUJBO0FBb0RBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/publishName/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishPrice/index.js": -/*!*********************************************!*\ - !*** ../ui/component/publishPrice/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/publishPrice/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n contentIsFree: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('contentIsFree')(state),\n fee: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('fee')(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(values) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(values));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hQcmljZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcHVibGlzaFByaWNlL2luZGV4LmpzP2Q0YmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlLCBkb1VwZGF0ZVB1Ymxpc2hGb3JtIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgUHVibGlzaFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgY29udGVudElzRnJlZTogbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUoJ2NvbnRlbnRJc0ZyZWUnKShzdGF0ZSksXG4gIGZlZTogbWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUoJ2ZlZScpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgdXBkYXRlUHVibGlzaEZvcm06IHZhbHVlcyA9PiBkaXNwYXRjaChkb1VwZGF0ZVB1Ymxpc2hGb3JtKHZhbHVlcykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShQdWJsaXNoUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/publishPrice/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishPrice/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/publishPrice/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n\n\n\n\nfunction PublishPrice(props) {\n var contentIsFree = props.contentIsFree,\n fee = props.fee,\n updatePublishForm = props.updatePublishForm,\n disabled = props.disabled;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"radio\",\n name: \"content_free\",\n label: __('Free'),\n checked: contentIsFree,\n disabled: disabled,\n onChange: function onChange() {\n return updatePublishForm({\n contentIsFree: true\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"radio\",\n name: \"content_cost\",\n label: __('Add a price to this file'),\n checked: !contentIsFree,\n disabled: disabled,\n onChange: function onChange() {\n return updatePublishForm({\n contentIsFree: false\n });\n }\n }), !contentIsFree && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormFieldPrice\"], {\n name: \"content_cost_amount\",\n min: 0,\n price: fee,\n onChange: function onChange(newFee) {\n return updatePublishForm({\n fee: newFee\n });\n }\n }), fee && fee.currency !== 'LBC' && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"form-field__help\"\n }, __('All content fees are charged in LBC. For non-LBC payment methods, the number of credits charged will be adjusted based on the value of LBRY credits at the time of purchase.')))\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishPrice);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hQcmljZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcHVibGlzaFByaWNlL3ZpZXcuanN4PzIzZDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZvcm1GaWVsZFByaWNlIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbnRlbnRJc0ZyZWU6IGJvb2xlYW4sXG4gIGZlZTogRmVlLFxuICBkaXNhYmxlZDogYm9vbGVhbixcbiAgdXBkYXRlUHVibGlzaEZvcm06ICh7fSkgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIFB1Ymxpc2hQcmljZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjb250ZW50SXNGcmVlLCBmZWUsIHVwZGF0ZVB1Ymxpc2hGb3JtLCBkaXNhYmxlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgYWN0aW9ucz17XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRfZnJlZVwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ0ZyZWUnKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2NvbnRlbnRJc0ZyZWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gdXBkYXRlUHVibGlzaEZvcm0oeyBjb250ZW50SXNGcmVlOiB0cnVlIH0pfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRfY29zdFwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ0FkZCBhIHByaWNlIHRvIHRoaXMgZmlsZScpfVxuICAgICAgICAgICAgY2hlY2tlZD17IWNvbnRlbnRJc0ZyZWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gdXBkYXRlUHVibGlzaEZvcm0oeyBjb250ZW50SXNGcmVlOiBmYWxzZSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHshY29udGVudElzRnJlZSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUZpZWxkUHJpY2VcbiAgICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRfY29zdF9hbW91bnRcIlxuICAgICAgICAgICAgICBtaW49ezB9XG4gICAgICAgICAgICAgIHByaWNlPXtmZWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtuZXdGZWUgPT4gdXBkYXRlUHVibGlzaEZvcm0oeyBmZWU6IG5ld0ZlZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZmVlICYmIGZlZS5jdXJyZW5jeSAhPT0gJ0xCQycgJiYgKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9ybS1maWVsZF9faGVscFwiPlxuICAgICAgICAgICAgICB7X18oXG4gICAgICAgICAgICAgICAgJ0FsbCBjb250ZW50IGZlZXMgYXJlIGNoYXJnZWQgaW4gTEJDLiBGb3Igbm9uLUxCQyBwYXltZW50IG1ldGhvZHMsIHRoZSBudW1iZXIgb2YgY3JlZGl0cyBjaGFyZ2VkIHdpbGwgYmUgYWRqdXN0ZWQgYmFzZWQgb24gdGhlIHZhbHVlIG9mIExCUlkgY3JlZGl0cyBhdCB0aGUgdGltZSBvZiBwdXJjaGFzZS4nXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoUHJpY2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFRQTtBQUFBO0FBN0JBO0FBdUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/publishPrice/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/publishText/index.js": -/*!********************************************!*\ - !*** ../ui/component/publishText/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/publishText/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('title')(state),\n description: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectPublishFormValue\"])('description')(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hUZXh0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoVGV4dC9pbmRleC5qcz83ZjYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1VwZGF0ZVB1Ymxpc2hGb3JtLCBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFB1Ymxpc2hQYWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHRpdGxlOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgndGl0bGUnKShzdGF0ZSksXG4gIGRlc2NyaXB0aW9uOiBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZSgnZGVzY3JpcHRpb24nKShzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHVwZGF0ZVB1Ymxpc2hGb3JtOiB2YWx1ZSA9PiBkaXNwYXRjaChkb1VwZGF0ZVB1Ymxpc2hGb3JtKHZhbHVlKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFB1Ymxpc2hQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishText/index.js\n"); - -/***/ }), - -/***/ "../ui/component/publishText/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/publishText/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\nfunction PublishText(props) {\n var title = props.title,\n description = props.description,\n updatePublishForm = props.updatePublishForm,\n disabled = props.disabled;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_3__[\"default\"])('publish-form-description-mode', false),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n advancedEditor = _usePersistedState2[0],\n setAdvancedEditor = _usePersistedState2[1];\n\n function toggleMarkdown() {\n setAdvancedEditor(!advancedEditor);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n name: \"content_title\",\n label: __('Title'),\n placeholder: __('Titular Title'),\n disabled: disabled,\n value: title,\n onChange: function onChange(e) {\n return updatePublishForm({\n title: e.target.value\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: advancedEditor ? 'markdown' : 'textarea',\n name: \"content_description\",\n label: __('Description'),\n placeholder: __('My description for this and that'),\n value: description,\n disabled: disabled,\n onChange: function onChange(value) {\n return updatePublishForm({\n description: advancedEditor ? value : value.target.value\n });\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n onClick: toggleMarkdown,\n label: advancedEditor ? __('Simple Editor') : __('Advanced Editor')\n })))\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishText);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3B1Ymxpc2hUZXh0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9wdWJsaXNoVGV4dC92aWV3LmpzeD9kYTBhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgdXNlUGVyc2lzdGVkU3RhdGUgZnJvbSAnZWZmZWN0cy91c2UtcGVyc2lzdGVkLXN0YXRlJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRpdGxlOiA/c3RyaW5nLFxuICBkZXNjcmlwdGlvbjogP3N0cmluZyxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gIHVwZGF0ZVB1Ymxpc2hGb3JtOiAoe30pID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBQdWJsaXNoVGV4dChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB0aXRsZSwgZGVzY3JpcHRpb24sIHVwZGF0ZVB1Ymxpc2hGb3JtLCBkaXNhYmxlZCB9ID0gcHJvcHM7XG4gIGNvbnN0IFthZHZhbmNlZEVkaXRvciwgc2V0QWR2YW5jZWRFZGl0b3JdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ3B1Ymxpc2gtZm9ybS1kZXNjcmlwdGlvbi1tb2RlJywgZmFsc2UpO1xuICBmdW5jdGlvbiB0b2dnbGVNYXJrZG93bigpIHtcbiAgICBzZXRBZHZhbmNlZEVkaXRvcighYWR2YW5jZWRFZGl0b3IpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgYWN0aW9ucz17XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBuYW1lPVwiY29udGVudF90aXRsZVwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ1RpdGxlJyl9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17X18oJ1RpdHVsYXIgVGl0bGUnKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIHZhbHVlPXt0aXRsZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHVwZGF0ZVB1Ymxpc2hGb3JtKHsgdGl0bGU6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPXthZHZhbmNlZEVkaXRvciA/ICdtYXJrZG93bicgOiAndGV4dGFyZWEnfVxuICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRfZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgbGFiZWw9e19fKCdEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdNeSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBhbmQgdGhhdCcpfVxuICAgICAgICAgICAgdmFsdWU9e2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+IHVwZGF0ZVB1Ymxpc2hGb3JtKHsgZGVzY3JpcHRpb246IGFkdmFuY2VkRWRpdG9yID8gdmFsdWUgOiB2YWx1ZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZU1hcmtkb3dufVxuICAgICAgICAgICAgICBsYWJlbD17YWR2YW5jZWRFZGl0b3IgPyBfXygnU2ltcGxlIEVkaXRvcicpIDogX18oJ0FkdmFuY2VkIEVkaXRvcicpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoVGV4dDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFTQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUF2QkE7QUFpQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/publishText/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/recommendedContent/index.js": -/*!***************************************************!*\ - !*** ../ui/component/recommendedContent/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/recommendedContent/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n mature: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsNsfw\"])(props.uri)(state),\n recommendedContent: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectRecommendedContentForUri\"])(props.uri)(state),\n isSearching: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsSearching\"])(state),\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n search: function search(query, options) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doSearch\"])(query, options));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3JlY29tbWVuZGVkQ29udGVudC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcmVjb21tZW5kZWRDb250ZW50L2luZGV4LmpzP2VlMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbiAgbWFrZVNlbGVjdENsYWltSXNOc2Z3LFxuICBkb1NlYXJjaCxcbiAgbWFrZVNlbGVjdFJlY29tbWVuZGVkQ29udGVudEZvclVyaSxcbiAgc2VsZWN0SXNTZWFyY2hpbmcsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBSZWNvbW1lbmRlZFZpZGVvcyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBtYXR1cmU6IG1ha2VTZWxlY3RDbGFpbUlzTnNmdyhwcm9wcy51cmkpKHN0YXRlKSxcbiAgcmVjb21tZW5kZWRDb250ZW50OiBtYWtlU2VsZWN0UmVjb21tZW5kZWRDb250ZW50Rm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBpc1NlYXJjaGluZzogc2VsZWN0SXNTZWFyY2hpbmcoc3RhdGUpLFxuICBpc0F1dGhlbnRpY2F0ZWQ6IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgc2VhcmNoOiAocXVlcnksIG9wdGlvbnMpID0+IGRpc3BhdGNoKGRvU2VhcmNoKHF1ZXJ5LCBvcHRpb25zKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKFJlY29tbWVuZGVkVmlkZW9zKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/recommendedContent/index.js\n"); - -/***/ }), - -/***/ "../ui/component/recommendedContent/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/recommendedContent/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return RecommendedContent; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbrytv/component/ads */ \"./component/ads.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar RecommendedContent = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(RecommendedContent, _React$PureComponent);\n\n function RecommendedContent() {\n var _this;\n\n _classCallCheck(this, RecommendedContent);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(RecommendedContent).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"didSearch\", void 0);\n\n _this.didSearch = undefined;\n return _this;\n }\n\n _createClass(RecommendedContent, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.getRecommendedContent();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props = this.props,\n claim = _this$props.claim,\n uri = _this$props.uri;\n\n if (uri !== prevProps.uri) {\n this.didSearch = false;\n }\n\n if (claim && !this.didSearch) {\n this.getRecommendedContent();\n }\n }\n }, {\n key: \"getRecommendedContent\",\n value: function getRecommendedContent() {\n var _this$props2 = this.props,\n claim = _this$props2.claim,\n search = _this$props2.search,\n mature = _this$props2.mature;\n\n if (claim && claim.value && claim.claim_id) {\n var options = {\n size: 20,\n related_to: claim.claim_id,\n isBackgroundSearch: true\n };\n\n if (claim && !mature) {\n options['nsfw'] = false;\n }\n\n var title = claim.value.title;\n\n if (title && options) {\n search(title, options);\n this.didSearch = true;\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n recommendedContent = _this$props3.recommendedContent,\n isSearching = _this$props3.isSearching,\n isAuthenticated = _this$props3.isAuthenticated;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n type: \"small\",\n loading: isSearching,\n uris: recommendedContent,\n injectedItem: !isAuthenticated && true && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n type: \"video\",\n small: true\n }),\n header: __('Related'),\n empty: __('No related content found')\n });\n }\n }]);\n\n return RecommendedContent;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3JlY29tbWVuZGVkQ29udGVudC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcmVjb21tZW5kZWRDb250ZW50L3ZpZXcuanN4PzczZTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2xhaW1MaXN0IGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3QnO1xuaW1wb3J0IEFkcyBmcm9tICdsYnJ5dHYvY29tcG9uZW50L2Fkcyc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgcmVsYXRlZF90bzogc3RyaW5nLFxuICBuc2Z3PzogYm9vbGVhbixcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICBjbGFpbTogP1N0cmVhbUNsYWltLFxuICByZWNvbW1lbmRlZENvbnRlbnQ6IEFycmF5PHN0cmluZz4sXG4gIGlzU2VhcmNoaW5nOiBib29sZWFuLFxuICBzZWFyY2g6IChzdHJpbmcsIE9wdGlvbnMpID0+IHZvaWQsXG4gIG1hdHVyZTogYm9vbGVhbixcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjb21tZW5kZWRDb250ZW50IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5kaWRTZWFyY2ggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmdldFJlY29tbWVuZGVkQ29udGVudCgpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHMpIHtcbiAgICBjb25zdCB7IGNsYWltLCB1cmkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodXJpICE9PSBwcmV2UHJvcHMudXJpKSB7XG4gICAgICB0aGlzLmRpZFNlYXJjaCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjbGFpbSAmJiAhdGhpcy5kaWRTZWFyY2gpIHtcbiAgICAgIHRoaXMuZ2V0UmVjb21tZW5kZWRDb250ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVjb21tZW5kZWRDb250ZW50KCkge1xuICAgIGNvbnN0IHsgY2xhaW0sIHNlYXJjaCwgbWF0dXJlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGNsYWltICYmIGNsYWltLnZhbHVlICYmIGNsYWltLmNsYWltX2lkKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBPcHRpb25zID0geyBzaXplOiAyMCwgcmVsYXRlZF90bzogY2xhaW0uY2xhaW1faWQsIGlzQmFja2dyb3VuZFNlYXJjaDogdHJ1ZSB9O1xuICAgICAgaWYgKGNsYWltICYmICFtYXR1cmUpIHtcbiAgICAgICAgb3B0aW9uc1snbnNmdyddID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB7IHRpdGxlIH0gPSBjbGFpbS52YWx1ZTtcbiAgICAgIGlmICh0aXRsZSAmJiBvcHRpb25zKSB7XG4gICAgICAgIHNlYXJjaCh0aXRsZSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGlkU2VhcmNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaWRTZWFyY2g6ID9ib29sZWFuO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHJlY29tbWVuZGVkQ29udGVudCwgaXNTZWFyY2hpbmcsIGlzQXV0aGVudGljYXRlZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhaW1MaXN0XG4gICAgICAgIHR5cGU9XCJzbWFsbFwiXG4gICAgICAgIGxvYWRpbmc9e2lzU2VhcmNoaW5nfVxuICAgICAgICB1cmlzPXtyZWNvbW1lbmRlZENvbnRlbnR9XG4gICAgICAgIGluamVjdGVkSXRlbT17IWlzQXV0aGVudGljYXRlZCAmJiBJU19XRUIgJiYgPEFkcyB0eXBlPVwidmlkZW9cIiBzbWFsbCAvPn1cbiAgICAgICAgaGVhZGVyPXtfXygnUmVsYXRlZCcpfVxuICAgICAgICBlbXB0eT17X18oJ05vIHJlbGF0ZWQgY29udGVudCBmb3VuZCcpfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdCQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFIQTtBQUlBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFOQTtBQVNBOzs7O0FBdERBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/recommendedContent/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/rewardAuthIntro/index.js": -/*!************************************************!*\ - !*** ../ui/component/rewardAuthIntro/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/rewardAuthIntro/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n totalRewardValue: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUnclaimedRewardValue\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZEF1dGhJbnRyby9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcmV3YXJkQXV0aEludHJvL2luZGV4LmpzP2YzNGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVuY2xhaW1lZFJld2FyZFZhbHVlIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgUmV3YXJkQXV0aEludHJvIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHRvdGFsUmV3YXJkVmFsdWU6IHNlbGVjdFVuY2xhaW1lZFJld2FyZFZhbHVlKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIG51bGxcbikoUmV3YXJkQXV0aEludHJvKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/rewardAuthIntro/index.js\n"); - -/***/ }), - -/***/ "../ui/component/rewardAuthIntro/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/rewardAuthIntro/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n\n\n\n\nfunction RewardAuthIntro(props) {\n var totalRewardValue = props.totalRewardValue,\n title = props.title;\n var totalRewardRounded = Math.floor(totalRewardValue / 10) * 10;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: title || __('Sign In to lbry.tv to Earn Rewards'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n tokens: {\n credit_amount: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n inheritStyle: true,\n amount: totalRewardRounded\n })\n }\n }, \"A lbry.tv account allows you to earn more than %credit_amount% in rewards, backup your data, and get content and security updates.\"),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=/$/\").concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"REWARDS\"]),\n label: __('Unlock Rewards')\n })\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RewardAuthIntro);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZEF1dGhJbnRyby92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcmV3YXJkQXV0aEludHJvL3ZpZXcuanN4Pzg3ZWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENyZWRpdEFtb3VudCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NyZWRpdC1hbW91bnQnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgYmFsYW5jZTogbnVtYmVyLFxuICB0b3RhbFJld2FyZFZhbHVlOiBudW1iZXIsXG4gIHRpdGxlPzogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gUmV3YXJkQXV0aEludHJvKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHRvdGFsUmV3YXJkVmFsdWUsIHRpdGxlIH0gPSBwcm9wcztcbiAgY29uc3QgdG90YWxSZXdhcmRSb3VuZGVkID0gTWF0aC5mbG9vcih0b3RhbFJld2FyZFZhbHVlIC8gMTApICogMTA7XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgdGl0bGU9e3RpdGxlIHx8IF9fKCdTaWduIEluIHRvIGxicnkudHYgdG8gRWFybiBSZXdhcmRzJyl9XG4gICAgICBzdWJ0aXRsZT17XG4gICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgY3JlZGl0X2Ftb3VudDogPENyZWRpdEFtb3VudCBpbmhlcml0U3R5bGUgYW1vdW50PXt0b3RhbFJld2FyZFJvdW5kZWR9IC8+LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICBBIGxicnkudHYgYWNjb3VudCBhbGxvd3MgeW91IHRvIGVhcm4gbW9yZSB0aGFuICVjcmVkaXRfYW1vdW50JSBpbiByZXdhcmRzLCBiYWNrdXAgeW91ciBkYXRhLCBhbmQgZ2V0IGNvbnRlbnRcbiAgICAgICAgICBhbmQgc2VjdXJpdHkgdXBkYXRlcy5cbiAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgIH1cbiAgICAgIGFjdGlvbnM9e1xuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLkFVVEh9P3JlZGlyZWN0PS8kLyR7UEFHRVMuUkVXQVJEU31gfVxuICAgICAgICAgIGxhYmVsPXtfXygnVW5sb2NrIFJld2FyZHMnKX1cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSZXdhcmRBdXRoSW50cm87XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQVNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFiQTtBQXFCQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/rewardAuthIntro/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/rewardLink/index.js": -/*!*******************************************!*\ - !*** ../ui/component/rewardLink/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/rewardLink/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsRewardClaimPending\"])()(state, props),\n reward: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectRewardByClaimCode\"])()(state, props.claim_code)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n claimReward: function claimReward(reward) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doClaimRewardType\"])(reward.reward_type, {\n notifyError: true,\n params: {\n claim_code: reward.claim_code\n }\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZExpbmsvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3Jld2FyZExpbmsvaW5kZXguanM/ZmIyMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdFJld2FyZEJ5Q2xhaW1Db2RlLCBtYWtlU2VsZWN0SXNSZXdhcmRDbGFpbVBlbmRpbmcsIGRvQ2xhaW1SZXdhcmRUeXBlIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgUmV3YXJkTGluayBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBpc1BlbmRpbmc6IG1ha2VTZWxlY3RJc1Jld2FyZENsYWltUGVuZGluZygpKHN0YXRlLCBwcm9wcyksXG4gIHJld2FyZDogbWFrZVNlbGVjdFJld2FyZEJ5Q2xhaW1Db2RlKCkoc3RhdGUsIHByb3BzLmNsYWltX2NvZGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbGFpbVJld2FyZDogcmV3YXJkID0+XG4gICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkLnJld2FyZF90eXBlLCB7IG5vdGlmeUVycm9yOiB0cnVlLCBwYXJhbXM6IHsgY2xhaW1fY29kZTogcmV3YXJkLmNsYWltX2NvZGUgfSB9KSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKFJld2FyZExpbmspO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/rewardLink/index.js\n"); - -/***/ }), - -/***/ "../ui/component/rewardLink/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/rewardLink/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\nvar RewardLink = function RewardLink(props) {\n var reward = props.reward,\n claimReward = props.claimReward,\n label = props.label,\n isPending = props.isPending,\n button = props.button;\n var displayLabel = label;\n\n if (isPending) {\n displayLabel = __('Claiming...');\n } else if (label) {\n displayLabel = label;\n } else if (reward && reward.reward_range && reward.reward_range.includes('-')) {\n displayLabel = __('Get %range% LBC', {\n range: reward.reward_range\n });\n } else if (reward && reward.reward_amount > 0) {\n displayLabel = __('Get %amount% LBC', {\n amount: reward.reward_amount\n });\n } else {\n displayLabel = __('Get ??? LBC');\n }\n\n return !reward ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: button ? 'primary' : 'link',\n disabled: isPending,\n label: displayLabel,\n onClick: function onClick() {\n claimReward(reward);\n }\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RewardLink);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZExpbmsvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3Jld2FyZExpbmsvdmlldy5qc3g/Yjg2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUmV3YXJkID0ge1xuICByZXdhcmRfYW1vdW50OiBudW1iZXIsXG4gIHJld2FyZF9yYW5nZTogc3RyaW5nLFxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXNQZW5kaW5nOiBib29sZWFuLFxuICBsYWJlbDogP3N0cmluZyxcbiAgcmV3YXJkOiBSZXdhcmQsXG4gIGJ1dHRvbjogP2Jvb2xlYW4sXG4gIGNsYWltUmV3YXJkOiBSZXdhcmQgPT4gdm9pZCxcbn07XG5cbmNvbnN0IFJld2FyZExpbmsgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmV3YXJkLCBjbGFpbVJld2FyZCwgbGFiZWwsIGlzUGVuZGluZywgYnV0dG9uIH0gPSBwcm9wcztcbiAgbGV0IGRpc3BsYXlMYWJlbCA9IGxhYmVsO1xuICBpZiAoaXNQZW5kaW5nKSB7XG4gICAgZGlzcGxheUxhYmVsID0gX18oJ0NsYWltaW5nLi4uJyk7XG4gIH0gZWxzZSBpZiAobGFiZWwpIHtcbiAgICBkaXNwbGF5TGFiZWwgPSBsYWJlbDtcbiAgfSBlbHNlIGlmIChyZXdhcmQgJiYgcmV3YXJkLnJld2FyZF9yYW5nZSAmJiByZXdhcmQucmV3YXJkX3JhbmdlLmluY2x1ZGVzKCctJykpIHtcbiAgICBkaXNwbGF5TGFiZWwgPSBfXygnR2V0ICVyYW5nZSUgTEJDJywgeyByYW5nZTogcmV3YXJkLnJld2FyZF9yYW5nZSB9KTtcbiAgfSBlbHNlIGlmIChyZXdhcmQgJiYgcmV3YXJkLnJld2FyZF9hbW91bnQgPiAwKSB7XG4gICAgZGlzcGxheUxhYmVsID0gX18oJ0dldCAlYW1vdW50JSBMQkMnLCB7IGFtb3VudDogcmV3YXJkLnJld2FyZF9hbW91bnQgfSk7XG4gIH0gZWxzZSB7XG4gICAgZGlzcGxheUxhYmVsID0gX18oJ0dldCA/Pz8gTEJDJyk7XG4gIH1cblxuICByZXR1cm4gIXJld2FyZCA/IG51bGwgOiAoXG4gICAgPEJ1dHRvblxuICAgICAgYnV0dG9uPXtidXR0b24gPyAncHJpbWFyeScgOiAnbGluayd9XG4gICAgICBkaXNhYmxlZD17aXNQZW5kaW5nfVxuICAgICAgbGFiZWw9e2Rpc3BsYXlMYWJlbH1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgY2xhaW1SZXdhcmQocmV3YXJkKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJld2FyZExpbms7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBY0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQWhCQTtBQUNBO0FBMEJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/rewardLink/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/rewardListClaimed/index.js": -/*!**************************************************!*\ - !*** ../ui/component/rewardListClaimed/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/rewardListClaimed/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimedRewards\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZExpc3RDbGFpbWVkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9yZXdhcmRMaXN0Q2xhaW1lZC9pbmRleC5qcz9lNDIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RDbGFpbWVkUmV3YXJkcyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFJld2FyZExpc3RDbGFpbWVkIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHJld2FyZHM6IHNlbGVjdENsYWltZWRSZXdhcmRzKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIG51bGxcbikoUmV3YXJkTGlzdENsYWltZWQpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/rewardListClaimed/index.js\n"); - -/***/ }), - -/***/ "../ui/component/rewardListClaimed/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/rewardListClaimed/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_transaction_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/transaction-link */ \"../ui/component/common/transaction-link.jsx\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nvar RewardListClaimed = function RewardListClaimed(props) {\n var rewards = props.rewards;\n\n if (!rewards || !rewards.length) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"header\", {\n className: \"table__header\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table__header-text\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"card__title card__title--deprecated\"\n }, __('Claimed Rewards')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('Reward history is tied to your email. In case of lost or multiple wallets, your balance may differ from the amounts claimed'), \".\"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"table\", {\n className: \"table table--rewards\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"thead\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Title')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Amount')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Transaction')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", null, __('Date')))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tbody\", null, rewards.reverse().map(function (reward) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", {\n key: reward.id\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, reward.reward_title), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, reward.reward_amount), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, reward.transaction_id && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_transaction_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n id: reward.transaction_id\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", null, moment__WEBPACK_IMPORTED_MODULE_2___default()(reward.created_at).format('LLL')));\n })))));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RewardListClaimed);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZExpc3RDbGFpbWVkL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9yZXdhcmRMaXN0Q2xhaW1lZC92aWV3LmpzeD9hODBmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvblRyYW5zYWN0aW9uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vdHJhbnNhY3Rpb24tbGluayc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbnR5cGUgUmV3YXJkID0ge1xuICBpZDogc3RyaW5nLFxuICByZXdhcmRfdGl0bGU6IHN0cmluZyxcbiAgcmV3YXJkX2Ftb3VudDogbnVtYmVyLFxuICB0cmFuc2FjdGlvbl9pZDogc3RyaW5nLFxuICBjcmVhdGVkX2F0OiBzdHJpbmcsXG59O1xuXG50eXBlIFByb3BzID0ge1xuICByZXdhcmRzOiBBcnJheTxSZXdhcmQ+LFxufTtcblxuY29uc3QgUmV3YXJkTGlzdENsYWltZWQgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmV3YXJkcyB9ID0gcHJvcHM7XG5cbiAgaWYgKCFyZXdhcmRzIHx8ICFyZXdhcmRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJjYXJkXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cInRhYmxlX19oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJsZV9faGVhZGVyLXRleHRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGUgY2FyZF9fdGl0bGUtLWRlcHJlY2F0ZWRcIj57X18oJ0NsYWltZWQgUmV3YXJkcycpfTwvaDI+XG5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICAnUmV3YXJkIGhpc3RvcnkgaXMgdGllZCB0byB5b3VyIGVtYWlsLiBJbiBjYXNlIG9mIGxvc3Qgb3IgbXVsdGlwbGUgd2FsbGV0cywgeW91ciBiYWxhbmNlIG1heSBkaWZmZXIgZnJvbSB0aGUgYW1vdW50cyBjbGFpbWVkJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFibGVfX3dyYXBwZXJcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInRhYmxlIHRhYmxlLS1yZXdhcmRzXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+e19fKCdUaXRsZScpfTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57X18oJ0Ftb3VudCcpfTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57X18oJ1RyYW5zYWN0aW9uJyl9PC90aD5cbiAgICAgICAgICAgICAgPHRoPntfXygnRGF0ZScpfTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge3Jld2FyZHMucmV2ZXJzZSgpLm1hcChyZXdhcmQgPT4gKFxuICAgICAgICAgICAgICA8dHIga2V5PXtyZXdhcmQuaWR9PlxuICAgICAgICAgICAgICAgIDx0ZD57cmV3YXJkLnJld2FyZF90aXRsZX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57cmV3YXJkLnJld2FyZF9hbW91bnR9PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e3Jld2FyZC50cmFuc2FjdGlvbl9pZCAmJiA8QnV0dG9uVHJhbnNhY3Rpb24gaWQ9e3Jld2FyZC50cmFuc2FjdGlvbl9pZH0gLz59PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e21vbWVudChyZXdhcmQuY3JlYXRlZF9hdCkuZm9ybWF0KCdMTEwnKX08L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJld2FyZExpc3RDbGFpbWVkO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBVUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQTlCQTtBQVBBO0FBQ0E7QUErQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/rewardListClaimed/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/rewardTile/index.js": -/*!*******************************************!*\ - !*** ../ui/component/rewardTile/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/rewardTile/view.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUser\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openRewardCodeModal: function openRewardCodeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"REWARD_GENERATED_CODE\"]));\n },\n openSetReferrerModal: function openSetReferrerModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_REFERRER\"]));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZFRpbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3Jld2FyZFRpbGUvaW5kZXguanM/NTMzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBSZXdhcmRUaWxlIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBzZWxlY3RVc2VyIH0gZnJvbSAnbGJyeWluYyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxufSk7XG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3BlblJld2FyZENvZGVNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLlJFV0FSRF9HRU5FUkFURURfQ09ERSkpLFxuICBvcGVuU2V0UmVmZXJyZXJNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLlNFVF9SRUZFUlJFUikpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShSZXdhcmRUaWxlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/rewardTile/index.js\n"); - -/***/ }), - -/***/ "../ui/component/rewardTile/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/rewardTile/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_rewardLink__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/rewardLink */ \"../ui/component/rewardLink/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\nvar RewardTile = function RewardTile(props) {\n var reward = props.reward,\n openRewardCodeModal = props.openRewardCodeModal,\n openSetReferrerModal = props.openSetReferrerModal,\n user = props.user;\n var referrerSet = user && user.invited_by_id;\n var claimed = !!reward.transaction_id;\n var customActionsRewards = [lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_REFERRAL, lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_REFEREE];\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: reward.reward_title,\n subtitle: reward.reward_description,\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_GENERATED_CODE && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"primary\",\n onClick: openRewardCodeModal,\n label: __('Enter Code')\n }), reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_REFERRAL && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/invite\",\n label: __('Go to Invites')\n }), reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_6__[\"rewards\"].TYPE_REFEREE && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, referrerSet && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardLink__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: true,\n reward_type: reward.reward_type\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: referrerSet ? 'link' : 'primary',\n onClick: openSetReferrerModal,\n label: referrerSet ? __('Change Inviter') : __('Set Inviter')\n })), !customActionsRewards.some(function (i) {\n return i === reward.reward_type;\n }) && (claimed ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"COMPLETED\"]\n }), \" \", __('Reward claimed.')) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardLink__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: true,\n claim_code: reward.claim_code\n })))\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RewardTile);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3Jld2FyZFRpbGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3Jld2FyZFRpbGUvdmlldy5qc3g/ODcwYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0IFJld2FyZExpbmsgZnJvbSAnY29tcG9uZW50L3Jld2FyZExpbmsnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgeyByZXdhcmRzIH0gZnJvbSAnbGJyeWluYyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wZW5SZXdhcmRDb2RlTW9kYWw6ICgpID0+IHZvaWQsXG4gIG9wZW5TZXRSZWZlcnJlck1vZGFsOiAoKSA9PiB2b2lkLFxuICByZXdhcmQ6IHtcbiAgICBpZDogc3RyaW5nLFxuICAgIHJld2FyZF90aXRsZTogc3RyaW5nLFxuICAgIHJld2FyZF9hbW91bnQ6IG51bWJlcixcbiAgICByZXdhcmRfcmFuZ2U/OiBzdHJpbmcsXG4gICAgdHJhbnNhY3Rpb25faWQ6IHN0cmluZyxcbiAgICBjcmVhdGVkX2F0OiBzdHJpbmcsXG4gICAgcmV3YXJkX2Rlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgcmV3YXJkX3R5cGU6IHN0cmluZyxcbiAgICBjbGFpbV9jb2RlOiBzdHJpbmcsXG4gIH0sXG4gIHVzZXI6IFVzZXIsXG59O1xuXG5jb25zdCBSZXdhcmRUaWxlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IHJld2FyZCwgb3BlblJld2FyZENvZGVNb2RhbCwgb3BlblNldFJlZmVycmVyTW9kYWwsIHVzZXIgfSA9IHByb3BzO1xuICBjb25zdCByZWZlcnJlclNldCA9IHVzZXIgJiYgdXNlci5pbnZpdGVkX2J5X2lkO1xuICBjb25zdCBjbGFpbWVkID0gISFyZXdhcmQudHJhbnNhY3Rpb25faWQ7XG4gIGNvbnN0IGN1c3RvbUFjdGlvbnNSZXdhcmRzID0gW3Jld2FyZHMuVFlQRV9SRUZFUlJBTCwgcmV3YXJkcy5UWVBFX1JFRkVSRUVdO1xuXG4gIHJldHVybiAoXG4gICAgPENhcmRcbiAgICAgIHRpdGxlPXtyZXdhcmQucmV3YXJkX3RpdGxlfVxuICAgICAgc3VidGl0bGU9e3Jld2FyZC5yZXdhcmRfZGVzY3JpcHRpb259XG4gICAgICBhY3Rpb25zPXtcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAge3Jld2FyZC5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkcy5UWVBFX0dFTkVSQVRFRF9DT0RFICYmIChcbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG9uQ2xpY2s9e29wZW5SZXdhcmRDb2RlTW9kYWx9IGxhYmVsPXtfXygnRW50ZXIgQ29kZScpfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3Jld2FyZC5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkcy5UWVBFX1JFRkVSUkFMICYmIChcbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG5hdmlnYXRlPVwiLyQvaW52aXRlXCIgbGFiZWw9e19fKCdHbyB0byBJbnZpdGVzJyl9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7cmV3YXJkLnJld2FyZF90eXBlID09PSByZXdhcmRzLlRZUEVfUkVGRVJFRSAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7cmVmZXJyZXJTZXQgJiYgPFJld2FyZExpbmsgYnV0dG9uIHJld2FyZF90eXBlPXtyZXdhcmQucmV3YXJkX3R5cGV9IC8+fVxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYnV0dG9uPXtyZWZlcnJlclNldCA/ICdsaW5rJyA6ICdwcmltYXJ5J31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvcGVuU2V0UmVmZXJyZXJNb2RhbH1cbiAgICAgICAgICAgICAgICBsYWJlbD17cmVmZXJyZXJTZXQgPyBfXygnQ2hhbmdlIEludml0ZXInKSA6IF9fKCdTZXQgSW52aXRlcicpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7IWN1c3RvbUFjdGlvbnNSZXdhcmRzLnNvbWUoaSA9PiBpID09PSByZXdhcmQucmV3YXJkX3R5cGUpICYmXG4gICAgICAgICAgICAoY2xhaW1lZCA/IChcbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPEljb24gaWNvbj17SUNPTlMuQ09NUExFVEVEfSAvPiB7X18oJ1Jld2FyZCBjbGFpbWVkLicpfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8UmV3YXJkTGluayBidXR0b24gY2xhaW1fY29kZT17cmV3YXJkLmNsYWltX2NvZGV9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJld2FyZFRpbGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWtCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBT0E7QUFBQTtBQUdBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUEzQkE7QUFQQTtBQUNBO0FBeUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/rewardTile/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/router/index.js": -/*!***************************************!*\ - !*** ../ui/component/router/index.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/router/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nvar select = function select(state) {\n var _state$router$locatio = state.router.location,\n pathname = _state$router$locatio.pathname,\n hash = _state$router$locatio.hash;\n var urlPath = pathname + hash; // Remove the leading \"/\" added by the browser\n\n var path = urlPath.slice(1).replace(/:/g, '#');\n var uri;\n\n try {\n uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"normalizeURI\"])(path);\n } catch (e) {\n var match = path.match(/[#/:]/);\n\n if (!path.startsWith('$/') && match && match.index) {\n uri = \"lbry://\".concat(path.slice(0, match.index));\n }\n }\n\n return {\n uri: uri,\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectTitleForUri\"])(uri)(state),\n currentScroll: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectScrollStartingPosition\"])(state),\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserVerifiedEmail\"])(state),\n welcomeVersion: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectWelcomeVersion\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3JvdXRlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcm91dGVyL2luZGV4LmpzP2U1ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBzZWxlY3RTY3JvbGxTdGFydGluZ1Bvc2l0aW9uLCBzZWxlY3RXZWxjb21lVmVyc2lvbiB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9hcHAnO1xuaW1wb3J0IFJvdXRlciBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgbm9ybWFsaXplVVJJLCBtYWtlU2VsZWN0VGl0bGVGb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4ge1xuICBjb25zdCB7IHBhdGhuYW1lLCBoYXNoIH0gPSBzdGF0ZS5yb3V0ZXIubG9jYXRpb247XG4gIGNvbnN0IHVybFBhdGggPSBwYXRobmFtZSArIGhhc2g7XG4gIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBcIi9cIiBhZGRlZCBieSB0aGUgYnJvd3NlclxuICBjb25zdCBwYXRoID0gdXJsUGF0aC5zbGljZSgxKS5yZXBsYWNlKC86L2csICcjJyk7XG5cbiAgbGV0IHVyaTtcbiAgdHJ5IHtcbiAgICB1cmkgPSBub3JtYWxpemVVUkkocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCBtYXRjaCA9IHBhdGgubWF0Y2goL1sjLzpdLyk7XG5cbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnJC8nKSAmJiBtYXRjaCAmJiBtYXRjaC5pbmRleCkge1xuICAgICAgdXJpID0gYGxicnk6Ly8ke3BhdGguc2xpY2UoMCwgbWF0Y2guaW5kZXgpfWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB1cmksXG4gICAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaSh1cmkpKHN0YXRlKSxcbiAgICBjdXJyZW50U2Nyb2xsOiBzZWxlY3RTY3JvbGxTdGFydGluZ1Bvc2l0aW9uKHN0YXRlKSxcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsKHN0YXRlKSxcbiAgICB3ZWxjb21lVmVyc2lvbjogc2VsZWN0V2VsY29tZVZlcnNpb24oc3RhdGUpLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKFJvdXRlcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBakJBO0FBQ0E7QUF5QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/router/index.js\n"); - -/***/ }), - -/***/ "../ui/component/router/view.jsx": -/*!***************************************!*\ - !*** ../ui/component/router/view.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var page_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! page/settings */ \"../ui/page/settings/index.js\");\n/* harmony import */ var page_help__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! page/help */ \"../ui/page/help/index.js\");\n/* harmony import */ var page_report__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! page/report */ \"../ui/page/report/index.js\");\n/* harmony import */ var page_show__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! page/show */ \"../ui/page/show/index.js\");\n/* harmony import */ var page_publish__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! page/publish */ \"../ui/page/publish/index.js\");\n/* harmony import */ var page_discover__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! page/discover */ \"../ui/page/discover/index.js\");\n/* harmony import */ var page_home__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! page/home */ \"../ui/page/home/index.js\");\n/* harmony import */ var page_invited__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! page/invited */ \"../ui/page/invited/index.js\");\n/* harmony import */ var page_rewards__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! page/rewards */ \"../ui/page/rewards/index.js\");\n/* harmony import */ var page_fileListDownloaded__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! page/fileListDownloaded */ \"../ui/page/fileListDownloaded/index.js\");\n/* harmony import */ var page_fileListPublished__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! page/fileListPublished */ \"../ui/page/fileListPublished/index.js\");\n/* harmony import */ var page_transactionHistory__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! page/transactionHistory */ \"../ui/page/transactionHistory/index.js\");\n/* harmony import */ var page_invite__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! page/invite */ \"../ui/page/invite/index.js\");\n/* harmony import */ var page_search__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! page/search */ \"../ui/page/search/index.js\");\n/* harmony import */ var page_library__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! page/library */ \"../ui/page/library/index.js\");\n/* harmony import */ var page_wallet__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! page/wallet */ \"../ui/page/wallet/index.js\");\n/* harmony import */ var page_tagsFollowing__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! page/tagsFollowing */ \"../ui/page/tagsFollowing/index.js\");\n/* harmony import */ var page_channelsFollowing__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! page/channelsFollowing */ \"../ui/page/channelsFollowing/index.js\");\n/* harmony import */ var page_channelsFollowingDiscover__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! page/channelsFollowingDiscover */ \"../ui/page/channelsFollowingDiscover/index.js\");\n/* harmony import */ var page_tagsFollowingManage__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! page/tagsFollowingManage */ \"../ui/page/tagsFollowingManage/index.js\");\n/* harmony import */ var page_listBlocked__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! page/listBlocked */ \"../ui/page/listBlocked/index.js\");\n/* harmony import */ var page_fourOhFour__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! page/fourOhFour */ \"../ui/page/fourOhFour/index.js\");\n/* harmony import */ var page_signIn__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! page/signIn */ \"../ui/page/signIn/index.js\");\n/* harmony import */ var page_signInVerify__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! page/signInVerify */ \"../ui/page/signInVerify/index.js\");\n/* harmony import */ var page_channels__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! page/channels */ \"../ui/page/channels/index.js\");\n/* harmony import */ var page_embedWrapper__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! page/embedWrapper */ \"../ui/page/embedWrapper/index.js\");\n/* harmony import */ var page_top__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! page/top */ \"../ui/page/top/index.js\");\n/* harmony import */ var page_welcome__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! page/welcome */ \"../ui/page/welcome/index.js\");\n/* harmony import */ var page_creatorDashboard__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! page/creatorDashboard */ \"../ui/page/creatorDashboard/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_32__);\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! config */ \"../config.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(config__WEBPACK_IMPORTED_MODULE_33__);\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Tell the browser we are handling scroll restoration\n\nif ('scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n}\n\nfunction PrivateRoute(props) {\n var Component = props.component,\n isAuthenticated = props.isAuthenticated,\n rest = _objectWithoutProperties(props, [\"component\", \"isAuthenticated\"]);\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], _extends({}, rest, {\n render: function render(props) {\n return isAuthenticated || !true ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Component, props) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=\").concat(props.location.pathname)\n });\n }\n }));\n}\n\nfunction AppRouter(props) {\n var currentScroll = props.currentScroll,\n _props$location = props.location,\n pathname = _props$location.pathname,\n search = _props$location.search,\n isAuthenticated = props.isAuthenticated,\n history = props.history,\n uri = props.uri,\n title = props.title,\n welcomeVersion = props.welcomeVersion;\n var entries = history.entries;\n var entryIndex = history.index;\n var urlParams = new URLSearchParams(search);\n var resetScroll = urlParams.get('reset_scroll');\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (uri) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_32__[\"parseURI\"])(uri),\n channelName = _parseURI.channelName,\n streamName = _parseURI.streamName;\n\n if (typeof title !== 'undefined' && title !== '') {\n document.title = title;\n } else if (streamName) {\n document.title = streamName;\n } else if (channelName) {\n document.title = channelName;\n } else {\n document.title = true ? config__WEBPACK_IMPORTED_MODULE_33__[\"SITE_TITLE\"] : undefined;\n }\n } else {\n document.title = true ? config__WEBPACK_IMPORTED_MODULE_33__[\"SITE_TITLE\"] : undefined;\n }\n\n return function () {\n document.title = true ? config__WEBPACK_IMPORTED_MODULE_33__[\"SITE_TITLE\"] : undefined;\n };\n }, [entries, entryIndex, title, uri]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n window.scrollTo(0, currentScroll);\n }, [currentScroll, pathname, resetScroll]); // react-router doesn't decode pathanmes before doing the route matching check\n // We have to redirect here because if we redirect on the server, it might get encoded again\n // in the browser causing a redirect loop\n\n var decodedUrl = decodeURIComponent(pathname) + search;\n\n if (decodedUrl !== pathname + search) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n to: decodedUrl\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Switch\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n from: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DEPRECATED__CHANNELS_FOLLOWING_MANAGE\"]),\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING_DISCOVER\"])\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n from: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DEPRECATED__CHANNELS_FOLLOWING\"]),\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING\"])\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n from: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DEPRECATED__TAGS_FOLLOWING\"]),\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING\"])\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Redirect\"], {\n from: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DEPRECATED__TAGS_FOLLOWING_MANAGE\"]),\n to: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING_MANAGE\"])\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/\",\n exact: true,\n component: page_home__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"]),\n exact: true,\n component: page_discover__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"]),\n exact: true,\n component: page_signIn__WEBPACK_IMPORTED_MODULE_25__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"/*\"),\n exact: true,\n component: page_signIn__WEBPACK_IMPORTED_MODULE_25__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"WELCOME\"]),\n exact: true,\n component: page_welcome__WEBPACK_IMPORTED_MODULE_30__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING\"]),\n exact: true,\n component: page_tagsFollowing__WEBPACK_IMPORTED_MODULE_19__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING\"]),\n exact: true,\n component: isAuthenticated || !true ? page_channelsFollowing__WEBPACK_IMPORTED_MODULE_20__[\"default\"] : page_discover__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING_DISCOVER\"]),\n exact: true,\n component: page_channelsFollowingDiscover__WEBPACK_IMPORTED_MODULE_21__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"]),\n exact: true,\n component: page_help__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH_VERIFY\"]),\n exact: true,\n component: page_signInVerify__WEBPACK_IMPORTED_MODULE_26__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"SEARCH\"]),\n exact: true,\n component: page_search__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TOP\"]),\n exact: true,\n component: page_top__WEBPACK_IMPORTED_MODULE_29__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"]),\n exact: true,\n component: page_settings__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"], \"/:referrer\"),\n exact: true,\n component: page_invited__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"]),\n component: page_invite__WEBPACK_IMPORTED_MODULE_15__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOADED\"]),\n component: page_fileListDownloaded__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISHED\"]),\n component: page_fileListPublished__WEBPACK_IMPORTED_MODULE_13__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CREATOR_DASHBOARD\"]),\n component: page_creatorDashboard__WEBPACK_IMPORTED_MODULE_31__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"]),\n component: page_publish__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"REPORT\"]),\n component: page_report__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"REWARDS\"]),\n component: page_rewards__WEBPACK_IMPORTED_MODULE_11__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TRANSACTIONS\"]),\n component: page_transactionHistory__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"LIBRARY\"]),\n component: page_library__WEBPACK_IMPORTED_MODULE_17__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING_MANAGE\"]),\n component: page_tagsFollowingManage__WEBPACK_IMPORTED_MODULE_22__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"BLOCKED\"]),\n component: page_listBlocked__WEBPACK_IMPORTED_MODULE_23__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"WALLET\"]),\n exact: true,\n component: page_wallet__WEBPACK_IMPORTED_MODULE_18__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PrivateRoute, _extends({}, props, {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS\"]),\n component: page_channels__WEBPACK_IMPORTED_MODULE_27__[\"default\"]\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"EMBED\"], \"/:claimName\"),\n exact: true,\n component: page_embedWrapper__WEBPACK_IMPORTED_MODULE_28__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"EMBED\"], \"/:claimName/:claimId\"),\n exact: true,\n component: page_embedWrapper__WEBPACK_IMPORTED_MODULE_28__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/:claimName\",\n exact: true,\n component: page_show__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/:claimName/:streamName\",\n exact: true,\n component: page_show__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Route\"], {\n path: \"/*\",\n component: page_fourOhFour__WEBPACK_IMPORTED_MODULE_24__[\"default\"]\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(AppRouter));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3JvdXRlci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvcm91dGVyL3ZpZXcuanN4Pzg4YTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm91dGUsIFJlZGlyZWN0LCBTd2l0Y2gsIHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBTZXR0aW5nc1BhZ2UgZnJvbSAncGFnZS9zZXR0aW5ncyc7XG5pbXBvcnQgSGVscFBhZ2UgZnJvbSAncGFnZS9oZWxwJztcbmltcG9ydCBSZXBvcnRQYWdlIGZyb20gJ3BhZ2UvcmVwb3J0JztcbmltcG9ydCBTaG93UGFnZSBmcm9tICdwYWdlL3Nob3cnO1xuaW1wb3J0IFB1Ymxpc2hQYWdlIGZyb20gJ3BhZ2UvcHVibGlzaCc7XG5pbXBvcnQgRGlzY292ZXJQYWdlIGZyb20gJ3BhZ2UvZGlzY292ZXInO1xuaW1wb3J0IEhvbWVQYWdlIGZyb20gJ3BhZ2UvaG9tZSc7XG5pbXBvcnQgSW52aXRlZFBhZ2UgZnJvbSAncGFnZS9pbnZpdGVkJztcbmltcG9ydCBSZXdhcmRzUGFnZSBmcm9tICdwYWdlL3Jld2FyZHMnO1xuaW1wb3J0IEZpbGVMaXN0RG93bmxvYWRlZCBmcm9tICdwYWdlL2ZpbGVMaXN0RG93bmxvYWRlZCc7XG5pbXBvcnQgRmlsZUxpc3RQdWJsaXNoZWQgZnJvbSAncGFnZS9maWxlTGlzdFB1Ymxpc2hlZCc7XG5pbXBvcnQgVHJhbnNhY3Rpb25IaXN0b3J5UGFnZSBmcm9tICdwYWdlL3RyYW5zYWN0aW9uSGlzdG9yeSc7XG5pbXBvcnQgSW52aXRlUGFnZSBmcm9tICdwYWdlL2ludml0ZSc7XG5pbXBvcnQgU2VhcmNoUGFnZSBmcm9tICdwYWdlL3NlYXJjaCc7XG5pbXBvcnQgTGlicmFyeVBhZ2UgZnJvbSAncGFnZS9saWJyYXJ5JztcbmltcG9ydCBXYWxsZXRQYWdlIGZyb20gJ3BhZ2Uvd2FsbGV0JztcbmltcG9ydCBUYWdzRm9sbG93aW5nUGFnZSBmcm9tICdwYWdlL3RhZ3NGb2xsb3dpbmcnO1xuaW1wb3J0IENoYW5uZWxzRm9sbG93aW5nUGFnZSBmcm9tICdwYWdlL2NoYW5uZWxzRm9sbG93aW5nJztcbmltcG9ydCBDaGFubmVsc0ZvbGxvd2luZ0Rpc2NvdmVyUGFnZSBmcm9tICdwYWdlL2NoYW5uZWxzRm9sbG93aW5nRGlzY292ZXInO1xuaW1wb3J0IFRhZ3NGb2xsb3dpbmdNYW5hZ2VQYWdlIGZyb20gJ3BhZ2UvdGFnc0ZvbGxvd2luZ01hbmFnZSc7XG5pbXBvcnQgTGlzdEJsb2NrZWRQYWdlIGZyb20gJ3BhZ2UvbGlzdEJsb2NrZWQnO1xuaW1wb3J0IEZvdXJPaEZvdXJQYWdlIGZyb20gJ3BhZ2UvZm91ck9oRm91cic7XG5pbXBvcnQgU2lnbkluUGFnZSBmcm9tICdwYWdlL3NpZ25Jbic7XG5pbXBvcnQgU2lnbkluVmVyaWZ5UGFnZSBmcm9tICdwYWdlL3NpZ25JblZlcmlmeSc7XG5pbXBvcnQgQ2hhbm5lbHNQYWdlIGZyb20gJ3BhZ2UvY2hhbm5lbHMnO1xuaW1wb3J0IEVtYmVkV3JhcHBlclBhZ2UgZnJvbSAncGFnZS9lbWJlZFdyYXBwZXInO1xuaW1wb3J0IFRvcFBhZ2UgZnJvbSAncGFnZS90b3AnO1xuaW1wb3J0IFdlbGNvbWUgZnJvbSAncGFnZS93ZWxjb21lJztcbmltcG9ydCBDcmVhdG9yRGFzaGJvYXJkIGZyb20gJ3BhZ2UvY3JlYXRvckRhc2hib2FyZCc7XG5pbXBvcnQgeyBwYXJzZVVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgU0lURV9USVRMRSwgV0VMQ09NRV9WRVJTSU9OIH0gZnJvbSAnY29uZmlnJztcblxuLy8gVGVsbCB0aGUgYnJvd3NlciB3ZSBhcmUgaGFuZGxpbmcgc2Nyb2xsIHJlc3RvcmF0aW9uXG5pZiAoJ3Njcm9sbFJlc3RvcmF0aW9uJyBpbiBoaXN0b3J5KSB7XG4gIGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJztcbn1cblxudHlwZSBQcml2YXRlUm91dGVQcm9wcyA9IHtcbiAgY29tcG9uZW50OiBhbnksXG4gIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbixcbiAgbG9jYXRpb246IHsgcGF0aG5hbWU6IHN0cmluZyB9LFxufTtcblxuZnVuY3Rpb24gUHJpdmF0ZVJvdXRlKHByb3BzOiBQcml2YXRlUm91dGVQcm9wcykge1xuICBjb25zdCB7IGNvbXBvbmVudDogQ29tcG9uZW50LCBpc0F1dGhlbnRpY2F0ZWQsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxSb3V0ZVxuICAgICAgey4uLnJlc3R9XG4gICAgICByZW5kZXI9e3Byb3BzID0+XG4gICAgICAgIGlzQXV0aGVudGljYXRlZCB8fCAhSVNfV0VCID8gKFxuICAgICAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8kLyR7UEFHRVMuQVVUSH0/cmVkaXJlY3Q9JHtwcm9wcy5sb2NhdGlvbi5wYXRobmFtZX1gfSAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxudHlwZSBQcm9wcyA9IHtcbiAgY3VycmVudFNjcm9sbDogbnVtYmVyLFxuICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4sXG4gIGxvY2F0aW9uOiB7IHBhdGhuYW1lOiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nIH0sXG4gIGhpc3Rvcnk6IHtcbiAgICBlbnRyaWVzOiB7IHRpdGxlOiBzdHJpbmcgfVtdLFxuICAgIGdvQmFjazogKCkgPT4gdm9pZCxcbiAgICBnb0ZvcndhcmQ6ICgpID0+IHZvaWQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nIH0sXG4gICAgcHVzaDogc3RyaW5nID0+IHZvaWQsXG4gICAgc3RhdGU6IHt9LFxuICAgIHJlcGxhY2VTdGF0ZTogKHt9LCBzdHJpbmcsIHN0cmluZykgPT4gdm9pZCxcbiAgfSxcbiAgdXJpOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIHdlbGNvbWVWZXJzaW9uOiBudW1iZXIsXG59O1xuXG5mdW5jdGlvbiBBcHBSb3V0ZXIocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50U2Nyb2xsLFxuICAgIGxvY2F0aW9uOiB7IHBhdGhuYW1lLCBzZWFyY2ggfSxcbiAgICBpc0F1dGhlbnRpY2F0ZWQsXG4gICAgaGlzdG9yeSxcbiAgICB1cmksXG4gICAgdGl0bGUsXG4gICAgd2VsY29tZVZlcnNpb24sXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyBlbnRyaWVzIH0gPSBoaXN0b3J5O1xuICBjb25zdCBlbnRyeUluZGV4ID0gaGlzdG9yeS5pbmRleDtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCByZXNldFNjcm9sbCA9IHVybFBhcmFtcy5nZXQoJ3Jlc2V0X3Njcm9sbCcpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHVyaSkge1xuICAgICAgY29uc3QgeyBjaGFubmVsTmFtZSwgc3RyZWFtTmFtZSB9ID0gcGFyc2VVUkkodXJpKTtcblxuICAgICAgaWYgKHR5cGVvZiB0aXRsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGl0bGUgIT09ICcnKSB7XG4gICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbU5hbWUpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBzdHJlYW1OYW1lO1xuICAgICAgfSBlbHNlIGlmIChjaGFubmVsTmFtZSkge1xuICAgICAgICBkb2N1bWVudC50aXRsZSA9IGNoYW5uZWxOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBJU19XRUIgPyBTSVRFX1RJVExFIDogJ0xCUlknO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC50aXRsZSA9IElTX1dFQiA/IFNJVEVfVElUTEUgOiAnTEJSWSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnRpdGxlID0gSVNfV0VCID8gU0lURV9USVRMRSA6ICdMQlJZJztcbiAgICB9O1xuICB9LCBbZW50cmllcywgZW50cnlJbmRleCwgdGl0bGUsIHVyaV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnRTY3JvbGwpO1xuICB9LCBbY3VycmVudFNjcm9sbCwgcGF0aG5hbWUsIHJlc2V0U2Nyb2xsXSk7XG5cbiAgLy8gcmVhY3Qtcm91dGVyIGRvZXNuJ3QgZGVjb2RlIHBhdGhhbm1lcyBiZWZvcmUgZG9pbmcgdGhlIHJvdXRlIG1hdGNoaW5nIGNoZWNrXG4gIC8vIFdlIGhhdmUgdG8gcmVkaXJlY3QgaGVyZSBiZWNhdXNlIGlmIHdlIHJlZGlyZWN0IG9uIHRoZSBzZXJ2ZXIsIGl0IG1pZ2h0IGdldCBlbmNvZGVkIGFnYWluXG4gIC8vIGluIHRoZSBicm93c2VyIGNhdXNpbmcgYSByZWRpcmVjdCBsb29wXG4gIGNvbnN0IGRlY29kZWRVcmwgPSBkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpICsgc2VhcmNoO1xuICBpZiAoZGVjb2RlZFVybCAhPT0gcGF0aG5hbWUgKyBzZWFyY2gpIHtcbiAgICByZXR1cm4gPFJlZGlyZWN0IHRvPXtkZWNvZGVkVXJsfSAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN3aXRjaD5cbiAgICAgIHt9XG5cbiAgICAgIDxSZWRpcmVjdFxuICAgICAgICBmcm9tPXtgLyQvJHtQQUdFUy5ERVBSRUNBVEVEX19DSEFOTkVMU19GT0xMT1dJTkdfTUFOQUdFfWB9XG4gICAgICAgIHRvPXtgLyQvJHtQQUdFUy5DSEFOTkVMU19GT0xMT1dJTkdfRElTQ09WRVJ9YH1cbiAgICAgIC8+XG4gICAgICA8UmVkaXJlY3QgZnJvbT17YC8kLyR7UEFHRVMuREVQUkVDQVRFRF9fQ0hBTk5FTFNfRk9MTE9XSU5HfWB9IHRvPXtgLyQvJHtQQUdFUy5DSEFOTkVMU19GT0xMT1dJTkd9YH0gLz5cbiAgICAgIDxSZWRpcmVjdCBmcm9tPXtgLyQvJHtQQUdFUy5ERVBSRUNBVEVEX19UQUdTX0ZPTExPV0lOR31gfSB0bz17YC8kLyR7UEFHRVMuVEFHU19GT0xMT1dJTkd9YH0gLz5cbiAgICAgIDxSZWRpcmVjdCBmcm9tPXtgLyQvJHtQQUdFUy5ERVBSRUNBVEVEX19UQUdTX0ZPTExPV0lOR19NQU5BR0V9YH0gdG89e2AvJC8ke1BBR0VTLlRBR1NfRk9MTE9XSU5HX01BTkFHRX1gfSAvPlxuXG4gICAgICA8Um91dGUgcGF0aD17YC9gfSBleGFjdCBjb21wb25lbnQ9e0hvbWVQYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLkRJU0NPVkVSfWB9IGV4YWN0IGNvbXBvbmVudD17RGlzY292ZXJQYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLkFVVEh9YH0gZXhhY3QgY29tcG9uZW50PXtTaWduSW5QYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLkFVVEh9LypgfSBleGFjdCBjb21wb25lbnQ9e1NpZ25JblBhZ2V9IC8+XG4gICAgICA8Um91dGUgcGF0aD17YC8kLyR7UEFHRVMuV0VMQ09NRX1gfSBleGFjdCBjb21wb25lbnQ9e1dlbGNvbWV9IC8+XG4gICAgICA8Um91dGUgcGF0aD17YC8kLyR7UEFHRVMuVEFHU19GT0xMT1dJTkd9YH0gZXhhY3QgY29tcG9uZW50PXtUYWdzRm9sbG93aW5nUGFnZX0gLz5cbiAgICAgIDxSb3V0ZVxuICAgICAgICBwYXRoPXtgLyQvJHtQQUdFUy5DSEFOTkVMU19GT0xMT1dJTkd9YH1cbiAgICAgICAgZXhhY3RcbiAgICAgICAgY29tcG9uZW50PXtpc0F1dGhlbnRpY2F0ZWQgfHwgIUlTX1dFQiA/IENoYW5uZWxzRm9sbG93aW5nUGFnZSA6IERpc2NvdmVyUGFnZX1cbiAgICAgIC8+XG4gICAgICA8Um91dGUgcGF0aD17YC8kLyR7UEFHRVMuQ0hBTk5FTFNfRk9MTE9XSU5HX0RJU0NPVkVSfWB9IGV4YWN0IGNvbXBvbmVudD17Q2hhbm5lbHNGb2xsb3dpbmdEaXNjb3ZlclBhZ2V9IC8+XG4gICAgICA8Um91dGUgcGF0aD17YC8kLyR7UEFHRVMuSEVMUH1gfSBleGFjdCBjb21wb25lbnQ9e0hlbHBQYWdlfSAvPlxuICAgICAge31cbiAgICAgIDxSb3V0ZSBwYXRoPXtgLyQvJHtQQUdFUy5BVVRIX1ZFUklGWX1gfSBleGFjdCBjb21wb25lbnQ9e1NpZ25JblZlcmlmeVBhZ2V9IC8+XG4gICAgICA8Um91dGUgcGF0aD17YC8kLyR7UEFHRVMuU0VBUkNIfWB9IGV4YWN0IGNvbXBvbmVudD17U2VhcmNoUGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBwYXRoPXtgLyQvJHtQQUdFUy5UT1B9YH0gZXhhY3QgY29tcG9uZW50PXtUb3BQYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLlNFVFRJTkdTfWB9IGV4YWN0IGNvbXBvbmVudD17U2V0dGluZ3NQYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLklOVklURX0vOnJlZmVycmVyYH0gZXhhY3QgY29tcG9uZW50PXtJbnZpdGVkUGFnZX0gLz5cblxuICAgICAgPFByaXZhdGVSb3V0ZSB7Li4ucHJvcHN9IHBhdGg9e2AvJC8ke1BBR0VTLklOVklURX1gfSBjb21wb25lbnQ9e0ludml0ZVBhZ2V9IC8+XG4gICAgICA8UHJpdmF0ZVJvdXRlIHsuLi5wcm9wc30gcGF0aD17YC8kLyR7UEFHRVMuRE9XTkxPQURFRH1gfSBjb21wb25lbnQ9e0ZpbGVMaXN0RG93bmxvYWRlZH0gLz5cbiAgICAgIDxQcml2YXRlUm91dGUgey4uLnByb3BzfSBwYXRoPXtgLyQvJHtQQUdFUy5QVUJMSVNIRUR9YH0gY29tcG9uZW50PXtGaWxlTGlzdFB1Ymxpc2hlZH0gLz5cbiAgICAgIDxQcml2YXRlUm91dGUgey4uLnByb3BzfSBwYXRoPXtgLyQvJHtQQUdFUy5DUkVBVE9SX0RBU0hCT0FSRH1gfSBjb21wb25lbnQ9e0NyZWF0b3JEYXNoYm9hcmR9IC8+XG4gICAgICA8UHJpdmF0ZVJvdXRlIHsuLi5wcm9wc30gcGF0aD17YC8kLyR7UEFHRVMuUFVCTElTSH1gfSBjb21wb25lbnQ9e1B1Ymxpc2hQYWdlfSAvPlxuICAgICAgPFByaXZhdGVSb3V0ZSB7Li4ucHJvcHN9IHBhdGg9e2AvJC8ke1BBR0VTLlJFUE9SVH1gfSBjb21wb25lbnQ9e1JlcG9ydFBhZ2V9IC8+XG4gICAgICA8UHJpdmF0ZVJvdXRlIHsuLi5wcm9wc30gcGF0aD17YC8kLyR7UEFHRVMuUkVXQVJEU31gfSBjb21wb25lbnQ9e1Jld2FyZHNQYWdlfSAvPlxuICAgICAgPFByaXZhdGVSb3V0ZSB7Li4ucHJvcHN9IHBhdGg9e2AvJC8ke1BBR0VTLlRSQU5TQUNUSU9OU31gfSBjb21wb25lbnQ9e1RyYW5zYWN0aW9uSGlzdG9yeVBhZ2V9IC8+XG4gICAgICA8UHJpdmF0ZVJvdXRlIHsuLi5wcm9wc30gcGF0aD17YC8kLyR7UEFHRVMuTElCUkFSWX1gfSBjb21wb25lbnQ9e0xpYnJhcnlQYWdlfSAvPlxuICAgICAgPFByaXZhdGVSb3V0ZSB7Li4ucHJvcHN9IHBhdGg9e2AvJC8ke1BBR0VTLlRBR1NfRk9MTE9XSU5HX01BTkFHRX1gfSBjb21wb25lbnQ9e1RhZ3NGb2xsb3dpbmdNYW5hZ2VQYWdlfSAvPlxuICAgICAgPFByaXZhdGVSb3V0ZSB7Li4ucHJvcHN9IHBhdGg9e2AvJC8ke1BBR0VTLkJMT0NLRUR9YH0gY29tcG9uZW50PXtMaXN0QmxvY2tlZFBhZ2V9IC8+XG4gICAgICA8UHJpdmF0ZVJvdXRlIHsuLi5wcm9wc30gcGF0aD17YC8kLyR7UEFHRVMuV0FMTEVUfWB9IGV4YWN0IGNvbXBvbmVudD17V2FsbGV0UGFnZX0gLz5cbiAgICAgIDxQcml2YXRlUm91dGUgey4uLnByb3BzfSBwYXRoPXtgLyQvJHtQQUdFUy5DSEFOTkVMU31gfSBjb21wb25lbnQ9e0NoYW5uZWxzUGFnZX0gLz5cblxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLkVNQkVEfS86Y2xhaW1OYW1lYH0gZXhhY3QgY29tcG9uZW50PXtFbWJlZFdyYXBwZXJQYWdlfSAvPlxuICAgICAgPFJvdXRlIHBhdGg9e2AvJC8ke1BBR0VTLkVNQkVEfS86Y2xhaW1OYW1lLzpjbGFpbUlkYH0gZXhhY3QgY29tcG9uZW50PXtFbWJlZFdyYXBwZXJQYWdlfSAvPlxuXG4gICAgICB7LyogQmVsb3cgbmVlZCB0byBnbyBhdCB0aGUgZW5kIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBtYXRjaCBhbnkgb2Ygb3VyIHBhZ2VzIGZpcnN0ICovfVxuICAgICAgPFJvdXRlIHBhdGg9XCIvOmNsYWltTmFtZVwiIGV4YWN0IGNvbXBvbmVudD17U2hvd1BhZ2V9IC8+XG4gICAgICA8Um91dGUgcGF0aD1cIi86Y2xhaW1OYW1lLzpzdHJlYW1OYW1lXCIgZXhhY3QgY29tcG9uZW50PXtTaG93UGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBwYXRoPVwiLypcIiBjb21wb25lbnQ9e0ZvdXJPaEZvdXJQYWdlfSAvPlxuICAgIDwvU3dpdGNoPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEFwcFJvdXRlcik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFJQTtBQUFBO0FBSkE7QUFGQTtBQVdBO0FBQ0E7QUFxQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBakJBO0FBc0JBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/router/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/searchOptions/index.js": -/*!**********************************************!*\ - !*** ../ui/component/searchOptions/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/searchOptions/view.jsx\");\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n options: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSearchOptions\"])(state),\n expanded: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_3__[\"selectSearchOptionsExpanded\"])(state),\n query: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectQueryWithOptions\"])()(state)\n };\n};\n\nvar perform = function perform(dispatch, ownProps) {\n var additionalOptions = ownProps.additionalOptions || {};\n return {\n setSearchOption: function setSearchOption(option, value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateSearchOptions\"])(_defineProperty({}, option, value), additionalOptions));\n },\n toggleSearchExpanded: function toggleSearchExpanded() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doToggleSearchExpanded\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlYXJjaE9wdGlvbnMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NlYXJjaE9wdGlvbnMvaW5kZXguanM/Yjk4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0U2VhcmNoT3B0aW9ucywgZG9VcGRhdGVTZWFyY2hPcHRpb25zLCBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9Ub2dnbGVTZWFyY2hFeHBhbmRlZCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7IHNlbGVjdFNlYXJjaE9wdGlvbnNFeHBhbmRlZCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9hcHAnO1xuaW1wb3J0IFNlYXJjaE9wdGlvbnMgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgb3B0aW9uczogc2VsZWN0U2VhcmNoT3B0aW9ucyhzdGF0ZSksXG4gIGV4cGFuZGVkOiBzZWxlY3RTZWFyY2hPcHRpb25zRXhwYW5kZWQoc3RhdGUpLFxuICBxdWVyeTogbWFrZVNlbGVjdFF1ZXJ5V2l0aE9wdGlvbnMoKShzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IChkaXNwYXRjaCwgb3duUHJvcHMpID0+IHtcbiAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSBvd25Qcm9wcy5hZGRpdGlvbmFsT3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIHtcbiAgICBzZXRTZWFyY2hPcHRpb246IChvcHRpb24sIHZhbHVlKSA9PiBkaXNwYXRjaChkb1VwZGF0ZVNlYXJjaE9wdGlvbnMoeyBbb3B0aW9uXTogdmFsdWUgfSwgYWRkaXRpb25hbE9wdGlvbnMpKSxcbiAgICB0b2dnbGVTZWFyY2hFeHBhbmRlZDogKCkgPT4gZGlzcGF0Y2goZG9Ub2dnbGVTZWFyY2hFeHBhbmRlZCgpKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShTZWFyY2hPcHRpb25zKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUZBO0FBQ0E7QUFPQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/searchOptions/index.js\n"); - -/***/ }), - -/***/ "../ui/component/searchOptions/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/searchOptions/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\n\n\nvar SearchOptions = function SearchOptions(props) {\n var options = props.options,\n setSearchOption = props.setSearchOption,\n expanded = props.expanded,\n toggleSearchExpanded = props.toggleSearchExpanded;\n var resultCount = options[lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].RESULT_COUNT];\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"alt\",\n label: __('Filter'),\n iconRight: expanded ? constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UP\"] : constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DOWN\"],\n onClick: toggleSearchExpanded\n }), expanded && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"Form\"], {\n className: \"search__options\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"legend\", {\n className: \"search__legend\"\n }, __('Search For')), [{\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].INCLUDE_FILES,\n label: __('Files')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].INCLUDE_CHANNELS,\n label: __('Channels')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].INCLUDE_FILES_AND_CHANNELS,\n label: __('Everything')\n }].map(function (_ref) {\n var option = _ref.option,\n label = _ref.label;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n key: option,\n name: option,\n type: \"radio\",\n blockWrap: false,\n label: label,\n checked: options[lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].CLAIM_TYPE] === option,\n onChange: function onChange() {\n return setSearchOption(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].CLAIM_TYPE, option);\n }\n });\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"legend\", {\n className: \"search__legend\"\n }, __('File Types')), [{\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].MEDIA_VIDEO,\n label: __('Videos')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].MEDIA_AUDIO,\n label: __('Audio')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].MEDIA_IMAGE,\n label: __('Images')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].MEDIA_TEXT,\n label: __('Text')\n }, {\n option: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].MEDIA_APPLICATION,\n label: __('Other Files')\n }].map(function (_ref2) {\n var option = _ref2.option,\n label = _ref2.label;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n key: option,\n name: option,\n type: \"checkbox\",\n blockWrap: false,\n disabled: options[lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].CLAIM_TYPE] === lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].INCLUDE_CHANNELS,\n label: label,\n checked: options[option],\n onChange: function onChange() {\n return setSearchOption(option, !options[option]);\n }\n });\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"legend\", {\n className: \"search__legend\"\n }, __('Other Options')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"select\",\n name: \"result-count\",\n value: resultCount,\n onChange: function onChange(e) {\n return setSearchOption(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH_OPTIONS\"].RESULT_COUNT, e.target.value);\n },\n blockWrap: false,\n label: __('Returned Results')\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: 10\n }, \"10\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: 30\n }, \"30\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: 50\n }, \"50\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: 100\n }, \"100\")))));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SearchOptions);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlYXJjaE9wdGlvbnMvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NlYXJjaE9wdGlvbnMvdmlldy5qc3g/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTRUFSQ0hfT1BUSU9OUyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNldFNlYXJjaE9wdGlvbjogKHN0cmluZywgYm9vbGVhbiB8IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZCxcbiAgb3B0aW9uczoge30sXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICB0b2dnbGVTZWFyY2hFeHBhbmRlZDogKCkgPT4gdm9pZCxcbn07XG5cbmNvbnN0IFNlYXJjaE9wdGlvbnMgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgb3B0aW9ucywgc2V0U2VhcmNoT3B0aW9uLCBleHBhbmRlZCwgdG9nZ2xlU2VhcmNoRXhwYW5kZWQgfSA9IHByb3BzO1xuICBjb25zdCByZXN1bHRDb3VudCA9IG9wdGlvbnNbU0VBUkNIX09QVElPTlMuUkVTVUxUX0NPVU5UXTtcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgIGxhYmVsPXtfXygnRmlsdGVyJyl9XG4gICAgICAgIGljb25SaWdodD17ZXhwYW5kZWQgPyBJQ09OUy5VUCA6IElDT05TLkRPV059XG4gICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNlYXJjaEV4cGFuZGVkfVxuICAgICAgLz5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxGb3JtIGNsYXNzTmFtZT1cInNlYXJjaF9fb3B0aW9uc1wiPlxuICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgIDxsZWdlbmQgY2xhc3NOYW1lPVwic2VhcmNoX19sZWdlbmRcIj57X18oJ1NlYXJjaCBGb3InKX08L2xlZ2VuZD5cbiAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb246IFNFQVJDSF9PUFRJT05TLklOQ0xVREVfRklMRVMsXG4gICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdGaWxlcycpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uOiBTRUFSQ0hfT1BUSU9OUy5JTkNMVURFX0NIQU5ORUxTLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnQ2hhbm5lbHMnKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbjogU0VBUkNIX09QVElPTlMuSU5DTFVERV9GSUxFU19BTkRfQ0hBTk5FTFMsXG4gICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdFdmVyeXRoaW5nJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLm1hcCgoeyBvcHRpb24sIGxhYmVsIH0pID0+IChcbiAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgIGtleT17b3B0aW9ufVxuICAgICAgICAgICAgICAgIG5hbWU9e29wdGlvbn1cbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIGJsb2NrV3JhcD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e29wdGlvbnNbU0VBUkNIX09QVElPTlMuQ0xBSU1fVFlQRV0gPT09IG9wdGlvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0U2VhcmNoT3B0aW9uKFNFQVJDSF9PUFRJT05TLkNMQUlNX1RZUEUsIG9wdGlvbil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgPGxlZ2VuZCBjbGFzc05hbWU9XCJzZWFyY2hfX2xlZ2VuZFwiPntfXygnRmlsZSBUeXBlcycpfTwvbGVnZW5kPlxuICAgICAgICAgICAge1tcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbjogU0VBUkNIX09QVElPTlMuTUVESUFfVklERU8sXG4gICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdWaWRlb3MnKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbjogU0VBUkNIX09QVElPTlMuTUVESUFfQVVESU8sXG4gICAgICAgICAgICAgICAgbGFiZWw6IF9fKCdBdWRpbycpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uOiBTRUFSQ0hfT1BUSU9OUy5NRURJQV9JTUFHRSxcbiAgICAgICAgICAgICAgICBsYWJlbDogX18oJ0ltYWdlcycpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uOiBTRUFSQ0hfT1BUSU9OUy5NRURJQV9URVhULFxuICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnVGV4dCcpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uOiBTRUFSQ0hfT1BUSU9OUy5NRURJQV9BUFBMSUNBVElPTixcbiAgICAgICAgICAgICAgICBsYWJlbDogX18oJ090aGVyIEZpbGVzJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLm1hcCgoeyBvcHRpb24sIGxhYmVsIH0pID0+IChcbiAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgIGtleT17b3B0aW9ufVxuICAgICAgICAgICAgICAgIG5hbWU9e29wdGlvbn1cbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGJsb2NrV3JhcD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e29wdGlvbnNbU0VBUkNIX09QVElPTlMuQ0xBSU1fVFlQRV0gPT09IFNFQVJDSF9PUFRJT05TLklOQ0xVREVfQ0hBTk5FTFN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e29wdGlvbnNbb3B0aW9uXX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0U2VhcmNoT3B0aW9uKG9wdGlvbiwgIW9wdGlvbnNbb3B0aW9uXSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgPGxlZ2VuZCBjbGFzc05hbWU9XCJzZWFyY2hfX2xlZ2VuZFwiPntfXygnT3RoZXIgT3B0aW9ucycpfTwvbGVnZW5kPlxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlc3VsdC1jb3VudFwiXG4gICAgICAgICAgICAgIHZhbHVlPXtyZXN1bHRDb3VudH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0U2VhcmNoT3B0aW9uKFNFQVJDSF9PUFRJT05TLlJFU1VMVF9DT1VOVCwgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICBibG9ja1dyYXA9e2ZhbHNlfVxuICAgICAgICAgICAgICBsYWJlbD17X18oJ1JldHVybmVkIFJlc3VsdHMnKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT17MTB9PjEwPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ezMwfT4zMDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXs1MH0+NTA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT17MTAwfT4xMDA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvRm9ybT5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2hPcHRpb25zO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFBQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFQQTtBQWpCQTtBQThCQTtBQUFBO0FBR0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBSUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFSQTtBQXJEQTtBQW1FQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBS0E7QUFDQTtBQU5BO0FBUUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQTVGQTtBQUNBO0FBb0dBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/searchOptions/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/selectAsset/index.js": -/*!********************************************!*\ - !*** ../ui/component/selectAsset/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/selectAsset/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdEFzc2V0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zZWxlY3RBc3NldC9pbmRleC5qcz84YzdjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBTZWxlY3RUaHVtYm5haWwgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIG9wZW5Nb2RhbDogKG1vZGFsLCBwcm9wcykgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwobW9kYWwsIHByb3BzKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgcGVyZm9ybVxuKShTZWxlY3RUaHVtYm5haWwpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/selectAsset/index.js\n"); - -/***/ }), - -/***/ "../ui/component/selectAsset/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/selectAsset/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_file_selector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/file-selector */ \"../ui/component/common/file-selector.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! uuid/v4 */ \"../node_modules/uuid/v4.js\");\n/* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(uuid_v4__WEBPACK_IMPORTED_MODULE_5__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\nvar accept = '.png, .jpg, .jpeg, .gif';\nvar SOURCE_URL = 'url';\nvar SOURCE_UPLOAD = 'upload';\nvar SPEECH_READY = 'READY';\nvar SPEECH_UPLOADING = 'UPLOADING';\n\nfunction SelectAsset(props) {\n var onUpdate = props.onUpdate,\n assetName = props.assetName,\n currentValue = props.currentValue,\n recommended = props.recommended;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(SOURCE_URL),\n _useState2 = _slicedToArray(_useState, 2),\n assetSource = _useState2[0],\n setAssetSource = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState4 = _slicedToArray(_useState3, 2),\n pathSelected = _useState4[0],\n setPathSelected = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n _useState6 = _slicedToArray(_useState5, 2),\n fileSelected = _useState6[0],\n setFileSelected = _useState6[1];\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(SPEECH_READY),\n _useState8 = _slicedToArray(_useState7, 2),\n uploadStatus = _useState8[0],\n setUploadStatus = _useState8[1];\n\n var _useState9 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n _useState10 = _slicedToArray(_useState9, 2),\n error = _useState10[0],\n setError = _useState10[1];\n\n function doUploadAsset(file) {\n var uploadError = function uploadError() {\n var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n setError(error);\n };\n\n var setUrl = function setUrl(path) {\n setUploadStatus(SPEECH_READY);\n onUpdate(path);\n setAssetSource(SOURCE_URL);\n };\n\n setUploadStatus(SPEECH_UPLOADING);\n var data = new FormData();\n var name = uuid_v4__WEBPACK_IMPORTED_MODULE_5___default()();\n data.append('name', name);\n data.append('file', file);\n return fetch(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SPEECH_URLS\"].SPEECH_PUBLISH, {\n method: 'POST',\n body: data\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n return json.success ? setUrl(\"\".concat(json.data.serveUrl)) : uploadError(json.message);\n })[\"catch\"](function (err) {\n return uploadError(err.message);\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-group\", {\n className: \"fieldset-group--smushed\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"select\",\n name: assetName,\n value: assetSource,\n onChange: function onChange(e) {\n return setAssetSource(e.target.value);\n },\n label: __(assetName + ' source')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n key: 'lmmnop',\n value: 'url'\n }, \"URL\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n key: 'lmmnopq',\n value: 'upload'\n }, \"UPLOAD\")), assetSource === SOURCE_UPLOAD && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, error && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, error), !pathSelected && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_file_selector__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n label: 'File to upload',\n name: 'assetSelector',\n onFileChosen: function onFileChosen(file) {\n if (file.name) {\n setPathSelected(file.path || file.name);\n setFileSelected(file);\n }\n },\n accept: accept\n }), pathSelected && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, \"...\".concat(pathSelected.slice(-18)), \" \", uploadStatus, ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: 'primary',\n onClick: function onClick() {\n return doUploadAsset(fileSelected);\n }\n }, \"Upload\"), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: 'secondary',\n onClick: function onClick() {\n setPathSelected('');\n setFileSelected(null);\n setError(null);\n }\n }, \"Clear\"))), assetSource === SOURCE_URL && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: 'text',\n name: 'thumbnail',\n label: __(assetName + ' ' + recommended),\n placeholder: 'https://example.com/image.png',\n disabled: false,\n value: currentValue,\n onChange: function onChange(e) {\n onUpdate(e.target.value);\n }\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SelectAsset);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdEFzc2V0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zZWxlY3RBc3NldC92aWV3LmpzeD83ZWQwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgRmlsZVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudC9jb21tb24vZmlsZS1zZWxlY3Rvcic7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgU1BFRUNIX1VSTFMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB1dWlkIGZyb20gJ3V1aWQvdjQnO1xuXG5jb25zdCBhY2NlcHQgPSAnLnBuZywgLmpwZywgLmpwZWcsIC5naWYnO1xuXG5jb25zdCBTT1VSQ0VfVVJMID0gJ3VybCc7XG5jb25zdCBTT1VSQ0VfVVBMT0FEID0gJ3VwbG9hZCc7XG5jb25zdCBTUEVFQ0hfUkVBRFkgPSAnUkVBRFknO1xuY29uc3QgU1BFRUNIX1VQTE9BRElORyA9ICdVUExPQURJTkcnO1xudHlwZSBQcm9wcyA9IHtcbiAgYXNzZXROYW1lOiBzdHJpbmcsXG4gIGN1cnJlbnRWYWx1ZTogP3N0cmluZyxcbiAgb25VcGRhdGU6IHN0cmluZyA9PiB2b2lkLFxuICByZWNvbW1lbmRlZDogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gU2VsZWN0QXNzZXQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgb25VcGRhdGUsIGFzc2V0TmFtZSwgY3VycmVudFZhbHVlLCByZWNvbW1lbmRlZCB9ID0gcHJvcHM7XG4gIGNvbnN0IFthc3NldFNvdXJjZSwgc2V0QXNzZXRTb3VyY2VdID0gdXNlU3RhdGUoU09VUkNFX1VSTCk7XG4gIGNvbnN0IFtwYXRoU2VsZWN0ZWQsIHNldFBhdGhTZWxlY3RlZF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtmaWxlU2VsZWN0ZWQsIHNldEZpbGVTZWxlY3RlZF0gPSB1c2VTdGF0ZTxhbnk+KG51bGwpO1xuICBjb25zdCBbdXBsb2FkU3RhdHVzLCBzZXRVcGxvYWRTdGF0dXNdID0gdXNlU3RhdGUoU1BFRUNIX1JFQURZKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZSgpO1xuXG4gIGZ1bmN0aW9uIGRvVXBsb2FkQXNzZXQoZmlsZSkge1xuICAgIGNvbnN0IHVwbG9hZEVycm9yID0gKGVycm9yID0gJycpID0+IHtcbiAgICAgIHNldEVycm9yKGVycm9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0VXJsID0gcGF0aCA9PiB7XG4gICAgICBzZXRVcGxvYWRTdGF0dXMoU1BFRUNIX1JFQURZKTtcbiAgICAgIG9uVXBkYXRlKHBhdGgpO1xuICAgICAgc2V0QXNzZXRTb3VyY2UoU09VUkNFX1VSTCk7XG4gICAgfTtcblxuICAgIHNldFVwbG9hZFN0YXR1cyhTUEVFQ0hfVVBMT0FESU5HKTtcblxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBuYW1lID0gdXVpZCgpO1xuICAgIGRhdGEuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIHJldHVybiBmZXRjaChTUEVFQ0hfVVJMUy5TUEVFQ0hfUFVCTElTSCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihqc29uID0+IChqc29uLnN1Y2Nlc3MgPyBzZXRVcmwoYCR7anNvbi5kYXRhLnNlcnZlVXJsfWApIDogdXBsb2FkRXJyb3IoanNvbi5tZXNzYWdlKSkpXG4gICAgICAuY2F0Y2goZXJyID0+IHVwbG9hZEVycm9yKGVyci5tZXNzYWdlKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgPGZpZWxkc2V0LWdyb3VwIGNsYXNzTmFtZT1cImZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkXCI+XG4gICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICBuYW1lPXthc3NldE5hbWV9XG4gICAgICAgICAgdmFsdWU9e2Fzc2V0U291cmNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldEFzc2V0U291cmNlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBsYWJlbD17X18oYXNzZXROYW1lICsgJyBzb3VyY2UnKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24ga2V5PXsnbG1tbm9wJ30gdmFsdWU9eyd1cmwnfT5cbiAgICAgICAgICAgIFVSTFxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24ga2V5PXsnbG1tbm9wcSd9IHZhbHVlPXsndXBsb2FkJ30+XG4gICAgICAgICAgICBVUExPQURcbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgIHthc3NldFNvdXJjZSA9PT0gU09VUkNFX1VQTE9BRCAmJiAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHtlcnJvciAmJiA8ZGl2IGNsYXNzTmFtZT1cImVycm9yLXRleHRcIj57ZXJyb3J9PC9kaXY+fVxuICAgICAgICAgICAgeyFwYXRoU2VsZWN0ZWQgJiYgKFxuICAgICAgICAgICAgICA8RmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgbGFiZWw9eydGaWxlIHRvIHVwbG9hZCd9XG4gICAgICAgICAgICAgICAgbmFtZT17J2Fzc2V0U2VsZWN0b3InfVxuICAgICAgICAgICAgICAgIG9uRmlsZUNob3Nlbj17ZmlsZSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFBhdGhTZWxlY3RlZChmaWxlLnBhdGggfHwgZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsZVNlbGVjdGVkKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3BhdGhTZWxlY3RlZCAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge2AuLi4ke3BhdGhTZWxlY3RlZC5zbGljZSgtMTgpfWB9IHt1cGxvYWRTdGF0dXN9eycgJ31cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj17J3ByaW1hcnknfSBvbkNsaWNrPXsoKSA9PiBkb1VwbG9hZEFzc2V0KGZpbGVTZWxlY3RlZCl9PlxuICAgICAgICAgICAgICAgICAgVXBsb2FkXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+eycgJ31cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b249eydzZWNvbmRhcnknfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRQYXRoU2VsZWN0ZWQoJycpO1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWxlU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHthc3NldFNvdXJjZSA9PT0gU09VUkNFX1VSTCAmJiAoXG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgdHlwZT17J3RleHQnfVxuICAgICAgICAgICAgbmFtZT17J3RodW1ibmFpbCd9XG4gICAgICAgICAgICBsYWJlbD17X18oYXNzZXROYW1lICsgJyAnICsgcmVjb21tZW5kZWQpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9eydodHRwczovL2V4YW1wbGUuY29tL2ltYWdlLnBuZyd9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICB2YWx1ZT17Y3VycmVudFZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4ge1xuICAgICAgICAgICAgICBvblVwZGF0ZShlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2ZpZWxkc2V0LWdyb3VwPlxuICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0QXNzZXQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBSkE7QUFLQTtBQUxBO0FBTUE7QUFOQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFLQTtBQUxBO0FBT0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQVRBO0FBZUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBZUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/selectAsset/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/selectChannel/index.js": -/*!**********************************************!*\ - !*** ../ui/component/selectChannel/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/selectChannel/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nvar select = function select(state) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectFetchingMyChannels\"])(state),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectBalance\"])(state),\n emailVerified: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n createChannel: function createChannel(name, amount) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doCreateChannel\"])(name, amount));\n },\n fetchChannelListMine: function fetchChannelListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doFetchChannelListMine\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdENoYW5uZWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NlbGVjdENoYW5uZWwvaW5kZXguanM/N2RmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFNlbGVjdENoYW5uZWwgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7XG4gIHNlbGVjdEJhbGFuY2UsXG4gIHNlbGVjdE15Q2hhbm5lbENsYWltcyxcbiAgc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzLFxuICBkb0ZldGNoQ2hhbm5lbExpc3RNaW5lLFxuICBkb0NyZWF0ZUNoYW5uZWwsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgY2hhbm5lbHM6IHNlbGVjdE15Q2hhbm5lbENsYWltcyhzdGF0ZSksXG4gIGZldGNoaW5nQ2hhbm5lbHM6IHNlbGVjdEZldGNoaW5nTXlDaGFubmVscyhzdGF0ZSksXG4gIGJhbGFuY2U6IHNlbGVjdEJhbGFuY2Uoc3RhdGUpLFxuICBlbWFpbFZlcmlmaWVkOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNyZWF0ZUNoYW5uZWw6IChuYW1lLCBhbW91bnQpID0+IGRpc3BhdGNoKGRvQ3JlYXRlQ2hhbm5lbChuYW1lLCBhbW91bnQpKSxcbiAgZmV0Y2hDaGFubmVsTGlzdE1pbmU6ICgpID0+IGRpc3BhdGNoKGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFNlbGVjdENoYW5uZWwpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/selectChannel/index.js\n"); - -/***/ }), - -/***/ "../ui/component/selectChannel/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/selectChannel/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_channelCreate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/channelCreate */ \"../ui/component/channelCreate/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ChannelSection = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ChannelSection, _React$PureComponent);\n\n function ChannelSection(props) {\n var _this;\n\n _classCallCheck(this, ChannelSection);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ChannelSection).call(this, props));\n _this.state = {\n addingChannel: false\n };\n _assertThisInitialized(_this).handleChannelChange = _this.handleChannelChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleChangeToNewChannel = _this.handleChangeToNewChannel.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ChannelSection, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n channels = _this$props.channels,\n fetchChannelListMine = _this$props.fetchChannelListMine,\n fetchingChannels = _this$props.fetchingChannels,\n emailVerified = _this$props.emailVerified;\n\n if ( true && !emailVerified) {\n return;\n }\n\n if ((!channels || !channels.length) && !fetchingChannels) {\n fetchChannelListMine();\n }\n }\n }, {\n key: \"handleChannelChange\",\n value: function handleChannelChange(event) {\n var onChannelChange = this.props.onChannelChange;\n var channel = event.target.value;\n\n if (channel === constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"]) {\n this.setState({\n addingChannel: true\n });\n onChannelChange(channel);\n } else {\n this.setState({\n addingChannel: false\n });\n onChannelChange(channel);\n }\n }\n }, {\n key: \"handleChangeToNewChannel\",\n value: function handleChangeToNewChannel(props) {\n var onChannelChange = this.props.onChannelChange;\n var newChannelName = props.newChannelName;\n this.setState({\n addingChannel: false\n });\n var channelName = \"@\".concat(newChannelName.trim());\n onChannelChange(channelName);\n }\n }, {\n key: \"render\",\n value: function render() {\n var channel = this.state.addingChannel ? 'new' : this.props.channel;\n var _this$props2 = this.props,\n fetchingChannels = _this$props2.fetchingChannels,\n _this$props2$channels = _this$props2.channels,\n channels = _this$props2$channels === void 0 ? [] : _this$props2$channels,\n hideAnon = _this$props2.hideAnon,\n hideNew = _this$props2.hideNew,\n label = _this$props2.label,\n _this$props2$injected = _this$props2.injected,\n injected = _this$props2$injected === void 0 ? [] : _this$props2$injected;\n var addingChannel = this.state.addingChannel;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n name: \"channel\",\n label: label || __('Channel'),\n type: \"select\",\n onChange: this.handleChannelChange,\n value: channel\n }, !hideAnon && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_ANONYMOUS\"]\n }, __('Anonymous')), channels && channels.map(function (_ref) {\n var name = _ref.name,\n claimId = _ref.claim_id;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: claimId,\n value: name\n }, name);\n }), injected && injected.map(function (item) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: item,\n value: item\n }, item);\n }), !fetchingChannels && !hideNew && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n value: constants_claim__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_NEW\"]\n }, __('New channel...'))), addingChannel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_channelCreate__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSuccess: this.handleChangeToNewChannel\n }));\n }\n }]);\n\n return ChannelSection;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelSection);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdENoYW5uZWwvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NlbGVjdENoYW5uZWwvdmlldy5qc3g/YzY2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgQ0hBTk5FTF9ORVcsIENIQU5ORUxfQU5PTllNT1VTIH0gZnJvbSAnY29uc3RhbnRzL2NsYWltJztcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbENyZWF0ZSBmcm9tICdjb21wb25lbnQvY2hhbm5lbENyZWF0ZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoYW5uZWw6IHN0cmluZywgLy8gY3VycmVudGx5IHNlbGVjdGVkIGNoYW5uZWxcbiAgY2hhbm5lbHM6ID9BcnJheTxDaGFubmVsQ2xhaW0+LFxuICBiYWxhbmNlOiBudW1iZXIsXG4gIG9uQ2hhbm5lbENoYW5nZTogc3RyaW5nID0+IHZvaWQsXG4gIGNyZWF0ZUNoYW5uZWw6IChzdHJpbmcsIG51bWJlcikgPT4gUHJvbWlzZTxhbnk+LFxuICBmZXRjaENoYW5uZWxMaXN0TWluZTogKCkgPT4gdm9pZCxcbiAgZmV0Y2hpbmdDaGFubmVsczogYm9vbGVhbixcbiAgaGlkZUFub246IGJvb2xlYW4sXG4gIGhpZGVOZXc6IGJvb2xlYW4sXG4gIGxhYmVsPzogc3RyaW5nLFxuICBpbmplY3RlZD86IEFycmF5PHN0cmluZz4sXG4gIGVtYWlsVmVyaWZpZWQ6IGJvb2xlYW4sXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBhZGRpbmdDaGFubmVsOiBib29sZWFuLFxufTtcblxuY2xhc3MgQ2hhbm5lbFNlY3Rpb24gZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWRkaW5nQ2hhbm5lbDogZmFsc2UsXG4gICAgfTtcblxuICAgICh0aGlzOiBhbnkpLmhhbmRsZUNoYW5uZWxDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5uZWxDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5oYW5kbGVDaGFuZ2VUb05ld0NoYW5uZWwgPSB0aGlzLmhhbmRsZUNoYW5nZVRvTmV3Q2hhbm5lbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjaGFubmVscywgZmV0Y2hDaGFubmVsTGlzdE1pbmUsIGZldGNoaW5nQ2hhbm5lbHMsIGVtYWlsVmVyaWZpZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKElTX1dFQiAmJiAhZW1haWxWZXJpZmllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgoIWNoYW5uZWxzIHx8ICFjaGFubmVscy5sZW5ndGgpICYmICFmZXRjaGluZ0NoYW5uZWxzKSB7XG4gICAgICBmZXRjaENoYW5uZWxMaXN0TWluZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5uZWxDaGFuZ2UoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICBjb25zdCB7IG9uQ2hhbm5lbENoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjaGFubmVsID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKGNoYW5uZWwgPT09IENIQU5ORUxfTkVXKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgYWRkaW5nQ2hhbm5lbDogdHJ1ZSB9KTtcbiAgICAgIG9uQ2hhbm5lbENoYW5nZShjaGFubmVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFkZGluZ0NoYW5uZWw6IGZhbHNlIH0pO1xuICAgICAgb25DaGFubmVsQ2hhbmdlKGNoYW5uZWwpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVRvTmV3Q2hhbm5lbChwcm9wczogT2JqZWN0KSB7XG4gICAgY29uc3QgeyBvbkNoYW5uZWxDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBuZXdDaGFubmVsTmFtZSB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgYWRkaW5nQ2hhbm5lbDogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGBAJHtuZXdDaGFubmVsTmFtZS50cmltKCl9YDtcbiAgICBvbkNoYW5uZWxDaGFuZ2UoY2hhbm5lbE5hbWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLnN0YXRlLmFkZGluZ0NoYW5uZWwgPyAnbmV3JyA6IHRoaXMucHJvcHMuY2hhbm5lbDtcbiAgICBjb25zdCB7IGZldGNoaW5nQ2hhbm5lbHMsIGNoYW5uZWxzID0gW10sIGhpZGVBbm9uLCBoaWRlTmV3LCBsYWJlbCwgaW5qZWN0ZWQgPSBbXSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGFkZGluZ0NoYW5uZWwgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgbmFtZT1cImNoYW5uZWxcIlxuICAgICAgICAgIGxhYmVsPXtsYWJlbCB8fCBfXygnQ2hhbm5lbCcpfVxuICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5uZWxDaGFuZ2V9XG4gICAgICAgICAgdmFsdWU9e2NoYW5uZWx9XG4gICAgICAgID5cbiAgICAgICAgICB7IWhpZGVBbm9uICYmIDxvcHRpb24gdmFsdWU9e0NIQU5ORUxfQU5PTllNT1VTfT57X18oJ0Fub255bW91cycpfTwvb3B0aW9uPn1cbiAgICAgICAgICB7Y2hhbm5lbHMgJiZcbiAgICAgICAgICAgIGNoYW5uZWxzLm1hcCgoeyBuYW1lLCBjbGFpbV9pZDogY2xhaW1JZCB9KSA9PiAoXG4gICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtjbGFpbUlkfSB2YWx1ZT17bmFtZX0+XG4gICAgICAgICAgICAgICAge25hbWV9XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAge2luamVjdGVkICYmXG4gICAgICAgICAgICBpbmplY3RlZC5tYXAoaXRlbSA9PiAoXG4gICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtpdGVtfSB2YWx1ZT17aXRlbX0+XG4gICAgICAgICAgICAgICAge2l0ZW19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgeyFmZXRjaGluZ0NoYW5uZWxzICYmICFoaWRlTmV3ICYmIDxvcHRpb24gdmFsdWU9e0NIQU5ORUxfTkVXfT57X18oJ05ldyBjaGFubmVsLi4uJyl9PC9vcHRpb24+fVxuICAgICAgICA8L0Zvcm1GaWVsZD5cblxuICAgICAgICB7YWRkaW5nQ2hhbm5lbCAmJiA8Q2hhbm5lbENyZWF0ZSBvblN1Y2Nlc3M9e3RoaXMuaGFuZGxlQ2hhbmdlVG9OZXdDaGFubmVsfSAvPn1cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU2VjdGlvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFvQkE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFSQTtBQVNBO0FBQ0E7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBVkE7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQWhCQTtBQW9CQTtBQUFBO0FBR0E7QUFBQTtBQUdBOzs7O0FBL0VBO0FBQ0E7QUFpRkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/selectChannel/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/selectThumbnail/index.js": -/*!************************************************!*\ - !*** ../ui/component/selectThumbnail/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/selectThumbnail/view.jsx\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nvar select = function select(state) {\n return _objectSpread({}, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectPublishFormValues\"])(state), {\n fileInfos: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFileInfosByOutpoint\"])(state),\n myClaimForUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimForUri\"])(state)\n });\n};\n\nvar perform = function perform(dispatch) {\n return {\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdatePublishForm\"])(value));\n },\n resetThumbnailStatus: function resetThumbnailStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResetThumbnailStatus\"])());\n },\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc2VsZWN0VGh1bWJuYWlsL2luZGV4LmpzPzM3ZTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzLFxuICBzZWxlY3RNeUNsYWltRm9yVXJpLFxuICBkb1VwZGF0ZVB1Ymxpc2hGb3JtLFxuICBzZWxlY3RGaWxlSW5mb3NCeU91dHBvaW50LFxuICBkb1Jlc2V0VGh1bWJuYWlsU3RhdHVzLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcblxuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgUHVibGlzaFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgLi4uc2VsZWN0UHVibGlzaEZvcm1WYWx1ZXMoc3RhdGUpLFxuICBmaWxlSW5mb3M6IHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQoc3RhdGUpLFxuICBteUNsYWltRm9yVXJpOiBzZWxlY3RNeUNsYWltRm9yVXJpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgdXBkYXRlUHVibGlzaEZvcm06IHZhbHVlID0+IGRpc3BhdGNoKGRvVXBkYXRlUHVibGlzaEZvcm0odmFsdWUpKSxcbiAgcmVzZXRUaHVtYm5haWxTdGF0dXM6ICgpID0+IGRpc3BhdGNoKGRvUmVzZXRUaHVtYm5haWxTdGF0dXMoKSksXG4gIG9wZW5Nb2RhbDogKG1vZGFsLCBwcm9wcykgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwobW9kYWwsIHByb3BzKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFB1Ymxpc2hQYWdlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/selectThumbnail/index.js\n"); - -/***/ }), - -/***/ "../ui/component/selectThumbnail/thumbnail-broken.png": -/*!************************************************************!*\ - !*** ../ui/component/selectThumbnail/thumbnail-broken.png ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/thumbnail-broken.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbC90aHVtYm5haWwtYnJva2VuLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc2VsZWN0VGh1bWJuYWlsL3RodW1ibmFpbC1icm9rZW4ucG5nPzk3ODQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1nL3RodW1ibmFpbC1icm9rZW4ucG5nXCI7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/selectThumbnail/thumbnail-broken.png\n"); - -/***/ }), - -/***/ "../ui/component/selectThumbnail/thumbnail-missing.png": -/*!*************************************************************!*\ - !*** ../ui/component/selectThumbnail/thumbnail-missing.png ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/thumbnail-missing.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbC90aHVtYm5haWwtbWlzc2luZy5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbC90aHVtYm5haWwtbWlzc2luZy5wbmc/YWYxZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJpbWcvdGh1bWJuYWlsLW1pc3NpbmcucG5nXCI7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/selectThumbnail/thumbnail-missing.png\n"); - -/***/ }), - -/***/ "../ui/component/selectThumbnail/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/selectThumbnail/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_file_selector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/file-selector */ \"../ui/component/common/file-selector.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var _thumbnail_missing_png__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./thumbnail-missing.png */ \"../ui/component/selectThumbnail/thumbnail-missing.png\");\n/* harmony import */ var _thumbnail_missing_png__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_thumbnail_missing_png__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _thumbnail_broken_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./thumbnail-broken.png */ \"../ui/component/selectThumbnail/thumbnail-broken.png\");\n/* harmony import */ var _thumbnail_broken_png__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_thumbnail_broken_png__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\n\nvar SelectThumbnail = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(SelectThumbnail, _React$PureComponent);\n\n function SelectThumbnail() {\n var _this;\n\n _classCallCheck(this, SelectThumbnail);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SelectThumbnail).call(this));\n _this.state = {\n thumbnailError: false\n };\n _assertThisInitialized(_this).handleThumbnailChange = _this.handleThumbnailChange.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(SelectThumbnail, [{\n key: \"handleThumbnailChange\",\n value: function handleThumbnailChange(e) {\n var updatePublishForm = this.props.updatePublishForm;\n var newThumbnail = e.target.value.replace(' ', '');\n updatePublishForm({\n thumbnail: newThumbnail\n });\n this.setState({\n thumbnailError: false\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n filePath = _this$props.filePath,\n fileInfos = _this$props.fileInfos,\n myClaimForUri = _this$props.myClaimForUri,\n thumbnail = _this$props.thumbnail,\n formDisabled = _this$props.formDisabled,\n status = _this$props.uploadThumbnailStatus,\n openModal = _this$props.openModal,\n updatePublishForm = _this$props.updatePublishForm,\n thumbnailPath = _this$props.thumbnailPath,\n resetThumbnailStatus = _this$props.resetThumbnailStatus;\n var thumbnailError = this.state.thumbnailError;\n var accept = '.png, .jpg, .jpeg, .gif';\n var outpoint = myClaimForUri ? \"\".concat(myClaimForUri.txid, \":\").concat(myClaimForUri.nout) : undefined;\n var fileInfo = outpoint ? fileInfos[outpoint] : undefined;\n var downloadPath = fileInfo ? fileInfo.download_path : undefined;\n var actualFilePath = filePath || downloadPath;\n var isSupportedVideo = false;\n\n if (typeof filePath === 'string') {\n isSupportedVideo = lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"Lbry\"].getMediaType(null, actualFilePath) === 'video';\n } else if (filePath && filePath.type) {\n isSupportedVideo = filePath.type.split('/')[0] === 'video';\n }\n\n var thumbnailSrc;\n\n if (!thumbnail) {\n thumbnailSrc = _thumbnail_missing_png__WEBPACK_IMPORTED_MODULE_6___default.a;\n } else if (thumbnailError) {\n thumbnailSrc = _thumbnail_broken_png__WEBPACK_IMPORTED_MODULE_7___default.a;\n } else {\n thumbnailSrc = thumbnail;\n }\n /*\n Note:\n We are using backgroundImage instead of an <img /> to zoom if the selected thumbnail isn't\n the proper aspect ratio. This is to avoid blackbars on the side of images and inconsistent thumbnails\n We still need to render the image to see if there is an error loading the url\n */\n\n\n return react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", null, status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].API_DOWN || status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].MANUAL ? react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column__item thumbnail-preview\",\n style: {\n backgroundImage: \"url(\".concat(thumbnailSrc, \")\")\n }\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"img\", {\n style: {\n display: 'none'\n },\n src: thumbnailSrc,\n alt: __('Thumbnail Preview'),\n onError: function onError(e) {\n _this2.setState({\n thumbnailError: true\n });\n }\n })), react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column__item\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"text\",\n name: \"content_thumbnail\",\n label: \"URL\",\n placeholder: \"https://spee.ch/mylogo\",\n value: thumbnail,\n disabled: formDisabled,\n onChange: this.handleThumbnailChange\n }), react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Use thumbnail upload tool'),\n onClick: function onClick() {\n return updatePublishForm({\n uploadThumbnailStatus: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].READY\n });\n }\n })))) : react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].READY && react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_common_file_selector__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n currentPath: thumbnailPath,\n label: __('Thumbnail'),\n placeholder: __('Choose a thumbnail'),\n accept: accept,\n onFileChosen: function onFileChosen(file) {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CONFIRM_THUMBNAIL_UPLOAD\"], {\n file: file\n });\n }\n }), status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].COMPLETE && thumbnail && react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column column--space-between\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column__item thumbnail-preview\",\n style: {\n backgroundImage: \"url(\".concat(thumbnail, \")\")\n }\n }), react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"column__item\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"p\", null, \"Upload complete. \", react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n href: thumbnail,\n label: __('View it on spee.ch')\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('New thumbnail'),\n onClick: resetThumbnailStatus\n }))))), status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].READY && react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Enter a thumbnail URL'),\n onClick: function onClick() {\n return updatePublishForm({\n uploadThumbnailStatus: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].MANUAL\n });\n }\n }), isSupportedVideo && react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Take a snapshot from your video'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"AUTO_GENERATE_THUMBNAIL\"], {\n filePath: actualFilePath\n });\n }\n })), status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].IN_PROGRESS && react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"p\", null, __('Uploading thumbnail'), \"...\"), react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](\"p\", {\n className: \"help\"\n }, status === lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"THUMBNAIL_STATUSES\"].API_DOWN ? __('Enter a URL for your thumbnail.') : react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tokens: {\n speech_link: react__WEBPACK_IMPORTED_MODULE_2__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: \"spee.ch\",\n href: \"https://spee.ch/about\"\n })\n }\n }, \"Upload your thumbnail to %speech_link%. Recommended size is 16:9.\")));\n }\n }]);\n\n return SelectThumbnail;\n}(react__WEBPACK_IMPORTED_MODULE_2__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SelectThumbnail);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NlbGVjdFRodW1ibmFpbC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc2VsZWN0VGh1bWJuYWlsL3ZpZXcuanN4P2QxMDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IHsgTGJyeSwgVEhVTUJOQUlMX1NUQVRVU0VTIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEZpbGVTZWxlY3RvciBmcm9tICdjb21wb25lbnQvY29tbW9uL2ZpbGUtc2VsZWN0b3InO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBUaHVtYm5haWxNaXNzaW5nSW1hZ2UgZnJvbSAnLi90aHVtYm5haWwtbWlzc2luZy5wbmcnO1xuaW1wb3J0IFRodW1ibmFpbEJyb2tlbkltYWdlIGZyb20gJy4vdGh1bWJuYWlsLWJyb2tlbi5wbmcnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZpbGVQYXRoOiA/c3RyaW5nLFxuICBmaWxlSW5mb3M6IHsgW3N0cmluZ106IEZpbGVMaXN0SXRlbSB9LFxuICBteUNsYWltRm9yVXJpOiA/U3RyZWFtQ2xhaW0sXG4gIHRodW1ibmFpbDogP3N0cmluZyxcbiAgZm9ybURpc2FibGVkOiBib29sZWFuLFxuICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IHN0cmluZyxcbiAgdGh1bWJuYWlsUGF0aDogP3N0cmluZyxcbiAgb3Blbk1vZGFsOiAoaWQ6IHN0cmluZywge30pID0+IHZvaWQsXG4gIHVwZGF0ZVB1Ymxpc2hGb3JtOiAoe30pID0+IHZvaWQsXG4gIHJlc2V0VGh1bWJuYWlsU3RhdHVzOiAoKSA9PiB2b2lkLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgdGh1bWJuYWlsRXJyb3I6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBTZWxlY3RUaHVtYm5haWwgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRodW1ibmFpbEVycm9yOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgKHRoaXM6IGFueSkuaGFuZGxlVGh1bWJuYWlsQ2hhbmdlID0gdGhpcy5oYW5kbGVUaHVtYm5haWxDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZVRodW1ibmFpbENoYW5nZShlOiBTeW50aGV0aWNJbnB1dEV2ZW50PCo+KSB7XG4gICAgY29uc3QgeyB1cGRhdGVQdWJsaXNoRm9ybSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBuZXdUaHVtYm5haWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKCcgJywgJycpO1xuXG4gICAgdXBkYXRlUHVibGlzaEZvcm0oeyB0aHVtYm5haWw6IG5ld1RodW1ibmFpbCB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdGh1bWJuYWlsRXJyb3I6IGZhbHNlIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgZmlsZUluZm9zLFxuICAgICAgbXlDbGFpbUZvclVyaSxcbiAgICAgIHRodW1ibmFpbCxcbiAgICAgIGZvcm1EaXNhYmxlZCxcbiAgICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogc3RhdHVzLFxuICAgICAgb3Blbk1vZGFsLFxuICAgICAgdXBkYXRlUHVibGlzaEZvcm0sXG4gICAgICB0aHVtYm5haWxQYXRoLFxuICAgICAgcmVzZXRUaHVtYm5haWxTdGF0dXMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHRodW1ibmFpbEVycm9yIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGFjY2VwdCA9ICcucG5nLCAuanBnLCAuanBlZywgLmdpZic7XG5cbiAgICBjb25zdCBvdXRwb2ludCA9IG15Q2xhaW1Gb3JVcmkgPyBgJHtteUNsYWltRm9yVXJpLnR4aWR9OiR7bXlDbGFpbUZvclVyaS5ub3V0fWAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmlsZUluZm8gPSBvdXRwb2ludCA/IGZpbGVJbmZvc1tvdXRwb2ludF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZG93bmxvYWRQYXRoID0gZmlsZUluZm8gPyBmaWxlSW5mby5kb3dubG9hZF9wYXRoIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYWN0dWFsRmlsZVBhdGggPSBmaWxlUGF0aCB8fCBkb3dubG9hZFBhdGg7XG4gICAgbGV0IGlzU3VwcG9ydGVkVmlkZW8gPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIGZpbGVQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaXNTdXBwb3J0ZWRWaWRlbyA9IExicnkuZ2V0TWVkaWFUeXBlKG51bGwsIGFjdHVhbEZpbGVQYXRoKSA9PT0gJ3ZpZGVvJztcbiAgICB9IGVsc2UgaWYgKGZpbGVQYXRoICYmIGZpbGVQYXRoLnR5cGUpIHtcbiAgICAgIGlzU3VwcG9ydGVkVmlkZW8gPSBmaWxlUGF0aC50eXBlLnNwbGl0KCcvJylbMF0gPT09ICd2aWRlbyc7XG4gICAgfVxuXG4gICAgbGV0IHRodW1ibmFpbFNyYztcbiAgICBpZiAoIXRodW1ibmFpbCkge1xuICAgICAgdGh1bWJuYWlsU3JjID0gVGh1bWJuYWlsTWlzc2luZ0ltYWdlO1xuICAgIH0gZWxzZSBpZiAodGh1bWJuYWlsRXJyb3IpIHtcbiAgICAgIHRodW1ibmFpbFNyYyA9IFRodW1ibmFpbEJyb2tlbkltYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHVtYm5haWxTcmMgPSB0aHVtYm5haWw7XG4gICAgfVxuXG4gICAgLypcbiAgICAgIE5vdGU6XG4gICAgICBXZSBhcmUgdXNpbmcgYmFja2dyb3VuZEltYWdlIGluc3RlYWQgb2YgYW4gPGltZyAvPiB0byB6b29tIGlmIHRoZSBzZWxlY3RlZCB0aHVtYm5haWwgaXNuJ3RcbiAgICAgIHRoZSBwcm9wZXIgYXNwZWN0IHJhdGlvLiBUaGlzIGlzIHRvIGF2b2lkIGJsYWNrYmFycyBvbiB0aGUgc2lkZSBvZiBpbWFnZXMgYW5kIGluY29uc2lzdGVudCB0aHVtYm5haWxzXG4gICAgICBXZSBzdGlsbCBuZWVkIHRvIHJlbmRlciB0aGUgaW1hZ2UgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGVycm9yIGxvYWRpbmcgdGhlIHVybFxuICAgICovXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3N0YXR1cyA9PT0gVEhVTUJOQUlMX1NUQVRVU0VTLkFQSV9ET1dOIHx8IHN0YXR1cyA9PT0gVEhVTUJOQUlMX1NUQVRVU0VTLk1BTlVBTCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2x1bW5fX2l0ZW0gdGh1bWJuYWlsLXByZXZpZXdcIiBzdHlsZT17eyBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHt0aHVtYm5haWxTcmN9KWAgfX0+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICBzcmM9e3RodW1ibmFpbFNyY31cbiAgICAgICAgICAgICAgICBhbHQ9e19fKCdUaHVtYm5haWwgUHJldmlldycpfVxuICAgICAgICAgICAgICAgIG9uRXJyb3I9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbEVycm9yOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2x1bW5fX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY29udGVudF90aHVtYm5haWxcIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiVVJMXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImh0dHBzOi8vc3BlZS5jaC9teWxvZ29cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aHVtYm5haWx9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Zvcm1EaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVUaHVtYm5haWxDaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdVc2UgdGh1bWJuYWlsIHVwbG9hZCB0b29sJyl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVQdWJsaXNoRm9ybSh7IHVwbG9hZFRodW1ibmFpbFN0YXR1czogVEhVTUJOQUlMX1NUQVRVU0VTLlJFQURZIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAge3N0YXR1cyA9PT0gVEhVTUJOQUlMX1NUQVRVU0VTLlJFQURZICYmIChcbiAgICAgICAgICAgICAgPEZpbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoPXt0aHVtYm5haWxQYXRofVxuICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVGh1bWJuYWlsJyl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdDaG9vc2UgYSB0aHVtYm5haWwnKX1cbiAgICAgICAgICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgICAgICAgICBvbkZpbGVDaG9zZW49e2ZpbGUgPT4gb3Blbk1vZGFsKE1PREFMUy5DT05GSVJNX1RIVU1CTkFJTF9VUExPQUQsIHsgZmlsZSB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c3RhdHVzID09PSBUSFVNQk5BSUxfU1RBVFVTRVMuQ09NUExFVEUgJiYgdGh1bWJuYWlsICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2x1bW4gY29sdW1uLS1zcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2x1bW5fX2l0ZW0gdGh1bWJuYWlsLXByZXZpZXdcIiBzdHlsZT17eyBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHt0aHVtYm5haWx9KWAgfX0gLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtbl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgIFVwbG9hZCBjb21wbGV0ZS4gPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj17dGh1bWJuYWlsfSBsYWJlbD17X18oJ1ZpZXcgaXQgb24gc3BlZS5jaCcpfSAvPi5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ05ldyB0aHVtYm5haWwnKX0gb25DbGljaz17cmVzZXRUaHVtYm5haWxTdGF0dXN9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIHtzdGF0dXMgPT09IFRIVU1CTkFJTF9TVEFUVVNFUy5SRUFEWSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICBsYWJlbD17X18oJ0VudGVyIGEgdGh1bWJuYWlsIFVSTCcpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVQdWJsaXNoRm9ybSh7IHVwbG9hZFRodW1ibmFpbFN0YXR1czogVEhVTUJOQUlMX1NUQVRVU0VTLk1BTlVBTCB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7aXNTdXBwb3J0ZWRWaWRlbyAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1Rha2UgYSBzbmFwc2hvdCBmcm9tIHlvdXIgdmlkZW8nKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLkFVVE9fR0VORVJBVEVfVEhVTUJOQUlMLCB7IGZpbGVQYXRoOiBhY3R1YWxGaWxlUGF0aCB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge3N0YXR1cyA9PT0gVEhVTUJOQUlMX1NUQVRVU0VTLklOX1BST0dSRVNTICYmIDxwPntfXygnVXBsb2FkaW5nIHRodW1ibmFpbCcpfS4uLjwvcD59XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICB7c3RhdHVzID09PSBUSFVNQk5BSUxfU1RBVFVTRVMuQVBJX0RPV04gPyAoXG4gICAgICAgICAgICBfXygnRW50ZXIgYSBVUkwgZm9yIHlvdXIgdGh1bWJuYWlsLicpXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICBzcGVlY2hfbGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9XCJzcGVlLmNoXCIgaHJlZj1cImh0dHBzOi8vc3BlZS5jaC9hYm91dFwiIC8+LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBVcGxvYWQgeW91ciB0aHVtYm5haWwgdG8gJXNwZWVjaF9saW5rJS4gUmVjb21tZW5kZWQgc2l6ZSBpcyAxNjo5LlxuICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdFRodW1ibmFpbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFrQkE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUlBO0FBUEE7QUFRQTtBQUNBOzs7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFSQTtBQVdBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFMQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBVUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFXQTs7OztBQTlKQTtBQUNBO0FBZ0tBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/selectThumbnail/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/settingAutoLaunch/index.js": -/*!**************************************************!*\ - !*** ../ui/component/settingAutoLaunch/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/settingAutoLaunch/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n autoLaunch: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"AUTO_LAUNCH\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n showToast: function showToast(options) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"doToast\"])(options));\n },\n setAutoLaunch: function setAutoLaunch(value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doSetAutoLaunch\"])(value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdBdXRvTGF1bmNoL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zZXR0aW5nQXV0b0xhdW5jaC9pbmRleC5qcz9iZDYyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgZG9TZXRBdXRvTGF1bmNoIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1RvYXN0IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgU2V0dGluZ0F1dG9MYXVuY2ggZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgYXV0b0xhdW5jaDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT19MQVVOQ0gpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgc2hvd1RvYXN0OiBvcHRpb25zID0+IGRpc3BhdGNoKGRvVG9hc3Qob3B0aW9ucykpLFxuICBzZXRBdXRvTGF1bmNoOiB2YWx1ZSA9PiBkaXNwYXRjaChkb1NldEF1dG9MYXVuY2godmFsdWUpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoU2V0dGluZ0F1dG9MYXVuY2gpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/settingAutoLaunch/index.js\n"); - -/***/ }), - -/***/ "../ui/component/settingAutoLaunch/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/settingAutoLaunch/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n\n\n\nfunction SettingAutoLaunch(props) {\n var autoLaunch = props.autoLaunch,\n setAutoLaunch = props.setAutoLaunch;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"checkbox\",\n name: \"autolaunch\",\n onChange: function onChange(e) {\n setAutoLaunch(e.target.checked);\n },\n checked: autoLaunch,\n label: __('Start minimized'),\n helper: __('Improve view speed and help the LBRY network by allowing the app to cuddle up in your system tray.')\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SettingAutoLaunch);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdBdXRvTGF1bmNoL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zZXR0aW5nQXV0b0xhdW5jaC92aWV3LmpzeD83YjdhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuXG50eXBlIFByb3BzID0ge1xuICBhdXRvTGF1bmNoOiBzdHJpbmcsXG4gIHNob3dUb2FzdDogKHt9KSA9PiB2b2lkLFxuICBzZXRBdXRvTGF1bmNoOiBib29sZWFuID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBTZXR0aW5nQXV0b0xhdW5jaChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBhdXRvTGF1bmNoLCBzZXRBdXRvTGF1bmNoIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgbmFtZT1cImF1dG9sYXVuY2hcIlxuICAgICAgICBvbkNoYW5nZT17ZSA9PiB7XG4gICAgICAgICAgc2V0QXV0b0xhdW5jaChlLnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17YXV0b0xhdW5jaH1cbiAgICAgICAgbGFiZWw9e19fKCdTdGFydCBtaW5pbWl6ZWQnKX1cbiAgICAgICAgaGVscGVyPXtfXyhcbiAgICAgICAgICAnSW1wcm92ZSB2aWV3IHNwZWVkIGFuZCBoZWxwIHRoZSBMQlJZIG5ldHdvcmsgYnkgYWxsb3dpbmcgdGhlIGFwcCB0byBjdWRkbGUgdXAgaW4geW91ciBzeXN0ZW0gdHJheS4nXG4gICAgICAgICl9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdBdXRvTGF1bmNoO1xuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQVJBO0FBY0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/settingAutoLaunch/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/settingLanguage/index.js": -/*!************************************************!*\ - !*** ../ui/component/settingLanguage/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/settingLanguage/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n language: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"LANGUAGE\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setLanguage: function setLanguage(value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doSetLanguage\"])(value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdMYW5ndWFnZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc2V0dGluZ0xhbmd1YWdlL2luZGV4LmpzP2Y1MWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCAqIGFzIFNFVFRJTkdTIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NldExhbmd1YWdlIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgU2V0dGluZ0xhbmd1YWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGxhbmd1YWdlOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5MQU5HVUFHRSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBzZXRMYW5ndWFnZTogdmFsdWUgPT4gZGlzcGF0Y2goZG9TZXRMYW5ndWFnZSh2YWx1ZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShTZXR0aW5nTGFuZ3VhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/settingLanguage/index.js\n"); - -/***/ }), - -/***/ "../ui/component/settingLanguage/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/settingLanguage/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var _constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/supported_languages */ \"../ui/constants/supported_languages.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\nfunction SettingLanguage(props) {\n var language = props.language,\n setLanguage = props.setLanguage;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(null),\n _useState2 = _slicedToArray(_useState, 2),\n previousLanguage = _useState2[0],\n setPreviousLanguage = _useState2[1];\n\n var languages = _constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\n if (previousLanguage && language !== previousLanguage) {\n setPreviousLanguage(null);\n }\n\n function onLanguageChange(e) {\n var value = e.target.value;\n setPreviousLanguage(language);\n setLanguage(value);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n name: \"language_select\",\n type: \"select\",\n label: __('Language'),\n onChange: onLanguageChange,\n value: language,\n helper: __('Multi-language support is brand new and incomplete. Switching your language may have unintended consequences, like glossolalia.')\n }, Object.keys(languages).map(function (language) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n key: language,\n value: language\n }, languages[language]);\n })), previousLanguage && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n type: \"small\"\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SettingLanguage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdMYW5ndWFnZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc2V0dGluZ0xhbmd1YWdlL3ZpZXcuanN4PzRmZjAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCBTVVBQT1JURURfTEFOR1VBR0VTIGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdXBwb3J0ZWRfbGFuZ3VhZ2VzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgc2V0TGFuZ3VhZ2U6IHN0cmluZyA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gU2V0dGluZ0xhbmd1YWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGxhbmd1YWdlLCBzZXRMYW5ndWFnZSB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3ByZXZpb3VzTGFuZ3VhZ2UsIHNldFByZXZpb3VzTGFuZ3VhZ2VdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IFNVUFBPUlRFRF9MQU5HVUFHRVM7XG5cbiAgaWYgKHByZXZpb3VzTGFuZ3VhZ2UgJiYgbGFuZ3VhZ2UgIT09IHByZXZpb3VzTGFuZ3VhZ2UpIHtcbiAgICBzZXRQcmV2aW91c0xhbmd1YWdlKG51bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25MYW5ndWFnZUNoYW5nZShlKSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZS50YXJnZXQ7XG4gICAgc2V0UHJldmlvdXNMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgc2V0TGFuZ3VhZ2UodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8Rm9ybUZpZWxkXG4gICAgICAgIG5hbWU9XCJsYW5ndWFnZV9zZWxlY3RcIlxuICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgbGFiZWw9e19fKCdMYW5ndWFnZScpfVxuICAgICAgICBvbkNoYW5nZT17b25MYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgdmFsdWU9e2xhbmd1YWdlfVxuICAgICAgICBoZWxwZXI9e19fKFxuICAgICAgICAgICdNdWx0aS1sYW5ndWFnZSBzdXBwb3J0IGlzIGJyYW5kIG5ldyBhbmQgaW5jb21wbGV0ZS4gU3dpdGNoaW5nIHlvdXIgbGFuZ3VhZ2UgbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMsIGxpa2UgZ2xvc3NvbGFsaWEuJ1xuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7T2JqZWN0LmtleXMobGFuZ3VhZ2VzKS5tYXAobGFuZ3VhZ2UgPT4gKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXtsYW5ndWFnZX0gdmFsdWU9e2xhbmd1YWdlfT5cbiAgICAgICAgICAgIHtsYW5ndWFnZXNbbGFuZ3VhZ2VdfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApKX1cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge3ByZXZpb3VzTGFuZ3VhZ2UgJiYgPFNwaW5uZXIgdHlwZT1cInNtYWxsXCIgLz59XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2V0dGluZ0xhbmd1YWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVVBO0FBQ0E7QUFBQTtBQUFBO0FBWkE7QUFpQkE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/settingLanguage/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/settingWalletServer/index.js": -/*!****************************************************!*\ - !*** ../ui/component/settingWalletServer/index.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/settingWalletServer/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n daemonStatus: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectDaemonStatus\"])(state),\n customWalletServers: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectSavedWalletServers\"])(state),\n hasWalletServerPrefs: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectHasWalletServerPrefs\"])(state),\n walletReconnecting: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsWalletReconnecting\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setCustomWalletServers: function setCustomWalletServers(value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doSetDaemonSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"DAEMON_SETTINGS\"].LBRYUM_SERVERS, value));\n },\n clearWalletServers: function clearWalletServers() {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doClearDaemonSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"DAEMON_SETTINGS\"].LBRYUM_SERVERS));\n },\n getDaemonStatus: function getDaemonStatus() {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doGetDaemonStatus\"])());\n },\n saveServerConfig: function saveServerConfig(servers) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doSaveCustomWalletServers\"])(servers));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdXYWxsZXRTZXJ2ZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NldHRpbmdXYWxsZXRTZXJ2ZXIvaW5kZXguanM/ODlkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgREFFTU9OX1NFVFRJTkdTLCBzZWxlY3RJc1dhbGxldFJlY29ubmVjdGluZyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHtcbiAgZG9TZXREYWVtb25TZXR0aW5nLFxuICBkb0NsZWFyRGFlbW9uU2V0dGluZyxcbiAgZG9HZXREYWVtb25TdGF0dXMsXG4gIGRvU2F2ZUN1c3RvbVdhbGxldFNlcnZlcnMsXG59IGZyb20gJ3JlZHV4L2FjdGlvbnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgc2VsZWN0U2F2ZWRXYWxsZXRTZXJ2ZXJzLCBzZWxlY3REYWVtb25TdGF0dXMsIHNlbGVjdEhhc1dhbGxldFNlcnZlclByZWZzIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCBTZXR0aW5nV2FsbGV0U2VydmVyIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGRhZW1vblN0YXR1czogc2VsZWN0RGFlbW9uU3RhdHVzKHN0YXRlKSxcbiAgY3VzdG9tV2FsbGV0U2VydmVyczogc2VsZWN0U2F2ZWRXYWxsZXRTZXJ2ZXJzKHN0YXRlKSxcbiAgaGFzV2FsbGV0U2VydmVyUHJlZnM6IHNlbGVjdEhhc1dhbGxldFNlcnZlclByZWZzKHN0YXRlKSxcbiAgd2FsbGV0UmVjb25uZWN0aW5nOiBzZWxlY3RJc1dhbGxldFJlY29ubmVjdGluZyhzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNldEN1c3RvbVdhbGxldFNlcnZlcnM6IHZhbHVlID0+IGRpc3BhdGNoKGRvU2V0RGFlbW9uU2V0dGluZyhEQUVNT05fU0VUVElOR1MuTEJSWVVNX1NFUlZFUlMsIHZhbHVlKSksXG4gIGNsZWFyV2FsbGV0U2VydmVyczogKCkgPT4gZGlzcGF0Y2goZG9DbGVhckRhZW1vblNldHRpbmcoREFFTU9OX1NFVFRJTkdTLkxCUllVTV9TRVJWRVJTKSksXG4gIGdldERhZW1vblN0YXR1czogKCkgPT4gZGlzcGF0Y2goZG9HZXREYWVtb25TdGF0dXMoKSksXG4gIHNhdmVTZXJ2ZXJDb25maWc6IHNlcnZlcnMgPT4gZGlzcGF0Y2goZG9TYXZlQ3VzdG9tV2FsbGV0U2VydmVycyhzZXJ2ZXJzKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFNldHRpbmdXYWxsZXRTZXJ2ZXIpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBSEE7QUFJQTtBQUFBO0FBQUE7QUFKQTtBQUFBO0FBQ0E7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/settingWalletServer/index.js\n"); - -/***/ }), - -/***/ "../ui/component/settingWalletServer/internal/inputRow.jsx": -/*!*****************************************************************!*\ - !*** ../ui/component/settingWalletServer/internal/inputRow.jsx ***! - \*****************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\nvar VALID_IPADDRESS_REGEX = new RegExp('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\\\.)){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$');\nvar VALID_HOSTNAME_REGEX = new RegExp('^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(\\\\.))+([A-Za-z]|[A-Za-z][A-Za-z]*[A-Za-z])$');\nvar VALID_PORT_REGEX = new RegExp('^([0-9]){1,5}$');\n\nfunction ServerInputRow(props) {\n var update = props.update;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n hostString = _useState2[0],\n setHostString = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState4 = _slicedToArray(_useState3, 2),\n portString = _useState4[0],\n setPortString = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n validServerString = _useState6[0],\n setValidServerString = _useState6[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n setValidServerString((VALID_IPADDRESS_REGEX.test(hostString) || VALID_HOSTNAME_REGEX.test(hostString)) && VALID_PORT_REGEX.test(portString));\n }, [hostString, portString, validServerString, setValidServerString]);\n\n function onSubmit() {\n update([hostString, portString]);\n setHostString('');\n setPortString('');\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: onSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"text\",\n label: __('Host'),\n placeholder: 'code.freezepeach.fun',\n value: hostString,\n onChange: function onChange(e) {\n return setHostString(e.target.value);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"form-field__conjuction\"\n }, \":\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"number\",\n label: __('Port'),\n placeholder: '50001',\n value: portString,\n onChange: function onChange(e) {\n return setPortString(String(e.target.value));\n }\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n type: \"submit\",\n button: \"primary\",\n label: __('Add'),\n disabled: !validServerString\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ServerInputRow);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdXYWxsZXRTZXJ2ZXIvaW50ZXJuYWwvaW5wdXRSb3cuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zZXR0aW5nV2FsbGV0U2VydmVyL2ludGVybmFsL2lucHV0Um93LmpzeD9kMGE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtLCBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuXG50eXBlIFByb3BzID0ge1xuICB1cGRhdGU6IChbc3RyaW5nLCBzdHJpbmddKSA9PiB2b2lkLFxufTtcblxuY29uc3QgVkFMSURfSVBBRERSRVNTX1JFR0VYID0gbmV3IFJlZ0V4cChcbiAgJ14oKFswLTldfFsxLTldWzAtOV18MVswLTldezJ9fDJbMC00XVswLTldfDI1WzAtNV0pKFxcXFwuKSl7M30oWzAtOV18WzEtOV1bMC05XXwxWzAtOV17Mn18MlswLTRdWzAtOV18MjVbMC01XSkkJ1xuKTtcbmNvbnN0IFZBTElEX0hPU1ROQU1FX1JFR0VYID0gbmV3IFJlZ0V4cChcbiAgJ14oKFthLXpBLVowLTldfFthLXpBLVowLTldW2EtekEtWjAtOS1dKlthLXpBLVowLTldKShcXFxcLikpKyhbQS1aYS16XXxbQS1aYS16XVtBLVphLXpdKltBLVphLXpdKSQnXG4pO1xuY29uc3QgVkFMSURfUE9SVF9SRUdFWCA9IG5ldyBSZWdFeHAoJ14oWzAtOV0pezEsNX0kJyk7XG5cbmZ1bmN0aW9uIFNlcnZlcklucHV0Um93KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHVwZGF0ZSB9ID0gcHJvcHM7XG4gIGNvbnN0IFtob3N0U3RyaW5nLCBzZXRIb3N0U3RyaW5nXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3BvcnRTdHJpbmcsIHNldFBvcnRTdHJpbmddID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbdmFsaWRTZXJ2ZXJTdHJpbmcsIHNldFZhbGlkU2VydmVyU3RyaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZhbGlkU2VydmVyU3RyaW5nKFxuICAgICAgKFZBTElEX0lQQUREUkVTU19SRUdFWC50ZXN0KGhvc3RTdHJpbmcpIHx8IFZBTElEX0hPU1ROQU1FX1JFR0VYLnRlc3QoaG9zdFN0cmluZykpICYmXG4gICAgICAgIFZBTElEX1BPUlRfUkVHRVgudGVzdChwb3J0U3RyaW5nKVxuICAgICk7XG4gIH0sIFtob3N0U3RyaW5nLCBwb3J0U3RyaW5nLCB2YWxpZFNlcnZlclN0cmluZywgc2V0VmFsaWRTZXJ2ZXJTdHJpbmddKTtcblxuICBmdW5jdGlvbiBvblN1Ym1pdCgpIHtcbiAgICB1cGRhdGUoW2hvc3RTdHJpbmcsIHBvcnRTdHJpbmddKTtcbiAgICBzZXRIb3N0U3RyaW5nKCcnKTtcbiAgICBzZXRQb3J0U3RyaW5nKCcnKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEZvcm0gb25TdWJtaXQ9e29uU3VibWl0fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGxhYmVsPXtfXygnSG9zdCcpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXsnY29kZS5mcmVlemVwZWFjaC5mdW4nfVxuICAgICAgICAgIHZhbHVlPXtob3N0U3RyaW5nfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldEhvc3RTdHJpbmcoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb3JtLWZpZWxkX19jb25qdWN0aW9uXCI+Ojwvc3Bhbj5cbiAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGxhYmVsPXtfXygnUG9ydCcpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXsnNTAwMDEnfVxuICAgICAgICAgIHZhbHVlPXtwb3J0U3RyaW5nfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldFBvcnRTdHJpbmcoU3RyaW5nKGUudGFyZ2V0LnZhbHVlKSl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ0FkZCcpfSBkaXNhYmxlZD17IXZhbGlkU2VydmVyU3RyaW5nfSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9Gb3JtPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXJJbnB1dFJvdztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFPQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/settingWalletServer/internal/inputRow.jsx\n"); - -/***/ }), - -/***/ "../ui/component/settingWalletServer/view.jsx": -/*!****************************************************!*\ - !*** ../ui/component/settingWalletServer/view.jsx ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var _internal_inputRow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internal/inputRow */ \"../ui/component/settingWalletServer/internal/inputRow.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\nfunction SettingWalletServer(props) {\n var daemonStatus = props.daemonStatus,\n setCustomWalletServers = props.setCustomWalletServers,\n getDaemonStatus = props.getDaemonStatus,\n clearWalletServers = props.clearWalletServers,\n saveServerConfig = props.saveServerConfig,\n customWalletServers = props.customWalletServers,\n hasWalletServerPrefs = props.hasWalletServerPrefs,\n walletReconnecting = props.walletReconnecting;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n advancedMode = _useState2[0],\n setAdvancedMode = _useState2[1];\n\n var walletStatus = daemonStatus && daemonStatus.wallet;\n var activeWalletServers = walletStatus && walletStatus.servers || [];\n var availableServers = walletStatus && walletStatus.available_servers;\n var serverConfig = customWalletServers;\n var STATUS_INTERVAL = 5000; // onUnmount, if there are no available servers, doClear()\n // in order to replicate componentWillUnmount, the effect needs to get the value from a ref\n\n var hasAvailableRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return function () {\n hasAvailableRef.current = availableServers;\n };\n }, [availableServers]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return function () {\n if (!hasAvailableRef.current) {\n doClear();\n }\n };\n }, []);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (hasWalletServerPrefs) {\n setAdvancedMode(true);\n }\n }, []);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var interval = setInterval(function () {\n getDaemonStatus();\n }, STATUS_INTERVAL);\n return function () {\n return clearInterval(interval);\n };\n }, []);\n\n function makeServerParam(configList) {\n return configList.reduce(function (acc, cur) {\n acc.push(\"\".concat(cur[0], \":\").concat(cur[1]));\n return acc;\n }, []);\n }\n\n function doClear() {\n setAdvancedMode(false);\n clearWalletServers();\n }\n\n function onAdd(serverTuple) {\n var newServerConfig = serverConfig.concat();\n newServerConfig.push(serverTuple);\n updateServers(newServerConfig);\n }\n\n function onDelete(i) {\n var newServerConfig = serverConfig.concat();\n newServerConfig.splice(i, 1);\n updateServers(newServerConfig);\n }\n\n function updateServers(newConfig) {\n saveServerConfig(newConfig);\n setCustomWalletServers(makeServerParam(newConfig));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"radio\",\n name: \"default_wallet_servers\",\n checked: !advancedMode,\n label: __('Use official lbry.tv wallet servers'),\n onChange: function onChange(e) {\n if (e.target.checked) {\n doClear();\n }\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"radio\",\n name: \"custom_wallet_servers\",\n checked: advancedMode,\n onChange: function onChange(e) {\n setAdvancedMode(e.target.checked);\n\n if (e.target.checked && customWalletServers.length) {\n setCustomWalletServers(makeServerParam(customWalletServers));\n }\n },\n label: __('Use custom wallet servers')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tokens: {\n learn_more: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: \"http://lbry.com/faq/wallet-servers\",\n label: __('Learn More')\n })\n }\n }, \"Wallet servers are used to relay data to and from the LBRY blockchain. They also determine what content shows in trending or is blocked. %learn_more%.\")), advancedMode && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, serverConfig && serverConfig.map(function (entry, index) {\n var _entry = _slicedToArray(entry, 2),\n host = _entry[0],\n port = _entry[1];\n\n var available = activeWalletServers.some(function (s) {\n return s.host === entry[0] && String(s.port) === entry[1] && s.availability;\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n key: \"\".concat(host, \":\").concat(port),\n className: \"section section--padded card--inline form-field__internal-option\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h3\", null, host, \":\", port), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"help\"\n }, available ? 'Connected' : walletReconnecting ? 'Connecting...' : 'Not connected'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"close\",\n title: __('Remove custom wallet server'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_4__[\"REMOVE\"],\n onClick: function onClick() {\n return onDelete(index);\n }\n }));\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-field__internal-option\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_internal_inputRow__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n update: onAdd\n })))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SettingWalletServer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NldHRpbmdXYWxsZXRTZXJ2ZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NldHRpbmdXYWxsZXRTZXJ2ZXIvdmlldy5qc3g/MDAxYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgU2VydmVySW5wdXRSb3cgZnJvbSAnLi9pbnRlcm5hbC9pbnB1dFJvdyc7XG5cbnR5cGUgU3RhdHVzT2ZTZXJ2ZXIgPSB7XG4gIGhvc3Q6IHN0cmluZyxcbiAgcG9ydDogc3RyaW5nLFxuICBhdmFpbGFiaWxpdHk6IGJvb2xlYW4sXG4gIGxhdGVuY3k6IG51bWJlcixcbn07XG5cbnR5cGUgU2VydmVyVHVwbGUgPSBbc3RyaW5nLCBzdHJpbmddOyAvLyBbJ2hvc3QnLCAncG9ydCddXG50eXBlIFNlcnZlclN0YXR1cyA9IEFycmF5PFN0YXR1c09mU2VydmVyPjtcbnR5cGUgU2VydmVyQ29uZmlnID0gQXJyYXk8U2VydmVyVHVwbGU+O1xudHlwZSBEYWVtb25TdGF0dXMgPSB7XG4gIHdhbGxldDogYW55LFxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgZ2V0RGFlbW9uU3RhdHVzOiAoKSA9PiB2b2lkLFxuICBzZXRDdXN0b21XYWxsZXRTZXJ2ZXJzOiBhbnkgPT4gdm9pZCxcbiAgY2xlYXJXYWxsZXRTZXJ2ZXJzOiAoKSA9PiB2b2lkLFxuICBjdXN0b21XYWxsZXRTZXJ2ZXJzOiBTZXJ2ZXJDb25maWcsXG4gIHNhdmVTZXJ2ZXJDb25maWc6IChBcnJheTxTZXJ2ZXJUdXBsZT4pID0+IHZvaWQsXG4gIGhhc1dhbGxldFNlcnZlclByZWZzOiBib29sZWFuLFxuICBkYWVtb25TdGF0dXM6IERhZW1vblN0YXR1cyxcbiAgd2FsbGV0UmVjb25uZWN0aW5nOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gU2V0dGluZ1dhbGxldFNlcnZlcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGRhZW1vblN0YXR1cyxcbiAgICBzZXRDdXN0b21XYWxsZXRTZXJ2ZXJzLFxuICAgIGdldERhZW1vblN0YXR1cyxcbiAgICBjbGVhcldhbGxldFNlcnZlcnMsXG4gICAgc2F2ZVNlcnZlckNvbmZpZyxcbiAgICBjdXN0b21XYWxsZXRTZXJ2ZXJzLFxuICAgIGhhc1dhbGxldFNlcnZlclByZWZzLFxuICAgIHdhbGxldFJlY29ubmVjdGluZyxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFthZHZhbmNlZE1vZGUsIHNldEFkdmFuY2VkTW9kZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgd2FsbGV0U3RhdHVzID0gZGFlbW9uU3RhdHVzICYmIGRhZW1vblN0YXR1cy53YWxsZXQ7XG4gIGNvbnN0IGFjdGl2ZVdhbGxldFNlcnZlcnM6IFNlcnZlclN0YXR1cyA9ICh3YWxsZXRTdGF0dXMgJiYgd2FsbGV0U3RhdHVzLnNlcnZlcnMpIHx8IFtdO1xuICBjb25zdCBhdmFpbGFibGVTZXJ2ZXJzID0gd2FsbGV0U3RhdHVzICYmIHdhbGxldFN0YXR1cy5hdmFpbGFibGVfc2VydmVycztcbiAgY29uc3Qgc2VydmVyQ29uZmlnOiBTZXJ2ZXJDb25maWcgPSBjdXN0b21XYWxsZXRTZXJ2ZXJzO1xuICBjb25zdCBTVEFUVVNfSU5URVJWQUwgPSA1MDAwO1xuXG4gIC8vIG9uVW5tb3VudCwgaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBzZXJ2ZXJzLCBkb0NsZWFyKClcbiAgLy8gaW4gb3JkZXIgdG8gcmVwbGljYXRlIGNvbXBvbmVudFdpbGxVbm1vdW50LCB0aGUgZWZmZWN0IG5lZWRzIHRvIGdldCB0aGUgdmFsdWUgZnJvbSBhIHJlZlxuICBjb25zdCBoYXNBdmFpbGFibGVSZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KFxuICAgICgpID0+ICgpID0+IHtcbiAgICAgIGhhc0F2YWlsYWJsZVJlZi5jdXJyZW50ID0gYXZhaWxhYmxlU2VydmVycztcbiAgICB9LFxuICAgIFthdmFpbGFibGVTZXJ2ZXJzXVxuICApO1xuXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PiAoKSA9PiB7XG4gICAgICBpZiAoIWhhc0F2YWlsYWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGRvQ2xlYXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzV2FsbGV0U2VydmVyUHJlZnMpIHtcbiAgICAgIHNldEFkdmFuY2VkTW9kZSh0cnVlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgZ2V0RGFlbW9uU3RhdHVzKCk7XG4gICAgfSwgU1RBVFVTX0lOVEVSVkFMKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH0sIFtdKTtcblxuICBmdW5jdGlvbiBtYWtlU2VydmVyUGFyYW0oY29uZmlnTGlzdCkge1xuICAgIHJldHVybiBjb25maWdMaXN0LnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgIGFjYy5wdXNoKGAke2N1clswXX06JHtjdXJbMV19YCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvQ2xlYXIoKSB7XG4gICAgc2V0QWR2YW5jZWRNb2RlKGZhbHNlKTtcbiAgICBjbGVhcldhbGxldFNlcnZlcnMoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQWRkKHNlcnZlclR1cGxlOiBTZXJ2ZXJUdXBsZSkge1xuICAgIGxldCBuZXdTZXJ2ZXJDb25maWcgPSBzZXJ2ZXJDb25maWcuY29uY2F0KCk7XG4gICAgbmV3U2VydmVyQ29uZmlnLnB1c2goc2VydmVyVHVwbGUpO1xuICAgIHVwZGF0ZVNlcnZlcnMobmV3U2VydmVyQ29uZmlnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRGVsZXRlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IG5ld1NlcnZlckNvbmZpZyA9IHNlcnZlckNvbmZpZy5jb25jYXQoKTtcbiAgICBuZXdTZXJ2ZXJDb25maWcuc3BsaWNlKGksIDEpO1xuICAgIHVwZGF0ZVNlcnZlcnMobmV3U2VydmVyQ29uZmlnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNlcnZlcnMobmV3Q29uZmlnKSB7XG4gICAgc2F2ZVNlcnZlckNvbmZpZyhuZXdDb25maWcpO1xuICAgIHNldEN1c3RvbVdhbGxldFNlcnZlcnMobWFrZVNlcnZlclBhcmFtKG5ld0NvbmZpZykpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgbmFtZT1cImRlZmF1bHRfd2FsbGV0X3NlcnZlcnNcIlxuICAgICAgICAgIGNoZWNrZWQ9eyFhZHZhbmNlZE1vZGV9XG4gICAgICAgICAgbGFiZWw9e19fKCdVc2Ugb2ZmaWNpYWwgbGJyeS50diB3YWxsZXQgc2VydmVycycpfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgIGRvQ2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBuYW1lPVwiY3VzdG9tX3dhbGxldF9zZXJ2ZXJzXCJcbiAgICAgICAgICBjaGVja2VkPXthZHZhbmNlZE1vZGV9XG4gICAgICAgICAgb25DaGFuZ2U9e2UgPT4ge1xuICAgICAgICAgICAgc2V0QWR2YW5jZWRNb2RlKGUudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQgJiYgY3VzdG9tV2FsbGV0U2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc2V0Q3VzdG9tV2FsbGV0U2VydmVycyhtYWtlU2VydmVyUGFyYW0oY3VzdG9tV2FsbGV0U2VydmVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgbGFiZWw9e19fKCdVc2UgY3VzdG9tIHdhbGxldCBzZXJ2ZXJzJyl9XG4gICAgICAgIC8+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgICBsZWFybl9tb3JlOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cDovL2xicnkuY29tL2ZhcS93YWxsZXQtc2VydmVyc1wiIGxhYmVsPXtfXygnTGVhcm4gTW9yZScpfSAvPixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgV2FsbGV0IHNlcnZlcnMgYXJlIHVzZWQgdG8gcmVsYXkgZGF0YSB0byBhbmQgZnJvbSB0aGUgTEJSWSBibG9ja2NoYWluLiBUaGV5IGFsc28gZGV0ZXJtaW5lIHdoYXQgY29udGVudFxuICAgICAgICAgICAgc2hvd3MgaW4gdHJlbmRpbmcgb3IgaXMgYmxvY2tlZC4gJWxlYXJuX21vcmUlLlxuICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgIDwvcD5cblxuICAgICAgICB7YWR2YW5jZWRNb2RlICYmIChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge3NlcnZlckNvbmZpZyAmJlxuICAgICAgICAgICAgICBzZXJ2ZXJDb25maWcubWFwKChlbnRyeSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbaG9zdCwgcG9ydF0gPSBlbnRyeTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGUgPSBhY3RpdmVXYWxsZXRTZXJ2ZXJzLnNvbWUoXG4gICAgICAgICAgICAgICAgICBzID0+IHMuaG9zdCA9PT0gZW50cnlbMF0gJiYgU3RyaW5nKHMucG9ydCkgPT09IGVudHJ5WzFdICYmIHMuYXZhaWxhYmlsaXR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aG9zdH06JHtwb3J0fWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNlY3Rpb24gc2VjdGlvbi0tcGFkZGVkIGNhcmQtLWlubGluZSBmb3JtLWZpZWxkX19pbnRlcm5hbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aDM+XG4gICAgICAgICAgICAgICAgICAgICAge2hvc3R9Ontwb3J0fVxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZSA/ICdDb25uZWN0ZWQnIDogd2FsbGV0UmVjb25uZWN0aW5nID8gJ0Nvbm5lY3RpbmcuLi4nIDogJ05vdCBjb25uZWN0ZWQnfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBidXR0b249XCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e19fKCdSZW1vdmUgY3VzdG9tIHdhbGxldCBzZXJ2ZXInKX1cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXtJQ09OUy5SRU1PVkV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25EZWxldGUoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZmllbGRfX2ludGVybmFsLW9wdGlvblwiPlxuICAgICAgICAgICAgICA8U2VydmVySW5wdXRSb3cgdXBkYXRlPXtvbkFkZH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9maWVsZHNldC1zZWN0aW9uPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdXYWxsZXRTZXJ2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEwQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFWQTtBQVlBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQURBO0FBYUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUVBO0FBQ0E7QUFGQTtBQU9BO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQW5CQTtBQTRCQTtBQUFBO0FBQ0E7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/settingWalletServer/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/shareButton/index.js": -/*!********************************************!*\ - !*** ../ui/component/shareButton/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/shareButton/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doChannelSubscribe: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doChannelSubscribe\"],\n doChannelUnsubscribe: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doChannelUnsubscribe\"],\n doOpenModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"],\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NoYXJlQnV0dG9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zaGFyZUJ1dHRvbi9pbmRleC5qcz8yNmIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0NoYW5uZWxTdWJzY3JpYmUsIGRvQ2hhbm5lbFVuc3Vic2NyaWJlIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgZG9Ub2FzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFNoYXJlQnV0dG9uIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAge1xuICAgIGRvQ2hhbm5lbFN1YnNjcmliZSxcbiAgICBkb0NoYW5uZWxVbnN1YnNjcmliZSxcbiAgICBkb09wZW5Nb2RhbCxcbiAgICBkb1RvYXN0LFxuICB9XG4pKFNoYXJlQnV0dG9uKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/shareButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/shareButton/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/shareButton/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ShareButton; });\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\nfunction ShareButton(props) {\n var uri = props.uri,\n doOpenModal = props.doOpenModal;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SHARE\"],\n label: __('Share'),\n onClick: function onClick() {\n return doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"SOCIAL_SHARE\"], {\n uri: uri,\n webShareable: true\n });\n }\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NoYXJlQnV0dG9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zaGFyZUJ1dHRvbi92aWV3LmpzeD8wNzkxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGRvT3Blbk1vZGFsOiAoaWQ6IHN0cmluZywge30pID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTaGFyZUJ1dHRvbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB1cmksIGRvT3Blbk1vZGFsIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICBpY29uPXtJQ09OUy5TSEFSRX1cbiAgICAgIGxhYmVsPXtfXygnU2hhcmUnKX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IGRvT3Blbk1vZGFsKE1PREFMUy5TT0NJQUxfU0hBUkUsIHsgdXJpLCB3ZWJTaGFyZWFibGU6IHRydWUgfSl9XG4gICAgLz5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFPQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/shareButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/sideNavigation/index.js": -/*!***********************************************!*\ - !*** ../ui/component/sideNavigation/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./view */ \"../ui/component/sideNavigation/view.jsx\");\n\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n subscriptions: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectSubscriptions\"])(state),\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectFollowedTags\"])(state),\n language: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"LANGUAGE\"])(state),\n // trigger redraw on language change\n uploadCount: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUploadCount\"])(state),\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, {\n doSignOut: redux_actions_app__WEBPACK_IMPORTED_MODULE_6__[\"doSignOut\"]\n})(_view__WEBPACK_IMPORTED_MODULE_7__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NpZGVOYXZpZ2F0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zaWRlTmF2aWdhdGlvbi9pbmRleC5qcz81YjliIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNFVFRJTkdTIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0U3Vic2NyaXB0aW9ucyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHNlbGVjdEZvbGxvd2VkVGFncyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXBsb2FkQ291bnQsIHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NpZ25PdXQgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgU2lkZU5hdmlnYXRpb24gZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgc3Vic2NyaXB0aW9uczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbiAgbGFuZ3VhZ2U6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkxBTkdVQUdFKShzdGF0ZSksIC8vIHRyaWdnZXIgcmVkcmF3IG9uIGxhbmd1YWdlIGNoYW5nZVxuICB1cGxvYWRDb3VudDogc2VsZWN0VXBsb2FkQ291bnQoc3RhdGUpLFxuICBlbWFpbDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAge1xuICAgIGRvU2lnbk91dCxcbiAgfVxuKShTaWRlTmF2aWdhdGlvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFHQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/sideNavigation/index.js\n"); - -/***/ }), - -/***/ "../ui/component/sideNavigation/view.jsx": -/*!***********************************************!*\ - !*** ../ui/component/sideNavigation/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_tag__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/tag */ \"../ui/component/tag/index.js\");\n/* harmony import */ var react_sticky_box_dist_esnext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-sticky-box/dist/esnext */ \"../node_modules/react-sticky-box/dist/esnext/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lbrytv/component/ads */ \"./component/ads.jsx\");\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\nvar SHOW_CHANNELS = 'SHOW_CHANNELS';\nvar SHOW_TAGS = 'SHOW_TAGS';\n\nfunction SideNavigation(props) {\n var subscriptions = props.subscriptions,\n followedTags = props.followedTags,\n uploadCount = props.uploadCount,\n doSignOut = props.doSignOut,\n email = props.email,\n _props$sticky = props.sticky,\n sticky = _props$sticky === void 0 ? true : _props$sticky,\n _props$expanded = props.expanded,\n expanded = _props$expanded === void 0 ? false : _props$expanded,\n location = props.location;\n var pathname = location.pathname;\n var isAuthenticated = Boolean(email);\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('side-navigation:information', getSideInformation(pathname)),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n sideInformation = _usePersistedState2[0],\n setSideInformation = _usePersistedState2[1];\n\n var isPersonalized = false || isAuthenticated;\n var requireAuthOnPersonalizedActions = true;\n\n function getSideInformation(path) {\n switch (path) {\n case \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING\"]):\n return SHOW_CHANNELS;\n\n case \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING\"]):\n return SHOW_TAGS;\n\n default:\n return sideInformation;\n }\n }\n\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n var sideInfo = getSideInformation(pathname);\n setSideInformation(sideInfo);\n }, [pathname, setSideInformation]);\n\n function buildLink(path, label, icon, onClick) {\n var requiresAuth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n return {\n navigate: path ? \"$/\".concat(path) : '/',\n label: label,\n icon: icon,\n onClick: onClick,\n requiresAuth: requiresAuth\n };\n }\n\n var Wrapper = function Wrapper(_ref) {\n var children = _ref.children;\n return sticky ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_sticky_box_dist_esnext__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n offsetTop: 100,\n offsetBottom: 20\n }, children) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null, children);\n };\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Wrapper, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"nav\", {\n className: \"navigation\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"ul\", {\n className: \"navigation-links\"\n }, [_objectSpread({}, expanded && !isAuthenticated ? _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], __('Sign In'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SIGN_IN\"])) : {}), _objectSpread({}, buildLink(null, __('Home'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"HOME\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING\"], __('Following'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SUBSCRIBE\"], null, requireAuthOnPersonalizedActions)), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING\"], __('Your Tags'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"TAG\"], null, requireAuthOnPersonalizedActions)), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"], __('All Content'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"]))].map(function (linkProps) {\n return linkProps.navigate && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"li\", {\n key: linkProps.navigate\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _extends({}, linkProps, {\n className: \"navigation-link\",\n activeClass: \"navigation-link--active\"\n })));\n }), expanded && isPersonalized && [_objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS\"], __('Channels'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"CHANNEL\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISHED\"], uploadCount ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('Publishes'), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n type: \"small\"\n })) : __('Publishes'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"PUBLISH\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CREATOR_DASHBOARD\"], __('Creator Analytics'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"ANALYTICS\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"WALLET\"], __('Wallet'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"WALLET\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"REWARDS\"], __('Rewards'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"FEATURED\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"INVITE\"], __('Invites'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"INVITE\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"], __('Publish'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"PUBLISH\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"], __('Settings'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"])), _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"], __('Help'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"HELP\"])), _objectSpread({}, isAuthenticated ? _objectSpread({}, buildLink(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], __('Sign Out'), constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SIGN_OUT\"], doSignOut)) : {})].map(function (linkProps) {\n return Object.keys(linkProps).length > 0 && linkProps && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"li\", {\n key: linkProps.navigate\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _extends({}, linkProps, {\n className: \"navigation-link\",\n activeClass: \"navigation-link--active\"\n })));\n })), sideInformation === SHOW_TAGS && !expanded && isPersonalized && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"ul\", {\n className: \"navigation__secondary navigation-links--small tags--vertical\"\n }, followedTags.map(function (_ref2, key) {\n var name = _ref2.name;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"li\", {\n className: \"navigation-link__wrapper\",\n key: name\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n navigate: \"/$/tags?t\".concat(name),\n name: name\n }));\n })), sideInformation === SHOW_CHANNELS && !expanded && isPersonalized && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"ul\", {\n className: \"navigation__secondary navigation-links--small\"\n }, subscriptions.map(function (_ref3, index) {\n var uri = _ref3.uri,\n channelName = _ref3.channelName;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"li\", {\n key: uri,\n className: \"navigation-link__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n navigate: uri,\n label: channelName,\n className: \"navigation-link\",\n activeClass: \"navigation-link--active\"\n }));\n }))), !isAuthenticated && !expanded && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(SideNavigation));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NpZGVOYXZpZ2F0aW9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zaWRlTmF2aWdhdGlvbi92aWV3LmpzeD81MmY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgVGFnIGZyb20gJ2NvbXBvbmVudC90YWcnO1xuaW1wb3J0IFN0aWNreUJveCBmcm9tICdyZWFjdC1zdGlja3ktYm94L2Rpc3QvZXNuZXh0JztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuaW1wb3J0IEFkcyBmcm9tICdsYnJ5dHYvY29tcG9uZW50L2Fkcyc7XG5cbmNvbnN0IFNIT1dfQ0hBTk5FTFMgPSAnU0hPV19DSEFOTkVMUyc7XG5jb25zdCBTSE9XX1RBR1MgPSAnU0hPV19UQUdTJztcblxudHlwZSBQcm9wcyA9IHtcbiAgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPixcbiAgZm9sbG93ZWRUYWdzOiBBcnJheTxUYWc+LFxuICBlbWFpbDogP3N0cmluZyxcbiAgdXBsb2FkQ291bnQ6IG51bWJlcixcbiAgc3RpY2t5OiBib29sZWFuLFxuICBleHBhbmRlZDogYm9vbGVhbixcbiAgZG9TaWduT3V0OiAoKSA9PiB2b2lkLFxuICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nIH0sXG59O1xuXG5mdW5jdGlvbiBTaWRlTmF2aWdhdGlvbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN1YnNjcmlwdGlvbnMsXG4gICAgZm9sbG93ZWRUYWdzLFxuICAgIHVwbG9hZENvdW50LFxuICAgIGRvU2lnbk91dCxcbiAgICBlbWFpbCxcbiAgICBzdGlja3kgPSB0cnVlLFxuICAgIGV4cGFuZGVkID0gZmFsc2UsXG4gICAgbG9jYXRpb24sXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyBwYXRobmFtZSB9ID0gbG9jYXRpb247XG4gIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IEJvb2xlYW4oZW1haWwpO1xuICBjb25zdCBbc2lkZUluZm9ybWF0aW9uLCBzZXRTaWRlSW5mb3JtYXRpb25dID0gdXNlUGVyc2lzdGVkU3RhdGUoXG4gICAgJ3NpZGUtbmF2aWdhdGlvbjppbmZvcm1hdGlvbicsXG4gICAgZ2V0U2lkZUluZm9ybWF0aW9uKHBhdGhuYW1lKVxuICApO1xuXG4gIGNvbnN0IGlzUGVyc29uYWxpemVkID0gIUlTX1dFQiB8fCBpc0F1dGhlbnRpY2F0ZWQ7XG4gIGNvbnN0IHJlcXVpcmVBdXRoT25QZXJzb25hbGl6ZWRBY3Rpb25zID0gSVNfV0VCO1xuXG4gIGZ1bmN0aW9uIGdldFNpZGVJbmZvcm1hdGlvbihwYXRoKSB7XG4gICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICBjYXNlIGAvJC8ke1BBR0VTLkNIQU5ORUxTX0ZPTExPV0lOR31gOlxuICAgICAgICByZXR1cm4gU0hPV19DSEFOTkVMUztcblxuICAgICAgY2FzZSBgLyQvJHtQQUdFUy5UQUdTX0ZPTExPV0lOR31gOlxuICAgICAgICByZXR1cm4gU0hPV19UQUdTO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc2lkZUluZm9ybWF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2lkZUluZm8gPSBnZXRTaWRlSW5mb3JtYXRpb24ocGF0aG5hbWUpO1xuICAgIHNldFNpZGVJbmZvcm1hdGlvbihzaWRlSW5mbyk7XG4gIH0sIFtwYXRobmFtZSwgc2V0U2lkZUluZm9ybWF0aW9uXSk7XG5cbiAgZnVuY3Rpb24gYnVpbGRMaW5rKHBhdGgsIGxhYmVsLCBpY29uLCBvbkNsaWNrLCByZXF1aXJlc0F1dGggPSBmYWxzZSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYXZpZ2F0ZTogcGF0aCA/IGAkLyR7cGF0aH1gIDogJy8nLFxuICAgICAgbGFiZWwsXG4gICAgICBpY29uLFxuICAgICAgb25DbGljayxcbiAgICAgIHJlcXVpcmVzQXV0aCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgV3JhcHBlciA9ICh7IGNoaWxkcmVuIH06IGFueSkgPT5cbiAgICBzdGlja3kgPyAoXG4gICAgICA8U3RpY2t5Qm94IG9mZnNldFRvcD17MTAwfSBvZmZzZXRCb3R0b209ezIwfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TdGlja3lCb3g+XG4gICAgKSA6IChcbiAgICAgIDxkaXY+e2NoaWxkcmVufTwvZGl2PlxuICAgICk7XG5cbiAgcmV0dXJuIChcbiAgICA8V3JhcHBlcj5cbiAgICAgIDxuYXYgY2xhc3NOYW1lPVwibmF2aWdhdGlvblwiPlxuICAgICAgICA8dWwgY2xhc3NOYW1lPVwibmF2aWdhdGlvbi1saW5rc1wiPlxuICAgICAgICAgIHtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLihleHBhbmRlZCAmJiAhaXNBdXRoZW50aWNhdGVkID8geyAuLi5idWlsZExpbmsoUEFHRVMuQVVUSCwgX18oJ1NpZ24gSW4nKSwgSUNPTlMuU0lHTl9JTikgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmJ1aWxkTGluayhudWxsLCBfXygnSG9tZScpLCBJQ09OUy5IT01FKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmJ1aWxkTGluayhcbiAgICAgICAgICAgICAgICBQQUdFUy5DSEFOTkVMU19GT0xMT1dJTkcsXG4gICAgICAgICAgICAgICAgX18oJ0ZvbGxvd2luZycpLFxuICAgICAgICAgICAgICAgIElDT05TLlNVQlNDUklCRSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVBdXRoT25QZXJzb25hbGl6ZWRBY3Rpb25zXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5idWlsZExpbmsoUEFHRVMuVEFHU19GT0xMT1dJTkcsIF9fKCdZb3VyIFRhZ3MnKSwgSUNPTlMuVEFHLCBudWxsLCByZXF1aXJlQXV0aE9uUGVyc29uYWxpemVkQWN0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5idWlsZExpbmsoUEFHRVMuRElTQ09WRVIsIF9fKCdBbGwgQ29udGVudCcpLCBJQ09OUy5ESVNDT1ZFUiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0ubWFwKFxuICAgICAgICAgICAgbGlua1Byb3BzID0+XG4gICAgICAgICAgICAgIGxpbmtQcm9wcy5uYXZpZ2F0ZSAmJiAoXG4gICAgICAgICAgICAgICAgPGxpIGtleT17bGlua1Byb3BzLm5hdmlnYXRlfT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gey4uLmxpbmtQcm9wc30gY2xhc3NOYW1lPVwibmF2aWdhdGlvbi1saW5rXCIgYWN0aXZlQ2xhc3M9XCJuYXZpZ2F0aW9uLWxpbmstLWFjdGl2ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7ZXhwYW5kZWQgJiZcbiAgICAgICAgICAgIGlzUGVyc29uYWxpemVkICYmXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5idWlsZExpbmsoUEFHRVMuQ0hBTk5FTFMsIF9fKCdDaGFubmVscycpLCBJQ09OUy5DSEFOTkVMKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmJ1aWxkTGluayhcbiAgICAgICAgICAgICAgICAgIFBBR0VTLlBVQkxJU0hFRCxcbiAgICAgICAgICAgICAgICAgIHVwbG9hZENvdW50ID8gKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7X18oJ1B1Ymxpc2hlcycpfVxuICAgICAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHR5cGU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIF9fKCdQdWJsaXNoZXMnKVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIElDT05TLlBVQkxJU0hcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uYnVpbGRMaW5rKFBBR0VTLkNSRUFUT1JfREFTSEJPQVJELCBfXygnQ3JlYXRvciBBbmFseXRpY3MnKSwgSUNPTlMuQU5BTFlUSUNTKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmJ1aWxkTGluayhQQUdFUy5XQUxMRVQsIF9fKCdXYWxsZXQnKSwgSUNPTlMuV0FMTEVUKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmJ1aWxkTGluayhQQUdFUy5SRVdBUkRTLCBfXygnUmV3YXJkcycpLCBJQ09OUy5GRUFUVVJFRCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5idWlsZExpbmsoUEFHRVMuSU5WSVRFLCBfXygnSW52aXRlcycpLCBJQ09OUy5JTlZJVEUpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uYnVpbGRMaW5rKFBBR0VTLlBVQkxJU0gsIF9fKCdQdWJsaXNoJyksIElDT05TLlBVQkxJU0gpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uYnVpbGRMaW5rKFBBR0VTLlNFVFRJTkdTLCBfXygnU2V0dGluZ3MnKSwgSUNPTlMuU0VUVElOR1MpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uYnVpbGRMaW5rKFBBR0VTLkhFTFAsIF9fKCdIZWxwJyksIElDT05TLkhFTFApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uKGlzQXV0aGVudGljYXRlZCA/IHsgLi4uYnVpbGRMaW5rKFBBR0VTLkFVVEgsIF9fKCdTaWduIE91dCcpLCBJQ09OUy5TSUdOX09VVCwgZG9TaWduT3V0KSB9IDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXS5tYXAoXG4gICAgICAgICAgICAgIGxpbmtQcm9wcyA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGxpbmtQcm9wcykubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIGxpbmtQcm9wcyAmJiAoXG4gICAgICAgICAgICAgICAgICA8bGkga2V5PXtsaW5rUHJvcHMubmF2aWdhdGV9PlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHsuLi5saW5rUHJvcHN9IGNsYXNzTmFtZT1cIm5hdmlnYXRpb24tbGlua1wiIGFjdGl2ZUNsYXNzPVwibmF2aWdhdGlvbi1saW5rLS1hY3RpdmVcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApfVxuICAgICAgICA8L3VsPlxuXG4gICAgICAgIHtzaWRlSW5mb3JtYXRpb24gPT09IFNIT1dfVEFHUyAmJiAhZXhwYW5kZWQgJiYgaXNQZXJzb25hbGl6ZWQgJiYgKFxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJuYXZpZ2F0aW9uX19zZWNvbmRhcnkgbmF2aWdhdGlvbi1saW5rcy0tc21hbGwgdGFncy0tdmVydGljYWxcIj5cbiAgICAgICAgICAgIHtmb2xsb3dlZFRhZ3MubWFwKCh7IG5hbWUgfSwga2V5KSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJuYXZpZ2F0aW9uLWxpbmtfX3dyYXBwZXJcIiBrZXk9e25hbWV9PlxuICAgICAgICAgICAgICAgIDxUYWcgbmF2aWdhdGU9e2AvJC90YWdzP3Qke25hbWV9YH0gbmFtZT17bmFtZX0gLz5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICl9XG5cbiAgICAgICAge3NpZGVJbmZvcm1hdGlvbiA9PT0gU0hPV19DSEFOTkVMUyAmJiAhZXhwYW5kZWQgJiYgaXNQZXJzb25hbGl6ZWQgJiYgKFxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJuYXZpZ2F0aW9uX19zZWNvbmRhcnkgbmF2aWdhdGlvbi1saW5rcy0tc21hbGxcIj5cbiAgICAgICAgICAgIHtzdWJzY3JpcHRpb25zLm1hcCgoeyB1cmksIGNoYW5uZWxOYW1lIH0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBrZXk9e3VyaX0gY2xhc3NOYW1lPVwibmF2aWdhdGlvbi1saW5rX193cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgbmF2aWdhdGU9e3VyaX1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtjaGFubmVsTmFtZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5hdmlnYXRpb24tbGlua1wiXG4gICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcz1cIm5hdmlnYXRpb24tbGluay0tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgKX1cbiAgICAgIDwvbmF2PlxuICAgICAgeyFpc0F1dGhlbnRpY2F0ZWQgJiYgIWV4cGFuZGVkICYmIDxBZHMgLz59XG4gICAgPC9XcmFwcGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFNpZGVOYXZpZ2F0aW9uKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBO0FBQ0E7QUFiQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBUUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQXdCQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUEzQkE7QUE0Q0E7QUFBQTtBQWlDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFsRkE7QUF5RkE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUE1RkE7QUFtR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUF2R0E7QUFxSEE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/sideNavigation/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/snackBar/index.js": -/*!*****************************************!*\ - !*** ../ui/component/snackBar/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/snackBar/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n removeSnack: function removeSnack() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doDismissToast\"])());\n }\n };\n};\n\nvar select = function select(state) {\n return {\n snack: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectToast\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NuYWNrQmFyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zbmFja0Jhci9pbmRleC5qcz82ZmJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RUb2FzdCwgZG9EaXNtaXNzVG9hc3QgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBTbmFja0JhciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVtb3ZlU25hY2s6ICgpID0+IGRpc3BhdGNoKGRvRGlzbWlzc1RvYXN0KCkpLFxufSk7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHNuYWNrOiBzZWxlY3RUb2FzdChzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFNuYWNrQmFyKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/snackBar/index.js\n"); - -/***/ }), - -/***/ "../ui/component/snackBar/view.jsx": -/*!*****************************************!*\ - !*** ../ui/component/snackBar/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar SnackBar = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(SnackBar, _React$PureComponent);\n\n function SnackBar(props) {\n var _this;\n\n _classCallCheck(this, SnackBar);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SnackBar).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"hideTimeout\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"displayTime\", void 0);\n\n _this.displayTime = 5; // in seconds\n\n _this.hideTimeout = null;\n return _this;\n }\n\n _createClass(SnackBar, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n snack = _this$props.snack,\n removeSnack = _this$props.removeSnack;\n\n if (!snack) {\n this.hideTimeout = null; // should be unmounting anyway, but be safe?\n\n return null;\n }\n\n var message = snack.message,\n linkText = snack.linkText,\n linkTarget = snack.linkTarget,\n isError = snack.isError;\n\n if (this.hideTimeout === null) {\n this.hideTimeout = setTimeout(function () {\n _this2.hideTimeout = null;\n removeSnack();\n }, this.displayTime * 1000);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_3___default()('snack-bar', {\n 'snack-bar--error': isError\n })\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"snack-bar__message\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ALERT\"],\n size: 20\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, message)), linkText && linkTarget && // This is a little weird because of `linkTarget` code in `lbry-redux`\n // Any navigation code should happen in the app, and that should be removed from lbry-redux\n react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n navigate: \"/$\".concat(linkTarget),\n className: \"snack-bar__action\",\n label: linkText\n }));\n }\n }]);\n\n return SnackBar;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SnackBar);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NuYWNrQmFyL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zbmFja0Jhci92aWV3LmpzeD9iMjk0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaWNvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHJlbW92ZVNuYWNrOiBhbnkgPT4gdm9pZCxcbiAgc25hY2s6ID97XG4gICAgbGlua1RhcmdldDogP3N0cmluZyxcbiAgICBsaW5rVGV4dDogP3N0cmluZyxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgaXNFcnJvcjogYm9vbGVhbixcbiAgfSxcbn07XG5cbmNsYXNzIFNuYWNrQmFyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLmRpc3BsYXlUaW1lID0gNTsgLy8gaW4gc2Vjb25kc1xuICAgIHRoaXMuaGlkZVRpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgaGlkZVRpbWVvdXQ6ID9UaW1lb3V0SUQ7XG4gIGRpc3BsYXlUaW1lOiBudW1iZXI7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgc25hY2ssIHJlbW92ZVNuYWNrIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCFzbmFjaykge1xuICAgICAgdGhpcy5oaWRlVGltZW91dCA9IG51bGw7IC8vIHNob3VsZCBiZSB1bm1vdW50aW5nIGFueXdheSwgYnV0IGJlIHNhZmU/XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7IG1lc3NhZ2UsIGxpbmtUZXh0LCBsaW5rVGFyZ2V0LCBpc0Vycm9yIH0gPSBzbmFjaztcblxuICAgIGlmICh0aGlzLmhpZGVUaW1lb3V0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmhpZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZVRpbWVvdXQgPSBudWxsO1xuICAgICAgICByZW1vdmVTbmFjaygpO1xuICAgICAgfSwgdGhpcy5kaXNwbGF5VGltZSAqIDEwMDApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnc25hY2stYmFyJywge1xuICAgICAgICAgICdzbmFjay1iYXItLWVycm9yJzogaXNFcnJvcixcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic25hY2stYmFyX19tZXNzYWdlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxJY29uIGljb249e0lDT05TLkFMRVJUfSBzaXplPXsyMH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PnttZXNzYWdlfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2xpbmtUZXh0ICYmIGxpbmtUYXJnZXQgJiYgKFxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsaXR0bGUgd2VpcmQgYmVjYXVzZSBvZiBgbGlua1RhcmdldGAgY29kZSBpbiBgbGJyeS1yZWR1eGBcbiAgICAgICAgICAvLyBBbnkgbmF2aWdhdGlvbiBjb2RlIHNob3VsZCBoYXBwZW4gaW4gdGhlIGFwcCwgYW5kIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBsYnJ5LXJlZHV4XG4gICAgICAgICAgPEJ1dHRvbiBuYXZpZ2F0ZT17YC8kJHtsaW5rVGFyZ2V0fWB9IGNsYXNzTmFtZT1cInNuYWNrLWJhcl9fYWN0aW9uXCIgbGFiZWw9e2xpbmtUZXh0fSAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTbmFja0JhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBRkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFKQTtBQUtBO0FBQ0E7OztBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQS9DQTtBQUNBO0FBaURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/snackBar/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/socialShare/index.js": -/*!********************************************!*\ - !*** ../ui/component/socialShare/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/socialShare/view.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n referralCode: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUserInviteReferralCode\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectUser\"])(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NvY2lhbFNoYXJlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zb2NpYWxTaGFyZS9pbmRleC5qcz9iMTM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksIG1ha2VTZWxlY3RUaXRsZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFNvY2lhbFNoYXJlIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxDb2RlLCBzZWxlY3RVc2VyIH0gZnJvbSAnbGJyeWluYyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIHJlZmVycmFsQ29kZTogc2VsZWN0VXNlckludml0ZVJlZmVycmFsQ29kZShzdGF0ZSksXG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICB0aXRsZTogbWFrZVNlbGVjdFRpdGxlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShTb2NpYWxTaGFyZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/socialShare/index.js\n"); - -/***/ }), - -/***/ "../ui/component/socialShare/view.jsx": -/*!********************************************!*\ - !*** ../ui/component/socialShare/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_copyableText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/copyableText */ \"../ui/component/copyableText/index.js\");\n/* harmony import */ var component_embedTextArea__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/embedTextArea */ \"../ui/component/embedTextArea/index.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/lbrytv */ \"../ui/util/lbrytv.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(util_lbrytv__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\nvar IOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\nvar SUPPORTS_SHARE_API = typeof navigator.share !== 'undefined';\n\nfunction SocialShare(props) {\n var claim = props.claim,\n title = props.title,\n referralCode = props.referralCode,\n user = props.user,\n webShareable = props.webShareable;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_1___default.a.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n showEmbed = _React$useState2[0],\n setShowEmbed = _React$useState2[1];\n\n var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_1___default.a.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n showExtra = _React$useState4[0],\n setShowExtra = _React$useState4[1];\n\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n\n if (!claim) {\n return null;\n }\n\n var canonicalUrl = claim.canonical_url,\n permanentUrl = claim.permanent_url,\n name = claim.name,\n claimId = claim.claim_id;\n var isChannel = claim.value_type === 'channel';\n var rewardsApproved = user && user.is_reward_approved;\n var OPEN_URL = 'https://open.lbry.com/';\n var lbryUrl = canonicalUrl ? canonicalUrl.split('lbry://')[1] : permanentUrl.split('lbry://')[1];\n var lbryWebUrl = lbryUrl.replace(/#/g, ':');\n var encodedLbryURL = \"\".concat(OPEN_URL).concat(encodeURIComponent(lbryWebUrl));\n var referralParam = referralCode && rewardsApproved ? \"?r=\".concat(referralCode) : '';\n var openDotLbryDotComUrl = \"\".concat(OPEN_URL).concat(lbryWebUrl).concat(referralParam);\n var downloadUrl = \"\".concat(Object(util_lbrytv__WEBPACK_IMPORTED_MODULE_5__[\"generateDownloadUrl\"])(name, claimId));\n\n function handleWebShareClick() {\n if (navigator.share) {\n navigator.share({\n title: title || claim.name,\n url: window.location.href\n });\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_copyableText__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: __('LBRY Link'),\n copyable: openDotLbryDotComUrl\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TWITTER\"],\n href: \"https://twitter.com/intent/tweet?text=\".concat(encodedLbryURL)\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REDDIT\"],\n title: __('Share on Facebook'),\n href: \"https://reddit.com/submit?url=\".concat(encodedLbryURL)\n }), IOS && // Only ios client supports share urls\n react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TELEGRAM\"],\n title: __('Share on Telegram'),\n href: \"tg://msg_url?url=\".concat(encodedLbryURL, \"&text=text\")\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LINKEDIN\"],\n title: __('Share on LinkedIn'),\n href: \"https://www.linkedin.com/sharing/share-offsite/?url=\".concat(encodedLbryURL)\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"FACEBOOK\"],\n title: __('Share on Facebook'),\n href: \"https://facebook.com/sharer/sharer.php?u=\".concat(encodedLbryURL)\n }), webShareable && !isChannel && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EMBED\"],\n title: __('Embed this content'),\n onClick: function onClick() {\n setShowEmbed(!showEmbed);\n setShowExtra(false);\n }\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"share\",\n iconSize: 24,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"MORE\"],\n title: __('More actions'),\n onClick: function onClick() {\n setShowExtra(!showExtra);\n setShowEmbed(false);\n }\n }))), SUPPORTS_SHARE_API && isMobile && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SHARE\"],\n button: \"primary\",\n label: __('Share via...'),\n onClick: handleWebShareClick\n })), showEmbed && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_embedTextArea__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n label: __('Embedded'),\n claim: claim\n }), showExtra && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_copyableText__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: __('LBRY URL'),\n copyable: \"lbry://\".concat(lbryUrl)\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_copyableText__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: __('Download Link'),\n copyable: downloadUrl\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SocialShare);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NvY2lhbFNoYXJlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zb2NpYWxTaGFyZS92aWV3LmpzeD81ZDgwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ29weWFibGVUZXh0IGZyb20gJ2NvbXBvbmVudC9jb3B5YWJsZVRleHQnO1xuaW1wb3J0IEVtYmVkVGV4dEFyZWEgZnJvbSAnY29tcG9uZW50L2VtYmVkVGV4dEFyZWEnO1xuaW1wb3J0IHsgZ2VuZXJhdGVEb3dubG9hZFVybCB9IGZyb20gJ3V0aWwvbGJyeXR2JztcbmltcG9ydCB1c2VJc01vYmlsZSBmcm9tICdlZmZlY3RzL3VzZS1pcy1tb2JpbGUnO1xuXG5jb25zdCBJT1MgPSAhIW5hdmlnYXRvci5wbGF0Zm9ybSAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuY29uc3QgU1VQUE9SVFNfU0hBUkVfQVBJID0gdHlwZW9mIG5hdmlnYXRvci5zaGFyZSAhPT0gJ3VuZGVmaW5lZCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgdGl0bGU6ID9zdHJpbmcsXG4gIHdlYlNoYXJlYWJsZTogYm9vbGVhbixcbiAgcmVmZXJyYWxDb2RlOiBzdHJpbmcsXG4gIHVzZXI6IGFueSxcbn07XG5cbmZ1bmN0aW9uIFNvY2lhbFNoYXJlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNsYWltLCB0aXRsZSwgcmVmZXJyYWxDb2RlLCB1c2VyLCB3ZWJTaGFyZWFibGUgfSA9IHByb3BzO1xuICBjb25zdCBbc2hvd0VtYmVkLCBzZXRTaG93RW1iZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0V4dHJhLCBzZXRTaG93RXh0cmFdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpc01vYmlsZSA9IHVzZUlzTW9iaWxlKCk7XG5cbiAgaWYgKCFjbGFpbSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBjYW5vbmljYWxfdXJsOiBjYW5vbmljYWxVcmwsIHBlcm1hbmVudF91cmw6IHBlcm1hbmVudFVybCwgbmFtZSwgY2xhaW1faWQ6IGNsYWltSWQgfSA9IGNsYWltO1xuICBjb25zdCBpc0NoYW5uZWwgPSBjbGFpbS52YWx1ZV90eXBlID09PSAnY2hhbm5lbCc7XG4gIGNvbnN0IHJld2FyZHNBcHByb3ZlZCA9IHVzZXIgJiYgdXNlci5pc19yZXdhcmRfYXBwcm92ZWQ7XG4gIGNvbnN0IE9QRU5fVVJMID0gJ2h0dHBzOi8vb3Blbi5sYnJ5LmNvbS8nO1xuICBjb25zdCBsYnJ5VXJsID0gY2Fub25pY2FsVXJsID8gY2Fub25pY2FsVXJsLnNwbGl0KCdsYnJ5Oi8vJylbMV0gOiBwZXJtYW5lbnRVcmwuc3BsaXQoJ2xicnk6Ly8nKVsxXTtcbiAgY29uc3QgbGJyeVdlYlVybCA9IGxicnlVcmwucmVwbGFjZSgvIy9nLCAnOicpO1xuICBjb25zdCBlbmNvZGVkTGJyeVVSTDogc3RyaW5nID0gYCR7T1BFTl9VUkx9JHtlbmNvZGVVUklDb21wb25lbnQobGJyeVdlYlVybCl9YDtcbiAgY29uc3QgcmVmZXJyYWxQYXJhbTogc3RyaW5nID0gcmVmZXJyYWxDb2RlICYmIHJld2FyZHNBcHByb3ZlZCA/IGA/cj0ke3JlZmVycmFsQ29kZX1gIDogJyc7XG4gIGNvbnN0IG9wZW5Eb3RMYnJ5RG90Q29tVXJsOiBzdHJpbmcgPSBgJHtPUEVOX1VSTH0ke2xicnlXZWJVcmx9JHtyZWZlcnJhbFBhcmFtfWA7XG4gIGNvbnN0IGRvd25sb2FkVXJsID0gYCR7Z2VuZXJhdGVEb3dubG9hZFVybChuYW1lLCBjbGFpbUlkKX1gO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVdlYlNoYXJlQ2xpY2soKSB7XG4gICAgaWYgKG5hdmlnYXRvci5zaGFyZSkge1xuICAgICAgbmF2aWdhdG9yLnNoYXJlKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGNsYWltLm5hbWUsXG4gICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxDb3B5YWJsZVRleHQgbGFiZWw9e19fKCdMQlJZIExpbmsnKX0gY29weWFibGU9e29wZW5Eb3RMYnJ5RG90Q29tVXJsfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJzaGFyZVwiXG4gICAgICAgICAgaWNvblNpemU9ezI0fVxuICAgICAgICAgIGljb249e0lDT05TLlRXSVRURVJ9XG4gICAgICAgICAgaHJlZj17YGh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9JHtlbmNvZGVkTGJyeVVSTH1gfVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPVwic2hhcmVcIlxuICAgICAgICAgIGljb25TaXplPXsyNH1cbiAgICAgICAgICBpY29uPXtJQ09OUy5SRURESVR9XG4gICAgICAgICAgdGl0bGU9e19fKCdTaGFyZSBvbiBGYWNlYm9vaycpfVxuICAgICAgICAgIGhyZWY9e2BodHRwczovL3JlZGRpdC5jb20vc3VibWl0P3VybD0ke2VuY29kZWRMYnJ5VVJMfWB9XG4gICAgICAgIC8+XG4gICAgICAgIHtJT1MgJiYgKFxuICAgICAgICAgIC8vIE9ubHkgaW9zIGNsaWVudCBzdXBwb3J0cyBzaGFyZSB1cmxzXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic2hhcmVcIlxuICAgICAgICAgICAgaWNvblNpemU9ezI0fVxuICAgICAgICAgICAgaWNvbj17SUNPTlMuVEVMRUdSQU19XG4gICAgICAgICAgICB0aXRsZT17X18oJ1NoYXJlIG9uIFRlbGVncmFtJyl9XG4gICAgICAgICAgICBocmVmPXtgdGc6Ly9tc2dfdXJsP3VybD0ke2VuY29kZWRMYnJ5VVJMfSZhbXA7dGV4dD10ZXh0YH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPVwic2hhcmVcIlxuICAgICAgICAgIGljb25TaXplPXsyNH1cbiAgICAgICAgICBpY29uPXtJQ09OUy5MSU5LRURJTn1cbiAgICAgICAgICB0aXRsZT17X18oJ1NoYXJlIG9uIExpbmtlZEluJyl9XG4gICAgICAgICAgaHJlZj17YGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9zaGFyaW5nL3NoYXJlLW9mZnNpdGUvP3VybD0ke2VuY29kZWRMYnJ5VVJMfWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJzaGFyZVwiXG4gICAgICAgICAgaWNvblNpemU9ezI0fVxuICAgICAgICAgIGljb249e0lDT05TLkZBQ0VCT09LfVxuICAgICAgICAgIHRpdGxlPXtfXygnU2hhcmUgb24gRmFjZWJvb2snKX1cbiAgICAgICAgICBocmVmPXtgaHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA/dT0ke2VuY29kZWRMYnJ5VVJMfWB9XG4gICAgICAgIC8+XG4gICAgICAgIHt3ZWJTaGFyZWFibGUgJiYgIWlzQ2hhbm5lbCAmJiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzaGFyZVwiXG4gICAgICAgICAgICAgIGljb25TaXplPXsyNH1cbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuRU1CRUR9XG4gICAgICAgICAgICAgIHRpdGxlPXtfXygnRW1iZWQgdGhpcyBjb250ZW50Jyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTaG93RW1iZWQoIXNob3dFbWJlZCk7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0V4dHJhKGZhbHNlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNoYXJlXCJcbiAgICAgICAgICAgICAgaWNvblNpemU9ezI0fVxuICAgICAgICAgICAgICBpY29uPXtJQ09OUy5NT1JFfVxuICAgICAgICAgICAgICB0aXRsZT17X18oJ01vcmUgYWN0aW9ucycpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0V4dHJhKCFzaG93RXh0cmEpO1xuICAgICAgICAgICAgICAgIHNldFNob3dFbWJlZChmYWxzZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge1NVUFBPUlRTX1NIQVJFX0FQSSAmJiBpc01vYmlsZSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b24gaWNvbj17SUNPTlMuU0hBUkV9IGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ1NoYXJlIHZpYS4uLicpfSBvbkNsaWNrPXtoYW5kbGVXZWJTaGFyZUNsaWNrfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7c2hvd0VtYmVkICYmIDxFbWJlZFRleHRBcmVhIGxhYmVsPXtfXygnRW1iZWRkZWQnKX0gY2xhaW09e2NsYWltfSAvPn1cbiAgICAgIHtzaG93RXh0cmEgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8Q29weWFibGVUZXh0IGxhYmVsPXtfXygnTEJSWSBVUkwnKX0gY29weWFibGU9e2BsYnJ5Oi8vJHtsYnJ5VXJsfWB9IC8+XG4gICAgICAgICAgPENvcHlhYmxlVGV4dCBsYWJlbD17X18oJ0Rvd25sb2FkIExpbmsnKX0gY29weWFibGU9e2Rvd25sb2FkVXJsfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU29jaWFsU2hhcmU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBZUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/socialShare/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/spinner/index.js": -/*!****************************************!*\ - !*** ../ui/component/spinner/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/spinner/view.jsx\");\n\n\n\n\nvar mapStateToProps = function mapStateToProps(state) {\n return {\n theme: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_1__[\"selectTheme\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(mapStateToProps, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NwaW5uZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NwaW5uZXIvaW5kZXguanM/ZjUyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VGhlbWUgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gc3RhdGUgPT4gKHtcbiAgdGhlbWU6IHNlbGVjdFRoZW1lKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBtYXBTdGF0ZVRvUHJvcHMsXG4gIG51bGxcbikoU3Bpbm5lcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/spinner/index.js\n"); - -/***/ }), - -/***/ "../ui/component/spinner/view.jsx": -/*!****************************************!*\ - !*** ../ui/component/spinner/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_themes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/themes */ \"../ui/constants/themes.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar Spinner = /*#__PURE__*/function (_PureComponent) {\n _inherits(Spinner, _PureComponent);\n\n function Spinner() {\n var _this;\n\n _classCallCheck(this, Spinner);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Spinner).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"delayedTimeout\", void 0);\n\n _this.state = {\n show: false\n };\n _this.delayedTimeout = null;\n return _this;\n }\n\n _createClass(Spinner, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n var delayed = this.props.delayed;\n\n if (!delayed) {\n // We can disable this because the default state is to render nothing so there won't be any content thrashing\n this.setState({\n show: true\n });\n } else {\n // If the delayed prop is passed in, wait some time before showing the loading indicator\n // We don't want the spinner to just flash for a fraction of a second\n this.delayedTimeout = setTimeout(function () {\n _this2.setState({\n show: true\n });\n }, 750);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.delayedTimeout) {\n clearTimeout(this.delayedTimeout);\n this.delayedTimeout = null;\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n dark = _this$props.dark,\n light = _this$props.light,\n theme = _this$props.theme,\n type = _this$props.type;\n var show = this.state.show;\n\n if (!show) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('spinner', {\n 'spinner--dark': !light && (dark || theme === constants_themes__WEBPACK_IMPORTED_MODULE_2__[\"LIGHT_THEME\"]),\n 'spinner--light': !dark && (light || theme === constants_themes__WEBPACK_IMPORTED_MODULE_2__[\"DARK_THEME\"]),\n 'spinner--small': type === 'small'\n })\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"rect rect1\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"rect rect2\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"rect rect3\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"rect rect4\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"rect rect5\"\n }));\n }\n }]);\n\n return Spinner;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n_defineProperty(Spinner, \"defaultProps\", {\n // We may want a dark/light spinner regardless of the current theme\n dark: false,\n light: false,\n delayed: false\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Spinner);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3NwaW5uZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3NwaW5uZXIvdmlldy5qc3g/OWQ2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERBUktfVEhFTUUsIExJR0hUX1RIRU1FIH0gZnJvbSAnY29uc3RhbnRzL3RoZW1lcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhcms/OiBib29sZWFuLCAvLyBhbHdheXMgYSBkYXJrIHNwaW5uZXJcbiAgbGlnaHQ/OiBib29sZWFuLCAvLyBhbHdheXMgYSBsaWdodCBzcGlubmVyXG4gIHRoZW1lOiBzdHJpbmcsXG4gIHR5cGU6ID9zdHJpbmcsXG4gIGRlbGF5ZWQ6IGJvb2xlYW4sXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBzaG93OiBib29sZWFuLFxufTtcblxuY2xhc3MgU3Bpbm5lciBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgLy8gV2UgbWF5IHdhbnQgYSBkYXJrL2xpZ2h0IHNwaW5uZXIgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCB0aGVtZVxuICAgIGRhcms6IGZhbHNlLFxuICAgIGxpZ2h0OiBmYWxzZSxcbiAgICBkZWxheWVkOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHsgc2hvdzogZmFsc2UgfTtcbiAgICB0aGlzLmRlbGF5ZWRUaW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVsYXllZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIWRlbGF5ZWQpIHtcbiAgICAgIC8vIFdlIGNhbiBkaXNhYmxlIHRoaXMgYmVjYXVzZSB0aGUgZGVmYXVsdCBzdGF0ZSBpcyB0byByZW5kZXIgbm90aGluZyBzbyB0aGVyZSB3b24ndCBiZSBhbnkgY29udGVudCB0aHJhc2hpbmdcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93OiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgZGVsYXllZCBwcm9wIGlzIHBhc3NlZCBpbiwgd2FpdCBzb21lIHRpbWUgYmVmb3JlIHNob3dpbmcgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzcGlubmVyIHRvIGp1c3QgZmxhc2ggZm9yIGEgZnJhY3Rpb24gb2YgYSBzZWNvbmRcbiAgICAgIHRoaXMuZGVsYXllZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNob3c6IHRydWUgfSk7XG4gICAgICB9LCA3NTApO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLmRlbGF5ZWRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheWVkVGltZW91dCk7XG4gICAgICB0aGlzLmRlbGF5ZWRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBkZWxheWVkVGltZW91dDogP1RpbWVvdXRJRDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkYXJrLCBsaWdodCwgdGhlbWUsIHR5cGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzaG93IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKCFzaG93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3NwaW5uZXInLCB7XG4gICAgICAgICAgJ3NwaW5uZXItLWRhcmsnOiAhbGlnaHQgJiYgKGRhcmsgfHwgdGhlbWUgPT09IExJR0hUX1RIRU1FKSxcbiAgICAgICAgICAnc3Bpbm5lci0tbGlnaHQnOiAhZGFyayAmJiAobGlnaHQgfHwgdGhlbWUgPT09IERBUktfVEhFTUUpLFxuICAgICAgICAgICdzcGlubmVyLS1zbWFsbCc6IHR5cGUgPT09ICdzbWFsbCcsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlY3QgcmVjdDFcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlY3QgcmVjdDJcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlY3QgcmVjdDNcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlY3QgcmVjdDRcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlY3QgcmVjdDVcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGlubmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFhQTs7O0FBUUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFKQTtBQUtBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBOzs7O0FBN0RBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQThEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/spinner/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/subscribeButton/index.js": -/*!************************************************!*\ - !*** ../ui/component/subscribeButton/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/subscribeButton/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n subscriptions: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"selectSubscriptions\"])(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectIsSubscribed\"])(props.uri, true)(state),\n firstRunCompleted: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"selectFirstRunCompleted\"])(state),\n permanentUrl: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectPermanentUrlForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doChannelSubscribe: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doChannelSubscribe\"],\n doChannelUnsubscribe: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doChannelUnsubscribe\"],\n doOpenModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"],\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"doToast\"]\n})(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N1YnNjcmliZUJ1dHRvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc3Vic2NyaWJlQnV0dG9uL2luZGV4LmpzPzc2ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvQ2hhbm5lbFN1YnNjcmliZSwgZG9DaGFubmVsVW5zdWJzY3JpYmUgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBzZWxlY3RTdWJzY3JpcHRpb25zLCBtYWtlU2VsZWN0SXNTdWJzY3JpYmVkLCBzZWxlY3RGaXJzdFJ1bkNvbXBsZXRlZCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IGRvVG9hc3QsIG1ha2VTZWxlY3RQZXJtYW5lbnRVcmxGb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBTdWJzY3JpYmVCdXR0b24gZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgc3Vic2NyaXB0aW9uczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG4gIGlzU3Vic2NyaWJlZDogbWFrZVNlbGVjdElzU3Vic2NyaWJlZChwcm9wcy51cmksIHRydWUpKHN0YXRlKSxcbiAgZmlyc3RSdW5Db21wbGV0ZWQ6IHNlbGVjdEZpcnN0UnVuQ29tcGxldGVkKHN0YXRlKSxcbiAgcGVybWFuZW50VXJsOiBtYWtlU2VsZWN0UGVybWFuZW50VXJsRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAge1xuICAgIGRvQ2hhbm5lbFN1YnNjcmliZSxcbiAgICBkb0NoYW5uZWxVbnN1YnNjcmliZSxcbiAgICBkb09wZW5Nb2RhbCxcbiAgICBkb1RvYXN0LFxuICB9XG4pKFN1YnNjcmliZUJ1dHRvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/subscribeButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/subscribeButton/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/subscribeButton/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return SubscribeButton; });\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_hover__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! effects/use-hover */ \"../ui/effects/use-hover.js\");\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\n\n\n\n\n\n\n\nfunction SubscribeButton(props) {\n var permanentUrl = props.permanentUrl,\n doChannelSubscribe = props.doChannelSubscribe,\n doChannelUnsubscribe = props.doChannelUnsubscribe,\n doOpenModal = props.doOpenModal,\n subscriptions = props.subscriptions,\n isSubscribed = props.isSubscribed,\n showSnackBarOnSubscribe = props.showSnackBarOnSubscribe,\n doToast = props.doToast,\n _props$shrinkOnMobile = props.shrinkOnMobile,\n shrinkOnMobile = _props$shrinkOnMobile === void 0 ? false : _props$shrinkOnMobile;\n var buttonRef = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useRef\"])();\n var isHovering = Object(effects_use_hover__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(buttonRef);\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(permanentUrl),\n channelName = _parseURI.channelName;\n\n var claimName = '@' + channelName;\n var subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe;\n var subscriptionLabel = isSubscribed ? __('Following') : __('Follow');\n\n var unfollowOverride = isSubscribed && isHovering && __('Unfollow');\n\n var label = isMobile && shrinkOnMobile ? '' : unfollowOverride || subscriptionLabel;\n return permanentUrl ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n ref: buttonRef,\n iconColor: \"red\",\n icon: unfollowOverride ? constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"UNSUBSCRIBE\"] : constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SUBSCRIBE\"],\n button: 'alt',\n requiresAuth: true,\n label: label,\n onClick: function onClick(e) {\n e.stopPropagation();\n\n if (!subscriptions.length) {\n doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"FIRST_SUBSCRIPTION\"]);\n }\n\n subscriptionHandler({\n channelName: claimName,\n uri: permanentUrl\n });\n\n if (showSnackBarOnSubscribe) {\n doToast({\n message: \"\".concat(__('Now following '), \" \").concat(claimName, \"!\")\n });\n }\n }\n }) : null;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N1YnNjcmliZUJ1dHRvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc3Vic2NyaWJlQnV0dG9uL3ZpZXcuanN4PzJiNGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBwYXJzZVVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB1c2VIb3ZlciBmcm9tICdlZmZlY3RzL3VzZS1ob3Zlcic7XG5pbXBvcnQgdXNlSXNNb2JpbGUgZnJvbSAnZWZmZWN0cy91c2UtaXMtbW9iaWxlJztcblxudHlwZSBTdWJzY3JpcHRpb25BcmdzID0ge1xuICBjaGFubmVsTmFtZTogc3RyaW5nLFxuICB1cmk6IHN0cmluZyxcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBlcm1hbmVudFVybDogP3N0cmluZyxcbiAgaXNTdWJzY3JpYmVkOiBib29sZWFuLFxuICBzdWJzY3JpcHRpb25zOiBBcnJheTxzdHJpbmc+LFxuICBkb0NoYW5uZWxTdWJzY3JpYmU6ICh7IGNoYW5uZWxOYW1lOiBzdHJpbmcsIHVyaTogc3RyaW5nIH0pID0+IHZvaWQsXG4gIGRvQ2hhbm5lbFVuc3Vic2NyaWJlOiBTdWJzY3JpcHRpb25BcmdzID0+IHZvaWQsXG4gIGRvT3Blbk1vZGFsOiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgc2hvd1NuYWNrQmFyT25TdWJzY3JpYmU6IGJvb2xlYW4sXG4gIGRvVG9hc3Q6ICh7IG1lc3NhZ2U6IHN0cmluZyB9KSA9PiB2b2lkLFxuICBzaHJpbmtPbk1vYmlsZTogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN1YnNjcmliZUJ1dHRvbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHBlcm1hbmVudFVybCxcbiAgICBkb0NoYW5uZWxTdWJzY3JpYmUsXG4gICAgZG9DaGFubmVsVW5zdWJzY3JpYmUsXG4gICAgZG9PcGVuTW9kYWwsXG4gICAgc3Vic2NyaXB0aW9ucyxcbiAgICBpc1N1YnNjcmliZWQsXG4gICAgc2hvd1NuYWNrQmFyT25TdWJzY3JpYmUsXG4gICAgZG9Ub2FzdCxcbiAgICBzaHJpbmtPbk1vYmlsZSA9IGZhbHNlLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBpc0hvdmVyaW5nID0gdXNlSG92ZXIoYnV0dG9uUmVmKTtcbiAgY29uc3QgaXNNb2JpbGUgPSB1c2VJc01vYmlsZSgpO1xuICBjb25zdCB7IGNoYW5uZWxOYW1lIH0gPSBwYXJzZVVSSShwZXJtYW5lbnRVcmwpO1xuICBjb25zdCBjbGFpbU5hbWUgPSAnQCcgKyBjaGFubmVsTmFtZTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSGFuZGxlciA9IGlzU3Vic2NyaWJlZCA/IGRvQ2hhbm5lbFVuc3Vic2NyaWJlIDogZG9DaGFubmVsU3Vic2NyaWJlO1xuICBjb25zdCBzdWJzY3JpcHRpb25MYWJlbCA9IGlzU3Vic2NyaWJlZCA/IF9fKCdGb2xsb3dpbmcnKSA6IF9fKCdGb2xsb3cnKTtcbiAgY29uc3QgdW5mb2xsb3dPdmVycmlkZSA9IGlzU3Vic2NyaWJlZCAmJiBpc0hvdmVyaW5nICYmIF9fKCdVbmZvbGxvdycpO1xuICBjb25zdCBsYWJlbCA9IGlzTW9iaWxlICYmIHNocmlua09uTW9iaWxlID8gJycgOiB1bmZvbGxvd092ZXJyaWRlIHx8IHN1YnNjcmlwdGlvbkxhYmVsO1xuXG4gIHJldHVybiBwZXJtYW5lbnRVcmwgPyAoXG4gICAgPEJ1dHRvblxuICAgICAgcmVmPXtidXR0b25SZWZ9XG4gICAgICBpY29uQ29sb3I9XCJyZWRcIlxuICAgICAgaWNvbj17dW5mb2xsb3dPdmVycmlkZSA/IElDT05TLlVOU1VCU0NSSUJFIDogSUNPTlMuU1VCU0NSSUJFfVxuICAgICAgYnV0dG9uPXsnYWx0J31cbiAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKCFzdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGRvT3Blbk1vZGFsKE1PREFMUy5GSVJTVF9TVUJTQ1JJUFRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vic2NyaXB0aW9uSGFuZGxlcih7XG4gICAgICAgICAgY2hhbm5lbE5hbWU6IGNsYWltTmFtZSxcbiAgICAgICAgICB1cmk6IHBlcm1hbmVudFVybCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNob3dTbmFja0Jhck9uU3Vic2NyaWJlKSB7XG4gICAgICAgICAgZG9Ub2FzdCh7IG1lc3NhZ2U6IGAke19fKCdOb3cgZm9sbG93aW5nICcpfSAke2NsYWltTmFtZX0hYCB9KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAvPlxuICApIDogbnVsbDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBQUE7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUF0QkE7QUF5QkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/subscribeButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/supportsLiquidate/index.js": -/*!**************************************************!*\ - !*** ../ui/component/supportsLiquidate/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/supportsLiquidate/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state),\n totalBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTotalBalance\"])(state),\n claimsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimsBalance\"])(state) || undefined,\n supportsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSupportsBalance\"])(state) || undefined,\n tipsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTipsBalance\"])(state) || undefined,\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataForUri\"])(props.uri)(state),\n abandonClaimError: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectAbandonClaimSupportError\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n abandonSupportForClaim: function abandonSupportForClaim(claimId, type, keep, preview) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doSupportAbandonForClaim\"])(claimId, type, keep, preview));\n },\n fetchClaimListMine: function fetchClaimListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchClaimListMine\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N1cHBvcnRzTGlxdWlkYXRlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zdXBwb3J0c0xpcXVpZGF0ZS9pbmRleC5qcz9iZWMzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBzZWxlY3RCYWxhbmNlLFxuICBzZWxlY3RUb3RhbEJhbGFuY2UsXG4gIHNlbGVjdENsYWltc0JhbGFuY2UsXG4gIHNlbGVjdFN1cHBvcnRzQmFsYW5jZSxcbiAgc2VsZWN0VGlwc0JhbGFuY2UsXG4gIG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSxcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBkb1N1cHBvcnRBYmFuZG9uRm9yQ2xhaW0sXG4gIGRvRmV0Y2hDbGFpbUxpc3RNaW5lLFxuICBzZWxlY3RBYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3IsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFN1cHBvcnRzTGlxdWlkYXRlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIGJhbGFuY2U6IHNlbGVjdEJhbGFuY2Uoc3RhdGUpLFxuICB0b3RhbEJhbGFuY2U6IHNlbGVjdFRvdGFsQmFsYW5jZShzdGF0ZSksXG4gIGNsYWltc0JhbGFuY2U6IHNlbGVjdENsYWltc0JhbGFuY2Uoc3RhdGUpIHx8IHVuZGVmaW5lZCxcbiAgc3VwcG9ydHNCYWxhbmNlOiBzZWxlY3RTdXBwb3J0c0JhbGFuY2Uoc3RhdGUpIHx8IHVuZGVmaW5lZCxcbiAgdGlwc0JhbGFuY2U6IHNlbGVjdFRpcHNCYWxhbmNlKHN0YXRlKSB8fCB1bmRlZmluZWQsXG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIG1ldGFkYXRhOiBtYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGFiYW5kb25DbGFpbUVycm9yOiBzZWxlY3RBYmFuZG9uQ2xhaW1TdXBwb3J0RXJyb3Ioc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBhYmFuZG9uU3VwcG9ydEZvckNsYWltOiAoY2xhaW1JZCwgdHlwZSwga2VlcCwgcHJldmlldykgPT5cbiAgICBkaXNwYXRjaChkb1N1cHBvcnRBYmFuZG9uRm9yQ2xhaW0oY2xhaW1JZCwgdHlwZSwga2VlcCwgcHJldmlldykpLFxuICBmZXRjaENsYWltTGlzdE1pbmU6ICgpID0+IGRpc3BhdGNoKGRvRmV0Y2hDbGFpbUxpc3RNaW5lKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShTdXBwb3J0c0xpcXVpZGF0ZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFBQTtBQUNBO0FBVUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/supportsLiquidate/index.js\n"); - -/***/ }), - -/***/ "../ui/component/supportsLiquidate/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/supportsLiquidate/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nvar SupportsLiquidate = function SupportsLiquidate(props) {\n var claim = props.claim,\n abandonSupportForClaim = props.abandonSupportForClaim,\n handleClose = props.handleClose,\n abandonClaimError = props.abandonClaimError;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(undefined),\n _useState2 = _slicedToArray(_useState, 2),\n previewBalance = _useState2[0],\n setPreviewBalance = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(-1),\n _useState4 = _slicedToArray(_useState3, 2),\n amount = _useState4[0],\n setAmount = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n error = _useState6[0],\n setError = _useState6[1];\n\n var initialMessage = __('How much would you like to unlock?');\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useState\"])(initialMessage),\n _useState8 = _slicedToArray(_useState7, 2),\n message = _useState8[0],\n setMessage = _useState8[1];\n\n var keep = previewBalance && amount && Number(amount) < previewBalance ? Number.parseFloat(String(previewBalance - Number(amount))).toFixed(8) : false;\n var claimId = claim && claim.claim_id;\n var type = claim.value_type;\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (claimId && abandonSupportForClaim) {\n abandonSupportForClaim(claimId, type, false, true).then(function (r) {\n setPreviewBalance(r.total_input);\n });\n }\n }, [abandonSupportForClaim, claimId, type, setPreviewBalance]);\n\n function handleSubmit() {\n abandonSupportForClaim(claimId, type, keep, false).then(function (r) {\n if (r) {\n handleClose();\n }\n });\n }\n\n function handleChange(a) {\n if (a === undefined || isNaN(Number(a))) {\n setMessage(__('Amount must be a number'));\n setError(true);\n setAmount(0);\n } else if (a === '') {\n setAmount(0);\n setError(true);\n setMessage(__('Amount cannot be blank'));\n } else if (Number(a) > Number(previewBalance)) {\n setMessage(__('Amount cannot be more than available'));\n setError(false);\n } else if (Number(a) === Number(previewBalance)) {\n setMessage(__(\"She's about to close up the library!\"));\n setAmount(a);\n setError(false);\n } else if (Number(a) > Number(previewBalance) / 2) {\n setMessage(__('Your content will do better with more staked on it'));\n setAmount(a);\n setError(false);\n } else if (Number(a) === 0) {\n setMessage(__('Amount cannot be zero'));\n setAmount(0);\n setError(true);\n } else if (Number(a) <= Number(previewBalance) / 2) {\n setMessage(__('A prudent choice'));\n setAmount(Number(a));\n setError(false);\n } else {\n setMessage(initialMessage);\n setAmount(a);\n setError(false);\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"UNLOCK\"],\n title: __('Unlock Tips'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('You can unlock all or some of this LBC at any time.'), ' ', __('Keeping it locked improves the trust and discoverability of your content.')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n learn_more: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Learn More'),\n href: \"https://lbry.com/faq/tipping\"\n })\n }\n }, \"It's usually only worth unlocking what you intend to use immediately. %learn_more%\"))),\n body: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n amount: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"strong\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n badge: false,\n amount: Number(previewBalance),\n precision: 8\n }))\n }\n }, \"%amount% available to unlock\")), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section\"\n }, previewBalance === 0 && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('No unlockable tips available')), previewBalance === undefined && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('Loading...')), previewBalance && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_4__[\"Form\"], {\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"label\", {\n htmlFor: \"supports_liquidate_range\"\n }, __('Amount to unlock')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_4__[\"FormField\"], {\n name: \"supports_liquidate_range\",\n type: 'range',\n min: 0,\n step: 0.01,\n max: previewBalance,\n value: Number(amount) >= 0 ? amount : previewBalance / 4 // by default, set it to 25% of available\n ,\n onChange: function onChange(e) {\n return handleChange(e.target.value);\n }\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"label\", {\n className: \"range__label\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, \"0\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, previewBalance / 2), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, previewBalance)), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_4__[\"FormField\"], {\n type: \"text\",\n value: amount >= 0 ? amount || '' : previewBalance && previewBalance / 4,\n helper: message,\n onChange: function onChange(e) {\n return handleChange(e.target.value);\n }\n })))),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, abandonClaimError ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, __('%message%', {\n message: abandonClaimError\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n disabled: error,\n button: \"primary\",\n onClick: handleClose,\n label: __('Done')\n })) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n disabled: error,\n button: \"primary\",\n onClick: handleSubmit,\n label: __('Unlock')\n }))\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SupportsLiquidate);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N1cHBvcnRzTGlxdWlkYXRlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC9zdXBwb3J0c0xpcXVpZGF0ZS92aWV3LmpzeD81ZGM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ3JlZGl0QW1vdW50IGZyb20gJ2NvbXBvbmVudC9jb21tb24vY3JlZGl0LWFtb3VudCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgYmFsYW5jZTogbnVtYmVyLFxuICB0b3RhbEJhbGFuY2U6IG51bWJlcixcbiAgY2xhaW1zQmFsYW5jZTogbnVtYmVyLFxuICBzdXBwb3J0c0JhbGFuY2U6IG51bWJlcixcbiAgdGlwc0JhbGFuY2U6IG51bWJlcixcbiAgY2xhaW06IGFueSxcbiAgbWV0YURhdGE6IGFueSxcbiAgaGFuZGxlQ2xvc2U6ICgpID0+IHZvaWQsXG4gIGFiYW5kb25TdXBwb3J0Rm9yQ2xhaW06IChzdHJpbmcsIHN0cmluZywgYm9vbGVhbiB8IHN0cmluZywgYm9vbGVhbikgPT4gYW55LFxuICBhYmFuZG9uQ2xhaW1FcnJvcjogP3N0cmluZyxcbn07XG5cbmNvbnN0IFN1cHBvcnRzTGlxdWlkYXRlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYWltLCBhYmFuZG9uU3VwcG9ydEZvckNsYWltLCBoYW5kbGVDbG9zZSwgYWJhbmRvbkNsYWltRXJyb3IgfSA9IHByb3BzO1xuICBjb25zdCBbcHJldmlld0JhbGFuY2UsIHNldFByZXZpZXdCYWxhbmNlXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIGNvbnN0IFthbW91bnQsIHNldEFtb3VudF0gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbml0aWFsTWVzc2FnZSA9IF9fKCdIb3cgbXVjaCB3b3VsZCB5b3UgbGlrZSB0byB1bmxvY2s/Jyk7XG4gIGNvbnN0IFttZXNzYWdlLCBzZXRNZXNzYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxNZXNzYWdlKTtcbiAgY29uc3Qga2VlcCA9XG4gICAgcHJldmlld0JhbGFuY2UgJiYgYW1vdW50ICYmIE51bWJlcihhbW91bnQpIDwgcHJldmlld0JhbGFuY2VcbiAgICAgID8gTnVtYmVyLnBhcnNlRmxvYXQoU3RyaW5nKHByZXZpZXdCYWxhbmNlIC0gTnVtYmVyKGFtb3VudCkpKS50b0ZpeGVkKDgpXG4gICAgICA6IGZhbHNlO1xuICBjb25zdCBjbGFpbUlkID0gY2xhaW0gJiYgY2xhaW0uY2xhaW1faWQ7XG4gIGNvbnN0IHR5cGUgPSBjbGFpbS52YWx1ZV90eXBlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsYWltSWQgJiYgYWJhbmRvblN1cHBvcnRGb3JDbGFpbSkge1xuICAgICAgYWJhbmRvblN1cHBvcnRGb3JDbGFpbShjbGFpbUlkLCB0eXBlLCBmYWxzZSwgdHJ1ZSkudGhlbihyID0+IHtcbiAgICAgICAgc2V0UHJldmlld0JhbGFuY2Uoci50b3RhbF9pbnB1dCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFthYmFuZG9uU3VwcG9ydEZvckNsYWltLCBjbGFpbUlkLCB0eXBlLCBzZXRQcmV2aWV3QmFsYW5jZV0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICBhYmFuZG9uU3VwcG9ydEZvckNsYWltKGNsYWltSWQsIHR5cGUsIGtlZXAsIGZhbHNlKS50aGVuKHIgPT4ge1xuICAgICAgaWYgKHIpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShhKSB7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBpc05hTihOdW1iZXIoYSkpKSB7XG4gICAgICBzZXRNZXNzYWdlKF9fKCdBbW91bnQgbXVzdCBiZSBhIG51bWJlcicpKTtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgICAgc2V0QW1vdW50KDApO1xuICAgIH0gZWxzZSBpZiAoYSA9PT0gJycpIHtcbiAgICAgIHNldEFtb3VudCgwKTtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgICAgc2V0TWVzc2FnZShfXygnQW1vdW50IGNhbm5vdCBiZSBibGFuaycpKTtcbiAgICB9IGVsc2UgaWYgKE51bWJlcihhKSA+IE51bWJlcihwcmV2aWV3QmFsYW5jZSkpIHtcbiAgICAgIHNldE1lc3NhZ2UoX18oJ0Ftb3VudCBjYW5ub3QgYmUgbW9yZSB0aGFuIGF2YWlsYWJsZScpKTtcbiAgICAgIHNldEVycm9yKGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKE51bWJlcihhKSA9PT0gTnVtYmVyKHByZXZpZXdCYWxhbmNlKSkge1xuICAgICAgc2V0TWVzc2FnZShfXyhgU2hlJ3MgYWJvdXQgdG8gY2xvc2UgdXAgdGhlIGxpYnJhcnkhYCkpO1xuICAgICAgc2V0QW1vdW50KGEpO1xuICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoTnVtYmVyKGEpID4gTnVtYmVyKHByZXZpZXdCYWxhbmNlKSAvIDIpIHtcbiAgICAgIHNldE1lc3NhZ2UoX18oJ1lvdXIgY29udGVudCB3aWxsIGRvIGJldHRlciB3aXRoIG1vcmUgc3Rha2VkIG9uIGl0JykpO1xuICAgICAgc2V0QW1vdW50KGEpO1xuICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoTnVtYmVyKGEpID09PSAwKSB7XG4gICAgICBzZXRNZXNzYWdlKF9fKCdBbW91bnQgY2Fubm90IGJlIHplcm8nKSk7XG4gICAgICBzZXRBbW91bnQoMCk7XG4gICAgICBzZXRFcnJvcih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKE51bWJlcihhKSA8PSBOdW1iZXIocHJldmlld0JhbGFuY2UpIC8gMikge1xuICAgICAgc2V0TWVzc2FnZShfXygnQSBwcnVkZW50IGNob2ljZScpKTtcbiAgICAgIHNldEFtb3VudChOdW1iZXIoYSkpO1xuICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRNZXNzYWdlKGluaXRpYWxNZXNzYWdlKTtcbiAgICAgIHNldEFtb3VudChhKTtcbiAgICAgIHNldEVycm9yKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpY29uPXtJQ09OUy5VTkxPQ0t9XG4gICAgICB0aXRsZT17X18oJ1VubG9jayBUaXBzJyl9XG4gICAgICBzdWJ0aXRsZT17XG4gICAgICAgIDw+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7X18oJ1lvdSBjYW4gdW5sb2NrIGFsbCBvciBzb21lIG9mIHRoaXMgTEJDIGF0IGFueSB0aW1lLicpfXsnICd9XG4gICAgICAgICAgICB7X18oJ0tlZXBpbmcgaXQgbG9ja2VkIGltcHJvdmVzIHRoZSB0cnVzdCBhbmQgZGlzY292ZXJhYmlsaXR5IG9mIHlvdXIgY29udGVudC4nKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgbGVhcm5fbW9yZTogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdMZWFybiBNb3JlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS90aXBwaW5nXCIgLz4sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEl0J3MgdXN1YWxseSBvbmx5IHdvcnRoIHVubG9ja2luZyB3aGF0IHlvdSBpbnRlbmQgdG8gdXNlIGltbWVkaWF0ZWx5LiAlbGVhcm5fbW9yZSVcbiAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIGJvZHk9e1xuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgICAgIGFtb3VudDogKFxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IGFtb3VudD17TnVtYmVyKHByZXZpZXdCYWxhbmNlKX0gcHJlY2lzaW9uPXs4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJWFtb3VudCUgYXZhaWxhYmxlIHRvIHVubG9ja1xuICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIHtwcmV2aWV3QmFsYW5jZSA9PT0gMCAmJiA8cD57X18oJ05vIHVubG9ja2FibGUgdGlwcyBhdmFpbGFibGUnKX08L3A+fVxuICAgICAgICAgICAge3ByZXZpZXdCYWxhbmNlID09PSB1bmRlZmluZWQgJiYgPHA+e19fKCdMb2FkaW5nLi4uJyl9PC9wPn1cbiAgICAgICAgICAgIHtwcmV2aWV3QmFsYW5jZSAmJiAoXG4gICAgICAgICAgICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic3VwcG9ydHNfbGlxdWlkYXRlX3JhbmdlXCI+e19fKCdBbW91bnQgdG8gdW5sb2NrJyl9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic3VwcG9ydHNfbGlxdWlkYXRlX3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9eydyYW5nZSd9XG4gICAgICAgICAgICAgICAgICBtaW49ezB9XG4gICAgICAgICAgICAgICAgICBzdGVwPXswLjAxfVxuICAgICAgICAgICAgICAgICAgbWF4PXtwcmV2aWV3QmFsYW5jZX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtOdW1iZXIoYW1vdW50KSA+PSAwID8gYW1vdW50IDogcHJldmlld0JhbGFuY2UgLyA0fSAvLyBieSBkZWZhdWx0LCBzZXQgaXQgdG8gMjUlIG9mIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gaGFuZGxlQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJyYW5nZV9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57cHJldmlld0JhbGFuY2UgLyAyfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntwcmV2aWV3QmFsYW5jZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17YW1vdW50ID49IDAgPyBhbW91bnQgfHwgJycgOiBwcmV2aWV3QmFsYW5jZSAmJiBwcmV2aWV3QmFsYW5jZSAvIDR9XG4gICAgICAgICAgICAgICAgICBoZWxwZXI9e21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBoYW5kbGVDaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgICAgYWN0aW9ucz17XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7YWJhbmRvbkNsYWltRXJyb3IgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVycm9yLXRleHRcIj57X18oJyVtZXNzYWdlJScsIHsgbWVzc2FnZTogYWJhbmRvbkNsYWltRXJyb3IgfSl9PC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b24gZGlzYWJsZWQ9e2Vycm9yfSBidXR0b249XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGxhYmVsPXtfXygnRG9uZScpfSAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCdXR0b24gZGlzYWJsZWQ9e2Vycm9yfSBidXR0b249XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlU3VibWl0fSBsYWJlbD17X18oJ1VubG9jaycpfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFN1cHBvcnRzTGlxdWlkYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFNQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFVQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQURBO0FBWUE7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFPQTtBQUFBO0FBQUE7QUFQQTtBQVNBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQVdBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTFFQTtBQWxFQTtBQUNBO0FBbUpBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/supportsLiquidate/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/syncPassword/index.js": -/*!*********************************************!*\ - !*** ../ui/component/syncPassword/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/syncPassword/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n getSyncIsPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectGetSyncIsPending\"])(state),\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserEmail\"])(state),\n passwordError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectSyncApplyPasswordError\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n getSync: function getSync(password, cb) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doGetSync\"])(password, cb));\n },\n setClientSetting: function setClientSetting(key, value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_2__[\"doSetClientSetting\"])(key, value));\n },\n signOut: function signOut() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doSignOut\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N5bmNQYXNzd29yZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc3luY1Bhc3N3b3JkL2luZGV4LmpzPzFkY2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvR2V0U3luYywgc2VsZWN0R2V0U3luY0lzUGVuZGluZywgc2VsZWN0VXNlckVtYWlsLCBzZWxlY3RTeW5jQXBwbHlQYXNzd29yZEVycm9yIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBkb1NldENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3NldHRpbmdzJztcbmltcG9ydCB7IGRvU2lnbk91dCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBTeW5jUGFzc3dvcmQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZ2V0U3luY0lzUGVuZGluZzogc2VsZWN0R2V0U3luY0lzUGVuZGluZyhzdGF0ZSksXG4gIGVtYWlsOiBzZWxlY3RVc2VyRW1haWwoc3RhdGUpLFxuICBwYXNzd29yZEVycm9yOiBzZWxlY3RTeW5jQXBwbHlQYXNzd29yZEVycm9yKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgZ2V0U3luYzogKHBhc3N3b3JkLCBjYikgPT4gZGlzcGF0Y2goZG9HZXRTeW5jKHBhc3N3b3JkLCBjYikpLFxuICBzZXRDbGllbnRTZXR0aW5nOiAoa2V5LCB2YWx1ZSkgPT4gZGlzcGF0Y2goZG9TZXRDbGllbnRTZXR0aW5nKGtleSwgdmFsdWUpKSxcbiAgc2lnbk91dDogKCkgPT4gZGlzcGF0Y2goZG9TaWduT3V0KCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShTeW5jUGFzc3dvcmQpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/syncPassword/index.js\n"); - -/***/ }), - -/***/ "../ui/component/syncPassword/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/syncPassword/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction SyncPassword(props) {\n var getSync = props.getSync,\n getSyncIsPending = props.getSyncIsPending,\n email = props.email,\n signOut = props.signOut,\n passwordError = props.passwordError;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(''),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n password = _React$useState2[0],\n setPassword = _React$useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(true),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n rememberPassword = _usePersistedState2[0],\n setRememberPassword = _usePersistedState2[1];\n\n function handleSubmit() {\n getSync(password, function (error) {\n if (!error) {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__[\"setSavedPassword\"])(password, rememberPassword);\n }\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Enter Your Wallet Password'),\n subtitle: __('You set your wallet password when you previously installed LBRY. This may have been on different device.'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"password\",\n error: passwordError && __('Wrong password for %email%', {\n email: email\n }),\n label: __('Password for %email%', {\n email: email\n }),\n value: password,\n onChange: function onChange(e) {\n return setPassword(e.target.value);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n name: \"remember-password\",\n type: \"checkbox\",\n label: __('Remember My Password'),\n checked: rememberPassword,\n onChange: function onChange() {\n return setRememberPassword(!rememberPassword);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n type: \"submit\",\n button: \"primary\",\n label: __('Continue'),\n disabled: getSyncIsPending\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: signOut\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n help: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('help guide'),\n href: \"https://lbry.com/faq/account-sync\"\n }),\n email: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: 'help@lbry.com',\n href: \"mailto:help@lbry.com\"\n })\n }\n }, \"If you are having issues, checkout our %help% or email us at %email%.\")))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SyncPassword);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N5bmNQYXNzd29yZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvc3luY1Bhc3N3b3JkL3ZpZXcuanN4PzllY2MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtLCBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgeyBzZXRTYXZlZFBhc3N3b3JkIH0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgZ2V0U3luYzogKD9zdHJpbmcsIChhbnkpID0+IHZvaWQpID0+IHZvaWQsXG4gIGdldFN5bmNJc1BlbmRpbmc6IGJvb2xlYW4sXG4gIGVtYWlsOiBzdHJpbmcsXG4gIHBhc3N3b3JkRXJyb3I6IGJvb2xlYW4sXG4gIHNpZ25PdXQ6ICgpID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBTeW5jUGFzc3dvcmQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZ2V0U3luYywgZ2V0U3luY0lzUGVuZGluZywgZW1haWwsIHNpZ25PdXQsIHBhc3N3b3JkRXJyb3IgfSA9IHByb3BzO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3JlbWVtYmVyUGFzc3dvcmQsIHNldFJlbWVtYmVyUGFzc3dvcmRdID0gdXNlUGVyc2lzdGVkU3RhdGUodHJ1ZSk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KCkge1xuICAgIGdldFN5bmMocGFzc3dvcmQsIGVycm9yID0+IHtcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgc2V0U2F2ZWRQYXNzd29yZChwYXNzd29yZCwgcmVtZW1iZXJQYXNzd29yZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgPENhcmRcbiAgICAgICAgdGl0bGU9e19fKCdFbnRlciBZb3VyIFdhbGxldCBQYXNzd29yZCcpfVxuICAgICAgICBzdWJ0aXRsZT17X18oXG4gICAgICAgICAgJ1lvdSBzZXQgeW91ciB3YWxsZXQgcGFzc3dvcmQgd2hlbiB5b3UgcHJldmlvdXNseSBpbnN0YWxsZWQgTEJSWS4gVGhpcyBtYXkgaGF2ZSBiZWVuIG9uIGRpZmZlcmVudCBkZXZpY2UuJ1xuICAgICAgICApfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBlcnJvcj17cGFzc3dvcmRFcnJvciAmJiBfXygnV3JvbmcgcGFzc3dvcmQgZm9yICVlbWFpbCUnLCB7IGVtYWlsIH0pfVxuICAgICAgICAgICAgICBsYWJlbD17X18oJ1Bhc3N3b3JkIGZvciAlZW1haWwlJywgeyBlbWFpbCB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXRQYXNzd29yZChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBuYW1lPVwicmVtZW1iZXItcGFzc3dvcmRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBsYWJlbD17X18oJ1JlbWVtYmVyIE15IFBhc3N3b3JkJyl9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3JlbWVtYmVyUGFzc3dvcmR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRSZW1lbWJlclBhc3N3b3JkKCFyZW1lbWJlclBhc3N3b3JkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYnV0dG9uPVwicHJpbWFyeVwiIGxhYmVsPXtfXygnQ29udGludWUnKX0gZGlzYWJsZWQ9e2dldFN5bmNJc1BlbmRpbmd9IC8+XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG9uQ2xpY2s9e3NpZ25PdXR9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgICBoZWxwOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ2hlbHAgZ3VpZGUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL2FjY291bnQtc3luY1wiIC8+LFxuICAgICAgICAgICAgICAgICAgZW1haWw6IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXsnaGVscEBsYnJ5LmNvbSd9IGhyZWY9XCJtYWlsdG86aGVscEBsYnJ5LmNvbVwiIC8+LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMsIGNoZWNrb3V0IG91ciAlaGVscCUgb3IgZW1haWwgdXMgYXQgJWVtYWlsJS5cbiAgICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L0Zvcm0+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN5bmNQYXNzd29yZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBMUJBO0FBd0NBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/syncPassword/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/syncToggle/index.js": -/*!*******************************************!*\ - !*** ../ui/component/syncToggle/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/syncToggle/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n syncEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"])(state),\n verifiedEmail: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state),\n getSyncError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectGetSyncErrorMessage\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setSyncEnabled: function setSyncEnabled(value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__[\"doSetClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"], value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N5bmNUb2dnbGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3N5bmNUb2dnbGUvaW5kZXguanM/ODE0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsLCBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NldENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3NldHRpbmdzJztcbmltcG9ydCBTeW5jVG9nZ2xlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHN5bmNFbmFibGVkOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5FTkFCTEVfU1lOQykoc3RhdGUpLFxuICB2ZXJpZmllZEVtYWlsOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG4gIGdldFN5bmNFcnJvcjogc2VsZWN0R2V0U3luY0Vycm9yTWVzc2FnZShzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNldFN5bmNFbmFibGVkOiB2YWx1ZSA9PiBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoU0VUVElOR1MuRU5BQkxFX1NZTkMsIHZhbHVlKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFN5bmNUb2dnbGUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/syncToggle/index.js\n"); - -/***/ }), - -/***/ "../ui/component/syncToggle/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/syncToggle/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\n\nfunction SyncToggle(props) {\n var setSyncEnabled = props.setSyncEnabled,\n syncEnabled = props.syncEnabled,\n verifiedEmail = props.verifiedEmail,\n getSyncError = props.getSyncError,\n history = props.history,\n pathname = props.location.pathname,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled;\n\n function handleChange() {\n setSyncEnabled(!syncEnabled);\n }\n\n if (getSyncError) {\n history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=\").concat(pathname, \"&immediate=true\"));\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, !verifiedEmail ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n requiresAuth: true,\n button: \"primary\",\n label: __('Add Email')\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('An email address is required to sync your account.'))) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"checkbox\",\n name: \"sync_toggle\",\n label: __('Sync your balance and preferences across devices.'),\n checked: syncEnabled,\n onChange: handleChange,\n disabled: disabled\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(SyncToggle));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3N5bmNUb2dnbGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3N5bmNUb2dnbGUvdmlldy5qc3g/MGI1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG50eXBlIFByb3BzID0ge1xuICBzZXRTeW5jRW5hYmxlZDogYm9vbGVhbiA9PiB2b2lkLFxuICBzeW5jRW5hYmxlZDogYm9vbGVhbixcbiAgdmVyaWZpZWRFbWFpbDogP3N0cmluZyxcbiAgaGlzdG9yeTogeyBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBsb2NhdGlvbjogVXJsTG9jYXRpb24sXG4gIGdldFN5bmNFcnJvcjogP3N0cmluZyxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBTeW5jVG9nZ2xlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgc2V0U3luY0VuYWJsZWQsXG4gICAgc3luY0VuYWJsZWQsXG4gICAgdmVyaWZpZWRFbWFpbCxcbiAgICBnZXRTeW5jRXJyb3IsXG4gICAgaGlzdG9yeSxcbiAgICBsb2NhdGlvbjogeyBwYXRobmFtZSB9LFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gIH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgc2V0U3luY0VuYWJsZWQoIXN5bmNFbmFibGVkKTtcbiAgfVxuXG4gIGlmIChnZXRTeW5jRXJyb3IpIHtcbiAgICBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuQVVUSH0/cmVkaXJlY3Q9JHtwYXRobmFtZX0maW1tZWRpYXRlPXRydWVgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIHshdmVyaWZpZWRFbWFpbCA/IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8QnV0dG9uIHJlcXVpcmVzQXV0aCBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdBZGQgRW1haWwnKX0gLz5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+e19fKCdBbiBlbWFpbCBhZGRyZXNzIGlzIHJlcXVpcmVkIHRvIHN5bmMgeW91ciBhY2NvdW50LicpfTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBuYW1lPVwic3luY190b2dnbGVcIlxuICAgICAgICAgIGxhYmVsPXtfXygnU3luYyB5b3VyIGJhbGFuY2UgYW5kIHByZWZlcmVuY2VzIGFjcm9zcyBkZXZpY2VzLicpfVxuICAgICAgICAgIGNoZWNrZWQ9e3N5bmNFbmFibGVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihTeW5jVG9nZ2xlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVdBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/syncToggle/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/tag/index.js": -/*!************************************!*\ - !*** ../ui/component/tag/index.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/component/tag/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdGFnL2luZGV4LmpzPzFkNzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBUYWcgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9ICgpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShUYWcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/tag/index.js\n"); - -/***/ }), - -/***/ "../ui/component/tag/view.jsx": -/*!************************************!*\ - !*** ../ui/component/tag/view.jsx ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Tag; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n\n\n\n\n\n\nfunction Tag(props) {\n var name = props.name,\n onClick = props.onClick,\n _props$type = props.type,\n type = _props$type === void 0 ? 'link' : _props$type,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled;\n var isMature = lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"MATURE_TAGS\"].includes(name);\n var clickProps = onClick ? {\n onClick: onClick\n } : {\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?t=\").concat(encodeURIComponent(name))\n };\n var title;\n\n if (!onClick) {\n title = __('View tag');\n } else {\n title = type === 'add' ? __('Add tag') : __('Remove tag');\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _extends({}, clickProps, {\n disabled: disabled,\n title: title,\n className: classnames__WEBPACK_IMPORTED_MODULE_3___default()('tag', {\n 'tag--disabled': disabled === true,\n 'tag--large': type === 'large',\n 'tag--remove': type === 'remove',\n // tag--add only adjusts the color, which causes issues with mature tag color clashing\n 'tag--add': !isMature && type === 'add',\n 'tag--mature': isMature\n }),\n label: name,\n iconSize: 12,\n iconRight: type !== 'link' && type !== 'large' && (type === 'remove' ? constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"] : constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ADD\"])\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdGFnL3ZpZXcuanN4Pzg3YWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTUFUVVJFX1RBR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgdHlwZT86IHN0cmluZyxcbiAgb25DbGljaz86IGFueSA9PiBhbnksXG4gIGRpc2FibGVkOiBib29sZWFuLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGFnKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG5hbWUsIG9uQ2xpY2ssIHR5cGUgPSAnbGluaycsIGRpc2FibGVkID0gZmFsc2UgfSA9IHByb3BzO1xuICBjb25zdCBpc01hdHVyZSA9IE1BVFVSRV9UQUdTLmluY2x1ZGVzKG5hbWUpO1xuICBjb25zdCBjbGlja1Byb3BzID0gb25DbGljayA/IHsgb25DbGljayB9IDogeyBuYXZpZ2F0ZTogYC8kLyR7UEFHRVMuRElTQ09WRVJ9P3Q9JHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9YCB9O1xuXG4gIGxldCB0aXRsZTtcbiAgaWYgKCFvbkNsaWNrKSB7XG4gICAgdGl0bGUgPSBfXygnVmlldyB0YWcnKTtcbiAgfSBlbHNlIHtcbiAgICB0aXRsZSA9IHR5cGUgPT09ICdhZGQnID8gX18oJ0FkZCB0YWcnKSA6IF9fKCdSZW1vdmUgdGFnJyk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHsuLi5jbGlja1Byb3BzfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCd0YWcnLCB7XG4gICAgICAgICd0YWctLWRpc2FibGVkJzogZGlzYWJsZWQgPT09IHRydWUsXG4gICAgICAgICd0YWctLWxhcmdlJzogdHlwZSA9PT0gJ2xhcmdlJyxcbiAgICAgICAgJ3RhZy0tcmVtb3ZlJzogdHlwZSA9PT0gJ3JlbW92ZScsXG4gICAgICAgIC8vIHRhZy0tYWRkIG9ubHkgYWRqdXN0cyB0aGUgY29sb3IsIHdoaWNoIGNhdXNlcyBpc3N1ZXMgd2l0aCBtYXR1cmUgdGFnIGNvbG9yIGNsYXNoaW5nXG4gICAgICAgICd0YWctLWFkZCc6ICFpc01hdHVyZSAmJiB0eXBlID09PSAnYWRkJyxcbiAgICAgICAgJ3RhZy0tbWF0dXJlJzogaXNNYXR1cmUsXG4gICAgICB9KX1cbiAgICAgIGxhYmVsPXtuYW1lfVxuICAgICAgaWNvblNpemU9ezEyfVxuICAgICAgaWNvblJpZ2h0PXt0eXBlICE9PSAnbGluaycgJiYgdHlwZSAhPT0gJ2xhcmdlJyAmJiAodHlwZSA9PT0gJ3JlbW92ZScgPyBJQ09OUy5SRU1PVkUgOiBJQ09OUy5BREQpfVxuICAgIC8+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFkQTtBQWlCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/tag/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/tagsSearch/index.js": -/*!*******************************************!*\ - !*** ../ui/component/tagsSearch/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/tags */ \"../ui/redux/actions/tags.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/tagsSearch/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n unfollowedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectUnfollowedTags\"])(state),\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doToggleTagFollowDesktop: redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__[\"doToggleTagFollowDesktop\"],\n doAddTag: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doAddTag\"],\n doDeleteTag: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doDeleteTag\"],\n doReplaceTags: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doReplaceTags\"]\n})(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZ3NTZWFyY2gvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3RhZ3NTZWFyY2gvaW5kZXguanM/YTdkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VW5mb2xsb3dlZFRhZ3MsIHNlbGVjdEZvbGxvd2VkVGFncywgZG9SZXBsYWNlVGFncywgZG9BZGRUYWcsIGRvRGVsZXRlVGFnIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3RhZ3MnO1xuaW1wb3J0IERpc2NvdmVyeUZpcnN0UnVuIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIHVuZm9sbG93ZWRUYWdzOiBzZWxlY3RVbmZvbGxvd2VkVGFncyhzdGF0ZSksXG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHtcbiAgICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AsXG4gICAgZG9BZGRUYWcsXG4gICAgZG9EZWxldGVUYWcsXG4gICAgZG9SZXBsYWNlVGFncyxcbiAgfVxuKShEaXNjb3ZlcnlGaXJzdFJ1bik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/tagsSearch/index.js\n"); - -/***/ }), - -/***/ "../ui/component/tagsSearch/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/tagsSearch/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TagsSearch; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_tag__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/tag */ \"../ui/component/tag/index.js\");\n/* harmony import */ var util_set_operations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util/set-operations */ \"../ui/util/set-operations.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n/*\n We display tagsPassedIn\n onClick gets the tag when a tag is clicked\n onSubmit gets an array of tags in object form\n We suggest tags based on followed, unfollowed, and passedIn\n */\n\nfunction TagsSearch(props) {\n var TAG_FOLLOW_MAX = 1000;\n var _props$tagsPassedIn = props.tagsPassedIn,\n tagsPassedIn = _props$tagsPassedIn === void 0 ? [] : _props$tagsPassedIn,\n _props$unfollowedTags = props.unfollowedTags,\n unfollowedTags = _props$unfollowedTags === void 0 ? [] : _props$unfollowedTags,\n _props$followedTags = props.followedTags,\n followedTags = _props$followedTags === void 0 ? [] : _props$followedTags,\n doToggleTagFollowDesktop = props.doToggleTagFollowDesktop,\n doAddTag = props.doAddTag,\n onSelect = props.onSelect,\n onRemove = props.onRemove,\n suggestMature = props.suggestMature,\n disableAutoFocus = props.disableAutoFocus,\n placeholder = props.placeholder,\n label = props.label,\n disabled = props.disabled,\n _props$limitSelect = props.limitSelect,\n limitSelect = _props$limitSelect === void 0 ? TAG_FOLLOW_MAX : _props$limitSelect,\n _props$limitShow = props.limitShow,\n limitShow = _props$limitShow === void 0 ? 5 : _props$limitShow;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n newTag = _useState2[0],\n setNewTag = _useState2[1];\n\n var doesTagMatch = function doesTagMatch(name) {\n var nextTag = newTag.substr(newTag.lastIndexOf(',') + 1, newTag.length).trim();\n return newTag ? name.toLowerCase().includes(nextTag.toLowerCase()) : true;\n }; // Make sure there are no duplicates, then trim\n // suggestedTags = (followedTags - tagsPassedIn) + unfollowedTags\n\n\n var followedTagsSet = new Set(followedTags.map(function (tag) {\n return tag.name;\n }));\n var selectedTagsSet = new Set(tagsPassedIn.map(function (tag) {\n return tag.name;\n }));\n var unfollowedTagsSet = new Set(unfollowedTags.map(function (tag) {\n return tag.name;\n }));\n var remainingFollowedTagsSet = Object(util_set_operations__WEBPACK_IMPORTED_MODULE_3__[\"setDifference\"])(followedTagsSet, selectedTagsSet);\n var remainingUnfollowedTagsSet = Object(util_set_operations__WEBPACK_IMPORTED_MODULE_3__[\"setDifference\"])(unfollowedTagsSet, selectedTagsSet);\n var suggestedTagsSet = Object(util_set_operations__WEBPACK_IMPORTED_MODULE_3__[\"setUnion\"])(remainingFollowedTagsSet, remainingUnfollowedTagsSet);\n var countWithoutMature = selectedTagsSet.has('mature') ? selectedTagsSet.size - 1 : selectedTagsSet.size;\n var maxed = Boolean(limitSelect && countWithoutMature >= limitSelect);\n var suggestedTags = Array.from(suggestedTagsSet).filter(doesTagMatch).slice(0, limitShow); // tack 'mature' onto the end if it's not already in the list\n\n if (!newTag && suggestMature && !suggestedTags.some(function (tag) {\n return tag === 'mature';\n })) {\n suggestedTags.push('mature');\n }\n\n function onChange(e) {\n setNewTag(e.target.value);\n }\n\n function handleSubmit(e) {\n e.preventDefault();\n var tags = newTag.trim();\n\n if (tags.length === 0) {\n return;\n }\n\n setNewTag('');\n var newTagsArr = Array.from(new Set(tags.split(',').slice(0, limitSelect - countWithoutMature).map(function (newTag) {\n return newTag.trim().toLowerCase();\n }))); // Split into individual tags, normalize the tags, and remove duplicates with a set.\n\n if (onSelect) {\n var arrOfObjectTags = newTagsArr.map(function (tag) {\n return {\n name: tag\n };\n });\n onSelect(arrOfObjectTags);\n } else {\n newTagsArr.forEach(function (tag) {\n if (!unfollowedTags.some(function (_ref) {\n var name = _ref.name;\n return name === tag;\n })) {\n doAddTag(tag);\n }\n\n if (!followedTags.some(function (_ref2) {\n var name = _ref2.name;\n return name === tag;\n })) {\n doToggleTagFollowDesktop(tag);\n }\n });\n }\n }\n\n function handleTagClick(tag) {\n if (onSelect) {\n onSelect([{\n name: tag\n }]);\n } else {\n doToggleTagFollowDesktop(tag);\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n className: \"tags__input-wrapper\",\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, limitSelect < TAG_FOLLOW_MAX ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tokens: {\n number: limitSelect - countWithoutMature,\n selectTagsLabel: label\n }\n }, \"%selectTagsLabel% (%number% left)\") : label || __('Following')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"tags--remove\"\n }, !tagsPassedIn.length && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"placeholder-tag\",\n name: 'example',\n disabled: true,\n type: 'remove'\n }), Boolean(tagsPassedIn.length) && tagsPassedIn.map(function (tag) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"passed\".concat(tag.name),\n name: tag.name,\n type: \"remove\",\n onClick: function onClick() {\n onRemove(tag);\n }\n });\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: !disableAutoFocus,\n className: \"tag__input\",\n onChange: onChange,\n placeholder: placeholder || __('gaming, crypto'),\n type: \"text\",\n value: newTag,\n disabled: disabled,\n label: 'Add Tags'\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", null, newTag.length ? __('Matching') : __('Known Tags')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"tags\"\n }, Boolean(newTag.length) && !suggestedTags.includes(newTag) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n disabled: newTag !== 'mature' && maxed,\n key: \"entered\".concat(newTag),\n name: newTag,\n type: \"add\",\n onClick: newTag.includes('') ? function (e) {\n return handleSubmit(e);\n } : function (e) {\n return handleTagClick(newTag);\n }\n }), suggestedTags.map(function (tag) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n disabled: tag !== 'mature' && maxed,\n key: \"suggested\".concat(tag),\n name: tag,\n type: \"add\",\n onClick: function onClick() {\n return handleTagClick(tag);\n }\n });\n })))));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZ3NTZWFyY2gvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3RhZ3NTZWFyY2gvdmlldy5qc3g/YmQ2MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBUYWcgZnJvbSAnY29tcG9uZW50L3RhZyc7XG5pbXBvcnQgeyBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZSB9IGZyb20gJ3V0aWwvc2V0LW9wZXJhdGlvbnMnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRhZ3NQYXNzZWRJbjogQXJyYXk8VGFnPixcbiAgdW5mb2xsb3dlZFRhZ3M6IEFycmF5PFRhZz4sXG4gIGZvbGxvd2VkVGFnczogQXJyYXk8VGFnPixcbiAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wOiBzdHJpbmcgPT4gdm9pZCxcbiAgZG9BZGRUYWc6IHN0cmluZyA9PiB2b2lkLFxuICBvblNlbGVjdD86IFRhZyA9PiB2b2lkLFxuICBzdWdnZXN0TWF0dXJlPzogYm9vbGVhbixcbiAgZGlzYWJsZUF1dG9Gb2N1cz86IGJvb2xlYW4sXG4gIG9uUmVtb3ZlOiBUYWcgPT4gdm9pZCxcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nLFxuICBkaXNhYmxlZD86IGJvb2xlYW4sXG4gIGxpbWl0U2VsZWN0PzogbnVtYmVyLFxuICBsaW1pdFNob3c/OiBudW1iZXIsXG59O1xuXG4vKlxuIFdlIGRpc3BsYXkgdGFnc1Bhc3NlZEluXG4gb25DbGljayBnZXRzIHRoZSB0YWcgd2hlbiBhIHRhZyBpcyBjbGlja2VkXG4gb25TdWJtaXQgZ2V0cyBhbiBhcnJheSBvZiB0YWdzIGluIG9iamVjdCBmb3JtXG4gV2Ugc3VnZ2VzdCB0YWdzIGJhc2VkIG9uIGZvbGxvd2VkLCB1bmZvbGxvd2VkLCBhbmQgcGFzc2VkSW5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWdzU2VhcmNoKHByb3BzOiBQcm9wcykge1xuICBjb25zdCBUQUdfRk9MTE9XX01BWCA9IDEwMDA7XG4gIGNvbnN0IHtcbiAgICB0YWdzUGFzc2VkSW4gPSBbXSxcbiAgICB1bmZvbGxvd2VkVGFncyA9IFtdLFxuICAgIGZvbGxvd2VkVGFncyA9IFtdLFxuICAgIGRvVG9nZ2xlVGFnRm9sbG93RGVza3RvcCxcbiAgICBkb0FkZFRhZyxcbiAgICBvblNlbGVjdCxcbiAgICBvblJlbW92ZSxcbiAgICBzdWdnZXN0TWF0dXJlLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgZGlzYWJsZWQsXG4gICAgbGltaXRTZWxlY3QgPSBUQUdfRk9MTE9XX01BWCxcbiAgICBsaW1pdFNob3cgPSA1LFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtuZXdUYWcsIHNldE5ld1RhZ10gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGRvZXNUYWdNYXRjaCA9IG5hbWUgPT4ge1xuICAgIGNvbnN0IG5leHRUYWcgPSBuZXdUYWcuc3Vic3RyKG5ld1RhZy5sYXN0SW5kZXhPZignLCcpICsgMSwgbmV3VGFnLmxlbmd0aCkudHJpbSgpO1xuICAgIHJldHVybiBuZXdUYWcgPyBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmV4dFRhZy50b0xvd2VyQ2FzZSgpKSA6IHRydWU7XG4gIH07XG5cbiAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzLCB0aGVuIHRyaW1cbiAgLy8gc3VnZ2VzdGVkVGFncyA9IChmb2xsb3dlZFRhZ3MgLSB0YWdzUGFzc2VkSW4pICsgdW5mb2xsb3dlZFRhZ3NcblxuICBjb25zdCBmb2xsb3dlZFRhZ3NTZXQgPSBuZXcgU2V0KGZvbGxvd2VkVGFncy5tYXAodGFnID0+IHRhZy5uYW1lKSk7XG4gIGNvbnN0IHNlbGVjdGVkVGFnc1NldCA9IG5ldyBTZXQodGFnc1Bhc3NlZEluLm1hcCh0YWcgPT4gdGFnLm5hbWUpKTtcbiAgY29uc3QgdW5mb2xsb3dlZFRhZ3NTZXQgPSBuZXcgU2V0KHVuZm9sbG93ZWRUYWdzLm1hcCh0YWcgPT4gdGFnLm5hbWUpKTtcbiAgY29uc3QgcmVtYWluaW5nRm9sbG93ZWRUYWdzU2V0ID0gc2V0RGlmZmVyZW5jZShmb2xsb3dlZFRhZ3NTZXQsIHNlbGVjdGVkVGFnc1NldCk7XG4gIGNvbnN0IHJlbWFpbmluZ1VuZm9sbG93ZWRUYWdzU2V0ID0gc2V0RGlmZmVyZW5jZSh1bmZvbGxvd2VkVGFnc1NldCwgc2VsZWN0ZWRUYWdzU2V0KTtcbiAgY29uc3Qgc3VnZ2VzdGVkVGFnc1NldCA9IHNldFVuaW9uKHJlbWFpbmluZ0ZvbGxvd2VkVGFnc1NldCwgcmVtYWluaW5nVW5mb2xsb3dlZFRhZ3NTZXQpO1xuXG4gIGNvbnN0IGNvdW50V2l0aG91dE1hdHVyZSA9IHNlbGVjdGVkVGFnc1NldC5oYXMoJ21hdHVyZScpID8gc2VsZWN0ZWRUYWdzU2V0LnNpemUgLSAxIDogc2VsZWN0ZWRUYWdzU2V0LnNpemU7XG4gIGNvbnN0IG1heGVkID0gQm9vbGVhbihsaW1pdFNlbGVjdCAmJiBjb3VudFdpdGhvdXRNYXR1cmUgPj0gbGltaXRTZWxlY3QpO1xuICBjb25zdCBzdWdnZXN0ZWRUYWdzID0gQXJyYXkuZnJvbShzdWdnZXN0ZWRUYWdzU2V0KVxuICAgIC5maWx0ZXIoZG9lc1RhZ01hdGNoKVxuICAgIC5zbGljZSgwLCBsaW1pdFNob3cpO1xuXG4gIC8vIHRhY2sgJ21hdHVyZScgb250byB0aGUgZW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3RcbiAgaWYgKCFuZXdUYWcgJiYgc3VnZ2VzdE1hdHVyZSAmJiAhc3VnZ2VzdGVkVGFncy5zb21lKHRhZyA9PiB0YWcgPT09ICdtYXR1cmUnKSkge1xuICAgIHN1Z2dlc3RlZFRhZ3MucHVzaCgnbWF0dXJlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShlKSB7XG4gICAgc2V0TmV3VGFnKGUudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCB0YWdzID0gbmV3VGFnLnRyaW0oKTtcblxuICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldE5ld1RhZygnJyk7XG5cbiAgICBjb25zdCBuZXdUYWdzQXJyID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoXG4gICAgICAgIHRhZ3NcbiAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdFNlbGVjdCAtIGNvdW50V2l0aG91dE1hdHVyZSlcbiAgICAgICAgICAubWFwKG5ld1RhZyA9PiBuZXdUYWcudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFNwbGl0IGludG8gaW5kaXZpZHVhbCB0YWdzLCBub3JtYWxpemUgdGhlIHRhZ3MsIGFuZCByZW1vdmUgZHVwbGljYXRlcyB3aXRoIGEgc2V0LlxuICAgIGlmIChvblNlbGVjdCkge1xuICAgICAgY29uc3QgYXJyT2ZPYmplY3RUYWdzID0gbmV3VGFnc0Fyci5tYXAodGFnID0+IHtcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogdGFnIH07XG4gICAgICB9KTtcbiAgICAgIG9uU2VsZWN0KGFyck9mT2JqZWN0VGFncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1RhZ3NBcnIuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgICBpZiAoIXVuZm9sbG93ZWRUYWdzLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSB0YWcpKSB7XG4gICAgICAgICAgZG9BZGRUYWcodGFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9sbG93ZWRUYWdzLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSB0YWcpKSB7XG4gICAgICAgICAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wKHRhZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRhZ0NsaWNrKHRhZzogc3RyaW5nKSB7XG4gICAgaWYgKG9uU2VsZWN0KSB7XG4gICAgICBvblNlbGVjdChbeyBuYW1lOiB0YWcgfV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AodGFnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8Rm9ybSBjbGFzc05hbWU9XCJ0YWdzX19pbnB1dC13cmFwcGVyXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgIDxsYWJlbD5cbiAgICAgICAgICB7bGltaXRTZWxlY3QgPCBUQUdfRk9MTE9XX01BWCA/IChcbiAgICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICBudW1iZXI6IGxpbWl0U2VsZWN0IC0gY291bnRXaXRob3V0TWF0dXJlLFxuICAgICAgICAgICAgICAgIHNlbGVjdFRhZ3NMYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICVzZWxlY3RUYWdzTGFiZWwlICglbnVtYmVyJSBsZWZ0KVxuICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgbGFiZWwgfHwgX18oJ0ZvbGxvd2luZycpXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cInRhZ3MtLXJlbW92ZVwiPlxuICAgICAgICAgIHshdGFnc1Bhc3NlZEluLmxlbmd0aCAmJiA8VGFnIGtleT17YHBsYWNlaG9sZGVyLXRhZ2B9IG5hbWU9eydleGFtcGxlJ30gZGlzYWJsZWQgdHlwZT17J3JlbW92ZSd9IC8+fVxuICAgICAgICAgIHtCb29sZWFuKHRhZ3NQYXNzZWRJbi5sZW5ndGgpICYmXG4gICAgICAgICAgICB0YWdzUGFzc2VkSW4ubWFwKHRhZyA9PiAoXG4gICAgICAgICAgICAgIDxUYWdcbiAgICAgICAgICAgICAgICBrZXk9e2BwYXNzZWQke3RhZy5uYW1lfWB9XG4gICAgICAgICAgICAgICAgbmFtZT17dGFnLm5hbWV9XG4gICAgICAgICAgICAgICAgdHlwZT1cInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgb25SZW1vdmUodGFnKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICBhdXRvRm9jdXM9eyFkaXNhYmxlQXV0b0ZvY3VzfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInRhZ19faW5wdXRcIlxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXIgfHwgX18oJ2dhbWluZywgY3J5cHRvJyl9XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHZhbHVlPXtuZXdUYWd9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIGxhYmVsPXsnQWRkIFRhZ3MnfVxuICAgICAgICAvPlxuICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICA8bGFiZWw+e25ld1RhZy5sZW5ndGggPyBfXygnTWF0Y2hpbmcnKSA6IF9fKCdLbm93biBUYWdzJyl9PC9sYWJlbD5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwidGFnc1wiPlxuICAgICAgICAgICAge0Jvb2xlYW4obmV3VGFnLmxlbmd0aCkgJiYgIXN1Z2dlc3RlZFRhZ3MuaW5jbHVkZXMobmV3VGFnKSAmJiAoXG4gICAgICAgICAgICAgIDxUYWdcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17bmV3VGFnICE9PSAnbWF0dXJlJyAmJiBtYXhlZH1cbiAgICAgICAgICAgICAgICBrZXk9e2BlbnRlcmVkJHtuZXdUYWd9YH1cbiAgICAgICAgICAgICAgICBuYW1lPXtuZXdUYWd9XG4gICAgICAgICAgICAgICAgdHlwZT1cImFkZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17bmV3VGFnLmluY2x1ZGVzKCcnKSA/IGUgPT4gaGFuZGxlU3VibWl0KGUpIDogZSA9PiBoYW5kbGVUYWdDbGljayhuZXdUYWcpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtzdWdnZXN0ZWRUYWdzLm1hcCh0YWcgPT4gKFxuICAgICAgICAgICAgICA8VGFnXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RhZyAhPT0gJ21hdHVyZScgJiYgbWF4ZWR9XG4gICAgICAgICAgICAgICAga2V5PXtgc3VnZ2VzdGVkJHt0YWd9YH1cbiAgICAgICAgICAgICAgICBuYW1lPXt0YWd9XG4gICAgICAgICAgICAgICAgdHlwZT1cImFkZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlVGFnQ2xpY2sodGFnKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvRm9ybT5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtQkE7Ozs7Ozs7QUFPQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFrQkE7QUFDQTtBQUNBO0FBckJBO0FBeUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBZkE7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUpBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFuQkE7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBWUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUxBO0FBdERBO0FBbUVBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/tagsSearch/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/tagsSelect/index.js": -/*!*******************************************!*\ - !*** ../ui/component/tagsSelect/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/tags */ \"../ui/redux/actions/tags.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/tagsSelect/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n unfollowedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectUnfollowedTags\"])(state),\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doToggleTagFollowDesktop: redux_actions_tags__WEBPACK_IMPORTED_MODULE_2__[\"doToggleTagFollowDesktop\"],\n doAddTag: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doAddTag\"],\n doDeleteTag: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doDeleteTag\"],\n doReplaceTags: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doReplaceTags\"]\n})(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZ3NTZWxlY3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3RhZ3NTZWxlY3QvaW5kZXguanM/MWYyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VW5mb2xsb3dlZFRhZ3MsIHNlbGVjdEZvbGxvd2VkVGFncywgZG9SZXBsYWNlVGFncywgZG9BZGRUYWcsIGRvRGVsZXRlVGFnIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3RhZ3MnO1xuaW1wb3J0IERpc2NvdmVyeUZpcnN0UnVuIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+ICh7XG4gIHVuZm9sbG93ZWRUYWdzOiBzZWxlY3RVbmZvbGxvd2VkVGFncyhzdGF0ZSksXG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHtcbiAgICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AsXG4gICAgZG9BZGRUYWcsXG4gICAgZG9EZWxldGVUYWcsXG4gICAgZG9SZXBsYWNlVGFncyxcbiAgfVxuKShEaXNjb3ZlcnlGaXJzdFJ1bik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/tagsSelect/index.js\n"); - -/***/ }), - -/***/ "../ui/component/tagsSelect/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/tagsSelect/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TagsSelect; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_tag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/tag */ \"../ui/component/tag/index.js\");\n/* harmony import */ var component_tagsSearch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/tagsSearch */ \"../ui/component/tagsSearch/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n/*\n Displays tagsChosen if it exists, otherwise followedTags.\n */\n\nfunction TagsSelect(props) {\n var showClose = props.showClose,\n followedTags = props.followedTags,\n _props$doToggleTagFol = props.doToggleTagFollowDesktop,\n doToggleTagFollowDesktop = _props$doToggleTagFol === void 0 ? null : _props$doToggleTagFol,\n title = props.title,\n help = props.help,\n tagsChosen = props.tagsChosen,\n onSelect = props.onSelect,\n onRemove = props.onRemove,\n suggestMature = props.suggestMature,\n disableAutoFocus = props.disableAutoFocus,\n placeholder = props.placeholder,\n hideHeader = props.hideHeader,\n label = props.label,\n limitShow = props.limitShow,\n limitSelect = props.limitSelect;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"])('tag-select:has-closed', false),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n hasClosed = _usePersistedState2[0],\n setHasClosed = _usePersistedState2[1];\n\n var tagsToDisplay = tagsChosen || followedTags;\n var tagCount = tagsToDisplay.length;\n var hasMatureTag = tagsToDisplay.map(function (tag) {\n return tag.name;\n }).includes('mature');\n\n function handleClose() {\n setHasClosed(true);\n }\n\n function handleTagClick(tag) {\n if (onRemove) {\n onRemove(tag);\n } else if (doToggleTagFollowDesktop) {\n doToggleTagFollowDesktop(tag.name);\n var wasFollowing = followedTags.map(function (tag) {\n return tag.name;\n }).includes(tag.name);\n var nowFollowing = !wasFollowing;\n analytics__WEBPACK_IMPORTED_MODULE_6__[\"default\"].tagFollowEvent(tag.name, nowFollowing, 'tag-select');\n }\n }\n\n react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"](function () {\n if (tagCount === 0 && showClose) {\n setHasClosed(false);\n }\n }, [tagCount, setHasClosed, showClose]);\n return (showClose && !hasClosed || !showClose) && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TAG\"],\n title: hideHeader ? null : react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, title, showClose && tagsToDisplay.length > 0 && !hasClosed && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"close\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n onClick: handleClose\n })),\n subtitle: help !== false && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"span\", null, help || __(\"The tags you follow will change what's trending for you.\"), ' ', react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/trending\"\n }), \".\"),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_tagsSearch__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n label: label,\n onRemove: handleTagClick,\n onSelect: onSelect,\n suggestMature: suggestMature && !hasMatureTag,\n disableAutoFocus: disableAutoFocus,\n tagsPassedIn: tagsToDisplay,\n placeholder: placeholder,\n limitShow: limitShow,\n limitSelect: limitSelect\n }))\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RhZ3NTZWxlY3Qvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3RhZ3NTZWxlY3Qvdmlldy5qc3g/MDUzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgVGFnIGZyb20gJ2NvbXBvbmVudC90YWcnO1xuaW1wb3J0IFRhZ3NTZWFyY2ggZnJvbSAnY29tcG9uZW50L3RhZ3NTZWFyY2gnO1xuaW1wb3J0IHVzZVBlcnNpc3RlZFN0YXRlIGZyb20gJ2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZSc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICBzaG93Q2xvc2U/OiBib29sZWFuLFxuICBmb2xsb3dlZFRhZ3M6IEFycmF5PFRhZz4sXG4gIGRvVG9nZ2xlVGFnRm9sbG93RGVza3RvcD86IHN0cmluZyA9PiB2b2lkLFxuICBzdWdnZXN0TWF0dXJlOiBib29sZWFuLFxuICAvLyBPdmVycmlkZXNcbiAgLy8gVGhlIGRlZmF1bHQgY29tcG9uZW50IGlzIGZvciBmb2xsb3dpbmcgdGFnc1xuICB0aXRsZT86IHN0cmluZyB8IGJvb2xlYW4sXG4gIGhlbHA/OiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nLFxuICB0YWdzQ2hvc2VuPzogQXJyYXk8VGFnPixcbiAgb25TZWxlY3Q/OiAoQXJyYXk8VGFnPikgPT4gdm9pZCxcbiAgb25SZW1vdmU/OiBUYWcgPT4gdm9pZCxcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXG4gIGRpc2FibGVBdXRvRm9jdXM/OiBib29sZWFuLFxuICBoaWRlSGVhZGVyPzogYm9vbGVhbixcbiAgbGltaXRTaG93PzogbnVtYmVyLFxuICBsaW1pdFNlbGVjdD86IG51bWJlcixcbn07XG5cbi8qXG4gIERpc3BsYXlzIHRhZ3NDaG9zZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgZm9sbG93ZWRUYWdzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWdzU2VsZWN0KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgc2hvd0Nsb3NlLFxuICAgIGZvbGxvd2VkVGFncyxcbiAgICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgPSBudWxsLFxuICAgIHRpdGxlLFxuICAgIGhlbHAsXG4gICAgdGFnc0Nob3NlbixcbiAgICBvblNlbGVjdCxcbiAgICBvblJlbW92ZSxcbiAgICBzdWdnZXN0TWF0dXJlLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgaGlkZUhlYWRlcixcbiAgICBsYWJlbCxcbiAgICBsaW1pdFNob3csXG4gICAgbGltaXRTZWxlY3QsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2hhc0Nsb3NlZCwgc2V0SGFzQ2xvc2VkXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCd0YWctc2VsZWN0Omhhcy1jbG9zZWQnLCBmYWxzZSk7XG4gIGNvbnN0IHRhZ3NUb0Rpc3BsYXkgPSB0YWdzQ2hvc2VuIHx8IGZvbGxvd2VkVGFncztcbiAgY29uc3QgdGFnQ291bnQgPSB0YWdzVG9EaXNwbGF5Lmxlbmd0aDtcbiAgY29uc3QgaGFzTWF0dXJlVGFnID0gdGFnc1RvRGlzcGxheS5tYXAodGFnID0+IHRhZy5uYW1lKS5pbmNsdWRlcygnbWF0dXJlJyk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgc2V0SGFzQ2xvc2VkKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGFnQ2xpY2sodGFnKSB7XG4gICAgaWYgKG9uUmVtb3ZlKSB7XG4gICAgICBvblJlbW92ZSh0YWcpO1xuICAgIH0gZWxzZSBpZiAoZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wKSB7XG4gICAgICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AodGFnLm5hbWUpO1xuXG4gICAgICBjb25zdCB3YXNGb2xsb3dpbmcgPSBmb2xsb3dlZFRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSkuaW5jbHVkZXModGFnLm5hbWUpO1xuICAgICAgY29uc3Qgbm93Rm9sbG93aW5nID0gIXdhc0ZvbGxvd2luZztcbiAgICAgIGFuYWx5dGljcy50YWdGb2xsb3dFdmVudCh0YWcubmFtZSwgbm93Rm9sbG93aW5nLCAndGFnLXNlbGVjdCcpO1xuICAgIH1cbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRhZ0NvdW50ID09PSAwICYmIHNob3dDbG9zZSkge1xuICAgICAgc2V0SGFzQ2xvc2VkKGZhbHNlKTtcbiAgICB9XG4gIH0sIFt0YWdDb3VudCwgc2V0SGFzQ2xvc2VkLCBzaG93Q2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgICgoc2hvd0Nsb3NlICYmICFoYXNDbG9zZWQpIHx8ICFzaG93Q2xvc2UpICYmIChcbiAgICAgIDxDYXJkXG4gICAgICAgIGljb249e0lDT05TLlRBR31cbiAgICAgICAgdGl0bGU9e1xuICAgICAgICAgIGhpZGVIZWFkZXIgPyBudWxsIDogKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgIHtzaG93Q2xvc2UgJiYgdGFnc1RvRGlzcGxheS5sZW5ndGggPiAwICYmICFoYXNDbG9zZWQgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwiY2xvc2VcIiBpY29uPXtJQ09OUy5SRU1PVkV9IG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgIGhlbHAgIT09IGZhbHNlICYmIChcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7aGVscCB8fCBfXyhcIlRoZSB0YWdzIHlvdSBmb2xsb3cgd2lsbCBjaGFuZ2Ugd2hhdCdzIHRyZW5kaW5nIGZvciB5b3UuXCIpfXsnICd9XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnTGVhcm4gbW9yZScpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvdHJlbmRpbmdcIiAvPi5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPFRhZ3NTZWFyY2hcbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICBvblJlbW92ZT17aGFuZGxlVGFnQ2xpY2t9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgICAgc3VnZ2VzdE1hdHVyZT17c3VnZ2VzdE1hdHVyZSAmJiAhaGFzTWF0dXJlVGFnfVxuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzPXtkaXNhYmxlQXV0b0ZvY3VzfVxuICAgICAgICAgICAgICB0YWdzUGFzc2VkSW49e3RhZ3NUb0Rpc3BsYXl9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgbGltaXRTaG93PXtsaW1pdFNob3d9XG4gICAgICAgICAgICAgIGxpbWl0U2VsZWN0PXtsaW1pdFNlbGVjdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICApXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXNCQTs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFrQkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUdBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBdEJBO0FBc0NBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/tagsSelect/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/transactionList/index.js": -/*!************************************************!*\ - !*** ../ui/component/transactionList/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/transactionList/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimedRewardsByTransactionId\"])(state),\n mySupports: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectSupportsByOutpoint\"])(state),\n myClaims: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectAllMyClaimsByOutpoint\"])(state),\n filterSetting: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectTransactionListFilter\"])(state),\n loading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectIsFetchingTransactions\"])(state),\n allTransactions: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectTransactionItems\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(modal, props));\n },\n setTransactionFilter: function setTransactionFilter(filterSetting) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doSetTransactionListFilter\"])(filterSetting));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25MaXN0L2luZGV4LmpzPzlkNWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdENsYWltZWRSZXdhcmRzQnlUcmFuc2FjdGlvbklkIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7XG4gIHNlbGVjdEFsbE15Q2xhaW1zQnlPdXRwb2ludCxcbiAgc2VsZWN0U3VwcG9ydHNCeU91dHBvaW50LFxuICBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIsXG4gIGRvU2V0VHJhbnNhY3Rpb25MaXN0RmlsdGVyLFxuICBzZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zLFxuICBzZWxlY3RUcmFuc2FjdGlvbkl0ZW1zLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IFRyYW5zYWN0aW9uTGlzdCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICByZXdhcmRzOiBzZWxlY3RDbGFpbWVkUmV3YXJkc0J5VHJhbnNhY3Rpb25JZChzdGF0ZSksXG4gIG15U3VwcG9ydHM6IHNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludChzdGF0ZSksXG4gIG15Q2xhaW1zOiBzZWxlY3RBbGxNeUNsYWltc0J5T3V0cG9pbnQoc3RhdGUpLFxuICBmaWx0ZXJTZXR0aW5nOiBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIoc3RhdGUpLFxuICBsb2FkaW5nOiBzZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zKHN0YXRlKSxcbiAgYWxsVHJhbnNhY3Rpb25zOiBzZWxlY3RUcmFuc2FjdGlvbkl0ZW1zKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3Blbk1vZGFsOiAobW9kYWwsIHByb3BzKSA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChtb2RhbCwgcHJvcHMpKSxcbiAgc2V0VHJhbnNhY3Rpb25GaWx0ZXI6IGZpbHRlclNldHRpbmcgPT4gZGlzcGF0Y2goZG9TZXRUcmFuc2FjdGlvbkxpc3RGaWx0ZXIoZmlsdGVyU2V0dGluZykpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoXG4gIGNvbm5lY3QoXG4gICAgc2VsZWN0LFxuICAgIHBlcmZvcm1cbiAgKShUcmFuc2FjdGlvbkxpc3QpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUFBO0FBQ0E7QUFRQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/transactionList/index.js\n"); - -/***/ }), - -/***/ "../ui/component/transactionList/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/transactionList/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_file_exporter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/file-exporter */ \"../ui/component/common/file-exporter.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var component_transactionListTable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/transactionListTable */ \"../ui/component/transactionListTable/index.js\");\n/* harmony import */ var component_transactionRefreshButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/transactionRefreshButton */ \"../ui/component/transactionRefreshButton/index.js\");\n/* harmony import */ var component_common_paginate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/common/paginate */ \"../ui/component/common/paginate.jsx\");\n\n\n\n\n\n\n\n\n\n\n\nfunction TransactionList(props) {\n var emptyMessage = props.emptyMessage,\n slim = props.slim,\n filterSetting = props.filterSetting,\n title = props.title,\n transactions = props.transactions,\n loading = props.loading,\n history = props.history,\n transactionCount = props.transactionCount,\n allTransactions = props.allTransactions; // Flow offers little support for Object.values() typing.\n // https://github.com/facebook/flow/issues/2221\n // $FlowFixMe\n\n var transactionTypes = Object.values(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"TRANSACTIONS\"]);\n\n function capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n function handleFilterChanged(event) {\n props.setTransactionFilter(event.target.value);\n history.replace(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_6__[\"TRANSACTIONS\"])); //\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"header\", {\n className: \"table__header\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"table__header-text--between\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"h2\", {\n className: \"card__title\"\n }, title), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_transactionRefreshButton__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n slim: slim\n }), !slim && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"select\",\n name: \"file-sort\",\n value: filterSetting || lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"TRANSACTIONS\"].ALL,\n onChange: handleFilterChanged,\n postfix: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"],\n href: \"https://lbry.com/faq/transaction-types\",\n title: __('Help')\n })\n }, transactionTypes.map(function (tt) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"option\", {\n key: tt,\n value: tt\n }, __(\"\".concat(capitalize(tt))));\n })), slim && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_6__[\"TRANSACTIONS\"]),\n label: __('Full History')\n })))), (loading && !transactions.length || !transactions.length) && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"h2\", {\n className: \"main--empty empty\"\n }, loading ? __('Loading') : emptyMessage || __('No transactions.')), !!transactions && !!transactions.length && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_transactionListTable__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n transactionList: transactions\n }), !slim && !!transactionCount && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_paginate__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onPageChange: function onPageChange(page) {\n return history.replace(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_6__[\"TRANSACTIONS\"], \"?page=\").concat(Number(page)));\n },\n totalPages: Math.ceil(transactionCount / lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"TX_LIST\"].PAGE_SIZE)\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionList);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25MaXN0L3ZpZXcuanN4PzEyMmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIGljb25zIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgRmlsZUV4cG9ydGVyIGZyb20gJ2NvbXBvbmVudC9jb21tb24vZmlsZS1leHBvcnRlcic7XG5pbXBvcnQgeyBUUkFOU0FDVElPTlMsIFRYX0xJU1QgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgVHJhbnNhY3Rpb25MaXN0VGFibGUgZnJvbSAnY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFRhYmxlJztcbmltcG9ydCBSZWZyZXNoVHJhbnNhY3Rpb25CdXR0b24gZnJvbSAnY29tcG9uZW50L3RyYW5zYWN0aW9uUmVmcmVzaEJ1dHRvbic7XG5pbXBvcnQgUGFnaW5hdGUgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9wYWdpbmF0ZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVtcHR5TWVzc2FnZTogP3N0cmluZyxcbiAgZmlsdGVyU2V0dGluZzogc3RyaW5nLFxuICBsb2FkaW5nOiBib29sZWFuLFxuICBteUNsYWltczogYW55LFxuICBzZXRUcmFuc2FjdGlvbkZpbHRlcjogc3RyaW5nID0+IHZvaWQsXG4gIHNsaW0/OiBib29sZWFuLFxuICB0aXRsZTogc3RyaW5nLFxuICBhbGxUcmFuc2FjdGlvbnM6IEFycmF5PFRyYW5zYWN0aW9uPixcbiAgdHJhbnNhY3Rpb25zOiBBcnJheTxUcmFuc2FjdGlvbj4sXG4gIHRyYW5zYWN0aW9uQ291bnQ/OiBudW1iZXIsXG4gIGhpc3Rvcnk6IHsgcmVwbGFjZTogc3RyaW5nID0+IHZvaWQgfSxcbn07XG5cbmZ1bmN0aW9uIFRyYW5zYWN0aW9uTGlzdChwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVtcHR5TWVzc2FnZSxcbiAgICBzbGltLFxuICAgIGZpbHRlclNldHRpbmcsXG4gICAgdGl0bGUsXG4gICAgdHJhbnNhY3Rpb25zLFxuICAgIGxvYWRpbmcsXG4gICAgaGlzdG9yeSxcbiAgICB0cmFuc2FjdGlvbkNvdW50LFxuICAgIGFsbFRyYW5zYWN0aW9ucyxcbiAgfSA9IHByb3BzO1xuICAvLyBGbG93IG9mZmVycyBsaXR0bGUgc3VwcG9ydCBmb3IgT2JqZWN0LnZhbHVlcygpIHR5cGluZy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIyMjFcbiAgLy8gJEZsb3dGaXhNZVxuICBjb25zdCB0cmFuc2FjdGlvblR5cGVzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LnZhbHVlcyhUUkFOU0FDVElPTlMpO1xuXG4gIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmlsdGVyQ2hhbmdlZChldmVudDogU3ludGhldGljSW5wdXRFdmVudDwqPikge1xuICAgIHByb3BzLnNldFRyYW5zYWN0aW9uRmlsdGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaGlzdG9yeS5yZXBsYWNlKGAvJC8ke1BBR0VTLlRSQU5TQUNUSU9OU31gKTsgLy9cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJ0YWJsZV9faGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFibGVfX2hlYWRlci10ZXh0LS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImNhcmRfX3RpdGxlXCI+e3RpdGxlfTwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zLS1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxSZWZyZXNoVHJhbnNhY3Rpb25CdXR0b24gc2xpbT17c2xpbX0gLz5cbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgICB7IXNsaW0gJiYgKFxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpbGUtc29ydFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZpbHRlclNldHRpbmcgfHwgVFJBTlNBQ1RJT05TLkFMTH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsdGVyQ2hhbmdlZH1cbiAgICAgICAgICAgICAgICBwb3N0Zml4PXtcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgIGljb249e2ljb25zLkhFTFB9XG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS90cmFuc2FjdGlvbi10eXBlc1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfXygnSGVscCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dHJhbnNhY3Rpb25UeXBlcy5tYXAodHQgPT4gKFxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e3R0fSB2YWx1ZT17dHR9PlxuICAgICAgICAgICAgICAgICAgICB7X18oYCR7Y2FwaXRhbGl6ZSh0dCl9YCl9XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3NsaW0gJiYgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLlRSQU5TQUNUSU9OU31gfSBsYWJlbD17X18oJ0Z1bGwgSGlzdG9yeScpfSAvPn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgeygobG9hZGluZyAmJiAhdHJhbnNhY3Rpb25zLmxlbmd0aCkgfHwgIXRyYW5zYWN0aW9ucy5sZW5ndGgpICYmIChcbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cIm1haW4tLWVtcHR5IGVtcHR5XCI+e2xvYWRpbmcgPyBfXygnTG9hZGluZycpIDogZW1wdHlNZXNzYWdlIHx8IF9fKCdObyB0cmFuc2FjdGlvbnMuJyl9PC9oMj5cbiAgICAgICl9XG5cbiAgICAgIHshIXRyYW5zYWN0aW9ucyAmJiAhIXRyYW5zYWN0aW9ucy5sZW5ndGggJiYgPFRyYW5zYWN0aW9uTGlzdFRhYmxlIHRyYW5zYWN0aW9uTGlzdD17dHJhbnNhY3Rpb25zfSAvPn1cbiAgICAgIHshc2xpbSAmJiAhIXRyYW5zYWN0aW9uQ291bnQgJiYgKFxuICAgICAgICA8UGFnaW5hdGVcbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3BhZ2UgPT4gaGlzdG9yeS5yZXBsYWNlKGAvJC8ke1BBR0VTLlRSQU5TQUNUSU9OU30/cGFnZT0ke051bWJlcihwYWdlKX1gKX1cbiAgICAgICAgICB0b3RhbFBhZ2VzPXtNYXRoLmNlaWwodHJhbnNhY3Rpb25Db3VudCAvIFRYX0xJU1QuUEFHRV9TSVpFKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb25MaXN0O1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU5BO0FBY0E7QUFDQTtBQUFBO0FBQUE7QUFuQkE7QUF5QkE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUFBO0FBR0E7QUFBQTtBQUdBO0FBQUE7QUFEQTtBQUVBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/transactionList/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/transactionListRecent/index.js": -/*!******************************************************!*\ - !*** ../ui/component/transactionListRecent/index.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/transactionListRecent/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n transactions: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectLatestTransactions\"])(state),\n myClaims: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimsWithoutChannels\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchTransactions: function fetchTransactions(page, pageSize) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchTransactions\"])(page, pageSize));\n },\n fetchClaimListMine: function fetchClaimListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchClaimListMine\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFJlY2VudC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25MaXN0UmVjZW50L2luZGV4LmpzPzllN2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvRmV0Y2hUcmFuc2FjdGlvbnMsXG4gIG1ha2VTZWxlY3RMYXRlc3RUcmFuc2FjdGlvbnMsXG4gIGRvRmV0Y2hDbGFpbUxpc3RNaW5lLFxuICBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgVHJhbnNhY3Rpb25MaXN0UmVjZW50IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2FjdGlvbnM6IG1ha2VTZWxlY3RMYXRlc3RUcmFuc2FjdGlvbnMoc3RhdGUpLFxuICAgIG15Q2xhaW1zOiBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyhzdGF0ZSksXG4gIH07XG59O1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgZmV0Y2hUcmFuc2FjdGlvbnM6IChwYWdlLCBwYWdlU2l6ZSkgPT4gZGlzcGF0Y2goZG9GZXRjaFRyYW5zYWN0aW9ucyhwYWdlLCBwYWdlU2l6ZSkpLFxuICBmZXRjaENsYWltTGlzdE1pbmU6ICgpID0+IGRpc3BhdGNoKGRvRmV0Y2hDbGFpbUxpc3RNaW5lKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShUcmFuc2FjdGlvbkxpc3RSZWNlbnQpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/transactionListRecent/index.js\n"); - -/***/ }), - -/***/ "../ui/component/transactionListRecent/view.jsx": -/*!******************************************************!*\ - !*** ../ui/component/transactionListRecent/view.jsx ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_transactionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/transactionList */ \"../ui/component/transactionList/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nfunction TransactionListRecent(props) {\n var transactions = props.transactions,\n fetchTransactions = props.fetchTransactions,\n myClaims = props.myClaims,\n fetchClaimListMine = props.fetchClaimListMine;\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n fetchTransactions(1, lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"TX_LIST\"].LATEST_PAGE_SIZE);\n }, [fetchTransactions]);\n var myClaimsString = myClaims && myClaims.map(function (channel) {\n return channel.permanent_url;\n }).join(',');\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (myClaimsString === '') {\n fetchClaimListMine();\n }\n }, [myClaimsString, fetchClaimListMine]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_transactionList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n slim: true,\n title: __('Latest Transactions'),\n transactions: transactions,\n emptyMessage: __(\"Looks like you don't have any transactions.\")\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionListRecent);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFJlY2VudC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25MaXN0UmVjZW50L3ZpZXcuanN4Pzc2Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNhY3Rpb25MaXN0IGZyb20gJ2NvbXBvbmVudC90cmFuc2FjdGlvbkxpc3QnO1xuaW1wb3J0IHsgVFhfTElTVCB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG50eXBlIFByb3BzID0ge1xuICBmZXRjaFRyYW5zYWN0aW9uczogKG51bWJlciwgbnVtYmVyKSA9PiB2b2lkLFxuICBmZXRjaENsYWltTGlzdE1pbmU6ICgpID0+IHZvaWQsXG4gIGZldGNoaW5nVHJhbnNhY3Rpb25zOiBib29sZWFuLFxuICBoYXNUcmFuc2FjdGlvbnM6IGJvb2xlYW4sXG4gIHRyYW5zYWN0aW9uczogQXJyYXk8VHJhbnNhY3Rpb24+LFxuICBteUNsYWltczogP0FycmF5PFN0cmVhbUNsYWltPixcbn07XG5cbmZ1bmN0aW9uIFRyYW5zYWN0aW9uTGlzdFJlY2VudChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB0cmFuc2FjdGlvbnMsIGZldGNoVHJhbnNhY3Rpb25zLCBteUNsYWltcywgZmV0Y2hDbGFpbUxpc3RNaW5lIH0gPSBwcm9wcztcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoVHJhbnNhY3Rpb25zKDEsIFRYX0xJU1QuTEFURVNUX1BBR0VfU0laRSk7XG4gIH0sIFtmZXRjaFRyYW5zYWN0aW9uc10pO1xuXG4gIGNvbnN0IG15Q2xhaW1zU3RyaW5nID0gbXlDbGFpbXMgJiYgbXlDbGFpbXMubWFwKGNoYW5uZWwgPT4gY2hhbm5lbC5wZXJtYW5lbnRfdXJsKS5qb2luKCcsJyk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG15Q2xhaW1zU3RyaW5nID09PSAnJykge1xuICAgICAgZmV0Y2hDbGFpbUxpc3RNaW5lKCk7XG4gICAgfVxuICB9LCBbbXlDbGFpbXNTdHJpbmcsIGZldGNoQ2xhaW1MaXN0TWluZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY2FyZFwiPlxuICAgICAgPFRyYW5zYWN0aW9uTGlzdFxuICAgICAgICBzbGltXG4gICAgICAgIHRpdGxlPXtfXygnTGF0ZXN0IFRyYW5zYWN0aW9ucycpfVxuICAgICAgICB0cmFuc2FjdGlvbnM9e3RyYW5zYWN0aW9uc31cbiAgICAgICAgZW1wdHlNZXNzYWdlPXtfXyhcIkxvb2tzIGxpa2UgeW91IGRvbid0IGhhdmUgYW55IHRyYW5zYWN0aW9ucy5cIil9XG4gICAgICAvPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb25MaXN0UmVjZW50O1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/transactionListRecent/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/transactionListTable/index.js": -/*!*****************************************************!*\ - !*** ../ui/component/transactionListTable/index.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/transactionListTable/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimedRewardsByTransactionId\"])(state),\n mySupports: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectSupportsByOutpoint\"])(state),\n myClaims: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectAllMyClaimsByOutpoint\"])(state),\n filterSetting: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectTransactionListFilter\"])(state),\n loading: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectIsFetchingTransactions\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFRhYmxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC90cmFuc2FjdGlvbkxpc3RUYWJsZS9pbmRleC5qcz8wZDI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RDbGFpbWVkUmV3YXJkc0J5VHJhbnNhY3Rpb25JZCB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQge1xuICBzZWxlY3RBbGxNeUNsYWltc0J5T3V0cG9pbnQsXG4gIHNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludCxcbiAgc2VsZWN0VHJhbnNhY3Rpb25MaXN0RmlsdGVyLFxuICBzZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBUcmFuc2FjdGlvbkxpc3RUYWJsZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICByZXdhcmRzOiBzZWxlY3RDbGFpbWVkUmV3YXJkc0J5VHJhbnNhY3Rpb25JZChzdGF0ZSksXG4gIG15U3VwcG9ydHM6IHNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludChzdGF0ZSksXG4gIG15Q2xhaW1zOiBzZWxlY3RBbGxNeUNsYWltc0J5T3V0cG9pbnQoc3RhdGUpLFxuICBmaWx0ZXJTZXR0aW5nOiBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIoc3RhdGUpLFxuICBsb2FkaW5nOiBzZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3Blbk1vZGFsOiAobW9kYWwsIHByb3BzKSA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChtb2RhbCwgcHJvcHMpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVHJhbnNhY3Rpb25MaXN0VGFibGUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/transactionListTable/index.js\n"); - -/***/ }), - -/***/ "../ui/component/transactionListTable/internal/transaction-list-item.jsx": -/*!*******************************************************************************!*\ - !*** ../ui/component/transactionListTable/internal/transaction-list-item.jsx ***! - \*******************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_transaction_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/transaction_types */ \"../ui/constants/transaction_types.js\");\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_transaction_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/transaction-link */ \"../ui/component/common/transaction-link.jsx\");\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_dateTime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/dateTime */ \"../ui/component/dateTime/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_7__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\n\n\nvar TransactionListItem = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(TransactionListItem, _React$PureComponent);\n\n function TransactionListItem() {\n var _this;\n\n _classCallCheck(this, TransactionListItem);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(TransactionListItem).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"capitalize\", function (string) {\n return string && string.charAt(0).toUpperCase() + string.slice(1);\n });\n\n _assertThisInitialized(_this).abandonClaim = _this.abandonClaim.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(TransactionListItem, [{\n key: \"getLink\",\n value: function getLink(type) {\n if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_0__[\"TIP\"]) {\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"secondary\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"UNLOCK\"],\n onClick: this.abandonClaim,\n title: __('Unlock Tip')\n });\n }\n\n var abandonTitle = type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"] ? 'Abandon Support' : 'Abandon Claim';\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"secondary\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"DELETE\"],\n onClick: this.abandonClaim,\n title: __(abandonTitle)\n });\n }\n }, {\n key: \"abandonClaim\",\n value: function abandonClaim() {\n var _this$props$transacti = this.props.transaction,\n txid = _this$props$transacti.txid,\n nout = _this$props$transacti.nout;\n this.props.revokeClaim(txid, nout);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n reward = _this$props.reward,\n transaction = _this$props.transaction,\n isRevokeable = _this$props.isRevokeable;\n var amount = transaction.amount,\n claimId = transaction.claim_id,\n name = transaction.claim_name,\n date = transaction.date,\n fee = transaction.fee,\n txid = transaction.txid,\n type = transaction.type; // Ensure the claim name exists and is valid\n\n var uri;\n var claimName;\n\n try {\n if (name.startsWith('@')) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_7__[\"parseURI\"])(name);\n\n claimName = _parseURI.claimName;\n uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_7__[\"buildURI\"])({\n channelName: claimName,\n channelClaimId: claimId\n });\n } else {\n var _parseURI2 = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_7__[\"parseURI\"])(name);\n\n claimName = _parseURI2.claimName;\n uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_7__[\"buildURI\"])({\n streamName: claimName,\n streamClaimId: claimId\n });\n }\n } catch (e) {}\n\n var dateFormat = {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n };\n var forClaim = name && claimId;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, date ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n date: date,\n show: component_dateTime__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SHOW_DATE,\n formatOptions: dateFormat\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"table__item-label\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_dateTime__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n date: date,\n show: component_dateTime__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SHOW_TIME\n }))) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __('Pending'))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", {\n className: \"table__item--actionable\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, this.capitalize(type)), \" \", isRevokeable && this.getLink(type)), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, forClaim && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n navigate: uri,\n label: claimName,\n disabled: !date\n }), !forClaim && reward && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, reward.reward_title)), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_transaction_link__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n id: txid\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"td\", {\n className: \"table__item--align-right\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n showPlus: true,\n amount: amount,\n precision: 8\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"br\", null), fee !== 0 && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"table__item-label\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n fee: true,\n amount: fee,\n precision: 8\n }))));\n }\n }]);\n\n return TransactionListItem;\n}(react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionListItem);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFRhYmxlL2ludGVybmFsL3RyYW5zYWN0aW9uLWxpc3QtaXRlbS5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFRhYmxlL2ludGVybmFsL3RyYW5zYWN0aW9uLWxpc3QtaXRlbS5qc3g/NjU3NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgVFhOX1RZUEVTIGZyb20gJ2NvbnN0YW50cy90cmFuc2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b25UcmFuc2FjdGlvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL3RyYW5zYWN0aW9uLWxpbmsnO1xuaW1wb3J0IENyZWRpdEFtb3VudCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NyZWRpdC1hbW91bnQnO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gJ2NvbXBvbmVudC9kYXRlVGltZSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgYnVpbGRVUkksIHBhcnNlVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbixcbiAgcmV2b2tlQ2xhaW06IChzdHJpbmcsIG51bWJlcikgPT4gdm9pZCxcbiAgaXNSZXZva2VhYmxlOiBib29sZWFuLFxuICByZXdhcmQ6ID97XG4gICAgcmV3YXJkX3RpdGxlOiBzdHJpbmcsXG4gIH0sXG59O1xuXG5jbGFzcyBUcmFuc2FjdGlvbkxpc3RJdGVtIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgKHRoaXM6IGFueSkuYWJhbmRvbkNsYWltID0gdGhpcy5hYmFuZG9uQ2xhaW0uYmluZCh0aGlzKTtcbiAgfVxuXG4gIGdldExpbmsodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IFRYTl9UWVBFUy5USVApIHtcbiAgICAgIHJldHVybiA8QnV0dG9uIGJ1dHRvbj1cInNlY29uZGFyeVwiIGljb249e0lDT05TLlVOTE9DS30gb25DbGljaz17dGhpcy5hYmFuZG9uQ2xhaW19IHRpdGxlPXtfXygnVW5sb2NrIFRpcCcpfSAvPjtcbiAgICB9XG4gICAgY29uc3QgYWJhbmRvblRpdGxlID0gdHlwZSA9PT0gVFhOX1RZUEVTLlNVUFBPUlQgPyAnQWJhbmRvbiBTdXBwb3J0JyA6ICdBYmFuZG9uIENsYWltJztcbiAgICByZXR1cm4gPEJ1dHRvbiBidXR0b249XCJzZWNvbmRhcnlcIiBpY29uPXtJQ09OUy5ERUxFVEV9IG9uQ2xpY2s9e3RoaXMuYWJhbmRvbkNsYWltfSB0aXRsZT17X18oYWJhbmRvblRpdGxlKX0gLz47XG4gIH1cblxuICBhYmFuZG9uQ2xhaW0oKSB7XG4gICAgY29uc3QgeyB0eGlkLCBub3V0IH0gPSB0aGlzLnByb3BzLnRyYW5zYWN0aW9uO1xuXG4gICAgdGhpcy5wcm9wcy5yZXZva2VDbGFpbSh0eGlkLCBub3V0KTtcbiAgfVxuXG4gIGNhcGl0YWxpemUgPSAoc3RyaW5nOiA/c3RyaW5nKSA9PiBzdHJpbmcgJiYgc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHJld2FyZCwgdHJhbnNhY3Rpb24sIGlzUmV2b2tlYWJsZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGFtb3VudCwgY2xhaW1faWQ6IGNsYWltSWQsIGNsYWltX25hbWU6IG5hbWUsIGRhdGUsIGZlZSwgdHhpZCwgdHlwZSB9ID0gdHJhbnNhY3Rpb247XG5cbiAgICAvLyBFbnN1cmUgdGhlIGNsYWltIG5hbWUgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICAgIGxldCB1cmk7XG4gICAgbGV0IGNsYWltTmFtZTtcbiAgICB0cnkge1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgICh7IGNsYWltTmFtZSB9ID0gcGFyc2VVUkkobmFtZSkpO1xuICAgICAgICB1cmkgPSBidWlsZFVSSSh7IGNoYW5uZWxOYW1lOiBjbGFpbU5hbWUsIGNoYW5uZWxDbGFpbUlkOiBjbGFpbUlkIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHsgY2xhaW1OYW1lIH0gPSBwYXJzZVVSSShuYW1lKSk7XG4gICAgICAgIHVyaSA9IGJ1aWxkVVJJKHsgc3RyZWFtTmFtZTogY2xhaW1OYW1lLCBzdHJlYW1DbGFpbUlkOiBjbGFpbUlkIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZm9yQ2xhaW0gPSBuYW1lICYmIGNsYWltSWQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAge2RhdGUgPyAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8RGF0ZVRpbWUgZGF0ZT17ZGF0ZX0gc2hvdz17RGF0ZVRpbWUuU0hPV19EQVRFfSBmb3JtYXRPcHRpb25zPXtkYXRlRm9ybWF0fSAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYmxlX19pdGVtLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPERhdGVUaW1lIGRhdGU9e2RhdGV9IHNob3c9e0RhdGVUaW1lLlNIT1dfVElNRX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZW1wdHlcIj57X18oJ1BlbmRpbmcnKX08L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRhYmxlX19pdGVtLS1hY3Rpb25hYmxlXCI+XG4gICAgICAgICAgPHNwYW4+e3RoaXMuY2FwaXRhbGl6ZSh0eXBlKX08L3NwYW4+IHtpc1Jldm9rZWFibGUgJiYgdGhpcy5nZXRMaW5rKHR5cGUpfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAge2ZvckNsYWltICYmIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG5hdmlnYXRlPXt1cml9IGxhYmVsPXtjbGFpbU5hbWV9IGRpc2FibGVkPXshZGF0ZX0gLz59XG4gICAgICAgICAgeyFmb3JDbGFpbSAmJiByZXdhcmQgJiYgPHNwYW4+e3Jld2FyZC5yZXdhcmRfdGl0bGV9PC9zcGFuPn1cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPEJ1dHRvblRyYW5zYWN0aW9uIGlkPXt0eGlkfSAvPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGFibGVfX2l0ZW0tLWFsaWduLXJpZ2h0XCI+XG4gICAgICAgICAgPENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IHNob3dQbHVzIGFtb3VudD17YW1vdW50fSBwcmVjaXNpb249ezh9IC8+XG4gICAgICAgICAgPGJyIC8+XG5cbiAgICAgICAgICB7ZmVlICE9PSAwICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRhYmxlX19pdGVtLWxhYmVsXCI+XG4gICAgICAgICAgICAgIDxDcmVkaXRBbW91bnQgYmFkZ2U9e2ZhbHNlfSBmZWUgYW1vdW50PXtmZWV9IHByZWNpc2lvbj17OH0gLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zYWN0aW9uTGlzdEl0ZW07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBb0JBO0FBcEJBO0FBQ0E7QUFFQTtBQUhBO0FBSUE7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7OztBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUVBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUdBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTs7OztBQXJGQTtBQUNBO0FBdUZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/transactionListTable/internal/transaction-list-item.jsx\n"); - -/***/ }), - -/***/ "../ui/component/transactionListTable/view.jsx": -/*!*****************************************************!*\ - !*** ../ui/component/transactionListTable/view.jsx ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _internal_transaction_list_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/transaction-list-item */ \"../ui/component/transactionListTable/internal/transaction-list-item.jsx\");\n\n\n\n\nfunction TransactionListTable(props) {\n var emptyMessage = props.emptyMessage,\n rewards = props.rewards,\n loading = props.loading,\n transactionList = props.transactionList;\n\n function isRevokeable(txid, nout) {\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n var mySupports = props.mySupports,\n myClaims = props.myClaims;\n return !!mySupports[outpoint] || myClaims.has(outpoint);\n }\n\n function revokeClaim(txid, nout) {\n props.openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CONFIRM_CLAIM_REVOKE\"], {\n txid: txid,\n nout: nout\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, !loading && !transactionList.length && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"h2\", {\n className: \"main--empty empty\"\n }, emptyMessage || __('No transactions.')), !!transactionList.length && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"table__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"table\", {\n className: \"table table--transactions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"thead\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"th\", null, __('Date')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"th\", null, __('Type'), \" \"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"th\", null, __('Details'), \" \"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"th\", null, __('Transaction')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"th\", {\n className: \"table__item--align-right\"\n }, __('Amount')))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"tbody\", null, transactionList.map(function (t) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_internal_transaction_list_item__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"\".concat(t.txid, \":\").concat(t.nout),\n transaction: t,\n reward: rewards && rewards[t.txid],\n isRevokeable: isRevokeable(t.txid, t.nout),\n revokeClaim: revokeClaim\n });\n })))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionListTable);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdFRhYmxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC90cmFuc2FjdGlvbkxpc3RUYWJsZS92aWV3LmpzeD8zOTI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNhY3Rpb25MaXN0SXRlbSBmcm9tICcuL2ludGVybmFsL3RyYW5zYWN0aW9uLWxpc3QtaXRlbSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVtcHR5TWVzc2FnZTogP3N0cmluZyxcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgbXlTdXBwb3J0czoge30sXG4gIG15Q2xhaW1zOiBhbnksXG4gIG9wZW5Nb2RhbDogKGlkOiBzdHJpbmcsIHsgbm91dDogbnVtYmVyLCB0eGlkOiBzdHJpbmcgfSkgPT4gdm9pZCxcbiAgcmV3YXJkczoge30sXG4gIHRyYW5zYWN0aW9uTGlzdDogQXJyYXk8YW55Pixcbn07XG5cbmZ1bmN0aW9uIFRyYW5zYWN0aW9uTGlzdFRhYmxlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGVtcHR5TWVzc2FnZSwgcmV3YXJkcywgbG9hZGluZywgdHJhbnNhY3Rpb25MaXN0IH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiBpc1Jldm9rZWFibGUodHhpZDogc3RyaW5nLCBub3V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuICAgIGNvbnN0IHsgbXlTdXBwb3J0cywgbXlDbGFpbXMgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuICEhbXlTdXBwb3J0c1tvdXRwb2ludF0gfHwgbXlDbGFpbXMuaGFzKG91dHBvaW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJldm9rZUNsYWltKHR4aWQ6IHN0cmluZywgbm91dDogbnVtYmVyKSB7XG4gICAgcHJvcHMub3Blbk1vZGFsKE1PREFMUy5DT05GSVJNX0NMQUlNX1JFVk9LRSwgeyB0eGlkLCBub3V0IH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7IWxvYWRpbmcgJiYgIXRyYW5zYWN0aW9uTGlzdC5sZW5ndGggJiYgKFxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwibWFpbi0tZW1wdHkgZW1wdHlcIj57ZW1wdHlNZXNzYWdlIHx8IF9fKCdObyB0cmFuc2FjdGlvbnMuJyl9PC9oMj5cbiAgICAgICl9XG4gICAgICB7ISF0cmFuc2FjdGlvbkxpc3QubGVuZ3RoICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJsZV9fd3JhcHBlclwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS0tdHJhbnNhY3Rpb25zXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGg+e19fKCdEYXRlJyl9PC90aD5cbiAgICAgICAgICAgICAgICA8dGg+e19fKCdUeXBlJyl9IDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoPntfXygnRGV0YWlscycpfSA8L3RoPlxuICAgICAgICAgICAgICAgIDx0aD57X18oJ1RyYW5zYWN0aW9uJyl9PC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwidGFibGVfX2l0ZW0tLWFsaWduLXJpZ2h0XCI+e19fKCdBbW91bnQnKX08L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAge3RyYW5zYWN0aW9uTGlzdC5tYXAodCA9PiAoXG4gICAgICAgICAgICAgICAgPFRyYW5zYWN0aW9uTGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAgIGtleT17YCR7dC50eGlkfToke3Qubm91dH1gfVxuICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb249e3R9XG4gICAgICAgICAgICAgICAgICByZXdhcmQ9e3Jld2FyZHMgJiYgcmV3YXJkc1t0LnR4aWRdfVxuICAgICAgICAgICAgICAgICAgaXNSZXZva2VhYmxlPXtpc1Jldm9rZWFibGUodC50eGlkLCB0Lm5vdXQpfVxuICAgICAgICAgICAgICAgICAgcmV2b2tlQ2xhaW09e3Jldm9rZUNsYWltfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb25MaXN0VGFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQU9BO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQW5CQTtBQWlDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/transactionListTable/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/transactionRefreshButton/index.js": -/*!*********************************************************!*\ - !*** ../ui/component/transactionRefreshButton/index.js ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/transactionRefreshButton/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n fetchingTransactions: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsFetchingTransactions\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchTransactions: function fetchTransactions(page, pageSize) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchTransactions\"])(page, pageSize));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uUmVmcmVzaEJ1dHRvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25SZWZyZXNoQnV0dG9uL2luZGV4LmpzPzlhMDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvRmV0Y2hUcmFuc2FjdGlvbnMsIHNlbGVjdElzRmV0Y2hpbmdUcmFuc2FjdGlvbnMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBSZWZyZXNoVHJhbnNhY3Rpb25CdXR0b24gZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZmV0Y2hpbmdUcmFuc2FjdGlvbnM6IHNlbGVjdElzRmV0Y2hpbmdUcmFuc2FjdGlvbnMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBmZXRjaFRyYW5zYWN0aW9uczogKHBhZ2UsIHBhZ2VTaXplKSA9PiBkaXNwYXRjaChkb0ZldGNoVHJhbnNhY3Rpb25zKHBhZ2UsIHBhZ2VTaXplKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFJlZnJlc2hUcmFuc2FjdGlvbkJ1dHRvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/transactionRefreshButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/transactionRefreshButton/view.jsx": -/*!*********************************************************!*\ - !*** ../ui/component/transactionRefreshButton/view.jsx ***! - \*********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar TransactionRefreshButton = /*#__PURE__*/function (_PureComponent) {\n _inherits(TransactionRefreshButton, _PureComponent);\n\n function TransactionRefreshButton() {\n var _this;\n\n _classCallCheck(this, TransactionRefreshButton);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(TransactionRefreshButton).call(this));\n _this.state = {\n label: __('Refresh'),\n disabled: false\n };\n _assertThisInitialized(_this).handleClick = _this.handleClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(TransactionRefreshButton, [{\n key: \"handleClick\",\n value: function handleClick() {\n var _this2 = this;\n\n var _this$props = this.props,\n fetchTransactions = _this$props.fetchTransactions,\n slim = _this$props.slim; // The fetchTransactions call will be super fast most of the time.\n // Instead of showing a loading spinner for 100ms, change the label and show as \"Refreshed!\"\n\n if (slim) {\n fetchTransactions(1, lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"TX_LIST\"].LATEST_PAGE_SIZE);\n } else {\n fetchTransactions();\n }\n\n this.setState({\n label: __('Refreshed!'),\n disabled: true\n });\n setTimeout(function () {\n _this2.setState({\n label: __('Refresh'),\n disabled: false\n });\n }, 2000);\n }\n }, {\n key: \"render\",\n value: function render() {\n var fetchingTransactions = this.props.fetchingTransactions;\n var _this$state = this.state,\n label = _this$state.label,\n disabled = _this$state.disabled;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"secondary\",\n label: label,\n onClick: this.handleClick,\n disabled: disabled || fetchingTransactions\n });\n }\n }]);\n\n return TransactionRefreshButton;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionRefreshButton);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3RyYW5zYWN0aW9uUmVmcmVzaEJ1dHRvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdHJhbnNhY3Rpb25SZWZyZXNoQnV0dG9uL3ZpZXcuanN4PzYyMDEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IFRYX0xJU1QgfSBmcm9tICdsYnJ5LXJlZHV4JztcblxudHlwZSBQcm9wcyA9IHtcbiAgZmV0Y2hUcmFuc2FjdGlvbnM6ICg/bnVtYmVyLCA/bnVtYmVyKSA9PiB2b2lkLFxuICBmZXRjaGluZ1RyYW5zYWN0aW9uczogYm9vbGVhbixcbiAgc2xpbTogYm9vbGVhbixcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRpc2FibGVkOiBib29sZWFuLFxufTtcblxuY2xhc3MgVHJhbnNhY3Rpb25SZWZyZXNoQnV0dG9uIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7IGxhYmVsOiBfXygnUmVmcmVzaCcpLCBkaXNhYmxlZDogZmFsc2UgfTtcblxuICAgICh0aGlzOiBhbnkpLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soKSB7XG4gICAgY29uc3QgeyBmZXRjaFRyYW5zYWN0aW9ucywgc2xpbSB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFRoZSBmZXRjaFRyYW5zYWN0aW9ucyBjYWxsIHdpbGwgYmUgc3VwZXIgZmFzdCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgIC8vIEluc3RlYWQgb2Ygc2hvd2luZyBhIGxvYWRpbmcgc3Bpbm5lciBmb3IgMTAwbXMsIGNoYW5nZSB0aGUgbGFiZWwgYW5kIHNob3cgYXMgXCJSZWZyZXNoZWQhXCJcbiAgICBpZiAoc2xpbSkge1xuICAgICAgZmV0Y2hUcmFuc2FjdGlvbnMoMSwgVFhfTElTVC5MQVRFU1RfUEFHRV9TSVpFKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmV0Y2hUcmFuc2FjdGlvbnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgbGFiZWw6IF9fKCdSZWZyZXNoZWQhJyksIGRpc2FibGVkOiB0cnVlIH0pO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGFiZWw6IF9fKCdSZWZyZXNoJyksIGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICB9LCAyMDAwKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGZldGNoaW5nVHJhbnNhY3Rpb25zIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbGFiZWwsIGRpc2FibGVkIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8QnV0dG9uIGJ1dHRvbj1cInNlY29uZGFyeVwiIGxhYmVsPXtsYWJlbH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGZldGNoaW5nVHJhbnNhY3Rpb25zfSAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb25SZWZyZXNoQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUxBO0FBTUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTs7OztBQWpDQTtBQUNBO0FBbUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/transactionRefreshButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/uriIndicator/index.js": -/*!*********************************************!*\ - !*** ../ui/component/uriIndicator/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/uriIndicator/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectIsUriResolving\"])(props.uri)(state),\n uri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"normalizeURI\"])(props.uri)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VyaUluZGljYXRvci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXJpSW5kaWNhdG9yL2luZGV4LmpzPzNmZjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG5vcm1hbGl6ZVVSSSwgZG9SZXNvbHZlVXJpLCBtYWtlU2VsZWN0SXNVcmlSZXNvbHZpbmcsIG1ha2VTZWxlY3RDbGFpbUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFVyaUluZGljYXRvciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBpc1Jlc29sdmluZ1VyaTogbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nKHByb3BzLnVyaSkoc3RhdGUpLFxuICB1cmk6IG5vcm1hbGl6ZVVSSShwcm9wcy51cmkpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICByZXNvbHZlVXJpOiB1cmkgPT4gZGlzcGF0Y2goZG9SZXNvbHZlVXJpKHVyaSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShVcmlJbmRpY2F0b3IpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/uriIndicator/index.js\n"); - -/***/ }), - -/***/ "../ui/component/uriIndicator/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/uriIndicator/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/tooltip */ \"../ui/component/common/tooltip.jsx\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar UriIndicator = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(UriIndicator, _React$PureComponent);\n\n function UriIndicator() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, UriIndicator);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(UriIndicator)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"resolve\", function (props) {\n var isResolvingUri = props.isResolvingUri,\n resolveUri = props.resolveUri,\n claim = props.claim,\n uri = props.uri;\n\n if (!isResolvingUri && claim === undefined && uri) {\n resolveUri(uri);\n }\n });\n\n return _this;\n }\n\n _createClass(UriIndicator, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.resolve(this.props);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.resolve(this.props);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n link = _this$props.link,\n isResolvingUri = _this$props.isResolvingUri,\n claim = _this$props.claim,\n addTooltip = _this$props.addTooltip,\n children = _this$props.children,\n inline = _this$props.inline,\n _this$props$hideAnony = _this$props.hideAnonymous,\n hideAnonymous = _this$props$hideAnony === void 0 ? false : _this$props$hideAnony;\n\n if (!claim) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"empty\"\n }, isResolvingUri ? 'Validating...' : 'Unused');\n }\n\n var isChannelClaim = claim.value_type === 'channel';\n\n if (!claim.signing_channel && !isChannelClaim) {\n if (hideAnonymous) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('channel-name', {\n 'channel-name--inline': inline\n })\n }, \"Anonymous\");\n }\n\n var channelClaim = isChannelClaim ? claim : claim.signing_channel;\n\n if (channelClaim) {\n var name = channelClaim.name;\n var channelLink = link ? channelClaim.canonical_url || channelClaim.permanent_url : false;\n var inner = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('channel-name', {\n 'channel-name--inline': inline\n })\n }, name);\n\n if (!channelLink) {\n return inner;\n }\n\n if (children) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n navigate: channelLink\n }, children);\n } else {\n var Wrapper = addTooltip ? function (_ref) {\n var children = _ref.children;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_tooltip__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: channelLink,\n type: \"tooltip\",\n placeholder: false\n })\n }, children);\n } : 'span';\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"button--uri-indicator\",\n navigate: channelLink\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Wrapper, null, inner));\n }\n } else {\n return null;\n }\n }\n }]);\n\n return UriIndicator;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n_defineProperty(UriIndicator, \"defaultProps\", {\n addTooltip: true\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UriIndicator);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VyaUluZGljYXRvci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXJpSW5kaWNhdG9yL3ZpZXcuanN4P2RjZGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdjb21wb25lbnQvY29tbW9uL3Rvb2x0aXAnO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcblxudHlwZSBQcm9wcyA9IHtcbiAgaXNSZXNvbHZpbmdVcmk6IGJvb2xlYW4sXG4gIGNoYW5uZWxVcmk6ID9zdHJpbmcsXG4gIGxpbms6ID9ib29sZWFuLFxuICBjbGFpbTogP0NsYWltLFxuICBhZGRUb29sdGlwOiBib29sZWFuLFxuICBoaWRlQW5vbnltb3VzOiBib29sZWFuLFxuICAvLyBMaW50IHRoaW5rcyB3ZSBhcmVuJ3QgdXNpbmcgdGhlc2UsIGV2ZW4gdGhvdWdoIHdlIGFyZS5cbiAgLy8gUG9zc2libHkgYmVjYXVzZSB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBpcyBhbiBhcnJvdyBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCBpbiBwcm9wcz9cbiAgcmVzb2x2ZVVyaTogc3RyaW5nID0+IHZvaWQsXG4gIHVyaTogc3RyaW5nLFxuICAvLyB0byBhbGxvdyBmb3Igb3RoZXIgZWxlbWVudHMgdG8gYmUgbmVzdGVkIHdpdGhpbiB0aGUgVXJpSW5kaWNhdG9yXG4gIGNoaWxkcmVuOiA/Tm9kZSxcbiAgaW5saW5lOiBib29sZWFuLFxufTtcblxuY2xhc3MgVXJpSW5kaWNhdG9yIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGFkZFRvb2x0aXA6IHRydWUsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZXNvbHZlKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMucmVzb2x2ZSh0aGlzLnByb3BzKTtcbiAgfVxuXG4gIHJlc29sdmUgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBpc1Jlc29sdmluZ1VyaSwgcmVzb2x2ZVVyaSwgY2xhaW0sIHVyaSB9ID0gcHJvcHM7XG5cbiAgICBpZiAoIWlzUmVzb2x2aW5nVXJpICYmIGNsYWltID09PSB1bmRlZmluZWQgJiYgdXJpKSB7XG4gICAgICByZXNvbHZlVXJpKHVyaSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGxpbmssIGlzUmVzb2x2aW5nVXJpLCBjbGFpbSwgYWRkVG9vbHRpcCwgY2hpbGRyZW4sIGlubGluZSwgaGlkZUFub255bW91cyA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCFjbGFpbSkge1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImVtcHR5XCI+e2lzUmVzb2x2aW5nVXJpID8gJ1ZhbGlkYXRpbmcuLi4nIDogJ1VudXNlZCd9PC9zcGFuPjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NoYW5uZWxDbGFpbSA9IGNsYWltLnZhbHVlX3R5cGUgPT09ICdjaGFubmVsJztcblxuICAgIGlmICghY2xhaW0uc2lnbmluZ19jaGFubmVsICYmICFpc0NoYW5uZWxDbGFpbSkge1xuICAgICAgaWYgKGhpZGVBbm9ueW1vdXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2NoYW5uZWwtbmFtZScsIHsgJ2NoYW5uZWwtbmFtZS0taW5saW5lJzogaW5saW5lIH0pfT5Bbm9ueW1vdXM8L3NwYW4+O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxDbGFpbSA9IGlzQ2hhbm5lbENsYWltID8gY2xhaW0gOiBjbGFpbS5zaWduaW5nX2NoYW5uZWw7XG5cbiAgICBpZiAoY2hhbm5lbENsYWltKSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGNoYW5uZWxDbGFpbTtcbiAgICAgIGNvbnN0IGNoYW5uZWxMaW5rID0gbGluayA/IGNoYW5uZWxDbGFpbS5jYW5vbmljYWxfdXJsIHx8IGNoYW5uZWxDbGFpbS5wZXJtYW5lbnRfdXJsIDogZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlubmVyID0gPHNwYW4gY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjaGFubmVsLW5hbWUnLCB7ICdjaGFubmVsLW5hbWUtLWlubGluZSc6IGlubGluZSB9KX0+e25hbWV9PC9zcGFuPjtcblxuICAgICAgaWYgKCFjaGFubmVsTGluaykge1xuICAgICAgICByZXR1cm4gaW5uZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4gPEJ1dHRvbiBuYXZpZ2F0ZT17Y2hhbm5lbExpbmt9PntjaGlsZHJlbn08L0J1dHRvbj47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBXcmFwcGVyID0gYWRkVG9vbHRpcFxuICAgICAgICAgID8gKHsgY2hpbGRyZW4gfSkgPT4gKFxuICAgICAgICAgICAgICA8VG9vbHRpcCBsYWJlbD17PENsYWltUHJldmlldyB1cmk9e2NoYW5uZWxMaW5rfSB0eXBlPVwidG9vbHRpcFwiIHBsYWNlaG9sZGVyPXtmYWxzZX0gLz59PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogJ3NwYW4nO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnV0dG9uLS11cmktaW5kaWNhdG9yXCIgbmF2aWdhdGU9e2NoYW5uZWxMaW5rfT5cbiAgICAgICAgICAgIDxXcmFwcGVyPntpbm5lcn08L1dyYXBwZXI+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBVcmlJbmRpY2F0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTs7Ozs7Ozs7Ozs7Ozs7OztBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFiQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUlBO0FBekJBO0FBMkJBO0FBQ0E7QUFDQTs7OztBQXJFQTtBQUNBO0FBREE7QUFFQTtBQURBO0FBQ0E7QUFzRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/uriIndicator/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userChannelFollowIntro/index.js": -/*!*******************************************************!*\ - !*** ../ui/component/userChannelFollowIntro/index.js ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/userChannelFollowIntro/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectSubscriptions\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n channelSubscribe: function channelSubscribe(uri) {\n return dispatch(Object(redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"doChannelSubscribe\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJDaGFubmVsRm9sbG93SW50cm8vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJDaGFubmVsRm9sbG93SW50cm8vaW5kZXguanM/MWExNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0Rm9sbG93ZWRUYWdzIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RTdWJzY3JpcHRpb25zIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgZG9DaGFubmVsU3Vic2NyaWJlIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCBVc2VyQ2hhbm5lbEZvbGxvd0ludHJvIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbiAgc3Vic2NyaWJlZENoYW5uZWxzOiBzZWxlY3RTdWJzY3JpcHRpb25zKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2hhbm5lbFN1YnNjcmliZTogdXJpID0+IGRpc3BhdGNoKGRvQ2hhbm5lbFN1YnNjcmliZSh1cmkpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlckNoYW5uZWxGb2xsb3dJbnRybyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userChannelFollowIntro/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userChannelFollowIntro/view.jsx": -/*!*******************************************************!*\ - !*** ../ui/component/userChannelFollowIntro/view.jsx ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form_components_form__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/form-components/form */ \"../ui/component/common/form-components/form.jsx\");\n\n\n\n\n\n\n\nvar LBRYURI = 'lbry://@lbry#3fda836a92faaceedfe398225fb9b2ee2ed1f01a';\n\nfunction UserChannelFollowIntro(props) {\n var subscribedChannels = props.subscribedChannels,\n channelSubscribe = props.channelSubscribe,\n onContinue = props.onContinue,\n onBack = props.onBack;\n var followingCount = subscribedChannels && subscribedChannels.length || 0; // subscribe to lbry\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n channelSubscribe({\n channelName: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"parseURI\"])(LBRYURI).claimName,\n uri: LBRYURI\n });\n }, []);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Find Channels to Follow')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('LBRY works better if you find and follow at least 5 creators you like. You can also block channels you never want to see.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form__WEBPACK_IMPORTED_MODULE_6__[\"Form\"], {\n onSubmit: onContinue,\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"secondary\",\n onClick: onBack,\n label: __('Back')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"primary\",\n type: \"Submit\",\n onClick: onContinue,\n label: __('Continue'),\n disabled: subscribedChannels.length < 2\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n defaultOrderBy: constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_TOP\"],\n defaultFreshness: constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_ALL\"],\n claimType: \"channel\",\n defaultTags: constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"TAGS_FOLLOWED\"]\n }), followingCount > 0 && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n type: \"helpful\",\n message: followingCount === 1 ? __('Nice! You are currently following %followingCount% creator', {\n followingCount: followingCount\n }) : __('Nice! You are currently following %followingCount% creators', {\n followingCount: followingCount\n }),\n actionText: __('Continue'),\n onClick: onContinue\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserChannelFollowIntro);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJDaGFubmVsRm9sbG93SW50cm8vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJDaGFubmVsRm9sbG93SW50cm8vdmlldy5qc3g/NjA4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDbGFpbUxpc3REaXNjb3ZlciBmcm9tICdjb21wb25lbnQvY2xhaW1MaXN0RGlzY292ZXInO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgTmFnIGZyb20gJ2NvbXBvbmVudC9jb21tb24vbmFnJztcbmltcG9ydCB7IHBhcnNlVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybS1jb21wb25lbnRzL2Zvcm0nO1xuXG50eXBlIFByb3BzID0ge1xuICBzdWJzY3JpYmVkQ2hhbm5lbHM6IEFycmF5PFN1YnNjcmlwdGlvbj4sXG4gIG9uQ29udGludWU6ICgpID0+IHZvaWQsXG4gIG9uQmFjazogKCkgPT4gdm9pZCxcbiAgY2hhbm5lbFN1YnNjcmliZTogKHN1YjogU3Vic2NyaXB0aW9uKSA9PiB2b2lkLFxufTtcblxuY29uc3QgTEJSWVVSSSA9ICdsYnJ5Oi8vQGxicnkjM2ZkYTgzNmE5MmZhYWNlZWRmZTM5ODIyNWZiOWIyZWUyZWQxZjAxYSc7XG5mdW5jdGlvbiBVc2VyQ2hhbm5lbEZvbGxvd0ludHJvKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHN1YnNjcmliZWRDaGFubmVscywgY2hhbm5lbFN1YnNjcmliZSwgb25Db250aW51ZSwgb25CYWNrIH0gPSBwcm9wcztcbiAgY29uc3QgZm9sbG93aW5nQ291bnQgPSAoc3Vic2NyaWJlZENoYW5uZWxzICYmIHN1YnNjcmliZWRDaGFubmVscy5sZW5ndGgpIHx8IDA7XG5cbiAgLy8gc3Vic2NyaWJlIHRvIGxicnlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGFubmVsU3Vic2NyaWJlKHtcbiAgICAgIGNoYW5uZWxOYW1lOiBwYXJzZVVSSShMQlJZVVJJKS5jbGFpbU5hbWUsXG4gICAgICB1cmk6IExCUllVUkksXG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oJ0ZpbmQgQ2hhbm5lbHMgdG8gRm9sbG93Jyl9PC9oMT5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInNlY3Rpb25fX3N1YnRpdGxlXCI+XG4gICAgICAgIHtfXyhcbiAgICAgICAgICAnTEJSWSB3b3JrcyBiZXR0ZXIgaWYgeW91IGZpbmQgYW5kIGZvbGxvdyBhdCBsZWFzdCA1IGNyZWF0b3JzIHlvdSBsaWtlLiBZb3UgY2FuIGFsc28gYmxvY2sgY2hhbm5lbHMgeW91IG5ldmVyIHdhbnQgdG8gc2VlLidcbiAgICAgICAgKX1cbiAgICAgIDwvcD5cbiAgICAgIDxGb3JtIG9uU3VibWl0PXtvbkNvbnRpbnVlfSBjbGFzc05hbWU9XCJzZWN0aW9uX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwic2Vjb25kYXJ5XCIgb25DbGljaz17b25CYWNrfSBsYWJlbD17X18oJ0JhY2snKX0gLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIHR5cGU9XCJTdWJtaXRcIlxuICAgICAgICAgICAgb25DbGljaz17b25Db250aW51ZX1cbiAgICAgICAgICAgIGxhYmVsPXtfXygnQ29udGludWUnKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtzdWJzY3JpYmVkQ2hhbm5lbHMubGVuZ3RoIDwgMn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRm9ybT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keVwiPlxuICAgICAgICA8Q2xhaW1MaXN0RGlzY292ZXJcbiAgICAgICAgICBkZWZhdWx0T3JkZXJCeT17Q1MuT1JERVJfQllfVE9QfVxuICAgICAgICAgIGRlZmF1bHRGcmVzaG5lc3M9e0NTLkZSRVNIX0FMTH1cbiAgICAgICAgICBjbGFpbVR5cGU9XCJjaGFubmVsXCJcbiAgICAgICAgICBkZWZhdWx0VGFncz17Q1MuVEFHU19GT0xMT1dFRH1cbiAgICAgICAgLz5cbiAgICAgICAge2ZvbGxvd2luZ0NvdW50ID4gMCAmJiAoXG4gICAgICAgICAgPE5hZ1xuICAgICAgICAgICAgdHlwZT1cImhlbHBmdWxcIlxuICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgIGZvbGxvd2luZ0NvdW50ID09PSAxXG4gICAgICAgICAgICAgICAgPyBfXygnTmljZSEgWW91IGFyZSBjdXJyZW50bHkgZm9sbG93aW5nICVmb2xsb3dpbmdDb3VudCUgY3JlYXRvcicsIHsgZm9sbG93aW5nQ291bnQgfSlcbiAgICAgICAgICAgICAgICA6IF9fKCdOaWNlISBZb3UgYXJlIGN1cnJlbnRseSBmb2xsb3dpbmcgJWZvbGxvd2luZ0NvdW50JSBjcmVhdG9ycycsIHsgZm9sbG93aW5nQ291bnQgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvblRleHQ9e19fKCdDb250aW51ZScpfVxuICAgICAgICAgICAgb25DbGljaz17b25Db250aW51ZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlckNoYW5uZWxGb2xsb3dJbnRybztcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU9BO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFTQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFSQTtBQWNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userChannelFollowIntro/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userEmailNew/index.js": -/*!*********************************************!*\ - !*** ../ui/component/userEmailNew/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/component/userEmailNew/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectEmailNewIsPending\"])(state),\n errorMessage: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectEmailNewErrorMessage\"])(state),\n syncEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"])(state),\n daemonSettings: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectDaemonSettings\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n addUserEmail: function addUserEmail(email) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doUserEmailNew\"])(email));\n },\n setSync: function setSync(value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__[\"doSetClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"], value));\n },\n setShareDiagnosticData: function setShareDiagnosticData(shouldShareData) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__[\"doSetDaemonSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"DAEMON_SETTINGS\"].SHARE_USAGE_DATA, shouldShareData));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJFbWFpbE5ldy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlckVtYWlsTmV3L2luZGV4LmpzPzE5NDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RFbWFpbE5ld0lzUGVuZGluZywgc2VsZWN0RW1haWxOZXdFcnJvck1lc3NhZ2UsIGRvVXNlckVtYWlsTmV3IH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBEQUVNT05fU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGRvU2V0Q2xpZW50U2V0dGluZywgZG9TZXREYWVtb25TZXR0aW5nIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZywgc2VsZWN0RGFlbW9uU2V0dGluZ3MgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IFVzZXJFbWFpbE5ldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBpc1BlbmRpbmc6IHNlbGVjdEVtYWlsTmV3SXNQZW5kaW5nKHN0YXRlKSxcbiAgZXJyb3JNZXNzYWdlOiBzZWxlY3RFbWFpbE5ld0Vycm9yTWVzc2FnZShzdGF0ZSksXG4gIHN5bmNFbmFibGVkOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5FTkFCTEVfU1lOQykoc3RhdGUpLFxuICBkYWVtb25TZXR0aW5nczogc2VsZWN0RGFlbW9uU2V0dGluZ3Moc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBhZGRVc2VyRW1haWw6IGVtYWlsID0+IGRpc3BhdGNoKGRvVXNlckVtYWlsTmV3KGVtYWlsKSksXG4gIHNldFN5bmM6IHZhbHVlID0+IGRpc3BhdGNoKGRvU2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5FTkFCTEVfU1lOQywgdmFsdWUpKSxcbiAgc2V0U2hhcmVEaWFnbm9zdGljRGF0YTogc2hvdWxkU2hhcmVEYXRhID0+XG4gICAgZGlzcGF0Y2goZG9TZXREYWVtb25TZXR0aW5nKERBRU1PTl9TRVRUSU5HUy5TSEFSRV9VU0FHRV9EQVRBLCBzaG91bGRTaGFyZURhdGEpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlckVtYWlsTmV3KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userEmailNew/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userEmailNew/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/userEmailNew/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var constants_email__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/email */ \"../ui/constants/email.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\nfunction UserEmailNew(props) {\n var errorMessage = props.errorMessage,\n isPending = props.isPending,\n addUserEmail = props.addUserEmail,\n setSync = props.setSync,\n daemonSettings = props.daemonSettings,\n setShareDiagnosticData = props.setShareDiagnosticData;\n var shareUsageData = daemonSettings.share_usage_data;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n newEmail = _useState2[0],\n setEmail = _useState2[1];\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n localShareUsageData = _React$useState2[0],\n setLocalShareUsageData = _React$useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(true),\n _useState4 = _slicedToArray(_useState3, 2),\n formSyncEnabled = _useState4[0],\n setFormSyncEnabled = _useState4[1];\n\n var valid = newEmail.match(constants_email__WEBPACK_IMPORTED_MODULE_4__[\"EMAIL_REGEX\"]);\n\n function handleUsageDataChange() {\n setLocalShareUsageData(!localShareUsageData);\n }\n\n function handleSubmit() {\n setSync(formSyncEnabled);\n addUserEmail(newEmail);\n analytics__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emailProvidedEvent();\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Sign In to lbry.tv')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('Create a new account or sign in.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: handleSubmit,\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: true,\n placeholder: __('hotstuff_96@hotmail.com'),\n type: \"email\",\n name: \"sign_up_email\",\n label: __('Email'),\n value: newEmail,\n error: errorMessage,\n onChange: function onChange(e) {\n return setEmail(e.target.value);\n }\n }), false && false, !shareUsageData && !true && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"checkbox\",\n name: \"share_data_checkbox\",\n checked: localShareUsageData,\n onChange: handleUsageDataChange,\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('Share usage data with LBRY inc.'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/privacy-and-data\",\n label: __('Learn More')\n }), !localShareUsageData && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, \" (\", __('Required'), \")\"))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n label: __('Continue'),\n disabled: !newEmail || !valid || false && false || isPending\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n tokens: {\n terms: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tabIndex: \"2\",\n button: \"link\",\n href: \"https://www.lbry.com/termsofservice\",\n label: __('Terms of Service')\n })\n }\n }, \"By continuing, I agree to the %terms% and confirm I am over the age of 13.\"))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserEmailNew);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJFbWFpbE5ldy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlckVtYWlsTmV3L3ZpZXcuanN4PzFiNDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IGFuYWx5dGljcyBmcm9tICdhbmFseXRpY3MnO1xuaW1wb3J0IHsgRU1BSUxfUkVHRVggfSBmcm9tICdjb25zdGFudHMvZW1haWwnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVycm9yTWVzc2FnZTogP3N0cmluZyxcbiAgaXNQZW5kaW5nOiBib29sZWFuLFxuICBhZGRVc2VyRW1haWw6IHN0cmluZyA9PiB2b2lkLFxuICBzeW5jRW5hYmxlZDogYm9vbGVhbixcbiAgc2V0U3luYzogYm9vbGVhbiA9PiB2b2lkLFxuICBiYWxhbmNlOiBudW1iZXIsXG4gIGRhZW1vblNldHRpbmdzOiB7IHNoYXJlX3VzYWdlX2RhdGE6IGJvb2xlYW4gfSxcbiAgc2V0U2hhcmVEaWFnbm9zdGljRGF0YTogYm9vbGVhbiA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gVXNlckVtYWlsTmV3KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGVycm9yTWVzc2FnZSwgaXNQZW5kaW5nLCBhZGRVc2VyRW1haWwsIHNldFN5bmMsIGRhZW1vblNldHRpbmdzLCBzZXRTaGFyZURpYWdub3N0aWNEYXRhIH0gPSBwcm9wcztcbiAgY29uc3QgeyBzaGFyZV91c2FnZV9kYXRhOiBzaGFyZVVzYWdlRGF0YSB9ID0gZGFlbW9uU2V0dGluZ3M7XG4gIGNvbnN0IFtuZXdFbWFpbCwgc2V0RW1haWxdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbbG9jYWxTaGFyZVVzYWdlRGF0YSwgc2V0TG9jYWxTaGFyZVVzYWdlRGF0YV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmb3JtU3luY0VuYWJsZWQsIHNldEZvcm1TeW5jRW5hYmxlZF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgdmFsaWQgPSBuZXdFbWFpbC5tYXRjaChFTUFJTF9SRUdFWCk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlVXNhZ2VEYXRhQ2hhbmdlKCkge1xuICAgIHNldExvY2FsU2hhcmVVc2FnZURhdGEoIWxvY2FsU2hhcmVVc2FnZURhdGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KCkge1xuICAgIHNldFN5bmMoZm9ybVN5bmNFbmFibGVkKTtcbiAgICBhZGRVc2VyRW1haWwobmV3RW1haWwpO1xuICAgIGFuYWx5dGljcy5lbWFpbFByb3ZpZGVkRXZlbnQoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGgxIGNsYXNzTmFtZT1cInNlY3Rpb25fX3RpdGxlLS1sYXJnZVwiPntfXygnU2lnbiBJbiB0byBsYnJ5LnR2Jyl9PC9oMT5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInNlY3Rpb25fX3N1YnRpdGxlXCI+XG4gICAgICAgIHt9XG4gICAgICAgIHtfXygnQ3JlYXRlIGEgbmV3IGFjY291bnQgb3Igc2lnbiBpbi4nKX1cbiAgICAgICAge31cbiAgICAgICAge31cbiAgICAgIDwvcD5cbiAgICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cInNlY3Rpb25fX2JvZHlcIj5cbiAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgIHBsYWNlaG9sZGVyPXtfXygnaG90c3R1ZmZfOTZAaG90bWFpbC5jb20nKX1cbiAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgIG5hbWU9XCJzaWduX3VwX2VtYWlsXCJcbiAgICAgICAgICBsYWJlbD17X18oJ0VtYWlsJyl9XG4gICAgICAgICAgdmFsdWU9e25ld0VtYWlsfVxuICAgICAgICAgIGVycm9yPXtlcnJvck1lc3NhZ2V9XG4gICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0RW1haWwoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAvPlxuXG4gICAgICAgIHshSVNfV0VCICYmIChcbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT1cInN5bmNfY2hlY2tib3hcIlxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge19fKCdCYWNrdXAgeW91ciBhY2NvdW50IGFuZCB3YWxsZXQgZGF0YS4nKX17JyAnfVxuICAgICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9hY2NvdW50LXN5bmNcIiBsYWJlbD17X18oJ0xlYXJuIE1vcmUnKX0gLz5cbiAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2Zvcm1TeW5jRW5hYmxlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRGb3JtU3luY0VuYWJsZWQoIWZvcm1TeW5jRW5hYmxlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7IXNoYXJlVXNhZ2VEYXRhICYmICFJU19XRUIgJiYgKFxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPVwic2hhcmVfZGF0YV9jaGVja2JveFwiXG4gICAgICAgICAgICBjaGVja2VkPXtsb2NhbFNoYXJlVXNhZ2VEYXRhfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVVzYWdlRGF0YUNoYW5nZX1cbiAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtfXygnU2hhcmUgdXNhZ2UgZGF0YSB3aXRoIExCUlkgaW5jLicpfXsnICd9XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3ByaXZhY3ktYW5kLWRhdGFcIiBsYWJlbD17X18oJ0xlYXJuIE1vcmUnKX0gLz5cbiAgICAgICAgICAgICAgICB7IWxvY2FsU2hhcmVVc2FnZURhdGEgJiYgPHNwYW4gY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPiAoe19fKCdSZXF1aXJlZCcpfSk8L3NwYW4+fVxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ0NvbnRpbnVlJyl9XG4gICAgICAgICAgICBkaXNhYmxlZD17IW5ld0VtYWlsIHx8ICF2YWxpZCB8fCAoIUlTX1dFQiAmJiAoIWxvY2FsU2hhcmVVc2FnZURhdGEgJiYgIXNoYXJlVXNhZ2VEYXRhKSkgfHwgaXNQZW5kaW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Gb3JtPlxuICAgICAge31cbiAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgIHRlcm1zOiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9XCIyXCJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3LmxicnkuY29tL3Rlcm1zb2ZzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVGVybXMgb2YgU2VydmljZScpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEJ5IGNvbnRpbnVpbmcsIEkgYWdyZWUgdG8gdGhlICV0ZXJtcyUgYW5kIGNvbmZpcm0gSSBhbSBvdmVyIHRoZSBhZ2Ugb2YgMTMuXG4gICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgIDwvcD5cbiAgICAgIHt9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlckVtYWlsTmV3O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUkEscUJBWUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQVRBO0FBY0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFTQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFGQTtBQURBO0FBbUJBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userEmailNew/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userEmailVerify/index.js": -/*!************************************************!*\ - !*** ../ui/component/userEmailVerify/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/userEmailVerify/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectEmailToVerify\"])(state),\n isReturningUser: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectEmailAlreadyExists\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUser\"])(state),\n resendingEmail: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectResendingVerificationEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resendVerificationEmail: function resendVerificationEmail(email) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserResendVerificationEmail\"])(email));\n },\n checkEmailVerified: function checkEmailVerified() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserCheckEmailVerified\"])());\n },\n toast: function toast(message) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doToast\"])({\n message: message\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJFbWFpbFZlcmlmeS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlckVtYWlsVmVyaWZ5L2luZGV4LmpzP2E4YWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdEVtYWlsQWxyZWFkeUV4aXN0cyxcbiAgc2VsZWN0RW1haWxUb1ZlcmlmeSxcbiAgZG9Vc2VyUmVzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gIGRvVXNlckNoZWNrRW1haWxWZXJpZmllZCxcbiAgc2VsZWN0VXNlcixcbiAgc2VsZWN0UmVzZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG59IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgZG9Ub2FzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFVzZXJFbWFpbFZlcmlmeSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBlbWFpbDogc2VsZWN0RW1haWxUb1ZlcmlmeShzdGF0ZSksXG4gIGlzUmV0dXJuaW5nVXNlcjogc2VsZWN0RW1haWxBbHJlYWR5RXhpc3RzKHN0YXRlKSxcbiAgdXNlcjogc2VsZWN0VXNlcihzdGF0ZSksXG4gIHJlc2VuZGluZ0VtYWlsOiBzZWxlY3RSZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbChzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsOiBlbWFpbCA9PiBkaXNwYXRjaChkb1VzZXJSZXNlbmRWZXJpZmljYXRpb25FbWFpbChlbWFpbCkpLFxuICBjaGVja0VtYWlsVmVyaWZpZWQ6ICgpID0+IGRpc3BhdGNoKGRvVXNlckNoZWNrRW1haWxWZXJpZmllZCgpKSxcbiAgdG9hc3Q6IG1lc3NhZ2UgPT4gZGlzcGF0Y2goZG9Ub2FzdCh7IG1lc3NhZ2UgfSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShVc2VyRW1haWxWZXJpZnkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userEmailVerify/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userEmailVerify/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/userEmailVerify/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_userSignOutButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/userSignOutButton */ \"../ui/component/userSignOutButton/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nvar UserEmailVerify = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(UserEmailVerify, _React$PureComponent);\n\n function UserEmailVerify(props) {\n var _this;\n\n _classCallCheck(this, UserEmailVerify);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(UserEmailVerify).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"emailVerifyCheckInterval\", void 0);\n\n _this.emailVerifyCheckInterval = null;\n _assertThisInitialized(_this).handleResendVerificationEmail = _this.handleResendVerificationEmail.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(UserEmailVerify, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.emailVerifyCheckInterval = setInterval(function () {\n return _this2.checkIfVerified();\n }, 5000);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var user = this.props.user;\n\n if (this.emailVerifyCheckInterval && user && user.has_verified_email) {\n clearInterval(this.emailVerifyCheckInterval);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.emailVerifyCheckInterval) {\n clearInterval(this.emailVerifyCheckInterval);\n }\n }\n }, {\n key: \"handleResendVerificationEmail\",\n value: function handleResendVerificationEmail() {\n var _this$props = this.props,\n email = _this$props.email,\n resendVerificationEmail = _this$props.resendVerificationEmail,\n toast = _this$props.toast;\n resendVerificationEmail(email);\n toast(__('New email sent.'));\n }\n }, {\n key: \"checkIfVerified\",\n value: function checkIfVerified() {\n var checkEmailVerified = this.props.checkEmailVerified;\n checkEmailVerified();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n email = _this$props2.email,\n isReturningUser = _this$props2.isReturningUser,\n resendingEmail = _this$props2.resendingEmail;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"h1\", {\n className: \"section__title--large\"\n }, isReturningUser ? __('Check Your Email') : __('Confirm Your Email')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", {\n className: \"section__subtitle\"\n }, __('An email was sent to %email%. Follow the link to %verify_text%. After, this page will update automatically.', {\n email: email,\n verify_text: isReturningUser ? __('sign in') : __('verify your email')\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"section__body section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n label: __('Resend Email'),\n onClick: this.handleResendVerificationEmail,\n disabled: resendingEmail\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_userSignOutButton__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n label: __('Start Over')\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tokens: {\n help_link: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"mailto:help@lbry.com\",\n label: \"help@lbry.com\"\n }),\n chat_link: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://chat.lbry.com\",\n label: \"chat\"\n })\n }\n }, \"Email %help_link% or join our %chat_link% if you encounter any trouble verifying.\")));\n }\n }]);\n\n return UserEmailVerify;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserEmailVerify);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJFbWFpbFZlcmlmeS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlckVtYWlsVmVyaWZ5L3ZpZXcuanN4P2ZiMGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgVXNlclNpZ25PdXRCdXR0b24gZnJvbSAnY29tcG9uZW50L3VzZXJTaWduT3V0QnV0dG9uJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICBlbWFpbDogc3RyaW5nLFxuICBpc1JldHVybmluZ1VzZXI6IGJvb2xlYW4sXG4gIHJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsOiBzdHJpbmcgPT4gdm9pZCxcbiAgcmVzZW5kaW5nRW1haWw6IGJvb2xlYW4sXG4gIGNoZWNrRW1haWxWZXJpZmllZDogKCkgPT4gdm9pZCxcbiAgdG9hc3Q6IHN0cmluZyA9PiB2b2lkLFxuICB1c2VyOiB7XG4gICAgaGFzX3ZlcmlmaWVkX2VtYWlsOiBib29sZWFuLFxuICB9LFxufTtcblxuY2xhc3MgVXNlckVtYWlsVmVyaWZ5IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5lbWFpbFZlcmlmeUNoZWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgICh0aGlzOiBhbnkpLmhhbmRsZVJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gdGhpcy5oYW5kbGVSZXNlbmRWZXJpZmljYXRpb25FbWFpbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbWFpbFZlcmlmeUNoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmNoZWNrSWZWZXJpZmllZCgpLCA1MDAwKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHRoaXMuZW1haWxWZXJpZnlDaGVja0ludGVydmFsICYmIHVzZXIgJiYgdXNlci5oYXNfdmVyaWZpZWRfZW1haWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5lbWFpbFZlcmlmeUNoZWNrSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLmVtYWlsVmVyaWZ5Q2hlY2tJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVtYWlsVmVyaWZ5Q2hlY2tJbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUmVzZW5kVmVyaWZpY2F0aW9uRW1haWwoKSB7XG4gICAgY29uc3QgeyBlbWFpbCwgcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwsIHRvYXN0IH0gPSB0aGlzLnByb3BzO1xuICAgIHJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsKGVtYWlsKTtcbiAgICB0b2FzdChfXygnTmV3IGVtYWlsIHNlbnQuJykpO1xuICB9XG5cbiAgY2hlY2tJZlZlcmlmaWVkKCkge1xuICAgIGNvbnN0IHsgY2hlY2tFbWFpbFZlcmlmaWVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNoZWNrRW1haWxWZXJpZmllZCgpO1xuICB9XG5cbiAgZW1haWxWZXJpZnlDaGVja0ludGVydmFsOiA/SW50ZXJ2YWxJRDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBlbWFpbCwgaXNSZXR1cm5pbmdVc2VyLCByZXNlbmRpbmdFbWFpbCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57aXNSZXR1cm5pbmdVc2VyID8gX18oJ0NoZWNrIFlvdXIgRW1haWwnKSA6IF9fKCdDb25maXJtIFlvdXIgRW1haWwnKX08L2gxPlxuXG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInNlY3Rpb25fX3N1YnRpdGxlXCI+XG4gICAgICAgICAge19fKFxuICAgICAgICAgICAgJ0FuIGVtYWlsIHdhcyBzZW50IHRvICVlbWFpbCUuIEZvbGxvdyB0aGUgbGluayB0byAldmVyaWZ5X3RleHQlLiBBZnRlciwgdGhpcyBwYWdlIHdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkuJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICAgIHZlcmlmeV90ZXh0OiBpc1JldHVybmluZ1VzZXIgPyBfXygnc2lnbiBpbicpIDogX18oJ3ZlcmlmeSB5b3VyIGVtYWlsJyksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keSBzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBsYWJlbD17X18oJ1Jlc2VuZCBFbWFpbCcpfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVSZXNlbmRWZXJpZmljYXRpb25FbWFpbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtyZXNlbmRpbmdFbWFpbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxVc2VyU2lnbk91dEJ1dHRvbiBsYWJlbD17X18oJ1N0YXJ0IE92ZXInKX0gLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgIGhlbHBfbGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cIm1haWx0bzpoZWxwQGxicnkuY29tXCIgbGFiZWw9XCJoZWxwQGxicnkuY29tXCIgLz4sXG4gICAgICAgICAgICAgIGNoYXRfbGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cImh0dHBzOi8vY2hhdC5sYnJ5LmNvbVwiIGxhYmVsPVwiY2hhdFwiIC8+LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBFbWFpbCAlaGVscF9saW5rJSBvciBqb2luIG91ciAlY2hhdF9saW5rJSBpZiB5b3UgZW5jb3VudGVyIGFueSB0cm91YmxlIHZlcmlmeWluZy5cbiAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICA8L3A+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlckVtYWlsVmVyaWZ5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFJQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFFQTtBQUNBOzs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUlBO0FBQ0E7QUFGQTtBQU9BO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFBQTtBQUdBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQVdBOzs7O0FBNUVBO0FBQ0E7QUE4RUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userEmailVerify/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userFirstChannel/index.js": -/*!*************************************************!*\ - !*** ../ui/component/userFirstChannel/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/userFirstChannel/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectEmailToVerify\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUser\"])(state),\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state),\n creatingChannel: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectCreatingChannel\"])(state),\n createChannelError: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectCreateChannelError\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n createChannel: function createChannel(name, amount) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doCreateChannel\"])(name, amount));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwvaW5kZXguanM/N2M2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0VXNlciwgc2VsZWN0RW1haWxUb1ZlcmlmeSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgZG9DcmVhdGVDaGFubmVsLCBzZWxlY3RDcmVhdGluZ0NoYW5uZWwsIHNlbGVjdE15Q2hhbm5lbENsYWltcywgc2VsZWN0Q3JlYXRlQ2hhbm5lbEVycm9yIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgVXNlckZpcnN0Q2hhbm5lbCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBlbWFpbDogc2VsZWN0RW1haWxUb1ZlcmlmeShzdGF0ZSksXG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgY3JlYXRpbmdDaGFubmVsOiBzZWxlY3RDcmVhdGluZ0NoYW5uZWwoc3RhdGUpLFxuICBjcmVhdGVDaGFubmVsRXJyb3I6IHNlbGVjdENyZWF0ZUNoYW5uZWxFcnJvcihzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNyZWF0ZUNoYW5uZWw6IChuYW1lLCBhbW91bnQpID0+IGRpc3BhdGNoKGRvQ3JlYXRlQ2hhbm5lbChuYW1lLCBhbW91bnQpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlckZpcnN0Q2hhbm5lbCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userFirstChannel/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userFirstChannel/view.jsx": -/*!*************************************************!*\ - !*** ../ui/component/userFirstChannel/view.jsx ***! - \*************************************************/ -/*! exports provided: DEFAULT_BID_FOR_FIRST_CHANNEL, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DEFAULT_BID_FOR_FIRST_CHANNEL\", function() { return DEFAULT_BID_FOR_FIRST_CHANNEL; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\nvar DEFAULT_BID_FOR_FIRST_CHANNEL = 0.01;\n\nfunction UserFirstChannel(props) {\n var createChannel = props.createChannel,\n creatingChannel = props.creatingChannel,\n claimingReward = props.claimingReward,\n user = props.user,\n createChannelError = props.createChannelError;\n var primaryEmail = user.primary_email;\n var initialChannel = primaryEmail.split('@')[0];\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialChannel),\n _useState2 = _slicedToArray(_useState, 2),\n channel = _useState2[0],\n setChannel = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(undefined),\n _useState4 = _slicedToArray(_useState3, 2),\n nameError = _useState4[0],\n setNameError = _useState4[1];\n\n function handleCreateChannel() {\n createChannel(\"@\".concat(channel), DEFAULT_BID_FOR_FIRST_CHANNEL);\n }\n\n function handleChannelChange(e) {\n var value = e.target.value;\n setChannel(value);\n\n if (!Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"isNameValid\"])(value, false)) {\n setNameError(constants_claim__WEBPACK_IMPORTED_MODULE_4__[\"INVALID_NAME_ERROR\"]);\n } else {\n setNameError();\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"Form\"], {\n onSubmit: handleCreateChannel\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Create A Channel')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('A channel is your identity on the LBRY network.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('You can have more than one or remove this later.'))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed fieldset-group--disabled-prefix\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: \"auth_first_channel\"\n }, createChannelError || nameError ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, createChannelError || nameError) : __('Your Channel')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-field__prefix\"\n }, \"@\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n autoFocus: true,\n placeholder: __('channel'),\n type: \"text\",\n name: \"auth_first_channel\",\n className: \"form-field--short\",\n value: channel,\n onChange: handleChannelChange\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n disabled: nameError || !channel || creatingChannel || claimingReward,\n label: creatingChannel || claimingReward ? __('Creating') : __('Create')\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserFirstChannel);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwvdmlldy5qc3g/MzUwYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNOYW1lVmFsaWQgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtLCBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgSU5WQUxJRF9OQU1FX0VSUk9SIH0gZnJvbSAnY29uc3RhbnRzL2NsYWltJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JJRF9GT1JfRklSU1RfQ0hBTk5FTCA9IDAuMDE7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNyZWF0ZUNoYW5uZWw6IChzdHJpbmcsIG51bWJlcikgPT4gdm9pZCxcbiAgY3JlYXRpbmdDaGFubmVsOiBib29sZWFuLFxuICBjcmVhdGVDaGFubmVsRXJyb3I6IHN0cmluZyxcbiAgY2xhaW1pbmdSZXdhcmQ6IGJvb2xlYW4sXG4gIHVzZXI6IFVzZXIsXG59O1xuXG5mdW5jdGlvbiBVc2VyRmlyc3RDaGFubmVsKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNyZWF0ZUNoYW5uZWwsIGNyZWF0aW5nQ2hhbm5lbCwgY2xhaW1pbmdSZXdhcmQsIHVzZXIsIGNyZWF0ZUNoYW5uZWxFcnJvciB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgcHJpbWFyeV9lbWFpbDogcHJpbWFyeUVtYWlsIH0gPSB1c2VyO1xuICBjb25zdCBpbml0aWFsQ2hhbm5lbCA9IHByaW1hcnlFbWFpbC5zcGxpdCgnQCcpWzBdO1xuICBjb25zdCBbY2hhbm5lbCwgc2V0Q2hhbm5lbF0gPSB1c2VTdGF0ZShpbml0aWFsQ2hhbm5lbCk7XG4gIGNvbnN0IFtuYW1lRXJyb3IsIHNldE5hbWVFcnJvcl0gPSB1c2VTdGF0ZSh1bmRlZmluZWQpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNyZWF0ZUNoYW5uZWwoKSB7XG4gICAgY3JlYXRlQ2hhbm5lbChgQCR7Y2hhbm5lbH1gLCBERUZBVUxUX0JJRF9GT1JfRklSU1RfQ0hBTk5FTCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDaGFubmVsQ2hhbmdlKGUpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBlLnRhcmdldDtcbiAgICBzZXRDaGFubmVsKHZhbHVlKTtcbiAgICBpZiAoIWlzTmFtZVZhbGlkKHZhbHVlLCBmYWxzZSkpIHtcbiAgICAgIHNldE5hbWVFcnJvcihJTlZBTElEX05BTUVfRVJST1IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXROYW1lRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVDcmVhdGVDaGFubmVsfT5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oJ0NyZWF0ZSBBIENoYW5uZWwnKX08L2gxPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICA8cD57X18oJ0EgY2hhbm5lbCBpcyB5b3VyIGlkZW50aXR5IG9uIHRoZSBMQlJZIG5ldHdvcmsuJyl9PC9wPlxuICAgICAgICA8cD57X18oJ1lvdSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIG9yIHJlbW92ZSB0aGlzIGxhdGVyLicpfTwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keVwiPlxuICAgICAgICA8ZmllbGRzZXQtZ3JvdXAgY2xhc3M9XCJmaWVsZHNldC1ncm91cC0tc211c2hlZCBmaWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4XCI+XG4gICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImF1dGhfZmlyc3RfY2hhbm5lbFwiPlxuICAgICAgICAgICAgICB7Y3JlYXRlQ2hhbm5lbEVycm9yIHx8IG5hbWVFcnJvciA/IChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+e2NyZWF0ZUNoYW5uZWxFcnJvciB8fCBuYW1lRXJyb3J9PC9zcGFuPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIF9fKCdZb3VyIENoYW5uZWwnKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1maWVsZF9fcHJlZml4XCI+QDwvZGl2PlxuICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cblxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdjaGFubmVsJyl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBuYW1lPVwiYXV0aF9maXJzdF9jaGFubmVsXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLXNob3J0XCJcbiAgICAgICAgICAgIHZhbHVlPXtjaGFubmVsfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5uZWxDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9maWVsZHNldC1ncm91cD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkPXtuYW1lRXJyb3IgfHwgIWNoYW5uZWwgfHwgY3JlYXRpbmdDaGFubmVsIHx8IGNsYWltaW5nUmV3YXJkfVxuICAgICAgICAgICAgbGFiZWw9e2NyZWF0aW5nQ2hhbm5lbCB8fCBjbGFpbWluZ1Jld2FyZCA/IF9fKCdDcmVhdGluZycpIDogX18oJ0NyZWF0ZScpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvRm9ybT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlckZpcnN0Q2hhbm5lbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUtBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userFirstChannel/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userPhoneNew/index.js": -/*!*********************************************!*\ - !*** ../ui/component/userPhoneNew/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/userPhoneNew/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n phoneErrorMessage: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectPhoneNewErrorMessage\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n addUserPhone: function addUserPhone(phone, countryCode) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserPhoneNew\"])(phone, countryCode));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJQaG9uZU5ldy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclBob25lTmV3L2luZGV4LmpzP2QyMTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFBob25lTmV3RXJyb3JNZXNzYWdlLCBkb1VzZXJQaG9uZU5ldyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFVzZXJQaG9uZU5ldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBwaG9uZUVycm9yTWVzc2FnZTogc2VsZWN0UGhvbmVOZXdFcnJvck1lc3NhZ2Uoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBhZGRVc2VyUGhvbmU6IChwaG9uZSwgY291bnRyeUNvZGUpID0+IGRpc3BhdGNoKGRvVXNlclBob25lTmV3KHBob25lLCBjb3VudHJ5Q29kZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShVc2VyUGhvbmVOZXcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userPhoneNew/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userPhoneNew/view.jsx": -/*!*********************************************!*\ - !*** ../ui/component/userPhoneNew/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar os = __webpack_require__(/*! os */ \"../node_modules/os-browserify/browser.js\").type();\n\nvar countryCodes = __webpack_require__(/*! country-data */ \"../node_modules/country-data/index.js\").callingCountries.all.filter(function (_) {\n return _.emoji;\n}).reduce(function (acc, cur) {\n return acc.concat(cur.countryCallingCodes.map(function (_) {\n return _objectSpread({}, cur, {\n countryCallingCode: _\n });\n }));\n}, []).sort(function (a, b) {\n if (a.countryCallingCode < b.countryCallingCode) {\n return -1;\n }\n\n if (a.countryCallingCode > b.countryCallingCode) {\n return 1;\n }\n\n return 0;\n});\n\nvar UserPhoneNew = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(UserPhoneNew, _React$PureComponent);\n\n function UserPhoneNew(props) {\n var _this;\n\n _classCallCheck(this, UserPhoneNew);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(UserPhoneNew).call(this, props));\n _this.state = {\n phone: '',\n countryCode: '+1'\n };\n _assertThisInitialized(_this).formatPhone = _this.formatPhone.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleSubmit = _this.handleSubmit.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleSelect = _this.handleSelect.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(UserPhoneNew, [{\n key: \"formatPhone\",\n value: function formatPhone(value) {\n var countryCode = this.state.countryCode;\n var formattedNumber = value.replace(/\\D/g, '');\n\n if (countryCode === '+1') {\n if (!formattedNumber) {\n return '';\n } else if (formattedNumber.length < 4) {\n return formattedNumber;\n } else if (formattedNumber.length < 7) {\n return \"(\".concat(formattedNumber.substring(0, 3), \") \").concat(formattedNumber.substring(3));\n }\n\n var fullNumber = \"(\".concat(formattedNumber.substring(0, 3), \") \").concat(formattedNumber.substring(3, 6), \"-\").concat(formattedNumber.substring(6));\n return fullNumber.length <= 14 ? fullNumber : fullNumber.substring(0, 14);\n }\n\n return formattedNumber;\n }\n }, {\n key: \"handleChanged\",\n value: function handleChanged(event) {\n this.setState({\n phone: this.formatPhone(event.target.value)\n });\n }\n }, {\n key: \"handleSelect\",\n value: function handleSelect(event) {\n this.setState({\n countryCode: event.target.value\n });\n }\n }, {\n key: \"handleSubmit\",\n value: function handleSubmit() {\n var _this$state = this.state,\n phone = _this$state.phone,\n countryCode = _this$state.countryCode;\n this.props.addUserPhone(phone.replace(/\\D/g, ''), countryCode.substring(1));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n cancelButton = _this$props.cancelButton,\n phoneErrorMessage = _this$props.phoneErrorMessage,\n isPending = _this$props.isPending;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", {\n className: \"section__subtitle\"\n }, __('Enter your phone number and we will send you a verification code. We will not share your phone number with third parties.')), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: this.handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('Country'),\n type: \"select\",\n name: \"country-codes\",\n onChange: this.handleSelect\n }, countryCodes.map(function (country, index) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"option\", {\n key: index,\n value: country.countryCallingCode\n }, os === 'Darwin' ? country.emoji : \"(\".concat(country.alpha2, \")\"), \" \", country.countryCallingCode);\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n type: \"text\",\n label: __('Number'),\n placeholder: this.state.countryCode === '+1' ? '(555) 555-5555' : '5555555555',\n name: \"phone\",\n value: this.state.phone,\n error: phoneErrorMessage,\n onChange: function onChange(event) {\n _this2.handleChanged(event);\n }\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Submit\"], {\n label: \"Submit\",\n disabled: isPending\n }), cancelButton)));\n }\n }]);\n\n return UserPhoneNew;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserPhoneNew);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJQaG9uZU5ldy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclBob25lTmV3L3ZpZXcuanN4P2ZiNmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm0sIEZvcm1GaWVsZCwgU3VibWl0IH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcblxuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpLnR5cGUoKTtcbmNvbnN0IGNvdW50cnlDb2RlcyA9IHJlcXVpcmUoJ2NvdW50cnktZGF0YScpXG4gIC5jYWxsaW5nQ291bnRyaWVzLmFsbC5maWx0ZXIoXyA9PiBfLmVtb2ppKVxuICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjLmNvbmNhdChjdXIuY291bnRyeUNhbGxpbmdDb2Rlcy5tYXAoXyA9PiAoeyAuLi5jdXIsIGNvdW50cnlDYWxsaW5nQ29kZTogXyB9KSkpLCBbXSlcbiAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5jb3VudHJ5Q2FsbGluZ0NvZGUgPCBiLmNvdW50cnlDYWxsaW5nQ29kZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYS5jb3VudHJ5Q2FsbGluZ0NvZGUgPiBiLmNvdW50cnlDYWxsaW5nQ29kZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcblxudHlwZSBQcm9wcyA9IHtcbiAgYWRkVXNlclBob25lOiAoc3RyaW5nLCBzdHJpbmcpID0+IHZvaWQsXG4gIGNhbmNlbEJ1dHRvbjogUmVhY3QuTm9kZSxcbiAgcGhvbmVFcnJvck1lc3NhZ2U6ID9zdHJpbmcsXG4gIGlzUGVuZGluZzogYm9vbGVhbixcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIHBob25lOiBzdHJpbmcsXG4gIGNvdW50cnlDb2RlOiBzdHJpbmcsXG59O1xuXG5jbGFzcyBVc2VyUGhvbmVOZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgcGhvbmU6ICcnLFxuICAgICAgY291bnRyeUNvZGU6ICcrMScsXG4gICAgfTtcblxuICAgICh0aGlzOiBhbnkpLmZvcm1hdFBob25lID0gdGhpcy5mb3JtYXRQaG9uZS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gICAgKHRoaXM6IGFueSkuaGFuZGxlU2VsZWN0ID0gdGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGZvcm1hdFBob25lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGNvdW50cnlDb2RlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGZvcm1hdHRlZE51bWJlciA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG5cbiAgICBpZiAoY291bnRyeUNvZGUgPT09ICcrMScpIHtcbiAgICAgIGlmICghZm9ybWF0dGVkTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlcjtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgcmV0dXJuIGAoJHtmb3JtYXR0ZWROdW1iZXIuc3Vic3RyaW5nKDAsIDMpfSkgJHtmb3JtYXR0ZWROdW1iZXIuc3Vic3RyaW5nKDMpfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBmdWxsTnVtYmVyID0gYCgke2Zvcm1hdHRlZE51bWJlci5zdWJzdHJpbmcoMCwgMyl9KSAke2Zvcm1hdHRlZE51bWJlci5zdWJzdHJpbmcoXG4gICAgICAgIDMsXG4gICAgICAgIDZcbiAgICAgICl9LSR7Zm9ybWF0dGVkTnVtYmVyLnN1YnN0cmluZyg2KX1gO1xuICAgICAgcmV0dXJuIGZ1bGxOdW1iZXIubGVuZ3RoIDw9IDE0ID8gZnVsbE51bWJlciA6IGZ1bGxOdW1iZXIuc3Vic3RyaW5nKDAsIDE0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlcjtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZWQoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBob25lOiB0aGlzLmZvcm1hdFBob25lKGV2ZW50LnRhcmdldC52YWx1ZSksXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3QoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY291bnRyeUNvZGU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICBjb25zdCB7IHBob25lLCBjb3VudHJ5Q29kZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnByb3BzLmFkZFVzZXJQaG9uZShwaG9uZS5yZXBsYWNlKC9cXEQvZywgJycpLCBjb3VudHJ5Q29kZS5zdWJzdHJpbmcoMSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2FuY2VsQnV0dG9uLCBwaG9uZUVycm9yTWVzc2FnZSwgaXNQZW5kaW5nIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICB7X18oXG4gICAgICAgICAgICAnRW50ZXIgeW91ciBwaG9uZSBudW1iZXIgYW5kIHdlIHdpbGwgc2VuZCB5b3UgYSB2ZXJpZmljYXRpb24gY29kZS4gV2Ugd2lsbCBub3Qgc2hhcmUgeW91ciBwaG9uZSBudW1iZXIgd2l0aCB0aGlyZCBwYXJ0aWVzLidcbiAgICAgICAgICApfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPEZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgICAgICA8ZmllbGRzZXQtZ3JvdXAgY2xhc3M9XCJmaWVsZHNldC1ncm91cC0tc211c2hlZFwiPlxuICAgICAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD17X18oJ0NvdW50cnknKX0gdHlwZT1cInNlbGVjdFwiIG5hbWU9XCJjb3VudHJ5LWNvZGVzXCIgb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0fT5cbiAgICAgICAgICAgICAge2NvdW50cnlDb2Rlcy5tYXAoKGNvdW50cnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2luZGV4fSB2YWx1ZT17Y291bnRyeS5jb3VudHJ5Q2FsbGluZ0NvZGV9PlxuICAgICAgICAgICAgICAgICAge29zID09PSAnRGFyd2luJyA/IGNvdW50cnkuZW1vamkgOiBgKCR7Y291bnRyeS5hbHBoYTJ9KWB9IHtjb3VudHJ5LmNvdW50cnlDYWxsaW5nQ29kZX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBsYWJlbD17X18oJ051bWJlcicpfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5zdGF0ZS5jb3VudHJ5Q29kZSA9PT0gJysxJyA/ICcoNTU1KSA1NTUtNTU1NScgOiAnNTU1NTU1NTU1NSd9XG4gICAgICAgICAgICAgIG5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBob25lfVxuICAgICAgICAgICAgICBlcnJvcj17cGhvbmVFcnJvck1lc3NhZ2V9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9maWVsZHNldC1ncm91cD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxTdWJtaXQgbGFiZWw9XCJTdWJtaXRcIiBkaXNhYmxlZD17aXNQZW5kaW5nfSAvPlxuICAgICAgICAgICAge2NhbmNlbEJ1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Gb3JtPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJQaG9uZU5ldztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVZBO0FBQ0E7QUF3QkE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBVkE7QUFXQTtBQUNBOzs7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFBQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFNQTs7OztBQXpGQTtBQUNBO0FBMkZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userPhoneNew/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userPhoneVerify/index.js": -/*!************************************************!*\ - !*** ../ui/component/userPhoneVerify/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/userPhoneVerify/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n phone: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectPhoneToVerify\"])(state),\n countryCode: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserCountryCode\"])(state),\n phoneErrorMessage: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectPhoneVerifyErrorMessage\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resetPhone: function resetPhone() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserPhoneReset\"])());\n },\n verifyUserPhone: function verifyUserPhone(code) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserPhoneVerify\"])(code));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJQaG9uZVZlcmlmeS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclBob25lVmVyaWZ5L2luZGV4LmpzPzNiYmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvVXNlclBob25lVmVyaWZ5LFxuICBkb1VzZXJQaG9uZVJlc2V0LFxuICBzZWxlY3RQaG9uZVRvVmVyaWZ5LFxuICBzZWxlY3RQaG9uZVZlcmlmeUVycm9yTWVzc2FnZSxcbiAgc2VsZWN0VXNlckNvdW50cnlDb2RlLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBVc2VyUGhvbmVWZXJpZnkgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgcGhvbmU6IHNlbGVjdFBob25lVG9WZXJpZnkoc3RhdGUpLFxuICBjb3VudHJ5Q29kZTogc2VsZWN0VXNlckNvdW50cnlDb2RlKHN0YXRlKSxcbiAgcGhvbmVFcnJvck1lc3NhZ2U6IHNlbGVjdFBob25lVmVyaWZ5RXJyb3JNZXNzYWdlKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgcmVzZXRQaG9uZTogKCkgPT4gZGlzcGF0Y2goZG9Vc2VyUGhvbmVSZXNldCgpKSxcbiAgdmVyaWZ5VXNlclBob25lOiBjb2RlID0+IGRpc3BhdGNoKGRvVXNlclBob25lVmVyaWZ5KGNvZGUpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlclBob25lVmVyaWZ5KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userPhoneVerify/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userPhoneVerify/view.jsx": -/*!************************************************!*\ - !*** ../ui/component/userPhoneVerify/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar UserPhoneVerify = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(UserPhoneVerify, _React$PureComponent);\n\n function UserPhoneVerify(props) {\n var _this;\n\n _classCallCheck(this, UserPhoneVerify);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(UserPhoneVerify).call(this, props));\n _this.state = {\n code: ''\n };\n return _this;\n }\n\n _createClass(UserPhoneVerify, [{\n key: \"handleCodeChanged\",\n value: function handleCodeChanged(event) {\n this.setState({\n code: String(event.target.value).trim()\n });\n }\n }, {\n key: \"handleSubmit\",\n value: function handleSubmit() {\n var code = this.state.code;\n this.props.verifyUserPhone(code);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var resetPhone = this.props.resetPhone;\n resetPhone();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n cancelButton = _this$props.cancelButton,\n phoneErrorMessage = _this$props.phoneErrorMessage,\n phone = _this$props.phone,\n countryCode = _this$props.countryCode;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", null, ' ', __(\"Please enter the verification code sent to +\".concat(countryCode).concat(phone, \". Didn't receive it? \")), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n onClick: this.reset.bind(this),\n label: \"Go back.\"\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: this.handleSubmit.bind(this)\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"text\",\n name: \"code\",\n placeholder: \"1234\",\n value: this.state.code,\n onChange: function onChange(event) {\n _this2.handleCodeChanged(event);\n },\n label: __('Verification Code'),\n error: phoneErrorMessage,\n inputButton: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Submit\"], {\n label: __('Verify')\n })\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, cancelButton)), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tokens: {\n help_link: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"mailto:help@lbry.com\",\n label: \"help@lbry.com\"\n }),\n chat_link: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://chat.lbry.com\",\n label: \"chat\"\n })\n }\n }, \"Email %help_link% or join our %chat_link% if you encounter any trouble with your code.\")));\n }\n }]);\n\n return UserPhoneVerify;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserPhoneVerify);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJQaG9uZVZlcmlmeS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclBob25lVmVyaWZ5L3ZpZXcuanN4Pzg5MjAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtLCBGb3JtRmllbGQsIFN1Ym1pdCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdmVyaWZ5VXNlclBob25lOiBzdHJpbmcgPT4gdm9pZCxcbiAgcmVzZXRQaG9uZTogKCkgPT4gdm9pZCxcbiAgY2FuY2VsQnV0dG9uOiBSZWFjdC5Ob2RlLFxuICBwaG9uZUVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBwaG9uZTogc3RyaW5nLFxuICBjb3VudHJ5Q29kZTogc3RyaW5nLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgY29kZTogc3RyaW5nLFxufTtcblxuY2xhc3MgVXNlclBob25lVmVyaWZ5IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvZGU6ICcnLFxuICAgIH07XG4gIH1cblxuICBoYW5kbGVDb2RlQ2hhbmdlZChldmVudDogU3ludGhldGljSW5wdXRFdmVudDwqPikge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29kZTogU3RyaW5nKGV2ZW50LnRhcmdldC52YWx1ZSkudHJpbSgpLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0KCkge1xuICAgIGNvbnN0IHsgY29kZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnByb3BzLnZlcmlmeVVzZXJQaG9uZShjb2RlKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IHsgcmVzZXRQaG9uZSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXNldFBob25lKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjYW5jZWxCdXR0b24sIHBob25lRXJyb3JNZXNzYWdlLCBwaG9uZSwgY291bnRyeUNvZGUgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgeycgJ31cbiAgICAgICAgICB7X18oYFBsZWFzZSBlbnRlciB0aGUgdmVyaWZpY2F0aW9uIGNvZGUgc2VudCB0byArJHtjb3VudHJ5Q29kZX0ke3Bob25lfS4gRGlkbid0IHJlY2VpdmUgaXQ/IGApfVxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG9uQ2xpY2s9e3RoaXMucmVzZXQuYmluZCh0aGlzKX0gbGFiZWw9XCJHbyBiYWNrLlwiIC8+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPEZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyl9PlxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG5hbWU9XCJjb2RlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTIzNFwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jb2RlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb2RlQ2hhbmdlZChldmVudCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgbGFiZWw9e19fKCdWZXJpZmljYXRpb24gQ29kZScpfVxuICAgICAgICAgICAgZXJyb3I9e3Bob25lRXJyb3JNZXNzYWdlfVxuICAgICAgICAgICAgaW5wdXRCdXR0b249ezxTdWJtaXQgbGFiZWw9e19fKCdWZXJpZnknKX0gLz59XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPntjYW5jZWxCdXR0b259PC9kaXY+XG4gICAgICAgIDwvRm9ybT5cblxuICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgaGVscF9saW5rOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwibWFpbHRvOmhlbHBAbGJyeS5jb21cIiBsYWJlbD1cImhlbHBAbGJyeS5jb21cIiAvPixcbiAgICAgICAgICAgICAgY2hhdF9saW5rOiA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly9jaGF0LmxicnkuY29tXCIgbGFiZWw9XCJjaGF0XCIgLz4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEVtYWlsICVoZWxwX2xpbmslIG9yIGpvaW4gb3VyICVjaGF0X2xpbmslIGlmIHlvdSBlbmNvdW50ZXIgYW55IHRyb3VibGUgd2l0aCB5b3VyIGNvZGUuXG4gICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJQaG9uZVZlcmlmeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBSEE7QUFNQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBOzs7QUFFQTtBQUFBO0FBRUE7QUFDQTs7O0FBRUE7QUFBQTtBQUVBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQVZBO0FBYUE7QUFBQTtBQUdBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQVdBOzs7O0FBL0RBO0FBQ0E7QUFpRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userPhoneVerify/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userSignIn/index.js": -/*!*******************************************!*\ - !*** ../ui/component/userSignIn/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/userSignIn/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n emailToVerify: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectEmailToVerify\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state),\n accessToken: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectAccessToken\"])(state),\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectMyChannelClaims\"])(state),\n claimedRewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectClaimedRewards\"])(state),\n claimingReward: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsRewardClaimPending\"])()(state, {\n reward_type: lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"rewards\"].TYPE_CONFIRM_EMAIL\n }),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectBalance\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectFetchingMyChannels\"])(state),\n youtubeChannels: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectYoutubeChannels\"])(state),\n userFetchPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserIsPending\"])(state),\n syncEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"ENABLE_SYNC\"])(state),\n syncingWallet: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectGetSyncIsPending\"])(state),\n getSyncError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectGetSyncErrorMessage\"])(state),\n hasSynced: Boolean(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectSyncHash\"])(state)),\n creatingChannel: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectCreatingChannel\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchUser: function fetchUser() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doUserFetch\"])());\n },\n claimReward: function claimReward() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doClaimRewardType\"])(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"rewards\"].TYPE_CONFIRM_EMAIL, {\n notifyError: false\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJTaWduSW4vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJTaWduSW4vaW5kZXguanM/ZjJlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdEVtYWlsVG9WZXJpZnksXG4gIHNlbGVjdFVzZXIsXG4gIHNlbGVjdEFjY2Vzc1Rva2VuLFxuICBtYWtlU2VsZWN0SXNSZXdhcmRDbGFpbVBlbmRpbmcsXG4gIHNlbGVjdENsYWltZWRSZXdhcmRzLFxuICByZXdhcmRzIGFzIFJFV0FSRF9UWVBFUyxcbiAgZG9DbGFpbVJld2FyZFR5cGUsXG4gIGRvVXNlckZldGNoLFxuICBzZWxlY3RVc2VySXNQZW5kaW5nLFxuICBzZWxlY3RZb3V0dWJlQ2hhbm5lbHMsXG4gIHNlbGVjdEdldFN5bmNJc1BlbmRpbmcsXG4gIHNlbGVjdEdldFN5bmNFcnJvck1lc3NhZ2UsXG4gIHNlbGVjdFN5bmNIYXNoLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IHNlbGVjdE15Q2hhbm5lbENsYWltcywgc2VsZWN0QmFsYW5jZSwgc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzLCBzZWxlY3RDcmVhdGluZ0NoYW5uZWwgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCBVc2VyU2lnbkluIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGVtYWlsVG9WZXJpZnk6IHNlbGVjdEVtYWlsVG9WZXJpZnkoc3RhdGUpLFxuICB1c2VyOiBzZWxlY3RVc2VyKHN0YXRlKSxcbiAgYWNjZXNzVG9rZW46IHNlbGVjdEFjY2Vzc1Rva2VuKHN0YXRlKSxcbiAgY2hhbm5lbHM6IHNlbGVjdE15Q2hhbm5lbENsYWltcyhzdGF0ZSksXG4gIGNsYWltZWRSZXdhcmRzOiBzZWxlY3RDbGFpbWVkUmV3YXJkcyhzdGF0ZSksXG4gIGNsYWltaW5nUmV3YXJkOiBtYWtlU2VsZWN0SXNSZXdhcmRDbGFpbVBlbmRpbmcoKShzdGF0ZSwge1xuICAgIHJld2FyZF90eXBlOiBSRVdBUkRfVFlQRVMuVFlQRV9DT05GSVJNX0VNQUlMLFxuICB9KSxcbiAgYmFsYW5jZTogc2VsZWN0QmFsYW5jZShzdGF0ZSksXG4gIGZldGNoaW5nQ2hhbm5lbHM6IHNlbGVjdEZldGNoaW5nTXlDaGFubmVscyhzdGF0ZSksXG4gIHlvdXR1YmVDaGFubmVsczogc2VsZWN0WW91dHViZUNoYW5uZWxzKHN0YXRlKSxcbiAgdXNlckZldGNoUGVuZGluZzogc2VsZWN0VXNlcklzUGVuZGluZyhzdGF0ZSksXG4gIHN5bmNFbmFibGVkOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5FTkFCTEVfU1lOQykoc3RhdGUpLFxuICBzeW5jaW5nV2FsbGV0OiBzZWxlY3RHZXRTeW5jSXNQZW5kaW5nKHN0YXRlKSxcbiAgZ2V0U3luY0Vycm9yOiBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlKHN0YXRlKSxcbiAgaGFzU3luY2VkOiBCb29sZWFuKHNlbGVjdFN5bmNIYXNoKHN0YXRlKSksXG4gIGNyZWF0aW5nQ2hhbm5lbDogc2VsZWN0Q3JlYXRpbmdDaGFubmVsKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgZmV0Y2hVc2VyOiAoKSA9PiBkaXNwYXRjaChkb1VzZXJGZXRjaCgpKSxcbiAgY2xhaW1SZXdhcmQ6ICgpID0+XG4gICAgZGlzcGF0Y2goXG4gICAgICBkb0NsYWltUmV3YXJkVHlwZShSRVdBUkRfVFlQRVMuVFlQRV9DT05GSVJNX0VNQUlMLCB7XG4gICAgICAgIG5vdGlmeUVycm9yOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlclNpZ25Jbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFBQTtBQUNBO0FBbUJBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBR0E7QUFEQTtBQUZBO0FBRkE7QUFBQTtBQUNBO0FBU0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userSignIn/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userSignIn/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/userSignIn/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_userEmailNew__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/userEmailNew */ \"../ui/component/userEmailNew/index.js\");\n/* harmony import */ var component_userEmailVerify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/userEmailVerify */ \"../ui/component/userEmailVerify/index.js\");\n/* harmony import */ var component_userFirstChannel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/userFirstChannel */ \"../ui/component/userFirstChannel/index.js\");\n/* harmony import */ var component_userChannelFollowIntro__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/userChannelFollowIntro */ \"../ui/component/userChannelFollowIntro/index.js\");\n/* harmony import */ var component_userTagFollowIntro__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/userTagFollowIntro */ \"../ui/component/userTagFollowIntro/index.js\");\n/* harmony import */ var component_userFirstChannel_view__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/userFirstChannel/view */ \"../ui/component/userFirstChannel/view.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var component_userVerify__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/userVerify */ \"../ui/component/userVerify/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var component_youtubeTransferStatus__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/youtubeTransferStatus */ \"../ui/component/youtubeTransferStatus/index.js\");\n/* harmony import */ var component_syncPassword__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/syncPassword */ \"../ui/component/syncPassword/index.js\");\n/* harmony import */ var effects_use_fetched__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! effects/use-fetched */ \"../ui/effects/use-fetched.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var react_confetti__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! react-confetti */ \"../node_modules/react-confetti/dist/react-confetti.min.js\");\n/* harmony import */ var react_confetti__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(react_confetti__WEBPACK_IMPORTED_MODULE_16__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction UserSignIn(props) {\n var emailToVerify = props.emailToVerify,\n user = props.user,\n claimingReward = props.claimingReward,\n claimedRewards = props.claimedRewards,\n channels = props.channels,\n claimReward = props.claimReward,\n balance = props.balance,\n history = props.history,\n location = props.location,\n fetchUser = props.fetchUser,\n youtubeChannels = props.youtubeChannels,\n syncEnabled = props.syncEnabled,\n syncingWallet = props.syncingWallet,\n getSyncError = props.getSyncError,\n hasSynced = props.hasSynced,\n fetchingChannels = props.fetchingChannels,\n creatingChannel = props.creatingChannel;\n var search = location.search;\n var urlParams = new URLSearchParams(search);\n var redirect = urlParams.get('redirect');\n var step = urlParams.get('step');\n var shouldRedirectImmediately = urlParams.get('immediate');\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_1___default.a.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n initialSignInStep = _React$useState2[0],\n setInitialSignInStep = _React$useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_15__[\"default\"])('channel-follow-intro', false),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n hasSeenFollowList = _usePersistedState2[0],\n setHasSeenFollowList = _usePersistedState2[1];\n\n var _usePersistedState3 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_15__[\"default\"])('skip-rewards-intro', false),\n _usePersistedState4 = _slicedToArray(_usePersistedState3, 2),\n hasSkippedRewards = _usePersistedState4[0],\n setHasSkippedRewards = _usePersistedState4[1];\n\n var _usePersistedState5 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_15__[\"default\"])('channel-follow-intro', false),\n _usePersistedState6 = _slicedToArray(_usePersistedState5, 2),\n hasSeenTagsList = _usePersistedState6[0],\n setHasSeenTagsList = _usePersistedState6[1];\n\n var hasVerifiedEmail = user && user.has_verified_email;\n var rewardsApproved = user && user.is_reward_approved;\n var isIdentityVerified = user && user.is_identity_verified;\n var hasFetchedReward = Object(effects_use_fetched__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(claimingReward);\n var channelCount = channels ? channels.length : 0;\n var hasClaimedEmailAward = claimedRewards.some(function (reward) {\n return reward.reward_type === lbryinc__WEBPACK_IMPORTED_MODULE_9__[\"rewards\"].TYPE_CONFIRM_EMAIL;\n });\n var hasYoutubeChannels = youtubeChannels && Boolean(youtubeChannels.length);\n var isYoutubeTransferComplete = hasYoutubeChannels && youtubeChannels.every(function (channel) {\n return channel.transfer_state === lbryinc__WEBPACK_IMPORTED_MODULE_9__[\"YOUTUBE_STATUSES\"].COMPLETED_TRANSFER;\n }); // Complexity warning\n // We can't just check if we are currently fetching something\n // We may want to keep a component rendered while something is being fetched, instead of replacing it with the large spinner\n // The verbose variable names are an attempt to alleviate _some_ of the confusion from handling all edge cases that come from\n // reward claiming, channel creation, account syncing, and youtube transfer\n // The possible screens for the sign in flow\n\n var showEmail = !emailToVerify && !hasVerifiedEmail;\n var showEmailVerification = emailToVerify && !hasVerifiedEmail;\n var showUserVerification = hasVerifiedEmail && !rewardsApproved && !isIdentityVerified && !hasSkippedRewards;\n var showSyncPassword = syncEnabled && getSyncError;\n var showChannelCreation = hasVerifiedEmail && balance !== undefined && balance !== null && balance > component_userFirstChannel_view__WEBPACK_IMPORTED_MODULE_8__[\"DEFAULT_BID_FOR_FIRST_CHANNEL\"] && channelCount === 0 && !hasYoutubeChannels;\n var showYoutubeTransfer = hasVerifiedEmail && hasYoutubeChannels && !isYoutubeTransferComplete;\n var showFollowIntro = step === 'channels' || hasVerifiedEmail && !hasSeenFollowList;\n var showTagsIntro = step === 'tags' || hasVerifiedEmail && !hasSeenTagsList;\n var canHijackSignInFlowWithSpinner = hasVerifiedEmail && !getSyncError && !showFollowIntro;\n var isCurrentlyFetchingSomething = fetchingChannels || claimingReward || syncingWallet || creatingChannel;\n var isWaitingForSomethingToFinish = // If the user has claimed the email award, we need to wait until the balance updates sometime in the future\n !hasFetchedReward && !hasClaimedEmailAward || syncEnabled && !hasSynced;\n var showLoadingSpinner = canHijackSignInFlowWithSpinner && (isCurrentlyFetchingSomething || isWaitingForSomethingToFinish);\n react__WEBPACK_IMPORTED_MODULE_1___default.a.useEffect(function () {\n fetchUser();\n }, [fetchUser]);\n react__WEBPACK_IMPORTED_MODULE_1___default.a.useEffect(function () {\n // Don't claim the reward if sync is enabled until after a sync has been completed successfully\n // If we do it before, we could end up trying to sync a wallet with a non-zero balance which will fail to sync\n var delayForSync = syncEnabled && !hasSynced;\n\n if (hasVerifiedEmail && !hasClaimedEmailAward && !hasFetchedReward && !delayForSync) {\n claimReward();\n }\n }, [hasVerifiedEmail, claimReward, hasClaimedEmailAward, hasFetchedReward, syncEnabled, hasSynced, balance]); // Loop through this list from the end, until it finds a matching component\n // If it never finds one, assume the user has completed every step and redirect them\n\n var SIGN_IN_FLOW = [showEmail && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userEmailNew__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), showEmailVerification && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userEmailVerify__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), showUserVerification && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userVerify__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onSkip: function onSkip() {\n return setHasSkippedRewards(true);\n }\n }), showChannelCreation && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userFirstChannel__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), showFollowIntro && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userChannelFollowIntro__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onContinue: function onContinue() {\n var url = \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?reset_scroll=1\");\n\n if (redirect) {\n url += \"&redirect=\".concat(redirect);\n }\n\n if (shouldRedirectImmediately) {\n url += \"&immediate=true\";\n }\n\n history.replace(url);\n setHasSeenFollowList(true);\n },\n onBack: function onBack() {\n var url = \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?reset_scroll=1&step=tags\");\n\n if (redirect) {\n url += \"&redirect=\".concat(redirect);\n }\n\n if (shouldRedirectImmediately) {\n url += \"&immediate=true\";\n }\n\n history.replace(url);\n setHasSeenFollowList(false);\n }\n }), showTagsIntro && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_userTagFollowIntro__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onContinue: function onContinue() {\n var url = \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?reset_scroll=1&step=channels\");\n\n if (redirect) {\n url += \"&redirect=\".concat(redirect);\n }\n\n if (shouldRedirectImmediately) {\n url += \"&immediate=true\";\n }\n\n history.replace(url);\n setHasSeenTagsList(true);\n }\n }), showYoutubeTransfer && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_youtubeTransferStatus__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null), \" \", react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_confetti__WEBPACK_IMPORTED_MODULE_16___default.a, {\n recycle: false,\n style: {\n position: 'fixed'\n }\n })), showSyncPassword && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_syncPassword__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null), showLoadingSpinner && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null))];\n\n function getSignInStep() {\n for (var i = SIGN_IN_FLOW.length - 1; i > -1; i--) {\n var Component = SIGN_IN_FLOW[i];\n\n if (Component) {\n // If we want to redirect immediately,\n // remember the first step so we can redirect once a new step has been reached\n // Ignore the loading step\n if (redirect && shouldRedirectImmediately) {\n if (!initialSignInStep) {\n setInitialSignInStep(i);\n } else if (i !== initialSignInStep && i !== SIGN_IN_FLOW.length - 1) {\n history.replace(redirect);\n }\n }\n\n return Component;\n }\n }\n }\n\n var componentToRender = getSignInStep();\n\n if (!componentToRender) {\n history.replace(redirect || '/');\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"section\", {\n className: \"main--contained\"\n }, componentToRender);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(UserSignIn));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJTaWduSW4vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJTaWduSW4vdmlldy5qc3g/Y2JkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBVc2VyRW1haWxOZXcgZnJvbSAnY29tcG9uZW50L3VzZXJFbWFpbE5ldyc7XG5pbXBvcnQgVXNlckVtYWlsVmVyaWZ5IGZyb20gJ2NvbXBvbmVudC91c2VyRW1haWxWZXJpZnknO1xuaW1wb3J0IFVzZXJGaXJzdENoYW5uZWwgZnJvbSAnY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwnO1xuaW1wb3J0IFVzZXJDaGFubmVsRm9sbG93SW50cm8gZnJvbSAnY29tcG9uZW50L3VzZXJDaGFubmVsRm9sbG93SW50cm8nO1xuaW1wb3J0IFVzZXJUYWdGb2xsb3dJbnRybyBmcm9tICdjb21wb25lbnQvdXNlclRhZ0ZvbGxvd0ludHJvJztcbmltcG9ydCB7IERFRkFVTFRfQklEX0ZPUl9GSVJTVF9DSEFOTkVMIH0gZnJvbSAnY29tcG9uZW50L3VzZXJGaXJzdENoYW5uZWwvdmlldyc7XG5pbXBvcnQgeyByZXdhcmRzIGFzIFJFV0FSRFMsIFlPVVRVQkVfU1RBVFVTRVMgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBVc2VyVmVyaWZ5IGZyb20gJ2NvbXBvbmVudC91c2VyVmVyaWZ5JztcbmltcG9ydCBTcGlubmVyIGZyb20gJ2NvbXBvbmVudC9zcGlubmVyJztcbmltcG9ydCBZb3V0dWJlVHJhbnNmZXJTdGF0dXMgZnJvbSAnY29tcG9uZW50L3lvdXR1YmVUcmFuc2ZlclN0YXR1cyc7XG5pbXBvcnQgU3luY1Bhc3N3b3JkIGZyb20gJ2NvbXBvbmVudC9zeW5jUGFzc3dvcmQnO1xuaW1wb3J0IHVzZUZldGNoZWQgZnJvbSAnZWZmZWN0cy91c2UtZmV0Y2hlZCc7XG5pbXBvcnQgdXNlUGVyc2lzdGVkU3RhdGUgZnJvbSAnZWZmZWN0cy91c2UtcGVyc2lzdGVkLXN0YXRlJztcbmltcG9ydCBDb25mZXR0aSBmcm9tICdyZWFjdC1jb25mZXR0aSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVzZXI6ID9Vc2VyLFxuICBlbWFpbFRvVmVyaWZ5OiA/c3RyaW5nLFxuICBjaGFubmVsczogP0FycmF5PHN0cmluZz4sXG4gIGJhbGFuY2U6ID9udW1iZXIsXG4gIGZldGNoaW5nQ2hhbm5lbHM6IGJvb2xlYW4sXG4gIGNsYWltaW5nUmV3YXJkOiBib29sZWFuLFxuICBjbGFpbVJld2FyZDogKCkgPT4gdm9pZCxcbiAgZmV0Y2hVc2VyOiAoKSA9PiB2b2lkLFxuICBjbGFpbWVkUmV3YXJkczogQXJyYXk8UmV3YXJkPixcbiAgaGlzdG9yeTogeyByZXBsYWNlOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZyB9LFxuICB5b3V0dWJlQ2hhbm5lbHM6IEFycmF5PGFueT4sXG4gIHN5bmNFbmFibGVkOiBib29sZWFuLFxuICBoYXNTeW5jZWQ6IGJvb2xlYW4sXG4gIHN5bmNpbmdXYWxsZXQ6IGJvb2xlYW4sXG4gIGdldFN5bmNFcnJvcjogP3N0cmluZyxcbiAgY3JlYXRpbmdDaGFubmVsOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gVXNlclNpZ25Jbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVtYWlsVG9WZXJpZnksXG4gICAgdXNlcixcbiAgICBjbGFpbWluZ1Jld2FyZCxcbiAgICBjbGFpbWVkUmV3YXJkcyxcbiAgICBjaGFubmVscyxcbiAgICBjbGFpbVJld2FyZCxcbiAgICBiYWxhbmNlLFxuICAgIGhpc3RvcnksXG4gICAgbG9jYXRpb24sXG4gICAgZmV0Y2hVc2VyLFxuICAgIHlvdXR1YmVDaGFubmVscyxcbiAgICBzeW5jRW5hYmxlZCxcbiAgICBzeW5jaW5nV2FsbGV0LFxuICAgIGdldFN5bmNFcnJvcixcbiAgICBoYXNTeW5jZWQsXG4gICAgZmV0Y2hpbmdDaGFubmVscyxcbiAgICBjcmVhdGluZ0NoYW5uZWwsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyBzZWFyY2ggfSA9IGxvY2F0aW9uO1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gIGNvbnN0IHJlZGlyZWN0ID0gdXJsUGFyYW1zLmdldCgncmVkaXJlY3QnKTtcbiAgY29uc3Qgc3RlcCA9IHVybFBhcmFtcy5nZXQoJ3N0ZXAnKTtcbiAgY29uc3Qgc2hvdWxkUmVkaXJlY3RJbW1lZGlhdGVseSA9IHVybFBhcmFtcy5nZXQoJ2ltbWVkaWF0ZScpO1xuICBjb25zdCBbaW5pdGlhbFNpZ25JblN0ZXAsIHNldEluaXRpYWxTaWduSW5TdGVwXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IFtoYXNTZWVuRm9sbG93TGlzdCwgc2V0SGFzU2VlbkZvbGxvd0xpc3RdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ2NoYW5uZWwtZm9sbG93LWludHJvJywgZmFsc2UpO1xuICBjb25zdCBbaGFzU2tpcHBlZFJld2FyZHMsIHNldEhhc1NraXBwZWRSZXdhcmRzXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCdza2lwLXJld2FyZHMtaW50cm8nLCBmYWxzZSk7XG4gIGNvbnN0IFtoYXNTZWVuVGFnc0xpc3QsIHNldEhhc1NlZW5UYWdzTGlzdF0gPSB1c2VQZXJzaXN0ZWRTdGF0ZSgnY2hhbm5lbC1mb2xsb3ctaW50cm8nLCBmYWxzZSk7XG4gIGNvbnN0IGhhc1ZlcmlmaWVkRW1haWwgPSB1c2VyICYmIHVzZXIuaGFzX3ZlcmlmaWVkX2VtYWlsO1xuICBjb25zdCByZXdhcmRzQXBwcm92ZWQgPSB1c2VyICYmIHVzZXIuaXNfcmV3YXJkX2FwcHJvdmVkO1xuICBjb25zdCBpc0lkZW50aXR5VmVyaWZpZWQgPSB1c2VyICYmIHVzZXIuaXNfaWRlbnRpdHlfdmVyaWZpZWQ7XG4gIGNvbnN0IGhhc0ZldGNoZWRSZXdhcmQgPSB1c2VGZXRjaGVkKGNsYWltaW5nUmV3YXJkKTtcbiAgY29uc3QgY2hhbm5lbENvdW50ID0gY2hhbm5lbHMgPyBjaGFubmVscy5sZW5ndGggOiAwO1xuICBjb25zdCBoYXNDbGFpbWVkRW1haWxBd2FyZCA9IGNsYWltZWRSZXdhcmRzLnNvbWUocmV3YXJkID0+IHJld2FyZC5yZXdhcmRfdHlwZSA9PT0gUkVXQVJEUy5UWVBFX0NPTkZJUk1fRU1BSUwpO1xuICBjb25zdCBoYXNZb3V0dWJlQ2hhbm5lbHMgPSB5b3V0dWJlQ2hhbm5lbHMgJiYgQm9vbGVhbih5b3V0dWJlQ2hhbm5lbHMubGVuZ3RoKTtcbiAgY29uc3QgaXNZb3V0dWJlVHJhbnNmZXJDb21wbGV0ZSA9XG4gICAgaGFzWW91dHViZUNoYW5uZWxzICYmXG4gICAgeW91dHViZUNoYW5uZWxzLmV2ZXJ5KGNoYW5uZWwgPT4gY2hhbm5lbC50cmFuc2Zlcl9zdGF0ZSA9PT0gWU9VVFVCRV9TVEFUVVNFUy5DT01QTEVURURfVFJBTlNGRVIpO1xuXG4gIC8vIENvbXBsZXhpdHkgd2FybmluZ1xuICAvLyBXZSBjYW4ndCBqdXN0IGNoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgZmV0Y2hpbmcgc29tZXRoaW5nXG4gIC8vIFdlIG1heSB3YW50IHRvIGtlZXAgYSBjb21wb25lbnQgcmVuZGVyZWQgd2hpbGUgc29tZXRoaW5nIGlzIGJlaW5nIGZldGNoZWQsIGluc3RlYWQgb2YgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxhcmdlIHNwaW5uZXJcbiAgLy8gVGhlIHZlcmJvc2UgdmFyaWFibGUgbmFtZXMgYXJlIGFuIGF0dGVtcHQgdG8gYWxsZXZpYXRlIF9zb21lXyBvZiB0aGUgY29uZnVzaW9uIGZyb20gaGFuZGxpbmcgYWxsIGVkZ2UgY2FzZXMgdGhhdCBjb21lIGZyb21cbiAgLy8gcmV3YXJkIGNsYWltaW5nLCBjaGFubmVsIGNyZWF0aW9uLCBhY2NvdW50IHN5bmNpbmcsIGFuZCB5b3V0dWJlIHRyYW5zZmVyXG4gIC8vIFRoZSBwb3NzaWJsZSBzY3JlZW5zIGZvciB0aGUgc2lnbiBpbiBmbG93XG4gIGNvbnN0IHNob3dFbWFpbCA9ICFlbWFpbFRvVmVyaWZ5ICYmICFoYXNWZXJpZmllZEVtYWlsO1xuICBjb25zdCBzaG93RW1haWxWZXJpZmljYXRpb24gPSBlbWFpbFRvVmVyaWZ5ICYmICFoYXNWZXJpZmllZEVtYWlsO1xuICBjb25zdCBzaG93VXNlclZlcmlmaWNhdGlvbiA9IGhhc1ZlcmlmaWVkRW1haWwgJiYgIXJld2FyZHNBcHByb3ZlZCAmJiAhaXNJZGVudGl0eVZlcmlmaWVkICYmICFoYXNTa2lwcGVkUmV3YXJkcztcbiAgY29uc3Qgc2hvd1N5bmNQYXNzd29yZCA9IHN5bmNFbmFibGVkICYmIGdldFN5bmNFcnJvcjtcbiAgY29uc3Qgc2hvd0NoYW5uZWxDcmVhdGlvbiA9XG4gICAgaGFzVmVyaWZpZWRFbWFpbCAmJlxuICAgIGJhbGFuY2UgIT09IHVuZGVmaW5lZCAmJlxuICAgIGJhbGFuY2UgIT09IG51bGwgJiZcbiAgICBiYWxhbmNlID4gREVGQVVMVF9CSURfRk9SX0ZJUlNUX0NIQU5ORUwgJiZcbiAgICBjaGFubmVsQ291bnQgPT09IDAgJiZcbiAgICAhaGFzWW91dHViZUNoYW5uZWxzO1xuICBjb25zdCBzaG93WW91dHViZVRyYW5zZmVyID0gaGFzVmVyaWZpZWRFbWFpbCAmJiBoYXNZb3V0dWJlQ2hhbm5lbHMgJiYgIWlzWW91dHViZVRyYW5zZmVyQ29tcGxldGU7XG4gIGNvbnN0IHNob3dGb2xsb3dJbnRybyA9IHN0ZXAgPT09ICdjaGFubmVscycgfHwgKGhhc1ZlcmlmaWVkRW1haWwgJiYgIWhhc1NlZW5Gb2xsb3dMaXN0KTtcbiAgY29uc3Qgc2hvd1RhZ3NJbnRybyA9IHN0ZXAgPT09ICd0YWdzJyB8fCAoaGFzVmVyaWZpZWRFbWFpbCAmJiAhaGFzU2VlblRhZ3NMaXN0KTtcbiAgY29uc3QgY2FuSGlqYWNrU2lnbkluRmxvd1dpdGhTcGlubmVyID0gaGFzVmVyaWZpZWRFbWFpbCAmJiAhZ2V0U3luY0Vycm9yICYmICFzaG93Rm9sbG93SW50cm87XG4gIGNvbnN0IGlzQ3VycmVudGx5RmV0Y2hpbmdTb21ldGhpbmcgPSBmZXRjaGluZ0NoYW5uZWxzIHx8IGNsYWltaW5nUmV3YXJkIHx8IHN5bmNpbmdXYWxsZXQgfHwgY3JlYXRpbmdDaGFubmVsO1xuICBjb25zdCBpc1dhaXRpbmdGb3JTb21ldGhpbmdUb0ZpbmlzaCA9XG4gICAgLy8gSWYgdGhlIHVzZXIgaGFzIGNsYWltZWQgdGhlIGVtYWlsIGF3YXJkLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJhbGFuY2UgdXBkYXRlcyBzb21ldGltZSBpbiB0aGUgZnV0dXJlXG4gICAgKCFoYXNGZXRjaGVkUmV3YXJkICYmICFoYXNDbGFpbWVkRW1haWxBd2FyZCkgfHwgKHN5bmNFbmFibGVkICYmICFoYXNTeW5jZWQpO1xuICBjb25zdCBzaG93TG9hZGluZ1NwaW5uZXIgPVxuICAgIGNhbkhpamFja1NpZ25JbkZsb3dXaXRoU3Bpbm5lciAmJiAoaXNDdXJyZW50bHlGZXRjaGluZ1NvbWV0aGluZyB8fCBpc1dhaXRpbmdGb3JTb21ldGhpbmdUb0ZpbmlzaCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFVzZXIoKTtcbiAgfSwgW2ZldGNoVXNlcl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3QgY2xhaW0gdGhlIHJld2FyZCBpZiBzeW5jIGlzIGVuYWJsZWQgdW50aWwgYWZ0ZXIgYSBzeW5jIGhhcyBiZWVuIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAvLyBJZiB3ZSBkbyBpdCBiZWZvcmUsIHdlIGNvdWxkIGVuZCB1cCB0cnlpbmcgdG8gc3luYyBhIHdhbGxldCB3aXRoIGEgbm9uLXplcm8gYmFsYW5jZSB3aGljaCB3aWxsIGZhaWwgdG8gc3luY1xuICAgIGNvbnN0IGRlbGF5Rm9yU3luYyA9IHN5bmNFbmFibGVkICYmICFoYXNTeW5jZWQ7XG5cbiAgICBpZiAoaGFzVmVyaWZpZWRFbWFpbCAmJiAhaGFzQ2xhaW1lZEVtYWlsQXdhcmQgJiYgIWhhc0ZldGNoZWRSZXdhcmQgJiYgIWRlbGF5Rm9yU3luYykge1xuICAgICAgY2xhaW1SZXdhcmQoKTtcbiAgICB9XG4gIH0sIFtoYXNWZXJpZmllZEVtYWlsLCBjbGFpbVJld2FyZCwgaGFzQ2xhaW1lZEVtYWlsQXdhcmQsIGhhc0ZldGNoZWRSZXdhcmQsIHN5bmNFbmFibGVkLCBoYXNTeW5jZWQsIGJhbGFuY2VdKTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhpcyBsaXN0IGZyb20gdGhlIGVuZCwgdW50aWwgaXQgZmluZHMgYSBtYXRjaGluZyBjb21wb25lbnRcbiAgLy8gSWYgaXQgbmV2ZXIgZmluZHMgb25lLCBhc3N1bWUgdGhlIHVzZXIgaGFzIGNvbXBsZXRlZCBldmVyeSBzdGVwIGFuZCByZWRpcmVjdCB0aGVtXG4gIGNvbnN0IFNJR05fSU5fRkxPVyA9IFtcbiAgICBzaG93RW1haWwgJiYgPFVzZXJFbWFpbE5ldyAvPixcbiAgICBzaG93RW1haWxWZXJpZmljYXRpb24gJiYgPFVzZXJFbWFpbFZlcmlmeSAvPixcbiAgICBzaG93VXNlclZlcmlmaWNhdGlvbiAmJiA8VXNlclZlcmlmeSBvblNraXA9eygpID0+IHNldEhhc1NraXBwZWRSZXdhcmRzKHRydWUpfSAvPixcbiAgICBzaG93Q2hhbm5lbENyZWF0aW9uICYmIDxVc2VyRmlyc3RDaGFubmVsIC8+LFxuICAgIHNob3dGb2xsb3dJbnRybyAmJiAoXG4gICAgICA8VXNlckNoYW5uZWxGb2xsb3dJbnRyb1xuICAgICAgICBvbkNvbnRpbnVlPXsoKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvJC8ke1BBR0VTLkFVVEh9P3Jlc2V0X3Njcm9sbD0xYDtcbiAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHVybCArPSBgJnJlZGlyZWN0PSR7cmVkaXJlY3R9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNob3VsZFJlZGlyZWN0SW1tZWRpYXRlbHkpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmltbWVkaWF0ZT10cnVlYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoaXN0b3J5LnJlcGxhY2UodXJsKTtcbiAgICAgICAgICBzZXRIYXNTZWVuRm9sbG93TGlzdCh0cnVlKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25CYWNrPXsoKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvJC8ke1BBR0VTLkFVVEh9P3Jlc2V0X3Njcm9sbD0xJnN0ZXA9dGFnc2A7XG4gICAgICAgICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZyZWRpcmVjdD0ke3JlZGlyZWN0fWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaG91bGRSZWRpcmVjdEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZpbW1lZGlhdGU9dHJ1ZWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGlzdG9yeS5yZXBsYWNlKHVybCk7XG4gICAgICAgICAgc2V0SGFzU2VlbkZvbGxvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICApLFxuICAgIHNob3dUYWdzSW50cm8gJiYgKFxuICAgICAgPFVzZXJUYWdGb2xsb3dJbnRyb1xuICAgICAgICBvbkNvbnRpbnVlPXsoKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvJC8ke1BBR0VTLkFVVEh9P3Jlc2V0X3Njcm9sbD0xJnN0ZXA9Y2hhbm5lbHNgO1xuICAgICAgICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgICAgICAgdXJsICs9IGAmcmVkaXJlY3Q9JHtyZWRpcmVjdH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hvdWxkUmVkaXJlY3RJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgdXJsICs9IGAmaW1tZWRpYXRlPXRydWVgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhpc3RvcnkucmVwbGFjZSh1cmwpO1xuICAgICAgICAgIHNldEhhc1NlZW5UYWdzTGlzdCh0cnVlKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBzaG93WW91dHViZVRyYW5zZmVyICYmIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxZb3V0dWJlVHJhbnNmZXJTdGF0dXMgLz4gPENvbmZldHRpIHJlY3ljbGU9e2ZhbHNlfSBzdHlsZT17eyBwb3NpdGlvbjogJ2ZpeGVkJyB9fSAvPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBzaG93U3luY1Bhc3N3b3JkICYmIDxTeW5jUGFzc3dvcmQgLz4sXG4gICAgc2hvd0xvYWRpbmdTcGlubmVyICYmIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWFpbi0tZW1wdHlcIj5cbiAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgIDwvZGl2PlxuICAgICksXG4gIF07XG5cbiAgZnVuY3Rpb24gZ2V0U2lnbkluU3RlcCgpIHtcbiAgICBmb3IgKHZhciBpID0gU0lHTl9JTl9GTE9XLmxlbmd0aCAtIDE7IGkgPiAtMTsgaS0tKSB7XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBTSUdOX0lOX0ZMT1dbaV07XG4gICAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIElmIHdlIHdhbnQgdG8gcmVkaXJlY3QgaW1tZWRpYXRlbHksXG4gICAgICAgIC8vIHJlbWVtYmVyIHRoZSBmaXJzdCBzdGVwIHNvIHdlIGNhbiByZWRpcmVjdCBvbmNlIGEgbmV3IHN0ZXAgaGFzIGJlZW4gcmVhY2hlZFxuICAgICAgICAvLyBJZ25vcmUgdGhlIGxvYWRpbmcgc3RlcFxuICAgICAgICBpZiAocmVkaXJlY3QgJiYgc2hvdWxkUmVkaXJlY3RJbW1lZGlhdGVseSkge1xuICAgICAgICAgIGlmICghaW5pdGlhbFNpZ25JblN0ZXApIHtcbiAgICAgICAgICAgIHNldEluaXRpYWxTaWduSW5TdGVwKGkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSAhPT0gaW5pdGlhbFNpZ25JblN0ZXAgJiYgaSAhPT0gU0lHTl9JTl9GTE9XLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGhpc3RvcnkucmVwbGFjZShyZWRpcmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wb25lbnRUb1JlbmRlciA9IGdldFNpZ25JblN0ZXAoKTtcblxuICBpZiAoIWNvbXBvbmVudFRvUmVuZGVyKSB7XG4gICAgaGlzdG9yeS5yZXBsYWNlKHJlZGlyZWN0IHx8ICcvJyk7XG4gIH1cblxuICByZXR1cm4gPHNlY3Rpb24gY2xhc3NOYW1lPVwibWFpbi0tY29udGFpbmVkXCI+e2NvbXBvbmVudFRvUmVuZGVyfTwvc2VjdGlvbj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoVXNlclNpZ25Jbik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFxQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUF0Q0E7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFXQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBO0FBNkJBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWlCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userSignIn/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userSignOutButton/index.js": -/*!**************************************************!*\ - !*** ../ui/component/userSignOutButton/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/userSignOutButton/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {\n signOut: function signOut() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doSignOut\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJTaWduT3V0QnV0dG9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC91c2VyU2lnbk91dEJ1dHRvbi9pbmRleC5qcz80N2VlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1NpZ25PdXQgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgVXNlclNpZ25PdXRCdXR0b24gZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNpZ25PdXQ6ICgpID0+IGRpc3BhdGNoKGRvU2lnbk91dCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlclNpZ25PdXRCdXR0b24pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userSignOutButton/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userSignOutButton/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/userSignOutButton/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\nfunction UserSignOutButton(props) {\n var _props$button = props.button,\n button = _props$button === void 0 ? 'link' : _props$button,\n signOut = props.signOut,\n label = props.label;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: button,\n label: label || __('Sign Out'),\n onClick: signOut\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserSignOutButton);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJTaWduT3V0QnV0dG9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC91c2VyU2lnbk91dEJ1dHRvbi92aWV3LmpzeD8xOTYyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgYnV0dG9uOiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nLFxuICBzaWduT3V0OiAoKSA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gVXNlclNpZ25PdXRCdXR0b24ocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgYnV0dG9uID0gJ2xpbmsnLCBzaWduT3V0LCBsYWJlbCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIDxCdXR0b24gYnV0dG9uPXtidXR0b259IGxhYmVsPXtsYWJlbCB8fCBfXygnU2lnbiBPdXQnKX0gb25DbGljaz17c2lnbk91dH0gLz47XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJTaWduT3V0QnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/userSignOutButton/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userTagFollowIntro/index.js": -/*!***************************************************!*\ - !*** ../ui/component/userTagFollowIntro/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/userTagFollowIntro/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJUYWdGb2xsb3dJbnRyby9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclRhZ0ZvbGxvd0ludHJvL2luZGV4LmpzP2VhZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEZvbGxvd2VkVGFncyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFVzZXJUYWdGb2xsb3dJbnRybyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBmb2xsb3dlZFRhZ3M6IHNlbGVjdEZvbGxvd2VkVGFncyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKFVzZXJUYWdGb2xsb3dJbnRybyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userTagFollowIntro/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userTagFollowIntro/view.jsx": -/*!***************************************************!*\ - !*** ../ui/component/userTagFollowIntro/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var component_tagsSelect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/tagsSelect */ \"../ui/component/tagsSelect/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n\n\n\n\n\n\nfunction UserChannelFollowIntro(props) {\n var onContinue = props.onContinue,\n followedTags = props.followedTags;\n var followingCount = followedTags && followedTags.length || 0;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Tag Selection')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('Select some tags to help us show you interesting things.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_4__[\"Form\"], {\n onSubmit: onContinue,\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n type: \"Submit\",\n onClick: onContinue,\n label: __('Continue'),\n disabled: followedTags.length < 1\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__body\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tagsSelect__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n hideHeader: true,\n limitShow: 300,\n help: false,\n showClose: false,\n title: __('Follow New Tags')\n }), followingCount > 0 && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n type: \"helpful\",\n message: followingCount === 1 ? __('You are currently following %followingCount% tag', {\n followingCount: followingCount\n }) : __('You are currently following %followingCount% tags', {\n followingCount: followingCount\n }),\n actionText: __('Continue'),\n onClick: onContinue\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserChannelFollowIntro);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJUYWdGb2xsb3dJbnRyby92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdXNlclRhZ0ZvbGxvd0ludHJvL3ZpZXcuanN4P2JhNzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTmFnIGZyb20gJ2NvbXBvbmVudC9jb21tb24vbmFnJztcbmltcG9ydCBUYWdzU2VsZWN0IGZyb20gJ2NvbXBvbmVudC90YWdzU2VsZWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcblxudHlwZSBQcm9wcyA9IHtcbiAgc3Vic2NyaWJlZENoYW5uZWxzOiBBcnJheTxTdWJzY3JpcHRpb24+LFxuICBvbkNvbnRpbnVlOiAoKSA9PiB2b2lkLFxuICBmb2xsb3dlZFRhZ3M6IEFycmF5PFRhZz4sXG59O1xuXG5mdW5jdGlvbiBVc2VyQ2hhbm5lbEZvbGxvd0ludHJvKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG9uQ29udGludWUsIGZvbGxvd2VkVGFncyB9ID0gcHJvcHM7XG4gIGNvbnN0IGZvbGxvd2luZ0NvdW50ID0gKGZvbGxvd2VkVGFncyAmJiBmb2xsb3dlZFRhZ3MubGVuZ3RoKSB8fCAwO1xuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGgxIGNsYXNzTmFtZT1cInNlY3Rpb25fX3RpdGxlLS1sYXJnZVwiPntfXygnVGFnIFNlbGVjdGlvbicpfTwvaDE+XG4gICAgICA8cCBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPntfXygnU2VsZWN0IHNvbWUgdGFncyB0byBoZWxwIHVzIHNob3cgeW91IGludGVyZXN0aW5nIHRoaW5ncy4nKX08L3A+XG4gICAgICA8Rm9ybSBvblN1Ym1pdD17b25Db250aW51ZX0gY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIHR5cGU9XCJTdWJtaXRcIlxuICAgICAgICAgICAgb25DbGljaz17b25Db250aW51ZX1cbiAgICAgICAgICAgIGxhYmVsPXtfXygnQ29udGludWUnKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtmb2xsb3dlZFRhZ3MubGVuZ3RoIDwgMX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRm9ybT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYm9keVwiPlxuICAgICAgICA8VGFnc1NlbGVjdCBoaWRlSGVhZGVyIGxpbWl0U2hvdz17MzAwfSBoZWxwPXtmYWxzZX0gc2hvd0Nsb3NlPXtmYWxzZX0gdGl0bGU9e19fKCdGb2xsb3cgTmV3IFRhZ3MnKX0gLz5cbiAgICAgICAge2ZvbGxvd2luZ0NvdW50ID4gMCAmJiAoXG4gICAgICAgICAgPE5hZ1xuICAgICAgICAgICAgdHlwZT1cImhlbHBmdWxcIlxuICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgIGZvbGxvd2luZ0NvdW50ID09PSAxXG4gICAgICAgICAgICAgICAgPyBfXygnWW91IGFyZSBjdXJyZW50bHkgZm9sbG93aW5nICVmb2xsb3dpbmdDb3VudCUgdGFnJywgeyBmb2xsb3dpbmdDb3VudCB9KVxuICAgICAgICAgICAgICAgIDogX18oJ1lvdSBhcmUgY3VycmVudGx5IGZvbGxvd2luZyAlZm9sbG93aW5nQ291bnQlIHRhZ3MnLCB7IGZvbGxvd2luZ0NvdW50IH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25UZXh0PXtfXygnQ29udGludWUnKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ29udGludWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJDaGFubmVsRm9sbG93SW50cm87XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBUkE7QUFjQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userTagFollowIntro/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/userVerify/index.js": -/*!*******************************************!*\ - !*** ../ui/component/userVerify/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/userVerify/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n var selectReward = Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectRewardByType\"])();\n return {\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectIdentityVerifyIsPending\"])(state),\n errorMessage: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectIdentityVerifyErrorMessage\"])(state),\n reward: selectReward(state, lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"rewards\"].TYPE_NEW_USER)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n verifyUserIdentity: function verifyUserIdentity(token) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doUserIdentityVerify\"])(token));\n },\n verifyPhone: function verifyPhone() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"PHONE_COLLECTION\"]));\n },\n fetchUser: function fetchUser() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doUserFetch\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJWZXJpZnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJWZXJpZnkvaW5kZXguanM/YzY3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7XG4gIGRvVXNlcklkZW50aXR5VmVyaWZ5LFxuICBkb1VzZXJGZXRjaCxcbiAgcmV3YXJkcyxcbiAgbWFrZVNlbGVjdFJld2FyZEJ5VHlwZSxcbiAgc2VsZWN0SWRlbnRpdHlWZXJpZnlJc1BlbmRpbmcsXG4gIHNlbGVjdElkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBVc2VyVmVyaWZ5IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+IHtcbiAgY29uc3Qgc2VsZWN0UmV3YXJkID0gbWFrZVNlbGVjdFJld2FyZEJ5VHlwZSgpO1xuXG4gIHJldHVybiB7XG4gICAgaXNQZW5kaW5nOiBzZWxlY3RJZGVudGl0eVZlcmlmeUlzUGVuZGluZyhzdGF0ZSksXG4gICAgZXJyb3JNZXNzYWdlOiBzZWxlY3RJZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZShzdGF0ZSksXG4gICAgcmV3YXJkOiBzZWxlY3RSZXdhcmQoc3RhdGUsIHJld2FyZHMuVFlQRV9ORVdfVVNFUiksXG4gIH07XG59O1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgdmVyaWZ5VXNlcklkZW50aXR5OiB0b2tlbiA9PiBkaXNwYXRjaChkb1VzZXJJZGVudGl0eVZlcmlmeSh0b2tlbikpLFxuICB2ZXJpZnlQaG9uZTogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLlBIT05FX0NPTExFQ1RJT04pKSxcbiAgZmV0Y2hVc2VyOiAoKSA9PiBkaXNwYXRjaChkb1VzZXJGZXRjaCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoVXNlclZlcmlmeSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQUNBO0FBU0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/userVerify/index.js\n"); - -/***/ }), - -/***/ "../ui/component/userVerify/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/userVerify/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_cardVerify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/cardVerify */ \"../ui/component/cardVerify/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\nvar UserVerify = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(UserVerify, _React$PureComponent);\n\n function UserVerify() {\n var _this;\n\n _classCallCheck(this, UserVerify);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(UserVerify).call(this));\n _assertThisInitialized(_this).onToken = _this.onToken.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(UserVerify, [{\n key: \"onToken\",\n value: function onToken(data) {\n this.props.verifyUserIdentity(data.id);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n errorMessage = _this$props.errorMessage,\n isPending = _this$props.isPending,\n verifyPhone = _this$props.verifyPhone,\n fetchUser = _this$props.fetchUser,\n onSkip = _this$props.onSkip;\n var skipButtonProps = {\n onClick: onSkip\n };\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"section\", {\n className: \"section__header\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, __('Rewards Validation')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n rewards_program: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Rewards Program'),\n href: \"https://lbry.com/faq/rewards\"\n })\n }\n }, \"If you'd like to participate our %rewards_program% to earn credits, please complete one of the steps below to be validated.\"), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: function onClick() {\n return fetchUser();\n },\n button: \"link\",\n label: __('Refresh')\n }), \" \", 'or', ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, skipButtonProps, {\n button: \"link\",\n label: __('Skip')\n })), \".\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('This step is not required to use LBRY, and not all users or regions may qualify.'))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"PHONE\"],\n title: __('Proof via Text'),\n subtitle: __('You will receive an SMS text message confirming that your phone number is correct. Does not work for Canada and possibly other regions'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: function onClick() {\n verifyPhone();\n },\n button: \"primary\",\n label: __('Verify Phone Number')\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('Standard messaging rates apply. LBRY will not text or call you otherwise. Having trouble?'), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/phone\",\n label: __('Read more.')\n })))\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__divider\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"hr\", null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('OR'))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"WALLET\"],\n title: __('Proof via Credit'),\n subtitle: __('If you have a valid credit or debit card, you can use it to instantly prove your humanity. LBRY does not store your credit card information. There is no charge at all for this, now or in the future.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, errorMessage && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"error-text\"\n }, errorMessage), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_cardVerify__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n label: __('Verify Card'),\n disabled: isPending,\n token: this.onToken,\n stripeKey: lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"Lbryio\"].getStripeToken()\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('A $1 authorization may temporarily appear with your provider.'), ' ', react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/identity-requirements\",\n label: __('Read more')\n }), \".\"))\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__divider\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"hr\", null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('OR'))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHAT\"],\n title: __('Proof via Chat'),\n subtitle: __('A moderator capable of approving you is typically available in the discord server. See the #rewards-approval instructions carefully and do not message any moderators directly. This process will likely involve providing proof of a stable and established online or real-life identity.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"https://chat.lbry.com\",\n button: \"primary\",\n label: __('Join LBRY Chat')\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __(\"We're friendly. We promise.\")))\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__divider\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"hr\", null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('OR'))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n title: __('Skip'),\n subtitle: __('Rewards validation is optional.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, skipButtonProps, {\n button: \"primary\",\n label: __('Continue Without Rewards')\n })))\n })));\n }\n }]);\n\n return UserVerify;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UserVerify);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3VzZXJWZXJpZnkvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3VzZXJWZXJpZnkvdmlldy5qc3g/NmNkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ2FyZFZlcmlmeSBmcm9tICdjb21wb25lbnQvY2FyZFZlcmlmeSc7XG5pbXBvcnQgeyBMYnJ5aW8gfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgZXJyb3JNZXNzYWdlOiA/c3RyaW5nLFxuICBpc1BlbmRpbmc6IGJvb2xlYW4sXG4gIHZlcmlmeVVzZXJJZGVudGl0eTogc3RyaW5nID0+IHZvaWQsXG4gIHZlcmlmeVBob25lOiAoKSA9PiB2b2lkLFxuICBmZXRjaFVzZXI6ICgpID0+IHZvaWQsXG4gIHNraXBMaW5rPzogc3RyaW5nLFxuICBvblNraXA6ICgpID0+IHZvaWQsXG59O1xuXG5jbGFzcyBVc2VyVmVyaWZ5IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgKHRoaXM6IGFueSkub25Ub2tlbiA9IHRoaXMub25Ub2tlbi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgb25Ub2tlbihkYXRhOiB7IGlkOiBzdHJpbmcgfSkge1xuICAgIHRoaXMucHJvcHMudmVyaWZ5VXNlcklkZW50aXR5KGRhdGEuaWQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZXJyb3JNZXNzYWdlLCBpc1BlbmRpbmcsIHZlcmlmeVBob25lLCBmZXRjaFVzZXIsIG9uU2tpcCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBza2lwQnV0dG9uUHJvcHMgPSB7XG4gICAgICBvbkNsaWNrOiBvblNraXAsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInNlY3Rpb25fX2hlYWRlclwiPlxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oJ1Jld2FyZHMgVmFsaWRhdGlvbicpfTwvaDE+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgcmV3YXJkc19wcm9ncmFtOiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ1Jld2FyZHMgUHJvZ3JhbScpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvcmV3YXJkc1wiIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgSWYgeW91J2QgbGlrZSB0byBwYXJ0aWNpcGF0ZSBvdXIgJXJld2FyZHNfcHJvZ3JhbSUgdG8gZWFybiBjcmVkaXRzLCBwbGVhc2UgY29tcGxldGUgb25lIG9mIHRoZSBzdGVwcyBiZWxvd1xuICAgICAgICAgICAgICB0byBiZSB2YWxpZGF0ZWQuXG4gICAgICAgICAgICA8L0kxOG5NZXNzYWdlPnsnICd9XG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IGZldGNoVXNlcigpfSBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdSZWZyZXNoJyl9IC8+IHsnb3InfXsnICd9XG4gICAgICAgICAgICA8QnV0dG9uIHsuLi5za2lwQnV0dG9uUHJvcHN9IGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ1NraXAnKX0gLz4uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwPntfXygnVGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCB0byB1c2UgTEJSWSwgYW5kIG5vdCBhbGwgdXNlcnMgb3IgcmVnaW9ucyBtYXkgcXVhbGlmeS4nKX08L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25cIj5cbiAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgaWNvbj17SUNPTlMuUEhPTkV9XG4gICAgICAgICAgICB0aXRsZT17X18oJ1Byb29mIHZpYSBUZXh0Jyl9XG4gICAgICAgICAgICBzdWJ0aXRsZT17X18oXG4gICAgICAgICAgICAgICdZb3Ugd2lsbCByZWNlaXZlIGFuIFNNUyB0ZXh0IG1lc3NhZ2UgY29uZmlybWluZyB0aGF0IHlvdXIgcGhvbmUgbnVtYmVyIGlzIGNvcnJlY3QuIERvZXMgbm90IHdvcmsgZm9yIENhbmFkYSBhbmQgcG9zc2libHkgb3RoZXIgcmVnaW9ucydcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5UGhvbmUoKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVmVyaWZ5IFBob25lIE51bWJlcicpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgICAgICAgICAge19fKCdTdGFuZGFyZCBtZXNzYWdpbmcgcmF0ZXMgYXBwbHkuIExCUlkgd2lsbCBub3QgdGV4dCBvciBjYWxsIHlvdSBvdGhlcndpc2UuIEhhdmluZyB0cm91YmxlPycpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvcGhvbmVcIiBsYWJlbD17X18oJ1JlYWQgbW9yZS4nKX0gLz5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fZGl2aWRlclwiPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICA8cD57X18oJ09SJyl9PC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPENhcmRcbiAgICAgICAgICAgIGljb249e0lDT05TLldBTExFVH1cbiAgICAgICAgICAgIHRpdGxlPXtfXygnUHJvb2YgdmlhIENyZWRpdCcpfVxuICAgICAgICAgICAgc3VidGl0bGU9e19fKFxuICAgICAgICAgICAgICAnSWYgeW91IGhhdmUgYSB2YWxpZCBjcmVkaXQgb3IgZGViaXQgY2FyZCwgeW91IGNhbiB1c2UgaXQgdG8gaW5zdGFudGx5IHByb3ZlIHlvdXIgaHVtYW5pdHkuIExCUlkgZG9lcyBub3Qgc3RvcmUgeW91ciBjcmVkaXQgY2FyZCBpbmZvcm1hdGlvbi4gVGhlcmUgaXMgbm8gY2hhcmdlIGF0IGFsbCBmb3IgdGhpcywgbm93IG9yIGluIHRoZSBmdXR1cmUuJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2Vycm9yTWVzc2FnZSAmJiA8cCBjbGFzc05hbWU9XCJlcnJvci10ZXh0XCI+e2Vycm9yTWVzc2FnZX08L3A+fVxuICAgICAgICAgICAgICAgIDxDYXJkVmVyaWZ5XG4gICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1ZlcmlmeSBDYXJkJyl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNQZW5kaW5nfVxuICAgICAgICAgICAgICAgICAgdG9rZW49e3RoaXMub25Ub2tlbn1cbiAgICAgICAgICAgICAgICAgIHN0cmlwZUtleT17TGJyeWlvLmdldFN0cmlwZVRva2VuKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgICAgICAgICB7X18oJ0EgJDEgYXV0aG9yaXphdGlvbiBtYXkgdGVtcG9yYXJpbHkgYXBwZWFyIHdpdGggeW91ciBwcm92aWRlci4nKX17JyAnfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL2lkZW50aXR5LXJlcXVpcmVtZW50c1wiIGxhYmVsPXtfXygnUmVhZCBtb3JlJyl9IC8+LlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19kaXZpZGVyXCI+XG4gICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgIDxwPntfXygnT1InKX08L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgaWNvbj17SUNPTlMuQ0hBVH1cbiAgICAgICAgICAgIHRpdGxlPXtfXygnUHJvb2YgdmlhIENoYXQnKX1cbiAgICAgICAgICAgIHN1YnRpdGxlPXtfXyhcbiAgICAgICAgICAgICAgJ0EgbW9kZXJhdG9yIGNhcGFibGUgb2YgYXBwcm92aW5nIHlvdSBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGluIHRoZSBkaXNjb3JkIHNlcnZlci4gU2VlIHRoZSAjcmV3YXJkcy1hcHByb3ZhbCBpbnN0cnVjdGlvbnMgY2FyZWZ1bGx5IGFuZCBkbyBub3QgbWVzc2FnZSBhbnkgbW9kZXJhdG9ycyBkaXJlY3RseS4gVGhpcyBwcm9jZXNzIHdpbGwgbGlrZWx5IGludm9sdmUgcHJvdmlkaW5nIHByb29mIG9mIGEgc3RhYmxlIGFuZCBlc3RhYmxpc2hlZCBvbmxpbmUgb3IgcmVhbC1saWZlIGlkZW50aXR5LidcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gaHJlZj1cImh0dHBzOi8vY2hhdC5sYnJ5LmNvbVwiIGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ0pvaW4gTEJSWSBDaGF0Jyl9IC8+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPntfXyhcIldlJ3JlIGZyaWVuZGx5LiBXZSBwcm9taXNlLlwiKX08L3A+XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fZGl2aWRlclwiPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICA8cD57X18oJ09SJyl9PC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPENhcmRcbiAgICAgICAgICAgIGljb249e0lDT05TLlJFTU9WRX1cbiAgICAgICAgICAgIHRpdGxlPXtfXygnU2tpcCcpfVxuICAgICAgICAgICAgc3VidGl0bGU9e19fKCdSZXdhcmRzIHZhbGlkYXRpb24gaXMgb3B0aW9uYWwuJyl9XG4gICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gey4uLnNraXBCdXR0b25Qcm9wc30gYnV0dG9uPVwicHJpbWFyeVwiIGxhYmVsPXtfXygnQ29udGludWUgV2l0aG91dCBSZXdhcmRzJyl9IC8+XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlclZlcmlmeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBSEE7QUFJQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFqQkE7QUF1QkE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFqQkE7QUF1QkE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBVEE7QUFjQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFOQTtBQWFBOzs7O0FBL0hBO0FBQ0E7QUFpSUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/userVerify/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/videoDuration/index.js": -/*!**********************************************!*\ - !*** ../ui/component/videoDuration/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/videoDuration/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZGVvRHVyYXRpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZGVvRHVyYXRpb24vaW5kZXguanM/ZDhkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsYWltRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgVmlkZW9EdXJhdGlvbiBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgbnVsbFxuKShWaWRlb0R1cmF0aW9uKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/videoDuration/index.js\n"); - -/***/ }), - -/***/ "../ui/component/videoDuration/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/videoDuration/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction VideoDuration(props) {\n var claim = props.claim,\n className = props.className;\n var video = claim && claim.value && (claim.value.video || claim.value.audio);\n var duration;\n\n if (video && video.duration) {\n // $FlowFixMe\n var date = new Date(null);\n date.setSeconds(video.duration);\n var timeString = date.toISOString().substr(11, 8);\n\n if (timeString.startsWith('00:')) {\n timeString = timeString.substr(3);\n }\n\n duration = timeString;\n }\n\n return duration ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: className\n }, duration) : null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VideoDuration);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZGVvRHVyYXRpb24vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZGVvRHVyYXRpb24vdmlldy5qc3g/MDgwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhaW06ID9TdHJlYW1DbGFpbSxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxufTtcblxuZnVuY3Rpb24gVmlkZW9EdXJhdGlvbihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjbGFpbSwgY2xhc3NOYW1lIH0gPSBwcm9wcztcblxuICBjb25zdCB2aWRlbyA9IGNsYWltICYmIGNsYWltLnZhbHVlICYmIChjbGFpbS52YWx1ZS52aWRlbyB8fCBjbGFpbS52YWx1ZS5hdWRpbyk7XG4gIGxldCBkdXJhdGlvbjtcbiAgaWYgKHZpZGVvICYmIHZpZGVvLmR1cmF0aW9uKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGxldCBkYXRlID0gbmV3IERhdGUobnVsbCk7XG4gICAgZGF0ZS5zZXRTZWNvbmRzKHZpZGVvLmR1cmF0aW9uKTtcbiAgICBsZXQgdGltZVN0cmluZyA9IGRhdGUudG9JU09TdHJpbmcoKS5zdWJzdHIoMTEsIDgpO1xuXG4gICAgaWYgKHRpbWVTdHJpbmcuc3RhcnRzV2l0aCgnMDA6JykpIHtcbiAgICAgIHRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cigzKTtcbiAgICB9XG5cbiAgICBkdXJhdGlvbiA9IHRpbWVTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gZHVyYXRpb24gPyA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2R1cmF0aW9ufTwvc3Bhbj4gOiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlb0R1cmF0aW9uO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/videoDuration/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/appViewer/index.js": -/*!**************************************************!*\ - !*** ../ui/component/viewers/appViewer/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/viewers/appViewer/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state),\n contentType: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectContentTypeForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvYXBwVmlld2VyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC92aWV3ZXJzL2FwcFZpZXdlci9pbmRleC5qcz9iNDBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksIG1ha2VTZWxlY3RDb250ZW50VHlwZUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEFwcFZpZXdlciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjb250ZW50VHlwZTogbWFrZVNlbGVjdENvbnRlbnRUeXBlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe30pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoQXBwVmlld2VyKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/appViewer/index.js\n"); - -/***/ }), - -/***/ "../ui/component/viewers/appViewer/view.jsx": -/*!**************************************************!*\ - !*** ../ui/component/viewers/appViewer/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n\n // import LoadingScreen from 'component/common/loading-screen';\n// const SANDBOX_TYPES = ['application/x-lbry', 'application/x-ext-lbry'];\n// This server exists in src/platforms/electron/startSandBox.js\n// const SANDBOX_SET_BASE_URL = 'http://localhost:5278/set/';\n// const SANDBOX_CONTENT_BASE_URL = 'http://localhost:5278';\n\nfunction AppViewer(props) {\n // const { claim, contentType } = props;\n // const [loading, setLoading] = useState(true);\n // const [appUrl, setAppUrl] = useState(false);\n // const outpoint = `${claim.txid}:${claim.nout}`;\n // useEffect(() => {\n // if (SANDBOX_TYPES.indexOf(contentType) > -1) {\n // fetch(`${SANDBOX_SET_BASE_URL}${outpoint}`)\n // .then(res => res.text())\n // .then(url => {\n // const appUrl = `${SANDBOX_CONTENT_BASE_URL}${url}`;\n // setAppUrl(appUrl);\n // setLoading(false);\n // })\n // .catch(err => {\n // setLoading(false);\n // });\n // } else {\n // setLoading(false);\n // }\n // }, [outpoint, contentType, setAppUrl, setLoading]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"content__cover--none\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: __('Sorry'),\n subtitle: __('Games and apps are currently disabled due to potential security concerns.')\n })); // return (\n // <div className=\"file-render__viewer\">\n // {!appUrl && (\n // <LoadingScreen\n // status={loading ? __('Almost there') : __('Unable to view this file in the app')}\n // spinner={loading}\n // />\n // )}\n // {appUrl && (\n // <webview\n // title=\"\"\n // sandbox=\"allow-scripts allow-forms allow-pointer-lock\"\n // src={appUrl}\n // autosize=\"on\"\n // style={{ border: 0, width: '100%', height: '100%' }}\n // useragent=\"Mozilla/5.0 AppleWebKit/537 Chrome/60 Safari/537\"\n // enableremotemodule=\"false\"\n // webpreferences=\"sandbox=true,contextIsolation=true,webviewTag=false,enableRemoteModule=false,devTools=false\"\n // />\n // )}\n // </div>\n // );\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AppViewer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvYXBwVmlld2VyL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC92aWV3ZXJzL2FwcFZpZXdlci92aWV3LmpzeD82NDNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFlyYmwgZnJvbSAnY29tcG9uZW50L3lyYmwnO1xuLy8gaW1wb3J0IExvYWRpbmdTY3JlZW4gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9sb2FkaW5nLXNjcmVlbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNvdXJjZTogc3RyaW5nLFxuICBjbGFpbTogU3RyZWFtQ2xhaW0sXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG59O1xuXG4vLyBjb25zdCBTQU5EQk9YX1RZUEVTID0gWydhcHBsaWNhdGlvbi94LWxicnknLCAnYXBwbGljYXRpb24veC1leHQtbGJyeSddO1xuXG4vLyBUaGlzIHNlcnZlciBleGlzdHMgaW4gc3JjL3BsYXRmb3Jtcy9lbGVjdHJvbi9zdGFydFNhbmRCb3guanNcbi8vIGNvbnN0IFNBTkRCT1hfU0VUX0JBU0VfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NTI3OC9zZXQvJztcbi8vIGNvbnN0IFNBTkRCT1hfQ09OVEVOVF9CQVNFX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjUyNzgnO1xuXG5mdW5jdGlvbiBBcHBWaWV3ZXIocHJvcHM6IFByb3BzKSB7XG4gIC8vIGNvbnN0IHsgY2xhaW0sIGNvbnRlbnRUeXBlIH0gPSBwcm9wcztcbiAgLy8gY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIC8vIGNvbnN0IFthcHBVcmwsIHNldEFwcFVybF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gY29uc3Qgb3V0cG9pbnQgPSBgJHtjbGFpbS50eGlkfToke2NsYWltLm5vdXR9YDtcbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAoU0FOREJPWF9UWVBFUy5pbmRleE9mKGNvbnRlbnRUeXBlKSA+IC0xKSB7XG4gIC8vICAgICBmZXRjaChgJHtTQU5EQk9YX1NFVF9CQVNFX1VSTH0ke291dHBvaW50fWApXG4gIC8vICAgICAgIC50aGVuKHJlcyA9PiByZXMudGV4dCgpKVxuICAvLyAgICAgICAudGhlbih1cmwgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGFwcFVybCA9IGAke1NBTkRCT1hfQ09OVEVOVF9CQVNFX1VSTH0ke3VybH1gO1xuICAvLyAgICAgICAgIHNldEFwcFVybChhcHBVcmwpO1xuICAvLyAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgLy8gICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgLy8gICAgICAgfSk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAvLyAgIH1cbiAgLy8gfSwgW291dHBvaW50LCBjb250ZW50VHlwZSwgc2V0QXBwVXJsLCBzZXRMb2FkaW5nXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRfX2NvdmVyLS1ub25lXCI+XG4gICAgICA8WXJibFxuICAgICAgICB0aXRsZT17X18oJ1NvcnJ5Jyl9XG4gICAgICAgIHN1YnRpdGxlPXtfXygnR2FtZXMgYW5kIGFwcHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZCBkdWUgdG8gcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zLicpfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICAvLyByZXR1cm4gKFxuICAvLyAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1yZW5kZXJfX3ZpZXdlclwiPlxuICAvLyAgICAgeyFhcHBVcmwgJiYgKFxuICAvLyAgICAgICA8TG9hZGluZ1NjcmVlblxuICAvLyAgICAgICAgIHN0YXR1cz17bG9hZGluZyA/IF9fKCdBbG1vc3QgdGhlcmUnKSA6IF9fKCdVbmFibGUgdG8gdmlldyB0aGlzIGZpbGUgaW4gdGhlIGFwcCcpfVxuICAvLyAgICAgICAgIHNwaW5uZXI9e2xvYWRpbmd9XG4gIC8vICAgICAgIC8+XG4gIC8vICAgICApfVxuICAvLyAgICAgIHthcHBVcmwgJiYgKFxuICAvLyAgICAgICA8d2Vidmlld1xuICAvLyAgICAgICAgIHRpdGxlPVwiXCJcbiAgLy8gICAgICAgICBzYW5kYm94PVwiYWxsb3ctc2NyaXB0cyBhbGxvdy1mb3JtcyBhbGxvdy1wb2ludGVyLWxvY2tcIlxuICAvLyAgICAgICAgIHNyYz17YXBwVXJsfVxuICAvLyAgICAgICAgIGF1dG9zaXplPVwib25cIlxuICAvLyAgICAgICAgIHN0eWxlPXt7IGJvcmRlcjogMCwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScgfX1cbiAgLy8gICAgICAgICB1c2VyYWdlbnQ9XCJNb3ppbGxhLzUuMCBBcHBsZVdlYktpdC81MzcgQ2hyb21lLzYwIFNhZmFyaS81MzdcIlxuICAvLyAgICAgICAgIGVuYWJsZXJlbW90ZW1vZHVsZT1cImZhbHNlXCJcbiAgLy8gICAgICAgICB3ZWJwcmVmZXJlbmNlcz1cInNhbmRib3g9dHJ1ZSxjb250ZXh0SXNvbGF0aW9uPXRydWUsd2Vidmlld1RhZz1mYWxzZSxlbmFibGVSZW1vdGVNb2R1bGU9ZmFsc2UsZGV2VG9vbHM9ZmFsc2VcIlxuICAvLyAgICAgICAvPlxuICAvLyAgICAgKX1cbiAgLy8gICA8L2Rpdj5cbiAgLy8gKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwVmlld2VyO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/viewers/appViewer/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/codeViewer.jsx": -/*!**********************************************!*\ - !*** ../ui/component/viewers/codeViewer.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var codemirror_addon_selection_mark_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! codemirror/addon/selection/mark-selection */ \"../node_modules/codemirror/addon/selection/mark-selection.js\");\n/* harmony import */ var codemirror_addon_selection_mark_selection__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(codemirror_addon_selection_mark_selection__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var codemirror_mode_go_go__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! codemirror/mode/go/go */ \"../node_modules/codemirror/mode/go/go.js\");\n/* harmony import */ var codemirror_mode_go_go__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_go_go__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var codemirror_mode_jsx_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! codemirror/mode/jsx/jsx */ \"../node_modules/codemirror/mode/jsx/jsx.js\");\n/* harmony import */ var codemirror_mode_jsx_jsx__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_jsx_jsx__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var codemirror_mode_css_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! codemirror/mode/css/css */ \"../node_modules/codemirror/mode/css/css.js\");\n/* harmony import */ var codemirror_mode_css_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_css_css__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var codemirror_mode_xml_xml__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! codemirror/mode/xml/xml */ \"../node_modules/codemirror/mode/xml/xml.js\");\n/* harmony import */ var codemirror_mode_xml_xml__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_xml_xml__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var codemirror_mode_php_php__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! codemirror/mode/php/php */ \"../node_modules/codemirror/mode/php/php.js\");\n/* harmony import */ var codemirror_mode_php_php__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_php_php__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var codemirror_mode_ruby_ruby__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! codemirror/mode/ruby/ruby */ \"../node_modules/codemirror/mode/ruby/ruby.js\");\n/* harmony import */ var codemirror_mode_ruby_ruby__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_ruby_ruby__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var codemirror_mode_clike_clike__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! codemirror/mode/clike/clike */ \"../node_modules/codemirror/mode/clike/clike.js\");\n/* harmony import */ var codemirror_mode_clike_clike__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_clike_clike__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var codemirror_mode_shell_shell__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! codemirror/mode/shell/shell */ \"../node_modules/codemirror/mode/shell/shell.js\");\n/* harmony import */ var codemirror_mode_shell_shell__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_shell_shell__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var codemirror_mode_python_python__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! codemirror/mode/python/python */ \"../node_modules/codemirror/mode/python/python.js\");\n/* harmony import */ var codemirror_mode_python_python__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_python_python__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var codemirror_mode_markdown_markdown__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! codemirror/mode/markdown/markdown */ \"../node_modules/codemirror/mode/markdown/markdown.js\");\n/* harmony import */ var codemirror_mode_markdown_markdown__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_markdown_markdown__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var codemirror_mode_javascript_javascript__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! codemirror/mode/javascript/javascript */ \"../node_modules/codemirror/mode/javascript/javascript.js\");\n/* harmony import */ var codemirror_mode_javascript_javascript__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(codemirror_mode_javascript_javascript__WEBPACK_IMPORTED_MODULE_13__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n // Addons\n\n // Syntax mode\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar CodeViewer = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CodeViewer, _React$PureComponent);\n\n function CodeViewer(props) {\n var _this;\n\n _classCallCheck(this, CodeViewer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(CodeViewer).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"textarea\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"codeMirror\", void 0);\n\n _this.codeMirror = null;\n return _this;\n }\n\n _createClass(CodeViewer, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (prevProps.theme === this.props.theme) return; // This code is duplicated with componentDidMount\n\n var theme = this.props.theme === 'dark' ? 'monokai' : 'ttcn';\n this.codeMirror.setOption('theme', theme);\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var me = this;\n var _me$props = me.props,\n theme = _me$props.theme,\n contentType = _me$props.contentType; // Init CodeMirror\n\n Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(null, /*! codemirror/lib/codemirror */ \"../node_modules/codemirror/lib/codemirror.js\", 7)).then(function (CodeMirror) {\n me.codeMirror = CodeMirror.fromTextArea(me.textarea, {\n // Auto detect syntax with file contentType\n mode: contentType,\n // Adaptive theme\n theme: theme === 'dark' ? 'monokai' : 'ttcn',\n // Hide the cursor\n readOnly: true,\n // Styled text selection\n styleSelectedText: true,\n // Additional config opts\n dragDrop: false,\n lineNumbers: true,\n lineWrapping: true\n }); // Add events\n\n me.codeMirror.on('contextmenu', util_context_menu__WEBPACK_IMPORTED_MODULE_1__[\"openSnippetMenu\"]);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var value = this.props.value;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"file-render__content\",\n onContextMenu: util_context_menu__WEBPACK_IMPORTED_MODULE_1__[\"stopContextMenu\"]\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"textarea\", {\n ref: function ref(textarea) {\n return _this2.textarea = textarea;\n },\n disabled: true,\n value: value\n }));\n }\n }]);\n\n return CodeViewer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CodeViewer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvY29kZVZpZXdlci5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvY29kZVZpZXdlci5qc3g/MDM5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBvcGVuU25pcHBldE1lbnUsIHN0b3BDb250ZXh0TWVudSB9IGZyb20gJ3V0aWwvY29udGV4dC1tZW51JztcblxuLy8gQWRkb25zXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJztcblxuLy8gU3ludGF4IG1vZGVcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2dvL2dvJztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2pzeC9qc3gnO1xuaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvY3NzL2Nzcyc7XG5pbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS94bWwveG1sJztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL3BocC9waHAnO1xuaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvcnVieS9ydWJ5JztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2NsaWtlL2NsaWtlJztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL3NoZWxsL3NoZWxsJztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL3B5dGhvbi9weXRob24nO1xuaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvbWFya2Rvd24vbWFya2Rvd24nO1xuaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0JztcblxudHlwZSBQcm9wcyA9IHtcbiAgdGhlbWU6IHN0cmluZyxcbiAgdmFsdWU6ID9zdHJpbmcsXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG59O1xuXG5jbGFzcyBDb2RlVmlld2VyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb2RlTWlycm9yID0gbnVsbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFByb3BzKTogKiB7XG4gICAgaWYgKHByZXZQcm9wcy50aGVtZSA9PT0gdGhpcy5wcm9wcy50aGVtZSkgcmV0dXJuO1xuXG4gICAgLy8gVGhpcyBjb2RlIGlzIGR1cGxpY2F0ZWQgd2l0aCBjb21wb25lbnREaWRNb3VudFxuICAgIGNvbnN0IHRoZW1lID0gdGhpcy5wcm9wcy50aGVtZSA9PT0gJ2RhcmsnID8gJ21vbm9rYWknIDogJ3R0Y24nO1xuICAgIHRoaXMuY29kZU1pcnJvci5zZXRPcHRpb24oJ3RoZW1lJywgdGhlbWUpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IHsgdGhlbWUsIGNvbnRlbnRUeXBlIH0gPSBtZS5wcm9wcztcblxuICAgIC8vIEluaXQgQ29kZU1pcnJvclxuICAgIGltcG9ydChcbiAgICAgIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29kZW1pcnJvclwiICovXG4gICAgICAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvcidcbiAgICApLnRoZW4oQ29kZU1pcnJvciA9PiB7XG4gICAgICBtZS5jb2RlTWlycm9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEobWUudGV4dGFyZWEsIHtcbiAgICAgICAgLy8gQXV0byBkZXRlY3Qgc3ludGF4IHdpdGggZmlsZSBjb250ZW50VHlwZVxuICAgICAgICBtb2RlOiBjb250ZW50VHlwZSxcbiAgICAgICAgLy8gQWRhcHRpdmUgdGhlbWVcbiAgICAgICAgdGhlbWU6IHRoZW1lID09PSAnZGFyaycgPyAnbW9ub2thaScgOiAndHRjbicsXG4gICAgICAgIC8vIEhpZGUgdGhlIGN1cnNvclxuICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgLy8gU3R5bGVkIHRleHQgc2VsZWN0aW9uXG4gICAgICAgIHN0eWxlU2VsZWN0ZWRUZXh0OiB0cnVlLFxuICAgICAgICAvLyBBZGRpdGlvbmFsIGNvbmZpZyBvcHRzXG4gICAgICAgIGRyYWdEcm9wOiBmYWxzZSxcbiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWRkIGV2ZW50c1xuICAgICAgbWUuY29kZU1pcnJvci5vbignY29udGV4dG1lbnUnLCBvcGVuU25pcHBldE1lbnUpO1xuICAgIH0pO1xuICB9XG5cbiAgdGV4dGFyZWE6ID9IVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjb2RlTWlycm9yOiBhbnk7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1yZW5kZXJfX2NvbnRlbnRcIiBvbkNvbnRleHRNZW51PXtzdG9wQ29udGV4dE1lbnV9PlxuICAgICAgICA8dGV4dGFyZWEgcmVmPXt0ZXh0YXJlYSA9PiAodGhpcy50ZXh0YXJlYSA9IHRleHRhcmVhKX0gZGlzYWJsZWQgdmFsdWU9e3ZhbHVlfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2RlVmlld2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUlBLGlLQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFuQkE7QUFxQkE7OztBQUtBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTs7OztBQXBEQTtBQUNBO0FBc0RBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/codeViewer.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/documentViewer.jsx": -/*!**************************************************!*\ - !*** ../ui/component/viewers/documentViewer.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_loading_screen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/loading-screen */ \"../ui/component/common/loading-screen.jsx\");\n/* harmony import */ var component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/markdown-preview */ \"../ui/component/common/markdown-preview.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_viewers_codeViewer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/viewers/codeViewer */ \"../ui/component/viewers/codeViewer.jsx\");\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! https */ \"../node_modules/https-browserify/index.js\");\n/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_6__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\nvar DocumentViewer = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(DocumentViewer, _React$PureComponent);\n\n function DocumentViewer(props) {\n var _this;\n\n _classCallCheck(this, DocumentViewer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(DocumentViewer).call(this, props));\n _this.state = {\n error: false,\n loading: true,\n content: null\n };\n return _this;\n }\n\n _createClass(DocumentViewer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var source = this.props.source;\n\n if (source && source.stream) {\n https__WEBPACK_IMPORTED_MODULE_6__[\"get\"](source.stream, function (response) {\n if (response.statusCode === 200) {\n var data = '';\n response.on('data', function (chunk) {\n data += chunk;\n });\n response.on('end', function () {\n this.setState({\n content: data,\n loading: false\n });\n }.bind(this));\n } else {\n this.setState({\n error: true,\n loading: false\n });\n }\n }.bind(this));\n }\n }\n }, {\n key: \"renderDocument\",\n value: function renderDocument() {\n var content = this.state.content;\n var _this$props = this.props,\n source = _this$props.source,\n theme = _this$props.theme,\n renderMode = _this$props.renderMode;\n var contentType = source.contentType;\n return renderMode === constants_file_render_modes__WEBPACK_IMPORTED_MODULE_5__[\"MARKDOWN\"] ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n body: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_markdown_preview__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n content: content\n })\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_viewers_codeViewer__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: content,\n contentType: contentType,\n theme: theme\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$state = this.state,\n error = _this$state.error,\n loading = _this$state.loading,\n content = _this$state.content;\n var isReady = content && !error;\n\n var errorMessage = __(\"Sorry, looks like we can't load the document.\");\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"file-render__viewer file-render__viewer--document\"\n }, loading && !error && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"placeholder--text-document\"\n }), error && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_loading_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n status: errorMessage,\n spinner: !error\n }), isReady && this.renderDocument());\n }\n }]);\n\n return DocumentViewer;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (DocumentViewer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvZG9jdW1lbnRWaWV3ZXIuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC92aWV3ZXJzL2RvY3VtZW50Vmlld2VyLmpzeD9hNTg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NjcmVlbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2xvYWRpbmctc2NyZWVuJztcbmltcG9ydCBNYXJrZG93blByZXZpZXcgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9tYXJrZG93bi1wcmV2aWV3JztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgQ29kZVZpZXdlciBmcm9tICdjb21wb25lbnQvdmlld2Vycy9jb2RlVmlld2VyJztcbmltcG9ydCAqIGFzIFJFTkRFUl9NT0RFUyBmcm9tICdjb25zdGFudHMvZmlsZV9yZW5kZXJfbW9kZXMnO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG50eXBlIFByb3BzID0ge1xuICB0aGVtZTogc3RyaW5nLFxuICByZW5kZXJNb2RlOiBzdHJpbmcsXG4gIHNvdXJjZToge1xuICAgIGZpbGU6ICg/c3RyaW5nKSA9PiBhbnksXG4gICAgc3RyZWFtOiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgfSxcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGVycm9yOiBib29sZWFuLFxuICBsb2FkaW5nOiBib29sZWFuLFxuICBjb250ZW50OiA/c3RyaW5nLFxufTtcblxuY2xhc3MgRG9jdW1lbnRWaWV3ZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBjb250ZW50OiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoc291cmNlICYmIHNvdXJjZS5zdHJlYW0pIHtcbiAgICAgIGh0dHBzLmdldChcbiAgICAgICAgc291cmNlLnN0cmVhbSxcbiAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNwb25zZS5vbihcbiAgICAgICAgICAgICAgJ2VuZCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb250ZW50OiBkYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IHRydWUsIGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlckRvY3VtZW50KCkge1xuICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHNvdXJjZSwgdGhlbWUsIHJlbmRlck1vZGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBjb250ZW50VHlwZSB9ID0gc291cmNlO1xuXG4gICAgcmV0dXJuIHJlbmRlck1vZGUgPT09IFJFTkRFUl9NT0RFUy5NQVJLRE9XTiA/IChcbiAgICAgIDxDYXJkIGJvZHk9ezxNYXJrZG93blByZXZpZXcgY29udGVudD17Y29udGVudH0gLz59IC8+XG4gICAgKSA6IChcbiAgICAgIDxDb2RlVmlld2VyIHZhbHVlPXtjb250ZW50fSBjb250ZW50VHlwZT17Y29udGVudFR5cGV9IHRoZW1lPXt0aGVtZX0gLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZXJyb3IsIGxvYWRpbmcsIGNvbnRlbnQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXNSZWFkeSA9IGNvbnRlbnQgJiYgIWVycm9yO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IF9fKFwiU29ycnksIGxvb2tzIGxpa2Ugd2UgY2FuJ3QgbG9hZCB0aGUgZG9jdW1lbnQuXCIpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1yZW5kZXJfX3ZpZXdlciBmaWxlLXJlbmRlcl9fdmlld2VyLS1kb2N1bWVudFwiPlxuICAgICAgICB7bG9hZGluZyAmJiAhZXJyb3IgJiYgPGRpdiBjbGFzc05hbWU9XCJwbGFjZWhvbGRlci0tdGV4dC1kb2N1bWVudFwiIC8+fVxuICAgICAgICB7ZXJyb3IgJiYgPExvYWRpbmdTY3JlZW4gc3RhdHVzPXtlcnJvck1lc3NhZ2V9IHNwaW5uZXI9eyFlcnJvcn0gLz59XG4gICAgICAgIHtpc1JlYWR5ICYmIHRoaXMucmVuZGVyRG9jdW1lbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRG9jdW1lbnRWaWV3ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBT0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFQQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFkQTtBQWlCQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBSUE7Ozs7QUEzREE7QUFDQTtBQTZEQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/documentViewer.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/htmlViewer.jsx": -/*!**********************************************!*\ - !*** ../ui/component/viewers/htmlViewer.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar HtmlViewer = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(HtmlViewer, _React$PureComponent);\n\n function HtmlViewer(props) {\n var _this;\n\n _classCallCheck(this, HtmlViewer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(HtmlViewer).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"iframe\", void 0);\n\n _this.state = {\n loading: true\n };\n _this.iframe = react__WEBPACK_IMPORTED_MODULE_0__[\"createRef\"]();\n return _this;\n }\n\n _createClass(HtmlViewer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n var resize = function resize() {\n var _this2$iframe$current = _this2.iframe.current.contentDocument.body,\n scrollHeight = _this2$iframe$current.scrollHeight,\n scrollWidth = _this2$iframe$current.scrollWidth;\n _this2.iframe.current.style.height = \"\".concat(scrollHeight, \"px\");\n _this2.iframe.current.style.width = \"\".concat(scrollWidth, \"px\");\n };\n\n this.iframe.current.onload = function () {\n _this2.setState({\n loading: false\n });\n\n resize();\n };\n\n this.iframe.current.resize = function () {\n return resize();\n };\n }\n }, {\n key: \"render\",\n value: function render() {\n var source = this.props.source;\n var loading = this.state.loading;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"file-render__viewer file-render__viewer--html file-render__viewer--iframe\",\n onContextMenu: util_context_menu__WEBPACK_IMPORTED_MODULE_1__[\"stopContextMenu\"]\n }, loading && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"placeholder--text-document\"\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"iframe\", {\n ref: this.iframe,\n hidden: loading,\n sandbox: \"\",\n title: __('File preview'),\n src: source\n }));\n }\n }]);\n\n return HtmlViewer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (HtmlViewer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvaHRtbFZpZXdlci5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvaHRtbFZpZXdlci5qc3g/ZWU4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3RvcENvbnRleHRNZW51IH0gZnJvbSAndXRpbC9jb250ZXh0LW1lbnUnO1xuXG50eXBlIFByb3BzID0ge1xuICBzb3VyY2U6IHN0cmluZyxcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGxvYWRpbmc6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBIdG1sVmlld2VyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgaWZyYW1lOiBSZWFjdC5FbGVtZW50UmVmPGFueT47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBsb2FkaW5nOiB0cnVlIH07XG4gICAgdGhpcy5pZnJhbWUgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxXaWR0aCB9ID0gdGhpcy5pZnJhbWUuY3VycmVudC5jb250ZW50RG9jdW1lbnQuYm9keTtcbiAgICAgIHRoaXMuaWZyYW1lLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7c2Nyb2xsSGVpZ2h0fXB4YDtcbiAgICAgIHRoaXMuaWZyYW1lLmN1cnJlbnQuc3R5bGUud2lkdGggPSBgJHtzY3JvbGxXaWR0aH1weGA7XG4gICAgfTtcbiAgICB0aGlzLmlmcmFtZS5jdXJyZW50Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIHJlc2l6ZSgpO1xuICAgIH07XG4gICAgdGhpcy5pZnJhbWUuY3VycmVudC5yZXNpemUgPSAoKSA9PiByZXNpemUoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGxvYWRpbmcgfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmlsZS1yZW5kZXJfX3ZpZXdlciBmaWxlLXJlbmRlcl9fdmlld2VyLS1odG1sIGZpbGUtcmVuZGVyX192aWV3ZXItLWlmcmFtZVwiXG4gICAgICAgIG9uQ29udGV4dE1lbnU9e3N0b3BDb250ZXh0TWVudX1cbiAgICAgID5cbiAgICAgICAge2xvYWRpbmcgJiYgPGRpdiBjbGFzc05hbWU9XCJwbGFjZWhvbGRlci0tdGV4dC1kb2N1bWVudFwiIC8+fVxuICAgICAgICB7fVxuICAgICAgICB7fVxuICAgICAgICA8aWZyYW1lIHJlZj17dGhpcy5pZnJhbWV9IGhpZGRlbj17bG9hZGluZ30gc2FuZGJveD1cIlwiIHRpdGxlPXtfXygnRmlsZSBwcmV2aWV3Jyl9IHNyYz17c291cmNlfSAvPlxuICAgICAgICB7fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIdG1sVmlld2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQVNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBSUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBSEE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUZBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7Ozs7QUFwQ0E7QUFDQTtBQXNDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/htmlViewer.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/imageViewer.jsx": -/*!***********************************************!*\ - !*** ../ui/component/viewers/imageViewer.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction ImageViewer(props) {\n var source = props.source;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"file-render__viewer\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n src: source\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImageViewer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvaW1hZ2VWaWV3ZXIuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC92aWV3ZXJzL2ltYWdlVmlld2VyLmpzeD80YmNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICBzb3VyY2U6IHN0cmluZyxcbn07XG5cbmZ1bmN0aW9uIEltYWdlVmlld2VyKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHNvdXJjZSB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLXJlbmRlcl9fdmlld2VyXCI+XG4gICAgICA8aW1nIHNyYz17c291cmNlfSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVZpZXdlcjtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/imageViewer.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/pdfViewer.jsx": -/*!*********************************************!*\ - !*** ../ui/component/viewers/pdfViewer.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var component_IframeReact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/IframeReact */ \"../ui/component/IframeReact/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar PdfViewer = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(PdfViewer, _React$PureComponent);\n\n function PdfViewer() {\n _classCallCheck(this, PdfViewer);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(PdfViewer).apply(this, arguments));\n }\n\n _createClass(PdfViewer, [{\n key: \"render\",\n value: function render() {\n var source = this.props.source;\n var src = true ? source : undefined;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"file-render__viewer file-render__viewer--document\",\n onContextMenu: util_context_menu__WEBPACK_IMPORTED_MODULE_1__[\"stopContextMenu\"]\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"file-render__viewer file-render__viewer--iframe\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_IframeReact__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n title: __('File preview'),\n src: src\n })));\n }\n }]);\n\n return PdfViewer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PdfViewer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvcGRmVmlld2VyLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvdmlld2Vycy9wZGZWaWV3ZXIuanN4PzY1NzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0b3BDb250ZXh0TWVudSB9IGZyb20gJ3V0aWwvY29udGV4dC1tZW51JztcbmltcG9ydCBJZnJhbWVSZWFjdCBmcm9tICdjb21wb25lbnQvSWZyYW1lUmVhY3QnO1xuXG50eXBlIFByb3BzID0ge1xuICBzb3VyY2U6IHN0cmluZyxcbn07XG5cbmNsYXNzIFBkZlZpZXdlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgc291cmNlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNyYyA9IElTX1dFQiA/IHNvdXJjZSA6IGBmaWxlOi8vJHtzb3VyY2V9YDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLXJlbmRlcl9fdmlld2VyIGZpbGUtcmVuZGVyX192aWV3ZXItLWRvY3VtZW50XCIgb25Db250ZXh0TWVudT17c3RvcENvbnRleHRNZW51fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLXJlbmRlcl9fdmlld2VyIGZpbGUtcmVuZGVyX192aWV3ZXItLWlmcmFtZVwiPlxuICAgICAgICAgIDxJZnJhbWVSZWFjdCB0aXRsZT17X18oJ0ZpbGUgcHJldmlldycpfSBzcmM9e3NyY30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBkZlZpZXdlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFJQTs7OztBQVhBO0FBQ0E7QUFhQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/pdfViewer.jsx\n"); - -/***/ }), - -/***/ "../ui/component/viewers/videoViewer/index.js": -/*!****************************************************!*\ - !*** ../ui/component/viewers/videoViewer/index.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/component/viewers/videoViewer/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var search = props.location.search;\n var urlParams = new URLSearchParams(search);\n var autoplay = urlParams.get('autoplay');\n var position = urlParams.get('t');\n return {\n autoplayParam: autoplay,\n volume: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_3__[\"selectVolume\"])(state),\n muted: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_3__[\"selectMute\"])(state),\n position: position,\n hasFileInfo: Boolean(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(props.uri)(state)),\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n changeVolume: function changeVolume(volume) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doChangeVolume\"])(volume));\n },\n savePosition: function savePosition(uri, position) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"savePosition\"])(uri, position));\n },\n changeMute: function changeMute(muted) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doChangeMute\"])(muted));\n },\n setPlayingUri: function setPlayingUri(uri) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"doSetPlayingUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_6__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvdmlkZW9WaWV3ZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvdmlkZW9WaWV3ZXIvaW5kZXguanM/YTEzOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsYWltRm9yVXJpLCBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmksIG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGRvQ2hhbmdlVm9sdW1lLCBkb0NoYW5nZU11dGUgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBzZWxlY3RWb2x1bWUsIHNlbGVjdE11dGUgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvYXBwJztcbmltcG9ydCB7IHNhdmVQb3NpdGlvbiwgZG9TZXRQbGF5aW5nVXJpIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCBWaWRlb1ZpZXdlciBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgY29uc3QgeyBzZWFyY2ggfSA9IHByb3BzLmxvY2F0aW9uO1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gIGNvbnN0IGF1dG9wbGF5ID0gdXJsUGFyYW1zLmdldCgnYXV0b3BsYXknKTtcbiAgY29uc3QgcG9zaXRpb24gPSB1cmxQYXJhbXMuZ2V0KCd0Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICBhdXRvcGxheVBhcmFtOiBhdXRvcGxheSxcbiAgICB2b2x1bWU6IHNlbGVjdFZvbHVtZShzdGF0ZSksXG4gICAgbXV0ZWQ6IHNlbGVjdE11dGUoc3RhdGUpLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBoYXNGaWxlSW5mbzogQm9vbGVhbihtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSkpLFxuICAgIHRodW1ibmFpbDogbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNoYW5nZVZvbHVtZTogdm9sdW1lID0+IGRpc3BhdGNoKGRvQ2hhbmdlVm9sdW1lKHZvbHVtZSkpLFxuICBzYXZlUG9zaXRpb246ICh1cmksIHBvc2l0aW9uKSA9PiBkaXNwYXRjaChzYXZlUG9zaXRpb24odXJpLCBwb3NpdGlvbikpLFxuICBjaGFuZ2VNdXRlOiBtdXRlZCA9PiBkaXNwYXRjaChkb0NoYW5nZU11dGUobXV0ZWQpKSxcbiAgc2V0UGxheWluZ1VyaTogdXJpID0+IGRpc3BhdGNoKGRvU2V0UGxheWluZ1VyaSh1cmkpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShWaWRlb1ZpZXdlcikpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQU5BO0FBQ0E7QUFnQkE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFBQTtBQUpBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/viewers/videoViewer/index.js\n"); - -/***/ }), - -/***/ "../ui/component/viewers/videoViewer/view.jsx": -/*!****************************************************!*\ - !*** ../ui/component/viewers/videoViewer/view.jsx ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_context_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/context-menu */ \"../ui/util/context-menu.js\");\n/* harmony import */ var video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! video.js/dist/alt/video.core.novtt.min.js */ \"../node_modules/video.js/dist/alt/video.core.novtt.min.js\");\n/* harmony import */ var video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var video_js_dist_alt_video_js_cdn_min_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! video.js/dist/alt/video-js-cdn.min.css */ \"../node_modules/video.js/dist/alt/video-js-cdn.min.css\");\n/* harmony import */ var video_js_dist_alt_video_js_cdn_min_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(video_js_dist_alt_video_js_cdn_min_css__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var videojs_event_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! videojs-event-tracking */ \"../node_modules/videojs-event-tracking/dist/videojs-event-tracking.es.js\");\n/* harmony import */ var util_detect_typing__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/detect-typing */ \"../ui/util/detect-typing.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var page_embedWrapper_view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! page/embedWrapper/view */ \"../ui/page/embedWrapper/view.jsx\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\nvar F11_KEYCODE = 122;\nvar SPACE_BAR_KEYCODE = 32;\nvar SMALL_F_KEYCODE = 70;\nvar SMALL_M_KEYCODE = 77;\nvar ARROW_LEFT_KEYCODE = 37;\nvar ARROW_RIGHT_KEYCODE = 39;\nvar FULLSCREEN_KEYCODE = SMALL_F_KEYCODE;\nvar MUTE_KEYCODE = SMALL_M_KEYCODE;\nvar SEEK_FORWARD_KEYCODE = ARROW_RIGHT_KEYCODE;\nvar SEEK_BACKWARD_KEYCODE = ARROW_LEFT_KEYCODE;\nvar SEEK_STEP = 10; // time to seek in seconds\n\nvar VIDEO_JS_OPTIONS = {\n controls: true,\n autoplay: true,\n preload: 'auto',\n playbackRates: [0.25, 0.5, 0.75, 1, 1.1, 1.25, 1.5, 1.75, 2],\n responsive: true\n};\n\nif (!Object.keys(video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2___default.a.getPlugins()).includes('eventTracking')) {\n video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2___default.a.registerPlugin('eventTracking', videojs_event_tracking__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n}\n\nfunction VideoViewer(props) {\n var contentType = props.contentType,\n source = props.source,\n onEndedCb = props.onEndedCb,\n onStartedCb = props.onStartedCb,\n changeVolume = props.changeVolume,\n changeMute = props.changeMute,\n volume = props.volume,\n muted = props.muted,\n thumbnail = props.thumbnail,\n position = props.position,\n claim = props.claim,\n autoplayParam = props.autoplayParam;\n var claimId = claim && claim.claim_id;\n var videoRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n var isAudio = contentType.includes('audio');\n var embedded = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(page_embedWrapper_view__WEBPACK_IMPORTED_MODULE_7__[\"EmbedContext\"]);\n\n if (embedded && !autoplayParam) {\n VIDEO_JS_OPTIONS.autoplay = false;\n }\n\n if (autoplayParam) {\n VIDEO_JS_OPTIONS.muted = true;\n }\n\n var forcePlayer = constants_claim__WEBPACK_IMPORTED_MODULE_8__[\"FORCE_CONTENT_TYPE_PLAYER\"].includes(contentType);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n requireRedraw = _useState2[0],\n setRequireRedraw = _useState2[1];\n\n var player;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var videoNode = videoRef.current;\n\n var videoJsOptions = _objectSpread({}, VIDEO_JS_OPTIONS, {\n sources: [{\n src: source,\n type: forcePlayer ? 'video/mp4' : contentType\n }],\n plugins: {\n eventTracking: true\n }\n }); // thumb looks bad in app, and if autoplay, flashing poster is annoying\n\n\n if (isAudio || embedded && !autoplayParam) {\n videoJsOptions.poster = thumbnail;\n }\n\n if (!requireRedraw) {\n player = video_js_dist_alt_video_core_novtt_min_js__WEBPACK_IMPORTED_MODULE_2___default()(videoNode, videoJsOptions, function () {\n if (!autoplayParam) player.volume(volume);\n player.muted(autoplayParam || muted);\n });\n }\n\n return function () {\n if (!player) {\n return;\n } // Video.js has a player.dispose() function that is meant to cleanup a previous video\n // We can't use this because it does some weird stuff to remove the video element from the page\n // This makes it really hard to use because the ref we keep still thinks it's on the page\n // requireRedraw just makes it so the video component is removed from the page _by react_\n // Then it's set to false immediately after so we can re-mount a new player\n\n\n setRequireRedraw(true);\n };\n }, [videoRef, source, contentType, setRequireRedraw, requireRedraw]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (requireRedraw) {\n setRequireRedraw(false);\n }\n }, [requireRedraw]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n function handleKeyDown(e) {\n var videoNode = videoRef.current;\n\n if (!videoNode || Object(util_detect_typing__WEBPACK_IMPORTED_MODULE_5__[\"default\"])()) {\n return;\n }\n\n if (e.keyCode === SPACE_BAR_KEYCODE) {\n videoNode.paused ? videoNode.play() : videoNode.pause();\n } // Fullscreen toggle shortcuts\n\n\n if (e.keyCode === FULLSCREEN_KEYCODE || e.keyCode === F11_KEYCODE) {\n if (!player.isFullscreen()) {\n player.requestFullscreen();\n } else {\n player.exitFullscreen();\n }\n } // Mute/Unmute Shortcuts\n\n\n if (e.keyCode === MUTE_KEYCODE) {\n videoNode.muted = !videoNode.muted;\n } // Seeking Shortcuts\n\n\n var duration = videoNode.duration;\n var currentTime = videoNode.currentTime;\n\n if (e.keyCode === SEEK_FORWARD_KEYCODE) {\n var newDuration = currentTime + SEEK_STEP;\n videoNode.currentTime = newDuration > duration ? duration : newDuration;\n }\n\n if (e.keyCode === SEEK_BACKWARD_KEYCODE) {\n var _newDuration = currentTime - SEEK_STEP;\n\n videoNode.currentTime = _newDuration < 0 ? 0 : _newDuration;\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return function () {\n window.removeEventListener('keydown', handleKeyDown);\n }; // include requireRedraw here so the event listener is re-added when we need to manually remove/add the video player\n }, [videoRef, requireRedraw, player]); // player analytics\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n function doTrackingBuffered(e, data) {\n analytics__WEBPACK_IMPORTED_MODULE_6__[\"default\"].videoBufferEvent(claimId, data.currentTime);\n }\n\n function doTrackingFirstPlay(e, data) {\n analytics__WEBPACK_IMPORTED_MODULE_6__[\"default\"].videoStartEvent(claimId, data.secondsToLoad);\n onStartedCb();\n }\n\n function doEnded() {\n onEndedCb();\n }\n\n function doVolume(e) {\n var isMuted = player.muted();\n var volume = player.volume();\n changeVolume(volume);\n changeMute(isMuted);\n }\n\n if (player) {\n player.on('tracking:buffered', doTrackingBuffered);\n player.on('tracking:firstplay', doTrackingFirstPlay);\n player.on('ended', doEnded);\n player.on('volumechange', doVolume); // fixes #3498 (https://github.com/lbryio/lbry-desktop/issues/3498)\n // summary: on firefox the focus would stick to the fullscreen button which caused buggy behavior with spacebar\n // $FlowFixMe\n\n player.on('fullscreenchange', function () {\n return document.activeElement && document.activeElement.blur();\n });\n }\n\n return function () {\n if (player) {\n player.off();\n }\n };\n }, [claimId, player, changeVolume, changeMute, onEndedCb, onStartedCb]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (player && position) {\n player.currentTime(position);\n }\n }, [player, position]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"file-render__viewer\",\n onContextMenu: util_context_menu__WEBPACK_IMPORTED_MODULE_1__[\"stopContextMenu\"]\n }, !requireRedraw && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n \"data-vjs-player\": true\n }, isAudio ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"audio\", {\n ref: videoRef,\n className: \"video-js\"\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"video\", {\n ref: videoRef,\n className: \"video-js\"\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VideoViewer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvdmlkZW9WaWV3ZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3ZpZXdlcnMvdmlkZW9WaWV3ZXIvdmlldy5qc3g/ODMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0b3BDb250ZXh0TWVudSB9IGZyb20gJ3V0aWwvY29udGV4dC1tZW51JztcbmltcG9ydCB2aWRlb2pzIGZyb20gJ3ZpZGVvLmpzL2Rpc3QvYWx0L3ZpZGVvLmNvcmUubm92dHQubWluLmpzJztcbmltcG9ydCAndmlkZW8uanMvZGlzdC9hbHQvdmlkZW8tanMtY2RuLm1pbi5jc3MnO1xuaW1wb3J0IGV2ZW50VHJhY2tpbmcgZnJvbSAndmlkZW9qcy1ldmVudC10cmFja2luZyc7XG5pbXBvcnQgaXNVc2VyVHlwaW5nIGZyb20gJ3V0aWwvZGV0ZWN0LXR5cGluZyc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgeyBFbWJlZENvbnRleHQgfSBmcm9tICdwYWdlL2VtYmVkV3JhcHBlci92aWV3JztcbmltcG9ydCB7IEZPUkNFX0NPTlRFTlRfVFlQRV9QTEFZRVIgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuXG5jb25zdCBGMTFfS0VZQ09ERSA9IDEyMjtcbmNvbnN0IFNQQUNFX0JBUl9LRVlDT0RFID0gMzI7XG5jb25zdCBTTUFMTF9GX0tFWUNPREUgPSA3MDtcbmNvbnN0IFNNQUxMX01fS0VZQ09ERSA9IDc3O1xuY29uc3QgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVlDT0RFID0gMzk7XG5cbmNvbnN0IEZVTExTQ1JFRU5fS0VZQ09ERSA9IFNNQUxMX0ZfS0VZQ09ERTtcbmNvbnN0IE1VVEVfS0VZQ09ERSA9IFNNQUxMX01fS0VZQ09ERTtcblxuY29uc3QgU0VFS19GT1JXQVJEX0tFWUNPREUgPSBBUlJPV19SSUdIVF9LRVlDT0RFO1xuY29uc3QgU0VFS19CQUNLV0FSRF9LRVlDT0RFID0gQVJST1dfTEVGVF9LRVlDT0RFO1xuXG5jb25zdCBTRUVLX1NURVAgPSAxMDsgLy8gdGltZSB0byBzZWVrIGluIHNlY29uZHNcbnR5cGUgVmlkZW9KU09wdGlvbnMgPSB7XG4gIGNvbnRyb2xzOiBib29sZWFuLFxuICBhdXRvcGxheTogYm9vbGVhbixcbiAgcHJlbG9hZDogc3RyaW5nLFxuICBwbGF5YmFja1JhdGVzOiBBcnJheTxudW1iZXI+LFxuICByZXNwb25zaXZlOiBib29sZWFuLFxuICBwb3N0ZXI/OiBzdHJpbmcsXG4gIG11dGVkPzogYm9vbGVhbixcbiAgcG9zZXRlcj86IHN0cmluZyxcbn07XG5cbmNvbnN0IFZJREVPX0pTX09QVElPTlM6IFZpZGVvSlNPcHRpb25zID0ge1xuICBjb250cm9sczogdHJ1ZSxcbiAgYXV0b3BsYXk6IHRydWUsXG4gIHByZWxvYWQ6ICdhdXRvJyxcbiAgcGxheWJhY2tSYXRlczogWzAuMjUsIDAuNSwgMC43NSwgMSwgMS4xLCAxLjI1LCAxLjUsIDEuNzUsIDJdLFxuICByZXNwb25zaXZlOiB0cnVlLFxufTtcblxuaWYgKCFPYmplY3Qua2V5cyh2aWRlb2pzLmdldFBsdWdpbnMoKSkuaW5jbHVkZXMoJ2V2ZW50VHJhY2tpbmcnKSkge1xuICB2aWRlb2pzLnJlZ2lzdGVyUGx1Z2luKCdldmVudFRyYWNraW5nJywgZXZlbnRUcmFja2luZyk7XG59XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHZvbHVtZTogbnVtYmVyLFxuICBwb3NpdGlvbjogbnVtYmVyLFxuICBtdXRlZDogYm9vbGVhbixcbiAgaGFzRmlsZUluZm86IGJvb2xlYW4sXG4gIGNoYW5nZVZvbHVtZTogbnVtYmVyID0+IHZvaWQsXG4gIHNhdmVQb3NpdGlvbjogKHN0cmluZywgbnVtYmVyKSA9PiB2b2lkLFxuICBjaGFuZ2VNdXRlOiBib29sZWFuID0+IHZvaWQsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBjb250ZW50VHlwZTogc3RyaW5nLFxuICB0aHVtYm5haWw6IHN0cmluZyxcbiAgaGFzRmlsZUluZm86IGJvb2xlYW4sXG4gIGNsYWltOiBDbGFpbSxcbiAgYXV0b3BsYXlQYXJhbTogP2Jvb2xlYW4sXG4gIG9uU3RhcnRlZENiOiAoKSA9PiB2b2lkLFxuICBvbkVuZGVkQ2I6ICgpID0+IHZvaWQsXG59O1xuXG5mdW5jdGlvbiBWaWRlb1ZpZXdlcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnRUeXBlLFxuICAgIHNvdXJjZSxcbiAgICBvbkVuZGVkQ2IsXG4gICAgb25TdGFydGVkQ2IsXG4gICAgY2hhbmdlVm9sdW1lLFxuICAgIGNoYW5nZU11dGUsXG4gICAgdm9sdW1lLFxuICAgIG11dGVkLFxuICAgIHRodW1ibmFpbCxcbiAgICBwb3NpdGlvbixcbiAgICBjbGFpbSxcbiAgICBhdXRvcGxheVBhcmFtLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNsYWltSWQgPSBjbGFpbSAmJiBjbGFpbS5jbGFpbV9pZDtcbiAgY29uc3QgdmlkZW9SZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgaXNBdWRpbyA9IGNvbnRlbnRUeXBlLmluY2x1ZGVzKCdhdWRpbycpO1xuICBjb25zdCBlbWJlZGRlZCA9IHVzZUNvbnRleHQoRW1iZWRDb250ZXh0KTtcblxuICBpZiAoZW1iZWRkZWQgJiYgIWF1dG9wbGF5UGFyYW0pIHtcbiAgICBWSURFT19KU19PUFRJT05TLmF1dG9wbGF5ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoYXV0b3BsYXlQYXJhbSkge1xuICAgIFZJREVPX0pTX09QVElPTlMubXV0ZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgZm9yY2VQbGF5ZXIgPSBGT1JDRV9DT05URU5UX1RZUEVfUExBWUVSLmluY2x1ZGVzKGNvbnRlbnRUeXBlKTtcbiAgY29uc3QgW3JlcXVpcmVSZWRyYXcsIHNldFJlcXVpcmVSZWRyYXddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBsZXQgcGxheWVyO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50OiB2aWRlb05vZGUgfSA9IHZpZGVvUmVmO1xuICAgIGNvbnN0IHZpZGVvSnNPcHRpb25zID0ge1xuICAgICAgLi4uVklERU9fSlNfT1BUSU9OUyxcbiAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNyYzogc291cmNlLFxuICAgICAgICAgIHR5cGU6IGZvcmNlUGxheWVyID8gJ3ZpZGVvL21wNCcgOiBjb250ZW50VHlwZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7IGV2ZW50VHJhY2tpbmc6IHRydWUgfSxcbiAgICB9O1xuXG4gICAgLy8gdGh1bWIgbG9va3MgYmFkIGluIGFwcCwgYW5kIGlmIGF1dG9wbGF5LCBmbGFzaGluZyBwb3N0ZXIgaXMgYW5ub3lpbmdcbiAgICBpZiAoaXNBdWRpbyB8fCAoZW1iZWRkZWQgJiYgIWF1dG9wbGF5UGFyYW0pKSB7XG4gICAgICB2aWRlb0pzT3B0aW9ucy5wb3N0ZXIgPSB0aHVtYm5haWw7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1aXJlUmVkcmF3KSB7XG4gICAgICBwbGF5ZXIgPSB2aWRlb2pzKHZpZGVvTm9kZSwgdmlkZW9Kc09wdGlvbnMsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIWF1dG9wbGF5UGFyYW0pIHBsYXllci52b2x1bWUodm9sdW1lKTtcbiAgICAgICAgcGxheWVyLm11dGVkKGF1dG9wbGF5UGFyYW0gfHwgbXV0ZWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcGxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVmlkZW8uanMgaGFzIGEgcGxheWVyLmRpc3Bvc2UoKSBmdW5jdGlvbiB0aGF0IGlzIG1lYW50IHRvIGNsZWFudXAgYSBwcmV2aW91cyB2aWRlb1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgYmVjYXVzZSBpdCBkb2VzIHNvbWUgd2VpcmQgc3R1ZmYgdG8gcmVtb3ZlIHRoZSB2aWRlbyBlbGVtZW50IGZyb20gdGhlIHBhZ2VcbiAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcmVhbGx5IGhhcmQgdG8gdXNlIGJlY2F1c2UgdGhlIHJlZiB3ZSBrZWVwIHN0aWxsIHRoaW5rcyBpdCdzIG9uIHRoZSBwYWdlXG4gICAgICAvLyByZXF1aXJlUmVkcmF3IGp1c3QgbWFrZXMgaXQgc28gdGhlIHZpZGVvIGNvbXBvbmVudCBpcyByZW1vdmVkIGZyb20gdGhlIHBhZ2UgX2J5IHJlYWN0X1xuICAgICAgLy8gVGhlbiBpdCdzIHNldCB0byBmYWxzZSBpbW1lZGlhdGVseSBhZnRlciBzbyB3ZSBjYW4gcmUtbW91bnQgYSBuZXcgcGxheWVyXG4gICAgICBzZXRSZXF1aXJlUmVkcmF3KHRydWUpO1xuICAgIH07XG4gIH0sIFt2aWRlb1JlZiwgc291cmNlLCBjb250ZW50VHlwZSwgc2V0UmVxdWlyZVJlZHJhdywgcmVxdWlyZVJlZHJhd10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlcXVpcmVSZWRyYXcpIHtcbiAgICAgIHNldFJlcXVpcmVSZWRyYXcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3JlcXVpcmVSZWRyYXddKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50OiB2aWRlb05vZGUgfSA9IHZpZGVvUmVmO1xuXG4gICAgICBpZiAoIXZpZGVvTm9kZSB8fCBpc1VzZXJUeXBpbmcoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlLmtleUNvZGUgPT09IFNQQUNFX0JBUl9LRVlDT0RFKSB7XG4gICAgICAgIHZpZGVvTm9kZS5wYXVzZWQgPyB2aWRlb05vZGUucGxheSgpIDogdmlkZW9Ob2RlLnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZ1bGxzY3JlZW4gdG9nZ2xlIHNob3J0Y3V0c1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gRlVMTFNDUkVFTl9LRVlDT0RFIHx8IGUua2V5Q29kZSA9PT0gRjExX0tFWUNPREUpIHtcbiAgICAgICAgaWYgKCFwbGF5ZXIuaXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgICAgICBwbGF5ZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwbGF5ZXIuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNdXRlL1VubXV0ZSBTaG9ydGN1dHNcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IE1VVEVfS0VZQ09ERSkge1xuICAgICAgICB2aWRlb05vZGUubXV0ZWQgPSAhdmlkZW9Ob2RlLm11dGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWVraW5nIFNob3J0Y3V0c1xuICAgICAgY29uc3QgZHVyYXRpb24gPSB2aWRlb05vZGUuZHVyYXRpb247XG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IHZpZGVvTm9kZS5jdXJyZW50VGltZTtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IFNFRUtfRk9SV0FSRF9LRVlDT0RFKSB7XG4gICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gY3VycmVudFRpbWUgKyBTRUVLX1NURVA7XG4gICAgICAgIHZpZGVvTm9kZS5jdXJyZW50VGltZSA9IG5ld0R1cmF0aW9uID4gZHVyYXRpb24gPyBkdXJhdGlvbiA6IG5ld0R1cmF0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gU0VFS19CQUNLV0FSRF9LRVlDT0RFKSB7XG4gICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gY3VycmVudFRpbWUgLSBTRUVLX1NURVA7XG4gICAgICAgIHZpZGVvTm9kZS5jdXJyZW50VGltZSA9IG5ld0R1cmF0aW9uIDwgMCA/IDAgOiBuZXdEdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIH07XG5cbiAgICAvLyBpbmNsdWRlIHJlcXVpcmVSZWRyYXcgaGVyZSBzbyB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgcmUtYWRkZWQgd2hlbiB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlbW92ZS9hZGQgdGhlIHZpZGVvIHBsYXllclxuICB9LCBbdmlkZW9SZWYsIHJlcXVpcmVSZWRyYXcsIHBsYXllcl0pO1xuXG4gIC8vIHBsYXllciBhbmFseXRpY3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBkb1RyYWNraW5nQnVmZmVyZWQoZTogRXZlbnQsIGRhdGE6IGFueSkge1xuICAgICAgYW5hbHl0aWNzLnZpZGVvQnVmZmVyRXZlbnQoY2xhaW1JZCwgZGF0YS5jdXJyZW50VGltZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvVHJhY2tpbmdGaXJzdFBsYXkoZTogRXZlbnQsIGRhdGE6IGFueSkge1xuICAgICAgYW5hbHl0aWNzLnZpZGVvU3RhcnRFdmVudChjbGFpbUlkLCBkYXRhLnNlY29uZHNUb0xvYWQpO1xuICAgICAgb25TdGFydGVkQ2IoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb0VuZGVkKCkge1xuICAgICAgb25FbmRlZENiKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9Wb2x1bWUoZTogRXZlbnQpIHtcbiAgICAgIGNvbnN0IGlzTXV0ZWQgPSBwbGF5ZXIubXV0ZWQoKTtcbiAgICAgIGNvbnN0IHZvbHVtZSA9IHBsYXllci52b2x1bWUoKTtcbiAgICAgIGNoYW5nZVZvbHVtZSh2b2x1bWUpO1xuICAgICAgY2hhbmdlTXV0ZShpc011dGVkKTtcbiAgICB9XG5cbiAgICBpZiAocGxheWVyKSB7XG4gICAgICBwbGF5ZXIub24oJ3RyYWNraW5nOmJ1ZmZlcmVkJywgZG9UcmFja2luZ0J1ZmZlcmVkKTtcbiAgICAgIHBsYXllci5vbigndHJhY2tpbmc6Zmlyc3RwbGF5JywgZG9UcmFja2luZ0ZpcnN0UGxheSk7XG4gICAgICBwbGF5ZXIub24oJ2VuZGVkJywgZG9FbmRlZCk7XG4gICAgICBwbGF5ZXIub24oJ3ZvbHVtZWNoYW5nZScsIGRvVm9sdW1lKTtcblxuICAgICAgLy8gZml4ZXMgIzM0OTggKGh0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vbGJyeS1kZXNrdG9wL2lzc3Vlcy8zNDk4KVxuICAgICAgLy8gc3VtbWFyeTogb24gZmlyZWZveCB0aGUgZm9jdXMgd291bGQgc3RpY2sgdG8gdGhlIGZ1bGxzY3JlZW4gYnV0dG9uIHdoaWNoIGNhdXNlZCBidWdneSBiZWhhdmlvciB3aXRoIHNwYWNlYmFyXG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBwbGF5ZXIub24oJ2Z1bGxzY3JlZW5jaGFuZ2UnLCAoKSA9PiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHBsYXllcikge1xuICAgICAgICBwbGF5ZXIub2ZmKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2NsYWltSWQsIHBsYXllciwgY2hhbmdlVm9sdW1lLCBjaGFuZ2VNdXRlLCBvbkVuZGVkQ2IsIG9uU3RhcnRlZENiXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGxheWVyICYmIHBvc2l0aW9uKSB7XG4gICAgICBwbGF5ZXIuY3VycmVudFRpbWUocG9zaXRpb24pO1xuICAgIH1cbiAgfSwgW3BsYXllciwgcG9zaXRpb25dKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1yZW5kZXJfX3ZpZXdlclwiIG9uQ29udGV4dE1lbnU9e3N0b3BDb250ZXh0TWVudX0+XG4gICAgICB7IXJlcXVpcmVSZWRyYXcgJiYgKFxuICAgICAgICA8ZGl2IGRhdGEtdmpzLXBsYXllcj5cbiAgICAgICAgICB7aXNBdWRpbyA/IDxhdWRpbyByZWY9e3ZpZGVvUmVmfSBjbGFzc05hbWU9XCJ2aWRlby1qc1wiIC8+IDogPHZpZGVvIHJlZj17dmlkZW9SZWZ9IGNsYXNzTmFtZT1cInZpZGVvLWpzXCIgLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW9WaWV3ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUE2QkE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFBQTtBQUFBO0FBUkE7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFWQTtBQXpCQTtBQXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBQ0E7QUF0QkE7QUFDQTtBQUNBO0FBd0JBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpDQTtBQUFBO0FBQ0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBaENBO0FBdUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/viewers/videoViewer/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/walletAddress/index.js": -/*!**********************************************!*\ - !*** ../ui/component/walletAddress/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/walletAddress/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n receiveAddress: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectReceiveAddress\"])(state),\n gettingNewAddress: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectGettingNewAddress\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n checkAddressIsMine: function checkAddressIsMine(address) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doCheckAddressIsMine\"])(address));\n },\n getNewAddress: function getNewAddress() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doGetNewAddress\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldEFkZHJlc3MvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldEFkZHJlc3MvaW5kZXguanM/MWQyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9DaGVja0FkZHJlc3NJc01pbmUsIGRvR2V0TmV3QWRkcmVzcywgc2VsZWN0UmVjZWl2ZUFkZHJlc3MsIHNlbGVjdEdldHRpbmdOZXdBZGRyZXNzIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgV2FsbGV0QWRkcmVzcyBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHJlY2VpdmVBZGRyZXNzOiBzZWxlY3RSZWNlaXZlQWRkcmVzcyhzdGF0ZSksXG4gIGdldHRpbmdOZXdBZGRyZXNzOiBzZWxlY3RHZXR0aW5nTmV3QWRkcmVzcyhzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNoZWNrQWRkcmVzc0lzTWluZTogYWRkcmVzcyA9PiBkaXNwYXRjaChkb0NoZWNrQWRkcmVzc0lzTWluZShhZGRyZXNzKSksXG4gIGdldE5ld0FkZHJlc3M6ICgpID0+IGRpc3BhdGNoKGRvR2V0TmV3QWRkcmVzcygpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoV2FsbGV0QWRkcmVzcylcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/walletAddress/index.js\n"); - -/***/ }), - -/***/ "../ui/component/walletAddress/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/walletAddress/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_copyableText__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/copyableText */ \"../ui/component/copyableText/index.js\");\n/* harmony import */ var component_common_qr_code__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/qr-code */ \"../ui/component/common/qr-code.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\nvar WalletAddress = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(WalletAddress, _React$PureComponent);\n\n function WalletAddress(props) {\n var _this;\n\n _classCallCheck(this, WalletAddress);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(WalletAddress).call(this, props));\n _this.state = {\n showQR: false\n };\n _assertThisInitialized(_this).toggleQR = _this.toggleQR.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(WalletAddress, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n checkAddressIsMine = _this$props.checkAddressIsMine,\n receiveAddress = _this$props.receiveAddress,\n getNewAddress = _this$props.getNewAddress;\n\n if (!receiveAddress) {\n getNewAddress();\n } else {\n checkAddressIsMine(receiveAddress);\n }\n }\n }, {\n key: \"toggleQR\",\n value: function toggleQR() {\n this.setState({\n showQR: !this.state.showQR\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n receiveAddress = _this$props2.receiveAddress,\n getNewAddress = _this$props2.getNewAddress,\n gettingNewAddress = _this$props2.gettingNewAddress;\n var showQR = this.state.showQR;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __('Receive Credits'),\n subtitle: __('Use this address to receive LBC.'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_copyableText__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n primaryButton: true,\n label: __('Your Address'),\n copyable: receiveAddress,\n snackMessage: __('Address copied.')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, false && false, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: showQR ? __('Hide QR code') : __('Show QR code'),\n onClick: this.toggleQR\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, false && false), showQR && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_qr_code__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n value: receiveAddress,\n paddingTop: true\n }))\n });\n }\n }]);\n\n return WalletAddress;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletAddress);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldEFkZHJlc3Mvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldEFkZHJlc3Mvdmlldy5qc3g/OTA1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ29weWFibGVUZXh0IGZyb20gJ2NvbXBvbmVudC9jb3B5YWJsZVRleHQnO1xuaW1wb3J0IFFSQ29kZSBmcm9tICdjb21wb25lbnQvY29tbW9uL3FyLWNvZGUnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hlY2tBZGRyZXNzSXNNaW5lOiBzdHJpbmcgPT4gdm9pZCxcbiAgcmVjZWl2ZUFkZHJlc3M6IHN0cmluZyxcbiAgZ2V0TmV3QWRkcmVzczogKCkgPT4gdm9pZCxcbiAgZ2V0dGluZ05ld0FkZHJlc3M6IGJvb2xlYW4sXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBzaG93UVI6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBXYWxsZXRBZGRyZXNzIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNob3dRUjogZmFsc2UsXG4gICAgfTtcblxuICAgICh0aGlzOiBhbnkpLnRvZ2dsZVFSID0gdGhpcy50b2dnbGVRUi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjaGVja0FkZHJlc3NJc01pbmUsIHJlY2VpdmVBZGRyZXNzLCBnZXROZXdBZGRyZXNzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghcmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgIGdldE5ld0FkZHJlc3MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tBZGRyZXNzSXNNaW5lKHJlY2VpdmVBZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVRUigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNob3dRUjogIXRoaXMuc3RhdGUuc2hvd1FSLFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcmVjZWl2ZUFkZHJlc3MsIGdldE5ld0FkZHJlc3MsIGdldHRpbmdOZXdBZGRyZXNzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2hvd1FSIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDYXJkXG4gICAgICAgIHRpdGxlPXtfXygnUmVjZWl2ZSBDcmVkaXRzJyl9XG4gICAgICAgIHN1YnRpdGxlPXtfXygnVXNlIHRoaXMgYWRkcmVzcyB0byByZWNlaXZlIExCQy4nKX1cbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPENvcHlhYmxlVGV4dFxuICAgICAgICAgICAgICBwcmltYXJ5QnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnWW91ciBBZGRyZXNzJyl9XG4gICAgICAgICAgICAgIGNvcHlhYmxlPXtyZWNlaXZlQWRkcmVzc31cbiAgICAgICAgICAgICAgc25hY2tNZXNzYWdlPXtfXygnQWRkcmVzcyBjb3BpZWQuJyl9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgeyFJU19XRUIgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0dldCBOZXcgQWRkcmVzcycpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17Z2V0TmV3QWRkcmVzc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtnZXR0aW5nTmV3QWRkcmVzc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17c2hvd1FSID8gX18oJ0hpZGUgUVIgY29kZScpIDogX18oJ1Nob3cgUVIgY29kZScpfSBvbkNsaWNrPXt0aGlzLnRvZ2dsZVFSfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAgICAgIHshSVNfV0VCICYmXG4gICAgICAgICAgICAgICAgX18oJ1lvdSBjYW4gZ2VuZXJhdGUgYSBuZXcgYWRkcmVzcyBhdCBhbnkgdGltZSwgYW5kIGFueSBwcmV2aW91cyBhZGRyZXNzZXMgd2lsbCBjb250aW51ZSB0byB3b3JrLicpfVxuICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICB7c2hvd1FSICYmIDxRUkNvZGUgdmFsdWU9e3JlY2VpdmVBZGRyZXNzfSBwYWRkaW5nVG9wIC8+fVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXYWxsZXRBZGRyZXNzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVlBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFJQTtBQVBBO0FBUUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUFBLDBCQUVBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBNUJBO0FBaUNBOzs7O0FBaEVBO0FBQ0E7QUFrRUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/walletAddress/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/walletBalance/index.js": -/*!**********************************************!*\ - !*** ../ui/component/walletBalance/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/component/walletBalance/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state),\n totalBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTotalBalance\"])(state),\n claimsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimsBalance\"])(state) || 0,\n supportsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSupportsBalance\"])(state) || 0,\n tipsBalance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectTipsBalance\"])(state) || 0,\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectClaimedRewards\"])(state),\n hasSynced: Boolean(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectSyncHash\"])(state))\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doOpenModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"]\n})(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldEJhbGFuY2UvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldEJhbGFuY2UvaW5kZXguanM/NDgyMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgc2VsZWN0QmFsYW5jZSxcbiAgc2VsZWN0VG90YWxCYWxhbmNlLFxuICBzZWxlY3RDbGFpbXNCYWxhbmNlLFxuICBzZWxlY3RTdXBwb3J0c0JhbGFuY2UsXG4gIHNlbGVjdFRpcHNCYWxhbmNlLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgc2VsZWN0Q2xhaW1lZFJld2FyZHMsIHNlbGVjdFN5bmNIYXNoIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgV2FsbGV0QmFsYW5jZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBiYWxhbmNlOiBzZWxlY3RCYWxhbmNlKHN0YXRlKSxcbiAgdG90YWxCYWxhbmNlOiBzZWxlY3RUb3RhbEJhbGFuY2Uoc3RhdGUpLFxuICBjbGFpbXNCYWxhbmNlOiBzZWxlY3RDbGFpbXNCYWxhbmNlKHN0YXRlKSB8fCAwLFxuICBzdXBwb3J0c0JhbGFuY2U6IHNlbGVjdFN1cHBvcnRzQmFsYW5jZShzdGF0ZSkgfHwgMCxcbiAgdGlwc0JhbGFuY2U6IHNlbGVjdFRpcHNCYWxhbmNlKHN0YXRlKSB8fCAwLFxuICByZXdhcmRzOiBzZWxlY3RDbGFpbWVkUmV3YXJkcyhzdGF0ZSksXG4gIGhhc1N5bmNlZDogQm9vbGVhbihzZWxlY3RTeW5jSGFzaChzdGF0ZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAge1xuICAgIGRvT3Blbk1vZGFsLFxuICB9XG4pKFdhbGxldEJhbGFuY2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFBQTtBQUNBO0FBU0E7QUFHQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/walletBalance/index.js\n"); - -/***/ }), - -/***/ "../ui/component/walletBalance/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/walletBalance/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_common_help_link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/help-link */ \"../ui/component/common/help-link.jsx\");\n\n\n\n\n\n\n\n\n\nvar WalletBalance = function WalletBalance(props) {\n var balance = props.balance,\n claimsBalance = props.claimsBalance,\n supportsBalance = props.supportsBalance,\n tipsBalance = props.tipsBalance,\n doOpenModal = props.doOpenModal,\n hasSynced = props.hasSynced;\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"section\", {\n className: \"columns\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"h2\", {\n className: \"section__title\"\n }, __('Available Balance')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"section__title--large\"\n }, (balance || balance === 0) && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n amount: balance,\n precision: 8\n })), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"primary\",\n label: __('Your Address'),\n onClick: function onClick() {\n return doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"WALLET_RECEIVE\"]);\n }\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"secondary\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SEND\"],\n label: __('Send Credits'),\n onClick: function onClick() {\n return doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"WALLET_SEND\"]);\n }\n }))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section__flex\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sectionIcon: true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TIP\"]\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"h2\", {\n className: \"section__title--small\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"strong\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n amount: tipsBalance,\n precision: 8\n })), ' ', __('earned and bound in tips')))), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section__flex\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sectionIcon: true,\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"LOCK\"]\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"h2\", {\n className: \"section__title--small\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"strong\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n amount: claimsBalance + supportsBalance,\n precision: 8\n })), ' ', __('currently staked')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"dl\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"dt\", null, __('... in your publishes')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"dd\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n amount: claimsBalance,\n precision: 8\n })), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"dt\", null, __('... in your supports')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"dd\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n badge: false,\n amount: supportsBalance,\n precision: 8\n }))))))))));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletBalance);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldEJhbGFuY2Uvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldEJhbGFuY2Uvdmlldy5qc3g/OWI5MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ3JlZGl0QW1vdW50IGZyb20gJ2NvbXBvbmVudC9jb21tb24vY3JlZGl0LWFtb3VudCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCBIZWxwTGluayBmcm9tICdjb21wb25lbnQvY29tbW9uL2hlbHAtbGluayc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGJhbGFuY2U6IG51bWJlcixcbiAgdG90YWxCYWxhbmNlOiBudW1iZXIsXG4gIGNsYWltc0JhbGFuY2U6IG51bWJlcixcbiAgc3VwcG9ydHNCYWxhbmNlOiBudW1iZXIsXG4gIHRpcHNCYWxhbmNlOiBudW1iZXIsXG4gIGRvT3Blbk1vZGFsOiBzdHJpbmcgPT4gdm9pZCxcbiAgaGFzU3luY2VkOiBib29sZWFuLFxufTtcblxuY29uc3QgV2FsbGV0QmFsYW5jZSA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgeyBiYWxhbmNlLCBjbGFpbXNCYWxhbmNlLCBzdXBwb3J0c0JhbGFuY2UsIHRpcHNCYWxhbmNlLCBkb09wZW5Nb2RhbCwgaGFzU3luY2VkIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImNvbHVtbnNcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwic2VjdGlvbl9fdGl0bGVcIj57X18oJ0F2YWlsYWJsZSBCYWxhbmNlJyl9PC9oMj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj5cbiAgICAgICAgICAgIHsoYmFsYW5jZSB8fCBiYWxhbmNlID09PSAwKSAmJiA8Q3JlZGl0QW1vdW50IGJhZGdlPXtmYWxzZX0gYW1vdW50PXtiYWxhbmNlfSBwcmVjaXNpb249ezh9IC8+fVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdZb3VyIEFkZHJlc3MnKX0gb25DbGljaz17KCkgPT4gZG9PcGVuTW9kYWwoTU9EQUxTLldBTExFVF9SRUNFSVZFKX0gLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuU0VORH1cbiAgICAgICAgICAgICAgbGFiZWw9e19fKCdTZW5kIENyZWRpdHMnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZG9PcGVuTW9kYWwoTU9EQUxTLldBTExFVF9TRU5EKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge31cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fZmxleFwiPlxuICAgICAgICAgICAgICA8SWNvbiBzZWN0aW9uSWNvbiBpY29uPXtJQ09OUy5USVB9IC8+XG4gICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tc21hbGxcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IGFtb3VudD17dGlwc0JhbGFuY2V9IHByZWNpc2lvbj17OH0gLz5cbiAgICAgICAgICAgICAgICA8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgIHtfXygnZWFybmVkIGFuZCBib3VuZCBpbiB0aXBzJyl9XG4gICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19mbGV4XCI+XG4gICAgICAgICAgICAgIDxJY29uIHNlY3Rpb25JY29uIGljb249e0lDT05TLkxPQ0t9IC8+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInNlY3Rpb25fX3RpdGxlLS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IGFtb3VudD17Y2xhaW1zQmFsYW5jZSArIHN1cHBvcnRzQmFsYW5jZX0gcHJlY2lzaW9uPXs4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgIHtfXygnY3VycmVudGx5IHN0YWtlZCcpfVxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICA8ZHQ+e19fKCcuLi4gaW4geW91ciBwdWJsaXNoZXMnKX08L2R0PlxuICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPENyZWRpdEFtb3VudCBiYWRnZT17ZmFsc2V9IGFtb3VudD17Y2xhaW1zQmFsYW5jZX0gcHJlY2lzaW9uPXs4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2RkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkdD57X18oJy4uLiBpbiB5b3VyIHN1cHBvcnRzJyl9PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxDcmVkaXRBbW91bnQgYmFkZ2U9e2ZhbHNlfSBhbW91bnQ9e3N1cHBvcnRzQmFsYW5jZX0gcHJlY2lzaW9uPXs4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdhbGxldEJhbGFuY2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSkE7QUFXQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUF4REE7QUFDQTtBQW9FQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/walletBalance/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/walletSend/index.js": -/*!*******************************************!*\ - !*** ../ui/component/walletSend/index.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/walletSend/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(modal, props));\n }\n };\n};\n\nvar select = function select(state) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmQvaW5kZXguanM/YTc4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0QmFsYW5jZSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgV2FsbGV0U2VuZCBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBvcGVuTW9kYWw6IChtb2RhbCwgcHJvcHMpID0+IGRpc3BhdGNoKGRvT3Blbk1vZGFsKG1vZGFsLCBwcm9wcykpLFxufSk7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGJhbGFuY2U6IHNlbGVjdEJhbGFuY2Uoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoXG4gIGNvbm5lY3QoXG4gICAgc2VsZWN0LFxuICAgIHBlcmZvcm1cbiAgKShXYWxsZXRTZW5kKVxuKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/walletSend/index.js\n"); - -/***/ }), - -/***/ "../ui/component/walletSend/view.jsx": -/*!*******************************************!*\ - !*** ../ui/component/walletSend/view.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var formik__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! formik */ \"../node_modules/formik/dist/formik.es6.js\");\n/* harmony import */ var util_form_validation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/form-validation */ \"../ui/util/form-validation.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\nvar WalletSend = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(WalletSend, _React$PureComponent);\n\n function WalletSend() {\n var _this;\n\n _classCallCheck(this, WalletSend);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(WalletSend).call(this));\n _assertThisInitialized(_this).handleSubmit = _this.handleSubmit.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(WalletSend, [{\n key: \"handleSubmit\",\n value: function handleSubmit(values) {\n var openModal = this.props.openModal;\n var address = values.address,\n amount = values.amount;\n\n if (amount && address) {\n var modalProps = {\n address: address,\n amount: amount\n };\n openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CONFIRM_TRANSACTION\"], modalProps);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var balance = this.props.balance;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Send Credits'),\n subtitle: __('Send LBC to your friends or favorite creators.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(formik__WEBPACK_IMPORTED_MODULE_4__[\"Formik\"], {\n initialValues: {\n address: '',\n amount: ''\n },\n onSubmit: this.handleSubmit,\n validate: util_form_validation__WEBPACK_IMPORTED_MODULE_5__[\"validateSendTx\"],\n render: function render(_ref) {\n var values = _ref.values,\n errors = _ref.errors,\n touched = _ref.touched,\n handleChange = _ref.handleChange,\n handleBlur = _ref.handleBlur,\n handleSubmit = _ref.handleSubmit;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"Form\"], {\n onSubmit: handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"number\",\n name: \"amount\",\n label: __('Amount'),\n postfix: __('LBC'),\n className: \"form-field--price-amount\",\n affixClass: \"form-field--fix-no-height\",\n min: \"0\",\n step: \"any\",\n placeholder: \"12.34\",\n onChange: handleChange,\n onBlur: handleBlur,\n value: values.amount\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_3__[\"FormField\"], {\n type: \"text\",\n name: \"address\",\n placeholder: \"bbFxRyXXXXXXXXXXXZD8nE7XTLUxYnddTs\",\n className: \"form-field--address\",\n label: __('Recipient address'),\n onChange: handleChange,\n onBlur: handleBlur,\n value: values.address\n })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n label: __('Send'),\n disabled: !values.address || !!Object.keys(errors).length || !(parseFloat(values.amount) > 0.0) || parseFloat(values.amount) === balance\n }), !!Object.keys(errors).length || react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", {\n className: \"error-text\"\n }, !!values.address && touched.address && errors.address || !!values.amount && touched.amount && errors.amount || parseFloat(values.amount) === balance && __('Decrease amount to account for transaction fee') || parseFloat(values.amount) > balance && __('Not enough credits'))));\n }\n })\n });\n }\n }]);\n\n return WalletSend;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletSend);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmQvdmlldy5qc3g/YjAwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgTU9EQUxTIGZyb20gJ2NvbnN0YW50cy9tb2RhbF90eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IEZvcm0sIEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgeyBGb3JtaWsgfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IHsgdmFsaWRhdGVTZW5kVHggfSBmcm9tICd1dGlsL2Zvcm0tdmFsaWRhdGlvbic7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIERyYWZ0VHJhbnNhY3Rpb24gPSB7XG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgYW1vdW50OiA/bnVtYmVyLCAvLyBTbyB3ZSBjYW4gdXNlIGEgcGxhY2Vob2xkZXIgaW4gdGhlIGlucHV0XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBvcGVuTW9kYWw6IChpZDogc3RyaW5nLCB7IGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBudW1iZXIgfSkgPT4gdm9pZCxcbiAgYmFsYW5jZTogbnVtYmVyLFxufTtcblxuY2xhc3MgV2FsbGV0U2VuZCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgICh0aGlzOiBhbnkpLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQodmFsdWVzOiBEcmFmdFRyYW5zYWN0aW9uKSB7XG4gICAgY29uc3QgeyBvcGVuTW9kYWwgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBhbW91bnQgfSA9IHZhbHVlcztcbiAgICBpZiAoYW1vdW50ICYmIGFkZHJlc3MpIHtcbiAgICAgIGNvbnN0IG1vZGFsUHJvcHMgPSB7IGFkZHJlc3MsIGFtb3VudCB9O1xuICAgICAgb3Blbk1vZGFsKE1PREFMUy5DT05GSVJNX1RSQU5TQUNUSU9OLCBtb2RhbFByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBiYWxhbmNlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDYXJkXG4gICAgICAgIHRpdGxlPXtfXygnU2VuZCBDcmVkaXRzJyl9XG4gICAgICAgIHN1YnRpdGxlPXtfXygnU2VuZCBMQkMgdG8geW91ciBmcmllbmRzIG9yIGZhdm9yaXRlIGNyZWF0b3JzLicpfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8Rm9ybWlrXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXt7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgIHZhbGlkYXRlPXt2YWxpZGF0ZVNlbmRUeH1cbiAgICAgICAgICAgIHJlbmRlcj17KHsgdmFsdWVzLCBlcnJvcnMsIHRvdWNoZWQsIGhhbmRsZUNoYW5nZSwgaGFuZGxlQmx1ciwgaGFuZGxlU3VibWl0IH0pID0+IChcbiAgICAgICAgICAgICAgPEZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgICAgICAgPGZpZWxkc2V0LWdyb3VwIGNsYXNzPVwiZmllbGRzZXQtZ3JvdXAtLXNtdXNoZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0Ftb3VudCcpfVxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4PXtfXygnTEJDJyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLXByaWNlLWFtb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIGFmZml4Q2xhc3M9XCJmb3JtLWZpZWxkLS1maXgtbm8taGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjEyLjM0XCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWVzLmFtb3VudH1cbiAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYmJGeFJ5WFhYWFhYWFhYWFhaRDhuRTdYVExVeFluZGRUc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tZmllbGQtLWFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1JlY2lwaWVudCBhZGRyZXNzJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlcy5hZGRyZXNzfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0LWdyb3VwPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnU2VuZCcpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgIXZhbHVlcy5hZGRyZXNzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgISFPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICAgICEocGFyc2VGbG9hdCh2YWx1ZXMuYW1vdW50KSA+IDAuMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHZhbHVlcy5hbW91bnQpID09PSBiYWxhbmNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7ISFPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCB8fCAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImVycm9yLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7KCEhdmFsdWVzLmFkZHJlc3MgJiYgdG91Y2hlZC5hZGRyZXNzICYmIGVycm9ycy5hZGRyZXNzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCEhdmFsdWVzLmFtb3VudCAmJiB0b3VjaGVkLmFtb3VudCAmJiBlcnJvcnMuYW1vdW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlRmxvYXQodmFsdWVzLmFtb3VudCkgPT09IGJhbGFuY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX18oJ0RlY3JlYXNlIGFtb3VudCB0byBhY2NvdW50IGZvciB0cmFuc2FjdGlvbiBmZWUnKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHZhbHVlcy5hbW91bnQpID4gYmFsYW5jZSAmJiBfXygnTm90IGVub3VnaCBjcmVkaXRzJykpfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXYWxsZXRTZW5kO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQUhBO0FBSUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBWUE7QUFBQTtBQTFDQTtBQVBBO0FBSkE7QUFvRUE7Ozs7QUF4RkE7QUFDQTtBQTBGQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/walletSend/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/walletSendTip/index.js": -/*!**********************************************!*\ - !*** ../ui/component/walletSendTip/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/walletSendTip/view.jsx\");\n\n\n\n\nvar select = function select(state, props) {\n return {\n isPending: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsSendingSupport\"])(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectTitleForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(props.uri, false)(state),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n sendSupport: function sendSupport(amount, claimId, isSupport) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doSendTip\"])(amount, claimId, isSupport));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmRUaXAvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmRUaXAvaW5kZXguanM/YTYzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtcbiAgZG9TZW5kVGlwLFxuICBtYWtlU2VsZWN0VGl0bGVGb3JVcmksXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbiAgc2VsZWN0SXNTZW5kaW5nU3VwcG9ydCxcbiAgc2VsZWN0QmFsYW5jZSxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgV2FsbGV0U2VuZFRpcCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBpc1BlbmRpbmc6IHNlbGVjdElzU2VuZGluZ1N1cHBvcnQoc3RhdGUpLFxuICB0aXRsZTogbWFrZVNlbGVjdFRpdGxlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjbGFpbTogbWFrZVNlbGVjdENsYWltRm9yVXJpKHByb3BzLnVyaSwgZmFsc2UpKHN0YXRlKSxcbiAgYmFsYW5jZTogc2VsZWN0QmFsYW5jZShzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNlbmRTdXBwb3J0OiAoYW1vdW50LCBjbGFpbUlkLCBpc1N1cHBvcnQpID0+IGRpc3BhdGNoKGRvU2VuZFRpcChhbW91bnQsIGNsYWltSWQsIGlzU3VwcG9ydCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShXYWxsZXRTZW5kVGlwKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/walletSendTip/index.js\n"); - -/***/ }), - -/***/ "../ui/component/walletSendTip/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/walletSendTip/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\n/* harmony import */ var component_common_credit_amount__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/credit-amount */ \"../ui/component/common/credit-amount.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction WalletSendTip(props) {\n var title = props.title,\n isPending = props.isPending,\n onCancel = props.onCancel,\n claimIsMine = props.claimIsMine,\n isSupport = props.isSupport,\n balance = props.balance,\n claim = props.claim,\n sendTipCallback = props.sendTipCallback,\n sendSupport = props.sendSupport;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n tipAmount = _React$useState2[0],\n setTipAmount = _React$useState2[1];\n\n var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n tipError = _React$useState4[0],\n setTipError = _React$useState4[1];\n\n var claimId = claim.claim_id;\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n\n function handleSendButtonClicked() {\n sendSupport(tipAmount, claimId, isSupport); // ex: close modal\n\n if (sendTipCallback) {\n sendTipCallback();\n }\n }\n\n function handleSupportPriceChange(event) {\n var regexp = RegExp(/^(\\d*([.]\\d{0,8})?)$/);\n var validTipInput = regexp.test(event.target.value);\n var tipAmount = parseFloat(event.target.value);\n var tipError;\n\n if (!tipAmount) {\n tipError = __('Amount must be a number');\n } else if (tipAmount <= 0) {\n tipError = __('Amount must be a positive number');\n } else if (tipAmount < constants_claim__WEBPACK_IMPORTED_MODULE_3__[\"MINIMUM_PUBLISH_BID\"]) {\n tipError = __('Amount must be higher');\n } else if (!validTipInput) {\n tipError = __('Amount must have no more than 8 decimal places');\n } else if (tipAmount === balance) {\n tipError = __('Please decrease the amount to account for transaction fees');\n } else if (tipAmount > balance) {\n tipError = __('Not enough credits');\n }\n\n setTipAmount(tipAmount);\n setTipError(tipError);\n }\n\n var label = tipAmount && tipAmount !== 0 ? __(isSupport ? 'Support %amount% LBC' : 'Tip %amount% LBC', {\n amount: tipAmount.toFixed(8).replace(/\\.?0+$/, '')\n }) : __('Amount');\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: handleSendButtonClicked\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n autoFocus: true,\n name: \"tip-input\",\n label: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, label, ' ', isMobile && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n lbc_balance: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_credit_amount__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n badge: false,\n amount: balance\n })\n }\n }, \"(%lbc_balance% available)\")),\n className: \"form-field--price-amount\",\n error: tipError,\n min: \"0\",\n step: \"any\",\n type: \"number\",\n placeholder: \"1.23\",\n onChange: function onChange(event) {\n return handleSupportPriceChange(event);\n },\n inputButton: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n label: __('Send'),\n disabled: isPending || tipError || !tipAmount\n }),\n helper: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, claimIsMine || isSupport ? __('This will increase the overall bid amount for %title%, which will boost its ability to be discovered while active.', {\n title: title\n }) : __('This will appear as a tip for %title%, which will boost its ability to be discovered while active.', {\n title: title\n }), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n label: __('Learn more'),\n button: \"link\",\n href: \"https://lbry.com/faq/tipping\"\n }), \".\")\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: onCancel\n })));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletSendTip);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmRUaXAvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dhbGxldFNlbmRUaXAvdmlldy5qc3g/Y2JiYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZvcm0gfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgTUlOSU1VTV9QVUJMSVNIX0JJRCB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQgdXNlSXNNb2JpbGUgZnJvbSAnZWZmZWN0cy91c2UtaXMtbW9iaWxlJztcbmltcG9ydCBDcmVkaXRBbW91bnQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jcmVkaXQtYW1vdW50JztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW1Jc01pbmU6IGJvb2xlYW4sXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgaXNQZW5kaW5nOiBib29sZWFuLFxuICBzZW5kU3VwcG9ydDogKG51bWJlciwgc3RyaW5nLCBib29sZWFuKSA9PiB2b2lkLFxuICBvbkNhbmNlbDogKCkgPT4gdm9pZCxcbiAgc2VuZFRpcENhbGxiYWNrPzogKCkgPT4gdm9pZCxcbiAgYmFsYW5jZTogbnVtYmVyLFxuICBpc1N1cHBvcnQ6IGJvb2xlYW4sXG59O1xuXG5mdW5jdGlvbiBXYWxsZXRTZW5kVGlwKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHRpdGxlLCBpc1BlbmRpbmcsIG9uQ2FuY2VsLCBjbGFpbUlzTWluZSwgaXNTdXBwb3J0LCBiYWxhbmNlLCBjbGFpbSwgc2VuZFRpcENhbGxiYWNrLCBzZW5kU3VwcG9ydCB9ID0gcHJvcHM7XG4gIGNvbnN0IFt0aXBBbW91bnQsIHNldFRpcEFtb3VudF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RpcEVycm9yLCBzZXRUaXBFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCB7IGNsYWltX2lkOiBjbGFpbUlkIH0gPSBjbGFpbTtcbiAgY29uc3QgaXNNb2JpbGUgPSB1c2VJc01vYmlsZSgpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNlbmRCdXR0b25DbGlja2VkKCkge1xuICAgIHNlbmRTdXBwb3J0KHRpcEFtb3VudCwgY2xhaW1JZCwgaXNTdXBwb3J0KTtcblxuICAgIC8vIGV4OiBjbG9zZSBtb2RhbFxuICAgIGlmIChzZW5kVGlwQ2FsbGJhY2spIHtcbiAgICAgIHNlbmRUaXBDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN1cHBvcnRQcmljZUNoYW5nZShldmVudDogU3ludGhldGljSW5wdXRFdmVudDwqPikge1xuICAgIGNvbnN0IHJlZ2V4cCA9IFJlZ0V4cCgvXihcXGQqKFsuXVxcZHswLDh9KT8pJC8pO1xuICAgIGNvbnN0IHZhbGlkVGlwSW5wdXQgPSByZWdleHAudGVzdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGNvbnN0IHRpcEFtb3VudCA9IHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBsZXQgdGlwRXJyb3I7XG5cbiAgICBpZiAoIXRpcEFtb3VudCkge1xuICAgICAgdGlwRXJyb3IgPSBfXygnQW1vdW50IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9IGVsc2UgaWYgKHRpcEFtb3VudCA8PSAwKSB7XG4gICAgICB0aXBFcnJvciA9IF9fKCdBbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH0gZWxzZSBpZiAodGlwQW1vdW50IDwgTUlOSU1VTV9QVUJMSVNIX0JJRCkge1xuICAgICAgdGlwRXJyb3IgPSBfXygnQW1vdW50IG11c3QgYmUgaGlnaGVyJyk7XG4gICAgfSBlbHNlIGlmICghdmFsaWRUaXBJbnB1dCkge1xuICAgICAgdGlwRXJyb3IgPSBfXygnQW1vdW50IG11c3QgaGF2ZSBubyBtb3JlIHRoYW4gOCBkZWNpbWFsIHBsYWNlcycpO1xuICAgIH0gZWxzZSBpZiAodGlwQW1vdW50ID09PSBiYWxhbmNlKSB7XG4gICAgICB0aXBFcnJvciA9IF9fKCdQbGVhc2UgZGVjcmVhc2UgdGhlIGFtb3VudCB0byBhY2NvdW50IGZvciB0cmFuc2FjdGlvbiBmZWVzJyk7XG4gICAgfSBlbHNlIGlmICh0aXBBbW91bnQgPiBiYWxhbmNlKSB7XG4gICAgICB0aXBFcnJvciA9IF9fKCdOb3QgZW5vdWdoIGNyZWRpdHMnKTtcbiAgICB9XG5cbiAgICBzZXRUaXBBbW91bnQodGlwQW1vdW50KTtcbiAgICBzZXRUaXBFcnJvcih0aXBFcnJvcik7XG4gIH1cblxuICBjb25zdCBsYWJlbCA9XG4gICAgdGlwQW1vdW50ICYmIHRpcEFtb3VudCAhPT0gMFxuICAgICAgPyBfXyhpc1N1cHBvcnQgPyAnU3VwcG9ydCAlYW1vdW50JSBMQkMnIDogJ1RpcCAlYW1vdW50JSBMQkMnLCB7XG4gICAgICAgICAgYW1vdW50OiB0aXBBbW91bnQudG9GaXhlZCg4KS5yZXBsYWNlKC9cXC4/MCskLywgJycpLFxuICAgICAgICB9KVxuICAgICAgOiBfXygnQW1vdW50Jyk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8Rm9ybSBvblN1Ym1pdD17aGFuZGxlU2VuZEJ1dHRvbkNsaWNrZWR9PlxuICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgbmFtZT1cInRpcC1pbnB1dFwiXG4gICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7bGFiZWx9eycgJ31cbiAgICAgICAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICAgICAgICA8STE4bk1lc3NhZ2UgdG9rZW5zPXt7IGxiY19iYWxhbmNlOiA8Q3JlZGl0QW1vdW50IGJhZGdlPXtmYWxzZX0gYW1vdW50PXtiYWxhbmNlfSAvPiB9fT5cbiAgICAgICAgICAgICAgICAgICglbGJjX2JhbGFuY2UlIGF2YWlsYWJsZSlcbiAgICAgICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1maWVsZC0tcHJpY2UtYW1vdW50XCJcbiAgICAgICAgICBlcnJvcj17dGlwRXJyb3J9XG4gICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgc3RlcD1cImFueVwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCIxLjIzXCJcbiAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlU3VwcG9ydFByaWNlQ2hhbmdlKGV2ZW50KX1cbiAgICAgICAgICBpbnB1dEJ1dHRvbj17XG4gICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgbGFiZWw9e19fKCdTZW5kJyl9IGRpc2FibGVkPXtpc1BlbmRpbmcgfHwgdGlwRXJyb3IgfHwgIXRpcEFtb3VudH0gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgaGVscGVyPXtcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAge2NsYWltSXNNaW5lIHx8IGlzU3VwcG9ydFxuICAgICAgICAgICAgICAgID8gX18oXG4gICAgICAgICAgICAgICAgICAgICdUaGlzIHdpbGwgaW5jcmVhc2UgdGhlIG92ZXJhbGwgYmlkIGFtb3VudCBmb3IgJXRpdGxlJSwgd2hpY2ggd2lsbCBib29zdCBpdHMgYWJpbGl0eSB0byBiZSBkaXNjb3ZlcmVkIHdoaWxlIGFjdGl2ZS4nLFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF9fKFxuICAgICAgICAgICAgICAgICAgICAnVGhpcyB3aWxsIGFwcGVhciBhcyBhIHRpcCBmb3IgJXRpdGxlJSwgd2hpY2ggd2lsbCBib29zdCBpdHMgYWJpbGl0eSB0byBiZSBkaXNjb3ZlcmVkIHdoaWxlIGFjdGl2ZS4nLFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlIH1cbiAgICAgICAgICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICAgICAgPEJ1dHRvbiBsYWJlbD17X18oJ0xlYXJuIG1vcmUnKX0gYnV0dG9uPVwibGlua1wiIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS90aXBwaW5nXCIgLz4uXG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvRm9ybT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0NhbmNlbCcpfSBvbkNsaWNrPXtvbkNhbmNlbH0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdhbGxldFNlbmRUaXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQURBO0FBS0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBbkJBO0FBb0JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBS0E7QUFBQTtBQUlBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQWxDQTtBQXVDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/walletSendTip/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/webUploadList/index.js": -/*!**********************************************!*\ - !*** ../ui/component/webUploadList/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/webUploadList/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n currentUploads: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectCurrentUploads\"])(state),\n uploadCount: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUploadCount\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dlYlVwbG9hZExpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dlYlVwbG9hZExpc3QvaW5kZXguanM/N2VkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0Q3VycmVudFVwbG9hZHMsIHNlbGVjdFVwbG9hZENvdW50IH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgV2ViVXBsb2FkTGlzdCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBjdXJyZW50VXBsb2Fkczogc2VsZWN0Q3VycmVudFVwbG9hZHMoc3RhdGUpLFxuICB1cGxvYWRDb3VudDogc2VsZWN0VXBsb2FkQ291bnQoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgbnVsbFxuKShXZWJVcGxvYWRMaXN0KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/webUploadList/index.js\n"); - -/***/ }), - -/***/ "../ui/component/webUploadList/internal/web-upload-item.jsx": -/*!******************************************************************!*\ - !*** ../ui/component/webUploadList/internal/web-upload-item.jsx ***! - \******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebUploadItem; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_fileThumbnail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/fileThumbnail */ \"../ui/component/fileThumbnail/index.js\");\n\n\n\nfunction WebUploadItem(props) {\n var params = props.params,\n progress = props.progress,\n xhr = props.xhr;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: 'claim-preview claim-preview--padded claim-preview--inactive card--inline'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileThumbnail__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n thumbnail: params.thumbnail_url\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'claim-preview-metadata'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview-info\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"claim-preview__title\"\n }, params.title), xhr && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n onClick: function onClick() {\n xhr.abort();\n },\n label: __('Cancel')\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", null, \"lbry://\", params.name), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'claim-upload__progress--outer card--inline'\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'claim-upload__progress--inner',\n style: {\n width: \"\".concat(progress, \"%\")\n }\n }, \"Uploading...\"))));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dlYlVwbG9hZExpc3QvaW50ZXJuYWwvd2ViLXVwbG9hZC1pdGVtLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvd2ViVXBsb2FkTGlzdC9pbnRlcm5hbC93ZWItdXBsb2FkLWl0ZW0uanN4PzA3NzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IEZpbGVUaHVtYm5haWwgZnJvbSAnY29tcG9uZW50L2ZpbGVUaHVtYm5haWwnO1xudHlwZSBQcm9wcyA9IHtcbiAgcGFyYW1zOiBVcGRhdGVQdWJsaXNoRm9ybURhdGEsXG4gIHByb2dyZXNzOiBzdHJpbmcsXG4gIHhocj86ICgpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXZWJVcGxvYWRJdGVtKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IHBhcmFtcywgcHJvZ3Jlc3MsIHhociB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXsnY2xhaW0tcHJldmlldyBjbGFpbS1wcmV2aWV3LS1wYWRkZWQgY2xhaW0tcHJldmlldy0taW5hY3RpdmUgY2FyZC0taW5saW5lJ30+XG4gICAgICA8RmlsZVRodW1ibmFpbCB0aHVtYm5haWw9e3BhcmFtcy50aHVtYm5haWxfdXJsfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9eydjbGFpbS1wcmV2aWV3LW1ldGFkYXRhJ30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xhaW0tcHJldmlldy1pbmZvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3X190aXRsZVwiPntwYXJhbXMudGl0bGV9PC9kaXY+XG4gICAgICAgICAge3hociAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnMtLWlubGluZVwiPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0NhbmNlbCcpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoMj5sYnJ5Oi8ve3BhcmFtcy5uYW1lfTwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2xhaW0tdXBsb2FkX19wcm9ncmVzcy0tb3V0ZXIgY2FyZC0taW5saW5lJ30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjbGFpbS11cGxvYWRfX3Byb2dyZXNzLS1pbm5lcid9IHN0eWxlPXt7IHdpZHRoOiBgJHtwcm9ncmVzc30lYCB9fT5cbiAgICAgICAgICAgIFVwbG9hZGluZy4uLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBTEE7QUFXQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/webUploadList/internal/web-upload-item.jsx\n"); - -/***/ }), - -/***/ "../ui/component/webUploadList/view.jsx": -/*!**********************************************!*\ - !*** ../ui/component/webUploadList/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebUploadList; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var _internal_web_upload_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/web-upload-item */ \"../ui/component/webUploadList/internal/web-upload-item.jsx\");\n\n\n\nfunction WebUploadList(props) {\n var currentUploads = props.currentUploads,\n uploadCount = props.uploadCount;\n return !!uploadCount && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: __('Currently Uploading'),\n subtitle: uploadCount > 1 ? __('You files are currently uploading. This will update automatically.') : __('Your file is currently uploading. This will update automatically.'),\n body: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"section\", null, Object.values(currentUploads).map(function (_ref) {\n var progress = _ref.progress,\n params = _ref.params,\n xhr = _ref.xhr;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](_internal_web_upload_item__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"upload\".concat(params.name),\n progress: progress,\n params: params,\n xhr: xhr\n });\n }))\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3dlYlVwbG9hZExpc3Qvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3dlYlVwbG9hZExpc3Qvdmlldy5qc3g/YTkyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcbmltcG9ydCBXZWJVcGxvYWRJdGVtIGZyb20gJy4vaW50ZXJuYWwvd2ViLXVwbG9hZC1pdGVtJztcblxuZXhwb3J0IHR5cGUgVXBsb2FkSXRlbSA9IHtcbiAgcHJvZ2Vzczogc3RyaW5nLFxuICBwYXJhbXM6IFVwZGF0ZVB1Ymxpc2hGb3JtRGF0YSxcbiAgeGhyPzogeyBhYm9ydDogKCkgPT4gdm9pZCB9LFxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgY3VycmVudFVwbG9hZHM6IHsgW2tleTogc3RyaW5nXTogVXBsb2FkSXRlbSB9LFxuICB1cGxvYWRDb3VudDogbnVtYmVyLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV2ViVXBsb2FkTGlzdChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjdXJyZW50VXBsb2FkcywgdXBsb2FkQ291bnQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgISF1cGxvYWRDb3VudCAmJiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnQ3VycmVudGx5IFVwbG9hZGluZycpfVxuICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgIHVwbG9hZENvdW50ID4gMVxuICAgICAgICAgICAgICA/IF9fKCdZb3UgZmlsZXMgYXJlIGN1cnJlbnRseSB1cGxvYWRpbmcuIFRoaXMgd2lsbCB1cGRhdGUgYXV0b21hdGljYWxseS4nKVxuICAgICAgICAgICAgICA6IF9fKCdZb3VyIGZpbGUgaXMgY3VycmVudGx5IHVwbG9hZGluZy4gVGhpcyB3aWxsIHVwZGF0ZSBhdXRvbWF0aWNhbGx5LicpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJvZHk9e1xuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIHsvKiAkRmxvd0ZpeE1lICovfVxuICAgICAgICAgICAgICB7T2JqZWN0LnZhbHVlcyhjdXJyZW50VXBsb2FkcykubWFwKCh7IHByb2dyZXNzLCBwYXJhbXMsIHhociB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPFdlYlVwbG9hZEl0ZW0ga2V5PXtgdXBsb2FkJHtwYXJhbXMubmFtZX1gfSBwcm9ncmVzcz17cHJvZ3Jlc3N9IHBhcmFtcz17cGFyYW1zfSB4aHI9e3hocn0gLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFhQTtBQUFBO0FBQUE7QUFHQTtBQUlBO0FBQ0E7QUFLQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBUkE7QUFtQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/webUploadList/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/wunderbar/index.js": -/*!******************************************!*\ - !*** ../ui/component/wunderbar/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/component/wunderbar/view.jsx\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n suggestions: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSearchSuggestions\"])(state),\n searchQuery: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSearchValue\"])(state),\n isFocused: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectSearchBarFocused\"])(state)\n };\n};\n\nvar perform = function perform(dispatch, ownProps) {\n return {\n onSearch: function onSearch(query) {\n ownProps.history.push({\n pathname: \"/$/search\",\n search: \"?q=\".concat(encodeURIComponent(query))\n });\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateSearchQuery\"])(query));\n analytics__WEBPACK_IMPORTED_MODULE_2__[\"default\"].apiLogSearch();\n },\n onSubmit: function onSubmit(uri) {\n var path = Object(util_url__WEBPACK_IMPORTED_MODULE_5__[\"formatLbryUrlForWeb\"])(uri);\n ownProps.history.push(path);\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateSearchQuery\"])(''));\n },\n updateSearchQuery: function updateSearchQuery(query) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateSearchQuery\"])(query));\n },\n doShowSnackBar: function doShowSnackBar(message) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"])({\n isError: true,\n message: message\n }));\n },\n doFocus: function doFocus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFocusSearchInput\"])());\n },\n doBlur: function doBlur() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doBlurSearchInput\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3d1bmRlcmJhci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvd3VuZGVyYmFyL2luZGV4LmpzP2U5MDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvRm9jdXNTZWFyY2hJbnB1dCxcbiAgZG9CbHVyU2VhcmNoSW5wdXQsXG4gIGRvVXBkYXRlU2VhcmNoUXVlcnksXG4gIGRvVG9hc3QsXG4gIHNlbGVjdFNlYXJjaFZhbHVlLFxuICBzZWxlY3RTZWFyY2hTdWdnZXN0aW9ucyxcbiAgc2VsZWN0U2VhcmNoQmFyRm9jdXNlZCxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgV3VuZGVyYmFyIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBzdWdnZXN0aW9uczogc2VsZWN0U2VhcmNoU3VnZ2VzdGlvbnMoc3RhdGUpLFxuICBzZWFyY2hRdWVyeTogc2VsZWN0U2VhcmNoVmFsdWUoc3RhdGUpLFxuICBpc0ZvY3VzZWQ6IHNlbGVjdFNlYXJjaEJhckZvY3VzZWQoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSAoZGlzcGF0Y2gsIG93blByb3BzKSA9PiAoe1xuICBvblNlYXJjaDogcXVlcnkgPT4ge1xuICAgIG93blByb3BzLmhpc3RvcnkucHVzaCh7IHBhdGhuYW1lOiBgLyQvc2VhcmNoYCwgc2VhcmNoOiBgP3E9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWAgfSk7XG4gICAgZGlzcGF0Y2goZG9VcGRhdGVTZWFyY2hRdWVyeShxdWVyeSkpO1xuICAgIGFuYWx5dGljcy5hcGlMb2dTZWFyY2goKTtcbiAgfSxcbiAgb25TdWJtaXQ6IHVyaSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGZvcm1hdExicnlVcmxGb3JXZWIodXJpKTtcbiAgICBvd25Qcm9wcy5oaXN0b3J5LnB1c2gocGF0aCk7XG4gICAgZGlzcGF0Y2goZG9VcGRhdGVTZWFyY2hRdWVyeSgnJykpO1xuICB9LFxuICB1cGRhdGVTZWFyY2hRdWVyeTogcXVlcnkgPT4gZGlzcGF0Y2goZG9VcGRhdGVTZWFyY2hRdWVyeShxdWVyeSkpLFxuICBkb1Nob3dTbmFja0JhcjogbWVzc2FnZSA9PiBkaXNwYXRjaChkb1RvYXN0KHsgaXNFcnJvcjogdHJ1ZSwgbWVzc2FnZSB9KSksXG4gIGRvRm9jdXM6ICgpID0+IGRpc3BhdGNoKGRvRm9jdXNTZWFyY2hJbnB1dCgpKSxcbiAgZG9CbHVyOiAoKSA9PiBkaXNwYXRjaChkb0JsdXJTZWFyY2hJbnB1dCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoV3VuZGVyYmFyKVxuKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFBQTtBQVhBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVpBO0FBYUE7QUFBQTtBQWJBO0FBY0E7QUFBQTtBQUFBO0FBZEE7QUFBQTtBQUNBO0FBZ0JBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/wunderbar/index.js\n"); - -/***/ }), - -/***/ "../ui/component/wunderbar/internal/autocomplete.jsx": -/*!***********************************************************!*\ - !*** ../ui/component/wunderbar/internal/autocomplete.jsx ***! - \***********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Autocomplete; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var dom_scroll_into_view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dom-scroll-into-view */ \"../node_modules/dom-scroll-into-view/lib/index.js\");\n/* harmony import */ var dom_scroll_into_view__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dom_scroll_into_view__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n/* eslint-disable */\n\n/*\nThis is taken from https://github.com/reactjs/react-autocomplete\n\nWe aren't using that component because (for now) there is no way to autohightlight\nthe first item if it isn't an exact match from what is in the search bar.\n\nOur use case is:\nvalue in search bar: \"hello\"\nfirst suggestion: \"lbry://hello\"\n\nI changed the function maybeAutoCompleteText to check if the suggestion contains\nthe search query anywhere, instead of the suggestion starting with it\n\nhttps://github.com/reactjs/react-autocomplete/issues/239\n*/\n\n\n\n\n\nvar IMPERATIVE_API = ['blur', 'checkValidity', 'click', 'focus', 'select', 'setCustomValidity', 'setSelectionRange', 'setRangeText'];\n\nfunction getScrollOffset() {\n return {\n x: window.pageXOffset !== undefined ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft,\n y: window.pageYOffset !== undefined ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop\n };\n}\n\nvar Autocomplete = /*#__PURE__*/function (_React$Component) {\n _inherits(Autocomplete, _React$Component); // static propTypes = {\n // /**\n // * The items to display in the dropdown menu\n // */\n // items: PropTypes.array.isRequired,\n // /**\n // * The value to display in the input field\n // */\n // value: PropTypes.any,\n // /**\n // * Arguments: `event: Event, value: String`\n // *\n // * Invoked every time the user changes the input's value.\n // */\n // onChange: PropTypes.func,\n // /**\n // * Arguments: `value: String, item: Any`\n // *\n // * Invoked when the user selects an item from the dropdown menu.\n // */\n // onSelect: PropTypes.func,\n // /**\n // * Arguments: `item: Any, value: String`\n // *\n // * Invoked for each entry in `items` and its return value is used to\n // * determine whether or not it should be displayed in the dropdown menu.\n // * By default all items are always rendered.\n // */\n // shouldItemRender: PropTypes.func,\n // /**\n // * Arguments: `itemA: Any, itemB: Any, value: String`\n // *\n // * The function which is used to sort `items` before display.\n // */\n // sortItems: PropTypes.func,\n // /**\n // * Arguments: `item: Any`\n // *\n // * Used to read the display value from each entry in `items`.\n // */\n // getItemValue: PropTypes.func.isRequired,\n // /**\n // * Arguments: `item: Any, isHighlighted: Boolean, styles: Object`\n // *\n // * Invoked for each entry in `items` that also passes `shouldItemRender` to\n // * generate the render tree for each item in the dropdown menu. `styles` is\n // * an optional set of styles that can be applied to improve the look/feel\n // * of the items in the dropdown menu.\n // */\n // renderItem: PropTypes.func.isRequired,\n // /**\n // * Arguments: `items: Array<Any>, value: String, styles: Object`\n // *\n // * Invoked to generate the render tree for the dropdown menu. Ensure the\n // * returned tree includes every entry in `items` or else the highlight order\n // * and keyboard navigation logic will break. `styles` will contain\n // * { top, left, minWidth } which are the coordinates of the top-left corner\n // * and the width of the dropdown menu.\n // */\n // renderMenu: PropTypes.func,\n // /**\n // * Styles that are applied to the dropdown menu in the default `renderMenu`\n // * implementation. If you override `renderMenu` and you want to use\n // * `menuStyle` you must manually apply them (`this.props.menuStyle`).\n // */\n // menuStyle: PropTypes.object,\n // /**\n // * Arguments: `props: Object`\n // *\n // * Invoked to generate the input element. The `props` argument is the result\n // * of merging `props.inputProps` with a selection of props that are required\n // * both for functionality and accessibility. At the very least you need to\n // * apply `props.ref` and all `props.on<event>` event handlers. Failing to do\n // * this will cause `Autocomplete` to behave unexpectedly.\n // */\n // renderInput: PropTypes.func,\n // /**\n // * Props passed to `props.renderInput`. By default these props will be\n // * applied to the `<input />` element rendered by `Autocomplete`, unless you\n // * have specified a custom value for `props.renderInput`. Any properties\n // * supported by `HTMLInputElement` can be specified, apart from the\n // * following which are set by `Autocomplete`: value, autoComplete, role,\n // * aria-autocomplete. `inputProps` is commonly used for (but not limited to)\n // * placeholder, event handlers (onFocus, onBlur, etc.), autoFocus, etc..\n // */\n // inputProps: PropTypes.object,\n // /**\n // * Props that are applied to the element which wraps the `<input />` and\n // * dropdown menu elements rendered by `Autocomplete`.\n // */\n // wrapperProps: PropTypes.object,\n // /**\n // * This is a shorthand for `wrapperProps={{ style: <your styles> }}`.\n // * Note that `wrapperStyle` is applied before `wrapperProps`, so the latter\n // * will win if it contains a `style` entry.\n // */\n // wrapperStyle: PropTypes.object,\n // /**\n // * Whether or not to automatically highlight the top match in the dropdown\n // * menu.\n // */\n // autoHighlight: PropTypes.bool,\n // /**\n // * Whether or not to automatically select the highlighted item when the\n // * `<input>` loses focus.\n // */\n // selectOnBlur: PropTypes.bool,\n // /**\n // * Arguments: `isOpen: Boolean`\n // *\n // * Invoked every time the dropdown menu's visibility changes (i.e. every\n // * time it is displayed/hidden).\n // */\n // onMenuVisibilityChange: PropTypes.func,\n // /**\n // * Used to override the internal logic which displays/hides the dropdown\n // * menu. This is useful if you want to force a certain state based on your\n // * UX/business logic. Use it together with `onMenuVisibilityChange` for\n // * fine-grained control over the dropdown menu dynamics.\n // */\n // open: PropTypes.bool,\n // debug: PropTypes.bool,\n // };\n\n\n function Autocomplete(props) {\n var _this;\n\n _classCallCheck(this, Autocomplete);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Autocomplete).call(this, props));\n _this.state = {\n isOpen: false,\n highlightedIndex: null\n };\n _this._debugStates = [];\n _this.ensureHighlightedIndex = _this.ensureHighlightedIndex.bind(_assertThisInitialized(_this));\n _this.exposeAPI = _this.exposeAPI.bind(_assertThisInitialized(_this));\n _this.handleInputFocus = _this.handleInputFocus.bind(_assertThisInitialized(_this));\n _this.handleInputBlur = _this.handleInputBlur.bind(_assertThisInitialized(_this));\n _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));\n _this.handleInputClick = _this.handleInputClick.bind(_assertThisInitialized(_this));\n _this.maybeAutoCompleteText = _this.maybeAutoCompleteText.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(Autocomplete, [{\n key: \"UNSAFE_componentWillMount\",\n value: function UNSAFE_componentWillMount() {\n // this.refs is frozen, so we need to assign a new object to it\n this.refs = {};\n this._ignoreBlur = false;\n this._ignoreFocus = false;\n this._scrollOffset = null;\n this._scrollTimer = null;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this._scrollTimer);\n this._scrollTimer = null;\n }\n }, {\n key: \"UNSAFE_componentWillReceiveProps\",\n value: function UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.state.highlightedIndex !== null) {\n this.setState(this.ensureHighlightedIndex);\n }\n\n if (nextProps.autoHighlight && (this.props.value !== nextProps.value || this.state.highlightedIndex === null)) {\n this.setState(this.maybeAutoCompleteText);\n }\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.isOpen()) {\n this.setMenuPositions();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.state.isOpen && !prevState.isOpen || 'open' in this.props && this.props.open && !prevProps.open) {\n this.setMenuPositions();\n }\n\n this.maybeScrollItemIntoView();\n\n if (prevState.isOpen !== this.state.isOpen) {\n this.props.onMenuVisibilityChange(this.state.isOpen);\n }\n }\n }, {\n key: \"exposeAPI\",\n value: function exposeAPI(el) {\n var _this2 = this;\n\n this.refs.input = el;\n IMPERATIVE_API.forEach(function (ev) {\n return _this2[ev] = el && el[ev] && el[ev].bind(el);\n });\n }\n }, {\n key: \"maybeScrollItemIntoView\",\n value: function maybeScrollItemIntoView() {\n if (this.isOpen() && this.state.highlightedIndex !== null) {\n var itemNode = this.refs[\"item-\".concat(this.state.highlightedIndex)];\n var menuNode = this.refs.menu;\n dom_scroll_into_view__WEBPACK_IMPORTED_MODULE_2___default()(Object(react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"])(itemNode), Object(react_dom__WEBPACK_IMPORTED_MODULE_1__[\"findDOMNode\"])(menuNode), {\n onlyScrollIfNeeded: true\n });\n }\n }\n }, {\n key: \"handleKeyDown\",\n value: function handleKeyDown(event) {\n if (Autocomplete.keyDownHandlers[event.key]) {\n Autocomplete.keyDownHandlers[event.key].call(this, event);\n } else if (!this.isOpen()) {\n this.setState({\n isOpen: true\n });\n }\n }\n }, {\n key: \"handleChange\",\n value: function handleChange(event) {\n this.props.onChange(event, event.target.value);\n }\n }, {\n key: \"getFilteredItems\",\n value: function getFilteredItems(props) {\n var items = props.items;\n\n if (props.shouldItemRender) {\n items = items.filter(function (item) {\n return props.shouldItemRender(item, props.value);\n });\n }\n\n if (props.sortItems) {\n items.sort(function (a, b) {\n return props.sortItems(a, b, props.value);\n });\n }\n\n return items;\n }\n }, {\n key: \"maybeAutoCompleteText\",\n value: function maybeAutoCompleteText(state, props) {\n var highlightedIndex = state.highlightedIndex;\n var value = props.value,\n getItemValue = props.getItemValue;\n var index = highlightedIndex === null ? 0 : highlightedIndex;\n var matchedItem = this.getFilteredItems(props)[index];\n\n if (value !== '' && matchedItem) {\n var itemValue = getItemValue(matchedItem);\n var itemValueDoesMatch = itemValue.toLowerCase().includes(value.toLowerCase() // below line is the the only thing that is changed from the real component\n );\n\n if (itemValueDoesMatch) {\n return {\n highlightedIndex: index\n };\n }\n }\n\n return {\n highlightedIndex: null\n };\n }\n }, {\n key: \"ensureHighlightedIndex\",\n value: function ensureHighlightedIndex(state, props) {\n if (state.highlightedIndex >= this.getFilteredItems(props).length) {\n return {\n highlightedIndex: null\n };\n }\n }\n }, {\n key: \"setMenuPositions\",\n value: function setMenuPositions() {\n var node = this.refs.input;\n var rect = node.getBoundingClientRect();\n var computedStyle = global.window.getComputedStyle(node); // const marginBottom = parseInt(computedStyle.marginBottom, 10) || 0;\n\n var marginLeft = parseInt(computedStyle.marginLeft, 10) || 0;\n var marginRight = parseInt(computedStyle.marginRight, 10) || 0;\n this.setState({\n // We may need these if we go back to a fixed header\n // menuTop: rect.bottom + marginBottom,\n // menuLeft: rect.left + marginLeft,\n menuWidth: rect.width + marginLeft + marginRight\n });\n }\n }, {\n key: \"highlightItemFromMouse\",\n value: function highlightItemFromMouse(index) {\n this.setState({\n highlightedIndex: index\n });\n }\n }, {\n key: \"selectItemFromMouse\",\n value: function selectItemFromMouse(item) {\n var _this3 = this;\n\n var value = this.props.getItemValue(item); // The menu will de-render before a mouseLeave event\n // happens. Clear the flag to release control over focus\n\n this.setIgnoreBlur(false);\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, function () {\n _this3.props.onSelect(value, item);\n });\n }\n }, {\n key: \"setIgnoreBlur\",\n value: function setIgnoreBlur(ignore) {\n this._ignoreBlur = ignore;\n }\n }, {\n key: \"renderMenu\",\n value: function renderMenu() {\n var _this4 = this;\n\n if (!this.props.value) {\n return null;\n }\n\n var items = this.getFilteredItems(this.props).map(function (item, index) {\n var element = _this4.props.renderItem(item, _this4.state.highlightedIndex === index, {\n cursor: 'default'\n });\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(element, {\n onMouseEnter: function onMouseEnter() {\n return _this4.highlightItemFromMouse(index);\n },\n onClick: function onClick() {\n return _this4.selectItemFromMouse(item);\n },\n ref: function ref(e) {\n return _this4.refs[\"item-\".concat(index)] = e;\n }\n });\n });\n var style = {\n left: this.state.menuLeft,\n top: this.state.menuTop,\n minWidth: this.state.menuWidth\n };\n var menu = this.props.renderMenu(items, this.props.value, style);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(menu, {\n ref: function ref(e) {\n return _this4.refs.menu = e;\n },\n className: 'wunderbar__menu',\n // Ignore blur to prevent menu from de-rendering before we can process click\n onMouseEnter: function onMouseEnter() {\n return _this4.setIgnoreBlur(true);\n },\n onMouseLeave: function onMouseLeave() {\n return _this4.setIgnoreBlur(false);\n } // uncomment this to inspect styling\n\n });\n }\n }, {\n key: \"handleInputBlur\",\n value: function handleInputBlur(event) {\n var _this5 = this;\n\n if (this._ignoreBlur) {\n this._ignoreFocus = true;\n this._scrollOffset = getScrollOffset();\n this.refs.input.focus();\n return;\n }\n\n var setStateCallback;\n var highlightedIndex = this.state.highlightedIndex;\n\n if (this.props.selectOnBlur && highlightedIndex !== null) {\n var items = this.getFilteredItems(this.props);\n var item = items[highlightedIndex];\n var value = this.props.getItemValue(item);\n\n setStateCallback = function setStateCallback() {\n return _this5.props.onSelect(value, item);\n };\n }\n\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, setStateCallback);\n var onBlur = this.props.inputProps.onBlur;\n\n if (onBlur) {\n onBlur(event);\n }\n }\n }, {\n key: \"handleInputFocus\",\n value: function handleInputFocus(event) {\n var _this6 = this;\n\n if (this._ignoreFocus) {\n this._ignoreFocus = false;\n var _this$_scrollOffset = this._scrollOffset,\n x = _this$_scrollOffset.x,\n y = _this$_scrollOffset.y;\n this._scrollOffset = null; // Focus will cause the browser to scroll the <input> into view.\n // This can cause the mouse coords to change, which in turn\n // could cause a new highlight to happen, cancelling the click\n // event (when selecting with the mouse)\n\n window.scrollTo(x, y); // Some browsers wait until all focus event handlers have been\n // processed before scrolling the <input> into view, so let's\n // scroll again on the next tick to ensure we're back to where\n // the user was before focus was lost. We could do the deferred\n // scroll only, but that causes a jarring split second jump in\n // some browsers that scroll before the focus event handlers\n // are triggered.\n\n clearTimeout(this._scrollTimer);\n this._scrollTimer = setTimeout(function () {\n _this6._scrollTimer = null;\n window.scrollTo(x, y);\n }, 0);\n return;\n } // Highlight\n\n\n this.refs.input.select();\n this.setState({\n isOpen: true\n });\n var onFocus = this.props.inputProps.onFocus;\n\n if (onFocus) {\n onFocus(event);\n }\n }\n }, {\n key: \"isInputFocused\",\n value: function isInputFocused() {\n var el = this.refs.input;\n return el ? el.ownerDocument && el === el.ownerDocument.activeElement : false;\n }\n }, {\n key: \"handleInputClick\",\n value: function handleInputClick() {\n // Input will not be focused if it's disabled\n if (this.isInputFocused() && !this.isOpen()) this.setState({\n isOpen: true\n });\n }\n }, {\n key: \"composeEventHandlers\",\n value: function composeEventHandlers(internal, external) {\n return external ? function (e) {\n internal(e);\n external(e);\n } : internal;\n }\n }, {\n key: \"isOpen\",\n value: function isOpen() {\n return 'open' in this.props ? this.props.open : this.state.isOpen;\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this.props.debug) {\n // you don't like it, you love it\n this._debugStates.push({\n id: this._debugStates.length,\n state: this.state\n });\n }\n\n var _this$props = this.props,\n inputProps = _this$props.inputProps,\n items = _this$props.items;\n var open = this.isOpen();\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({\n style: _objectSpread({}, this.props.wrapperStyle)\n }, this.props.wrapperProps), this.props.renderInput(_objectSpread({}, inputProps, {\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-expanded': open,\n autoComplete: 'off',\n ref: this.exposeAPI,\n onFocus: this.handleInputFocus,\n onBlur: this.handleInputBlur,\n onChange: this.handleChange,\n onKeyDown: this.composeEventHandlers(this.handleKeyDown, inputProps.onKeyDown),\n onClick: this.composeEventHandlers(this.handleInputClick, inputProps.onClick),\n value: this.props.value\n })), open && !!items.length && this.renderMenu(), this.props.debug && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"pre\", {\n style: {\n marginLeft: 300\n }\n }, JSON.stringify(this._debugStates.slice(Math.max(0, this._debugStates.length - 5), this._debugStates.length), null, 2)));\n }\n }]);\n\n return Autocomplete;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n/* eslint-enable */\n\n\n_defineProperty(Autocomplete, \"defaultProps\", {\n value: '',\n wrapperProps: {},\n wrapperStyle: {\n display: 'inline-block'\n },\n inputProps: {},\n renderInput: function renderInput(props) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", props);\n },\n onChange: function onChange() {},\n onSelect: function onSelect() {},\n renderMenu: function renderMenu(items, value, style) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n style: _objectSpread({}, style, {}, this.menuStyle),\n children: items\n });\n },\n menuStyle: {\n position: 'absolute',\n overflow: 'hidden'\n },\n autoHighlight: true,\n selectOnBlur: false,\n onMenuVisibilityChange: function onMenuVisibilityChange() {}\n});\n\n_defineProperty(Autocomplete, \"keyDownHandlers\", {\n ArrowDown: function ArrowDown(event) {\n event.preventDefault();\n var itemsLength = this.getFilteredItems(this.props).length;\n if (!itemsLength) return;\n var highlightedIndex = this.state.highlightedIndex;\n var index = highlightedIndex === null || highlightedIndex === itemsLength - 1 ? 0 : highlightedIndex + 1;\n this.setState({\n highlightedIndex: index,\n isOpen: true\n });\n },\n ArrowUp: function ArrowUp(event) {\n event.preventDefault();\n var itemsLength = this.getFilteredItems(this.props).length;\n if (!itemsLength) return;\n var highlightedIndex = this.state.highlightedIndex;\n var index = highlightedIndex === 0 || highlightedIndex === null ? itemsLength - 1 : highlightedIndex - 1;\n this.setState({\n highlightedIndex: index,\n isOpen: true\n });\n },\n Enter: function Enter(event) {\n var _this7 = this; // Key code 229 is used for selecting items from character selectors (Pinyin, Kana, etc)\n\n\n if (event.keyCode !== 13) return;\n var inputValue = this.refs.input.value;\n if (!inputValue) return;\n\n if (!this.isOpen() || this.state.highlightedIndex == null) {\n // User pressed enter before any search suggestions were populated\n this.setState({\n isOpen: false\n }, function () {\n _this7.props.onSelect(inputValue);\n\n _this7.refs.input.blur();\n });\n } else {\n // text entered + menu item has been highlighted + enter is hit -> update value to that of selected menu item, close the menu\n event.preventDefault();\n var item = this.getFilteredItems(this.props)[this.state.highlightedIndex];\n var value = this.props.getItemValue(item);\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, function () {\n _this7.props.onSelect(value, item);\n\n _this7.refs.input.blur();\n });\n }\n },\n Escape: function Escape() {\n // In case the user is currently hovering over the menu\n this.setIgnoreBlur(false);\n this.setState({\n highlightedIndex: null,\n isOpen: false\n });\n },\n Tab: function Tab() {\n // In case the user is currently hovering over the menu\n this.setIgnoreBlur(false);\n }\n});\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3d1bmRlcmJhci9pbnRlcm5hbC9hdXRvY29tcGxldGUuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC93dW5kZXJiYXIvaW50ZXJuYWwvYXV0b2NvbXBsZXRlLmpzeD82MjdhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG4vKlxuVGhpcyBpcyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LWF1dG9jb21wbGV0ZVxuXG5XZSBhcmVuJ3QgdXNpbmcgdGhhdCBjb21wb25lbnQgYmVjYXVzZSAoZm9yIG5vdykgdGhlcmUgaXMgbm8gd2F5IHRvIGF1dG9oaWdodGxpZ2h0XG50aGUgZmlyc3QgaXRlbSBpZiBpdCBpc24ndCBhbiBleGFjdCBtYXRjaCBmcm9tIHdoYXQgaXMgaW4gdGhlIHNlYXJjaCBiYXIuXG5cbk91ciB1c2UgY2FzZSBpczpcbnZhbHVlIGluIHNlYXJjaCBiYXI6IFwiaGVsbG9cIlxuZmlyc3Qgc3VnZ2VzdGlvbjogXCJsYnJ5Oi8vaGVsbG9cIlxuXG5JIGNoYW5nZWQgdGhlIGZ1bmN0aW9uIG1heWJlQXV0b0NvbXBsZXRlVGV4dCB0byBjaGVjayBpZiB0aGUgc3VnZ2VzdGlvbiBjb250YWluc1xudGhlIHNlYXJjaCBxdWVyeSBhbnl3aGVyZSwgaW5zdGVhZCBvZiB0aGUgc3VnZ2VzdGlvbiBzdGFydGluZyB3aXRoIGl0XG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LWF1dG9jb21wbGV0ZS9pc3N1ZXMvMjM5XG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmluZERPTU5vZGUgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ2RvbS1zY3JvbGwtaW50by12aWV3JztcblxuY29uc3QgSU1QRVJBVElWRV9BUEkgPSBbXG4gICdibHVyJyxcbiAgJ2NoZWNrVmFsaWRpdHknLFxuICAnY2xpY2snLFxuICAnZm9jdXMnLFxuICAnc2VsZWN0JyxcbiAgJ3NldEN1c3RvbVZhbGlkaXR5JyxcbiAgJ3NldFNlbGVjdGlvblJhbmdlJyxcbiAgJ3NldFJhbmdlVGV4dCcsXG5dO1xuXG5mdW5jdGlvbiBnZXRTY3JvbGxPZmZzZXQoKSB7XG4gIHJldHVybiB7XG4gICAgeDpcbiAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gd2luZG93LnBhZ2VYT2Zmc2V0XG4gICAgICAgIDogKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdCxcbiAgICB5OlxuICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICAgICAgOiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3AsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9jb21wbGV0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIC8vIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gIC8vICAgLyoqXG4gIC8vICAgICogVGhlIGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIGRyb3Bkb3duIG1lbnVcbiAgLy8gICAgKi9cbiAgLy8gICBpdGVtczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIC8vICAgLyoqXG4gIC8vICAgICogVGhlIHZhbHVlIHRvIGRpc3BsYXkgaW4gdGhlIGlucHV0IGZpZWxkXG4gIC8vICAgICovXG4gIC8vICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8vICAgLyoqXG4gIC8vICAgICogQXJndW1lbnRzOiBgZXZlbnQ6IEV2ZW50LCB2YWx1ZTogU3RyaW5nYFxuICAvLyAgICAqXG4gIC8vICAgICogSW52b2tlZCBldmVyeSB0aW1lIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGlucHV0J3MgdmFsdWUuXG4gIC8vICAgICovXG4gIC8vICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvLyAgIC8qKlxuICAvLyAgICAqIEFyZ3VtZW50czogYHZhbHVlOiBTdHJpbmcsIGl0ZW06IEFueWBcbiAgLy8gICAgKlxuICAvLyAgICAqIEludm9rZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGFuIGl0ZW0gZnJvbSB0aGUgZHJvcGRvd24gbWVudS5cbiAgLy8gICAgKi9cbiAgLy8gICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8vICAgLyoqXG4gIC8vICAgICogQXJndW1lbnRzOiBgaXRlbTogQW55LCB2YWx1ZTogU3RyaW5nYFxuICAvLyAgICAqXG4gIC8vICAgICogSW52b2tlZCBmb3IgZWFjaCBlbnRyeSBpbiBgaXRlbXNgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdG9cbiAgLy8gICAgKiBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24gbWVudS5cbiAgLy8gICAgKiBCeSBkZWZhdWx0IGFsbCBpdGVtcyBhcmUgYWx3YXlzIHJlbmRlcmVkLlxuICAvLyAgICAqL1xuICAvLyAgIHNob3VsZEl0ZW1SZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvLyAgIC8qKlxuICAvLyAgICAqIEFyZ3VtZW50czogYGl0ZW1BOiBBbnksIGl0ZW1COiBBbnksIHZhbHVlOiBTdHJpbmdgXG4gIC8vICAgICpcbiAgLy8gICAgKiBUaGUgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBzb3J0IGBpdGVtc2AgYmVmb3JlIGRpc3BsYXkuXG4gIC8vICAgICovXG4gIC8vICAgc29ydEl0ZW1zOiBQcm9wVHlwZXMuZnVuYyxcbiAgLy8gICAvKipcbiAgLy8gICAgKiBBcmd1bWVudHM6IGBpdGVtOiBBbnlgXG4gIC8vICAgICpcbiAgLy8gICAgKiBVc2VkIHRvIHJlYWQgdGhlIGRpc3BsYXkgdmFsdWUgZnJvbSBlYWNoIGVudHJ5IGluIGBpdGVtc2AuXG4gIC8vICAgICovXG4gIC8vICAgZ2V0SXRlbVZhbHVlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvLyAgIC8qKlxuICAvLyAgICAqIEFyZ3VtZW50czogYGl0ZW06IEFueSwgaXNIaWdobGlnaHRlZDogQm9vbGVhbiwgc3R5bGVzOiBPYmplY3RgXG4gIC8vICAgICpcbiAgLy8gICAgKiBJbnZva2VkIGZvciBlYWNoIGVudHJ5IGluIGBpdGVtc2AgdGhhdCBhbHNvIHBhc3NlcyBgc2hvdWxkSXRlbVJlbmRlcmAgdG9cbiAgLy8gICAgKiBnZW5lcmF0ZSB0aGUgcmVuZGVyIHRyZWUgZm9yIGVhY2ggaXRlbSBpbiB0aGUgZHJvcGRvd24gbWVudS4gYHN0eWxlc2AgaXNcbiAgLy8gICAgKiBhbiBvcHRpb25hbCBzZXQgb2Ygc3R5bGVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gaW1wcm92ZSB0aGUgbG9vay9mZWVsXG4gIC8vICAgICogb2YgdGhlIGl0ZW1zIGluIHRoZSBkcm9wZG93biBtZW51LlxuICAvLyAgICAqL1xuICAvLyAgIHJlbmRlckl0ZW06IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8vICAgLyoqXG4gIC8vICAgICogQXJndW1lbnRzOiBgaXRlbXM6IEFycmF5PEFueT4sIHZhbHVlOiBTdHJpbmcsIHN0eWxlczogT2JqZWN0YFxuICAvLyAgICAqXG4gIC8vICAgICogSW52b2tlZCB0byBnZW5lcmF0ZSB0aGUgcmVuZGVyIHRyZWUgZm9yIHRoZSBkcm9wZG93biBtZW51LiBFbnN1cmUgdGhlXG4gIC8vICAgICogcmV0dXJuZWQgdHJlZSBpbmNsdWRlcyBldmVyeSBlbnRyeSBpbiBgaXRlbXNgIG9yIGVsc2UgdGhlIGhpZ2hsaWdodCBvcmRlclxuICAvLyAgICAqIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uIGxvZ2ljIHdpbGwgYnJlYWsuIGBzdHlsZXNgIHdpbGwgY29udGFpblxuICAvLyAgICAqIHsgdG9wLCBsZWZ0LCBtaW5XaWR0aCB9IHdoaWNoIGFyZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcC1sZWZ0IGNvcm5lclxuICAvLyAgICAqIGFuZCB0aGUgd2lkdGggb2YgdGhlIGRyb3Bkb3duIG1lbnUuXG4gIC8vICAgICovXG4gIC8vICAgcmVuZGVyTWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8vICAgLyoqXG4gIC8vICAgICogU3R5bGVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGRyb3Bkb3duIG1lbnUgaW4gdGhlIGRlZmF1bHQgYHJlbmRlck1lbnVgXG4gIC8vICAgICogaW1wbGVtZW50YXRpb24uIElmIHlvdSBvdmVycmlkZSBgcmVuZGVyTWVudWAgYW5kIHlvdSB3YW50IHRvIHVzZVxuICAvLyAgICAqIGBtZW51U3R5bGVgIHlvdSBtdXN0IG1hbnVhbGx5IGFwcGx5IHRoZW0gKGB0aGlzLnByb3BzLm1lbnVTdHlsZWApLlxuICAvLyAgICAqL1xuICAvLyAgIG1lbnVTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLy8gICAvKipcbiAgLy8gICAgKiBBcmd1bWVudHM6IGBwcm9wczogT2JqZWN0YFxuICAvLyAgICAqXG4gIC8vICAgICogSW52b2tlZCB0byBnZW5lcmF0ZSB0aGUgaW5wdXQgZWxlbWVudC4gVGhlIGBwcm9wc2AgYXJndW1lbnQgaXMgdGhlIHJlc3VsdFxuICAvLyAgICAqIG9mIG1lcmdpbmcgYHByb3BzLmlucHV0UHJvcHNgIHdpdGggYSBzZWxlY3Rpb24gb2YgcHJvcHMgdGhhdCBhcmUgcmVxdWlyZWRcbiAgLy8gICAgKiBib3RoIGZvciBmdW5jdGlvbmFsaXR5IGFuZCBhY2Nlc3NpYmlsaXR5LiBBdCB0aGUgdmVyeSBsZWFzdCB5b3UgbmVlZCB0b1xuICAvLyAgICAqIGFwcGx5IGBwcm9wcy5yZWZgIGFuZCBhbGwgYHByb3BzLm9uPGV2ZW50PmAgZXZlbnQgaGFuZGxlcnMuIEZhaWxpbmcgdG8gZG9cbiAgLy8gICAgKiB0aGlzIHdpbGwgY2F1c2UgYEF1dG9jb21wbGV0ZWAgdG8gYmVoYXZlIHVuZXhwZWN0ZWRseS5cbiAgLy8gICAgKi9cbiAgLy8gICByZW5kZXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8vICAgLyoqXG4gIC8vICAgICogUHJvcHMgcGFzc2VkIHRvIGBwcm9wcy5yZW5kZXJJbnB1dGAuIEJ5IGRlZmF1bHQgdGhlc2UgcHJvcHMgd2lsbCBiZVxuICAvLyAgICAqIGFwcGxpZWQgdG8gdGhlIGA8aW5wdXQgLz5gIGVsZW1lbnQgcmVuZGVyZWQgYnkgYEF1dG9jb21wbGV0ZWAsIHVubGVzcyB5b3VcbiAgLy8gICAgKiBoYXZlIHNwZWNpZmllZCBhIGN1c3RvbSB2YWx1ZSBmb3IgYHByb3BzLnJlbmRlcklucHV0YC4gQW55IHByb3BlcnRpZXNcbiAgLy8gICAgKiBzdXBwb3J0ZWQgYnkgYEhUTUxJbnB1dEVsZW1lbnRgIGNhbiBiZSBzcGVjaWZpZWQsIGFwYXJ0IGZyb20gdGhlXG4gIC8vICAgICogZm9sbG93aW5nIHdoaWNoIGFyZSBzZXQgYnkgYEF1dG9jb21wbGV0ZWA6IHZhbHVlLCBhdXRvQ29tcGxldGUsIHJvbGUsXG4gIC8vICAgICogYXJpYS1hdXRvY29tcGxldGUuIGBpbnB1dFByb3BzYCBpcyBjb21tb25seSB1c2VkIGZvciAoYnV0IG5vdCBsaW1pdGVkIHRvKVxuICAvLyAgICAqIHBsYWNlaG9sZGVyLCBldmVudCBoYW5kbGVycyAob25Gb2N1cywgb25CbHVyLCBldGMuKSwgYXV0b0ZvY3VzLCBldGMuLlxuICAvLyAgICAqL1xuICAvLyAgIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8vICAgLyoqXG4gIC8vICAgICogUHJvcHMgdGhhdCBhcmUgYXBwbGllZCB0byB0aGUgZWxlbWVudCB3aGljaCB3cmFwcyB0aGUgYDxpbnB1dCAvPmAgYW5kXG4gIC8vICAgICogZHJvcGRvd24gbWVudSBlbGVtZW50cyByZW5kZXJlZCBieSBgQXV0b2NvbXBsZXRlYC5cbiAgLy8gICAgKi9cbiAgLy8gICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8vICAgLyoqXG4gIC8vICAgICogVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgYHdyYXBwZXJQcm9wcz17eyBzdHlsZTogPHlvdXIgc3R5bGVzPiB9fWAuXG4gIC8vICAgICogTm90ZSB0aGF0IGB3cmFwcGVyU3R5bGVgIGlzIGFwcGxpZWQgYmVmb3JlIGB3cmFwcGVyUHJvcHNgLCBzbyB0aGUgbGF0dGVyXG4gIC8vICAgICogd2lsbCB3aW4gaWYgaXQgY29udGFpbnMgYSBgc3R5bGVgIGVudHJ5LlxuICAvLyAgICAqL1xuICAvLyAgIHdyYXBwZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLy8gICAvKipcbiAgLy8gICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGhpZ2hsaWdodCB0aGUgdG9wIG1hdGNoIGluIHRoZSBkcm9wZG93blxuICAvLyAgICAqIG1lbnUuXG4gIC8vICAgICovXG4gIC8vICAgYXV0b0hpZ2hsaWdodDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgLyoqXG4gIC8vICAgICogV2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGhpZ2hsaWdodGVkIGl0ZW0gd2hlbiB0aGVcbiAgLy8gICAgKiBgPGlucHV0PmAgbG9zZXMgZm9jdXMuXG4gIC8vICAgICovXG4gIC8vICAgc2VsZWN0T25CbHVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAvKipcbiAgLy8gICAgKiBBcmd1bWVudHM6IGBpc09wZW46IEJvb2xlYW5gXG4gIC8vICAgICpcbiAgLy8gICAgKiBJbnZva2VkIGV2ZXJ5IHRpbWUgdGhlIGRyb3Bkb3duIG1lbnUncyB2aXNpYmlsaXR5IGNoYW5nZXMgKGkuZS4gZXZlcnlcbiAgLy8gICAgKiB0aW1lIGl0IGlzIGRpc3BsYXllZC9oaWRkZW4pLlxuICAvLyAgICAqL1xuICAvLyAgIG9uTWVudVZpc2liaWxpdHlDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvLyAgIC8qKlxuICAvLyAgICAqIFVzZWQgdG8gb3ZlcnJpZGUgdGhlIGludGVybmFsIGxvZ2ljIHdoaWNoIGRpc3BsYXlzL2hpZGVzIHRoZSBkcm9wZG93blxuICAvLyAgICAqIG1lbnUuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZvcmNlIGEgY2VydGFpbiBzdGF0ZSBiYXNlZCBvbiB5b3VyXG4gIC8vICAgICogVVgvYnVzaW5lc3MgbG9naWMuIFVzZSBpdCB0b2dldGhlciB3aXRoIGBvbk1lbnVWaXNpYmlsaXR5Q2hhbmdlYCBmb3JcbiAgLy8gICAgKiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBkcm9wZG93biBtZW51IGR5bmFtaWNzLlxuICAvLyAgICAqL1xuICAvLyAgIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvLyAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiAnJyxcbiAgICB3cmFwcGVyUHJvcHM6IHt9LFxuICAgIHdyYXBwZXJTdHlsZToge1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgfSxcbiAgICBpbnB1dFByb3BzOiB7fSxcbiAgICByZW5kZXJJbnB1dChwcm9wcykge1xuICAgICAgcmV0dXJuIDxpbnB1dCB7Li4ucHJvcHN9IC8+O1xuICAgIH0sXG4gICAgb25DaGFuZ2UoKSB7fSxcbiAgICBvblNlbGVjdCgpIHt9LFxuICAgIHJlbmRlck1lbnUoaXRlbXMsIHZhbHVlLCBzdHlsZSkge1xuICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIC4uLnRoaXMubWVudVN0eWxlIH19IGNoaWxkcmVuPXtpdGVtc30gLz47XG4gICAgfSxcbiAgICBtZW51U3R5bGU6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIH0sXG4gICAgYXV0b0hpZ2hsaWdodDogdHJ1ZSxcbiAgICBzZWxlY3RPbkJsdXI6IGZhbHNlLFxuICAgIG9uTWVudVZpc2liaWxpdHlDaGFuZ2UoKSB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLl9kZWJ1Z1N0YXRlcyA9IFtdO1xuICAgIHRoaXMuZW5zdXJlSGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuZW5zdXJlSGlnaGxpZ2h0ZWRJbmRleC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXhwb3NlQVBJID0gdGhpcy5leHBvc2VBUEkuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMgPSB0aGlzLmhhbmRsZUlucHV0Rm9jdXMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0Qmx1ciA9IHRoaXMuaGFuZGxlSW5wdXRCbHVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlSW5wdXRDbGljayA9IHRoaXMuaGFuZGxlSW5wdXRDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMubWF5YmVBdXRvQ29tcGxldGVUZXh0ID0gdGhpcy5tYXliZUF1dG9Db21wbGV0ZVRleHQuYmluZCh0aGlzKTtcbiAgfVxuXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgLy8gdGhpcy5yZWZzIGlzIGZyb3plbiwgc28gd2UgbmVlZCB0byBhc3NpZ24gYSBuZXcgb2JqZWN0IHRvIGl0XG4gICAgdGhpcy5yZWZzID0ge307XG4gICAgdGhpcy5faWdub3JlQmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuX2lnbm9yZUZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fc2Nyb2xsT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLl9zY3JvbGxUaW1lciA9IG51bGw7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVGltZXIpO1xuICAgIHRoaXMuX3Njcm9sbFRpbWVyID0gbnVsbDtcbiAgfVxuXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGlmICh0aGlzLnN0YXRlLmhpZ2hsaWdodGVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5lbnN1cmVIaWdobGlnaHRlZEluZGV4KTtcbiAgICB9XG4gICAgaWYgKG5leHRQcm9wcy5hdXRvSGlnaGxpZ2h0ICYmICh0aGlzLnByb3BzLnZhbHVlICE9PSBuZXh0UHJvcHMudmFsdWUgfHwgdGhpcy5zdGF0ZS5oaWdobGlnaHRlZEluZGV4ID09PSBudWxsKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh0aGlzLm1heWJlQXV0b0NvbXBsZXRlVGV4dCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuc2V0TWVudVBvc2l0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGlmICgodGhpcy5zdGF0ZS5pc09wZW4gJiYgIXByZXZTdGF0ZS5pc09wZW4pIHx8ICgnb3BlbicgaW4gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLm9wZW4gJiYgIXByZXZQcm9wcy5vcGVuKSkge1xuICAgICAgdGhpcy5zZXRNZW51UG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXliZVNjcm9sbEl0ZW1JbnRvVmlldygpO1xuICAgIGlmIChwcmV2U3RhdGUuaXNPcGVuICE9PSB0aGlzLnN0YXRlLmlzT3Blbikge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVWaXNpYmlsaXR5Q2hhbmdlKHRoaXMuc3RhdGUuaXNPcGVuKTtcbiAgICB9XG4gIH1cblxuICBleHBvc2VBUEkoZWwpIHtcbiAgICB0aGlzLnJlZnMuaW5wdXQgPSBlbDtcbiAgICBJTVBFUkFUSVZFX0FQSS5mb3JFYWNoKGV2ID0+ICh0aGlzW2V2XSA9IGVsICYmIGVsW2V2XSAmJiBlbFtldl0uYmluZChlbCkpKTtcbiAgfVxuXG4gIG1heWJlU2Nyb2xsSXRlbUludG9WaWV3KCkge1xuICAgIGlmICh0aGlzLmlzT3BlbigpICYmIHRoaXMuc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaXRlbU5vZGUgPSB0aGlzLnJlZnNbYGl0ZW0tJHt0aGlzLnN0YXRlLmhpZ2hsaWdodGVkSW5kZXh9YF07XG4gICAgICBjb25zdCBtZW51Tm9kZSA9IHRoaXMucmVmcy5tZW51O1xuICAgICAgc2Nyb2xsSW50b1ZpZXcoZmluZERPTU5vZGUoaXRlbU5vZGUpLCBmaW5kRE9NTm9kZShtZW51Tm9kZSksIHtcbiAgICAgICAgb25seVNjcm9sbElmTmVlZGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIGlmIChBdXRvY29tcGxldGUua2V5RG93bkhhbmRsZXJzW2V2ZW50LmtleV0pIHtcbiAgICAgIEF1dG9jb21wbGV0ZS5rZXlEb3duSGFuZGxlcnNbZXZlbnQua2V5XS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldmVudCwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBrZXlEb3duSGFuZGxlcnMgPSB7XG4gICAgQXJyb3dEb3duKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgaXRlbXNMZW5ndGggPSB0aGlzLmdldEZpbHRlcmVkSXRlbXModGhpcy5wcm9wcykubGVuZ3RoO1xuICAgICAgaWYgKCFpdGVtc0xlbmd0aCkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBoaWdobGlnaHRlZEluZGV4IH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3QgaW5kZXggPSBoaWdobGlnaHRlZEluZGV4ID09PSBudWxsIHx8IGhpZ2hsaWdodGVkSW5kZXggPT09IGl0ZW1zTGVuZ3RoIC0gMSA/IDAgOiBoaWdobGlnaHRlZEluZGV4ICsgMTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBpbmRleCxcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIEFycm93VXAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBpdGVtc0xlbmd0aCA9IHRoaXMuZ2V0RmlsdGVyZWRJdGVtcyh0aGlzLnByb3BzKS5sZW5ndGg7XG4gICAgICBpZiAoIWl0ZW1zTGVuZ3RoKSByZXR1cm47XG4gICAgICBjb25zdCB7IGhpZ2hsaWdodGVkSW5kZXggfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBpbmRleCA9IGhpZ2hsaWdodGVkSW5kZXggPT09IDAgfHwgaGlnaGxpZ2h0ZWRJbmRleCA9PT0gbnVsbCA/IGl0ZW1zTGVuZ3RoIC0gMSA6IGhpZ2hsaWdodGVkSW5kZXggLSAxO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGluZGV4LFxuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgRW50ZXIoZXZlbnQpIHtcbiAgICAgIC8vIEtleSBjb2RlIDIyOSBpcyB1c2VkIGZvciBzZWxlY3RpbmcgaXRlbXMgZnJvbSBjaGFyYWN0ZXIgc2VsZWN0b3JzIChQaW55aW4sIEthbmEsIGV0YylcbiAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5yZWZzLmlucHV0LnZhbHVlO1xuICAgICAgaWYgKCFpbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSB8fCB0aGlzLnN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAvLyBVc2VyIHByZXNzZWQgZW50ZXIgYmVmb3JlIGFueSBzZWFyY2ggc3VnZ2VzdGlvbnMgd2VyZSBwb3B1bGF0ZWRcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzT3BlbjogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgdGhpcy5yZWZzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZXh0IGVudGVyZWQgKyBtZW51IGl0ZW0gaGFzIGJlZW4gaGlnaGxpZ2h0ZWQgKyBlbnRlciBpcyBoaXQgLT4gdXBkYXRlIHZhbHVlIHRvIHRoYXQgb2Ygc2VsZWN0ZWQgbWVudSBpdGVtLCBjbG9zZSB0aGUgbWVudVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKHRoaXMucHJvcHMpW3RoaXMuc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy5nZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHZhbHVlLCBpdGVtKTtcbiAgICAgICAgICAgIHRoaXMucmVmcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBFc2NhcGUoKSB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBob3ZlcmluZyBvdmVyIHRoZSBtZW51XG4gICAgICB0aGlzLnNldElnbm9yZUJsdXIoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IG51bGwsXG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgVGFiKCkge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgdXNlciBpcyBjdXJyZW50bHkgaG92ZXJpbmcgb3ZlciB0aGUgbWVudVxuICAgICAgdGhpcy5zZXRJZ25vcmVCbHVyKGZhbHNlKTtcbiAgICB9LFxuICB9O1xuXG4gIGdldEZpbHRlcmVkSXRlbXMocHJvcHMpIHtcbiAgICBsZXQgaXRlbXMgPSBwcm9wcy5pdGVtcztcblxuICAgIGlmIChwcm9wcy5zaG91bGRJdGVtUmVuZGVyKSB7XG4gICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IHByb3BzLnNob3VsZEl0ZW1SZW5kZXIoaXRlbSwgcHJvcHMudmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc29ydEl0ZW1zKSB7XG4gICAgICBpdGVtcy5zb3J0KChhLCBiKSA9PiBwcm9wcy5zb3J0SXRlbXMoYSwgYiwgcHJvcHMudmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBtYXliZUF1dG9Db21wbGV0ZVRleHQoc3RhdGUsIHByb3BzKSB7XG4gICAgY29uc3QgeyBoaWdobGlnaHRlZEluZGV4IH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IHZhbHVlLCBnZXRJdGVtVmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGluZGV4ID0gaGlnaGxpZ2h0ZWRJbmRleCA9PT0gbnVsbCA/IDAgOiBoaWdobGlnaHRlZEluZGV4O1xuICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKHByb3BzKVtpbmRleF07XG4gICAgaWYgKHZhbHVlICE9PSAnJyAmJiBtYXRjaGVkSXRlbSkge1xuICAgICAgY29uc3QgaXRlbVZhbHVlID0gZ2V0SXRlbVZhbHVlKG1hdGNoZWRJdGVtKTtcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZURvZXNNYXRjaCA9IGl0ZW1WYWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFxuICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC8vIGJlbG93IGxpbmUgaXMgdGhlIHRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgY2hhbmdlZCBmcm9tIHRoZSByZWFsIGNvbXBvbmVudFxuICAgICAgKTtcbiAgICAgIGlmIChpdGVtVmFsdWVEb2VzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHsgaGlnaGxpZ2h0ZWRJbmRleDogaW5kZXggfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaGlnaGxpZ2h0ZWRJbmRleDogbnVsbCB9O1xuICB9XG5cbiAgZW5zdXJlSGlnaGxpZ2h0ZWRJbmRleChzdGF0ZSwgcHJvcHMpIHtcbiAgICBpZiAoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCA+PSB0aGlzLmdldEZpbHRlcmVkSXRlbXMocHJvcHMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHsgaGlnaGxpZ2h0ZWRJbmRleDogbnVsbCB9O1xuICAgIH1cbiAgfVxuXG4gIHNldE1lbnVQb3NpdGlvbnMoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucmVmcy5pbnB1dDtcbiAgICBjb25zdCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2xvYmFsLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIC8vIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLCAxMCkgfHwgMDtcbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5tYXJnaW5MZWZ0LCAxMCkgfHwgMDtcbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUubWFyZ2luUmlnaHQsIDEwKSB8fCAwO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgLy8gV2UgbWF5IG5lZWQgdGhlc2UgaWYgd2UgZ28gYmFjayB0byBhIGZpeGVkIGhlYWRlclxuICAgICAgLy8gbWVudVRvcDogcmVjdC5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXG4gICAgICAvLyBtZW51TGVmdDogcmVjdC5sZWZ0ICsgbWFyZ2luTGVmdCxcbiAgICAgIG1lbnVXaWR0aDogcmVjdC53aWR0aCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIGhpZ2hsaWdodEl0ZW1Gcm9tTW91c2UoaW5kZXgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGlnaGxpZ2h0ZWRJbmRleDogaW5kZXggfSk7XG4gIH1cblxuICBzZWxlY3RJdGVtRnJvbU1vdXNlKGl0ZW0pIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcHMuZ2V0SXRlbVZhbHVlKGl0ZW0pO1xuICAgIC8vIFRoZSBtZW51IHdpbGwgZGUtcmVuZGVyIGJlZm9yZSBhIG1vdXNlTGVhdmUgZXZlbnRcbiAgICAvLyBoYXBwZW5zLiBDbGVhciB0aGUgZmxhZyB0byByZWxlYXNlIGNvbnRyb2wgb3ZlciBmb2N1c1xuICAgIHRoaXMuc2V0SWdub3JlQmx1cihmYWxzZSk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbnVsbCxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QodmFsdWUsIGl0ZW0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRJZ25vcmVCbHVyKGlnbm9yZSkge1xuICAgIHRoaXMuX2lnbm9yZUJsdXIgPSBpZ25vcmU7XG4gIH1cblxuICByZW5kZXJNZW51KCkge1xuICAgIGlmICghdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkSXRlbXModGhpcy5wcm9wcykubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucHJvcHMucmVuZGVySXRlbShpdGVtLCB0aGlzLnN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4LCB7XG4gICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHtcbiAgICAgICAgb25Nb3VzZUVudGVyOiAoKSA9PiB0aGlzLmhpZ2hsaWdodEl0ZW1Gcm9tTW91c2UoaW5kZXgpLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLnNlbGVjdEl0ZW1Gcm9tTW91c2UoaXRlbSksXG4gICAgICAgIHJlZjogZSA9PiAodGhpcy5yZWZzW2BpdGVtLSR7aW5kZXh9YF0gPSBlKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgbGVmdDogdGhpcy5zdGF0ZS5tZW51TGVmdCxcbiAgICAgIHRvcDogdGhpcy5zdGF0ZS5tZW51VG9wLFxuICAgICAgbWluV2lkdGg6IHRoaXMuc3RhdGUubWVudVdpZHRoLFxuICAgIH07XG4gICAgY29uc3QgbWVudSA9IHRoaXMucHJvcHMucmVuZGVyTWVudShpdGVtcywgdGhpcy5wcm9wcy52YWx1ZSwgc3R5bGUpO1xuICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQobWVudSwge1xuICAgICAgcmVmOiBlID0+ICh0aGlzLnJlZnMubWVudSA9IGUpLFxuICAgICAgY2xhc3NOYW1lOiAnd3VuZGVyYmFyX19tZW51JyxcbiAgICAgIC8vIElnbm9yZSBibHVyIHRvIHByZXZlbnQgbWVudSBmcm9tIGRlLXJlbmRlcmluZyBiZWZvcmUgd2UgY2FuIHByb2Nlc3MgY2xpY2tcbiAgICAgIG9uTW91c2VFbnRlcjogKCkgPT4gdGhpcy5zZXRJZ25vcmVCbHVyKHRydWUpLFxuICAgICAgb25Nb3VzZUxlYXZlOiAoKSA9PiB0aGlzLnNldElnbm9yZUJsdXIoZmFsc2UpLCAvLyB1bmNvbW1lbnQgdGhpcyB0byBpbnNwZWN0IHN0eWxpbmdcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xuICAgIGlmICh0aGlzLl9pZ25vcmVCbHVyKSB7XG4gICAgICB0aGlzLl9pZ25vcmVGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9zY3JvbGxPZmZzZXQgPSBnZXRTY3JvbGxPZmZzZXQoKTtcbiAgICAgIHRoaXMucmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc2V0U3RhdGVDYWxsYmFjaztcbiAgICBjb25zdCB7IGhpZ2hsaWdodGVkSW5kZXggfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0T25CbHVyICYmIGhpZ2hsaWdodGVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2hpZ2hsaWdodGVkSW5kZXhdO1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BzLmdldEl0ZW1WYWx1ZShpdGVtKTtcbiAgICAgIHNldFN0YXRlQ2FsbGJhY2sgPSAoKSA9PiB0aGlzLnByb3BzLm9uU2VsZWN0KHZhbHVlLCBpdGVtKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzZXRTdGF0ZUNhbGxiYWNrXG4gICAgKTtcbiAgICBjb25zdCB7IG9uQmx1ciB9ID0gdGhpcy5wcm9wcy5pbnB1dFByb3BzO1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSW5wdXRGb2N1cyhldmVudCkge1xuICAgIGlmICh0aGlzLl9pZ25vcmVGb2N1cykge1xuICAgICAgdGhpcy5faWdub3JlRm9jdXMgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fc2Nyb2xsT2Zmc2V0O1xuICAgICAgdGhpcy5fc2Nyb2xsT2Zmc2V0ID0gbnVsbDtcbiAgICAgIC8vIEZvY3VzIHdpbGwgY2F1c2UgdGhlIGJyb3dzZXIgdG8gc2Nyb2xsIHRoZSA8aW5wdXQ+IGludG8gdmlldy5cbiAgICAgIC8vIFRoaXMgY2FuIGNhdXNlIHRoZSBtb3VzZSBjb29yZHMgdG8gY2hhbmdlLCB3aGljaCBpbiB0dXJuXG4gICAgICAvLyBjb3VsZCBjYXVzZSBhIG5ldyBoaWdobGlnaHQgdG8gaGFwcGVuLCBjYW5jZWxsaW5nIHRoZSBjbGlja1xuICAgICAgLy8gZXZlbnQgKHdoZW4gc2VsZWN0aW5nIHdpdGggdGhlIG1vdXNlKVxuICAgICAgd2luZG93LnNjcm9sbFRvKHgsIHkpO1xuICAgICAgLy8gU29tZSBicm93c2VycyB3YWl0IHVudGlsIGFsbCBmb2N1cyBldmVudCBoYW5kbGVycyBoYXZlIGJlZW5cbiAgICAgIC8vIHByb2Nlc3NlZCBiZWZvcmUgc2Nyb2xsaW5nIHRoZSA8aW5wdXQ+IGludG8gdmlldywgc28gbGV0J3NcbiAgICAgIC8vIHNjcm9sbCBhZ2FpbiBvbiB0aGUgbmV4dCB0aWNrIHRvIGVuc3VyZSB3ZSdyZSBiYWNrIHRvIHdoZXJlXG4gICAgICAvLyB0aGUgdXNlciB3YXMgYmVmb3JlIGZvY3VzIHdhcyBsb3N0LiBXZSBjb3VsZCBkbyB0aGUgZGVmZXJyZWRcbiAgICAgIC8vIHNjcm9sbCBvbmx5LCBidXQgdGhhdCBjYXVzZXMgYSBqYXJyaW5nIHNwbGl0IHNlY29uZCBqdW1wIGluXG4gICAgICAvLyBzb21lIGJyb3dzZXJzIHRoYXQgc2Nyb2xsIGJlZm9yZSB0aGUgZm9jdXMgZXZlbnQgaGFuZGxlcnNcbiAgICAgIC8vIGFyZSB0cmlnZ2VyZWQuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVGltZXIpO1xuICAgICAgdGhpcy5fc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsVGltZXIgPSBudWxsO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeCwgeSk7XG4gICAgICB9LCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIaWdobGlnaHRcbiAgICB0aGlzLnJlZnMuaW5wdXQuc2VsZWN0KCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgeyBvbkZvY3VzIH0gPSB0aGlzLnByb3BzLmlucHV0UHJvcHM7XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlzSW5wdXRGb2N1c2VkKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcy5yZWZzLmlucHV0O1xuICAgIHJldHVybiBlbCA/IGVsLm93bmVyRG9jdW1lbnQgJiYgZWwgPT09IGVsLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlSW5wdXRDbGljaygpIHtcbiAgICAvLyBJbnB1dCB3aWxsIG5vdCBiZSBmb2N1c2VkIGlmIGl0J3MgZGlzYWJsZWRcbiAgICBpZiAodGhpcy5pc0lucHV0Rm9jdXNlZCgpICYmICF0aGlzLmlzT3BlbigpKSB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiB0cnVlIH0pO1xuICB9XG5cbiAgY29tcG9zZUV2ZW50SGFuZGxlcnMoaW50ZXJuYWwsIGV4dGVybmFsKSB7XG4gICAgcmV0dXJuIGV4dGVybmFsXG4gICAgICA/IGUgPT4ge1xuICAgICAgICAgIGludGVybmFsKGUpO1xuICAgICAgICAgIGV4dGVybmFsKGUpO1xuICAgICAgICB9XG4gICAgICA6IGludGVybmFsO1xuICB9XG5cbiAgaXNPcGVuKCkge1xuICAgIHJldHVybiAnb3BlbicgaW4gdGhpcy5wcm9wcyA/IHRoaXMucHJvcHMub3BlbiA6IHRoaXMuc3RhdGUuaXNPcGVuO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmRlYnVnKSB7XG4gICAgICAvLyB5b3UgZG9uJ3QgbGlrZSBpdCwgeW91IGxvdmUgaXRcbiAgICAgIHRoaXMuX2RlYnVnU3RhdGVzLnB1c2goe1xuICAgICAgICBpZDogdGhpcy5fZGVidWdTdGF0ZXMubGVuZ3RoLFxuICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaW5wdXRQcm9wcywgaXRlbXMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBvcGVuID0gdGhpcy5pc09wZW4oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17eyAuLi50aGlzLnByb3BzLndyYXBwZXJTdHlsZSB9fSB7Li4udGhpcy5wcm9wcy53cmFwcGVyUHJvcHN9PlxuICAgICAgICB7dGhpcy5wcm9wcy5yZW5kZXJJbnB1dCh7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IG9wZW4sXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgICAgICByZWY6IHRoaXMuZXhwb3NlQVBJLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlSW5wdXRGb2N1cyxcbiAgICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgICBvbktleURvd246IHRoaXMuY29tcG9zZUV2ZW50SGFuZGxlcnModGhpcy5oYW5kbGVLZXlEb3duLCBpbnB1dFByb3BzLm9uS2V5RG93biksXG4gICAgICAgICAgb25DbGljazogdGhpcy5jb21wb3NlRXZlbnRIYW5kbGVycyh0aGlzLmhhbmRsZUlucHV0Q2xpY2ssIGlucHV0UHJvcHMub25DbGljayksXG4gICAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pfVxuICAgICAgICB7b3BlbiAmJiAhIWl0ZW1zLmxlbmd0aCAmJiB0aGlzLnJlbmRlck1lbnUoKX1cbiAgICAgICAge3RoaXMucHJvcHMuZGVidWcgJiYgKFxuICAgICAgICAgIDxwcmUgc3R5bGU9e3sgbWFyZ2luTGVmdDogMzAwIH19PlxuICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z1N0YXRlcy5zbGljZShNYXRoLm1heCgwLCB0aGlzLl9kZWJ1Z1N0YXRlcy5sZW5ndGggLSA1KSwgdGhpcy5fZGVidWdTdGF0ZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3ByZT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBSUE7QUFMQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3QkE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWVBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQXlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBTkE7QUFTQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFLQTtBQUFBO0FBTEE7QUFDQTtBQURBO0FBT0E7OztBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQWhCQTtBQUNBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUF0QkE7QUFDQTtBQUNBO0FBd0JBO0FBRUE7QUFBQTtBQUFBO0FBNUJBO0FBQ0E7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFNQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFSQTtBQUFBO0FBQUE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQVVBOzs7O0FBNWhCQTtBQThoQkE7QUFDQTtBQUNBO0FBaGlCQTtBQThIQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFyQkE7QUFDQTtBQTlIQTtBQTRPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQVBBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFuQkE7QUF5QkE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQVBBO0FBVUE7QUFyREE7QUF3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUEzREE7QUFpRUE7QUFDQTtBQUNBO0FBQ0E7QUFwRUE7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/component/wunderbar/internal/autocomplete.jsx\n"); - -/***/ }), - -/***/ "../ui/component/wunderbar/view.jsx": -/*!******************************************!*\ - !*** ../ui/component/wunderbar/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! config */ \"../config.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var _internal_autocomplete__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internal/autocomplete */ \"../ui/component/wunderbar/internal/autocomplete.jsx\");\n/* harmony import */ var component_tag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/tag */ \"../ui/component/tag/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\n\n\n\n\nvar L_KEY_CODE = 76;\nvar ESC_KEY_CODE = 27;\nvar WEB_DEV_PREFIX = \"\".concat(config__WEBPACK_IMPORTED_MODULE_0__[\"URL_DEV\"], \"/\");\nvar WEB_LOCAL_PREFIX = \"\".concat(config__WEBPACK_IMPORTED_MODULE_0__[\"URL_LOCAL\"], \"/\");\nvar WEB_PROD_PREFIX = \"\".concat(config__WEBPACK_IMPORTED_MODULE_0__[\"URL\"], \"/\");\nvar SEARCH_PREFIX = \"$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"SEARCH\"], \"q=\");\n\nvar WunderBar = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(WunderBar, _React$PureComponent);\n\n function WunderBar() {\n var _this;\n\n _classCallCheck(this, WunderBar);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(WunderBar).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"getSuggestionIcon\", function (type) {\n switch (type) {\n case lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].FILE:\n return constants_icons__WEBPACK_IMPORTED_MODULE_2__[\"FILE\"];\n\n case lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].CHANNEL:\n return constants_icons__WEBPACK_IMPORTED_MODULE_2__[\"CHANNEL\"];\n\n case lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].TAG:\n return constants_icons__WEBPACK_IMPORTED_MODULE_2__[\"TAG\"];\n\n default:\n return constants_icons__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH\"];\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"input\", void 0);\n\n _this.state = {\n query: null\n };\n _assertThisInitialized(_this).handleSubmit = _this.handleSubmit.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(WunderBar, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n }\n }, {\n key: \"handleKeyDown\",\n value: function handleKeyDown(event) {\n var ctrlKey = event.ctrlKey,\n metaKey = event.metaKey,\n keyCode = event.keyCode;\n var _this$props = this.props,\n doFocus = _this$props.doFocus,\n doBlur = _this$props.doBlur,\n focused = _this$props.focused;\n\n if (this.input) {\n if (focused && keyCode === ESC_KEY_CODE) {\n this.input.blur();\n doBlur();\n return;\n }\n }\n }\n }, {\n key: \"handleChange\",\n value: function handleChange(e) {\n var value = e.target.value;\n var updateSearchQuery = this.props.updateSearchQuery;\n updateSearchQuery(value);\n }\n }, {\n key: \"handleSubmit\",\n value: function handleSubmit(value, suggestion) {\n var _this$props2 = this.props,\n onSubmit = _this$props2.onSubmit,\n onSearch = _this$props2.onSearch,\n doShowSnackBar = _this$props2.doShowSnackBar,\n history = _this$props2.history;\n var query = value.trim();\n this.input && this.input.blur();\n\n var showSnackError = function showSnackError() {\n doShowSnackBar('Invalid LBRY URL entered. Only A-Z, a-z, 0-9, and \"-\" allowed.');\n }; // Allow copying a lbry.tv url and pasting it into the search bar\n\n\n var includesLbryTvProd = query.includes(WEB_PROD_PREFIX);\n var includesLbryTvLocal = query.includes(WEB_LOCAL_PREFIX);\n var includesLbryTvDev = query.includes(WEB_DEV_PREFIX);\n var wasCopiedFromWeb = includesLbryTvDev || includesLbryTvLocal || includesLbryTvProd;\n\n if (wasCopiedFromWeb) {\n if (includesLbryTvDev) {\n query = query.slice(WEB_DEV_PREFIX.length);\n } else if (includesLbryTvLocal) {\n query = query.slice(WEB_LOCAL_PREFIX.length);\n } else {\n query = query.slice(WEB_PROD_PREFIX.length);\n }\n\n query = query.replace(/:/g, '#');\n\n if (query.includes(SEARCH_PREFIX)) {\n query = query.slice(SEARCH_PREFIX.length);\n onSearch(query);\n return;\n } else {\n query = \"lbry://\".concat(query);\n onSubmit(query);\n return;\n }\n } // User selected a suggestion\n\n\n if (suggestion) {\n if (suggestion.type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].SEARCH) {\n onSearch(query);\n } else if (suggestion.type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].TAG) {\n history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?t=\").concat(suggestion.value));\n } else if (Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"isURIValid\"])(query)) {\n var uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"normalizeURI\"])(query);\n onSubmit(uri);\n } else {\n showSnackError();\n }\n\n return;\n } // Currently no suggestion is highlighted. The user may have started\n // typing, then lost focus and came back later on the same page\n\n\n try {\n if (Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"isURIValid\"])(query)) {\n var _uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"normalizeURI\"])(query);\n\n onSubmit(_uri);\n } else {\n showSnackError();\n }\n } catch (e) {\n onSearch(query);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props3 = this.props,\n suggestions = _this$props3.suggestions,\n doFocus = _this$props3.doFocus,\n doBlur = _this$props3.doBlur,\n searchQuery = _this$props3.searchQuery;\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"wunderbar\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_2__[\"SEARCH\"]\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_internal_autocomplete__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n autoHighlight: true,\n wrapperStyle: {\n flex: 1,\n position: 'relative'\n },\n value: searchQuery,\n items: suggestions,\n getItemValue: function getItemValue(item) {\n return item.value;\n },\n onChange: this.handleChange,\n onSelect: this.handleSubmit,\n inputProps: {\n onFocus: doFocus,\n onBlur: doBlur\n },\n renderInput: function renderInput(props) {\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"input\", _extends({}, props, {\n ref: function ref(el) {\n props.ref(el);\n _this2.input = el;\n },\n className: \"wunderbar__input\",\n placeholder: __('Enter a LBRY URL or search for videos, music, games and more')\n }));\n },\n renderItem: function renderItem(_ref, isHighlighted) {\n var value = _ref.value,\n type = _ref.type,\n shorthand = _ref.shorthand;\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n // Use value + type for key because there might be suggestions with same value but different type\n key: \"\".concat(value, \"-\").concat(type),\n className: classnames__WEBPACK_IMPORTED_MODULE_4___default()('wunderbar__suggestion', {\n 'wunderbar__active-suggestion': isHighlighted\n })\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n icon: _this2.getSuggestionIcon(type)\n }), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"wunderbar__suggestion-label\"\n }, type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].TAG ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_tag__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n name: value\n }) : shorthand || value), isHighlighted && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"wunderbar__suggestion-label--action\"\n }, type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].SEARCH && __('Search'), type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].CHANNEL && __('View channel'), type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].FILE && __('View file'), type === lbry_redux__WEBPACK_IMPORTED_MODULE_5__[\"SEARCH_TYPES\"].TAG && __('View Tag')));\n }\n }));\n }\n }]);\n\n return WunderBar;\n}(react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_6__[\"withRouter\"])(WunderBar));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3d1bmRlcmJhci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQvd3VuZGVyYmFyL3ZpZXcuanN4PzFlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IFVSTCwgVVJMX0xPQ0FMLCBVUkxfREVWIH0gZnJvbSAnY29uZmlnJztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplVVJJLCBTRUFSQ0hfVFlQRVMsIGlzVVJJVmFsaWQgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCBBdXRvY29tcGxldGUgZnJvbSAnLi9pbnRlcm5hbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IFRhZyBmcm9tICdjb21wb25lbnQvdGFnJztcblxuY29uc3QgTF9LRVlfQ09ERSA9IDc2O1xuY29uc3QgRVNDX0tFWV9DT0RFID0gMjc7XG5jb25zdCBXRUJfREVWX1BSRUZJWCA9IGAke1VSTF9ERVZ9L2A7XG5jb25zdCBXRUJfTE9DQUxfUFJFRklYID0gYCR7VVJMX0xPQ0FMfS9gO1xuY29uc3QgV0VCX1BST0RfUFJFRklYID0gYCR7VVJMfS9gO1xuY29uc3QgU0VBUkNIX1BSRUZJWCA9IGAkLyR7UEFHRVMuU0VBUkNIfXE9YDtcblxudHlwZSBQcm9wcyA9IHtcbiAgc2VhcmNoUXVlcnk6ID9zdHJpbmcsXG4gIHVwZGF0ZVNlYXJjaFF1ZXJ5OiBzdHJpbmcgPT4gdm9pZCxcbiAgb25TZWFyY2g6IHN0cmluZyA9PiB2b2lkLFxuICBvblN1Ym1pdDogc3RyaW5nID0+IHZvaWQsXG4gIHd1bmRlcmJhclZhbHVlOiA/c3RyaW5nLFxuICBzdWdnZXN0aW9uczogQXJyYXk8c3RyaW5nPixcbiAgZG9Gb2N1czogKCkgPT4gdm9pZCxcbiAgZG9CbHVyOiAoKSA9PiB2b2lkLFxuICBmb2N1c2VkOiBib29sZWFuLFxuICBkb1Nob3dTbmFja0Jhcjogc3RyaW5nID0+IHZvaWQsXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIHF1ZXJ5OiA/c3RyaW5nLFxufTtcblxuY2xhc3MgV3VuZGVyQmFyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBxdWVyeTogbnVsbCxcbiAgICB9O1xuXG4gICAgKHRoaXM6IGFueSkuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTtcbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25JY29uID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBTRUFSQ0hfVFlQRVMuRklMRTpcbiAgICAgICAgcmV0dXJuIElDT05TLkZJTEU7XG4gICAgICBjYXNlIFNFQVJDSF9UWVBFUy5DSEFOTkVMOlxuICAgICAgICByZXR1cm4gSUNPTlMuQ0hBTk5FTDtcbiAgICAgIGNhc2UgU0VBUkNIX1RZUEVTLlRBRzpcbiAgICAgICAgcmV0dXJuIElDT05TLlRBRztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBJQ09OUy5TRUFSQ0g7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ8Kj4pIHtcbiAgICBjb25zdCB7IGN0cmxLZXksIG1ldGFLZXksIGtleUNvZGUgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHsgZG9Gb2N1cywgZG9CbHVyLCBmb2N1c2VkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIGlmIChmb2N1c2VkICYmIGtleUNvZGUgPT09IEVTQ19LRVlfQ09ERSkge1xuICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgZG9CbHVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBTeW50aGV0aWNJbnB1dEV2ZW50PCo+KSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZS50YXJnZXQ7XG4gICAgY29uc3QgeyB1cGRhdGVTZWFyY2hRdWVyeSB9ID0gdGhpcy5wcm9wcztcbiAgICB1cGRhdGVTZWFyY2hRdWVyeSh2YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQodmFsdWU6IHN0cmluZywgc3VnZ2VzdGlvbj86IHsgdmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB7IG9uU3VibWl0LCBvblNlYXJjaCwgZG9TaG93U25hY2tCYXIsIGhpc3RvcnkgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHF1ZXJ5ID0gdmFsdWUudHJpbSgpO1xuICAgIHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgY29uc3Qgc2hvd1NuYWNrRXJyb3IgPSAoKSA9PiB7XG4gICAgICBkb1Nob3dTbmFja0JhcignSW52YWxpZCBMQlJZIFVSTCBlbnRlcmVkLiBPbmx5IEEtWiwgYS16LCAwLTksIGFuZCBcIi1cIiBhbGxvd2VkLicpO1xuICAgIH07XG5cbiAgICAvLyBBbGxvdyBjb3B5aW5nIGEgbGJyeS50diB1cmwgYW5kIHBhc3RpbmcgaXQgaW50byB0aGUgc2VhcmNoIGJhclxuICAgIGNvbnN0IGluY2x1ZGVzTGJyeVR2UHJvZCA9IHF1ZXJ5LmluY2x1ZGVzKFdFQl9QUk9EX1BSRUZJWCk7XG4gICAgY29uc3QgaW5jbHVkZXNMYnJ5VHZMb2NhbCA9IHF1ZXJ5LmluY2x1ZGVzKFdFQl9MT0NBTF9QUkVGSVgpO1xuICAgIGNvbnN0IGluY2x1ZGVzTGJyeVR2RGV2ID0gcXVlcnkuaW5jbHVkZXMoV0VCX0RFVl9QUkVGSVgpO1xuICAgIGNvbnN0IHdhc0NvcGllZEZyb21XZWIgPSBpbmNsdWRlc0xicnlUdkRldiB8fCBpbmNsdWRlc0xicnlUdkxvY2FsIHx8IGluY2x1ZGVzTGJyeVR2UHJvZDtcblxuICAgIGlmICh3YXNDb3BpZWRGcm9tV2ViKSB7XG4gICAgICBpZiAoaW5jbHVkZXNMYnJ5VHZEZXYpIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5zbGljZShXRUJfREVWX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlc0xicnlUdkxvY2FsKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkuc2xpY2UoV0VCX0xPQ0FMX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5zbGljZShXRUJfUFJPRF9QUkVGSVgubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKC86L2csICcjJyk7XG5cbiAgICAgIGlmIChxdWVyeS5pbmNsdWRlcyhTRUFSQ0hfUFJFRklYKSkge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnNsaWNlKFNFQVJDSF9QUkVGSVgubGVuZ3RoKTtcbiAgICAgICAgb25TZWFyY2gocXVlcnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSA9IGBsYnJ5Oi8vJHtxdWVyeX1gO1xuICAgICAgICBvblN1Ym1pdChxdWVyeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVc2VyIHNlbGVjdGVkIGEgc3VnZ2VzdGlvblxuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSBTRUFSQ0hfVFlQRVMuU0VBUkNIKSB7XG4gICAgICAgIG9uU2VhcmNoKHF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSBTRUFSQ0hfVFlQRVMuVEFHKSB7XG4gICAgICAgIGhpc3RvcnkucHVzaChgLyQvJHtQQUdFUy5ESVNDT1ZFUn0/dD0ke3N1Z2dlc3Rpb24udmFsdWV9YCk7XG4gICAgICB9IGVsc2UgaWYgKGlzVVJJVmFsaWQocXVlcnkpKSB7XG4gICAgICAgIGNvbnN0IHVyaSA9IG5vcm1hbGl6ZVVSSShxdWVyeSk7XG4gICAgICAgIG9uU3VibWl0KHVyaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG93U25hY2tFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEN1cnJlbnRseSBubyBzdWdnZXN0aW9uIGlzIGhpZ2hsaWdodGVkLiBUaGUgdXNlciBtYXkgaGF2ZSBzdGFydGVkXG4gICAgLy8gdHlwaW5nLCB0aGVuIGxvc3QgZm9jdXMgYW5kIGNhbWUgYmFjayBsYXRlciBvbiB0aGUgc2FtZSBwYWdlXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc1VSSVZhbGlkKHF1ZXJ5KSkge1xuICAgICAgICBjb25zdCB1cmkgPSBub3JtYWxpemVVUkkocXVlcnkpO1xuICAgICAgICBvblN1Ym1pdCh1cmkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd1NuYWNrRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvblNlYXJjaChxdWVyeSk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXQ6ID9IVE1MSW5wdXRFbGVtZW50O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN1Z2dlc3Rpb25zLCBkb0ZvY3VzLCBkb0JsdXIsIHNlYXJjaFF1ZXJ5IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid3VuZGVyYmFyXCI+XG4gICAgICAgIDxJY29uIGljb249e0lDT05TLlNFQVJDSH0gLz5cbiAgICAgICAgPEF1dG9jb21wbGV0ZVxuICAgICAgICAgIGF1dG9IaWdobGlnaHRcbiAgICAgICAgICB3cmFwcGVyU3R5bGU9e3sgZmxleDogMSwgcG9zaXRpb246ICdyZWxhdGl2ZScgfX1cbiAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgaXRlbXM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgIGdldEl0ZW1WYWx1ZT17aXRlbSA9PiBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICBvblNlbGVjdD17dGhpcy5oYW5kbGVTdWJtaXR9XG4gICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgb25Gb2N1czogZG9Gb2N1cyxcbiAgICAgICAgICAgIG9uQmx1cjogZG9CbHVyLFxuICAgICAgICAgIH19XG4gICAgICAgICAgcmVuZGVySW5wdXQ9e3Byb3BzID0+IChcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIHJlZj17ZWwgPT4ge1xuICAgICAgICAgICAgICAgIHByb3BzLnJlZihlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dCA9IGVsO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3dW5kZXJiYXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdFbnRlciBhIExCUlkgVVJMIG9yIHNlYXJjaCBmb3IgdmlkZW9zLCBtdXNpYywgZ2FtZXMgYW5kIG1vcmUnKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsoeyB2YWx1ZSwgdHlwZSwgc2hvcnRoYW5kIH0sIGlzSGlnaGxpZ2h0ZWQpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgLy8gVXNlIHZhbHVlICsgdHlwZSBmb3Iga2V5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgc3VnZ2VzdGlvbnMgd2l0aCBzYW1lIHZhbHVlIGJ1dCBkaWZmZXJlbnQgdHlwZVxuICAgICAgICAgICAgICBrZXk9e2Ake3ZhbHVlfS0ke3R5cGV9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCd3dW5kZXJiYXJfX3N1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgJ3d1bmRlcmJhcl9fYWN0aXZlLXN1Z2dlc3Rpb24nOiBpc0hpZ2hsaWdodGVkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gaWNvbj17dGhpcy5nZXRTdWdnZXN0aW9uSWNvbih0eXBlKX0gLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwid3VuZGVyYmFyX19zdWdnZXN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3R5cGUgPT09IFNFQVJDSF9UWVBFUy5UQUcgPyA8VGFnIG5hbWU9e3ZhbHVlfSAvPiA6IHNob3J0aGFuZCB8fCB2YWx1ZX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7aXNIaWdobGlnaHRlZCAmJiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwid3VuZGVyYmFyX19zdWdnZXN0aW9uLWxhYmVsLS1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgIHt0eXBlID09PSBTRUFSQ0hfVFlQRVMuU0VBUkNIICYmIF9fKCdTZWFyY2gnKX1cbiAgICAgICAgICAgICAgICAgIHt0eXBlID09PSBTRUFSQ0hfVFlQRVMuQ0hBTk5FTCAmJiBfXygnVmlldyBjaGFubmVsJyl9XG4gICAgICAgICAgICAgICAgICB7dHlwZSA9PT0gU0VBUkNIX1RZUEVTLkZJTEUgJiYgX18oJ1ZpZXcgZmlsZScpfVxuICAgICAgICAgICAgICAgICAge3R5cGUgPT09IFNFQVJDSF9UWVBFUy5UQUcgJiYgX18oJ1ZpZXcgVGFnJyl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihXdW5kZXJCYXIpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtQkE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBRkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFyQkE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFUQTtBQVVBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFlQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFHQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTEE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFqQ0E7QUFDQTtBQUNBO0FBbUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBakRBO0FBb0RBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTs7O0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFQQTtBQWJBO0FBdUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBYkE7QUF2QkE7QUFnREE7Ozs7QUEvS0E7QUFDQTtBQWlMQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/wunderbar/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/youtubeTransferStatus/index.js": -/*!******************************************************!*\ - !*** ../ui/component/youtubeTransferStatus/index.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/component/youtubeTransferStatus/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n youtubeChannels: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectYoutubeChannels\"])(state),\n youtubeImportPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectYouTubeImportPending\"])(state),\n userFetchPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUserIsPending\"])(state),\n videosImported: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectYouTubeImportVideosComplete\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n claimChannels: function claimChannels() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doClaimYoutubeChannels\"])());\n },\n updateUser: function updateUser() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserFetch\"])());\n },\n checkYoutubeTransfer: function checkYoutubeTransfer() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doCheckYoutubeTransfer\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3lvdXR1YmVUcmFuc2ZlclN0YXR1cy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQveW91dHViZVRyYW5zZmVyU3RhdHVzL2luZGV4LmpzP2M5NWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdFlvdXR1YmVDaGFubmVscyxcbiAgc2VsZWN0WW91VHViZUltcG9ydFBlbmRpbmcsXG4gIHNlbGVjdFVzZXJJc1BlbmRpbmcsXG4gIGRvQ2xhaW1Zb3V0dWJlQ2hhbm5lbHMsXG4gIGRvVXNlckZldGNoLFxuICBzZWxlY3RZb3VUdWJlSW1wb3J0VmlkZW9zQ29tcGxldGUsXG4gIGRvQ2hlY2tZb3V0dWJlVHJhbnNmZXIsXG59IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFlvdXR1YmVDaGFubmVsTGlzdCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICB5b3V0dWJlQ2hhbm5lbHM6IHNlbGVjdFlvdXR1YmVDaGFubmVscyhzdGF0ZSksXG4gIHlvdXR1YmVJbXBvcnRQZW5kaW5nOiBzZWxlY3RZb3VUdWJlSW1wb3J0UGVuZGluZyhzdGF0ZSksXG4gIHVzZXJGZXRjaFBlbmRpbmc6IHNlbGVjdFVzZXJJc1BlbmRpbmcoc3RhdGUpLFxuICB2aWRlb3NJbXBvcnRlZDogc2VsZWN0WW91VHViZUltcG9ydFZpZGVvc0NvbXBsZXRlKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xhaW1DaGFubmVsczogKCkgPT4gZGlzcGF0Y2goZG9DbGFpbVlvdXR1YmVDaGFubmVscygpKSxcbiAgdXBkYXRlVXNlcjogKCkgPT4gZGlzcGF0Y2goZG9Vc2VyRmV0Y2goKSksXG4gIGNoZWNrWW91dHViZVRyYW5zZmVyOiAoKSA9PiBkaXNwYXRjaChkb0NoZWNrWW91dHViZVRyYW5zZmVyKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShZb3V0dWJlQ2hhbm5lbExpc3QpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/youtubeTransferStatus/index.js\n"); - -/***/ }), - -/***/ "../ui/component/youtubeTransferStatus/view.jsx": -/*!******************************************************!*\ - !*** ../ui/component/youtubeTransferStatus/view.jsx ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return YoutubeTransferStatus; });\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n\n\n\n\n\nvar STATUS_URL = 'https://lbry.com/youtube/status/';\nfunction YoutubeTransferStatus(props) {\n var youtubeChannels = props.youtubeChannels,\n youtubeImportPending = props.youtubeImportPending,\n claimChannels = props.claimChannels,\n videosImported = props.videosImported,\n checkYoutubeTransfer = props.checkYoutubeTransfer,\n updateUser = props.updateUser,\n _props$hideChannelLin = props.hideChannelLink,\n hideChannelLink = _props$hideChannelLin === void 0 ? false : _props$hideChannelLin;\n var hasChannels = youtubeChannels && youtubeChannels.length;\n var transferEnabled = youtubeChannels.some(function (status) {\n return status.transferable;\n });\n var hasPendingTransfers = youtubeChannels.some(function (status) {\n return status.transfer_state === lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"YOUTUBE_STATUSES\"].PENDING_TRANSFER;\n });\n var isYoutubeTransferComplete = hasChannels && youtubeChannels.every(function (channel) {\n return channel.transfer_state === lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"YOUTUBE_STATUSES\"].COMPLETED_TRANSFER;\n });\n var total;\n var complete;\n\n if (hasPendingTransfers && videosImported) {\n complete = videosImported[0];\n total = videosImported[1];\n }\n\n function getMessage(channel) {\n var transferable = channel.transferable,\n transferState = channel.transfer_state,\n syncStatus = channel.sync_status;\n\n if (!transferable) {\n switch (transferState) {\n case lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"YOUTUBE_STATUSES\"].NOT_TRANSFERRED:\n return syncStatus[0].toUpperCase() + syncStatus.slice(1);\n\n case lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"YOUTUBE_STATUSES\"].PENDING_TRANSFER:\n return __('Transfer in progress');\n\n case lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"YOUTUBE_STATUSES\"].COMPLETED_TRANSFER:\n return __('Completed transfer');\n }\n } else {\n return __('Ready to transfer');\n }\n }\n\n react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"](function () {\n // If a channel is transferable, there's nothing to check\n if (hasPendingTransfers) {\n checkYoutubeTransfer();\n var interval = setInterval(function () {\n checkYoutubeTransfer();\n updateUser();\n }, 60 * 1000);\n return function () {\n clearInterval(interval);\n };\n }\n }, [hasPendingTransfers, checkYoutubeTransfer, updateUser]);\n return hasChannels && !isYoutubeTransferComplete && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: youtubeChannels.length > 1 ? __('Your YouTube Channels') : __('Your YouTube Channel'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"span\", null, hasPendingTransfers && __('Your videos are currently being transferred. There is nothing else for you to do.'), transferEnabled && !hasPendingTransfers && __('Your videos are ready to be transferred.'), !transferEnabled && !hasPendingTransfers && __('Please check back later.')),\n body: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"section\", null, youtubeChannels.map(function (channel, index) {\n var channelName = channel.lbry_channel_name,\n claimId = channel.channel_claim_id,\n statusToken = channel.status_token;\n var url = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"buildURI\"])({\n channelName: channelName,\n channelClaimId: claimId\n });\n var transferState = getMessage(channel);\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n key: url,\n className: \"card--inline\"\n }, claimId ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_claimPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: url,\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"span\", {\n className: \"help\"\n }, transferState),\n properties: false\n }) : react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"section--padded\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"p\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n tokens: {\n channelName: channelName\n }\n }, \"%channelName% is not yet ready to be transferred. Please allow up to one week, though it is frequently faster.\")), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n tokens: {\n statusLink: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: STATUS_URL + statusToken,\n label: __('here')\n }),\n faqLink: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('FAQ'),\n href: \"https://lbry.com/faq/youtube\"\n })\n }\n }, \"You can check your status %statusLink%. This %faqLink% explains the program in more detail.\"))));\n }), videosImported && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"section help\"\n }, __('%complete% / %total% videos transferred', {\n complete: complete,\n total: total\n }))),\n actions: transferEnabled ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n disabled: youtubeImportPending,\n onClick: claimChannels,\n label: youtubeChannels.length > 1 ? __('Claim Channels') : __('Claim Channel')\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/youtube#transfer\"\n })) : !hideChannelLink ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS\"]),\n label: __('View Your Channels')\n })) : false\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3lvdXR1YmVUcmFuc2ZlclN0YXR1cy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQveW91dHViZVRyYW5zZmVyU3RhdHVzL3ZpZXcuanN4PzQ3MWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENsYWltUHJldmlldyBmcm9tICdjb21wb25lbnQvY2xhaW1QcmV2aWV3JztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgeyBZT1VUVUJFX1NUQVRVU0VTIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBidWlsZFVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbmNvbnN0IFNUQVRVU19VUkwgPSAnaHR0cHM6Ly9sYnJ5LmNvbS95b3V0dWJlL3N0YXR1cy8nO1xuXG50eXBlIFByb3BzID0ge1xuICB5b3V0dWJlQ2hhbm5lbHM6IEFycmF5PGFueT4sXG4gIHlvdXR1YmVJbXBvcnRQZW5kaW5nOiBib29sZWFuLFxuICBjbGFpbUNoYW5uZWxzOiAoKSA9PiB2b2lkLFxuICB1cGRhdGVVc2VyOiAoKSA9PiB2b2lkLFxuICBjaGVja1lvdXR1YmVUcmFuc2ZlcjogKCkgPT4gdm9pZCxcbiAgdmlkZW9zSW1wb3J0ZWQ6ID9BcnJheTxudW1iZXI+LCAvLyBbY3VycmVudEFtb3VudEltcG9ydGVkLCB0b3RhbEFtb3VudFRvSW1wb3J0XVxuICBoaWRlQ2hhbm5lbExpbms6IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBZb3V0dWJlVHJhbnNmZXJTdGF0dXMocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB5b3V0dWJlQ2hhbm5lbHMsXG4gICAgeW91dHViZUltcG9ydFBlbmRpbmcsXG4gICAgY2xhaW1DaGFubmVscyxcbiAgICB2aWRlb3NJbXBvcnRlZCxcbiAgICBjaGVja1lvdXR1YmVUcmFuc2ZlcixcbiAgICB1cGRhdGVVc2VyLFxuICAgIGhpZGVDaGFubmVsTGluayA9IGZhbHNlLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhc0NoYW5uZWxzID0geW91dHViZUNoYW5uZWxzICYmIHlvdXR1YmVDaGFubmVscy5sZW5ndGg7XG4gIGNvbnN0IHRyYW5zZmVyRW5hYmxlZCA9IHlvdXR1YmVDaGFubmVscy5zb21lKHN0YXR1cyA9PiBzdGF0dXMudHJhbnNmZXJhYmxlKTtcbiAgY29uc3QgaGFzUGVuZGluZ1RyYW5zZmVycyA9IHlvdXR1YmVDaGFubmVscy5zb21lKFxuICAgIHN0YXR1cyA9PiBzdGF0dXMudHJhbnNmZXJfc3RhdGUgPT09IFlPVVRVQkVfU1RBVFVTRVMuUEVORElOR19UUkFOU0ZFUlxuICApO1xuICBjb25zdCBpc1lvdXR1YmVUcmFuc2ZlckNvbXBsZXRlID1cbiAgICBoYXNDaGFubmVscyAmJiB5b3V0dWJlQ2hhbm5lbHMuZXZlcnkoY2hhbm5lbCA9PiBjaGFubmVsLnRyYW5zZmVyX3N0YXRlID09PSBZT1VUVUJFX1NUQVRVU0VTLkNPTVBMRVRFRF9UUkFOU0ZFUik7XG5cbiAgbGV0IHRvdGFsO1xuICBsZXQgY29tcGxldGU7XG4gIGlmIChoYXNQZW5kaW5nVHJhbnNmZXJzICYmIHZpZGVvc0ltcG9ydGVkKSB7XG4gICAgY29tcGxldGUgPSB2aWRlb3NJbXBvcnRlZFswXTtcbiAgICB0b3RhbCA9IHZpZGVvc0ltcG9ydGVkWzFdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWVzc2FnZShjaGFubmVsKSB7XG4gICAgY29uc3QgeyB0cmFuc2ZlcmFibGUsIHRyYW5zZmVyX3N0YXRlOiB0cmFuc2ZlclN0YXRlLCBzeW5jX3N0YXR1czogc3luY1N0YXR1cyB9ID0gY2hhbm5lbDtcbiAgICBpZiAoIXRyYW5zZmVyYWJsZSkge1xuICAgICAgc3dpdGNoICh0cmFuc2ZlclN0YXRlKSB7XG4gICAgICAgIGNhc2UgWU9VVFVCRV9TVEFUVVNFUy5OT1RfVFJBTlNGRVJSRUQ6XG4gICAgICAgICAgcmV0dXJuIHN5bmNTdGF0dXNbMF0udG9VcHBlckNhc2UoKSArIHN5bmNTdGF0dXMuc2xpY2UoMSk7XG4gICAgICAgIGNhc2UgWU9VVFVCRV9TVEFUVVNFUy5QRU5ESU5HX1RSQU5TRkVSOlxuICAgICAgICAgIHJldHVybiBfXygnVHJhbnNmZXIgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgICAgY2FzZSBZT1VUVUJFX1NUQVRVU0VTLkNPTVBMRVRFRF9UUkFOU0ZFUjpcbiAgICAgICAgICByZXR1cm4gX18oJ0NvbXBsZXRlZCB0cmFuc2ZlcicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX18oJ1JlYWR5IHRvIHRyYW5zZmVyJyk7XG4gICAgfVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJZiBhIGNoYW5uZWwgaXMgdHJhbnNmZXJhYmxlLCB0aGVyZSdzIG5vdGhpbmcgdG8gY2hlY2tcbiAgICBpZiAoaGFzUGVuZGluZ1RyYW5zZmVycykge1xuICAgICAgY2hlY2tZb3V0dWJlVHJhbnNmZXIoKTtcblxuICAgICAgbGV0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBjaGVja1lvdXR1YmVUcmFuc2ZlcigpO1xuICAgICAgICB1cGRhdGVVc2VyKCk7XG4gICAgICB9LCA2MCAqIDEwMDApO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaGFzUGVuZGluZ1RyYW5zZmVycywgY2hlY2tZb3V0dWJlVHJhbnNmZXIsIHVwZGF0ZVVzZXJdKTtcblxuICByZXR1cm4gKFxuICAgIGhhc0NoYW5uZWxzICYmXG4gICAgIWlzWW91dHViZVRyYW5zZmVyQ29tcGxldGUgJiYgKFxuICAgICAgPGRpdj5cbiAgICAgICAgPENhcmRcbiAgICAgICAgICB0aXRsZT17eW91dHViZUNoYW5uZWxzLmxlbmd0aCA+IDEgPyBfXygnWW91ciBZb3VUdWJlIENoYW5uZWxzJykgOiBfXygnWW91ciBZb3VUdWJlIENoYW5uZWwnKX1cbiAgICAgICAgICBzdWJ0aXRsZT17XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge2hhc1BlbmRpbmdUcmFuc2ZlcnMgJiZcbiAgICAgICAgICAgICAgICBfXygnWW91ciB2aWRlb3MgYXJlIGN1cnJlbnRseSBiZWluZyB0cmFuc2ZlcnJlZC4gVGhlcmUgaXMgbm90aGluZyBlbHNlIGZvciB5b3UgdG8gZG8uJyl9XG4gICAgICAgICAgICAgIHt0cmFuc2ZlckVuYWJsZWQgJiYgIWhhc1BlbmRpbmdUcmFuc2ZlcnMgJiYgX18oJ1lvdXIgdmlkZW9zIGFyZSByZWFkeSB0byBiZSB0cmFuc2ZlcnJlZC4nKX1cbiAgICAgICAgICAgICAgeyF0cmFuc2ZlckVuYWJsZWQgJiYgIWhhc1BlbmRpbmdUcmFuc2ZlcnMgJiYgX18oJ1BsZWFzZSBjaGVjayBiYWNrIGxhdGVyLicpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBib2R5PXtcbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICB7eW91dHViZUNoYW5uZWxzLm1hcCgoY2hhbm5lbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBsYnJ5X2NoYW5uZWxfbmFtZTogY2hhbm5lbE5hbWUsXG4gICAgICAgICAgICAgICAgICBjaGFubmVsX2NsYWltX2lkOiBjbGFpbUlkLFxuICAgICAgICAgICAgICAgICAgc3RhdHVzX3Rva2VuOiBzdGF0dXNUb2tlbixcbiAgICAgICAgICAgICAgICB9ID0gY2hhbm5lbDtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVSSSh7IGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZDogY2xhaW1JZCB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlclN0YXRlID0gZ2V0TWVzc2FnZShjaGFubmVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3VybH0gY2xhc3NOYW1lPVwiY2FyZC0taW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjbGFpbUlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxDbGFpbVByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgIHVyaT17dXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucz17PHNwYW4gY2xhc3NOYW1lPVwiaGVscFwiPnt0cmFuc2ZlclN0YXRlfTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbi0tcGFkZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJWNoYW5uZWxOYW1lJSBpcyBub3QgeWV0IHJlYWR5IHRvIGJlIHRyYW5zZmVycmVkLiBQbGVhc2UgYWxsb3cgdXAgdG8gb25lIHdlZWssIHRob3VnaCBpdCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW50bHkgZmFzdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0xpbms6IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGhyZWY9e1NUQVRVU19VUkwgKyBzdGF0dXNUb2tlbn0gbGFiZWw9e19fKCdoZXJlJyl9IC8+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFxTGluazogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdGQVEnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3lvdXR1YmVcIiAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGVjayB5b3VyIHN0YXR1cyAlc3RhdHVzTGluayUuIFRoaXMgJWZhcUxpbmslIGV4cGxhaW5zIHRoZSBwcm9ncmFtIGluIG1vcmUgZGV0YWlsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHt2aWRlb3NJbXBvcnRlZCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uIGhlbHBcIj57X18oJyVjb21wbGV0ZSUgLyAldG90YWwlIHZpZGVvcyB0cmFuc2ZlcnJlZCcsIHsgY29tcGxldGUsIHRvdGFsIH0pfTwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgIHRyYW5zZmVyRW5hYmxlZCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17eW91dHViZUltcG9ydFBlbmRpbmd9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtjbGFpbUNoYW5uZWxzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3lvdXR1YmVDaGFubmVscy5sZW5ndGggPiAxID8gX18oJ0NsYWltIENoYW5uZWxzJykgOiBfXygnQ2xhaW0gQ2hhbm5lbCcpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdMZWFybiBtb3JlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS95b3V0dWJlI3RyYW5zZmVyXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogIWhpZGVDaGFubmVsTGluayA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLkNIQU5ORUxTfWB9IGxhYmVsPXtfXygnVmlldyBZb3VyIENoYW5uZWxzJyl9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFOQTtBQURBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFiQTtBQWdCQTtBQUtBO0FBQ0E7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQU1BO0FBQUE7QUFHQTtBQUNBO0FBREE7QUFEQTtBQVNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQTlCQTtBQTZDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBekVBO0FBbUZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/youtubeTransferStatus/view.jsx\n"); - -/***/ }), - -/***/ "../ui/component/yrbl/gerbil-happy.png": -/*!*********************************************!*\ - !*** ../ui/component/yrbl/gerbil-happy.png ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/gerbil-happy.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3lyYmwvZ2VyYmlsLWhhcHB5LnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb21wb25lbnQveXJibC9nZXJiaWwtaGFwcHkucG5nP2I1NTMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1nL2dlcmJpbC1oYXBweS5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/yrbl/gerbil-happy.png\n"); - -/***/ }), - -/***/ "../ui/component/yrbl/gerbil-sad.png": -/*!*******************************************!*\ - !*** ../ui/component/yrbl/gerbil-sad.png ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("module.exports = __webpack_require__.p + \"img/gerbil-sad.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3lyYmwvZ2VyYmlsLXNhZC5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29tcG9uZW50L3lyYmwvZ2VyYmlsLXNhZC5wbmc/ZjQ4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJpbWcvZ2VyYmlsLXNhZC5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/component/yrbl/gerbil-sad.png\n"); - -/***/ }), - -/***/ "../ui/component/yrbl/index.jsx": -/*!**************************************!*\ - !*** ../ui/component/yrbl/index.jsx ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _default; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _gerbil_happy_png__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gerbil-happy.png */ \"../ui/component/yrbl/gerbil-happy.png\");\n/* harmony import */ var _gerbil_happy_png__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_gerbil_happy_png__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _gerbil_sad_png__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gerbil-sad.png */ \"../ui/component/yrbl/gerbil-sad.png\");\n/* harmony import */ var _gerbil_sad_png__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_gerbil_sad_png__WEBPACK_IMPORTED_MODULE_3__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar yrblTypes = {\n happy: _gerbil_happy_png__WEBPACK_IMPORTED_MODULE_2___default.a,\n sad: _gerbil_sad_png__WEBPACK_IMPORTED_MODULE_3___default.a\n};\n\nvar _default = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(_default, _React$PureComponent);\n\n function _default() {\n _classCallCheck(this, _default);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(_default).apply(this, arguments));\n }\n\n _createClass(_default, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n title = _this$props.title,\n subtitle = _this$props.subtitle,\n type = _this$props.type,\n className = _this$props.className;\n var image = yrblTypes[type];\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"yrbl__wrap\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"img\", {\n alt: \"Friendly gerbil\",\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('yrbl', className),\n src: \"\".concat(image)\n }), title && subtitle && react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"yrbl__content\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"h2\", {\n className: \"card__title card__title--deprecated\"\n }, title), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", null, subtitle)));\n }\n }]);\n\n return _default;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n_defineProperty(_default, \"defaultProps\", {\n type: 'happy'\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29tcG9uZW50L3lyYmwvaW5kZXguanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbXBvbmVudC95cmJsL2luZGV4LmpzeD9hMDQzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBIYXBweVlyYmwgZnJvbSAnLi9nZXJiaWwtaGFwcHkucG5nJztcbmltcG9ydCBTYWRZcmJsIGZyb20gJy4vZ2VyYmlsLXNhZC5wbmcnO1xuXG50eXBlIFByb3BzID0ge1xuICB0aXRsZT86IHN0cmluZyxcbiAgc3VidGl0bGU/OiBzdHJpbmcgfCBSZWFjdC5Ob2RlLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbn07XG5cbmNvbnN0IHlyYmxUeXBlcyA9IHtcbiAgaGFwcHk6IEhhcHB5WXJibCxcbiAgc2FkOiBTYWRZcmJsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdHlwZTogJ2hhcHB5JyxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB0aXRsZSwgc3VidGl0bGUsIHR5cGUsIGNsYXNzTmFtZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGltYWdlID0geXJibFR5cGVzW3R5cGVdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwieXJibF9fd3JhcFwiPlxuICAgICAgICA8aW1nIGFsdD1cIkZyaWVuZGx5IGdlcmJpbFwiIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygneXJibCcsIGNsYXNzTmFtZSl9IHNyYz17YCR7aW1hZ2V9YH0gLz5cbiAgICAgICAge3RpdGxlICYmIHN1YnRpdGxlICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInlyYmxfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJjYXJkX190aXRsZSBjYXJkX190aXRsZS0tZGVwcmVjYXRlZFwiPnt0aXRsZX08L2gyPlxuICAgICAgICAgICAgPHA+e3N1YnRpdGxlfTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQU1BOzs7O0FBckJBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/component/yrbl/index.jsx\n"); - -/***/ }), - -/***/ "../ui/constants/action_types.js": -/*!***************************************!*\ - !*** ../ui/constants/action_types.js ***! - \***************************************/ -/*! exports provided: WINDOW_FOCUSED, DAEMON_READY, DAEMON_VERSION_MATCH, DAEMON_VERSION_MISMATCH, VOLUME_CHANGED, VOLUME_MUTED, ADD_COMMENT, SHOW_MODAL, HIDE_MODAL, CHANGE_MODALS_ALLOWED, TOGGLE_SEARCH_EXPANDED, PASSWORD_SAVED, SET_WELCOME_VERSION, SET_ALLOW_ANALYTICS, CHANGE_AFTER_AUTH_PATH, WINDOW_SCROLLED, HISTORY_NAVIGATE, UPGRADE_CANCELLED, DOWNLOAD_UPGRADE, UPGRADE_DOWNLOAD_STARTED, UPGRADE_DOWNLOAD_COMPLETED, UPGRADE_DOWNLOAD_PROGRESSED, CHECK_UPGRADE_AVAILABLE, CHECK_UPGRADE_START, CHECK_UPGRADE_SUCCESS, CHECK_UPGRADE_FAIL, CHECK_UPGRADE_SUBSCRIBE, UPDATE_VERSION, UPDATE_REMOTE_VERSION, SKIP_UPGRADE, START_UPGRADE, AUTO_UPDATE_DECLINED, AUTO_UPDATE_DOWNLOADED, CLEAR_UPGRADE_TIMER, GET_NEW_ADDRESS_STARTED, GET_NEW_ADDRESS_COMPLETED, FETCH_TRANSACTIONS_STARTED, FETCH_TRANSACTIONS_COMPLETED, UPDATE_BALANCE, CHECK_ADDRESS_IS_MINE_STARTED, CHECK_ADDRESS_IS_MINE_COMPLETED, SEND_TRANSACTION_STARTED, SEND_TRANSACTION_COMPLETED, SEND_TRANSACTION_FAILED, SUPPORT_TRANSACTION_STARTED, SUPPORT_TRANSACTION_COMPLETED, SUPPORT_TRANSACTION_FAILED, FETCH_FEATURED_CONTENT_STARTED, FETCH_FEATURED_CONTENT_COMPLETED, RESOLVE_URIS_STARTED, RESOLVE_URIS_COMPLETED, FETCH_CHANNEL_CLAIMS_STARTED, FETCH_CHANNEL_CLAIMS_COMPLETED, FETCH_CHANNEL_CLAIM_COUNT_STARTED, FETCH_CLAIM_LIST_MINE_STARTED, FETCH_CLAIM_LIST_MINE_COMPLETED, ABANDON_CLAIM_STARTED, ABANDON_CLAIM_SUCCEEDED, FETCH_CHANNEL_LIST_STARTED, FETCH_CHANNEL_LIST_COMPLETED, CREATE_CHANNEL_STARTED, CREATE_CHANNEL_COMPLETED, PUBLISH_STARTED, PUBLISH_COMPLETED, PUBLISH_FAILED, SET_PLAYING_URI, SET_CONTENT_POSITION, SET_CONTENT_LAST_VIEWED, CLEAR_CONTENT_HISTORY_URI, CLEAR_CONTENT_HISTORY_ALL, FILE_LIST_STARTED, FILE_LIST_SUCCEEDED, FETCH_FILE_INFO_STARTED, FETCH_FILE_INFO_COMPLETED, FETCH_COST_INFO_STARTED, FETCH_COST_INFO_COMPLETED, LOADING_VIDEO_STARTED, LOADING_VIDEO_COMPLETED, LOADING_VIDEO_FAILED, DOWNLOADING_STARTED, DOWNLOADING_PROGRESSED, DOWNLOADING_COMPLETED, PLAY_VIDEO_STARTED, FETCH_AVAILABILITY_STARTED, FETCH_AVAILABILITY_COMPLETED, FILE_DELETE, SEARCH_START, SEARCH_SUCCESS, SEARCH_FAIL, UPDATE_SEARCH_QUERY, UPDATE_SEARCH_SUGGESTIONS, DAEMON_SETTINGS_RECEIVED, CLIENT_SETTING_CHANGED, UPDATE_IS_NIGHT, FINDING_FFMPEG_STARTED, FINDING_FFMPEG_COMPLETED, AUTHENTICATION_STARTED, AUTHENTICATION_SUCCESS, AUTHENTICATION_FAILURE, USER_EMAIL_DECLINE, USER_EMAIL_NEW_STARTED, USER_EMAIL_NEW_SUCCESS, USER_EMAIL_NEW_EXISTS, USER_EMAIL_NEW_FAILURE, USER_EMAIL_VERIFY_STARTED, USER_EMAIL_VERIFY_SUCCESS, USER_EMAIL_VERIFY_FAILURE, USER_EMAIL_VERIFY_RETRY, USER_PHONE_RESET, USER_PHONE_NEW_STARTED, USER_PHONE_NEW_SUCCESS, USER_PHONE_NEW_FAILURE, USER_PHONE_VERIFY_STARTED, USER_PHONE_VERIFY_SUCCESS, USER_PHONE_VERIFY_FAILURE, USER_IDENTITY_VERIFY_STARTED, USER_IDENTITY_VERIFY_SUCCESS, USER_IDENTITY_VERIFY_FAILURE, USER_FETCH_STARTED, USER_FETCH_SUCCESS, USER_FETCH_FAILURE, USER_INVITE_STATUS_FETCH_STARTED, USER_INVITE_STATUS_FETCH_SUCCESS, USER_INVITE_STATUS_FETCH_FAILURE, USER_INVITE_NEW_STARTED, USER_INVITE_NEW_SUCCESS, USER_INVITE_NEW_FAILURE, FETCH_ACCESS_TOKEN_SUCCESS, FETCH_REWARDS_STARTED, FETCH_REWARDS_COMPLETED, CLAIM_REWARD_STARTED, CLAIM_REWARD_SUCCESS, CLAIM_REWARD_FAILURE, CLAIM_REWARD_CLEAR_ERROR, FETCH_REWARD_CONTENT_COMPLETED, DOWNLOAD_LANGUAGE_SUCCESS, CHANNEL_SUBSCRIBE, CHANNEL_UNSUBSCRIBE, HAS_FETCHED_SUBSCRIPTIONS, SET_SUBSCRIPTION_LATEST, UPDATE_SUBSCRIPTION_UNREADS, REMOVE_SUBSCRIPTION_UNREADS, CHECK_SUBSCRIPTION_STARTED, CHECK_SUBSCRIPTION_COMPLETED, CHECK_SUBSCRIPTIONS_SUBSCRIBE, FETCH_SUBSCRIPTIONS_START, FETCH_SUBSCRIPTIONS_FAIL, FETCH_SUBSCRIPTIONS_SUCCESS, SET_VIEW_MODE, GET_SUGGESTED_SUBSCRIPTIONS_START, GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS, GET_SUGGESTED_SUBSCRIPTIONS_FAIL, CLEAR_PUBLISH, UPDATE_PUBLISH_FORM, PUBLISH_START, PUBLISH_SUCCESS, PUBLISH_FAIL, CLEAR_PUBLISH_ERROR, REMOVE_PENDING_PUBLISH, DO_PREPARE_EDIT, MEDIA_PLAY, MEDIA_PAUSE */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WINDOW_FOCUSED\", function() { return WINDOW_FOCUSED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAEMON_READY\", function() { return DAEMON_READY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAEMON_VERSION_MATCH\", function() { return DAEMON_VERSION_MATCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAEMON_VERSION_MISMATCH\", function() { return DAEMON_VERSION_MISMATCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VOLUME_CHANGED\", function() { return VOLUME_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VOLUME_MUTED\", function() { return VOLUME_MUTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ADD_COMMENT\", function() { return ADD_COMMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHOW_MODAL\", function() { return SHOW_MODAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HIDE_MODAL\", function() { return HIDE_MODAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANGE_MODALS_ALLOWED\", function() { return CHANGE_MODALS_ALLOWED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOGGLE_SEARCH_EXPANDED\", function() { return TOGGLE_SEARCH_EXPANDED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PASSWORD_SAVED\", function() { return PASSWORD_SAVED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_WELCOME_VERSION\", function() { return SET_WELCOME_VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_ALLOW_ANALYTICS\", function() { return SET_ALLOW_ANALYTICS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANGE_AFTER_AUTH_PATH\", function() { return CHANGE_AFTER_AUTH_PATH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WINDOW_SCROLLED\", function() { return WINDOW_SCROLLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HISTORY_NAVIGATE\", function() { return HISTORY_NAVIGATE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPGRADE_CANCELLED\", function() { return UPGRADE_CANCELLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOAD_UPGRADE\", function() { return DOWNLOAD_UPGRADE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPGRADE_DOWNLOAD_STARTED\", function() { return UPGRADE_DOWNLOAD_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPGRADE_DOWNLOAD_COMPLETED\", function() { return UPGRADE_DOWNLOAD_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPGRADE_DOWNLOAD_PROGRESSED\", function() { return UPGRADE_DOWNLOAD_PROGRESSED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_UPGRADE_AVAILABLE\", function() { return CHECK_UPGRADE_AVAILABLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_UPGRADE_START\", function() { return CHECK_UPGRADE_START; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_UPGRADE_SUCCESS\", function() { return CHECK_UPGRADE_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_UPGRADE_FAIL\", function() { return CHECK_UPGRADE_FAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_UPGRADE_SUBSCRIBE\", function() { return CHECK_UPGRADE_SUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_VERSION\", function() { return UPDATE_VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_REMOTE_VERSION\", function() { return UPDATE_REMOTE_VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SKIP_UPGRADE\", function() { return SKIP_UPGRADE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"START_UPGRADE\", function() { return START_UPGRADE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_UPDATE_DECLINED\", function() { return AUTO_UPDATE_DECLINED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_UPDATE_DOWNLOADED\", function() { return AUTO_UPDATE_DOWNLOADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLEAR_UPGRADE_TIMER\", function() { return CLEAR_UPGRADE_TIMER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GET_NEW_ADDRESS_STARTED\", function() { return GET_NEW_ADDRESS_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GET_NEW_ADDRESS_COMPLETED\", function() { return GET_NEW_ADDRESS_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_TRANSACTIONS_STARTED\", function() { return FETCH_TRANSACTIONS_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_TRANSACTIONS_COMPLETED\", function() { return FETCH_TRANSACTIONS_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_BALANCE\", function() { return UPDATE_BALANCE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_ADDRESS_IS_MINE_STARTED\", function() { return CHECK_ADDRESS_IS_MINE_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_ADDRESS_IS_MINE_COMPLETED\", function() { return CHECK_ADDRESS_IS_MINE_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEND_TRANSACTION_STARTED\", function() { return SEND_TRANSACTION_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEND_TRANSACTION_COMPLETED\", function() { return SEND_TRANSACTION_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEND_TRANSACTION_FAILED\", function() { return SEND_TRANSACTION_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT_TRANSACTION_STARTED\", function() { return SUPPORT_TRANSACTION_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT_TRANSACTION_COMPLETED\", function() { return SUPPORT_TRANSACTION_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT_TRANSACTION_FAILED\", function() { return SUPPORT_TRANSACTION_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_FEATURED_CONTENT_STARTED\", function() { return FETCH_FEATURED_CONTENT_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_FEATURED_CONTENT_COMPLETED\", function() { return FETCH_FEATURED_CONTENT_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RESOLVE_URIS_STARTED\", function() { return RESOLVE_URIS_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RESOLVE_URIS_COMPLETED\", function() { return RESOLVE_URIS_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CHANNEL_CLAIMS_STARTED\", function() { return FETCH_CHANNEL_CLAIMS_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CHANNEL_CLAIMS_COMPLETED\", function() { return FETCH_CHANNEL_CLAIMS_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CHANNEL_CLAIM_COUNT_STARTED\", function() { return FETCH_CHANNEL_CLAIM_COUNT_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CLAIM_LIST_MINE_STARTED\", function() { return FETCH_CLAIM_LIST_MINE_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CLAIM_LIST_MINE_COMPLETED\", function() { return FETCH_CLAIM_LIST_MINE_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ABANDON_CLAIM_STARTED\", function() { return ABANDON_CLAIM_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ABANDON_CLAIM_SUCCEEDED\", function() { return ABANDON_CLAIM_SUCCEEDED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CHANNEL_LIST_STARTED\", function() { return FETCH_CHANNEL_LIST_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_CHANNEL_LIST_COMPLETED\", function() { return FETCH_CHANNEL_LIST_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CREATE_CHANNEL_STARTED\", function() { return CREATE_CHANNEL_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CREATE_CHANNEL_COMPLETED\", function() { return CREATE_CHANNEL_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_STARTED\", function() { return PUBLISH_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_COMPLETED\", function() { return PUBLISH_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_FAILED\", function() { return PUBLISH_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_PLAYING_URI\", function() { return SET_PLAYING_URI; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_CONTENT_POSITION\", function() { return SET_CONTENT_POSITION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_CONTENT_LAST_VIEWED\", function() { return SET_CONTENT_LAST_VIEWED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLEAR_CONTENT_HISTORY_URI\", function() { return CLEAR_CONTENT_HISTORY_URI; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLEAR_CONTENT_HISTORY_ALL\", function() { return CLEAR_CONTENT_HISTORY_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_LIST_STARTED\", function() { return FILE_LIST_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_LIST_SUCCEEDED\", function() { return FILE_LIST_SUCCEEDED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_FILE_INFO_STARTED\", function() { return FETCH_FILE_INFO_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_FILE_INFO_COMPLETED\", function() { return FETCH_FILE_INFO_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_COST_INFO_STARTED\", function() { return FETCH_COST_INFO_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_COST_INFO_COMPLETED\", function() { return FETCH_COST_INFO_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOADING_VIDEO_STARTED\", function() { return LOADING_VIDEO_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOADING_VIDEO_COMPLETED\", function() { return LOADING_VIDEO_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOADING_VIDEO_FAILED\", function() { return LOADING_VIDEO_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADING_STARTED\", function() { return DOWNLOADING_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADING_PROGRESSED\", function() { return DOWNLOADING_PROGRESSED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADING_COMPLETED\", function() { return DOWNLOADING_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PLAY_VIDEO_STARTED\", function() { return PLAY_VIDEO_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_AVAILABILITY_STARTED\", function() { return FETCH_AVAILABILITY_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_AVAILABILITY_COMPLETED\", function() { return FETCH_AVAILABILITY_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_DELETE\", function() { return FILE_DELETE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH_START\", function() { return SEARCH_START; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH_SUCCESS\", function() { return SEARCH_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH_FAIL\", function() { return SEARCH_FAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_SEARCH_QUERY\", function() { return UPDATE_SEARCH_QUERY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_SEARCH_SUGGESTIONS\", function() { return UPDATE_SEARCH_SUGGESTIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAEMON_SETTINGS_RECEIVED\", function() { return DAEMON_SETTINGS_RECEIVED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLIENT_SETTING_CHANGED\", function() { return CLIENT_SETTING_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_IS_NIGHT\", function() { return UPDATE_IS_NIGHT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FINDING_FFMPEG_STARTED\", function() { return FINDING_FFMPEG_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FINDING_FFMPEG_COMPLETED\", function() { return FINDING_FFMPEG_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTHENTICATION_STARTED\", function() { return AUTHENTICATION_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTHENTICATION_SUCCESS\", function() { return AUTHENTICATION_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTHENTICATION_FAILURE\", function() { return AUTHENTICATION_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_DECLINE\", function() { return USER_EMAIL_DECLINE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_NEW_STARTED\", function() { return USER_EMAIL_NEW_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_NEW_SUCCESS\", function() { return USER_EMAIL_NEW_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_NEW_EXISTS\", function() { return USER_EMAIL_NEW_EXISTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_NEW_FAILURE\", function() { return USER_EMAIL_NEW_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_VERIFY_STARTED\", function() { return USER_EMAIL_VERIFY_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_VERIFY_SUCCESS\", function() { return USER_EMAIL_VERIFY_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_VERIFY_FAILURE\", function() { return USER_EMAIL_VERIFY_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_EMAIL_VERIFY_RETRY\", function() { return USER_EMAIL_VERIFY_RETRY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_RESET\", function() { return USER_PHONE_RESET; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_NEW_STARTED\", function() { return USER_PHONE_NEW_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_NEW_SUCCESS\", function() { return USER_PHONE_NEW_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_NEW_FAILURE\", function() { return USER_PHONE_NEW_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_VERIFY_STARTED\", function() { return USER_PHONE_VERIFY_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_VERIFY_SUCCESS\", function() { return USER_PHONE_VERIFY_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_PHONE_VERIFY_FAILURE\", function() { return USER_PHONE_VERIFY_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_IDENTITY_VERIFY_STARTED\", function() { return USER_IDENTITY_VERIFY_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_IDENTITY_VERIFY_SUCCESS\", function() { return USER_IDENTITY_VERIFY_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_IDENTITY_VERIFY_FAILURE\", function() { return USER_IDENTITY_VERIFY_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_FETCH_STARTED\", function() { return USER_FETCH_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_FETCH_SUCCESS\", function() { return USER_FETCH_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_FETCH_FAILURE\", function() { return USER_FETCH_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_STATUS_FETCH_STARTED\", function() { return USER_INVITE_STATUS_FETCH_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_STATUS_FETCH_SUCCESS\", function() { return USER_INVITE_STATUS_FETCH_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_STATUS_FETCH_FAILURE\", function() { return USER_INVITE_STATUS_FETCH_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_NEW_STARTED\", function() { return USER_INVITE_NEW_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_NEW_SUCCESS\", function() { return USER_INVITE_NEW_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"USER_INVITE_NEW_FAILURE\", function() { return USER_INVITE_NEW_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_ACCESS_TOKEN_SUCCESS\", function() { return FETCH_ACCESS_TOKEN_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_REWARDS_STARTED\", function() { return FETCH_REWARDS_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_REWARDS_COMPLETED\", function() { return FETCH_REWARDS_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_REWARD_STARTED\", function() { return CLAIM_REWARD_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_REWARD_SUCCESS\", function() { return CLAIM_REWARD_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_REWARD_FAILURE\", function() { return CLAIM_REWARD_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_REWARD_CLEAR_ERROR\", function() { return CLAIM_REWARD_CLEAR_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_REWARD_CONTENT_COMPLETED\", function() { return FETCH_REWARD_CONTENT_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOAD_LANGUAGE_SUCCESS\", function() { return DOWNLOAD_LANGUAGE_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL_SUBSCRIBE\", function() { return CHANNEL_SUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL_UNSUBSCRIBE\", function() { return CHANNEL_UNSUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HAS_FETCHED_SUBSCRIPTIONS\", function() { return HAS_FETCHED_SUBSCRIPTIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_SUBSCRIPTION_LATEST\", function() { return SET_SUBSCRIPTION_LATEST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_SUBSCRIPTION_UNREADS\", function() { return UPDATE_SUBSCRIPTION_UNREADS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REMOVE_SUBSCRIPTION_UNREADS\", function() { return REMOVE_SUBSCRIPTION_UNREADS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_SUBSCRIPTION_STARTED\", function() { return CHECK_SUBSCRIPTION_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_SUBSCRIPTION_COMPLETED\", function() { return CHECK_SUBSCRIPTION_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHECK_SUBSCRIPTIONS_SUBSCRIBE\", function() { return CHECK_SUBSCRIPTIONS_SUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_SUBSCRIPTIONS_START\", function() { return FETCH_SUBSCRIPTIONS_START; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_SUBSCRIPTIONS_FAIL\", function() { return FETCH_SUBSCRIPTIONS_FAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FETCH_SUBSCRIPTIONS_SUCCESS\", function() { return FETCH_SUBSCRIPTIONS_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_VIEW_MODE\", function() { return SET_VIEW_MODE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GET_SUGGESTED_SUBSCRIPTIONS_START\", function() { return GET_SUGGESTED_SUBSCRIPTIONS_START; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS\", function() { return GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"GET_SUGGESTED_SUBSCRIPTIONS_FAIL\", function() { return GET_SUGGESTED_SUBSCRIPTIONS_FAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLEAR_PUBLISH\", function() { return CLEAR_PUBLISH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_PUBLISH_FORM\", function() { return UPDATE_PUBLISH_FORM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_START\", function() { return PUBLISH_START; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_SUCCESS\", function() { return PUBLISH_SUCCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH_FAIL\", function() { return PUBLISH_FAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLEAR_PUBLISH_ERROR\", function() { return CLEAR_PUBLISH_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REMOVE_PENDING_PUBLISH\", function() { return REMOVE_PENDING_PUBLISH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DO_PREPARE_EDIT\", function() { return DO_PREPARE_EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MEDIA_PLAY\", function() { return MEDIA_PLAY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MEDIA_PAUSE\", function() { return MEDIA_PAUSE; });\n/*\n Constants for redux actions\n All names should be in present tense\n ex:\n XXX_START\n XXX_SUCCESS\n XXX_FAIL\n XXX_COMPLETE // if there is no fail case\n*/\nvar WINDOW_FOCUSED = 'WINDOW_FOCUSED';\nvar DAEMON_READY = 'DAEMON_READY';\nvar DAEMON_VERSION_MATCH = 'DAEMON_VERSION_MATCH';\nvar DAEMON_VERSION_MISMATCH = 'DAEMON_VERSION_MISMATCH';\nvar VOLUME_CHANGED = 'VOLUME_CHANGED';\nvar VOLUME_MUTED = 'VOLUME_MUTED';\nvar ADD_COMMENT = 'ADD_COMMENT';\nvar SHOW_MODAL = 'SHOW_MODAL';\nvar HIDE_MODAL = 'HIDE_MODAL';\nvar CHANGE_MODALS_ALLOWED = 'CHANGE_MODALS_ALLOWED';\nvar TOGGLE_SEARCH_EXPANDED = 'TOGGLE_SEARCH_EXPANDED';\nvar PASSWORD_SAVED = 'PASSWORD_SAVED';\nvar SET_WELCOME_VERSION = 'SET_WELCOME_VERSION';\nvar SET_ALLOW_ANALYTICS = 'SET_ALLOW_ANALYTICS'; // Navigation\n\nvar CHANGE_AFTER_AUTH_PATH = 'CHANGE_AFTER_AUTH_PATH';\nvar WINDOW_SCROLLED = 'WINDOW_SCROLLED';\nvar HISTORY_NAVIGATE = 'HISTORY_NAVIGATE'; // Upgrades\n\nvar UPGRADE_CANCELLED = 'UPGRADE_CANCELLED';\nvar DOWNLOAD_UPGRADE = 'DOWNLOAD_UPGRADE';\nvar UPGRADE_DOWNLOAD_STARTED = 'UPGRADE_DOWNLOAD_STARTED';\nvar UPGRADE_DOWNLOAD_COMPLETED = 'UPGRADE_DOWNLOAD_COMPLETED';\nvar UPGRADE_DOWNLOAD_PROGRESSED = 'UPGRADE_DOWNLOAD_PROGRESSED';\nvar CHECK_UPGRADE_AVAILABLE = 'CHECK_UPGRADE_AVAILABLE';\nvar CHECK_UPGRADE_START = 'CHECK_UPGRADE_START';\nvar CHECK_UPGRADE_SUCCESS = 'CHECK_UPGRADE_SUCCESS';\nvar CHECK_UPGRADE_FAIL = 'CHECK_UPGRADE_FAIL';\nvar CHECK_UPGRADE_SUBSCRIBE = 'CHECK_UPGRADE_SUBSCRIBE';\nvar UPDATE_VERSION = 'UPDATE_VERSION';\nvar UPDATE_REMOTE_VERSION = 'UPDATE_REMOTE_VERSION';\nvar SKIP_UPGRADE = 'SKIP_UPGRADE';\nvar START_UPGRADE = 'START_UPGRADE';\nvar AUTO_UPDATE_DECLINED = 'AUTO_UPDATE_DECLINED';\nvar AUTO_UPDATE_DOWNLOADED = 'AUTO_UPDATE_DOWNLOADED';\nvar CLEAR_UPGRADE_TIMER = 'CLEAR_UPGRADE_TIMER'; // Wallet\n\nvar GET_NEW_ADDRESS_STARTED = 'GET_NEW_ADDRESS_STARTED';\nvar GET_NEW_ADDRESS_COMPLETED = 'GET_NEW_ADDRESS_COMPLETED';\nvar FETCH_TRANSACTIONS_STARTED = 'FETCH_TRANSACTIONS_STARTED';\nvar FETCH_TRANSACTIONS_COMPLETED = 'FETCH_TRANSACTIONS_COMPLETED';\nvar UPDATE_BALANCE = 'UPDATE_BALANCE';\nvar CHECK_ADDRESS_IS_MINE_STARTED = 'CHECK_ADDRESS_IS_MINE_STARTED';\nvar CHECK_ADDRESS_IS_MINE_COMPLETED = 'CHECK_ADDRESS_IS_MINE_COMPLETED';\nvar SEND_TRANSACTION_STARTED = 'SEND_TRANSACTION_STARTED';\nvar SEND_TRANSACTION_COMPLETED = 'SEND_TRANSACTION_COMPLETED';\nvar SEND_TRANSACTION_FAILED = 'SEND_TRANSACTION_FAILED';\nvar SUPPORT_TRANSACTION_STARTED = 'SUPPORT_TRANSACTION_STARTED';\nvar SUPPORT_TRANSACTION_COMPLETED = 'SUPPORT_TRANSACTION_COMPLETED';\nvar SUPPORT_TRANSACTION_FAILED = 'SUPPORT_TRANSACTION_FAILED'; // Claims\n\nvar FETCH_FEATURED_CONTENT_STARTED = 'FETCH_FEATURED_CONTENT_STARTED';\nvar FETCH_FEATURED_CONTENT_COMPLETED = 'FETCH_FEATURED_CONTENT_COMPLETED';\nvar RESOLVE_URIS_STARTED = 'RESOLVE_URIS_STARTED';\nvar RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED';\nvar FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED';\nvar FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED';\nvar FETCH_CHANNEL_CLAIM_COUNT_STARTED = 'FETCH_CHANNEL_CLAIM_COUNT_STARTED';\nvar FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED';\nvar FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED';\nvar ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED';\nvar ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED';\nvar FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED';\nvar FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED';\nvar CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED';\nvar CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED';\nvar PUBLISH_STARTED = 'PUBLISH_STARTED';\nvar PUBLISH_COMPLETED = 'PUBLISH_COMPLETED';\nvar PUBLISH_FAILED = 'PUBLISH_FAILED';\nvar SET_PLAYING_URI = 'SET_PLAYING_URI';\nvar SET_CONTENT_POSITION = 'SET_CONTENT_POSITION';\nvar SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED';\nvar CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI';\nvar CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL'; // Files\n\nvar FILE_LIST_STARTED = 'FILE_LIST_STARTED';\nvar FILE_LIST_SUCCEEDED = 'FILE_LIST_SUCCEEDED';\nvar FETCH_FILE_INFO_STARTED = 'FETCH_FILE_INFO_STARTED';\nvar FETCH_FILE_INFO_COMPLETED = 'FETCH_FILE_INFO_COMPLETED';\nvar FETCH_COST_INFO_STARTED = 'FETCH_COST_INFO_STARTED';\nvar FETCH_COST_INFO_COMPLETED = 'FETCH_COST_INFO_COMPLETED';\nvar LOADING_VIDEO_STARTED = 'LOADING_VIDEO_STARTED';\nvar LOADING_VIDEO_COMPLETED = 'LOADING_VIDEO_COMPLETED';\nvar LOADING_VIDEO_FAILED = 'LOADING_VIDEO_FAILED';\nvar DOWNLOADING_STARTED = 'DOWNLOADING_STARTED';\nvar DOWNLOADING_PROGRESSED = 'DOWNLOADING_PROGRESSED';\nvar DOWNLOADING_COMPLETED = 'DOWNLOADING_COMPLETED';\nvar PLAY_VIDEO_STARTED = 'PLAY_VIDEO_STARTED';\nvar FETCH_AVAILABILITY_STARTED = 'FETCH_AVAILABILITY_STARTED';\nvar FETCH_AVAILABILITY_COMPLETED = 'FETCH_AVAILABILITY_COMPLETED';\nvar FILE_DELETE = 'FILE_DELETE'; // Search\n\nvar SEARCH_START = 'SEARCH_START';\nvar SEARCH_SUCCESS = 'SEARCH_SUCCESS';\nvar SEARCH_FAIL = 'SEARCH_FAIL';\nvar UPDATE_SEARCH_QUERY = 'UPDATE_SEARCH_QUERY';\nvar UPDATE_SEARCH_SUGGESTIONS = 'UPDATE_SEARCH_SUGGESTIONS'; // Settings\n\nvar DAEMON_SETTINGS_RECEIVED = 'DAEMON_SETTINGS_RECEIVED';\nvar CLIENT_SETTING_CHANGED = 'CLIENT_SETTING_CHANGED';\nvar UPDATE_IS_NIGHT = 'UPDATE_IS_NIGHT';\nvar FINDING_FFMPEG_STARTED = 'FINDING_FFMPEG_STARTED';\nvar FINDING_FFMPEG_COMPLETED = 'FINDING_FFMPEG_COMPLETED'; // User\n\nvar AUTHENTICATION_STARTED = 'AUTHENTICATION_STARTED';\nvar AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS';\nvar AUTHENTICATION_FAILURE = 'AUTHENTICATION_FAILURE';\nvar USER_EMAIL_DECLINE = 'USER_EMAIL_DECLINE';\nvar USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_STARTED';\nvar USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS';\nvar USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS';\nvar USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE';\nvar USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED';\nvar USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS';\nvar USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY';\nvar USER_PHONE_RESET = 'USER_PHONE_RESET';\nvar USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED';\nvar USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS';\nvar USER_PHONE_NEW_FAILURE = 'USER_PHONE_NEW_FAILURE';\nvar USER_PHONE_VERIFY_STARTED = 'USER_PHONE_VERIFY_STARTED';\nvar USER_PHONE_VERIFY_SUCCESS = 'USER_PHONE_VERIFY_SUCCESS';\nvar USER_PHONE_VERIFY_FAILURE = 'USER_PHONE_VERIFY_FAILURE';\nvar USER_IDENTITY_VERIFY_STARTED = 'USER_IDENTITY_VERIFY_STARTED';\nvar USER_IDENTITY_VERIFY_SUCCESS = 'USER_IDENTITY_VERIFY_SUCCESS';\nvar USER_IDENTITY_VERIFY_FAILURE = 'USER_IDENTITY_VERIFY_FAILURE';\nvar USER_FETCH_STARTED = 'USER_FETCH_STARTED';\nvar USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS';\nvar USER_FETCH_FAILURE = 'USER_FETCH_FAILURE';\nvar USER_INVITE_STATUS_FETCH_STARTED = 'USER_INVITE_STATUS_FETCH_STARTED';\nvar USER_INVITE_STATUS_FETCH_SUCCESS = 'USER_INVITE_STATUS_FETCH_SUCCESS';\nvar USER_INVITE_STATUS_FETCH_FAILURE = 'USER_INVITE_STATUS_FETCH_FAILURE';\nvar USER_INVITE_NEW_STARTED = 'USER_INVITE_NEW_STARTED';\nvar USER_INVITE_NEW_SUCCESS = 'USER_INVITE_NEW_SUCCESS';\nvar USER_INVITE_NEW_FAILURE = 'USER_INVITE_NEW_FAILURE';\nvar FETCH_ACCESS_TOKEN_SUCCESS = 'FETCH_ACCESS_TOKEN_SUCCESS'; // Rewards\n\nvar FETCH_REWARDS_STARTED = 'FETCH_REWARDS_STARTED';\nvar FETCH_REWARDS_COMPLETED = 'FETCH_REWARDS_COMPLETED';\nvar CLAIM_REWARD_STARTED = 'CLAIM_REWARD_STARTED';\nvar CLAIM_REWARD_SUCCESS = 'CLAIM_REWARD_SUCCESS';\nvar CLAIM_REWARD_FAILURE = 'CLAIM_REWARD_FAILURE';\nvar CLAIM_REWARD_CLEAR_ERROR = 'CLAIM_REWARD_CLEAR_ERROR';\nvar FETCH_REWARD_CONTENT_COMPLETED = 'FETCH_REWARD_CONTENT_COMPLETED'; // Language\n\nvar DOWNLOAD_LANGUAGE_SUCCESS = 'DOWNLOAD_LANGUAGE_SUCCESS'; // Subscriptions\n\nvar CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE';\nvar CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE';\nvar HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS';\nvar SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST';\nvar UPDATE_SUBSCRIPTION_UNREADS = 'UPDATE_SUBSCRIPTION_UNREADS';\nvar REMOVE_SUBSCRIPTION_UNREADS = 'REMOVE_SUBSCRIPTION_UNREADS';\nvar CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED';\nvar CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED';\nvar CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE';\nvar FETCH_SUBSCRIPTIONS_START = 'FETCH_SUBSCRIPTIONS_START';\nvar FETCH_SUBSCRIPTIONS_FAIL = 'FETCH_SUBSCRIPTIONS_FAIL';\nvar FETCH_SUBSCRIPTIONS_SUCCESS = 'FETCH_SUBSCRIPTIONS_SUCCESS';\nvar SET_VIEW_MODE = 'SET_VIEW_MODE';\nvar GET_SUGGESTED_SUBSCRIPTIONS_START = 'GET_SUGGESTED_SUBSCRIPTIONS_START';\nvar GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS = 'GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS';\nvar GET_SUGGESTED_SUBSCRIPTIONS_FAIL = 'GET_SUGGESTED_SUBSCRIPTIONS_FAIL'; // Publishing\n\nvar CLEAR_PUBLISH = 'CLEAR_PUBLISH';\nvar UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM';\nvar PUBLISH_START = 'PUBLISH_START';\nvar PUBLISH_SUCCESS = 'PUBLISH_SUCCESS';\nvar PUBLISH_FAIL = 'PUBLISH_FAIL';\nvar CLEAR_PUBLISH_ERROR = 'CLEAR_PUBLISH_ERROR';\nvar REMOVE_PENDING_PUBLISH = 'REMOVE_PENDING_PUBLISH';\nvar DO_PREPARE_EDIT = 'DO_PREPARE_EDIT'; // media\n\nvar MEDIA_PLAY = 'MEDIA_PLAY';\nvar MEDIA_PAUSE = 'MEDIA_PAUSE';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2FjdGlvbl90eXBlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb25zdGFudHMvYWN0aW9uX3R5cGVzLmpzPzQ5OWIiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29uc3RhbnRzIGZvciByZWR1eCBhY3Rpb25zXG4gIEFsbCBuYW1lcyBzaG91bGQgYmUgaW4gcHJlc2VudCB0ZW5zZVxuICBleDpcbiAgWFhYX1NUQVJUXG4gIFhYWF9TVUNDRVNTXG4gIFhYWF9GQUlMXG4gIFhYWF9DT01QTEVURSAvLyBpZiB0aGVyZSBpcyBubyBmYWlsIGNhc2VcbiovXG5cbmV4cG9ydCBjb25zdCBXSU5ET1dfRk9DVVNFRCA9ICdXSU5ET1dfRk9DVVNFRCc7XG5leHBvcnQgY29uc3QgREFFTU9OX1JFQURZID0gJ0RBRU1PTl9SRUFEWSc7XG5leHBvcnQgY29uc3QgREFFTU9OX1ZFUlNJT05fTUFUQ0ggPSAnREFFTU9OX1ZFUlNJT05fTUFUQ0gnO1xuZXhwb3J0IGNvbnN0IERBRU1PTl9WRVJTSU9OX01JU01BVENIID0gJ0RBRU1PTl9WRVJTSU9OX01JU01BVENIJztcbmV4cG9ydCBjb25zdCBWT0xVTUVfQ0hBTkdFRCA9ICdWT0xVTUVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgVk9MVU1FX01VVEVEID0gJ1ZPTFVNRV9NVVRFRCc7XG5leHBvcnQgY29uc3QgQUREX0NPTU1FTlQgPSAnQUREX0NPTU1FTlQnO1xuZXhwb3J0IGNvbnN0IFNIT1dfTU9EQUwgPSAnU0hPV19NT0RBTCc7XG5leHBvcnQgY29uc3QgSElERV9NT0RBTCA9ICdISURFX01PREFMJztcbmV4cG9ydCBjb25zdCBDSEFOR0VfTU9EQUxTX0FMTE9XRUQgPSAnQ0hBTkdFX01PREFMU19BTExPV0VEJztcbmV4cG9ydCBjb25zdCBUT0dHTEVfU0VBUkNIX0VYUEFOREVEID0gJ1RPR0dMRV9TRUFSQ0hfRVhQQU5ERUQnO1xuZXhwb3J0IGNvbnN0IFBBU1NXT1JEX1NBVkVEID0gJ1BBU1NXT1JEX1NBVkVEJztcbmV4cG9ydCBjb25zdCBTRVRfV0VMQ09NRV9WRVJTSU9OID0gJ1NFVF9XRUxDT01FX1ZFUlNJT04nO1xuZXhwb3J0IGNvbnN0IFNFVF9BTExPV19BTkFMWVRJQ1MgPSAnU0VUX0FMTE9XX0FOQUxZVElDUyc7XG5cbi8vIE5hdmlnYXRpb25cbmV4cG9ydCBjb25zdCBDSEFOR0VfQUZURVJfQVVUSF9QQVRIID0gJ0NIQU5HRV9BRlRFUl9BVVRIX1BBVEgnO1xuZXhwb3J0IGNvbnN0IFdJTkRPV19TQ1JPTExFRCA9ICdXSU5ET1dfU0NST0xMRUQnO1xuZXhwb3J0IGNvbnN0IEhJU1RPUllfTkFWSUdBVEUgPSAnSElTVE9SWV9OQVZJR0FURSc7XG5cbi8vIFVwZ3JhZGVzXG5leHBvcnQgY29uc3QgVVBHUkFERV9DQU5DRUxMRUQgPSAnVVBHUkFERV9DQU5DRUxMRUQnO1xuZXhwb3J0IGNvbnN0IERPV05MT0FEX1VQR1JBREUgPSAnRE9XTkxPQURfVVBHUkFERSc7XG5leHBvcnQgY29uc3QgVVBHUkFERV9ET1dOTE9BRF9TVEFSVEVEID0gJ1VQR1JBREVfRE9XTkxPQURfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgVVBHUkFERV9ET1dOTE9BRF9DT01QTEVURUQgPSAnVVBHUkFERV9ET1dOTE9BRF9DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IFVQR1JBREVfRE9XTkxPQURfUFJPR1JFU1NFRCA9ICdVUEdSQURFX0RPV05MT0FEX1BST0dSRVNTRUQnO1xuZXhwb3J0IGNvbnN0IENIRUNLX1VQR1JBREVfQVZBSUxBQkxFID0gJ0NIRUNLX1VQR1JBREVfQVZBSUxBQkxFJztcbmV4cG9ydCBjb25zdCBDSEVDS19VUEdSQURFX1NUQVJUID0gJ0NIRUNLX1VQR1JBREVfU1RBUlQnO1xuZXhwb3J0IGNvbnN0IENIRUNLX1VQR1JBREVfU1VDQ0VTUyA9ICdDSEVDS19VUEdSQURFX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IENIRUNLX1VQR1JBREVfRkFJTCA9ICdDSEVDS19VUEdSQURFX0ZBSUwnO1xuZXhwb3J0IGNvbnN0IENIRUNLX1VQR1JBREVfU1VCU0NSSUJFID0gJ0NIRUNLX1VQR1JBREVfU1VCU0NSSUJFJztcbmV4cG9ydCBjb25zdCBVUERBVEVfVkVSU0lPTiA9ICdVUERBVEVfVkVSU0lPTic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1JFTU9URV9WRVJTSU9OID0gJ1VQREFURV9SRU1PVEVfVkVSU0lPTic7XG5leHBvcnQgY29uc3QgU0tJUF9VUEdSQURFID0gJ1NLSVBfVVBHUkFERSc7XG5leHBvcnQgY29uc3QgU1RBUlRfVVBHUkFERSA9ICdTVEFSVF9VUEdSQURFJztcbmV4cG9ydCBjb25zdCBBVVRPX1VQREFURV9ERUNMSU5FRCA9ICdBVVRPX1VQREFURV9ERUNMSU5FRCc7XG5leHBvcnQgY29uc3QgQVVUT19VUERBVEVfRE9XTkxPQURFRCA9ICdBVVRPX1VQREFURV9ET1dOTE9BREVEJztcbmV4cG9ydCBjb25zdCBDTEVBUl9VUEdSQURFX1RJTUVSID0gJ0NMRUFSX1VQR1JBREVfVElNRVInO1xuXG4vLyBXYWxsZXRcbmV4cG9ydCBjb25zdCBHRVRfTkVXX0FERFJFU1NfU1RBUlRFRCA9ICdHRVRfTkVXX0FERFJFU1NfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgR0VUX05FV19BRERSRVNTX0NPTVBMRVRFRCA9ICdHRVRfTkVXX0FERFJFU1NfQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCA9ICdGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRCA9ICdGRVRDSF9UUkFOU0FDVElPTlNfQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBVUERBVEVfQkFMQU5DRSA9ICdVUERBVEVfQkFMQU5DRSc7XG5leHBvcnQgY29uc3QgQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURUQgPSAnQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IENIRUNLX0FERFJFU1NfSVNfTUlORV9DT01QTEVURUQgPSAnQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgU0VORF9UUkFOU0FDVElPTl9TVEFSVEVEID0gJ1NFTkRfVFJBTlNBQ1RJT05fU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgU0VORF9UUkFOU0FDVElPTl9DT01QTEVURUQgPSAnU0VORF9UUkFOU0FDVElPTl9DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IFNFTkRfVFJBTlNBQ1RJT05fRkFJTEVEID0gJ1NFTkRfVFJBTlNBQ1RJT05fRkFJTEVEJztcbmV4cG9ydCBjb25zdCBTVVBQT1JUX1RSQU5TQUNUSU9OX1NUQVJURUQgPSAnU1VQUE9SVF9UUkFOU0FDVElPTl9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRCA9ICdTVVBQT1JUX1RSQU5TQUNUSU9OX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQgPSAnU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQnO1xuXG4vLyBDbGFpbXNcbmV4cG9ydCBjb25zdCBGRVRDSF9GRUFUVVJFRF9DT05URU5UX1NUQVJURUQgPSAnRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9GRUFUVVJFRF9DT05URU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9GRUFUVVJFRF9DT05URU5UX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgUkVTT0xWRV9VUklTX1NUQVJURUQgPSAnUkVTT0xWRV9VUklTX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IFJFU09MVkVfVVJJU19DT01QTEVURUQgPSAnUkVTT0xWRV9VUklTX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQgPSAnRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX1NUQVJURUQgPSAnRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBBQkFORE9OX0NMQUlNX1NUQVJURUQgPSAnQUJBTkRPTl9DTEFJTV9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCA9ICdBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCc7XG5leHBvcnQgY29uc3QgRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQgPSAnRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IEZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQgPSAnRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCA9ICdDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQgPSAnQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBQVUJMSVNIX1NUQVJURUQgPSAnUFVCTElTSF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBQVUJMSVNIX0NPTVBMRVRFRCA9ICdQVUJMSVNIX0NPTVBMRVRFRCc7XG5leHBvcnQgY29uc3QgUFVCTElTSF9GQUlMRUQgPSAnUFVCTElTSF9GQUlMRUQnO1xuZXhwb3J0IGNvbnN0IFNFVF9QTEFZSU5HX1VSSSA9ICdTRVRfUExBWUlOR19VUkknO1xuZXhwb3J0IGNvbnN0IFNFVF9DT05URU5UX1BPU0lUSU9OID0gJ1NFVF9DT05URU5UX1BPU0lUSU9OJztcbmV4cG9ydCBjb25zdCBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCA9ICdTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCc7XG5leHBvcnQgY29uc3QgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSA9ICdDTEVBUl9DT05URU5UX0hJU1RPUllfVVJJJztcbmV4cG9ydCBjb25zdCBDTEVBUl9DT05URU5UX0hJU1RPUllfQUxMID0gJ0NMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwnO1xuXG4vLyBGaWxlc1xuZXhwb3J0IGNvbnN0IEZJTEVfTElTVF9TVEFSVEVEID0gJ0ZJTEVfTElTVF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGSUxFX0xJU1RfU1VDQ0VFREVEID0gJ0ZJTEVfTElTVF9TVUNDRUVERUQnO1xuZXhwb3J0IGNvbnN0IEZFVENIX0ZJTEVfSU5GT19TVEFSVEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9GSUxFX0lORk9fQ09NUExFVEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IEZFVENIX0NPU1RfSU5GT19TVEFSVEVEID0gJ0ZFVENIX0NPU1RfSU5GT19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEID0gJ0ZFVENIX0NPU1RfSU5GT19DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IExPQURJTkdfVklERU9fU1RBUlRFRCA9ICdMT0FESU5HX1ZJREVPX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IExPQURJTkdfVklERU9fQ09NUExFVEVEID0gJ0xPQURJTkdfVklERU9fQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBMT0FESU5HX1ZJREVPX0ZBSUxFRCA9ICdMT0FESU5HX1ZJREVPX0ZBSUxFRCc7XG5leHBvcnQgY29uc3QgRE9XTkxPQURJTkdfU1RBUlRFRCA9ICdET1dOTE9BRElOR19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBET1dOTE9BRElOR19QUk9HUkVTU0VEID0gJ0RPV05MT0FESU5HX1BST0dSRVNTRUQnO1xuZXhwb3J0IGNvbnN0IERPV05MT0FESU5HX0NPTVBMRVRFRCA9ICdET1dOTE9BRElOR19DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IFBMQVlfVklERU9fU1RBUlRFRCA9ICdQTEFZX1ZJREVPX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IEZFVENIX0FWQUlMQUJJTElUWV9TVEFSVEVEID0gJ0ZFVENIX0FWQUlMQUJJTElUWV9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBGRVRDSF9BVkFJTEFCSUxJVFlfQ09NUExFVEVEID0gJ0ZFVENIX0FWQUlMQUJJTElUWV9DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IEZJTEVfREVMRVRFID0gJ0ZJTEVfREVMRVRFJztcblxuLy8gU2VhcmNoXG5leHBvcnQgY29uc3QgU0VBUkNIX1NUQVJUID0gJ1NFQVJDSF9TVEFSVCc7XG5leHBvcnQgY29uc3QgU0VBUkNIX1NVQ0NFU1MgPSAnU0VBUkNIX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFNFQVJDSF9GQUlMID0gJ1NFQVJDSF9GQUlMJztcbmV4cG9ydCBjb25zdCBVUERBVEVfU0VBUkNIX1FVRVJZID0gJ1VQREFURV9TRUFSQ0hfUVVFUlknO1xuZXhwb3J0IGNvbnN0IFVQREFURV9TRUFSQ0hfU1VHR0VTVElPTlMgPSAnVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUyc7XG5cbi8vIFNldHRpbmdzXG5leHBvcnQgY29uc3QgREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVEID0gJ0RBRU1PTl9TRVRUSU5HU19SRUNFSVZFRCc7XG5leHBvcnQgY29uc3QgQ0xJRU5UX1NFVFRJTkdfQ0hBTkdFRCA9ICdDTElFTlRfU0VUVElOR19DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBVUERBVEVfSVNfTklHSFQgPSAnVVBEQVRFX0lTX05JR0hUJztcbmV4cG9ydCBjb25zdCBGSU5ESU5HX0ZGTVBFR19TVEFSVEVEID0gJ0ZJTkRJTkdfRkZNUEVHX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IEZJTkRJTkdfRkZNUEVHX0NPTVBMRVRFRCA9ICdGSU5ESU5HX0ZGTVBFR19DT01QTEVURUQnO1xuXG4vLyBVc2VyXG5leHBvcnQgY29uc3QgQVVUSEVOVElDQVRJT05fU1RBUlRFRCA9ICdBVVRIRU5USUNBVElPTl9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBBVVRIRU5USUNBVElPTl9TVUNDRVNTID0gJ0FVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgPSAnQVVUSEVOVElDQVRJT05fRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9FTUFJTF9ERUNMSU5FID0gJ1VTRVJfRU1BSUxfREVDTElORSc7XG5leHBvcnQgY29uc3QgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX05FV19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBVU0VSX0VNQUlMX05FV19TVUNDRVNTID0gJ1VTRVJfRU1BSUxfTkVXX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFVTRVJfRU1BSUxfTkVXX0VYSVNUUyA9ICdVU0VSX0VNQUlMX05FV19FWElTVFMnO1xuZXhwb3J0IGNvbnN0IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfUkVUUlkgPSAnVVNFUl9FTUFJTF9WRVJJRllfUkVUUlknO1xuZXhwb3J0IGNvbnN0IFVTRVJfUEhPTkVfUkVTRVQgPSAnVVNFUl9QSE9ORV9SRVNFVCc7XG5leHBvcnQgY29uc3QgVVNFUl9QSE9ORV9ORVdfU1RBUlRFRCA9ICdVU0VSX1BIT05FX05FV19TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBVU0VSX1BIT05FX05FV19TVUNDRVNTID0gJ1VTRVJfUEhPTkVfTkVXX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRCA9ICdVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfUEhPTkVfVkVSSUZZX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRCA9ICdVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfSURFTlRJVFlfVkVSSUZZX1NVQ0NFU1MnO1xuZXhwb3J0IGNvbnN0IFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9GRVRDSF9TVEFSVEVEID0gJ1VTRVJfRkVUQ0hfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgVVNFUl9GRVRDSF9TVUNDRVNTID0gJ1VTRVJfRkVUQ0hfU1VDQ0VTUyc7XG5leHBvcnQgY29uc3QgVVNFUl9GRVRDSF9GQUlMVVJFID0gJ1VTRVJfRkVUQ0hfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURUQgPSAnVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTID0gJ1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTJztcbmV4cG9ydCBjb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgVVNFUl9JTlZJVEVfTkVXX1NUQVJURUQgPSAnVVNFUl9JTlZJVEVfTkVXX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IFVTRVJfSU5WSVRFX05FV19TVUNDRVNTID0gJ1VTRVJfSU5WSVRFX05FV19TVUNDRVNTJztcbmV4cG9ydCBjb25zdCBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9ORVdfRkFJTFVSRSc7XG5leHBvcnQgY29uc3QgRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1MgPSAnRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1MnO1xuXG4vLyBSZXdhcmRzXG5leHBvcnQgY29uc3QgRkVUQ0hfUkVXQVJEU19TVEFSVEVEID0gJ0ZFVENIX1JFV0FSRFNfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgRkVUQ0hfUkVXQVJEU19DT01QTEVURUQgPSAnRkVUQ0hfUkVXQVJEU19DT01QTEVURUQnO1xuZXhwb3J0IGNvbnN0IENMQUlNX1JFV0FSRF9TVEFSVEVEID0gJ0NMQUlNX1JFV0FSRF9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBDTEFJTV9SRVdBUkRfU1VDQ0VTUyA9ICdDTEFJTV9SRVdBUkRfU1VDQ0VTUyc7XG5leHBvcnQgY29uc3QgQ0xBSU1fUkVXQVJEX0ZBSUxVUkUgPSAnQ0xBSU1fUkVXQVJEX0ZBSUxVUkUnO1xuZXhwb3J0IGNvbnN0IENMQUlNX1JFV0FSRF9DTEVBUl9FUlJPUiA9ICdDTEFJTV9SRVdBUkRfQ0xFQVJfRVJST1InO1xuZXhwb3J0IGNvbnN0IEZFVENIX1JFV0FSRF9DT05URU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQnO1xuXG4vLyBMYW5ndWFnZVxuZXhwb3J0IGNvbnN0IERPV05MT0FEX0xBTkdVQUdFX1NVQ0NFU1MgPSAnRE9XTkxPQURfTEFOR1VBR0VfU1VDQ0VTUyc7XG5cbi8vIFN1YnNjcmlwdGlvbnNcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NVQlNDUklCRSA9ICdDSEFOTkVMX1NVQlNDUklCRSc7XG5leHBvcnQgY29uc3QgQ0hBTk5FTF9VTlNVQlNDUklCRSA9ICdDSEFOTkVMX1VOU1VCU0NSSUJFJztcbmV4cG9ydCBjb25zdCBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TID0gJ0hBU19GRVRDSEVEX1NVQlNDUklQVElPTlMnO1xuZXhwb3J0IGNvbnN0IFNFVF9TVUJTQ1JJUFRJT05fTEFURVNUID0gJ1NFVF9TVUJTQ1JJUFRJT05fTEFURVNUJztcbmV4cG9ydCBjb25zdCBVUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFMgPSAnVVBEQVRFX1NVQlNDUklQVElPTl9VTlJFQURTJztcbmV4cG9ydCBjb25zdCBSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMgPSAnUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTJztcbmV4cG9ydCBjb25zdCBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCA9ICdDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRCA9ICdDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVEJztcbmV4cG9ydCBjb25zdCBDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRSA9ICdDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRSc7XG5leHBvcnQgY29uc3QgRkVUQ0hfU1VCU0NSSVBUSU9OU19TVEFSVCA9ICdGRVRDSF9TVUJTQ1JJUFRJT05TX1NUQVJUJztcbmV4cG9ydCBjb25zdCBGRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUwgPSAnRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMJztcbmV4cG9ydCBjb25zdCBGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MgPSAnRkVUQ0hfU1VCU0NSSVBUSU9OU19TVUNDRVNTJztcbmV4cG9ydCBjb25zdCBTRVRfVklFV19NT0RFID0gJ1NFVF9WSUVXX01PREUnO1xuZXhwb3J0IGNvbnN0IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVCA9ICdHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1RBUlQnO1xuZXhwb3J0IGNvbnN0IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTID0gJ0dFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTJztcbmV4cG9ydCBjb25zdCBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfRkFJTCA9ICdHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfRkFJTCc7XG5cbi8vIFB1Ymxpc2hpbmdcbmV4cG9ydCBjb25zdCBDTEVBUl9QVUJMSVNIID0gJ0NMRUFSX1BVQkxJU0gnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9QVUJMSVNIX0ZPUk0gPSAnVVBEQVRFX1BVQkxJU0hfRk9STSc7XG5leHBvcnQgY29uc3QgUFVCTElTSF9TVEFSVCA9ICdQVUJMSVNIX1NUQVJUJztcbmV4cG9ydCBjb25zdCBQVUJMSVNIX1NVQ0NFU1MgPSAnUFVCTElTSF9TVUNDRVNTJztcbmV4cG9ydCBjb25zdCBQVUJMSVNIX0ZBSUwgPSAnUFVCTElTSF9GQUlMJztcbmV4cG9ydCBjb25zdCBDTEVBUl9QVUJMSVNIX0VSUk9SID0gJ0NMRUFSX1BVQkxJU0hfRVJST1InO1xuZXhwb3J0IGNvbnN0IFJFTU9WRV9QRU5ESU5HX1BVQkxJU0ggPSAnUkVNT1ZFX1BFTkRJTkdfUFVCTElTSCc7XG5leHBvcnQgY29uc3QgRE9fUFJFUEFSRV9FRElUID0gJ0RPX1BSRVBBUkVfRURJVCc7XG5cbi8vIG1lZGlhXG5leHBvcnQgY29uc3QgTUVESUFfUExBWSA9ICdNRURJQV9QTEFZJztcbmV4cG9ydCBjb25zdCBNRURJQV9QQVVTRSA9ICdNRURJQV9QQVVTRSc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/action_types.js\n"); - -/***/ }), - -/***/ "../ui/constants/claim.js": -/*!********************************!*\ - !*** ../ui/constants/claim.js ***! - \********************************/ -/*! exports provided: MINIMUM_PUBLISH_BID, CHANNEL_ANONYMOUS, CHANNEL_NEW, PAGE_SIZE, INVALID_NAME_ERROR, FORCE_CONTENT_TYPE_PLAYER */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MINIMUM_PUBLISH_BID\", function() { return MINIMUM_PUBLISH_BID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL_ANONYMOUS\", function() { return CHANNEL_ANONYMOUS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL_NEW\", function() { return CHANNEL_NEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PAGE_SIZE\", function() { return PAGE_SIZE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INVALID_NAME_ERROR\", function() { return INVALID_NAME_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FORCE_CONTENT_TYPE_PLAYER\", function() { return FORCE_CONTENT_TYPE_PLAYER; });\nvar MINIMUM_PUBLISH_BID = 0.00001;\nvar CHANNEL_ANONYMOUS = 'anonymous';\nvar CHANNEL_NEW = 'new';\nvar PAGE_SIZE = 20;\nvar INVALID_NAME_ERROR = __('LBRY names cannot contain spaces or reserved symbols') + ' ' + '($#@;/\"<>%{}|^~[]`)';\nvar FORCE_CONTENT_TYPE_PLAYER = ['video/quicktime', 'application/x-ext-mkv', 'video/x-matroska', 'application/octet-stream', 'video/x-ms-wmv', 'video/x-msvideo', 'video/mpeg', 'video/m4v', 'audio/ogg', 'application/x-ext-ogg', 'application/x-ext-m4a'];\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2NsYWltLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9jbGFpbS5qcz83MjY4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNSU5JTVVNX1BVQkxJU0hfQklEID0gMC4wMDAwMTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfQU5PTllNT1VTID0gJ2Fub255bW91cyc7XG5leHBvcnQgY29uc3QgQ0hBTk5FTF9ORVcgPSAnbmV3JztcbmV4cG9ydCBjb25zdCBQQUdFX1NJWkUgPSAyMDtcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfTkFNRV9FUlJPUiA9XG4gIF9fKCdMQlJZIG5hbWVzIGNhbm5vdCBjb250YWluIHNwYWNlcyBvciByZXNlcnZlZCBzeW1ib2xzJykgKyAnICcgKyAnKCQjQDsvXCI8PiV7fXxefltdYCknO1xuXG5leHBvcnQgY29uc3QgRk9SQ0VfQ09OVEVOVF9UWVBFX1BMQVlFUiA9IFtcbiAgJ3ZpZGVvL3F1aWNrdGltZScsXG4gICdhcHBsaWNhdGlvbi94LWV4dC1ta3YnLFxuICAndmlkZW8veC1tYXRyb3NrYScsXG4gICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAndmlkZW8veC1tcy13bXYnLFxuICAndmlkZW8veC1tc3ZpZGVvJyxcbiAgJ3ZpZGVvL21wZWcnLFxuICAndmlkZW8vbTR2JyxcbiAgJ2F1ZGlvL29nZycsXG4gICdhcHBsaWNhdGlvbi94LWV4dC1vZ2cnLFxuICAnYXBwbGljYXRpb24veC1leHQtbTRhJyxcbl07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/claim.js\n"); - -/***/ }), - -/***/ "../ui/constants/claim_search.js": -/*!***************************************!*\ - !*** ../ui/constants/claim_search.js ***! - \***************************************/ -/*! exports provided: PAGE_SIZE, FRESH_KEY, ORDER_BY_KEY, DURATION_KEY, TAGS_KEY, CONTENT_KEY, REPOSTED_URI_KEY, TAGS_ALL, TAGS_FOLLOWED, FRESH_DAY, FRESH_WEEK, FRESH_MONTH, FRESH_YEAR, FRESH_ALL, FRESH_DEFAULT, FRESH_TYPES, ORDER_BY_TRENDING, ORDER_BY_TRENDING_VALUE, ORDER_BY_TOP, ORDER_BY_TOP_VALUE, ORDER_BY_NEW, ORDER_BY_NEW_VALUE, ORDER_BY_TYPES, DURATION_SHORT, DURATION_LONG, DURATION_ALL, DURATION_TYPES, FILE_VIDEO, FILE_AUDIO, FILE_DOCUMENT, FILE_BINARY, FILE_IMAGE, FILE_MODEL, FILE_TYPES, CLAIM_CHANNEL, CLAIM_STREAM, CLAIM_REPOST, CLAIM_TYPES, CONTENT_ALL, CONTENT_TYPES, KEYS */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PAGE_SIZE\", function() { return PAGE_SIZE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_KEY\", function() { return FRESH_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_KEY\", function() { return ORDER_BY_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DURATION_KEY\", function() { return DURATION_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TAGS_KEY\", function() { return TAGS_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONTENT_KEY\", function() { return CONTENT_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REPOSTED_URI_KEY\", function() { return REPOSTED_URI_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TAGS_ALL\", function() { return TAGS_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TAGS_FOLLOWED\", function() { return TAGS_FOLLOWED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_DAY\", function() { return FRESH_DAY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_WEEK\", function() { return FRESH_WEEK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_MONTH\", function() { return FRESH_MONTH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_YEAR\", function() { return FRESH_YEAR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_ALL\", function() { return FRESH_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_DEFAULT\", function() { return FRESH_DEFAULT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FRESH_TYPES\", function() { return FRESH_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_TRENDING\", function() { return ORDER_BY_TRENDING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_TRENDING_VALUE\", function() { return ORDER_BY_TRENDING_VALUE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_TOP\", function() { return ORDER_BY_TOP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_TOP_VALUE\", function() { return ORDER_BY_TOP_VALUE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_NEW\", function() { return ORDER_BY_NEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_NEW_VALUE\", function() { return ORDER_BY_NEW_VALUE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ORDER_BY_TYPES\", function() { return ORDER_BY_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DURATION_SHORT\", function() { return DURATION_SHORT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DURATION_LONG\", function() { return DURATION_LONG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DURATION_ALL\", function() { return DURATION_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DURATION_TYPES\", function() { return DURATION_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_VIDEO\", function() { return FILE_VIDEO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_AUDIO\", function() { return FILE_AUDIO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_DOCUMENT\", function() { return FILE_DOCUMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_BINARY\", function() { return FILE_BINARY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_IMAGE\", function() { return FILE_IMAGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_MODEL\", function() { return FILE_MODEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_TYPES\", function() { return FILE_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_CHANNEL\", function() { return CLAIM_CHANNEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_STREAM\", function() { return CLAIM_STREAM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_REPOST\", function() { return CLAIM_REPOST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLAIM_TYPES\", function() { return CLAIM_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONTENT_ALL\", function() { return CONTENT_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONTENT_TYPES\", function() { return CONTENT_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"KEYS\", function() { return KEYS; });\nvar PAGE_SIZE = 20;\nvar FRESH_KEY = 'fresh';\nvar ORDER_BY_KEY = 'order';\nvar DURATION_KEY = 'duration';\nvar TAGS_KEY = 't';\nvar CONTENT_KEY = 'content';\nvar REPOSTED_URI_KEY = 'reposted_uri';\nvar TAGS_ALL = 'tags_any';\nvar TAGS_FOLLOWED = 'tags_followed';\nvar FRESH_DAY = 'day';\nvar FRESH_WEEK = 'week';\nvar FRESH_MONTH = 'month';\nvar FRESH_YEAR = 'year';\nvar FRESH_ALL = 'all';\nvar FRESH_DEFAULT = 'default';\nvar FRESH_TYPES = [FRESH_DEFAULT, FRESH_DAY, FRESH_WEEK, FRESH_MONTH, FRESH_YEAR, FRESH_ALL];\nvar ORDER_BY_TRENDING = 'trending';\nvar ORDER_BY_TRENDING_VALUE = ['trending_group', 'trending_mixed'];\nvar ORDER_BY_TOP = 'top';\nvar ORDER_BY_TOP_VALUE = ['effective_amount'];\nvar ORDER_BY_NEW = 'new';\nvar ORDER_BY_NEW_VALUE = ['release_time'];\nvar ORDER_BY_TYPES = [ORDER_BY_TRENDING, ORDER_BY_NEW, ORDER_BY_TOP];\nvar DURATION_SHORT = 'short';\nvar DURATION_LONG = 'long';\nvar DURATION_ALL = 'all';\nvar DURATION_TYPES = [DURATION_ALL, DURATION_LONG, DURATION_SHORT];\nvar FILE_VIDEO = 'video';\nvar FILE_AUDIO = 'audio';\nvar FILE_DOCUMENT = 'document';\nvar FILE_BINARY = 'binary';\nvar FILE_IMAGE = 'image';\nvar FILE_MODEL = 'model';\nvar FILE_TYPES = [FILE_VIDEO, FILE_AUDIO, FILE_DOCUMENT, FILE_IMAGE, FILE_MODEL, FILE_BINARY];\nvar CLAIM_CHANNEL = 'channel';\nvar CLAIM_STREAM = 'stream';\nvar CLAIM_REPOST = 'repost';\nvar CLAIM_TYPES = [CLAIM_CHANNEL, CLAIM_REPOST, CLAIM_STREAM];\nvar CONTENT_ALL = 'all';\nvar CONTENT_TYPES = [CONTENT_ALL, CLAIM_CHANNEL, CLAIM_REPOST].concat(FILE_TYPES);\nvar KEYS = [ORDER_BY_KEY, TAGS_KEY, FRESH_KEY, CONTENT_KEY, DURATION_KEY];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2NsYWltX3NlYXJjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb25zdGFudHMvY2xhaW1fc2VhcmNoLmpzPzkyZjAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFBBR0VfU0laRSA9IDIwO1xuXG5leHBvcnQgY29uc3QgRlJFU0hfS0VZID0gJ2ZyZXNoJztcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9LRVkgPSAnb3JkZXInO1xuZXhwb3J0IGNvbnN0IERVUkFUSU9OX0tFWSA9ICdkdXJhdGlvbic7XG5leHBvcnQgY29uc3QgVEFHU19LRVkgPSAndCc7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9LRVkgPSAnY29udGVudCc7XG5leHBvcnQgY29uc3QgUkVQT1NURURfVVJJX0tFWSA9ICdyZXBvc3RlZF91cmknO1xuXG5leHBvcnQgY29uc3QgVEFHU19BTEwgPSAndGFnc19hbnknO1xuZXhwb3J0IGNvbnN0IFRBR1NfRk9MTE9XRUQgPSAndGFnc19mb2xsb3dlZCc7XG5cbmV4cG9ydCBjb25zdCBGUkVTSF9EQVkgPSAnZGF5JztcbmV4cG9ydCBjb25zdCBGUkVTSF9XRUVLID0gJ3dlZWsnO1xuZXhwb3J0IGNvbnN0IEZSRVNIX01PTlRIID0gJ21vbnRoJztcbmV4cG9ydCBjb25zdCBGUkVTSF9ZRUFSID0gJ3llYXInO1xuZXhwb3J0IGNvbnN0IEZSRVNIX0FMTCA9ICdhbGwnO1xuZXhwb3J0IGNvbnN0IEZSRVNIX0RFRkFVTFQgPSAnZGVmYXVsdCc7XG5leHBvcnQgY29uc3QgRlJFU0hfVFlQRVMgPSBbRlJFU0hfREVGQVVMVCwgRlJFU0hfREFZLCBGUkVTSF9XRUVLLCBGUkVTSF9NT05USCwgRlJFU0hfWUVBUiwgRlJFU0hfQUxMXTtcblxuZXhwb3J0IGNvbnN0IE9SREVSX0JZX1RSRU5ESU5HID0gJ3RyZW5kaW5nJztcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9UUkVORElOR19WQUxVRSA9IFsndHJlbmRpbmdfZ3JvdXAnLCAndHJlbmRpbmdfbWl4ZWQnXTtcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9UT1AgPSAndG9wJztcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9UT1BfVkFMVUUgPSBbJ2VmZmVjdGl2ZV9hbW91bnQnXTtcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9ORVcgPSAnbmV3JztcbmV4cG9ydCBjb25zdCBPUkRFUl9CWV9ORVdfVkFMVUUgPSBbJ3JlbGVhc2VfdGltZSddO1xuZXhwb3J0IGNvbnN0IE9SREVSX0JZX1RZUEVTID0gW09SREVSX0JZX1RSRU5ESU5HLCBPUkRFUl9CWV9ORVcsIE9SREVSX0JZX1RPUF07XG5cbmV4cG9ydCBjb25zdCBEVVJBVElPTl9TSE9SVCA9ICdzaG9ydCc7XG5leHBvcnQgY29uc3QgRFVSQVRJT05fTE9ORyA9ICdsb25nJztcbmV4cG9ydCBjb25zdCBEVVJBVElPTl9BTEwgPSAnYWxsJztcbmV4cG9ydCBjb25zdCBEVVJBVElPTl9UWVBFUyA9IFtEVVJBVElPTl9BTEwsIERVUkFUSU9OX0xPTkcsIERVUkFUSU9OX1NIT1JUXTtcblxuZXhwb3J0IGNvbnN0IEZJTEVfVklERU8gPSAndmlkZW8nO1xuZXhwb3J0IGNvbnN0IEZJTEVfQVVESU8gPSAnYXVkaW8nO1xuZXhwb3J0IGNvbnN0IEZJTEVfRE9DVU1FTlQgPSAnZG9jdW1lbnQnO1xuZXhwb3J0IGNvbnN0IEZJTEVfQklOQVJZID0gJ2JpbmFyeSc7XG5leHBvcnQgY29uc3QgRklMRV9JTUFHRSA9ICdpbWFnZSc7XG5leHBvcnQgY29uc3QgRklMRV9NT0RFTCA9ICdtb2RlbCc7XG5leHBvcnQgY29uc3QgRklMRV9UWVBFUyA9IFtGSUxFX1ZJREVPLCBGSUxFX0FVRElPLCBGSUxFX0RPQ1VNRU5ULCBGSUxFX0lNQUdFLCBGSUxFX01PREVMLCBGSUxFX0JJTkFSWV07XG5cbmV4cG9ydCBjb25zdCBDTEFJTV9DSEFOTkVMID0gJ2NoYW5uZWwnO1xuZXhwb3J0IGNvbnN0IENMQUlNX1NUUkVBTSA9ICdzdHJlYW0nO1xuZXhwb3J0IGNvbnN0IENMQUlNX1JFUE9TVCA9ICdyZXBvc3QnO1xuZXhwb3J0IGNvbnN0IENMQUlNX1RZUEVTID0gW0NMQUlNX0NIQU5ORUwsIENMQUlNX1JFUE9TVCwgQ0xBSU1fU1RSRUFNXTtcblxuZXhwb3J0IGNvbnN0IENPTlRFTlRfQUxMID0gJ2FsbCc7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFUyA9IFtDT05URU5UX0FMTCwgQ0xBSU1fQ0hBTk5FTCwgQ0xBSU1fUkVQT1NULCAuLi5GSUxFX1RZUEVTXTtcbmV4cG9ydCBjb25zdCBLRVlTID0gW09SREVSX0JZX0tFWSwgVEFHU19LRVksIEZSRVNIX0tFWSwgQ09OVEVOVF9LRVksIERVUkFUSU9OX0tFWV07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/claim_search.js\n"); - -/***/ }), - -/***/ "../ui/constants/comments.js": -/*!***********************************!*\ - !*** ../ui/constants/comments.js ***! - \***********************************/ -/*! exports provided: MAX_CHARACTERS_IN_COMMENT */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAX_CHARACTERS_IN_COMMENT\", function() { return MAX_CHARACTERS_IN_COMMENT; });\nvar MAX_CHARACTERS_IN_COMMENT = 2000;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2NvbW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9jb21tZW50cy5qcz85ZjA4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNQVhfQ0hBUkFDVEVSU19JTl9DT01NRU5UID0gMjAwMDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/comments.js\n"); - -/***/ }), - -/***/ "../ui/constants/email.js": -/*!********************************!*\ - !*** ../ui/constants/email.js ***! - \********************************/ -/*! exports provided: EMAIL_REGEX */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EMAIL_REGEX\", function() { return EMAIL_REGEX; });\nvar EMAIL_REGEX = /^[^@]+@[^@]+$/;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2VtYWlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9lbWFpbC5qcz84NWYwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBFTUFJTF9SRUdFWCA9IC9eW15AXStAW15AXSskLztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/email.js\n"); - -/***/ }), - -/***/ "../ui/constants/file_render_modes.js": -/*!********************************************!*\ - !*** ../ui/constants/file_render_modes.js ***! - \********************************************/ -/*! exports provided: VIDEO, AUDIO, FLOATING_MODES, PDF, DOCX, HTML, MARKDOWN, DOCUMENT, PLAIN_TEXT, TEXT_MODES, IMAGE, CAD, COMIC, AUTO_RENDER_MODES, WEB_SHAREABLE_MODES, DOWNLOAD, APPLICATION, UNSUPPORTED, UNSUPPORTED_IN_THIS_APP, UNRENDERABLE_MODES */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VIDEO\", function() { return VIDEO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUDIO\", function() { return AUDIO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FLOATING_MODES\", function() { return FLOATING_MODES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PDF\", function() { return PDF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOCX\", function() { return DOCX; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HTML\", function() { return HTML; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MARKDOWN\", function() { return MARKDOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOCUMENT\", function() { return DOCUMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PLAIN_TEXT\", function() { return PLAIN_TEXT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TEXT_MODES\", function() { return TEXT_MODES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IMAGE\", function() { return IMAGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CAD\", function() { return CAD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COMIC\", function() { return COMIC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_RENDER_MODES\", function() { return AUTO_RENDER_MODES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WEB_SHAREABLE_MODES\", function() { return WEB_SHAREABLE_MODES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOAD\", function() { return DOWNLOAD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"APPLICATION\", function() { return APPLICATION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNSUPPORTED\", function() { return UNSUPPORTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNSUPPORTED_IN_THIS_APP\", function() { return UNSUPPORTED_IN_THIS_APP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNRENDERABLE_MODES\", function() { return UNRENDERABLE_MODES; });\nvar VIDEO = 'video';\nvar AUDIO = 'audio';\nvar FLOATING_MODES = [VIDEO, AUDIO]; // these types will show in floating player\n\nvar PDF = 'pdf';\nvar DOCX = 'docx';\nvar HTML = 'html';\nvar MARKDOWN = 'md';\nvar DOCUMENT = 'document';\nvar PLAIN_TEXT = 'plain_text';\nvar TEXT_MODES = [PDF, DOCUMENT, PLAIN_TEXT, DOCX, HTML, MARKDOWN]; // these types will use text/document layout\n\nvar IMAGE = 'image';\nvar CAD = 'cad';\nvar COMIC = 'comic';\nvar AUTO_RENDER_MODES = [IMAGE].concat(TEXT_MODES); // these types will render (and thus download) automatically (if free)\n\nvar WEB_SHAREABLE_MODES = AUTO_RENDER_MODES.concat(FLOATING_MODES);\nvar DOWNLOAD = 'download';\nvar APPLICATION = 'application';\nvar UNSUPPORTED = 'unsupported'; // PDFs disabled on desktop until we update Electron: https://github.com/electron/electron/issues/12337\n// Comics disabled because nothing is actually reporting as a comic type\n\nvar UNSUPPORTED_IN_THIS_APP = true ? [CAD, COMIC, APPLICATION] : undefined;\nvar UNRENDERABLE_MODES = Array.from(new Set(UNSUPPORTED_IN_THIS_APP.concat([DOWNLOAD, APPLICATION, UNSUPPORTED])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2ZpbGVfcmVuZGVyX21vZGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9maWxlX3JlbmRlcl9tb2Rlcy5qcz83MTExIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWSURFTyA9ICd2aWRlbyc7XG5leHBvcnQgY29uc3QgQVVESU8gPSAnYXVkaW8nO1xuXG5leHBvcnQgY29uc3QgRkxPQVRJTkdfTU9ERVMgPSBbVklERU8sIEFVRElPXTsgLy8gdGhlc2UgdHlwZXMgd2lsbCBzaG93IGluIGZsb2F0aW5nIHBsYXllclxuXG5leHBvcnQgY29uc3QgUERGID0gJ3BkZic7XG5leHBvcnQgY29uc3QgRE9DWCA9ICdkb2N4JztcbmV4cG9ydCBjb25zdCBIVE1MID0gJ2h0bWwnO1xuZXhwb3J0IGNvbnN0IE1BUktET1dOID0gJ21kJztcbmV4cG9ydCBjb25zdCBET0NVTUVOVCA9ICdkb2N1bWVudCc7XG5leHBvcnQgY29uc3QgUExBSU5fVEVYVCA9ICdwbGFpbl90ZXh0JztcblxuZXhwb3J0IGNvbnN0IFRFWFRfTU9ERVMgPSBbUERGLCBET0NVTUVOVCwgUExBSU5fVEVYVCwgRE9DWCwgSFRNTCwgTUFSS0RPV05dOyAvLyB0aGVzZSB0eXBlcyB3aWxsIHVzZSB0ZXh0L2RvY3VtZW50IGxheW91dFxuXG5leHBvcnQgY29uc3QgSU1BR0UgPSAnaW1hZ2UnO1xuZXhwb3J0IGNvbnN0IENBRCA9ICdjYWQnO1xuZXhwb3J0IGNvbnN0IENPTUlDID0gJ2NvbWljJztcblxuZXhwb3J0IGNvbnN0IEFVVE9fUkVOREVSX01PREVTID0gW0lNQUdFXS5jb25jYXQoVEVYVF9NT0RFUyk7IC8vIHRoZXNlIHR5cGVzIHdpbGwgcmVuZGVyIChhbmQgdGh1cyBkb3dubG9hZCkgYXV0b21hdGljYWxseSAoaWYgZnJlZSlcbmV4cG9ydCBjb25zdCBXRUJfU0hBUkVBQkxFX01PREVTID0gQVVUT19SRU5ERVJfTU9ERVMuY29uY2F0KEZMT0FUSU5HX01PREVTKTtcblxuZXhwb3J0IGNvbnN0IERPV05MT0FEID0gJ2Rvd25sb2FkJztcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTiA9ICdhcHBsaWNhdGlvbic7XG5leHBvcnQgY29uc3QgVU5TVVBQT1JURUQgPSAndW5zdXBwb3J0ZWQnO1xuXG4vLyBQREZzIGRpc2FibGVkIG9uIGRlc2t0b3AgdW50aWwgd2UgdXBkYXRlIEVsZWN0cm9uOiBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzEyMzM3XG4vLyBDb21pY3MgZGlzYWJsZWQgYmVjYXVzZSBub3RoaW5nIGlzIGFjdHVhbGx5IHJlcG9ydGluZyBhcyBhIGNvbWljIHR5cGVcbmV4cG9ydCBjb25zdCBVTlNVUFBPUlRFRF9JTl9USElTX0FQUCA9IElTX1dFQiA/IFtDQUQsIENPTUlDLCBBUFBMSUNBVElPTl0gOiBbQ0FELCBDT01JQywgQVBQTElDQVRJT04sIFBERl07XG5cbmV4cG9ydCBjb25zdCBVTlJFTkRFUkFCTEVfTU9ERVMgPSBBcnJheS5mcm9tKFxuICBuZXcgU2V0KFVOU1VQUE9SVEVEX0lOX1RISVNfQVBQLmNvbmNhdChbRE9XTkxPQUQsIEFQUExJQ0FUSU9OLCBVTlNVUFBPUlRFRF0pKVxuKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/file_render_modes.js\n"); - -/***/ }), - -/***/ "../ui/constants/icons.js": -/*!********************************!*\ - !*** ../ui/constants/icons.js ***! - \********************************/ -/*! exports provided: FEATURED, LOCAL, ALERT, COPY, ARROW_LEFT, ARROW_RIGHT, DOWNLOAD, PUBLISH, REMOVE, ADD, SUBTRACT, EDIT, DELETE, REPORT, HELP, CHAT, SEARCH, CHANNEL, REFRESH, HISTORY, HOME, OVERVIEW, WALLET, PHONE, COMPLETE, COMPLETED, SUBSCRIBE, UNSUBSCRIBE, UNLOCK, LOCK, WEB, SHARE, EXTERNAL, TIP, PLAY, FACEBOOK, TWITTER, TELEGRAM, REDDIT, LINKEDIN, EMBED, MORE, ACCOUNT, SETTINGS, INVITE, FILE, FULLSCREEN, OPTIONS, YES, NO, UP, DOWN, SECURE, MENU, BACKUP, TRANSACTIONS, LBRY, SEND, DISCOVER, VISUALIZER_ON, VISUALIZER_OFF, MUSIC_DETAILS_ON, MUSIC_DETAILS_OFF, MUSIC_ART_ON, MUSIC_ART_OFF, MUSIC_ALBUM, MUSIC_ARTIST, MUSIC_SONG, MUSIC_EQUALIZER, LIGHT, DARK, LIBRARY, TAG, SUPPORT, BLOCK, UNBLOCK, VIEW, EYE, EYE_OFF, SIGN_OUT, SIGN_IN, TRENDING, TOP, NEW, MORE_VERTICAL, IMAGE, AUDIO, VIDEO, TEXT, DOWNLOADABLE, REPOST, VALIDATED, SLIDERS, SCIENCE, ANALYTICS */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FEATURED\", function() { return FEATURED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOCAL\", function() { return LOCAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ALERT\", function() { return ALERT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COPY\", function() { return COPY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ARROW_LEFT\", function() { return ARROW_LEFT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ARROW_RIGHT\", function() { return ARROW_RIGHT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOAD\", function() { return DOWNLOAD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH\", function() { return PUBLISH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REMOVE\", function() { return REMOVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ADD\", function() { return ADD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUBTRACT\", function() { return SUBTRACT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EDIT\", function() { return EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DELETE\", function() { return DELETE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REPORT\", function() { return REPORT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HELP\", function() { return HELP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHAT\", function() { return CHAT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH\", function() { return SEARCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL\", function() { return CHANNEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REFRESH\", function() { return REFRESH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HISTORY\", function() { return HISTORY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HOME\", function() { return HOME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OVERVIEW\", function() { return OVERVIEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET\", function() { return WALLET; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PHONE\", function() { return PHONE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COMPLETE\", function() { return COMPLETE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COMPLETED\", function() { return COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUBSCRIBE\", function() { return SUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNSUBSCRIBE\", function() { return UNSUBSCRIBE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNLOCK\", function() { return UNLOCK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOCK\", function() { return LOCK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WEB\", function() { return WEB; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHARE\", function() { return SHARE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EXTERNAL\", function() { return EXTERNAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TIP\", function() { return TIP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PLAY\", function() { return PLAY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FACEBOOK\", function() { return FACEBOOK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TWITTER\", function() { return TWITTER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TELEGRAM\", function() { return TELEGRAM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REDDIT\", function() { return REDDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LINKEDIN\", function() { return LINKEDIN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EMBED\", function() { return EMBED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MORE\", function() { return MORE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ACCOUNT\", function() { return ACCOUNT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SETTINGS\", function() { return SETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INVITE\", function() { return INVITE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE\", function() { return FILE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FULLSCREEN\", function() { return FULLSCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OPTIONS\", function() { return OPTIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"YES\", function() { return YES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NO\", function() { return NO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UP\", function() { return UP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWN\", function() { return DOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SECURE\", function() { return SECURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MENU\", function() { return MENU; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BACKUP\", function() { return BACKUP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TRANSACTIONS\", function() { return TRANSACTIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LBRY\", function() { return LBRY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEND\", function() { return SEND; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DISCOVER\", function() { return DISCOVER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VISUALIZER_ON\", function() { return VISUALIZER_ON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VISUALIZER_OFF\", function() { return VISUALIZER_OFF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_DETAILS_ON\", function() { return MUSIC_DETAILS_ON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_DETAILS_OFF\", function() { return MUSIC_DETAILS_OFF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_ART_ON\", function() { return MUSIC_ART_ON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_ART_OFF\", function() { return MUSIC_ART_OFF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_ALBUM\", function() { return MUSIC_ALBUM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_ARTIST\", function() { return MUSIC_ARTIST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_SONG\", function() { return MUSIC_SONG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MUSIC_EQUALIZER\", function() { return MUSIC_EQUALIZER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LIGHT\", function() { return LIGHT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DARK\", function() { return DARK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LIBRARY\", function() { return LIBRARY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TAG\", function() { return TAG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT\", function() { return SUPPORT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BLOCK\", function() { return BLOCK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UNBLOCK\", function() { return UNBLOCK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VIEW\", function() { return VIEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EYE\", function() { return EYE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EYE_OFF\", function() { return EYE_OFF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SIGN_OUT\", function() { return SIGN_OUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SIGN_IN\", function() { return SIGN_IN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TRENDING\", function() { return TRENDING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOP\", function() { return TOP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NEW\", function() { return NEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MORE_VERTICAL\", function() { return MORE_VERTICAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IMAGE\", function() { return IMAGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUDIO\", function() { return AUDIO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VIDEO\", function() { return VIDEO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TEXT\", function() { return TEXT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADABLE\", function() { return DOWNLOADABLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REPOST\", function() { return REPOST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VALIDATED\", function() { return VALIDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SLIDERS\", function() { return SLIDERS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SCIENCE\", function() { return SCIENCE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ANALYTICS\", function() { return ANALYTICS; });\n// React Feather icons\n// https://github.com/carmelopullara/react-feather\n// Note: Icons should be named for their purpose, rather than the actual icon.\n// The goal being to reduce multiple uses of the same icon for different purposes.\n//\nvar FEATURED = 'Award';\nvar LOCAL = 'Folder';\nvar ALERT = 'AlertCircle';\nvar COPY = 'Clipboard';\nvar ARROW_LEFT = 'ChevronLeft';\nvar ARROW_RIGHT = 'ChevronRight';\nvar DOWNLOAD = 'Download';\nvar PUBLISH = 'UploadCloud';\nvar REMOVE = 'X';\nvar ADD = 'Plus';\nvar SUBTRACT = 'Subtract';\nvar EDIT = 'Edit';\nvar DELETE = 'Trash';\nvar REPORT = 'Flag';\nvar HELP = 'HelpCircle';\nvar CHAT = 'MessageCircle';\nvar SEARCH = 'Search';\nvar CHANNEL = 'AtSign';\nvar REFRESH = 'RefreshCw';\nvar HISTORY = 'Clock';\nvar HOME = 'Home';\nvar OVERVIEW = 'Activity';\nvar WALLET = 'List';\nvar PHONE = 'Phone';\nvar COMPLETE = 'Check';\nvar COMPLETED = 'CheckCircle';\nvar SUBSCRIBE = 'Heart';\nvar UNSUBSCRIBE = 'BrokenHeart';\nvar UNLOCK = 'Unlock';\nvar LOCK = 'Lock';\nvar WEB = 'Globe';\nvar SHARE = 'Share2';\nvar EXTERNAL = 'ExternalLink';\nvar TIP = 'Gift';\nvar PLAY = 'Play';\nvar FACEBOOK = 'Facebook';\nvar TWITTER = 'Twitter';\nvar TELEGRAM = 'Telegram';\nvar REDDIT = 'Reddit';\nvar LINKEDIN = 'LinkedIn';\nvar EMBED = 'Embed';\nvar MORE = 'More';\nvar ACCOUNT = 'User';\nvar SETTINGS = 'Settings';\nvar INVITE = 'Users';\nvar FILE = 'File';\nvar FULLSCREEN = 'Maximize';\nvar OPTIONS = 'Sliders';\nvar YES = 'ThumbsUp';\nvar NO = 'ThumbsDown';\nvar UP = 'ChevronUp';\nvar DOWN = 'ChevronDown';\nvar SECURE = 'Lock';\nvar MENU = 'Menu';\nvar BACKUP = 'Database';\nvar TRANSACTIONS = 'FileText';\nvar LBRY = 'Lbry';\nvar SEND = 'Send';\nvar DISCOVER = 'Compass';\nvar VISUALIZER_ON = 'Eye';\nvar VISUALIZER_OFF = 'EyeOff';\nvar MUSIC_DETAILS_ON = 'AlignLeft';\nvar MUSIC_DETAILS_OFF = 'AlignLeft';\nvar MUSIC_ART_ON = 'Image';\nvar MUSIC_ART_OFF = 'Image';\nvar MUSIC_ALBUM = 'Disc';\nvar MUSIC_ARTIST = 'Mic';\nvar MUSIC_SONG = 'Music';\nvar MUSIC_EQUALIZER = 'Sliders';\nvar LIGHT = 'Sun';\nvar DARK = 'Moon';\nvar LIBRARY = 'Folder';\nvar TAG = 'Tag';\nvar SUPPORT = 'TrendingUp';\nvar BLOCK = 'Slash';\nvar UNBLOCK = 'Circle';\nvar VIEW = 'View';\nvar EYE = 'Eye';\nvar EYE_OFF = 'EyeOff';\nvar SIGN_OUT = 'SignOut';\nvar SIGN_IN = 'SignIn';\nvar TRENDING = 'Trending';\nvar TOP = 'Top';\nvar NEW = 'New';\nvar MORE_VERTICAL = 'MoreVertical';\nvar IMAGE = 'Image';\nvar AUDIO = 'HeadPhones';\nvar VIDEO = 'Video';\nvar TEXT = 'FileText';\nvar DOWNLOADABLE = 'Downloadable';\nvar REPOST = 'Repeat';\nvar VALIDATED = 'Check';\nvar SLIDERS = 'Sliders';\nvar SCIENCE = 'Science';\nvar ANALYTICS = 'BarChart2';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2ljb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9pY29ucy5qcz8xNzI1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFJlYWN0IEZlYXRoZXIgaWNvbnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXJtZWxvcHVsbGFyYS9yZWFjdC1mZWF0aGVyXG4vLyBOb3RlOiBJY29ucyBzaG91bGQgYmUgbmFtZWQgZm9yIHRoZWlyIHB1cnBvc2UsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgaWNvbi5cbi8vICAgICAgIFRoZSBnb2FsIGJlaW5nIHRvIHJlZHVjZSBtdWx0aXBsZSB1c2VzIG9mIHRoZSBzYW1lIGljb24gZm9yIGRpZmZlcmVudCBwdXJwb3Nlcy5cbi8vXG5leHBvcnQgY29uc3QgRkVBVFVSRUQgPSAnQXdhcmQnO1xuZXhwb3J0IGNvbnN0IExPQ0FMID0gJ0ZvbGRlcic7XG5leHBvcnQgY29uc3QgQUxFUlQgPSAnQWxlcnRDaXJjbGUnO1xuZXhwb3J0IGNvbnN0IENPUFkgPSAnQ2xpcGJvYXJkJztcbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUID0gJ0NoZXZyb25MZWZ0JztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVCA9ICdDaGV2cm9uUmlnaHQnO1xuZXhwb3J0IGNvbnN0IERPV05MT0FEID0gJ0Rvd25sb2FkJztcbmV4cG9ydCBjb25zdCBQVUJMSVNIID0gJ1VwbG9hZENsb3VkJztcbmV4cG9ydCBjb25zdCBSRU1PVkUgPSAnWCc7XG5leHBvcnQgY29uc3QgQUREID0gJ1BsdXMnO1xuZXhwb3J0IGNvbnN0IFNVQlRSQUNUID0gJ1N1YnRyYWN0JztcbmV4cG9ydCBjb25zdCBFRElUID0gJ0VkaXQnO1xuZXhwb3J0IGNvbnN0IERFTEVURSA9ICdUcmFzaCc7XG5leHBvcnQgY29uc3QgUkVQT1JUID0gJ0ZsYWcnO1xuZXhwb3J0IGNvbnN0IEhFTFAgPSAnSGVscENpcmNsZSc7XG5leHBvcnQgY29uc3QgQ0hBVCA9ICdNZXNzYWdlQ2lyY2xlJztcbmV4cG9ydCBjb25zdCBTRUFSQ0ggPSAnU2VhcmNoJztcbmV4cG9ydCBjb25zdCBDSEFOTkVMID0gJ0F0U2lnbic7XG5leHBvcnQgY29uc3QgUkVGUkVTSCA9ICdSZWZyZXNoQ3cnO1xuZXhwb3J0IGNvbnN0IEhJU1RPUlkgPSAnQ2xvY2snO1xuZXhwb3J0IGNvbnN0IEhPTUUgPSAnSG9tZSc7XG5leHBvcnQgY29uc3QgT1ZFUlZJRVcgPSAnQWN0aXZpdHknO1xuZXhwb3J0IGNvbnN0IFdBTExFVCA9ICdMaXN0JztcbmV4cG9ydCBjb25zdCBQSE9ORSA9ICdQaG9uZSc7XG5leHBvcnQgY29uc3QgQ09NUExFVEUgPSAnQ2hlY2snO1xuZXhwb3J0IGNvbnN0IENPTVBMRVRFRCA9ICdDaGVja0NpcmNsZSc7XG5leHBvcnQgY29uc3QgU1VCU0NSSUJFID0gJ0hlYXJ0JztcbmV4cG9ydCBjb25zdCBVTlNVQlNDUklCRSA9ICdCcm9rZW5IZWFydCc7XG5leHBvcnQgY29uc3QgVU5MT0NLID0gJ1VubG9jayc7XG5leHBvcnQgY29uc3QgTE9DSyA9ICdMb2NrJztcbmV4cG9ydCBjb25zdCBXRUIgPSAnR2xvYmUnO1xuZXhwb3J0IGNvbnN0IFNIQVJFID0gJ1NoYXJlMic7XG5leHBvcnQgY29uc3QgRVhURVJOQUwgPSAnRXh0ZXJuYWxMaW5rJztcbmV4cG9ydCBjb25zdCBUSVAgPSAnR2lmdCc7XG5leHBvcnQgY29uc3QgUExBWSA9ICdQbGF5JztcbmV4cG9ydCBjb25zdCBGQUNFQk9PSyA9ICdGYWNlYm9vayc7XG5leHBvcnQgY29uc3QgVFdJVFRFUiA9ICdUd2l0dGVyJztcbmV4cG9ydCBjb25zdCBURUxFR1JBTSA9ICdUZWxlZ3JhbSc7XG5leHBvcnQgY29uc3QgUkVERElUID0gJ1JlZGRpdCc7XG5leHBvcnQgY29uc3QgTElOS0VESU4gPSAnTGlua2VkSW4nO1xuZXhwb3J0IGNvbnN0IEVNQkVEID0gJ0VtYmVkJztcbmV4cG9ydCBjb25zdCBNT1JFID0gJ01vcmUnO1xuZXhwb3J0IGNvbnN0IEFDQ09VTlQgPSAnVXNlcic7XG5leHBvcnQgY29uc3QgU0VUVElOR1MgPSAnU2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IElOVklURSA9ICdVc2Vycyc7XG5leHBvcnQgY29uc3QgRklMRSA9ICdGaWxlJztcbmV4cG9ydCBjb25zdCBGVUxMU0NSRUVOID0gJ01heGltaXplJztcbmV4cG9ydCBjb25zdCBPUFRJT05TID0gJ1NsaWRlcnMnO1xuZXhwb3J0IGNvbnN0IFlFUyA9ICdUaHVtYnNVcCc7XG5leHBvcnQgY29uc3QgTk8gPSAnVGh1bWJzRG93bic7XG5leHBvcnQgY29uc3QgVVAgPSAnQ2hldnJvblVwJztcbmV4cG9ydCBjb25zdCBET1dOID0gJ0NoZXZyb25Eb3duJztcbmV4cG9ydCBjb25zdCBTRUNVUkUgPSAnTG9jayc7XG5leHBvcnQgY29uc3QgTUVOVSA9ICdNZW51JztcbmV4cG9ydCBjb25zdCBCQUNLVVAgPSAnRGF0YWJhc2UnO1xuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OUyA9ICdGaWxlVGV4dCc7XG5leHBvcnQgY29uc3QgTEJSWSA9ICdMYnJ5JztcbmV4cG9ydCBjb25zdCBTRU5EID0gJ1NlbmQnO1xuZXhwb3J0IGNvbnN0IERJU0NPVkVSID0gJ0NvbXBhc3MnO1xuZXhwb3J0IGNvbnN0IFZJU1VBTElaRVJfT04gPSAnRXllJztcbmV4cG9ydCBjb25zdCBWSVNVQUxJWkVSX09GRiA9ICdFeWVPZmYnO1xuZXhwb3J0IGNvbnN0IE1VU0lDX0RFVEFJTFNfT04gPSAnQWxpZ25MZWZ0JztcbmV4cG9ydCBjb25zdCBNVVNJQ19ERVRBSUxTX09GRiA9ICdBbGlnbkxlZnQnO1xuZXhwb3J0IGNvbnN0IE1VU0lDX0FSVF9PTiA9ICdJbWFnZSc7XG5leHBvcnQgY29uc3QgTVVTSUNfQVJUX09GRiA9ICdJbWFnZSc7XG5leHBvcnQgY29uc3QgTVVTSUNfQUxCVU0gPSAnRGlzYyc7XG5leHBvcnQgY29uc3QgTVVTSUNfQVJUSVNUID0gJ01pYyc7XG5leHBvcnQgY29uc3QgTVVTSUNfU09ORyA9ICdNdXNpYyc7XG5leHBvcnQgY29uc3QgTVVTSUNfRVFVQUxJWkVSID0gJ1NsaWRlcnMnO1xuZXhwb3J0IGNvbnN0IExJR0hUID0gJ1N1bic7XG5leHBvcnQgY29uc3QgREFSSyA9ICdNb29uJztcbmV4cG9ydCBjb25zdCBMSUJSQVJZID0gJ0ZvbGRlcic7XG5leHBvcnQgY29uc3QgVEFHID0gJ1RhZyc7XG5leHBvcnQgY29uc3QgU1VQUE9SVCA9ICdUcmVuZGluZ1VwJztcbmV4cG9ydCBjb25zdCBCTE9DSyA9ICdTbGFzaCc7XG5leHBvcnQgY29uc3QgVU5CTE9DSyA9ICdDaXJjbGUnO1xuZXhwb3J0IGNvbnN0IFZJRVcgPSAnVmlldyc7XG5leHBvcnQgY29uc3QgRVlFID0gJ0V5ZSc7XG5leHBvcnQgY29uc3QgRVlFX09GRiA9ICdFeWVPZmYnO1xuZXhwb3J0IGNvbnN0IFNJR05fT1VUID0gJ1NpZ25PdXQnO1xuZXhwb3J0IGNvbnN0IFNJR05fSU4gPSAnU2lnbkluJztcbmV4cG9ydCBjb25zdCBUUkVORElORyA9ICdUcmVuZGluZyc7XG5leHBvcnQgY29uc3QgVE9QID0gJ1RvcCc7XG5leHBvcnQgY29uc3QgTkVXID0gJ05ldyc7XG5leHBvcnQgY29uc3QgTU9SRV9WRVJUSUNBTCA9ICdNb3JlVmVydGljYWwnO1xuZXhwb3J0IGNvbnN0IElNQUdFID0gJ0ltYWdlJztcbmV4cG9ydCBjb25zdCBBVURJTyA9ICdIZWFkUGhvbmVzJztcbmV4cG9ydCBjb25zdCBWSURFTyA9ICdWaWRlbyc7XG5leHBvcnQgY29uc3QgVEVYVCA9ICdGaWxlVGV4dCc7XG5leHBvcnQgY29uc3QgRE9XTkxPQURBQkxFID0gJ0Rvd25sb2FkYWJsZSc7XG5leHBvcnQgY29uc3QgUkVQT1NUID0gJ1JlcGVhdCc7XG5leHBvcnQgY29uc3QgVkFMSURBVEVEID0gJ0NoZWNrJztcbmV4cG9ydCBjb25zdCBTTElERVJTID0gJ1NsaWRlcnMnO1xuZXhwb3J0IGNvbnN0IFNDSUVOQ0UgPSAnU2NpZW5jZSc7XG5leHBvcnQgY29uc3QgQU5BTFlUSUNTID0gJ0JhckNoYXJ0Mic7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/icons.js\n"); - -/***/ }), - -/***/ "../ui/constants/languages.js": -/*!************************************!*\ - !*** ../ui/constants/languages.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar LANGUAGES = {\n aa: ['Afar', 'Afar'],\n ab: ['Abkhazian', 'Аҧсуа'],\n af: ['Afrikaans', 'Afrikaans'],\n ak: ['Akan', 'Akana'],\n am: ['Amharic', 'አማርኛ'],\n an: ['Aragonese', 'Aragonés'],\n ar: ['Arabic', 'العربية'],\n as: ['Assamese', 'অসমীয়া'],\n av: ['Avar', 'Авар'],\n ay: ['Aymara', 'Aymar'],\n az: ['Azerbaijani', 'Azərbaycanca / آذربايجان'],\n ba: ['Bashkir', 'Башҡорт'],\n be: ['Belarusian', 'Беларуская'],\n bg: ['Bulgarian', 'Български'],\n bh: ['Bihari', 'भोजपुरी'],\n bi: ['Bislama', 'Bislama'],\n bm: ['Bambara', 'Bamanankan'],\n bn: ['Bengali', 'বাংলা'],\n bo: ['Tibetan', 'བོད་ཡིག / Bod skad'],\n br: ['Breton', 'Brezhoneg'],\n bs: ['Bosnian', 'Bosanski'],\n ca: ['Catalan', 'Català'],\n ce: ['Chechen', 'Нохчийн'],\n ch: ['Chamorro', 'Chamoru'],\n co: ['Corsican', 'Corsu'],\n cr: ['Cree', 'Nehiyaw'],\n cs: ['Czech', 'Česky'],\n cu: ['Old Church Slavonic / Old Bulgarian', 'словѣньскъ / slověnĭskŭ'],\n cv: ['Chuvash', 'Чăваш'],\n cy: ['Welsh', 'Cymraeg'],\n da: ['Danish', 'Dansk'],\n de: ['German', 'Deutsch'],\n dv: ['Divehi', 'ދިވެހިބަސް'],\n dz: ['Dzongkha', 'ཇོང་ཁ'],\n ee: ['Ewe', 'Ɛʋɛ'],\n el: ['Greek', 'Ελληνικά'],\n en: ['English', 'English'],\n eo: ['Esperanto', 'Esperanto'],\n es: ['Spanish', 'Español'],\n et: ['Estonian', 'Eesti'],\n eu: ['Basque', 'Euskara'],\n fa: ['Persian', 'فارسی'],\n ff: ['Peul', 'Fulfulde'],\n fi: ['Finnish', 'Suomi'],\n fj: ['Fijian', 'Na Vosa Vakaviti'],\n fo: ['Faroese', 'Føroyskt'],\n fr: ['French', 'Français'],\n fy: ['West Frisian', 'Frysk'],\n ga: ['Irish', 'Gaeilge'],\n gd: ['Scottish Gaelic', 'Gàidhlig'],\n gl: ['Galician', 'Galego'],\n gn: ['Guarani', \"Avañe'ẽ\"],\n gu: ['Gujarati', 'ગુજરાતી'],\n gv: ['Manx', 'Gaelg'],\n ha: ['Hausa', 'هَوُسَ'],\n he: ['Hebrew', 'עברית'],\n hi: ['Hindi', 'हिन्दी'],\n ho: ['Hiri Motu', 'Hiri Motu'],\n hr: ['Croatian', 'Hrvatski'],\n ht: ['Haitian', 'Krèyol ayisyen'],\n hu: ['Hungarian', 'Magyar'],\n hy: ['Armenian', 'Հայերեն'],\n hz: ['Herero', 'Otsiherero'],\n ia: ['Interlingua', 'Interlingua'],\n id: ['Indonesian', 'Bahasa Indonesia'],\n ie: ['Interlingue', 'Interlingue'],\n ig: ['Igbo', 'Igbo'],\n ii: ['Sichuan Yi', 'ꆇꉙ / 四川彝语'],\n ik: ['Inupiak', 'Iñupiak'],\n io: ['Ido', 'Ido'],\n is: ['Icelandic', 'Íslenska'],\n it: ['Italian', 'Italiano'],\n iu: ['Inuktitut', 'ᐃᓄᒃᑎᑐᑦ'],\n ja: ['Japanese', '日本語'],\n jv: ['Javanese', 'Basa Jawa'],\n ka: ['Georgian', 'ქართული'],\n kg: ['Kongo', 'KiKongo'],\n ki: ['Kikuyu', 'Gĩkũyũ'],\n kj: ['Kuanyama', 'Kuanyama'],\n kk: ['Kazakh', 'Қазақша'],\n kl: ['Greenlandic', 'Kalaallisut'],\n km: ['Khmer', 'ភាសាខ្មែរ'],\n kn: ['Kannada', 'ಕನ್ನಡ'],\n ko: ['Korean', '한국어'],\n kr: ['Kanuri', 'Kanuri'],\n ks: ['Kashmiri', 'कश्मीरी / كشميري'],\n ku: ['Kurdish', 'Kurdî / كوردی'],\n kv: ['Komi', 'Коми'],\n kw: ['Cornish', 'Kernewek'],\n ky: ['Kirghiz', 'Kırgızca / Кыргызча'],\n la: ['Latin', 'Latina'],\n lb: ['Luxembourgish', 'Lëtzebuergesch'],\n lg: ['Ganda', 'Luganda'],\n li: ['Limburgian', 'Limburgs'],\n ln: ['Lingala', 'Lingála'],\n lo: ['Laotian', 'ລາວ / Pha xa lao'],\n lt: ['Lithuanian', 'Lietuvių'],\n lv: ['Latvian', 'Latviešu'],\n mg: ['Malagasy', 'Malagasy'],\n mh: ['Marshallese', 'Kajin Majel / Ebon'],\n mi: ['Maori', 'Māori'],\n mk: ['Macedonian', 'Македонски'],\n ml: ['Malayalam', 'മലയാളം'],\n mn: ['Mongolian', 'Монгол'],\n mo: ['Moldovan', 'Moldovenească'],\n mr: ['Marathi', 'मराठी'],\n ms: ['Malay', 'Bahasa Melayu'],\n mt: ['Maltese', 'bil-Malti'],\n my: ['Burmese', 'Myanmasa'],\n na: ['Nauruan', 'Dorerin Naoero'],\n nd: ['North Ndebele', 'Sindebele'],\n ne: ['Nepali', 'नेपाली'],\n ng: ['Ndonga', 'Oshiwambo'],\n nl: ['Dutch', 'Nederlands'],\n nn: ['Norwegian Nynorsk', 'Norsk (nynorsk)'],\n no: ['Norwegian', 'Norsk (bokmål / riksmål)'],\n nr: ['South Ndebele', 'isiNdebele'],\n nv: ['Navajo', 'Diné bizaad'],\n ny: ['Chichewa', 'Chi-Chewa'],\n oc: ['Occitan', 'Occitan'],\n oj: ['Ojibwa', 'ᐊᓂᔑᓈᐯᒧᐎᓐ / Anishinaabemowin'],\n om: ['Oromo', 'Oromoo'],\n or: ['Oriya', 'ଓଡ଼ିଆ'],\n os: ['Ossetian / Ossetic', 'Иронау'],\n pa: ['Panjabi / Punjabi', 'ਪੰਜਾਬੀ / पंजाबी / پنجابي'],\n pi: ['Pali', 'Pāli / पाऴि'],\n pl: ['Polish', 'Polski'],\n ps: ['Pashto', 'پښتو'],\n pt: ['Portuguese', 'Português'],\n qu: ['Quechua', 'Runa Simi'],\n rm: ['Raeto Romance', 'Rumantsch'],\n rn: ['Kirundi', 'Kirundi'],\n ro: ['Romanian', 'Română'],\n ru: ['Russian', 'Русский'],\n rw: ['Rwandi', 'Kinyarwandi'],\n sa: ['Sanskrit', 'संस्कृतम्'],\n sc: ['Sardinian', 'Sardu'],\n sd: ['Sindhi', 'सिनधि'],\n se: ['Northern Sami', 'Sámegiella'],\n sg: ['Sango', 'Sängö'],\n sh: ['Serbo-Croatian', 'Srpskohrvatski / Српскохрватски'],\n si: ['Sinhalese', 'සිංහල'],\n sk: ['Slovak', 'Slovenčina'],\n sl: ['Slovenian', 'Slovenščina'],\n sm: ['Samoan', 'Gagana Samoa'],\n sn: ['Shona', 'chiShona'],\n so: ['Somalia', 'Soomaaliga'],\n sq: ['Albanian', 'Shqip'],\n sr: ['Serbian', 'Српски'],\n ss: ['Swati', 'SiSwati'],\n st: ['Southern Sotho', 'Sesotho'],\n su: ['Sundanese', 'Basa Sunda'],\n sv: ['Swedish', 'Svenska'],\n sw: ['Swahili', 'Kiswahili'],\n ta: ['Tamil', 'தமிழ்'],\n te: ['Telugu', 'తెలుగు'],\n tg: ['Tajik', 'Тоҷикӣ'],\n th: ['Thai', 'ไทย / Phasa Thai'],\n ti: ['Tigrinya', 'ትግርኛ'],\n tk: ['Turkmen', 'Туркмен / تركمن'],\n tl: ['Tagalog / Filipino', 'Tagalog'],\n tn: ['Tswana', 'Setswana'],\n to: ['Tonga', 'Lea Faka-Tonga'],\n tr: ['Turkish', 'Türkçe'],\n ts: ['Tsonga', 'Xitsonga'],\n tt: ['Tatar', 'Tatarça'],\n tw: ['Twi', 'Twi'],\n ty: ['Tahitian', 'Reo Mā`ohi'],\n ug: ['Uyghur', 'Uyƣurqə / ئۇيغۇرچە'],\n uk: ['Ukrainian', 'Українська'],\n ur: ['Urdu', 'اردو'],\n uz: ['Uzbek', 'Ўзбек'],\n ve: ['Venda', 'Tshivenḓa'],\n vi: ['Vietnamese', 'Tiếng Việt'],\n vo: ['Volapük', 'Volapük'],\n wa: ['Walloon', 'Walon'],\n wo: ['Wolof', 'Wollof'],\n xh: ['Xhosa', 'isiXhosa'],\n yi: ['Yiddish', 'ייִדיש'],\n yo: ['Yoruba', 'Yorùbá'],\n za: ['Zhuang', 'Cuengh / Tôô / 壮语'],\n zh: ['Chinese', '中文'],\n zu: ['Zulu', 'isiZulu']\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (LANGUAGES);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2xhbmd1YWdlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb25zdGFudHMvbGFuZ3VhZ2VzLmpzPzZmNDYiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTEFOR1VBR0VTID0ge1xuICBhYTogWydBZmFyJywgJ0FmYXInXSxcbiAgYWI6IFsnQWJraGF6aWFuJywgJ9CQ0qfRgdGD0LAnXSxcbiAgYWY6IFsnQWZyaWthYW5zJywgJ0FmcmlrYWFucyddLFxuICBhazogWydBa2FuJywgJ0FrYW5hJ10sXG4gIGFtOiBbJ0FtaGFyaWMnLCAn4Yqg4Yib4Yit4YqbJ10sXG4gIGFuOiBbJ0FyYWdvbmVzZScsICdBcmFnb27DqXMnXSxcbiAgYXI6IFsnQXJhYmljJywgJ9in2YTYudix2KjZitipJ10sXG4gIGFzOiBbJ0Fzc2FtZXNlJywgJ+CmheCmuOCmruCngOCmr+CmvOCmviddLFxuICBhdjogWydBdmFyJywgJ9CQ0LLQsNGAJ10sXG4gIGF5OiBbJ0F5bWFyYScsICdBeW1hciddLFxuICBhejogWydBemVyYmFpamFuaScsICdBesmZcmJheWNhbmNhIC8g2KLYsNix2KjYp9mK2KzYp9mGJ10sXG4gIGJhOiBbJ0Jhc2hraXInLCAn0JHQsNGI0qHQvtGA0YInXSxcbiAgYmU6IFsnQmVsYXJ1c2lhbicsICfQkdC10LvQsNGA0YPRgdC60LDRjyddLFxuICBiZzogWydCdWxnYXJpYW4nLCAn0JHRitC70LPQsNGA0YHQutC4J10sXG4gIGJoOiBbJ0JpaGFyaScsICfgpK3gpYvgpJzgpKrgpYHgpLDgpYAnXSxcbiAgYmk6IFsnQmlzbGFtYScsICdCaXNsYW1hJ10sXG4gIGJtOiBbJ0JhbWJhcmEnLCAnQmFtYW5hbmthbiddLFxuICBibjogWydCZW5nYWxpJywgJ+CmrOCmvuCmguCmsuCmviddLFxuICBibzogWydUaWJldGFuJywgJ+C9luC9vOC9keC8i+C9oeC9suC9giAvIEJvZCBza2FkJ10sXG4gIGJyOiBbJ0JyZXRvbicsICdCcmV6aG9uZWcnXSxcbiAgYnM6IFsnQm9zbmlhbicsICdCb3NhbnNraSddLFxuICBjYTogWydDYXRhbGFuJywgJ0NhdGFsw6AnXSxcbiAgY2U6IFsnQ2hlY2hlbicsICfQndC+0YXRh9C40LnQvSddLFxuICBjaDogWydDaGFtb3JybycsICdDaGFtb3J1J10sXG4gIGNvOiBbJ0NvcnNpY2FuJywgJ0NvcnN1J10sXG4gIGNyOiBbJ0NyZWUnLCAnTmVoaXlhdyddLFxuICBjczogWydDemVjaCcsICfEjGVza3knXSxcbiAgY3U6IFsnT2xkIENodXJjaCBTbGF2b25pYyAvIE9sZCBCdWxnYXJpYW4nLCAn0YHQu9C+0LLRo9C90YzRgdC60YogLyBzbG92xJtuxK1za8WtJ10sXG4gIGN2OiBbJ0NodXZhc2gnLCAn0KfEg9Cy0LDRiCddLFxuICBjeTogWydXZWxzaCcsICdDeW1yYWVnJ10sXG4gIGRhOiBbJ0RhbmlzaCcsICdEYW5zayddLFxuICBkZTogWydHZXJtYW4nLCAnRGV1dHNjaCddLFxuICBkdjogWydEaXZlaGknLCAn3oveqN6I3qzegN6o3oTept6Q3rAnXSxcbiAgZHo6IFsnRHpvbmdraGEnLCAn4L2H4L284L2E4LyL4L2BJ10sXG4gIGVlOiBbJ0V3ZScsICfGkMqLyZsnXSxcbiAgZWw6IFsnR3JlZWsnLCAnzpXOu867zrfOvc65zrrOrCddLFxuICBlbjogWydFbmdsaXNoJywgJ0VuZ2xpc2gnXSxcbiAgZW86IFsnRXNwZXJhbnRvJywgJ0VzcGVyYW50byddLFxuICBlczogWydTcGFuaXNoJywgJ0VzcGHDsW9sJ10sXG4gIGV0OiBbJ0VzdG9uaWFuJywgJ0Vlc3RpJ10sXG4gIGV1OiBbJ0Jhc3F1ZScsICdFdXNrYXJhJ10sXG4gIGZhOiBbJ1BlcnNpYW4nLCAn2YHYp9ix2LPbjCddLFxuICBmZjogWydQZXVsJywgJ0Z1bGZ1bGRlJ10sXG4gIGZpOiBbJ0Zpbm5pc2gnLCAnU3VvbWknXSxcbiAgZmo6IFsnRmlqaWFuJywgJ05hIFZvc2EgVmFrYXZpdGknXSxcbiAgZm86IFsnRmFyb2VzZScsICdGw7hyb3lza3QnXSxcbiAgZnI6IFsnRnJlbmNoJywgJ0ZyYW7Dp2FpcyddLFxuICBmeTogWydXZXN0IEZyaXNpYW4nLCAnRnJ5c2snXSxcbiAgZ2E6IFsnSXJpc2gnLCAnR2FlaWxnZSddLFxuICBnZDogWydTY290dGlzaCBHYWVsaWMnLCAnR8OgaWRobGlnJ10sXG4gIGdsOiBbJ0dhbGljaWFuJywgJ0dhbGVnbyddLFxuICBnbjogWydHdWFyYW5pJywgXCJBdmHDsWUn4bq9XCJdLFxuICBndTogWydHdWphcmF0aScsICfgqpfgq4HgqpzgqrDgqr7gqqTgq4AnXSxcbiAgZ3Y6IFsnTWFueCcsICdHYWVsZyddLFxuICBoYTogWydIYXVzYScsICfZh9mO2YjZj9iz2Y4nXSxcbiAgaGU6IFsnSGVicmV3JywgJ9ei15HXqNeZ16onXSxcbiAgaGk6IFsnSGluZGknLCAn4KS54KS/4KSo4KWN4KSm4KWAJ10sXG4gIGhvOiBbJ0hpcmkgTW90dScsICdIaXJpIE1vdHUnXSxcbiAgaHI6IFsnQ3JvYXRpYW4nLCAnSHJ2YXRza2knXSxcbiAgaHQ6IFsnSGFpdGlhbicsICdLcsOoeW9sIGF5aXN5ZW4nXSxcbiAgaHU6IFsnSHVuZ2FyaWFuJywgJ01hZ3lhciddLFxuICBoeTogWydBcm1lbmlhbicsICfVgNWh1bXVpdaA1aXVtiddLFxuICBoejogWydIZXJlcm8nLCAnT3RzaWhlcmVybyddLFxuICBpYTogWydJbnRlcmxpbmd1YScsICdJbnRlcmxpbmd1YSddLFxuICBpZDogWydJbmRvbmVzaWFuJywgJ0JhaGFzYSBJbmRvbmVzaWEnXSxcbiAgaWU6IFsnSW50ZXJsaW5ndWUnLCAnSW50ZXJsaW5ndWUnXSxcbiAgaWc6IFsnSWdibycsICdJZ2JvJ10sXG4gIGlpOiBbJ1NpY2h1YW4gWWknLCAn6oaH6omZIC8g5Zub5bed5b2d6K+tJ10sXG4gIGlrOiBbJ0ludXBpYWsnLCAnScOxdXBpYWsnXSxcbiAgaW86IFsnSWRvJywgJ0lkbyddLFxuICBpczogWydJY2VsYW5kaWMnLCAnw41zbGVuc2thJ10sXG4gIGl0OiBbJ0l0YWxpYW4nLCAnSXRhbGlhbm8nXSxcbiAgaXU6IFsnSW51a3RpdHV0JywgJ+GQg+GThOGSg+GRjuGRkOGRpiddLFxuICBqYTogWydKYXBhbmVzZScsICfml6XmnKzoqp4nXSxcbiAganY6IFsnSmF2YW5lc2UnLCAnQmFzYSBKYXdhJ10sXG4gIGthOiBbJ0dlb3JnaWFuJywgJ+GDpeGDkOGDoOGDl+GDo+GDmuGDmCddLFxuICBrZzogWydLb25nbycsICdLaUtvbmdvJ10sXG4gIGtpOiBbJ0tpa3V5dScsICdHxKlrxal5xaknXSxcbiAga2o6IFsnS3VhbnlhbWEnLCAnS3VhbnlhbWEnXSxcbiAga2s6IFsnS2F6YWtoJywgJ9Ka0LDQt9Cw0pvRiNCwJ10sXG4gIGtsOiBbJ0dyZWVubGFuZGljJywgJ0thbGFhbGxpc3V0J10sXG4gIGttOiBbJ0tobWVyJywgJ+Gel+GetuGen+GetuGegeGfkuGemOGfguGemiddLFxuICBrbjogWydLYW5uYWRhJywgJ+CyleCyqOCzjeCyqOCyoSddLFxuICBrbzogWydLb3JlYW4nLCAn7ZWc6rWt7Ja0J10sXG4gIGtyOiBbJ0thbnVyaScsICdLYW51cmknXSxcbiAga3M6IFsnS2FzaG1pcmknLCAn4KSV4KS24KWN4KSu4KWA4KSw4KWAIC8g2YPYtNmF2YrYsdmKJ10sXG4gIGt1OiBbJ0t1cmRpc2gnLCAnS3VyZMOuIC8g2YPZiNix2K/bjCddLFxuICBrdjogWydLb21pJywgJ9Ca0L7QvNC4J10sXG4gIGt3OiBbJ0Nvcm5pc2gnLCAnS2VybmV3ZWsnXSxcbiAga3k6IFsnS2lyZ2hpeicsICdLxLFyZ8SxemNhIC8g0JrRi9GA0LPRi9C30YfQsCddLFxuICBsYTogWydMYXRpbicsICdMYXRpbmEnXSxcbiAgbGI6IFsnTHV4ZW1ib3VyZ2lzaCcsICdMw6t0emVidWVyZ2VzY2gnXSxcbiAgbGc6IFsnR2FuZGEnLCAnTHVnYW5kYSddLFxuICBsaTogWydMaW1idXJnaWFuJywgJ0xpbWJ1cmdzJ10sXG4gIGxuOiBbJ0xpbmdhbGEnLCAnTGluZ8OhbGEnXSxcbiAgbG86IFsnTGFvdGlhbicsICfguqXgurLguqcgLyBQaGEgeGEgbGFvJ10sXG4gIGx0OiBbJ0xpdGh1YW5pYW4nLCAnTGlldHV2acWzJ10sXG4gIGx2OiBbJ0xhdHZpYW4nLCAnTGF0dmllxaF1J10sXG4gIG1nOiBbJ01hbGFnYXN5JywgJ01hbGFnYXN5J10sXG4gIG1oOiBbJ01hcnNoYWxsZXNlJywgJ0thamluIE1hamVsIC8gRWJvbiddLFxuICBtaTogWydNYW9yaScsICdNxIFvcmknXSxcbiAgbWs6IFsnTWFjZWRvbmlhbicsICfQnNCw0LrQtdC00L7QvdGB0LrQuCddLFxuICBtbDogWydNYWxheWFsYW0nLCAn4LSu4LSy4LSv4LS+4LSz4LSCJ10sXG4gIG1uOiBbJ01vbmdvbGlhbicsICfQnNC+0L3Qs9C+0LsnXSxcbiAgbW86IFsnTW9sZG92YW4nLCAnTW9sZG92ZW5lYXNjxIMnXSxcbiAgbXI6IFsnTWFyYXRoaScsICfgpK7gpLDgpL7gpKDgpYAnXSxcbiAgbXM6IFsnTWFsYXknLCAnQmFoYXNhIE1lbGF5dSddLFxuICBtdDogWydNYWx0ZXNlJywgJ2JpbC1NYWx0aSddLFxuICBteTogWydCdXJtZXNlJywgJ015YW5tYXNhJ10sXG4gIG5hOiBbJ05hdXJ1YW4nLCAnRG9yZXJpbiBOYW9lcm8nXSxcbiAgbmQ6IFsnTm9ydGggTmRlYmVsZScsICdTaW5kZWJlbGUnXSxcbiAgbmU6IFsnTmVwYWxpJywgJ+CkqOClh+CkquCkvuCksuClgCddLFxuICBuZzogWydOZG9uZ2EnLCAnT3NoaXdhbWJvJ10sXG4gIG5sOiBbJ0R1dGNoJywgJ05lZGVybGFuZHMnXSxcbiAgbm46IFsnTm9yd2VnaWFuIE55bm9yc2snLCAnTm9yc2sgKG55bm9yc2spJ10sXG4gIG5vOiBbJ05vcndlZ2lhbicsICdOb3JzayAoYm9rbcOlbCAvIHJpa3Ntw6VsKSddLFxuICBucjogWydTb3V0aCBOZGViZWxlJywgJ2lzaU5kZWJlbGUnXSxcbiAgbnY6IFsnTmF2YWpvJywgJ0RpbsOpIGJpemFhZCddLFxuICBueTogWydDaGljaGV3YScsICdDaGktQ2hld2EnXSxcbiAgb2M6IFsnT2NjaXRhbicsICdPY2NpdGFuJ10sXG4gIG9qOiBbJ09qaWJ3YScsICfhkIrhk4LhlJHhk4jhkK/hkqfhkI7hk5AgLyBBbmlzaGluYWFiZW1vd2luJ10sXG4gIG9tOiBbJ09yb21vJywgJ09yb21vbyddLFxuICBvcjogWydPcml5YScsICfgrJPgrKHgrLzgrL/grIYnXSxcbiAgb3M6IFsnT3NzZXRpYW4gLyBPc3NldGljJywgJ9CY0YDQvtC90LDRgyddLFxuICBwYTogWydQYW5qYWJpIC8gUHVuamFiaScsICfgqKrgqbDgqJzgqL7gqKzgqYAgLyDgpKrgpILgpJzgpL7gpKzgpYAgLyDZvtmG2KzYp9io2YonXSxcbiAgcGk6IFsnUGFsaScsICdQxIFsaSAvIOCkquCkvuCktOCkvyddLFxuICBwbDogWydQb2xpc2gnLCAnUG9sc2tpJ10sXG4gIHBzOiBbJ1Bhc2h0bycsICfZvtqa2KrZiCddLFxuICBwdDogWydQb3J0dWd1ZXNlJywgJ1BvcnR1Z3XDqnMnXSxcbiAgcXU6IFsnUXVlY2h1YScsICdSdW5hIFNpbWknXSxcbiAgcm06IFsnUmFldG8gUm9tYW5jZScsICdSdW1hbnRzY2gnXSxcbiAgcm46IFsnS2lydW5kaScsICdLaXJ1bmRpJ10sXG4gIHJvOiBbJ1JvbWFuaWFuJywgJ1JvbcOibsSDJ10sXG4gIHJ1OiBbJ1J1c3NpYW4nLCAn0KDRg9GB0YHQutC40LknXSxcbiAgcnc6IFsnUndhbmRpJywgJ0tpbnlhcndhbmRpJ10sXG4gIHNhOiBbJ1NhbnNrcml0JywgJ+CkuOCkguCkuOCljeCkleClg+CkpOCkruCljSddLFxuICBzYzogWydTYXJkaW5pYW4nLCAnU2FyZHUnXSxcbiAgc2Q6IFsnU2luZGhpJywgJ+CkuOCkv+CkqOCkp+CkvyddLFxuICBzZTogWydOb3J0aGVybiBTYW1pJywgJ1PDoW1lZ2llbGxhJ10sXG4gIHNnOiBbJ1NhbmdvJywgJ1PDpG5nw7YnXSxcbiAgc2g6IFsnU2VyYm8tQ3JvYXRpYW4nLCAnU3Jwc2tvaHJ2YXRza2kgLyDQodGA0L/RgdC60L7RhdGA0LLQsNGC0YHQutC4J10sXG4gIHNpOiBbJ1NpbmhhbGVzZScsICfgt4Pgt5LgtoLgt4Tgtr0nXSxcbiAgc2s6IFsnU2xvdmFrJywgJ1Nsb3ZlbsSNaW5hJ10sXG4gIHNsOiBbJ1Nsb3ZlbmlhbicsICdTbG92ZW7FocSNaW5hJ10sXG4gIHNtOiBbJ1NhbW9hbicsICdHYWdhbmEgU2Ftb2EnXSxcbiAgc246IFsnU2hvbmEnLCAnY2hpU2hvbmEnXSxcbiAgc286IFsnU29tYWxpYScsICdTb29tYWFsaWdhJ10sXG4gIHNxOiBbJ0FsYmFuaWFuJywgJ1NocWlwJ10sXG4gIHNyOiBbJ1NlcmJpYW4nLCAn0KHRgNC/0YHQutC4J10sXG4gIHNzOiBbJ1N3YXRpJywgJ1NpU3dhdGknXSxcbiAgc3Q6IFsnU291dGhlcm4gU290aG8nLCAnU2Vzb3RobyddLFxuICBzdTogWydTdW5kYW5lc2UnLCAnQmFzYSBTdW5kYSddLFxuICBzdjogWydTd2VkaXNoJywgJ1N2ZW5za2EnXSxcbiAgc3c6IFsnU3dhaGlsaScsICdLaXN3YWhpbGknXSxcbiAgdGE6IFsnVGFtaWwnLCAn4K6k4K6u4K6/4K604K+NJ10sXG4gIHRlOiBbJ1RlbHVndScsICfgsKTgsYbgsLLgsYHgsJfgsYEnXSxcbiAgdGc6IFsnVGFqaWsnLCAn0KLQvtK30LjQutOjJ10sXG4gIHRoOiBbJ1RoYWknLCAn4LmE4LiX4LiiIC8gUGhhc2EgVGhhaSddLFxuICB0aTogWydUaWdyaW55YScsICfhibXhjI3hiK3hipsnXSxcbiAgdGs6IFsnVHVya21lbicsICfQotGD0YDQutC80LXQvSAvINiq2LHZg9mF2YYnXSxcbiAgdGw6IFsnVGFnYWxvZyAvIEZpbGlwaW5vJywgJ1RhZ2Fsb2cnXSxcbiAgdG46IFsnVHN3YW5hJywgJ1NldHN3YW5hJ10sXG4gIHRvOiBbJ1RvbmdhJywgJ0xlYSBGYWthLVRvbmdhJ10sXG4gIHRyOiBbJ1R1cmtpc2gnLCAnVMO8cmvDp2UnXSxcbiAgdHM6IFsnVHNvbmdhJywgJ1hpdHNvbmdhJ10sXG4gIHR0OiBbJ1RhdGFyJywgJ1RhdGFyw6dhJ10sXG4gIHR3OiBbJ1R3aScsICdUd2knXSxcbiAgdHk6IFsnVGFoaXRpYW4nLCAnUmVvIE3EgWBvaGknXSxcbiAgdWc6IFsnVXlnaHVyJywgJ1V5xqN1cnHJmSAvINim24fZiti624fYsdqG25UnXSxcbiAgdWs6IFsnVWtyYWluaWFuJywgJ9Cj0LrRgNCw0ZfQvdGB0YzQutCwJ10sXG4gIHVyOiBbJ1VyZHUnLCAn2KfYsdiv2YgnXSxcbiAgdXo6IFsnVXpiZWsnLCAn0I7Qt9Cx0LXQuiddLFxuICB2ZTogWydWZW5kYScsICdUc2hpdmVu4biTYSddLFxuICB2aTogWydWaWV0bmFtZXNlJywgJ1Rp4bq/bmcgVmnhu4d0J10sXG4gIHZvOiBbJ1ZvbGFww7xrJywgJ1ZvbGFww7xrJ10sXG4gIHdhOiBbJ1dhbGxvb24nLCAnV2Fsb24nXSxcbiAgd286IFsnV29sb2YnLCAnV29sbG9mJ10sXG4gIHhoOiBbJ1hob3NhJywgJ2lzaVhob3NhJ10sXG4gIHlpOiBbJ1lpZGRpc2gnLCAn15nXmda015PXmdepJ10sXG4gIHlvOiBbJ1lvcnViYScsICdZb3LDuWLDoSddLFxuICB6YTogWydaaHVhbmcnLCAnQ3VlbmdoIC8gVMO0w7QgLyDlo67or60nXSxcbiAgemg6IFsnQ2hpbmVzZScsICfkuK3mlocnXSxcbiAgenU6IFsnWnVsdScsICdpc2ladWx1J10sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBMQU5HVUFHRVM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2TEE7QUEwTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/languages.js\n"); - -/***/ }), - -/***/ "../ui/constants/licenses.js": -/*!***********************************!*\ - !*** ../ui/constants/licenses.js ***! - \***********************************/ -/*! exports provided: CC_LICENSES, LEGACY_CC_LICENSES, NONE, PUBLIC_DOMAIN, OTHER, COPYRIGHT */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CC_LICENSES\", function() { return CC_LICENSES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LEGACY_CC_LICENSES\", function() { return LEGACY_CC_LICENSES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NONE\", function() { return NONE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLIC_DOMAIN\", function() { return PUBLIC_DOMAIN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OTHER\", function() { return OTHER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COPYRIGHT\", function() { return COPYRIGHT; });\nvar CC_LICENSES = [{\n value: 'Creative Commons Attribution 4.0 International',\n url: 'https://creativecommons.org/licenses/by/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nd/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode'\n}];\nvar LEGACY_CC_LICENSES = [{\n value: 'Creative Commons Attribution 3.0',\n url: 'https://creativecommons.org/licenses/by/3.0/legalcode'\n}];\nvar NONE = 'None';\nvar PUBLIC_DOMAIN = 'Public Domain';\nvar OTHER = 'other';\nvar COPYRIGHT = 'copyright';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL2xpY2Vuc2VzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9saWNlbnNlcy5qcz8zZTEzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDQ19MSUNFTlNFUyA9IFtcbiAge1xuICAgIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCcsXG4gICAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9sZWdhbGNvZGUnLFxuICB9LFxuICB7XG4gICAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwnLFxuICAgIHVybDogJ2h0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvbGVnYWxjb2RlJyxcbiAgfSxcbiAge1xuICAgIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob0Rlcml2YXRpdmVzIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmQvNC4wL2xlZ2FsY29kZScsXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogJ0NyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCA0LjAgSW50ZXJuYXRpb25hbCcsXG4gICAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLzQuMC9sZWdhbGNvZGUnLFxuICB9LFxuICB7XG4gICAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCcsXG4gICAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9sZWdhbGNvZGUnLFxuICB9LFxuICB7XG4gICAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCcsXG4gICAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC9sZWdhbGNvZGUnLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IExFR0FDWV9DQ19MSUNFTlNFUyA9IFtcbiAge1xuICAgIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjAnLFxuICAgIHVybDogJ2h0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvbGVnYWxjb2RlJyxcbiAgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBOT05FID0gJ05vbmUnO1xuZXhwb3J0IGNvbnN0IFBVQkxJQ19ET01BSU4gPSAnUHVibGljIERvbWFpbic7XG5leHBvcnQgY29uc3QgT1RIRVIgPSAnb3RoZXInO1xuZXhwb3J0IGNvbnN0IENPUFlSSUdIVCA9ICdjb3B5cmlnaHQnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBTUE7QUFFQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/constants/licenses.js\n"); - -/***/ }), - -/***/ "../ui/constants/modal_types.js": -/*!**************************************!*\ - !*** ../ui/constants/modal_types.js ***! - \**************************************/ -/*! exports provided: CONFIRM_FILE_REMOVE, CONFIRM_EXTERNAL_RESOURCE, COMMENT_ACKNOWEDGEMENT, INCOMPATIBLE_DAEMON, FILE_TIMEOUT, DOWNLOADING, AUTO_GENERATE_THUMBNAIL, AUTO_UPDATE_DOWNLOADED, ERROR, UPGRADE, WELCOME, EMAIL_COLLECTION, PHONE_COLLECTION, FIRST_REWARD, AUTHENTICATION_FAILURE, TRANSACTION_FAILED, REWARD_GENERATED_CODE, AFFIRM_PURCHASE, CONFIRM_CLAIM_REVOKE, FIRST_SUBSCRIPTION, SEND_TIP, SOCIAL_SHARE, PUBLISH, SEARCH, CONFIRM_TRANSACTION, CONFIRM_THUMBNAIL_UPLOAD, WALLET_ENCRYPT, WALLET_DECRYPT, WALLET_UNLOCK, WALLET_SYNC, WALLET_PASSWORD_UNSAVE, WALLET_SEND, WALLET_RECEIVE, CREATE_CHANNEL, YOUTUBE_WELCOME, MOBILE_NAVIGATION, SET_REFERRER, REPOST, SIGN_OUT, LIQUIDATE_SUPPORTS */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONFIRM_FILE_REMOVE\", function() { return CONFIRM_FILE_REMOVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONFIRM_EXTERNAL_RESOURCE\", function() { return CONFIRM_EXTERNAL_RESOURCE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COMMENT_ACKNOWEDGEMENT\", function() { return COMMENT_ACKNOWEDGEMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INCOMPATIBLE_DAEMON\", function() { return INCOMPATIBLE_DAEMON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_TIMEOUT\", function() { return FILE_TIMEOUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADING\", function() { return DOWNLOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_GENERATE_THUMBNAIL\", function() { return AUTO_GENERATE_THUMBNAIL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_UPDATE_DOWNLOADED\", function() { return AUTO_UPDATE_DOWNLOADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ERROR\", function() { return ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPGRADE\", function() { return UPGRADE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WELCOME\", function() { return WELCOME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EMAIL_COLLECTION\", function() { return EMAIL_COLLECTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PHONE_COLLECTION\", function() { return PHONE_COLLECTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FIRST_REWARD\", function() { return FIRST_REWARD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTHENTICATION_FAILURE\", function() { return AUTHENTICATION_FAILURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TRANSACTION_FAILED\", function() { return TRANSACTION_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REWARD_GENERATED_CODE\", function() { return REWARD_GENERATED_CODE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AFFIRM_PURCHASE\", function() { return AFFIRM_PURCHASE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONFIRM_CLAIM_REVOKE\", function() { return CONFIRM_CLAIM_REVOKE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FIRST_SUBSCRIPTION\", function() { return FIRST_SUBSCRIPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEND_TIP\", function() { return SEND_TIP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SOCIAL_SHARE\", function() { return SOCIAL_SHARE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PUBLISH\", function() { return PUBLISH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH\", function() { return SEARCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONFIRM_TRANSACTION\", function() { return CONFIRM_TRANSACTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CONFIRM_THUMBNAIL_UPLOAD\", function() { return CONFIRM_THUMBNAIL_UPLOAD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_ENCRYPT\", function() { return WALLET_ENCRYPT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_DECRYPT\", function() { return WALLET_DECRYPT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_UNLOCK\", function() { return WALLET_UNLOCK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_SYNC\", function() { return WALLET_SYNC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_PASSWORD_UNSAVE\", function() { return WALLET_PASSWORD_UNSAVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_SEND\", function() { return WALLET_SEND; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WALLET_RECEIVE\", function() { return WALLET_RECEIVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CREATE_CHANNEL\", function() { return CREATE_CHANNEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"YOUTUBE_WELCOME\", function() { return YOUTUBE_WELCOME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MOBILE_NAVIGATION\", function() { return MOBILE_NAVIGATION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_REFERRER\", function() { return SET_REFERRER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REPOST\", function() { return REPOST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SIGN_OUT\", function() { return SIGN_OUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LIQUIDATE_SUPPORTS\", function() { return LIQUIDATE_SUPPORTS; });\nvar CONFIRM_FILE_REMOVE = 'confirm_file_remove';\nvar CONFIRM_EXTERNAL_RESOURCE = 'confirm_external_resource';\nvar COMMENT_ACKNOWEDGEMENT = 'comment_acknowlegement';\nvar INCOMPATIBLE_DAEMON = 'incompatible_daemon';\nvar FILE_TIMEOUT = 'file_timeout';\nvar DOWNLOADING = 'downloading';\nvar AUTO_GENERATE_THUMBNAIL = 'auto_generate_thumbnail';\nvar AUTO_UPDATE_DOWNLOADED = 'auto_update_downloaded';\nvar ERROR = 'error';\nvar UPGRADE = 'upgrade';\nvar WELCOME = 'welcome';\nvar EMAIL_COLLECTION = 'email_collection';\nvar PHONE_COLLECTION = 'phone_collection';\nvar FIRST_REWARD = 'first_reward';\nvar AUTHENTICATION_FAILURE = 'auth_failure';\nvar TRANSACTION_FAILED = 'transaction_failed';\nvar REWARD_GENERATED_CODE = 'reward_generated_code';\nvar AFFIRM_PURCHASE = 'affirm_purchase';\nvar CONFIRM_CLAIM_REVOKE = 'confirm_claim_revoke';\nvar FIRST_SUBSCRIPTION = 'firstSubscription';\nvar SEND_TIP = 'send_tip';\nvar SOCIAL_SHARE = 'social_share';\nvar PUBLISH = 'publish';\nvar SEARCH = 'search';\nvar CONFIRM_TRANSACTION = 'confirm_transaction';\nvar CONFIRM_THUMBNAIL_UPLOAD = 'confirm_thumbnail_upload';\nvar WALLET_ENCRYPT = 'wallet_encrypt';\nvar WALLET_DECRYPT = 'wallet_decrypt';\nvar WALLET_UNLOCK = 'wallet_unlock';\nvar WALLET_SYNC = 'wallet_sync';\nvar WALLET_PASSWORD_UNSAVE = 'wallet_password_unsave';\nvar WALLET_SEND = 'wallet_send';\nvar WALLET_RECEIVE = 'wallet_receive';\nvar CREATE_CHANNEL = 'create_channel';\nvar YOUTUBE_WELCOME = 'youtube_welcome';\nvar MOBILE_NAVIGATION = 'mobile_navigation';\nvar SET_REFERRER = 'set_referrer';\nvar REPOST = 'repost';\nvar SIGN_OUT = 'sign_out';\nvar LIQUIDATE_SUPPORTS = 'liquidate_supports';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL21vZGFsX3R5cGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9tb2RhbF90eXBlcy5qcz84YzVmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDT05GSVJNX0ZJTEVfUkVNT1ZFID0gJ2NvbmZpcm1fZmlsZV9yZW1vdmUnO1xuZXhwb3J0IGNvbnN0IENPTkZJUk1fRVhURVJOQUxfUkVTT1VSQ0UgPSAnY29uZmlybV9leHRlcm5hbF9yZXNvdXJjZSc7XG5leHBvcnQgY29uc3QgQ09NTUVOVF9BQ0tOT1dFREdFTUVOVCA9ICdjb21tZW50X2Fja25vd2xlZ2VtZW50JztcbmV4cG9ydCBjb25zdCBJTkNPTVBBVElCTEVfREFFTU9OID0gJ2luY29tcGF0aWJsZV9kYWVtb24nO1xuZXhwb3J0IGNvbnN0IEZJTEVfVElNRU9VVCA9ICdmaWxlX3RpbWVvdXQnO1xuZXhwb3J0IGNvbnN0IERPV05MT0FESU5HID0gJ2Rvd25sb2FkaW5nJztcbmV4cG9ydCBjb25zdCBBVVRPX0dFTkVSQVRFX1RIVU1CTkFJTCA9ICdhdXRvX2dlbmVyYXRlX3RodW1ibmFpbCc7XG5leHBvcnQgY29uc3QgQVVUT19VUERBVEVfRE9XTkxPQURFRCA9ICdhdXRvX3VwZGF0ZV9kb3dubG9hZGVkJztcbmV4cG9ydCBjb25zdCBFUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgVVBHUkFERSA9ICd1cGdyYWRlJztcbmV4cG9ydCBjb25zdCBXRUxDT01FID0gJ3dlbGNvbWUnO1xuZXhwb3J0IGNvbnN0IEVNQUlMX0NPTExFQ1RJT04gPSAnZW1haWxfY29sbGVjdGlvbic7XG5leHBvcnQgY29uc3QgUEhPTkVfQ09MTEVDVElPTiA9ICdwaG9uZV9jb2xsZWN0aW9uJztcbmV4cG9ydCBjb25zdCBGSVJTVF9SRVdBUkQgPSAnZmlyc3RfcmV3YXJkJztcbmV4cG9ydCBjb25zdCBBVVRIRU5USUNBVElPTl9GQUlMVVJFID0gJ2F1dGhfZmFpbHVyZSc7XG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fRkFJTEVEID0gJ3RyYW5zYWN0aW9uX2ZhaWxlZCc7XG5leHBvcnQgY29uc3QgUkVXQVJEX0dFTkVSQVRFRF9DT0RFID0gJ3Jld2FyZF9nZW5lcmF0ZWRfY29kZSc7XG5leHBvcnQgY29uc3QgQUZGSVJNX1BVUkNIQVNFID0gJ2FmZmlybV9wdXJjaGFzZSc7XG5leHBvcnQgY29uc3QgQ09ORklSTV9DTEFJTV9SRVZPS0UgPSAnY29uZmlybV9jbGFpbV9yZXZva2UnO1xuZXhwb3J0IGNvbnN0IEZJUlNUX1NVQlNDUklQVElPTiA9ICdmaXJzdFN1YnNjcmlwdGlvbic7XG5leHBvcnQgY29uc3QgU0VORF9USVAgPSAnc2VuZF90aXAnO1xuZXhwb3J0IGNvbnN0IFNPQ0lBTF9TSEFSRSA9ICdzb2NpYWxfc2hhcmUnO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0ggPSAncHVibGlzaCc7XG5leHBvcnQgY29uc3QgU0VBUkNIID0gJ3NlYXJjaCc7XG5leHBvcnQgY29uc3QgQ09ORklSTV9UUkFOU0FDVElPTiA9ICdjb25maXJtX3RyYW5zYWN0aW9uJztcbmV4cG9ydCBjb25zdCBDT05GSVJNX1RIVU1CTkFJTF9VUExPQUQgPSAnY29uZmlybV90aHVtYm5haWxfdXBsb2FkJztcbmV4cG9ydCBjb25zdCBXQUxMRVRfRU5DUllQVCA9ICd3YWxsZXRfZW5jcnlwdCc7XG5leHBvcnQgY29uc3QgV0FMTEVUX0RFQ1JZUFQgPSAnd2FsbGV0X2RlY3J5cHQnO1xuZXhwb3J0IGNvbnN0IFdBTExFVF9VTkxPQ0sgPSAnd2FsbGV0X3VubG9jayc7XG5leHBvcnQgY29uc3QgV0FMTEVUX1NZTkMgPSAnd2FsbGV0X3N5bmMnO1xuZXhwb3J0IGNvbnN0IFdBTExFVF9QQVNTV09SRF9VTlNBVkUgPSAnd2FsbGV0X3Bhc3N3b3JkX3Vuc2F2ZSc7XG5leHBvcnQgY29uc3QgV0FMTEVUX1NFTkQgPSAnd2FsbGV0X3NlbmQnO1xuZXhwb3J0IGNvbnN0IFdBTExFVF9SRUNFSVZFID0gJ3dhbGxldF9yZWNlaXZlJztcbmV4cG9ydCBjb25zdCBDUkVBVEVfQ0hBTk5FTCA9ICdjcmVhdGVfY2hhbm5lbCc7XG5leHBvcnQgY29uc3QgWU9VVFVCRV9XRUxDT01FID0gJ3lvdXR1YmVfd2VsY29tZSc7XG5leHBvcnQgY29uc3QgTU9CSUxFX05BVklHQVRJT04gPSAnbW9iaWxlX25hdmlnYXRpb24nO1xuZXhwb3J0IGNvbnN0IFNFVF9SRUZFUlJFUiA9ICdzZXRfcmVmZXJyZXInO1xuZXhwb3J0IGNvbnN0IFJFUE9TVCA9ICdyZXBvc3QnO1xuZXhwb3J0IGNvbnN0IFNJR05fT1VUID0gJ3NpZ25fb3V0JztcbmV4cG9ydCBjb25zdCBMSVFVSURBVEVfU1VQUE9SVFMgPSAnbGlxdWlkYXRlX3N1cHBvcnRzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/modal_types.js\n"); - -/***/ }), - -/***/ "../ui/constants/pages.js": -/*!********************************!*\ - !*** ../ui/constants/pages.js ***! - \********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("exports.AUTH = 'signin';\nexports.AUTH_VERIFY = 'verify';\nexports.BACKUP = 'backup';\nexports.CHANNEL = 'channel';\nexports.DISCOVER = 'discover';\nexports.HOME = 'home';\nexports.DOWNLOADED = 'downloaded';\nexports.HELP = 'help';\nexports.LIBRARY = 'library';\nexports.INVITE = 'invite';\nexports.PUBLISH = 'publish';\nexports.PUBLISHED = 'published';\nexports.GET_CREDITS = 'getcredits';\nexports.REPORT = 'report';\nexports.REWARDS = 'rewards';\nexports.SEND = 'send';\nexports.SETTINGS = 'settings';\nexports.SHOW = 'show';\nexports.ACCOUNT = 'account';\nexports.SEARCH = 'search';\nexports.TRANSACTIONS = 'transactions';\nexports.TAGS_FOLLOWING = 'tags';\nexports.DEPRECATED__TAGS_FOLLOWING = 'following/tags';\nexports.TAGS_FOLLOWING_MANAGE = 'tags/manage';\nexports.DEPRECATED__TAGS_FOLLOWING_MANAGE = 'tags/following/manage';\nexports.DEPRECATED__CHANNELS_FOLLOWING = 'following/channels';\nexports.CHANNELS_FOLLOWING = 'following';\nexports.DEPRECATED__CHANNELS_FOLLOWING_MANAGE = 'following/channels/manage';\nexports.CHANNELS_FOLLOWING_DISCOVER = 'following/discover';\nexports.WALLET = 'wallet';\nexports.BLOCKED = 'blocked';\nexports.CHANNELS = 'channels';\nexports.EMBED = 'embed';\nexports.TOP = 'top';\nexports.WELCOME = 'welcome';\nexports.CREATOR_DASHBOARD = 'dashboard';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3BhZ2VzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9wYWdlcy5qcz83NWUyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuQVVUSCA9ICdzaWduaW4nO1xuZXhwb3J0cy5BVVRIX1ZFUklGWSA9ICd2ZXJpZnknO1xuZXhwb3J0cy5CQUNLVVAgPSAnYmFja3VwJztcbmV4cG9ydHMuQ0hBTk5FTCA9ICdjaGFubmVsJztcbmV4cG9ydHMuRElTQ09WRVIgPSAnZGlzY292ZXInO1xuZXhwb3J0cy5IT01FID0gJ2hvbWUnO1xuZXhwb3J0cy5ET1dOTE9BREVEID0gJ2Rvd25sb2FkZWQnO1xuZXhwb3J0cy5IRUxQID0gJ2hlbHAnO1xuZXhwb3J0cy5MSUJSQVJZID0gJ2xpYnJhcnknO1xuZXhwb3J0cy5JTlZJVEUgPSAnaW52aXRlJztcbmV4cG9ydHMuUFVCTElTSCA9ICdwdWJsaXNoJztcbmV4cG9ydHMuUFVCTElTSEVEID0gJ3B1Ymxpc2hlZCc7XG5leHBvcnRzLkdFVF9DUkVESVRTID0gJ2dldGNyZWRpdHMnO1xuZXhwb3J0cy5SRVBPUlQgPSAncmVwb3J0JztcbmV4cG9ydHMuUkVXQVJEUyA9ICdyZXdhcmRzJztcbmV4cG9ydHMuU0VORCA9ICdzZW5kJztcbmV4cG9ydHMuU0VUVElOR1MgPSAnc2V0dGluZ3MnO1xuZXhwb3J0cy5TSE9XID0gJ3Nob3cnO1xuZXhwb3J0cy5BQ0NPVU5UID0gJ2FjY291bnQnO1xuZXhwb3J0cy5TRUFSQ0ggPSAnc2VhcmNoJztcbmV4cG9ydHMuVFJBTlNBQ1RJT05TID0gJ3RyYW5zYWN0aW9ucyc7XG5leHBvcnRzLlRBR1NfRk9MTE9XSU5HID0gJ3RhZ3MnO1xuZXhwb3J0cy5ERVBSRUNBVEVEX19UQUdTX0ZPTExPV0lORyA9ICdmb2xsb3dpbmcvdGFncyc7XG5leHBvcnRzLlRBR1NfRk9MTE9XSU5HX01BTkFHRSA9ICd0YWdzL21hbmFnZSc7XG5leHBvcnRzLkRFUFJFQ0FURURfX1RBR1NfRk9MTE9XSU5HX01BTkFHRSA9ICd0YWdzL2ZvbGxvd2luZy9tYW5hZ2UnO1xuZXhwb3J0cy5ERVBSRUNBVEVEX19DSEFOTkVMU19GT0xMT1dJTkcgPSAnZm9sbG93aW5nL2NoYW5uZWxzJztcbmV4cG9ydHMuQ0hBTk5FTFNfRk9MTE9XSU5HID0gJ2ZvbGxvd2luZyc7XG5leHBvcnRzLkRFUFJFQ0FURURfX0NIQU5ORUxTX0ZPTExPV0lOR19NQU5BR0UgPSAnZm9sbG93aW5nL2NoYW5uZWxzL21hbmFnZSc7XG5leHBvcnRzLkNIQU5ORUxTX0ZPTExPV0lOR19ESVNDT1ZFUiA9ICdmb2xsb3dpbmcvZGlzY292ZXInO1xuZXhwb3J0cy5XQUxMRVQgPSAnd2FsbGV0JztcbmV4cG9ydHMuQkxPQ0tFRCA9ICdibG9ja2VkJztcbmV4cG9ydHMuQ0hBTk5FTFMgPSAnY2hhbm5lbHMnO1xuZXhwb3J0cy5FTUJFRCA9ICdlbWJlZCc7XG5leHBvcnRzLlRPUCA9ICd0b3AnO1xuZXhwb3J0cy5XRUxDT01FID0gJ3dlbGNvbWUnO1xuZXhwb3J0cy5DUkVBVE9SX0RBU0hCT0FSRCA9ICdkYXNoYm9hcmQnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/pages.js\n"); - -/***/ }), - -/***/ "../ui/constants/search.js": -/*!*********************************!*\ - !*** ../ui/constants/search.js ***! - \*********************************/ -/*! exports provided: FILE, CHANNEL, SEARCH, DEBOUNCE_WAIT_DURATION_MS */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE\", function() { return FILE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL\", function() { return CHANNEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SEARCH\", function() { return SEARCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DEBOUNCE_WAIT_DURATION_MS\", function() { return DEBOUNCE_WAIT_DURATION_MS; });\nvar FILE = 'file';\nvar CHANNEL = 'channel';\nvar SEARCH = 'search';\nvar DEBOUNCE_WAIT_DURATION_MS = 250;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3NlYXJjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb25zdGFudHMvc2VhcmNoLmpzPzNiNTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEZJTEUgPSAnZmlsZSc7XG5leHBvcnQgY29uc3QgQ0hBTk5FTCA9ICdjaGFubmVsJztcbmV4cG9ydCBjb25zdCBTRUFSQ0ggPSAnc2VhcmNoJztcbmV4cG9ydCBjb25zdCBERUJPVU5DRV9XQUlUX0RVUkFUSU9OX01TID0gMjUwO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/constants/search.js\n"); - -/***/ }), - -/***/ "../ui/constants/settings.js": -/*!***********************************!*\ - !*** ../ui/constants/settings.js ***! - \***********************************/ -/*! exports provided: CREDIT_REQUIRED_ACKNOWLEDGED, NEW_USER_ACKNOWLEDGED, EMAIL_COLLECTION_ACKNOWLEDGED, INVITE_ACKNOWLEDGED, LANGUAGE, SHOW_MATURE, SHOW_ANONYMOUS, SHOW_UNAVAILABLE, INSTANT_PURCHASE_ENABLED, INSTANT_PURCHASE_MAX, THEME, THEMES, AUTOMATIC_DARK_MODE_ENABLED, AUTOPLAY, OS_NOTIFICATIONS_ENABLED, AUTO_DOWNLOAD, AUTO_LAUNCH, SUPPORT_OPTION, HIDE_BALANCE, HIDE_SPLASH_ANIMATION, FLOATING_PLAYER, DARK_MODE_TIMES, ENABLE_SYNC */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CREDIT_REQUIRED_ACKNOWLEDGED\", function() { return CREDIT_REQUIRED_ACKNOWLEDGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NEW_USER_ACKNOWLEDGED\", function() { return NEW_USER_ACKNOWLEDGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EMAIL_COLLECTION_ACKNOWLEDGED\", function() { return EMAIL_COLLECTION_ACKNOWLEDGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INVITE_ACKNOWLEDGED\", function() { return INVITE_ACKNOWLEDGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LANGUAGE\", function() { return LANGUAGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHOW_MATURE\", function() { return SHOW_MATURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHOW_ANONYMOUS\", function() { return SHOW_ANONYMOUS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHOW_UNAVAILABLE\", function() { return SHOW_UNAVAILABLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INSTANT_PURCHASE_ENABLED\", function() { return INSTANT_PURCHASE_ENABLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INSTANT_PURCHASE_MAX\", function() { return INSTANT_PURCHASE_MAX; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"THEME\", function() { return THEME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"THEMES\", function() { return THEMES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTOMATIC_DARK_MODE_ENABLED\", function() { return AUTOMATIC_DARK_MODE_ENABLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTOPLAY\", function() { return AUTOPLAY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OS_NOTIFICATIONS_ENABLED\", function() { return OS_NOTIFICATIONS_ENABLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_DOWNLOAD\", function() { return AUTO_DOWNLOAD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_LAUNCH\", function() { return AUTO_LAUNCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT_OPTION\", function() { return SUPPORT_OPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HIDE_BALANCE\", function() { return HIDE_BALANCE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HIDE_SPLASH_ANIMATION\", function() { return HIDE_SPLASH_ANIMATION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FLOATING_PLAYER\", function() { return FLOATING_PLAYER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DARK_MODE_TIMES\", function() { return DARK_MODE_TIMES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENABLE_SYNC\", function() { return ENABLE_SYNC; });\n/* Many SETTINGS are stored in the localStorage by their name -\n be careful about changing the value of a SETTINGS constant, as doing so can invalidate existing SETTINGS */\nvar CREDIT_REQUIRED_ACKNOWLEDGED = 'credit_required_acknowledged';\nvar NEW_USER_ACKNOWLEDGED = 'welcome_acknowledged';\nvar EMAIL_COLLECTION_ACKNOWLEDGED = 'email_collection_acknowledged';\nvar INVITE_ACKNOWLEDGED = 'invite_acknowledged';\nvar LANGUAGE = 'language';\nvar SHOW_MATURE = 'show_mature';\nvar SHOW_ANONYMOUS = 'show_anonymous';\nvar SHOW_UNAVAILABLE = 'show_unavailable';\nvar INSTANT_PURCHASE_ENABLED = 'instant_purchase_enabled';\nvar INSTANT_PURCHASE_MAX = 'instant_purchase_max';\nvar THEME = 'theme';\nvar THEMES = 'themes';\nvar AUTOMATIC_DARK_MODE_ENABLED = 'automatic_dark_mode_enabled';\nvar AUTOPLAY = 'autoplay';\nvar OS_NOTIFICATIONS_ENABLED = 'os_notifications_enabled';\nvar AUTO_DOWNLOAD = 'auto_download';\nvar AUTO_LAUNCH = 'auto_launch';\nvar SUPPORT_OPTION = 'support_option';\nvar HIDE_BALANCE = 'hide_balance';\nvar HIDE_SPLASH_ANIMATION = 'hide_splash_animation';\nvar FLOATING_PLAYER = 'floating_player';\nvar DARK_MODE_TIMES = 'dark_mode_times';\nvar ENABLE_SYNC = 'enable_sync';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3NldHRpbmdzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy9zZXR0aW5ncy5qcz84YzJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIE1hbnkgU0VUVElOR1MgYXJlIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlIGJ5IHRoZWlyIG5hbWUgLVxuICAgIGJlIGNhcmVmdWwgYWJvdXQgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGEgU0VUVElOR1MgY29uc3RhbnQsIGFzIGRvaW5nIHNvIGNhbiBpbnZhbGlkYXRlIGV4aXN0aW5nIFNFVFRJTkdTICovXG5leHBvcnQgY29uc3QgQ1JFRElUX1JFUVVJUkVEX0FDS05PV0xFREdFRCA9ICdjcmVkaXRfcmVxdWlyZWRfYWNrbm93bGVkZ2VkJztcbmV4cG9ydCBjb25zdCBORVdfVVNFUl9BQ0tOT1dMRURHRUQgPSAnd2VsY29tZV9hY2tub3dsZWRnZWQnO1xuZXhwb3J0IGNvbnN0IEVNQUlMX0NPTExFQ1RJT05fQUNLTk9XTEVER0VEID0gJ2VtYWlsX2NvbGxlY3Rpb25fYWNrbm93bGVkZ2VkJztcbmV4cG9ydCBjb25zdCBJTlZJVEVfQUNLTk9XTEVER0VEID0gJ2ludml0ZV9hY2tub3dsZWRnZWQnO1xuZXhwb3J0IGNvbnN0IExBTkdVQUdFID0gJ2xhbmd1YWdlJztcbmV4cG9ydCBjb25zdCBTSE9XX01BVFVSRSA9ICdzaG93X21hdHVyZSc7XG5leHBvcnQgY29uc3QgU0hPV19BTk9OWU1PVVMgPSAnc2hvd19hbm9ueW1vdXMnO1xuZXhwb3J0IGNvbnN0IFNIT1dfVU5BVkFJTEFCTEUgPSAnc2hvd191bmF2YWlsYWJsZSc7XG5leHBvcnQgY29uc3QgSU5TVEFOVF9QVVJDSEFTRV9FTkFCTEVEID0gJ2luc3RhbnRfcHVyY2hhc2VfZW5hYmxlZCc7XG5leHBvcnQgY29uc3QgSU5TVEFOVF9QVVJDSEFTRV9NQVggPSAnaW5zdGFudF9wdXJjaGFzZV9tYXgnO1xuZXhwb3J0IGNvbnN0IFRIRU1FID0gJ3RoZW1lJztcbmV4cG9ydCBjb25zdCBUSEVNRVMgPSAndGhlbWVzJztcbmV4cG9ydCBjb25zdCBBVVRPTUFUSUNfREFSS19NT0RFX0VOQUJMRUQgPSAnYXV0b21hdGljX2RhcmtfbW9kZV9lbmFibGVkJztcbmV4cG9ydCBjb25zdCBBVVRPUExBWSA9ICdhdXRvcGxheSc7XG5leHBvcnQgY29uc3QgT1NfTk9USUZJQ0FUSU9OU19FTkFCTEVEID0gJ29zX25vdGlmaWNhdGlvbnNfZW5hYmxlZCc7XG5leHBvcnQgY29uc3QgQVVUT19ET1dOTE9BRCA9ICdhdXRvX2Rvd25sb2FkJztcbmV4cG9ydCBjb25zdCBBVVRPX0xBVU5DSCA9ICdhdXRvX2xhdW5jaCc7XG5leHBvcnQgY29uc3QgU1VQUE9SVF9PUFRJT04gPSAnc3VwcG9ydF9vcHRpb24nO1xuZXhwb3J0IGNvbnN0IEhJREVfQkFMQU5DRSA9ICdoaWRlX2JhbGFuY2UnO1xuZXhwb3J0IGNvbnN0IEhJREVfU1BMQVNIX0FOSU1BVElPTiA9ICdoaWRlX3NwbGFzaF9hbmltYXRpb24nO1xuZXhwb3J0IGNvbnN0IEZMT0FUSU5HX1BMQVlFUiA9ICdmbG9hdGluZ19wbGF5ZXInO1xuZXhwb3J0IGNvbnN0IERBUktfTU9ERV9USU1FUyA9ICdkYXJrX21vZGVfdGltZXMnO1xuZXhwb3J0IGNvbnN0IEVOQUJMRV9TWU5DID0gJ2VuYWJsZV9zeW5jJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/constants/settings.js\n"); - -/***/ }), - -/***/ "../ui/constants/subscriptions.js": -/*!****************************************!*\ - !*** ../ui/constants/subscriptions.js ***! - \****************************************/ -/*! exports provided: VIEW_ALL, VIEW_LATEST_FIRST, DOWNLOADING, DOWNLOADED, NOTIFY_ONLY, SUGGESTED_TOP_BID, SUGGESTED_TOP_SUBSCRIBED, SUGGESTED_FEATURED */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VIEW_ALL\", function() { return VIEW_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VIEW_LATEST_FIRST\", function() { return VIEW_LATEST_FIRST; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADING\", function() { return DOWNLOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOWNLOADED\", function() { return DOWNLOADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NOTIFY_ONLY\", function() { return NOTIFY_ONLY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUGGESTED_TOP_BID\", function() { return SUGGESTED_TOP_BID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUGGESTED_TOP_SUBSCRIBED\", function() { return SUGGESTED_TOP_SUBSCRIBED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUGGESTED_FEATURED\", function() { return SUGGESTED_FEATURED; });\nvar VIEW_ALL = 'view_all';\nvar VIEW_LATEST_FIRST = 'view_latest_first'; // Types for unreads\n\nvar DOWNLOADING = 'DOWNLOADING';\nvar DOWNLOADED = 'DOWNLOADED';\nvar NOTIFY_ONLY = 'NOTIFY_ONLY;'; // Suggested types\n\nvar SUGGESTED_TOP_BID = 'top_bid';\nvar SUGGESTED_TOP_SUBSCRIBED = 'top_subscribed';\nvar SUGGESTED_FEATURED = 'featured';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3N1YnNjcmlwdGlvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29uc3RhbnRzL3N1YnNjcmlwdGlvbnMuanM/YmNmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVklFV19BTEwgPSAndmlld19hbGwnO1xuZXhwb3J0IGNvbnN0IFZJRVdfTEFURVNUX0ZJUlNUID0gJ3ZpZXdfbGF0ZXN0X2ZpcnN0JztcblxuLy8gVHlwZXMgZm9yIHVucmVhZHNcbmV4cG9ydCBjb25zdCBET1dOTE9BRElORyA9ICdET1dOTE9BRElORyc7XG5leHBvcnQgY29uc3QgRE9XTkxPQURFRCA9ICdET1dOTE9BREVEJztcbmV4cG9ydCBjb25zdCBOT1RJRllfT05MWSA9ICdOT1RJRllfT05MWTsnO1xuXG4vLyBTdWdnZXN0ZWQgdHlwZXNcbmV4cG9ydCBjb25zdCBTVUdHRVNURURfVE9QX0JJRCA9ICd0b3BfYmlkJztcbmV4cG9ydCBjb25zdCBTVUdHRVNURURfVE9QX1NVQlNDUklCRUQgPSAndG9wX3N1YnNjcmliZWQnO1xuZXhwb3J0IGNvbnN0IFNVR0dFU1RFRF9GRUFUVVJFRCA9ICdmZWF0dXJlZCc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/subscriptions.js\n"); - -/***/ }), - -/***/ "../ui/constants/supported_languages.js": -/*!**********************************************!*\ - !*** ../ui/constants/supported_languages.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./languages */ \"../ui/constants/languages.js\");\n\nvar SUPPORTED_LANGUAGES = {\n en: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].en[1],\n da: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].da[1],\n zh: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].zh[1],\n hr: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hr[1],\n nl: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].nl[1],\n fr: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fr[1],\n de: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].de[1],\n gu: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].gu[1],\n hi: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hi[1],\n id: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].id[1],\n jv: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].jv[1],\n it: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].it[1],\n ms: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ms[1],\n ml: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ml[1],\n mr: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mr[1],\n pa: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pa[1],\n pl: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pl[1],\n pt: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pt[1],\n ro: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ro[1],\n ru: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ru[1],\n sr: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].sr[1],\n sk: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].sk[1],\n ur: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ur[1],\n es: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].es[1],\n sv: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].sv[1],\n tr: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].tr[1],\n cs: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].cs[1],\n kn: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].kn[1],\n uk: _languages__WEBPACK_IMPORTED_MODULE_0__[\"default\"].uk[1]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (SUPPORTED_LANGUAGES);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3N1cHBvcnRlZF9sYW5ndWFnZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvY29uc3RhbnRzL3N1cHBvcnRlZF9sYW5ndWFnZXMuanM/NjhhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTEFOR1VBR0VTIGZyb20gJy4vbGFuZ3VhZ2VzJztcblxuY29uc3QgU1VQUE9SVEVEX0xBTkdVQUdFUyA9IHtcbiAgZW46IExBTkdVQUdFUy5lblsxXSxcbiAgZGE6IExBTkdVQUdFUy5kYVsxXSxcbiAgemg6IExBTkdVQUdFUy56aFsxXSxcbiAgaHI6IExBTkdVQUdFUy5oclsxXSxcbiAgbmw6IExBTkdVQUdFUy5ubFsxXSxcbiAgZnI6IExBTkdVQUdFUy5mclsxXSxcbiAgZGU6IExBTkdVQUdFUy5kZVsxXSxcbiAgZ3U6IExBTkdVQUdFUy5ndVsxXSxcbiAgaGk6IExBTkdVQUdFUy5oaVsxXSxcbiAgaWQ6IExBTkdVQUdFUy5pZFsxXSxcbiAganY6IExBTkdVQUdFUy5qdlsxXSxcbiAgaXQ6IExBTkdVQUdFUy5pdFsxXSxcbiAgbXM6IExBTkdVQUdFUy5tc1sxXSxcbiAgbWw6IExBTkdVQUdFUy5tbFsxXSxcbiAgbXI6IExBTkdVQUdFUy5tclsxXSxcbiAgcGE6IExBTkdVQUdFUy5wYVsxXSxcbiAgcGw6IExBTkdVQUdFUy5wbFsxXSxcbiAgcHQ6IExBTkdVQUdFUy5wdFsxXSxcbiAgcm86IExBTkdVQUdFUy5yb1sxXSxcbiAgcnU6IExBTkdVQUdFUy5ydVsxXSxcbiAgc3I6IExBTkdVQUdFUy5zclsxXSxcbiAgc2s6IExBTkdVQUdFUy5za1sxXSxcbiAgdXI6IExBTkdVQUdFUy51clsxXSxcbiAgZXM6IExBTkdVQUdFUy5lc1sxXSxcbiAgc3Y6IExBTkdVQUdFUy5zdlsxXSxcbiAgdHI6IExBTkdVQUdFUy50clsxXSxcbiAgY3M6IExBTkdVQUdFUy5jc1sxXSxcbiAga246IExBTkdVQUdFUy5rblsxXSxcbiAgdWs6IExBTkdVQUdFUy51a1sxXSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNVUFBPUlRFRF9MQU5HVUFHRVM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdCQTtBQWdDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/constants/supported_languages.js\n"); - -/***/ }), - -/***/ "../ui/constants/themes.js": -/*!*********************************!*\ - !*** ../ui/constants/themes.js ***! - \*********************************/ -/*! exports provided: DARK_THEME, LIGHT_THEME */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DARK_THEME\", function() { return DARK_THEME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LIGHT_THEME\", function() { return LIGHT_THEME; });\n// css theme values\n// saved in settings and found at /static/themes/{theme}.css\nvar DARK_THEME = 'dark';\nvar LIGHT_THEME = 'light';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3RoZW1lcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9jb25zdGFudHMvdGhlbWVzLmpzPzM4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY3NzIHRoZW1lIHZhbHVlc1xuLy8gc2F2ZWQgaW4gc2V0dGluZ3MgYW5kIGZvdW5kIGF0IC9zdGF0aWMvdGhlbWVzL3t0aGVtZX0uY3NzXG5leHBvcnQgY29uc3QgREFSS19USEVNRSA9ICdkYXJrJztcbmV4cG9ydCBjb25zdCBMSUdIVF9USEVNRSA9ICdsaWdodCc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/constants/themes.js\n"); - -/***/ }), - -/***/ "../ui/constants/token.js": -/*!********************************!*\ - !*** ../ui/constants/token.js ***! - \********************************/ -/*! exports provided: X_LBRY_AUTH_TOKEN */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"X_LBRY_AUTH_TOKEN\", function() { return X_LBRY_AUTH_TOKEN; });\nvar X_LBRY_AUTH_TOKEN = 'X-Lbry-Auth-Token';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3Rva2VuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy90b2tlbi5qcz9jY2Q1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBYX0xCUllfQVVUSF9UT0tFTiA9ICdYLUxicnktQXV0aC1Ub2tlbic7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/constants/token.js\n"); - -/***/ }), - -/***/ "../ui/constants/transaction_types.js": -/*!********************************************!*\ - !*** ../ui/constants/transaction_types.js ***! - \********************************************/ -/*! exports provided: TIP, SUPPORT, CHANNEL, UPDATE */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TIP\", function() { return TIP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SUPPORT\", function() { return SUPPORT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL\", function() { return CHANNEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE\", function() { return UPDATE; });\nvar TIP = 'tip';\nvar SUPPORT = 'support';\nvar CHANNEL = 'channel';\nvar UPDATE = 'update';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvY29uc3RhbnRzL3RyYW5zYWN0aW9uX3R5cGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2NvbnN0YW50cy90cmFuc2FjdGlvbl90eXBlcy5qcz9lZDRjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBUSVAgPSAndGlwJztcbmV4cG9ydCBjb25zdCBTVVBQT1JUID0gJ3N1cHBvcnQnO1xuZXhwb3J0IGNvbnN0IENIQU5ORUwgPSAnY2hhbm5lbCc7XG5leHBvcnQgY29uc3QgVVBEQVRFID0gJ3VwZGF0ZSc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/constants/transaction_types.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-combined-refs.js": -/*!******************************************!*\ - !*** ../ui/effects/use-combined-refs.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useCombinedRefs; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction useCombinedRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n var targetRef = react__WEBPACK_IMPORTED_MODULE_0___default.a.useRef();\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n refs.forEach(function (ref) {\n if (!ref) return;\n\n if (typeof ref === 'function') {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n });\n }, [refs]);\n return targetRef;\n}\n/*\nProblem described in\nhttps://itnext.io/reusing-the-ref-from-forwardref-with-react-hooks-4ce9df693dd\n *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtY29tYmluZWQtcmVmcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9lZmZlY3RzL3VzZS1jb21iaW5lZC1yZWZzLmpzPzgyYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKC4uLnJlZnMpIHtcbiAgY29uc3QgdGFyZ2V0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWZzLmZvckVhY2gocmVmID0+IHtcbiAgICAgIGlmICghcmVmKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih0YXJnZXRSZWYuY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYuY3VycmVudCA9IHRhcmdldFJlZi5jdXJyZW50O1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbcmVmc10pO1xuXG4gIHJldHVybiB0YXJnZXRSZWY7XG59XG5cbi8qXG5Qcm9ibGVtIGRlc2NyaWJlZCBpblxuaHR0cHM6Ly9pdG5leHQuaW8vcmV1c2luZy10aGUtcmVmLWZyb20tZm9yd2FyZHJlZi13aXRoLXJlYWN0LWhvb2tzLTRjZTlkZjY5M2RkXG4gKi9cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBREE7QUFZQTtBQUNBO0FBRUE7OztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/effects/use-combined-refs.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-fetched.js": -/*!************************************!*\ - !*** ../ui/effects/use-fetched.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useFetched; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var effects_use_previous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! effects/use-previous */ \"../ui/effects/use-previous.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n // Returns true once a loading value has changed from false => true => false\n\nfunction useFetched(fetching) {\n var wasFetching = Object(effects_use_previous__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(fetching);\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n fetched = _React$useState2[0],\n setFetched = _React$useState2[1];\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (wasFetching && !fetching) {\n setFetched(true);\n }\n }, [wasFetching, fetching, setFetched]);\n return fetched;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtZmV0Y2hlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9lZmZlY3RzL3VzZS1mZXRjaGVkLmpzP2I4ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnZWZmZWN0cy91c2UtcHJldmlvdXMnO1xuXG4vLyBSZXR1cm5zIHRydWUgb25jZSBhIGxvYWRpbmcgdmFsdWUgaGFzIGNoYW5nZWQgZnJvbSBmYWxzZSA9PiB0cnVlID0+IGZhbHNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGZXRjaGVkKGZldGNoaW5nOiBib29sZWFuKSB7XG4gIGNvbnN0IHdhc0ZldGNoaW5nID0gdXNlUHJldmlvdXMoZmV0Y2hpbmcpO1xuICBjb25zdCBbZmV0Y2hlZCwgc2V0RmV0Y2hlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FzRmV0Y2hpbmcgJiYgIWZldGNoaW5nKSB7XG4gICAgICBzZXRGZXRjaGVkKHRydWUpO1xuICAgIH1cbiAgfSwgW3dhc0ZldGNoaW5nLCBmZXRjaGluZywgc2V0RmV0Y2hlZF0pO1xuXG4gIHJldHVybiBmZXRjaGVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/effects/use-fetched.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-get-thumbnail.js": -/*!******************************************!*\ - !*** ../ui/effects/use-get-thumbnail.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useGetThumbnail; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util/lbrytv */ \"../ui/util/lbrytv.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(util_lbrytv__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\nfunction useGetThumbnail(uri, claim, streamingUrl, getFile, shouldHide) {\n // const hasClaim = claim !== undefined;\n // $FlowFixMe\n var isImage = claim && claim.value && claim.value.stream_type === 'image'; // $FlowFixMe\n\n var isFree = claim && claim.value && (!claim.value.fee || Number(claim.value.fee.amount) <= 0);\n var thumbnailToUse;\n\n if (claim && isImage && isFree) {\n thumbnailToUse = Object(util_lbrytv__WEBPACK_IMPORTED_MODULE_1__[\"generateStreamUrl\"])(claim.name, claim.claim_id);\n }\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(thumbnailToUse),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n thumbnail = _React$useState2[0],\n setThumbnail = _React$useState2[1];\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n setThumbnail(thumbnailToUse);\n }, [thumbnailToUse]);\n return thumbnail;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtZ2V0LXRodW1ibmFpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9lZmZlY3RzL3VzZS1nZXQtdGh1bWJuYWlsLmpzPzY0MWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVN0cmVhbVVybCB9IGZyb20gJ3V0aWwvbGJyeXR2JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlR2V0VGh1bWJuYWlsKFxuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06ID9DbGFpbSxcbiAgc3RyZWFtaW5nVXJsOiA/c3RyaW5nLFxuICBnZXRGaWxlOiBzdHJpbmcgPT4gdm9pZCxcbiAgc2hvdWxkSGlkZTogYm9vbGVhblxuKSB7XG4gIC8vIGNvbnN0IGhhc0NsYWltID0gY2xhaW0gIT09IHVuZGVmaW5lZDtcblxuICAvLyAkRmxvd0ZpeE1lXG4gIGNvbnN0IGlzSW1hZ2UgPSBjbGFpbSAmJiBjbGFpbS52YWx1ZSAmJiBjbGFpbS52YWx1ZS5zdHJlYW1fdHlwZSA9PT0gJ2ltYWdlJztcbiAgLy8gJEZsb3dGaXhNZVxuICBjb25zdCBpc0ZyZWUgPSBjbGFpbSAmJiBjbGFpbS52YWx1ZSAmJiAoIWNsYWltLnZhbHVlLmZlZSB8fCBOdW1iZXIoY2xhaW0udmFsdWUuZmVlLmFtb3VudCkgPD0gMCk7XG4gIGxldCB0aHVtYm5haWxUb1VzZTtcblxuICBpZiAoY2xhaW0gJiYgaXNJbWFnZSAmJiBpc0ZyZWUpIHtcbiAgICB0aHVtYm5haWxUb1VzZSA9IGdlbmVyYXRlU3RyZWFtVXJsKGNsYWltLm5hbWUsIGNsYWltLmNsYWltX2lkKTtcbiAgfVxuXG4gIGNvbnN0IFt0aHVtYm5haWwsIHNldFRodW1ibmFpbF0gPSBSZWFjdC51c2VTdGF0ZSh0aHVtYm5haWxUb1VzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VGh1bWJuYWlsKHRodW1ibmFpbFRvVXNlKTtcbiAgfSwgW3RodW1ibmFpbFRvVXNlXSk7XG5cblxuICByZXR1cm4gdGh1bWJuYWlsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWFBO0FBQ0E7QUFEQTtBQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/effects/use-get-thumbnail.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-hover.js": -/*!**********************************!*\ - !*** ../ui/effects/use-hover.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useHover; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\nfunction useHover(ref) {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isHovering = _useState2[0],\n setIsHovering = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n function handleHover() {\n setIsHovering(!isHovering);\n }\n\n var refElement = ref.current;\n\n if (refElement) {\n refElement.addEventListener('mouseenter', handleHover);\n refElement.addEventListener('mouseleave', handleHover);\n return function () {\n refElement.removeEventListener('mouseenter', handleHover);\n refElement.removeEventListener('mouseleave', handleHover);\n };\n }\n }, [ref, isHovering]);\n return isHovering;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtaG92ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvZWZmZWN0cy91c2UtaG92ZXIuanM/NGE2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VIb3ZlcihyZWYpIHtcbiAgY29uc3QgW2lzSG92ZXJpbmcsIHNldElzSG92ZXJpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZnVuY3Rpb24gaGFuZGxlSG92ZXIoKSB7XG4gICAgICBzZXRJc0hvdmVyaW5nKCFpc0hvdmVyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWZFbGVtZW50ID0gcmVmLmN1cnJlbnQ7XG4gICAgaWYgKHJlZkVsZW1lbnQpIHtcbiAgICAgIHJlZkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGhhbmRsZUhvdmVyKTtcbiAgICAgIHJlZkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGhhbmRsZUhvdmVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGhhbmRsZUhvdmVyKTtcbiAgICAgICAgcmVmRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGFuZGxlSG92ZXIpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtyZWYsIGlzSG92ZXJpbmddKTtcblxuICByZXR1cm4gaXNIb3ZlcmluZztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBYkE7QUFnQkE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/effects/use-hover.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-is-mobile.js": -/*!**************************************!*\ - !*** ../ui/effects/use-is-mobile.js ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useIsMobile; });\n/* harmony import */ var _use_media__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./use-media */ \"../ui/effects/use-media.js\");\n\nfunction useIsMobile() {\n var isMobile = Object(_use_media__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(['(min-width: 901px)'], [false], true);\n return isMobile;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtaXMtbW9iaWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2VmZmVjdHMvdXNlLWlzLW1vYmlsZS5qcz8zNTJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1c2VNZWRpYSBmcm9tICcuL3VzZS1tZWRpYSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzTW9iaWxlKCkge1xuICBjb25zdCBpc01vYmlsZSA9IHVzZU1lZGlhKFsnKG1pbi13aWR0aDogOTAxcHgpJ10sIFtmYWxzZV0sIHRydWUpO1xuICByZXR1cm4gaXNNb2JpbGU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/effects/use-is-mobile.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-media.js": -/*!**********************************!*\ - !*** ../ui/effects/use-media.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useMedia; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n // https://usehooks.com/useMedia/\n\nfunction useMedia(queries, values, defaultValue) {\n // Array containing a media query list for each query\n var mediaQueryLists = queries.map(function (q) {\n return window.matchMedia(q);\n }); // Function that gets value based on matching media query\n\n var getValue = function getValue() {\n // Get index of first media query that matches\n var index = mediaQueryLists.findIndex(function (mql) {\n return mql.matches;\n }); // Return related value or defaultValue if none\n\n return typeof values[index] !== 'undefined' ? values[index] : defaultValue;\n }; // State and setter for matched value\n\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(getValue),\n _useState2 = _slicedToArray(_useState, 2),\n value = _useState2[0],\n setValue = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n // Event listener callback\n // Note: By defining getValue outside of useEffect we ensure that it has ...\n // ... current values of hook args (as this hook callback is created once on mount).\n var handler = function handler() {\n return setValue(getValue);\n }; // Set a listener for each media query with above handler as callback.\n\n\n mediaQueryLists.forEach(function (mql) {\n return mql.addListener(handler);\n }); // Remove listeners on cleanup\n\n return function () {\n return mediaQueryLists.forEach(function (mql) {\n return mql.removeListener(handler);\n });\n };\n }, [] // Empty array ensures effect is only run on mount and unmount\n );\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtbWVkaWEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvZWZmZWN0cy91c2UtbWVkaWEuanM/Y2JjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vLyBodHRwczovL3VzZWhvb2tzLmNvbS91c2VNZWRpYS9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1lZGlhKHF1ZXJpZXMsIHZhbHVlcywgZGVmYXVsdFZhbHVlKSB7XG4gIC8vIEFycmF5IGNvbnRhaW5pbmcgYSBtZWRpYSBxdWVyeSBsaXN0IGZvciBlYWNoIHF1ZXJ5XG4gIGNvbnN0IG1lZGlhUXVlcnlMaXN0cyA9IHF1ZXJpZXMubWFwKHEgPT4gd2luZG93Lm1hdGNoTWVkaWEocSkpO1xuXG4gIC8vIEZ1bmN0aW9uIHRoYXQgZ2V0cyB2YWx1ZSBiYXNlZCBvbiBtYXRjaGluZyBtZWRpYSBxdWVyeVxuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICAvLyBHZXQgaW5kZXggb2YgZmlyc3QgbWVkaWEgcXVlcnkgdGhhdCBtYXRjaGVzXG4gICAgY29uc3QgaW5kZXggPSBtZWRpYVF1ZXJ5TGlzdHMuZmluZEluZGV4KG1xbCA9PiBtcWwubWF0Y2hlcyk7XG4gICAgLy8gUmV0dXJuIHJlbGF0ZWQgdmFsdWUgb3IgZGVmYXVsdFZhbHVlIGlmIG5vbmVcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlc1tpbmRleF0gIT09ICd1bmRlZmluZWQnID8gdmFsdWVzW2luZGV4XSA6IGRlZmF1bHRWYWx1ZTtcbiAgfTtcblxuICAvLyBTdGF0ZSBhbmQgc2V0dGVyIGZvciBtYXRjaGVkIHZhbHVlXG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoZ2V0VmFsdWUpO1xuXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICAvLyBFdmVudCBsaXN0ZW5lciBjYWxsYmFja1xuICAgICAgLy8gTm90ZTogQnkgZGVmaW5pbmcgZ2V0VmFsdWUgb3V0c2lkZSBvZiB1c2VFZmZlY3Qgd2UgZW5zdXJlIHRoYXQgaXQgaGFzIC4uLlxuICAgICAgLy8gLi4uIGN1cnJlbnQgdmFsdWVzIG9mIGhvb2sgYXJncyAoYXMgdGhpcyBob29rIGNhbGxiYWNrIGlzIGNyZWF0ZWQgb25jZSBvbiBtb3VudCkuXG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gc2V0VmFsdWUoZ2V0VmFsdWUpO1xuICAgICAgLy8gU2V0IGEgbGlzdGVuZXIgZm9yIGVhY2ggbWVkaWEgcXVlcnkgd2l0aCBhYm92ZSBoYW5kbGVyIGFzIGNhbGxiYWNrLlxuICAgICAgbWVkaWFRdWVyeUxpc3RzLmZvckVhY2gobXFsID0+IG1xbC5hZGRMaXN0ZW5lcihoYW5kbGVyKSk7XG4gICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIG9uIGNsZWFudXBcbiAgICAgIHJldHVybiAoKSA9PiBtZWRpYVF1ZXJ5TGlzdHMuZm9yRWFjaChtcWwgPT4gbXFsLnJlbW92ZUxpc3RlbmVyKGhhbmRsZXIpKTtcbiAgICB9LFxuICAgIFtdIC8vIEVtcHR5IGFycmF5IGVuc3VyZXMgZWZmZWN0IGlzIG9ubHkgcnVuIG9uIG1vdW50IGFuZCB1bm1vdW50XG4gICk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBVEE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFOQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVRBO0FBQUE7QUFjQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/effects/use-media.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-persisted-state.js": -/*!********************************************!*\ - !*** ../ui/effects/use-persisted-state.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return usePersistedState; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\nfunction usePersistedState(key, firstTimeDefault) {\n // If no key is passed in, act as a normal `useState`\n var defaultValue;\n var localStorageAvailable;\n\n try {\n localStorageAvailable = Boolean(window.localStorage);\n } catch (e) {\n localStorageAvailable = false;\n }\n\n if (key && localStorageAvailable) {\n var item = localStorage.getItem(key);\n\n if (item) {\n var parsedItem;\n\n try {\n parsedItem = JSON.parse(item);\n } catch (e) {}\n\n if (parsedItem !== undefined) {\n defaultValue = parsedItem;\n } else {\n defaultValue = item;\n }\n }\n }\n\n if (!defaultValue && defaultValue !== false) {\n defaultValue = firstTimeDefault;\n }\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(defaultValue),\n _useState2 = _slicedToArray(_useState, 2),\n value = _useState2[0],\n setValue = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (key && localStorageAvailable) {\n localStorage.setItem(key, _typeof(value) === 'object' ? JSON.stringify(value) : value);\n }\n }, [key, value, localStorageAvailable]);\n return [value, setValue];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtcGVyc2lzdGVkLXN0YXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2VmZmVjdHMvdXNlLXBlcnNpc3RlZC1zdGF0ZS5qcz82ODkzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVBlcnNpc3RlZFN0YXRlKGtleSwgZmlyc3RUaW1lRGVmYXVsdCkge1xuICAvLyBJZiBubyBrZXkgaXMgcGFzc2VkIGluLCBhY3QgYXMgYSBub3JtYWwgYHVzZVN0YXRlYFxuICBsZXQgZGVmYXVsdFZhbHVlO1xuICBsZXQgbG9jYWxTdG9yYWdlQXZhaWxhYmxlO1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSA9IEJvb2xlYW4od2luZG93LmxvY2FsU3RvcmFnZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ICYmIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSkge1xuICAgIGxldCBpdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBsZXQgcGFyc2VkSXRlbTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgaWYgKHBhcnNlZEl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZWRJdGVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUgIT09IGZhbHNlKSB7XG4gICAgZGVmYXVsdFZhbHVlID0gZmlyc3RUaW1lRGVmYXVsdDtcbiAgfVxuXG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoZGVmYXVsdFZhbHVlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChrZXkgJiYgbG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiB2YWx1ZSk7XG4gICAgfVxuICB9LCBba2V5LCB2YWx1ZSwgbG9jYWxTdG9yYWdlQXZhaWxhYmxlXSk7XG5cbiAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVdO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/effects/use-persisted-state.js\n"); - -/***/ }), - -/***/ "../ui/effects/use-previous.js": -/*!*************************************!*\ - !*** ../ui/effects/use-previous.js ***! - \*************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return usePrevious; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction usePrevious(value) {\n var ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n ref.current = value;\n }, [value]);\n return ref.current;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvZWZmZWN0cy91c2UtcHJldmlvdXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvZWZmZWN0cy91c2UtcHJldmlvdXMuanM/MmE5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWUpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbdmFsdWVdKTtcblxuICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/effects/use-previous.js\n"); - -/***/ }), - -/***/ "../ui/i18n.js": -/*!*********************!*\ - !*** ../ui/i18n.js ***! - \*********************/ -/*! exports provided: __ */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__\", function() { return __; });\nvar isProduction = undefined === 'production';\nvar knownMessages = null;\nvar localStorageAvailable;\n\ntry {\n localStorageAvailable = Boolean(window.localStorage);\n} catch (e) {\n localStorageAvailable = false;\n}\n\nwindow.i18n_messages = window.i18n_messages || {};\n/*\n I dislike the below code (and note that it ships all the way to the distributed app),\n but this seems better than silently having this limitation and future devs not knowing.\n */\n\nfunction saveMessage(message) {\n if (!isProduction && knownMessages === null) {\n console.log('Note that i18n messages are not saved in web dev mode.');\n knownMessages = {};\n }\n}\n\nfunction __(message, tokens) {\n var language = localStorageAvailable ? window.localStorage.getItem('language') || 'en' : window.navigator.language.slice(0, 2) || 'en';\n\n if (!isProduction) {\n saveMessage(message);\n }\n\n var translatedMessage = window.i18n_messages[language] ? window.i18n_messages[language][message] || message : message;\n\n if (!tokens) {\n return translatedMessage;\n }\n\n return translatedMessage.replace(/%([^%]+)%/g, function ($1, $2) {\n return tokens.hasOwnProperty($2) ? tokens[$2] : $2;\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvaTE4bi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9pMThuLmpzPzg5MTMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xubGV0IGtub3duTWVzc2FnZXMgPSBudWxsO1xubGV0IGxvY2FsU3RvcmFnZUF2YWlsYWJsZTtcbnRyeSB7XG4gIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSA9IEJvb2xlYW4od2luZG93LmxvY2FsU3RvcmFnZSk7XG59IGNhdGNoIChlKSB7XG4gIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSA9IGZhbHNlO1xufVxuXG53aW5kb3cuaTE4bl9tZXNzYWdlcyA9IHdpbmRvdy5pMThuX21lc3NhZ2VzIHx8IHt9O1xuXG5cbi8qXG4gSSBkaXNsaWtlIHRoZSBiZWxvdyBjb2RlIChhbmQgbm90ZSB0aGF0IGl0IHNoaXBzIGFsbCB0aGUgd2F5IHRvIHRoZSBkaXN0cmlidXRlZCBhcHApLFxuIGJ1dCB0aGlzIHNlZW1zIGJldHRlciB0aGFuIHNpbGVudGx5IGhhdmluZyB0aGlzIGxpbWl0YXRpb24gYW5kIGZ1dHVyZSBkZXZzIG5vdCBrbm93aW5nLlxuICovXG5mdW5jdGlvbiBzYXZlTWVzc2FnZShtZXNzYWdlKSB7XG4gIGlmICghaXNQcm9kdWN0aW9uICYmIGtub3duTWVzc2FnZXMgPT09IG51bGwpIHtcbiAgICBjb25zb2xlLmxvZygnTm90ZSB0aGF0IGkxOG4gbWVzc2FnZXMgYXJlIG5vdCBzYXZlZCBpbiB3ZWIgZGV2IG1vZGUuJyk7XG4gICAga25vd25NZXNzYWdlcyA9IHt9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfXyhtZXNzYWdlLCB0b2tlbnMpIHtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBsb2NhbFN0b3JhZ2VBdmFpbGFibGVcbiAgICA/IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSB8fCAnZW4nXG4gICAgOiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlLnNsaWNlKDAsIDIpIHx8ICdlbic7XG5cbiAgaWYgKCFpc1Byb2R1Y3Rpb24pIHtcbiAgICBzYXZlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zbGF0ZWRNZXNzYWdlID0gd2luZG93LmkxOG5fbWVzc2FnZXNbbGFuZ3VhZ2VdXG4gICAgPyB3aW5kb3cuaTE4bl9tZXNzYWdlc1tsYW5ndWFnZV1bbWVzc2FnZV0gfHwgbWVzc2FnZVxuICAgIDogbWVzc2FnZTtcblxuICBpZiAoIXRva2Vucykge1xuICAgIHJldHVybiB0cmFuc2xhdGVkTWVzc2FnZTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2xhdGVkTWVzc2FnZS5yZXBsYWNlKC8lKFteJV0rKSUvZywgZnVuY3Rpb24oJDEsICQyKSB7XG4gICAgcmV0dXJuIHRva2Vucy5oYXNPd25Qcm9wZXJ0eSgkMikgPyB0b2tlbnNbJDJdIDogJDI7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/i18n.js\n"); - -/***/ }), - -/***/ "../ui/index.jsx": -/*!***********************!*\ - !*** ../ui/index.jsx ***! - \***********************/ -/*! exports provided: SDK_API_PATH */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SDK_API_PATH\", function() { return SDK_API_PATH; });\n/* harmony import */ var babel_polyfill__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-polyfill */ \"../node_modules/babel-polyfill/lib/index.js\");\n/* harmony import */ var babel_polyfill__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_polyfill__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/browser */ \"../node_modules/@sentry/browser/esm/index.js\");\n/* harmony import */ var component_errorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/errorBoundary */ \"../ui/component/errorBoundary/index.js\");\n/* harmony import */ var component_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/app */ \"../ui/component/app/index.js\");\n/* harmony import */ var component_snackBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/snackBar */ \"../ui/component/snackBar/index.js\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-dom */ \"../node_modules/@hot-loader/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var store__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! store */ \"../ui/store.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./app */ \"../ui/app.js\");\n/* harmony import */ var _logWarningConsoleMessage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./logWarningConsoleMessage */ \"../ui/logWarningConsoleMessage.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var redux_persist_integration_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! redux-persist/integration/react */ \"../node_modules/redux-persist/es/integration/react.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var constants_token__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! constants/token */ \"../ui/constants/token.js\");\n/* harmony import */ var scss_all_scss__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! scss/all.scss */ \"../ui/scss/all.scss\");\n/* harmony import */ var scss_all_scss__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(scss_all_scss__WEBPACK_IMPORTED_MODULE_24__);\n/* harmony import */ var lbrytv_setup_publish__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! lbrytv/setup/publish */ \"./setup/publish.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Import our app styles\n// If a style is not necessary for the initial page load, it should be removed from `all.scss`\n// and loaded dynamically in the component that consumes it\n\n // These overrides can't live in lbrytv/ because they need to use the same instance of `Lbry`\n\n // Sentry error logging setup\n// Will only work if you have a SENTRY_AUTH_TOKEN env\n// We still add code in analytics.js to send the error to sentry manually\n// If it's caught by componentDidCatch in component/errorBoundary, it will not bubble up to this error reporter\n\nif (undefined === 'production') {\n _sentry_browser__WEBPACK_IMPORTED_MODULE_1__[\"init\"]({\n dsn: 'https://1f3c88e2e4b341328a638e138a60fb73@sentry.lbry.tech/2',\n whitelistUrls: [/\\/public\\/ui.js/]\n });\n}\n\nif (true) {\n console.warn('SDK_API_URL env var is deprecated. Use SDK_API_HOST instead');\n}\n\nvar sdkAPIHost = process.env.SDK_API_HOST || \"https://api.lbry.tv\" || \"https://api.lbry.tv\";\nvar SDK_API_PATH = \"\".concat(sdkAPIHost, \"/api/v1\");\nvar proxyURL = \"\".concat(SDK_API_PATH, \"/proxy\");\nlbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].setDaemonConnectionString(proxyURL);\nlbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].setOverride('publish', function (params) {\n return new Promise(function (resolve, reject) {\n Object(lbrytv_setup_publish__WEBPACK_IMPORTED_MODULE_25__[\"default\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"apiCall\"], proxyURL, lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].getApiRequestHeaders() && Object.keys(lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].getApiRequestHeaders()).includes(constants_token__WEBPACK_IMPORTED_MODULE_23__[\"X_LBRY_AUTH_TOKEN\"]) ? lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].getApiRequestHeaders()[constants_token__WEBPACK_IMPORTED_MODULE_23__[\"X_LBRY_AUTH_TOKEN\"]] : '', 'publish', params, resolve, reject);\n });\n});\nvar startTime = Date.now();\nanalytics__WEBPACK_IMPORTED_MODULE_21__[\"default\"].startupEvent();\n\nif (undefined) {\n lbryinc__WEBPACK_IMPORTED_MODULE_14__[\"Lbryio\"].setLocalApi(undefined);\n}\n\nif (process.env.SEARCH_API_URL) {\n Object(lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"setSearchApi\"])(process.env.SEARCH_API_URL);\n} // Fix to make sure old users' cookies are set to the correct domain\n// This can be removed after March 11th, 2021\n// https://github.com/lbryio/lbry-desktop/pull/3830\n\n\nObject(util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__[\"doDeprecatedPasswordMigrationMarch2020\"])();\nObject(util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__[\"doAuthTokenRefresh\"])(); // We need to override Lbryio for getting/setting the authToken\n// We interact with ipcRenderer to get the auth key from a users keyring\n// We keep a local variable for authToken because `ipcRenderer.send` does not\n// contain a response, so there is no way to know when it's been set\n\nvar authToken;\nlbryinc__WEBPACK_IMPORTED_MODULE_14__[\"Lbryio\"].setOverride('setAuthToken', function (status) {\n return new Promise(function (resolve) {\n lbryinc__WEBPACK_IMPORTED_MODULE_14__[\"Lbryio\"].call('user', 'new', {\n auth_token: '',\n language: 'en',\n app_id: status.installation_id\n }, 'post').then(function (response) {\n if (!response.auth_token) {\n throw new Error(__('auth_token is missing from response'));\n }\n\n authToken = response.auth_token;\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__[\"setAuthToken\"])(authToken);\n resolve(authToken);\n });\n });\n});\nlbryinc__WEBPACK_IMPORTED_MODULE_14__[\"Lbryio\"].setOverride('getAuthToken', function () {\n return new Promise(function (resolve) {\n var authTokenToReturn = authToken || Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_22__[\"getAuthToken\"])();\n\n if (authTokenToReturn !== null) {\n lbry_redux__WEBPACK_IMPORTED_MODULE_12__[\"Lbry\"].setApiHeader(constants_token__WEBPACK_IMPORTED_MODULE_23__[\"X_LBRY_AUTH_TOKEN\"], authTokenToReturn);\n }\n\n resolve(authTokenToReturn);\n });\n});\nlbryinc__WEBPACK_IMPORTED_MODULE_14__[\"rewards\"].setCallback('claimFirstRewardSuccess', function () {\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_11__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_7__[\"FIRST_REWARD\"]));\n});\nlbryinc__WEBPACK_IMPORTED_MODULE_14__[\"rewards\"].setCallback('claimRewardSuccess', function () {\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_11__[\"doHideModal\"])());\n});\ndocument.addEventListener('dragover', function (event) {\n event.preventDefault();\n});\ndocument.addEventListener('drop', function (event) {\n event.preventDefault();\n});\ndocument.addEventListener('click', function (event) {\n var target = event.target;\n\n while (target && target !== document) {\n if (target.matches('a[href^=\"http\"]') || target.matches('a[href^=\"mailto\"]')) {}\n\n target = target.parentNode;\n }\n});\n\nfunction AppWrapper() {\n // Splash screen and sdk setup not needed on web\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_8__[\"useState\"])(true),\n _useState2 = _slicedToArray(_useState, 2),\n readyToLaunch = _useState2[0],\n setReadyToLaunch = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_8__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n persistDone = _useState4[0],\n setPersistDone = _useState4[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_8__[\"useEffect\"])(function () {}, []);\n Object(react__WEBPACK_IMPORTED_MODULE_8__[\"useEffect\"])(function () {\n if (persistDone) {\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_11__[\"doToggle3PAnalytics\"])(null, true));\n }\n }, [persistDone]);\n Object(react__WEBPACK_IMPORTED_MODULE_8__[\"useEffect\"])(function () {\n if (readyToLaunch && persistDone) {\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_13__[\"doUpdateIsNightAsync\"])());\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_11__[\"doDaemonReady\"])());\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_14__[\"doBlackListedOutpointsSubscribe\"])());\n _app__WEBPACK_IMPORTED_MODULE_16__[\"default\"].store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_14__[\"doFilteredOutpointsSubscribe\"])());\n var appReadyTime = Date.now();\n var timeToStart = appReadyTime - startTime;\n analytics__WEBPACK_IMPORTED_MODULE_21__[\"default\"].readyEvent(timeToStart);\n }\n }, [readyToLaunch, persistDone]);\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(react_redux__WEBPACK_IMPORTED_MODULE_10__[\"Provider\"], {\n store: store__WEBPACK_IMPORTED_MODULE_15__[\"store\"]\n }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(redux_persist_integration_react__WEBPACK_IMPORTED_MODULE_20__[\"PersistGate\"], {\n persistor: store__WEBPACK_IMPORTED_MODULE_15__[\"persistor\"],\n onBeforeLift: function onBeforeLift() {\n return setPersistDone(true);\n },\n loading: react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(\"div\", {\n className: \"main--launching\"\n })\n }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_8__[\"Fragment\"], null, readyToLaunch ? react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(connected_react_router__WEBPACK_IMPORTED_MODULE_18__[\"ConnectedRouter\"], {\n history: store__WEBPACK_IMPORTED_MODULE_15__[\"history\"]\n }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(component_errorBoundary__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(component_app__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(component_snackBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null))) : react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_8__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(SplashScreen, {\n onReadyToLaunch: function onReadyToLaunch() {\n return setReadyToLaunch(true);\n }\n }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(component_snackBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null)))));\n}\n\nreact_dom__WEBPACK_IMPORTED_MODULE_9___default.a.render(react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(AppWrapper, null), document.getElementById('app'));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvaW5kZXguanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2luZGV4LmpzeD8wNDY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnYmFiZWwtcG9seWZpbGwnO1xuaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICdjb21wb25lbnQvZXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgQXBwIGZyb20gJ2NvbXBvbmVudC9hcHAnO1xuaW1wb3J0IFNuYWNrQmFyIGZyb20gJ2NvbXBvbmVudC9zbmFja0Jhcic7XG5pbXBvcnQgeyBpcGNSZW5kZXJlciwgcmVtb3RlLCBzaGVsbCB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvRGFlbW9uUmVhZHksIGRvQXV0b1VwZGF0ZSwgZG9PcGVuTW9kYWwsIGRvSGlkZU1vZGFsLCBkb1RvZ2dsZTNQQW5hbHl0aWNzIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgTGJyeSwgZG9Ub2FzdCwgaXNVUklWYWxpZCwgc2V0U2VhcmNoQXBpLCBhcGlDYWxsIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb1NldExhbmd1YWdlLCBkb1VwZGF0ZUlzTmlnaHRBc3luYyB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgTGJyeWlvLCByZXdhcmRzLCBkb0JsYWNrTGlzdGVkT3V0cG9pbnRzU3Vic2NyaWJlLCBkb0ZpbHRlcmVkT3V0cG9pbnRzU3Vic2NyaWJlIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBzdG9yZSwgcGVyc2lzdG9yLCBoaXN0b3J5IH0gZnJvbSAnc3RvcmUnO1xuaW1wb3J0IGFwcCBmcm9tICcuL2FwcCc7XG5pbXBvcnQgZG9Mb2dXYXJuaW5nQ29uc29sZU1lc3NhZ2UgZnJvbSAnLi9sb2dXYXJuaW5nQ29uc29sZU1lc3NhZ2UnO1xuaW1wb3J0IHsgQ29ubmVjdGVkUm91dGVyLCBwdXNoIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViLCBmb3JtYXRJbkFwcFVybCB9IGZyb20gJ3V0aWwvdXJsJztcbmltcG9ydCB7IFBlcnNpc3RHYXRlIH0gZnJvbSAncmVkdXgtcGVyc2lzdC9pbnRlZ3JhdGlvbi9yZWFjdCc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQge1xuICBnZXRBdXRoVG9rZW4sXG4gIHNldEF1dGhUb2tlbixcbiAgZG9EZXByZWNhdGVkUGFzc3dvcmRNaWdyYXRpb25NYXJjaDIwMjAsXG4gIGRvQXV0aFRva2VuUmVmcmVzaCxcbn0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuaW1wb3J0IHsgWF9MQlJZX0FVVEhfVE9LRU4gfSBmcm9tICdjb25zdGFudHMvdG9rZW4nO1xuXG4vLyBJbXBvcnQgb3VyIGFwcCBzdHlsZXNcbi8vIElmIGEgc3R5bGUgaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhlIGluaXRpYWwgcGFnZSBsb2FkLCBpdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGBhbGwuc2Nzc2Bcbi8vIGFuZCBsb2FkZWQgZHluYW1pY2FsbHkgaW4gdGhlIGNvbXBvbmVudCB0aGF0IGNvbnN1bWVzIGl0XG5pbXBvcnQgJ3Njc3MvYWxsLnNjc3MnO1xuXG4vLyBUaGVzZSBvdmVycmlkZXMgY2FuJ3QgbGl2ZSBpbiBsYnJ5dHYvIGJlY2F1c2UgdGhleSBuZWVkIHRvIHVzZSB0aGUgc2FtZSBpbnN0YW5jZSBvZiBgTGJyeWBcbmltcG9ydCBhcGlQdWJsaXNoQ2FsbFZpYVdlYiBmcm9tICdsYnJ5dHYvc2V0dXAvcHVibGlzaCc7XG5cbi8vIFNlbnRyeSBlcnJvciBsb2dnaW5nIHNldHVwXG4vLyBXaWxsIG9ubHkgd29yayBpZiB5b3UgaGF2ZSBhIFNFTlRSWV9BVVRIX1RPS0VOIGVudlxuLy8gV2Ugc3RpbGwgYWRkIGNvZGUgaW4gYW5hbHl0aWNzLmpzIHRvIHNlbmQgdGhlIGVycm9yIHRvIHNlbnRyeSBtYW51YWxseVxuLy8gSWYgaXQncyBjYXVnaHQgYnkgY29tcG9uZW50RGlkQ2F0Y2ggaW4gY29tcG9uZW50L2Vycm9yQm91bmRhcnksIGl0IHdpbGwgbm90IGJ1YmJsZSB1cCB0byB0aGlzIGVycm9yIHJlcG9ydGVyXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBTZW50cnkuaW5pdCh7XG4gICAgZHNuOiAnaHR0cHM6Ly8xZjNjODhlMmU0YjM0MTMyOGE2MzhlMTM4YTYwZmI3M0BzZW50cnkubGJyeS50ZWNoLzInLFxuICAgIHdoaXRlbGlzdFVybHM6IFsvXFwvcHVibGljXFwvdWkuanMvXSxcbiAgfSk7XG59XG5cbmlmIChwcm9jZXNzLmVudi5TREtfQVBJX1VSTCkge1xuICBjb25zb2xlLndhcm4oJ1NES19BUElfVVJMIGVudiB2YXIgaXMgZGVwcmVjYXRlZC4gVXNlIFNES19BUElfSE9TVCBpbnN0ZWFkJyk7XG59XG5cbmNvbnN0IHNka0FQSUhvc3QgPSBwcm9jZXNzLmVudi5TREtfQVBJX0hPU1QgfHwgcHJvY2Vzcy5lbnYuU0RLX0FQSV9VUkwgfHwgYGh0dHBzOi8vYXBpLmxicnkudHZgO1xuZXhwb3J0IGNvbnN0IFNES19BUElfUEFUSCA9IGAke3Nka0FQSUhvc3R9L2FwaS92MWA7XG5jb25zdCBwcm94eVVSTCA9IGAke1NES19BUElfUEFUSH0vcHJveHlgO1xuXG5MYnJ5LnNldERhZW1vbkNvbm5lY3Rpb25TdHJpbmcocHJveHlVUkwpO1xuXG5MYnJ5LnNldE92ZXJyaWRlKFxuICAncHVibGlzaCcsXG4gIHBhcmFtcyA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGFwaVB1Ymxpc2hDYWxsVmlhV2ViKFxuICAgICAgICBhcGlDYWxsLFxuICAgICAgICBwcm94eVVSTCxcbiAgICAgICAgTGJyeS5nZXRBcGlSZXF1ZXN0SGVhZGVycygpICYmIE9iamVjdC5rZXlzKExicnkuZ2V0QXBpUmVxdWVzdEhlYWRlcnMoKSkuaW5jbHVkZXMoWF9MQlJZX0FVVEhfVE9LRU4pXG4gICAgICAgICAgPyBMYnJ5LmdldEFwaVJlcXVlc3RIZWFkZXJzKClbWF9MQlJZX0FVVEhfVE9LRU5dXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgJ3B1Ymxpc2gnLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHJlamVjdFxuICAgICAgKTtcbiAgICB9KVxuKTtcblxuY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbmFuYWx5dGljcy5zdGFydHVwRXZlbnQoKTtcblxuXG5pZiAocHJvY2Vzcy5lbnYuTEJSWV9BUElfVVJMKSB7XG4gIExicnlpby5zZXRMb2NhbEFwaShwcm9jZXNzLmVudi5MQlJZX0FQSV9VUkwpO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuU0VBUkNIX0FQSV9VUkwpIHtcbiAgc2V0U2VhcmNoQXBpKHByb2Nlc3MuZW52LlNFQVJDSF9BUElfVVJMKTtcbn1cblxuLy8gRml4IHRvIG1ha2Ugc3VyZSBvbGQgdXNlcnMnIGNvb2tpZXMgYXJlIHNldCB0byB0aGUgY29ycmVjdCBkb21haW5cbi8vIFRoaXMgY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgTWFyY2ggMTF0aCwgMjAyMVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LWRlc2t0b3AvcHVsbC8zODMwXG5kb0RlcHJlY2F0ZWRQYXNzd29yZE1pZ3JhdGlvbk1hcmNoMjAyMCgpO1xuZG9BdXRoVG9rZW5SZWZyZXNoKCk7XG5cbi8vIFdlIG5lZWQgdG8gb3ZlcnJpZGUgTGJyeWlvIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGF1dGhUb2tlblxuLy8gV2UgaW50ZXJhY3Qgd2l0aCBpcGNSZW5kZXJlciB0byBnZXQgdGhlIGF1dGgga2V5IGZyb20gYSB1c2VycyBrZXlyaW5nXG4vLyBXZSBrZWVwIGEgbG9jYWwgdmFyaWFibGUgZm9yIGF1dGhUb2tlbiBiZWNhdXNlIGBpcGNSZW5kZXJlci5zZW5kYCBkb2VzIG5vdFxuLy8gY29udGFpbiBhIHJlc3BvbnNlLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGVuIGl0J3MgYmVlbiBzZXRcbmxldCBhdXRoVG9rZW47XG5MYnJ5aW8uc2V0T3ZlcnJpZGUoXG4gICdzZXRBdXRoVG9rZW4nLFxuICBzdGF0dXMgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIExicnlpby5jYWxsKFxuICAgICAgICAndXNlcicsXG4gICAgICAgICduZXcnLFxuICAgICAgICB7XG4gICAgICAgICAgYXV0aF90b2tlbjogJycsXG4gICAgICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgICAgICAgYXBwX2lkOiBzdGF0dXMuaW5zdGFsbGF0aW9uX2lkLFxuICAgICAgICB9LFxuICAgICAgICAncG9zdCdcbiAgICAgICkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuYXV0aF90b2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfXygnYXV0aF90b2tlbiBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoVG9rZW4gPSByZXNwb25zZS5hdXRoX3Rva2VuO1xuICAgICAgICBzZXRBdXRoVG9rZW4oYXV0aFRva2VuKTtcbiAgICAgICAgcmVzb2x2ZShhdXRoVG9rZW4pO1xuICAgICAgfSk7XG4gICAgfSlcbik7XG5cbkxicnlpby5zZXRPdmVycmlkZShcbiAgJ2dldEF1dGhUb2tlbicsXG4gICgpID0+XG4gICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBhdXRoVG9rZW5Ub1JldHVybiA9IGF1dGhUb2tlbiB8fCBnZXRBdXRoVG9rZW4oKTtcblxuICAgICAgaWYgKGF1dGhUb2tlblRvUmV0dXJuICE9PSBudWxsKSB7XG4gICAgICAgIExicnkuc2V0QXBpSGVhZGVyKFhfTEJSWV9BVVRIX1RPS0VOLCBhdXRoVG9rZW5Ub1JldHVybik7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoYXV0aFRva2VuVG9SZXR1cm4pO1xuICAgIH0pXG4pO1xuXG5yZXdhcmRzLnNldENhbGxiYWNrKCdjbGFpbUZpcnN0UmV3YXJkU3VjY2VzcycsICgpID0+IHtcbiAgYXBwLnN0b3JlLmRpc3BhdGNoKGRvT3Blbk1vZGFsKE1PREFMUy5GSVJTVF9SRVdBUkQpKTtcbn0pO1xuXG5yZXdhcmRzLnNldENhbGxiYWNrKCdjbGFpbVJld2FyZFN1Y2Nlc3MnLCAoKSA9PiB7XG4gIGFwcC5zdG9yZS5kaXNwYXRjaChkb0hpZGVNb2RhbCgpKTtcbn0pO1xuXG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufSk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufSk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgbGV0IHsgdGFyZ2V0IH0gPSBldmVudDtcblxuICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZG9jdW1lbnQpIHtcbiAgICBpZiAodGFyZ2V0Lm1hdGNoZXMoJ2FbaHJlZl49XCJodHRwXCJdJykgfHwgdGFyZ2V0Lm1hdGNoZXMoJ2FbaHJlZl49XCJtYWlsdG9cIl0nKSkge1xuICAgIH1cbiAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIEFwcFdyYXBwZXIoKSB7XG4gIC8vIFNwbGFzaCBzY3JlZW4gYW5kIHNkayBzZXR1cCBub3QgbmVlZGVkIG9uIHdlYlxuICBjb25zdCBbcmVhZHlUb0xhdW5jaCwgc2V0UmVhZHlUb0xhdW5jaF0gPSB1c2VTdGF0ZShJU19XRUIpO1xuICBjb25zdCBbcGVyc2lzdERvbmUsIHNldFBlcnNpc3REb25lXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGVyc2lzdERvbmUpIHtcbiAgICAgIGFwcC5zdG9yZS5kaXNwYXRjaChkb1RvZ2dsZTNQQW5hbHl0aWNzKG51bGwsIHRydWUpKTtcbiAgICB9XG4gIH0sIFtwZXJzaXN0RG9uZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlYWR5VG9MYXVuY2ggJiYgcGVyc2lzdERvbmUpIHtcbiAgICAgIGFwcC5zdG9yZS5kaXNwYXRjaChkb1VwZGF0ZUlzTmlnaHRBc3luYygpKTtcbiAgICAgIGFwcC5zdG9yZS5kaXNwYXRjaChkb0RhZW1vblJlYWR5KCkpO1xuICAgICAgYXBwLnN0b3JlLmRpc3BhdGNoKGRvQmxhY2tMaXN0ZWRPdXRwb2ludHNTdWJzY3JpYmUoKSk7XG4gICAgICBhcHAuc3RvcmUuZGlzcGF0Y2goZG9GaWx0ZXJlZE91dHBvaW50c1N1YnNjcmliZSgpKTtcblxuICAgICAgY29uc3QgYXBwUmVhZHlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHRpbWVUb1N0YXJ0ID0gYXBwUmVhZHlUaW1lIC0gc3RhcnRUaW1lO1xuICAgICAgYW5hbHl0aWNzLnJlYWR5RXZlbnQodGltZVRvU3RhcnQpO1xuICAgIH1cbiAgfSwgW3JlYWR5VG9MYXVuY2gsIHBlcnNpc3REb25lXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxQZXJzaXN0R2F0ZVxuICAgICAgICBwZXJzaXN0b3I9e3BlcnNpc3Rvcn1cbiAgICAgICAgb25CZWZvcmVMaWZ0PXsoKSA9PiBzZXRQZXJzaXN0RG9uZSh0cnVlKX1cbiAgICAgICAgbG9hZGluZz17PGRpdiBjbGFzc05hbWU9XCJtYWluLS1sYXVuY2hpbmdcIiAvPn1cbiAgICAgID5cbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIHtyZWFkeVRvTGF1bmNoID8gKFxuICAgICAgICAgICAgPENvbm5lY3RlZFJvdXRlciBoaXN0b3J5PXtoaXN0b3J5fT5cbiAgICAgICAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPEFwcCAvPlxuICAgICAgICAgICAgICAgIDxTbmFja0JhciAvPlxuICAgICAgICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICAgICAgICA8L0Nvbm5lY3RlZFJvdXRlcj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICA8U3BsYXNoU2NyZWVuIG9uUmVhZHlUb0xhdW5jaD17KCkgPT4gc2V0UmVhZHlUb0xhdW5jaCh0cnVlKX0gLz5cbiAgICAgICAgICAgICAgPFNuYWNrQmFyIC8+XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICA8L1BlcnNpc3RHYXRlPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG59XG5cblJlYWN0RE9NLnJlbmRlcig8QXBwV3JhcHBlciAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRkE7QUFGQTtBQWtCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBRkE7QUFGQTtBQXlCQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUZBO0FBY0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQURBO0FBS0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBQ0E7QUFTQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBYUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQU9BO0FBQUE7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/index.jsx\n"); - -/***/ }), - -/***/ "../ui/logWarningConsoleMessage.js": -/*!*****************************************!*\ - !*** ../ui/logWarningConsoleMessage.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return doLogWarningConsoleMessage; });\n/* harmony import */ var electron_is_dev__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! electron-is-dev */ \"../node_modules/electron-is-dev/index.js\");\n/* harmony import */ var electron_is_dev__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron_is_dev__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction doLogWarningConsoleMessage() {\n var style = {\n redTitle: 'color: red; font-size: 36px; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;, font-weight: bold;',\n normalText: 'font-size: 18px;',\n redText: 'color: red; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; font-size: 24px;'\n };\n console.clear();\n console.log('%cScam alert!', style.redTitle);\n console.log('%cIf someone told you to copy / paste something here you have a chance of being scammed.', style.normalText);\n console.log('%cPasting anything in here could give attackers access to your LBC credits or wallet.', style.normalText);\n console.log(\"%cIf you don't understand exactly what you are doing here, please close this window and keep your LBC credits/wallet safe.\", style.redText);\n console.log('%cIf you do understand exactly what you are doing, joins us, earn LBC, and make LBRY better! All of LBRY is open-source and we have a sweet secret handshake. Get started at https://lbry.tech/contribute', style.normalText);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbG9nV2FybmluZ0NvbnNvbGVNZXNzYWdlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL2xvZ1dhcm5pbmdDb25zb2xlTWVzc2FnZS5qcz9kMGQzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0RldiBmcm9tICdlbGVjdHJvbi1pcy1kZXYnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkb0xvZ1dhcm5pbmdDb25zb2xlTWVzc2FnZSgpIHtcbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgcmVkVGl0bGU6XG4gICAgICAnY29sb3I6IHJlZDsgZm9udC1zaXplOiAzNnB4OyB0ZXh0LXNoYWRvdzogLTFweCAwIGJsYWNrLCAwIDFweCBibGFjaywgMXB4IDAgYmxhY2ssIDAgLTFweCBibGFjazssIGZvbnQtd2VpZ2h0OiBib2xkOycsXG4gICAgbm9ybWFsVGV4dDogJ2ZvbnQtc2l6ZTogMThweDsnLFxuICAgIHJlZFRleHQ6ICdjb2xvcjogcmVkOyB0ZXh0LXNoYWRvdzogLTFweCAwIGJsYWNrLCAwIDFweCBibGFjaywgMXB4IDAgYmxhY2ssIDAgLTFweCBibGFjazsgZm9udC1zaXplOiAyNHB4OycsXG4gIH07XG4gIGNvbnNvbGUuY2xlYXIoKTtcbiAgY29uc29sZS5sb2coJyVjU2NhbSBhbGVydCEnLCBzdHlsZS5yZWRUaXRsZSk7XG5cbiAgY29uc29sZS5sb2coXG4gICAgJyVjSWYgc29tZW9uZSB0b2xkIHlvdSB0byBjb3B5IC8gcGFzdGUgc29tZXRoaW5nIGhlcmUgeW91IGhhdmUgYSBjaGFuY2Ugb2YgYmVpbmcgc2NhbW1lZC4nLFxuICAgIHN0eWxlLm5vcm1hbFRleHRcbiAgKTtcblxuICBjb25zb2xlLmxvZyhcbiAgICAnJWNQYXN0aW5nIGFueXRoaW5nIGluIGhlcmUgY291bGQgZ2l2ZSBhdHRhY2tlcnMgYWNjZXNzIHRvIHlvdXIgTEJDIGNyZWRpdHMgb3Igd2FsbGV0LicsXG4gICAgc3R5bGUubm9ybWFsVGV4dFxuICApO1xuXG4gIGNvbnNvbGUubG9nKFxuICAgIFwiJWNJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgeW91IGFyZSBkb2luZyBoZXJlLCBwbGVhc2UgY2xvc2UgdGhpcyB3aW5kb3cgYW5kIGtlZXAgeW91ciBMQkMgY3JlZGl0cy93YWxsZXQgc2FmZS5cIixcbiAgICBzdHlsZS5yZWRUZXh0XG4gICk7XG5cbiAgY29uc29sZS5sb2coXG4gICAgJyVjSWYgeW91IGRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHlvdSBhcmUgZG9pbmcsIGpvaW5zIHVzLCBlYXJuIExCQywgYW5kIG1ha2UgTEJSWSBiZXR0ZXIhIEFsbCBvZiBMQlJZIGlzIG9wZW4tc291cmNlIGFuZCB3ZSBoYXZlIGEgc3dlZXQgc2VjcmV0IGhhbmRzaGFrZS4gR2V0IHN0YXJ0ZWQgYXQgaHR0cHM6Ly9sYnJ5LnRlY2gvY29udHJpYnV0ZScsXG4gICAgc3R5bGUubm9ybWFsVGV4dFxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUVBO0FBS0E7QUFLQTtBQUtBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/logWarningConsoleMessage.js\n"); - -/***/ }), - -/***/ "../ui/modal/modal.jsx": -/*!*****************************!*\ - !*** ../ui/modal/modal.jsx ***! - \*****************************/ -/*! exports provided: Modal, ExpandableModal, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Modal\", function() { return Modal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpandableModal\", function() { return ExpandableModal; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-modal */ \"../node_modules/react-modal/lib/index.js\");\n/* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n} // These should probably just be combined into one modal component\n\n\n\n\n\n\n\n\nfunction Modal(props) {\n var children = props.children,\n _props$type = props.type,\n type = _props$type === void 0 ? 'alert' : _props$type,\n _props$confirmButtonL = props.confirmButtonLabel,\n confirmButtonLabel = _props$confirmButtonL === void 0 ? __('OK') : _props$confirmButtonL,\n _props$confirmButtonD = props.confirmButtonDisabled,\n confirmButtonDisabled = _props$confirmButtonD === void 0 ? false : _props$confirmButtonD,\n onConfirmed = props.onConfirmed,\n _props$abortButtonLab = props.abortButtonLabel,\n abortButtonLabel = _props$abortButtonLab === void 0 ? __('Cancel') : _props$abortButtonLab,\n _props$abortButtonDis = props.abortButtonDisabled,\n abortButtonDisabled = _props$abortButtonDis === void 0 ? false : _props$abortButtonDis,\n onAborted = props.onAborted,\n className = props.className,\n title = props.title,\n modalProps = _objectWithoutProperties(props, [\"children\", \"type\", \"confirmButtonLabel\", \"confirmButtonDisabled\", \"onConfirmed\", \"abortButtonLabel\", \"abortButtonDisabled\", \"onAborted\", \"className\", \"title\"]);\n\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react_modal__WEBPACK_IMPORTED_MODULE_2___default.a, _extends({}, modalProps, {\n onRequestClose: onAborted || onConfirmed,\n className: classnames__WEBPACK_IMPORTED_MODULE_4___default()('modal', className, {\n 'modal--card-internal': type === 'card'\n }),\n overlayClassName: \"modal-overlay\"\n }), title && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"h1\", {\n className: \"card__title card__title--deprecated\"\n }, title), type === 'card' && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n iconSize: isMobile ? 24 : undefined,\n button: \"close\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE\"],\n onClick: onAborted\n }), children, type === 'custom' || type === 'card' ? null : // custom modals define their own buttons\n react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: confirmButtonLabel,\n disabled: confirmButtonDisabled,\n onClick: onConfirmed\n }), type === 'confirm' ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: abortButtonLabel,\n disabled: abortButtonDisabled,\n onClick: onAborted\n }) : null));\n}\nvar ExpandableModal = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ExpandableModal, _React$PureComponent);\n\n function ExpandableModal(props) {\n var _this;\n\n _classCallCheck(this, ExpandableModal);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ExpandableModal).call(this, props));\n _this.state = {\n expanded: false\n };\n return _this;\n }\n\n _createClass(ExpandableModal, [{\n key: \"toggleExpanded\",\n value: function toggleExpanded() {\n this.setState({\n expanded: !this.state.expanded\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](Modal, _extends({\n type: \"custom\"\n }, this.props), this.props.children, this.state.expanded ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", null, this.props.extraContent) : null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: this.props.confirmButtonLabel,\n onClick: this.props.onConfirmed\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: !this.state.expanded ? this.props.expandButtonLabel : this.props.hideButtonLabel,\n onClick: function onClick() {\n _this2.toggleExpanded();\n }\n })));\n }\n }]);\n\n return ExpandableModal;\n}(react__WEBPACK_IMPORTED_MODULE_1__[\"PureComponent\"]);\n\n_defineProperty(ExpandableModal, \"defaultProps\", {\n confirmButtonLabel: __('OK'),\n expandButtonLabel: __('Show More...'),\n hideButtonLabel: __('Show Less')\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Modal);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWwuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsLmpzeD9mMDY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBUaGVzZSBzaG91bGQgcHJvYmFibHkganVzdCBiZSBjb21iaW5lZCBpbnRvIG9uZSBtb2RhbCBjb21wb25lbnRcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgdXNlSXNNb2JpbGUgZnJvbSAnZWZmZWN0cy91c2UtaXMtbW9iaWxlJztcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICB0eXBlPzogc3RyaW5nLFxuICBvdmVybGF5PzogYm9vbGVhbixcbiAgY29uZmlybUJ1dHRvbkxhYmVsPzogc3RyaW5nLFxuICBhYm9ydEJ1dHRvbkxhYmVsPzogc3RyaW5nLFxuICBjb25maXJtQnV0dG9uRGlzYWJsZWQ/OiBib29sZWFuLFxuICBhYm9ydEJ1dHRvbkRpc2FibGVkPzogYm9vbGVhbixcbiAgb25Db25maXJtZWQ/OiBhbnkgPT4gYW55LFxuICBvbkFib3J0ZWQ/OiBhbnkgPT4gYW55LFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIGNoaWxkcmVuPzogUmVhY3QuTm9kZSxcbiAgZXh0cmFDb250ZW50PzogUmVhY3QuTm9kZSxcbiAgZXhwYW5kQnV0dG9uTGFiZWw/OiBzdHJpbmcsXG4gIGhpZGVCdXR0b25MYWJlbD86IHN0cmluZyxcbiAgdGl0bGU/OiBzdHJpbmcgfCBSZWFjdC5Ob2RlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGFsKHByb3BzOiBNb2RhbFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0eXBlID0gJ2FsZXJ0JyxcbiAgICBjb25maXJtQnV0dG9uTGFiZWwgPSBfXygnT0snKSxcbiAgICBjb25maXJtQnV0dG9uRGlzYWJsZWQgPSBmYWxzZSxcbiAgICBvbkNvbmZpcm1lZCxcbiAgICBhYm9ydEJ1dHRvbkxhYmVsID0gX18oJ0NhbmNlbCcpLFxuICAgIGFib3J0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZSxcbiAgICBvbkFib3J0ZWQsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRpdGxlLFxuICAgIC4uLm1vZGFsUHJvcHNcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlSXNNb2JpbGUoKTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdE1vZGFsXG4gICAgICB7Li4ubW9kYWxQcm9wc31cbiAgICAgIG9uUmVxdWVzdENsb3NlPXtvbkFib3J0ZWQgfHwgb25Db25maXJtZWR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ21vZGFsJywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdtb2RhbC0tY2FyZC1pbnRlcm5hbCc6IHR5cGUgPT09ICdjYXJkJyxcbiAgICAgIH0pfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT1cIm1vZGFsLW92ZXJsYXlcIlxuICAgID5cbiAgICAgIHt0aXRsZSAmJiA8aDEgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGUgY2FyZF9fdGl0bGUtLWRlcHJlY2F0ZWRcIj57dGl0bGV9PC9oMT59XG4gICAgICB7dHlwZSA9PT0gJ2NhcmQnICYmIChcbiAgICAgICAgPEJ1dHRvbiBpY29uU2l6ZT17aXNNb2JpbGUgPyAyNCA6IHVuZGVmaW5lZH0gYnV0dG9uPVwiY2xvc2VcIiBpY29uPXtJQ09OUy5SRU1PVkV9IG9uQ2xpY2s9e29uQWJvcnRlZH0gLz5cbiAgICAgICl9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7dHlwZSA9PT0gJ2N1c3RvbScgfHwgdHlwZSA9PT0gJ2NhcmQnID8gbnVsbCA6ICggLy8gY3VzdG9tIG1vZGFscyBkZWZpbmUgdGhlaXIgb3duIGJ1dHRvbnNcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e2NvbmZpcm1CdXR0b25MYWJlbH0gZGlzYWJsZWQ9e2NvbmZpcm1CdXR0b25EaXNhYmxlZH0gb25DbGljaz17b25Db25maXJtZWR9IC8+XG4gICAgICAgICAge3R5cGUgPT09ICdjb25maXJtJyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXthYm9ydEJ1dHRvbkxhYmVsfSBkaXNhYmxlZD17YWJvcnRCdXR0b25EaXNhYmxlZH0gb25DbGljaz17b25BYm9ydGVkfSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9SZWFjdE1vZGFsPlxuICApO1xufVxuXG50eXBlIFN0YXRlID0ge1xuICBleHBhbmRlZDogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRhYmxlTW9kYWwgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PE1vZGFsUHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY29uZmlybUJ1dHRvbkxhYmVsOiBfXygnT0snKSxcbiAgICBleHBhbmRCdXR0b25MYWJlbDogX18oJ1Nob3cgTW9yZS4uLicpLFxuICAgIGhpZGVCdXR0b25MYWJlbDogX18oJ1Nob3cgTGVzcycpLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBNb2RhbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kZWQoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBleHBhbmRlZDogIXRoaXMuc3RhdGUuZXhwYW5kZWQsXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbCB0eXBlPVwiY3VzdG9tXCIgey4uLnRoaXMucHJvcHN9PlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAge3RoaXMuc3RhdGUuZXhwYW5kZWQgPyA8ZGl2Pnt0aGlzLnByb3BzLmV4dHJhQ29udGVudH08L2Rpdj4gOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17dGhpcy5wcm9wcy5jb25maXJtQnV0dG9uTGFiZWx9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25Db25maXJtZWR9IC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICBsYWJlbD17IXRoaXMuc3RhdGUuZXhwYW5kZWQgPyB0aGlzLnByb3BzLmV4cGFuZEJ1dHRvbkxhYmVsIDogdGhpcy5wcm9wcy5oaWRlQnV0dG9uTGFiZWx9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQoKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQWNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTkE7QUFRQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFNQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFIQTtBQU1BO0FBQ0E7QUFkQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQURBO0FBR0E7QUFuQkE7QUFBQTtBQUFBO0FBcUJBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFVQTtBQXRDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBdUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modal.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalAffirmPurchase/index.js": -/*!************************************************!*\ - !*** ../ui/modal/modalAffirmPurchase/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalAffirmPurchase/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectMetadataForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n cancelPurchase: function cancelPurchase() {\n dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_1__[\"doSetPlayingUri\"])(null));\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n loadVideo: function loadVideo(uri) {\n dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_1__[\"doSetPlayingUri\"])(uri));\n dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_1__[\"doPlayUri\"])(uri, true));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBZmZpcm1QdXJjaGFzZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEFmZmlybVB1cmNoYXNlL2luZGV4LmpzP2NhZmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvU2V0UGxheWluZ1VyaSwgZG9QbGF5VXJpIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9jb250ZW50JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgTW9kYWxBZmZpcm1QdXJjaGFzZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBtZXRhZGF0YTogbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjYW5jZWxQdXJjaGFzZTogKCkgPT4ge1xuICAgIGRpc3BhdGNoKGRvU2V0UGxheWluZ1VyaShudWxsKSk7XG4gICAgZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSk7XG4gIH0sXG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxuICBsb2FkVmlkZW86IHVyaSA9PiB7XG4gICAgZGlzcGF0Y2goZG9TZXRQbGF5aW5nVXJpKHVyaSkpO1xuICAgIGRpc3BhdGNoKGRvUGxheVVyaSh1cmksIHRydWUpKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoTW9kYWxBZmZpcm1QdXJjaGFzZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUxBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUFBO0FBQ0E7QUFXQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalAffirmPurchase/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalAffirmPurchase/view.jsx": -/*!************************************************!*\ - !*** ../ui/modal/modalAffirmPurchase/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_filePrice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/filePrice */ \"../ui/component/filePrice/index.js\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar ModalAffirmPurchase = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalAffirmPurchase, _React$PureComponent);\n\n function ModalAffirmPurchase() {\n var _this;\n\n _classCallCheck(this, ModalAffirmPurchase);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ModalAffirmPurchase).call(this));\n _assertThisInitialized(_this).onAffirmPurchase = _this.onAffirmPurchase.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ModalAffirmPurchase, [{\n key: \"onAffirmPurchase\",\n value: function onAffirmPurchase() {\n this.props.closeModal();\n this.props.loadVideo(this.props.uri);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n cancelPurchase = _this$props.cancelPurchase,\n title = _this$props.metadata.title,\n uri = _this$props.uri;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n type: \"confirm\",\n isOpen: true,\n title: __('Confirm Purchase'),\n contentLabel: __('Confirm Purchase'),\n onConfirmed: this.onAffirmPurchase,\n onAborted: cancelPurchase\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('This will purchase'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"strong\", null, title ? \"\\\"\".concat(title, \"\\\"\") : uri), \" \", __('for'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"strong\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_filePrice__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n showFullPrice: true,\n inheritStyle: true,\n showLBC: false\n })), ' ', __('credits'), \".\"));\n }\n }]);\n\n return ModalAffirmPurchase;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalAffirmPurchase);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBZmZpcm1QdXJjaGFzZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEFmZmlybVB1cmNoYXNlL3ZpZXcuanN4PzAwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmlsZVByaWNlIGZyb20gJ2NvbXBvbmVudC9maWxlUHJpY2UnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQsXG4gIGxvYWRWaWRlbzogc3RyaW5nID0+IHZvaWQsXG4gIHVyaTogc3RyaW5nLFxuICBjYW5jZWxQdXJjaGFzZTogKCkgPT4gdm9pZCxcbiAgbWV0YWRhdGE6IFN0cmVhbU1ldGFkYXRhLFxufTtcblxuY2xhc3MgTW9kYWxBZmZpcm1QdXJjaGFzZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgICh0aGlzOiBhbnkpLm9uQWZmaXJtUHVyY2hhc2UgPSB0aGlzLm9uQWZmaXJtUHVyY2hhc2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIG9uQWZmaXJtUHVyY2hhc2UoKSB7XG4gICAgdGhpcy5wcm9wcy5jbG9zZU1vZGFsKCk7XG4gICAgdGhpcy5wcm9wcy5sb2FkVmlkZW8odGhpcy5wcm9wcy51cmkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNhbmNlbFB1cmNoYXNlLFxuICAgICAgbWV0YWRhdGE6IHsgdGl0bGUgfSxcbiAgICAgIHVyaSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgdHlwZT1cImNvbmZpcm1cIlxuICAgICAgICBpc09wZW5cbiAgICAgICAgdGl0bGU9e19fKCdDb25maXJtIFB1cmNoYXNlJyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0NvbmZpcm0gUHVyY2hhc2UnKX1cbiAgICAgICAgb25Db25maXJtZWQ9e3RoaXMub25BZmZpcm1QdXJjaGFzZX1cbiAgICAgICAgb25BYm9ydGVkPXtjYW5jZWxQdXJjaGFzZX1cbiAgICAgID5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICB7X18oJ1RoaXMgd2lsbCBwdXJjaGFzZScpfSA8c3Ryb25nPnt0aXRsZSA/IGBcIiR7dGl0bGV9XCJgIDogdXJpfTwvc3Ryb25nPiB7X18oJ2ZvcicpfXsnICd9XG4gICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgIDxGaWxlUHJpY2UgdXJpPXt1cml9IHNob3dGdWxsUHJpY2UgaW5oZXJpdFN0eWxlIHNob3dMQkM9e2ZhbHNlfSAvPlxuICAgICAgICAgIDwvc3Ryb25nPnsnICd9XG4gICAgICAgICAge19fKCdjcmVkaXRzJyl9LlxuICAgICAgICA8L3A+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxBZmZpcm1QdXJjaGFzZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFIQTtBQUlBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7Ozs7QUFyQ0E7QUFDQTtBQXVDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalAffirmPurchase/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalAutoGenerateThumbnail/index.js": -/*!*******************************************************!*\ - !*** ../ui/modal/modalAutoGenerateThumbnail/index.js ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalAutoGenerateThumbnail/view.jsx\");\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n upload: function upload(file) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doUploadThumbnail\"])(null, file, null, null, 'Generated'));\n },\n showToast: function showToast(options) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doToast\"])(options));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWwvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWwvaW5kZXguanM/MzJmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBkb1RvYXN0LCBkb1VwbG9hZFRodW1ibmFpbCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IE1vZGFsQXV0b0dlbmVyYXRlVGh1bWJuYWlsIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbiAgdXBsb2FkOiBmaWxlID0+IGRpc3BhdGNoKGRvVXBsb2FkVGh1bWJuYWlsKG51bGwsIGZpbGUsIG51bGwsIG51bGwsICdHZW5lcmF0ZWQnKSksXG4gIHNob3dUb2FzdDogb3B0aW9ucyA9PiBkaXNwYXRjaChkb1RvYXN0KG9wdGlvbnMpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBudWxsLFxuICBwZXJmb3JtXG4pKE1vZGFsQXV0b0dlbmVyYXRlVGh1bWJuYWlsKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalAutoGenerateThumbnail/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalAutoGenerateThumbnail/view.jsx": -/*!*******************************************************!*\ - !*** ../ui/modal/modalAutoGenerateThumbnail/view.jsx ***! - \*******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Buffer, __) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nfunction ModalAutoGenerateThumbnail(props) {\n var closeModal = props.closeModal,\n filePath = props.filePath,\n upload = props.upload,\n showToast = props.showToast;\n var playerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])();\n var videoSrc;\n\n if (typeof filePath === 'string') {\n videoSrc = Object(util_url__WEBPACK_IMPORTED_MODULE_2__[\"formatFileSystemPath\"])(filePath);\n } else {\n videoSrc = URL.createObjectURL(filePath);\n }\n\n function uploadImage() {\n var imageBuffer = captureSnapshot(); // $FlowFixMe\n\n var file = new File([imageBuffer], 'thumbnail.png', {\n type: 'image/png'\n });\n\n if (imageBuffer) {\n // $FlowFixMe\n upload(file);\n closeModal();\n } else {\n onError();\n }\n }\n\n function captureSnapshot() {\n var player = playerRef.current;\n\n if (!player) {\n return;\n }\n\n var canvas = document.createElement('canvas');\n canvas.width = player.videoWidth;\n canvas.height = player.videoHeight;\n var context = canvas.getContext('2d');\n context.drawImage(player, 0, 0, canvas.width, canvas.height);\n var dataURL = canvas.toDataURL();\n var rawData = dataURL.replace(/data:image\\/\\w+;base64,/i, '');\n canvas.remove();\n return Buffer.from(rawData, 'base64');\n }\n\n function resize() {\n var player = playerRef.current;\n\n if (!player) {\n return;\n }\n\n var fixedWidth = 450;\n var videoWidth = player.videoWidth;\n var videoHeight = player.videoHeight;\n player.width = fixedWidth;\n player.height = Math.floor(videoHeight * (fixedWidth / videoWidth));\n }\n\n function onError() {\n showToast({\n isError: true,\n message: __(\"Something didn't work. Please try again.\")\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: __('Upload Thumbnail'),\n contentLabel: __('Confirm Thumbnail Upload'),\n type: \"confirm\",\n confirmButtonLabel: __('Upload'),\n onConfirmed: uploadImage,\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('Pause at any time to select a thumbnail from your video'), \".\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"video\", {\n ref: playerRef,\n src: videoSrc,\n onLoadedMetadata: resize,\n onError: onError,\n controls: true\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalAutoGenerateThumbnail);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWwvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWwvdmlldy5qc3g/MDBmMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnbW9kYWwvbW9kYWwnO1xuaW1wb3J0IHsgZm9ybWF0RmlsZVN5c3RlbVBhdGggfSBmcm9tICd1dGlsL3VybCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVwbG9hZDogV2ViRmlsZSA9PiB2b2lkLFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBzaG93VG9hc3Q6ICh7fSkgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIE1vZGFsQXV0b0dlbmVyYXRlVGh1bWJuYWlsKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNsb3NlTW9kYWwsIGZpbGVQYXRoLCB1cGxvYWQsIHNob3dUb2FzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBsYXllclJlZiA9IHVzZVJlZigpO1xuICBsZXQgdmlkZW9TcmM7XG4gIGlmICh0eXBlb2YgZmlsZVBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgdmlkZW9TcmMgPSBmb3JtYXRGaWxlU3lzdGVtUGF0aChmaWxlUGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgdmlkZW9TcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGVQYXRoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwbG9hZEltYWdlKCkge1xuICAgIGNvbnN0IGltYWdlQnVmZmVyID0gY2FwdHVyZVNuYXBzaG90KCk7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbaW1hZ2VCdWZmZXJdLCAndGh1bWJuYWlsLnBuZycsIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XG5cbiAgICBpZiAoaW1hZ2VCdWZmZXIpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHVwbG9hZChmaWxlKTtcbiAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhcHR1cmVTbmFwc2hvdCgpOiA/QnVmZmVyIHtcbiAgICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIXBsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHBsYXllci52aWRlb1dpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBwbGF5ZXIudmlkZW9IZWlnaHQ7XG4gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKHBsYXllciwgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICBjb25zdCBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgIGNvbnN0IHJhd0RhdGEgPSBkYXRhVVJMLnJlcGxhY2UoL2RhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvaSwgJycpO1xuICAgIGNhbnZhcy5yZW1vdmUoKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocmF3RGF0YSwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHBsYXllciA9IHBsYXllclJlZi5jdXJyZW50O1xuICAgIGlmICghcGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZml4ZWRXaWR0aCA9IDQ1MDtcbiAgICBjb25zdCB2aWRlb1dpZHRoID0gcGxheWVyLnZpZGVvV2lkdGg7XG4gICAgY29uc3QgdmlkZW9IZWlnaHQgPSBwbGF5ZXIudmlkZW9IZWlnaHQ7XG4gICAgcGxheWVyLndpZHRoID0gZml4ZWRXaWR0aDtcbiAgICBwbGF5ZXIuaGVpZ2h0ID0gTWF0aC5mbG9vcih2aWRlb0hlaWdodCAqIChmaXhlZFdpZHRoIC8gdmlkZW9XaWR0aCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcigpOiB2b2lkIHtcbiAgICBzaG93VG9hc3QoeyBpc0Vycm9yOiB0cnVlLCBtZXNzYWdlOiBfXyhcIlNvbWV0aGluZyBkaWRuJ3Qgd29yay4gUGxlYXNlIHRyeSBhZ2Fpbi5cIikgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgaXNPcGVuXG4gICAgICB0aXRsZT17X18oJ1VwbG9hZCBUaHVtYm5haWwnKX1cbiAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0NvbmZpcm0gVGh1bWJuYWlsIFVwbG9hZCcpfVxuICAgICAgdHlwZT1cImNvbmZpcm1cIlxuICAgICAgY29uZmlybUJ1dHRvbkxhYmVsPXtfXygnVXBsb2FkJyl9XG4gICAgICBvbkNvbmZpcm1lZD17dXBsb2FkSW1hZ2V9XG4gICAgICBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9XG4gICAgPlxuICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj57X18oJ1BhdXNlIGF0IGFueSB0aW1lIHRvIHNlbGVjdCBhIHRodW1ibmFpbCBmcm9tIHlvdXIgdmlkZW8nKX0uPC9wPlxuICAgICAgPHZpZGVvIHJlZj17cGxheWVyUmVmfSBzcmM9e3ZpZGVvU3JjfSBvbkxvYWRlZE1ldGFkYXRhPXtyZXNpemV9IG9uRXJyb3I9e29uRXJyb3J9IGNvbnRyb2xzIC8+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWw7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalAutoGenerateThumbnail/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalAutoUpdateDownloaded/index.js": -/*!******************************************************!*\ - !*** ../ui/modal/modalAutoUpdateDownloaded/index.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalAutoUpdateDownloaded/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n declineAutoUpdate: function declineAutoUpdate() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doAutoUpdateDeclined\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBdXRvVXBkYXRlRG93bmxvYWRlZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEF1dG9VcGRhdGVEb3dubG9hZGVkL2luZGV4LmpzPzcxZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvQXV0b1VwZGF0ZURlY2xpbmVkLCBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbEF1dG9VcGRhdGVEb3dubG9hZGVkIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbiAgZGVjbGluZUF1dG9VcGRhdGU6ICgpID0+IGRpc3BhdGNoKGRvQXV0b1VwZGF0ZURlY2xpbmVkKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxBdXRvVXBkYXRlRG93bmxvYWRlZCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalAutoUpdateDownloaded/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalAutoUpdateDownloaded/view.jsx": -/*!******************************************************!*\ - !*** ../ui/modal/modalAutoUpdateDownloaded/view.jsx ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar ModalAutoUpdateDownloaded = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalAutoUpdateDownloaded, _React$PureComponent);\n\n function ModalAutoUpdateDownloaded(props) {\n var _this;\n\n _classCallCheck(this, ModalAutoUpdateDownloaded);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ModalAutoUpdateDownloaded).call(this, props));\n _this.state = {\n disabled: false\n };\n return _this;\n }\n\n _createClass(ModalAutoUpdateDownloaded, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n declineAutoUpdate = _this$props.declineAutoUpdate;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n type: \"confirm\",\n contentLabel: __('Upgrade Downloaded'),\n title: __('LBRY Leveled Up'),\n confirmButtonLabel: __('Upgrade Now'),\n abortButtonLabel: __('Not now'),\n confirmButtonDisabled: this.state.disabled,\n onConfirmed: function onConfirmed() {\n _this2.setState({\n disabled: true\n });\n\n ipcRenderer.send('autoUpdateAccepted');\n },\n onAborted: function onAborted() {\n declineAutoUpdate();\n closeModal();\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('A new version of LBRY is ready for you.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('Want to know what has changed?'), \" See the\", ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('release notes'),\n href: \"https://github.com/lbryio/lbry-desktop/releases\"\n }), \".\"));\n }\n }]);\n\n return ModalAutoUpdateDownloaded;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalAutoUpdateDownloaded);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxBdXRvVXBkYXRlRG93bmxvYWRlZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEF1dG9VcGRhdGVEb3dubG9hZGVkL3ZpZXcuanN4Pzk1MmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsb3NlTW9kYWw6IGFueSA9PiBhbnksXG4gIGRlY2xpbmVBdXRvVXBkYXRlOiAoKSA9PiBhbnksXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBkaXNhYmxlZDogYm9vbGVhbixcbn07XG5cbmNsYXNzIE1vZGFsQXV0b1VwZGF0ZURvd25sb2FkZWQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsLCBkZWNsaW5lQXV0b1VwZGF0ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgaXNPcGVuXG4gICAgICAgIHR5cGU9XCJjb25maXJtXCJcbiAgICAgICAgY29udGVudExhYmVsPXtfXygnVXBncmFkZSBEb3dubG9hZGVkJyl9XG4gICAgICAgIHRpdGxlPXtfXygnTEJSWSBMZXZlbGVkIFVwJyl9XG4gICAgICAgIGNvbmZpcm1CdXR0b25MYWJlbD17X18oJ1VwZ3JhZGUgTm93Jyl9XG4gICAgICAgIGFib3J0QnV0dG9uTGFiZWw9e19fKCdOb3Qgbm93Jyl9XG4gICAgICAgIGNvbmZpcm1CdXR0b25EaXNhYmxlZD17dGhpcy5zdGF0ZS5kaXNhYmxlZH1cbiAgICAgICAgb25Db25maXJtZWQ9eygpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXV0b1VwZGF0ZUFjY2VwdGVkJyk7XG4gICAgICAgIH19XG4gICAgICAgIG9uQWJvcnRlZD17KCkgPT4ge1xuICAgICAgICAgIGRlY2xpbmVBdXRvVXBkYXRlKCk7XG4gICAgICAgICAgY2xvc2VNb2RhbCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8cD57X18oJ0EgbmV3IHZlcnNpb24gb2YgTEJSWSBpcyByZWFkeSBmb3IgeW91LicpfTwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPlxuICAgICAgICAgIHtfXygnV2FudCB0byBrbm93IHdoYXQgaGFzIGNoYW5nZWQ/Jyl9IFNlZSB0aGV7JyAnfVxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygncmVsZWFzZSBub3RlcycpfSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LWRlc2t0b3AvcmVsZWFzZXNcIiAvPi5cbiAgICAgICAgPC9wPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsQXV0b1VwZGF0ZURvd25sb2FkZWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUhBO0FBTUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWtCQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQXJDQTtBQUNBO0FBdUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalAutoUpdateDownloaded/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalChannelCreate/index.js": -/*!***********************************************!*\ - !*** ../ui/modal/modalChannelCreate/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalChannelCreate/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDaGFubmVsQ3JlYXRlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ2hhbm5lbENyZWF0ZS9pbmRleC5qcz9mNDkxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBDaGFubmVsQ3JlYXRlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7fSk7XG5cbmNvbnN0IHBlcmZvcm0gPSB7XG4gIGRvSGlkZU1vZGFsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKENoYW5uZWxDcmVhdGUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalChannelCreate/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalChannelCreate/view.jsx": -/*!***********************************************!*\ - !*** ../ui/modal/modalChannelCreate/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_channelForm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/channelForm */ \"../ui/component/channelForm/index.js\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n\n\n\n\nvar ModalChannelCreate = function ModalChannelCreate(props) {\n var doHideModal = props.doHideModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n onAborted: doHideModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_channelForm__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n onSuccess: doHideModal\n }));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalChannelCreate);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDaGFubmVsQ3JlYXRlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ2hhbm5lbENyZWF0ZS92aWV3LmpzeD9mOTkyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENoYW5uZWxGb3JtIGZyb20gJ2NvbXBvbmVudC9jaGFubmVsRm9ybSc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcblxudHlwZSBQcm9wcyA9IHsgZG9IaWRlTW9kYWw6ICgpID0+IHZvaWQgfTtcblxuY29uc3QgTW9kYWxDaGFubmVsQ3JlYXRlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGRvSGlkZU1vZGFsIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc09wZW4gdHlwZT1cImNhcmRcIiBvbkFib3J0ZWQ9e2RvSGlkZU1vZGFsfT5cbiAgICAgIDxDaGFubmVsRm9ybSBvblN1Y2Nlc3M9e2RvSGlkZU1vZGFsfSAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENoYW5uZWxDcmVhdGU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBQ0E7QUFTQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalChannelCreate/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalCommentAcknowledgement/index.js": -/*!********************************************************!*\ - !*** ../ui/modal/modalCommentAcknowledgement/index.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalCommentAcknowledgement/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb21tZW50QWNrbm93bGVkZ2VtZW50L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ29tbWVudEFja25vd2xlZGdlbWVudC9pbmRleC5qcz82ZDlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbENvbW1lbnRBY2tub3dsZWRnZW1lbnQgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxDb21tZW50QWNrbm93bGVkZ2VtZW50KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalCommentAcknowledgement/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalCommentAcknowledgement/view.jsx": -/*!********************************************************!*\ - !*** ../ui/modal/modalCommentAcknowledgement/view.jsx ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\nvar ModalCommentAcknowledgement = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalCommentAcknowledgement, _React$PureComponent);\n\n function ModalCommentAcknowledgement() {\n _classCallCheck(this, ModalCommentAcknowledgement);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalCommentAcknowledgement).apply(this, arguments));\n }\n\n _createClass(ModalCommentAcknowledgement, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n onCommentAcknowledge = _this$props.onCommentAcknowledge;\n\n function onAbortedOrConfirmed() {\n onCommentAcknowledge();\n closeModal();\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n onAborted: onAbortedOrConfirmed,\n title: __('Comment Acknowledgement'),\n onConfirmed: onAbortedOrConfirmed\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('A few things to know before making your comment:')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, __('Commenting is in alpha. During the alpha, all comments are sent to a LBRY, Inc. server, not the LBRY network itself.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, __('All comments are viewable by anyone, keep this in mind before writing a comment.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, __('When the alpha ends, we will attempt to transition comments, but do not promise to do so.'))));\n }\n }]);\n\n return ModalCommentAcknowledgement;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalCommentAcknowledgement);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb21tZW50QWNrbm93bGVkZ2VtZW50L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ29tbWVudEFja25vd2xlZGdlbWVudC92aWV3LmpzeD9hYjY5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ29tbWVudEFja25vd2xlZGdlOiAoKSA9PiB2b2lkLFxuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxufTtcblxuY2xhc3MgTW9kYWxDb21tZW50QWNrbm93bGVkZ2VtZW50IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsLCBvbkNvbW1lbnRBY2tub3dsZWRnZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGZ1bmN0aW9uIG9uQWJvcnRlZE9yQ29uZmlybWVkKCkge1xuICAgICAgb25Db21tZW50QWNrbm93bGVkZ2UoKTtcbiAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGlzT3BlblxuICAgICAgICBvbkFib3J0ZWQ9e29uQWJvcnRlZE9yQ29uZmlybWVkfVxuICAgICAgICB0aXRsZT17X18oJ0NvbW1lbnQgQWNrbm93bGVkZ2VtZW50Jyl9XG4gICAgICAgIG9uQ29uZmlybWVkPXtvbkFib3J0ZWRPckNvbmZpcm1lZH1cbiAgICAgID5cbiAgICAgICAgPHA+e19fKCdBIGZldyB0aGluZ3MgdG8ga25vdyBiZWZvcmUgbWFraW5nIHlvdXIgY29tbWVudDonKX08L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICB7X18oXG4gICAgICAgICAgICAgICdDb21tZW50aW5nIGlzIGluIGFscGhhLiBEdXJpbmcgdGhlIGFscGhhLCBhbGwgY29tbWVudHMgYXJlIHNlbnQgdG8gYSBMQlJZLCBJbmMuIHNlcnZlciwgbm90IHRoZSBMQlJZIG5ldHdvcmsgaXRzZWxmLidcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICB7X18oJ0FsbCBjb21tZW50cyBhcmUgdmlld2FibGUgYnkgYW55b25lLCBrZWVwIHRoaXMgaW4gbWluZCBiZWZvcmUgd3JpdGluZyBhIGNvbW1lbnQuJyl9XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+e19fKCdXaGVuIHRoZSBhbHBoYSBlbmRzLCB3ZSB3aWxsIGF0dGVtcHQgdG8gdHJhbnNpdGlvbiBjb21tZW50cywgYnV0IGRvIG5vdCBwcm9taXNlIHRvIGRvIHNvLicpfTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxDb21tZW50QWNrbm93bGVkZ2VtZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQU1BOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBb0JBOzs7O0FBOUJBO0FBQ0E7QUFnQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalCommentAcknowledgement/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalConfirmThumbnailUpload/index.js": -/*!********************************************************!*\ - !*** ../ui/modal/modalConfirmThumbnailUpload/index.js ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalConfirmThumbnailUpload/view.jsx\");\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n upload: function upload(file) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doUploadThumbnail\"])(null, file, null, null, file.path));\n },\n updatePublishForm: function updatePublishForm(value) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doUpdatePublishForm\"])(value));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVGh1bWJuYWlsVXBsb2FkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ29uZmlybVRodW1ibmFpbFVwbG9hZC9pbmRleC5qcz9hN2IwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7IGRvVXBsb2FkVGh1bWJuYWlsLCBkb1VwZGF0ZVB1Ymxpc2hGb3JtIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgTW9kYWxDb25maXJtVGh1bWJuYWlsVXBsb2FkIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbiAgdXBsb2FkOiBmaWxlID0+IGRpc3BhdGNoKGRvVXBsb2FkVGh1bWJuYWlsKG51bGwsIGZpbGUsIG51bGwsIG51bGwsIGZpbGUucGF0aCkpLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogdmFsdWUgPT4gZGlzcGF0Y2goZG9VcGRhdGVQdWJsaXNoRm9ybSh2YWx1ZSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxDb25maXJtVGh1bWJuYWlsVXBsb2FkKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalConfirmThumbnailUpload/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalConfirmThumbnailUpload/view.jsx": -/*!********************************************************!*\ - !*** ../ui/modal/modalConfirmThumbnailUpload/view.jsx ***! - \********************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\nvar ModalConfirmThumbnailUpload = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalConfirmThumbnailUpload, _React$PureComponent);\n\n function ModalConfirmThumbnailUpload() {\n _classCallCheck(this, ModalConfirmThumbnailUpload);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalConfirmThumbnailUpload).apply(this, arguments));\n }\n\n _createClass(ModalConfirmThumbnailUpload, [{\n key: \"upload\",\n value: function upload() {\n var _this$props = this.props,\n upload = _this$props.upload,\n updatePublishForm = _this$props.updatePublishForm,\n closeModal = _this$props.closeModal,\n file = _this$props.file;\n upload(file);\n updatePublishForm({\n thumbnailPath: file.path\n });\n closeModal();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props2 = this.props,\n closeModal = _this$props2.closeModal,\n file = _this$props2.file;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: __('Upload Thumbnail'),\n contentLabel: __('Confirm Thumbnail Upload'),\n type: \"confirm\",\n confirmButtonLabel: __('Upload'),\n onConfirmed: function onConfirmed() {\n return _this.upload();\n },\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Are you sure you want to upload this thumbnail to spee.ch'), \"?\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"blockquote\", null, file.path || file.name));\n }\n }]);\n\n return ModalConfirmThumbnailUpload;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalConfirmThumbnailUpload);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVGh1bWJuYWlsVXBsb2FkL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsQ29uZmlybVRodW1ibmFpbFVwbG9hZC92aWV3LmpzeD80ZWEyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVwbG9hZDogV2ViRmlsZSA9PiB2b2lkLFxuICBmaWxlOiBXZWJGaWxlLFxuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICB1cGRhdGVQdWJsaXNoRm9ybTogKHt9KSA9PiB2b2lkLFxufTtcblxuY2xhc3MgTW9kYWxDb25maXJtVGh1bWJuYWlsVXBsb2FkIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICB1cGxvYWQoKSB7XG4gICAgY29uc3QgeyB1cGxvYWQsIHVwZGF0ZVB1Ymxpc2hGb3JtLCBjbG9zZU1vZGFsLCBmaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHVwbG9hZChmaWxlKTtcbiAgICB1cGRhdGVQdWJsaXNoRm9ybSh7IHRodW1ibmFpbFBhdGg6IGZpbGUucGF0aCB9KTtcbiAgICBjbG9zZU1vZGFsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsLCBmaWxlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbFxuICAgICAgICBpc09wZW5cbiAgICAgICAgdGl0bGU9e19fKCdVcGxvYWQgVGh1bWJuYWlsJyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0NvbmZpcm0gVGh1bWJuYWlsIFVwbG9hZCcpfVxuICAgICAgICB0eXBlPVwiY29uZmlybVwiXG4gICAgICAgIGNvbmZpcm1CdXR0b25MYWJlbD17X18oJ1VwbG9hZCcpfVxuICAgICAgICBvbkNvbmZpcm1lZD17KCkgPT4gdGhpcy51cGxvYWQoKX1cbiAgICAgICAgb25BYm9ydGVkPXtjbG9zZU1vZGFsfVxuICAgICAgPlxuICAgICAgICA8cD57X18oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1cGxvYWQgdGhpcyB0aHVtYm5haWwgdG8gc3BlZS5jaCcpfT88L3A+XG5cbiAgICAgICAgPGJsb2NrcXVvdGU+e2ZpbGUucGF0aCB8fCBmaWxlLm5hbWV9PC9ibG9ja3F1b3RlPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsQ29uZmlybVRodW1ibmFpbFVwbG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFRQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQU9BO0FBUEE7QUFjQTs7OztBQTFCQTtBQUNBO0FBNEJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalConfirmThumbnailUpload/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalConfirmTransaction/index.js": -/*!****************************************************!*\ - !*** ../ui/modal/modalConfirmTransaction/index.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalConfirmTransaction/view.jsx\");\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n sendToAddress: function sendToAddress(address, amount) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doSendDraftTransaction\"])(address, amount));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVHJhbnNhY3Rpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVHJhbnNhY3Rpb24vaW5kZXguanM/NGE5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9TZW5kRHJhZnRUcmFuc2FjdGlvbiB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgTW9kYWxDb25maXJtVHJhbnNhY3Rpb24gZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxuICBzZW5kVG9BZGRyZXNzOiAoYWRkcmVzcywgYW1vdW50KSA9PiBkaXNwYXRjaChkb1NlbmREcmFmdFRyYW5zYWN0aW9uKGFkZHJlc3MsIGFtb3VudCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxDb25maXJtVHJhbnNhY3Rpb24pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalConfirmTransaction/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalConfirmTransaction/view.jsx": -/*!****************************************************!*\ - !*** ../ui/modal/modalConfirmTransaction/view.jsx ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ModalConfirmTransaction = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalConfirmTransaction, _React$PureComponent);\n\n function ModalConfirmTransaction() {\n _classCallCheck(this, ModalConfirmTransaction);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalConfirmTransaction).apply(this, arguments));\n }\n\n _createClass(ModalConfirmTransaction, [{\n key: \"onConfirmed\",\n value: function onConfirmed() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n sendToAddress = _this$props.sendToAddress,\n amount = _this$props.amount,\n address = _this$props.address;\n sendToAddress(address, amount);\n closeModal();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props2 = this.props,\n amount = _this$props2.amount,\n address = _this$props2.address,\n closeModal = _this$props2.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_3__[\"Modal\"], {\n isOpen: true,\n title: __('Send LBC'),\n contentLabel: __('Confirm Transaction'),\n type: \"custom\",\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"Form\"], {\n onSubmit: function onSubmit() {\n return _this.onConfirmed();\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Sending: ')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"blockquote\", null, amount, \" LBC\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('To address: ')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"blockquote\", null, address), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Once the transaction is sent, it cannot be reversed.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n autoFocus: true,\n button: \"primary\",\n label: __('Send'),\n onClick: function onClick() {\n return _this.onConfirmed();\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: closeModal\n }))));\n }\n }]);\n\n return ModalConfirmTransaction;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalConfirmTransaction);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVHJhbnNhY3Rpb24vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxDb25maXJtVHJhbnNhY3Rpb24vdmlldy5qc3g/OTcxOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnbW9kYWwvbW9kYWwnO1xuXG50eXBlIFByb3BzID0ge1xuICBhZGRyZXNzOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyLFxuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBzZW5kVG9BZGRyZXNzOiAoc3RyaW5nLCBudW1iZXIpID0+IHZvaWQsXG59O1xuXG5jbGFzcyBNb2RhbENvbmZpcm1UcmFuc2FjdGlvbiBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgb25Db25maXJtZWQoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsLCBzZW5kVG9BZGRyZXNzLCBhbW91bnQsIGFkZHJlc3MgfSA9IHRoaXMucHJvcHM7XG4gICAgc2VuZFRvQWRkcmVzcyhhZGRyZXNzLCBhbW91bnQpO1xuICAgIGNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGFtb3VudCwgYWRkcmVzcywgY2xvc2VNb2RhbCB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGlzT3BlblxuICAgICAgICB0aXRsZT17X18oJ1NlbmQgTEJDJyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0NvbmZpcm0gVHJhbnNhY3Rpb24nKX1cbiAgICAgICAgdHlwZT1cImN1c3RvbVwiXG4gICAgICAgIG9uQWJvcnRlZD17Y2xvc2VNb2RhbH1cbiAgICAgID5cbiAgICAgICAgPEZvcm0gb25TdWJtaXQ9eygpID0+IHRoaXMub25Db25maXJtZWQoKX0+XG4gICAgICAgICAgPHA+e19fKCdTZW5kaW5nOiAnKX08L3A+XG4gICAgICAgICAgPGJsb2NrcXVvdGU+e2Ftb3VudH0gTEJDPC9ibG9ja3F1b3RlPlxuICAgICAgICAgIDxwPntfXygnVG8gYWRkcmVzczogJyl9PC9wPlxuICAgICAgICAgIDxibG9ja3F1b3RlPnthZGRyZXNzfTwvYmxvY2txdW90ZT5cbiAgICAgICAgICA8cD57X18oJ09uY2UgdGhlIHRyYW5zYWN0aW9uIGlzIHNlbnQsIGl0IGNhbm5vdCBiZSByZXZlcnNlZC4nKX08L3A+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8QnV0dG9uIGF1dG9Gb2N1cyBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdTZW5kJyl9IG9uQ2xpY2s9eygpID0+IHRoaXMub25Db25maXJtZWQoKX0gLz5cbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRm9ybT5cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENvbmZpcm1UcmFuc2FjdGlvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7Ozs7QUE5QkE7QUFDQTtBQWdDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalConfirmTransaction/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalDownloading/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalDownloading/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalDownloading/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n downloadProgress: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectDownloadProgress\"])(state),\n downloadComplete: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectDownloadComplete\"])(state),\n downloadItem: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectUpgradeDownloadPath\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n startUpgrade: function startUpgrade() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doStartUpgrade\"])());\n },\n cancelUpgrade: function cancelUpgrade() {\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doCancelUpgrade\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxEb3dubG9hZGluZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbERvd25sb2FkaW5nL2luZGV4LmpzPzcwNTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvU3RhcnRVcGdyYWRlLCBkb0NhbmNlbFVwZ3JhZGUsIGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgc2VsZWN0RG93bmxvYWRQcm9ncmVzcywgc2VsZWN0RG93bmxvYWRDb21wbGV0ZSwgc2VsZWN0VXBncmFkZURvd25sb2FkUGF0aCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9hcHAnO1xuaW1wb3J0IE1vZGFsRG93bmxvYWRpbmcgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZG93bmxvYWRQcm9ncmVzczogc2VsZWN0RG93bmxvYWRQcm9ncmVzcyhzdGF0ZSksXG4gIGRvd25sb2FkQ29tcGxldGU6IHNlbGVjdERvd25sb2FkQ29tcGxldGUoc3RhdGUpLFxuICBkb3dubG9hZEl0ZW06IHNlbGVjdFVwZ3JhZGVEb3dubG9hZFBhdGgoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBzdGFydFVwZ3JhZGU6ICgpID0+IGRpc3BhdGNoKGRvU3RhcnRVcGdyYWRlKCkpLFxuICBjYW5jZWxVcGdyYWRlOiAoKSA9PiB7XG4gICAgZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSk7XG4gICAgZGlzcGF0Y2goZG9DYW5jZWxVcGdyYWRlKCkpO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbERvd25sb2FkaW5nKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalDownloading/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalDownloading/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalDownloading/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var rc_progress__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-progress */ \"../node_modules/rc-progress/es/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ModalDownloading = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalDownloading, _React$PureComponent);\n\n function ModalDownloading() {\n _classCallCheck(this, ModalDownloading);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalDownloading).apply(this, arguments));\n }\n\n _createClass(ModalDownloading, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n downloadProgress = _this$props.downloadProgress,\n downloadComplete = _this$props.downloadComplete,\n downloadItem = _this$props.downloadItem,\n startUpgrade = _this$props.startUpgrade,\n cancelUpgrade = _this$props.cancelUpgrade;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n title: __('Downloading Update'),\n isOpen: true,\n contentLabel: __('Downloading Update'),\n type: \"custom\"\n }, downloadProgress ? \"\".concat(downloadProgress, \"% \").concat(__('complete')) : null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(rc_progress__WEBPACK_IMPORTED_MODULE_2__[\"Line\"], {\n percent: downloadProgress || 0,\n strokeWidth: \"4\"\n }), downloadComplete ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Click \"Begin Upgrade\" to start the upgrade process.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('The app will close (if not, quit with CTRL-Q), and you will be prompted to install the latest version of LBRY.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('To launch installation manually, close LBRY (CTRL-Q) and run the command below in the terminal.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"blockquote\", null, \"sudo dpkg -i \", downloadItem), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('After the install is complete, please reopen the app.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Note: You can also install the AppImage version for streamlined updates.'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Download here.'),\n href: \"https://lbry.com/get/lbry.AppImage\"\n }))) : null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, downloadComplete ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('Begin Upgrade'),\n onClick: startUpgrade\n }) : null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: cancelUpgrade\n })));\n }\n }]);\n\n return ModalDownloading;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalDownloading);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxEb3dubG9hZGluZy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbERvd25sb2FkaW5nL3ZpZXcuanN4PzMyZWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCB7IExpbmUgfSBmcm9tICdyYy1wcm9ncmVzcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBkb3dubG9hZFByb2dyZXNzOiA/bnVtYmVyLFxuICBkb3dubG9hZENvbXBsZXRlOiBib29sZWFuLFxuICBkb3dubG9hZEl0ZW06IHN0cmluZyxcbiAgc3RhcnRVcGdyYWRlOiAoKSA9PiB2b2lkLFxuICBjYW5jZWxVcGdyYWRlOiAoKSA9PiB2b2lkLFxufTtcblxuY2xhc3MgTW9kYWxEb3dubG9hZGluZyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZG93bmxvYWRQcm9ncmVzcywgZG93bmxvYWRDb21wbGV0ZSwgZG93bmxvYWRJdGVtLCBzdGFydFVwZ3JhZGUsIGNhbmNlbFVwZ3JhZGUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsIHRpdGxlPXtfXygnRG93bmxvYWRpbmcgVXBkYXRlJyl9IGlzT3BlbiBjb250ZW50TGFiZWw9e19fKCdEb3dubG9hZGluZyBVcGRhdGUnKX0gdHlwZT1cImN1c3RvbVwiPlxuICAgICAgICB7ZG93bmxvYWRQcm9ncmVzcyA/IGAke2Rvd25sb2FkUHJvZ3Jlc3N9JSAke19fKCdjb21wbGV0ZScpfWAgOiBudWxsfVxuICAgICAgICA8TGluZSBwZXJjZW50PXtkb3dubG9hZFByb2dyZXNzIHx8IDB9IHN0cm9rZVdpZHRoPVwiNFwiIC8+XG4gICAgICAgIHtkb3dubG9hZENvbXBsZXRlID8gKFxuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxwPntfXygnQ2xpY2sgXCJCZWdpbiBVcGdyYWRlXCIgdG8gc3RhcnQgdGhlIHVwZ3JhZGUgcHJvY2Vzcy4nKX08L3A+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICAgICdUaGUgYXBwIHdpbGwgY2xvc2UgKGlmIG5vdCwgcXVpdCB3aXRoIENUUkwtUSksIGFuZCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0byBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBMQlJZLidcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7X18oJ1RvIGxhdW5jaCBpbnN0YWxsYXRpb24gbWFudWFsbHksIGNsb3NlIExCUlkgKENUUkwtUSkgYW5kIHJ1biB0aGUgY29tbWFuZCBiZWxvdyBpbiB0aGUgdGVybWluYWwuJyl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8YmxvY2txdW90ZT5zdWRvIGRwa2cgLWkge2Rvd25sb2FkSXRlbX08L2Jsb2NrcXVvdGU+XG4gICAgICAgICAgICA8cD57X18oJ0FmdGVyIHRoZSBpbnN0YWxsIGlzIGNvbXBsZXRlLCBwbGVhc2UgcmVvcGVuIHRoZSBhcHAuJyl9PC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHtfXygnTm90ZTogWW91IGNhbiBhbHNvIGluc3RhbGwgdGhlIEFwcEltYWdlIHZlcnNpb24gZm9yIHN0cmVhbWxpbmVkIHVwZGF0ZXMuJyl9eycgJ31cbiAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdEb3dubG9hZCBoZXJlLicpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9nZXQvbGJyeS5BcHBJbWFnZVwiIC8+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAge2Rvd25sb2FkQ29tcGxldGUgPyA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiBsYWJlbD17X18oJ0JlZ2luIFVwZ3JhZGUnKX0gb25DbGljaz17c3RhcnRVcGdyYWRlfSAvPiA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdDYW5jZWwnKX0gb25DbGljaz17Y2FuY2VsVXBncmFkZX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxEb3dubG9hZGluZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7Ozs7QUFsQ0E7QUFDQTtBQW9DQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalDownloading/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalError/index.js": -/*!***************************************!*\ - !*** ../ui/modal/modalError/index.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalError/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doDismissError\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxFcnJvci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEVycm9yL2luZGV4LmpzP2I5NTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvRGlzbWlzc0Vycm9yIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgTW9kYWxFcnJvciBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9EaXNtaXNzRXJyb3IoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgcGVyZm9ybVxuKShNb2RhbEVycm9yKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalError/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalError/view.jsx": -/*!***************************************!*\ - !*** ../ui/modal/modalError/view.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar ModalError = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalError, _React$PureComponent);\n\n function ModalError() {\n _classCallCheck(this, ModalError);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalError).apply(this, arguments));\n }\n\n _createClass(ModalError, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var error = this.props.error; // Yuck\n // https://github.com/lbryio/lbry-sdk/issues/1118\n // The sdk logs failed downloads, they happen so often that it's mostly noise in the desktop logs\n\n var errorMessage = typeof error === 'string' ? error : error.message;\n var failedToDownloadError = errorMessage.startsWith('Failed to download');\n\n if (undefined === 'production' && !failedToDownloadError) {\n lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"Lbryio\"].call('event', 'desktop_error', {\n error_message: JSON.stringify(error)\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n error = _this$props.error;\n var errorObj = typeof error === 'string' ? {\n message: error\n } : error;\n var errorKeyLabels = {\n connectionString: __('API connection string'),\n method: __('Method'),\n params: __('Parameters'),\n code: __('Error code'),\n message: __('Error message'),\n data: __('Error data')\n };\n var errorInfoList = [];\n\n for (var _i = 0, _Object$keys = Object.keys(errorObj); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n var val = typeof errorObj[key] === 'string' ? errorObj[key] : JSON.stringify(errorObj[key]);\n var label = errorKeyLabels[key];\n errorInfoList.push(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"li\", {\n key: key\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"strong\", null, label), \": \", val));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Error'),\n title: __('Error'),\n className: \"error-modal\",\n onConfirmed: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __(\"We're sorry that LBRY has encountered an error. This has been reported and we will investigate the problem.\")), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"ul\", {\n className: \"error-modal__error-list ul--no-style\"\n }, errorInfoList));\n }\n }]);\n\n return ModalError;\n}(react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalError);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxFcnJvci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEVycm9yL3ZpZXcuanN4P2MxZTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IExicnlpbyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnbW9kYWwvbW9kYWwnO1xuXG50eXBlIFByb3BzID0ge1xuICBlcnJvcjogc3RyaW5nIHwgeyBtZXNzYWdlOiBzdHJpbmcgfSxcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbn07XG5cbmNsYXNzIE1vZGFsRXJyb3IgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBZdWNrXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LXNkay9pc3N1ZXMvMTExOFxuICAgIC8vIFRoZSBzZGsgbG9ncyBmYWlsZWQgZG93bmxvYWRzLCB0aGV5IGhhcHBlbiBzbyBvZnRlbiB0aGF0IGl0J3MgbW9zdGx5IG5vaXNlIGluIHRoZSBkZXNrdG9wIGxvZ3NcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiBlcnJvci5tZXNzYWdlO1xuICAgIGNvbnN0IGZhaWxlZFRvRG93bmxvYWRFcnJvciA9IGVycm9yTWVzc2FnZS5zdGFydHNXaXRoKCdGYWlsZWQgdG8gZG93bmxvYWQnKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nICYmICFmYWlsZWRUb0Rvd25sb2FkRXJyb3IpIHtcbiAgICAgIExicnlpby5jYWxsKCdldmVudCcsICdkZXNrdG9wX2Vycm9yJywgeyBlcnJvcl9tZXNzYWdlOiBKU09OLnN0cmluZ2lmeShlcnJvcikgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xvc2VNb2RhbCwgZXJyb3IgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBlcnJvck9iaiA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyB7IG1lc3NhZ2U6IGVycm9yIH0gOiBlcnJvcjtcblxuICAgIGNvbnN0IGVycm9yS2V5TGFiZWxzID0ge1xuICAgICAgY29ubmVjdGlvblN0cmluZzogX18oJ0FQSSBjb25uZWN0aW9uIHN0cmluZycpLFxuICAgICAgbWV0aG9kOiBfXygnTWV0aG9kJyksXG4gICAgICBwYXJhbXM6IF9fKCdQYXJhbWV0ZXJzJyksXG4gICAgICBjb2RlOiBfXygnRXJyb3IgY29kZScpLFxuICAgICAgbWVzc2FnZTogX18oJ0Vycm9yIG1lc3NhZ2UnKSxcbiAgICAgIGRhdGE6IF9fKCdFcnJvciBkYXRhJyksXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9ySW5mb0xpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlcnJvck9iaikpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHR5cGVvZiBlcnJvck9ialtrZXldID09PSAnc3RyaW5nJyA/IGVycm9yT2JqW2tleV0gOiBKU09OLnN0cmluZ2lmeShlcnJvck9ialtrZXldKTtcbiAgICAgIGNvbnN0IGxhYmVsID0gZXJyb3JLZXlMYWJlbHNba2V5XTtcbiAgICAgIGVycm9ySW5mb0xpc3QucHVzaChcbiAgICAgICAgPGxpIGtleT17a2V5fT5cbiAgICAgICAgICA8c3Ryb25nPntsYWJlbH08L3N0cm9uZz46IHt2YWx9XG4gICAgICAgIDwvbGk+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgaXNPcGVuIGNvbnRlbnRMYWJlbD17X18oJ0Vycm9yJyl9IHRpdGxlPXtfXygnRXJyb3InKX0gY2xhc3NOYW1lPVwiZXJyb3ItbW9kYWxcIiBvbkNvbmZpcm1lZD17Y2xvc2VNb2RhbH0+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgIFwiV2UncmUgc29ycnkgdGhhdCBMQlJZIGhhcyBlbmNvdW50ZXJlZCBhbiBlcnJvci4gVGhpcyBoYXMgYmVlbiByZXBvcnRlZCBhbmQgd2Ugd2lsbCBpbnZlc3RpZ2F0ZSB0aGUgcHJvYmxlbS5cIlxuICAgICAgICAgICl9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cImVycm9yLW1vZGFsX19lcnJvci1saXN0IHVsLS1uby1zdHlsZVwiPntlcnJvckluZm9MaXN0fTwvdWw+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxFcnJvcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUdBOzs7O0FBbERBO0FBQ0E7QUFvREE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalError/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalFileTimeout/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalFileTimeout/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalFileTimeout/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMetadataForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaWxlVGltZW91dC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpbGVUaW1lb3V0L2luZGV4LmpzPzk3MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgTW9kYWxGaWxlVGltZW91dCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBtZXRhZGF0YTogbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoTW9kYWxGaWxlVGltZW91dCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalFileTimeout/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalFileTimeout/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalFileTimeout/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\nvar ModalFileTimeout = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalFileTimeout, _React$PureComponent);\n\n function ModalFileTimeout() {\n _classCallCheck(this, ModalFileTimeout);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalFileTimeout).apply(this, arguments));\n }\n\n _createClass(ModalFileTimeout, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n uri = _this$props.uri,\n title = _this$props.metadata.title,\n closeModal = _this$props.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: __('Unable to Download'),\n contentLabel: __('Download failed'),\n onConfirmed: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"error-modal__error-list\"\n }, __('LBRY was unable to download the stream'), \":\", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"b\", null, title ? \"\\\"\".concat(title, \"\\\"\") : uri))));\n }\n }]);\n\n return ModalFileTimeout;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalFileTimeout);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaWxlVGltZW91dC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpbGVUaW1lb3V0L3ZpZXcuanN4P2U3Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBTdHJlYW1NZXRhZGF0YSxcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbn07XG5cbmNsYXNzIE1vZGFsRmlsZVRpbWVvdXQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB1cmksXG4gICAgICBtZXRhZGF0YTogeyB0aXRsZSB9LFxuICAgICAgY2xvc2VNb2RhbCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgaXNPcGVuIHRpdGxlPXtfXygnVW5hYmxlIHRvIERvd25sb2FkJyl9IGNvbnRlbnRMYWJlbD17X18oJ0Rvd25sb2FkIGZhaWxlZCcpfSBvbkNvbmZpcm1lZD17Y2xvc2VNb2RhbH0+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLW1vZGFsX19lcnJvci1saXN0XCI+XG4gICAgICAgICAge19fKCdMQlJZIHdhcyB1bmFibGUgdG8gZG93bmxvYWQgdGhlIHN0cmVhbScpfTpcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGI+e3RpdGxlID8gYFwiJHt0aXRsZX1cImAgOiB1cml9PC9iPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3A+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxGaWxlVGltZW91dDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFPQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQVFBOzs7O0FBbEJBO0FBQ0E7QUFvQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalFileTimeout/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalFirstReward/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalFirstReward/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalFirstReward/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n var selectReward = Object(lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"makeSelectRewardByType\"])();\n return {\n reward: selectReward(state, lbryinc__WEBPACK_IMPORTED_MODULE_0__[\"rewards\"].TYPE_NEW_USER)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaXJzdFJld2FyZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpcnN0UmV3YXJkL2luZGV4LmpzPzRmODEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV3YXJkcywgbWFrZVNlbGVjdFJld2FyZEJ5VHlwZSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsRmlyc3RSZXdhcmQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4ge1xuICBjb25zdCBzZWxlY3RSZXdhcmQgPSBtYWtlU2VsZWN0UmV3YXJkQnlUeXBlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICByZXdhcmQ6IHNlbGVjdFJld2FyZChzdGF0ZSwgcmV3YXJkcy5UWVBFX05FV19VU0VSKSxcbiAgfTtcbn07XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoTW9kYWxGaXJzdFJld2FyZCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBSEE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalFirstReward/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalFirstReward/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalFirstReward/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ModalFirstReward = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalFirstReward, _React$PureComponent);\n\n function ModalFirstReward() {\n _classCallCheck(this, ModalFirstReward);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalFirstReward).apply(this, arguments));\n }\n\n _createClass(ModalFirstReward, [{\n key: \"render\",\n value: function render() {\n var closeModal = this.props.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n type: \"card\",\n isOpen: true,\n contentLabel: __('Your First Reward')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n title: __('Your First Reward'),\n subtitle: __('You just earned your first reward!'),\n body: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __(\"This reward will show in your Wallet in the top right momentarily (if it hasn't already).\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('These credits are used to compensate creators, to publish your own content, and to have say in how the network works.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('No need to understand it all just yet! Try watching or publishing something next.'))),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n onClick: closeModal,\n label: __('You Got It Dude')\n })\n }));\n }\n }]);\n\n return ModalFirstReward;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalFirstReward);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaXJzdFJld2FyZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpcnN0UmV3YXJkL3ZpZXcuanN4PzlhNWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxufTtcblxuY2xhc3MgTW9kYWxGaXJzdFJld2FyZCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xvc2VNb2RhbCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgdHlwZT1cImNhcmRcIiBpc09wZW4gY29udGVudExhYmVsPXtfXygnWW91ciBGaXJzdCBSZXdhcmQnKX0+XG4gICAgICAgIDxDYXJkXG4gICAgICAgICAgdGl0bGU9e19fKCdZb3VyIEZpcnN0IFJld2FyZCcpfVxuICAgICAgICAgIHN1YnRpdGxlPXtfXygnWW91IGp1c3QgZWFybmVkIHlvdXIgZmlyc3QgcmV3YXJkIScpfVxuICAgICAgICAgIGJvZHk9e1xuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8cD57X18oXCJUaGlzIHJld2FyZCB3aWxsIHNob3cgaW4geW91ciBXYWxsZXQgaW4gdGhlIHRvcCByaWdodCBtb21lbnRhcmlseSAoaWYgaXQgaGFzbid0IGFscmVhZHkpLlwiKX08L3A+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICAgICAgICdUaGVzZSBjcmVkaXRzIGFyZSB1c2VkIHRvIGNvbXBlbnNhdGUgY3JlYXRvcnMsIHRvIHB1Ymxpc2ggeW91ciBvd24gY29udGVudCwgYW5kIHRvIGhhdmUgc2F5IGluIGhvdyB0aGUgbmV0d29yayB3b3Jrcy4nXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8cD57X18oJ05vIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBhbGwganVzdCB5ZXQhIFRyeSB3YXRjaGluZyBvciBwdWJsaXNoaW5nIHNvbWV0aGluZyBuZXh0LicpfTwvcD5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbnM9ezxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IGxhYmVsPXtfXygnWW91IEdvdCBJdCBEdWRlJyl9IC8+fVxuICAgICAgICAvPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsRmlyc3RSZXdhcmQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZEE7QUFrQkE7Ozs7QUF4QkE7QUFDQTtBQTBCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalFirstReward/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalFirstSubscription/index.js": -/*!***************************************************!*\ - !*** ../ui/modal/modalFirstSubscription/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalFirstSubscription/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n accessToken: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectAccessToken\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return function () {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaXJzdFN1YnNjcmlwdGlvbi9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpcnN0U3Vic2NyaXB0aW9uL2luZGV4LmpzP2M3MTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgc2VsZWN0QWNjZXNzVG9rZW4sIHNlbGVjdFVzZXIgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5cbmltcG9ydCBNb2RhbEZpcnN0U3Vic2NyaXB0aW9uIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGFjY2Vzc1Rva2VuOiBzZWxlY3RBY2Nlc3NUb2tlbihzdGF0ZSksXG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxufSlcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICgpID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKE1vZGFsRmlyc3RTdWJzY3JpcHRpb24pKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalFirstSubscription/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalFirstSubscription/view.jsx": -/*!***************************************************!*\ - !*** ../ui/modal/modalFirstSubscription/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nvar ModalFirstSubscription = function ModalFirstSubscription(props) {\n var closeModal = props.closeModal,\n accessToken = props.accessToken,\n user = props.user,\n history = props.history,\n pathname = props.location.pathname;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n type: \"custom\",\n isOpen: true,\n contentLabel: \"Subscriptions 101\",\n title: __('Subscriptions 101')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Awesome! You just subscribed to your first channel.'), ' ', user && user.primary_email ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('You will receive notifications related to new content.')) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __('Sign in with lbry.tv to receive notifications about new content.')))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n onClick: closeModal,\n label: __('Got it')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, user && user.primary_email ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/list/edit/\".concat(accessToken),\n label: __('Update email preferences')\n })) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n onClick: function onClick() {\n closeModal();\n history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_3__[\"AUTH\"], \"?redirect=\").concat(pathname));\n },\n label: __('Sign in')\n })))));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalFirstSubscription);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxGaXJzdFN1YnNjcmlwdGlvbi92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbEZpcnN0U3Vic2NyaXB0aW9uL3ZpZXcuanN4P2ZjOTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuICB1c2VyOiBhbnksXG4gIGRvQXV0aDogKCkgPT4gdm9pZCxcbiAgaGlzdG9yeTogeyBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBsb2NhdGlvbjogVXJsTG9jYXRpb24sXG59O1xuXG5jb25zdCBNb2RhbEZpcnN0U3Vic2NyaXB0aW9uID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xvc2VNb2RhbCxcbiAgICBhY2Nlc3NUb2tlbixcbiAgICB1c2VyLFxuICAgIGhpc3RvcnksXG4gICAgbG9jYXRpb246IHsgcGF0aG5hbWUgfSxcbiAgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIHR5cGU9XCJjdXN0b21cIiBpc09wZW4gY29udGVudExhYmVsPVwiU3Vic2NyaXB0aW9ucyAxMDFcIiB0aXRsZT17X18oJ1N1YnNjcmlwdGlvbnMgMTAxJyl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICA8cD57X18oJ0F3ZXNvbWUhIFlvdSBqdXN0IHN1YnNjcmliZWQgdG8geW91ciBmaXJzdCBjaGFubmVsLicpfXsnICd9XG4gICAgICAgICAgeyB1c2VyICYmIHVzZXIucHJpbWFyeV9lbWFpbCA/IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAge19fKCdZb3Ugd2lsbCByZWNlaXZlIG5vdGlmaWNhdGlvbnMgcmVsYXRlZCB0byBuZXcgY29udGVudC4nKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7IF9fKCdTaWduIGluIHdpdGggbGJyeS50diB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgYWJvdXQgbmV3IGNvbnRlbnQuJyl9XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IGxhYmVsPXtfXygnR290IGl0Jyl9IC8+XG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7dXNlciAmJiB1c2VyLnByaW1hcnlfZW1haWwgPyAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPXtgaHR0cHM6Ly9sYnJ5LmNvbS9saXN0L2VkaXQvJHthY2Nlc3NUb2tlbn1gfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVXBkYXRlIGVtYWlsIHByZWZlcmVuY2VzJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsKClcbiAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2goYC8kLyR7UEFHRVMuQVVUSH0/cmVkaXJlY3Q9JHtwYXRobmFtZX1gKTtcbiAgICAgICAgICAgICAgfX0gbGFiZWw9e19fKCdTaWduIGluJyl9IC8+XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxGaXJzdFN1YnNjcmlwdGlvbjtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQWFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUhBO0FBUUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBSEE7QUFyQ0E7QUFDQTtBQWdEQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalFirstSubscription/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalMobileNavigation/index.js": -/*!**************************************************!*\ - !*** ../ui/modal/modalMobileNavigation/index.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalMobileNavigation/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"],\n doSignOut: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doSignOut\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxNb2JpbGVOYXZpZ2F0aW9uL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsTW9iaWxlTmF2aWdhdGlvbi9pbmRleC5qcz8wZjUyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCwgZG9TaWduT3V0IH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsTW9iaWxlTmF2aWdhdGlvbiBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBudWxsLFxuICB7XG4gICAgZG9IaWRlTW9kYWwsXG4gICAgZG9TaWduT3V0LFxuICB9XG4pKE1vZGFsTW9iaWxlTmF2aWdhdGlvbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalMobileNavigation/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalMobileNavigation/view.jsx": -/*!**************************************************!*\ - !*** ../ui/modal/modalMobileNavigation/view.jsx ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ModalMobileNavigation; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_sideNavigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/sideNavigation */ \"../ui/component/sideNavigation/index.js\");\n\n\n\nfunction ModalMobileNavigation(props) {\n var doHideModal = props.doHideModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n type: \"card\",\n isOpen: true,\n contentLabel: __('Navigation'),\n onAborted: doHideModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_sideNavigation__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sticky: false,\n expanded: true\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxNb2JpbGVOYXZpZ2F0aW9uL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsTW9iaWxlTmF2aWdhdGlvbi92aWV3LmpzeD84NzlkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgU2lkZU5hdmlnYXRpb24gZnJvbSAnY29tcG9uZW50L3NpZGVOYXZpZ2F0aW9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgZG9IaWRlTW9kYWw6ICgpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RhbE1vYmlsZU5hdmlnYXRpb24ocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZG9IaWRlTW9kYWwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIHR5cGU9XCJjYXJkXCIgaXNPcGVuIGNvbnRlbnRMYWJlbD17X18oJ05hdmlnYXRpb24nKX0gb25BYm9ydGVkPXtkb0hpZGVNb2RhbH0+XG4gICAgICA8U2lkZU5hdmlnYXRpb24gc3RpY2t5PXtmYWxzZX0gZXhwYW5kZWQgLz5cbiAgICA8L01vZGFsPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalMobileNavigation/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalOpenExternalResource/index.js": -/*!******************************************************!*\ - !*** ../ui/modal/modalOpenExternalResource/index.js ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalOpenExternalResource/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxPcGVuRXh0ZXJuYWxSZXNvdXJjZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbE9wZW5FeHRlcm5hbFJlc291cmNlL2luZGV4LmpzP2ZmMGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsT3BlbkV4dGVybmFsUmVzb3VyY2UgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxPcGVuRXh0ZXJuYWxSZXNvdXJjZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalOpenExternalResource/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalOpenExternalResource/view.jsx": -/*!******************************************************!*\ - !*** ../ui/modal/modalOpenExternalResource/view.jsx ***! - \******************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nfunction ModalOpenExternalResource(props) {\n var uri = props.uri,\n isTrusted = props.isTrusted,\n path = props.path,\n isMine = props.isMine,\n closeModal = props.closeModal;\n\n if (uri && isTrusted || path && isMine) {\n openResource();\n }\n\n function openResource() {\n if (uri) {\n window.open(uri);\n } else if (path) {\n window.open(Object(util_url__WEBPACK_IMPORTED_MODULE_2__[\"formatFileSystemPath\"])(path));\n }\n\n closeModal();\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: __('Warning!'),\n contentLabel: __('Confirm External Resource'),\n type: \"confirm\",\n confirmButtonLabel: __('Continue'),\n onConfirmed: function onConfirmed() {\n return openResource();\n },\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, uri && __('This link leads to an external website.') || path && __('This file has been shared with you by other people.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"blockquote\", null, uri || path), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('LBRY Inc is not responsible for its content, click continue to proceed at your own risk.')));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalOpenExternalResource);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxPcGVuRXh0ZXJuYWxSZXNvdXJjZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbE9wZW5FeHRlcm5hbFJlc291cmNlL3ZpZXcuanN4P2UzNDEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCB7IGZvcm1hdEZpbGVTeXN0ZW1QYXRoIH0gZnJvbSAndXRpbC91cmwnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgaXNUcnVzdGVkOiBib29sZWFuLFxuICBwYXRoOiBzdHJpbmcsXG4gIGlzTWluZTogYm9vbGVhbixcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIE1vZGFsT3BlbkV4dGVybmFsUmVzb3VyY2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCBpc1RydXN0ZWQsIHBhdGgsIGlzTWluZSwgY2xvc2VNb2RhbCB9ID0gcHJvcHM7XG5cbiAgaWYgKCh1cmkgJiYgaXNUcnVzdGVkKSB8fCAocGF0aCAmJiBpc01pbmUpKSB7XG4gICAgb3BlblJlc291cmNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVzb3VyY2UoKSB7XG4gICAgaWYgKHVyaSkge1xuICAgICAgd2luZG93Lm9wZW4odXJpKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIHdpbmRvdy5vcGVuKGZvcm1hdEZpbGVTeXN0ZW1QYXRoKHBhdGgpKTtcbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgaXNPcGVuXG4gICAgICB0aXRsZT17X18oJ1dhcm5pbmchJyl9XG4gICAgICBjb250ZW50TGFiZWw9e19fKCdDb25maXJtIEV4dGVybmFsIFJlc291cmNlJyl9XG4gICAgICB0eXBlPVwiY29uZmlybVwiXG4gICAgICBjb25maXJtQnV0dG9uTGFiZWw9e19fKCdDb250aW51ZScpfVxuICAgICAgb25Db25maXJtZWQ9eygpID0+IG9wZW5SZXNvdXJjZSgpfVxuICAgICAgb25BYm9ydGVkPXtjbG9zZU1vZGFsfVxuICAgID5cbiAgICAgIDxwPlxuICAgICAgICB7KHVyaSAmJiBfXygnVGhpcyBsaW5rIGxlYWRzIHRvIGFuIGV4dGVybmFsIHdlYnNpdGUuJykpIHx8XG4gICAgICAgICAgKHBhdGggJiYgX18oJ1RoaXMgZmlsZSBoYXMgYmVlbiBzaGFyZWQgd2l0aCB5b3UgYnkgb3RoZXIgcGVvcGxlLicpKX1cbiAgICAgIDwvcD5cbiAgICAgIDxibG9ja3F1b3RlPnt1cmkgfHwgcGF0aH08L2Jsb2NrcXVvdGU+XG4gICAgICA8cD57X18oJ0xCUlkgSW5jIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgaXRzIGNvbnRlbnQsIGNsaWNrIGNvbnRpbnVlIHRvIHByb2NlZWQgYXQgeW91ciBvd24gcmlzay4nKX08L3A+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxPcGVuRXh0ZXJuYWxSZXNvdXJjZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFPQTtBQVBBO0FBaUJBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalOpenExternalResource/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalPasswordUnsave/index.js": -/*!************************************************!*\ - !*** ../ui/modal/modalPasswordUnsave/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalPasswordUnsave/view.jsx\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n\n\n // const select = () => ({});\n//\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQYXNzd29yZFVuc2F2ZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFBhc3N3b3JkVW5zYXZlL2luZGV4LmpzP2YzYTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBNb2RhbFBhc3N3b3JkVW5zYXZlIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcblxuLy8gY29uc3Qgc2VsZWN0ID0gKCkgPT4gKHt9KTtcbi8vXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgcGVyZm9ybVxuKShNb2RhbFBhc3N3b3JkVW5zYXZlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalPasswordUnsave/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalPasswordUnsave/view.jsx": -/*!************************************************!*\ - !*** ../ui/modal/modalPasswordUnsave/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar ModalPasswordUnsave = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalPasswordUnsave, _React$PureComponent);\n\n function ModalPasswordUnsave() {\n _classCallCheck(this, ModalPasswordUnsave);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalPasswordUnsave).apply(this, arguments));\n }\n\n _createClass(ModalPasswordUnsave, [{\n key: \"render\",\n value: function render() {\n var _this = this;\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Unsave Password'),\n title: __('Clear Saved Password'),\n type: \"confirm\",\n confirmButtonLabel: __('Forget'),\n abortButtonLabel: __('Nevermind'),\n onConfirmed: function onConfirmed() {\n return Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_2__[\"deleteSavedPassword\"])().then(function () {\n _this.props.closeModal();\n\n if (_this.props.callback) {\n _this.props.callback();\n }\n });\n },\n onAborted: this.props.closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('You are about to delete your saved password.'), ' ', __('Your wallet will still be encrypted, but you will have to remember and enter it manually on startup.')));\n }\n }]);\n\n return ModalPasswordUnsave;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalPasswordUnsave);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQYXNzd29yZFVuc2F2ZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFBhc3N3b3JkVW5zYXZlL3ZpZXcuanN4PzcxY2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCB7IGRlbGV0ZVNhdmVkUGFzc3dvcmQgfSBmcm9tICd1dGlsL3NhdmVkLXBhc3N3b3Jkcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZCxcbn07XG5cbmNsYXNzIE1vZGFsUGFzc3dvcmRVbnNhdmUgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGlzT3BlblxuICAgICAgICBjb250ZW50TGFiZWw9e19fKCdVbnNhdmUgUGFzc3dvcmQnKX1cbiAgICAgICAgdGl0bGU9e19fKCdDbGVhciBTYXZlZCBQYXNzd29yZCcpfVxuICAgICAgICB0eXBlPVwiY29uZmlybVwiXG4gICAgICAgIGNvbmZpcm1CdXR0b25MYWJlbD17X18oJ0ZvcmdldCcpfVxuICAgICAgICBhYm9ydEJ1dHRvbkxhYmVsPXtfXygnTmV2ZXJtaW5kJyl9XG4gICAgICAgIG9uQ29uZmlybWVkPXsoKSA9PlxuICAgICAgICAgIGRlbGV0ZVNhdmVkUGFzc3dvcmQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgb25BYm9ydGVkPXt0aGlzLnByb3BzLmNsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtfXygnWW91IGFyZSBhYm91dCB0byBkZWxldGUgeW91ciBzYXZlZCBwYXNzd29yZC4nKX17JyAnfVxuICAgICAgICAgIHtfXygnWW91ciB3YWxsZXQgd2lsbCBzdGlsbCBiZSBlbmNyeXB0ZWQsIGJ1dCB5b3Ugd2lsbCBoYXZlIHRvIHJlbWVtYmVyIGFuZCBlbnRlciBpdCBtYW51YWxseSBvbiBzdGFydHVwLicpfVxuICAgICAgICA8L3A+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxQYXNzd29yZFVuc2F2ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUxBO0FBUEE7QUFlQTtBQWZBO0FBdUJBOzs7O0FBMUJBO0FBQ0E7QUE0QkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalPasswordUnsave/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalPhoneCollection/index.js": -/*!*************************************************!*\ - !*** ../ui/modal/modalPhoneCollection/index.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalPhoneCollection/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n phone: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectPhoneToVerify\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return function () {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQaG9uZUNvbGxlY3Rpb24vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxQaG9uZUNvbGxlY3Rpb24vaW5kZXguanM/YjZmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBzZWxlY3RQaG9uZVRvVmVyaWZ5LCBzZWxlY3RVc2VyIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgTW9kYWxQaG9uZUNvbGxlY3Rpb24gZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgcGhvbmU6IHNlbGVjdFBob25lVG9WZXJpZnkoc3RhdGUpLFxuICB1c2VyOiBzZWxlY3RVc2VyKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKCkgPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKE1vZGFsUGhvbmVDb2xsZWN0aW9uKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalPhoneCollection/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalPhoneCollection/view.jsx": -/*!*************************************************!*\ - !*** ../ui/modal/modalPhoneCollection/view.jsx ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_userPhoneVerify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/userPhoneVerify */ \"../ui/component/userPhoneVerify/index.js\");\n/* harmony import */ var component_userPhoneNew__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/userPhoneNew */ \"../ui/component/userPhoneNew/index.js\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar ModalPhoneCollection = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalPhoneCollection, _React$PureComponent);\n\n function ModalPhoneCollection() {\n _classCallCheck(this, ModalPhoneCollection);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalPhoneCollection).apply(this, arguments));\n }\n\n _createClass(ModalPhoneCollection, [{\n key: \"getTitle\",\n value: function getTitle() {\n var _this$props = this.props,\n user = _this$props.user,\n phone = _this$props.phone;\n\n if (!user.is_identity_verified && !phone) {\n return __('Enter Your Phone Number');\n }\n\n return __('Enter The Verification Code');\n }\n }, {\n key: \"renderInner\",\n value: function renderInner() {\n var _this$props2 = this.props,\n closeModal = _this$props2.closeModal,\n phone = _this$props2.phone,\n user = _this$props2.user;\n var cancelButton = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n onClick: closeModal,\n label: __('Not Now')\n });\n\n if (!user.is_identity_verified && !phone) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_userPhoneNew__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n cancelButton: cancelButton\n });\n } else if (!user.is_identity_verified) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_userPhoneVerify__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n cancelButton: cancelButton\n });\n }\n\n closeModal();\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router__WEBPACK_IMPORTED_MODULE_5__[\"Redirect\"], {\n to: \"/$/rewards\"\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var user = this.props.user; // this shouldn't happen\n\n if (!user) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n type: \"custom\",\n isOpen: true,\n contentLabel: \"Phone\",\n title: this.getTitle()\n }, this.renderInner());\n }\n }]);\n\n return ModalPhoneCollection;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalPhoneCollection);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQaG9uZUNvbGxlY3Rpb24vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxQaG9uZUNvbGxlY3Rpb24vdmlldy5qc3g/YjRjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IFVzZXJQaG9uZVZlcmlmeSBmcm9tICdjb21wb25lbnQvdXNlclBob25lVmVyaWZ5JztcbmltcG9ydCBVc2VyUGhvbmVOZXcgZnJvbSAnY29tcG9uZW50L3VzZXJQaG9uZU5ldyc7XG5pbXBvcnQgeyBSZWRpcmVjdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBob25lOiA/bnVtYmVyLFxuICB1c2VyOiB7XG4gICAgaXNfaWRlbnRpdHlfdmVyaWZpZWQ6IGJvb2xlYW4sXG4gIH0sXG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQsXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbn07XG5cbmNsYXNzIE1vZGFsUGhvbmVDb2xsZWN0aW9uIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICBnZXRUaXRsZSgpIHtcbiAgICBjb25zdCB7IHVzZXIsIHBob25lIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF1c2VyLmlzX2lkZW50aXR5X3ZlcmlmaWVkICYmICFwaG9uZSkge1xuICAgICAgcmV0dXJuIF9fKCdFbnRlciBZb3VyIFBob25lIE51bWJlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBfXygnRW50ZXIgVGhlIFZlcmlmaWNhdGlvbiBDb2RlJyk7XG4gIH1cblxuICByZW5kZXJJbm5lcigpIHtcbiAgICBjb25zdCB7IGNsb3NlTW9kYWwsIHBob25lLCB1c2VyIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgb25DbGljaz17Y2xvc2VNb2RhbH0gbGFiZWw9e19fKCdOb3QgTm93Jyl9IC8+O1xuXG4gICAgaWYgKCF1c2VyLmlzX2lkZW50aXR5X3ZlcmlmaWVkICYmICFwaG9uZSkge1xuICAgICAgcmV0dXJuIDxVc2VyUGhvbmVOZXcgY2FuY2VsQnV0dG9uPXtjYW5jZWxCdXR0b259IC8+O1xuICAgIH0gZWxzZSBpZiAoIXVzZXIuaXNfaWRlbnRpdHlfdmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiA8VXNlclBob25lVmVyaWZ5IGNhbmNlbEJ1dHRvbj17Y2FuY2VsQnV0dG9ufSAvPjtcbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKCk7XG4gICAgcmV0dXJuIDxSZWRpcmVjdCB0bz1cIi8kL3Jld2FyZHNcIiAvPjtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgdHlwZT1cImN1c3RvbVwiIGlzT3BlbiBjb250ZW50TGFiZWw9XCJQaG9uZVwiIHRpdGxlPXt0aGlzLmdldFRpdGxlKCl9PlxuICAgICAgICB7dGhpcy5yZW5kZXJJbm5lcigpfVxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsUGhvbmVDb2xsZWN0aW9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7Ozs7QUF2Q0E7QUFDQTtBQXlDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalPhoneCollection/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalPublish/index.js": -/*!*****************************************!*\ - !*** ../ui/modal/modalPublish/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalPublish/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n clearPublish: function clearPublish() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doClearPublish\"])());\n },\n navigate: function navigate(path) {\n return dispatch(Object(connected_react_router__WEBPACK_IMPORTED_MODULE_4__[\"push\"])(path));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQdWJsaXNoL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUHVibGlzaC9pbmRleC5qcz9lMDc0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFB1Ymxpc2hTdWNjZXNzIGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBkb0NsZWFyUHVibGlzaCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgcHVzaCB9IGZyb20gJ2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXInO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG4gIGNsZWFyUHVibGlzaDogKCkgPT4gZGlzcGF0Y2goZG9DbGVhclB1Ymxpc2goKSksXG4gIG5hdmlnYXRlOiBwYXRoID0+IGRpc3BhdGNoKHB1c2gocGF0aCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxQdWJsaXNoU3VjY2Vzcyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalPublish/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalPublish/view.jsx": -/*!*****************************************!*\ - !*** ../ui/modal/modalPublish/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\nvar ModalPublishSuccess = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalPublishSuccess, _React$PureComponent);\n\n function ModalPublishSuccess() {\n _classCallCheck(this, ModalPublishSuccess);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalPublishSuccess).apply(this, arguments));\n }\n\n _createClass(ModalPublishSuccess, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n clearPublish = _this$props.clearPublish,\n navigate = _this$props.navigate,\n uri = _this$props.uri,\n isEdit = _this$props.isEdit,\n filePath = _this$props.filePath;\n var contentLabel = isEdit ? 'Update published' : 'File published';\n var publishMessage = isEdit ? 'update is now' : 'file is now';\n\n function handleClose() {\n clearPublish();\n closeModal();\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n contentLabel: __(contentLabel),\n onAborted: handleClose\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: __('Success'),\n subtitle: __(\"Your %publishMessage% pending on LBRY. It will take a few minutes to appear for other users.\", {\n publishMessage: publishMessage\n }),\n body: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n type: \"small\",\n uri: uri\n })), filePath && !true && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __(\"Upload will continue in the background, please do not shut down immediately. Leaving the app running helps the network, thank you!\"), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/host-content\",\n label: __('Learn More')\n })))),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('View My Publishes'),\n onClick: function onClick() {\n clearPublish();\n navigate('/$/published');\n closeModal();\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Close'),\n onClick: handleClose\n }))\n }));\n }\n }]);\n\n return ModalPublishSuccess;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalPublishSuccess);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxQdWJsaXNoL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUHVibGlzaC92aWV3LmpzeD81MzdlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQ2xhaW1QcmV2aWV3IGZyb20gJ2NvbXBvbmVudC9jbGFpbVByZXZpZXcnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQsXG4gIGNsZWFyUHVibGlzaDogKCkgPT4gdm9pZCxcbiAgbmF2aWdhdGU6IHN0cmluZyA9PiB2b2lkLFxuICB1cmk6IHN0cmluZyxcbiAgaXNFZGl0OiBib29sZWFuLFxuICBmaWxlUGF0aDogP3N0cmluZyxcbn07XG5cbmNsYXNzIE1vZGFsUHVibGlzaFN1Y2Nlc3MgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNsb3NlTW9kYWwsIGNsZWFyUHVibGlzaCwgbmF2aWdhdGUsIHVyaSwgaXNFZGl0LCBmaWxlUGF0aCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb250ZW50TGFiZWwgPSBpc0VkaXQgPyAnVXBkYXRlIHB1Ymxpc2hlZCcgOiAnRmlsZSBwdWJsaXNoZWQnO1xuICAgIGNvbnN0IHB1Ymxpc2hNZXNzYWdlID0gaXNFZGl0ID8gJ3VwZGF0ZSBpcyBub3cnIDogJ2ZpbGUgaXMgbm93JztcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgICAgY2xlYXJQdWJsaXNoKCk7XG4gICAgICBjbG9zZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbCBpc09wZW4gdHlwZT1cImNhcmRcIiBjb250ZW50TGFiZWw9e19fKGNvbnRlbnRMYWJlbCl9IG9uQWJvcnRlZD17aGFuZGxlQ2xvc2V9PlxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnU3VjY2VzcycpfVxuICAgICAgICAgIHN1YnRpdGxlPXtfXyhgWW91ciAlcHVibGlzaE1lc3NhZ2UlIHBlbmRpbmcgb24gTEJSWS4gSXQgd2lsbCB0YWtlIGEgZmV3IG1pbnV0ZXMgdG8gYXBwZWFyIGZvciBvdGhlciB1c2Vycy5gLCB7XG4gICAgICAgICAgICBwdWJsaXNoTWVzc2FnZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgICBib2R5PXtcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkLS1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICA8Q2xhaW1QcmV2aWV3IHR5cGU9XCJzbWFsbFwiIHVyaT17dXJpfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2ZpbGVQYXRoICYmICFJU19XRUIgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHBcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICAgICAgICAgIGBVcGxvYWQgd2lsbCBjb250aW51ZSBpbiB0aGUgYmFja2dyb3VuZCwgcGxlYXNlIGRvIG5vdCBzaHV0IGRvd24gaW1tZWRpYXRlbHkuIExlYXZpbmcgdGhlIGFwcCBydW5uaW5nIGhlbHBzIHRoZSBuZXR3b3JrLCB0aGFuayB5b3UhYFxuICAgICAgICAgICAgICAgICAgICApfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9ob3N0LWNvbnRlbnRcIiBsYWJlbD17X18oJ0xlYXJuIE1vcmUnKX0gLz5cbiAgICAgICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVmlldyBNeSBQdWJsaXNoZXMnKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclB1Ymxpc2goKTtcbiAgICAgICAgICAgICAgICAgIG5hdmlnYXRlKCcvJC9wdWJsaXNoZWQnKTtcbiAgICAgICAgICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0Nsb3NlJyl9IG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsUHVibGlzaFN1Y2Nlc3M7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQWpDQTtBQXVDQTs7OztBQXBEQTtBQUNBO0FBc0RBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalPublish/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalRemoveFile/index.js": -/*!********************************************!*\ - !*** ../ui/modal/modalRemoveFile/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_file__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/file */ \"../ui/redux/actions/file.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalRemoveFile/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTitleForUri\"])(props.uri)(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doHideModal\"])());\n },\n deleteFile: function deleteFile(uri, deleteFromComputer, abandonClaim) {\n dispatch(Object(redux_actions_file__WEBPACK_IMPORTED_MODULE_1__[\"doDeleteFileAndMaybeGoBack\"])(uri, deleteFromComputer, abandonClaim));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZW1vdmVGaWxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUmVtb3ZlRmlsZS9pbmRleC5qcz8zOWY1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0RlbGV0ZUZpbGVBbmRNYXliZUdvQmFjayB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvZmlsZSc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0VGl0bGVGb3JVcmksIG1ha2VTZWxlY3RDbGFpbUlzTWluZSwgbWFrZVNlbGVjdENsYWltRm9yVXJpIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFJlbW92ZUZpbGUgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2xhaW1Jc01pbmU6IG1ha2VTZWxlY3RDbGFpbUlzTWluZShwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG4gIGRlbGV0ZUZpbGU6ICh1cmksIGRlbGV0ZUZyb21Db21wdXRlciwgYWJhbmRvbkNsYWltKSA9PiB7XG4gICAgZGlzcGF0Y2goZG9EZWxldGVGaWxlQW5kTWF5YmVHb0JhY2sodXJpLCBkZWxldGVGcm9tQ29tcHV0ZXIsIGFiYW5kb25DbGFpbSkpO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFJlbW92ZUZpbGUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUNBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalRemoveFile/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalRemoveFile/view.jsx": -/*!********************************************!*\ - !*** ../ui/modal/modalRemoveFile/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\nfunction ModalRemoveFile(props) {\n var uri = props.uri,\n claimIsMine = props.claimIsMine,\n closeModal = props.closeModal,\n deleteFile = props.deleteFile,\n title = props.title,\n claim = props.claim;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('modal-remove-file:delete', true),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n deleteChecked = _usePersistedState2[0],\n setDeleteChecked = _usePersistedState2[1];\n\n var _usePersistedState3 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('modal-remove-file:abandon', true),\n _usePersistedState4 = _slicedToArray(_usePersistedState3, 2),\n abandonChecked = _usePersistedState4[0],\n setAbandonChecked = _usePersistedState4[1];\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Confirm File Remove'),\n type: \"card\",\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"Remove File\",\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n title: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"cite\", null, \"\\\"\".concat(title, \"\\\"\"))\n }\n }, \"Are you sure you'd like to remove %title% from LBRY?\"),\n body: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, claimIsMine && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n name: \"claim_abandon\",\n label: __('Abandon on blockchain (reclaim %amount% LBC)', {\n amount: claim.amount\n }),\n type: \"checkbox\",\n checked: abandonChecked,\n onChange: function onChange() {\n return setAbandonChecked(!abandonChecked);\n }\n }), abandonChecked === true && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help error-text\"\n }, \"This action is permanent and cannot be undone.\"))),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('OK'),\n onClick: function onClick() {\n return deleteFile(uri, deleteChecked, claimIsMine ? abandonChecked : false);\n }\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: closeModal\n }))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalRemoveFile);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZW1vdmVGaWxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUmVtb3ZlRmlsZS92aWV3LmpzeD81MTdlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmk6IHN0cmluZyxcbiAgY2xhaW06IFN0cmVhbUNsYWltLFxuICBjbGFpbUlzTWluZTogYm9vbGVhbixcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbiAgZGVsZXRlRmlsZTogKHN0cmluZywgYm9vbGVhbiwgYm9vbGVhbikgPT4gdm9pZCxcbiAgdGl0bGU6IHN0cmluZyxcbiAgZmlsZUluZm8/OiB7XG4gICAgb3V0cG9pbnQ6ID9zdHJpbmcsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBNb2RhbFJlbW92ZUZpbGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpLCBjbGFpbUlzTWluZSwgY2xvc2VNb2RhbCwgZGVsZXRlRmlsZSwgdGl0bGUsIGNsYWltIH0gPSBwcm9wcztcbiAgY29uc3QgW2RlbGV0ZUNoZWNrZWQsIHNldERlbGV0ZUNoZWNrZWRdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ21vZGFsLXJlbW92ZS1maWxlOmRlbGV0ZScsIHRydWUpO1xuICBjb25zdCBbYWJhbmRvbkNoZWNrZWQsIHNldEFiYW5kb25DaGVja2VkXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCdtb2RhbC1yZW1vdmUtZmlsZTphYmFuZG9uJywgdHJ1ZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWwgaXNPcGVuIGNvbnRlbnRMYWJlbD17X18oJ0NvbmZpcm0gRmlsZSBSZW1vdmUnKX0gdHlwZT1cImNhcmRcIiBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9PlxuICAgICAgPENhcmRcbiAgICAgICAgdGl0bGU9XCJSZW1vdmUgRmlsZVwiXG4gICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICA8STE4bk1lc3NhZ2UgdG9rZW5zPXt7IHRpdGxlOiA8Y2l0ZT57YFwiJHt0aXRsZX1cImB9PC9jaXRlPiB9fT5cbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3UnZCBsaWtlIHRvIHJlbW92ZSAldGl0bGUlIGZyb20gTEJSWT9cbiAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICB9XG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIHt9XG5cbiAgICAgICAgICAgIHtjbGFpbUlzTWluZSAmJiAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY2xhaW1fYWJhbmRvblwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0FiYW5kb24gb24gYmxvY2tjaGFpbiAocmVjbGFpbSAlYW1vdW50JSBMQkMpJywgeyBhbW91bnQ6IGNsYWltLmFtb3VudCB9KX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXthYmFuZG9uQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRBYmFuZG9uQ2hlY2tlZCghYWJhbmRvbkNoZWNrZWQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2FiYW5kb25DaGVja2VkID09PSB0cnVlICYmIChcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHAgZXJyb3ItdGV4dFwiPlRoaXMgYWN0aW9uIGlzIHBlcm1hbmVudCBhbmQgY2Fubm90IGJlIHVuZG9uZS48L3A+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBsYWJlbD17X18oJ09LJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRlbGV0ZUZpbGUodXJpLCBkZWxldGVDaGVja2VkLCBjbGFpbUlzTWluZSA/IGFiYW5kb25DaGVja2VkIDogZmFsc2UpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxSZW1vdmVGaWxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFPQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFMQTtBQVFBO0FBQUE7QUFRQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSEE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQXBDQTtBQTBDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalRemoveFile/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalRepost/index.js": -/*!****************************************!*\ - !*** ../ui/modal/modalRepost/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalRepost/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(props.uri)(state),\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTitleForUri\"])(props.uri)(state),\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectBalance\"])(state),\n error: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectRepostError\"])(state),\n reposting: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectRepostLoading\"])(state),\n myClaims: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyClaimsWithoutChannels\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"],\n doRepost: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doRepost\"],\n doClearRepostError: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doClearRepostError\"],\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doToast\"],\n doFetchClaimListMine: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doFetchClaimListMine\"]\n})(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXBvc3QvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxSZXBvc3QvaW5kZXguanM/YzcwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIG1ha2VTZWxlY3RUaXRsZUZvclVyaSxcbiAgc2VsZWN0QmFsYW5jZSxcbiAgc2VsZWN0TXlDaGFubmVsQ2xhaW1zLFxuICBkb1JlcG9zdCxcbiAgc2VsZWN0UmVwb3N0RXJyb3IsXG4gIHNlbGVjdFJlcG9zdExvYWRpbmcsXG4gIGRvQ2xlYXJSZXBvc3RFcnJvcixcbiAgZG9Ub2FzdCxcbiAgc2VsZWN0TXlDbGFpbXNXaXRob3V0Q2hhbm5lbHMsXG4gIGRvRmV0Y2hDbGFpbUxpc3RNaW5lLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBNb2RhbFJlcG9zdCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgYmFsYW5jZTogc2VsZWN0QmFsYW5jZShzdGF0ZSksXG4gIGVycm9yOiBzZWxlY3RSZXBvc3RFcnJvcihzdGF0ZSksXG4gIHJlcG9zdGluZzogc2VsZWN0UmVwb3N0TG9hZGluZyhzdGF0ZSksXG4gIG15Q2xhaW1zOiBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICB7XG4gICAgZG9IaWRlTW9kYWwsXG4gICAgZG9SZXBvc3QsXG4gICAgZG9DbGVhclJlcG9zdEVycm9yLFxuICAgIGRvVG9hc3QsXG4gICAgZG9GZXRjaENsYWltTGlzdE1pbmUsXG4gIH1cbikoTW9kYWxSZXBvc3QpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFBQTtBQUNBO0FBU0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalRepost/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalRepost/view.jsx": -/*!****************************************!*\ - !*** ../ui/modal/modalRepost/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_selectChannel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/selectChannel */ \"../ui/component/selectChannel/index.js\");\n/* harmony import */ var component_common_error_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/error-text */ \"../ui/component/common/error-text.jsx\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ModalRepost(props) {\n var doHideModal = props.doHideModal,\n doToast = props.doToast,\n doClearRepostError = props.doClearRepostError,\n doRepost = props.doRepost,\n title = props.title,\n claim = props.claim,\n balance = props.balance,\n channels = props.channels,\n error = props.error,\n reposting = props.reposting,\n myClaims = props.myClaims,\n doFetchClaimListMine = props.doFetchClaimListMine;\n var defaultName = claim && claim.name;\n var contentClaimId = claim && claim.claim_id;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_10__[\"default\"])('repost-channel'),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n repostChannel = _usePersistedState2[0],\n setRepostChannel = _usePersistedState2[1];\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_2___default.a.useState(0.01),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n repostBid = _React$useState2[0],\n setRepostBid = _React$useState2[1];\n\n var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2___default.a.useState(),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n showAdvanced = _React$useState4[0],\n setShowAdvanced = _React$useState4[1];\n\n var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_2___default.a.useState(defaultName),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n repostName = _React$useState6[0],\n setRepostName = _React$useState6[1];\n\n var repostBidError;\n\n if (repostBid === 0) {\n repostBidError = __('Deposit cannot be 0');\n } else if (balance === repostBid) {\n repostBidError = __('Please decrease your deposit to account for transaction fees');\n } else if (balance < repostBid) {\n repostBidError = __('Deposit cannot be higher than your balance');\n } else if (repostBid < constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"MINIMUM_PUBLISH_BID\"]) {\n repostBidError = __('Your deposit must be higher');\n }\n\n var repostNameError;\n\n if (!repostName) {\n repostNameError = __('A name is required');\n } else if (!Object(lbry_redux__WEBPACK_IMPORTED_MODULE_9__[\"isNameValid\"])(repostName, false)) {\n repostNameError = constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"INVALID_NAME_ERROR\"];\n } else if (channels && channels.find(function (claim) {\n return claim.name === repostChannel;\n }) && myClaims && myClaims.find(function (claim) {\n return claim.name === repostName;\n })) {\n repostNameError = __('You already have a claim with this name.');\n }\n\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n if ((repostNameError || repostNameError) && !showAdvanced) {\n setShowAdvanced(true);\n }\n }, [repostBidError, repostNameError, showAdvanced, setShowAdvanced]);\n var channelStrings = channels && channels.map(function (channel) {\n return channel.permanent_url;\n }).join(',');\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n if (!repostChannel && channelStrings) {\n var _channels = channelStrings.split(',');\n\n var newChannelUrl = _channels[0];\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_9__[\"parseURI\"])(newChannelUrl),\n claimName = _parseURI.claimName;\n\n setRepostChannel(claimName);\n }\n }, [channelStrings]);\n var myClaimsString = myClaims && myClaims.map(function (channel) {\n return channel.permanent_url;\n }).join(',');\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n if (myClaimsString === '') {\n doFetchClaimListMine();\n }\n }, [myClaimsString, doFetchClaimListMine]);\n\n function handleSubmit() {\n var channelToRepostTo = channels && channels.find(function (channel) {\n return channel.name === repostChannel;\n });\n\n if (channelToRepostTo && repostName && repostBid && repostChannel && contentClaimId) {\n doRepost({\n name: repostName,\n bid: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_9__[\"creditsToString\"])(repostBid),\n channel_id: channelToRepostTo.claim_id,\n claim_id: contentClaimId\n }).then(function (repostClaim) {\n analytics__WEBPACK_IMPORTED_MODULE_12__[\"default\"].apiLogPublish(repostClaim);\n doHideModal();\n doToast({\n message: __('Woohoo! Successfully reposted this claim.')\n });\n });\n }\n }\n\n function handleCloseModal() {\n doClearRepostError();\n doHideModal();\n }\n\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_3__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n onAborted: handleCloseModal,\n onConfirmed: handleCloseModal\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"REPOST\"],\n title: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, \"Repost \", react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"em\", null, title)),\n subtitle: error ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_error_text__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, __('There was an error reposting this claim. Please try again later.')) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('Repost your favorite claims to help more people discover them!')),\n actions: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_selectChannel__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n label: \"Channel to repost on\",\n hideAnon: true,\n channel: repostChannel,\n onChannelChange: function onChannelChange(newChannel) {\n return setRepostChannel(newChannel);\n }\n }), !showAdvanced && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Advanced'),\n onClick: function onClick() {\n return setShowAdvanced(true);\n }\n })), showAdvanced && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed fieldset-group--disabled-prefix\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"label\", null, __('Name')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"form-field__prefix\"\n }, \"lbry://\".concat(!repostChannel || repostChannel === constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"CHANNEL_NEW\"] ? '' : \"\".concat(repostChannel, \"/\")))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_8__[\"FormField\"], {\n type: \"text\",\n name: \"repost_name\",\n value: repostName,\n error: repostNameError,\n onChange: function onChange(event) {\n return setRepostName(event.target.value);\n }\n }))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"form-field__help\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n tokens: {\n lbry_naming_link: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('community name'),\n href: \"https://lbry.com/faq/naming\"\n })\n }\n }, \"Change this to repost to a different %lbry_naming_link%.\")), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_8__[\"FormField\"], {\n type: \"number\",\n name: \"repost_bid\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0.123\",\n className: \"form-field--price-amount\",\n label: __('Deposit (LBC)'),\n postfix: \"LBC\",\n value: repostBid,\n error: repostBidError,\n disabled: !repostName,\n onChange: function onChange(event) {\n return setRepostBid(parseFloat(event.target.value));\n },\n onWheel: function onWheel(e) {\n return e.stopPropagation();\n }\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: reposting || repostBidError || repostNameError,\n button: \"primary\",\n label: reposting ? __('Reposting') : __('Repost'),\n onClick: handleSubmit\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: handleCloseModal\n })))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalRepost);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXBvc3Qvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxSZXBvc3Qvdmlldy5qc3g/N2Q3YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCB7IENIQU5ORUxfTkVXLCBNSU5JTVVNX1BVQkxJU0hfQklELCBJTlZBTElEX05BTUVfRVJST1IgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnbW9kYWwvbW9kYWwnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgU2VsZWN0Q2hhbm5lbCBmcm9tICdjb21wb25lbnQvc2VsZWN0Q2hhbm5lbCc7XG5pbXBvcnQgRXJyb3JUZXh0IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZXJyb3ItdGV4dCc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgcGFyc2VVUkksIGlzTmFtZVZhbGlkLCBjcmVkaXRzVG9TdHJpbmcgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRvSGlkZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBkb1RvYXN0OiAoeyBtZXNzYWdlOiBzdHJpbmcgfSkgPT4gdm9pZCxcbiAgZG9DbGVhclJlcG9zdEVycm9yOiAoKSA9PiB2b2lkLFxuICBkb1JlcG9zdDogU3RyZWFtUmVwb3N0T3B0aW9ucyA9PiBQcm9taXNlPCo+LFxuICB0aXRsZTogc3RyaW5nLFxuICBjbGFpbTogP1N0cmVhbUNsYWltLFxuICBiYWxhbmNlOiBudW1iZXIsXG4gIGNoYW5uZWxzOiA/QXJyYXk8Q2hhbm5lbENsYWltPixcbiAgbXlDbGFpbXM6ID9BcnJheTxTdHJlYW1DbGFpbT4sXG4gIGRvRmV0Y2hDbGFpbUxpc3RNaW5lOiAoKSA9PiB2b2lkLFxuICBlcnJvcjogP3N0cmluZyxcbiAgcmVwb3N0aW5nOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gTW9kYWxSZXBvc3QocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBkb0hpZGVNb2RhbCxcbiAgICBkb1RvYXN0LFxuICAgIGRvQ2xlYXJSZXBvc3RFcnJvcixcbiAgICBkb1JlcG9zdCxcbiAgICB0aXRsZSxcbiAgICBjbGFpbSxcbiAgICBiYWxhbmNlLFxuICAgIGNoYW5uZWxzLFxuICAgIGVycm9yLFxuICAgIHJlcG9zdGluZyxcbiAgICBteUNsYWltcyxcbiAgICBkb0ZldGNoQ2xhaW1MaXN0TWluZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkZWZhdWx0TmFtZSA9IGNsYWltICYmIGNsYWltLm5hbWU7XG4gIGNvbnN0IGNvbnRlbnRDbGFpbUlkID0gY2xhaW0gJiYgY2xhaW0uY2xhaW1faWQ7XG4gIGNvbnN0IFtyZXBvc3RDaGFubmVsLCBzZXRSZXBvc3RDaGFubmVsXSA9IHVzZVBlcnNpc3RlZFN0YXRlKCdyZXBvc3QtY2hhbm5lbCcpO1xuICBjb25zdCBbcmVwb3N0QmlkLCBzZXRSZXBvc3RCaWRdID0gUmVhY3QudXNlU3RhdGUoMC4wMSk7XG4gIGNvbnN0IFtzaG93QWR2YW5jZWQsIHNldFNob3dBZHZhbmNlZF0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCBbcmVwb3N0TmFtZSwgc2V0UmVwb3N0TmFtZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0TmFtZSk7XG5cbiAgbGV0IHJlcG9zdEJpZEVycm9yO1xuICBpZiAocmVwb3N0QmlkID09PSAwKSB7XG4gICAgcmVwb3N0QmlkRXJyb3IgPSBfXygnRGVwb3NpdCBjYW5ub3QgYmUgMCcpO1xuICB9IGVsc2UgaWYgKGJhbGFuY2UgPT09IHJlcG9zdEJpZCkge1xuICAgIHJlcG9zdEJpZEVycm9yID0gX18oJ1BsZWFzZSBkZWNyZWFzZSB5b3VyIGRlcG9zaXQgdG8gYWNjb3VudCBmb3IgdHJhbnNhY3Rpb24gZmVlcycpO1xuICB9IGVsc2UgaWYgKGJhbGFuY2UgPCByZXBvc3RCaWQpIHtcbiAgICByZXBvc3RCaWRFcnJvciA9IF9fKCdEZXBvc2l0IGNhbm5vdCBiZSBoaWdoZXIgdGhhbiB5b3VyIGJhbGFuY2UnKTtcbiAgfSBlbHNlIGlmIChyZXBvc3RCaWQgPCBNSU5JTVVNX1BVQkxJU0hfQklEKSB7XG4gICAgcmVwb3N0QmlkRXJyb3IgPSBfXygnWW91ciBkZXBvc2l0IG11c3QgYmUgaGlnaGVyJyk7XG4gIH1cblxuICBsZXQgcmVwb3N0TmFtZUVycm9yO1xuICBpZiAoIXJlcG9zdE5hbWUpIHtcbiAgICByZXBvc3ROYW1lRXJyb3IgPSBfXygnQSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoIWlzTmFtZVZhbGlkKHJlcG9zdE5hbWUsIGZhbHNlKSkge1xuICAgIHJlcG9zdE5hbWVFcnJvciA9IElOVkFMSURfTkFNRV9FUlJPUjtcbiAgfSBlbHNlIGlmIChcbiAgICBjaGFubmVscyAmJlxuICAgIGNoYW5uZWxzLmZpbmQoY2xhaW0gPT4gY2xhaW0ubmFtZSA9PT0gcmVwb3N0Q2hhbm5lbCkgJiZcbiAgICBteUNsYWltcyAmJlxuICAgIG15Q2xhaW1zLmZpbmQoY2xhaW0gPT4gY2xhaW0ubmFtZSA9PT0gcmVwb3N0TmFtZSlcbiAgKSB7XG4gICAgcmVwb3N0TmFtZUVycm9yID0gX18oJ1lvdSBhbHJlYWR5IGhhdmUgYSBjbGFpbSB3aXRoIHRoaXMgbmFtZS4nKTtcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKChyZXBvc3ROYW1lRXJyb3IgfHwgcmVwb3N0TmFtZUVycm9yKSAmJiAhc2hvd0FkdmFuY2VkKSB7XG4gICAgICBzZXRTaG93QWR2YW5jZWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbcmVwb3N0QmlkRXJyb3IsIHJlcG9zdE5hbWVFcnJvciwgc2hvd0FkdmFuY2VkLCBzZXRTaG93QWR2YW5jZWRdKTtcblxuICBjb25zdCBjaGFubmVsU3RyaW5ncyA9IGNoYW5uZWxzICYmIGNoYW5uZWxzLm1hcChjaGFubmVsID0+IGNoYW5uZWwucGVybWFuZW50X3VybCkuam9pbignLCcpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcmVwb3N0Q2hhbm5lbCAmJiBjaGFubmVsU3RyaW5ncykge1xuICAgICAgY29uc3QgY2hhbm5lbHMgPSBjaGFubmVsU3RyaW5ncy5zcGxpdCgnLCcpO1xuICAgICAgY29uc3QgbmV3Q2hhbm5lbFVybCA9IGNoYW5uZWxzWzBdO1xuICAgICAgY29uc3QgeyBjbGFpbU5hbWUgfSA9IHBhcnNlVVJJKG5ld0NoYW5uZWxVcmwpO1xuICAgICAgc2V0UmVwb3N0Q2hhbm5lbChjbGFpbU5hbWUpO1xuICAgIH1cbiAgfSwgW2NoYW5uZWxTdHJpbmdzXSk7XG5cbiAgY29uc3QgbXlDbGFpbXNTdHJpbmcgPSBteUNsYWltcyAmJiBteUNsYWltcy5tYXAoY2hhbm5lbCA9PiBjaGFubmVsLnBlcm1hbmVudF91cmwpLmpvaW4oJywnKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobXlDbGFpbXNTdHJpbmcgPT09ICcnKSB7XG4gICAgICBkb0ZldGNoQ2xhaW1MaXN0TWluZSgpO1xuICAgIH1cbiAgfSwgW215Q2xhaW1zU3RyaW5nLCBkb0ZldGNoQ2xhaW1MaXN0TWluZV0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICBjb25zdCBjaGFubmVsVG9SZXBvc3RUbyA9IGNoYW5uZWxzICYmIGNoYW5uZWxzLmZpbmQoY2hhbm5lbCA9PiBjaGFubmVsLm5hbWUgPT09IHJlcG9zdENoYW5uZWwpO1xuICAgIGlmIChjaGFubmVsVG9SZXBvc3RUbyAmJiByZXBvc3ROYW1lICYmIHJlcG9zdEJpZCAmJiByZXBvc3RDaGFubmVsICYmIGNvbnRlbnRDbGFpbUlkKSB7XG4gICAgICBkb1JlcG9zdCh7XG4gICAgICAgIG5hbWU6IHJlcG9zdE5hbWUsXG4gICAgICAgIGJpZDogY3JlZGl0c1RvU3RyaW5nKHJlcG9zdEJpZCksXG4gICAgICAgIGNoYW5uZWxfaWQ6IGNoYW5uZWxUb1JlcG9zdFRvLmNsYWltX2lkLFxuICAgICAgICBjbGFpbV9pZDogY29udGVudENsYWltSWQsXG4gICAgICB9KS50aGVuKChyZXBvc3RDbGFpbTogU3RyZWFtQ2xhaW0pID0+IHtcbiAgICAgICAgYW5hbHl0aWNzLmFwaUxvZ1B1Ymxpc2gocmVwb3N0Q2xhaW0pO1xuICAgICAgICBkb0hpZGVNb2RhbCgpO1xuICAgICAgICBkb1RvYXN0KHsgbWVzc2FnZTogX18oJ1dvb2hvbyEgU3VjY2Vzc2Z1bGx5IHJlcG9zdGVkIHRoaXMgY2xhaW0uJykgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbG9zZU1vZGFsKCkge1xuICAgIGRvQ2xlYXJSZXBvc3RFcnJvcigpO1xuICAgIGRvSGlkZU1vZGFsKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc09wZW4gdHlwZT1cImNhcmRcIiBvbkFib3J0ZWQ9e2hhbmRsZUNsb3NlTW9kYWx9IG9uQ29uZmlybWVkPXtoYW5kbGVDbG9zZU1vZGFsfT5cbiAgICAgIDxDYXJkXG4gICAgICAgIGljb249e0lDT05TLlJFUE9TVH1cbiAgICAgICAgdGl0bGU9e1xuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgUmVwb3N0IDxlbT57dGl0bGV9PC9lbT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgIGVycm9yID8gKFxuICAgICAgICAgICAgPEVycm9yVGV4dD57X18oJ1RoZXJlIHdhcyBhbiBlcnJvciByZXBvc3RpbmcgdGhpcyBjbGFpbS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKX08L0Vycm9yVGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHNwYW4+e19fKCdSZXBvc3QgeW91ciBmYXZvcml0ZSBjbGFpbXMgdG8gaGVscCBtb3JlIHBlb3BsZSBkaXNjb3ZlciB0aGVtIScpfTwvc3Bhbj5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxTZWxlY3RDaGFubmVsXG4gICAgICAgICAgICAgIGxhYmVsPVwiQ2hhbm5lbCB0byByZXBvc3Qgb25cIlxuICAgICAgICAgICAgICBoaWRlQW5vblxuICAgICAgICAgICAgICBjaGFubmVsPXtyZXBvc3RDaGFubmVsfVxuICAgICAgICAgICAgICBvbkNoYW5uZWxDaGFuZ2U9e25ld0NoYW5uZWwgPT4gc2V0UmVwb3N0Q2hhbm5lbChuZXdDaGFubmVsKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IXNob3dBZHZhbmNlZCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQWR2YW5jZWQnKX0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FkdmFuY2VkKHRydWUpfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtzaG93QWR2YW5jZWQgJiYgKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8ZmllbGRzZXQtZ3JvdXAgY2xhc3M9XCJmaWVsZHNldC1ncm91cC0tc211c2hlZCBmaWVsZHNldC1ncm91cC0tZGlzYWJsZWQtcHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57X18oJ05hbWUnKX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1maWVsZF9fcHJlZml4XCI+e2BsYnJ5Oi8vJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICFyZXBvc3RDaGFubmVsIHx8IHJlcG9zdENoYW5uZWwgPT09IENIQU5ORUxfTkVXID8gJycgOiBgJHtyZXBvc3RDaGFubmVsfS9gXG4gICAgICAgICAgICAgICAgICAgICAgfWB9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVwb3N0X25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyZXBvc3ROYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtyZXBvc3ROYW1lRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHNldFJlcG9zdE5hbWUoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQtZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9maWVsZHNldC1zZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWZpZWxkX19oZWxwXCI+XG4gICAgICAgICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgICAgICAgbGJyeV9uYW1pbmdfbGluazogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdjb21tdW5pdHkgbmFtZScpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvbmFtaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdGhpcyB0byByZXBvc3QgdG8gYSBkaWZmZXJlbnQgJWxicnlfbmFtaW5nX2xpbmslLlxuICAgICAgICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcG9zdF9iaWRcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMC4xMjNcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1maWVsZC0tcHJpY2UtYW1vdW50XCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnRGVwb3NpdCAoTEJDKScpfVxuICAgICAgICAgICAgICAgICAgcG9zdGZpeD1cIkxCQ1wiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17cmVwb3N0QmlkfVxuICAgICAgICAgICAgICAgICAgZXJyb3I9e3JlcG9zdEJpZEVycm9yfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFyZXBvc3ROYW1lfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHNldFJlcG9zdEJpZChwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZSkpfVxuICAgICAgICAgICAgICAgICAgb25XaGVlbD17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZXBvc3RpbmcgfHwgcmVwb3N0QmlkRXJyb3IgfHwgcmVwb3N0TmFtZUVycm9yfVxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIGxhYmVsPXtyZXBvc3RpbmcgPyBfXygnUmVwb3N0aW5nJykgOiBfXygnUmVwb3N0Jyl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0NhbmNlbCcpfSBvbkNsaWNrPXtoYW5kbGVDbG9zZU1vZGFsfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxSZXBvc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZ0JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUE7QUFDQTtBQUNBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFxQkE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFJQTtBQURBO0FBR0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBTkE7QUFTQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUtBO0FBT0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFKQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBR0E7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFVQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBWkE7QUFhQTtBQUFBO0FBQUE7QUFiQTtBQWtCQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBckZBO0FBNEZBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalRepost/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalRevokeClaim/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalRevokeClaim/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalRevokeClaim/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n transactionItems: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectTransactionItems\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n abandonClaim: function abandonClaim(txid, nout) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doAbandonClaim\"])(txid, nout));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXZva2VDbGFpbS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFJldm9rZUNsYWltL2luZGV4LmpzPzI2N2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgZG9BYmFuZG9uQ2xhaW0sIHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBNb2RhbFJldm9rZUNsYWltIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHRyYW5zYWN0aW9uSXRlbXM6IHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbiAgYWJhbmRvbkNsYWltOiAodHhpZCwgbm91dCkgPT4gZGlzcGF0Y2goZG9BYmFuZG9uQ2xhaW0odHhpZCwgbm91dCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFJldm9rZUNsYWltKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalRevokeClaim/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalRevokeClaim/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalRevokeClaim/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ModalRevokeClaim; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/transaction_types */ \"../ui/constants/transaction_types.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\nfunction ModalRevokeClaim(props) {\n var transactionItems = props.transactionItems,\n txid = props.txid,\n nout = props.nout,\n closeModal = props.closeModal;\n\n var _ref = transactionItems.find(function (claim) {\n return claim.txid === txid && claim.nout === nout;\n }) || {},\n type = _ref.type,\n name = _ref.claim_name;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n channelName = _useState2[0],\n setChannelName = _useState2[1];\n\n function getButtonLabel(type) {\n if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"TIP\"]) {\n return 'Confirm Tip Unlock';\n } else if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"SUPPORT\"]) {\n return 'Confirm Support Revoke';\n }\n\n return 'Confirm Claim Revoke';\n }\n\n function getMsgBody(type, name) {\n if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"TIP\"]) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Are you sure you want to unlock these credits?')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('These credits are permanently yours and can be unlocked at any time. Unlocking them allows you to spend them, but can hurt the performance of your content in lookups and search results. It is recommended you leave tips locked until you need or want to spend them.')));\n } else if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"SUPPORT\"]) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Are you sure you want to remove this support?')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __(\"These credits are permanently yours and can be removed at any time. Removing this support will reduce the claim's discoverability and return the LBC to your spendable balance.\")));\n } else if (type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"CHANNEL\"] || type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"UPDATE\"] && name.startsWith('@')) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __(\"You're about to permanently delete a channel. Content published under this channel will be orphaned and their signing channel invalid. Content sync programs using this channel will fail.\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Are you sure? Type %name% to confirm that you wish to delete the channel.', {\n name: name\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: 'text',\n onChange: function onChange(e) {\n return setChannelName(e.target.value);\n }\n }));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Are you sure want to revoke this claim?')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('This will prevent others from resolving and accessing the content you published. It will return the LBC to your spendable balance, less a small transaction fee.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help error-text\"\n }, \" \", __('FINAL WARNING: This action is permanent and cannot be undone.')));\n }\n\n function revokeClaim() {\n var txid = props.txid,\n nout = props.nout;\n props.closeModal();\n props.abandonClaim(txid, nout);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: getButtonLabel(type),\n contentLabel: getButtonLabel(type),\n type: \"confirm\",\n confirmButtonLabel: getButtonLabel(type),\n onConfirmed: revokeClaim,\n onAborted: closeModal,\n confirmButtonDisabled: type === constants_transaction_types__WEBPACK_IMPORTED_MODULE_3__[\"CHANNEL\"] && name !== channelName\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", null, getMsgBody(type, name)));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXZva2VDbGFpbS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFJldm9rZUNsYWltL3ZpZXcuanN4P2JhMGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnbW9kYWwvbW9kYWwnO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCAqIGFzIHR4blR5cGVzIGZyb20gJ2NvbnN0YW50cy90cmFuc2FjdGlvbl90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQsXG4gIGFiYW5kb25DbGFpbTogKHN0cmluZywgbnVtYmVyKSA9PiB2b2lkLFxuICB0eGlkOiBzdHJpbmcsXG4gIG5vdXQ6IG51bWJlcixcbiAgdHJhbnNhY3Rpb25JdGVtczogQXJyYXk8VHJhbnNhY3Rpb24+LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kYWxSZXZva2VDbGFpbShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyB0cmFuc2FjdGlvbkl0ZW1zLCB0eGlkLCBub3V0LCBjbG9zZU1vZGFsIH0gPSBwcm9wcztcbiAgY29uc3QgeyB0eXBlLCBjbGFpbV9uYW1lOiBuYW1lIH0gPSB0cmFuc2FjdGlvbkl0ZW1zLmZpbmQoY2xhaW0gPT4gY2xhaW0udHhpZCA9PT0gdHhpZCAmJiBjbGFpbS5ub3V0ID09PSBub3V0KSB8fCB7fTtcbiAgY29uc3QgW2NoYW5uZWxOYW1lLCBzZXRDaGFubmVsTmFtZV0gPSB1c2VTdGF0ZSgnJyk7XG5cbiAgZnVuY3Rpb24gZ2V0QnV0dG9uTGFiZWwodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IHR4blR5cGVzLlRJUCkge1xuICAgICAgcmV0dXJuICdDb25maXJtIFRpcCBVbmxvY2snO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdHhuVHlwZXMuU1VQUE9SVCkge1xuICAgICAgcmV0dXJuICdDb25maXJtIFN1cHBvcnQgUmV2b2tlJztcbiAgICB9XG4gICAgcmV0dXJuICdDb25maXJtIENsYWltIFJldm9rZSc7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNc2dCb2R5KHR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IHR4blR5cGVzLlRJUCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxwPntfXygnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVubG9jayB0aGVzZSBjcmVkaXRzPycpfTwvcD5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICAgJ1RoZXNlIGNyZWRpdHMgYXJlIHBlcm1hbmVudGx5IHlvdXJzIGFuZCBjYW4gYmUgdW5sb2NrZWQgYXQgYW55IHRpbWUuIFVubG9ja2luZyB0aGVtIGFsbG93cyB5b3UgdG8gc3BlbmQgdGhlbSwgYnV0IGNhbiBodXJ0IHRoZSBwZXJmb3JtYW5jZSBvZiB5b3VyIGNvbnRlbnQgaW4gbG9va3VwcyBhbmQgc2VhcmNoIHJlc3VsdHMuIEl0IGlzIHJlY29tbWVuZGVkIHlvdSBsZWF2ZSB0aXBzIGxvY2tlZCB1bnRpbCB5b3UgbmVlZCBvciB3YW50IHRvIHNwZW5kIHRoZW0uJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdHhuVHlwZXMuU1VQUE9SVCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxwPntfXygnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHN1cHBvcnQ/Jyl9PC9wPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICBcIlRoZXNlIGNyZWRpdHMgYXJlIHBlcm1hbmVudGx5IHlvdXJzIGFuZCBjYW4gYmUgcmVtb3ZlZCBhdCBhbnkgdGltZS4gUmVtb3ZpbmcgdGhpcyBzdXBwb3J0IHdpbGwgcmVkdWNlIHRoZSBjbGFpbSdzIGRpc2NvdmVyYWJpbGl0eSBhbmQgcmV0dXJuIHRoZSBMQkMgdG8geW91ciBzcGVuZGFibGUgYmFsYW5jZS5cIlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdHhuVHlwZXMuQ0hBTk5FTCB8fCAodHlwZSA9PT0gdHhuVHlwZXMuVVBEQVRFICYmIG5hbWUuc3RhcnRzV2l0aCgnQCcpKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICBcIllvdSdyZSBhYm91dCB0byBwZXJtYW5lbnRseSBkZWxldGUgYSBjaGFubmVsLiBDb250ZW50IHB1Ymxpc2hlZCB1bmRlciB0aGlzIGNoYW5uZWwgd2lsbCBiZSBvcnBoYW5lZCBhbmQgdGhlaXIgc2lnbmluZyBjaGFubmVsIGludmFsaWQuIENvbnRlbnQgc3luYyBwcm9ncmFtcyB1c2luZyB0aGlzIGNoYW5uZWwgd2lsbCBmYWlsLlwiXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cD57X18oJ0FyZSB5b3Ugc3VyZT8gVHlwZSAlbmFtZSUgdG8gY29uZmlybSB0aGF0IHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGUgY2hhbm5lbC4nLCB7IG5hbWUgfSl9PC9wPlxuICAgICAgICAgIDxGb3JtRmllbGQgdHlwZT17J3RleHQnfSBvbkNoYW5nZT17ZSA9PiBzZXRDaGFubmVsTmFtZShlLnRhcmdldC52YWx1ZSl9IC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxwPntfXygnQXJlIHlvdSBzdXJlIHdhbnQgdG8gcmV2b2tlIHRoaXMgY2xhaW0/Jyl9PC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7X18oXG4gICAgICAgICAgICAnVGhpcyB3aWxsIHByZXZlbnQgb3RoZXJzIGZyb20gcmVzb2x2aW5nIGFuZCBhY2Nlc3NpbmcgdGhlIGNvbnRlbnQgeW91IHB1Ymxpc2hlZC4gSXQgd2lsbCByZXR1cm4gdGhlIExCQyB0byB5b3VyIHNwZW5kYWJsZSBiYWxhbmNlLCBsZXNzIGEgc21hbGwgdHJhbnNhY3Rpb24gZmVlLidcbiAgICAgICAgICApfVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHAgZXJyb3ItdGV4dFwiPiB7X18oJ0ZJTkFMIFdBUk5JTkc6IFRoaXMgYWN0aW9uIGlzIHBlcm1hbmVudCBhbmQgY2Fubm90IGJlIHVuZG9uZS4nKX08L3A+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZva2VDbGFpbSgpIHtcbiAgICBjb25zdCB7IHR4aWQsIG5vdXQgfSA9IHByb3BzO1xuXG4gICAgcHJvcHMuY2xvc2VNb2RhbCgpO1xuICAgIHByb3BzLmFiYW5kb25DbGFpbSh0eGlkLCBub3V0KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBpc09wZW5cbiAgICAgIHRpdGxlPXtnZXRCdXR0b25MYWJlbCh0eXBlKX1cbiAgICAgIGNvbnRlbnRMYWJlbD17Z2V0QnV0dG9uTGFiZWwodHlwZSl9XG4gICAgICB0eXBlPVwiY29uZmlybVwiXG4gICAgICBjb25maXJtQnV0dG9uTGFiZWw9e2dldEJ1dHRvbkxhYmVsKHR5cGUpfVxuICAgICAgb25Db25maXJtZWQ9e3Jldm9rZUNsYWltfVxuICAgICAgb25BYm9ydGVkPXtjbG9zZU1vZGFsfVxuICAgICAgY29uZmlybUJ1dHRvbkRpc2FibGVkPXt0eXBlID09PSB0eG5UeXBlcy5DSEFOTkVMICYmIG5hbWUgIT09IGNoYW5uZWxOYW1lfVxuICAgID5cbiAgICAgIDxzZWN0aW9uPntnZXRNc2dCb2R5KHR5cGUsIG5hbWUpfTwvc2VjdGlvbj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVlBO0FBREE7QUFZQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBUUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBYUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalRevokeClaim/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalRewardCode/index.js": -/*!********************************************!*\ - !*** ../ui/modal/modalRewardCode/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalRewardCode/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n rewardIsPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsRewardClaimPending\"])()(state, {\n reward_type: lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"rewards\"].TYPE_REWARD_CODE\n }),\n error: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimRewardError\"])()(state, {\n reward_type: lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"rewards\"].TYPE_REWARD_CODE\n })\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n submitRewardCode: function submitRewardCode(code) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doClaimRewardType\"])(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"rewards\"].TYPE_REWARD_CODE, {\n params: {\n code: code\n }\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXdhcmRDb2RlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUmV3YXJkQ29kZS9pbmRleC5qcz8zMmZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7XG4gIG1ha2VTZWxlY3RDbGFpbVJld2FyZEVycm9yLFxuICBkb0NsYWltUmV3YXJkVHlwZSxcbiAgbWFrZVNlbGVjdElzUmV3YXJkQ2xhaW1QZW5kaW5nLFxuICByZXdhcmRzIGFzIFJFV0FSRF9UWVBFUyxcbn0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgTW9kYWxSZXdhcmRDb2RlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHJld2FyZElzUGVuZGluZzogbWFrZVNlbGVjdElzUmV3YXJkQ2xhaW1QZW5kaW5nKCkoc3RhdGUsIHtcbiAgICByZXdhcmRfdHlwZTogUkVXQVJEX1RZUEVTLlRZUEVfUkVXQVJEX0NPREUsXG4gIH0pLFxuICBlcnJvcjogbWFrZVNlbGVjdENsYWltUmV3YXJkRXJyb3IoKShzdGF0ZSwgeyByZXdhcmRfdHlwZTogUkVXQVJEX1RZUEVTLlRZUEVfUkVXQVJEX0NPREUgfSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxuICBzdWJtaXRSZXdhcmRDb2RlOiBjb2RlID0+IGRpc3BhdGNoKGRvQ2xhaW1SZXdhcmRUeXBlKFJFV0FSRF9UWVBFUy5UWVBFX1JFV0FSRF9DT0RFLCB7IHBhcmFtczogeyBjb2RlIH0gfSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFJld2FyZENvZGUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUpBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalRewardCode/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalRewardCode/view.jsx": -/*!********************************************!*\ - !*** ../ui/modal/modalRewardCode/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ModalRewardCode = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalRewardCode, _React$PureComponent);\n\n function ModalRewardCode() {\n var _this;\n\n _classCallCheck(this, ModalRewardCode);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ModalRewardCode).call(this));\n _this.state = {\n rewardCode: ''\n };\n _assertThisInitialized(_this).handleSubmit = _this.handleSubmit.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ModalRewardCode, [{\n key: \"handleSubmit\",\n value: function handleSubmit() {\n var rewardCode = this.state.rewardCode;\n var submitRewardCode = this.props.submitRewardCode;\n submitRewardCode(rewardCode);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n rewardIsPending = _this$props.rewardIsPending,\n error = _this$props.error;\n var rewardCode = this.state.rewardCode;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n title: __('Enter Reward Code'),\n contentLabel: __('Enter Reward Code'),\n type: \"custom\",\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: this.handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"p\", null, __('Redeem a custom reward code for LBC'), '. ', react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/rewards#reward-code\",\n label: __('Learn more')\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: true,\n type: \"text\",\n name: \"reward-code\",\n inputButton: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n disabled: !rewardCode || rewardIsPending,\n label: rewardIsPending ? __('Redeeming') : __('Redeem')\n }),\n label: __('Code'),\n placeholder: \"0123abc\",\n error: error,\n value: rewardCode,\n onChange: function onChange(e) {\n return _this2.setState({\n rewardCode: e.target.value\n });\n }\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: closeModal\n })));\n }\n }]);\n\n return ModalRewardCode;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalRewardCode);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSZXdhcmRDb2RlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsUmV3YXJkQ29kZS92aWV3LmpzeD9kMmJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZvcm0gfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBlcnJvcjogP3N0cmluZyxcbiAgcmV3YXJkSXNQZW5kaW5nOiBib29sZWFuLFxuICBzdWJtaXRSZXdhcmRDb2RlOiBzdHJpbmcgPT4gdm9pZCxcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIHJld2FyZENvZGU6IHN0cmluZyxcbn07XG5cbmNsYXNzIE1vZGFsUmV3YXJkQ29kZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgcmV3YXJkQ29kZTogJycsXG4gICAgfTtcblxuICAgICh0aGlzOiBhbnkpLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQoKSB7XG4gICAgY29uc3QgeyByZXdhcmRDb2RlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgc3VibWl0UmV3YXJkQ29kZSB9ID0gdGhpcy5wcm9wcztcbiAgICBzdWJtaXRSZXdhcmRDb2RlKHJld2FyZENvZGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xvc2VNb2RhbCwgcmV3YXJkSXNQZW5kaW5nLCBlcnJvciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHJld2FyZENvZGUgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGlzT3BlblxuICAgICAgICB0aXRsZT17X18oJ0VudGVyIFJld2FyZCBDb2RlJyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0VudGVyIFJld2FyZCBDb2RlJyl9XG4gICAgICAgIHR5cGU9XCJjdXN0b21cIlxuICAgICAgICBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIDxGb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7X18oJ1JlZGVlbSBhIGN1c3RvbSByZXdhcmQgY29kZSBmb3IgTEJDJyl9XG4gICAgICAgICAgICB7Jy4gJ31cbiAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9yZXdhcmRzI3Jld2FyZC1jb2RlXCIgbGFiZWw9e19fKCdMZWFybiBtb3JlJyl9IC8+LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG5hbWU9XCJyZXdhcmQtY29kZVwiXG4gICAgICAgICAgICBpbnB1dEJ1dHRvbj17XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXJld2FyZENvZGUgfHwgcmV3YXJkSXNQZW5kaW5nfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtyZXdhcmRJc1BlbmRpbmcgPyBfXygnUmVkZWVtaW5nJykgOiBfXygnUmVkZWVtJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbD17X18oJ0NvZGUnKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMDEyM2FiY1wiXG4gICAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgICB2YWx1ZT17cmV3YXJkQ29kZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHRoaXMuc2V0U3RhdGUoeyByZXdhcmRDb2RlOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsUmV3YXJkQ29kZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFQQTtBQVFBO0FBQ0E7OztBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWhCQTtBQW1CQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQTNEQTtBQUNBO0FBNkRBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalRewardCode/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalRouter/index.js": -/*!****************************************!*\ - !*** ../ui/modal/modalRouter/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalRouter/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n modal: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_1__[\"selectModal\"])(state),\n error: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectError\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doOpenModal\"])(props));\n },\n hideModal: function hideModal(props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])(props));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSb3V0ZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxSb3V0ZXIvaW5kZXguanM/NmIxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0TW9kYWwgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvYXBwJztcbmltcG9ydCB7IGRvT3Blbk1vZGFsLCBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7IHNlbGVjdEVycm9yIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgTW9kYWxSb3V0ZXIgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgbW9kYWw6IHNlbGVjdE1vZGFsKHN0YXRlKSxcbiAgZXJyb3I6IHNlbGVjdEVycm9yKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3Blbk1vZGFsOiBwcm9wcyA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChwcm9wcykpLFxuICBoaWRlTW9kYWw6IHByb3BzID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKHByb3BzKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKE1vZGFsUm91dGVyKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalRouter/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalRouter/view.jsx": -/*!****************************************!*\ - !*** ../ui/modal/modalRouter/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var modal_modalError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! modal/modalError */ \"../ui/modal/modalError/index.js\");\n/* harmony import */ var modal_modalDownloading__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! modal/modalDownloading */ \"../ui/modal/modalDownloading/index.js\");\n/* harmony import */ var modal_modalAutoGenerateThumbnail__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! modal/modalAutoGenerateThumbnail */ \"../ui/modal/modalAutoGenerateThumbnail/index.js\");\n/* harmony import */ var modal_modalAutoUpdateDownloaded__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! modal/modalAutoUpdateDownloaded */ \"../ui/modal/modalAutoUpdateDownloaded/index.js\");\n/* harmony import */ var modal_modalUpgrade__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! modal/modalUpgrade */ \"../ui/modal/modalUpgrade/index.js\");\n/* harmony import */ var modal_modalWelcome__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! modal/modalWelcome */ \"../ui/modal/modalWelcome/index.js\");\n/* harmony import */ var modal_modalFirstReward__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! modal/modalFirstReward */ \"../ui/modal/modalFirstReward/index.js\");\n/* harmony import */ var modal_modalRemoveFile__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! modal/modalRemoveFile */ \"../ui/modal/modalRemoveFile/index.js\");\n/* harmony import */ var modal_modalTransactionFailed__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! modal/modalTransactionFailed */ \"../ui/modal/modalTransactionFailed/index.js\");\n/* harmony import */ var modal_modalFileTimeout__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! modal/modalFileTimeout */ \"../ui/modal/modalFileTimeout/index.js\");\n/* harmony import */ var modal_modalAffirmPurchase__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! modal/modalAffirmPurchase */ \"../ui/modal/modalAffirmPurchase/index.js\");\n/* harmony import */ var modal_modalRevokeClaim__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! modal/modalRevokeClaim */ \"../ui/modal/modalRevokeClaim/index.js\");\n/* harmony import */ var modal_modalPhoneCollection__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! modal/modalPhoneCollection */ \"../ui/modal/modalPhoneCollection/index.js\");\n/* harmony import */ var modal_modalFirstSubscription__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! modal/modalFirstSubscription */ \"../ui/modal/modalFirstSubscription/index.js\");\n/* harmony import */ var modal_modalConfirmTransaction__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! modal/modalConfirmTransaction */ \"../ui/modal/modalConfirmTransaction/index.js\");\n/* harmony import */ var modal_modalSocialShare__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! modal/modalSocialShare */ \"../ui/modal/modalSocialShare/index.js\");\n/* harmony import */ var modal_modalSendTip__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! modal/modalSendTip */ \"../ui/modal/modalSendTip/index.js\");\n/* harmony import */ var modal_modalPublish__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! modal/modalPublish */ \"../ui/modal/modalPublish/index.js\");\n/* harmony import */ var modal_modalOpenExternalResource__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! modal/modalOpenExternalResource */ \"../ui/modal/modalOpenExternalResource/index.js\");\n/* harmony import */ var modal_modalConfirmThumbnailUpload__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! modal/modalConfirmThumbnailUpload */ \"../ui/modal/modalConfirmThumbnailUpload/index.js\");\n/* harmony import */ var modal_modalWalletEncrypt__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! modal/modalWalletEncrypt */ \"../ui/modal/modalWalletEncrypt/index.js\");\n/* harmony import */ var modal_modalWalletDecrypt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! modal/modalWalletDecrypt */ \"../ui/modal/modalWalletDecrypt/index.js\");\n/* harmony import */ var modal_modalWalletUnlock__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! modal/modalWalletUnlock */ \"../ui/modal/modalWalletUnlock/index.js\");\n/* harmony import */ var modal_modalRewardCode__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! modal/modalRewardCode */ \"../ui/modal/modalRewardCode/index.js\");\n/* harmony import */ var modal_modalPasswordUnsave__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! modal/modalPasswordUnsave */ \"../ui/modal/modalPasswordUnsave/index.js\");\n/* harmony import */ var modal_modalCommentAcknowledgement__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! modal/modalCommentAcknowledgement */ \"../ui/modal/modalCommentAcknowledgement/index.js\");\n/* harmony import */ var modal_modalWalletSend__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! modal/modalWalletSend */ \"../ui/modal/modalWalletSend/index.js\");\n/* harmony import */ var modal_modalWalletReceive__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! modal/modalWalletReceive */ \"../ui/modal/modalWalletReceive/index.js\");\n/* harmony import */ var modal_modalYoutubeWelcome__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! modal/modalYoutubeWelcome */ \"../ui/modal/modalYoutubeWelcome/index.js\");\n/* harmony import */ var modal_modalChannelCreate__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! modal/modalChannelCreate */ \"../ui/modal/modalChannelCreate/index.js\");\n/* harmony import */ var modal_modalMobileNavigation__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! modal/modalMobileNavigation */ \"../ui/modal/modalMobileNavigation/index.js\");\n/* harmony import */ var modal_modalSetReferrer__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! modal/modalSetReferrer */ \"../ui/modal/modalSetReferrer/index.js\");\n/* harmony import */ var modal_modalRepost__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! modal/modalRepost */ \"../ui/modal/modalRepost/index.js\");\n/* harmony import */ var modal_modalSignOut__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! modal/modalSignOut */ \"../ui/modal/modalSignOut/index.js\");\n/* harmony import */ var _modalSupportsLiquidate__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../modalSupportsLiquidate */ \"../ui/modal/modalSupportsLiquidate/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ModalRouter(props) {\n var modal = props.modal,\n error = props.error,\n location = props.location,\n hideModal = props.hideModal;\n var pathname = location.pathname;\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n hideModal();\n }, [pathname, hideModal]);\n\n if (error) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalError__WEBPACK_IMPORTED_MODULE_3__[\"default\"], error);\n }\n\n if (!modal) {\n return null;\n }\n\n var id = modal.id,\n modalProps = modal.modalProps;\n\n switch (id) {\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"UPGRADE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalUpgrade__WEBPACK_IMPORTED_MODULE_7__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"DOWNLOADING\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalDownloading__WEBPACK_IMPORTED_MODULE_4__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"AUTO_GENERATE_THUMBNAIL\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalAutoGenerateThumbnail__WEBPACK_IMPORTED_MODULE_5__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"AUTO_UPDATE_DOWNLOADED\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalAutoUpdateDownloaded__WEBPACK_IMPORTED_MODULE_6__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"ERROR\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalError__WEBPACK_IMPORTED_MODULE_3__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"FILE_TIMEOUT\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalFileTimeout__WEBPACK_IMPORTED_MODULE_12__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WELCOME\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWelcome__WEBPACK_IMPORTED_MODULE_8__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"FIRST_REWARD\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalFirstReward__WEBPACK_IMPORTED_MODULE_9__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"TRANSACTION_FAILED\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalTransactionFailed__WEBPACK_IMPORTED_MODULE_11__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CONFIRM_FILE_REMOVE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalRemoveFile__WEBPACK_IMPORTED_MODULE_10__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"AFFIRM_PURCHASE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalAffirmPurchase__WEBPACK_IMPORTED_MODULE_13__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CONFIRM_CLAIM_REVOKE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalRevokeClaim__WEBPACK_IMPORTED_MODULE_14__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"PHONE_COLLECTION\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalPhoneCollection__WEBPACK_IMPORTED_MODULE_15__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"FIRST_SUBSCRIPTION\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalFirstSubscription__WEBPACK_IMPORTED_MODULE_16__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"SEND_TIP\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalSendTip__WEBPACK_IMPORTED_MODULE_19__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"SOCIAL_SHARE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalSocialShare__WEBPACK_IMPORTED_MODULE_18__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"PUBLISH\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalPublish__WEBPACK_IMPORTED_MODULE_20__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CONFIRM_EXTERNAL_RESOURCE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalOpenExternalResource__WEBPACK_IMPORTED_MODULE_21__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CONFIRM_TRANSACTION\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalConfirmTransaction__WEBPACK_IMPORTED_MODULE_17__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CONFIRM_THUMBNAIL_UPLOAD\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalConfirmThumbnailUpload__WEBPACK_IMPORTED_MODULE_22__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_ENCRYPT\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWalletEncrypt__WEBPACK_IMPORTED_MODULE_23__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_DECRYPT\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWalletDecrypt__WEBPACK_IMPORTED_MODULE_24__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_UNLOCK\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWalletUnlock__WEBPACK_IMPORTED_MODULE_25__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_PASSWORD_UNSAVE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalPasswordUnsave__WEBPACK_IMPORTED_MODULE_27__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"REWARD_GENERATED_CODE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalRewardCode__WEBPACK_IMPORTED_MODULE_26__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"COMMENT_ACKNOWEDGEMENT\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalCommentAcknowledgement__WEBPACK_IMPORTED_MODULE_28__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_SEND\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWalletSend__WEBPACK_IMPORTED_MODULE_29__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_RECEIVE\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalWalletReceive__WEBPACK_IMPORTED_MODULE_30__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"YOUTUBE_WELCOME\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalYoutubeWelcome__WEBPACK_IMPORTED_MODULE_31__[\"default\"], null);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"CREATE_CHANNEL\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalChannelCreate__WEBPACK_IMPORTED_MODULE_32__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"MOBILE_NAVIGATION\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalMobileNavigation__WEBPACK_IMPORTED_MODULE_33__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"SET_REFERRER\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalSetReferrer__WEBPACK_IMPORTED_MODULE_34__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"REPOST\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalRepost__WEBPACK_IMPORTED_MODULE_35__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"SIGN_OUT\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modalSignOut__WEBPACK_IMPORTED_MODULE_36__[\"default\"], modalProps);\n\n case constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"LIQUIDATE_SUPPORTS\"]:\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_modalSupportsLiquidate__WEBPACK_IMPORTED_MODULE_37__[\"default\"], modalProps);\n\n default:\n return null;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_1__[\"withRouter\"])(ModalRouter));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxSb3V0ZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxSb3V0ZXIvdmlldy5qc3g/YzEwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0ICogYXMgTU9EQUxTIGZyb20gJ2NvbnN0YW50cy9tb2RhbF90eXBlcyc7XG5pbXBvcnQgTW9kYWxFcnJvciBmcm9tICdtb2RhbC9tb2RhbEVycm9yJztcbmltcG9ydCBNb2RhbERvd25sb2FkaW5nIGZyb20gJ21vZGFsL21vZGFsRG93bmxvYWRpbmcnO1xuaW1wb3J0IE1vZGFsQXV0b0dlbmVyYXRlVGh1bWJuYWlsIGZyb20gJ21vZGFsL21vZGFsQXV0b0dlbmVyYXRlVGh1bWJuYWlsJztcbmltcG9ydCBNb2RhbEF1dG9VcGRhdGVEb3dubG9hZGVkIGZyb20gJ21vZGFsL21vZGFsQXV0b1VwZGF0ZURvd25sb2FkZWQnO1xuaW1wb3J0IE1vZGFsVXBncmFkZSBmcm9tICdtb2RhbC9tb2RhbFVwZ3JhZGUnO1xuaW1wb3J0IE1vZGFsV2VsY29tZSBmcm9tICdtb2RhbC9tb2RhbFdlbGNvbWUnO1xuaW1wb3J0IE1vZGFsRmlyc3RSZXdhcmQgZnJvbSAnbW9kYWwvbW9kYWxGaXJzdFJld2FyZCc7XG5pbXBvcnQgTW9kYWxSZW1vdmVGaWxlIGZyb20gJ21vZGFsL21vZGFsUmVtb3ZlRmlsZSc7XG5pbXBvcnQgTW9kYWxUcmFuc2FjdGlvbkZhaWxlZCBmcm9tICdtb2RhbC9tb2RhbFRyYW5zYWN0aW9uRmFpbGVkJztcbmltcG9ydCBNb2RhbEZpbGVUaW1lb3V0IGZyb20gJ21vZGFsL21vZGFsRmlsZVRpbWVvdXQnO1xuaW1wb3J0IE1vZGFsQWZmaXJtUHVyY2hhc2UgZnJvbSAnbW9kYWwvbW9kYWxBZmZpcm1QdXJjaGFzZSc7XG5pbXBvcnQgTW9kYWxSZXZva2VDbGFpbSBmcm9tICdtb2RhbC9tb2RhbFJldm9rZUNsYWltJztcbmltcG9ydCBNb2RhbFBob25lQ29sbGVjdGlvbiBmcm9tICdtb2RhbC9tb2RhbFBob25lQ29sbGVjdGlvbic7XG5pbXBvcnQgTW9kYWxGaXJzdFN1YnNjcmlwdGlvbiBmcm9tICdtb2RhbC9tb2RhbEZpcnN0U3Vic2NyaXB0aW9uJztcbmltcG9ydCBNb2RhbENvbmZpcm1UcmFuc2FjdGlvbiBmcm9tICdtb2RhbC9tb2RhbENvbmZpcm1UcmFuc2FjdGlvbic7XG5pbXBvcnQgTW9kYWxTb2NpYWxTaGFyZSBmcm9tICdtb2RhbC9tb2RhbFNvY2lhbFNoYXJlJztcbmltcG9ydCBNb2RhbFNlbmRUaXAgZnJvbSAnbW9kYWwvbW9kYWxTZW5kVGlwJztcbmltcG9ydCBNb2RhbFB1Ymxpc2ggZnJvbSAnbW9kYWwvbW9kYWxQdWJsaXNoJztcbmltcG9ydCBNb2RhbE9wZW5FeHRlcm5hbFJlc291cmNlIGZyb20gJ21vZGFsL21vZGFsT3BlbkV4dGVybmFsUmVzb3VyY2UnO1xuaW1wb3J0IE1vZGFsQ29uZmlybVRodW1ibmFpbFVwbG9hZCBmcm9tICdtb2RhbC9tb2RhbENvbmZpcm1UaHVtYm5haWxVcGxvYWQnO1xuaW1wb3J0IE1vZGFsV2FsbGV0RW5jcnlwdCBmcm9tICdtb2RhbC9tb2RhbFdhbGxldEVuY3J5cHQnO1xuaW1wb3J0IE1vZGFsV2FsbGV0RGVjcnlwdCBmcm9tICdtb2RhbC9tb2RhbFdhbGxldERlY3J5cHQnO1xuaW1wb3J0IE1vZGFsV2FsbGV0VW5sb2NrIGZyb20gJ21vZGFsL21vZGFsV2FsbGV0VW5sb2NrJztcbmltcG9ydCBNb2RhbFJld2FyZENvZGUgZnJvbSAnbW9kYWwvbW9kYWxSZXdhcmRDb2RlJztcbmltcG9ydCBNb2RhbFBhc3N3b3JkVW5zYXZlIGZyb20gJ21vZGFsL21vZGFsUGFzc3dvcmRVbnNhdmUnO1xuaW1wb3J0IE1vZGFsQ29tbWVudEFja25vd2xlZGdlbWVudCBmcm9tICdtb2RhbC9tb2RhbENvbW1lbnRBY2tub3dsZWRnZW1lbnQnO1xuaW1wb3J0IE1vZGFsV2FsbGV0U2VuZCBmcm9tICdtb2RhbC9tb2RhbFdhbGxldFNlbmQnO1xuaW1wb3J0IE1vZGFsV2FsbGV0UmVjZWl2ZSBmcm9tICdtb2RhbC9tb2RhbFdhbGxldFJlY2VpdmUnO1xuaW1wb3J0IE1vZGFsWW91dHViZVdlbGNvbWUgZnJvbSAnbW9kYWwvbW9kYWxZb3V0dWJlV2VsY29tZSc7XG5pbXBvcnQgTW9kYWxDcmVhdGVDaGFubmVsIGZyb20gJ21vZGFsL21vZGFsQ2hhbm5lbENyZWF0ZSc7XG5pbXBvcnQgTW9kYWxNb2JpbGVOYXZpZ2F0aW9uIGZyb20gJ21vZGFsL21vZGFsTW9iaWxlTmF2aWdhdGlvbic7XG5pbXBvcnQgTW9kYWxTZXRSZWZlcnJlciBmcm9tICdtb2RhbC9tb2RhbFNldFJlZmVycmVyJztcbmltcG9ydCBNb2RhbFJlcG9zdCBmcm9tICdtb2RhbC9tb2RhbFJlcG9zdCc7XG5pbXBvcnQgTW9kYWxTaWduT3V0IGZyb20gJ21vZGFsL21vZGFsU2lnbk91dCc7XG5pbXBvcnQgTW9kYWxMaXF1aWRhdGVTdXBwb3J0cyBmcm9tICcuLi9tb2RhbFN1cHBvcnRzTGlxdWlkYXRlJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbW9kYWw6IHsgaWQ6IHN0cmluZywgbW9kYWxQcm9wczoge30gfSxcbiAgZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nIH0sXG4gIGxvY2F0aW9uOiB7IHBhdGhuYW1lOiBzdHJpbmcgfSxcbiAgaGlkZU1vZGFsOiAoKSA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gTW9kYWxSb3V0ZXIocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgbW9kYWwsIGVycm9yLCBsb2NhdGlvbiwgaGlkZU1vZGFsIH0gPSBwcm9wcztcbiAgY29uc3QgeyBwYXRobmFtZSB9ID0gbG9jYXRpb247XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBoaWRlTW9kYWwoKTtcbiAgfSwgW3BhdGhuYW1lLCBoaWRlTW9kYWxdKTtcblxuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4gPE1vZGFsRXJyb3Igey4uLmVycm9yfSAvPjtcbiAgfVxuXG4gIGlmICghbW9kYWwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgaWQsIG1vZGFsUHJvcHMgfSA9IG1vZGFsO1xuXG4gIHN3aXRjaCAoaWQpIHtcbiAgICBjYXNlIE1PREFMUy5VUEdSQURFOlxuICAgICAgcmV0dXJuIDxNb2RhbFVwZ3JhZGUgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkRPV05MT0FESU5HOlxuICAgICAgcmV0dXJuIDxNb2RhbERvd25sb2FkaW5nIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5BVVRPX0dFTkVSQVRFX1RIVU1CTkFJTDpcbiAgICAgIHJldHVybiA8TW9kYWxBdXRvR2VuZXJhdGVUaHVtYm5haWwgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkFVVE9fVVBEQVRFX0RPV05MT0FERUQ6XG4gICAgICByZXR1cm4gPE1vZGFsQXV0b1VwZGF0ZURvd25sb2FkZWQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkVSUk9SOlxuICAgICAgcmV0dXJuIDxNb2RhbEVycm9yIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5GSUxFX1RJTUVPVVQ6XG4gICAgICByZXR1cm4gPE1vZGFsRmlsZVRpbWVvdXQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLldFTENPTUU6XG4gICAgICByZXR1cm4gPE1vZGFsV2VsY29tZSB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuRklSU1RfUkVXQVJEOlxuICAgICAgcmV0dXJuIDxNb2RhbEZpcnN0UmV3YXJkIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5UUkFOU0FDVElPTl9GQUlMRUQ6XG4gICAgICByZXR1cm4gPE1vZGFsVHJhbnNhY3Rpb25GYWlsZWQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkNPTkZJUk1fRklMRV9SRU1PVkU6XG4gICAgICByZXR1cm4gPE1vZGFsUmVtb3ZlRmlsZSB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuQUZGSVJNX1BVUkNIQVNFOlxuICAgICAgcmV0dXJuIDxNb2RhbEFmZmlybVB1cmNoYXNlIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5DT05GSVJNX0NMQUlNX1JFVk9LRTpcbiAgICAgIHJldHVybiA8TW9kYWxSZXZva2VDbGFpbSB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuUEhPTkVfQ09MTEVDVElPTjpcbiAgICAgIHJldHVybiA8TW9kYWxQaG9uZUNvbGxlY3Rpb24gey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkZJUlNUX1NVQlNDUklQVElPTjpcbiAgICAgIHJldHVybiA8TW9kYWxGaXJzdFN1YnNjcmlwdGlvbiB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuU0VORF9USVA6XG4gICAgICByZXR1cm4gPE1vZGFsU2VuZFRpcCB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuU09DSUFMX1NIQVJFOlxuICAgICAgcmV0dXJuIDxNb2RhbFNvY2lhbFNoYXJlIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5QVUJMSVNIOlxuICAgICAgcmV0dXJuIDxNb2RhbFB1Ymxpc2ggey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkNPTkZJUk1fRVhURVJOQUxfUkVTT1VSQ0U6XG4gICAgICByZXR1cm4gPE1vZGFsT3BlbkV4dGVybmFsUmVzb3VyY2Ugey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkNPTkZJUk1fVFJBTlNBQ1RJT046XG4gICAgICByZXR1cm4gPE1vZGFsQ29uZmlybVRyYW5zYWN0aW9uIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5DT05GSVJNX1RIVU1CTkFJTF9VUExPQUQ6XG4gICAgICByZXR1cm4gPE1vZGFsQ29uZmlybVRodW1ibmFpbFVwbG9hZCB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuV0FMTEVUX0VOQ1JZUFQ6XG4gICAgICByZXR1cm4gPE1vZGFsV2FsbGV0RW5jcnlwdCB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuV0FMTEVUX0RFQ1JZUFQ6XG4gICAgICByZXR1cm4gPE1vZGFsV2FsbGV0RGVjcnlwdCB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgY2FzZSBNT0RBTFMuV0FMTEVUX1VOTE9DSzpcbiAgICAgIHJldHVybiA8TW9kYWxXYWxsZXRVbmxvY2sgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLldBTExFVF9QQVNTV09SRF9VTlNBVkU6XG4gICAgICByZXR1cm4gPE1vZGFsUGFzc3dvcmRVbnNhdmUgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLlJFV0FSRF9HRU5FUkFURURfQ09ERTpcbiAgICAgIHJldHVybiA8TW9kYWxSZXdhcmRDb2RlIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5DT01NRU5UX0FDS05PV0VER0VNRU5UOlxuICAgICAgcmV0dXJuIDxNb2RhbENvbW1lbnRBY2tub3dsZWRnZW1lbnQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLldBTExFVF9TRU5EOlxuICAgICAgcmV0dXJuIDxNb2RhbFdhbGxldFNlbmQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLldBTExFVF9SRUNFSVZFOlxuICAgICAgcmV0dXJuIDxNb2RhbFdhbGxldFJlY2VpdmUgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLllPVVRVQkVfV0VMQ09NRTpcbiAgICAgIHJldHVybiA8TW9kYWxZb3V0dWJlV2VsY29tZSAvPjtcbiAgICBjYXNlIE1PREFMUy5DUkVBVEVfQ0hBTk5FTDpcbiAgICAgIHJldHVybiA8TW9kYWxDcmVhdGVDaGFubmVsIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5NT0JJTEVfTkFWSUdBVElPTjpcbiAgICAgIHJldHVybiA8TW9kYWxNb2JpbGVOYXZpZ2F0aW9uIHsuLi5tb2RhbFByb3BzfSAvPjtcbiAgICBjYXNlIE1PREFMUy5TRVRfUkVGRVJSRVI6XG4gICAgICByZXR1cm4gPE1vZGFsU2V0UmVmZXJyZXIgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLlJFUE9TVDpcbiAgICAgIHJldHVybiA8TW9kYWxSZXBvc3Qgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLlNJR05fT1VUOlxuICAgICAgcmV0dXJuIDxNb2RhbFNpZ25PdXQgey4uLm1vZGFsUHJvcHN9IC8+O1xuICAgIGNhc2UgTU9EQUxTLkxJUVVJREFURV9TVVBQT1JUUzpcbiAgICAgIHJldHVybiA8TW9kYWxMaXF1aWRhdGVTdXBwb3J0cyB7Li4ubW9kYWxQcm9wc30gLz47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoTW9kYWxSb3V0ZXIpO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBQUE7QUFDQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUF4RUE7QUEwRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalRouter/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalSendTip/index.js": -/*!*****************************************!*\ - !*** ../ui/modal/modalSendTip/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalSendTip/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTZW5kVGlwL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsU2VuZFRpcC9pbmRleC5qcz9lNDRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFNlbmRUaXAgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobnVsbCwgcGVyZm9ybSkoTW9kYWxTZW5kVGlwKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSendTip/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalSendTip/view.jsx": -/*!*****************************************!*\ - !*** ../ui/modal/modalSendTip/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_walletSendTip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/walletSendTip */ \"../ui/component/walletSendTip/index.js\");\n/* harmony import */ var component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/uriIndicator */ \"../ui/component/uriIndicator/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar ModalSendTip = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalSendTip, _React$PureComponent);\n\n function ModalSendTip() {\n _classCallCheck(this, ModalSendTip);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalSendTip).apply(this, arguments));\n }\n\n _createClass(ModalSendTip, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n uri = _this$props.uri,\n claimIsMine = _this$props.claimIsMine,\n isSupport = _this$props.isSupport;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n onAborted: closeModal,\n isOpen: true,\n type: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: claimIsMine || isSupport ? __('Support This Claim') : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tokens: {\n url: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_uriIndicator__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri,\n inline: true\n })\n }\n }, \"Send a tip to %url%\"),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_walletSendTip__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri,\n claimIsMine: claimIsMine,\n isSupport: isSupport,\n onCancel: closeModal,\n sendTipCallback: closeModal\n })\n }));\n }\n }]);\n\n return ModalSendTip;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalSendTip);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTZW5kVGlwL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsU2VuZFRpcC92aWV3LmpzeD80YzQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgU2VuZFRpcCBmcm9tICdjb21wb25lbnQvd2FsbGV0U2VuZFRpcCc7XG5pbXBvcnQgVXJpSW5kaWNhdG9yIGZyb20gJ2NvbXBvbmVudC91cmlJbmRpY2F0b3InO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICB1cmk6IHN0cmluZyxcbiAgY2xhaW1Jc01pbmU6IGJvb2xlYW4sXG4gIGlzU3VwcG9ydDogYm9vbGVhbixcbn07XG5cbmNsYXNzIE1vZGFsU2VuZFRpcCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xvc2VNb2RhbCwgdXJpLCBjbGFpbUlzTWluZSwgaXNTdXBwb3J0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbCBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9IGlzT3BlbiB0eXBlPVwiY2FyZFwiPlxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgIGNsYWltSXNNaW5lIHx8IGlzU3VwcG9ydCA/IChcbiAgICAgICAgICAgICAgX18oJ1N1cHBvcnQgVGhpcyBDbGFpbScpXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgIHVybDogPFVyaUluZGljYXRvciB1cmk9e3VyaX0gaW5saW5lIC8+LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTZW5kIGEgdGlwIHRvICV1cmwlXG4gICAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgPFNlbmRUaXBcbiAgICAgICAgICAgICAgdXJpPXt1cml9XG4gICAgICAgICAgICAgIGNsYWltSXNNaW5lPXtjbGFpbUlzTWluZX1cbiAgICAgICAgICAgICAgaXNTdXBwb3J0PXtpc1N1cHBvcnR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtjbG9zZU1vZGFsfVxuICAgICAgICAgICAgICBzZW5kVGlwQ2FsbGJhY2s9e2Nsb3NlTW9kYWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFNlbmRUaXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBREE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQWZBO0FBMEJBOzs7O0FBaENBO0FBQ0E7QUFrQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSendTip/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalSetReferrer/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalSetReferrer/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalSetReferrer/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n referrerSetPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectSetReferrerPending\"])(state),\n referrerSetError: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectSetReferrerError\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n setReferrer: function setReferrer(referrer, doClaim) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doUserSetReferrer\"])(referrer, doClaim));\n },\n resetReferrerError: function resetReferrerError() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doUserSetReferrerReset\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTZXRSZWZlcnJlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFNldFJlZmVycmVyL2luZGV4LmpzP2YxYzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgZG9Vc2VyU2V0UmVmZXJyZXIsIHNlbGVjdFNldFJlZmVycmVyRXJyb3IsIHNlbGVjdFNldFJlZmVycmVyUGVuZGluZywgZG9Vc2VyU2V0UmVmZXJyZXJSZXNldCB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IE1vZGFsU2V0UmVmZXJyZXIgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgcmVmZXJyZXJTZXRQZW5kaW5nOiBzZWxlY3RTZXRSZWZlcnJlclBlbmRpbmcoc3RhdGUpLFxuICByZWZlcnJlclNldEVycm9yOiBzZWxlY3RTZXRSZWZlcnJlckVycm9yKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG4gIHNldFJlZmVycmVyOiAocmVmZXJyZXIsIGRvQ2xhaW0pID0+IGRpc3BhdGNoKGRvVXNlclNldFJlZmVycmVyKHJlZmVycmVyLCBkb0NsYWltKSksXG4gIHJlc2V0UmVmZXJyZXJFcnJvcjogKCkgPT4gZGlzcGF0Y2goZG9Vc2VyU2V0UmVmZXJyZXJSZXNldCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoTW9kYWxTZXRSZWZlcnJlcik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSetReferrer/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalSetReferrer/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalSetReferrer/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_help_link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/help-link */ \"../ui/component/common/help-link.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar ModalSetReferrer = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalSetReferrer, _React$PureComponent);\n\n function ModalSetReferrer() {\n var _this;\n\n _classCallCheck(this, ModalSetReferrer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ModalSetReferrer).call(this));\n _this.state = {\n referrer: ''\n };\n _assertThisInitialized(_this).handleSubmit = _this.handleSubmit.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleClose = _this.handleClose.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).handleTextChange = _this.handleTextChange.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ModalSetReferrer, [{\n key: \"handleSubmit\",\n value: function handleSubmit() {\n var referrer = this.state.referrer;\n var setReferrer = this.props.setReferrer;\n setReferrer(referrer, true);\n }\n }, {\n key: \"handleClose\",\n value: function handleClose() {\n var _this$props = this.props,\n referrerSetError = _this$props.referrerSetError,\n resetReferrerError = _this$props.resetReferrerError,\n closeModal = _this$props.closeModal;\n\n if (referrerSetError) {\n resetReferrerError();\n }\n\n closeModal();\n }\n }, {\n key: \"handleTextChange\",\n value: function handleTextChange(e) {\n var _this$props2 = this.props,\n referrerSetError = _this$props2.referrerSetError,\n resetReferrerError = _this$props2.resetReferrerError;\n this.setState({\n referrer: e.target.value\n });\n\n if (referrerSetError) {\n resetReferrerError();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n closeModal = _this$props3.closeModal,\n rewardIsPending = _this$props3.rewardIsPending,\n referrerSetError = _this$props3.referrerSetError,\n referrerSetPending = _this$props3.referrerSetPending;\n var referrer = this.state.referrer;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Enter Inviter'),\n type: \"card\",\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: __('Enter Inviter'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, __('Did someone invite you to use lbry.tv? Tell us who and you both get a reward!'), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_help_link__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n href: \"https://lbry.com/faq/referrals\"\n })),\n actions: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: this.handleSubmit\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: true,\n type: \"text\",\n name: \"referrer-code\",\n inputButton: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n type: \"submit\",\n disabled: !referrer || rewardIsPending,\n label: __('Set')\n }),\n label: __('Code or channel'),\n placeholder: \"0123abc\",\n value: referrer,\n onChange: this.handleTextChange,\n error: !referrerSetPending && referrerSetError\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('Done'),\n onClick: this.handleClose\n })))\n }));\n }\n }]);\n\n return ModalSetReferrer;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalSetReferrer);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTZXRSZWZlcnJlci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFNldFJlZmVycmVyL3ZpZXcuanN4PzYwZjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSGVscExpbmsgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9oZWxwLWxpbmsnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbiAgZXJyb3I6ID9zdHJpbmcsXG4gIHJld2FyZElzUGVuZGluZzogYm9vbGVhbixcbiAgc2V0UmVmZXJyZXI6IChzdHJpbmcsIGJvb2xlYW4pID0+IHZvaWQsXG4gIHJlZmVycmVyU2V0UGVuZGluZzogYm9vbGVhbixcbiAgcmVmZXJyZXJTZXRFcnJvcj86IHN0cmluZyxcbiAgcmVzZXRSZWZlcnJlckVycm9yOiAoKSA9PiB2b2lkLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgcmVmZXJyZXI6IHN0cmluZyxcbn07XG5cbmNsYXNzIE1vZGFsU2V0UmVmZXJyZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHJlZmVycmVyOiAnJyxcbiAgICB9O1xuXG4gICAgKHRoaXM6IGFueSkuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5oYW5kbGVDbG9zZSA9IHRoaXMuaGFuZGxlQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5oYW5kbGVUZXh0Q2hhbmdlID0gdGhpcy5oYW5kbGVUZXh0Q2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQoKSB7XG4gICAgY29uc3QgeyByZWZlcnJlciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHNldFJlZmVycmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIHNldFJlZmVycmVyKHJlZmVycmVyLCB0cnVlKTtcbiAgfVxuXG4gIGhhbmRsZUNsb3NlKCkge1xuICAgIGNvbnN0IHsgcmVmZXJyZXJTZXRFcnJvciwgcmVzZXRSZWZlcnJlckVycm9yLCBjbG9zZU1vZGFsIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChyZWZlcnJlclNldEVycm9yKSB7XG4gICAgICByZXNldFJlZmVycmVyRXJyb3IoKTtcbiAgICB9XG4gICAgY2xvc2VNb2RhbCgpO1xuICB9XG5cbiAgaGFuZGxlVGV4dENoYW5nZShlOiBTeW50aGV0aWNJbnB1dEV2ZW50PCo+KSB7XG4gICAgY29uc3QgeyByZWZlcnJlclNldEVycm9yLCByZXNldFJlZmVycmVyRXJyb3IgfSA9IHRoaXMucHJvcHM7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgcmVmZXJyZXI6IGUudGFyZ2V0LnZhbHVlIH0pO1xuICAgIGlmIChyZWZlcnJlclNldEVycm9yKSB7XG4gICAgICByZXNldFJlZmVycmVyRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsLCByZXdhcmRJc1BlbmRpbmcsIHJlZmVycmVyU2V0RXJyb3IsIHJlZmVycmVyU2V0UGVuZGluZyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHJlZmVycmVyIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbCBpc09wZW4gY29udGVudExhYmVsPXtfXygnRW50ZXIgSW52aXRlcicpfSB0eXBlPVwiY2FyZFwiIG9uQWJvcnRlZD17Y2xvc2VNb2RhbH0+XG4gICAgICAgIDxDYXJkXG4gICAgICAgICAgdGl0bGU9e19fKCdFbnRlciBJbnZpdGVyJyl9XG4gICAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7X18oJ0RpZCBzb21lb25lIGludml0ZSB5b3UgdG8gdXNlIGxicnkudHY/IFRlbGwgdXMgd2hvIGFuZCB5b3UgYm90aCBnZXQgYSByZXdhcmQhJyl9XG4gICAgICAgICAgICAgIDxIZWxwTGluayBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvcmVmZXJyYWxzXCIgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8Rm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInJlZmVycmVyLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgaW5wdXRCdXR0b249e1xuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgZGlzYWJsZWQ9eyFyZWZlcnJlciB8fCByZXdhcmRJc1BlbmRpbmd9IGxhYmVsPXtfXygnU2V0Jyl9IC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0NvZGUgb3IgY2hhbm5lbCcpfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMTIzYWJjXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtyZWZlcnJlcn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBlcnJvcj17IXJlZmVycmVyU2V0UGVuZGluZyAmJiByZWZlcnJlclNldEVycm9yfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdEb25lJyl9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xvc2V9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxTZXRSZWZlcnJlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBVEE7QUFVQTtBQUNBOzs7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFBQTtBQUdBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQTFCQTtBQWlDQTs7OztBQTNFQTtBQUNBO0FBNkVBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalSetReferrer/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalSignOut/index.js": -/*!*****************************************!*\ - !*** ../ui/modal/modalSignOut/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalSignOut/view.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, {\n doSignOut: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doSignOut\"],\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"]\n})(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTaWduT3V0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsU2lnbk91dC9pbmRleC5qcz9hZGRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1NpZ25PdXQsIGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsU2lnbk91dCBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG51bGwsIHtcbiAgZG9TaWduT3V0LFxuICBkb0hpZGVNb2RhbCxcbn0pKE1vZGFsU2lnbk91dCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalSignOut/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalSignOut/view.jsx": -/*!*****************************************!*\ - !*** ../ui/modal/modalSignOut/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n\n\n\n\n\n\nfunction ModalRepost(props) {\n var doHideModal = props.doHideModal,\n doSignOut = props.doSignOut;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n type: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n title: __('Sign Out'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tokens: {\n rename_wallet_instructions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('rename your existing wallet'),\n href: \"https://lbry.com/faq/lbry-directories\"\n })\n }\n }, \"Your wallet data will remain intact. If you sign in with a different account, the wallets will be merged. To prevent this, you need to %rename_wallet_instructions% in the lbry/wallets directory.\"),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('Sign Out'),\n onClick: doSignOut\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: doHideModal\n }))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalRepost);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTaWduT3V0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsU2lnbk91dC92aWV3LmpzeD8xZmJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICBkb0hpZGVNb2RhbDogKCkgPT4gdm9pZCxcbiAgZG9TaWduT3V0OiAoKSA9PiB2b2lkLFxufTtcblxuZnVuY3Rpb24gTW9kYWxSZXBvc3QocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZG9IaWRlTW9kYWwsIGRvU2lnbk91dCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWwgaXNPcGVuIHR5cGU9XCJjYXJkXCI+XG4gICAgICA8Q2FyZFxuICAgICAgICB0aXRsZT17X18oJ1NpZ24gT3V0Jyl9XG4gICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgICByZW5hbWVfd2FsbGV0X2luc3RydWN0aW9uczogKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdyZW5hbWUgeW91ciBleGlzdGluZyB3YWxsZXQnKX1cbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9sYnJ5LWRpcmVjdG9yaWVzXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBZb3VyIHdhbGxldCBkYXRhIHdpbGwgcmVtYWluIGludGFjdC4gSWYgeW91IHNpZ24gaW4gd2l0aCBhIGRpZmZlcmVudCBhY2NvdW50LCB0aGUgd2FsbGV0cyB3aWxsIGJlIG1lcmdlZC4gVG9cbiAgICAgICAgICAgIHByZXZlbnQgdGhpcywgeW91IG5lZWQgdG8gJXJlbmFtZV93YWxsZXRfaW5zdHJ1Y3Rpb25zJSBpbiB0aGUgbGJyeS93YWxsZXRzIGRpcmVjdG9yeS5cbiAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICB9XG4gICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdTaWduIE91dCcpfSBvbkNsaWNrPXtkb1NpZ25PdXR9IC8+XG4gICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0NhbmNlbCcpfSBvbkNsaWNrPXtkb0hpZGVNb2RhbH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFJlcG9zdDtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQURBO0FBZUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXJCQTtBQTJCQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSignOut/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalSocialShare/index.js": -/*!*********************************************!*\ - !*** ../ui/modal/modalSocialShare/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalSocialShare/view.jsx\");\n\n\n\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTb2NpYWxTaGFyZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFNvY2lhbFNoYXJlL2luZGV4LmpzP2VjNDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsU29jaWFsU2hhcmUgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIG51bGwsXG4gIHBlcmZvcm1cbikoTW9kYWxTb2NpYWxTaGFyZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalSocialShare/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalSocialShare/view.jsx": -/*!*********************************************!*\ - !*** ../ui/modal/modalSocialShare/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_socialShare__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/socialShare */ \"../ui/component/socialShare/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\nvar ModalSocialShare = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalSocialShare, _React$PureComponent);\n\n function ModalSocialShare() {\n _classCallCheck(this, ModalSocialShare);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalSocialShare).apply(this, arguments));\n }\n\n _createClass(ModalSocialShare, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n closeModal = _this$props.closeModal,\n uri = _this$props.uri,\n webShareable = _this$props.webShareable;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n onAborted: closeModal,\n type: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __('Share'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_socialShare__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri,\n webShareable: webShareable\n })\n }));\n }\n }]);\n\n return ModalSocialShare;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalSocialShare);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTb2NpYWxTaGFyZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFNvY2lhbFNoYXJlL3ZpZXcuanN4PzliZjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBTb2NpYWxTaGFyZSBmcm9tICdjb21wb25lbnQvc29jaWFsU2hhcmUnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbiAgdXJpOiBzdHJpbmcsXG4gIHdlYlNoYXJlYWJsZTogYm9vbGVhbixcbn07XG5cbmNsYXNzIE1vZGFsU29jaWFsU2hhcmUgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNsb3NlTW9kYWwsIHVyaSwgd2ViU2hhcmVhYmxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgaXNPcGVuIG9uQWJvcnRlZD17Y2xvc2VNb2RhbH0gdHlwZT1cImNhcmRcIj5cbiAgICAgICAgPENhcmQgdGl0bGU9e19fKCdTaGFyZScpfSBhY3Rpb25zPXs8U29jaWFsU2hhcmUgdXJpPXt1cml9IHdlYlNoYXJlYWJsZT17d2ViU2hhcmVhYmxlfSAvPn0gLz5cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFNvY2lhbFNoYXJlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7Ozs7QUFSQTtBQUNBO0FBVUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSocialShare/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalSupportsLiquidate/index.js": -/*!***************************************************!*\ - !*** ../ui/modal/modalSupportsLiquidate/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalSupportsLiquidate/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n transactionItems: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectTransactionItems\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n },\n abandonClaim: function abandonClaim(txid, nout) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doAbandonClaim\"])(txid, nout));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTdXBwb3J0c0xpcXVpZGF0ZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFN1cHBvcnRzTGlxdWlkYXRlL2luZGV4LmpzPzBjMDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgZG9BYmFuZG9uQ2xhaW0sIHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBNb2RhbFN1cHBvcnRzTGlxdWlkYXRlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHRyYW5zYWN0aW9uSXRlbXM6IHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBjbG9zZU1vZGFsOiAoKSA9PiBkaXNwYXRjaChkb0hpZGVNb2RhbCgpKSxcbiAgYWJhbmRvbkNsYWltOiAodHhpZCwgbm91dCkgPT4gZGlzcGF0Y2goZG9BYmFuZG9uQ2xhaW0odHhpZCwgbm91dCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShNb2RhbFN1cHBvcnRzTGlxdWlkYXRlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalSupportsLiquidate/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalSupportsLiquidate/view.jsx": -/*!***************************************************!*\ - !*** ../ui/modal/modalSupportsLiquidate/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ModalSupportsLiquidate; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_supportsLiquidate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/supportsLiquidate */ \"../ui/component/supportsLiquidate/index.js\");\n\n\n\nfunction ModalSupportsLiquidate(props) {\n var closeModal = props.closeModal,\n uri = props.uri;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n contentLabel: 'Unlock Tips',\n type: \"card\",\n confirmButtonLabel: \"done\",\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_supportsLiquidate__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n uri: uri,\n handleClose: closeModal\n }));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxTdXBwb3J0c0xpcXVpZGF0ZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFN1cHBvcnRzTGlxdWlkYXRlL3ZpZXcuanN4P2U5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBTdXBwb3J0c0xpcXVpZGF0ZSBmcm9tICdjb21wb25lbnQvc3VwcG9ydHNMaXF1aWRhdGUnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICB1cmk6IHN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGFsU3VwcG9ydHNMaXF1aWRhdGUocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgdXJpIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc09wZW4gY29udGVudExhYmVsPXsnVW5sb2NrIFRpcHMnfSB0eXBlPVwiY2FyZFwiIGNvbmZpcm1CdXR0b25MYWJlbD1cImRvbmVcIiBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9PlxuICAgICAgPFN1cHBvcnRzTGlxdWlkYXRlIHVyaT17dXJpfSBoYW5kbGVDbG9zZT17Y2xvc2VNb2RhbH0gLz5cbiAgICA8L01vZGFsPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalSupportsLiquidate/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalTransactionFailed/index.js": -/*!***************************************************!*\ - !*** ../ui/modal/modalTransactionFailed/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalTransactionFailed/view.jsx\");\n\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxUcmFuc2FjdGlvbkZhaWxlZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFRyYW5zYWN0aW9uRmFpbGVkL2luZGV4LmpzPzUwYjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IE1vZGFsVHJhbnNhY3Rpb25GYWlsZWQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKCkgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFRyYW5zYWN0aW9uRmFpbGVkKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalTransactionFailed/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalTransactionFailed/view.jsx": -/*!***************************************************!*\ - !*** ../ui/modal/modalTransactionFailed/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\nvar ModalTransactionFailed = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalTransactionFailed, _React$PureComponent);\n\n function ModalTransactionFailed() {\n _classCallCheck(this, ModalTransactionFailed);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalTransactionFailed).apply(this, arguments));\n }\n\n _createClass(ModalTransactionFailed, [{\n key: \"render\",\n value: function render() {\n var closeModal = this.props.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Transaction failed'),\n title: __('Transaction Failed'),\n onConfirmed: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Sorry about that. Contact help@lbry.com if you continue to have issues.')));\n }\n }]);\n\n return ModalTransactionFailed;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalTransactionFailed);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxUcmFuc2FjdGlvbkZhaWxlZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFRyYW5zYWN0aW9uRmFpbGVkL3ZpZXcuanN4PzNmODkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbn07XG5cbmNsYXNzIE1vZGFsVHJhbnNhY3Rpb25GYWlsZWQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsIGlzT3BlbiBjb250ZW50TGFiZWw9e19fKCdUcmFuc2FjdGlvbiBmYWlsZWQnKX0gdGl0bGU9e19fKCdUcmFuc2FjdGlvbiBGYWlsZWQnKX0gb25Db25maXJtZWQ9e2Nsb3NlTW9kYWx9PlxuICAgICAgICA8cD57X18oJ1NvcnJ5IGFib3V0IHRoYXQuIENvbnRhY3QgaGVscEBsYnJ5LmNvbSBpZiB5b3UgY29udGludWUgdG8gaGF2ZSBpc3N1ZXMuJyl9PC9wPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsVHJhbnNhY3Rpb25GYWlsZWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBS0E7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBOzs7O0FBVEE7QUFDQTtBQVdBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalTransactionFailed/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalUpgrade/index.js": -/*!*****************************************!*\ - !*** ../ui/modal/modalUpgrade/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalUpgrade/view.jsx\");\n\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {\n downloadUpgrade: function downloadUpgrade() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doDownloadUpgrade\"])());\n },\n skipUpgrade: function skipUpgrade() {\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"])());\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doSkipUpgrade\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxVcGdyYWRlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsVXBncmFkZS9pbmRleC5qcz9hZDJiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0Rvd25sb2FkVXBncmFkZSwgZG9Ta2lwVXBncmFkZSwgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgTW9kYWxVcGdyYWRlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9ICgpID0+ICh7fSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBkb3dubG9hZFVwZ3JhZGU6ICgpID0+IGRpc3BhdGNoKGRvRG93bmxvYWRVcGdyYWRlKCkpLFxuICBza2lwVXBncmFkZTogKCkgPT4ge1xuICAgIGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpO1xuICAgIGRpc3BhdGNoKGRvU2tpcFVwZ3JhZGUoKSk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKE1vZGFsVXBncmFkZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalUpgrade/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalUpgrade/view.jsx": -/*!*****************************************!*\ - !*** ../ui/modal/modalUpgrade/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar ModalUpgrade = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalUpgrade, _React$PureComponent);\n\n function ModalUpgrade() {\n _classCallCheck(this, ModalUpgrade);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ModalUpgrade).apply(this, arguments));\n }\n\n _createClass(ModalUpgrade, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n downloadUpgrade = _this$props.downloadUpgrade,\n skipUpgrade = _this$props.skipUpgrade;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n contentLabel: __('Upgrade available'),\n title: __('LBRY Leveled Up'),\n type: \"confirm\",\n confirmButtonLabel: __('Upgrade'),\n abortButtonLabel: __('Skip'),\n onConfirmed: downloadUpgrade,\n onAborted: skipUpgrade\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('An updated version of LBRY is now available.'), ' ', __('Your version is out of date and may be unreliable or insecure.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('Want to know what has changed?'), \" See the\", ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('release notes'),\n href: \"https://github.com/lbryio/lbry-desktop/releases\"\n }), \".\"));\n }\n }]);\n\n return ModalUpgrade;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalUpgrade);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxVcGdyYWRlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsVXBncmFkZS92aWV3LmpzeD8xZjE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBkb3dubG9hZFVwZ3JhZGU6ICgpID0+IHZvaWQsXG4gIHNraXBVcGdyYWRlOiAoKSA9PiB2b2lkLFxufTtcblxuY2xhc3MgTW9kYWxVcGdyYWRlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkb3dubG9hZFVwZ3JhZGUsIHNraXBVcGdyYWRlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbFxuICAgICAgICBpc09wZW5cbiAgICAgICAgY29udGVudExhYmVsPXtfXygnVXBncmFkZSBhdmFpbGFibGUnKX1cbiAgICAgICAgdGl0bGU9e19fKCdMQlJZIExldmVsZWQgVXAnKX1cbiAgICAgICAgdHlwZT1cImNvbmZpcm1cIlxuICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw9e19fKCdVcGdyYWRlJyl9XG4gICAgICAgIGFib3J0QnV0dG9uTGFiZWw9e19fKCdTa2lwJyl9XG4gICAgICAgIG9uQ29uZmlybWVkPXtkb3dubG9hZFVwZ3JhZGV9XG4gICAgICAgIG9uQWJvcnRlZD17c2tpcFVwZ3JhZGV9XG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtfXygnQW4gdXBkYXRlZCB2ZXJzaW9uIG9mIExCUlkgaXMgbm93IGF2YWlsYWJsZS4nKX17JyAnfVxuICAgICAgICAgIHtfXygnWW91ciB2ZXJzaW9uIGlzIG91dCBvZiBkYXRlIGFuZCBtYXkgYmUgdW5yZWxpYWJsZSBvciBpbnNlY3VyZS4nKX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwXCI+XG4gICAgICAgICAge19fKCdXYW50IHRvIGtub3cgd2hhdCBoYXMgY2hhbmdlZD8nKX0gU2VlIHRoZXsnICd9XG4gICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdyZWxlYXNlIG5vdGVzJyl9IGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9yZWxlYXNlc1wiIC8+LlxuICAgICAgICA8L3A+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxVcGdyYWRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFjQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQXpCQTtBQUNBO0FBMkJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalUpgrade/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletDecrypt/index.js": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletDecrypt/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWalletDecrypt/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n walletDecryptSucceded: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectWalletDecryptSucceeded\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n decryptWallet: function decryptWallet(password) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doWalletDecrypt\"])(password));\n },\n updateWalletStatus: function updateWalletStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doWalletStatus\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXREZWNyeXB0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0RGVjcnlwdC9pbmRleC5qcz9jNDhmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1dhbGxldFN0YXR1cywgZG9XYWxsZXREZWNyeXB0LCBzZWxlY3RXYWxsZXREZWNyeXB0U3VjY2VlZGVkIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFdhbGxldERlY3J5cHQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgd2FsbGV0RGVjcnlwdFN1Y2NlZGVkOiBzZWxlY3RXYWxsZXREZWNyeXB0U3VjY2VlZGVkKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG4gIGRlY3J5cHRXYWxsZXQ6IHBhc3N3b3JkID0+IGRpc3BhdGNoKGRvV2FsbGV0RGVjcnlwdChwYXNzd29yZCkpLFxuICB1cGRhdGVXYWxsZXRTdGF0dXM6ICgpID0+IGRpc3BhdGNoKGRvV2FsbGV0U3RhdHVzKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFdhbGxldERlY3J5cHQpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletDecrypt/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletDecrypt/view.jsx": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletDecrypt/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_3__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\nvar ModalWalletDecrypt = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalWalletDecrypt, _React$PureComponent);\n\n function ModalWalletDecrypt() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ModalWalletDecrypt);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalWalletDecrypt)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n submitted: false // Prior actions could be marked complete\n\n });\n\n return _this;\n }\n\n _createClass(ModalWalletDecrypt, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var props = this.props,\n state = this.state;\n\n if (state.submitted && props.walletDecryptSucceded === true) {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_3__[\"deleteAuthToken\"])();\n props.closeModal();\n props.updateWalletStatus();\n }\n }\n }, {\n key: \"submitDecryptForm\",\n value: function submitDecryptForm() {\n this.setState({\n submitted: true\n });\n this.props.decryptWallet();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var closeModal = this.props.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n isOpen: true,\n title: __('Decrypt Wallet'),\n contentLabel: __('Decrypt Wallet'),\n type: \"confirm\",\n confirmButtonLabel: __('Decrypt Wallet'),\n abortButtonLabel: __('Cancel'),\n onConfirmed: function onConfirmed() {\n return _this2.submitDecryptForm();\n },\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Your wallet has been encrypted with a local password, performing this action will remove this password.'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/wallet-encryption\"\n }), \".\"));\n }\n }]);\n\n return ModalWalletDecrypt;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalWalletDecrypt);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXREZWNyeXB0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0RGVjcnlwdC92aWV3LmpzeD9kZTQ3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgZGVsZXRlQXV0aFRva2VuIH0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICBkZWNyeXB0V2FsbGV0OiAoKSA9PiB2b2lkLFxuICB1cGRhdGVXYWxsZXRTdGF0dXM6ICgpID0+IHZvaWQsXG4gIHdhbGxldERlY3J5cHRTdWNjZWRlZDogYm9vbGVhbixcbn07XG5cbnR5cGUgU3RhdGUgPSB7XG4gIHN1Ym1pdHRlZDogYm9vbGVhbixcbn07XG5cbmNsYXNzIE1vZGFsV2FsbGV0RGVjcnlwdCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRlID0ge1xuICAgIHN1Ym1pdHRlZDogZmFsc2UsIC8vIFByaW9yIGFjdGlvbnMgY291bGQgYmUgbWFya2VkIGNvbXBsZXRlXG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IHsgcHJvcHMsIHN0YXRlIH0gPSB0aGlzO1xuXG4gICAgaWYgKHN0YXRlLnN1Ym1pdHRlZCAmJiBwcm9wcy53YWxsZXREZWNyeXB0U3VjY2VkZWQgPT09IHRydWUpIHtcbiAgICAgIGRlbGV0ZUF1dGhUb2tlbigpO1xuICAgICAgcHJvcHMuY2xvc2VNb2RhbCgpO1xuICAgICAgcHJvcHMudXBkYXRlV2FsbGV0U3RhdHVzKCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RGVjcnlwdEZvcm0oKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN1Ym1pdHRlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLnByb3BzLmRlY3J5cHRXYWxsZXQoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGlzT3BlblxuICAgICAgICB0aXRsZT17X18oJ0RlY3J5cHQgV2FsbGV0Jyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ0RlY3J5cHQgV2FsbGV0Jyl9XG4gICAgICAgIHR5cGU9XCJjb25maXJtXCJcbiAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsPXtfXygnRGVjcnlwdCBXYWxsZXQnKX1cbiAgICAgICAgYWJvcnRCdXR0b25MYWJlbD17X18oJ0NhbmNlbCcpfVxuICAgICAgICBvbkNvbmZpcm1lZD17KCkgPT4gdGhpcy5zdWJtaXREZWNyeXB0Rm9ybSgpfVxuICAgICAgICBvbkFib3J0ZWQ9e2Nsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICdZb3VyIHdhbGxldCBoYXMgYmVlbiBlbmNyeXB0ZWQgd2l0aCBhIGxvY2FsIHBhc3N3b3JkLCBwZXJmb3JtaW5nIHRoaXMgYWN0aW9uIHdpbGwgcmVtb3ZlIHRoaXMgcGFzc3dvcmQuJ1xuICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0xlYXJuIG1vcmUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3dhbGxldC1lbmNyeXB0aW9uXCIgLz4uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFdhbGxldERlY3J5cHQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVlBOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQVFBO0FBUkE7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUlBOzs7O0FBMUNBO0FBQ0E7QUE0Q0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletDecrypt/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletEncrypt/index.js": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletEncrypt/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWalletEncrypt/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n walletEncryptSucceded: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectWalletEncryptSucceeded\"])(state),\n walletEncryptResult: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectWalletEncryptResult\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n encryptWallet: function encryptWallet(password) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doWalletEncrypt\"])(password));\n },\n updateWalletStatus: function updateWalletStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doWalletStatus\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRFbmNyeXB0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0RW5jcnlwdC9pbmRleC5qcz80NzFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1dhbGxldFN0YXR1cywgZG9XYWxsZXRFbmNyeXB0LCBzZWxlY3RXYWxsZXRFbmNyeXB0U3VjY2VlZGVkLCBzZWxlY3RXYWxsZXRFbmNyeXB0UmVzdWx0IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFdhbGxldEVuY3J5cHQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgd2FsbGV0RW5jcnlwdFN1Y2NlZGVkOiBzZWxlY3RXYWxsZXRFbmNyeXB0U3VjY2VlZGVkKHN0YXRlKSxcbiAgd2FsbGV0RW5jcnlwdFJlc3VsdDogc2VsZWN0V2FsbGV0RW5jcnlwdFJlc3VsdChzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IGRpc3BhdGNoKGRvSGlkZU1vZGFsKCkpLFxuICBlbmNyeXB0V2FsbGV0OiBwYXNzd29yZCA9PiBkaXNwYXRjaChkb1dhbGxldEVuY3J5cHQocGFzc3dvcmQpKSxcbiAgdXBkYXRlV2FsbGV0U3RhdHVzOiAoKSA9PiBkaXNwYXRjaChkb1dhbGxldFN0YXR1cygpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoTW9kYWxXYWxsZXRFbmNyeXB0KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletEncrypt/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletEncrypt/view.jsx": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletEncrypt/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar acknowledgementText = __('I Understand');\n\nvar ModalWalletEncrypt = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalWalletEncrypt, _React$PureComponent);\n\n function ModalWalletEncrypt() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ModalWalletEncrypt);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalWalletEncrypt)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n newPassword: null,\n newPasswordConfirm: null,\n passwordMismatch: false,\n understandConfirmed: false,\n understandError: false,\n submitted: false,\n // Prior actions could be marked complete\n failMessage: undefined,\n rememberPassword: false\n });\n\n return _this;\n }\n\n _createClass(ModalWalletEncrypt, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var props = this.props,\n state = this.state;\n\n if (state.submitted) {\n if (props.walletEncryptSucceded === true) {\n props.closeModal();\n props.updateWalletStatus();\n } else if (props.walletEncryptSucceded === false) {\n // See https://github.com/lbryio/lbry/issues/1307\n this.setState({\n failMessage: 'Unable to encrypt wallet.'\n });\n }\n }\n }\n }, {\n key: \"onChangeNewPassword\",\n value: function onChangeNewPassword(event) {\n this.setState({\n newPassword: event.target.value\n });\n }\n }, {\n key: \"onChangeRememberPassword\",\n value: function onChangeRememberPassword(event) {\n this.setState({\n rememberPassword: event.target.checked\n });\n }\n }, {\n key: \"onChangeNewPasswordConfirm\",\n value: function onChangeNewPasswordConfirm(event) {\n this.setState({\n newPasswordConfirm: event.target.value\n });\n }\n }, {\n key: \"onChangeUnderstandConfirm\",\n value: function onChangeUnderstandConfirm(event) {\n var regex = new RegExp('^.?' + acknowledgementText + '.?$', 'i');\n this.setState({\n understandConfirmed: regex.test(event.target.value)\n });\n }\n }, {\n key: \"submitEncryptForm\",\n value: function submitEncryptForm() {\n var state = this.state;\n\n if (!state.newPassword) {\n return;\n }\n\n var invalidEntries = false;\n\n if (state.newPassword !== state.newPasswordConfirm) {\n this.setState({\n passwordMismatch: true\n });\n invalidEntries = true;\n }\n\n if (state.understandConfirmed === false) {\n this.setState({\n understandError: true\n });\n invalidEntries = true;\n }\n\n if (invalidEntries === true) {\n return;\n }\n\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__[\"setSavedPassword\"])(state.newPassword, state.rememberPassword);\n this.setState({\n submitted: true\n });\n this.props.encryptWallet(state.newPassword);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var closeModal = this.props.closeModal;\n var _this$state = this.state,\n passwordMismatch = _this$state.passwordMismatch,\n understandError = _this$state.understandError,\n failMessage = _this$state.failMessage;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n title: __('Encrypt Wallet'),\n contentLabel: __('Encrypt Wallet'),\n type: \"custom\",\n onConfirmed: function onConfirmed() {\n return _this2.submitEncryptForm();\n },\n onAborted: closeModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n onSubmit: function onSubmit() {\n return _this2.submitEncryptForm();\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Encrypting your wallet will require a password to access your local wallet data when LBRY starts. Please enter a new password for your wallet.'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/wallet-encryption\"\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: true,\n error: passwordMismatch === true ? 'Passwords do not match' : false,\n label: __('Password'),\n placeholder: __('Shh...'),\n type: \"password\",\n name: \"wallet-new-password\",\n onChange: function onChange(event) {\n return _this2.onChangeNewPassword(event);\n }\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n error: passwordMismatch === true ? 'Passwords do not match' : false,\n label: __('Confirm Password'),\n placeholder: __('Your eyes only'),\n type: \"password\",\n name: \"wallet-new-password-confirm\",\n onChange: function onChange(event) {\n return _this2.onChangeNewPasswordConfirm(event);\n }\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('Remember Password'),\n type: \"checkbox\",\n name: \"wallet-remember-password\",\n onChange: function onChange(event) {\n return _this2.onChangeRememberPassword(event);\n },\n checked: this.state.rememberPassword\n })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__subtitle--status\"\n }, __('If your password is lost, it cannot be recovered. You will not be able to access your wallet without a password.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n inputButton: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Submit\"], {\n label: failMessage ? __('Encrypting Wallet') : __('Encrypt Wallet')\n }),\n error: understandError === true ? __('You must enter \"%acknowledgement_text%\"', {\n acknowledgement_text: acknowledgementText\n }) : false,\n label: __('Enter \"%acknowledgement_text%\"', {\n acknowledgement_text: acknowledgementText\n }),\n placeholder: __('Type \"%acknowledgement_text%\"', {\n acknowledgement_text: acknowledgementText\n }),\n type: \"text\",\n name: \"wallet-understand\",\n onChange: function onChange(event) {\n return _this2.onChangeUnderstandConfirm(event);\n }\n }), failMessage && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"error-text\"\n }, __(failMessage))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Cancel'),\n onClick: closeModal\n })));\n }\n }]);\n\n return ModalWalletEncrypt;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalWalletEncrypt);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRFbmNyeXB0L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0RW5jcnlwdC92aWV3LmpzeD80ODE3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUZpZWxkLCBTdWJtaXQgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgc2V0U2F2ZWRQYXNzd29yZCB9IGZyb20gJ3V0aWwvc2F2ZWQtcGFzc3dvcmRzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCxcbiAgd2FsbGV0RW5jcnlwdFN1Y2NlZGVkOiBib29sZWFuLFxuICB1cGRhdGVXYWxsZXRTdGF0dXM6IGJvb2xlYW4sXG4gIGVuY3J5cHRXYWxsZXQ6ICg/c3RyaW5nKSA9PiB2b2lkLFxuICB1cGRhdGVXYWxsZXRTdGF0dXM6ICgpID0+IHZvaWQsXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBuZXdQYXNzd29yZDogP3N0cmluZyxcbiAgbmV3UGFzc3dvcmRDb25maXJtOiA/c3RyaW5nLFxuICBwYXNzd29yZE1pc21hdGNoOiBib29sZWFuLFxuICB1bmRlcnN0YW5kQ29uZmlybWVkOiBib29sZWFuLFxuICB1bmRlcnN0YW5kRXJyb3I6IGJvb2xlYW4sXG4gIHN1Ym1pdHRlZDogYm9vbGVhbixcbiAgZmFpbE1lc3NhZ2U6ID9zdHJpbmcsXG4gIHJlbWVtYmVyUGFzc3dvcmQ6IGJvb2xlYW4sXG59O1xuXG5jb25zdCBhY2tub3dsZWRnZW1lbnRUZXh0ID0gX18oJ0kgVW5kZXJzdGFuZCcpO1xuXG5jbGFzcyBNb2RhbFdhbGxldEVuY3J5cHQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZSA9IHtcbiAgICBuZXdQYXNzd29yZDogbnVsbCxcbiAgICBuZXdQYXNzd29yZENvbmZpcm06IG51bGwsXG4gICAgcGFzc3dvcmRNaXNtYXRjaDogZmFsc2UsXG4gICAgdW5kZXJzdGFuZENvbmZpcm1lZDogZmFsc2UsXG4gICAgdW5kZXJzdGFuZEVycm9yOiBmYWxzZSxcbiAgICBzdWJtaXR0ZWQ6IGZhbHNlLCAvLyBQcmlvciBhY3Rpb25zIGNvdWxkIGJlIG1hcmtlZCBjb21wbGV0ZVxuICAgIGZhaWxNZXNzYWdlOiB1bmRlZmluZWQsXG4gICAgcmVtZW1iZXJQYXNzd29yZDogZmFsc2UsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IHsgcHJvcHMsIHN0YXRlIH0gPSB0aGlzO1xuXG4gICAgaWYgKHN0YXRlLnN1Ym1pdHRlZCkge1xuICAgICAgaWYgKHByb3BzLndhbGxldEVuY3J5cHRTdWNjZWRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBwcm9wcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgIHByb3BzLnVwZGF0ZVdhbGxldFN0YXR1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy53YWxsZXRFbmNyeXB0U3VjY2VkZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnkvaXNzdWVzLzEzMDdcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZhaWxNZXNzYWdlOiAnVW5hYmxlIHRvIGVuY3J5cHQgd2FsbGV0LicgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VOZXdQYXNzd29yZChldmVudDogU3ludGhldGljSW5wdXRFdmVudDw+KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG5ld1Bhc3N3b3JkOiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gIH1cblxuICBvbkNoYW5nZVJlbWVtYmVyUGFzc3dvcmQoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Pikge1xuICAgIHRoaXMuc2V0U3RhdGUoeyByZW1lbWJlclBhc3N3b3JkOiBldmVudC50YXJnZXQuY2hlY2tlZCB9KTtcbiAgfVxuXG4gIG9uQ2hhbmdlTmV3UGFzc3dvcmRDb25maXJtKGV2ZW50OiBTeW50aGV0aWNJbnB1dEV2ZW50PD4pIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgbmV3UGFzc3dvcmRDb25maXJtOiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gIH1cblxuICBvbkNoYW5nZVVuZGVyc3RhbmRDb25maXJtKGV2ZW50OiBTeW50aGV0aWNJbnB1dEV2ZW50PD4pIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoJ14uPycgKyBhY2tub3dsZWRnZW1lbnRUZXh0ICsgJy4/JCcsICdpJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB1bmRlcnN0YW5kQ29uZmlybWVkOiByZWdleC50ZXN0KGV2ZW50LnRhcmdldC52YWx1ZSksXG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXRFbmNyeXB0Rm9ybSgpIHtcbiAgICBjb25zdCB7IHN0YXRlIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFzdGF0ZS5uZXdQYXNzd29yZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbnZhbGlkRW50cmllcyA9IGZhbHNlO1xuXG4gICAgaWYgKHN0YXRlLm5ld1Bhc3N3b3JkICE9PSBzdGF0ZS5uZXdQYXNzd29yZENvbmZpcm0pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXNzd29yZE1pc21hdGNoOiB0cnVlIH0pO1xuICAgICAgaW52YWxpZEVudHJpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS51bmRlcnN0YW5kQ29uZmlybWVkID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHVuZGVyc3RhbmRFcnJvcjogdHJ1ZSB9KTtcbiAgICAgIGludmFsaWRFbnRyaWVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZEVudHJpZXMgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRTYXZlZFBhc3N3b3JkKHN0YXRlLm5ld1Bhc3N3b3JkLCBzdGF0ZS5yZW1lbWJlclBhc3N3b3JkKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgc3VibWl0dGVkOiB0cnVlIH0pO1xuICAgIHRoaXMucHJvcHMuZW5jcnlwdFdhbGxldChzdGF0ZS5uZXdQYXNzd29yZCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbG9zZU1vZGFsIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBwYXNzd29yZE1pc21hdGNoLCB1bmRlcnN0YW5kRXJyb3IsIGZhaWxNZXNzYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgaXNPcGVuXG4gICAgICAgIHRpdGxlPXtfXygnRW5jcnlwdCBXYWxsZXQnKX1cbiAgICAgICAgY29udGVudExhYmVsPXtfXygnRW5jcnlwdCBXYWxsZXQnKX1cbiAgICAgICAgdHlwZT1cImN1c3RvbVwiXG4gICAgICAgIG9uQ29uZmlybWVkPXsoKSA9PiB0aGlzLnN1Ym1pdEVuY3J5cHRGb3JtKCl9XG4gICAgICAgIG9uQWJvcnRlZD17Y2xvc2VNb2RhbH1cbiAgICAgID5cbiAgICAgICAgPEZvcm0gb25TdWJtaXQ9eygpID0+IHRoaXMuc3VibWl0RW5jcnlwdEZvcm0oKX0+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7X18oXG4gICAgICAgICAgICAgICdFbmNyeXB0aW5nIHlvdXIgd2FsbGV0IHdpbGwgcmVxdWlyZSBhIHBhc3N3b3JkIHRvIGFjY2VzcyB5b3VyIGxvY2FsIHdhbGxldCBkYXRhIHdoZW4gTEJSWSBzdGFydHMuIFBsZWFzZSBlbnRlciBhIG5ldyBwYXNzd29yZCBmb3IgeW91ciB3YWxsZXQuJ1xuICAgICAgICAgICAgKX17JyAnfVxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdMZWFybiBtb3JlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS93YWxsZXQtZW5jcnlwdGlvblwiIC8+LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgICAgIGVycm9yPXtwYXNzd29yZE1pc21hdGNoID09PSB0cnVlID8gJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2gnIDogZmFsc2V9XG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnUGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdTaGguLi4nKX1cbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgbmFtZT1cIndhbGxldC1uZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gdGhpcy5vbkNoYW5nZU5ld1Bhc3N3b3JkKGV2ZW50KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9maWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBlcnJvcj17cGFzc3dvcmRNaXNtYXRjaCA9PT0gdHJ1ZSA/ICdQYXNzd29yZHMgZG8gbm90IG1hdGNoJyA6IGZhbHNlfVxuICAgICAgICAgICAgICBsYWJlbD17X18oJ0NvbmZpcm0gUGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdZb3VyIGV5ZXMgb25seScpfVxuICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBuYW1lPVwid2FsbGV0LW5ldy1wYXNzd29yZC1jb25maXJtXCJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHRoaXMub25DaGFuZ2VOZXdQYXNzd29yZENvbmZpcm0oZXZlbnQpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2ZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnUmVtZW1iZXIgUGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgbmFtZT1cIndhbGxldC1yZW1lbWJlci1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0aGlzLm9uQ2hhbmdlUmVtZW1iZXJQYXNzd29yZChldmVudCl9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUucmVtZW1iZXJQYXNzd29yZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9maWVsZHNldC1zZWN0aW9uPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZS0tc3RhdHVzXCI+XG4gICAgICAgICAgICB7X18oXG4gICAgICAgICAgICAgICdJZiB5b3VyIHBhc3N3b3JkIGlzIGxvc3QsIGl0IGNhbm5vdCBiZSByZWNvdmVyZWQuIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyB5b3VyIHdhbGxldCB3aXRob3V0IGEgcGFzc3dvcmQuJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBpbnB1dEJ1dHRvbj17PFN1Ym1pdCBsYWJlbD17ZmFpbE1lc3NhZ2UgPyBfXygnRW5jcnlwdGluZyBXYWxsZXQnKSA6IF9fKCdFbmNyeXB0IFdhbGxldCcpfSAvPn1cbiAgICAgICAgICAgIGVycm9yPXtcbiAgICAgICAgICAgICAgdW5kZXJzdGFuZEVycm9yID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBfXygnWW91IG11c3QgZW50ZXIgXCIlYWNrbm93bGVkZ2VtZW50X3RleHQlXCInLCB7IGFja25vd2xlZGdlbWVudF90ZXh0OiBhY2tub3dsZWRnZW1lbnRUZXh0IH0pXG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9e19fKCdFbnRlciBcIiVhY2tub3dsZWRnZW1lbnRfdGV4dCVcIicsIHsgYWNrbm93bGVkZ2VtZW50X3RleHQ6IGFja25vd2xlZGdlbWVudFRleHQgfSl9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17X18oJ1R5cGUgXCIlYWNrbm93bGVkZ2VtZW50X3RleHQlXCInLCB7IGFja25vd2xlZGdlbWVudF90ZXh0OiBhY2tub3dsZWRnZW1lbnRUZXh0IH0pfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgbmFtZT1cIndhbGxldC11bmRlcnN0YW5kXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0aGlzLm9uQ2hhbmdlVW5kZXJzdGFuZENvbmZpcm0oZXZlbnQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2ZhaWxNZXNzYWdlICYmIDxkaXYgY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPntfXyhmYWlsTWVzc2FnZSl9PC9kaXY+fVxuICAgICAgICA8L0Zvcm0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnQ2FuY2VsJyl9IG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsV2FsbGV0RW5jcnlwdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUkE7QUFDQTs7Ozs7O0FBVUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTs7O0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQU1BO0FBTkE7QUFRQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTkE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFLQTtBQUxBO0FBU0E7QUFBQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFYQTtBQWFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTs7OztBQXJKQTtBQUNBO0FBdUpBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletEncrypt/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletReceive/index.js": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletReceive/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWalletReceive/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRSZWNlaXZlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0UmVjZWl2ZS9pbmRleC5qcz83NjE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBXYWxsZXRSZWNlaXZlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7fSk7XG5cbmNvbnN0IHBlcmZvcm0gPSB7XG4gIGRvSGlkZU1vZGFsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFdhbGxldFJlY2VpdmUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletReceive/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletReceive/view.jsx": -/*!***********************************************!*\ - !*** ../ui/modal/modalWalletReceive/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_walletAddress__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/walletAddress */ \"../ui/component/walletAddress/index.js\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n\n\n\n\nvar WalletAddressPage = function WalletAddressPage(props) {\n var doHideModal = props.doHideModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n onAborted: doHideModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_walletAddress__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletAddressPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRSZWNlaXZlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0UmVjZWl2ZS92aWV3LmpzeD83OTRjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdhbGxldEFkZHJlc3MgZnJvbSAnY29tcG9uZW50L3dhbGxldEFkZHJlc3MnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5cbnR5cGUgUHJvcHMgPSB7IGRvSGlkZU1vZGFsOiAoKSA9PiB2b2lkIH07XG5cbmNvbnN0IFdhbGxldEFkZHJlc3NQYWdlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGRvSGlkZU1vZGFsIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8TW9kYWwgaXNPcGVuIHR5cGU9XCJjYXJkXCIgb25BYm9ydGVkPXtkb0hpZGVNb2RhbH0+XG4gICAgICA8V2FsbGV0QWRkcmVzcyAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuZXhwb3J0IGRlZmF1bHQgV2FsbGV0QWRkcmVzc1BhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFDQTtBQU9BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletReceive/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletSend/index.js": -/*!********************************************!*\ - !*** ../ui/modal/modalWalletSend/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWalletSend/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRTZW5kL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0U2VuZC9pbmRleC5qcz83Nzg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBXYWxsZXRTZW5kIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7fSk7XG5cbmNvbnN0IHBlcmZvcm0gPSB7XG4gIGRvSGlkZU1vZGFsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFdhbGxldFNlbmQpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletSend/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletSend/view.jsx": -/*!********************************************!*\ - !*** ../ui/modal/modalWalletSend/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_walletSend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/walletSend */ \"../ui/component/walletSend/index.js\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n\n\n\n\nvar WalletSendModal = function WalletSendModal(props) {\n var doHideModal = props.doHideModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n onAborted: doHideModal\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_walletSend__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletSendModal);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRTZW5kL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2FsbGV0U2VuZC92aWV3LmpzeD9lYjZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdhbGxldFNlbmQgZnJvbSAnY29tcG9uZW50L3dhbGxldFNlbmQnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5cbnR5cGUgUHJvcHMgPSB7IGRvSGlkZU1vZGFsOiAoKSA9PiB2b2lkIH07XG5cbmNvbnN0IFdhbGxldFNlbmRNb2RhbCA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgeyBkb0hpZGVNb2RhbCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsIGlzT3BlbiB0eXBlPVwiY2FyZFwiIG9uQWJvcnRlZD17ZG9IaWRlTW9kYWx9PlxuICAgICAgPFdhbGxldFNlbmQgLz5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbmV4cG9ydCBkZWZhdWx0IFdhbGxldFNlbmRNb2RhbDtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUNBO0FBT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletSend/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletUnlock/index.js": -/*!**********************************************!*\ - !*** ../ui/modal/modalWalletUnlock/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWalletUnlock/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n walletUnlockSucceded: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectWalletUnlockSucceeded\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n closeModal: function closeModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n },\n quit: function quit() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doQuit\"])());\n },\n unlockWallet: function unlockWallet(password) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doWalletUnlock\"])(password));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRVbmxvY2svaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRVbmxvY2svaW5kZXguanM/M2Y2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9XYWxsZXRVbmxvY2ssIHNlbGVjdFdhbGxldFVubG9ja1N1Y2NlZWRlZCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9RdWl0LCBkb0hpZGVNb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBNb2RhbFdhbGxldFVubG9jayBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICB3YWxsZXRVbmxvY2tTdWNjZWRlZDogc2VsZWN0V2FsbGV0VW5sb2NrU3VjY2VlZGVkKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSksXG4gIHF1aXQ6ICgpID0+IGRpc3BhdGNoKGRvUXVpdCgpKSxcbiAgdW5sb2NrV2FsbGV0OiBwYXNzd29yZCA9PiBkaXNwYXRjaChkb1dhbGxldFVubG9jayhwYXNzd29yZCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShNb2RhbFdhbGxldFVubG9jayk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUFBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletUnlock/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWalletUnlock/view.jsx": -/*!**********************************************!*\ - !*** ../ui/modal/modalWalletUnlock/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar ModalWalletUnlock = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(ModalWalletUnlock, _React$PureComponent);\n\n function ModalWalletUnlock() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ModalWalletUnlock);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalWalletUnlock)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n password: '',\n rememberPassword: false\n });\n\n return _this;\n }\n\n _createClass(ModalWalletUnlock, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n var _this$props = this.props,\n unlockWallet = _this$props.unlockWallet,\n shouldTryWithBlankPassword = _this$props.shouldTryWithBlankPassword;\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__[\"getSavedPassword\"])().then(function (p) {\n if (p !== null) {\n _this2.setState({\n password: p,\n rememberPassword: true\n });\n\n unlockWallet(p);\n } else if (shouldTryWithBlankPassword) {\n unlockWallet('');\n }\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var props = this.props;\n\n if (props.walletUnlockSucceded === true) {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_4__[\"setSavedPassword\"])(this.state.password, this.state.rememberPassword);\n props.closeModal();\n }\n }\n }, {\n key: \"onChangePassword\",\n value: function onChangePassword(event) {\n this.setState({\n password: event.target.value\n });\n }\n }, {\n key: \"onChangeRememberPassword\",\n value: function onChangeRememberPassword(event) {\n this.setState({\n rememberPassword: event.target.checked\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n var _this$props2 = this.props,\n quit = _this$props2.quit,\n unlockWallet = _this$props2.unlockWallet,\n walletUnlockSucceded = _this$props2.walletUnlockSucceded;\n var _this$state = this.state,\n password = _this$state.password,\n rememberPassword = _this$state.rememberPassword;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n title: __('Unlock Wallet'),\n contentLabel: __('Unlock Wallet'),\n type: \"confirm\",\n shouldCloseOnOverlayClick: false,\n confirmButtonLabel: __('Unlock'),\n abortButtonLabel: __('Exit'),\n onConfirmed: function onConfirmed() {\n return unlockWallet(password);\n },\n onAborted: quit\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Your wallet has been encrypted with a local password. Please enter your wallet password to proceed.'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/wallet-encryption\"\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"Form\"], {\n className: \"section\",\n onSubmit: function onSubmit() {\n return unlockWallet(password);\n }\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n autoFocus: true,\n error: walletUnlockSucceded === false ? 'Incorrect Password' : false,\n label: __('Wallet Password'),\n type: \"password\",\n name: \"wallet-password\",\n onChange: function onChange(event) {\n return _this3.onChangePassword(event);\n },\n value: password || ''\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_1__[\"FormField\"], {\n label: __('Remember Password'),\n type: \"checkbox\",\n name: \"wallet-remember-password\",\n onChange: function onChange(event) {\n return _this3.onChangeRememberPassword(event);\n },\n checked: rememberPassword\n }))));\n }\n }]);\n\n return ModalWalletUnlock;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalWalletUnlock);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRVbmxvY2svdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvbW9kYWwvbW9kYWxXYWxsZXRVbmxvY2svdmlldy5qc3g/OGI5NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvcm0sIEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ21vZGFsL21vZGFsJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgeyBnZXRTYXZlZFBhc3N3b3JkLCBzZXRTYXZlZFBhc3N3b3JkIH0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuXG50eXBlIFByb3BzID0ge1xuICBxdWl0OiAoKSA9PiB2b2lkLFxuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxuICB1bmxvY2tXYWxsZXQ6ICg/c3RyaW5nKSA9PiB2b2lkLFxuICB3YWxsZXRVbmxvY2tTdWNjZWRlZDogYm9vbGVhbixcbiAgc2hvdWxkVHJ5V2l0aEJsYW5rUGFzc3dvcmQ6IGJvb2xlYW4sXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICBwYXNzd29yZDogc3RyaW5nLFxuICByZW1lbWJlclBhc3N3b3JkOiBib29sZWFuLFxufTtcblxuY2xhc3MgTW9kYWxXYWxsZXRVbmxvY2sgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZSA9IHtcbiAgICBwYXNzd29yZDogJycsXG4gICAgcmVtZW1iZXJQYXNzd29yZDogZmFsc2UsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyB1bmxvY2tXYWxsZXQsIHNob3VsZFRyeVdpdGhCbGFua1Bhc3N3b3JkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgZ2V0U2F2ZWRQYXNzd29yZCgpLnRoZW4ocCA9PiB7XG4gICAgICBpZiAocCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGFzc3dvcmQ6IHAsIHJlbWVtYmVyUGFzc3dvcmQ6IHRydWUgfSk7XG4gICAgICAgIHVubG9ja1dhbGxldChwKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkVHJ5V2l0aEJsYW5rUGFzc3dvcmQpIHtcbiAgICAgICAgdW5sb2NrV2FsbGV0KCcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gdGhpcztcblxuICAgIGlmIChwcm9wcy53YWxsZXRVbmxvY2tTdWNjZWRlZCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0U2F2ZWRQYXNzd29yZCh0aGlzLnN0YXRlLnBhc3N3b3JkLCB0aGlzLnN0YXRlLnJlbWVtYmVyUGFzc3dvcmQpO1xuICAgICAgcHJvcHMuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlUGFzc3dvcmQoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgcGFzc3dvcmQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgfVxuXG4gIG9uQ2hhbmdlUmVtZW1iZXJQYXNzd29yZChldmVudDogU3ludGhldGljSW5wdXRFdmVudDw+KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHJlbWVtYmVyUGFzc3dvcmQ6IGV2ZW50LnRhcmdldC5jaGVja2VkIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcXVpdCwgdW5sb2NrV2FsbGV0LCB3YWxsZXRVbmxvY2tTdWNjZWRlZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgcGFzc3dvcmQsIHJlbWVtYmVyUGFzc3dvcmQgfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbFxuICAgICAgICBpc09wZW5cbiAgICAgICAgdGl0bGU9e19fKCdVbmxvY2sgV2FsbGV0Jyl9XG4gICAgICAgIGNvbnRlbnRMYWJlbD17X18oJ1VubG9jayBXYWxsZXQnKX1cbiAgICAgICAgdHlwZT1cImNvbmZpcm1cIlxuICAgICAgICBzaG91bGRDbG9zZU9uT3ZlcmxheUNsaWNrPXtmYWxzZX1cbiAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsPXtfXygnVW5sb2NrJyl9XG4gICAgICAgIGFib3J0QnV0dG9uTGFiZWw9e19fKCdFeGl0Jyl9XG4gICAgICAgIG9uQ29uZmlybWVkPXsoKSA9PiB1bmxvY2tXYWxsZXQocGFzc3dvcmQpfVxuICAgICAgICBvbkFib3J0ZWQ9e3F1aXR9XG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtfXygnWW91ciB3YWxsZXQgaGFzIGJlZW4gZW5jcnlwdGVkIHdpdGggYSBsb2NhbCBwYXNzd29yZC4gUGxlYXNlIGVudGVyIHlvdXIgd2FsbGV0IHBhc3N3b3JkIHRvIHByb2NlZWQuJyl9eycgJ31cbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ0xlYXJuIG1vcmUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3dhbGxldC1lbmNyeXB0aW9uXCIgLz4uXG4gICAgICAgIDwvcD5cbiAgICAgICAgPEZvcm0gY2xhc3NOYW1lPVwic2VjdGlvblwiIG9uU3VibWl0PXsoKSA9PiB1bmxvY2tXYWxsZXQocGFzc3dvcmQpfT5cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgIGVycm9yPXt3YWxsZXRVbmxvY2tTdWNjZWRlZCA9PT0gZmFsc2UgPyAnSW5jb3JyZWN0IFBhc3N3b3JkJyA6IGZhbHNlfVxuICAgICAgICAgICAgbGFiZWw9e19fKCdXYWxsZXQgUGFzc3dvcmQnKX1cbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBuYW1lPVwid2FsbGV0LXBhc3N3b3JkXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0aGlzLm9uQ2hhbmdlUGFzc3dvcmQoZXZlbnQpfVxuICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkIHx8ICcnfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnUmVtZW1iZXIgUGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgbmFtZT1cIndhbGxldC1yZW1lbWJlci1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0aGlzLm9uQ2hhbmdlUmVtZW1iZXJQYXNzd29yZChldmVudCl9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3JlbWVtYmVyUGFzc3dvcmR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgPC9Gb3JtPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsV2FsbGV0VW5sb2NrO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7Ozs7OztBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFOQTtBQVFBOzs7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBUkE7QUFTQTtBQVRBO0FBYUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFOQTtBQU9BO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSkE7QUFLQTtBQUxBO0FBV0E7Ozs7QUE3RUE7QUFDQTtBQStFQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalWalletUnlock/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalWelcome/index.js": -/*!*****************************************!*\ - !*** ../ui/modal/modalWelcome/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalWelcome/view.jsx\");\n\n\n\n\n\n\nvar perform = function perform(dispatch) {\n return function () {\n return {\n closeModal: function closeModal() {\n dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doSetClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"NEW_USER_ACKNOWLEDGED\"], true));\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n }\n };\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(null, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXZWxjb21lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2VsY29tZS9pbmRleC5qcz8yZjdiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNldHRpbmdzIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBkb1NldENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3NldHRpbmdzJztcbmltcG9ydCBNb2RhbFdlbGNvbWUgZnJvbSAnLi92aWV3JztcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICgpID0+ICh7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHtcbiAgICBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoc2V0dGluZ3MuTkVXX1VTRVJfQUNLTk9XTEVER0VELCB0cnVlKSk7XG4gICAgZGlzcGF0Y2goZG9IaWRlTW9kYWwoKSk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgbnVsbCxcbiAgcGVyZm9ybVxuKShNb2RhbFdlbGNvbWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUNBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalWelcome/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalWelcome/view.jsx": -/*!*****************************************!*\ - !*** ../ui/modal/modalWelcome/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\nvar ModalWelcome = function ModalWelcome(props) {\n var closeModal = props.closeModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_1__[\"Modal\"], {\n type: \"custom\",\n isOpen: true,\n contentLabel: \"Welcome to LBRY\",\n title: __('Welcome to LBRY')\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Using LBRY is like dating a centaur. Totally normal up top, and'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"em\", null, __('way different')), ' ', __('underneath.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Up top, LBRY is similar to popular media sites.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Below, LBRY is controlled by users -- you -- via blockchain and decentralization.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n button: \"primary\",\n onClick: closeModal,\n label: __(\"I'm In\")\n })));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModalWelcome);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxXZWxjb21lL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL21vZGFsL21vZGFsV2VsY29tZS92aWV3LmpzeD9hZjAwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuXG50eXBlIFByb3BzID0ge1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkLFxufTtcblxuY29uc3QgTW9kYWxXZWxjb21lID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIHR5cGU9XCJjdXN0b21cIiBpc09wZW4gY29udGVudExhYmVsPVwiV2VsY29tZSB0byBMQlJZXCIgdGl0bGU9e19fKCdXZWxjb21lIHRvIExCUlknKX0+XG4gICAgICA8cD5cbiAgICAgICAge19fKCdVc2luZyBMQlJZIGlzIGxpa2UgZGF0aW5nIGEgY2VudGF1ci4gVG90YWxseSBub3JtYWwgdXAgdG9wLCBhbmQnKX0gPGVtPntfXygnd2F5IGRpZmZlcmVudCcpfTwvZW0+eycgJ31cbiAgICAgICAge19fKCd1bmRlcm5lYXRoLicpfVxuICAgICAgPC9wPlxuICAgICAgPHA+e19fKCdVcCB0b3AsIExCUlkgaXMgc2ltaWxhciB0byBwb3B1bGFyIG1lZGlhIHNpdGVzLicpfTwvcD5cbiAgICAgIDxwPntfXygnQmVsb3csIExCUlkgaXMgY29udHJvbGxlZCBieSB1c2VycyAtLSB5b3UgLS0gdmlhIGJsb2NrY2hhaW4gYW5kIGRlY2VudHJhbGl6YXRpb24uJyl9PC9wPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX19hY3Rpb25zXCI+XG4gICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG9uQ2xpY2s9e2Nsb3NlTW9kYWx9IGxhYmVsPXtfXyhcIkknbSBJblwiKX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFdlbGNvbWU7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFaQTtBQUNBO0FBaUJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/modal/modalWelcome/view.jsx\n"); - -/***/ }), - -/***/ "../ui/modal/modalYoutubeWelcome/index.js": -/*!************************************************!*\ - !*** ../ui/modal/modalYoutubeWelcome/index.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/modal/modalYoutubeWelcome/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = {\n doHideModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doHideModal\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxZb3V0dWJlV2VsY29tZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFlvdXR1YmVXZWxjb21lL2luZGV4LmpzPzM4MTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvSGlkZU1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IFdhbGxldFNlbmQgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuY29uc3QgcGVyZm9ybSA9IHtcbiAgZG9IaWRlTW9kYWwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoV2FsbGV0U2VuZCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalYoutubeWelcome/index.js\n"); - -/***/ }), - -/***/ "../ui/modal/modalYoutubeWelcome/view.jsx": -/*!************************************************!*\ - !*** ../ui/modal/modalYoutubeWelcome/view.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var modal_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modal/modal */ \"../ui/modal/modal.jsx\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var react_confetti__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-confetti */ \"../node_modules/react-confetti/dist/react-confetti.min.js\");\n/* harmony import */ var react_confetti__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_confetti__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\n\n\n\nvar YoutubeWelcome = function YoutubeWelcome(props) {\n var doHideModal = props.doHideModal;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(modal_modal__WEBPACK_IMPORTED_MODULE_2__[\"Modal\"], {\n isOpen: true,\n type: \"card\",\n onAborted: doHideModal\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_confetti__WEBPACK_IMPORTED_MODULE_4___default.a, {\n recycle: false,\n style: {\n position: 'fixed'\n },\n numberOfPieces: 100\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __(\"You're Free!\"),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __(\"You've escaped the land of spying, censorship, and exploitation.\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", {\n className: \"emoji\"\n }, \" \\uD83D\\uDCA9\")), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('Welcome to the land of content freedom.'), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", {\n className: \"emoji\"\n }, \" \\uD83C\\uDF08\"))),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"primary\",\n label: __('Create an Account'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"]),\n onClick: doHideModal\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"link\",\n label: __('Not Yet'),\n onClick: doHideModal\n }))\n }));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (YoutubeWelcome);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbW9kYWwvbW9kYWxZb3V0dWJlV2VsY29tZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9tb2RhbC9tb2RhbFlvdXR1YmVXZWxjb21lL3ZpZXcuanN4PzRlZWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdtb2RhbC9tb2RhbCc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IENvbmZldHRpIGZyb20gJ3JlYWN0LWNvbmZldHRpJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5cbnR5cGUgUHJvcHMgPSB7IGRvSGlkZU1vZGFsOiAoKSA9PiB2b2lkIH07XG5cbmNvbnN0IFlvdXR1YmVXZWxjb21lID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGRvSGlkZU1vZGFsIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc09wZW4gdHlwZT1cImNhcmRcIiBvbkFib3J0ZWQ9e2RvSGlkZU1vZGFsfT5cbiAgICAgIDxDb25mZXR0aSByZWN5Y2xlPXtmYWxzZX0gc3R5bGU9e3sgcG9zaXRpb246ICdmaXhlZCcgfX0gbnVtYmVyT2ZQaWVjZXM9ezEwMH0gLz5cbiAgICAgIDxDYXJkXG4gICAgICAgIHRpdGxlPXtfXyhcIllvdSdyZSBGcmVlIVwiKX1cbiAgICAgICAgc3VidGl0bGU9e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7X18oXCJZb3UndmUgZXNjYXBlZCB0aGUgbGFuZCBvZiBzcHlpbmcsIGNlbnNvcnNoaXAsIGFuZCBleHBsb2l0YXRpb24uXCIpfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJlbW9qaVwiPiDwn5KpPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHtfXygnV2VsY29tZSB0byB0aGUgbGFuZCBvZiBjb250ZW50IGZyZWVkb20uJyl9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImVtb2ppXCI+IPCfjIg8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIGxhYmVsPXtfXygnQ3JlYXRlIGFuIEFjY291bnQnKX1cbiAgICAgICAgICAgICAgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLkFVVEh9YH1cbiAgICAgICAgICAgICAgb25DbGljaz17ZG9IaWRlTW9kYWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdOb3QgWWV0Jyl9IG9uQ2xpY2s9e2RvSGlkZU1vZGFsfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBZb3V0dWJlV2VsY29tZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUlBO0FBQUE7QUFJQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBdEJBO0FBTkE7QUFDQTtBQW1DQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/modal/modalYoutubeWelcome/view.jsx\n"); - -/***/ }), - -/***/ "../ui/native.js": -/*!***********************!*\ - !*** ../ui/native.js ***! - \***********************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nvar Native = {};\n\nNative.imagePath = function (file) {\n return \"staticResourcesPath/img/\".concat(file);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Native);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvbmF0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL25hdGl2ZS5qcz9jNWNkIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE5hdGl2ZSA9IHt9O1xuXG5cbk5hdGl2ZS5pbWFnZVBhdGggPSBmaWxlID0+IGBzdGF0aWNSZXNvdXJjZXNQYXRoL2ltZy8ke2ZpbGV9YDtcblxuZXhwb3J0IGRlZmF1bHQgTmF0aXZlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/native.js\n"); - -/***/ }), - -/***/ "../ui/page/channel/index.js": -/*!***********************************!*\ - !*** ../ui/page/channel/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./view */ \"../ui/page/channel/view.jsx\");\n\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTitleForUri\"])(props.uri)(state),\n thumbnail: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectThumbnailForUri\"])(props.uri)(state),\n cover: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectCoverForUri\"])(props.uri)(state),\n channelIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimIsMine\"])(props.uri)(state),\n page: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectCurrentChannelPage\"])(state),\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(props.uri)(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectIsSubscribed\"])(props.uri, true)(state),\n channelIsBlocked: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectChannelIsBlocked\"])(props.uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"selectBlackListedOutpoints\"])(state),\n supportOption: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_6__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"SUPPORT_OPTION\"])(state),\n showMature: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_6__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"SHOW_MATURE\"])(state),\n subCount: Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectSubCountForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(modal, props) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_5__[\"doOpenModal\"])(modal, props));\n },\n fetchSubCount: function fetchSubCount(claimId) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"doFetchSubCount\"])(claimId));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_7__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY2hhbm5lbC9pbmRleC5qcz84YWFlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgKiBhcyBzZXR0aW5ncyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdENsYWltSXNNaW5lLFxuICBtYWtlU2VsZWN0VGl0bGVGb3JVcmksXG4gIG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmksXG4gIG1ha2VTZWxlY3RDb3ZlckZvclVyaSxcbiAgc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlLFxuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIHNlbGVjdENoYW5uZWxJc0Jsb2NrZWQsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMsIGRvRmV0Y2hTdWJDb3VudCwgbWFrZVNlbGVjdFN1YkNvdW50Rm9yVXJpIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0SXNTdWJzY3JpYmVkIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgQ2hhbm5lbFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgdGh1bWJuYWlsOiBtYWtlU2VsZWN0VGh1bWJuYWlsRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjb3ZlcjogbWFrZVNlbGVjdENvdmVyRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxuICBjaGFubmVsSXNNaW5lOiBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUocHJvcHMudXJpKShzdGF0ZSksXG4gIHBhZ2U6IHNlbGVjdEN1cnJlbnRDaGFubmVsUGFnZShzdGF0ZSksXG4gIGNsYWltOiBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGlzU3Vic2NyaWJlZDogbWFrZVNlbGVjdElzU3Vic2NyaWJlZChwcm9wcy51cmksIHRydWUpKHN0YXRlKSxcbiAgY2hhbm5lbElzQmxvY2tlZDogc2VsZWN0Q2hhbm5lbElzQmxvY2tlZChwcm9wcy51cmkpKHN0YXRlKSxcbiAgYmxhY2tMaXN0ZWRPdXRwb2ludHM6IHNlbGVjdEJsYWNrTGlzdGVkT3V0cG9pbnRzKHN0YXRlKSxcbiAgc3VwcG9ydE9wdGlvbjogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoc2V0dGluZ3MuU1VQUE9SVF9PUFRJT04pKHN0YXRlKSxcbiAgc2hvd01hdHVyZTogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoc2V0dGluZ3MuU0hPV19NQVRVUkUpKHN0YXRlKSxcbiAgc3ViQ291bnQ6IG1ha2VTZWxlY3RTdWJDb3VudEZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3Blbk1vZGFsOiAobW9kYWwsIHByb3BzKSA9PiBkaXNwYXRjaChkb09wZW5Nb2RhbChtb2RhbCwgcHJvcHMpKSxcbiAgZmV0Y2hTdWJDb3VudDogY2xhaW1JZCA9PiBkaXNwYXRjaChkb0ZldGNoU3ViQ291bnQoY2xhaW1JZCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShDaGFubmVsUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFBQTtBQUNBO0FBY0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/channel/index.js\n"); - -/***/ }), - -/***/ "../ui/page/channel/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/channel/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_subscribeButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/subscribeButton */ \"../ui/component/subscribeButton/index.js\");\n/* harmony import */ var component_blockButton__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/blockButton */ \"../ui/component/blockButton/index.js\");\n/* harmony import */ var component_shareButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/shareButton */ \"../ui/component/shareButton/index.js\");\n/* harmony import */ var component_common_tabs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/common/tabs */ \"../ui/component/common/tabs.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var component_channelContent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/channelContent */ \"../ui/component/channelContent/index.js\");\n/* harmony import */ var component_channelAbout__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/channelAbout */ \"../ui/component/channelAbout/index.js\");\n/* harmony import */ var component_channelDiscussion__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! component/channelDiscussion */ \"../ui/component/channelDiscussion/index.js\");\n/* harmony import */ var component_channelThumbnail__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! component/channelThumbnail */ \"../ui/component/channelThumbnail/index.js\");\n/* harmony import */ var component_channelEdit__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! component/channelEdit */ \"../ui/component/channelEdit/index.js\");\n/* harmony import */ var component_claimUri__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! component/claimUri */ \"../ui/component/claimUri/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_common_help_link__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! component/common/help-link */ \"../ui/component/common/help-link.jsx\");\n/* harmony import */ var constants_search__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! constants/search */ \"../ui/constants/search.js\");\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var tiny_relative_date__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! tiny-relative-date */ \"../node_modules/tiny-relative-date/src/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PAGE_VIEW_QUERY = \"view\";\nvar ABOUT_PAGE = \"about\";\nvar DISCUSSION_PAGE = \"discussion\";\nvar LIGHTHOUSE_URL = 'https://lighthouse.lbry.com/search';\nvar ARROW_LEFT_KEYCODE = 37;\nvar ARROW_RIGHT_KEYCODE = 39;\n\nfunction ChannelPage(props) {\n var uri = props.uri,\n title = props.title,\n cover = props.cover,\n history = props.history,\n location = props.location,\n page = props.page,\n channelIsMine = props.channelIsMine,\n thumbnail = props.thumbnail,\n claim = props.claim,\n isSubscribed = props.isSubscribed,\n channelIsBlocked = props.channelIsBlocked,\n blackListedOutpoints = props.blackListedOutpoints,\n openModal = props.openModal,\n supportOption = props.supportOption,\n showMature = props.showMature,\n fetchSubCount = props.fetchSubCount,\n subCount = props.subCount;\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(uri),\n channelName = _parseURI.channelName;\n\n var search = location.search;\n var urlParams = new URLSearchParams(search);\n var currentView = urlParams.get(PAGE_VIEW_QUERY) || undefined;\n var permanentUrl = claim.permanent_url;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n editing = _useState2[0],\n setEditing = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(thumbnail),\n _useState4 = _slicedToArray(_useState3, 2),\n thumbPreview = _useState4[0],\n setThumbPreview = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(cover),\n _useState6 = _slicedToArray(_useState5, 2),\n coverPreview = _useState6[0],\n setCoverPreview = _useState6[1];\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(''),\n _useState8 = _slicedToArray(_useState7, 2),\n searchQuery = _useState8[0],\n setSearchQuery = _useState8[1];\n\n var _useState9 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(undefined),\n _useState10 = _slicedToArray(_useState9, 2),\n searchResults = _useState10[0],\n setSearchResults = _useState10[1];\n\n var _useState11 = Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useState\"])(),\n _useState12 = _slicedToArray(_useState11, 2),\n lastYtSyncDate = _useState12[0],\n setLastYtSyncDate = _useState12[1];\n\n var claimId = claim.claim_id; // If a user changes tabs, update the url so it stays on the same page if they refresh.\n // We don't want to use links here because we can't animate the tab change and using links\n // would alter the Tab label's role attribute, which should stay role=\"tab\" to work with keyboards/screen readers.\n\n var tabIndex = currentView === ABOUT_PAGE || editing ? 1 : currentView === DISCUSSION_PAGE ? 2 : 0;\n\n function onTabChange(newTabIndex) {\n var url = Object(util_url__WEBPACK_IMPORTED_MODULE_12__[\"formatLbryUrlForWeb\"])(uri);\n var search = '?';\n\n if (newTabIndex === 0) {\n setSearchResults(null);\n search += \"page=\".concat(page);\n } else if (newTabIndex === 1) {\n search += \"\".concat(PAGE_VIEW_QUERY, \"=\").concat(ABOUT_PAGE);\n } else {\n search += \"\".concat(PAGE_VIEW_QUERY, \"=\").concat(DISCUSSION_PAGE);\n }\n\n history.push(\"\".concat(url).concat(search));\n }\n\n function getResults(fetchUrl) {\n fetch(fetchUrl).then(function (res) {\n return res.json();\n }).then(function (results) {\n var urls = results.map(function (_ref) {\n var name = _ref.name,\n claimId = _ref.claimId;\n return \"lbry://\".concat(name, \"#\").concat(claimId);\n });\n setSearchResults(urls);\n })[\"catch\"](function () {\n setSearchResults(null);\n });\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n var timer = setTimeout(function () {\n if (searchQuery === '') {\n // In order to display original search results, search results must be set to null. A query of '' should display original results.\n return setSearchResults(null);\n } else {\n getResults(\"\".concat(LIGHTHOUSE_URL, \"?s=\").concat(encodeURIComponent(searchQuery), \"&channel_id=\").concat(encodeURIComponent(claimId)).concat(!showMature ? '&nsfw=false' : ''));\n }\n }, constants_search__WEBPACK_IMPORTED_MODULE_23__[\"DEBOUNCE_WAIT_DURATION_MS\"]);\n return function () {\n return clearTimeout(timer);\n };\n }, [claimId, searchQuery]);\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"Lbryio\"].call('yt', 'get_youtuber', {\n channel_claim_id: claimId\n }).then(function (response) {\n if (response.is_verified_youtuber) {\n setLastYtSyncDate(response.last_synced);\n }\n });\n }, [claimId]);\n\n function handleInputChange(e) {\n var value = e.target.value;\n setSearchQuery(value);\n }\n /*\n Since the search is inside of TabList, the left and right arrow keys change the tabIndex.\n This results in the user not being able to navigate the search string by using arrow keys.\n This function allows the event to change cursor position and then stops propagation to prevent tab changing.\n */\n\n\n function handleSearchArrowKeys(e) {\n if (e.keyCode === ARROW_LEFT_KEYCODE || e.keyCode === ARROW_RIGHT_KEYCODE) {\n e.stopPropagation();\n }\n }\n\n var channelIsBlackListed = false;\n\n if (claim && blackListedOutpoints) {\n channelIsBlackListed = blackListedOutpoints.some(function (outpoint) {\n return outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n }\n\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n setSearchResults(null);\n setSearchQuery('');\n fetchSubCount(claimId);\n }, [uri, fetchSubCount, claimId]);\n react__WEBPACK_IMPORTED_MODULE_2___default.a.useEffect(function () {\n if (!channelIsMine && editing) {\n setEditing(false);\n }\n }, [channelIsMine, editing]);\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimUri__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n uri: uri\n }), lastYtSyncDate && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"media__uri--right\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"VALIDATED\"],\n size: 12\n }), __('Official YouTube Creator - Last updated %time_ago%', {\n time_ago: Object(tiny_relative_date__WEBPACK_IMPORTED_MODULE_25__[\"default\"])(lastYtSyncDate)\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"header\", {\n className: \"channel-cover\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"channel__quick-actions\"\n }, !channelIsBlocked && !channelIsBlackListed && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_shareButton__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n uri: uri\n }), !channelIsMine && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TIP\"],\n label: __('Tip'),\n title: __('Send a tip to this creator'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"SEND_TIP\"], {\n uri: uri,\n channelIsMine: channelIsMine,\n isSupport: false\n });\n }\n }), (channelIsMine || !channelIsMine && supportOption) && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUPPORT\"],\n label: __('Support'),\n title: __('Support this creator'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_1__[\"SEND_TIP\"], {\n uri: uri,\n channelIsMine: channelIsMine,\n isSupport: true\n });\n }\n }), !channelIsBlocked && (!channelIsBlackListed || isSubscribed) && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_subscribeButton__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: permanentUrl\n }), !isSubscribed && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_blockButton__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n uri: permanentUrl\n })), !editing && cover && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"img\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_19___default()('channel-cover__custom', {\n 'channel__image--blurred': channelIsBlocked\n }),\n src: cover\n }), editing && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"img\", {\n className: \"channel-cover__custom\",\n src: coverPreview\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"channel__primary-info\"\n }, !editing && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"channel__thumbnail--channel-page\",\n uri: uri,\n obscure: channelIsBlocked\n }), editing && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelThumbnail__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"channel__thumbnail--channel-page\",\n uri: uri,\n thumbnailPreview: thumbPreview\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"h1\", {\n className: \"channel__title\"\n }, title || '@' + channelName), channelIsMine && !editing && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n button: \"alt\",\n title: __('Edit'),\n onClick: function onClick() {\n return setEditing(!editing);\n },\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"EDIT\"],\n iconSize: 28\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"channel__meta\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, subCount, \" \", subCount !== 1 ? __('Followers') : __('Follower'), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_help_link__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n href: \"https://lbry.com/faq/views\"\n }))))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"Tabs\"], {\n onChange: onTabChange,\n index: tabIndex\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"TabList\"], {\n className: \"tabs__list--channel-page\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"Tab\"], {\n disabled: editing\n }, __('Content')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"Tab\"], null, editing ? __('Editing Your Channel') : __('About')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"Tab\"], {\n disabled: editing\n }, __('Comments')), tabIndex === 0 ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_20__[\"Form\"], {\n onSubmit: function onSubmit() {},\n className: \"wunderbar--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SEARCH\"]\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_20__[\"FormField\"], {\n className: \"wunderbar__input\",\n value: searchQuery,\n onChange: handleInputChange,\n onKeyDown: handleSearchArrowKeys,\n type: \"text\",\n placeholder: __('Search')\n })) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", null)), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"TabPanels\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"TabPanel\"], null, searchResults ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n header: false,\n headerAltControls: null,\n id: \"search-results-for-\".concat(claimId),\n loading: false,\n showHiddenByUser: false,\n uris: searchResults\n }) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelContent__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n uri: uri,\n channelIsBlackListed: channelIsBlackListed\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"TabPanel\"], null, editing ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelEdit__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n uri: uri,\n setEditing: setEditing,\n updateThumb: function updateThumb(v) {\n return setThumbPreview(v);\n },\n updateCover: function updateCover(v) {\n return setCoverPreview(v);\n }\n }) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelAbout__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n uri: uri\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_tabs__WEBPACK_IMPORTED_MODULE_9__[\"TabPanel\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_channelDiscussion__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n uri: uri\n })))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_10__[\"withRouter\"])(ChannelPage));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY2hhbm5lbC92aWV3LmpzeD85N2I4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0ICogYXMgTU9EQUxTIGZyb20gJ2NvbnN0YW50cy9tb2RhbF90eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHBhcnNlVVJJIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBMYnJ5aW8gfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBTdWJzY3JpYmVCdXR0b24gZnJvbSAnY29tcG9uZW50L3N1YnNjcmliZUJ1dHRvbic7XG5pbXBvcnQgQmxvY2tCdXR0b24gZnJvbSAnY29tcG9uZW50L2Jsb2NrQnV0dG9uJztcbmltcG9ydCBTaGFyZUJ1dHRvbiBmcm9tICdjb21wb25lbnQvc2hhcmVCdXR0b24nO1xuaW1wb3J0IHsgVGFicywgVGFiTGlzdCwgVGFiLCBUYWJQYW5lbHMsIFRhYlBhbmVsIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi90YWJzJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IGZvcm1hdExicnlVcmxGb3JXZWIgfSBmcm9tICd1dGlsL3VybCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRlbnQgZnJvbSAnY29tcG9uZW50L2NoYW5uZWxDb250ZW50JztcbmltcG9ydCBDaGFubmVsQWJvdXQgZnJvbSAnY29tcG9uZW50L2NoYW5uZWxBYm91dCc7XG5pbXBvcnQgQ2hhbm5lbERpc2N1c3Npb24gZnJvbSAnY29tcG9uZW50L2NoYW5uZWxEaXNjdXNzaW9uJztcbmltcG9ydCBDaGFubmVsVGh1bWJuYWlsIGZyb20gJ2NvbXBvbmVudC9jaGFubmVsVGh1bWJuYWlsJztcbmltcG9ydCBDaGFubmVsRWRpdCBmcm9tICdjb21wb25lbnQvY2hhbm5lbEVkaXQnO1xuaW1wb3J0IENsYWltVXJpIGZyb20gJ2NvbXBvbmVudC9jbGFpbVVyaSc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZvcm0sIEZvcm1GaWVsZCB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybSc7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0IEhlbHBMaW5rIGZyb20gJ2NvbXBvbmVudC9jb21tb24vaGVscC1saW5rJztcbmltcG9ydCB7IERFQk9VTkNFX1dBSVRfRFVSQVRJT05fTVMgfSBmcm9tICdjb25zdGFudHMvc2VhcmNoJztcbmltcG9ydCBDbGFpbUxpc3QgZnJvbSAnY29tcG9uZW50L2NsYWltTGlzdCc7XG5pbXBvcnQgcmVsYXRpdmVEYXRlIGZyb20gJ3RpbnktcmVsYXRpdmUtZGF0ZSc7XG5cbmNvbnN0IFBBR0VfVklFV19RVUVSWSA9IGB2aWV3YDtcbmNvbnN0IEFCT1VUX1BBR0UgPSBgYWJvdXRgO1xuY29uc3QgRElTQ1VTU0lPTl9QQUdFID0gYGRpc2N1c3Npb25gO1xuY29uc3QgTElHSFRIT1VTRV9VUkwgPSAnaHR0cHM6Ly9saWdodGhvdXNlLmxicnkuY29tL3NlYXJjaCc7XG5jb25zdCBBUlJPV19MRUZUX0tFWUNPREUgPSAzNztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTtcblxudHlwZSBQcm9wcyA9IHtcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltOiBDaGFubmVsQ2xhaW0sXG4gIHRpdGxlOiA/c3RyaW5nLFxuICBjb3ZlcjogP3N0cmluZyxcbiAgdGh1bWJuYWlsOiA/c3RyaW5nLFxuICBwYWdlOiBudW1iZXIsXG4gIGxvY2F0aW9uOiB7IHNlYXJjaDogc3RyaW5nIH0sXG4gIGhpc3Rvcnk6IHsgcHVzaDogc3RyaW5nID0+IHZvaWQgfSxcbiAgbWF0Y2g6IHsgcGFyYW1zOiB7IGF0dHJpYnV0ZTogP3N0cmluZyB9IH0sXG4gIGNoYW5uZWxJc01pbmU6IGJvb2xlYW4sXG4gIGlzU3Vic2NyaWJlZDogYm9vbGVhbixcbiAgY2hhbm5lbElzQmxvY2tlZDogYm9vbGVhbixcbiAgYmxhY2tMaXN0ZWRPdXRwb2ludHM6IEFycmF5PHtcbiAgICB0eGlkOiBzdHJpbmcsXG4gICAgbm91dDogbnVtYmVyLFxuICB9PixcbiAgb3Blbk1vZGFsOiAoaWQ6IHN0cmluZywgeyB1cmk6IHN0cmluZywgY2xhaW1Jc01pbmU/OiBib29sZWFuLCBpc1N1cHBvcnQ/OiBib29sZWFuIH0pID0+IHZvaWQsXG4gIHN1cHBvcnRPcHRpb246IGJvb2xlYW4sXG4gIGZldGNoU3ViQ291bnQ6IHN0cmluZyA9PiB2b2lkLFxuICBzdWJDb3VudDogbnVtYmVyLFxuICBzaG93TWF0dXJlOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gQ2hhbm5lbFBhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB1cmksXG4gICAgdGl0bGUsXG4gICAgY292ZXIsXG4gICAgaGlzdG9yeSxcbiAgICBsb2NhdGlvbixcbiAgICBwYWdlLFxuICAgIGNoYW5uZWxJc01pbmUsXG4gICAgdGh1bWJuYWlsLFxuICAgIGNsYWltLFxuICAgIGlzU3Vic2NyaWJlZCxcbiAgICBjaGFubmVsSXNCbG9ja2VkLFxuICAgIGJsYWNrTGlzdGVkT3V0cG9pbnRzLFxuICAgIG9wZW5Nb2RhbCxcbiAgICBzdXBwb3J0T3B0aW9uLFxuICAgIHNob3dNYXR1cmUsXG4gICAgZmV0Y2hTdWJDb3VudCxcbiAgICBzdWJDb3VudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHsgY2hhbm5lbE5hbWUgfSA9IHBhcnNlVVJJKHVyaSk7XG4gIGNvbnN0IHsgc2VhcmNoIH0gPSBsb2NhdGlvbjtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCBjdXJyZW50VmlldyA9IHVybFBhcmFtcy5nZXQoUEFHRV9WSUVXX1FVRVJZKSB8fCB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgcGVybWFuZW50X3VybDogcGVybWFuZW50VXJsIH0gPSBjbGFpbTtcbiAgY29uc3QgW2VkaXRpbmcsIHNldEVkaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdGh1bWJQcmV2aWV3LCBzZXRUaHVtYlByZXZpZXddID0gdXNlU3RhdGUodGh1bWJuYWlsKTtcbiAgY29uc3QgW2NvdmVyUHJldmlldywgc2V0Q292ZXJQcmV2aWV3XSA9IHVzZVN0YXRlKGNvdmVyKTtcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzZWFyY2hSZXN1bHRzLCBzZXRTZWFyY2hSZXN1bHRzXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIGNvbnN0IFtsYXN0WXRTeW5jRGF0ZSwgc2V0TGFzdFl0U3luY0RhdGVdID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgY2xhaW1JZCA9IGNsYWltLmNsYWltX2lkO1xuXG4gIC8vIElmIGEgdXNlciBjaGFuZ2VzIHRhYnMsIHVwZGF0ZSB0aGUgdXJsIHNvIGl0IHN0YXlzIG9uIHRoZSBzYW1lIHBhZ2UgaWYgdGhleSByZWZyZXNoLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBsaW5rcyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYW5pbWF0ZSB0aGUgdGFiIGNoYW5nZSBhbmQgdXNpbmcgbGlua3NcbiAgLy8gd291bGQgYWx0ZXIgdGhlIFRhYiBsYWJlbCdzIHJvbGUgYXR0cmlidXRlLCB3aGljaCBzaG91bGQgc3RheSByb2xlPVwidGFiXCIgdG8gd29yayB3aXRoIGtleWJvYXJkcy9zY3JlZW4gcmVhZGVycy5cbiAgY29uc3QgdGFiSW5kZXggPSBjdXJyZW50VmlldyA9PT0gQUJPVVRfUEFHRSB8fCBlZGl0aW5nID8gMSA6IGN1cnJlbnRWaWV3ID09PSBESVNDVVNTSU9OX1BBR0UgPyAyIDogMDtcblxuICBmdW5jdGlvbiBvblRhYkNoYW5nZShuZXdUYWJJbmRleCkge1xuICAgIGxldCB1cmwgPSBmb3JtYXRMYnJ5VXJsRm9yV2ViKHVyaSk7XG4gICAgbGV0IHNlYXJjaCA9ICc/JztcblxuICAgIGlmIChuZXdUYWJJbmRleCA9PT0gMCkge1xuICAgICAgc2V0U2VhcmNoUmVzdWx0cyhudWxsKTtcbiAgICAgIHNlYXJjaCArPSBgcGFnZT0ke3BhZ2V9YDtcbiAgICB9IGVsc2UgaWYgKG5ld1RhYkluZGV4ID09PSAxKSB7XG4gICAgICBzZWFyY2ggKz0gYCR7UEFHRV9WSUVXX1FVRVJZfT0ke0FCT1VUX1BBR0V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoICs9IGAke1BBR0VfVklFV19RVUVSWX09JHtESVNDVVNTSU9OX1BBR0V9YDtcbiAgICB9XG4gICAgaGlzdG9yeS5wdXNoKGAke3VybH0ke3NlYXJjaH1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlc3VsdHMoZmV0Y2hVcmwpIHtcbiAgICBmZXRjaChmZXRjaFVybClcbiAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHVybHMgPSByZXN1bHRzLm1hcCgoeyBuYW1lLCBjbGFpbUlkIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gYGxicnk6Ly8ke25hbWV9IyR7Y2xhaW1JZH1gO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2VhcmNoUmVzdWx0cyh1cmxzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoUXVlcnkgPT09ICcnKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGRpc3BsYXkgb3JpZ2luYWwgc2VhcmNoIHJlc3VsdHMsIHNlYXJjaCByZXN1bHRzIG11c3QgYmUgc2V0IHRvIG51bGwuIEEgcXVlcnkgb2YgJycgc2hvdWxkIGRpc3BsYXkgb3JpZ2luYWwgcmVzdWx0cy5cbiAgICAgICAgcmV0dXJuIHNldFNlYXJjaFJlc3VsdHMobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSZXN1bHRzKFxuICAgICAgICAgIGAke0xJR0hUSE9VU0VfVVJMfT9zPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFF1ZXJ5KX0mY2hhbm5lbF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChjbGFpbUlkKX0ke1xuICAgICAgICAgICAgIXNob3dNYXR1cmUgPyAnJm5zZnc9ZmFsc2UnIDogJydcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sIERFQk9VTkNFX1dBSVRfRFVSQVRJT05fTVMpO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbY2xhaW1JZCwgc2VhcmNoUXVlcnldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIExicnlpby5jYWxsKCd5dCcsICdnZXRfeW91dHViZXInLCB7IGNoYW5uZWxfY2xhaW1faWQ6IGNsYWltSWQgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UuaXNfdmVyaWZpZWRfeW91dHViZXIpIHtcbiAgICAgICAgc2V0TGFzdFl0U3luY0RhdGUocmVzcG9uc2UubGFzdF9zeW5jZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbY2xhaW1JZF0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGUpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBlLnRhcmdldDtcbiAgICBzZXRTZWFyY2hRdWVyeSh2YWx1ZSk7XG4gIH1cblxuICAvKlxuICAgIFNpbmNlIHRoZSBzZWFyY2ggaXMgaW5zaWRlIG9mIFRhYkxpc3QsIHRoZSBsZWZ0IGFuZCByaWdodCBhcnJvdyBrZXlzIGNoYW5nZSB0aGUgdGFiSW5kZXguXG4gICAgVGhpcyByZXN1bHRzIGluIHRoZSB1c2VyIG5vdCBiZWluZyBhYmxlIHRvIG5hdmlnYXRlIHRoZSBzZWFyY2ggc3RyaW5nIGJ5IHVzaW5nIGFycm93IGtleXMuXG4gICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGV2ZW50IHRvIGNoYW5nZSBjdXJzb3IgcG9zaXRpb24gYW5kIHRoZW4gc3RvcHMgcHJvcGFnYXRpb24gdG8gcHJldmVudCB0YWIgY2hhbmdpbmcuXG4gICovXG4gIGZ1bmN0aW9uIGhhbmRsZVNlYXJjaEFycm93S2V5cyhlKSB7XG4gICAgaWYgKGUua2V5Q29kZSA9PT0gQVJST1dfTEVGVF9LRVlDT0RFIHx8IGUua2V5Q29kZSA9PT0gQVJST1dfUklHSFRfS0VZQ09ERSkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBsZXQgY2hhbm5lbElzQmxhY2tMaXN0ZWQgPSBmYWxzZTtcblxuICBpZiAoY2xhaW0gJiYgYmxhY2tMaXN0ZWRPdXRwb2ludHMpIHtcbiAgICBjaGFubmVsSXNCbGFja0xpc3RlZCA9IGJsYWNrTGlzdGVkT3V0cG9pbnRzLnNvbWUoXG4gICAgICBvdXRwb2ludCA9PiBvdXRwb2ludC50eGlkID09PSBjbGFpbS50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IGNsYWltLm5vdXRcbiAgICApO1xuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWFyY2hSZXN1bHRzKG51bGwpO1xuICAgIHNldFNlYXJjaFF1ZXJ5KCcnKTtcblxuICAgIGZldGNoU3ViQ291bnQoY2xhaW1JZCk7XG4gIH0sIFt1cmksIGZldGNoU3ViQ291bnQsIGNsYWltSWRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhbm5lbElzTWluZSAmJiBlZGl0aW5nKSB7XG4gICAgICBzZXRFZGl0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtjaGFubmVsSXNNaW5lLCBlZGl0aW5nXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIDxDbGFpbVVyaSB1cmk9e3VyaX0gLz5cblxuICAgICAge2xhc3RZdFN5bmNEYXRlICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZWRpYV9fdXJpLS1yaWdodFwiPlxuICAgICAgICAgIDxJY29uIGljb249e0lDT05TLlZBTElEQVRFRH0gc2l6ZT17MTJ9IC8+XG4gICAgICAgICAge19fKCdPZmZpY2lhbCBZb3VUdWJlIENyZWF0b3IgLSBMYXN0IHVwZGF0ZWQgJXRpbWVfYWdvJScsIHsgdGltZV9hZ286IHJlbGF0aXZlRGF0ZShsYXN0WXRTeW5jRGF0ZSkgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiY2hhbm5lbC1jb3ZlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNoYW5uZWxfX3F1aWNrLWFjdGlvbnNcIj5cbiAgICAgICAgICB7IWNoYW5uZWxJc0Jsb2NrZWQgJiYgIWNoYW5uZWxJc0JsYWNrTGlzdGVkICYmIDxTaGFyZUJ1dHRvbiB1cmk9e3VyaX0gLz59XG4gICAgICAgICAgeyFjaGFubmVsSXNNaW5lICYmIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuVElQfVxuICAgICAgICAgICAgICBsYWJlbD17X18oJ1RpcCcpfVxuICAgICAgICAgICAgICB0aXRsZT17X18oJ1NlbmQgYSB0aXAgdG8gdGhpcyBjcmVhdG9yJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wZW5Nb2RhbChNT0RBTFMuU0VORF9USVAsIHsgdXJpLCBjaGFubmVsSXNNaW5lLCBpc1N1cHBvcnQ6IGZhbHNlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsoY2hhbm5lbElzTWluZSB8fCAoIWNoYW5uZWxJc01pbmUgJiYgc3VwcG9ydE9wdGlvbikpICYmIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgICAgaWNvbj17SUNPTlMuU1VQUE9SVH1cbiAgICAgICAgICAgICAgbGFiZWw9e19fKCdTdXBwb3J0Jyl9XG4gICAgICAgICAgICAgIHRpdGxlPXtfXygnU3VwcG9ydCB0aGlzIGNyZWF0b3InKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3Blbk1vZGFsKE1PREFMUy5TRU5EX1RJUCwgeyB1cmksIGNoYW5uZWxJc01pbmUsIGlzU3VwcG9ydDogdHJ1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7IWNoYW5uZWxJc0Jsb2NrZWQgJiYgKCFjaGFubmVsSXNCbGFja0xpc3RlZCB8fCBpc1N1YnNjcmliZWQpICYmIDxTdWJzY3JpYmVCdXR0b24gdXJpPXtwZXJtYW5lbnRVcmx9IC8+fVxuICAgICAgICAgIHshaXNTdWJzY3JpYmVkICYmIDxCbG9ja0J1dHRvbiB1cmk9e3Blcm1hbmVudFVybH0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IWVkaXRpbmcgJiYgY292ZXIgJiYgKFxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnY2hhbm5lbC1jb3Zlcl9fY3VzdG9tJywgeyAnY2hhbm5lbF9faW1hZ2UtLWJsdXJyZWQnOiBjaGFubmVsSXNCbG9ja2VkIH0pfVxuICAgICAgICAgICAgc3JjPXtjb3Zlcn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ZWRpdGluZyAmJiA8aW1nIGNsYXNzTmFtZT1cImNoYW5uZWwtY292ZXJfX2N1c3RvbVwiIHNyYz17Y292ZXJQcmV2aWV3fSAvPn1cbiAgICAgICAgey8qIGNvbXBvbmVudCB0aGF0IG9mZmVycyBzZWxlY3QvdXBsb2FkICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNoYW5uZWxfX3ByaW1hcnktaW5mb1wiPlxuICAgICAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgICAgICA8Q2hhbm5lbFRodW1ibmFpbCBjbGFzc05hbWU9XCJjaGFubmVsX190aHVtYm5haWwtLWNoYW5uZWwtcGFnZVwiIHVyaT17dXJpfSBvYnNjdXJlPXtjaGFubmVsSXNCbG9ja2VkfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2VkaXRpbmcgJiYgKFxuICAgICAgICAgICAgPENoYW5uZWxUaHVtYm5haWwgY2xhc3NOYW1lPVwiY2hhbm5lbF9fdGh1bWJuYWlsLS1jaGFubmVsLXBhZ2VcIiB1cmk9e3VyaX0gdGh1bWJuYWlsUHJldmlldz17dGh1bWJQcmV2aWV3fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cImNoYW5uZWxfX3RpdGxlXCI+e3RpdGxlIHx8ICdAJyArIGNoYW5uZWxOYW1lfTwvaDE+XG4gICAgICAgICAge2NoYW5uZWxJc01pbmUgJiYgIWVkaXRpbmcgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b249XCJhbHRcIlxuICAgICAgICAgICAgICB0aXRsZT17X18oJ0VkaXQnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RWRpdGluZyghZWRpdGluZyl9XG4gICAgICAgICAgICAgIGljb249e0lDT05TLkVESVR9XG4gICAgICAgICAgICAgIGljb25TaXplPXsyOH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNoYW5uZWxfX21ldGFcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7c3ViQ291bnR9IHtzdWJDb3VudCAhPT0gMSA/IF9fKCdGb2xsb3dlcnMnKSA6IF9fKCdGb2xsb3dlcicpfVxuICAgICAgICAgICAgICA8SGVscExpbmsgaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3ZpZXdzXCIgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cbiAgICAgIDxUYWJzIG9uQ2hhbmdlPXtvblRhYkNoYW5nZX0gaW5kZXg9e3RhYkluZGV4fT5cbiAgICAgICAgPFRhYkxpc3QgY2xhc3NOYW1lPVwidGFic19fbGlzdC0tY2hhbm5lbC1wYWdlXCI+XG4gICAgICAgICAgPFRhYiBkaXNhYmxlZD17ZWRpdGluZ30+e19fKCdDb250ZW50Jyl9PC9UYWI+XG4gICAgICAgICAgPFRhYj57ZWRpdGluZyA/IF9fKCdFZGl0aW5nIFlvdXIgQ2hhbm5lbCcpIDogX18oJ0Fib3V0Jyl9PC9UYWI+XG4gICAgICAgICAgPFRhYiBkaXNhYmxlZD17ZWRpdGluZ30+e19fKCdDb21tZW50cycpfTwvVGFiPlxuICAgICAgICAgIHsvKiBvbmx5IHJlbmRlciBzZWFyY2hiYXIgb24gY29udGVudCBwYWdlICh0YWIgaW5kZXggMCA9PT0gY29udGVudCBwYWdlKSAqL31cbiAgICAgICAgICB7dGFiSW5kZXggPT09IDAgPyAoXG4gICAgICAgICAgICA8Rm9ybSBvblN1Ym1pdD17KCkgPT4ge319IGNsYXNzTmFtZT1cInd1bmRlcmJhci0taW5saW5lXCI+XG4gICAgICAgICAgICAgIDxJY29uIGljb249e0lDT05TLlNFQVJDSH0gLz5cbiAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInd1bmRlcmJhcl9faW5wdXRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVTZWFyY2hBcnJvd0tleXN9XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtfXygnU2VhcmNoJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1RhYkxpc3Q+XG5cbiAgICAgICAgPFRhYlBhbmVscz5cbiAgICAgICAgICA8VGFiUGFuZWw+XG4gICAgICAgICAgICB7c2VhcmNoUmVzdWx0cyA/IChcbiAgICAgICAgICAgICAgPENsYWltTGlzdFxuICAgICAgICAgICAgICAgIGhlYWRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaGVhZGVyQWx0Q29udHJvbHM9e251bGx9XG4gICAgICAgICAgICAgICAgaWQ9e2BzZWFyY2gtcmVzdWx0cy1mb3ItJHtjbGFpbUlkfWB9XG4gICAgICAgICAgICAgICAgbG9hZGluZz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgc2hvd0hpZGRlbkJ5VXNlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgdXJpcz17c2VhcmNoUmVzdWx0c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxDaGFubmVsQ29udGVudCB1cmk9e3VyaX0gY2hhbm5lbElzQmxhY2tMaXN0ZWQ9e2NoYW5uZWxJc0JsYWNrTGlzdGVkfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1RhYlBhbmVsPlxuICAgICAgICAgIDxUYWJQYW5lbD5cbiAgICAgICAgICAgIHtlZGl0aW5nID8gKFxuICAgICAgICAgICAgICA8Q2hhbm5lbEVkaXRcbiAgICAgICAgICAgICAgICB1cmk9e3VyaX1cbiAgICAgICAgICAgICAgICBzZXRFZGl0aW5nPXtzZXRFZGl0aW5nfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVRodW1iPXt2ID0+IHNldFRodW1iUHJldmlldyh2KX1cbiAgICAgICAgICAgICAgICB1cGRhdGVDb3Zlcj17diA9PiBzZXRDb3ZlclByZXZpZXcodil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8Q2hhbm5lbEFib3V0IHVyaT17dXJpfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1RhYlBhbmVsPlxuICAgICAgICAgIDxUYWJQYW5lbD5cbiAgICAgICAgICAgIDxDaGFubmVsRGlzY3Vzc2lvbiB1cmk9e3VyaX0gLz5cbiAgICAgICAgICA8L1RhYlBhbmVsPlxuICAgICAgICA8L1RhYlBhbmVscz5cbiAgICAgIDwvVGFicz5cbiAgICA8L1BhZ2U+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoQ2hhbm5lbFBhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBdUJBO0FBQ0E7QUF4QkE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQStCQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBTkE7QUFTQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBS0E7QUFWQTtBQVlBO0FBQUE7QUFBQTtBQWJBO0FBZ0JBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBT0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBRUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBUUE7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBS0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBQ0E7QUFMQTtBQVFBO0FBQUE7QUFHQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFBQTtBQUpBO0FBT0E7QUFBQTtBQUlBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/channel/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/channels/index.js": -/*!************************************!*\ - !*** ../ui/page/channels/index.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/channels/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyChannelClaims\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFetchingMyChannels\"])(state),\n youtubeChannels: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectYoutubeChannels\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openModal: function openModal(id) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doOpenModal\"])(id));\n },\n fetchChannelListMine: function fetchChannelListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchChannelListMine\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVscy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2NoYW5uZWxzL2luZGV4LmpzPzdjNTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdE15Q2hhbm5lbENsYWltcywgZG9GZXRjaENoYW5uZWxMaXN0TWluZSwgc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RZb3V0dWJlQ2hhbm5lbHMgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IENoYW5uZWxzUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgZmV0Y2hpbmdDaGFubmVsczogc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzKHN0YXRlKSxcbiAgeW91dHViZUNoYW5uZWxzOiBzZWxlY3RZb3V0dWJlQ2hhbm5lbHMoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBvcGVuTW9kYWw6IGlkID0+IGRpc3BhdGNoKGRvT3Blbk1vZGFsKGlkKSksXG4gIGZldGNoQ2hhbm5lbExpc3RNaW5lOiAoKSA9PiBkaXNwYXRjaChkb0ZldGNoQ2hhbm5lbExpc3RNaW5lKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShDaGFubmVsc1BhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/channels/index.js\n"); - -/***/ }), - -/***/ "../ui/page/channels/view.jsx": -/*!************************************!*\ - !*** ../ui/page/channels/view.jsx ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ChannelsPage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_youtubeTransferStatus__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/youtubeTransferStatus */ \"../ui/component/youtubeTransferStatus/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n\n\n\n\n\n\n\nfunction ChannelsPage(props) {\n var channels = props.channels,\n fetchChannelListMine = props.fetchChannelListMine,\n fetchingChannels = props.fetchingChannels,\n youtubeChannels = props.youtubeChannels,\n openModal = props.openModal;\n var hasYoutubeChannels = youtubeChannels && Boolean(youtubeChannels.length);\n var hasPendingChannels = channels && channels.some(function (channel) {\n return channel.confirmations < 0;\n });\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n fetchChannelListMine();\n var interval;\n\n if (hasPendingChannels) {\n interval = setInterval(function () {\n fetchChannelListMine();\n }, 5000);\n }\n\n return function () {\n clearInterval(interval);\n };\n }, [fetchChannelListMine, hasPendingChannels]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, hasYoutubeChannels && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_youtubeTransferStatus__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n hideChannelLink: true\n }), channels && Boolean(channels.length) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n header: __('Your Channels'),\n loading: fetchingChannels,\n uris: channels.map(function (channel) {\n return channel.permanent_url;\n }),\n headerAltControls: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('New Channel'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_6__[\"CREATE_CHANNEL\"]);\n }\n })\n }), !(channels && channels.length) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, !fetchingChannels ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \" section--small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"section__title--large\"\n }, __('No Channels Created Yet')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n label: __('New Channel'),\n onClick: function onClick() {\n return openModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_6__[\"CREATE_CHANNEL\"]);\n }\n })))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \" section--small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"section__title--small\"\n }, __('Checking for channels'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"small\"\n }))))));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVscy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2NoYW5uZWxzL3ZpZXcuanN4PzJlNGEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2xhaW1MaXN0IGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBZb3V0dWJlVHJhbnNmZXJTdGF0dXMgZnJvbSAnY29tcG9uZW50L3lvdXR1YmVUcmFuc2ZlclN0YXR1cyc7XG5pbXBvcnQgU3Bpbm5lciBmcm9tICdjb21wb25lbnQvc3Bpbm5lcic7XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hhbm5lbHM6IEFycmF5PENoYW5uZWxDbGFpbT4sXG4gIGZldGNoQ2hhbm5lbExpc3RNaW5lOiAoKSA9PiB2b2lkLFxuICBmZXRjaGluZ0NoYW5uZWxzOiBib29sZWFuLFxuICB5b3V0dWJlQ2hhbm5lbHM6ID9BcnJheTxhbnk+LFxuICBvcGVuTW9kYWw6IHN0cmluZyA9PiB2b2lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2hhbm5lbHNQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGNoYW5uZWxzLCBmZXRjaENoYW5uZWxMaXN0TWluZSwgZmV0Y2hpbmdDaGFubmVscywgeW91dHViZUNoYW5uZWxzLCBvcGVuTW9kYWwgfSA9IHByb3BzO1xuICBjb25zdCBoYXNZb3V0dWJlQ2hhbm5lbHMgPSB5b3V0dWJlQ2hhbm5lbHMgJiYgQm9vbGVhbih5b3V0dWJlQ2hhbm5lbHMubGVuZ3RoKTtcbiAgY29uc3QgaGFzUGVuZGluZ0NoYW5uZWxzID0gY2hhbm5lbHMgJiYgY2hhbm5lbHMuc29tZShjaGFubmVsID0+IGNoYW5uZWwuY29uZmlybWF0aW9ucyA8IDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hDaGFubmVsTGlzdE1pbmUoKTtcblxuICAgIGxldCBpbnRlcnZhbDtcbiAgICBpZiAoaGFzUGVuZGluZ0NoYW5uZWxzKSB7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgZmV0Y2hDaGFubmVsTGlzdE1pbmUoKTtcbiAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB9O1xuICB9LCBbZmV0Y2hDaGFubmVsTGlzdE1pbmUsIGhhc1BlbmRpbmdDaGFubmVsc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFBhZ2U+XG4gICAgICB7aGFzWW91dHViZUNoYW5uZWxzICYmIDxZb3V0dWJlVHJhbnNmZXJTdGF0dXMgaGlkZUNoYW5uZWxMaW5rIC8+fVxuXG4gICAgICB7Y2hhbm5lbHMgJiYgQm9vbGVhbihjaGFubmVscy5sZW5ndGgpICYmIChcbiAgICAgICAgPENsYWltTGlzdFxuICAgICAgICAgIGhlYWRlcj17X18oJ1lvdXIgQ2hhbm5lbHMnKX1cbiAgICAgICAgICBsb2FkaW5nPXtmZXRjaGluZ0NoYW5uZWxzfVxuICAgICAgICAgIHVyaXM9e2NoYW5uZWxzLm1hcChjaGFubmVsID0+IGNoYW5uZWwucGVybWFuZW50X3VybCl9XG4gICAgICAgICAgaGVhZGVyQWx0Q29udHJvbHM9e1xuICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdOZXcgQ2hhbm5lbCcpfSBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLkNSRUFURV9DSEFOTkVMKX0gLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgeyEoY2hhbm5lbHMgJiYgY2hhbm5lbHMubGVuZ3RoKSAmJiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7IWZldGNoaW5nQ2hhbm5lbHMgPyAoXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYWluLS1lbXB0eVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIiBzZWN0aW9uLS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oJ05vIENoYW5uZWxzIENyZWF0ZWQgWWV0Jyl9PC9oMj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9e19fKCdOZXcgQ2hhbm5lbCcpfSBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoTU9EQUxTLkNSRUFURV9DSEFOTkVMKX0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm1haW4tLWVtcHR5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiIHNlY3Rpb24tLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInNlY3Rpb25fX3RpdGxlLS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAge19fKCdDaGVja2luZyBmb3IgY2hhbm5lbHMnKX1cbiAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHR5cGU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG4gICAgPC9QYWdlPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVZBO0FBZUE7QUFFQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTEE7QUFZQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQVNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/channels/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/channelsFollowing/index.js": -/*!*********************************************!*\ - !*** ../ui/page/channelsFollowing/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/page/channelsFollowing/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"selectSubscriptions\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsc0ZvbGxvd2luZy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2NoYW5uZWxzRm9sbG93aW5nL2luZGV4LmpzP2U0ODIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFN1YnNjcmlwdGlvbnMgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgQ2hhbm5lbHNGb2xsb3dpbmdQYWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHN1YnNjcmliZWRDaGFubmVsczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKENoYW5uZWxzRm9sbG93aW5nUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/channelsFollowing/index.js\n"); - -/***/ }), - -/***/ "../ui/page/channelsFollowing/view.jsx": -/*!*********************************************!*\ - !*** ../ui/page/channelsFollowing/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var page_channelsFollowingDiscover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! page/channelsFollowingDiscover */ \"../ui/page/channelsFollowingDiscover/index.js\");\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n\n\n\n\n\n\n\n\n\n\nfunction ChannelsFollowingPage(props) {\n var subscribedChannels = props.subscribedChannels;\n var hasSubsribedChannels = subscribedChannels.length > 0;\n return !hasSubsribedChannels ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(page_channelsFollowingDiscover__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null) : react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n headerLabel: react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SUBSCRIBE\"],\n size: 10\n }), __('Following')),\n defaultOrderBy: constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_NEW\"],\n channelIds: subscribedChannels.map(function (sub) {\n return sub.uri.split('#')[1];\n }),\n meta: react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"SEARCH\"],\n button: \"link\",\n label: __('Discover New Channels'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"CHANNELS_FOLLOWING_DISCOVER\"])\n })\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelsFollowingPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsc0ZvbGxvd2luZy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2NoYW5uZWxzRm9sbG93aW5nL3ZpZXcuanN4PzM4YzUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0IHsgT1JERVJfQllfTkVXIH0gZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENoYW5uZWxzRm9sbG93aW5nRGlzY292ZXJQYWdlIGZyb20gJ3BhZ2UvY2hhbm5lbHNGb2xsb3dpbmdEaXNjb3Zlcic7XG5pbXBvcnQgQ2xhaW1MaXN0RGlzY292ZXIgZnJvbSAnY29tcG9uZW50L2NsYWltTGlzdERpc2NvdmVyJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuXG50eXBlIFByb3BzID0ge1xuICBzdWJzY3JpYmVkQ2hhbm5lbHM6IEFycmF5PFN1YnNjcmlwdGlvbj4sXG59O1xuXG5mdW5jdGlvbiBDaGFubmVsc0ZvbGxvd2luZ1BhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgc3Vic2NyaWJlZENoYW5uZWxzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFzU3Vic3JpYmVkQ2hhbm5lbHMgPSBzdWJzY3JpYmVkQ2hhbm5lbHMubGVuZ3RoID4gMDtcblxuICByZXR1cm4gIWhhc1N1YnNyaWJlZENoYW5uZWxzID8gKFxuICAgIDxDaGFubmVsc0ZvbGxvd2luZ0Rpc2NvdmVyUGFnZSAvPlxuICApIDogKFxuICAgIDxQYWdlPlxuICAgICAgPENsYWltTGlzdERpc2NvdmVyXG4gICAgICAgIGhlYWRlckxhYmVsPXtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxJY29uIGljb249e0lDT05TLlNVQlNDUklCRX0gc2l6ZT17MTB9IC8+XG4gICAgICAgICAgICB7X18oJ0ZvbGxvd2luZycpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0T3JkZXJCeT17T1JERVJfQllfTkVXfVxuICAgICAgICBjaGFubmVsSWRzPXtzdWJzY3JpYmVkQ2hhbm5lbHMubWFwKHN1YiA9PiBzdWIudXJpLnNwbGl0KCcjJylbMV0pfVxuICAgICAgICBtZXRhPXtcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBpY29uPXtJQ09OUy5TRUFSQ0h9XG4gICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgIGxhYmVsPXtfXygnRGlzY292ZXIgTmV3IENoYW5uZWxzJyl9XG4gICAgICAgICAgICBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuQ0hBTk5FTFNfRk9MTE9XSU5HX0RJU0NPVkVSfWB9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1BhZ2U+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxzRm9sbG93aW5nUGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBRUE7QUFFQTtBQUtBO0FBRUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBUkE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFWQTtBQW9CQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/channelsFollowing/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/channelsFollowingDiscover/index.js": -/*!*****************************************************!*\ - !*** ../ui/page/channelsFollowingDiscover/index.js ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/page/channelsFollowingDiscover/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectSubscriptions\"])(state),\n blockedChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsc0ZvbGxvd2luZ0Rpc2NvdmVyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY2hhbm5lbHNGb2xsb3dpbmdEaXNjb3Zlci9pbmRleC5qcz9lMmFlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGb2xsb3dlZFRhZ3MsIHNlbGVjdEJsb2NrZWRDaGFubmVscyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0U3Vic2NyaXB0aW9ucyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCBDaGFubmVsc0ZvbGxvd2luZ01hbmFnZVBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZm9sbG93ZWRUYWdzOiBzZWxlY3RGb2xsb3dlZFRhZ3Moc3RhdGUpLFxuICBzdWJzY3JpYmVkQ2hhbm5lbHM6IHNlbGVjdFN1YnNjcmlwdGlvbnMoc3RhdGUpLFxuICBibG9ja2VkQ2hhbm5lbHM6IHNlbGVjdEJsb2NrZWRDaGFubmVscyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QpKENoYW5uZWxzRm9sbG93aW5nTWFuYWdlUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/channelsFollowingDiscover/index.js\n"); - -/***/ }), - -/***/ "../ui/page/channelsFollowingDiscover/view.jsx": -/*!*****************************************************!*\ - !*** ../ui/page/channelsFollowingDiscover/view.jsx ***! - \*****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimTilesDiscover__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/claimTilesDiscover */ \"../ui/component/claimTilesDiscover/index.js\");\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var util_string__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! util/string */ \"../ui/util/string.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\n\n\n\n\n\n\n\n\n\n\nfunction ChannelsFollowingDiscover(props) {\n var followedTags = props.followedTags,\n subscribedChannels = props.subscribedChannels,\n blockedChannels = props.blockedChannels;\n var rowData = [];\n var notChannels = subscribedChannels.map(function (_ref) {\n var uri = _ref.uri;\n return uri;\n }).concat(blockedChannels).map(function (uri) {\n return uri.split('#')[1];\n });\n rowData.push({\n title: 'Top Channels Of All Time',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?claim_type=channel&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"ORDER_BY_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"ORDER_BY_TOP\"], \"&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"FRESH_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"FRESH_ALL\"]),\n options: {\n pageSize: 12,\n claimType: 'channel',\n orderBy: ['effective_amount']\n }\n });\n rowData.push({\n title: 'Latest From @lbrycast',\n link: \"/@lbrycast:4\",\n options: {\n orderBy: ['release_time'],\n pageSize: 8,\n channelIds: ['4c29f8b013adea4d5cca1861fb2161d5089613ea']\n }\n });\n rowData.push({\n title: 'Trending Channels',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?claim_type=channel\"),\n options: {\n pageSize: 8,\n claimType: 'channel',\n orderBy: ['trending_group', 'trending_mixed']\n }\n });\n\n if (followedTags.length > 0 && followedTags.length < 5) {\n var followedRows = followedTags.map(function (tag) {\n return {\n title: \"Trending Channels for #\".concat(Object(util_string__WEBPACK_IMPORTED_MODULE_8__[\"toCapitalCase\"])(tag.name)),\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?t=\").concat(tag.name, \"&claim_type=channel\"),\n options: {\n claimType: 'channel',\n pageSize: 4,\n tags: [tag.name]\n }\n };\n });\n rowData.push.apply(rowData, _toConsumableArray(followedRows));\n }\n\n if (followedTags.length > 4) {\n rowData.push({\n title: 'Trending For Your Tags',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"TAGS_FOLLOWING\"], \"?claim_type=channel\"),\n options: {\n claimType: 'channel',\n tags: followedTags.map(function (tag) {\n return tag.name;\n })\n }\n });\n }\n\n var rowDataWithGenericOptions = rowData.map(function (row) {\n return _objectSpread({}, row, {\n options: _objectSpread({}, row.options, {\n notChannels: notChannels\n })\n });\n });\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, rowDataWithGenericOptions.map(function (_ref2) {\n var title = _ref2.title,\n link = _ref2.link,\n help = _ref2.help,\n _ref2$options = _ref2.options,\n options = _ref2$options === void 0 ? {} : _ref2$options;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n key: title,\n className: \"claim-grid__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"h1\", {\n className: \"section__actions\"\n }, link ? react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"claim-grid__title\",\n button: \"link\",\n navigate: link,\n iconRight: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ARROW_RIGHT\"],\n label: title\n }) : react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", {\n className: \"claim-grid__title\"\n }, title), help), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimTilesDiscover__WEBPACK_IMPORTED_MODULE_5__[\"default\"], options));\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"h1\", {\n className: \"claim-grid__title\"\n }, __('More Channels')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n defaultOrderBy: constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"ORDER_BY_TOP\"],\n defaultFreshness: constants_claim_search__WEBPACK_IMPORTED_MODULE_7__[\"FRESH_ALL\"],\n claimType: \"channel\"\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChannelsFollowingDiscover);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jaGFubmVsc0ZvbGxvd2luZ0Rpc2NvdmVyL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY2hhbm5lbHNGb2xsb3dpbmdEaXNjb3Zlci92aWV3LmpzeD9hMTc5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZSBmcm9tICdjb21wb25lbnQvcGFnZSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENsYWltVGlsZXNEaXNjb3ZlciBmcm9tICdjb21wb25lbnQvY2xhaW1UaWxlc0Rpc2NvdmVyJztcbmltcG9ydCBDbGFpbUxpc3REaXNjb3ZlciBmcm9tICdjb21wb25lbnQvY2xhaW1MaXN0RGlzY292ZXInO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgeyB0b0NhcGl0YWxDYXNlIH0gZnJvbSAndXRpbC9zdHJpbmcnO1xuXG50eXBlIFByb3BzID0ge1xuICBmb2xsb3dlZFRhZ3M6IEFycmF5PFRhZz4sXG4gIHN1YnNjcmliZWRDaGFubmVsczogQXJyYXk8U3Vic2NyaXB0aW9uPixcbiAgYmxvY2tlZENoYW5uZWxzOiBBcnJheTxzdHJpbmc+LFxufTtcblxudHlwZSBSb3dEYXRhSXRlbSA9IHtcbiAgdGl0bGU6IHN0cmluZyxcbiAgbGluaz86IHN0cmluZyxcbiAgaGVscD86IGFueSxcbiAgb3B0aW9ucz86IHt9LFxufTtcblxuZnVuY3Rpb24gQ2hhbm5lbHNGb2xsb3dpbmdEaXNjb3Zlcihwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBmb2xsb3dlZFRhZ3MsIHN1YnNjcmliZWRDaGFubmVscywgYmxvY2tlZENoYW5uZWxzIH0gPSBwcm9wcztcbiAgbGV0IHJvd0RhdGE6IEFycmF5PFJvd0RhdGFJdGVtPiA9IFtdO1xuICBjb25zdCBub3RDaGFubmVscyA9IHN1YnNjcmliZWRDaGFubmVsc1xuICAgIC5tYXAoKHsgdXJpIH0pID0+IHVyaSlcbiAgICAuY29uY2F0KGJsb2NrZWRDaGFubmVscylcbiAgICAubWFwKHVyaSA9PiB1cmkuc3BsaXQoJyMnKVsxXSk7XG5cbiAgcm93RGF0YS5wdXNoKHtcbiAgICB0aXRsZTogJ1RvcCBDaGFubmVscyBPZiBBbGwgVGltZScsXG4gICAgbGluazogYC8kLyR7UEFHRVMuRElTQ09WRVJ9P2NsYWltX3R5cGU9Y2hhbm5lbCYke0NTLk9SREVSX0JZX0tFWX09JHtDUy5PUkRFUl9CWV9UT1B9JiR7Q1MuRlJFU0hfS0VZfT0ke1xuICAgICAgQ1MuRlJFU0hfQUxMXG4gICAgfWAsXG4gICAgb3B0aW9uczoge1xuICAgICAgcGFnZVNpemU6IDEyLFxuICAgICAgY2xhaW1UeXBlOiAnY2hhbm5lbCcsXG4gICAgICBvcmRlckJ5OiBbJ2VmZmVjdGl2ZV9hbW91bnQnXSxcbiAgICB9LFxuICB9KTtcblxuICByb3dEYXRhLnB1c2goe1xuICAgIHRpdGxlOiAnTGF0ZXN0IEZyb20gQGxicnljYXN0JyxcbiAgICBsaW5rOiBgL0BsYnJ5Y2FzdDo0YCxcbiAgICBvcHRpb25zOiB7XG4gICAgICBvcmRlckJ5OiBbJ3JlbGVhc2VfdGltZSddLFxuICAgICAgcGFnZVNpemU6IDgsXG4gICAgICBjaGFubmVsSWRzOiBbJzRjMjlmOGIwMTNhZGVhNGQ1Y2NhMTg2MWZiMjE2MWQ1MDg5NjEzZWEnXSxcbiAgICB9LFxuICB9KTtcblxuICByb3dEYXRhLnB1c2goe1xuICAgIHRpdGxlOiAnVHJlbmRpbmcgQ2hhbm5lbHMnLFxuICAgIGxpbms6IGAvJC8ke1BBR0VTLkRJU0NPVkVSfT9jbGFpbV90eXBlPWNoYW5uZWxgLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhZ2VTaXplOiA4LFxuICAgICAgY2xhaW1UeXBlOiAnY2hhbm5lbCcsXG4gICAgICBvcmRlckJ5OiBbJ3RyZW5kaW5nX2dyb3VwJywgJ3RyZW5kaW5nX21peGVkJ10sXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKGZvbGxvd2VkVGFncy5sZW5ndGggPiAwICYmIGZvbGxvd2VkVGFncy5sZW5ndGggPCA1KSB7XG4gICAgY29uc3QgZm9sbG93ZWRSb3dzID0gZm9sbG93ZWRUYWdzLm1hcCgodGFnOiBUYWcpID0+ICh7XG4gICAgICB0aXRsZTogYFRyZW5kaW5nIENoYW5uZWxzIGZvciAjJHt0b0NhcGl0YWxDYXNlKHRhZy5uYW1lKX1gLFxuICAgICAgbGluazogYC8kLyR7UEFHRVMuRElTQ09WRVJ9P3Q9JHt0YWcubmFtZX0mY2xhaW1fdHlwZT1jaGFubmVsYCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2xhaW1UeXBlOiAnY2hhbm5lbCcsXG4gICAgICAgIHBhZ2VTaXplOiA0LFxuICAgICAgICB0YWdzOiBbdGFnLm5hbWVdLFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgcm93RGF0YS5wdXNoKC4uLmZvbGxvd2VkUm93cyk7XG4gIH1cblxuICBpZiAoZm9sbG93ZWRUYWdzLmxlbmd0aCA+IDQpIHtcbiAgICByb3dEYXRhLnB1c2goe1xuICAgICAgdGl0bGU6ICdUcmVuZGluZyBGb3IgWW91ciBUYWdzJyxcbiAgICAgIGxpbms6IGAvJC8ke1BBR0VTLlRBR1NfRk9MTE9XSU5HfT9jbGFpbV90eXBlPWNoYW5uZWxgLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjbGFpbVR5cGU6ICdjaGFubmVsJyxcbiAgICAgICAgdGFnczogZm9sbG93ZWRUYWdzLm1hcCh0YWcgPT4gdGFnLm5hbWUpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJvd0RhdGFXaXRoR2VuZXJpY09wdGlvbnMgPSByb3dEYXRhLm1hcChyb3cgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yb3csXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIC4uLnJvdy5vcHRpb25zLFxuICAgICAgICBub3RDaGFubmVscyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIHtyb3dEYXRhV2l0aEdlbmVyaWNPcHRpb25zLm1hcCgoeyB0aXRsZSwgbGluaywgaGVscCwgb3B0aW9ucyA9IHt9IH0pID0+IChcbiAgICAgICAgPGRpdiBrZXk9e3RpdGxlfSBjbGFzc05hbWU9XCJjbGFpbS1ncmlkX193cmFwcGVyXCI+XG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIHtsaW5rID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2xhaW0tZ3JpZF9fdGl0bGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgIG5hdmlnYXRlPXtsaW5rfVxuICAgICAgICAgICAgICAgIGljb25SaWdodD17SUNPTlMuQVJST1dfUklHSFR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3RpdGxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2xhaW0tZ3JpZF9fdGl0bGVcIj57dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtoZWxwfVxuICAgICAgICAgIDwvaDE+XG5cbiAgICAgICAgICA8Q2xhaW1UaWxlc0Rpc2NvdmVyIHsuLi5vcHRpb25zfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgICAgPGgxIGNsYXNzTmFtZT1cImNsYWltLWdyaWRfX3RpdGxlXCI+e19fKCdNb3JlIENoYW5uZWxzJyl9PC9oMT5cbiAgICAgIDxDbGFpbUxpc3REaXNjb3ZlciBkZWZhdWx0T3JkZXJCeT17Q1MuT1JERVJfQllfVE9QfSBkZWZhdWx0RnJlc2huZXNzPXtDUy5GUkVTSF9BTEx9IGNsYWltVHlwZT1cImNoYW5uZWxcIiAvPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbHNGb2xsb3dpbmdEaXNjb3ZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTEE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFDQTtBQVNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFBQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFGQTtBQUZBO0FBREE7QUFVQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUFBO0FBYkE7QUFxQkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/channelsFollowingDiscover/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/creatorDashboard/index.js": -/*!********************************************!*\ - !*** ../ui/page/creatorDashboard/index.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/creatorDashboard/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n channels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectMyChannelClaims\"])(state),\n fetchingChannels: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectFetchingMyChannels\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n openChannelCreateModal: function openChannelCreateModal() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"CREATE_CHANNEL\"]));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jcmVhdG9yRGFzaGJvYXJkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY3JlYXRvckRhc2hib2FyZC9pbmRleC5qcz9kNzljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdE15Q2hhbm5lbENsYWltcywgc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb09wZW5Nb2RhbCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCBDcmVhdG9yRGFzaGJvYXJkUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBjaGFubmVsczogc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKSxcbiAgZmV0Y2hpbmdDaGFubmVsczogc2VsZWN0RmV0Y2hpbmdNeUNoYW5uZWxzKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgb3BlbkNoYW5uZWxDcmVhdGVNb2RhbDogKCkgPT4gZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLkNSRUFURV9DSEFOTkVMKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChzZWxlY3QsIHBlcmZvcm0pKENyZWF0b3JEYXNoYm9hcmRQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUFBO0FBQ0E7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/creatorDashboard/index.js\n"); - -/***/ }), - -/***/ "../ui/page/creatorDashboard/view.jsx": -/*!********************************************!*\ - !*** ../ui/page/creatorDashboard/view.jsx ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CreatorDashboardPage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_creatorAnalytics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/creatorAnalytics */ \"../ui/component/creatorAnalytics/index.js\");\n\n\n\n\n\nfunction CreatorDashboardPage(props) {\n var channels = props.channels,\n fetchingChannels = props.fetchingChannels,\n openChannelCreateModal = props.openChannelCreateModal;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, fetchingChannels && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n delayed: true\n })), !fetchingChannels && (!channels || !channels.length) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \" section--small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"section__title--large\"\n }, __(\"You haven't created a channel yet, let's fix that!\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"primary\",\n onClick: openChannelCreateModal,\n label: __('Create A Channel')\n })))), !fetchingChannels && channels && channels.length && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_creatorAnalytics__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9jcmVhdG9yRGFzaGJvYXJkL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvY3JlYXRvckRhc2hib2FyZC92aWV3LmpzeD8xYzhhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnY29tcG9uZW50L3NwaW5uZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDcmVhdG9yQW5hbHl0aWNzIGZyb20gJ2NvbXBvbmVudC9jcmVhdG9yQW5hbHl0aWNzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hhbm5lbHM6IEFycmF5PENoYW5uZWxDbGFpbT4sXG4gIGZldGNoaW5nQ2hhbm5lbHM6IGJvb2xlYW4sXG4gIG9wZW5DaGFubmVsQ3JlYXRlTW9kYWw6ICgpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdG9yRGFzaGJvYXJkUGFnZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjaGFubmVscywgZmV0Y2hpbmdDaGFubmVscywgb3BlbkNoYW5uZWxDcmVhdGVNb2RhbCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIHtmZXRjaGluZ0NoYW5uZWxzICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYWluLS1lbXB0eVwiPlxuICAgICAgICAgIDxTcGlubmVyIGRlbGF5ZWQgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7IWZldGNoaW5nQ2hhbm5lbHMgJiYgKCFjaGFubmVscyB8fCAhY2hhbm5lbHMubGVuZ3RoKSAmJiAoXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm1haW4tLWVtcHR5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCIgc2VjdGlvbi0tc21hbGxcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj57X18oXCJZb3UgaGF2ZW4ndCBjcmVhdGVkIGEgY2hhbm5lbCB5ZXQsIGxldCdzIGZpeCB0aGF0IVwiKX08L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG9uQ2xpY2s9e29wZW5DaGFubmVsQ3JlYXRlTW9kYWx9IGxhYmVsPXtfXygnQ3JlYXRlIEEgQ2hhbm5lbCcpfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICl9XG5cbiAgICAgIHshZmV0Y2hpbmdDaGFubmVscyAmJiBjaGFubmVscyAmJiBjaGFubmVscy5sZW5ndGggJiYgPENyZWF0b3JBbmFseXRpY3MgLz59XG4gICAgPC9QYWdlPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/creatorDashboard/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/discover/index.js": -/*!************************************!*\ - !*** ../ui/page/discover/index.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_tags__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/tags */ \"../ui/redux/actions/tags.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/page/discover/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var urlParams = new URLSearchParams(props.location.search);\n var repostedUriInUrl = urlParams.get(constants_claim_search__WEBPACK_IMPORTED_MODULE_4__[\"REPOSTED_URI_KEY\"]);\n var repostedUri = repostedUriInUrl ? decodeURIComponent(repostedUriInUrl) : undefined;\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n repostedUri: repostedUri,\n repostedClaim: repostedUri ? Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(repostedUri)(state) : null,\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doToggleTagFollowDesktop: redux_actions_tags__WEBPACK_IMPORTED_MODULE_3__[\"doToggleTagFollowDesktop\"],\n doResolveUri: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doResolveUri\"]\n})(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9kaXNjb3Zlci9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2Rpc2NvdmVyL2luZGV4LmpzP2QyMWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGFpbUZvclVyaSwgc2VsZWN0Rm9sbG93ZWRUYWdzLCBkb1Jlc29sdmVVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3RhZ3MnO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5pbXBvcnQgVGFncyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocHJvcHMubG9jYXRpb24uc2VhcmNoKTtcbiAgY29uc3QgcmVwb3N0ZWRVcmlJblVybCA9IHVybFBhcmFtcy5nZXQoQ1MuUkVQT1NURURfVVJJX0tFWSk7XG4gIGNvbnN0IHJlcG9zdGVkVXJpID0gcmVwb3N0ZWRVcmlJblVybCA/IGRlY29kZVVSSUNvbXBvbmVudChyZXBvc3RlZFVyaUluVXJsKSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGZvbGxvd2VkVGFnczogc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKSxcbiAgICByZXBvc3RlZFVyaTogcmVwb3N0ZWRVcmksXG4gICAgcmVwb3N0ZWRDbGFpbTogcmVwb3N0ZWRVcmkgPyBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkocmVwb3N0ZWRVcmkpKHN0YXRlKSA6IG51bGwsXG4gICAgaXNBdXRoZW50aWNhdGVkOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCwge1xuICBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AsXG4gIGRvUmVzb2x2ZVVyaSxcbn0pKFRhZ3MpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTEE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/discover/index.js\n"); - -/***/ }), - -/***/ "../ui/page/discover/view.jsx": -/*!************************************!*\ - !*** ../ui/page/discover/view.jsx ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_hover__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! effects/use-hover */ \"../ui/effects/use-hover.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var component_common_hidden_nsfw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/hidden-nsfw */ \"../ui/component/common/hidden-nsfw.jsx\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lbrytv/component/ads */ \"./component/ads.jsx\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction DiscoverPage(props) {\n var search = props.location.search,\n followedTags = props.followedTags,\n repostedClaim = props.repostedClaim,\n repostedUri = props.repostedUri,\n doToggleTagFollowDesktop = props.doToggleTagFollowDesktop,\n doResolveUri = props.doResolveUri,\n isAuthenticated = props.isAuthenticated;\n var buttonRef = Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useRef\"])();\n var isHovering = Object(effects_use_hover__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(buttonRef);\n var urlParams = new URLSearchParams(search);\n var claimType = urlParams.get('claim_type');\n var tagsQuery = urlParams.get('t') || null;\n var tags = tagsQuery ? tagsQuery.split(',') : null;\n var repostedClaimIsResolved = repostedUri && repostedClaim; // Eventually allow more than one tag on this page\n // Restricting to one to make follow/unfollow simpler\n\n var tag = tags && tags[0] || null;\n var isFollowing = followedTags.map(function (_ref) {\n var name = _ref.name;\n return name;\n }).includes(tag);\n var label = isFollowing ? __('Following') : __('Follow');\n\n if (isHovering && isFollowing) {\n label = __('Unfollow');\n }\n\n react__WEBPACK_IMPORTED_MODULE_1___default.a.useEffect(function () {\n if (repostedUri && !repostedClaimIsResolved) {\n doResolveUri(repostedUri);\n }\n }, [repostedUri, repostedClaimIsResolved, doResolveUri]);\n\n function handleFollowClick() {\n if (tag) {\n doToggleTagFollowDesktop(tag);\n var nowFollowing = !isFollowing;\n analytics__WEBPACK_IMPORTED_MODULE_6__[\"default\"].tagFollowEvent(tag, nowFollowing, 'tag-page');\n }\n }\n\n var headerLabel;\n\n if (repostedClaim) {\n headerLabel = __('Reposts of %uri%', {\n uri: repostedUri\n });\n } else if (tag) {\n headerLabel = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TAG\"],\n size: 10\n }), tag === constants_claim_search__WEBPACK_IMPORTED_MODULE_9__[\"TAGS_ALL\"] && __('All Content') || tag === constants_claim_search__WEBPACK_IMPORTED_MODULE_9__[\"TAGS_FOLLOWED\"] && __('Followed Tags') || __(tag));\n } else {\n headerLabel = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"],\n size: 10\n }), __('All Content'));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n claimType: claimType ? [claimType] : undefined,\n headerLabel: headerLabel,\n tags: tags,\n hiddenNsfwMessage: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_hidden_nsfw__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n type: \"page\"\n }),\n repostedClaimId: repostedClaim ? repostedClaim.claim_id : null,\n injectedItem: !isAuthenticated && true && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n type: \"video\"\n }),\n meta: tag && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n ref: buttonRef,\n button: \"alt\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"SUBSCRIBE\"],\n iconColor: \"red\",\n onClick: handleFollowClick,\n requiresAuth: true,\n label: label\n })\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (DiscoverPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9kaXNjb3Zlci92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2Rpc2NvdmVyL3ZpZXcuanN4P2E0NzYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJ2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IENsYWltTGlzdERpc2NvdmVyIGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3REaXNjb3Zlcic7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHVzZUhvdmVyIGZyb20gJ2VmZmVjdHMvdXNlLWhvdmVyJztcbmltcG9ydCBhbmFseXRpY3MgZnJvbSAnYW5hbHl0aWNzJztcbmltcG9ydCBIaWRkZW5Oc2Z3IGZyb20gJ2NvbXBvbmVudC9jb21tb24vaGlkZGVuLW5zZncnO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCAqIGFzIENTIGZyb20gJ2NvbnN0YW50cy9jbGFpbV9zZWFyY2gnO1xuaW1wb3J0IEFkcyBmcm9tICdsYnJ5dHYvY29tcG9uZW50L2Fkcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxvY2F0aW9uOiB7IHNlYXJjaDogc3RyaW5nIH0sXG4gIGZvbGxvd2VkVGFnczogQXJyYXk8VGFnPixcbiAgcmVwb3N0ZWRVcmk6IHN0cmluZyxcbiAgcmVwb3N0ZWRDbGFpbTogP0dlbmVyaWNDbGFpbSxcbiAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wOiBzdHJpbmcgPT4gdm9pZCxcbiAgZG9SZXNvbHZlVXJpOiBzdHJpbmcgPT4gdm9pZCxcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuLFxufTtcblxuZnVuY3Rpb24gRGlzY292ZXJQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgbG9jYXRpb246IHsgc2VhcmNoIH0sXG4gICAgZm9sbG93ZWRUYWdzLFxuICAgIHJlcG9zdGVkQ2xhaW0sXG4gICAgcmVwb3N0ZWRVcmksXG4gICAgZG9Ub2dnbGVUYWdGb2xsb3dEZXNrdG9wLFxuICAgIGRvUmVzb2x2ZVVyaSxcbiAgICBpc0F1dGhlbnRpY2F0ZWQsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnV0dG9uUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGlzSG92ZXJpbmcgPSB1c2VIb3ZlcihidXR0b25SZWYpO1xuXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgY2xhaW1UeXBlID0gdXJsUGFyYW1zLmdldCgnY2xhaW1fdHlwZScpO1xuICBjb25zdCB0YWdzUXVlcnkgPSB1cmxQYXJhbXMuZ2V0KCd0JykgfHwgbnVsbDtcbiAgY29uc3QgdGFncyA9IHRhZ3NRdWVyeSA/IHRhZ3NRdWVyeS5zcGxpdCgnLCcpIDogbnVsbDtcbiAgY29uc3QgcmVwb3N0ZWRDbGFpbUlzUmVzb2x2ZWQgPSByZXBvc3RlZFVyaSAmJiByZXBvc3RlZENsYWltO1xuXG4gIC8vIEV2ZW50dWFsbHkgYWxsb3cgbW9yZSB0aGFuIG9uZSB0YWcgb24gdGhpcyBwYWdlXG4gIC8vIFJlc3RyaWN0aW5nIHRvIG9uZSB0byBtYWtlIGZvbGxvdy91bmZvbGxvdyBzaW1wbGVyXG4gIGNvbnN0IHRhZyA9ICh0YWdzICYmIHRhZ3NbMF0pIHx8IG51bGw7XG5cbiAgY29uc3QgaXNGb2xsb3dpbmcgPSBmb2xsb3dlZFRhZ3MubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkuaW5jbHVkZXModGFnKTtcbiAgbGV0IGxhYmVsID0gaXNGb2xsb3dpbmcgPyBfXygnRm9sbG93aW5nJykgOiBfXygnRm9sbG93Jyk7XG4gIGlmIChpc0hvdmVyaW5nICYmIGlzRm9sbG93aW5nKSB7XG4gICAgbGFiZWwgPSBfXygnVW5mb2xsb3cnKTtcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlcG9zdGVkVXJpICYmICFyZXBvc3RlZENsYWltSXNSZXNvbHZlZCkge1xuICAgICAgZG9SZXNvbHZlVXJpKHJlcG9zdGVkVXJpKTtcbiAgICB9XG4gIH0sIFtyZXBvc3RlZFVyaSwgcmVwb3N0ZWRDbGFpbUlzUmVzb2x2ZWQsIGRvUmVzb2x2ZVVyaV0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUZvbGxvd0NsaWNrKCkge1xuICAgIGlmICh0YWcpIHtcbiAgICAgIGRvVG9nZ2xlVGFnRm9sbG93RGVza3RvcCh0YWcpO1xuXG4gICAgICBjb25zdCBub3dGb2xsb3dpbmcgPSAhaXNGb2xsb3dpbmc7XG4gICAgICBhbmFseXRpY3MudGFnRm9sbG93RXZlbnQodGFnLCBub3dGb2xsb3dpbmcsICd0YWctcGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBoZWFkZXJMYWJlbDtcbiAgaWYgKHJlcG9zdGVkQ2xhaW0pIHtcbiAgICBoZWFkZXJMYWJlbCA9IF9fKCdSZXBvc3RzIG9mICV1cmklJywgeyB1cmk6IHJlcG9zdGVkVXJpIH0pO1xuICB9IGVsc2UgaWYgKHRhZykge1xuICAgIGhlYWRlckxhYmVsID0gKFxuICAgICAgPHNwYW4+XG4gICAgICAgIDxJY29uIGljb249e0lDT05TLlRBR30gc2l6ZT17MTB9IC8+XG4gICAgICAgIHsodGFnID09PSBDUy5UQUdTX0FMTCAmJiBfXygnQWxsIENvbnRlbnQnKSkgfHwgKHRhZyA9PT0gQ1MuVEFHU19GT0xMT1dFRCAmJiBfXygnRm9sbG93ZWQgVGFncycpKSB8fCBfXyh0YWcpfVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyTGFiZWwgPSAoXG4gICAgICA8c3Bhbj5cbiAgICAgICAgPEljb24gaWNvbj17SUNPTlMuRElTQ09WRVJ9IHNpemU9ezEwfSAvPlxuICAgICAgICB7X18oJ0FsbCBDb250ZW50Jyl9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBhZ2U+XG4gICAgICA8Q2xhaW1MaXN0RGlzY292ZXJcbiAgICAgICAgY2xhaW1UeXBlPXtjbGFpbVR5cGUgPyBbY2xhaW1UeXBlXSA6IHVuZGVmaW5lZH1cbiAgICAgICAgaGVhZGVyTGFiZWw9e2hlYWRlckxhYmVsfVxuICAgICAgICB0YWdzPXt0YWdzfVxuICAgICAgICBoaWRkZW5Oc2Z3TWVzc2FnZT17PEhpZGRlbk5zZncgdHlwZT1cInBhZ2VcIiAvPn1cbiAgICAgICAgcmVwb3N0ZWRDbGFpbUlkPXtyZXBvc3RlZENsYWltID8gcmVwb3N0ZWRDbGFpbS5jbGFpbV9pZCA6IG51bGx9XG4gICAgICAgIGluamVjdGVkSXRlbT17IWlzQXV0aGVudGljYXRlZCAmJiBJU19XRUIgJiYgPEFkcyB0eXBlPVwidmlkZW9cIiAvPn1cbiAgICAgICAgbWV0YT17XG4gICAgICAgICAgdGFnICYmIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgcmVmPXtidXR0b25SZWZ9XG4gICAgICAgICAgICAgIGJ1dHRvbj1cImFsdFwiXG4gICAgICAgICAgICAgIGljb249e0lDT05TLlNVQlNDUklCRX1cbiAgICAgICAgICAgICAgaWNvbkNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRm9sbG93Q2xpY2t9XG4gICAgICAgICAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1BhZ2U+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc2NvdmVyUGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBRUE7QUFBQTtBQUFBO0FBSEE7QUFRQTtBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVEE7QUF1QkE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/discover/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/embedWrapper/index.js": -/*!****************************************!*\ - !*** ../ui/page/embedWrapper/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/embedWrapper/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n\n\n\n\n\nvar select = function select(state, props) {\n var match = props.match;\n var params = match.params;\n var claimName = params.claimName,\n claimId = params.claimId;\n var uri = claimName && claimId ? Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"buildURI\"])({\n claimName: claimName,\n claimId: claimId\n }) : '';\n return {\n uri: uri,\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doResolveUri\"])(uri));\n },\n triggerAnalyticsView: function triggerAnalyticsView(uri) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_3__[\"doAnalyticsView\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9lbWJlZFdyYXBwZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9lbWJlZFdyYXBwZXIvaW5kZXguanM/MjUxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IEVtYmVkV3JhcHBlclBhZ2UgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IGRvUmVzb2x2ZVVyaSwgbWFrZVNlbGVjdENsYWltRm9yVXJpLCBidWlsZFVSSSB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9BbmFseXRpY3NWaWV3IH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgbWF0Y2ggfSA9IHByb3BzO1xuICBjb25zdCB7IHBhcmFtcyB9ID0gbWF0Y2g7XG4gIGNvbnN0IHsgY2xhaW1OYW1lLCBjbGFpbUlkIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHVyaSA9IGNsYWltTmFtZSAmJiBjbGFpbUlkID8gYnVpbGRVUkkoeyBjbGFpbU5hbWUsIGNsYWltSWQgfSkgOiAnJztcbiAgcmV0dXJuIHtcbiAgICB1cmksXG4gICAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpKHN0YXRlKSxcbiAgfTtcbn07XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZVVyaTogdXJpID0+IGRpc3BhdGNoKGRvUmVzb2x2ZVVyaSh1cmkpKSxcbiAgICB0cmlnZ2VyQW5hbHl0aWNzVmlldzogdXJpID0+IGRpc3BhdGNoKGRvQW5hbHl0aWNzVmlldyh1cmkpKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShFbWJlZFdyYXBwZXJQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBTEE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBQ0E7QUFNQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/embedWrapper/index.js\n"); - -/***/ }), - -/***/ "../ui/page/embedWrapper/view.jsx": -/*!****************************************!*\ - !*** ../ui/page/embedWrapper/view.jsx ***! - \****************************************/ -/*! exports provided: EmbedContext, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EmbedContext\", function() { return EmbedContext; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_fileRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/fileRender */ \"../ui/component/fileRender/index.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n // $FlowFixMe apparently flow thinks this is wrong.\n\nvar EmbedContext = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext();\n\nvar EmbedWrapperPage = function EmbedWrapperPage(props) {\n var resolveUri = props.resolveUri,\n claim = props.claim,\n uri = props.uri,\n triggerAnalyticsView = props.triggerAnalyticsView;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n hasRecordedView = _useState2[0],\n setHasRecordedView = _useState2[1];\n\n function onStartedCallback() {\n if (!hasRecordedView && uri && claim) {\n triggerAnalyticsView(uri).then(function () {\n setHasRecordedView(true);\n });\n }\n }\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (resolveUri && uri) {\n resolveUri(uri);\n }\n }, []);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: 'embed__wrapper'\n }, claim && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(EmbedContext.Provider, {\n value: true\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_fileRender__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n uri: uri,\n embedded: true,\n onStartedCallback: onStartedCallback\n })));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (EmbedWrapperPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9lbWJlZFdyYXBwZXIvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9lbWJlZFdyYXBwZXIvdmlldy5qc3g/ZGEyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmlsZVJlbmRlciBmcm9tICdjb21wb25lbnQvZmlsZVJlbmRlcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHVyaTogc3RyaW5nLFxuICByZXNvbHZlVXJpOiBzdHJpbmcgPT4gdm9pZCxcbiAgY2xhaW06IENsYWltLFxuICB0cmlnZ2VyQW5hbHl0aWNzVmlldzogc3RyaW5nID0+IFByb21pc2U8YW55Pixcbn07XG4vLyAkRmxvd0ZpeE1lIGFwcGFyZW50bHkgZmxvdyB0aGlua3MgdGhpcyBpcyB3cm9uZy5cbmV4cG9ydCBjb25zdCBFbWJlZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5jb25zdCBFbWJlZFdyYXBwZXJQYWdlID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IHJlc29sdmVVcmksIGNsYWltLCB1cmksIHRyaWdnZXJBbmFseXRpY3NWaWV3IH0gPSBwcm9wcztcbiAgY29uc3QgW2hhc1JlY29yZGVkVmlldywgc2V0SGFzUmVjb3JkZWRWaWV3XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBmdW5jdGlvbiBvblN0YXJ0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIWhhc1JlY29yZGVkVmlldyAmJiB1cmkgJiYgY2xhaW0pIHtcbiAgICAgIHRyaWdnZXJBbmFseXRpY3NWaWV3KHVyaSkudGhlbigoKSA9PiB7XG4gICAgICAgIHNldEhhc1JlY29yZGVkVmlldyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlc29sdmVVcmkgJiYgdXJpKSB7XG4gICAgICByZXNvbHZlVXJpKHVyaSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17J2VtYmVkX193cmFwcGVyJ30+XG4gICAgICB7Y2xhaW0gJiYgKFxuICAgICAgICA8RW1iZWRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPlxuICAgICAgICAgIDxGaWxlUmVuZGVyIHVyaT17dXJpfSBlbWJlZGRlZCBvblN0YXJ0ZWRDYWxsYmFjaz17b25TdGFydGVkQ2FsbGJhY2t9IC8+XG4gICAgICAgIDwvRW1iZWRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVtYmVkV3JhcHBlclBhZ2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQXRCQTtBQUNBO0FBNEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/embedWrapper/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/file/index.js": -/*!********************************!*\ - !*** ../ui/page/file/index.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./view */ \"../ui/page/file/view.jsx\");\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimForUri\"])(props.uri)(state),\n costInfo: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"makeSelectCostInfoForUri\"])(props.uri)(state),\n metadata: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectMetadataForUri\"])(props.uri)(state),\n obscureNsfw: !Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectShowMatureContent\"])(state),\n fileInfo: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectFileInfoForUri\"])(props.uri)(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_6__[\"makeSelectIsSubscribed\"])(props.uri)(state),\n channelUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectChannelForClaimUri\"])(props.uri, true)(state),\n renderMode: Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_7__[\"makeSelectFileRenderModeForUri\"])(props.uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchFileInfo: function fetchFileInfo(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doFetchFileInfo\"])(uri));\n },\n fetchCostInfo: function fetchCostInfo(uri) {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"doFetchCostInfoForUri\"])(uri));\n },\n setViewed: function setViewed(uri) {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_2__[\"doSetContentHistoryItem\"])(uri));\n },\n markSubscriptionRead: function markSubscriptionRead(channel, uri) {\n return dispatch(Object(redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_1__[\"doRemoveUnreadSubscription\"])(channel, uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_8__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvZmlsZS9pbmRleC5qcz8xYmM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBkb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbiB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBkb1NldENvbnRlbnRIaXN0b3J5SXRlbSB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvY29udGVudCc7XG5pbXBvcnQge1xuICBkb0ZldGNoRmlsZUluZm8sXG4gIG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSxcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBtYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmksXG4gIG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmksXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpLCBkb0ZldGNoQ29zdEluZm9Gb3JVcmkgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IHNlbGVjdFNob3dNYXR1cmVDb250ZW50IH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCB7IG1ha2VTZWxlY3RJc1N1YnNjcmliZWQgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0RmlsZVJlbmRlck1vZGVGb3JVcmkgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvY29udGVudCc7XG5pbXBvcnQgRmlsZVBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgY29zdEluZm86IG1ha2VTZWxlY3RDb3N0SW5mb0ZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgbWV0YWRhdGE6IG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaShwcm9wcy51cmkpKHN0YXRlKSxcbiAgb2JzY3VyZU5zZnc6ICFzZWxlY3RTaG93TWF0dXJlQ29udGVudChzdGF0ZSksXG4gIGZpbGVJbmZvOiBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkocHJvcHMudXJpKShzdGF0ZSksXG4gIGlzU3Vic2NyaWJlZDogbWFrZVNlbGVjdElzU3Vic2NyaWJlZChwcm9wcy51cmkpKHN0YXRlKSxcbiAgY2hhbm5lbFVyaTogbWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaShwcm9wcy51cmksIHRydWUpKHN0YXRlKSxcbiAgcmVuZGVyTW9kZTogbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpKHByb3BzLnVyaSkoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBmZXRjaEZpbGVJbmZvOiB1cmkgPT4gZGlzcGF0Y2goZG9GZXRjaEZpbGVJbmZvKHVyaSkpLFxuICBmZXRjaENvc3RJbmZvOiB1cmkgPT4gZGlzcGF0Y2goZG9GZXRjaENvc3RJbmZvRm9yVXJpKHVyaSkpLFxuICBzZXRWaWV3ZWQ6IHVyaSA9PiBkaXNwYXRjaChkb1NldENvbnRlbnRIaXN0b3J5SXRlbSh1cmkpKSxcbiAgbWFya1N1YnNjcmlwdGlvblJlYWQ6IChjaGFubmVsLCB1cmkpID0+IGRpc3BhdGNoKGRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9uKGNoYW5uZWwsIHVyaSkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShGaWxlUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUFBO0FBQ0E7QUFVQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUZBO0FBR0E7QUFBQTtBQUhBO0FBSUE7QUFBQTtBQUFBO0FBSkE7QUFBQTtBQUNBO0FBTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/file/index.js\n"); - -/***/ }), - -/***/ "../ui/page/file/view.jsx": -/*!********************************!*\ - !*** ../ui/page/file/view.jsx ***! - \********************************/ -/*! exports provided: FILE_WRAPPER_CLASS, default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FILE_WRAPPER_CLASS\", function() { return FILE_WRAPPER_CLASS; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var component_claimUri__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/claimUri */ \"../ui/component/claimUri/index.js\");\n/* harmony import */ var component_fileTitle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/fileTitle */ \"../ui/component/fileTitle/index.js\");\n/* harmony import */ var component_fileRenderInitiator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/fileRenderInitiator */ \"../ui/component/fileRenderInitiator/index.js\");\n/* harmony import */ var component_fileRenderInline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/fileRenderInline */ \"../ui/component/fileRenderInline/index.js\");\n/* harmony import */ var component_fileRenderDownload__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/fileRenderDownload */ \"../ui/component/fileRenderDownload/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_fileDetails__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/fileDetails */ \"../ui/component/fileDetails/index.js\");\n/* harmony import */ var component_fileValues__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/fileValues */ \"../ui/component/fileValues/index.js\");\n/* harmony import */ var component_fileDescription__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/fileDescription */ \"../ui/component/fileDescription/index.js\");\n/* harmony import */ var component_recommendedContent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! component/recommendedContent */ \"../ui/component/recommendedContent/index.js\");\n/* harmony import */ var component_commentsList__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/commentsList */ \"../ui/component/commentsList/index.js\");\n/* harmony import */ var component_commentCreate__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! component/commentCreate */ \"../ui/component/commentCreate/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar FILE_WRAPPER_CLASS = 'grid-area--content';\n\nvar FilePage = /*#__PURE__*/function (_React$Component) {\n _inherits(FilePage, _React$Component);\n\n function FilePage() {\n _classCallCheck(this, FilePage);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(FilePage).apply(this, arguments));\n }\n\n _createClass(FilePage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n uri = _this$props.uri,\n fetchFileInfo = _this$props.fetchFileInfo,\n fetchCostInfo = _this$props.fetchCostInfo,\n setViewed = _this$props.setViewed,\n isSubscribed = _this$props.isSubscribed;\n\n if (isSubscribed) {\n this.removeFromSubscriptionNotifications();\n } // always refresh file info when entering file page to see if we have the file\n // this could probably be refactored into more direct components now\n // See https://github.com/lbryio/lbry-desktop/pull/1563 for discussion\n\n\n fetchCostInfo(uri);\n setViewed(uri);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props2 = this.props,\n isSubscribed = _this$props2.isSubscribed,\n uri = _this$props2.uri,\n fileInfo = _this$props2.fileInfo,\n setViewed = _this$props2.setViewed,\n fetchFileInfo = _this$props2.fetchFileInfo;\n\n if (!prevProps.isSubscribed && isSubscribed) {\n this.removeFromSubscriptionNotifications();\n }\n\n if (prevProps.uri !== uri) {\n setViewed(uri);\n }\n }\n }, {\n key: \"removeFromSubscriptionNotifications\",\n value: function removeFromSubscriptionNotifications() {\n // Always try to remove\n // If it doesn't exist, nothing will happen\n var _this$props3 = this.props,\n markSubscriptionRead = _this$props3.markSubscriptionRead,\n uri = _this$props3.uri,\n channelUri = _this$props3.channelUri;\n markSubscriptionRead(channelUri, uri);\n }\n }, {\n key: \"renderFilePageLayout\",\n value: function renderFilePageLayout(uri, mode, cost) {\n if (constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"FLOATING_MODES\"].includes(mode)) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimUri__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: FILE_WRAPPER_CLASS\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderInitiator__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileTitle__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }));\n }\n\n if (constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"UNRENDERABLE_MODES\"].includes(mode)) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimUri__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileTitle__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderDownload__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n uri: uri,\n isFree: cost === 0\n }));\n }\n\n if (constants_file_render_modes__WEBPACK_IMPORTED_MODULE_3__[\"TEXT_MODES\"].includes(mode)) {\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimUri__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileTitle__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderInitiator__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderInline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n uri: uri\n }));\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_claimUri__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderInitiator__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileRenderInline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileTitle__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uri: uri\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props4 = this.props,\n uri = _this$props4.uri,\n renderMode = _this$props4.renderMode,\n costInfo = _this$props4.costInfo;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"file-page\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('section card-stack', \"file-page__\".concat(renderMode))\n }, this.renderFilePageLayout(uri, renderMode, costInfo ? costInfo.cost : null)), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"section columns\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", {\n className: \"card-stack\"\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileDescription__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileValues__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_fileDetails__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: __('Leave a Comment'),\n actions: react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"div\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_commentCreate__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n uri: uri\n }), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_commentsList__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n uri: uri\n }))\n })), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](component_recommendedContent__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n uri: uri\n })));\n }\n }]);\n\n return FilePage;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FilePage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvZmlsZS92aWV3LmpzeD9lYzEyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCAqIGFzIFJFTkRFUl9NT0RFUyBmcm9tICdjb25zdGFudHMvZmlsZV9yZW5kZXJfbW9kZXMnO1xuaW1wb3J0IENsYWltVXJpIGZyb20gJ2NvbXBvbmVudC9jbGFpbVVyaSc7XG5pbXBvcnQgRmlsZVRpdGxlIGZyb20gJ2NvbXBvbmVudC9maWxlVGl0bGUnO1xuaW1wb3J0IEZpbGVSZW5kZXJJbml0aWF0b3IgZnJvbSAnY29tcG9uZW50L2ZpbGVSZW5kZXJJbml0aWF0b3InO1xuaW1wb3J0IEZpbGVSZW5kZXJJbmxpbmUgZnJvbSAnY29tcG9uZW50L2ZpbGVSZW5kZXJJbmxpbmUnO1xuaW1wb3J0IEZpbGVSZW5kZXJEb3dubG9hZCBmcm9tICdjb21wb25lbnQvZmlsZVJlbmRlckRvd25sb2FkJztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgRmlsZURldGFpbHMgZnJvbSAnY29tcG9uZW50L2ZpbGVEZXRhaWxzJztcbmltcG9ydCBGaWxlVmFsdWVzIGZyb20gJ2NvbXBvbmVudC9maWxlVmFsdWVzJztcbmltcG9ydCBGaWxlRGVzY3JpcHRpb24gZnJvbSAnY29tcG9uZW50L2ZpbGVEZXNjcmlwdGlvbic7XG5cbmltcG9ydCBSZWNvbW1lbmRlZENvbnRlbnQgZnJvbSAnY29tcG9uZW50L3JlY29tbWVuZGVkQ29udGVudCc7XG5pbXBvcnQgQ29tbWVudHNMaXN0IGZyb20gJ2NvbXBvbmVudC9jb21tZW50c0xpc3QnO1xuaW1wb3J0IENvbW1lbnRDcmVhdGUgZnJvbSAnY29tcG9uZW50L2NvbW1lbnRDcmVhdGUnO1xuXG5leHBvcnQgY29uc3QgRklMRV9XUkFQUEVSX0NMQVNTID0gJ2dyaWQtYXJlYS0tY29udGVudCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgY29zdEluZm86ID97IGluY2x1ZGVzRGF0YTogYm9vbGVhbiwgY29zdDogbnVtYmVyIH0sXG4gIGZpbGVJbmZvOiBGaWxlTGlzdEl0ZW0sXG4gIHVyaTogc3RyaW5nLFxuICBmZXRjaEZpbGVJbmZvOiBzdHJpbmcgPT4gdm9pZCxcbiAgZmV0Y2hDb3N0SW5mbzogc3RyaW5nID0+IHZvaWQsXG4gIHNldFZpZXdlZDogc3RyaW5nID0+IHZvaWQsXG4gIGlzU3Vic2NyaWJlZDogYm9vbGVhbixcbiAgY2hhbm5lbFVyaTogc3RyaW5nLFxuICByZW5kZXJNb2RlOiBzdHJpbmcsXG4gIG1hcmtTdWJzY3JpcHRpb25SZWFkOiAoc3RyaW5nLCBzdHJpbmcpID0+IHZvaWQsXG59O1xuXG5jbGFzcyBGaWxlUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcz4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHVyaSwgZmV0Y2hGaWxlSW5mbywgZmV0Y2hDb3N0SW5mbywgc2V0Vmlld2VkLCBpc1N1YnNjcmliZWQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICB0aGlzLnJlbW92ZUZyb21TdWJzY3JpcHRpb25Ob3RpZmljYXRpb25zKCk7XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIHJlZnJlc2ggZmlsZSBpbmZvIHdoZW4gZW50ZXJpbmcgZmlsZSBwYWdlIHRvIHNlZSBpZiB3ZSBoYXZlIHRoZSBmaWxlXG4gICAgLy8gdGhpcyBjb3VsZCBwcm9iYWJseSBiZSByZWZhY3RvcmVkIGludG8gbW9yZSBkaXJlY3QgY29tcG9uZW50cyBub3dcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9wdWxsLzE1NjMgZm9yIGRpc2N1c3Npb25cbiAgICBmZXRjaENvc3RJbmZvKHVyaSk7XG4gICAgc2V0Vmlld2VkKHVyaSk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBQcm9wcykge1xuICAgIGNvbnN0IHsgaXNTdWJzY3JpYmVkLCB1cmksIGZpbGVJbmZvLCBzZXRWaWV3ZWQsIGZldGNoRmlsZUluZm8gfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXByZXZQcm9wcy5pc1N1YnNjcmliZWQgJiYgaXNTdWJzY3JpYmVkKSB7XG4gICAgICB0aGlzLnJlbW92ZUZyb21TdWJzY3JpcHRpb25Ob3RpZmljYXRpb25zKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZQcm9wcy51cmkgIT09IHVyaSkge1xuICAgICAgc2V0Vmlld2VkKHVyaSk7XG4gICAgfVxuXG4gIH1cblxuICByZW1vdmVGcm9tU3Vic2NyaXB0aW9uTm90aWZpY2F0aW9ucygpIHtcbiAgICAvLyBBbHdheXMgdHJ5IHRvIHJlbW92ZVxuICAgIC8vIElmIGl0IGRvZXNuJ3QgZXhpc3QsIG5vdGhpbmcgd2lsbCBoYXBwZW5cbiAgICBjb25zdCB7IG1hcmtTdWJzY3JpcHRpb25SZWFkLCB1cmksIGNoYW5uZWxVcmkgfSA9IHRoaXMucHJvcHM7XG4gICAgbWFya1N1YnNjcmlwdGlvblJlYWQoY2hhbm5lbFVyaSwgdXJpKTtcbiAgfVxuXG4gIHJlbmRlckZpbGVQYWdlTGF5b3V0KHVyaTogc3RyaW5nLCBtb2RlOiBzdHJpbmcsIGNvc3Q6ID9udW1iZXIpIHtcbiAgICBpZiAoUkVOREVSX01PREVTLkZMT0FUSU5HX01PREVTLmluY2x1ZGVzKG1vZGUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPENsYWltVXJpIHVyaT17dXJpfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtGSUxFX1dSQVBQRVJfQ0xBU1N9PlxuICAgICAgICAgICAgPEZpbGVSZW5kZXJJbml0aWF0b3IgdXJpPXt1cml9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIHBsYXlhYmxlcyB3aWxsIGJlIHJlbmRlcmVkIGFuZCBpbmplY3RlZCBieSA8RmlsZVJlbmRlckZsb2F0aW5nPiAqL31cbiAgICAgICAgICA8RmlsZVRpdGxlIHVyaT17dXJpfSAvPlxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoUkVOREVSX01PREVTLlVOUkVOREVSQUJMRV9NT0RFUy5pbmNsdWRlcyhtb2RlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxDbGFpbVVyaSB1cmk9e3VyaX0gLz5cbiAgICAgICAgICA8RmlsZVRpdGxlIHVyaT17dXJpfSAvPlxuICAgICAgICAgIDxGaWxlUmVuZGVyRG93bmxvYWQgdXJpPXt1cml9IGlzRnJlZT17Y29zdCA9PT0gMH0gLz5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFJFTkRFUl9NT0RFUy5URVhUX01PREVTLmluY2x1ZGVzKG1vZGUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPENsYWltVXJpIHVyaT17dXJpfSAvPlxuICAgICAgICAgIDxGaWxlVGl0bGUgdXJpPXt1cml9IC8+XG4gICAgICAgICAgPEZpbGVSZW5kZXJJbml0aWF0b3IgdXJpPXt1cml9IC8+XG4gICAgICAgICAgPEZpbGVSZW5kZXJJbmxpbmUgdXJpPXt1cml9IC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxDbGFpbVVyaSB1cmk9e3VyaX0gLz5cbiAgICAgICAgPEZpbGVSZW5kZXJJbml0aWF0b3IgdXJpPXt1cml9IC8+XG4gICAgICAgIDxGaWxlUmVuZGVySW5saW5lIHVyaT17dXJpfSAvPlxuICAgICAgICA8RmlsZVRpdGxlIHVyaT17dXJpfSAvPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdXJpLCByZW5kZXJNb2RlLCBjb3N0SW5mbyB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnZSBjbGFzc05hbWU9XCJmaWxlLXBhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3NlY3Rpb24gY2FyZC1zdGFjaycsIGBmaWxlLXBhZ2VfXyR7cmVuZGVyTW9kZX1gKX0+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVBhZ2VMYXlvdXQodXJpLCByZW5kZXJNb2RlLCBjb3N0SW5mbyA/IGNvc3RJbmZvLmNvc3QgOiBudWxsKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbiBjb2x1bW5zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkLXN0YWNrXCI+XG4gICAgICAgICAgICA8RmlsZURlc2NyaXB0aW9uIHVyaT17dXJpfSAvPlxuXG4gICAgICAgICAgICA8RmlsZVZhbHVlcyB1cmk9e3VyaX0gLz5cblxuICAgICAgICAgICAgPEZpbGVEZXRhaWxzIHVyaT17dXJpfSAvPlxuXG4gICAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgICB0aXRsZT17X18oJ0xlYXZlIGEgQ29tbWVudCcpfVxuICAgICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPENvbW1lbnRDcmVhdGUgdXJpPXt1cml9IC8+XG4gICAgICAgICAgICAgICAgICA8Q29tbWVudHNMaXN0IHVyaT17dXJpfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxSZWNvbW1lbmRlZENvbnRlbnQgdXJpPXt1cml9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QYWdlPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVBhZ2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWVBOzs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBSkE7QUFRQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFMQTtBQVVBO0FBQUE7QUFJQTs7OztBQS9HQTtBQUNBO0FBaUhBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/file/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/fileListDownloaded/index.js": -/*!**********************************************!*\ - !*** ../ui/page/fileListDownloaded/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/page/fileListDownloaded/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\nvar select = function select(state, props) {\n var history = props.history,\n location = props.location;\n var search = location.search;\n var urlParams = new URLSearchParams(search);\n var query = urlParams.get('query') || '';\n var page = Number(urlParams.get('page')) || 1;\n return {\n page: page,\n history: history,\n query: query,\n allDownloadedUrlsCount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectDownloadUrlsCount\"])(state),\n downloadedUrls: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectSearchDownloadUrlsForPage\"])(query, page)(state),\n downloadedUrlsCount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectSearchDownloadUrlsCount\"])(query)(state),\n fetching: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsFetchingFileList\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlTGlzdERvd25sb2FkZWQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9maWxlTGlzdERvd25sb2FkZWQvaW5kZXguanM/M2UzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdFNlYXJjaERvd25sb2FkVXJsc0ZvclBhZ2UsIG1ha2VTZWxlY3RTZWFyY2hEb3dubG9hZFVybHNDb3VudCwgc2VsZWN0RG93bmxvYWRVcmxzQ291bnQsIHNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IEZpbGVMaXN0RG93bmxvYWRlZCBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbmNvbnN0IHNlbGVjdCA9IChzdGF0ZSwgcHJvcHMpID0+IHtcbiAgY29uc3QgeyBoaXN0b3J5LCBsb2NhdGlvbiB9ICA9IHByb3BzO1xuICBjb25zdCB7IHNlYXJjaCB9ID0gbG9jYXRpb247XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgcXVlcnkgPSB1cmxQYXJhbXMuZ2V0KCdxdWVyeScpIHx8ICcnO1xuICBjb25zdCBwYWdlID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ3BhZ2UnKSkgfHwgMTtcbiAgcmV0dXJuIHtcbiAgICBwYWdlLFxuICAgIGhpc3RvcnksXG4gICAgcXVlcnksXG4gICAgYWxsRG93bmxvYWRlZFVybHNDb3VudDogc2VsZWN0RG93bmxvYWRVcmxzQ291bnQoc3RhdGUpLFxuICAgIGRvd25sb2FkZWRVcmxzOiBtYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzRm9yUGFnZShxdWVyeSwgcGFnZSkoc3RhdGUpLFxuICAgIGRvd25sb2FkZWRVcmxzQ291bnQ6IG1ha2VTZWxlY3RTZWFyY2hEb3dubG9hZFVybHNDb3VudChxdWVyeSkoc3RhdGUpLFxuICAgIGZldGNoaW5nOiBzZWxlY3RJc0ZldGNoaW5nRmlsZUxpc3Qoc3RhdGUpLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihcbiAgY29ubmVjdChcbiAgICBzZWxlY3QsXG4gICAgbnVsbFxuICApKEZpbGVMaXN0RG93bmxvYWRlZClcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQU5BO0FBQ0E7QUFnQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/fileListDownloaded/index.js\n"); - -/***/ }), - -/***/ "../ui/page/fileListDownloaded/view.jsx": -/*!**********************************************!*\ - !*** ../ui/page/fileListDownloaded/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_common_paginate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/paginate */ \"../ui/component/common/paginate.jsx\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var component_common_form_components_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/common/form-components/form */ \"../ui/component/common/form-components/form.jsx\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var _constants_icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var _component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../component/common/form-components/form-field */ \"../ui/component/common/form-components/form-field.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction FileListDownloaded(props) {\n var fetching = props.fetching,\n history = props.history,\n query = props.query,\n allDownloadedUrlsCount = props.allDownloadedUrlsCount,\n downloadedUrls = props.downloadedUrls,\n downloadedUrlsCount = props.downloadedUrlsCount;\n var hasDownloads = allDownloadedUrlsCount > 0;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n searchQuery = _useState2[0],\n setSearchQuery = _useState2[1];\n\n function handleInputChange(e) {\n var value = e.target.value;\n\n if (value !== searchQuery) {\n setSearchQuery(value);\n history.replace(\"?query=\".concat(value, \"&page=1\"));\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, hasDownloads ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n header: __('Your Library'),\n headerAltControls: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form_components_form__WEBPACK_IMPORTED_MODULE_5__[\"Form\"], {\n onSubmit: function onSubmit() {},\n className: \"wunderbar--inline\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n icon: _constants_icons__WEBPACK_IMPORTED_MODULE_7__[\"SEARCH\"]\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_component_common_form_components_form_field__WEBPACK_IMPORTED_MODULE_8__[\"FormField\"], {\n className: \"wunderbar__input\",\n onChange: handleInputChange,\n value: query,\n type: \"text\",\n name: \"query\",\n placeholder: __('Search')\n })),\n persistedStorageKey: \"claim-list-downloaded\",\n empty: __('No results for %query%', {\n query: query\n }),\n uris: downloadedUrls,\n loading: fetching\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_paginate__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n totalPages: Math.ceil(Number(downloadedUrlsCount) / Number(constants_claim__WEBPACK_IMPORTED_MODULE_4__[\"PAGE_SIZE\"])),\n loading: fetching\n })) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card card--section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"card__title card__title--deprecated\"\n }, __(\"You haven't downloaded anything from LBRY yet.\")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions card__actions--center\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n navigate: \"/\",\n label: __('Explore new content')\n })))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_9__[\"withRouter\"])(FileListDownloaded));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlTGlzdERvd25sb2FkZWQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9maWxlTGlzdERvd25sb2FkZWQvdmlldy5qc3g/YmNjMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDbGFpbUxpc3QgZnJvbSAnY29tcG9uZW50L2NsYWltTGlzdCc7XG5pbXBvcnQgUGFnaW5hdGUgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9wYWdpbmF0ZSc7XG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJ2NvbXBvbmVudC9jb21tb24vZm9ybS1jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCAqIGFzIElDT05TIGZyb20gJy4uLy4uL2NvbnN0YW50cy9pY29ucyc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICcuLi8uLi9jb21wb25lbnQvY29tbW9uL2Zvcm0tY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG50eXBlIFByb3BzID0ge1xuICBmZXRjaGluZzogYm9vbGVhbixcbiAgYWxsRG93bmxvYWRlZFVybHNDb3VudDogbnVtYmVyLFxuICBkb3dubG9hZGVkVXJsczogQXJyYXk8c3RyaW5nPixcbiAgZG93bmxvYWRlZFVybHNDb3VudDogP251bWJlcixcbiAgaGlzdG9yeTogeyByZXBsYWNlOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBwYWdlOiBudW1iZXIsXG4gIHF1ZXJ5OiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBGaWxlTGlzdERvd25sb2FkZWQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZmV0Y2hpbmcsIGhpc3RvcnksIHF1ZXJ5LCBhbGxEb3dubG9hZGVkVXJsc0NvdW50LCBkb3dubG9hZGVkVXJscywgZG93bmxvYWRlZFVybHNDb3VudCB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhc0Rvd25sb2FkcyA9IGFsbERvd25sb2FkZWRVcmxzQ291bnQgPiAwO1xuXG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGUpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBlLnRhcmdldDtcbiAgICBpZiAodmFsdWUgIT09IHNlYXJjaFF1ZXJ5KSB7XG4gICAgICBzZXRTZWFyY2hRdWVyeSh2YWx1ZSk7XG4gICAgICBoaXN0b3J5LnJlcGxhY2UoYD9xdWVyeT0ke3ZhbHVlfSZwYWdlPTFgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtoYXNEb3dubG9hZHMgPyAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8Q2xhaW1MaXN0XG4gICAgICAgICAgICBoZWFkZXI9e19fKCdZb3VyIExpYnJhcnknKX1cbiAgICAgICAgICAgIGhlYWRlckFsdENvbnRyb2xzPXtcbiAgICAgICAgICAgICAgPEZvcm0gb25TdWJtaXQ9eygpID0+IHt9fSBjbGFzc05hbWU9XCJ3dW5kZXJiYXItLWlubGluZVwiPlxuICAgICAgICAgICAgICAgIDxJY29uIGljb249e0lDT05TLlNFQVJDSH0gLz5cbiAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3dW5kZXJiYXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtxdWVyeX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17X18oJ1NlYXJjaCcpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlcnNpc3RlZFN0b3JhZ2VLZXk9XCJjbGFpbS1saXN0LWRvd25sb2FkZWRcIlxuICAgICAgICAgICAgZW1wdHk9e19fKCdObyByZXN1bHRzIGZvciAlcXVlcnklJywgeyBxdWVyeSB9KX1cbiAgICAgICAgICAgIHVyaXM9e2Rvd25sb2FkZWRVcmxzfVxuICAgICAgICAgICAgbG9hZGluZz17ZmV0Y2hpbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8UGFnaW5hdGUgdG90YWxQYWdlcz17TWF0aC5jZWlsKE51bWJlcihkb3dubG9hZGVkVXJsc0NvdW50KSAvIE51bWJlcihQQUdFX1NJWkUpKX0gbG9hZGluZz17ZmV0Y2hpbmd9IC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1haW4tLWVtcHR5XCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY2FyZCBjYXJkLS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGUgY2FyZF9fdGl0bGUtLWRlcHJlY2F0ZWRcIj5cbiAgICAgICAgICAgICAge19fKFwiWW91IGhhdmVuJ3QgZG93bmxvYWRlZCBhbnl0aGluZyBmcm9tIExCUlkgeWV0LlwiKX1cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnMgY2FyZF9fYWN0aW9ucy0tY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwicHJpbWFyeVwiIG5hdmlnYXRlPVwiL1wiIGxhYmVsPXtfXygnRXhwbG9yZSBuZXcgY29udGVudCcpfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihGaWxlTGlzdERvd25sb2FkZWQpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQWxCQTtBQW9CQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/fileListDownloaded/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/fileListPublished/index.js": -/*!*********************************************!*\ - !*** ../ui/page/fileListPublished/index.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/publish */ \"../ui/redux/actions/publish.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/page/fileListPublished/view.jsx\");\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\n\nvar select = function select(state, props) {\n var search = props.location.search;\n var urlParams = new URLSearchParams(search);\n var page = Number(urlParams.get('page')) || 1;\n return {\n page: page,\n urls: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMyStreamUrlsForPage\"])(page)(state),\n urlTotal: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyStreamUrlsCount\"])(state),\n fetching: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectIsFetchingClaimListMine\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n checkPendingPublishes: function checkPendingPublishes() {\n return dispatch(Object(redux_actions_publish__WEBPACK_IMPORTED_MODULE_2__[\"doCheckPendingPublishesApp\"])());\n },\n fetchClaimListMine: function fetchClaimListMine() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchClaimListMine\"])());\n },\n clearPublish: function clearPublish() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doClearPublish\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_4__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlTGlzdFB1Ymxpc2hlZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2ZpbGVMaXN0UHVibGlzaGVkL2luZGV4LmpzP2JiODciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIHNlbGVjdElzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lLFxuICBtYWtlU2VsZWN0TXlTdHJlYW1VcmxzRm9yUGFnZSxcbiAgc2VsZWN0TXlTdHJlYW1VcmxzQ291bnQsXG4gIGRvQ2xlYXJQdWJsaXNoLFxuICBkb0ZldGNoQ2xhaW1MaXN0TWluZSxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0NoZWNrUGVuZGluZ1B1Ymxpc2hlc0FwcCB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvcHVibGlzaCc7XG5pbXBvcnQgRmlsZUxpc3RQdWJsaXNoZWQgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoIH0gPSBwcm9wcy5sb2NhdGlvbjtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xuICBjb25zdCBwYWdlID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ3BhZ2UnKSkgfHwgMTtcbiAgcmV0dXJuIHtcbiAgICBwYWdlLFxuICAgIHVybHM6IG1ha2VTZWxlY3RNeVN0cmVhbVVybHNGb3JQYWdlKHBhZ2UpKHN0YXRlKSxcbiAgICB1cmxUb3RhbDogc2VsZWN0TXlTdHJlYW1VcmxzQ291bnQoc3RhdGUpLFxuICAgIGZldGNoaW5nOiBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZShzdGF0ZSksXG4gIH07XG59O1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHtcbiAgY2hlY2tQZW5kaW5nUHVibGlzaGVzOiAoKSA9PiBkaXNwYXRjaChkb0NoZWNrUGVuZGluZ1B1Ymxpc2hlc0FwcCgpKSxcbiAgZmV0Y2hDbGFpbUxpc3RNaW5lOiAoKSA9PiBkaXNwYXRjaChkb0ZldGNoQ2xhaW1MaXN0TWluZSgpKSxcbiAgY2xlYXJQdWJsaXNoOiAoKSA9PiBkaXNwYXRjaChkb0NsZWFyUHVibGlzaCgpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoRmlsZUxpc3RQdWJsaXNoZWQpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSkE7QUFDQTtBQVdBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUFBO0FBQ0E7QUFLQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/fileListPublished/index.js\n"); - -/***/ }), - -/***/ "../ui/page/fileListPublished/view.jsx": -/*!*********************************************!*\ - !*** ../ui/page/fileListPublished/view.jsx ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_common_paginate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/paginate */ \"../ui/component/common/paginate.jsx\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var component_webUploadList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/webUploadList */ \"../ui/component/webUploadList/index.js\");\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\n\n\n\n\n\n\n\n\n\nfunction FileListPublished(props) {\n var checkPendingPublishes = props.checkPendingPublishes,\n clearPublish = props.clearPublish,\n fetchClaimListMine = props.fetchClaimListMine,\n fetching = props.fetching,\n urls = props.urls,\n urlTotal = props.urlTotal;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n checkPendingPublishes();\n fetchClaimListMine();\n }, [checkPendingPublishes, fetchClaimListMine]);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_webUploadList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null), urls && Boolean(urls.length) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n header: __('Your Publishes'),\n loading: fetching,\n persistedStorageKey: \"claim-list-published\",\n uris: urls,\n headerAltControls: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n label: __('New Publish'),\n navigate: \"/$/publish\",\n onClick: function onClick() {\n return clearPublish();\n }\n })\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_paginate__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n totalPages: Math.ceil(Number(urlTotal) / Number(constants_claim__WEBPACK_IMPORTED_MODULE_5__[\"PAGE_SIZE\"])),\n loading: fetching\n })), !(urls && urls.length) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, !fetching ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \" section--small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"section__title--large\"\n }, __('Nothing published to LBRY yet.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/publish\",\n label: __('Publish something new'),\n onClick: function onClick() {\n return clearPublish();\n }\n })))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \" section--small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"section__title--small\"\n }, __('Checking your publishes'), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_spinner__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n type: \"small\"\n }))))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FileListPublished);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9maWxlTGlzdFB1Ymxpc2hlZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2ZpbGVMaXN0UHVibGlzaGVkL3ZpZXcuanN4PzBiNGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IENsYWltTGlzdCBmcm9tICdjb21wb25lbnQvY2xhaW1MaXN0JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBQYWdpbmF0ZSBmcm9tICdjb21wb25lbnQvY29tbW9uL3BhZ2luYXRlJztcbmltcG9ydCB7IFBBR0VfU0laRSB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQgV2ViVXBsb2FkTGlzdCBmcm9tICdjb21wb25lbnQvd2ViVXBsb2FkTGlzdCc7XG5pbXBvcnQgU3Bpbm5lciBmcm9tICdjb21wb25lbnQvc3Bpbm5lcic7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoZWNrUGVuZGluZ1B1Ymxpc2hlczogKCkgPT4gdm9pZCxcbiAgY2xlYXJQdWJsaXNoOiAoKSA9PiB2b2lkLFxuICBmZXRjaENsYWltTGlzdE1pbmU6ICgpID0+IHZvaWQsXG4gIGZldGNoaW5nOiBib29sZWFuLFxuICB1cmxzOiBBcnJheTxzdHJpbmc+LFxuICB1cmxUb3RhbDogP251bWJlcixcbiAgaGlzdG9yeTogeyByZXBsYWNlOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBwYWdlOiBudW1iZXIsXG59O1xuXG5mdW5jdGlvbiBGaWxlTGlzdFB1Ymxpc2hlZChwcm9wczogUHJvcHMpIHtcbiAgY29uc3QgeyBjaGVja1BlbmRpbmdQdWJsaXNoZXMsIGNsZWFyUHVibGlzaCwgZmV0Y2hDbGFpbUxpc3RNaW5lLCBmZXRjaGluZywgdXJscywgdXJsVG90YWwgfSA9IHByb3BzO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNoZWNrUGVuZGluZ1B1Ymxpc2hlcygpO1xuICAgIGZldGNoQ2xhaW1MaXN0TWluZSgpO1xuICB9LCBbY2hlY2tQZW5kaW5nUHVibGlzaGVzLCBmZXRjaENsYWltTGlzdE1pbmVdKTtcblxuICByZXR1cm4gKFxuICAgIDxQYWdlPlxuICAgICAgPFdlYlVwbG9hZExpc3QgLz5cbiAgICAgIHt1cmxzICYmIEJvb2xlYW4odXJscy5sZW5ndGgpICYmIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxDbGFpbUxpc3RcbiAgICAgICAgICAgIGhlYWRlcj17X18oJ1lvdXIgUHVibGlzaGVzJyl9XG4gICAgICAgICAgICBsb2FkaW5nPXtmZXRjaGluZ31cbiAgICAgICAgICAgIHBlcnNpc3RlZFN0b3JhZ2VLZXk9XCJjbGFpbS1saXN0LXB1Ymxpc2hlZFwiXG4gICAgICAgICAgICB1cmlzPXt1cmxzfVxuICAgICAgICAgICAgaGVhZGVyQWx0Q29udHJvbHM9e1xuICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ05ldyBQdWJsaXNoJyl9IG5hdmlnYXRlPVwiLyQvcHVibGlzaFwiIG9uQ2xpY2s9eygpID0+IGNsZWFyUHVibGlzaCgpfSAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBhZ2luYXRlIHRvdGFsUGFnZXM9e01hdGguY2VpbChOdW1iZXIodXJsVG90YWwpIC8gTnVtYmVyKFBBR0VfU0laRSkpfSBsb2FkaW5nPXtmZXRjaGluZ30gLz5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG4gICAgICB7ISh1cmxzICYmIHVybHMubGVuZ3RoKSAmJiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7IWZldGNoaW5nID8gKFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibWFpbi0tZW1wdHlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCIgc2VjdGlvbi0tc21hbGxcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwic2VjdGlvbl9fdGl0bGUtLWxhcmdlXCI+e19fKCdOb3RoaW5nIHB1Ymxpc2hlZCB0byBMQlJZIHlldC4nKX08L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGU9XCIvJC9wdWJsaXNoXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdQdWJsaXNoIHNvbWV0aGluZyBuZXcnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xlYXJQdWJsaXNoKCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibWFpbi0tZW1wdHlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCIgc2VjdGlvbi0tc21hbGxcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwic2VjdGlvbl9fdGl0bGUtLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICB7X18oJ0NoZWNraW5nIHlvdXIgcHVibGlzaGVzJyl9XG4gICAgICAgICAgICAgICAgICA8U3Bpbm5lciB0eXBlPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUxpc3RQdWJsaXNoZWQ7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTkE7QUFTQTtBQUFBO0FBQUE7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSkE7QUFVQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBU0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/fileListPublished/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/fourOhFour/index.js": -/*!**************************************!*\ - !*** ../ui/page/fourOhFour/index.js ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/fourOhFour/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9mb3VyT2hGb3VyL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvZm91ck9oRm91ci9pbmRleC5qcz8xYmM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgRm91ck9oRm91clBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHt9KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBudWxsXG4pKEZvdXJPaEZvdXJQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/fourOhFour/index.js\n"); - -/***/ }), - -/***/ "../ui/page/fourOhFour/view.jsx": -/*!**************************************!*\ - !*** ../ui/page/fourOhFour/view.jsx ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n\n\n\n\nvar FourOhFourPage = function FourOhFourPage() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n notcontained: true\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"main main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n type: \"sad\",\n title: __('404'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Page Not Found'))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Four-Oh-Four-Oh-Four-Oh-Four! Four-Oh-Four!')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Four-Oh-Four, Oh, Four...')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Four-Oh-Four-Oh-Four-Oh-Four, Oh-Four, Oh-Four...'))));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FourOhFourPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9mb3VyT2hGb3VyL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvZm91ck9oRm91ci92aWV3LmpzeD9kY2I4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZSBmcm9tICdjb21wb25lbnQvcGFnZSc7XG5pbXBvcnQgWXJibCBmcm9tICdjb21wb25lbnQveXJibCc7XG5cbmNvbnN0IEZvdXJPaEZvdXJQYWdlID0gKCkgPT4gKFxuICA8UGFnZSBub3Rjb250YWluZWQ+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJtYWluIG1haW4tLWVtcHR5XCI+XG4gICAgICA8WXJibCB0eXBlPVwic2FkXCIgdGl0bGU9e19fKCc0MDQnKX0gc3VidGl0bGU9ezxwPntfXygnUGFnZSBOb3QgRm91bmQnKX08L3A+fSAvPlxuICAgICAgPHA+e19fKCdGb3VyLU9oLUZvdXItT2gtRm91ci1PaC1Gb3VyISBGb3VyLU9oLUZvdXIhJyl9PC9wPlxuICAgICAgPHA+e19fKCdGb3VyLU9oLUZvdXIsIE9oLCBGb3VyLi4uJyl9PC9wPlxuICAgICAgPHA+e19fKCdGb3VyLU9oLUZvdXItT2gtRm91ci1PaC1Gb3VyLCBPaC1Gb3VyLCBPaC1Gb3VyLi4uJyl9PC9wPlxuICAgIDwvZGl2PlxuICA8L1BhZ2U+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBGb3VyT2hGb3VyUGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUNBO0FBVUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/fourOhFour/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/help/index.js": -/*!********************************!*\ - !*** ../ui/page/help/index.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/help/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state),\n accessToken: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectAccessToken\"])(state),\n deamonSettings: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectDaemonSettings\"])(state)\n };\n};\n\nvar perform = function perform(dispatch, ownProps) {\n return {\n doAuth: function doAuth() {\n return ownProps.history.push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=/$/\").concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"]));\n },\n fetchAccessToken: function fetchAccessToken() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doFetchAccessToken\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9oZWxwL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaGVscC9pbmRleC5qcz81Y2U0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9GZXRjaEFjY2Vzc1Rva2VuLCBzZWxlY3RBY2Nlc3NUb2tlbiwgc2VsZWN0VXNlciB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgc2VsZWN0RGFlbW9uU2V0dGluZ3MgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IEhlbHBQYWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxuICBhY2Nlc3NUb2tlbjogc2VsZWN0QWNjZXNzVG9rZW4oc3RhdGUpLFxuICBkZWFtb25TZXR0aW5nczogc2VsZWN0RGFlbW9uU2V0dGluZ3Moc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSAoZGlzcGF0Y2gsIG93blByb3BzKSA9PiAoe1xuICBkb0F1dGg6ICgpID0+IG93blByb3BzLmhpc3RvcnkucHVzaChgLyQvJHtQQUdFUy5BVVRIfT9yZWRpcmVjdD0vJC8ke1BBR0VTLkhFTFB9YCksXG4gIGZldGNoQWNjZXNzVG9rZW46ICgpID0+IGRpc3BhdGNoKGRvRmV0Y2hBY2Nlc3NUb2tlbigpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoSGVscFBhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/help/index.js\n"); - -/***/ }), - -/***/ "../ui/page/help/view.jsx": -/*!********************************!*\ - !*** ../ui/page/help/view.jsx ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var native__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! native */ \"../ui/native.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n} // @TODO: Customize advice based on OS\n\n\n\n\n\n\n\n\n\n\n\nvar HelpPage = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(HelpPage, _React$PureComponent);\n\n function HelpPage(props) {\n var _this;\n\n _classCallCheck(this, HelpPage);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(HelpPage).call(this, props));\n _this.state = {\n versionInfo: null,\n lbryId: null,\n uiVersion: null,\n upgradeAvailable: null,\n accessTokenHidden: true\n };\n _assertThisInitialized(_this).showAccessToken = _this.showAccessToken.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).openLogFile = _this.openLogFile.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(HelpPage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"Lbry\"].version().then(function (info) {\n _this2.setState({\n versionInfo: info\n });\n });\n lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"Lbry\"].status().then(function (info) {\n _this2.setState({\n lbryId: info.installation_id\n });\n });\n }\n }, {\n key: \"showAccessToken\",\n value: function showAccessToken() {\n this.setState({\n accessTokenHidden: false\n });\n }\n }, {\n key: \"openLogFile\",\n value: function openLogFile(userHomeDirectory) {\n var logFileName = 'lbrynet.log';\n var os = this.state.versionInfo.os_system;\n\n if (os === 'Darwin' || os === 'Linux') {\n shell.openItem(\"\".concat(userHomeDirectory, \"/\").concat(logFileName));\n } else {\n shell.openItem(\"\".concat(userHomeDirectory, \"\\\\\").concat(logFileName));\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var ver;\n var osName;\n var platform;\n var newVerLink;\n var _this$props = this.props,\n accessToken = _this$props.accessToken,\n doAuth = _this$props.doAuth,\n user = _this$props.user,\n deamonSettings = _this$props.deamonSettings;\n var dataDirectory = deamonSettings.data_dir;\n\n if (this.state.versionInfo) {\n ver = this.state.versionInfo;\n\n if (ver.os_system === 'Darwin') {\n osName = parseInt(ver.os_release.match(/^\\d+/), 10) < 16 ? 'Mac OS X' : 'Mac OS';\n platform = \"\".concat(osName, \" \").concat(ver.os_release);\n newVerLink = 'https://lbry.com/get/lbry.dmg';\n } else if (process.env.APPIMAGE !== undefined) {\n platform = \"Linux (AppImage)\";\n newVerLink = 'https://lbry.com/get/lbry.AppImage';\n } else if (ver.os_system === 'Linux') {\n platform = \"Linux (\".concat(ver.platform, \")\");\n newVerLink = 'https://lbry.com/get/lbry.deb';\n } else {\n platform = \"Windows (\".concat(ver.platform, \")\");\n newVerLink = 'https://lbry.com/get/lbry.msi';\n }\n } else {\n ver = null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"card-stack\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Read the FAQ'),\n subtitle: __('Our FAQ answers many common questions.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n href: \"https://lbry.com/faq/lbry-basics\",\n label: __('Read the App Basics FAQ'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"],\n button: \"secondary\"\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n href: \"https://lbry.com/faq\",\n label: __('View all LBRY FAQs'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"HELP\"],\n button: \"secondary\"\n }))\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Find Assistance'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n tokens: {\n channel: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"strong\", null, \"#help\")\n }\n }, \"Live help is available most hours in the %channel% channel of our Discord chat room. Or you can always email us at help@lbry.com.\"),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"secondary\",\n label: __('Join Our Chat'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"CHAT\"],\n href: \"https://chat.lbry.com\"\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"secondary\",\n label: __('Email Us'),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"WEB\"],\n href: \"mailto:help@lbry.com\"\n }))\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Report a Bug or Suggest a New Feature'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, __('Did you find something wrong? Think LBRY could add something useful and cool?'), ' ', react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Learn more'),\n href: \"https://lbry.com/faq/support\"\n }), \".\"),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n navigate: \"/$/report\",\n label: __('Submit Feedback'),\n button: \"secondary\"\n }))\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('About'),\n subtitle: this.state.upgradeAvailable !== null && this.state.upgradeAvailable ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"span\", null, __('A newer version of LBRY is available.'), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n href: newVerLink,\n label: __('Download now!')\n })) : null,\n isBodyTable: true,\n body: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"table__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"table\", {\n className: \"table table--stretch\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tbody\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('App')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, this.state.uiVersion)), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Daemon (lbrynet)')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, ver ? ver.lbrynet_version : __('Loading...'))), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Connected Email')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, user && user.primary_email ? react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, user.primary_email, ' ', react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/list/edit/\".concat(accessToken),\n label: __('Update mailing preferences')\n })) : react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"span\", {\n className: \"empty\"\n }, __('none'), \" \"), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n onClick: function onClick() {\n return doAuth();\n },\n label: __('set email')\n })))), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Reward Eligible')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, user && user.is_reward_approved ? __('Yes') : __('No'))), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Platform')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, platform)), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Installation ID')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, this.state.lbryId)), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"tr\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, __('Access Token')), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"td\", null, this.state.accessTokenHidden && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('View'),\n onClick: this.showAccessToken\n }), !this.state.accessTokenHidden && accessToken && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"p\", null, accessToken), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", {\n className: \"help--warning\"\n }, __('This is equivalent to a password. Do not post or share this.'))))))))\n }));\n }\n }]);\n\n return HelpPage;\n}(react__WEBPACK_IMPORTED_MODULE_1__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (HelpPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9oZWxwL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaGVscC92aWV3LmpzeD9hYzE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBUT0RPOiBDdXN0b21pemUgYWR2aWNlIGJhc2VkIG9uIE9TXG4vLyBAZmxvd1xuaW1wb3J0ICogYXMgaWNvbnMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExicnkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBOYXRpdmUgZnJvbSAnbmF0aXZlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgUGFnZSBmcm9tICdjb21wb25lbnQvcGFnZSc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbnR5cGUgRGVhbW9uU2V0dGluZ3MgPSB7XG4gIGRhdGFfZGlyOiBzdHJpbmcgfCBhbnksXG59O1xuXG50eXBlIFByb3BzID0ge1xuICBkZWFtb25TZXR0aW5nczogRGVhbW9uU2V0dGluZ3MsXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gIGZldGNoQWNjZXNzVG9rZW46ICgpID0+IHZvaWQsXG4gIGRvQXV0aDogKCkgPT4gdm9pZCxcbiAgdXNlcjogYW55LFxufTtcblxudHlwZSBWZXJzaW9uSW5mbyA9IHtcbiAgb3Nfc3lzdGVtOiBzdHJpbmcsXG4gIG9zX3JlbGVhc2U6IHN0cmluZyxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgbGJyeW5ldF92ZXJzaW9uOiBzdHJpbmcsXG59O1xuXG50eXBlIFN0YXRlID0ge1xuICB2ZXJzaW9uSW5mbzogVmVyc2lvbkluZm8gfCBhbnksXG4gIGxicnlJZDogU3RyaW5nIHwgYW55LFxuICB1aVZlcnNpb246ID9zdHJpbmcsXG4gIHVwZ3JhZGVBdmFpbGFibGU6ID9ib29sZWFuLFxuICBhY2Nlc3NUb2tlbkhpZGRlbjogP2Jvb2xlYW4sXG59O1xuXG5jbGFzcyBIZWxwUGFnZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHMsIFN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2ZXJzaW9uSW5mbzogbnVsbCxcbiAgICAgIGxicnlJZDogbnVsbCxcbiAgICAgIHVpVmVyc2lvbjogbnVsbCxcbiAgICAgIHVwZ3JhZGVBdmFpbGFibGU6IG51bGwsXG4gICAgICBhY2Nlc3NUb2tlbkhpZGRlbjogdHJ1ZSxcbiAgICB9O1xuXG4gICAgKHRoaXM6IGFueSkuc2hvd0FjY2Vzc1Rva2VuID0gdGhpcy5zaG93QWNjZXNzVG9rZW4uYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vcGVuTG9nRmlsZSA9IHRoaXMub3BlbkxvZ0ZpbGUuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG4gICAgTGJyeS52ZXJzaW9uKCkudGhlbihpbmZvID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2ZXJzaW9uSW5mbzogaW5mbyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIExicnkuc3RhdHVzKCkudGhlbihpbmZvID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsYnJ5SWQ6IGluZm8uaW5zdGFsbGF0aW9uX2lkLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93QWNjZXNzVG9rZW4oKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY2Nlc3NUb2tlbkhpZGRlbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBvcGVuTG9nRmlsZSh1c2VySG9tZURpcmVjdG9yeTogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nRmlsZU5hbWUgPSAnbGJyeW5ldC5sb2cnO1xuICAgIGNvbnN0IG9zID0gdGhpcy5zdGF0ZS52ZXJzaW9uSW5mby5vc19zeXN0ZW07XG4gICAgaWYgKG9zID09PSAnRGFyd2luJyB8fCBvcyA9PT0gJ0xpbnV4Jykge1xuICAgICAgc2hlbGwub3Blbkl0ZW0oYCR7dXNlckhvbWVEaXJlY3Rvcnl9LyR7bG9nRmlsZU5hbWV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNoZWxsLm9wZW5JdGVtKGAke3VzZXJIb21lRGlyZWN0b3J5fVxcXFwke2xvZ0ZpbGVOYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQgdmVyO1xuICAgIGxldCBvc05hbWU7XG4gICAgbGV0IHBsYXRmb3JtO1xuICAgIGxldCBuZXdWZXJMaW5rO1xuXG4gICAgY29uc3QgeyBhY2Nlc3NUb2tlbiwgZG9BdXRoLCB1c2VyLCBkZWFtb25TZXR0aW5ncyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGRhdGFfZGlyOiBkYXRhRGlyZWN0b3J5IH0gPSBkZWFtb25TZXR0aW5ncztcblxuICAgIGlmICh0aGlzLnN0YXRlLnZlcnNpb25JbmZvKSB7XG4gICAgICB2ZXIgPSB0aGlzLnN0YXRlLnZlcnNpb25JbmZvO1xuICAgICAgaWYgKHZlci5vc19zeXN0ZW0gPT09ICdEYXJ3aW4nKSB7XG4gICAgICAgIG9zTmFtZSA9IHBhcnNlSW50KHZlci5vc19yZWxlYXNlLm1hdGNoKC9eXFxkKy8pLCAxMCkgPCAxNiA/ICdNYWMgT1MgWCcgOiAnTWFjIE9TJztcblxuICAgICAgICBwbGF0Zm9ybSA9IGAke29zTmFtZX0gJHt2ZXIub3NfcmVsZWFzZX1gO1xuICAgICAgICBuZXdWZXJMaW5rID0gJ2h0dHBzOi8vbGJyeS5jb20vZ2V0L2xicnkuZG1nJztcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuQVBQSU1BR0UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwbGF0Zm9ybSA9IGBMaW51eCAoQXBwSW1hZ2UpYDtcbiAgICAgICAgbmV3VmVyTGluayA9ICdodHRwczovL2xicnkuY29tL2dldC9sYnJ5LkFwcEltYWdlJztcbiAgICAgIH0gZWxzZSBpZiAodmVyLm9zX3N5c3RlbSA9PT0gJ0xpbnV4Jykge1xuICAgICAgICBwbGF0Zm9ybSA9IGBMaW51eCAoJHt2ZXIucGxhdGZvcm19KWA7XG4gICAgICAgIG5ld1ZlckxpbmsgPSAnaHR0cHM6Ly9sYnJ5LmNvbS9nZXQvbGJyeS5kZWInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhdGZvcm0gPSBgV2luZG93cyAoJHt2ZXIucGxhdGZvcm19KWA7XG4gICAgICAgIG5ld1ZlckxpbmsgPSAnaHR0cHM6Ly9sYnJ5LmNvbS9nZXQvbGJyeS5tc2knO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnZSBjbGFzc05hbWU9XCJjYXJkLXN0YWNrXCI+XG4gICAgICAgIDxDYXJkXG4gICAgICAgICAgdGl0bGU9e19fKCdSZWFkIHRoZSBGQVEnKX1cbiAgICAgICAgICBzdWJ0aXRsZT17X18oJ091ciBGQVEgYW5zd2VycyBtYW55IGNvbW1vbiBxdWVzdGlvbnMuJyl9XG4gICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9sYnJ5LWJhc2ljc1wiXG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKCdSZWFkIHRoZSBBcHAgQmFzaWNzIEZBUScpfVxuICAgICAgICAgICAgICAgIGljb249e2ljb25zLkhFTFB9XG4gICAgICAgICAgICAgICAgYnV0dG9uPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9e19fKCdWaWV3IGFsbCBMQlJZIEZBUXMnKX1cbiAgICAgICAgICAgICAgICBpY29uPXtpY29ucy5IRUxQfVxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPENhcmRcbiAgICAgICAgICB0aXRsZT17X18oJ0ZpbmQgQXNzaXN0YW5jZScpfVxuICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgIDxJMThuTWVzc2FnZSB0b2tlbnM9e3sgY2hhbm5lbDogPHN0cm9uZz4jaGVscDwvc3Ryb25nPiB9fT5cbiAgICAgICAgICAgICAgTGl2ZSBoZWxwIGlzIGF2YWlsYWJsZSBtb3N0IGhvdXJzIGluIHRoZSAlY2hhbm5lbCUgY2hhbm5lbCBvZiBvdXIgRGlzY29yZCBjaGF0IHJvb20uIE9yIHlvdSBjYW4gYWx3YXlzXG4gICAgICAgICAgICAgIGVtYWlsIHVzIGF0IGhlbHBAbGJyeS5jb20uXG4gICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VjdGlvbl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cInNlY29uZGFyeVwiIGxhYmVsPXtfXygnSm9pbiBPdXIgQ2hhdCcpfSBpY29uPXtpY29ucy5DSEFUfSBocmVmPVwiaHR0cHM6Ly9jaGF0LmxicnkuY29tXCIgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJzZWNvbmRhcnlcIiBsYWJlbD17X18oJ0VtYWlsIFVzJyl9IGljb249e2ljb25zLldFQn0gaHJlZj1cIm1haWx0bzpoZWxwQGxicnkuY29tXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cblxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnUmVwb3J0IGEgQnVnIG9yIFN1Z2dlc3QgYSBOZXcgRmVhdHVyZScpfVxuICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAge19fKCdEaWQgeW91IGZpbmQgc29tZXRoaW5nIHdyb25nPyBUaGluayBMQlJZIGNvdWxkIGFkZCBzb21ldGhpbmcgdXNlZnVsIGFuZCBjb29sPycpfXsnICd9XG4gICAgICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnTGVhcm4gbW9yZScpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvc3VwcG9ydFwiIC8+LlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBuYXZpZ2F0ZT1cIi8kL3JlcG9ydFwiIGxhYmVsPXtfXygnU3VibWl0IEZlZWRiYWNrJyl9IGJ1dHRvbj1cInNlY29uZGFyeVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG5cbiAgICAgICAge31cblxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnQWJvdXQnKX1cbiAgICAgICAgICBzdWJ0aXRsZT17XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnVwZ3JhZGVBdmFpbGFibGUgIT09IG51bGwgJiYgdGhpcy5zdGF0ZS51cGdyYWRlQXZhaWxhYmxlID8gKFxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7X18oJ0EgbmV3ZXIgdmVyc2lvbiBvZiBMQlJZIGlzIGF2YWlsYWJsZS4nKX1cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPXtuZXdWZXJMaW5rfSBsYWJlbD17X18oJ0Rvd25sb2FkIG5vdyEnKX0gLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNCb2R5VGFibGVcbiAgICAgICAgICBib2R5PXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFibGVfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInRhYmxlIHRhYmxlLS1zdHJldGNoXCI+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdBcHAnKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3RoaXMuc3RhdGUudWlWZXJzaW9ufTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdEYWVtb24gKGxicnluZXQpJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt2ZXIgPyB2ZXIubGJyeW5ldF92ZXJzaW9uIDogX18oJ0xvYWRpbmcuLi4nKX08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPntfXygnQ29ubmVjdGVkIEVtYWlsJyl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIHt1c2VyICYmIHVzZXIucHJpbWFyeV9lbWFpbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3VzZXIucHJpbWFyeV9lbWFpbH17JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YGh0dHBzOi8vbGJyeS5jb20vbGlzdC9lZGl0LyR7YWNjZXNzVG9rZW59YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1VwZGF0ZSBtYWlsaW5nIHByZWZlcmVuY2VzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImVtcHR5XCI+e19fKCdub25lJyl9IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgb25DbGljaz17KCkgPT4gZG9BdXRoKCl9IGxhYmVsPXtfXygnc2V0IGVtYWlsJyl9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdSZXdhcmQgRWxpZ2libGUnKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3VzZXIgJiYgdXNlci5pc19yZXdhcmRfYXBwcm92ZWQgPyBfXygnWWVzJykgOiBfXygnTm8nKX08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPntfXygnUGxhdGZvcm0nKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3BsYXRmb3JtfTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdJbnN0YWxsYXRpb24gSUQnKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3RoaXMuc3RhdGUubGJyeUlkfTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e19fKCdBY2Nlc3MgVG9rZW4nKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYWNjZXNzVG9rZW5IaWRkZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdWaWV3Jyl9IG9uQ2xpY2s9e3RoaXMuc2hvd0FjY2Vzc1Rva2VufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgeyF0aGlzLnN0YXRlLmFjY2Vzc1Rva2VuSGlkZGVuICYmIGFjY2Vzc1Rva2VuICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnthY2Nlc3NUb2tlbn08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVscC0td2FybmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfXygnVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgcGFzc3dvcmQuIERvIG5vdCBwb3N0IG9yIHNoYXJlIHRoaXMuJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlbHBQYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNEJBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFaQTtBQWFBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7OztBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBaEJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQVhBO0FBc0JBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWEE7QUFpQkE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFWQTtBQWtCQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFpQkE7QUFDQTtBQUNBO0FBSEE7QUFRQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFBQTtBQWhFQTtBQThFQTs7OztBQWxOQTtBQUNBO0FBb05BO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/help/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/home/index.js": -/*!********************************!*\ - !*** ../ui/page/home/index.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/home/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"selectSubscriptions\"])(state),\n authenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9ob21lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaG9tZS9pbmRleC5qcz9kMzIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGb2xsb3dlZFRhZ3MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBzZWxlY3RTdWJzY3JpcHRpb25zIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IERpc2NvdmVyUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBmb2xsb3dlZFRhZ3M6IHNlbGVjdEZvbGxvd2VkVGFncyhzdGF0ZSksXG4gIHN1YnNjcmliZWRDaGFubmVsczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG4gIGF1dGhlbnRpY2F0ZWQ6IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsKHN0YXRlKSxcbn0pO1xuXG5jb25zdCBwZXJmb3JtID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShEaXNjb3ZlclBhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/home/index.js\n"); - -/***/ }), - -/***/ "../ui/page/home/view.jsx": -/*!********************************!*\ - !*** ../ui/page/home/view.jsx ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimTilesDiscover__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/claimTilesDiscover */ \"../ui/component/claimTilesDiscover/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var util_string__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! util/string */ \"../ui/util/string.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction HomePage(props) {\n var followedTags = props.followedTags,\n subscribedChannels = props.subscribedChannels,\n authenticated = props.authenticated;\n var showPersonalizedChannels = (authenticated || !true) && subscribedChannels && subscribedChannels.length > 0;\n var showPersonalizedTags = (authenticated || !true) && followedTags && followedTags.length > 0;\n var showIndividualTags = showPersonalizedTags && followedTags.length < 5;\n var rowData = []; // if you are following channels, always show that first\n\n if (showPersonalizedChannels) {\n var releaseTime = \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_4___default()().subtract(1, 'year').startOf('week').unix())); // Warning - hack below\n // If users are following more than 20 channels or tags, limit results to stuff less than 6 months old\n // This helps with timeout issues for users that are following a ton of stuff\n // https://github.com/lbryio/lbry-sdk/issues/2420\n\n if (subscribedChannels.length > 20) {\n releaseTime = \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_4___default()().subtract(6, 'months').startOf('week').unix()));\n }\n\n rowData.push({\n title: 'Recent From Following',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"CHANNELS_FOLLOWING\"]),\n options: {\n orderBy: ['release_time'],\n releaseTime: releaseTime,\n pageSize: subscribedChannels.length > 3 ? 8 : 4,\n channelIds: subscribedChannels.map(function (subscription) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_10__[\"parseURI\"])(subscription.uri),\n channelClaimId = _parseURI.channelClaimId;\n\n return channelClaimId;\n })\n }\n });\n }\n\n if (showPersonalizedTags && !showIndividualTags) {\n rowData.push({\n title: 'Trending For Your Tags',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"TAGS_FOLLOWING\"]),\n options: {\n tags: followedTags.map(function (tag) {\n return tag.name;\n }),\n claimType: ['stream']\n }\n });\n }\n\n if (showPersonalizedTags && showIndividualTags) {\n followedTags.forEach(function (tag) {\n rowData.push({\n title: \"Trending for #\".concat(Object(util_string__WEBPACK_IMPORTED_MODULE_11__[\"toCapitalCase\"])(tag.name)),\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?t=\").concat(tag.name),\n options: {\n pageSize: 4,\n tags: [tag.name],\n claimType: ['stream']\n }\n });\n });\n }\n\n rowData.push({\n title: 'Top Content from Today',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_TOP\"], \"&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_DAY\"]),\n options: {\n pageSize: showPersonalizedChannels || showPersonalizedTags ? 4 : 8,\n orderBy: ['effective_amount'],\n claimType: ['stream'],\n releaseTime: \">\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_4___default()().subtract(1, 'day').startOf('day').unix()))\n }\n });\n rowData.push({\n title: 'Trending On LBRY',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"]),\n options: {\n pageSize: showPersonalizedChannels || showPersonalizedTags ? 4 : 8\n }\n });\n\n if (!showPersonalizedChannels) {\n rowData.push({\n title: 'Top Channels On LBRY',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?claim_type=channel&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_TOP\"], \"&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_ALL\"]),\n options: {\n orderBy: ['effective_amount'],\n claimType: ['channel']\n }\n });\n }\n\n rowData.push({\n title: 'Trending Classics',\n link: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"DISCOVER\"], \"?\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"ORDER_BY_TRENDING\"], \"&\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_KEY\"], \"=\").concat(constants_claim_search__WEBPACK_IMPORTED_MODULE_2__[\"FRESH_WEEK\"]),\n options: {\n pageSize: 4,\n claimType: ['stream'],\n releaseTime: \"<\".concat(Math.floor(moment__WEBPACK_IMPORTED_MODULE_4___default()().subtract(6, 'month').startOf('day').unix()))\n }\n }\n /* the cagematch will return in some form! - Jeremy\n {\n title: '#HomePageCageMatch',\n link: `/$/${PAGES.DISCOVER}?t=homepagecagematch&${CS.ORDER_BY_KEY}=${CS.ORDER_BY_TOP}&${CS.FRESH_KEY}=${\n CS.FRESH_ALL\n }`,\n help: (\n <div className=\"claim-grid__help\">\n <Icon\n icon={ICONS.HELP}\n tooltip\n customTooltipText={__(\n 'This is an experiment, and may be removed in the future. Publish something with the #homepagecagematch tag to battle for the top spot on the home page!'\n )}\n />\n </div>\n ),\n options: {\n tags: ['homepagecagematch'],\n orderBy: ['effective_amount'],\n timestamp: `>${Math.floor(\n moment()\n .subtract(1, 'week')\n .startOf('day')\n .unix()\n )}`,\n },\n } */\n );\n rowData.push({\n title: 'Latest From @lbrycast',\n link: \"/@lbrycast:4\",\n options: {\n orderBy: ['release_time'],\n pageSize: 4,\n channelIds: ['4c29f8b013adea4d5cca1861fb2161d5089613ea']\n }\n });\n rowData.push({\n title: 'Latest From @lbry',\n link: \"/@lbry:3f\",\n options: {\n orderBy: ['release_time'],\n pageSize: 4,\n channelIds: ['3fda836a92faaceedfe398225fb9b2ee2ed1f01a']\n }\n });\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, (authenticated || !true) && !subscribedChannels.length && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n className: \"notice-message\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"h1\", {\n className: \"section__title\"\n }, __('LBRY Works Better If You Are Following Channels')), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n tokens: {\n discover_channels_link: react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"CHANNELS_FOLLOWING_DISCOVER\"]),\n label: __('Find new channels to follow')\n })\n }\n }, \"You aren't currently following any channels. %discover_channels_link%.\"))), rowData.map(function (_ref) {\n var title = _ref.title,\n link = _ref.link,\n help = _ref.help,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options;\n return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"div\", {\n key: title,\n className: \"claim-grid__wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"h1\", {\n className: \"section__actions\"\n }, link ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"claim-grid__title\",\n button: \"link\",\n navigate: link,\n iconRight: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"ARROW_RIGHT\"],\n label: title\n }) : react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(\"span\", {\n className: \"claim-grid__title\"\n }, title), help), react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(component_claimTilesDiscover__WEBPACK_IMPORTED_MODULE_7__[\"default\"], options));\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (HomePage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9ob21lL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaG9tZS92aWV3LmpzeD82YjNhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBJQ09OUyBmcm9tICdjb25zdGFudHMvaWNvbnMnO1xuaW1wb3J0ICogYXMgUEFHRVMgZnJvbSAnY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCAqIGFzIENTIGZyb20gJ2NvbnN0YW50cy9jbGFpbV9zZWFyY2gnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ2xhaW1UaWxlc0Rpc2NvdmVyIGZyb20gJ2NvbXBvbmVudC9jbGFpbVRpbGVzRGlzY292ZXInO1xuaW1wb3J0IEljb24gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9pY29uJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IHsgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHRvQ2FwaXRhbENhc2UgfSBmcm9tICd1dGlsL3N0cmluZyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4sXG4gIGZvbGxvd2VkVGFnczogQXJyYXk8VGFnPixcbiAgc3Vic2NyaWJlZENoYW5uZWxzOiBBcnJheTxTdWJzY3JpcHRpb24+LFxufTtcblxudHlwZSBSb3dEYXRhSXRlbSA9IHtcbiAgdGl0bGU6IHN0cmluZyxcbiAgbGluaz86IHN0cmluZyxcbiAgaGVscD86IGFueSxcbiAgb3B0aW9ucz86IHt9LFxufTtcblxuZnVuY3Rpb24gSG9tZVBhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZm9sbG93ZWRUYWdzLCBzdWJzY3JpYmVkQ2hhbm5lbHMsIGF1dGhlbnRpY2F0ZWQgfSA9IHByb3BzO1xuICBjb25zdCBzaG93UGVyc29uYWxpemVkQ2hhbm5lbHMgPSAoYXV0aGVudGljYXRlZCB8fCAhSVNfV0VCKSAmJiBzdWJzY3JpYmVkQ2hhbm5lbHMgJiYgc3Vic2NyaWJlZENoYW5uZWxzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IHNob3dQZXJzb25hbGl6ZWRUYWdzID0gKGF1dGhlbnRpY2F0ZWQgfHwgIUlTX1dFQikgJiYgZm9sbG93ZWRUYWdzICYmIGZvbGxvd2VkVGFncy5sZW5ndGggPiAwO1xuICBjb25zdCBzaG93SW5kaXZpZHVhbFRhZ3MgPSBzaG93UGVyc29uYWxpemVkVGFncyAmJiBmb2xsb3dlZFRhZ3MubGVuZ3RoIDwgNTtcbiAgbGV0IHJvd0RhdGE6IEFycmF5PFJvd0RhdGFJdGVtPiA9IFtdO1xuXG4gIC8vIGlmIHlvdSBhcmUgZm9sbG93aW5nIGNoYW5uZWxzLCBhbHdheXMgc2hvdyB0aGF0IGZpcnN0XG4gIGlmIChzaG93UGVyc29uYWxpemVkQ2hhbm5lbHMpIHtcbiAgICBsZXQgcmVsZWFzZVRpbWUgPSBgPiR7TWF0aC5mbG9vcihcbiAgICAgIG1vbWVudCgpXG4gICAgICAgIC5zdWJ0cmFjdCgxLCAneWVhcicpXG4gICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgLnVuaXgoKVxuICAgICl9YDtcblxuICAgIC8vIFdhcm5pbmcgLSBoYWNrIGJlbG93XG4gICAgLy8gSWYgdXNlcnMgYXJlIGZvbGxvd2luZyBtb3JlIHRoYW4gMjAgY2hhbm5lbHMgb3IgdGFncywgbGltaXQgcmVzdWx0cyB0byBzdHVmZiBsZXNzIHRoYW4gNiBtb250aHMgb2xkXG4gICAgLy8gVGhpcyBoZWxwcyB3aXRoIHRpbWVvdXQgaXNzdWVzIGZvciB1c2VycyB0aGF0IGFyZSBmb2xsb3dpbmcgYSB0b24gb2Ygc3R1ZmZcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktc2RrL2lzc3Vlcy8yNDIwXG4gICAgaWYgKHN1YnNjcmliZWRDaGFubmVscy5sZW5ndGggPiAyMCkge1xuICAgICAgcmVsZWFzZVRpbWUgPSBgPiR7TWF0aC5mbG9vcihcbiAgICAgICAgbW9tZW50KClcbiAgICAgICAgICAuc3VidHJhY3QoNiwgJ21vbnRocycpXG4gICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgIC51bml4KClcbiAgICAgICl9YDtcbiAgICB9XG5cbiAgICByb3dEYXRhLnB1c2goe1xuICAgICAgdGl0bGU6ICdSZWNlbnQgRnJvbSBGb2xsb3dpbmcnLFxuICAgICAgbGluazogYC8kLyR7UEFHRVMuQ0hBTk5FTFNfRk9MTE9XSU5HfWAsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG9yZGVyQnk6IFsncmVsZWFzZV90aW1lJ10sXG4gICAgICAgIHJlbGVhc2VUaW1lOiByZWxlYXNlVGltZSxcbiAgICAgICAgcGFnZVNpemU6IHN1YnNjcmliZWRDaGFubmVscy5sZW5ndGggPiAzID8gOCA6IDQsXG4gICAgICAgIGNoYW5uZWxJZHM6IHN1YnNjcmliZWRDaGFubmVscy5tYXAoc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNoYW5uZWxDbGFpbUlkIH0gPSBwYXJzZVVSSShzdWJzY3JpcHRpb24udXJpKTtcbiAgICAgICAgICByZXR1cm4gY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzaG93UGVyc29uYWxpemVkVGFncyAmJiAhc2hvd0luZGl2aWR1YWxUYWdzKSB7XG4gICAgcm93RGF0YS5wdXNoKHtcbiAgICAgIHRpdGxlOiAnVHJlbmRpbmcgRm9yIFlvdXIgVGFncycsXG4gICAgICBsaW5rOiBgLyQvJHtQQUdFUy5UQUdTX0ZPTExPV0lOR31gLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0YWdzOiBmb2xsb3dlZFRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSksXG4gICAgICAgIGNsYWltVHlwZTogWydzdHJlYW0nXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2hvd1BlcnNvbmFsaXplZFRhZ3MgJiYgc2hvd0luZGl2aWR1YWxUYWdzKSB7XG4gICAgZm9sbG93ZWRUYWdzLmZvckVhY2goKHRhZzogVGFnKSA9PiB7XG4gICAgICByb3dEYXRhLnB1c2goe1xuICAgICAgICB0aXRsZTogYFRyZW5kaW5nIGZvciAjJHt0b0NhcGl0YWxDYXNlKHRhZy5uYW1lKX1gLFxuICAgICAgICBsaW5rOiBgLyQvJHtQQUdFUy5ESVNDT1ZFUn0/dD0ke3RhZy5uYW1lfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBwYWdlU2l6ZTogNCxcbiAgICAgICAgICB0YWdzOiBbdGFnLm5hbWVdLFxuICAgICAgICAgIGNsYWltVHlwZTogWydzdHJlYW0nXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcm93RGF0YS5wdXNoKHtcbiAgICB0aXRsZTogJ1RvcCBDb250ZW50IGZyb20gVG9kYXknLFxuICAgIGxpbms6IGAvJC8ke1BBR0VTLkRJU0NPVkVSfT8ke0NTLk9SREVSX0JZX0tFWX09JHtDUy5PUkRFUl9CWV9UT1B9JiR7Q1MuRlJFU0hfS0VZfT0ke0NTLkZSRVNIX0RBWX1gLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhZ2VTaXplOiBzaG93UGVyc29uYWxpemVkQ2hhbm5lbHMgfHwgc2hvd1BlcnNvbmFsaXplZFRhZ3MgPyA0IDogOCxcbiAgICAgIG9yZGVyQnk6IFsnZWZmZWN0aXZlX2Ftb3VudCddLFxuICAgICAgY2xhaW1UeXBlOiBbJ3N0cmVhbSddLFxuICAgICAgcmVsZWFzZVRpbWU6IGA+JHtNYXRoLmZsb29yKFxuICAgICAgICBtb21lbnQoKVxuICAgICAgICAgIC5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgICAgICAgICAuc3RhcnRPZignZGF5JylcbiAgICAgICAgICAudW5peCgpXG4gICAgICApfWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgcm93RGF0YS5wdXNoKHtcbiAgICB0aXRsZTogJ1RyZW5kaW5nIE9uIExCUlknLFxuICAgIGxpbms6IGAvJC8ke1BBR0VTLkRJU0NPVkVSfWAsXG4gICAgb3B0aW9uczoge1xuICAgICAgcGFnZVNpemU6IHNob3dQZXJzb25hbGl6ZWRDaGFubmVscyB8fCBzaG93UGVyc29uYWxpemVkVGFncyA/IDQgOiA4LFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghc2hvd1BlcnNvbmFsaXplZENoYW5uZWxzKSB7XG4gICAgcm93RGF0YS5wdXNoKHtcbiAgICAgIHRpdGxlOiAnVG9wIENoYW5uZWxzIE9uIExCUlknLFxuICAgICAgbGluazogYC8kLyR7UEFHRVMuRElTQ09WRVJ9P2NsYWltX3R5cGU9Y2hhbm5lbCYke0NTLk9SREVSX0JZX0tFWX09JHtDUy5PUkRFUl9CWV9UT1B9JiR7Q1MuRlJFU0hfS0VZfT0ke0NTLkZSRVNIX0FMTH1gLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBvcmRlckJ5OiBbJ2VmZmVjdGl2ZV9hbW91bnQnXSxcbiAgICAgICAgY2xhaW1UeXBlOiBbJ2NoYW5uZWwnXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByb3dEYXRhLnB1c2goXG4gICAge1xuICAgICAgdGl0bGU6ICdUcmVuZGluZyBDbGFzc2ljcycsXG4gICAgICBsaW5rOiBgLyQvJHtQQUdFUy5ESVNDT1ZFUn0/JHtDUy5PUkRFUl9CWV9LRVl9PSR7Q1MuT1JERVJfQllfVFJFTkRJTkd9JiR7Q1MuRlJFU0hfS0VZfT0ke0NTLkZSRVNIX1dFRUt9YCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcGFnZVNpemU6IDQsXG4gICAgICAgIGNsYWltVHlwZTogWydzdHJlYW0nXSxcbiAgICAgICAgcmVsZWFzZVRpbWU6IGA8JHtNYXRoLmZsb29yKFxuICAgICAgICAgIG1vbWVudCgpXG4gICAgICAgICAgICAuc3VidHJhY3QoNiwgJ21vbnRoJylcbiAgICAgICAgICAgIC5zdGFydE9mKCdkYXknKVxuICAgICAgICAgICAgLnVuaXgoKVxuICAgICAgICApfWAsXG4gICAgICB9LFxuICAgIH1cbiAgICAvKiB0aGUgY2FnZW1hdGNoIHdpbGwgcmV0dXJuIGluIHNvbWUgZm9ybSEgLSBKZXJlbXlcbiAge1xuICAgIHRpdGxlOiAnI0hvbWVQYWdlQ2FnZU1hdGNoJyxcbiAgICBsaW5rOiBgLyQvJHtQQUdFUy5ESVNDT1ZFUn0/dD1ob21lcGFnZWNhZ2VtYXRjaCYke0NTLk9SREVSX0JZX0tFWX09JHtDUy5PUkRFUl9CWV9UT1B9JiR7Q1MuRlJFU0hfS0VZfT0ke1xuICAgICAgQ1MuRlJFU0hfQUxMXG4gICAgfWAsXG4gICAgaGVscDogKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1ncmlkX19oZWxwXCI+XG4gICAgICAgIDxJY29uXG4gICAgICAgICAgaWNvbj17SUNPTlMuSEVMUH1cbiAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgY3VzdG9tVG9vbHRpcFRleHQ9e19fKFxuICAgICAgICAgICAgJ1RoaXMgaXMgYW4gZXhwZXJpbWVudCwgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFB1Ymxpc2ggc29tZXRoaW5nIHdpdGggdGhlICNob21lcGFnZWNhZ2VtYXRjaCB0YWcgdG8gYmF0dGxlIGZvciB0aGUgdG9wIHNwb3Qgb24gdGhlIGhvbWUgcGFnZSEnXG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICksXG4gICAgb3B0aW9uczoge1xuICAgICAgdGFnczogWydob21lcGFnZWNhZ2VtYXRjaCddLFxuICAgICAgb3JkZXJCeTogWydlZmZlY3RpdmVfYW1vdW50J10sXG4gICAgICB0aW1lc3RhbXA6IGA+JHtNYXRoLmZsb29yKFxuICAgICAgICBtb21lbnQoKVxuICAgICAgICAgIC5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgICAgICAgLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgICAgLnVuaXgoKVxuICAgICAgKX1gLFxuICAgIH0sXG4gICAgfSAqL1xuICApO1xuXG4gIHJvd0RhdGEucHVzaCh7XG4gICAgdGl0bGU6ICdMYXRlc3QgRnJvbSBAbGJyeWNhc3QnLFxuICAgIGxpbms6IGAvQGxicnljYXN0OjRgLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG9yZGVyQnk6IFsncmVsZWFzZV90aW1lJ10sXG4gICAgICBwYWdlU2l6ZTogNCxcbiAgICAgIGNoYW5uZWxJZHM6IFsnNGMyOWY4YjAxM2FkZWE0ZDVjY2ExODYxZmIyMTYxZDUwODk2MTNlYSddLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJvd0RhdGEucHVzaCh7XG4gICAgdGl0bGU6ICdMYXRlc3QgRnJvbSBAbGJyeScsXG4gICAgbGluazogYC9AbGJyeTozZmAsXG4gICAgb3B0aW9uczoge1xuICAgICAgb3JkZXJCeTogWydyZWxlYXNlX3RpbWUnXSxcbiAgICAgIHBhZ2VTaXplOiA0LFxuICAgICAgY2hhbm5lbElkczogWyczZmRhODM2YTkyZmFhY2VlZGZlMzk4MjI1ZmI5YjJlZTJlZDFmMDFhJ10sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIHsoYXV0aGVudGljYXRlZCB8fCAhSVNfV0VCKSAmJiAhc3Vic2NyaWJlZENoYW5uZWxzLmxlbmd0aCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm90aWNlLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwic2VjdGlvbl9fdGl0bGVcIj57X18oJ0xCUlkgV29ya3MgQmV0dGVyIElmIFlvdSBBcmUgRm9sbG93aW5nIENoYW5uZWxzJyl9PC9oMT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgPEkxOG5NZXNzYWdlXG4gICAgICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyX2NoYW5uZWxzX2xpbms6IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5DSEFOTkVMU19GT0xMT1dJTkdfRElTQ09WRVJ9YH1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdGaW5kIG5ldyBjaGFubmVscyB0byBmb2xsb3cnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgWW91IGFyZW4ndCBjdXJyZW50bHkgZm9sbG93aW5nIGFueSBjaGFubmVscy4gJWRpc2NvdmVyX2NoYW5uZWxzX2xpbmslLlxuICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtyb3dEYXRhLm1hcCgoeyB0aXRsZSwgbGluaywgaGVscCwgb3B0aW9ucyA9IHt9IH0pID0+IChcbiAgICAgICAgPGRpdiBrZXk9e3RpdGxlfSBjbGFzc05hbWU9XCJjbGFpbS1ncmlkX193cmFwcGVyXCI+XG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIHtsaW5rID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2xhaW0tZ3JpZF9fdGl0bGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgIG5hdmlnYXRlPXtsaW5rfVxuICAgICAgICAgICAgICAgIGljb25SaWdodD17SUNPTlMuQVJST1dfUklHSFR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3RpdGxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2xhaW0tZ3JpZF9fdGl0bGVcIj57dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtoZWxwfVxuICAgICAgICAgIDwvaDE+XG5cbiAgICAgICAgICA8Q2xhaW1UaWxlc0Rpc2NvdmVyIHsuLi5vcHRpb25zfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSG9tZVBhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFKQTtBQUhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUhBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBY0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFmQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBREE7QUFnQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQUE7QUFsQ0E7QUE0Q0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/home/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/invite/index.js": -/*!**********************************!*\ - !*** ../ui/page/invite/index.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/page/invite/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n isFailed: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserInviteStatusFailed\"])(state),\n isPending: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserInviteStatusIsPending\"])(state),\n inviteAcknowledged: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(state)(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"INVITE_ACKNOWLEDGED\"]),\n authenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchInviteStatus: function fetchInviteStatus() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"doFetchInviteStatus\"])());\n },\n acknowledgeInivte: function acknowledgeInivte() {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_4__[\"doSetClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"INVITE_ACKNOWLEDGED\"], true));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9pbnZpdGUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9pbnZpdGUvaW5kZXguanM/NTJkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvRmV0Y2hJbnZpdGVTdGF0dXMsXG4gIHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNGYWlsZWQsXG4gIHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNJc1BlbmRpbmcsXG4gIHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCB7IGRvU2V0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc2V0dGluZ3MnO1xuaW1wb3J0IEludml0ZVBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgaXNGYWlsZWQ6IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNGYWlsZWQoc3RhdGUpLFxuICBpc1BlbmRpbmc6IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNJc1BlbmRpbmcoc3RhdGUpLFxuICBpbnZpdGVBY2tub3dsZWRnZWQ6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKHN0YXRlKShTRVRUSU5HUy5JTlZJVEVfQUNLTk9XTEVER0VEKSxcbiAgYXV0aGVudGljYXRlZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxufSk7XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBmZXRjaEludml0ZVN0YXR1czogKCkgPT4gZGlzcGF0Y2goZG9GZXRjaEludml0ZVN0YXR1cygpKSxcbiAgYWNrbm93bGVkZ2VJbml2dGU6ICgpID0+IGRpc3BhdGNoKGRvU2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5JTlZJVEVfQUNLTk9XTEVER0VELCB0cnVlKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKEludml0ZVBhZ2UpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/invite/index.js\n"); - -/***/ }), - -/***/ "../ui/page/invite/view.jsx": -/*!**********************************!*\ - !*** ../ui/page/invite/view.jsx ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/busy-indicator */ \"../ui/component/common/busy-indicator.jsx\");\n/* harmony import */ var component_inviteNew__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/inviteNew */ \"../ui/component/inviteNew/index.js\");\n/* harmony import */ var component_inviteList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/inviteList */ \"../ui/component/inviteList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/rewardAuthIntro */ \"../ui/component/rewardAuthIntro/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\nvar InvitePage = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(InvitePage, _React$PureComponent);\n\n function InvitePage() {\n _classCallCheck(this, InvitePage);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(InvitePage).apply(this, arguments));\n }\n\n _createClass(InvitePage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n fetchInviteStatus = _this$props.fetchInviteStatus,\n inviteAcknowledged = _this$props.inviteAcknowledged,\n acknowledgeInivte = _this$props.acknowledgeInivte;\n fetchInviteStatus();\n\n if (!inviteAcknowledged) {\n acknowledgeInivte();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n isPending = _this$props2.isPending,\n isFailed = _this$props2.isFailed,\n authenticated = _this$props2.authenticated;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, !authenticated ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: __('Sign In to lbry.tv to Earn Rewards From Inviting Your Friends')\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, isPending && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n message: __('Checking your invite status')\n }), !isPending && isFailed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __('Failed to retrieve invite status.')), !isPending && !isFailed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_inviteNew__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_inviteList__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null))));\n }\n }]);\n\n return InvitePage;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InvitePage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9pbnZpdGUvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9pbnZpdGUvdmlldy5qc3g/YWY1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXN5SW5kaWNhdG9yIGZyb20gJ2NvbXBvbmVudC9jb21tb24vYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IEludml0ZU5ldyBmcm9tICdjb21wb25lbnQvaW52aXRlTmV3JztcbmltcG9ydCBJbnZpdGVMaXN0IGZyb20gJ2NvbXBvbmVudC9pbnZpdGVMaXN0JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBSZXdhcmRBdXRoSW50cm8gZnJvbSAnY29tcG9uZW50L3Jld2FyZEF1dGhJbnRybyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlzUGVuZGluZzogYm9vbGVhbixcbiAgaXNGYWlsZWQ6IGJvb2xlYW4sXG4gIGludml0ZUFja25vd2xlZGdlZDogYm9vbGVhbixcbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbixcbiAgYWNrbm93bGVkZ2VJbml2dGU6ICgpID0+IHZvaWQsXG4gIGZldGNoSW52aXRlU3RhdHVzOiAoKSA9PiB2b2lkLFxufTtcblxuY2xhc3MgSW52aXRlUGFnZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBmZXRjaEludml0ZVN0YXR1cywgaW52aXRlQWNrbm93bGVkZ2VkLCBhY2tub3dsZWRnZUluaXZ0ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBmZXRjaEludml0ZVN0YXR1cygpO1xuXG4gICAgaWYgKCFpbnZpdGVBY2tub3dsZWRnZWQpIHtcbiAgICAgIGFja25vd2xlZGdlSW5pdnRlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaXNQZW5kaW5nLCBpc0ZhaWxlZCwgYXV0aGVudGljYXRlZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnZT5cbiAgICAgICAgeyFhdXRoZW50aWNhdGVkID8gKFxuICAgICAgICAgIDxSZXdhcmRBdXRoSW50cm8gdGl0bGU9e19fKCdTaWduIEluIHRvIGxicnkudHYgdG8gRWFybiBSZXdhcmRzIEZyb20gSW52aXRpbmcgWW91ciBGcmllbmRzJyl9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAge2lzUGVuZGluZyAmJiA8QnVzeUluZGljYXRvciBtZXNzYWdlPXtfXygnQ2hlY2tpbmcgeW91ciBpbnZpdGUgc3RhdHVzJyl9IC8+fVxuICAgICAgICAgICAgeyFpc1BlbmRpbmcgJiYgaXNGYWlsZWQgJiYgPHNwYW4gY2xhc3NOYW1lPVwiZW1wdHlcIj57X18oJ0ZhaWxlZCB0byByZXRyaWV2ZSBpbnZpdGUgc3RhdHVzLicpfTwvc3Bhbj59XG4gICAgICAgICAgICB7IWlzUGVuZGluZyAmJiAhaXNGYWlsZWQgJiYgKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICA8SW52aXRlTmV3IC8+XG4gICAgICAgICAgICAgICAgPEludml0ZUxpc3QgLz5cbiAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKX1cbiAgICAgIDwvUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludml0ZVBhZ2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBWUE7Ozs7QUFoQ0E7QUFDQTtBQWtDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/invite/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/invited/index.js": -/*!***********************************!*\ - !*** ../ui/page/invited/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/invited/view.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n\n\n\n\n\nvar select = function select(state, props) {\n var match = props.match;\n var params = match.params;\n var referrer = params.referrer;\n var sanitizedReferrer = referrer ? referrer.replace(':', '#') : '';\n var uri = \"lbry://\".concat(sanitizedReferrer);\n return {\n fullUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectPermanentUrlForUri\"])(uri)(state),\n referrer: referrer\n };\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_3__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9pbnZpdGVkL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaW52aXRlZC9pbmRleC5qcz8wZjNkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgSW52aXRlZFBhZ2UgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IG1ha2VTZWxlY3RQZXJtYW5lbnRVcmxGb3JVcmkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgbWF0Y2ggfSA9IHByb3BzO1xuICBjb25zdCB7IHBhcmFtcyB9ID0gbWF0Y2g7XG4gIGNvbnN0IHsgcmVmZXJyZXIgfSA9IHBhcmFtcztcbiAgY29uc3Qgc2FuaXRpemVkUmVmZXJyZXIgPSByZWZlcnJlciA/IHJlZmVycmVyLnJlcGxhY2UoJzonLCAnIycpIDogJyc7XG4gIGNvbnN0IHVyaSA9IGBsYnJ5Oi8vJHtzYW5pdGl6ZWRSZWZlcnJlcn1gO1xuICByZXR1cm4ge1xuICAgIGZ1bGxVcmk6IG1ha2VTZWxlY3RQZXJtYW5lbnRVcmxGb3JVcmkodXJpKShzdGF0ZSksXG4gICAgcmVmZXJyZXI6IHJlZmVycmVyLFxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm0gPSAoKSA9PiAoe30pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoSW52aXRlZFBhZ2UpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFOQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/invited/index.js\n"); - -/***/ }), - -/***/ "../ui/page/invited/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/invited/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReferredPage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_invited__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/invited */ \"../ui/component/invited/index.js\");\n\n\n\nfunction ReferredPage(props) {\n var fullUri = props.fullUri,\n referrer = props.referrer;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n authPage: true,\n className: \"main--auth-page\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_invited__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n fullUri: fullUri,\n referrer: referrer\n }));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9pbnZpdGVkL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvaW52aXRlZC92aWV3LmpzeD8wYjFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IEludml0ZWQgZnJvbSAnY29tcG9uZW50L2ludml0ZWQnO1xuXG50eXBlIFByb3BzID0ge1xuICBmdWxsVXJpOiBzdHJpbmcsXG4gIHJlZmVycmVyOiBzdHJpbmcsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVmZXJyZWRQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGZ1bGxVcmksIHJlZmVycmVyIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxQYWdlIGF1dGhQYWdlIGNsYXNzTmFtZT1cIm1haW4tLWF1dGgtcGFnZVwiPlxuICAgICAgPEludml0ZWQgZnVsbFVyaT17ZnVsbFVyaX0gcmVmZXJyZXI9e3JlZmVycmVyfSAvPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/invited/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/library/index.js": -/*!***********************************!*\ - !*** ../ui/page/library/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/page/library/view.jsx\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9saWJyYXJ5L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvbGlicmFyeS9pbmRleC5qcz9hZWIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWJyYXJ5UGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBMaWJyYXJ5UGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/library/index.js\n"); - -/***/ }), - -/***/ "../ui/page/library/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/library/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var page_fileListDownloaded__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! page/fileListDownloaded */ \"../ui/page/fileListDownloaded/index.js\");\n\n\n\n\nfunction LibraryPage() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(page_fileListDownloaded__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (LibraryPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9saWJyYXJ5L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvbGlicmFyeS92aWV3LmpzeD84NGNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IERvd25sb2FkTGlzdCBmcm9tICdwYWdlL2ZpbGVMaXN0RG93bmxvYWRlZCc7XG5cbmZ1bmN0aW9uIExpYnJhcnlQYWdlKCkge1xuICByZXR1cm4gKFxuICAgIDxQYWdlPlxuICAgICAgPERvd25sb2FkTGlzdCAvPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlicmFyeVBhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/library/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/listBlocked/index.js": -/*!***************************************!*\ - !*** ../ui/page/listBlocked/index.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/page/listBlocked/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n uris: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9saXN0QmxvY2tlZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2xpc3RCbG9ja2VkL2luZGV4LmpzP2RkYzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEJsb2NrZWRDaGFubmVscyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IExpc3RCbG9ja2VkIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVyaXM6IHNlbGVjdEJsb2NrZWRDaGFubmVscyhzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBudWxsXG4pKExpc3RCbG9ja2VkKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/listBlocked/index.js\n"); - -/***/ }), - -/***/ "../ui/page/listBlocked/view.jsx": -/*!***************************************!*\ - !*** ../ui/page/listBlocked/view.jsx ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n\n\n\n\nfunction ListBlocked(props) {\n var uris = props.uris;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, uris && uris.length ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n header: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", null, __('Your Blocked Channels')),\n persistedStorageKey: \"block-list-published\",\n uris: uris,\n defaultSort: true,\n showHiddenByUser: true\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"main--empty\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card card--section\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h2\", {\n className: \"card__title card__title--deprecated\"\n }, __('You aren’t blocking any channels')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, __('When you block a channel, all content from that channel will be hidden.')))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ListBlocked);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9saXN0QmxvY2tlZC92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL2xpc3RCbG9ja2VkL3ZpZXcuanN4P2JjZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2xhaW1MaXN0IGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuXG50eXBlIFByb3BzID0ge1xuICB1cmlzOiBBcnJheTxzdHJpbmc+LFxufTtcblxuZnVuY3Rpb24gTGlzdEJsb2NrZWQocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgdXJpcyB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIHt1cmlzICYmIHVyaXMubGVuZ3RoID8gKFxuICAgICAgICA8Q2xhaW1MaXN0XG4gICAgICAgICAgaGVhZGVyPXs8aDE+e19fKCdZb3VyIEJsb2NrZWQgQ2hhbm5lbHMnKX08L2gxPn1cbiAgICAgICAgICBwZXJzaXN0ZWRTdG9yYWdlS2V5PVwiYmxvY2stbGlzdC1wdWJsaXNoZWRcIlxuICAgICAgICAgIHVyaXM9e3VyaXN9XG4gICAgICAgICAgZGVmYXVsdFNvcnRcbiAgICAgICAgICBzaG93SGlkZGVuQnlVc2VyXG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1haW4tLWVtcHR5XCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY2FyZCBjYXJkLS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiY2FyZF9fdGl0bGUgY2FyZF9fdGl0bGUtLWRlcHJlY2F0ZWRcIj57X18oJ1lvdSBhcmVu4oCZdCBibG9ja2luZyBhbnkgY2hhbm5lbHMnKX08L2gyPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAge19fKCdXaGVuIHlvdSBibG9jayBhIGNoYW5uZWwsIGFsbCBjb250ZW50IGZyb20gdGhhdCBjaGFubmVsIHdpbGwgYmUgaGlkZGVuLicpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdEJsb2NrZWQ7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFRQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/listBlocked/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/publish/index.js": -/*!***********************************!*\ - !*** ../ui/page/publish/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/page/publish/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n balance: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"])(state),\n totalRewardValue: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUnclaimedRewardValue\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, null)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9wdWJsaXNoL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvcHVibGlzaC9pbmRleC5qcz81ODE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RCYWxhbmNlIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RVbmNsYWltZWRSZXdhcmRWYWx1ZSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFB1Ymxpc2hQYWdlIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIGJhbGFuY2U6IHNlbGVjdEJhbGFuY2Uoc3RhdGUpLFxuICB0b3RhbFJld2FyZFZhbHVlOiBzZWxlY3RVbmNsYWltZWRSZXdhcmRWYWx1ZShzdGF0ZSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBudWxsXG4pKFB1Ymxpc2hQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/publish/index.js\n"); - -/***/ }), - -/***/ "../ui/page/publish/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/publish/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_publishForm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/publishForm */ \"../ui/component/publishForm/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_yrbl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/yrbl */ \"../ui/component/yrbl/index.jsx\");\n/* harmony import */ var component_common_lbc_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/common/lbc-symbol */ \"../ui/component/common/lbc-symbol.jsx\");\n/* harmony import */ var component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/rewardAuthIntro */ \"../ui/component/rewardAuthIntro/index.js\");\n\n\n\n\n\n\n\nfunction PublishPage(props) {\n var balance = props.balance;\n\n function scrollToTop() {\n var mainContent = document.querySelector('main');\n\n if (mainContent) {\n mainContent.scrollTop = 0; // It would be nice to animate this\n }\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, balance === 0 && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_yrbl__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: __(\"You can't publish things quite yet\"),\n subtitle: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('LBRY uses a blockchain, which is a fancy way of saying that users (you) are in control of your data.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('Because of the blockchain, some actions require LBRY credits'), \" (\", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_lbc_symbol__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), \").\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_lbc_symbol__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), ' ', __('allows you to do some neat things, like paying your favorite creators for their content. And no company can stop you.')))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_publishForm__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n scrollToTop: scrollToTop,\n disabled: balance === 0\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (PublishPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9wdWJsaXNoL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvcHVibGlzaC92aWV3LmpzeD81ZjA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHVibGlzaEZvcm0gZnJvbSAnY29tcG9uZW50L3B1Ymxpc2hGb3JtJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBZcmJsIGZyb20gJ2NvbXBvbmVudC95cmJsJztcbmltcG9ydCBMYmNTeW1ib2wgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9sYmMtc3ltYm9sJztcbmltcG9ydCBSZXdhcmRBdXRoSW50cm8gZnJvbSAnY29tcG9uZW50L3Jld2FyZEF1dGhJbnRybyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGJhbGFuY2U6IG51bWJlcixcbiAgdG90YWxSZXdhcmRWYWx1ZTogbnVtYmVyLFxufTtcblxuZnVuY3Rpb24gUHVibGlzaFBhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgYmFsYW5jZSB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gc2Nyb2xsVG9Ub3AoKSB7XG4gICAgY29uc3QgbWFpbkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtYWluJyk7XG4gICAgaWYgKG1haW5Db250ZW50KSB7XG4gICAgICBtYWluQ29udGVudC5zY3JvbGxUb3AgPSAwOyAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGFuaW1hdGUgdGhpc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBhZ2U+XG4gICAgICB7YmFsYW5jZSA9PT0gMCAmJiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8WXJibFxuICAgICAgICAgICAgdGl0bGU9e19fKFwiWW91IGNhbid0IHB1Ymxpc2ggdGhpbmdzIHF1aXRlIHlldFwiKX1cbiAgICAgICAgICAgIHN1YnRpdGxlPXtcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge19fKFxuICAgICAgICAgICAgICAgICAgICAnTEJSWSB1c2VzIGEgYmxvY2tjaGFpbiwgd2hpY2ggaXMgYSBmYW5jeSB3YXkgb2Ygc2F5aW5nIHRoYXQgdXNlcnMgKHlvdSkgYXJlIGluIGNvbnRyb2wgb2YgeW91ciBkYXRhLidcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge19fKCdCZWNhdXNlIG9mIHRoZSBibG9ja2NoYWluLCBzb21lIGFjdGlvbnMgcmVxdWlyZSBMQlJZIGNyZWRpdHMnKX0gKFxuICAgICAgICAgICAgICAgICAgPExiY1N5bWJvbCAvPlxuICAgICAgICAgICAgICAgICAgKS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8TGJjU3ltYm9sIC8+eycgJ31cbiAgICAgICAgICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICAgICAgICAgJ2FsbG93cyB5b3UgdG8gZG8gc29tZSBuZWF0IHRoaW5ncywgbGlrZSBwYXlpbmcgeW91ciBmYXZvcml0ZSBjcmVhdG9ycyBmb3IgdGhlaXIgY29udGVudC4gQW5kIG5vIGNvbXBhbnkgY2FuIHN0b3AgeW91LidcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFJld2FyZEF1dGhJbnRybyAvPlxuICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgKX1cbiAgICAgIDxQdWJsaXNoRm9ybSBzY3JvbGxUb1RvcD17c2Nyb2xsVG9Ub3B9IGRpc2FibGVkPXtiYWxhbmNlID09PSAwfSAvPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaFBhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFGQTtBQTBCQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/publish/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/report/index.js": -/*!**********************************!*\ - !*** ../ui/page/report/index.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"../ui/page/report/view.jsx\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9yZXBvcnQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9yZXBvcnQvaW5kZXguanM/ZTljZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVwb3J0UGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCBSZXBvcnRQYWdlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/report/index.js\n"); - -/***/ }), - -/***/ "../ui/page/report/view.jsx": -/*!**********************************!*\ - !*** ../ui/page/report/view.jsx ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\nvar ReportPage = /*#__PURE__*/function (_React$Component) {\n _inherits(ReportPage, _React$Component);\n\n function ReportPage(props) {\n var _this;\n\n _classCallCheck(this, ReportPage);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ReportPage).call(this, props));\n _this.state = {\n submitting: false,\n message: ''\n };\n return _this;\n }\n\n _createClass(ReportPage, [{\n key: \"onMessageChange\",\n value: function onMessageChange(event) {\n this.setState({\n message: event.target.value\n });\n }\n }, {\n key: \"submitMessage\",\n value: function submitMessage() {\n var _this2 = this;\n\n var message = this.state.message;\n\n if (message) {\n this.setState({\n submitting: true\n });\n lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"Lbryio\"].call('event', 'desktop_error', {\n error_message: message\n }).then(function () {\n _this2.setState({\n submitting: false\n }); // Display global notice\n\n\n var action = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doToast\"])({\n message: __('Message received! Thanks for helping.')\n });\n window.app.store.dispatch(action);\n });\n this.setState({\n message: ''\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Report an Issue/Request a Feature'),\n subtitle: __('Please describe the problem you experienced or the feature you want to see and any information you think might be useful to us. Links to screenshots are great!'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"textarea\",\n rows: \"10\",\n name: \"message\",\n stretch: true,\n value: this.state.message,\n onChange: function onChange(event) {\n _this3.onMessageChange(event);\n },\n placeholder: __('Description of your issue or feature request')\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"primary\",\n onClick: function onClick(event) {\n _this3.submitMessage(event);\n },\n className: \"button-block button-primary \".concat(this.state.submitting ? 'disabled' : '')\n }, this.state.submitting ? __('Submitting...') : __('Submit Report')))\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: __('Developer?'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"markdown-preview\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", null, __('You can also:')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://github.com/lbryio/lbry-desktop/issues\",\n label: __('Submit an issue on GitHub')\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, __('Explore our'), ' ', react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.tech\",\n label: __('technical resources')\n }), \".\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", null, __('Join our'), \" \", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n button: \"link\",\n href: \"https://forum.lbry.tech\",\n label: __('tech forum')\n }), \".\"))))\n }));\n }\n }]);\n\n return ReportPage;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ReportPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9yZXBvcnQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9yZXBvcnQvdmlldy5qc3g/ZWVlNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnY29tcG9uZW50L2NvbW1vbi9mb3JtJztcbmltcG9ydCB7IGRvVG9hc3QgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IExicnlpbyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IENhcmQgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9jYXJkJztcblxuY2xhc3MgUmVwb3J0UGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN1Ym1pdHRpbmc6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgfTtcbiAgfVxuXG4gIG9uTWVzc2FnZUNoYW5nZShldmVudCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbWVzc2FnZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgc3VibWl0TWVzc2FnZSgpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdWJtaXR0aW5nOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBMYnJ5aW8uY2FsbCgnZXZlbnQnLCAnZGVza3RvcF9lcnJvcicsIHsgZXJyb3JfbWVzc2FnZTogbWVzc2FnZSB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc3VibWl0dGluZzogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERpc3BsYXkgZ2xvYmFsIG5vdGljZVxuICAgICAgICBjb25zdCBhY3Rpb24gPSBkb1RvYXN0KHtcbiAgICAgICAgICBtZXNzYWdlOiBfXygnTWVzc2FnZSByZWNlaXZlZCEgVGhhbmtzIGZvciBoZWxwaW5nLicpLFxuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LmFwcC5zdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZXNzYWdlOiAnJyB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQYWdlPlxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnUmVwb3J0IGFuIElzc3VlL1JlcXVlc3QgYSBGZWF0dXJlJyl9XG4gICAgICAgICAgc3VidGl0bGU9e19fKFxuICAgICAgICAgICAgJ1BsZWFzZSBkZXNjcmliZSB0aGUgcHJvYmxlbSB5b3UgZXhwZXJpZW5jZWQgb3IgdGhlIGZlYXR1cmUgeW91IHdhbnQgdG8gc2VlIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCB0byB1cy4gTGlua3MgdG8gc2NyZWVuc2hvdHMgYXJlIGdyZWF0ISdcbiAgICAgICAgICApfVxuICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICByb3dzPVwiMTBcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBzdHJldGNoXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubWVzc2FnZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbk1lc3NhZ2VDaGFuZ2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e19fKCdEZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlIG9yIGZlYXR1cmUgcmVxdWVzdCcpfVxuICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdE1lc3NhZ2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYnV0dG9uLWJsb2NrIGJ1dHRvbi1wcmltYXJ5ICR7dGhpcy5zdGF0ZS5zdWJtaXR0aW5nID8gJ2Rpc2FibGVkJyA6ICcnfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zdWJtaXR0aW5nID8gX18oJ1N1Ym1pdHRpbmcuLi4nKSA6IF9fKCdTdWJtaXQgUmVwb3J0Jyl9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPENhcmRcbiAgICAgICAgICB0aXRsZT17X18oJ0RldmVsb3Blcj8nKX1cbiAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXJrZG93bi1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgPHA+e19fKCdZb3UgY2FuIGFsc286Jyl9PC9wPlxuICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbj1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9pc3N1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnU3VibWl0IGFuIGlzc3VlIG9uIEdpdEh1YicpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAuXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICB7X18oJ0V4cGxvcmUgb3VyJyl9eycgJ31cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgaHJlZj1cImh0dHBzOi8vbGJyeS50ZWNoXCIgbGFiZWw9e19fKCd0ZWNobmljYWwgcmVzb3VyY2VzJyl9IC8+LlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAge19fKCdKb2luIG91cicpfSA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly9mb3J1bS5sYnJ5LnRlY2hcIiBsYWJlbD17X18oJ3RlY2ggZm9ydW0nKX0gLz4uXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1BhZ2U+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXBvcnRQYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFPQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFUQTtBQVlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBVEE7QUFhQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBTEE7QUFuQkE7QUFpQ0E7QUFDQTtBQUVBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFIQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFwQkE7QUE2QkE7Ozs7QUF0R0E7QUFDQTtBQXdHQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/report/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/rewards/index.js": -/*!***********************************!*\ - !*** ../ui/page/rewards/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/page/rewards/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n daemonSettings: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_2__[\"selectDaemonSettings\"])(state),\n fetching: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectFetchingRewards\"])(state),\n rewards: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUnclaimedRewards\"])(state),\n claimed: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimedRewards\"])(state),\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUser\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchRewards: function fetchRewards() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doRewardList\"])());\n },\n fetchUser: function fetchUser() {\n return dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUserFetch\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9yZXdhcmRzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvcmV3YXJkcy9pbmRleC5qcz8wYTRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBzZWxlY3RGZXRjaGluZ1Jld2FyZHMsXG4gIHNlbGVjdFVuY2xhaW1lZFJld2FyZHMsXG4gIHNlbGVjdENsYWltZWRSZXdhcmRzLFxuICBzZWxlY3RVc2VyLFxuICBkb1Jld2FyZExpc3QsXG4gIGRvVXNlckZldGNoLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IHNlbGVjdERhZW1vblNldHRpbmdzIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzJztcbmltcG9ydCBSZXdhcmRzUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBkYWVtb25TZXR0aW5nczogc2VsZWN0RGFlbW9uU2V0dGluZ3Moc3RhdGUpLFxuICBmZXRjaGluZzogc2VsZWN0RmV0Y2hpbmdSZXdhcmRzKHN0YXRlKSxcbiAgcmV3YXJkczogc2VsZWN0VW5jbGFpbWVkUmV3YXJkcyhzdGF0ZSksXG4gIGNsYWltZWQ6IHNlbGVjdENsYWltZWRSZXdhcmRzKHN0YXRlKSxcbiAgdXNlcjogc2VsZWN0VXNlcihzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIGZldGNoUmV3YXJkczogKCkgPT4gZGlzcGF0Y2goZG9SZXdhcmRMaXN0KCkpLFxuICBmZXRjaFVzZXI6ICgpID0+IGRpc3BhdGNoKGRvVXNlckZldGNoKCkpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShSZXdhcmRzUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/rewards/index.js\n"); - -/***/ }), - -/***/ "../ui/page/rewards/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/rewards/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/busy-indicator */ \"../ui/component/common/busy-indicator.jsx\");\n/* harmony import */ var component_rewardListClaimed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/rewardListClaimed */ \"../ui/component/rewardListClaimed/index.js\");\n/* harmony import */ var component_rewardTile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/rewardTile */ \"../ui/component/rewardTile/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/rewardAuthIntro */ \"../ui/component/rewardAuthIntro/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RewardsPage = /*#__PURE__*/function (_PureComponent) {\n _inherits(RewardsPage, _PureComponent);\n\n function RewardsPage() {\n _classCallCheck(this, RewardsPage);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(RewardsPage).apply(this, arguments));\n }\n\n _createClass(RewardsPage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.props.fetchRewards();\n }\n }, {\n key: \"renderPageHeader\",\n value: function renderPageHeader() {\n var _this$props = this.props,\n user = _this$props.user,\n daemonSettings = _this$props.daemonSettings,\n fetchUser = _this$props.fetchUser;\n var rewardsEnabled = true || false;\n\n if (user && !user.is_reward_approved && rewardsEnabled) {\n if (!user.primary_email || !user.has_verified_email || !user.is_identity_verified) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardAuthIntro__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n title: __('Reward Validation Pending'),\n body: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('This account must undergo review before you can participate in the rewards program.'), ' ', __('This can take anywhere from several minutes to several days.')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, __('We apologize for this inconvenience, but have added this additional step to prevent fraud.')), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, \"\".concat(__('If you continue to see this message, send us an email to help@lbry.com.'), \" \").concat(__('Please enjoy free content in the meantime!')))),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n navigate: \"/\",\n button: \"primary\",\n label: \"Return Home\"\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: function onClick() {\n return fetchUser();\n },\n button: \"link\",\n label: \"Refresh\"\n }))\n });\n }\n\n return null;\n }\n }, {\n key: \"renderCustomRewardCode\",\n value: function renderCustomRewardCode() {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardTile__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: lbryinc__WEBPACK_IMPORTED_MODULE_8__[\"rewards\"].TYPE_GENERATED_CODE,\n reward: {\n reward_type: lbryinc__WEBPACK_IMPORTED_MODULE_8__[\"rewards\"].TYPE_GENERATED_CODE,\n reward_title: __('Custom Code'),\n reward_description: __('Are you a supermodel or rockstar that received a custom reward code? Claim it here.')\n }\n });\n }\n }, {\n key: \"renderUnclaimedRewards\",\n value: function renderUnclaimedRewards() {\n var _this$props2 = this.props,\n fetching = _this$props2.fetching,\n rewards = _this$props2.rewards,\n user = _this$props2.user,\n daemonSettings = _this$props2.daemonSettings,\n claimed = _this$props2.claimed;\n\n if (false) {} else if (fetching) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n message: __('Fetching rewards')\n });\n } else if (user === null) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", {\n className: \"help\"\n }, __('This application is unable to earn rewards due to an authentication failure.'));\n } else if (!rewards || rewards.length <= 0) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n title: __('No Rewards Available'),\n subtitle: claimed && claimed.length ? __(\"You have claimed all available rewards! We're regularly adding more so be sure to check back later.\") : __('There are no rewards available at this time, please check back later.'),\n actions: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n button: \"primary\",\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"DISCOVER\"]),\n label: __('Go Home')\n })\n });\n }\n\n var isNotEligible = !user || !user.primary_email || !user.has_verified_email || !user.is_reward_approved;\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_7___default()('card__list', {\n 'card--disabled': isNotEligible\n })\n }, rewards.map(function (reward) {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardTile__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: reward.claim_code,\n reward: reward\n });\n }), this.renderCustomRewardCode());\n }\n }, {\n key: \"render\",\n value: function render() {\n return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, this.renderPageHeader(), this.renderUnclaimedRewards(), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_rewardListClaimed__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null));\n }\n }]);\n\n return RewardsPage;\n}(react__WEBPACK_IMPORTED_MODULE_1__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (RewardsPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9yZXdhcmRzL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvcmV3YXJkcy92aWV3LmpzeD9mZmE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnVzeUluZGljYXRvciBmcm9tICdjb21wb25lbnQvY29tbW9uL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCBSZXdhcmRMaXN0Q2xhaW1lZCBmcm9tICdjb21wb25lbnQvcmV3YXJkTGlzdENsYWltZWQnO1xuaW1wb3J0IFJld2FyZFRpbGUgZnJvbSAnY29tcG9uZW50L3Jld2FyZFRpbGUnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcmV3YXJkcyBhcyBSRVdBUkRfVFlQRVMgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBSZXdhcmRBdXRoSW50cm8gZnJvbSAnY29tcG9uZW50L3Jld2FyZEF1dGhJbnRybyc7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRvQXV0aDogKCkgPT4gdm9pZCxcbiAgZmV0Y2hSZXdhcmRzOiAoKSA9PiB2b2lkLFxuICBmZXRjaFVzZXI6ICgpID0+IHZvaWQsXG4gIGZldGNoaW5nOiBib29sZWFuLFxuICByZXdhcmRzOiBBcnJheTxSZXdhcmQ+LFxuICBjbGFpbWVkOiBBcnJheTxSZXdhcmQ+LFxuICB1c2VyOiA/e1xuICAgIGlzX2lkZW50aXR5X3ZlcmlmaWVkOiBib29sZWFuLFxuICAgIGlzX3Jld2FyZF9hcHByb3ZlZDogYm9vbGVhbixcbiAgICBwcmltYXJ5X2VtYWlsOiBzdHJpbmcsXG4gICAgaGFzX3ZlcmlmaWVkX2VtYWlsOiBib29sZWFuLFxuICB9LFxuICBkYWVtb25TZXR0aW5nczoge1xuICAgIHNoYXJlX3VzYWdlX2RhdGE6IGJvb2xlYW4sXG4gIH0sXG59O1xuXG5jbGFzcyBSZXdhcmRzUGFnZSBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5wcm9wcy5mZXRjaFJld2FyZHMoKTtcbiAgfVxuICByZW5kZXJQYWdlSGVhZGVyKCkge1xuICAgIGNvbnN0IHsgdXNlciwgZGFlbW9uU2V0dGluZ3MsIGZldGNoVXNlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCByZXdhcmRzRW5hYmxlZCA9IElTX1dFQiB8fCAoZGFlbW9uU2V0dGluZ3MgJiYgZGFlbW9uU2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSk7XG5cbiAgICBpZiAodXNlciAmJiAhdXNlci5pc19yZXdhcmRfYXBwcm92ZWQgJiYgcmV3YXJkc0VuYWJsZWQpIHtcbiAgICAgIGlmICghdXNlci5wcmltYXJ5X2VtYWlsIHx8ICF1c2VyLmhhc192ZXJpZmllZF9lbWFpbCB8fCAhdXNlci5pc19pZGVudGl0eV92ZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gPFJld2FyZEF1dGhJbnRybyAvPjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENhcmRcbiAgICAgICAgICB0aXRsZT17X18oJ1Jld2FyZCBWYWxpZGF0aW9uIFBlbmRpbmcnKX1cbiAgICAgICAgICBib2R5PXtcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAge19fKCdUaGlzIGFjY291bnQgbXVzdCB1bmRlcmdvIHJldmlldyBiZWZvcmUgeW91IGNhbiBwYXJ0aWNpcGF0ZSBpbiB0aGUgcmV3YXJkcyBwcm9ncmFtLicpfXsnICd9XG4gICAgICAgICAgICAgICAge19fKCdUaGlzIGNhbiB0YWtlIGFueXdoZXJlIGZyb20gc2V2ZXJhbCBtaW51dGVzIHRvIHNldmVyYWwgZGF5cy4nKX1cbiAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgIDxwPntfXygnV2UgYXBvbG9naXplIGZvciB0aGlzIGluY29udmVuaWVuY2UsIGJ1dCBoYXZlIGFkZGVkIHRoaXMgYWRkaXRpb25hbCBzdGVwIHRvIHByZXZlbnQgZnJhdWQuJyl9PC9wPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICB7YCR7X18oJ0lmIHlvdSBjb250aW51ZSB0byBzZWUgdGhpcyBtZXNzYWdlLCBzZW5kIHVzIGFuIGVtYWlsIHRvIGhlbHBAbGJyeS5jb20uJyl9ICR7X18oXG4gICAgICAgICAgICAgICAgICAnUGxlYXNlIGVuam95IGZyZWUgY29udGVudCBpbiB0aGUgbWVhbnRpbWUhJ1xuICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBuYXZpZ2F0ZT1cIi9cIiBidXR0b249XCJwcmltYXJ5XCIgbGFiZWw9XCJSZXR1cm4gSG9tZVwiIC8+XG4gICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gZmV0Y2hVc2VyKCl9IGJ1dHRvbj1cImxpbmtcIiBsYWJlbD1cIlJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlckN1c3RvbVJld2FyZENvZGUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXdhcmRUaWxlXG4gICAgICAgIGtleT17UkVXQVJEX1RZUEVTLlRZUEVfR0VORVJBVEVEX0NPREV9XG4gICAgICAgIHJld2FyZD17e1xuICAgICAgICAgIHJld2FyZF90eXBlOiBSRVdBUkRfVFlQRVMuVFlQRV9HRU5FUkFURURfQ09ERSxcbiAgICAgICAgICByZXdhcmRfdGl0bGU6IF9fKCdDdXN0b20gQ29kZScpLFxuICAgICAgICAgIHJld2FyZF9kZXNjcmlwdGlvbjogX18oJ0FyZSB5b3UgYSBzdXBlcm1vZGVsIG9yIHJvY2tzdGFyIHRoYXQgcmVjZWl2ZWQgYSBjdXN0b20gcmV3YXJkIGNvZGU/IENsYWltIGl0IGhlcmUuJyksXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJVbmNsYWltZWRSZXdhcmRzKCkge1xuICAgIGNvbnN0IHsgZmV0Y2hpbmcsIHJld2FyZHMsIHVzZXIsIGRhZW1vblNldHRpbmdzLCBjbGFpbWVkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCFJU19XRUIgJiYgZGFlbW9uU2V0dGluZ3MgJiYgIWRhZW1vblNldHRpbmdzLnNoYXJlX3VzYWdlX2RhdGEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImNhcmQgY2FyZC0tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJjYXJkX190aXRsZSBjYXJkX190aXRsZS0tZGVwcmVjYXRlZFwiPntfXygnUmV3YXJkcyBEaXNhYmxlZCcpfTwvaDI+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItdGV4dFwiPlxuICAgICAgICAgICAgPEkxOG5NZXNzYWdlIHRva2Vucz17eyBzZXR0aW5nczogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbmF2aWdhdGU9XCIvJC9zZXR0aW5nc1wiIGxhYmVsPVwiU2V0dGluZ3NcIiAvPiB9fT5cbiAgICAgICAgICAgICAgUmV3YXJkcyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciB5b3VyIGFjY291bnQuIFR1cm4gb24gZGlhZ25vc3RpYyBkYXRhIHNoYXJpbmcsIGluICVzZXR0aW5ncyUsIHRvXG4gICAgICAgICAgICAgIHJlLWVuYWJsZSB0aGVtLlxuICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChmZXRjaGluZykge1xuICAgICAgcmV0dXJuIDxCdXN5SW5kaWNhdG9yIG1lc3NhZ2U9e19fKCdGZXRjaGluZyByZXdhcmRzJyl9IC8+O1xuICAgIH0gZWxzZSBpZiAodXNlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGVscFwiPntfXygnVGhpcyBhcHBsaWNhdGlvbiBpcyB1bmFibGUgdG8gZWFybiByZXdhcmRzIGR1ZSB0byBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLicpfTwvcD5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcmV3YXJkcyB8fCByZXdhcmRzLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHRpdGxlPXtfXygnTm8gUmV3YXJkcyBBdmFpbGFibGUnKX1cbiAgICAgICAgICBzdWJ0aXRsZT17XG4gICAgICAgICAgICBjbGFpbWVkICYmIGNsYWltZWQubGVuZ3RoXG4gICAgICAgICAgICAgID8gX18oXG4gICAgICAgICAgICAgICAgICBcIllvdSBoYXZlIGNsYWltZWQgYWxsIGF2YWlsYWJsZSByZXdhcmRzISBXZSdyZSByZWd1bGFybHkgYWRkaW5nIG1vcmUgc28gYmUgc3VyZSB0byBjaGVjayBiYWNrIGxhdGVyLlwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF9fKCdUaGVyZSBhcmUgbm8gcmV3YXJkcyBhdmFpbGFibGUgYXQgdGhpcyB0aW1lLCBwbGVhc2UgY2hlY2sgYmFjayBsYXRlci4nKVxuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb25zPXs8QnV0dG9uIGJ1dHRvbj1cInByaW1hcnlcIiBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuRElTQ09WRVJ9YH0gbGFiZWw9e19fKCdHbyBIb21lJyl9IC8+fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc05vdEVsaWdpYmxlID0gIXVzZXIgfHwgIXVzZXIucHJpbWFyeV9lbWFpbCB8fCAhdXNlci5oYXNfdmVyaWZpZWRfZW1haWwgfHwgIXVzZXIuaXNfcmV3YXJkX2FwcHJvdmVkO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjYXJkX19saXN0Jywge1xuICAgICAgICAgICdjYXJkLS1kaXNhYmxlZCc6IGlzTm90RWxpZ2libGUsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICB7cmV3YXJkcy5tYXAocmV3YXJkID0+IChcbiAgICAgICAgICA8UmV3YXJkVGlsZSBrZXk9e3Jld2FyZC5jbGFpbV9jb2RlfSByZXdhcmQ9e3Jld2FyZH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIHt0aGlzLnJlbmRlckN1c3RvbVJld2FyZENvZGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQYWdlPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlSGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclVuY2xhaW1lZFJld2FyZHMoKX1cbiAgICAgICAgezxSZXdhcmRMaXN0Q2xhaW1lZCAvPn1cbiAgICAgIDwvUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJld2FyZHNQYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW1CQTs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcEJBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFTQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLG1CQUFBO0FBYUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFUQTtBQVlBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQU5BO0FBV0E7OztBQUVBO0FBQ0E7QUFPQTs7OztBQXRIQTtBQUNBO0FBd0hBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/rewards/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/search/index.js": -/*!**********************************!*\ - !*** ../ui/page/search/index.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./view */ \"../ui/page/search/view.jsx\");\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n var showMature = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"SHOW_MATURE\"])(state);\n var query = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectQueryWithOptions\"])(null, showMature === false ? {\n nsfw: false,\n isBackgroundSearch: false\n } : {\n isBackgroundSearch: false\n })(state);\n var uris = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectSearchUris\"])(query)(state);\n return {\n isSearching: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectIsSearching\"])(state),\n showNsfw: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"SHOW_MATURE\"])(state),\n uris: uris,\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n search: function search(query, options) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doSearch\"])(query, options));\n },\n onFeedbackPositive: function onFeedbackPositive(query) {\n analytics__WEBPACK_IMPORTED_MODULE_5__[\"default\"].apiSearchFeedback(query, 1);\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doToast\"])({\n message: __('Thanks for the feedback! You help make the app better for everyone.')\n }));\n },\n onFeedbackNegative: function onFeedbackNegative(query) {\n analytics__WEBPACK_IMPORTED_MODULE_5__[\"default\"].apiSearchFeedback(query, 0);\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doToast\"])({\n message: __('Thanks for the feedback. Mark has been notified and is currently walking over to his computer to work on this.')\n }));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"]));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zZWFyY2gvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zZWFyY2gvaW5kZXguanM/ZDk1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0ICogYXMgU0VUVElOR1MgZnJvbSAnY29uc3RhbnRzL3NldHRpbmdzJztcbmltcG9ydCB7IGRvU2VhcmNoLCBzZWxlY3RJc1NlYXJjaGluZywgbWFrZVNlbGVjdFNlYXJjaFVyaXMsIG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zLCBkb1RvYXN0IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbCB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IGFuYWx5dGljcyBmcm9tICdhbmFseXRpY3MnO1xuaW1wb3J0IFNlYXJjaFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4ge1xuICBjb25zdCBzaG93TWF0dXJlID0gbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuU0hPV19NQVRVUkUpKHN0YXRlKTtcbiAgY29uc3QgcXVlcnkgPSBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucyhcbiAgICBudWxsLFxuICAgIHNob3dNYXR1cmUgPT09IGZhbHNlID8geyBuc2Z3OiBmYWxzZSwgaXNCYWNrZ3JvdW5kU2VhcmNoOiBmYWxzZSB9IDogeyBpc0JhY2tncm91bmRTZWFyY2g6IGZhbHNlIH1cbiAgKShzdGF0ZSk7XG4gIGNvbnN0IHVyaXMgPSBtYWtlU2VsZWN0U2VhcmNoVXJpcyhxdWVyeSkoc3RhdGUpO1xuXG4gIHJldHVybiB7XG4gICAgaXNTZWFyY2hpbmc6IHNlbGVjdElzU2VhcmNoaW5nKHN0YXRlKSxcbiAgICBzaG93TnNmdzogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuU0hPV19NQVRVUkUpKHN0YXRlKSxcbiAgICB1cmlzOiB1cmlzLFxuICAgIGlzQXV0aGVudGljYXRlZDogc2VsZWN0VXNlclZlcmlmaWVkRW1haWwoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNlYXJjaDogKHF1ZXJ5LCBvcHRpb25zKSA9PiBkaXNwYXRjaChkb1NlYXJjaChxdWVyeSwgb3B0aW9ucykpLFxuICBvbkZlZWRiYWNrUG9zaXRpdmU6IHF1ZXJ5ID0+IHtcbiAgICBhbmFseXRpY3MuYXBpU2VhcmNoRmVlZGJhY2socXVlcnksIDEpO1xuICAgIGRpc3BhdGNoKFxuICAgICAgZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IF9fKCdUaGFua3MgZm9yIHRoZSBmZWVkYmFjayEgWW91IGhlbHAgbWFrZSB0aGUgYXBwIGJldHRlciBmb3IgZXZlcnlvbmUuJyksXG4gICAgICB9KVxuICAgICk7XG4gIH0sXG4gIG9uRmVlZGJhY2tOZWdhdGl2ZTogcXVlcnkgPT4ge1xuICAgIGFuYWx5dGljcy5hcGlTZWFyY2hGZWVkYmFjayhxdWVyeSwgMCk7XG4gICAgZGlzcGF0Y2goXG4gICAgICBkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogX18oXG4gICAgICAgICAgJ1RoYW5rcyBmb3IgdGhlIGZlZWRiYWNrLiBNYXJrIGhhcyBiZWVuIG5vdGlmaWVkIGFuZCBpcyBjdXJyZW50bHkgd2Fsa2luZyBvdmVyIHRvIGhpcyBjb21wdXRlciB0byB3b3JrIG9uIHRoaXMuJ1xuICAgICAgICApLFxuICAgICAgfSlcbiAgICApO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCBwZXJmb3JtKShTZWFyY2hQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBUkE7QUFDQTtBQWVBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQURBO0FBTEE7QUFVQTtBQUNBO0FBQ0E7QUFFQTtBQURBO0FBTUE7QUFuQkE7QUFBQTtBQUNBO0FBcUJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/search/index.js\n"); - -/***/ }), - -/***/ "../ui/page/search/view.jsx": -/*!**********************************!*\ - !*** ../ui/page/search/view.jsx ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return SearchPage; });\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var component_claimPreview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/claimPreview */ \"../ui/component/claimPreview/index.js\");\n/* harmony import */ var component_claimList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/claimList */ \"../ui/component/claimList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_searchOptions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/searchOptions */ \"../ui/component/searchOptions/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_claimUri__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/claimUri */ \"../ui/component/claimUri/index.js\");\n/* harmony import */ var lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lbrytv/component/ads */ \"./component/ads.jsx\");\n\n\n\n\n\n\n\n\n\n\n\nfunction SearchPage(props) {\n var search = props.search,\n uris = props.uris,\n onFeedbackPositive = props.onFeedbackPositive,\n onFeedbackNegative = props.onFeedbackNegative,\n location = props.location,\n isSearching = props.isSearching,\n showNsfw = props.showNsfw,\n isAuthenticated = props.isAuthenticated;\n var urlParams = new URLSearchParams(location.search);\n var urlQuery = urlParams.get('q') || '';\n var additionalOptions = {\n isBackgroundSearch: false\n };\n\n if (!showNsfw) {\n additionalOptions['nsfw'] = false;\n }\n\n var INVALID_URI_CHARS = new RegExp(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"regexInvalidURI\"], 'gu');\n var isValid = false;\n var path;\n\n try {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(urlQuery.replace(/ /g, '-').replace(/:/g, '#'));\n\n path = _parseURI.path;\n isValid = true;\n } catch (e) {\n isValid = false;\n }\n\n var modifiedUrlQuery = isValid && path ? path : urlQuery.trim().replace(/\\s+/g, '-').replace(INVALID_URI_CHARS, '');\n var uriFromQuery = \"lbry://\".concat(modifiedUrlQuery);\n Object(react__WEBPACK_IMPORTED_MODULE_2__[\"useEffect\"])(function () {\n if (urlQuery) {\n search(urlQuery, additionalOptions);\n }\n }, [search, urlQuery]);\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"section\", {\n className: \"search\"\n }, urlQuery && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"header\", {\n className: \"search__header\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"claim-preview__actions--header\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimUri__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n uri: uriFromQuery,\n noShortUrl: true\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n button: \"link\",\n className: \"media__uri--right\",\n label: __('View top claims for %normalized_uri%', {\n normalized_uri: uriFromQuery\n }),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_1__[\"TOP\"], \"?name=\").concat(modifiedUrlQuery),\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"TOP\"]\n })), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimPreview__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uriFromQuery,\n type: \"large\",\n placeholder: \"publish\"\n }))), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimList__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n uris: uris,\n loading: isSearching,\n header: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_searchOptions__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n additionalOptions: additionalOptions\n }),\n injectedItem: !isAuthenticated && true && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(lbrytv_component_ads__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n type: \"video\"\n }),\n headerAltControls: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, __('Find what you were looking for?')), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n button: \"alt\",\n description: __('Yes'),\n onClick: function onClick() {\n return onFeedbackPositive(urlQuery);\n },\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"YES\"]\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n button: \"alt\",\n description: __('No'),\n onClick: function onClick() {\n return onFeedbackNegative(urlQuery);\n },\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_0__[\"NO\"]\n }))\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"div\", {\n className: \"help\"\n }, __('These search results are provided by LBRY, Inc.')))));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zZWFyY2gvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zZWFyY2gvdmlldy5qc3g/ZDlkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlZ2V4SW52YWxpZFVSSSwgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDbGFpbVByZXZpZXcgZnJvbSAnY29tcG9uZW50L2NsYWltUHJldmlldyc7XG5pbXBvcnQgQ2xhaW1MaXN0IGZyb20gJ2NvbXBvbmVudC9jbGFpbUxpc3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IFNlYXJjaE9wdGlvbnMgZnJvbSAnY29tcG9uZW50L3NlYXJjaE9wdGlvbnMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBDbGFpbVVyaSBmcm9tICdjb21wb25lbnQvY2xhaW1VcmknO1xuaW1wb3J0IEFkcyBmcm9tICdsYnJ5dHYvY29tcG9uZW50L2Fkcyc7XG5cbnR5cGUgQWRkaXRpb25hbE9wdGlvbnMgPSB7XG4gIGlzQmFja2dyb3VuZFNlYXJjaDogYm9vbGVhbixcbiAgbnNmdz86IGJvb2xlYW4sXG59O1xuXG50eXBlIFByb3BzID0ge1xuICBzZWFyY2g6IChzdHJpbmcsIEFkZGl0aW9uYWxPcHRpb25zKSA9PiB2b2lkLFxuICBpc1NlYXJjaGluZzogYm9vbGVhbixcbiAgbG9jYXRpb246IFVybExvY2F0aW9uLFxuICB1cmlzOiBBcnJheTxzdHJpbmc+LFxuICBvbkZlZWRiYWNrTmVnYXRpdmU6IHN0cmluZyA9PiB2b2lkLFxuICBvbkZlZWRiYWNrUG9zaXRpdmU6IHN0cmluZyA9PiB2b2lkLFxuICBzaG93TnNmdzogYm9vbGVhbixcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VhcmNoUGFnZShwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHNlYXJjaCxcbiAgICB1cmlzLFxuICAgIG9uRmVlZGJhY2tQb3NpdGl2ZSxcbiAgICBvbkZlZWRiYWNrTmVnYXRpdmUsXG4gICAgbG9jYXRpb24sXG4gICAgaXNTZWFyY2hpbmcsXG4gICAgc2hvd05zZncsXG4gICAgaXNBdXRoZW50aWNhdGVkLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgY29uc3QgdXJsUXVlcnkgPSB1cmxQYXJhbXMuZ2V0KCdxJykgfHwgJyc7XG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zOiBBZGRpdGlvbmFsT3B0aW9ucyA9IHsgaXNCYWNrZ3JvdW5kU2VhcmNoOiBmYWxzZSB9O1xuICBpZiAoIXNob3dOc2Z3KSB7XG4gICAgYWRkaXRpb25hbE9wdGlvbnNbJ25zZncnXSA9IGZhbHNlO1xuICB9XG5cbiAgY29uc3QgSU5WQUxJRF9VUklfQ0hBUlMgPSBuZXcgUmVnRXhwKHJlZ2V4SW52YWxpZFVSSSwgJ2d1Jyk7XG4gIGxldCBpc1ZhbGlkID0gZmFsc2U7XG4gIGxldCBwYXRoO1xuICB0cnkge1xuICAgICh7IHBhdGggfSA9IHBhcnNlVVJJKHVybFF1ZXJ5LnJlcGxhY2UoLyAvZywgJy0nKS5yZXBsYWNlKC86L2csICcjJykpKTtcbiAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkVXJsUXVlcnkgPVxuICAgIGlzVmFsaWQgJiYgcGF0aFxuICAgICAgPyBwYXRoXG4gICAgICA6IHVybFF1ZXJ5XG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAgICAgICAucmVwbGFjZShJTlZBTElEX1VSSV9DSEFSUywgJycpO1xuICBjb25zdCB1cmlGcm9tUXVlcnkgPSBgbGJyeTovLyR7bW9kaWZpZWRVcmxRdWVyeX1gO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHVybFF1ZXJ5KSB7XG4gICAgICBzZWFyY2godXJsUXVlcnksIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtzZWFyY2gsIHVybFF1ZXJ5XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnZT5cbiAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInNlYXJjaFwiPlxuICAgICAgICB7dXJsUXVlcnkgJiYgKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwic2VhcmNoX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGFpbS1wcmV2aWV3X19hY3Rpb25zLS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8Q2xhaW1VcmkgdXJpPXt1cmlGcm9tUXVlcnl9IG5vU2hvcnRVcmwgLz5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b249XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1lZGlhX191cmktLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnVmlldyB0b3AgY2xhaW1zIGZvciAlbm9ybWFsaXplZF91cmklJywge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkX3VyaTogdXJpRnJvbVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuVE9QfT9uYW1lPSR7bW9kaWZpZWRVcmxRdWVyeX1gfVxuICAgICAgICAgICAgICAgICAgaWNvbj17SUNPTlMuVE9QfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICA8Q2xhaW1QcmV2aWV3IHVyaT17dXJpRnJvbVF1ZXJ5fSB0eXBlPVwibGFyZ2VcIiBwbGFjZWhvbGRlcj1cInB1Ymxpc2hcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgICAgICA8Q2xhaW1MaXN0XG4gICAgICAgICAgICAgIHVyaXM9e3VyaXN9XG4gICAgICAgICAgICAgIGxvYWRpbmc9e2lzU2VhcmNoaW5nfVxuICAgICAgICAgICAgICBoZWFkZXI9ezxTZWFyY2hPcHRpb25zIGFkZGl0aW9uYWxPcHRpb25zPXthZGRpdGlvbmFsT3B0aW9uc30gLz59XG4gICAgICAgICAgICAgIGluamVjdGVkSXRlbT17IWlzQXV0aGVudGljYXRlZCAmJiBJU19XRUIgJiYgPEFkcyB0eXBlPVwidmlkZW9cIiAvPn1cbiAgICAgICAgICAgICAgaGVhZGVyQWx0Q29udHJvbHM9e1xuICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntfXygnRmluZCB3aGF0IHlvdSB3ZXJlIGxvb2tpbmcgZm9yPycpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e19fKCdZZXMnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25GZWVkYmFja1Bvc2l0aXZlKHVybFF1ZXJ5KX1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj17SUNPTlMuWUVTfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uPVwiYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e19fKCdObycpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkZlZWRiYWNrTmVnYXRpdmUodXJsUXVlcnkpfVxuICAgICAgICAgICAgICAgICAgICBpY29uPXtJQ09OUy5OT31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWxwXCI+e19fKCdUaGVzZSBzZWFyY2ggcmVzdWx0cyBhcmUgcHJvdmlkZWQgYnkgTEJSWSwgSW5jLicpfTwvZGl2PlxuICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9QYWdlPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFrQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFFQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVBBO0FBVUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUhBO0FBSUE7QUFKQTtBQWRBO0FBd0JBO0FBQUE7QUFNQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/search/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/settings/index.js": -/*!************************************!*\ - !*** ../ui/page/settings/index.js ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./view */ \"../ui/page/settings/view.jsx\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n daemonSettings: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectDaemonSettings\"])(state),\n allowAnalytics: Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_2__[\"selectAllowAnalytics\"])(state),\n isAuthenticated: Object(lbryinc__WEBPACK_IMPORTED_MODULE_8__[\"selectUserVerifiedEmail\"])(state),\n showNsfw: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].SHOW_MATURE)(state),\n instantPurchaseEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].INSTANT_PURCHASE_ENABLED)(state),\n instantPurchaseMax: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].INSTANT_PURCHASE_MAX)(state),\n currentTheme: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].THEME)(state),\n themes: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].THEMES)(state),\n automaticDarkModeEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].AUTOMATIC_DARK_MODE_ENABLED)(state),\n autoplay: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].AUTOPLAY)(state),\n walletEncrypted: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"selectWalletIsEncrypted\"])(state),\n osNotificationsEnabled: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectosNotificationsEnabled\"])(state),\n autoDownload: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].AUTO_DOWNLOAD)(state),\n supportOption: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].SUPPORT_OPTION)(state),\n userBlockedChannelsCount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"selectBlockedChannelsCount\"])(state),\n hideBalance: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].HIDE_BALANCE)(state),\n floatingPlayer: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].FLOATING_PLAYER)(state),\n showReposts: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].SHOW_REPOSTS)(state),\n darkModeTimes: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"SETTINGS\"].DARK_MODE_TIMES)(state),\n ffmpegStatus: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectFfmpegStatus\"])(state),\n findingFFmpeg: Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"selectFindingFFmpeg\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n setDaemonSetting: function setDaemonSetting(key, value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doSetDaemonSetting\"])(key, value));\n },\n clearDaemonSetting: function clearDaemonSetting(key) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doClearDaemonSetting\"])(key));\n },\n toggle3PAnalytics: function toggle3PAnalytics(allow) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doToggle3PAnalytics\"])(allow));\n },\n clearCache: function clearCache() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doClearCache\"])());\n },\n setClientSetting: function setClientSetting(key, value) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doSetClientSetting\"])(key, value));\n },\n encryptWallet: function encryptWallet() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doNotifyEncryptWallet\"])());\n },\n decryptWallet: function decryptWallet() {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doNotifyDecryptWallet\"])());\n },\n updateWalletStatus: function updateWalletStatus() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_6__[\"doWalletStatus\"])());\n },\n confirmForgetPassword: function confirmForgetPassword(modalProps) {\n return dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doNotifyForgetPassword\"])(modalProps));\n },\n clearPlayingUri: function clearPlayingUri() {\n return dispatch(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"doSetPlayingUri\"])(null));\n },\n setDarkTime: function setDarkTime(time, options) {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doSetDarkTime\"])(time, options));\n },\n findFFmpeg: function findFFmpeg() {\n return dispatch(Object(redux_actions_settings__WEBPACK_IMPORTED_MODULE_3__[\"doFindFFmpeg\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_7__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zZXR0aW5ncy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL3NldHRpbmdzL2luZGV4LmpzPzRhOWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIGRvQ2xlYXJDYWNoZSxcbiAgZG9Ob3RpZnlFbmNyeXB0V2FsbGV0LFxuICBkb05vdGlmeURlY3J5cHRXYWxsZXQsXG4gIGRvTm90aWZ5Rm9yZ2V0UGFzc3dvcmQsXG4gIGRvVG9nZ2xlM1BBbmFseXRpY3MsXG59IGZyb20gJ3JlZHV4L2FjdGlvbnMvYXBwJztcbmltcG9ydCB7IHNlbGVjdEFsbG93QW5hbHl0aWNzIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2FwcCc7XG5pbXBvcnQge1xuICBkb1NldERhZW1vblNldHRpbmcsXG4gIGRvQ2xlYXJEYWVtb25TZXR0aW5nLFxuICBkb1NldENsaWVudFNldHRpbmcsXG4gIGRvU2V0RGFya1RpbWUsXG4gIGRvRmluZEZGbXBlZyxcbn0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1NldFBsYXlpbmdVcmkgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2NvbnRlbnQnO1xuaW1wb3J0IHtcbiAgbWFrZVNlbGVjdENsaWVudFNldHRpbmcsXG4gIHNlbGVjdERhZW1vblNldHRpbmdzLFxuICBzZWxlY3RGZm1wZWdTdGF0dXMsXG4gIHNlbGVjdG9zTm90aWZpY2F0aW9uc0VuYWJsZWQsXG4gIHNlbGVjdEZpbmRpbmdGRm1wZWcsXG59IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb1dhbGxldFN0YXR1cywgc2VsZWN0V2FsbGV0SXNFbmNyeXB0ZWQsIHNlbGVjdEJsb2NrZWRDaGFubmVsc0NvdW50LCBTRVRUSU5HUyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFNldHRpbmdzUGFnZSBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgfSBmcm9tICdsYnJ5aW5jJztcblxuY29uc3Qgc2VsZWN0ID0gc3RhdGUgPT4gKHtcbiAgZGFlbW9uU2V0dGluZ3M6IHNlbGVjdERhZW1vblNldHRpbmdzKHN0YXRlKSxcbiAgYWxsb3dBbmFseXRpY3M6IHNlbGVjdEFsbG93QW5hbHl0aWNzKHN0YXRlKSxcbiAgaXNBdXRoZW50aWNhdGVkOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG4gIHNob3dOc2Z3OiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX01BVFVSRSkoc3RhdGUpLFxuICBpbnN0YW50UHVyY2hhc2VFbmFibGVkOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5JTlNUQU5UX1BVUkNIQVNFX0VOQUJMRUQpKHN0YXRlKSxcbiAgaW5zdGFudFB1cmNoYXNlTWF4OiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5JTlNUQU5UX1BVUkNIQVNFX01BWCkoc3RhdGUpLFxuICBjdXJyZW50VGhlbWU6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlRIRU1FKShzdGF0ZSksXG4gIHRoZW1lczogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuVEhFTUVTKShzdGF0ZSksXG4gIGF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT01BVElDX0RBUktfTU9ERV9FTkFCTEVEKShzdGF0ZSksXG4gIGF1dG9wbGF5OiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPUExBWSkoc3RhdGUpLFxuICB3YWxsZXRFbmNyeXB0ZWQ6IHNlbGVjdFdhbGxldElzRW5jcnlwdGVkKHN0YXRlKSxcbiAgb3NOb3RpZmljYXRpb25zRW5hYmxlZDogc2VsZWN0b3NOb3RpZmljYXRpb25zRW5hYmxlZChzdGF0ZSksXG4gIGF1dG9Eb3dubG9hZDogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT19ET1dOTE9BRCkoc3RhdGUpLFxuICBzdXBwb3J0T3B0aW9uOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TVVBQT1JUX09QVElPTikoc3RhdGUpLFxuICB1c2VyQmxvY2tlZENoYW5uZWxzQ291bnQ6IHNlbGVjdEJsb2NrZWRDaGFubmVsc0NvdW50KHN0YXRlKSxcbiAgaGlkZUJhbGFuY2U6IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkhJREVfQkFMQU5DRSkoc3RhdGUpLFxuICBmbG9hdGluZ1BsYXllcjogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuRkxPQVRJTkdfUExBWUVSKShzdGF0ZSksXG4gIHNob3dSZXBvc3RzOiBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX1JFUE9TVFMpKHN0YXRlKSxcbiAgZGFya01vZGVUaW1lczogbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuREFSS19NT0RFX1RJTUVTKShzdGF0ZSksXG4gIGZmbXBlZ1N0YXR1czogc2VsZWN0RmZtcGVnU3RhdHVzKHN0YXRlKSxcbiAgZmluZGluZ0ZGbXBlZzogc2VsZWN0RmluZGluZ0ZGbXBlZyhzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHNldERhZW1vblNldHRpbmc6IChrZXksIHZhbHVlKSA9PiBkaXNwYXRjaChkb1NldERhZW1vblNldHRpbmcoa2V5LCB2YWx1ZSkpLFxuICBjbGVhckRhZW1vblNldHRpbmc6IGtleSA9PiBkaXNwYXRjaChkb0NsZWFyRGFlbW9uU2V0dGluZyhrZXkpKSxcbiAgdG9nZ2xlM1BBbmFseXRpY3M6IGFsbG93ID0+IGRpc3BhdGNoKGRvVG9nZ2xlM1BBbmFseXRpY3MoYWxsb3cpKSxcbiAgY2xlYXJDYWNoZTogKCkgPT4gZGlzcGF0Y2goZG9DbGVhckNhY2hlKCkpLFxuICBzZXRDbGllbnRTZXR0aW5nOiAoa2V5LCB2YWx1ZSkgPT4gZGlzcGF0Y2goZG9TZXRDbGllbnRTZXR0aW5nKGtleSwgdmFsdWUpKSxcbiAgZW5jcnlwdFdhbGxldDogKCkgPT4gZGlzcGF0Y2goZG9Ob3RpZnlFbmNyeXB0V2FsbGV0KCkpLFxuICBkZWNyeXB0V2FsbGV0OiAoKSA9PiBkaXNwYXRjaChkb05vdGlmeURlY3J5cHRXYWxsZXQoKSksXG4gIHVwZGF0ZVdhbGxldFN0YXR1czogKCkgPT4gZGlzcGF0Y2goZG9XYWxsZXRTdGF0dXMoKSksXG4gIGNvbmZpcm1Gb3JnZXRQYXNzd29yZDogbW9kYWxQcm9wcyA9PiBkaXNwYXRjaChkb05vdGlmeUZvcmdldFBhc3N3b3JkKG1vZGFsUHJvcHMpKSxcbiAgY2xlYXJQbGF5aW5nVXJpOiAoKSA9PiBkaXNwYXRjaChkb1NldFBsYXlpbmdVcmkobnVsbCkpLFxuICBzZXREYXJrVGltZTogKHRpbWUsIG9wdGlvbnMpID0+IGRpc3BhdGNoKGRvU2V0RGFya1RpbWUodGltZSwgb3B0aW9ucykpLFxuICBmaW5kRkZtcGVnOiAoKSA9PiBkaXNwYXRjaChkb0ZpbmRGRm1wZWcoKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFNldHRpbmdzUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFPQTtBQUNBO0FBT0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQUFBO0FBQ0E7QUF1QkE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUVBO0FBQUE7QUFGQTtBQUdBO0FBQUE7QUFIQTtBQUlBO0FBQUE7QUFKQTtBQUtBO0FBQUE7QUFMQTtBQU1BO0FBQUE7QUFOQTtBQU9BO0FBQUE7QUFQQTtBQVFBO0FBQUE7QUFSQTtBQVNBO0FBQUE7QUFUQTtBQVVBO0FBQUE7QUFWQTtBQVdBO0FBQUE7QUFYQTtBQVlBO0FBQUE7QUFBQTtBQVpBO0FBQUE7QUFDQTtBQWNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/settings/index.js\n"); - -/***/ }), - -/***/ "../ui/page/settings/view.jsx": -/*!************************************!*\ - !*** ../ui/page/settings/view.jsx ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var component_common_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/form */ \"../ui/component/common/form.jsx\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_settingLanguage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/settingLanguage */ \"../ui/component/settingLanguage/index.js\");\n/* harmony import */ var component_settingWalletServer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/settingWalletServer */ \"../ui/component/settingWalletServer/index.js\");\n/* harmony import */ var component_settingAutoLaunch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/settingAutoLaunch */ \"../ui/component/settingAutoLaunch/index.js\");\n/* harmony import */ var component_common_file_selector__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! component/common/file-selector */ \"../ui/component/common/file-selector.jsx\");\n/* harmony import */ var component_syncToggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! component/syncToggle */ \"../ui/component/syncToggle/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var component_spinner__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! component/spinner */ \"../ui/component/spinner/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n/* eslint react/no-unescaped-entities:0 */\n\n/* eslint react/jsx-no-comment-textnodes:0 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SettingsPage = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(SettingsPage, _React$PureComponent);\n\n function SettingsPage(props) {\n var _this;\n\n _classCallCheck(this, SettingsPage);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SettingsPage).call(this, props));\n _this.state = {\n clearingCache: false,\n storedPassword: false\n };\n _assertThisInitialized(_this).onKeyFeeChange = _this.onKeyFeeChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onMaxConnectionsChange = _this.onMaxConnectionsChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onKeyFeeDisableChange = _this.onKeyFeeDisableChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onInstantPurchaseMaxChange = _this.onInstantPurchaseMaxChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onThemeChange = _this.onThemeChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onAutomaticDarkModeChange = _this.onAutomaticDarkModeChange.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onChangeTime = _this.onChangeTime.bind(_assertThisInitialized(_this));\n _assertThisInitialized(_this).onConfirmForgetPassword = _this.onConfirmForgetPassword.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(SettingsPage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n var _this$props = this.props,\n isAuthenticated = _this$props.isAuthenticated,\n ffmpegStatus = _this$props.ffmpegStatus,\n daemonSettings = _this$props.daemonSettings,\n findFFmpeg = _this$props.findFFmpeg;\n\n if (isAuthenticated || !true) {\n this.props.updateWalletStatus();\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__[\"getPasswordFromCookie\"])().then(function (p) {\n if (typeof p === 'string') {\n _this2.setState({\n storedPassword: true\n });\n }\n });\n }\n }\n }, {\n key: \"onFFmpegFolder\",\n value: function onFFmpegFolder(path) {\n this.setDaemonSetting('ffmpeg_path', path);\n this.findFFmpeg();\n }\n }, {\n key: \"onKeyFeeChange\",\n value: function onKeyFeeChange(newValue) {\n this.setDaemonSetting('max_key_fee', newValue);\n }\n }, {\n key: \"onMaxConnectionsChange\",\n value: function onMaxConnectionsChange(event) {\n var value = event.target.value;\n this.setDaemonSetting('max_connections_per_download', value);\n }\n }, {\n key: \"onKeyFeeDisableChange\",\n value: function onKeyFeeDisableChange(isDisabled) {\n if (isDisabled) this.setDaemonSetting('max_key_fee');\n }\n }, {\n key: \"onThemeChange\",\n value: function onThemeChange(event) {\n var value = event.target.value;\n\n if (value === 'dark') {\n this.onAutomaticDarkModeChange(false);\n }\n\n this.props.setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].THEME, value);\n }\n }, {\n key: \"onAutomaticDarkModeChange\",\n value: function onAutomaticDarkModeChange(value) {\n this.props.setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].AUTOMATIC_DARK_MODE_ENABLED, value);\n }\n }, {\n key: \"onInstantPurchaseEnabledChange\",\n value: function onInstantPurchaseEnabledChange(enabled) {\n this.props.setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].INSTANT_PURCHASE_ENABLED, enabled);\n }\n }, {\n key: \"onInstantPurchaseMaxChange\",\n value: function onInstantPurchaseMaxChange(newValue) {\n this.props.setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].INSTANT_PURCHASE_MAX, newValue);\n }\n }, {\n key: \"onChangeEncryptWallet\",\n value: function onChangeEncryptWallet() {\n var _this$props2 = this.props,\n decryptWallet = _this$props2.decryptWallet,\n walletEncrypted = _this$props2.walletEncrypted,\n encryptWallet = _this$props2.encryptWallet;\n\n if (walletEncrypted) {\n decryptWallet();\n } else {\n encryptWallet();\n }\n }\n }, {\n key: \"onConfirmForgetPassword\",\n value: function onConfirmForgetPassword() {\n var _this3 = this;\n\n var confirmForgetPassword = this.props.confirmForgetPassword;\n confirmForgetPassword({\n callback: function callback() {\n _this3.setState({\n storedPassword: false\n });\n }\n });\n }\n }, {\n key: \"onChangeTime\",\n value: function onChangeTime(event, options) {\n var value = event.target.value;\n this.props.setDarkTime(value, options);\n }\n }, {\n key: \"to12Hour\",\n value: function to12Hour(time) {\n var now = new Date(0, 0, 0, Number(time));\n var hour = now.toLocaleTimeString('en-US', {\n hour12: true,\n hour: '2-digit'\n });\n return hour;\n }\n }, {\n key: \"setDaemonSetting\",\n value: function setDaemonSetting(name, value) {\n this.props.setDaemonSetting(name, value);\n }\n }, {\n key: \"clearDaemonSetting\",\n value: function clearDaemonSetting(name) {\n this.props.clearDaemonSetting(name);\n }\n }, {\n key: \"findFFmpeg\",\n value: function findFFmpeg() {\n this.props.findFFmpeg();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this4 = this;\n\n var _this$props3 = this.props,\n daemonSettings = _this$props3.daemonSettings,\n ffmpegStatus = _this$props3.ffmpegStatus,\n allowAnalytics = _this$props3.allowAnalytics,\n showNsfw = _this$props3.showNsfw,\n instantPurchaseEnabled = _this$props3.instantPurchaseEnabled,\n instantPurchaseMax = _this$props3.instantPurchaseMax,\n isAuthenticated = _this$props3.isAuthenticated,\n currentTheme = _this$props3.currentTheme,\n themes = _this$props3.themes,\n automaticDarkModeEnabled = _this$props3.automaticDarkModeEnabled,\n autoplay = _this$props3.autoplay,\n walletEncrypted = _this$props3.walletEncrypted,\n osNotificationsEnabled = _this$props3.osNotificationsEnabled,\n setDaemonSetting = _this$props3.setDaemonSetting,\n setClientSetting = _this$props3.setClientSetting,\n toggle3PAnalytics = _this$props3.toggle3PAnalytics,\n supportOption = _this$props3.supportOption,\n hideBalance = _this$props3.hideBalance,\n userBlockedChannelsCount = _this$props3.userBlockedChannelsCount,\n floatingPlayer = _this$props3.floatingPlayer,\n clearPlayingUri = _this$props3.clearPlayingUri,\n darkModeTimes = _this$props3.darkModeTimes,\n clearCache = _this$props3.clearCache,\n findingFFmpeg = _this$props3.findingFFmpeg;\n var storedPassword = this.state.storedPassword;\n var noDaemonSettings = !daemonSettings || Object.keys(daemonSettings).length === 0;\n var defaultMaxKeyFee = {\n currency: 'USD',\n amount: 50\n };\n var disableMaxKeyFee = !(daemonSettings && daemonSettings.max_key_fee);\n var connectionOptions = [1, 2, 4, 6, 10, 20];\n var startHours = ['18', '19', '20', '21'];\n var endHours = ['5', '6', '7', '8'];\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"card-stack\"\n }, false ? undefined : react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"div\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Language'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_settingLanguage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null)\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Content Settings'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"floating_player\",\n onChange: function onChange() {\n setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].FLOATING_PLAYER, !floatingPlayer);\n clearPlayingUri();\n },\n checked: floatingPlayer,\n label: __('Floating video player'),\n helper: __('Keep content playing in the corner when navigating to a different page.')\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"autoplay\",\n onChange: function onChange() {\n return setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].AUTOPLAY, !autoplay);\n },\n checked: autoplay,\n label: __('Autoplay media files'),\n helper: __('Autoplay video and audio files when navigating to a file, as well as the next related item when a file finishes playing.')\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"show_nsfw\",\n onChange: function onChange() {\n return setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].SHOW_MATURE, !showNsfw);\n },\n checked: showNsfw,\n label: __('Show mature content'),\n helper: __('Mature content may include nudity, intense sexuality, profanity, or other adult content. By displaying mature content, you are affirming you are of legal age to view mature content in your country or jurisdiction. ')\n }))\n }), (isAuthenticated || !true) && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Blocked Channels'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"p\", null, __('Blocked Channels'), \": \", userBlockedChannelsCount, \" \", ' ', react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('Manage'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"BLOCKED\"])\n }), \".\")\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Appearance'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n name: \"theme_select\",\n type: \"select\",\n label: __('Theme'),\n onChange: this.onThemeChange,\n value: currentTheme,\n disabled: automaticDarkModeEnabled\n }, themes.map(function (theme) {\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"option\", {\n key: theme,\n value: theme\n }, theme === 'light' ? __('Light') : __('Dark'));\n }))), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"fieldset-section\", null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"automatic_dark_mode\",\n onChange: function onChange() {\n return _this4.onAutomaticDarkModeChange(!automaticDarkModeEnabled);\n },\n checked: automaticDarkModeEnabled,\n label: __('Automatic dark mode')\n }), automaticDarkModeEnabled && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"fieldset-group\", {\n \"class\": \"fieldset-group--smushed\"\n }, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"select\",\n name: \"automatic_dark_mode_range\",\n onChange: function onChange(value) {\n return _this4.onChangeTime(value, {\n fromTo: 'from',\n time: 'hour'\n });\n },\n value: darkModeTimes.from.hour,\n label: __('From')\n }, startHours.map(function (time) {\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"option\", {\n key: time,\n value: time\n }, _this4.to12Hour(time));\n })), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"select\",\n name: \"automatic_dark_mode_range\",\n label: __('To'),\n onChange: function onChange(value) {\n return _this4.onChangeTime(value, {\n fromTo: 'to',\n time: 'hour'\n });\n },\n value: darkModeTimes.to.hour\n }, endHours.map(function (time) {\n return react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"option\", {\n key: time,\n value: time\n }, _this4.to12Hour(time));\n })))))\n }), (isAuthenticated || !true) && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Wallet Security'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"hide_balance\",\n onChange: function onChange() {\n return setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].HIDE_BALANCE, !hideBalance);\n },\n checked: hideBalance,\n label: __('Hide wallet balance in header')\n }))\n }), ( false || isAuthenticated) && react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Experimental Settings'),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_1__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_form__WEBPACK_IMPORTED_MODULE_2__[\"FormField\"], {\n type: \"checkbox\",\n name: \"support_option\",\n onChange: function onChange() {\n return setClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].SUPPORT_OPTION, !supportOption);\n },\n checked: supportOption,\n label: __('Enable claim support'),\n helper: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_i18nMessage__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tokens: {\n discovery_link: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('discovery'),\n href: \"https://lbry.com/faq/trending\"\n }),\n vanity_names_link: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('vanity names'),\n href: \"https://lbry.com/faq/naming\"\n })\n }\n }, \"This will add a Support button along side tipping. Similar to tips, supports help %discovery_link% but the LBC is returned to your wallet if revoked. Both also help secure your %vanity_names_link%.\")\n }))\n }), react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_common_card__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: __('Application Cache'),\n subtitle: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](\"p\", {\n className: \"section__subtitle\"\n }, __('This will clear the application cache, and might fix issues you are having. Your wallet will not be affected. ')),\n actions: react__WEBPACK_IMPORTED_MODULE_1__[\"createElement\"](component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"secondary\",\n label: this.state.clearingCache ? __('Clearing') : __('Clear Cache'),\n onClick: clearCache,\n disabled: this.state.clearingCache\n })\n })));\n }\n }]);\n\n return SettingsPage;\n}(react__WEBPACK_IMPORTED_MODULE_1__[\"PureComponent\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SettingsPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zZXR0aW5ncy92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9wYWdlL3NldHRpbmdzL3ZpZXcuanN4Pzg0MTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbi8qIGVzbGludCByZWFjdC9uby11bmVzY2FwZWQtZW50aXRpZXM6MCAqL1xuLyogZXNsaW50IHJlYWN0L2pzeC1uby1jb21tZW50LXRleHRub2RlczowICovXG5cbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybUZpZWxkUHJpY2UgfSBmcm9tICdjb21wb25lbnQvY29tbW9uL2Zvcm0nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IFNldHRpbmdMYW5ndWFnZSBmcm9tICdjb21wb25lbnQvc2V0dGluZ0xhbmd1YWdlJztcbmltcG9ydCBTZXR0aW5nV2FsbGV0U2VydmVyIGZyb20gJ2NvbXBvbmVudC9zZXR0aW5nV2FsbGV0U2VydmVyJztcbmltcG9ydCBTZXR0aW5nQXV0b0xhdW5jaCBmcm9tICdjb21wb25lbnQvc2V0dGluZ0F1dG9MYXVuY2gnO1xuaW1wb3J0IEZpbGVTZWxlY3RvciBmcm9tICdjb21wb25lbnQvY29tbW9uL2ZpbGUtc2VsZWN0b3InO1xuaW1wb3J0IFN5bmNUb2dnbGUgZnJvbSAnY29tcG9uZW50L3N5bmNUb2dnbGUnO1xuaW1wb3J0IHsgU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCBDYXJkIGZyb20gJ2NvbXBvbmVudC9jb21tb24vY2FyZCc7XG5pbXBvcnQgeyBnZXRQYXNzd29yZEZyb21Db29raWUgfSBmcm9tICd1dGlsL3NhdmVkLXBhc3N3b3Jkcyc7XG5pbXBvcnQgU3Bpbm5lciBmcm9tICdjb21wb25lbnQvc3Bpbm5lcic7XG5cblxudHlwZSBQcmljZSA9IHtcbiAgY3VycmVuY3k6IHN0cmluZyxcbiAgYW1vdW50OiBudW1iZXIsXG59O1xuXG50eXBlIFNldERhZW1vblNldHRpbmdBcmcgPSBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgUHJpY2U7XG5cbnR5cGUgRGFya01vZGVUaW1lcyA9IHtcbiAgZnJvbTogeyBob3VyOiBzdHJpbmcsIG1pbjogc3RyaW5nLCBmb3JtYXR0ZWRUaW1lOiBzdHJpbmcgfSxcbiAgdG86IHsgaG91cjogc3RyaW5nLCBtaW46IHN0cmluZywgZm9ybWF0dGVkVGltZTogc3RyaW5nIH0sXG59O1xuXG50eXBlIE9wdGlvblRpbWVzID0ge1xuICBmcm9tVG86IHN0cmluZyxcbiAgdGltZTogc3RyaW5nLFxufTtcblxudHlwZSBEYWVtb25TZXR0aW5ncyA9IHtcbiAgZG93bmxvYWRfZGlyOiBzdHJpbmcsXG4gIHNoYXJlX3VzYWdlX2RhdGE6IGJvb2xlYW4sXG4gIG1heF9rZXlfZmVlPzogUHJpY2UsXG4gIG1heF9jb25uZWN0aW9uc19wZXJfZG93bmxvYWQ/OiBudW1iZXIsXG4gIHNhdmVfZmlsZXM6IGJvb2xlYW4sXG4gIHNhdmVfYmxvYnM6IGJvb2xlYW4sXG4gIGZmbXBlZ19wYXRoOiBzdHJpbmcsXG59O1xuXG50eXBlIFByb3BzID0ge1xuICBzZXREYWVtb25TZXR0aW5nOiAoc3RyaW5nLCA/U2V0RGFlbW9uU2V0dGluZ0FyZykgPT4gdm9pZCxcbiAgY2xlYXJEYWVtb25TZXR0aW5nOiBzdHJpbmcgPT4gdm9pZCxcbiAgc2V0Q2xpZW50U2V0dGluZzogKHN0cmluZywgU2V0RGFlbW9uU2V0dGluZ0FyZykgPT4gdm9pZCxcbiAgdG9nZ2xlM1BBbmFseXRpY3M6IGJvb2xlYW4gPT4gdm9pZCxcbiAgY2xlYXJDYWNoZTogKCkgPT4gUHJvbWlzZTxhbnk+LFxuICBkYWVtb25TZXR0aW5nczogRGFlbW9uU2V0dGluZ3MsXG4gIGFsbG93QW5hbHl0aWNzOiBib29sZWFuLFxuICBzaG93TnNmdzogYm9vbGVhbixcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuLFxuICBpbnN0YW50UHVyY2hhc2VFbmFibGVkOiBib29sZWFuLFxuICBpbnN0YW50UHVyY2hhc2VNYXg6IFByaWNlLFxuICBjdXJyZW50VGhlbWU6IHN0cmluZyxcbiAgdGhlbWVzOiBBcnJheTxzdHJpbmc+LFxuICBhdXRvbWF0aWNEYXJrTW9kZUVuYWJsZWQ6IGJvb2xlYW4sXG4gIGF1dG9wbGF5OiBib29sZWFuLFxuICAvLyBhdXRvRG93bmxvYWQ6IGJvb2xlYW4sXG4gIGVuY3J5cHRXYWxsZXQ6ICgpID0+IHZvaWQsXG4gIGRlY3J5cHRXYWxsZXQ6ICgpID0+IHZvaWQsXG4gIHVwZGF0ZVdhbGxldFN0YXR1czogKCkgPT4gdm9pZCxcbiAgd2FsbGV0RW5jcnlwdGVkOiBib29sZWFuLFxuICBvc05vdGlmaWNhdGlvbnNFbmFibGVkOiBib29sZWFuLFxuICBzdXBwb3J0T3B0aW9uOiBib29sZWFuLFxuICB1c2VyQmxvY2tlZENoYW5uZWxzQ291bnQ/OiBudW1iZXIsXG4gIGhpZGVCYWxhbmNlOiBib29sZWFuLFxuICBjb25maXJtRm9yZ2V0UGFzc3dvcmQ6ICh7fSkgPT4gdm9pZCxcbiAgZmxvYXRpbmdQbGF5ZXI6IGJvb2xlYW4sXG4gIC8vIHNob3dSZXBvc3RzOiBib29sZWFuLFxuICBjbGVhclBsYXlpbmdVcmk6ICgpID0+IHZvaWQsXG4gIGRhcmtNb2RlVGltZXM6IERhcmtNb2RlVGltZXMsXG4gIHNldERhcmtUaW1lOiAoc3RyaW5nLCB7fSkgPT4gdm9pZCxcbiAgZmZtcGVnU3RhdHVzOiB7IGF2YWlsYWJsZTogYm9vbGVhbiwgd2hpY2g6IHN0cmluZyB9LFxuICBmaW5kaW5nRkZtcGVnOiBib29sZWFuLFxuICBmaW5kRkZtcGVnOiAoKSA9PiB2b2lkLFxufTtcblxudHlwZSBTdGF0ZSA9IHtcbiAgY2xlYXJpbmdDYWNoZTogYm9vbGVhbixcbiAgc3RvcmVkUGFzc3dvcmQ6IGJvb2xlYW4sXG59O1xuXG5jbGFzcyBTZXR0aW5nc1BhZ2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY2xlYXJpbmdDYWNoZTogZmFsc2UsXG4gICAgICBzdG9yZWRQYXNzd29yZDogZmFsc2UsXG4gICAgfTtcblxuICAgICh0aGlzOiBhbnkpLm9uS2V5RmVlQ2hhbmdlID0gdGhpcy5vbktleUZlZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLm9uTWF4Q29ubmVjdGlvbnNDaGFuZ2UgPSB0aGlzLm9uTWF4Q29ubmVjdGlvbnNDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vbktleUZlZURpc2FibGVDaGFuZ2UgPSB0aGlzLm9uS2V5RmVlRGlzYWJsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLm9uSW5zdGFudFB1cmNoYXNlTWF4Q2hhbmdlID0gdGhpcy5vbkluc3RhbnRQdXJjaGFzZU1heENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICh0aGlzOiBhbnkpLm9uVGhlbWVDaGFuZ2UgPSB0aGlzLm9uVGhlbWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vbkF1dG9tYXRpY0RhcmtNb2RlQ2hhbmdlID0gdGhpcy5vbkF1dG9tYXRpY0RhcmtNb2RlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgKHRoaXM6IGFueSkub25DaGFuZ2VUaW1lID0gdGhpcy5vbkNoYW5nZVRpbWUuYmluZCh0aGlzKTtcbiAgICAodGhpczogYW55KS5vbkNvbmZpcm1Gb3JnZXRQYXNzd29yZCA9IHRoaXMub25Db25maXJtRm9yZ2V0UGFzc3dvcmQuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgaXNBdXRoZW50aWNhdGVkLCBmZm1wZWdTdGF0dXMsIGRhZW1vblNldHRpbmdzLCBmaW5kRkZtcGVnIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQgfHwgIUlTX1dFQikge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVXYWxsZXRTdGF0dXMoKTtcbiAgICAgIGdldFBhc3N3b3JkRnJvbUNvb2tpZSgpLnRoZW4ocCA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc3RvcmVkUGFzc3dvcmQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uRkZtcGVnRm9sZGVyKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuc2V0RGFlbW9uU2V0dGluZygnZmZtcGVnX3BhdGgnLCBwYXRoKTtcbiAgICB0aGlzLmZpbmRGRm1wZWcoKTtcbiAgfVxuXG4gIG9uS2V5RmVlQ2hhbmdlKG5ld1ZhbHVlOiBQcmljZSkge1xuICAgIHRoaXMuc2V0RGFlbW9uU2V0dGluZygnbWF4X2tleV9mZWUnLCBuZXdWYWx1ZSk7XG4gIH1cblxuICBvbk1heENvbm5lY3Rpb25zQ2hhbmdlKGV2ZW50OiBTeW50aGV0aWNJbnB1dEV2ZW50PCo+KSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0RGFlbW9uU2V0dGluZygnbWF4X2Nvbm5lY3Rpb25zX3Blcl9kb3dubG9hZCcsIHZhbHVlKTtcbiAgfVxuXG4gIG9uS2V5RmVlRGlzYWJsZUNoYW5nZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHRoaXMuc2V0RGFlbW9uU2V0dGluZygnbWF4X2tleV9mZWUnKTtcbiAgfVxuXG4gIG9uVGhlbWVDaGFuZ2UoZXZlbnQ6IFN5bnRoZXRpY0lucHV0RXZlbnQ8Kj4pIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAodmFsdWUgPT09ICdkYXJrJykge1xuICAgICAgdGhpcy5vbkF1dG9tYXRpY0RhcmtNb2RlQ2hhbmdlKGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLnNldENsaWVudFNldHRpbmcoU0VUVElOR1MuVEhFTUUsIHZhbHVlKTtcbiAgfVxuXG4gIG9uQXV0b21hdGljRGFya01vZGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByb3BzLnNldENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT01BVElDX0RBUktfTU9ERV9FTkFCTEVELCB2YWx1ZSk7XG4gIH1cblxuICBvbkluc3RhbnRQdXJjaGFzZUVuYWJsZWRDaGFuZ2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHJvcHMuc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5JTlNUQU5UX1BVUkNIQVNFX0VOQUJMRUQsIGVuYWJsZWQpO1xuICB9XG5cbiAgb25JbnN0YW50UHVyY2hhc2VNYXhDaGFuZ2UobmV3VmFsdWU6IFByaWNlKSB7XG4gICAgdGhpcy5wcm9wcy5zZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLklOU1RBTlRfUFVSQ0hBU0VfTUFYLCBuZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZUVuY3J5cHRXYWxsZXQoKSB7XG4gICAgY29uc3QgeyBkZWNyeXB0V2FsbGV0LCB3YWxsZXRFbmNyeXB0ZWQsIGVuY3J5cHRXYWxsZXQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHdhbGxldEVuY3J5cHRlZCkge1xuICAgICAgZGVjcnlwdFdhbGxldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNyeXB0V2FsbGV0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Db25maXJtRm9yZ2V0UGFzc3dvcmQoKSB7XG4gICAgY29uc3QgeyBjb25maXJtRm9yZ2V0UGFzc3dvcmQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uZmlybUZvcmdldFBhc3N3b3JkKHtcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdG9yZWRQYXNzd29yZDogZmFsc2UgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25DaGFuZ2VUaW1lKGV2ZW50OiBTeW50aGV0aWNJbnB1dEV2ZW50PCo+LCBvcHRpb25zOiBPcHRpb25UaW1lcykge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGV2ZW50LnRhcmdldDtcblxuICAgIHRoaXMucHJvcHMuc2V0RGFya1RpbWUodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdG8xMkhvdXIodGltZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoMCwgMCwgMCwgTnVtYmVyKHRpbWUpKTtcblxuICAgIGNvbnN0IGhvdXIgPSBub3cudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjEyOiB0cnVlLCBob3VyOiAnMi1kaWdpdCcgfSk7XG5cbiAgICByZXR1cm4gaG91cjtcbiAgfVxuXG4gIHNldERhZW1vblNldHRpbmcobmFtZTogc3RyaW5nLCB2YWx1ZTogP1NldERhZW1vblNldHRpbmdBcmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BzLnNldERhZW1vblNldHRpbmcobmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgY2xlYXJEYWVtb25TZXR0aW5nKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvcHMuY2xlYXJEYWVtb25TZXR0aW5nKG5hbWUpO1xuICB9XG5cbiAgZmluZEZGbXBlZygpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BzLmZpbmRGRm1wZWcoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkYWVtb25TZXR0aW5ncyxcbiAgICAgIGZmbXBlZ1N0YXR1cyxcbiAgICAgIGFsbG93QW5hbHl0aWNzLFxuICAgICAgc2hvd05zZncsXG4gICAgICBpbnN0YW50UHVyY2hhc2VFbmFibGVkLFxuICAgICAgaW5zdGFudFB1cmNoYXNlTWF4LFxuICAgICAgaXNBdXRoZW50aWNhdGVkLFxuICAgICAgY3VycmVudFRoZW1lLFxuICAgICAgdGhlbWVzLFxuICAgICAgYXV0b21hdGljRGFya01vZGVFbmFibGVkLFxuICAgICAgYXV0b3BsYXksXG4gICAgICB3YWxsZXRFbmNyeXB0ZWQsXG4gICAgICBvc05vdGlmaWNhdGlvbnNFbmFibGVkLFxuICAgICAgLy8gYXV0b0Rvd25sb2FkLFxuICAgICAgc2V0RGFlbW9uU2V0dGluZyxcbiAgICAgIHNldENsaWVudFNldHRpbmcsXG4gICAgICB0b2dnbGUzUEFuYWx5dGljcyxcbiAgICAgIHN1cHBvcnRPcHRpb24sXG4gICAgICBoaWRlQmFsYW5jZSxcbiAgICAgIHVzZXJCbG9ja2VkQ2hhbm5lbHNDb3VudCxcbiAgICAgIGZsb2F0aW5nUGxheWVyLFxuICAgICAgLy8gc2hvd1JlcG9zdHMsXG4gICAgICBjbGVhclBsYXlpbmdVcmksXG4gICAgICBkYXJrTW9kZVRpbWVzLFxuICAgICAgY2xlYXJDYWNoZSxcbiAgICAgIGZpbmRpbmdGRm1wZWcsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzdG9yZWRQYXNzd29yZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBub0RhZW1vblNldHRpbmdzID0gIWRhZW1vblNldHRpbmdzIHx8IE9iamVjdC5rZXlzKGRhZW1vblNldHRpbmdzKS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgZGVmYXVsdE1heEtleUZlZSA9IHsgY3VycmVuY3k6ICdVU0QnLCBhbW91bnQ6IDUwIH07XG5cbiAgICBjb25zdCBkaXNhYmxlTWF4S2V5RmVlID0gIShkYWVtb25TZXR0aW5ncyAmJiBkYWVtb25TZXR0aW5ncy5tYXhfa2V5X2ZlZSk7XG4gICAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSBbMSwgMiwgNCwgNiwgMTAsIDIwXTtcbiAgICBjb25zdCBzdGFydEhvdXJzID0gWycxOCcsICcxOScsICcyMCcsICcyMSddO1xuICAgIGNvbnN0IGVuZEhvdXJzID0gWyc1JywgJzYnLCAnNycsICc4J107XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBhZ2UgY2xhc3NOYW1lPVwiY2FyZC1zdGFja1wiPlxuICAgICAgICB7IUlTX1dFQiAmJiBub0RhZW1vblNldHRpbmdzID8gKFxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImNhcmQgY2FyZC0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkX190aXRsZSBjYXJkX190aXRsZS0tZGVwcmVjYXRlZFwiPntfXygnRmFpbGVkIHRvIGxvYWQgc2V0dGluZ3MuJyl9PC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8Q2FyZCB0aXRsZT17X18oJ0xhbmd1YWdlJyl9IGFjdGlvbnM9ezxTZXR0aW5nTGFuZ3VhZ2UgLz59IC8+XG4gICAgICAgICAgICB7fVxuICAgICAgICAgICAgPENhcmRcbiAgICAgICAgICAgICAgdGl0bGU9e19fKCdDb250ZW50IFNldHRpbmdzJyl9XG4gICAgICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZsb2F0aW5nX3BsYXllclwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5GTE9BVElOR19QTEFZRVIsICFmbG9hdGluZ1BsYXllcik7XG4gICAgICAgICAgICAgICAgICAgICAgY2xlYXJQbGF5aW5nVXJpKCk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2Zsb2F0aW5nUGxheWVyfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0Zsb2F0aW5nIHZpZGVvIHBsYXllcicpfVxuICAgICAgICAgICAgICAgICAgICBoZWxwZXI9e19fKCdLZWVwIGNvbnRlbnQgcGxheWluZyBpbiB0aGUgY29ybmVyIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlLicpfVxuICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYXV0b3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPUExBWSwgIWF1dG9wbGF5KX1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXV0b3BsYXl9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnQXV0b3BsYXkgbWVkaWEgZmlsZXMnKX1cbiAgICAgICAgICAgICAgICAgICAgaGVscGVyPXtfXyhcbiAgICAgICAgICAgICAgICAgICAgICAnQXV0b3BsYXkgdmlkZW8gYW5kIGF1ZGlvIGZpbGVzIHdoZW4gbmF2aWdhdGluZyB0byBhIGZpbGUsIGFzIHdlbGwgYXMgdGhlIG5leHQgcmVsYXRlZCBpdGVtIHdoZW4gYSBmaWxlIGZpbmlzaGVzIHBsYXlpbmcuJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgey8qIGh0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vbGJyeS1kZXNrdG9wL2lzc3Vlcy8zNzc0ICovfVxuICAgICAgICAgICAgICAgICAgey8qIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNob3dfcmVwb3N0c1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX1JFUE9TVFMsICFzaG93UmVwb3N0cyk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dSZXBvc3RzfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1Nob3cgcmVwb3N0cycpfVxuICAgICAgICAgICAgICAgICAgICBoZWxwZXI9e19fKCdTaG93IHJlcG9zdHMgZnJvbSB0aGUgY3JlYXRvcnMgeW91IGZvbGxvdy4nKX1cbiAgICAgICAgICAgICAgICAgIC8+ICovfVxuXG4gICAgICAgICAgICAgICAgICB7LyogPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2hvd19hbm9ueW1vdXNcIlxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX0FOT05ZTU9VUywgIXNob3dBbm9ueW1vdXMpfVxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzaG93QW5vbnltb3VzfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1Nob3cgYW5vbnltb3VzIGNvbnRlbnQnKX1cbiAgICAgICAgICAgICAgICAgICAgaGVscGVyPXtfXygnQW5vbnltb3VzIGNvbnRlbnQgaXMgcHVibGlzaGVkIHdpdGhvdXQgYSBjaGFubmVsLicpfVxuICAgICAgICAgICAgICAgICAgLz4gKi99XG5cbiAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNob3dfbnNmd1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlNIT1dfTUFUVVJFLCAhc2hvd05zZncpfVxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzaG93TnNmd31cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdTaG93IG1hdHVyZSBjb250ZW50Jyl9XG4gICAgICAgICAgICAgICAgICAgIGhlbHBlcj17X18oXG4gICAgICAgICAgICAgICAgICAgICAgJ01hdHVyZSBjb250ZW50IG1heSBpbmNsdWRlIG51ZGl0eSwgaW50ZW5zZSBzZXh1YWxpdHksIHByb2Zhbml0eSwgb3Igb3RoZXIgYWR1bHQgY29udGVudC4gQnkgZGlzcGxheWluZyBtYXR1cmUgY29udGVudCwgeW91IGFyZSBhZmZpcm1pbmcgeW91IGFyZSBvZiBsZWdhbCBhZ2UgdG8gdmlldyBtYXR1cmUgY29udGVudCBpbiB5b3VyIGNvdW50cnkgb3IganVyaXNkaWN0aW9uLiAgJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICB7KGlzQXV0aGVudGljYXRlZCB8fCAhSVNfV0VCKSAmJiAoXG4gICAgICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e19fKCdCbG9ja2VkIENoYW5uZWxzJyl9XG4gICAgICAgICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAge19fKCdCbG9ja2VkIENoYW5uZWxzJyl9OiB7dXNlckJsb2NrZWRDaGFubmVsc0NvdW50fSB7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ01hbmFnZScpfSBuYXZpZ2F0ZT17YC8kLyR7UEFHRVMuQkxPQ0tFRH1gfSAvPi5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7fVxuXG4gICAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgICB0aXRsZT17X18oJ0FwcGVhcmFuY2UnKX1cbiAgICAgICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0LXNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGhlbWVfc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1RoZW1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25UaGVtZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y3VycmVudFRoZW1lfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXthdXRvbWF0aWNEYXJrTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dGhlbWVzLm1hcCh0aGVtZSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17dGhlbWV9IHZhbHVlPXt0aGVtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGVtZSA9PT0gJ2xpZ2h0JyA/IF9fKCdMaWdodCcpIDogX18oJ0RhcmsnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxmaWVsZHNldC1zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYXV0b21hdGljX2RhcmtfbW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHRoaXMub25BdXRvbWF0aWNEYXJrTW9kZUNoYW5nZSghYXV0b21hdGljRGFya01vZGVFbmFibGVkKX1cbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthdXRvbWF0aWNEYXJrTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdBdXRvbWF0aWMgZGFyayBtb2RlJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHthdXRvbWF0aWNEYXJrTW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldC1ncm91cCBjbGFzcz1cImZpZWxkc2V0LWdyb3VwLS1zbXVzaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYXV0b21hdGljX2RhcmtfbW9kZV9yYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLm9uQ2hhbmdlVGltZSh2YWx1ZSwgeyBmcm9tVG86ICdmcm9tJywgdGltZTogJ2hvdXInIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGFya01vZGVUaW1lcy5mcm9tLmhvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfXygnRnJvbScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRIb3Vycy5tYXAodGltZSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e3RpbWV9IHZhbHVlPXt0aW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnRvMTJIb3VyKHRpbWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImF1dG9tYXRpY19kYXJrX21vZGVfcmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ1RvJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PiB0aGlzLm9uQ2hhbmdlVGltZSh2YWx1ZSwgeyBmcm9tVG86ICd0bycsIHRpbWU6ICdob3VyJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RhcmtNb2RlVGltZXMudG8uaG91cn1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2VuZEhvdXJzLm1hcCh0aW1lID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17dGltZX0gdmFsdWU9e3RpbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMudG8xMkhvdXIodGltZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldC1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQtc2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICB7KGlzQXV0aGVudGljYXRlZCB8fCAhSVNfV0VCKSAmJiAoXG4gICAgICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e19fKCdXYWxsZXQgU2VjdXJpdHknKX1cbiAgICAgICAgICAgICAgICBhY3Rpb25zPXtcbiAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge31cblxuICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaGlkZV9iYWxhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5ISURFX0JBTEFOQ0UsICFoaWRlQmFsYW5jZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aGlkZUJhbGFuY2V9XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e19fKCdIaWRlIHdhbGxldCBiYWxhbmNlIGluIGhlYWRlcicpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge31cbiAgICAgICAgICAgIHsoIUlTX1dFQiB8fCBpc0F1dGhlbnRpY2F0ZWQpICYmIChcbiAgICAgICAgICAgICAgPENhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17X18oJ0V4cGVyaW1lbnRhbCBTZXR0aW5ncycpfVxuICAgICAgICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3VwcG9ydF9vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLlNVUFBPUlRfT1BUSU9OLCAhc3VwcG9ydE9wdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c3VwcG9ydE9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X18oJ0VuYWJsZSBjbGFpbSBzdXBwb3J0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgaGVscGVyPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlcnlfbGluazogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdkaXNjb3ZlcnknKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3RyZW5kaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbml0eV9uYW1lc19saW5rOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ3Zhbml0eSBuYW1lcycpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvbmFtaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgYWRkIGEgU3VwcG9ydCBidXR0b24gYWxvbmcgc2lkZSB0aXBwaW5nLiBTaW1pbGFyIHRvIHRpcHMsIHN1cHBvcnRzIGhlbHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJWRpc2NvdmVyeV9saW5rJSBidXQgdGhlIExCQyBpcyByZXR1cm5lZCB0byB5b3VyIHdhbGxldCBpZiByZXZva2VkLiBCb3RoIGFsc28gaGVscCBzZWN1cmUgeW91clxuICAgICAgICAgICAgICAgICAgICAgICAgICAldmFuaXR5X25hbWVzX2xpbmslLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge31cblxuICAgICAgICAgICAgPENhcmRcbiAgICAgICAgICAgICAgdGl0bGU9e19fKCdBcHBsaWNhdGlvbiBDYWNoZScpfVxuICAgICAgICAgICAgICBzdWJ0aXRsZT17XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHtfXyhcbiAgICAgICAgICAgICAgICAgICAgJ1RoaXMgd2lsbCBjbGVhciB0aGUgYXBwbGljYXRpb24gY2FjaGUsIGFuZCBtaWdodCBmaXggaXNzdWVzIHlvdSBhcmUgaGF2aW5nLiBZb3VyIHdhbGxldCB3aWxsIG5vdCBiZSBhZmZlY3RlZC4gJ1xuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgYnV0dG9uPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPXt0aGlzLnN0YXRlLmNsZWFyaW5nQ2FjaGUgPyBfXygnQ2xlYXJpbmcnKSA6IF9fKCdDbGVhciBDYWNoZScpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2xlYXJDYWNoZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmNsZWFyaW5nQ2FjaGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUGFnZT5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzUGFnZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFzRUE7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBZ0JBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFFQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBS0E7OztBQUVBO0FBQUE7QUFHQTtBQUNBOzs7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEJBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQSwyQkFHQTtBQUlBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFUQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFJQTtBQUNBO0FBQ0E7QUFOQTtBQWlDQTtBQUNBO0FBQ0E7QUFBQTtBQUhBO0FBSUE7QUFDQTtBQUNBO0FBTkE7QUFoREE7QUFnRUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBTEE7QUFjQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQUE7QUFBQTtBQVhBO0FBbUJBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFJQTtBQUNBO0FBTEE7QUFRQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUlBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFBQTtBQUFBO0FBVEE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFLQTtBQUxBO0FBT0E7QUFDQTtBQUFBO0FBQUE7QUFoREE7QUFIQTtBQWlFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUlBO0FBQ0E7QUFMQTtBQU5BO0FBb0JBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUhBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUxBO0FBREE7QUFQQTtBQUpBO0FBcUNBO0FBQ0E7QUFDQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBVkE7QUFzQkE7Ozs7QUE1WEE7QUFDQTtBQThYQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/settings/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/show/index.js": -/*!********************************!*\ - !*** ../ui/page/show/index.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./view */ \"../ui/page/show/view.jsx\");\n\n\n\n\n\n\n\nvar select = function select(state, props) {\n var _props$location = props.location,\n pathname = _props$location.pathname,\n hash = _props$location.hash;\n var urlPath = pathname + hash; // Remove the leading \"/\" added by the browser\n\n var path = urlPath.slice(1).replace(/:/g, '#');\n var uri;\n\n try {\n uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"normalizeURI\"])(path);\n } catch (e) {\n var match = path.match(/[#/:]/);\n\n if (path === '$/') {\n props.history.replace(\"/\");\n } else if (!path.startsWith('$/') && match && match.index) {\n uri = \"lbry://\".concat(path.slice(0, match.index));\n props.history.replace(\"/\".concat(path.slice(0, match.index)));\n }\n }\n\n return {\n claim: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(uri)(state),\n isResolvingUri: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectIsUriResolving\"])(uri)(state),\n blackListedOutpoints: Object(lbryinc__WEBPACK_IMPORTED_MODULE_4__[\"selectBlackListedOutpoints\"])(state),\n totalPages: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTotalPagesForChannel\"])(uri, constants_claim__WEBPACK_IMPORTED_MODULE_1__[\"PAGE_SIZE\"])(state),\n isSubscribed: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectChannelInSubscriptions\"])(uri)(state),\n uri: uri,\n title: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectTitleForUri\"])(uri)(state),\n claimIsMine: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimIsMine\"])(uri)(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n resolveUri: function resolveUri(uri) {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"doResolveUri\"])(uri));\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaG93L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2Uvc2hvdy9pbmRleC5qcz9lNmIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IHtcbiAgZG9SZXNvbHZlVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyxcbiAgbWFrZVNlbGVjdFRvdGFsUGFnZXNGb3JDaGFubmVsLFxuICBtYWtlU2VsZWN0VGl0bGVGb3JVcmksXG4gIG5vcm1hbGl6ZVVSSSxcbiAgbWFrZVNlbGVjdENsYWltSXNNaW5lLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IG1ha2VTZWxlY3RDaGFubmVsSW5TdWJzY3JpcHRpb25zIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHMgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBTaG93UGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcGF0aG5hbWUsIGhhc2ggfSA9IHByb3BzLmxvY2F0aW9uO1xuICBjb25zdCB1cmxQYXRoID0gcGF0aG5hbWUgKyBoYXNoO1xuICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgXCIvXCIgYWRkZWQgYnkgdGhlIGJyb3dzZXJcbiAgY29uc3QgcGF0aCA9IHVybFBhdGguc2xpY2UoMSkucmVwbGFjZSgvOi9nLCAnIycpO1xuXG4gIGxldCB1cmk7XG4gIHRyeSB7XG4gICAgdXJpID0gbm9ybWFsaXplVVJJKHBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXRoLm1hdGNoKC9bIy86XS8pO1xuXG4gICAgaWYgKHBhdGggPT09ICckLycpIHtcbiAgICAgIHByb3BzLmhpc3RvcnkucmVwbGFjZShgL2ApO1xuICAgIH0gZWxzZSBpZiAoIXBhdGguc3RhcnRzV2l0aCgnJC8nKSAmJiBtYXRjaCAmJiBtYXRjaC5pbmRleCkge1xuICAgICAgdXJpID0gYGxicnk6Ly8ke3BhdGguc2xpY2UoMCwgbWF0Y2guaW5kZXgpfWA7XG4gICAgICBwcm9wcy5oaXN0b3J5LnJlcGxhY2UoYC8ke3BhdGguc2xpY2UoMCwgbWF0Y2guaW5kZXgpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xhaW06IG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpKHN0YXRlKSxcbiAgICBpc1Jlc29sdmluZ1VyaTogbWFrZVNlbGVjdElzVXJpUmVzb2x2aW5nKHVyaSkoc3RhdGUpLFxuICAgIGJsYWNrTGlzdGVkT3V0cG9pbnRzOiBzZWxlY3RCbGFja0xpc3RlZE91dHBvaW50cyhzdGF0ZSksXG4gICAgdG90YWxQYWdlczogbWFrZVNlbGVjdFRvdGFsUGFnZXNGb3JDaGFubmVsKHVyaSwgUEFHRV9TSVpFKShzdGF0ZSksXG4gICAgaXNTdWJzY3JpYmVkOiBtYWtlU2VsZWN0Q2hhbm5lbEluU3Vic2NyaXB0aW9ucyh1cmkpKHN0YXRlKSxcbiAgICB1cmksXG4gICAgdGl0bGU6IG1ha2VTZWxlY3RUaXRsZUZvclVyaSh1cmkpKHN0YXRlKSxcbiAgICBjbGFpbUlzTWluZTogbWFrZVNlbGVjdENsYWltSXNNaW5lKHVyaSkoc3RhdGUpLFxuICB9O1xufTtcblxuY29uc3QgcGVyZm9ybSA9IGRpc3BhdGNoID0+ICh7XG4gIHJlc29sdmVVcmk6IHVyaSA9PiBkaXNwYXRjaChkb1Jlc29sdmVVcmkodXJpKSksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFNob3dQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBcEJBO0FBQ0E7QUErQkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/show/index.js\n"); - -/***/ }), - -/***/ "../ui/page/show/view.jsx": -/*!********************************!*\ - !*** ../ui/page/show/view.jsx ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ \"../node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/common/busy-indicator */ \"../ui/component/common/busy-indicator.jsx\");\n/* harmony import */ var page_channel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! page/channel */ \"../ui/page/channel/index.js\");\n/* harmony import */ var page_file__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! page/file */ \"../ui/page/file/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_card__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/card */ \"../ui/component/common/card.jsx\");\n/* harmony import */ var component_abandonedChannelPreview__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! component/abandonedChannelPreview */ \"../ui/component/abandonedChannelPreview/index.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\n\nfunction ShowPage(props) {\n var isResolvingUri = props.isResolvingUri,\n resolveUri = props.resolveUri,\n uri = props.uri,\n claim = props.claim,\n blackListedOutpoints = props.blackListedOutpoints,\n location = props.location,\n claimIsMine = props.claimIsMine,\n isSubscribed = props.isSubscribed;\n var signingChannel = claim && claim.signing_channel;\n var canonicalUrl = claim && claim.canonical_url;\n var claimExists = claim !== null && claim !== undefined;\n var haventFetchedYet = claim === undefined;\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (canonicalUrl) {\n var canonicalUrlPath = '/' + canonicalUrl.replace(/^lbry:\\/\\//, '').replace(/#/g, ':');\n\n if (canonicalUrlPath !== window.location.pathname) {\n history.replaceState(history.state, '', canonicalUrlPath);\n }\n }\n\n if (resolveUri && !isResolvingUri && uri && haventFetchedYet || claimExists && !canonicalUrl) {\n resolveUri(uri);\n }\n }, [resolveUri, isResolvingUri, canonicalUrl, uri, claimExists, haventFetchedYet, history]); // Don't navigate directly to repost urls\n // Always redirect to the actual content\n // Also need to add repost_url to the Claim type for flow\n // $FlowFixMe\n\n if (claim && claim.repost_url === uri) {\n var newUrl = Object(util_url__WEBPACK_IMPORTED_MODULE_9__[\"formatLbryUrlForWeb\"])(claim.canonical_url);\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__[\"Redirect\"], {\n to: newUrl\n });\n }\n\n var innerContent = '';\n\n if (!claim || claim && !claim.name) {\n innerContent = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, (claim === undefined || isResolvingUri) && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_busy_indicator__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n message: __('Loading decentralized data...')\n }), !isResolvingUri && !isSubscribed && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"empty\"\n }, __(\"There's nothing available at this location.\")), !isResolvingUri && isSubscribed && claim === null && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_abandonedChannelPreview__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n uri: uri,\n type: 'large'\n }));\n } else if (claim.name.length && claim.name[0] === '@') {\n innerContent = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(page_channel__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: uri,\n location: location\n });\n } else if (claim && blackListedOutpoints) {\n var isClaimBlackListed = false;\n isClaimBlackListed = blackListedOutpoints.some(function (outpoint) {\n return signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout || outpoint.txid === claim.txid && outpoint.nout === claim.nout;\n });\n\n if (isClaimBlackListed && !claimIsMine) {\n innerContent = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_card__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: uri,\n subtitle: __('In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content from our applications.'),\n actions: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"card__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n href: \"https://lbry.com/faq/dmca\",\n label: __('Read More')\n }))\n }));\n } else {\n innerContent = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(page_file__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n uri: uri,\n location: location\n });\n }\n }\n\n return innerContent;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (ShowPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaG93L3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2Uvc2hvdy92aWV3LmpzeD8yZmVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVkaXJlY3QgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBCdXN5SW5kaWNhdG9yIGZyb20gJ2NvbXBvbmVudC9jb21tb24vYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IENoYW5uZWxQYWdlIGZyb20gJ3BhZ2UvY2hhbm5lbCc7XG5pbXBvcnQgRmlsZVBhZ2UgZnJvbSAncGFnZS9maWxlJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnQvY29tbW9uL2NhcmQnO1xuaW1wb3J0IEFiYW5kb25lZENoYW5uZWxQcmV2aWV3IGZyb20gJ2NvbXBvbmVudC9hYmFuZG9uZWRDaGFubmVsUHJldmlldyc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuXG50eXBlIFByb3BzID0ge1xuICBpc1Jlc29sdmluZ1VyaTogYm9vbGVhbixcbiAgcmVzb2x2ZVVyaTogc3RyaW5nID0+IHZvaWQsXG4gIGlzU3Vic2NyaWJlZDogYm9vbGVhbixcbiAgdXJpOiBzdHJpbmcsXG4gIGNsYWltOiBTdHJlYW1DbGFpbSxcbiAgbG9jYXRpb246IFVybExvY2F0aW9uLFxuICBibGFja0xpc3RlZE91dHBvaW50czogQXJyYXk8e1xuICAgIHR4aWQ6IHN0cmluZyxcbiAgICBub3V0OiBudW1iZXIsXG4gIH0+LFxuICB0aXRsZTogc3RyaW5nLFxuICBjbGFpbUlzTWluZTogQm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIFNob3dQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IGlzUmVzb2x2aW5nVXJpLCByZXNvbHZlVXJpLCB1cmksIGNsYWltLCBibGFja0xpc3RlZE91dHBvaW50cywgbG9jYXRpb24sIGNsYWltSXNNaW5lLCBpc1N1YnNjcmliZWQgfSA9IHByb3BzO1xuICBjb25zdCBzaWduaW5nQ2hhbm5lbCA9IGNsYWltICYmIGNsYWltLnNpZ25pbmdfY2hhbm5lbDtcbiAgY29uc3QgY2Fub25pY2FsVXJsID0gY2xhaW0gJiYgY2xhaW0uY2Fub25pY2FsX3VybDtcbiAgY29uc3QgY2xhaW1FeGlzdHMgPSBjbGFpbSAhPT0gbnVsbCAmJiBjbGFpbSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBoYXZlbnRGZXRjaGVkWWV0ID0gY2xhaW0gPT09IHVuZGVmaW5lZDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYW5vbmljYWxVcmwpIHtcbiAgICAgIGNvbnN0IGNhbm9uaWNhbFVybFBhdGggPSAnLycgKyBjYW5vbmljYWxVcmwucmVwbGFjZSgvXmxicnk6XFwvXFwvLywgJycpLnJlcGxhY2UoLyMvZywgJzonKTtcbiAgICAgIGlmIChjYW5vbmljYWxVcmxQYXRoICE9PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeS5zdGF0ZSwgJycsIGNhbm9uaWNhbFVybFBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgocmVzb2x2ZVVyaSAmJiAhaXNSZXNvbHZpbmdVcmkgJiYgdXJpICYmIGhhdmVudEZldGNoZWRZZXQpIHx8IChjbGFpbUV4aXN0cyAmJiAhY2Fub25pY2FsVXJsKSkge1xuICAgICAgcmVzb2x2ZVVyaSh1cmkpO1xuICAgIH1cbiAgfSwgW3Jlc29sdmVVcmksIGlzUmVzb2x2aW5nVXJpLCBjYW5vbmljYWxVcmwsIHVyaSwgY2xhaW1FeGlzdHMsIGhhdmVudEZldGNoZWRZZXQsIGhpc3RvcnldKTtcblxuICAvLyBEb24ndCBuYXZpZ2F0ZSBkaXJlY3RseSB0byByZXBvc3QgdXJsc1xuICAvLyBBbHdheXMgcmVkaXJlY3QgdG8gdGhlIGFjdHVhbCBjb250ZW50XG4gIC8vIEFsc28gbmVlZCB0byBhZGQgcmVwb3N0X3VybCB0byB0aGUgQ2xhaW0gdHlwZSBmb3IgZmxvd1xuICAvLyAkRmxvd0ZpeE1lXG4gIGlmIChjbGFpbSAmJiBjbGFpbS5yZXBvc3RfdXJsID09PSB1cmkpIHtcbiAgICBjb25zdCBuZXdVcmwgPSBmb3JtYXRMYnJ5VXJsRm9yV2ViKGNsYWltLmNhbm9uaWNhbF91cmwpO1xuICAgIHJldHVybiA8UmVkaXJlY3QgdG89e25ld1VybH0gLz47XG4gIH1cblxuICBsZXQgaW5uZXJDb250ZW50ID0gJyc7XG4gIGlmICghY2xhaW0gfHwgKGNsYWltICYmICFjbGFpbS5uYW1lKSkge1xuICAgIGlubmVyQ29udGVudCA9IChcbiAgICAgIDxQYWdlPlxuICAgICAgICB7KGNsYWltID09PSB1bmRlZmluZWQgfHwgaXNSZXNvbHZpbmdVcmkpICYmIDxCdXN5SW5kaWNhdG9yIG1lc3NhZ2U9e19fKCdMb2FkaW5nIGRlY2VudHJhbGl6ZWQgZGF0YS4uLicpfSAvPn1cbiAgICAgICAgeyFpc1Jlc29sdmluZ1VyaSAmJiAhaXNTdWJzY3JpYmVkICYmIChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJlbXB0eVwiPntfXyhcIlRoZXJlJ3Mgbm90aGluZyBhdmFpbGFibGUgYXQgdGhpcyBsb2NhdGlvbi5cIil9PC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUmVzb2x2aW5nVXJpICYmIGlzU3Vic2NyaWJlZCAmJiBjbGFpbSA9PT0gbnVsbCAmJiA8QWJhbmRvbmVkQ2hhbm5lbFByZXZpZXcgdXJpPXt1cml9IHR5cGU9eydsYXJnZSd9IC8+fVxuICAgICAgPC9QYWdlPlxuICAgICk7XG4gIH0gZWxzZSBpZiAoY2xhaW0ubmFtZS5sZW5ndGggJiYgY2xhaW0ubmFtZVswXSA9PT0gJ0AnKSB7XG4gICAgaW5uZXJDb250ZW50ID0gPENoYW5uZWxQYWdlIHVyaT17dXJpfSBsb2NhdGlvbj17bG9jYXRpb259IC8+O1xuICB9IGVsc2UgaWYgKGNsYWltICYmIGJsYWNrTGlzdGVkT3V0cG9pbnRzKSB7XG4gICAgbGV0IGlzQ2xhaW1CbGFja0xpc3RlZCA9IGZhbHNlO1xuXG4gICAgaXNDbGFpbUJsYWNrTGlzdGVkID0gYmxhY2tMaXN0ZWRPdXRwb2ludHMuc29tZShcbiAgICAgIG91dHBvaW50ID0+XG4gICAgICAgIChzaWduaW5nQ2hhbm5lbCAmJiBvdXRwb2ludC50eGlkID09PSBzaWduaW5nQ2hhbm5lbC50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IHNpZ25pbmdDaGFubmVsLm5vdXQpIHx8XG4gICAgICAgIChvdXRwb2ludC50eGlkID09PSBjbGFpbS50eGlkICYmIG91dHBvaW50Lm5vdXQgPT09IGNsYWltLm5vdXQpXG4gICAgKTtcblxuICAgIGlmIChpc0NsYWltQmxhY2tMaXN0ZWQgJiYgIWNsYWltSXNNaW5lKSB7XG4gICAgICBpbm5lckNvbnRlbnQgPSAoXG4gICAgICAgIDxQYWdlPlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICB0aXRsZT17dXJpfVxuICAgICAgICAgICAgc3VidGl0bGU9e19fKFxuICAgICAgICAgICAgICAnSW4gcmVzcG9uc2UgdG8gYSBjb21wbGFpbnQgd2UgcmVjZWl2ZWQgdW5kZXIgdGhlIFVTIERpZ2l0YWwgTWlsbGVubml1bSBDb3B5cmlnaHQgQWN0LCB3ZSBoYXZlIGJsb2NrZWQgYWNjZXNzIHRvIHRoaXMgY29udGVudCBmcm9tIG91ciBhcHBsaWNhdGlvbnMuJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9mYXEvZG1jYVwiIGxhYmVsPXtfXygnUmVhZCBNb3JlJyl9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUGFnZT5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyQ29udGVudCA9IDxGaWxlUGFnZSB1cmk9e3VyaX0gbG9jYXRpb249e2xvY2F0aW9ufSAvPjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5uZXJDb250ZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTaG93UGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZ0JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQVBBO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQURBO0FBQ0E7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFIQTtBQWlCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/show/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/signIn/index.js": -/*!**********************************!*\ - !*** ../ui/page/signIn/index.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/signIn/view.jsx\");\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaWduSW4vaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zaWduSW4vaW5kZXguanM/Zjk3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFNpZ25VcFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKCkgPT4gKHt9KTtcbmNvbnN0IHBlcmZvcm0gPSAoKSA9PiAoe30pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoU2lnblVwUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/signIn/index.js\n"); - -/***/ }), - -/***/ "../ui/page/signIn/view.jsx": -/*!**********************************!*\ - !*** ../ui/page/signIn/view.jsx ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return SignInPage; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_userSignIn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/userSignIn */ \"../ui/component/userSignIn/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n\n\n\nfunction SignInPage() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n authPage: true,\n className: \"main--auth-page\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_userSignIn__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaWduSW4vdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zaWduSW4vdmlldy5qc3g/YjRmNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVc2VyU2lnbkluIGZyb20gJ2NvbXBvbmVudC91c2VyU2lnbkluJztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2lnbkluUGFnZSgpIHtcbiAgcmV0dXJuIChcbiAgICA8UGFnZSBhdXRoUGFnZSBjbGFzc05hbWU9XCJtYWluLS1hdXRoLXBhZ2VcIj5cbiAgICAgIDxVc2VyU2lnbkluIC8+XG4gICAgPC9QYWdlPlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/signIn/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/signInVerify/index.js": -/*!****************************************!*\ - !*** ../ui/page/signInVerify/index.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"../ui/page/signInVerify/view.jsx\");\n\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = {\n doToast: lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doToast\"]\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaWduSW5WZXJpZnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zaWduSW5WZXJpZnkvaW5kZXguanM/NDk2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9Ub2FzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IFNpZ25JblZlcmlmeVBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKCkgPT4gKHt9KTtcbmNvbnN0IHBlcmZvcm0gPSB7XG4gIGRvVG9hc3QsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoU2lnbkluVmVyaWZ5UGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/signInVerify/index.js\n"); - -/***/ }), - -/***/ "../ui/page/signInVerify/view.jsx": -/*!****************************************!*\ - !*** ../ui/page/signInVerify/view.jsx ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var react_google_recaptcha__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-google-recaptcha */ \"../node_modules/react-google-recaptcha/lib/esm/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_7__);\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\n\n\n\nfunction SignInVerifyPage(props) {\n var _props$history = props.history,\n push = _props$history.push,\n location = _props$history.location,\n doToast = props.doToast;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isAuthenticationSuccess = _useState2[0],\n setIsAuthenticationSuccess = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n showCaptchaMessage = _useState4[0],\n setShowCaptchaMessage = _useState4[1];\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n captchaLoaded = _useState6[0],\n setCaptchaLoaded = _useState6[1];\n\n var urlParams = new URLSearchParams(location.search);\n var authToken = urlParams.get('auth_token');\n var userSubmittedEmail = urlParams.get('email');\n var verificationToken = urlParams.get('verification_token');\n var needsRecaptcha = urlParams.get('needs_recaptcha') === 'true';\n\n function onAuthError(message) {\n doToast({\n message: message || __('Authentication failure.'),\n isError: true\n });\n push(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_7__[\"AUTH\"]));\n }\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (!authToken || !userSubmittedEmail || !verificationToken) {\n onAuthError(__('Invalid or expired sign-in link.'));\n }\n }, [authToken, userSubmittedEmail, verificationToken, doToast, push]);\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (!needsRecaptcha) {\n verifyUser();\n }\n }, [needsRecaptcha]);\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n var captchaTimeout;\n\n if (needsRecaptcha && !captchaLoaded) {\n captchaTimeout = setTimeout(function () {\n setShowCaptchaMessage(true);\n }, 2000);\n }\n\n return function () {\n if (captchaTimeout) {\n clearTimeout(captchaTimeout);\n }\n };\n }, [needsRecaptcha, captchaLoaded]);\n\n function onCaptchaChange(value) {\n verifyUser(value);\n }\n\n function onCaptchaReady() {\n setCaptchaLoaded(true);\n }\n\n function verifyUser(captchaValue) {\n lbryinc__WEBPACK_IMPORTED_MODULE_5__[\"Lbryio\"].call('user_email', 'confirm', _objectSpread({\n auth_token: authToken,\n email: userSubmittedEmail,\n verification_token: verificationToken\n }, captchaValue ? {\n recaptcha: captchaValue\n } : {})).then(function () {\n setIsAuthenticationSuccess(true);\n })[\"catch\"](function () {\n onAuthError(__('Invalid captcha response or other authentication error.'));\n });\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n authPage: true,\n className: \"main--auth-page\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"main--contained\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h1\", {\n className: \"section__title--large\"\n }, isAuthenticationSuccess ? __('Sign In Success!') : __('Sign In to lbry.tv')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, isAuthenticationSuccess ? __('You can now close this tab.') : needsRecaptcha ? __('Click below to sign in to lbry.tv') : __('Welcome back! You are automatically being signed in.')), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"p\", {\n className: \"section__subtitle\"\n }, showCaptchaMessage && !isAuthenticationSuccess && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tokens: {\n refresh: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('refreshing'),\n onClick: function onClick() {\n return window.location.reload();\n }\n })\n }\n }, \"Not seeing a captcha? Check your ad blocker or try %refresh%.\")), !isAuthenticationSuccess && needsRecaptcha && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"section__actions\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_google_recaptcha__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sitekey: \"6LePsJgUAAAAAFTuWOKRLnyoNKhm0HA4C3elrFMG\",\n onChange: onCaptchaChange,\n asyncScriptOnLoad: onCaptchaReady,\n onExpired: onAuthError,\n onErrored: onAuthError\n }))));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_1__[\"withRouter\"])(SignInVerifyPage));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS9zaWduSW5WZXJpZnkvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS9zaWduSW5WZXJpZnkvdmlldy5qc3g/MmQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgUGFnZSBmcm9tICdjb21wb25lbnQvcGFnZSc7XG5pbXBvcnQgUmVDQVBUQ0hBIGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcbmltcG9ydCB7IExicnlpbyB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBoaXN0b3J5OiB7IHB1c2g6IHN0cmluZyA9PiB2b2lkLCBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZyB9IH0sXG4gIGRvVG9hc3Q6ICh7fSkgPT4gdm9pZCxcbn07XG5cbmZ1bmN0aW9uIFNpZ25JblZlcmlmeVBhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBoaXN0b3J5OiB7IHB1c2gsIGxvY2F0aW9uIH0sXG4gICAgZG9Ub2FzdCxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbaXNBdXRoZW50aWNhdGlvblN1Y2Nlc3MsIHNldElzQXV0aGVudGljYXRpb25TdWNjZXNzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dDYXB0Y2hhTWVzc2FnZSwgc2V0U2hvd0NhcHRjaGFNZXNzYWdlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2NhcHRjaGFMb2FkZWQsIHNldENhcHRjaGFMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCk7XG4gIGNvbnN0IGF1dGhUb2tlbiA9IHVybFBhcmFtcy5nZXQoJ2F1dGhfdG9rZW4nKTtcbiAgY29uc3QgdXNlclN1Ym1pdHRlZEVtYWlsID0gdXJsUGFyYW1zLmdldCgnZW1haWwnKTtcbiAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW4gPSB1cmxQYXJhbXMuZ2V0KCd2ZXJpZmljYXRpb25fdG9rZW4nKTtcbiAgY29uc3QgbmVlZHNSZWNhcHRjaGEgPSB1cmxQYXJhbXMuZ2V0KCduZWVkc19yZWNhcHRjaGEnKSA9PT0gJ3RydWUnO1xuXG4gIGZ1bmN0aW9uIG9uQXV0aEVycm9yKG1lc3NhZ2UpIHtcbiAgICBkb1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgX18oJ0F1dGhlbnRpY2F0aW9uIGZhaWx1cmUuJyksXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH0pO1xuICAgIHB1c2goYC8kLyR7UEFHRVMuQVVUSH1gKTtcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhdXRoVG9rZW4gfHwgIXVzZXJTdWJtaXR0ZWRFbWFpbCB8fCAhdmVyaWZpY2F0aW9uVG9rZW4pIHtcbiAgICAgIG9uQXV0aEVycm9yKF9fKCdJbnZhbGlkIG9yIGV4cGlyZWQgc2lnbi1pbiBsaW5rLicpKTtcbiAgICB9XG4gIH0sIFthdXRoVG9rZW4sIHVzZXJTdWJtaXR0ZWRFbWFpbCwgdmVyaWZpY2F0aW9uVG9rZW4sIGRvVG9hc3QsIHB1c2hdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbmVlZHNSZWNhcHRjaGEpIHtcbiAgICAgIHZlcmlmeVVzZXIoKTtcbiAgICB9XG4gIH0sIFtuZWVkc1JlY2FwdGNoYV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhcHRjaGFUaW1lb3V0O1xuXG4gICAgaWYgKG5lZWRzUmVjYXB0Y2hhICYmICFjYXB0Y2hhTG9hZGVkKSB7XG4gICAgICBjYXB0Y2hhVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRTaG93Q2FwdGNoYU1lc3NhZ2UodHJ1ZSk7XG4gICAgICB9LCAyMDAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGNhcHRjaGFUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChjYXB0Y2hhVGltZW91dCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW25lZWRzUmVjYXB0Y2hhLCBjYXB0Y2hhTG9hZGVkXSk7XG5cbiAgZnVuY3Rpb24gb25DYXB0Y2hhQ2hhbmdlKHZhbHVlKSB7XG4gICAgdmVyaWZ5VXNlcih2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNhcHRjaGFSZWFkeSgpIHtcbiAgICBzZXRDYXB0Y2hhTG9hZGVkKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmVyaWZ5VXNlcihjYXB0Y2hhVmFsdWUpIHtcbiAgICBMYnJ5aW8uY2FsbCgndXNlcl9lbWFpbCcsICdjb25maXJtJywge1xuICAgICAgYXV0aF90b2tlbjogYXV0aFRva2VuLFxuICAgICAgZW1haWw6IHVzZXJTdWJtaXR0ZWRFbWFpbCxcbiAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAuLi4oY2FwdGNoYVZhbHVlID8geyByZWNhcHRjaGE6IGNhcHRjaGFWYWx1ZSB9IDoge30pLFxuICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldElzQXV0aGVudGljYXRpb25TdWNjZXNzKHRydWUpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIG9uQXV0aEVycm9yKF9fKCdJbnZhbGlkIGNhcHRjaGEgcmVzcG9uc2Ugb3Igb3RoZXIgYXV0aGVudGljYXRpb24gZXJyb3IuJykpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYWdlIGF1dGhQYWdlIGNsYXNzTmFtZT1cIm1haW4tLWF1dGgtcGFnZVwiPlxuICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibWFpbi0tY29udGFpbmVkXCI+XG4gICAgICAgIDxoMSBjbGFzc05hbWU9XCJzZWN0aW9uX190aXRsZS0tbGFyZ2VcIj5cbiAgICAgICAgICB7aXNBdXRoZW50aWNhdGlvblN1Y2Nlc3MgPyBfXygnU2lnbiBJbiBTdWNjZXNzIScpIDogX18oJ1NpZ24gSW4gdG8gbGJyeS50dicpfVxuICAgICAgICA8L2gxPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJzZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgIHtpc0F1dGhlbnRpY2F0aW9uU3VjY2Vzc1xuICAgICAgICAgICAgPyBfXygnWW91IGNhbiBub3cgY2xvc2UgdGhpcyB0YWIuJylcbiAgICAgICAgICAgIDogbmVlZHNSZWNhcHRjaGFcbiAgICAgICAgICAgID8gX18oJ0NsaWNrIGJlbG93IHRvIHNpZ24gaW4gdG8gbGJyeS50dicpXG4gICAgICAgICAgICA6IF9fKCdXZWxjb21lIGJhY2shIFlvdSBhcmUgYXV0b21hdGljYWxseSBiZWluZyBzaWduZWQgaW4uJyl9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwic2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICB7c2hvd0NhcHRjaGFNZXNzYWdlICYmICFpc0F1dGhlbnRpY2F0aW9uU3VjY2VzcyAmJiAoXG4gICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgcmVmcmVzaDogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdyZWZyZXNoaW5nJyl9IG9uQ2xpY2s9eygpID0+IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0gLz4sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIE5vdCBzZWVpbmcgYSBjYXB0Y2hhPyBDaGVjayB5b3VyIGFkIGJsb2NrZXIgb3IgdHJ5ICVyZWZyZXNoJS5cbiAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9wPlxuICAgICAgICB7IWlzQXV0aGVudGljYXRpb25TdWNjZXNzICYmIG5lZWRzUmVjYXB0Y2hhICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlY3Rpb25fX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxSZUNBUFRDSEFcbiAgICAgICAgICAgICAgc2l0ZWtleT1cIjZMZVBzSmdVQUFBQUFGVHVXT0tSTG55b05LaG0wSEE0QzNlbHJGTUdcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25DYXB0Y2hhQ2hhbmdlfVxuICAgICAgICAgICAgICBhc3luY1NjcmlwdE9uTG9hZD17b25DYXB0Y2hhUmVhZHl9XG4gICAgICAgICAgICAgIG9uRXhwaXJlZD17b25BdXRoRXJyb3J9XG4gICAgICAgICAgICAgIG9uRXJyb3JlZD17b25BdXRoRXJyb3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihTaWduSW5WZXJpZnlQYWdlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFUQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUlBO0FBQUE7QUFHQTtBQVBBO0FBVUE7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQU9BO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQVVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFZQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/signInVerify/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/tagsFollowing/index.js": -/*!*****************************************!*\ - !*** ../ui/page/tagsFollowing/index.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/tagsFollowing/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"selectSubscriptions\"])(state),\n email: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUserVerifiedEmail\"])(state)\n };\n};\n\nvar perform = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90YWdzRm9sbG93aW5nL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvdGFnc0ZvbGxvd2luZy9pbmRleC5qcz82YjEwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGb2xsb3dlZFRhZ3MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBzZWxlY3RTdWJzY3JpcHRpb25zIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IERpc2NvdmVyUGFnZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBmb2xsb3dlZFRhZ3M6IHNlbGVjdEZvbGxvd2VkVGFncyhzdGF0ZSksXG4gIHN1YnNjcmliZWRDaGFubmVsczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG4gIGVtYWlsOiBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSksXG59KTtcblxuY29uc3QgcGVyZm9ybSA9IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHBlcmZvcm1cbikoRGlzY292ZXJQYWdlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/tagsFollowing/index.js\n"); - -/***/ }), - -/***/ "../ui/page/tagsFollowing/view.jsx": -/*!*****************************************!*\ - !*** ../ui/page/tagsFollowing/view.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/icons */ \"../ui/constants/icons.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var component_tagsSelect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/tagsSelect */ \"../ui/component/tagsSelect/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var component_common_icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! component/common/icon */ \"../ui/component/common/icon.jsx\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n\n\n\n\n\n\n\n\n\n\nfunction DiscoverPage(props) {\n var email = props.email;\n return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, (email || !true) && react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_tagsSelect__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n showClose: true,\n limitShow: 300,\n title: __('Find New Tags To Follow')\n }), react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n headerLabel: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_common_icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"TAG\"],\n size: 10\n }), __('Your Tags')),\n hideCustomization: true && !email,\n personalView: true,\n defaultTags: constants_claim_search__WEBPACK_IMPORTED_MODULE_8__[\"TAGS_FOLLOWED\"],\n meta: react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n button: \"link\",\n icon: constants_icons__WEBPACK_IMPORTED_MODULE_1__[\"EDIT\"],\n label: __('Manage'),\n requiresAuth: true,\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"TAGS_FOLLOWING_MANAGE\"])\n })\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (DiscoverPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90YWdzRm9sbG93aW5nL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvdGFnc0ZvbGxvd2luZy92aWV3LmpzeD9iOTIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0ICogYXMgSUNPTlMgZnJvbSAnY29uc3RhbnRzL2ljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2xhaW1MaXN0RGlzY292ZXIgZnJvbSAnY29tcG9uZW50L2NsYWltTGlzdERpc2NvdmVyJztcbmltcG9ydCBUYWdzU2VsZWN0IGZyb20gJ2NvbXBvbmVudC90YWdzU2VsZWN0JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICdjb21wb25lbnQvY29tbW9uL2ljb24nO1xuaW1wb3J0ICogYXMgQ1MgZnJvbSAnY29uc3RhbnRzL2NsYWltX3NlYXJjaCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGVtYWlsOiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBEaXNjb3ZlclBhZ2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgZW1haWwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPFBhZ2U+XG4gICAgICB7KGVtYWlsIHx8ICFJU19XRUIpICYmIDxUYWdzU2VsZWN0IHNob3dDbG9zZSBsaW1pdFNob3c9ezMwMH0gdGl0bGU9e19fKCdGaW5kIE5ldyBUYWdzIFRvIEZvbGxvdycpfSAvPn1cbiAgICAgIDxDbGFpbUxpc3REaXNjb3ZlclxuICAgICAgICBoZWFkZXJMYWJlbD17XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8SWNvbiBpY29uPXtJQ09OUy5UQUd9IHNpemU9ezEwfSAvPlxuICAgICAgICAgICAge19fKCdZb3VyIFRhZ3MnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgaGlkZUN1c3RvbWl6YXRpb249e0lTX1dFQiAmJiAhZW1haWx9XG4gICAgICAgIHBlcnNvbmFsVmlld1xuICAgICAgICBkZWZhdWx0VGFncz17Q1MuVEFHU19GT0xMT1dFRH1cbiAgICAgICAgbWV0YT17XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uPVwibGlua1wiXG4gICAgICAgICAgICBpY29uPXtJQ09OUy5FRElUfVxuICAgICAgICAgICAgbGFiZWw9e19fKCdNYW5hZ2UnKX1cbiAgICAgICAgICAgIHJlcXVpcmVzQXV0aD17SVNfV0VCfVxuICAgICAgICAgICAgbmF2aWdhdGU9e2AvJC8ke1BBR0VTLlRBR1NfRk9MTE9XSU5HX01BTkFHRX1gfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9QYWdlPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNjb3ZlclBhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUdBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBWEE7QUFzQkE7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/page/tagsFollowing/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/tagsFollowingManage/index.js": -/*!***********************************************!*\ - !*** ../ui/page/tagsFollowingManage/index.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view */ \"../ui/page/tagsFollowingManage/view.jsx\");\n\n\n\n\n\n\nvar select = function select(state) {\n return {\n followedTags: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFollowedTags\"])(state),\n subscribedChannels: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectSubscriptions\"])(state),\n suggestedSubscriptions: Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectSuggestedChannels\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doFetchRecommendedSubscriptions: redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_3__[\"doFetchRecommendedSubscriptions\"]\n})(_view__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90YWdzRm9sbG93aW5nTWFuYWdlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvdGFnc0ZvbGxvd2luZ01hbmFnZS9pbmRleC5qcz82MGZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGb2xsb3dlZFRhZ3MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFN1YnNjcmlwdGlvbnMsIHNlbGVjdFN1Z2dlc3RlZENoYW5uZWxzIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgZG9GZXRjaFJlY29tbWVuZGVkU3Vic2NyaXB0aW9ucyB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvc3Vic2NyaXB0aW9ucyc7XG5cbmltcG9ydCBUYWdzRWRpdCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe1xuICBmb2xsb3dlZFRhZ3M6IHNlbGVjdEZvbGxvd2VkVGFncyhzdGF0ZSksXG4gIHN1YnNjcmliZWRDaGFubmVsczogc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSksXG4gIHN1Z2dlc3RlZFN1YnNjcmlwdGlvbnM6IHNlbGVjdFN1Z2dlc3RlZENoYW5uZWxzKHN0YXRlKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzZWxlY3QsXG4gIHtcbiAgICBkb0ZldGNoUmVjb21tZW5kZWRTdWJzY3JpcHRpb25zLFxuICB9XG4pKFRhZ3NFZGl0KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFHQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/tagsFollowingManage/index.js\n"); - -/***/ }), - -/***/ "../ui/page/tagsFollowingManage/view.jsx": -/*!***********************************************!*\ - !*** ../ui/page/tagsFollowingManage/view.jsx ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_tagsSelect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/tagsSelect */ \"../ui/component/tagsSelect/index.js\");\n\n\n\n\nfunction FollowingPage() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_tagsSelect__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n limitShow: 300,\n showClose: false,\n title: __('Follow New Tags')\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (FollowingPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90YWdzRm9sbG93aW5nTWFuYWdlL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2UvdGFnc0ZvbGxvd2luZ01hbmFnZS92aWV3LmpzeD83MjJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuaW1wb3J0IFRhZ3NTZWxlY3QgZnJvbSAnY29tcG9uZW50L3RhZ3NTZWxlY3QnO1xuXG5mdW5jdGlvbiBGb2xsb3dpbmdQYWdlKCkge1xuICByZXR1cm4gKFxuICAgIDxQYWdlPlxuICAgICAgPFRhZ3NTZWxlY3QgbGltaXRTaG93PXszMDB9IHNob3dDbG9zZT17ZmFsc2V9IHRpdGxlPXtfXygnRm9sbG93IE5ldyBUYWdzJyl9IC8+XG4gICAgPC9QYWdlPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGb2xsb3dpbmdQYWdlO1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/tagsFollowingManage/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/top/index.js": -/*!*******************************!*\ - !*** ../ui/page/top/index.js ***! - \*******************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/top/view.jsx\");\n\n\n\nvar select = function select(state, props) {\n var search = props.location.search;\n var urlParams = new URLSearchParams(search);\n var name = urlParams.get('name');\n return {\n name: name\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90b3AvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS90b3AvaW5kZXguanM/NWIyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFRvcFBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4ge1xuICBjb25zdCB7IHNlYXJjaCB9ID0gcHJvcHMubG9jYXRpb247XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgbmFtZSA9IHVybFBhcmFtcy5nZXQoJ25hbWUnKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KHNlbGVjdCkoVG9wUGFnZSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBTEE7QUFDQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/top/index.js\n"); - -/***/ }), - -/***/ "../ui/page/top/view.jsx": -/*!*******************************!*\ - !*** ../ui/page/top/view.jsx ***! - \*******************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n/* harmony import */ var component_claimListDiscover__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/claimListDiscover */ \"../ui/component/claimListDiscover/index.js\");\n/* harmony import */ var component_claimEffectiveAmount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/claimEffectiveAmount */ \"../ui/component/claimEffectiveAmount/index.js\");\n/* harmony import */ var constants_claim_search__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/claim_search */ \"../ui/constants/claim_search.js\");\n\n\n\n\n\n\nfunction TopPage(props) {\n var name = props.name;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimListDiscover__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: name,\n defaultFreshness: constants_claim_search__WEBPACK_IMPORTED_MODULE_4__[\"FRESH_ALL\"],\n defaultOrderBy: constants_claim_search__WEBPACK_IMPORTED_MODULE_4__[\"ORDER_BY_TOP\"],\n includeSupportAction: true,\n renderProperties: function renderProperties(claim) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"media__subtitle\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_claimEffectiveAmount__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n uri: claim.repost_url || claim.canonical_url\n }));\n },\n header: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, __('Top claims at lbry://%name%', {\n name: name\n }))\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TopPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90b3Avdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS90b3Avdmlldy5qc3g/YThlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcbmltcG9ydCBDbGFpbUxpc3REaXNjb3ZlciBmcm9tICdjb21wb25lbnQvY2xhaW1MaXN0RGlzY292ZXInO1xuaW1wb3J0IENsYWltRWZmZWN0aXZlQW1vdW50IGZyb20gJ2NvbXBvbmVudC9jbGFpbUVmZmVjdGl2ZUFtb3VudCc7XG5pbXBvcnQgeyBPUkRFUl9CWV9UT1AsIEZSRVNIX0FMTCB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbV9zZWFyY2gnO1xuXG50eXBlIFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmcsXG59O1xuXG5mdW5jdGlvbiBUb3BQYWdlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG5hbWUgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPFBhZ2U+XG4gICAgICA8Q2xhaW1MaXN0RGlzY292ZXJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgZGVmYXVsdEZyZXNobmVzcz17RlJFU0hfQUxMfVxuICAgICAgICBkZWZhdWx0T3JkZXJCeT17T1JERVJfQllfVE9QfVxuICAgICAgICBpbmNsdWRlU3VwcG9ydEFjdGlvblxuICAgICAgICByZW5kZXJQcm9wZXJ0aWVzPXtjbGFpbSA9PiAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWVkaWFfX3N1YnRpdGxlXCI+XG4gICAgICAgICAgICA8Q2xhaW1FZmZlY3RpdmVBbW91bnQgdXJpPXtjbGFpbS5yZXBvc3RfdXJsIHx8IGNsYWltLmNhbm9uaWNhbF91cmx9IC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICBoZWFkZXI9ezxzcGFuPntfXygnVG9wIGNsYWltcyBhdCBsYnJ5Oi8vJW5hbWUlJywgeyBuYW1lIH0pfTwvc3Bhbj59XG4gICAgICAvPlxuICAgIDwvUGFnZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9wUGFnZTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUFBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQVBBO0FBVUE7QUFBQTtBQUFBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/top/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/transactionHistory/index.js": -/*!**********************************************!*\ - !*** ../ui/page/transactionHistory/index.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"../ui/page/transactionHistory/view.jsx\");\n\n\n\n\n\nvar select = function select(state, props) {\n var search = props.location.search;\n var urlParams = new URLSearchParams(search);\n var page = Number(urlParams.get('page')) || 1;\n return {\n page: page,\n filteredTransactionPage: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFilteredTransactionsForPage\"])(page)(state),\n filteredTransactionsCount: Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectFilteredTransactionCount\"])(state)\n };\n};\n\nvar perform = function perform(dispatch) {\n return {\n fetchTransactions: function fetchTransactions() {\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doFetchTransactions\"])());\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"])));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90cmFuc2FjdGlvbkhpc3RvcnkvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS90cmFuc2FjdGlvbkhpc3RvcnkvaW5kZXguanM/NTdkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZG9GZXRjaFRyYW5zYWN0aW9ucywgbWFrZVNlbGVjdEZpbHRlcmVkVHJhbnNhY3Rpb25zRm9yUGFnZSwgc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50IH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IFRyYW5zYWN0aW9uSGlzdG9yeVBhZ2UgZnJvbSAnLi92aWV3JztcblxuY29uc3Qgc2VsZWN0ID0gKHN0YXRlLCBwcm9wcykgPT4ge1xuICBjb25zdCB7IHNlYXJjaCB9ID0gcHJvcHMubG9jYXRpb247XG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgcGFnZSA9IE51bWJlcih1cmxQYXJhbXMuZ2V0KCdwYWdlJykpIHx8IDE7XG4gIHJldHVybiB7XG4gICAgcGFnZSxcbiAgICBmaWx0ZXJlZFRyYW5zYWN0aW9uUGFnZTogbWFrZVNlbGVjdEZpbHRlcmVkVHJhbnNhY3Rpb25zRm9yUGFnZShwYWdlKShzdGF0ZSksXG4gICAgZmlsdGVyZWRUcmFuc2FjdGlvbnNDb3VudDogc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50KHN0YXRlKSxcbiAgfTtcbn07XG5cbmNvbnN0IHBlcmZvcm0gPSBkaXNwYXRjaCA9PiAoe1xuICBmZXRjaFRyYW5zYWN0aW9uczogKCkgPT4gZGlzcGF0Y2goZG9GZXRjaFRyYW5zYWN0aW9ucygpKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFxuICBjb25uZWN0KFxuICAgIHNlbGVjdCxcbiAgICBwZXJmb3JtXG4gICkoVHJhbnNhY3Rpb25IaXN0b3J5UGFnZSlcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFKQTtBQUNBO0FBVUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/transactionHistory/index.js\n"); - -/***/ }), - -/***/ "../ui/page/transactionHistory/view.jsx": -/*!**********************************************!*\ - !*** ../ui/page/transactionHistory/view.jsx ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_transactionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/transactionList */ \"../ui/component/transactionList/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\n\n\n\n\nvar TransactionHistoryPage = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(TransactionHistoryPage, _React$PureComponent);\n\n function TransactionHistoryPage() {\n _classCallCheck(this, TransactionHistoryPage);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(TransactionHistoryPage).apply(this, arguments));\n }\n\n _createClass(TransactionHistoryPage, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var fetchTransactions = this.props.fetchTransactions;\n fetchTransactions();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n filteredTransactionPage = _this$props.filteredTransactionPage,\n filteredTransactionsCount = _this$props.filteredTransactionsCount;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"section\", {\n className: \"card\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_transactionList__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n transactions: filteredTransactionPage,\n transactionCount: filteredTransactionsCount,\n title: __('Transaction History')\n })));\n }\n }]);\n\n return TransactionHistoryPage;\n}(react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (TransactionHistoryPage);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS90cmFuc2FjdGlvbkhpc3Rvcnkvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS90cmFuc2FjdGlvbkhpc3Rvcnkvdmlldy5qc3g/MzQ0NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2FjdGlvbkxpc3QgZnJvbSAnY29tcG9uZW50L3RyYW5zYWN0aW9uTGlzdCc7XG5pbXBvcnQgUGFnZSBmcm9tICdjb21wb25lbnQvcGFnZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZldGNoVHJhbnNhY3Rpb25zOiAoKSA9PiB2b2lkLFxuICBmZXRjaGluZ1RyYW5zYWN0aW9uczogYm9vbGVhbixcbiAgZmlsdGVyZWRUcmFuc2FjdGlvblBhZ2U6IEFycmF5PHt9PixcbiAgZmlsdGVyZWRUcmFuc2FjdGlvbnNDb3VudDogbnVtYmVyLFxufTtcblxuY2xhc3MgVHJhbnNhY3Rpb25IaXN0b3J5UGFnZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8UHJvcHM+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBmZXRjaFRyYW5zYWN0aW9ucyB9ID0gdGhpcy5wcm9wcztcblxuICAgIGZldGNoVHJhbnNhY3Rpb25zKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJlZFRyYW5zYWN0aW9uUGFnZSwgZmlsdGVyZWRUcmFuc2FjdGlvbnNDb3VudCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnZT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY2FyZFwiPlxuICAgICAgICAgIDxUcmFuc2FjdGlvbkxpc3RcbiAgICAgICAgICAgIHRyYW5zYWN0aW9ucz17ZmlsdGVyZWRUcmFuc2FjdGlvblBhZ2V9XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkNvdW50PXtmaWx0ZXJlZFRyYW5zYWN0aW9uc0NvdW50fVxuICAgICAgICAgICAgdGl0bGU9e19fKCdUcmFuc2FjdGlvbiBIaXN0b3J5Jyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9QYWdlPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb25IaXN0b3J5UGFnZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBR0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQVFBOzs7O0FBckJBO0FBQ0E7QUF1QkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/transactionHistory/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/wallet/index.js": -/*!**********************************!*\ - !*** ../ui/page/wallet/index.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/wallet/view.jsx\");\n\n\n\nvar select = function select(state) {\n return {};\n};\n\nvar perform = function perform(dispatch) {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS93YWxsZXQvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS93YWxsZXQvaW5kZXguanM/MmE3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFdhbGxldCBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSBzdGF0ZSA9PiAoe30pO1xuXG5jb25zdCBwZXJmb3JtID0gZGlzcGF0Y2ggPT4gKHt9KTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChcbiAgc2VsZWN0LFxuICBwZXJmb3JtXG4pKFdhbGxldCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/wallet/index.js\n"); - -/***/ }), - -/***/ "../ui/page/wallet/view.jsx": -/*!**********************************!*\ - !*** ../ui/page/wallet/view.jsx ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_walletBalance__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/walletBalance */ \"../ui/component/walletBalance/index.js\");\n/* harmony import */ var component_transactionListRecent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/transactionListRecent */ \"../ui/component/transactionListRecent/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n\n\n\n\n\nvar WalletPage = function WalletPage() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_walletBalance__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_transactionListRecent__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (WalletPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS93YWxsZXQvdmlldy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcGFnZS93YWxsZXQvdmlldy5qc3g/NDNjZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdhbGxldEJhbGFuY2UgZnJvbSAnY29tcG9uZW50L3dhbGxldEJhbGFuY2UnO1xuaW1wb3J0IFRyYW5zYWN0aW9uTGlzdFJlY2VudCBmcm9tICdjb21wb25lbnQvdHJhbnNhY3Rpb25MaXN0UmVjZW50JztcbmltcG9ydCBQYWdlIGZyb20gJ2NvbXBvbmVudC9wYWdlJztcblxuY29uc3QgV2FsbGV0UGFnZSA9ICgpID0+IChcbiAgPFBhZ2U+XG4gICAgPFdhbGxldEJhbGFuY2UgLz5cbiAgICA8VHJhbnNhY3Rpb25MaXN0UmVjZW50IC8+XG4gIDwvUGFnZT5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFdhbGxldFBhZ2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/wallet/view.jsx\n"); - -/***/ }), - -/***/ "../ui/page/welcome/index.js": -/*!***********************************!*\ - !*** ../ui/page/welcome/index.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"../ui/page/welcome/view.jsx\");\n\n\n\nvar select = function select() {\n return {};\n};\n\nvar perform = function perform() {\n return {};\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, perform)(_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS93ZWxjb21lL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2Uvd2VsY29tZS9pbmRleC5qcz9hNWFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgV2VsY29tZSBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBzZWxlY3QgPSAoKSA9PiAoe30pO1xuY29uc3QgcGVyZm9ybSA9ICgpID0+ICh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoXG4gIHNlbGVjdCxcbiAgcGVyZm9ybVxuKShXZWxjb21lKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/page/welcome/index.js\n"); - -/***/ }), - -/***/ "../ui/page/welcome/view.jsx": -/*!***********************************!*\ - !*** ../ui/page/welcome/view.jsx ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Welcome; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_privacyAgreement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/privacyAgreement */ \"../ui/component/privacyAgreement/index.js\");\n/* harmony import */ var component_page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/page */ \"../ui/component/page/index.js\");\n\n\n\nfunction Welcome() {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_page__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n noHeader: true,\n className: \"main--auth-page\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_privacyAgreement__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcGFnZS93ZWxjb21lL3ZpZXcuanN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3BhZ2Uvd2VsY29tZS92aWV3LmpzeD9hMDJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByaXZhY3lBZ3JlZW1lbnQgZnJvbSAnY29tcG9uZW50L3ByaXZhY3lBZ3JlZW1lbnQnO1xuaW1wb3J0IFBhZ2UgZnJvbSAnY29tcG9uZW50L3BhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXZWxjb21lKCkge1xuICByZXR1cm4gKFxuICAgIDxQYWdlIG5vSGVhZGVyIGNsYXNzTmFtZT1cIm1haW4tLWF1dGgtcGFnZVwiPlxuICAgICAgPFByaXZhY3lBZ3JlZW1lbnQgLz5cbiAgICA8L1BhZ2U+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/page/welcome/view.jsx\n"); - -/***/ }), - -/***/ "../ui/reducers.js": -/*!*************************!*\ - !*** ../ui/reducers.js ***! - \*************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"../node_modules/redux/es/index.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_reducers_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/reducers/app */ \"../ui/redux/reducers/app.js\");\n/* harmony import */ var redux_reducers_availability__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/reducers/availability */ \"../ui/redux/reducers/availability.js\");\n/* harmony import */ var redux_reducers_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/reducers/content */ \"../ui/redux/reducers/content.js\");\n/* harmony import */ var redux_reducers_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/reducers/settings */ \"../ui/redux/reducers/settings.js\");\n/* harmony import */ var redux_reducers_subscriptions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! redux/reducers/subscriptions */ \"../ui/redux/reducers/subscriptions.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (history) {\n return Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"combineReducers\"])({\n router: Object(connected_react_router__WEBPACK_IMPORTED_MODULE_1__[\"connectRouter\"])(history),\n app: redux_reducers_app__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n availability: redux_reducers_availability__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n blacklist: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"blacklistReducer\"],\n filtered: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"filteredReducer\"],\n claims: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"claimsReducer\"],\n comments: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"commentReducer\"],\n content: redux_reducers_content__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n costInfo: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"costInfoReducer\"],\n fileInfo: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"fileInfoReducer\"],\n file: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"fileReducer\"],\n homepage: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"homepageReducer\"],\n notifications: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"notificationsReducer\"],\n publish: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"publishReducer\"],\n rewards: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"rewardsReducer\"],\n search: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"searchReducer\"],\n settings: redux_reducers_settings__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n stats: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"statsReducer\"],\n subscriptions: redux_reducers_subscriptions__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n tags: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"tagsReducer\"],\n blocked: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"blockedReducer\"],\n user: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"userReducer\"],\n wallet: lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"walletReducer\"],\n sync: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"syncReducer\"],\n lbrytv: lbryinc__WEBPACK_IMPORTED_MODULE_3__[\"lbrytvReducer\"]\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdWNlcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcmVkdWNlcnMuanM/YzRlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgeyBjb25uZWN0Um91dGVyIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcic7XG5pbXBvcnQge1xuICBjbGFpbXNSZWR1Y2VyLFxuICBmaWxlSW5mb1JlZHVjZXIsXG4gIHNlYXJjaFJlZHVjZXIsXG4gIHdhbGxldFJlZHVjZXIsXG4gIG5vdGlmaWNhdGlvbnNSZWR1Y2VyLFxuICB0YWdzUmVkdWNlcixcbiAgY29tbWVudFJlZHVjZXIsXG4gIGJsb2NrZWRSZWR1Y2VyLFxuICBwdWJsaXNoUmVkdWNlcixcbiAgZmlsZVJlZHVjZXIsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHtcbiAgdXNlclJlZHVjZXIsXG4gIHJld2FyZHNSZWR1Y2VyLFxuICBjb3N0SW5mb1JlZHVjZXIsXG4gIGJsYWNrbGlzdFJlZHVjZXIsXG4gIGZpbHRlcmVkUmVkdWNlcixcbiAgaG9tZXBhZ2VSZWR1Y2VyLFxuICBzdGF0c1JlZHVjZXIsXG4gIHN5bmNSZWR1Y2VyLFxuICBsYnJ5dHZSZWR1Y2VyLFxufSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBhcHBSZWR1Y2VyIGZyb20gJ3JlZHV4L3JlZHVjZXJzL2FwcCc7XG5pbXBvcnQgYXZhaWxhYmlsaXR5UmVkdWNlciBmcm9tICdyZWR1eC9yZWR1Y2Vycy9hdmFpbGFiaWxpdHknO1xuaW1wb3J0IGNvbnRlbnRSZWR1Y2VyIGZyb20gJ3JlZHV4L3JlZHVjZXJzL2NvbnRlbnQnO1xuaW1wb3J0IHNldHRpbmdzUmVkdWNlciBmcm9tICdyZWR1eC9yZWR1Y2Vycy9zZXR0aW5ncyc7XG5pbXBvcnQgc3Vic2NyaXB0aW9uc1JlZHVjZXIgZnJvbSAncmVkdXgvcmVkdWNlcnMvc3Vic2NyaXB0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGhpc3RvcnkgPT5cbiAgY29tYmluZVJlZHVjZXJzKHtcbiAgICByb3V0ZXI6IGNvbm5lY3RSb3V0ZXIoaGlzdG9yeSksXG4gICAgYXBwOiBhcHBSZWR1Y2VyLFxuICAgIGF2YWlsYWJpbGl0eTogYXZhaWxhYmlsaXR5UmVkdWNlcixcbiAgICBibGFja2xpc3Q6IGJsYWNrbGlzdFJlZHVjZXIsXG4gICAgZmlsdGVyZWQ6IGZpbHRlcmVkUmVkdWNlcixcbiAgICBjbGFpbXM6IGNsYWltc1JlZHVjZXIsXG4gICAgY29tbWVudHM6IGNvbW1lbnRSZWR1Y2VyLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRSZWR1Y2VyLFxuICAgIGNvc3RJbmZvOiBjb3N0SW5mb1JlZHVjZXIsXG4gICAgZmlsZUluZm86IGZpbGVJbmZvUmVkdWNlcixcbiAgICBmaWxlOiBmaWxlUmVkdWNlcixcbiAgICBob21lcGFnZTogaG9tZXBhZ2VSZWR1Y2VyLFxuICAgIG5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbnNSZWR1Y2VyLFxuICAgIHB1Ymxpc2g6IHB1Ymxpc2hSZWR1Y2VyLFxuICAgIHJld2FyZHM6IHJld2FyZHNSZWR1Y2VyLFxuICAgIHNlYXJjaDogc2VhcmNoUmVkdWNlcixcbiAgICBzZXR0aW5nczogc2V0dGluZ3NSZWR1Y2VyLFxuICAgIHN0YXRzOiBzdGF0c1JlZHVjZXIsXG4gICAgc3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9uc1JlZHVjZXIsXG4gICAgdGFnczogdGFnc1JlZHVjZXIsXG4gICAgYmxvY2tlZDogYmxvY2tlZFJlZHVjZXIsXG4gICAgdXNlcjogdXNlclJlZHVjZXIsXG4gICAgd2FsbGV0OiB3YWxsZXRSZWR1Y2VyLFxuICAgIHN5bmM6IHN5bmNSZWR1Y2VyLFxuICAgIGxicnl0djogbGJyeXR2UmVkdWNlcixcbiAgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQVlBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/reducers.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/app.js": -/*!**********************************!*\ - !*** ../ui/redux/actions/app.js ***! - \**********************************/ -/*! exports provided: doOpenModal, doHideModal, doUpdateDownloadProgress, doSkipUpgrade, doStartUpgrade, doDownloadUpgrade, doDownloadUpgradeRequested, doClearUpgradeTimer, doAutoUpdate, doAutoUpdateDeclined, doCancelUpgrade, doCheckUpgradeAvailable, doCheckUpgradeSubscribe, doCheckDaemonVersion, doNotifyEncryptWallet, doNotifyDecryptWallet, doNotifyUnlockWallet, doNotifyForgetPassword, doAlertError, doDaemonReady, doClearCache, doQuit, doQuitAnyDaemon, doChangeVolume, doChangeMute, doClickCommentButton, doToggleSearchExpanded, doAnalyticsView, doAnalyticsTagSync, doSignIn, doSignOut, doSetWelcomeVersion, doToggle3PAnalytics, doGetAndPopulatePreferences, doSyncWithPreferences */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doOpenModal\", function() { return doOpenModal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doHideModal\", function() { return doHideModal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doUpdateDownloadProgress\", function() { return doUpdateDownloadProgress; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSkipUpgrade\", function() { return doSkipUpgrade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doStartUpgrade\", function() { return doStartUpgrade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doDownloadUpgrade\", function() { return doDownloadUpgrade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doDownloadUpgradeRequested\", function() { return doDownloadUpgradeRequested; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClearUpgradeTimer\", function() { return doClearUpgradeTimer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doAutoUpdate\", function() { return doAutoUpdate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doAutoUpdateDeclined\", function() { return doAutoUpdateDeclined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doCancelUpgrade\", function() { return doCancelUpgrade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doCheckUpgradeAvailable\", function() { return doCheckUpgradeAvailable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doCheckUpgradeSubscribe\", function() { return doCheckUpgradeSubscribe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doCheckDaemonVersion\", function() { return doCheckDaemonVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doNotifyEncryptWallet\", function() { return doNotifyEncryptWallet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doNotifyDecryptWallet\", function() { return doNotifyDecryptWallet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doNotifyUnlockWallet\", function() { return doNotifyUnlockWallet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doNotifyForgetPassword\", function() { return doNotifyForgetPassword; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doAlertError\", function() { return doAlertError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doDaemonReady\", function() { return doDaemonReady; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClearCache\", function() { return doClearCache; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doQuit\", function() { return doQuit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doQuitAnyDaemon\", function() { return doQuitAnyDaemon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doChangeVolume\", function() { return doChangeVolume; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doChangeMute\", function() { return doChangeMute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClickCommentButton\", function() { return doClickCommentButton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doToggleSearchExpanded\", function() { return doToggleSearchExpanded; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doAnalyticsView\", function() { return doAnalyticsView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doAnalyticsTagSync\", function() { return doAnalyticsTagSync; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSignIn\", function() { return doSignIn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSignOut\", function() { return doSignOut; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetWelcomeVersion\", function() { return doSetWelcomeVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doToggle3PAnalytics\", function() { return doToggle3PAnalytics; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doGetAndPopulatePreferences\", function() { return doGetAndPopulatePreferences; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSyncWithPreferences\", function() { return doSyncWithPreferences; });\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var native__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! native */ \"../ui/native.js\");\n/* harmony import */ var redux_actions_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/actions/settings */ \"../ui/redux/actions/settings.js\");\n/* harmony import */ var redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/selectors/app */ \"../ui/redux/selectors/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var package_json__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! package.json */ \"../package.json\");\nvar package_json__WEBPACK_IMPORTED_MODULE_8___namespace = /*#__PURE__*/__webpack_require__.t(/*! package.json */ \"../package.json\", 1);\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_10__);\n\n\n\n\n\n\n // import { selectDaemonSettings } from 'redux/selectors/settings';\n\n\n\n\n\nvar CHECK_UPGRADE_INTERVAL = 10 * 60 * 1000;\nfunction doOpenModal(id) {\n var modalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"SHOW_MODAL\"],\n data: {\n id: id,\n modalProps: modalProps\n }\n };\n}\nfunction doHideModal() {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"HIDE_MODAL\"]\n };\n}\nfunction doUpdateDownloadProgress(percent) {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"UPGRADE_DOWNLOAD_PROGRESSED\"],\n data: {\n percent: percent\n }\n };\n}\nfunction doSkipUpgrade() {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"SKIP_UPGRADE\"]\n };\n}\nfunction doStartUpgrade() {\n return function (dispatch, getState) {\n var state = getState();\n var upgradeDownloadPath = Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectUpgradeDownloadPath\"])(state);\n ipcRenderer.send('upgrade', upgradeDownloadPath);\n };\n}\nfunction doDownloadUpgrade() {\n return function (dispatch, getState) {};\n}\nfunction doDownloadUpgradeRequested() {\n // This means the user requested an upgrade by clicking the \"upgrade\" button in the navbar.\n // If on Mac and Windows, we do some new behavior for the auto-update system.\n // This will probably be reorganized once we get auto-update going on Linux and remove\n // the old logic.\n return function (dispatch) {\n if (['win32', 'darwin'].includes(process.platform) || !!process.env.APPIMAGE) {\n // electron-updater behavior\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"AUTO_UPDATE_DOWNLOADED\"]));\n } else {\n // Old behavior for Linux\n dispatch(doDownloadUpgrade());\n }\n };\n}\nfunction doClearUpgradeTimer() {\n return function (dispatch, getState) {\n var state = getState();\n\n if (Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectUpgradeTimer\"])(state)) {\n clearInterval(Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectUpgradeTimer\"])(state));\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"CLEAR_UPGRADE_TIMER\"]\n });\n }\n };\n}\nfunction doAutoUpdate() {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"AUTO_UPDATE_DOWNLOADED\"]\n });\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"AUTO_UPDATE_DOWNLOADED\"]));\n dispatch(doClearUpgradeTimer());\n };\n}\nfunction doAutoUpdateDeclined() {\n return function (dispatch) {\n dispatch(doClearUpgradeTimer());\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"AUTO_UPDATE_DECLINED\"]\n });\n };\n}\nfunction doCancelUpgrade() {\n return function (dispatch, getState) {\n var state = getState();\n var upgradeDownloadItem = Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectUpgradeDownloadItem\"])(state);\n\n if (upgradeDownloadItem) {\n /*\n * Right now the remote reference to the download item gets garbage collected as soon as the\n * the download is over (maybe even earlier), so trying to cancel a finished download may\n * throw an error.\n */\n try {\n upgradeDownloadItem.cancel();\n } catch (err) {\n console.error(err); // eslint-disable-line no-console\n }\n }\n\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"UPGRADE_CANCELLED\"]\n });\n };\n}\nfunction doCheckUpgradeAvailable() {\n return function (dispatch, getState) {\n var state = getState();\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"CHECK_UPGRADE_START\"]\n });\n\n if (['win32', 'darwin'].includes(process.platform) || !!process.env.APPIMAGE) {\n // On Windows, Mac, and AppImage, updates happen silently through\n // electron-updater.\n var autoUpdateDeclined = Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectAutoUpdateDeclined\"])(state);\n\n if (!autoUpdateDeclined && !isDev) {\n autoUpdater.checkForUpdates();\n }\n\n return;\n }\n\n var success = function success(_ref) {\n var remoteVersion = _ref.remoteVersion,\n upgradeAvailable = _ref.upgradeAvailable;\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"CHECK_UPGRADE_SUCCESS\"],\n data: {\n upgradeAvailable: upgradeAvailable,\n remoteVersion: remoteVersion\n }\n });\n\n if (upgradeAvailable && !Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectModal\"])(state) && (!Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectIsUpgradeSkipped\"])(state) || remoteVersion !== Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectRemoteVersion\"])(state))) {\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"UPGRADE\"]));\n }\n };\n\n var fail = function fail() {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"CHECK_UPGRADE_FAIL\"]\n });\n };\n\n native__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getAppVersionInfo().then(success, fail);\n };\n}\n/*\n Initiate a timer that will check for an app upgrade every 10 minutes.\n */\n\nfunction doCheckUpgradeSubscribe() {\n return function (dispatch) {\n var checkUpgradeTimer = setInterval(function () {\n return dispatch(doCheckUpgradeAvailable());\n }, CHECK_UPGRADE_INTERVAL);\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"CHECK_UPGRADE_SUBSCRIBE\"],\n data: {\n checkUpgradeTimer: checkUpgradeTimer\n }\n });\n };\n}\nfunction doCheckDaemonVersion() {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"DAEMON_VERSION_MATCH\"]\n });\n };\n}\nfunction doNotifyEncryptWallet() {\n return function (dispatch) {\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_ENCRYPT\"]));\n };\n}\nfunction doNotifyDecryptWallet() {\n return function (dispatch) {\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_DECRYPT\"]));\n };\n}\nfunction doNotifyUnlockWallet() {\n return function (dispatch) {\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_UNLOCK\"]));\n };\n}\nfunction doNotifyForgetPassword(props) {\n return function (dispatch) {\n dispatch(doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_2__[\"WALLET_PASSWORD_UNSAVE\"], props));\n };\n}\nfunction doAlertError(errorList) {\n return function (dispatch) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doError\"])(errorList));\n };\n}\nfunction doDaemonReady() {\n return function (dispatch, getState) {\n var state = getState(); // TODO: call doFetchDaemonSettings, then get usage data, and call doAuthenticate once they are loaded into the store\n\n var shareUsageData = window.localStorage.getItem(analytics__WEBPACK_IMPORTED_MODULE_9__[\"SHARE_INTERNAL\"]) === 'true' || true;\n dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_7__[\"doAuthenticate\"])(package_json__WEBPACK_IMPORTED_MODULE_8__[\"version\"], undefined, undefined, shareUsageData, function (status) {\n var trendingAlgorithm = status && status.wallet && status.wallet.connected_features && status.wallet.connected_features.trending_algorithm;\n\n if (trendingAlgorithm) {\n analytics__WEBPACK_IMPORTED_MODULE_9__[\"default\"].trendingAlgorithmEvent(trendingAlgorithm);\n }\n }));\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"DAEMON_READY\"]\n });\n };\n}\nfunction doClearCache() {\n return function (dispatch) {\n // Need to update this to work with new version of redux-persist\n // Leaving for now\n // const reducersToClear = whiteListedReducers.filter(reducerKey => reducerKey !== 'tags');\n // window.cacheStore.purge(reducersToClear);\n window.sessionStorage.clear();\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doClearSupport\"])());\n window.location.reload();\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doClearPublish\"])());\n };\n}\nfunction doQuit() {\n return function () {};\n}\nfunction doQuitAnyDaemon() {\n return function (dispatch) {};\n}\nfunction doChangeVolume(volume) {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"VOLUME_CHANGED\"],\n data: {\n volume: volume\n }\n });\n };\n}\nfunction doChangeMute(muted) {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"VOLUME_MUTED\"],\n data: {\n muted: muted\n }\n });\n };\n}\nfunction doClickCommentButton() {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"ADD_COMMENT\"]\n };\n}\nfunction doToggleSearchExpanded() {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"TOGGLE_SEARCH_EXPANDED\"]\n };\n}\nfunction doAnalyticsView(uri, timeToStart) {\n return function (dispatch, getState) {\n var state = getState();\n\n var _makeSelectClaimForUr = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimForUri\"])(uri)(state),\n txid = _makeSelectClaimForUr.txid,\n nout = _makeSelectClaimForUr.nout,\n claimId = _makeSelectClaimForUr.claim_id;\n\n var claimIsMine = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"makeSelectClaimIsMine\"])(uri)(state);\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n\n if (claimIsMine) {\n return Promise.resolve();\n }\n\n return analytics__WEBPACK_IMPORTED_MODULE_9__[\"default\"].apiLogView(uri, outpoint, claimId, timeToStart);\n };\n}\nfunction doAnalyticsTagSync() {\n return function (dispatch, getState) {\n var state = getState();\n var tags = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectFollowedTagsList\"])(state);\n var stringOfTags = tags.join(',');\n analytics__WEBPACK_IMPORTED_MODULE_9__[\"default\"].apiSyncTags({\n content_tags: stringOfTags\n });\n };\n}\nfunction doSignIn() {\n return function (dispatch, getState) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doBalanceSubscribe\"])());\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doFetchChannelListMine\"])());\n };\n}\nfunction doSignOut() {\n return function (dispatch) {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_10__[\"doSignOutCleanup\"])().then(function () {\n window.persistor.purge();\n }).then(function () {\n setTimeout(function () {\n location.reload();\n });\n })[\"catch\"](function () {\n return location.reload();\n });\n };\n}\nfunction doSetWelcomeVersion(version) {\n return {\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"SET_WELCOME_VERSION\"],\n data: version\n };\n}\nfunction doToggle3PAnalytics(allowParam, doNotDispatch) {\n return function (dispatch, getState) {\n var state = getState();\n var allowState = Object(redux_selectors_app__WEBPACK_IMPORTED_MODULE_6__[\"selectAllowAnalytics\"])(state);\n var allow = allowParam !== undefined && allowParam !== null ? allowParam : allowState;\n analytics__WEBPACK_IMPORTED_MODULE_9__[\"default\"].toggleThirdParty(allow);\n\n if (!doNotDispatch) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"SET_ALLOW_ANALYTICS\"],\n data: allow\n });\n }\n };\n}\nfunction doGetAndPopulatePreferences() {\n return function (dispatch, getState) {\n function successCb(savedPreferences) {\n // const state = getState();\n // const daemonSettings = selectDaemonSettings(state);\n if (savedPreferences !== null) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doPopulateSharedUserState\"])(savedPreferences));\n }\n }\n\n function failCb() {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_10__[\"deleteSavedPassword\"])().then(function () {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doToast\"])({\n isError: true,\n message: __('Unable to load your saved preferences.')\n }));\n });\n }\n\n Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doPreferenceGet\"])('shared', successCb, failCb);\n };\n}\nfunction doSyncWithPreferences() {\n return function (dispatch) {\n function handleSyncComplete(error, hasNewData) {\n if (!error) {\n dispatch(doGetAndPopulatePreferences());\n\n if (hasNewData) {\n // we just got sync data, better update our channels\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doFetchChannelListMine\"])());\n }\n }\n }\n\n return Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_10__[\"getSavedPassword\"])().then(function (password) {\n var passwordArgument = password === null ? '' : password;\n dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_7__[\"doGetSync\"])(passwordArgument, handleSyncComplete));\n });\n };\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9hcHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcmVkdXgvYWN0aW9ucy9hcHAuanM/ZWRlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCB7XG4gIExicnksXG4gIGRvQmFsYW5jZVN1YnNjcmliZSxcbiAgZG9GZXRjaEZpbGVJbmZvc0FuZFB1Ymxpc2hlZENsYWltcyxcbiAgZG9FcnJvcixcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUsXG4gIGRvUG9wdWxhdGVTaGFyZWRVc2VyU3RhdGUsXG4gIGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUsXG4gIGRvQ2xlYXJQdWJsaXNoLFxuICBkb1ByZWZlcmVuY2VHZXQsXG4gIGRvVG9hc3QsXG4gIGRvQ2xlYXJTdXBwb3J0LFxuICBzZWxlY3RGb2xsb3dlZFRhZ3NMaXN0LFxuICAvLyBTSEFSRURfUFJFRkVSRU5DRVMsXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IE5hdGl2ZSBmcm9tICduYXRpdmUnO1xuaW1wb3J0IHtcbiAgZG9GZXRjaERhZW1vblNldHRpbmdzLFxuICBkb1NldEF1dG9MYXVuY2gsXG4gIC8vICBkb1NldERhZW1vblNldHRpbmdcbiAgZG9GaW5kRkZtcGVnLFxuICBkb0dldERhZW1vblN0YXR1cyxcbn0gZnJvbSAncmVkdXgvYWN0aW9ucy9zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBzZWxlY3RJc1VwZ3JhZGVTa2lwcGVkLFxuICBzZWxlY3RVcGRhdGVVcmwsXG4gIHNlbGVjdFVwZ3JhZGVEb3dubG9hZEl0ZW0sXG4gIHNlbGVjdFVwZ3JhZGVEb3dubG9hZFBhdGgsXG4gIHNlbGVjdFVwZ3JhZGVGaWxlbmFtZSxcbiAgc2VsZWN0QXV0b1VwZGF0ZURlY2xpbmVkLFxuICBzZWxlY3RSZW1vdGVWZXJzaW9uLFxuICBzZWxlY3RVcGdyYWRlVGltZXIsXG4gIHNlbGVjdE1vZGFsLFxuICBzZWxlY3RBbGxvd0FuYWx5dGljcyxcbn0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2FwcCc7XG4vLyBpbXBvcnQgeyBzZWxlY3REYWVtb25TZXR0aW5ncyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBkb0F1dGhlbnRpY2F0ZSwgZG9HZXRTeW5jIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBsYnJ5U2V0dGluZ3MgYXMgY29uZmlnLCB2ZXJzaW9uIGFzIGFwcFZlcnNpb24gfSBmcm9tICdwYWNrYWdlLmpzb24nO1xuaW1wb3J0IGFuYWx5dGljcywgeyBTSEFSRV9JTlRFUk5BTCB9IGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgeyBkb1NpZ25PdXRDbGVhbnVwLCBkZWxldGVTYXZlZFBhc3N3b3JkLCBnZXRTYXZlZFBhc3N3b3JkIH0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuXG5cbmNvbnN0IENIRUNLX1VQR1JBREVfSU5URVJWQUwgPSAxMCAqIDYwICogMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGRvT3Blbk1vZGFsKGlkLCBtb2RhbFByb3BzID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBQ1RJT05TLlNIT1dfTU9EQUwsXG4gICAgZGF0YToge1xuICAgICAgaWQsXG4gICAgICBtb2RhbFByb3BzLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0hpZGVNb2RhbCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBQ1RJT05TLkhJREVfTU9EQUwsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1VwZGF0ZURvd25sb2FkUHJvZ3Jlc3MocGVyY2VudCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFDVElPTlMuVVBHUkFERV9ET1dOTE9BRF9QUk9HUkVTU0VELFxuICAgIGRhdGE6IHtcbiAgICAgIHBlcmNlbnQsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvU2tpcFVwZ3JhZGUoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQUNUSU9OUy5TS0lQX1VQR1JBREUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1N0YXJ0VXBncmFkZSgpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgdXBncmFkZURvd25sb2FkUGF0aCA9IHNlbGVjdFVwZ3JhZGVEb3dubG9hZFBhdGgoc3RhdGUpO1xuXG4gICAgaXBjUmVuZGVyZXIuc2VuZCgndXBncmFkZScsIHVwZ3JhZGVEb3dubG9hZFBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Eb3dubG9hZFVwZ3JhZGUoKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0Rvd25sb2FkVXBncmFkZVJlcXVlc3RlZCgpIHtcbiAgLy8gVGhpcyBtZWFucyB0aGUgdXNlciByZXF1ZXN0ZWQgYW4gdXBncmFkZSBieSBjbGlja2luZyB0aGUgXCJ1cGdyYWRlXCIgYnV0dG9uIGluIHRoZSBuYXZiYXIuXG4gIC8vIElmIG9uIE1hYyBhbmQgV2luZG93cywgd2UgZG8gc29tZSBuZXcgYmVoYXZpb3IgZm9yIHRoZSBhdXRvLXVwZGF0ZSBzeXN0ZW0uXG4gIC8vIFRoaXMgd2lsbCBwcm9iYWJseSBiZSByZW9yZ2FuaXplZCBvbmNlIHdlIGdldCBhdXRvLXVwZGF0ZSBnb2luZyBvbiBMaW51eCBhbmQgcmVtb3ZlXG4gIC8vIHRoZSBvbGQgbG9naWMuXG5cbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBpZiAoWyd3aW4zMicsICdkYXJ3aW4nXS5pbmNsdWRlcyhwcm9jZXNzLnBsYXRmb3JtKSB8fCAhIXByb2Nlc3MuZW52LkFQUElNQUdFKSB7XG4gICAgICAvLyBlbGVjdHJvbi11cGRhdGVyIGJlaGF2aW9yXG4gICAgICBkaXNwYXRjaChkb09wZW5Nb2RhbChNT0RBTFMuQVVUT19VUERBVEVfRE9XTkxPQURFRCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIExpbnV4XG4gICAgICBkaXNwYXRjaChkb0Rvd25sb2FkVXBncmFkZSgpKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0NsZWFyVXBncmFkZVRpbWVyKCkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICAgIGlmIChzZWxlY3RVcGdyYWRlVGltZXIoc3RhdGUpKSB7XG4gICAgICBjbGVhckludGVydmFsKHNlbGVjdFVwZ3JhZGVUaW1lcihzdGF0ZSkpO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBQ1RJT05TLkNMRUFSX1VQR1JBREVfVElNRVIsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0F1dG9VcGRhdGUoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5BVVRPX1VQREFURV9ET1dOTE9BREVELFxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLkFVVE9fVVBEQVRFX0RPV05MT0FERUQpKTtcblxuICAgIGRpc3BhdGNoKGRvQ2xlYXJVcGdyYWRlVGltZXIoKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0F1dG9VcGRhdGVEZWNsaW5lZCgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaChkb0NsZWFyVXBncmFkZVRpbWVyKCkpO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5BVVRPX1VQREFURV9ERUNMSU5FRCxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQ2FuY2VsVXBncmFkZSgpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgdXBncmFkZURvd25sb2FkSXRlbSA9IHNlbGVjdFVwZ3JhZGVEb3dubG9hZEl0ZW0oc3RhdGUpO1xuXG4gICAgaWYgKHVwZ3JhZGVEb3dubG9hZEl0ZW0pIHtcbiAgICAgIC8qXG4gICAgICAgKiBSaWdodCBub3cgdGhlIHJlbW90ZSByZWZlcmVuY2UgdG8gdGhlIGRvd25sb2FkIGl0ZW0gZ2V0cyBnYXJiYWdlIGNvbGxlY3RlZCBhcyBzb29uIGFzIHRoZVxuICAgICAgICogdGhlIGRvd25sb2FkIGlzIG92ZXIgKG1heWJlIGV2ZW4gZWFybGllciksIHNvIHRyeWluZyB0byBjYW5jZWwgYSBmaW5pc2hlZCBkb3dubG9hZCBtYXlcbiAgICAgICAqIHRocm93IGFuIGVycm9yLlxuICAgICAgICovXG4gICAgICB0cnkge1xuICAgICAgICB1cGdyYWRlRG93bmxvYWRJdGVtLmNhbmNlbCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goeyB0eXBlOiBBQ1RJT05TLlVQR1JBREVfQ0FOQ0VMTEVEIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9DaGVja1VwZ3JhZGVBdmFpbGFibGUoKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuQ0hFQ0tfVVBHUkFERV9TVEFSVCxcbiAgICB9KTtcblxuICAgIGlmIChbJ3dpbjMyJywgJ2RhcndpbiddLmluY2x1ZGVzKHByb2Nlc3MucGxhdGZvcm0pIHx8ICEhcHJvY2Vzcy5lbnYuQVBQSU1BR0UpIHtcbiAgICAgIC8vIE9uIFdpbmRvd3MsIE1hYywgYW5kIEFwcEltYWdlLCB1cGRhdGVzIGhhcHBlbiBzaWxlbnRseSB0aHJvdWdoXG4gICAgICAvLyBlbGVjdHJvbi11cGRhdGVyLlxuICAgICAgY29uc3QgYXV0b1VwZGF0ZURlY2xpbmVkID0gc2VsZWN0QXV0b1VwZGF0ZURlY2xpbmVkKHN0YXRlKTtcblxuICAgICAgaWYgKCFhdXRvVXBkYXRlRGVjbGluZWQgJiYgIWlzRGV2KSB7XG4gICAgICAgIGF1dG9VcGRhdGVyLmNoZWNrRm9yVXBkYXRlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoeyByZW1vdGVWZXJzaW9uLCB1cGdyYWRlQXZhaWxhYmxlIH0pID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQUNUSU9OUy5DSEVDS19VUEdSQURFX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cGdyYWRlQXZhaWxhYmxlLFxuICAgICAgICAgIHJlbW90ZVZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICB1cGdyYWRlQXZhaWxhYmxlICYmXG4gICAgICAgICFzZWxlY3RNb2RhbChzdGF0ZSkgJiZcbiAgICAgICAgKCFzZWxlY3RJc1VwZ3JhZGVTa2lwcGVkKHN0YXRlKSB8fCByZW1vdGVWZXJzaW9uICE9PSBzZWxlY3RSZW1vdGVWZXJzaW9uKHN0YXRlKSlcbiAgICAgICkge1xuICAgICAgICBkaXNwYXRjaChkb09wZW5Nb2RhbChNT0RBTFMuVVBHUkFERSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBmYWlsID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBQ1RJT05TLkNIRUNLX1VQR1JBREVfRkFJTCxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBOYXRpdmUuZ2V0QXBwVmVyc2lvbkluZm8oKS50aGVuKHN1Y2Nlc3MsIGZhaWwpO1xuICB9O1xufVxuXG4vKlxuICBJbml0aWF0ZSBhIHRpbWVyIHRoYXQgd2lsbCBjaGVjayBmb3IgYW4gYXBwIHVwZ3JhZGUgZXZlcnkgMTAgbWludXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvQ2hlY2tVcGdyYWRlU3Vic2NyaWJlKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGNvbnN0IGNoZWNrVXBncmFkZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gZGlzcGF0Y2goZG9DaGVja1VwZ3JhZGVBdmFpbGFibGUoKSksIENIRUNLX1VQR1JBREVfSU5URVJWQUwpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkUsXG4gICAgICBkYXRhOiB7IGNoZWNrVXBncmFkZVRpbWVyIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0NoZWNrRGFlbW9uVmVyc2lvbigpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBQ1RJT05TLkRBRU1PTl9WRVJTSU9OX01BVENILFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Ob3RpZnlFbmNyeXB0V2FsbGV0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKGRvT3Blbk1vZGFsKE1PREFMUy5XQUxMRVRfRU5DUllQVCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Ob3RpZnlEZWNyeXB0V2FsbGV0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKGRvT3Blbk1vZGFsKE1PREFMUy5XQUxMRVRfREVDUllQVCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Ob3RpZnlVbmxvY2tXYWxsZXQoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goZG9PcGVuTW9kYWwoTU9EQUxTLldBTExFVF9VTkxPQ0spKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvTm90aWZ5Rm9yZ2V0UGFzc3dvcmQocHJvcHMpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaChkb09wZW5Nb2RhbChNT0RBTFMuV0FMTEVUX1BBU1NXT1JEX1VOU0FWRSwgcHJvcHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQWxlcnRFcnJvcihlcnJvckxpc3QpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaChkb0Vycm9yKGVycm9yTGlzdCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9EYWVtb25SZWFkeSgpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG5cbiAgICAvLyBUT0RPOiBjYWxsIGRvRmV0Y2hEYWVtb25TZXR0aW5ncywgdGhlbiBnZXQgdXNhZ2UgZGF0YSwgYW5kIGNhbGwgZG9BdXRoZW50aWNhdGUgb25jZSB0aGV5IGFyZSBsb2FkZWQgaW50byB0aGUgc3RvcmVcbiAgICBjb25zdCBzaGFyZVVzYWdlRGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTSEFSRV9JTlRFUk5BTCkgPT09ICd0cnVlJyB8fCBJU19XRUI7XG5cbiAgICBkaXNwYXRjaChcbiAgICAgIGRvQXV0aGVudGljYXRlKGFwcFZlcnNpb24sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBzaGFyZVVzYWdlRGF0YSwgc3RhdHVzID0+IHtcbiAgICAgICAgY29uc3QgdHJlbmRpbmdBbGdvcml0aG0gPVxuICAgICAgICAgIHN0YXR1cyAmJlxuICAgICAgICAgIHN0YXR1cy53YWxsZXQgJiZcbiAgICAgICAgICBzdGF0dXMud2FsbGV0LmNvbm5lY3RlZF9mZWF0dXJlcyAmJlxuICAgICAgICAgIHN0YXR1cy53YWxsZXQuY29ubmVjdGVkX2ZlYXR1cmVzLnRyZW5kaW5nX2FsZ29yaXRobTtcblxuICAgICAgICBpZiAodHJlbmRpbmdBbGdvcml0aG0pIHtcbiAgICAgICAgICBhbmFseXRpY3MudHJlbmRpbmdBbGdvcml0aG1FdmVudCh0cmVuZGluZ0FsZ29yaXRobSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICBkaXNwYXRjaCh7IHR5cGU6IEFDVElPTlMuREFFTU9OX1JFQURZIH0pO1xuXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0NsZWFyQ2FjaGUoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgLy8gTmVlZCB0byB1cGRhdGUgdGhpcyB0byB3b3JrIHdpdGggbmV3IHZlcnNpb24gb2YgcmVkdXgtcGVyc2lzdFxuICAgIC8vIExlYXZpbmcgZm9yIG5vd1xuICAgIC8vIGNvbnN0IHJlZHVjZXJzVG9DbGVhciA9IHdoaXRlTGlzdGVkUmVkdWNlcnMuZmlsdGVyKHJlZHVjZXJLZXkgPT4gcmVkdWNlcktleSAhPT0gJ3RhZ3MnKTtcbiAgICAvLyB3aW5kb3cuY2FjaGVTdG9yZS5wdXJnZShyZWR1Y2Vyc1RvQ2xlYXIpO1xuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIGRpc3BhdGNoKGRvQ2xlYXJTdXBwb3J0KCkpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICByZXR1cm4gZGlzcGF0Y2goZG9DbGVhclB1Ymxpc2goKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1F1aXQoKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1F1aXRBbnlEYWVtb24oKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0NoYW5nZVZvbHVtZSh2b2x1bWUpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBQ1RJT05TLlZPTFVNRV9DSEFOR0VELFxuICAgICAgZGF0YToge1xuICAgICAgICB2b2x1bWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9DaGFuZ2VNdXRlKG11dGVkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5WT0xVTUVfTVVURUQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG11dGVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQ2xpY2tDb21tZW50QnV0dG9uKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFDVElPTlMuQUREX0NPTU1FTlQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1RvZ2dsZVNlYXJjaEV4cGFuZGVkKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFDVElPTlMuVE9HR0xFX1NFQVJDSF9FWFBBTkRFRCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQW5hbHl0aWNzVmlldyh1cmksIHRpbWVUb1N0YXJ0KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHsgdHhpZCwgbm91dCwgY2xhaW1faWQ6IGNsYWltSWQgfSA9IG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpKHN0YXRlKTtcbiAgICBjb25zdCBjbGFpbUlzTWluZSA9IG1ha2VTZWxlY3RDbGFpbUlzTWluZSh1cmkpKHN0YXRlKTtcbiAgICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuXG4gICAgaWYgKGNsYWltSXNNaW5lKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuYWx5dGljcy5hcGlMb2dWaWV3KHVyaSwgb3V0cG9pbnQsIGNsYWltSWQsIHRpbWVUb1N0YXJ0KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQW5hbHl0aWNzVGFnU3luYygpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgdGFncyA9IHNlbGVjdEZvbGxvd2VkVGFnc0xpc3Qoc3RhdGUpO1xuICAgIGNvbnN0IHN0cmluZ09mVGFncyA9IHRhZ3Muam9pbignLCcpO1xuICAgIGFuYWx5dGljcy5hcGlTeW5jVGFncyh7IGNvbnRlbnRfdGFnczogc3RyaW5nT2ZUYWdzIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9TaWduSW4oKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goZG9CYWxhbmNlU3Vic2NyaWJlKCkpO1xuICAgIGRpc3BhdGNoKGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUoKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1NpZ25PdXQoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZG9TaWduT3V0Q2xlYW51cCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5wZXJzaXN0b3IucHVyZ2UoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4gbG9jYXRpb24ucmVsb2FkKCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9TZXRXZWxjb21lVmVyc2lvbih2ZXJzaW9uKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQUNUSU9OUy5TRVRfV0VMQ09NRV9WRVJTSU9OLFxuICAgIGRhdGE6IHZlcnNpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1RvZ2dsZTNQQW5hbHl0aWNzKGFsbG93UGFyYW0sIGRvTm90RGlzcGF0Y2gpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgYWxsb3dTdGF0ZSA9IHNlbGVjdEFsbG93QW5hbHl0aWNzKHN0YXRlKTtcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93UGFyYW0gIT09IHVuZGVmaW5lZCAmJiBhbGxvd1BhcmFtICE9PSBudWxsID8gYWxsb3dQYXJhbSA6IGFsbG93U3RhdGU7XG4gICAgYW5hbHl0aWNzLnRvZ2dsZVRoaXJkUGFydHkoYWxsb3cpO1xuICAgIGlmICghZG9Ob3REaXNwYXRjaCkge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQUNUSU9OUy5TRVRfQUxMT1dfQU5BTFlUSUNTLFxuICAgICAgICBkYXRhOiBhbGxvdyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvR2V0QW5kUG9wdWxhdGVQcmVmZXJlbmNlcygpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBmdW5jdGlvbiBzdWNjZXNzQ2Ioc2F2ZWRQcmVmZXJlbmNlcykge1xuICAgICAgLy8gY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgLy8gY29uc3QgZGFlbW9uU2V0dGluZ3MgPSBzZWxlY3REYWVtb25TZXR0aW5ncyhzdGF0ZSk7XG5cbiAgICAgIGlmIChzYXZlZFByZWZlcmVuY2VzICE9PSBudWxsKSB7XG4gICAgICAgIGRpc3BhdGNoKGRvUG9wdWxhdGVTaGFyZWRVc2VyU3RhdGUoc2F2ZWRQcmVmZXJlbmNlcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZhaWxDYigpIHtcbiAgICAgIGRlbGV0ZVNhdmVkUGFzc3dvcmQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgZG9Ub2FzdCh7XG4gICAgICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogX18oJ1VuYWJsZSB0byBsb2FkIHlvdXIgc2F2ZWQgcHJlZmVyZW5jZXMuJyksXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRvUHJlZmVyZW5jZUdldCgnc2hhcmVkJywgc3VjY2Vzc0NiLCBmYWlsQ2IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9TeW5jV2l0aFByZWZlcmVuY2VzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGZ1bmN0aW9uIGhhbmRsZVN5bmNDb21wbGV0ZShlcnJvciwgaGFzTmV3RGF0YSkge1xuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBkaXNwYXRjaChkb0dldEFuZFBvcHVsYXRlUHJlZmVyZW5jZXMoKSk7XG5cbiAgICAgICAgaWYgKGhhc05ld0RhdGEpIHtcbiAgICAgICAgICAvLyB3ZSBqdXN0IGdvdCBzeW5jIGRhdGEsIGJldHRlciB1cGRhdGUgb3VyIGNoYW5uZWxzXG4gICAgICAgICAgZGlzcGF0Y2goZG9GZXRjaENoYW5uZWxMaXN0TWluZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnZXRTYXZlZFBhc3N3b3JkKCkudGhlbihwYXNzd29yZCA9PiB7XG4gICAgICBjb25zdCBwYXNzd29yZEFyZ3VtZW50ID0gcGFzc3dvcmQgPT09IG51bGwgPyAnJyA6IHBhc3N3b3JkO1xuXG4gICAgICBkaXNwYXRjaChkb0dldFN5bmMocGFzc3dvcmRBcmd1bWVudCwgaGFuZGxlU3luY0NvbXBsZXRlKSk7XG4gICAgfSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQU9BO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSkE7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUVBO0FBUEE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUhBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQWpCQTtBQW1CQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFDQTtBQU9BO0FBS0E7QUFDQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBS0E7QUF6Q0E7QUEyQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFGQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFWQTtBQWFBO0FBQUE7QUFBQTtBQW5CQTtBQXNCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUpBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBS0E7QUFDQTtBQURBO0FBTEE7QUFTQTtBQVRBO0FBREE7QUFZQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBVkE7QUFZQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBRkE7QUFRQTtBQUNBO0FBQ0E7QUFyQkE7QUF1QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUhBO0FBWkE7QUFrQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/actions/app.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/content.js": -/*!**************************************!*\ - !*** ../ui/redux/actions/content.js ***! - \**************************************/ -/*! exports provided: doUpdateLoadStatus, doSetPlayingUri, doFetchClaimsByChannel, doPurchaseUriWrapper, doPlayUri, savePosition, doSetContentHistoryItem, doClearContentHistoryUri, doClearContentHistoryAll, doSetHistoryPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doUpdateLoadStatus\", function() { return doUpdateLoadStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetPlayingUri\", function() { return doSetPlayingUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doFetchClaimsByChannel\", function() { return doFetchClaimsByChannel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doPurchaseUriWrapper\", function() { return doPurchaseUriWrapper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doPlayUri\", function() { return doPlayUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"savePosition\", function() { return savePosition; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetContentHistoryItem\", function() { return doSetContentHistoryItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClearContentHistoryUri\", function() { return doClearContentHistoryUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClearContentHistoryAll\", function() { return doClearContentHistoryAll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetHistoryPage\", function() { return doSetHistoryPage; });\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var constants_subscriptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/subscriptions */ \"../ui/constants/subscriptions.js\");\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux/actions/subscriptions */ \"../ui/redux/actions/subscriptions.js\");\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\nvar DOWNLOAD_POLL_INTERVAL = 250;\nfunction doUpdateLoadStatus(uri, outpoint) {// Updates the loading status for a uri as it's downloading\n // Calls file_list and checks the written_bytes value to see if the number has increased\n // Not needed on web as users aren't actually downloading the file\n}\nfunction doSetPlayingUri(uri) {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].SET_PLAYING_URI,\n data: {\n uri: uri\n }\n });\n };\n}\nfunction doFetchClaimsByChannel(uri) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var pageSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : constants_claim__WEBPACK_IMPORTED_MODULE_2__[\"PAGE_SIZE\"];\n return function (dispatch, getState) {\n var state = getState();\n var showMature = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_10__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"SHOW_MATURE\"])(state);\n var params = {\n channel: uri,\n page: page,\n page_size: pageSize,\n valid_channel_signature: true,\n order_by: ['release_time']\n };\n\n if (!showMature) {\n params['not_tags'] = lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"MATURE_TAGS\"];\n }\n\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].FETCH_CHANNEL_CLAIMS_STARTED,\n data: {\n uri: uri,\n page: page\n }\n });\n lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"Lbry\"].claim_search(params).then(function (result) {\n var claims = result.items,\n returnedPage = result.page,\n claimsInChannel = result.total_items,\n pageTotal = result.total_pages;\n\n if (claims && claims.length) {\n if (page === 1) {\n var latest = claims[0];\n dispatch(Object(redux_actions_subscriptions__WEBPACK_IMPORTED_MODULE_6__[\"setSubscriptionLatest\"])({\n channelName: latest.signing_channel.name,\n uri: latest.signing_channel.permanent_url\n }, latest.permanent_url));\n }\n }\n\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].FETCH_CHANNEL_CLAIMS_COMPLETED,\n data: {\n uri: uri,\n claimsInChannel: claimsInChannel,\n claims: claims || [],\n page: returnedPage || undefined,\n totalPages: pageTotal\n }\n });\n });\n };\n}\nfunction doPurchaseUriWrapper(uri, cost, saveFile, cb) {\n return function (dispatch, getState) {\n function onSuccess(fileInfo) {\n if (saveFile) {\n dispatch(doUpdateLoadStatus(uri, fileInfo.outpoint));\n }\n\n if (cb) {\n cb();\n }\n }\n\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"doPurchaseUri\"])(uri, {\n costInfo: cost\n }, saveFile, onSuccess));\n };\n}\nfunction doPlayUri(uri) {\n var skipCostCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var saveFileOverride = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var cb = arguments.length > 3 ? arguments[3] : undefined;\n return function (dispatch, getState) {\n var state = getState();\n var fileInfo = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"makeSelectFileInfoForUri\"])(uri)(state);\n var uriIsStreamable = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"makeSelectUriIsStreamable\"])(uri)(state);\n var downloadingByOutpoint = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"selectDownloadingByOutpoint\"])(state);\n var alreadyDownloaded = fileInfo && (fileInfo.completed || fileInfo.blobs_remaining === 0 && uriIsStreamable);\n var alreadyDownloading = fileInfo && !!downloadingByOutpoint[fileInfo.outpoint];\n\n if (alreadyDownloading || alreadyDownloaded) {\n return;\n }\n\n var daemonSettings = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_10__[\"selectDaemonSettings\"])(state);\n var costInfo = Object(lbryinc__WEBPACK_IMPORTED_MODULE_9__[\"makeSelectCostInfoForUri\"])(uri)(state);\n var cost = costInfo && Number(costInfo.cost) || 0;\n var saveFile = !uriIsStreamable ? true : daemonSettings.save_files || saveFileOverride || cost > 0;\n var instantPurchaseEnabled = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_10__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"INSTANT_PURCHASE_ENABLED\"])(state);\n var instantPurchaseMax = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_10__[\"makeSelectClientSetting\"])(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"INSTANT_PURCHASE_MAX\"])(state);\n\n function beginGetFile() {\n dispatch(doPurchaseUriWrapper(uri, cost, saveFile, cb));\n }\n\n function attemptPlay() {\n var instantPurchaseMax = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; // If you have a file_list entry, you have already purchased the file\n\n if (!fileInfo && (!instantPurchaseMax || !instantPurchaseEnabled || cost > instantPurchaseMax)) {\n dispatch(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_4__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_3__[\"AFFIRM_PURCHASE\"], {\n uri: uri\n }));\n } else {\n beginGetFile();\n }\n }\n\n if (fileInfo && saveFile && (!fileInfo.download_path || !fileInfo.written_bytes)) {\n beginGetFile();\n return;\n }\n\n if (cost === 0 || skipCostCheck) {\n beginGetFile();\n return;\n }\n\n if (instantPurchaseEnabled || instantPurchaseMax.currency === 'LBC') {\n attemptPlay(instantPurchaseMax.amount);\n } else {\n // Need to convert currency of instant purchase maximum before trying to play\n lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"Lbryapi\"].getExchangeRates().then(function (_ref) {\n var LBC_USD = _ref.LBC_USD;\n attemptPlay(instantPurchaseMax.amount / LBC_USD);\n });\n }\n };\n}\nfunction savePosition(uri, position) {\n return function (dispatch, getState) {\n var state = getState();\n var claim = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"makeSelectClaimForUri\"])(uri)(state);\n var claimId = claim.claim_id,\n txid = claim.txid,\n nout = claim.nout;\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].SET_CONTENT_POSITION,\n data: {\n claimId: claimId,\n outpoint: outpoint,\n position: position\n }\n });\n };\n}\nfunction doSetContentHistoryItem(uri) {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].SET_CONTENT_LAST_VIEWED,\n data: {\n uri: uri,\n lastViewed: Date.now()\n }\n });\n };\n}\nfunction doClearContentHistoryUri(uri) {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].CLEAR_CONTENT_HISTORY_URI,\n data: {\n uri: uri\n }\n });\n };\n}\nfunction doClearContentHistoryAll() {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].CLEAR_CONTENT_HISTORY_ALL\n });\n };\n}\nfunction doSetHistoryPage(page) {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_8__[\"ACTIONS\"].SET_CONTENT_HISTORY_PAGE,\n data: {\n page: page\n }\n });\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9jb250ZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L2FjdGlvbnMvY29udGVudC5qcz8yMjUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBTRVRUSU5HUyBmcm9tICdjb25zdGFudHMvc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgTk9USUZJQ0FUSU9OX1RZUEVTIGZyb20gJ2NvbnN0YW50cy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFBBR0VfU0laRSB9IGZyb20gJ2NvbnN0YW50cy9jbGFpbSc7XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgcHVzaCB9IGZyb20gJ2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgc2V0U3Vic2NyaXB0aW9uTGF0ZXN0LCBkb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnMgfSBmcm9tICdyZWR1eC9hY3Rpb25zL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdFVucmVhZEJ5Q2hhbm5lbCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7XG4gIEFDVElPTlMsXG4gIE1BVFVSRV9UQUdTLFxuICBMYnJ5LFxuICBMYnJ5YXBpLFxuICBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmksXG4gIHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQsXG4gIG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmksXG4gIHBhcnNlVVJJLFxuICBkb1B1cmNoYXNlVXJpLFxuICBtYWtlU2VsZWN0VXJpSXNTdHJlYW1hYmxlLFxuICBzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQsXG4gIG1ha2VTZWxlY3RDbGFpbUZvclVyaSxcbn0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCB7IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nLCBzZWxlY3Rvc05vdGlmaWNhdGlvbnNFbmFibGVkLCBzZWxlY3REYWVtb25TZXR0aW5ncyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuXG5jb25zdCBET1dOTE9BRF9QT0xMX0lOVEVSVkFMID0gMjUwO1xuXG5leHBvcnQgZnVuY3Rpb24gZG9VcGRhdGVMb2FkU3RhdHVzKHVyaTogc3RyaW5nLCBvdXRwb2ludDogc3RyaW5nKSB7XG4gIC8vIFVwZGF0ZXMgdGhlIGxvYWRpbmcgc3RhdHVzIGZvciBhIHVyaSBhcyBpdCdzIGRvd25sb2FkaW5nXG4gIC8vIENhbGxzIGZpbGVfbGlzdCBhbmQgY2hlY2tzIHRoZSB3cml0dGVuX2J5dGVzIHZhbHVlIHRvIHNlZSBpZiB0aGUgbnVtYmVyIGhhcyBpbmNyZWFzZWRcbiAgLy8gTm90IG5lZWRlZCBvbiB3ZWIgYXMgdXNlcnMgYXJlbid0IGFjdHVhbGx5IGRvd25sb2FkaW5nIHRoZSBmaWxlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1NldFBsYXlpbmdVcmkodXJpOiA/c3RyaW5nKSB7XG4gIHJldHVybiAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5TRVRfUExBWUlOR19VUkksXG4gICAgICBkYXRhOiB7IHVyaSB9LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9GZXRjaENsYWltc0J5Q2hhbm5lbCh1cmk6IHN0cmluZywgcGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IFBBR0VfU0laRSkge1xuICByZXR1cm4gKGRpc3BhdGNoOiBEaXNwYXRjaCwgZ2V0U3RhdGU6IEdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHNob3dNYXR1cmUgPSBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5TSE9XX01BVFVSRSkoc3RhdGUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGNoYW5uZWw6IHVyaSxcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlX3NpemU6IHBhZ2VTaXplLFxuICAgICAgdmFsaWRfY2hhbm5lbF9zaWduYXR1cmU6IHRydWUsXG4gICAgICBvcmRlcl9ieTogWydyZWxlYXNlX3RpbWUnXSxcbiAgICB9O1xuXG4gICAgaWYgKCFzaG93TWF0dXJlKSB7XG4gICAgICBwYXJhbXNbJ25vdF90YWdzJ10gPSBNQVRVUkVfVEFHUztcbiAgICB9XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBQ1RJT05TLkZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQsXG4gICAgICBkYXRhOiB7IHVyaSwgcGFnZSB9LFxuICAgIH0pO1xuXG4gICAgTGJyeS5jbGFpbV9zZWFyY2gocGFyYW1zKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCB7IGl0ZW1zOiBjbGFpbXMsIHBhZ2U6IHJldHVybmVkUGFnZSwgdG90YWxfaXRlbXM6IGNsYWltc0luQ2hhbm5lbCwgdG90YWxfcGFnZXM6IHBhZ2VUb3RhbCB9ID0gcmVzdWx0O1xuICAgICAgaWYgKGNsYWltcyAmJiBjbGFpbXMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwYWdlID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgbGF0ZXN0ID0gY2xhaW1zWzBdO1xuICAgICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgICAgc2V0U3Vic2NyaXB0aW9uTGF0ZXN0KFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2hhbm5lbE5hbWU6IGxhdGVzdC5zaWduaW5nX2NoYW5uZWwubmFtZSxcbiAgICAgICAgICAgICAgICB1cmk6IGxhdGVzdC5zaWduaW5nX2NoYW5uZWwucGVybWFuZW50X3VybCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF0ZXN0LnBlcm1hbmVudF91cmxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQUNUSU9OUy5GRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmksXG4gICAgICAgICAgY2xhaW1zSW5DaGFubmVsLFxuICAgICAgICAgIGNsYWltczogY2xhaW1zIHx8IFtdLFxuICAgICAgICAgIHBhZ2U6IHJldHVybmVkUGFnZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgdG90YWxQYWdlczogcGFnZVRvdGFsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1B1cmNoYXNlVXJpV3JhcHBlcih1cmk6IHN0cmluZywgY29zdDogbnVtYmVyLCBzYXZlRmlsZTogYm9vbGVhbiwgY2I6ID8oKSA9PiB2b2lkKSB7XG4gIHJldHVybiAoZGlzcGF0Y2g6IERpc3BhdGNoLCBnZXRTdGF0ZTogKCkgPT4gYW55KSA9PiB7XG4gICAgZnVuY3Rpb24gb25TdWNjZXNzKGZpbGVJbmZvKSB7XG4gICAgICBpZiAoc2F2ZUZpbGUpIHtcbiAgICAgICAgZGlzcGF0Y2goZG9VcGRhdGVMb2FkU3RhdHVzKHVyaSwgZmlsZUluZm8ub3V0cG9pbnQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNiKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goZG9QdXJjaGFzZVVyaSh1cmksIHsgY29zdEluZm86IGNvc3QgfSwgc2F2ZUZpbGUsIG9uU3VjY2VzcykpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9QbGF5VXJpKFxuICB1cmk6IHN0cmluZyxcbiAgc2tpcENvc3RDaGVjazogYm9vbGVhbiA9IGZhbHNlLFxuICBzYXZlRmlsZU92ZXJyaWRlOiBib29sZWFuID0gZmFsc2UsXG4gIGNiPzogKCkgPT4gdm9pZFxuKSB7XG4gIHJldHVybiAoZGlzcGF0Y2g6IERpc3BhdGNoLCBnZXRTdGF0ZTogKCkgPT4gYW55KSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGZpbGVJbmZvID0gbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSkoc3RhdGUpO1xuICAgIGNvbnN0IHVyaUlzU3RyZWFtYWJsZSA9IG1ha2VTZWxlY3RVcmlJc1N0cmVhbWFibGUodXJpKShzdGF0ZSk7XG4gICAgY29uc3QgZG93bmxvYWRpbmdCeU91dHBvaW50ID0gc2VsZWN0RG93bmxvYWRpbmdCeU91dHBvaW50KHN0YXRlKTtcbiAgICBjb25zdCBhbHJlYWR5RG93bmxvYWRlZCA9IGZpbGVJbmZvICYmIChmaWxlSW5mby5jb21wbGV0ZWQgfHwgKGZpbGVJbmZvLmJsb2JzX3JlbWFpbmluZyA9PT0gMCAmJiB1cmlJc1N0cmVhbWFibGUpKTtcbiAgICBjb25zdCBhbHJlYWR5RG93bmxvYWRpbmcgPSBmaWxlSW5mbyAmJiAhIWRvd25sb2FkaW5nQnlPdXRwb2ludFtmaWxlSW5mby5vdXRwb2ludF07XG4gICAgaWYgKGFscmVhZHlEb3dubG9hZGluZyB8fCBhbHJlYWR5RG93bmxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhZW1vblNldHRpbmdzID0gc2VsZWN0RGFlbW9uU2V0dGluZ3Moc3RhdGUpO1xuICAgIGNvbnN0IGNvc3RJbmZvID0gbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpKHVyaSkoc3RhdGUpO1xuICAgIGNvbnN0IGNvc3QgPSAoY29zdEluZm8gJiYgTnVtYmVyKGNvc3RJbmZvLmNvc3QpKSB8fCAwO1xuICAgIGNvbnN0IHNhdmVGaWxlID0gIXVyaUlzU3RyZWFtYWJsZSA/IHRydWUgOiBkYWVtb25TZXR0aW5ncy5zYXZlX2ZpbGVzIHx8IHNhdmVGaWxlT3ZlcnJpZGUgfHwgY29zdCA+IDA7XG4gICAgY29uc3QgaW5zdGFudFB1cmNoYXNlRW5hYmxlZCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLklOU1RBTlRfUFVSQ0hBU0VfRU5BQkxFRCkoc3RhdGUpO1xuICAgIGNvbnN0IGluc3RhbnRQdXJjaGFzZU1heCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLklOU1RBTlRfUFVSQ0hBU0VfTUFYKShzdGF0ZSk7XG5cbiAgICBmdW5jdGlvbiBiZWdpbkdldEZpbGUoKSB7XG4gICAgICBkaXNwYXRjaChkb1B1cmNoYXNlVXJpV3JhcHBlcih1cmksIGNvc3QsIHNhdmVGaWxlLCBjYikpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGVtcHRQbGF5KGluc3RhbnRQdXJjaGFzZU1heCA9IG51bGwpIHtcbiAgICAgIC8vIElmIHlvdSBoYXZlIGEgZmlsZV9saXN0IGVudHJ5LCB5b3UgaGF2ZSBhbHJlYWR5IHB1cmNoYXNlZCB0aGUgZmlsZVxuICAgICAgaWYgKCFmaWxlSW5mbyAmJiAoIWluc3RhbnRQdXJjaGFzZU1heCB8fCAhaW5zdGFudFB1cmNoYXNlRW5hYmxlZCB8fCBjb3N0ID4gaW5zdGFudFB1cmNoYXNlTWF4KSkge1xuICAgICAgICBkaXNwYXRjaChkb09wZW5Nb2RhbChNT0RBTFMuQUZGSVJNX1BVUkNIQVNFLCB7IHVyaSB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWdpbkdldEZpbGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsZUluZm8gJiYgc2F2ZUZpbGUgJiYgKCFmaWxlSW5mby5kb3dubG9hZF9wYXRoIHx8ICFmaWxlSW5mby53cml0dGVuX2J5dGVzKSkge1xuICAgICAgYmVnaW5HZXRGaWxlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvc3QgPT09IDAgfHwgc2tpcENvc3RDaGVjaykge1xuICAgICAgYmVnaW5HZXRGaWxlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbnRQdXJjaGFzZUVuYWJsZWQgfHwgaW5zdGFudFB1cmNoYXNlTWF4LmN1cnJlbmN5ID09PSAnTEJDJykge1xuICAgICAgYXR0ZW1wdFBsYXkoaW5zdGFudFB1cmNoYXNlTWF4LmFtb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5lZWQgdG8gY29udmVydCBjdXJyZW5jeSBvZiBpbnN0YW50IHB1cmNoYXNlIG1heGltdW0gYmVmb3JlIHRyeWluZyB0byBwbGF5XG4gICAgICBMYnJ5YXBpLmdldEV4Y2hhbmdlUmF0ZXMoKS50aGVuKCh7IExCQ19VU0QgfSkgPT4ge1xuICAgICAgICBhdHRlbXB0UGxheShpbnN0YW50UHVyY2hhc2VNYXguYW1vdW50IC8gTEJDX1VTRCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlUG9zaXRpb24odXJpOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgcmV0dXJuIChkaXNwYXRjaDogRGlzcGF0Y2gsIGdldFN0YXRlOiAoKSA9PiBhbnkpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgY2xhaW0gPSBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKShzdGF0ZSk7XG4gICAgY29uc3QgeyBjbGFpbV9pZDogY2xhaW1JZCwgdHhpZCwgbm91dCB9ID0gY2xhaW07XG4gICAgY29uc3Qgb3V0cG9pbnQgPSBgJHt0eGlkfToke25vdXR9YDtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuU0VUX0NPTlRFTlRfUE9TSVRJT04sXG4gICAgICBkYXRhOiB7IGNsYWltSWQsIG91dHBvaW50LCBwb3NpdGlvbiB9LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9TZXRDb250ZW50SGlzdG9yeUl0ZW0odXJpOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChkaXNwYXRjaDogRGlzcGF0Y2gpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBQ1RJT05TLlNFVF9DT05URU5UX0xBU1RfVklFV0VELFxuICAgICAgZGF0YTogeyB1cmksIGxhc3RWaWV3ZWQ6IERhdGUubm93KCkgfSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvQ2xlYXJDb250ZW50SGlzdG9yeVVyaSh1cmk6IHN0cmluZykge1xuICByZXR1cm4gKGRpc3BhdGNoOiBEaXNwYXRjaCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSSxcbiAgICAgIGRhdGE6IHsgdXJpIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0NsZWFyQ29udGVudEhpc3RvcnlBbGwoKSB7XG4gIHJldHVybiAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiBBQ1RJT05TLkNMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1NldEhpc3RvcnlQYWdlKHBhZ2U6IHN0cmluZykge1xuICByZXR1cm4gKGRpc3BhdGNoOiBEaXNwYXRjaCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuU0VUX0NPTlRFTlRfSElTVE9SWV9QQUdFLFxuICAgICAgZGF0YTogeyBwYWdlIH0sXG4gICAgfSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBTUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBRkE7QUFqQkE7QUFwQkE7QUFpREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFYQTtBQWFBO0FBRUE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFoREE7QUFrREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQU5BO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/redux/actions/content.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/file.js": -/*!***********************************!*\ - !*** ../ui/redux/actions/file.js ***! - \***********************************/ -/*! exports provided: doOpenFileInFolder, doOpenFileInShell, doDeleteFile, doDeleteFileAndMaybeGoBack */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doOpenFileInFolder\", function() { return doOpenFileInFolder; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doOpenFileInShell\", function() { return doOpenFileInShell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doDeleteFile\", function() { return doDeleteFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doDeleteFileAndMaybeGoBack\", function() { return doDeleteFileAndMaybeGoBack; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var redux_actions_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/actions/content */ \"../ui/redux/actions/content.js\");\n/* harmony import */ var redux_selectors_content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/content */ \"../ui/redux/selectors/content.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\n\nfunction doOpenFileInFolder(path) {\n return function () {\n shell.showItemInFolder(path);\n };\n}\nfunction doOpenFileInShell(path) {\n return function (dispatch) {\n var success = shell.openItem(path);\n\n if (!success) {\n dispatch(doOpenFileInFolder(path));\n }\n };\n}\nfunction doDeleteFile(outpoint, deleteFromComputer, abandonClaim) {\n return function (dispatch, getState) {\n var state = getState();\n lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"Lbry\"].file_delete({\n outpoint: outpoint,\n delete_from_download_dir: deleteFromComputer\n }); // If the file is for a claim we published then also abandon the claim\n\n var myClaimsOutpoints = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectMyClaimsOutpoints\"])(state);\n\n if (abandonClaim && myClaimsOutpoints.includes(outpoint)) {\n var _outpoint$split = outpoint.split(':'),\n _outpoint$split2 = _slicedToArray(_outpoint$split, 2),\n txid = _outpoint$split2[0],\n nout = _outpoint$split2[1];\n\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"doAbandonClaim\"])(txid, Number(nout)));\n }\n };\n}\nfunction doDeleteFileAndMaybeGoBack(uri, deleteFromComputer, abandonClaim) {\n return function (dispatch, getState) {\n var state = getState();\n var playingUri = Object(redux_selectors_content__WEBPACK_IMPORTED_MODULE_5__[\"selectPlayingUri\"])(state);\n\n var _ref = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileInfoForUri\"])(uri)(state) || '',\n outpoint = _ref.outpoint;\n\n var _makeSelectClaimForUr = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(uri)(state),\n nout = _makeSelectClaimForUr.nout,\n txid = _makeSelectClaimForUr.txid;\n\n var claimOutpoint = \"\".concat(txid, \":\").concat(nout);\n var actions = [];\n actions.push(Object(redux_actions_app__WEBPACK_IMPORTED_MODULE_2__[\"doHideModal\"])());\n actions.push(doDeleteFile(outpoint || claimOutpoint, deleteFromComputer, abandonClaim));\n\n if (playingUri === uri) {\n actions.push(Object(redux_actions_content__WEBPACK_IMPORTED_MODULE_4__[\"doSetPlayingUri\"])(null));\n } // it would be nice to stay on the claim if you just want to delete it\n // we need to alter autoplay to not start downloading again after you delete it\n\n\n dispatch(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"batchActions\"].apply(void 0, actions));\n\n if (abandonClaim) {\n dispatch(Object(connected_react_router__WEBPACK_IMPORTED_MODULE_3__[\"goBack\"])());\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9maWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L2FjdGlvbnMvZmlsZS5qcz9hYjY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQge1xuICBMYnJ5LFxuICBiYXRjaEFjdGlvbnMsXG4gIGRvQWJhbmRvbkNsYWltLFxuICBzZWxlY3RNeUNsYWltc091dHBvaW50cyxcbiAgbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG59IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgZG9IaWRlTW9kYWwgfSBmcm9tICdyZWR1eC9hY3Rpb25zL2FwcCc7XG5pbXBvcnQgeyBnb0JhY2sgfSBmcm9tICdjb25uZWN0ZWQtcmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGRvU2V0UGxheWluZ1VyaSB9IGZyb20gJ3JlZHV4L2FjdGlvbnMvY29udGVudCc7XG5pbXBvcnQgeyBzZWxlY3RQbGF5aW5nVXJpIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZG9PcGVuRmlsZUluRm9sZGVyKHBhdGgpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBzaGVsbC5zaG93SXRlbUluRm9sZGVyKHBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9PcGVuRmlsZUluU2hlbGwocGF0aCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBzaGVsbC5vcGVuSXRlbShwYXRoKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgIGRpc3BhdGNoKGRvT3BlbkZpbGVJbkZvbGRlcihwYXRoKSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9EZWxldGVGaWxlKG91dHBvaW50LCBkZWxldGVGcm9tQ29tcHV0ZXIsIGFiYW5kb25DbGFpbSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICAgIExicnkuZmlsZV9kZWxldGUoe1xuICAgICAgb3V0cG9pbnQsXG4gICAgICBkZWxldGVfZnJvbV9kb3dubG9hZF9kaXI6IGRlbGV0ZUZyb21Db21wdXRlcixcbiAgICB9KTtcblxuICAgIC8vIElmIHRoZSBmaWxlIGlzIGZvciBhIGNsYWltIHdlIHB1Ymxpc2hlZCB0aGVuIGFsc28gYWJhbmRvbiB0aGUgY2xhaW1cbiAgICBjb25zdCBteUNsYWltc091dHBvaW50cyA9IHNlbGVjdE15Q2xhaW1zT3V0cG9pbnRzKHN0YXRlKTtcbiAgICBpZiAoYWJhbmRvbkNsYWltICYmIG15Q2xhaW1zT3V0cG9pbnRzLmluY2x1ZGVzKG91dHBvaW50KSkge1xuICAgICAgY29uc3QgW3R4aWQsIG5vdXRdID0gb3V0cG9pbnQuc3BsaXQoJzonKTtcblxuICAgICAgZGlzcGF0Y2goZG9BYmFuZG9uQ2xhaW0odHhpZCwgTnVtYmVyKG5vdXQpKSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9EZWxldGVGaWxlQW5kTWF5YmVHb0JhY2sodXJpLCBkZWxldGVGcm9tQ29tcHV0ZXIsIGFiYW5kb25DbGFpbSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBwbGF5aW5nVXJpID0gc2VsZWN0UGxheWluZ1VyaShzdGF0ZSk7XG4gICAgY29uc3QgeyBvdXRwb2ludCB9ID0gbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSkoc3RhdGUpIHx8ICcnO1xuICAgIGNvbnN0IHsgbm91dCwgdHhpZCB9ID0gbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSkoc3RhdGUpO1xuICAgIGNvbnN0IGNsYWltT3V0cG9pbnQgPSBgJHt0eGlkfToke25vdXR9YDtcbiAgICBjb25zdCBhY3Rpb25zID0gW107XG4gICAgYWN0aW9ucy5wdXNoKGRvSGlkZU1vZGFsKCkpO1xuICAgIGFjdGlvbnMucHVzaChkb0RlbGV0ZUZpbGUob3V0cG9pbnQgfHwgY2xhaW1PdXRwb2ludCwgZGVsZXRlRnJvbUNvbXB1dGVyLCBhYmFuZG9uQ2xhaW0pKTtcblxuICAgIGlmIChwbGF5aW5nVXJpID09PSB1cmkpIHtcbiAgICAgIGFjdGlvbnMucHVzaChkb1NldFBsYXlpbmdVcmkobnVsbCkpO1xuICAgIH1cbiAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIHN0YXkgb24gdGhlIGNsYWltIGlmIHlvdSBqdXN0IHdhbnQgdG8gZGVsZXRlIGl0XG4gICAgLy8gd2UgbmVlZCB0byBhbHRlciBhdXRvcGxheSB0byBub3Qgc3RhcnQgZG93bmxvYWRpbmcgYWdhaW4gYWZ0ZXIgeW91IGRlbGV0ZSBpdFxuXG4gICAgZGlzcGF0Y2goYmF0Y2hBY3Rpb25zKC4uLmFjdGlvbnMpKTtcbiAgICBpZiAoYWJhbmRvbkNsYWltKSB7XG4gICAgICBkaXNwYXRjaChnb0JhY2soKSk7XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBZEE7QUFnQkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQW5CQTtBQXFCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/actions/file.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/publish.js": -/*!**************************************!*\ - !*** ../ui/redux/actions/publish.js ***! - \**************************************/ -/*! exports provided: doPublishDesktop, doCheckPendingPublishesApp */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doPublishDesktop\", function() { return doPublishDesktop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doCheckPendingPublishesApp\", function() { return doCheckPendingPublishesApp; });\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./app */ \"../ui/redux/actions/app.js\");\n\n\n\n\n\n\n\n\n\nvar doPublishDesktop = function doPublishDesktop(filePath) {\n return function (dispatch, getState) {\n var publishSuccess = function publishSuccess(successResponse) {\n var state = getState();\n var myClaims = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"selectMyClaims\"])(state);\n var pendingClaim = successResponse.outputs[0];\n analytics__WEBPACK_IMPORTED_MODULE_6__[\"default\"].apiLogPublish(pendingClaim);\n var url = pendingClaim.permanent_url;\n var actions = [];\n actions.push({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"PUBLISH_SUCCESS\"]\n }); // We have to fake a temp claim until the new pending one is returned by claim_list_mine\n // We can't rely on claim_list_mine because there might be some delay before the new claims are returned\n // Doing this allows us to show the pending claim immediately, it will get overwritten by the real one\n\n var isMatch = function isMatch(claim) {\n return claim.claim_id === pendingClaim.claim_id;\n };\n\n var isEdit = myClaims.some(isMatch);\n var myNewClaims = isEdit ? myClaims.map(function (claim) {\n return isMatch(claim) ? pendingClaim : claim;\n }) : myClaims.concat(pendingClaim);\n actions.push(Object(_app__WEBPACK_IMPORTED_MODULE_8__[\"doOpenModal\"])(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"PUBLISH\"], {\n uri: url,\n isEdit: isEdit,\n filePath: filePath\n }));\n actions.push({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"FETCH_CLAIM_LIST_MINE_COMPLETED\"],\n data: {\n claims: myNewClaims\n }\n });\n dispatch(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"batchActions\"].apply(void 0, actions));\n };\n\n var publishFail = function publishFail(error) {\n var actions = [];\n actions.push({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"PUBLISH_FAIL\"]\n });\n actions.push(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doError\"])(error.message));\n dispatch(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"batchActions\"].apply(void 0, actions));\n }; // Redirect on web immediately because we have a file upload progress componenet\n // on the publishes page. This doesn't exist on desktop so wait until we get a response\n // from the SDK\n\n\n dispatch(Object(connected_react_router__WEBPACK_IMPORTED_MODULE_5__[\"push\"])(\"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_2__[\"PUBLISHED\"])));\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doPublish\"])(publishSuccess, publishFail));\n };\n}; // Calls claim_list_mine until any pending publishes are confirmed\n\nvar doCheckPendingPublishesApp = function doCheckPendingPublishesApp() {\n return function (dispatch, getState) {\n var onConfirmed = function onConfirmed(claim) {\n if (Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_4__[\"selectosNotificationsEnabled\"])(getState())) {\n var notif = new window.Notification('LBRY Publish Complete', {\n body: __('%nameOrTitle% has been published to lbry://%name%. Click here to view it.', {\n nameOrTitle: claim.value_type === 'channel' ? \"@\".concat(claim.name) : claim.value.title,\n name: claim.name\n }),\n silent: false\n });\n\n notif.onclick = function () {\n dispatch(Object(connected_react_router__WEBPACK_IMPORTED_MODULE_5__[\"push\"])(Object(util_url__WEBPACK_IMPORTED_MODULE_7__[\"formatLbryUrlForWeb\"])(claim.permanent_url)));\n };\n }\n };\n\n return dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"doCheckPendingPublishes\"])(onConfirmed));\n };\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9wdWJsaXNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L2FjdGlvbnMvcHVibGlzaC5qcz85NTMyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBNT0RBTFMgZnJvbSAnY29uc3RhbnRzL21vZGFsX3R5cGVzJztcbmltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgKiBhcyBQQUdFUyBmcm9tICdjb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0IHsgYmF0Y2hBY3Rpb25zLCBkb0Vycm9yLCBzZWxlY3RNeUNsYWltcywgZG9QdWJsaXNoLCBkb0NoZWNrUGVuZGluZ1B1Ymxpc2hlcyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgc2VsZWN0b3NOb3RpZmljYXRpb25zRW5hYmxlZCB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBwdXNoIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcic7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgeyBmb3JtYXRMYnJ5VXJsRm9yV2ViIH0gZnJvbSAndXRpbC91cmwnO1xuaW1wb3J0IHsgZG9PcGVuTW9kYWwgfSBmcm9tICcuL2FwcCc7XG5cbmV4cG9ydCBjb25zdCBkb1B1Ymxpc2hEZXNrdG9wID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IChkaXNwYXRjaDogRGlzcGF0Y2gsIGdldFN0YXRlOiAoKSA9PiB7fSkgPT4ge1xuICBjb25zdCBwdWJsaXNoU3VjY2VzcyA9IHN1Y2Nlc3NSZXNwb25zZSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IG15Q2xhaW1zID0gc2VsZWN0TXlDbGFpbXMoc3RhdGUpO1xuICAgIGNvbnN0IHBlbmRpbmdDbGFpbSA9IHN1Y2Nlc3NSZXNwb25zZS5vdXRwdXRzWzBdO1xuICAgIGFuYWx5dGljcy5hcGlMb2dQdWJsaXNoKHBlbmRpbmdDbGFpbSk7XG4gICAgY29uc3QgeyBwZXJtYW5lbnRfdXJsOiB1cmwgfSA9IHBlbmRpbmdDbGFpbTtcbiAgICBjb25zdCBhY3Rpb25zID0gW107XG5cblxuICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBBQ1RJT05TLlBVQkxJU0hfU1VDQ0VTUyxcbiAgICB9KTtcbiAgICAvLyBXZSBoYXZlIHRvIGZha2UgYSB0ZW1wIGNsYWltIHVudGlsIHRoZSBuZXcgcGVuZGluZyBvbmUgaXMgcmV0dXJuZWQgYnkgY2xhaW1fbGlzdF9taW5lXG4gICAgLy8gV2UgY2FuJ3QgcmVseSBvbiBjbGFpbV9saXN0X21pbmUgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBzb21lIGRlbGF5IGJlZm9yZSB0aGUgbmV3IGNsYWltcyBhcmUgcmV0dXJuZWRcbiAgICAvLyBEb2luZyB0aGlzIGFsbG93cyB1cyB0byBzaG93IHRoZSBwZW5kaW5nIGNsYWltIGltbWVkaWF0ZWx5LCBpdCB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgcmVhbCBvbmVcbiAgICBjb25zdCBpc01hdGNoID0gY2xhaW0gPT4gY2xhaW0uY2xhaW1faWQgPT09IHBlbmRpbmdDbGFpbS5jbGFpbV9pZDtcbiAgICBjb25zdCBpc0VkaXQgPSBteUNsYWltcy5zb21lKGlzTWF0Y2gpO1xuXG4gICAgY29uc3QgbXlOZXdDbGFpbXMgPSBpc0VkaXRcbiAgICAgID8gbXlDbGFpbXMubWFwKGNsYWltID0+IChpc01hdGNoKGNsYWltKSA/IHBlbmRpbmdDbGFpbSA6IGNsYWltKSlcbiAgICAgIDogbXlDbGFpbXMuY29uY2F0KHBlbmRpbmdDbGFpbSk7XG4gICAgYWN0aW9ucy5wdXNoKFxuICAgICAgZG9PcGVuTW9kYWwoTU9EQUxTLlBVQkxJU0gsIHtcbiAgICAgICAgdXJpOiB1cmwsXG4gICAgICAgIGlzRWRpdCxcbiAgICAgICAgZmlsZVBhdGgsXG4gICAgICB9KVxuICAgICk7XG4gICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xhaW1zOiBteU5ld0NsYWltcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goYmF0Y2hBY3Rpb25zKC4uLmFjdGlvbnMpKTtcbiAgfTtcblxuICBjb25zdCBwdWJsaXNoRmFpbCA9IGVycm9yID0+IHtcbiAgICBjb25zdCBhY3Rpb25zID0gW107XG4gICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEFDVElPTlMuUFVCTElTSF9GQUlMLFxuICAgIH0pO1xuICAgIGFjdGlvbnMucHVzaChkb0Vycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICBkaXNwYXRjaChiYXRjaEFjdGlvbnMoLi4uYWN0aW9ucykpO1xuICB9O1xuXG4gIC8vIFJlZGlyZWN0IG9uIHdlYiBpbW1lZGlhdGVseSBiZWNhdXNlIHdlIGhhdmUgYSBmaWxlIHVwbG9hZCBwcm9ncmVzcyBjb21wb25lbmV0XG4gIC8vIG9uIHRoZSBwdWJsaXNoZXMgcGFnZS4gVGhpcyBkb2Vzbid0IGV4aXN0IG9uIGRlc2t0b3Agc28gd2FpdCB1bnRpbCB3ZSBnZXQgYSByZXNwb25zZVxuICAvLyBmcm9tIHRoZSBTREtcbiAgZGlzcGF0Y2gocHVzaChgLyQvJHtQQUdFUy5QVUJMSVNIRUR9YCkpO1xuXG4gIGRpc3BhdGNoKGRvUHVibGlzaChwdWJsaXNoU3VjY2VzcywgcHVibGlzaEZhaWwpKTtcbn07XG5cbi8vIENhbGxzIGNsYWltX2xpc3RfbWluZSB1bnRpbCBhbnkgcGVuZGluZyBwdWJsaXNoZXMgYXJlIGNvbmZpcm1lZFxuZXhwb3J0IGNvbnN0IGRvQ2hlY2tQZW5kaW5nUHVibGlzaGVzQXBwID0gKCkgPT4gKGRpc3BhdGNoOiBEaXNwYXRjaCwgZ2V0U3RhdGU6IEdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IG9uQ29uZmlybWVkID0gY2xhaW0gPT4ge1xuICAgIGlmIChzZWxlY3Rvc05vdGlmaWNhdGlvbnNFbmFibGVkKGdldFN0YXRlKCkpKSB7XG4gICAgICBjb25zdCBub3RpZiA9IG5ldyB3aW5kb3cuTm90aWZpY2F0aW9uKCdMQlJZIFB1Ymxpc2ggQ29tcGxldGUnLCB7XG4gICAgICAgIGJvZHk6IF9fKCclbmFtZU9yVGl0bGUlIGhhcyBiZWVuIHB1Ymxpc2hlZCB0byBsYnJ5Oi8vJW5hbWUlLiBDbGljayBoZXJlIHRvIHZpZXcgaXQuJywge1xuICAgICAgICAgIG5hbWVPclRpdGxlOiBjbGFpbS52YWx1ZV90eXBlID09PSAnY2hhbm5lbCcgPyBgQCR7Y2xhaW0ubmFtZX1gIDogY2xhaW0udmFsdWUudGl0bGUsXG4gICAgICAgICAgbmFtZTogY2xhaW0ubmFtZSxcbiAgICAgICAgfSksXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIG5vdGlmLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHB1c2goZm9ybWF0TGJyeVVybEZvcldlYihjbGFpbS5wZXJtYW5lbnRfdXJsKSkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBkaXNwYXRjaChkb0NoZWNrUGVuZGluZ1B1Ymxpc2hlcyhvbkNvbmZpcm1lZCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBR0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQWxDQTtBQUNBO0FBb0NBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBNUNBO0FBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQXBEQTtBQUFBO0FBQ0E7QUF1REE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFMQTtBQUNBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFaQTtBQUNBO0FBYUE7QUFmQTtBQUFBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/redux/actions/publish.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/settings.js": -/*!***************************************!*\ - !*** ../ui/redux/actions/settings.js ***! - \***************************************/ -/*! exports provided: IS_MAC, doFetchDaemonSettings, doFindFFmpeg, doGetDaemonStatus, doClearDaemonSetting, doSetDaemonSetting, doSaveCustomWalletServers, doSetClientSetting, doUpdateIsNight, doUpdateIsNightAsync, doSetDarkTime, doSetLanguage, doSetAutoLaunch */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IS_MAC\", function() { return IS_MAC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doFetchDaemonSettings\", function() { return doFetchDaemonSettings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doFindFFmpeg\", function() { return doFindFFmpeg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doGetDaemonStatus\", function() { return doGetDaemonStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doClearDaemonSetting\", function() { return doClearDaemonSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetDaemonSetting\", function() { return doSetDaemonSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSaveCustomWalletServers\", function() { return doSaveCustomWalletServers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetClientSetting\", function() { return doSetClientSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doUpdateIsNight\", function() { return doUpdateIsNight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doUpdateIsNightAsync\", function() { return doUpdateIsNightAsync; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetDarkTime\", function() { return doSetDarkTime; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetLanguage\", function() { return doSetLanguage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetAutoLaunch\", function() { return doSetAutoLaunch; });\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n/* harmony import */ var constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/supported_languages */ \"../ui/constants/supported_languages.js\");\n/* harmony import */ var util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! util/autoLaunch */ \"../ui/util/autoLaunch.js\");\n/* harmony import */ var util_autoLaunch__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\n\n\nvar IS_MAC = process.platform === 'darwin';\nvar UPDATE_IS_NIGHT_INTERVAL = 5 * 60 * 1000;\nfunction doFetchDaemonSettings() {\n return function (dispatch) {\n lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].settings_get().then(function (settings) {\n analytics__WEBPACK_IMPORTED_MODULE_2__[\"default\"].toggleInternal(settings.share_usage_data);\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].DAEMON_SETTINGS_RECEIVED,\n data: {\n settings: settings\n }\n });\n });\n };\n}\nfunction doFindFFmpeg() {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"FINDING_FFMPEG_STARTED\"]\n });\n return lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].ffmpeg_find().then(function (done) {\n dispatch(doGetDaemonStatus());\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"FINDING_FFMPEG_COMPLETED\"]\n });\n });\n };\n}\nfunction doGetDaemonStatus() {\n return function (dispatch) {\n return lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].status().then(function (status) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].DAEMON_STATUS_RECEIVED,\n data: {\n status: status\n }\n });\n return status;\n });\n };\n}\nfunction doClearDaemonSetting(key) {\n return function (dispatch) {\n var clearKey = {\n key: key\n };\n lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].settings_clear(clearKey).then(function (defaultSettings) {\n if (Object.values(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SHARED_PREFERENCES\"]).includes(key)) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].SHARED_PREFERENCE_SET,\n data: {\n key: key,\n value: null\n }\n });\n }\n\n if (key === lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SHARED_PREFERENCES\"].WALLET_SERVERS) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"doWalletReconnect\"])());\n }\n });\n lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].settings_get().then(function (settings) {\n analytics__WEBPACK_IMPORTED_MODULE_2__[\"default\"].toggleInternal(settings.share_usage_data);\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].DAEMON_SETTINGS_RECEIVED,\n data: {\n settings: settings\n }\n });\n });\n };\n} // if doPopulate is applying settings, we don't want to cause a loop; doNotDispatch = true.\n\nfunction doSetDaemonSetting(key, value) {\n var doNotDispatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return function (dispatch) {\n var newSettings = {\n key: key,\n value: !value && value !== false ? null : value\n };\n lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].settings_set(newSettings).then(function (newSetting) {\n if (Object.values(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SHARED_PREFERENCES\"]).includes(key) && !doNotDispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].SHARED_PREFERENCE_SET,\n data: {\n key: key,\n value: newSetting[key]\n }\n });\n } // hardcoding this in lieu of a better solution\n\n\n if (key === lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SHARED_PREFERENCES\"].WALLET_SERVERS) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"doWalletReconnect\"])()); // todo: add sdk reloadsettings() (or it happens automagically?)\n }\n });\n lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"Lbry\"].settings_get().then(function (settings) {\n analytics__WEBPACK_IMPORTED_MODULE_2__[\"default\"].toggleInternal(settings.share_usage_data);\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].DAEMON_SETTINGS_RECEIVED,\n data: {\n settings: settings\n }\n });\n });\n };\n}\nfunction doSaveCustomWalletServers(servers) {\n return {\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].SAVE_CUSTOM_WALLET_SERVERS,\n data: servers\n };\n}\nfunction doSetClientSetting(key, value) {\n return function (dispatch) {\n dispatch({\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].CLIENT_SETTING_CHANGED,\n data: {\n key: key,\n value: value\n }\n });\n };\n}\nfunction doUpdateIsNight() {\n return {\n type: lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"ACTIONS\"].UPDATE_IS_NIGHT\n };\n}\nfunction doUpdateIsNightAsync() {\n return function (dispatch) {\n dispatch(doUpdateIsNight());\n setInterval(function () {\n return dispatch(doUpdateIsNight());\n }, UPDATE_IS_NIGHT_INTERVAL);\n };\n}\nfunction doSetDarkTime(value, options) {\n var fromTo = options.fromTo,\n time = options.time;\n return function (dispatch, getState) {\n var state = getState();\n var darkModeTimes = state.settings.clientSettings[lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].DARK_MODE_TIMES];\n var _darkModeTimes$fromTo = darkModeTimes[fromTo],\n hour = _darkModeTimes$fromTo.hour,\n min = _darkModeTimes$fromTo.min;\n var newHour = time === 'hour' ? value : hour;\n var newMin = time === 'min' ? value : min;\n\n var modifiedTimes = _defineProperty({}, fromTo, {\n hour: newHour,\n min: newMin,\n formattedTime: newHour + ':' + newMin\n });\n\n var mergedTimes = _objectSpread({}, darkModeTimes, {}, modifiedTimes);\n\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].DARK_MODE_TIMES, mergedTimes));\n dispatch(doUpdateIsNight());\n };\n}\nfunction doSetLanguage(language) {\n return function (dispatch, getState) {\n var _getState = getState(),\n settings = _getState.settings;\n\n if (settings.language !== language || settings.loadedLanguages && !settings.loadedLanguages.includes(language)) {\n // this should match the behavior/logic in index-web.html\n fetch('https://lbry.com/i18n/get/lbry-desktop/app-strings/' + language + '.json').then(function (r) {\n return r.json();\n }).then(function (j) {\n window.i18n_messages[language] = j;\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__[\"DOWNLOAD_LANGUAGE_SUCCESS\"],\n data: {\n language: language\n }\n });\n }).then(function () {\n // set on localStorage so it can be read outside of redux\n window.localStorage.setItem(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].LANGUAGE, language);\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].LANGUAGE, language));\n })[\"catch\"](function (e) {\n window.localStorage.setItem(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].LANGUAGE, 'en');\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].LANGUAGE, 'en'));\n var languageName = constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__[\"default\"][language] ? constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__[\"default\"][language] : language;\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"doToast\"])({\n message: __('Failed to load %language% translations.', {\n language: languageName\n }),\n isError: true\n }));\n });\n }\n };\n}\nfunction doSetAutoLaunch(value) {\n return function (dispatch, getState) {\n var state = getState();\n var autoLaunch = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_5__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH)(state);\n\n if (IS_MAC || undefined !== 'production') {\n return;\n }\n\n if (value === undefined) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].isEnabled().then(function (isEnabled) {\n if (isEnabled) {\n if (!autoLaunch) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].disable().then(function () {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, false));\n });\n }\n } else {\n if (autoLaunch || autoLaunch === null || autoLaunch === undefined) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].enable().then(function () {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, true));\n });\n }\n }\n });\n } else if (value === true) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].isEnabled().then(function (isEnabled) {\n if (!isEnabled) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].enable().then(function () {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, true));\n });\n } else {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, true));\n }\n });\n } else {\n // value = false\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].isEnabled().then(function (isEnabled) {\n if (isEnabled) {\n util_autoLaunch__WEBPACK_IMPORTED_MODULE_4__[\"launcher\"].disable().then(function () {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, false));\n });\n } else {\n dispatch(doSetClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"SETTINGS\"].AUTO_LAUNCH, false));\n }\n });\n }\n };\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9yZWR1eC9hY3Rpb25zL3NldHRpbmdzLmpzPzUwOWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGJyeSwgQUNUSU9OUywgZG9Ub2FzdCwgU0hBUkVEX1BSRUZFUkVOQ0VTLCBkb1dhbGxldFJlY29ubmVjdCwgU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCAqIGFzIExPQ0FMX0FDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5pbXBvcnQgU1VQUE9SVEVEX0xBTkdVQUdFUyBmcm9tICdjb25zdGFudHMvc3VwcG9ydGVkX2xhbmd1YWdlcyc7XG5pbXBvcnQgeyBsYXVuY2hlciB9IGZyb20gJ3V0aWwvYXV0b0xhdW5jaCc7XG5pbXBvcnQgeyBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyB9IGZyb20gJ3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncyc7XG5cbmV4cG9ydCBjb25zdCBJU19NQUMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmNvbnN0IFVQREFURV9JU19OSUdIVF9JTlRFUlZBTCA9IDUgKiA2MCAqIDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0ZldGNoRGFlbW9uU2V0dGluZ3MoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgTGJyeS5zZXR0aW5nc19nZXQoKS50aGVuKHNldHRpbmdzID0+IHtcbiAgICAgIGFuYWx5dGljcy50b2dnbGVJbnRlcm5hbChzZXR0aW5ncy5zaGFyZV91c2FnZV9kYXRhKTtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQUNUSU9OUy5EQUVNT05fU0VUVElOR1NfUkVDRUlWRUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9GaW5kRkZtcGVnKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IExPQ0FMX0FDVElPTlMuRklORElOR19GRk1QRUdfU1RBUlRFRCxcbiAgICB9KTtcbiAgICByZXR1cm4gTGJyeS5mZm1wZWdfZmluZCgpLnRoZW4oZG9uZSA9PiB7XG4gICAgICBkaXNwYXRjaChkb0dldERhZW1vblN0YXR1cygpKTtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogTE9DQUxfQUNUSU9OUy5GSU5ESU5HX0ZGTVBFR19DT01QTEVURUQsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvR2V0RGFlbW9uU3RhdHVzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIHJldHVybiBMYnJ5LnN0YXR1cygpLnRoZW4oc3RhdHVzID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQUNUSU9OUy5EQUVNT05fU1RBVFVTX1JFQ0VJVkVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3RhdHVzO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9DbGVhckRhZW1vblNldHRpbmcoa2V5KSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgY29uc3QgY2xlYXJLZXkgPSB7XG4gICAgICBrZXksXG4gICAgfTtcbiAgICBMYnJ5LnNldHRpbmdzX2NsZWFyKGNsZWFyS2V5KS50aGVuKGRlZmF1bHRTZXR0aW5ncyA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhTSEFSRURfUFJFRkVSRU5DRVMpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFDVElPTlMuU0hBUkVEX1BSRUZFUkVOQ0VfU0VULFxuICAgICAgICAgIGRhdGE6IHsga2V5OiBrZXksIHZhbHVlOiBudWxsIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gU0hBUkVEX1BSRUZFUkVOQ0VTLldBTExFVF9TRVJWRVJTKSB7XG4gICAgICAgIGRpc3BhdGNoKGRvV2FsbGV0UmVjb25uZWN0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIExicnkuc2V0dGluZ3NfZ2V0KCkudGhlbihzZXR0aW5ncyA9PiB7XG4gICAgICBhbmFseXRpY3MudG9nZ2xlSW50ZXJuYWwoc2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSk7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFDVElPTlMuREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbi8vIGlmIGRvUG9wdWxhdGUgaXMgYXBwbHlpbmcgc2V0dGluZ3MsIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UgYSBsb29wOyBkb05vdERpc3BhdGNoID0gdHJ1ZS5cbmV4cG9ydCBmdW5jdGlvbiBkb1NldERhZW1vblNldHRpbmcoa2V5LCB2YWx1ZSwgZG9Ob3REaXNwYXRjaCA9IGZhbHNlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZTogIXZhbHVlICYmIHZhbHVlICE9PSBmYWxzZSA/IG51bGwgOiB2YWx1ZSxcbiAgICB9O1xuICAgIExicnkuc2V0dGluZ3Nfc2V0KG5ld1NldHRpbmdzKS50aGVuKG5ld1NldHRpbmcgPT4ge1xuICAgICAgaWYgKE9iamVjdC52YWx1ZXMoU0hBUkVEX1BSRUZFUkVOQ0VTKS5pbmNsdWRlcyhrZXkpICYmICFkb05vdERpc3BhdGNoKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBQ1RJT05TLlNIQVJFRF9QUkVGRVJFTkNFX1NFVCxcbiAgICAgICAgICBkYXRhOiB7IGtleToga2V5LCB2YWx1ZTogbmV3U2V0dGluZ1trZXldIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaGFyZGNvZGluZyB0aGlzIGluIGxpZXUgb2YgYSBiZXR0ZXIgc29sdXRpb25cbiAgICAgIGlmIChrZXkgPT09IFNIQVJFRF9QUkVGRVJFTkNFUy5XQUxMRVRfU0VSVkVSUykge1xuICAgICAgICBkaXNwYXRjaChkb1dhbGxldFJlY29ubmVjdCgpKTtcbiAgICAgICAgLy8gdG9kbzogYWRkIHNkayByZWxvYWRzZXR0aW5ncygpIChvciBpdCBoYXBwZW5zIGF1dG9tYWdpY2FsbHk/KVxuICAgICAgfVxuICAgIH0pO1xuICAgIExicnkuc2V0dGluZ3NfZ2V0KCkudGhlbihzZXR0aW5ncyA9PiB7XG4gICAgICBhbmFseXRpY3MudG9nZ2xlSW50ZXJuYWwoc2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSk7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFDVElPTlMuREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvU2F2ZUN1c3RvbVdhbGxldFNlcnZlcnMoc2VydmVycykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFDVElPTlMuU0FWRV9DVVNUT01fV0FMTEVUX1NFUlZFUlMsXG4gICAgZGF0YTogc2VydmVycyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvU2V0Q2xpZW50U2V0dGluZyhrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5DTElFTlRfU0VUVElOR19DSEFOR0VELFxuICAgICAgZGF0YToge1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvVXBkYXRlSXNOaWdodCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBQ1RJT05TLlVQREFURV9JU19OSUdIVCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvVXBkYXRlSXNOaWdodEFzeW5jKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKGRvVXBkYXRlSXNOaWdodCgpKTtcblxuICAgIHNldEludGVydmFsKCgpID0+IGRpc3BhdGNoKGRvVXBkYXRlSXNOaWdodCgpKSwgVVBEQVRFX0lTX05JR0hUX0lOVEVSVkFMKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvU2V0RGFya1RpbWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeyBmcm9tVG8sIHRpbWUgfSA9IG9wdGlvbnM7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGRhcmtNb2RlVGltZXMgPSBzdGF0ZS5zZXR0aW5ncy5jbGllbnRTZXR0aW5nc1tTRVRUSU5HUy5EQVJLX01PREVfVElNRVNdO1xuICAgIGNvbnN0IHsgaG91ciwgbWluIH0gPSBkYXJrTW9kZVRpbWVzW2Zyb21Ub107XG4gICAgY29uc3QgbmV3SG91ciA9IHRpbWUgPT09ICdob3VyJyA/IHZhbHVlIDogaG91cjtcbiAgICBjb25zdCBuZXdNaW4gPSB0aW1lID09PSAnbWluJyA/IHZhbHVlIDogbWluO1xuICAgIGNvbnN0IG1vZGlmaWVkVGltZXMgPSB7XG4gICAgICBbZnJvbVRvXToge1xuICAgICAgICBob3VyOiBuZXdIb3VyLFxuICAgICAgICBtaW46IG5ld01pbixcbiAgICAgICAgZm9ybWF0dGVkVGltZTogbmV3SG91ciArICc6JyArIG5ld01pbixcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBtZXJnZWRUaW1lcyA9IHsgLi4uZGFya01vZGVUaW1lcywgLi4ubW9kaWZpZWRUaW1lcyB9O1xuXG4gICAgZGlzcGF0Y2goZG9TZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkRBUktfTU9ERV9USU1FUywgbWVyZ2VkVGltZXMpKTtcbiAgICBkaXNwYXRjaChkb1VwZGF0ZUlzTmlnaHQoKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb1NldExhbmd1YWdlKGxhbmd1YWdlKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3QgeyBzZXR0aW5ncyB9ID0gZ2V0U3RhdGUoKTtcbiAgICBpZiAoc2V0dGluZ3MubGFuZ3VhZ2UgIT09IGxhbmd1YWdlIHx8IChzZXR0aW5ncy5sb2FkZWRMYW5ndWFnZXMgJiYgIXNldHRpbmdzLmxvYWRlZExhbmd1YWdlcy5pbmNsdWRlcyhsYW5ndWFnZSkpKSB7XG4gICAgICAvLyB0aGlzIHNob3VsZCBtYXRjaCB0aGUgYmVoYXZpb3IvbG9naWMgaW4gaW5kZXgtd2ViLmh0bWxcbiAgICAgIGZldGNoKCdodHRwczovL2xicnkuY29tL2kxOG4vZ2V0L2xicnktZGVza3RvcC9hcHAtc3RyaW5ncy8nICsgbGFuZ3VhZ2UgKyAnLmpzb24nKVxuICAgICAgICAudGhlbihyID0+IHIuanNvbigpKVxuICAgICAgICAudGhlbihqID0+IHtcbiAgICAgICAgICB3aW5kb3cuaTE4bl9tZXNzYWdlc1tsYW5ndWFnZV0gPSBqO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IExPQ0FMX0FDVElPTlMuRE9XTkxPQURfTEFOR1VBR0VfU1VDQ0VTUyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gc2V0IG9uIGxvY2FsU3RvcmFnZSBzbyBpdCBjYW4gYmUgcmVhZCBvdXRzaWRlIG9mIHJlZHV4XG4gICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNFVFRJTkdTLkxBTkdVQUdFLCBsYW5ndWFnZSk7XG4gICAgICAgICAgZGlzcGF0Y2goZG9TZXRDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkxBTkdVQUdFLCBsYW5ndWFnZSkpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNFVFRJTkdTLkxBTkdVQUdFLCAnZW4nKTtcbiAgICAgICAgICBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoU0VUVElOR1MuTEFOR1VBR0UsICdlbicpKTtcbiAgICAgICAgICBjb25zdCBsYW5ndWFnZU5hbWUgPSBTVVBQT1JURURfTEFOR1VBR0VTW2xhbmd1YWdlXSA/IFNVUFBPUlRFRF9MQU5HVUFHRVNbbGFuZ3VhZ2VdIDogbGFuZ3VhZ2U7XG4gICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBkb1RvYXN0KHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogX18oJ0ZhaWxlZCB0byBsb2FkICVsYW5ndWFnZSUgdHJhbnNsYXRpb25zLicsIHsgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSB9KSxcbiAgICAgICAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9TZXRBdXRvTGF1bmNoKHZhbHVlKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGF1dG9MYXVuY2ggPSBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPX0xBVU5DSCkoc3RhdGUpO1xuXG4gICAgaWYgKElTX01BQyB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhdW5jaGVyLmlzRW5hYmxlZCgpLnRoZW4oaXNFbmFibGVkID0+IHtcbiAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgIGlmICghYXV0b0xhdW5jaCkge1xuICAgICAgICAgICAgbGF1bmNoZXIuZGlzYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT19MQVVOQ0gsIGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGF1dG9MYXVuY2ggfHwgYXV0b0xhdW5jaCA9PT0gbnVsbCB8fCBhdXRvTGF1bmNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxhdW5jaGVyLmVuYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT19MQVVOQ0gsIHRydWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgbGF1bmNoZXIuaXNFbmFibGVkKCkudGhlbihmdW5jdGlvbihpc0VuYWJsZWQpIHtcbiAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgICBsYXVuY2hlci5lbmFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGRvU2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPX0xBVU5DSCwgdHJ1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpc3BhdGNoKGRvU2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPX0xBVU5DSCwgdHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsdWUgPSBmYWxzZVxuICAgICAgbGF1bmNoZXIuaXNFbmFibGVkKCkudGhlbihmdW5jdGlvbihpc0VuYWJsZWQpIHtcbiAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgIGxhdW5jaGVyLmRpc2FibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGRvU2V0Q2xpZW50U2V0dGluZyhTRVRUSU5HUy5BVVRPX0xBVU5DSCwgZmFsc2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaChkb1NldENsaWVudFNldHRpbmcoU0VUVElOR1MuQVVUT19MQVVOQ0gsIGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFGQTtBQURBO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBSkE7QUFXQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBUEE7QUFEQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFGQTtBQWZBO0FBMEJBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUZBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUZBO0FBbEJBO0FBNEJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBREE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFIQTtBQUtBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFrQkE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBSkE7QUFZQTtBQUNBO0FBQ0E7QUFkQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFyQkE7QUEyQkE7QUEvQkE7QUFpQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFiQTtBQURBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFQQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBUEE7QUFTQTtBQTdDQTtBQStDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/redux/actions/settings.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/subscriptions.js": -/*!********************************************!*\ - !*** ../ui/redux/actions/subscriptions.js ***! - \********************************************/ -/*! exports provided: doSetViewMode, setSubscriptionLatest, doUpdateUnreadSubscriptions, doRemoveUnreadSubscriptions, doRemoveUnreadSubscription, doChannelSubscribe, doChannelUnsubscribe, doFetchRecommendedSubscriptions */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doSetViewMode\", function() { return doSetViewMode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setSubscriptionLatest\", function() { return setSubscriptionLatest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doUpdateUnreadSubscriptions\", function() { return doUpdateUnreadSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doRemoveUnreadSubscriptions\", function() { return doRemoveUnreadSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doRemoveUnreadSubscription\", function() { return doRemoveUnreadSubscription; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doChannelSubscribe\", function() { return doChannelSubscribe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doChannelUnsubscribe\", function() { return doChannelUnsubscribe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doFetchRecommendedSubscriptions\", function() { return doFetchRecommendedSubscriptions; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux/selectors/subscriptions */ \"../ui/redux/selectors/subscriptions.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_3__);\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar doSetViewMode = function doSetViewMode(viewMode) {\n return function (dispatch) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_VIEW_MODE\"],\n data: viewMode\n });\n };\n};\nvar setSubscriptionLatest = function setSubscriptionLatest(subscription, uri) {\n return function (dispatch) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_SUBSCRIPTION_LATEST\"],\n data: {\n subscription: subscription,\n uri: uri\n }\n });\n };\n}; // Populate a channels unread subscriptions or update the type\n\nvar doUpdateUnreadSubscriptions = function doUpdateUnreadSubscriptions(channelUri, uris, type) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectUnreadByChannel\"])(state);\n var currentUnreadForChannel = unreadByChannel[channelUri];\n var newUris;\n var newType;\n\n if (!currentUnreadForChannel) {\n newUris = uris;\n newType = type;\n } else {\n if (uris) {\n // If a channel currently has no unread uris, just add them all\n if (!currentUnreadForChannel.uris || !currentUnreadForChannel.uris.length) {\n newUris = uris;\n } else {\n // They already have unreads and now there are new ones\n // Add the new ones to the beginning of the list\n // Make sure there are no duplicates\n var currentUnreadUris = currentUnreadForChannel.uris;\n newUris = uris.filter(function (uri) {\n return !currentUnreadUris.includes(uri);\n }).concat(currentUnreadUris);\n }\n } else {\n newUris = currentUnreadForChannel.uris;\n }\n\n newType = type || currentUnreadForChannel.type;\n }\n\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_SUBSCRIPTION_UNREADS\"],\n data: {\n channel: channelUri,\n uris: newUris,\n type: newType\n }\n });\n };\n}; // Remove multiple files (or all) from a channels unread subscriptions\n\nvar doRemoveUnreadSubscriptions = function doRemoveUnreadSubscriptions(channelUri, readUris) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = Object(redux_selectors_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"selectUnreadByChannel\"])(state); // If no channel is passed in, remove all unread subscriptions from all channels\n\n if (!channelUri) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE_SUBSCRIPTION_UNREADS\"],\n data: {\n channel: null\n }\n });\n }\n\n var currentChannelUnread = unreadByChannel[channelUri];\n\n if (!currentChannelUnread || !currentChannelUnread.uris) {\n // Channel passed in doesn't have any unreads\n return;\n } // For each uri passed in, remove it from the list of unread uris\n // If no uris are passed in, remove them all\n\n\n var newUris;\n\n if (readUris) {\n var urisToRemoveMap = readUris.reduce(function (acc, val) {\n return _objectSpread({}, acc, _defineProperty({}, val, true));\n }, {});\n var filteredUris = currentChannelUnread.uris.filter(function (uri) {\n return !urisToRemoveMap[uri];\n });\n newUris = filteredUris.length ? filteredUris : null;\n } else {\n newUris = null;\n }\n\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE_SUBSCRIPTION_UNREADS\"],\n data: {\n channel: channelUri,\n uris: newUris\n }\n });\n };\n}; // Remove a single file from a channels unread subscriptions\n\nvar doRemoveUnreadSubscription = function doRemoveUnreadSubscription(channelUri, readUri) {\n return function (dispatch) {\n dispatch(doRemoveUnreadSubscriptions(channelUri, [readUri]));\n };\n};\nvar doChannelSubscribe = function doChannelSubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState = getState(),\n daemonSettings = _getState.settings.daemonSettings;\n\n var shareSetting = daemonSettings.share_usage_data;\n var isSharingData = shareSetting || true;\n var subscriptionUri = subscription.uri;\n\n if (!subscriptionUri.startsWith('lbry://')) {\n throw Error(\"Subscription uris must include the \\\"lbry://\\\" prefix.\\nTried to subscribe to \".concat(subscriptionUri));\n }\n\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_SUBSCRIBE\"],\n data: subscription\n }); // if the user isn't sharing data, keep the subscriptions entirely in the app\n\n if (isSharingData || true) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(subscription.uri),\n channelClaimId = _parseURI.channelClaimId; // They are sharing data, we can store their subscriptions in our internal database\n\n\n lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"Lbryio\"].call('subscription', 'new', {\n channel_name: subscription.channelName,\n claim_id: channelClaimId\n });\n dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doClaimRewardType\"])(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"rewards\"].TYPE_SUBSCRIPTION, {\n failSilently: true\n }));\n }\n };\n};\nvar doChannelUnsubscribe = function doChannelUnsubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState2 = getState(),\n daemonSettings = _getState2.settings.daemonSettings;\n\n var shareSetting = daemonSettings.share_usage_data;\n var isSharingData = shareSetting || true;\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_UNSUBSCRIBE\"],\n data: subscription\n });\n\n if (isSharingData) {\n var _parseURI2 = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_3__[\"parseURI\"])(subscription.uri),\n channelClaimId = _parseURI2.channelClaimId;\n\n lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"Lbryio\"].call('subscription', 'delete', {\n claim_id: channelClaimId\n });\n }\n };\n};\nvar doFetchRecommendedSubscriptions = function doFetchRecommendedSubscriptions() {\n return function (dispatch) {\n dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_START\"]\n });\n return lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"Lbryio\"].call('subscription', 'suggest').then(function (suggested) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS\"],\n data: suggested\n });\n })[\"catch\"](function (error) {\n return dispatch({\n type: constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_FAIL\"],\n error: error\n });\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy9zdWJzY3JpcHRpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L2FjdGlvbnMvc3Vic2NyaXB0aW9ucy5qcz85ZDBjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgKiBhcyBBQ1RJT05TIGZyb20gJ2NvbnN0YW50cy9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgTGJyeWlvLCByZXdhcmRzLCBkb0NsYWltUmV3YXJkVHlwZSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgc2VsZWN0VW5yZWFkQnlDaGFubmVsIH0gZnJvbSAncmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcblxuZXhwb3J0IGNvbnN0IGRvU2V0Vmlld01vZGUgPSAodmlld01vZGU6IFZpZXdNb2RlKSA9PiAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PlxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQUNUSU9OUy5TRVRfVklFV19NT0RFLFxuICAgIGRhdGE6IHZpZXdNb2RlLFxuICB9KTtcblxuZXhwb3J0IGNvbnN0IHNldFN1YnNjcmlwdGlvbkxhdGVzdCA9IChzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiwgdXJpOiBzdHJpbmcpID0+IChkaXNwYXRjaDogRGlzcGF0Y2gpID0+XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBBQ1RJT05TLlNFVF9TVUJTQ1JJUFRJT05fTEFURVNULFxuICAgIGRhdGE6IHtcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIHVyaSxcbiAgICB9LFxuICB9KTtcblxuLy8gUG9wdWxhdGUgYSBjaGFubmVscyB1bnJlYWQgc3Vic2NyaXB0aW9ucyBvciB1cGRhdGUgdGhlIHR5cGVcbmV4cG9ydCBjb25zdCBkb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnMgPSAoXG4gIGNoYW5uZWxVcmk6IHN0cmluZyxcbiAgdXJpczogP0FycmF5PHN0cmluZz4sXG4gIHR5cGU6ID9TdWJzY3JpcHRpb25Ob3RpZmljYXRpb25UeXBlXG4pID0+IChkaXNwYXRjaDogRGlzcGF0Y2gsIGdldFN0YXRlOiBHZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IHVucmVhZEJ5Q2hhbm5lbCA9IHNlbGVjdFVucmVhZEJ5Q2hhbm5lbChzdGF0ZSk7XG4gIGNvbnN0IGN1cnJlbnRVbnJlYWRGb3JDaGFubmVsOiBVbnJlYWRTdWJzY3JpcHRpb24gPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbFVyaV07XG5cbiAgbGV0IG5ld1VyaXM7XG4gIGxldCBuZXdUeXBlO1xuXG4gIGlmICghY3VycmVudFVucmVhZEZvckNoYW5uZWwpIHtcbiAgICBuZXdVcmlzID0gdXJpcztcbiAgICBuZXdUeXBlID0gdHlwZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodXJpcykge1xuICAgICAgLy8gSWYgYSBjaGFubmVsIGN1cnJlbnRseSBoYXMgbm8gdW5yZWFkIHVyaXMsIGp1c3QgYWRkIHRoZW0gYWxsXG4gICAgICBpZiAoIWN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXMgfHwgIWN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXMubGVuZ3RoKSB7XG4gICAgICAgIG5ld1VyaXMgPSB1cmlzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhleSBhbHJlYWR5IGhhdmUgdW5yZWFkcyBhbmQgbm93IHRoZXJlIGFyZSBuZXcgb25lc1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBvbmVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVbnJlYWRVcmlzID0gY3VycmVudFVucmVhZEZvckNoYW5uZWwudXJpcztcbiAgICAgICAgbmV3VXJpcyA9IHVyaXMuZmlsdGVyKHVyaSA9PiAhY3VycmVudFVucmVhZFVyaXMuaW5jbHVkZXModXJpKSkuY29uY2F0KGN1cnJlbnRVbnJlYWRVcmlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VXJpcyA9IGN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXM7XG4gICAgfVxuXG4gICAgbmV3VHlwZSA9IHR5cGUgfHwgY3VycmVudFVucmVhZEZvckNoYW5uZWwudHlwZTtcbiAgfVxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBBQ1RJT05TLlVQREFURV9TVUJTQ1JJUFRJT05fVU5SRUFEUyxcbiAgICBkYXRhOiB7XG4gICAgICBjaGFubmVsOiBjaGFubmVsVXJpLFxuICAgICAgdXJpczogbmV3VXJpcyxcbiAgICAgIHR5cGU6IG5ld1R5cGUsXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vLyBSZW1vdmUgbXVsdGlwbGUgZmlsZXMgKG9yIGFsbCkgZnJvbSBhIGNoYW5uZWxzIHVucmVhZCBzdWJzY3JpcHRpb25zXG5leHBvcnQgY29uc3QgZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb25zID0gKGNoYW5uZWxVcmk6ID9zdHJpbmcsIHJlYWRVcmlzOiA/QXJyYXk8c3RyaW5nPikgPT4gKFxuICBkaXNwYXRjaDogRGlzcGF0Y2gsXG4gIGdldFN0YXRlOiBHZXRTdGF0ZVxuKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgdW5yZWFkQnlDaGFubmVsID0gc2VsZWN0VW5yZWFkQnlDaGFubmVsKHN0YXRlKTtcblxuICAvLyBJZiBubyBjaGFubmVsIGlzIHBhc3NlZCBpbiwgcmVtb3ZlIGFsbCB1bnJlYWQgc3Vic2NyaXB0aW9ucyBmcm9tIGFsbCBjaGFubmVsc1xuICBpZiAoIWNoYW5uZWxVcmkpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQUNUSU9OUy5SRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMsXG4gICAgICBkYXRhOiB7IGNoYW5uZWw6IG51bGwgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRDaGFubmVsVW5yZWFkID0gdW5yZWFkQnlDaGFubmVsW2NoYW5uZWxVcmldO1xuICBpZiAoIWN1cnJlbnRDaGFubmVsVW5yZWFkIHx8ICFjdXJyZW50Q2hhbm5lbFVucmVhZC51cmlzKSB7XG4gICAgLy8gQ2hhbm5lbCBwYXNzZWQgaW4gZG9lc24ndCBoYXZlIGFueSB1bnJlYWRzXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yIGVhY2ggdXJpIHBhc3NlZCBpbiwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgdW5yZWFkIHVyaXNcbiAgLy8gSWYgbm8gdXJpcyBhcmUgcGFzc2VkIGluLCByZW1vdmUgdGhlbSBhbGxcbiAgbGV0IG5ld1VyaXM7XG4gIGlmIChyZWFkVXJpcykge1xuICAgIGNvbnN0IHVyaXNUb1JlbW92ZU1hcCA9IHJlYWRVcmlzLnJlZHVjZShcbiAgICAgIChhY2MsIHZhbCkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbdmFsXTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRVcmlzID0gY3VycmVudENoYW5uZWxVbnJlYWQudXJpcy5maWx0ZXIodXJpID0+ICF1cmlzVG9SZW1vdmVNYXBbdXJpXSk7XG4gICAgbmV3VXJpcyA9IGZpbHRlcmVkVXJpcy5sZW5ndGggPyBmaWx0ZXJlZFVyaXMgOiBudWxsO1xuICB9IGVsc2Uge1xuICAgIG5ld1VyaXMgPSBudWxsO1xuICB9XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFDVElPTlMuUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTLFxuICAgIGRhdGE6IHtcbiAgICAgIGNoYW5uZWw6IGNoYW5uZWxVcmksXG4gICAgICB1cmlzOiBuZXdVcmlzLFxuICAgIH0sXG4gIH0pO1xufTtcblxuLy8gUmVtb3ZlIGEgc2luZ2xlIGZpbGUgZnJvbSBhIGNoYW5uZWxzIHVucmVhZCBzdWJzY3JpcHRpb25zXG5leHBvcnQgY29uc3QgZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb24gPSAoY2hhbm5lbFVyaTogc3RyaW5nLCByZWFkVXJpOiBzdHJpbmcpID0+IChkaXNwYXRjaDogRGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb25zKGNoYW5uZWxVcmksIFtyZWFkVXJpXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvQ2hhbm5lbFN1YnNjcmliZSA9IChzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbikgPT4gKGRpc3BhdGNoOiBEaXNwYXRjaCwgZ2V0U3RhdGU6IEdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzZXR0aW5nczogeyBkYWVtb25TZXR0aW5ncyB9LFxuICB9ID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgeyBzaGFyZV91c2FnZV9kYXRhOiBzaGFyZVNldHRpbmcgfSA9IGRhZW1vblNldHRpbmdzO1xuICBjb25zdCBpc1NoYXJpbmdEYXRhID0gc2hhcmVTZXR0aW5nIHx8IElTX1dFQjtcblxuICBjb25zdCBzdWJzY3JpcHRpb25VcmkgPSBzdWJzY3JpcHRpb24udXJpO1xuICBpZiAoIXN1YnNjcmlwdGlvblVyaS5zdGFydHNXaXRoKCdsYnJ5Oi8vJykpIHtcbiAgICB0aHJvdyBFcnJvcihgU3Vic2NyaXB0aW9uIHVyaXMgbXVzdCBpbmNsdWRlIHRoZSBcImxicnk6Ly9cIiBwcmVmaXguXFxuVHJpZWQgdG8gc3Vic2NyaWJlIHRvICR7c3Vic2NyaXB0aW9uVXJpfWApO1xuICB9XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFDVElPTlMuQ0hBTk5FTF9TVUJTQ1JJQkUsXG4gICAgZGF0YTogc3Vic2NyaXB0aW9uLFxuICB9KTtcblxuICAvLyBpZiB0aGUgdXNlciBpc24ndCBzaGFyaW5nIGRhdGEsIGtlZXAgdGhlIHN1YnNjcmlwdGlvbnMgZW50aXJlbHkgaW4gdGhlIGFwcFxuICBpZiAoaXNTaGFyaW5nRGF0YSB8fCBJU19XRUIpIHtcbiAgICBjb25zdCB7IGNoYW5uZWxDbGFpbUlkIH0gPSBwYXJzZVVSSShzdWJzY3JpcHRpb24udXJpKTtcbiAgICAvLyBUaGV5IGFyZSBzaGFyaW5nIGRhdGEsIHdlIGNhbiBzdG9yZSB0aGVpciBzdWJzY3JpcHRpb25zIGluIG91ciBpbnRlcm5hbCBkYXRhYmFzZVxuICAgIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnbmV3Jywge1xuICAgICAgY2hhbm5lbF9uYW1lOiBzdWJzY3JpcHRpb24uY2hhbm5lbE5hbWUsXG4gICAgICBjbGFpbV9pZDogY2hhbm5lbENsYWltSWQsXG4gICAgfSk7XG5cbiAgICBkaXNwYXRjaChkb0NsYWltUmV3YXJkVHlwZShyZXdhcmRzLlRZUEVfU1VCU0NSSVBUSU9OLCB7IGZhaWxTaWxlbnRseTogdHJ1ZSB9KSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkb0NoYW5uZWxVbnN1YnNjcmliZSA9IChzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbikgPT4gKGRpc3BhdGNoOiBEaXNwYXRjaCwgZ2V0U3RhdGU6IEdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzZXR0aW5nczogeyBkYWVtb25TZXR0aW5ncyB9LFxuICB9ID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgeyBzaGFyZV91c2FnZV9kYXRhOiBzaGFyZVNldHRpbmcgfSA9IGRhZW1vblNldHRpbmdzO1xuICBjb25zdCBpc1NoYXJpbmdEYXRhID0gc2hhcmVTZXR0aW5nIHx8IElTX1dFQjtcblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQUNUSU9OUy5DSEFOTkVMX1VOU1VCU0NSSUJFLFxuICAgIGRhdGE6IHN1YnNjcmlwdGlvbixcbiAgfSk7XG5cbiAgaWYgKGlzU2hhcmluZ0RhdGEpIHtcbiAgICBjb25zdCB7IGNoYW5uZWxDbGFpbUlkIH0gPSBwYXJzZVVSSShzdWJzY3JpcHRpb24udXJpKTtcbiAgICBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ2RlbGV0ZScsIHtcbiAgICAgIGNsYWltX2lkOiBjaGFubmVsQ2xhaW1JZCxcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRvRmV0Y2hSZWNvbW1lbmRlZFN1YnNjcmlwdGlvbnMgPSAoKSA9PiAoZGlzcGF0Y2g6IERpc3BhdGNoKSA9PiB7XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBBQ1RJT05TLkdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVCxcbiAgfSk7XG5cbiAgcmV0dXJuIExicnlpby5jYWxsKCdzdWJzY3JpcHRpb24nLCAnc3VnZ2VzdCcpXG4gICAgLnRoZW4oc3VnZ2VzdGVkID0+XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFDVElPTlMuR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHN1Z2dlc3RlZCxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5jYXRjaChlcnJvciA9PlxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBQ1RJT05TLkdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pXG4gICAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQURBO0FBQUE7QUFNQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFEQTtBQUFBO0FBQ0E7QUFTQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQWxDQTtBQUFBO0FBQ0E7QUE0Q0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFmQTtBQW1CQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUF2Q0E7QUFBQTtBQUNBO0FBZ0RBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFLQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQTNCQTtBQUFBO0FBOEJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFqQkE7QUFBQTtBQW9CQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFFQTtBQUNBO0FBRkE7QUFSQTtBQUxBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/redux/actions/subscriptions.js\n"); - -/***/ }), - -/***/ "../ui/redux/actions/tags.js": -/*!***********************************!*\ - !*** ../ui/redux/actions/tags.js ***! - \***********************************/ -/*! exports provided: doToggleTagFollowDesktop */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doToggleTagFollowDesktop\", function() { return doToggleTagFollowDesktop; });\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! analytics */ \"../ui/analytics.js\");\n\n\nvar doToggleTagFollowDesktop = function doToggleTagFollowDesktop(name) {\n return function (dispatch, getState) {\n dispatch(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"doToggleTagFollow\"])(name));\n var state = getState();\n var tags = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"selectFollowedTagsList\"])(state);\n var stringOfTags = tags.join(',');\n analytics__WEBPACK_IMPORTED_MODULE_1__[\"default\"].apiSyncTags({\n content_tags: stringOfTags\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvYWN0aW9ucy90YWdzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L2FjdGlvbnMvdGFncy5qcz9iNDAyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgeyBkb1RvZ2dsZVRhZ0ZvbGxvdywgc2VsZWN0Rm9sbG93ZWRUYWdzTGlzdCB9IGZyb20gJ2xicnktcmVkdXgnO1xuXG5pbXBvcnQgYW5hbHl0aWNzIGZyb20gJ2FuYWx5dGljcyc7XG5cbmV4cG9ydCBjb25zdCBkb1RvZ2dsZVRhZ0ZvbGxvd0Rlc2t0b3AgPSAobmFtZTogc3RyaW5nKSA9PiAoZGlzcGF0Y2g6IERpc3BhdGNoLCBnZXRTdGF0ZTogR2V0U3RhdGUpID0+IHtcbiAgZGlzcGF0Y2goZG9Ub2dnbGVUYWdGb2xsb3cobmFtZSkpO1xuXG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgdGFncyA9IHNlbGVjdEZvbGxvd2VkVGFnc0xpc3Qoc3RhdGUpO1xuICBjb25zdCBzdHJpbmdPZlRhZ3MgPSB0YWdzLmpvaW4oJywnKTtcbiAgYW5hbHl0aWNzLmFwaVN5bmNUYWdzKHsgY29udGVudF90YWdzOiBzdHJpbmdPZlRhZ3MgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQU5BO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/redux/actions/tags.js\n"); - -/***/ }), - -/***/ "../ui/redux/reducers/app.js": -/*!***********************************!*\ - !*** ../ui/redux/reducers/app.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return reducer; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\nvar reducers = {};\nvar defaultState = {\n isLoaded: false,\n modal: null,\n modalProps: {},\n platform: process.platform,\n daemonVersionMatched: null,\n daemonReady: false,\n hasSignature: false,\n badgeNumber: 0,\n volume: 1,\n muted: false,\n autoUpdateDownloaded: false,\n autoUpdateDeclined: false,\n modalsAllowed: true,\n hasClickedComment: false,\n downloadProgress: undefined,\n upgradeDownloading: undefined,\n upgradeDownloadComplete: undefined,\n checkUpgradeTimer: undefined,\n isUpgradeAvailable: undefined,\n isUpgradeSkipped: undefined,\n enhancedLayout: false,\n searchOptionsExpanded: false,\n currentScroll: 0,\n scrollHistory: [0],\n isPasswordSaved: false,\n welcomeVersion: 0.0,\n allowAnalytics: false\n}; // @@router comes from react-router\n// This action is dispatched any time a user navigates forward or back\n\ntry {\n defaultState.volume = Number(sessionStorage.getItem('volume'));\n} catch (e) {}\n\nreducers['@@router/LOCATION_CHANGE'] = function (state, action) {\n var currentScroll = state.currentScroll;\n var scrollHistory = state.scrollHistory && state.scrollHistory.slice() || [];\n var name = action.payload.action;\n var newCurrentScroll = currentScroll;\n\n if (name === 'PUSH') {\n scrollHistory.push(window.scrollY);\n newCurrentScroll = 0;\n } else if (name === 'POP') {\n newCurrentScroll = scrollHistory[scrollHistory.length - 1];\n scrollHistory.pop();\n }\n\n return _objectSpread({}, state, {\n scrollHistory: scrollHistory,\n currentScroll: newCurrentScroll\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"DAEMON_READY\"]] = function (state) {\n return Object.assign({}, state, {\n daemonReady: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"PASSWORD_SAVED\"]] = function (state, action) {\n return Object.assign({}, state, {\n isPasswordSaved: action.data\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"DAEMON_VERSION_MATCH\"]] = function (state) {\n return Object.assign({}, state, {\n daemonVersionMatched: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"DAEMON_VERSION_MISMATCH\"]] = function (state) {\n return Object.assign({}, state, {\n daemonVersionMatched: false\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPGRADE_CANCELLED\"]] = function (state) {\n return Object.assign({}, state, {\n downloadProgress: null,\n upgradeDownloadComplete: false,\n modal: null\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"AUTO_UPDATE_DOWNLOADED\"]] = function (state) {\n return Object.assign({}, state, {\n autoUpdateDownloaded: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"AUTO_UPDATE_DECLINED\"]] = function (state) {\n return Object.assign({}, state, {\n autoUpdateDeclined: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPGRADE_DOWNLOAD_COMPLETED\"]] = function (state, action) {\n return Object.assign({}, state, {\n downloadPath: action.data.path,\n upgradeDownloading: false,\n upgradeDownloadCompleted: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPGRADE_DOWNLOAD_STARTED\"]] = function (state) {\n return Object.assign({}, state, {\n upgradeDownloading: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANGE_MODALS_ALLOWED\"]] = function (state, action) {\n return Object.assign({}, state, {\n modalsAllowed: action.data.modalsAllowed\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SKIP_UPGRADE\"]] = function (state) {\n sessionStorage.setItem('upgradeSkipped', 'true');\n return Object.assign({}, state, {\n isUpgradeSkipped: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"MEDIA_PLAY\"]] = function (state) {\n return Object.assign({}, state, {\n modalsAllowed: false\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"MEDIA_PAUSE\"]] = function (state) {\n return Object.assign({}, state, {\n modalsAllowed: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_PLAYING_URI\"]] = function (state, action) {\n if (action.data.uri === null) {\n return Object.assign({}, state, {\n modalsAllowed: true\n });\n }\n\n return state;\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_VERSION\"]] = function (state, action) {\n return Object.assign({}, state, {\n version: action.data.version\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHECK_UPGRADE_SUCCESS\"]] = function (state, action) {\n return Object.assign({}, state, {\n isUpgradeAvailable: action.data.upgradeAvailable,\n remoteVersion: action.data.remoteVersion\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHECK_UPGRADE_SUBSCRIBE\"]] = function (state, action) {\n return Object.assign({}, state, {\n checkUpgradeTimer: action.data.checkUpgradeTimer\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPGRADE_DOWNLOAD_PROGRESSED\"]] = function (state, action) {\n return Object.assign({}, state, {\n downloadProgress: action.data.percent\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOADING_COMPLETED\"]] = function (state) {\n var badgeNumber = state.badgeNumber; // Don't update the badge number if the window is focused\n\n return Object.assign({}, state, {\n badgeNumber: badgeNumber + 1\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"WINDOW_FOCUSED\"]] = function (state) {\n return Object.assign({}, state, {\n badgeNumber: 0\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"VOLUME_CHANGED\"]] = function (state, action) {\n return Object.assign({}, state, {\n volume: action.data.volume\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"VOLUME_MUTED\"]] = function (state, action) {\n return Object.assign({}, state, {\n muted: action.data.muted\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"HISTORY_NAVIGATE\"]] = function (state) {\n return Object.assign({}, state, {\n modal: undefined,\n modalProps: {}\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CLEAR_UPGRADE_TIMER\"]] = function (state) {\n return Object.assign({}, state, {\n checkUpgradeTimer: undefined\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"ADD_COMMENT\"]] = function (state) {\n return Object.assign({}, state, {\n hasClickedComment: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SHOW_MODAL\"]] = function (state, action) {\n return Object.assign({}, state, {\n modal: action.data.id,\n modalProps: action.data.modalProps\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_WELCOME_VERSION\"]] = function (state, action) {\n return Object.assign({}, state, {\n welcomeVersion: action.data\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_ALLOW_ANALYTICS\"]] = function (state, action) {\n return Object.assign({}, state, {\n allowAnalytics: action.data\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"HIDE_MODAL\"]] = function (state) {\n return Object.assign({}, state, {\n modal: null,\n modalProps: null\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"TOGGLE_SEARCH_EXPANDED\"]] = function (state) {\n return Object.assign({}, state, {\n searchOptionsExpanded: !state.searchOptionsExpanded\n });\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"ACTIONS\"].USER_STATE_POPULATE] = function (state, action) {\n var _action$data = action.data,\n welcomeVersion = _action$data.welcomeVersion,\n allowAnalytics = _action$data.allowAnalytics;\n return _objectSpread({}, state, {}, welcomeVersion !== undefined ? {\n welcomeVersion: welcomeVersion\n } : {}, {}, allowAnalytics !== undefined ? {\n allowAnalytics: allowAnalytics\n } : {});\n};\n\nfunction reducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvcmVkdWNlcnMvYXBwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L3JlZHVjZXJzL2FwcC5qcz83MDczIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBBQ1RJT05TIGFzIExCUllfUkVEVVhfQUNUSU9OUyB9IGZyb20gJ2xicnktcmVkdXgnO1xuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSAnZWxlY3Ryb24nO1xuXG5cbmNvbnN0IHJlZHVjZXJzID0ge307XG5cbmV4cG9ydCB0eXBlIFNuYWNrQmFyID0ge1xuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGxpbmtUZXh0OiBzdHJpbmcsXG4gIGxpbmtUYXJnZXQ6IHN0cmluZyxcbiAgaXNFcnJvcjogYm9vbGVhbixcbn07XG5leHBvcnQgdHlwZSBBcHBTdGF0ZSA9IHtcbiAgaXNMb2FkZWQ6IGJvb2xlYW4sXG4gIG1vZGFsOiA/c3RyaW5nLFxuICBtb2RhbFByb3BzOiBtaXhlZCxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgdXBncmFkZVNraXBwZWQ6IGJvb2xlYW4sXG4gIGRhZW1vblZlcnNpb25NYXRjaGVkOiA/Ym9vbGVhbixcbiAgZGFlbW9uUmVhZHk6IGJvb2xlYW4sXG4gIGhhc1NpZ25hdHVyZTogYm9vbGVhbixcbiAgYmFkZ2VOdW1iZXI6IG51bWJlcixcbiAgdm9sdW1lOiBudW1iZXIsXG4gIGF1dG9VcGRhdGVEZWNsaW5lZDogYm9vbGVhbixcbiAgbW9kYWxzQWxsb3dlZDogYm9vbGVhbixcbiAgZG93bmxvYWRQcm9ncmVzczogP251bWJlcixcbiAgdXBncmFkZURvd25sb2FkaW5nOiA/Ym9vbGVhbixcbiAgdXBncmFkZURvd25sb2FkQ29tcGxldGU6ID9ib29sZWFuLFxuICBjaGVja1VwZ3JhZGVUaW1lcjogP251bWJlcixcbiAgaXNVcGdyYWRlQXZhaWxhYmxlOiA/Ym9vbGVhbixcbiAgaXNVcGdyYWRlU2tpcHBlZDogP2Jvb2xlYW4sXG4gIGhhc0NsaWNrZWRDb21tZW50OiBib29sZWFuLFxuICBlbmhhbmNlZExheW91dDogYm9vbGVhbixcbiAgc2VhcmNoT3B0aW9uc0V4cGFuZGVkOiBib29sZWFuLFxuICBpc1Bhc3N3b3JkU2F2ZWQ6IGJvb2xlYW4sXG4gIHdlbGNvbWVWZXJzaW9uOiBudW1iZXIsXG4gIGFsbG93QW5hbHl0aWNzOiBib29sZWFuLFxufTtcblxuY29uc3QgZGVmYXVsdFN0YXRlOiBBcHBTdGF0ZSA9IHtcbiAgaXNMb2FkZWQ6IGZhbHNlLFxuICBtb2RhbDogbnVsbCxcbiAgbW9kYWxQcm9wczoge30sXG4gIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICBkYWVtb25WZXJzaW9uTWF0Y2hlZDogbnVsbCxcbiAgZGFlbW9uUmVhZHk6IGZhbHNlLFxuICBoYXNTaWduYXR1cmU6IGZhbHNlLFxuICBiYWRnZU51bWJlcjogMCxcbiAgdm9sdW1lOiAxLFxuICBtdXRlZDogZmFsc2UsXG4gIGF1dG9VcGRhdGVEb3dubG9hZGVkOiBmYWxzZSxcbiAgYXV0b1VwZGF0ZURlY2xpbmVkOiBmYWxzZSxcbiAgbW9kYWxzQWxsb3dlZDogdHJ1ZSxcbiAgaGFzQ2xpY2tlZENvbW1lbnQ6IGZhbHNlLFxuICBkb3dubG9hZFByb2dyZXNzOiB1bmRlZmluZWQsXG4gIHVwZ3JhZGVEb3dubG9hZGluZzogdW5kZWZpbmVkLFxuICB1cGdyYWRlRG93bmxvYWRDb21wbGV0ZTogdW5kZWZpbmVkLFxuICBjaGVja1VwZ3JhZGVUaW1lcjogdW5kZWZpbmVkLFxuICBpc1VwZ3JhZGVBdmFpbGFibGU6IHVuZGVmaW5lZCxcbiAgaXNVcGdyYWRlU2tpcHBlZDogdW5kZWZpbmVkLFxuICBlbmhhbmNlZExheW91dDogZmFsc2UsXG4gIHNlYXJjaE9wdGlvbnNFeHBhbmRlZDogZmFsc2UsXG4gIGN1cnJlbnRTY3JvbGw6IDAsXG4gIHNjcm9sbEhpc3Rvcnk6IFswXSxcbiAgaXNQYXNzd29yZFNhdmVkOiBmYWxzZSxcbiAgd2VsY29tZVZlcnNpb246IDAuMCxcbiAgYWxsb3dBbmFseXRpY3M6IGZhbHNlLFxufTtcblxuLy8gQEByb3V0ZXIgY29tZXMgZnJvbSByZWFjdC1yb3V0ZXJcbi8vIFRoaXMgYWN0aW9uIGlzIGRpc3BhdGNoZWQgYW55IHRpbWUgYSB1c2VyIG5hdmlnYXRlcyBmb3J3YXJkIG9yIGJhY2tcbnRyeSB7XG4gIGRlZmF1bHRTdGF0ZS52b2x1bWUgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndm9sdW1lJykpO1xufSBjYXRjaCAoZSkge31cblxucmVkdWNlcnNbJ0BAcm91dGVyL0xPQ0FUSU9OX0NIQU5HRSddID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50U2Nyb2xsIH0gPSBzdGF0ZTtcbiAgY29uc3Qgc2Nyb2xsSGlzdG9yeSA9IChzdGF0ZS5zY3JvbGxIaXN0b3J5ICYmIHN0YXRlLnNjcm9sbEhpc3Rvcnkuc2xpY2UoKSkgfHwgW107XG4gIGNvbnN0IHsgYWN0aW9uOiBuYW1lIH0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBsZXQgbmV3Q3VycmVudFNjcm9sbCA9IGN1cnJlbnRTY3JvbGw7XG4gIGlmIChuYW1lID09PSAnUFVTSCcpIHtcbiAgICBzY3JvbGxIaXN0b3J5LnB1c2god2luZG93LnNjcm9sbFkpO1xuICAgIG5ld0N1cnJlbnRTY3JvbGwgPSAwO1xuICB9IGVsc2UgaWYgKG5hbWUgPT09ICdQT1AnKSB7XG4gICAgbmV3Q3VycmVudFNjcm9sbCA9IHNjcm9sbEhpc3Rvcnlbc2Nyb2xsSGlzdG9yeS5sZW5ndGggLSAxXTtcbiAgICBzY3JvbGxIaXN0b3J5LnBvcCgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzY3JvbGxIaXN0b3J5LFxuICAgIGN1cnJlbnRTY3JvbGw6IG5ld0N1cnJlbnRTY3JvbGwsXG4gIH07XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkRBRU1PTl9SRUFEWV0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGRhZW1vblJlYWR5OiB0cnVlLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5QQVNTV09SRF9TQVZFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBpc1Bhc3N3b3JkU2F2ZWQ6IGFjdGlvbi5kYXRhLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5EQUVNT05fVkVSU0lPTl9NQVRDSF0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGRhZW1vblZlcnNpb25NYXRjaGVkOiB0cnVlLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5EQUVNT05fVkVSU0lPTl9NSVNNQVRDSF0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGRhZW1vblZlcnNpb25NYXRjaGVkOiBmYWxzZSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuVVBHUkFERV9DQU5DRUxMRURdID0gc3RhdGUgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkb3dubG9hZFByb2dyZXNzOiBudWxsLFxuICAgIHVwZ3JhZGVEb3dubG9hZENvbXBsZXRlOiBmYWxzZSxcbiAgICBtb2RhbDogbnVsbCxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuQVVUT19VUERBVEVfRE9XTkxPQURFRF0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGF1dG9VcGRhdGVEb3dubG9hZGVkOiB0cnVlLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5BVVRPX1VQREFURV9ERUNMSU5FRF0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGF1dG9VcGRhdGVEZWNsaW5lZDogdHJ1ZSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuVVBHUkFERV9ET1dOTE9BRF9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZG93bmxvYWRQYXRoOiBhY3Rpb24uZGF0YS5wYXRoLFxuICAgIHVwZ3JhZGVEb3dubG9hZGluZzogZmFsc2UsXG4gICAgdXBncmFkZURvd25sb2FkQ29tcGxldGVkOiB0cnVlLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5VUEdSQURFX0RPV05MT0FEX1NUQVJURURdID0gc3RhdGUgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICB1cGdyYWRlRG93bmxvYWRpbmc6IHRydWUsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkNIQU5HRV9NT0RBTFNfQUxMT1dFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBtb2RhbHNBbGxvd2VkOiBhY3Rpb24uZGF0YS5tb2RhbHNBbGxvd2VkLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5TS0lQX1VQR1JBREVdID0gc3RhdGUgPT4ge1xuICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd1cGdyYWRlU2tpcHBlZCcsICd0cnVlJyk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgaXNVcGdyYWRlU2tpcHBlZDogdHJ1ZSxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLk1FRElBX1BMQVldID0gc3RhdGUgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBtb2RhbHNBbGxvd2VkOiBmYWxzZSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuTUVESUFfUEFVU0VdID0gc3RhdGUgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBtb2RhbHNBbGxvd2VkOiB0cnVlLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5TRVRfUExBWUlOR19VUkldID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgaWYgKGFjdGlvbi5kYXRhLnVyaSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgbW9kYWxzQWxsb3dlZDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlVQREFURV9WRVJTSU9OXSA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHZlcnNpb246IGFjdGlvbi5kYXRhLnZlcnNpb24sXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkNIRUNLX1VQR1JBREVfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBpc1VwZ3JhZGVBdmFpbGFibGU6IGFjdGlvbi5kYXRhLnVwZ3JhZGVBdmFpbGFibGUsXG4gICAgcmVtb3RlVmVyc2lvbjogYWN0aW9uLmRhdGEucmVtb3RlVmVyc2lvbixcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkVdID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgY2hlY2tVcGdyYWRlVGltZXI6IGFjdGlvbi5kYXRhLmNoZWNrVXBncmFkZVRpbWVyLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5VUEdSQURFX0RPV05MT0FEX1BST0dSRVNTRURdID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZG93bmxvYWRQcm9ncmVzczogYWN0aW9uLmRhdGEucGVyY2VudCxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuRE9XTkxPQURJTkdfQ09NUExFVEVEXSA9IHN0YXRlID0+IHtcbiAgY29uc3QgeyBiYWRnZU51bWJlciB9ID0gc3RhdGU7XG5cbiAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBiYWRnZSBudW1iZXIgaWYgdGhlIHdpbmRvdyBpcyBmb2N1c2VkXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYmFkZ2VOdW1iZXI6IGJhZGdlTnVtYmVyICsgMSxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLldJTkRPV19GT0NVU0VEXSA9IHN0YXRlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYmFkZ2VOdW1iZXI6IDAsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlZPTFVNRV9DSEFOR0VEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHZvbHVtZTogYWN0aW9uLmRhdGEudm9sdW1lLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5WT0xVTUVfTVVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgbXV0ZWQ6IGFjdGlvbi5kYXRhLm11dGVkLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5ISVNUT1JZX05BVklHQVRFXSA9IHN0YXRlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgbW9kYWw6IHVuZGVmaW5lZCxcbiAgICBtb2RhbFByb3BzOiB7fSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuQ0xFQVJfVVBHUkFERV9USU1FUl0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGNoZWNrVXBncmFkZVRpbWVyOiB1bmRlZmluZWQsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkFERF9DT01NRU5UXSA9IHN0YXRlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgaGFzQ2xpY2tlZENvbW1lbnQ6IHRydWUsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlNIT1dfTU9EQUxdID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgbW9kYWw6IGFjdGlvbi5kYXRhLmlkLFxuICAgIG1vZGFsUHJvcHM6IGFjdGlvbi5kYXRhLm1vZGFsUHJvcHMsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlNFVF9XRUxDT01FX1ZFUlNJT05dID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgd2VsY29tZVZlcnNpb246IGFjdGlvbi5kYXRhLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5TRVRfQUxMT1dfQU5BTFlUSUNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGFsbG93QW5hbHl0aWNzOiBhY3Rpb24uZGF0YSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuSElERV9NT0RBTF0gPSBzdGF0ZSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIG1vZGFsOiBudWxsLFxuICAgIG1vZGFsUHJvcHM6IG51bGwsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlRPR0dMRV9TRUFSQ0hfRVhQQU5ERURdID0gc3RhdGUgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hPcHRpb25zRXhwYW5kZWQ6ICFzdGF0ZS5zZWFyY2hPcHRpb25zRXhwYW5kZWQsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tMQlJZX1JFRFVYX0FDVElPTlMuVVNFUl9TVEFURV9QT1BVTEFURV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHdlbGNvbWVWZXJzaW9uLCBhbGxvd0FuYWx5dGljcyB9ID0gYWN0aW9uLmRhdGE7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLi4uKHdlbGNvbWVWZXJzaW9uICE9PSB1bmRlZmluZWQgPyB7IHdlbGNvbWVWZXJzaW9uIH0gOiB7fSksXG4gICAgLi4uKGFsbG93QW5hbHl0aWNzICE9PSB1bmRlZmluZWQgPyB7IGFsbG93QW5hbHl0aWNzIH0gOiB7fSksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlOiBBcHBTdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uOiBhbnkpIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQStCQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBRUE7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSEE7QUFkQTtBQUNBO0FBb0JBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBQ0E7QUFNQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBTUE7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUhBO0FBQ0E7QUFPQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBTkE7QUFDQTtBQVFBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBS0E7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBTEE7QUFDQTtBQVNBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBS0E7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUNBO0FBSUE7QUFBQTtBQUVBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFLQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQUZBO0FBREE7QUFDQTtBQUtBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUxBO0FBQ0E7QUFRQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/redux/reducers/app.js\n"); - -/***/ }), - -/***/ "../ui/redux/reducers/availability.js": -/*!********************************************!*\ - !*** ../ui/redux/reducers/availability.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return reducer; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n\nvar reducers = {};\nvar defaultState = {};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FETCH_AVAILABILITY_STARTED\"]] = function (state, action) {\n var uri = action.data.uri;\n var newFetching = Object.assign({}, state.fetching);\n newFetching[uri] = true;\n return Object.assign({}, state, {\n fetching: newFetching\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FETCH_AVAILABILITY_COMPLETED\"]] = function (state, action) {\n var _action$data = action.data,\n uri = _action$data.uri,\n availability = _action$data.availability;\n var newFetching = Object.assign({}, state.fetching);\n var newAvailabilityByUri = Object.assign({}, state.byUri);\n delete newFetching[uri];\n newAvailabilityByUri[uri] = availability;\n return Object.assign({}, state, {\n fetching: newFetching,\n byUri: newAvailabilityByUri\n });\n};\n\nfunction reducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvcmVkdWNlcnMvYXZhaWxhYmlsaXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L3JlZHVjZXJzL2F2YWlsYWJpbGl0eS5qcz9kNDgyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5cbmNvbnN0IHJlZHVjZXJzID0ge307XG5jb25zdCBkZWZhdWx0U3RhdGUgPSB7fTtcblxucmVkdWNlcnNbQUNUSU9OUy5GRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld0ZldGNoaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmcpO1xuXG4gIG5ld0ZldGNoaW5nW3VyaV0gPSB0cnVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nOiBuZXdGZXRjaGluZyxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkZFVENIX0FWQUlMQUJJTElUWV9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmksIGF2YWlsYWJpbGl0eSB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3QgbmV3RmV0Y2hpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5mZXRjaGluZyk7XG4gIGNvbnN0IG5ld0F2YWlsYWJpbGl0eUJ5VXJpID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlVcmkpO1xuXG4gIGRlbGV0ZSBuZXdGZXRjaGluZ1t1cmldO1xuICBuZXdBdmFpbGFiaWxpdHlCeVVyaVt1cmldID0gYXZhaWxhYmlsaXR5O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nOiBuZXdGZXRjaGluZyxcbiAgICBieVVyaTogbmV3QXZhaWxhYmlsaXR5QnlVcmksXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2Vyc1thY3Rpb24udHlwZV07XG4gIGlmIChoYW5kbGVyKSByZXR1cm4gaGFuZGxlcihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQURBO0FBTkE7QUFDQTtBQVVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/reducers/availability.js\n"); - -/***/ }), - -/***/ "../ui/redux/reducers/content.js": -/*!***************************************!*\ - !*** ../ui/redux/reducers/content.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return reducer; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\nvar reducers = {};\nvar defaultState = {\n playingUri: null,\n channelClaimCounts: {},\n positions: {},\n history: []\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_PLAYING_URI\"]] = function (state, action) {\n return Object.assign({}, state, {\n playingUri: action.data.uri\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_CONTENT_POSITION\"]] = function (state, action) {\n var _action$data = action.data,\n claimId = _action$data.claimId,\n outpoint = _action$data.outpoint,\n position = _action$data.position;\n return _objectSpread({}, state, {\n positions: _objectSpread({}, state.positions, _defineProperty({}, claimId, _objectSpread({}, state.positions[claimId], _defineProperty({}, outpoint, position))))\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_CONTENT_LAST_VIEWED\"]] = function (state, action) {\n var _action$data2 = action.data,\n uri = _action$data2.uri,\n lastViewed = _action$data2.lastViewed;\n var history = state.history;\n var historyObj = {\n uri: uri,\n lastViewed: lastViewed\n };\n var index = history.findIndex(function (i) {\n return i.uri === uri;\n });\n var newHistory = index === -1 ? [historyObj].concat(history) : [historyObj].concat(history.slice(0, index), history.slice(index + 1));\n return _objectSpread({}, state, {\n history: _toConsumableArray(newHistory)\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CLEAR_CONTENT_HISTORY_URI\"]] = function (state, action) {\n var uri = action.data.uri;\n var history = state.history;\n var index = history.findIndex(function (i) {\n return i.uri === uri;\n });\n return index === -1 ? state : _objectSpread({}, state, {\n history: history.slice(0, index).concat(history.slice(index + 1))\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CLEAR_CONTENT_HISTORY_ALL\"]] = function (state) {\n return _objectSpread({}, state, {\n history: []\n });\n};\n\nfunction reducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvcmVkdWNlcnMvY29udGVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9yZWR1eC9yZWR1Y2Vycy9jb250ZW50LmpzP2YyMjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQUNUSU9OUyBmcm9tICdjb25zdGFudHMvYWN0aW9uX3R5cGVzJztcblxuY29uc3QgcmVkdWNlcnMgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgcGxheWluZ1VyaTogbnVsbCxcbiAgY2hhbm5lbENsYWltQ291bnRzOiB7fSxcbiAgcG9zaXRpb25zOiB7fSxcbiAgaGlzdG9yeTogW10sXG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlNFVF9QTEFZSU5HX1VSSV0gPSAoc3RhdGUsIGFjdGlvbikgPT5cbiAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBwbGF5aW5nVXJpOiBhY3Rpb24uZGF0YS51cmksXG4gIH0pO1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlNFVF9DT05URU5UX1BPU0lUSU9OXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgY2xhaW1JZCwgb3V0cG9pbnQsIHBvc2l0aW9uIH0gPSBhY3Rpb24uZGF0YTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwb3NpdGlvbnM6IHtcbiAgICAgIC4uLnN0YXRlLnBvc2l0aW9ucyxcbiAgICAgIFtjbGFpbUlkXToge1xuICAgICAgICAuLi5zdGF0ZS5wb3NpdGlvbnNbY2xhaW1JZF0sXG4gICAgICAgIFtvdXRwb2ludF06IHBvc2l0aW9uLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcblxucmVkdWNlcnNbQUNUSU9OUy5TRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSwgbGFzdFZpZXdlZCB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IHsgaGlzdG9yeSB9ID0gc3RhdGU7XG4gIGNvbnN0IGhpc3RvcnlPYmogPSB7IHVyaSwgbGFzdFZpZXdlZCB9O1xuICBjb25zdCBpbmRleCA9IGhpc3RvcnkuZmluZEluZGV4KGkgPT4gaS51cmkgPT09IHVyaSk7XG4gIGNvbnN0IG5ld0hpc3RvcnkgPVxuICAgIGluZGV4ID09PSAtMVxuICAgICAgPyBbaGlzdG9yeU9ial0uY29uY2F0KGhpc3RvcnkpXG4gICAgICA6IFtoaXN0b3J5T2JqXS5jb25jYXQoaGlzdG9yeS5zbGljZSgwLCBpbmRleCksIGhpc3Rvcnkuc2xpY2UoaW5kZXggKyAxKSk7XG4gIHJldHVybiB7IC4uLnN0YXRlLCBoaXN0b3J5OiBbLi4ubmV3SGlzdG9yeV0gfTtcbn07XG5cbnJlZHVjZXJzW0FDVElPTlMuQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX1VSSV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IHsgaGlzdG9yeSB9ID0gc3RhdGU7XG4gIGNvbnN0IGluZGV4ID0gaGlzdG9yeS5maW5kSW5kZXgoaSA9PiBpLnVyaSA9PT0gdXJpKTtcbiAgcmV0dXJuIGluZGV4ID09PSAtMVxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGhpc3Rvcnk6IGhpc3Rvcnkuc2xpY2UoMCwgaW5kZXgpLmNvbmNhdChoaXN0b3J5LnNsaWNlKGluZGV4ICsgMSkpLFxuICAgICAgfTtcbn07XG5cbnJlZHVjZXJzW0FDVElPTlMuQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTF0gPSBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSwgaGlzdG9yeTogW10gfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnNbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUFBO0FBRUE7QUFEQTtBQURBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUZBO0FBRkE7QUFDQTtBQWFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBVEE7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFKQTtBQUpBO0FBQ0E7QUFXQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/reducers/content.js\n"); - -/***/ }), - -/***/ "../ui/redux/reducers/settings.js": -/*!****************************************!*\ - !*** ../ui/redux/reducers/settings.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return reducer; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! moment */ \"../node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! constants/supported_languages */ \"../ui/constants/supported_languages.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_4__);\nvar _clientSettings;\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\n\n\n\n\n\nvar reducers = {};\nvar settingLanguage = [];\n\ntry {\n var appLanguage = window.localStorage.getItem(lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].LANGUAGE);\n settingLanguage.push(appLanguage);\n} catch (e) {}\n\nsettingLanguage.push(window.navigator.language.slice(0, 2));\nsettingLanguage.push('en');\nvar defaultState = {\n isNight: false,\n findingFFmpeg: false,\n loadedLanguages: [].concat(_toConsumableArray(Object.keys(window.i18n_messages)), ['en']) || ['en'],\n customWalletServers: [],\n sharedPreferences: {},\n daemonSettings: {},\n daemonStatus: {\n ffmpeg_status: {}\n },\n clientSettings: (_clientSettings = {}, _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].NEW_USER_ACKNOWLEDGED, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].EMAIL_COLLECTION_ACKNOWLEDGED, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].ENABLE_SYNC, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].LANGUAGE, settingLanguage.find(function (language) {\n return constants_supported_languages__WEBPACK_IMPORTED_MODULE_3__[\"default\"][language];\n })), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].THEME, __('light')), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].THEMES, [__('light'), __('dark')]), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].SUPPORT_OPTION, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].HIDE_SPLASH_ANIMATION, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].HIDE_BALANCE, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].OS_NOTIFICATIONS_ENABLED, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].AUTOMATIC_DARK_MODE_ENABLED, false), _defineProperty(_clientSettings, constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"DARK_MODE_TIMES\"], {\n from: {\n hour: '21',\n min: '00',\n formattedTime: '21:00'\n },\n to: {\n hour: '8',\n min: '00',\n formattedTime: '8:00'\n }\n }), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].INSTANT_PURCHASE_ENABLED, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].INSTANT_PURCHASE_MAX, {\n currency: 'LBC',\n amount: 0.1\n }), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].SHOW_MATURE, false), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].AUTOPLAY, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].FLOATING_PLAYER, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].AUTO_DOWNLOAD, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].SHOW_REPOSTS, true), _defineProperty(_clientSettings, lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"SETTINGS\"].AUTO_LAUNCH, true), _clientSettings)\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FINDING_FFMPEG_STARTED\"]] = function (state) {\n return Object.assign({}, state, {\n findingFFmpeg: true\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FINDING_FFMPEG_COMPLETED\"]] = function (state) {\n return Object.assign({}, state, {\n findingFFmpeg: false\n });\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"ACTIONS\"].DAEMON_SETTINGS_RECEIVED] = function (state, action) {\n return Object.assign({}, state, {\n daemonSettings: action.data.settings\n });\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"ACTIONS\"].DAEMON_STATUS_RECEIVED] = function (state, action) {\n return Object.assign({}, state, {\n daemonStatus: action.data.status\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CLIENT_SETTING_CHANGED\"]] = function (state, action) {\n var _action$data = action.data,\n key = _action$data.key,\n value = _action$data.value;\n var clientSettings = Object.assign({}, state.clientSettings);\n clientSettings[key] = value;\n return Object.assign({}, state, {\n clientSettings: clientSettings\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_IS_NIGHT\"]] = function (state) {\n var _state$clientSettings = state.clientSettings[constants_settings__WEBPACK_IMPORTED_MODULE_1__[\"DARK_MODE_TIMES\"]],\n from = _state$clientSettings.from,\n to = _state$clientSettings.to;\n var momentNow = moment__WEBPACK_IMPORTED_MODULE_2___default()();\n var startNightMoment = moment__WEBPACK_IMPORTED_MODULE_2___default()(from.formattedTime, 'HH:mm');\n var endNightMoment = moment__WEBPACK_IMPORTED_MODULE_2___default()(to.formattedTime, 'HH:mm');\n var isNight = !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment));\n return Object.assign({}, state, {\n isNight: isNight\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"DOWNLOAD_LANGUAGE_SUCCESS\"]] = function (state, action) {\n var loadedLanguages = state.loadedLanguages;\n var language = action.data.language;\n\n if (language && loadedLanguages && !loadedLanguages.includes(language)) {\n return Object.assign({}, state, {\n loadedLanguages: [].concat(_toConsumableArray(loadedLanguages), [language])\n });\n } else {\n return state;\n }\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"ACTIONS\"].SHARED_PREFERENCE_SET] = function (state, action) {\n var _action$data2 = action.data,\n key = _action$data2.key,\n value = _action$data2.value;\n var sharedPreferences = Object.assign({}, state.sharedPreferences);\n sharedPreferences[key] = value;\n return Object.assign({}, state, {\n sharedPreferences: sharedPreferences\n });\n};\n\nreducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CLIENT_SETTING_CHANGED\"]] = function (state, action) {\n var _action$data3 = action.data,\n key = _action$data3.key,\n value = _action$data3.value;\n var clientSettings = Object.assign({}, state.clientSettings);\n clientSettings[key] = value;\n return Object.assign({}, state, {\n clientSettings: clientSettings\n });\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"ACTIONS\"].USER_STATE_POPULATE] = function (state, action) {\n var sharedPreferences = action.data.settings; // todo: populate sharedPreferences that match client settings constants\n\n return Object.assign({}, state, {\n sharedPreferences: sharedPreferences\n });\n};\n\nreducers[lbry_redux__WEBPACK_IMPORTED_MODULE_4__[\"ACTIONS\"].SAVE_CUSTOM_WALLET_SERVERS] = function (state, action) {\n return Object.assign({}, state, {\n customWalletServers: action.data\n });\n};\n\nfunction reducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvcmVkdWNlcnMvc2V0dGluZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcmVkdXgvcmVkdWNlcnMvc2V0dGluZ3MuanM/MDI3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBQ1RJT05TIGZyb20gJ2NvbnN0YW50cy9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0ICogYXMgQVBQX1NFVFRJTkdTIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgU1VQUE9SVEVEX0xBTkdVQUdFUyBmcm9tICdjb25zdGFudHMvc3VwcG9ydGVkX2xhbmd1YWdlcyc7XG5pbXBvcnQgeyBBQ1RJT05TIGFzIExCUllfUkVEVVhfQUNUSU9OUywgU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmNvbnN0IHJlZHVjZXJzID0ge307XG5sZXQgc2V0dGluZ0xhbmd1YWdlID0gW107XG50cnkge1xuICBsZXQgYXBwTGFuZ3VhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oU0VUVElOR1MuTEFOR1VBR0UpO1xuICBzZXR0aW5nTGFuZ3VhZ2UucHVzaChhcHBMYW5ndWFnZSk7XG59IGNhdGNoIChlKSB7fVxuc2V0dGluZ0xhbmd1YWdlLnB1c2god2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZS5zbGljZSgwLCAyKSk7XG5zZXR0aW5nTGFuZ3VhZ2UucHVzaCgnZW4nKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlID0ge1xuICBpc05pZ2h0OiBmYWxzZSxcbiAgZmluZGluZ0ZGbXBlZzogZmFsc2UsXG4gIGxvYWRlZExhbmd1YWdlczogWy4uLk9iamVjdC5rZXlzKHdpbmRvdy5pMThuX21lc3NhZ2VzKSwgJ2VuJ10gfHwgWydlbiddLFxuICBjdXN0b21XYWxsZXRTZXJ2ZXJzOiBbXSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHt9LFxuICBkYWVtb25TZXR0aW5nczoge30sXG4gIGRhZW1vblN0YXR1czogeyBmZm1wZWdfc3RhdHVzOiB7fSB9LFxuICBjbGllbnRTZXR0aW5nczoge1xuICAgIC8vIFVYXG4gICAgW1NFVFRJTkdTLk5FV19VU0VSX0FDS05PV0xFREdFRF06IGZhbHNlLFxuICAgIFtTRVRUSU5HUy5FTUFJTF9DT0xMRUNUSU9OX0FDS05PV0xFREdFRF06IGZhbHNlLFxuICAgIFtTRVRUSU5HUy5FTkFCTEVfU1lOQ106IHRydWUsXG5cbiAgICAvLyBVSVxuICAgIFtTRVRUSU5HUy5MQU5HVUFHRV06IHNldHRpbmdMYW5ndWFnZS5maW5kKGxhbmd1YWdlID0+IFNVUFBPUlRFRF9MQU5HVUFHRVNbbGFuZ3VhZ2VdKSxcbiAgICBbU0VUVElOR1MuVEhFTUVdOiBfXygnbGlnaHQnKSxcbiAgICBbU0VUVElOR1MuVEhFTUVTXTogW19fKCdsaWdodCcpLCBfXygnZGFyaycpXSxcbiAgICBbU0VUVElOR1MuU1VQUE9SVF9PUFRJT05dOiBmYWxzZSxcbiAgICBbU0VUVElOR1MuSElERV9TUExBU0hfQU5JTUFUSU9OXTogZmFsc2UsXG4gICAgW1NFVFRJTkdTLkhJREVfQkFMQU5DRV06IGZhbHNlLFxuICAgIFtTRVRUSU5HUy5PU19OT1RJRklDQVRJT05TX0VOQUJMRURdOiB0cnVlLFxuICAgIFtTRVRUSU5HUy5BVVRPTUFUSUNfREFSS19NT0RFX0VOQUJMRURdOiBmYWxzZSxcblxuICAgIFtBUFBfU0VUVElOR1MuREFSS19NT0RFX1RJTUVTXToge1xuICAgICAgZnJvbTogeyBob3VyOiAnMjEnLCBtaW46ICcwMCcsIGZvcm1hdHRlZFRpbWU6ICcyMTowMCcgfSxcbiAgICAgIHRvOiB7IGhvdXI6ICc4JywgbWluOiAnMDAnLCBmb3JtYXR0ZWRUaW1lOiAnODowMCcgfSxcbiAgICB9LFxuXG4gICAgLy8gUHVyY2hhc2luZ1xuICAgIFtTRVRUSU5HUy5JTlNUQU5UX1BVUkNIQVNFX0VOQUJMRURdOiBmYWxzZSxcbiAgICBbU0VUVElOR1MuSU5TVEFOVF9QVVJDSEFTRV9NQVhdOiB7XG4gICAgICBjdXJyZW5jeTogJ0xCQycsXG4gICAgICBhbW91bnQ6IDAuMSxcbiAgICB9LFxuXG4gICAgLy8gQ29udGVudFxuICAgIFtTRVRUSU5HUy5TSE9XX01BVFVSRV06IGZhbHNlLFxuICAgIFtTRVRUSU5HUy5BVVRPUExBWV06IHRydWUsXG4gICAgW1NFVFRJTkdTLkZMT0FUSU5HX1BMQVlFUl06IHRydWUsXG4gICAgW1NFVFRJTkdTLkFVVE9fRE9XTkxPQURdOiB0cnVlLFxuICAgIFtTRVRUSU5HUy5TSE9XX1JFUE9TVFNdOiB0cnVlLFxuXG4gICAgLy8gT1NcbiAgICBbU0VUVElOR1MuQVVUT19MQVVOQ0hdOiB0cnVlLFxuICB9LFxufTtcblxucmVkdWNlcnNbQUNUSU9OUy5GSU5ESU5HX0ZGTVBFR19TVEFSVEVEXSA9IHN0YXRlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZmluZGluZ0ZGbXBlZzogdHJ1ZSxcbiAgfSk7XG5cbnJlZHVjZXJzW0FDVElPTlMuRklORElOR19GRk1QRUdfQ09NUExFVEVEXSA9IHN0YXRlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgZmluZGluZ0ZGbXBlZzogZmFsc2UsXG4gIH0pO1xuXG5yZWR1Y2Vyc1tMQlJZX1JFRFVYX0FDVElPTlMuREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGRhZW1vblNldHRpbmdzOiBhY3Rpb24uZGF0YS5zZXR0aW5ncyxcbiAgfSk7XG5cbnJlZHVjZXJzW0xCUllfUkVEVVhfQUNUSU9OUy5EQUVNT05fU1RBVFVTX1JFQ0VJVkVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGRhZW1vblN0YXR1czogYWN0aW9uLmRhdGEuc3RhdHVzLFxuICB9KTtcblxucmVkdWNlcnNbQUNUSU9OUy5DTElFTlRfU0VUVElOR19DSEFOR0VEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGNsaWVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2xpZW50U2V0dGluZ3MpO1xuXG4gIGNsaWVudFNldHRpbmdzW2tleV0gPSB2YWx1ZTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBjbGllbnRTZXR0aW5ncyxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLlVQREFURV9JU19OSUdIVF0gPSBzdGF0ZSA9PiB7XG4gIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHN0YXRlLmNsaWVudFNldHRpbmdzW0FQUF9TRVRUSU5HUy5EQVJLX01PREVfVElNRVNdO1xuICBjb25zdCBtb21lbnROb3cgPSBtb21lbnQoKTtcbiAgY29uc3Qgc3RhcnROaWdodE1vbWVudCA9IG1vbWVudChmcm9tLmZvcm1hdHRlZFRpbWUsICdISDptbScpO1xuICBjb25zdCBlbmROaWdodE1vbWVudCA9IG1vbWVudCh0by5mb3JtYXR0ZWRUaW1lLCAnSEg6bW0nKTtcbiAgY29uc3QgaXNOaWdodCA9ICEobW9tZW50Tm93LmlzQWZ0ZXIoZW5kTmlnaHRNb21lbnQpICYmIG1vbWVudE5vdy5pc0JlZm9yZShzdGFydE5pZ2h0TW9tZW50KSk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgaXNOaWdodCxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkRPV05MT0FEX0xBTkdVQUdFX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBsb2FkZWRMYW5ndWFnZXMgfSA9IHN0YXRlO1xuICBjb25zdCB7IGxhbmd1YWdlIH0gPSBhY3Rpb24uZGF0YTtcblxuICBpZiAobGFuZ3VhZ2UgJiYgbG9hZGVkTGFuZ3VhZ2VzICYmICFsb2FkZWRMYW5ndWFnZXMuaW5jbHVkZXMobGFuZ3VhZ2UpKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBsb2FkZWRMYW5ndWFnZXM6IFsuLi5sb2FkZWRMYW5ndWFnZXMsIGxhbmd1YWdlXSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnJlZHVjZXJzW0xCUllfUkVEVVhfQUNUSU9OUy5TSEFSRURfUFJFRkVSRU5DRV9TRVRdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3Qgc2hhcmVkUHJlZmVyZW5jZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zaGFyZWRQcmVmZXJlbmNlcyk7XG4gIHNoYXJlZFByZWZlcmVuY2VzW2tleV0gPSB2YWx1ZTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBzaGFyZWRQcmVmZXJlbmNlcyxcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tBQ1RJT05TLkNMSUVOVF9TRVRUSU5HX0NIQU5HRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgY2xpZW50U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGllbnRTZXR0aW5ncyk7XG5cbiAgY2xpZW50U2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGNsaWVudFNldHRpbmdzLFxuICB9KTtcbn07XG5cbnJlZHVjZXJzW0xCUllfUkVEVVhfQUNUSU9OUy5VU0VSX1NUQVRFX1BPUFVMQVRFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgc2V0dGluZ3M6IHNoYXJlZFByZWZlcmVuY2VzIH0gPSBhY3Rpb24uZGF0YTtcbiAgLy8gdG9kbzogcG9wdWxhdGUgc2hhcmVkUHJlZmVyZW5jZXMgdGhhdCBtYXRjaCBjbGllbnQgc2V0dGluZ3MgY29uc3RhbnRzXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7IHNoYXJlZFByZWZlcmVuY2VzIH0pO1xufTtcblxucmVkdWNlcnNbTEJSWV9SRURVWF9BQ1RJT05TLlNBVkVfQ1VTVE9NX1dBTExFVF9TRVJWRVJTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBjdXN0b21XYWxsZXRTZXJ2ZXJzOiBhY3Rpb24uZGF0YSB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnNbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQU9BO0FBUEE7QUFpQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQVFBO0FBQ0E7QUFGQTtBQS9CQTtBQUNBO0FBK0NBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFFQTtBQURBO0FBREE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFEQTtBQU5BO0FBQ0E7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBUEE7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFWQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBTEE7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFEQTtBQU5BO0FBQ0E7QUFVQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/reducers/settings.js\n"); - -/***/ }), - -/***/ "../ui/redux/reducers/subscriptions.js": -/*!*********************************************!*\ - !*** ../ui/redux/reducers/subscriptions.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var constants_subscriptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! constants/subscriptions */ \"../ui/constants/subscriptions.js\");\n/* harmony import */ var util_redux_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util/redux-utils */ \"../ui/util/redux-utils.js\");\nvar _handleActions;\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n\nvar defaultState = {\n subscriptions: [],\n unread: {},\n suggested: {},\n loading: false,\n viewMode: constants_subscriptions__WEBPACK_IMPORTED_MODULE_2__[\"VIEW_ALL\"],\n loadingSuggested: false,\n firstRunCompleted: false,\n showSuggestedSubs: false,\n enabledChannelNotifications: []\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(util_redux_utils__WEBPACK_IMPORTED_MODULE_3__[\"handleActions\"])((_handleActions = {}, _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_SUBSCRIBE\"], function (state, action) {\n var newSubscription = action.data;\n var newSubscriptions = state.subscriptions.slice(); // prevent duplicates in the sidebar\n\n if (!newSubscriptions.some(function (sub) {\n return sub.uri === newSubscription.uri;\n })) {\n newSubscriptions.unshift(newSubscription);\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_UNSUBSCRIBE\"], function (state, action) {\n var subscriptionToRemove = action.data;\n var newSubscriptions = state.subscriptions.slice().filter(function (subscription) {\n return subscription.channelName !== subscriptionToRemove.channelName;\n }); // Check if we need to remove it from the 'unread' state\n\n var unread = state.unread;\n\n if (unread[subscriptionToRemove.uri]) {\n delete unread[subscriptionToRemove.uri];\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, unread),\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_SUBSCRIPTION_LATEST\"], function (state, action) {\n return _objectSpread({}, state, {\n subscriptions: state.subscriptions.map(function (subscription) {\n return subscription.channelName === action.data.subscription.channelName ? _objectSpread({}, subscription, {\n latest: action.data.uri\n }) : subscription;\n })\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_SUBSCRIPTION_UNREADS\"], function (state, action) {\n var _action$data = action.data,\n channel = _action$data.channel,\n uris = _action$data.uris,\n type = _action$data.type;\n return _objectSpread({}, state, {\n unread: _objectSpread({}, state.unread, _defineProperty({}, channel, {\n uris: uris,\n type: type\n }))\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"REMOVE_SUBSCRIPTION_UNREADS\"], function (state, action) {\n var _action$data2 = action.data,\n channel = _action$data2.channel,\n uris = _action$data2.uris; // If no channel is passed in, remove all unreads\n\n var newUnread;\n\n if (channel) {\n newUnread = _objectSpread({}, state.unread);\n\n if (!uris) {\n delete newUnread[channel];\n } else {\n newUnread[channel].uris = uris;\n }\n } else {\n newUnread = {};\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, newUnread)\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FETCH_SUBSCRIPTIONS_START\"], function (state) {\n return _objectSpread({}, state, {\n loading: true\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FETCH_SUBSCRIPTIONS_FAIL\"], function (state) {\n return _objectSpread({}, state, {\n loading: false\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"FETCH_SUBSCRIPTIONS_SUCCESS\"], function (state, action) {\n return _objectSpread({}, state, {\n loading: false,\n subscriptions: action.data\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"SET_VIEW_MODE\"], function (state, action) {\n return _objectSpread({}, state, {\n viewMode: action.data\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_START\"], function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: true\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS\"], function (state, action) {\n return _objectSpread({}, state, {\n suggested: action.data,\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"GET_SUGGESTED_SUBSCRIPTIONS_FAIL\"], function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"ACTIONS\"].USER_STATE_POPULATE, function (state, action) {\n var subscriptions = action.data.subscriptions;\n var newSubscriptions;\n\n if (!subscriptions) {\n newSubscriptions = state.subscriptions;\n } else {\n var parsedSubscriptions = subscriptions.map(function (uri) {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"parseURI\"])(uri),\n channelName = _parseURI.channelName;\n\n return {\n uri: uri,\n channelName: \"@\".concat(channelName)\n };\n });\n newSubscriptions = parsedSubscriptions;\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _handleActions), defaultState));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvcmVkdWNlcnMvc3Vic2NyaXB0aW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9yZWR1eC9yZWR1Y2Vycy9zdWJzY3JpcHRpb25zLmpzPzdhOGEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIEFDVElPTlMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZVVSSSwgQUNUSU9OUyBhcyBMQlJZX1JFRFVYX0FDVElPTlMgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IFZJRVdfQUxMIH0gZnJvbSAnY29uc3RhbnRzL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgaGFuZGxlQWN0aW9ucyB9IGZyb20gJ3V0aWwvcmVkdXgtdXRpbHMnO1xuXG5jb25zdCBkZWZhdWx0U3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlID0ge1xuICBzdWJzY3JpcHRpb25zOiBbXSxcbiAgdW5yZWFkOiB7fSxcbiAgc3VnZ2VzdGVkOiB7fSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIHZpZXdNb2RlOiBWSUVXX0FMTCxcbiAgbG9hZGluZ1N1Z2dlc3RlZDogZmFsc2UsXG4gIGZpcnN0UnVuQ29tcGxldGVkOiBmYWxzZSxcbiAgc2hvd1N1Z2dlc3RlZFN1YnM6IGZhbHNlLFxuICBlbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnM6IFtdLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlQWN0aW9ucyhcbiAge1xuICAgIFtBQ1RJT05TLkNIQU5ORUxfU1VCU0NSSUJFXTogKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSwgYWN0aW9uOiBEb0NoYW5uZWxTdWJzY3JpYmUpOiBTdWJzY3JpcHRpb25TdGF0ZSA9PiB7XG4gICAgICBjb25zdCBuZXdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IGFjdGlvbi5kYXRhO1xuICAgICAgY29uc3QgbmV3U3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc2xpY2UoKTtcbiAgICAgIC8vIHByZXZlbnQgZHVwbGljYXRlcyBpbiB0aGUgc2lkZWJhclxuICAgICAgaWYgKCFuZXdTdWJzY3JpcHRpb25zLnNvbWUoc3ViID0+IHN1Yi51cmkgPT09IG5ld1N1YnNjcmlwdGlvbi51cmkpKSB7XG4gICAgICAgIG5ld1N1YnNjcmlwdGlvbnMudW5zaGlmdChuZXdTdWJzY3JpcHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogbmV3U3Vic2NyaXB0aW9ucyxcbiAgICAgIH07XG4gICAgfSxcbiAgICBbQUNUSU9OUy5DSEFOTkVMX1VOU1VCU0NSSUJFXTogKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSwgYWN0aW9uOiBEb0NoYW5uZWxVbnN1YnNjcmliZSk6IFN1YnNjcmlwdGlvblN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvblRvUmVtb3ZlOiBTdWJzY3JpcHRpb24gPSBhY3Rpb24uZGF0YTtcbiAgICAgIGNvbnN0IG5ld1N1YnNjcmlwdGlvbnMgPSBzdGF0ZS5zdWJzY3JpcHRpb25zXG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5maWx0ZXIoc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi5jaGFubmVsTmFtZSAhPT0gc3Vic2NyaXB0aW9uVG9SZW1vdmUuY2hhbm5lbE5hbWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSAndW5yZWFkJyBzdGF0ZVxuICAgICAgY29uc3QgeyB1bnJlYWQgfSA9IHN0YXRlO1xuICAgICAgaWYgKHVucmVhZFtzdWJzY3JpcHRpb25Ub1JlbW92ZS51cmldKSB7XG4gICAgICAgIGRlbGV0ZSB1bnJlYWRbc3Vic2NyaXB0aW9uVG9SZW1vdmUudXJpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB1bnJlYWQ6IHsgLi4udW5yZWFkIH0sXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IG5ld1N1YnNjcmlwdGlvbnMsXG4gICAgICB9O1xuICAgIH0sXG4gICAgW0FDVElPTlMuU0VUX1NVQlNDUklQVElPTl9MQVRFU1RdOiAoXG4gICAgICBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBhY3Rpb246IFNldFN1YnNjcmlwdGlvbkxhdGVzdFxuICAgICk6IFN1YnNjcmlwdGlvblN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IHN0YXRlLnN1YnNjcmlwdGlvbnMubWFwKHN1YnNjcmlwdGlvbiA9PlxuICAgICAgICBzdWJzY3JpcHRpb24uY2hhbm5lbE5hbWUgPT09IGFjdGlvbi5kYXRhLnN1YnNjcmlwdGlvbi5jaGFubmVsTmFtZVxuICAgICAgICAgID8geyAuLi5zdWJzY3JpcHRpb24sIGxhdGVzdDogYWN0aW9uLmRhdGEudXJpIH1cbiAgICAgICAgICA6IHN1YnNjcmlwdGlvblxuICAgICAgKSxcbiAgICB9KSxcbiAgICBbQUNUSU9OUy5VUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFNdOiAoXG4gICAgICBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBhY3Rpb246IERvVXBkYXRlU3Vic2NyaXB0aW9uVW5yZWFkc1xuICAgICk6IFN1YnNjcmlwdGlvblN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHsgY2hhbm5lbCwgdXJpcywgdHlwZSB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB1bnJlYWQ6IHtcbiAgICAgICAgICAuLi5zdGF0ZS51bnJlYWQsXG4gICAgICAgICAgW2NoYW5uZWxdOiB7XG4gICAgICAgICAgICB1cmlzLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIFtBQ1RJT05TLlJFTU9WRV9TVUJTQ1JJUFRJT05fVU5SRUFEU106IChcbiAgICAgIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSxcbiAgICAgIGFjdGlvbjogRG9SZW1vdmVTdWJzY3JpcHRpb25VbnJlYWRzXG4gICAgKTogU3Vic2NyaXB0aW9uU3RhdGUgPT4ge1xuICAgICAgY29uc3QgeyBjaGFubmVsLCB1cmlzIH0gPSBhY3Rpb24uZGF0YTtcblxuICAgICAgLy8gSWYgbm8gY2hhbm5lbCBpcyBwYXNzZWQgaW4sIHJlbW92ZSBhbGwgdW5yZWFkc1xuICAgICAgbGV0IG5ld1VucmVhZDtcbiAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIG5ld1VucmVhZCA9IHsgLi4uc3RhdGUudW5yZWFkIH07XG5cbiAgICAgICAgaWYgKCF1cmlzKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1VucmVhZFtjaGFubmVsXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdVbnJlYWRbY2hhbm5lbF0udXJpcyA9IHVyaXM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1VucmVhZCA9IHt9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdW5yZWFkOiB7XG4gICAgICAgICAgLi4ubmV3VW5yZWFkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIFtBQ1RJT05TLkZFVENIX1NVQlNDUklQVElPTlNfU1RBUlRdOiAoc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlKTogU3Vic2NyaXB0aW9uU3RhdGUgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICB9KSxcbiAgICBbQUNUSU9OUy5GRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUxdOiAoc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlKTogU3Vic2NyaXB0aW9uU3RhdGUgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgfSksXG4gICAgW0FDVElPTlMuRkVUQ0hfU1VCU0NSSVBUSU9OU19TVUNDRVNTXTogKFxuICAgICAgc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlLFxuICAgICAgYWN0aW9uOiBGZXRjaGVkU3Vic2NyaXB0aW9uc1N1Y2Vzc1xuICAgICk6IFN1YnNjcmlwdGlvblN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgc3Vic2NyaXB0aW9uczogYWN0aW9uLmRhdGEsXG4gICAgfSksXG4gICAgW0FDVElPTlMuU0VUX1ZJRVdfTU9ERV06IChzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUsIGFjdGlvbjogU2V0Vmlld01vZGUpOiBTdWJzY3JpcHRpb25TdGF0ZSA9PiAoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICB2aWV3TW9kZTogYWN0aW9uLmRhdGEsXG4gICAgfSksXG4gICAgW0FDVElPTlMuR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NUQVJUXTogKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSk6IFN1YnNjcmlwdGlvblN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IHRydWUsXG4gICAgfSksXG4gICAgW0FDVElPTlMuR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1NdOiAoXG4gICAgICBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBhY3Rpb246IEdldFN1Z2dlc3RlZFN1YnNjcmlwdGlvbnNTdWNjZXNzXG4gICAgKTogU3Vic2NyaXB0aW9uU3RhdGUgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3VnZ2VzdGVkOiBhY3Rpb24uZGF0YSxcbiAgICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIFtBQ1RJT05TLkdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMXTogKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSk6IFN1YnNjcmlwdGlvblN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IGZhbHNlLFxuICAgIH0pLFxuICAgIFtMQlJZX1JFRFVYX0FDVElPTlMuVVNFUl9TVEFURV9QT1BVTEFURV06IChcbiAgICAgIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSxcbiAgICAgIGFjdGlvbjogeyBkYXRhOiB7IHN1YnNjcmlwdGlvbnM6ID9BcnJheTxzdHJpbmc+IH0gfVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBzdWJzY3JpcHRpb25zIH0gPSBhY3Rpb24uZGF0YTtcbiAgICAgIGxldCBuZXdTdWJzY3JpcHRpb25zO1xuXG4gICAgICBpZiAoIXN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucyA9IHN0YXRlLnN1YnNjcmlwdGlvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJzZWRTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5tYXAodXJpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNoYW5uZWxOYW1lIH0gPSBwYXJzZVVSSSh1cmkpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lOiBgQCR7Y2hhbm5lbE5hbWV9YCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucyA9IHBhcnNlZFN1YnNjcmlwdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdWJzY3JpcHRpb25zOiBuZXdTdWJzY3JpcHRpb25zLFxuICAgICAgfTtcbiAgICB9LFxuICB9LFxuICBkZWZhdWx0U3RhdGVcbik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBVkE7QUFnQkE7QUFDQTtBQUVBO0FBSkE7QUFDQTtBQURBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUhBO0FBMUJBO0FBZ0NBO0FBS0E7QUFBQTtBQUVBO0FBREE7QUFEQTtBQUxBO0FBaENBO0FBOENBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUdBO0FBQ0E7QUFGQTtBQUpBO0FBakRBO0FBK0RBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFGQTtBQWhGQTtBQXVGQTtBQUVBO0FBRkE7QUF2RkE7QUEyRkE7QUFFQTtBQUZBO0FBM0ZBO0FBK0ZBO0FBS0E7QUFDQTtBQU5BO0FBL0ZBO0FBdUdBO0FBRUE7QUFGQTtBQXZHQTtBQTJHQTtBQUVBO0FBRkE7QUEzR0E7QUErR0E7QUFLQTtBQUNBO0FBTkE7QUEvR0E7QUF1SEE7QUFFQTtBQUZBO0FBdkhBO0FBOEhBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFGQTtBQWhKQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/reducers/subscriptions.js\n"); - -/***/ }), - -/***/ "../ui/redux/selectors/app.js": -/*!************************************!*\ - !*** ../ui/redux/selectors/app.js ***! - \************************************/ -/*! exports provided: selectState, selectPlatform, selectUpdateUrl, selectHasClickedComment, selectRemoteVersion, selectIsUpgradeAvailable, selectUpgradeFilename, selectDownloadProgress, selectDownloadComplete, selectIsUpgradeSkipped, selectUpgradeDownloadPath, selectUpgradeDownloadItem, selectAutoUpdateDownloaded, selectAutoUpdateDeclined, selectDaemonVersionMatched, selectVolume, selectMute, selectUpgradeTimer, selectModal, selectSearchOptionsExpanded, selectWelcomeVersion, selectAllowAnalytics, selectScrollStartingPosition, selectIsPasswordSaved */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectState\", function() { return selectState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectPlatform\", function() { return selectPlatform; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUpdateUrl\", function() { return selectUpdateUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectHasClickedComment\", function() { return selectHasClickedComment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectRemoteVersion\", function() { return selectRemoteVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsUpgradeAvailable\", function() { return selectIsUpgradeAvailable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUpgradeFilename\", function() { return selectUpgradeFilename; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectDownloadProgress\", function() { return selectDownloadProgress; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectDownloadComplete\", function() { return selectDownloadComplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsUpgradeSkipped\", function() { return selectIsUpgradeSkipped; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUpgradeDownloadPath\", function() { return selectUpgradeDownloadPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUpgradeDownloadItem\", function() { return selectUpgradeDownloadItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectAutoUpdateDownloaded\", function() { return selectAutoUpdateDownloaded; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectAutoUpdateDeclined\", function() { return selectAutoUpdateDeclined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectDaemonVersionMatched\", function() { return selectDaemonVersionMatched; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectVolume\", function() { return selectVolume; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectMute\", function() { return selectMute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUpgradeTimer\", function() { return selectUpgradeTimer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectModal\", function() { return selectModal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSearchOptionsExpanded\", function() { return selectSearchOptionsExpanded; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectWelcomeVersion\", function() { return selectWelcomeVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectAllowAnalytics\", function() { return selectAllowAnalytics; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectScrollStartingPosition\", function() { return selectScrollStartingPosition; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsPasswordSaved\", function() { return selectIsPasswordSaved; });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\");\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(reselect__WEBPACK_IMPORTED_MODULE_0__);\n\nvar selectState = function selectState(state) {\n return state.app || {};\n};\nvar selectPlatform = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.platform;\n});\nvar selectUpdateUrl = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectPlatform, function (platform) {\n switch (platform) {\n case 'darwin':\n return 'https://lbry.com/get/lbry.dmg';\n\n case 'linux':\n return 'https://lbry.com/get/lbry.deb';\n\n case 'win32':\n return 'https://lbry.com/get/lbry.exe';\n\n default:\n throw Error('Unknown platform');\n }\n});\nvar selectHasClickedComment = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.hasClickedComment;\n});\nvar selectRemoteVersion = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.remoteVersion;\n});\nvar selectIsUpgradeAvailable = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.isUpgradeAvailable;\n});\nvar selectUpgradeFilename = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectPlatform, selectRemoteVersion, function (platform, version) {\n switch (platform) {\n case 'darwin':\n return \"LBRY_\".concat(version, \".dmg\");\n\n case 'linux':\n return \"LBRY_\".concat(version, \".deb\");\n\n case 'win32':\n return \"LBRY_\".concat(version, \".exe\");\n\n default:\n throw Error('Unknown platform');\n }\n});\nvar selectDownloadProgress = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.downloadProgress;\n});\nvar selectDownloadComplete = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.upgradeDownloadCompleted;\n});\nvar selectIsUpgradeSkipped = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.isUpgradeSkipped;\n});\nvar selectUpgradeDownloadPath = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.downloadPath;\n});\nvar selectUpgradeDownloadItem = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.downloadItem;\n});\nvar selectAutoUpdateDownloaded = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.autoUpdateDownloaded;\n});\nvar selectAutoUpdateDeclined = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.autoUpdateDeclined;\n});\nvar selectDaemonVersionMatched = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.daemonVersionMatched;\n});\nvar selectVolume = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.volume;\n});\nvar selectMute = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.muted;\n});\nvar selectUpgradeTimer = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.checkUpgradeTimer;\n});\nvar selectModal = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n if (!state.modal) {\n return null;\n }\n\n return {\n id: state.modal,\n modalProps: state.modalProps\n };\n});\nvar selectSearchOptionsExpanded = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.searchOptionsExpanded;\n});\nvar selectWelcomeVersion = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.welcomeVersion;\n});\nvar selectAllowAnalytics = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.allowAnalytics;\n});\nvar selectScrollStartingPosition = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.currentScroll;\n});\nvar selectIsPasswordSaved = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.isPasswordSaved;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvc2VsZWN0b3JzL2FwcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9yZWR1eC9zZWxlY3RvcnMvYXBwLmpzP2ZmYTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCc7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RTdGF0ZSA9IHN0YXRlID0+IHN0YXRlLmFwcCB8fCB7fTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFBsYXRmb3JtID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5wbGF0Zm9ybVxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFVwZGF0ZVVybCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RQbGF0Zm9ybSxcbiAgcGxhdGZvcm0gPT4ge1xuICAgIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICAgIGNhc2UgJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9sYnJ5LmNvbS9nZXQvbGJyeS5kbWcnO1xuICAgICAgY2FzZSAnbGludXgnOlxuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vbGJyeS5jb20vZ2V0L2xicnkuZGViJztcbiAgICAgIGNhc2UgJ3dpbjMyJzpcbiAgICAgICAgcmV0dXJuICdodHRwczovL2xicnkuY29tL2dldC9sYnJ5LmV4ZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBwbGF0Zm9ybScpO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdEhhc0NsaWNrZWRDb21tZW50ID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5oYXNDbGlja2VkQ29tbWVudFxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFJlbW90ZVZlcnNpb24gPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLnJlbW90ZVZlcnNpb25cbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RJc1VwZ3JhZGVBdmFpbGFibGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmlzVXBncmFkZUF2YWlsYWJsZVxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFVwZ3JhZGVGaWxlbmFtZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RQbGF0Zm9ybSxcbiAgc2VsZWN0UmVtb3RlVmVyc2lvbixcbiAgKHBsYXRmb3JtLCB2ZXJzaW9uKSA9PiB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgICAgY2FzZSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIGBMQlJZXyR7dmVyc2lvbn0uZG1nYDtcbiAgICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgICAgcmV0dXJuIGBMQlJZXyR7dmVyc2lvbn0uZGViYDtcbiAgICAgIGNhc2UgJ3dpbjMyJzpcbiAgICAgICAgcmV0dXJuIGBMQlJZXyR7dmVyc2lvbn0uZXhlYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdVbmtub3duIHBsYXRmb3JtJyk7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0RG93bmxvYWRQcm9ncmVzcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuZG93bmxvYWRQcm9ncmVzc1xuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdERvd25sb2FkQ29tcGxldGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLnVwZ3JhZGVEb3dubG9hZENvbXBsZXRlZFxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdElzVXBncmFkZVNraXBwZWQgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmlzVXBncmFkZVNraXBwZWRcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RVcGdyYWRlRG93bmxvYWRQYXRoID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5kb3dubG9hZFBhdGhcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RVcGdyYWRlRG93bmxvYWRJdGVtID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5kb3dubG9hZEl0ZW1cbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RBdXRvVXBkYXRlRG93bmxvYWRlZCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuYXV0b1VwZGF0ZURvd25sb2FkZWRcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RBdXRvVXBkYXRlRGVjbGluZWQgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmF1dG9VcGRhdGVEZWNsaW5lZFxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdERhZW1vblZlcnNpb25NYXRjaGVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5kYWVtb25WZXJzaW9uTWF0Y2hlZFxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFZvbHVtZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUudm9sdW1lXG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0TXV0ZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUubXV0ZWRcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RVcGdyYWRlVGltZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmNoZWNrVXBncmFkZVRpbWVyXG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0TW9kYWwgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHtcbiAgICBpZiAoIXN0YXRlLm1vZGFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHN0YXRlLm1vZGFsLFxuICAgICAgbW9kYWxQcm9wczogc3RhdGUubW9kYWxQcm9wcyxcbiAgICB9O1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0U2VhcmNoT3B0aW9uc0V4cGFuZGVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5zZWFyY2hPcHRpb25zRXhwYW5kZWRcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RXZWxjb21lVmVyc2lvbiA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUud2VsY29tZVZlcnNpb25cbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RBbGxvd0FuYWx5dGljcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuYWxsb3dBbmFseXRpY3Ncbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RTY3JvbGxTdGFydGluZ1Bvc2l0aW9uID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5jdXJyZW50U2Nyb2xsXG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0SXNQYXNzd29yZFNhdmVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5pc1Bhc3N3b3JkU2F2ZWRcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUZBO0FBS0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFSQTtBQUhBO0FBZ0JBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUkE7QUFKQTtBQWlCQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFQQTtBQWNBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQTtBQUtBO0FBRUE7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/selectors/app.js\n"); - -/***/ }), - -/***/ "../ui/redux/selectors/content.js": -/*!****************************************!*\ - !*** ../ui/redux/selectors/content.js ***! - \****************************************/ -/*! exports provided: selectState, selectPlayingUri, makeSelectIsPlaying, makeSelectContentPositionForUri, selectHistory, selectHistoryPageCount, makeSelectHistoryForPage, makeSelectHistoryForUri, makeSelectHasVisitedUri, makeSelectNextUnplayedRecommended, selectRecentHistory, makeSelectCategoryListUris, makeSelectShouldObscurePreview, makeSelectFileExtensionForUri, makeSelectStreamingUrlForUriWebProxy, makeSelectFileRenderModeForUri, makeSelectInsufficientCreditsForUri */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectState\", function() { return selectState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectPlayingUri\", function() { return selectPlayingUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectIsPlaying\", function() { return makeSelectIsPlaying; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectContentPositionForUri\", function() { return makeSelectContentPositionForUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectHistory\", function() { return selectHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectHistoryPageCount\", function() { return selectHistoryPageCount; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectHistoryForPage\", function() { return makeSelectHistoryForPage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectHistoryForUri\", function() { return makeSelectHistoryForUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectHasVisitedUri\", function() { return makeSelectHasVisitedUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectNextUnplayedRecommended\", function() { return makeSelectNextUnplayedRecommended; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectRecentHistory\", function() { return selectRecentHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectCategoryListUris\", function() { return makeSelectCategoryListUris; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectShouldObscurePreview\", function() { return makeSelectShouldObscurePreview; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectFileExtensionForUri\", function() { return makeSelectFileExtensionForUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectStreamingUrlForUriWebProxy\", function() { return makeSelectStreamingUrlForUriWebProxy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectFileRenderModeForUri\", function() { return makeSelectFileRenderModeForUri; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectInsufficientCreditsForUri\", function() { return makeSelectInsufficientCreditsForUri; });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\");\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(reselect__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! constants/file_render_modes */ \"../ui/constants/file_render_modes.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! path */ \"../node_modules/path-browserify/index.js\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var constants_claim__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! constants/claim */ \"../ui/constants/claim.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! util/lbrytv */ \"../ui/util/lbrytv.js\");\n/* harmony import */ var util_lbrytv__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(util_lbrytv__WEBPACK_IMPORTED_MODULE_7__);\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n\n\n\n\n\n\n\n\nvar RECENT_HISTORY_AMOUNT = 10;\nvar HISTORY_ITEMS_PER_PAGE = 50;\nvar selectState = function selectState(state) {\n return state.content || {};\n};\nvar selectPlayingUri = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.playingUri;\n});\nvar makeSelectIsPlaying = function makeSelectIsPlaying(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectPlayingUri, function (playingUri) {\n return playingUri === uri;\n });\n};\nvar makeSelectContentPositionForUri = function makeSelectContentPositionForUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(uri), function (state, claim) {\n if (!claim) {\n return null;\n }\n\n var outpoint = \"\".concat(claim.txid, \":\").concat(claim.nout);\n var id = claim.claim_id;\n return state.positions[id] ? state.positions[id][outpoint] : null;\n });\n};\nvar selectHistory = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectState, function (state) {\n return state.history || [];\n});\nvar selectHistoryPageCount = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectHistory, function (history) {\n return Math.ceil(history.length / HISTORY_ITEMS_PER_PAGE);\n});\nvar makeSelectHistoryForPage = function makeSelectHistoryForPage(page) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectHistory, lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimsByUri\"], function (history, claimsByUri) {\n var left = page * HISTORY_ITEMS_PER_PAGE;\n var historyItemsForPage = history.slice(left, left + HISTORY_ITEMS_PER_PAGE);\n return historyItemsForPage;\n });\n};\nvar makeSelectHistoryForUri = function makeSelectHistoryForUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectHistory, function (history) {\n return history.find(function (i) {\n return i.uri === uri;\n });\n });\n};\nvar makeSelectHasVisitedUri = function makeSelectHasVisitedUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(makeSelectHistoryForUri(uri), function (history) {\n return Boolean(history);\n });\n};\nvar makeSelectNextUnplayedRecommended = function makeSelectNextUnplayedRecommended(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectRecommendedContentForUri\"])(uri), selectHistory, lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectClaimsByUri\"], lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectAllCostInfoByUri\"], lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBlockedChannels\"], function (recommendedForUri, history, claimsByUri, costInfoByUri, blockedChannels) {\n if (recommendedForUri) {\n var _loop = function _loop(i) {\n var recommendedUri = recommendedForUri[i];\n var claim = claimsByUri[recommendedUri];\n\n if (!claim) {\n return \"continue\";\n }\n\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"parseURI\"])(recommendedUri),\n isChannel = _parseURI.isChannel;\n\n if (isChannel) {\n return \"continue\";\n }\n\n var costInfo = costInfoByUri[recommendedUri];\n\n if (!costInfo || costInfo.cost !== 0) {\n return \"continue\";\n } // We already check if it's a channel above\n // $FlowFixMe\n\n\n var isVideo = claim.value && claim.value.stream_type === 'video'; // $FlowFixMe\n\n var isAudio = claim.value && claim.value.stream_type === 'audio';\n\n if (!isVideo && !isAudio) {\n return \"continue\";\n }\n\n var channel = claim && claim.signing_channel;\n\n if (channel && blockedChannels.some(function (blockedUri) {\n return blockedUri === channel.permanent_url;\n })) {\n return \"continue\";\n }\n\n if (!history.some(function (item) {\n return item.uri === recommendedForUri[i];\n })) {\n return {\n v: recommendedForUri[i]\n };\n }\n }; // Make sure we don't autoplay paid content, channels, or content from blocked channels\n\n\n for (var i = 0; i < recommendedForUri.length; i++) {\n var _ret = _loop(i);\n\n switch (_ret) {\n case \"continue\":\n continue;\n\n default:\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n }\n }\n });\n};\nvar selectRecentHistory = Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(selectHistory, function (history) {\n return history.slice(0, RECENT_HISTORY_AMOUNT);\n});\nvar makeSelectCategoryListUris = function makeSelectCategoryListUris(uris, channel) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimsInChannelForCurrentPageState\"])(channel), function (channelClaims) {\n if (uris) return uris;\n\n if (channelClaims) {\n var CATEGORY_LIST_SIZE = 10;\n return channelClaims.slice(0, CATEGORY_LIST_SIZE).map(function (_ref) {\n var name = _ref.name,\n claimId = _ref.claim_id;\n return \"\".concat(name, \"#\").concat(claimId);\n });\n }\n\n return null;\n });\n};\nvar makeSelectShouldObscurePreview = function makeSelectShouldObscurePreview(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_3__[\"selectShowMatureContent\"], Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsNsfw\"])(uri), function (showMatureContent, isClaimMature) {\n return isClaimMature && !showMatureContent;\n });\n}; // should probably be in lbry-redux, yarn link was fighting me\n\nvar makeSelectFileExtensionForUri = function makeSelectFileExtensionForUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectFileNameForUri\"])(uri), function (fileName) {\n return fileName && path__WEBPACK_IMPORTED_MODULE_5___default.a.extname(fileName).substring(1);\n });\n};\nvar makeSelectStreamingUrlForUriWebProxy;\n\nmakeSelectStreamingUrlForUriWebProxy = function makeSelectStreamingUrlForUriWebProxy(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimForUri\"])(uri), function (claim) {\n return claim ? Object(util_lbrytv__WEBPACK_IMPORTED_MODULE_7__[\"generateStreamUrl\"])(claim.name, claim.claim_id) : null;\n });\n};\n\n\nvar makeSelectFileRenderModeForUri = function makeSelectFileRenderModeForUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectContentTypeForUri\"])(uri), Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectMediaTypeForUri\"])(uri), makeSelectFileExtensionForUri(uri), function (contentType, mediaType, extension) {\n if (mediaType === 'video' || constants_claim__WEBPACK_IMPORTED_MODULE_6__[\"FORCE_CONTENT_TYPE_PLAYER\"].includes(contentType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"VIDEO\"];\n }\n\n if (mediaType === 'audio') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"AUDIO\"];\n }\n\n if (mediaType === 'image') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"IMAGE\"];\n }\n\n if (['md', 'markdown'].includes(extension) || ['text/md', 'text/markdown'].includes(contentType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"MARKDOWN\"];\n }\n\n if (contentType === 'application/pdf') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"PDF\"];\n }\n\n if (['text/htm', 'text/html'].includes(contentType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"HTML\"];\n }\n\n if (['text', 'document', 'script'].includes(mediaType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"DOCUMENT\"];\n }\n\n if (extension === 'docx') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"DOCX\"];\n } // when writing this my local copy of Lbry.getMediaType had '3D-file', but I was receiving model...'\n\n\n if (['3D-file', 'model'].includes(mediaType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"CAD\"];\n }\n\n if (mediaType === 'comic-book') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"COMIC\"];\n }\n\n if (['application/zip', 'application/x-gzip', 'application/x-gtar', 'application/x-tgz', 'application/vnd.rar', 'application/x-7z-compressed'].includes(contentType)) {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"DOWNLOAD\"];\n }\n\n if (mediaType === 'application') {\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"APPLICATION\"];\n }\n\n return constants_file_render_modes__WEBPACK_IMPORTED_MODULE_4__[\"UNSUPPORTED\"];\n });\n};\nvar makeSelectInsufficientCreditsForUri = function makeSelectInsufficientCreditsForUri(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_0__[\"createSelector\"])(Object(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"makeSelectClaimIsMine\"])(uri), Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectCostInfoForUri\"])(uri), lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"selectBalance\"], function (isMine, costInfo, balance) {\n return !isMine && costInfo && costInfo.cost > 0 && costInfo.cost > balance;\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcmVkdXgvc2VsZWN0b3JzL2NvbnRlbnQuanM/ZjVlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge1xuICBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmksXG4gIHNlbGVjdENsYWltc0J5VXJpLFxuICBtYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yQ3VycmVudFBhZ2VTdGF0ZSxcbiAgbWFrZVNlbGVjdENsYWltSXNOc2Z3LFxuICBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUsXG4gIG1ha2VTZWxlY3RSZWNvbW1lbmRlZENvbnRlbnRGb3JVcmksXG4gIG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmksXG4gIG1ha2VTZWxlY3RNZWRpYVR5cGVGb3JVcmksXG4gIHNlbGVjdEJhbGFuY2UsXG4gIHNlbGVjdEJsb2NrZWRDaGFubmVscyxcbiAgcGFyc2VVUkksXG4gIG1ha2VTZWxlY3RDb250ZW50VHlwZUZvclVyaSxcbiAgbWFrZVNlbGVjdEZpbGVOYW1lRm9yVXJpLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdEFsbENvc3RJbmZvQnlVcmksIG1ha2VTZWxlY3RDb3N0SW5mb0ZvclVyaSB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IHsgc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgUkVOREVSX01PREVTIGZyb20gJ2NvbnN0YW50cy9maWxlX3JlbmRlcl9tb2Rlcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEZPUkNFX0NPTlRFTlRfVFlQRV9QTEFZRVIgfSBmcm9tICdjb25zdGFudHMvY2xhaW0nO1xuaW1wb3J0IHsgZ2VuZXJhdGVTdHJlYW1VcmwgfSBmcm9tICd1dGlsL2xicnl0dic7XG5cbmNvbnN0IFJFQ0VOVF9ISVNUT1JZX0FNT1VOVCA9IDEwO1xuY29uc3QgSElTVE9SWV9JVEVNU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0U3RhdGUgPSAoc3RhdGU6IGFueSkgPT4gc3RhdGUuY29udGVudCB8fCB7fTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFBsYXlpbmdVcmkgPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUucGxheWluZ1VyaSk7XG5cbmV4cG9ydCBjb25zdCBtYWtlU2VsZWN0SXNQbGF5aW5nID0gKHVyaTogc3RyaW5nKSA9PiBjcmVhdGVTZWxlY3RvcihzZWxlY3RQbGF5aW5nVXJpLCBwbGF5aW5nVXJpID0+IHBsYXlpbmdVcmkgPT09IHVyaSk7XG5cbmV4cG9ydCBjb25zdCBtYWtlU2VsZWN0Q29udGVudFBvc2l0aW9uRm9yVXJpID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIChzdGF0ZSwgY2xhaW0pID0+IHtcbiAgICBpZiAoIWNsYWltKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgb3V0cG9pbnQgPSBgJHtjbGFpbS50eGlkfToke2NsYWltLm5vdXR9YDtcbiAgICBjb25zdCBpZCA9IGNsYWltLmNsYWltX2lkO1xuICAgIHJldHVybiBzdGF0ZS5wb3NpdGlvbnNbaWRdID8gc3RhdGUucG9zaXRpb25zW2lkXVtvdXRwb2ludF0gOiBudWxsO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdEhpc3RvcnkgPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuaGlzdG9yeSB8fCBbXSk7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RIaXN0b3J5UGFnZUNvdW50ID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0SGlzdG9yeSwgaGlzdG9yeSA9PlxuICBNYXRoLmNlaWwoaGlzdG9yeS5sZW5ndGggLyBISVNUT1JZX0lURU1TX1BFUl9QQUdFKVxuKTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RIaXN0b3J5Rm9yUGFnZSA9IChwYWdlOiBudW1iZXIpID0+XG4gIGNyZWF0ZVNlbGVjdG9yKHNlbGVjdEhpc3RvcnksIHNlbGVjdENsYWltc0J5VXJpLCAoaGlzdG9yeSwgY2xhaW1zQnlVcmkpID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gcGFnZSAqIEhJU1RPUllfSVRFTVNfUEVSX1BBR0U7XG4gICAgY29uc3QgaGlzdG9yeUl0ZW1zRm9yUGFnZSA9IGhpc3Rvcnkuc2xpY2UobGVmdCwgbGVmdCArIEhJU1RPUllfSVRFTVNfUEVSX1BBR0UpO1xuICAgIHJldHVybiBoaXN0b3J5SXRlbXNGb3JQYWdlO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RIaXN0b3J5Rm9yVXJpID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihzZWxlY3RIaXN0b3J5LCBoaXN0b3J5ID0+IGhpc3RvcnkuZmluZChpID0+IGkudXJpID09PSB1cmkpKTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RIYXNWaXNpdGVkVXJpID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0SGlzdG9yeUZvclVyaSh1cmkpLCBoaXN0b3J5ID0+IEJvb2xlYW4oaGlzdG9yeSkpO1xuXG5leHBvcnQgY29uc3QgbWFrZVNlbGVjdE5leHRVbnBsYXllZFJlY29tbWVuZGVkID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihcbiAgICBtYWtlU2VsZWN0UmVjb21tZW5kZWRDb250ZW50Rm9yVXJpKHVyaSksXG4gICAgc2VsZWN0SGlzdG9yeSxcbiAgICBzZWxlY3RDbGFpbXNCeVVyaSxcbiAgICBzZWxlY3RBbGxDb3N0SW5mb0J5VXJpLFxuICAgIHNlbGVjdEJsb2NrZWRDaGFubmVscyxcbiAgICAoXG4gICAgICByZWNvbW1lbmRlZEZvclVyaTogQXJyYXk8c3RyaW5nPixcbiAgICAgIGhpc3Rvcnk6IEFycmF5PHsgdXJpOiBzdHJpbmcgfT4sXG4gICAgICBjbGFpbXNCeVVyaTogeyBbc3RyaW5nXTogP0NsYWltIH0sXG4gICAgICBjb3N0SW5mb0J5VXJpOiB7IFtzdHJpbmddOiB7IGNvc3Q6IDAgfCBzdHJpbmcgfSB9LFxuICAgICAgYmxvY2tlZENoYW5uZWxzOiBBcnJheTxzdHJpbmc+XG4gICAgKSA9PiB7XG4gICAgICBpZiAocmVjb21tZW5kZWRGb3JVcmkpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGF1dG9wbGF5IHBhaWQgY29udGVudCwgY2hhbm5lbHMsIG9yIGNvbnRlbnQgZnJvbSBibG9ja2VkIGNoYW5uZWxzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjb21tZW5kZWRGb3JVcmkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByZWNvbW1lbmRlZFVyaSA9IHJlY29tbWVuZGVkRm9yVXJpW2ldO1xuICAgICAgICAgIGNvbnN0IGNsYWltID0gY2xhaW1zQnlVcmlbcmVjb21tZW5kZWRVcmldO1xuXG4gICAgICAgICAgaWYgKCFjbGFpbSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBpc0NoYW5uZWwgfSA9IHBhcnNlVVJJKHJlY29tbWVuZGVkVXJpKTtcbiAgICAgICAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb3N0SW5mbyA9IGNvc3RJbmZvQnlVcmlbcmVjb21tZW5kZWRVcmldO1xuICAgICAgICAgIGlmICghY29zdEluZm8gfHwgY29zdEluZm8uY29zdCAhPT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gV2UgYWxyZWFkeSBjaGVjayBpZiBpdCdzIGEgY2hhbm5lbCBhYm92ZVxuICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICBjb25zdCBpc1ZpZGVvID0gY2xhaW0udmFsdWUgJiYgY2xhaW0udmFsdWUuc3RyZWFtX3R5cGUgPT09ICd2aWRlbyc7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGNvbnN0IGlzQXVkaW8gPSBjbGFpbS52YWx1ZSAmJiBjbGFpbS52YWx1ZS5zdHJlYW1fdHlwZSA9PT0gJ2F1ZGlvJztcbiAgICAgICAgICBpZiAoIWlzVmlkZW8gJiYgIWlzQXVkaW8pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSBjbGFpbSAmJiBjbGFpbS5zaWduaW5nX2NoYW5uZWw7XG4gICAgICAgICAgaWYgKGNoYW5uZWwgJiYgYmxvY2tlZENoYW5uZWxzLnNvbWUoYmxvY2tlZFVyaSA9PiBibG9ja2VkVXJpID09PSBjaGFubmVsLnBlcm1hbmVudF91cmwpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWhpc3Rvcnkuc29tZShpdGVtID0+IGl0ZW0udXJpID09PSByZWNvbW1lbmRlZEZvclVyaVtpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvbW1lbmRlZEZvclVyaVtpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RSZWNlbnRIaXN0b3J5ID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0SGlzdG9yeSwgaGlzdG9yeSA9PiB7XG4gIHJldHVybiBoaXN0b3J5LnNsaWNlKDAsIFJFQ0VOVF9ISVNUT1JZX0FNT1VOVCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RDYXRlZ29yeUxpc3RVcmlzID0gKHVyaXM6ID9BcnJheTxzdHJpbmc+LCBjaGFubmVsOiBzdHJpbmcpID0+XG4gIGNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbXNJbkNoYW5uZWxGb3JDdXJyZW50UGFnZVN0YXRlKGNoYW5uZWwpLCBjaGFubmVsQ2xhaW1zID0+IHtcbiAgICBpZiAodXJpcykgcmV0dXJuIHVyaXM7XG5cbiAgICBpZiAoY2hhbm5lbENsYWltcykge1xuICAgICAgY29uc3QgQ0FURUdPUllfTElTVF9TSVpFID0gMTA7XG4gICAgICByZXR1cm4gY2hhbm5lbENsYWltcy5zbGljZSgwLCBDQVRFR09SWV9MSVNUX1NJWkUpLm1hcCgoeyBuYW1lLCBjbGFpbV9pZDogY2xhaW1JZCB9KSA9PiBgJHtuYW1lfSMke2NsYWltSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgbWFrZVNlbGVjdFNob3VsZE9ic2N1cmVQcmV2aWV3ID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihzZWxlY3RTaG93TWF0dXJlQ29udGVudCwgbWFrZVNlbGVjdENsYWltSXNOc2Z3KHVyaSksIChzaG93TWF0dXJlQ29udGVudCwgaXNDbGFpbU1hdHVyZSkgPT4ge1xuICAgIHJldHVybiBpc0NsYWltTWF0dXJlICYmICFzaG93TWF0dXJlQ29udGVudDtcbiAgfSk7XG5cbi8vIHNob3VsZCBwcm9iYWJseSBiZSBpbiBsYnJ5LXJlZHV4LCB5YXJuIGxpbmsgd2FzIGZpZ2h0aW5nIG1lXG5leHBvcnQgY29uc3QgbWFrZVNlbGVjdEZpbGVFeHRlbnNpb25Gb3JVcmkgPSAodXJpOiBzdHJpbmcpID0+XG4gIGNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RGaWxlTmFtZUZvclVyaSh1cmkpLCBmaWxlTmFtZSA9PiB7XG4gICAgcmV0dXJuIGZpbGVOYW1lICYmIHBhdGguZXh0bmFtZShmaWxlTmFtZSkuc3Vic3RyaW5nKDEpO1xuICB9KTtcblxubGV0IG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eTtcbm1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eSA9ICh1cmk6IHN0cmluZykgPT5cbiAgY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IChjbGFpbSA/IGdlbmVyYXRlU3RyZWFtVXJsKGNsYWltLm5hbWUsIGNsYWltLmNsYWltX2lkKSA6IG51bGwpKTtcbmV4cG9ydCB7IG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmlXZWJQcm94eSB9O1xuXG5leHBvcnQgY29uc3QgbWFrZVNlbGVjdEZpbGVSZW5kZXJNb2RlRm9yVXJpID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihcbiAgICBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkodXJpKSxcbiAgICBtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpKHVyaSksXG4gICAgbWFrZVNlbGVjdEZpbGVFeHRlbnNpb25Gb3JVcmkodXJpKSxcbiAgICAoY29udGVudFR5cGUsIG1lZGlhVHlwZSwgZXh0ZW5zaW9uKSA9PiB7XG4gICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nIHx8IEZPUkNFX0NPTlRFTlRfVFlQRV9QTEFZRVIuaW5jbHVkZXMoY29udGVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiBSRU5ERVJfTU9ERVMuVklERU87XG4gICAgICB9XG4gICAgICBpZiAobWVkaWFUeXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgIHJldHVybiBSRU5ERVJfTU9ERVMuQVVESU87XG4gICAgICB9XG4gICAgICBpZiAobWVkaWFUeXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIHJldHVybiBSRU5ERVJfTU9ERVMuSU1BR0U7XG4gICAgICB9XG4gICAgICBpZiAoWydtZCcsICdtYXJrZG93biddLmluY2x1ZGVzKGV4dGVuc2lvbikgfHwgWyd0ZXh0L21kJywgJ3RleHQvbWFya2Rvd24nXS5pbmNsdWRlcyhjb250ZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIFJFTkRFUl9NT0RFUy5NQVJLRE9XTjtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHtcbiAgICAgICAgcmV0dXJuIFJFTkRFUl9NT0RFUy5QREY7XG4gICAgICB9XG4gICAgICBpZiAoWyd0ZXh0L2h0bScsICd0ZXh0L2h0bWwnXS5pbmNsdWRlcyhjb250ZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIFJFTkRFUl9NT0RFUy5IVE1MO1xuICAgICAgfVxuICAgICAgaWYgKFsndGV4dCcsICdkb2N1bWVudCcsICdzY3JpcHQnXS5pbmNsdWRlcyhtZWRpYVR5cGUpKSB7XG4gICAgICAgIHJldHVybiBSRU5ERVJfTU9ERVMuRE9DVU1FTlQ7XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5zaW9uID09PSAnZG9jeCcpIHtcbiAgICAgICAgcmV0dXJuIFJFTkRFUl9NT0RFUy5ET0NYO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHdyaXRpbmcgdGhpcyBteSBsb2NhbCBjb3B5IG9mIExicnkuZ2V0TWVkaWFUeXBlIGhhZCAnM0QtZmlsZScsIGJ1dCBJIHdhcyByZWNlaXZpbmcgbW9kZWwuLi4nXG4gICAgICBpZiAoWyczRC1maWxlJywgJ21vZGVsJ10uaW5jbHVkZXMobWVkaWFUeXBlKSkge1xuICAgICAgICByZXR1cm4gUkVOREVSX01PREVTLkNBRDtcbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYVR5cGUgPT09ICdjb21pYy1ib29rJykge1xuICAgICAgICByZXR1cm4gUkVOREVSX01PREVTLkNPTUlDO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBbXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtZ3RhcicsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtdGd6JyxcbiAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLnJhcicsXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG4gICAgICAgIF0uaW5jbHVkZXMoY29udGVudFR5cGUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIFJFTkRFUl9NT0RFUy5ET1dOTE9BRDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ2FwcGxpY2F0aW9uJykge1xuICAgICAgICByZXR1cm4gUkVOREVSX01PREVTLkFQUExJQ0FUSU9OO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUkVOREVSX01PREVTLlVOU1VQUE9SVEVEO1xuICAgIH1cbiAgKTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RJbnN1ZmZpY2llbnRDcmVkaXRzRm9yVXJpID0gKHVyaTogc3RyaW5nKSA9PlxuICBjcmVhdGVTZWxlY3RvcihcbiAgICBtYWtlU2VsZWN0Q2xhaW1Jc01pbmUodXJpKSxcbiAgICBtYWtlU2VsZWN0Q29zdEluZm9Gb3JVcmkodXJpKSxcbiAgICBzZWxlY3RCYWxhbmNlLFxuICAgIChpc01pbmUsIGNvc3RJbmZvLCBiYWxhbmNlKSA9PiB7XG4gICAgICByZXR1cm4gIWlzTWluZSAmJiBjb3N0SW5mbyAmJiBjb3N0SW5mby5jb3N0ID4gMCAmJiBjb3N0SW5mby5jb3N0ID4gYmFsYW5jZTtcbiAgICB9XG4gICk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBUEE7QUFBQTtBQVVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBT0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFBQTtBQWNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQUE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFqQkE7QUFxQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQXBDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBNkJBO0FBQ0E7QUE5QkE7QUFBQTtBQUFBO0FBbUNBO0FBQ0E7QUFwREE7QUFBQTtBQXdEQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFBQTtBQVlBO0FBQUE7QUFFQTtBQUZBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFFQTtBQUZBO0FBQUE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkRBO0FBQUE7QUEyREE7QUFBQTtBQU1BO0FBTkE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/selectors/content.js\n"); - -/***/ }), - -/***/ "../ui/redux/selectors/settings.js": -/*!*****************************************!*\ - !*** ../ui/redux/selectors/settings.js ***! - \*****************************************/ -/*! exports provided: selectDaemonSettings, selectDaemonStatus, selectFfmpegStatus, selectFindingFFmpeg, selectClientSettings, selectLoadedLanguages, makeSelectClientSetting, selectShowMatureContent, selectShowRepostedContent, selectTheme, selectAutomaticDarkModeEnabled, selectIsNight, selectSavedWalletServers, selectSharedPreferences, makeSelectSharedPreferencesForKey, selectHasWalletServerPrefs, selectThemePath, selectosNotificationsEnabled */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectDaemonSettings\", function() { return selectDaemonSettings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectDaemonStatus\", function() { return selectDaemonStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectFfmpegStatus\", function() { return selectFfmpegStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectFindingFFmpeg\", function() { return selectFindingFFmpeg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectClientSettings\", function() { return selectClientSettings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectLoadedLanguages\", function() { return selectLoadedLanguages; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectClientSetting\", function() { return makeSelectClientSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectShowMatureContent\", function() { return selectShowMatureContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectShowRepostedContent\", function() { return selectShowRepostedContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectTheme\", function() { return selectTheme; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectAutomaticDarkModeEnabled\", function() { return selectAutomaticDarkModeEnabled; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsNight\", function() { return selectIsNight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSavedWalletServers\", function() { return selectSavedWalletServers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSharedPreferences\", function() { return selectSharedPreferences; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectSharedPreferencesForKey\", function() { return makeSelectSharedPreferencesForKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectHasWalletServerPrefs\", function() { return selectHasWalletServerPrefs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectThemePath\", function() { return selectThemePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectosNotificationsEnabled\", function() { return selectosNotificationsEnabled; });\n/* harmony import */ var constants_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/settings */ \"../ui/constants/settings.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\");\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(reselect__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nvar selectState = function selectState(state) {\n return state.settings || {};\n};\n\nvar selectDaemonSettings = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.daemonSettings;\n});\nvar selectDaemonStatus = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.daemonStatus;\n});\nvar selectFfmpegStatus = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectDaemonStatus, function (status) {\n return status.ffmpeg_status;\n});\nvar selectFindingFFmpeg = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.findingFFmpeg || false;\n});\nvar selectClientSettings = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.clientSettings || {};\n});\nvar selectLoadedLanguages = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.loadedLanguages || {};\n});\nvar makeSelectClientSetting = function makeSelectClientSetting(setting) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectClientSettings, function (settings) {\n return settings ? settings[setting] : undefined;\n });\n}; // refactor me\n\nvar selectShowMatureContent = makeSelectClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_MATURE); // and me\n\nvar selectShowRepostedContent = makeSelectClientSetting(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SETTINGS\"].SHOW_REPOSTS);\nvar selectTheme = makeSelectClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"THEME\"]);\nvar selectAutomaticDarkModeEnabled = makeSelectClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"AUTOMATIC_DARK_MODE_ENABLED\"]);\nvar selectIsNight = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.isNight;\n});\nvar selectSavedWalletServers = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.customWalletServers;\n});\nvar selectSharedPreferences = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectState, function (state) {\n return state.sharedPreferences;\n});\nvar makeSelectSharedPreferencesForKey = function makeSelectSharedPreferencesForKey(key) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectSharedPreferences, function (prefs) {\n return prefs ? prefs[key] : undefined;\n });\n};\nvar selectHasWalletServerPrefs = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(makeSelectSharedPreferencesForKey(lbry_redux__WEBPACK_IMPORTED_MODULE_1__[\"SHARED_PREFERENCES\"].WALLET_SERVERS), function (servers) {\n return !!(servers && servers.length);\n});\nvar selectThemePath = Object(reselect__WEBPACK_IMPORTED_MODULE_2__[\"createSelector\"])(selectTheme, selectAutomaticDarkModeEnabled, selectIsNight, function (theme, automaticDarkModeEnabled, isNight) {\n var dynamicTheme = automaticDarkModeEnabled && isNight ? 'dark' : theme;\n return dynamicTheme || 'light';\n});\nvar selectosNotificationsEnabled = makeSelectClientSetting(constants_settings__WEBPACK_IMPORTED_MODULE_0__[\"OS_NOTIFICATIONS_ENABLED\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvc2VsZWN0b3JzL3NldHRpbmdzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3JlZHV4L3NlbGVjdG9ycy9zZXR0aW5ncy5qcz82MmUyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNFVFRJTkdTIGZyb20gJ2NvbnN0YW50cy9zZXR0aW5ncyc7XG5pbXBvcnQgeyBTSEFSRURfUFJFRkVSRU5DRVMsIFNFVFRJTkdTIGFzIExCUllfUkVEVVhfU0VUVElOR1MgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSAncmVzZWxlY3QnO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSA9IHN0YXRlID0+IHN0YXRlLnNldHRpbmdzIHx8IHt9O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0RGFlbW9uU2V0dGluZ3MgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmRhZW1vblNldHRpbmdzXG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0RGFlbW9uU3RhdHVzID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5kYWVtb25TdGF0dXNcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RGZm1wZWdTdGF0dXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0RGFlbW9uU3RhdHVzLFxuICBzdGF0dXMgPT4gc3RhdHVzLmZmbXBlZ19zdGF0dXNcbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RGaW5kaW5nRkZtcGVnID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5maW5kaW5nRkZtcGVnIHx8IGZhbHNlXG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Q2xpZW50U2V0dGluZ3MgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmNsaWVudFNldHRpbmdzIHx8IHt9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0TG9hZGVkTGFuZ3VhZ2VzID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5sb2FkZWRMYW5ndWFnZXMgfHwge31cbik7XG5cbmV4cG9ydCBjb25zdCBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyA9IHNldHRpbmcgPT5cbiAgY3JlYXRlU2VsZWN0b3IoXG4gICAgc2VsZWN0Q2xpZW50U2V0dGluZ3MsXG4gICAgc2V0dGluZ3MgPT4gKHNldHRpbmdzID8gc2V0dGluZ3Nbc2V0dGluZ10gOiB1bmRlZmluZWQpXG4gICk7XG5cbi8vIHJlZmFjdG9yIG1lXG5leHBvcnQgY29uc3Qgc2VsZWN0U2hvd01hdHVyZUNvbnRlbnQgPSBtYWtlU2VsZWN0Q2xpZW50U2V0dGluZyhMQlJZX1JFRFVYX1NFVFRJTkdTLlNIT1dfTUFUVVJFKTtcblxuLy8gYW5kIG1lXG5leHBvcnQgY29uc3Qgc2VsZWN0U2hvd1JlcG9zdGVkQ29udGVudCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKExCUllfUkVEVVhfU0VUVElOR1MuU0hPV19SRVBPU1RTKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFRoZW1lID0gbWFrZVNlbGVjdENsaWVudFNldHRpbmcoU0VUVElOR1MuVEhFTUUpO1xuZXhwb3J0IGNvbnN0IHNlbGVjdEF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkFVVE9NQVRJQ19EQVJLX01PREVfRU5BQkxFRCk7XG5leHBvcnQgY29uc3Qgc2VsZWN0SXNOaWdodCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuaXNOaWdodFxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFNhdmVkV2FsbGV0U2VydmVycyA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdGF0ZSxcbiAgc3RhdGUgPT4gc3RhdGUuY3VzdG9tV2FsbGV0U2VydmVyc1xuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFNoYXJlZFByZWZlcmVuY2VzID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5zaGFyZWRQcmVmZXJlbmNlc1xuKTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RTaGFyZWRQcmVmZXJlbmNlc0ZvcktleSA9IGtleSA9PlxuICBjcmVhdGVTZWxlY3RvcihcbiAgICBzZWxlY3RTaGFyZWRQcmVmZXJlbmNlcyxcbiAgICBwcmVmcyA9PiAocHJlZnMgPyBwcmVmc1trZXldIDogdW5kZWZpbmVkKVxuICApO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0SGFzV2FsbGV0U2VydmVyUHJlZnMgPSBjcmVhdGVTZWxlY3RvcihcbiAgbWFrZVNlbGVjdFNoYXJlZFByZWZlcmVuY2VzRm9yS2V5KFNIQVJFRF9QUkVGRVJFTkNFUy5XQUxMRVRfU0VSVkVSUyksXG4gIHNlcnZlcnMgPT4ge1xuICAgIHJldHVybiAhIShzZXJ2ZXJzICYmIHNlcnZlcnMubGVuZ3RoKTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFRoZW1lUGF0aCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RUaGVtZSxcbiAgc2VsZWN0QXV0b21hdGljRGFya01vZGVFbmFibGVkLFxuICBzZWxlY3RJc05pZ2h0LFxuICAodGhlbWUsIGF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZCwgaXNOaWdodCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtaWNUaGVtZSA9IGF1dG9tYXRpY0RhcmtNb2RlRW5hYmxlZCAmJiBpc05pZ2h0ID8gJ2RhcmsnIDogdGhlbWU7XG4gICAgcmV0dXJuIGR5bmFtaWNUaGVtZSB8fCAnbGlnaHQnO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0b3NOb3RpZmljYXRpb25zRW5hYmxlZCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLk9TX05PVElGSUNBVElPTlNfRU5BQkxFRCk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUVBO0FBRkE7QUFLQTtBQUFBO0FBR0E7QUFIQTtBQUFBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBS0E7QUFFQTtBQUZBO0FBS0E7QUFFQTtBQUZBO0FBS0E7QUFBQTtBQUdBO0FBSEE7QUFBQTtBQU1BO0FBR0E7QUFIQTtBQU9BO0FBS0E7QUFDQTtBQU5BO0FBVUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/redux/selectors/settings.js\n"); - -/***/ }), - -/***/ "../ui/redux/selectors/subscriptions.js": -/*!**********************************************!*\ - !*** ../ui/redux/selectors/subscriptions.js ***! - \**********************************************/ -/*! exports provided: selectSubscriptions, selectIsFetchingSubscriptions, selectViewMode, selectSuggested, selectIsFetchingSuggested, selectSuggestedChannels, selectFirstRunCompleted, selectshowSuggestedSubs, selectSubscriptionsBeingFetched, selectUnreadByChannel, selectUnreadAmount, selectUnreadSubscriptions, makeSelectUnreadByChannel, selectSubscriptionClaims, makeSelectChannelInSubscriptions, makeSelectIsSubscribed, makeSelectIsNew */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSubscriptions\", function() { return selectSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsFetchingSubscriptions\", function() { return selectIsFetchingSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectViewMode\", function() { return selectViewMode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSuggested\", function() { return selectSuggested; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectIsFetchingSuggested\", function() { return selectIsFetchingSuggested; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSuggestedChannels\", function() { return selectSuggestedChannels; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectFirstRunCompleted\", function() { return selectFirstRunCompleted; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectshowSuggestedSubs\", function() { return selectshowSuggestedSubs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSubscriptionsBeingFetched\", function() { return selectSubscriptionsBeingFetched; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUnreadByChannel\", function() { return selectUnreadByChannel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUnreadAmount\", function() { return selectUnreadAmount; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectUnreadSubscriptions\", function() { return selectUnreadSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectUnreadByChannel\", function() { return makeSelectUnreadByChannel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"selectSubscriptionClaims\", function() { return selectSubscriptionClaims; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectChannelInSubscriptions\", function() { return makeSelectChannelInSubscriptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectIsSubscribed\", function() { return makeSelectIsSubscribed; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"makeSelectIsNew\", function() { return makeSelectIsNew; });\n/* harmony import */ var constants_subscriptions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/subscriptions */ \"../ui/constants/subscriptions.js\");\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! reselect */ \"../node_modules/reselect/lib/index.js\");\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(reselect__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var util_swap_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util/swap-json */ \"../ui/util/swap-json.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\n\n // Returns the entire subscriptions state\n\nvar selectState = function selectState(state) {\n return state.subscriptions || {};\n}; // Returns the list of channel uris a user is subscribed to\n\n\nvar selectSubscriptions = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.subscriptions && state.subscriptions.sort(function (a, b) {\n return a.channelName.localeCompare(b.channelName);\n });\n}); // Fetching list of users subscriptions\n\nvar selectIsFetchingSubscriptions = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.loading;\n}); // The current view mode on the subscriptions page\n\nvar selectViewMode = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.viewMode;\n}); // Suggested subscriptions from internal apis\n\nvar selectSuggested = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.suggested;\n});\nvar selectIsFetchingSuggested = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.loadingSuggested;\n});\nvar selectSuggestedChannels = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectSubscriptions, selectSuggested, function (userSubscriptions, suggested) {\n if (!suggested) {\n return null;\n } // Swap the key/value because we will use the uri for everything, this just makes it easier\n // suggested is returned from the api with the form:\n // {\n // featured: { \"Channel label\": uri, ... },\n // top_subscribed: { \"@channel\": uri, ... }\n // top_bid: { \"@channel\": uri, ... }\n // }\n // To properly compare the suggested subscriptions from our current subscribed channels\n // We only care about the uri, not the label\n // We also only care about top_subscribed and featured\n // top_bid could just be porn or a channel with no content\n\n\n var topSubscribedSuggestions = Object(util_swap_json__WEBPACK_IMPORTED_MODULE_3__[\"swapKeyAndValue\"])(suggested[constants_subscriptions__WEBPACK_IMPORTED_MODULE_0__[\"SUGGESTED_TOP_SUBSCRIBED\"]]);\n var featuredSuggestions = Object(util_swap_json__WEBPACK_IMPORTED_MODULE_3__[\"swapKeyAndValue\"])(suggested[constants_subscriptions__WEBPACK_IMPORTED_MODULE_0__[\"SUGGESTED_FEATURED\"]]); // Make sure there are no duplicates\n // If a uri isn't already in the suggested object, add it\n\n var suggestedChannels = _objectSpread({}, topSubscribedSuggestions);\n\n Object.keys(featuredSuggestions).forEach(function (uri) {\n if (!suggestedChannels[uri]) {\n var channelLabel = featuredSuggestions[uri];\n suggestedChannels[uri] = channelLabel;\n }\n });\n userSubscriptions.forEach(function (_ref) {\n var uri = _ref.uri; // Note to passer bys:\n // Maybe we should just remove the `lbry://` prefix from subscription uris\n // Most places don't store them like that\n\n var subscribedUri = uri.slice('lbry://'.length);\n\n if (suggestedChannels[subscribedUri]) {\n delete suggestedChannels[subscribedUri];\n }\n });\n return Object.keys(suggestedChannels).map(function (uri) {\n return {\n uri: uri,\n label: suggestedChannels[uri]\n };\n });\n});\nvar selectFirstRunCompleted = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.firstRunCompleted;\n});\nvar selectshowSuggestedSubs = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.showSuggestedSubs;\n}); // Fetching any claims that are a part of a users subscriptions\n\nvar selectSubscriptionsBeingFetched = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectSubscriptions, lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectAllFetchingChannelClaims\"], function (subscriptions, fetchingChannelClaims) {\n var fetchingSubscriptionMap = {};\n subscriptions.forEach(function (sub) {\n var isFetching = fetchingChannelClaims && fetchingChannelClaims[sub.uri];\n\n if (isFetching) {\n fetchingSubscriptionMap[sub.uri] = true;\n }\n });\n return fetchingSubscriptionMap;\n});\nvar selectUnreadByChannel = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectState, function (state) {\n return state.unread;\n}); // Returns the current total of unread subscriptions\n\nvar selectUnreadAmount = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectUnreadByChannel, function (unreadByChannel) {\n var unreadChannels = Object.keys(unreadByChannel);\n var badges = 0;\n\n if (!unreadChannels.length) {\n return badges;\n }\n\n unreadChannels.forEach(function (channel) {\n badges += unreadByChannel[channel].uris.length;\n });\n return badges;\n}); // Returns the uris with channels as an array with the channel with the newest content first\n// If you just want the `unread` state, use selectUnread\n\nvar selectUnreadSubscriptions = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectUnreadAmount, selectUnreadByChannel, lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectClaimsByUri\"], function (unreadAmount, unreadByChannel, claimsByUri) {\n // determine which channel has the newest content\n var unreadList = [];\n\n if (!unreadAmount) {\n return unreadList;\n }\n\n var channelUriList = Object.keys(unreadByChannel); // There is only one channel with unread notifications\n\n if (unreadAmount === 1) {\n channelUriList.forEach(function (channel) {\n var unreadChannel = {\n channel: channel,\n uris: unreadByChannel[channel].uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n }\n\n channelUriList.sort(function (channel1, channel2) {\n var latestUriFromChannel1 = unreadByChannel[channel1].uris[0];\n var latestClaimFromChannel1 = claimsByUri[latestUriFromChannel1] || {};\n var latestUriFromChannel2 = unreadByChannel[channel2].uris[0];\n var latestClaimFromChannel2 = claimsByUri[latestUriFromChannel2] || {};\n var latestHeightFromChannel1 = latestClaimFromChannel1.height || 0;\n var latestHeightFromChannel2 = latestClaimFromChannel2.height || 0;\n\n if (latestHeightFromChannel1 !== latestHeightFromChannel2) {\n return latestHeightFromChannel2 - latestHeightFromChannel1;\n }\n\n return 0;\n }).forEach(function (channel) {\n var unreadSubscription = unreadByChannel[channel];\n var unreadChannel = {\n channel: channel,\n uris: unreadSubscription.uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n}); // Returns all unread subscriptions for a uri passed in\n\nvar makeSelectUnreadByChannel = function makeSelectUnreadByChannel(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectUnreadByChannel, function (unread) {\n return unread[uri];\n });\n}; // Returns the first page of claims for every channel a user is subscribed to\n\nvar selectSubscriptionClaims = Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectAllClaimsByChannel\"], lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"selectClaimsById\"], selectSubscriptions, selectUnreadByChannel, function (channelIds, allClaims, savedSubscriptions, unreadByChannel) {\n // no claims loaded yet\n if (!Object.keys(channelIds).length) {\n return [];\n }\n\n var fetchedSubscriptions = [];\n savedSubscriptions.forEach(function (subscription) {\n var channelClaims = []; // if subscribed channel has content\n\n if (channelIds[subscription.uri] && channelIds[subscription.uri]['1']) {\n // This will need to be more robust, we will want to be able to load more than the first page\n // Strip out any ids that will be shown as notifications\n var pageOneChannelIds = channelIds[subscription.uri]['1']; // we have the channel ids and the corresponding claims\n // loop over the list of ids and grab the claim\n\n pageOneChannelIds.forEach(function (id) {\n var grabbedClaim = allClaims[id];\n\n if (unreadByChannel[subscription.uri] && unreadByChannel[subscription.uri].uris.some(function (uri) {\n return uri.includes(id);\n })) {\n grabbedClaim.isNew = true;\n }\n\n channelClaims = channelClaims.concat([grabbedClaim]);\n });\n }\n\n fetchedSubscriptions = fetchedSubscriptions.concat(channelClaims);\n });\n return fetchedSubscriptions;\n}); // Returns true if a user is subscribed to the channel associated with the uri passed in\n// Accepts content or channel uris\n\nvar makeSelectChannelInSubscriptions = function makeSelectChannelInSubscriptions(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectSubscriptions, function (subscriptions) {\n return subscriptions.some(function (sub) {\n return sub.uri === uri;\n });\n });\n};\nvar makeSelectIsSubscribed = function makeSelectIsSubscribed(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(selectSubscriptions, Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectChannelForClaimUri\"])(uri, true), Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectClaimForUri\"])(uri), function (subscriptions, channelUri, claim) {\n if (channelUri) {\n return subscriptions.some(function (sub) {\n return sub.uri === channelUri;\n });\n } // If we couldn't get a channel uri from the claim uri, the uri passed in might be a channel already\n\n\n var isChannel;\n\n try {\n var _parseURI = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"parseURI\"])(uri);\n\n isChannel = _parseURI.isChannel;\n } catch (e) {}\n\n if (isChannel && claim) {\n var _uri = claim.permanent_url;\n return subscriptions.some(function (sub) {\n return sub.uri === _uri;\n });\n }\n\n return false;\n });\n};\nvar makeSelectIsNew = function makeSelectIsNew(uri) {\n return Object(reselect__WEBPACK_IMPORTED_MODULE_1__[\"createSelector\"])(makeSelectIsSubscribed(uri), Object(lbry_redux__WEBPACK_IMPORTED_MODULE_2__[\"makeSelectChannelForClaimUri\"])(uri), selectUnreadByChannel, function (isSubscribed, channel, unreadByChannel) {\n if (!isSubscribed) {\n return false;\n }\n\n var unreadForChannel = unreadByChannel[\"lbry://\".concat(channel)];\n\n if (unreadForChannel) {\n return unreadForChannel.uris.includes(uri);\n }\n\n return false; // If they are subscribed, check to see if this uri is in the list of unreads\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvcmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvcmVkdXgvc2VsZWN0b3JzL3N1YnNjcmlwdGlvbnMuanM/YTE4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTVUdHRVNURURfRkVBVFVSRUQsIFNVR0dFU1RFRF9UT1BfU1VCU0NSSUJFRCB9IGZyb20gJ2NvbnN0YW50cy9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtcbiAgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLFxuICBzZWxlY3RDbGFpbXNCeUlkLFxuICBzZWxlY3RBbGxGZXRjaGluZ0NoYW5uZWxDbGFpbXMsXG4gIG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmksXG4gIHNlbGVjdENsYWltc0J5VXJpLFxuICBwYXJzZVVSSSxcbiAgbWFrZVNlbGVjdENsYWltRm9yVXJpLFxufSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB7IHN3YXBLZXlBbmRWYWx1ZSB9IGZyb20gJ3V0aWwvc3dhcC1qc29uJztcblxuLy8gUmV0dXJucyB0aGUgZW50aXJlIHN1YnNjcmlwdGlvbnMgc3RhdGVcbmNvbnN0IHNlbGVjdFN0YXRlID0gc3RhdGUgPT4gc3RhdGUuc3Vic2NyaXB0aW9ucyB8fCB7fTtcblxuLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBjaGFubmVsIHVyaXMgYSB1c2VyIGlzIHN1YnNjcmliZWQgdG9cbmV4cG9ydCBjb25zdCBzZWxlY3RTdWJzY3JpcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5zdWJzY3JpcHRpb25zICYmIHN0YXRlLnN1YnNjcmlwdGlvbnMuc29ydCgoYSwgYikgPT4gYS5jaGFubmVsTmFtZS5sb2NhbGVDb21wYXJlKGIuY2hhbm5lbE5hbWUpKVxuKTtcblxuLy8gRmV0Y2hpbmcgbGlzdCBvZiB1c2VycyBzdWJzY3JpcHRpb25zXG5leHBvcnQgY29uc3Qgc2VsZWN0SXNGZXRjaGluZ1N1YnNjcmlwdGlvbnMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmxvYWRpbmdcbik7XG5cbi8vIFRoZSBjdXJyZW50IHZpZXcgbW9kZSBvbiB0aGUgc3Vic2NyaXB0aW9ucyBwYWdlXG5leHBvcnQgY29uc3Qgc2VsZWN0Vmlld01vZGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLnZpZXdNb2RlXG4pO1xuXG4vLyBTdWdnZXN0ZWQgc3Vic2NyaXB0aW9ucyBmcm9tIGludGVybmFsIGFwaXNcbmV4cG9ydCBjb25zdCBzZWxlY3RTdWdnZXN0ZWQgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLnN1Z2dlc3RlZFxuKTtcbmV4cG9ydCBjb25zdCBzZWxlY3RJc0ZldGNoaW5nU3VnZ2VzdGVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5sb2FkaW5nU3VnZ2VzdGVkXG4pO1xuZXhwb3J0IGNvbnN0IHNlbGVjdFN1Z2dlc3RlZENoYW5uZWxzID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN1YnNjcmlwdGlvbnMsXG4gIHNlbGVjdFN1Z2dlc3RlZCxcbiAgKHVzZXJTdWJzY3JpcHRpb25zLCBzdWdnZXN0ZWQpID0+IHtcbiAgICBpZiAoIXN1Z2dlc3RlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3dhcCB0aGUga2V5L3ZhbHVlIGJlY2F1c2Ugd2Ugd2lsbCB1c2UgdGhlIHVyaSBmb3IgZXZlcnl0aGluZywgdGhpcyBqdXN0IG1ha2VzIGl0IGVhc2llclxuICAgIC8vIHN1Z2dlc3RlZCBpcyByZXR1cm5lZCBmcm9tIHRoZSBhcGkgd2l0aCB0aGUgZm9ybTpcbiAgICAvLyB7XG4gICAgLy8gICBmZWF0dXJlZDogeyBcIkNoYW5uZWwgbGFiZWxcIjogdXJpLCAuLi4gfSxcbiAgICAvLyAgIHRvcF9zdWJzY3JpYmVkOiB7IFwiQGNoYW5uZWxcIjogdXJpLCAuLi4gfVxuICAgIC8vICAgdG9wX2JpZDogeyBcIkBjaGFubmVsXCI6IHVyaSwgLi4uIH1cbiAgICAvLyB9XG4gICAgLy8gVG8gcHJvcGVybHkgY29tcGFyZSB0aGUgc3VnZ2VzdGVkIHN1YnNjcmlwdGlvbnMgZnJvbSBvdXIgY3VycmVudCBzdWJzY3JpYmVkIGNoYW5uZWxzXG4gICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSB1cmksIG5vdCB0aGUgbGFiZWxcblxuICAgIC8vIFdlIGFsc28gb25seSBjYXJlIGFib3V0IHRvcF9zdWJzY3JpYmVkIGFuZCBmZWF0dXJlZFxuICAgIC8vIHRvcF9iaWQgY291bGQganVzdCBiZSBwb3JuIG9yIGEgY2hhbm5lbCB3aXRoIG5vIGNvbnRlbnRcbiAgICBjb25zdCB0b3BTdWJzY3JpYmVkU3VnZ2VzdGlvbnMgPSBzd2FwS2V5QW5kVmFsdWUoc3VnZ2VzdGVkW1NVR0dFU1RFRF9UT1BfU1VCU0NSSUJFRF0pO1xuICAgIGNvbnN0IGZlYXR1cmVkU3VnZ2VzdGlvbnMgPSBzd2FwS2V5QW5kVmFsdWUoc3VnZ2VzdGVkW1NVR0dFU1RFRF9GRUFUVVJFRF0pO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzXG4gICAgLy8gSWYgYSB1cmkgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgc3VnZ2VzdGVkIG9iamVjdCwgYWRkIGl0XG4gICAgY29uc3Qgc3VnZ2VzdGVkQ2hhbm5lbHMgPSB7IC4uLnRvcFN1YnNjcmliZWRTdWdnZXN0aW9ucyB9O1xuXG4gICAgT2JqZWN0LmtleXMoZmVhdHVyZWRTdWdnZXN0aW9ucykuZm9yRWFjaCh1cmkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0ZWRDaGFubmVsc1t1cmldKSB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxMYWJlbCA9IGZlYXR1cmVkU3VnZ2VzdGlvbnNbdXJpXTtcbiAgICAgICAgc3VnZ2VzdGVkQ2hhbm5lbHNbdXJpXSA9IGNoYW5uZWxMYWJlbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVzZXJTdWJzY3JpcHRpb25zLmZvckVhY2goKHsgdXJpIH0pID0+IHtcbiAgICAgIC8vIE5vdGUgdG8gcGFzc2VyIGJ5czpcbiAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBqdXN0IHJlbW92ZSB0aGUgYGxicnk6Ly9gIHByZWZpeCBmcm9tIHN1YnNjcmlwdGlvbiB1cmlzXG4gICAgICAvLyBNb3N0IHBsYWNlcyBkb24ndCBzdG9yZSB0aGVtIGxpa2UgdGhhdFxuICAgICAgY29uc3Qgc3Vic2NyaWJlZFVyaSA9IHVyaS5zbGljZSgnbGJyeTovLycubGVuZ3RoKTtcblxuICAgICAgaWYgKHN1Z2dlc3RlZENoYW5uZWxzW3N1YnNjcmliZWRVcmldKSB7XG4gICAgICAgIGRlbGV0ZSBzdWdnZXN0ZWRDaGFubmVsc1tzdWJzY3JpYmVkVXJpXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdWdnZXN0ZWRDaGFubmVscykubWFwKHVyaSA9PiAoe1xuICAgICAgdXJpLFxuICAgICAgbGFiZWw6IHN1Z2dlc3RlZENoYW5uZWxzW3VyaV0sXG4gICAgfSkpO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0Rmlyc3RSdW5Db21wbGV0ZWQgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLmZpcnN0UnVuQ29tcGxldGVkXG4pO1xuZXhwb3J0IGNvbnN0IHNlbGVjdHNob3dTdWdnZXN0ZWRTdWJzID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5zaG93U3VnZ2VzdGVkU3Vic1xuKTtcblxuLy8gRmV0Y2hpbmcgYW55IGNsYWltcyB0aGF0IGFyZSBhIHBhcnQgb2YgYSB1c2VycyBzdWJzY3JpcHRpb25zXG5leHBvcnQgY29uc3Qgc2VsZWN0U3Vic2NyaXB0aW9uc0JlaW5nRmV0Y2hlZCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RTdWJzY3JpcHRpb25zLFxuICBzZWxlY3RBbGxGZXRjaGluZ0NoYW5uZWxDbGFpbXMsXG4gIChzdWJzY3JpcHRpb25zLCBmZXRjaGluZ0NoYW5uZWxDbGFpbXMpID0+IHtcbiAgICBjb25zdCBmZXRjaGluZ1N1YnNjcmlwdGlvbk1hcCA9IHt9O1xuICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgY29uc3QgaXNGZXRjaGluZyA9IGZldGNoaW5nQ2hhbm5lbENsYWltcyAmJiBmZXRjaGluZ0NoYW5uZWxDbGFpbXNbc3ViLnVyaV07XG4gICAgICBpZiAoaXNGZXRjaGluZykge1xuICAgICAgICBmZXRjaGluZ1N1YnNjcmlwdGlvbk1hcFtzdWIudXJpXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmV0Y2hpbmdTdWJzY3JpcHRpb25NYXA7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RVbnJlYWRCeUNoYW5uZWwgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0U3RhdGUsXG4gIHN0YXRlID0+IHN0YXRlLnVucmVhZFxuKTtcblxuLy8gUmV0dXJucyB0aGUgY3VycmVudCB0b3RhbCBvZiB1bnJlYWQgc3Vic2NyaXB0aW9uc1xuZXhwb3J0IGNvbnN0IHNlbGVjdFVucmVhZEFtb3VudCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsXG4gIHVucmVhZEJ5Q2hhbm5lbCA9PiB7XG4gICAgY29uc3QgdW5yZWFkQ2hhbm5lbHMgPSBPYmplY3Qua2V5cyh1bnJlYWRCeUNoYW5uZWwpO1xuICAgIGxldCBiYWRnZXMgPSAwO1xuXG4gICAgaWYgKCF1bnJlYWRDaGFubmVscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWRnZXM7XG4gICAgfVxuXG4gICAgdW5yZWFkQ2hhbm5lbHMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGJhZGdlcyArPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbF0udXJpcy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFkZ2VzO1xuICB9XG4pO1xuXG4vLyBSZXR1cm5zIHRoZSB1cmlzIHdpdGggY2hhbm5lbHMgYXMgYW4gYXJyYXkgd2l0aCB0aGUgY2hhbm5lbCB3aXRoIHRoZSBuZXdlc3QgY29udGVudCBmaXJzdFxuLy8gSWYgeW91IGp1c3Qgd2FudCB0aGUgYHVucmVhZGAgc3RhdGUsIHVzZSBzZWxlY3RVbnJlYWRcbmV4cG9ydCBjb25zdCBzZWxlY3RVbnJlYWRTdWJzY3JpcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFVucmVhZEFtb3VudCxcbiAgc2VsZWN0VW5yZWFkQnlDaGFubmVsLFxuICBzZWxlY3RDbGFpbXNCeVVyaSxcbiAgKHVucmVhZEFtb3VudCwgdW5yZWFkQnlDaGFubmVsLCBjbGFpbXNCeVVyaSkgPT4ge1xuICAgIC8vIGRldGVybWluZSB3aGljaCBjaGFubmVsIGhhcyB0aGUgbmV3ZXN0IGNvbnRlbnRcbiAgICBjb25zdCB1bnJlYWRMaXN0ID0gW107XG4gICAgaWYgKCF1bnJlYWRBbW91bnQpIHtcbiAgICAgIHJldHVybiB1bnJlYWRMaXN0O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxVcmlMaXN0ID0gT2JqZWN0LmtleXModW5yZWFkQnlDaGFubmVsKTtcblxuICAgIC8vIFRoZXJlIGlzIG9ubHkgb25lIGNoYW5uZWwgd2l0aCB1bnJlYWQgbm90aWZpY2F0aW9uc1xuICAgIGlmICh1bnJlYWRBbW91bnQgPT09IDEpIHtcbiAgICAgIGNoYW5uZWxVcmlMaXN0LmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICAgIGNvbnN0IHVucmVhZENoYW5uZWwgPSB7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICB1cmlzOiB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbF0udXJpcyxcbiAgICAgICAgfTtcbiAgICAgICAgdW5yZWFkTGlzdC5wdXNoKHVucmVhZENoYW5uZWwpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB1bnJlYWRMaXN0O1xuICAgIH1cblxuICAgIGNoYW5uZWxVcmlMaXN0XG4gICAgICAuc29ydCgoY2hhbm5lbDEsIGNoYW5uZWwyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhdGVzdFVyaUZyb21DaGFubmVsMSA9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsMV0udXJpc1swXTtcbiAgICAgICAgY29uc3QgbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDEgPSBjbGFpbXNCeVVyaVtsYXRlc3RVcmlGcm9tQ2hhbm5lbDFdIHx8IHt9O1xuICAgICAgICBjb25zdCBsYXRlc3RVcmlGcm9tQ2hhbm5lbDIgPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbDJdLnVyaXNbMF07XG4gICAgICAgIGNvbnN0IGxhdGVzdENsYWltRnJvbUNoYW5uZWwyID0gY2xhaW1zQnlVcmlbbGF0ZXN0VXJpRnJvbUNoYW5uZWwyXSB8fCB7fTtcblxuICAgICAgICBjb25zdCBsYXRlc3RIZWlnaHRGcm9tQ2hhbm5lbDEgPSBsYXRlc3RDbGFpbUZyb21DaGFubmVsMS5oZWlnaHQgfHwgMDtcbiAgICAgICAgY29uc3QgbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwyID0gbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDIuaGVpZ2h0IHx8IDA7XG5cbiAgICAgICAgaWYgKGxhdGVzdEhlaWdodEZyb21DaGFubmVsMSAhPT0gbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwyKSB7XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdEhlaWdodEZyb21DaGFubmVsMiAtIGxhdGVzdEhlaWdodEZyb21DaGFubmVsMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgICBjb25zdCB1bnJlYWRTdWJzY3JpcHRpb24gPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbF07XG4gICAgICAgIGNvbnN0IHVucmVhZENoYW5uZWwgPSB7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICB1cmlzOiB1bnJlYWRTdWJzY3JpcHRpb24udXJpcyxcbiAgICAgICAgfTtcblxuICAgICAgICB1bnJlYWRMaXN0LnB1c2godW5yZWFkQ2hhbm5lbCk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1bnJlYWRMaXN0O1xuICB9XG4pO1xuXG4vLyBSZXR1cm5zIGFsbCB1bnJlYWQgc3Vic2NyaXB0aW9ucyBmb3IgYSB1cmkgcGFzc2VkIGluXG5leHBvcnQgY29uc3QgbWFrZVNlbGVjdFVucmVhZEJ5Q2hhbm5lbCA9IHVyaSA9PlxuICBjcmVhdGVTZWxlY3RvcihcbiAgICBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsXG4gICAgdW5yZWFkID0+IHVucmVhZFt1cmldXG4gICk7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IHBhZ2Ugb2YgY2xhaW1zIGZvciBldmVyeSBjaGFubmVsIGEgdXNlciBpcyBzdWJzY3JpYmVkIHRvXG5leHBvcnQgY29uc3Qgc2VsZWN0U3Vic2NyaXB0aW9uQ2xhaW1zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdEFsbENsYWltc0J5Q2hhbm5lbCxcbiAgc2VsZWN0Q2xhaW1zQnlJZCxcbiAgc2VsZWN0U3Vic2NyaXB0aW9ucyxcbiAgc2VsZWN0VW5yZWFkQnlDaGFubmVsLFxuICAoY2hhbm5lbElkcywgYWxsQ2xhaW1zLCBzYXZlZFN1YnNjcmlwdGlvbnMsIHVucmVhZEJ5Q2hhbm5lbCkgPT4ge1xuICAgIC8vIG5vIGNsYWltcyBsb2FkZWQgeWV0XG4gICAgaWYgKCFPYmplY3Qua2V5cyhjaGFubmVsSWRzKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgZmV0Y2hlZFN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIHNhdmVkU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBsZXQgY2hhbm5lbENsYWltcyA9IFtdO1xuXG4gICAgICAvLyBpZiBzdWJzY3JpYmVkIGNoYW5uZWwgaGFzIGNvbnRlbnRcbiAgICAgIGlmIChjaGFubmVsSWRzW3N1YnNjcmlwdGlvbi51cmldICYmIGNoYW5uZWxJZHNbc3Vic2NyaXB0aW9uLnVyaV1bJzEnXSkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgbmVlZCB0byBiZSBtb3JlIHJvYnVzdCwgd2Ugd2lsbCB3YW50IHRvIGJlIGFibGUgdG8gbG9hZCBtb3JlIHRoYW4gdGhlIGZpcnN0IHBhZ2VcblxuICAgICAgICAvLyBTdHJpcCBvdXQgYW55IGlkcyB0aGF0IHdpbGwgYmUgc2hvd24gYXMgbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBwYWdlT25lQ2hhbm5lbElkcyA9IGNoYW5uZWxJZHNbc3Vic2NyaXB0aW9uLnVyaV1bJzEnXTtcblxuICAgICAgICAvLyB3ZSBoYXZlIHRoZSBjaGFubmVsIGlkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2xhaW1zXG4gICAgICAgIC8vIGxvb3Agb3ZlciB0aGUgbGlzdCBvZiBpZHMgYW5kIGdyYWIgdGhlIGNsYWltXG4gICAgICAgIHBhZ2VPbmVDaGFubmVsSWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyYWJiZWRDbGFpbSA9IGFsbENsYWltc1tpZF07XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB1bnJlYWRCeUNoYW5uZWxbc3Vic2NyaXB0aW9uLnVyaV0gJiZcbiAgICAgICAgICAgIHVucmVhZEJ5Q2hhbm5lbFtzdWJzY3JpcHRpb24udXJpXS51cmlzLnNvbWUodXJpID0+IHVyaS5pbmNsdWRlcyhpZCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBncmFiYmVkQ2xhaW0uaXNOZXcgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoYW5uZWxDbGFpbXMgPSBjaGFubmVsQ2xhaW1zLmNvbmNhdChbZ3JhYmJlZENsYWltXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmZXRjaGVkU3Vic2NyaXB0aW9ucyA9IGZldGNoZWRTdWJzY3JpcHRpb25zLmNvbmNhdChjaGFubmVsQ2xhaW1zKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmZXRjaGVkU3Vic2NyaXB0aW9ucztcbiAgfVxuKTtcblxuLy8gUmV0dXJucyB0cnVlIGlmIGEgdXNlciBpcyBzdWJzY3JpYmVkIHRvIHRoZSBjaGFubmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXJpIHBhc3NlZCBpblxuLy8gQWNjZXB0cyBjb250ZW50IG9yIGNoYW5uZWwgdXJpc1xuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RDaGFubmVsSW5TdWJzY3JpcHRpb25zID0gdXJpID0+XG4gIGNyZWF0ZVNlbGVjdG9yKFxuICAgIHNlbGVjdFN1YnNjcmlwdGlvbnMsXG4gICAgc3Vic2NyaXB0aW9ucyA9PiBzdWJzY3JpcHRpb25zLnNvbWUoc3ViID0+IHN1Yi51cmkgPT09IHVyaSlcbiAgKTtcblxuZXhwb3J0IGNvbnN0IG1ha2VTZWxlY3RJc1N1YnNjcmliZWQgPSB1cmkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoXG4gICAgc2VsZWN0U3Vic2NyaXB0aW9ucyxcbiAgICBtYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpKHVyaSwgdHJ1ZSksXG4gICAgbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksXG4gICAgKHN1YnNjcmlwdGlvbnMsIGNoYW5uZWxVcmksIGNsYWltKSA9PiB7XG4gICAgICBpZiAoY2hhbm5lbFVyaSkge1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9ucy5zb21lKHN1YiA9PiBzdWIudXJpID09PSBjaGFubmVsVXJpKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZ2V0IGEgY2hhbm5lbCB1cmkgZnJvbSB0aGUgY2xhaW0gdXJpLCB0aGUgdXJpIHBhc3NlZCBpbiBtaWdodCBiZSBhIGNoYW5uZWwgYWxyZWFkeVxuICAgICAgbGV0IGlzQ2hhbm5lbDtcbiAgICAgIHRyeSB7XG4gICAgICAgICh7IGlzQ2hhbm5lbCB9ID0gcGFyc2VVUkkodXJpKSk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICBpZiAoaXNDaGFubmVsICYmIGNsYWltKSB7XG4gICAgICAgIGNvbnN0IHVyaSA9IGNsYWltLnBlcm1hbmVudF91cmw7XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb25zLnNvbWUoc3ViID0+IHN1Yi51cmkgPT09IHVyaSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG5cbmV4cG9ydCBjb25zdCBtYWtlU2VsZWN0SXNOZXcgPSB1cmkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoXG4gICAgbWFrZVNlbGVjdElzU3Vic2NyaWJlZCh1cmkpLFxuICAgIG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1VcmkodXJpKSxcbiAgICBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsXG4gICAgKGlzU3Vic2NyaWJlZCwgY2hhbm5lbCwgdW5yZWFkQnlDaGFubmVsKSA9PiB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVucmVhZEZvckNoYW5uZWwgPSB1bnJlYWRCeUNoYW5uZWxbYGxicnk6Ly8ke2NoYW5uZWx9YF07XG4gICAgICBpZiAodW5yZWFkRm9yQ2hhbm5lbCkge1xuICAgICAgICByZXR1cm4gdW5yZWFkRm9yQ2hhbm5lbC51cmlzLmluY2x1ZGVzKHVyaSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIElmIHRoZXkgYXJlIHN1YnNjcmliZWQsIGNoZWNrIHRvIHNlZSBpZiB0aGlzIHVyaSBpcyBpbiB0aGUgbGlzdCBvZiB1bnJlYWRzXG4gICAgfVxuICApO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFLQTtBQUVBO0FBRkE7QUFDQTtBQUtBO0FBRUE7QUFGQTtBQUNBO0FBS0E7QUFFQTtBQUZBO0FBSUE7QUFFQTtBQUZBO0FBSUE7QUFJQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBV0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBN0NBO0FBb0RBO0FBRUE7QUFGQTtBQUlBO0FBRUE7QUFGQTtBQUNBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFaQTtBQWdCQTtBQUVBO0FBRkE7QUFDQTtBQUtBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQWRBO0FBbUJBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQXZCQTtBQTBCQTtBQXBEQTtBQUNBO0FBd0RBO0FBQUE7QUFHQTtBQUhBO0FBQUE7QUFDQTtBQU1BO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQTFCQTtBQTZCQTtBQTFDQTtBQStDQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUhBO0FBQUE7QUFNQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQUFBO0FBeUJBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/redux/selectors/subscriptions.js\n"); - -/***/ }), - -/***/ "../ui/scss/all.scss": -/*!***************************!*\ - !*** ../ui/scss/all.scss ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("\nvar content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/src!../../node_modules/sass-loader/dist/cjs.js!./all.scss */ \"../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/src/index.js!../node_modules/sass-loader/dist/cjs.js!../ui/scss/all.scss\");\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ \"../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvc2Nzcy9hbGwuc2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS9zY3NzL2FsbC5zY3NzP2U2YTgiXSwic291cmNlc0NvbnRlbnQiOlsiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWxsLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSB1bmRlZmluZWQ7XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWxsLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FsbC5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/scss/all.scss\n"); - -/***/ }), - -/***/ "../ui/store.js": -/*!**********************!*\ - !*** ../ui/store.js ***! - \**********************/ -/*! exports provided: store, persistor, history, whiteListedReducers */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"store\", function() { return store; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"persistor\", function() { return persistor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"history\", function() { return history; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"whiteListedReducers\", function() { return whiteListedReducers; });\n/* harmony import */ var constants_action_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/action_types */ \"../ui/constants/action_types.js\");\n/* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux-persist */ \"../node_modules/redux-persist/es/index.js\");\n/* harmony import */ var redux_persist_lib_stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux-persist/lib/stateReconciler/autoMergeLevel2 */ \"../node_modules/redux-persist/lib/stateReconciler/autoMergeLevel2.js\");\n/* harmony import */ var redux_persist_lib_stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(redux_persist_lib_stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var redux_persist_transform_compress__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux-persist-transform-compress */ \"../node_modules/redux-persist-transform-compress/lib/index.js\");\n/* harmony import */ var redux_persist_transform_compress__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(redux_persist_transform_compress__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux-persist-transform-filter */ \"../node_modules/redux-persist-transform-filter/index.js\");\n/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! localforage */ \"../node_modules/localforage/dist/localforage.js\");\n/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! redux */ \"../node_modules/redux/es/index.js\");\n/* harmony import */ var redux_thunk__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux-thunk */ \"../node_modules/redux-thunk/es/index.js\");\n/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! history */ \"../node_modules/history/esm/history.js\");\n/* harmony import */ var connected_react_router__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! connected-react-router */ \"../node_modules/connected-react-router/esm/index.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./reducers */ \"../ui/reducers.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lbryinc */ \"../node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! util/saved-passwords */ \"../ui/util/saved-passwords.js\");\n/* harmony import */ var util_saved_passwords__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var redux_selectors_settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! redux/selectors/settings */ \"../ui/redux/selectors/settings.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_15__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction isFunction(object) {\n return typeof object === 'function';\n}\n\nfunction isNotFunction(object) {\n return !isFunction(object);\n}\n\nfunction createBulkThunkMiddleware() {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (action.type === 'BATCH_ACTIONS') {\n action.actions.filter(isFunction).map(function (actionFn) {\n return actionFn(dispatch, getState);\n });\n }\n\n return next(action);\n };\n };\n };\n}\n\nfunction enableBatching(reducer) {\n return function batchingReducer(state, action) {\n switch (action.type) {\n case 'BATCH_ACTIONS':\n return action.actions.filter(isNotFunction).reduce(batchingReducer, state);\n\n default:\n return reducer(state, action);\n }\n };\n}\n\nvar contentFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('content', ['positions', 'history']);\nvar fileInfoFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('fileInfo', ['fileListPublishedSort', 'fileListDownloadedSort', 'fileListSubscriptionSort']);\nvar appFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('app', ['hasClickedComment', 'searchOptionsExpanded', 'volume', 'muted', 'allowAnalytics', 'welcomeVersion']); // We only need to persist the receiveAddress for the wallet\n\nvar walletFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('wallet', ['receiveAddress']);\nvar searchFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('search', ['options']);\nvar tagsFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('tags', ['followedTags']);\nvar subscriptionsFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('subscriptions', ['subscriptions']);\nvar blockedFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createFilter\"])('blocked', ['blockedChannels']);\nvar settingsFilter = Object(redux_persist_transform_filter__WEBPACK_IMPORTED_MODULE_4__[\"createBlacklistFilter\"])('settings', ['loadedLanguages', 'language']);\nvar whiteListedReducers = ['fileInfo', 'publish', 'wallet', 'tags', 'content', 'app', 'search', 'blocked', 'settings', 'subscriptions'];\nvar transforms = [fileInfoFilter, walletFilter, blockedFilter, tagsFilter, appFilter, searchFilter, tagsFilter, contentFilter, subscriptionsFilter, settingsFilter, redux_persist_transform_compress__WEBPACK_IMPORTED_MODULE_3___default()()];\nvar persistOptions = {\n key: 'v0',\n storage: localforage__WEBPACK_IMPORTED_MODULE_5___default.a,\n stateReconciler: redux_persist_lib_stateReconciler_autoMergeLevel2__WEBPACK_IMPORTED_MODULE_2___default.a,\n whitelist: whiteListedReducers,\n // Order is important. Needs to be compressed last or other transforms can't\n // read the data\n transforms: transforms\n};\nvar history;\nhistory = Object(history__WEBPACK_IMPORTED_MODULE_8__[\"createBrowserHistory\"])();\nvar triggerSharedStateActions = [constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_SUBSCRIBE\"], constants_action_types__WEBPACK_IMPORTED_MODULE_0__[\"CHANNEL_UNSUBSCRIBE\"], lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"ACTIONS\"].TOGGLE_TAG_FOLLOW, lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"ACTIONS\"].TOGGLE_BLOCK_CHANNEL, lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"ACTIONS\"].CREATE_CHANNEL_COMPLETED // Disabled until we can overwrite preferences\n// LBRY_REDUX_ACTIONS.SHARED_PREFERENCE_SET,\n// ACTIONS.SET_WELCOME_VERSION,\n// ACTIONS.SET_ALLOW_ANALYTICS,\n];\n/**\n * source: the reducer name\n * property: the property in the reducer-specific state\n * transform: optional method to modify the value to be stored\n *\n * See https://github.com/lbryio/lbry-redux/blob/master/src/redux/middleware/shared-state.js for the source\n * This is based off v0.1\n * If lbry-redux changes to another version, this code will need to be changed when upgrading\n */\n\nvar sharedStateFilters = {\n tags: {\n source: 'tags',\n property: 'followedTags'\n },\n subscriptions: {\n source: 'subscriptions',\n property: 'subscriptions',\n transform: function transform(value) {\n return value.map(function (_ref2) {\n var uri = _ref2.uri;\n return uri;\n });\n }\n },\n blocked: {\n source: 'blocked',\n property: 'blockedChannels'\n },\n settings: {\n source: 'settings',\n property: 'sharedPreferences'\n },\n app_welcome_version: {\n source: 'app',\n property: 'welcomeVersion'\n },\n sharing_3P: {\n source: 'app',\n property: 'allowAnalytics'\n }\n};\n\nvar sharedStateCb = function sharedStateCb(_ref3) {\n var dispatch = _ref3.dispatch,\n getState = _ref3.getState;\n var state = getState();\n var syncEnabled = Object(redux_selectors_settings__WEBPACK_IMPORTED_MODULE_14__[\"makeSelectClientSetting\"])(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"SETTINGS\"].ENABLE_SYNC)(state);\n var emailVerified = Object(lbryinc__WEBPACK_IMPORTED_MODULE_12__[\"selectUserVerifiedEmail\"])(state);\n\n if (syncEnabled && emailVerified) {\n Object(util_saved_passwords__WEBPACK_IMPORTED_MODULE_13__[\"getSavedPassword\"])().then(function (savedPassword) {\n dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_12__[\"doGetSync\"])(savedPassword));\n });\n }\n};\n\nvar sharedStateMiddleware = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_11__[\"buildSharedStateMiddleware\"])(triggerSharedStateActions, sharedStateFilters, sharedStateCb);\nvar rootReducer = Object(_reducers__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(history);\nvar persistedReducer = Object(redux_persist__WEBPACK_IMPORTED_MODULE_1__[\"persistReducer\"])(persistOptions, rootReducer);\nvar bulkThunk = createBulkThunkMiddleware();\nvar middleware = [sharedStateMiddleware, Object(connected_react_router__WEBPACK_IMPORTED_MODULE_9__[\"routerMiddleware\"])(history), redux_thunk__WEBPACK_IMPORTED_MODULE_7__[\"default\"], bulkThunk];\nvar composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux__WEBPACK_IMPORTED_MODULE_6__[\"compose\"];\nvar store = Object(redux__WEBPACK_IMPORTED_MODULE_6__[\"createStore\"])(enableBatching(persistedReducer), {}, // initial state\ncomposeEnhancers(redux__WEBPACK_IMPORTED_MODULE_6__[\"applyMiddleware\"].apply(void 0, middleware)));\nvar persistor = Object(redux_persist__WEBPACK_IMPORTED_MODULE_1__[\"persistStore\"])(store);\nwindow.persistor = persistor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvc3RvcmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvc3RvcmUuanM/M2Y0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBQ1RJT05TIGZyb20gJ2NvbnN0YW50cy9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgcGVyc2lzdFN0b3JlLCBwZXJzaXN0UmVkdWNlciB9IGZyb20gJ3JlZHV4LXBlcnNpc3QnO1xuaW1wb3J0IGF1dG9NZXJnZUxldmVsMiBmcm9tICdyZWR1eC1wZXJzaXN0L2xpYi9zdGF0ZVJlY29uY2lsZXIvYXV0b01lcmdlTGV2ZWwyJztcbmltcG9ydCBjcmVhdGVDb21wcmVzc29yIGZyb20gJ3JlZHV4LXBlcnNpc3QtdHJhbnNmb3JtLWNvbXByZXNzJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlciwgY3JlYXRlQmxhY2tsaXN0RmlsdGVyIH0gZnJvbSAncmVkdXgtcGVyc2lzdC10cmFuc2Zvcm0tZmlsdGVyJztcbmltcG9ydCBsb2NhbEZvcmFnZSBmcm9tICdsb2NhbGZvcmFnZSc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgYXBwbHlNaWRkbGV3YXJlLCBjb21wb3NlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHRodW5rIGZyb20gJ3JlZHV4LXRodW5rJztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnksIGNyZWF0ZUJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgeyByb3V0ZXJNaWRkbGV3YXJlIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcic7XG5pbXBvcnQgY3JlYXRlUm9vdFJlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBidWlsZFNoYXJlZFN0YXRlTWlkZGxld2FyZSwgQUNUSU9OUyBhcyBMQlJZX1JFRFVYX0FDVElPTlMsIFNFVFRJTkdTIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5pbXBvcnQgeyBkb0dldFN5bmMsIHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsIH0gZnJvbSAnbGJyeWluYyc7XG5pbXBvcnQgeyBnZXRTYXZlZFBhc3N3b3JkIH0gZnJvbSAndXRpbC9zYXZlZC1wYXNzd29yZHMnO1xuaW1wb3J0IHsgbWFrZVNlbGVjdENsaWVudFNldHRpbmcgfSBmcm9tICdyZWR1eC9zZWxlY3RvcnMvc2V0dGluZ3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbml0aWFsVXJsIH0gZnJvbSAndXRpbC91cmwnO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOb3RGdW5jdGlvbihvYmplY3QpIHtcbiAgcmV0dXJuICFpc0Z1bmN0aW9uKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1bGtUaHVua01pZGRsZXdhcmUoKSB7XG4gIHJldHVybiAoeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfSkgPT4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ0JBVENIX0FDVElPTlMnKSB7XG4gICAgICBhY3Rpb24uYWN0aW9ucy5maWx0ZXIoaXNGdW5jdGlvbikubWFwKGFjdGlvbkZuID0+IGFjdGlvbkZuKGRpc3BhdGNoLCBnZXRTdGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbmFibGVCYXRjaGluZyhyZWR1Y2VyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiYXRjaGluZ1JlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0JBVENIX0FDVElPTlMnOlxuICAgICAgICByZXR1cm4gYWN0aW9uLmFjdGlvbnMuZmlsdGVyKGlzTm90RnVuY3Rpb24pLnJlZHVjZShiYXRjaGluZ1JlZHVjZXIsIHN0YXRlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgY29udGVudEZpbHRlciA9IGNyZWF0ZUZpbHRlcignY29udGVudCcsIFsncG9zaXRpb25zJywgJ2hpc3RvcnknXSk7XG5jb25zdCBmaWxlSW5mb0ZpbHRlciA9IGNyZWF0ZUZpbHRlcignZmlsZUluZm8nLCBbXG4gICdmaWxlTGlzdFB1Ymxpc2hlZFNvcnQnLFxuICAnZmlsZUxpc3REb3dubG9hZGVkU29ydCcsXG4gICdmaWxlTGlzdFN1YnNjcmlwdGlvblNvcnQnLFxuXSk7XG5jb25zdCBhcHBGaWx0ZXIgPSBjcmVhdGVGaWx0ZXIoJ2FwcCcsIFtcbiAgJ2hhc0NsaWNrZWRDb21tZW50JyxcbiAgJ3NlYXJjaE9wdGlvbnNFeHBhbmRlZCcsXG4gICd2b2x1bWUnLFxuICAnbXV0ZWQnLFxuICAnYWxsb3dBbmFseXRpY3MnLFxuICAnd2VsY29tZVZlcnNpb24nLFxuXSk7XG4vLyBXZSBvbmx5IG5lZWQgdG8gcGVyc2lzdCB0aGUgcmVjZWl2ZUFkZHJlc3MgZm9yIHRoZSB3YWxsZXRcbmNvbnN0IHdhbGxldEZpbHRlciA9IGNyZWF0ZUZpbHRlcignd2FsbGV0JywgWydyZWNlaXZlQWRkcmVzcyddKTtcbmNvbnN0IHNlYXJjaEZpbHRlciA9IGNyZWF0ZUZpbHRlcignc2VhcmNoJywgWydvcHRpb25zJ10pO1xuY29uc3QgdGFnc0ZpbHRlciA9IGNyZWF0ZUZpbHRlcigndGFncycsIFsnZm9sbG93ZWRUYWdzJ10pO1xuY29uc3Qgc3Vic2NyaXB0aW9uc0ZpbHRlciA9IGNyZWF0ZUZpbHRlcignc3Vic2NyaXB0aW9ucycsIFsnc3Vic2NyaXB0aW9ucyddKTtcbmNvbnN0IGJsb2NrZWRGaWx0ZXIgPSBjcmVhdGVGaWx0ZXIoJ2Jsb2NrZWQnLCBbJ2Jsb2NrZWRDaGFubmVscyddKTtcbmNvbnN0IHNldHRpbmdzRmlsdGVyID0gY3JlYXRlQmxhY2tsaXN0RmlsdGVyKCdzZXR0aW5ncycsIFsnbG9hZGVkTGFuZ3VhZ2VzJywgJ2xhbmd1YWdlJ10pO1xuY29uc3Qgd2hpdGVMaXN0ZWRSZWR1Y2VycyA9IFtcbiAgJ2ZpbGVJbmZvJyxcbiAgJ3B1Ymxpc2gnLFxuICAnd2FsbGV0JyxcbiAgJ3RhZ3MnLFxuICAnY29udGVudCcsXG4gICdhcHAnLFxuICAnc2VhcmNoJyxcbiAgJ2Jsb2NrZWQnLFxuICAnc2V0dGluZ3MnLFxuICAnc3Vic2NyaXB0aW9ucycsXG5dO1xuXG5jb25zdCB0cmFuc2Zvcm1zID0gW1xuICBmaWxlSW5mb0ZpbHRlcixcbiAgd2FsbGV0RmlsdGVyLFxuICBibG9ja2VkRmlsdGVyLFxuICB0YWdzRmlsdGVyLFxuICBhcHBGaWx0ZXIsXG4gIHNlYXJjaEZpbHRlcixcbiAgdGFnc0ZpbHRlcixcbiAgY29udGVudEZpbHRlcixcbiAgc3Vic2NyaXB0aW9uc0ZpbHRlcixcbiAgc2V0dGluZ3NGaWx0ZXIsXG4gIGNyZWF0ZUNvbXByZXNzb3IoKSxcbl07XG5cbmNvbnN0IHBlcnNpc3RPcHRpb25zID0ge1xuICBrZXk6ICd2MCcsXG4gIHN0b3JhZ2U6IGxvY2FsRm9yYWdlLFxuICBzdGF0ZVJlY29uY2lsZXI6IGF1dG9NZXJnZUxldmVsMixcbiAgd2hpdGVsaXN0OiB3aGl0ZUxpc3RlZFJlZHVjZXJzLFxuICAvLyBPcmRlciBpcyBpbXBvcnRhbnQuIE5lZWRzIHRvIGJlIGNvbXByZXNzZWQgbGFzdCBvciBvdGhlciB0cmFuc2Zvcm1zIGNhbid0XG4gIC8vIHJlYWQgdGhlIGRhdGFcbiAgdHJhbnNmb3Jtcyxcbn07XG5cbmxldCBoaXN0b3J5O1xuaGlzdG9yeSA9IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCk7XG5cbmNvbnN0IHRyaWdnZXJTaGFyZWRTdGF0ZUFjdGlvbnMgPSBbXG4gIEFDVElPTlMuQ0hBTk5FTF9TVUJTQ1JJQkUsXG4gIEFDVElPTlMuQ0hBTk5FTF9VTlNVQlNDUklCRSxcbiAgTEJSWV9SRURVWF9BQ1RJT05TLlRPR0dMRV9UQUdfRk9MTE9XLFxuICBMQlJZX1JFRFVYX0FDVElPTlMuVE9HR0xFX0JMT0NLX0NIQU5ORUwsXG4gIExCUllfUkVEVVhfQUNUSU9OUy5DUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQsXG4gIC8vIERpc2FibGVkIHVudGlsIHdlIGNhbiBvdmVyd3JpdGUgcHJlZmVyZW5jZXNcbiAgLy8gTEJSWV9SRURVWF9BQ1RJT05TLlNIQVJFRF9QUkVGRVJFTkNFX1NFVCxcbiAgLy8gQUNUSU9OUy5TRVRfV0VMQ09NRV9WRVJTSU9OLFxuICAvLyBBQ1RJT05TLlNFVF9BTExPV19BTkFMWVRJQ1MsXG5dO1xuXG4vKipcbiAqIHNvdXJjZTogdGhlIHJlZHVjZXIgbmFtZVxuICogcHJvcGVydHk6IHRoZSBwcm9wZXJ0eSBpbiB0aGUgcmVkdWNlci1zcGVjaWZpYyBzdGF0ZVxuICogdHJhbnNmb3JtOiBvcHRpb25hbCBtZXRob2QgdG8gbW9kaWZ5IHRoZSB2YWx1ZSB0byBiZSBzdG9yZWRcbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5LXJlZHV4L2Jsb2IvbWFzdGVyL3NyYy9yZWR1eC9taWRkbGV3YXJlL3NoYXJlZC1zdGF0ZS5qcyBmb3IgdGhlIHNvdXJjZVxuICogVGhpcyBpcyBiYXNlZCBvZmYgdjAuMVxuICogSWYgbGJyeS1yZWR1eCBjaGFuZ2VzIHRvIGFub3RoZXIgdmVyc2lvbiwgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSBjaGFuZ2VkIHdoZW4gdXBncmFkaW5nXG4gKi9cbmNvbnN0IHNoYXJlZFN0YXRlRmlsdGVycyA9IHtcbiAgdGFnczogeyBzb3VyY2U6ICd0YWdzJywgcHJvcGVydHk6ICdmb2xsb3dlZFRhZ3MnIH0sXG4gIHN1YnNjcmlwdGlvbnM6IHtcbiAgICBzb3VyY2U6ICdzdWJzY3JpcHRpb25zJyxcbiAgICBwcm9wZXJ0eTogJ3N1YnNjcmlwdGlvbnMnLFxuICAgIHRyYW5zZm9ybTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHsgdXJpIH0pID0+IHVyaSk7XG4gICAgfSxcbiAgfSxcbiAgYmxvY2tlZDogeyBzb3VyY2U6ICdibG9ja2VkJywgcHJvcGVydHk6ICdibG9ja2VkQ2hhbm5lbHMnIH0sXG4gIHNldHRpbmdzOiB7IHNvdXJjZTogJ3NldHRpbmdzJywgcHJvcGVydHk6ICdzaGFyZWRQcmVmZXJlbmNlcycgfSxcbiAgYXBwX3dlbGNvbWVfdmVyc2lvbjogeyBzb3VyY2U6ICdhcHAnLCBwcm9wZXJ0eTogJ3dlbGNvbWVWZXJzaW9uJyB9LFxuICBzaGFyaW5nXzNQOiB7IHNvdXJjZTogJ2FwcCcsIHByb3BlcnR5OiAnYWxsb3dBbmFseXRpY3MnIH0sXG59O1xuXG5jb25zdCBzaGFyZWRTdGF0ZUNiID0gKHsgZGlzcGF0Y2gsIGdldFN0YXRlIH0pID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBzeW5jRW5hYmxlZCA9IG1ha2VTZWxlY3RDbGllbnRTZXR0aW5nKFNFVFRJTkdTLkVOQUJMRV9TWU5DKShzdGF0ZSk7XG4gIGNvbnN0IGVtYWlsVmVyaWZpZWQgPSBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbChzdGF0ZSk7XG4gIGlmIChzeW5jRW5hYmxlZCAmJiBlbWFpbFZlcmlmaWVkKSB7XG4gICAgZ2V0U2F2ZWRQYXNzd29yZCgpLnRoZW4oc2F2ZWRQYXNzd29yZCA9PiB7XG4gICAgICBkaXNwYXRjaChkb0dldFN5bmMoc2F2ZWRQYXNzd29yZCkpO1xuICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBzaGFyZWRTdGF0ZU1pZGRsZXdhcmUgPSBidWlsZFNoYXJlZFN0YXRlTWlkZGxld2FyZSh0cmlnZ2VyU2hhcmVkU3RhdGVBY3Rpb25zLCBzaGFyZWRTdGF0ZUZpbHRlcnMsIHNoYXJlZFN0YXRlQ2IpO1xuY29uc3Qgcm9vdFJlZHVjZXIgPSBjcmVhdGVSb290UmVkdWNlcihoaXN0b3J5KTtcbmNvbnN0IHBlcnNpc3RlZFJlZHVjZXIgPSBwZXJzaXN0UmVkdWNlcihwZXJzaXN0T3B0aW9ucywgcm9vdFJlZHVjZXIpO1xuY29uc3QgYnVsa1RodW5rID0gY3JlYXRlQnVsa1RodW5rTWlkZGxld2FyZSgpO1xuY29uc3QgbWlkZGxld2FyZSA9IFtzaGFyZWRTdGF0ZU1pZGRsZXdhcmUsIHJvdXRlck1pZGRsZXdhcmUoaGlzdG9yeSksIHRodW5rLCBidWxrVGh1bmtdO1xuY29uc3QgY29tcG9zZUVuaGFuY2VycyA9IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gfHwgY29tcG9zZTtcbmNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmUoXG4gIGVuYWJsZUJhdGNoaW5nKHBlcnNpc3RlZFJlZHVjZXIpLFxuICB7fSwgLy8gaW5pdGlhbCBzdGF0ZVxuICBjb21wb3NlRW5oYW5jZXJzKGFwcGx5TWlkZGxld2FyZSguLi5taWRkbGV3YXJlKSlcbik7XG5cbmNvbnN0IHBlcnNpc3RvciA9IHBlcnNpc3RTdG9yZShzdG9yZSk7XG53aW5kb3cucGVyc2lzdG9yID0gcGVyc2lzdG9yO1xuXG5leHBvcnQgeyBzdG9yZSwgcGVyc2lzdG9yLCBoaXN0b3J5LCB3aGl0ZUxpc3RlZFJlZHVjZXJzIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFEQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFUQTtBQVlBOzs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUxBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFaQTtBQUNBO0FBY0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/store.js\n"); - -/***/ }), - -/***/ "../ui/util/autoLaunch.js": -/*!********************************!*\ - !*** ../ui/util/autoLaunch.js ***! - \********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9hdXRvTGF1bmNoLmpzLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/autoLaunch.js\n"); - -/***/ }), - -/***/ "../ui/util/context-menu.js": -/*!**********************************!*\ - !*** ../ui/util/context-menu.js ***! - \**********************************/ -/*! exports provided: openContextMenu, openEditorMenu, openSnippetMenu, openCopyLinkMenu, stopContextMenu */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openContextMenu\", function() { return openContextMenu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openEditorMenu\", function() { return openEditorMenu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openSnippetMenu\", function() { return openSnippetMenu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"openCopyLinkMenu\", function() { return openCopyLinkMenu; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stopContextMenu\", function() { return stopContextMenu; });\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! electron */ \"./stubs/electron.js\");\n\nvar isDev = undefined !== 'production';\n\nfunction injectDevelopmentTemplate(event, templates) {\n if (!isDev) return templates;\n var screenX = event.screenX,\n screenY = event.screenY;\n var separator = {\n type: 'separator'\n };\n var developmentTemplateAddition = [{\n label: 'Inspect element',\n accelerator: 'CmdOrCtrl+Shift+I',\n click: function click() {\n electron__WEBPACK_IMPORTED_MODULE_0__[\"remote\"].getCurrentWindow().inspectElement(screenX, screenY);\n }\n }];\n\n if (templates.length > 0) {\n templates.push(separator);\n }\n\n templates.push.apply(templates, developmentTemplateAddition);\n return templates;\n}\n\nfunction openContextMenu(event) {\n var templates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var canEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var _event$target = event.target,\n type = _event$target.type,\n value = _event$target.value;\n var isInput = event.target.matches('input') && (type === 'text' || type === 'number');\n var isTextField = canEdit || isInput || event.target.matches('textarea');\n var isSomethingSelected = selection.length > 0 || window.getSelection().toString().length > 0;\n templates.push({\n label: 'Copy',\n accelerator: 'CmdOrCtrl+C',\n role: 'copy',\n enabled: isSomethingSelected\n }); // If context menu is opened on Input and there is text on the input and something is selected.\n\n var _event$target2 = event.target,\n selectionStart = _event$target2.selectionStart,\n selectionEnd = _event$target2.selectionEnd;\n\n if (!!value && isTextField && selectionStart !== selectionEnd) {\n templates.push({\n label: 'Cut',\n accelerator: 'CmdOrCtrl+X',\n role: 'cut'\n });\n } // If context menu is opened on Input and text is present on clipboard\n\n\n if (electron__WEBPACK_IMPORTED_MODULE_0__[\"clipboard\"].readText().length > 0 && isTextField) {\n templates.push({\n label: 'Paste',\n accelerator: 'CmdOrCtrl+V',\n role: 'paste'\n });\n } // If context menu is opened on Input\n\n\n if (isTextField && value) {\n templates.push({\n label: 'Select All',\n accelerator: 'CmdOrCtrl+A',\n role: 'selectall'\n });\n }\n\n injectDevelopmentTemplate(event, templates);\n electron__WEBPACK_IMPORTED_MODULE_0__[\"remote\"].Menu.buildFromTemplate(templates).popup({});\n} // This function is used for the markdown description on the publish page\n\nfunction openEditorMenu(codeMirror, event) {\n var value = codeMirror.doc.getValue();\n var selection = codeMirror.doc.getSelection();\n var templates = [{\n label: 'Select All',\n accelerator: 'CmdOrCtrl+A',\n role: 'selectall',\n click: function click() {\n codeMirror.execCommand('selectAll');\n },\n enabled: value.length > 0\n }, {\n label: 'Cut',\n accelerator: 'CmdOrCtrl+X',\n role: 'cut',\n enabled: selection.length > 0\n }];\n openContextMenu(event, templates, true, selection);\n} // This function is used for the CodeViewer component\n\nfunction openSnippetMenu(codeMirror, event) {\n var value = codeMirror.doc.getValue();\n var selection = codeMirror.doc.getSelection();\n var templates = [{\n label: 'Select All',\n accelerator: 'CmdOrCtrl+A',\n role: 'selectall',\n click: function click() {\n codeMirror.execCommand('selectAll');\n },\n // Enabled if there is text to select\n enabled: value.length > 0\n }];\n openContextMenu(event, templates, false, selection);\n}\nfunction openCopyLinkMenu(text, event) {\n var templates = [{\n label: 'Copy link',\n click: function click() {\n electron__WEBPACK_IMPORTED_MODULE_0__[\"clipboard\"].writeText(text);\n }\n }];\n openContextMenu(event, templates);\n} // Block context menu\n\nfunction stopContextMenu(event) {\n if (navigator.userAgent.toLowerCase().indexOf(' electron/') > -1) {\n event.preventDefault();\n event.stopPropagation();\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9jb250ZXh0LW1lbnUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9jb250ZXh0LW1lbnUuanM/ODE1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGlwYm9hcmQsIHJlbW90ZSB9IGZyb20gJ2VsZWN0cm9uJztcbmNvbnN0IGlzRGV2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcblxuZnVuY3Rpb24gaW5qZWN0RGV2ZWxvcG1lbnRUZW1wbGF0ZShldmVudCwgdGVtcGxhdGVzKSB7XG4gIGlmICghaXNEZXYpIHJldHVybiB0ZW1wbGF0ZXM7XG4gIGNvbnN0IHsgc2NyZWVuWCwgc2NyZWVuWSB9ID0gZXZlbnQ7XG4gIGNvbnN0IHNlcGFyYXRvciA9IHsgdHlwZTogJ3NlcGFyYXRvcicgfTtcbiAgY29uc3QgZGV2ZWxvcG1lbnRUZW1wbGF0ZUFkZGl0aW9uID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnSW5zcGVjdCBlbGVtZW50JyxcbiAgICAgIGFjY2VsZXJhdG9yOiAnQ21kT3JDdHJsK1NoaWZ0K0knLFxuICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5pbnNwZWN0RWxlbWVudChzY3JlZW5YLCBzY3JlZW5ZKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbiAgaWYgKHRlbXBsYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgdGVtcGxhdGVzLnB1c2goc2VwYXJhdG9yKTtcbiAgfVxuICB0ZW1wbGF0ZXMucHVzaCguLi5kZXZlbG9wbWVudFRlbXBsYXRlQWRkaXRpb24pO1xuICByZXR1cm4gdGVtcGxhdGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BlbkNvbnRleHRNZW51KGV2ZW50LCB0ZW1wbGF0ZXMgPSBbXSwgY2FuRWRpdCA9IGZhbHNlLCBzZWxlY3Rpb24gPSAnJykge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBldmVudC50YXJnZXQ7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQnKSAmJiAodHlwZSA9PT0gJ3RleHQnIHx8IHR5cGUgPT09ICdudW1iZXInKTtcbiAgY29uc3QgaXNUZXh0RmllbGQgPSBjYW5FZGl0IHx8IGlzSW5wdXQgfHwgZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ3RleHRhcmVhJyk7XG4gIGNvbnN0IGlzU29tZXRoaW5nU2VsZWN0ZWQgPSBzZWxlY3Rpb24ubGVuZ3RoID4gMCB8fCB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGggPiAwO1xuXG4gIHRlbXBsYXRlcy5wdXNoKHtcbiAgICBsYWJlbDogJ0NvcHknLFxuICAgIGFjY2VsZXJhdG9yOiAnQ21kT3JDdHJsK0MnLFxuICAgIHJvbGU6ICdjb3B5JyxcbiAgICBlbmFibGVkOiBpc1NvbWV0aGluZ1NlbGVjdGVkLFxuICB9KTtcblxuICAvLyBJZiBjb250ZXh0IG1lbnUgaXMgb3BlbmVkIG9uIElucHV0IGFuZCB0aGVyZSBpcyB0ZXh0IG9uIHRoZSBpbnB1dCBhbmQgc29tZXRoaW5nIGlzIHNlbGVjdGVkLlxuICBjb25zdCB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgfSA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEhdmFsdWUgJiYgaXNUZXh0RmllbGQgJiYgc2VsZWN0aW9uU3RhcnQgIT09IHNlbGVjdGlvbkVuZCkge1xuICAgIHRlbXBsYXRlcy5wdXNoKHsgbGFiZWw6ICdDdXQnLCBhY2NlbGVyYXRvcjogJ0NtZE9yQ3RybCtYJywgcm9sZTogJ2N1dCcgfSk7XG4gIH1cblxuICAvLyBJZiBjb250ZXh0IG1lbnUgaXMgb3BlbmVkIG9uIElucHV0IGFuZCB0ZXh0IGlzIHByZXNlbnQgb24gY2xpcGJvYXJkXG4gIGlmIChjbGlwYm9hcmQucmVhZFRleHQoKS5sZW5ndGggPiAwICYmIGlzVGV4dEZpZWxkKSB7XG4gICAgdGVtcGxhdGVzLnB1c2goe1xuICAgICAgbGFiZWw6ICdQYXN0ZScsXG4gICAgICBhY2NlbGVyYXRvcjogJ0NtZE9yQ3RybCtWJyxcbiAgICAgIHJvbGU6ICdwYXN0ZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBJZiBjb250ZXh0IG1lbnUgaXMgb3BlbmVkIG9uIElucHV0XG4gIGlmIChpc1RleHRGaWVsZCAmJiB2YWx1ZSkge1xuICAgIHRlbXBsYXRlcy5wdXNoKHtcbiAgICAgIGxhYmVsOiAnU2VsZWN0IEFsbCcsXG4gICAgICBhY2NlbGVyYXRvcjogJ0NtZE9yQ3RybCtBJyxcbiAgICAgIHJvbGU6ICdzZWxlY3RhbGwnLFxuICAgIH0pO1xuICB9XG5cbiAgaW5qZWN0RGV2ZWxvcG1lbnRUZW1wbGF0ZShldmVudCwgdGVtcGxhdGVzKTtcbiAgcmVtb3RlLk1lbnUuYnVpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVzKS5wb3B1cCh7fSk7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIG1hcmtkb3duIGRlc2NyaXB0aW9uIG9uIHRoZSBwdWJsaXNoIHBhZ2VcbmV4cG9ydCBmdW5jdGlvbiBvcGVuRWRpdG9yTWVudShjb2RlTWlycm9yLCBldmVudCkge1xuICBjb25zdCB2YWx1ZSA9IGNvZGVNaXJyb3IuZG9jLmdldFZhbHVlKCk7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IGNvZGVNaXJyb3IuZG9jLmdldFNlbGVjdGlvbigpO1xuICBjb25zdCB0ZW1wbGF0ZXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdTZWxlY3QgQWxsJyxcbiAgICAgIGFjY2VsZXJhdG9yOiAnQ21kT3JDdHJsK0EnLFxuICAgICAgcm9sZTogJ3NlbGVjdGFsbCcsXG4gICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnKTtcbiAgICAgIH0sXG4gICAgICBlbmFibGVkOiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdDdXQnLFxuICAgICAgYWNjZWxlcmF0b3I6ICdDbWRPckN0cmwrWCcsXG4gICAgICByb2xlOiAnY3V0JyxcbiAgICAgIGVuYWJsZWQ6IHNlbGVjdGlvbi5sZW5ndGggPiAwLFxuICAgIH0sXG4gIF07XG4gIG9wZW5Db250ZXh0TWVudShldmVudCwgdGVtcGxhdGVzLCB0cnVlLCBzZWxlY3Rpb24pO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBDb2RlVmlld2VyIGNvbXBvbmVudFxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5TbmlwcGV0TWVudShjb2RlTWlycm9yLCBldmVudCkge1xuICBjb25zdCB2YWx1ZSA9IGNvZGVNaXJyb3IuZG9jLmdldFZhbHVlKCk7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IGNvZGVNaXJyb3IuZG9jLmdldFNlbGVjdGlvbigpO1xuICBjb25zdCB0ZW1wbGF0ZXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdTZWxlY3QgQWxsJyxcbiAgICAgIGFjY2VsZXJhdG9yOiAnQ21kT3JDdHJsK0EnLFxuICAgICAgcm9sZTogJ3NlbGVjdGFsbCcsXG4gICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnKTtcbiAgICAgIH0sXG4gICAgICAvLyBFbmFibGVkIGlmIHRoZXJlIGlzIHRleHQgdG8gc2VsZWN0XG4gICAgICBlbmFibGVkOiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgIH0sXG4gIF07XG4gIG9wZW5Db250ZXh0TWVudShldmVudCwgdGVtcGxhdGVzLCBmYWxzZSwgc2VsZWN0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Db3B5TGlua01lbnUodGV4dCwgZXZlbnQpIHtcbiAgY29uc3QgdGVtcGxhdGVzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnQ29weSBsaW5rJyxcbiAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgIGNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG4gIG9wZW5Db250ZXh0TWVudShldmVudCwgdGVtcGxhdGVzKTtcbn1cblxuLy8gQmxvY2sgY29udGV4dCBtZW51XG5leHBvcnQgZnVuY3Rpb24gc3RvcENvbnRleHRNZW51KGV2ZW50KSB7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignIGVsZWN0cm9uLycpID4gLTEpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFQQTtBQUFBO0FBQUE7QUFDQTtBQWNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWhCQTtBQUNBO0FBQ0E7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBckJBO0FBQ0E7QUFDQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBUkE7QUFXQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/util/context-menu.js\n"); - -/***/ }), - -/***/ "../ui/util/detect-typing.js": -/*!***********************************!*\ - !*** ../ui/util/detect-typing.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isUserTyping; });\n// A simple function to detect if a user is typing:\n// useful when handling shortcut keys.\nfunction isUserTyping() {\n var activeElement = document.activeElement;\n\n if (activeElement) {\n var elementType = activeElement.tagName.toLowerCase();\n return elementType === 'input' || elementType === 'textarea';\n }\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9kZXRlY3QtdHlwaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3V0aWwvZGV0ZWN0LXR5cGluZy5qcz9hOTJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEEgc2ltcGxlIGZ1bmN0aW9uIHRvIGRldGVjdCBpZiBhIHVzZXIgaXMgdHlwaW5nOlxuLy8gdXNlZnVsIHdoZW4gaGFuZGxpbmcgc2hvcnRjdXQga2V5cy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNVc2VyVHlwaW5nKCkge1xuICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gYWN0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGVsZW1lbnRUeXBlID09PSAnaW5wdXQnIHx8IGVsZW1lbnRUeXBlID09PSAndGV4dGFyZWEnO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/detect-typing.js\n"); - -/***/ }), - -/***/ "../ui/util/enhanced-layout.js": -/*!*************************************!*\ - !*** ../ui/util/enhanced-layout.js ***! - \*************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return useKonamiListener; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\nfunction useKonamiListener() {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isActive = _useState2[0],\n setIsActive = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var listener;\n\n if (!listener) {\n listener = new Konami(function () {\n return setIsActive(!isActive);\n });\n }\n\n return function () {\n listener = null;\n };\n }, [isActive]);\n return isActive;\n}\n/* eslint-disable */\n\n/*\n * Konami-JS ~\n * :: Now with support for touch events and multiple instances for\n * :: those situations that call for multiple easter eggs!\n * Code: https://github.com/snaptortoise/konami-js\n * Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)\n * Version: 1.6.2 (7/17/2018)\n * Licensed under the MIT License (http://opensource.org/licenses/MIT)\n * Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1+ and Android\n */\n\nvar Konami = function Konami(callback) {\n var konami = {\n addEvent: function addEvent(obj, type, fn, ref_obj) {\n if (obj.addEventListener) obj.addEventListener(type, fn, false);else if (obj.attachEvent) {\n // IE\n obj['e' + type + fn] = fn;\n\n obj[type + fn] = function () {\n obj['e' + type + fn](window.event, ref_obj);\n };\n\n obj.attachEvent('on' + type, obj[type + fn]);\n }\n },\n removeEvent: function removeEvent(obj, eventName, eventCallback) {\n if (obj.removeEventListener) {\n obj.removeEventListener(eventName, eventCallback);\n } else if (obj.attachEvent) {\n obj.detachEvent(eventName);\n }\n },\n input: '',\n pattern: '38384040373937396665',\n keydownHandler: function keydownHandler(e, ref_obj) {\n if (ref_obj) {\n konami = ref_obj;\n } // IE\n\n\n konami.input += e ? e.keyCode : event.keyCode;\n\n if (konami.input.length > konami.pattern.length) {\n konami.input = konami.input.substr(konami.input.length - konami.pattern.length);\n }\n\n if (konami.input === konami.pattern) {\n konami.code(konami._currentLink);\n konami.input = '';\n e.preventDefault();\n return false;\n }\n },\n load: function load(link) {\n this._currentLink = link;\n this.addEvent(document, 'keydown', this.keydownHandler, this);\n this.iphone.load(link);\n },\n unload: function unload() {\n this.removeEvent(document, 'keydown', this.keydownHandler);\n this.iphone.unload();\n },\n code: function code(link) {\n window.location = link;\n },\n iphone: {\n start_x: 0,\n start_y: 0,\n stop_x: 0,\n stop_y: 0,\n tap: false,\n capture: false,\n orig_keys: '',\n keys: ['UP', 'UP', 'DOWN', 'DOWN', 'LEFT', 'RIGHT', 'LEFT', 'RIGHT', 'TAP', 'TAP'],\n input: [],\n code: function code(link) {\n konami.code(link);\n },\n touchmoveHandler: function touchmoveHandler(e) {\n if (e.touches.length === 1 && konami.iphone.capture === true) {\n var touch = e.touches[0];\n konami.iphone.stop_x = touch.pageX;\n konami.iphone.stop_y = touch.pageY;\n konami.iphone.tap = false;\n konami.iphone.capture = false;\n konami.iphone.check_direction();\n }\n },\n touchendHandler: function touchendHandler() {\n konami.iphone.input.push(konami.iphone.check_direction());\n if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift();\n\n if (konami.iphone.input.length === konami.iphone.keys.length) {\n var match = true;\n\n for (var i = 0; i < konami.iphone.keys.length; i++) {\n if (konami.iphone.input[i] !== konami.iphone.keys[i]) {\n match = false;\n }\n }\n\n if (match) {\n konami.iphone.code(konami._currentLink);\n }\n }\n },\n touchstartHandler: function touchstartHandler(e) {\n konami.iphone.start_x = e.changedTouches[0].pageX;\n konami.iphone.start_y = e.changedTouches[0].pageY;\n konami.iphone.tap = true;\n konami.iphone.capture = true;\n },\n load: function load(link) {\n this.orig_keys = this.keys;\n konami.addEvent(document, 'touchmove', this.touchmoveHandler);\n konami.addEvent(document, 'touchend', this.touchendHandler, false);\n konami.addEvent(document, 'touchstart', this.touchstartHandler);\n },\n unload: function unload() {\n konami.removeEvent(document, 'touchmove', this.touchmoveHandler);\n konami.removeEvent(document, 'touchend', this.touchendHandler);\n konami.removeEvent(document, 'touchstart', this.touchstartHandler);\n },\n check_direction: function check_direction() {\n var x_magnitude = Math.abs(this.start_x - this.stop_x);\n var y_magnitude = Math.abs(this.start_y - this.stop_y);\n var x = this.start_x - this.stop_x < 0 ? 'RIGHT' : 'LEFT';\n var y = this.start_y - this.stop_y < 0 ? 'DOWN' : 'UP';\n var result = x_magnitude > y_magnitude ? x : y;\n result = this.tap === true ? 'TAP' : result;\n return result;\n }\n }\n };\n typeof callback === 'string' && konami.load(callback);\n\n if (typeof callback === 'function') {\n konami.code = callback;\n konami.load();\n }\n\n return konami;\n};\n/* eslint-enable *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9lbmhhbmNlZC1sYXlvdXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9lbmhhbmNlZC1sYXlvdXQuanM/MzlkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VLb25hbWlMaXN0ZW5lcigpIHtcbiAgY29uc3QgW2lzQWN0aXZlLCBzZXRJc0FjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGxpc3RlbmVyO1xuICAgIGlmICghbGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyID0gbmV3IEtvbmFtaSgoKSA9PiBzZXRJc0FjdGl2ZSghaXNBY3RpdmUpKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxpc3RlbmVyID0gbnVsbDtcbiAgICB9O1xuICB9LCBbaXNBY3RpdmVdKTtcblxuICByZXR1cm4gaXNBY3RpdmU7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKlxuICogS29uYW1pLUpTIH5cbiAqIDo6IE5vdyB3aXRoIHN1cHBvcnQgZm9yIHRvdWNoIGV2ZW50cyBhbmQgbXVsdGlwbGUgaW5zdGFuY2VzIGZvclxuICogOjogdGhvc2Ugc2l0dWF0aW9ucyB0aGF0IGNhbGwgZm9yIG11bHRpcGxlIGVhc3RlciBlZ2dzIVxuICogQ29kZTogaHR0cHM6Ly9naXRodWIuY29tL3NuYXB0b3J0b2lzZS9rb25hbWktanNcbiAqIENvcHlyaWdodCAoYykgMjAwOSBHZW9yZ2UgTWFuZGlzIChnZW9yZ2VtYW5kaXMuY29tLCBzbmFwdG9ydG9pc2UuY29tKVxuICogVmVyc2lvbjogMS42LjIgKDcvMTcvMjAxOClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVClcbiAqIFRlc3RlZCBpbjogU2FmYXJpIDQrLCBHb29nbGUgQ2hyb21lIDQrLCBGaXJlZm94IDMrLCBJRTcrLCBNb2JpbGUgU2FmYXJpIDIuMi4xKyBhbmQgQW5kcm9pZFxuICovXG52YXIgS29uYW1pID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIGtvbmFtaSA9IHtcbiAgICBhZGRFdmVudDogZnVuY3Rpb24ob2JqLCB0eXBlLCBmbiwgcmVmX29iaikge1xuICAgICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSBvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpO1xuICAgICAgZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7XG4gICAgICAgIC8vIElFXG4gICAgICAgIG9ialsnZScgKyB0eXBlICsgZm5dID0gZm47XG4gICAgICAgIG9ialt0eXBlICsgZm5dID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgb2JqWydlJyArIHR5cGUgKyBmbl0od2luZG93LmV2ZW50LCByZWZfb2JqKTtcbiAgICAgICAgfTtcbiAgICAgICAgb2JqLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBvYmpbdHlwZSArIGZuXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVFdmVudDogZnVuY3Rpb24ob2JqLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xuICAgICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHtcbiAgICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbnB1dDogJycsXG4gICAgcGF0dGVybjogJzM4Mzg0MDQwMzczOTM3Mzk2NjY1JyxcbiAgICBrZXlkb3duSGFuZGxlcjogZnVuY3Rpb24oZSwgcmVmX29iaikge1xuICAgICAgaWYgKHJlZl9vYmopIHtcbiAgICAgICAga29uYW1pID0gcmVmX29iajtcbiAgICAgIH0gLy8gSUVcbiAgICAgIGtvbmFtaS5pbnB1dCArPSBlID8gZS5rZXlDb2RlIDogZXZlbnQua2V5Q29kZTtcblxuICAgICAgaWYgKGtvbmFtaS5pbnB1dC5sZW5ndGggPiBrb25hbWkucGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAga29uYW1pLmlucHV0ID0ga29uYW1pLmlucHV0LnN1YnN0cihrb25hbWkuaW5wdXQubGVuZ3RoIC0ga29uYW1pLnBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChrb25hbWkuaW5wdXQgPT09IGtvbmFtaS5wYXR0ZXJuKSB7XG4gICAgICAgIGtvbmFtaS5jb2RlKGtvbmFtaS5fY3VycmVudExpbmspO1xuICAgICAgICBrb25hbWkuaW5wdXQgPSAnJztcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbihsaW5rKSB7XG4gICAgICB0aGlzLl9jdXJyZW50TGluayA9IGxpbms7XG4gICAgICB0aGlzLmFkZEV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMua2V5ZG93bkhhbmRsZXIsIHRoaXMpO1xuICAgICAgdGhpcy5pcGhvbmUubG9hZChsaW5rKTtcbiAgICB9LFxuICAgIHVubG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMua2V5ZG93bkhhbmRsZXIpO1xuICAgICAgdGhpcy5pcGhvbmUudW5sb2FkKCk7XG4gICAgfSxcbiAgICBjb2RlOiBmdW5jdGlvbihsaW5rKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24gPSBsaW5rO1xuICAgIH0sXG4gICAgaXBob25lOiB7XG4gICAgICBzdGFydF94OiAwLFxuICAgICAgc3RhcnRfeTogMCxcbiAgICAgIHN0b3BfeDogMCxcbiAgICAgIHN0b3BfeTogMCxcbiAgICAgIHRhcDogZmFsc2UsXG4gICAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICAgIG9yaWdfa2V5czogJycsXG4gICAgICBrZXlzOiBbJ1VQJywgJ1VQJywgJ0RPV04nLCAnRE9XTicsICdMRUZUJywgJ1JJR0hUJywgJ0xFRlQnLCAnUklHSFQnLCAnVEFQJywgJ1RBUCddLFxuICAgICAgaW5wdXQ6IFtdLFxuICAgICAgY29kZTogZnVuY3Rpb24obGluaykge1xuICAgICAgICBrb25hbWkuY29kZShsaW5rKTtcbiAgICAgIH0sXG4gICAgICB0b3VjaG1vdmVIYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAxICYmIGtvbmFtaS5pcGhvbmUuY2FwdHVyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTtcbiAgICAgICAgICBrb25hbWkuaXBob25lLnN0b3BfeCA9IHRvdWNoLnBhZ2VYO1xuICAgICAgICAgIGtvbmFtaS5pcGhvbmUuc3RvcF95ID0gdG91Y2gucGFnZVk7XG4gICAgICAgICAga29uYW1pLmlwaG9uZS50YXAgPSBmYWxzZTtcbiAgICAgICAgICBrb25hbWkuaXBob25lLmNhcHR1cmUgPSBmYWxzZTtcbiAgICAgICAgICBrb25hbWkuaXBob25lLmNoZWNrX2RpcmVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG91Y2hlbmRIYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAga29uYW1pLmlwaG9uZS5pbnB1dC5wdXNoKGtvbmFtaS5pcGhvbmUuY2hlY2tfZGlyZWN0aW9uKCkpO1xuXG4gICAgICAgIGlmIChrb25hbWkuaXBob25lLmlucHV0Lmxlbmd0aCA+IGtvbmFtaS5pcGhvbmUua2V5cy5sZW5ndGgpIGtvbmFtaS5pcGhvbmUuaW5wdXQuc2hpZnQoKTtcblxuICAgICAgICBpZiAoa29uYW1pLmlwaG9uZS5pbnB1dC5sZW5ndGggPT09IGtvbmFtaS5pcGhvbmUua2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga29uYW1pLmlwaG9uZS5rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoa29uYW1pLmlwaG9uZS5pbnB1dFtpXSAhPT0ga29uYW1pLmlwaG9uZS5rZXlzW2ldKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAga29uYW1pLmlwaG9uZS5jb2RlKGtvbmFtaS5fY3VycmVudExpbmspO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvdWNoc3RhcnRIYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIGtvbmFtaS5pcGhvbmUuc3RhcnRfeCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgIGtvbmFtaS5pcGhvbmUuc3RhcnRfeSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIGtvbmFtaS5pcGhvbmUudGFwID0gdHJ1ZTtcbiAgICAgICAga29uYW1pLmlwaG9uZS5jYXB0dXJlID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBsb2FkOiBmdW5jdGlvbihsaW5rKSB7XG4gICAgICAgIHRoaXMub3JpZ19rZXlzID0gdGhpcy5rZXlzO1xuICAgICAgICBrb25hbWkuYWRkRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLnRvdWNobW92ZUhhbmRsZXIpO1xuICAgICAgICBrb25hbWkuYWRkRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMudG91Y2hlbmRIYW5kbGVyLCBmYWxzZSk7XG4gICAgICAgIGtvbmFtaS5hZGRFdmVudChkb2N1bWVudCwgJ3RvdWNoc3RhcnQnLCB0aGlzLnRvdWNoc3RhcnRIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICB1bmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBrb25hbWkucmVtb3ZlRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLnRvdWNobW92ZUhhbmRsZXIpO1xuICAgICAgICBrb25hbWkucmVtb3ZlRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMudG91Y2hlbmRIYW5kbGVyKTtcbiAgICAgICAga29uYW1pLnJlbW92ZUV2ZW50KGRvY3VtZW50LCAndG91Y2hzdGFydCcsIHRoaXMudG91Y2hzdGFydEhhbmRsZXIpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrX2RpcmVjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB4X21hZ25pdHVkZSA9IE1hdGguYWJzKHRoaXMuc3RhcnRfeCAtIHRoaXMuc3RvcF94KTtcbiAgICAgICAgdmFyIHlfbWFnbml0dWRlID0gTWF0aC5hYnModGhpcy5zdGFydF95IC0gdGhpcy5zdG9wX3kpO1xuICAgICAgICB2YXIgeCA9IHRoaXMuc3RhcnRfeCAtIHRoaXMuc3RvcF94IDwgMCA/ICdSSUdIVCcgOiAnTEVGVCc7XG4gICAgICAgIHZhciB5ID0gdGhpcy5zdGFydF95IC0gdGhpcy5zdG9wX3kgPCAwID8gJ0RPV04nIDogJ1VQJztcbiAgICAgICAgdmFyIHJlc3VsdCA9IHhfbWFnbml0dWRlID4geV9tYWduaXR1ZGUgPyB4IDogeTtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy50YXAgPT09IHRydWUgPyAnVEFQJyA6IHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnICYmIGtvbmFtaS5sb2FkKGNhbGxiYWNrKTtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGtvbmFtaS5jb2RlID0gY2FsbGJhY2s7XG4gICAga29uYW1pLmxvYWQoKTtcbiAgfVxuXG4gIHJldHVybiBrb25hbWk7XG59O1xuLyogZXNsaW50LWVuYWJsZSAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFMQTtBQVVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBeENBO0FBMENBO0FBQ0E7QUFDQTtBQTVDQTtBQThDQTtBQUNBO0FBL0NBO0FBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBdUJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF0Q0E7QUF3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVDQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbERBO0FBb0RBO0FBQ0E7QUFDQTtBQUNBO0FBdkRBO0FBeURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpFQTtBQWpEQTtBQXNIQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0hBO0FBK0hBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/enhanced-layout.js\n"); - -/***/ }), - -/***/ "../ui/util/fetch.js": -/*!***************************!*\ - !*** ../ui/util/fetch.js ***! - \***************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return fetchWithTimeout; });\nfunction fetchWithTimeout(ms, promise) {\n return new Promise(function (resolve, reject) {\n var timeoutId = setTimeout(function () {\n reject(new Error('promise timeout'));\n }, ms);\n promise.then(function (res) {\n clearTimeout(timeoutId);\n resolve(res);\n }, function (err) {\n clearTimeout(timeoutId);\n reject(err);\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9mZXRjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS91dGlsL2ZldGNoLmpzP2I4YzMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmV0Y2hXaXRoVGltZW91dChtcywgcHJvbWlzZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSB0aW1lb3V0JykpO1xuICAgIH0sIG1zKTtcbiAgICBwcm9taXNlLnRoZW4oXG4gICAgICByZXMgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFQQTtBQUpBO0FBZUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/util/fetch.js\n"); - -/***/ }), - -/***/ "../ui/util/form-validation.js": -/*!*************************************!*\ - !*** ../ui/util/form-validation.js ***! - \*************************************/ -/*! exports provided: validateSendTx */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process, __) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"validateSendTx\", function() { return validateSendTx; });\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_0__);\n\nvar validateSendTx = function validateSendTx(formValues) {\n var address = formValues.address;\n var errors = {}; // All we need to check is if the address is valid\n // If values are missing, users wont' be able to submit the form\n\n if (!process.env.NO_ADDRESS_VALIDATION && !lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"regexAddress\"].test(address)) {\n errors.address = __('Not a valid LBRY address');\n }\n\n return errors;\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ \"../node_modules/process/browser.js\"), __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9mb3JtLXZhbGlkYXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9mb3JtLXZhbGlkYXRpb24uanM/NjRmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgcmVnZXhBZGRyZXNzIH0gZnJvbSAnbGJyeS1yZWR1eCc7XG5cbnR5cGUgRHJhZnRUeFZhbHVlcyA9IHtcbiAgYWRkcmVzczogc3RyaW5nLFxuICAvLyBhbW91bnQ6IG51bWJlclxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU2VuZFR4ID0gKGZvcm1WYWx1ZXM6IERyYWZ0VHhWYWx1ZXMpID0+IHtcbiAgY29uc3QgeyBhZGRyZXNzIH0gPSBmb3JtVmFsdWVzO1xuICBjb25zdCBlcnJvcnMgPSB7fTtcblxuICAvLyBBbGwgd2UgbmVlZCB0byBjaGVjayBpcyBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZFxuICAvLyBJZiB2YWx1ZXMgYXJlIG1pc3NpbmcsIHVzZXJzIHdvbnQnIGJlIGFibGUgdG8gc3VibWl0IHRoZSBmb3JtXG4gIGlmICghcHJvY2Vzcy5lbnYuTk9fQUREUkVTU19WQUxJREFUSU9OICYmICFyZWdleEFkZHJlc3MudGVzdChhZGRyZXNzKSkge1xuICAgIGVycm9ycy5hZGRyZXNzID0gX18oJ05vdCBhIHZhbGlkIExCUlkgYWRkcmVzcycpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBRUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/util/form-validation.js\n"); - -/***/ }), - -/***/ "../ui/util/full-screen.js": -/*!*********************************!*\ - !*** ../ui/util/full-screen.js ***! - \*********************************/ -/*! exports provided: fullscreenElement, requestFullscreen, exitFullscreen, onFullscreenChange */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fullscreenElement\", function() { return fullscreenElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"requestFullscreen\", function() { return requestFullscreen; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"exitFullscreen\", function() { return exitFullscreen; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"onFullscreenChange\", function() { return onFullscreenChange; });\n/*\n Polyfill functions for the HTML5 fullscreen api:\n https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\n*/\nvar prefixes = {\n exitFullscreen: ['exitFullscreen', 'msExitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen'],\n fullscreenChange: ['fullscreenChange', 'MSFullscreenChange', 'mozfullscreenchange', 'webkitfullscreenchange'],\n fullscreenEnabled: ['fullscreenEnabled', 'msFullscreenEnabled', 'mozFullScreenEnabled', 'webkitFullscreenEnabled'],\n fullscreenElement: ['fullscreenElement', 'msFullscreenElement', 'mozFullScreenElement', 'webkitFullscreenElement'],\n requestFullscreen: ['requestFullscreen', 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen']\n};\n\nvar getPrefix = function getPrefix() {\n var prefixIndex = 0; // validate prefix\n\n prefixes.fullscreenEnabled.some(function (prefix, index) {\n if (document[prefix] || document[prefix] === false) {\n prefixIndex = index;\n return true;\n }\n }); // prefix vendor index\n\n return prefixIndex;\n};\n\nvar fullscreenElement = function fullscreenElement() {\n var index = getPrefix();\n var prefix = prefixes.fullscreenElement[index];\n return document[prefix];\n};\nvar requestFullscreen = function requestFullscreen(elem) {\n var index = getPrefix();\n var prefix = prefixes.requestFullscreen[index];\n elem[prefix] && elem[prefix]();\n};\nvar exitFullscreen = function exitFullscreen() {\n var index = getPrefix();\n var prefix = prefixes.exitFullscreen[index];\n document[prefix] && document[prefix]();\n};\nvar onFullscreenChange = function onFullscreenChange(target, action, callback) {\n var index = getPrefix();\n var prefix = prefixes.fullscreenChange[index];\n target[\"\".concat(action, \"EventListener\")](prefix, callback, false);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9mdWxsLXNjcmVlbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS91dGlsL2Z1bGwtc2NyZWVuLmpzP2MxMjAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgUG9seWZpbGwgZnVuY3Rpb25zIGZvciB0aGUgSFRNTDUgZnVsbHNjcmVlbiBhcGk6XG4gIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GdWxsc2NyZWVuX0FQSVxuKi9cblxuY29uc3QgcHJlZml4ZXMgPSB7XG4gIGV4aXRGdWxsc2NyZWVuOiBbJ2V4aXRGdWxsc2NyZWVuJywgJ21zRXhpdEZ1bGxzY3JlZW4nLCAnbW96Q2FuY2VsRnVsbFNjcmVlbicsICd3ZWJraXRFeGl0RnVsbHNjcmVlbiddLFxuICBmdWxsc2NyZWVuQ2hhbmdlOiBbJ2Z1bGxzY3JlZW5DaGFuZ2UnLCAnTVNGdWxsc2NyZWVuQ2hhbmdlJywgJ21vemZ1bGxzY3JlZW5jaGFuZ2UnLCAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSddLFxuICBmdWxsc2NyZWVuRW5hYmxlZDogWydmdWxsc2NyZWVuRW5hYmxlZCcsICdtc0Z1bGxzY3JlZW5FbmFibGVkJywgJ21vekZ1bGxTY3JlZW5FbmFibGVkJywgJ3dlYmtpdEZ1bGxzY3JlZW5FbmFibGVkJ10sXG4gIGZ1bGxzY3JlZW5FbGVtZW50OiBbJ2Z1bGxzY3JlZW5FbGVtZW50JywgJ21zRnVsbHNjcmVlbkVsZW1lbnQnLCAnbW96RnVsbFNjcmVlbkVsZW1lbnQnLCAnd2Via2l0RnVsbHNjcmVlbkVsZW1lbnQnXSxcbiAgcmVxdWVzdEZ1bGxzY3JlZW46IFsncmVxdWVzdEZ1bGxzY3JlZW4nLCAnbXNSZXF1ZXN0RnVsbHNjcmVlbicsICdtb3pSZXF1ZXN0RnVsbFNjcmVlbicsICd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiddLFxufTtcblxuY29uc3QgZ2V0UHJlZml4ID0gKCkgPT4ge1xuICBsZXQgcHJlZml4SW5kZXggPSAwO1xuICAvLyB2YWxpZGF0ZSBwcmVmaXhcbiAgcHJlZml4ZXMuZnVsbHNjcmVlbkVuYWJsZWQuc29tZSgocHJlZml4LCBpbmRleCkgPT4ge1xuICAgIGlmIChkb2N1bWVudFtwcmVmaXhdIHx8IGRvY3VtZW50W3ByZWZpeF0gPT09IGZhbHNlKSB7XG4gICAgICBwcmVmaXhJbmRleCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgLy8gcHJlZml4IHZlbmRvciBpbmRleFxuICByZXR1cm4gcHJlZml4SW5kZXg7XG59O1xuXG5leHBvcnQgY29uc3QgZnVsbHNjcmVlbkVsZW1lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0UHJlZml4KCk7XG4gIGNvbnN0IHByZWZpeCA9IHByZWZpeGVzLmZ1bGxzY3JlZW5FbGVtZW50W2luZGV4XTtcbiAgcmV0dXJuIGRvY3VtZW50W3ByZWZpeF07XG59O1xuXG5leHBvcnQgY29uc3QgcmVxdWVzdEZ1bGxzY3JlZW4gPSBlbGVtID0+IHtcbiAgY29uc3QgaW5kZXggPSBnZXRQcmVmaXgoKTtcbiAgY29uc3QgcHJlZml4ID0gcHJlZml4ZXMucmVxdWVzdEZ1bGxzY3JlZW5baW5kZXhdO1xuICBlbGVtW3ByZWZpeF0gJiYgZWxlbVtwcmVmaXhdKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZXhpdEZ1bGxzY3JlZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0UHJlZml4KCk7XG4gIGNvbnN0IHByZWZpeCA9IHByZWZpeGVzLmV4aXRGdWxsc2NyZWVuW2luZGV4XTtcbiAgZG9jdW1lbnRbcHJlZml4XSAmJiBkb2N1bWVudFtwcmVmaXhdKCk7XG59O1xuXG5leHBvcnQgY29uc3Qgb25GdWxsc2NyZWVuQ2hhbmdlID0gKHRhcmdldCwgYWN0aW9uLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCBpbmRleCA9IGdldFByZWZpeCgpO1xuICBjb25zdCBwcmVmaXggPSBwcmVmaXhlcy5mdWxsc2NyZWVuQ2hhbmdlW2luZGV4XTtcbiAgdGFyZ2V0W2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0ocHJlZml4LCBjYWxsYmFjaywgZmFsc2UpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQUNBO0FBU0E7QUFWQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/util/full-screen.js\n"); - -/***/ }), - -/***/ "../ui/util/lbrytv.js": -/*!****************************!*\ - !*** ../ui/util/lbrytv.js ***! - \****************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var _require = __webpack_require__(/*! ../../config */ \"../config.js\"),\n URL = _require.URL,\n LBRY_TV_STREAMING_API = _require.LBRY_TV_STREAMING_API;\n\nvar _require2 = __webpack_require__(/*! ../../ui/util/saved-passwords */ \"../ui/util/saved-passwords.js\"),\n getCookie = _require2.getCookie;\n\nvar CONTINENT_COOKIE = 'continent';\n\nfunction generateStreamUrl(claimName, claimId, apiUrl, streamingContinent, useDefaultServer) {\n var prefix = LBRY_TV_STREAMING_API || apiUrl;\n var continent = useDefaultServer ? undefined : streamingContinent || getCookie(CONTINENT_COOKIE);\n\n if (continent && prefix.split('//').length > 1) {\n prefix = prefix.replace('//', '//' + continent + '.');\n }\n\n return \"\".concat(prefix, \"/content/claims/\").concat(claimName, \"/\").concat(claimId, \"/stream\");\n}\n\nfunction generateEmbedUrl(claimName, claimId) {\n return \"\".concat(URL, \"/$/embed/\").concat(claimName, \"/\").concat(claimId);\n}\n\nfunction generateDownloadUrl(claimName, claimId) {\n return \"\".concat(URL, \"/$/download/\").concat(claimName, \"/\").concat(claimId);\n}\n\nfunction generateDirectUrl(claimName, claimId) {\n return \"\".concat(URL, \"/$/stream/\").concat(claimName, \"/\").concat(claimId);\n} // module.exports needed since the web server imports this function\n\n\nmodule.exports = {\n generateStreamUrl: generateStreamUrl,\n generateEmbedUrl: generateEmbedUrl,\n generateDownloadUrl: generateDownloadUrl,\n generateDirectUrl: generateDirectUrl,\n CONTINENT_COOKIE: CONTINENT_COOKIE\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9sYnJ5dHYuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9sYnJ5dHYuanM/ZDRkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IFVSTCwgTEJSWV9UVl9TVFJFQU1JTkdfQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcnKTtcbmNvbnN0IHsgZ2V0Q29va2llIH0gPSByZXF1aXJlKCcuLi8uLi91aS91dGlsL3NhdmVkLXBhc3N3b3JkcycpO1xuXG5jb25zdCBDT05USU5FTlRfQ09PS0lFID0gJ2NvbnRpbmVudCc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RyZWFtVXJsKGNsYWltTmFtZSwgY2xhaW1JZCwgYXBpVXJsLCBzdHJlYW1pbmdDb250aW5lbnQsIHVzZURlZmF1bHRTZXJ2ZXIpIHtcbiAgbGV0IHByZWZpeCA9IExCUllfVFZfU1RSRUFNSU5HX0FQSSB8fCBhcGlVcmw7XG4gIGNvbnN0IGNvbnRpbmVudCA9IHVzZURlZmF1bHRTZXJ2ZXIgPyB1bmRlZmluZWQgOiBzdHJlYW1pbmdDb250aW5lbnQgfHwgZ2V0Q29va2llKENPTlRJTkVOVF9DT09LSUUpO1xuXG4gIGlmIChjb250aW5lbnQgJiYgcHJlZml4LnNwbGl0KCcvLycpLmxlbmd0aCA+IDEpIHtcbiAgICBwcmVmaXggPSBwcmVmaXgucmVwbGFjZSgnLy8nLCAnLy8nICsgY29udGluZW50ICsgJy4nKTtcbiAgfVxuXG4gIHJldHVybiBgJHtwcmVmaXh9L2NvbnRlbnQvY2xhaW1zLyR7Y2xhaW1OYW1lfS8ke2NsYWltSWR9L3N0cmVhbWA7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW1iZWRVcmwoY2xhaW1OYW1lLCBjbGFpbUlkKSB7XG4gIHJldHVybiBgJHtVUkx9LyQvZW1iZWQvJHtjbGFpbU5hbWV9LyR7Y2xhaW1JZH1gO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURvd25sb2FkVXJsKGNsYWltTmFtZSwgY2xhaW1JZCkge1xuICByZXR1cm4gYCR7VVJMfS8kL2Rvd25sb2FkLyR7Y2xhaW1OYW1lfS8ke2NsYWltSWR9YDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3RVcmwoY2xhaW1OYW1lLCBjbGFpbUlkKSB7XG4gIHJldHVybiBgJHtVUkx9LyQvc3RyZWFtLyR7Y2xhaW1OYW1lfS8ke2NsYWltSWR9YDtcbn1cblxuLy8gbW9kdWxlLmV4cG9ydHMgbmVlZGVkIHNpbmNlIHRoZSB3ZWIgc2VydmVyIGltcG9ydHMgdGhpcyBmdW5jdGlvblxubW9kdWxlLmV4cG9ydHMgPSB7IGdlbmVyYXRlU3RyZWFtVXJsLCBnZW5lcmF0ZUVtYmVkVXJsLCBnZW5lcmF0ZURvd25sb2FkVXJsLCBnZW5lcmF0ZURpcmVjdFVybCwgQ09OVElORU5UX0NPT0tJRSB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/util/lbrytv.js\n"); - -/***/ }), - -/***/ "../ui/util/object.js": -/*!****************************!*\ - !*** ../ui/util/object.js ***! - \****************************/ -/*! exports provided: isEmpty */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isEmpty\", function() { return isEmpty; });\nfunction isEmpty(object) {\n return object in [null, undefined] || object.constructor === Object && Object.entries(object).length === 0;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9vYmplY3QuanM/NjFmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNFbXB0eShvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbiBbbnVsbCwgdW5kZWZpbmVkXSB8fCAob2JqZWN0LmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgT2JqZWN0LmVudHJpZXMob2JqZWN0KS5sZW5ndGggPT09IDApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/object.js\n"); - -/***/ }), - -/***/ "../ui/util/parse-data.js": -/*!********************************!*\ - !*** ../ui/util/parse-data.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n} // JSON parser\n\n\nvar parseJson = function parseJson(data) {\n var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var list = data.map(function (item) {\n var temp = {}; // Apply filters\n\n Object.entries(item).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!filters.includes(key)) temp[key] = value;\n });\n return temp;\n }); // Beautify JSON\n\n return JSON.stringify(list, null, '\\t');\n}; // CSV Parser\n// No need for an external module:\n// https://gist.github.com/btzr-io/55c3450ea3d709fc57540e762899fb85\n\n\nvar parseCsv = function parseCsv(data) {\n var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; // Get items for header\n\n var getHeaders = function getHeaders(item) {\n var list = []; // Apply filters\n\n Object.entries(item).forEach(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 1),\n key = _ref4[0];\n\n if (!filters.includes(key)) list.push(key);\n }); // return headers\n\n return list.join(',');\n }; // Get rows content\n\n\n var getData = function getData(list) {\n return list.map(function (item) {\n var row = []; // Apply filters\n\n Object.entries(item).forEach(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n key = _ref6[0],\n value = _ref6[1];\n\n if (!filters.includes(key)) row.push(value);\n }); // return rows\n\n return row.join(',');\n }).join('\\n');\n }; // Return CSV string\n\n\n return \"\".concat(getHeaders(data[0]), \" \\n \").concat(getData(data));\n};\n\nvar parseData = function parseData(data, format) {\n var filters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; // Check for validation\n\n var valid = data && data[0] && format; // Pick a format\n\n var formats = {\n csv: function csv(list) {\n return parseCsv(list, filters);\n },\n json: function json(list) {\n return parseJson(list, filters);\n }\n }; // Return parsed data: JSON || CSV\n\n return valid && formats[format] ? formats[format](data) : undefined;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (parseData);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9wYXJzZS1kYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uL3VpL3V0aWwvcGFyc2UtZGF0YS5qcz9iMWM3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEpTT04gcGFyc2VyXG5jb25zdCBwYXJzZUpzb24gPSAoZGF0YSwgZmlsdGVycyA9IFtdKSA9PiB7XG4gIGNvbnN0IGxpc3QgPSBkYXRhLm1hcChpdGVtID0+IHtcbiAgICBjb25zdCB0ZW1wID0ge307XG4gICAgLy8gQXBwbHkgZmlsdGVyc1xuICAgIE9iamVjdC5lbnRyaWVzKGl0ZW0pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKCFmaWx0ZXJzLmluY2x1ZGVzKGtleSkpIHRlbXBba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZW1wO1xuICB9KTtcbiAgLy8gQmVhdXRpZnkgSlNPTlxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobGlzdCwgbnVsbCwgJ1xcdCcpO1xufTtcblxuLy8gQ1NWIFBhcnNlclxuLy8gTm8gbmVlZCBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlOlxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYnR6ci1pby81NWMzNDUwZWEzZDcwOWZjNTc1NDBlNzYyODk5ZmI4NVxuY29uc3QgcGFyc2VDc3YgPSAoZGF0YSwgZmlsdGVycyA9IFtdKSA9PiB7XG4gIC8vIEdldCBpdGVtcyBmb3IgaGVhZGVyXG4gIGNvbnN0IGdldEhlYWRlcnMgPSBpdGVtID0+IHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgLy8gQXBwbHkgZmlsdGVyc1xuICAgIE9iamVjdC5lbnRyaWVzKGl0ZW0pLmZvckVhY2goKFtrZXldKSA9PiB7XG4gICAgICBpZiAoIWZpbHRlcnMuaW5jbHVkZXMoa2V5KSkgbGlzdC5wdXNoKGtleSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIGhlYWRlcnNcbiAgICByZXR1cm4gbGlzdC5qb2luKCcsJyk7XG4gIH07XG5cbiAgLy8gR2V0IHJvd3MgY29udGVudFxuICBjb25zdCBnZXREYXRhID0gbGlzdCA9PlxuICAgIGxpc3RcbiAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IFtdO1xuICAgICAgICAvLyBBcHBseSBmaWx0ZXJzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGl0ZW0pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmICghZmlsdGVycy5pbmNsdWRlcyhrZXkpKSByb3cucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZXR1cm4gcm93c1xuICAgICAgICByZXR1cm4gcm93LmpvaW4oJywnKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgLy8gUmV0dXJuIENTViBzdHJpbmdcbiAgcmV0dXJuIGAke2dldEhlYWRlcnMoZGF0YVswXSl9IFxcbiAke2dldERhdGEoZGF0YSl9YDtcbn07XG5cbmNvbnN0IHBhcnNlRGF0YSA9IChkYXRhLCBmb3JtYXQsIGZpbHRlcnMgPSBbXSkgPT4ge1xuICAvLyBDaGVjayBmb3IgdmFsaWRhdGlvblxuICBjb25zdCB2YWxpZCA9IGRhdGEgJiYgZGF0YVswXSAmJiBmb3JtYXQ7XG4gIC8vIFBpY2sgYSBmb3JtYXRcbiAgY29uc3QgZm9ybWF0cyA9IHtcbiAgICBjc3Y6IGxpc3QgPT4gcGFyc2VDc3YobGlzdCwgZmlsdGVycyksXG4gICAganNvbjogbGlzdCA9PiBwYXJzZUpzb24obGlzdCwgZmlsdGVycyksXG4gIH07XG5cbiAgLy8gUmV0dXJuIHBhcnNlZCBkYXRhOiBKU09OIHx8IENTVlxuICByZXR1cm4gdmFsaWQgJiYgZm9ybWF0c1tmb3JtYXRdID8gZm9ybWF0c1tmb3JtYXRdKGRhdGEpIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VEYXRhO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBUEE7QUFDQTtBQVNBO0FBVkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFUQTtBQUNBO0FBQ0E7QUFXQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUpBO0FBQ0E7QUFNQTtBQVJBO0FBZEE7QUFDQTtBQUNBO0FBeUJBO0FBM0JBO0FBQ0E7QUE2QkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQURBO0FBRUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUtBO0FBVkE7QUFDQTtBQVlBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/parse-data.js\n"); - -/***/ }), - -/***/ "../ui/util/redux-utils.js": -/*!*********************************!*\ - !*** ../ui/util/redux-utils.js ***! - \*********************************/ -/*! exports provided: handleActions */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"handleActions\", function() { return handleActions; });\n// util for creating reducers\n// based off of redux-actions\n// https://redux-actions.js.org/docs/api/handleAction.html#handleactions\nvar handleActions = function handleActions(actionMap, defaultState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = actionMap[action.type];\n\n if (handler) {\n var newState = handler(state, action);\n return Object.assign({}, state, newState);\n } // just return the original state if no handler\n // returning a copy here breaks redux-persist\n\n\n return state;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9yZWR1eC11dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS91dGlsL3JlZHV4LXV0aWxzLmpzP2ZhZWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdXRpbCBmb3IgY3JlYXRpbmcgcmVkdWNlcnNcbi8vIGJhc2VkIG9mZiBvZiByZWR1eC1hY3Rpb25zXG4vLyBodHRwczovL3JlZHV4LWFjdGlvbnMuanMub3JnL2RvY3MvYXBpL2hhbmRsZUFjdGlvbi5odG1sI2hhbmRsZWFjdGlvbnNcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUFjdGlvbnMgPSAoYWN0aW9uTWFwLCBkZWZhdWx0U3RhdGUpID0+IChzdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBhY3Rpb25NYXBbYWN0aW9uLnR5cGVdO1xuXG4gIGlmIChoYW5kbGVyKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgLy8ganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGhhbmRsZXJcbiAgLy8gcmV0dXJuaW5nIGEgY29weSBoZXJlIGJyZWFrcyByZWR1eC1wZXJzaXN0XG4gIHJldHVybiBzdGF0ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQURBO0FBVkE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/util/redux-utils.js\n"); - -/***/ }), - -/***/ "../ui/util/remark-lbry.js": -/*!*********************************!*\ - !*** ../ui/util/remark-lbry.js ***! - \*********************************/ -/*! exports provided: formatedLinks, inlineLinks */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatedLinks\", function() { return formatedLinks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inlineLinks\", function() { return inlineLinks; });\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lbry-redux */ \"../node_modules/lbry-redux/dist/bundle.es.js\");\n/* harmony import */ var lbry_redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lbry_redux__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var unist_util_visit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! unist-util-visit */ \"../node_modules/unist-util-visit/index.js\");\n/* harmony import */ var unist_util_visit__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(unist_util_visit__WEBPACK_IMPORTED_MODULE_1__);\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n\n\nvar protocol = 'lbry://';\nvar uriRegex = /(lbry:\\/\\/)[^\\s\"]*[^)]/g;\nvar mentionToken = '@';\nvar mentionTokenCode = 64; // @\n\nvar mentionRegex = /@[^\\s()\"]*/gm;\nvar invalidRegex = /[-_.+=?!@#$%^&*:;,{}<>\\w/\\\\]/; // Find channel mention\n\nfunction locateMention(value, fromIndex) {\n var index = value.indexOf(mentionToken, fromIndex); // Skip invalid mention\n\n if (index > 0 && invalidRegex.test(value.charAt(index - 1))) {\n return locateMention(value, index + 1);\n }\n\n return index;\n} // Find claim url\n\n\nfunction locateURI(value, fromIndex) {\n var index = value.indexOf(protocol, fromIndex); // Skip invalid uri\n\n if (index > 0 && invalidRegex.test(value.charAt(index - 1))) {\n return locateMention(value, index + 1);\n }\n\n return index;\n} // Generate a valid markdown link\n\n\nvar createURI = function createURI(text, uri) {\n var embed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return {\n type: 'link',\n url: (uri.startsWith(protocol) ? '' : protocol) + uri,\n data: {\n // Custom attribute\n hProperties: {\n embed: embed\n }\n },\n children: [{\n type: 'text',\n value: text\n }]\n };\n};\n\nvar validateURI = function validateURI(match, eat, self) {\n if (match) {\n try {\n var text = match[0];\n var uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"parseURI\"])(text);\n var isValid = uri && uri.claimName;\n var isChannel = uri.isChannel && uri.path === uri.claimName;\n\n if (isValid) {\n // Create channel link\n if (isChannel) {\n return eat(text)(createURI(uri.claimName, text, false));\n } // Create claim link\n\n\n return eat(text)(createURI(text, text, true));\n }\n } catch (err) {// Silent errors: console.error(err)\n }\n }\n}; // Generate a markdown link from channel name\n\n\nfunction tokenizeMention(eat, value, silent) {\n if (silent) {\n return true;\n }\n\n var match = value.match(mentionRegex);\n return validateURI(match, eat, self);\n} // Generate a markdown link from lbry url\n\n\nfunction tokenizeURI(eat, value, silent) {\n if (silent) {\n return true;\n }\n\n var match = value.match(uriRegex);\n return validateURI(match, eat);\n} // Configure tokenizer for lbry urls\n\n\ntokenizeURI.locator = locateURI;\ntokenizeURI.notInList = true;\ntokenizeURI.notInLink = true;\ntokenizeURI.notInBlock = true; // Configure tokenizer for lbry channels\n\ntokenizeMention.locator = locateMention;\ntokenizeMention.notInList = true;\ntokenizeMention.notInLink = true;\ntokenizeMention.notInBlock = true;\n\nvar visitor = function visitor(node, index, parent) {\n if (node.type === 'link' && parent && parent.type === 'paragraph') {\n try {\n var uri = Object(lbry_redux__WEBPACK_IMPORTED_MODULE_0__[\"parseURI\"])(node.url);\n var isValid = uri && uri.claimName;\n var isChannel = uri.isChannel && uri.path === uri.claimName;\n\n if (isValid && !isChannel) {\n if (!node.data || !node.data.hProperties) {\n // Create new node data\n node.data = {\n hProperties: {\n embed: true\n }\n };\n } else if (node.data.hProperties) {\n // Don't overwrite current attributes\n node.data.hProperties = _objectSpread({\n embed: true\n }, node.data.hProperties);\n }\n }\n } catch (err) {// Silent errors: console.error(err)\n }\n }\n}; // transform\n\n\nvar transform = function transform(tree) {\n unist_util_visit__WEBPACK_IMPORTED_MODULE_1___default()(tree, ['link'], visitor);\n};\n\nvar formatedLinks = function formatedLinks() {\n return transform;\n}; // Main module\n\nfunction inlineLinks() {\n var Parser = this.Parser;\n var tokenizers = Parser.prototype.inlineTokenizers;\n var methods = Parser.prototype.inlineMethods; // Add an inline tokenizer (defined in the following example).\n\n tokenizers.uri = tokenizeURI;\n tokenizers.mention = tokenizeMention; // Run it just before `text`.\n\n methods.splice(methods.indexOf('text'), 0, 'uri');\n methods.splice(methods.indexOf('text'), 0, 'mention');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9yZW1hcmstbGJyeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS91dGlsL3JlbWFyay1sYnJ5LmpzP2I0NWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VVUkkgfSBmcm9tICdsYnJ5LXJlZHV4JztcbmltcG9ydCB2aXNpdCBmcm9tICd1bmlzdC11dGlsLXZpc2l0JztcblxuY29uc3QgcHJvdG9jb2wgPSAnbGJyeTovLyc7XG5jb25zdCB1cmlSZWdleCA9IC8obGJyeTpcXC9cXC8pW15cXHNcIl0qW14pXS9nO1xuXG5jb25zdCBtZW50aW9uVG9rZW4gPSAnQCc7XG5jb25zdCBtZW50aW9uVG9rZW5Db2RlID0gNjQ7IC8vIEBcbmNvbnN0IG1lbnRpb25SZWdleCA9IC9AW15cXHMoKVwiXSovZ207XG5cbmNvbnN0IGludmFsaWRSZWdleCA9IC9bLV8uKz0/IUAjJCVeJio6Oyx7fTw+XFx3L1xcXFxdLztcblxuLy8gRmluZCBjaGFubmVsIG1lbnRpb25cbmZ1bmN0aW9uIGxvY2F0ZU1lbnRpb24odmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSB2YWx1ZS5pbmRleE9mKG1lbnRpb25Ub2tlbiwgZnJvbUluZGV4KTtcblxuICAvLyBTa2lwIGludmFsaWQgbWVudGlvblxuICBpZiAoaW5kZXggPiAwICYmIGludmFsaWRSZWdleC50ZXN0KHZhbHVlLmNoYXJBdChpbmRleCAtIDEpKSkge1xuICAgIHJldHVybiBsb2NhdGVNZW50aW9uKHZhbHVlLCBpbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vLyBGaW5kIGNsYWltIHVybFxuZnVuY3Rpb24gbG9jYXRlVVJJKHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZihwcm90b2NvbCwgZnJvbUluZGV4KTtcblxuICAvLyBTa2lwIGludmFsaWQgdXJpXG4gIGlmIChpbmRleCA+IDAgJiYgaW52YWxpZFJlZ2V4LnRlc3QodmFsdWUuY2hhckF0KGluZGV4IC0gMSkpKSB7XG4gICAgcmV0dXJuIGxvY2F0ZU1lbnRpb24odmFsdWUsIGluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8vIEdlbmVyYXRlIGEgdmFsaWQgbWFya2Rvd24gbGlua1xuY29uc3QgY3JlYXRlVVJJID0gKHRleHQsIHVyaSwgZW1iZWQgPSBmYWxzZSkgPT4gKHtcbiAgdHlwZTogJ2xpbmsnLFxuICB1cmw6ICh1cmkuc3RhcnRzV2l0aChwcm90b2NvbCkgPyAnJyA6IHByb3RvY29sKSArIHVyaSxcbiAgZGF0YToge1xuICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVcbiAgICBoUHJvcGVydGllczogeyBlbWJlZCB9LFxuICB9LFxuICBjaGlsZHJlbjogW3sgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGV4dCB9XSxcbn0pO1xuXG5jb25zdCB2YWxpZGF0ZVVSSSA9IChtYXRjaCwgZWF0LCBzZWxmKSA9PiB7XG4gIGlmIChtYXRjaCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gbWF0Y2hbMF07XG4gICAgICBjb25zdCB1cmkgPSBwYXJzZVVSSSh0ZXh0KTtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1cmkgJiYgdXJpLmNsYWltTmFtZTtcbiAgICAgIGNvbnN0IGlzQ2hhbm5lbCA9IHVyaS5pc0NoYW5uZWwgJiYgdXJpLnBhdGggPT09IHVyaS5jbGFpbU5hbWU7XG5cbiAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBjaGFubmVsIGxpbmtcbiAgICAgICAgaWYgKGlzQ2hhbm5lbCkge1xuICAgICAgICAgIHJldHVybiBlYXQodGV4dCkoY3JlYXRlVVJJKHVyaS5jbGFpbU5hbWUsIHRleHQsIGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGNsYWltIGxpbmtcbiAgICAgICAgcmV0dXJuIGVhdCh0ZXh0KShjcmVhdGVVUkkodGV4dCwgdGV4dCwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gU2lsZW50IGVycm9yczogY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICB9XG59O1xuXG4vLyBHZW5lcmF0ZSBhIG1hcmtkb3duIGxpbmsgZnJvbSBjaGFubmVsIG5hbWVcbmZ1bmN0aW9uIHRva2VuaXplTWVudGlvbihlYXQsIHZhbHVlLCBzaWxlbnQpIHtcbiAgaWYgKHNpbGVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaChtZW50aW9uUmVnZXgpO1xuXG4gIHJldHVybiB2YWxpZGF0ZVVSSShtYXRjaCwgZWF0LCBzZWxmKTtcbn1cblxuLy8gR2VuZXJhdGUgYSBtYXJrZG93biBsaW5rIGZyb20gbGJyeSB1cmxcbmZ1bmN0aW9uIHRva2VuaXplVVJJKGVhdCwgdmFsdWUsIHNpbGVudCkge1xuICBpZiAoc2lsZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKHVyaVJlZ2V4KTtcblxuICByZXR1cm4gdmFsaWRhdGVVUkkobWF0Y2gsIGVhdCk7XG59XG5cbi8vIENvbmZpZ3VyZSB0b2tlbml6ZXIgZm9yIGxicnkgdXJsc1xudG9rZW5pemVVUkkubG9jYXRvciA9IGxvY2F0ZVVSSTtcbnRva2VuaXplVVJJLm5vdEluTGlzdCA9IHRydWU7XG50b2tlbml6ZVVSSS5ub3RJbkxpbmsgPSB0cnVlO1xudG9rZW5pemVVUkkubm90SW5CbG9jayA9IHRydWU7XG5cbi8vIENvbmZpZ3VyZSB0b2tlbml6ZXIgZm9yIGxicnkgY2hhbm5lbHNcbnRva2VuaXplTWVudGlvbi5sb2NhdG9yID0gbG9jYXRlTWVudGlvbjtcbnRva2VuaXplTWVudGlvbi5ub3RJbkxpc3QgPSB0cnVlO1xudG9rZW5pemVNZW50aW9uLm5vdEluTGluayA9IHRydWU7XG50b2tlbml6ZU1lbnRpb24ubm90SW5CbG9jayA9IHRydWU7XG5cbmNvbnN0IHZpc2l0b3IgPSAobm9kZSwgaW5kZXgsIHBhcmVudCkgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAnbGluaycgJiYgcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAncGFyYWdyYXBoJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmkgPSBwYXJzZVVSSShub2RlLnVybCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXJpICYmIHVyaS5jbGFpbU5hbWU7XG4gICAgICBjb25zdCBpc0NoYW5uZWwgPSB1cmkuaXNDaGFubmVsICYmIHVyaS5wYXRoID09PSB1cmkuY2xhaW1OYW1lO1xuICAgICAgaWYgKGlzVmFsaWQgJiYgIWlzQ2hhbm5lbCkge1xuICAgICAgICBpZiAoIW5vZGUuZGF0YSB8fCAhbm9kZS5kYXRhLmhQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIG5ldyBub2RlIGRhdGFcbiAgICAgICAgICBub2RlLmRhdGEgPSB7XG4gICAgICAgICAgICBoUHJvcGVydGllczogeyBlbWJlZDogdHJ1ZSB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5kYXRhLmhQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgLy8gRG9uJ3Qgb3ZlcndyaXRlIGN1cnJlbnQgYXR0cmlidXRlc1xuICAgICAgICAgIG5vZGUuZGF0YS5oUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGVtYmVkOiB0cnVlLFxuICAgICAgICAgICAgLi4ubm9kZS5kYXRhLmhQcm9wZXJ0aWVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFNpbGVudCBlcnJvcnM6IGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgfVxufTtcblxuLy8gdHJhbnNmb3JtXG5jb25zdCB0cmFuc2Zvcm0gPSB0cmVlID0+IHtcbiAgdmlzaXQodHJlZSwgWydsaW5rJ10sIHZpc2l0b3IpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdGVkTGlua3MgPSAoKSA9PiB0cmFuc2Zvcm07XG5cbi8vIE1haW4gbW9kdWxlXG5leHBvcnQgZnVuY3Rpb24gaW5saW5lTGlua3MoKSB7XG4gIGNvbnN0IFBhcnNlciA9IHRoaXMuUGFyc2VyO1xuICBjb25zdCB0b2tlbml6ZXJzID0gUGFyc2VyLnByb3RvdHlwZS5pbmxpbmVUb2tlbml6ZXJzO1xuICBjb25zdCBtZXRob2RzID0gUGFyc2VyLnByb3RvdHlwZS5pbmxpbmVNZXRob2RzO1xuXG4gIC8vIEFkZCBhbiBpbmxpbmUgdG9rZW5pemVyIChkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSkuXG4gIHRva2VuaXplcnMudXJpID0gdG9rZW5pemVVUkk7XG4gIHRva2VuaXplcnMubWVudGlvbiA9IHRva2VuaXplTWVudGlvbjtcblxuICAvLyBSdW4gaXQganVzdCBiZWZvcmUgYHRleHRgLlxuICBtZXRob2RzLnNwbGljZShtZXRob2RzLmluZGV4T2YoJ3RleHQnKSwgMCwgJ3VyaScpO1xuICBtZXRob2RzLnNwbGljZShtZXRob2RzLmluZGV4T2YoJ3RleHQnKSwgMCwgJ21lbnRpb24nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBUEE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQWJBO0FBZ0JBO0FBQ0E7QUFuQkE7QUFDQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBakJBO0FBb0JBO0FBQ0E7QUF2QkE7QUFDQTtBQUNBO0FBeUJBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/remark-lbry.js\n"); - -/***/ }), - -/***/ "../ui/util/saved-passwords.js": -/*!*************************************!*\ - !*** ../ui/util/saved-passwords.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar _require = __webpack_require__(/*! ../../config.js */ \"../config.js\"),\n DOMAIN = _require.DOMAIN;\n\nvar AUTH_TOKEN = 'auth_token';\nvar SAVED_PASSWORD = 'saved_password';\nvar DEPRECATED_SAVED_PASSWORD = 'saved-password';\nvar domain = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' ? window.location.hostname : DOMAIN;\nvar isProduction = undefined === 'production';\nvar maxExpiration = 2147483647;\nvar sessionPassword;\n\nfunction setCookie(name, value, expirationDaysOnWeb) {\n var expires = '';\n\n if (expirationDaysOnWeb) {\n var date = new Date();\n date.setTime(date.getTime() + expirationDaysOnWeb * 24 * 60 * 60 * 1000); // If on PC, set to not expire (max)\n\n expires = \"expires=\".concat( true ? date.toUTCString() : undefined, \";\");\n }\n\n var cookie = \"\".concat(name, \"=\").concat(value || '', \"; \").concat(expires, \" path=/; SameSite=None;\");\n\n if (isProduction) {\n cookie += \" domain=\".concat(domain, \"; Secure;\");\n }\n\n document.cookie = cookie;\n}\n\nfunction getCookie(name) {\n var nameEQ = name + '=';\n var cookies = document.cookie.split(';');\n\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i];\n\n while (cookie.charAt(0) === ' ') {\n cookie = cookie.substring(1, cookie.length);\n }\n\n if (cookie.indexOf(nameEQ) === 0) {\n return cookie.substring(nameEQ.length, cookie.length);\n }\n }\n\n return null;\n}\n\nfunction deleteCookie(name) {\n document.cookie = name + \"=; Max-Age=-99999999; domain=\".concat(domain, \"; path=/;\"); // Legacy\n // Adding this here to delete any old cookies before we removed the \".\" in front of the domain\n // Remove this if you see it after March 11th, 2021\n // https://github.com/lbryio/lbry-desktop/pull/3830\n\n document.cookie = name + \"=; Max-Age=-99999999; domain=.\".concat(domain, \"; path=/;\");\n}\n\nfunction setSavedPassword(value, saveToDisk) {\n return new Promise(function (resolve) {\n var password = value === undefined || value === null ? '' : value;\n sessionPassword = password;\n\n if (saveToDisk) {\n if (password) {\n setCookie(SAVED_PASSWORD, password, 14);\n } else {\n deleteSavedPassword();\n }\n }\n });\n}\n\nfunction getSavedPassword() {\n return new Promise(function (resolve) {\n if (sessionPassword) {\n resolve(sessionPassword);\n }\n\n return getPasswordFromCookie().then(function (p) {\n return resolve(p);\n });\n });\n}\n\nfunction getPasswordFromCookie() {\n return new Promise(function (resolve) {\n var password;\n password = getCookie(SAVED_PASSWORD);\n resolve(password);\n });\n}\n\nfunction deleteSavedPassword() {\n return new Promise(function (resolve) {\n deleteCookie(SAVED_PASSWORD);\n resolve();\n });\n}\n\nfunction getAuthToken() {\n return getCookie(AUTH_TOKEN);\n}\n\nfunction setAuthToken(value) {\n return setCookie(AUTH_TOKEN, value, 365);\n}\n\nfunction deleteAuthToken() {\n return new Promise(function (resolve) {\n deleteCookie(AUTH_TOKEN);\n resolve();\n });\n}\n\nfunction doSignOutCleanup() {\n return new Promise(function (resolve) {\n deleteAuthToken();\n deleteSavedPassword();\n resolve();\n });\n}\n\nfunction doAuthTokenRefresh() {\n var authToken = getAuthToken();\n\n if (authToken) {\n deleteAuthToken();\n setAuthToken(authToken);\n }\n}\n\nfunction doDeprecatedPasswordMigrationMarch2020() {\n var savedPassword = getCookie(DEPRECATED_SAVED_PASSWORD);\n\n if (savedPassword) {\n deleteCookie(DEPRECATED_SAVED_PASSWORD);\n setSavedPassword(savedPassword, true);\n }\n}\n\nmodule.exports = {\n setCookie: setCookie,\n getCookie: getCookie,\n deleteCookie: deleteCookie,\n setSavedPassword: setSavedPassword,\n getSavedPassword: getSavedPassword,\n getPasswordFromCookie: getPasswordFromCookie,\n deleteSavedPassword: deleteSavedPassword,\n getAuthToken: getAuthToken,\n setAuthToken: setAuthToken,\n deleteAuthToken: deleteAuthToken,\n doSignOutCleanup: doSignOutCleanup,\n doAuthTokenRefresh: doAuthTokenRefresh,\n doDeprecatedPasswordMigrationMarch2020: doDeprecatedPasswordMigrationMarch2020\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9zYXZlZC1wYXNzd29yZHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9zYXZlZC1wYXNzd29yZHMuanM/YjUxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IERPTUFJTiB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnLmpzJyk7XG5jb25zdCBBVVRIX1RPS0VOID0gJ2F1dGhfdG9rZW4nO1xuY29uc3QgU0FWRURfUEFTU1dPUkQgPSAnc2F2ZWRfcGFzc3dvcmQnO1xuY29uc3QgREVQUkVDQVRFRF9TQVZFRF9QQVNTV09SRCA9ICdzYXZlZC1wYXNzd29yZCc7XG5jb25zdCBkb21haW4gPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA6IERPTUFJTjtcbmNvbnN0IGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG5jb25zdCBtYXhFeHBpcmF0aW9uID0gMjE0NzQ4MzY0NztcbmxldCBzZXNzaW9uUGFzc3dvcmQ7XG5cbmZ1bmN0aW9uIHNldENvb2tpZShuYW1lLCB2YWx1ZSwgZXhwaXJhdGlvbkRheXNPbldlYikge1xuICBsZXQgZXhwaXJlcyA9ICcnO1xuICBpZiAoZXhwaXJhdGlvbkRheXNPbldlYikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBleHBpcmF0aW9uRGF5c09uV2ViICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgLy8gSWYgb24gUEMsIHNldCB0byBub3QgZXhwaXJlIChtYXgpXG4gICAgZXhwaXJlcyA9IGBleHBpcmVzPSR7SVNfV0VCID8gZGF0ZS50b1VUQ1N0cmluZygpIDogbWF4RXhwaXJhdGlvbn07YDtcbiAgfVxuXG4gIGxldCBjb29raWUgPSBgJHtuYW1lfT0ke3ZhbHVlIHx8ICcnfTsgJHtleHBpcmVzfSBwYXRoPS87IFNhbWVTaXRlPU5vbmU7YDtcbiAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgIGNvb2tpZSArPSBgIGRvbWFpbj0ke2RvbWFpbn07IFNlY3VyZTtgO1xuICB9XG5cbiAgZG9jdW1lbnQuY29va2llID0gY29va2llO1xufVxuXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSkge1xuICBjb25zdCBuYW1lRVEgPSBuYW1lICsgJz0nO1xuICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNvb2tpZSA9IGNvb2tpZXNbaV07XG4gICAgd2hpbGUgKGNvb2tpZS5jaGFyQXQoMCkgPT09ICcgJykge1xuICAgICAgY29va2llID0gY29va2llLnN1YnN0cmluZygxLCBjb29raWUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoY29va2llLmluZGV4T2YobmFtZUVRKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvb2tpZS5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgY29va2llLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBkZWxldGVDb29raWUobmFtZSkge1xuICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgYD07IE1heC1BZ2U9LTk5OTk5OTk5OyBkb21haW49JHtkb21haW59OyBwYXRoPS87YDtcblxuICAvLyBMZWdhY3lcbiAgLy8gQWRkaW5nIHRoaXMgaGVyZSB0byBkZWxldGUgYW55IG9sZCBjb29raWVzIGJlZm9yZSB3ZSByZW1vdmVkIHRoZSBcIi5cIiBpbiBmcm9udCBvZiB0aGUgZG9tYWluXG4gIC8vIFJlbW92ZSB0aGlzIGlmIHlvdSBzZWUgaXQgYWZ0ZXIgTWFyY2ggMTF0aCwgMjAyMVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9wdWxsLzM4MzBcbiAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIGA9OyBNYXgtQWdlPS05OTk5OTk5OTsgZG9tYWluPS4ke2RvbWFpbn07IHBhdGg9LztgO1xufVxuXG5mdW5jdGlvbiBzZXRTYXZlZFBhc3N3b3JkKHZhbHVlLCBzYXZlVG9EaXNrKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBwYXNzd29yZCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgPyAnJyA6IHZhbHVlO1xuICAgIHNlc3Npb25QYXNzd29yZCA9IHBhc3N3b3JkO1xuXG4gICAgaWYgKHNhdmVUb0Rpc2spIHtcbiAgICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgICBzZXRDb29raWUoU0FWRURfUEFTU1dPUkQsIHBhc3N3b3JkLCAxNCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVTYXZlZFBhc3N3b3JkKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2F2ZWRQYXNzd29yZCgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmIChzZXNzaW9uUGFzc3dvcmQpIHtcbiAgICAgIHJlc29sdmUoc2Vzc2lvblBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UGFzc3dvcmRGcm9tQ29va2llKCkudGhlbihwID0+IHJlc29sdmUocCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFzc3dvcmRGcm9tQ29va2llKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbGV0IHBhc3N3b3JkO1xuICAgIHBhc3N3b3JkID0gZ2V0Q29va2llKFNBVkVEX1BBU1NXT1JEKTtcbiAgICByZXNvbHZlKHBhc3N3b3JkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZVNhdmVkUGFzc3dvcmQoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBkZWxldGVDb29raWUoU0FWRURfUEFTU1dPUkQpO1xuICAgIHJlc29sdmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEF1dGhUb2tlbigpIHtcbiAgcmV0dXJuIGdldENvb2tpZShBVVRIX1RPS0VOKTtcbn1cblxuZnVuY3Rpb24gc2V0QXV0aFRva2VuKHZhbHVlKSB7XG4gIHJldHVybiBzZXRDb29raWUoQVVUSF9UT0tFTiwgdmFsdWUsIDM2NSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUF1dGhUb2tlbigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGRlbGV0ZUNvb2tpZShBVVRIX1RPS0VOKTtcbiAgICByZXNvbHZlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkb1NpZ25PdXRDbGVhbnVwKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgZGVsZXRlQXV0aFRva2VuKCk7XG4gICAgZGVsZXRlU2F2ZWRQYXNzd29yZCgpO1xuICAgIHJlc29sdmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRvQXV0aFRva2VuUmVmcmVzaCgpIHtcbiAgY29uc3QgYXV0aFRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG4gIGlmIChhdXRoVG9rZW4pIHtcbiAgICBkZWxldGVBdXRoVG9rZW4oKTtcbiAgICBzZXRBdXRoVG9rZW4oYXV0aFRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkb0RlcHJlY2F0ZWRQYXNzd29yZE1pZ3JhdGlvbk1hcmNoMjAyMCgpIHtcbiAgY29uc3Qgc2F2ZWRQYXNzd29yZCA9IGdldENvb2tpZShERVBSRUNBVEVEX1NBVkVEX1BBU1NXT1JEKTtcbiAgaWYgKHNhdmVkUGFzc3dvcmQpIHtcbiAgICBkZWxldGVDb29raWUoREVQUkVDQVRFRF9TQVZFRF9QQVNTV09SRCk7XG4gICAgc2V0U2F2ZWRQYXNzd29yZChzYXZlZFBhc3N3b3JkLCB0cnVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0Q29va2llLFxuICBnZXRDb29raWUsXG4gIGRlbGV0ZUNvb2tpZSxcbiAgc2V0U2F2ZWRQYXNzd29yZCxcbiAgZ2V0U2F2ZWRQYXNzd29yZCxcbiAgZ2V0UGFzc3dvcmRGcm9tQ29va2llLFxuICBkZWxldGVTYXZlZFBhc3N3b3JkLFxuICBnZXRBdXRoVG9rZW4sXG4gIHNldEF1dGhUb2tlbixcbiAgZGVsZXRlQXV0aFRva2VuLFxuICBkb1NpZ25PdXRDbGVhbnVwLFxuICBkb0F1dGhUb2tlblJlZnJlc2gsXG4gIGRvRGVwcmVjYXRlZFBhc3N3b3JkTWlncmF0aW9uTWFyY2gyMDIwLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../ui/util/saved-passwords.js\n"); - -/***/ }), - -/***/ "../ui/util/set-operations.js": -/*!************************************!*\ - !*** ../ui/util/set-operations.js ***! - \************************************/ -/*! exports provided: setDifference, setUnion */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setDifference\", function() { return setDifference; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setUnion\", function() { return setUnion; });\nvar setDifference = function setDifference(setA, setB) {\n var _difference = new Set(setA);\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var el = _step.value;\n\n _difference[\"delete\"](el);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator[\"return\"] != null) {\n _iterator[\"return\"]();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return _difference;\n};\nvar setUnion = function setUnion(setA, setB) {\n var _union = new Set(setA);\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = setB[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var el = _step2.value;\n\n _union.add(el);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2[\"return\"] != null) {\n _iterator2[\"return\"]();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return _union;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9zZXQtb3BlcmF0aW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi91aS91dGlsL3NldC1vcGVyYXRpb25zLmpzPzc0NjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHNldERpZmZlcmVuY2UgPSAoc2V0QSwgc2V0QikgPT4ge1xuICBsZXQgX2RpZmZlcmVuY2UgPSBuZXcgU2V0KHNldEEpO1xuICBmb3IgKGxldCBlbCBvZiBzZXRCKSB7XG4gICAgX2RpZmZlcmVuY2UuZGVsZXRlKGVsKTtcbiAgfVxuICByZXR1cm4gX2RpZmZlcmVuY2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VW5pb24gPSAoc2V0QSwgc2V0QikgPT4ge1xuICBsZXQgX3VuaW9uID0gbmV3IFNldChzZXRBKTtcbiAgZm9yIChsZXQgZWwgb2Ygc2V0Qikge1xuICAgIF91bmlvbi5hZGQoZWwpO1xuICB9XG4gIHJldHVybiBfdW5pb247XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/util/set-operations.js\n"); - -/***/ }), - -/***/ "../ui/util/string.js": -/*!****************************!*\ - !*** ../ui/util/string.js ***! - \****************************/ -/*! exports provided: toCapitalCase */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toCapitalCase\", function() { return toCapitalCase; });\nfunction toCapitalCase(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9zdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9zdHJpbmcuanM/YzA5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5leHBvcnQgZnVuY3Rpb24gdG9DYXBpdGFsQ2FzZShzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/string.js\n"); - -/***/ }), - -/***/ "../ui/util/swap-json.js": -/*!*******************************!*\ - !*** ../ui/util/swap-json.js ***! - \*******************************/ -/*! exports provided: swapKeyAndValue */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swapKeyAndValue\", function() { return swapKeyAndValue; });\nfunction swapKeyAndValue(dict) {\n var ret = {};\n\n for (var key in dict) {\n if (dict.hasOwnProperty(key)) {\n ret[dict[key]] = key;\n }\n }\n\n return ret;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC9zd2FwLWpzb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC9zd2FwLWpzb24uanM/ODIyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc3dhcEtleUFuZFZhbHVlKGRpY3QpIHtcbiAgY29uc3QgcmV0ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGRpY3QpIHtcbiAgICBpZiAoZGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXRbZGljdFtrZXldXSA9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../ui/util/swap-json.js\n"); - -/***/ }), - -/***/ "../ui/util/url.js": -/*!*************************!*\ - !*** ../ui/util/url.js ***! - \*************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n} // Can't use aliases here because we're doing exports/require\n\n\nvar PAGES = __webpack_require__(/*! ../constants/pages */ \"../ui/constants/pages.js\");\n\nexports.formatLbryUrlForWeb = function (uri) {\n return uri.replace('lbry://', '/').replace(/#/g, ':');\n};\n\nexports.formatFileSystemPath = function (path) {\n if (!path) {\n return;\n }\n\n var webUrl = path.replace(/\\\\/g, '/');\n\n if (webUrl[0] !== '/') {\n webUrl = \"/\".concat(webUrl);\n }\n\n return encodeURI(\"file://\".concat(webUrl)).replace(/[?#]/g, encodeURIComponent);\n};\n/*\n Function that handles page redirects\n ex: lbry://?rewards\n ex: open.lbry.com/?rewards\n*/\n\n\nexports.formatInAppUrl = function (path) {\n // Determine if we need to add a leading \"/$/\" for app pages\n var APP_PAGE_REGEX = /(\\?)([a-z]*)(.*)/;\n var appPageMatches = APP_PAGE_REGEX.exec(path);\n\n if (appPageMatches && appPageMatches.length) {\n // Definitely an app page (or it's formatted like one)\n var _appPageMatches = _slicedToArray(appPageMatches, 4),\n page = _appPageMatches[2],\n queryString = _appPageMatches[3];\n\n if (Object.values(PAGES).includes(page)) {\n var actualUrl = '/$/' + page;\n\n if (queryString) {\n actualUrl += \"?\".concat(queryString.slice(1));\n }\n\n return actualUrl;\n }\n } // Regular claim url\n\n\n return path;\n};\n\nexports.formatWebUrlIntoLbryUrl = function (pathname, search) {\n // If there is no uri, the user is on an internal page\n // pathname will either be \"/\" or \"/$/{page}\"\n var path = pathname.startsWith('/$/') ? pathname.slice(3) : pathname.slice(1);\n var appLink = \"lbry://?\".concat(path || PAGES.DISCOVER);\n\n if (search) {\n // We already have a leading \"?\" for the query param on internal pages\n appLink += search.replace('?', '&');\n }\n\n return appLink;\n};\n\nexports.generateInitialUrl = function (hash) {\n var url = '/';\n\n if (hash) {\n hash = hash.replace('#', '');\n url = hash.startsWith('/') ? hash : '/' + hash;\n }\n\n return url;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdWkvdXRpbC91cmwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdWkvdXRpbC91cmwuanM/OTUzMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDYW4ndCB1c2UgYWxpYXNlcyBoZXJlIGJlY2F1c2Ugd2UncmUgZG9pbmcgZXhwb3J0cy9yZXF1aXJlXG5jb25zdCBQQUdFUyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy9wYWdlcycpO1xuXG5leHBvcnRzLmZvcm1hdExicnlVcmxGb3JXZWIgPSB1cmkgPT4ge1xuICByZXR1cm4gdXJpLnJlcGxhY2UoJ2xicnk6Ly8nLCAnLycpLnJlcGxhY2UoLyMvZywgJzonKTtcbn07XG5cbmV4cG9ydHMuZm9ybWF0RmlsZVN5c3RlbVBhdGggPSBwYXRoID0+IHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHdlYlVybCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIGlmICh3ZWJVcmxbMF0gIT09ICcvJykge1xuICAgIHdlYlVybCA9IGAvJHt3ZWJVcmx9YDtcbiAgfVxuXG4gIHJldHVybiBlbmNvZGVVUkkoYGZpbGU6Ly8ke3dlYlVybH1gKS5yZXBsYWNlKC9bPyNdL2csIGVuY29kZVVSSUNvbXBvbmVudCk7XG59O1xuXG4vKlxuICBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgcGFnZSByZWRpcmVjdHNcbiAgZXg6IGxicnk6Ly8/cmV3YXJkc1xuICBleDogb3Blbi5sYnJ5LmNvbS8/cmV3YXJkc1xuKi9cbmV4cG9ydHMuZm9ybWF0SW5BcHBVcmwgPSBwYXRoID0+IHtcbiAgLy8gRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gYWRkIGEgbGVhZGluZyBcIi8kL1wiIGZvciBhcHAgcGFnZXNcbiAgY29uc3QgQVBQX1BBR0VfUkVHRVggPSAvKFxcPykoW2Etel0qKSguKikvO1xuICBjb25zdCBhcHBQYWdlTWF0Y2hlcyA9IEFQUF9QQUdFX1JFR0VYLmV4ZWMocGF0aCk7XG5cbiAgaWYgKGFwcFBhZ2VNYXRjaGVzICYmIGFwcFBhZ2VNYXRjaGVzLmxlbmd0aCkge1xuICAgIC8vIERlZmluaXRlbHkgYW4gYXBwIHBhZ2UgKG9yIGl0J3MgZm9ybWF0dGVkIGxpa2Ugb25lKVxuICAgIGNvbnN0IFssICwgcGFnZSwgcXVlcnlTdHJpbmddID0gYXBwUGFnZU1hdGNoZXM7XG5cbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhQQUdFUykuaW5jbHVkZXMocGFnZSkpIHtcbiAgICAgIGxldCBhY3R1YWxVcmwgPSAnLyQvJyArIHBhZ2U7XG5cbiAgICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgICBhY3R1YWxVcmwgKz0gYD8ke3F1ZXJ5U3RyaW5nLnNsaWNlKDEpfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3R1YWxVcmw7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVndWxhciBjbGFpbSB1cmxcbiAgcmV0dXJuIHBhdGg7XG59O1xuXG5leHBvcnRzLmZvcm1hdFdlYlVybEludG9MYnJ5VXJsID0gKHBhdGhuYW1lLCBzZWFyY2gpID0+IHtcbiAgLy8gSWYgdGhlcmUgaXMgbm8gdXJpLCB0aGUgdXNlciBpcyBvbiBhbiBpbnRlcm5hbCBwYWdlXG4gIC8vIHBhdGhuYW1lIHdpbGwgZWl0aGVyIGJlIFwiL1wiIG9yIFwiLyQve3BhZ2V9XCJcbiAgY29uc3QgcGF0aCA9IHBhdGhuYW1lLnN0YXJ0c1dpdGgoJy8kLycpID8gcGF0aG5hbWUuc2xpY2UoMykgOiBwYXRobmFtZS5zbGljZSgxKTtcbiAgbGV0IGFwcExpbmsgPSBgbGJyeTovLz8ke3BhdGggfHwgUEFHRVMuRElTQ09WRVJ9YDtcblxuICBpZiAoc2VhcmNoKSB7XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgbGVhZGluZyBcIj9cIiBmb3IgdGhlIHF1ZXJ5IHBhcmFtIG9uIGludGVybmFsIHBhZ2VzXG4gICAgYXBwTGluayArPSBzZWFyY2gucmVwbGFjZSgnPycsICcmJyk7XG4gIH1cblxuICByZXR1cm4gYXBwTGluaztcbn07XG5cbmV4cG9ydHMuZ2VuZXJhdGVJbml0aWFsVXJsID0gaGFzaCA9PiB7XG4gIGxldCB1cmwgPSAnLyc7XG4gIGlmIChoYXNoKSB7XG4gICAgaGFzaCA9IGhhc2gucmVwbGFjZSgnIycsICcnKTtcbiAgICB1cmwgPSBoYXNoLnN0YXJ0c1dpdGgoJy8nKSA/IGhhc2ggOiAnLycgKyBoYXNoO1xuICB9XG4gIHJldHVybiB1cmw7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFjQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFDQTtBQUNBO0FBbUJBO0FBckJBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU5BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../ui/util/url.js\n"); - -/***/ }), - -/***/ "./component/ads.jsx": -/*!***************************!*\ - !*** ./component/ads.jsx ***! - \***************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/pages */ \"../ui/constants/pages.js\");\n/* harmony import */ var constants_pages__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(constants_pages__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ \"../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\nvar ADS_URL = '//assets.revcontent.com/master/delivery.js';\nvar IS_MOBILE = typeof window.orientation !== 'undefined';\n\nfunction Ads(props) {\n var pathname = props.location.pathname,\n _props$type = props.type,\n type = _props$type === void 0 ? 'sidebar' : _props$type,\n small = props.small;\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (type === 'video') {\n try {\n var d = document;\n var s = 'script';\n var n = 'playbuzz-stream';\n var js;\n var fjs = d.getElementsByTagName(s)[0];\n js = d.createElement(s);\n js.className = n;\n js.src = 'https://stream.playbuzz.com/player/62d1eb10-e362-4873-99ed-c64a4052b43b'; // $FlowFixMe\n\n fjs.parentNode.insertBefore(js, fjs);\n } catch (e) {}\n }\n }, [type]);\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n if (!IS_MOBILE && type === 'sidebar') {\n var script = document.createElement('script');\n script.src = ADS_URL;\n script.async = true; // $FlowFixMe\n\n document.body.appendChild(script);\n return function () {\n // $FlowFixMe\n document.body.removeChild(script); // if user navigates too rapidly, <style> tags can build up\n // $FlowFixMe\n\n if (document.body.getElementsByTagName('style').length) {\n // $FlowFixMe\n document.body.getElementsByTagName('style')[0].remove();\n }\n };\n }\n }, [type]);\n var adsSignInDriver = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tokens: {\n sign_in_to_lbrytv: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('Sign in to lbry.tv'),\n navigate: \"/$/\".concat(constants_pages__WEBPACK_IMPORTED_MODULE_0__[\"AUTH\"], \"?redirect=\").concat(pathname)\n }),\n download_the_app: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n button: \"link\",\n label: __('download the app'),\n href: \"https://lbry.com/get\"\n })\n }\n }, \"Hate these? %sign_in_to_lbrytv% or %download_the_app% for an ad free experience.\");\n return type === 'video' ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"ads__claim-item\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n id: \"62d1eb10-e362-4873-99ed-c64a4052b43b\"\n }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_5___default()('ads__claim-text', {\n 'ads__claim-text--small': small\n })\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", null, \"Ad\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, adsSignInDriver))) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n className: \"ads-wrapper\"\n }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, \"Ads\"), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"p\", null, adsSignInDriver), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(\"div\", {\n id: \"rc-widget-0a74cf\",\n \"data-rc-widget\": true,\n \"data-widget-host\": \"habitat\",\n \"data-endpoint\": \"//trends.revcontent.com\",\n \"data-widget-id\": \"117427\"\n }));\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_2__[\"withRouter\"])(Ads));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQvYWRzLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC9hZHMuanN4PzNiYzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIFBBR0VTIGZyb20gJ2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgSTE4bk1lc3NhZ2UgZnJvbSAnY29tcG9uZW50L2kxOG5NZXNzYWdlJztcbmltcG9ydCBCdXR0b24gZnJvbSAnY29tcG9uZW50L2J1dHRvbic7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuY29uc3QgQURTX1VSTCA9ICcvL2Fzc2V0cy5yZXZjb250ZW50LmNvbS9tYXN0ZXIvZGVsaXZlcnkuanMnO1xuY29uc3QgSVNfTU9CSUxFID0gdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxvY2F0aW9uOiB7IHBhdGhuYW1lOiBzdHJpbmcgfSxcbiAgdHlwZTogc3RyaW5nLFxuICBzbWFsbDogYm9vbGVhbixcbn07XG5cbmZ1bmN0aW9uIEFkcyhwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGxvY2F0aW9uOiB7IHBhdGhuYW1lIH0sXG4gICAgdHlwZSA9ICdzaWRlYmFyJyxcbiAgICBzbWFsbCxcbiAgfSA9IHByb3BzO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBkb2N1bWVudDtcbiAgICAgICAgY29uc3QgcyA9ICdzY3JpcHQnO1xuICAgICAgICBjb25zdCBuID0gJ3BsYXlidXp6LXN0cmVhbSc7XG5cbiAgICAgICAgbGV0IGpzO1xuICAgICAgICBsZXQgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTtcbiAgICAgICAganMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7XG4gICAgICAgIGpzLmNsYXNzTmFtZSA9IG47XG4gICAgICAgIGpzLnNyYyA9ICdodHRwczovL3N0cmVhbS5wbGF5YnV6ei5jb20vcGxheWVyLzYyZDFlYjEwLWUzNjItNDg3My05OWVkLWM2NGE0MDUyYjQzYic7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH0sIFt0eXBlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIUlTX01PQklMRSAmJiB0eXBlID09PSAnc2lkZWJhcicpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9IEFEU19VUkw7XG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgIC8vIGlmIHVzZXIgbmF2aWdhdGVzIHRvbyByYXBpZGx5LCA8c3R5bGU+IHRhZ3MgY2FuIGJ1aWxkIHVwXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJykubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJylbMF0ucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LCBbdHlwZV0pO1xuXG4gIGNvbnN0IGFkc1NpZ25JbkRyaXZlciA9IChcbiAgICA8STE4bk1lc3NhZ2VcbiAgICAgIHRva2Vucz17e1xuICAgICAgICBzaWduX2luX3RvX2xicnl0djogKFxuICAgICAgICAgIDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnU2lnbiBpbiB0byBsYnJ5LnR2Jyl9IG5hdmlnYXRlPXtgLyQvJHtQQUdFUy5BVVRIfT9yZWRpcmVjdD0ke3BhdGhuYW1lfWB9IC8+XG4gICAgICAgICksXG4gICAgICAgIGRvd25sb2FkX3RoZV9hcHA6IDxCdXR0b24gYnV0dG9uPVwibGlua1wiIGxhYmVsPXtfXygnZG93bmxvYWQgdGhlIGFwcCcpfSBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9nZXRcIiAvPixcbiAgICAgIH19XG4gICAgPlxuICAgICAgSGF0ZSB0aGVzZT8gJXNpZ25faW5fdG9fbGJyeXR2JSBvciAlZG93bmxvYWRfdGhlX2FwcCUgZm9yIGFuIGFkIGZyZWUgZXhwZXJpZW5jZS5cbiAgICA8L0kxOG5NZXNzYWdlPlxuICApO1xuXG4gIHJldHVybiB0eXBlID09PSAndmlkZW8nID8gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYWRzX19jbGFpbS1pdGVtXCI+XG4gICAgICA8ZGl2IGlkPVwiNjJkMWViMTAtZTM2Mi00ODczLTk5ZWQtYzY0YTQwNTJiNDNiXCIgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdhZHNfX2NsYWltLXRleHQnLCB7XG4gICAgICAgICAgJ2Fkc19fY2xhaW0tdGV4dC0tc21hbGwnOiBzbWFsbCxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIDxkaXY+QWQ8L2Rpdj5cbiAgICAgICAgPHA+e2Fkc1NpZ25JbkRyaXZlcn08L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFkcy13cmFwcGVyXCI+XG4gICAgICA8cD5BZHM8L3A+XG4gICAgICA8cD57YWRzU2lnbkluRHJpdmVyfTwvcD5cbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9XCJyYy13aWRnZXQtMGE3NGNmXCJcbiAgICAgICAgZGF0YS1yYy13aWRnZXRcbiAgICAgICAgZGF0YS13aWRnZXQtaG9zdD1cImhhYml0YXRcIlxuICAgICAgICBkYXRhLWVuZHBvaW50PVwiLy90cmVuZHMucmV2Y29udGVudC5jb21cIlxuICAgICAgICBkYXRhLXdpZGdldC1pZD1cIjExNzQyN1wiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEFkcyk7XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQWZBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQWpCQTtBQW9CQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQURBO0FBWUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQURBO0FBVUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./component/ads.jsx\n"); - -/***/ }), - -/***/ "./component/nag-data-collection.jsx": -/*!*******************************************!*\ - !*** ./component/nag-data-collection.jsx ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return NagDegradedPerformance; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n/* harmony import */ var effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-is-mobile */ \"../ui/effects/use-is-mobile.js\");\n\n\n\n\n\nfunction NagDegradedPerformance(props) {\n var onClose = props.onClose;\n var isMobile = Object(effects_use_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, isMobile ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n message: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n more_information: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('more'),\n href: \"https://lbry.com/faq/privacy-and-data\"\n })\n }\n }, \"lbry.tv collects usage information for itself and third parties (%more_information%).\"),\n actionText: __('OK'),\n onClick: onClose\n }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n message: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n more_information: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('more'),\n href: \"https://lbry.com/faq/privacy-and-data\"\n })\n }\n }, \"lbry.tv collects usage information for itself and third parties (%more_information%). Want control over this and more?\"),\n actionText: __('Get The App'),\n href: \"https://lbry.com/get\",\n onClose: onClose\n }));\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQvbmFnLWRhdGEtY29sbGVjdGlvbi5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnQvbmFnLWRhdGEtY29sbGVjdGlvbi5qc3g/MjQ1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOYWcgZnJvbSAnY29tcG9uZW50L2NvbW1vbi9uYWcnO1xuaW1wb3J0IEkxOG5NZXNzYWdlIGZyb20gJ2NvbXBvbmVudC9pMThuTWVzc2FnZSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2NvbXBvbmVudC9idXR0b24nO1xuaW1wb3J0IHVzZUlzTW9iaWxlIGZyb20gJ2VmZmVjdHMvdXNlLWlzLW1vYmlsZSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOYWdEZWdyYWRlZFBlcmZvcm1hbmNlKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7IG9uQ2xvc2UgfSA9IHByb3BzO1xuICBjb25zdCBpc01vYmlsZSA9IHVzZUlzTW9iaWxlKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7aXNNb2JpbGUgPyAoXG4gICAgICAgIDxOYWdcbiAgICAgICAgICBtZXNzYWdlPXtcbiAgICAgICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgICAgICB0b2tlbnM9e3tcbiAgICAgICAgICAgICAgICBtb3JlX2luZm9ybWF0aW9uOiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGJ1dHRvbj1cImxpbmtcIiBsYWJlbD17X18oJ21vcmUnKX0gaHJlZj1cImh0dHBzOi8vbGJyeS5jb20vZmFxL3ByaXZhY3ktYW5kLWRhdGFcIiAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGxicnkudHYgY29sbGVjdHMgdXNhZ2UgaW5mb3JtYXRpb24gZm9yIGl0c2VsZiBhbmQgdGhpcmQgcGFydGllcyAoJW1vcmVfaW5mb3JtYXRpb24lKS5cbiAgICAgICAgICAgIDwvSTE4bk1lc3NhZ2U+XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvblRleHQ9e19fKCdPSycpfVxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8TmFnXG4gICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICA8STE4bk1lc3NhZ2VcbiAgICAgICAgICAgICAgdG9rZW5zPXt7XG4gICAgICAgICAgICAgICAgbW9yZV9pbmZvcm1hdGlvbjogKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdtb3JlJyl9IGhyZWY9XCJodHRwczovL2xicnkuY29tL2ZhcS9wcml2YWN5LWFuZC1kYXRhXCIgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBsYnJ5LnR2IGNvbGxlY3RzIHVzYWdlIGluZm9ybWF0aW9uIGZvciBpdHNlbGYgYW5kIHRoaXJkIHBhcnRpZXMgKCVtb3JlX2luZm9ybWF0aW9uJSkuIFdhbnQgY29udHJvbCBvdmVyXG4gICAgICAgICAgICAgIHRoaXMgYW5kIG1vcmU/XG4gICAgICAgICAgICA8L0kxOG5NZXNzYWdlPlxuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb25UZXh0PXtfXygnR2V0IFRoZSBBcHAnKX1cbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9sYnJ5LmNvbS9nZXRcIlxuICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFBQTtBQUVBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFVQTtBQUNBO0FBYkE7QUFpQkE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBZkE7QUFvQkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./component/nag-data-collection.jsx\n"); - -/***/ }), - -/***/ "./component/nag-degraded-performance.jsx": -/*!************************************************!*\ - !*** ./component/nag-degraded-performance.jsx ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return NagDegradedPerformance; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! component/i18nMessage */ \"../ui/component/i18nMessage/index.js\");\n/* harmony import */ var component_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/button */ \"../ui/component/button/index.js\");\n\n\n\n\nfunction NagDegradedPerformance(props) {\n var onClose = props.onClose;\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n type: \"error\",\n message: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_i18nMessage__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n tokens: {\n more_information: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n button: \"link\",\n label: __('more'),\n href: \"https://status.lbry.com/\"\n })\n }\n }, \"lbry.tv performance may be degraded. You can try to use it, or wait 5 minutes and refresh. Please no crush us.\"),\n actionText: __('Refresh'),\n onClick: function onClick() {\n return window.location.reload();\n },\n onClose: onClose\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQvbmFnLWRlZ3JhZGVkLXBlcmZvcm1hbmNlLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC9uYWctZGVncmFkZWQtcGVyZm9ybWFuY2UuanN4PzU1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTmFnIGZyb20gJ2NvbXBvbmVudC9jb21tb24vbmFnJztcbmltcG9ydCBJMThuTWVzc2FnZSBmcm9tICdjb21wb25lbnQvaTE4bk1lc3NhZ2UnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdjb21wb25lbnQvYnV0dG9uJztcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DbG9zZTogKCkgPT4gdm9pZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5hZ0RlZ3JhZGVkUGVyZm9ybWFuY2UocHJvcHM6IFByb3BzKSB7XG4gIGNvbnN0IHsgb25DbG9zZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TmFnXG4gICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgbWVzc2FnZT17XG4gICAgICAgIDxJMThuTWVzc2FnZVxuICAgICAgICAgIHRva2Vucz17e1xuICAgICAgICAgICAgbW9yZV9pbmZvcm1hdGlvbjogPEJ1dHRvbiBidXR0b249XCJsaW5rXCIgbGFiZWw9e19fKCdtb3JlJyl9IGhyZWY9XCJodHRwczovL3N0YXR1cy5sYnJ5LmNvbS9cIiAvPixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgbGJyeS50diBwZXJmb3JtYW5jZSBtYXkgYmUgZGVncmFkZWQuIFlvdSBjYW4gdHJ5IHRvIHVzZSBpdCwgb3Igd2FpdCA1IG1pbnV0ZXMgYW5kIHJlZnJlc2guIFBsZWFzZSBubyBjcnVzaCB1cy5cbiAgICAgICAgPC9JMThuTWVzc2FnZT5cbiAgICAgIH1cbiAgICAgIGFjdGlvblRleHQ9e19fKCdSZWZyZXNoJyl9XG4gICAgICBvbkNsaWNrPXsoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgIC8+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFEQTtBQVFBO0FBQ0E7QUFBQTtBQVpBO0FBYUE7QUFiQTtBQWdCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./component/nag-degraded-performance.jsx\n"); - -/***/ }), - -/***/ "./component/openInAppLink/index.js": -/*!******************************************!*\ - !*** ./component/openInAppLink/index.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"./node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./view */ \"./component/openInAppLink/view.jsx\");\n\n\n\n\nvar select = function select(state) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"selectUser\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select)(_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQvb3BlbkluQXBwTGluay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC9vcGVuSW5BcHBMaW5rL2luZGV4LmpzP2UyNmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNlbGVjdFVzZXIgfSBmcm9tICdsYnJ5aW5jJztcbmltcG9ydCBPcGVuSW5BcHBMaW5rIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0KShPcGVuSW5BcHBMaW5rKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./component/openInAppLink/index.js\n"); - -/***/ }), - -/***/ "./component/openInAppLink/view.jsx": -/*!******************************************!*\ - !*** ./component/openInAppLink/view.jsx ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router */ \"../node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! util/url */ \"../ui/util/url.js\");\n/* harmony import */ var util_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util_url__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var component_common_nag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! component/common/nag */ \"../ui/component/common/nag.jsx\");\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\n\nvar userAgent = navigator.userAgent.toLowerCase();\nvar isAndroidDevice = userAgent.includes('android');\nvar isDesktopDevice = typeof window.orientation === 'undefined';\n\nvar addDaysToMs = function addDaysToMs(initialNumberInMs, daysToAdd) {\n return initialNumberInMs + daysToAdd * 1000 * 60 * 60 * 24;\n};\n\nfunction OpenInAppLink(props) {\n var replace = props.history.replace,\n location = props.location,\n uri = props.uri,\n user = props.user;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n showNag = _React$useState2[0],\n setShowNag = _React$useState2[1];\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('open-in-app-close-count', 0),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n closeNagClicksCount = _usePersistedState2[0],\n setCloseNagClicksCount = _usePersistedState2[1];\n\n var _usePersistedState3 = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('open-in-app-close-date', 0),\n _usePersistedState4 = _slicedToArray(_usePersistedState3, 2),\n closeNagLastDate = _usePersistedState4[0],\n setCloseNagLastDate = _usePersistedState4[1];\n\n var pathname = location.pathname,\n search = location.search;\n var params = new URLSearchParams(search);\n var hasSrcParam = params.get('src');\n var isAndroidUser = false;\n var isDesktopUser = false;\n user && user.device_types && user.device_types.forEach(function (usedDevice) {\n if (usedDevice === 'mobile') {\n isAndroidUser = true;\n } else if (usedDevice === 'desktop') {\n isDesktopUser = true;\n }\n });\n var isWebUserOnly = !isAndroidUser && !isDesktopUser;\n var appLink = uri;\n\n if (!appLink) {\n appLink = Object(util_url__WEBPACK_IMPORTED_MODULE_2__[\"formatWebUrlIntoLbryUrl\"])(pathname, search);\n }\n\n function handleClose() {\n setShowNag(false);\n setCloseNagClicksCount(closeNagClicksCount + 1);\n setCloseNagLastDate(Date.now());\n }\n\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n if (hasSrcParam) {\n params[\"delete\"]('src');\n var newParams = params.toString();\n var newUrl = \"\".concat(pathname, \"?\").concat(newParams);\n replace(newUrl);\n }\n }, [hasSrcParam, search, pathname, replace]);\n react__WEBPACK_IMPORTED_MODULE_0___default.a.useEffect(function () {\n var isOnDeviceToPrompt = isAndroidUser && isAndroidDevice || isDesktopUser && isDesktopDevice;\n var dateRightNow = Date.now();\n var daysToAddToDate = Math.min(30, Math.pow(2, closeNagClicksCount));\n var startDateForAnotherOpenNag = closeNagLastDate + addDaysToMs(closeNagLastDate, daysToAddToDate);\n var hasWaitedEnoughTime = dateRightNow > startDateForAnotherOpenNag;\n\n if (isOnDeviceToPrompt && hasWaitedEnoughTime) {\n setShowNag(true);\n } // Don't pass showNag into this effect because we only want the initial value\n // If the param is removed from the url, the nag should still be shown\n\n }, [setShowNag, isAndroidUser, isDesktopUser, closeNagLastDate, closeNagClicksCount]);\n\n if (!showNag || isWebUserOnly) {\n return null;\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component_common_nag__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n type: \"helpful\",\n message: __('It looks like you may have LBRY %platform% installed.', {\n platform: isDesktopDevice ? __('Desktop') : __('Android')\n }),\n actionText: __('Use the App'),\n href: appLink,\n onClose: handleClose\n });\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_router__WEBPACK_IMPORTED_MODULE_1__[\"withRouter\"])(OpenInAppLink));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQvb3BlbkluQXBwTGluay92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC9vcGVuSW5BcHBMaW5rL3ZpZXcuanN4P2FjN2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGZvcm1hdFdlYlVybEludG9MYnJ5VXJsIH0gZnJvbSAndXRpbC91cmwnO1xuaW1wb3J0IE5hZyBmcm9tICdjb21wb25lbnQvY29tbW9uL25hZyc7XG5pbXBvcnQgdXNlUGVyc2lzdGVkU3RhdGUgZnJvbSAnZWZmZWN0cy91c2UtcGVyc2lzdGVkLXN0YXRlJztcblxuY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuY29uc3QgaXNBbmRyb2lkRGV2aWNlID0gdXNlckFnZW50LmluY2x1ZGVzKCdhbmRyb2lkJyk7XG5jb25zdCBpc0Rlc2t0b3BEZXZpY2UgPSB0eXBlb2Ygd2luZG93Lm9yaWVudGF0aW9uID09PSAndW5kZWZpbmVkJztcbmNvbnN0IGFkZERheXNUb01zID0gKGluaXRpYWxOdW1iZXJJbk1zOiBudW1iZXIsIGRheXNUb0FkZDogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBpbml0aWFsTnVtYmVySW5NcyArIGRheXNUb0FkZCAqIDEwMDAgKiA2MCAqIDYwICogMjQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBoaXN0b3J5OiB7IHJlcGxhY2U6IHN0cmluZyA9PiB2b2lkLCBwdXNoOiBzdHJpbmcgPT4gdm9pZCB9LFxuICBsb2NhdGlvbjogeyBzZWFyY2g6IHN0cmluZywgcGF0aG5hbWU6IHN0cmluZyB9LFxuICB1cmk6IHN0cmluZyxcbiAgdXNlcjogP1VzZXIsXG59O1xuXG5mdW5jdGlvbiBPcGVuSW5BcHBMaW5rKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgaGlzdG9yeTogeyByZXBsYWNlIH0sXG4gICAgbG9jYXRpb24sXG4gICAgdXJpLFxuICAgIHVzZXIsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3Nob3dOYWcsIHNldFNob3dOYWddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbY2xvc2VOYWdDbGlja3NDb3VudCwgc2V0Q2xvc2VOYWdDbGlja3NDb3VudF0gPSB1c2VQZXJzaXN0ZWRTdGF0ZSgnb3Blbi1pbi1hcHAtY2xvc2UtY291bnQnLCAwKTtcbiAgY29uc3QgW2Nsb3NlTmFnTGFzdERhdGUsIHNldENsb3NlTmFnTGFzdERhdGVdID0gdXNlUGVyc2lzdGVkU3RhdGUoJ29wZW4taW4tYXBwLWNsb3NlLWRhdGUnLCAwKTtcbiAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoIH0gPSBsb2NhdGlvbjtcbiAgbGV0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgaGFzU3JjUGFyYW0gPSBwYXJhbXMuZ2V0KCdzcmMnKTtcbiAgbGV0IGlzQW5kcm9pZFVzZXIgPSBmYWxzZTtcbiAgbGV0IGlzRGVza3RvcFVzZXIgPSBmYWxzZTtcbiAgdXNlciAmJlxuICAgIHVzZXIuZGV2aWNlX3R5cGVzICYmXG4gICAgdXNlci5kZXZpY2VfdHlwZXMuZm9yRWFjaCh1c2VkRGV2aWNlID0+IHtcbiAgICAgIGlmICh1c2VkRGV2aWNlID09PSAnbW9iaWxlJykge1xuICAgICAgICBpc0FuZHJvaWRVc2VyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXNlZERldmljZSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICAgIGlzRGVza3RvcFVzZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnN0IGlzV2ViVXNlck9ubHkgPSAhaXNBbmRyb2lkVXNlciAmJiAhaXNEZXNrdG9wVXNlcjtcblxuICBsZXQgYXBwTGluayA9IHVyaTtcbiAgaWYgKCFhcHBMaW5rKSB7XG4gICAgYXBwTGluayA9IGZvcm1hdFdlYlVybEludG9MYnJ5VXJsKHBhdGhuYW1lLCBzZWFyY2gpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgc2V0U2hvd05hZyhmYWxzZSk7XG4gICAgc2V0Q2xvc2VOYWdDbGlja3NDb3VudChjbG9zZU5hZ0NsaWNrc0NvdW50ICsgMSk7XG4gICAgc2V0Q2xvc2VOYWdMYXN0RGF0ZShEYXRlLm5vdygpKTtcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc1NyY1BhcmFtKSB7XG4gICAgICBwYXJhbXMuZGVsZXRlKCdzcmMnKTtcbiAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgICAgY29uc3QgbmV3VXJsID0gYCR7cGF0aG5hbWV9PyR7bmV3UGFyYW1zfWA7XG4gICAgICByZXBsYWNlKG5ld1VybCk7XG4gICAgfVxuICB9LCBbaGFzU3JjUGFyYW0sIHNlYXJjaCwgcGF0aG5hbWUsIHJlcGxhY2VdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGlzT25EZXZpY2VUb1Byb21wdCA9IChpc0FuZHJvaWRVc2VyICYmIGlzQW5kcm9pZERldmljZSkgfHwgKGlzRGVza3RvcFVzZXIgJiYgaXNEZXNrdG9wRGV2aWNlKTtcbiAgICBjb25zdCBkYXRlUmlnaHROb3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRheXNUb0FkZFRvRGF0ZSA9IE1hdGgubWluKDMwLCBNYXRoLnBvdygyLCBjbG9zZU5hZ0NsaWNrc0NvdW50KSk7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9yQW5vdGhlck9wZW5OYWcgPSBjbG9zZU5hZ0xhc3REYXRlICsgYWRkRGF5c1RvTXMoY2xvc2VOYWdMYXN0RGF0ZSwgZGF5c1RvQWRkVG9EYXRlKTtcbiAgICBjb25zdCBoYXNXYWl0ZWRFbm91Z2hUaW1lID0gZGF0ZVJpZ2h0Tm93ID4gc3RhcnREYXRlRm9yQW5vdGhlck9wZW5OYWc7XG5cbiAgICBpZiAoaXNPbkRldmljZVRvUHJvbXB0ICYmIGhhc1dhaXRlZEVub3VnaFRpbWUpIHtcbiAgICAgIHNldFNob3dOYWcodHJ1ZSk7XG4gICAgfVxuICAgIC8vIERvbid0IHBhc3Mgc2hvd05hZyBpbnRvIHRoaXMgZWZmZWN0IGJlY2F1c2Ugd2Ugb25seSB3YW50IHRoZSBpbml0aWFsIHZhbHVlXG4gICAgLy8gSWYgdGhlIHBhcmFtIGlzIHJlbW92ZWQgZnJvbSB0aGUgdXJsLCB0aGUgbmFnIHNob3VsZCBzdGlsbCBiZSBzaG93blxuICB9LCBbc2V0U2hvd05hZywgaXNBbmRyb2lkVXNlciwgaXNEZXNrdG9wVXNlciwgY2xvc2VOYWdMYXN0RGF0ZSwgY2xvc2VOYWdDbGlja3NDb3VudF0pO1xuXG4gIGlmICghc2hvd05hZyB8fCBpc1dlYlVzZXJPbmx5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxOYWdcbiAgICAgIHR5cGU9XCJoZWxwZnVsXCJcbiAgICAgIG1lc3NhZ2U9e19fKCdJdCBsb29rcyBsaWtlIHlvdSBtYXkgaGF2ZSBMQlJZICVwbGF0Zm9ybSUgaW5zdGFsbGVkLicsIHtcbiAgICAgICAgcGxhdGZvcm06IGlzRGVza3RvcERldmljZSA/IF9fKCdEZXNrdG9wJykgOiBfXygnQW5kcm9pZCcpLFxuICAgICAgfSl9XG4gICAgICBhY3Rpb25UZXh0PXtfXygnVXNlIHRoZSBBcHAnKX1cbiAgICAgIGhyZWY9e2FwcExpbmt9XG4gICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKE9wZW5JbkFwcExpbmspO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFVQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBQ0E7QUFaQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./component/openInAppLink/view.jsx\n"); - -/***/ }), - -/***/ "./component/youtubeReferralWelcome/index.js": -/*!***************************************************!*\ - !*** ./component/youtubeReferralWelcome/index.js ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"../node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux_actions_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux/actions/app */ \"../ui/redux/actions/app.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lbryinc */ \"./node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./view */ \"./component/youtubeReferralWelcome/view.jsx\");\n\n\n\n\n\nvar select = function select(state) {\n return {\n user: Object(lbryinc__WEBPACK_IMPORTED_MODULE_2__[\"selectUser\"])(state)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__[\"connect\"])(select, {\n doOpenModal: redux_actions_app__WEBPACK_IMPORTED_MODULE_1__[\"doOpenModal\"]\n})(_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQveW91dHViZVJlZmVycmFsV2VsY29tZS9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC95b3V0dWJlUmVmZXJyYWxXZWxjb21lL2luZGV4LmpzP2MzNmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IGRvT3Blbk1vZGFsIH0gZnJvbSAncmVkdXgvYWN0aW9ucy9hcHAnO1xuaW1wb3J0IHsgc2VsZWN0VXNlciB9IGZyb20gJ2xicnlpbmMnO1xuaW1wb3J0IFlvdXR1YmVXZWxjb21lIGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IHNlbGVjdCA9IHN0YXRlID0+ICh7XG4gIHVzZXI6IHNlbGVjdFVzZXIoc3RhdGUpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Qoc2VsZWN0LCB7XG4gIGRvT3Blbk1vZGFsLFxufSkoWW91dHViZVdlbGNvbWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQURBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./component/youtubeReferralWelcome/index.js\n"); - -/***/ }), - -/***/ "./component/youtubeReferralWelcome/view.jsx": -/*!***************************************************!*\ - !*** ./component/youtubeReferralWelcome/view.jsx ***! - \***************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var constants_modal_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! constants/modal_types */ \"../ui/constants/modal_types.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! effects/use-persisted-state */ \"../ui/effects/use-persisted-state.js\");\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n\n\n\n\nvar YoutubeWelcome = function YoutubeWelcome(props) {\n var doOpenModal = props.doOpenModal,\n user = props.user;\n\n var _usePersistedState = Object(effects_use_persisted_state__WEBPACK_IMPORTED_MODULE_2__[\"default\"])('youtube-welcome', false),\n _usePersistedState2 = _slicedToArray(_usePersistedState, 2),\n hasBeenShownIntro = _usePersistedState2[0],\n setHasBeenShownIntro = _usePersistedState2[1];\n\n var isYouTubeReferrer = document.referrer.includes('youtube.com');\n var shouldShowWelcome = !hasBeenShownIntro && isYouTubeReferrer && user && !user.has_verified_email;\n react__WEBPACK_IMPORTED_MODULE_1___default.a.useEffect(function () {\n if (shouldShowWelcome) {\n doOpenModal(constants_modal_types__WEBPACK_IMPORTED_MODULE_0__[\"YOUTUBE_WELCOME\"]);\n setHasBeenShownIntro(true);\n }\n }, [shouldShowWelcome, setHasBeenShownIntro, doOpenModal]);\n return null;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (YoutubeWelcome);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnQveW91dHViZVJlZmVycmFsV2VsY29tZS92aWV3LmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudC95b3V0dWJlUmVmZXJyYWxXZWxjb21lL3ZpZXcuanN4PzkwMDEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCAqIGFzIE1PREFMUyBmcm9tICdjb25zdGFudHMvbW9kYWxfdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VQZXJzaXN0ZWRTdGF0ZSBmcm9tICdlZmZlY3RzL3VzZS1wZXJzaXN0ZWQtc3RhdGUnO1xuXG50eXBlIFByb3BzID0geyBkb09wZW5Nb2RhbDogc3RyaW5nID0+IHZvaWQsIHVzZXI6ID9Vc2VyIH07XG5cbmNvbnN0IFlvdXR1YmVXZWxjb21lID0gKHByb3BzOiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGRvT3Blbk1vZGFsLCB1c2VyIH0gPSBwcm9wcztcbiAgY29uc3QgW2hhc0JlZW5TaG93bkludHJvLCBzZXRIYXNCZWVuU2hvd25JbnRyb10gPSB1c2VQZXJzaXN0ZWRTdGF0ZSgneW91dHViZS13ZWxjb21lJywgZmFsc2UpO1xuICBjb25zdCBpc1lvdVR1YmVSZWZlcnJlciA9IGRvY3VtZW50LnJlZmVycmVyLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpO1xuICBjb25zdCBzaG91bGRTaG93V2VsY29tZSA9ICFoYXNCZWVuU2hvd25JbnRybyAmJiBpc1lvdVR1YmVSZWZlcnJlciAmJiB1c2VyICYmICF1c2VyLmhhc192ZXJpZmllZF9lbWFpbDtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTaG93V2VsY29tZSkge1xuICAgICAgZG9PcGVuTW9kYWwoTU9EQUxTLllPVVRVQkVfV0VMQ09NRSk7XG4gICAgICBzZXRIYXNCZWVuU2hvd25JbnRybyh0cnVlKTtcbiAgICB9XG4gIH0sIFtzaG91bGRTaG93V2VsY29tZSwgc2V0SGFzQmVlblNob3duSW50cm8sIGRvT3Blbk1vZGFsXSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBZb3V0dWJlV2VsY29tZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQWJBO0FBQ0E7QUFlQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./component/youtubeReferralWelcome/view.jsx\n"); - -/***/ }), - -/***/ "./effects/use-degraded-performance.js": -/*!*********************************************!*\ - !*** ./effects/use-degraded-performance.js ***! - \*********************************************/ -/*! exports provided: STATUS_OK, STATUS_DEGRADED, STATUS_FAILING, STATUS_DOWN, useDegradedPerformance */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"STATUS_OK\", function() { return STATUS_OK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"STATUS_DEGRADED\", function() { return STATUS_DEGRADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"STATUS_FAILING\", function() { return STATUS_FAILING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"STATUS_DOWN\", function() { return STATUS_DOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useDegradedPerformance\", function() { return useDegradedPerformance; });\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! config */ \"../config.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"../node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var util_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! util/fetch */ \"../ui/util/fetch.js\");\n\n\n\nvar STATUS_TIMEOUT_LIMIT = 10000;\nvar STATUS_OK = 'ok';\nvar STATUS_DEGRADED = 'degraded';\nvar STATUS_FAILING = 'failing';\nvar STATUS_DOWN = 'down';\nfunction useDegradedPerformance(onDegradedPerformanceCallback) {\n Object(react__WEBPACK_IMPORTED_MODULE_1__[\"useEffect\"])(function () {\n Object(util_fetch__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(STATUS_TIMEOUT_LIMIT, fetch(\"\".concat(config__WEBPACK_IMPORTED_MODULE_0__[\"LBRY_TV_API\"], \"/internal/status\"))).then(function (response) {\n return response.json();\n }).then(function (status) {\n if (status.general_state !== STATUS_OK) {\n onDegradedPerformanceCallback(STATUS_FAILING);\n }\n })[\"catch\"](function () {\n onDegradedPerformanceCallback(STATUS_FAILING);\n });\n }, []);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9lZmZlY3RzL3VzZS1kZWdyYWRlZC1wZXJmb3JtYW5jZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2VmZmVjdHMvdXNlLWRlZ3JhZGVkLXBlcmZvcm1hbmNlLmpzPzg4YmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTEJSWV9UVl9BUEkgfSBmcm9tICdjb25maWcnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGZldGNoV2l0aFRpbWVvdXQgZnJvbSAndXRpbC9mZXRjaCc7XG5cbmNvbnN0IFNUQVRVU19USU1FT1VUX0xJTUlUID0gMTAwMDA7XG5leHBvcnQgY29uc3QgU1RBVFVTX09LID0gJ29rJztcbmV4cG9ydCBjb25zdCBTVEFUVVNfREVHUkFERUQgPSAnZGVncmFkZWQnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19GQUlMSU5HID0gJ2ZhaWxpbmcnO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19ET1dOID0gJ2Rvd24nO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVncmFkZWRQZXJmb3JtYW5jZShvbkRlZ3JhZGVkUGVyZm9ybWFuY2VDYWxsYmFjaykge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoV2l0aFRpbWVvdXQoU1RBVFVTX1RJTUVPVVRfTElNSVQsIGZldGNoKGAke0xCUllfVFZfQVBJfS9pbnRlcm5hbC9zdGF0dXNgKSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgIC50aGVuKHN0YXR1cyA9PiB7XG4gICAgICAgIGlmIChzdGF0dXMuZ2VuZXJhbF9zdGF0ZSAhPT0gU1RBVFVTX09LKSB7XG4gICAgICAgICAgb25EZWdyYWRlZFBlcmZvcm1hbmNlQ2FsbGJhY2soU1RBVFVTX0ZBSUxJTkcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgb25EZWdyYWRlZFBlcmZvcm1hbmNlQ2FsbGJhY2soU1RBVFVTX0ZBSUxJTkcpO1xuICAgICAgfSk7XG4gIH0sIFtdKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQVJBO0FBREE7QUFZQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./effects/use-degraded-performance.js\n"); - -/***/ }), - -/***/ "./node_modules/lbry-redux/dist/bundle.es.js": -/*!***************************************************!*\ - !*** ./node_modules/lbry-redux/dist/bundle.es.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__) {\n\nvar _handleActions, _handleActions2, _handleActions3, _options, _handleActions4, _handleActions5, _handleActions6, _handleActions7;\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && _typeof(ex) === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\n__webpack_require__(/*! proxy-polyfill */ \"./node_modules/proxy-polyfill/proxy.js\");\n\nvar reselect = __webpack_require__(/*! reselect */ \"./node_modules/reselect/lib/index.js\");\n\nvar uuid = _interopDefault(__webpack_require__(/*! uuid/v4 */ \"./node_modules/uuid/v4.js\"));\n\nvar MINIMUM_PUBLISH_BID = 0.00000001;\nvar CHANNEL_ANONYMOUS = 'anonymous';\nvar CHANNEL_NEW = 'new';\nvar PAGE_SIZE = 20;\nvar claim = /*#__PURE__*/Object.freeze({\n MINIMUM_PUBLISH_BID: MINIMUM_PUBLISH_BID,\n CHANNEL_ANONYMOUS: CHANNEL_ANONYMOUS,\n CHANNEL_NEW: CHANNEL_NEW,\n PAGE_SIZE: PAGE_SIZE\n});\nvar WINDOW_FOCUSED = 'WINDOW_FOCUSED';\nvar DAEMON_READY = 'DAEMON_READY';\nvar DAEMON_VERSION_MATCH = 'DAEMON_VERSION_MATCH';\nvar DAEMON_VERSION_MISMATCH = 'DAEMON_VERSION_MISMATCH';\nvar VOLUME_CHANGED = 'VOLUME_CHANGED'; // Navigation\n\nvar CHANGE_AFTER_AUTH_PATH = 'CHANGE_AFTER_AUTH_PATH';\nvar WINDOW_SCROLLED = 'WINDOW_SCROLLED';\nvar HISTORY_NAVIGATE = 'HISTORY_NAVIGATE'; // Upgrades\n\nvar UPGRADE_CANCELLED = 'UPGRADE_CANCELLED';\nvar DOWNLOAD_UPGRADE = 'DOWNLOAD_UPGRADE';\nvar UPGRADE_DOWNLOAD_STARTED = 'UPGRADE_DOWNLOAD_STARTED';\nvar UPGRADE_DOWNLOAD_COMPLETED = 'UPGRADE_DOWNLOAD_COMPLETED';\nvar UPGRADE_DOWNLOAD_PROGRESSED = 'UPGRADE_DOWNLOAD_PROGRESSED';\nvar CHECK_UPGRADE_AVAILABLE = 'CHECK_UPGRADE_AVAILABLE';\nvar CHECK_UPGRADE_START = 'CHECK_UPGRADE_START';\nvar CHECK_UPGRADE_SUCCESS = 'CHECK_UPGRADE_SUCCESS';\nvar CHECK_UPGRADE_FAIL = 'CHECK_UPGRADE_FAIL';\nvar CHECK_UPGRADE_SUBSCRIBE = 'CHECK_UPGRADE_SUBSCRIBE';\nvar UPDATE_VERSION = 'UPDATE_VERSION';\nvar UPDATE_REMOTE_VERSION = 'UPDATE_REMOTE_VERSION';\nvar SKIP_UPGRADE = 'SKIP_UPGRADE';\nvar START_UPGRADE = 'START_UPGRADE';\nvar AUTO_UPDATE_DECLINED = 'AUTO_UPDATE_DECLINED';\nvar AUTO_UPDATE_DOWNLOADED = 'AUTO_UPDATE_DOWNLOADED';\nvar CLEAR_UPGRADE_TIMER = 'CLEAR_UPGRADE_TIMER'; // Wallet\n\nvar GET_NEW_ADDRESS_STARTED = 'GET_NEW_ADDRESS_STARTED';\nvar GET_NEW_ADDRESS_COMPLETED = 'GET_NEW_ADDRESS_COMPLETED';\nvar FETCH_TRANSACTIONS_STARTED = 'FETCH_TRANSACTIONS_STARTED';\nvar FETCH_TRANSACTIONS_COMPLETED = 'FETCH_TRANSACTIONS_COMPLETED';\nvar FETCH_SUPPORTS_STARTED = 'FETCH_SUPPORTS_STARTED';\nvar FETCH_SUPPORTS_COMPLETED = 'FETCH_SUPPORTS_COMPLETED';\nvar ABANDON_SUPPORT_STARTED = 'ABANDON_SUPPORT_STARTED';\nvar ABANDON_SUPPORT_COMPLETED = 'ABANDON_SUPPORT_COMPLETED';\nvar UPDATE_BALANCE = 'UPDATE_BALANCE';\nvar UPDATE_TOTAL_BALANCE = 'UPDATE_TOTAL_BALANCE';\nvar CHECK_ADDRESS_IS_MINE_STARTED = 'CHECK_ADDRESS_IS_MINE_STARTED';\nvar CHECK_ADDRESS_IS_MINE_COMPLETED = 'CHECK_ADDRESS_IS_MINE_COMPLETED';\nvar SEND_TRANSACTION_STARTED = 'SEND_TRANSACTION_STARTED';\nvar SEND_TRANSACTION_COMPLETED = 'SEND_TRANSACTION_COMPLETED';\nvar SEND_TRANSACTION_FAILED = 'SEND_TRANSACTION_FAILED';\nvar SUPPORT_TRANSACTION_STARTED = 'SUPPORT_TRANSACTION_STARTED';\nvar SUPPORT_TRANSACTION_COMPLETED = 'SUPPORT_TRANSACTION_COMPLETED';\nvar SUPPORT_TRANSACTION_FAILED = 'SUPPORT_TRANSACTION_FAILED';\nvar CLEAR_SUPPORT_TRANSACTION = 'CLEAR_SUPPORT_TRANSACTION';\nvar WALLET_ENCRYPT_START = 'WALLET_ENCRYPT_START';\nvar WALLET_ENCRYPT_COMPLETED = 'WALLET_ENCRYPT_COMPLETED';\nvar WALLET_ENCRYPT_FAILED = 'WALLET_ENCRYPT_FAILED';\nvar WALLET_UNLOCK_START = 'WALLET_UNLOCK_START';\nvar WALLET_UNLOCK_COMPLETED = 'WALLET_UNLOCK_COMPLETED';\nvar WALLET_UNLOCK_FAILED = 'WALLET_UNLOCK_FAILED';\nvar WALLET_DECRYPT_START = 'WALLET_DECRYPT_START';\nvar WALLET_DECRYPT_COMPLETED = 'WALLET_DECRYPT_COMPLETED';\nvar WALLET_DECRYPT_FAILED = 'WALLET_DECRYPT_FAILED';\nvar WALLET_LOCK_START = 'WALLET_LOCK_START';\nvar WALLET_LOCK_COMPLETED = 'WALLET_LOCK_COMPLETED';\nvar WALLET_LOCK_FAILED = 'WALLET_LOCK_FAILED';\nvar WALLET_STATUS_START = 'WALLET_STATUS_START';\nvar WALLET_STATUS_COMPLETED = 'WALLET_STATUS_COMPLETED';\nvar WALLET_RESTART = 'WALLET_RESTART';\nvar WALLET_RESTART_COMPLETED = 'WALLET_RESTART_COMPLETED';\nvar SET_TRANSACTION_LIST_FILTER = 'SET_TRANSACTION_LIST_FILTER';\nvar UPDATE_CURRENT_HEIGHT = 'UPDATE_CURRENT_HEIGHT';\nvar SET_DRAFT_TRANSACTION_AMOUNT = 'SET_DRAFT_TRANSACTION_AMOUNT';\nvar SET_DRAFT_TRANSACTION_ADDRESS = 'SET_DRAFT_TRANSACTION_ADDRESS'; // Claims\n\nvar RESOLVE_URIS_STARTED = 'RESOLVE_URIS_STARTED';\nvar RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED';\nvar FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED';\nvar FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED';\nvar FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED';\nvar FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED';\nvar ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED';\nvar ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED';\nvar FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED';\nvar FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED';\nvar CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED';\nvar CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED';\nvar CREATE_CHANNEL_FAILED = 'CREATE_CHANNEL_FAILED';\nvar UPDATE_CHANNEL_STARTED = 'UPDATE_CHANNEL_STARTED';\nvar UPDATE_CHANNEL_COMPLETED = 'UPDATE_CHANNEL_COMPLETED';\nvar UPDATE_CHANNEL_FAILED = 'UPDATE_CHANNEL_FAILED';\nvar IMPORT_CHANNEL_STARTED = 'IMPORT_CHANNEL_STARTED';\nvar IMPORT_CHANNEL_COMPLETED = 'IMPORT_CHANNEL_COMPLETED';\nvar IMPORT_CHANNEL_FAILED = 'IMPORT_CHANNEL_FAILED';\nvar PUBLISH_STARTED = 'PUBLISH_STARTED';\nvar PUBLISH_COMPLETED = 'PUBLISH_COMPLETED';\nvar PUBLISH_FAILED = 'PUBLISH_FAILED';\nvar SET_PLAYING_URI = 'SET_PLAYING_URI';\nvar SET_CONTENT_POSITION = 'SET_CONTENT_POSITION';\nvar SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED';\nvar CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI';\nvar CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL';\nvar CLAIM_SEARCH_STARTED = 'CLAIM_SEARCH_STARTED';\nvar CLAIM_SEARCH_COMPLETED = 'CLAIM_SEARCH_COMPLETED';\nvar CLAIM_SEARCH_FAILED = 'CLAIM_SEARCH_FAILED';\nvar CLAIM_SEARCH_BY_TAGS_STARTED = 'CLAIM_SEARCH_BY_TAGS_STARTED';\nvar CLAIM_SEARCH_BY_TAGS_COMPLETED = 'CLAIM_SEARCH_BY_TAGS_COMPLETED';\nvar CLAIM_SEARCH_BY_TAGS_FAILED = 'CLAIM_SEARCH_BY_TAGS_FAILED'; // Comments\n\nvar COMMENT_LIST_STARTED = 'COMMENT_LIST_STARTED';\nvar COMMENT_LIST_COMPLETED = 'COMMENT_LIST_COMPLETED';\nvar COMMENT_LIST_FAILED = 'COMMENT_LIST_FAILED';\nvar COMMENT_CREATE_STARTED = 'COMMENT_CREATE_STARTED';\nvar COMMENT_CREATE_COMPLETED = 'COMMENT_CREATE_COMPLETED';\nvar COMMENT_CREATE_FAILED = 'COMMENT_CREATE_FAILED';\nvar COMMENT_ABANDON_STARTED = 'COMMENT_ABANDON_STARTED';\nvar COMMENT_ABANDON_COMPLETED = 'COMMENT_ABANDON_COMPLETED';\nvar COMMENT_ABANDON_FAILED = 'COMMENT_ABANDON_FAILED';\nvar COMMENT_UPDATE_STARTED = 'COMMENT_UPDATE_STARTED';\nvar COMMENT_UPDATE_COMPLETED = 'COMMENT_UPDATE_COMPLETED';\nvar COMMENT_UPDATE_FAILED = 'COMMENT_UPDATE_FAILED';\nvar COMMENT_HIDE_STARTED = 'COMMENT_HIDE_STARTED';\nvar COMMENT_HIDE_COMPLETED = 'COMMENT_HIDE_COMPLETED';\nvar COMMENT_HIDE_FAILED = 'COMMENT_HIDE_FAILED'; // Files\n\nvar FILE_LIST_STARTED = 'FILE_LIST_STARTED';\nvar FILE_LIST_SUCCEEDED = 'FILE_LIST_SUCCEEDED';\nvar FETCH_FILE_INFO_STARTED = 'FETCH_FILE_INFO_STARTED';\nvar FETCH_FILE_INFO_COMPLETED = 'FETCH_FILE_INFO_COMPLETED';\nvar FETCH_FILE_INFO_FAILED = 'FETCH_FILE_INFO_FAILED';\nvar LOADING_VIDEO_STARTED = 'LOADING_VIDEO_STARTED';\nvar LOADING_VIDEO_COMPLETED = 'LOADING_VIDEO_COMPLETED';\nvar LOADING_VIDEO_FAILED = 'LOADING_VIDEO_FAILED';\nvar DOWNLOADING_STARTED = 'DOWNLOADING_STARTED';\nvar DOWNLOADING_PROGRESSED = 'DOWNLOADING_PROGRESSED';\nvar DOWNLOADING_COMPLETED = 'DOWNLOADING_COMPLETED';\nvar DOWNLOADING_CANCELED = 'DOWNLOADING_CANCELED';\nvar PLAY_VIDEO_STARTED = 'PLAY_VIDEO_STARTED';\nvar FETCH_AVAILABILITY_STARTED = 'FETCH_AVAILABILITY_STARTED';\nvar FETCH_AVAILABILITY_COMPLETED = 'FETCH_AVAILABILITY_COMPLETED';\nvar FILE_DELETE = 'FILE_DELETE';\nvar SET_FILE_LIST_SORT = 'SET_FILE_LIST_SORT';\nvar PURCHASE_URI_STARTED = 'PURCHASE_URI_STARTED';\nvar PURCHASE_URI_COMPLETED = 'PURCHASE_URI_COMPLETED';\nvar PURCHASE_URI_FAILED = 'PURCHASE_URI_FAILED';\nvar DELETE_PURCHASED_URI = 'DELETE_PURCHASED_URI'; // Search\n\nvar SEARCH_START = 'SEARCH_START';\nvar SEARCH_SUCCESS = 'SEARCH_SUCCESS';\nvar SEARCH_FAIL = 'SEARCH_FAIL';\nvar RESOLVED_SEARCH_START = 'RESOLVED_SEARCH_START';\nvar RESOLVED_SEARCH_SUCCESS = 'RESOLVED_SEARCH_SUCCESS';\nvar RESOLVED_SEARCH_FAIL = 'RESOLVED_SEARCH_FAIL';\nvar UPDATE_SEARCH_QUERY = 'UPDATE_SEARCH_QUERY';\nvar UPDATE_SEARCH_OPTIONS = 'UPDATE_SEARCH_OPTIONS';\nvar UPDATE_SEARCH_SUGGESTIONS = 'UPDATE_SEARCH_SUGGESTIONS';\nvar SEARCH_FOCUS = 'SEARCH_FOCUS';\nvar SEARCH_BLUR = 'SEARCH_BLUR'; // Settings\n\nvar DAEMON_SETTINGS_RECEIVED = 'DAEMON_SETTINGS_RECEIVED';\nvar DAEMON_STATUS_RECEIVED = 'DAEMON_STATUS_RECEIVED';\nvar SHARED_PREFERENCE_SET = 'SHARED_PREFERENCE_SET';\nvar SAVE_CUSTOM_WALLET_SERVERS = 'SAVE_CUSTOM_WALLET_SERVERS';\nvar CLIENT_SETTING_CHANGED = 'CLIENT_SETTING_CHANGED';\nvar UPDATE_IS_NIGHT = 'UPDATE_IS_NIGHT'; // User\n\nvar AUTHENTICATION_STARTED = 'AUTHENTICATION_STARTED';\nvar AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS';\nvar AUTHENTICATION_FAILURE = 'AUTHENTICATION_FAILURE';\nvar USER_EMAIL_DECLINE = 'USER_EMAIL_DECLINE';\nvar USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_STARTED';\nvar USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS';\nvar USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS';\nvar USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE';\nvar USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET';\nvar USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED';\nvar USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS';\nvar USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY';\nvar USER_PHONE_RESET = 'USER_PHONE_RESET';\nvar USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED';\nvar USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS';\nvar USER_PHONE_NEW_FAILURE = 'USER_PHONE_NEW_FAILURE';\nvar USER_PHONE_VERIFY_STARTED = 'USER_PHONE_VERIFY_STARTED';\nvar USER_PHONE_VERIFY_SUCCESS = 'USER_PHONE_VERIFY_SUCCESS';\nvar USER_PHONE_VERIFY_FAILURE = 'USER_PHONE_VERIFY_FAILURE';\nvar USER_IDENTITY_VERIFY_STARTED = 'USER_IDENTITY_VERIFY_STARTED';\nvar USER_IDENTITY_VERIFY_SUCCESS = 'USER_IDENTITY_VERIFY_SUCCESS';\nvar USER_IDENTITY_VERIFY_FAILURE = 'USER_IDENTITY_VERIFY_FAILURE';\nvar USER_FETCH_STARTED = 'USER_FETCH_STARTED';\nvar USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS';\nvar USER_FETCH_FAILURE = 'USER_FETCH_FAILURE';\nvar USER_INVITE_STATUS_FETCH_STARTED = 'USER_INVITE_STATUS_FETCH_STARTED';\nvar USER_INVITE_STATUS_FETCH_SUCCESS = 'USER_INVITE_STATUS_FETCH_SUCCESS';\nvar USER_INVITE_STATUS_FETCH_FAILURE = 'USER_INVITE_STATUS_FETCH_FAILURE';\nvar USER_INVITE_NEW_STARTED = 'USER_INVITE_NEW_STARTED';\nvar USER_INVITE_NEW_SUCCESS = 'USER_INVITE_NEW_SUCCESS';\nvar USER_INVITE_NEW_FAILURE = 'USER_INVITE_NEW_FAILURE';\nvar FETCH_ACCESS_TOKEN_SUCCESS = 'FETCH_ACCESS_TOKEN_SUCCESS'; // Rewards\n\nvar FETCH_REWARDS_STARTED = 'FETCH_REWARDS_STARTED';\nvar FETCH_REWARDS_COMPLETED = 'FETCH_REWARDS_COMPLETED';\nvar CLAIM_REWARD_STARTED = 'CLAIM_REWARD_STARTED';\nvar CLAIM_REWARD_SUCCESS = 'CLAIM_REWARD_SUCCESS';\nvar CLAIM_REWARD_FAILURE = 'CLAIM_REWARD_FAILURE';\nvar CLAIM_REWARD_CLEAR_ERROR = 'CLAIM_REWARD_CLEAR_ERROR';\nvar FETCH_REWARD_CONTENT_COMPLETED = 'FETCH_REWARD_CONTENT_COMPLETED'; // Language\n\nvar DOWNLOAD_LANGUAGE_SUCCEEDED = 'DOWNLOAD_LANGUAGE_SUCCEEDED';\nvar DOWNLOAD_LANGUAGE_FAILED = 'DOWNLOAD_LANGUAGE_FAILED'; // Subscriptions\n\nvar CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE';\nvar CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE';\nvar HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS';\nvar SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST';\nvar SET_SUBSCRIPTION_NOTIFICATION = 'SET_SUBSCRIPTION_NOTIFICATION';\nvar SET_SUBSCRIPTION_NOTIFICATIONS = 'SET_SUBSCRIPTION_NOTIFICATIONS';\nvar CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED';\nvar CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED';\nvar CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE'; // Publishing\n\nvar CLEAR_PUBLISH = 'CLEAR_PUBLISH';\nvar UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM';\nvar PUBLISH_START = 'PUBLISH_START';\nvar PUBLISH_SUCCESS = 'PUBLISH_SUCCESS';\nvar PUBLISH_FAIL = 'PUBLISH_FAIL';\nvar CLEAR_PUBLISH_ERROR = 'CLEAR_PUBLISH_ERROR';\nvar REMOVE_PENDING_PUBLISH = 'REMOVE_PENDING_PUBLISH';\nvar DO_PREPARE_EDIT = 'DO_PREPARE_EDIT'; // Notifications\n\nvar CREATE_NOTIFICATION = 'CREATE_NOTIFICATION';\nvar EDIT_NOTIFICATION = 'EDIT_NOTIFICATION';\nvar DELETE_NOTIFICATION = 'DELETE_NOTIFICATION';\nvar DISMISS_NOTIFICATION = 'DISMISS_NOTIFICATION';\nvar CREATE_TOAST = 'CREATE_TOAST';\nvar DISMISS_TOAST = 'DISMISS_TOAST';\nvar CREATE_ERROR = 'CREATE_ERROR';\nvar DISMISS_ERROR = 'DISMISS_ERROR';\nvar FETCH_DATE = 'FETCH_DATE'; // Cost info\n\nvar FETCH_COST_INFO_STARTED = 'FETCH_COST_INFO_STARTED';\nvar FETCH_COST_INFO_COMPLETED = 'FETCH_COST_INFO_COMPLETED';\nvar FETCH_COST_INFO_FAILED = 'FETCH_COST_INFO_FAILED'; // Tags\n\nvar TOGGLE_TAG_FOLLOW = 'TOGGLE_TAG_FOLLOW';\nvar TAG_ADD = 'TAG_ADD';\nvar TAG_DELETE = 'TAG_DELETE'; // Blocked Channels\n\nvar TOGGLE_BLOCK_CHANNEL = 'TOGGLE_BLOCK_CHANNEL'; // Sync\n\nvar USER_STATE_POPULATE = 'USER_STATE_POPULATE';\nvar action_types = /*#__PURE__*/Object.freeze({\n WINDOW_FOCUSED: WINDOW_FOCUSED,\n DAEMON_READY: DAEMON_READY,\n DAEMON_VERSION_MATCH: DAEMON_VERSION_MATCH,\n DAEMON_VERSION_MISMATCH: DAEMON_VERSION_MISMATCH,\n VOLUME_CHANGED: VOLUME_CHANGED,\n CHANGE_AFTER_AUTH_PATH: CHANGE_AFTER_AUTH_PATH,\n WINDOW_SCROLLED: WINDOW_SCROLLED,\n HISTORY_NAVIGATE: HISTORY_NAVIGATE,\n UPGRADE_CANCELLED: UPGRADE_CANCELLED,\n DOWNLOAD_UPGRADE: DOWNLOAD_UPGRADE,\n UPGRADE_DOWNLOAD_STARTED: UPGRADE_DOWNLOAD_STARTED,\n UPGRADE_DOWNLOAD_COMPLETED: UPGRADE_DOWNLOAD_COMPLETED,\n UPGRADE_DOWNLOAD_PROGRESSED: UPGRADE_DOWNLOAD_PROGRESSED,\n CHECK_UPGRADE_AVAILABLE: CHECK_UPGRADE_AVAILABLE,\n CHECK_UPGRADE_START: CHECK_UPGRADE_START,\n CHECK_UPGRADE_SUCCESS: CHECK_UPGRADE_SUCCESS,\n CHECK_UPGRADE_FAIL: CHECK_UPGRADE_FAIL,\n CHECK_UPGRADE_SUBSCRIBE: CHECK_UPGRADE_SUBSCRIBE,\n UPDATE_VERSION: UPDATE_VERSION,\n UPDATE_REMOTE_VERSION: UPDATE_REMOTE_VERSION,\n SKIP_UPGRADE: SKIP_UPGRADE,\n START_UPGRADE: START_UPGRADE,\n AUTO_UPDATE_DECLINED: AUTO_UPDATE_DECLINED,\n AUTO_UPDATE_DOWNLOADED: AUTO_UPDATE_DOWNLOADED,\n CLEAR_UPGRADE_TIMER: CLEAR_UPGRADE_TIMER,\n GET_NEW_ADDRESS_STARTED: GET_NEW_ADDRESS_STARTED,\n GET_NEW_ADDRESS_COMPLETED: GET_NEW_ADDRESS_COMPLETED,\n FETCH_TRANSACTIONS_STARTED: FETCH_TRANSACTIONS_STARTED,\n FETCH_TRANSACTIONS_COMPLETED: FETCH_TRANSACTIONS_COMPLETED,\n FETCH_SUPPORTS_STARTED: FETCH_SUPPORTS_STARTED,\n FETCH_SUPPORTS_COMPLETED: FETCH_SUPPORTS_COMPLETED,\n ABANDON_SUPPORT_STARTED: ABANDON_SUPPORT_STARTED,\n ABANDON_SUPPORT_COMPLETED: ABANDON_SUPPORT_COMPLETED,\n UPDATE_BALANCE: UPDATE_BALANCE,\n UPDATE_TOTAL_BALANCE: UPDATE_TOTAL_BALANCE,\n CHECK_ADDRESS_IS_MINE_STARTED: CHECK_ADDRESS_IS_MINE_STARTED,\n CHECK_ADDRESS_IS_MINE_COMPLETED: CHECK_ADDRESS_IS_MINE_COMPLETED,\n SEND_TRANSACTION_STARTED: SEND_TRANSACTION_STARTED,\n SEND_TRANSACTION_COMPLETED: SEND_TRANSACTION_COMPLETED,\n SEND_TRANSACTION_FAILED: SEND_TRANSACTION_FAILED,\n SUPPORT_TRANSACTION_STARTED: SUPPORT_TRANSACTION_STARTED,\n SUPPORT_TRANSACTION_COMPLETED: SUPPORT_TRANSACTION_COMPLETED,\n SUPPORT_TRANSACTION_FAILED: SUPPORT_TRANSACTION_FAILED,\n CLEAR_SUPPORT_TRANSACTION: CLEAR_SUPPORT_TRANSACTION,\n WALLET_ENCRYPT_START: WALLET_ENCRYPT_START,\n WALLET_ENCRYPT_COMPLETED: WALLET_ENCRYPT_COMPLETED,\n WALLET_ENCRYPT_FAILED: WALLET_ENCRYPT_FAILED,\n WALLET_UNLOCK_START: WALLET_UNLOCK_START,\n WALLET_UNLOCK_COMPLETED: WALLET_UNLOCK_COMPLETED,\n WALLET_UNLOCK_FAILED: WALLET_UNLOCK_FAILED,\n WALLET_DECRYPT_START: WALLET_DECRYPT_START,\n WALLET_DECRYPT_COMPLETED: WALLET_DECRYPT_COMPLETED,\n WALLET_DECRYPT_FAILED: WALLET_DECRYPT_FAILED,\n WALLET_LOCK_START: WALLET_LOCK_START,\n WALLET_LOCK_COMPLETED: WALLET_LOCK_COMPLETED,\n WALLET_LOCK_FAILED: WALLET_LOCK_FAILED,\n WALLET_STATUS_START: WALLET_STATUS_START,\n WALLET_STATUS_COMPLETED: WALLET_STATUS_COMPLETED,\n WALLET_RESTART: WALLET_RESTART,\n WALLET_RESTART_COMPLETED: WALLET_RESTART_COMPLETED,\n SET_TRANSACTION_LIST_FILTER: SET_TRANSACTION_LIST_FILTER,\n UPDATE_CURRENT_HEIGHT: UPDATE_CURRENT_HEIGHT,\n SET_DRAFT_TRANSACTION_AMOUNT: SET_DRAFT_TRANSACTION_AMOUNT,\n SET_DRAFT_TRANSACTION_ADDRESS: SET_DRAFT_TRANSACTION_ADDRESS,\n RESOLVE_URIS_STARTED: RESOLVE_URIS_STARTED,\n RESOLVE_URIS_COMPLETED: RESOLVE_URIS_COMPLETED,\n FETCH_CHANNEL_CLAIMS_STARTED: FETCH_CHANNEL_CLAIMS_STARTED,\n FETCH_CHANNEL_CLAIMS_COMPLETED: FETCH_CHANNEL_CLAIMS_COMPLETED,\n FETCH_CLAIM_LIST_MINE_STARTED: FETCH_CLAIM_LIST_MINE_STARTED,\n FETCH_CLAIM_LIST_MINE_COMPLETED: FETCH_CLAIM_LIST_MINE_COMPLETED,\n ABANDON_CLAIM_STARTED: ABANDON_CLAIM_STARTED,\n ABANDON_CLAIM_SUCCEEDED: ABANDON_CLAIM_SUCCEEDED,\n FETCH_CHANNEL_LIST_STARTED: FETCH_CHANNEL_LIST_STARTED,\n FETCH_CHANNEL_LIST_COMPLETED: FETCH_CHANNEL_LIST_COMPLETED,\n CREATE_CHANNEL_STARTED: CREATE_CHANNEL_STARTED,\n CREATE_CHANNEL_COMPLETED: CREATE_CHANNEL_COMPLETED,\n CREATE_CHANNEL_FAILED: CREATE_CHANNEL_FAILED,\n UPDATE_CHANNEL_STARTED: UPDATE_CHANNEL_STARTED,\n UPDATE_CHANNEL_COMPLETED: UPDATE_CHANNEL_COMPLETED,\n UPDATE_CHANNEL_FAILED: UPDATE_CHANNEL_FAILED,\n IMPORT_CHANNEL_STARTED: IMPORT_CHANNEL_STARTED,\n IMPORT_CHANNEL_COMPLETED: IMPORT_CHANNEL_COMPLETED,\n IMPORT_CHANNEL_FAILED: IMPORT_CHANNEL_FAILED,\n PUBLISH_STARTED: PUBLISH_STARTED,\n PUBLISH_COMPLETED: PUBLISH_COMPLETED,\n PUBLISH_FAILED: PUBLISH_FAILED,\n SET_PLAYING_URI: SET_PLAYING_URI,\n SET_CONTENT_POSITION: SET_CONTENT_POSITION,\n SET_CONTENT_LAST_VIEWED: SET_CONTENT_LAST_VIEWED,\n CLEAR_CONTENT_HISTORY_URI: CLEAR_CONTENT_HISTORY_URI,\n CLEAR_CONTENT_HISTORY_ALL: CLEAR_CONTENT_HISTORY_ALL,\n CLAIM_SEARCH_STARTED: CLAIM_SEARCH_STARTED,\n CLAIM_SEARCH_COMPLETED: CLAIM_SEARCH_COMPLETED,\n CLAIM_SEARCH_FAILED: CLAIM_SEARCH_FAILED,\n CLAIM_SEARCH_BY_TAGS_STARTED: CLAIM_SEARCH_BY_TAGS_STARTED,\n CLAIM_SEARCH_BY_TAGS_COMPLETED: CLAIM_SEARCH_BY_TAGS_COMPLETED,\n CLAIM_SEARCH_BY_TAGS_FAILED: CLAIM_SEARCH_BY_TAGS_FAILED,\n COMMENT_LIST_STARTED: COMMENT_LIST_STARTED,\n COMMENT_LIST_COMPLETED: COMMENT_LIST_COMPLETED,\n COMMENT_LIST_FAILED: COMMENT_LIST_FAILED,\n COMMENT_CREATE_STARTED: COMMENT_CREATE_STARTED,\n COMMENT_CREATE_COMPLETED: COMMENT_CREATE_COMPLETED,\n COMMENT_CREATE_FAILED: COMMENT_CREATE_FAILED,\n COMMENT_ABANDON_STARTED: COMMENT_ABANDON_STARTED,\n COMMENT_ABANDON_COMPLETED: COMMENT_ABANDON_COMPLETED,\n COMMENT_ABANDON_FAILED: COMMENT_ABANDON_FAILED,\n COMMENT_UPDATE_STARTED: COMMENT_UPDATE_STARTED,\n COMMENT_UPDATE_COMPLETED: COMMENT_UPDATE_COMPLETED,\n COMMENT_UPDATE_FAILED: COMMENT_UPDATE_FAILED,\n COMMENT_HIDE_STARTED: COMMENT_HIDE_STARTED,\n COMMENT_HIDE_COMPLETED: COMMENT_HIDE_COMPLETED,\n COMMENT_HIDE_FAILED: COMMENT_HIDE_FAILED,\n FILE_LIST_STARTED: FILE_LIST_STARTED,\n FILE_LIST_SUCCEEDED: FILE_LIST_SUCCEEDED,\n FETCH_FILE_INFO_STARTED: FETCH_FILE_INFO_STARTED,\n FETCH_FILE_INFO_COMPLETED: FETCH_FILE_INFO_COMPLETED,\n FETCH_FILE_INFO_FAILED: FETCH_FILE_INFO_FAILED,\n LOADING_VIDEO_STARTED: LOADING_VIDEO_STARTED,\n LOADING_VIDEO_COMPLETED: LOADING_VIDEO_COMPLETED,\n LOADING_VIDEO_FAILED: LOADING_VIDEO_FAILED,\n DOWNLOADING_STARTED: DOWNLOADING_STARTED,\n DOWNLOADING_PROGRESSED: DOWNLOADING_PROGRESSED,\n DOWNLOADING_COMPLETED: DOWNLOADING_COMPLETED,\n DOWNLOADING_CANCELED: DOWNLOADING_CANCELED,\n PLAY_VIDEO_STARTED: PLAY_VIDEO_STARTED,\n FETCH_AVAILABILITY_STARTED: FETCH_AVAILABILITY_STARTED,\n FETCH_AVAILABILITY_COMPLETED: FETCH_AVAILABILITY_COMPLETED,\n FILE_DELETE: FILE_DELETE,\n SET_FILE_LIST_SORT: SET_FILE_LIST_SORT,\n PURCHASE_URI_STARTED: PURCHASE_URI_STARTED,\n PURCHASE_URI_COMPLETED: PURCHASE_URI_COMPLETED,\n PURCHASE_URI_FAILED: PURCHASE_URI_FAILED,\n DELETE_PURCHASED_URI: DELETE_PURCHASED_URI,\n SEARCH_START: SEARCH_START,\n SEARCH_SUCCESS: SEARCH_SUCCESS,\n SEARCH_FAIL: SEARCH_FAIL,\n RESOLVED_SEARCH_START: RESOLVED_SEARCH_START,\n RESOLVED_SEARCH_SUCCESS: RESOLVED_SEARCH_SUCCESS,\n RESOLVED_SEARCH_FAIL: RESOLVED_SEARCH_FAIL,\n UPDATE_SEARCH_QUERY: UPDATE_SEARCH_QUERY,\n UPDATE_SEARCH_OPTIONS: UPDATE_SEARCH_OPTIONS,\n UPDATE_SEARCH_SUGGESTIONS: UPDATE_SEARCH_SUGGESTIONS,\n SEARCH_FOCUS: SEARCH_FOCUS,\n SEARCH_BLUR: SEARCH_BLUR,\n DAEMON_SETTINGS_RECEIVED: DAEMON_SETTINGS_RECEIVED,\n DAEMON_STATUS_RECEIVED: DAEMON_STATUS_RECEIVED,\n SHARED_PREFERENCE_SET: SHARED_PREFERENCE_SET,\n SAVE_CUSTOM_WALLET_SERVERS: SAVE_CUSTOM_WALLET_SERVERS,\n CLIENT_SETTING_CHANGED: CLIENT_SETTING_CHANGED,\n UPDATE_IS_NIGHT: UPDATE_IS_NIGHT,\n AUTHENTICATION_STARTED: AUTHENTICATION_STARTED,\n AUTHENTICATION_SUCCESS: AUTHENTICATION_SUCCESS,\n AUTHENTICATION_FAILURE: AUTHENTICATION_FAILURE,\n USER_EMAIL_DECLINE: USER_EMAIL_DECLINE,\n USER_EMAIL_NEW_STARTED: USER_EMAIL_NEW_STARTED,\n USER_EMAIL_NEW_SUCCESS: USER_EMAIL_NEW_SUCCESS,\n USER_EMAIL_NEW_EXISTS: USER_EMAIL_NEW_EXISTS,\n USER_EMAIL_NEW_FAILURE: USER_EMAIL_NEW_FAILURE,\n USER_EMAIL_VERIFY_SET: USER_EMAIL_VERIFY_SET,\n USER_EMAIL_VERIFY_STARTED: USER_EMAIL_VERIFY_STARTED,\n USER_EMAIL_VERIFY_SUCCESS: USER_EMAIL_VERIFY_SUCCESS,\n USER_EMAIL_VERIFY_FAILURE: USER_EMAIL_VERIFY_FAILURE,\n USER_EMAIL_VERIFY_RETRY: USER_EMAIL_VERIFY_RETRY,\n USER_PHONE_RESET: USER_PHONE_RESET,\n USER_PHONE_NEW_STARTED: USER_PHONE_NEW_STARTED,\n USER_PHONE_NEW_SUCCESS: USER_PHONE_NEW_SUCCESS,\n USER_PHONE_NEW_FAILURE: USER_PHONE_NEW_FAILURE,\n USER_PHONE_VERIFY_STARTED: USER_PHONE_VERIFY_STARTED,\n USER_PHONE_VERIFY_SUCCESS: USER_PHONE_VERIFY_SUCCESS,\n USER_PHONE_VERIFY_FAILURE: USER_PHONE_VERIFY_FAILURE,\n USER_IDENTITY_VERIFY_STARTED: USER_IDENTITY_VERIFY_STARTED,\n USER_IDENTITY_VERIFY_SUCCESS: USER_IDENTITY_VERIFY_SUCCESS,\n USER_IDENTITY_VERIFY_FAILURE: USER_IDENTITY_VERIFY_FAILURE,\n USER_FETCH_STARTED: USER_FETCH_STARTED,\n USER_FETCH_SUCCESS: USER_FETCH_SUCCESS,\n USER_FETCH_FAILURE: USER_FETCH_FAILURE,\n USER_INVITE_STATUS_FETCH_STARTED: USER_INVITE_STATUS_FETCH_STARTED,\n USER_INVITE_STATUS_FETCH_SUCCESS: USER_INVITE_STATUS_FETCH_SUCCESS,\n USER_INVITE_STATUS_FETCH_FAILURE: USER_INVITE_STATUS_FETCH_FAILURE,\n USER_INVITE_NEW_STARTED: USER_INVITE_NEW_STARTED,\n USER_INVITE_NEW_SUCCESS: USER_INVITE_NEW_SUCCESS,\n USER_INVITE_NEW_FAILURE: USER_INVITE_NEW_FAILURE,\n FETCH_ACCESS_TOKEN_SUCCESS: FETCH_ACCESS_TOKEN_SUCCESS,\n FETCH_REWARDS_STARTED: FETCH_REWARDS_STARTED,\n FETCH_REWARDS_COMPLETED: FETCH_REWARDS_COMPLETED,\n CLAIM_REWARD_STARTED: CLAIM_REWARD_STARTED,\n CLAIM_REWARD_SUCCESS: CLAIM_REWARD_SUCCESS,\n CLAIM_REWARD_FAILURE: CLAIM_REWARD_FAILURE,\n CLAIM_REWARD_CLEAR_ERROR: CLAIM_REWARD_CLEAR_ERROR,\n FETCH_REWARD_CONTENT_COMPLETED: FETCH_REWARD_CONTENT_COMPLETED,\n DOWNLOAD_LANGUAGE_SUCCEEDED: DOWNLOAD_LANGUAGE_SUCCEEDED,\n DOWNLOAD_LANGUAGE_FAILED: DOWNLOAD_LANGUAGE_FAILED,\n CHANNEL_SUBSCRIBE: CHANNEL_SUBSCRIBE,\n CHANNEL_UNSUBSCRIBE: CHANNEL_UNSUBSCRIBE,\n HAS_FETCHED_SUBSCRIPTIONS: HAS_FETCHED_SUBSCRIPTIONS,\n SET_SUBSCRIPTION_LATEST: SET_SUBSCRIPTION_LATEST,\n SET_SUBSCRIPTION_NOTIFICATION: SET_SUBSCRIPTION_NOTIFICATION,\n SET_SUBSCRIPTION_NOTIFICATIONS: SET_SUBSCRIPTION_NOTIFICATIONS,\n CHECK_SUBSCRIPTION_STARTED: CHECK_SUBSCRIPTION_STARTED,\n CHECK_SUBSCRIPTION_COMPLETED: CHECK_SUBSCRIPTION_COMPLETED,\n CHECK_SUBSCRIPTIONS_SUBSCRIBE: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n CLEAR_PUBLISH: CLEAR_PUBLISH,\n UPDATE_PUBLISH_FORM: UPDATE_PUBLISH_FORM,\n PUBLISH_START: PUBLISH_START,\n PUBLISH_SUCCESS: PUBLISH_SUCCESS,\n PUBLISH_FAIL: PUBLISH_FAIL,\n CLEAR_PUBLISH_ERROR: CLEAR_PUBLISH_ERROR,\n REMOVE_PENDING_PUBLISH: REMOVE_PENDING_PUBLISH,\n DO_PREPARE_EDIT: DO_PREPARE_EDIT,\n CREATE_NOTIFICATION: CREATE_NOTIFICATION,\n EDIT_NOTIFICATION: EDIT_NOTIFICATION,\n DELETE_NOTIFICATION: DELETE_NOTIFICATION,\n DISMISS_NOTIFICATION: DISMISS_NOTIFICATION,\n CREATE_TOAST: CREATE_TOAST,\n DISMISS_TOAST: DISMISS_TOAST,\n CREATE_ERROR: CREATE_ERROR,\n DISMISS_ERROR: DISMISS_ERROR,\n FETCH_DATE: FETCH_DATE,\n FETCH_COST_INFO_STARTED: FETCH_COST_INFO_STARTED,\n FETCH_COST_INFO_COMPLETED: FETCH_COST_INFO_COMPLETED,\n FETCH_COST_INFO_FAILED: FETCH_COST_INFO_FAILED,\n TOGGLE_TAG_FOLLOW: TOGGLE_TAG_FOLLOW,\n TAG_ADD: TAG_ADD,\n TAG_DELETE: TAG_DELETE,\n TOGGLE_BLOCK_CHANNEL: TOGGLE_BLOCK_CHANNEL,\n USER_STATE_POPULATE: USER_STATE_POPULATE\n});\nvar CC_LICENSES = [{\n value: 'Creative Commons Attribution 4.0 International',\n url: 'https://creativecommons.org/licenses/by/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nd/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode'\n}, {\n value: 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International',\n url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode'\n}];\nvar NONE = 'None';\nvar PUBLIC_DOMAIN = 'Public Domain';\nvar OTHER = 'other';\nvar COPYRIGHT = 'copyright';\nvar licenses = /*#__PURE__*/Object.freeze({\n CC_LICENSES: CC_LICENSES,\n NONE: NONE,\n PUBLIC_DOMAIN: PUBLIC_DOMAIN,\n OTHER: OTHER,\n COPYRIGHT: COPYRIGHT\n});\nvar AUTH = 'auth';\nvar BACKUP = 'backup';\nvar CHANNEL = 'channel';\nvar DISCOVER = 'discover';\nvar FILE = 'file';\nvar DOWNLOADED = 'downloaded';\nvar PUBLISHED = 'published';\nvar GET_CREDITS = 'getcredits';\nvar HELP = 'help';\nvar INVITE = 'invite';\nvar PUBLISH = 'publish';\nvar REPORT = 'report';\nvar REWARDS = 'rewards';\nvar SEARCH = 'search';\nvar SEND_CREDITS = 'send';\nvar SETTINGS = 'settings';\nvar SHOW = 'show';\nvar SUBSCRIPTIONS = 'subscriptions';\nvar TRANSACTION_HISTORY = 'history';\nvar HISTORY = 'user_history';\nvar WALLET = 'wallet';\nvar pages = /*#__PURE__*/Object.freeze({\n AUTH: AUTH,\n BACKUP: BACKUP,\n CHANNEL: CHANNEL,\n DISCOVER: DISCOVER,\n FILE: FILE,\n DOWNLOADED: DOWNLOADED,\n PUBLISHED: PUBLISHED,\n GET_CREDITS: GET_CREDITS,\n HELP: HELP,\n INVITE: INVITE,\n PUBLISH: PUBLISH,\n REPORT: REPORT,\n REWARDS: REWARDS,\n SEARCH: SEARCH,\n SEND_CREDITS: SEND_CREDITS,\n SETTINGS: SETTINGS,\n SHOW: SHOW,\n SUBSCRIPTIONS: SUBSCRIPTIONS,\n TRANSACTION_HISTORY: TRANSACTION_HISTORY,\n HISTORY: HISTORY,\n WALLET: WALLET\n});\n/* hardcoded names still exist for these in reducers/settings.js - only discovered when debugging */\n\n/* Many SETTINGS are stored in the localStorage by their name -\n be careful about changing the value of a SETTINGS constant, as doing so can invalidate existing SETTINGS */\n\nvar CREDIT_REQUIRED_ACKNOWLEDGED = 'credit_required_acknowledged';\nvar NEW_USER_ACKNOWLEDGED = 'welcome_acknowledged';\nvar EMAIL_COLLECTION_ACKNOWLEDGED = 'email_collection_acknowledged';\nvar LANGUAGE = 'language';\nvar SHOW_NSFW = 'showNsfw';\nvar SHOW_UNAVAILABLE = 'showUnavailable';\nvar INSTANT_PURCHASE_ENABLED = 'instantPurchaseEnabled';\nvar INSTANT_PURCHASE_MAX = 'instantPurchaseMax';\nvar THEME = 'theme';\nvar THEMES = 'themes';\nvar AUTOMATIC_DARK_MODE_ENABLED = 'automaticDarkModeEnabled'; // mobile settings\n\nvar BACKGROUND_PLAY_ENABLED = 'backgroundPlayEnabled';\nvar FOREGROUND_NOTIFICATION_ENABLED = 'foregroundNotificationEnabled';\nvar KEEP_DAEMON_RUNNING = 'keepDaemonRunning';\nvar SHOW_URI_BAR_SUGGESTIONS = 'showUriBarSuggestions';\nvar RECEIVE_SUBSCRIPTION_NOTIFICATIONS = 'receiveSubscriptionNotifications';\nvar RECEIVE_REWARD_NOTIFICATIONS = 'receiveRewardNotifications';\nvar RECEIVE_INTERESTS_NOTIFICATIONS = 'receiveInterestsNotifications';\nvar RECEIVE_CREATOR_NOTIFICATIONS = 'receiveCreatorNotifications';\nvar settings = /*#__PURE__*/Object.freeze({\n CREDIT_REQUIRED_ACKNOWLEDGED: CREDIT_REQUIRED_ACKNOWLEDGED,\n NEW_USER_ACKNOWLEDGED: NEW_USER_ACKNOWLEDGED,\n EMAIL_COLLECTION_ACKNOWLEDGED: EMAIL_COLLECTION_ACKNOWLEDGED,\n LANGUAGE: LANGUAGE,\n SHOW_NSFW: SHOW_NSFW,\n SHOW_UNAVAILABLE: SHOW_UNAVAILABLE,\n INSTANT_PURCHASE_ENABLED: INSTANT_PURCHASE_ENABLED,\n INSTANT_PURCHASE_MAX: INSTANT_PURCHASE_MAX,\n THEME: THEME,\n THEMES: THEMES,\n AUTOMATIC_DARK_MODE_ENABLED: AUTOMATIC_DARK_MODE_ENABLED,\n BACKGROUND_PLAY_ENABLED: BACKGROUND_PLAY_ENABLED,\n FOREGROUND_NOTIFICATION_ENABLED: FOREGROUND_NOTIFICATION_ENABLED,\n KEEP_DAEMON_RUNNING: KEEP_DAEMON_RUNNING,\n SHOW_URI_BAR_SUGGESTIONS: SHOW_URI_BAR_SUGGESTIONS,\n RECEIVE_SUBSCRIPTION_NOTIFICATIONS: RECEIVE_SUBSCRIPTION_NOTIFICATIONS,\n RECEIVE_REWARD_NOTIFICATIONS: RECEIVE_REWARD_NOTIFICATIONS,\n RECEIVE_INTERESTS_NOTIFICATIONS: RECEIVE_INTERESTS_NOTIFICATIONS,\n RECEIVE_CREATOR_NOTIFICATIONS: RECEIVE_CREATOR_NOTIFICATIONS\n});\nvar DATE_NEW = 'dateNew';\nvar DATE_OLD = 'dateOld';\nvar TITLE = 'title';\nvar FILENAME = 'filename';\nvar sort_options = /*#__PURE__*/Object.freeze({\n DATE_NEW: DATE_NEW,\n DATE_OLD: DATE_OLD,\n TITLE: TITLE,\n FILENAME: FILENAME\n});\nvar API_DOWN = 'apiDown';\nvar READY = 'ready';\nvar IN_PROGRESS = 'inProgress';\nvar COMPLETE = 'complete';\nvar MANUAL = 'manual';\nvar thumbnail_upload_statuses = /*#__PURE__*/Object.freeze({\n API_DOWN: API_DOWN,\n READY: READY,\n IN_PROGRESS: IN_PROGRESS,\n COMPLETE: COMPLETE,\n MANUAL: MANUAL\n}); // eslint-disable-next-line import/prefer-default-export\n\nvar ALL = 'all';\nvar SPEND = 'spend';\nvar RECEIVE = 'receive';\nvar PUBLISH$1 = 'publish';\nvar CHANNEL$1 = 'channel';\nvar TIP = 'tip';\nvar SUPPORT = 'support';\nvar UPDATE = 'update';\nvar ABANDON = 'abandon';\nvar transaction_types = /*#__PURE__*/Object.freeze({\n ALL: ALL,\n SPEND: SPEND,\n RECEIVE: RECEIVE,\n PUBLISH: PUBLISH$1,\n CHANNEL: CHANNEL$1,\n TIP: TIP,\n SUPPORT: SUPPORT,\n UPDATE: UPDATE,\n ABANDON: ABANDON\n}); // PAGE SIZE\n\nvar PAGE_SIZE$1 = 50;\nvar LATEST_PAGE_SIZE = 20;\nvar transaction_list = /*#__PURE__*/Object.freeze({\n PAGE_SIZE: PAGE_SIZE$1,\n LATEST_PAGE_SIZE: LATEST_PAGE_SIZE\n});\nvar SPEECH_STATUS = 'https://spee.ch/api/config/site/publishing';\nvar SPEECH_PUBLISH = 'https://spee.ch/api/claim/publish';\nvar speech_urls = /*#__PURE__*/Object.freeze({\n SPEECH_STATUS: SPEECH_STATUS,\n SPEECH_PUBLISH: SPEECH_PUBLISH\n});\nvar ANNOUNCE_HEAD_AND_SD_ONLY = 'announce_head_and_sd_only';\nvar API = 'api';\nvar BLOB_DOWNLOAD_TIMEOUT = 'blob_download_timeout';\nvar BLOB_LRU_CACHE_SIZE = 'blob_lru_cache_size';\nvar BLOCKCHAIN_NAME = 'blockchain_name';\nvar CACHE_TIME = 'cache_time';\nvar COIN_SELECTION_STRATEGY = 'coin_selection_strategy';\nvar COMMENT_SERVER = 'comment_server';\nvar COMPONENTS_TO_SKIP = 'components_to_skip';\nvar CONCURRENT_BLOB_ANNOUNCERS = 'concurrent_blob_announcers';\nvar CONCURRENT_REFLECTOR_UPLOADS = 'concurrent_reflector_uploads';\nvar CONFIG = 'config';\nvar DATA_DIR = 'data_dir';\nvar DOWNLOAD_DIR = 'download_dir';\nvar DOWNLOAD_TIMEOUT = 'download_timeout';\nvar FIXED_PEER_DELAY = 'fixed_peer_delay';\nvar KNOWN_DHT_NODES = 'known_dht_nodes';\nvar LBRYUM_SERVERS = 'lbryum_servers';\nvar MAX_CONNECTIONS_PER_DOWNLOAD = 'max_connections_per_download';\nvar MAX_KEY_FEE = 'max_key_fee';\nvar DEFAULT_WALLET = 'default_wallet';\nvar NETWORK_INTERFACE = 'network_interface';\nvar NODE_RPC_TIMEOUT = 'node_rpc_timeout';\nvar PEER_CONNECT_TIMEOUT = 'peer_connect_timeout';\nvar REFLECT_STREAMS = 'reflect_streams';\nvar REFLECTOR_SERVERS = 'reflector_servers';\nvar S3_HEADERS_DEPTH = 's3_headers_depth';\nvar SAVE_BLOBS = 'save_blobs';\nvar SAVE_FILES = 'save_files';\nvar SHARE_USAGE_DATA = 'share_usage_data';\nvar SPLIT_BUCKETS_UNDER_INDEX = 'split_buckets_under_index';\nvar STREAMING_GET = 'streaming_get';\nvar STREAMING_SERVER = 'streaming_server';\nvar TCP_PORT = 'tcp_port';\nvar TRACK_BANDWIDTH = 'track_bandwidth';\nvar UDP_PORT = 'udp_port';\nvar USE_UPNP = 'use_upnp';\nvar WALLET_DIR = 'wallet_dir';\nvar WALLETS = 'wallets';\nvar daemon_settings = /*#__PURE__*/Object.freeze({\n ANNOUNCE_HEAD_AND_SD_ONLY: ANNOUNCE_HEAD_AND_SD_ONLY,\n API: API,\n BLOB_DOWNLOAD_TIMEOUT: BLOB_DOWNLOAD_TIMEOUT,\n BLOB_LRU_CACHE_SIZE: BLOB_LRU_CACHE_SIZE,\n BLOCKCHAIN_NAME: BLOCKCHAIN_NAME,\n CACHE_TIME: CACHE_TIME,\n COIN_SELECTION_STRATEGY: COIN_SELECTION_STRATEGY,\n COMMENT_SERVER: COMMENT_SERVER,\n COMPONENTS_TO_SKIP: COMPONENTS_TO_SKIP,\n CONCURRENT_BLOB_ANNOUNCERS: CONCURRENT_BLOB_ANNOUNCERS,\n CONCURRENT_REFLECTOR_UPLOADS: CONCURRENT_REFLECTOR_UPLOADS,\n CONFIG: CONFIG,\n DATA_DIR: DATA_DIR,\n DOWNLOAD_DIR: DOWNLOAD_DIR,\n DOWNLOAD_TIMEOUT: DOWNLOAD_TIMEOUT,\n FIXED_PEER_DELAY: FIXED_PEER_DELAY,\n KNOWN_DHT_NODES: KNOWN_DHT_NODES,\n LBRYUM_SERVERS: LBRYUM_SERVERS,\n MAX_CONNECTIONS_PER_DOWNLOAD: MAX_CONNECTIONS_PER_DOWNLOAD,\n MAX_KEY_FEE: MAX_KEY_FEE,\n DEFAULT_WALLET: DEFAULT_WALLET,\n NETWORK_INTERFACE: NETWORK_INTERFACE,\n NODE_RPC_TIMEOUT: NODE_RPC_TIMEOUT,\n PEER_CONNECT_TIMEOUT: PEER_CONNECT_TIMEOUT,\n REFLECT_STREAMS: REFLECT_STREAMS,\n REFLECTOR_SERVERS: REFLECTOR_SERVERS,\n S3_HEADERS_DEPTH: S3_HEADERS_DEPTH,\n SAVE_BLOBS: SAVE_BLOBS,\n SAVE_FILES: SAVE_FILES,\n SHARE_USAGE_DATA: SHARE_USAGE_DATA,\n SPLIT_BUCKETS_UNDER_INDEX: SPLIT_BUCKETS_UNDER_INDEX,\n STREAMING_GET: STREAMING_GET,\n STREAMING_SERVER: STREAMING_SERVER,\n TCP_PORT: TCP_PORT,\n TRACK_BANDWIDTH: TRACK_BANDWIDTH,\n UDP_PORT: UDP_PORT,\n USE_UPNP: USE_UPNP,\n WALLET_DIR: WALLET_DIR,\n WALLETS: WALLETS\n});\n/*\n * How to use this file:\n * Settings exported from here will trigger the setting to be\n * sent to the preference middleware when set using the\n * usual setDaemonSettings and clearDaemonSettings methods.\n *\n * See redux/settings/actions in the app for where this is used.\n */\n\nvar WALLET_SERVERS = LBRYUM_SERVERS;\nvar shared_preferences = /*#__PURE__*/Object.freeze({\n WALLET_SERVERS: WALLET_SERVERS\n});\nvar SEARCH_TYPES = {\n FILE: 'file',\n CHANNEL: 'channel',\n SEARCH: 'search',\n TAG: 'tag'\n};\nvar SEARCH_OPTIONS = {\n RESULT_COUNT: 'size',\n CLAIM_TYPE: 'claimType',\n INCLUDE_FILES: 'file',\n INCLUDE_CHANNELS: 'channel',\n INCLUDE_FILES_AND_CHANNELS: 'file,channel',\n MEDIA_AUDIO: 'audio',\n MEDIA_VIDEO: 'video',\n MEDIA_TEXT: 'text',\n MEDIA_IMAGE: 'image',\n MEDIA_APPLICATION: 'application'\n};\nvar DEFAULT_FOLLOWED_TAGS = ['art', 'automotive', 'blockchain', 'comedy', 'economics', 'education', 'gaming', 'music', 'news', 'science', 'sports', 'technology'];\nvar MATURE_TAGS = ['porn', 'nsfw', 'mature', 'xxx'];\nvar DEFAULT_KNOWN_TAGS = ['gaming', 'pop culture', 'Entertainment', 'technology', 'music', 'funny', 'Education', 'learning', 'news', 'gameplay', 'nature', 'beliefs', 'comedy', 'games', 'sony interactive entertainment', 'film & animation', 'game', 'weapons', \"let's play\", 'blockchain', 'video game', 'sports', 'walkthrough', 'ps4live', 'art', 'pc', 'minecraft', 'playthrough', 'economics', 'automotive', 'play', 'ps4share', 'tutorial', 'twitch', 'how to', 'ps4', 'bitcoin', 'fortnite', 'commentary', 'lets play', 'fun', 'politics', 'xbox', 'autos & vehicles', 'Travel & Events', 'food', 'science', 'xbox one', 'liberal', 'democrat', 'progressive', 'survival', 'Nonprofits & Activism', 'cryptocurrency', 'playstation', 'nintendo', 'government', 'steam', 'podcast', 'gamer', 'horror', 'conservative', 'reaction', 'trailer', 'love', 'cnn', 'republican', 'political', 'hangoutsonair', 'hoa', 'msnbc', 'cbs', 'anime', 'donald trump', 'fiction', 'fox news', 'crypto', 'ethereum', 'call of duty', 'android', 'multiplayer', 'epic', 'rpg', 'adventure', 'secular talk', 'btc', 'atheist', 'atheism', 'video games', 'ps3', 'cod', 'online', 'agnostic', 'movie', 'fps', 'lets', 'mod', 'world', 'reviews', 'sharefactory', 'space', 'pokemon', 'stream', 'hilarious', 'lol', 'sony', 'god', \"let's\", 'dance', 'pvp', 'tech', 'strategy', 'zombies', 'fail', 'film', 'xbox 360', 'animation', 'unboxing', 'money', 'how', 'travel', 'wwe', 'mods', 'indie', 'pubg', 'ios', 'history', 'rap', 'sony computer entertainment', 'mobile', 'trump', 'hack', 'flat earth', 'trap', 'humor', 'vlogging', 'fox', 'news radio', 'facebook', 'edm', 'fitness', 'vaping', 'hip hop', 'secular', 'jesus', 'song', 'vape', 'guitar', 'remix', 'mining', 'daily', 'diy', 'pets & animals', 'videogame', 'death', 'funny moments', 'religion', 'media', 'viral', 'war', 'nbc', 'freedom', 'gold', 'family', 'meme', 'zombie', 'photography', 'chill', 'sniper', 'computer', 'iphone', 'dragon', 'bible', 'pro', 'overwatch', 'litecoin', 'gta', 'house', 'fire', 'bass', 'bitcoin news', 'truth', 'crash', 'mario', 'league of legends', 'wii', 'mmorpg', 'grand theft auto v', 'health', 'marvel', 'racing', 'apple', 'instrumental', 'earth', 'destiny', 'satire', 'race', 'training', 'electronic', 'boss', 'roblox', 'family friendly', 'california', 'react', 'christian', 'mmo', 'twitter', 'help', 'star', 'cars', 'random', 'top 10', 'ninja', 'guns', 'linux', 'lessons', 'vegan', 'future', 'dota 2', 'studio', 'star wars', 'gta 5', 'shooting', 'nasa', 'rock', 'league', 'subscribe', 'water', 'gta v', 'car', 'samsung', 'music video', 'skyrim', 'dog', 'comics', 'shooter game', 'bo3', 'halloween', 'liberty', 'eth', 'conspiracy', 'knife', 'fashion', 'stories', 'vapor', 'nvidia', 'cute', 'beat', 'nintendo switch', 'fantasy', 'christmas', 'world of warcraft', 'industry', 'cartoon', 'crypto news', 'garden', 'animals', 'windows', 'happy', 'magic', 'memes', 'design', 'tactical', 'fallout 4', 'puzzle', 'parody', 'rv', 'beats', 'fortnite battle royale', 'building', 'disney', 'drone', 'ps2', 'beach', 'metal', 'christianity', 'business', 'mix', 'bo2', 'cover', 'senate', '4k', 'united states', 'final', 'hero', 'playing', 'dlc', 'ubisoft', 'halo', 'pc gaming', 'raw', 'investing', 'online learning', 'software', 'ark', 'mojang', 'console', 'battle royale', 'canon', 'microsoft', 'camping', 'cryptocurrency news', 'ufo', 'progressive talk', 'switch', 'fpv', 'arcade', 'school', 'driving', 'bodybuilding', 'drama', 'retro', 'science fiction', 'eggs', 'australia', 'modded', 'rainbow', 'gamers', 'resident evil', 'drawing', 'brasil', 'england', 'hillary clinton', 'singing', 'final fantasy', 'hiphop', 'video blog', 'mature', 'quad', 'noob', 'simulation', 'illuminati', 'poetry', 'dayz', 'manga', 'howto', 'insane', 'xbox360', 'press', 'special', 'church', 'ico', 'weird', 'libertarian', 'crafting', 'level', 'comic', 'sandbox', 'daily vlog', 'outdoor', 'black ops', 'sound', 'christ', 'duty', 'Juvenile fiction', 'pc game', 'how-to', 'ww2', 'creepy', 'artist', 'galaxy', 'destiny 2', 'new music', 'quest', 'lee', 'pacman', 'super smash bros', 'day', 'survival horror', 'patreon', 'bitcoin price', 'trending', 'open world', 'wii u', 'dope', 'reaper', 'sniping', 'dubstep', 'truck', 'planet', 'dc', 'amazon', 'spirituality', 'universe', 'video game culture', 'community', 'cat', 'aliens', 'tourism', 'altcoins', 'style', 'travel trailer', 'rda', '5859dfec-026f-46ba-bea0-02bf43aa1a6f', 'gun', 'secret', 'far cry 5', 'auto', 'culture', 'dj', 'mw2', 'lord', 'full time rving', 'role-playing game', 'prank', 'grand theft auto', 'master', 'wrestling', 'sci-fi', 'workout', 'ghost', 'fake news', 'silly', 'season', 'bo4', 'trading', 'extreme', 'economy', 'combat', 'plays', 'muslim', 'pubg mobile', 'clips', 'bo1', 'paypal', 'sims', 'exploration', 'light', 'ripple', 'paranormal', 'football', 'capcom', 'rta', 'discord', 'action role-playing game', 'playthrough part', 'batman', 'player', 'server', 'anarchy', 'military', 'playlist', 'cosplay', 'rv park', 'rant', 'edit', 'germany', 'reading', 'chris', 'flash', 'loot', 'bitcoin gratis', 'game reviews', 'movies', 'stupid', 'latest news', 'squad gameplay', 'guru', 'timelapse', 'black ops 3', 'holiday', 'soul', 'motivation', 'mw3', 'vacation', 'sega', '19th century', 'pop', 'sims 4', 'post', 'smok', 'island', 'scotland', 'paladins', 'warrior', 'creepypasta', 'role-playing video game', 'solar', 'vr', 'animal', 'peace', 'consciousness', 'dota', 'audio', 'mass effect', 'Humour', 'first look', 'videogames', 'future bass', 'freestyle', 'hardcore', 'portugal', 'dantdm', 'teaser', 'lbry']; // \n\nvar CHECK_DAEMON_STARTED_TRY_NUMBER = 200; //\n// Basic LBRY sdk connection config\n// Offers a proxy to call LBRY sdk methods\n//\n\nvar Lbry = {\n isConnected: false,\n connectPromise: null,\n daemonConnectionString: 'http://localhost:5279',\n apiRequestHeaders: {\n 'Content-Type': 'application/json-rpc'\n },\n // Allow overriding daemon connection string (e.g. to `/api/proxy` for lbryweb)\n setDaemonConnectionString: function setDaemonConnectionString(value) {\n Lbry.daemonConnectionString = value;\n },\n setApiHeader: function setApiHeader(key, value) {\n Lbry.apiRequestHeaders = Object.assign(Lbry.apiRequestHeaders, _defineProperty({}, key, value));\n },\n unsetApiHeader: function unsetApiHeader(key) {\n Object.keys(Lbry.apiRequestHeaders).includes(key) && delete Lbry.apiRequestHeaders['key'];\n },\n // Allow overriding Lbry methods\n overrides: {},\n setOverride: function setOverride(methodName, newMethod) {\n Lbry.overrides[methodName] = newMethod;\n },\n getApiRequestHeaders: function getApiRequestHeaders() {\n return Lbry.apiRequestHeaders;\n },\n // Returns a human readable media type based on the content type or extension of a file that is returned by the sdk\n getMediaType: function getMediaType(contentType, fileName) {\n if (fileName) {\n var formats = [[/\\.(mp4|m4v|webm|flv|f4v|ogv)$/i, 'video'], [/\\.(mp3|m4a|aac|wav|flac|ogg|opus)$/i, 'audio'], [/\\.(jpeg|jpg|png|gif|svg)$/i, 'image'], [/\\.(h|go|ja|java|js|jsx|c|cpp|cs|css|rb|scss|sh|php|py)$/i, 'script'], [/\\.(json|csv|txt|log|md|markdown|docx|pdf|xml|yml|yaml)$/i, 'document'], [/\\.(pdf|odf|doc|docx|epub|org|rtf)$/i, 'e-book'], [/\\.(stl|obj|fbx|gcode)$/i, '3D-file'], [/\\.(cbr|cbt|cbz)$/i, 'comic-book'], [/\\.(lbry)$/i, 'application']];\n var res = formats.reduce(function (ret, testpair) {\n switch (testpair[0].test(ret)) {\n case true:\n return testpair[1];\n\n default:\n return ret;\n }\n }, fileName);\n return res === fileName ? 'unknown' : res;\n } else if (contentType) {\n // $FlowFixMe\n return /^[^/]+/.exec(contentType)[0];\n }\n\n return 'unknown';\n },\n //\n // Lbry SDK Methods\n // https://lbry.tech/api/sdk\n //\n status: function status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('status', params);\n },\n stop: function stop() {\n return daemonCallWithResult('stop', {});\n },\n version: function version() {\n return daemonCallWithResult('version', {});\n },\n // Claim fetching and manipulation\n resolve: function resolve(params) {\n return daemonCallWithResult('resolve', params);\n },\n get: function get(params) {\n return daemonCallWithResult('get', params);\n },\n claim_search: function claim_search(params) {\n return daemonCallWithResult('claim_search', params);\n },\n claim_list: function claim_list(params) {\n return daemonCallWithResult('claim_list', params);\n },\n channel_create: function channel_create(params) {\n return daemonCallWithResult('channel_create', params);\n },\n channel_update: function channel_update(params) {\n return daemonCallWithResult('channel_update', params);\n },\n channel_import: function channel_import(params) {\n return daemonCallWithResult('channel_import', params);\n },\n channel_list: function channel_list(params) {\n return daemonCallWithResult('channel_list', params);\n },\n stream_abandon: function stream_abandon(params) {\n return daemonCallWithResult('stream_abandon', params);\n },\n stream_list: function stream_list(params) {\n return daemonCallWithResult('stream_list', params);\n },\n channel_abandon: function channel_abandon(params) {\n return daemonCallWithResult('channel_abandon', params);\n },\n support_create: function support_create(params) {\n return daemonCallWithResult('support_create', params);\n },\n support_list: function support_list(params) {\n return daemonCallWithResult('support_list', params);\n },\n // File fetching and manipulation\n file_list: function file_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_list', params);\n },\n file_delete: function file_delete() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_delete', params);\n },\n file_set_status: function file_set_status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('file_set_status', params);\n },\n blob_delete: function blob_delete() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('blob_delete', params);\n },\n blob_list: function blob_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('blob_list', params);\n },\n // Wallet utilities\n wallet_balance: function wallet_balance() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_balance', params);\n },\n wallet_decrypt: function wallet_decrypt() {\n return daemonCallWithResult('wallet_decrypt', {});\n },\n wallet_encrypt: function wallet_encrypt() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_encrypt', params);\n },\n wallet_unlock: function wallet_unlock() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_unlock', params);\n },\n wallet_list: function wallet_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_list', params);\n },\n wallet_send: function wallet_send() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_send', params);\n },\n wallet_status: function wallet_status() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('wallet_status', params);\n },\n address_is_mine: function address_is_mine() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_is_mine', params);\n },\n address_unused: function address_unused() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_unused', params);\n },\n address_list: function address_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('address_list', params);\n },\n transaction_list: function transaction_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('transaction_list', params);\n },\n utxo_release: function utxo_release() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('utxo_release', params);\n },\n support_abandon: function support_abandon() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('support_abandon', params);\n },\n sync_hash: function sync_hash() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('sync_hash', params);\n },\n sync_apply: function sync_apply() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('sync_apply', params);\n },\n // Preferences\n preference_get: function preference_get() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('preference_get', params);\n },\n preference_set: function preference_set() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('preference_set', params);\n },\n // Comments\n comment_list: function comment_list() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_list', params);\n },\n comment_create: function comment_create() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_create', params);\n },\n comment_hide: function comment_hide() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_hide', params);\n },\n comment_abandon: function comment_abandon() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_abandon', params);\n },\n // requires SDK ver. 0.53.0\n comment_update: function comment_update() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return daemonCallWithResult('comment_update', params);\n },\n // Connect to the sdk\n connect: function connect() {\n if (Lbry.connectPromise === null) {\n Lbry.connectPromise = new Promise(function (resolve, reject) {\n var tryNum = 0; // Check every half second to see if the daemon is accepting connections\n\n function checkDaemonStarted() {\n tryNum += 1;\n Lbry.status().then(resolve)[\"catch\"](function () {\n if (tryNum <= CHECK_DAEMON_STARTED_TRY_NUMBER) {\n setTimeout(checkDaemonStarted, tryNum < 50 ? 400 : 1000);\n } else {\n reject(new Error('Unable to connect to LBRY'));\n }\n });\n }\n\n checkDaemonStarted();\n });\n } // Flow thinks this could be empty, but it will always reuturn a promise\n // $FlowFixMe\n\n\n return Lbry.connectPromise;\n },\n publish: function publish() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return new Promise(function (resolve, reject) {\n if (Lbry.overrides.publish) {\n Lbry.overrides.publish(params).then(resolve, reject);\n } else {\n apiCall('publish', params, resolve, reject);\n }\n });\n }\n};\n\nfunction checkAndParse(response) {\n if (response.status >= 200 && response.status < 300) {\n return response.json();\n }\n\n return response.json().then(function (json) {\n var error;\n\n if (json.error) {\n var errorMessage = _typeof(json.error) === 'object' ? json.error.message : json.error;\n error = new Error(errorMessage);\n } else {\n error = new Error('Protocol error with unknown response signature');\n }\n\n return Promise.reject(error);\n });\n}\n\nfunction apiCall(method, params, resolve, reject) {\n var counter = new Date().getTime();\n var options = {\n method: 'POST',\n headers: Lbry.apiRequestHeaders,\n body: JSON.stringify({\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: counter\n })\n };\n return fetch(Lbry.daemonConnectionString, options).then(checkAndParse).then(function (response) {\n var error = response.error || response.result && response.result.error;\n\n if (error) {\n return reject(error);\n }\n\n return resolve(response.result);\n })[\"catch\"](reject);\n}\n\nfunction daemonCallWithResult(name) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new Promise(function (resolve, reject) {\n apiCall(name, params, function (result) {\n resolve(result);\n }, reject);\n });\n} // This is only for a fallback\n// If there is a Lbry method that is being called by an app, it should be added to /flow-typed/Lbry.js\n\n\nvar lbryProxy = new Proxy(Lbry, {\n get: function get(target, name) {\n if (name in target) {\n return target[name];\n }\n\n return function () {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return new Promise(function (resolve, reject) {\n apiCall(name, params, resolve, reject);\n });\n };\n }\n}); // \n\nvar DEFAULT_SEARCH_RESULT_FROM = 0;\nvar DEFAULT_SEARCH_SIZE = 20;\n\nfunction parseQueryParams(queryString) {\n if (queryString === '') return {};\n var parts = queryString.split('?').pop().split('&').map(function (p) {\n return p.split('=');\n });\n var params = {};\n parts.forEach(function (array) {\n var _array = _slicedToArray(array, 2),\n first = _array[0],\n second = _array[1];\n\n params[first] = second;\n });\n return params;\n}\n\nfunction toQueryString(params) {\n if (!params) return '';\n var parts = [];\n Object.keys(params).forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(params, key) && params[key]) {\n parts.push(\"\".concat(key, \"=\").concat(params[key]));\n }\n });\n return parts.join('&');\n}\n\nvar getSearchQueryString = function getSearchQueryString(query) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var encodedQuery = encodeURIComponent(query);\n var queryParams = [\"s=\".concat(encodedQuery), \"size=\".concat(options.size || DEFAULT_SEARCH_SIZE), \"from=\".concat(options.from || DEFAULT_SEARCH_RESULT_FROM)];\n var isBackgroundSearch = options.isBackgroundSearch;\n var includeUserOptions = typeof isBackgroundSearch === 'undefined' ? false : !isBackgroundSearch;\n\n if (includeUserOptions) {\n var claimType = options[SEARCH_OPTIONS.CLAIM_TYPE];\n queryParams.push(\"claimType=\".concat(claimType)); // If they are only searching for channels, strip out the media info\n\n if (!claimType.includes(SEARCH_OPTIONS.INCLUDE_CHANNELS)) {\n queryParams.push(\"mediaType=\".concat([SEARCH_OPTIONS.MEDIA_FILE, SEARCH_OPTIONS.MEDIA_AUDIO, SEARCH_OPTIONS.MEDIA_VIDEO, SEARCH_OPTIONS.MEDIA_TEXT, SEARCH_OPTIONS.MEDIA_IMAGE, SEARCH_OPTIONS.MEDIA_APPLICATION].reduce(function (acc, currentOption) {\n return options[currentOption] ? \"\".concat(acc).concat(currentOption, \",\") : acc;\n }, '')));\n }\n }\n\n var additionalOptions = {};\n var related_to = options.related_to;\n var nsfw = options.nsfw;\n if (related_to) additionalOptions['related_to'] = related_to;\n if (typeof nsfw !== 'undefined') additionalOptions['nsfw'] = nsfw;\n\n if (additionalOptions) {\n Object.keys(additionalOptions).forEach(function (key) {\n var option = additionalOptions[key];\n queryParams.push(\"\".concat(key, \"=\").concat(option));\n });\n }\n\n return queryParams.join('&');\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar channelNameMinLength = 1;\nvar claimIdMaxLength = 40; // see https://spec.lbry.com/#urls\n\nvar regexInvalidURI = /(?:[\\0-\\x08\\x0B\\f\\x0E- \"-&\\/:-@\\[-\\^`\\{-~\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\nvar regexAddress = /^(b|r)(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/;\nvar regexPartProtocol = '^((?:lbry://)?)';\nvar regexPartStreamOrChannelName = '([^:$#/]*)';\nvar regexPartModifierSeparator = '([:$#]?)([^/]*)';\nvar queryStringBreaker = '^([\\\\S]+)([?][\\\\S]*)';\nvar separateQuerystring = new RegExp(queryStringBreaker);\n/**\n * Parses a LBRY name into its component parts. Throws errors with user-friendly\n * messages for invalid names.\n *\n * Returns a dictionary with keys:\n * - path (string)\n * - isChannel (boolean)\n * - streamName (string, if present)\n * - streamClaimId (string, if present)\n * - channelName (string, if present)\n * - channelClaimId (string, if present)\n * - primaryClaimSequence (int, if present)\n * - secondaryClaimSequence (int, if present)\n * - primaryBidPosition (int, if present)\n * - secondaryBidPosition (int, if present)\n */\n\nfunction parseURI(URL) {\n var requireProto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; // Break into components. Empty sub-matches are converted to null\n\n var componentsRegex = new RegExp(regexPartProtocol + // protocol\n regexPartStreamOrChannelName + // stream or channel name (stops at the first separator or end)\n regexPartModifierSeparator + // modifier separator, modifier (stops at the first path separator or end)\n '(/?)' + // path separator, there should only be one (optional) slash to separate the stream and channel parts\n regexPartStreamOrChannelName + regexPartModifierSeparator); // chop off the querystring first\n\n var QSStrippedURL, qs;\n var qsRegexResult = separateQuerystring.exec(URL);\n\n if (qsRegexResult) {\n var _qsRegexResult$slice$ = qsRegexResult.slice(1).map(function (match) {\n return match || null;\n });\n\n var _qsRegexResult$slice$2 = _slicedToArray(_qsRegexResult$slice$, 2);\n\n QSStrippedURL = _qsRegexResult$slice$2[0];\n qs = _qsRegexResult$slice$2[1];\n }\n\n var cleanURL = QSStrippedURL || URL;\n var regexMatch = componentsRegex.exec(cleanURL) || [];\n\n var _regexMatch$slice$map = regexMatch.slice(1).map(function (match) {\n return match || null;\n }),\n _regexMatch$slice$map2 = _toArray(_regexMatch$slice$map),\n proto = _regexMatch$slice$map2[0],\n rest = _regexMatch$slice$map2.slice(1);\n\n var path = rest.join('');\n\n var _rest = _slicedToArray(rest, 7),\n streamNameOrChannelName = _rest[0],\n primaryModSeparator = _rest[1],\n primaryModValue = _rest[2],\n pathSep = _rest[3],\n possibleStreamName = _rest[4],\n secondaryModSeparator = _rest[5],\n secondaryModValue = _rest[6]; // Validate protocol\n\n\n if (requireProto && !proto) {\n throw new Error(__('LBRY URLs must include a protocol prefix (lbry://).'));\n } // Validate and process name\n\n\n if (!streamNameOrChannelName) {\n throw new Error(__('URL does not include name.'));\n }\n\n rest.forEach(function (urlPiece) {\n if (urlPiece && urlPiece.includes(' ')) {\n console.error('URL can not include a space');\n }\n });\n var includesChannel = streamNameOrChannelName.startsWith('@');\n var isChannel = streamNameOrChannelName.startsWith('@') && !possibleStreamName;\n var channelName = includesChannel && streamNameOrChannelName.slice(1);\n\n if (includesChannel) {\n if (!channelName) {\n throw new Error(__('No channel name after @.'));\n }\n\n if (channelName.length < channelNameMinLength) {\n throw new Error(__(\"Channel names must be at least %channelNameMinLength% characters.\", {\n channelNameMinLength: channelNameMinLength\n }));\n }\n } // Validate and process modifier\n\n\n var _parseURIModifier = parseURIModifier(primaryModSeparator, primaryModValue),\n _parseURIModifier2 = _slicedToArray(_parseURIModifier, 3),\n primaryClaimId = _parseURIModifier2[0],\n primaryClaimSequence = _parseURIModifier2[1],\n primaryBidPosition = _parseURIModifier2[2];\n\n var _parseURIModifier3 = parseURIModifier(secondaryModSeparator, secondaryModValue),\n _parseURIModifier4 = _slicedToArray(_parseURIModifier3, 3),\n secondaryClaimId = _parseURIModifier4[0],\n secondaryClaimSequence = _parseURIModifier4[1],\n secondaryBidPosition = _parseURIModifier4[2];\n\n var streamName = includesChannel ? possibleStreamName : streamNameOrChannelName;\n var streamClaimId = includesChannel ? secondaryClaimId : primaryClaimId;\n var channelClaimId = includesChannel && primaryClaimId;\n return _extends({\n isChannel: isChannel,\n path: path\n }, streamName ? {\n streamName: streamName\n } : {}, streamClaimId ? {\n streamClaimId: streamClaimId\n } : {}, channelName ? {\n channelName: channelName\n } : {}, channelClaimId ? {\n channelClaimId: channelClaimId\n } : {}, primaryClaimSequence ? {\n primaryClaimSequence: parseInt(primaryClaimSequence, 10)\n } : {}, secondaryClaimSequence ? {\n secondaryClaimSequence: parseInt(secondaryClaimSequence, 10)\n } : {}, primaryBidPosition ? {\n primaryBidPosition: parseInt(primaryBidPosition, 10)\n } : {}, secondaryBidPosition ? {\n secondaryBidPosition: parseInt(secondaryBidPosition, 10)\n } : {}, {\n // The values below should not be used for new uses of parseURI\n // They will not work properly with canonical_urls\n claimName: streamNameOrChannelName,\n claimId: primaryClaimId\n }, streamName ? {\n contentName: streamName\n } : {}, qs ? {\n queryString: qs\n } : {});\n}\n\nfunction parseURIModifier(modSeperator, modValue) {\n var claimId;\n var claimSequence;\n var bidPosition;\n\n if (modSeperator) {\n if (!modValue) {\n throw new Error(__(\"No modifier provided after separator %modSeperator%.\", {\n modSeperator: modSeperator\n }));\n }\n\n if (modSeperator === '#') {\n claimId = modValue;\n } else if (modSeperator === ':') {\n claimSequence = modValue;\n } else if (modSeperator === '$') {\n bidPosition = modValue;\n }\n }\n\n if (claimId && (claimId.length > claimIdMaxLength || !claimId.match(/^[0-9a-f]+$/))) {\n throw new Error(__(\"Invalid claim ID %claimId%.\", {\n claimId: claimId\n }));\n }\n\n if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {\n throw new Error(__('Claim sequence must be a number.'));\n }\n\n if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {\n throw new Error(__('Bid position must be a number.'));\n }\n\n return [claimId, claimSequence, bidPosition];\n}\n/**\n * Takes an object in the same format returned by parse() and builds a URI.\n *\n * The channelName key will accept names with or without the @ prefix.\n */\n\n\nfunction buildURI(UrlObj) {\n var includeProto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var protoDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'lbry://';\n\n var streamName = UrlObj.streamName,\n streamClaimId = UrlObj.streamClaimId,\n channelName = UrlObj.channelName,\n channelClaimId = UrlObj.channelClaimId,\n primaryClaimSequence = UrlObj.primaryClaimSequence,\n primaryBidPosition = UrlObj.primaryBidPosition,\n secondaryClaimSequence = UrlObj.secondaryClaimSequence,\n secondaryBidPosition = UrlObj.secondaryBidPosition,\n deprecatedParts = _objectWithoutProperties(UrlObj, ['streamName', 'streamClaimId', 'channelName', 'channelClaimId', 'primaryClaimSequence', 'primaryBidPosition', 'secondaryClaimSequence', 'secondaryBidPosition']);\n\n var claimId = deprecatedParts.claimId,\n claimName = deprecatedParts.claimName,\n contentName = deprecatedParts.contentName;\n\n if (!claimName && !channelName && !streamName) {\n console.error(__(\"'claimName', 'channelName', and 'streamName' are all empty. One must be present to build a url.\"));\n }\n\n var formattedChannelName = channelName && (channelName.startsWith('@') ? channelName : \"@\".concat(channelName));\n var primaryClaimName = claimName || contentName || formattedChannelName || streamName;\n var primaryClaimId = claimId || (formattedChannelName ? channelClaimId : streamClaimId);\n var secondaryClaimName = !claimName && contentName || (formattedChannelName ? streamName : null);\n var secondaryClaimId = secondaryClaimName && streamClaimId;\n return (includeProto ? protoDefault : '') + // primaryClaimName will always exist here because we throw above if there is no \"name\" value passed in\n // $FlowFixMe\n primaryClaimName + (primaryClaimId ? \"#\".concat(primaryClaimId) : '') + (primaryClaimSequence ? \":\".concat(primaryClaimSequence) : '') + (primaryBidPosition ? \"\".concat(primaryBidPosition) : '') + (secondaryClaimName ? \"/\".concat(secondaryClaimName) : '') + (secondaryClaimId ? \"#\".concat(secondaryClaimId) : '') + (secondaryClaimSequence ? \":\".concat(secondaryClaimSequence) : '') + (secondaryBidPosition ? \"\".concat(secondaryBidPosition) : '');\n}\n/* Takes a parseable LBRY URL and converts it to standard, canonical format */\n\n\nfunction normalizeURI(URL) {\n var _parseURI = parseURI(URL),\n streamName = _parseURI.streamName,\n streamClaimId = _parseURI.streamClaimId,\n channelName = _parseURI.channelName,\n channelClaimId = _parseURI.channelClaimId,\n primaryClaimSequence = _parseURI.primaryClaimSequence,\n primaryBidPosition = _parseURI.primaryBidPosition,\n secondaryClaimSequence = _parseURI.secondaryClaimSequence,\n secondaryBidPosition = _parseURI.secondaryBidPosition;\n\n return buildURI({\n streamName: streamName,\n streamClaimId: streamClaimId,\n channelName: channelName,\n channelClaimId: channelClaimId,\n primaryClaimSequence: primaryClaimSequence,\n primaryBidPosition: primaryBidPosition,\n secondaryClaimSequence: secondaryClaimSequence,\n secondaryBidPosition: secondaryBidPosition\n });\n}\n\nfunction isURIValid(URL) {\n try {\n parseURI(normalizeURI(URL));\n } catch (error) {\n return false;\n }\n\n return true;\n}\n\nfunction isNameValid(claimName) {\n return !regexInvalidURI.test(claimName);\n}\n\nfunction isURIClaimable(URL) {\n var parts;\n\n try {\n parts = parseURI(normalizeURI(URL));\n } catch (error) {\n return false;\n }\n\n return parts && parts.streamName && !parts.streamClaimId && !parts.isChannel;\n}\n\nfunction convertToShareLink(URL) {\n var _parseURI2 = parseURI(URL),\n streamName = _parseURI2.streamName,\n streamClaimId = _parseURI2.streamClaimId,\n channelName = _parseURI2.channelName,\n channelClaimId = _parseURI2.channelClaimId,\n primaryBidPosition = _parseURI2.primaryBidPosition,\n primaryClaimSequence = _parseURI2.primaryClaimSequence,\n secondaryBidPosition = _parseURI2.secondaryBidPosition,\n secondaryClaimSequence = _parseURI2.secondaryClaimSequence;\n\n return buildURI({\n streamName: streamName,\n streamClaimId: streamClaimId,\n channelName: channelName,\n channelClaimId: channelClaimId,\n primaryBidPosition: primaryBidPosition,\n primaryClaimSequence: primaryClaimSequence,\n secondaryBidPosition: secondaryBidPosition,\n secondaryClaimSequence: secondaryClaimSequence\n }, true, 'https://open.lbry.com/');\n}\n\nvar _extends$1 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState = function selectState(state) {\n return state.search;\n};\n\nvar selectSearchValue = reselect.createSelector(selectState, function (state) {\n return state.searchQuery;\n});\nvar selectSearchOptions = reselect.createSelector(selectState, function (state) {\n return state.options;\n});\nvar selectSuggestions = reselect.createSelector(selectState, function (state) {\n return state.suggestions;\n});\nvar selectIsSearching = reselect.createSelector(selectState, function (state) {\n return state.searching;\n});\nvar selectSearchUrisByQuery = reselect.createSelector(selectState, function (state) {\n return state.urisByQuery;\n});\n\nvar makeSelectSearchUris = function makeSelectSearchUris(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectSearchUrisByQuery, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar selectResolvedSearchResultsByQuery = reselect.createSelector(selectState, function (state) {\n return state.resolvedResultsByQuery;\n});\nvar selectResolvedSearchResultsByQueryLastPageReached = reselect.createSelector(selectState, function (state) {\n return state.resolvedResultsByQueryLastPageReached;\n});\n\nvar makeSelectResolvedSearchResults = function makeSelectResolvedSearchResults(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectResolvedSearchResultsByQuery, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar makeSelectResolvedSearchResultsLastPageReached = function makeSelectResolvedSearchResultsLastPageReached(query) {\n return (// replace statement below is kind of ugly, and repeated in doSearch action\n reselect.createSelector(selectResolvedSearchResultsByQueryLastPageReached, function (byQuery) {\n return byQuery[query ? query.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ') : query];\n })\n );\n};\n\nvar selectSearchBarFocused = reselect.createSelector(selectState, function (state) {\n return state.focused;\n});\nvar selectSearchSuggestions = reselect.createSelector(selectSearchValue, selectSuggestions, function (query, suggestions) {\n if (!query) {\n return [];\n }\n\n var queryIsPrefix = query === 'lbry:' || query === 'lbry:/' || query === 'lbry://' || query === 'lbry://@';\n\n if (queryIsPrefix) {\n // If it is a prefix, wait until something else comes to figure out what to do\n return [];\n } else if (query.startsWith('lbry://')) {\n // If it starts with a prefix, don't show any autocomplete results\n // They are probably typing/pasting in a lbry uri\n return [{\n value: query,\n type: query[7] === '@' ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n }];\n }\n\n var searchSuggestions = [];\n\n try {\n var uri = normalizeURI(query);\n\n var _parseURI3 = parseURI(uri),\n channelName = _parseURI3.channelName,\n streamName = _parseURI3.streamName,\n isChannel = _parseURI3.isChannel;\n\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.SEARCH\n }, {\n value: uri,\n shorthand: isChannel ? channelName : streamName,\n type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n });\n } catch (e) {\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.SEARCH\n });\n }\n\n searchSuggestions.push({\n value: query,\n type: SEARCH_TYPES.TAG\n });\n var apiSuggestions = suggestions[query] || [];\n\n if (apiSuggestions.length) {\n searchSuggestions = searchSuggestions.concat(apiSuggestions.filter(function (suggestion) {\n return suggestion !== query;\n }).map(function (suggestion) {\n // determine if it's a channel\n try {\n var _uri = normalizeURI(suggestion);\n\n var _parseURI4 = parseURI(_uri),\n _channelName = _parseURI4.channelName,\n _streamName = _parseURI4.streamName,\n _isChannel = _parseURI4.isChannel;\n\n return {\n value: _uri,\n shorthand: _isChannel ? _channelName : _streamName,\n type: _isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE\n };\n } catch (e) {\n // search result includes some character that isn't valid in claim names\n return {\n value: suggestion,\n type: SEARCH_TYPES.SEARCH\n };\n }\n }));\n }\n\n return searchSuggestions;\n}); // Creates a query string based on the state in the search reducer\n// Can be overrided by passing in custom sizes/from values for other areas pagination\n\nvar makeSelectQueryWithOptions = function makeSelectQueryWithOptions(customQuery, options) {\n return reselect.createSelector(selectSearchValue, selectSearchOptions, function (query, defaultOptions) {\n var searchOptions = _extends$1({}, defaultOptions, options);\n\n var queryString = getSearchQueryString(customQuery || query, searchOptions);\n return queryString;\n });\n};\n/* eslint-disable */\n// underscore's deep equal function\n// https://github.com/jashkenas/underscore/blob/master/underscore.js#L1189\n\n\nfunction isEqual(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b; // `null` or `undefined` only equal to itself (strict comparison).\n\n if (a == null || b == null) return false; // `NaN`s are equivalent, but non-reflexive.\n\n if (a !== a) return b !== b; // Exhaust primitive checks\n\n var type = _typeof(a);\n\n if (type !== 'function' && type !== 'object' && _typeof(b) != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\nfunction deepEq(a, b, aStack, bStack) {\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]': // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b; // An `egal` comparison is performed for other numeric values.\n\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n\n if (!areArrays) {\n if (_typeof(a) != 'object' || _typeof(b) != 'object') return false; // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n\n var aCtor = a.constructor,\n bCtor = b.constructor;\n\n if (aCtor !== bCtor && !(typeof aCtor === 'function' && aCtor instanceof aCtor && typeof bCtor === 'function' && bCtor instanceof bCtor) && 'constructor' in a && 'constructor' in b) {\n return false;\n }\n } // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n\n\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n } // Add the first object to the stack of traversed objects.\n\n\n aStack.push(a);\n bStack.push(b); // Recursively compare objects and arrays.\n\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false; // Deep compare the contents, ignoring non-numeric properties.\n\n while (length--) {\n if (!isEqual(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = Object.keys(a),\n key;\n length = keys.length; // Ensure that both objects contain the same number of properties before comparing deep equality.\n\n if (Object.keys(b).length !== length) return false;\n\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && isEqual(a[key], b[key], aStack, bStack))) return false;\n }\n } // Remove the first object from the stack of traversed objects.\n\n\n aStack.pop();\n bStack.pop();\n return true;\n}\n\nfunction has(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n}\n/* eslint-enable */\n\n\nvar _extends$2 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction extractUserState(rawObj) {\n if (rawObj && rawObj.version === '0.1' && rawObj.value) {\n var _rawObj$value = rawObj.value,\n subscriptions = _rawObj$value.subscriptions,\n tags = _rawObj$value.tags,\n blocked = _rawObj$value.blocked,\n _settings = _rawObj$value.settings;\n return _extends$2({}, subscriptions ? {\n subscriptions: subscriptions\n } : {}, tags ? {\n tags: tags\n } : {}, blocked ? {\n blocked: blocked\n } : {}, _settings ? {\n settings: _settings\n } : {});\n }\n\n return {};\n}\n\nfunction doPopulateSharedUserState(sharedSettings) {\n return function (dispatch) {\n var _extractUserState = extractUserState(sharedSettings),\n subscriptions = _extractUserState.subscriptions,\n tags = _extractUserState.tags,\n blocked = _extractUserState.blocked,\n settings = _extractUserState.settings;\n\n dispatch({\n type: USER_STATE_POPULATE,\n data: {\n subscriptions: subscriptions,\n tags: tags,\n blocked: blocked,\n settings: settings\n }\n });\n };\n}\n\nfunction doPreferenceSet(key, value, version, success, fail) {\n var preference = {\n type: _typeof(value),\n version: version,\n value: value\n };\n var options = {\n key: key,\n value: JSON.stringify(preference)\n };\n lbryProxy.preference_set(options).then(function () {\n success(preference);\n })[\"catch\"](function () {\n if (fail) {\n fail();\n }\n });\n}\n\nfunction doPreferenceGet(key, success, fail) {\n var options = {\n key: key\n };\n lbryProxy.preference_get(options).then(function (result) {\n if (result) {\n var preference = result[key];\n return success(preference);\n }\n\n return success(null);\n })[\"catch\"](function (err) {\n if (fail) {\n fail(err);\n }\n });\n} // \n\n\nvar SHARED_PREFERENCE_KEY = 'shared';\nvar SHARED_PREFERENCE_VERSION = '0.1';\nvar oldShared = {};\n\nvar buildSharedStateMiddleware = function buildSharedStateMiddleware(actions, sharedStateFilters, sharedStateCb) {\n return function (_ref) {\n var getState = _ref.getState,\n dispatch = _ref.dispatch;\n return function (next) {\n return function (action) {\n var currentState = getState(); // We don't care if sync is disabled here, we always want to backup preferences to the wallet\n\n if (!actions.includes(action.type)) {\n return next(action);\n }\n\n var actionResult = next(action); // Call `getState` after calling `next` to ensure the state has updated in response to the action\n\n var nextState = getState();\n var shared = {};\n Object.keys(sharedStateFilters).forEach(function (key) {\n var filter = sharedStateFilters[key];\n var source = filter.source,\n property = filter.property,\n transform = filter.transform;\n var value = nextState[source][property];\n\n if (transform) {\n value = transform(value);\n }\n\n shared[key] = value;\n });\n\n if (!isEqual(oldShared, shared)) {\n // only update if the preference changed from last call in the same session\n oldShared = shared;\n doPreferenceSet(SHARED_PREFERENCE_KEY, shared, SHARED_PREFERENCE_VERSION);\n }\n\n if (sharedStateCb) {\n // Pass dispatch to the callback to consumers can dispatch actions in response to preference set\n sharedStateCb({\n dispatch: dispatch,\n getState: getState\n });\n }\n\n return actionResult;\n };\n };\n };\n}; // \n\n\nfunction doToast(params) {\n if (!params) {\n throw Error(\"'params' object is required to create a toast notification\");\n }\n\n return {\n type: CREATE_TOAST,\n data: {\n id: uuid(),\n params: params\n }\n };\n}\n\nfunction doDismissToast() {\n return {\n type: DISMISS_TOAST\n };\n}\n\nfunction doError(error) {\n return {\n type: CREATE_ERROR,\n data: {\n error: error\n }\n };\n}\n\nfunction doDismissError() {\n return {\n type: DISMISS_ERROR\n };\n}\n\nvar selectState$1 = function selectState$1(state) {\n return state.wallet || {};\n};\n\nvar selectWalletState = selectState$1;\nvar selectWalletIsEncrypted = reselect.createSelector(selectState$1, function (state) {\n return state.walletIsEncrypted;\n});\nvar selectWalletEncryptPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptPending;\n});\nvar selectWalletEncryptSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptSucceded;\n});\nvar selectWalletEncryptResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletEncryptResult;\n});\nvar selectWalletDecryptPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptPending;\n});\nvar selectWalletDecryptSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptSucceded;\n});\nvar selectWalletDecryptResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletDecryptResult;\n});\nvar selectWalletUnlockPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockPending;\n});\nvar selectWalletUnlockSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockSucceded;\n});\nvar selectWalletUnlockResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletUnlockResult;\n});\nvar selectWalletLockPending = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockPending;\n});\nvar selectWalletLockSucceeded = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockSucceded;\n});\nvar selectWalletLockResult = reselect.createSelector(selectState$1, function (state) {\n return state.walletLockResult;\n});\nvar selectBalance = reselect.createSelector(selectState$1, function (state) {\n return state.balance;\n});\nvar selectTotalBalance = reselect.createSelector(selectState$1, function (state) {\n return state.totalBalance;\n});\nvar selectReservedBalance = reselect.createSelector(selectState$1, function (state) {\n return state.reservedBalance;\n});\nvar selectClaimsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.claimsBalance;\n});\nvar selectSupportsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.supportsBalance;\n});\nvar selectTipsBalance = reselect.createSelector(selectState$1, function (state) {\n return state.tipsBalance;\n});\nvar selectTransactionsById = reselect.createSelector(selectState$1, function (state) {\n return state.transactions || {};\n});\nvar selectSupportsByOutpoint = reselect.createSelector(selectState$1, function (state) {\n return state.supports || {};\n});\nvar selectTotalSupports = reselect.createSelector(selectSupportsByOutpoint, function (byOutpoint) {\n var total = parseFloat('0.0');\n Object.values(byOutpoint).forEach(function (support) {\n var amount = support.amount;\n total = amount ? total + parseFloat(amount) : total;\n });\n return total;\n});\nvar selectTransactionItems = reselect.createSelector(selectTransactionsById, function (byId) {\n var items = [];\n Object.keys(byId).forEach(function (txid) {\n var tx = byId[txid]; // ignore dust/fees\n // it is fee only txn if all infos are also empty\n\n if (Math.abs(tx.value) === Math.abs(tx.fee) && tx.claim_info.length === 0 && tx.support_info.length === 0 && tx.update_info.length === 0 && tx.abandon_info.length === 0) {\n return;\n }\n\n var append = [];\n append.push.apply(append, _toConsumableArray(tx.claim_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: item.claim_name[0] === '@' ? CHANNEL$1 : PUBLISH$1\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.support_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: !item.is_tip ? SUPPORT : TIP\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.update_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: UPDATE\n });\n })));\n append.push.apply(append, _toConsumableArray(tx.abandon_info.map(function (item) {\n return Object.assign({}, tx, item, {\n type: ABANDON\n });\n })));\n\n if (!append.length) {\n append.push(Object.assign({}, tx, {\n type: tx.value < 0 ? SPEND : RECEIVE\n }));\n }\n\n items.push.apply(items, _toConsumableArray(append.map(function (item) {\n // value on transaction, amount on outpoint\n // amount is always positive, but should match sign of value\n var balanceDelta = parseFloat(item.balance_delta);\n var value = parseFloat(item.value);\n var amount = balanceDelta || value;\n var fee = parseFloat(tx.fee);\n return {\n txid: txid,\n timestamp: tx.timestamp,\n date: tx.timestamp ? new Date(Number(tx.timestamp) * 1000) : null,\n amount: amount,\n fee: fee,\n claim_id: item.claim_id,\n claim_name: item.claim_name,\n type: item.type || SPEND,\n nout: item.nout,\n confirmations: tx.confirmations\n };\n })));\n });\n return items.sort(function (tx1, tx2) {\n if (!tx1.timestamp && !tx2.timestamp) {\n return 0;\n } else if (!tx1.timestamp && tx2.timestamp) {\n return -1;\n } else if (tx1.timestamp && !tx2.timestamp) {\n return 1;\n }\n\n return tx2.timestamp - tx1.timestamp;\n });\n});\nvar selectRecentTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n var threshold = new Date();\n threshold.setDate(threshold.getDate() - 7);\n return transactions.filter(function (transaction) {\n if (!transaction.date) {\n return true; // pending transaction\n }\n\n return transaction.date > threshold;\n });\n});\nvar selectHasTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n return transactions && transactions.length > 0;\n});\nvar selectIsFetchingTransactions = reselect.createSelector(selectState$1, function (state) {\n return state.fetchingTransactions;\n});\nvar selectIsSendingSupport = reselect.createSelector(selectState$1, function (state) {\n return state.sendingSupport;\n});\nvar selectReceiveAddress = reselect.createSelector(selectState$1, function (state) {\n return state.receiveAddress;\n});\nvar selectGettingNewAddress = reselect.createSelector(selectState$1, function (state) {\n return state.gettingNewAddress;\n});\nvar selectDraftTransaction = reselect.createSelector(selectState$1, function (state) {\n return state.draftTransaction || {};\n});\nvar selectDraftTransactionAmount = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.amount;\n});\nvar selectDraftTransactionAddress = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.address;\n});\nvar selectDraftTransactionError = reselect.createSelector(selectDraftTransaction, function (draft) {\n return draft.error;\n});\nvar selectBlocks = reselect.createSelector(selectState$1, function (state) {\n return state.blocks;\n});\nvar selectCurrentHeight = reselect.createSelector(selectState$1, function (state) {\n return state.latestBlock;\n});\nvar selectTransactionListFilter = reselect.createSelector(selectState$1, function (state) {\n return state.transactionListFilter || '';\n});\nvar selectFilteredTransactions = reselect.createSelector(selectTransactionItems, selectTransactionListFilter, function (transactions, filter) {\n return transactions.filter(function (transaction) {\n return filter === ALL || filter === transaction.type;\n });\n});\n\nvar makeSelectFilteredTransactionsForPage = function makeSelectFilteredTransactionsForPage() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return reselect.createSelector(selectFilteredTransactions, function (filteredTransactions) {\n var start = (Number(page) - 1) * Number(PAGE_SIZE$1);\n var end = Number(page) * Number(PAGE_SIZE$1);\n return filteredTransactions && filteredTransactions.length ? filteredTransactions.slice(start, end) : [];\n });\n};\n\nvar makeSelectLatestTransactions = reselect.createSelector(selectTransactionItems, function (transactions) {\n return transactions && transactions.length ? transactions.slice(0, LATEST_PAGE_SIZE) : [];\n});\nvar selectFilteredTransactionCount = reselect.createSelector(selectFilteredTransactions, function (filteredTransactions) {\n return filteredTransactions.length;\n});\nvar selectIsWalletReconnecting = reselect.createSelector(selectState$1, function (state) {\n return state.walletReconnecting;\n});\n\nvar _extends$3 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$1(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar matureTagMap = MATURE_TAGS.reduce(function (acc, tag) {\n return _extends$3({}, acc, _defineProperty({}, tag, true));\n}, {});\n\nvar isClaimNsfw = function isClaimNsfw(claim) {\n if (!claim) {\n throw new Error('No claim passed to isClaimNsfw()');\n }\n\n if (!claim.value) {\n return false;\n }\n\n var tags = claim.value.tags || [];\n\n for (var i = 0; i < tags.length; i += 1) {\n var tag = tags[i].toLowerCase();\n\n if (matureTagMap[tag]) {\n return true;\n }\n }\n\n return false;\n};\n\nfunction createNormalizedClaimSearchKey(options) {\n // Ignore page because we don't care what the last page searched was, we want everything\n // Ignore release_time because that will change depending on when you call claim_search ex: release_time: \">12344567\"\n var rest = _objectWithoutProperties$1(options, ['page', 'release_time']);\n\n var query = JSON.stringify(rest);\n return query;\n}\n\nfunction concatClaims() {\n var claimList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var concatClaimList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n if (!claimList || claimList.length === 0) {\n if (!concatClaimList) {\n return [];\n }\n\n return concatClaimList.slice();\n }\n\n var claims = claimList.slice();\n concatClaimList.forEach(function (claim) {\n if (!claims.some(function (item) {\n return item.claim_id === claim.claim_id;\n })) {\n claims.push(claim);\n }\n });\n return claims;\n}\n\nvar _extends$4 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState$2 = function selectState$2(state) {\n return state.claims || {};\n};\n\nvar selectClaimsById = reselect.createSelector(selectState$2, function (state) {\n return state.byId || {};\n});\nvar selectCurrentChannelPage = reselect.createSelector(selectState$2, function (state) {\n return state.currentChannelPage || 1;\n});\nvar selectCreatingChannel = reselect.createSelector(selectState$2, function (state) {\n return state.creatingChannel;\n});\nvar selectCreateChannelError = reselect.createSelector(selectState$2, function (state) {\n return state.createChannelError;\n});\nvar selectClaimsByUri = reselect.createSelector(selectState$2, selectClaimsById, function (state, byId) {\n var byUri = state.claimsByUri || {};\n var claims = {};\n Object.keys(byUri).forEach(function (uri) {\n var claimId = byUri[uri]; // NOTE returning a null claim allows us to differentiate between an\n // undefined (never fetched claim) and one which just doesn't exist. Not\n // the cleanest solution but couldn't think of anything better right now\n\n if (claimId === null) {\n claims[uri] = null;\n } else {\n claims[uri] = byId[claimId];\n }\n });\n return claims;\n});\nvar selectAllClaimsByChannel = reselect.createSelector(selectState$2, function (state) {\n return state.paginatedClaimsByChannel || {};\n});\nvar selectPendingById = reselect.createSelector(selectState$2, function (state) {\n return state.pendingById || {};\n});\nvar selectPendingClaims = reselect.createSelector(selectState$2, function (state) {\n return Object.values(state.pendingById || []);\n});\n\nvar makeSelectClaimIsPending = function makeSelectClaimIsPending(uri) {\n return reselect.createSelector(selectPendingById, function (pendingById) {\n var claimId;\n\n try {\n var _parseURI5 = parseURI(uri),\n isChannel = _parseURI5.isChannel,\n channelClaimId = _parseURI5.channelClaimId,\n streamClaimId = _parseURI5.streamClaimId;\n\n claimId = isChannel ? channelClaimId : streamClaimId;\n } catch (e) {}\n\n if (claimId) {\n return Boolean(pendingById[claimId]);\n }\n });\n};\n\nvar makeSelectPendingByUri = function makeSelectPendingByUri(uri) {\n return reselect.createSelector(selectPendingById, function (pendingById) {\n var _parseURI6 = parseURI(uri),\n isChannel = _parseURI6.isChannel,\n channelClaimId = _parseURI6.channelClaimId,\n streamClaimId = _parseURI6.streamClaimId;\n\n var claimId = isChannel ? channelClaimId : streamClaimId;\n return pendingById[claimId];\n });\n};\n\nvar makeSelectClaimForUri = function makeSelectClaimForUri(uri) {\n return reselect.createSelector(selectClaimsByUri, selectPendingById, function (byUri, pendingById) {\n // Check if a claim is pending first\n // It won't be in claimsByUri because resolving it will return nothing\n var valid;\n var channelClaimId;\n var streamClaimId;\n var isChannel;\n\n try {\n var _parseURI7 = parseURI(uri);\n\n isChannel = _parseURI7.isChannel;\n channelClaimId = _parseURI7.channelClaimId;\n streamClaimId = _parseURI7.streamClaimId;\n valid = true;\n } catch (e) {}\n\n if (valid && byUri) {\n var claimId = isChannel ? channelClaimId : streamClaimId;\n var pendingClaim = pendingById[claimId];\n\n if (pendingClaim) {\n return pendingClaim;\n }\n\n var _claim = byUri[normalizeURI(uri)];\n\n if (_claim === undefined || _claim === null) {\n // Make sure to return the claim as is so apps can check if it's been resolved before (null) or still needs to be resolved (undefined)\n return _claim;\n }\n\n var repostedClaim = _claim.reposted_claim;\n\n if (repostedClaim) {\n var channelUrl = _claim.signing_channel && _claim.signing_channel.canonical_url;\n return _extends$4({}, repostedClaim, {\n repost_channel_url: channelUrl\n });\n } else {\n return _claim;\n }\n }\n });\n};\n\nvar selectMyClaimsRaw = reselect.createSelector(selectState$2, function (state) {\n return state.myClaims;\n});\nvar selectAbandoningIds = reselect.createSelector(selectState$2, function (state) {\n return Object.keys(state.abandoningById || {});\n});\nvar selectMyActiveClaims = reselect.createSelector(selectMyClaimsRaw, selectAbandoningIds, function (claims, abandoningIds) {\n return new Set(claims && claims.map(function (claim) {\n return claim.claim_id;\n }).filter(function (claimId) {\n return Object.keys(abandoningIds).indexOf(claimId) === -1;\n }));\n});\n\nvar makeSelectClaimIsMine = function makeSelectClaimIsMine(rawUri) {\n var uri;\n\n try {\n uri = normalizeURI(rawUri);\n } catch (e) {}\n\n return reselect.createSelector(selectClaimsByUri, selectMyActiveClaims, function (claims, myClaims) {\n try {\n parseURI(uri);\n } catch (e) {\n return false;\n }\n\n return claims && claims[uri] && claims[uri].claim_id && myClaims.has(claims[uri].claim_id);\n });\n};\n\nvar selectAllFetchingChannelClaims = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingChannelClaims || {};\n});\n\nvar makeSelectFetchingChannelClaims = function makeSelectFetchingChannelClaims(uri) {\n return reselect.createSelector(selectAllFetchingChannelClaims, function (fetching) {\n return fetching && fetching[uri];\n });\n};\n\nvar makeSelectClaimsInChannelForPage = function makeSelectClaimsInChannelForPage(uri, page) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return claimIds;\n return claimIds.map(function (claimId) {\n return byId[claimId];\n });\n });\n};\n\nvar makeSelectTotalClaimsInChannelSearch = function makeSelectTotalClaimsInChannelSearch(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n return byChannel['itemCount'];\n });\n};\n\nvar makeSelectTotalPagesInChannelSearch = function makeSelectTotalPagesInChannelSearch(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, function (byId, allClaims) {\n var byChannel = allClaims[uri] || {};\n return byChannel['pageCount'];\n });\n};\n\nvar makeSelectClaimsInChannelForCurrentPageState = function makeSelectClaimsInChannelForCurrentPageState(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, selectCurrentChannelPage, function (byId, allClaims, page) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return claimIds;\n return claimIds.map(function (claimId) {\n return byId[claimId];\n });\n });\n};\n\nvar makeSelectMetadataForUri = function makeSelectMetadataForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var metadata = claim && claim.value;\n return metadata || (claim === undefined ? undefined : null);\n });\n};\n\nvar makeSelectMetadataItemForUri = function makeSelectMetadataItemForUri(uri, key) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata ? metadata[key] : undefined;\n });\n};\n\nvar makeSelectTitleForUri = function makeSelectTitleForUri(uri) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata && metadata.title;\n });\n};\n\nvar makeSelectDateForUri = function makeSelectDateForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var timestamp = claim && claim.value && (claim.value.release_time ? claim.value.release_time * 1000 : claim.meta && claim.meta.creation_timestamp ? claim.meta.creation_timestamp * 1000 : null);\n\n if (!timestamp) {\n return undefined;\n }\n\n var dateObj = new Date(timestamp);\n return dateObj;\n });\n};\n\nvar makeSelectAmountForUri = function makeSelectAmountForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.amount;\n });\n};\n\nvar makeSelectContentTypeForUri = function makeSelectContentTypeForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var source = claim && claim.value && claim.value.source;\n return source ? source.media_type : undefined;\n });\n};\n\nvar makeSelectThumbnailForUri = function makeSelectThumbnailForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var thumbnail = claim && claim.value && claim.value.thumbnail;\n return thumbnail && thumbnail.url ? thumbnail.url.trim() : undefined;\n });\n};\n\nvar makeSelectCoverForUri = function makeSelectCoverForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n var cover = claim && claim.value && claim.value.cover;\n return cover && cover.url ? cover.url.trim() : undefined;\n });\n};\n\nvar selectIsFetchingClaimListMine = reselect.createSelector(selectState$2, function (state) {\n return state.isFetchingClaimListMine;\n});\nvar selectMyClaims = reselect.createSelector(selectMyActiveClaims, selectClaimsById, selectAbandoningIds, selectPendingClaims, function (myClaimIds, byId, abandoningIds, pendingClaims) {\n var claims = [];\n myClaimIds.forEach(function (id) {\n var claim = byId[id];\n if (claim && abandoningIds.indexOf(id) === -1) claims.push(claim);\n });\n return [].concat(claims, _toConsumableArray(pendingClaims));\n});\nvar selectMyClaimsWithoutChannels = reselect.createSelector(selectMyClaims, function (myClaims) {\n return myClaims.filter(function (claim) {\n return !claim.name.match(/^@/);\n }).sort(function (a, b) {\n return a.timestamp - b.timestamp;\n });\n});\nvar selectMyClaimUrisWithoutChannels = reselect.createSelector(selectMyClaimsWithoutChannels, function (myClaims) {\n return myClaims.sort(function (a, b) {\n if (!a.timestamp) {\n return -1;\n } else if (!b.timestamp) {\n return 1;\n } else {\n return b.timestamp - a.timestamp;\n }\n }).map(function (claim) {\n return \"lbry://\".concat(claim.name, \"#\").concat(claim.claim_id);\n });\n});\nvar selectAllMyClaimsByOutpoint = reselect.createSelector(selectMyClaimsRaw, function (claims) {\n return new Set(claims && claims.length ? claims.map(function (claim) {\n return \"\".concat(claim.txid, \":\").concat(claim.nout);\n }) : null);\n});\nvar selectMyClaimsOutpoints = reselect.createSelector(selectMyClaims, function (myClaims) {\n var outpoints = [];\n myClaims.forEach(function (claim) {\n return outpoints.push(\"\".concat(claim.txid, \":\").concat(claim.nout));\n });\n return outpoints;\n});\nvar selectFetchingMyChannels = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingMyChannels;\n});\nvar selectMyChannelClaims = reselect.createSelector(selectState$2, selectClaimsById, function (state, byId) {\n var ids = state.myChannelClaims;\n\n if (!ids) {\n return ids;\n }\n\n var claims = [];\n ids.forEach(function (id) {\n if (byId[id]) {\n // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544\n claims.push(byId[id]);\n }\n });\n return claims;\n});\nvar selectResolvingUris = reselect.createSelector(selectState$2, function (state) {\n return state.resolvingUris || [];\n});\nvar selectChannelImportPending = reselect.createSelector(selectState$2, function (state) {\n return state.pendingChannelImport;\n});\n\nvar makeSelectIsUriResolving = function makeSelectIsUriResolving(uri) {\n return reselect.createSelector(selectResolvingUris, function (resolvingUris) {\n return resolvingUris && resolvingUris.indexOf(uri) !== -1;\n });\n};\n\nvar selectPlayingUri = reselect.createSelector(selectState$2, function (state) {\n return state.playingUri;\n});\nvar selectChannelClaimCounts = reselect.createSelector(selectState$2, function (state) {\n return state.channelClaimCounts || {};\n});\n\nvar makeSelectTotalItemsForChannel = function makeSelectTotalItemsForChannel(uri) {\n return reselect.createSelector(selectChannelClaimCounts, function (byUri) {\n return byUri && byUri[uri];\n });\n};\n\nvar makeSelectTotalPagesForChannel = function makeSelectTotalPagesForChannel(uri) {\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n return reselect.createSelector(selectChannelClaimCounts, function (byUri) {\n return byUri && byUri[uri] && Math.ceil(byUri[uri] / pageSize);\n });\n};\n\nvar makeSelectNsfwCountFromUris = function makeSelectNsfwCountFromUris(uris) {\n return reselect.createSelector(selectClaimsByUri, function (claims) {\n return uris.reduce(function (acc, uri) {\n var claim = claims[uri];\n\n if (claim && isClaimNsfw(claim)) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n });\n};\n\nvar makeSelectNsfwCountForChannel = function makeSelectNsfwCountForChannel(uri) {\n return reselect.createSelector(selectClaimsById, selectAllClaimsByChannel, selectCurrentChannelPage, function (byId, allClaims, page) {\n var byChannel = allClaims[uri] || {};\n var claimIds = byChannel[page || 1];\n if (!claimIds) return 0;\n return claimIds.reduce(function (acc, claimId) {\n var claim = byId[claimId];\n\n if (isClaimNsfw(claim)) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n });\n};\n\nvar makeSelectOmittedCountForChannel = function makeSelectOmittedCountForChannel(uri) {\n return reselect.createSelector(makeSelectTotalItemsForChannel(uri), makeSelectTotalClaimsInChannelSearch(uri), function (claimsInChannel, claimsInSearch) {\n if (claimsInChannel && typeof claimsInSearch === 'number' && claimsInSearch >= 0) {\n return claimsInChannel - claimsInSearch;\n } else return 0;\n });\n};\n\nvar makeSelectClaimIsNsfw = function makeSelectClaimIsNsfw(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), // Eventually these will come from some list of tags that are considered adult\n // Or possibly come from users settings of what tags they want to hide\n // For now, there is just a hard coded list of tags inside `isClaimNsfw`\n // selectNaughtyTags(),\n function (claim) {\n if (!claim) {\n return false;\n }\n\n return isClaimNsfw(claim);\n });\n};\n\nvar makeSelectRecommendedContentForUri = function makeSelectRecommendedContentForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), selectSearchUrisByQuery, makeSelectClaimIsNsfw(uri), function (claim, searchUrisByQuery, isMature) {\n var atVanityURI = !uri.includes('#');\n var recommendedContent;\n\n if (claim) {\n // always grab full URL - this can change once search returns canonical\n var currentUri = buildURI({\n streamClaimId: claim.claim_id,\n streamName: claim.name\n });\n var title = claim.value.title;\n\n if (!title) {\n return;\n }\n\n var options = {\n related_to: claim.claim_id,\n isBackgroundSearch: true\n };\n\n if (!isMature) {\n options['nsfw'] = false;\n }\n\n var searchQuery = getSearchQueryString(title.replace(/\\//, ' '), options);\n var searchUris = searchUrisByQuery[searchQuery];\n\n if (searchUris) {\n searchUris = searchUris.filter(function (searchUri) {\n return searchUri !== currentUri;\n });\n recommendedContent = searchUris;\n }\n }\n\n return recommendedContent;\n });\n};\n\nvar makeSelectFirstRecommendedFileForUri = function makeSelectFirstRecommendedFileForUri(uri) {\n return reselect.createSelector(makeSelectRecommendedContentForUri(uri), function (recommendedContent) {\n return recommendedContent ? recommendedContent[0] : null;\n });\n}; // Returns the associated channel uri for a given claim uri\n// accepts a regular claim uri lbry://something\n// returns the channel uri that created this claim lbry://@channel\n\n\nvar makeSelectChannelForClaimUri = function makeSelectChannelForClaimUri(uri) {\n var includePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n if (!claim || !claim.signing_channel || !claim.signing_channel.canonical_url) {\n return null;\n }\n\n var canonicalUrl = claim.signing_channel.canonical_url;\n return includePrefix ? canonicalUrl : canonicalUrl.slice('lbry://'.length);\n });\n};\n\nvar makeSelectTagsForUri = function makeSelectTagsForUri(uri) {\n return reselect.createSelector(makeSelectMetadataForUri(uri), function (metadata) {\n return metadata && metadata.tags || [];\n });\n};\n\nvar selectFetchingClaimSearchByQuery = reselect.createSelector(selectState$2, function (state) {\n return state.fetchingClaimSearchByQuery || {};\n});\nvar selectFetchingClaimSearch = reselect.createSelector(selectFetchingClaimSearchByQuery, function (fetchingClaimSearchByQuery) {\n return Boolean(Object.keys(fetchingClaimSearchByQuery).length);\n});\nvar selectClaimSearchByQuery = reselect.createSelector(selectState$2, function (state) {\n return state.claimSearchByQuery || {};\n});\nvar selectClaimSearchByQueryLastPageReached = reselect.createSelector(selectState$2, function (state) {\n return state.claimSearchByQueryLastPageReached || {};\n});\n\nvar makeSelectShortUrlForUri = function makeSelectShortUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.short_url;\n });\n};\n\nvar makeSelectCanonicalUrlForUri = function makeSelectCanonicalUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.canonical_url;\n });\n};\n\nvar makeSelectPermanentUrlForUri = function makeSelectPermanentUrlForUri(uri) {\n return reselect.createSelector(makeSelectClaimForUri(uri), function (claim) {\n return claim && claim.permanent_url;\n });\n};\n\nvar makeSelectSupportsForUri = function makeSelectSupportsForUri(uri) {\n return reselect.createSelector(selectSupportsByOutpoint, makeSelectClaimForUri(uri), function (byOutpoint, claim) {\n if (!claim || !claim.is_mine) {\n return null;\n }\n\n var claimId = claim.claim_id;\n var total = 0;\n Object.values(byOutpoint).forEach(function (support) {\n // $FlowFixMe\n var claim_id = support.claim_id,\n amount = support.amount;\n total = claim_id === claimId && amount ? total + parseFloat(amount) : total;\n });\n return total;\n });\n};\n\nvar selectUpdatingChannel = reselect.createSelector(selectState$2, function (state) {\n return state.updatingChannel;\n});\nvar selectUpdateChannelError = reselect.createSelector(selectState$2, function (state) {\n return state.updateChannelError;\n});\n\nvar makeSelectMyStreamUrlsForPage = function makeSelectMyStreamUrlsForPage() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return reselect.createSelector(selectMyClaimUrisWithoutChannels, function (urls) {\n var start = (Number(page) - 1) * Number(PAGE_SIZE);\n var end = Number(page) * Number(PAGE_SIZE);\n return urls && urls.length ? urls.slice(start, end) : [];\n });\n};\n\nvar selectMyStreamUrlsCount = reselect.createSelector(selectMyClaimUrisWithoutChannels, function (channels) {\n return channels.length;\n});\n\nvar makeSelectResolvedRecommendedContentForUri = function makeSelectResolvedRecommendedContentForUri(uri, size) {\n return reselect.createSelector(makeSelectClaimForUri(uri), selectResolvedSearchResultsByQuery, makeSelectClaimIsNsfw(uri), function (claim, resolvedResultsByQuery, isMature) {\n var atVanityURI = !uri.includes('#');\n var recommendedContent;\n\n if (claim) {\n // always grab full URL - this can change once search returns canonical\n var currentUri = buildURI({\n streamClaimId: claim.claim_id,\n streamName: claim.name\n });\n var title = claim.value.title;\n\n if (!title) {\n return;\n }\n\n var options = {\n related_to: claim.claim_id,\n isBackgroundSearch: true\n };\n\n if (!isMature) {\n options['nsfw'] = false;\n }\n\n var searchQuery = getSearchQueryString(title.replace(/\\//, ' '), options);\n var results = resolvedResultsByQuery[searchQuery];\n\n if (results) {\n results = results.filter(function (result) {\n return buildURI({\n streamClaimId: result.claimId,\n streamName: result.name\n }) !== currentUri;\n });\n recommendedContent = results;\n }\n }\n\n return recommendedContent;\n });\n};\n\nfunction numberWithCommas(x) {\n var parts = x.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nfunction formatCredits(amount, precision) {\n var shortFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var actualAmount = parseFloat(amount);\n var actualPrecision = parseFloat(precision);\n var suffix = '';\n if (Number.isNaN(actualAmount) || actualAmount === 0) return '0';\n\n if (actualAmount >= 1000000) {\n if (precision <= 7) {\n if (shortFormat) {\n actualAmount = actualAmount / 1000000;\n suffix = 'M';\n } else {\n actualPrecision -= 7;\n }\n }\n } else if (actualAmount >= 1000) {\n if (precision <= 4) {\n if (shortFormat) {\n actualAmount = actualAmount / 1000;\n suffix = 'K';\n } else {\n actualPrecision -= 4;\n }\n }\n }\n\n return numberWithCommas(actualAmount.toFixed(actualPrecision >= 0 ? actualPrecision : 1).replace(/\\.*0+$/, '')) + suffix;\n}\n\nfunction formatFullPrice(amount) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var formated = '';\n var quantity = amount.toString().split('.');\n var fraction = quantity[1];\n\n if (fraction) {\n var decimals = fraction.split('');\n var first = decimals.filter(function (number) {\n return number !== '0';\n })[0];\n var index = decimals.indexOf(first); // Set format fraction\n\n formated = \".\".concat(fraction.substring(0, index + precision));\n }\n\n return parseFloat(quantity[0] + formated);\n}\n\nfunction creditsToString(amount) {\n var creditString = parseFloat(amount).toFixed(8);\n return creditString;\n}\n\nvar walletBalancePromise = null;\n\nfunction doUpdateBalance() {\n return function (dispatch, getState) {\n var _getState = getState(),\n totalInStore = _getState.wallet.totalBalance;\n\n if (walletBalancePromise === null) {\n walletBalancePromise = lbryProxy.wallet_balance().then(function (response) {\n walletBalancePromise = null;\n var available = response.available,\n reserved = response.reserved,\n reserved_subtotals = response.reserved_subtotals,\n total = response.total;\n var claims = reserved_subtotals.claims,\n supports = reserved_subtotals.supports,\n tips = reserved_subtotals.tips;\n var totalFloat = parseFloat(total);\n\n if (totalInStore !== totalFloat) {\n dispatch({\n type: UPDATE_BALANCE,\n data: {\n totalBalance: totalFloat,\n balance: parseFloat(available),\n reservedBalance: parseFloat(reserved),\n claimsBalance: parseFloat(claims),\n supportsBalance: parseFloat(supports),\n tipsBalance: parseFloat(tips)\n }\n });\n }\n })[\"catch\"](function () {\n walletBalancePromise = null;\n });\n }\n\n return walletBalancePromise;\n };\n}\n\nfunction doBalanceSubscribe() {\n return function (dispatch) {\n dispatch(doUpdateBalance());\n setInterval(function () {\n return dispatch(doUpdateBalance());\n }, 5000);\n };\n}\n\nfunction doFetchTransactions() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch(doFetchSupports());\n dispatch({\n type: FETCH_TRANSACTIONS_STARTED\n });\n lbryProxy.utxo_release().then(function () {\n return lbryProxy.transaction_list({\n page: page,\n page_size: pageSize\n });\n }).then(function (result) {\n dispatch({\n type: FETCH_TRANSACTIONS_COMPLETED,\n data: {\n transactions: result.items\n }\n });\n });\n };\n}\n\nfunction doFetchSupports() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch({\n type: FETCH_SUPPORTS_STARTED\n });\n lbryProxy.support_list({\n page: page,\n page_size: pageSize\n }).then(function (result) {\n dispatch({\n type: FETCH_SUPPORTS_COMPLETED,\n data: {\n supports: result.items\n }\n });\n });\n };\n}\n\nfunction doGetNewAddress() {\n return function (dispatch) {\n dispatch({\n type: GET_NEW_ADDRESS_STARTED\n });\n lbryProxy.address_unused().then(function (address) {\n dispatch({\n type: GET_NEW_ADDRESS_COMPLETED,\n data: {\n address: address\n }\n });\n });\n };\n}\n\nfunction doCheckAddressIsMine(address) {\n return function (dispatch) {\n dispatch({\n type: CHECK_ADDRESS_IS_MINE_STARTED\n });\n lbryProxy.address_is_mine({\n address: address\n }).then(function (isMine) {\n if (!isMine) dispatch(doGetNewAddress());\n dispatch({\n type: CHECK_ADDRESS_IS_MINE_COMPLETED\n });\n });\n };\n}\n\nfunction doSendDraftTransaction(address, amount) {\n return function (dispatch, getState) {\n var state = getState();\n var balance = selectBalance(state);\n\n if (balance - amount <= 0) {\n dispatch(doToast({\n title: 'Insufficient credits',\n message: 'Insufficient credits'\n }));\n return;\n }\n\n dispatch({\n type: SEND_TRANSACTION_STARTED\n });\n\n var successCallback = function successCallback(response) {\n if (response.txid) {\n dispatch({\n type: SEND_TRANSACTION_COMPLETED\n });\n dispatch(doToast({\n message: \"You sent \".concat(amount, \" LBC\"),\n linkText: 'History',\n linkTarget: '/wallet'\n }));\n } else {\n dispatch({\n type: SEND_TRANSACTION_FAILED,\n data: {\n error: response\n }\n });\n dispatch(doToast({\n message: 'Transaction failed',\n isError: true\n }));\n }\n };\n\n var errorCallback = function errorCallback(error) {\n dispatch({\n type: SEND_TRANSACTION_FAILED,\n data: {\n error: error.message\n }\n });\n dispatch(doToast({\n message: 'Transaction failed',\n isError: true\n }));\n };\n\n lbryProxy.wallet_send({\n addresses: [address],\n amount: creditsToString(amount)\n }).then(successCallback, errorCallback);\n };\n}\n\nfunction doSetDraftTransactionAmount(amount) {\n return {\n type: SET_DRAFT_TRANSACTION_AMOUNT,\n data: {\n amount: amount\n }\n };\n}\n\nfunction doSetDraftTransactionAddress(address) {\n return {\n type: SET_DRAFT_TRANSACTION_ADDRESS,\n data: {\n address: address\n }\n };\n}\n\nfunction doSendTip(amount, claimId, isSupport, successCallback, errorCallback) {\n return function (dispatch, getState) {\n var state = getState();\n var balance = selectBalance(state);\n var myClaims = selectMyClaimsRaw(state);\n var shouldSupport = isSupport || (myClaims ? myClaims.find(function (claim) {\n return claim.claim_id === claimId;\n }) : false);\n\n if (balance - amount <= 0) {\n dispatch(doToast({\n message: __('Insufficient credits'),\n isError: true\n }));\n return;\n }\n\n var success = function success() {\n dispatch(doToast({\n message: shouldSupport ? __('You deposited %amount% LBC as a support!', {\n amount: amount\n }) : __('You sent %amount% LBC as a tip, Mahalo!', {\n amount: amount\n }),\n linkText: __('History'),\n linkTarget: __('/wallet')\n }));\n dispatch({\n type: SUPPORT_TRANSACTION_COMPLETED\n });\n\n if (successCallback) {\n successCallback();\n }\n };\n\n var error = function error(err) {\n dispatch(doToast({\n message: __(\"There was an error sending support funds.\"),\n isError: true\n }));\n dispatch({\n type: SUPPORT_TRANSACTION_FAILED,\n data: {\n error: err\n }\n });\n\n if (errorCallback) {\n errorCallback();\n }\n };\n\n dispatch({\n type: SUPPORT_TRANSACTION_STARTED\n });\n lbryProxy.support_create({\n claim_id: claimId,\n amount: creditsToString(amount),\n tip: !shouldSupport,\n blocking: true\n }).then(success, error);\n };\n}\n\nfunction doClearSupport() {\n return {\n type: CLEAR_SUPPORT_TRANSACTION\n };\n}\n\nfunction doWalletEncrypt(newPassword) {\n return function (dispatch) {\n dispatch({\n type: WALLET_ENCRYPT_START\n });\n lbryProxy.wallet_encrypt({\n new_password: newPassword\n }).then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_ENCRYPT_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_ENCRYPT_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doWalletUnlock(password) {\n return function (dispatch) {\n dispatch({\n type: WALLET_UNLOCK_START\n });\n lbryProxy.wallet_unlock({\n password: password\n }).then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_UNLOCK_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_UNLOCK_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doWalletReconnect() {\n return function (dispatch) {\n dispatch({\n type: WALLET_RESTART\n }); // this basically returns null when it's done. :(\n // might be good to dispatch ACTIONS.WALLET_RESTARTED\n\n lbryProxy.wallet_reconnect().then(function () {\n return dispatch({\n type: WALLET_RESTART_COMPLETED\n });\n });\n };\n}\n\nfunction doWalletDecrypt() {\n return function (dispatch) {\n dispatch({\n type: WALLET_DECRYPT_START\n });\n lbryProxy.wallet_decrypt().then(function (result) {\n if (result === true) {\n dispatch({\n type: WALLET_DECRYPT_COMPLETED,\n result: result\n });\n } else {\n dispatch({\n type: WALLET_DECRYPT_FAILED,\n result: result\n });\n }\n });\n };\n}\n\nfunction doWalletStatus() {\n return function (dispatch) {\n dispatch({\n type: WALLET_STATUS_START\n });\n lbryProxy.wallet_status().then(function (status) {\n if (status) {\n dispatch({\n type: WALLET_STATUS_COMPLETED,\n result: status.is_encrypted\n });\n }\n });\n };\n}\n\nfunction doSetTransactionListFilter(filterOption) {\n return {\n type: SET_TRANSACTION_LIST_FILTER,\n data: filterOption\n };\n}\n\nfunction doUpdateBlockHeight() {\n return function (dispatch) {\n return lbryProxy.status().then(function (status) {\n if (status.wallet) {\n dispatch({\n type: UPDATE_CURRENT_HEIGHT,\n data: status.wallet.blocks\n });\n }\n });\n };\n} // https://github.com/reactjs/redux/issues/911\n\n\nfunction batchActions() {\n for (var _len = arguments.length, actions = new Array(_len), _key = 0; _key < _len; _key++) {\n actions[_key] = arguments[_key];\n }\n\n return {\n type: 'BATCH_ACTIONS',\n actions: actions\n };\n}\n\nvar _extends$5 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction doResolveUris(uris) {\n var returnCachedClaims = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return function (dispatch, getState) {\n var normalizedUris = uris.map(normalizeURI);\n var state = getState();\n var resolvingUris = selectResolvingUris(state);\n var claimsByUri = selectClaimsByUri(state);\n var urisToResolve = normalizedUris.filter(function (uri) {\n if (resolvingUris.includes(uri)) {\n return false;\n }\n\n return returnCachedClaims ? !claimsByUri[uri] : true;\n });\n\n if (urisToResolve.length === 0) {\n return;\n }\n\n dispatch({\n type: RESOLVE_URIS_STARTED,\n data: {\n uris: normalizedUris\n }\n });\n var resolveInfo = {};\n lbryProxy.resolve({\n urls: urisToResolve\n }).then(function (result) {\n Object.entries(result).forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n uri = _ref3[0],\n uriResolveInfo = _ref3[1];\n\n var fallbackResolveInfo = {\n stream: null,\n claimsInChannel: null,\n channel: null\n }; // Flow has terrible Object.entries support\n // https://github.com/facebook/flow/issues/2221\n\n if (uriResolveInfo) {\n if (uriResolveInfo.error) {\n resolveInfo[uri] = _extends$5({}, fallbackResolveInfo);\n } else {\n var _result = {};\n\n if (uriResolveInfo.value_type === 'channel') {\n _result.channel = uriResolveInfo; // $FlowFixMe\n\n _result.claimsInChannel = uriResolveInfo.meta.claims_in_channel;\n } else {\n _result.stream = uriResolveInfo;\n\n if (uriResolveInfo.signing_channel) {\n _result.channel = uriResolveInfo.signing_channel;\n _result.claimsInChannel = uriResolveInfo.signing_channel.meta && uriResolveInfo.signing_channel.meta.claims_in_channel || 0;\n }\n } // $FlowFixMe\n\n\n resolveInfo[uri] = _result;\n }\n }\n });\n dispatch({\n type: RESOLVE_URIS_COMPLETED,\n data: {\n resolveInfo: resolveInfo\n }\n });\n });\n };\n}\n\nfunction doResolveUri(uri) {\n return doResolveUris([uri]);\n}\n\nfunction doFetchClaimListMine() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_STARTED\n });\n lbryProxy.stream_list({\n page: page,\n page_size: pageSize\n }).then(function (result) {\n var claims = result.items;\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_COMPLETED,\n data: {\n claims: claims\n }\n });\n });\n };\n}\n\nfunction doAbandonClaim(txid, nout) {\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n return function (dispatch, getState) {\n var state = getState();\n var myClaims = selectMyClaimsRaw(state);\n var mySupports = selectSupportsByOutpoint(state); // A user could be trying to abandon a support or one of their claims\n\n var claimToAbandon = myClaims.find(function (claim) {\n return claim.txid === txid && claim.nout === nout;\n });\n var supportToAbandon = mySupports[outpoint];\n\n if (!claimToAbandon && !supportToAbandon) {\n console.error('No associated support or claim with txid: ', txid);\n return;\n }\n\n var data = claimToAbandon ? {\n claimId: claimToAbandon.claim_id\n } : {\n outpoint: \"\".concat(supportToAbandon.txid, \":\").concat(supportToAbandon.nout)\n };\n var isClaim = !!claimToAbandon;\n var startedActionType = isClaim ? ABANDON_CLAIM_STARTED : ABANDON_SUPPORT_STARTED;\n var completedActionType = isClaim ? ABANDON_CLAIM_SUCCEEDED : ABANDON_SUPPORT_COMPLETED;\n dispatch({\n type: startedActionType,\n data: data\n });\n\n var errorCallback = function errorCallback() {\n dispatch(doToast({\n message: isClaim ? 'Error abandoning your claim/support' : 'Error unlocking your tip',\n isError: true\n }));\n };\n\n var successCallback = function successCallback() {\n dispatch({\n type: completedActionType,\n data: data\n });\n var abandonMessage;\n\n if (isClaim) {\n abandonMessage = 'Successfully abandoned your claim.';\n } else if (supportToAbandon) {\n abandonMessage = 'Successfully abandoned your support.';\n } else {\n abandonMessage = 'Successfully unlocked your tip!';\n }\n\n dispatch(doToast({\n message: abandonMessage\n })); // After abandoning, fetch transactions to show the new abandon transaction\n // Only fetch the latest few transactions since we don't care about old ones\n // Not very robust, but better than calling the entire list for large wallets\n\n var page = 1;\n var pageSize = 10;\n dispatch(doFetchTransactions(page, pageSize));\n };\n\n var abandonParams = {\n txid: txid,\n nout: nout,\n blocking: true\n };\n var method;\n\n if (supportToAbandon) {\n method = 'support_abandon';\n } else if (claimToAbandon) {\n var claimName = claimToAbandon.name;\n method = claimName.startsWith('@') ? 'channel_abandon' : 'stream_abandon';\n }\n\n if (!method) {\n console.error('No \"method\" chosen for claim or support abandon');\n return;\n }\n\n lbryProxy[method](abandonParams).then(successCallback, errorCallback);\n };\n}\n\nfunction doFetchClaimsByChannel(uri) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return function (dispatch) {\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_STARTED,\n data: {\n uri: uri,\n page: page\n }\n });\n lbryProxy.claim_search({\n channel: uri,\n valid_channel_signature: true,\n page: page || 1,\n order_by: ['release_time']\n }).then(function (result) {\n var claims = result.items,\n claimsInChannel = result.total_items,\n returnedPage = result.page;\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_COMPLETED,\n data: {\n uri: uri,\n claimsInChannel: claimsInChannel,\n claims: claims || [],\n page: returnedPage || undefined\n }\n });\n });\n };\n}\n\nfunction doCreateChannel(name, amount, optionalParams) {\n return function (dispatch) {\n dispatch({\n type: CREATE_CHANNEL_STARTED\n });\n var createParams = {\n name: name,\n bid: creditsToString(amount),\n blocking: true\n };\n\n if (optionalParams) {\n if (optionalParams.title) {\n createParams.title = optionalParams.title;\n }\n\n if (optionalParams.coverUrl) {\n createParams.cover_url = optionalParams.coverUrl;\n }\n\n if (optionalParams.thumbnailUrl) {\n createParams.thumbnail_url = optionalParams.thumbnailUrl;\n }\n\n if (optionalParams.description) {\n createParams.description = optionalParams.description;\n }\n\n if (optionalParams.website) {\n createParams.website_url = optionalParams.website;\n }\n\n if (optionalParams.email) {\n createParams.email = optionalParams.email;\n }\n\n if (optionalParams.tags) {\n createParams.tags = optionalParams.tags.map(function (tag) {\n return tag.name;\n });\n }\n }\n\n return lbryProxy.channel_create(createParams) // outputs[0] is the certificate\n // outputs[1] is the change from the tx, not in the app currently\n .then(function (result) {\n var channelClaim = result.outputs[0];\n dispatch({\n type: CREATE_CHANNEL_COMPLETED,\n data: {\n channelClaim: channelClaim\n }\n });\n return channelClaim;\n })[\"catch\"](function (error) {\n dispatch({\n type: CREATE_CHANNEL_FAILED,\n data: error.message\n });\n return error;\n });\n };\n}\n\nfunction doUpdateChannel(params) {\n return function (dispatch, getState) {\n dispatch({\n type: UPDATE_CHANNEL_STARTED\n });\n var state = getState();\n var myChannels = selectMyChannelClaims(state);\n var channelClaim = myChannels.find(function (myChannel) {\n return myChannel.claim_id === params.claim_id;\n });\n var updateParams = {\n claim_id: params.claim_id,\n bid: creditsToString(params.amount),\n title: params.title,\n cover_url: params.coverUrl,\n thumbnail_url: params.thumbnailUrl,\n description: params.description,\n website_url: params.website,\n email: params.email,\n tags: [],\n replace: true,\n languages: [],\n locations: [],\n blocking: true\n };\n\n if (params.tags) {\n updateParams.tags = params.tags.map(function (tag) {\n return tag.name;\n });\n } // we'll need to remove these once we add locations/channels to channel page edit/create options\n\n\n if (channelClaim && channelClaim.value && channelClaim.value.locations) {\n updateParams.locations = channelClaim.value.locations;\n }\n\n if (channelClaim && channelClaim.value && channelClaim.value.languages) {\n updateParams.languages = channelClaim.value.languages;\n }\n\n return lbryProxy.channel_update(updateParams).then(function (result) {\n var channelClaim = result.outputs[0];\n dispatch({\n type: UPDATE_CHANNEL_COMPLETED,\n data: {\n channelClaim: channelClaim\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: UPDATE_CHANNEL_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doImportChannel(certificate) {\n return function (dispatch) {\n dispatch({\n type: IMPORT_CHANNEL_STARTED\n });\n return lbryProxy.channel_import({\n channel_data: certificate\n }).then(function (result) {\n dispatch({\n type: IMPORT_CHANNEL_COMPLETED\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: IMPORT_CHANNEL_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doFetchChannelListMine() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch) {\n dispatch({\n type: FETCH_CHANNEL_LIST_STARTED\n });\n\n var callback = function callback(response) {\n dispatch({\n type: FETCH_CHANNEL_LIST_COMPLETED,\n data: {\n claims: response.items\n }\n });\n };\n\n lbryProxy.channel_list({\n page: page,\n page_size: pageSize\n }).then(callback);\n };\n}\n\nfunction doClaimSearch() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n no_totals: true,\n page_size: 10,\n page: 1\n };\n var query = createNormalizedClaimSearchKey(options);\n return function (dispatch) {\n dispatch({\n type: CLAIM_SEARCH_STARTED,\n data: {\n query: query\n }\n });\n\n var success = function success(data) {\n var resolveInfo = {};\n var urls = [];\n data.items.forEach(function (stream) {\n resolveInfo[stream.canonical_url] = {\n stream: stream\n };\n urls.push(stream.canonical_url);\n });\n dispatch({\n type: CLAIM_SEARCH_COMPLETED,\n data: {\n query: query,\n resolveInfo: resolveInfo,\n urls: urls,\n append: options.page && options.page !== 1,\n pageSize: options.page_size\n }\n });\n };\n\n var failure = function failure(err) {\n dispatch({\n type: CLAIM_SEARCH_FAILED,\n data: {\n query: query\n },\n error: err\n });\n };\n\n lbryProxy.claim_search(options).then(success, failure);\n };\n}\n\nvar selectState$3 = function selectState$3(state) {\n return state.fileInfo || {};\n};\n\nvar selectFileInfosByOutpoint = reselect.createSelector(selectState$3, function (state) {\n return state.byOutpoint || {};\n});\nvar selectIsFetchingFileList = reselect.createSelector(selectState$3, function (state) {\n return state.isFetchingFileList;\n});\nvar selectIsFetchingFileListDownloadedOrPublished = reselect.createSelector(selectIsFetchingFileList, selectIsFetchingClaimListMine, function (isFetchingFileList, isFetchingClaimListMine) {\n return isFetchingFileList || isFetchingClaimListMine;\n});\n\nvar makeSelectFileInfoForUri = function makeSelectFileInfoForUri(uri) {\n return reselect.createSelector(selectClaimsByUri, selectFileInfosByOutpoint, function (claims, byOutpoint) {\n var claim = claims[uri];\n var outpoint = claim ? \"\".concat(claim.txid, \":\").concat(claim.nout) : undefined;\n return outpoint ? byOutpoint[outpoint] : undefined;\n });\n};\n\nvar selectDownloadingByOutpoint = reselect.createSelector(selectState$3, function (state) {\n return state.downloadingByOutpoint || {};\n});\n\nvar makeSelectDownloadingForUri = function makeSelectDownloadingForUri(uri) {\n return reselect.createSelector(selectDownloadingByOutpoint, makeSelectFileInfoForUri(uri), function (byOutpoint, fileInfo) {\n if (!fileInfo) return false;\n return byOutpoint[fileInfo.outpoint];\n });\n};\n\nvar selectUrisLoading = reselect.createSelector(selectState$3, function (state) {\n return state.fetching || {};\n});\n\nvar makeSelectLoadingForUri = function makeSelectLoadingForUri(uri) {\n return reselect.createSelector(selectUrisLoading, makeSelectClaimForUri(uri), function (fetchingByOutpoint, claim) {\n if (!claim) {\n return false;\n }\n\n var txid = claim.txid,\n nout = claim.nout;\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n var isFetching = fetchingByOutpoint[outpoint];\n return isFetching;\n });\n};\n\nvar selectFileInfosDownloaded = reselect.createSelector(selectFileInfosByOutpoint, selectMyClaims, function (byOutpoint, myClaims) {\n return Object.values(byOutpoint).reverse().filter(function (fileInfo) {\n var myClaimIds = myClaims.map(function (claim) {\n return claim.claim_id;\n });\n return fileInfo && myClaimIds.indexOf(fileInfo.claim_id) === -1 && (fileInfo.completed || fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0);\n });\n}); // export const selectFileInfoForUri = (state, props) => {\n// const claims = selectClaimsByUri(state),\n// claim = claims[props.uri],\n// fileInfos = selectAllFileInfos(state),\n// outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined;\n// return outpoint && fileInfos ? fileInfos[outpoint] : undefined;\n// };\n\nvar selectDownloadingFileInfos = reselect.createSelector(selectDownloadingByOutpoint, selectFileInfosByOutpoint, function (downloadingByOutpoint, fileInfosByOutpoint) {\n var outpoints = Object.keys(downloadingByOutpoint);\n var fileInfos = [];\n outpoints.forEach(function (outpoint) {\n var fileInfo = fileInfosByOutpoint[outpoint];\n if (fileInfo) fileInfos.push(fileInfo);\n });\n return fileInfos;\n});\nvar selectTotalDownloadProgress = reselect.createSelector(selectDownloadingFileInfos, function (fileInfos) {\n var progress = [];\n fileInfos.forEach(function (fileInfo) {\n progress.push(fileInfo.written_bytes / fileInfo.total_bytes * 100);\n });\n var totalProgress = progress.reduce(function (a, b) {\n return a + b;\n }, 0);\n if (fileInfos.length > 0) return totalProgress / fileInfos.length / 100.0;\n return -1;\n});\nvar selectFileListPublishedSort = reselect.createSelector(selectState$3, function (state) {\n return state.fileListPublishedSort;\n});\nvar selectFileListDownloadedSort = reselect.createSelector(selectState$3, function (state) {\n return state.fileListDownloadedSort;\n});\nvar selectDownloadedUris = reselect.createSelector(selectFileInfosDownloaded, // We should use permament_url but it doesn't exist in file_list\nfunction (info) {\n return info.slice().map(function (claim) {\n return \"lbry://\".concat(claim.claim_name, \"#\").concat(claim.claim_id);\n });\n});\n\nvar makeSelectMediaTypeForUri = function makeSelectMediaTypeForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), makeSelectContentTypeForUri(uri), function (fileInfo, contentType) {\n if (!fileInfo && !contentType) {\n return undefined;\n }\n\n var fileName = fileInfo && fileInfo.file_name;\n return lbryProxy.getMediaType(contentType, fileName);\n });\n};\n\nvar makeSelectUriIsStreamable = function makeSelectUriIsStreamable(uri) {\n return reselect.createSelector(makeSelectMediaTypeForUri(uri), function (mediaType) {\n var isStreamable = ['audio', 'video', 'image'].indexOf(mediaType) !== -1;\n return isStreamable;\n });\n};\n\nvar makeSelectDownloadPathForUri = function makeSelectDownloadPathForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.download_path;\n });\n};\n\nvar makeSelectFilePartlyDownloaded = function makeSelectFilePartlyDownloaded(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n if (!fileInfo) {\n return false;\n }\n\n return fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0;\n });\n};\n\nvar makeSelectFileNameForUri = function makeSelectFileNameForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.file_name;\n });\n};\n\nvar selectDownloadUrlsCount = reselect.createSelector(selectDownloadedUris, function (uris) {\n return uris.length;\n});\n\nfunction filterFileInfos(fileInfos, query) {\n if (query) {\n var queryMatchRegExp = new RegExp(query, 'i');\n return fileInfos.filter(function (fileInfo) {\n var metadata = fileInfo.metadata;\n return metadata.title && metadata.title.match(queryMatchRegExp) || fileInfo.channel_name && fileInfo.channel_name.match(queryMatchRegExp) || fileInfo.claim_name && fileInfo.claim_name.match(queryMatchRegExp);\n });\n }\n\n return fileInfos;\n}\n\nvar makeSelectSearchDownloadUrlsForPage = function makeSelectSearchDownloadUrlsForPage(query) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return reselect.createSelector(selectFileInfosDownloaded, function (fileInfos) {\n var matchingFileInfos = filterFileInfos(fileInfos, query);\n var start = (Number(page) - 1) * Number(PAGE_SIZE);\n var end = Number(page) * Number(PAGE_SIZE);\n return matchingFileInfos && matchingFileInfos.length ? matchingFileInfos.slice(start, end).map(function (fileInfo) {\n return buildURI({\n streamName: fileInfo.claim_name,\n channelName: fileInfo.channel_name,\n channelClaimId: fileInfo.channel_claim_id\n });\n }) : [];\n });\n};\n\nvar makeSelectSearchDownloadUrlsCount = function makeSelectSearchDownloadUrlsCount(query) {\n return reselect.createSelector(selectFileInfosDownloaded, function (fileInfos) {\n return fileInfos && fileInfos.length ? filterFileInfos(fileInfos, query).length : 0;\n });\n}; // \n\n\nvar selectState$4 = function selectState$4(state) {\n return state.file || {};\n};\n\nvar selectPurchaseUriErrorMessage = reselect.createSelector(selectState$4, function (state) {\n return state.purchaseUriErrorMessage;\n});\nvar selectFailedPurchaseUris = reselect.createSelector(selectState$4, function (state) {\n return state.failedPurchaseUris;\n});\nvar selectPurchasedUris = reselect.createSelector(selectState$4, function (state) {\n return state.purchasedUris;\n});\nvar selectLastPurchasedUri = reselect.createSelector(selectState$4, function (state) {\n return state.purchasedUris.length > 0 ? state.purchasedUris[state.purchasedUris.length - 1] : null;\n});\n\nvar makeSelectStreamingUrlForUri = function makeSelectStreamingUrlForUri(uri) {\n return reselect.createSelector(makeSelectFileInfoForUri(uri), function (fileInfo) {\n return fileInfo && fileInfo.streaming_url;\n });\n}; // \n\n\nfunction doFileGet(uri) {\n var saveFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var onSuccess = arguments.length > 2 ? arguments[2] : undefined;\n return function (dispatch, getState) {\n var state = getState();\n\n var _makeSelectClaimForUr = makeSelectClaimForUri(uri)(state),\n nout = _makeSelectClaimForUr.nout,\n txid = _makeSelectClaimForUr.txid;\n\n var outpoint = \"\".concat(txid, \":\").concat(nout);\n dispatch({\n type: FETCH_FILE_INFO_STARTED,\n data: {\n outpoint: outpoint\n }\n }); // set save_file argument to True to save the file (old behaviour)\n\n lbryProxy.get({\n uri: uri,\n save_file: saveFile\n }).then(function (streamInfo) {\n var timeout = streamInfo === null || _typeof(streamInfo) !== 'object' || streamInfo.error === 'Timeout';\n\n if (timeout) {\n dispatch({\n type: FETCH_FILE_INFO_FAILED,\n data: {\n outpoint: outpoint\n }\n });\n dispatch(doToast({\n message: \"File timeout for uri \".concat(uri),\n isError: true\n }));\n } else {\n // purchase was completed successfully\n dispatch({\n type: PURCHASE_URI_COMPLETED,\n data: {\n uri: uri\n }\n });\n dispatch({\n type: FETCH_FILE_INFO_COMPLETED,\n data: {\n fileInfo: streamInfo,\n outpoint: streamInfo.outpoint\n }\n });\n\n if (onSuccess) {\n onSuccess(streamInfo);\n }\n }\n })[\"catch\"](function () {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri\n }\n });\n dispatch({\n type: FETCH_FILE_INFO_FAILED,\n data: {\n outpoint: outpoint\n }\n });\n dispatch(doToast({\n message: \"Failed to view \".concat(uri, \", please try again. If this problem persists, visit https://lbry.com/faq/support for support.\"),\n isError: true\n }));\n });\n };\n}\n\nfunction doPurchaseUri(uri, costInfo) {\n var saveFile = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var onSuccess = arguments.length > 3 ? arguments[3] : undefined;\n return function (dispatch, getState) {\n dispatch({\n type: PURCHASE_URI_STARTED,\n data: {\n uri: uri\n }\n });\n var state = getState();\n var balance = selectBalance(state);\n var fileInfo = makeSelectFileInfoForUri(uri)(state);\n var downloadingByOutpoint = selectDownloadingByOutpoint(state);\n var alreadyDownloading = fileInfo && !!downloadingByOutpoint[fileInfo.outpoint];\n var alreadyStreaming = makeSelectStreamingUrlForUri(uri)(state);\n\n if (!saveFile && (alreadyDownloading || alreadyStreaming)) {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri,\n error: \"Already fetching uri: \".concat(uri)\n }\n });\n return;\n }\n\n var cost = costInfo.cost;\n\n if (parseFloat(cost) > balance) {\n dispatch({\n type: PURCHASE_URI_FAILED,\n data: {\n uri: uri,\n error: 'Insufficient credits'\n }\n });\n return;\n }\n\n dispatch(doFileGet(uri, saveFile, onSuccess));\n };\n}\n\nfunction doDeletePurchasedUri(uri) {\n return {\n type: DELETE_PURCHASED_URI,\n data: {\n uri: uri\n }\n };\n}\n\nfunction doFetchFileInfo(uri) {\n return function (dispatch, getState) {\n var state = getState();\n var claim = selectClaimsByUri(state)[uri];\n var outpoint = claim ? \"\".concat(claim.txid, \":\").concat(claim.nout) : null;\n var alreadyFetching = !!selectUrisLoading(state)[uri];\n\n if (!alreadyFetching) {\n dispatch({\n type: FETCH_FILE_INFO_STARTED,\n data: {\n outpoint: outpoint\n }\n });\n lbryProxy.file_list({\n outpoint: outpoint,\n full_status: true,\n page: 1,\n page_size: 1\n }).then(function (result) {\n var fileInfos = result.items;\n var fileInfo = fileInfos[0];\n dispatch({\n type: FETCH_FILE_INFO_COMPLETED,\n data: {\n outpoint: outpoint,\n fileInfo: fileInfo || null\n }\n });\n });\n }\n };\n}\n\nfunction doFileList() {\n var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99999;\n return function (dispatch, getState) {\n var state = getState();\n var isFetching = selectIsFetchingFileList(state);\n\n if (!isFetching) {\n dispatch({\n type: FILE_LIST_STARTED\n });\n lbryProxy.file_list({\n page: page,\n page_size: pageSize\n }).then(function (result) {\n var fileInfos = result.items;\n dispatch({\n type: FILE_LIST_SUCCEEDED,\n data: {\n fileInfos: fileInfos\n }\n });\n });\n }\n };\n}\n\nfunction doFetchFileInfosAndPublishedClaims() {\n return function (dispatch, getState) {\n var state = getState();\n var isFetchingClaimListMine = selectIsFetchingClaimListMine(state);\n var isFetchingFileInfo = selectIsFetchingFileList(state);\n if (!isFetchingClaimListMine) dispatch(doFetchClaimListMine());\n if (!isFetchingFileInfo) dispatch(doFileList());\n };\n}\n\nfunction doSetFileListSort(page, value) {\n return {\n type: SET_FILE_LIST_SORT,\n data: {\n page: page,\n value: value\n }\n };\n}\n\nvar _extends$6 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$2(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar selectState$5 = function selectState$5(state) {\n return state.publish || {};\n}; // Is the current uri the same as the uri they clicked \"edit\" on\n\n\nvar selectIsStillEditing = reselect.createSelector(selectState$5, function (publishState) {\n var editingURI = publishState.editingURI,\n uri = publishState.uri;\n\n if (!editingURI || !uri) {\n return false;\n }\n\n var _parseURI8 = parseURI(uri),\n currentIsChannel = _parseURI8.isChannel,\n currentClaimName = _parseURI8.streamName,\n currentContentName = _parseURI8.channelName;\n\n var _parseURI9 = parseURI(editingURI),\n editIsChannel = _parseURI9.isChannel,\n editClaimName = _parseURI9.streamName,\n editContentName = _parseURI9.channelName; // Depending on the previous/current use of a channel, we need to compare different things\n // ex: going from a channel to anonymous, the new uri won't return contentName, so we need to use claimName\n\n\n var currentName = currentIsChannel ? currentContentName : currentClaimName;\n var editName = editIsChannel ? editContentName : editClaimName;\n return currentName === editName;\n});\nvar selectPublishFormValues = reselect.createSelector(selectState$5, selectIsStillEditing, function (state, isStillEditing) {\n var pendingPublish = state.pendingPublish,\n language = state.language,\n languages = state.languages,\n formValues = _objectWithoutProperties$2(state, ['pendingPublish', 'language', 'languages']);\n\n var actualLanguage; // Sets default if editing a claim with a set language\n\n if (!language && isStillEditing && languages && languages[0]) {\n actualLanguage = languages[0];\n } else {\n actualLanguage = language || 'en';\n }\n\n return _extends$6({}, formValues, {\n language: actualLanguage\n });\n});\n\nvar makeSelectPublishFormValue = function makeSelectPublishFormValue(item) {\n return reselect.createSelector(selectState$5, function (state) {\n return state[item];\n });\n};\n\nvar selectMyClaimForUri = reselect.createSelector(selectPublishFormValues, selectIsStillEditing, selectClaimsById, selectMyClaimsWithoutChannels, function (_ref4, isStillEditing, claimsById, myClaims) {\n var editingURI = _ref4.editingURI,\n uri = _ref4.uri;\n\n var _parseURI10 = parseURI(uri),\n contentName = _parseURI10.channelName,\n claimName = _parseURI10.streamName;\n\n var _parseURI11 = parseURI(editingURI),\n editClaimId = _parseURI11.streamClaimId; // If isStillEditing\n // They clicked \"edit\" from the file page\n // They haven't changed the channel/name after clicking edit\n // Get the claim so they can edit without re-uploading a new file\n\n\n return isStillEditing ? claimsById[editClaimId] : myClaims.find(function (claim) {\n return !contentName ? claim.name === claimName : claim.name === contentName || claim.name === claimName;\n });\n});\nvar selectIsResolvingPublishUris = reselect.createSelector(selectState$5, selectResolvingUris, function (_ref5, resolvingUris) {\n var uri = _ref5.uri,\n name = _ref5.name;\n\n if (uri) {\n var isResolvingUri = resolvingUris.includes(uri);\n\n var _parseURI12 = parseURI(uri),\n isChannel = _parseURI12.isChannel;\n\n var isResolvingShortUri;\n\n if (isChannel && name) {\n var shortUri = buildURI({\n streamName: name\n });\n isResolvingShortUri = resolvingUris.includes(shortUri);\n }\n\n return isResolvingUri || isResolvingShortUri;\n }\n\n return false;\n});\nvar selectTakeOverAmount = reselect.createSelector(selectState$5, selectMyClaimForUri, selectClaimsByUri, function (_ref6, myClaimForUri, claimsByUri) {\n var name = _ref6.name;\n\n if (!name) {\n return null;\n } // We only care about the winning claim for the short uri\n\n\n var shortUri = buildURI({\n streamName: name\n });\n var claimForShortUri = claimsByUri[shortUri];\n\n if (!myClaimForUri && claimForShortUri) {\n return claimForShortUri.meta.effective_amount;\n } else if (myClaimForUri && claimForShortUri) {\n // https://github.com/lbryio/lbry/issues/1476\n // We should check the current effective_amount on my claim to see how much additional lbc\n // is needed to win the claim. Currently this is not possible during a takeover.\n // With this, we could say something like, \"You have x lbc in support, if you bid y additional LBC you will control the claim\"\n // For now just ignore supports. We will just show the winning claim's bid amount\n return claimForShortUri.meta.effective_amount || claimForShortUri.amount;\n }\n\n return null;\n});\n\nvar _extends$7 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar doResetThumbnailStatus = function doResetThumbnailStatus() {\n return function (dispatch) {\n dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n thumbnailPath: ''\n }\n });\n return fetch(SPEECH_STATUS).then(function (res) {\n return res.json();\n }).then(function (status) {\n if (status.disabled) {\n throw Error();\n }\n\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: READY,\n thumbnail: ''\n }\n });\n })[\"catch\"](function () {\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: API_DOWN,\n thumbnail: ''\n }\n });\n });\n };\n};\n\nvar doClearPublish = function doClearPublish() {\n return function (dispatch) {\n dispatch({\n type: CLEAR_PUBLISH\n });\n return dispatch(doResetThumbnailStatus());\n };\n};\n\nvar doUpdatePublishForm = function doUpdatePublishForm(publishFormValue) {\n return function (dispatch) {\n return dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: _extends$7({}, publishFormValue)\n });\n };\n};\n\nvar doUploadThumbnail = function doUploadThumbnail(filePath, thumbnailBlob, fsAdapter, fs, path) {\n return function (dispatch) {\n var thumbnail, fileExt, fileName, fileType;\n\n var makeid = function makeid() {\n var text = '';\n var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (var i = 0; i < 24; i += 1) {\n text += possible.charAt(Math.floor(Math.random() * 62));\n }\n\n return text;\n };\n\n var uploadError = function uploadError() {\n var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n dispatch(batchActions({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: READY,\n thumbnail: '',\n nsfw: false\n }\n }, doError(error)));\n };\n\n dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: IN_PROGRESS\n }\n });\n\n if (fsAdapter && fsAdapter.readFile && filePath) {\n fsAdapter.readFile(filePath, 'base64').then(function (base64Image) {\n fileExt = 'png';\n fileName = 'thumbnail.png';\n fileType = 'image/png';\n var data = new FormData();\n var name = makeid();\n data.append('name', name); // $FlowFixMe\n\n data.append('file', {\n uri: 'file://' + filePath,\n type: fileType,\n name: fileName\n });\n return fetch(SPEECH_PUBLISH, {\n method: 'POST',\n body: data\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n return json.success ? dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: COMPLETE,\n thumbnail: \"\".concat(json.data.url, \".\").concat(fileExt)\n }\n }) : uploadError(json.message);\n })[\"catch\"](function (err) {\n return uploadError(err.message);\n });\n });\n } else {\n if (filePath && fs && path) {\n thumbnail = fs.readFileSync(filePath);\n fileExt = path.extname(filePath);\n fileName = path.basename(filePath);\n fileType = \"image/\".concat(fileExt.slice(1));\n } else if (thumbnailBlob) {\n fileExt = \".\".concat(thumbnailBlob.type && thumbnailBlob.type.split('/')[1]);\n fileName = thumbnailBlob.name;\n fileType = thumbnailBlob.type;\n } else {\n return null;\n }\n\n var data = new FormData();\n var name = makeid();\n var file = thumbnailBlob || thumbnail && new File([thumbnail], fileName, {\n type: fileType\n });\n data.append('name', name); // $FlowFixMe\n\n data.append('file', file);\n return fetch(SPEECH_PUBLISH, {\n method: 'POST',\n body: data\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n return json.success ? dispatch({\n type: UPDATE_PUBLISH_FORM,\n data: {\n uploadThumbnailStatus: COMPLETE,\n thumbnail: \"\".concat(json.data.url).concat(fileExt)\n }\n }) : uploadError(json.message);\n })[\"catch\"](function (err) {\n return uploadError(err.message);\n });\n }\n };\n};\n\nvar doPrepareEdit = function doPrepareEdit(claim, uri, fileInfo, fs) {\n return function (dispatch) {\n var name = claim.name,\n amount = claim.amount,\n _claim$value = claim.value,\n value = _claim$value === void 0 ? {} : _claim$value;\n var channelName = claim && claim.signing_channel && claim.signing_channel.name || null;\n var author = value.author,\n description = value.description,\n _value$fee = value.fee,\n fee = _value$fee === void 0 ? {\n amount: '0',\n currency: 'LBC'\n } : _value$fee,\n languages = value.languages,\n license = value.license,\n licenseUrl = value.license_url,\n thumbnail = value.thumbnail,\n title = value.title,\n tags = value.tags;\n var publishData = {\n name: name,\n bid: amount,\n contentIsFree: fee.amount === '0',\n author: author,\n description: description,\n fee: fee,\n languages: languages,\n thumbnail: thumbnail ? thumbnail.url : null,\n title: title,\n uri: uri,\n uploadThumbnailStatus: thumbnail ? MANUAL : undefined,\n licenseUrl: licenseUrl,\n nsfw: isClaimNsfw(claim),\n tags: tags ? tags.map(function (tag) {\n return {\n name: tag\n };\n }) : []\n }; // Make sure custom licenses are mapped properly\n // If the license isn't one of the standard licenses, map the custom license and description/url\n\n if (!CC_LICENSES.some(function (_ref7) {\n var value = _ref7.value;\n return value === license;\n })) {\n if (!license || license === NONE || license === PUBLIC_DOMAIN) {\n publishData.licenseType = license;\n } else if (license && !licenseUrl && license !== NONE) {\n publishData.licenseType = COPYRIGHT;\n } else {\n publishData.licenseType = OTHER;\n }\n\n publishData.otherLicenseDescription = license;\n } else {\n publishData.licenseType = license;\n }\n\n if (channelName) {\n publishData['channel'] = channelName;\n }\n\n dispatch({\n type: DO_PREPARE_EDIT,\n data: publishData\n });\n };\n};\n\nvar doPublish = function doPublish(success, fail) {\n return function (dispatch, getState) {\n dispatch({\n type: PUBLISH_START\n });\n var state = getState();\n var myClaimForUri = selectMyClaimForUri(state);\n var myChannels = selectMyChannelClaims(state);\n var myClaims = selectMyClaimsWithoutChannels(state); // get redux publish form\n\n var publishData = selectPublishFormValues(state); // destructure the data values\n\n var name = publishData.name,\n bid = publishData.bid,\n filePath = publishData.filePath,\n description = publishData.description,\n language = publishData.language,\n license = publishData.license,\n licenseUrl = publishData.licenseUrl,\n licenseType = publishData.licenseType,\n otherLicenseDescription = publishData.otherLicenseDescription,\n thumbnail = publishData.thumbnail,\n channel = publishData.channel,\n title = publishData.title,\n contentIsFree = publishData.contentIsFree,\n fee = publishData.fee,\n uri = publishData.uri,\n tags = publishData.tags,\n locations = publishData.locations; // Handle scenario where we have a claim that has the same name as a channel we are publishing with.\n\n var myClaimForUriEditing = myClaimForUri && myClaimForUri.name === name ? myClaimForUri : null;\n var publishingLicense;\n\n switch (licenseType) {\n case COPYRIGHT:\n case OTHER:\n publishingLicense = otherLicenseDescription;\n break;\n\n default:\n publishingLicense = licenseType;\n } // get the claim id from the channel name, we will use that instead\n\n\n var namedChannelClaim = myChannels ? myChannels.find(function (myChannel) {\n return myChannel.name === channel;\n }) : null;\n var channelId = namedChannelClaim ? namedChannelClaim.claim_id : '';\n var publishPayload = {\n name: name,\n title: title,\n description: description,\n locations: [],\n bid: creditsToString(bid),\n languages: [language],\n tags: tags && tags.map(function (tag) {\n return tag.name;\n }),\n thumbnail_url: thumbnail,\n blocking: true\n }; // Temporary solution to keep the same publish flow with the new tags api\n // Eventually we will allow users to enter their own tags on publish\n // `nsfw` will probably be removed\n\n if (publishingLicense) {\n publishPayload.license = publishingLicense;\n }\n\n if (licenseUrl) {\n publishPayload.license_url = licenseUrl;\n }\n\n if (thumbnail) {\n publishPayload.thumbnail_url = thumbnail;\n } // Set release time to curret date. On edits, keep original release/transaction time as release_time\n\n\n if (myClaimForUriEditing && myClaimForUriEditing.value.release_time) {\n publishPayload.release_time = Number(myClaimForUri.value.release_time);\n } else if (myClaimForUriEditing && myClaimForUriEditing.timestamp) {\n publishPayload.release_time = Number(myClaimForUriEditing.timestamp);\n } else {\n publishPayload.release_time = Number(Math.round(Date.now() / 1000));\n }\n\n if (channelId) {\n publishPayload.channel_id = channelId;\n }\n\n if (myClaimForUriEditing && myClaimForUriEditing.value && myClaimForUriEditing.value.locations) {\n publishPayload.locations = myClaimForUriEditing.value.locations;\n }\n\n if (!contentIsFree && fee && fee.currency && Number(fee.amount) > 0) {\n publishPayload.fee_currency = fee.currency;\n publishPayload.fee_amount = creditsToString(fee.amount);\n } // Only pass file on new uploads, not metadata only edits.\n // The sdk will figure it out\n\n\n if (filePath) publishPayload.file_path = filePath;\n return lbryProxy.publish(publishPayload).then(success, fail);\n };\n}; // Calls claim_list_mine until any pending publishes are confirmed\n\n\nvar doCheckPendingPublishes = function doCheckPendingPublishes(onConfirmed) {\n return function (dispatch, getState) {\n var state = getState();\n var pendingById = selectPendingById(state);\n\n if (!Object.keys(pendingById).length) {\n return;\n }\n\n var publishCheckInterval;\n\n var checkFileList = function checkFileList() {\n lbryProxy.stream_list({\n page: 1,\n page_size: 10\n }).then(function (result) {\n var claims = result.items;\n claims.forEach(function (claim) {\n // If it's confirmed, check if it was pending previously\n if (claim.confirmations > 0 && pendingById[claim.claim_id]) {\n delete pendingById[claim.claim_id];\n\n if (onConfirmed) {\n onConfirmed(claim);\n }\n }\n });\n dispatch({\n type: FETCH_CLAIM_LIST_MINE_COMPLETED,\n data: {\n claims: claims\n }\n });\n\n if (!Object.keys(pendingById).length) {\n clearInterval(publishCheckInterval);\n }\n });\n };\n\n publishCheckInterval = setInterval(function () {\n checkFileList();\n }, 30000);\n };\n}; // Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n\n\nfunction debouce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n} // \n\n\nfunction handleFetchResponse(response) {\n return response.status === 200 ? Promise.resolve(response.json()) : Promise.reject(new Error(response.statusText));\n}\n\nvar _extends$8 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar DEBOUNCED_SEARCH_SUGGESTION_MS = 300; // We can't use env's because they aren't passed into node_modules\n\nvar CONNECTION_STRING = 'https://lighthouse.lbry.com/';\n\nvar setSearchApi = function setSearchApi(endpoint) {\n CONNECTION_STRING = endpoint.replace(/\\/*$/, '/'); // exactly one slash at the end;\n};\n\nvar getSearchSuggestions = function getSearchSuggestions(value) {\n return function (dispatch, getState) {\n var query = value.trim(); // strip out any basic stuff for more accurate search results\n\n var searchValue = query.replace(/lbry:\\/\\//g, '').replace(/-/g, ' ');\n\n if (searchValue.includes('#')) {\n // This should probably be more robust, but I think it's fine for now\n // Remove everything after # to get rid of the claim id\n searchValue = searchValue.substring(0, searchValue.indexOf('#'));\n }\n\n var suggestions = selectSuggestions(getState());\n\n if (suggestions[searchValue]) {\n return;\n }\n\n fetch(\"\".concat(CONNECTION_STRING, \"autocomplete?s=\").concat(searchValue)).then(handleFetchResponse).then(function (apiSuggestions) {\n dispatch({\n type: UPDATE_SEARCH_SUGGESTIONS,\n data: {\n query: searchValue,\n suggestions: apiSuggestions\n }\n });\n })[\"catch\"](function () {// If the fetch fails, do nothing\n // Basic search suggestions are already populated at this point\n });\n };\n};\n\nvar throttledSearchSuggestions = debouce(function (dispatch, query) {\n dispatch(getSearchSuggestions(query));\n}, DEBOUNCED_SEARCH_SUGGESTION_MS);\n\nvar doUpdateSearchQuery = function doUpdateSearchQuery(query, shouldSkipSuggestions) {\n return function (dispatch) {\n dispatch({\n type: UPDATE_SEARCH_QUERY,\n data: {\n query: query\n }\n }); // Don't fetch new suggestions if the user just added a space\n\n if (!query.endsWith(' ') || !shouldSkipSuggestions) {\n throttledSearchSuggestions(dispatch, query);\n }\n };\n};\n\nvar doSearch = function doSearch(rawQuery, searchOptions) {\n return function (dispatch, getState) {\n var query = rawQuery.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ');\n var resolveResults = searchOptions && searchOptions.resolveResults;\n var isBackgroundSearch = searchOptions && searchOptions.isBackgroundSearch || false;\n\n if (!query) {\n dispatch({\n type: SEARCH_FAIL\n });\n return;\n }\n\n var state = getState();\n var queryWithOptions = makeSelectQueryWithOptions(query, searchOptions)(state); // If we have already searched for something, we don't need to do anything\n\n var urisForQuery = makeSelectSearchUris(queryWithOptions)(state);\n\n if (urisForQuery && !!urisForQuery.length) {\n return;\n }\n\n dispatch({\n type: SEARCH_START\n }); // If the user is on the file page with a pre-populated uri and they select\n // the search option without typing anything, searchQuery will be empty\n // We need to populate it so the input is filled on the search page\n // isBackgroundSearch means the search is happening in the background, don't update the search query\n\n if (!state.search.searchQuery && !isBackgroundSearch) {\n dispatch(doUpdateSearchQuery(query));\n }\n\n fetch(\"\".concat(CONNECTION_STRING, \"search?\").concat(queryWithOptions)).then(handleFetchResponse).then(function (data) {\n var uris = [];\n var actions = [];\n data.forEach(function (result) {\n if (result) {\n var name = result.name,\n claimId = result.claimId;\n var urlObj = {};\n\n if (name.startsWith('@')) {\n urlObj.channelName = name;\n urlObj.channelClaimId = claimId;\n } else {\n urlObj.streamName = name;\n urlObj.streamClaimId = claimId;\n }\n\n var url = buildURI(urlObj);\n\n if (resolveResults) {\n actions.push(doResolveUri(url));\n }\n\n uris.push(url);\n }\n });\n actions.push({\n type: SEARCH_SUCCESS,\n data: {\n query: queryWithOptions,\n uris: uris\n }\n });\n dispatch(batchActions.apply(void 0, actions));\n })[\"catch\"](function (e) {\n dispatch({\n type: SEARCH_FAIL\n });\n });\n };\n};\n\nvar doResolvedSearch = function doResolvedSearch(rawQuery, size, // only pass in if you don't want to use the users setting (ex: related content)\nfrom) {\n var isBackgroundSearch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n return function (dispatch, getState) {\n var query = rawQuery.replace(/^lbry:\\/\\//i, '').replace(/\\//, ' ');\n\n if (!query) {\n dispatch({\n type: RESOLVED_SEARCH_FAIL\n });\n return;\n }\n\n var optionsWithFrom = _extends$8({\n size: size,\n from: from,\n isBackgroundSearch: isBackgroundSearch\n }, options);\n\n var optionsWithoutFrom = _extends$8({\n size: size,\n isBackgroundSearch: isBackgroundSearch\n }, options);\n\n var state = getState();\n var queryWithOptions = makeSelectQueryWithOptions(query, optionsWithFrom)(state); // make from null so that we can maintain a reference to the same query for multiple pages and simply append the found results\n\n var queryWithoutFrom = makeSelectQueryWithOptions(query, optionsWithoutFrom)(state); // If we have already searched for something, we don't need to do anything\n // TODO: Tweak this check for multiple page results\n\n /* const resultsForQuery = makeSelectResolvedSearchResults(queryWithOptions)(state);\n if (resultsForQuery && resultsForQuery.length && resultsForQuery.length > (from * size)) {\n return;\n } */\n\n dispatch({\n type: RESOLVED_SEARCH_START\n });\n\n if (!state.search.searchQuery && !isBackgroundSearch) {\n dispatch(doUpdateSearchQuery(query));\n }\n\n fetch(\"\".concat(CONNECTION_STRING, \"search?resolve=true&\").concat(queryWithOptions)).then(handleFetchResponse).then(function (data) {\n var results = [];\n data.forEach(function (result) {\n if (result) {\n results.push(result);\n }\n });\n dispatch({\n type: RESOLVED_SEARCH_SUCCESS,\n data: {\n query: queryWithoutFrom,\n results: results,\n pageSize: size,\n append: parseInt(from, 10) > parseInt(size, 10) - 1\n }\n });\n })[\"catch\"](function (e) {\n dispatch({\n type: RESOLVED_SEARCH_FAIL\n });\n });\n };\n};\n\nvar doFocusSearchInput = function doFocusSearchInput() {\n return function (dispatch) {\n return dispatch({\n type: SEARCH_FOCUS\n });\n };\n};\n\nvar doBlurSearchInput = function doBlurSearchInput() {\n return function (dispatch) {\n return dispatch({\n type: SEARCH_BLUR\n });\n };\n};\n\nvar doUpdateSearchOptions = function doUpdateSearchOptions(newOptions, additionalOptions) {\n return function (dispatch, getState) {\n var state = getState();\n var searchValue = selectSearchValue(state);\n dispatch({\n type: UPDATE_SEARCH_OPTIONS,\n data: newOptions\n });\n\n if (searchValue) {\n // After updating, perform a search with the new options\n dispatch(doSearch(searchValue, additionalOptions));\n }\n };\n}; // \n\n\nfunction savePosition(claimId, outpoint, position) {\n return function (dispatch) {\n dispatch({\n type: SET_CONTENT_POSITION,\n data: {\n claimId: claimId,\n outpoint: outpoint,\n position: position\n }\n });\n };\n} // \n\n\nvar doToggleTagFollow = function doToggleTagFollow(name) {\n return {\n type: TOGGLE_TAG_FOLLOW,\n data: {\n name: name\n }\n };\n};\n\nvar doAddTag = function doAddTag(name) {\n return {\n type: TAG_ADD,\n data: {\n name: name\n }\n };\n};\n\nvar doDeleteTag = function doDeleteTag(name) {\n return {\n type: TAG_DELETE,\n data: {\n name: name\n }\n };\n}; // \n\n\nfunction doCommentList(uri) {\n var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var pageSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 99999;\n return function (dispatch, getState) {\n var state = getState();\n var claim = selectClaimsByUri(state)[uri];\n var claimId = claim ? claim.claim_id : null;\n dispatch({\n type: COMMENT_LIST_STARTED\n });\n lbryProxy.comment_list({\n claim_id: claimId,\n page: page,\n page_size: pageSize\n }).then(function (result) {\n var comments = result.items;\n dispatch({\n type: COMMENT_LIST_COMPLETED,\n data: {\n comments: comments,\n claimId: claimId,\n uri: uri\n }\n });\n })[\"catch\"](function (error) {\n console.log(error);\n dispatch({\n type: COMMENT_LIST_FAILED,\n data: error\n });\n });\n };\n}\n\nfunction doCommentCreate() {\n var comment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var claim_id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var channel = arguments.length > 2 ? arguments[2] : undefined;\n var parent_id = arguments.length > 3 ? arguments[3] : undefined;\n return function (dispatch, getState) {\n var state = getState();\n dispatch({\n type: COMMENT_CREATE_STARTED\n });\n var myChannels = selectMyChannelClaims(state);\n var namedChannelClaim = myChannels && myChannels.find(function (myChannel) {\n return myChannel.name === channel;\n });\n var channel_id = namedChannelClaim ? namedChannelClaim.claim_id : null;\n return lbryProxy.comment_create({\n comment: comment,\n claim_id: claim_id,\n channel_id: channel_id,\n parent_id: parent_id\n }).then(function (result) {\n dispatch({\n type: COMMENT_CREATE_COMPLETED,\n data: {\n comment: result,\n claimId: claim_id\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_CREATE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to create comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentHide(comment_id) {\n return function (dispatch) {\n dispatch({\n type: COMMENT_HIDE_STARTED\n });\n return lbryProxy.comment_hide({\n comment_ids: [comment_id]\n }).then(function (result) {\n dispatch({\n type: COMMENT_HIDE_COMPLETED,\n data: result\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_HIDE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to hide this comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentAbandon(comment_id) {\n return function (dispatch) {\n dispatch({\n type: COMMENT_ABANDON_STARTED\n });\n return lbryProxy.comment_abandon({\n comment_id: comment_id\n }).then(function (result) {\n // Comment may not be deleted if the signing channel can't be signed.\n // This will happen if the channel was recently created or abandoned.\n if (result.abandoned) {\n dispatch({\n type: COMMENT_ABANDON_COMPLETED,\n data: {\n comment_id: comment_id\n }\n });\n } else {\n dispatch({\n type: COMMENT_ABANDON_FAILED\n });\n dispatch(doToast({\n message: 'Your channel is still being setup, try again in a few moments.',\n isError: true\n }));\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_ABANDON_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to delete this comment, please try again later.',\n isError: true\n }));\n });\n };\n}\n\nfunction doCommentUpdate(comment_id, comment) {\n // if they provided an empty string, they must have wanted to abandon\n if (comment === '') {\n return doCommentAbandon(comment_id);\n } else {\n return function (dispatch) {\n dispatch({\n type: COMMENT_UPDATE_STARTED\n });\n return lbryProxy.comment_update({\n comment_id: comment_id,\n comment: comment\n }).then(function (result) {\n if (result != null) {\n dispatch({\n type: COMMENT_UPDATE_COMPLETED,\n data: {\n comment: result\n }\n });\n } else {\n // the result will return null\n dispatch({\n type: COMMENT_UPDATE_FAILED\n });\n dispatch(doToast({\n message: 'Your channel is still being setup, try again in a few moments.',\n isError: true\n }));\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: COMMENT_UPDATE_FAILED,\n data: error\n });\n dispatch(doToast({\n message: 'Unable to edit this comment, please try again later.',\n isError: true\n }));\n });\n };\n }\n} // \n\n\nvar doToggleBlockChannel = function doToggleBlockChannel(uri) {\n return {\n type: TOGGLE_BLOCK_CHANNEL,\n data: {\n uri: uri\n }\n };\n};\n\nvar _extends$9 = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers = {};\nvar defaultState = {\n byId: {},\n claimsByUri: {},\n paginatedClaimsByChannel: {},\n channelClaimCounts: {},\n fetchingChannelClaims: {},\n resolvingUris: [],\n // This should not be a Set\n // Storing sets in reducers can cause issues\n myChannelClaims: undefined,\n myClaims: undefined,\n fetchingMyChannels: false,\n abandoningById: {},\n pendingById: {},\n claimSearchError: false,\n claimSearchByQuery: {},\n claimSearchByQueryLastPageReached: {},\n fetchingClaimSearchByQuery: {},\n updateChannelError: '',\n updatingChannel: false,\n creatingChannel: false,\n createChannelError: undefined,\n pendingChannelImport: false\n};\n\nfunction handleClaimAction(state, action) {\n var resolveInfo = action.data.resolveInfo;\n var byUri = Object.assign({}, state.claimsByUri);\n var byId = Object.assign({}, state.byId);\n var channelClaimCounts = Object.assign({}, state.channelClaimCounts);\n var newResolvingUrls = new Set(state.resolvingUris);\n Object.entries(resolveInfo).forEach(function (_ref8) {\n var _ref9 = _slicedToArray(_ref8, 2),\n url = _ref9[0],\n resolveResponse = _ref9[1]; // $FlowFixMe\n\n\n var claimsInChannel = resolveResponse.claimsInChannel,\n stream = resolveResponse.stream,\n channel = resolveResponse.channel;\n\n if (claimsInChannel) {\n channelClaimCounts[url] = claimsInChannel;\n channelClaimCounts[channel.canonical_url] = claimsInChannel;\n }\n\n if (stream) {\n byId[stream.claim_id] = stream;\n byUri[url] = stream.claim_id; // If url isn't a canonical_url, make sure that is added too\n\n byUri[stream.canonical_url] = stream.claim_id; // Also add the permanent_url here until lighthouse returns canonical_url for search results\n\n byUri[stream.permanent_url] = stream.claim_id;\n newResolvingUrls[\"delete\"](stream.canonical_url);\n newResolvingUrls[\"delete\"](stream.permanent_url);\n }\n\n if (channel) {\n if (!stream) {\n byUri[url] = channel.claim_id;\n }\n\n byId[channel.claim_id] = channel; // Also add the permanent_url here until lighthouse returns canonical_url for search results\n\n byUri[channel.permanent_url] = channel.claim_id;\n byUri[channel.canonical_url] = channel.claim_id;\n newResolvingUrls[\"delete\"](channel.canonical_url);\n newResolvingUrls[\"delete\"](channel.permanent_url);\n }\n\n newResolvingUrls[\"delete\"](url);\n\n if (!stream && !channel) {\n byUri[url] = null;\n }\n });\n return Object.assign({}, state, {\n byId: byId,\n claimsByUri: byUri,\n channelClaimCounts: channelClaimCounts,\n resolvingUris: Array.from(newResolvingUrls)\n });\n}\n\nreducers[RESOLVE_URIS_STARTED] = function (state, action) {\n var uris = action.data.uris;\n var oldResolving = state.resolvingUris || [];\n var newResolving = oldResolving.slice();\n uris.forEach(function (uri) {\n if (!newResolving.includes(uri)) {\n newResolving.push(uri);\n }\n });\n return Object.assign({}, state, {\n resolvingUris: newResolving\n });\n};\n\nreducers[RESOLVE_URIS_COMPLETED] = function (state, action) {\n return _extends$9({}, handleClaimAction(state, action));\n};\n\nreducers[FETCH_CLAIM_LIST_MINE_STARTED] = function (state) {\n return Object.assign({}, state, {\n isFetchingClaimListMine: true\n });\n};\n\nreducers[FETCH_CLAIM_LIST_MINE_COMPLETED] = function (state, action) {\n var claims = action.data.claims;\n var byId = Object.assign({}, state.byId);\n var byUri = Object.assign({}, state.claimsByUri);\n var pendingById = Object.assign({}, state.pendingById);\n var myClaims = state.myClaims ? state.myClaims.slice() : [];\n claims.forEach(function (claim) {\n var uri = buildURI({\n streamName: claim.name,\n streamClaimId: claim.claim_id\n });\n\n if (claim.type && claim.type.match(/claim|update/)) {\n if (claim.confirmations < 1) {\n pendingById[claim.claim_id] = claim;\n delete byId[claim.claim_id];\n delete byUri[claim.claim_id];\n } else {\n byId[claim.claim_id] = claim;\n byUri[uri] = claim.claim_id;\n }\n }\n }); // Remove old pending publishes\n\n Object.values(pendingById) // $FlowFixMe\n .filter(function (pendingClaim) {\n return byId[pendingClaim.claim_id];\n }).forEach(function (pendingClaim) {\n // $FlowFixMe\n delete pendingById[pendingClaim.claim_id];\n });\n return Object.assign({}, state, {\n isFetchingClaimListMine: false,\n myClaims: concatClaims(myClaims, claims),\n byId: byId,\n claimsByUri: byUri,\n pendingById: pendingById\n });\n};\n\nreducers[FETCH_CHANNEL_LIST_STARTED] = function (state) {\n return Object.assign({}, state, {\n fetchingMyChannels: true\n });\n};\n\nreducers[FETCH_CHANNEL_LIST_COMPLETED] = function (state, action) {\n var claims = action.data.claims;\n var myClaims = state.myClaims || [];\n var pendingById = Object.assign(state.pendingById);\n var myChannelClaims;\n var byId = Object.assign({}, state.byId);\n\n if (!claims.length) {\n // $FlowFixMe\n myChannelClaims = null;\n } else {\n myChannelClaims = new Set(state.myChannelClaims);\n claims.forEach(function (claim) {\n // $FlowFixMe\n myChannelClaims.add(claim.claim_id);\n\n if (!byId[claim.claim_id]) {\n byId[claim.claim_id] = claim;\n }\n\n if (pendingById[claim.claim_id] && claim.confirmations > 0) {\n delete pendingById[claim.claim_id];\n }\n });\n }\n\n return Object.assign({}, state, {\n byId: byId,\n fetchingMyChannels: false,\n myChannelClaims: myChannelClaims,\n myClaims: concatClaims(myClaims, claims)\n });\n};\n\nreducers[FETCH_CHANNEL_CLAIMS_STARTED] = function (state, action) {\n var _action$data = action.data,\n uri = _action$data.uri,\n page = _action$data.page;\n var fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims);\n fetchingChannelClaims[uri] = page;\n return Object.assign({}, state, {\n fetchingChannelClaims: fetchingChannelClaims,\n currentChannelPage: page\n });\n};\n\nreducers[FETCH_CHANNEL_CLAIMS_COMPLETED] = function (state, action) {\n var _action$data2 = action.data,\n uri = _action$data2.uri,\n claims = _action$data2.claims,\n claimsInChannel = _action$data2.claimsInChannel,\n page = _action$data2.page,\n totalPages = _action$data2.totalPages; // byChannel keeps claim_search relevant results by page. If the total changes, erase it.\n\n var channelClaimCounts = Object.assign({}, state.channelClaimCounts);\n var paginatedClaimsByChannel = Object.assign({}, state.paginatedClaimsByChannel); // check if count has changed - that means cached pagination will be wrong, so clear it\n\n var previousCount = paginatedClaimsByChannel[uri] && paginatedClaimsByChannel[uri]['itemCount'];\n var byChannel = claimsInChannel === previousCount ? Object.assign({}, paginatedClaimsByChannel[uri]) : {};\n var allClaimIds = new Set(byChannel.all);\n var currentPageClaimIds = [];\n var byId = Object.assign({}, state.byId);\n var fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims);\n var claimsByUri = Object.assign({}, state.claimsByUri);\n\n if (claims !== undefined) {\n claims.forEach(function (claim) {\n allClaimIds.add(claim.claim_id);\n currentPageClaimIds.push(claim.claim_id);\n byId[claim.claim_id] = claim;\n claimsByUri[claim.canonical_url] = claim.claim_id;\n });\n }\n\n byChannel.all = allClaimIds;\n byChannel.pageCount = totalPages;\n byChannel.itemCount = claimsInChannel;\n byChannel[page] = currentPageClaimIds;\n paginatedClaimsByChannel[uri] = byChannel;\n delete fetchingChannelClaims[uri];\n return Object.assign({}, state, {\n paginatedClaimsByChannel: paginatedClaimsByChannel,\n byId: byId,\n fetchingChannelClaims: fetchingChannelClaims,\n claimsByUri: claimsByUri,\n channelClaimCounts: channelClaimCounts,\n currentChannelPage: page\n });\n};\n\nreducers[ABANDON_CLAIM_STARTED] = function (state, action) {\n var claimId = action.data.claimId;\n var abandoningById = Object.assign({}, state.abandoningById);\n abandoningById[claimId] = true;\n return Object.assign({}, state, {\n abandoningById: abandoningById\n });\n};\n\nreducers[ABANDON_CLAIM_SUCCEEDED] = function (state, action) {\n var claimId = action.data.claimId;\n var byId = Object.assign({}, state.byId);\n var newMyClaims = state.myClaims ? state.myClaims.slice() : [];\n var claimsByUri = Object.assign({}, state.claimsByUri);\n Object.keys(claimsByUri).forEach(function (uri) {\n if (claimsByUri[uri] === claimId) {\n delete claimsByUri[uri];\n }\n });\n var myClaims = newMyClaims.filter(function (i) {\n return i.claim_id && i.claim_id !== claimId;\n });\n delete byId[claimId];\n return Object.assign({}, state, {\n myClaims: myClaims,\n byId: byId,\n claimsByUri: claimsByUri\n });\n};\n\nreducers[CREATE_CHANNEL_STARTED] = function (state) {\n return _extends$9({}, state, {\n creatingChannel: true,\n createChannelError: null\n });\n};\n\nreducers[CREATE_CHANNEL_COMPLETED] = function (state, action) {\n var channelClaim = action.data.channelClaim;\n var byId = Object.assign({}, state.byId);\n var pendingById = Object.assign({}, state.pendingById);\n var myChannelClaims = new Set(state.myChannelClaims);\n byId[channelClaim.claim_id] = channelClaim;\n pendingById[channelClaim.claim_id] = channelClaim;\n myChannelClaims.add(channelClaim.claim_id);\n return Object.assign({}, state, {\n byId: byId,\n pendingById: pendingById,\n myChannelClaims: myChannelClaims,\n creatingChannel: false\n });\n};\n\nreducers[CREATE_CHANNEL_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n creatingChannel: false,\n createChannelError: action.data\n });\n};\n\nreducers[UPDATE_CHANNEL_STARTED] = function (state, action) {\n return Object.assign({}, state, {\n updateChannelError: '',\n updatingChannel: true\n });\n};\n\nreducers[UPDATE_CHANNEL_COMPLETED] = function (state, action) {\n var channelClaim = action.data.channelClaim;\n var byId = Object.assign({}, state.byId);\n byId[channelClaim.claim_id] = channelClaim;\n return Object.assign({}, state, {\n byId: byId,\n updateChannelError: '',\n updatingChannel: false\n });\n};\n\nreducers[UPDATE_CHANNEL_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n updateChannelError: action.data.message,\n updatingChannel: false\n });\n};\n\nreducers[IMPORT_CHANNEL_STARTED] = function (state) {\n return Object.assign({}, state, {\n pendingChannelImports: true\n });\n};\n\nreducers[IMPORT_CHANNEL_COMPLETED] = function (state) {\n return Object.assign({}, state, {\n pendingChannelImports: false\n });\n};\n\nreducers[CLAIM_SEARCH_STARTED] = function (state, action) {\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n fetchingClaimSearchByQuery[action.data.query] = true;\n return Object.assign({}, state, {\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery\n });\n};\n\nreducers[CLAIM_SEARCH_COMPLETED] = function (state, action) {\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n var claimSearchByQuery = Object.assign({}, state.claimSearchByQuery);\n var claimSearchByQueryLastPageReached = Object.assign({}, state.claimSearchByQueryLastPageReached);\n var _action$data3 = action.data,\n append = _action$data3.append,\n query = _action$data3.query,\n urls = _action$data3.urls,\n pageSize = _action$data3.pageSize;\n\n if (append) {\n // todo: check for duplicate urls when concatenating?\n claimSearchByQuery[query] = claimSearchByQuery[query] && claimSearchByQuery[query].length ? claimSearchByQuery[query].concat(urls) : urls;\n } else {\n claimSearchByQuery[query] = urls;\n } // the returned number of urls is less than the page size, so we're on the last page\n\n\n claimSearchByQueryLastPageReached[query] = urls.length < pageSize;\n delete fetchingClaimSearchByQuery[query];\n return Object.assign({}, state, _extends$9({}, handleClaimAction(state, action), {\n claimSearchByQuery: claimSearchByQuery,\n claimSearchByQueryLastPageReached: claimSearchByQueryLastPageReached,\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery\n }));\n};\n\nreducers[CLAIM_SEARCH_FAILED] = function (state, action) {\n var fetchingClaimSearchByQuery = Object.assign({}, state.fetchingClaimSearchByQuery);\n delete fetchingClaimSearchByQuery[action.data.query];\n return Object.assign({}, state, {\n fetchingClaimSearchByQuery: fetchingClaimSearchByQuery\n });\n};\n\nfunction claimsReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n} // util for creating reducers\n// based off of redux-actions\n// https://redux-actions.js.org/docs/api/handleAction.html#handleactions\n// eslint-disable-next-line import/prefer-default-export\n\n\nvar handleActions = function handleActions(actionMap, defaultState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = actionMap[action.type];\n\n if (handler) {\n var newState = handler(state, action);\n return Object.assign({}, state, newState);\n } // just return the original state if no handler\n // returning a copy here breaks redux-persist\n\n\n return state;\n };\n};\n\nvar _extends$a = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$1 = {\n commentById: {},\n // commentId -> Comment\n byId: {},\n // ClaimID -> list of comments\n commentsByUri: {},\n // URI -> claimId\n isLoading: false,\n myComments: undefined\n};\nvar commentReducer = handleActions((_handleActions = {}, _defineProperty(_handleActions, COMMENT_CREATE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_CREATE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_CREATE_COMPLETED, function (state, action) {\n var _action$data4 = action.data,\n comment = _action$data4.comment,\n claimId = _action$data4.claimId;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId);\n var comments = byId[claimId];\n var newCommentIds = comments.slice(); // add the comment by its ID\n\n commentById[comment.comment_id] = comment; // push the comment_id to the top of ID list\n\n newCommentIds.unshift(comment.comment_id);\n byId[claimId] = newCommentIds;\n return _extends$a({}, state, {\n commentById: commentById,\n byId: byId,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_STARTED, function (state) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_COMPLETED, function (state, action) {\n var _action$data5 = action.data,\n comments = _action$data5.comments,\n claimId = _action$data5.claimId,\n uri = _action$data5.uri;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId);\n var commentsByUri = Object.assign({}, state.commentsByUri);\n\n if (comments) {\n // we use an Array to preserve order of listing\n // in reality this doesn't matter and we can just\n // sort comments by their timestamp\n var commentIds = Array(comments.length); // map the comment_ids to the new comments\n\n for (var i = 0; i < comments.length; i++) {\n commentIds[i] = comments[i].comment_id;\n commentById[commentIds[i]] = comments[i];\n }\n\n byId[claimId] = commentIds;\n commentsByUri[uri] = claimId;\n }\n\n return _extends$a({}, state, {\n byId: byId,\n commentById: commentById,\n commentsByUri: commentsByUri,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_LIST_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_COMPLETED, function (state, action) {\n var comment_id = action.data.comment_id;\n var commentById = Object.assign({}, state.commentById);\n var byId = Object.assign({}, state.byId); // to remove the comment and its references\n\n var claimId = commentById[comment_id].claim_id;\n\n for (var i = 0; i < byId[claimId].length; i++) {\n if (byId[claimId][i] === comment_id) {\n byId[claimId].splice(i, 1);\n break;\n }\n }\n\n delete commentById[comment_id];\n return _extends$a({}, state, {\n commentById: commentById,\n byId: byId,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_ABANDON_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_COMPLETED, function (state, action) {\n var comment = action.data.comment;\n var commentById = Object.assign({}, state.commentById);\n commentById[comment.comment_id] = comment;\n return _extends$a({}, state, {\n commentById: commentById,\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_UPDATE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_STARTED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: true\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_COMPLETED, function (state, action) {\n return _extends$a({}, state, {\n // todo: add HiddenComments state & create selectors\n isLoading: false\n });\n}), _defineProperty(_handleActions, COMMENT_HIDE_FAILED, function (state, action) {\n return _extends$a({}, state, {\n isLoading: false\n });\n}), _handleActions), defaultState$1);\n\nvar _extends$b = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers$1 = {};\nvar defaultState$2 = {\n positions: {}\n};\n\nreducers$1[SET_CONTENT_POSITION] = function (state, action) {\n var _action$data6 = action.data,\n claimId = _action$data6.claimId,\n outpoint = _action$data6.outpoint,\n position = _action$data6.position;\n return _extends$b({}, state, {\n positions: _extends$b({}, state.positions, _defineProperty({}, claimId, _extends$b({}, state.positions[claimId], _defineProperty({}, outpoint, position))))\n });\n};\n\nfunction contentReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$2;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$1[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$2 = {};\nvar defaultState$3 = {\n fileListPublishedSort: DATE_NEW,\n fileListDownloadedSort: DATE_NEW\n};\n\nreducers$2[FILE_LIST_STARTED] = function (state) {\n return Object.assign({}, state, {\n isFetchingFileList: true\n });\n};\n\nreducers$2[FILE_LIST_SUCCEEDED] = function (state, action) {\n var fileInfos = action.data.fileInfos;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var pendingByOutpoint = Object.assign({}, state.pendingByOutpoint);\n fileInfos.forEach(function (fileInfo) {\n var outpoint = fileInfo.outpoint;\n if (outpoint) newByOutpoint[fileInfo.outpoint] = fileInfo;\n });\n return Object.assign({}, state, {\n isFetchingFileList: false,\n byOutpoint: newByOutpoint,\n pendingByOutpoint: pendingByOutpoint\n });\n};\n\nreducers$2[FETCH_FILE_INFO_STARTED] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newFetching = Object.assign({}, state.fetching);\n newFetching[outpoint] = true;\n return Object.assign({}, state, {\n fetching: newFetching\n });\n};\n\nreducers$2[FETCH_FILE_INFO_COMPLETED] = function (state, action) {\n var _action$data7 = action.data,\n fileInfo = _action$data7.fileInfo,\n outpoint = _action$data7.outpoint;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newFetching = Object.assign({}, state.fetching);\n newByOutpoint[outpoint] = fileInfo;\n delete newFetching[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n fetching: newFetching\n });\n};\n\nreducers$2[FETCH_FILE_INFO_FAILED] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newFetching = Object.assign({}, state.fetching);\n delete newFetching[outpoint];\n return Object.assign({}, state, {\n fetching: newFetching\n });\n};\n\nreducers$2[DOWNLOADING_STARTED] = function (state, action) {\n var _action$data8 = action.data,\n uri = _action$data8.uri,\n outpoint = _action$data8.outpoint,\n fileInfo = _action$data8.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newDownloading[outpoint] = true;\n newByOutpoint[outpoint] = fileInfo;\n return Object.assign({}, state, {\n downloadingByOutpoint: newDownloading,\n byOutpoint: newByOutpoint\n });\n};\n\nreducers$2[DOWNLOADING_PROGRESSED] = function (state, action) {\n var _action$data9 = action.data,\n outpoint = _action$data9.outpoint,\n fileInfo = _action$data9.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newByOutpoint[outpoint] = fileInfo;\n newDownloading[outpoint] = true;\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[DOWNLOADING_CANCELED] = function (state, action) {\n var _action$data10 = action.data,\n uri = _action$data10.uri,\n outpoint = _action$data10.outpoint;\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n delete newDownloading[outpoint];\n return Object.assign({}, state, {\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[DOWNLOADING_COMPLETED] = function (state, action) {\n var _action$data11 = action.data,\n outpoint = _action$data11.outpoint,\n fileInfo = _action$data11.fileInfo;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var newDownloading = Object.assign({}, state.downloadingByOutpoint);\n newByOutpoint[outpoint] = fileInfo;\n delete newDownloading[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: newDownloading\n });\n};\n\nreducers$2[FILE_DELETE] = function (state, action) {\n var outpoint = action.data.outpoint;\n var newByOutpoint = Object.assign({}, state.byOutpoint);\n var downloadingByOutpoint = Object.assign({}, state.downloadingByOutpoint);\n delete newByOutpoint[outpoint];\n delete downloadingByOutpoint[outpoint];\n return Object.assign({}, state, {\n byOutpoint: newByOutpoint,\n downloadingByOutpoint: downloadingByOutpoint\n });\n};\n\nreducers$2[SET_FILE_LIST_SORT] = function (state, action) {\n var _pageSortStates;\n\n var pageSortStates = (_pageSortStates = {}, _defineProperty(_pageSortStates, PUBLISHED, 'fileListPublishedSort'), _defineProperty(_pageSortStates, DOWNLOADED, 'fileListDownloadedSort'), _pageSortStates);\n var pageSortState = pageSortStates[action.data.page];\n var value = action.data.value;\n return Object.assign({}, state, _defineProperty({}, pageSortState, value));\n};\n\nfunction fileInfoReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$3;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$2[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar _extends$c = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar reducers$3 = {};\nvar defaultState$4 = {\n failedPurchaseUris: [],\n purchasedUris: [],\n purchaseUriErrorMessage: ''\n};\n\nreducers$3[PURCHASE_URI_STARTED] = function (state, action) {\n var uri = action.data.uri;\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.splice(newFailedPurchaseUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchaseUriErrorMessage: ''\n });\n};\n\nreducers$3[PURCHASE_URI_COMPLETED] = function (state, action) {\n var uri = action.data.uri;\n var newPurchasedUris = state.purchasedUris.slice();\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (!newPurchasedUris.includes(uri)) {\n newPurchasedUris.push(uri);\n }\n\n if (newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.splice(newFailedPurchaseUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchasedUris: newPurchasedUris,\n purchaseUriErrorMessage: ''\n });\n};\n\nreducers$3[PURCHASE_URI_FAILED] = function (state, action) {\n var _action$data12 = action.data,\n uri = _action$data12.uri,\n error = _action$data12.error;\n var newFailedPurchaseUris = state.failedPurchaseUris.slice();\n\n if (!newFailedPurchaseUris.includes(uri)) {\n newFailedPurchaseUris.push(uri);\n }\n\n return _extends$c({}, state, {\n failedPurchaseUris: newFailedPurchaseUris,\n purchaseUriErrorMessage: error\n });\n};\n\nreducers$3[DELETE_PURCHASED_URI] = function (state, action) {\n var uri = action.data.uri;\n var newPurchasedUris = state.purchasedUris.slice();\n\n if (newPurchasedUris.includes(uri)) {\n newPurchasedUris.splice(newPurchasedUris.indexOf(uri), 1);\n }\n\n return _extends$c({}, state, {\n purchasedUris: newPurchasedUris\n });\n};\n\nfunction fileReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$4;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$3[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar _extends$d = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$5 = {\n notifications: [],\n toasts: [],\n errors: []\n};\nvar notificationsReducer = handleActions((_handleActions2 = {}, _defineProperty(_handleActions2, CREATE_TOAST, function (state, action) {\n var toast = action.data;\n var newToasts = state.toasts.slice();\n newToasts.push(toast);\n return _extends$d({}, state, {\n toasts: newToasts\n });\n}), _defineProperty(_handleActions2, DISMISS_TOAST, function (state) {\n var newToasts = state.toasts.slice();\n newToasts.shift();\n return _extends$d({}, state, {\n toasts: newToasts\n });\n}), _defineProperty(_handleActions2, CREATE_NOTIFICATION, function (state, action) {\n var notification = action.data;\n var newNotifications = state.notifications.slice();\n newNotifications.push(notification);\n return _extends$d({}, state, {\n notifications: newNotifications\n });\n}), _defineProperty(_handleActions2, EDIT_NOTIFICATION, function (state, action) {\n var notification = action.data.notification;\n var notifications = state.notifications.slice();\n notifications = notifications.map(function (pastNotification) {\n return pastNotification.id === notification.id ? notification : pastNotification;\n });\n return _extends$d({}, state, {\n notifications: notifications\n });\n}), _defineProperty(_handleActions2, DELETE_NOTIFICATION, function (state, action) {\n var id = action.data.id;\n var newNotifications = state.notifications.slice();\n newNotifications = newNotifications.filter(function (notification) {\n return notification.id !== id;\n });\n return _extends$d({}, state, {\n notifications: newNotifications\n });\n}), _defineProperty(_handleActions2, CREATE_ERROR, function (state, action) {\n var error = action.data;\n var newErrors = state.errors.slice();\n newErrors.push(error);\n return _extends$d({}, state, {\n errors: newErrors\n });\n}), _defineProperty(_handleActions2, DISMISS_ERROR, function (state) {\n var newErrors = state.errors.slice();\n newErrors.shift();\n return _extends$d({}, state, {\n errors: newErrors\n });\n}), _handleActions2), defaultState$5);\n\nvar _extends$e = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties$3(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar defaultState$6 = {\n editingURI: undefined,\n filePath: undefined,\n contentIsFree: true,\n fee: {\n amount: 1,\n currency: 'LBC'\n },\n title: '',\n thumbnail_url: '',\n thumbnailPath: '',\n uploadThumbnailStatus: API_DOWN,\n description: '',\n language: '',\n nsfw: false,\n channel: CHANNEL_ANONYMOUS,\n channelId: '',\n name: '',\n nameError: undefined,\n bid: 0.1,\n bidError: undefined,\n licenseType: 'None',\n otherLicenseDescription: 'All rights reserved',\n licenseUrl: '',\n tags: [],\n publishing: false,\n publishSuccess: false,\n publishError: undefined\n};\nvar publishReducer = handleActions((_handleActions3 = {}, _defineProperty(_handleActions3, UPDATE_PUBLISH_FORM, function (state, action) {\n var data = action.data;\n return _extends$e({}, state, data);\n}), _defineProperty(_handleActions3, CLEAR_PUBLISH, function () {\n return _extends$e({}, defaultState$6);\n}), _defineProperty(_handleActions3, PUBLISH_START, function (state) {\n return _extends$e({}, state, {\n publishing: true,\n publishSuccess: false\n });\n}), _defineProperty(_handleActions3, PUBLISH_FAIL, function (state) {\n return _extends$e({}, state, {\n publishing: false\n });\n}), _defineProperty(_handleActions3, PUBLISH_SUCCESS, function (state) {\n return _extends$e({}, state, {\n publishing: false,\n publishSuccess: true\n });\n}), _defineProperty(_handleActions3, DO_PREPARE_EDIT, function (state, action) {\n var publishData = _objectWithoutProperties$3(action.data, []);\n\n var channel = publishData.channel,\n name = publishData.name,\n uri = publishData.uri; // The short uri is what is presented to the user\n // The editingUri is the full uri with claim id\n\n var shortUri = buildURI({\n channelName: channel,\n streamName: name\n });\n return _extends$e({}, defaultState$6, publishData, {\n editingURI: uri,\n uri: shortUri\n });\n}), _handleActions3), defaultState$6);\n\nvar _extends$f = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$7 = {\n isActive: false,\n // does the user have any typed text in the search input\n focused: false,\n // is the search input focused\n searchQuery: '',\n // needs to be an empty string for input focusing\n options: (_options = {}, _defineProperty(_options, SEARCH_OPTIONS.RESULT_COUNT, 30), _defineProperty(_options, SEARCH_OPTIONS.CLAIM_TYPE, SEARCH_OPTIONS.INCLUDE_FILES_AND_CHANNELS), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_AUDIO, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_VIDEO, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_TEXT, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_IMAGE, true), _defineProperty(_options, SEARCH_OPTIONS.MEDIA_APPLICATION, true), _options),\n suggestions: {},\n urisByQuery: {},\n resolvedResultsByQuery: {},\n resolvedResultsByQueryLastPageReached: {}\n};\nvar searchReducer = handleActions((_handleActions4 = {}, _defineProperty(_handleActions4, SEARCH_START, function (state) {\n return _extends$f({}, state, {\n searching: true\n });\n}), _defineProperty(_handleActions4, SEARCH_SUCCESS, function (state, action) {\n var _action$data13 = action.data,\n query = _action$data13.query,\n uris = _action$data13.uris;\n return _extends$f({}, state, {\n searching: false,\n urisByQuery: Object.assign({}, state.urisByQuery, _defineProperty({}, query, uris))\n });\n}), _defineProperty(_handleActions4, SEARCH_FAIL, function (state) {\n return _extends$f({}, state, {\n searching: false\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_START, function (state) {\n return _extends$f({}, state, {\n searching: true\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_SUCCESS, function (state, action) {\n var resolvedResultsByQuery = Object.assign({}, state.resolvedResultsByQuery);\n var resolvedResultsByQueryLastPageReached = Object.assign({}, state.resolvedResultsByQueryLastPageReached);\n var _action$data14 = action.data,\n append = _action$data14.append,\n query = _action$data14.query,\n results = _action$data14.results,\n pageSize = _action$data14.pageSize;\n\n if (append) {\n // todo: check for duplicates when concatenating?\n resolvedResultsByQuery[query] = resolvedResultsByQuery[query] && resolvedResultsByQuery[query].length ? resolvedResultsByQuery[query].concat(results) : results;\n } else {\n resolvedResultsByQuery[query] = results;\n } // the returned number of urls is less than the page size, so we're on the last page\n\n\n resolvedResultsByQueryLastPageReached[query] = results.length < pageSize;\n return _extends$f({}, state, {\n searching: false,\n resolvedResultsByQuery: resolvedResultsByQuery,\n resolvedResultsByQueryLastPageReached: resolvedResultsByQueryLastPageReached\n });\n}), _defineProperty(_handleActions4, RESOLVED_SEARCH_FAIL, function (state) {\n return _extends$f({}, state, {\n searching: false\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_QUERY, function (state, action) {\n return _extends$f({}, state, {\n searchQuery: action.data.query,\n isActive: true\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_SUGGESTIONS, function (state, action) {\n return _extends$f({}, state, {\n suggestions: _extends$f({}, state.suggestions, _defineProperty({}, action.data.query, action.data.suggestions))\n });\n}), _defineProperty(_handleActions4, DISMISS_NOTIFICATION, function (state) {\n return _extends$f({}, state, {\n isActive: false\n });\n}), _defineProperty(_handleActions4, SEARCH_FOCUS, function (state) {\n return _extends$f({}, state, {\n focused: true\n });\n}), _defineProperty(_handleActions4, SEARCH_BLUR, function (state) {\n return _extends$f({}, state, {\n focused: false\n });\n}), _defineProperty(_handleActions4, UPDATE_SEARCH_OPTIONS, function (state, action) {\n var oldOptions = state.options;\n var newOptions = action.data;\n\n var options = _extends$f({}, oldOptions, newOptions);\n\n return _extends$f({}, state, {\n options: options\n });\n}), _handleActions4), defaultState$7);\n\nvar _extends$g = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction getDefaultKnownTags() {\n return DEFAULT_FOLLOWED_TAGS.concat(DEFAULT_KNOWN_TAGS).reduce(function (tagsMap, tag) {\n return _extends$g({}, tagsMap, _defineProperty({}, tag, {\n name: tag\n }));\n }, {});\n}\n\nvar defaultState$8 = {\n followedTags: DEFAULT_FOLLOWED_TAGS,\n knownTags: getDefaultKnownTags()\n};\nvar tagsReducer = handleActions((_handleActions5 = {}, _defineProperty(_handleActions5, TOGGLE_TAG_FOLLOW, function (state, action) {\n var followedTags = state.followedTags;\n var name = action.data.name;\n var newFollowedTags = followedTags.slice();\n\n if (newFollowedTags.includes(name)) {\n newFollowedTags = newFollowedTags.filter(function (tag) {\n return tag !== name;\n });\n } else {\n newFollowedTags.push(name);\n }\n\n return _extends$g({}, state, {\n followedTags: newFollowedTags\n });\n}), _defineProperty(_handleActions5, TAG_ADD, function (state, action) {\n var knownTags = state.knownTags;\n var name = action.data.name;\n\n var newKnownTags = _extends$g({}, knownTags);\n\n newKnownTags[name] = {\n name: name\n };\n return _extends$g({}, state, {\n knownTags: newKnownTags\n });\n}), _defineProperty(_handleActions5, TAG_DELETE, function (state, action) {\n var knownTags = state.knownTags,\n followedTags = state.followedTags;\n var name = action.data.name;\n\n var newKnownTags = _extends$g({}, knownTags);\n\n delete newKnownTags[name];\n var newFollowedTags = followedTags.filter(function (tag) {\n return tag !== name;\n });\n return _extends$g({}, state, {\n knownTags: newKnownTags,\n followedTags: newFollowedTags\n });\n}), _defineProperty(_handleActions5, USER_STATE_POPULATE, function (state, action) {\n var tags = action.data.tags;\n return _extends$g({}, state, {\n followedTags: tags && tags.length ? tags : DEFAULT_FOLLOWED_TAGS\n });\n}), _handleActions5), defaultState$8);\n\nvar _extends$h = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar defaultState$9 = {\n blockedChannels: []\n};\nvar blockedReducer = handleActions((_handleActions6 = {}, _defineProperty(_handleActions6, TOGGLE_BLOCK_CHANNEL, function (state, action) {\n var blockedChannels = state.blockedChannels;\n var uri = action.data.uri;\n var newBlockedChannels = blockedChannels.slice();\n\n if (newBlockedChannels.includes(uri)) {\n newBlockedChannels = newBlockedChannels.filter(function (id) {\n return id !== uri;\n });\n } else {\n newBlockedChannels.push(uri);\n }\n\n return {\n blockedChannels: newBlockedChannels\n };\n}), _defineProperty(_handleActions6, USER_STATE_POPULATE, function (state, action) {\n var blocked = action.data.blocked;\n return _extends$h({}, state, {\n blockedChannels: blocked && blocked.length ? blocked : state.blockedChannels\n });\n}), _handleActions6), defaultState$9);\n\nvar _extends$i = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar buildDraftTransaction = function buildDraftTransaction() {\n return {\n amount: undefined,\n address: undefined\n };\n}; // TODO: Split into common success and failure types\n// See details in https://github.com/lbryio/lbry/issues/1307\n\n\nvar defaultState$a = {\n balance: undefined,\n totalBalance: undefined,\n reservedBalance: undefined,\n claimsBalance: undefined,\n supportsBalance: undefined,\n tipsBalance: undefined,\n latestBlock: undefined,\n transactions: {},\n fetchingTransactions: false,\n supports: {},\n fetchingSupports: false,\n abandoningSupportsByOutpoint: {},\n gettingNewAddress: false,\n draftTransaction: buildDraftTransaction(),\n sendingSupport: false,\n walletIsEncrypted: false,\n walletEncryptPending: false,\n walletEncryptSucceded: null,\n walletEncryptResult: null,\n walletDecryptPending: false,\n walletDecryptSucceded: null,\n walletDecryptResult: null,\n walletUnlockPending: false,\n walletUnlockSucceded: null,\n walletUnlockResult: null,\n walletLockPending: false,\n walletLockSucceded: null,\n walletLockResult: null,\n transactionListFilter: 'all',\n walletReconnecting: false\n};\nvar walletReducer = handleActions((_handleActions7 = {}, _defineProperty(_handleActions7, FETCH_TRANSACTIONS_STARTED, function (state) {\n return _extends$i({}, state, {\n fetchingTransactions: true\n });\n}), _defineProperty(_handleActions7, FETCH_TRANSACTIONS_COMPLETED, function (state, action) {\n var byId = _extends$i({}, state.transactions);\n\n var transactions = action.data.transactions;\n transactions.forEach(function (transaction) {\n byId[transaction.txid] = transaction;\n });\n return _extends$i({}, state, {\n transactions: byId,\n fetchingTransactions: false\n });\n}), _defineProperty(_handleActions7, FETCH_SUPPORTS_STARTED, function (state) {\n return _extends$i({}, state, {\n fetchingSupports: true\n });\n}), _defineProperty(_handleActions7, FETCH_SUPPORTS_COMPLETED, function (state, action) {\n var byOutpoint = state.supports;\n var supports = action.data.supports;\n supports.forEach(function (transaction) {\n var txid = transaction.txid,\n nout = transaction.nout;\n byOutpoint[\"\".concat(txid, \":\").concat(nout)] = transaction;\n });\n return _extends$i({}, state, {\n supports: byOutpoint,\n fetchingSupports: false\n });\n}), _defineProperty(_handleActions7, ABANDON_SUPPORT_STARTED, function (state, action) {\n var outpoint = action.data.outpoint;\n var currentlyAbandoning = state.abandoningSupportsByOutpoint;\n currentlyAbandoning[outpoint] = true;\n return _extends$i({}, state, {\n abandoningSupportsByOutpoint: currentlyAbandoning\n });\n}), _defineProperty(_handleActions7, ABANDON_SUPPORT_COMPLETED, function (state, action) {\n var outpoint = action.data.outpoint;\n var byOutpoint = state.supports;\n var currentlyAbandoning = state.abandoningSupportsByOutpoint;\n delete currentlyAbandoning[outpoint];\n delete byOutpoint[outpoint];\n return _extends$i({}, state, {\n supports: byOutpoint,\n abandoningSupportsById: currentlyAbandoning\n });\n}), _defineProperty(_handleActions7, GET_NEW_ADDRESS_STARTED, function (state) {\n return _extends$i({}, state, {\n gettingNewAddress: true\n });\n}), _defineProperty(_handleActions7, GET_NEW_ADDRESS_COMPLETED, function (state, action) {\n var address = action.data.address;\n return _extends$i({}, state, {\n gettingNewAddress: false,\n receiveAddress: address\n });\n}), _defineProperty(_handleActions7, UPDATE_BALANCE, function (state, action) {\n return _extends$i({}, state, {\n totalBalance: action.data.totalBalance,\n balance: action.data.balance,\n reservedBalance: action.data.reservedBalance,\n claimsBalance: action.data.claimsBalance,\n supportsBalance: action.data.supportsBalance,\n tipsBalance: action.data.tipsBalance\n });\n}), _defineProperty(_handleActions7, CHECK_ADDRESS_IS_MINE_STARTED, function (state) {\n return _extends$i({}, state, {\n checkingAddressOwnership: true\n });\n}), _defineProperty(_handleActions7, CHECK_ADDRESS_IS_MINE_COMPLETED, function (state) {\n return _extends$i({}, state, {\n checkingAddressOwnership: false\n });\n}), _defineProperty(_handleActions7, SET_DRAFT_TRANSACTION_AMOUNT, function (state, action) {\n var oldDraft = state.draftTransaction;\n\n var newDraft = _extends$i({}, oldDraft, {\n amount: parseFloat(action.data.amount)\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraft\n });\n}), _defineProperty(_handleActions7, SET_DRAFT_TRANSACTION_ADDRESS, function (state, action) {\n var oldDraft = state.draftTransaction;\n\n var newDraft = _extends$i({}, oldDraft, {\n address: action.data.address\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraft\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_STARTED, function (state) {\n var newDraftTransaction = _extends$i({}, state.draftTransaction, {\n sending: true\n });\n\n return _extends$i({}, state, {\n draftTransaction: newDraftTransaction\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_COMPLETED, function (state) {\n return Object.assign({}, state, {\n draftTransaction: buildDraftTransaction()\n });\n}), _defineProperty(_handleActions7, SEND_TRANSACTION_FAILED, function (state, action) {\n var newDraftTransaction = Object.assign({}, state.draftTransaction, {\n sending: false,\n error: action.data.error\n });\n return _extends$i({}, state, {\n draftTransaction: newDraftTransaction\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_STARTED, function (state) {\n return _extends$i({}, state, {\n sendingSupport: true\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_COMPLETED, function (state) {\n return _extends$i({}, state, {\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, SUPPORT_TRANSACTION_FAILED, function (state, action) {\n return _extends$i({}, state, {\n error: action.data.error,\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, CLEAR_SUPPORT_TRANSACTION, function (state) {\n return _extends$i({}, state, {\n sendingSupport: false\n });\n}), _defineProperty(_handleActions7, WALLET_STATUS_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletIsEncrypted: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_START, function (state) {\n return _extends$i({}, state, {\n walletEncryptPending: true,\n walletEncryptSucceded: null,\n walletEncryptResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletEncryptPending: false,\n walletEncryptSucceded: true,\n walletEncryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_ENCRYPT_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletEncryptPending: false,\n walletEncryptSucceded: false,\n walletEncryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_START, function (state) {\n return _extends$i({}, state, {\n walletDecryptPending: true,\n walletDecryptSucceded: null,\n walletDecryptResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletDecryptPending: false,\n walletDecryptSucceded: true,\n walletDecryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_DECRYPT_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletDecryptPending: false,\n walletDecryptSucceded: false,\n walletDecryptResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_START, function (state) {\n return _extends$i({}, state, {\n walletUnlockPending: true,\n walletUnlockSucceded: null,\n walletUnlockResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletUnlockPending: false,\n walletUnlockSucceded: true,\n walletUnlockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_UNLOCK_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletUnlockPending: false,\n walletUnlockSucceded: false,\n walletUnlockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_START, function (state) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: null,\n walletLockResult: null\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_COMPLETED, function (state, action) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: true,\n walletLockResult: action.result\n });\n}), _defineProperty(_handleActions7, WALLET_LOCK_FAILED, function (state, action) {\n return _extends$i({}, state, {\n walletLockPending: false,\n walletLockSucceded: false,\n walletLockResult: action.result\n });\n}), _defineProperty(_handleActions7, SET_TRANSACTION_LIST_FILTER, function (state, action) {\n return _extends$i({}, state, {\n transactionListFilter: action.data\n });\n}), _defineProperty(_handleActions7, UPDATE_CURRENT_HEIGHT, function (state, action) {\n return _extends$i({}, state, {\n latestBlock: action.data\n });\n}), _defineProperty(_handleActions7, WALLET_RESTART, function (state) {\n return _extends$i({}, state, {\n walletReconnecting: true\n });\n}), _defineProperty(_handleActions7, WALLET_RESTART_COMPLETED, function (state) {\n return _extends$i({}, state, {\n walletReconnecting: false\n });\n}), _handleActions7), defaultState$a); // \n\nvar selectState$6 = function selectState$6(state) {\n return state.content || {};\n};\n\nvar makeSelectContentPositionForUri = function makeSelectContentPositionForUri(uri) {\n return reselect.createSelector(selectState$6, makeSelectClaimForUri(uri), function (state, claim) {\n if (!claim) {\n return null;\n }\n\n var outpoint = \"\".concat(claim.txid, \":\").concat(claim.nout);\n var id = claim.claim_id;\n return state.positions[id] ? state.positions[id][outpoint] : null;\n });\n};\n\nvar _extends$j = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar selectState$7 = function selectState$7(state) {\n return state.notifications || {};\n};\n\nvar selectToast = reselect.createSelector(selectState$7, function (state) {\n if (state.toasts.length) {\n var _state$toasts$ = state.toasts[0],\n id = _state$toasts$.id,\n params = _state$toasts$.params;\n return _extends$j({\n id: id\n }, params);\n }\n\n return null;\n});\nvar selectError = reselect.createSelector(selectState$7, function (state) {\n if (state.errors.length) {\n var error = state.errors[0].error;\n return {\n error: error\n };\n }\n\n return null;\n}); // \n\nvar selectState$8 = function selectState$8(state) {\n return state.comments || {};\n};\n\nvar selectCommentsById = reselect.createSelector(selectState$8, function (state) {\n return state.commentById || {};\n});\nvar selectCommentsByClaimId = reselect.createSelector(selectState$8, selectCommentsById, function (state, byId) {\n var byClaimId = state.byId || {};\n var comments = {}; // replace every comment_id in the list with the actual comment object\n\n Object.keys(byClaimId).forEach(function (claimId) {\n var commentIds = byClaimId[claimId];\n comments[claimId] = Array(commentIds === null ? 0 : commentIds.length);\n\n for (var i = 0; i < commentIds.length; i++) {\n comments[claimId][i] = byId[commentIds[i]];\n }\n });\n return comments;\n}); // previously this used a mapping from claimId -> Array<Comments>\n\n/* export const selectCommentsById = createSelector(\n selectState,\n state => state.byId || {}\n); */\n\nvar selectCommentsByUri = reselect.createSelector(selectState$8, function (state) {\n var byUri = state.commentsByUri || {};\n var comments = {};\n Object.keys(byUri).forEach(function (uri) {\n var claimId = byUri[uri];\n\n if (claimId === null) {\n comments[uri] = null;\n } else {\n comments[uri] = claimId;\n }\n });\n return comments;\n});\n\nvar makeSelectCommentsForUri = function makeSelectCommentsForUri(uri) {\n return reselect.createSelector(selectCommentsByClaimId, selectCommentsByUri, function (byClaimId, byUri) {\n var claimId = byUri[uri];\n return byClaimId && byClaimId[claimId];\n });\n}; // todo: allow SDK to retrieve user comments through comment_list\n// todo: implement selectors for selecting comments owned by user\n// \n\n\nvar selectState$9 = function selectState$9(state) {\n return state.tags || {};\n};\n\nvar selectKnownTagsByName = reselect.createSelector(selectState$9, function (state) {\n return state.knownTags;\n});\nvar selectFollowedTagsList = reselect.createSelector(selectState$9, function (state) {\n return state.followedTags.filter(function (tag) {\n return typeof tag === 'string';\n });\n});\nvar selectFollowedTags = reselect.createSelector(selectFollowedTagsList, function (followedTags) {\n return followedTags.map(function (tag) {\n return {\n name: tag.toLowerCase()\n };\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n});\nvar selectUnfollowedTags = reselect.createSelector(selectKnownTagsByName, selectFollowedTagsList, function (tagsByName, followedTags) {\n var followedTagsSet = new Set(followedTags);\n var tagsToReturn = [];\n Object.keys(tagsByName).forEach(function (key) {\n if (!followedTagsSet.has(key)) {\n var name = tagsByName[key].name;\n tagsToReturn.push({\n name: name.toLowerCase()\n });\n }\n });\n return tagsToReturn;\n});\n\nvar makeSelectIsFollowingTag = function makeSelectIsFollowingTag(tag) {\n return reselect.createSelector(selectFollowedTags, function (followedTags) {\n return followedTags.some(function (followedTag) {\n return followedTag.name === tag.toLowerCase();\n });\n });\n}; // \n\n\nvar selectState$a = function selectState$a(state) {\n return state.blocked || {};\n};\n\nvar selectBlockedChannels = reselect.createSelector(selectState$a, function (state) {\n return state.blockedChannels;\n});\nvar selectBlockedChannelsCount = reselect.createSelector(selectBlockedChannels, function (state) {\n return state.length;\n});\n\nvar selectChannelIsBlocked = function selectChannelIsBlocked(uri) {\n return reselect.createSelector(selectBlockedChannels, function (state) {\n return state.includes(uri);\n });\n};\n\nexports.ACTIONS = action_types;\nexports.CLAIM_VALUES = claim;\nexports.DAEMON_SETTINGS = daemon_settings;\nexports.DEFAULT_FOLLOWED_TAGS = DEFAULT_FOLLOWED_TAGS;\nexports.DEFAULT_KNOWN_TAGS = DEFAULT_KNOWN_TAGS;\nexports.LICENSES = licenses;\nexports.Lbry = lbryProxy;\nexports.MATURE_TAGS = MATURE_TAGS;\nexports.PAGES = pages;\nexports.SEARCH_OPTIONS = SEARCH_OPTIONS;\nexports.SEARCH_TYPES = SEARCH_TYPES;\nexports.SETTINGS = settings;\nexports.SHARED_PREFERENCES = shared_preferences;\nexports.SORT_OPTIONS = sort_options;\nexports.SPEECH_URLS = speech_urls;\nexports.THUMBNAIL_STATUSES = thumbnail_upload_statuses;\nexports.TRANSACTIONS = transaction_types;\nexports.TX_LIST = transaction_list;\nexports.apiCall = apiCall;\nexports.batchActions = batchActions;\nexports.blockedReducer = blockedReducer;\nexports.buildSharedStateMiddleware = buildSharedStateMiddleware;\nexports.buildURI = buildURI;\nexports.claimsReducer = claimsReducer;\nexports.commentReducer = commentReducer;\nexports.contentReducer = contentReducer;\nexports.convertToShareLink = convertToShareLink;\nexports.createNormalizedClaimSearchKey = createNormalizedClaimSearchKey;\nexports.creditsToString = creditsToString;\nexports.doAbandonClaim = doAbandonClaim;\nexports.doAddTag = doAddTag;\nexports.doBalanceSubscribe = doBalanceSubscribe;\nexports.doBlurSearchInput = doBlurSearchInput;\nexports.doCheckAddressIsMine = doCheckAddressIsMine;\nexports.doCheckPendingPublishes = doCheckPendingPublishes;\nexports.doClaimSearch = doClaimSearch;\nexports.doClearPublish = doClearPublish;\nexports.doClearSupport = doClearSupport;\nexports.doCommentAbandon = doCommentAbandon;\nexports.doCommentCreate = doCommentCreate;\nexports.doCommentHide = doCommentHide;\nexports.doCommentList = doCommentList;\nexports.doCommentUpdate = doCommentUpdate;\nexports.doCreateChannel = doCreateChannel;\nexports.doDeletePurchasedUri = doDeletePurchasedUri;\nexports.doDeleteTag = doDeleteTag;\nexports.doDismissError = doDismissError;\nexports.doDismissToast = doDismissToast;\nexports.doError = doError;\nexports.doFetchChannelListMine = doFetchChannelListMine;\nexports.doFetchClaimListMine = doFetchClaimListMine;\nexports.doFetchClaimsByChannel = doFetchClaimsByChannel;\nexports.doFetchFileInfo = doFetchFileInfo;\nexports.doFetchFileInfosAndPublishedClaims = doFetchFileInfosAndPublishedClaims;\nexports.doFetchTransactions = doFetchTransactions;\nexports.doFileGet = doFileGet;\nexports.doFileList = doFileList;\nexports.doFocusSearchInput = doFocusSearchInput;\nexports.doGetNewAddress = doGetNewAddress;\nexports.doImportChannel = doImportChannel;\nexports.doPopulateSharedUserState = doPopulateSharedUserState;\nexports.doPreferenceGet = doPreferenceGet;\nexports.doPreferenceSet = doPreferenceSet;\nexports.doPrepareEdit = doPrepareEdit;\nexports.doPublish = doPublish;\nexports.doPurchaseUri = doPurchaseUri;\nexports.doResetThumbnailStatus = doResetThumbnailStatus;\nexports.doResolveUri = doResolveUri;\nexports.doResolveUris = doResolveUris;\nexports.doResolvedSearch = doResolvedSearch;\nexports.doSearch = doSearch;\nexports.doSendDraftTransaction = doSendDraftTransaction;\nexports.doSendTip = doSendTip;\nexports.doSetDraftTransactionAddress = doSetDraftTransactionAddress;\nexports.doSetDraftTransactionAmount = doSetDraftTransactionAmount;\nexports.doSetFileListSort = doSetFileListSort;\nexports.doSetTransactionListFilter = doSetTransactionListFilter;\nexports.doToast = doToast;\nexports.doToggleBlockChannel = doToggleBlockChannel;\nexports.doToggleTagFollow = doToggleTagFollow;\nexports.doUpdateBalance = doUpdateBalance;\nexports.doUpdateBlockHeight = doUpdateBlockHeight;\nexports.doUpdateChannel = doUpdateChannel;\nexports.doUpdatePublishForm = doUpdatePublishForm;\nexports.doUpdateSearchOptions = doUpdateSearchOptions;\nexports.doUpdateSearchQuery = doUpdateSearchQuery;\nexports.doUploadThumbnail = doUploadThumbnail;\nexports.doWalletDecrypt = doWalletDecrypt;\nexports.doWalletEncrypt = doWalletEncrypt;\nexports.doWalletReconnect = doWalletReconnect;\nexports.doWalletStatus = doWalletStatus;\nexports.doWalletUnlock = doWalletUnlock;\nexports.fileInfoReducer = fileInfoReducer;\nexports.fileReducer = fileReducer;\nexports.formatCredits = formatCredits;\nexports.formatFullPrice = formatFullPrice;\nexports.isClaimNsfw = isClaimNsfw;\nexports.isNameValid = isNameValid;\nexports.isURIClaimable = isURIClaimable;\nexports.isURIValid = isURIValid;\nexports.makeSelectAmountForUri = makeSelectAmountForUri;\nexports.makeSelectCanonicalUrlForUri = makeSelectCanonicalUrlForUri;\nexports.makeSelectChannelForClaimUri = makeSelectChannelForClaimUri;\nexports.makeSelectClaimForUri = makeSelectClaimForUri;\nexports.makeSelectClaimIsMine = makeSelectClaimIsMine;\nexports.makeSelectClaimIsNsfw = makeSelectClaimIsNsfw;\nexports.makeSelectClaimIsPending = makeSelectClaimIsPending;\nexports.makeSelectClaimsInChannelForCurrentPageState = makeSelectClaimsInChannelForCurrentPageState;\nexports.makeSelectClaimsInChannelForPage = makeSelectClaimsInChannelForPage;\nexports.makeSelectCommentsForUri = makeSelectCommentsForUri;\nexports.makeSelectContentPositionForUri = makeSelectContentPositionForUri;\nexports.makeSelectContentTypeForUri = makeSelectContentTypeForUri;\nexports.makeSelectCoverForUri = makeSelectCoverForUri;\nexports.makeSelectDateForUri = makeSelectDateForUri;\nexports.makeSelectDownloadPathForUri = makeSelectDownloadPathForUri;\nexports.makeSelectDownloadingForUri = makeSelectDownloadingForUri;\nexports.makeSelectFetchingChannelClaims = makeSelectFetchingChannelClaims;\nexports.makeSelectFileInfoForUri = makeSelectFileInfoForUri;\nexports.makeSelectFileNameForUri = makeSelectFileNameForUri;\nexports.makeSelectFilePartlyDownloaded = makeSelectFilePartlyDownloaded;\nexports.makeSelectFilteredTransactionsForPage = makeSelectFilteredTransactionsForPage;\nexports.makeSelectFirstRecommendedFileForUri = makeSelectFirstRecommendedFileForUri;\nexports.makeSelectIsFollowingTag = makeSelectIsFollowingTag;\nexports.makeSelectIsUriResolving = makeSelectIsUriResolving;\nexports.makeSelectLatestTransactions = makeSelectLatestTransactions;\nexports.makeSelectLoadingForUri = makeSelectLoadingForUri;\nexports.makeSelectMediaTypeForUri = makeSelectMediaTypeForUri;\nexports.makeSelectMetadataForUri = makeSelectMetadataForUri;\nexports.makeSelectMetadataItemForUri = makeSelectMetadataItemForUri;\nexports.makeSelectMyStreamUrlsForPage = makeSelectMyStreamUrlsForPage;\nexports.makeSelectNsfwCountForChannel = makeSelectNsfwCountForChannel;\nexports.makeSelectNsfwCountFromUris = makeSelectNsfwCountFromUris;\nexports.makeSelectOmittedCountForChannel = makeSelectOmittedCountForChannel;\nexports.makeSelectPendingByUri = makeSelectPendingByUri;\nexports.makeSelectPermanentUrlForUri = makeSelectPermanentUrlForUri;\nexports.makeSelectPublishFormValue = makeSelectPublishFormValue;\nexports.makeSelectQueryWithOptions = makeSelectQueryWithOptions;\nexports.makeSelectRecommendedContentForUri = makeSelectRecommendedContentForUri;\nexports.makeSelectResolvedRecommendedContentForUri = makeSelectResolvedRecommendedContentForUri;\nexports.makeSelectResolvedSearchResults = makeSelectResolvedSearchResults;\nexports.makeSelectResolvedSearchResultsLastPageReached = makeSelectResolvedSearchResultsLastPageReached;\nexports.makeSelectSearchDownloadUrlsCount = makeSelectSearchDownloadUrlsCount;\nexports.makeSelectSearchDownloadUrlsForPage = makeSelectSearchDownloadUrlsForPage;\nexports.makeSelectSearchUris = makeSelectSearchUris;\nexports.makeSelectShortUrlForUri = makeSelectShortUrlForUri;\nexports.makeSelectStreamingUrlForUri = makeSelectStreamingUrlForUri;\nexports.makeSelectSupportsForUri = makeSelectSupportsForUri;\nexports.makeSelectTagsForUri = makeSelectTagsForUri;\nexports.makeSelectThumbnailForUri = makeSelectThumbnailForUri;\nexports.makeSelectTitleForUri = makeSelectTitleForUri;\nexports.makeSelectTotalClaimsInChannelSearch = makeSelectTotalClaimsInChannelSearch;\nexports.makeSelectTotalItemsForChannel = makeSelectTotalItemsForChannel;\nexports.makeSelectTotalPagesForChannel = makeSelectTotalPagesForChannel;\nexports.makeSelectTotalPagesInChannelSearch = makeSelectTotalPagesInChannelSearch;\nexports.makeSelectUriIsStreamable = makeSelectUriIsStreamable;\nexports.normalizeURI = normalizeURI;\nexports.notificationsReducer = notificationsReducer;\nexports.parseQueryParams = parseQueryParams;\nexports.parseURI = parseURI;\nexports.publishReducer = publishReducer;\nexports.regexAddress = regexAddress;\nexports.regexInvalidURI = regexInvalidURI;\nexports.savePosition = savePosition;\nexports.searchReducer = searchReducer;\nexports.selectAbandoningIds = selectAbandoningIds;\nexports.selectAllClaimsByChannel = selectAllClaimsByChannel;\nexports.selectAllFetchingChannelClaims = selectAllFetchingChannelClaims;\nexports.selectAllMyClaimsByOutpoint = selectAllMyClaimsByOutpoint;\nexports.selectBalance = selectBalance;\nexports.selectBlockedChannels = selectBlockedChannels;\nexports.selectBlockedChannelsCount = selectBlockedChannelsCount;\nexports.selectBlocks = selectBlocks;\nexports.selectChannelClaimCounts = selectChannelClaimCounts;\nexports.selectChannelImportPending = selectChannelImportPending;\nexports.selectChannelIsBlocked = selectChannelIsBlocked;\nexports.selectClaimSearchByQuery = selectClaimSearchByQuery;\nexports.selectClaimSearchByQueryLastPageReached = selectClaimSearchByQueryLastPageReached;\nexports.selectClaimsBalance = selectClaimsBalance;\nexports.selectClaimsById = selectClaimsById;\nexports.selectClaimsByUri = selectClaimsByUri;\nexports.selectCreateChannelError = selectCreateChannelError;\nexports.selectCreatingChannel = selectCreatingChannel;\nexports.selectCurrentChannelPage = selectCurrentChannelPage;\nexports.selectDownloadUrlsCount = selectDownloadUrlsCount;\nexports.selectDownloadedUris = selectDownloadedUris;\nexports.selectDownloadingByOutpoint = selectDownloadingByOutpoint;\nexports.selectDownloadingFileInfos = selectDownloadingFileInfos;\nexports.selectDraftTransaction = selectDraftTransaction;\nexports.selectDraftTransactionAddress = selectDraftTransactionAddress;\nexports.selectDraftTransactionAmount = selectDraftTransactionAmount;\nexports.selectDraftTransactionError = selectDraftTransactionError;\nexports.selectError = selectError;\nexports.selectFailedPurchaseUris = selectFailedPurchaseUris;\nexports.selectFetchingClaimSearch = selectFetchingClaimSearch;\nexports.selectFetchingClaimSearchByQuery = selectFetchingClaimSearchByQuery;\nexports.selectFetchingMyChannels = selectFetchingMyChannels;\nexports.selectFileInfosByOutpoint = selectFileInfosByOutpoint;\nexports.selectFileInfosDownloaded = selectFileInfosDownloaded;\nexports.selectFileListDownloadedSort = selectFileListDownloadedSort;\nexports.selectFileListPublishedSort = selectFileListPublishedSort;\nexports.selectFilteredTransactionCount = selectFilteredTransactionCount;\nexports.selectFilteredTransactions = selectFilteredTransactions;\nexports.selectFollowedTags = selectFollowedTags;\nexports.selectGettingNewAddress = selectGettingNewAddress;\nexports.selectHasTransactions = selectHasTransactions;\nexports.selectIsFetchingClaimListMine = selectIsFetchingClaimListMine;\nexports.selectIsFetchingFileList = selectIsFetchingFileList;\nexports.selectIsFetchingFileListDownloadedOrPublished = selectIsFetchingFileListDownloadedOrPublished;\nexports.selectIsFetchingTransactions = selectIsFetchingTransactions;\nexports.selectIsResolvingPublishUris = selectIsResolvingPublishUris;\nexports.selectIsSearching = selectIsSearching;\nexports.selectIsSendingSupport = selectIsSendingSupport;\nexports.selectIsStillEditing = selectIsStillEditing;\nexports.selectIsWalletReconnecting = selectIsWalletReconnecting;\nexports.selectLastPurchasedUri = selectLastPurchasedUri;\nexports.selectMyActiveClaims = selectMyActiveClaims;\nexports.selectMyChannelClaims = selectMyChannelClaims;\nexports.selectMyClaimForUri = selectMyClaimForUri;\nexports.selectMyClaimUrisWithoutChannels = selectMyClaimUrisWithoutChannels;\nexports.selectMyClaims = selectMyClaims;\nexports.selectMyClaimsOutpoints = selectMyClaimsOutpoints;\nexports.selectMyClaimsRaw = selectMyClaimsRaw;\nexports.selectMyClaimsWithoutChannels = selectMyClaimsWithoutChannels;\nexports.selectMyStreamUrlsCount = selectMyStreamUrlsCount;\nexports.selectPendingById = selectPendingById;\nexports.selectPendingClaims = selectPendingClaims;\nexports.selectPlayingUri = selectPlayingUri;\nexports.selectPublishFormValues = selectPublishFormValues;\nexports.selectPurchaseUriErrorMessage = selectPurchaseUriErrorMessage;\nexports.selectPurchasedUris = selectPurchasedUris;\nexports.selectReceiveAddress = selectReceiveAddress;\nexports.selectRecentTransactions = selectRecentTransactions;\nexports.selectReservedBalance = selectReservedBalance;\nexports.selectResolvedSearchResultsByQuery = selectResolvedSearchResultsByQuery;\nexports.selectResolvedSearchResultsByQueryLastPageReached = selectResolvedSearchResultsByQueryLastPageReached;\nexports.selectResolvingUris = selectResolvingUris;\nexports.selectSearchBarFocused = selectSearchBarFocused;\nexports.selectSearchOptions = selectSearchOptions;\nexports.selectSearchState = selectState;\nexports.selectSearchSuggestions = selectSearchSuggestions;\nexports.selectSearchUrisByQuery = selectSearchUrisByQuery;\nexports.selectSearchValue = selectSearchValue;\nexports.selectSupportsBalance = selectSupportsBalance;\nexports.selectSupportsByOutpoint = selectSupportsByOutpoint;\nexports.selectTakeOverAmount = selectTakeOverAmount;\nexports.selectTipsBalance = selectTipsBalance;\nexports.selectToast = selectToast;\nexports.selectTotalBalance = selectTotalBalance;\nexports.selectTotalDownloadProgress = selectTotalDownloadProgress;\nexports.selectTotalSupports = selectTotalSupports;\nexports.selectTransactionItems = selectTransactionItems;\nexports.selectTransactionListFilter = selectTransactionListFilter;\nexports.selectTransactionsById = selectTransactionsById;\nexports.selectUnfollowedTags = selectUnfollowedTags;\nexports.selectUpdateChannelError = selectUpdateChannelError;\nexports.selectUpdatingChannel = selectUpdatingChannel;\nexports.selectUrisLoading = selectUrisLoading;\nexports.selectWalletDecryptPending = selectWalletDecryptPending;\nexports.selectWalletDecryptResult = selectWalletDecryptResult;\nexports.selectWalletDecryptSucceeded = selectWalletDecryptSucceeded;\nexports.selectWalletEncryptPending = selectWalletEncryptPending;\nexports.selectWalletEncryptResult = selectWalletEncryptResult;\nexports.selectWalletEncryptSucceeded = selectWalletEncryptSucceeded;\nexports.selectWalletIsEncrypted = selectWalletIsEncrypted;\nexports.selectWalletState = selectWalletState;\nexports.selectWalletUnlockPending = selectWalletUnlockPending;\nexports.selectWalletUnlockResult = selectWalletUnlockResult;\nexports.selectWalletUnlockSucceeded = selectWalletUnlockSucceeded;\nexports.setSearchApi = setSearchApi;\nexports.tagsReducer = tagsReducer;\nexports.toQueryString = toQueryString;\nexports.walletReducer = walletReducer;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbGJyeS1yZWR1eC9kaXN0L2J1bmRsZS5lcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sYnJ5LXJlZHV4L2Rpc3QvYnVuZGxlLmVzLmpzPzM3YjAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxucmVxdWlyZSgncHJveHktcG9seWZpbGwnKTtcbnZhciByZXNlbGVjdCA9IHJlcXVpcmUoJ3Jlc2VsZWN0Jyk7XG52YXIgdXVpZCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd1dWlkL3Y0JykpO1xuXG5jb25zdCBNSU5JTVVNX1BVQkxJU0hfQklEID0gMC4wMDAwMDAwMTtcblxuY29uc3QgQ0hBTk5FTF9BTk9OWU1PVVMgPSAnYW5vbnltb3VzJztcbmNvbnN0IENIQU5ORUxfTkVXID0gJ25ldyc7XG5jb25zdCBQQUdFX1NJWkUgPSAyMDtcblxudmFyIGNsYWltID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBNSU5JTVVNX1BVQkxJU0hfQklEOiBNSU5JTVVNX1BVQkxJU0hfQklELFxuICBDSEFOTkVMX0FOT05ZTU9VUzogQ0hBTk5FTF9BTk9OWU1PVVMsXG4gIENIQU5ORUxfTkVXOiBDSEFOTkVMX05FVyxcbiAgUEFHRV9TSVpFOiBQQUdFX1NJWkVcbn0pO1xuXG5jb25zdCBXSU5ET1dfRk9DVVNFRCA9ICdXSU5ET1dfRk9DVVNFRCc7XG5jb25zdCBEQUVNT05fUkVBRFkgPSAnREFFTU9OX1JFQURZJztcbmNvbnN0IERBRU1PTl9WRVJTSU9OX01BVENIID0gJ0RBRU1PTl9WRVJTSU9OX01BVENIJztcbmNvbnN0IERBRU1PTl9WRVJTSU9OX01JU01BVENIID0gJ0RBRU1PTl9WRVJTSU9OX01JU01BVENIJztcbmNvbnN0IFZPTFVNRV9DSEFOR0VEID0gJ1ZPTFVNRV9DSEFOR0VEJztcblxuLy8gTmF2aWdhdGlvblxuY29uc3QgQ0hBTkdFX0FGVEVSX0FVVEhfUEFUSCA9ICdDSEFOR0VfQUZURVJfQVVUSF9QQVRIJztcbmNvbnN0IFdJTkRPV19TQ1JPTExFRCA9ICdXSU5ET1dfU0NST0xMRUQnO1xuY29uc3QgSElTVE9SWV9OQVZJR0FURSA9ICdISVNUT1JZX05BVklHQVRFJztcblxuLy8gVXBncmFkZXNcbmNvbnN0IFVQR1JBREVfQ0FOQ0VMTEVEID0gJ1VQR1JBREVfQ0FOQ0VMTEVEJztcbmNvbnN0IERPV05MT0FEX1VQR1JBREUgPSAnRE9XTkxPQURfVVBHUkFERSc7XG5jb25zdCBVUEdSQURFX0RPV05MT0FEX1NUQVJURUQgPSAnVVBHUkFERV9ET1dOTE9BRF9TVEFSVEVEJztcbmNvbnN0IFVQR1JBREVfRE9XTkxPQURfQ09NUExFVEVEID0gJ1VQR1JBREVfRE9XTkxPQURfQ09NUExFVEVEJztcbmNvbnN0IFVQR1JBREVfRE9XTkxPQURfUFJPR1JFU1NFRCA9ICdVUEdSQURFX0RPV05MT0FEX1BST0dSRVNTRUQnO1xuY29uc3QgQ0hFQ0tfVVBHUkFERV9BVkFJTEFCTEUgPSAnQ0hFQ0tfVVBHUkFERV9BVkFJTEFCTEUnO1xuY29uc3QgQ0hFQ0tfVVBHUkFERV9TVEFSVCA9ICdDSEVDS19VUEdSQURFX1NUQVJUJztcbmNvbnN0IENIRUNLX1VQR1JBREVfU1VDQ0VTUyA9ICdDSEVDS19VUEdSQURFX1NVQ0NFU1MnO1xuY29uc3QgQ0hFQ0tfVVBHUkFERV9GQUlMID0gJ0NIRUNLX1VQR1JBREVfRkFJTCc7XG5jb25zdCBDSEVDS19VUEdSQURFX1NVQlNDUklCRSA9ICdDSEVDS19VUEdSQURFX1NVQlNDUklCRSc7XG5jb25zdCBVUERBVEVfVkVSU0lPTiA9ICdVUERBVEVfVkVSU0lPTic7XG5jb25zdCBVUERBVEVfUkVNT1RFX1ZFUlNJT04gPSAnVVBEQVRFX1JFTU9URV9WRVJTSU9OJztcbmNvbnN0IFNLSVBfVVBHUkFERSA9ICdTS0lQX1VQR1JBREUnO1xuY29uc3QgU1RBUlRfVVBHUkFERSA9ICdTVEFSVF9VUEdSQURFJztcbmNvbnN0IEFVVE9fVVBEQVRFX0RFQ0xJTkVEID0gJ0FVVE9fVVBEQVRFX0RFQ0xJTkVEJztcbmNvbnN0IEFVVE9fVVBEQVRFX0RPV05MT0FERUQgPSAnQVVUT19VUERBVEVfRE9XTkxPQURFRCc7XG5jb25zdCBDTEVBUl9VUEdSQURFX1RJTUVSID0gJ0NMRUFSX1VQR1JBREVfVElNRVInO1xuXG4vLyBXYWxsZXRcbmNvbnN0IEdFVF9ORVdfQUREUkVTU19TVEFSVEVEID0gJ0dFVF9ORVdfQUREUkVTU19TVEFSVEVEJztcbmNvbnN0IEdFVF9ORVdfQUREUkVTU19DT01QTEVURUQgPSAnR0VUX05FV19BRERSRVNTX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCA9ICdGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9UUkFOU0FDVElPTlNfQ09NUExFVEVEID0gJ0ZFVENIX1RSQU5TQUNUSU9OU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRCA9ICdGRVRDSF9TVVBQT1JUU19TVEFSVEVEJztcbmNvbnN0IEZFVENIX1NVUFBPUlRTX0NPTVBMRVRFRCA9ICdGRVRDSF9TVVBQT1JUU19DT01QTEVURUQnO1xuY29uc3QgQUJBTkRPTl9TVVBQT1JUX1NUQVJURUQgPSAnQUJBTkRPTl9TVVBQT1JUX1NUQVJURUQnO1xuY29uc3QgQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRCA9ICdBQkFORE9OX1NVUFBPUlRfQ09NUExFVEVEJztcbmNvbnN0IFVQREFURV9CQUxBTkNFID0gJ1VQREFURV9CQUxBTkNFJztcbmNvbnN0IFVQREFURV9UT1RBTF9CQUxBTkNFID0gJ1VQREFURV9UT1RBTF9CQUxBTkNFJztcbmNvbnN0IENIRUNLX0FERFJFU1NfSVNfTUlORV9TVEFSVEVEID0gJ0NIRUNLX0FERFJFU1NfSVNfTUlORV9TVEFSVEVEJztcbmNvbnN0IENIRUNLX0FERFJFU1NfSVNfTUlORV9DT01QTEVURUQgPSAnQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRCc7XG5jb25zdCBTRU5EX1RSQU5TQUNUSU9OX1NUQVJURUQgPSAnU0VORF9UUkFOU0FDVElPTl9TVEFSVEVEJztcbmNvbnN0IFNFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVEID0gJ1NFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVEJztcbmNvbnN0IFNFTkRfVFJBTlNBQ1RJT05fRkFJTEVEID0gJ1NFTkRfVFJBTlNBQ1RJT05fRkFJTEVEJztcbmNvbnN0IFNVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRCA9ICdTVVBQT1JUX1RSQU5TQUNUSU9OX1NUQVJURUQnO1xuY29uc3QgU1VQUE9SVF9UUkFOU0FDVElPTl9DT01QTEVURUQgPSAnU1VQUE9SVF9UUkFOU0FDVElPTl9DT01QTEVURUQnO1xuY29uc3QgU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQgPSAnU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQnO1xuY29uc3QgQ0xFQVJfU1VQUE9SVF9UUkFOU0FDVElPTiA9ICdDTEVBUl9TVVBQT1JUX1RSQU5TQUNUSU9OJztcbmNvbnN0IFdBTExFVF9FTkNSWVBUX1NUQVJUID0gJ1dBTExFVF9FTkNSWVBUX1NUQVJUJztcbmNvbnN0IFdBTExFVF9FTkNSWVBUX0NPTVBMRVRFRCA9ICdXQUxMRVRfRU5DUllQVF9DT01QTEVURUQnO1xuY29uc3QgV0FMTEVUX0VOQ1JZUFRfRkFJTEVEID0gJ1dBTExFVF9FTkNSWVBUX0ZBSUxFRCc7XG5jb25zdCBXQUxMRVRfVU5MT0NLX1NUQVJUID0gJ1dBTExFVF9VTkxPQ0tfU1RBUlQnO1xuY29uc3QgV0FMTEVUX1VOTE9DS19DT01QTEVURUQgPSAnV0FMTEVUX1VOTE9DS19DT01QTEVURUQnO1xuY29uc3QgV0FMTEVUX1VOTE9DS19GQUlMRUQgPSAnV0FMTEVUX1VOTE9DS19GQUlMRUQnO1xuY29uc3QgV0FMTEVUX0RFQ1JZUFRfU1RBUlQgPSAnV0FMTEVUX0RFQ1JZUFRfU1RBUlQnO1xuY29uc3QgV0FMTEVUX0RFQ1JZUFRfQ09NUExFVEVEID0gJ1dBTExFVF9ERUNSWVBUX0NPTVBMRVRFRCc7XG5jb25zdCBXQUxMRVRfREVDUllQVF9GQUlMRUQgPSAnV0FMTEVUX0RFQ1JZUFRfRkFJTEVEJztcbmNvbnN0IFdBTExFVF9MT0NLX1NUQVJUID0gJ1dBTExFVF9MT0NLX1NUQVJUJztcbmNvbnN0IFdBTExFVF9MT0NLX0NPTVBMRVRFRCA9ICdXQUxMRVRfTE9DS19DT01QTEVURUQnO1xuY29uc3QgV0FMTEVUX0xPQ0tfRkFJTEVEID0gJ1dBTExFVF9MT0NLX0ZBSUxFRCc7XG5jb25zdCBXQUxMRVRfU1RBVFVTX1NUQVJUID0gJ1dBTExFVF9TVEFUVVNfU1RBUlQnO1xuY29uc3QgV0FMTEVUX1NUQVRVU19DT01QTEVURUQgPSAnV0FMTEVUX1NUQVRVU19DT01QTEVURUQnO1xuY29uc3QgV0FMTEVUX1JFU1RBUlQgPSAnV0FMTEVUX1JFU1RBUlQnO1xuY29uc3QgV0FMTEVUX1JFU1RBUlRfQ09NUExFVEVEID0gJ1dBTExFVF9SRVNUQVJUX0NPTVBMRVRFRCc7XG5jb25zdCBTRVRfVFJBTlNBQ1RJT05fTElTVF9GSUxURVIgPSAnU0VUX1RSQU5TQUNUSU9OX0xJU1RfRklMVEVSJztcbmNvbnN0IFVQREFURV9DVVJSRU5UX0hFSUdIVCA9ICdVUERBVEVfQ1VSUkVOVF9IRUlHSFQnO1xuY29uc3QgU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FNT1VOVCA9ICdTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5UJztcbmNvbnN0IFNFVF9EUkFGVF9UUkFOU0FDVElPTl9BRERSRVNTID0gJ1NFVF9EUkFGVF9UUkFOU0FDVElPTl9BRERSRVNTJztcblxuLy8gQ2xhaW1zXG5jb25zdCBSRVNPTFZFX1VSSVNfU1RBUlRFRCA9ICdSRVNPTFZFX1VSSVNfU1RBUlRFRCc7XG5jb25zdCBSRVNPTFZFX1VSSVNfQ09NUExFVEVEID0gJ1JFU09MVkVfVVJJU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEJztcbmNvbnN0IEZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQgPSAnRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEJztcbmNvbnN0IEFCQU5ET05fQ0xBSU1fU1RBUlRFRCA9ICdBQkFORE9OX0NMQUlNX1NUQVJURUQnO1xuY29uc3QgQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQgPSAnQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQgPSAnRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRCA9ICdGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEJztcbmNvbnN0IENSRUFURV9DSEFOTkVMX1NUQVJURUQgPSAnQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCc7XG5jb25zdCBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQgPSAnQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVEJztcbmNvbnN0IENSRUFURV9DSEFOTkVMX0ZBSUxFRCA9ICdDUkVBVEVfQ0hBTk5FTF9GQUlMRUQnO1xuY29uc3QgVVBEQVRFX0NIQU5ORUxfU1RBUlRFRCA9ICdVUERBVEVfQ0hBTk5FTF9TVEFSVEVEJztcbmNvbnN0IFVQREFURV9DSEFOTkVMX0NPTVBMRVRFRCA9ICdVUERBVEVfQ0hBTk5FTF9DT01QTEVURUQnO1xuY29uc3QgVVBEQVRFX0NIQU5ORUxfRkFJTEVEID0gJ1VQREFURV9DSEFOTkVMX0ZBSUxFRCc7XG5jb25zdCBJTVBPUlRfQ0hBTk5FTF9TVEFSVEVEID0gJ0lNUE9SVF9DSEFOTkVMX1NUQVJURUQnO1xuY29uc3QgSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVEID0gJ0lNUE9SVF9DSEFOTkVMX0NPTVBMRVRFRCc7XG5jb25zdCBJTVBPUlRfQ0hBTk5FTF9GQUlMRUQgPSAnSU1QT1JUX0NIQU5ORUxfRkFJTEVEJztcbmNvbnN0IFBVQkxJU0hfU1RBUlRFRCA9ICdQVUJMSVNIX1NUQVJURUQnO1xuY29uc3QgUFVCTElTSF9DT01QTEVURUQgPSAnUFVCTElTSF9DT01QTEVURUQnO1xuY29uc3QgUFVCTElTSF9GQUlMRUQgPSAnUFVCTElTSF9GQUlMRUQnO1xuY29uc3QgU0VUX1BMQVlJTkdfVVJJID0gJ1NFVF9QTEFZSU5HX1VSSSc7XG5jb25zdCBTRVRfQ09OVEVOVF9QT1NJVElPTiA9ICdTRVRfQ09OVEVOVF9QT1NJVElPTic7XG5jb25zdCBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCA9ICdTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCc7XG5jb25zdCBDTEVBUl9DT05URU5UX0hJU1RPUllfVVJJID0gJ0NMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkknO1xuY29uc3QgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTCA9ICdDTEVBUl9DT05URU5UX0hJU1RPUllfQUxMJztcbmNvbnN0IENMQUlNX1NFQVJDSF9TVEFSVEVEID0gJ0NMQUlNX1NFQVJDSF9TVEFSVEVEJztcbmNvbnN0IENMQUlNX1NFQVJDSF9DT01QTEVURUQgPSAnQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRCc7XG5jb25zdCBDTEFJTV9TRUFSQ0hfRkFJTEVEID0gJ0NMQUlNX1NFQVJDSF9GQUlMRUQnO1xuY29uc3QgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfU1RBUlRFRCA9ICdDTEFJTV9TRUFSQ0hfQllfVEFHU19TVEFSVEVEJztcbmNvbnN0IENMQUlNX1NFQVJDSF9CWV9UQUdTX0NPTVBMRVRFRCA9ICdDTEFJTV9TRUFSQ0hfQllfVEFHU19DT01QTEVURUQnO1xuY29uc3QgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfRkFJTEVEID0gJ0NMQUlNX1NFQVJDSF9CWV9UQUdTX0ZBSUxFRCc7XG5cbi8vIENvbW1lbnRzXG5jb25zdCBDT01NRU5UX0xJU1RfU1RBUlRFRCA9ICdDT01NRU5UX0xJU1RfU1RBUlRFRCc7XG5jb25zdCBDT01NRU5UX0xJU1RfQ09NUExFVEVEID0gJ0NPTU1FTlRfTElTVF9DT01QTEVURUQnO1xuY29uc3QgQ09NTUVOVF9MSVNUX0ZBSUxFRCA9ICdDT01NRU5UX0xJU1RfRkFJTEVEJztcbmNvbnN0IENPTU1FTlRfQ1JFQVRFX1NUQVJURUQgPSAnQ09NTUVOVF9DUkVBVEVfU1RBUlRFRCc7XG5jb25zdCBDT01NRU5UX0NSRUFURV9DT01QTEVURUQgPSAnQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVEJztcbmNvbnN0IENPTU1FTlRfQ1JFQVRFX0ZBSUxFRCA9ICdDT01NRU5UX0NSRUFURV9GQUlMRUQnO1xuY29uc3QgQ09NTUVOVF9BQkFORE9OX1NUQVJURUQgPSAnQ09NTUVOVF9BQkFORE9OX1NUQVJURUQnO1xuY29uc3QgQ09NTUVOVF9BQkFORE9OX0NPTVBMRVRFRCA9ICdDT01NRU5UX0FCQU5ET05fQ09NUExFVEVEJztcbmNvbnN0IENPTU1FTlRfQUJBTkRPTl9GQUlMRUQgPSAnQ09NTUVOVF9BQkFORE9OX0ZBSUxFRCc7XG5jb25zdCBDT01NRU5UX1VQREFURV9TVEFSVEVEID0gJ0NPTU1FTlRfVVBEQVRFX1NUQVJURUQnO1xuY29uc3QgQ09NTUVOVF9VUERBVEVfQ09NUExFVEVEID0gJ0NPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRCc7XG5jb25zdCBDT01NRU5UX1VQREFURV9GQUlMRUQgPSAnQ09NTUVOVF9VUERBVEVfRkFJTEVEJztcbmNvbnN0IENPTU1FTlRfSElERV9TVEFSVEVEID0gJ0NPTU1FTlRfSElERV9TVEFSVEVEJztcbmNvbnN0IENPTU1FTlRfSElERV9DT01QTEVURUQgPSAnQ09NTUVOVF9ISURFX0NPTVBMRVRFRCc7XG5jb25zdCBDT01NRU5UX0hJREVfRkFJTEVEID0gJ0NPTU1FTlRfSElERV9GQUlMRUQnO1xuXG4vLyBGaWxlc1xuY29uc3QgRklMRV9MSVNUX1NUQVJURUQgPSAnRklMRV9MSVNUX1NUQVJURUQnO1xuY29uc3QgRklMRV9MSVNUX1NVQ0NFRURFRCA9ICdGSUxFX0xJU1RfU1VDQ0VFREVEJztcbmNvbnN0IEZFVENIX0ZJTEVfSU5GT19TVEFSVEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19TVEFSVEVEJztcbmNvbnN0IEZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQgPSAnRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9GSUxFX0lORk9fRkFJTEVEID0gJ0ZFVENIX0ZJTEVfSU5GT19GQUlMRUQnO1xuY29uc3QgTE9BRElOR19WSURFT19TVEFSVEVEID0gJ0xPQURJTkdfVklERU9fU1RBUlRFRCc7XG5jb25zdCBMT0FESU5HX1ZJREVPX0NPTVBMRVRFRCA9ICdMT0FESU5HX1ZJREVPX0NPTVBMRVRFRCc7XG5jb25zdCBMT0FESU5HX1ZJREVPX0ZBSUxFRCA9ICdMT0FESU5HX1ZJREVPX0ZBSUxFRCc7XG5jb25zdCBET1dOTE9BRElOR19TVEFSVEVEID0gJ0RPV05MT0FESU5HX1NUQVJURUQnO1xuY29uc3QgRE9XTkxPQURJTkdfUFJPR1JFU1NFRCA9ICdET1dOTE9BRElOR19QUk9HUkVTU0VEJztcbmNvbnN0IERPV05MT0FESU5HX0NPTVBMRVRFRCA9ICdET1dOTE9BRElOR19DT01QTEVURUQnO1xuY29uc3QgRE9XTkxPQURJTkdfQ0FOQ0VMRUQgPSAnRE9XTkxPQURJTkdfQ0FOQ0VMRUQnO1xuY29uc3QgUExBWV9WSURFT19TVEFSVEVEID0gJ1BMQVlfVklERU9fU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRCA9ICdGRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9BVkFJTEFCSUxJVFlfQ09NUExFVEVEID0gJ0ZFVENIX0FWQUlMQUJJTElUWV9DT01QTEVURUQnO1xuY29uc3QgRklMRV9ERUxFVEUgPSAnRklMRV9ERUxFVEUnO1xuY29uc3QgU0VUX0ZJTEVfTElTVF9TT1JUID0gJ1NFVF9GSUxFX0xJU1RfU09SVCc7XG5jb25zdCBQVVJDSEFTRV9VUklfU1RBUlRFRCA9ICdQVVJDSEFTRV9VUklfU1RBUlRFRCc7XG5jb25zdCBQVVJDSEFTRV9VUklfQ09NUExFVEVEID0gJ1BVUkNIQVNFX1VSSV9DT01QTEVURUQnO1xuY29uc3QgUFVSQ0hBU0VfVVJJX0ZBSUxFRCA9ICdQVVJDSEFTRV9VUklfRkFJTEVEJztcbmNvbnN0IERFTEVURV9QVVJDSEFTRURfVVJJID0gJ0RFTEVURV9QVVJDSEFTRURfVVJJJztcblxuLy8gU2VhcmNoXG5jb25zdCBTRUFSQ0hfU1RBUlQgPSAnU0VBUkNIX1NUQVJUJztcbmNvbnN0IFNFQVJDSF9TVUNDRVNTID0gJ1NFQVJDSF9TVUNDRVNTJztcbmNvbnN0IFNFQVJDSF9GQUlMID0gJ1NFQVJDSF9GQUlMJztcbmNvbnN0IFJFU09MVkVEX1NFQVJDSF9TVEFSVCA9ICdSRVNPTFZFRF9TRUFSQ0hfU1RBUlQnO1xuY29uc3QgUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1MgPSAnUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1MnO1xuY29uc3QgUkVTT0xWRURfU0VBUkNIX0ZBSUwgPSAnUkVTT0xWRURfU0VBUkNIX0ZBSUwnO1xuY29uc3QgVVBEQVRFX1NFQVJDSF9RVUVSWSA9ICdVUERBVEVfU0VBUkNIX1FVRVJZJztcbmNvbnN0IFVQREFURV9TRUFSQ0hfT1BUSU9OUyA9ICdVUERBVEVfU0VBUkNIX09QVElPTlMnO1xuY29uc3QgVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUyA9ICdVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TJztcbmNvbnN0IFNFQVJDSF9GT0NVUyA9ICdTRUFSQ0hfRk9DVVMnO1xuY29uc3QgU0VBUkNIX0JMVVIgPSAnU0VBUkNIX0JMVVInO1xuXG4vLyBTZXR0aW5nc1xuY29uc3QgREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVEID0gJ0RBRU1PTl9TRVRUSU5HU19SRUNFSVZFRCc7XG5jb25zdCBEQUVNT05fU1RBVFVTX1JFQ0VJVkVEID0gJ0RBRU1PTl9TVEFUVVNfUkVDRUlWRUQnO1xuY29uc3QgU0hBUkVEX1BSRUZFUkVOQ0VfU0VUID0gJ1NIQVJFRF9QUkVGRVJFTkNFX1NFVCc7XG5jb25zdCBTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUyA9ICdTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUyc7XG5jb25zdCBDTElFTlRfU0VUVElOR19DSEFOR0VEID0gJ0NMSUVOVF9TRVRUSU5HX0NIQU5HRUQnO1xuY29uc3QgVVBEQVRFX0lTX05JR0hUID0gJ1VQREFURV9JU19OSUdIVCc7XG5cbi8vIFVzZXJcbmNvbnN0IEFVVEhFTlRJQ0FUSU9OX1NUQVJURUQgPSAnQVVUSEVOVElDQVRJT05fU1RBUlRFRCc7XG5jb25zdCBBVVRIRU5USUNBVElPTl9TVUNDRVNTID0gJ0FVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MnO1xuY29uc3QgQVVUSEVOVElDQVRJT05fRkFJTFVSRSA9ICdBVVRIRU5USUNBVElPTl9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfREVDTElORSA9ICdVU0VSX0VNQUlMX0RFQ0xJTkUnO1xuY29uc3QgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX05FV19TVEFSVEVEJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1MgPSAnVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0VNQUlMX05FV19FWElTVFMgPSAnVVNFUl9FTUFJTF9ORVdfRVhJU1RTJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TRVQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU0VUJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSA9ICdVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1JFVFJZJztcbmNvbnN0IFVTRVJfUEhPTkVfUkVTRVQgPSAnVVNFUl9QSE9ORV9SRVNFVCc7XG5jb25zdCBVU0VSX1BIT05FX05FV19TVEFSVEVEID0gJ1VTRVJfUEhPTkVfTkVXX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX05FV19TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0ZFVENIX1NUQVJURUQgPSAnVVNFUl9GRVRDSF9TVEFSVEVEJztcbmNvbnN0IFVTRVJfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0ZFVENIX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9GRVRDSF9GQUlMVVJFID0gJ1VTRVJfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9ORVdfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9ORVdfRkFJTFVSRSc7XG5jb25zdCBGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyA9ICdGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyc7XG5cbi8vIFJld2FyZHNcbmNvbnN0IEZFVENIX1JFV0FSRFNfU1RBUlRFRCA9ICdGRVRDSF9SRVdBUkRTX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfUkVXQVJEU19DT01QTEVURUQgPSAnRkVUQ0hfUkVXQVJEU19DT01QTEVURUQnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX1NUQVJURUQgPSAnQ0xBSU1fUkVXQVJEX1NUQVJURUQnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX1NVQ0NFU1MgPSAnQ0xBSU1fUkVXQVJEX1NVQ0NFU1MnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX0ZBSUxVUkUgPSAnQ0xBSU1fUkVXQVJEX0ZBSUxVUkUnO1xuY29uc3QgQ0xBSU1fUkVXQVJEX0NMRUFSX0VSUk9SID0gJ0NMQUlNX1JFV0FSRF9DTEVBUl9FUlJPUic7XG5jb25zdCBGRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfUkVXQVJEX0NPTlRFTlRfQ09NUExFVEVEJztcblxuLy8gTGFuZ3VhZ2VcbmNvbnN0IERPV05MT0FEX0xBTkdVQUdFX1NVQ0NFRURFRCA9ICdET1dOTE9BRF9MQU5HVUFHRV9TVUNDRUVERUQnO1xuY29uc3QgRE9XTkxPQURfTEFOR1VBR0VfRkFJTEVEID0gJ0RPV05MT0FEX0xBTkdVQUdFX0ZBSUxFRCc7XG5cbi8vIFN1YnNjcmlwdGlvbnNcbmNvbnN0IENIQU5ORUxfU1VCU0NSSUJFID0gJ0NIQU5ORUxfU1VCU0NSSUJFJztcbmNvbnN0IENIQU5ORUxfVU5TVUJTQ1JJQkUgPSAnQ0hBTk5FTF9VTlNVQlNDUklCRSc7XG5jb25zdCBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TID0gJ0hBU19GRVRDSEVEX1NVQlNDUklQVElPTlMnO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9MQVRFU1QgPSAnU0VUX1NVQlNDUklQVElPTl9MQVRFU1QnO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT04gPSAnU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT04nO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TID0gJ1NFVF9TVUJTQ1JJUFRJT05fTk9USUZJQ0FUSU9OUyc7XG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCA9ICdDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCc7XG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05fQ09NUExFVEVEID0gJ0NIRUNLX1NVQlNDUklQVElPTl9DT01QTEVURUQnO1xuY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUgPSAnQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkUnO1xuXG4vLyBQdWJsaXNoaW5nXG5jb25zdCBDTEVBUl9QVUJMSVNIID0gJ0NMRUFSX1BVQkxJU0gnO1xuY29uc3QgVVBEQVRFX1BVQkxJU0hfRk9STSA9ICdVUERBVEVfUFVCTElTSF9GT1JNJztcbmNvbnN0IFBVQkxJU0hfU1RBUlQgPSAnUFVCTElTSF9TVEFSVCc7XG5jb25zdCBQVUJMSVNIX1NVQ0NFU1MgPSAnUFVCTElTSF9TVUNDRVNTJztcbmNvbnN0IFBVQkxJU0hfRkFJTCA9ICdQVUJMSVNIX0ZBSUwnO1xuY29uc3QgQ0xFQVJfUFVCTElTSF9FUlJPUiA9ICdDTEVBUl9QVUJMSVNIX0VSUk9SJztcbmNvbnN0IFJFTU9WRV9QRU5ESU5HX1BVQkxJU0ggPSAnUkVNT1ZFX1BFTkRJTkdfUFVCTElTSCc7XG5jb25zdCBET19QUkVQQVJFX0VESVQgPSAnRE9fUFJFUEFSRV9FRElUJztcblxuLy8gTm90aWZpY2F0aW9uc1xuY29uc3QgQ1JFQVRFX05PVElGSUNBVElPTiA9ICdDUkVBVEVfTk9USUZJQ0FUSU9OJztcbmNvbnN0IEVESVRfTk9USUZJQ0FUSU9OID0gJ0VESVRfTk9USUZJQ0FUSU9OJztcbmNvbnN0IERFTEVURV9OT1RJRklDQVRJT04gPSAnREVMRVRFX05PVElGSUNBVElPTic7XG5jb25zdCBESVNNSVNTX05PVElGSUNBVElPTiA9ICdESVNNSVNTX05PVElGSUNBVElPTic7XG5jb25zdCBDUkVBVEVfVE9BU1QgPSAnQ1JFQVRFX1RPQVNUJztcbmNvbnN0IERJU01JU1NfVE9BU1QgPSAnRElTTUlTU19UT0FTVCc7XG5jb25zdCBDUkVBVEVfRVJST1IgPSAnQ1JFQVRFX0VSUk9SJztcbmNvbnN0IERJU01JU1NfRVJST1IgPSAnRElTTUlTU19FUlJPUic7XG5cbmNvbnN0IEZFVENIX0RBVEUgPSAnRkVUQ0hfREFURSc7XG5cbi8vIENvc3QgaW5mb1xuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQgPSAnRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX0NPTVBMRVRFRCA9ICdGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX0NPU1RfSU5GT19GQUlMRUQgPSAnRkVUQ0hfQ09TVF9JTkZPX0ZBSUxFRCc7XG5cbi8vIFRhZ3NcbmNvbnN0IFRPR0dMRV9UQUdfRk9MTE9XID0gJ1RPR0dMRV9UQUdfRk9MTE9XJztcbmNvbnN0IFRBR19BREQgPSAnVEFHX0FERCc7XG5jb25zdCBUQUdfREVMRVRFID0gJ1RBR19ERUxFVEUnO1xuXG4vLyBCbG9ja2VkIENoYW5uZWxzXG5jb25zdCBUT0dHTEVfQkxPQ0tfQ0hBTk5FTCA9ICdUT0dHTEVfQkxPQ0tfQ0hBTk5FTCc7XG5cbi8vIFN5bmNcbmNvbnN0IFVTRVJfU1RBVEVfUE9QVUxBVEUgPSAnVVNFUl9TVEFURV9QT1BVTEFURSc7XG5cbnZhciBhY3Rpb25fdHlwZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIFdJTkRPV19GT0NVU0VEOiBXSU5ET1dfRk9DVVNFRCxcbiAgREFFTU9OX1JFQURZOiBEQUVNT05fUkVBRFksXG4gIERBRU1PTl9WRVJTSU9OX01BVENIOiBEQUVNT05fVkVSU0lPTl9NQVRDSCxcbiAgREFFTU9OX1ZFUlNJT05fTUlTTUFUQ0g6IERBRU1PTl9WRVJTSU9OX01JU01BVENILFxuICBWT0xVTUVfQ0hBTkdFRDogVk9MVU1FX0NIQU5HRUQsXG4gIENIQU5HRV9BRlRFUl9BVVRIX1BBVEg6IENIQU5HRV9BRlRFUl9BVVRIX1BBVEgsXG4gIFdJTkRPV19TQ1JPTExFRDogV0lORE9XX1NDUk9MTEVELFxuICBISVNUT1JZX05BVklHQVRFOiBISVNUT1JZX05BVklHQVRFLFxuICBVUEdSQURFX0NBTkNFTExFRDogVVBHUkFERV9DQU5DRUxMRUQsXG4gIERPV05MT0FEX1VQR1JBREU6IERPV05MT0FEX1VQR1JBREUsXG4gIFVQR1JBREVfRE9XTkxPQURfU1RBUlRFRDogVVBHUkFERV9ET1dOTE9BRF9TVEFSVEVELFxuICBVUEdSQURFX0RPV05MT0FEX0NPTVBMRVRFRDogVVBHUkFERV9ET1dOTE9BRF9DT01QTEVURUQsXG4gIFVQR1JBREVfRE9XTkxPQURfUFJPR1JFU1NFRDogVVBHUkFERV9ET1dOTE9BRF9QUk9HUkVTU0VELFxuICBDSEVDS19VUEdSQURFX0FWQUlMQUJMRTogQ0hFQ0tfVVBHUkFERV9BVkFJTEFCTEUsXG4gIENIRUNLX1VQR1JBREVfU1RBUlQ6IENIRUNLX1VQR1JBREVfU1RBUlQsXG4gIENIRUNLX1VQR1JBREVfU1VDQ0VTUzogQ0hFQ0tfVVBHUkFERV9TVUNDRVNTLFxuICBDSEVDS19VUEdSQURFX0ZBSUw6IENIRUNLX1VQR1JBREVfRkFJTCxcbiAgQ0hFQ0tfVVBHUkFERV9TVUJTQ1JJQkU6IENIRUNLX1VQR1JBREVfU1VCU0NSSUJFLFxuICBVUERBVEVfVkVSU0lPTjogVVBEQVRFX1ZFUlNJT04sXG4gIFVQREFURV9SRU1PVEVfVkVSU0lPTjogVVBEQVRFX1JFTU9URV9WRVJTSU9OLFxuICBTS0lQX1VQR1JBREU6IFNLSVBfVVBHUkFERSxcbiAgU1RBUlRfVVBHUkFERTogU1RBUlRfVVBHUkFERSxcbiAgQVVUT19VUERBVEVfREVDTElORUQ6IEFVVE9fVVBEQVRFX0RFQ0xJTkVELFxuICBBVVRPX1VQREFURV9ET1dOTE9BREVEOiBBVVRPX1VQREFURV9ET1dOTE9BREVELFxuICBDTEVBUl9VUEdSQURFX1RJTUVSOiBDTEVBUl9VUEdSQURFX1RJTUVSLFxuICBHRVRfTkVXX0FERFJFU1NfU1RBUlRFRDogR0VUX05FV19BRERSRVNTX1NUQVJURUQsXG4gIEdFVF9ORVdfQUREUkVTU19DT01QTEVURUQ6IEdFVF9ORVdfQUREUkVTU19DT01QTEVURUQsXG4gIEZFVENIX1RSQU5TQUNUSU9OU19TVEFSVEVEOiBGRVRDSF9UUkFOU0FDVElPTlNfU1RBUlRFRCxcbiAgRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRDogRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRCxcbiAgRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRDogRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRCxcbiAgRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVEOiBGRVRDSF9TVVBQT1JUU19DT01QTEVURUQsXG4gIEFCQU5ET05fU1VQUE9SVF9TVEFSVEVEOiBBQkFORE9OX1NVUFBPUlRfU1RBUlRFRCxcbiAgQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRDogQUJBTkRPTl9TVVBQT1JUX0NPTVBMRVRFRCxcbiAgVVBEQVRFX0JBTEFOQ0U6IFVQREFURV9CQUxBTkNFLFxuICBVUERBVEVfVE9UQUxfQkFMQU5DRTogVVBEQVRFX1RPVEFMX0JBTEFOQ0UsXG4gIENIRUNLX0FERFJFU1NfSVNfTUlORV9TVEFSVEVEOiBDSEVDS19BRERSRVNTX0lTX01JTkVfU1RBUlRFRCxcbiAgQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRDogQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRCxcbiAgU0VORF9UUkFOU0FDVElPTl9TVEFSVEVEOiBTRU5EX1RSQU5TQUNUSU9OX1NUQVJURUQsXG4gIFNFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVEOiBTRU5EX1RSQU5TQUNUSU9OX0NPTVBMRVRFRCxcbiAgU0VORF9UUkFOU0FDVElPTl9GQUlMRUQ6IFNFTkRfVFJBTlNBQ1RJT05fRkFJTEVELFxuICBTVVBQT1JUX1RSQU5TQUNUSU9OX1NUQVJURUQ6IFNVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRCxcbiAgU1VQUE9SVF9UUkFOU0FDVElPTl9DT01QTEVURUQ6IFNVUFBPUlRfVFJBTlNBQ1RJT05fQ09NUExFVEVELFxuICBTVVBQT1JUX1RSQU5TQUNUSU9OX0ZBSUxFRDogU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQsXG4gIENMRUFSX1NVUFBPUlRfVFJBTlNBQ1RJT046IENMRUFSX1NVUFBPUlRfVFJBTlNBQ1RJT04sXG4gIFdBTExFVF9FTkNSWVBUX1NUQVJUOiBXQUxMRVRfRU5DUllQVF9TVEFSVCxcbiAgV0FMTEVUX0VOQ1JZUFRfQ09NUExFVEVEOiBXQUxMRVRfRU5DUllQVF9DT01QTEVURUQsXG4gIFdBTExFVF9FTkNSWVBUX0ZBSUxFRDogV0FMTEVUX0VOQ1JZUFRfRkFJTEVELFxuICBXQUxMRVRfVU5MT0NLX1NUQVJUOiBXQUxMRVRfVU5MT0NLX1NUQVJULFxuICBXQUxMRVRfVU5MT0NLX0NPTVBMRVRFRDogV0FMTEVUX1VOTE9DS19DT01QTEVURUQsXG4gIFdBTExFVF9VTkxPQ0tfRkFJTEVEOiBXQUxMRVRfVU5MT0NLX0ZBSUxFRCxcbiAgV0FMTEVUX0RFQ1JZUFRfU1RBUlQ6IFdBTExFVF9ERUNSWVBUX1NUQVJULFxuICBXQUxMRVRfREVDUllQVF9DT01QTEVURUQ6IFdBTExFVF9ERUNSWVBUX0NPTVBMRVRFRCxcbiAgV0FMTEVUX0RFQ1JZUFRfRkFJTEVEOiBXQUxMRVRfREVDUllQVF9GQUlMRUQsXG4gIFdBTExFVF9MT0NLX1NUQVJUOiBXQUxMRVRfTE9DS19TVEFSVCxcbiAgV0FMTEVUX0xPQ0tfQ09NUExFVEVEOiBXQUxMRVRfTE9DS19DT01QTEVURUQsXG4gIFdBTExFVF9MT0NLX0ZBSUxFRDogV0FMTEVUX0xPQ0tfRkFJTEVELFxuICBXQUxMRVRfU1RBVFVTX1NUQVJUOiBXQUxMRVRfU1RBVFVTX1NUQVJULFxuICBXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRDogV0FMTEVUX1NUQVRVU19DT01QTEVURUQsXG4gIFdBTExFVF9SRVNUQVJUOiBXQUxMRVRfUkVTVEFSVCxcbiAgV0FMTEVUX1JFU1RBUlRfQ09NUExFVEVEOiBXQUxMRVRfUkVTVEFSVF9DT01QTEVURUQsXG4gIFNFVF9UUkFOU0FDVElPTl9MSVNUX0ZJTFRFUjogU0VUX1RSQU5TQUNUSU9OX0xJU1RfRklMVEVSLFxuICBVUERBVEVfQ1VSUkVOVF9IRUlHSFQ6IFVQREFURV9DVVJSRU5UX0hFSUdIVCxcbiAgU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FNT1VOVDogU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FNT1VOVCxcbiAgU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1M6IFNFVF9EUkFGVF9UUkFOU0FDVElPTl9BRERSRVNTLFxuICBSRVNPTFZFX1VSSVNfU1RBUlRFRDogUkVTT0xWRV9VUklTX1NUQVJURUQsXG4gIFJFU09MVkVfVVJJU19DT01QTEVURUQ6IFJFU09MVkVfVVJJU19DT01QTEVURUQsXG4gIEZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQ6IEZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQsXG4gIEZFVENIX0NIQU5ORUxfQ0xBSU1TX0NPTVBMRVRFRDogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVELFxuICBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRDogRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQsXG4gIEZFVENIX0NMQUlNX0xJU1RfTUlORV9DT01QTEVURUQ6IEZFVENIX0NMQUlNX0xJU1RfTUlORV9DT01QTEVURUQsXG4gIEFCQU5ET05fQ0xBSU1fU1RBUlRFRDogQUJBTkRPTl9DTEFJTV9TVEFSVEVELFxuICBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRDogQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQsXG4gIEZFVENIX0NIQU5ORUxfTElTVF9TVEFSVEVEOiBGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRDogRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRCxcbiAgQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRDogQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCxcbiAgQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVEOiBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQsXG4gIENSRUFURV9DSEFOTkVMX0ZBSUxFRDogQ1JFQVRFX0NIQU5ORUxfRkFJTEVELFxuICBVUERBVEVfQ0hBTk5FTF9TVEFSVEVEOiBVUERBVEVfQ0hBTk5FTF9TVEFSVEVELFxuICBVUERBVEVfQ0hBTk5FTF9DT01QTEVURUQ6IFVQREFURV9DSEFOTkVMX0NPTVBMRVRFRCxcbiAgVVBEQVRFX0NIQU5ORUxfRkFJTEVEOiBVUERBVEVfQ0hBTk5FTF9GQUlMRUQsXG4gIElNUE9SVF9DSEFOTkVMX1NUQVJURUQ6IElNUE9SVF9DSEFOTkVMX1NUQVJURUQsXG4gIElNUE9SVF9DSEFOTkVMX0NPTVBMRVRFRDogSU1QT1JUX0NIQU5ORUxfQ09NUExFVEVELFxuICBJTVBPUlRfQ0hBTk5FTF9GQUlMRUQ6IElNUE9SVF9DSEFOTkVMX0ZBSUxFRCxcbiAgUFVCTElTSF9TVEFSVEVEOiBQVUJMSVNIX1NUQVJURUQsXG4gIFBVQkxJU0hfQ09NUExFVEVEOiBQVUJMSVNIX0NPTVBMRVRFRCxcbiAgUFVCTElTSF9GQUlMRUQ6IFBVQkxJU0hfRkFJTEVELFxuICBTRVRfUExBWUlOR19VUkk6IFNFVF9QTEFZSU5HX1VSSSxcbiAgU0VUX0NPTlRFTlRfUE9TSVRJT046IFNFVF9DT05URU5UX1BPU0lUSU9OLFxuICBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRDogU0VUX0NPTlRFTlRfTEFTVF9WSUVXRUQsXG4gIENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkk6IENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkksXG4gIENMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEw6IENMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwsXG4gIENMQUlNX1NFQVJDSF9TVEFSVEVEOiBDTEFJTV9TRUFSQ0hfU1RBUlRFRCxcbiAgQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRDogQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRCxcbiAgQ0xBSU1fU0VBUkNIX0ZBSUxFRDogQ0xBSU1fU0VBUkNIX0ZBSUxFRCxcbiAgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfU1RBUlRFRDogQ0xBSU1fU0VBUkNIX0JZX1RBR1NfU1RBUlRFRCxcbiAgQ0xBSU1fU0VBUkNIX0JZX1RBR1NfQ09NUExFVEVEOiBDTEFJTV9TRUFSQ0hfQllfVEFHU19DT01QTEVURUQsXG4gIENMQUlNX1NFQVJDSF9CWV9UQUdTX0ZBSUxFRDogQ0xBSU1fU0VBUkNIX0JZX1RBR1NfRkFJTEVELFxuICBDT01NRU5UX0xJU1RfU1RBUlRFRDogQ09NTUVOVF9MSVNUX1NUQVJURUQsXG4gIENPTU1FTlRfTElTVF9DT01QTEVURUQ6IENPTU1FTlRfTElTVF9DT01QTEVURUQsXG4gIENPTU1FTlRfTElTVF9GQUlMRUQ6IENPTU1FTlRfTElTVF9GQUlMRUQsXG4gIENPTU1FTlRfQ1JFQVRFX1NUQVJURUQ6IENPTU1FTlRfQ1JFQVRFX1NUQVJURUQsXG4gIENPTU1FTlRfQ1JFQVRFX0NPTVBMRVRFRDogQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVELFxuICBDT01NRU5UX0NSRUFURV9GQUlMRUQ6IENPTU1FTlRfQ1JFQVRFX0ZBSUxFRCxcbiAgQ09NTUVOVF9BQkFORE9OX1NUQVJURUQ6IENPTU1FTlRfQUJBTkRPTl9TVEFSVEVELFxuICBDT01NRU5UX0FCQU5ET05fQ09NUExFVEVEOiBDT01NRU5UX0FCQU5ET05fQ09NUExFVEVELFxuICBDT01NRU5UX0FCQU5ET05fRkFJTEVEOiBDT01NRU5UX0FCQU5ET05fRkFJTEVELFxuICBDT01NRU5UX1VQREFURV9TVEFSVEVEOiBDT01NRU5UX1VQREFURV9TVEFSVEVELFxuICBDT01NRU5UX1VQREFURV9DT01QTEVURUQ6IENPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRCxcbiAgQ09NTUVOVF9VUERBVEVfRkFJTEVEOiBDT01NRU5UX1VQREFURV9GQUlMRUQsXG4gIENPTU1FTlRfSElERV9TVEFSVEVEOiBDT01NRU5UX0hJREVfU1RBUlRFRCxcbiAgQ09NTUVOVF9ISURFX0NPTVBMRVRFRDogQ09NTUVOVF9ISURFX0NPTVBMRVRFRCxcbiAgQ09NTUVOVF9ISURFX0ZBSUxFRDogQ09NTUVOVF9ISURFX0ZBSUxFRCxcbiAgRklMRV9MSVNUX1NUQVJURUQ6IEZJTEVfTElTVF9TVEFSVEVELFxuICBGSUxFX0xJU1RfU1VDQ0VFREVEOiBGSUxFX0xJU1RfU1VDQ0VFREVELFxuICBGRVRDSF9GSUxFX0lORk9fU1RBUlRFRDogRkVUQ0hfRklMRV9JTkZPX1NUQVJURUQsXG4gIEZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQ6IEZFVENIX0ZJTEVfSU5GT19DT01QTEVURUQsXG4gIEZFVENIX0ZJTEVfSU5GT19GQUlMRUQ6IEZFVENIX0ZJTEVfSU5GT19GQUlMRUQsXG4gIExPQURJTkdfVklERU9fU1RBUlRFRDogTE9BRElOR19WSURFT19TVEFSVEVELFxuICBMT0FESU5HX1ZJREVPX0NPTVBMRVRFRDogTE9BRElOR19WSURFT19DT01QTEVURUQsXG4gIExPQURJTkdfVklERU9fRkFJTEVEOiBMT0FESU5HX1ZJREVPX0ZBSUxFRCxcbiAgRE9XTkxPQURJTkdfU1RBUlRFRDogRE9XTkxPQURJTkdfU1RBUlRFRCxcbiAgRE9XTkxPQURJTkdfUFJPR1JFU1NFRDogRE9XTkxPQURJTkdfUFJPR1JFU1NFRCxcbiAgRE9XTkxPQURJTkdfQ09NUExFVEVEOiBET1dOTE9BRElOR19DT01QTEVURUQsXG4gIERPV05MT0FESU5HX0NBTkNFTEVEOiBET1dOTE9BRElOR19DQU5DRUxFRCxcbiAgUExBWV9WSURFT19TVEFSVEVEOiBQTEFZX1ZJREVPX1NUQVJURUQsXG4gIEZFVENIX0FWQUlMQUJJTElUWV9TVEFSVEVEOiBGRVRDSF9BVkFJTEFCSUxJVFlfU1RBUlRFRCxcbiAgRkVUQ0hfQVZBSUxBQklMSVRZX0NPTVBMRVRFRDogRkVUQ0hfQVZBSUxBQklMSVRZX0NPTVBMRVRFRCxcbiAgRklMRV9ERUxFVEU6IEZJTEVfREVMRVRFLFxuICBTRVRfRklMRV9MSVNUX1NPUlQ6IFNFVF9GSUxFX0xJU1RfU09SVCxcbiAgUFVSQ0hBU0VfVVJJX1NUQVJURUQ6IFBVUkNIQVNFX1VSSV9TVEFSVEVELFxuICBQVVJDSEFTRV9VUklfQ09NUExFVEVEOiBQVVJDSEFTRV9VUklfQ09NUExFVEVELFxuICBQVVJDSEFTRV9VUklfRkFJTEVEOiBQVVJDSEFTRV9VUklfRkFJTEVELFxuICBERUxFVEVfUFVSQ0hBU0VEX1VSSTogREVMRVRFX1BVUkNIQVNFRF9VUkksXG4gIFNFQVJDSF9TVEFSVDogU0VBUkNIX1NUQVJULFxuICBTRUFSQ0hfU1VDQ0VTUzogU0VBUkNIX1NVQ0NFU1MsXG4gIFNFQVJDSF9GQUlMOiBTRUFSQ0hfRkFJTCxcbiAgUkVTT0xWRURfU0VBUkNIX1NUQVJUOiBSRVNPTFZFRF9TRUFSQ0hfU1RBUlQsXG4gIFJFU09MVkVEX1NFQVJDSF9TVUNDRVNTOiBSRVNPTFZFRF9TRUFSQ0hfU1VDQ0VTUyxcbiAgUkVTT0xWRURfU0VBUkNIX0ZBSUw6IFJFU09MVkVEX1NFQVJDSF9GQUlMLFxuICBVUERBVEVfU0VBUkNIX1FVRVJZOiBVUERBVEVfU0VBUkNIX1FVRVJZLFxuICBVUERBVEVfU0VBUkNIX09QVElPTlM6IFVQREFURV9TRUFSQ0hfT1BUSU9OUyxcbiAgVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUzogVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUyxcbiAgU0VBUkNIX0ZPQ1VTOiBTRUFSQ0hfRk9DVVMsXG4gIFNFQVJDSF9CTFVSOiBTRUFSQ0hfQkxVUixcbiAgREFFTU9OX1NFVFRJTkdTX1JFQ0VJVkVEOiBEQUVNT05fU0VUVElOR1NfUkVDRUlWRUQsXG4gIERBRU1PTl9TVEFUVVNfUkVDRUlWRUQ6IERBRU1PTl9TVEFUVVNfUkVDRUlWRUQsXG4gIFNIQVJFRF9QUkVGRVJFTkNFX1NFVDogU0hBUkVEX1BSRUZFUkVOQ0VfU0VULFxuICBTQVZFX0NVU1RPTV9XQUxMRVRfU0VSVkVSUzogU0FWRV9DVVNUT01fV0FMTEVUX1NFUlZFUlMsXG4gIENMSUVOVF9TRVRUSU5HX0NIQU5HRUQ6IENMSUVOVF9TRVRUSU5HX0NIQU5HRUQsXG4gIFVQREFURV9JU19OSUdIVDogVVBEQVRFX0lTX05JR0hULFxuICBBVVRIRU5USUNBVElPTl9TVEFSVEVEOiBBVVRIRU5USUNBVElPTl9TVEFSVEVELFxuICBBVVRIRU5USUNBVElPTl9TVUNDRVNTOiBBVVRIRU5USUNBVElPTl9TVUNDRVNTLFxuICBBVVRIRU5USUNBVElPTl9GQUlMVVJFOiBBVVRIRU5USUNBVElPTl9GQUlMVVJFLFxuICBVU0VSX0VNQUlMX0RFQ0xJTkU6IFVTRVJfRU1BSUxfREVDTElORSxcbiAgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRDogVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCxcbiAgVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUzogVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyxcbiAgVVNFUl9FTUFJTF9ORVdfRVhJU1RTOiBVU0VSX0VNQUlMX05FV19FWElTVFMsXG4gIFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkU6IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUsXG4gIFVTRVJfRU1BSUxfVkVSSUZZX1NFVDogVVNFUl9FTUFJTF9WRVJJRllfU0VULFxuICBVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVEOiBVU0VSX0VNQUlMX1ZFUklGWV9TVEFSVEVELFxuICBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTOiBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFOiBVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWTogVVNFUl9FTUFJTF9WRVJJRllfUkVUUlksXG4gIFVTRVJfUEhPTkVfUkVTRVQ6IFVTRVJfUEhPTkVfUkVTRVQsXG4gIFVTRVJfUEhPTkVfTkVXX1NUQVJURUQ6IFVTRVJfUEhPTkVfTkVXX1NUQVJURUQsXG4gIFVTRVJfUEhPTkVfTkVXX1NVQ0NFU1M6IFVTRVJfUEhPTkVfTkVXX1NVQ0NFU1MsXG4gIFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkU6IFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkUsXG4gIFVTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQ6IFVTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQsXG4gIFVTRVJfUEhPTkVfVkVSSUZZX1NVQ0NFU1M6IFVTRVJfUEhPTkVfVkVSSUZZX1NVQ0NFU1MsXG4gIFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkU6IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUsXG4gIFVTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQ6IFVTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQsXG4gIFVTRVJfSURFTlRJVFlfVkVSSUZZX1NVQ0NFU1M6IFVTRVJfSURFTlRJVFlfVkVSSUZZX1NVQ0NFU1MsXG4gIFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkU6IFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkUsXG4gIFVTRVJfRkVUQ0hfU1RBUlRFRDogVVNFUl9GRVRDSF9TVEFSVEVELFxuICBVU0VSX0ZFVENIX1NVQ0NFU1M6IFVTRVJfRkVUQ0hfU1VDQ0VTUyxcbiAgVVNFUl9GRVRDSF9GQUlMVVJFOiBVU0VSX0ZFVENIX0ZBSUxVUkUsXG4gIFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVEOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCxcbiAgVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NVQ0NFU1M6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVUNDRVNTLFxuICBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRTogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX0ZBSUxVUkUsXG4gIFVTRVJfSU5WSVRFX05FV19TVEFSVEVEOiBVU0VSX0lOVklURV9ORVdfU1RBUlRFRCxcbiAgVVNFUl9JTlZJVEVfTkVXX1NVQ0NFU1M6IFVTRVJfSU5WSVRFX05FV19TVUNDRVNTLFxuICBVU0VSX0lOVklURV9ORVdfRkFJTFVSRTogVVNFUl9JTlZJVEVfTkVXX0ZBSUxVUkUsXG4gIEZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTOiBGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyxcbiAgRkVUQ0hfUkVXQVJEU19TVEFSVEVEOiBGRVRDSF9SRVdBUkRTX1NUQVJURUQsXG4gIEZFVENIX1JFV0FSRFNfQ09NUExFVEVEOiBGRVRDSF9SRVdBUkRTX0NPTVBMRVRFRCxcbiAgQ0xBSU1fUkVXQVJEX1NUQVJURUQ6IENMQUlNX1JFV0FSRF9TVEFSVEVELFxuICBDTEFJTV9SRVdBUkRfU1VDQ0VTUzogQ0xBSU1fUkVXQVJEX1NVQ0NFU1MsXG4gIENMQUlNX1JFV0FSRF9GQUlMVVJFOiBDTEFJTV9SRVdBUkRfRkFJTFVSRSxcbiAgQ0xBSU1fUkVXQVJEX0NMRUFSX0VSUk9SOiBDTEFJTV9SRVdBUkRfQ0xFQVJfRVJST1IsXG4gIEZFVENIX1JFV0FSRF9DT05URU5UX0NPTVBMRVRFRDogRkVUQ0hfUkVXQVJEX0NPTlRFTlRfQ09NUExFVEVELFxuICBET1dOTE9BRF9MQU5HVUFHRV9TVUNDRUVERUQ6IERPV05MT0FEX0xBTkdVQUdFX1NVQ0NFRURFRCxcbiAgRE9XTkxPQURfTEFOR1VBR0VfRkFJTEVEOiBET1dOTE9BRF9MQU5HVUFHRV9GQUlMRUQsXG4gIENIQU5ORUxfU1VCU0NSSUJFOiBDSEFOTkVMX1NVQlNDUklCRSxcbiAgQ0hBTk5FTF9VTlNVQlNDUklCRTogQ0hBTk5FTF9VTlNVQlNDUklCRSxcbiAgSEFTX0ZFVENIRURfU1VCU0NSSVBUSU9OUzogSEFTX0ZFVENIRURfU1VCU0NSSVBUSU9OUyxcbiAgU0VUX1NVQlNDUklQVElPTl9MQVRFU1Q6IFNFVF9TVUJTQ1JJUFRJT05fTEFURVNULFxuICBTRVRfU1VCU0NSSVBUSU9OX05PVElGSUNBVElPTjogU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT04sXG4gIFNFVF9TVUJTQ1JJUFRJT05fTk9USUZJQ0FUSU9OUzogU0VUX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TLFxuICBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRDogQ0hFQ0tfU1VCU0NSSVBUSU9OX1NUQVJURUQsXG4gIENIRUNLX1NVQlNDUklQVElPTl9DT01QTEVURUQ6IENIRUNLX1NVQlNDUklQVElPTl9DT01QTEVURUQsXG4gIENIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFOiBDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRSxcbiAgQ0xFQVJfUFVCTElTSDogQ0xFQVJfUFVCTElTSCxcbiAgVVBEQVRFX1BVQkxJU0hfRk9STTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgUFVCTElTSF9TVEFSVDogUFVCTElTSF9TVEFSVCxcbiAgUFVCTElTSF9TVUNDRVNTOiBQVUJMSVNIX1NVQ0NFU1MsXG4gIFBVQkxJU0hfRkFJTDogUFVCTElTSF9GQUlMLFxuICBDTEVBUl9QVUJMSVNIX0VSUk9SOiBDTEVBUl9QVUJMSVNIX0VSUk9SLFxuICBSRU1PVkVfUEVORElOR19QVUJMSVNIOiBSRU1PVkVfUEVORElOR19QVUJMSVNILFxuICBET19QUkVQQVJFX0VESVQ6IERPX1BSRVBBUkVfRURJVCxcbiAgQ1JFQVRFX05PVElGSUNBVElPTjogQ1JFQVRFX05PVElGSUNBVElPTixcbiAgRURJVF9OT1RJRklDQVRJT046IEVESVRfTk9USUZJQ0FUSU9OLFxuICBERUxFVEVfTk9USUZJQ0FUSU9OOiBERUxFVEVfTk9USUZJQ0FUSU9OLFxuICBESVNNSVNTX05PVElGSUNBVElPTjogRElTTUlTU19OT1RJRklDQVRJT04sXG4gIENSRUFURV9UT0FTVDogQ1JFQVRFX1RPQVNULFxuICBESVNNSVNTX1RPQVNUOiBESVNNSVNTX1RPQVNULFxuICBDUkVBVEVfRVJST1I6IENSRUFURV9FUlJPUixcbiAgRElTTUlTU19FUlJPUjogRElTTUlTU19FUlJPUixcbiAgRkVUQ0hfREFURTogRkVUQ0hfREFURSxcbiAgRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQ6IEZFVENIX0NPU1RfSU5GT19TVEFSVEVELFxuICBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEOiBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVELFxuICBGRVRDSF9DT1NUX0lORk9fRkFJTEVEOiBGRVRDSF9DT1NUX0lORk9fRkFJTEVELFxuICBUT0dHTEVfVEFHX0ZPTExPVzogVE9HR0xFX1RBR19GT0xMT1csXG4gIFRBR19BREQ6IFRBR19BREQsXG4gIFRBR19ERUxFVEU6IFRBR19ERUxFVEUsXG4gIFRPR0dMRV9CTE9DS19DSEFOTkVMOiBUT0dHTEVfQkxPQ0tfQ0hBTk5FTCxcbiAgVVNFUl9TVEFURV9QT1BVTEFURTogVVNFUl9TVEFURV9QT1BVTEFURVxufSk7XG5cbmNvbnN0IENDX0xJQ0VOU0VTID0gW3tcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9sZWdhbGNvZGUnXG59LCB7XG4gIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC9sZWdhbGNvZGUnXG59LCB7XG4gIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob0Rlcml2YXRpdmVzIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5kLzQuMC9sZWdhbGNvZGUnXG59LCB7XG4gIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDQuMCBJbnRlcm5hdGlvbmFsJyxcbiAgdXJsOiAnaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLzQuMC9sZWdhbGNvZGUnXG59LCB7XG4gIHZhbHVlOiAnQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwnLFxuICB1cmw6ICdodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wL2xlZ2FsY29kZSdcbn0sIHtcbiAgdmFsdWU6ICdDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCcsXG4gIHVybDogJ2h0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC80LjAvbGVnYWxjb2RlJ1xufV07XG5cbmNvbnN0IE5PTkUgPSAnTm9uZSc7XG5jb25zdCBQVUJMSUNfRE9NQUlOID0gJ1B1YmxpYyBEb21haW4nO1xuY29uc3QgT1RIRVIgPSAnb3RoZXInO1xuY29uc3QgQ09QWVJJR0hUID0gJ2NvcHlyaWdodCc7XG5cbnZhciBsaWNlbnNlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgQ0NfTElDRU5TRVM6IENDX0xJQ0VOU0VTLFxuICBOT05FOiBOT05FLFxuICBQVUJMSUNfRE9NQUlOOiBQVUJMSUNfRE9NQUlOLFxuICBPVEhFUjogT1RIRVIsXG4gIENPUFlSSUdIVDogQ09QWVJJR0hUXG59KTtcblxuY29uc3QgQVVUSCA9ICdhdXRoJztcbmNvbnN0IEJBQ0tVUCA9ICdiYWNrdXAnO1xuY29uc3QgQ0hBTk5FTCA9ICdjaGFubmVsJztcbmNvbnN0IERJU0NPVkVSID0gJ2Rpc2NvdmVyJztcbmNvbnN0IEZJTEUgPSAnZmlsZSc7XG5jb25zdCBET1dOTE9BREVEID0gJ2Rvd25sb2FkZWQnO1xuY29uc3QgUFVCTElTSEVEID0gJ3B1Ymxpc2hlZCc7XG5jb25zdCBHRVRfQ1JFRElUUyA9ICdnZXRjcmVkaXRzJztcbmNvbnN0IEhFTFAgPSAnaGVscCc7XG5jb25zdCBJTlZJVEUgPSAnaW52aXRlJztcbmNvbnN0IFBVQkxJU0ggPSAncHVibGlzaCc7XG5jb25zdCBSRVBPUlQgPSAncmVwb3J0JztcbmNvbnN0IFJFV0FSRFMgPSAncmV3YXJkcyc7XG5jb25zdCBTRUFSQ0ggPSAnc2VhcmNoJztcbmNvbnN0IFNFTkRfQ1JFRElUUyA9ICdzZW5kJztcbmNvbnN0IFNFVFRJTkdTID0gJ3NldHRpbmdzJztcbmNvbnN0IFNIT1cgPSAnc2hvdyc7XG5jb25zdCBTVUJTQ1JJUFRJT05TID0gJ3N1YnNjcmlwdGlvbnMnO1xuY29uc3QgVFJBTlNBQ1RJT05fSElTVE9SWSA9ICdoaXN0b3J5JztcbmNvbnN0IEhJU1RPUlkgPSAndXNlcl9oaXN0b3J5JztcbmNvbnN0IFdBTExFVCA9ICd3YWxsZXQnO1xuXG52YXIgcGFnZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIEFVVEg6IEFVVEgsXG4gIEJBQ0tVUDogQkFDS1VQLFxuICBDSEFOTkVMOiBDSEFOTkVMLFxuICBESVNDT1ZFUjogRElTQ09WRVIsXG4gIEZJTEU6IEZJTEUsXG4gIERPV05MT0FERUQ6IERPV05MT0FERUQsXG4gIFBVQkxJU0hFRDogUFVCTElTSEVELFxuICBHRVRfQ1JFRElUUzogR0VUX0NSRURJVFMsXG4gIEhFTFA6IEhFTFAsXG4gIElOVklURTogSU5WSVRFLFxuICBQVUJMSVNIOiBQVUJMSVNILFxuICBSRVBPUlQ6IFJFUE9SVCxcbiAgUkVXQVJEUzogUkVXQVJEUyxcbiAgU0VBUkNIOiBTRUFSQ0gsXG4gIFNFTkRfQ1JFRElUUzogU0VORF9DUkVESVRTLFxuICBTRVRUSU5HUzogU0VUVElOR1MsXG4gIFNIT1c6IFNIT1csXG4gIFNVQlNDUklQVElPTlM6IFNVQlNDUklQVElPTlMsXG4gIFRSQU5TQUNUSU9OX0hJU1RPUlk6IFRSQU5TQUNUSU9OX0hJU1RPUlksXG4gIEhJU1RPUlk6IEhJU1RPUlksXG4gIFdBTExFVDogV0FMTEVUXG59KTtcblxuLyogaGFyZGNvZGVkIG5hbWVzIHN0aWxsIGV4aXN0IGZvciB0aGVzZSBpbiByZWR1Y2Vycy9zZXR0aW5ncy5qcyAtIG9ubHkgZGlzY292ZXJlZCB3aGVuIGRlYnVnZ2luZyAqL1xuLyogTWFueSBTRVRUSU5HUyBhcmUgc3RvcmVkIGluIHRoZSBsb2NhbFN0b3JhZ2UgYnkgdGhlaXIgbmFtZSAtXG4gICAgYmUgY2FyZWZ1bCBhYm91dCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYSBTRVRUSU5HUyBjb25zdGFudCwgYXMgZG9pbmcgc28gY2FuIGludmFsaWRhdGUgZXhpc3RpbmcgU0VUVElOR1MgKi9cbmNvbnN0IENSRURJVF9SRVFVSVJFRF9BQ0tOT1dMRURHRUQgPSAnY3JlZGl0X3JlcXVpcmVkX2Fja25vd2xlZGdlZCc7XG5jb25zdCBORVdfVVNFUl9BQ0tOT1dMRURHRUQgPSAnd2VsY29tZV9hY2tub3dsZWRnZWQnO1xuY29uc3QgRU1BSUxfQ09MTEVDVElPTl9BQ0tOT1dMRURHRUQgPSAnZW1haWxfY29sbGVjdGlvbl9hY2tub3dsZWRnZWQnO1xuY29uc3QgTEFOR1VBR0UgPSAnbGFuZ3VhZ2UnO1xuY29uc3QgU0hPV19OU0ZXID0gJ3Nob3dOc2Z3JztcbmNvbnN0IFNIT1dfVU5BVkFJTEFCTEUgPSAnc2hvd1VuYXZhaWxhYmxlJztcbmNvbnN0IElOU1RBTlRfUFVSQ0hBU0VfRU5BQkxFRCA9ICdpbnN0YW50UHVyY2hhc2VFbmFibGVkJztcbmNvbnN0IElOU1RBTlRfUFVSQ0hBU0VfTUFYID0gJ2luc3RhbnRQdXJjaGFzZU1heCc7XG5jb25zdCBUSEVNRSA9ICd0aGVtZSc7XG5jb25zdCBUSEVNRVMgPSAndGhlbWVzJztcbmNvbnN0IEFVVE9NQVRJQ19EQVJLX01PREVfRU5BQkxFRCA9ICdhdXRvbWF0aWNEYXJrTW9kZUVuYWJsZWQnO1xuXG4vLyBtb2JpbGUgc2V0dGluZ3NcbmNvbnN0IEJBQ0tHUk9VTkRfUExBWV9FTkFCTEVEID0gJ2JhY2tncm91bmRQbGF5RW5hYmxlZCc7XG5jb25zdCBGT1JFR1JPVU5EX05PVElGSUNBVElPTl9FTkFCTEVEID0gJ2ZvcmVncm91bmROb3RpZmljYXRpb25FbmFibGVkJztcbmNvbnN0IEtFRVBfREFFTU9OX1JVTk5JTkcgPSAna2VlcERhZW1vblJ1bm5pbmcnO1xuY29uc3QgU0hPV19VUklfQkFSX1NVR0dFU1RJT05TID0gJ3Nob3dVcmlCYXJTdWdnZXN0aW9ucyc7XG5jb25zdCBSRUNFSVZFX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TID0gJ3JlY2VpdmVTdWJzY3JpcHRpb25Ob3RpZmljYXRpb25zJztcbmNvbnN0IFJFQ0VJVkVfUkVXQVJEX05PVElGSUNBVElPTlMgPSAncmVjZWl2ZVJld2FyZE5vdGlmaWNhdGlvbnMnO1xuY29uc3QgUkVDRUlWRV9JTlRFUkVTVFNfTk9USUZJQ0FUSU9OUyA9ICdyZWNlaXZlSW50ZXJlc3RzTm90aWZpY2F0aW9ucyc7XG5jb25zdCBSRUNFSVZFX0NSRUFUT1JfTk9USUZJQ0FUSU9OUyA9ICdyZWNlaXZlQ3JlYXRvck5vdGlmaWNhdGlvbnMnO1xuXG52YXIgc2V0dGluZ3MgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIENSRURJVF9SRVFVSVJFRF9BQ0tOT1dMRURHRUQ6IENSRURJVF9SRVFVSVJFRF9BQ0tOT1dMRURHRUQsXG4gIE5FV19VU0VSX0FDS05PV0xFREdFRDogTkVXX1VTRVJfQUNLTk9XTEVER0VELFxuICBFTUFJTF9DT0xMRUNUSU9OX0FDS05PV0xFREdFRDogRU1BSUxfQ09MTEVDVElPTl9BQ0tOT1dMRURHRUQsXG4gIExBTkdVQUdFOiBMQU5HVUFHRSxcbiAgU0hPV19OU0ZXOiBTSE9XX05TRlcsXG4gIFNIT1dfVU5BVkFJTEFCTEU6IFNIT1dfVU5BVkFJTEFCTEUsXG4gIElOU1RBTlRfUFVSQ0hBU0VfRU5BQkxFRDogSU5TVEFOVF9QVVJDSEFTRV9FTkFCTEVELFxuICBJTlNUQU5UX1BVUkNIQVNFX01BWDogSU5TVEFOVF9QVVJDSEFTRV9NQVgsXG4gIFRIRU1FOiBUSEVNRSxcbiAgVEhFTUVTOiBUSEVNRVMsXG4gIEFVVE9NQVRJQ19EQVJLX01PREVfRU5BQkxFRDogQVVUT01BVElDX0RBUktfTU9ERV9FTkFCTEVELFxuICBCQUNLR1JPVU5EX1BMQVlfRU5BQkxFRDogQkFDS0dST1VORF9QTEFZX0VOQUJMRUQsXG4gIEZPUkVHUk9VTkRfTk9USUZJQ0FUSU9OX0VOQUJMRUQ6IEZPUkVHUk9VTkRfTk9USUZJQ0FUSU9OX0VOQUJMRUQsXG4gIEtFRVBfREFFTU9OX1JVTk5JTkc6IEtFRVBfREFFTU9OX1JVTk5JTkcsXG4gIFNIT1dfVVJJX0JBUl9TVUdHRVNUSU9OUzogU0hPV19VUklfQkFSX1NVR0dFU1RJT05TLFxuICBSRUNFSVZFX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TOiBSRUNFSVZFX1NVQlNDUklQVElPTl9OT1RJRklDQVRJT05TLFxuICBSRUNFSVZFX1JFV0FSRF9OT1RJRklDQVRJT05TOiBSRUNFSVZFX1JFV0FSRF9OT1RJRklDQVRJT05TLFxuICBSRUNFSVZFX0lOVEVSRVNUU19OT1RJRklDQVRJT05TOiBSRUNFSVZFX0lOVEVSRVNUU19OT1RJRklDQVRJT05TLFxuICBSRUNFSVZFX0NSRUFUT1JfTk9USUZJQ0FUSU9OUzogUkVDRUlWRV9DUkVBVE9SX05PVElGSUNBVElPTlNcbn0pO1xuXG5jb25zdCBEQVRFX05FVyA9ICdkYXRlTmV3JztcbmNvbnN0IERBVEVfT0xEID0gJ2RhdGVPbGQnO1xuY29uc3QgVElUTEUgPSAndGl0bGUnO1xuY29uc3QgRklMRU5BTUUgPSAnZmlsZW5hbWUnO1xuXG52YXIgc29ydF9vcHRpb25zID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBEQVRFX05FVzogREFURV9ORVcsXG4gIERBVEVfT0xEOiBEQVRFX09MRCxcbiAgVElUTEU6IFRJVExFLFxuICBGSUxFTkFNRTogRklMRU5BTUVcbn0pO1xuXG5jb25zdCBBUElfRE9XTiA9ICdhcGlEb3duJztcbmNvbnN0IFJFQURZID0gJ3JlYWR5JztcbmNvbnN0IElOX1BST0dSRVNTID0gJ2luUHJvZ3Jlc3MnO1xuY29uc3QgQ09NUExFVEUgPSAnY29tcGxldGUnO1xuY29uc3QgTUFOVUFMID0gJ21hbnVhbCc7XG5cbnZhciB0aHVtYm5haWxfdXBsb2FkX3N0YXR1c2VzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBBUElfRE9XTjogQVBJX0RPV04sXG4gIFJFQURZOiBSRUFEWSxcbiAgSU5fUFJPR1JFU1M6IElOX1BST0dSRVNTLFxuICBDT01QTEVURTogQ09NUExFVEUsXG4gIE1BTlVBTDogTUFOVUFMXG59KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmNvbnN0IEFMTCA9ICdhbGwnO1xuY29uc3QgU1BFTkQgPSAnc3BlbmQnO1xuY29uc3QgUkVDRUlWRSA9ICdyZWNlaXZlJztcbmNvbnN0IFBVQkxJU0gkMSA9ICdwdWJsaXNoJztcbmNvbnN0IENIQU5ORUwkMSA9ICdjaGFubmVsJztcbmNvbnN0IFRJUCA9ICd0aXAnO1xuY29uc3QgU1VQUE9SVCA9ICdzdXBwb3J0JztcbmNvbnN0IFVQREFURSA9ICd1cGRhdGUnO1xuY29uc3QgQUJBTkRPTiA9ICdhYmFuZG9uJztcblxudmFyIHRyYW5zYWN0aW9uX3R5cGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBBTEw6IEFMTCxcbiAgU1BFTkQ6IFNQRU5ELFxuICBSRUNFSVZFOiBSRUNFSVZFLFxuICBQVUJMSVNIOiBQVUJMSVNIJDEsXG4gIENIQU5ORUw6IENIQU5ORUwkMSxcbiAgVElQOiBUSVAsXG4gIFNVUFBPUlQ6IFNVUFBPUlQsXG4gIFVQREFURTogVVBEQVRFLFxuICBBQkFORE9OOiBBQkFORE9OXG59KTtcblxuLy8gUEFHRSBTSVpFXG5jb25zdCBQQUdFX1NJWkUkMSA9IDUwO1xuY29uc3QgTEFURVNUX1BBR0VfU0laRSA9IDIwO1xuXG52YXIgdHJhbnNhY3Rpb25fbGlzdCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgUEFHRV9TSVpFOiBQQUdFX1NJWkUkMSxcbiAgTEFURVNUX1BBR0VfU0laRTogTEFURVNUX1BBR0VfU0laRVxufSk7XG5cbmNvbnN0IFNQRUVDSF9TVEFUVVMgPSAnaHR0cHM6Ly9zcGVlLmNoL2FwaS9jb25maWcvc2l0ZS9wdWJsaXNoaW5nJztcbmNvbnN0IFNQRUVDSF9QVUJMSVNIID0gJ2h0dHBzOi8vc3BlZS5jaC9hcGkvY2xhaW0vcHVibGlzaCc7XG5cbnZhciBzcGVlY2hfdXJscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgU1BFRUNIX1NUQVRVUzogU1BFRUNIX1NUQVRVUyxcbiAgU1BFRUNIX1BVQkxJU0g6IFNQRUVDSF9QVUJMSVNIXG59KTtcblxuY29uc3QgQU5OT1VOQ0VfSEVBRF9BTkRfU0RfT05MWSA9ICdhbm5vdW5jZV9oZWFkX2FuZF9zZF9vbmx5JztcbmNvbnN0IEFQSSA9ICdhcGknO1xuY29uc3QgQkxPQl9ET1dOTE9BRF9USU1FT1VUID0gJ2Jsb2JfZG93bmxvYWRfdGltZW91dCc7XG5jb25zdCBCTE9CX0xSVV9DQUNIRV9TSVpFID0gJ2Jsb2JfbHJ1X2NhY2hlX3NpemUnO1xuY29uc3QgQkxPQ0tDSEFJTl9OQU1FID0gJ2Jsb2NrY2hhaW5fbmFtZSc7XG5jb25zdCBDQUNIRV9USU1FID0gJ2NhY2hlX3RpbWUnO1xuY29uc3QgQ09JTl9TRUxFQ1RJT05fU1RSQVRFR1kgPSAnY29pbl9zZWxlY3Rpb25fc3RyYXRlZ3knO1xuY29uc3QgQ09NTUVOVF9TRVJWRVIgPSAnY29tbWVudF9zZXJ2ZXInO1xuY29uc3QgQ09NUE9ORU5UU19UT19TS0lQID0gJ2NvbXBvbmVudHNfdG9fc2tpcCc7XG5jb25zdCBDT05DVVJSRU5UX0JMT0JfQU5OT1VOQ0VSUyA9ICdjb25jdXJyZW50X2Jsb2JfYW5ub3VuY2Vycyc7XG5jb25zdCBDT05DVVJSRU5UX1JFRkxFQ1RPUl9VUExPQURTID0gJ2NvbmN1cnJlbnRfcmVmbGVjdG9yX3VwbG9hZHMnO1xuY29uc3QgQ09ORklHID0gJ2NvbmZpZyc7XG5jb25zdCBEQVRBX0RJUiA9ICdkYXRhX2Rpcic7XG5jb25zdCBET1dOTE9BRF9ESVIgPSAnZG93bmxvYWRfZGlyJztcbmNvbnN0IERPV05MT0FEX1RJTUVPVVQgPSAnZG93bmxvYWRfdGltZW91dCc7XG5jb25zdCBGSVhFRF9QRUVSX0RFTEFZID0gJ2ZpeGVkX3BlZXJfZGVsYXknO1xuY29uc3QgS05PV05fREhUX05PREVTID0gJ2tub3duX2RodF9ub2Rlcyc7XG5jb25zdCBMQlJZVU1fU0VSVkVSUyA9ICdsYnJ5dW1fc2VydmVycyc7XG5jb25zdCBNQVhfQ09OTkVDVElPTlNfUEVSX0RPV05MT0FEID0gJ21heF9jb25uZWN0aW9uc19wZXJfZG93bmxvYWQnO1xuY29uc3QgTUFYX0tFWV9GRUUgPSAnbWF4X2tleV9mZWUnO1xuY29uc3QgREVGQVVMVF9XQUxMRVQgPSAnZGVmYXVsdF93YWxsZXQnO1xuY29uc3QgTkVUV09SS19JTlRFUkZBQ0UgPSAnbmV0d29ya19pbnRlcmZhY2UnO1xuY29uc3QgTk9ERV9SUENfVElNRU9VVCA9ICdub2RlX3JwY190aW1lb3V0JztcbmNvbnN0IFBFRVJfQ09OTkVDVF9USU1FT1VUID0gJ3BlZXJfY29ubmVjdF90aW1lb3V0JztcbmNvbnN0IFJFRkxFQ1RfU1RSRUFNUyA9ICdyZWZsZWN0X3N0cmVhbXMnO1xuY29uc3QgUkVGTEVDVE9SX1NFUlZFUlMgPSAncmVmbGVjdG9yX3NlcnZlcnMnO1xuY29uc3QgUzNfSEVBREVSU19ERVBUSCA9ICdzM19oZWFkZXJzX2RlcHRoJztcbmNvbnN0IFNBVkVfQkxPQlMgPSAnc2F2ZV9ibG9icyc7XG5jb25zdCBTQVZFX0ZJTEVTID0gJ3NhdmVfZmlsZXMnO1xuY29uc3QgU0hBUkVfVVNBR0VfREFUQSA9ICdzaGFyZV91c2FnZV9kYXRhJztcbmNvbnN0IFNQTElUX0JVQ0tFVFNfVU5ERVJfSU5ERVggPSAnc3BsaXRfYnVja2V0c191bmRlcl9pbmRleCc7XG5jb25zdCBTVFJFQU1JTkdfR0VUID0gJ3N0cmVhbWluZ19nZXQnO1xuY29uc3QgU1RSRUFNSU5HX1NFUlZFUiA9ICdzdHJlYW1pbmdfc2VydmVyJztcbmNvbnN0IFRDUF9QT1JUID0gJ3RjcF9wb3J0JztcbmNvbnN0IFRSQUNLX0JBTkRXSURUSCA9ICd0cmFja19iYW5kd2lkdGgnO1xuY29uc3QgVURQX1BPUlQgPSAndWRwX3BvcnQnO1xuY29uc3QgVVNFX1VQTlAgPSAndXNlX3VwbnAnO1xuY29uc3QgV0FMTEVUX0RJUiA9ICd3YWxsZXRfZGlyJztcbmNvbnN0IFdBTExFVFMgPSAnd2FsbGV0cyc7XG5cbnZhciBkYWVtb25fc2V0dGluZ3MgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIEFOTk9VTkNFX0hFQURfQU5EX1NEX09OTFk6IEFOTk9VTkNFX0hFQURfQU5EX1NEX09OTFksXG4gIEFQSTogQVBJLFxuICBCTE9CX0RPV05MT0FEX1RJTUVPVVQ6IEJMT0JfRE9XTkxPQURfVElNRU9VVCxcbiAgQkxPQl9MUlVfQ0FDSEVfU0laRTogQkxPQl9MUlVfQ0FDSEVfU0laRSxcbiAgQkxPQ0tDSEFJTl9OQU1FOiBCTE9DS0NIQUlOX05BTUUsXG4gIENBQ0hFX1RJTUU6IENBQ0hFX1RJTUUsXG4gIENPSU5fU0VMRUNUSU9OX1NUUkFURUdZOiBDT0lOX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgQ09NTUVOVF9TRVJWRVI6IENPTU1FTlRfU0VSVkVSLFxuICBDT01QT05FTlRTX1RPX1NLSVA6IENPTVBPTkVOVFNfVE9fU0tJUCxcbiAgQ09OQ1VSUkVOVF9CTE9CX0FOTk9VTkNFUlM6IENPTkNVUlJFTlRfQkxPQl9BTk5PVU5DRVJTLFxuICBDT05DVVJSRU5UX1JFRkxFQ1RPUl9VUExPQURTOiBDT05DVVJSRU5UX1JFRkxFQ1RPUl9VUExPQURTLFxuICBDT05GSUc6IENPTkZJRyxcbiAgREFUQV9ESVI6IERBVEFfRElSLFxuICBET1dOTE9BRF9ESVI6IERPV05MT0FEX0RJUixcbiAgRE9XTkxPQURfVElNRU9VVDogRE9XTkxPQURfVElNRU9VVCxcbiAgRklYRURfUEVFUl9ERUxBWTogRklYRURfUEVFUl9ERUxBWSxcbiAgS05PV05fREhUX05PREVTOiBLTk9XTl9ESFRfTk9ERVMsXG4gIExCUllVTV9TRVJWRVJTOiBMQlJZVU1fU0VSVkVSUyxcbiAgTUFYX0NPTk5FQ1RJT05TX1BFUl9ET1dOTE9BRDogTUFYX0NPTk5FQ1RJT05TX1BFUl9ET1dOTE9BRCxcbiAgTUFYX0tFWV9GRUU6IE1BWF9LRVlfRkVFLFxuICBERUZBVUxUX1dBTExFVDogREVGQVVMVF9XQUxMRVQsXG4gIE5FVFdPUktfSU5URVJGQUNFOiBORVRXT1JLX0lOVEVSRkFDRSxcbiAgTk9ERV9SUENfVElNRU9VVDogTk9ERV9SUENfVElNRU9VVCxcbiAgUEVFUl9DT05ORUNUX1RJTUVPVVQ6IFBFRVJfQ09OTkVDVF9USU1FT1VULFxuICBSRUZMRUNUX1NUUkVBTVM6IFJFRkxFQ1RfU1RSRUFNUyxcbiAgUkVGTEVDVE9SX1NFUlZFUlM6IFJFRkxFQ1RPUl9TRVJWRVJTLFxuICBTM19IRUFERVJTX0RFUFRIOiBTM19IRUFERVJTX0RFUFRILFxuICBTQVZFX0JMT0JTOiBTQVZFX0JMT0JTLFxuICBTQVZFX0ZJTEVTOiBTQVZFX0ZJTEVTLFxuICBTSEFSRV9VU0FHRV9EQVRBOiBTSEFSRV9VU0FHRV9EQVRBLFxuICBTUExJVF9CVUNLRVRTX1VOREVSX0lOREVYOiBTUExJVF9CVUNLRVRTX1VOREVSX0lOREVYLFxuICBTVFJFQU1JTkdfR0VUOiBTVFJFQU1JTkdfR0VULFxuICBTVFJFQU1JTkdfU0VSVkVSOiBTVFJFQU1JTkdfU0VSVkVSLFxuICBUQ1BfUE9SVDogVENQX1BPUlQsXG4gIFRSQUNLX0JBTkRXSURUSDogVFJBQ0tfQkFORFdJRFRILFxuICBVRFBfUE9SVDogVURQX1BPUlQsXG4gIFVTRV9VUE5QOiBVU0VfVVBOUCxcbiAgV0FMTEVUX0RJUjogV0FMTEVUX0RJUixcbiAgV0FMTEVUUzogV0FMTEVUU1xufSk7XG5cbi8qXG4gKiBIb3cgdG8gdXNlIHRoaXMgZmlsZTpcbiAqIFNldHRpbmdzIGV4cG9ydGVkIGZyb20gaGVyZSB3aWxsIHRyaWdnZXIgdGhlIHNldHRpbmcgdG8gYmVcbiAqIHNlbnQgdG8gdGhlIHByZWZlcmVuY2UgbWlkZGxld2FyZSB3aGVuIHNldCB1c2luZyB0aGVcbiAqIHVzdWFsIHNldERhZW1vblNldHRpbmdzIGFuZCBjbGVhckRhZW1vblNldHRpbmdzIG1ldGhvZHMuXG4gKlxuICogU2VlIHJlZHV4L3NldHRpbmdzL2FjdGlvbnMgaW4gdGhlIGFwcCBmb3Igd2hlcmUgdGhpcyBpcyB1c2VkLlxuICovXG5cbmNvbnN0IFdBTExFVF9TRVJWRVJTID0gTEJSWVVNX1NFUlZFUlM7XG5cbnZhciBzaGFyZWRfcHJlZmVyZW5jZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIFdBTExFVF9TRVJWRVJTOiBXQUxMRVRfU0VSVkVSU1xufSk7XG5cbmNvbnN0IFNFQVJDSF9UWVBFUyA9IHtcbiAgRklMRTogJ2ZpbGUnLFxuICBDSEFOTkVMOiAnY2hhbm5lbCcsXG4gIFNFQVJDSDogJ3NlYXJjaCcsXG4gIFRBRzogJ3RhZydcbn07XG5cbmNvbnN0IFNFQVJDSF9PUFRJT05TID0ge1xuICBSRVNVTFRfQ09VTlQ6ICdzaXplJyxcbiAgQ0xBSU1fVFlQRTogJ2NsYWltVHlwZScsXG4gIElOQ0xVREVfRklMRVM6ICdmaWxlJyxcbiAgSU5DTFVERV9DSEFOTkVMUzogJ2NoYW5uZWwnLFxuICBJTkNMVURFX0ZJTEVTX0FORF9DSEFOTkVMUzogJ2ZpbGUsY2hhbm5lbCcsXG4gIE1FRElBX0FVRElPOiAnYXVkaW8nLFxuICBNRURJQV9WSURFTzogJ3ZpZGVvJyxcbiAgTUVESUFfVEVYVDogJ3RleHQnLFxuICBNRURJQV9JTUFHRTogJ2ltYWdlJyxcbiAgTUVESUFfQVBQTElDQVRJT046ICdhcHBsaWNhdGlvbidcbn07XG5cbmNvbnN0IERFRkFVTFRfRk9MTE9XRURfVEFHUyA9IFsnYXJ0JywgJ2F1dG9tb3RpdmUnLCAnYmxvY2tjaGFpbicsICdjb21lZHknLCAnZWNvbm9taWNzJywgJ2VkdWNhdGlvbicsICdnYW1pbmcnLCAnbXVzaWMnLCAnbmV3cycsICdzY2llbmNlJywgJ3Nwb3J0cycsICd0ZWNobm9sb2d5J107XG5cbmNvbnN0IE1BVFVSRV9UQUdTID0gWydwb3JuJywgJ25zZncnLCAnbWF0dXJlJywgJ3h4eCddO1xuXG5jb25zdCBERUZBVUxUX0tOT1dOX1RBR1MgPSBbJ2dhbWluZycsICdwb3AgY3VsdHVyZScsICdFbnRlcnRhaW5tZW50JywgJ3RlY2hub2xvZ3knLCAnbXVzaWMnLCAnZnVubnknLCAnRWR1Y2F0aW9uJywgJ2xlYXJuaW5nJywgJ25ld3MnLCAnZ2FtZXBsYXknLCAnbmF0dXJlJywgJ2JlbGllZnMnLCAnY29tZWR5JywgJ2dhbWVzJywgJ3NvbnkgaW50ZXJhY3RpdmUgZW50ZXJ0YWlubWVudCcsICdmaWxtICYgYW5pbWF0aW9uJywgJ2dhbWUnLCAnd2VhcG9ucycsIFwibGV0J3MgcGxheVwiLCAnYmxvY2tjaGFpbicsICd2aWRlbyBnYW1lJywgJ3Nwb3J0cycsICd3YWxrdGhyb3VnaCcsICdwczRsaXZlJywgJ2FydCcsICdwYycsICdtaW5lY3JhZnQnLCAncGxheXRocm91Z2gnLCAnZWNvbm9taWNzJywgJ2F1dG9tb3RpdmUnLCAncGxheScsICdwczRzaGFyZScsICd0dXRvcmlhbCcsICd0d2l0Y2gnLCAnaG93IHRvJywgJ3BzNCcsICdiaXRjb2luJywgJ2ZvcnRuaXRlJywgJ2NvbW1lbnRhcnknLCAnbGV0cyBwbGF5JywgJ2Z1bicsICdwb2xpdGljcycsICd4Ym94JywgJ2F1dG9zICYgdmVoaWNsZXMnLCAnVHJhdmVsICYgRXZlbnRzJywgJ2Zvb2QnLCAnc2NpZW5jZScsICd4Ym94IG9uZScsICdsaWJlcmFsJywgJ2RlbW9jcmF0JywgJ3Byb2dyZXNzaXZlJywgJ3N1cnZpdmFsJywgJ05vbnByb2ZpdHMgJiBBY3RpdmlzbScsICdjcnlwdG9jdXJyZW5jeScsICdwbGF5c3RhdGlvbicsICduaW50ZW5kbycsICdnb3Zlcm5tZW50JywgJ3N0ZWFtJywgJ3BvZGNhc3QnLCAnZ2FtZXInLCAnaG9ycm9yJywgJ2NvbnNlcnZhdGl2ZScsICdyZWFjdGlvbicsICd0cmFpbGVyJywgJ2xvdmUnLCAnY25uJywgJ3JlcHVibGljYW4nLCAncG9saXRpY2FsJywgJ2hhbmdvdXRzb25haXInLCAnaG9hJywgJ21zbmJjJywgJ2NicycsICdhbmltZScsICdkb25hbGQgdHJ1bXAnLCAnZmljdGlvbicsICdmb3ggbmV3cycsICdjcnlwdG8nLCAnZXRoZXJldW0nLCAnY2FsbCBvZiBkdXR5JywgJ2FuZHJvaWQnLCAnbXVsdGlwbGF5ZXInLCAnZXBpYycsICdycGcnLCAnYWR2ZW50dXJlJywgJ3NlY3VsYXIgdGFsaycsICdidGMnLCAnYXRoZWlzdCcsICdhdGhlaXNtJywgJ3ZpZGVvIGdhbWVzJywgJ3BzMycsICdjb2QnLCAnb25saW5lJywgJ2Fnbm9zdGljJywgJ21vdmllJywgJ2ZwcycsICdsZXRzJywgJ21vZCcsICd3b3JsZCcsICdyZXZpZXdzJywgJ3NoYXJlZmFjdG9yeScsICdzcGFjZScsICdwb2tlbW9uJywgJ3N0cmVhbScsICdoaWxhcmlvdXMnLCAnbG9sJywgJ3NvbnknLCAnZ29kJywgXCJsZXQnc1wiLCAnZGFuY2UnLCAncHZwJywgJ3RlY2gnLCAnc3RyYXRlZ3knLCAnem9tYmllcycsICdmYWlsJywgJ2ZpbG0nLCAneGJveCAzNjAnLCAnYW5pbWF0aW9uJywgJ3VuYm94aW5nJywgJ21vbmV5JywgJ2hvdycsICd0cmF2ZWwnLCAnd3dlJywgJ21vZHMnLCAnaW5kaWUnLCAncHViZycsICdpb3MnLCAnaGlzdG9yeScsICdyYXAnLCAnc29ueSBjb21wdXRlciBlbnRlcnRhaW5tZW50JywgJ21vYmlsZScsICd0cnVtcCcsICdoYWNrJywgJ2ZsYXQgZWFydGgnLCAndHJhcCcsICdodW1vcicsICd2bG9nZ2luZycsICdmb3gnLCAnbmV3cyByYWRpbycsICdmYWNlYm9vaycsICdlZG0nLCAnZml0bmVzcycsICd2YXBpbmcnLCAnaGlwIGhvcCcsICdzZWN1bGFyJywgJ2plc3VzJywgJ3NvbmcnLCAndmFwZScsICdndWl0YXInLCAncmVtaXgnLCAnbWluaW5nJywgJ2RhaWx5JywgJ2RpeScsICdwZXRzICYgYW5pbWFscycsICd2aWRlb2dhbWUnLCAnZGVhdGgnLCAnZnVubnkgbW9tZW50cycsICdyZWxpZ2lvbicsICdtZWRpYScsICd2aXJhbCcsICd3YXInLCAnbmJjJywgJ2ZyZWVkb20nLCAnZ29sZCcsICdmYW1pbHknLCAnbWVtZScsICd6b21iaWUnLCAncGhvdG9ncmFwaHknLCAnY2hpbGwnLCAnc25pcGVyJywgJ2NvbXB1dGVyJywgJ2lwaG9uZScsICdkcmFnb24nLCAnYmlibGUnLCAncHJvJywgJ292ZXJ3YXRjaCcsICdsaXRlY29pbicsICdndGEnLCAnaG91c2UnLCAnZmlyZScsICdiYXNzJywgJ2JpdGNvaW4gbmV3cycsICd0cnV0aCcsICdjcmFzaCcsICdtYXJpbycsICdsZWFndWUgb2YgbGVnZW5kcycsICd3aWknLCAnbW1vcnBnJywgJ2dyYW5kIHRoZWZ0IGF1dG8gdicsICdoZWFsdGgnLCAnbWFydmVsJywgJ3JhY2luZycsICdhcHBsZScsICdpbnN0cnVtZW50YWwnLCAnZWFydGgnLCAnZGVzdGlueScsICdzYXRpcmUnLCAncmFjZScsICd0cmFpbmluZycsICdlbGVjdHJvbmljJywgJ2Jvc3MnLCAncm9ibG94JywgJ2ZhbWlseSBmcmllbmRseScsICdjYWxpZm9ybmlhJywgJ3JlYWN0JywgJ2NocmlzdGlhbicsICdtbW8nLCAndHdpdHRlcicsICdoZWxwJywgJ3N0YXInLCAnY2FycycsICdyYW5kb20nLCAndG9wIDEwJywgJ25pbmphJywgJ2d1bnMnLCAnbGludXgnLCAnbGVzc29ucycsICd2ZWdhbicsICdmdXR1cmUnLCAnZG90YSAyJywgJ3N0dWRpbycsICdzdGFyIHdhcnMnLCAnZ3RhIDUnLCAnc2hvb3RpbmcnLCAnbmFzYScsICdyb2NrJywgJ2xlYWd1ZScsICdzdWJzY3JpYmUnLCAnd2F0ZXInLCAnZ3RhIHYnLCAnY2FyJywgJ3NhbXN1bmcnLCAnbXVzaWMgdmlkZW8nLCAnc2t5cmltJywgJ2RvZycsICdjb21pY3MnLCAnc2hvb3RlciBnYW1lJywgJ2JvMycsICdoYWxsb3dlZW4nLCAnbGliZXJ0eScsICdldGgnLCAnY29uc3BpcmFjeScsICdrbmlmZScsICdmYXNoaW9uJywgJ3N0b3JpZXMnLCAndmFwb3InLCAnbnZpZGlhJywgJ2N1dGUnLCAnYmVhdCcsICduaW50ZW5kbyBzd2l0Y2gnLCAnZmFudGFzeScsICdjaHJpc3RtYXMnLCAnd29ybGQgb2Ygd2FyY3JhZnQnLCAnaW5kdXN0cnknLCAnY2FydG9vbicsICdjcnlwdG8gbmV3cycsICdnYXJkZW4nLCAnYW5pbWFscycsICd3aW5kb3dzJywgJ2hhcHB5JywgJ21hZ2ljJywgJ21lbWVzJywgJ2Rlc2lnbicsICd0YWN0aWNhbCcsICdmYWxsb3V0IDQnLCAncHV6emxlJywgJ3Bhcm9keScsICdydicsICdiZWF0cycsICdmb3J0bml0ZSBiYXR0bGUgcm95YWxlJywgJ2J1aWxkaW5nJywgJ2Rpc25leScsICdkcm9uZScsICdwczInLCAnYmVhY2gnLCAnbWV0YWwnLCAnY2hyaXN0aWFuaXR5JywgJ2J1c2luZXNzJywgJ21peCcsICdibzInLCAnY292ZXInLCAnc2VuYXRlJywgJzRrJywgJ3VuaXRlZCBzdGF0ZXMnLCAnZmluYWwnLCAnaGVybycsICdwbGF5aW5nJywgJ2RsYycsICd1Ymlzb2Z0JywgJ2hhbG8nLCAncGMgZ2FtaW5nJywgJ3JhdycsICdpbnZlc3RpbmcnLCAnb25saW5lIGxlYXJuaW5nJywgJ3NvZnR3YXJlJywgJ2FyaycsICdtb2phbmcnLCAnY29uc29sZScsICdiYXR0bGUgcm95YWxlJywgJ2Nhbm9uJywgJ21pY3Jvc29mdCcsICdjYW1waW5nJywgJ2NyeXB0b2N1cnJlbmN5IG5ld3MnLCAndWZvJywgJ3Byb2dyZXNzaXZlIHRhbGsnLCAnc3dpdGNoJywgJ2ZwdicsICdhcmNhZGUnLCAnc2Nob29sJywgJ2RyaXZpbmcnLCAnYm9keWJ1aWxkaW5nJywgJ2RyYW1hJywgJ3JldHJvJywgJ3NjaWVuY2UgZmljdGlvbicsICdlZ2dzJywgJ2F1c3RyYWxpYScsICdtb2RkZWQnLCAncmFpbmJvdycsICdnYW1lcnMnLCAncmVzaWRlbnQgZXZpbCcsICdkcmF3aW5nJywgJ2JyYXNpbCcsICdlbmdsYW5kJywgJ2hpbGxhcnkgY2xpbnRvbicsICdzaW5naW5nJywgJ2ZpbmFsIGZhbnRhc3knLCAnaGlwaG9wJywgJ3ZpZGVvIGJsb2cnLCAnbWF0dXJlJywgJ3F1YWQnLCAnbm9vYicsICdzaW11bGF0aW9uJywgJ2lsbHVtaW5hdGknLCAncG9ldHJ5JywgJ2RheXonLCAnbWFuZ2EnLCAnaG93dG8nLCAnaW5zYW5lJywgJ3hib3gzNjAnLCAncHJlc3MnLCAnc3BlY2lhbCcsICdjaHVyY2gnLCAnaWNvJywgJ3dlaXJkJywgJ2xpYmVydGFyaWFuJywgJ2NyYWZ0aW5nJywgJ2xldmVsJywgJ2NvbWljJywgJ3NhbmRib3gnLCAnZGFpbHkgdmxvZycsICdvdXRkb29yJywgJ2JsYWNrIG9wcycsICdzb3VuZCcsICdjaHJpc3QnLCAnZHV0eScsICdKdXZlbmlsZSBmaWN0aW9uJywgJ3BjIGdhbWUnLCAnaG93LXRvJywgJ3d3MicsICdjcmVlcHknLCAnYXJ0aXN0JywgJ2dhbGF4eScsICdkZXN0aW55IDInLCAnbmV3IG11c2ljJywgJ3F1ZXN0JywgJ2xlZScsICdwYWNtYW4nLCAnc3VwZXIgc21hc2ggYnJvcycsICdkYXknLCAnc3Vydml2YWwgaG9ycm9yJywgJ3BhdHJlb24nLCAnYml0Y29pbiBwcmljZScsICd0cmVuZGluZycsICdvcGVuIHdvcmxkJywgJ3dpaSB1JywgJ2RvcGUnLCAncmVhcGVyJywgJ3NuaXBpbmcnLCAnZHVic3RlcCcsICd0cnVjaycsICdwbGFuZXQnLCAnZGMnLCAnYW1hem9uJywgJ3NwaXJpdHVhbGl0eScsICd1bml2ZXJzZScsICd2aWRlbyBnYW1lIGN1bHR1cmUnLCAnY29tbXVuaXR5JywgJ2NhdCcsICdhbGllbnMnLCAndG91cmlzbScsICdhbHRjb2lucycsICdzdHlsZScsICd0cmF2ZWwgdHJhaWxlcicsICdyZGEnLCAnNTg1OWRmZWMtMDI2Zi00NmJhLWJlYTAtMDJiZjQzYWExYTZmJywgJ2d1bicsICdzZWNyZXQnLCAnZmFyIGNyeSA1JywgJ2F1dG8nLCAnY3VsdHVyZScsICdkaicsICdtdzInLCAnbG9yZCcsICdmdWxsIHRpbWUgcnZpbmcnLCAncm9sZS1wbGF5aW5nIGdhbWUnLCAncHJhbmsnLCAnZ3JhbmQgdGhlZnQgYXV0bycsICdtYXN0ZXInLCAnd3Jlc3RsaW5nJywgJ3NjaS1maScsICd3b3Jrb3V0JywgJ2dob3N0JywgJ2Zha2UgbmV3cycsICdzaWxseScsICdzZWFzb24nLCAnYm80JywgJ3RyYWRpbmcnLCAnZXh0cmVtZScsICdlY29ub215JywgJ2NvbWJhdCcsICdwbGF5cycsICdtdXNsaW0nLCAncHViZyBtb2JpbGUnLCAnY2xpcHMnLCAnYm8xJywgJ3BheXBhbCcsICdzaW1zJywgJ2V4cGxvcmF0aW9uJywgJ2xpZ2h0JywgJ3JpcHBsZScsICdwYXJhbm9ybWFsJywgJ2Zvb3RiYWxsJywgJ2NhcGNvbScsICdydGEnLCAnZGlzY29yZCcsICdhY3Rpb24gcm9sZS1wbGF5aW5nIGdhbWUnLCAncGxheXRocm91Z2ggcGFydCcsICdiYXRtYW4nLCAncGxheWVyJywgJ3NlcnZlcicsICdhbmFyY2h5JywgJ21pbGl0YXJ5JywgJ3BsYXlsaXN0JywgJ2Nvc3BsYXknLCAncnYgcGFyaycsICdyYW50JywgJ2VkaXQnLCAnZ2VybWFueScsICdyZWFkaW5nJywgJ2NocmlzJywgJ2ZsYXNoJywgJ2xvb3QnLCAnYml0Y29pbiBncmF0aXMnLCAnZ2FtZSByZXZpZXdzJywgJ21vdmllcycsICdzdHVwaWQnLCAnbGF0ZXN0IG5ld3MnLCAnc3F1YWQgZ2FtZXBsYXknLCAnZ3VydScsICd0aW1lbGFwc2UnLCAnYmxhY2sgb3BzIDMnLCAnaG9saWRheScsICdzb3VsJywgJ21vdGl2YXRpb24nLCAnbXczJywgJ3ZhY2F0aW9uJywgJ3NlZ2EnLCAnMTl0aCBjZW50dXJ5JywgJ3BvcCcsICdzaW1zIDQnLCAncG9zdCcsICdzbW9rJywgJ2lzbGFuZCcsICdzY290bGFuZCcsICdwYWxhZGlucycsICd3YXJyaW9yJywgJ2NyZWVweXBhc3RhJywgJ3JvbGUtcGxheWluZyB2aWRlbyBnYW1lJywgJ3NvbGFyJywgJ3ZyJywgJ2FuaW1hbCcsICdwZWFjZScsICdjb25zY2lvdXNuZXNzJywgJ2RvdGEnLCAnYXVkaW8nLCAnbWFzcyBlZmZlY3QnLCAnSHVtb3VyJywgJ2ZpcnN0IGxvb2snLCAndmlkZW9nYW1lcycsICdmdXR1cmUgYmFzcycsICdmcmVlc3R5bGUnLCAnaGFyZGNvcmUnLCAncG9ydHVnYWwnLCAnZGFudGRtJywgJ3RlYXNlcicsICdsYnJ5J107XG5cbi8vICAgICAgXG5cbmNvbnN0IENIRUNLX0RBRU1PTl9TVEFSVEVEX1RSWV9OVU1CRVIgPSAyMDA7XG4vL1xuLy8gQmFzaWMgTEJSWSBzZGsgY29ubmVjdGlvbiBjb25maWdcbi8vIE9mZmVycyBhIHByb3h5IHRvIGNhbGwgTEJSWSBzZGsgbWV0aG9kc1xuXG4vL1xuY29uc3QgTGJyeSA9IHtcbiAgaXNDb25uZWN0ZWQ6IGZhbHNlLFxuICBjb25uZWN0UHJvbWlzZTogbnVsbCxcbiAgZGFlbW9uQ29ubmVjdGlvblN0cmluZzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTI3OScsXG4gIGFwaVJlcXVlc3RIZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbi1ycGMnIH0sXG5cbiAgLy8gQWxsb3cgb3ZlcnJpZGluZyBkYWVtb24gY29ubmVjdGlvbiBzdHJpbmcgKGUuZy4gdG8gYC9hcGkvcHJveHlgIGZvciBsYnJ5d2ViKVxuICBzZXREYWVtb25Db25uZWN0aW9uU3RyaW5nOiB2YWx1ZSA9PiB7XG4gICAgTGJyeS5kYWVtb25Db25uZWN0aW9uU3RyaW5nID0gdmFsdWU7XG4gIH0sXG5cbiAgc2V0QXBpSGVhZGVyOiAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIExicnkuYXBpUmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKExicnkuYXBpUmVxdWVzdEhlYWRlcnMsIHsgW2tleV06IHZhbHVlIH0pO1xuICB9LFxuXG4gIHVuc2V0QXBpSGVhZGVyOiBrZXkgPT4ge1xuICAgIE9iamVjdC5rZXlzKExicnkuYXBpUmVxdWVzdEhlYWRlcnMpLmluY2x1ZGVzKGtleSkgJiYgZGVsZXRlIExicnkuYXBpUmVxdWVzdEhlYWRlcnNbJ2tleSddO1xuICB9LFxuICAvLyBBbGxvdyBvdmVycmlkaW5nIExicnkgbWV0aG9kc1xuICBvdmVycmlkZXM6IHt9LFxuICBzZXRPdmVycmlkZTogKG1ldGhvZE5hbWUsIG5ld01ldGhvZCkgPT4ge1xuICAgIExicnkub3ZlcnJpZGVzW21ldGhvZE5hbWVdID0gbmV3TWV0aG9kO1xuICB9LFxuICBnZXRBcGlSZXF1ZXN0SGVhZGVyczogKCkgPT4gTGJyeS5hcGlSZXF1ZXN0SGVhZGVycyxcblxuICAvLyBSZXR1cm5zIGEgaHVtYW4gcmVhZGFibGUgbWVkaWEgdHlwZSBiYXNlZCBvbiB0aGUgY29udGVudCB0eXBlIG9yIGV4dGVuc2lvbiBvZiBhIGZpbGUgdGhhdCBpcyByZXR1cm5lZCBieSB0aGUgc2RrXG4gIGdldE1lZGlhVHlwZTogKGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4ge1xuICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgY29uc3QgZm9ybWF0cyA9IFtbL1xcLihtcDR8bTR2fHdlYm18Zmx2fGY0dnxvZ3YpJC9pLCAndmlkZW8nXSwgWy9cXC4obXAzfG00YXxhYWN8d2F2fGZsYWN8b2dnfG9wdXMpJC9pLCAnYXVkaW8nXSwgWy9cXC4oanBlZ3xqcGd8cG5nfGdpZnxzdmcpJC9pLCAnaW1hZ2UnXSwgWy9cXC4oaHxnb3xqYXxqYXZhfGpzfGpzeHxjfGNwcHxjc3xjc3N8cmJ8c2Nzc3xzaHxwaHB8cHkpJC9pLCAnc2NyaXB0J10sIFsvXFwuKGpzb258Y3N2fHR4dHxsb2d8bWR8bWFya2Rvd258ZG9jeHxwZGZ8eG1sfHltbHx5YW1sKSQvaSwgJ2RvY3VtZW50J10sIFsvXFwuKHBkZnxvZGZ8ZG9jfGRvY3h8ZXB1Ynxvcmd8cnRmKSQvaSwgJ2UtYm9vayddLCBbL1xcLihzdGx8b2JqfGZieHxnY29kZSkkL2ksICczRC1maWxlJ10sIFsvXFwuKGNicnxjYnR8Y2J6KSQvaSwgJ2NvbWljLWJvb2snXSwgWy9cXC4obGJyeSkkL2ksICdhcHBsaWNhdGlvbiddXTtcblxuICAgICAgY29uc3QgcmVzID0gZm9ybWF0cy5yZWR1Y2UoKHJldCwgdGVzdHBhaXIpID0+IHtcbiAgICAgICAgc3dpdGNoICh0ZXN0cGFpclswXS50ZXN0KHJldCkpIHtcbiAgICAgICAgICBjYXNlIHRydWU6XG4gICAgICAgICAgICByZXR1cm4gdGVzdHBhaXJbMV07XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH0sIGZpbGVOYW1lKTtcbiAgICAgIHJldHVybiByZXMgPT09IGZpbGVOYW1lID8gJ3Vua25vd24nIDogcmVzO1xuICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiAoL15bXi9dKy8uZXhlYyhjb250ZW50VHlwZSlbMF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfSxcblxuICAvL1xuICAvLyBMYnJ5IFNESyBNZXRob2RzXG4gIC8vIGh0dHBzOi8vbGJyeS50ZWNoL2FwaS9zZGtcbiAgLy9cbiAgc3RhdHVzOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdGF0dXMnLCBwYXJhbXMpLFxuICBzdG9wOiAoKSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnc3RvcCcsIHt9KSxcbiAgdmVyc2lvbjogKCkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3ZlcnNpb24nLCB7fSksXG5cbiAgLy8gQ2xhaW0gZmV0Y2hpbmcgYW5kIG1hbmlwdWxhdGlvblxuICByZXNvbHZlOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3Jlc29sdmUnLCBwYXJhbXMpLFxuICBnZXQ6IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnZ2V0JywgcGFyYW1zKSxcbiAgY2xhaW1fc2VhcmNoOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NsYWltX3NlYXJjaCcsIHBhcmFtcyksXG4gIGNsYWltX2xpc3Q6IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY2xhaW1fbGlzdCcsIHBhcmFtcyksXG4gIGNoYW5uZWxfY3JlYXRlOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NoYW5uZWxfY3JlYXRlJywgcGFyYW1zKSxcbiAgY2hhbm5lbF91cGRhdGU6IHBhcmFtcyA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY2hhbm5lbF91cGRhdGUnLCBwYXJhbXMpLFxuICBjaGFubmVsX2ltcG9ydDogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjaGFubmVsX2ltcG9ydCcsIHBhcmFtcyksXG4gIGNoYW5uZWxfbGlzdDogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjaGFubmVsX2xpc3QnLCBwYXJhbXMpLFxuICBzdHJlYW1fYWJhbmRvbjogcGFyYW1zID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzdHJlYW1fYWJhbmRvbicsIHBhcmFtcyksXG4gIHN0cmVhbV9saXN0OiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N0cmVhbV9saXN0JywgcGFyYW1zKSxcbiAgY2hhbm5lbF9hYmFuZG9uOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NoYW5uZWxfYWJhbmRvbicsIHBhcmFtcyksXG4gIHN1cHBvcnRfY3JlYXRlOiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N1cHBvcnRfY3JlYXRlJywgcGFyYW1zKSxcbiAgc3VwcG9ydF9saXN0OiBwYXJhbXMgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N1cHBvcnRfbGlzdCcsIHBhcmFtcyksXG5cbiAgLy8gRmlsZSBmZXRjaGluZyBhbmQgbWFuaXB1bGF0aW9uXG4gIGZpbGVfbGlzdDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnZmlsZV9saXN0JywgcGFyYW1zKSxcbiAgZmlsZV9kZWxldGU6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2ZpbGVfZGVsZXRlJywgcGFyYW1zKSxcbiAgZmlsZV9zZXRfc3RhdHVzOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdmaWxlX3NldF9zdGF0dXMnLCBwYXJhbXMpLFxuICBibG9iX2RlbGV0ZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnYmxvYl9kZWxldGUnLCBwYXJhbXMpLFxuICBibG9iX2xpc3Q6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2Jsb2JfbGlzdCcsIHBhcmFtcyksXG5cbiAgLy8gV2FsbGV0IHV0aWxpdGllc1xuICB3YWxsZXRfYmFsYW5jZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnd2FsbGV0X2JhbGFuY2UnLCBwYXJhbXMpLFxuICB3YWxsZXRfZGVjcnlwdDogKCkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9kZWNyeXB0Jywge30pLFxuICB3YWxsZXRfZW5jcnlwdDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnd2FsbGV0X2VuY3J5cHQnLCBwYXJhbXMpLFxuICB3YWxsZXRfdW5sb2NrOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd3YWxsZXRfdW5sb2NrJywgcGFyYW1zKSxcbiAgd2FsbGV0X2xpc3Q6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9saXN0JywgcGFyYW1zKSxcbiAgd2FsbGV0X3NlbmQ6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3dhbGxldF9zZW5kJywgcGFyYW1zKSxcbiAgd2FsbGV0X3N0YXR1czogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnd2FsbGV0X3N0YXR1cycsIHBhcmFtcyksXG4gIGFkZHJlc3NfaXNfbWluZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnYWRkcmVzc19pc19taW5lJywgcGFyYW1zKSxcbiAgYWRkcmVzc191bnVzZWQ6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2FkZHJlc3NfdW51c2VkJywgcGFyYW1zKSxcbiAgYWRkcmVzc19saXN0OiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdhZGRyZXNzX2xpc3QnLCBwYXJhbXMpLFxuICB0cmFuc2FjdGlvbl9saXN0OiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd0cmFuc2FjdGlvbl9saXN0JywgcGFyYW1zKSxcbiAgdXR4b19yZWxlYXNlOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCd1dHhvX3JlbGVhc2UnLCBwYXJhbXMpLFxuICBzdXBwb3J0X2FiYW5kb246IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ3N1cHBvcnRfYWJhbmRvbicsIHBhcmFtcyksXG5cbiAgc3luY19oYXNoOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzeW5jX2hhc2gnLCBwYXJhbXMpLFxuICBzeW5jX2FwcGx5OiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdzeW5jX2FwcGx5JywgcGFyYW1zKSxcblxuICAvLyBQcmVmZXJlbmNlc1xuICBwcmVmZXJlbmNlX2dldDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgncHJlZmVyZW5jZV9nZXQnLCBwYXJhbXMpLFxuICBwcmVmZXJlbmNlX3NldDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgncHJlZmVyZW5jZV9zZXQnLCBwYXJhbXMpLFxuXG4gIC8vIENvbW1lbnRzXG4gIGNvbW1lbnRfbGlzdDogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY29tbWVudF9saXN0JywgcGFyYW1zKSxcbiAgY29tbWVudF9jcmVhdGU6IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NvbW1lbnRfY3JlYXRlJywgcGFyYW1zKSxcbiAgY29tbWVudF9oaWRlOiAocGFyYW1zID0ge30pID0+IGRhZW1vbkNhbGxXaXRoUmVzdWx0KCdjb21tZW50X2hpZGUnLCBwYXJhbXMpLFxuICBjb21tZW50X2FiYW5kb246IChwYXJhbXMgPSB7fSkgPT4gZGFlbW9uQ2FsbFdpdGhSZXN1bHQoJ2NvbW1lbnRfYWJhbmRvbicsIHBhcmFtcyksXG4gIC8vIHJlcXVpcmVzIFNESyB2ZXIuIDAuNTMuMFxuICBjb21tZW50X3VwZGF0ZTogKHBhcmFtcyA9IHt9KSA9PiBkYWVtb25DYWxsV2l0aFJlc3VsdCgnY29tbWVudF91cGRhdGUnLCBwYXJhbXMpLFxuXG4gIC8vIENvbm5lY3QgdG8gdGhlIHNka1xuICBjb25uZWN0OiAoKSA9PiB7XG4gICAgaWYgKExicnkuY29ubmVjdFByb21pc2UgPT09IG51bGwpIHtcbiAgICAgIExicnkuY29ubmVjdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCB0cnlOdW0gPSAwO1xuICAgICAgICAvLyBDaGVjayBldmVyeSBoYWxmIHNlY29uZCB0byBzZWUgaWYgdGhlIGRhZW1vbiBpcyBhY2NlcHRpbmcgY29ubmVjdGlvbnNcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tEYWVtb25TdGFydGVkKCkge1xuICAgICAgICAgIHRyeU51bSArPSAxO1xuICAgICAgICAgIExicnkuc3RhdHVzKCkudGhlbihyZXNvbHZlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJ5TnVtIDw9IENIRUNLX0RBRU1PTl9TVEFSVEVEX1RSWV9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0RhZW1vblN0YXJ0ZWQsIHRyeU51bSA8IDUwID8gNDAwIDogMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVbmFibGUgdG8gY29ubmVjdCB0byBMQlJZJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tEYWVtb25TdGFydGVkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGbG93IHRoaW5rcyB0aGlzIGNvdWxkIGJlIGVtcHR5LCBidXQgaXQgd2lsbCBhbHdheXMgcmV1dHVybiBhIHByb21pc2VcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIExicnkuY29ubmVjdFByb21pc2U7XG4gIH0sXG5cbiAgcHVibGlzaDogKHBhcmFtcyA9IHt9KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKExicnkub3ZlcnJpZGVzLnB1Ymxpc2gpIHtcbiAgICAgIExicnkub3ZlcnJpZGVzLnB1Ymxpc2gocGFyYW1zKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaUNhbGwoJ3B1Ymxpc2gnLCBwYXJhbXMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfVxuICB9KVxufTtcblxuZnVuY3Rpb24gY2hlY2tBbmRQYXJzZShyZXNwb25zZSkge1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5qc29uKCkudGhlbihqc29uID0+IHtcbiAgICBsZXQgZXJyb3I7XG4gICAgaWYgKGpzb24uZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHR5cGVvZiBqc29uLmVycm9yID09PSAnb2JqZWN0JyA/IGpzb24uZXJyb3IubWVzc2FnZSA6IGpzb24uZXJyb3I7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignUHJvdG9jb2wgZXJyb3Igd2l0aCB1bmtub3duIHJlc3BvbnNlIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBpQ2FsbChtZXRob2QsIHBhcmFtcywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIGNvbnN0IGNvdW50ZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiBMYnJ5LmFwaVJlcXVlc3RIZWFkZXJzLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgbWV0aG9kLFxuICAgICAgcGFyYW1zLFxuICAgICAgaWQ6IGNvdW50ZXJcbiAgICB9KVxuICB9O1xuXG4gIHJldHVybiBmZXRjaChMYnJ5LmRhZW1vbkNvbm5lY3Rpb25TdHJpbmcsIG9wdGlvbnMpLnRoZW4oY2hlY2tBbmRQYXJzZSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSByZXNwb25zZS5lcnJvciB8fCByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LmVycm9yO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcbiAgfSkuY2F0Y2gocmVqZWN0KTtcbn1cblxuZnVuY3Rpb24gZGFlbW9uQ2FsbFdpdGhSZXN1bHQobmFtZSwgcGFyYW1zID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhcGlDYWxsKG5hbWUsIHBhcmFtcywgcmVzdWx0ID0+IHtcbiAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICB9LCByZWplY3QpO1xuICB9KTtcbn1cblxuLy8gVGhpcyBpcyBvbmx5IGZvciBhIGZhbGxiYWNrXG4vLyBJZiB0aGVyZSBpcyBhIExicnkgbWV0aG9kIHRoYXQgaXMgYmVpbmcgY2FsbGVkIGJ5IGFuIGFwcCwgaXQgc2hvdWxkIGJlIGFkZGVkIHRvIC9mbG93LXR5cGVkL0xicnkuanNcbmNvbnN0IGxicnlQcm94eSA9IG5ldyBQcm94eShMYnJ5LCB7XG4gIGdldCh0YXJnZXQsIG5hbWUpIHtcbiAgICBpZiAobmFtZSBpbiB0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXRbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChwYXJhbXMgPSB7fSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgYXBpQ2FsbChuYW1lLCBwYXJhbXMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vLyAgICAgIFxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRfRlJPTSA9IDA7XG5jb25zdCBERUZBVUxUX1NFQVJDSF9TSVpFID0gMjA7XG5cbmZ1bmN0aW9uIHBhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpIHtcbiAgaWYgKHF1ZXJ5U3RyaW5nID09PSAnJykgcmV0dXJuIHt9O1xuICBjb25zdCBwYXJ0cyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCc/JykucG9wKCkuc3BsaXQoJyYnKS5tYXAocCA9PiBwLnNwbGl0KCc9JykpO1xuXG4gIGNvbnN0IHBhcmFtcyA9IHt9O1xuICBwYXJ0cy5mb3JFYWNoKGFycmF5ID0+IHtcbiAgICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBhcnJheTtcbiAgICBwYXJhbXNbZmlyc3RdID0gc2Vjb25kO1xuICB9KTtcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhwYXJhbXMpIHtcbiAgaWYgKCFwYXJhbXMpIHJldHVybiAnJztcblxuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtcywga2V5KSAmJiBwYXJhbXNba2V5XSkge1xuICAgICAgcGFydHMucHVzaChgJHtrZXl9PSR7cGFyYW1zW2tleV19YCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFydHMuam9pbignJicpO1xufVxuXG5jb25zdCBnZXRTZWFyY2hRdWVyeVN0cmluZyA9IChxdWVyeSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGVuY29kZWRRdWVyeSA9IGVuY29kZVVSSUNvbXBvbmVudChxdWVyeSk7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gW2BzPSR7ZW5jb2RlZFF1ZXJ5fWAsIGBzaXplPSR7b3B0aW9ucy5zaXplIHx8IERFRkFVTFRfU0VBUkNIX1NJWkV9YCwgYGZyb209JHtvcHRpb25zLmZyb20gfHwgREVGQVVMVF9TRUFSQ0hfUkVTVUxUX0ZST019YF07XG4gIGNvbnN0IHsgaXNCYWNrZ3JvdW5kU2VhcmNoIH0gPSBvcHRpb25zO1xuICBjb25zdCBpbmNsdWRlVXNlck9wdGlvbnMgPSB0eXBlb2YgaXNCYWNrZ3JvdW5kU2VhcmNoID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogIWlzQmFja2dyb3VuZFNlYXJjaDtcblxuICBpZiAoaW5jbHVkZVVzZXJPcHRpb25zKSB7XG4gICAgY29uc3QgY2xhaW1UeXBlID0gb3B0aW9uc1tTRUFSQ0hfT1BUSU9OUy5DTEFJTV9UWVBFXTtcbiAgICBxdWVyeVBhcmFtcy5wdXNoKGBjbGFpbVR5cGU9JHtjbGFpbVR5cGV9YCk7XG5cbiAgICAvLyBJZiB0aGV5IGFyZSBvbmx5IHNlYXJjaGluZyBmb3IgY2hhbm5lbHMsIHN0cmlwIG91dCB0aGUgbWVkaWEgaW5mb1xuICAgIGlmICghY2xhaW1UeXBlLmluY2x1ZGVzKFNFQVJDSF9PUFRJT05TLklOQ0xVREVfQ0hBTk5FTFMpKSB7XG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGBtZWRpYVR5cGU9JHtbU0VBUkNIX09QVElPTlMuTUVESUFfRklMRSwgU0VBUkNIX09QVElPTlMuTUVESUFfQVVESU8sIFNFQVJDSF9PUFRJT05TLk1FRElBX1ZJREVPLCBTRUFSQ0hfT1BUSU9OUy5NRURJQV9URVhULCBTRUFSQ0hfT1BUSU9OUy5NRURJQV9JTUFHRSwgU0VBUkNIX09QVElPTlMuTUVESUFfQVBQTElDQVRJT05dLnJlZHVjZSgoYWNjLCBjdXJyZW50T3B0aW9uKSA9PiBvcHRpb25zW2N1cnJlbnRPcHRpb25dID8gYCR7YWNjfSR7Y3VycmVudE9wdGlvbn0sYCA6IGFjYywgJycpfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0ge307XG4gIGNvbnN0IHsgcmVsYXRlZF90byB9ID0gb3B0aW9ucztcbiAgY29uc3QgeyBuc2Z3IH0gPSBvcHRpb25zO1xuICBpZiAocmVsYXRlZF90bykgYWRkaXRpb25hbE9wdGlvbnNbJ3JlbGF0ZWRfdG8nXSA9IHJlbGF0ZWRfdG87XG4gIGlmICh0eXBlb2YgbnNmdyAhPT0gJ3VuZGVmaW5lZCcpIGFkZGl0aW9uYWxPcHRpb25zWyduc2Z3J10gPSBuc2Z3O1xuXG4gIGlmIChhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxPcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBhZGRpdGlvbmFsT3B0aW9uc1trZXldO1xuICAgICAgcXVlcnlQYXJhbXMucHVzaChgJHtrZXl9PSR7b3B0aW9ufWApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5UGFyYW1zLmpvaW4oJyYnKTtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cbmNvbnN0IGNoYW5uZWxOYW1lTWluTGVuZ3RoID0gMTtcbmNvbnN0IGNsYWltSWRNYXhMZW5ndGggPSA0MDtcblxuLy8gc2VlIGh0dHBzOi8vc3BlYy5sYnJ5LmNvbS8jdXJsc1xuY29uc3QgcmVnZXhJbnZhbGlkVVJJID0gL1sgPSYjOiRAJT87L1xcXFxcIjw+JXt9fF5+W1xcXWBcXHV7MDAwMH0tXFx1ezAwMDh9XFx1ezAwMGJ9LVxcdXswMDBjfVxcdXswMDBlfS1cXHV7MDAxRn1cXHV7RDgwMH0tXFx1e0RGRkZ9XFx1e0ZGRkV9LVxcdXtGRkZGfV0vdTtcbmNvbnN0IHJlZ2V4QWRkcmVzcyA9IC9eKGJ8cikoPz1bXjBPSWxdezMyLDMzfSlbMC05QS1aYS16XXszMiwzM30kLztcbmNvbnN0IHJlZ2V4UGFydFByb3RvY29sID0gJ14oKD86bGJyeTovLyk/KSc7XG5jb25zdCByZWdleFBhcnRTdHJlYW1PckNoYW5uZWxOYW1lID0gJyhbXjokIy9dKiknO1xuY29uc3QgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IgPSAnKFs6JCNdPykoW14vXSopJztcbmNvbnN0IHF1ZXJ5U3RyaW5nQnJlYWtlciA9ICdeKFtcXFxcU10rKShbP11bXFxcXFNdKiknO1xuY29uc3Qgc2VwYXJhdGVRdWVyeXN0cmluZyA9IG5ldyBSZWdFeHAocXVlcnlTdHJpbmdCcmVha2VyKTtcblxuLyoqXG4gKiBQYXJzZXMgYSBMQlJZIG5hbWUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBUaHJvd3MgZXJyb3JzIHdpdGggdXNlci1mcmllbmRseVxuICogbWVzc2FnZXMgZm9yIGludmFsaWQgbmFtZXMuXG4gKlxuICogUmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCBrZXlzOlxuICogICAtIHBhdGggKHN0cmluZylcbiAqICAgLSBpc0NoYW5uZWwgKGJvb2xlYW4pXG4gKiAgIC0gc3RyZWFtTmFtZSAoc3RyaW5nLCBpZiBwcmVzZW50KVxuICogICAtIHN0cmVhbUNsYWltSWQgKHN0cmluZywgaWYgcHJlc2VudClcbiAqICAgLSBjaGFubmVsTmFtZSAoc3RyaW5nLCBpZiBwcmVzZW50KVxuICogICAtIGNoYW5uZWxDbGFpbUlkIChzdHJpbmcsIGlmIHByZXNlbnQpXG4gKiAgIC0gcHJpbWFyeUNsYWltU2VxdWVuY2UgKGludCwgaWYgcHJlc2VudClcbiAqICAgLSBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlIChpbnQsIGlmIHByZXNlbnQpXG4gKiAgIC0gcHJpbWFyeUJpZFBvc2l0aW9uIChpbnQsIGlmIHByZXNlbnQpXG4gKiAgIC0gc2Vjb25kYXJ5QmlkUG9zaXRpb24gKGludCwgaWYgcHJlc2VudClcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVVSSShVUkwsIHJlcXVpcmVQcm90byA9IGZhbHNlKSB7XG4gIC8vIEJyZWFrIGludG8gY29tcG9uZW50cy4gRW1wdHkgc3ViLW1hdGNoZXMgYXJlIGNvbnZlcnRlZCB0byBudWxsXG5cbiAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFBhcnRQcm90b2NvbCArIC8vIHByb3RvY29sXG4gIHJlZ2V4UGFydFN0cmVhbU9yQ2hhbm5lbE5hbWUgKyAvLyBzdHJlYW0gb3IgY2hhbm5lbCBuYW1lIChzdG9wcyBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIG9yIGVuZClcbiAgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IgKyAvLyBtb2RpZmllciBzZXBhcmF0b3IsIG1vZGlmaWVyIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAnKC8/KScgKyAvLyBwYXRoIHNlcGFyYXRvciwgdGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIChvcHRpb25hbCkgc2xhc2ggdG8gc2VwYXJhdGUgdGhlIHN0cmVhbSBhbmQgY2hhbm5lbCBwYXJ0c1xuICByZWdleFBhcnRTdHJlYW1PckNoYW5uZWxOYW1lICsgcmVnZXhQYXJ0TW9kaWZpZXJTZXBhcmF0b3IpO1xuICAvLyBjaG9wIG9mZiB0aGUgcXVlcnlzdHJpbmcgZmlyc3RcbiAgbGV0IFFTU3RyaXBwZWRVUkwsIHFzO1xuICBjb25zdCBxc1JlZ2V4UmVzdWx0ID0gc2VwYXJhdGVRdWVyeXN0cmluZy5leGVjKFVSTCk7XG4gIGlmIChxc1JlZ2V4UmVzdWx0KSB7XG4gICAgW1FTU3RyaXBwZWRVUkwsIHFzXSA9IHFzUmVnZXhSZXN1bHQuc2xpY2UoMSkubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICB9XG5cbiAgY29uc3QgY2xlYW5VUkwgPSBRU1N0cmlwcGVkVVJMIHx8IFVSTDtcbiAgY29uc3QgcmVnZXhNYXRjaCA9IGNvbXBvbmVudHNSZWdleC5leGVjKGNsZWFuVVJMKSB8fCBbXTtcbiAgY29uc3QgW3Byb3RvLCAuLi5yZXN0XSA9IHJlZ2V4TWF0Y2guc2xpY2UoMSkubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICBjb25zdCBwYXRoID0gcmVzdC5qb2luKCcnKTtcbiAgY29uc3QgW3N0cmVhbU5hbWVPckNoYW5uZWxOYW1lLCBwcmltYXJ5TW9kU2VwYXJhdG9yLCBwcmltYXJ5TW9kVmFsdWUsIHBhdGhTZXAsIHBvc3NpYmxlU3RyZWFtTmFtZSwgc2Vjb25kYXJ5TW9kU2VwYXJhdG9yLCBzZWNvbmRhcnlNb2RWYWx1ZV0gPSByZXN0O1xuXG4gIC8vIFZhbGlkYXRlIHByb3RvY29sXG4gIGlmIChyZXF1aXJlUHJvdG8gJiYgIXByb3RvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdMQlJZIFVSTHMgbXVzdCBpbmNsdWRlIGEgcHJvdG9jb2wgcHJlZml4IChsYnJ5Oi8vKS4nKSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gIGlmICghc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoX18oJ1VSTCBkb2VzIG5vdCBpbmNsdWRlIG5hbWUuJykpO1xuICB9XG5cbiAgcmVzdC5mb3JFYWNoKHVybFBpZWNlID0+IHtcbiAgICBpZiAodXJsUGllY2UgJiYgdXJsUGllY2UuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgY29uc29sZS5lcnJvcignVVJMIGNhbiBub3QgaW5jbHVkZSBhIHNwYWNlJyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpbmNsdWRlc0NoYW5uZWwgPSBzdHJlYW1OYW1lT3JDaGFubmVsTmFtZS5zdGFydHNXaXRoKCdAJyk7XG4gIGNvbnN0IGlzQ2hhbm5lbCA9IHN0cmVhbU5hbWVPckNoYW5uZWxOYW1lLnN0YXJ0c1dpdGgoJ0AnKSAmJiAhcG9zc2libGVTdHJlYW1OYW1lO1xuICBjb25zdCBjaGFubmVsTmFtZSA9IGluY2x1ZGVzQ2hhbm5lbCAmJiBzdHJlYW1OYW1lT3JDaGFubmVsTmFtZS5zbGljZSgxKTtcblxuICBpZiAoaW5jbHVkZXNDaGFubmVsKSB7XG4gICAgaWYgKCFjaGFubmVsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKF9fKCdObyBjaGFubmVsIG5hbWUgYWZ0ZXIgQC4nKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWxOYW1lLmxlbmd0aCA8IGNoYW5uZWxOYW1lTWluTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoX18oYENoYW5uZWwgbmFtZXMgbXVzdCBiZSBhdCBsZWFzdCAlY2hhbm5lbE5hbWVNaW5MZW5ndGglIGNoYXJhY3RlcnMuYCwge1xuICAgICAgICBjaGFubmVsTmFtZU1pbkxlbmd0aFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG1vZGlmaWVyXG4gIGNvbnN0IFtwcmltYXJ5Q2xhaW1JZCwgcHJpbWFyeUNsYWltU2VxdWVuY2UsIHByaW1hcnlCaWRQb3NpdGlvbl0gPSBwYXJzZVVSSU1vZGlmaWVyKHByaW1hcnlNb2RTZXBhcmF0b3IsIHByaW1hcnlNb2RWYWx1ZSk7XG4gIGNvbnN0IFtzZWNvbmRhcnlDbGFpbUlkLCBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLCBzZWNvbmRhcnlCaWRQb3NpdGlvbl0gPSBwYXJzZVVSSU1vZGlmaWVyKHNlY29uZGFyeU1vZFNlcGFyYXRvciwgc2Vjb25kYXJ5TW9kVmFsdWUpO1xuICBjb25zdCBzdHJlYW1OYW1lID0gaW5jbHVkZXNDaGFubmVsID8gcG9zc2libGVTdHJlYW1OYW1lIDogc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWU7XG4gIGNvbnN0IHN0cmVhbUNsYWltSWQgPSBpbmNsdWRlc0NoYW5uZWwgPyBzZWNvbmRhcnlDbGFpbUlkIDogcHJpbWFyeUNsYWltSWQ7XG4gIGNvbnN0IGNoYW5uZWxDbGFpbUlkID0gaW5jbHVkZXNDaGFubmVsICYmIHByaW1hcnlDbGFpbUlkO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgaXNDaGFubmVsLFxuICAgIHBhdGhcbiAgfSwgc3RyZWFtTmFtZSA/IHsgc3RyZWFtTmFtZSB9IDoge30sIHN0cmVhbUNsYWltSWQgPyB7IHN0cmVhbUNsYWltSWQgfSA6IHt9LCBjaGFubmVsTmFtZSA/IHsgY2hhbm5lbE5hbWUgfSA6IHt9LCBjaGFubmVsQ2xhaW1JZCA/IHsgY2hhbm5lbENsYWltSWQgfSA6IHt9LCBwcmltYXJ5Q2xhaW1TZXF1ZW5jZSA/IHsgcHJpbWFyeUNsYWltU2VxdWVuY2U6IHBhcnNlSW50KHByaW1hcnlDbGFpbVNlcXVlbmNlLCAxMCkgfSA6IHt9LCBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlID8geyBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlOiBwYXJzZUludChzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLCAxMCkgfSA6IHt9LCBwcmltYXJ5QmlkUG9zaXRpb24gPyB7IHByaW1hcnlCaWRQb3NpdGlvbjogcGFyc2VJbnQocHJpbWFyeUJpZFBvc2l0aW9uLCAxMCkgfSA6IHt9LCBzZWNvbmRhcnlCaWRQb3NpdGlvbiA/IHsgc2Vjb25kYXJ5QmlkUG9zaXRpb246IHBhcnNlSW50KHNlY29uZGFyeUJpZFBvc2l0aW9uLCAxMCkgfSA6IHt9LCB7XG5cbiAgICAvLyBUaGUgdmFsdWVzIGJlbG93IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgbmV3IHVzZXMgb2YgcGFyc2VVUklcbiAgICAvLyBUaGV5IHdpbGwgbm90IHdvcmsgcHJvcGVybHkgd2l0aCBjYW5vbmljYWxfdXJsc1xuICAgIGNsYWltTmFtZTogc3RyZWFtTmFtZU9yQ2hhbm5lbE5hbWUsXG4gICAgY2xhaW1JZDogcHJpbWFyeUNsYWltSWRcbiAgfSwgc3RyZWFtTmFtZSA/IHsgY29udGVudE5hbWU6IHN0cmVhbU5hbWUgfSA6IHt9LCBxcyA/IHsgcXVlcnlTdHJpbmc6IHFzIH0gOiB7fSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJJTW9kaWZpZXIobW9kU2VwZXJhdG9yLCBtb2RWYWx1ZSkge1xuICBsZXQgY2xhaW1JZDtcbiAgbGV0IGNsYWltU2VxdWVuY2U7XG4gIGxldCBiaWRQb3NpdGlvbjtcblxuICBpZiAobW9kU2VwZXJhdG9yKSB7XG4gICAgaWYgKCFtb2RWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKF9fKGBObyBtb2RpZmllciBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgJW1vZFNlcGVyYXRvciUuYCwgeyBtb2RTZXBlcmF0b3IgfSkpO1xuICAgIH1cblxuICAgIGlmIChtb2RTZXBlcmF0b3IgPT09ICcjJykge1xuICAgICAgY2xhaW1JZCA9IG1vZFZhbHVlO1xuICAgIH0gZWxzZSBpZiAobW9kU2VwZXJhdG9yID09PSAnOicpIHtcbiAgICAgIGNsYWltU2VxdWVuY2UgPSBtb2RWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG1vZFNlcGVyYXRvciA9PT0gJyQnKSB7XG4gICAgICBiaWRQb3NpdGlvbiA9IG1vZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjbGFpbUlkICYmIChjbGFpbUlkLmxlbmd0aCA+IGNsYWltSWRNYXhMZW5ndGggfHwgIWNsYWltSWQubWF0Y2goL15bMC05YS1mXSskLykpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKGBJbnZhbGlkIGNsYWltIElEICVjbGFpbUlkJS5gLCB7IGNsYWltSWQgfSkpO1xuICB9XG5cbiAgaWYgKGNsYWltU2VxdWVuY2UgJiYgIWNsYWltU2VxdWVuY2UubWF0Y2goL14tP1sxLTldWzAtOV0qJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdDbGFpbSBzZXF1ZW5jZSBtdXN0IGJlIGEgbnVtYmVyLicpKTtcbiAgfVxuXG4gIGlmIChiaWRQb3NpdGlvbiAmJiAhYmlkUG9zaXRpb24ubWF0Y2goL14tP1sxLTldWzAtOV0qJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKF9fKCdCaWQgcG9zaXRpb24gbXVzdCBiZSBhIG51bWJlci4nKSk7XG4gIH1cblxuICByZXR1cm4gW2NsYWltSWQsIGNsYWltU2VxdWVuY2UsIGJpZFBvc2l0aW9uXTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBvYmplY3QgaW4gdGhlIHNhbWUgZm9ybWF0IHJldHVybmVkIGJ5IHBhcnNlKCkgYW5kIGJ1aWxkcyBhIFVSSS5cbiAqXG4gKiBUaGUgY2hhbm5lbE5hbWUga2V5IHdpbGwgYWNjZXB0IG5hbWVzIHdpdGggb3Igd2l0aG91dCB0aGUgQCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJJKFVybE9iaiwgaW5jbHVkZVByb3RvID0gdHJ1ZSwgcHJvdG9EZWZhdWx0ID0gJ2xicnk6Ly8nKSB7XG4gIGNvbnN0IHtcbiAgICBzdHJlYW1OYW1lLFxuICAgIHN0cmVhbUNsYWltSWQsXG4gICAgY2hhbm5lbE5hbWUsXG4gICAgY2hhbm5lbENsYWltSWQsXG4gICAgcHJpbWFyeUNsYWltU2VxdWVuY2UsXG4gICAgcHJpbWFyeUJpZFBvc2l0aW9uLFxuICAgIHNlY29uZGFyeUNsYWltU2VxdWVuY2UsXG4gICAgc2Vjb25kYXJ5QmlkUG9zaXRpb25cbiAgfSA9IFVybE9iaixcbiAgICAgICAgZGVwcmVjYXRlZFBhcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKFVybE9iaiwgWydzdHJlYW1OYW1lJywgJ3N0cmVhbUNsYWltSWQnLCAnY2hhbm5lbE5hbWUnLCAnY2hhbm5lbENsYWltSWQnLCAncHJpbWFyeUNsYWltU2VxdWVuY2UnLCAncHJpbWFyeUJpZFBvc2l0aW9uJywgJ3NlY29uZGFyeUNsYWltU2VxdWVuY2UnLCAnc2Vjb25kYXJ5QmlkUG9zaXRpb24nXSk7XG4gIGNvbnN0IHsgY2xhaW1JZCwgY2xhaW1OYW1lLCBjb250ZW50TmFtZSB9ID0gZGVwcmVjYXRlZFBhcnRzO1xuXG4gIGlmICghY2xhaW1OYW1lICYmICFjaGFubmVsTmFtZSAmJiAhc3RyZWFtTmFtZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoX18oXCInY2xhaW1OYW1lJywgJ2NoYW5uZWxOYW1lJywgYW5kICdzdHJlYW1OYW1lJyBhcmUgYWxsIGVtcHR5LiBPbmUgbXVzdCBiZSBwcmVzZW50IHRvIGJ1aWxkIGEgdXJsLlwiKSk7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZWRDaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lICYmIChjaGFubmVsTmFtZS5zdGFydHNXaXRoKCdAJykgPyBjaGFubmVsTmFtZSA6IGBAJHtjaGFubmVsTmFtZX1gKTtcbiAgY29uc3QgcHJpbWFyeUNsYWltTmFtZSA9IGNsYWltTmFtZSB8fCBjb250ZW50TmFtZSB8fCBmb3JtYXR0ZWRDaGFubmVsTmFtZSB8fCBzdHJlYW1OYW1lO1xuICBjb25zdCBwcmltYXJ5Q2xhaW1JZCA9IGNsYWltSWQgfHwgKGZvcm1hdHRlZENoYW5uZWxOYW1lID8gY2hhbm5lbENsYWltSWQgOiBzdHJlYW1DbGFpbUlkKTtcbiAgY29uc3Qgc2Vjb25kYXJ5Q2xhaW1OYW1lID0gIWNsYWltTmFtZSAmJiBjb250ZW50TmFtZSB8fCAoZm9ybWF0dGVkQ2hhbm5lbE5hbWUgPyBzdHJlYW1OYW1lIDogbnVsbCk7XG4gIGNvbnN0IHNlY29uZGFyeUNsYWltSWQgPSBzZWNvbmRhcnlDbGFpbU5hbWUgJiYgc3RyZWFtQ2xhaW1JZDtcblxuICByZXR1cm4gKGluY2x1ZGVQcm90byA/IHByb3RvRGVmYXVsdCA6ICcnKSArXG4gIC8vIHByaW1hcnlDbGFpbU5hbWUgd2lsbCBhbHdheXMgZXhpc3QgaGVyZSBiZWNhdXNlIHdlIHRocm93IGFib3ZlIGlmIHRoZXJlIGlzIG5vIFwibmFtZVwiIHZhbHVlIHBhc3NlZCBpblxuICAvLyAkRmxvd0ZpeE1lXG4gIHByaW1hcnlDbGFpbU5hbWUgKyAocHJpbWFyeUNsYWltSWQgPyBgIyR7cHJpbWFyeUNsYWltSWR9YCA6ICcnKSArIChwcmltYXJ5Q2xhaW1TZXF1ZW5jZSA/IGA6JHtwcmltYXJ5Q2xhaW1TZXF1ZW5jZX1gIDogJycpICsgKHByaW1hcnlCaWRQb3NpdGlvbiA/IGAke3ByaW1hcnlCaWRQb3NpdGlvbn1gIDogJycpICsgKHNlY29uZGFyeUNsYWltTmFtZSA/IGAvJHtzZWNvbmRhcnlDbGFpbU5hbWV9YCA6ICcnKSArIChzZWNvbmRhcnlDbGFpbUlkID8gYCMke3NlY29uZGFyeUNsYWltSWR9YCA6ICcnKSArIChzZWNvbmRhcnlDbGFpbVNlcXVlbmNlID8gYDoke3NlY29uZGFyeUNsYWltU2VxdWVuY2V9YCA6ICcnKSArIChzZWNvbmRhcnlCaWRQb3NpdGlvbiA/IGAke3NlY29uZGFyeUJpZFBvc2l0aW9ufWAgOiAnJyk7XG59XG5cbi8qIFRha2VzIGEgcGFyc2VhYmxlIExCUlkgVVJMIGFuZCBjb252ZXJ0cyBpdCB0byBzdGFuZGFyZCwgY2Fub25pY2FsIGZvcm1hdCAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVVJJKFVSTCkge1xuICBjb25zdCB7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uXG4gIH0gPSBwYXJzZVVSSShVUkwpO1xuXG4gIHJldHVybiBidWlsZFVSSSh7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1VSSVZhbGlkKFVSTCkge1xuICB0cnkge1xuICAgIHBhcnNlVVJJKG5vcm1hbGl6ZVVSSShVUkwpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lVmFsaWQoY2xhaW1OYW1lKSB7XG4gIHJldHVybiAhcmVnZXhJbnZhbGlkVVJJLnRlc3QoY2xhaW1OYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNVUklDbGFpbWFibGUoVVJMKSB7XG4gIGxldCBwYXJ0cztcbiAgdHJ5IHtcbiAgICBwYXJ0cyA9IHBhcnNlVVJJKG5vcm1hbGl6ZVVSSShVUkwpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcGFydHMgJiYgcGFydHMuc3RyZWFtTmFtZSAmJiAhcGFydHMuc3RyZWFtQ2xhaW1JZCAmJiAhcGFydHMuaXNDaGFubmVsO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9TaGFyZUxpbmsoVVJMKSB7XG4gIGNvbnN0IHtcbiAgICBzdHJlYW1OYW1lLFxuICAgIHN0cmVhbUNsYWltSWQsXG4gICAgY2hhbm5lbE5hbWUsXG4gICAgY2hhbm5lbENsYWltSWQsXG4gICAgcHJpbWFyeUJpZFBvc2l0aW9uLFxuICAgIHByaW1hcnlDbGFpbVNlcXVlbmNlLFxuICAgIHNlY29uZGFyeUJpZFBvc2l0aW9uLFxuICAgIHNlY29uZGFyeUNsYWltU2VxdWVuY2VcbiAgfSA9IHBhcnNlVVJJKFVSTCk7XG4gIHJldHVybiBidWlsZFVSSSh7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBzdHJlYW1DbGFpbUlkLFxuICAgIGNoYW5uZWxOYW1lLFxuICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgIHByaW1hcnlCaWRQb3NpdGlvbixcbiAgICBwcmltYXJ5Q2xhaW1TZXF1ZW5jZSxcbiAgICBzZWNvbmRhcnlCaWRQb3NpdGlvbixcbiAgICBzZWNvbmRhcnlDbGFpbVNlcXVlbmNlXG4gIH0sIHRydWUsICdodHRwczovL29wZW4ubGJyeS5jb20vJyk7XG59XG5cbnZhciBfZXh0ZW5kcyQxID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3Qgc2VsZWN0U3RhdGUgPSBzdGF0ZSA9PiBzdGF0ZS5zZWFyY2g7XG5cbmNvbnN0IHNlbGVjdFNlYXJjaFZhbHVlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnNlYXJjaFF1ZXJ5KTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoT3B0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5vcHRpb25zKTtcblxuY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUuc3VnZ2VzdGlvbnMpO1xuXG5jb25zdCBzZWxlY3RJc1NlYXJjaGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5zZWFyY2hpbmcpO1xuXG5jb25zdCBzZWxlY3RTZWFyY2hVcmlzQnlRdWVyeSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS51cmlzQnlRdWVyeSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RTZWFyY2hVcmlzID0gcXVlcnkgPT5cbi8vIHJlcGxhY2Ugc3RhdGVtZW50IGJlbG93IGlzIGtpbmQgb2YgdWdseSwgYW5kIHJlcGVhdGVkIGluIGRvU2VhcmNoIGFjdGlvblxucmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U2VhcmNoVXJpc0J5UXVlcnksIGJ5UXVlcnkgPT4gYnlRdWVyeVtxdWVyeSA/IHF1ZXJ5LnJlcGxhY2UoL15sYnJ5OlxcL1xcLy9pLCAnJykucmVwbGFjZSgvXFwvLywgJyAnKSA6IHF1ZXJ5XSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUucmVzb2x2ZWRSZXN1bHRzQnlRdWVyeSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUucmVzb2x2ZWRSZXN1bHRzQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHMgPSBxdWVyeSA9PlxuLy8gcmVwbGFjZSBzdGF0ZW1lbnQgYmVsb3cgaXMga2luZCBvZiB1Z2x5LCBhbmQgcmVwZWF0ZWQgaW4gZG9TZWFyY2ggYWN0aW9uXG5yZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNCeVF1ZXJ5LCBieVF1ZXJ5ID0+IGJ5UXVlcnlbcXVlcnkgPyBxdWVyeS5yZXBsYWNlKC9ebGJyeTpcXC9cXC8vaSwgJycpLnJlcGxhY2UoL1xcLy8sICcgJykgOiBxdWVyeV0pO1xuXG5jb25zdCBtYWtlU2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzTGFzdFBhZ2VSZWFjaGVkID0gcXVlcnkgPT5cbi8vIHJlcGxhY2Ugc3RhdGVtZW50IGJlbG93IGlzIGtpbmQgb2YgdWdseSwgYW5kIHJlcGVhdGVkIGluIGRvU2VhcmNoIGFjdGlvblxucmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCwgYnlRdWVyeSA9PiBieVF1ZXJ5W3F1ZXJ5ID8gcXVlcnkucmVwbGFjZSgvXmxicnk6XFwvXFwvL2ksICcnKS5yZXBsYWNlKC9cXC8vLCAnICcpIDogcXVlcnldKTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoQmFyRm9jdXNlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5mb2N1c2VkKTtcblxuY29uc3Qgc2VsZWN0U2VhcmNoU3VnZ2VzdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTZWFyY2hWYWx1ZSwgc2VsZWN0U3VnZ2VzdGlvbnMsIChxdWVyeSwgc3VnZ2VzdGlvbnMpID0+IHtcbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBxdWVyeUlzUHJlZml4ID0gcXVlcnkgPT09ICdsYnJ5OicgfHwgcXVlcnkgPT09ICdsYnJ5Oi8nIHx8IHF1ZXJ5ID09PSAnbGJyeTovLycgfHwgcXVlcnkgPT09ICdsYnJ5Oi8vQCc7XG5cbiAgaWYgKHF1ZXJ5SXNQcmVmaXgpIHtcbiAgICAvLyBJZiBpdCBpcyBhIHByZWZpeCwgd2FpdCB1bnRpbCBzb21ldGhpbmcgZWxzZSBjb21lcyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG9cbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSBpZiAocXVlcnkuc3RhcnRzV2l0aCgnbGJyeTovLycpKSB7XG4gICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggYSBwcmVmaXgsIGRvbid0IHNob3cgYW55IGF1dG9jb21wbGV0ZSByZXN1bHRzXG4gICAgLy8gVGhleSBhcmUgcHJvYmFibHkgdHlwaW5nL3Bhc3RpbmcgaW4gYSBsYnJ5IHVyaVxuICAgIHJldHVybiBbe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogcXVlcnlbN10gPT09ICdAJyA/IFNFQVJDSF9UWVBFUy5DSEFOTkVMIDogU0VBUkNIX1RZUEVTLkZJTEVcbiAgICB9XTtcbiAgfVxuXG4gIGxldCBzZWFyY2hTdWdnZXN0aW9ucyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHVyaSA9IG5vcm1hbGl6ZVVSSShxdWVyeSk7XG4gICAgY29uc3QgeyBjaGFubmVsTmFtZSwgc3RyZWFtTmFtZSwgaXNDaGFubmVsIH0gPSBwYXJzZVVSSSh1cmkpO1xuICAgIHNlYXJjaFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogU0VBUkNIX1RZUEVTLlNFQVJDSFxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiB1cmksXG4gICAgICBzaG9ydGhhbmQ6IGlzQ2hhbm5lbCA/IGNoYW5uZWxOYW1lIDogc3RyZWFtTmFtZSxcbiAgICAgIHR5cGU6IGlzQ2hhbm5lbCA/IFNFQVJDSF9UWVBFUy5DSEFOTkVMIDogU0VBUkNIX1RZUEVTLkZJTEVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNlYXJjaFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgdmFsdWU6IHF1ZXJ5LFxuICAgICAgdHlwZTogU0VBUkNIX1RZUEVTLlNFQVJDSFxuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgdmFsdWU6IHF1ZXJ5LFxuICAgIHR5cGU6IFNFQVJDSF9UWVBFUy5UQUdcbiAgfSk7XG5cbiAgY29uc3QgYXBpU3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1txdWVyeV0gfHwgW107XG4gIGlmIChhcGlTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICBzZWFyY2hTdWdnZXN0aW9ucyA9IHNlYXJjaFN1Z2dlc3Rpb25zLmNvbmNhdChhcGlTdWdnZXN0aW9ucy5maWx0ZXIoc3VnZ2VzdGlvbiA9PiBzdWdnZXN0aW9uICE9PSBxdWVyeSkubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgLy8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBjaGFubmVsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmkgPSBub3JtYWxpemVVUkkoc3VnZ2VzdGlvbik7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbE5hbWUsIHN0cmVhbU5hbWUsIGlzQ2hhbm5lbCB9ID0gcGFyc2VVUkkodXJpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB1cmksXG4gICAgICAgICAgc2hvcnRoYW5kOiBpc0NoYW5uZWwgPyBjaGFubmVsTmFtZSA6IHN0cmVhbU5hbWUsXG4gICAgICAgICAgdHlwZTogaXNDaGFubmVsID8gU0VBUkNIX1RZUEVTLkNIQU5ORUwgOiBTRUFSQ0hfVFlQRVMuRklMRVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBzZWFyY2ggcmVzdWx0IGluY2x1ZGVzIHNvbWUgY2hhcmFjdGVyIHRoYXQgaXNuJ3QgdmFsaWQgaW4gY2xhaW0gbmFtZXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogc3VnZ2VzdGlvbixcbiAgICAgICAgICB0eXBlOiBTRUFSQ0hfVFlQRVMuU0VBUkNIXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaFN1Z2dlc3Rpb25zO1xufSk7XG5cbi8vIENyZWF0ZXMgYSBxdWVyeSBzdHJpbmcgYmFzZWQgb24gdGhlIHN0YXRlIGluIHRoZSBzZWFyY2ggcmVkdWNlclxuLy8gQ2FuIGJlIG92ZXJyaWRlZCBieSBwYXNzaW5nIGluIGN1c3RvbSBzaXplcy9mcm9tIHZhbHVlcyBmb3Igb3RoZXIgYXJlYXMgcGFnaW5hdGlvblxuXG5cbmNvbnN0IG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zID0gKGN1c3RvbVF1ZXJ5LCBvcHRpb25zKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTZWFyY2hWYWx1ZSwgc2VsZWN0U2VhcmNoT3B0aW9ucywgKHF1ZXJ5LCBkZWZhdWx0T3B0aW9ucykgPT4ge1xuICBjb25zdCBzZWFyY2hPcHRpb25zID0gX2V4dGVuZHMkMSh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IGdldFNlYXJjaFF1ZXJ5U3RyaW5nKGN1c3RvbVF1ZXJ5IHx8IHF1ZXJ5LCBzZWFyY2hPcHRpb25zKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIHVuZGVyc2NvcmUncyBkZWVwIGVxdWFsIGZ1bmN0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvdW5kZXJzY29yZS5qcyNMMTE4OVxuXG5mdW5jdGlvbiBpc0VxdWFsKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gIH1cblxuICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICBpZiAoIWFyZUFycmF5cykge1xuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLFxuICAgICAgICBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKHR5cGVvZiBhQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmIHR5cGVvZiBiQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKSAmJiAnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucHVzaChhKTtcbiAgYlN0YWNrLnB1c2goYik7XG5cbiAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gIGlmIChhcmVBcnJheXMpIHtcbiAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGEpLFxuICAgICAgICBrZXk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBpc0VxdWFsKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucG9wKCk7XG4gIGJTdGFjay5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwYXRoKTtcbn1cbi8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIF9leHRlbmRzJDIgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBleHRyYWN0VXNlclN0YXRlKHJhd09iaikge1xuICBpZiAocmF3T2JqICYmIHJhd09iai52ZXJzaW9uID09PSAnMC4xJyAmJiByYXdPYmoudmFsdWUpIHtcbiAgICBjb25zdCB7IHN1YnNjcmlwdGlvbnMsIHRhZ3MsIGJsb2NrZWQsIHNldHRpbmdzIH0gPSByYXdPYmoudmFsdWU7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkMih7fSwgc3Vic2NyaXB0aW9ucyA/IHsgc3Vic2NyaXB0aW9ucyB9IDoge30sIHRhZ3MgPyB7IHRhZ3MgfSA6IHt9LCBibG9ja2VkID8geyBibG9ja2VkIH0gOiB7fSwgc2V0dGluZ3MgPyB7IHNldHRpbmdzIH0gOiB7fSk7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGRvUG9wdWxhdGVTaGFyZWRVc2VyU3RhdGUoc2hhcmVkU2V0dGluZ3MpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBjb25zdCB7IHN1YnNjcmlwdGlvbnMsIHRhZ3MsIGJsb2NrZWQsIHNldHRpbmdzIH0gPSBleHRyYWN0VXNlclN0YXRlKHNoYXJlZFNldHRpbmdzKTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1NUQVRFX1BPUFVMQVRFLFxuICAgICAgZGF0YTogeyBzdWJzY3JpcHRpb25zLCB0YWdzLCBibG9ja2VkLCBzZXR0aW5ncyB9XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvUHJlZmVyZW5jZVNldChrZXksIHZhbHVlLCB2ZXJzaW9uLCBzdWNjZXNzLCBmYWlsKSB7XG4gIGNvbnN0IHByZWZlcmVuY2UgPSB7XG4gICAgdHlwZTogdHlwZW9mIHZhbHVlLFxuICAgIHZlcnNpb24sXG4gICAgdmFsdWVcbiAgfTtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtleSxcbiAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkocHJlZmVyZW5jZSlcbiAgfTtcblxuICBsYnJ5UHJveHkucHJlZmVyZW5jZV9zZXQob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgc3VjY2VzcyhwcmVmZXJlbmNlKTtcbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIGlmIChmYWlsKSB7XG4gICAgICBmYWlsKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZG9QcmVmZXJlbmNlR2V0KGtleSwgc3VjY2VzcywgZmFpbCkge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtleVxuICB9O1xuXG4gIGxicnlQcm94eS5wcmVmZXJlbmNlX2dldChvcHRpb25zKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgcHJlZmVyZW5jZSA9IHJlc3VsdFtrZXldO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3MocHJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3MobnVsbCk7XG4gIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgaWYgKGZhaWwpIHtcbiAgICAgIGZhaWwoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyAgICAgIFxuXG5jb25zdCBTSEFSRURfUFJFRkVSRU5DRV9LRVkgPSAnc2hhcmVkJztcbmNvbnN0IFNIQVJFRF9QUkVGRVJFTkNFX1ZFUlNJT04gPSAnMC4xJztcbmxldCBvbGRTaGFyZWQgPSB7fTtcblxuY29uc3QgYnVpbGRTaGFyZWRTdGF0ZU1pZGRsZXdhcmUgPSAoYWN0aW9ucywgc2hhcmVkU3RhdGVGaWx0ZXJzLCBzaGFyZWRTdGF0ZUNiKSA9PiAoeyBnZXRTdGF0ZSwgZGlzcGF0Y2ggfSkgPT4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICBjb25zdCBjdXJyZW50U3RhdGUgPSBnZXRTdGF0ZSgpO1xuXG4gIC8vIFdlIGRvbid0IGNhcmUgaWYgc3luYyBpcyBkaXNhYmxlZCBoZXJlLCB3ZSBhbHdheXMgd2FudCB0byBiYWNrdXAgcHJlZmVyZW5jZXMgdG8gdGhlIHdhbGxldFxuICBpZiAoIWFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKSB7XG4gICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvblJlc3VsdCA9IG5leHQoYWN0aW9uKTtcbiAgLy8gQ2FsbCBgZ2V0U3RhdGVgIGFmdGVyIGNhbGxpbmcgYG5leHRgIHRvIGVuc3VyZSB0aGUgc3RhdGUgaGFzIHVwZGF0ZWQgaW4gcmVzcG9uc2UgdG8gdGhlIGFjdGlvblxuICBjb25zdCBuZXh0U3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBzaGFyZWQgPSB7fTtcblxuICBPYmplY3Qua2V5cyhzaGFyZWRTdGF0ZUZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzaGFyZWRTdGF0ZUZpbHRlcnNba2V5XTtcbiAgICBjb25zdCB7IHNvdXJjZSwgcHJvcGVydHksIHRyYW5zZm9ybSB9ID0gZmlsdGVyO1xuICAgIGxldCB2YWx1ZSA9IG5leHRTdGF0ZVtzb3VyY2VdW3Byb3BlcnR5XTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2hhcmVkW2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgaWYgKCFpc0VxdWFsKG9sZFNoYXJlZCwgc2hhcmVkKSkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGlmIHRoZSBwcmVmZXJlbmNlIGNoYW5nZWQgZnJvbSBsYXN0IGNhbGwgaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgIG9sZFNoYXJlZCA9IHNoYXJlZDtcbiAgICBkb1ByZWZlcmVuY2VTZXQoU0hBUkVEX1BSRUZFUkVOQ0VfS0VZLCBzaGFyZWQsIFNIQVJFRF9QUkVGRVJFTkNFX1ZFUlNJT04pO1xuICB9XG5cbiAgaWYgKHNoYXJlZFN0YXRlQ2IpIHtcbiAgICAvLyBQYXNzIGRpc3BhdGNoIHRvIHRoZSBjYWxsYmFjayB0byBjb25zdW1lcnMgY2FuIGRpc3BhdGNoIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gcHJlZmVyZW5jZSBzZXRcbiAgICBzaGFyZWRTdGF0ZUNiKHsgZGlzcGF0Y2gsIGdldFN0YXRlIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvblJlc3VsdDtcbn07XG5cbi8vICAgICAgXG5cbmZ1bmN0aW9uIGRvVG9hc3QocGFyYW1zKSB7XG4gIGlmICghcGFyYW1zKSB7XG4gICAgdGhyb3cgRXJyb3IoXCIncGFyYW1zJyBvYmplY3QgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgdG9hc3Qgbm90aWZpY2F0aW9uXCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBDUkVBVEVfVE9BU1QsXG4gICAgZGF0YToge1xuICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgIHBhcmFtc1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9EaXNtaXNzVG9hc3QoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRElTTUlTU19UT0FTVFxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0Vycm9yKGVycm9yKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQ1JFQVRFX0VSUk9SLFxuICAgIGRhdGE6IHtcbiAgICAgIGVycm9yXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkb0Rpc21pc3NFcnJvcigpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBESVNNSVNTX0VSUk9SXG4gIH07XG59XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDEgPSBzdGF0ZSA9PiBzdGF0ZS53YWxsZXQgfHwge307XG5cbmNvbnN0IHNlbGVjdFdhbGxldFN0YXRlID0gc2VsZWN0U3RhdGUkMTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0SXNFbmNyeXB0ZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRJc0VuY3J5cHRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldEVuY3J5cHRQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0RW5jcnlwdFBlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRFbmNyeXB0U3VjY2VlZGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0RW5jcnlwdFN1Y2NlZGVkKTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0RW5jcnlwdFJlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldEVuY3J5cHRSZXN1bHQpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXREZWNyeXB0UGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldERlY3J5cHRQZW5kaW5nKTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0RGVjcnlwdFN1Y2NlZWRlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldERlY3J5cHRTdWNjZWRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldERlY3J5cHRSZXN1bHQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXREZWNyeXB0UmVzdWx0KTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0VW5sb2NrUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldFVubG9ja1BlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRVbmxvY2tTdWNjZWVkZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRVbmxvY2tTdWNjZWRlZCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldFVubG9ja1Jlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldFVubG9ja1Jlc3VsdCk7XG5cbmNvbnN0IHNlbGVjdFdhbGxldExvY2tQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0TG9ja1BlbmRpbmcpO1xuXG5jb25zdCBzZWxlY3RXYWxsZXRMb2NrU3VjY2VlZGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUud2FsbGV0TG9ja1N1Y2NlZGVkKTtcblxuY29uc3Qgc2VsZWN0V2FsbGV0TG9ja1Jlc3VsdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLndhbGxldExvY2tSZXN1bHQpO1xuXG5jb25zdCBzZWxlY3RCYWxhbmNlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUuYmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFRvdGFsQmFsYW5jZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnRvdGFsQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFJlc2VydmVkQmFsYW5jZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLnJlc2VydmVkQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdENsYWltc0JhbGFuY2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5jbGFpbXNCYWxhbmNlKTtcblxuY29uc3Qgc2VsZWN0U3VwcG9ydHNCYWxhbmNlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUuc3VwcG9ydHNCYWxhbmNlKTtcblxuY29uc3Qgc2VsZWN0VGlwc0JhbGFuY2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50aXBzQmFsYW5jZSk7XG5cbmNvbnN0IHNlbGVjdFRyYW5zYWN0aW9uc0J5SWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50cmFuc2FjdGlvbnMgfHwge30pO1xuXG5jb25zdCBzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5zdXBwb3J0cyB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdFRvdGFsU3VwcG9ydHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQsIGJ5T3V0cG9pbnQgPT4ge1xuICBsZXQgdG90YWwgPSBwYXJzZUZsb2F0KCcwLjAnKTtcblxuICBPYmplY3QudmFsdWVzKGJ5T3V0cG9pbnQpLmZvckVhY2goc3VwcG9ydCA9PiB7XG4gICAgY29uc3QgeyBhbW91bnQgfSA9IHN1cHBvcnQ7XG4gICAgdG90YWwgPSBhbW91bnQgPyB0b3RhbCArIHBhcnNlRmxvYXQoYW1vdW50KSA6IHRvdGFsO1xuICB9KTtcblxuICByZXR1cm4gdG90YWw7XG59KTtcblxuY29uc3Qgc2VsZWN0VHJhbnNhY3Rpb25JdGVtcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uc0J5SWQsIGJ5SWQgPT4ge1xuICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gIE9iamVjdC5rZXlzKGJ5SWQpLmZvckVhY2godHhpZCA9PiB7XG4gICAgY29uc3QgdHggPSBieUlkW3R4aWRdO1xuXG4gICAgLy8gaWdub3JlIGR1c3QvZmVlc1xuICAgIC8vIGl0IGlzIGZlZSBvbmx5IHR4biBpZiBhbGwgaW5mb3MgYXJlIGFsc28gZW1wdHlcbiAgICBpZiAoTWF0aC5hYnModHgudmFsdWUpID09PSBNYXRoLmFicyh0eC5mZWUpICYmIHR4LmNsYWltX2luZm8ubGVuZ3RoID09PSAwICYmIHR4LnN1cHBvcnRfaW5mby5sZW5ndGggPT09IDAgJiYgdHgudXBkYXRlX2luZm8ubGVuZ3RoID09PSAwICYmIHR4LmFiYW5kb25faW5mby5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBlbmQgPSBbXTtcblxuICAgIGFwcGVuZC5wdXNoKC4uLnR4LmNsYWltX2luZm8ubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgdHgsIGl0ZW0sIHtcbiAgICAgIHR5cGU6IGl0ZW0uY2xhaW1fbmFtZVswXSA9PT0gJ0AnID8gQ0hBTk5FTCQxIDogUFVCTElTSCQxXG4gICAgfSkpKTtcbiAgICBhcHBlbmQucHVzaCguLi50eC5zdXBwb3J0X2luZm8ubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgdHgsIGl0ZW0sIHtcbiAgICAgIHR5cGU6ICFpdGVtLmlzX3RpcCA/IFNVUFBPUlQgOiBUSVBcbiAgICB9KSkpO1xuICAgIGFwcGVuZC5wdXNoKC4uLnR4LnVwZGF0ZV9pbmZvLm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oe30sIHR4LCBpdGVtLCB7IHR5cGU6IFVQREFURSB9KSkpO1xuICAgIGFwcGVuZC5wdXNoKC4uLnR4LmFiYW5kb25faW5mby5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHt9LCB0eCwgaXRlbSwgeyB0eXBlOiBBQkFORE9OIH0pKSk7XG5cbiAgICBpZiAoIWFwcGVuZC5sZW5ndGgpIHtcbiAgICAgIGFwcGVuZC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIHR4LCB7XG4gICAgICAgIHR5cGU6IHR4LnZhbHVlIDwgMCA/IFNQRU5EIDogUkVDRUlWRVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGl0ZW1zLnB1c2goLi4uYXBwZW5kLm1hcChpdGVtID0+IHtcbiAgICAgIC8vIHZhbHVlIG9uIHRyYW5zYWN0aW9uLCBhbW91bnQgb24gb3V0cG9pbnRcbiAgICAgIC8vIGFtb3VudCBpcyBhbHdheXMgcG9zaXRpdmUsIGJ1dCBzaG91bGQgbWF0Y2ggc2lnbiBvZiB2YWx1ZVxuICAgICAgY29uc3QgYmFsYW5jZURlbHRhID0gcGFyc2VGbG9hdChpdGVtLmJhbGFuY2VfZGVsdGEpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGl0ZW0udmFsdWUpO1xuICAgICAgY29uc3QgYW1vdW50ID0gYmFsYW5jZURlbHRhIHx8IHZhbHVlO1xuICAgICAgY29uc3QgZmVlID0gcGFyc2VGbG9hdCh0eC5mZWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eGlkLFxuICAgICAgICB0aW1lc3RhbXA6IHR4LnRpbWVzdGFtcCxcbiAgICAgICAgZGF0ZTogdHgudGltZXN0YW1wID8gbmV3IERhdGUoTnVtYmVyKHR4LnRpbWVzdGFtcCkgKiAxMDAwKSA6IG51bGwsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgZmVlLFxuICAgICAgICBjbGFpbV9pZDogaXRlbS5jbGFpbV9pZCxcbiAgICAgICAgY2xhaW1fbmFtZTogaXRlbS5jbGFpbV9uYW1lLFxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUgfHwgU1BFTkQsXG4gICAgICAgIG5vdXQ6IGl0ZW0ubm91dCxcbiAgICAgICAgY29uZmlybWF0aW9uczogdHguY29uZmlybWF0aW9uc1xuICAgICAgfTtcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJldHVybiBpdGVtcy5zb3J0KCh0eDEsIHR4MikgPT4ge1xuICAgIGlmICghdHgxLnRpbWVzdGFtcCAmJiAhdHgyLnRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmICghdHgxLnRpbWVzdGFtcCAmJiB0eDIudGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmICh0eDEudGltZXN0YW1wICYmICF0eDIudGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHgyLnRpbWVzdGFtcCAtIHR4MS50aW1lc3RhbXA7XG4gIH0pO1xufSk7XG5cbmNvbnN0IHNlbGVjdFJlY2VudFRyYW5zYWN0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMsIHRyYW5zYWN0aW9ucyA9PiB7XG4gIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKCk7XG4gIHRocmVzaG9sZC5zZXREYXRlKHRocmVzaG9sZC5nZXREYXRlKCkgLSA3KTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9ucy5maWx0ZXIodHJhbnNhY3Rpb24gPT4ge1xuICAgIGlmICghdHJhbnNhY3Rpb24uZGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIHBlbmRpbmcgdHJhbnNhY3Rpb25cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uZGF0ZSA+IHRocmVzaG9sZDtcbiAgfSk7XG59KTtcblxuY29uc3Qgc2VsZWN0SGFzVHJhbnNhY3Rpb25zID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VHJhbnNhY3Rpb25JdGVtcywgdHJhbnNhY3Rpb25zID0+IHRyYW5zYWN0aW9ucyAmJiB0cmFuc2FjdGlvbnMubGVuZ3RoID4gMCk7XG5cbmNvbnN0IHNlbGVjdElzRmV0Y2hpbmdUcmFuc2FjdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ1RyYW5zYWN0aW9ucyk7XG5cbmNvbnN0IHNlbGVjdElzU2VuZGluZ1N1cHBvcnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5zZW5kaW5nU3VwcG9ydCk7XG5cbmNvbnN0IHNlbGVjdFJlY2VpdmVBZGRyZXNzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUucmVjZWl2ZUFkZHJlc3MpO1xuXG5jb25zdCBzZWxlY3RHZXR0aW5nTmV3QWRkcmVzcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmdldHRpbmdOZXdBZGRyZXNzKTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmRyYWZ0VHJhbnNhY3Rpb24gfHwge30pO1xuXG5jb25zdCBzZWxlY3REcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiwgZHJhZnQgPT4gZHJhZnQuYW1vdW50KTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkFkZHJlc3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3REcmFmdFRyYW5zYWN0aW9uLCBkcmFmdCA9PiBkcmFmdC5hZGRyZXNzKTtcblxuY29uc3Qgc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RHJhZnRUcmFuc2FjdGlvbiwgZHJhZnQgPT4gZHJhZnQuZXJyb3IpO1xuXG5jb25zdCBzZWxlY3RCbG9ja3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5ibG9ja3MpO1xuXG5jb25zdCBzZWxlY3RDdXJyZW50SGVpZ2h0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUubGF0ZXN0QmxvY2spO1xuXG5jb25zdCBzZWxlY3RUcmFuc2FjdGlvbkxpc3RGaWx0ZXIgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS50cmFuc2FjdGlvbkxpc3RGaWx0ZXIgfHwgJycpO1xuXG5jb25zdCBzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFRyYW5zYWN0aW9uSXRlbXMsIHNlbGVjdFRyYW5zYWN0aW9uTGlzdEZpbHRlciwgKHRyYW5zYWN0aW9ucywgZmlsdGVyKSA9PiB7XG4gIHJldHVybiB0cmFuc2FjdGlvbnMuZmlsdGVyKHRyYW5zYWN0aW9uID0+IHtcbiAgICByZXR1cm4gZmlsdGVyID09PSBBTEwgfHwgZmlsdGVyID09PSB0cmFuc2FjdGlvbi50eXBlO1xuICB9KTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbnNGb3JQYWdlID0gKHBhZ2UgPSAxKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucywgZmlsdGVyZWRUcmFuc2FjdGlvbnMgPT4ge1xuICBjb25zdCBzdGFydCA9IChOdW1iZXIocGFnZSkgLSAxKSAqIE51bWJlcihQQUdFX1NJWkUkMSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihwYWdlKSAqIE51bWJlcihQQUdFX1NJWkUkMSk7XG4gIHJldHVybiBmaWx0ZXJlZFRyYW5zYWN0aW9ucyAmJiBmaWx0ZXJlZFRyYW5zYWN0aW9ucy5sZW5ndGggPyBmaWx0ZXJlZFRyYW5zYWN0aW9ucy5zbGljZShzdGFydCwgZW5kKSA6IFtdO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RMYXRlc3RUcmFuc2FjdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RUcmFuc2FjdGlvbkl0ZW1zLCB0cmFuc2FjdGlvbnMgPT4ge1xuICByZXR1cm4gdHJhbnNhY3Rpb25zICYmIHRyYW5zYWN0aW9ucy5sZW5ndGggPyB0cmFuc2FjdGlvbnMuc2xpY2UoMCwgTEFURVNUX1BBR0VfU0laRSkgOiBbXTtcbn0pO1xuXG5jb25zdCBzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9uQ291bnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucywgZmlsdGVyZWRUcmFuc2FjdGlvbnMgPT4gZmlsdGVyZWRUcmFuc2FjdGlvbnMubGVuZ3RoKTtcblxuY29uc3Qgc2VsZWN0SXNXYWxsZXRSZWNvbm5lY3RpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS53YWxsZXRSZWNvbm5lY3RpbmcpO1xuXG52YXIgX2V4dGVuZHMkMyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5jb25zdCBtYXR1cmVUYWdNYXAgPSBNQVRVUkVfVEFHUy5yZWR1Y2UoKGFjYywgdGFnKSA9PiBfZXh0ZW5kcyQzKHt9LCBhY2MsIHsgW3RhZ106IHRydWUgfSksIHt9KTtcblxuY29uc3QgaXNDbGFpbU5zZncgPSBjbGFpbSA9PiB7XG4gIGlmICghY2xhaW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNsYWltIHBhc3NlZCB0byBpc0NsYWltTnNmdygpJyk7XG4gIH1cblxuICBpZiAoIWNsYWltLnZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGFncyA9IGNsYWltLnZhbHVlLnRhZ3MgfHwgW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHRhZyA9IHRhZ3NbaV0udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobWF0dXJlVGFnTWFwW3RhZ10pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleShvcHRpb25zKSB7XG4gIC8vIElnbm9yZSBwYWdlIGJlY2F1c2Ugd2UgZG9uJ3QgY2FyZSB3aGF0IHRoZSBsYXN0IHBhZ2Ugc2VhcmNoZWQgd2FzLCB3ZSB3YW50IGV2ZXJ5dGhpbmdcbiAgLy8gSWdub3JlIHJlbGVhc2VfdGltZSBiZWNhdXNlIHRoYXQgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoZW4geW91IGNhbGwgY2xhaW1fc2VhcmNoIGV4OiByZWxlYXNlX3RpbWU6IFwiPjEyMzQ0NTY3XCJcbiAgY29uc3QgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyQxKG9wdGlvbnMsIFsncGFnZScsICdyZWxlYXNlX3RpbWUnXSk7XG4gIGNvbnN0IHF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkocmVzdCk7XG4gIHJldHVybiBxdWVyeTtcbn1cblxuZnVuY3Rpb24gY29uY2F0Q2xhaW1zKGNsYWltTGlzdCA9IFtdLCBjb25jYXRDbGFpbUxpc3QgPSBbXSkge1xuICBpZiAoIWNsYWltTGlzdCB8fCBjbGFpbUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKCFjb25jYXRDbGFpbUxpc3QpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdENsYWltTGlzdC5zbGljZSgpO1xuICB9XG5cbiAgY29uc3QgY2xhaW1zID0gY2xhaW1MaXN0LnNsaWNlKCk7XG4gIGNvbmNhdENsYWltTGlzdC5mb3JFYWNoKGNsYWltID0+IHtcbiAgICBpZiAoIWNsYWltcy5zb21lKGl0ZW0gPT4gaXRlbS5jbGFpbV9pZCA9PT0gY2xhaW0uY2xhaW1faWQpKSB7XG4gICAgICBjbGFpbXMucHVzaChjbGFpbSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2xhaW1zO1xufVxuXG52YXIgX2V4dGVuZHMkNCA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5jb25zdCBzZWxlY3RTdGF0ZSQyID0gc3RhdGUgPT4gc3RhdGUuY2xhaW1zIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RDbGFpbXNCeUlkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuYnlJZCB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdEN1cnJlbnRDaGFubmVsUGFnZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmN1cnJlbnRDaGFubmVsUGFnZSB8fCAxKTtcblxuY29uc3Qgc2VsZWN0Q3JlYXRpbmdDaGFubmVsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuY3JlYXRpbmdDaGFubmVsKTtcblxuY29uc3Qgc2VsZWN0Q3JlYXRlQ2hhbm5lbEVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuY3JlYXRlQ2hhbm5lbEVycm9yKTtcblxuY29uc3Qgc2VsZWN0Q2xhaW1zQnlVcmkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzZWxlY3RDbGFpbXNCeUlkLCAoc3RhdGUsIGJ5SWQpID0+IHtcbiAgY29uc3QgYnlVcmkgPSBzdGF0ZS5jbGFpbXNCeVVyaSB8fCB7fTtcbiAgY29uc3QgY2xhaW1zID0ge307XG5cbiAgT2JqZWN0LmtleXMoYnlVcmkpLmZvckVhY2godXJpID0+IHtcbiAgICBjb25zdCBjbGFpbUlkID0gYnlVcmlbdXJpXTtcblxuICAgIC8vIE5PVEUgcmV0dXJuaW5nIGEgbnVsbCBjbGFpbSBhbGxvd3MgdXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFuXG4gICAgLy8gdW5kZWZpbmVkIChuZXZlciBmZXRjaGVkIGNsYWltKSBhbmQgb25lIHdoaWNoIGp1c3QgZG9lc24ndCBleGlzdC4gTm90XG4gICAgLy8gdGhlIGNsZWFuZXN0IHNvbHV0aW9uIGJ1dCBjb3VsZG4ndCB0aGluayBvZiBhbnl0aGluZyBiZXR0ZXIgcmlnaHQgbm93XG4gICAgaWYgKGNsYWltSWQgPT09IG51bGwpIHtcbiAgICAgIGNsYWltc1t1cmldID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhaW1zW3VyaV0gPSBieUlkW2NsYWltSWRdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNsYWltcztcbn0pO1xuXG5jb25zdCBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5wYWdpbmF0ZWRDbGFpbXNCeUNoYW5uZWwgfHwge30pO1xuXG5jb25zdCBzZWxlY3RQZW5kaW5nQnlJZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBlbmRpbmdCeUlkIHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0UGVuZGluZ0NsYWltcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IE9iamVjdC52YWx1ZXMoc3RhdGUucGVuZGluZ0J5SWQgfHwgW10pKTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltSXNQZW5kaW5nID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFBlbmRpbmdCeUlkLCBwZW5kaW5nQnlJZCA9PiB7XG4gIGxldCBjbGFpbUlkO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBpc0NoYW5uZWwsIGNoYW5uZWxDbGFpbUlkLCBzdHJlYW1DbGFpbUlkIH0gPSBwYXJzZVVSSSh1cmkpO1xuICAgIGNsYWltSWQgPSBpc0NoYW5uZWwgPyBjaGFubmVsQ2xhaW1JZCA6IHN0cmVhbUNsYWltSWQ7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgaWYgKGNsYWltSWQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihwZW5kaW5nQnlJZFtjbGFpbUlkXSk7XG4gIH1cbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0UGVuZGluZ0J5VXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFBlbmRpbmdCeUlkLCBwZW5kaW5nQnlJZCA9PiB7XG4gIGNvbnN0IHsgaXNDaGFubmVsLCBjaGFubmVsQ2xhaW1JZCwgc3RyZWFtQ2xhaW1JZCB9ID0gcGFyc2VVUkkodXJpKTtcbiAgY29uc3QgY2xhaW1JZCA9IGlzQ2hhbm5lbCA/IGNoYW5uZWxDbGFpbUlkIDogc3RyZWFtQ2xhaW1JZDtcbiAgcmV0dXJuIHBlbmRpbmdCeUlkW2NsYWltSWRdO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbUZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeVVyaSwgc2VsZWN0UGVuZGluZ0J5SWQsIChieVVyaSwgcGVuZGluZ0J5SWQpID0+IHtcbiAgLy8gQ2hlY2sgaWYgYSBjbGFpbSBpcyBwZW5kaW5nIGZpcnN0XG4gIC8vIEl0IHdvbid0IGJlIGluIGNsYWltc0J5VXJpIGJlY2F1c2UgcmVzb2x2aW5nIGl0IHdpbGwgcmV0dXJuIG5vdGhpbmdcblxuICBsZXQgdmFsaWQ7XG4gIGxldCBjaGFubmVsQ2xhaW1JZDtcbiAgbGV0IHN0cmVhbUNsYWltSWQ7XG4gIGxldCBpc0NoYW5uZWw7XG4gIHRyeSB7XG4gICAgKHsgaXNDaGFubmVsLCBjaGFubmVsQ2xhaW1JZCwgc3RyZWFtQ2xhaW1JZCB9ID0gcGFyc2VVUkkodXJpKSk7XG4gICAgdmFsaWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGlmICh2YWxpZCAmJiBieVVyaSkge1xuICAgIGNvbnN0IGNsYWltSWQgPSBpc0NoYW5uZWwgPyBjaGFubmVsQ2xhaW1JZCA6IHN0cmVhbUNsYWltSWQ7XG4gICAgY29uc3QgcGVuZGluZ0NsYWltID0gcGVuZGluZ0J5SWRbY2xhaW1JZF07XG5cbiAgICBpZiAocGVuZGluZ0NsYWltKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ0NsYWltO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltID0gYnlVcmlbbm9ybWFsaXplVVJJKHVyaSldO1xuICAgIGlmIChjbGFpbSA9PT0gdW5kZWZpbmVkIHx8IGNsYWltID09PSBudWxsKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIHRoZSBjbGFpbSBhcyBpcyBzbyBhcHBzIGNhbiBjaGVjayBpZiBpdCdzIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIChudWxsKSBvciBzdGlsbCBuZWVkcyB0byBiZSByZXNvbHZlZCAodW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGNsYWltO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9zdGVkQ2xhaW0gPSBjbGFpbS5yZXBvc3RlZF9jbGFpbTtcbiAgICBpZiAocmVwb3N0ZWRDbGFpbSkge1xuICAgICAgY29uc3QgY2hhbm5lbFVybCA9IGNsYWltLnNpZ25pbmdfY2hhbm5lbCAmJiBjbGFpbS5zaWduaW5nX2NoYW5uZWwuY2Fub25pY2FsX3VybDtcblxuICAgICAgcmV0dXJuIF9leHRlbmRzJDQoe30sIHJlcG9zdGVkQ2xhaW0sIHtcbiAgICAgICAgcmVwb3N0X2NoYW5uZWxfdXJsOiBjaGFubmVsVXJsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNsYWltO1xuICAgIH1cbiAgfVxufSk7XG5cbmNvbnN0IHNlbGVjdE15Q2xhaW1zUmF3ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUubXlDbGFpbXMpO1xuXG5jb25zdCBzZWxlY3RBYmFuZG9uaW5nSWRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gT2JqZWN0LmtleXMoc3RhdGUuYWJhbmRvbmluZ0J5SWQgfHwge30pKTtcblxuY29uc3Qgc2VsZWN0TXlBY3RpdmVDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1Jhdywgc2VsZWN0QWJhbmRvbmluZ0lkcywgKGNsYWltcywgYWJhbmRvbmluZ0lkcykgPT4gbmV3IFNldChjbGFpbXMgJiYgY2xhaW1zLm1hcChjbGFpbSA9PiBjbGFpbS5jbGFpbV9pZCkuZmlsdGVyKGNsYWltSWQgPT4gT2JqZWN0LmtleXMoYWJhbmRvbmluZ0lkcykuaW5kZXhPZihjbGFpbUlkKSA9PT0gLTEpKSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbUlzTWluZSA9IHJhd1VyaSA9PiB7XG4gIGxldCB1cmk7XG4gIHRyeSB7XG4gICAgdXJpID0gbm9ybWFsaXplVVJJKHJhd1VyaSk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgcmV0dXJuIHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltc0J5VXJpLCBzZWxlY3RNeUFjdGl2ZUNsYWltcywgKGNsYWltcywgbXlDbGFpbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VVUkkodXJpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYWltcyAmJiBjbGFpbXNbdXJpXSAmJiBjbGFpbXNbdXJpXS5jbGFpbV9pZCAmJiBteUNsYWltcy5oYXMoY2xhaW1zW3VyaV0uY2xhaW1faWQpO1xuICB9KTtcbn07XG5cbmNvbnN0IHNlbGVjdEFsbEZldGNoaW5nQ2hhbm5lbENsYWltcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nQ2hhbm5lbENsYWltcyB8fCB7fSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RGZXRjaGluZ0NoYW5uZWxDbGFpbXMgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0QWxsRmV0Y2hpbmdDaGFubmVsQ2xhaW1zLCBmZXRjaGluZyA9PiBmZXRjaGluZyAmJiBmZXRjaGluZ1t1cmldKTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltc0luQ2hhbm5lbEZvclBhZ2UgPSAodXJpLCBwYWdlKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeUlkLCBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwsIChieUlkLCBhbGxDbGFpbXMpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIGNvbnN0IGNsYWltSWRzID0gYnlDaGFubmVsW3BhZ2UgfHwgMV07XG5cbiAgaWYgKCFjbGFpbUlkcykgcmV0dXJuIGNsYWltSWRzO1xuXG4gIHJldHVybiBjbGFpbUlkcy5tYXAoY2xhaW1JZCA9PiBieUlkW2NsYWltSWRdKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxDbGFpbXNJbkNoYW5uZWxTZWFyY2ggPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLCAoYnlJZCwgYWxsQ2xhaW1zKSA9PiB7XG4gIGNvbnN0IGJ5Q2hhbm5lbCA9IGFsbENsYWltc1t1cmldIHx8IHt9O1xuICByZXR1cm4gYnlDaGFubmVsWydpdGVtQ291bnQnXTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeUlkLCBzZWxlY3RBbGxDbGFpbXNCeUNoYW5uZWwsIChieUlkLCBhbGxDbGFpbXMpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIHJldHVybiBieUNoYW5uZWxbJ3BhZ2VDb3VudCddO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDbGFpbXNJbkNoYW5uZWxGb3JDdXJyZW50UGFnZVN0YXRlID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltc0J5SWQsIHNlbGVjdEFsbENsYWltc0J5Q2hhbm5lbCwgc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlLCAoYnlJZCwgYWxsQ2xhaW1zLCBwYWdlKSA9PiB7XG4gIGNvbnN0IGJ5Q2hhbm5lbCA9IGFsbENsYWltc1t1cmldIHx8IHt9O1xuICBjb25zdCBjbGFpbUlkcyA9IGJ5Q2hhbm5lbFtwYWdlIHx8IDFdO1xuXG4gIGlmICghY2xhaW1JZHMpIHJldHVybiBjbGFpbUlkcztcblxuICByZXR1cm4gY2xhaW1JZHMubWFwKGNsYWltSWQgPT4gYnlJZFtjbGFpbUlkXSk7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdE1ldGFkYXRhRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY2xhaW0gJiYgY2xhaW0udmFsdWU7XG4gIHJldHVybiBtZXRhZGF0YSB8fCAoY2xhaW0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGwpO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkgPSAodXJpLCBrZXkpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSh1cmkpLCBtZXRhZGF0YSA9PiB7XG4gIHJldHVybiBtZXRhZGF0YSA/IG1ldGFkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFRpdGxlRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RNZXRhZGF0YUZvclVyaSh1cmkpLCBtZXRhZGF0YSA9PiBtZXRhZGF0YSAmJiBtZXRhZGF0YS50aXRsZSk7XG5cbmNvbnN0IG1ha2VTZWxlY3REYXRlRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNsYWltICYmIGNsYWltLnZhbHVlICYmIChjbGFpbS52YWx1ZS5yZWxlYXNlX3RpbWUgPyBjbGFpbS52YWx1ZS5yZWxlYXNlX3RpbWUgKiAxMDAwIDogY2xhaW0ubWV0YSAmJiBjbGFpbS5tZXRhLmNyZWF0aW9uX3RpbWVzdGFtcCA/IGNsYWltLm1ldGEuY3JlYXRpb25fdGltZXN0YW1wICogMTAwMCA6IG51bGwpO1xuICBpZiAoIXRpbWVzdGFtcCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gIHJldHVybiBkYXRlT2JqO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RBbW91bnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IHtcbiAgcmV0dXJuIGNsYWltICYmIGNsYWltLmFtb3VudDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0Q29udGVudFR5cGVGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIGNsYWltID0+IHtcbiAgY29uc3Qgc291cmNlID0gY2xhaW0gJiYgY2xhaW0udmFsdWUgJiYgY2xhaW0udmFsdWUuc291cmNlO1xuICByZXR1cm4gc291cmNlID8gc291cmNlLm1lZGlhX3R5cGUgOiB1bmRlZmluZWQ7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBjb25zdCB0aHVtYm5haWwgPSBjbGFpbSAmJiBjbGFpbS52YWx1ZSAmJiBjbGFpbS52YWx1ZS50aHVtYm5haWw7XG4gIHJldHVybiB0aHVtYm5haWwgJiYgdGh1bWJuYWlsLnVybCA/IHRodW1ibmFpbC51cmwudHJpbSgpIDogdW5kZWZpbmVkO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RDb3ZlckZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBjb25zdCBjb3ZlciA9IGNsYWltICYmIGNsYWltLnZhbHVlICYmIGNsYWltLnZhbHVlLmNvdmVyO1xuICByZXR1cm4gY292ZXIgJiYgY292ZXIudXJsID8gY292ZXIudXJsLnRyaW0oKSA6IHVuZGVmaW5lZDtcbn0pO1xuXG5jb25zdCBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmlzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUFjdGl2ZUNsYWltcywgc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWJhbmRvbmluZ0lkcywgc2VsZWN0UGVuZGluZ0NsYWltcywgKG15Q2xhaW1JZHMsIGJ5SWQsIGFiYW5kb25pbmdJZHMsIHBlbmRpbmdDbGFpbXMpID0+IHtcbiAgY29uc3QgY2xhaW1zID0gW107XG5cbiAgbXlDbGFpbUlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBjb25zdCBjbGFpbSA9IGJ5SWRbaWRdO1xuXG4gICAgaWYgKGNsYWltICYmIGFiYW5kb25pbmdJZHMuaW5kZXhPZihpZCkgPT09IC0xKSBjbGFpbXMucHVzaChjbGFpbSk7XG4gIH0pO1xuXG4gIHJldHVybiBbLi4uY2xhaW1zLCAuLi5wZW5kaW5nQ2xhaW1zXTtcbn0pO1xuXG5jb25zdCBzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdE15Q2xhaW1zLCBteUNsYWltcyA9PiBteUNsYWltcy5maWx0ZXIoY2xhaW0gPT4gIWNsYWltLm5hbWUubWF0Y2goL15ALykpLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wIC0gYi50aW1lc3RhbXApKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbVVyaXNXaXRob3V0Q2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscywgbXlDbGFpbXMgPT4gbXlDbGFpbXMuc29ydCgoYSwgYikgPT4ge1xuICBpZiAoIWEudGltZXN0YW1wKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKCFiLnRpbWVzdGFtcCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wO1xuICB9XG59KS5tYXAoY2xhaW0gPT4gYGxicnk6Ly8ke2NsYWltLm5hbWV9IyR7Y2xhaW0uY2xhaW1faWR9YCkpO1xuXG5jb25zdCBzZWxlY3RBbGxNeUNsYWltc0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltc1JhdywgY2xhaW1zID0+IG5ldyBTZXQoY2xhaW1zICYmIGNsYWltcy5sZW5ndGggPyBjbGFpbXMubWFwKGNsYWltID0+IGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gKSA6IG51bGwpKTtcblxuY29uc3Qgc2VsZWN0TXlDbGFpbXNPdXRwb2ludHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RNeUNsYWltcywgbXlDbGFpbXMgPT4ge1xuICBjb25zdCBvdXRwb2ludHMgPSBbXTtcblxuICBteUNsYWltcy5mb3JFYWNoKGNsYWltID0+IG91dHBvaW50cy5wdXNoKGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gKSk7XG5cbiAgcmV0dXJuIG91dHBvaW50cztcbn0pO1xuXG5jb25zdCBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ015Q2hhbm5lbHMpO1xuXG5jb25zdCBzZWxlY3RNeUNoYW5uZWxDbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzZWxlY3RDbGFpbXNCeUlkLCAoc3RhdGUsIGJ5SWQpID0+IHtcbiAgY29uc3QgaWRzID0gc3RhdGUubXlDaGFubmVsQ2xhaW1zO1xuICBpZiAoIWlkcykge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBjbGFpbXMgPSBbXTtcbiAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgIGlmIChieUlkW2lkXSkge1xuICAgICAgLy8gSSdtIG5vdCBzdXJlIHdoeSB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSwgYnV0IGl0IG91Z2h0IHRvIGJlIGEgcXVpY2sgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vbGJyeWlvL2xicnktZGVza3RvcC9pc3N1ZXMvNTQ0XG4gICAgICBjbGFpbXMucHVzaChieUlkW2lkXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2xhaW1zO1xufSk7XG5cbmNvbnN0IHNlbGVjdFJlc29sdmluZ1VyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZXNvbHZpbmdVcmlzIHx8IFtdKTtcblxuY29uc3Qgc2VsZWN0Q2hhbm5lbEltcG9ydFBlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5wZW5kaW5nQ2hhbm5lbEltcG9ydCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXNvbHZpbmdVcmlzLCByZXNvbHZpbmdVcmlzID0+IHJlc29sdmluZ1VyaXMgJiYgcmVzb2x2aW5nVXJpcy5pbmRleE9mKHVyaSkgIT09IC0xKTtcblxuY29uc3Qgc2VsZWN0UGxheWluZ1VyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBsYXlpbmdVcmkpO1xuXG5jb25zdCBzZWxlY3RDaGFubmVsQ2xhaW1Db3VudHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5jaGFubmVsQ2xhaW1Db3VudHMgfHwge30pO1xuXG5jb25zdCBtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2hhbm5lbENsYWltQ291bnRzLCBieVVyaSA9PiBieVVyaSAmJiBieVVyaVt1cmldKTtcblxuY29uc3QgbWFrZVNlbGVjdFRvdGFsUGFnZXNGb3JDaGFubmVsID0gKHVyaSwgcGFnZVNpemUgPSAxMCkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2hhbm5lbENsYWltQ291bnRzLCBieVVyaSA9PiBieVVyaSAmJiBieVVyaVt1cmldICYmIE1hdGguY2VpbChieVVyaVt1cmldIC8gcGFnZVNpemUpKTtcblxuY29uc3QgbWFrZVNlbGVjdE5zZndDb3VudEZyb21VcmlzID0gdXJpcyA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbXNCeVVyaSwgY2xhaW1zID0+IHVyaXMucmVkdWNlKChhY2MsIHVyaSkgPT4ge1xuICBjb25zdCBjbGFpbSA9IGNsYWltc1t1cmldO1xuICBpZiAoY2xhaW0gJiYgaXNDbGFpbU5zZncoY2xhaW0pKSB7XG4gICAgcmV0dXJuIGFjYyArIDE7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIDApKTtcblxuY29uc3QgbWFrZVNlbGVjdE5zZndDb3VudEZvckNoYW5uZWwgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLCBzZWxlY3RDdXJyZW50Q2hhbm5lbFBhZ2UsIChieUlkLCBhbGxDbGFpbXMsIHBhZ2UpID0+IHtcbiAgY29uc3QgYnlDaGFubmVsID0gYWxsQ2xhaW1zW3VyaV0gfHwge307XG4gIGNvbnN0IGNsYWltSWRzID0gYnlDaGFubmVsW3BhZ2UgfHwgMV07XG5cbiAgaWYgKCFjbGFpbUlkcykgcmV0dXJuIDA7XG5cbiAgcmV0dXJuIGNsYWltSWRzLnJlZHVjZSgoYWNjLCBjbGFpbUlkKSA9PiB7XG4gICAgY29uc3QgY2xhaW0gPSBieUlkW2NsYWltSWRdO1xuICAgIGlmIChpc0NsYWltTnNmdyhjbGFpbSkpIHtcbiAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCAwKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0T21pdHRlZENvdW50Rm9yQ2hhbm5lbCA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwodXJpKSwgbWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoKHVyaSksIChjbGFpbXNJbkNoYW5uZWwsIGNsYWltc0luU2VhcmNoKSA9PiB7XG4gIGlmIChjbGFpbXNJbkNoYW5uZWwgJiYgdHlwZW9mIGNsYWltc0luU2VhcmNoID09PSAnbnVtYmVyJyAmJiBjbGFpbXNJblNlYXJjaCA+PSAwKSB7XG4gICAgcmV0dXJuIGNsYWltc0luQ2hhbm5lbCAtIGNsYWltc0luU2VhcmNoO1xuICB9IGVsc2UgcmV0dXJuIDA7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltSXNOc2Z3ID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLFxuLy8gRXZlbnR1YWxseSB0aGVzZSB3aWxsIGNvbWUgZnJvbSBzb21lIGxpc3Qgb2YgdGFncyB0aGF0IGFyZSBjb25zaWRlcmVkIGFkdWx0XG4vLyBPciBwb3NzaWJseSBjb21lIGZyb20gdXNlcnMgc2V0dGluZ3Mgb2Ygd2hhdCB0YWdzIHRoZXkgd2FudCB0byBoaWRlXG4vLyBGb3Igbm93LCB0aGVyZSBpcyBqdXN0IGEgaGFyZCBjb2RlZCBsaXN0IG9mIHRhZ3MgaW5zaWRlIGBpc0NsYWltTnNmd2Bcbi8vIHNlbGVjdE5hdWdodHlUYWdzKCksXG5jbGFpbSA9PiB7XG4gIGlmICghY2xhaW0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNDbGFpbU5zZncoY2xhaW0pO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZWNvbW1lbmRlZENvbnRlbnRGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIHNlbGVjdFNlYXJjaFVyaXNCeVF1ZXJ5LCBtYWtlU2VsZWN0Q2xhaW1Jc05zZncodXJpKSwgKGNsYWltLCBzZWFyY2hVcmlzQnlRdWVyeSwgaXNNYXR1cmUpID0+IHtcbiAgY29uc3QgYXRWYW5pdHlVUkkgPSAhdXJpLmluY2x1ZGVzKCcjJyk7XG5cbiAgbGV0IHJlY29tbWVuZGVkQ29udGVudDtcbiAgaWYgKGNsYWltKSB7XG4gICAgLy8gYWx3YXlzIGdyYWIgZnVsbCBVUkwgLSB0aGlzIGNhbiBjaGFuZ2Ugb25jZSBzZWFyY2ggcmV0dXJucyBjYW5vbmljYWxcbiAgICBjb25zdCBjdXJyZW50VXJpID0gYnVpbGRVUkkoeyBzdHJlYW1DbGFpbUlkOiBjbGFpbS5jbGFpbV9pZCwgc3RyZWFtTmFtZTogY2xhaW0ubmFtZSB9KTtcblxuICAgIGNvbnN0IHsgdGl0bGUgfSA9IGNsYWltLnZhbHVlO1xuXG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHJlbGF0ZWRfdG86IGNsYWltLmNsYWltX2lkLCBpc0JhY2tncm91bmRTZWFyY2g6IHRydWUgfTtcblxuICAgIGlmICghaXNNYXR1cmUpIHtcbiAgICAgIG9wdGlvbnNbJ25zZncnXSA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hRdWVyeSA9IGdldFNlYXJjaFF1ZXJ5U3RyaW5nKHRpdGxlLnJlcGxhY2UoL1xcLy8sICcgJyksIG9wdGlvbnMpO1xuXG4gICAgbGV0IHNlYXJjaFVyaXMgPSBzZWFyY2hVcmlzQnlRdWVyeVtzZWFyY2hRdWVyeV07XG4gICAgaWYgKHNlYXJjaFVyaXMpIHtcbiAgICAgIHNlYXJjaFVyaXMgPSBzZWFyY2hVcmlzLmZpbHRlcihzZWFyY2hVcmkgPT4gc2VhcmNoVXJpICE9PSBjdXJyZW50VXJpKTtcbiAgICAgIHJlY29tbWVuZGVkQ29udGVudCA9IHNlYXJjaFVyaXM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY29tbWVuZGVkQ29udGVudDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0Rmlyc3RSZWNvbW1lbmRlZEZpbGVGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdFJlY29tbWVuZGVkQ29udGVudEZvclVyaSh1cmkpLCByZWNvbW1lbmRlZENvbnRlbnQgPT4gcmVjb21tZW5kZWRDb250ZW50ID8gcmVjb21tZW5kZWRDb250ZW50WzBdIDogbnVsbCk7XG5cbi8vIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgY2hhbm5lbCB1cmkgZm9yIGEgZ2l2ZW4gY2xhaW0gdXJpXG4vLyBhY2NlcHRzIGEgcmVndWxhciBjbGFpbSB1cmkgbGJyeTovL3NvbWV0aGluZ1xuLy8gcmV0dXJucyB0aGUgY2hhbm5lbCB1cmkgdGhhdCBjcmVhdGVkIHRoaXMgY2xhaW0gbGJyeTovL0BjaGFubmVsXG5jb25zdCBtYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpID0gKHVyaSwgaW5jbHVkZVByZWZpeCA9IGZhbHNlKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4ge1xuICBpZiAoIWNsYWltIHx8ICFjbGFpbS5zaWduaW5nX2NoYW5uZWwgfHwgIWNsYWltLnNpZ25pbmdfY2hhbm5lbC5jYW5vbmljYWxfdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGNhbm9uaWNhbF91cmw6IGNhbm9uaWNhbFVybCB9ID0gY2xhaW0uc2lnbmluZ19jaGFubmVsO1xuICByZXR1cm4gaW5jbHVkZVByZWZpeCA/IGNhbm9uaWNhbFVybCA6IGNhbm9uaWNhbFVybC5zbGljZSgnbGJyeTovLycubGVuZ3RoKTtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0VGFnc0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmkodXJpKSwgbWV0YWRhdGEgPT4ge1xuICByZXR1cm4gbWV0YWRhdGEgJiYgbWV0YWRhdGEudGFncyB8fCBbXTtcbn0pO1xuXG5jb25zdCBzZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5IHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0RmV0Y2hpbmdDbGFpbVNlYXJjaCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5LCBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9PiBCb29sZWFuKE9iamVjdC5rZXlzKGZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5KS5sZW5ndGgpKTtcblxuY29uc3Qgc2VsZWN0Q2xhaW1TZWFyY2hCeVF1ZXJ5ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuY2xhaW1TZWFyY2hCeVF1ZXJ5IHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0Q2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuY2xhaW1TZWFyY2hCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkIHx8IHt9KTtcblxuY29uc3QgbWFrZVNlbGVjdFNob3J0VXJsRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiBjbGFpbSAmJiBjbGFpbS5zaG9ydF91cmwpO1xuXG5jb25zdCBtYWtlU2VsZWN0Q2Fub25pY2FsVXJsRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBjbGFpbSA9PiBjbGFpbSAmJiBjbGFpbS5jYW5vbmljYWxfdXJsKTtcblxuY29uc3QgbWFrZVNlbGVjdFBlcm1hbmVudFVybEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgY2xhaW0gPT4gY2xhaW0gJiYgY2xhaW0ucGVybWFuZW50X3VybCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RTdXBwb3J0c0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdXBwb3J0c0J5T3V0cG9pbnQsIG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCAoYnlPdXRwb2ludCwgY2xhaW0pID0+IHtcbiAgaWYgKCFjbGFpbSB8fCAhY2xhaW0uaXNfbWluZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBjbGFpbV9pZDogY2xhaW1JZCB9ID0gY2xhaW07XG4gIGxldCB0b3RhbCA9IDA7XG5cbiAgT2JqZWN0LnZhbHVlcyhieU91dHBvaW50KS5mb3JFYWNoKHN1cHBvcnQgPT4ge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCB7IGNsYWltX2lkLCBhbW91bnQgfSA9IHN1cHBvcnQ7XG4gICAgdG90YWwgPSBjbGFpbV9pZCA9PT0gY2xhaW1JZCAmJiBhbW91bnQgPyB0b3RhbCArIHBhcnNlRmxvYXQoYW1vdW50KSA6IHRvdGFsO1xuICB9KTtcblxuICByZXR1cm4gdG90YWw7XG59KTtcblxuY29uc3Qgc2VsZWN0VXBkYXRpbmdDaGFubmVsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUudXBkYXRpbmdDaGFubmVsKTtcblxuY29uc3Qgc2VsZWN0VXBkYXRlQ2hhbm5lbEVycm9yID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUudXBkYXRlQ2hhbm5lbEVycm9yKTtcblxuY29uc3QgbWFrZVNlbGVjdE15U3RyZWFtVXJsc0ZvclBhZ2UgPSAocGFnZSA9IDEpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdE15Q2xhaW1VcmlzV2l0aG91dENoYW5uZWxzLCB1cmxzID0+IHtcbiAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHBhZ2UpIC0gMSkgKiBOdW1iZXIoUEFHRV9TSVpFKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHBhZ2UpICogTnVtYmVyKFBBR0VfU0laRSk7XG4gIHJldHVybiB1cmxzICYmIHVybHMubGVuZ3RoID8gdXJscy5zbGljZShzdGFydCwgZW5kKSA6IFtdO1xufSk7XG5cbmNvbnN0IHNlbGVjdE15U3RyZWFtVXJsc0NvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0TXlDbGFpbVVyaXNXaXRob3V0Q2hhbm5lbHMsIGNoYW5uZWxzID0+IGNoYW5uZWxzLmxlbmd0aCk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9ICh1cmksIHNpemUpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpLCBzZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNCeVF1ZXJ5LCBtYWtlU2VsZWN0Q2xhaW1Jc05zZncodXJpKSwgKGNsYWltLCByZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5LCBpc01hdHVyZSkgPT4ge1xuICBjb25zdCBhdFZhbml0eVVSSSA9ICF1cmkuaW5jbHVkZXMoJyMnKTtcblxuICBsZXQgcmVjb21tZW5kZWRDb250ZW50O1xuICBpZiAoY2xhaW0pIHtcbiAgICAvLyBhbHdheXMgZ3JhYiBmdWxsIFVSTCAtIHRoaXMgY2FuIGNoYW5nZSBvbmNlIHNlYXJjaCByZXR1cm5zIGNhbm9uaWNhbFxuICAgIGNvbnN0IGN1cnJlbnRVcmkgPSBidWlsZFVSSSh7IHN0cmVhbUNsYWltSWQ6IGNsYWltLmNsYWltX2lkLCBzdHJlYW1OYW1lOiBjbGFpbS5uYW1lIH0pO1xuXG4gICAgY29uc3QgeyB0aXRsZSB9ID0gY2xhaW0udmFsdWU7XG5cbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgcmVsYXRlZF90bzogY2xhaW0uY2xhaW1faWQsIGlzQmFja2dyb3VuZFNlYXJjaDogdHJ1ZSB9O1xuICAgIGlmICghaXNNYXR1cmUpIHtcbiAgICAgIG9wdGlvbnNbJ25zZncnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gZ2V0U2VhcmNoUXVlcnlTdHJpbmcodGl0bGUucmVwbGFjZSgvXFwvLywgJyAnKSwgb3B0aW9ucyk7XG5cbiAgICBsZXQgcmVzdWx0cyA9IHJlc29sdmVkUmVzdWx0c0J5UXVlcnlbc2VhcmNoUXVlcnldO1xuICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IGJ1aWxkVVJJKHsgc3RyZWFtQ2xhaW1JZDogcmVzdWx0LmNsYWltSWQsIHN0cmVhbU5hbWU6IHJlc3VsdC5uYW1lIH0pICE9PSBjdXJyZW50VXJpKTtcbiAgICAgIHJlY29tbWVuZGVkQ29udGVudCA9IHJlc3VsdHM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY29tbWVuZGVkQ29udGVudDtcbn0pO1xuXG5mdW5jdGlvbiBudW1iZXJXaXRoQ29tbWFzKHgpIHtcbiAgdmFyIHBhcnRzID0geC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gIHBhcnRzWzBdID0gcGFydHNbMF0ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcbiAgcmV0dXJuIHBhcnRzLmpvaW4oJy4nKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Q3JlZGl0cyhhbW91bnQsIHByZWNpc2lvbiwgc2hvcnRGb3JtYXQgPSBmYWxzZSkge1xuICBsZXQgYWN0dWFsQW1vdW50ID0gcGFyc2VGbG9hdChhbW91bnQpO1xuICBsZXQgYWN0dWFsUHJlY2lzaW9uID0gcGFyc2VGbG9hdChwcmVjaXNpb24pO1xuICBsZXQgc3VmZml4ID0gJyc7XG5cbiAgaWYgKE51bWJlci5pc05hTihhY3R1YWxBbW91bnQpIHx8IGFjdHVhbEFtb3VudCA9PT0gMCkgcmV0dXJuICcwJztcblxuICBpZiAoYWN0dWFsQW1vdW50ID49IDEwMDAwMDApIHtcbiAgICBpZiAocHJlY2lzaW9uIDw9IDcpIHtcbiAgICAgIGlmIChzaG9ydEZvcm1hdCkge1xuICAgICAgICBhY3R1YWxBbW91bnQgPSBhY3R1YWxBbW91bnQgLyAxMDAwMDAwO1xuICAgICAgICBzdWZmaXggPSAnTSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxQcmVjaXNpb24gLT0gNztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoYWN0dWFsQW1vdW50ID49IDEwMDApIHtcbiAgICBpZiAocHJlY2lzaW9uIDw9IDQpIHtcbiAgICAgIGlmIChzaG9ydEZvcm1hdCkge1xuICAgICAgICBhY3R1YWxBbW91bnQgPSBhY3R1YWxBbW91bnQgLyAxMDAwO1xuICAgICAgICBzdWZmaXggPSAnSyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxQcmVjaXNpb24gLT0gNDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVtYmVyV2l0aENvbW1hcyhhY3R1YWxBbW91bnQudG9GaXhlZChhY3R1YWxQcmVjaXNpb24gPj0gMCA/IGFjdHVhbFByZWNpc2lvbiA6IDEpLnJlcGxhY2UoL1xcLiowKyQvLCAnJykpICsgc3VmZml4O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsUHJpY2UoYW1vdW50LCBwcmVjaXNpb24gPSAxKSB7XG4gIGxldCBmb3JtYXRlZCA9ICcnO1xuXG4gIGNvbnN0IHF1YW50aXR5ID0gYW1vdW50LnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcbiAgY29uc3QgZnJhY3Rpb24gPSBxdWFudGl0eVsxXTtcblxuICBpZiAoZnJhY3Rpb24pIHtcbiAgICBjb25zdCBkZWNpbWFscyA9IGZyYWN0aW9uLnNwbGl0KCcnKTtcbiAgICBjb25zdCBmaXJzdCA9IGRlY2ltYWxzLmZpbHRlcihudW1iZXIgPT4gbnVtYmVyICE9PSAnMCcpWzBdO1xuICAgIGNvbnN0IGluZGV4ID0gZGVjaW1hbHMuaW5kZXhPZihmaXJzdCk7XG5cbiAgICAvLyBTZXQgZm9ybWF0IGZyYWN0aW9uXG4gICAgZm9ybWF0ZWQgPSBgLiR7ZnJhY3Rpb24uc3Vic3RyaW5nKDAsIGluZGV4ICsgcHJlY2lzaW9uKX1gO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlRmxvYXQocXVhbnRpdHlbMF0gKyBmb3JtYXRlZCk7XG59XG5cbmZ1bmN0aW9uIGNyZWRpdHNUb1N0cmluZyhhbW91bnQpIHtcbiAgY29uc3QgY3JlZGl0U3RyaW5nID0gcGFyc2VGbG9hdChhbW91bnQpLnRvRml4ZWQoOCk7XG4gIHJldHVybiBjcmVkaXRTdHJpbmc7XG59XG5cbmxldCB3YWxsZXRCYWxhbmNlUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBkb1VwZGF0ZUJhbGFuY2UoKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgd2FsbGV0OiB7IHRvdGFsQmFsYW5jZTogdG90YWxJblN0b3JlIH1cbiAgICB9ID0gZ2V0U3RhdGUoKTtcblxuICAgIGlmICh3YWxsZXRCYWxhbmNlUHJvbWlzZSA9PT0gbnVsbCkge1xuICAgICAgd2FsbGV0QmFsYW5jZVByb21pc2UgPSBsYnJ5UHJveHkud2FsbGV0X2JhbGFuY2UoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgd2FsbGV0QmFsYW5jZVByb21pc2UgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IHsgYXZhaWxhYmxlLCByZXNlcnZlZCwgcmVzZXJ2ZWRfc3VidG90YWxzLCB0b3RhbCB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHsgY2xhaW1zLCBzdXBwb3J0cywgdGlwcyB9ID0gcmVzZXJ2ZWRfc3VidG90YWxzO1xuICAgICAgICBjb25zdCB0b3RhbEZsb2F0ID0gcGFyc2VGbG9hdCh0b3RhbCk7XG5cbiAgICAgICAgaWYgKHRvdGFsSW5TdG9yZSAhPT0gdG90YWxGbG9hdCkge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFVQREFURV9CQUxBTkNFLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0b3RhbEJhbGFuY2U6IHRvdGFsRmxvYXQsXG4gICAgICAgICAgICAgIGJhbGFuY2U6IHBhcnNlRmxvYXQoYXZhaWxhYmxlKSxcbiAgICAgICAgICAgICAgcmVzZXJ2ZWRCYWxhbmNlOiBwYXJzZUZsb2F0KHJlc2VydmVkKSxcbiAgICAgICAgICAgICAgY2xhaW1zQmFsYW5jZTogcGFyc2VGbG9hdChjbGFpbXMpLFxuICAgICAgICAgICAgICBzdXBwb3J0c0JhbGFuY2U6IHBhcnNlRmxvYXQoc3VwcG9ydHMpLFxuICAgICAgICAgICAgICB0aXBzQmFsYW5jZTogcGFyc2VGbG9hdCh0aXBzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHdhbGxldEJhbGFuY2VQcm9taXNlID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB3YWxsZXRCYWxhbmNlUHJvbWlzZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9CYWxhbmNlU3Vic2NyaWJlKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKGRvVXBkYXRlQmFsYW5jZSgpKTtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiBkaXNwYXRjaChkb1VwZGF0ZUJhbGFuY2UoKSksIDUwMDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoVHJhbnNhY3Rpb25zKHBhZ2UgPSAxLCBwYWdlU2l6ZSA9IDk5OTk5KSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goZG9GZXRjaFN1cHBvcnRzKCkpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1RSQU5TQUNUSU9OU19TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkudXR4b19yZWxlYXNlKCkudGhlbigoKSA9PiBsYnJ5UHJveHkudHJhbnNhY3Rpb25fbGlzdCh7IHBhZ2UsIHBhZ2Vfc2l6ZTogcGFnZVNpemUgfSkpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHRyYW5zYWN0aW9uczogcmVzdWx0Lml0ZW1zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoU3VwcG9ydHMocGFnZSA9IDEsIHBhZ2VTaXplID0gOTk5OTkpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9TVVBQT1JUU19TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkuc3VwcG9ydF9saXN0KHsgcGFnZSwgcGFnZV9zaXplOiBwYWdlU2l6ZSB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX1NVUFBPUlRTX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHN1cHBvcnRzOiByZXN1bHQuaXRlbXNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvR2V0TmV3QWRkcmVzcygpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBHRVRfTkVXX0FERFJFU1NfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgbGJyeVByb3h5LmFkZHJlc3NfdW51c2VkKCkudGhlbihhZGRyZXNzID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogR0VUX05FV19BRERSRVNTX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YTogeyBhZGRyZXNzIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0NoZWNrQWRkcmVzc0lzTWluZShhZGRyZXNzKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQ0hFQ0tfQUREUkVTU19JU19NSU5FX1NUQVJURURcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS5hZGRyZXNzX2lzX21pbmUoeyBhZGRyZXNzIH0pLnRoZW4oaXNNaW5lID0+IHtcbiAgICAgIGlmICghaXNNaW5lKSBkaXNwYXRjaChkb0dldE5ld0FkZHJlc3MoKSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ0hFQ0tfQUREUkVTU19JU19NSU5FX0NPTVBMRVRFRFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2VuZERyYWZ0VHJhbnNhY3Rpb24oYWRkcmVzcywgYW1vdW50KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGJhbGFuY2UgPSBzZWxlY3RCYWxhbmNlKHN0YXRlKTtcblxuICAgIGlmIChiYWxhbmNlIC0gYW1vdW50IDw9IDApIHtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ0luc3VmZmljaWVudCBjcmVkaXRzJyxcbiAgICAgICAgbWVzc2FnZTogJ0luc3VmZmljaWVudCBjcmVkaXRzJ1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFTkRfVFJBTlNBQ1RJT05fU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2Vzc0NhbGxiYWNrID0gcmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnR4aWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFNFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVEXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgICBtZXNzYWdlOiBgWW91IHNlbnQgJHthbW91bnR9IExCQ2AsXG4gICAgICAgICAgbGlua1RleHQ6ICdIaXN0b3J5JyxcbiAgICAgICAgICBsaW5rVGFyZ2V0OiAnL3dhbGxldCdcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFNFTkRfVFJBTlNBQ1RJT05fRkFJTEVELFxuICAgICAgICAgIGRhdGE6IHsgZXJyb3I6IHJlc3BvbnNlIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdUcmFuc2FjdGlvbiBmYWlsZWQnLFxuICAgICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvckNhbGxiYWNrID0gZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTRU5EX1RSQU5TQUNUSU9OX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnVHJhbnNhY3Rpb24gZmFpbGVkJyxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBsYnJ5UHJveHkud2FsbGV0X3NlbmQoe1xuICAgICAgYWRkcmVzc2VzOiBbYWRkcmVzc10sXG4gICAgICBhbW91bnQ6IGNyZWRpdHNUb1N0cmluZyhhbW91bnQpXG4gICAgfSkudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1NldERyYWZ0VHJhbnNhY3Rpb25BbW91bnQoYW1vdW50KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FNT1VOVCxcbiAgICBkYXRhOiB7IGFtb3VudCB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2V0RHJhZnRUcmFuc2FjdGlvbkFkZHJlc3MoYWRkcmVzcykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNFVF9EUkFGVF9UUkFOU0FDVElPTl9BRERSRVNTLFxuICAgIGRhdGE6IHsgYWRkcmVzcyB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2VuZFRpcChhbW91bnQsIGNsYWltSWQsIGlzU3VwcG9ydCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGJhbGFuY2UgPSBzZWxlY3RCYWxhbmNlKHN0YXRlKTtcbiAgICBjb25zdCBteUNsYWltcyA9IHNlbGVjdE15Q2xhaW1zUmF3KHN0YXRlKTtcblxuICAgIGNvbnN0IHNob3VsZFN1cHBvcnQgPSBpc1N1cHBvcnQgfHwgKG15Q2xhaW1zID8gbXlDbGFpbXMuZmluZChjbGFpbSA9PiBjbGFpbS5jbGFpbV9pZCA9PT0gY2xhaW1JZCkgOiBmYWxzZSk7XG5cbiAgICBpZiAoYmFsYW5jZSAtIGFtb3VudCA8PSAwKSB7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogX18oJ0luc3VmZmljaWVudCBjcmVkaXRzJyksXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHNob3VsZFN1cHBvcnQgPyBfXygnWW91IGRlcG9zaXRlZCAlYW1vdW50JSBMQkMgYXMgYSBzdXBwb3J0IScsIHsgYW1vdW50IH0pIDogX18oJ1lvdSBzZW50ICVhbW91bnQlIExCQyBhcyBhIHRpcCwgTWFoYWxvIScsIHsgYW1vdW50IH0pLFxuICAgICAgICBsaW5rVGV4dDogX18oJ0hpc3RvcnknKSxcbiAgICAgICAgbGlua1RhcmdldDogX18oJy93YWxsZXQnKVxuICAgICAgfSkpO1xuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNVUFBPUlRfVFJBTlNBQ1RJT05fQ09NUExFVEVEXG4gICAgICB9KTtcblxuICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IF9fKGBUaGVyZSB3YXMgYW4gZXJyb3Igc2VuZGluZyBzdXBwb3J0IGZ1bmRzLmApLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU1VQUE9SVF9UUkFOU0FDVElPTl9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JDYWxsYmFjaykge1xuICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgbGJyeVByb3h5LnN1cHBvcnRfY3JlYXRlKHtcbiAgICAgIGNsYWltX2lkOiBjbGFpbUlkLFxuICAgICAgYW1vdW50OiBjcmVkaXRzVG9TdHJpbmcoYW1vdW50KSxcbiAgICAgIHRpcDogIXNob3VsZFN1cHBvcnQsXG4gICAgICBibG9ja2luZzogdHJ1ZVxuICAgIH0pLnRoZW4oc3VjY2VzcywgZXJyb3IpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0NsZWFyU3VwcG9ydCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBDTEVBUl9TVVBQT1JUX1RSQU5TQUNUSU9OXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvV2FsbGV0RW5jcnlwdChuZXdQYXNzd29yZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFdBTExFVF9FTkNSWVBUX1NUQVJUXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkud2FsbGV0X2VuY3J5cHQoeyBuZXdfcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFdBTExFVF9FTkNSWVBUX0NPTVBMRVRFRCxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogV0FMTEVUX0VOQ1JZUFRfRkFJTEVELFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9XYWxsZXRVbmxvY2socGFzc3dvcmQpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBXQUxMRVRfVU5MT0NLX1NUQVJUXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkud2FsbGV0X3VubG9jayh7IHBhc3N3b3JkIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFdBTExFVF9VTkxPQ0tfQ09NUExFVEVELFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBXQUxMRVRfVU5MT0NLX0ZBSUxFRCxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvV2FsbGV0UmVjb25uZWN0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFdBTExFVF9SRVNUQVJUXG4gICAgfSk7XG4gICAgLy8gdGhpcyBiYXNpY2FsbHkgcmV0dXJucyBudWxsIHdoZW4gaXQncyBkb25lLiA6KFxuICAgIC8vIG1pZ2h0IGJlIGdvb2QgdG8gIGRpc3BhdGNoIEFDVElPTlMuV0FMTEVUX1JFU1RBUlRFRFxuICAgIGxicnlQcm94eS53YWxsZXRfcmVjb25uZWN0KCkudGhlbigoKSA9PiBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBXQUxMRVRfUkVTVEFSVF9DT01QTEVURURcbiAgICB9KSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1dhbGxldERlY3J5cHQoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogV0FMTEVUX0RFQ1JZUFRfU1RBUlRcbiAgICB9KTtcblxuICAgIGxicnlQcm94eS53YWxsZXRfZGVjcnlwdCgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFdBTExFVF9ERUNSWVBUX0NPTVBMRVRFRCxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogV0FMTEVUX0RFQ1JZUFRfRkFJTEVELFxuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9XYWxsZXRTdGF0dXMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogV0FMTEVUX1NUQVRVU19TVEFSVFxuICAgIH0pO1xuXG4gICAgbGJyeVByb3h5LndhbGxldF9zdGF0dXMoKS50aGVuKHN0YXR1cyA9PiB7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRCxcbiAgICAgICAgICByZXN1bHQ6IHN0YXR1cy5pc19lbmNyeXB0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvU2V0VHJhbnNhY3Rpb25MaXN0RmlsdGVyKGZpbHRlck9wdGlvbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNFVF9UUkFOU0FDVElPTl9MSVNUX0ZJTFRFUixcbiAgICBkYXRhOiBmaWx0ZXJPcHRpb25cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9VcGRhdGVCbG9ja0hlaWdodCgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IGxicnlQcm94eS5zdGF0dXMoKS50aGVuKHN0YXR1cyA9PiB7XG4gICAgaWYgKHN0YXR1cy53YWxsZXQpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX0NVUlJFTlRfSEVJR0hULFxuICAgICAgICBkYXRhOiBzdGF0dXMud2FsbGV0LmJsb2Nrc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVkdXgvaXNzdWVzLzkxMVxuZnVuY3Rpb24gYmF0Y2hBY3Rpb25zKC4uLmFjdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQkFUQ0hfQUNUSU9OUycsXG4gICAgYWN0aW9uc1xuICB9O1xufVxuXG52YXIgX2V4dGVuZHMkNSA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIGRvUmVzb2x2ZVVyaXModXJpcywgcmV0dXJuQ2FjaGVkQ2xhaW1zID0gZmFsc2UpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkVXJpcyA9IHVyaXMubWFwKG5vcm1hbGl6ZVVSSSk7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuXG4gICAgY29uc3QgcmVzb2x2aW5nVXJpcyA9IHNlbGVjdFJlc29sdmluZ1VyaXMoc3RhdGUpO1xuICAgIGNvbnN0IGNsYWltc0J5VXJpID0gc2VsZWN0Q2xhaW1zQnlVcmkoc3RhdGUpO1xuICAgIGNvbnN0IHVyaXNUb1Jlc29sdmUgPSBub3JtYWxpemVkVXJpcy5maWx0ZXIodXJpID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdVcmlzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuQ2FjaGVkQ2xhaW1zID8gIWNsYWltc0J5VXJpW3VyaV0gOiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKHVyaXNUb1Jlc29sdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUkVTT0xWRV9VUklTX1NUQVJURUQsXG4gICAgICBkYXRhOiB7IHVyaXM6IG5vcm1hbGl6ZWRVcmlzIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc29sdmVJbmZvID0ge307XG5cbiAgICBsYnJ5UHJveHkucmVzb2x2ZSh7IHVybHM6IHVyaXNUb1Jlc29sdmUgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0KS5mb3JFYWNoKChbdXJpLCB1cmlSZXNvbHZlSW5mb10pID0+IHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tSZXNvbHZlSW5mbyA9IHtcbiAgICAgICAgICBzdHJlYW06IG51bGwsXG4gICAgICAgICAgY2xhaW1zSW5DaGFubmVsOiBudWxsLFxuICAgICAgICAgIGNoYW5uZWw6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBGbG93IGhhcyB0ZXJyaWJsZSBPYmplY3QuZW50cmllcyBzdXBwb3J0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMjIxXG4gICAgICAgIGlmICh1cmlSZXNvbHZlSW5mbykge1xuICAgICAgICAgIGlmICh1cmlSZXNvbHZlSW5mby5lcnJvcikge1xuICAgICAgICAgICAgcmVzb2x2ZUluZm9bdXJpXSA9IF9leHRlbmRzJDUoe30sIGZhbGxiYWNrUmVzb2x2ZUluZm8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBpZiAodXJpUmVzb2x2ZUluZm8udmFsdWVfdHlwZSA9PT0gJ2NoYW5uZWwnKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5jaGFubmVsID0gdXJpUmVzb2x2ZUluZm87XG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgICAgcmVzdWx0LmNsYWltc0luQ2hhbm5lbCA9IHVyaVJlc29sdmVJbmZvLm1ldGEuY2xhaW1zX2luX2NoYW5uZWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQuc3RyZWFtID0gdXJpUmVzb2x2ZUluZm87XG4gICAgICAgICAgICAgIGlmICh1cmlSZXNvbHZlSW5mby5zaWduaW5nX2NoYW5uZWwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hhbm5lbCA9IHVyaVJlc29sdmVJbmZvLnNpZ25pbmdfY2hhbm5lbDtcbiAgICAgICAgICAgICAgICByZXN1bHQuY2xhaW1zSW5DaGFubmVsID0gdXJpUmVzb2x2ZUluZm8uc2lnbmluZ19jaGFubmVsLm1ldGEgJiYgdXJpUmVzb2x2ZUluZm8uc2lnbmluZ19jaGFubmVsLm1ldGEuY2xhaW1zX2luX2NoYW5uZWwgfHwgMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgcmVzb2x2ZUluZm9bdXJpXSA9IHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFJFU09MVkVfVVJJU19DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHsgcmVzb2x2ZUluZm8gfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvUmVzb2x2ZVVyaSh1cmkpIHtcbiAgcmV0dXJuIGRvUmVzb2x2ZVVyaXMoW3VyaV0pO1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoQ2xhaW1MaXN0TWluZShwYWdlID0gMSwgcGFnZVNpemUgPSA5OTk5OSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBsYnJ5UHJveHkuc3RyZWFtX2xpc3QoeyBwYWdlLCBwYWdlX3NpemU6IHBhZ2VTaXplIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGNsYWltcyA9IHJlc3VsdC5pdGVtcztcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xhaW1zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0FiYW5kb25DbGFpbSh0eGlkLCBub3V0KSB7XG4gIGNvbnN0IG91dHBvaW50ID0gYCR7dHhpZH06JHtub3V0fWA7XG5cbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgbXlDbGFpbXMgPSBzZWxlY3RNeUNsYWltc1JhdyhzdGF0ZSk7XG4gICAgY29uc3QgbXlTdXBwb3J0cyA9IHNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludChzdGF0ZSk7XG5cbiAgICAvLyBBIHVzZXIgY291bGQgYmUgdHJ5aW5nIHRvIGFiYW5kb24gYSBzdXBwb3J0IG9yIG9uZSBvZiB0aGVpciBjbGFpbXNcbiAgICBjb25zdCBjbGFpbVRvQWJhbmRvbiA9IG15Q2xhaW1zLmZpbmQoY2xhaW0gPT4gY2xhaW0udHhpZCA9PT0gdHhpZCAmJiBjbGFpbS5ub3V0ID09PSBub3V0KTtcbiAgICBjb25zdCBzdXBwb3J0VG9BYmFuZG9uID0gbXlTdXBwb3J0c1tvdXRwb2ludF07XG5cbiAgICBpZiAoIWNsYWltVG9BYmFuZG9uICYmICFzdXBwb3J0VG9BYmFuZG9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhc3NvY2lhdGVkIHN1cHBvcnQgb3IgY2xhaW0gd2l0aCB0eGlkOiAnLCB0eGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gY2xhaW1Ub0FiYW5kb24gPyB7IGNsYWltSWQ6IGNsYWltVG9BYmFuZG9uLmNsYWltX2lkIH0gOiB7IG91dHBvaW50OiBgJHtzdXBwb3J0VG9BYmFuZG9uLnR4aWR9OiR7c3VwcG9ydFRvQWJhbmRvbi5ub3V0fWAgfTtcblxuICAgIGNvbnN0IGlzQ2xhaW0gPSAhIWNsYWltVG9BYmFuZG9uO1xuICAgIGNvbnN0IHN0YXJ0ZWRBY3Rpb25UeXBlID0gaXNDbGFpbSA/IEFCQU5ET05fQ0xBSU1fU1RBUlRFRCA6IEFCQU5ET05fU1VQUE9SVF9TVEFSVEVEO1xuICAgIGNvbnN0IGNvbXBsZXRlZEFjdGlvblR5cGUgPSBpc0NsYWltID8gQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQgOiBBQkFORE9OX1NVUFBPUlRfQ09NUExFVEVEO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogc3RhcnRlZEFjdGlvblR5cGUsXG4gICAgICBkYXRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBlcnJvckNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IGlzQ2xhaW0gPyAnRXJyb3IgYWJhbmRvbmluZyB5b3VyIGNsYWltL3N1cHBvcnQnIDogJ0Vycm9yIHVubG9ja2luZyB5b3VyIHRpcCcsXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3VjY2Vzc0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBjb21wbGV0ZWRBY3Rpb25UeXBlLFxuICAgICAgICBkYXRhXG4gICAgICB9KTtcblxuICAgICAgbGV0IGFiYW5kb25NZXNzYWdlO1xuICAgICAgaWYgKGlzQ2xhaW0pIHtcbiAgICAgICAgYWJhbmRvbk1lc3NhZ2UgPSAnU3VjY2Vzc2Z1bGx5IGFiYW5kb25lZCB5b3VyIGNsYWltLic7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnRUb0FiYW5kb24pIHtcbiAgICAgICAgYWJhbmRvbk1lc3NhZ2UgPSAnU3VjY2Vzc2Z1bGx5IGFiYW5kb25lZCB5b3VyIHN1cHBvcnQuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFiYW5kb25NZXNzYWdlID0gJ1N1Y2Nlc3NmdWxseSB1bmxvY2tlZCB5b3VyIHRpcCEnO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogYWJhbmRvbk1lc3NhZ2VcbiAgICAgIH0pKTtcblxuICAgICAgLy8gQWZ0ZXIgYWJhbmRvbmluZywgZmV0Y2ggdHJhbnNhY3Rpb25zIHRvIHNob3cgdGhlIG5ldyBhYmFuZG9uIHRyYW5zYWN0aW9uXG4gICAgICAvLyBPbmx5IGZldGNoIHRoZSBsYXRlc3QgZmV3IHRyYW5zYWN0aW9ucyBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IG9sZCBvbmVzXG4gICAgICAvLyBOb3QgdmVyeSByb2J1c3QsIGJ1dCBiZXR0ZXIgdGhhbiBjYWxsaW5nIHRoZSBlbnRpcmUgbGlzdCBmb3IgbGFyZ2Ugd2FsbGV0c1xuICAgICAgY29uc3QgcGFnZSA9IDE7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IDEwO1xuICAgICAgZGlzcGF0Y2goZG9GZXRjaFRyYW5zYWN0aW9ucyhwYWdlLCBwYWdlU2l6ZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBhYmFuZG9uUGFyYW1zID0ge1xuICAgICAgdHhpZCxcbiAgICAgIG5vdXQsXG4gICAgICBibG9ja2luZzogdHJ1ZVxuICAgIH07XG5cbiAgICBsZXQgbWV0aG9kO1xuICAgIGlmIChzdXBwb3J0VG9BYmFuZG9uKSB7XG4gICAgICBtZXRob2QgPSAnc3VwcG9ydF9hYmFuZG9uJztcbiAgICB9IGVsc2UgaWYgKGNsYWltVG9BYmFuZG9uKSB7XG4gICAgICBjb25zdCB7IG5hbWU6IGNsYWltTmFtZSB9ID0gY2xhaW1Ub0FiYW5kb247XG4gICAgICBtZXRob2QgPSBjbGFpbU5hbWUuc3RhcnRzV2l0aCgnQCcpID8gJ2NoYW5uZWxfYWJhbmRvbicgOiAnc3RyZWFtX2FiYW5kb24nO1xuICAgIH1cblxuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBcIm1ldGhvZFwiIGNob3NlbiBmb3IgY2xhaW0gb3Igc3VwcG9ydCBhYmFuZG9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGJyeVByb3h5W21ldGhvZF0oYWJhbmRvblBhcmFtcykudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb0ZldGNoQ2xhaW1zQnlDaGFubmVsKHVyaSwgcGFnZSA9IDEpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVELFxuICAgICAgZGF0YTogeyB1cmksIHBhZ2UgfVxuICAgIH0pO1xuXG4gICAgbGJyeVByb3h5LmNsYWltX3NlYXJjaCh7XG4gICAgICBjaGFubmVsOiB1cmksXG4gICAgICB2YWxpZF9jaGFubmVsX3NpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIHBhZ2U6IHBhZ2UgfHwgMSxcbiAgICAgIG9yZGVyX2J5OiBbJ3JlbGVhc2VfdGltZSddXG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgeyBpdGVtczogY2xhaW1zLCB0b3RhbF9pdGVtczogY2xhaW1zSW5DaGFubmVsLCBwYWdlOiByZXR1cm5lZFBhZ2UgfSA9IHJlc3VsdDtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmksXG4gICAgICAgICAgY2xhaW1zSW5DaGFubmVsLFxuICAgICAgICAgIGNsYWltczogY2xhaW1zIHx8IFtdLFxuICAgICAgICAgIHBhZ2U6IHJldHVybmVkUGFnZSB8fCB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ3JlYXRlQ2hhbm5lbChuYW1lLCBhbW91bnQsIG9wdGlvbmFsUGFyYW1zKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3QgY3JlYXRlUGFyYW1zID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGJpZDogY3JlZGl0c1RvU3RyaW5nKGFtb3VudCksXG4gICAgICBibG9ja2luZzogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9uYWxQYXJhbXMpIHtcbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy50aXRsZSkge1xuICAgICAgICBjcmVhdGVQYXJhbXMudGl0bGUgPSBvcHRpb25hbFBhcmFtcy50aXRsZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy5jb3ZlclVybCkge1xuICAgICAgICBjcmVhdGVQYXJhbXMuY292ZXJfdXJsID0gb3B0aW9uYWxQYXJhbXMuY292ZXJVcmw7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxQYXJhbXMudGh1bWJuYWlsVXJsKSB7XG4gICAgICAgIGNyZWF0ZVBhcmFtcy50aHVtYm5haWxfdXJsID0gb3B0aW9uYWxQYXJhbXMudGh1bWJuYWlsVXJsO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNyZWF0ZVBhcmFtcy5kZXNjcmlwdGlvbiA9IG9wdGlvbmFsUGFyYW1zLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zLndlYnNpdGUpIHtcbiAgICAgICAgY3JlYXRlUGFyYW1zLndlYnNpdGVfdXJsID0gb3B0aW9uYWxQYXJhbXMud2Vic2l0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy5lbWFpbCkge1xuICAgICAgICBjcmVhdGVQYXJhbXMuZW1haWwgPSBvcHRpb25hbFBhcmFtcy5lbWFpbDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFBhcmFtcy50YWdzKSB7XG4gICAgICAgIGNyZWF0ZVBhcmFtcy50YWdzID0gb3B0aW9uYWxQYXJhbXMudGFncy5tYXAodGFnID0+IHRhZy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGJyeVByb3h5LmNoYW5uZWxfY3JlYXRlKGNyZWF0ZVBhcmFtcylcbiAgICAvLyBvdXRwdXRzWzBdIGlzIHRoZSBjZXJ0aWZpY2F0ZVxuICAgIC8vIG91dHB1dHNbMV0gaXMgdGhlIGNoYW5nZSBmcm9tIHRoZSB0eCwgbm90IGluIHRoZSBhcHAgY3VycmVudGx5XG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWxDbGFpbSA9IHJlc3VsdC5vdXRwdXRzWzBdO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHsgY2hhbm5lbENsYWltIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNoYW5uZWxDbGFpbTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENSRUFURV9DSEFOTkVMX0ZBSUxFRCxcbiAgICAgICAgZGF0YTogZXJyb3IubWVzc2FnZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvVXBkYXRlQ2hhbm5lbChwYXJhbXMpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVUERBVEVfQ0hBTk5FTF9TVEFSVEVEXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IG15Q2hhbm5lbHMgPSBzZWxlY3RNeUNoYW5uZWxDbGFpbXMoc3RhdGUpO1xuICAgIGNvbnN0IGNoYW5uZWxDbGFpbSA9IG15Q2hhbm5lbHMuZmluZChteUNoYW5uZWwgPT4gbXlDaGFubmVsLmNsYWltX2lkID09PSBwYXJhbXMuY2xhaW1faWQpO1xuXG4gICAgY29uc3QgdXBkYXRlUGFyYW1zID0ge1xuICAgICAgY2xhaW1faWQ6IHBhcmFtcy5jbGFpbV9pZCxcbiAgICAgIGJpZDogY3JlZGl0c1RvU3RyaW5nKHBhcmFtcy5hbW91bnQpLFxuICAgICAgdGl0bGU6IHBhcmFtcy50aXRsZSxcbiAgICAgIGNvdmVyX3VybDogcGFyYW1zLmNvdmVyVXJsLFxuICAgICAgdGh1bWJuYWlsX3VybDogcGFyYW1zLnRodW1ibmFpbFVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbXMuZGVzY3JpcHRpb24sXG4gICAgICB3ZWJzaXRlX3VybDogcGFyYW1zLndlYnNpdGUsXG4gICAgICBlbWFpbDogcGFyYW1zLmVtYWlsLFxuICAgICAgdGFnczogW10sXG4gICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgbGFuZ3VhZ2VzOiBbXSxcbiAgICAgIGxvY2F0aW9uczogW10sXG4gICAgICBibG9ja2luZzogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLnRhZ3MpIHtcbiAgICAgIHVwZGF0ZVBhcmFtcy50YWdzID0gcGFyYW1zLnRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSk7XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgbmVlZCB0byByZW1vdmUgdGhlc2Ugb25jZSB3ZSBhZGQgbG9jYXRpb25zL2NoYW5uZWxzIHRvIGNoYW5uZWwgcGFnZSBlZGl0L2NyZWF0ZSBvcHRpb25zXG5cbiAgICBpZiAoY2hhbm5lbENsYWltICYmIGNoYW5uZWxDbGFpbS52YWx1ZSAmJiBjaGFubmVsQ2xhaW0udmFsdWUubG9jYXRpb25zKSB7XG4gICAgICB1cGRhdGVQYXJhbXMubG9jYXRpb25zID0gY2hhbm5lbENsYWltLnZhbHVlLmxvY2F0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoY2hhbm5lbENsYWltICYmIGNoYW5uZWxDbGFpbS52YWx1ZSAmJiBjaGFubmVsQ2xhaW0udmFsdWUubGFuZ3VhZ2VzKSB7XG4gICAgICB1cGRhdGVQYXJhbXMubGFuZ3VhZ2VzID0gY2hhbm5lbENsYWltLnZhbHVlLmxhbmd1YWdlcztcbiAgICB9XG5cbiAgICByZXR1cm4gbGJyeVByb3h5LmNoYW5uZWxfdXBkYXRlKHVwZGF0ZVBhcmFtcykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbENsYWltID0gcmVzdWx0Lm91dHB1dHNbMF07XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9DSEFOTkVMX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YTogeyBjaGFubmVsQ2xhaW0gfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVUERBVEVfQ0hBTk5FTF9GQUlMRUQsXG4gICAgICAgIGRhdGE6IGVycm9yXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9JbXBvcnRDaGFubmVsKGNlcnRpZmljYXRlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogSU1QT1JUX0NIQU5ORUxfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxicnlQcm94eS5jaGFubmVsX2ltcG9ydCh7IGNoYW5uZWxfZGF0YTogY2VydGlmaWNhdGUgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBJTVBPUlRfQ0hBTk5FTF9DT01QTEVURURcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogSU1QT1JUX0NIQU5ORUxfRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvRmV0Y2hDaGFubmVsTGlzdE1pbmUocGFnZSA9IDEsIHBhZ2VTaXplID0gOTk5OTkpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3QgY2FsbGJhY2sgPSByZXNwb25zZSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHsgY2xhaW1zOiByZXNwb25zZS5pdGVtcyB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGJyeVByb3h5LmNoYW5uZWxfbGlzdCh7IHBhZ2UsIHBhZ2Vfc2l6ZTogcGFnZVNpemUgfSkudGhlbihjYWxsYmFjayk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ2xhaW1TZWFyY2gob3B0aW9ucyA9IHtcbiAgbm9fdG90YWxzOiB0cnVlLFxuICBwYWdlX3NpemU6IDEwLFxuICBwYWdlOiAxXG59KSB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTm9ybWFsaXplZENsYWltU2VhcmNoS2V5KG9wdGlvbnMpO1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENMQUlNX1NFQVJDSF9TVEFSVEVELFxuICAgICAgZGF0YTogeyBxdWVyeTogcXVlcnkgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgcmVzb2x2ZUluZm8gPSB7fTtcbiAgICAgIGNvbnN0IHVybHMgPSBbXTtcbiAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaChzdHJlYW0gPT4ge1xuICAgICAgICByZXNvbHZlSW5mb1tzdHJlYW0uY2Fub25pY2FsX3VybF0gPSB7IHN0cmVhbSB9O1xuICAgICAgICB1cmxzLnB1c2goc3RyZWFtLmNhbm9uaWNhbF91cmwpO1xuICAgICAgfSk7XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ0xBSU1fU0VBUkNIX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIHJlc29sdmVJbmZvLFxuICAgICAgICAgIHVybHMsXG4gICAgICAgICAgYXBwZW5kOiBvcHRpb25zLnBhZ2UgJiYgb3B0aW9ucy5wYWdlICE9PSAxLFxuICAgICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2Vfc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbHVyZSA9IGVyciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENMQUlNX1NFQVJDSF9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHsgcXVlcnkgfSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxicnlQcm94eS5jbGFpbV9zZWFyY2gob3B0aW9ucykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cblxuY29uc3Qgc2VsZWN0U3RhdGUkMyA9IHN0YXRlID0+IHN0YXRlLmZpbGVJbmZvIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RGaWxlSW5mb3NCeU91dHBvaW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMywgc3RhdGUgPT4gc3RhdGUuYnlPdXRwb2ludCB8fCB7fSk7XG5cbmNvbnN0IHNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmlzRmV0Y2hpbmdGaWxlTGlzdCk7XG5cbmNvbnN0IHNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdERvd25sb2FkZWRPclB1Ymxpc2hlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdElzRmV0Y2hpbmdGaWxlTGlzdCwgc2VsZWN0SXNGZXRjaGluZ0NsYWltTGlzdE1pbmUsIChpc0ZldGNoaW5nRmlsZUxpc3QsIGlzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lKSA9PiBpc0ZldGNoaW5nRmlsZUxpc3QgfHwgaXNGZXRjaGluZ0NsYWltTGlzdE1pbmUpO1xuXG5jb25zdCBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1zQnlVcmksIHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQsIChjbGFpbXMsIGJ5T3V0cG9pbnQpID0+IHtcbiAgY29uc3QgY2xhaW0gPSBjbGFpbXNbdXJpXTtcbiAgY29uc3Qgb3V0cG9pbnQgPSBjbGFpbSA/IGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gIDogdW5kZWZpbmVkO1xuICByZXR1cm4gb3V0cG9pbnQgPyBieU91dHBvaW50W291dHBvaW50XSA6IHVuZGVmaW5lZDtcbn0pO1xuXG5jb25zdCBzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQzLCBzdGF0ZSA9PiBzdGF0ZS5kb3dubG9hZGluZ0J5T3V0cG9pbnQgfHwge30pO1xuXG5jb25zdCBtYWtlU2VsZWN0RG93bmxvYWRpbmdGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RG93bmxvYWRpbmdCeU91dHBvaW50LCBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKSwgKGJ5T3V0cG9pbnQsIGZpbGVJbmZvKSA9PiB7XG4gIGlmICghZmlsZUluZm8pIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGJ5T3V0cG9pbnRbZmlsZUluZm8ub3V0cG9pbnRdO1xufSk7XG5cbmNvbnN0IHNlbGVjdFVyaXNMb2FkaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMywgc3RhdGUgPT4gc3RhdGUuZmV0Y2hpbmcgfHwge30pO1xuXG5jb25zdCBtYWtlU2VsZWN0TG9hZGluZ0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVcmlzTG9hZGluZywgbWFrZVNlbGVjdENsYWltRm9yVXJpKHVyaSksIChmZXRjaGluZ0J5T3V0cG9pbnQsIGNsYWltKSA9PiB7XG4gIGlmICghY2xhaW0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHR4aWQsIG5vdXQgfSA9IGNsYWltO1xuICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuICBjb25zdCBpc0ZldGNoaW5nID0gZmV0Y2hpbmdCeU91dHBvaW50W291dHBvaW50XTtcbiAgcmV0dXJuIGlzRmV0Y2hpbmc7XG59KTtcblxuY29uc3Qgc2VsZWN0RmlsZUluZm9zRG93bmxvYWRlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQsIHNlbGVjdE15Q2xhaW1zLCAoYnlPdXRwb2ludCwgbXlDbGFpbXMpID0+IE9iamVjdC52YWx1ZXMoYnlPdXRwb2ludCkucmV2ZXJzZSgpLmZpbHRlcihmaWxlSW5mbyA9PiB7XG4gIGNvbnN0IG15Q2xhaW1JZHMgPSBteUNsYWltcy5tYXAoY2xhaW0gPT4gY2xhaW0uY2xhaW1faWQpO1xuXG4gIHJldHVybiBmaWxlSW5mbyAmJiBteUNsYWltSWRzLmluZGV4T2YoZmlsZUluZm8uY2xhaW1faWQpID09PSAtMSAmJiAoZmlsZUluZm8uY29tcGxldGVkIHx8IGZpbGVJbmZvLndyaXR0ZW5fYnl0ZXMgPiAwIHx8IGZpbGVJbmZvLmJsb2JzX2NvbXBsZXRlZCA+IDApO1xufSkpO1xuXG4vLyBleHBvcnQgY29uc3Qgc2VsZWN0RmlsZUluZm9Gb3JVcmkgPSAoc3RhdGUsIHByb3BzKSA9PiB7XG4vLyAgIGNvbnN0IGNsYWltcyA9IHNlbGVjdENsYWltc0J5VXJpKHN0YXRlKSxcbi8vICAgICBjbGFpbSA9IGNsYWltc1twcm9wcy51cmldLFxuLy8gICAgIGZpbGVJbmZvcyA9IHNlbGVjdEFsbEZpbGVJbmZvcyhzdGF0ZSksXG4vLyAgICAgb3V0cG9pbnQgPSBjbGFpbSA/IGAke2NsYWltLnR4aWR9OiR7Y2xhaW0ubm91dH1gIDogdW5kZWZpbmVkO1xuXG4vLyAgIHJldHVybiBvdXRwb2ludCAmJiBmaWxlSW5mb3MgPyBmaWxlSW5mb3Nbb3V0cG9pbnRdIDogdW5kZWZpbmVkO1xuLy8gfTtcblxuY29uc3Qgc2VsZWN0RG93bmxvYWRpbmdGaWxlSW5mb3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQsIHNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQsIChkb3dubG9hZGluZ0J5T3V0cG9pbnQsIGZpbGVJbmZvc0J5T3V0cG9pbnQpID0+IHtcbiAgY29uc3Qgb3V0cG9pbnRzID0gT2JqZWN0LmtleXMoZG93bmxvYWRpbmdCeU91dHBvaW50KTtcbiAgY29uc3QgZmlsZUluZm9zID0gW107XG5cbiAgb3V0cG9pbnRzLmZvckVhY2gob3V0cG9pbnQgPT4ge1xuICAgIGNvbnN0IGZpbGVJbmZvID0gZmlsZUluZm9zQnlPdXRwb2ludFtvdXRwb2ludF07XG5cbiAgICBpZiAoZmlsZUluZm8pIGZpbGVJbmZvcy5wdXNoKGZpbGVJbmZvKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbGVJbmZvcztcbn0pO1xuXG5jb25zdCBzZWxlY3RUb3RhbERvd25sb2FkUHJvZ3Jlc3MgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3REb3dubG9hZGluZ0ZpbGVJbmZvcywgZmlsZUluZm9zID0+IHtcbiAgY29uc3QgcHJvZ3Jlc3MgPSBbXTtcblxuICBmaWxlSW5mb3MuZm9yRWFjaChmaWxlSW5mbyA9PiB7XG4gICAgcHJvZ3Jlc3MucHVzaChmaWxlSW5mby53cml0dGVuX2J5dGVzIC8gZmlsZUluZm8udG90YWxfYnl0ZXMgKiAxMDApO1xuICB9KTtcblxuICBjb25zdCB0b3RhbFByb2dyZXNzID0gcHJvZ3Jlc3MucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG5cbiAgaWYgKGZpbGVJbmZvcy5sZW5ndGggPiAwKSByZXR1cm4gdG90YWxQcm9ncmVzcyAvIGZpbGVJbmZvcy5sZW5ndGggLyAxMDAuMDtcbiAgcmV0dXJuIC0xO1xufSk7XG5cbmNvbnN0IHNlbGVjdEZpbGVMaXN0UHVibGlzaGVkU29ydCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmZpbGVMaXN0UHVibGlzaGVkU29ydCk7XG5cbmNvbnN0IHNlbGVjdEZpbGVMaXN0RG93bmxvYWRlZFNvcnQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQzLCBzdGF0ZSA9PiBzdGF0ZS5maWxlTGlzdERvd25sb2FkZWRTb3J0KTtcblxuY29uc3Qgc2VsZWN0RG93bmxvYWRlZFVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGaWxlSW5mb3NEb3dubG9hZGVkLFxuLy8gV2Ugc2hvdWxkIHVzZSBwZXJtYW1lbnRfdXJsIGJ1dCBpdCBkb2Vzbid0IGV4aXN0IGluIGZpbGVfbGlzdFxuaW5mbyA9PiBpbmZvLnNsaWNlKCkubWFwKGNsYWltID0+IGBsYnJ5Oi8vJHtjbGFpbS5jbGFpbV9uYW1lfSMke2NsYWltLmNsYWltX2lkfWApKTtcblxuY29uc3QgbWFrZVNlbGVjdE1lZGlhVHlwZUZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKSwgbWFrZVNlbGVjdENvbnRlbnRUeXBlRm9yVXJpKHVyaSksIChmaWxlSW5mbywgY29udGVudFR5cGUpID0+IHtcbiAgaWYgKCFmaWxlSW5mbyAmJiAhY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlSW5mbyAmJiBmaWxlSW5mby5maWxlX25hbWU7XG4gIHJldHVybiBsYnJ5UHJveHkuZ2V0TWVkaWFUeXBlKGNvbnRlbnRUeXBlLCBmaWxlTmFtZSk7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFVyaUlzU3RyZWFtYWJsZSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpKHVyaSksIG1lZGlhVHlwZSA9PiB7XG4gIGNvbnN0IGlzU3RyZWFtYWJsZSA9IFsnYXVkaW8nLCAndmlkZW8nLCAnaW1hZ2UnXS5pbmRleE9mKG1lZGlhVHlwZSkgIT09IC0xO1xuICByZXR1cm4gaXNTdHJlYW1hYmxlO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3REb3dubG9hZFBhdGhGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSksIGZpbGVJbmZvID0+IHtcbiAgcmV0dXJuIGZpbGVJbmZvICYmIGZpbGVJbmZvLmRvd25sb2FkX3BhdGg7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdEZpbGVQYXJ0bHlEb3dubG9hZGVkID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKG1ha2VTZWxlY3RGaWxlSW5mb0ZvclVyaSh1cmkpLCBmaWxlSW5mbyA9PiB7XG4gIGlmICghZmlsZUluZm8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZUluZm8ud3JpdHRlbl9ieXRlcyA+IDAgfHwgZmlsZUluZm8uYmxvYnNfY29tcGxldGVkID4gMDtcbn0pO1xuXG5jb25zdCBtYWtlU2VsZWN0RmlsZU5hbWVGb3JVcmkgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSksIGZpbGVJbmZvID0+IHtcbiAgcmV0dXJuIGZpbGVJbmZvICYmIGZpbGVJbmZvLmZpbGVfbmFtZTtcbn0pO1xuXG5jb25zdCBzZWxlY3REb3dubG9hZFVybHNDb3VudCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdERvd25sb2FkZWRVcmlzLCB1cmlzID0+IHVyaXMubGVuZ3RoKTtcblxuZnVuY3Rpb24gZmlsdGVyRmlsZUluZm9zKGZpbGVJbmZvcywgcXVlcnkpIHtcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnlNYXRjaFJlZ0V4cCA9IG5ldyBSZWdFeHAocXVlcnksICdpJyk7XG4gICAgcmV0dXJuIGZpbGVJbmZvcy5maWx0ZXIoZmlsZUluZm8gPT4ge1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gZmlsZUluZm87XG4gICAgICByZXR1cm4gbWV0YWRhdGEudGl0bGUgJiYgbWV0YWRhdGEudGl0bGUubWF0Y2gocXVlcnlNYXRjaFJlZ0V4cCkgfHwgZmlsZUluZm8uY2hhbm5lbF9uYW1lICYmIGZpbGVJbmZvLmNoYW5uZWxfbmFtZS5tYXRjaChxdWVyeU1hdGNoUmVnRXhwKSB8fCBmaWxlSW5mby5jbGFpbV9uYW1lICYmIGZpbGVJbmZvLmNsYWltX25hbWUubWF0Y2gocXVlcnlNYXRjaFJlZ0V4cCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmlsZUluZm9zO1xufVxuXG5jb25zdCBtYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzRm9yUGFnZSA9IChxdWVyeSwgcGFnZSA9IDEpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEZpbGVJbmZvc0Rvd25sb2FkZWQsIGZpbGVJbmZvcyA9PiB7XG4gIGNvbnN0IG1hdGNoaW5nRmlsZUluZm9zID0gZmlsdGVyRmlsZUluZm9zKGZpbGVJbmZvcywgcXVlcnkpO1xuICBjb25zdCBzdGFydCA9IChOdW1iZXIocGFnZSkgLSAxKSAqIE51bWJlcihQQUdFX1NJWkUpO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocGFnZSkgKiBOdW1iZXIoUEFHRV9TSVpFKTtcblxuICByZXR1cm4gbWF0Y2hpbmdGaWxlSW5mb3MgJiYgbWF0Y2hpbmdGaWxlSW5mb3MubGVuZ3RoID8gbWF0Y2hpbmdGaWxlSW5mb3Muc2xpY2Uoc3RhcnQsIGVuZCkubWFwKGZpbGVJbmZvID0+IGJ1aWxkVVJJKHtcbiAgICBzdHJlYW1OYW1lOiBmaWxlSW5mby5jbGFpbV9uYW1lLFxuICAgIGNoYW5uZWxOYW1lOiBmaWxlSW5mby5jaGFubmVsX25hbWUsXG4gICAgY2hhbm5lbENsYWltSWQ6IGZpbGVJbmZvLmNoYW5uZWxfY2xhaW1faWRcbiAgfSkpIDogW107XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdFNlYXJjaERvd25sb2FkVXJsc0NvdW50ID0gcXVlcnkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RmlsZUluZm9zRG93bmxvYWRlZCwgZmlsZUluZm9zID0+IHtcbiAgcmV0dXJuIGZpbGVJbmZvcyAmJiBmaWxlSW5mb3MubGVuZ3RoID8gZmlsdGVyRmlsZUluZm9zKGZpbGVJbmZvcywgcXVlcnkpLmxlbmd0aCA6IDA7XG59KTtcblxuLy8gICAgICBcblxuY29uc3Qgc2VsZWN0U3RhdGUkNCA9IHN0YXRlID0+IHN0YXRlLmZpbGUgfHwge307XG5cbmNvbnN0IHNlbGVjdFB1cmNoYXNlVXJpRXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNCwgc3RhdGUgPT4gc3RhdGUucHVyY2hhc2VVcmlFcnJvck1lc3NhZ2UpO1xuXG5jb25zdCBzZWxlY3RGYWlsZWRQdXJjaGFzZVVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ0LCBzdGF0ZSA9PiBzdGF0ZS5mYWlsZWRQdXJjaGFzZVVyaXMpO1xuXG5jb25zdCBzZWxlY3RQdXJjaGFzZWRVcmlzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNCwgc3RhdGUgPT4gc3RhdGUucHVyY2hhc2VkVXJpcyk7XG5cbmNvbnN0IHNlbGVjdExhc3RQdXJjaGFzZWRVcmkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ0LCBzdGF0ZSA9PiBzdGF0ZS5wdXJjaGFzZWRVcmlzLmxlbmd0aCA+IDAgPyBzdGF0ZS5wdXJjaGFzZWRVcmlzW3N0YXRlLnB1cmNoYXNlZFVyaXMubGVuZ3RoIC0gMV0gOiBudWxsKTtcblxuY29uc3QgbWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkodXJpKSwgZmlsZUluZm8gPT4ge1xuICByZXR1cm4gZmlsZUluZm8gJiYgZmlsZUluZm8uc3RyZWFtaW5nX3VybDtcbn0pO1xuXG4vLyAgICAgIFxuXG5mdW5jdGlvbiBkb0ZpbGVHZXQodXJpLCBzYXZlRmlsZSA9IHRydWUsIG9uU3VjY2Vzcykge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB7IG5vdXQsIHR4aWQgfSA9IG1ha2VTZWxlY3RDbGFpbUZvclVyaSh1cmkpKHN0YXRlKTtcbiAgICBjb25zdCBvdXRwb2ludCA9IGAke3R4aWR9OiR7bm91dH1gO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfRklMRV9JTkZPX1NUQVJURUQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG91dHBvaW50XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgc2F2ZV9maWxlIGFyZ3VtZW50IHRvIFRydWUgdG8gc2F2ZSB0aGUgZmlsZSAob2xkIGJlaGF2aW91cilcbiAgICBsYnJ5UHJveHkuZ2V0KHsgdXJpLCBzYXZlX2ZpbGU6IHNhdmVGaWxlIH0pLnRoZW4oc3RyZWFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc3RyZWFtSW5mbyA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyZWFtSW5mbyAhPT0gJ29iamVjdCcgfHwgc3RyZWFtSW5mby5lcnJvciA9PT0gJ1RpbWVvdXQnO1xuXG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogRkVUQ0hfRklMRV9JTkZPX0ZBSUxFRCxcbiAgICAgICAgICBkYXRhOiB7IG91dHBvaW50IH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlzcGF0Y2goZG9Ub2FzdCh7IG1lc3NhZ2U6IGBGaWxlIHRpbWVvdXQgZm9yIHVyaSAke3VyaX1gLCBpc0Vycm9yOiB0cnVlIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHB1cmNoYXNlIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBQVVJDSEFTRV9VUklfQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHsgdXJpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBGRVRDSF9GSUxFX0lORk9fQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZpbGVJbmZvOiBzdHJlYW1JbmZvLFxuICAgICAgICAgICAgb3V0cG9pbnQ6IHN0cmVhbUluZm8ub3V0cG9pbnRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBvblN1Y2Nlc3Moc3RyZWFtSW5mbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFBVUkNIQVNFX1VSSV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHsgdXJpIH1cbiAgICAgIH0pO1xuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZJTEVfSU5GT19GQUlMRUQsXG4gICAgICAgIGRhdGE6IHsgb3V0cG9pbnQgfVxuICAgICAgfSk7XG5cbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHZpZXcgJHt1cml9LCBwbGVhc2UgdHJ5IGFnYWluLiBJZiB0aGlzIHByb2JsZW0gcGVyc2lzdHMsIHZpc2l0IGh0dHBzOi8vbGJyeS5jb20vZmFxL3N1cHBvcnQgZm9yIHN1cHBvcnQuYCxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1B1cmNoYXNlVXJpKHVyaSwgY29zdEluZm8sIHNhdmVGaWxlID0gdHJ1ZSwgb25TdWNjZXNzKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUFVSQ0hBU0VfVVJJX1NUQVJURUQsXG4gICAgICBkYXRhOiB7IHVyaSB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgYmFsYW5jZSA9IHNlbGVjdEJhbGFuY2Uoc3RhdGUpO1xuICAgIGNvbnN0IGZpbGVJbmZvID0gbWFrZVNlbGVjdEZpbGVJbmZvRm9yVXJpKHVyaSkoc3RhdGUpO1xuICAgIGNvbnN0IGRvd25sb2FkaW5nQnlPdXRwb2ludCA9IHNlbGVjdERvd25sb2FkaW5nQnlPdXRwb2ludChzdGF0ZSk7XG4gICAgY29uc3QgYWxyZWFkeURvd25sb2FkaW5nID0gZmlsZUluZm8gJiYgISFkb3dubG9hZGluZ0J5T3V0cG9pbnRbZmlsZUluZm8ub3V0cG9pbnRdO1xuICAgIGNvbnN0IGFscmVhZHlTdHJlYW1pbmcgPSBtYWtlU2VsZWN0U3RyZWFtaW5nVXJsRm9yVXJpKHVyaSkoc3RhdGUpO1xuXG4gICAgaWYgKCFzYXZlRmlsZSAmJiAoYWxyZWFkeURvd25sb2FkaW5nIHx8IGFscmVhZHlTdHJlYW1pbmcpKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFBVUkNIQVNFX1VSSV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHsgdXJpLCBlcnJvcjogYEFscmVhZHkgZmV0Y2hpbmcgdXJpOiAke3VyaX1gIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29zdCB9ID0gY29zdEluZm87XG4gICAgaWYgKHBhcnNlRmxvYXQoY29zdCkgPiBiYWxhbmNlKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFBVUkNIQVNFX1VSSV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IHsgdXJpLCBlcnJvcjogJ0luc3VmZmljaWVudCBjcmVkaXRzJyB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaXNwYXRjaChkb0ZpbGVHZXQodXJpLCBzYXZlRmlsZSwgb25TdWNjZXNzKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvRGVsZXRlUHVyY2hhc2VkVXJpKHVyaSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IERFTEVURV9QVVJDSEFTRURfVVJJLFxuICAgIGRhdGE6IHsgdXJpIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9GZXRjaEZpbGVJbmZvKHVyaSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBjbGFpbSA9IHNlbGVjdENsYWltc0J5VXJpKHN0YXRlKVt1cmldO1xuICAgIGNvbnN0IG91dHBvaW50ID0gY2xhaW0gPyBgJHtjbGFpbS50eGlkfToke2NsYWltLm5vdXR9YCA6IG51bGw7XG4gICAgY29uc3QgYWxyZWFkeUZldGNoaW5nID0gISFzZWxlY3RVcmlzTG9hZGluZyhzdGF0ZSlbdXJpXTtcblxuICAgIGlmICghYWxyZWFkeUZldGNoaW5nKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZJTEVfSU5GT19TVEFSVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cG9pbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxicnlQcm94eS5maWxlX2xpc3QoeyBvdXRwb2ludCwgZnVsbF9zdGF0dXM6IHRydWUsIHBhZ2U6IDEsIHBhZ2Vfc2l6ZTogMSB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgaXRlbXM6IGZpbGVJbmZvcyB9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBmaWxlSW5mbyA9IGZpbGVJbmZvc1swXTtcblxuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBvdXRwb2ludCxcbiAgICAgICAgICAgIGZpbGVJbmZvOiBmaWxlSW5mbyB8fCBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9GaWxlTGlzdChwYWdlID0gMSwgcGFnZVNpemUgPSA5OTk5OSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBpc0ZldGNoaW5nID0gc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0KHN0YXRlKTtcblxuICAgIGlmICghaXNGZXRjaGluZykge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGSUxFX0xJU1RfU1RBUlRFRFxuICAgICAgfSk7XG5cbiAgICAgIGxicnlQcm94eS5maWxlX2xpc3QoeyBwYWdlLCBwYWdlX3NpemU6IHBhZ2VTaXplIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBpdGVtczogZmlsZUluZm9zIH0gPSByZXN1bHQ7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBGSUxFX0xJU1RfU1VDQ0VFREVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZpbGVJbmZvczogZmlsZUluZm9zXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9GZXRjaEZpbGVJbmZvc0FuZFB1Ymxpc2hlZENsYWltcygpIHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgaXNGZXRjaGluZ0NsYWltTGlzdE1pbmUgPSBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZShzdGF0ZSk7XG4gICAgY29uc3QgaXNGZXRjaGluZ0ZpbGVJbmZvID0gc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0KHN0YXRlKTtcblxuICAgIGlmICghaXNGZXRjaGluZ0NsYWltTGlzdE1pbmUpIGRpc3BhdGNoKGRvRmV0Y2hDbGFpbUxpc3RNaW5lKCkpO1xuICAgIGlmICghaXNGZXRjaGluZ0ZpbGVJbmZvKSBkaXNwYXRjaChkb0ZpbGVMaXN0KCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkb1NldEZpbGVMaXN0U29ydChwYWdlLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNFVF9GSUxFX0xJU1RfU09SVCxcbiAgICBkYXRhOiB7IHBhZ2UsIHZhbHVlIH1cbiAgfTtcbn1cblxudmFyIF9leHRlbmRzJDYgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMihvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuY29uc3Qgc2VsZWN0U3RhdGUkNSA9IHN0YXRlID0+IHN0YXRlLnB1Ymxpc2ggfHwge307XG5cbi8vIElzIHRoZSBjdXJyZW50IHVyaSB0aGUgc2FtZSBhcyB0aGUgdXJpIHRoZXkgY2xpY2tlZCBcImVkaXRcIiBvblxuY29uc3Qgc2VsZWN0SXNTdGlsbEVkaXRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ1LCBwdWJsaXNoU3RhdGUgPT4ge1xuICBjb25zdCB7IGVkaXRpbmdVUkksIHVyaSB9ID0gcHVibGlzaFN0YXRlO1xuXG4gIGlmICghZWRpdGluZ1VSSSB8fCAhdXJpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzQ2hhbm5lbDogY3VycmVudElzQ2hhbm5lbCxcbiAgICBzdHJlYW1OYW1lOiBjdXJyZW50Q2xhaW1OYW1lLFxuICAgIGNoYW5uZWxOYW1lOiBjdXJyZW50Q29udGVudE5hbWVcbiAgfSA9IHBhcnNlVVJJKHVyaSk7XG4gIGNvbnN0IHtcbiAgICBpc0NoYW5uZWw6IGVkaXRJc0NoYW5uZWwsXG4gICAgc3RyZWFtTmFtZTogZWRpdENsYWltTmFtZSxcbiAgICBjaGFubmVsTmFtZTogZWRpdENvbnRlbnROYW1lXG4gIH0gPSBwYXJzZVVSSShlZGl0aW5nVVJJKTtcblxuICAvLyBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzL2N1cnJlbnQgdXNlIG9mIGEgY2hhbm5lbCwgd2UgbmVlZCB0byBjb21wYXJlIGRpZmZlcmVudCB0aGluZ3NcbiAgLy8gZXg6IGdvaW5nIGZyb20gYSBjaGFubmVsIHRvIGFub255bW91cywgdGhlIG5ldyB1cmkgd29uJ3QgcmV0dXJuIGNvbnRlbnROYW1lLCBzbyB3ZSBuZWVkIHRvIHVzZSBjbGFpbU5hbWVcbiAgY29uc3QgY3VycmVudE5hbWUgPSBjdXJyZW50SXNDaGFubmVsID8gY3VycmVudENvbnRlbnROYW1lIDogY3VycmVudENsYWltTmFtZTtcbiAgY29uc3QgZWRpdE5hbWUgPSBlZGl0SXNDaGFubmVsID8gZWRpdENvbnRlbnROYW1lIDogZWRpdENsYWltTmFtZTtcbiAgcmV0dXJuIGN1cnJlbnROYW1lID09PSBlZGl0TmFtZTtcbn0pO1xuXG5jb25zdCBzZWxlY3RQdWJsaXNoRm9ybVZhbHVlcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDUsIHNlbGVjdElzU3RpbGxFZGl0aW5nLCAoc3RhdGUsIGlzU3RpbGxFZGl0aW5nKSA9PiB7XG4gIGNvbnN0IHsgcGVuZGluZ1B1Ymxpc2gsIGxhbmd1YWdlLCBsYW5ndWFnZXMgfSA9IHN0YXRlLFxuICAgICAgICBmb3JtVmFsdWVzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJDIoc3RhdGUsIFsncGVuZGluZ1B1Ymxpc2gnLCAnbGFuZ3VhZ2UnLCAnbGFuZ3VhZ2VzJ10pO1xuXG4gIGxldCBhY3R1YWxMYW5ndWFnZTtcbiAgLy8gU2V0cyBkZWZhdWx0IGlmIGVkaXRpbmcgYSBjbGFpbSB3aXRoIGEgc2V0IGxhbmd1YWdlXG4gIGlmICghbGFuZ3VhZ2UgJiYgaXNTdGlsbEVkaXRpbmcgJiYgbGFuZ3VhZ2VzICYmIGxhbmd1YWdlc1swXSkge1xuICAgIGFjdHVhbExhbmd1YWdlID0gbGFuZ3VhZ2VzWzBdO1xuICB9IGVsc2Uge1xuICAgIGFjdHVhbExhbmd1YWdlID0gbGFuZ3VhZ2UgfHwgJ2VuJztcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMkNih7fSwgZm9ybVZhbHVlcywgeyBsYW5ndWFnZTogYWN0dWFsTGFuZ3VhZ2UgfSk7XG59KTtcbmNvbnN0IG1ha2VTZWxlY3RQdWJsaXNoRm9ybVZhbHVlID0gaXRlbSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ1LCBzdGF0ZSA9PiBzdGF0ZVtpdGVtXSk7XG5cbmNvbnN0IHNlbGVjdE15Q2xhaW1Gb3JVcmkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RQdWJsaXNoRm9ybVZhbHVlcywgc2VsZWN0SXNTdGlsbEVkaXRpbmcsIHNlbGVjdENsYWltc0J5SWQsIHNlbGVjdE15Q2xhaW1zV2l0aG91dENoYW5uZWxzLCAoeyBlZGl0aW5nVVJJLCB1cmkgfSwgaXNTdGlsbEVkaXRpbmcsIGNsYWltc0J5SWQsIG15Q2xhaW1zKSA9PiB7XG4gIGNvbnN0IHsgY2hhbm5lbE5hbWU6IGNvbnRlbnROYW1lLCBzdHJlYW1OYW1lOiBjbGFpbU5hbWUgfSA9IHBhcnNlVVJJKHVyaSk7XG4gIGNvbnN0IHsgc3RyZWFtQ2xhaW1JZDogZWRpdENsYWltSWQgfSA9IHBhcnNlVVJJKGVkaXRpbmdVUkkpO1xuXG4gIC8vIElmIGlzU3RpbGxFZGl0aW5nXG4gIC8vIFRoZXkgY2xpY2tlZCBcImVkaXRcIiBmcm9tIHRoZSBmaWxlIHBhZ2VcbiAgLy8gVGhleSBoYXZlbid0IGNoYW5nZWQgdGhlIGNoYW5uZWwvbmFtZSBhZnRlciBjbGlja2luZyBlZGl0XG4gIC8vIEdldCB0aGUgY2xhaW0gc28gdGhleSBjYW4gZWRpdCB3aXRob3V0IHJlLXVwbG9hZGluZyBhIG5ldyBmaWxlXG4gIHJldHVybiBpc1N0aWxsRWRpdGluZyA/IGNsYWltc0J5SWRbZWRpdENsYWltSWRdIDogbXlDbGFpbXMuZmluZChjbGFpbSA9PiAhY29udGVudE5hbWUgPyBjbGFpbS5uYW1lID09PSBjbGFpbU5hbWUgOiBjbGFpbS5uYW1lID09PSBjb250ZW50TmFtZSB8fCBjbGFpbS5uYW1lID09PSBjbGFpbU5hbWUpO1xufSk7XG5cbmNvbnN0IHNlbGVjdElzUmVzb2x2aW5nUHVibGlzaFVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ1LCBzZWxlY3RSZXNvbHZpbmdVcmlzLCAoeyB1cmksIG5hbWUgfSwgcmVzb2x2aW5nVXJpcykgPT4ge1xuICBpZiAodXJpKSB7XG4gICAgY29uc3QgaXNSZXNvbHZpbmdVcmkgPSByZXNvbHZpbmdVcmlzLmluY2x1ZGVzKHVyaSk7XG4gICAgY29uc3QgeyBpc0NoYW5uZWwgfSA9IHBhcnNlVVJJKHVyaSk7XG5cbiAgICBsZXQgaXNSZXNvbHZpbmdTaG9ydFVyaTtcbiAgICBpZiAoaXNDaGFubmVsICYmIG5hbWUpIHtcbiAgICAgIGNvbnN0IHNob3J0VXJpID0gYnVpbGRVUkkoeyBzdHJlYW1OYW1lOiBuYW1lIH0pO1xuICAgICAgaXNSZXNvbHZpbmdTaG9ydFVyaSA9IHJlc29sdmluZ1VyaXMuaW5jbHVkZXMoc2hvcnRVcmkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1Jlc29sdmluZ1VyaSB8fCBpc1Jlc29sdmluZ1Nob3J0VXJpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5cbmNvbnN0IHNlbGVjdFRha2VPdmVyQW1vdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNSwgc2VsZWN0TXlDbGFpbUZvclVyaSwgc2VsZWN0Q2xhaW1zQnlVcmksICh7IG5hbWUgfSwgbXlDbGFpbUZvclVyaSwgY2xhaW1zQnlVcmkpID0+IHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHdpbm5pbmcgY2xhaW0gZm9yIHRoZSBzaG9ydCB1cmlcbiAgY29uc3Qgc2hvcnRVcmkgPSBidWlsZFVSSSh7IHN0cmVhbU5hbWU6IG5hbWUgfSk7XG4gIGNvbnN0IGNsYWltRm9yU2hvcnRVcmkgPSBjbGFpbXNCeVVyaVtzaG9ydFVyaV07XG5cbiAgaWYgKCFteUNsYWltRm9yVXJpICYmIGNsYWltRm9yU2hvcnRVcmkpIHtcbiAgICByZXR1cm4gY2xhaW1Gb3JTaG9ydFVyaS5tZXRhLmVmZmVjdGl2ZV9hbW91bnQ7XG4gIH0gZWxzZSBpZiAobXlDbGFpbUZvclVyaSAmJiBjbGFpbUZvclNob3J0VXJpKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5L2lzc3Vlcy8xNDc2XG4gICAgLy8gV2Ugc2hvdWxkIGNoZWNrIHRoZSBjdXJyZW50IGVmZmVjdGl2ZV9hbW91bnQgb24gbXkgY2xhaW0gdG8gc2VlIGhvdyBtdWNoIGFkZGl0aW9uYWwgbGJjXG4gICAgLy8gaXMgbmVlZGVkIHRvIHdpbiB0aGUgY2xhaW0uIEN1cnJlbnRseSB0aGlzIGlzIG5vdCBwb3NzaWJsZSBkdXJpbmcgYSB0YWtlb3Zlci5cbiAgICAvLyBXaXRoIHRoaXMsIHdlIGNvdWxkIHNheSBzb21ldGhpbmcgbGlrZSwgXCJZb3UgaGF2ZSB4IGxiYyBpbiBzdXBwb3J0LCBpZiB5b3UgYmlkIHkgYWRkaXRpb25hbCBMQkMgeW91IHdpbGwgY29udHJvbCB0aGUgY2xhaW1cIlxuICAgIC8vIEZvciBub3cganVzdCBpZ25vcmUgc3VwcG9ydHMuIFdlIHdpbGwganVzdCBzaG93IHRoZSB3aW5uaW5nIGNsYWltJ3MgYmlkIGFtb3VudFxuICAgIHJldHVybiBjbGFpbUZvclNob3J0VXJpLm1ldGEuZWZmZWN0aXZlX2Ftb3VudCB8fCBjbGFpbUZvclNob3J0VXJpLmFtb3VudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSk7XG5cbnZhciBfZXh0ZW5kcyQ3ID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZG9SZXNldFRodW1ibmFpbFN0YXR1cyA9ICgpID0+IGRpc3BhdGNoID0+IHtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gICAgZGF0YToge1xuICAgICAgdGh1bWJuYWlsUGF0aDogJydcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmZXRjaChTUEVFQ0hfU1RBVFVTKS50aGVuKHJlcyA9PiByZXMuanNvbigpKS50aGVuKHN0YXR1cyA9PiB7XG4gICAgaWYgKHN0YXR1cy5kaXNhYmxlZCkge1xuICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzOiBSRUFEWSxcbiAgICAgICAgdGh1bWJuYWlsOiAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9KS5jYXRjaCgoKSA9PiBkaXNwYXRjaCh7XG4gICAgdHlwZTogVVBEQVRFX1BVQkxJU0hfRk9STSxcbiAgICBkYXRhOiB7XG4gICAgICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IEFQSV9ET1dOLFxuICAgICAgdGh1bWJuYWlsOiAnJ1xuICAgIH1cbiAgfSkpO1xufTtcblxuY29uc3QgZG9DbGVhclB1Ymxpc2ggPSAoKSA9PiBkaXNwYXRjaCA9PiB7XG4gIGRpc3BhdGNoKHsgdHlwZTogQ0xFQVJfUFVCTElTSCB9KTtcbiAgcmV0dXJuIGRpc3BhdGNoKGRvUmVzZXRUaHVtYm5haWxTdGF0dXMoKSk7XG59O1xuXG5jb25zdCBkb1VwZGF0ZVB1Ymxpc2hGb3JtID0gcHVibGlzaEZvcm1WYWx1ZSA9PiBkaXNwYXRjaCA9PiBkaXNwYXRjaCh7XG4gIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gIGRhdGE6IF9leHRlbmRzJDcoe30sIHB1Ymxpc2hGb3JtVmFsdWUpXG59KTtcblxuY29uc3QgZG9VcGxvYWRUaHVtYm5haWwgPSAoZmlsZVBhdGgsIHRodW1ibmFpbEJsb2IsIGZzQWRhcHRlciwgZnMsIHBhdGgpID0+IGRpc3BhdGNoID0+IHtcbiAgbGV0IHRodW1ibmFpbCwgZmlsZUV4dCwgZmlsZU5hbWUsIGZpbGVUeXBlO1xuXG4gIGNvbnN0IG1ha2VpZCA9ICgpID0+IHtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGNvbnN0IHBvc3NpYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI0OyBpICs9IDEpIHRleHQgKz0gcG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKSk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH07XG5cbiAgY29uc3QgdXBsb2FkRXJyb3IgPSAoZXJyb3IgPSAnJykgPT4ge1xuICAgIGRpc3BhdGNoKGJhdGNoQWN0aW9ucyh7XG4gICAgICB0eXBlOiBVUERBVEVfUFVCTElTSF9GT1JNLFxuICAgICAgZGF0YToge1xuICAgICAgICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IFJFQURZLFxuICAgICAgICB0aHVtYm5haWw6ICcnLFxuICAgICAgICBuc2Z3OiBmYWxzZVxuICAgICAgfVxuICAgIH0sIGRvRXJyb3IoZXJyb3IpKSk7XG4gIH07XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gICAgZGF0YTogeyB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IElOX1BST0dSRVNTIH1cbiAgfSk7XG5cbiAgaWYgKGZzQWRhcHRlciAmJiBmc0FkYXB0ZXIucmVhZEZpbGUgJiYgZmlsZVBhdGgpIHtcbiAgICBmc0FkYXB0ZXIucmVhZEZpbGUoZmlsZVBhdGgsICdiYXNlNjQnKS50aGVuKGJhc2U2NEltYWdlID0+IHtcbiAgICAgIGZpbGVFeHQgPSAncG5nJztcbiAgICAgIGZpbGVOYW1lID0gJ3RodW1ibmFpbC5wbmcnO1xuICAgICAgZmlsZVR5cGUgPSAnaW1hZ2UvcG5nJztcblxuICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgbmFtZSA9IG1ha2VpZCgpO1xuICAgICAgZGF0YS5hcHBlbmQoJ25hbWUnLCBuYW1lKTtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgeyB1cmk6ICdmaWxlOi8vJyArIGZpbGVQYXRoLCB0eXBlOiBmaWxlVHlwZSwgbmFtZTogZmlsZU5hbWUgfSk7XG5cbiAgICAgIHJldHVybiBmZXRjaChTUEVFQ0hfUFVCTElTSCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YVxuICAgICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpLnRoZW4oanNvbiA9PiBqc29uLnN1Y2Nlc3MgPyBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IENPTVBMRVRFLFxuICAgICAgICAgIHRodW1ibmFpbDogYCR7anNvbi5kYXRhLnVybH0uJHtmaWxlRXh0fWBcbiAgICAgICAgfVxuICAgICAgfSkgOiB1cGxvYWRFcnJvcihqc29uLm1lc3NhZ2UpKS5jYXRjaChlcnIgPT4gdXBsb2FkRXJyb3IoZXJyLm1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZmlsZVBhdGggJiYgZnMgJiYgcGF0aCkge1xuICAgICAgdGh1bWJuYWlsID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKTtcbiAgICAgIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xuICAgICAgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcbiAgICAgIGZpbGVUeXBlID0gYGltYWdlLyR7ZmlsZUV4dC5zbGljZSgxKX1gO1xuICAgIH0gZWxzZSBpZiAodGh1bWJuYWlsQmxvYikge1xuICAgICAgZmlsZUV4dCA9IGAuJHt0aHVtYm5haWxCbG9iLnR5cGUgJiYgdGh1bWJuYWlsQmxvYi50eXBlLnNwbGl0KCcvJylbMV19YDtcbiAgICAgIGZpbGVOYW1lID0gdGh1bWJuYWlsQmxvYi5uYW1lO1xuICAgICAgZmlsZVR5cGUgPSB0aHVtYm5haWxCbG9iLnR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBuYW1lID0gbWFrZWlkKCk7XG4gICAgY29uc3QgZmlsZSA9IHRodW1ibmFpbEJsb2IgfHwgdGh1bWJuYWlsICYmIG5ldyBGaWxlKFt0aHVtYm5haWxdLCBmaWxlTmFtZSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcbiAgICBkYXRhLmFwcGVuZCgnbmFtZScsIG5hbWUpO1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuXG4gICAgcmV0dXJuIGZldGNoKFNQRUVDSF9QVUJMSVNILCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGFcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSkudGhlbihqc29uID0+IGpzb24uc3VjY2VzcyA/IGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVQREFURV9QVUJMSVNIX0ZPUk0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHVwbG9hZFRodW1ibmFpbFN0YXR1czogQ09NUExFVEUsXG4gICAgICAgIHRodW1ibmFpbDogYCR7anNvbi5kYXRhLnVybH0ke2ZpbGVFeHR9YFxuICAgICAgfVxuICAgIH0pIDogdXBsb2FkRXJyb3IoanNvbi5tZXNzYWdlKSkuY2F0Y2goZXJyID0+IHVwbG9hZEVycm9yKGVyci5tZXNzYWdlKSk7XG4gIH1cbn07XG5cbmNvbnN0IGRvUHJlcGFyZUVkaXQgPSAoY2xhaW0sIHVyaSwgZmlsZUluZm8sIGZzKSA9PiBkaXNwYXRjaCA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgYW1vdW50LCB2YWx1ZSA9IHt9IH0gPSBjbGFpbTtcbiAgY29uc3QgY2hhbm5lbE5hbWUgPSBjbGFpbSAmJiBjbGFpbS5zaWduaW5nX2NoYW5uZWwgJiYgY2xhaW0uc2lnbmluZ19jaGFubmVsLm5hbWUgfHwgbnVsbDtcbiAgY29uc3Qge1xuICAgIGF1dGhvcixcbiAgICBkZXNjcmlwdGlvbixcbiAgICAvLyB1c2Ugc2FtZSB2YWx1ZXMgYXMgZGVmYXVsdCBzdGF0ZVxuICAgIC8vIGZlZSB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgZnJlZSBjb250ZW50XG4gICAgZmVlID0ge1xuICAgICAgYW1vdW50OiAnMCcsXG4gICAgICBjdXJyZW5jeTogJ0xCQydcbiAgICB9LFxuICAgIGxhbmd1YWdlcyxcbiAgICBsaWNlbnNlLFxuICAgIGxpY2Vuc2VfdXJsOiBsaWNlbnNlVXJsLFxuICAgIHRodW1ibmFpbCxcbiAgICB0aXRsZSxcbiAgICB0YWdzXG4gIH0gPSB2YWx1ZTtcblxuICBjb25zdCBwdWJsaXNoRGF0YSA9IHtcbiAgICBuYW1lLFxuICAgIGJpZDogYW1vdW50LFxuICAgIGNvbnRlbnRJc0ZyZWU6IGZlZS5hbW91bnQgPT09ICcwJyxcbiAgICBhdXRob3IsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgZmVlLFxuICAgIGxhbmd1YWdlcyxcbiAgICB0aHVtYm5haWw6IHRodW1ibmFpbCA/IHRodW1ibmFpbC51cmwgOiBudWxsLFxuICAgIHRpdGxlLFxuICAgIHVyaSxcbiAgICB1cGxvYWRUaHVtYm5haWxTdGF0dXM6IHRodW1ibmFpbCA/IE1BTlVBTCA6IHVuZGVmaW5lZCxcbiAgICBsaWNlbnNlVXJsLFxuICAgIG5zZnc6IGlzQ2xhaW1Oc2Z3KGNsYWltKSxcbiAgICB0YWdzOiB0YWdzID8gdGFncy5tYXAodGFnID0+ICh7IG5hbWU6IHRhZyB9KSkgOiBbXVxuICB9O1xuXG4gIC8vIE1ha2Ugc3VyZSBjdXN0b20gbGljZW5zZXMgYXJlIG1hcHBlZCBwcm9wZXJseVxuICAvLyBJZiB0aGUgbGljZW5zZSBpc24ndCBvbmUgb2YgdGhlIHN0YW5kYXJkIGxpY2Vuc2VzLCBtYXAgdGhlIGN1c3RvbSBsaWNlbnNlIGFuZCBkZXNjcmlwdGlvbi91cmxcbiAgaWYgKCFDQ19MSUNFTlNFUy5zb21lKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBsaWNlbnNlKSkge1xuICAgIGlmICghbGljZW5zZSB8fCBsaWNlbnNlID09PSBOT05FIHx8IGxpY2Vuc2UgPT09IFBVQkxJQ19ET01BSU4pIHtcbiAgICAgIHB1Ymxpc2hEYXRhLmxpY2Vuc2VUeXBlID0gbGljZW5zZTtcbiAgICB9IGVsc2UgaWYgKGxpY2Vuc2UgJiYgIWxpY2Vuc2VVcmwgJiYgbGljZW5zZSAhPT0gTk9ORSkge1xuICAgICAgcHVibGlzaERhdGEubGljZW5zZVR5cGUgPSBDT1BZUklHSFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1Ymxpc2hEYXRhLmxpY2Vuc2VUeXBlID0gT1RIRVI7XG4gICAgfVxuXG4gICAgcHVibGlzaERhdGEub3RoZXJMaWNlbnNlRGVzY3JpcHRpb24gPSBsaWNlbnNlO1xuICB9IGVsc2Uge1xuICAgIHB1Ymxpc2hEYXRhLmxpY2Vuc2VUeXBlID0gbGljZW5zZTtcbiAgfVxuICBpZiAoY2hhbm5lbE5hbWUpIHtcbiAgICBwdWJsaXNoRGF0YVsnY2hhbm5lbCddID0gY2hhbm5lbE5hbWU7XG4gIH1cblxuICBkaXNwYXRjaCh7IHR5cGU6IERPX1BSRVBBUkVfRURJVCwgZGF0YTogcHVibGlzaERhdGEgfSk7XG59O1xuXG5jb25zdCBkb1B1Ymxpc2ggPSAoc3VjY2VzcywgZmFpbCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBkaXNwYXRjaCh7IHR5cGU6IFBVQkxJU0hfU1RBUlQgfSk7XG5cbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBteUNsYWltRm9yVXJpID0gc2VsZWN0TXlDbGFpbUZvclVyaShzdGF0ZSk7XG4gIGNvbnN0IG15Q2hhbm5lbHMgPSBzZWxlY3RNeUNoYW5uZWxDbGFpbXMoc3RhdGUpO1xuICBjb25zdCBteUNsYWltcyA9IHNlbGVjdE15Q2xhaW1zV2l0aG91dENoYW5uZWxzKHN0YXRlKTtcbiAgLy8gZ2V0IHJlZHV4IHB1Ymxpc2ggZm9ybVxuICBjb25zdCBwdWJsaXNoRGF0YSA9IHNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzKHN0YXRlKTtcblxuICAvLyBkZXN0cnVjdHVyZSB0aGUgZGF0YSB2YWx1ZXNcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgYmlkLFxuICAgIGZpbGVQYXRoLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGxhbmd1YWdlLFxuICAgIGxpY2Vuc2UsXG4gICAgbGljZW5zZVVybCxcbiAgICBsaWNlbnNlVHlwZSxcbiAgICBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbixcbiAgICB0aHVtYm5haWwsXG4gICAgY2hhbm5lbCxcbiAgICB0aXRsZSxcbiAgICBjb250ZW50SXNGcmVlLFxuICAgIGZlZSxcbiAgICB1cmksXG4gICAgdGFncyxcbiAgICBsb2NhdGlvbnNcbiAgfSA9IHB1Ymxpc2hEYXRhO1xuICAvLyBIYW5kbGUgc2NlbmFyaW8gd2hlcmUgd2UgaGF2ZSBhIGNsYWltIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBjaGFubmVsIHdlIGFyZSBwdWJsaXNoaW5nIHdpdGguXG4gIGNvbnN0IG15Q2xhaW1Gb3JVcmlFZGl0aW5nID0gbXlDbGFpbUZvclVyaSAmJiBteUNsYWltRm9yVXJpLm5hbWUgPT09IG5hbWUgPyBteUNsYWltRm9yVXJpIDogbnVsbDtcblxuICBsZXQgcHVibGlzaGluZ0xpY2Vuc2U7XG4gIHN3aXRjaCAobGljZW5zZVR5cGUpIHtcbiAgICBjYXNlIENPUFlSSUdIVDpcbiAgICBjYXNlIE9USEVSOlxuICAgICAgcHVibGlzaGluZ0xpY2Vuc2UgPSBvdGhlckxpY2Vuc2VEZXNjcmlwdGlvbjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwdWJsaXNoaW5nTGljZW5zZSA9IGxpY2Vuc2VUeXBlO1xuICB9XG5cbiAgLy8gZ2V0IHRoZSBjbGFpbSBpZCBmcm9tIHRoZSBjaGFubmVsIG5hbWUsIHdlIHdpbGwgdXNlIHRoYXQgaW5zdGVhZFxuICBjb25zdCBuYW1lZENoYW5uZWxDbGFpbSA9IG15Q2hhbm5lbHMgPyBteUNoYW5uZWxzLmZpbmQobXlDaGFubmVsID0+IG15Q2hhbm5lbC5uYW1lID09PSBjaGFubmVsKSA6IG51bGw7XG4gIGNvbnN0IGNoYW5uZWxJZCA9IG5hbWVkQ2hhbm5lbENsYWltID8gbmFtZWRDaGFubmVsQ2xhaW0uY2xhaW1faWQgOiAnJztcblxuICBjb25zdCBwdWJsaXNoUGF5bG9hZCA9IHtcbiAgICBuYW1lLFxuICAgIHRpdGxlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGxvY2F0aW9uczogW10sXG4gICAgYmlkOiBjcmVkaXRzVG9TdHJpbmcoYmlkKSxcbiAgICBsYW5ndWFnZXM6IFtsYW5ndWFnZV0sXG4gICAgdGFnczogdGFncyAmJiB0YWdzLm1hcCh0YWcgPT4gdGFnLm5hbWUpLFxuICAgIHRodW1ibmFpbF91cmw6IHRodW1ibmFpbCxcbiAgICBibG9ja2luZzogdHJ1ZVxuICB9O1xuICAvLyBUZW1wb3Jhcnkgc29sdXRpb24gdG8ga2VlcCB0aGUgc2FtZSBwdWJsaXNoIGZsb3cgd2l0aCB0aGUgbmV3IHRhZ3MgYXBpXG4gIC8vIEV2ZW50dWFsbHkgd2Ugd2lsbCBhbGxvdyB1c2VycyB0byBlbnRlciB0aGVpciBvd24gdGFncyBvbiBwdWJsaXNoXG4gIC8vIGBuc2Z3YCB3aWxsIHByb2JhYmx5IGJlIHJlbW92ZWRcblxuICBpZiAocHVibGlzaGluZ0xpY2Vuc2UpIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5saWNlbnNlID0gcHVibGlzaGluZ0xpY2Vuc2U7XG4gIH1cblxuICBpZiAobGljZW5zZVVybCkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLmxpY2Vuc2VfdXJsID0gbGljZW5zZVVybDtcbiAgfVxuXG4gIGlmICh0aHVtYm5haWwpIHtcbiAgICBwdWJsaXNoUGF5bG9hZC50aHVtYm5haWxfdXJsID0gdGh1bWJuYWlsO1xuICB9XG5cbiAgLy8gU2V0IHJlbGVhc2UgdGltZSB0byBjdXJyZXQgZGF0ZS4gT24gZWRpdHMsIGtlZXAgb3JpZ2luYWwgcmVsZWFzZS90cmFuc2FjdGlvbiB0aW1lIGFzIHJlbGVhc2VfdGltZVxuICBpZiAobXlDbGFpbUZvclVyaUVkaXRpbmcgJiYgbXlDbGFpbUZvclVyaUVkaXRpbmcudmFsdWUucmVsZWFzZV90aW1lKSB7XG4gICAgcHVibGlzaFBheWxvYWQucmVsZWFzZV90aW1lID0gTnVtYmVyKG15Q2xhaW1Gb3JVcmkudmFsdWUucmVsZWFzZV90aW1lKTtcbiAgfSBlbHNlIGlmIChteUNsYWltRm9yVXJpRWRpdGluZyAmJiBteUNsYWltRm9yVXJpRWRpdGluZy50aW1lc3RhbXApIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5yZWxlYXNlX3RpbWUgPSBOdW1iZXIobXlDbGFpbUZvclVyaUVkaXRpbmcudGltZXN0YW1wKTtcbiAgfSBlbHNlIHtcbiAgICBwdWJsaXNoUGF5bG9hZC5yZWxlYXNlX3RpbWUgPSBOdW1iZXIoTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCkpO1xuICB9XG5cbiAgaWYgKGNoYW5uZWxJZCkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLmNoYW5uZWxfaWQgPSBjaGFubmVsSWQ7XG4gIH1cblxuICBpZiAobXlDbGFpbUZvclVyaUVkaXRpbmcgJiYgbXlDbGFpbUZvclVyaUVkaXRpbmcudmFsdWUgJiYgbXlDbGFpbUZvclVyaUVkaXRpbmcudmFsdWUubG9jYXRpb25zKSB7XG4gICAgcHVibGlzaFBheWxvYWQubG9jYXRpb25zID0gbXlDbGFpbUZvclVyaUVkaXRpbmcudmFsdWUubG9jYXRpb25zO1xuICB9XG5cbiAgaWYgKCFjb250ZW50SXNGcmVlICYmIGZlZSAmJiBmZWUuY3VycmVuY3kgJiYgTnVtYmVyKGZlZS5hbW91bnQpID4gMCkge1xuICAgIHB1Ymxpc2hQYXlsb2FkLmZlZV9jdXJyZW5jeSA9IGZlZS5jdXJyZW5jeTtcbiAgICBwdWJsaXNoUGF5bG9hZC5mZWVfYW1vdW50ID0gY3JlZGl0c1RvU3RyaW5nKGZlZS5hbW91bnQpO1xuICB9XG5cbiAgLy8gT25seSBwYXNzIGZpbGUgb24gbmV3IHVwbG9hZHMsIG5vdCBtZXRhZGF0YSBvbmx5IGVkaXRzLlxuICAvLyBUaGUgc2RrIHdpbGwgZmlndXJlIGl0IG91dFxuICBpZiAoZmlsZVBhdGgpIHB1Ymxpc2hQYXlsb2FkLmZpbGVfcGF0aCA9IGZpbGVQYXRoO1xuXG4gIHJldHVybiBsYnJ5UHJveHkucHVibGlzaChwdWJsaXNoUGF5bG9hZCkudGhlbihzdWNjZXNzLCBmYWlsKTtcbn07XG5cbi8vIENhbGxzIGNsYWltX2xpc3RfbWluZSB1bnRpbCBhbnkgcGVuZGluZyBwdWJsaXNoZXMgYXJlIGNvbmZpcm1lZFxuY29uc3QgZG9DaGVja1BlbmRpbmdQdWJsaXNoZXMgPSBvbkNvbmZpcm1lZCA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgcGVuZGluZ0J5SWQgPSBzZWxlY3RQZW5kaW5nQnlJZChzdGF0ZSk7XG5cbiAgaWYgKCFPYmplY3Qua2V5cyhwZW5kaW5nQnlJZCkubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHB1Ymxpc2hDaGVja0ludGVydmFsO1xuXG4gIGNvbnN0IGNoZWNrRmlsZUxpc3QgPSAoKSA9PiB7XG4gICAgbGJyeVByb3h5LnN0cmVhbV9saXN0KHsgcGFnZTogMSwgcGFnZV9zaXplOiAxMCB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBjbGFpbXMgPSByZXN1bHQuaXRlbXM7XG5cbiAgICAgIGNsYWltcy5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgICAgLy8gSWYgaXQncyBjb25maXJtZWQsIGNoZWNrIGlmIGl0IHdhcyBwZW5kaW5nIHByZXZpb3VzbHlcbiAgICAgICAgaWYgKGNsYWltLmNvbmZpcm1hdGlvbnMgPiAwICYmIHBlbmRpbmdCeUlkW2NsYWltLmNsYWltX2lkXSkge1xuICAgICAgICAgIGRlbGV0ZSBwZW5kaW5nQnlJZFtjbGFpbS5jbGFpbV9pZF07XG4gICAgICAgICAgaWYgKG9uQ29uZmlybWVkKSB7XG4gICAgICAgICAgICBvbkNvbmZpcm1lZChjbGFpbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xhaW1zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHBlbmRpbmdCeUlkKS5sZW5ndGgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwdWJsaXNoQ2hlY2tJbnRlcnZhbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcHVibGlzaENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgY2hlY2tGaWxlTGlzdCgpO1xuICB9LCAzMDAwMCk7XG59O1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4vLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4vLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbi8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG5mdW5jdGlvbiBkZWJvdWNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICBsZXQgdGltZW91dDtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIGlmICghaW1tZWRpYXRlKSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gIH07XG59XG5cbi8vICAgICAgXG5mdW5jdGlvbiBoYW5kbGVGZXRjaFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09IDIwMCA/IFByb21pc2UucmVzb2x2ZShyZXNwb25zZS5qc29uKCkpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpKTtcbn1cblxudmFyIF9leHRlbmRzJDggPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBERUJPVU5DRURfU0VBUkNIX1NVR0dFU1RJT05fTVMgPSAzMDA7XG5cbi8vIFdlIGNhbid0IHVzZSBlbnYncyBiZWNhdXNlIHRoZXkgYXJlbid0IHBhc3NlZCBpbnRvIG5vZGVfbW9kdWxlc1xubGV0IENPTk5FQ1RJT05fU1RSSU5HID0gJ2h0dHBzOi8vbGlnaHRob3VzZS5sYnJ5LmNvbS8nO1xuXG5jb25zdCBzZXRTZWFyY2hBcGkgPSBlbmRwb2ludCA9PiB7XG4gIENPTk5FQ1RJT05fU1RSSU5HID0gZW5kcG9pbnQucmVwbGFjZSgvXFwvKiQvLCAnLycpOyAvLyBleGFjdGx5IG9uZSBzbGFzaCBhdCB0aGUgZW5kO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoU3VnZ2VzdGlvbnMgPSB2YWx1ZSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudHJpbSgpO1xuXG4gIC8vIHN0cmlwIG91dCBhbnkgYmFzaWMgc3R1ZmYgZm9yIG1vcmUgYWNjdXJhdGUgc2VhcmNoIHJlc3VsdHNcbiAgbGV0IHNlYXJjaFZhbHVlID0gcXVlcnkucmVwbGFjZSgvbGJyeTpcXC9cXC8vZywgJycpLnJlcGxhY2UoLy0vZywgJyAnKTtcbiAgaWYgKHNlYXJjaFZhbHVlLmluY2x1ZGVzKCcjJykpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBtb3JlIHJvYnVzdCwgYnV0IEkgdGhpbmsgaXQncyBmaW5lIGZvciBub3dcbiAgICAvLyBSZW1vdmUgZXZlcnl0aGluZyBhZnRlciAjIHRvIGdldCByaWQgb2YgdGhlIGNsYWltIGlkXG4gICAgc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS5zdWJzdHJpbmcoMCwgc2VhcmNoVmFsdWUuaW5kZXhPZignIycpKTtcbiAgfVxuXG4gIGNvbnN0IHN1Z2dlc3Rpb25zID0gc2VsZWN0U3VnZ2VzdGlvbnMoZ2V0U3RhdGUoKSk7XG4gIGlmIChzdWdnZXN0aW9uc1tzZWFyY2hWYWx1ZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmZXRjaChgJHtDT05ORUNUSU9OX1NUUklOR31hdXRvY29tcGxldGU/cz0ke3NlYXJjaFZhbHVlfWApLnRoZW4oaGFuZGxlRmV0Y2hSZXNwb25zZSkudGhlbihhcGlTdWdnZXN0aW9ucyA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX1NFQVJDSF9TVUdHRVNUSU9OUyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICBzdWdnZXN0aW9uczogYXBpU3VnZ2VzdGlvbnNcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIElmIHRoZSBmZXRjaCBmYWlscywgZG8gbm90aGluZ1xuICAgIC8vIEJhc2ljIHNlYXJjaCBzdWdnZXN0aW9ucyBhcmUgYWxyZWFkeSBwb3B1bGF0ZWQgYXQgdGhpcyBwb2ludFxuICB9KTtcbn07XG5cbmNvbnN0IHRocm90dGxlZFNlYXJjaFN1Z2dlc3Rpb25zID0gZGVib3VjZSgoZGlzcGF0Y2gsIHF1ZXJ5KSA9PiB7XG4gIGRpc3BhdGNoKGdldFNlYXJjaFN1Z2dlc3Rpb25zKHF1ZXJ5KSk7XG59LCBERUJPVU5DRURfU0VBUkNIX1NVR0dFU1RJT05fTVMpO1xuXG5jb25zdCBkb1VwZGF0ZVNlYXJjaFF1ZXJ5ID0gKHF1ZXJ5LCBzaG91bGRTa2lwU3VnZ2VzdGlvbnMpID0+IGRpc3BhdGNoID0+IHtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFVQREFURV9TRUFSQ0hfUVVFUlksXG4gICAgZGF0YTogeyBxdWVyeSB9XG4gIH0pO1xuXG4gIC8vIERvbid0IGZldGNoIG5ldyBzdWdnZXN0aW9ucyBpZiB0aGUgdXNlciBqdXN0IGFkZGVkIGEgc3BhY2VcbiAgaWYgKCFxdWVyeS5lbmRzV2l0aCgnICcpIHx8ICFzaG91bGRTa2lwU3VnZ2VzdGlvbnMpIHtcbiAgICB0aHJvdHRsZWRTZWFyY2hTdWdnZXN0aW9ucyhkaXNwYXRjaCwgcXVlcnkpO1xuICB9XG59O1xuXG5jb25zdCBkb1NlYXJjaCA9IChyYXdRdWVyeSwgc2VhcmNoT3B0aW9ucykgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBxdWVyeSA9IHJhd1F1ZXJ5LnJlcGxhY2UoL15sYnJ5OlxcL1xcLy9pLCAnJykucmVwbGFjZSgvXFwvLywgJyAnKTtcbiAgY29uc3QgcmVzb2x2ZVJlc3VsdHMgPSBzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMucmVzb2x2ZVJlc3VsdHM7XG4gIGNvbnN0IGlzQmFja2dyb3VuZFNlYXJjaCA9IHNlYXJjaE9wdGlvbnMgJiYgc2VhcmNoT3B0aW9ucy5pc0JhY2tncm91bmRTZWFyY2ggfHwgZmFsc2U7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFQVJDSF9GQUlMXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuXG4gIGxldCBxdWVyeVdpdGhPcHRpb25zID0gbWFrZVNlbGVjdFF1ZXJ5V2l0aE9wdGlvbnMocXVlcnksIHNlYXJjaE9wdGlvbnMpKHN0YXRlKTtcblxuICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2VhcmNoZWQgZm9yIHNvbWV0aGluZywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZ1xuICBjb25zdCB1cmlzRm9yUXVlcnkgPSBtYWtlU2VsZWN0U2VhcmNoVXJpcyhxdWVyeVdpdGhPcHRpb25zKShzdGF0ZSk7XG4gIGlmICh1cmlzRm9yUXVlcnkgJiYgISF1cmlzRm9yUXVlcnkubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IFNFQVJDSF9TVEFSVFxuICB9KTtcblxuICAvLyBJZiB0aGUgdXNlciBpcyBvbiB0aGUgZmlsZSBwYWdlIHdpdGggYSBwcmUtcG9wdWxhdGVkIHVyaSBhbmQgdGhleSBzZWxlY3RcbiAgLy8gdGhlIHNlYXJjaCBvcHRpb24gd2l0aG91dCB0eXBpbmcgYW55dGhpbmcsIHNlYXJjaFF1ZXJ5IHdpbGwgYmUgZW1wdHlcbiAgLy8gV2UgbmVlZCB0byBwb3B1bGF0ZSBpdCBzbyB0aGUgaW5wdXQgaXMgZmlsbGVkIG9uIHRoZSBzZWFyY2ggcGFnZVxuICAvLyBpc0JhY2tncm91bmRTZWFyY2ggbWVhbnMgdGhlIHNlYXJjaCBpcyBoYXBwZW5pbmcgaW4gdGhlIGJhY2tncm91bmQsIGRvbid0IHVwZGF0ZSB0aGUgc2VhcmNoIHF1ZXJ5XG4gIGlmICghc3RhdGUuc2VhcmNoLnNlYXJjaFF1ZXJ5ICYmICFpc0JhY2tncm91bmRTZWFyY2gpIHtcbiAgICBkaXNwYXRjaChkb1VwZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gIH1cblxuICBmZXRjaChgJHtDT05ORUNUSU9OX1NUUklOR31zZWFyY2g/JHtxdWVyeVdpdGhPcHRpb25zfWApLnRoZW4oaGFuZGxlRmV0Y2hSZXNwb25zZSkudGhlbihkYXRhID0+IHtcbiAgICBjb25zdCB1cmlzID0gW107XG4gICAgY29uc3QgYWN0aW9ucyA9IFtdO1xuXG4gICAgZGF0YS5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgY2xhaW1JZCB9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCB1cmxPYmogPSB7fTtcblxuICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgICB1cmxPYmouY2hhbm5lbE5hbWUgPSBuYW1lO1xuICAgICAgICAgIHVybE9iai5jaGFubmVsQ2xhaW1JZCA9IGNsYWltSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsT2JqLnN0cmVhbU5hbWUgPSBuYW1lO1xuICAgICAgICAgIHVybE9iai5zdHJlYW1DbGFpbUlkID0gY2xhaW1JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVVJJKHVybE9iaik7XG4gICAgICAgIGlmIChyZXNvbHZlUmVzdWx0cykge1xuICAgICAgICAgIGFjdGlvbnMucHVzaChkb1Jlc29sdmVVcmkodXJsKSk7XG4gICAgICAgIH1cbiAgICAgICAgdXJpcy5wdXNoKHVybCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogU0VBUkNIX1NVQ0NFU1MsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHF1ZXJ5OiBxdWVyeVdpdGhPcHRpb25zLFxuICAgICAgICB1cmlzXG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlzcGF0Y2goYmF0Y2hBY3Rpb25zKC4uLmFjdGlvbnMpKTtcbiAgfSkuY2F0Y2goZSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU0VBUkNIX0ZBSUxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBkb1Jlc29sdmVkU2VhcmNoID0gKHJhd1F1ZXJ5LCBzaXplLCAvLyBvbmx5IHBhc3MgaW4gaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSB1c2VycyBzZXR0aW5nIChleDogcmVsYXRlZCBjb250ZW50KVxuZnJvbSwgaXNCYWNrZ3JvdW5kU2VhcmNoID0gZmFsc2UsIG9wdGlvbnMgPSB7fSkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCBxdWVyeSA9IHJhd1F1ZXJ5LnJlcGxhY2UoL15sYnJ5OlxcL1xcLy9pLCAnJykucmVwbGFjZSgvXFwvLywgJyAnKTtcblxuICBpZiAoIXF1ZXJ5KSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUkVTT0xWRURfU0VBUkNIX0ZBSUxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRpb25zV2l0aEZyb20gPSBfZXh0ZW5kcyQ4KHtcbiAgICBzaXplLFxuICAgIGZyb20sXG4gICAgaXNCYWNrZ3JvdW5kU2VhcmNoXG4gIH0sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG9wdGlvbnNXaXRob3V0RnJvbSA9IF9leHRlbmRzJDgoe1xuICAgIHNpemUsXG4gICAgaXNCYWNrZ3JvdW5kU2VhcmNoXG4gIH0sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcblxuICBsZXQgcXVlcnlXaXRoT3B0aW9ucyA9IG1ha2VTZWxlY3RRdWVyeVdpdGhPcHRpb25zKHF1ZXJ5LCBvcHRpb25zV2l0aEZyb20pKHN0YXRlKTtcblxuICAvLyBtYWtlIGZyb20gbnVsbCBzbyB0aGF0IHdlIGNhbiBtYWludGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBxdWVyeSBmb3IgbXVsdGlwbGUgcGFnZXMgYW5kIHNpbXBseSBhcHBlbmQgdGhlIGZvdW5kIHJlc3VsdHNcbiAgbGV0IHF1ZXJ5V2l0aG91dEZyb20gPSBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucyhxdWVyeSwgb3B0aW9uc1dpdGhvdXRGcm9tKShzdGF0ZSk7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciBzb21ldGhpbmcsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgLy8gVE9ETzogVHdlYWsgdGhpcyBjaGVjayBmb3IgbXVsdGlwbGUgcGFnZSByZXN1bHRzXG4gIC8qIGNvbnN0IHJlc3VsdHNGb3JRdWVyeSA9IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHMocXVlcnlXaXRoT3B0aW9ucykoc3RhdGUpO1xuICBpZiAocmVzdWx0c0ZvclF1ZXJ5ICYmIHJlc3VsdHNGb3JRdWVyeS5sZW5ndGggJiYgcmVzdWx0c0ZvclF1ZXJ5Lmxlbmd0aCA+IChmcm9tICogc2l6ZSkpIHtcbiAgICByZXR1cm47XG4gIH0gKi9cblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogUkVTT0xWRURfU0VBUkNIX1NUQVJUXG4gIH0pO1xuXG4gIGlmICghc3RhdGUuc2VhcmNoLnNlYXJjaFF1ZXJ5ICYmICFpc0JhY2tncm91bmRTZWFyY2gpIHtcbiAgICBkaXNwYXRjaChkb1VwZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gIH1cblxuICBmZXRjaChgJHtDT05ORUNUSU9OX1NUUklOR31zZWFyY2g/cmVzb2x2ZT10cnVlJiR7cXVlcnlXaXRoT3B0aW9uc31gKS50aGVuKGhhbmRsZUZldGNoUmVzcG9uc2UpLnRoZW4oZGF0YSA9PiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgZGF0YS5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUkVTT0xWRURfU0VBUkNIX1NVQ0NFU1MsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHF1ZXJ5OiBxdWVyeVdpdGhvdXRGcm9tLFxuICAgICAgICByZXN1bHRzLFxuICAgICAgICBwYWdlU2l6ZTogc2l6ZSxcbiAgICAgICAgYXBwZW5kOiBwYXJzZUludChmcm9tLCAxMCkgPiBwYXJzZUludChzaXplLCAxMCkgLSAxXG4gICAgICB9XG4gICAgfSk7XG4gIH0pLmNhdGNoKGUgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFJFU09MVkVEX1NFQVJDSF9GQUlMXG4gICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgZG9Gb2N1c1NlYXJjaElucHV0ID0gKCkgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBTRUFSQ0hfRk9DVVNcbn0pO1xuXG5jb25zdCBkb0JsdXJTZWFyY2hJbnB1dCA9ICgpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogU0VBUkNIX0JMVVJcbn0pO1xuXG5jb25zdCBkb1VwZGF0ZVNlYXJjaE9wdGlvbnMgPSAobmV3T3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCBzZWFyY2hWYWx1ZSA9IHNlbGVjdFNlYXJjaFZhbHVlKHN0YXRlKTtcblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogVVBEQVRFX1NFQVJDSF9PUFRJT05TLFxuICAgIGRhdGE6IG5ld09wdGlvbnNcbiAgfSk7XG5cbiAgaWYgKHNlYXJjaFZhbHVlKSB7XG4gICAgLy8gQWZ0ZXIgdXBkYXRpbmcsIHBlcmZvcm0gYSBzZWFyY2ggd2l0aCB0aGUgbmV3IG9wdGlvbnNcbiAgICBkaXNwYXRjaChkb1NlYXJjaChzZWFyY2hWYWx1ZSwgYWRkaXRpb25hbE9wdGlvbnMpKTtcbiAgfVxufTtcblxuLy8gICAgICBcblxuZnVuY3Rpb24gc2F2ZVBvc2l0aW9uKGNsYWltSWQsIG91dHBvaW50LCBwb3NpdGlvbikge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFVF9DT05URU5UX1BPU0lUSU9OLFxuICAgICAgZGF0YTogeyBjbGFpbUlkLCBvdXRwb2ludCwgcG9zaXRpb24gfVxuICAgIH0pO1xuICB9O1xufVxuXG4vLyAgICAgIFxuXG5jb25zdCBkb1RvZ2dsZVRhZ0ZvbGxvdyA9IG5hbWUgPT4gKHtcbiAgdHlwZTogVE9HR0xFX1RBR19GT0xMT1csXG4gIGRhdGE6IHtcbiAgICBuYW1lXG4gIH1cbn0pO1xuXG5jb25zdCBkb0FkZFRhZyA9IG5hbWUgPT4gKHtcbiAgdHlwZTogVEFHX0FERCxcbiAgZGF0YToge1xuICAgIG5hbWVcbiAgfVxufSk7XG5cbmNvbnN0IGRvRGVsZXRlVGFnID0gbmFtZSA9PiAoe1xuICB0eXBlOiBUQUdfREVMRVRFLFxuICBkYXRhOiB7XG4gICAgbmFtZVxuICB9XG59KTtcblxuLy8gICAgICBcblxuZnVuY3Rpb24gZG9Db21tZW50TGlzdCh1cmksIHBhZ2UgPSAxLCBwYWdlU2l6ZSA9IDk5OTk5KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNsYWltID0gc2VsZWN0Q2xhaW1zQnlVcmkoc3RhdGUpW3VyaV07XG4gICAgY29uc3QgY2xhaW1JZCA9IGNsYWltID8gY2xhaW0uY2xhaW1faWQgOiBudWxsO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQ09NTUVOVF9MSVNUX1NUQVJURURcbiAgICB9KTtcbiAgICBsYnJ5UHJveHkuY29tbWVudF9saXN0KHtcbiAgICAgIGNsYWltX2lkOiBjbGFpbUlkLFxuICAgICAgcGFnZSxcbiAgICAgIHBhZ2Vfc2l6ZTogcGFnZVNpemVcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCB7IGl0ZW1zOiBjb21tZW50cyB9ID0gcmVzdWx0O1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX0xJU1RfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY29tbWVudHMsXG4gICAgICAgICAgY2xhaW1JZDogY2xhaW1JZCxcbiAgICAgICAgICB1cmk6IHVyaVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfTElTVF9GQUlMRUQsXG4gICAgICAgIGRhdGE6IGVycm9yXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9Db21tZW50Q3JlYXRlKGNvbW1lbnQgPSAnJywgY2xhaW1faWQgPSAnJywgY2hhbm5lbCwgcGFyZW50X2lkKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENPTU1FTlRfQ1JFQVRFX1NUQVJURURcbiAgICB9KTtcbiAgICBjb25zdCBteUNoYW5uZWxzID0gc2VsZWN0TXlDaGFubmVsQ2xhaW1zKHN0YXRlKTtcbiAgICBjb25zdCBuYW1lZENoYW5uZWxDbGFpbSA9IG15Q2hhbm5lbHMgJiYgbXlDaGFubmVscy5maW5kKG15Q2hhbm5lbCA9PiBteUNoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCk7XG4gICAgY29uc3QgY2hhbm5lbF9pZCA9IG5hbWVkQ2hhbm5lbENsYWltID8gbmFtZWRDaGFubmVsQ2xhaW0uY2xhaW1faWQgOiBudWxsO1xuICAgIHJldHVybiBsYnJ5UHJveHkuY29tbWVudF9jcmVhdGUoe1xuICAgICAgY29tbWVudDogY29tbWVudCxcbiAgICAgIGNsYWltX2lkOiBjbGFpbV9pZCxcbiAgICAgIGNoYW5uZWxfaWQ6IGNoYW5uZWxfaWQsXG4gICAgICBwYXJlbnRfaWQ6IHBhcmVudF9pZFxuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY29tbWVudDogcmVzdWx0LFxuICAgICAgICAgIGNsYWltSWQ6IGNsYWltX2lkXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ09NTUVOVF9DUkVBVEVfRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBjcmVhdGUgY29tbWVudCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvQ29tbWVudEhpZGUoY29tbWVudF9pZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IENPTU1FTlRfSElERV9TVEFSVEVEXG4gICAgfSk7XG4gICAgcmV0dXJuIGxicnlQcm94eS5jb21tZW50X2hpZGUoe1xuICAgICAgY29tbWVudF9pZHM6IFtjb21tZW50X2lkXVxuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogQ09NTUVOVF9ISURFX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfSElERV9GQUlMRUQsXG4gICAgICAgIGRhdGE6IGVycm9yXG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIGhpZGUgdGhpcyBjb21tZW50LCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9Db21tZW50QWJhbmRvbihjb21tZW50X2lkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQ09NTUVOVF9BQkFORE9OX1NUQVJURURcbiAgICB9KTtcbiAgICByZXR1cm4gbGJyeVByb3h5LmNvbW1lbnRfYWJhbmRvbih7XG4gICAgICBjb21tZW50X2lkOiBjb21tZW50X2lkXG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gQ29tbWVudCBtYXkgbm90IGJlIGRlbGV0ZWQgaWYgdGhlIHNpZ25pbmcgY2hhbm5lbCBjYW4ndCBiZSBzaWduZWQuXG4gICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIGlmIHRoZSBjaGFubmVsIHdhcyByZWNlbnRseSBjcmVhdGVkIG9yIGFiYW5kb25lZC5cbiAgICAgIGlmIChyZXN1bHQuYWJhbmRvbmVkKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBDT01NRU5UX0FCQU5ET05fQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbW1lbnRfaWQ6IGNvbW1lbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IENPTU1FTlRfQUJBTkRPTl9GQUlMRURcbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdZb3VyIGNoYW5uZWwgaXMgc3RpbGwgYmVpbmcgc2V0dXAsIHRyeSBhZ2FpbiBpbiBhIGZldyBtb21lbnRzLicsXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBDT01NRU5UX0FCQU5ET05fRkFJTEVELFxuICAgICAgICBkYXRhOiBlcnJvclxuICAgICAgfSk7XG4gICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBkZWxldGUgdGhpcyBjb21tZW50LCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgIGlzRXJyb3I6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9Db21tZW50VXBkYXRlKGNvbW1lbnRfaWQsIGNvbW1lbnQpIHtcbiAgLy8gaWYgdGhleSBwcm92aWRlZCBhbiBlbXB0eSBzdHJpbmcsIHRoZXkgbXVzdCBoYXZlIHdhbnRlZCB0byBhYmFuZG9uXG4gIGlmIChjb21tZW50ID09PSAnJykge1xuICAgIHJldHVybiBkb0NvbW1lbnRBYmFuZG9uKGNvbW1lbnRfaWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENPTU1FTlRfVVBEQVRFX1NUQVJURURcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxicnlQcm94eS5jb21tZW50X3VwZGF0ZSh7XG4gICAgICAgIGNvbW1lbnRfaWQ6IGNvbW1lbnRfaWQsXG4gICAgICAgIGNvbW1lbnQ6IGNvbW1lbnRcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogQ09NTUVOVF9VUERBVEVfQ09NUExFVEVELFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBjb21tZW50OiByZXN1bHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGUgcmVzdWx0IHdpbGwgcmV0dXJuIG51bGxcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBDT01NRU5UX1VQREFURV9GQUlMRURcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaXNwYXRjaChkb1RvYXN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdZb3VyIGNoYW5uZWwgaXMgc3RpbGwgYmVpbmcgc2V0dXAsIHRyeSBhZ2FpbiBpbiBhIGZldyBtb21lbnRzLicsXG4gICAgICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBDT01NRU5UX1VQREFURV9GQUlMRUQsXG4gICAgICAgICAgZGF0YTogZXJyb3JcbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvVG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gZWRpdCB0aGlzIGNvbW1lbnQsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuLy8gICAgICBcblxuY29uc3QgZG9Ub2dnbGVCbG9ja0NoYW5uZWwgPSB1cmkgPT4gKHtcbiAgdHlwZTogVE9HR0xFX0JMT0NLX0NIQU5ORUwsXG4gIGRhdGE6IHtcbiAgICB1cmlcbiAgfVxufSk7XG5cbnZhciBfZXh0ZW5kcyQ5ID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgcmVkdWNlcnMgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgYnlJZDoge30sXG4gIGNsYWltc0J5VXJpOiB7fSxcbiAgcGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsOiB7fSxcbiAgY2hhbm5lbENsYWltQ291bnRzOiB7fSxcbiAgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zOiB7fSxcbiAgcmVzb2x2aW5nVXJpczogW10sXG4gIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBhIFNldFxuICAvLyBTdG9yaW5nIHNldHMgaW4gcmVkdWNlcnMgY2FuIGNhdXNlIGlzc3Vlc1xuICBteUNoYW5uZWxDbGFpbXM6IHVuZGVmaW5lZCxcbiAgbXlDbGFpbXM6IHVuZGVmaW5lZCxcbiAgZmV0Y2hpbmdNeUNoYW5uZWxzOiBmYWxzZSxcbiAgYWJhbmRvbmluZ0J5SWQ6IHt9LFxuICBwZW5kaW5nQnlJZDoge30sXG4gIGNsYWltU2VhcmNoRXJyb3I6IGZhbHNlLFxuICBjbGFpbVNlYXJjaEJ5UXVlcnk6IHt9LFxuICBjbGFpbVNlYXJjaEJ5UXVlcnlMYXN0UGFnZVJlYWNoZWQ6IHt9LFxuICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeToge30sXG4gIHVwZGF0ZUNoYW5uZWxFcnJvcjogJycsXG4gIHVwZGF0aW5nQ2hhbm5lbDogZmFsc2UsXG4gIGNyZWF0aW5nQ2hhbm5lbDogZmFsc2UsXG4gIGNyZWF0ZUNoYW5uZWxFcnJvcjogdW5kZWZpbmVkLFxuICBwZW5kaW5nQ2hhbm5lbEltcG9ydDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGhhbmRsZUNsYWltQWN0aW9uKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge1xuICAgIHJlc29sdmVJbmZvXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3QgYnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbXNCeVVyaSk7XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgY2hhbm5lbENsYWltQ291bnRzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2hhbm5lbENsYWltQ291bnRzKTtcbiAgbGV0IG5ld1Jlc29sdmluZ1VybHMgPSBuZXcgU2V0KHN0YXRlLnJlc29sdmluZ1VyaXMpO1xuXG4gIE9iamVjdC5lbnRyaWVzKHJlc29sdmVJbmZvKS5mb3JFYWNoKChbdXJsLCByZXNvbHZlUmVzcG9uc2VdKSA9PiB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGNvbnN0IHsgY2xhaW1zSW5DaGFubmVsLCBzdHJlYW0sIGNoYW5uZWwgfSA9IHJlc29sdmVSZXNwb25zZTtcbiAgICBpZiAoY2xhaW1zSW5DaGFubmVsKSB7XG4gICAgICBjaGFubmVsQ2xhaW1Db3VudHNbdXJsXSA9IGNsYWltc0luQ2hhbm5lbDtcbiAgICAgIGNoYW5uZWxDbGFpbUNvdW50c1tjaGFubmVsLmNhbm9uaWNhbF91cmxdID0gY2xhaW1zSW5DaGFubmVsO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0pIHtcbiAgICAgIGJ5SWRbc3RyZWFtLmNsYWltX2lkXSA9IHN0cmVhbTtcbiAgICAgIGJ5VXJpW3VybF0gPSBzdHJlYW0uY2xhaW1faWQ7XG5cbiAgICAgIC8vIElmIHVybCBpc24ndCBhIGNhbm9uaWNhbF91cmwsIG1ha2Ugc3VyZSB0aGF0IGlzIGFkZGVkIHRvb1xuICAgICAgYnlVcmlbc3RyZWFtLmNhbm9uaWNhbF91cmxdID0gc3RyZWFtLmNsYWltX2lkO1xuXG4gICAgICAvLyBBbHNvIGFkZCB0aGUgcGVybWFuZW50X3VybCBoZXJlIHVudGlsIGxpZ2h0aG91c2UgcmV0dXJucyBjYW5vbmljYWxfdXJsIGZvciBzZWFyY2ggcmVzdWx0c1xuICAgICAgYnlVcmlbc3RyZWFtLnBlcm1hbmVudF91cmxdID0gc3RyZWFtLmNsYWltX2lkO1xuICAgICAgbmV3UmVzb2x2aW5nVXJscy5kZWxldGUoc3RyZWFtLmNhbm9uaWNhbF91cmwpO1xuICAgICAgbmV3UmVzb2x2aW5nVXJscy5kZWxldGUoc3RyZWFtLnBlcm1hbmVudF91cmwpO1xuICAgIH1cblxuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICBieVVyaVt1cmxdID0gY2hhbm5lbC5jbGFpbV9pZDtcbiAgICAgIH1cblxuICAgICAgYnlJZFtjaGFubmVsLmNsYWltX2lkXSA9IGNoYW5uZWw7XG4gICAgICAvLyBBbHNvIGFkZCB0aGUgcGVybWFuZW50X3VybCBoZXJlIHVudGlsIGxpZ2h0aG91c2UgcmV0dXJucyBjYW5vbmljYWxfdXJsIGZvciBzZWFyY2ggcmVzdWx0c1xuICAgICAgYnlVcmlbY2hhbm5lbC5wZXJtYW5lbnRfdXJsXSA9IGNoYW5uZWwuY2xhaW1faWQ7XG4gICAgICBieVVyaVtjaGFubmVsLmNhbm9uaWNhbF91cmxdID0gY2hhbm5lbC5jbGFpbV9pZDtcbiAgICAgIG5ld1Jlc29sdmluZ1VybHMuZGVsZXRlKGNoYW5uZWwuY2Fub25pY2FsX3VybCk7XG4gICAgICBuZXdSZXNvbHZpbmdVcmxzLmRlbGV0ZShjaGFubmVsLnBlcm1hbmVudF91cmwpO1xuICAgIH1cblxuICAgIG5ld1Jlc29sdmluZ1VybHMuZGVsZXRlKHVybCk7XG4gICAgaWYgKCFzdHJlYW0gJiYgIWNoYW5uZWwpIHtcbiAgICAgIGJ5VXJpW3VybF0gPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlJZCxcbiAgICBjbGFpbXNCeVVyaTogYnlVcmksXG4gICAgY2hhbm5lbENsYWltQ291bnRzLFxuICAgIHJlc29sdmluZ1VyaXM6IEFycmF5LmZyb20obmV3UmVzb2x2aW5nVXJscylcbiAgfSk7XG59XG5cbnJlZHVjZXJzW1JFU09MVkVfVVJJU19TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgdXJpcyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3Qgb2xkUmVzb2x2aW5nID0gc3RhdGUucmVzb2x2aW5nVXJpcyB8fCBbXTtcbiAgY29uc3QgbmV3UmVzb2x2aW5nID0gb2xkUmVzb2x2aW5nLnNsaWNlKCk7XG5cbiAgdXJpcy5mb3JFYWNoKHVyaSA9PiB7XG4gICAgaWYgKCFuZXdSZXNvbHZpbmcuaW5jbHVkZXModXJpKSkge1xuICAgICAgbmV3UmVzb2x2aW5nLnB1c2godXJpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHJlc29sdmluZ1VyaXM6IG5ld1Jlc29sdmluZ1xuICB9KTtcbn07XG5cbnJlZHVjZXJzW1JFU09MVkVfVVJJU19DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIF9leHRlbmRzJDkoe30sIGhhbmRsZUNsYWltQWN0aW9uKHN0YXRlLCBhY3Rpb24pKTtcbn07XG5cbnJlZHVjZXJzW0ZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGlzRmV0Y2hpbmdDbGFpbUxpc3RNaW5lOiB0cnVlXG59KTtcblxucmVkdWNlcnNbRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGNsYWltcyB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgYnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbXNCeVVyaSk7XG4gIGNvbnN0IHBlbmRpbmdCeUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucGVuZGluZ0J5SWQpO1xuICBjb25zdCBteUNsYWltcyA9IHN0YXRlLm15Q2xhaW1zID8gc3RhdGUubXlDbGFpbXMuc2xpY2UoKSA6IFtdO1xuXG4gIGNsYWltcy5mb3JFYWNoKGNsYWltID0+IHtcbiAgICBjb25zdCB1cmkgPSBidWlsZFVSSSh7IHN0cmVhbU5hbWU6IGNsYWltLm5hbWUsIHN0cmVhbUNsYWltSWQ6IGNsYWltLmNsYWltX2lkIH0pO1xuXG4gICAgaWYgKGNsYWltLnR5cGUgJiYgY2xhaW0udHlwZS5tYXRjaCgvY2xhaW18dXBkYXRlLykpIHtcbiAgICAgIGlmIChjbGFpbS5jb25maXJtYXRpb25zIDwgMSkge1xuICAgICAgICBwZW5kaW5nQnlJZFtjbGFpbS5jbGFpbV9pZF0gPSBjbGFpbTtcbiAgICAgICAgZGVsZXRlIGJ5SWRbY2xhaW0uY2xhaW1faWRdO1xuICAgICAgICBkZWxldGUgYnlVcmlbY2xhaW0uY2xhaW1faWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnlJZFtjbGFpbS5jbGFpbV9pZF0gPSBjbGFpbTtcbiAgICAgICAgYnlVcmlbdXJpXSA9IGNsYWltLmNsYWltX2lkO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gUmVtb3ZlIG9sZCBwZW5kaW5nIHB1Ymxpc2hlc1xuICBPYmplY3QudmFsdWVzKHBlbmRpbmdCeUlkKVxuICAvLyAkRmxvd0ZpeE1lXG4gIC5maWx0ZXIocGVuZGluZ0NsYWltID0+IGJ5SWRbcGVuZGluZ0NsYWltLmNsYWltX2lkXSkuZm9yRWFjaChwZW5kaW5nQ2xhaW0gPT4ge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBkZWxldGUgcGVuZGluZ0J5SWRbcGVuZGluZ0NsYWltLmNsYWltX2lkXTtcbiAgfSk7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgaXNGZXRjaGluZ0NsYWltTGlzdE1pbmU6IGZhbHNlLFxuICAgIG15Q2xhaW1zOiBjb25jYXRDbGFpbXMobXlDbGFpbXMsIGNsYWltcyksXG4gICAgYnlJZCxcbiAgICBjbGFpbXNCeVVyaTogYnlVcmksXG4gICAgcGVuZGluZ0J5SWRcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tGRVRDSF9DSEFOTkVMX0xJU1RfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBmZXRjaGluZ015Q2hhbm5lbHM6IHRydWUgfSk7XG5cbnJlZHVjZXJzW0ZFVENIX0NIQU5ORUxfTElTVF9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjbGFpbXMgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBteUNsYWltcyA9IHN0YXRlLm15Q2xhaW1zIHx8IFtdO1xuICBjb25zdCBwZW5kaW5nQnlJZCA9IE9iamVjdC5hc3NpZ24oc3RhdGUucGVuZGluZ0J5SWQpO1xuXG4gIGxldCBteUNoYW5uZWxDbGFpbXM7XG4gIGxldCBieUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlJZCk7XG4gIGlmICghY2xhaW1zLmxlbmd0aCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBteUNoYW5uZWxDbGFpbXMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIG15Q2hhbm5lbENsYWltcyA9IG5ldyBTZXQoc3RhdGUubXlDaGFubmVsQ2xhaW1zKTtcbiAgICBjbGFpbXMuZm9yRWFjaChjbGFpbSA9PiB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBteUNoYW5uZWxDbGFpbXMuYWRkKGNsYWltLmNsYWltX2lkKTtcbiAgICAgIGlmICghYnlJZFtjbGFpbS5jbGFpbV9pZF0pIHtcbiAgICAgICAgYnlJZFtjbGFpbS5jbGFpbV9pZF0gPSBjbGFpbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlbmRpbmdCeUlkW2NsYWltLmNsYWltX2lkXSAmJiBjbGFpbS5jb25maXJtYXRpb25zID4gMCkge1xuICAgICAgICBkZWxldGUgcGVuZGluZ0J5SWRbY2xhaW0uY2xhaW1faWRdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlJZCxcbiAgICBmZXRjaGluZ015Q2hhbm5lbHM6IGZhbHNlLFxuICAgIG15Q2hhbm5lbENsYWltcyxcbiAgICBteUNsYWltczogY29uY2F0Q2xhaW1zKG15Q2xhaW1zLCBjbGFpbXMpXG4gIH0pO1xufTtcblxucmVkdWNlcnNbRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSwgcGFnZSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGZldGNoaW5nQ2hhbm5lbENsYWltcyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2hhbm5lbENsYWltcyk7XG5cbiAgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zW3VyaV0gPSBwYWdlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nQ2hhbm5lbENsYWltcyxcbiAgICBjdXJyZW50Q2hhbm5lbFBhZ2U6IHBhZ2VcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3Qge1xuICAgIHVyaSxcbiAgICBjbGFpbXMsXG4gICAgY2xhaW1zSW5DaGFubmVsLFxuICAgIHBhZ2UsXG4gICAgdG90YWxQYWdlc1xuICB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgLy8gYnlDaGFubmVsIGtlZXBzIGNsYWltX3NlYXJjaCByZWxldmFudCByZXN1bHRzIGJ5IHBhZ2UuIElmIHRoZSB0b3RhbCBjaGFuZ2VzLCBlcmFzZSBpdC5cbiAgY29uc3QgY2hhbm5lbENsYWltQ291bnRzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2hhbm5lbENsYWltQ291bnRzKTtcblxuICBjb25zdCBwYWdpbmF0ZWRDbGFpbXNCeUNoYW5uZWwgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5wYWdpbmF0ZWRDbGFpbXNCeUNoYW5uZWwpO1xuICAvLyBjaGVjayBpZiBjb3VudCBoYXMgY2hhbmdlZCAtIHRoYXQgbWVhbnMgY2FjaGVkIHBhZ2luYXRpb24gd2lsbCBiZSB3cm9uZywgc28gY2xlYXIgaXRcbiAgY29uc3QgcHJldmlvdXNDb3VudCA9IHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbFt1cmldICYmIHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbFt1cmldWydpdGVtQ291bnQnXTtcbiAgY29uc3QgYnlDaGFubmVsID0gY2xhaW1zSW5DaGFubmVsID09PSBwcmV2aW91c0NvdW50ID8gT2JqZWN0LmFzc2lnbih7fSwgcGFnaW5hdGVkQ2xhaW1zQnlDaGFubmVsW3VyaV0pIDoge307XG4gIGNvbnN0IGFsbENsYWltSWRzID0gbmV3IFNldChieUNoYW5uZWwuYWxsKTtcbiAgY29uc3QgY3VycmVudFBhZ2VDbGFpbUlkcyA9IFtdO1xuICBjb25zdCBieUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlJZCk7XG4gIGNvbnN0IGZldGNoaW5nQ2hhbm5lbENsYWltcyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2hhbm5lbENsYWltcyk7XG4gIGNvbnN0IGNsYWltc0J5VXJpID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2xhaW1zQnlVcmkpO1xuXG4gIGlmIChjbGFpbXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsYWltcy5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgIGFsbENsYWltSWRzLmFkZChjbGFpbS5jbGFpbV9pZCk7XG4gICAgICBjdXJyZW50UGFnZUNsYWltSWRzLnB1c2goY2xhaW0uY2xhaW1faWQpO1xuICAgICAgYnlJZFtjbGFpbS5jbGFpbV9pZF0gPSBjbGFpbTtcbiAgICAgIGNsYWltc0J5VXJpW2NsYWltLmNhbm9uaWNhbF91cmxdID0gY2xhaW0uY2xhaW1faWQ7XG4gICAgfSk7XG4gIH1cblxuICBieUNoYW5uZWwuYWxsID0gYWxsQ2xhaW1JZHM7XG4gIGJ5Q2hhbm5lbC5wYWdlQ291bnQgPSB0b3RhbFBhZ2VzO1xuICBieUNoYW5uZWwuaXRlbUNvdW50ID0gY2xhaW1zSW5DaGFubmVsO1xuICBieUNoYW5uZWxbcGFnZV0gPSBjdXJyZW50UGFnZUNsYWltSWRzO1xuICBwYWdpbmF0ZWRDbGFpbXNCeUNoYW5uZWxbdXJpXSA9IGJ5Q2hhbm5lbDtcbiAgZGVsZXRlIGZldGNoaW5nQ2hhbm5lbENsYWltc1t1cmldO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHBhZ2luYXRlZENsYWltc0J5Q2hhbm5lbCxcbiAgICBieUlkLFxuICAgIGZldGNoaW5nQ2hhbm5lbENsYWltcyxcbiAgICBjbGFpbXNCeVVyaSxcbiAgICBjaGFubmVsQ2xhaW1Db3VudHMsXG4gICAgY3VycmVudENoYW5uZWxQYWdlOiBwYWdlXG4gIH0pO1xufTtcblxucmVkdWNlcnNbQUJBTkRPTl9DTEFJTV9TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgY2xhaW1JZCB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGFiYW5kb25pbmdCeUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYWJhbmRvbmluZ0J5SWQpO1xuXG4gIGFiYW5kb25pbmdCeUlkW2NsYWltSWRdID0gdHJ1ZTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBhYmFuZG9uaW5nQnlJZFxuICB9KTtcbn07XG5cbnJlZHVjZXJzW0FCQU5ET05fQ0xBSU1fU1VDQ0VFREVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgY2xhaW1JZCB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgbmV3TXlDbGFpbXMgPSBzdGF0ZS5teUNsYWltcyA/IHN0YXRlLm15Q2xhaW1zLnNsaWNlKCkgOiBbXTtcbiAgY29uc3QgY2xhaW1zQnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbXNCeVVyaSk7XG5cbiAgT2JqZWN0LmtleXMoY2xhaW1zQnlVcmkpLmZvckVhY2godXJpID0+IHtcbiAgICBpZiAoY2xhaW1zQnlVcmlbdXJpXSA9PT0gY2xhaW1JZCkge1xuICAgICAgZGVsZXRlIGNsYWltc0J5VXJpW3VyaV07XG4gICAgfVxuICB9KTtcbiAgY29uc3QgbXlDbGFpbXMgPSBuZXdNeUNsYWltcy5maWx0ZXIoaSA9PiBpLmNsYWltX2lkICYmIGkuY2xhaW1faWQgIT09IGNsYWltSWQpO1xuICBkZWxldGUgYnlJZFtjbGFpbUlkXTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBteUNsYWltcyxcbiAgICBieUlkLFxuICAgIGNsYWltc0J5VXJpXG4gIH0pO1xufTtcblxucmVkdWNlcnNbQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRF0gPSBzdGF0ZSA9PiBfZXh0ZW5kcyQ5KHt9LCBzdGF0ZSwge1xuICBjcmVhdGluZ0NoYW5uZWw6IHRydWUsXG4gIGNyZWF0ZUNoYW5uZWxFcnJvcjogbnVsbFxufSk7XG5cbnJlZHVjZXJzW0NSRUFURV9DSEFOTkVMX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBjaGFubmVsQ2xhaW0gPSBhY3Rpb24uZGF0YS5jaGFubmVsQ2xhaW07XG4gIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgY29uc3QgcGVuZGluZ0J5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5wZW5kaW5nQnlJZCk7XG4gIGNvbnN0IG15Q2hhbm5lbENsYWltcyA9IG5ldyBTZXQoc3RhdGUubXlDaGFubmVsQ2xhaW1zKTtcblxuICBieUlkW2NoYW5uZWxDbGFpbS5jbGFpbV9pZF0gPSBjaGFubmVsQ2xhaW07XG4gIHBlbmRpbmdCeUlkW2NoYW5uZWxDbGFpbS5jbGFpbV9pZF0gPSBjaGFubmVsQ2xhaW07XG4gIG15Q2hhbm5lbENsYWltcy5hZGQoY2hhbm5lbENsYWltLmNsYWltX2lkKTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBieUlkLFxuICAgIHBlbmRpbmdCeUlkLFxuICAgIG15Q2hhbm5lbENsYWltcyxcbiAgICBjcmVhdGluZ0NoYW5uZWw6IGZhbHNlXG4gIH0pO1xufTtcblxucmVkdWNlcnNbQ1JFQVRFX0NIQU5ORUxfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGNyZWF0aW5nQ2hhbm5lbDogZmFsc2UsXG4gICAgY3JlYXRlQ2hhbm5lbEVycm9yOiBhY3Rpb24uZGF0YVxuICB9KTtcbn07XG5cbnJlZHVjZXJzW1VQREFURV9DSEFOTkVMX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgdXBkYXRlQ2hhbm5lbEVycm9yOiAnJyxcbiAgICB1cGRhdGluZ0NoYW5uZWw6IHRydWVcbiAgfSk7XG59O1xuXG5yZWR1Y2Vyc1tVUERBVEVfQ0hBTk5FTF9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgY2hhbm5lbENsYWltID0gYWN0aW9uLmRhdGEuY2hhbm5lbENsYWltO1xuICBjb25zdCBieUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlJZCk7XG5cbiAgYnlJZFtjaGFubmVsQ2xhaW0uY2xhaW1faWRdID0gY2hhbm5lbENsYWltO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGJ5SWQsXG4gICAgdXBkYXRlQ2hhbm5lbEVycm9yOiAnJyxcbiAgICB1cGRhdGluZ0NoYW5uZWw6IGZhbHNlXG4gIH0pO1xufTtcblxucmVkdWNlcnNbVVBEQVRFX0NIQU5ORUxfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHVwZGF0ZUNoYW5uZWxFcnJvcjogYWN0aW9uLmRhdGEubWVzc2FnZSxcbiAgICB1cGRhdGluZ0NoYW5uZWw6IGZhbHNlXG4gIH0pO1xufTtcblxucmVkdWNlcnNbSU1QT1JUX0NIQU5ORUxfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBwZW5kaW5nQ2hhbm5lbEltcG9ydHM6IHRydWUgfSk7XG5cbnJlZHVjZXJzW0lNUE9SVF9DSEFOTkVMX0NPTVBMRVRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBwZW5kaW5nQ2hhbm5lbEltcG9ydHM6IGZhbHNlIH0pO1xuXG5yZWR1Y2Vyc1tDTEFJTV9TRUFSQ0hfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5KTtcbiAgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnlbYWN0aW9uLmRhdGEucXVlcnldID0gdHJ1ZTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeVxuICB9KTtcbn07XG5cbnJlZHVjZXJzW0NMQUlNX1NFQVJDSF9DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5mZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSk7XG4gIGNvbnN0IGNsYWltU2VhcmNoQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltU2VhcmNoQnlRdWVyeSk7XG4gIGNvbnN0IGNsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCk7XG4gIGNvbnN0IHsgYXBwZW5kLCBxdWVyeSwgdXJscywgcGFnZVNpemUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGlmIChhcHBlbmQpIHtcbiAgICAvLyB0b2RvOiBjaGVjayBmb3IgZHVwbGljYXRlIHVybHMgd2hlbiBjb25jYXRlbmF0aW5nP1xuICAgIGNsYWltU2VhcmNoQnlRdWVyeVtxdWVyeV0gPSBjbGFpbVNlYXJjaEJ5UXVlcnlbcXVlcnldICYmIGNsYWltU2VhcmNoQnlRdWVyeVtxdWVyeV0ubGVuZ3RoID8gY2xhaW1TZWFyY2hCeVF1ZXJ5W3F1ZXJ5XS5jb25jYXQodXJscykgOiB1cmxzO1xuICB9IGVsc2Uge1xuICAgIGNsYWltU2VhcmNoQnlRdWVyeVtxdWVyeV0gPSB1cmxzO1xuICB9XG5cbiAgLy8gdGhlIHJldHVybmVkIG51bWJlciBvZiB1cmxzIGlzIGxlc3MgdGhhbiB0aGUgcGFnZSBzaXplLCBzbyB3ZSdyZSBvbiB0aGUgbGFzdCBwYWdlXG4gIGNsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZFtxdWVyeV0gPSB1cmxzLmxlbmd0aCA8IHBhZ2VTaXplO1xuXG4gIGRlbGV0ZSBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeVtxdWVyeV07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBfZXh0ZW5kcyQ5KHt9LCBoYW5kbGVDbGFpbUFjdGlvbihzdGF0ZSwgYWN0aW9uKSwge1xuICAgIGNsYWltU2VhcmNoQnlRdWVyeSxcbiAgICBjbGFpbVNlYXJjaEJ5UXVlcnlMYXN0UGFnZVJlYWNoZWQsXG4gICAgZmV0Y2hpbmdDbGFpbVNlYXJjaEJ5UXVlcnlcbiAgfSkpO1xufTtcblxucmVkdWNlcnNbQ0xBSU1fU0VBUkNIX0ZBSUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5KTtcbiAgZGVsZXRlIGZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5W2FjdGlvbi5kYXRhLnF1ZXJ5XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeVxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNsYWltc1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnNbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLy8gdXRpbCBmb3IgY3JlYXRpbmcgcmVkdWNlcnNcbi8vIGJhc2VkIG9mZiBvZiByZWR1eC1hY3Rpb25zXG4vLyBodHRwczovL3JlZHV4LWFjdGlvbnMuanMub3JnL2RvY3MvYXBpL2hhbmRsZUFjdGlvbi5odG1sI2hhbmRsZWFjdGlvbnNcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmNvbnN0IGhhbmRsZUFjdGlvbnMgPSAoYWN0aW9uTWFwLCBkZWZhdWx0U3RhdGUpID0+IChzdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBhY3Rpb25NYXBbYWN0aW9uLnR5cGVdO1xuXG4gIGlmIChoYW5kbGVyKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgLy8ganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0YXRlIGlmIG5vIGhhbmRsZXJcbiAgLy8gcmV0dXJuaW5nIGEgY29weSBoZXJlIGJyZWFrcyByZWR1eC1wZXJzaXN0XG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbnZhciBfZXh0ZW5kcyRhID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDEgPSB7XG4gIGNvbW1lbnRCeUlkOiB7fSwgLy8gY29tbWVudElkIC0+IENvbW1lbnRcbiAgYnlJZDoge30sIC8vIENsYWltSUQgLT4gbGlzdCBvZiBjb21tZW50c1xuICBjb21tZW50c0J5VXJpOiB7fSwgLy8gVVJJIC0+IGNsYWltSWRcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgbXlDb21tZW50czogdW5kZWZpbmVkXG59O1xuXG5jb25zdCBjb21tZW50UmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbQ09NTUVOVF9DUkVBVEVfU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogdHJ1ZVxuICB9KSxcblxuICBbQ09NTUVOVF9DUkVBVEVfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZVxuICB9KSxcblxuICBbQ09NTUVOVF9DUkVBVEVfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGNvbW1lbnQsIGNsYWltSWQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGNvbW1lbnRCeUlkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY29tbWVudEJ5SWQpO1xuICAgIGNvbnN0IGJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieUlkKTtcbiAgICBjb25zdCBjb21tZW50cyA9IGJ5SWRbY2xhaW1JZF07XG4gICAgY29uc3QgbmV3Q29tbWVudElkcyA9IGNvbW1lbnRzLnNsaWNlKCk7XG5cbiAgICAvLyBhZGQgdGhlIGNvbW1lbnQgYnkgaXRzIElEXG4gICAgY29tbWVudEJ5SWRbY29tbWVudC5jb21tZW50X2lkXSA9IGNvbW1lbnQ7XG5cbiAgICAvLyBwdXNoIHRoZSBjb21tZW50X2lkIHRvIHRoZSB0b3Agb2YgSUQgbGlzdFxuICAgIG5ld0NvbW1lbnRJZHMudW5zaGlmdChjb21tZW50LmNvbW1lbnRfaWQpO1xuICAgIGJ5SWRbY2xhaW1JZF0gPSBuZXdDb21tZW50SWRzO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgICBjb21tZW50QnlJZCxcbiAgICAgIGJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG5cbiAgW0NPTU1FTlRfTElTVF9TVEFSVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHsgaXNMb2FkaW5nOiB0cnVlIH0pLFxuXG4gIFtDT01NRU5UX0xJU1RfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGNvbW1lbnRzLCBjbGFpbUlkLCB1cmkgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgY29uc3QgY29tbWVudEJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50QnlJZCk7XG4gICAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuICAgIGNvbnN0IGNvbW1lbnRzQnlVcmkgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50c0J5VXJpKTtcblxuICAgIGlmIChjb21tZW50cykge1xuICAgICAgLy8gd2UgdXNlIGFuIEFycmF5IHRvIHByZXNlcnZlIG9yZGVyIG9mIGxpc3RpbmdcbiAgICAgIC8vIGluIHJlYWxpdHkgdGhpcyBkb2Vzbid0IG1hdHRlciBhbmQgd2UgY2FuIGp1c3RcbiAgICAgIC8vIHNvcnQgY29tbWVudHMgYnkgdGhlaXIgdGltZXN0YW1wXG4gICAgICBjb25zdCBjb21tZW50SWRzID0gQXJyYXkoY29tbWVudHMubGVuZ3RoKTtcblxuICAgICAgLy8gbWFwIHRoZSBjb21tZW50X2lkcyB0byB0aGUgbmV3IGNvbW1lbnRzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbW1lbnRJZHNbaV0gPSBjb21tZW50c1tpXS5jb21tZW50X2lkO1xuICAgICAgICBjb21tZW50QnlJZFtjb21tZW50SWRzW2ldXSA9IGNvbW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICBieUlkW2NsYWltSWRdID0gY29tbWVudElkcztcbiAgICAgIGNvbW1lbnRzQnlVcmlbdXJpXSA9IGNsYWltSWQ7XG4gICAgfVxuICAgIHJldHVybiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgICAgYnlJZCxcbiAgICAgIGNvbW1lbnRCeUlkLFxuICAgICAgY29tbWVudHNCeVVyaSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9KTtcbiAgfSxcblxuICBbQ09NTUVOVF9MSVNUX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogZmFsc2VcbiAgfSksXG4gIFtDT01NRU5UX0FCQU5ET05fU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgIGlzTG9hZGluZzogdHJ1ZVxuICB9KSxcbiAgW0NPTU1FTlRfQUJBTkRPTl9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgY29tbWVudF9pZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgY29tbWVudEJ5SWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb21tZW50QnlJZCk7XG4gICAgY29uc3QgYnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5SWQpO1xuXG4gICAgLy8gdG8gcmVtb3ZlIHRoZSBjb21tZW50IGFuZCBpdHMgcmVmZXJlbmNlc1xuICAgIGNvbnN0IGNsYWltSWQgPSBjb21tZW50QnlJZFtjb21tZW50X2lkXS5jbGFpbV9pZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5SWRbY2xhaW1JZF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChieUlkW2NsYWltSWRdW2ldID09PSBjb21tZW50X2lkKSB7XG4gICAgICAgIGJ5SWRbY2xhaW1JZF0uc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIGNvbW1lbnRCeUlkW2NvbW1lbnRfaWRdO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgICBjb21tZW50QnlJZCxcbiAgICAgIGJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIC8vIGRvIG5vdGhpbmdcbiAgW0NPTU1FTlRfQUJBTkRPTl9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pLFxuICAvLyBkbyBub3RoaW5nXG4gIFtDT01NRU5UX1VQREFURV9TVEFSVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiB0cnVlXG4gIH0pLFxuICAvLyByZXBsYWNlIGV4aXN0aW5nIGNvbW1lbnQgd2l0aCBjb21tZW50IHJldHVybmVkIGhlcmUgdW5kZXIgaXRzIGNvbW1lbnRfaWRcbiAgW0NPTU1FTlRfVVBEQVRFX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBjb21tZW50IH0gPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBjb21tZW50QnlJZCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNvbW1lbnRCeUlkKTtcbiAgICBjb21tZW50QnlJZFtjb21tZW50LmNvbW1lbnRfaWRdID0gY29tbWVudDtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRhKHt9LCBzdGF0ZSwge1xuICAgICAgY29tbWVudEJ5SWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIC8vIG5vdGhpbmcgY2FuIGJlIGRvbmUgaGVyZVxuICBbQ09NTUVOVF9VUERBVEVfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZVxuICB9KSxcbiAgLy8gbm90aGluZyBjYW4gcmVhbGx5IGJlIGRvbmUgaGVyZVxuICBbQ09NTUVOVF9ISURFX1NUQVJURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IHRydWVcbiAgfSksXG4gIFtDT01NRU5UX0hJREVfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGEoe30sIHN0YXRlLCB7IC8vIHRvZG86IGFkZCBIaWRkZW5Db21tZW50cyBzdGF0ZSAmIGNyZWF0ZSBzZWxlY3RvcnNcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pLFxuICAvLyBub3RoaW5nIGNhbiBiZSBkb25lIGhlcmVcbiAgW0NPTU1FTlRfSElERV9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkYSh7fSwgc3RhdGUsIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlXG4gIH0pXG59LCBkZWZhdWx0U3RhdGUkMSk7XG5cbnZhciBfZXh0ZW5kcyRiID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgcmVkdWNlcnMkMSA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDIgPSB7XG4gIHBvc2l0aW9uczoge31cbn07XG5cbnJlZHVjZXJzJDFbU0VUX0NPTlRFTlRfUE9TSVRJT05dID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBjbGFpbUlkLCBvdXRwb2ludCwgcG9zaXRpb24gfSA9IGFjdGlvbi5kYXRhO1xuICByZXR1cm4gX2V4dGVuZHMkYih7fSwgc3RhdGUsIHtcbiAgICBwb3NpdGlvbnM6IF9leHRlbmRzJGIoe30sIHN0YXRlLnBvc2l0aW9ucywge1xuICAgICAgW2NsYWltSWRdOiBfZXh0ZW5kcyRiKHt9LCBzdGF0ZS5wb3NpdGlvbnNbY2xhaW1JZF0sIHtcbiAgICAgICAgW291dHBvaW50XTogcG9zaXRpb25cbiAgICAgIH0pXG4gICAgfSlcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjb250ZW50UmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSQyLCBhY3Rpb24pIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzJDFbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuY29uc3QgcmVkdWNlcnMkMiA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDMgPSB7XG4gIGZpbGVMaXN0UHVibGlzaGVkU29ydDogREFURV9ORVcsXG4gIGZpbGVMaXN0RG93bmxvYWRlZFNvcnQ6IERBVEVfTkVXXG59O1xuXG5yZWR1Y2VycyQyW0ZJTEVfTElTVF9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGlzRmV0Y2hpbmdGaWxlTGlzdDogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbRklMRV9MSVNUX1NVQ0NFRURFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGZpbGVJbmZvcyB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgcGVuZGluZ0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5wZW5kaW5nQnlPdXRwb2ludCk7XG5cbiAgZmlsZUluZm9zLmZvckVhY2goZmlsZUluZm8gPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGZpbGVJbmZvO1xuXG4gICAgaWYgKG91dHBvaW50KSBuZXdCeU91dHBvaW50W2ZpbGVJbmZvLm91dHBvaW50XSA9IGZpbGVJbmZvO1xuICB9KTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBpc0ZldGNoaW5nRmlsZUxpc3Q6IGZhbHNlLFxuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnQsXG4gICAgcGVuZGluZ0J5T3V0cG9pbnRcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0ZFVENIX0ZJTEVfSU5GT19TVEFSVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcblxuICBuZXdGZXRjaGluZ1tvdXRwb2ludF0gPSB0cnVlO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGZldGNoaW5nOiBuZXdGZXRjaGluZ1xuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbRkVUQ0hfRklMRV9JTkZPX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IGZpbGVJbmZvLCBvdXRwb2ludCB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3QgbmV3QnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5T3V0cG9pbnQpO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcblxuICBuZXdCeU91dHBvaW50W291dHBvaW50XSA9IGZpbGVJbmZvO1xuICBkZWxldGUgbmV3RmV0Y2hpbmdbb3V0cG9pbnRdO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnQsXG4gICAgZmV0Y2hpbmc6IG5ld0ZldGNoaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltGRVRDSF9GSUxFX0lORk9fRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGZXRjaGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmZldGNoaW5nKTtcbiAgZGVsZXRlIG5ld0ZldGNoaW5nW291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZzogbmV3RmV0Y2hpbmdcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0RPV05MT0FESU5HX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmksIG91dHBvaW50LCBmaWxlSW5mbyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgY29uc3QgbmV3QnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmJ5T3V0cG9pbnQpO1xuICBjb25zdCBuZXdEb3dubG9hZGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmRvd25sb2FkaW5nQnlPdXRwb2ludCk7XG5cbiAgbmV3RG93bmxvYWRpbmdbb3V0cG9pbnRdID0gdHJ1ZTtcbiAgbmV3QnlPdXRwb2ludFtvdXRwb2ludF0gPSBmaWxlSW5mbztcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nLFxuICAgIGJ5T3V0cG9pbnQ6IG5ld0J5T3V0cG9pbnRcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW0RPV05MT0FESU5HX1BST0dSRVNTRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBvdXRwb2ludCwgZmlsZUluZm8gfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgbmV3RG93bmxvYWRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kb3dubG9hZGluZ0J5T3V0cG9pbnQpO1xuXG4gIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdID0gZmlsZUluZm87XG4gIG5ld0Rvd25sb2FkaW5nW291dHBvaW50XSA9IHRydWU7XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlPdXRwb2ludDogbmV3QnlPdXRwb2ludCxcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltET1dOTE9BRElOR19DQU5DRUxFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSwgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0Rvd25sb2FkaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZG93bmxvYWRpbmdCeU91dHBvaW50KTtcbiAgZGVsZXRlIG5ld0Rvd25sb2FkaW5nW291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltET1dOTE9BRElOR19DT01QTEVURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyBvdXRwb2ludCwgZmlsZUluZm8gfSA9IGFjdGlvbi5kYXRhO1xuXG4gIGNvbnN0IG5ld0J5T3V0cG9pbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5ieU91dHBvaW50KTtcbiAgY29uc3QgbmV3RG93bmxvYWRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kb3dubG9hZGluZ0J5T3V0cG9pbnQpO1xuXG4gIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdID0gZmlsZUluZm87XG4gIGRlbGV0ZSBuZXdEb3dubG9hZGluZ1tvdXRwb2ludF07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgYnlPdXRwb2ludDogbmV3QnlPdXRwb2ludCxcbiAgICBkb3dubG9hZGluZ0J5T3V0cG9pbnQ6IG5ld0Rvd25sb2FkaW5nXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltGSUxFX0RFTEVURV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IG91dHBvaW50IH0gPSBhY3Rpb24uZGF0YTtcblxuICBjb25zdCBuZXdCeU91dHBvaW50ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlPdXRwb2ludCk7XG4gIGNvbnN0IGRvd25sb2FkaW5nQnlPdXRwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmRvd25sb2FkaW5nQnlPdXRwb2ludCk7XG5cbiAgZGVsZXRlIG5ld0J5T3V0cG9pbnRbb3V0cG9pbnRdO1xuICBkZWxldGUgZG93bmxvYWRpbmdCeU91dHBvaW50W291dHBvaW50XTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBieU91dHBvaW50OiBuZXdCeU91dHBvaW50LFxuICAgIGRvd25sb2FkaW5nQnlPdXRwb2ludFxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbU0VUX0ZJTEVfTElTVF9TT1JUXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBhZ2VTb3J0U3RhdGVzID0ge1xuICAgIFtQVUJMSVNIRURdOiAnZmlsZUxpc3RQdWJsaXNoZWRTb3J0JyxcbiAgICBbRE9XTkxPQURFRF06ICdmaWxlTGlzdERvd25sb2FkZWRTb3J0J1xuICB9O1xuICBjb25zdCBwYWdlU29ydFN0YXRlID0gcGFnZVNvcnRTdGF0ZXNbYWN0aW9uLmRhdGEucGFnZV07XG4gIGNvbnN0IHsgdmFsdWUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIFtwYWdlU29ydFN0YXRlXTogdmFsdWVcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBmaWxlSW5mb1JlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkMywgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQyW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbnZhciBfZXh0ZW5kcyRjID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgcmVkdWNlcnMkMyA9IHt9O1xuY29uc3QgZGVmYXVsdFN0YXRlJDQgPSB7XG4gIGZhaWxlZFB1cmNoYXNlVXJpczogW10sXG4gIHB1cmNoYXNlZFVyaXM6IFtdLFxuICBwdXJjaGFzZVVyaUVycm9yTWVzc2FnZTogJydcbn07XG5cbnJlZHVjZXJzJDNbUFVSQ0hBU0VfVVJJX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgeyB1cmkgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBuZXdGYWlsZWRQdXJjaGFzZVVyaXMgPSBzdGF0ZS5mYWlsZWRQdXJjaGFzZVVyaXMuc2xpY2UoKTtcbiAgaWYgKG5ld0ZhaWxlZFB1cmNoYXNlVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3RmFpbGVkUHVyY2hhc2VVcmlzLnNwbGljZShuZXdGYWlsZWRQdXJjaGFzZVVyaXMuaW5kZXhPZih1cmkpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyRjKHt9LCBzdGF0ZSwge1xuICAgIGZhaWxlZFB1cmNoYXNlVXJpczogbmV3RmFpbGVkUHVyY2hhc2VVcmlzLFxuICAgIHB1cmNoYXNlVXJpRXJyb3JNZXNzYWdlOiAnJ1xuICB9KTtcbn07XG5cbnJlZHVjZXJzJDNbUFVSQ0hBU0VfVVJJX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld1B1cmNoYXNlZFVyaXMgPSBzdGF0ZS5wdXJjaGFzZWRVcmlzLnNsaWNlKCk7XG4gIGNvbnN0IG5ld0ZhaWxlZFB1cmNoYXNlVXJpcyA9IHN0YXRlLmZhaWxlZFB1cmNoYXNlVXJpcy5zbGljZSgpO1xuXG4gIGlmICghbmV3UHVyY2hhc2VkVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3UHVyY2hhc2VkVXJpcy5wdXNoKHVyaSk7XG4gIH1cbiAgaWYgKG5ld0ZhaWxlZFB1cmNoYXNlVXJpcy5pbmNsdWRlcyh1cmkpKSB7XG4gICAgbmV3RmFpbGVkUHVyY2hhc2VVcmlzLnNwbGljZShuZXdGYWlsZWRQdXJjaGFzZVVyaXMuaW5kZXhPZih1cmkpLCAxKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyRjKHt9LCBzdGF0ZSwge1xuICAgIGZhaWxlZFB1cmNoYXNlVXJpczogbmV3RmFpbGVkUHVyY2hhc2VVcmlzLFxuICAgIHB1cmNoYXNlZFVyaXM6IG5ld1B1cmNoYXNlZFVyaXMsXG4gICAgcHVyY2hhc2VVcmlFcnJvck1lc3NhZ2U6ICcnXG4gIH0pO1xufTtcblxucmVkdWNlcnMkM1tQVVJDSEFTRV9VUklfRkFJTEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgdXJpLCBlcnJvciB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld0ZhaWxlZFB1cmNoYXNlVXJpcyA9IHN0YXRlLmZhaWxlZFB1cmNoYXNlVXJpcy5zbGljZSgpO1xuXG4gIGlmICghbmV3RmFpbGVkUHVyY2hhc2VVcmlzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICBuZXdGYWlsZWRQdXJjaGFzZVVyaXMucHVzaCh1cmkpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzJGMoe30sIHN0YXRlLCB7XG4gICAgZmFpbGVkUHVyY2hhc2VVcmlzOiBuZXdGYWlsZWRQdXJjaGFzZVVyaXMsXG4gICAgcHVyY2hhc2VVcmlFcnJvck1lc3NhZ2U6IGVycm9yXG4gIH0pO1xufTtcblxucmVkdWNlcnMkM1tERUxFVEVfUFVSQ0hBU0VEX1VSSV0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IG5ld1B1cmNoYXNlZFVyaXMgPSBzdGF0ZS5wdXJjaGFzZWRVcmlzLnNsaWNlKCk7XG4gIGlmIChuZXdQdXJjaGFzZWRVcmlzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICBuZXdQdXJjaGFzZWRVcmlzLnNwbGljZShuZXdQdXJjaGFzZWRVcmlzLmluZGV4T2YodXJpKSwgMSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMkYyh7fSwgc3RhdGUsIHtcbiAgICBwdXJjaGFzZWRVcmlzOiBuZXdQdXJjaGFzZWRVcmlzXG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZmlsZVJlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkNCwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQzW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbnZhciBfZXh0ZW5kcyRkID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDUgPSB7XG4gIG5vdGlmaWNhdGlvbnM6IFtdLFxuICB0b2FzdHM6IFtdLFxuICBlcnJvcnM6IFtdXG59O1xuXG5jb25zdCBub3RpZmljYXRpb25zUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICAvLyBUb2FzdHNcbiAgW0NSRUFURV9UT0FTVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgdG9hc3QgPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBuZXdUb2FzdHMgPSBzdGF0ZS50b2FzdHMuc2xpY2UoKTtcbiAgICBuZXdUb2FzdHMucHVzaCh0b2FzdCk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIHRvYXN0czogbmV3VG9hc3RzXG4gICAgfSk7XG4gIH0sXG4gIFtESVNNSVNTX1RPQVNUXTogc3RhdGUgPT4ge1xuICAgIGNvbnN0IG5ld1RvYXN0cyA9IHN0YXRlLnRvYXN0cy5zbGljZSgpO1xuICAgIG5ld1RvYXN0cy5zaGlmdCgpO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGQoe30sIHN0YXRlLCB7XG4gICAgICB0b2FzdHM6IG5ld1RvYXN0c1xuICAgIH0pO1xuICB9LFxuXG4gIC8vIE5vdGlmaWNhdGlvbnNcbiAgW0NSRUFURV9OT1RJRklDQVRJT05dOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld05vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG4gICAgbmV3Tm90aWZpY2F0aW9ucy5wdXNoKG5vdGlmaWNhdGlvbik7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIG5vdGlmaWNhdGlvbnM6IG5ld05vdGlmaWNhdGlvbnNcbiAgICB9KTtcbiAgfSxcbiAgLy8gVXNlZCB0byBtYXJrIG5vdGlmaWNhdGlvbnMgYXMgcmVhZC9kaXNtaXNzZWRcbiAgW0VESVRfTk9USUZJQ0FUSU9OXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IG5vdGlmaWNhdGlvbiB9ID0gYWN0aW9uLmRhdGE7XG4gICAgbGV0IG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG5cbiAgICBub3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5tYXAocGFzdE5vdGlmaWNhdGlvbiA9PiBwYXN0Tm90aWZpY2F0aW9uLmlkID09PSBub3RpZmljYXRpb24uaWQgPyBub3RpZmljYXRpb24gOiBwYXN0Tm90aWZpY2F0aW9uKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgbm90aWZpY2F0aW9uc1xuICAgIH0pO1xuICB9LFxuICBbREVMRVRFX05PVElGSUNBVElPTl06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgbGV0IG5ld05vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLnNsaWNlKCk7XG4gICAgbmV3Tm90aWZpY2F0aW9ucyA9IG5ld05vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiBub3RpZmljYXRpb24uaWQgIT09IGlkKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgbm90aWZpY2F0aW9uczogbmV3Tm90aWZpY2F0aW9uc1xuICAgIH0pO1xuICB9LFxuXG4gIC8vIEVycm9yc1xuICBbQ1JFQVRFX0VSUk9SXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0Vycm9ycyA9IHN0YXRlLmVycm9ycy5zbGljZSgpO1xuICAgIG5ld0Vycm9ycy5wdXNoKGVycm9yKTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRkKHt9LCBzdGF0ZSwge1xuICAgICAgZXJyb3JzOiBuZXdFcnJvcnNcbiAgICB9KTtcbiAgfSxcbiAgW0RJU01JU1NfRVJST1JdOiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgbmV3RXJyb3JzID0gc3RhdGUuZXJyb3JzLnNsaWNlKCk7XG4gICAgbmV3RXJyb3JzLnNoaWZ0KCk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZCh7fSwgc3RhdGUsIHtcbiAgICAgIGVycm9yczogbmV3RXJyb3JzXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ1KTtcblxudmFyIF9leHRlbmRzJGUgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuY29uc3QgZGVmYXVsdFN0YXRlJDYgPSB7XG4gIGVkaXRpbmdVUkk6IHVuZGVmaW5lZCxcbiAgZmlsZVBhdGg6IHVuZGVmaW5lZCxcbiAgY29udGVudElzRnJlZTogdHJ1ZSxcbiAgZmVlOiB7XG4gICAgYW1vdW50OiAxLFxuICAgIGN1cnJlbmN5OiAnTEJDJ1xuICB9LFxuICB0aXRsZTogJycsXG4gIHRodW1ibmFpbF91cmw6ICcnLFxuICB0aHVtYm5haWxQYXRoOiAnJyxcbiAgdXBsb2FkVGh1bWJuYWlsU3RhdHVzOiBBUElfRE9XTixcbiAgZGVzY3JpcHRpb246ICcnLFxuICBsYW5ndWFnZTogJycsXG4gIG5zZnc6IGZhbHNlLFxuICBjaGFubmVsOiBDSEFOTkVMX0FOT05ZTU9VUyxcbiAgY2hhbm5lbElkOiAnJyxcbiAgbmFtZTogJycsXG4gIG5hbWVFcnJvcjogdW5kZWZpbmVkLFxuICBiaWQ6IDAuMSxcbiAgYmlkRXJyb3I6IHVuZGVmaW5lZCxcbiAgbGljZW5zZVR5cGU6ICdOb25lJyxcbiAgb3RoZXJMaWNlbnNlRGVzY3JpcHRpb246ICdBbGwgcmlnaHRzIHJlc2VydmVkJyxcbiAgbGljZW5zZVVybDogJycsXG4gIHRhZ3M6IFtdLFxuICBwdWJsaXNoaW5nOiBmYWxzZSxcbiAgcHVibGlzaFN1Y2Nlc3M6IGZhbHNlLFxuICBwdWJsaXNoRXJyb3I6IHVuZGVmaW5lZFxufTtcblxuY29uc3QgcHVibGlzaFJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW1VQREFURV9QVUJMSVNIX0ZPUk1dOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYWN0aW9uO1xuICAgIHJldHVybiBfZXh0ZW5kcyRlKHt9LCBzdGF0ZSwgZGF0YSk7XG4gIH0sXG4gIFtDTEVBUl9QVUJMSVNIXTogKCkgPT4gX2V4dGVuZHMkZSh7fSwgZGVmYXVsdFN0YXRlJDYpLFxuICBbUFVCTElTSF9TVEFSVF06IHN0YXRlID0+IF9leHRlbmRzJGUoe30sIHN0YXRlLCB7XG4gICAgcHVibGlzaGluZzogdHJ1ZSxcbiAgICBwdWJsaXNoU3VjY2VzczogZmFsc2VcbiAgfSksXG4gIFtQVUJMSVNIX0ZBSUxdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRlKHt9LCBzdGF0ZSwge1xuICAgIHB1Ymxpc2hpbmc6IGZhbHNlXG4gIH0pLFxuICBbUFVCTElTSF9TVUNDRVNTXTogc3RhdGUgPT4gX2V4dGVuZHMkZSh7fSwgc3RhdGUsIHtcbiAgICBwdWJsaXNoaW5nOiBmYWxzZSxcbiAgICBwdWJsaXNoU3VjY2VzczogdHJ1ZVxuICB9KSxcbiAgW0RPX1BSRVBBUkVfRURJVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcHVibGlzaERhdGEgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMkMyhhY3Rpb24uZGF0YSwgW10pO1xuICAgIGNvbnN0IHsgY2hhbm5lbCwgbmFtZSwgdXJpIH0gPSBwdWJsaXNoRGF0YTtcblxuICAgIC8vIFRoZSBzaG9ydCB1cmkgaXMgd2hhdCBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJcbiAgICAvLyBUaGUgZWRpdGluZ1VyaSBpcyB0aGUgZnVsbCB1cmkgd2l0aCBjbGFpbSBpZFxuICAgIGNvbnN0IHNob3J0VXJpID0gYnVpbGRVUkkoe1xuICAgICAgY2hhbm5lbE5hbWU6IGNoYW5uZWwsXG4gICAgICBzdHJlYW1OYW1lOiBuYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZSh7fSwgZGVmYXVsdFN0YXRlJDYsIHB1Ymxpc2hEYXRhLCB7XG4gICAgICBlZGl0aW5nVVJJOiB1cmksXG4gICAgICB1cmk6IHNob3J0VXJpXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ2KTtcblxudmFyIF9leHRlbmRzJGYgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkNyA9IHtcbiAgaXNBY3RpdmU6IGZhbHNlLCAvLyBkb2VzIHRoZSB1c2VyIGhhdmUgYW55IHR5cGVkIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICBmb2N1c2VkOiBmYWxzZSwgLy8gaXMgdGhlIHNlYXJjaCBpbnB1dCBmb2N1c2VkXG4gIHNlYXJjaFF1ZXJ5OiAnJywgLy8gbmVlZHMgdG8gYmUgYW4gZW1wdHkgc3RyaW5nIGZvciBpbnB1dCBmb2N1c2luZ1xuICBvcHRpb25zOiB7XG4gICAgW1NFQVJDSF9PUFRJT05TLlJFU1VMVF9DT1VOVF06IDMwLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5DTEFJTV9UWVBFXTogU0VBUkNIX09QVElPTlMuSU5DTFVERV9GSUxFU19BTkRfQ0hBTk5FTFMsXG4gICAgW1NFQVJDSF9PUFRJT05TLk1FRElBX0FVRElPXTogdHJ1ZSxcbiAgICBbU0VBUkNIX09QVElPTlMuTUVESUFfVklERU9dOiB0cnVlLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5NRURJQV9URVhUXTogdHJ1ZSxcbiAgICBbU0VBUkNIX09QVElPTlMuTUVESUFfSU1BR0VdOiB0cnVlLFxuICAgIFtTRUFSQ0hfT1BUSU9OUy5NRURJQV9BUFBMSUNBVElPTl06IHRydWVcbiAgfSxcbiAgc3VnZ2VzdGlvbnM6IHt9LFxuICB1cmlzQnlRdWVyeToge30sXG4gIHJlc29sdmVkUmVzdWx0c0J5UXVlcnk6IHt9LFxuICByZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkOiB7fVxufTtcblxuY29uc3Qgc2VhcmNoUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbU0VBUkNIX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IHRydWVcbiAgfSksXG4gIFtTRUFSQ0hfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeSwgdXJpcyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICAgIHNlYXJjaGluZzogZmFsc2UsXG4gICAgICB1cmlzQnlRdWVyeTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXJpc0J5UXVlcnksIHsgW3F1ZXJ5XTogdXJpcyB9KVxuICAgIH0pO1xuICB9LFxuXG4gIFtTRUFSQ0hfRkFJTF06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc2VhcmNoaW5nOiBmYWxzZVxuICB9KSxcblxuICBbUkVTT0xWRURfU0VBUkNIX1NUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IHRydWVcbiAgfSksXG4gIFtSRVNPTFZFRF9TRUFSQ0hfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlc29sdmVkUmVzdWx0c0J5UXVlcnkpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkKTtcbiAgICBjb25zdCB7IGFwcGVuZCwgcXVlcnksIHJlc3VsdHMsIHBhZ2VTaXplIH0gPSBhY3Rpb24uZGF0YTtcblxuICAgIGlmIChhcHBlbmQpIHtcbiAgICAgIC8vIHRvZG86IGNoZWNrIGZvciBkdXBsaWNhdGVzIHdoZW4gY29uY2F0ZW5hdGluZz9cbiAgICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnlbcXVlcnldID0gcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0gJiYgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0ubGVuZ3RoID8gcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0uY29uY2F0KHJlc3VsdHMpIDogcmVzdWx0cztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRSZXN1bHRzQnlRdWVyeVtxdWVyeV0gPSByZXN1bHRzO1xuICAgIH1cblxuICAgIC8vIHRoZSByZXR1cm5lZCBudW1iZXIgb2YgdXJscyBpcyBsZXNzIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgc28gd2UncmUgb24gdGhlIGxhc3QgcGFnZVxuICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWRbcXVlcnldID0gcmVzdWx0cy5sZW5ndGggPCBwYWdlU2l6ZTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRmKHt9LCBzdGF0ZSwge1xuICAgICAgc2VhcmNoaW5nOiBmYWxzZSxcbiAgICAgIHJlc29sdmVkUmVzdWx0c0J5UXVlcnksXG4gICAgICByZXNvbHZlZFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkXG4gICAgfSk7XG4gIH0sXG5cbiAgW1JFU09MVkVEX1NFQVJDSF9GQUlMXTogc3RhdGUgPT4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICBzZWFyY2hpbmc6IGZhbHNlXG4gIH0pLFxuXG4gIFtVUERBVEVfU0VBUkNIX1FVRVJZXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc2VhcmNoUXVlcnk6IGFjdGlvbi5kYXRhLnF1ZXJ5LFxuICAgIGlzQWN0aXZlOiB0cnVlXG4gIH0pLFxuXG4gIFtVUERBVEVfU0VBUkNIX1NVR0dFU1RJT05TXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgc3VnZ2VzdGlvbnM6IF9leHRlbmRzJGYoe30sIHN0YXRlLnN1Z2dlc3Rpb25zLCB7XG4gICAgICBbYWN0aW9uLmRhdGEucXVlcnldOiBhY3Rpb24uZGF0YS5zdWdnZXN0aW9uc1xuICAgIH0pXG4gIH0pLFxuXG4gIC8vIHNldHMgaXNBY3RpdmUgdG8gZmFsc2Ugc28gdGhlIHVyaSB3aWxsIGJlIHBvcHVsYXRlZCBjb3JyZWN0bHkgaWYgdGhlXG4gIC8vIHVzZXIgaXMgb24gYSBmaWxlIHBhZ2UuIFRoZSBzZWFyY2ggcXVlcnkgd2lsbCBzdGlsbCBiZSBwcmVzZW50IG9uIGFueVxuICAvLyBvdGhlciBwYWdlXG4gIFtESVNNSVNTX05PVElGSUNBVElPTl06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgaXNBY3RpdmU6IGZhbHNlXG4gIH0pLFxuXG4gIFtTRUFSQ0hfRk9DVVNdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRmKHt9LCBzdGF0ZSwge1xuICAgIGZvY3VzZWQ6IHRydWVcbiAgfSksXG4gIFtTRUFSQ0hfQkxVUl06IHN0YXRlID0+IF9leHRlbmRzJGYoe30sIHN0YXRlLCB7XG4gICAgZm9jdXNlZDogZmFsc2VcbiAgfSksXG4gIFtVUERBVEVfU0VBUkNIX09QVElPTlNdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3B0aW9uczogb2xkT3B0aW9ucyB9ID0gc3RhdGU7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBfZXh0ZW5kcyRmKHt9LCBvbGRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICByZXR1cm4gX2V4dGVuZHMkZih7fSwgc3RhdGUsIHtcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDcpO1xuXG52YXIgX2V4dGVuZHMkZyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRLbm93blRhZ3MoKSB7XG4gIHJldHVybiBERUZBVUxUX0ZPTExPV0VEX1RBR1MuY29uY2F0KERFRkFVTFRfS05PV05fVEFHUykucmVkdWNlKCh0YWdzTWFwLCB0YWcpID0+IF9leHRlbmRzJGcoe30sIHRhZ3NNYXAsIHtcbiAgICBbdGFnXTogeyBuYW1lOiB0YWcgfVxuICB9KSwge30pO1xufVxuXG5jb25zdCBkZWZhdWx0U3RhdGUkOCA9IHtcbiAgZm9sbG93ZWRUYWdzOiBERUZBVUxUX0ZPTExPV0VEX1RBR1MsXG4gIGtub3duVGFnczogZ2V0RGVmYXVsdEtub3duVGFncygpXG59O1xuXG5jb25zdCB0YWdzUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbVE9HR0xFX1RBR19GT0xMT1ddOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgZm9sbG93ZWRUYWdzIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgbGV0IG5ld0ZvbGxvd2VkVGFncyA9IGZvbGxvd2VkVGFncy5zbGljZSgpO1xuXG4gICAgaWYgKG5ld0ZvbGxvd2VkVGFncy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgbmV3Rm9sbG93ZWRUYWdzID0gbmV3Rm9sbG93ZWRUYWdzLmZpbHRlcih0YWcgPT4gdGFnICE9PSBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Rm9sbG93ZWRUYWdzLnB1c2gobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzJGcoe30sIHN0YXRlLCB7XG4gICAgICBmb2xsb3dlZFRhZ3M6IG5ld0ZvbGxvd2VkVGFnc1xuICAgIH0pO1xuICB9LFxuXG4gIFtUQUdfQUREXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGtub3duVGFncyB9ID0gc3RhdGU7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBhY3Rpb24uZGF0YTtcblxuICAgIGxldCBuZXdLbm93blRhZ3MgPSBfZXh0ZW5kcyRnKHt9LCBrbm93blRhZ3MpO1xuICAgIG5ld0tub3duVGFnc1tuYW1lXSA9IHsgbmFtZSB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGcoe30sIHN0YXRlLCB7XG4gICAgICBrbm93blRhZ3M6IG5ld0tub3duVGFnc1xuICAgIH0pO1xuICB9LFxuXG4gIFtUQUdfREVMRVRFXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IGtub3duVGFncywgZm9sbG93ZWRUYWdzIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGFjdGlvbi5kYXRhO1xuXG4gICAgbGV0IG5ld0tub3duVGFncyA9IF9leHRlbmRzJGcoe30sIGtub3duVGFncyk7XG4gICAgZGVsZXRlIG5ld0tub3duVGFnc1tuYW1lXTtcbiAgICBjb25zdCBuZXdGb2xsb3dlZFRhZ3MgPSBmb2xsb3dlZFRhZ3MuZmlsdGVyKHRhZyA9PiB0YWcgIT09IG5hbWUpO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGcoe30sIHN0YXRlLCB7XG4gICAgICBrbm93blRhZ3M6IG5ld0tub3duVGFncyxcbiAgICAgIGZvbGxvd2VkVGFnczogbmV3Rm9sbG93ZWRUYWdzXG4gICAgfSk7XG4gIH0sXG4gIFtVU0VSX1NUQVRFX1BPUFVMQVRFXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7IHRhZ3MgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiBfZXh0ZW5kcyRnKHt9LCBzdGF0ZSwge1xuICAgICAgZm9sbG93ZWRUYWdzOiB0YWdzICYmIHRhZ3MubGVuZ3RoID8gdGFncyA6IERFRkFVTFRfRk9MTE9XRURfVEFHU1xuICAgIH0pO1xuICB9XG59LCBkZWZhdWx0U3RhdGUkOCk7XG5cbnZhciBfZXh0ZW5kcyRoID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDkgPSB7XG4gIGJsb2NrZWRDaGFubmVsczogW11cbn07XG5cbmNvbnN0IGJsb2NrZWRSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtUT0dHTEVfQkxPQ0tfQ0hBTk5FTF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBibG9ja2VkQ2hhbm5lbHMgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgdXJpIH0gPSBhY3Rpb24uZGF0YTtcbiAgICBsZXQgbmV3QmxvY2tlZENoYW5uZWxzID0gYmxvY2tlZENoYW5uZWxzLnNsaWNlKCk7XG5cbiAgICBpZiAobmV3QmxvY2tlZENoYW5uZWxzLmluY2x1ZGVzKHVyaSkpIHtcbiAgICAgIG5ld0Jsb2NrZWRDaGFubmVscyA9IG5ld0Jsb2NrZWRDaGFubmVscy5maWx0ZXIoaWQgPT4gaWQgIT09IHVyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jsb2NrZWRDaGFubmVscy5wdXNoKHVyaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrZWRDaGFubmVsczogbmV3QmxvY2tlZENoYW5uZWxzXG4gICAgfTtcbiAgfSxcbiAgW1VTRVJfU1RBVEVfUE9QVUxBVEVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgYmxvY2tlZCB9ID0gYWN0aW9uLmRhdGE7XG4gICAgcmV0dXJuIF9leHRlbmRzJGgoe30sIHN0YXRlLCB7XG4gICAgICBibG9ja2VkQ2hhbm5lbHM6IGJsb2NrZWQgJiYgYmxvY2tlZC5sZW5ndGggPyBibG9ja2VkIDogc3RhdGUuYmxvY2tlZENoYW5uZWxzXG4gICAgfSk7XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ5KTtcblxudmFyIF9leHRlbmRzJGkgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBidWlsZERyYWZ0VHJhbnNhY3Rpb24gPSAoKSA9PiAoe1xuICBhbW91bnQ6IHVuZGVmaW5lZCxcbiAgYWRkcmVzczogdW5kZWZpbmVkXG59KTtcblxuLy8gVE9ETzogU3BsaXQgaW50byBjb21tb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB0eXBlc1xuLy8gU2VlIGRldGFpbHMgaW4gaHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9sYnJ5L2lzc3Vlcy8xMzA3XG5cblxuY29uc3QgZGVmYXVsdFN0YXRlJGEgPSB7XG4gIGJhbGFuY2U6IHVuZGVmaW5lZCxcbiAgdG90YWxCYWxhbmNlOiB1bmRlZmluZWQsXG4gIHJlc2VydmVkQmFsYW5jZTogdW5kZWZpbmVkLFxuICBjbGFpbXNCYWxhbmNlOiB1bmRlZmluZWQsXG4gIHN1cHBvcnRzQmFsYW5jZTogdW5kZWZpbmVkLFxuICB0aXBzQmFsYW5jZTogdW5kZWZpbmVkLFxuICBsYXRlc3RCbG9jazogdW5kZWZpbmVkLFxuICB0cmFuc2FjdGlvbnM6IHt9LFxuICBmZXRjaGluZ1RyYW5zYWN0aW9uczogZmFsc2UsXG4gIHN1cHBvcnRzOiB7fSxcbiAgZmV0Y2hpbmdTdXBwb3J0czogZmFsc2UsXG4gIGFiYW5kb25pbmdTdXBwb3J0c0J5T3V0cG9pbnQ6IHt9LFxuICBnZXR0aW5nTmV3QWRkcmVzczogZmFsc2UsXG4gIGRyYWZ0VHJhbnNhY3Rpb246IGJ1aWxkRHJhZnRUcmFuc2FjdGlvbigpLFxuICBzZW5kaW5nU3VwcG9ydDogZmFsc2UsXG4gIHdhbGxldElzRW5jcnlwdGVkOiBmYWxzZSxcbiAgd2FsbGV0RW5jcnlwdFBlbmRpbmc6IGZhbHNlLFxuICB3YWxsZXRFbmNyeXB0U3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldEVuY3J5cHRSZXN1bHQ6IG51bGwsXG4gIHdhbGxldERlY3J5cHRQZW5kaW5nOiBmYWxzZSxcbiAgd2FsbGV0RGVjcnlwdFN1Y2NlZGVkOiBudWxsLFxuICB3YWxsZXREZWNyeXB0UmVzdWx0OiBudWxsLFxuICB3YWxsZXRVbmxvY2tQZW5kaW5nOiBmYWxzZSxcbiAgd2FsbGV0VW5sb2NrU3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldFVubG9ja1Jlc3VsdDogbnVsbCxcbiAgd2FsbGV0TG9ja1BlbmRpbmc6IGZhbHNlLFxuICB3YWxsZXRMb2NrU3VjY2VkZWQ6IG51bGwsXG4gIHdhbGxldExvY2tSZXN1bHQ6IG51bGwsXG4gIHRyYW5zYWN0aW9uTGlzdEZpbHRlcjogJ2FsbCcsXG4gIHdhbGxldFJlY29ubmVjdGluZzogZmFsc2Vcbn07XG5cbmNvbnN0IHdhbGxldFJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX1RSQU5TQUNUSU9OU19TVEFSVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICBmZXRjaGluZ1RyYW5zYWN0aW9uczogdHJ1ZVxuICB9KSxcblxuICBbRkVUQ0hfVFJBTlNBQ1RJT05TX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgYnlJZCA9IF9leHRlbmRzJGkoe30sIHN0YXRlLnRyYW5zYWN0aW9ucyk7XG5cbiAgICBjb25zdCB7IHRyYW5zYWN0aW9ucyB9ID0gYWN0aW9uLmRhdGE7XG4gICAgdHJhbnNhY3Rpb25zLmZvckVhY2godHJhbnNhY3Rpb24gPT4ge1xuICAgICAgYnlJZFt0cmFuc2FjdGlvbi50eGlkXSA9IHRyYW5zYWN0aW9uO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICB0cmFuc2FjdGlvbnM6IGJ5SWQsXG4gICAgICBmZXRjaGluZ1RyYW5zYWN0aW9uczogZmFsc2VcbiAgICB9KTtcbiAgfSxcblxuICBbRkVUQ0hfU1VQUE9SVFNfU1RBUlRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgZmV0Y2hpbmdTdXBwb3J0czogdHJ1ZVxuICB9KSxcblxuICBbRkVUQ0hfU1VQUE9SVFNfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBieU91dHBvaW50ID0gc3RhdGUuc3VwcG9ydHM7XG4gICAgY29uc3QgeyBzdXBwb3J0cyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICBzdXBwb3J0cy5mb3JFYWNoKHRyYW5zYWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgdHhpZCwgbm91dCB9ID0gdHJhbnNhY3Rpb247XG4gICAgICBieU91dHBvaW50W2Ake3R4aWR9OiR7bm91dH1gXSA9IHRyYW5zYWN0aW9uO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IHN1cHBvcnRzOiBieU91dHBvaW50LCBmZXRjaGluZ1N1cHBvcnRzOiBmYWxzZSB9KTtcbiAgfSxcblxuICBbQUJBTkRPTl9TVVBQT1JUX1NUQVJURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGN1cnJlbnRseUFiYW5kb25pbmcgPSBzdGF0ZS5hYmFuZG9uaW5nU3VwcG9ydHNCeU91dHBvaW50O1xuXG4gICAgY3VycmVudGx5QWJhbmRvbmluZ1tvdXRwb2ludF0gPSB0cnVlO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgICBhYmFuZG9uaW5nU3VwcG9ydHNCeU91dHBvaW50OiBjdXJyZW50bHlBYmFuZG9uaW5nXG4gICAgfSk7XG4gIH0sXG5cbiAgW0FCQU5ET05fU1VQUE9SVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgb3V0cG9pbnQgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IGJ5T3V0cG9pbnQgPSBzdGF0ZS5zdXBwb3J0cztcbiAgICBjb25zdCBjdXJyZW50bHlBYmFuZG9uaW5nID0gc3RhdGUuYWJhbmRvbmluZ1N1cHBvcnRzQnlPdXRwb2ludDtcblxuICAgIGRlbGV0ZSBjdXJyZW50bHlBYmFuZG9uaW5nW291dHBvaW50XTtcbiAgICBkZWxldGUgYnlPdXRwb2ludFtvdXRwb2ludF07XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICAgIHN1cHBvcnRzOiBieU91dHBvaW50LFxuICAgICAgYWJhbmRvbmluZ1N1cHBvcnRzQnlJZDogY3VycmVudGx5QWJhbmRvbmluZ1xuICAgIH0pO1xuICB9LFxuXG4gIFtHRVRfTkVXX0FERFJFU1NfU1RBUlRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgZ2V0dGluZ05ld0FkZHJlc3M6IHRydWVcbiAgfSksXG5cbiAgW0dFVF9ORVdfQUREUkVTU19DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHsgZ2V0dGluZ05ld0FkZHJlc3M6IGZhbHNlLCByZWNlaXZlQWRkcmVzczogYWRkcmVzcyB9KTtcbiAgfSxcblxuICBbVVBEQVRFX0JBTEFOQ0VdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB0b3RhbEJhbGFuY2U6IGFjdGlvbi5kYXRhLnRvdGFsQmFsYW5jZSxcbiAgICBiYWxhbmNlOiBhY3Rpb24uZGF0YS5iYWxhbmNlLFxuICAgIHJlc2VydmVkQmFsYW5jZTogYWN0aW9uLmRhdGEucmVzZXJ2ZWRCYWxhbmNlLFxuICAgIGNsYWltc0JhbGFuY2U6IGFjdGlvbi5kYXRhLmNsYWltc0JhbGFuY2UsXG4gICAgc3VwcG9ydHNCYWxhbmNlOiBhY3Rpb24uZGF0YS5zdXBwb3J0c0JhbGFuY2UsXG4gICAgdGlwc0JhbGFuY2U6IGFjdGlvbi5kYXRhLnRpcHNCYWxhbmNlXG4gIH0pLFxuXG4gIFtDSEVDS19BRERSRVNTX0lTX01JTkVfU1RBUlRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgY2hlY2tpbmdBZGRyZXNzT3duZXJzaGlwOiB0cnVlXG4gIH0pLFxuXG4gIFtDSEVDS19BRERSRVNTX0lTX01JTkVfQ09NUExFVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICBjaGVja2luZ0FkZHJlc3NPd25lcnNoaXA6IGZhbHNlXG4gIH0pLFxuXG4gIFtTRVRfRFJBRlRfVFJBTlNBQ1RJT05fQU1PVU5UXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBvbGREcmFmdCA9IHN0YXRlLmRyYWZ0VHJhbnNhY3Rpb247XG4gICAgY29uc3QgbmV3RHJhZnQgPSBfZXh0ZW5kcyRpKHt9LCBvbGREcmFmdCwgeyBhbW91bnQ6IHBhcnNlRmxvYXQoYWN0aW9uLmRhdGEuYW1vdW50KSB9KTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwgeyBkcmFmdFRyYW5zYWN0aW9uOiBuZXdEcmFmdCB9KTtcbiAgfSxcblxuICBbU0VUX0RSQUZUX1RSQU5TQUNUSU9OX0FERFJFU1NdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IG9sZERyYWZ0ID0gc3RhdGUuZHJhZnRUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBuZXdEcmFmdCA9IF9leHRlbmRzJGkoe30sIG9sZERyYWZ0LCB7IGFkZHJlc3M6IGFjdGlvbi5kYXRhLmFkZHJlc3MgfSk7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHsgZHJhZnRUcmFuc2FjdGlvbjogbmV3RHJhZnQgfSk7XG4gIH0sXG5cbiAgW1NFTkRfVFJBTlNBQ1RJT05fU1RBUlRFRF06IHN0YXRlID0+IHtcbiAgICBjb25zdCBuZXdEcmFmdFRyYW5zYWN0aW9uID0gX2V4dGVuZHMkaSh7fSwgc3RhdGUuZHJhZnRUcmFuc2FjdGlvbiwgeyBzZW5kaW5nOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IGRyYWZ0VHJhbnNhY3Rpb246IG5ld0RyYWZ0VHJhbnNhY3Rpb24gfSk7XG4gIH0sXG5cbiAgW1NFTkRfVFJBTlNBQ1RJT05fQ09NUExFVEVEXTogc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBkcmFmdFRyYW5zYWN0aW9uOiBidWlsZERyYWZ0VHJhbnNhY3Rpb24oKVxuICB9KSxcblxuICBbU0VORF9UUkFOU0FDVElPTl9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IG5ld0RyYWZ0VHJhbnNhY3Rpb24gPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kcmFmdFRyYW5zYWN0aW9uLCB7XG4gICAgICBzZW5kaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBhY3Rpb24uZGF0YS5lcnJvclxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzJGkoe30sIHN0YXRlLCB7IGRyYWZ0VHJhbnNhY3Rpb246IG5ld0RyYWZ0VHJhbnNhY3Rpb24gfSk7XG4gIH0sXG5cbiAgW1NVUFBPUlRfVFJBTlNBQ1RJT05fU1RBUlRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgc2VuZGluZ1N1cHBvcnQ6IHRydWVcbiAgfSksXG5cbiAgW1NVUFBPUlRfVFJBTlNBQ1RJT05fQ09NUExFVEVEXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICBzZW5kaW5nU3VwcG9ydDogZmFsc2VcbiAgfSksXG5cbiAgW1NVUFBPUlRfVFJBTlNBQ1RJT05fRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgZXJyb3I6IGFjdGlvbi5kYXRhLmVycm9yLFxuICAgIHNlbmRpbmdTdXBwb3J0OiBmYWxzZVxuICB9KSxcblxuICBbQ0xFQVJfU1VQUE9SVF9UUkFOU0FDVElPTl06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgc2VuZGluZ1N1cHBvcnQ6IGZhbHNlXG4gIH0pLFxuXG4gIFtXQUxMRVRfU1RBVFVTX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldElzRW5jcnlwdGVkOiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtXQUxMRVRfRU5DUllQVF9TVEFSVF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0RW5jcnlwdFBlbmRpbmc6IHRydWUsXG4gICAgd2FsbGV0RW5jcnlwdFN1Y2NlZGVkOiBudWxsLFxuICAgIHdhbGxldEVuY3J5cHRSZXN1bHQ6IG51bGxcbiAgfSksXG5cbiAgW1dBTExFVF9FTkNSWVBUX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldEVuY3J5cHRQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRFbmNyeXB0U3VjY2VkZWQ6IHRydWUsXG4gICAgd2FsbGV0RW5jcnlwdFJlc3VsdDogYWN0aW9uLnJlc3VsdFxuICB9KSxcblxuICBbV0FMTEVUX0VOQ1JZUFRfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0RW5jcnlwdFBlbmRpbmc6IGZhbHNlLFxuICAgIHdhbGxldEVuY3J5cHRTdWNjZWRlZDogZmFsc2UsXG4gICAgd2FsbGV0RW5jcnlwdFJlc3VsdDogYWN0aW9uLnJlc3VsdFxuICB9KSxcblxuICBbV0FMTEVUX0RFQ1JZUFRfU1RBUlRdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldERlY3J5cHRQZW5kaW5nOiB0cnVlLFxuICAgIHdhbGxldERlY3J5cHRTdWNjZWRlZDogbnVsbCxcbiAgICB3YWxsZXREZWNyeXB0UmVzdWx0OiBudWxsXG4gIH0pLFxuXG4gIFtXQUxMRVRfREVDUllQVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXREZWNyeXB0UGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0RGVjcnlwdFN1Y2NlZGVkOiB0cnVlLFxuICAgIHdhbGxldERlY3J5cHRSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9ERUNSWVBUX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldERlY3J5cHRQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXREZWNyeXB0U3VjY2VkZWQ6IGZhbHNlLFxuICAgIHdhbGxldERlY3J5cHRSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9VTkxPQ0tfU1RBUlRdOiBzdGF0ZSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldFVubG9ja1BlbmRpbmc6IHRydWUsXG4gICAgd2FsbGV0VW5sb2NrU3VjY2VkZWQ6IG51bGwsXG4gICAgd2FsbGV0VW5sb2NrUmVzdWx0OiBudWxsXG4gIH0pLFxuXG4gIFtXQUxMRVRfVU5MT0NLX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldFVubG9ja1BlbmRpbmc6IGZhbHNlLFxuICAgIHdhbGxldFVubG9ja1N1Y2NlZGVkOiB0cnVlLFxuICAgIHdhbGxldFVubG9ja1Jlc3VsdDogYWN0aW9uLnJlc3VsdFxuICB9KSxcblxuICBbV0FMTEVUX1VOTE9DS19GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRVbmxvY2tQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRVbmxvY2tTdWNjZWRlZDogZmFsc2UsXG4gICAgd2FsbGV0VW5sb2NrUmVzdWx0OiBhY3Rpb24ucmVzdWx0XG4gIH0pLFxuXG4gIFtXQUxMRVRfTE9DS19TVEFSVF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0TG9ja1BlbmRpbmc6IGZhbHNlLFxuICAgIHdhbGxldExvY2tTdWNjZWRlZDogbnVsbCxcbiAgICB3YWxsZXRMb2NrUmVzdWx0OiBudWxsXG4gIH0pLFxuXG4gIFtXQUxMRVRfTE9DS19DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRMb2NrUGVuZGluZzogZmFsc2UsXG4gICAgd2FsbGV0TG9ja1N1Y2NlZGVkOiB0cnVlLFxuICAgIHdhbGxldExvY2tSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1dBTExFVF9MT0NLX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHdhbGxldExvY2tQZW5kaW5nOiBmYWxzZSxcbiAgICB3YWxsZXRMb2NrU3VjY2VkZWQ6IGZhbHNlLFxuICAgIHdhbGxldExvY2tSZXN1bHQ6IGFjdGlvbi5yZXN1bHRcbiAgfSksXG5cbiAgW1NFVF9UUkFOU0FDVElPTl9MSVNUX0ZJTFRFUl06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIHRyYW5zYWN0aW9uTGlzdEZpbHRlcjogYWN0aW9uLmRhdGFcbiAgfSksXG5cbiAgW1VQREFURV9DVVJSRU5UX0hFSUdIVF06IChzdGF0ZSwgYWN0aW9uKSA9PiBfZXh0ZW5kcyRpKHt9LCBzdGF0ZSwge1xuICAgIGxhdGVzdEJsb2NrOiBhY3Rpb24uZGF0YVxuICB9KSxcbiAgW1dBTExFVF9SRVNUQVJUXTogc3RhdGUgPT4gX2V4dGVuZHMkaSh7fSwgc3RhdGUsIHtcbiAgICB3YWxsZXRSZWNvbm5lY3Rpbmc6IHRydWVcbiAgfSksXG5cbiAgW1dBTExFVF9SRVNUQVJUX0NPTVBMRVRFRF06IHN0YXRlID0+IF9leHRlbmRzJGkoe30sIHN0YXRlLCB7XG4gICAgd2FsbGV0UmVjb25uZWN0aW5nOiBmYWxzZVxuICB9KVxufSwgZGVmYXVsdFN0YXRlJGEpO1xuXG4vLyAgICAgIFxuXG5jb25zdCBzZWxlY3RTdGF0ZSQ2ID0gc3RhdGUgPT4gc3RhdGUuY29udGVudCB8fCB7fTtcblxuY29uc3QgbWFrZVNlbGVjdENvbnRlbnRQb3NpdGlvbkZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ2LCBtYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgKHN0YXRlLCBjbGFpbSkgPT4ge1xuICBpZiAoIWNsYWltKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3V0cG9pbnQgPSBgJHtjbGFpbS50eGlkfToke2NsYWltLm5vdXR9YDtcbiAgY29uc3QgaWQgPSBjbGFpbS5jbGFpbV9pZDtcbiAgcmV0dXJuIHN0YXRlLnBvc2l0aW9uc1tpZF0gPyBzdGF0ZS5wb3NpdGlvbnNbaWRdW291dHBvaW50XSA6IG51bGw7XG59KTtcblxudmFyIF9leHRlbmRzJGogPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ3ID0gc3RhdGUgPT4gc3RhdGUubm90aWZpY2F0aW9ucyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0VG9hc3QgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiB7XG4gIGlmIChzdGF0ZS50b2FzdHMubGVuZ3RoKSB7XG4gICAgY29uc3QgeyBpZCwgcGFyYW1zIH0gPSBzdGF0ZS50b2FzdHNbMF07XG4gICAgcmV0dXJuIF9leHRlbmRzJGooe1xuICAgICAgaWRcbiAgICB9LCBwYXJhbXMpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59KTtcblxuY29uc3Qgc2VsZWN0RXJyb3IgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiB7XG4gIGlmIChzdGF0ZS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gc3RhdGUuZXJyb3JzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvclxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vLyAgICAgIFxuXG5jb25zdCBzZWxlY3RTdGF0ZSQ4ID0gc3RhdGUgPT4gc3RhdGUuY29tbWVudHMgfHwge307XG5cbmNvbnN0IHNlbGVjdENvbW1lbnRzQnlJZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDgsIHN0YXRlID0+IHN0YXRlLmNvbW1lbnRCeUlkIHx8IHt9KTtcblxuY29uc3Qgc2VsZWN0Q29tbWVudHNCeUNsYWltSWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ4LCBzZWxlY3RDb21tZW50c0J5SWQsIChzdGF0ZSwgYnlJZCkgPT4ge1xuICBjb25zdCBieUNsYWltSWQgPSBzdGF0ZS5ieUlkIHx8IHt9O1xuICBjb25zdCBjb21tZW50cyA9IHt9O1xuXG4gIC8vIHJlcGxhY2UgZXZlcnkgY29tbWVudF9pZCBpbiB0aGUgbGlzdCB3aXRoIHRoZSBhY3R1YWwgY29tbWVudCBvYmplY3RcbiAgT2JqZWN0LmtleXMoYnlDbGFpbUlkKS5mb3JFYWNoKGNsYWltSWQgPT4ge1xuICAgIGNvbnN0IGNvbW1lbnRJZHMgPSBieUNsYWltSWRbY2xhaW1JZF07XG5cbiAgICBjb21tZW50c1tjbGFpbUlkXSA9IEFycmF5KGNvbW1lbnRJZHMgPT09IG51bGwgPyAwIDogY29tbWVudElkcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWVudElkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29tbWVudHNbY2xhaW1JZF1baV0gPSBieUlkW2NvbW1lbnRJZHNbaV1dO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbW1lbnRzO1xufSk7XG5cbi8vIHByZXZpb3VzbHkgdGhpcyB1c2VkIGEgbWFwcGluZyBmcm9tIGNsYWltSWQgLT4gQXJyYXk8Q29tbWVudHM+XG4vKiBleHBvcnQgY29uc3Qgc2VsZWN0Q29tbWVudHNCeUlkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFN0YXRlLFxuICBzdGF0ZSA9PiBzdGF0ZS5ieUlkIHx8IHt9XG4pOyAqL1xuY29uc3Qgc2VsZWN0Q29tbWVudHNCeVVyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDgsIHN0YXRlID0+IHtcbiAgY29uc3QgYnlVcmkgPSBzdGF0ZS5jb21tZW50c0J5VXJpIHx8IHt9O1xuICBjb25zdCBjb21tZW50cyA9IHt9O1xuICBPYmplY3Qua2V5cyhieVVyaSkuZm9yRWFjaCh1cmkgPT4ge1xuICAgIGNvbnN0IGNsYWltSWQgPSBieVVyaVt1cmldO1xuICAgIGlmIChjbGFpbUlkID09PSBudWxsKSB7XG4gICAgICBjb21tZW50c1t1cmldID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWVudHNbdXJpXSA9IGNsYWltSWQ7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29tbWVudHM7XG59KTtcblxuY29uc3QgbWFrZVNlbGVjdENvbW1lbnRzRm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENvbW1lbnRzQnlDbGFpbUlkLCBzZWxlY3RDb21tZW50c0J5VXJpLCAoYnlDbGFpbUlkLCBieVVyaSkgPT4ge1xuICBjb25zdCBjbGFpbUlkID0gYnlVcmlbdXJpXTtcbiAgcmV0dXJuIGJ5Q2xhaW1JZCAmJiBieUNsYWltSWRbY2xhaW1JZF07XG59KTtcblxuLy8gdG9kbzogYWxsb3cgU0RLIHRvIHJldHJpZXZlIHVzZXIgY29tbWVudHMgdGhyb3VnaCBjb21tZW50X2xpc3Rcbi8vIHRvZG86IGltcGxlbWVudCBzZWxlY3RvcnMgZm9yIHNlbGVjdGluZyBjb21tZW50cyBvd25lZCBieSB1c2VyXG5cbi8vICAgICAgXG5cbmNvbnN0IHNlbGVjdFN0YXRlJDkgPSBzdGF0ZSA9PiBzdGF0ZS50YWdzIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RLbm93blRhZ3NCeU5hbWUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5rbm93blRhZ3MpO1xuXG5jb25zdCBzZWxlY3RGb2xsb3dlZFRhZ3NMaXN0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuZm9sbG93ZWRUYWdzLmZpbHRlcih0YWcgPT4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpKTtcblxuY29uc3Qgc2VsZWN0Rm9sbG93ZWRUYWdzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Rm9sbG93ZWRUYWdzTGlzdCwgZm9sbG93ZWRUYWdzID0+IGZvbGxvd2VkVGFncy5tYXAodGFnID0+ICh7IG5hbWU6IHRhZy50b0xvd2VyQ2FzZSgpIH0pKS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSk7XG5cbmNvbnN0IHNlbGVjdFVuZm9sbG93ZWRUYWdzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0S25vd25UYWdzQnlOYW1lLCBzZWxlY3RGb2xsb3dlZFRhZ3NMaXN0LCAodGFnc0J5TmFtZSwgZm9sbG93ZWRUYWdzKSA9PiB7XG4gIGNvbnN0IGZvbGxvd2VkVGFnc1NldCA9IG5ldyBTZXQoZm9sbG93ZWRUYWdzKTtcbiAgbGV0IHRhZ3NUb1JldHVybiA9IFtdO1xuICBPYmplY3Qua2V5cyh0YWdzQnlOYW1lKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKCFmb2xsb3dlZFRhZ3NTZXQuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gdGFnc0J5TmFtZVtrZXldO1xuICAgICAgdGFnc1RvUmV0dXJuLnB1c2goeyBuYW1lOiBuYW1lLnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFnc1RvUmV0dXJuO1xufSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RJc0ZvbGxvd2luZ1RhZyA9IHRhZyA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGb2xsb3dlZFRhZ3MsIGZvbGxvd2VkVGFncyA9PiB7XG4gIHJldHVybiBmb2xsb3dlZFRhZ3Muc29tZShmb2xsb3dlZFRhZyA9PiBmb2xsb3dlZFRhZy5uYW1lID09PSB0YWcudG9Mb3dlckNhc2UoKSk7XG59KTtcblxuLy8gICAgICBcblxuY29uc3Qgc2VsZWN0U3RhdGUkYSA9IHN0YXRlID0+IHN0YXRlLmJsb2NrZWQgfHwge307XG5cbmNvbnN0IHNlbGVjdEJsb2NrZWRDaGFubmVscyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJGEsIHN0YXRlID0+IHN0YXRlLmJsb2NrZWRDaGFubmVscyk7XG5cbmNvbnN0IHNlbGVjdEJsb2NrZWRDaGFubmVsc0NvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0QmxvY2tlZENoYW5uZWxzLCBzdGF0ZSA9PiBzdGF0ZS5sZW5ndGgpO1xuXG5jb25zdCBzZWxlY3RDaGFubmVsSXNCbG9ja2VkID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdEJsb2NrZWRDaGFubmVscywgc3RhdGUgPT4ge1xuICByZXR1cm4gc3RhdGUuaW5jbHVkZXModXJpKTtcbn0pO1xuXG5leHBvcnRzLkFDVElPTlMgPSBhY3Rpb25fdHlwZXM7XG5leHBvcnRzLkNMQUlNX1ZBTFVFUyA9IGNsYWltO1xuZXhwb3J0cy5EQUVNT05fU0VUVElOR1MgPSBkYWVtb25fc2V0dGluZ3M7XG5leHBvcnRzLkRFRkFVTFRfRk9MTE9XRURfVEFHUyA9IERFRkFVTFRfRk9MTE9XRURfVEFHUztcbmV4cG9ydHMuREVGQVVMVF9LTk9XTl9UQUdTID0gREVGQVVMVF9LTk9XTl9UQUdTO1xuZXhwb3J0cy5MSUNFTlNFUyA9IGxpY2Vuc2VzO1xuZXhwb3J0cy5MYnJ5ID0gbGJyeVByb3h5O1xuZXhwb3J0cy5NQVRVUkVfVEFHUyA9IE1BVFVSRV9UQUdTO1xuZXhwb3J0cy5QQUdFUyA9IHBhZ2VzO1xuZXhwb3J0cy5TRUFSQ0hfT1BUSU9OUyA9IFNFQVJDSF9PUFRJT05TO1xuZXhwb3J0cy5TRUFSQ0hfVFlQRVMgPSBTRUFSQ0hfVFlQRVM7XG5leHBvcnRzLlNFVFRJTkdTID0gc2V0dGluZ3M7XG5leHBvcnRzLlNIQVJFRF9QUkVGRVJFTkNFUyA9IHNoYXJlZF9wcmVmZXJlbmNlcztcbmV4cG9ydHMuU09SVF9PUFRJT05TID0gc29ydF9vcHRpb25zO1xuZXhwb3J0cy5TUEVFQ0hfVVJMUyA9IHNwZWVjaF91cmxzO1xuZXhwb3J0cy5USFVNQk5BSUxfU1RBVFVTRVMgPSB0aHVtYm5haWxfdXBsb2FkX3N0YXR1c2VzO1xuZXhwb3J0cy5UUkFOU0FDVElPTlMgPSB0cmFuc2FjdGlvbl90eXBlcztcbmV4cG9ydHMuVFhfTElTVCA9IHRyYW5zYWN0aW9uX2xpc3Q7XG5leHBvcnRzLmFwaUNhbGwgPSBhcGlDYWxsO1xuZXhwb3J0cy5iYXRjaEFjdGlvbnMgPSBiYXRjaEFjdGlvbnM7XG5leHBvcnRzLmJsb2NrZWRSZWR1Y2VyID0gYmxvY2tlZFJlZHVjZXI7XG5leHBvcnRzLmJ1aWxkU2hhcmVkU3RhdGVNaWRkbGV3YXJlID0gYnVpbGRTaGFyZWRTdGF0ZU1pZGRsZXdhcmU7XG5leHBvcnRzLmJ1aWxkVVJJID0gYnVpbGRVUkk7XG5leHBvcnRzLmNsYWltc1JlZHVjZXIgPSBjbGFpbXNSZWR1Y2VyO1xuZXhwb3J0cy5jb21tZW50UmVkdWNlciA9IGNvbW1lbnRSZWR1Y2VyO1xuZXhwb3J0cy5jb250ZW50UmVkdWNlciA9IGNvbnRlbnRSZWR1Y2VyO1xuZXhwb3J0cy5jb252ZXJ0VG9TaGFyZUxpbmsgPSBjb252ZXJ0VG9TaGFyZUxpbms7XG5leHBvcnRzLmNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleSA9IGNyZWF0ZU5vcm1hbGl6ZWRDbGFpbVNlYXJjaEtleTtcbmV4cG9ydHMuY3JlZGl0c1RvU3RyaW5nID0gY3JlZGl0c1RvU3RyaW5nO1xuZXhwb3J0cy5kb0FiYW5kb25DbGFpbSA9IGRvQWJhbmRvbkNsYWltO1xuZXhwb3J0cy5kb0FkZFRhZyA9IGRvQWRkVGFnO1xuZXhwb3J0cy5kb0JhbGFuY2VTdWJzY3JpYmUgPSBkb0JhbGFuY2VTdWJzY3JpYmU7XG5leHBvcnRzLmRvQmx1clNlYXJjaElucHV0ID0gZG9CbHVyU2VhcmNoSW5wdXQ7XG5leHBvcnRzLmRvQ2hlY2tBZGRyZXNzSXNNaW5lID0gZG9DaGVja0FkZHJlc3NJc01pbmU7XG5leHBvcnRzLmRvQ2hlY2tQZW5kaW5nUHVibGlzaGVzID0gZG9DaGVja1BlbmRpbmdQdWJsaXNoZXM7XG5leHBvcnRzLmRvQ2xhaW1TZWFyY2ggPSBkb0NsYWltU2VhcmNoO1xuZXhwb3J0cy5kb0NsZWFyUHVibGlzaCA9IGRvQ2xlYXJQdWJsaXNoO1xuZXhwb3J0cy5kb0NsZWFyU3VwcG9ydCA9IGRvQ2xlYXJTdXBwb3J0O1xuZXhwb3J0cy5kb0NvbW1lbnRBYmFuZG9uID0gZG9Db21tZW50QWJhbmRvbjtcbmV4cG9ydHMuZG9Db21tZW50Q3JlYXRlID0gZG9Db21tZW50Q3JlYXRlO1xuZXhwb3J0cy5kb0NvbW1lbnRIaWRlID0gZG9Db21tZW50SGlkZTtcbmV4cG9ydHMuZG9Db21tZW50TGlzdCA9IGRvQ29tbWVudExpc3Q7XG5leHBvcnRzLmRvQ29tbWVudFVwZGF0ZSA9IGRvQ29tbWVudFVwZGF0ZTtcbmV4cG9ydHMuZG9DcmVhdGVDaGFubmVsID0gZG9DcmVhdGVDaGFubmVsO1xuZXhwb3J0cy5kb0RlbGV0ZVB1cmNoYXNlZFVyaSA9IGRvRGVsZXRlUHVyY2hhc2VkVXJpO1xuZXhwb3J0cy5kb0RlbGV0ZVRhZyA9IGRvRGVsZXRlVGFnO1xuZXhwb3J0cy5kb0Rpc21pc3NFcnJvciA9IGRvRGlzbWlzc0Vycm9yO1xuZXhwb3J0cy5kb0Rpc21pc3NUb2FzdCA9IGRvRGlzbWlzc1RvYXN0O1xuZXhwb3J0cy5kb0Vycm9yID0gZG9FcnJvcjtcbmV4cG9ydHMuZG9GZXRjaENoYW5uZWxMaXN0TWluZSA9IGRvRmV0Y2hDaGFubmVsTGlzdE1pbmU7XG5leHBvcnRzLmRvRmV0Y2hDbGFpbUxpc3RNaW5lID0gZG9GZXRjaENsYWltTGlzdE1pbmU7XG5leHBvcnRzLmRvRmV0Y2hDbGFpbXNCeUNoYW5uZWwgPSBkb0ZldGNoQ2xhaW1zQnlDaGFubmVsO1xuZXhwb3J0cy5kb0ZldGNoRmlsZUluZm8gPSBkb0ZldGNoRmlsZUluZm87XG5leHBvcnRzLmRvRmV0Y2hGaWxlSW5mb3NBbmRQdWJsaXNoZWRDbGFpbXMgPSBkb0ZldGNoRmlsZUluZm9zQW5kUHVibGlzaGVkQ2xhaW1zO1xuZXhwb3J0cy5kb0ZldGNoVHJhbnNhY3Rpb25zID0gZG9GZXRjaFRyYW5zYWN0aW9ucztcbmV4cG9ydHMuZG9GaWxlR2V0ID0gZG9GaWxlR2V0O1xuZXhwb3J0cy5kb0ZpbGVMaXN0ID0gZG9GaWxlTGlzdDtcbmV4cG9ydHMuZG9Gb2N1c1NlYXJjaElucHV0ID0gZG9Gb2N1c1NlYXJjaElucHV0O1xuZXhwb3J0cy5kb0dldE5ld0FkZHJlc3MgPSBkb0dldE5ld0FkZHJlc3M7XG5leHBvcnRzLmRvSW1wb3J0Q2hhbm5lbCA9IGRvSW1wb3J0Q2hhbm5lbDtcbmV4cG9ydHMuZG9Qb3B1bGF0ZVNoYXJlZFVzZXJTdGF0ZSA9IGRvUG9wdWxhdGVTaGFyZWRVc2VyU3RhdGU7XG5leHBvcnRzLmRvUHJlZmVyZW5jZUdldCA9IGRvUHJlZmVyZW5jZUdldDtcbmV4cG9ydHMuZG9QcmVmZXJlbmNlU2V0ID0gZG9QcmVmZXJlbmNlU2V0O1xuZXhwb3J0cy5kb1ByZXBhcmVFZGl0ID0gZG9QcmVwYXJlRWRpdDtcbmV4cG9ydHMuZG9QdWJsaXNoID0gZG9QdWJsaXNoO1xuZXhwb3J0cy5kb1B1cmNoYXNlVXJpID0gZG9QdXJjaGFzZVVyaTtcbmV4cG9ydHMuZG9SZXNldFRodW1ibmFpbFN0YXR1cyA9IGRvUmVzZXRUaHVtYm5haWxTdGF0dXM7XG5leHBvcnRzLmRvUmVzb2x2ZVVyaSA9IGRvUmVzb2x2ZVVyaTtcbmV4cG9ydHMuZG9SZXNvbHZlVXJpcyA9IGRvUmVzb2x2ZVVyaXM7XG5leHBvcnRzLmRvUmVzb2x2ZWRTZWFyY2ggPSBkb1Jlc29sdmVkU2VhcmNoO1xuZXhwb3J0cy5kb1NlYXJjaCA9IGRvU2VhcmNoO1xuZXhwb3J0cy5kb1NlbmREcmFmdFRyYW5zYWN0aW9uID0gZG9TZW5kRHJhZnRUcmFuc2FjdGlvbjtcbmV4cG9ydHMuZG9TZW5kVGlwID0gZG9TZW5kVGlwO1xuZXhwb3J0cy5kb1NldERyYWZ0VHJhbnNhY3Rpb25BZGRyZXNzID0gZG9TZXREcmFmdFRyYW5zYWN0aW9uQWRkcmVzcztcbmV4cG9ydHMuZG9TZXREcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gZG9TZXREcmFmdFRyYW5zYWN0aW9uQW1vdW50O1xuZXhwb3J0cy5kb1NldEZpbGVMaXN0U29ydCA9IGRvU2V0RmlsZUxpc3RTb3J0O1xuZXhwb3J0cy5kb1NldFRyYW5zYWN0aW9uTGlzdEZpbHRlciA9IGRvU2V0VHJhbnNhY3Rpb25MaXN0RmlsdGVyO1xuZXhwb3J0cy5kb1RvYXN0ID0gZG9Ub2FzdDtcbmV4cG9ydHMuZG9Ub2dnbGVCbG9ja0NoYW5uZWwgPSBkb1RvZ2dsZUJsb2NrQ2hhbm5lbDtcbmV4cG9ydHMuZG9Ub2dnbGVUYWdGb2xsb3cgPSBkb1RvZ2dsZVRhZ0ZvbGxvdztcbmV4cG9ydHMuZG9VcGRhdGVCYWxhbmNlID0gZG9VcGRhdGVCYWxhbmNlO1xuZXhwb3J0cy5kb1VwZGF0ZUJsb2NrSGVpZ2h0ID0gZG9VcGRhdGVCbG9ja0hlaWdodDtcbmV4cG9ydHMuZG9VcGRhdGVDaGFubmVsID0gZG9VcGRhdGVDaGFubmVsO1xuZXhwb3J0cy5kb1VwZGF0ZVB1Ymxpc2hGb3JtID0gZG9VcGRhdGVQdWJsaXNoRm9ybTtcbmV4cG9ydHMuZG9VcGRhdGVTZWFyY2hPcHRpb25zID0gZG9VcGRhdGVTZWFyY2hPcHRpb25zO1xuZXhwb3J0cy5kb1VwZGF0ZVNlYXJjaFF1ZXJ5ID0gZG9VcGRhdGVTZWFyY2hRdWVyeTtcbmV4cG9ydHMuZG9VcGxvYWRUaHVtYm5haWwgPSBkb1VwbG9hZFRodW1ibmFpbDtcbmV4cG9ydHMuZG9XYWxsZXREZWNyeXB0ID0gZG9XYWxsZXREZWNyeXB0O1xuZXhwb3J0cy5kb1dhbGxldEVuY3J5cHQgPSBkb1dhbGxldEVuY3J5cHQ7XG5leHBvcnRzLmRvV2FsbGV0UmVjb25uZWN0ID0gZG9XYWxsZXRSZWNvbm5lY3Q7XG5leHBvcnRzLmRvV2FsbGV0U3RhdHVzID0gZG9XYWxsZXRTdGF0dXM7XG5leHBvcnRzLmRvV2FsbGV0VW5sb2NrID0gZG9XYWxsZXRVbmxvY2s7XG5leHBvcnRzLmZpbGVJbmZvUmVkdWNlciA9IGZpbGVJbmZvUmVkdWNlcjtcbmV4cG9ydHMuZmlsZVJlZHVjZXIgPSBmaWxlUmVkdWNlcjtcbmV4cG9ydHMuZm9ybWF0Q3JlZGl0cyA9IGZvcm1hdENyZWRpdHM7XG5leHBvcnRzLmZvcm1hdEZ1bGxQcmljZSA9IGZvcm1hdEZ1bGxQcmljZTtcbmV4cG9ydHMuaXNDbGFpbU5zZncgPSBpc0NsYWltTnNmdztcbmV4cG9ydHMuaXNOYW1lVmFsaWQgPSBpc05hbWVWYWxpZDtcbmV4cG9ydHMuaXNVUklDbGFpbWFibGUgPSBpc1VSSUNsYWltYWJsZTtcbmV4cG9ydHMuaXNVUklWYWxpZCA9IGlzVVJJVmFsaWQ7XG5leHBvcnRzLm1ha2VTZWxlY3RBbW91bnRGb3JVcmkgPSBtYWtlU2VsZWN0QW1vdW50Rm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2Fub25pY2FsVXJsRm9yVXJpID0gbWFrZVNlbGVjdENhbm9uaWNhbFVybEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaSA9IG1ha2VTZWxlY3RDaGFubmVsRm9yQ2xhaW1Vcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RDbGFpbUZvclVyaSA9IG1ha2VTZWxlY3RDbGFpbUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltSXNNaW5lID0gbWFrZVNlbGVjdENsYWltSXNNaW5lO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q2xhaW1Jc05zZncgPSBtYWtlU2VsZWN0Q2xhaW1Jc05zZnc7XG5leHBvcnRzLm1ha2VTZWxlY3RDbGFpbUlzUGVuZGluZyA9IG1ha2VTZWxlY3RDbGFpbUlzUGVuZGluZztcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltc0luQ2hhbm5lbEZvckN1cnJlbnRQYWdlU3RhdGUgPSBtYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yQ3VycmVudFBhZ2VTdGF0ZTtcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltc0luQ2hhbm5lbEZvclBhZ2UgPSBtYWtlU2VsZWN0Q2xhaW1zSW5DaGFubmVsRm9yUGFnZTtcbmV4cG9ydHMubWFrZVNlbGVjdENvbW1lbnRzRm9yVXJpID0gbWFrZVNlbGVjdENvbW1lbnRzRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q29udGVudFBvc2l0aW9uRm9yVXJpID0gbWFrZVNlbGVjdENvbnRlbnRQb3NpdGlvbkZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdENvbnRlbnRUeXBlRm9yVXJpID0gbWFrZVNlbGVjdENvbnRlbnRUeXBlRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0Q292ZXJGb3JVcmkgPSBtYWtlU2VsZWN0Q292ZXJGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3REYXRlRm9yVXJpID0gbWFrZVNlbGVjdERhdGVGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3REb3dubG9hZFBhdGhGb3JVcmkgPSBtYWtlU2VsZWN0RG93bmxvYWRQYXRoRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0RG93bmxvYWRpbmdGb3JVcmkgPSBtYWtlU2VsZWN0RG93bmxvYWRpbmdGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RGZXRjaGluZ0NoYW5uZWxDbGFpbXMgPSBtYWtlU2VsZWN0RmV0Y2hpbmdDaGFubmVsQ2xhaW1zO1xuZXhwb3J0cy5tYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmkgPSBtYWtlU2VsZWN0RmlsZUluZm9Gb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RGaWxlTmFtZUZvclVyaSA9IG1ha2VTZWxlY3RGaWxlTmFtZUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdEZpbGVQYXJ0bHlEb3dubG9hZGVkID0gbWFrZVNlbGVjdEZpbGVQYXJ0bHlEb3dubG9hZGVkO1xuZXhwb3J0cy5tYWtlU2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbnNGb3JQYWdlID0gbWFrZVNlbGVjdEZpbHRlcmVkVHJhbnNhY3Rpb25zRm9yUGFnZTtcbmV4cG9ydHMubWFrZVNlbGVjdEZpcnN0UmVjb21tZW5kZWRGaWxlRm9yVXJpID0gbWFrZVNlbGVjdEZpcnN0UmVjb21tZW5kZWRGaWxlRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0SXNGb2xsb3dpbmdUYWcgPSBtYWtlU2VsZWN0SXNGb2xsb3dpbmdUYWc7XG5leHBvcnRzLm1ha2VTZWxlY3RJc1VyaVJlc29sdmluZyA9IG1ha2VTZWxlY3RJc1VyaVJlc29sdmluZztcbmV4cG9ydHMubWFrZVNlbGVjdExhdGVzdFRyYW5zYWN0aW9ucyA9IG1ha2VTZWxlY3RMYXRlc3RUcmFuc2FjdGlvbnM7XG5leHBvcnRzLm1ha2VTZWxlY3RMb2FkaW5nRm9yVXJpID0gbWFrZVNlbGVjdExvYWRpbmdGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RNZWRpYVR5cGVGb3JVcmkgPSBtYWtlU2VsZWN0TWVkaWFUeXBlRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmkgPSBtYWtlU2VsZWN0TWV0YWRhdGFGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RNZXRhZGF0YUl0ZW1Gb3JVcmkgPSBtYWtlU2VsZWN0TWV0YWRhdGFJdGVtRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0TXlTdHJlYW1VcmxzRm9yUGFnZSA9IG1ha2VTZWxlY3RNeVN0cmVhbVVybHNGb3JQYWdlO1xuZXhwb3J0cy5tYWtlU2VsZWN0TnNmd0NvdW50Rm9yQ2hhbm5lbCA9IG1ha2VTZWxlY3ROc2Z3Q291bnRGb3JDaGFubmVsO1xuZXhwb3J0cy5tYWtlU2VsZWN0TnNmd0NvdW50RnJvbVVyaXMgPSBtYWtlU2VsZWN0TnNmd0NvdW50RnJvbVVyaXM7XG5leHBvcnRzLm1ha2VTZWxlY3RPbWl0dGVkQ291bnRGb3JDaGFubmVsID0gbWFrZVNlbGVjdE9taXR0ZWRDb3VudEZvckNoYW5uZWw7XG5leHBvcnRzLm1ha2VTZWxlY3RQZW5kaW5nQnlVcmkgPSBtYWtlU2VsZWN0UGVuZGluZ0J5VXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0UGVybWFuZW50VXJsRm9yVXJpID0gbWFrZVNlbGVjdFBlcm1hbmVudFVybEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFB1Ymxpc2hGb3JtVmFsdWUgPSBtYWtlU2VsZWN0UHVibGlzaEZvcm1WYWx1ZTtcbmV4cG9ydHMubWFrZVNlbGVjdFF1ZXJ5V2l0aE9wdGlvbnMgPSBtYWtlU2VsZWN0UXVlcnlXaXRoT3B0aW9ucztcbmV4cG9ydHMubWFrZVNlbGVjdFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9IG1ha2VTZWxlY3RSZWNvbW1lbmRlZENvbnRlbnRGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaSA9IG1ha2VTZWxlY3RSZXNvbHZlZFJlY29tbWVuZGVkQ29udGVudEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0cyA9IG1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHM7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNMYXN0UGFnZVJlYWNoZWQgPSBtYWtlU2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzTGFzdFBhZ2VSZWFjaGVkO1xuZXhwb3J0cy5tYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzQ291bnQgPSBtYWtlU2VsZWN0U2VhcmNoRG93bmxvYWRVcmxzQ291bnQ7XG5leHBvcnRzLm1ha2VTZWxlY3RTZWFyY2hEb3dubG9hZFVybHNGb3JQYWdlID0gbWFrZVNlbGVjdFNlYXJjaERvd25sb2FkVXJsc0ZvclBhZ2U7XG5leHBvcnRzLm1ha2VTZWxlY3RTZWFyY2hVcmlzID0gbWFrZVNlbGVjdFNlYXJjaFVyaXM7XG5leHBvcnRzLm1ha2VTZWxlY3RTaG9ydFVybEZvclVyaSA9IG1ha2VTZWxlY3RTaG9ydFVybEZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFN0cmVhbWluZ1VybEZvclVyaSA9IG1ha2VTZWxlY3RTdHJlYW1pbmdVcmxGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RTdXBwb3J0c0ZvclVyaSA9IG1ha2VTZWxlY3RTdXBwb3J0c0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRhZ3NGb3JVcmkgPSBtYWtlU2VsZWN0VGFnc0ZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRodW1ibmFpbEZvclVyaSA9IG1ha2VTZWxlY3RUaHVtYm5haWxGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RUaXRsZUZvclVyaSA9IG1ha2VTZWxlY3RUaXRsZUZvclVyaTtcbmV4cG9ydHMubWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoID0gbWFrZVNlbGVjdFRvdGFsQ2xhaW1zSW5DaGFubmVsU2VhcmNoO1xuZXhwb3J0cy5tYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWwgPSBtYWtlU2VsZWN0VG90YWxJdGVtc0ZvckNoYW5uZWw7XG5leHBvcnRzLm1ha2VTZWxlY3RUb3RhbFBhZ2VzRm9yQ2hhbm5lbCA9IG1ha2VTZWxlY3RUb3RhbFBhZ2VzRm9yQ2hhbm5lbDtcbmV4cG9ydHMubWFrZVNlbGVjdFRvdGFsUGFnZXNJbkNoYW5uZWxTZWFyY2ggPSBtYWtlU2VsZWN0VG90YWxQYWdlc0luQ2hhbm5lbFNlYXJjaDtcbmV4cG9ydHMubWFrZVNlbGVjdFVyaUlzU3RyZWFtYWJsZSA9IG1ha2VTZWxlY3RVcmlJc1N0cmVhbWFibGU7XG5leHBvcnRzLm5vcm1hbGl6ZVVSSSA9IG5vcm1hbGl6ZVVSSTtcbmV4cG9ydHMubm90aWZpY2F0aW9uc1JlZHVjZXIgPSBub3RpZmljYXRpb25zUmVkdWNlcjtcbmV4cG9ydHMucGFyc2VRdWVyeVBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXM7XG5leHBvcnRzLnBhcnNlVVJJID0gcGFyc2VVUkk7XG5leHBvcnRzLnB1Ymxpc2hSZWR1Y2VyID0gcHVibGlzaFJlZHVjZXI7XG5leHBvcnRzLnJlZ2V4QWRkcmVzcyA9IHJlZ2V4QWRkcmVzcztcbmV4cG9ydHMucmVnZXhJbnZhbGlkVVJJID0gcmVnZXhJbnZhbGlkVVJJO1xuZXhwb3J0cy5zYXZlUG9zaXRpb24gPSBzYXZlUG9zaXRpb247XG5leHBvcnRzLnNlYXJjaFJlZHVjZXIgPSBzZWFyY2hSZWR1Y2VyO1xuZXhwb3J0cy5zZWxlY3RBYmFuZG9uaW5nSWRzID0gc2VsZWN0QWJhbmRvbmluZ0lkcztcbmV4cG9ydHMuc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsID0gc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsO1xuZXhwb3J0cy5zZWxlY3RBbGxGZXRjaGluZ0NoYW5uZWxDbGFpbXMgPSBzZWxlY3RBbGxGZXRjaGluZ0NoYW5uZWxDbGFpbXM7XG5leHBvcnRzLnNlbGVjdEFsbE15Q2xhaW1zQnlPdXRwb2ludCA9IHNlbGVjdEFsbE15Q2xhaW1zQnlPdXRwb2ludDtcbmV4cG9ydHMuc2VsZWN0QmFsYW5jZSA9IHNlbGVjdEJhbGFuY2U7XG5leHBvcnRzLnNlbGVjdEJsb2NrZWRDaGFubmVscyA9IHNlbGVjdEJsb2NrZWRDaGFubmVscztcbmV4cG9ydHMuc2VsZWN0QmxvY2tlZENoYW5uZWxzQ291bnQgPSBzZWxlY3RCbG9ja2VkQ2hhbm5lbHNDb3VudDtcbmV4cG9ydHMuc2VsZWN0QmxvY2tzID0gc2VsZWN0QmxvY2tzO1xuZXhwb3J0cy5zZWxlY3RDaGFubmVsQ2xhaW1Db3VudHMgPSBzZWxlY3RDaGFubmVsQ2xhaW1Db3VudHM7XG5leHBvcnRzLnNlbGVjdENoYW5uZWxJbXBvcnRQZW5kaW5nID0gc2VsZWN0Q2hhbm5lbEltcG9ydFBlbmRpbmc7XG5leHBvcnRzLnNlbGVjdENoYW5uZWxJc0Jsb2NrZWQgPSBzZWxlY3RDaGFubmVsSXNCbG9ja2VkO1xuZXhwb3J0cy5zZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnkgPSBzZWxlY3RDbGFpbVNlYXJjaEJ5UXVlcnk7XG5leHBvcnRzLnNlbGVjdENsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZCA9IHNlbGVjdENsYWltU2VhcmNoQnlRdWVyeUxhc3RQYWdlUmVhY2hlZDtcbmV4cG9ydHMuc2VsZWN0Q2xhaW1zQmFsYW5jZSA9IHNlbGVjdENsYWltc0JhbGFuY2U7XG5leHBvcnRzLnNlbGVjdENsYWltc0J5SWQgPSBzZWxlY3RDbGFpbXNCeUlkO1xuZXhwb3J0cy5zZWxlY3RDbGFpbXNCeVVyaSA9IHNlbGVjdENsYWltc0J5VXJpO1xuZXhwb3J0cy5zZWxlY3RDcmVhdGVDaGFubmVsRXJyb3IgPSBzZWxlY3RDcmVhdGVDaGFubmVsRXJyb3I7XG5leHBvcnRzLnNlbGVjdENyZWF0aW5nQ2hhbm5lbCA9IHNlbGVjdENyZWF0aW5nQ2hhbm5lbDtcbmV4cG9ydHMuc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlID0gc2VsZWN0Q3VycmVudENoYW5uZWxQYWdlO1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZFVybHNDb3VudCA9IHNlbGVjdERvd25sb2FkVXJsc0NvdW50O1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZGVkVXJpcyA9IHNlbGVjdERvd25sb2FkZWRVcmlzO1xuZXhwb3J0cy5zZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQgPSBzZWxlY3REb3dubG9hZGluZ0J5T3V0cG9pbnQ7XG5leHBvcnRzLnNlbGVjdERvd25sb2FkaW5nRmlsZUluZm9zID0gc2VsZWN0RG93bmxvYWRpbmdGaWxlSW5mb3M7XG5leHBvcnRzLnNlbGVjdERyYWZ0VHJhbnNhY3Rpb24gPSBzZWxlY3REcmFmdFRyYW5zYWN0aW9uO1xuZXhwb3J0cy5zZWxlY3REcmFmdFRyYW5zYWN0aW9uQWRkcmVzcyA9IHNlbGVjdERyYWZ0VHJhbnNhY3Rpb25BZGRyZXNzO1xuZXhwb3J0cy5zZWxlY3REcmFmdFRyYW5zYWN0aW9uQW1vdW50ID0gc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkFtb3VudDtcbmV4cG9ydHMuc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yID0gc2VsZWN0RHJhZnRUcmFuc2FjdGlvbkVycm9yO1xuZXhwb3J0cy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuZXhwb3J0cy5zZWxlY3RGYWlsZWRQdXJjaGFzZVVyaXMgPSBzZWxlY3RGYWlsZWRQdXJjaGFzZVVyaXM7XG5leHBvcnRzLnNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2ggPSBzZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ0NsYWltU2VhcmNoQnlRdWVyeSA9IHNlbGVjdEZldGNoaW5nQ2xhaW1TZWFyY2hCeVF1ZXJ5O1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ015Q2hhbm5lbHMgPSBzZWxlY3RGZXRjaGluZ015Q2hhbm5lbHM7XG5leHBvcnRzLnNlbGVjdEZpbGVJbmZvc0J5T3V0cG9pbnQgPSBzZWxlY3RGaWxlSW5mb3NCeU91dHBvaW50O1xuZXhwb3J0cy5zZWxlY3RGaWxlSW5mb3NEb3dubG9hZGVkID0gc2VsZWN0RmlsZUluZm9zRG93bmxvYWRlZDtcbmV4cG9ydHMuc2VsZWN0RmlsZUxpc3REb3dubG9hZGVkU29ydCA9IHNlbGVjdEZpbGVMaXN0RG93bmxvYWRlZFNvcnQ7XG5leHBvcnRzLnNlbGVjdEZpbGVMaXN0UHVibGlzaGVkU29ydCA9IHNlbGVjdEZpbGVMaXN0UHVibGlzaGVkU29ydDtcbmV4cG9ydHMuc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50ID0gc2VsZWN0RmlsdGVyZWRUcmFuc2FjdGlvbkNvdW50O1xuZXhwb3J0cy5zZWxlY3RGaWx0ZXJlZFRyYW5zYWN0aW9ucyA9IHNlbGVjdEZpbHRlcmVkVHJhbnNhY3Rpb25zO1xuZXhwb3J0cy5zZWxlY3RGb2xsb3dlZFRhZ3MgPSBzZWxlY3RGb2xsb3dlZFRhZ3M7XG5leHBvcnRzLnNlbGVjdEdldHRpbmdOZXdBZGRyZXNzID0gc2VsZWN0R2V0dGluZ05ld0FkZHJlc3M7XG5leHBvcnRzLnNlbGVjdEhhc1RyYW5zYWN0aW9ucyA9IHNlbGVjdEhhc1RyYW5zYWN0aW9ucztcbmV4cG9ydHMuc2VsZWN0SXNGZXRjaGluZ0NsYWltTGlzdE1pbmUgPSBzZWxlY3RJc0ZldGNoaW5nQ2xhaW1MaXN0TWluZTtcbmV4cG9ydHMuc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0ID0gc2VsZWN0SXNGZXRjaGluZ0ZpbGVMaXN0O1xuZXhwb3J0cy5zZWxlY3RJc0ZldGNoaW5nRmlsZUxpc3REb3dubG9hZGVkT3JQdWJsaXNoZWQgPSBzZWxlY3RJc0ZldGNoaW5nRmlsZUxpc3REb3dubG9hZGVkT3JQdWJsaXNoZWQ7XG5leHBvcnRzLnNlbGVjdElzRmV0Y2hpbmdUcmFuc2FjdGlvbnMgPSBzZWxlY3RJc0ZldGNoaW5nVHJhbnNhY3Rpb25zO1xuZXhwb3J0cy5zZWxlY3RJc1Jlc29sdmluZ1B1Ymxpc2hVcmlzID0gc2VsZWN0SXNSZXNvbHZpbmdQdWJsaXNoVXJpcztcbmV4cG9ydHMuc2VsZWN0SXNTZWFyY2hpbmcgPSBzZWxlY3RJc1NlYXJjaGluZztcbmV4cG9ydHMuc2VsZWN0SXNTZW5kaW5nU3VwcG9ydCA9IHNlbGVjdElzU2VuZGluZ1N1cHBvcnQ7XG5leHBvcnRzLnNlbGVjdElzU3RpbGxFZGl0aW5nID0gc2VsZWN0SXNTdGlsbEVkaXRpbmc7XG5leHBvcnRzLnNlbGVjdElzV2FsbGV0UmVjb25uZWN0aW5nID0gc2VsZWN0SXNXYWxsZXRSZWNvbm5lY3Rpbmc7XG5leHBvcnRzLnNlbGVjdExhc3RQdXJjaGFzZWRVcmkgPSBzZWxlY3RMYXN0UHVyY2hhc2VkVXJpO1xuZXhwb3J0cy5zZWxlY3RNeUFjdGl2ZUNsYWltcyA9IHNlbGVjdE15QWN0aXZlQ2xhaW1zO1xuZXhwb3J0cy5zZWxlY3RNeUNoYW5uZWxDbGFpbXMgPSBzZWxlY3RNeUNoYW5uZWxDbGFpbXM7XG5leHBvcnRzLnNlbGVjdE15Q2xhaW1Gb3JVcmkgPSBzZWxlY3RNeUNsYWltRm9yVXJpO1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltVXJpc1dpdGhvdXRDaGFubmVscyA9IHNlbGVjdE15Q2xhaW1VcmlzV2l0aG91dENoYW5uZWxzO1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltcyA9IHNlbGVjdE15Q2xhaW1zO1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltc091dHBvaW50cyA9IHNlbGVjdE15Q2xhaW1zT3V0cG9pbnRzO1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltc1JhdyA9IHNlbGVjdE15Q2xhaW1zUmF3O1xuZXhwb3J0cy5zZWxlY3RNeUNsYWltc1dpdGhvdXRDaGFubmVscyA9IHNlbGVjdE15Q2xhaW1zV2l0aG91dENoYW5uZWxzO1xuZXhwb3J0cy5zZWxlY3RNeVN0cmVhbVVybHNDb3VudCA9IHNlbGVjdE15U3RyZWFtVXJsc0NvdW50O1xuZXhwb3J0cy5zZWxlY3RQZW5kaW5nQnlJZCA9IHNlbGVjdFBlbmRpbmdCeUlkO1xuZXhwb3J0cy5zZWxlY3RQZW5kaW5nQ2xhaW1zID0gc2VsZWN0UGVuZGluZ0NsYWltcztcbmV4cG9ydHMuc2VsZWN0UGxheWluZ1VyaSA9IHNlbGVjdFBsYXlpbmdVcmk7XG5leHBvcnRzLnNlbGVjdFB1Ymxpc2hGb3JtVmFsdWVzID0gc2VsZWN0UHVibGlzaEZvcm1WYWx1ZXM7XG5leHBvcnRzLnNlbGVjdFB1cmNoYXNlVXJpRXJyb3JNZXNzYWdlID0gc2VsZWN0UHVyY2hhc2VVcmlFcnJvck1lc3NhZ2U7XG5leHBvcnRzLnNlbGVjdFB1cmNoYXNlZFVyaXMgPSBzZWxlY3RQdXJjaGFzZWRVcmlzO1xuZXhwb3J0cy5zZWxlY3RSZWNlaXZlQWRkcmVzcyA9IHNlbGVjdFJlY2VpdmVBZGRyZXNzO1xuZXhwb3J0cy5zZWxlY3RSZWNlbnRUcmFuc2FjdGlvbnMgPSBzZWxlY3RSZWNlbnRUcmFuc2FjdGlvbnM7XG5leHBvcnRzLnNlbGVjdFJlc2VydmVkQmFsYW5jZSA9IHNlbGVjdFJlc2VydmVkQmFsYW5jZTtcbmV4cG9ydHMuc2VsZWN0UmVzb2x2ZWRTZWFyY2hSZXN1bHRzQnlRdWVyeSA9IHNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnk7XG5leHBvcnRzLnNlbGVjdFJlc29sdmVkU2VhcmNoUmVzdWx0c0J5UXVlcnlMYXN0UGFnZVJlYWNoZWQgPSBzZWxlY3RSZXNvbHZlZFNlYXJjaFJlc3VsdHNCeVF1ZXJ5TGFzdFBhZ2VSZWFjaGVkO1xuZXhwb3J0cy5zZWxlY3RSZXNvbHZpbmdVcmlzID0gc2VsZWN0UmVzb2x2aW5nVXJpcztcbmV4cG9ydHMuc2VsZWN0U2VhcmNoQmFyRm9jdXNlZCA9IHNlbGVjdFNlYXJjaEJhckZvY3VzZWQ7XG5leHBvcnRzLnNlbGVjdFNlYXJjaE9wdGlvbnMgPSBzZWxlY3RTZWFyY2hPcHRpb25zO1xuZXhwb3J0cy5zZWxlY3RTZWFyY2hTdGF0ZSA9IHNlbGVjdFN0YXRlO1xuZXhwb3J0cy5zZWxlY3RTZWFyY2hTdWdnZXN0aW9ucyA9IHNlbGVjdFNlYXJjaFN1Z2dlc3Rpb25zO1xuZXhwb3J0cy5zZWxlY3RTZWFyY2hVcmlzQnlRdWVyeSA9IHNlbGVjdFNlYXJjaFVyaXNCeVF1ZXJ5O1xuZXhwb3J0cy5zZWxlY3RTZWFyY2hWYWx1ZSA9IHNlbGVjdFNlYXJjaFZhbHVlO1xuZXhwb3J0cy5zZWxlY3RTdXBwb3J0c0JhbGFuY2UgPSBzZWxlY3RTdXBwb3J0c0JhbGFuY2U7XG5leHBvcnRzLnNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludCA9IHNlbGVjdFN1cHBvcnRzQnlPdXRwb2ludDtcbmV4cG9ydHMuc2VsZWN0VGFrZU92ZXJBbW91bnQgPSBzZWxlY3RUYWtlT3ZlckFtb3VudDtcbmV4cG9ydHMuc2VsZWN0VGlwc0JhbGFuY2UgPSBzZWxlY3RUaXBzQmFsYW5jZTtcbmV4cG9ydHMuc2VsZWN0VG9hc3QgPSBzZWxlY3RUb2FzdDtcbmV4cG9ydHMuc2VsZWN0VG90YWxCYWxhbmNlID0gc2VsZWN0VG90YWxCYWxhbmNlO1xuZXhwb3J0cy5zZWxlY3RUb3RhbERvd25sb2FkUHJvZ3Jlc3MgPSBzZWxlY3RUb3RhbERvd25sb2FkUHJvZ3Jlc3M7XG5leHBvcnRzLnNlbGVjdFRvdGFsU3VwcG9ydHMgPSBzZWxlY3RUb3RhbFN1cHBvcnRzO1xuZXhwb3J0cy5zZWxlY3RUcmFuc2FjdGlvbkl0ZW1zID0gc2VsZWN0VHJhbnNhY3Rpb25JdGVtcztcbmV4cG9ydHMuc2VsZWN0VHJhbnNhY3Rpb25MaXN0RmlsdGVyID0gc2VsZWN0VHJhbnNhY3Rpb25MaXN0RmlsdGVyO1xuZXhwb3J0cy5zZWxlY3RUcmFuc2FjdGlvbnNCeUlkID0gc2VsZWN0VHJhbnNhY3Rpb25zQnlJZDtcbmV4cG9ydHMuc2VsZWN0VW5mb2xsb3dlZFRhZ3MgPSBzZWxlY3RVbmZvbGxvd2VkVGFncztcbmV4cG9ydHMuc2VsZWN0VXBkYXRlQ2hhbm5lbEVycm9yID0gc2VsZWN0VXBkYXRlQ2hhbm5lbEVycm9yO1xuZXhwb3J0cy5zZWxlY3RVcGRhdGluZ0NoYW5uZWwgPSBzZWxlY3RVcGRhdGluZ0NoYW5uZWw7XG5leHBvcnRzLnNlbGVjdFVyaXNMb2FkaW5nID0gc2VsZWN0VXJpc0xvYWRpbmc7XG5leHBvcnRzLnNlbGVjdFdhbGxldERlY3J5cHRQZW5kaW5nID0gc2VsZWN0V2FsbGV0RGVjcnlwdFBlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFdhbGxldERlY3J5cHRSZXN1bHQgPSBzZWxlY3RXYWxsZXREZWNyeXB0UmVzdWx0O1xuZXhwb3J0cy5zZWxlY3RXYWxsZXREZWNyeXB0U3VjY2VlZGVkID0gc2VsZWN0V2FsbGV0RGVjcnlwdFN1Y2NlZWRlZDtcbmV4cG9ydHMuc2VsZWN0V2FsbGV0RW5jcnlwdFBlbmRpbmcgPSBzZWxlY3RXYWxsZXRFbmNyeXB0UGVuZGluZztcbmV4cG9ydHMuc2VsZWN0V2FsbGV0RW5jcnlwdFJlc3VsdCA9IHNlbGVjdFdhbGxldEVuY3J5cHRSZXN1bHQ7XG5leHBvcnRzLnNlbGVjdFdhbGxldEVuY3J5cHRTdWNjZWVkZWQgPSBzZWxlY3RXYWxsZXRFbmNyeXB0U3VjY2VlZGVkO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRJc0VuY3J5cHRlZCA9IHNlbGVjdFdhbGxldElzRW5jcnlwdGVkO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRTdGF0ZSA9IHNlbGVjdFdhbGxldFN0YXRlO1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRVbmxvY2tQZW5kaW5nID0gc2VsZWN0V2FsbGV0VW5sb2NrUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0V2FsbGV0VW5sb2NrUmVzdWx0ID0gc2VsZWN0V2FsbGV0VW5sb2NrUmVzdWx0O1xuZXhwb3J0cy5zZWxlY3RXYWxsZXRVbmxvY2tTdWNjZWVkZWQgPSBzZWxlY3RXYWxsZXRVbmxvY2tTdWNjZWVkZWQ7XG5leHBvcnRzLnNldFNlYXJjaEFwaSA9IHNldFNlYXJjaEFwaTtcbmV4cG9ydHMudGFnc1JlZHVjZXIgPSB0YWdzUmVkdWNlcjtcbmV4cG9ydHMudG9RdWVyeVN0cmluZyA9IHRvUXVlcnlTdHJpbmc7XG5leHBvcnRzLndhbGxldFJlZHVjZXIgPSB3YWxsZXRSZWR1Y2VyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsT0E7QUFxT0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUF3QkE7QUFDQTtBQUFBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBWUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2Q0E7QUEwQ0E7Ozs7Ozs7OztBQVNBO0FBRUE7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBYUE7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFSQTtBQVdBO0FBQ0E7QUFaQTtBQWVBO0FBQ0E7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUF1QkE7QUFBQTtBQXZCQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSkE7QUFEQTtBQVFBO0FBWEE7QUFhQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBN0NBO0FBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBcERBO0FBcURBO0FBQUE7QUFyREE7QUFzREE7QUFBQTtBQXREQTtBQXdEQTtBQUNBO0FBQUE7QUF6REE7QUEwREE7QUFBQTtBQTFEQTtBQTJEQTtBQUFBO0FBM0RBO0FBNERBO0FBQUE7QUE1REE7QUE2REE7QUFBQTtBQTdEQTtBQThEQTtBQUFBO0FBOURBO0FBK0RBO0FBQUE7QUEvREE7QUFnRUE7QUFBQTtBQWhFQTtBQWlFQTtBQUFBO0FBakVBO0FBa0VBO0FBQUE7QUFsRUE7QUFtRUE7QUFBQTtBQW5FQTtBQW9FQTtBQUFBO0FBcEVBO0FBcUVBO0FBQUE7QUFyRUE7QUF1RUE7QUFDQTtBQUFBO0FBQUE7QUF4RUE7QUF5RUE7QUFBQTtBQUFBO0FBekVBO0FBMEVBO0FBQUE7QUFBQTtBQTFFQTtBQTJFQTtBQUFBO0FBQUE7QUEzRUE7QUE0RUE7QUFBQTtBQUFBO0FBNUVBO0FBOEVBO0FBQ0E7QUFBQTtBQUFBO0FBL0VBO0FBZ0ZBO0FBQUE7QUFoRkE7QUFpRkE7QUFBQTtBQUFBO0FBakZBO0FBa0ZBO0FBQUE7QUFBQTtBQWxGQTtBQW1GQTtBQUFBO0FBQUE7QUFuRkE7QUFvRkE7QUFBQTtBQUFBO0FBcEZBO0FBcUZBO0FBQUE7QUFBQTtBQXJGQTtBQXNGQTtBQUFBO0FBQUE7QUF0RkE7QUF1RkE7QUFBQTtBQUFBO0FBdkZBO0FBd0ZBO0FBQUE7QUFBQTtBQXhGQTtBQXlGQTtBQUFBO0FBQUE7QUF6RkE7QUEwRkE7QUFBQTtBQUFBO0FBMUZBO0FBMkZBO0FBQUE7QUFBQTtBQTNGQTtBQTZGQTtBQUFBO0FBQUE7QUE3RkE7QUE4RkE7QUFBQTtBQUFBO0FBOUZBO0FBZ0dBO0FBQ0E7QUFBQTtBQUFBO0FBakdBO0FBa0dBO0FBQUE7QUFBQTtBQWxHQTtBQW9HQTtBQUNBO0FBQUE7QUFBQTtBQXJHQTtBQXNHQTtBQUFBO0FBQUE7QUF0R0E7QUF1R0E7QUFBQTtBQUFBO0FBdkdBO0FBd0dBO0FBQUE7QUFBQTtBQXhHQTtBQXlHQTtBQUNBO0FBQUE7QUFBQTtBQTFHQTtBQTRHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFkQTtBQUZBO0FBcUJBO0FBQ0E7QUFDQTtBQURBO0FBbklBO0FBc0lBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQUFBO0FBdElBO0FBQ0E7QUE4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBVEE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBQUE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQTdCQTtBQUNBO0FBK0JBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBaUJBO0FBakJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFpQkE7QUFDQTtBQW5CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQW9CQTtBQUNBO0FBdkJBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBbERBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXVEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRkE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUZBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFGQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFIQTtBQU5BO0FBWUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBakVBO0FBcUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFKQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQXJCQTtBQUNBO0FBdUJBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRDQTtBQXlDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQW5EQTtBQUNBO0FBQ0E7QUFxREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBOUVBO0FBQ0E7QUFDQTtBQStFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQVZBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFuQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBc0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUZBO0FBS0E7QUFSQTtBQVdBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVJBO0FBMUJBO0FBaURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFwREE7QUFpRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFIQTtBQVlBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQVZBO0FBYUE7QUFqQkE7QUFvQkE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQVZBO0FBQUE7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFyQ0E7QUFBQTtBQUNBO0FBdUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQU5BO0FBQ0E7QUFnQkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBTkE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFOQTtBQUFBO0FBQ0E7QUFRQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUhBO0FBTUE7QUFUQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBUEE7QUFRQTtBQVJBO0FBQUE7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBTEE7QUFRQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFkQTtBQWlCQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUxBO0FBQUE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQU5BO0FBQUE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFBQTtBQUNBO0FBWUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVCQTtBQUFBO0FBQ0E7QUE4QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBTkE7QUFBQTtBQUNBO0FBUUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFHQTtBQUhBO0FBTUE7QUFkQTtBQUFBO0FBQ0E7QUFnQkE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUFBQTtBQUNBO0FBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUZBO0FBV0E7QUFuQkE7QUFxQkE7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBL0JBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFOQTtBQWVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFMQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFEQTtBQUxBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUhBO0FBTEE7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSkE7QUFVQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBbkJBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUxBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQWpEQTtBQXNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBZkE7QUFDQTtBQWlCQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFyREE7QUE0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBWEE7QUFMQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFYQTtBQUxBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFOQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBWEE7QUFMQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTkE7QUFMQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQU5BO0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBS0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBNUJBO0FBK0JBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQWhDQTtBQXpCQTtBQStEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFIQTtBQUxBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQXhCQTtBQUNBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5RUE7QUFnRkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBS0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUZBO0FBUkE7QUFOQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBVEE7QUFXQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBZkE7QUFuQ0E7QUFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQUE7QUFBQTtBQXpCQTtBQUNBO0FBQ0E7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUZBO0FBUEE7QUF0Q0E7QUFtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBTEE7QUFMQTtBQWdCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFJQTtBQUhBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBRkE7QUFSQTtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSEE7QUFEQTtBQUNBO0FBT0E7QUFsQ0E7QUFvQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQVJBO0FBQUE7QUFDQTtBQVVBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUhBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUhBO0FBTUE7QUFWQTtBQWFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFJQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBVkE7QUFhQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUFBO0FBQ0E7QUFRQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUxBO0FBQUE7QUFDQTtBQVdBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUEzQkE7QUE2QkE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBRkE7QUF2Q0E7QUFiQTtBQTBEQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFwQkE7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUE5QkE7QUFnQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFKQTtBQVlBO0FBMUJBO0FBNEJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUZBO0FBU0E7QUFsQkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFtQkE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBdEJBO0FBeUJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFYQTtBQUNBO0FBWUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBUkE7QUFXQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFpQkE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFDQTtBQXNCQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU9BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFMQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBWkE7QUFSQTtBQUFBO0FBQ0E7QUE0QkE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFKQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBRkE7QUFEQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUhBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFIQTtBQVNBO0FBVEE7QUFYQTtBQURBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFIQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBSEE7QUFTQTtBQVRBO0FBVUE7QUFoRkE7QUFBQTtBQUNBO0FBa0ZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFTQTtBQUNBO0FBRkE7QUFSQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFkQTtBQWtCQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUF4REE7QUFBQTtBQUNBO0FBMERBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQThCQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFQQTtBQVFBO0FBQ0E7QUFUQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkVBO0FBQ0E7QUFDQTtBQXlFQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdGQTtBQWlHQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBcEdBO0FBQUE7QUFDQTtBQUNBO0FBc0dBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBdEJBO0FBREE7QUFDQTtBQTBCQTtBQUNBO0FBREE7QUFyQ0E7QUFBQTtBQTJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFlQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQURBO0FBVUE7QUFWQTtBQWhCQTtBQUFBO0FBQ0E7QUE2QkE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFUQTtBQUFBO0FBQ0E7QUFXQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWxCQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBaENBO0FBa0NBO0FBQ0E7QUFEQTtBQWxDQTtBQWxDQTtBQUFBO0FBQ0E7QUF5RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFBQTs7Ozs7QUFLQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBRkE7QUFUQTtBQW1CQTtBQUNBO0FBREE7QUFuQkE7QUE1Q0E7QUFBQTtBQUNBO0FBb0VBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUFBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQU5BO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWhCQTtBQVJBO0FBOEJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU5BO0FBY0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQWxCQTtBQVJBO0FBZ0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFaQTtBQUpBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFRQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBcEJBO0FBc0JBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUExQkE7QUFKQTtBQW9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBcEJBO0FBc0JBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUExQkE7QUFKQTtBQW9DQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUFDQTtBQXdCQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBckNBO0FBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBREE7QUFaQTtBQUNBO0FBZ0JBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFDQTtBQXNCQTtBQUFBO0FBRUE7QUFGQTtBQUdBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBOUJBO0FBQ0E7QUFzQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQXpCQTtBQUNBO0FBZ0NBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBTkE7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQXRDQTtBQUNBO0FBK0NBO0FBQUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQURBO0FBTkE7QUFDQTtBQVVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBZEE7QUFDQTtBQW9CQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFWQTtBQUNBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBQ0E7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFKQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBVkE7QUFDQTtBQUNBO0FBWUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFsQkE7QUFDQTtBQXdCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFKQTtBQUNBO0FBUUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFTQTtBQUNBO0FBQ0E7QUFEQTtBQVZBO0FBQUE7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBREE7QUFMQTtBQVNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUF2QkE7QUE4QkE7QUFBQTtBQUFBO0FBOUJBO0FBZ0NBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUF0REE7QUE4REE7QUFDQTtBQURBO0FBOURBO0FBaUVBO0FBQ0E7QUFEQTtBQWpFQTtBQW9FQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQW5GQTtBQTBGQTtBQUNBO0FBREE7QUExRkE7QUE4RkE7QUFDQTtBQURBO0FBOUZBO0FBa0dBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBdkdBO0FBNkdBO0FBQ0E7QUFEQTtBQTdHQTtBQWlIQTtBQUNBO0FBREE7QUFqSEE7QUFvSEE7QUFBQTtBQUNBO0FBREE7QUFwSEE7QUF3SEE7QUFDQTtBQURBO0FBeEhBO0FBQ0E7QUE0SEE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBRkE7QUFDQTtBQVVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFHQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQVhBO0FBQ0E7QUFpQkE7QUFBQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBREE7QUFOQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFDQTtBQWNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBTEE7QUFDQTtBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFDQTtBQWNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQVRBO0FBQ0E7QUFjQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFOQTtBQUNBO0FBVUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFDQTtBQWNBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFMQTtBQVFBO0FBUkE7QUFDQTtBQVlBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFQQTtBQUNBO0FBWUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBWkE7QUFDQTtBQWtCQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFDQTtBQWFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFQQTtBQUNBO0FBV0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFQQTtBQVlBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFmQTtBQXNCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUExQkE7QUErQkE7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQXJDQTtBQXlDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBOUNBO0FBcURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQXpEQTtBQThEQTtBQUNBO0FBRUE7QUFDQTtBQURBO0FBakVBO0FBQ0E7QUFzRUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0JBO0FBOEJBO0FBQ0E7QUFFQTtBQUhBO0FBS0E7QUFMQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBTkE7QUFVQTtBQUNBO0FBREE7QUFWQTtBQWFBO0FBQ0E7QUFDQTtBQUZBO0FBYkE7QUFrQkE7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUZBO0FBNUJBO0FBQ0E7QUFrQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQW1CQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBSUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFQQTtBQWFBO0FBQ0E7QUFEQTtBQWJBO0FBaUJBO0FBQ0E7QUFEQTtBQWpCQTtBQXFCQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQVRBO0FBQ0E7QUFDQTtBQVdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQW5DQTtBQTBDQTtBQUNBO0FBREE7QUExQ0E7QUE4Q0E7QUFDQTtBQUNBO0FBRkE7QUE5Q0E7QUFtREE7QUFDQTtBQURBO0FBbkRBO0FBNERBO0FBQ0E7QUFEQTtBQTVEQTtBQWdFQTtBQUNBO0FBREE7QUFoRUE7QUFtRUE7QUFDQTtBQURBO0FBbkVBO0FBc0VBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUExRUE7QUFDQTtBQStFQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFiQTtBQWtCQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBekJBO0FBOEJBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUF0Q0E7QUEyQ0E7QUFFQTtBQUNBO0FBREE7QUE3Q0E7QUFDQTtBQWtEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFaQTtBQWdCQTtBQUVBO0FBQ0E7QUFEQTtBQWxCQTtBQUNBO0FBdUJBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFB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QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQWRBO0FBQ0E7QUFpQkE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQU5BO0FBU0E7QUFaQTtBQUNBO0FBY0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUpBO0FBT0E7QUFWQTtBQUNBO0FBWUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lbry-redux/dist/bundle.es.js\n"); - -/***/ }), - -/***/ "./node_modules/lbryinc/dist/bundle.es.js": -/*!************************************************!*\ - !*** ./node_modules/lbryinc/dist/bundle.es.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__, Buffer) {\n\nvar _handleActions, _handleActions2, _handleActions3, _handleActions4, _handleActions5, _handleActions6;\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && _typeof(ex) === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar lbryRedux = __webpack_require__(/*! lbry-redux */ \"./node_modules/lbry-redux/dist/bundle.es.js\");\n\nvar querystring = _interopDefault(__webpack_require__(/*! querystring */ \"../node_modules/querystring-es3/index.js\"));\n\nvar reselect = __webpack_require__(/*! reselect */ \"./node_modules/reselect/lib/index.js\"); // User\n\n\nvar GENERATE_AUTH_TOKEN_FAILURE = 'GENERATE_AUTH_TOKEN_FAILURE';\nvar GENERATE_AUTH_TOKEN_STARTED = 'GENERATE_AUTH_TOKEN_STARTED';\nvar GENERATE_AUTH_TOKEN_SUCCESS = 'GENERATE_AUTH_TOKEN_SUCCESS';\nvar AUTHENTICATION_STARTED = 'AUTHENTICATION_STARTED';\nvar AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS';\nvar AUTHENTICATION_FAILURE = 'AUTHENTICATION_FAILURE';\nvar USER_EMAIL_DECLINE = 'USER_EMAIL_DECLINE';\nvar USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_STARTED';\nvar USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS';\nvar USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS';\nvar USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE';\nvar USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET';\nvar USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED';\nvar USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS';\nvar USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY_STARTED = 'USER_EMAIL_VERIFY_RETRY_STARTED';\nvar USER_EMAIL_VERIFY_RETRY_FAILURE = 'USER_EMAIL_VERIFY_RETRY_FAILURE';\nvar USER_EMAIL_VERIFY_RETRY_SUCCESS = 'USER_EMAIL_VERIFY_RETRY_SUCCESS';\nvar USER_PHONE_RESET = 'USER_PHONE_RESET';\nvar USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED';\nvar USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS';\nvar USER_PHONE_NEW_FAILURE = 'USER_PHONE_NEW_FAILURE';\nvar USER_PHONE_VERIFY_STARTED = 'USER_PHONE_VERIFY_STARTED';\nvar USER_PHONE_VERIFY_SUCCESS = 'USER_PHONE_VERIFY_SUCCESS';\nvar USER_PHONE_VERIFY_FAILURE = 'USER_PHONE_VERIFY_FAILURE';\nvar USER_IDENTITY_VERIFY_STARTED = 'USER_IDENTITY_VERIFY_STARTED';\nvar USER_IDENTITY_VERIFY_SUCCESS = 'USER_IDENTITY_VERIFY_SUCCESS';\nvar USER_IDENTITY_VERIFY_FAILURE = 'USER_IDENTITY_VERIFY_FAILURE';\nvar USER_FETCH_STARTED = 'USER_FETCH_STARTED';\nvar USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS';\nvar USER_FETCH_FAILURE = 'USER_FETCH_FAILURE';\nvar USER_INVITE_STATUS_FETCH_STARTED = 'USER_INVITE_STATUS_FETCH_STARTED';\nvar USER_INVITE_STATUS_FETCH_SUCCESS = 'USER_INVITE_STATUS_FETCH_SUCCESS';\nvar USER_INVITE_STATUS_FETCH_FAILURE = 'USER_INVITE_STATUS_FETCH_FAILURE';\nvar USER_INVITE_NEW_STARTED = 'USER_INVITE_NEW_STARTED';\nvar USER_INVITE_NEW_SUCCESS = 'USER_INVITE_NEW_SUCCESS';\nvar USER_INVITE_NEW_FAILURE = 'USER_INVITE_NEW_FAILURE';\nvar FETCH_ACCESS_TOKEN_SUCCESS = 'FETCH_ACCESS_TOKEN_SUCCESS';\nvar USER_YOUTUBE_IMPORT_STARTED = 'USER_YOUTUBE_IMPORT_STARTED';\nvar USER_YOUTUBE_IMPORT_FAILURE = 'USER_YOUTUBE_IMPORT_FAILURE';\nvar USER_YOUTUBE_IMPORT_SUCCESS = 'USER_YOUTUBE_IMPORT_SUCCESS';\nvar USER_SET_REFERRER_STARTED = 'USER_SET_REFERRER_STARTED';\nvar USER_SET_REFERRER_SUCCESS = 'USER_SET_REFERRER_SUCCESS';\nvar USER_SET_REFERRER_FAILURE = 'USER_SET_REFERRER_FAILURE';\nvar USER_SET_REFERRER_RESET = 'USER_SET_REFERRER_RESET'; // Claims\n\nvar FETCH_FEATURED_CONTENT_STARTED = 'FETCH_FEATURED_CONTENT_STARTED';\nvar FETCH_FEATURED_CONTENT_COMPLETED = 'FETCH_FEATURED_CONTENT_COMPLETED';\nvar FETCH_TRENDING_CONTENT_STARTED = 'FETCH_TRENDING_CONTENT_STARTED';\nvar FETCH_TRENDING_CONTENT_COMPLETED = 'FETCH_TRENDING_CONTENT_COMPLETED';\nvar RESOLVE_URIS_STARTED = 'RESOLVE_URIS_STARTED';\nvar RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED';\nvar FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED';\nvar FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED';\nvar FETCH_CHANNEL_CLAIM_COUNT_STARTED = 'FETCH_CHANNEL_CLAIM_COUNT_STARTED';\nvar FETCH_CHANNEL_CLAIM_COUNT_COMPLETED = 'FETCH_CHANNEL_CLAIM_COUNT_COMPLETED';\nvar FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED';\nvar FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED';\nvar ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED';\nvar ABANDON_CLAIM_SUCCEEDED = 'ABANDON_CLAIM_SUCCEEDED';\nvar FETCH_CHANNEL_LIST_STARTED = 'FETCH_CHANNEL_LIST_STARTED';\nvar FETCH_CHANNEL_LIST_COMPLETED = 'FETCH_CHANNEL_LIST_COMPLETED';\nvar CREATE_CHANNEL_STARTED = 'CREATE_CHANNEL_STARTED';\nvar CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNEL_COMPLETED';\nvar PUBLISH_STARTED = 'PUBLISH_STARTED';\nvar PUBLISH_COMPLETED = 'PUBLISH_COMPLETED';\nvar PUBLISH_FAILED = 'PUBLISH_FAILED';\nvar SET_PLAYING_URI = 'SET_PLAYING_URI';\nvar SET_CONTENT_POSITION = 'SET_CONTENT_POSITION';\nvar SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED';\nvar CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI';\nvar CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL'; // Subscriptions\n\nvar CHANNEL_SUBSCRIBE = 'CHANNEL_SUBSCRIBE';\nvar CHANNEL_UNSUBSCRIBE = 'CHANNEL_UNSUBSCRIBE';\nvar CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS = 'CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS';\nvar CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS = 'CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS';\nvar HAS_FETCHED_SUBSCRIPTIONS = 'HAS_FETCHED_SUBSCRIPTIONS';\nvar SET_SUBSCRIPTION_LATEST = 'SET_SUBSCRIPTION_LATEST';\nvar UPDATE_SUBSCRIPTION_UNREADS = 'UPDATE_SUBSCRIPTION_UNREADS';\nvar REMOVE_SUBSCRIPTION_UNREADS = 'REMOVE_SUBSCRIPTION_UNREADS';\nvar CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUBSCRIPTION_STARTED';\nvar CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED';\nvar CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE';\nvar FETCH_SUBSCRIPTIONS_START = 'FETCH_SUBSCRIPTIONS_START';\nvar FETCH_SUBSCRIPTIONS_FAIL = 'FETCH_SUBSCRIPTIONS_FAIL';\nvar FETCH_SUBSCRIPTIONS_SUCCESS = 'FETCH_SUBSCRIPTIONS_SUCCESS';\nvar SET_VIEW_MODE = 'SET_VIEW_MODE';\nvar GET_SUGGESTED_SUBSCRIPTIONS_START = 'GET_SUGGESTED_SUBSCRIPTIONS_START';\nvar GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS = 'GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS';\nvar GET_SUGGESTED_SUBSCRIPTIONS_FAIL = 'GET_SUGGESTED_SUBSCRIPTIONS_FAIL';\nvar SUBSCRIPTION_FIRST_RUN_COMPLETED = 'SUBSCRIPTION_FIRST_RUN_COMPLETED';\nvar VIEW_SUGGESTED_SUBSCRIPTIONS = 'VIEW_SUGGESTED_SUBSCRIPTIONS'; // Blacklist\n\nvar FETCH_BLACK_LISTED_CONTENT_STARTED = 'FETCH_BLACK_LISTED_CONTENT_STARTED';\nvar FETCH_BLACK_LISTED_CONTENT_COMPLETED = 'FETCH_BLACK_LISTED_CONTENT_COMPLETED';\nvar FETCH_BLACK_LISTED_CONTENT_FAILED = 'FETCH_BLACK_LISTED_CONTENT_FAILED';\nvar BLACK_LISTED_CONTENT_SUBSCRIBE = 'BLACK_LISTED_CONTENT_SUBSCRIBE'; // Filtered list\n\nvar FETCH_FILTERED_CONTENT_STARTED = 'FETCH_FILTERED_CONTENT_STARTED';\nvar FETCH_FILTERED_CONTENT_COMPLETED = 'FETCH_FILTERED_CONTENT_COMPLETED';\nvar FETCH_FILTERED_CONTENT_FAILED = 'FETCH_FILTERED_CONTENT_FAILED';\nvar FILTERED_CONTENT_SUBSCRIBE = 'FILTERED_CONTENT_SUBSCRIBE'; // Cost Info\n\nvar FETCH_COST_INFO_STARTED = 'FETCH_COST_INFO_STARTED';\nvar FETCH_COST_INFO_COMPLETED = 'FETCH_COST_INFO_COMPLETED'; // Stats\n\nvar FETCH_VIEW_COUNT_STARTED = 'FETCH_VIEW_COUNT_STARTED';\nvar FETCH_VIEW_COUNT_FAILED = 'FETCH_VIEW_COUNT_FAILED';\nvar FETCH_VIEW_COUNT_COMPLETED = 'FETCH_VIEW_COUNT_COMPLETED';\nvar FETCH_SUB_COUNT_STARTED = 'FETCH_SUB_COUNT_STARTED';\nvar FETCH_SUB_COUNT_FAILED = 'FETCH_SUB_COUNT_FAILED';\nvar FETCH_SUB_COUNT_COMPLETED = 'FETCH_SUB_COUNT_COMPLETED'; // Cross-device Sync\n\nvar GET_SYNC_STARTED = 'GET_SYNC_STARTED';\nvar GET_SYNC_COMPLETED = 'GET_SYNC_COMPLETED';\nvar GET_SYNC_FAILED = 'GET_SYNC_FAILED';\nvar SET_SYNC_STARTED = 'SET_SYNC_STARTED';\nvar SET_SYNC_FAILED = 'SET_SYNC_FAILED';\nvar SET_SYNC_COMPLETED = 'SET_SYNC_COMPLETED';\nvar SET_DEFAULT_ACCOUNT = 'SET_DEFAULT_ACCOUNT';\nvar SYNC_APPLY_STARTED = 'SYNC_APPLY_STARTED';\nvar SYNC_APPLY_COMPLETED = 'SYNC_APPLY_COMPLETED';\nvar SYNC_APPLY_FAILED = 'SYNC_APPLY_FAILED';\nvar SYNC_APPLY_BAD_PASSWORD = 'SYNC_APPLY_BAD_PASSWORD';\nvar SYNC_RESET = 'SYNC_RESET'; // Lbry.tv\n\nvar UPDATE_UPLOAD_PROGRESS = 'UPDATE_UPLOAD_PROGRESS';\nvar action_types = /*#__PURE__*/Object.freeze({\n GENERATE_AUTH_TOKEN_FAILURE: GENERATE_AUTH_TOKEN_FAILURE,\n GENERATE_AUTH_TOKEN_STARTED: GENERATE_AUTH_TOKEN_STARTED,\n GENERATE_AUTH_TOKEN_SUCCESS: GENERATE_AUTH_TOKEN_SUCCESS,\n AUTHENTICATION_STARTED: AUTHENTICATION_STARTED,\n AUTHENTICATION_SUCCESS: AUTHENTICATION_SUCCESS,\n AUTHENTICATION_FAILURE: AUTHENTICATION_FAILURE,\n USER_EMAIL_DECLINE: USER_EMAIL_DECLINE,\n USER_EMAIL_NEW_STARTED: USER_EMAIL_NEW_STARTED,\n USER_EMAIL_NEW_SUCCESS: USER_EMAIL_NEW_SUCCESS,\n USER_EMAIL_NEW_EXISTS: USER_EMAIL_NEW_EXISTS,\n USER_EMAIL_NEW_FAILURE: USER_EMAIL_NEW_FAILURE,\n USER_EMAIL_VERIFY_SET: USER_EMAIL_VERIFY_SET,\n USER_EMAIL_VERIFY_STARTED: USER_EMAIL_VERIFY_STARTED,\n USER_EMAIL_VERIFY_SUCCESS: USER_EMAIL_VERIFY_SUCCESS,\n USER_EMAIL_VERIFY_FAILURE: USER_EMAIL_VERIFY_FAILURE,\n USER_EMAIL_VERIFY_RETRY_STARTED: USER_EMAIL_VERIFY_RETRY_STARTED,\n USER_EMAIL_VERIFY_RETRY_FAILURE: USER_EMAIL_VERIFY_RETRY_FAILURE,\n USER_EMAIL_VERIFY_RETRY_SUCCESS: USER_EMAIL_VERIFY_RETRY_SUCCESS,\n USER_PHONE_RESET: USER_PHONE_RESET,\n USER_PHONE_NEW_STARTED: USER_PHONE_NEW_STARTED,\n USER_PHONE_NEW_SUCCESS: USER_PHONE_NEW_SUCCESS,\n USER_PHONE_NEW_FAILURE: USER_PHONE_NEW_FAILURE,\n USER_PHONE_VERIFY_STARTED: USER_PHONE_VERIFY_STARTED,\n USER_PHONE_VERIFY_SUCCESS: USER_PHONE_VERIFY_SUCCESS,\n USER_PHONE_VERIFY_FAILURE: USER_PHONE_VERIFY_FAILURE,\n USER_IDENTITY_VERIFY_STARTED: USER_IDENTITY_VERIFY_STARTED,\n USER_IDENTITY_VERIFY_SUCCESS: USER_IDENTITY_VERIFY_SUCCESS,\n USER_IDENTITY_VERIFY_FAILURE: USER_IDENTITY_VERIFY_FAILURE,\n USER_FETCH_STARTED: USER_FETCH_STARTED,\n USER_FETCH_SUCCESS: USER_FETCH_SUCCESS,\n USER_FETCH_FAILURE: USER_FETCH_FAILURE,\n USER_INVITE_STATUS_FETCH_STARTED: USER_INVITE_STATUS_FETCH_STARTED,\n USER_INVITE_STATUS_FETCH_SUCCESS: USER_INVITE_STATUS_FETCH_SUCCESS,\n USER_INVITE_STATUS_FETCH_FAILURE: USER_INVITE_STATUS_FETCH_FAILURE,\n USER_INVITE_NEW_STARTED: USER_INVITE_NEW_STARTED,\n USER_INVITE_NEW_SUCCESS: USER_INVITE_NEW_SUCCESS,\n USER_INVITE_NEW_FAILURE: USER_INVITE_NEW_FAILURE,\n FETCH_ACCESS_TOKEN_SUCCESS: FETCH_ACCESS_TOKEN_SUCCESS,\n USER_YOUTUBE_IMPORT_STARTED: USER_YOUTUBE_IMPORT_STARTED,\n USER_YOUTUBE_IMPORT_FAILURE: USER_YOUTUBE_IMPORT_FAILURE,\n USER_YOUTUBE_IMPORT_SUCCESS: USER_YOUTUBE_IMPORT_SUCCESS,\n USER_SET_REFERRER_STARTED: USER_SET_REFERRER_STARTED,\n USER_SET_REFERRER_SUCCESS: USER_SET_REFERRER_SUCCESS,\n USER_SET_REFERRER_FAILURE: USER_SET_REFERRER_FAILURE,\n USER_SET_REFERRER_RESET: USER_SET_REFERRER_RESET,\n FETCH_FEATURED_CONTENT_STARTED: FETCH_FEATURED_CONTENT_STARTED,\n FETCH_FEATURED_CONTENT_COMPLETED: FETCH_FEATURED_CONTENT_COMPLETED,\n FETCH_TRENDING_CONTENT_STARTED: FETCH_TRENDING_CONTENT_STARTED,\n FETCH_TRENDING_CONTENT_COMPLETED: FETCH_TRENDING_CONTENT_COMPLETED,\n RESOLVE_URIS_STARTED: RESOLVE_URIS_STARTED,\n RESOLVE_URIS_COMPLETED: RESOLVE_URIS_COMPLETED,\n FETCH_CHANNEL_CLAIMS_STARTED: FETCH_CHANNEL_CLAIMS_STARTED,\n FETCH_CHANNEL_CLAIMS_COMPLETED: FETCH_CHANNEL_CLAIMS_COMPLETED,\n FETCH_CHANNEL_CLAIM_COUNT_STARTED: FETCH_CHANNEL_CLAIM_COUNT_STARTED,\n FETCH_CHANNEL_CLAIM_COUNT_COMPLETED: FETCH_CHANNEL_CLAIM_COUNT_COMPLETED,\n FETCH_CLAIM_LIST_MINE_STARTED: FETCH_CLAIM_LIST_MINE_STARTED,\n FETCH_CLAIM_LIST_MINE_COMPLETED: FETCH_CLAIM_LIST_MINE_COMPLETED,\n ABANDON_CLAIM_STARTED: ABANDON_CLAIM_STARTED,\n ABANDON_CLAIM_SUCCEEDED: ABANDON_CLAIM_SUCCEEDED,\n FETCH_CHANNEL_LIST_STARTED: FETCH_CHANNEL_LIST_STARTED,\n FETCH_CHANNEL_LIST_COMPLETED: FETCH_CHANNEL_LIST_COMPLETED,\n CREATE_CHANNEL_STARTED: CREATE_CHANNEL_STARTED,\n CREATE_CHANNEL_COMPLETED: CREATE_CHANNEL_COMPLETED,\n PUBLISH_STARTED: PUBLISH_STARTED,\n PUBLISH_COMPLETED: PUBLISH_COMPLETED,\n PUBLISH_FAILED: PUBLISH_FAILED,\n SET_PLAYING_URI: SET_PLAYING_URI,\n SET_CONTENT_POSITION: SET_CONTENT_POSITION,\n SET_CONTENT_LAST_VIEWED: SET_CONTENT_LAST_VIEWED,\n CLEAR_CONTENT_HISTORY_URI: CLEAR_CONTENT_HISTORY_URI,\n CLEAR_CONTENT_HISTORY_ALL: CLEAR_CONTENT_HISTORY_ALL,\n CHANNEL_SUBSCRIBE: CHANNEL_SUBSCRIBE,\n CHANNEL_UNSUBSCRIBE: CHANNEL_UNSUBSCRIBE,\n CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS: CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS,\n CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS: CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS,\n HAS_FETCHED_SUBSCRIPTIONS: HAS_FETCHED_SUBSCRIPTIONS,\n SET_SUBSCRIPTION_LATEST: SET_SUBSCRIPTION_LATEST,\n UPDATE_SUBSCRIPTION_UNREADS: UPDATE_SUBSCRIPTION_UNREADS,\n REMOVE_SUBSCRIPTION_UNREADS: REMOVE_SUBSCRIPTION_UNREADS,\n CHECK_SUBSCRIPTION_STARTED: CHECK_SUBSCRIPTION_STARTED,\n CHECK_SUBSCRIPTION_COMPLETED: CHECK_SUBSCRIPTION_COMPLETED,\n CHECK_SUBSCRIPTIONS_SUBSCRIBE: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n FETCH_SUBSCRIPTIONS_START: FETCH_SUBSCRIPTIONS_START,\n FETCH_SUBSCRIPTIONS_FAIL: FETCH_SUBSCRIPTIONS_FAIL,\n FETCH_SUBSCRIPTIONS_SUCCESS: FETCH_SUBSCRIPTIONS_SUCCESS,\n SET_VIEW_MODE: SET_VIEW_MODE,\n GET_SUGGESTED_SUBSCRIPTIONS_START: GET_SUGGESTED_SUBSCRIPTIONS_START,\n GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS: GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS,\n GET_SUGGESTED_SUBSCRIPTIONS_FAIL: GET_SUGGESTED_SUBSCRIPTIONS_FAIL,\n SUBSCRIPTION_FIRST_RUN_COMPLETED: SUBSCRIPTION_FIRST_RUN_COMPLETED,\n VIEW_SUGGESTED_SUBSCRIPTIONS: VIEW_SUGGESTED_SUBSCRIPTIONS,\n FETCH_BLACK_LISTED_CONTENT_STARTED: FETCH_BLACK_LISTED_CONTENT_STARTED,\n FETCH_BLACK_LISTED_CONTENT_COMPLETED: FETCH_BLACK_LISTED_CONTENT_COMPLETED,\n FETCH_BLACK_LISTED_CONTENT_FAILED: FETCH_BLACK_LISTED_CONTENT_FAILED,\n BLACK_LISTED_CONTENT_SUBSCRIBE: BLACK_LISTED_CONTENT_SUBSCRIBE,\n FETCH_FILTERED_CONTENT_STARTED: FETCH_FILTERED_CONTENT_STARTED,\n FETCH_FILTERED_CONTENT_COMPLETED: FETCH_FILTERED_CONTENT_COMPLETED,\n FETCH_FILTERED_CONTENT_FAILED: FETCH_FILTERED_CONTENT_FAILED,\n FILTERED_CONTENT_SUBSCRIBE: FILTERED_CONTENT_SUBSCRIBE,\n FETCH_COST_INFO_STARTED: FETCH_COST_INFO_STARTED,\n FETCH_COST_INFO_COMPLETED: FETCH_COST_INFO_COMPLETED,\n FETCH_VIEW_COUNT_STARTED: FETCH_VIEW_COUNT_STARTED,\n FETCH_VIEW_COUNT_FAILED: FETCH_VIEW_COUNT_FAILED,\n FETCH_VIEW_COUNT_COMPLETED: FETCH_VIEW_COUNT_COMPLETED,\n FETCH_SUB_COUNT_STARTED: FETCH_SUB_COUNT_STARTED,\n FETCH_SUB_COUNT_FAILED: FETCH_SUB_COUNT_FAILED,\n FETCH_SUB_COUNT_COMPLETED: FETCH_SUB_COUNT_COMPLETED,\n GET_SYNC_STARTED: GET_SYNC_STARTED,\n GET_SYNC_COMPLETED: GET_SYNC_COMPLETED,\n GET_SYNC_FAILED: GET_SYNC_FAILED,\n SET_SYNC_STARTED: SET_SYNC_STARTED,\n SET_SYNC_FAILED: SET_SYNC_FAILED,\n SET_SYNC_COMPLETED: SET_SYNC_COMPLETED,\n SET_DEFAULT_ACCOUNT: SET_DEFAULT_ACCOUNT,\n SYNC_APPLY_STARTED: SYNC_APPLY_STARTED,\n SYNC_APPLY_COMPLETED: SYNC_APPLY_COMPLETED,\n SYNC_APPLY_FAILED: SYNC_APPLY_FAILED,\n SYNC_APPLY_BAD_PASSWORD: SYNC_APPLY_BAD_PASSWORD,\n SYNC_RESET: SYNC_RESET,\n UPDATE_UPLOAD_PROGRESS: UPDATE_UPLOAD_PROGRESS\n});\nvar NOT_TRANSFERRED = 'not_transferred';\nvar PENDING_TRANSFER = 'pending_transfer';\nvar COMPLETED_TRANSFER = 'completed_transfer';\nvar youtube = /*#__PURE__*/Object.freeze({\n NOT_TRANSFERRED: NOT_TRANSFERRED,\n PENDING_TRANSFER: PENDING_TRANSFER,\n COMPLETED_TRANSFER: COMPLETED_TRANSFER\n});\nvar ALREADY_CLAIMED = 'once the invite reward has been claimed the referrer cannot be changed';\nvar REFERRER_NOT_FOUND = 'A lbry.tv account could not be found for the referrer you provided.';\nvar errors = /*#__PURE__*/Object.freeze({\n ALREADY_CLAIMED: ALREADY_CLAIMED,\n REFERRER_NOT_FOUND: REFERRER_NOT_FOUND\n});\nvar Lbryio = {\n enabled: true,\n authenticationPromise: null,\n exchangePromise: null,\n exchangeLastFetched: null,\n CONNECTION_STRING: 'https://api.lbry.com/'\n};\nvar EXCHANGE_RATE_TIMEOUT = 20 * 60 * 1000; // We can't use env's because they aren't passed into node_modules\n\nLbryio.setLocalApi = function (endpoint) {\n Lbryio.CONNECTION_STRING = endpoint.replace(/\\/*$/, '/'); // exactly one slash at the end;\n};\n\nLbryio.call = function (resource, action) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var method = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'get';\n\n if (!Lbryio.enabled) {\n return Promise.reject(new Error(__('LBRY internal API is disabled')));\n }\n\n if (!(method === 'get' || method === 'post')) {\n return Promise.reject(new Error(__('Invalid method')));\n }\n\n function checkAndParse(response) {\n if (response.status >= 200 && response.status < 300) {\n return response.json();\n }\n\n return response.json().then(function (json) {\n var error;\n\n if (json.error) {\n error = new Error(json.error);\n } else {\n error = new Error('Unknown API error signature');\n }\n\n error.response = response; // This is primarily a hack used in actions/user.js\n\n return Promise.reject(error);\n });\n }\n\n function makeRequest(url, options) {\n return fetch(url, options).then(checkAndParse);\n }\n\n return Lbryio.getAuthToken().then(function (token) {\n var fullParams = _objectSpread({\n auth_token: token\n }, params);\n\n Object.keys(fullParams).forEach(function (key) {\n var value = fullParams[key];\n\n if (_typeof(value) === 'object') {\n fullParams[key] = JSON.stringify(value);\n }\n });\n var qs = querystring.stringify(fullParams);\n var url = \"\".concat(Lbryio.CONNECTION_STRING).concat(resource, \"/\").concat(action, \"?\").concat(qs);\n var options = {\n method: 'GET'\n };\n\n if (method === 'post') {\n options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: qs\n };\n url = \"\".concat(Lbryio.CONNECTION_STRING).concat(resource, \"/\").concat(action);\n }\n\n return makeRequest(url, options).then(function (response) {\n return response.data;\n });\n });\n};\n\nLbryio.authToken = null;\n\nLbryio.getAuthToken = function () {\n return new Promise(function (resolve) {\n if (Lbryio.authToken) {\n resolve(Lbryio.authToken);\n } else if (Lbryio.overrides.getAuthToken) {\n Lbryio.overrides.getAuthToken().then(function (token) {\n resolve(token);\n });\n } else if (typeof window !== 'undefined') {\n var _window = window,\n store = _window.store;\n\n if (store) {\n var state = store.getState();\n var token = state.auth ? state.auth.authToken : null;\n Lbryio.authToken = token;\n resolve(token);\n }\n\n resolve(null);\n } else {\n resolve(null);\n }\n });\n};\n\nLbryio.getCurrentUser = function () {\n return Lbryio.call('user', 'me');\n};\n\nLbryio.authenticate = function () {\n if (!Lbryio.enabled) {\n return new Promise(function (resolve) {\n resolve({\n id: 1,\n language: 'en',\n primary_email: 'disabled@lbry.io',\n has_verified_email: true,\n is_identity_verified: true,\n is_reward_approved: false\n });\n });\n }\n\n if (Lbryio.authenticationPromise === null) {\n Lbryio.authenticationPromise = new Promise(function (resolve, reject) {\n Lbryio.getAuthToken().then(function (token) {\n if (!token || token.length > 60) {\n return false;\n } // check that token works\n\n\n return Lbryio.getCurrentUser().then(function (user) {\n return user;\n })[\"catch\"](function () {\n return false;\n });\n }).then(function (user) {\n if (user) {\n return user;\n }\n\n return lbryRedux.Lbry.status().then(function (status) {\n if (Lbryio.overrides.setAuthToken) {\n return Lbryio.overrides.setAuthToken(status);\n } // simply call the logic to create a new user, and obtain the auth token\n\n\n return new Promise(function (res, rej) {\n Lbryio.call('user', 'new', {\n auth_token: '',\n language: 'en',\n app_id: status.installation_id\n }, 'post').then(function (response) {\n if (!response.auth_token) {\n throw new Error('auth_token was not set in the response');\n }\n\n var _window2 = window,\n store = _window2.store;\n\n if (store) {\n store.dispatch({\n type: GENERATE_AUTH_TOKEN_SUCCESS,\n data: {\n authToken: response.auth_token\n }\n });\n }\n\n Lbryio.authToken = response.auth_token;\n res(response);\n })[\"catch\"](function (error) {\n return rej(error);\n });\n });\n });\n }).then(function (user) {\n if (!user) {\n return Lbryio.getCurrentUser();\n }\n\n return user;\n }).then(resolve, reject);\n });\n }\n\n return Lbryio.authenticationPromise;\n};\n\nLbryio.getStripeToken = function () {\n return Lbryio.CONNECTION_STRING.startsWith('http://localhost:') ? 'pk_test_NoL1JWL7i1ipfhVId5KfDZgo' : 'pk_live_e8M4dRNnCCbmpZzduEUZBgJO';\n};\n\nLbryio.getExchangeRates = function () {\n if (!Lbryio.exchangeLastFetched || Date.now() - Lbryio.exchangeLastFetched > EXCHANGE_RATE_TIMEOUT) {\n Lbryio.exchangePromise = new Promise(function (resolve, reject) {\n Lbryio.call('lbc', 'exchange_rate', {}, 'get', true).then(function (_ref) {\n var LBC_USD = _ref.lbc_usd,\n LBC_BTC = _ref.lbc_btc,\n BTC_USD = _ref.btc_usd;\n var rates = {\n LBC_USD: LBC_USD,\n LBC_BTC: LBC_BTC,\n BTC_USD: BTC_USD\n };\n resolve(rates);\n })[\"catch\"](reject);\n });\n Lbryio.exchangeLastFetched = Date.now();\n }\n\n return Lbryio.exchangePromise;\n}; // Allow overriding lbryio methods\n// The desktop app will need to use it for getAuthToken because we use electron's ipcRenderer\n\n\nLbryio.overrides = {};\n\nLbryio.setOverride = function (methodName, newMethod) {\n Lbryio.overrides[methodName] = newMethod;\n};\n\nvar rewards = {};\nrewards.TYPE_NEW_DEVELOPER = 'new_developer';\nrewards.TYPE_NEW_USER = 'new_user';\nrewards.TYPE_CONFIRM_EMAIL = 'email_provided';\nrewards.TYPE_FIRST_CHANNEL = 'new_channel';\nrewards.TYPE_FIRST_STREAM = 'first_stream';\nrewards.TYPE_MANY_DOWNLOADS = 'many_downloads';\nrewards.TYPE_FIRST_PUBLISH = 'first_publish';\nrewards.TYPE_REFERRAL = 'referrer';\nrewards.TYPE_REFEREE = 'referee';\nrewards.TYPE_REWARD_CODE = 'reward_code';\nrewards.TYPE_SUBSCRIPTION = 'subscription';\nrewards.YOUTUBE_CREATOR = 'youtube_creator';\nrewards.TYPE_DAILY_VIEW = 'daily_view';\nrewards.TYPE_NEW_ANDROID = 'new_android';\n\nrewards.claimReward = function (type, rewardParams) {\n function requestReward(resolve, reject, params) {\n if (!Lbryio.enabled) {\n reject(new Error(__('Rewards are not enabled.')));\n return;\n }\n\n Lbryio.call('reward', 'claim', params, 'post').then(function (reward) {\n var message = reward.reward_notification || \"You have claimed a \".concat(reward.reward_amount, \" LBC reward.\"); // Display global notice\n\n var action = lbryRedux.doToast({\n message: message,\n linkText: __('Show All'),\n linkTarget: '/rewards'\n });\n window.store.dispatch(action);\n\n if (rewards.callbacks.claimRewardSuccess) {\n rewards.callbacks.claimRewardSuccess();\n }\n\n resolve(reward);\n }, reject);\n }\n\n return new Promise(function (resolve, reject) {\n lbryRedux.Lbry.address_unused().then(function (address) {\n var params = _objectSpread({\n reward_type: type,\n wallet_address: address\n }, rewardParams);\n\n switch (type) {\n case rewards.TYPE_FIRST_CHANNEL:\n lbryRedux.Lbry.channel_list({\n page: 1,\n page_size: 10\n }).then(function (claims) {\n var claim = claims.items && claims.items.find(function (foundClaim) {\n return foundClaim.name.length && foundClaim.name[0] === '@' && foundClaim.txid.length && foundClaim.type === 'claim';\n });\n\n if (claim) {\n params.transaction_id = claim.txid;\n requestReward(resolve, reject, params);\n } else {\n reject(new Error(__('Please create a channel identity first.')));\n }\n })[\"catch\"](reject);\n break;\n\n case rewards.TYPE_FIRST_PUBLISH:\n lbryRedux.Lbry.stream_list({\n page: 1,\n page_size: 10\n }).then(function (claims) {\n var claim = claims.items && claims.items.find(function (foundClaim) {\n return foundClaim.name.length && foundClaim.name[0] !== '@' && foundClaim.txid.length && foundClaim.type === 'claim';\n });\n\n if (claim) {\n params.transaction_id = claim.txid;\n requestReward(resolve, reject, params);\n } else {\n reject(claims.length ? new Error(__('Please publish something and wait for confirmation by the network to claim this reward.')) : new Error(__('Please publish something to claim this reward.')));\n }\n })[\"catch\"](reject);\n break;\n\n case rewards.TYPE_FIRST_STREAM:\n case rewards.TYPE_NEW_USER:\n default:\n requestReward(resolve, reject, params);\n }\n });\n });\n};\n\nrewards.callbacks = {\n // Set any callbacks that require code not found in this project\n claimRewardSuccess: null,\n claimFirstRewardSuccess: null,\n rewardApprovalRequired: null\n};\n\nrewards.setCallback = function (name, method) {\n rewards.callbacks[name] = method;\n};\n\nvar VIEW_ALL = 'view_all';\nvar DOWNLOADING = 'DOWNLOADING';\nvar NOTIFY_ONLY = 'NOTIFY_ONLY;'; // Suggested types\n\nvar SUGGESTED_TOP_SUBSCRIBED = 'top_subscribed';\nvar SUGGESTED_FEATURED = 'featured'; // util for creating reducers\n// based off of redux-actions\n// https://redux-actions.js.org/docs/api/handleAction.html#handleactions\n// eslint-disable-next-line import/prefer-default-export\n\nvar handleActions = function handleActions(actionMap, defaultState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = actionMap[action.type];\n\n if (handler) {\n var newState = handler(state, action);\n return Object.assign({}, state, newState);\n } // just return the original state if no handler\n // returning a copy here breaks redux-persist\n\n\n return state;\n };\n}; // \n\n\nvar defaultState = {\n enabledChannelNotifications: [],\n subscriptions: [],\n latest: {},\n unread: {},\n suggested: {},\n loading: false,\n viewMode: VIEW_ALL,\n loadingSuggested: false,\n firstRunCompleted: false,\n showSuggestedSubs: false\n};\nvar subscriptions = handleActions((_handleActions = {}, _defineProperty(_handleActions, CHANNEL_SUBSCRIBE, function (state, action) {\n var newSubscription = action.data;\n var newSubscriptions = state.subscriptions.slice();\n\n if (!newSubscriptions.some(function (sub) {\n return sub.uri === newSubscription.uri;\n })) {\n newSubscriptions.unshift(newSubscription);\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, CHANNEL_UNSUBSCRIBE, function (state, action) {\n var subscriptionToRemove = action.data;\n var newSubscriptions = state.subscriptions.slice().filter(function (subscription) {\n return subscription.channelName !== subscriptionToRemove.channelName;\n }); // Check if we need to remove it from the 'unread' state\n\n var unread = state.unread;\n\n if (unread[subscriptionToRemove.uri]) {\n delete unread[subscriptionToRemove.uri];\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, unread),\n subscriptions: newSubscriptions\n });\n}), _defineProperty(_handleActions, SET_SUBSCRIPTION_LATEST, function (state, action) {\n var _action$data = action.data,\n subscription = _action$data.subscription,\n uri = _action$data.uri;\n var newLatest = Object.assign({}, state.latest);\n newLatest[subscription.uri] = uri;\n return _objectSpread({}, state, {\n latest: newLatest\n });\n}), _defineProperty(_handleActions, UPDATE_SUBSCRIPTION_UNREADS, function (state, action) {\n var _action$data2 = action.data,\n channel = _action$data2.channel,\n uris = _action$data2.uris,\n type = _action$data2.type;\n return _objectSpread({}, state, {\n unread: _objectSpread({}, state.unread, _defineProperty({}, channel, {\n uris: uris,\n type: type\n }))\n });\n}), _defineProperty(_handleActions, REMOVE_SUBSCRIPTION_UNREADS, function (state, action) {\n var _action$data3 = action.data,\n channel = _action$data3.channel,\n uris = _action$data3.uris; // If no channel is passed in, remove all unreads\n\n var newUnread;\n\n if (channel) {\n newUnread = _objectSpread({}, state.unread);\n\n if (!uris) {\n delete newUnread[channel];\n } else {\n newUnread[channel].uris = uris;\n }\n } else {\n newUnread = {};\n }\n\n return _objectSpread({}, state, {\n unread: _objectSpread({}, newUnread)\n });\n}), _defineProperty(_handleActions, CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS, function (state, action) {\n var channelName = action.data;\n var newEnabledChannelNotifications = state.enabledChannelNotifications.slice();\n\n if (channelName && channelName.trim().length > 0 && newEnabledChannelNotifications.indexOf(channelName) === -1) {\n newEnabledChannelNotifications.push(channelName);\n }\n\n return _objectSpread({}, state, {\n enabledChannelNotifications: newEnabledChannelNotifications\n });\n}), _defineProperty(_handleActions, CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS, function (state, action) {\n var channelName = action.data;\n var newEnabledChannelNotifications = state.enabledChannelNotifications.slice();\n var index = newEnabledChannelNotifications.indexOf(channelName);\n\n if (index > -1) {\n newEnabledChannelNotifications.splice(index, 1);\n }\n\n return _objectSpread({}, state, {\n enabledChannelNotifications: newEnabledChannelNotifications\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_START, function (state) {\n return _objectSpread({}, state, {\n loading: true\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_FAIL, function (state) {\n return _objectSpread({}, state, {\n loading: false\n });\n}), _defineProperty(_handleActions, FETCH_SUBSCRIPTIONS_SUCCESS, function (state, action) {\n return _objectSpread({}, state, {\n loading: false,\n subscriptions: action.data\n });\n}), _defineProperty(_handleActions, SET_VIEW_MODE, function (state, action) {\n return _objectSpread({}, state, {\n viewMode: action.data\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_START, function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: true\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS, function (state, action) {\n return _objectSpread({}, state, {\n suggested: action.data,\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, GET_SUGGESTED_SUBSCRIPTIONS_FAIL, function (state) {\n return _objectSpread({}, state, {\n loadingSuggested: false\n });\n}), _defineProperty(_handleActions, SUBSCRIPTION_FIRST_RUN_COMPLETED, function (state) {\n return _objectSpread({}, state, {\n firstRunCompleted: true\n });\n}), _defineProperty(_handleActions, VIEW_SUGGESTED_SUBSCRIPTIONS, function (state) {\n return _objectSpread({}, state, {\n showSuggestedSubs: true\n });\n}), _defineProperty(_handleActions, lbryRedux.ACTIONS.USER_STATE_POPULATE, function (state, action) {\n var subscriptions = action.data.subscriptions;\n var newSubscriptions;\n\n if (!subscriptions) {\n newSubscriptions = state.subscriptions;\n } else {\n var parsedSubscriptions = subscriptions.map(function (uri) {\n var _lbryRedux$parseURI = lbryRedux.parseURI(uri),\n channelName = _lbryRedux$parseURI.channelName;\n\n return {\n uri: uri,\n channelName: \"@\".concat(channelName)\n };\n });\n\n if (!state.subscriptions || !state.subscriptions.length) {\n newSubscriptions = parsedSubscriptions;\n } else {\n var map = {};\n newSubscriptions = parsedSubscriptions.concat(state.subscriptions).filter(function (sub) {\n return map[sub.uri] ? false : map[sub.uri] = true;\n }, {});\n }\n }\n\n return _objectSpread({}, state, {\n subscriptions: newSubscriptions\n });\n}), _handleActions), defaultState);\n\nfunction swapKeyAndValue(dict) {\n var ret = {}; // eslint-disable-next-line no-restricted-syntax\n\n for (var key in dict) {\n if (dict.hasOwnProperty(key)) {\n ret[dict[key]] = key;\n }\n }\n\n return ret;\n}\n\nvar selectState = function selectState(state) {\n return state.subscriptions || {};\n}; // Returns the list of channel uris a user is subscribed to\n\n\nvar selectSubscriptions = reselect.createSelector(selectState, function (state) {\n return state.subscriptions;\n}); // Fetching list of users subscriptions\n\nvar selectIsFetchingSubscriptions = reselect.createSelector(selectState, function (state) {\n return state.loading;\n}); // The current view mode on the subscriptions page\n\nvar selectViewMode = reselect.createSelector(selectState, function (state) {\n return state.viewMode;\n}); // Suggested subscriptions from internal apis\n\nvar selectSuggested = reselect.createSelector(selectState, function (state) {\n return state.suggested;\n});\nvar selectIsFetchingSuggested = reselect.createSelector(selectState, function (state) {\n return state.loadingSuggested;\n});\nvar selectSuggestedChannels = reselect.createSelector(selectSubscriptions, selectSuggested, function (userSubscriptions, suggested) {\n if (!suggested) {\n return null;\n } // Swap the key/value because we will use the uri for everything, this just makes it easier\n // suggested is returned from the api with the form:\n // {\n // featured: { \"Channel label\": uri, ... },\n // top_subscribed: { \"@channel\": uri, ... }\n // top_bid: { \"@channel\": uri, ... }\n // }\n // To properly compare the suggested subscriptions from our current subscribed channels\n // We only care about the uri, not the label\n // We also only care about top_subscribed and featured\n // top_bid could just be porn or a channel with no content\n\n\n var topSubscribedSuggestions = swapKeyAndValue(suggested[SUGGESTED_TOP_SUBSCRIBED]);\n var featuredSuggestions = swapKeyAndValue(suggested[SUGGESTED_FEATURED]); // Make sure there are no duplicates\n // If a uri isn't already in the suggested object, add it\n\n var suggestedChannels = _objectSpread({}, topSubscribedSuggestions);\n\n Object.keys(featuredSuggestions).forEach(function (uri) {\n if (!suggestedChannels[uri]) {\n var channelLabel = featuredSuggestions[uri];\n suggestedChannels[uri] = channelLabel;\n }\n });\n userSubscriptions.forEach(function (_ref2) {\n var uri = _ref2.uri; // Note to passer bys:\n // Maybe we should just remove the `lbry://` prefix from subscription uris\n // Most places don't store them like that\n\n var subscribedUri = uri.slice('lbry://'.length);\n\n if (suggestedChannels[subscribedUri]) {\n delete suggestedChannels[subscribedUri];\n }\n });\n return Object.keys(suggestedChannels).map(function (uri) {\n return {\n uri: uri,\n label: suggestedChannels[uri]\n };\n }).slice(0, 5);\n});\nvar selectFirstRunCompleted = reselect.createSelector(selectState, function (state) {\n return state.firstRunCompleted;\n});\nvar selectShowSuggestedSubs = reselect.createSelector(selectState, function (state) {\n return state.showSuggestedSubs;\n}); // Fetching any claims that are a part of a users subscriptions\n\nvar selectSubscriptionsBeingFetched = reselect.createSelector(selectSubscriptions, lbryRedux.selectAllFetchingChannelClaims, function (subscriptions, fetchingChannelClaims) {\n var fetchingSubscriptionMap = {};\n subscriptions.forEach(function (sub) {\n var isFetching = fetchingChannelClaims && fetchingChannelClaims[sub.uri];\n\n if (isFetching) {\n fetchingSubscriptionMap[sub.uri] = true;\n }\n });\n return fetchingSubscriptionMap;\n});\nvar selectUnreadByChannel = reselect.createSelector(selectState, function (state) {\n return state.unread;\n}); // Returns the current total of unread subscriptions\n\nvar selectUnreadAmount = reselect.createSelector(selectUnreadByChannel, function (unreadByChannel) {\n var unreadChannels = Object.keys(unreadByChannel);\n var badges = 0;\n\n if (!unreadChannels.length) {\n return badges;\n }\n\n unreadChannels.forEach(function (channel) {\n badges += unreadByChannel[channel].uris.length;\n });\n return badges;\n}); // Returns the uris with channels as an array with the channel with the newest content first\n// If you just want the `unread` state, use selectUnread\n\nvar selectUnreadSubscriptions = reselect.createSelector(selectUnreadAmount, selectUnreadByChannel, lbryRedux.selectClaimsByUri, function (unreadAmount, unreadByChannel, claimsByUri) {\n // determine which channel has the newest content\n var unreadList = [];\n\n if (!unreadAmount) {\n return unreadList;\n }\n\n var channelUriList = Object.keys(unreadByChannel); // There is only one channel with unread notifications\n\n if (unreadAmount === 1) {\n channelUriList.forEach(function (channel) {\n var unreadChannel = {\n channel: channel,\n uris: unreadByChannel[channel].uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n }\n\n channelUriList.sort(function (channel1, channel2) {\n var latestUriFromChannel1 = unreadByChannel[channel1].uris[0];\n var latestClaimFromChannel1 = claimsByUri[latestUriFromChannel1] || {};\n var latestUriFromChannel2 = unreadByChannel[channel2].uris[0];\n var latestClaimFromChannel2 = claimsByUri[latestUriFromChannel2] || {};\n var latestHeightFromChannel1 = latestClaimFromChannel1.height || 0;\n var latestHeightFromChannel2 = latestClaimFromChannel2.height || 0;\n\n if (latestHeightFromChannel1 !== latestHeightFromChannel2) {\n return latestHeightFromChannel2 - latestHeightFromChannel1;\n }\n\n return 0;\n }).forEach(function (channel) {\n var unreadSubscription = unreadByChannel[channel];\n var unreadChannel = {\n channel: channel,\n uris: unreadSubscription.uris\n };\n unreadList.push(unreadChannel);\n });\n return unreadList;\n}); // Returns all unread subscriptions for a uri passed in\n\nvar makeSelectUnreadByChannel = function makeSelectUnreadByChannel(uri) {\n return reselect.createSelector(selectUnreadByChannel, function (unread) {\n return unread[uri];\n });\n}; // Returns the first page of claims for every channel a user is subscribed to\n\n\nvar selectSubscriptionClaims = reselect.createSelector(lbryRedux.selectAllClaimsByChannel, lbryRedux.selectClaimsById, selectSubscriptions, selectUnreadByChannel, function (channelIds, allClaims, savedSubscriptions, unreadByChannel) {\n // no claims loaded yet\n if (!Object.keys(channelIds).length) {\n return [];\n }\n\n var fetchedSubscriptions = [];\n savedSubscriptions.forEach(function (subscription) {\n var channelClaims = []; // if subscribed channel has content\n\n if (channelIds[subscription.uri] && channelIds[subscription.uri]['1']) {\n // This will need to be more robust, we will want to be able to load more than the first page\n // Strip out any ids that will be shown as notifications\n var pageOneChannelIds = channelIds[subscription.uri]['1']; // we have the channel ids and the corresponding claims\n // loop over the list of ids and grab the claim\n\n pageOneChannelIds.forEach(function (id) {\n var grabbedClaim = allClaims[id];\n\n if (unreadByChannel[subscription.uri] && unreadByChannel[subscription.uri].uris.some(function (uri) {\n return uri.includes(id);\n })) {\n grabbedClaim.isNew = true;\n }\n\n channelClaims = channelClaims.concat([grabbedClaim]);\n });\n }\n\n fetchedSubscriptions = fetchedSubscriptions.concat(channelClaims);\n });\n return fetchedSubscriptions;\n}); // Returns true if a user is subscribed to the channel associated with the uri passed in\n// Accepts content or channel uris\n\nvar makeSelectIsSubscribed = function makeSelectIsSubscribed(uri) {\n return reselect.createSelector(selectSubscriptions, lbryRedux.makeSelectChannelForClaimUri(uri, true), function (subscriptions, channelUri) {\n if (channelUri) {\n return subscriptions.some(function (sub) {\n return sub.uri === channelUri;\n });\n } // If we couldn't get a channel uri from the claim uri, the uri passed in might be a channel already\n\n\n var _lbryRedux$parseURI2 = lbryRedux.parseURI(uri),\n isChannel = _lbryRedux$parseURI2.isChannel;\n\n if (isChannel) {\n var uriWithPrefix = uri.startsWith('lbry://') ? uri : \"lbry://\".concat(uri);\n return subscriptions.some(function (sub) {\n return sub.uri === uriWithPrefix;\n });\n }\n\n return false;\n });\n};\n\nvar makeSelectIsNew = function makeSelectIsNew(uri) {\n return reselect.createSelector(makeSelectIsSubscribed(uri), lbryRedux.makeSelectChannelForClaimUri(uri), selectUnreadByChannel, function (isSubscribed, channel, unreadByChannel) {\n if (!isSubscribed) {\n return false;\n }\n\n var unreadForChannel = unreadByChannel[\"lbry://\".concat(channel)];\n\n if (unreadForChannel) {\n return unreadForChannel.uris.includes(uri);\n }\n\n return false; // If they are subscribed, check to see if this uri is in the list of unreads\n });\n};\n\nvar selectEnabledChannelNotifications = reselect.createSelector(selectState, function (state) {\n return state.enabledChannelNotifications;\n});\nvar persistShape = {\n version: '0',\n shared: {}\n};\n\nfunction userStateSyncMiddleware() {\n return function (_ref3) {\n var getState = _ref3.getState;\n return function (next) {\n return function (action) {\n if (action.type === CHANNEL_SUBSCRIBE || action.type === CHANNEL_UNSUBSCRIBE || action.type === lbryRedux.ACTIONS.TOGGLE_TAG_FOLLOW) {\n var newShape = _objectSpread({}, persistShape);\n\n var state = getState();\n\n var _subscriptions = selectSubscriptions(state).map(function (_ref4) {\n var uri = _ref4.uri;\n return uri;\n });\n\n var tags = lbryRedux.selectFollowedTags(state);\n newShape.shared.subscriptions = _subscriptions;\n newShape.shared.tags = tags;\n var uri = action.data.uri;\n\n if (action.type === CHANNEL_SUBSCRIBE) {\n var newSubscriptions = _subscriptions.slice();\n\n newSubscriptions.push(uri);\n newShape.shared.subscriptions = newSubscriptions;\n } else if (action.type === CHANNEL_UNSUBSCRIBE) {\n var _newSubscriptions = _subscriptions.slice();\n\n _newSubscriptions = _newSubscriptions.filter(function (subscribedUri) {\n return subscribedUri !== uri;\n });\n newShape.shared.subscriptions = _newSubscriptions;\n } else {\n var toggledTag = action.data.name;\n var followedTags = lbryRedux.selectFollowedTags(state).map(function (_ref5) {\n var name = _ref5.name;\n return name;\n });\n var isFollowing = lbryRedux.makeSelectIsFollowingTag(toggledTag)(state);\n var newTags = followedTags.slice();\n\n if (isFollowing) {\n newTags = newTags.filter(function (followedTag) {\n return followedTag.name !== toggledTag;\n });\n } else {\n newTags.push(toggledTag);\n }\n\n newShape.shared.tags = newTags;\n }\n\n Lbryio.call('user_settings', 'set', {\n settings: newShape\n });\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar apiBaseUrl = 'https://www.transifex.com/api/2/project';\nvar resource = 'app-strings';\n\nfunction doTransifexUpload(contents, project, token, success, fail) {\n var url = \"\".concat(apiBaseUrl, \"/\").concat(project, \"/resources/\");\n var updateUrl = \"\".concat(apiBaseUrl, \"/\").concat(project, \"/resource/\").concat(resource, \"/content/\");\n var headers = {\n Authorization: \"Basic \".concat(Buffer.from(\"api:\".concat(token)).toString('base64')),\n 'Content-Type': 'application/json'\n };\n var req = {\n accept_translations: true,\n i18n_type: 'KEYVALUEJSON',\n name: resource,\n slug: resource,\n content: contents\n };\n\n function handleResponse(text) {\n var json;\n\n try {\n // transifex api returns Python dicts for some reason.\n // Any way to get the api to return valid JSON?\n json = JSON.parse(text);\n } catch (e) {// ignore\n }\n\n if (success) {\n success(json || text);\n }\n }\n\n function handleError(err) {\n if (fail) {\n fail(err.message ? err.message : 'Could not upload strings resource to Transifex');\n }\n } // check if the resource exists\n\n\n fetch(updateUrl, {\n headers: headers\n }).then(function (response) {\n return response.json();\n }).then(function () {\n // perform an update\n fetch(updateUrl, {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify({\n content: contents\n })\n }).then(function (response) {\n if (response.status !== 200 && response.status !== 201) {\n throw new Error('failed to update transifex');\n }\n\n return response.text();\n }).then(handleResponse)[\"catch\"](handleError);\n })[\"catch\"](function () {\n // resource doesn't exist, create a fresh resource\n fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(req)\n }).then(function (response) {\n if (response.status !== 200 && response.status !== 201) {\n throw new Error('failed to upload to transifex');\n }\n\n return response.text();\n }).then(handleResponse)[\"catch\"](handleError);\n });\n}\n\nfunction doGenerateAuthToken(installationId) {\n return function (dispatch) {\n dispatch({\n type: GENERATE_AUTH_TOKEN_STARTED\n });\n Lbryio.call('user', 'new', {\n auth_token: '',\n language: 'en',\n app_id: installationId\n }, 'post').then(function (response) {\n if (!response.auth_token) {\n dispatch({\n type: GENERATE_AUTH_TOKEN_FAILURE\n });\n } else {\n dispatch({\n type: GENERATE_AUTH_TOKEN_SUCCESS,\n data: {\n authToken: response.auth_token\n }\n });\n }\n })[\"catch\"](function () {\n dispatch({\n type: GENERATE_AUTH_TOKEN_FAILURE\n });\n });\n };\n}\n\nvar selectState$1 = function selectState$1(state) {\n return state.rewards || {};\n};\n\nvar selectUnclaimedRewardsByType = reselect.createSelector(selectState$1, function (state) {\n return state.unclaimedRewardsByType;\n});\nvar selectClaimedRewardsById = reselect.createSelector(selectState$1, function (state) {\n return state.claimedRewardsById;\n});\nvar selectClaimedRewards = reselect.createSelector(selectClaimedRewardsById, function (byId) {\n return Object.values(byId) || [];\n});\nvar selectClaimedRewardsByTransactionId = reselect.createSelector(selectClaimedRewards, function (rewards) {\n return rewards.reduce(function (mapParam, reward) {\n var map = mapParam;\n map[reward.transaction_id] = reward;\n return map;\n }, {});\n});\nvar selectUnclaimedRewards = reselect.createSelector(selectState$1, function (state) {\n return state.unclaimedRewards;\n});\nvar selectFetchingRewards = reselect.createSelector(selectState$1, function (state) {\n return !!state.fetching;\n});\nvar selectUnclaimedRewardValue = reselect.createSelector(selectUnclaimedRewards, function (rewards) {\n return rewards.reduce(function (sum, reward) {\n return sum + reward.reward_amount;\n }, 0);\n});\nvar selectClaimsPendingByType = reselect.createSelector(selectState$1, function (state) {\n return state.claimPendingByType;\n});\n\nvar selectIsClaimRewardPending = function selectIsClaimRewardPending(state, props) {\n return selectClaimsPendingByType(state, props)[props.reward_type];\n};\n\nvar makeSelectIsRewardClaimPending = function makeSelectIsRewardClaimPending() {\n return reselect.createSelector(selectIsClaimRewardPending, function (isClaiming) {\n return isClaiming;\n });\n};\n\nvar selectClaimErrorsByType = reselect.createSelector(selectState$1, function (state) {\n return state.claimErrorsByType;\n});\n\nvar selectClaimRewardError = function selectClaimRewardError(state, props) {\n return selectClaimErrorsByType(state, props)[props.reward_type];\n};\n\nvar makeSelectClaimRewardError = function makeSelectClaimRewardError() {\n return reselect.createSelector(selectClaimRewardError, function (errorMessage) {\n return errorMessage;\n });\n};\n\nvar selectRewardByType = function selectRewardByType(state, rewardType) {\n return selectUnclaimedRewards(state).find(function (reward) {\n return reward.reward_type === rewardType;\n });\n};\n\nvar makeSelectRewardByType = function makeSelectRewardByType() {\n return reselect.createSelector(selectRewardByType, function (reward) {\n return reward;\n });\n};\n\nvar selectRewardByClaimCode = function selectRewardByClaimCode(state, claimCode) {\n return selectUnclaimedRewards(state).find(function (reward) {\n return reward.claim_code === claimCode;\n });\n};\n\nvar makeSelectRewardByClaimCode = function makeSelectRewardByClaimCode() {\n return reselect.createSelector(selectRewardByClaimCode, function (reward) {\n return reward;\n });\n};\n\nvar makeSelectRewardAmountByType = function makeSelectRewardAmountByType() {\n return reselect.createSelector(selectRewardByType, function (reward) {\n return reward ? reward.reward_amount : 0;\n });\n};\n\nvar selectRewardContentClaimIds = reselect.createSelector(selectState$1, function (state) {\n return state.rewardedContentClaimIds;\n});\nvar selectReferralReward = reselect.createSelector(selectUnclaimedRewards, function (unclaimedRewards) {\n return unclaimedRewards.filter(function (reward) {\n return reward.reward_type === rewards.TYPE_REFERRAL;\n })[0];\n});\n\nvar selectState$2 = function selectState$2(state) {\n return state.user || {};\n};\n\nvar selectAuthenticationIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.authenticationIsPending;\n});\nvar selectUserIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.userIsPending;\n});\nvar selectUser = reselect.createSelector(selectState$2, function (state) {\n return state.user;\n});\nvar selectEmailAlreadyExists = reselect.createSelector(selectState$2, function (state) {\n return state.emailAlreadyExists;\n});\nvar selectResendingVerificationEmail = reselect.createSelector(selectState$2, function (state) {\n return state.resendingVerificationEmail;\n});\nvar selectUserEmail = reselect.createSelector(selectUser, function (user) {\n return user ? user.primary_email : null;\n});\nvar selectUserPhone = reselect.createSelector(selectUser, function (user) {\n return user ? user.phone_number : null;\n});\nvar selectUserCountryCode = reselect.createSelector(selectUser, function (user) {\n return user ? user.country_code : null;\n});\nvar selectEmailToVerify = reselect.createSelector(selectState$2, selectUserEmail, function (state, userEmail) {\n return state.emailToVerify || userEmail;\n});\nvar selectPhoneToVerify = reselect.createSelector(selectState$2, selectUserPhone, function (state, userPhone) {\n return state.phoneToVerify || userPhone;\n});\nvar selectYoutubeChannels = reselect.createSelector(selectUser, function (user) {\n return user ? user.youtube_channels : null;\n});\nvar selectUserIsRewardApproved = reselect.createSelector(selectUser, function (user) {\n return user && user.is_reward_approved;\n});\nvar selectEmailNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.emailNewIsPending;\n});\nvar selectEmailNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.emailNewErrorMessage;\n});\nvar selectPhoneNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.phoneNewErrorMessage;\n});\nvar selectEmailVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.emailVerifyIsPending;\n});\nvar selectEmailVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.emailVerifyErrorMessage;\n});\nvar selectPhoneNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.phoneNewIsPending;\n});\nvar selectPhoneVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.phoneVerifyIsPending;\n});\nvar selectPhoneVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.phoneVerifyErrorMessage;\n});\nvar selectIdentityVerifyIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.identityVerifyIsPending;\n});\nvar selectIdentityVerifyErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.identityVerifyErrorMessage;\n});\nvar selectUserVerifiedEmail = reselect.createSelector(selectUser, function (user) {\n return user && user.has_verified_email;\n});\nvar selectUserIsVerificationCandidate = reselect.createSelector(selectUser, function (user) {\n return user && (!user.has_verified_email || !user.is_identity_verified);\n});\nvar selectAccessToken = reselect.createSelector(selectState$2, function (state) {\n return state.accessToken;\n});\nvar selectUserInviteStatusIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.inviteStatusIsPending;\n});\nvar selectUserInvitesRemaining = reselect.createSelector(selectState$2, function (state) {\n return state.invitesRemaining;\n});\nvar selectUserInvitees = reselect.createSelector(selectState$2, function (state) {\n return state.invitees;\n});\nvar selectUserInviteStatusFailed = reselect.createSelector(selectUserInvitesRemaining, function () {\n return selectUserInvitesRemaining === null;\n});\nvar selectUserInviteNewIsPending = reselect.createSelector(selectState$2, function (state) {\n return state.inviteNewIsPending;\n});\nvar selectUserInviteNewErrorMessage = reselect.createSelector(selectState$2, function (state) {\n return state.inviteNewErrorMessage;\n});\nvar selectUserInviteReferralLink = reselect.createSelector(selectState$2, function (state) {\n return state.referralLink;\n});\nvar selectUserInviteReferralCode = reselect.createSelector(selectState$2, function (state) {\n return state.referralCode ? state.referralCode[0] : '';\n});\nvar selectYouTubeImportPending = reselect.createSelector(selectState$2, function (state) {\n return state.youtubeChannelImportPending;\n});\nvar selectYouTubeImportError = reselect.createSelector(selectState$2, function (state) {\n return state.youtubeChannelImportErrorMessage;\n});\nvar selectSetReferrerPending = reselect.createSelector(selectState$2, function (state) {\n return state.referrerSetIsPending;\n});\nvar selectSetReferrerError = reselect.createSelector(selectState$2, function (state) {\n return state.referrerSetError;\n});\nvar selectYouTubeImportVideosComplete = reselect.createSelector(selectState$2, function (state) {\n var total = state.youtubeChannelImportTotal;\n var complete = state.youtubeChannelImportComplete || 0;\n\n if (total) {\n return [complete, total];\n }\n});\n\nfunction doFetchInviteStatus() {\n return function (dispatch) {\n dispatch({\n type: USER_INVITE_STATUS_FETCH_STARTED\n });\n Promise.all([Lbryio.call('user', 'invite_status'), Lbryio.call('user_referral_code', 'list')]).then(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n status = _ref7[0],\n code = _ref7[1];\n\n dispatch(doRewardList());\n dispatch({\n type: USER_INVITE_STATUS_FETCH_SUCCESS,\n data: {\n invitesRemaining: status.invites_remaining ? status.invites_remaining : 0,\n invitees: status.invitees,\n referralLink: \"\".concat(Lbryio.CONNECTION_STRING, \"user/refer?r=\").concat(code),\n referralCode: code\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_INVITE_STATUS_FETCH_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doInstallNew(appVersion) {\n var os = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var firebaseToken = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var callbackForUsersWhoAreSharingData = arguments.length > 3 ? arguments[3] : undefined;\n var payload = {\n app_version: appVersion\n };\n\n if (firebaseToken) {\n payload.firebase_token = firebaseToken;\n }\n\n lbryRedux.Lbry.status().then(function (status) {\n payload.app_id = status.installation_id;\n payload.node_id = status.lbry_id;\n lbryRedux.Lbry.version().then(function (version) {\n payload.daemon_version = version.lbrynet_version;\n payload.operating_system = os || version.os_system;\n payload.platform = version.platform;\n Lbryio.call('install', 'new', payload);\n\n if (callbackForUsersWhoAreSharingData) {\n callbackForUsersWhoAreSharingData(status);\n }\n });\n });\n}\n\nfunction doInstallNewWithParams(appVersion, installationId, nodeId, lbrynetVersion, os, platform) {\n var firebaseToken = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n return function (dispatch) {\n var payload = {\n app_version: appVersion\n };\n\n if (firebaseToken) {\n payload.firebase_token = firebaseToken;\n }\n\n payload.app_id = installationId;\n payload.node_id = nodeId;\n payload.daemon_version = lbrynetVersion;\n payload.operating_system = os;\n payload.platform = platform;\n Lbryio.call('install', 'new', payload);\n };\n} // TODO: Call doInstallNew separately so we don't have to pass appVersion and os_system params?\n\n\nfunction doAuthenticate(appVersion) {\n var os = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var firebaseToken = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var shareUsageData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var callbackForUsersWhoAreSharingData = arguments.length > 4 ? arguments[4] : undefined;\n var callInstall = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n return function (dispatch) {\n dispatch({\n type: AUTHENTICATION_STARTED\n });\n Lbryio.authenticate().then(function (user) {\n Lbryio.getAuthToken().then(function (token) {\n dispatch({\n type: AUTHENTICATION_SUCCESS,\n data: {\n user: user,\n accessToken: token\n }\n });\n\n if (shareUsageData) {\n dispatch(doRewardList());\n dispatch(doFetchInviteStatus());\n\n if (callInstall) {\n doInstallNew(appVersion, os, firebaseToken, callbackForUsersWhoAreSharingData);\n }\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: AUTHENTICATION_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserFetch() {\n return function (dispatch) {\n dispatch({\n type: USER_FETCH_STARTED\n });\n Lbryio.getCurrentUser().then(function (user) {\n dispatch(doRewardList());\n dispatch({\n type: USER_FETCH_SUCCESS,\n data: {\n user: user\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_FETCH_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserCheckEmailVerified() {\n // This will happen in the background so we don't need loading booleans\n return function (dispatch) {\n Lbryio.getCurrentUser().then(function (user) {\n if (user.has_verified_email) {\n dispatch(doRewardList());\n dispatch({\n type: USER_FETCH_SUCCESS,\n data: {\n user: user\n }\n });\n }\n });\n };\n}\n\nfunction doUserPhoneReset() {\n return {\n type: USER_PHONE_RESET\n };\n}\n\nfunction doUserPhoneNew(phone, countryCode) {\n return function (dispatch) {\n dispatch({\n type: USER_PHONE_NEW_STARTED,\n data: {\n phone: phone,\n country_code: countryCode\n }\n });\n\n var success = function success() {\n dispatch({\n type: USER_PHONE_NEW_SUCCESS,\n data: {\n phone: phone\n }\n });\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_PHONE_NEW_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user', 'phone_number_new', {\n phone_number: phone,\n country_code: countryCode\n }, 'post').then(success, failure);\n };\n}\n\nfunction doUserPhoneVerifyFailure(error) {\n return {\n type: USER_PHONE_VERIFY_FAILURE,\n data: {\n error: error\n }\n };\n}\n\nfunction doUserPhoneVerify(verificationCode) {\n return function (dispatch, getState) {\n var phoneNumber = selectPhoneToVerify(getState());\n var countryCode = selectUserCountryCode(getState());\n dispatch({\n type: USER_PHONE_VERIFY_STARTED,\n code: verificationCode\n });\n Lbryio.call('user', 'phone_number_confirm', {\n verification_code: verificationCode,\n phone_number: phoneNumber,\n country_code: countryCode\n }, 'post').then(function (user) {\n if (user.is_identity_verified) {\n dispatch({\n type: USER_PHONE_VERIFY_SUCCESS,\n data: {\n user: user\n }\n });\n dispatch(doClaimRewardType(rewards.TYPE_NEW_USER));\n }\n })[\"catch\"](function (error) {\n return dispatch(doUserPhoneVerifyFailure(error));\n });\n };\n}\n\nfunction doUserEmailToVerify(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_VERIFY_SET,\n data: {\n email: email\n }\n });\n };\n}\n\nfunction doUserEmailNew(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_NEW_STARTED,\n email: email\n });\n\n var success = function success() {\n dispatch({\n type: USER_EMAIL_NEW_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(doUserFetch());\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_EMAIL_NEW_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user_email', 'new', {\n email: email,\n send_verification_email: true\n }, 'post')[\"catch\"](function (error) {\n if (error.response && error.response.status === 409) {\n dispatch({\n type: USER_EMAIL_NEW_EXISTS\n });\n return Lbryio.call('user_email', 'resend_token', {\n email: email,\n only_if_expired: true\n }, 'post').then(success, failure);\n }\n\n throw error;\n }).then(success, failure);\n };\n}\n\nfunction doUserResendVerificationEmail(email) {\n return function (dispatch) {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_STARTED\n });\n\n var success = function success() {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_SUCCESS\n });\n };\n\n var failure = function failure(error) {\n dispatch({\n type: USER_EMAIL_VERIFY_RETRY_FAILURE,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('user_email', 'resend_token', {\n email: email\n }, 'post')[\"catch\"](function (error) {\n if (error.response && error.response.status === 409) {\n throw error;\n }\n }).then(success, failure);\n };\n}\n\nfunction doUserEmailVerifyFailure(error) {\n return {\n type: USER_EMAIL_VERIFY_FAILURE,\n data: {\n error: error\n }\n };\n}\n\nfunction doUserEmailVerify(verificationToken, recaptcha) {\n return function (dispatch, getState) {\n var email = selectEmailToVerify(getState());\n dispatch({\n type: USER_EMAIL_VERIFY_STARTED,\n code: verificationToken,\n recaptcha: recaptcha\n });\n Lbryio.call('user_email', 'confirm', {\n verification_token: verificationToken,\n email: email,\n recaptcha: recaptcha\n }, 'post').then(function (userEmail) {\n if (userEmail.is_verified) {\n dispatch({\n type: USER_EMAIL_VERIFY_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(doUserFetch());\n } else {\n throw new Error('Your email is still not verified.'); // shouldn't happen\n }\n })[\"catch\"](function (error) {\n return dispatch(doUserEmailVerifyFailure(error));\n });\n };\n}\n\nfunction doFetchAccessToken() {\n return function (dispatch) {\n var success = function success(token) {\n return dispatch({\n type: FETCH_ACCESS_TOKEN_SUCCESS,\n data: {\n token: token\n }\n });\n };\n\n Lbryio.getAuthToken().then(success);\n };\n}\n\nfunction doUserIdentityVerify(stripeToken) {\n return function (dispatch) {\n dispatch({\n type: USER_IDENTITY_VERIFY_STARTED,\n token: stripeToken\n });\n Lbryio.call('user', 'verify_identity', {\n stripe_token: stripeToken\n }, 'post').then(function (user) {\n if (user.is_identity_verified) {\n dispatch({\n type: USER_IDENTITY_VERIFY_SUCCESS,\n data: {\n user: user\n }\n });\n dispatch(doClaimRewardType(rewards.TYPE_NEW_USER));\n } else {\n throw new Error('Your identity is still not verified. This should not happen.'); // shouldn't happen\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_IDENTITY_VERIFY_FAILURE,\n data: {\n error: error.toString()\n }\n });\n });\n };\n}\n\nfunction doUserInviteNew(email) {\n return function (dispatch) {\n dispatch({\n type: USER_INVITE_NEW_STARTED\n });\n return Lbryio.call('user', 'invite', {\n email: email\n }, 'post').then(function (success) {\n dispatch({\n type: USER_INVITE_NEW_SUCCESS,\n data: {\n email: email\n }\n });\n dispatch(lbryRedux.doToast({\n message: __(\"Invite sent to \".concat(email))\n }));\n dispatch(doFetchInviteStatus());\n return success;\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_INVITE_NEW_FAILURE,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doUserSetReferrerReset() {\n return function (dispatch) {\n dispatch({\n type: USER_SET_REFERRER_RESET\n });\n };\n}\n\nfunction doUserSetReferrer(referrer, shouldClaim) {\n return function _callee(dispatch, getState) {\n var claim, referrerCode, _lbryRedux$parseURI3, isChannel, uri, response;\n\n return regeneratorRuntime.async(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n dispatch({\n type: USER_SET_REFERRER_STARTED\n });\n _lbryRedux$parseURI3 = lbryRedux.parseURI(referrer), isChannel = _lbryRedux$parseURI3.isChannel;\n\n if (!isChannel) {\n _context.next = 17;\n break;\n }\n\n uri = \"lbry://\".concat(referrer);\n claim = lbryRedux.makeSelectClaimForUri(uri)(getState());\n\n if (claim) {\n _context.next = 16;\n break;\n }\n\n _context.prev = 6;\n _context.next = 9;\n return regeneratorRuntime.awrap(lbryRedux.Lbry.resolve({\n urls: [uri]\n }));\n\n case 9:\n response = _context.sent;\n claim = response && response[uri];\n _context.next = 16;\n break;\n\n case 13:\n _context.prev = 13;\n _context.t0 = _context[\"catch\"](6);\n dispatch({\n type: USER_SET_REFERRER_FAILURE,\n data: {\n error: _context.t0\n }\n });\n\n case 16:\n referrerCode = claim && claim.permanent_url && claim.permanent_url.replace('lbry://', '');\n\n case 17:\n if (!referrerCode) {\n referrerCode = referrer;\n }\n\n _context.prev = 18;\n _context.next = 21;\n return regeneratorRuntime.awrap(Lbryio.call('user', 'referral', {\n referrer: referrerCode\n }, 'post'));\n\n case 21:\n dispatch({\n type: USER_SET_REFERRER_SUCCESS\n });\n\n if (shouldClaim) {\n dispatch(doClaimRewardType(rewards.TYPE_REFEREE));\n dispatch(doUserFetch());\n } else {\n dispatch(doUserFetch());\n }\n\n _context.next = 28;\n break;\n\n case 25:\n _context.prev = 25;\n _context.t1 = _context[\"catch\"](18);\n dispatch({\n type: USER_SET_REFERRER_FAILURE,\n data: {\n error: _context.t1\n }\n });\n\n case 28:\n case \"end\":\n return _context.stop();\n }\n }\n }, null, null, [[6, 13], [18, 25]]);\n };\n}\n\nfunction doClaimYoutubeChannels() {\n return function (dispatch) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_STARTED\n });\n var transferResponse;\n return lbryRedux.Lbry.address_list({\n page: 1,\n page_size: 99999\n }).then(function (addressList) {\n return addressList.items.sort(function (a, b) {\n return a.used_times - b.used_times;\n })[0];\n }).then(function (address) {\n return Lbryio.call('yt', 'transfer', {\n address: address.address,\n public_key: address.pubkey\n }).then(function (response) {\n if (response && response.length) {\n transferResponse = response;\n return Promise.all(response.map(function (channelMeta) {\n if (channelMeta && channelMeta.channel && channelMeta.channel.channel_certificate) {\n return lbryRedux.Lbry.channel_import({\n channel_data: channelMeta.channel.channel_certificate\n });\n }\n\n return null;\n })).then(function () {\n var actions = [{\n type: USER_YOUTUBE_IMPORT_SUCCESS,\n data: transferResponse\n }];\n actions.push(doUserFetch());\n actions.push(lbryRedux.doFetchChannelListMine());\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n });\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_FAILURE,\n data: String(error)\n });\n });\n };\n}\n\nfunction doCheckYoutubeTransfer() {\n return function (dispatch) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_STARTED\n });\n return Lbryio.call('yt', 'transfer').then(function (response) {\n if (response && response.length) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_SUCCESS,\n data: response\n });\n } else {\n throw new Error();\n }\n })[\"catch\"](function (error) {\n dispatch({\n type: USER_YOUTUBE_IMPORT_FAILURE,\n data: String(error)\n });\n });\n };\n}\n\nfunction doRewardList() {\n return function (dispatch) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_STARTED\n });\n Lbryio.call('reward', 'list', {\n multiple_rewards_per_type: true\n }).then(function (userRewards) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED,\n data: {\n userRewards: userRewards\n }\n });\n })[\"catch\"](function () {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED,\n data: {\n userRewards: []\n }\n });\n });\n };\n}\n\nfunction doClaimRewardType(rewardType) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function (dispatch, getState) {\n var state = getState();\n var userIsRewardApproved = selectUserIsRewardApproved(state);\n var unclaimedRewards = selectUnclaimedRewards(state);\n var reward = rewardType === rewards.TYPE_REWARD_CODE || rewardType === rewards.TYPE_NEW_ANDROID ? {\n reward_type: rewards.TYPE_REWARD_CODE\n } : unclaimedRewards.find(function (ur) {\n return ur.reward_type === rewardType;\n }); // Try to claim the email reward right away, even if we haven't called reward_list yet\n\n if (rewardType !== rewards.TYPE_REWARD_CODE || rewardType !== rewards.TYPE_CONFIRM_EMAIL || rewardType !== rewards.TYPE_DAILY_VIEW || rewardType !== rewards.TYPE_NEW_ANDROID) {\n if (!reward || reward.transaction_id) {\n // already claimed or doesn't exist, do nothing\n return;\n }\n }\n\n if (!userIsRewardApproved && rewardType !== rewards.TYPE_CONFIRM_EMAIL && rewardType !== rewards.TYPE_REWARD_CODE && rewardType !== rewards.TYPE_NEW_ANDROID) {\n if (!options || !options.failSilently && rewards.callbacks.rewardApprovalRequested) {\n rewards.callbacks.rewardApprovalRequested();\n }\n\n return;\n } // Set `claim_code` so the api knows which reward to give if there are multiple of the same type\n\n\n var params = options.params || {};\n\n if (!params.claim_code) {\n params.claim_code = reward.claim_code;\n }\n\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_STARTED,\n data: {\n reward: reward\n }\n });\n\n var success = function success(successReward) {\n // Temporary timeout to ensure the sdk has the correct balance after claiming a reward\n setTimeout(function () {\n dispatch(lbryRedux.doUpdateBalance()).then(function () {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_SUCCESS,\n data: {\n reward: successReward\n }\n });\n\n if (successReward.reward_type === rewards.TYPE_NEW_USER && rewards.callbacks.claimFirstRewardSuccess) {\n rewards.callbacks.claimFirstRewardSuccess();\n } else if (successReward.reward_type === rewards.TYPE_REFERRAL) {\n dispatch(doFetchInviteStatus());\n }\n\n dispatch(doRewardList());\n\n if (options.callback) {\n options.callback();\n }\n });\n }, 2000);\n };\n\n var failure = function failure(error) {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_FAILURE,\n data: {\n reward: reward,\n error: !options || !options.failSilently ? error : undefined\n }\n });\n\n if (options.notifyError) {\n dispatch(lbryRedux.doToast({\n message: error.message,\n isError: true\n }));\n }\n\n if (options.callback) {\n options.callback(error);\n }\n };\n\n return rewards.claimReward(rewardType, params).then(success, failure);\n };\n}\n\nfunction doClaimEligiblePurchaseRewards() {\n return function (dispatch, getState) {\n var state = getState();\n var unclaimedRewards = selectUnclaimedRewards(state);\n var userIsRewardApproved = selectUserIsRewardApproved(state);\n\n if (!userIsRewardApproved || !Lbryio.enabled) {\n return;\n }\n\n if (unclaimedRewards.find(function (ur) {\n return ur.reward_type === rewards.TYPE_FIRST_STREAM;\n })) {\n dispatch(doClaimRewardType(rewards.TYPE_FIRST_STREAM));\n } else {\n [rewards.TYPE_MANY_DOWNLOADS, rewards.TYPE_DAILY_VIEW].forEach(function (type) {\n dispatch(doClaimRewardType(type, {\n failSilently: true\n }));\n });\n }\n };\n}\n\nfunction doClaimRewardClearError(reward) {\n return function (dispatch) {\n dispatch({\n type: lbryRedux.ACTIONS.CLAIM_REWARD_CLEAR_ERROR,\n data: {\n reward: reward\n }\n });\n };\n}\n\nfunction doFetchRewardedContent() {\n return function (dispatch) {\n var success = function success(nameToClaimId) {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED,\n data: {\n claimIds: Object.values(nameToClaimId),\n success: true\n }\n });\n };\n\n var failure = function failure() {\n dispatch({\n type: lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED,\n data: {\n claimIds: [],\n success: false\n }\n });\n };\n\n Lbryio.call('reward', 'list_featured').then(success, failure);\n };\n}\n\nvar PAGE_SIZE = 20; // \n\nvar CHECK_SUBSCRIPTIONS_INTERVAL = 15 * 60 * 1000;\n\nvar doSetViewMode = function doSetViewMode(viewMode) {\n return function (dispatch) {\n return dispatch({\n type: SET_VIEW_MODE,\n data: viewMode\n });\n };\n};\n\nvar setSubscriptionLatest = function setSubscriptionLatest(subscription, uri) {\n return function (dispatch) {\n return dispatch({\n type: SET_SUBSCRIPTION_LATEST,\n data: {\n subscription: subscription,\n uri: uri\n }\n });\n };\n}; // Populate a channels unread subscriptions or update the type\n\n\nvar doUpdateUnreadSubscriptions = function doUpdateUnreadSubscriptions(channelUri, uris, type) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = selectUnreadByChannel(state);\n var currentUnreadForChannel = unreadByChannel[channelUri];\n var newUris = [];\n var newType = null;\n\n if (!currentUnreadForChannel) {\n newUris = uris;\n newType = type;\n } else {\n if (uris) {\n // If a channel currently has no unread uris, just add them all\n if (!currentUnreadForChannel.uris || !currentUnreadForChannel.uris.length) {\n newUris = uris;\n } else {\n // They already have unreads and now there are new ones\n // Add the new ones to the beginning of the list\n // Make sure there are no duplicates\n var currentUnreadUris = currentUnreadForChannel.uris;\n newUris = uris.filter(function (uri) {\n return !currentUnreadUris.includes(uri);\n }).concat(currentUnreadUris);\n }\n } else {\n newUris = currentUnreadForChannel.uris;\n }\n\n newType = type || currentUnreadForChannel.type;\n }\n\n dispatch({\n type: UPDATE_SUBSCRIPTION_UNREADS,\n data: {\n channel: channelUri,\n uris: newUris,\n type: newType\n }\n });\n };\n}; // Remove multiple files (or all) from a channels unread subscriptions\n\n\nvar doRemoveUnreadSubscriptions = function doRemoveUnreadSubscriptions(channelUri, readUris) {\n return function (dispatch, getState) {\n var state = getState();\n var unreadByChannel = selectUnreadByChannel(state); // If no channel is passed in, remove all unread subscriptions from all channels\n\n if (!channelUri) {\n return dispatch({\n type: REMOVE_SUBSCRIPTION_UNREADS,\n data: {\n channel: null\n }\n });\n }\n\n var currentChannelUnread = unreadByChannel[channelUri];\n\n if (!currentChannelUnread || !currentChannelUnread.uris) {\n // Channel passed in doesn't have any unreads\n return null;\n } // For each uri passed in, remove it from the list of unread uris\n // If no uris are passed in, remove them all\n\n\n var newUris;\n\n if (readUris) {\n var urisToRemoveMap = readUris.reduce(function (acc, val) {\n return _objectSpread({}, acc, _defineProperty({}, val, true));\n }, {});\n var filteredUris = currentChannelUnread.uris.filter(function (uri) {\n return !urisToRemoveMap[uri];\n });\n newUris = filteredUris.length ? filteredUris : null;\n } else {\n newUris = null;\n }\n\n return dispatch({\n type: REMOVE_SUBSCRIPTION_UNREADS,\n data: {\n channel: channelUri,\n uris: newUris\n }\n });\n };\n}; // Remove a single file from a channels unread subscriptions\n\n\nvar doRemoveUnreadSubscription = function doRemoveUnreadSubscription(channelUri, readUri) {\n return function (dispatch) {\n dispatch(doRemoveUnreadSubscriptions(channelUri, [readUri]));\n };\n};\n\nvar doCheckSubscription = function doCheckSubscription(subscriptionUri, shouldNotify) {\n return function (dispatch, getState) {\n // no dispatching FETCH_CHANNEL_CLAIMS_STARTED; causes loading issues on <SubscriptionsPage>\n var state = getState();\n var savedSubscription = state.subscriptions.subscriptions.find(function (sub) {\n return sub.uri === subscriptionUri;\n });\n var subscriptionLatest = state.subscriptions.latest[subscriptionUri];\n\n if (!savedSubscription) {\n throw Error(\"Trying to find new content for \".concat(subscriptionUri, \" but it doesn't exist in your subscriptions\"));\n } // We may be duplicating calls here. Can this logic be baked into doFetchClaimsByChannel?\n\n\n lbryRedux.Lbry.claim_search({\n channel: subscriptionUri,\n valid_channel_signature: true,\n order_by: ['release_time'],\n page: 1,\n page_size: PAGE_SIZE\n }).then(function (claimListByChannel) {\n var claimsInChannel = claimListByChannel.items; // may happen if subscribed to an abandoned channel or an empty channel\n\n if (!claimsInChannel || !claimsInChannel.length) {\n return;\n } // Determine if the latest subscription currently saved is actually the latest subscription\n\n\n var latestIndex = claimsInChannel.findIndex(function (claim) {\n return claim.permanent_url === subscriptionLatest;\n }); // If latest is -1, it is a newly subscribed channel or there have been 10+ claims published since last viewed\n\n var latestIndexToNotify = latestIndex === -1 ? 10 : latestIndex; // If latest is 0, nothing has changed\n // Do not download/notify about new content, it would download/notify 10 claims per channel\n\n if (latestIndex !== 0 && subscriptionLatest) {\n var downloadCount = 0;\n var newUnread = [];\n claimsInChannel.slice(0, latestIndexToNotify).forEach(function (claim) {\n var uri = claim.permanent_url;\n\n if (shouldNotify) {\n newUnread.push(uri);\n }\n });\n dispatch(doUpdateUnreadSubscriptions(subscriptionUri, newUnread, downloadCount > 0 ? DOWNLOADING : NOTIFY_ONLY));\n } // Set the latest piece of content for a channel\n // This allows the app to know if there has been new content since it was last set\n\n\n var latest = claimsInChannel[0];\n dispatch(setSubscriptionLatest({\n channelName: latest.signing_channel.name,\n uri: latest.signing_channel.permanent_url\n }, latest.permanent_url)); // calling FETCH_CHANNEL_CLAIMS_COMPLETED after not calling STARTED\n // means it will delete a non-existant fetchingChannelClaims[uri]\n\n dispatch({\n type: FETCH_CHANNEL_CLAIMS_COMPLETED,\n data: {\n uri: subscriptionUri,\n claims: claimsInChannel || [],\n page: 1\n }\n });\n });\n };\n};\n\nvar doChannelSubscribe = function doChannelSubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState = getState(),\n daemonSettings = _getState.settings.daemonSettings;\n\n var isSharingData = daemonSettings ? daemonSettings.share_usage_data : true;\n var subscriptionUri = subscription.uri;\n\n if (!subscriptionUri.startsWith('lbry://')) {\n throw Error(\"Subscription uris must inclue the \\\"lbry://\\\" prefix.\\nTried to subscribe to \".concat(subscriptionUri));\n }\n\n dispatch({\n type: CHANNEL_SUBSCRIBE,\n data: subscription\n }); // if the user isn't sharing data, keep the subscriptions entirely in the app\n\n if (isSharingData) {\n var _lbryRedux$parseURI4 = lbryRedux.parseURI(subscription.uri),\n channelClaimId = _lbryRedux$parseURI4.channelClaimId; // They are sharing data, we can store their subscriptions in our internal database\n\n\n Lbryio.call('subscription', 'new', {\n channel_name: subscription.channelName,\n claim_id: channelClaimId\n });\n dispatch(doClaimRewardType(rewards.TYPE_SUBSCRIPTION, {\n failSilently: true\n }));\n }\n\n dispatch(doCheckSubscription(subscription.uri, true));\n };\n};\n\nvar doChannelUnsubscribe = function doChannelUnsubscribe(subscription) {\n return function (dispatch, getState) {\n var _getState2 = getState(),\n daemonSettings = _getState2.settings.daemonSettings;\n\n var isSharingData = daemonSettings ? daemonSettings.share_usage_data : true;\n dispatch({\n type: CHANNEL_UNSUBSCRIBE,\n data: subscription\n });\n\n if (isSharingData) {\n var _lbryRedux$parseURI5 = lbryRedux.parseURI(subscription.uri),\n channelClaimId = _lbryRedux$parseURI5.channelClaimId;\n\n Lbryio.call('subscription', 'delete', {\n claim_id: channelClaimId\n });\n }\n };\n};\n\nvar doCheckSubscriptions = function doCheckSubscriptions() {\n return function (dispatch, getState) {\n var state = getState();\n var subscriptions = selectSubscriptions(state);\n subscriptions.forEach(function (sub) {\n dispatch(doCheckSubscription(sub.uri, true));\n });\n };\n};\n\nvar doFetchMySubscriptions = function doFetchMySubscriptions() {\n return function (dispatch, getState) {\n var state = getState();\n var reduxSubscriptions = state.subscriptions.subscriptions; // default to true if daemonSettings not found\n\n var isSharingData = state.settings && state.settings.daemonSettings ? state.settings.daemonSettings.share_usage_data : true;\n\n if (!isSharingData && isSharingData !== undefined) {\n // They aren't sharing their data, subscriptions will be handled by persisted redux state\n return;\n } // most of this logic comes from scenarios where the db isn't synced with redux\n // this will happen if the user stops sharing data\n\n\n dispatch({\n type: FETCH_SUBSCRIPTIONS_START\n });\n Lbryio.call('subscription', 'list').then(function (dbSubscriptions) {\n var storedSubscriptions = dbSubscriptions || []; // User has no subscriptions in db or redux\n\n if (!storedSubscriptions.length && (!reduxSubscriptions || !reduxSubscriptions.length)) {\n return [];\n } // There is some mismatch between redux state and db state\n // If something is in the db, but not in redux, add it to redux\n // If something is in redux, but not in the db, add it to the db\n\n\n if (storedSubscriptions.length !== reduxSubscriptions.length) {\n var dbSubMap = {};\n var reduxSubMap = {};\n var subsNotInDB = [];\n var subscriptionsToReturn = reduxSubscriptions.slice();\n storedSubscriptions.forEach(function (sub) {\n dbSubMap[sub.claim_id] = 1;\n });\n reduxSubscriptions.forEach(function (sub) {\n var _lbryRedux$parseURI6 = lbryRedux.parseURI(sub.uri),\n channelClaimId = _lbryRedux$parseURI6.channelClaimId;\n\n reduxSubMap[channelClaimId] = 1;\n });\n storedSubscriptions.forEach(function (sub) {\n if (!reduxSubMap[sub.claim_id]) {\n var uri = \"lbry://\".concat(sub.channel_name, \"#\").concat(sub.claim_id);\n subscriptionsToReturn.push({\n uri: uri,\n channelName: sub.channel_name\n });\n }\n });\n return Promise.all(subsNotInDB.map(function (payload) {\n return Lbryio.call('subscription', 'new', payload);\n })).then(function () {\n return subscriptionsToReturn;\n })[\"catch\"](function () {\n return (// let it fail, we will try again when the navigate to the subscriptions page\n subscriptionsToReturn\n );\n });\n } // DB is already synced, just return the subscriptions in redux\n\n\n return reduxSubscriptions;\n }).then(function (subscriptions) {\n dispatch({\n type: FETCH_SUBSCRIPTIONS_SUCCESS,\n data: subscriptions\n });\n dispatch(lbryRedux.doResolveUris(subscriptions.map(function (_ref8) {\n var uri = _ref8.uri;\n return uri;\n })));\n dispatch(doCheckSubscriptions());\n })[\"catch\"](function () {\n dispatch({\n type: FETCH_SUBSCRIPTIONS_FAIL\n });\n });\n };\n};\n\nvar doCheckSubscriptionsInit = function doCheckSubscriptionsInit() {\n return function (dispatch) {\n // doCheckSubscriptionsInit is called by doDaemonReady\n // setTimeout below is a hack to ensure redux is hydrated when subscriptions are checked\n // this will be replaced with <PersistGate> which reqiures a package upgrade\n setTimeout(function () {\n return dispatch(doFetchMySubscriptions());\n }, 5000);\n var checkSubscriptionsTimer = setInterval(function () {\n return dispatch(doCheckSubscriptions());\n }, CHECK_SUBSCRIPTIONS_INTERVAL);\n dispatch({\n type: CHECK_SUBSCRIPTIONS_SUBSCRIBE,\n data: {\n checkSubscriptionsTimer: checkSubscriptionsTimer\n }\n });\n setInterval(function () {\n return dispatch(doCheckSubscriptions());\n }, CHECK_SUBSCRIPTIONS_INTERVAL);\n };\n};\n\nvar doFetchRecommendedSubscriptions = function doFetchRecommendedSubscriptions() {\n return function (dispatch) {\n dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_START\n });\n return Lbryio.call('subscription', 'suggest').then(function (suggested) {\n return dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_SUCCESS,\n data: suggested\n });\n })[\"catch\"](function (error) {\n return dispatch({\n type: GET_SUGGESTED_SUBSCRIPTIONS_FAIL,\n error: error\n });\n });\n };\n};\n\nvar doCompleteFirstRun = function doCompleteFirstRun() {\n return function (dispatch) {\n return dispatch({\n type: SUBSCRIPTION_FIRST_RUN_COMPLETED\n });\n };\n};\n\nvar doShowSuggestedSubs = function doShowSuggestedSubs() {\n return function (dispatch) {\n return dispatch({\n type: VIEW_SUGGESTED_SUBSCRIPTIONS\n });\n };\n};\n\nvar doChannelSubscriptionEnableNotifications = function doChannelSubscriptionEnableNotifications(channelName) {\n return function (dispatch) {\n return dispatch({\n type: CHANNEL_SUBSCRIPTION_ENABLE_NOTIFICATIONS,\n data: channelName\n });\n };\n};\n\nvar doChannelSubscriptionDisableNotifications = function doChannelSubscriptionDisableNotifications(channelName) {\n return function (dispatch) {\n return dispatch({\n type: CHANNEL_SUBSCRIPTION_DISABLE_NOTIFICATIONS,\n data: channelName\n });\n };\n};\n\nfunction doFetchCostInfoForUri(uri) {\n return function (dispatch, getState) {\n var state = getState();\n var claim = lbryRedux.selectClaimsByUri(state)[uri];\n if (!claim) return;\n\n function resolve(costInfo) {\n dispatch({\n type: FETCH_COST_INFO_COMPLETED,\n data: {\n uri: uri,\n costInfo: costInfo\n }\n });\n }\n\n var fee = claim.value ? claim.value.fee : undefined;\n\n if (fee === undefined) {\n resolve({\n cost: 0,\n includesData: true\n });\n } else if (fee.currency === 'LBC') {\n resolve({\n cost: fee.amount,\n includesData: true\n });\n } else {\n Lbryio.getExchangeRates().then(function (_ref9) {\n var LBC_USD = _ref9.LBC_USD;\n resolve({\n cost: fee.amount / LBC_USD,\n includesData: true\n });\n });\n }\n };\n}\n\nvar CHECK_BLACK_LISTED_CONTENT_INTERVAL = 60 * 60 * 1000;\n\nfunction doFetchBlackListedOutpoints() {\n return function (dispatch) {\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_STARTED\n });\n\n var success = function success(_ref10) {\n var outpoints = _ref10.outpoints;\n var splitOutpoints = [];\n\n if (outpoints) {\n outpoints.forEach(function (outpoint, index) {\n var _outpoint$split = outpoint.split(':'),\n _outpoint$split2 = _slicedToArray(_outpoint$split, 2),\n txid = _outpoint$split2[0],\n nout = _outpoint$split2[1];\n\n splitOutpoints[index] = {\n txid: txid,\n nout: Number.parseInt(nout, 10)\n };\n });\n }\n\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_COMPLETED,\n data: {\n outpoints: splitOutpoints,\n success: true\n }\n });\n };\n\n var failure = function failure(_ref11) {\n var error = _ref11.error;\n dispatch({\n type: FETCH_BLACK_LISTED_CONTENT_FAILED,\n data: {\n error: error,\n success: false\n }\n });\n };\n\n Lbryio.call('file', 'list_blocked').then(success, failure);\n };\n}\n\nfunction doBlackListedOutpointsSubscribe() {\n return function (dispatch) {\n dispatch(doFetchBlackListedOutpoints());\n setInterval(function () {\n return dispatch(doFetchBlackListedOutpoints());\n }, CHECK_BLACK_LISTED_CONTENT_INTERVAL);\n };\n}\n\nvar CHECK_FILTERED_CONTENT_INTERVAL = 60 * 60 * 1000;\n\nfunction doFetchFilteredOutpoints() {\n return function (dispatch) {\n dispatch({\n type: FETCH_FILTERED_CONTENT_STARTED\n });\n\n var success = function success(_ref12) {\n var outpoints = _ref12.outpoints;\n var formattedOutpoints = [];\n\n if (outpoints) {\n formattedOutpoints = outpoints.map(function (outpoint) {\n var _outpoint$split3 = outpoint.split(':'),\n _outpoint$split4 = _slicedToArray(_outpoint$split3, 2),\n txid = _outpoint$split4[0],\n nout = _outpoint$split4[1];\n\n return {\n txid: txid,\n nout: Number.parseInt(nout, 10)\n };\n });\n }\n\n dispatch({\n type: FETCH_FILTERED_CONTENT_COMPLETED,\n data: {\n outpoints: formattedOutpoints\n }\n });\n };\n\n var failure = function failure(_ref13) {\n var error = _ref13.error;\n dispatch({\n type: FETCH_FILTERED_CONTENT_FAILED,\n data: {\n error: error\n }\n });\n };\n\n Lbryio.call('file', 'list_filtered').then(success, failure);\n };\n}\n\nfunction doFilteredOutpointsSubscribe() {\n return function (dispatch) {\n dispatch(doFetchFilteredOutpoints());\n setInterval(function () {\n return dispatch(doFetchFilteredOutpoints());\n }, CHECK_FILTERED_CONTENT_INTERVAL);\n };\n}\n\nfunction doFetchFeaturedUris() {\n var offloadResolve = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return function (dispatch) {\n dispatch({\n type: FETCH_FEATURED_CONTENT_STARTED\n });\n\n var success = function success(_ref14) {\n var Uris = _ref14.Uris;\n var urisToResolve = [];\n Object.keys(Uris).forEach(function (category) {\n urisToResolve = [].concat(_toConsumableArray(urisToResolve), _toConsumableArray(Uris[category]));\n });\n var actions = [{\n type: FETCH_FEATURED_CONTENT_COMPLETED,\n data: {\n uris: Uris,\n success: true\n }\n }];\n\n if (urisToResolve.length && !offloadResolve) {\n actions.push(lbryRedux.doResolveUris(urisToResolve));\n }\n\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n };\n\n var failure = function failure() {\n dispatch({\n type: FETCH_FEATURED_CONTENT_COMPLETED,\n data: {\n uris: {}\n }\n });\n };\n\n Lbryio.call('file', 'list_homepage').then(success, failure);\n };\n}\n\nfunction doFetchTrendingUris() {\n return function (dispatch) {\n dispatch({\n type: FETCH_TRENDING_CONTENT_STARTED\n });\n\n var success = function success(data) {\n var urisToResolve = data.map(function (uri) {\n return uri.url;\n });\n var actions = [lbryRedux.doResolveUris(urisToResolve), {\n type: FETCH_TRENDING_CONTENT_COMPLETED,\n data: {\n uris: data,\n success: true\n }\n }];\n dispatch(lbryRedux.batchActions.apply(lbryRedux, actions));\n };\n\n var failure = function failure() {\n dispatch({\n type: FETCH_TRENDING_CONTENT_COMPLETED,\n data: {\n uris: []\n }\n });\n };\n\n Lbryio.call('file', 'list_trending').then(success, failure);\n };\n} // \n\n\nvar doFetchViewCount = function doFetchViewCount(claimId) {\n return function (dispatch) {\n dispatch({\n type: FETCH_VIEW_COUNT_STARTED\n });\n return Lbryio.call('file', 'view_count', {\n claim_id: claimId\n }).then(function (result) {\n var viewCount = result[0];\n dispatch({\n type: FETCH_VIEW_COUNT_COMPLETED,\n data: {\n claimId: claimId,\n viewCount: viewCount\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: FETCH_VIEW_COUNT_FAILED,\n data: error\n });\n });\n };\n};\n\nvar doFetchSubCount = function doFetchSubCount(claimId) {\n return function (dispatch) {\n dispatch({\n type: FETCH_SUB_COUNT_STARTED\n });\n return Lbryio.call('subscription', 'sub_count', {\n claim_id: claimId\n }).then(function (result) {\n var subCount = result[0];\n dispatch({\n type: FETCH_SUB_COUNT_COMPLETED,\n data: {\n claimId: claimId,\n subCount: subCount\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: FETCH_SUB_COUNT_FAILED,\n data: error\n });\n });\n };\n};\n\nfunction doSetDefaultAccount(success, failure) {\n return function (dispatch) {\n dispatch({\n type: SET_DEFAULT_ACCOUNT\n });\n lbryRedux.Lbry.account_list().then(function (accountList) {\n var accounts = accountList.lbc_mainnet;\n var defaultId;\n\n for (var i = 0; i < accounts.length; ++i) {\n if (accounts[i].satoshis > 0) {\n defaultId = accounts[i].id;\n break;\n }\n } // In a case where there's no balance on either account\n // assume the second (which is created after sync) as default\n\n\n if (!defaultId && accounts.length > 1) {\n defaultId = accounts[1].id;\n } // Set the default account\n\n\n if (defaultId) {\n lbryRedux.Lbry.account_set({\n account_id: defaultId,\n \"default\": true\n }).then(function () {\n if (success) {\n success();\n }\n })[\"catch\"](function (err) {\n if (failure) {\n failure(err);\n }\n });\n } else if (failure) {\n // no default account to set\n failure('Could not set a default account'); // fail\n }\n })[\"catch\"](function (err) {\n if (failure) {\n failure(err);\n }\n });\n };\n}\n\nfunction doSetSync(oldHash, newHash, data) {\n return function (dispatch) {\n dispatch({\n type: SET_SYNC_STARTED\n });\n return Lbryio.call('sync', 'set', {\n old_hash: oldHash,\n new_hash: newHash,\n data: data\n }, 'post').then(function (response) {\n if (!response.hash) {\n throw Error('No hash returned for sync/set.');\n }\n\n return dispatch({\n type: SET_SYNC_COMPLETED,\n data: {\n syncHash: response.hash\n }\n });\n })[\"catch\"](function (error) {\n dispatch({\n type: SET_SYNC_FAILED,\n data: {\n error: error\n }\n });\n });\n };\n}\n\nfunction doGetSync(passedPassword, callback) {\n var password = passedPassword === null || passedPassword === undefined ? '' : passedPassword;\n\n function handleCallback(error, hasNewData) {\n if (callback) {\n if (typeof callback !== 'function') {\n throw new Error('Second argument passed to \"doGetSync\" must be a function');\n }\n\n callback(error, hasNewData);\n }\n }\n\n return function (dispatch) {\n dispatch({\n type: GET_SYNC_STARTED\n });\n var data = {};\n lbryRedux.Lbry.wallet_status().then(function (status) {\n if (status.is_locked) {\n return lbryRedux.Lbry.wallet_unlock({\n password: password\n });\n } // Wallet is already unlocked\n\n\n return true;\n }).then(function (isUnlocked) {\n if (isUnlocked) {\n return lbryRedux.Lbry.sync_hash();\n }\n\n data.unlockFailed = true;\n throw new Error();\n }).then(function (hash) {\n return Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post');\n }).then(function (response) {\n var syncHash = response.hash;\n data.syncHash = syncHash;\n data.syncData = response.data;\n data.changed = response.changed;\n data.hasSyncedWallet = true;\n\n if (response.changed) {\n return lbryRedux.Lbry.sync_apply({\n password: password,\n data: response.data,\n blocking: true\n });\n }\n }).then(function (response) {\n if (!response) {\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n handleCallback(null, data.changed);\n return;\n }\n\n var walletHash = response.hash,\n walletData = response.data;\n\n if (walletHash !== data.syncHash) {\n // different local hash, need to synchronise\n dispatch(doSetSync(data.syncHash, walletHash, walletData));\n }\n\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n handleCallback(null, data.changed);\n })[\"catch\"](function (syncAttemptError) {\n if (data.unlockFailed) {\n dispatch({\n type: GET_SYNC_FAILED,\n data: {\n error: syncAttemptError\n }\n });\n\n if (password !== '') {\n dispatch({\n type: SYNC_APPLY_BAD_PASSWORD\n });\n }\n\n handleCallback(syncAttemptError);\n } else if (data.hasSyncedWallet) {\n var error = 'Error getting synced wallet';\n dispatch({\n type: GET_SYNC_FAILED,\n data: {\n error: error\n }\n }); // Temp solution until we have a bad password error code\n // Don't fail on blank passwords so we don't show a \"password error\" message\n // before users have ever entered a password\n\n if (password !== '') {\n dispatch({\n type: SYNC_APPLY_BAD_PASSWORD\n });\n }\n\n handleCallback(error);\n } else {\n // user doesn't have a synced wallet\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: {\n hasSyncedWallet: false,\n syncHash: null\n }\n }); // call sync_apply to get data to sync\n // first time sync. use any string for old hash\n\n lbryRedux.Lbry.sync_apply({\n password: password\n }).then(function (_ref15) {\n var walletHash = _ref15.hash,\n syncApplyData = _ref15.data;\n dispatch(doSetSync('', walletHash, syncApplyData, password));\n handleCallback();\n })[\"catch\"](function (syncApplyError) {\n handleCallback(syncApplyError);\n });\n }\n });\n };\n}\n\nfunction doSyncApply(syncHash, syncData, password) {\n return function (dispatch) {\n dispatch({\n type: SYNC_APPLY_STARTED\n });\n lbryRedux.Lbry.sync_apply({\n password: password,\n data: syncData\n }).then(function (_ref16) {\n var walletHash = _ref16.hash,\n walletData = _ref16.data;\n dispatch({\n type: SYNC_APPLY_COMPLETED\n });\n\n if (walletHash !== syncHash) {\n // different local hash, need to synchronise\n dispatch(doSetSync(syncHash, walletHash, walletData));\n }\n })[\"catch\"](function () {\n dispatch({\n type: SYNC_APPLY_FAILED,\n data: {\n error: 'Invalid password specified. Please enter the password for your previously synchronised wallet.'\n }\n });\n });\n };\n}\n\nfunction doCheckSync() {\n return function (dispatch) {\n dispatch({\n type: GET_SYNC_STARTED\n });\n lbryRedux.Lbry.sync_hash().then(function (hash) {\n Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post').then(function (response) {\n var data = {\n hasSyncedWallet: true,\n syncHash: response.hash,\n syncData: response.data,\n hashChanged: response.changed\n };\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: data\n });\n })[\"catch\"](function () {\n // user doesn't have a synced wallet\n dispatch({\n type: GET_SYNC_COMPLETED,\n data: {\n hasSyncedWallet: false,\n syncHash: null\n }\n });\n });\n });\n };\n}\n\nfunction doResetSync() {\n return function (dispatch) {\n return new Promise(function (resolve) {\n dispatch({\n type: SYNC_RESET\n });\n resolve();\n });\n };\n}\n\nfunction doSyncEncryptAndDecrypt(oldPassword, newPassword, encrypt) {\n return function (dispatch) {\n var data = {};\n return lbryRedux.Lbry.sync_hash().then(function (hash) {\n return Lbryio.call('sync', 'get', {\n hash: hash\n }, 'post');\n }).then(function (syncGetResponse) {\n data.oldHash = syncGetResponse.hash;\n return lbryRedux.Lbry.sync_apply({\n password: oldPassword,\n data: syncGetResponse.data\n });\n }).then(function () {\n if (encrypt) {\n dispatch(lbryRedux.doWalletEncrypt(newPassword));\n } else {\n dispatch(lbryRedux.doWalletDecrypt());\n }\n }).then(function () {\n return lbryRedux.Lbry.sync_apply({\n password: newPassword\n });\n }).then(function (syncApplyResponse) {\n if (syncApplyResponse.hash !== data.oldHash) {\n return dispatch(doSetSync(data.oldHash, syncApplyResponse.hash, syncApplyResponse.data));\n }\n })[\"catch\"](console.error);\n };\n} // \n\n\nvar doUpdateUploadProgress = function doUpdateUploadProgress(progress, params, xhr) {\n return function (dispatch) {\n return dispatch({\n type: UPDATE_UPLOAD_PROGRESS,\n data: {\n progress: progress,\n params: params,\n xhr: xhr\n }\n });\n };\n};\n\nvar reducers = {};\nvar defaultState$1 = {\n authenticating: false\n};\n\nreducers[GENERATE_AUTH_TOKEN_FAILURE] = function (state) {\n return Object.assign({}, state, {\n authToken: null,\n authenticating: false\n });\n};\n\nreducers[GENERATE_AUTH_TOKEN_STARTED] = function (state) {\n return Object.assign({}, state, {\n authenticating: true\n });\n};\n\nreducers[GENERATE_AUTH_TOKEN_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n authToken: action.data.authToken,\n authenticating: false\n });\n};\n\nfunction authReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$1;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$1 = {};\nvar defaultState$2 = {\n fetching: false,\n claimedRewardsById: {},\n // id => reward\n unclaimedRewards: [],\n claimPendingByType: {},\n claimErrorsByType: {},\n rewardedContentClaimIds: []\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARDS_STARTED] = function (state) {\n return Object.assign({}, state, {\n fetching: true\n });\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARDS_COMPLETED] = function (state, action) {\n var userRewards = action.data.userRewards;\n var unclaimedRewards = [];\n var claimedRewards = {};\n userRewards.forEach(function (reward) {\n if (reward.transaction_id) {\n claimedRewards[reward.id] = reward;\n } else {\n unclaimedRewards.push(reward);\n }\n });\n return Object.assign({}, state, {\n claimedRewardsById: claimedRewards,\n unclaimedRewards: unclaimedRewards,\n fetching: false\n });\n};\n\nfunction setClaimRewardState(state, reward, isClaiming) {\n var errorMessage = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var newClaimPendingByType = Object.assign({}, state.claimPendingByType);\n var newClaimErrorsByType = Object.assign({}, state.claimErrorsByType); // Currently, for multiple rewards of the same type, they will both show \"claiming\" when one is beacuse we track this by `reward_type`\n // To fix this we will need to use `claim_code` instead, and change all selectors to match\n\n if (isClaiming) {\n newClaimPendingByType[reward.reward_type] = isClaiming;\n } else {\n delete newClaimPendingByType[reward.reward_type];\n }\n\n if (errorMessage) {\n newClaimErrorsByType[reward.reward_type] = errorMessage;\n } else {\n delete newClaimErrorsByType[reward.reward_type];\n }\n\n return Object.assign({}, state, {\n claimPendingByType: newClaimPendingByType,\n claimErrorsByType: newClaimErrorsByType\n });\n}\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_STARTED] = function (state, action) {\n var reward = action.data.reward;\n return setClaimRewardState(state, reward, true, '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_SUCCESS] = function (state, action) {\n var reward = action.data.reward;\n var unclaimedRewards = state.unclaimedRewards;\n var index = unclaimedRewards.findIndex(function (ur) {\n return ur.claim_code === reward.claim_code;\n });\n unclaimedRewards.splice(index, 1);\n var claimedRewardsById = state.claimedRewardsById;\n claimedRewardsById[reward.id] = reward;\n\n var newState = _objectSpread({}, state, {\n unclaimedRewards: _toConsumableArray(unclaimedRewards),\n claimedRewardsById: _objectSpread({}, claimedRewardsById)\n });\n\n return setClaimRewardState(newState, reward, false, '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_FAILURE] = function (state, action) {\n var _action$data4 = action.data,\n reward = _action$data4.reward,\n error = _action$data4.error;\n return setClaimRewardState(state, reward, false, error ? error.message : '');\n};\n\nreducers$1[lbryRedux.ACTIONS.CLAIM_REWARD_CLEAR_ERROR] = function (state, action) {\n var reward = action.data.reward;\n return setClaimRewardState(state, reward, state.claimPendingByType[reward.reward_type], '');\n};\n\nreducers$1[lbryRedux.ACTIONS.FETCH_REWARD_CONTENT_COMPLETED] = function (state, action) {\n var claimIds = action.data.claimIds;\n return Object.assign({}, state, {\n rewardedContentClaimIds: claimIds\n });\n};\n\nfunction rewardsReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$2;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$1[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar reducers$2 = {};\nvar defaultState$3 = {\n authenticationIsPending: false,\n userIsPending: false,\n emailNewIsPending: false,\n emailNewErrorMessage: '',\n emailToVerify: '',\n emailAlreadyExists: false,\n resendingVerificationEmail: false,\n inviteNewErrorMessage: '',\n inviteNewIsPending: false,\n inviteStatusIsPending: false,\n invitesRemaining: undefined,\n invitees: undefined,\n referralLink: undefined,\n referralCode: undefined,\n user: undefined,\n accessToken: undefined,\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: '',\n referrerSetIsPending: false,\n referrerSetError: ''\n};\n\nreducers$2[AUTHENTICATION_STARTED] = function (state) {\n return Object.assign({}, state, {\n authenticationIsPending: true,\n userIsPending: true,\n accessToken: defaultState$3.accessToken\n });\n};\n\nreducers$2[AUTHENTICATION_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n authenticationIsPending: false,\n userIsPending: false,\n accessToken: action.data.accessToken,\n user: action.data.user\n });\n};\n\nreducers$2[AUTHENTICATION_FAILURE] = function (state) {\n return Object.assign({}, state, {\n authenticationIsPending: false,\n userIsPending: false,\n user: null\n });\n};\n\nreducers$2[USER_FETCH_STARTED] = function (state) {\n return Object.assign({}, state, {\n userIsPending: true\n });\n};\n\nreducers$2[USER_FETCH_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n userIsPending: false,\n user: action.data.user,\n emailToVerify: action.data.user.has_verified_email ? null : state.emailToVerify\n });\n};\n\nreducers$2[USER_FETCH_FAILURE] = function (state) {\n return Object.assign({}, state, {\n userIsPending: true,\n user: null\n });\n};\n\nreducers$2[USER_PHONE_NEW_STARTED] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.country_code = action.data.country_code;\n return Object.assign({}, state, {\n phoneNewIsPending: true,\n phoneNewErrorMessage: '',\n user: user\n });\n};\n\nreducers$2[USER_PHONE_NEW_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n phoneToVerify: action.data.phone,\n phoneNewIsPending: false\n });\n};\n\nreducers$2[USER_PHONE_RESET] = function (state) {\n return Object.assign({}, state, {\n phoneToVerify: null\n });\n};\n\nreducers$2[USER_PHONE_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n phoneNewIsPending: false,\n phoneNewErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n phoneVerifyIsPending: true,\n phoneVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n phoneToVerify: '',\n phoneVerifyIsPending: false,\n user: action.data.user\n });\n};\n\nreducers$2[USER_PHONE_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n phoneVerifyIsPending: false,\n phoneVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_NEW_STARTED] = function (state) {\n return Object.assign({}, state, {\n emailNewIsPending: true,\n emailNewErrorMessage: '',\n emailAlreadyExists: false\n });\n};\n\nreducers$2[USER_EMAIL_NEW_SUCCESS] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.primary_email = action.data.email;\n return Object.assign({}, state, {\n emailToVerify: action.data.email,\n emailNewIsPending: false,\n user: user\n });\n};\n\nreducers$2[USER_EMAIL_NEW_EXISTS] = function (state) {\n return Object.assign({}, state, {\n emailAlreadyExists: true\n });\n};\n\nreducers$2[USER_EMAIL_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n emailNewIsPending: false,\n emailNewErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n emailVerifyIsPending: true,\n emailVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_SUCCESS] = function (state, action) {\n var user = Object.assign({}, state.user);\n user.primary_email = action.data.email;\n return Object.assign({}, state, {\n emailToVerify: '',\n emailVerifyIsPending: false,\n user: user\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n emailVerifyIsPending: false,\n emailVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_SET] = function (state, action) {\n return Object.assign({}, state, {\n emailToVerify: action.data.email\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_STARTED] = function (state) {\n return Object.assign({}, state, {\n identityVerifyIsPending: true,\n identityVerifyErrorMessage: ''\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n identityVerifyIsPending: false,\n identityVerifyErrorMessage: '',\n user: action.data.user\n });\n};\n\nreducers$2[USER_IDENTITY_VERIFY_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n identityVerifyIsPending: false,\n identityVerifyErrorMessage: action.data.error\n });\n};\n\nreducers$2[FETCH_ACCESS_TOKEN_SUCCESS] = function (state, action) {\n var token = action.data.token;\n return Object.assign({}, state, {\n accessToken: token\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_STARTED] = function (state) {\n return Object.assign({}, state, {\n inviteStatusIsPending: true\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_SUCCESS] = function (state, action) {\n return Object.assign({}, state, {\n inviteStatusIsPending: false,\n invitesRemaining: action.data.invitesRemaining,\n invitees: action.data.invitees,\n referralLink: action.data.referralLink,\n referralCode: action.data.referralCode\n });\n};\n\nreducers$2[USER_INVITE_NEW_STARTED] = function (state) {\n return Object.assign({}, state, {\n inviteNewIsPending: true,\n inviteNewErrorMessage: ''\n });\n};\n\nreducers$2[USER_INVITE_NEW_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n inviteNewIsPending: false,\n inviteNewErrorMessage: ''\n });\n};\n\nreducers$2[USER_INVITE_NEW_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n inviteNewIsPending: false,\n inviteNewErrorMessage: action.data.error.message\n });\n};\n\nreducers$2[USER_INVITE_STATUS_FETCH_FAILURE] = function (state) {\n return Object.assign({}, state, {\n inviteStatusIsPending: false,\n invitesRemaining: null,\n invitees: null\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_STARTED] = function (state) {\n return Object.assign({}, state, {\n youtubeChannelImportPending: true,\n youtubeChannelImportErrorMessage: ''\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_SUCCESS] = function (state, action) {\n var total = action.data.reduce(function (acc, value) {\n return acc + value.total_published_videos;\n }, 0);\n var complete = action.data.reduce(function (acc, value) {\n return acc + value.total_transferred;\n }, 0);\n return Object.assign({}, state, {\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: '',\n youtubeChannelImportTotal: total,\n youtubeChannelImportComplete: complete\n });\n};\n\nreducers$2[USER_YOUTUBE_IMPORT_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n youtubeChannelImportPending: false,\n youtubeChannelImportErrorMessage: action.data\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_STARTED] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: true\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: false\n });\n};\n\nreducers$2[USER_EMAIL_VERIFY_RETRY_FAILURE] = function (state) {\n return Object.assign({}, state, {\n resendingVerificationEmail: false\n });\n};\n\nreducers$2[USER_SET_REFERRER_STARTED] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: true,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nreducers$2[USER_SET_REFERRER_SUCCESS] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nreducers$2[USER_SET_REFERRER_FAILURE] = function (state, action) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: action.data.error.message\n });\n};\n\nreducers$2[USER_SET_REFERRER_RESET] = function (state) {\n return Object.assign({}, state, {\n referrerSetIsPending: false,\n referrerSetError: defaultState$3.referrerSetError\n });\n};\n\nfunction userReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$3;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$2[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar defaultState$4 = {\n fetching: {},\n byUri: {}\n};\nvar costInfoReducer = handleActions((_handleActions2 = {}, _defineProperty(_handleActions2, FETCH_COST_INFO_STARTED, function (state, action) {\n var uri = action.data.uri;\n var newFetching = Object.assign({}, state.fetching);\n newFetching[uri] = true;\n return _objectSpread({}, state, {\n fetching: newFetching\n });\n}), _defineProperty(_handleActions2, FETCH_COST_INFO_COMPLETED, function (state, action) {\n var _action$data5 = action.data,\n uri = _action$data5.uri,\n costInfo = _action$data5.costInfo;\n var newByUri = Object.assign({}, state.byUri);\n var newFetching = Object.assign({}, state.fetching);\n newByUri[uri] = costInfo;\n delete newFetching[uri];\n return _objectSpread({}, state, {\n byUri: newByUri,\n fetching: newFetching\n });\n}), _handleActions2), defaultState$4);\nvar defaultState$5 = {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: undefined,\n blackListedOutpoints: undefined\n};\nvar blacklistReducer = handleActions((_handleActions3 = {}, _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: true\n });\n}), _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_COMPLETED, function (state, action) {\n var _action$data6 = action.data,\n outpoints = _action$data6.outpoints,\n success = _action$data6.success;\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: success,\n blackListedOutpoints: outpoints\n });\n}), _defineProperty(_handleActions3, FETCH_BLACK_LISTED_CONTENT_FAILED, function (state, action) {\n var _action$data7 = action.data,\n error = _action$data7.error,\n success = _action$data7.success;\n return _objectSpread({}, state, {\n fetchingBlackListedOutpoints: false,\n fetchingBlackListedOutpointsSucceed: success,\n fetchingBlackListedOutpointsError: error\n });\n}), _handleActions3), defaultState$5);\nvar defaultState$6 = {\n loading: false,\n filteredOutpoints: undefined\n};\nvar filteredReducer = handleActions((_handleActions4 = {}, _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n loading: true\n });\n}), _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_COMPLETED, function (state, action) {\n var outpoints = action.data.outpoints;\n return _objectSpread({}, state, {\n loading: false,\n filteredOutpoints: outpoints\n });\n}), _defineProperty(_handleActions4, FETCH_FILTERED_CONTENT_FAILED, function (state, action) {\n var error = action.data.error;\n return _objectSpread({}, state, {\n loading: false,\n fetchingFilteredOutpointsError: error\n });\n}), _handleActions4), defaultState$6);\nvar defaultState$7 = {\n fetchingFeaturedContent: false,\n fetchingFeaturedContentFailed: false,\n featuredUris: undefined,\n fetchingTrendingContent: false,\n fetchingTrendingContentFailed: false,\n trendingUris: undefined\n};\nvar homepageReducer = handleActions((_handleActions5 = {}, _defineProperty(_handleActions5, FETCH_FEATURED_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingFeaturedContent: true\n });\n}), _defineProperty(_handleActions5, FETCH_FEATURED_CONTENT_COMPLETED, function (state, action) {\n var _action$data8 = action.data,\n uris = _action$data8.uris,\n success = _action$data8.success;\n return _objectSpread({}, state, {\n fetchingFeaturedContent: false,\n fetchingFeaturedContentFailed: !success,\n featuredUris: uris\n });\n}), _defineProperty(_handleActions5, FETCH_TRENDING_CONTENT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingTrendingContent: true\n });\n}), _defineProperty(_handleActions5, FETCH_TRENDING_CONTENT_COMPLETED, function (state, action) {\n var _action$data9 = action.data,\n uris = _action$data9.uris,\n success = _action$data9.success;\n return _objectSpread({}, state, {\n fetchingTrendingContent: false,\n fetchingTrendingContentFailed: !success,\n trendingUris: uris\n });\n}), _handleActions5), defaultState$7);\nvar defaultState$8 = {\n fetchingViewCount: false,\n viewCountError: undefined,\n viewCountById: {},\n fetchingSubCount: false,\n subCountError: undefined,\n subCountById: {}\n};\nvar statsReducer = handleActions((_handleActions6 = {}, _defineProperty(_handleActions6, FETCH_VIEW_COUNT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingViewCount: true\n });\n}), _defineProperty(_handleActions6, FETCH_VIEW_COUNT_FAILED, function (state, action) {\n return _objectSpread({}, state, {\n viewCountError: action.data\n });\n}), _defineProperty(_handleActions6, FETCH_VIEW_COUNT_COMPLETED, function (state, action) {\n var _action$data10 = action.data,\n claimId = _action$data10.claimId,\n viewCount = _action$data10.viewCount;\n\n var viewCountById = _objectSpread({}, state.viewCountById, _defineProperty({}, claimId, viewCount));\n\n return _objectSpread({}, state, {\n fetchingViewCount: false,\n viewCountById: viewCountById\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_STARTED, function (state) {\n return _objectSpread({}, state, {\n fetchingSubCount: true\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_FAILED, function (state, action) {\n return _objectSpread({}, state, {\n subCountError: action.data\n });\n}), _defineProperty(_handleActions6, FETCH_SUB_COUNT_COMPLETED, function (state, action) {\n var _action$data11 = action.data,\n claimId = _action$data11.claimId,\n subCount = _action$data11.subCount;\n\n var subCountById = _objectSpread({}, state.subCountById, _defineProperty({}, claimId, subCount));\n\n return _objectSpread({}, state, {\n fetchingSubCount: false,\n subCountById: subCountById\n });\n}), _handleActions6), defaultState$8);\nvar reducers$3 = {};\nvar defaultState$9 = {\n hasSyncedWallet: false,\n syncHash: null,\n syncData: null,\n setSyncErrorMessage: null,\n getSyncErrorMessage: null,\n syncApplyErrorMessage: '',\n syncApplyIsPending: false,\n syncApplyPasswordError: false,\n getSyncIsPending: false,\n setSyncIsPending: false,\n hashChanged: false\n};\n\nreducers$3[GET_SYNC_STARTED] = function (state) {\n return Object.assign({}, state, {\n getSyncIsPending: true,\n getSyncErrorMessage: null\n });\n};\n\nreducers$3[GET_SYNC_COMPLETED] = function (state, action) {\n return Object.assign({}, state, {\n syncHash: action.data.syncHash,\n syncData: action.data.syncData,\n hasSyncedWallet: action.data.hasSyncedWallet,\n getSyncIsPending: false,\n hashChanged: action.data.hashChanged\n });\n};\n\nreducers$3[GET_SYNC_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n getSyncIsPending: false,\n getSyncErrorMessage: action.data.error\n });\n};\n\nreducers$3[SET_SYNC_STARTED] = function (state) {\n return Object.assign({}, state, {\n setSyncIsPending: true,\n setSyncErrorMessage: null\n });\n};\n\nreducers$3[SET_SYNC_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n setSyncIsPending: false,\n setSyncErrorMessage: action.data.error\n });\n};\n\nreducers$3[SET_SYNC_COMPLETED] = function (state, action) {\n return Object.assign({}, state, {\n setSyncIsPending: false,\n setSyncErrorMessage: null,\n hasSyncedWallet: true,\n // sync was successful, so the user has a synced wallet at this point\n syncHash: action.data.syncHash\n });\n};\n\nreducers$3[SYNC_APPLY_STARTED] = function (state) {\n return Object.assign({}, state, {\n syncApplyPasswordError: false,\n syncApplyIsPending: true,\n syncApplyErrorMessage: ''\n });\n};\n\nreducers$3[SYNC_APPLY_COMPLETED] = function (state) {\n return Object.assign({}, state, {\n syncApplyIsPending: false,\n syncApplyErrorMessage: ''\n });\n};\n\nreducers$3[SYNC_APPLY_FAILED] = function (state, action) {\n return Object.assign({}, state, {\n syncApplyIsPending: false,\n syncApplyErrorMessage: action.data.error\n });\n};\n\nreducers$3[SYNC_APPLY_BAD_PASSWORD] = function (state) {\n return Object.assign({}, state, {\n syncApplyPasswordError: true\n });\n};\n\nreducers$3[SYNC_RESET] = function () {\n return defaultState$9;\n};\n\nfunction syncReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$9;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$3[action.type];\n if (handler) return handler(state, action);\n return state;\n} // \n\n/*\ntest mock:\n currentUploads: {\n 'test#upload': {\n progress: 50,\n params: {\n name: 'steve',\n thumbnail_url: 'https://dev2.spee.ch/4/KMNtoSZ009fawGz59VG8PrID.jpeg',\n },\n },\n },\n */\n\n\nvar reducers$4 = {};\nvar defaultState$a = {\n currentUploads: {}\n};\n\nreducers$4[UPDATE_UPLOAD_PROGRESS] = function (state, action) {\n var _action$data12 = action.data,\n progress = _action$data12.progress,\n params = _action$data12.params,\n xhr = _action$data12.xhr;\n var key = params.channel ? \"\".concat(params.name, \"#\").concat(params.channel) : \"\".concat(params.name, \"#anonymous\");\n var currentUploads;\n\n if (!progress) {\n currentUploads = Object.assign({}, state.currentUploads);\n Object.keys(currentUploads).forEach(function (k) {\n if (k === key) {\n delete currentUploads[key];\n }\n });\n } else {\n currentUploads = Object.assign({}, state.currentUploads);\n currentUploads[key] = {\n progress: progress,\n params: params,\n xhr: xhr\n };\n }\n\n return _objectSpread({}, state, {\n currentUploads: currentUploads\n });\n};\n\nfunction lbrytvReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState$a;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var handler = reducers$4[action.type];\n if (handler) return handler(state, action);\n return state;\n}\n\nvar selectState$3 = function selectState$3(state) {\n return state.auth || {};\n};\n\nvar selectAuthToken = reselect.createSelector(selectState$3, function (state) {\n return state.authToken;\n});\nvar selectIsAuthenticating = reselect.createSelector(selectState$3, function (state) {\n return state.authenticating;\n});\n\nvar selectState$4 = function selectState$4(state) {\n return state.costInfo || {};\n};\n\nvar selectAllCostInfoByUri = reselect.createSelector(selectState$4, function (state) {\n return state.byUri || {};\n});\n\nvar makeSelectCostInfoForUri = function makeSelectCostInfoForUri(uri) {\n return reselect.createSelector(selectAllCostInfoByUri, function (costInfos) {\n return costInfos && costInfos[uri];\n });\n};\n\nvar selectFetchingCostInfo = reselect.createSelector(selectState$4, function (state) {\n return state.fetching || {};\n});\n\nvar makeSelectFetchingCostInfoForUri = function makeSelectFetchingCostInfoForUri(uri) {\n return reselect.createSelector(selectFetchingCostInfo, function (fetchingByUri) {\n return fetchingByUri && fetchingByUri[uri];\n });\n};\n\nvar selectState$5 = function selectState$5(state) {\n return state.blacklist || {};\n};\n\nvar selectBlackListedOutpoints = reselect.createSelector(selectState$5, function (state) {\n return state.blackListedOutpoints;\n});\n\nvar selectState$6 = function selectState$6(state) {\n return state.filtered || {};\n};\n\nvar selectFilteredOutpoints = reselect.createSelector(selectState$6, function (state) {\n return state.filteredOutpoints;\n});\n\nvar selectState$7 = function selectState$7(state) {\n return state.homepage || {};\n};\n\nvar selectFeaturedUris = reselect.createSelector(selectState$7, function (state) {\n return state.featuredUris;\n});\nvar selectFetchingFeaturedUris = reselect.createSelector(selectState$7, function (state) {\n return state.fetchingFeaturedContent;\n});\nvar selectTrendingUris = reselect.createSelector(selectState$7, function (state) {\n return state.trendingUris;\n});\nvar selectFetchingTrendingUris = reselect.createSelector(selectState$7, function (state) {\n return state.fetchingTrendingContent;\n});\n\nvar selectState$8 = function selectState$8(state) {\n return state.stats || {};\n};\n\nvar selectViewCount = reselect.createSelector(selectState$8, function (state) {\n return state.viewCountById;\n});\nvar selectSubCount = reselect.createSelector(selectState$8, function (state) {\n return state.subCountById;\n});\n\nvar makeSelectViewCountForUri = function makeSelectViewCountForUri(uri) {\n return reselect.createSelector(lbryRedux.makeSelectClaimForUri(uri), selectViewCount, function (claim, viewCountById) {\n return claim ? viewCountById[claim.claim_id] || 0 : 0;\n });\n};\n\nvar makeSelectSubCountForUri = function makeSelectSubCountForUri(uri) {\n return reselect.createSelector(lbryRedux.makeSelectClaimForUri(uri), selectSubCount, function (claim, subCountById) {\n return claim ? subCountById[claim.claim_id] || 0 : 0;\n });\n};\n\nvar selectState$9 = function selectState$9(state) {\n return state.sync || {};\n};\n\nvar selectHasSyncedWallet = reselect.createSelector(selectState$9, function (state) {\n return state.hasSyncedWallet;\n});\nvar selectSyncHash = reselect.createSelector(selectState$9, function (state) {\n return state.syncHash;\n});\nvar selectSyncData = reselect.createSelector(selectState$9, function (state) {\n return state.syncData;\n});\nvar selectSetSyncErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.setSyncErrorMessage;\n});\nvar selectGetSyncErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.getSyncErrorMessage;\n});\nvar selectGetSyncIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.getSyncIsPending;\n});\nvar selectSetSyncIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.setSyncIsPending;\n});\nvar selectHashChanged = reselect.createSelector(selectState$9, function (state) {\n return state.hashChanged;\n});\nvar selectSyncApplyIsPending = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyIsPending;\n});\nvar selectSyncApplyErrorMessage = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyErrorMessage;\n});\nvar selectSyncApplyPasswordError = reselect.createSelector(selectState$9, function (state) {\n return state.syncApplyPasswordError;\n});\n\nvar selectState$a = function selectState$a(state) {\n return state.lbrytv || {};\n};\n\nvar selectCurrentUploads = reselect.createSelector(selectState$a, function (state) {\n return state.currentUploads;\n});\nvar selectUploadCount = reselect.createSelector(selectCurrentUploads, function (currentUploads) {\n return currentUploads && Object.keys(currentUploads).length;\n});\nexports.ERRORS = errors;\nexports.LBRYINC_ACTIONS = action_types;\nexports.Lbryio = Lbryio;\nexports.YOUTUBE_STATUSES = youtube;\nexports.authReducer = authReducer;\nexports.blacklistReducer = blacklistReducer;\nexports.costInfoReducer = costInfoReducer;\nexports.doAuthenticate = doAuthenticate;\nexports.doBlackListedOutpointsSubscribe = doBlackListedOutpointsSubscribe;\nexports.doChannelSubscribe = doChannelSubscribe;\nexports.doChannelSubscriptionDisableNotifications = doChannelSubscriptionDisableNotifications;\nexports.doChannelSubscriptionEnableNotifications = doChannelSubscriptionEnableNotifications;\nexports.doChannelUnsubscribe = doChannelUnsubscribe;\nexports.doCheckSubscription = doCheckSubscription;\nexports.doCheckSubscriptions = doCheckSubscriptions;\nexports.doCheckSubscriptionsInit = doCheckSubscriptionsInit;\nexports.doCheckSync = doCheckSync;\nexports.doCheckYoutubeTransfer = doCheckYoutubeTransfer;\nexports.doClaimEligiblePurchaseRewards = doClaimEligiblePurchaseRewards;\nexports.doClaimRewardClearError = doClaimRewardClearError;\nexports.doClaimRewardType = doClaimRewardType;\nexports.doClaimYoutubeChannels = doClaimYoutubeChannels;\nexports.doCompleteFirstRun = doCompleteFirstRun;\nexports.doFetchAccessToken = doFetchAccessToken;\nexports.doFetchCostInfoForUri = doFetchCostInfoForUri;\nexports.doFetchFeaturedUris = doFetchFeaturedUris;\nexports.doFetchInviteStatus = doFetchInviteStatus;\nexports.doFetchMySubscriptions = doFetchMySubscriptions;\nexports.doFetchRecommendedSubscriptions = doFetchRecommendedSubscriptions;\nexports.doFetchRewardedContent = doFetchRewardedContent;\nexports.doFetchSubCount = doFetchSubCount;\nexports.doFetchTrendingUris = doFetchTrendingUris;\nexports.doFetchViewCount = doFetchViewCount;\nexports.doFilteredOutpointsSubscribe = doFilteredOutpointsSubscribe;\nexports.doGenerateAuthToken = doGenerateAuthToken;\nexports.doGetSync = doGetSync;\nexports.doInstallNew = doInstallNew;\nexports.doInstallNewWithParams = doInstallNewWithParams;\nexports.doRemoveUnreadSubscription = doRemoveUnreadSubscription;\nexports.doRemoveUnreadSubscriptions = doRemoveUnreadSubscriptions;\nexports.doResetSync = doResetSync;\nexports.doRewardList = doRewardList;\nexports.doSetDefaultAccount = doSetDefaultAccount;\nexports.doSetSync = doSetSync;\nexports.doSetViewMode = doSetViewMode;\nexports.doShowSuggestedSubs = doShowSuggestedSubs;\nexports.doSyncApply = doSyncApply;\nexports.doSyncEncryptAndDecrypt = doSyncEncryptAndDecrypt;\nexports.doTransifexUpload = doTransifexUpload;\nexports.doUpdateUnreadSubscriptions = doUpdateUnreadSubscriptions;\nexports.doUpdateUploadProgress = doUpdateUploadProgress;\nexports.doUserCheckEmailVerified = doUserCheckEmailVerified;\nexports.doUserEmailNew = doUserEmailNew;\nexports.doUserEmailToVerify = doUserEmailToVerify;\nexports.doUserEmailVerify = doUserEmailVerify;\nexports.doUserEmailVerifyFailure = doUserEmailVerifyFailure;\nexports.doUserFetch = doUserFetch;\nexports.doUserIdentityVerify = doUserIdentityVerify;\nexports.doUserInviteNew = doUserInviteNew;\nexports.doUserPhoneNew = doUserPhoneNew;\nexports.doUserPhoneReset = doUserPhoneReset;\nexports.doUserPhoneVerify = doUserPhoneVerify;\nexports.doUserPhoneVerifyFailure = doUserPhoneVerifyFailure;\nexports.doUserResendVerificationEmail = doUserResendVerificationEmail;\nexports.doUserSetReferrer = doUserSetReferrer;\nexports.doUserSetReferrerReset = doUserSetReferrerReset;\nexports.filteredReducer = filteredReducer;\nexports.homepageReducer = homepageReducer;\nexports.lbrytvReducer = lbrytvReducer;\nexports.makeSelectClaimRewardError = makeSelectClaimRewardError;\nexports.makeSelectCostInfoForUri = makeSelectCostInfoForUri;\nexports.makeSelectFetchingCostInfoForUri = makeSelectFetchingCostInfoForUri;\nexports.makeSelectIsNew = makeSelectIsNew;\nexports.makeSelectIsRewardClaimPending = makeSelectIsRewardClaimPending;\nexports.makeSelectIsSubscribed = makeSelectIsSubscribed;\nexports.makeSelectRewardAmountByType = makeSelectRewardAmountByType;\nexports.makeSelectRewardByClaimCode = makeSelectRewardByClaimCode;\nexports.makeSelectRewardByType = makeSelectRewardByType;\nexports.makeSelectSubCountForUri = makeSelectSubCountForUri;\nexports.makeSelectUnreadByChannel = makeSelectUnreadByChannel;\nexports.makeSelectViewCountForUri = makeSelectViewCountForUri;\nexports.rewards = rewards;\nexports.rewardsReducer = rewardsReducer;\nexports.selectAccessToken = selectAccessToken;\nexports.selectAllCostInfoByUri = selectAllCostInfoByUri;\nexports.selectAuthToken = selectAuthToken;\nexports.selectAuthenticationIsPending = selectAuthenticationIsPending;\nexports.selectBlackListedOutpoints = selectBlackListedOutpoints;\nexports.selectClaimErrorsByType = selectClaimErrorsByType;\nexports.selectClaimedRewards = selectClaimedRewards;\nexports.selectClaimedRewardsById = selectClaimedRewardsById;\nexports.selectClaimedRewardsByTransactionId = selectClaimedRewardsByTransactionId;\nexports.selectClaimsPendingByType = selectClaimsPendingByType;\nexports.selectCurrentUploads = selectCurrentUploads;\nexports.selectEmailAlreadyExists = selectEmailAlreadyExists;\nexports.selectEmailNewErrorMessage = selectEmailNewErrorMessage;\nexports.selectEmailNewIsPending = selectEmailNewIsPending;\nexports.selectEmailToVerify = selectEmailToVerify;\nexports.selectEmailVerifyErrorMessage = selectEmailVerifyErrorMessage;\nexports.selectEmailVerifyIsPending = selectEmailVerifyIsPending;\nexports.selectEnabledChannelNotifications = selectEnabledChannelNotifications;\nexports.selectFeaturedUris = selectFeaturedUris;\nexports.selectFetchingCostInfo = selectFetchingCostInfo;\nexports.selectFetchingFeaturedUris = selectFetchingFeaturedUris;\nexports.selectFetchingRewards = selectFetchingRewards;\nexports.selectFetchingTrendingUris = selectFetchingTrendingUris;\nexports.selectFilteredOutpoints = selectFilteredOutpoints;\nexports.selectFirstRunCompleted = selectFirstRunCompleted;\nexports.selectGetSyncErrorMessage = selectGetSyncErrorMessage;\nexports.selectGetSyncIsPending = selectGetSyncIsPending;\nexports.selectHasSyncedWallet = selectHasSyncedWallet;\nexports.selectHashChanged = selectHashChanged;\nexports.selectIdentityVerifyErrorMessage = selectIdentityVerifyErrorMessage;\nexports.selectIdentityVerifyIsPending = selectIdentityVerifyIsPending;\nexports.selectIsAuthenticating = selectIsAuthenticating;\nexports.selectIsFetchingSubscriptions = selectIsFetchingSubscriptions;\nexports.selectIsFetchingSuggested = selectIsFetchingSuggested;\nexports.selectPhoneNewErrorMessage = selectPhoneNewErrorMessage;\nexports.selectPhoneNewIsPending = selectPhoneNewIsPending;\nexports.selectPhoneToVerify = selectPhoneToVerify;\nexports.selectPhoneVerifyErrorMessage = selectPhoneVerifyErrorMessage;\nexports.selectPhoneVerifyIsPending = selectPhoneVerifyIsPending;\nexports.selectReferralReward = selectReferralReward;\nexports.selectResendingVerificationEmail = selectResendingVerificationEmail;\nexports.selectRewardContentClaimIds = selectRewardContentClaimIds;\nexports.selectSetReferrerError = selectSetReferrerError;\nexports.selectSetReferrerPending = selectSetReferrerPending;\nexports.selectSetSyncErrorMessage = selectSetSyncErrorMessage;\nexports.selectSetSyncIsPending = selectSetSyncIsPending;\nexports.selectShowSuggestedSubs = selectShowSuggestedSubs;\nexports.selectSubscriptionClaims = selectSubscriptionClaims;\nexports.selectSubscriptions = selectSubscriptions;\nexports.selectSubscriptionsBeingFetched = selectSubscriptionsBeingFetched;\nexports.selectSuggested = selectSuggested;\nexports.selectSuggestedChannels = selectSuggestedChannels;\nexports.selectSyncApplyErrorMessage = selectSyncApplyErrorMessage;\nexports.selectSyncApplyIsPending = selectSyncApplyIsPending;\nexports.selectSyncApplyPasswordError = selectSyncApplyPasswordError;\nexports.selectSyncData = selectSyncData;\nexports.selectSyncHash = selectSyncHash;\nexports.selectTrendingUris = selectTrendingUris;\nexports.selectUnclaimedRewardValue = selectUnclaimedRewardValue;\nexports.selectUnclaimedRewards = selectUnclaimedRewards;\nexports.selectUnclaimedRewardsByType = selectUnclaimedRewardsByType;\nexports.selectUnreadAmount = selectUnreadAmount;\nexports.selectUnreadByChannel = selectUnreadByChannel;\nexports.selectUnreadSubscriptions = selectUnreadSubscriptions;\nexports.selectUploadCount = selectUploadCount;\nexports.selectUser = selectUser;\nexports.selectUserCountryCode = selectUserCountryCode;\nexports.selectUserEmail = selectUserEmail;\nexports.selectUserInviteNewErrorMessage = selectUserInviteNewErrorMessage;\nexports.selectUserInviteNewIsPending = selectUserInviteNewIsPending;\nexports.selectUserInviteReferralCode = selectUserInviteReferralCode;\nexports.selectUserInviteReferralLink = selectUserInviteReferralLink;\nexports.selectUserInviteStatusFailed = selectUserInviteStatusFailed;\nexports.selectUserInviteStatusIsPending = selectUserInviteStatusIsPending;\nexports.selectUserInvitees = selectUserInvitees;\nexports.selectUserInvitesRemaining = selectUserInvitesRemaining;\nexports.selectUserIsPending = selectUserIsPending;\nexports.selectUserIsRewardApproved = selectUserIsRewardApproved;\nexports.selectUserIsVerificationCandidate = selectUserIsVerificationCandidate;\nexports.selectUserPhone = selectUserPhone;\nexports.selectUserVerifiedEmail = selectUserVerifiedEmail;\nexports.selectViewMode = selectViewMode;\nexports.selectYouTubeImportError = selectYouTubeImportError;\nexports.selectYouTubeImportPending = selectYouTubeImportPending;\nexports.selectYouTubeImportVideosComplete = selectYouTubeImportVideosComplete;\nexports.selectYoutubeChannels = selectYoutubeChannels;\nexports.setSubscriptionLatest = setSubscriptionLatest;\nexports.statsReducer = statsReducer;\nexports.subscriptionsReducer = subscriptions;\nexports.syncReducer = syncReducer;\nexports.userReducer = userReducer;\nexports.userStateSyncMiddleware = userStateSyncMiddleware;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"], __webpack_require__(/*! ./../../../../node_modules/buffer/index.js */ \"../node_modules/buffer/index.js\").Buffer))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbGJyeWluYy9kaXN0L2J1bmRsZS5lcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sYnJ5aW5jL2Rpc3QvYnVuZGxlLmVzLmpzPzBiZGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGxicnlSZWR1eCA9IHJlcXVpcmUoJ2xicnktcmVkdXgnKTtcbnZhciBxdWVyeXN0cmluZyA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdxdWVyeXN0cmluZycpKTtcbnZhciByZXNlbGVjdCA9IHJlcXVpcmUoJ3Jlc2VsZWN0Jyk7XG5cbi8vIFVzZXJcbmNvbnN0IEdFTkVSQVRFX0FVVEhfVE9LRU5fRkFJTFVSRSA9ICdHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkUnO1xuY29uc3QgR0VORVJBVEVfQVVUSF9UT0tFTl9TVEFSVEVEID0gJ0dFTkVSQVRFX0FVVEhfVE9LRU5fU1RBUlRFRCc7XG5jb25zdCBHRU5FUkFURV9BVVRIX1RPS0VOX1NVQ0NFU1MgPSAnR0VORVJBVEVfQVVUSF9UT0tFTl9TVUNDRVNTJztcbmNvbnN0IEFVVEhFTlRJQ0FUSU9OX1NUQVJURUQgPSAnQVVUSEVOVElDQVRJT05fU1RBUlRFRCc7XG5jb25zdCBBVVRIRU5USUNBVElPTl9TVUNDRVNTID0gJ0FVVEhFTlRJQ0FUSU9OX1NVQ0NFU1MnO1xuY29uc3QgQVVUSEVOVElDQVRJT05fRkFJTFVSRSA9ICdBVVRIRU5USUNBVElPTl9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfREVDTElORSA9ICdVU0VSX0VNQUlMX0RFQ0xJTkUnO1xuY29uc3QgVVNFUl9FTUFJTF9ORVdfU1RBUlRFRCA9ICdVU0VSX0VNQUlMX05FV19TVEFSVEVEJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1MgPSAnVVNFUl9FTUFJTF9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0VNQUlMX05FV19FWElTVFMgPSAnVVNFUl9FTUFJTF9ORVdfRVhJU1RTJztcbmNvbnN0IFVTRVJfRU1BSUxfTkVXX0ZBSUxVUkUgPSAnVVNFUl9FTUFJTF9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TRVQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU0VUJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQgPSAnVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9TVUNDRVNTID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSA9ICdVU0VSX0VNQUlMX1ZFUklGWV9GQUlMVVJFJztcbmNvbnN0IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX1NUQVJURUQgPSAnVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9GQUlMVVJFID0gJ1VTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX0ZBSUxVUkUnO1xuY29uc3QgVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1VDQ0VTUyA9ICdVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfUkVTRVQgPSAnVVNFUl9QSE9ORV9SRVNFVCc7XG5jb25zdCBVU0VSX1BIT05FX05FV19TVEFSVEVEID0gJ1VTRVJfUEhPTkVfTkVXX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX05FV19TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfTkVXX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSc7XG5jb25zdCBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfUEhPTkVfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfUEhPTkVfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lERU5USVRZX1ZFUklGWV9TVEFSVEVEID0gJ1VTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQnO1xuY29uc3QgVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyA9ICdVU0VSX0lERU5USVRZX1ZFUklGWV9TVUNDRVNTJztcbmNvbnN0IFVTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkUgPSAnVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0ZFVENIX1NUQVJURUQgPSAnVVNFUl9GRVRDSF9TVEFSVEVEJztcbmNvbnN0IFVTRVJfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0ZFVENIX1NVQ0NFU1MnO1xuY29uc3QgVVNFUl9GRVRDSF9GQUlMVVJFID0gJ1VTRVJfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1RBUlRFRCA9ICdVU0VSX0lOVklURV9ORVdfU1RBUlRFRCc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyA9ICdVU0VSX0lOVklURV9ORVdfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSA9ICdVU0VSX0lOVklURV9ORVdfRkFJTFVSRSc7XG5jb25zdCBGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyA9ICdGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTUyc7XG5jb25zdCBVU0VSX1lPVVRVQkVfSU1QT1JUX1NUQVJURUQgPSAnVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVEFSVEVEJztcbmNvbnN0IFVTRVJfWU9VVFVCRV9JTVBPUlRfRkFJTFVSRSA9ICdVU0VSX1lPVVRVQkVfSU1QT1JUX0ZBSUxVUkUnO1xuY29uc3QgVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTID0gJ1VTRVJfWU9VVFVCRV9JTVBPUlRfU1VDQ0VTUyc7XG5jb25zdCBVU0VSX1NFVF9SRUZFUlJFUl9TVEFSVEVEID0gJ1VTRVJfU0VUX1JFRkVSUkVSX1NUQVJURUQnO1xuY29uc3QgVVNFUl9TRVRfUkVGRVJSRVJfU1VDQ0VTUyA9ICdVU0VSX1NFVF9SRUZFUlJFUl9TVUNDRVNTJztcbmNvbnN0IFVTRVJfU0VUX1JFRkVSUkVSX0ZBSUxVUkUgPSAnVVNFUl9TRVRfUkVGRVJSRVJfRkFJTFVSRSc7XG5jb25zdCBVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVCA9ICdVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVCc7IC8vIENsYWltc1xuXG5jb25zdCBGRVRDSF9GRUFUVVJFRF9DT05URU5UX1NUQVJURUQgPSAnRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9TVEFSVEVEJztcbmNvbnN0IEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVEID0gJ0ZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX1RSRU5ESU5HX0NPTlRFTlRfU1RBUlRFRCA9ICdGRVRDSF9UUkVORElOR19DT05URU5UX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9DT01QTEVURUQnO1xuY29uc3QgUkVTT0xWRV9VUklTX1NUQVJURUQgPSAnUkVTT0xWRV9VUklTX1NUQVJURUQnO1xuY29uc3QgUkVTT0xWRV9VUklTX0NPTVBMRVRFRCA9ICdSRVNPTFZFX1VSSVNfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX0NIQU5ORUxfQ0xBSU1TX1NUQVJURUQgPSAnRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQgPSAnRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEJztcbmNvbnN0IEZFVENIX0NIQU5ORUxfQ0xBSU1fQ09VTlRfU1RBUlRFRCA9ICdGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9DT01QTEVURUQgPSAnRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQgPSAnRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCA9ICdGRVRDSF9DTEFJTV9MSVNUX01JTkVfQ09NUExFVEVEJztcbmNvbnN0IEFCQU5ET05fQ0xBSU1fU1RBUlRFRCA9ICdBQkFORE9OX0NMQUlNX1NUQVJURUQnO1xuY29uc3QgQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQgPSAnQUJBTkRPTl9DTEFJTV9TVUNDRUVERUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQgPSAnRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ0hBTk5FTF9MSVNUX0NPTVBMRVRFRCA9ICdGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEJztcbmNvbnN0IENSRUFURV9DSEFOTkVMX1NUQVJURUQgPSAnQ1JFQVRFX0NIQU5ORUxfU1RBUlRFRCc7XG5jb25zdCBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQgPSAnQ1JFQVRFX0NIQU5ORUxfQ09NUExFVEVEJztcbmNvbnN0IFBVQkxJU0hfU1RBUlRFRCA9ICdQVUJMSVNIX1NUQVJURUQnO1xuY29uc3QgUFVCTElTSF9DT01QTEVURUQgPSAnUFVCTElTSF9DT01QTEVURUQnO1xuY29uc3QgUFVCTElTSF9GQUlMRUQgPSAnUFVCTElTSF9GQUlMRUQnO1xuY29uc3QgU0VUX1BMQVlJTkdfVVJJID0gJ1NFVF9QTEFZSU5HX1VSSSc7XG5jb25zdCBTRVRfQ09OVEVOVF9QT1NJVElPTiA9ICdTRVRfQ09OVEVOVF9QT1NJVElPTic7XG5jb25zdCBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCA9ICdTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRCc7XG5jb25zdCBDTEVBUl9DT05URU5UX0hJU1RPUllfVVJJID0gJ0NMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkknO1xuY29uc3QgQ0xFQVJfQ09OVEVOVF9ISVNUT1JZX0FMTCA9ICdDTEVBUl9DT05URU5UX0hJU1RPUllfQUxMJzsgLy8gU3Vic2NyaXB0aW9uc1xuXG5jb25zdCBDSEFOTkVMX1NVQlNDUklCRSA9ICdDSEFOTkVMX1NVQlNDUklCRSc7XG5jb25zdCBDSEFOTkVMX1VOU1VCU0NSSUJFID0gJ0NIQU5ORUxfVU5TVUJTQ1JJQkUnO1xuY29uc3QgQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRU5BQkxFX05PVElGSUNBVElPTlMgPSAnQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRU5BQkxFX05PVElGSUNBVElPTlMnO1xuY29uc3QgQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRElTQUJMRV9OT1RJRklDQVRJT05TID0gJ0NIQU5ORUxfU1VCU0NSSVBUSU9OX0RJU0FCTEVfTk9USUZJQ0FUSU9OUyc7XG5jb25zdCBIQVNfRkVUQ0hFRF9TVUJTQ1JJUFRJT05TID0gJ0hBU19GRVRDSEVEX1NVQlNDUklQVElPTlMnO1xuY29uc3QgU0VUX1NVQlNDUklQVElPTl9MQVRFU1QgPSAnU0VUX1NVQlNDUklQVElPTl9MQVRFU1QnO1xuY29uc3QgVVBEQVRFX1NVQlNDUklQVElPTl9VTlJFQURTID0gJ1VQREFURV9TVUJTQ1JJUFRJT05fVU5SRUFEUyc7XG5jb25zdCBSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMgPSAnUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTJztcbmNvbnN0IENIRUNLX1NVQlNDUklQVElPTl9TVEFSVEVEID0gJ0NIRUNLX1NVQlNDUklQVElPTl9TVEFSVEVEJztcbmNvbnN0IENIRUNLX1NVQlNDUklQVElPTl9DT01QTEVURUQgPSAnQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRCc7XG5jb25zdCBDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRSA9ICdDSEVDS19TVUJTQ1JJUFRJT05TX1NVQlNDUklCRSc7XG5jb25zdCBGRVRDSF9TVUJTQ1JJUFRJT05TX1NUQVJUID0gJ0ZFVENIX1NVQlNDUklQVElPTlNfU1RBUlQnO1xuY29uc3QgRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMID0gJ0ZFVENIX1NVQlNDUklQVElPTlNfRkFJTCc7XG5jb25zdCBGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MgPSAnRkVUQ0hfU1VCU0NSSVBUSU9OU19TVUNDRVNTJztcbmNvbnN0IFNFVF9WSUVXX01PREUgPSAnU0VUX1ZJRVdfTU9ERSc7XG5jb25zdCBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1RBUlQgPSAnR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NUQVJUJztcbmNvbnN0IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTID0gJ0dFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVUNDRVNTJztcbmNvbnN0IEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMID0gJ0dFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMJztcbmNvbnN0IFNVQlNDUklQVElPTl9GSVJTVF9SVU5fQ09NUExFVEVEID0gJ1NVQlNDUklQVElPTl9GSVJTVF9SVU5fQ09NUExFVEVEJztcbmNvbnN0IFZJRVdfU1VHR0VTVEVEX1NVQlNDUklQVElPTlMgPSAnVklFV19TVUdHRVNURURfU1VCU0NSSVBUSU9OUyc7IC8vIEJsYWNrbGlzdFxuXG5jb25zdCBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9TVEFSVEVEID0gJ0ZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfQ09NUExFVEVEID0gJ0ZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRUQgPSAnRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfRkFJTEVEJztcbmNvbnN0IEJMQUNLX0xJU1RFRF9DT05URU5UX1NVQlNDUklCRSA9ICdCTEFDS19MSVNURURfQ09OVEVOVF9TVUJTQ1JJQkUnOyAvLyBGaWx0ZXJlZCBsaXN0XG5cbmNvbnN0IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRCA9ICdGRVRDSF9GSUxURVJFRF9DT05URU5UX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9DT01QTEVURUQgPSAnRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9DT01QTEVURUQnO1xuY29uc3QgRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9GQUlMRUQgPSAnRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9GQUlMRUQnO1xuY29uc3QgRklMVEVSRURfQ09OVEVOVF9TVUJTQ1JJQkUgPSAnRklMVEVSRURfQ09OVEVOVF9TVUJTQ1JJQkUnOyAvLyBDb3N0IEluZm9cblxuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQgPSAnRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQnO1xuY29uc3QgRkVUQ0hfQ09TVF9JTkZPX0NPTVBMRVRFRCA9ICdGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEJzsgLy8gU3RhdHNcblxuY29uc3QgRkVUQ0hfVklFV19DT1VOVF9TVEFSVEVEID0gJ0ZFVENIX1ZJRVdfQ09VTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9WSUVXX0NPVU5UX0ZBSUxFRCA9ICdGRVRDSF9WSUVXX0NPVU5UX0ZBSUxFRCc7XG5jb25zdCBGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRCc7XG5jb25zdCBGRVRDSF9TVUJfQ09VTlRfU1RBUlRFRCA9ICdGRVRDSF9TVUJfQ09VTlRfU1RBUlRFRCc7XG5jb25zdCBGRVRDSF9TVUJfQ09VTlRfRkFJTEVEID0gJ0ZFVENIX1NVQl9DT1VOVF9GQUlMRUQnO1xuY29uc3QgRkVUQ0hfU1VCX0NPVU5UX0NPTVBMRVRFRCA9ICdGRVRDSF9TVUJfQ09VTlRfQ09NUExFVEVEJzsgLy8gQ3Jvc3MtZGV2aWNlIFN5bmNcblxuY29uc3QgR0VUX1NZTkNfU1RBUlRFRCA9ICdHRVRfU1lOQ19TVEFSVEVEJztcbmNvbnN0IEdFVF9TWU5DX0NPTVBMRVRFRCA9ICdHRVRfU1lOQ19DT01QTEVURUQnO1xuY29uc3QgR0VUX1NZTkNfRkFJTEVEID0gJ0dFVF9TWU5DX0ZBSUxFRCc7XG5jb25zdCBTRVRfU1lOQ19TVEFSVEVEID0gJ1NFVF9TWU5DX1NUQVJURUQnO1xuY29uc3QgU0VUX1NZTkNfRkFJTEVEID0gJ1NFVF9TWU5DX0ZBSUxFRCc7XG5jb25zdCBTRVRfU1lOQ19DT01QTEVURUQgPSAnU0VUX1NZTkNfQ09NUExFVEVEJztcbmNvbnN0IFNFVF9ERUZBVUxUX0FDQ09VTlQgPSAnU0VUX0RFRkFVTFRfQUNDT1VOVCc7XG5jb25zdCBTWU5DX0FQUExZX1NUQVJURUQgPSAnU1lOQ19BUFBMWV9TVEFSVEVEJztcbmNvbnN0IFNZTkNfQVBQTFlfQ09NUExFVEVEID0gJ1NZTkNfQVBQTFlfQ09NUExFVEVEJztcbmNvbnN0IFNZTkNfQVBQTFlfRkFJTEVEID0gJ1NZTkNfQVBQTFlfRkFJTEVEJztcbmNvbnN0IFNZTkNfQVBQTFlfQkFEX1BBU1NXT1JEID0gJ1NZTkNfQVBQTFlfQkFEX1BBU1NXT1JEJztcbmNvbnN0IFNZTkNfUkVTRVQgPSAnU1lOQ19SRVNFVCc7IC8vIExicnkudHZcblxuY29uc3QgVVBEQVRFX1VQTE9BRF9QUk9HUkVTUyA9ICdVUERBVEVfVVBMT0FEX1BST0dSRVNTJztcblxudmFyIGFjdGlvbl90eXBlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgR0VORVJBVEVfQVVUSF9UT0tFTl9GQUlMVVJFOiBHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkUsXG4gIEdFTkVSQVRFX0FVVEhfVE9LRU5fU1RBUlRFRDogR0VORVJBVEVfQVVUSF9UT0tFTl9TVEFSVEVELFxuICBHRU5FUkFURV9BVVRIX1RPS0VOX1NVQ0NFU1M6IEdFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTUyxcbiAgQVVUSEVOVElDQVRJT05fU1RBUlRFRDogQVVUSEVOVElDQVRJT05fU1RBUlRFRCxcbiAgQVVUSEVOVElDQVRJT05fU1VDQ0VTUzogQVVUSEVOVElDQVRJT05fU1VDQ0VTUyxcbiAgQVVUSEVOVElDQVRJT05fRkFJTFVSRTogQVVUSEVOVElDQVRJT05fRkFJTFVSRSxcbiAgVVNFUl9FTUFJTF9ERUNMSU5FOiBVU0VSX0VNQUlMX0RFQ0xJTkUsXG4gIFVTRVJfRU1BSUxfTkVXX1NUQVJURUQ6IFVTRVJfRU1BSUxfTkVXX1NUQVJURUQsXG4gIFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1M6IFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1MsXG4gIFVTRVJfRU1BSUxfTkVXX0VYSVNUUzogVVNFUl9FTUFJTF9ORVdfRVhJU1RTLFxuICBVU0VSX0VNQUlMX05FV19GQUlMVVJFOiBVU0VSX0VNQUlMX05FV19GQUlMVVJFLFxuICBVU0VSX0VNQUlMX1ZFUklGWV9TRVQ6IFVTRVJfRU1BSUxfVkVSSUZZX1NFVCxcbiAgVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRDogVVNFUl9FTUFJTF9WRVJJRllfU1RBUlRFRCxcbiAgVVNFUl9FTUFJTF9WRVJJRllfU1VDQ0VTUzogVVNFUl9FTUFJTF9WRVJJRllfU1VDQ0VTUyxcbiAgVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRTogVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRSxcbiAgVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRDogVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRCxcbiAgVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfRkFJTFVSRTogVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfRkFJTFVSRSxcbiAgVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1VDQ0VTUzogVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1VDQ0VTUyxcbiAgVVNFUl9QSE9ORV9SRVNFVDogVVNFUl9QSE9ORV9SRVNFVCxcbiAgVVNFUl9QSE9ORV9ORVdfU1RBUlRFRDogVVNFUl9QSE9ORV9ORVdfU1RBUlRFRCxcbiAgVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUzogVVNFUl9QSE9ORV9ORVdfU1VDQ0VTUyxcbiAgVVNFUl9QSE9ORV9ORVdfRkFJTFVSRTogVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSxcbiAgVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRDogVVNFUl9QSE9ORV9WRVJJRllfU1RBUlRFRCxcbiAgVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUzogVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTUyxcbiAgVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRTogVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRSxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRDogVVNFUl9JREVOVElUWV9WRVJJRllfU1RBUlRFRCxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUzogVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTUyxcbiAgVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRTogVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSxcbiAgVVNFUl9GRVRDSF9TVEFSVEVEOiBVU0VSX0ZFVENIX1NUQVJURUQsXG4gIFVTRVJfRkVUQ0hfU1VDQ0VTUzogVVNFUl9GRVRDSF9TVUNDRVNTLFxuICBVU0VSX0ZFVENIX0ZBSUxVUkU6IFVTRVJfRkVUQ0hfRkFJTFVSRSxcbiAgVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NUQVJURUQ6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVELFxuICBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUzogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NVQ0NFU1MsXG4gIFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfRkFJTFVSRSxcbiAgVVNFUl9JTlZJVEVfTkVXX1NUQVJURUQ6IFVTRVJfSU5WSVRFX05FV19TVEFSVEVELFxuICBVU0VSX0lOVklURV9ORVdfU1VDQ0VTUzogVVNFUl9JTlZJVEVfTkVXX1NVQ0NFU1MsXG4gIFVTRVJfSU5WSVRFX05FV19GQUlMVVJFOiBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSxcbiAgRkVUQ0hfQUNDRVNTX1RPS0VOX1NVQ0NFU1M6IEZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTLFxuICBVU0VSX1lPVVRVQkVfSU1QT1JUX1NUQVJURUQ6IFVTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRCxcbiAgVVNFUl9ZT1VUVUJFX0lNUE9SVF9GQUlMVVJFOiBVU0VSX1lPVVRVQkVfSU1QT1JUX0ZBSUxVUkUsXG4gIFVTRVJfWU9VVFVCRV9JTVBPUlRfU1VDQ0VTUzogVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTLFxuICBVU0VSX1NFVF9SRUZFUlJFUl9TVEFSVEVEOiBVU0VSX1NFVF9SRUZFUlJFUl9TVEFSVEVELFxuICBVU0VSX1NFVF9SRUZFUlJFUl9TVUNDRVNTOiBVU0VSX1NFVF9SRUZFUlJFUl9TVUNDRVNTLFxuICBVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFOiBVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFLFxuICBVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVDogVVNFUl9TRVRfUkVGRVJSRVJfUkVTRVQsXG4gIEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfU1RBUlRFRDogRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9TVEFSVEVELFxuICBGRVRDSF9GRUFUVVJFRF9DT05URU5UX0NPTVBMRVRFRDogRkVUQ0hfRkVBVFVSRURfQ09OVEVOVF9DT01QTEVURUQsXG4gIEZFVENIX1RSRU5ESU5HX0NPTlRFTlRfU1RBUlRFRDogRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9TVEFSVEVELFxuICBGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRDogRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9DT01QTEVURUQsXG4gIFJFU09MVkVfVVJJU19TVEFSVEVEOiBSRVNPTFZFX1VSSVNfU1RBUlRFRCxcbiAgUkVTT0xWRV9VUklTX0NPTVBMRVRFRDogUkVTT0xWRV9VUklTX0NPTVBMRVRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRDogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfU1RBUlRFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEOiBGRVRDSF9DSEFOTkVMX0NMQUlNU19DT01QTEVURUQsXG4gIEZFVENIX0NIQU5ORUxfQ0xBSU1fQ09VTlRfU1RBUlRFRDogRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9TVEFSVEVELFxuICBGRVRDSF9DSEFOTkVMX0NMQUlNX0NPVU5UX0NPTVBMRVRFRDogRkVUQ0hfQ0hBTk5FTF9DTEFJTV9DT1VOVF9DT01QTEVURUQsXG4gIEZFVENIX0NMQUlNX0xJU1RfTUlORV9TVEFSVEVEOiBGRVRDSF9DTEFJTV9MSVNUX01JTkVfU1RBUlRFRCxcbiAgRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRDogRkVUQ0hfQ0xBSU1fTElTVF9NSU5FX0NPTVBMRVRFRCxcbiAgQUJBTkRPTl9DTEFJTV9TVEFSVEVEOiBBQkFORE9OX0NMQUlNX1NUQVJURUQsXG4gIEFCQU5ET05fQ0xBSU1fU1VDQ0VFREVEOiBBQkFORE9OX0NMQUlNX1NVQ0NFRURFRCxcbiAgRkVUQ0hfQ0hBTk5FTF9MSVNUX1NUQVJURUQ6IEZFVENIX0NIQU5ORUxfTElTVF9TVEFSVEVELFxuICBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVEOiBGRVRDSF9DSEFOTkVMX0xJU1RfQ09NUExFVEVELFxuICBDUkVBVEVfQ0hBTk5FTF9TVEFSVEVEOiBDUkVBVEVfQ0hBTk5FTF9TVEFSVEVELFxuICBDUkVBVEVfQ0hBTk5FTF9DT01QTEVURUQ6IENSRUFURV9DSEFOTkVMX0NPTVBMRVRFRCxcbiAgUFVCTElTSF9TVEFSVEVEOiBQVUJMSVNIX1NUQVJURUQsXG4gIFBVQkxJU0hfQ09NUExFVEVEOiBQVUJMSVNIX0NPTVBMRVRFRCxcbiAgUFVCTElTSF9GQUlMRUQ6IFBVQkxJU0hfRkFJTEVELFxuICBTRVRfUExBWUlOR19VUkk6IFNFVF9QTEFZSU5HX1VSSSxcbiAgU0VUX0NPTlRFTlRfUE9TSVRJT046IFNFVF9DT05URU5UX1BPU0lUSU9OLFxuICBTRVRfQ09OVEVOVF9MQVNUX1ZJRVdFRDogU0VUX0NPTlRFTlRfTEFTVF9WSUVXRUQsXG4gIENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkk6IENMRUFSX0NPTlRFTlRfSElTVE9SWV9VUkksXG4gIENMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEw6IENMRUFSX0NPTlRFTlRfSElTVE9SWV9BTEwsXG4gIENIQU5ORUxfU1VCU0NSSUJFOiBDSEFOTkVMX1NVQlNDUklCRSxcbiAgQ0hBTk5FTF9VTlNVQlNDUklCRTogQ0hBTk5FTF9VTlNVQlNDUklCRSxcbiAgQ0hBTk5FTF9TVUJTQ1JJUFRJT05fRU5BQkxFX05PVElGSUNBVElPTlM6IENIQU5ORUxfU1VCU0NSSVBUSU9OX0VOQUJMRV9OT1RJRklDQVRJT05TLFxuICBDSEFOTkVMX1NVQlNDUklQVElPTl9ESVNBQkxFX05PVElGSUNBVElPTlM6IENIQU5ORUxfU1VCU0NSSVBUSU9OX0RJU0FCTEVfTk9USUZJQ0FUSU9OUyxcbiAgSEFTX0ZFVENIRURfU1VCU0NSSVBUSU9OUzogSEFTX0ZFVENIRURfU1VCU0NSSVBUSU9OUyxcbiAgU0VUX1NVQlNDUklQVElPTl9MQVRFU1Q6IFNFVF9TVUJTQ1JJUFRJT05fTEFURVNULFxuICBVUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFM6IFVQREFURV9TVUJTQ1JJUFRJT05fVU5SRUFEUyxcbiAgUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTOiBSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFMsXG4gIENIRUNLX1NVQlNDUklQVElPTl9TVEFSVEVEOiBDSEVDS19TVUJTQ1JJUFRJT05fU1RBUlRFRCxcbiAgQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRDogQ0hFQ0tfU1VCU0NSSVBUSU9OX0NPTVBMRVRFRCxcbiAgQ0hFQ0tfU1VCU0NSSVBUSU9OU19TVUJTQ1JJQkU6IENIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFLFxuICBGRVRDSF9TVUJTQ1JJUFRJT05TX1NUQVJUOiBGRVRDSF9TVUJTQ1JJUFRJT05TX1NUQVJULFxuICBGRVRDSF9TVUJTQ1JJUFRJT05TX0ZBSUw6IEZFVENIX1NVQlNDUklQVElPTlNfRkFJTCxcbiAgRkVUQ0hfU1VCU0NSSVBUSU9OU19TVUNDRVNTOiBGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MsXG4gIFNFVF9WSUVXX01PREU6IFNFVF9WSUVXX01PREUsXG4gIEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVDogR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NUQVJULFxuICBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1VDQ0VTUzogR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MsXG4gIEdFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19GQUlMOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfRkFJTCxcbiAgU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURUQ6IFNVQlNDUklQVElPTl9GSVJTVF9SVU5fQ09NUExFVEVELFxuICBWSUVXX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TOiBWSUVXX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TLFxuICBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9TVEFSVEVEOiBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9TVEFSVEVELFxuICBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9DT01QTEVURUQ6IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfRkFJTEVEOiBGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRUQsXG4gIEJMQUNLX0xJU1RFRF9DT05URU5UX1NVQlNDUklCRTogQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1VCU0NSSUJFLFxuICBGRVRDSF9GSUxURVJFRF9DT05URU5UX1NUQVJURUQ6IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRCxcbiAgRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9DT01QTEVURUQ6IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfQ09NUExFVEVELFxuICBGRVRDSF9GSUxURVJFRF9DT05URU5UX0ZBSUxFRDogRkVUQ0hfRklMVEVSRURfQ09OVEVOVF9GQUlMRUQsXG4gIEZJTFRFUkVEX0NPTlRFTlRfU1VCU0NSSUJFOiBGSUxURVJFRF9DT05URU5UX1NVQlNDUklCRSxcbiAgRkVUQ0hfQ09TVF9JTkZPX1NUQVJURUQ6IEZFVENIX0NPU1RfSU5GT19TVEFSVEVELFxuICBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVEOiBGRVRDSF9DT1NUX0lORk9fQ09NUExFVEVELFxuICBGRVRDSF9WSUVXX0NPVU5UX1NUQVJURUQ6IEZFVENIX1ZJRVdfQ09VTlRfU1RBUlRFRCxcbiAgRkVUQ0hfVklFV19DT1VOVF9GQUlMRUQ6IEZFVENIX1ZJRVdfQ09VTlRfRkFJTEVELFxuICBGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRDogRkVUQ0hfVklFV19DT1VOVF9DT01QTEVURUQsXG4gIEZFVENIX1NVQl9DT1VOVF9TVEFSVEVEOiBGRVRDSF9TVUJfQ09VTlRfU1RBUlRFRCxcbiAgRkVUQ0hfU1VCX0NPVU5UX0ZBSUxFRDogRkVUQ0hfU1VCX0NPVU5UX0ZBSUxFRCxcbiAgRkVUQ0hfU1VCX0NPVU5UX0NPTVBMRVRFRDogRkVUQ0hfU1VCX0NPVU5UX0NPTVBMRVRFRCxcbiAgR0VUX1NZTkNfU1RBUlRFRDogR0VUX1NZTkNfU1RBUlRFRCxcbiAgR0VUX1NZTkNfQ09NUExFVEVEOiBHRVRfU1lOQ19DT01QTEVURUQsXG4gIEdFVF9TWU5DX0ZBSUxFRDogR0VUX1NZTkNfRkFJTEVELFxuICBTRVRfU1lOQ19TVEFSVEVEOiBTRVRfU1lOQ19TVEFSVEVELFxuICBTRVRfU1lOQ19GQUlMRUQ6IFNFVF9TWU5DX0ZBSUxFRCxcbiAgU0VUX1NZTkNfQ09NUExFVEVEOiBTRVRfU1lOQ19DT01QTEVURUQsXG4gIFNFVF9ERUZBVUxUX0FDQ09VTlQ6IFNFVF9ERUZBVUxUX0FDQ09VTlQsXG4gIFNZTkNfQVBQTFlfU1RBUlRFRDogU1lOQ19BUFBMWV9TVEFSVEVELFxuICBTWU5DX0FQUExZX0NPTVBMRVRFRDogU1lOQ19BUFBMWV9DT01QTEVURUQsXG4gIFNZTkNfQVBQTFlfRkFJTEVEOiBTWU5DX0FQUExZX0ZBSUxFRCxcbiAgU1lOQ19BUFBMWV9CQURfUEFTU1dPUkQ6IFNZTkNfQVBQTFlfQkFEX1BBU1NXT1JELFxuICBTWU5DX1JFU0VUOiBTWU5DX1JFU0VULFxuICBVUERBVEVfVVBMT0FEX1BST0dSRVNTOiBVUERBVEVfVVBMT0FEX1BST0dSRVNTXG59KTtcblxuY29uc3QgTk9UX1RSQU5TRkVSUkVEID0gJ25vdF90cmFuc2ZlcnJlZCc7XG5jb25zdCBQRU5ESU5HX1RSQU5TRkVSID0gJ3BlbmRpbmdfdHJhbnNmZXInO1xuY29uc3QgQ09NUExFVEVEX1RSQU5TRkVSID0gJ2NvbXBsZXRlZF90cmFuc2Zlcic7XG5cbnZhciB5b3V0dWJlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBOT1RfVFJBTlNGRVJSRUQ6IE5PVF9UUkFOU0ZFUlJFRCxcbiAgUEVORElOR19UUkFOU0ZFUjogUEVORElOR19UUkFOU0ZFUixcbiAgQ09NUExFVEVEX1RSQU5TRkVSOiBDT01QTEVURURfVFJBTlNGRVJcbn0pO1xuXG5jb25zdCBBTFJFQURZX0NMQUlNRUQgPSAnb25jZSB0aGUgaW52aXRlIHJld2FyZCBoYXMgYmVlbiBjbGFpbWVkIHRoZSByZWZlcnJlciBjYW5ub3QgYmUgY2hhbmdlZCc7XG5jb25zdCBSRUZFUlJFUl9OT1RfRk9VTkQgPSAnQSBsYnJ5LnR2IGFjY291bnQgY291bGQgbm90IGJlIGZvdW5kIGZvciB0aGUgcmVmZXJyZXIgeW91IHByb3ZpZGVkLic7XG5cbnZhciBlcnJvcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIEFMUkVBRFlfQ0xBSU1FRDogQUxSRUFEWV9DTEFJTUVELFxuICBSRUZFUlJFUl9OT1RfRk9VTkQ6IFJFRkVSUkVSX05PVF9GT1VORFxufSk7XG5cbmNvbnN0IExicnlpbyA9IHtcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgYXV0aGVudGljYXRpb25Qcm9taXNlOiBudWxsLFxuICBleGNoYW5nZVByb21pc2U6IG51bGwsXG4gIGV4Y2hhbmdlTGFzdEZldGNoZWQ6IG51bGwsXG4gIENPTk5FQ1RJT05fU1RSSU5HOiAnaHR0cHM6Ly9hcGkubGJyeS5jb20vJ1xufTtcbmNvbnN0IEVYQ0hBTkdFX1JBVEVfVElNRU9VVCA9IDIwICogNjAgKiAxMDAwOyAvLyBXZSBjYW4ndCB1c2UgZW52J3MgYmVjYXVzZSB0aGV5IGFyZW4ndCBwYXNzZWQgaW50byBub2RlX21vZHVsZXNcblxuTGJyeWlvLnNldExvY2FsQXBpID0gZW5kcG9pbnQgPT4ge1xuICBMYnJ5aW8uQ09OTkVDVElPTl9TVFJJTkcgPSBlbmRwb2ludC5yZXBsYWNlKC9cXC8qJC8sICcvJyk7IC8vIGV4YWN0bHkgb25lIHNsYXNoIGF0IHRoZSBlbmQ7XG59O1xuXG5MYnJ5aW8uY2FsbCA9IChyZXNvdXJjZSwgYWN0aW9uLCBwYXJhbXMgPSB7fSwgbWV0aG9kID0gJ2dldCcpID0+IHtcbiAgaWYgKCFMYnJ5aW8uZW5hYmxlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoX18oJ0xCUlkgaW50ZXJuYWwgQVBJIGlzIGRpc2FibGVkJykpKTtcbiAgfVxuXG4gIGlmICghKG1ldGhvZCA9PT0gJ2dldCcgfHwgbWV0aG9kID09PSAncG9zdCcpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihfXygnSW52YWxpZCBtZXRob2QnKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tBbmRQYXJzZShyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oanNvbiA9PiB7XG4gICAgICBsZXQgZXJyb3I7XG5cbiAgICAgIGlmIChqc29uLmVycm9yKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKGpzb24uZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ1Vua25vd24gQVBJIGVycm9yIHNpZ25hdHVyZScpO1xuICAgICAgfVxuXG4gICAgICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlOyAvLyBUaGlzIGlzIHByaW1hcmlseSBhIGhhY2sgdXNlZCBpbiBhY3Rpb25zL3VzZXIuanNcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KHVybCwgb3B0aW9ucykge1xuICAgIHJldHVybiBmZXRjaCh1cmwsIG9wdGlvbnMpLnRoZW4oY2hlY2tBbmRQYXJzZSk7XG4gIH1cblxuICByZXR1cm4gTGJyeWlvLmdldEF1dGhUb2tlbigpLnRoZW4odG9rZW4gPT4ge1xuICAgIGNvbnN0IGZ1bGxQYXJhbXMgPSB7XG4gICAgICBhdXRoX3Rva2VuOiB0b2tlbixcbiAgICAgIC4uLnBhcmFtc1xuICAgIH07XG4gICAgT2JqZWN0LmtleXMoZnVsbFBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmdWxsUGFyYW1zW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZ1bGxQYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBxcyA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShmdWxsUGFyYW1zKTtcbiAgICBsZXQgdXJsID0gYCR7TGJyeWlvLkNPTk5FQ1RJT05fU1RSSU5HfSR7cmVzb3VyY2V9LyR7YWN0aW9ufT8ke3FzfWA7XG4gICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnXG4gICAgfTtcblxuICAgIGlmIChtZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogcXNcbiAgICAgIH07XG4gICAgICB1cmwgPSBgJHtMYnJ5aW8uQ09OTkVDVElPTl9TVFJJTkd9JHtyZXNvdXJjZX0vJHthY3Rpb259YDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJlcXVlc3QodXJsLCBvcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpO1xuICB9KTtcbn07XG5cbkxicnlpby5hdXRoVG9rZW4gPSBudWxsO1xuXG5MYnJ5aW8uZ2V0QXV0aFRva2VuID0gKCkgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gIGlmIChMYnJ5aW8uYXV0aFRva2VuKSB7XG4gICAgcmVzb2x2ZShMYnJ5aW8uYXV0aFRva2VuKTtcbiAgfSBlbHNlIGlmIChMYnJ5aW8ub3ZlcnJpZGVzLmdldEF1dGhUb2tlbikge1xuICAgIExicnlpby5vdmVycmlkZXMuZ2V0QXV0aFRva2VuKCkudGhlbih0b2tlbiA9PiB7XG4gICAgICByZXNvbHZlKHRva2VuKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlXG4gICAgfSA9IHdpbmRvdztcblxuICAgIGlmIChzdG9yZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgY29uc3QgdG9rZW4gPSBzdGF0ZS5hdXRoID8gc3RhdGUuYXV0aC5hdXRoVG9rZW4gOiBudWxsO1xuICAgICAgTGJyeWlvLmF1dGhUb2tlbiA9IHRva2VuO1xuICAgICAgcmVzb2x2ZSh0b2tlbik7XG4gICAgfVxuXG4gICAgcmVzb2x2ZShudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvbHZlKG51bGwpO1xuICB9XG59KTtcblxuTGJyeWlvLmdldEN1cnJlbnRVc2VyID0gKCkgPT4gTGJyeWlvLmNhbGwoJ3VzZXInLCAnbWUnKTtcblxuTGJyeWlvLmF1dGhlbnRpY2F0ZSA9ICgpID0+IHtcbiAgaWYgKCFMYnJ5aW8uZW5hYmxlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBpZDogMSxcbiAgICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgICAgIHByaW1hcnlfZW1haWw6ICdkaXNhYmxlZEBsYnJ5LmlvJyxcbiAgICAgICAgaGFzX3ZlcmlmaWVkX2VtYWlsOiB0cnVlLFxuICAgICAgICBpc19pZGVudGl0eV92ZXJpZmllZDogdHJ1ZSxcbiAgICAgICAgaXNfcmV3YXJkX2FwcHJvdmVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoTGJyeWlvLmF1dGhlbnRpY2F0aW9uUHJvbWlzZSA9PT0gbnVsbCkge1xuICAgIExicnlpby5hdXRoZW50aWNhdGlvblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBMYnJ5aW8uZ2V0QXV0aFRva2VuKCkudGhlbih0b2tlbiA9PiB7XG4gICAgICAgIGlmICghdG9rZW4gfHwgdG9rZW4ubGVuZ3RoID4gNjApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gLy8gY2hlY2sgdGhhdCB0b2tlbiB3b3Jrc1xuXG5cbiAgICAgICAgcmV0dXJuIExicnlpby5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB1c2VyKS5jYXRjaCgoKSA9PiBmYWxzZSk7XG4gICAgICB9KS50aGVuKHVzZXIgPT4ge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxicnlSZWR1eC5MYnJ5LnN0YXR1cygpLnRoZW4oc3RhdHVzID0+IHtcbiAgICAgICAgICBpZiAoTGJyeWlvLm92ZXJyaWRlcy5zZXRBdXRoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBMYnJ5aW8ub3ZlcnJpZGVzLnNldEF1dGhUb2tlbihzdGF0dXMpO1xuICAgICAgICAgIH0gLy8gc2ltcGx5IGNhbGwgdGhlIGxvZ2ljIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLCBhbmQgb2J0YWluIHRoZSBhdXRoIHRva2VuXG5cblxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIExicnlpby5jYWxsKCd1c2VyJywgJ25ldycsIHtcbiAgICAgICAgICAgICAgYXV0aF90b2tlbjogJycsXG4gICAgICAgICAgICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgICAgICAgICAgICBhcHBfaWQ6IHN0YXR1cy5pbnN0YWxsYXRpb25faWRcbiAgICAgICAgICAgIH0sICdwb3N0JykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuYXV0aF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXV0aF90b2tlbiB3YXMgbm90IHNldCBpbiB0aGUgcmVzcG9uc2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBzdG9yZVxuICAgICAgICAgICAgICB9ID0gd2luZG93O1xuXG4gICAgICAgICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IEdFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYXV0aFRva2VuOiByZXNwb25zZS5hdXRoX3Rva2VuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBMYnJ5aW8uYXV0aFRva2VuID0gcmVzcG9uc2UuYXV0aF90b2tlbjtcbiAgICAgICAgICAgICAgcmVzKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlaihlcnJvcikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLnRoZW4odXNlciA9PiB7XG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBMYnJ5aW8uZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgfSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIExicnlpby5hdXRoZW50aWNhdGlvblByb21pc2U7XG59O1xuXG5MYnJ5aW8uZ2V0U3RyaXBlVG9rZW4gPSAoKSA9PiBMYnJ5aW8uQ09OTkVDVElPTl9TVFJJTkcuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdDonKSA/ICdwa190ZXN0X05vTDFKV0w3aTFpcGZoVklkNUtmRFpnbycgOiAncGtfbGl2ZV9lOE00ZFJObkNDYm1wWnpkdUVVWkJnSk8nO1xuXG5MYnJ5aW8uZ2V0RXhjaGFuZ2VSYXRlcyA9ICgpID0+IHtcbiAgaWYgKCFMYnJ5aW8uZXhjaGFuZ2VMYXN0RmV0Y2hlZCB8fCBEYXRlLm5vdygpIC0gTGJyeWlvLmV4Y2hhbmdlTGFzdEZldGNoZWQgPiBFWENIQU5HRV9SQVRFX1RJTUVPVVQpIHtcbiAgICBMYnJ5aW8uZXhjaGFuZ2VQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgTGJyeWlvLmNhbGwoJ2xiYycsICdleGNoYW5nZV9yYXRlJywge30sICdnZXQnLCB0cnVlKS50aGVuKCh7XG4gICAgICAgIGxiY191c2Q6IExCQ19VU0QsXG4gICAgICAgIGxiY19idGM6IExCQ19CVEMsXG4gICAgICAgIGJ0Y191c2Q6IEJUQ19VU0RcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmF0ZXMgPSB7XG4gICAgICAgICAgTEJDX1VTRCxcbiAgICAgICAgICBMQkNfQlRDLFxuICAgICAgICAgIEJUQ19VU0RcbiAgICAgICAgfTtcbiAgICAgICAgcmVzb2x2ZShyYXRlcyk7XG4gICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICAgIExicnlpby5leGNoYW5nZUxhc3RGZXRjaGVkID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHJldHVybiBMYnJ5aW8uZXhjaGFuZ2VQcm9taXNlO1xufTsgLy8gQWxsb3cgb3ZlcnJpZGluZyBsYnJ5aW8gbWV0aG9kc1xuLy8gVGhlIGRlc2t0b3AgYXBwIHdpbGwgbmVlZCB0byB1c2UgaXQgZm9yIGdldEF1dGhUb2tlbiBiZWNhdXNlIHdlIHVzZSBlbGVjdHJvbidzIGlwY1JlbmRlcmVyXG5cblxuTGJyeWlvLm92ZXJyaWRlcyA9IHt9O1xuXG5MYnJ5aW8uc2V0T3ZlcnJpZGUgPSAobWV0aG9kTmFtZSwgbmV3TWV0aG9kKSA9PiB7XG4gIExicnlpby5vdmVycmlkZXNbbWV0aG9kTmFtZV0gPSBuZXdNZXRob2Q7XG59O1xuXG5jb25zdCByZXdhcmRzID0ge307XG5yZXdhcmRzLlRZUEVfTkVXX0RFVkVMT1BFUiA9ICduZXdfZGV2ZWxvcGVyJztcbnJld2FyZHMuVFlQRV9ORVdfVVNFUiA9ICduZXdfdXNlcic7XG5yZXdhcmRzLlRZUEVfQ09ORklSTV9FTUFJTCA9ICdlbWFpbF9wcm92aWRlZCc7XG5yZXdhcmRzLlRZUEVfRklSU1RfQ0hBTk5FTCA9ICduZXdfY2hhbm5lbCc7XG5yZXdhcmRzLlRZUEVfRklSU1RfU1RSRUFNID0gJ2ZpcnN0X3N0cmVhbSc7XG5yZXdhcmRzLlRZUEVfTUFOWV9ET1dOTE9BRFMgPSAnbWFueV9kb3dubG9hZHMnO1xucmV3YXJkcy5UWVBFX0ZJUlNUX1BVQkxJU0ggPSAnZmlyc3RfcHVibGlzaCc7XG5yZXdhcmRzLlRZUEVfUkVGRVJSQUwgPSAncmVmZXJyZXInO1xucmV3YXJkcy5UWVBFX1JFRkVSRUUgPSAncmVmZXJlZSc7XG5yZXdhcmRzLlRZUEVfUkVXQVJEX0NPREUgPSAncmV3YXJkX2NvZGUnO1xucmV3YXJkcy5UWVBFX1NVQlNDUklQVElPTiA9ICdzdWJzY3JpcHRpb24nO1xucmV3YXJkcy5ZT1VUVUJFX0NSRUFUT1IgPSAneW91dHViZV9jcmVhdG9yJztcbnJld2FyZHMuVFlQRV9EQUlMWV9WSUVXID0gJ2RhaWx5X3ZpZXcnO1xucmV3YXJkcy5UWVBFX05FV19BTkRST0lEID0gJ25ld19hbmRyb2lkJztcblxucmV3YXJkcy5jbGFpbVJld2FyZCA9ICh0eXBlLCByZXdhcmRQYXJhbXMpID0+IHtcbiAgZnVuY3Rpb24gcmVxdWVzdFJld2FyZChyZXNvbHZlLCByZWplY3QsIHBhcmFtcykge1xuICAgIGlmICghTGJyeWlvLmVuYWJsZWQpIHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoX18oJ1Jld2FyZHMgYXJlIG5vdCBlbmFibGVkLicpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTGJyeWlvLmNhbGwoJ3Jld2FyZCcsICdjbGFpbScsIHBhcmFtcywgJ3Bvc3QnKS50aGVuKHJld2FyZCA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gcmV3YXJkLnJld2FyZF9ub3RpZmljYXRpb24gfHwgYFlvdSBoYXZlIGNsYWltZWQgYSAke3Jld2FyZC5yZXdhcmRfYW1vdW50fSBMQkMgcmV3YXJkLmA7IC8vIERpc3BsYXkgZ2xvYmFsIG5vdGljZVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSBsYnJ5UmVkdXguZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGxpbmtUZXh0OiBfXygnU2hvdyBBbGwnKSxcbiAgICAgICAgbGlua1RhcmdldDogJy9yZXdhcmRzJ1xuICAgICAgfSk7XG4gICAgICB3aW5kb3cuc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgICAgaWYgKHJld2FyZHMuY2FsbGJhY2tzLmNsYWltUmV3YXJkU3VjY2Vzcykge1xuICAgICAgICByZXdhcmRzLmNhbGxiYWNrcy5jbGFpbVJld2FyZFN1Y2Nlc3MoKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShyZXdhcmQpO1xuICAgIH0sIHJlamVjdCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxicnlSZWR1eC5MYnJ5LmFkZHJlc3NfdW51c2VkKCkudGhlbihhZGRyZXNzID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcmV3YXJkX3R5cGU6IHR5cGUsXG4gICAgICAgIHdhbGxldF9hZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAuLi5yZXdhcmRQYXJhbXNcbiAgICAgIH07XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHJld2FyZHMuVFlQRV9GSVJTVF9DSEFOTkVMOlxuICAgICAgICAgIGxicnlSZWR1eC5MYnJ5LmNoYW5uZWxfbGlzdCh7XG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgcGFnZV9zaXplOiAxMFxuICAgICAgICAgIH0pLnRoZW4oY2xhaW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYWltID0gY2xhaW1zLml0ZW1zICYmIGNsYWltcy5pdGVtcy5maW5kKGZvdW5kQ2xhaW0gPT4gZm91bmRDbGFpbS5uYW1lLmxlbmd0aCAmJiBmb3VuZENsYWltLm5hbWVbMF0gPT09ICdAJyAmJiBmb3VuZENsYWltLnR4aWQubGVuZ3RoICYmIGZvdW5kQ2xhaW0udHlwZSA9PT0gJ2NsYWltJyk7XG5cbiAgICAgICAgICAgIGlmIChjbGFpbSkge1xuICAgICAgICAgICAgICBwYXJhbXMudHJhbnNhY3Rpb25faWQgPSBjbGFpbS50eGlkO1xuICAgICAgICAgICAgICByZXF1ZXN0UmV3YXJkKHJlc29sdmUsIHJlamVjdCwgcGFyYW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoX18oJ1BsZWFzZSBjcmVhdGUgYSBjaGFubmVsIGlkZW50aXR5IGZpcnN0LicpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHJld2FyZHMuVFlQRV9GSVJTVF9QVUJMSVNIOlxuICAgICAgICAgIGxicnlSZWR1eC5MYnJ5LnN0cmVhbV9saXN0KHtcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBwYWdlX3NpemU6IDEwXG4gICAgICAgICAgfSkudGhlbihjbGFpbXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhaW0gPSBjbGFpbXMuaXRlbXMgJiYgY2xhaW1zLml0ZW1zLmZpbmQoZm91bmRDbGFpbSA9PiBmb3VuZENsYWltLm5hbWUubGVuZ3RoICYmIGZvdW5kQ2xhaW0ubmFtZVswXSAhPT0gJ0AnICYmIGZvdW5kQ2xhaW0udHhpZC5sZW5ndGggJiYgZm91bmRDbGFpbS50eXBlID09PSAnY2xhaW0nKTtcblxuICAgICAgICAgICAgaWYgKGNsYWltKSB7XG4gICAgICAgICAgICAgIHBhcmFtcy50cmFuc2FjdGlvbl9pZCA9IGNsYWltLnR4aWQ7XG4gICAgICAgICAgICAgIHJlcXVlc3RSZXdhcmQocmVzb2x2ZSwgcmVqZWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGNsYWltcy5sZW5ndGggPyBuZXcgRXJyb3IoX18oJ1BsZWFzZSBwdWJsaXNoIHNvbWV0aGluZyBhbmQgd2FpdCBmb3IgY29uZmlybWF0aW9uIGJ5IHRoZSBuZXR3b3JrIHRvIGNsYWltIHRoaXMgcmV3YXJkLicpKSA6IG5ldyBFcnJvcihfXygnUGxlYXNlIHB1Ymxpc2ggc29tZXRoaW5nIHRvIGNsYWltIHRoaXMgcmV3YXJkLicpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHJld2FyZHMuVFlQRV9GSVJTVF9TVFJFQU06XG4gICAgICAgIGNhc2UgcmV3YXJkcy5UWVBFX05FV19VU0VSOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlcXVlc3RSZXdhcmQocmVzb2x2ZSwgcmVqZWN0LCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbnJld2FyZHMuY2FsbGJhY2tzID0ge1xuICAvLyBTZXQgYW55IGNhbGxiYWNrcyB0aGF0IHJlcXVpcmUgY29kZSBub3QgZm91bmQgaW4gdGhpcyBwcm9qZWN0XG4gIGNsYWltUmV3YXJkU3VjY2VzczogbnVsbCxcbiAgY2xhaW1GaXJzdFJld2FyZFN1Y2Nlc3M6IG51bGwsXG4gIHJld2FyZEFwcHJvdmFsUmVxdWlyZWQ6IG51bGxcbn07XG5cbnJld2FyZHMuc2V0Q2FsbGJhY2sgPSAobmFtZSwgbWV0aG9kKSA9PiB7XG4gIHJld2FyZHMuY2FsbGJhY2tzW25hbWVdID0gbWV0aG9kO1xufTtcblxuY29uc3QgVklFV19BTEwgPSAndmlld19hbGwnO1xuXG5jb25zdCBET1dOTE9BRElORyA9ICdET1dOTE9BRElORyc7XG5jb25zdCBOT1RJRllfT05MWSA9ICdOT1RJRllfT05MWTsnOyAvLyBTdWdnZXN0ZWQgdHlwZXNcbmNvbnN0IFNVR0dFU1RFRF9UT1BfU1VCU0NSSUJFRCA9ICd0b3Bfc3Vic2NyaWJlZCc7XG5jb25zdCBTVUdHRVNURURfRkVBVFVSRUQgPSAnZmVhdHVyZWQnO1xuXG4vLyB1dGlsIGZvciBjcmVhdGluZyByZWR1Y2Vyc1xuLy8gYmFzZWQgb2ZmIG9mIHJlZHV4LWFjdGlvbnNcbi8vIGh0dHBzOi8vcmVkdXgtYWN0aW9ucy5qcy5vcmcvZG9jcy9hcGkvaGFuZGxlQWN0aW9uLmh0bWwjaGFuZGxlYWN0aW9uc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbmNvbnN0IGhhbmRsZUFjdGlvbnMgPSAoYWN0aW9uTWFwLCBkZWZhdWx0U3RhdGUpID0+IChzdGF0ZSA9IGRlZmF1bHRTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBhY3Rpb25NYXBbYWN0aW9uLnR5cGVdO1xuXG4gIGlmIChoYW5kbGVyKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICB9IC8vIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGF0ZSBpZiBubyBoYW5kbGVyXG4gIC8vIHJldHVybmluZyBhIGNvcHkgaGVyZSBicmVha3MgcmVkdXgtcGVyc2lzdFxuXG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLy8gICAgICBcbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgZW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zOiBbXSxcbiAgc3Vic2NyaXB0aW9uczogW10sXG4gIGxhdGVzdDoge30sXG4gIHVucmVhZDoge30sXG4gIHN1Z2dlc3RlZDoge30sXG4gIGxvYWRpbmc6IGZhbHNlLFxuICB2aWV3TW9kZTogVklFV19BTEwsXG4gIGxvYWRpbmdTdWdnZXN0ZWQ6IGZhbHNlLFxuICBmaXJzdFJ1bkNvbXBsZXRlZDogZmFsc2UsXG4gIHNob3dTdWdnZXN0ZWRTdWJzOiBmYWxzZVxufTtcbnZhciBzdWJzY3JpcHRpb25zID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtDSEFOTkVMX1NVQlNDUklCRV06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgbmV3U3Vic2NyaXB0aW9uID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3U3Vic2NyaXB0aW9ucyA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc2xpY2UoKTtcblxuICAgIGlmICghbmV3U3Vic2NyaXB0aW9ucy5zb21lKHN1YiA9PiBzdWIudXJpID09PSBuZXdTdWJzY3JpcHRpb24udXJpKSkge1xuICAgICAgbmV3U3Vic2NyaXB0aW9ucy51bnNoaWZ0KG5ld1N1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBzdWJzY3JpcHRpb25zOiBuZXdTdWJzY3JpcHRpb25zXG4gICAgfTtcbiAgfSxcbiAgW0NIQU5ORUxfVU5TVUJTQ1JJQkVdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRvUmVtb3ZlID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3QgbmV3U3Vic2NyaXB0aW9ucyA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc2xpY2UoKS5maWx0ZXIoc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi5jaGFubmVsTmFtZSAhPT0gc3Vic2NyaXB0aW9uVG9SZW1vdmUuY2hhbm5lbE5hbWUpOyAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSAndW5yZWFkJyBzdGF0ZVxuXG4gICAgY29uc3Qge1xuICAgICAgdW5yZWFkXG4gICAgfSA9IHN0YXRlO1xuXG4gICAgaWYgKHVucmVhZFtzdWJzY3JpcHRpb25Ub1JlbW92ZS51cmldKSB7XG4gICAgICBkZWxldGUgdW5yZWFkW3N1YnNjcmlwdGlvblRvUmVtb3ZlLnVyaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICB1bnJlYWQ6IHsgLi4udW5yZWFkXG4gICAgICB9LFxuICAgICAgc3Vic2NyaXB0aW9uczogbmV3U3Vic2NyaXB0aW9uc1xuICAgIH07XG4gIH0sXG4gIFtTRVRfU1VCU0NSSVBUSU9OX0xBVEVTVF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgdXJpXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0xhdGVzdCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmxhdGVzdCk7XG4gICAgbmV3TGF0ZXN0W3N1YnNjcmlwdGlvbi51cmldID0gdXJpO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgbGF0ZXN0OiBuZXdMYXRlc3RcbiAgICB9O1xuICB9LFxuICBbVVBEQVRFX1NVQlNDUklQVElPTl9VTlJFQURTXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFubmVsLFxuICAgICAgdXJpcyxcbiAgICAgIHR5cGVcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICB1bnJlYWQ6IHsgLi4uc3RhdGUudW5yZWFkLFxuICAgICAgICBbY2hhbm5lbF06IHtcbiAgICAgICAgICB1cmlzLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIFtSRU1PVkVfU1VCU0NSSVBUSU9OX1VOUkVBRFNdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICB1cmlzXG4gICAgfSA9IGFjdGlvbi5kYXRhOyAvLyBJZiBubyBjaGFubmVsIGlzIHBhc3NlZCBpbiwgcmVtb3ZlIGFsbCB1bnJlYWRzXG5cbiAgICBsZXQgbmV3VW5yZWFkO1xuXG4gICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgIG5ld1VucmVhZCA9IHsgLi4uc3RhdGUudW5yZWFkXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXVyaXMpIHtcbiAgICAgICAgZGVsZXRlIG5ld1VucmVhZFtjaGFubmVsXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1VucmVhZFtjaGFubmVsXS51cmlzID0gdXJpcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VW5yZWFkID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICB1bnJlYWQ6IHsgLi4ubmV3VW5yZWFkXG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgW0NIQU5ORUxfU1VCU0NSSVBUSU9OX0VOQUJMRV9OT1RJRklDQVRJT05TXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucyA9IHN0YXRlLmVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5zbGljZSgpO1xuXG4gICAgaWYgKGNoYW5uZWxOYW1lICYmIGNoYW5uZWxOYW1lLnRyaW0oKS5sZW5ndGggPiAwICYmIG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5pbmRleE9mKGNoYW5uZWxOYW1lKSA9PT0gLTEpIHtcbiAgICAgIG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5wdXNoKGNoYW5uZWxOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9uczogbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfSxcbiAgW0NIQU5ORUxfU1VCU0NSSVBUSU9OX0RJU0FCTEVfTk9USUZJQ0FUSU9OU106IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgY2hhbm5lbE5hbWUgPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBuZXdFbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5lbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnMuc2xpY2UoKTtcbiAgICBjb25zdCBpbmRleCA9IG5ld0VuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucy5pbmRleE9mKGNoYW5uZWxOYW1lKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBuZXdFbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9uczogbmV3RW5hYmxlZENoYW5uZWxOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfSxcbiAgW0ZFVENIX1NVQlNDUklQVElPTlNfU1RBUlRdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nOiB0cnVlXG4gIH0pLFxuICBbRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgbG9hZGluZzogZmFsc2VcbiAgfSksXG4gIFtGRVRDSF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1NdOiAoc3RhdGUsIGFjdGlvbikgPT4gKHsgLi4uc3RhdGUsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgc3Vic2NyaXB0aW9uczogYWN0aW9uLmRhdGFcbiAgfSksXG4gIFtTRVRfVklFV19NT0RFXTogKHN0YXRlLCBhY3Rpb24pID0+ICh7IC4uLnN0YXRlLFxuICAgIHZpZXdNb2RlOiBhY3Rpb24uZGF0YVxuICB9KSxcbiAgW0dFVF9TVUdHRVNURURfU1VCU0NSSVBUSU9OU19TVEFSVF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IHRydWVcbiAgfSksXG4gIFtHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1VDQ0VTU106IChzdGF0ZSwgYWN0aW9uKSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBzdWdnZXN0ZWQ6IGFjdGlvbi5kYXRhLFxuICAgIGxvYWRpbmdTdWdnZXN0ZWQ6IGZhbHNlXG4gIH0pLFxuICBbR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX0ZBSUxdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nU3VnZ2VzdGVkOiBmYWxzZVxuICB9KSxcbiAgW1NVQlNDUklQVElPTl9GSVJTVF9SVU5fQ09NUExFVEVEXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgZmlyc3RSdW5Db21wbGV0ZWQ6IHRydWVcbiAgfSksXG4gIFtWSUVXX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TXTogc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgc2hvd1N1Z2dlc3RlZFN1YnM6IHRydWVcbiAgfSksXG4gIFtsYnJ5UmVkdXguQUNUSU9OUy5VU0VSX1NUQVRFX1BPUFVMQVRFXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25zXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGxldCBuZXdTdWJzY3JpcHRpb25zO1xuXG4gICAgaWYgKCFzdWJzY3JpcHRpb25zKSB7XG4gICAgICBuZXdTdWJzY3JpcHRpb25zID0gc3RhdGUuc3Vic2NyaXB0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyc2VkU3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMubWFwKHVyaSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICB9ID0gbGJyeVJlZHV4LnBhcnNlVVJJKHVyaSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXJpLFxuICAgICAgICAgIGNoYW5uZWxOYW1lOiBgQCR7Y2hhbm5lbE5hbWV9YFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3RhdGUuc3Vic2NyaXB0aW9ucyB8fCAhc3RhdGUuc3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucyA9IHBhcnNlZFN1YnNjcmlwdGlvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXAgPSB7fTtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucyA9IHBhcnNlZFN1YnNjcmlwdGlvbnMuY29uY2F0KHN0YXRlLnN1YnNjcmlwdGlvbnMpLmZpbHRlcihzdWIgPT4ge1xuICAgICAgICAgIHJldHVybiBtYXBbc3ViLnVyaV0gPyBmYWxzZSA6IG1hcFtzdWIudXJpXSA9IHRydWU7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IG5ld1N1YnNjcmlwdGlvbnNcbiAgICB9O1xuICB9XG59LCBkZWZhdWx0U3RhdGUpO1xuXG5mdW5jdGlvbiBzd2FwS2V5QW5kVmFsdWUoZGljdCkge1xuICBjb25zdCByZXQgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZGljdCkge1xuICAgIGlmIChkaWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldFtkaWN0W2tleV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmNvbnN0IHNlbGVjdFN0YXRlID0gc3RhdGUgPT4gc3RhdGUuc3Vic2NyaXB0aW9ucyB8fCB7fTsgLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBjaGFubmVsIHVyaXMgYSB1c2VyIGlzIHN1YnNjcmliZWQgdG9cblxuXG5jb25zdCBzZWxlY3RTdWJzY3JpcHRpb25zID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnN1YnNjcmlwdGlvbnMpOyAvLyBGZXRjaGluZyBsaXN0IG9mIHVzZXJzIHN1YnNjcmlwdGlvbnNcblxuY29uc3Qgc2VsZWN0SXNGZXRjaGluZ1N1YnNjcmlwdGlvbnMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc3RhdGUgPT4gc3RhdGUubG9hZGluZyk7IC8vIFRoZSBjdXJyZW50IHZpZXcgbW9kZSBvbiB0aGUgc3Vic2NyaXB0aW9ucyBwYWdlXG5cbmNvbnN0IHNlbGVjdFZpZXdNb2RlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnZpZXdNb2RlKTsgLy8gU3VnZ2VzdGVkIHN1YnNjcmlwdGlvbnMgZnJvbSBpbnRlcm5hbCBhcGlzXG5cbmNvbnN0IHNlbGVjdFN1Z2dlc3RlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5zdWdnZXN0ZWQpO1xuY29uc3Qgc2VsZWN0SXNGZXRjaGluZ1N1Z2dlc3RlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5sb2FkaW5nU3VnZ2VzdGVkKTtcbmNvbnN0IHNlbGVjdFN1Z2dlc3RlZENoYW5uZWxzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3Vic2NyaXB0aW9ucywgc2VsZWN0U3VnZ2VzdGVkLCAodXNlclN1YnNjcmlwdGlvbnMsIHN1Z2dlc3RlZCkgPT4ge1xuICBpZiAoIXN1Z2dlc3RlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFN3YXAgdGhlIGtleS92YWx1ZSBiZWNhdXNlIHdlIHdpbGwgdXNlIHRoZSB1cmkgZm9yIGV2ZXJ5dGhpbmcsIHRoaXMganVzdCBtYWtlcyBpdCBlYXNpZXJcbiAgLy8gc3VnZ2VzdGVkIGlzIHJldHVybmVkIGZyb20gdGhlIGFwaSB3aXRoIHRoZSBmb3JtOlxuICAvLyB7XG4gIC8vICAgZmVhdHVyZWQ6IHsgXCJDaGFubmVsIGxhYmVsXCI6IHVyaSwgLi4uIH0sXG4gIC8vICAgdG9wX3N1YnNjcmliZWQ6IHsgXCJAY2hhbm5lbFwiOiB1cmksIC4uLiB9XG4gIC8vICAgdG9wX2JpZDogeyBcIkBjaGFubmVsXCI6IHVyaSwgLi4uIH1cbiAgLy8gfVxuICAvLyBUbyBwcm9wZXJseSBjb21wYXJlIHRoZSBzdWdnZXN0ZWQgc3Vic2NyaXB0aW9ucyBmcm9tIG91ciBjdXJyZW50IHN1YnNjcmliZWQgY2hhbm5lbHNcbiAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSB1cmksIG5vdCB0aGUgbGFiZWxcbiAgLy8gV2UgYWxzbyBvbmx5IGNhcmUgYWJvdXQgdG9wX3N1YnNjcmliZWQgYW5kIGZlYXR1cmVkXG4gIC8vIHRvcF9iaWQgY291bGQganVzdCBiZSBwb3JuIG9yIGEgY2hhbm5lbCB3aXRoIG5vIGNvbnRlbnRcblxuXG4gIGNvbnN0IHRvcFN1YnNjcmliZWRTdWdnZXN0aW9ucyA9IHN3YXBLZXlBbmRWYWx1ZShzdWdnZXN0ZWRbU1VHR0VTVEVEX1RPUF9TVUJTQ1JJQkVEXSk7XG4gIGNvbnN0IGZlYXR1cmVkU3VnZ2VzdGlvbnMgPSBzd2FwS2V5QW5kVmFsdWUoc3VnZ2VzdGVkW1NVR0dFU1RFRF9GRUFUVVJFRF0pOyAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXNcbiAgLy8gSWYgYSB1cmkgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgc3VnZ2VzdGVkIG9iamVjdCwgYWRkIGl0XG5cbiAgY29uc3Qgc3VnZ2VzdGVkQ2hhbm5lbHMgPSB7IC4uLnRvcFN1YnNjcmliZWRTdWdnZXN0aW9uc1xuICB9O1xuICBPYmplY3Qua2V5cyhmZWF0dXJlZFN1Z2dlc3Rpb25zKS5mb3JFYWNoKHVyaSA9PiB7XG4gICAgaWYgKCFzdWdnZXN0ZWRDaGFubmVsc1t1cmldKSB7XG4gICAgICBjb25zdCBjaGFubmVsTGFiZWwgPSBmZWF0dXJlZFN1Z2dlc3Rpb25zW3VyaV07XG4gICAgICBzdWdnZXN0ZWRDaGFubmVsc1t1cmldID0gY2hhbm5lbExhYmVsO1xuICAgIH1cbiAgfSk7XG4gIHVzZXJTdWJzY3JpcHRpb25zLmZvckVhY2goKHtcbiAgICB1cmlcbiAgfSkgPT4ge1xuICAgIC8vIE5vdGUgdG8gcGFzc2VyIGJ5czpcbiAgICAvLyBNYXliZSB3ZSBzaG91bGQganVzdCByZW1vdmUgdGhlIGBsYnJ5Oi8vYCBwcmVmaXggZnJvbSBzdWJzY3JpcHRpb24gdXJpc1xuICAgIC8vIE1vc3QgcGxhY2VzIGRvbid0IHN0b3JlIHRoZW0gbGlrZSB0aGF0XG4gICAgY29uc3Qgc3Vic2NyaWJlZFVyaSA9IHVyaS5zbGljZSgnbGJyeTovLycubGVuZ3RoKTtcblxuICAgIGlmIChzdWdnZXN0ZWRDaGFubmVsc1tzdWJzY3JpYmVkVXJpXSkge1xuICAgICAgZGVsZXRlIHN1Z2dlc3RlZENoYW5uZWxzW3N1YnNjcmliZWRVcmldO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzdWdnZXN0ZWRDaGFubmVscykubWFwKHVyaSA9PiAoe1xuICAgIHVyaSxcbiAgICBsYWJlbDogc3VnZ2VzdGVkQ2hhbm5lbHNbdXJpXVxuICB9KSkuc2xpY2UoMCwgNSk7XG59KTtcbmNvbnN0IHNlbGVjdEZpcnN0UnVuQ29tcGxldGVkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLmZpcnN0UnVuQ29tcGxldGVkKTtcbmNvbnN0IHNlbGVjdFNob3dTdWdnZXN0ZWRTdWJzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHN0YXRlID0+IHN0YXRlLnNob3dTdWdnZXN0ZWRTdWJzKTsgLy8gRmV0Y2hpbmcgYW55IGNsYWltcyB0aGF0IGFyZSBhIHBhcnQgb2YgYSB1c2VycyBzdWJzY3JpcHRpb25zXG5cbmNvbnN0IHNlbGVjdFN1YnNjcmlwdGlvbnNCZWluZ0ZldGNoZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdWJzY3JpcHRpb25zLCBsYnJ5UmVkdXguc2VsZWN0QWxsRmV0Y2hpbmdDaGFubmVsQ2xhaW1zLCAoc3Vic2NyaXB0aW9ucywgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zKSA9PiB7XG4gIGNvbnN0IGZldGNoaW5nU3Vic2NyaXB0aW9uTWFwID0ge307XG4gIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4ge1xuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBmZXRjaGluZ0NoYW5uZWxDbGFpbXMgJiYgZmV0Y2hpbmdDaGFubmVsQ2xhaW1zW3N1Yi51cmldO1xuXG4gICAgaWYgKGlzRmV0Y2hpbmcpIHtcbiAgICAgIGZldGNoaW5nU3Vic2NyaXB0aW9uTWFwW3N1Yi51cmldID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmV0Y2hpbmdTdWJzY3JpcHRpb25NYXA7XG59KTtcbmNvbnN0IHNlbGVjdFVucmVhZEJ5Q2hhbm5lbCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS51bnJlYWQpOyAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRvdGFsIG9mIHVucmVhZCBzdWJzY3JpcHRpb25zXG5cbmNvbnN0IHNlbGVjdFVucmVhZEFtb3VudCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVucmVhZEJ5Q2hhbm5lbCwgdW5yZWFkQnlDaGFubmVsID0+IHtcbiAgY29uc3QgdW5yZWFkQ2hhbm5lbHMgPSBPYmplY3Qua2V5cyh1bnJlYWRCeUNoYW5uZWwpO1xuICBsZXQgYmFkZ2VzID0gMDtcblxuICBpZiAoIXVucmVhZENoYW5uZWxzLmxlbmd0aCkge1xuICAgIHJldHVybiBiYWRnZXM7XG4gIH1cblxuICB1bnJlYWRDaGFubmVscy5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgIGJhZGdlcyArPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbF0udXJpcy5sZW5ndGg7XG4gIH0pO1xuICByZXR1cm4gYmFkZ2VzO1xufSk7IC8vIFJldHVybnMgdGhlIHVyaXMgd2l0aCBjaGFubmVscyBhcyBhbiBhcnJheSB3aXRoIHRoZSBjaGFubmVsIHdpdGggdGhlIG5ld2VzdCBjb250ZW50IGZpcnN0XG4vLyBJZiB5b3UganVzdCB3YW50IHRoZSBgdW5yZWFkYCBzdGF0ZSwgdXNlIHNlbGVjdFVucmVhZFxuXG5jb25zdCBzZWxlY3RVbnJlYWRTdWJzY3JpcHRpb25zID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VW5yZWFkQW1vdW50LCBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsIGxicnlSZWR1eC5zZWxlY3RDbGFpbXNCeVVyaSwgKHVucmVhZEFtb3VudCwgdW5yZWFkQnlDaGFubmVsLCBjbGFpbXNCeVVyaSkgPT4ge1xuICAvLyBkZXRlcm1pbmUgd2hpY2ggY2hhbm5lbCBoYXMgdGhlIG5ld2VzdCBjb250ZW50XG4gIGNvbnN0IHVucmVhZExpc3QgPSBbXTtcblxuICBpZiAoIXVucmVhZEFtb3VudCkge1xuICAgIHJldHVybiB1bnJlYWRMaXN0O1xuICB9XG5cbiAgY29uc3QgY2hhbm5lbFVyaUxpc3QgPSBPYmplY3Qua2V5cyh1bnJlYWRCeUNoYW5uZWwpOyAvLyBUaGVyZSBpcyBvbmx5IG9uZSBjaGFubmVsIHdpdGggdW5yZWFkIG5vdGlmaWNhdGlvbnNcblxuICBpZiAodW5yZWFkQW1vdW50ID09PSAxKSB7XG4gICAgY2hhbm5lbFVyaUxpc3QuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHVucmVhZENoYW5uZWwgPSB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVyaXM6IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsXS51cmlzXG4gICAgICB9O1xuICAgICAgdW5yZWFkTGlzdC5wdXNoKHVucmVhZENoYW5uZWwpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bnJlYWRMaXN0O1xuICB9XG5cbiAgY2hhbm5lbFVyaUxpc3Quc29ydCgoY2hhbm5lbDEsIGNoYW5uZWwyKSA9PiB7XG4gICAgY29uc3QgbGF0ZXN0VXJpRnJvbUNoYW5uZWwxID0gdW5yZWFkQnlDaGFubmVsW2NoYW5uZWwxXS51cmlzWzBdO1xuICAgIGNvbnN0IGxhdGVzdENsYWltRnJvbUNoYW5uZWwxID0gY2xhaW1zQnlVcmlbbGF0ZXN0VXJpRnJvbUNoYW5uZWwxXSB8fCB7fTtcbiAgICBjb25zdCBsYXRlc3RVcmlGcm9tQ2hhbm5lbDIgPSB1bnJlYWRCeUNoYW5uZWxbY2hhbm5lbDJdLnVyaXNbMF07XG4gICAgY29uc3QgbGF0ZXN0Q2xhaW1Gcm9tQ2hhbm5lbDIgPSBjbGFpbXNCeVVyaVtsYXRlc3RVcmlGcm9tQ2hhbm5lbDJdIHx8IHt9O1xuICAgIGNvbnN0IGxhdGVzdEhlaWdodEZyb21DaGFubmVsMSA9IGxhdGVzdENsYWltRnJvbUNoYW5uZWwxLmhlaWdodCB8fCAwO1xuICAgIGNvbnN0IGxhdGVzdEhlaWdodEZyb21DaGFubmVsMiA9IGxhdGVzdENsYWltRnJvbUNoYW5uZWwyLmhlaWdodCB8fCAwO1xuXG4gICAgaWYgKGxhdGVzdEhlaWdodEZyb21DaGFubmVsMSAhPT0gbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwyKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwyIC0gbGF0ZXN0SGVpZ2h0RnJvbUNoYW5uZWwxO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgIGNvbnN0IHVucmVhZFN1YnNjcmlwdGlvbiA9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsXTtcbiAgICBjb25zdCB1bnJlYWRDaGFubmVsID0ge1xuICAgICAgY2hhbm5lbCxcbiAgICAgIHVyaXM6IHVucmVhZFN1YnNjcmlwdGlvbi51cmlzXG4gICAgfTtcbiAgICB1bnJlYWRMaXN0LnB1c2godW5yZWFkQ2hhbm5lbCk7XG4gIH0pO1xuICByZXR1cm4gdW5yZWFkTGlzdDtcbn0pOyAvLyBSZXR1cm5zIGFsbCB1bnJlYWQgc3Vic2NyaXB0aW9ucyBmb3IgYSB1cmkgcGFzc2VkIGluXG5cbmNvbnN0IG1ha2VTZWxlY3RVbnJlYWRCeUNoYW5uZWwgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VW5yZWFkQnlDaGFubmVsLCB1bnJlYWQgPT4gdW5yZWFkW3VyaV0pOyAvLyBSZXR1cm5zIHRoZSBmaXJzdCBwYWdlIG9mIGNsYWltcyBmb3IgZXZlcnkgY2hhbm5lbCBhIHVzZXIgaXMgc3Vic2NyaWJlZCB0b1xuXG5jb25zdCBzZWxlY3RTdWJzY3JpcHRpb25DbGFpbXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihsYnJ5UmVkdXguc2VsZWN0QWxsQ2xhaW1zQnlDaGFubmVsLCBsYnJ5UmVkdXguc2VsZWN0Q2xhaW1zQnlJZCwgc2VsZWN0U3Vic2NyaXB0aW9ucywgc2VsZWN0VW5yZWFkQnlDaGFubmVsLCAoY2hhbm5lbElkcywgYWxsQ2xhaW1zLCBzYXZlZFN1YnNjcmlwdGlvbnMsIHVucmVhZEJ5Q2hhbm5lbCkgPT4ge1xuICAvLyBubyBjbGFpbXMgbG9hZGVkIHlldFxuICBpZiAoIU9iamVjdC5rZXlzKGNoYW5uZWxJZHMpLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGxldCBmZXRjaGVkU3Vic2NyaXB0aW9ucyA9IFtdO1xuICBzYXZlZFN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgIGxldCBjaGFubmVsQ2xhaW1zID0gW107IC8vIGlmIHN1YnNjcmliZWQgY2hhbm5lbCBoYXMgY29udGVudFxuXG4gICAgaWYgKGNoYW5uZWxJZHNbc3Vic2NyaXB0aW9uLnVyaV0gJiYgY2hhbm5lbElkc1tzdWJzY3JpcHRpb24udXJpXVsnMSddKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgbmVlZCB0byBiZSBtb3JlIHJvYnVzdCwgd2Ugd2lsbCB3YW50IHRvIGJlIGFibGUgdG8gbG9hZCBtb3JlIHRoYW4gdGhlIGZpcnN0IHBhZ2VcbiAgICAgIC8vIFN0cmlwIG91dCBhbnkgaWRzIHRoYXQgd2lsbCBiZSBzaG93biBhcyBub3RpZmljYXRpb25zXG4gICAgICBjb25zdCBwYWdlT25lQ2hhbm5lbElkcyA9IGNoYW5uZWxJZHNbc3Vic2NyaXB0aW9uLnVyaV1bJzEnXTsgLy8gd2UgaGF2ZSB0aGUgY2hhbm5lbCBpZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltc1xuICAgICAgLy8gbG9vcCBvdmVyIHRoZSBsaXN0IG9mIGlkcyBhbmQgZ3JhYiB0aGUgY2xhaW1cblxuICAgICAgcGFnZU9uZUNoYW5uZWxJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIGNvbnN0IGdyYWJiZWRDbGFpbSA9IGFsbENsYWltc1tpZF07XG5cbiAgICAgICAgaWYgKHVucmVhZEJ5Q2hhbm5lbFtzdWJzY3JpcHRpb24udXJpXSAmJiB1bnJlYWRCeUNoYW5uZWxbc3Vic2NyaXB0aW9uLnVyaV0udXJpcy5zb21lKHVyaSA9PiB1cmkuaW5jbHVkZXMoaWQpKSkge1xuICAgICAgICAgIGdyYWJiZWRDbGFpbS5pc05ldyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFubmVsQ2xhaW1zID0gY2hhbm5lbENsYWltcy5jb25jYXQoW2dyYWJiZWRDbGFpbV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hlZFN1YnNjcmlwdGlvbnMgPSBmZXRjaGVkU3Vic2NyaXB0aW9ucy5jb25jYXQoY2hhbm5lbENsYWltcyk7XG4gIH0pO1xuICByZXR1cm4gZmV0Y2hlZFN1YnNjcmlwdGlvbnM7XG59KTsgLy8gUmV0dXJucyB0cnVlIGlmIGEgdXNlciBpcyBzdWJzY3JpYmVkIHRvIHRoZSBjaGFubmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXJpIHBhc3NlZCBpblxuLy8gQWNjZXB0cyBjb250ZW50IG9yIGNoYW5uZWwgdXJpc1xuXG5jb25zdCBtYWtlU2VsZWN0SXNTdWJzY3JpYmVkID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN1YnNjcmlwdGlvbnMsIGxicnlSZWR1eC5tYWtlU2VsZWN0Q2hhbm5lbEZvckNsYWltVXJpKHVyaSwgdHJ1ZSksIChzdWJzY3JpcHRpb25zLCBjaGFubmVsVXJpKSA9PiB7XG4gIGlmIChjaGFubmVsVXJpKSB7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbnMuc29tZShzdWIgPT4gc3ViLnVyaSA9PT0gY2hhbm5lbFVyaSk7XG4gIH0gLy8gSWYgd2UgY291bGRuJ3QgZ2V0IGEgY2hhbm5lbCB1cmkgZnJvbSB0aGUgY2xhaW0gdXJpLCB0aGUgdXJpIHBhc3NlZCBpbiBtaWdodCBiZSBhIGNoYW5uZWwgYWxyZWFkeVxuXG5cbiAgY29uc3Qge1xuICAgIGlzQ2hhbm5lbFxuICB9ID0gbGJyeVJlZHV4LnBhcnNlVVJJKHVyaSk7XG5cbiAgaWYgKGlzQ2hhbm5lbCkge1xuICAgIGNvbnN0IHVyaVdpdGhQcmVmaXggPSB1cmkuc3RhcnRzV2l0aCgnbGJyeTovLycpID8gdXJpIDogYGxicnk6Ly8ke3VyaX1gO1xuICAgIHJldHVybiBzdWJzY3JpcHRpb25zLnNvbWUoc3ViID0+IHN1Yi51cmkgPT09IHVyaVdpdGhQcmVmaXgpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5jb25zdCBtYWtlU2VsZWN0SXNOZXcgPSB1cmkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3IobWFrZVNlbGVjdElzU3Vic2NyaWJlZCh1cmkpLCBsYnJ5UmVkdXgubWFrZVNlbGVjdENoYW5uZWxGb3JDbGFpbVVyaSh1cmkpLCBzZWxlY3RVbnJlYWRCeUNoYW5uZWwsIChpc1N1YnNjcmliZWQsIGNoYW5uZWwsIHVucmVhZEJ5Q2hhbm5lbCkgPT4ge1xuICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHVucmVhZEZvckNoYW5uZWwgPSB1bnJlYWRCeUNoYW5uZWxbYGxicnk6Ly8ke2NoYW5uZWx9YF07XG5cbiAgaWYgKHVucmVhZEZvckNoYW5uZWwpIHtcbiAgICByZXR1cm4gdW5yZWFkRm9yQ2hhbm5lbC51cmlzLmluY2x1ZGVzKHVyaSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7IC8vIElmIHRoZXkgYXJlIHN1YnNjcmliZWQsIGNoZWNrIHRvIHNlZSBpZiB0aGlzIHVyaSBpcyBpbiB0aGUgbGlzdCBvZiB1bnJlYWRzXG59KTtcbmNvbnN0IHNlbGVjdEVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzdGF0ZSA9PiBzdGF0ZS5lbmFibGVkQ2hhbm5lbE5vdGlmaWNhdGlvbnMpO1xuXG5jb25zdCBwZXJzaXN0U2hhcGUgPSB7XG4gIHZlcnNpb246ICcwJyxcbiAgc2hhcmVkOiB7fVxufTtcbmZ1bmN0aW9uIHVzZXJTdGF0ZVN5bmNNaWRkbGV3YXJlKCkge1xuICByZXR1cm4gKHtcbiAgICBnZXRTdGF0ZVxuICB9KSA9PiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBDSEFOTkVMX1NVQlNDUklCRSB8fCBhY3Rpb24udHlwZSA9PT0gQ0hBTk5FTF9VTlNVQlNDUklCRSB8fCBhY3Rpb24udHlwZSA9PT0gbGJyeVJlZHV4LkFDVElPTlMuVE9HR0xFX1RBR19GT0xMT1cpIHtcbiAgICAgIGNvbnN0IG5ld1NoYXBlID0geyAuLi5wZXJzaXN0U2hhcGVcbiAgICAgIH07XG4gICAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gc2VsZWN0U3Vic2NyaXB0aW9ucyhzdGF0ZSkubWFwKCh7XG4gICAgICAgIHVyaVxuICAgICAgfSkgPT4gdXJpKTtcbiAgICAgIGNvbnN0IHRhZ3MgPSBsYnJ5UmVkdXguc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKTtcbiAgICAgIG5ld1NoYXBlLnNoYXJlZC5zdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucztcbiAgICAgIG5ld1NoYXBlLnNoYXJlZC50YWdzID0gdGFncztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdXJpXG4gICAgICB9ID0gYWN0aW9uLmRhdGE7XG5cbiAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQ0hBTk5FTF9TVUJTQ1JJQkUpIHtcbiAgICAgICAgY29uc3QgbmV3U3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMuc2xpY2UoKTtcbiAgICAgICAgbmV3U3Vic2NyaXB0aW9ucy5wdXNoKHVyaSk7XG4gICAgICAgIG5ld1NoYXBlLnNoYXJlZC5zdWJzY3JpcHRpb25zID0gbmV3U3Vic2NyaXB0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IENIQU5ORUxfVU5TVUJTQ1JJQkUpIHtcbiAgICAgICAgbGV0IG5ld1N1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLnNsaWNlKCk7XG4gICAgICAgIG5ld1N1YnNjcmlwdGlvbnMgPSBuZXdTdWJzY3JpcHRpb25zLmZpbHRlcihzdWJzY3JpYmVkVXJpID0+IHN1YnNjcmliZWRVcmkgIT09IHVyaSk7XG4gICAgICAgIG5ld1NoYXBlLnNoYXJlZC5zdWJzY3JpcHRpb25zID0gbmV3U3Vic2NyaXB0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRvZ2dsZWRUYWcgPSBhY3Rpb24uZGF0YS5uYW1lO1xuICAgICAgICBjb25zdCBmb2xsb3dlZFRhZ3MgPSBsYnJ5UmVkdXguc2VsZWN0Rm9sbG93ZWRUYWdzKHN0YXRlKS5tYXAoKHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0pID0+IG5hbWUpO1xuICAgICAgICBjb25zdCBpc0ZvbGxvd2luZyA9IGxicnlSZWR1eC5tYWtlU2VsZWN0SXNGb2xsb3dpbmdUYWcodG9nZ2xlZFRhZykoc3RhdGUpO1xuICAgICAgICBsZXQgbmV3VGFncyA9IGZvbGxvd2VkVGFncy5zbGljZSgpO1xuXG4gICAgICAgIGlmIChpc0ZvbGxvd2luZykge1xuICAgICAgICAgIG5ld1RhZ3MgPSBuZXdUYWdzLmZpbHRlcihmb2xsb3dlZFRhZyA9PiBmb2xsb3dlZFRhZy5uYW1lICE9PSB0b2dnbGVkVGFnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdUYWdzLnB1c2godG9nZ2xlZFRhZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdTaGFwZS5zaGFyZWQudGFncyA9IG5ld1RhZ3M7XG4gICAgICB9XG5cbiAgICAgIExicnlpby5jYWxsKCd1c2VyX3NldHRpbmdzJywgJ3NldCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IG5ld1NoYXBlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICB9O1xufVxuXG5jb25zdCBhcGlCYXNlVXJsID0gJ2h0dHBzOi8vd3d3LnRyYW5zaWZleC5jb20vYXBpLzIvcHJvamVjdCc7XG5jb25zdCByZXNvdXJjZSA9ICdhcHAtc3RyaW5ncyc7XG5mdW5jdGlvbiBkb1RyYW5zaWZleFVwbG9hZChjb250ZW50cywgcHJvamVjdCwgdG9rZW4sIHN1Y2Nlc3MsIGZhaWwpIHtcbiAgY29uc3QgdXJsID0gYCR7YXBpQmFzZVVybH0vJHtwcm9qZWN0fS9yZXNvdXJjZXMvYDtcbiAgY29uc3QgdXBkYXRlVXJsID0gYCR7YXBpQmFzZVVybH0vJHtwcm9qZWN0fS9yZXNvdXJjZS8ke3Jlc291cmNlfS9jb250ZW50L2A7XG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYGFwaToke3Rva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgfTtcbiAgY29uc3QgcmVxID0ge1xuICAgIGFjY2VwdF90cmFuc2xhdGlvbnM6IHRydWUsXG4gICAgaTE4bl90eXBlOiAnS0VZVkFMVUVKU09OJyxcbiAgICBuYW1lOiByZXNvdXJjZSxcbiAgICBzbHVnOiByZXNvdXJjZSxcbiAgICBjb250ZW50OiBjb250ZW50c1xuICB9O1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHRleHQpIHtcbiAgICBsZXQganNvbjtcblxuICAgIHRyeSB7XG4gICAgICAvLyB0cmFuc2lmZXggYXBpIHJldHVybnMgUHl0aG9uIGRpY3RzIGZvciBzb21lIHJlYXNvbi5cbiAgICAgIC8vIEFueSB3YXkgdG8gZ2V0IHRoZSBhcGkgdG8gcmV0dXJuIHZhbGlkIEpTT04/XG4gICAgICBqc29uID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7Ly8gaWdub3JlXG4gICAgfVxuXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MoanNvbiB8fCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICBpZiAoZmFpbCkge1xuICAgICAgZmFpbChlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogJ0NvdWxkIG5vdCB1cGxvYWQgc3RyaW5ncyByZXNvdXJjZSB0byBUcmFuc2lmZXgnKTtcbiAgICB9XG4gIH0gLy8gY2hlY2sgaWYgdGhlIHJlc291cmNlIGV4aXN0c1xuXG5cbiAgZmV0Y2godXBkYXRlVXJsLCB7XG4gICAgaGVhZGVyc1xuICB9KS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSkudGhlbigoKSA9PiB7XG4gICAgLy8gcGVyZm9ybSBhbiB1cGRhdGVcbiAgICBmZXRjaCh1cGRhdGVVcmwsIHtcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50c1xuICAgICAgfSlcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgIT09IDIwMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byB1cGRhdGUgdHJhbnNpZmV4Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfSkudGhlbihoYW5kbGVSZXNwb25zZSkuY2F0Y2goaGFuZGxlRXJyb3IpO1xuICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gcmVzb3VyY2UgZG9lc24ndCBleGlzdCwgY3JlYXRlIGEgZnJlc2ggcmVzb3VyY2VcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcSlcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgIT09IDIwMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byB1cGxvYWQgdG8gdHJhbnNpZmV4Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfSkudGhlbihoYW5kbGVSZXNwb25zZSkuY2F0Y2goaGFuZGxlRXJyb3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZG9HZW5lcmF0ZUF1dGhUb2tlbihpbnN0YWxsYXRpb25JZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEdFTkVSQVRFX0FVVEhfVE9LRU5fU1RBUlRFRFxuICAgIH0pO1xuICAgIExicnlpby5jYWxsKCd1c2VyJywgJ25ldycsIHtcbiAgICAgIGF1dGhfdG9rZW46ICcnLFxuICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgICBhcHBfaWQ6IGluc3RhbGxhdGlvbklkXG4gICAgfSwgJ3Bvc3QnKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghcmVzcG9uc2UuYXV0aF90b2tlbikge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VORVJBVEVfQVVUSF9UT0tFTl9GQUlMVVJFXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEdFTkVSQVRFX0FVVEhfVE9LRU5fU1VDQ0VTUyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhdXRoVG9rZW46IHJlc3BvbnNlLmF1dGhfdG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogR0VORVJBVEVfQVVUSF9UT0tFTl9GQUlMVVJFXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuY29uc3Qgc2VsZWN0U3RhdGUkMSA9IHN0YXRlID0+IHN0YXRlLnJld2FyZHMgfHwge307XG5cbmNvbnN0IHNlbGVjdFVuY2xhaW1lZFJld2FyZHNCeVR5cGUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS51bmNsYWltZWRSZXdhcmRzQnlUeXBlKTtcbmNvbnN0IHNlbGVjdENsYWltZWRSZXdhcmRzQnlJZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+IHN0YXRlLmNsYWltZWRSZXdhcmRzQnlJZCk7XG5jb25zdCBzZWxlY3RDbGFpbWVkUmV3YXJkcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdENsYWltZWRSZXdhcmRzQnlJZCwgYnlJZCA9PiBPYmplY3QudmFsdWVzKGJ5SWQpIHx8IFtdKTtcbmNvbnN0IHNlbGVjdENsYWltZWRSZXdhcmRzQnlUcmFuc2FjdGlvbklkID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q2xhaW1lZFJld2FyZHMsIHJld2FyZHMgPT4gcmV3YXJkcy5yZWR1Y2UoKG1hcFBhcmFtLCByZXdhcmQpID0+IHtcbiAgY29uc3QgbWFwID0gbWFwUGFyYW07XG4gIG1hcFtyZXdhcmQudHJhbnNhY3Rpb25faWRdID0gcmV3YXJkO1xuICByZXR1cm4gbWFwO1xufSwge30pKTtcbmNvbnN0IHNlbGVjdFVuY2xhaW1lZFJld2FyZHMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS51bmNsYWltZWRSZXdhcmRzKTtcbmNvbnN0IHNlbGVjdEZldGNoaW5nUmV3YXJkcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDEsIHN0YXRlID0+ICEhc3RhdGUuZmV0Y2hpbmcpO1xuY29uc3Qgc2VsZWN0VW5jbGFpbWVkUmV3YXJkVmFsdWUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVbmNsYWltZWRSZXdhcmRzLCByZXdhcmRzID0+IHJld2FyZHMucmVkdWNlKChzdW0sIHJld2FyZCkgPT4gc3VtICsgcmV3YXJkLnJld2FyZF9hbW91bnQsIDApKTtcbmNvbnN0IHNlbGVjdENsYWltc1BlbmRpbmdCeVR5cGUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5jbGFpbVBlbmRpbmdCeVR5cGUpO1xuXG5jb25zdCBzZWxlY3RJc0NsYWltUmV3YXJkUGVuZGluZyA9IChzdGF0ZSwgcHJvcHMpID0+IHNlbGVjdENsYWltc1BlbmRpbmdCeVR5cGUoc3RhdGUsIHByb3BzKVtwcm9wcy5yZXdhcmRfdHlwZV07XG5cbmNvbnN0IG1ha2VTZWxlY3RJc1Jld2FyZENsYWltUGVuZGluZyA9ICgpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdElzQ2xhaW1SZXdhcmRQZW5kaW5nLCBpc0NsYWltaW5nID0+IGlzQ2xhaW1pbmcpO1xuY29uc3Qgc2VsZWN0Q2xhaW1FcnJvcnNCeVR5cGUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQxLCBzdGF0ZSA9PiBzdGF0ZS5jbGFpbUVycm9yc0J5VHlwZSk7XG5cbmNvbnN0IHNlbGVjdENsYWltUmV3YXJkRXJyb3IgPSAoc3RhdGUsIHByb3BzKSA9PiBzZWxlY3RDbGFpbUVycm9yc0J5VHlwZShzdGF0ZSwgcHJvcHMpW3Byb3BzLnJld2FyZF90eXBlXTtcblxuY29uc3QgbWFrZVNlbGVjdENsYWltUmV3YXJkRXJyb3IgPSAoKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RDbGFpbVJld2FyZEVycm9yLCBlcnJvck1lc3NhZ2UgPT4gZXJyb3JNZXNzYWdlKTtcblxuY29uc3Qgc2VsZWN0UmV3YXJkQnlUeXBlID0gKHN0YXRlLCByZXdhcmRUeXBlKSA9PiBzZWxlY3RVbmNsYWltZWRSZXdhcmRzKHN0YXRlKS5maW5kKHJld2FyZCA9PiByZXdhcmQucmV3YXJkX3R5cGUgPT09IHJld2FyZFR5cGUpO1xuXG5jb25zdCBtYWtlU2VsZWN0UmV3YXJkQnlUeXBlID0gKCkgPT4gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0UmV3YXJkQnlUeXBlLCByZXdhcmQgPT4gcmV3YXJkKTtcblxuY29uc3Qgc2VsZWN0UmV3YXJkQnlDbGFpbUNvZGUgPSAoc3RhdGUsIGNsYWltQ29kZSkgPT4gc2VsZWN0VW5jbGFpbWVkUmV3YXJkcyhzdGF0ZSkuZmluZChyZXdhcmQgPT4gcmV3YXJkLmNsYWltX2NvZGUgPT09IGNsYWltQ29kZSk7XG5cbmNvbnN0IG1ha2VTZWxlY3RSZXdhcmRCeUNsYWltQ29kZSA9ICgpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFJld2FyZEJ5Q2xhaW1Db2RlLCByZXdhcmQgPT4gcmV3YXJkKTtcbmNvbnN0IG1ha2VTZWxlY3RSZXdhcmRBbW91bnRCeVR5cGUgPSAoKSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RSZXdhcmRCeVR5cGUsIHJld2FyZCA9PiByZXdhcmQgPyByZXdhcmQucmV3YXJkX2Ftb3VudCA6IDApO1xuY29uc3Qgc2VsZWN0UmV3YXJkQ29udGVudENsYWltSWRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMSwgc3RhdGUgPT4gc3RhdGUucmV3YXJkZWRDb250ZW50Q2xhaW1JZHMpO1xuY29uc3Qgc2VsZWN0UmVmZXJyYWxSZXdhcmQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVbmNsYWltZWRSZXdhcmRzLCB1bmNsYWltZWRSZXdhcmRzID0+IHVuY2xhaW1lZFJld2FyZHMuZmlsdGVyKHJld2FyZCA9PiByZXdhcmQucmV3YXJkX3R5cGUgPT09IHJld2FyZHMuVFlQRV9SRUZFUlJBTClbMF0pO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQyID0gc3RhdGUgPT4gc3RhdGUudXNlciB8fCB7fTtcbmNvbnN0IHNlbGVjdEF1dGhlbnRpY2F0aW9uSXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuYXV0aGVudGljYXRpb25Jc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0VXNlcklzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnVzZXJJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0VXNlciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnVzZXIpO1xuY29uc3Qgc2VsZWN0RW1haWxBbHJlYWR5RXhpc3RzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuZW1haWxBbHJlYWR5RXhpc3RzKTtcbmNvbnN0IHNlbGVjdFJlc2VuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucmVzZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwpO1xuY29uc3Qgc2VsZWN0VXNlckVtYWlsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyID8gdXNlci5wcmltYXJ5X2VtYWlsIDogbnVsbCk7XG5jb25zdCBzZWxlY3RVc2VyUGhvbmUgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VyLCB1c2VyID0+IHVzZXIgPyB1c2VyLnBob25lX251bWJlciA6IG51bGwpO1xuY29uc3Qgc2VsZWN0VXNlckNvdW50cnlDb2RlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyID8gdXNlci5jb3VudHJ5X2NvZGUgOiBudWxsKTtcbmNvbnN0IHNlbGVjdEVtYWlsVG9WZXJpZnkgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzZWxlY3RVc2VyRW1haWwsIChzdGF0ZSwgdXNlckVtYWlsKSA9PiBzdGF0ZS5lbWFpbFRvVmVyaWZ5IHx8IHVzZXJFbWFpbCk7XG5jb25zdCBzZWxlY3RQaG9uZVRvVmVyaWZ5ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc2VsZWN0VXNlclBob25lLCAoc3RhdGUsIHVzZXJQaG9uZSkgPT4gc3RhdGUucGhvbmVUb1ZlcmlmeSB8fCB1c2VyUGhvbmUpO1xuY29uc3Qgc2VsZWN0WW91dHViZUNoYW5uZWxzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyID8gdXNlci55b3V0dWJlX2NoYW5uZWxzIDogbnVsbCk7XG5jb25zdCBzZWxlY3RVc2VySXNSZXdhcmRBcHByb3ZlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVzZXIsIHVzZXIgPT4gdXNlciAmJiB1c2VyLmlzX3Jld2FyZF9hcHByb3ZlZCk7XG5jb25zdCBzZWxlY3RFbWFpbE5ld0lzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmVtYWlsTmV3SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdEVtYWlsTmV3RXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuZW1haWxOZXdFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0UGhvbmVOZXdFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5waG9uZU5ld0Vycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RFbWFpbFZlcmlmeUlzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmVtYWlsVmVyaWZ5SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdEVtYWlsVmVyaWZ5RXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuZW1haWxWZXJpZnlFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0UGhvbmVOZXdJc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5waG9uZU5ld0lzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RQaG9uZVZlcmlmeUlzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnBob25lVmVyaWZ5SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFBob25lVmVyaWZ5RXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUucGhvbmVWZXJpZnlFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0SWRlbnRpdHlWZXJpZnlJc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5pZGVudGl0eVZlcmlmeUlzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RJZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmlkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdFVzZXJWZXJpZmllZEVtYWlsID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0VXNlciwgdXNlciA9PiB1c2VyICYmIHVzZXIuaGFzX3ZlcmlmaWVkX2VtYWlsKTtcbmNvbnN0IHNlbGVjdFVzZXJJc1ZlcmlmaWNhdGlvbkNhbmRpZGF0ZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFVzZXIsIHVzZXIgPT4gdXNlciAmJiAoIXVzZXIuaGFzX3ZlcmlmaWVkX2VtYWlsIHx8ICF1c2VyLmlzX2lkZW50aXR5X3ZlcmlmaWVkKSk7XG5jb25zdCBzZWxlY3RBY2Nlc3NUb2tlbiA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmFjY2Vzc1Rva2VuKTtcbmNvbnN0IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNJc1BlbmRpbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5pbnZpdGVTdGF0dXNJc1BlbmRpbmcpO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZXNSZW1haW5pbmcgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5pbnZpdGVzUmVtYWluaW5nKTtcbmNvbnN0IHNlbGVjdFVzZXJJbnZpdGVlcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmludml0ZWVzKTtcbmNvbnN0IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNGYWlsZWQgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RVc2VySW52aXRlc1JlbWFpbmluZywgKCkgPT4gc2VsZWN0VXNlckludml0ZXNSZW1haW5pbmcgPT09IG51bGwpO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZU5ld0lzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLmludml0ZU5ld0lzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RVc2VySW52aXRlTmV3RXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUuaW52aXRlTmV3RXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbExpbmsgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZWZlcnJhbExpbmspO1xuY29uc3Qgc2VsZWN0VXNlckludml0ZVJlZmVycmFsQ29kZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnJlZmVycmFsQ29kZSA/IHN0YXRlLnJlZmVycmFsQ29kZVswXSA6ICcnKTtcbmNvbnN0IHNlbGVjdFlvdVR1YmVJbXBvcnRQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkMiwgc3RhdGUgPT4gc3RhdGUueW91dHViZUNoYW5uZWxJbXBvcnRQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFlvdVR1YmVJbXBvcnRFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnlvdXR1YmVDaGFubmVsSW1wb3J0RXJyb3JNZXNzYWdlKTtcbmNvbnN0IHNlbGVjdFNldFJlZmVycmVyUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHN0YXRlLnJlZmVycmVyU2V0SXNQZW5kaW5nKTtcbmNvbnN0IHNlbGVjdFNldFJlZmVycmVyRXJyb3IgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQyLCBzdGF0ZSA9PiBzdGF0ZS5yZWZlcnJlclNldEVycm9yKTtcbmNvbnN0IHNlbGVjdFlvdVR1YmVJbXBvcnRWaWRlb3NDb21wbGV0ZSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDIsIHN0YXRlID0+IHtcbiAgY29uc3QgdG90YWwgPSBzdGF0ZS55b3V0dWJlQ2hhbm5lbEltcG9ydFRvdGFsO1xuICBjb25zdCBjb21wbGV0ZSA9IHN0YXRlLnlvdXR1YmVDaGFubmVsSW1wb3J0Q29tcGxldGUgfHwgMDtcblxuICBpZiAodG90YWwpIHtcbiAgICByZXR1cm4gW2NvbXBsZXRlLCB0b3RhbF07XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBkb0ZldGNoSW52aXRlU3RhdHVzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVEXG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoW0xicnlpby5jYWxsKCd1c2VyJywgJ2ludml0ZV9zdGF0dXMnKSwgTGJyeWlvLmNhbGwoJ3VzZXJfcmVmZXJyYWxfY29kZScsICdsaXN0JyldKS50aGVuKChbc3RhdHVzLCBjb2RlXSkgPT4ge1xuICAgICAgZGlzcGF0Y2goZG9SZXdhcmRMaXN0KCkpO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0lOVklURV9TVEFUVVNfRkVUQ0hfU1VDQ0VTUyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGludml0ZXNSZW1haW5pbmc6IHN0YXR1cy5pbnZpdGVzX3JlbWFpbmluZyA/IHN0YXR1cy5pbnZpdGVzX3JlbWFpbmluZyA6IDAsXG4gICAgICAgICAgaW52aXRlZXM6IHN0YXR1cy5pbnZpdGVlcyxcbiAgICAgICAgICByZWZlcnJhbExpbms6IGAke0xicnlpby5DT05ORUNUSU9OX1NUUklOR311c2VyL3JlZmVyP3I9JHtjb2RlfWAsXG4gICAgICAgICAgcmVmZXJyYWxDb2RlOiBjb2RlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvSW5zdGFsbE5ldyhhcHBWZXJzaW9uLCBvcyA9IG51bGwsIGZpcmViYXNlVG9rZW4gPSBudWxsLCBjYWxsYmFja0ZvclVzZXJzV2hvQXJlU2hhcmluZ0RhdGEpIHtcbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBhcHBfdmVyc2lvbjogYXBwVmVyc2lvblxuICB9O1xuXG4gIGlmIChmaXJlYmFzZVRva2VuKSB7XG4gICAgcGF5bG9hZC5maXJlYmFzZV90b2tlbiA9IGZpcmViYXNlVG9rZW47XG4gIH1cblxuICBsYnJ5UmVkdXguTGJyeS5zdGF0dXMoKS50aGVuKHN0YXR1cyA9PiB7XG4gICAgcGF5bG9hZC5hcHBfaWQgPSBzdGF0dXMuaW5zdGFsbGF0aW9uX2lkO1xuICAgIHBheWxvYWQubm9kZV9pZCA9IHN0YXR1cy5sYnJ5X2lkO1xuICAgIGxicnlSZWR1eC5MYnJ5LnZlcnNpb24oKS50aGVuKHZlcnNpb24gPT4ge1xuICAgICAgcGF5bG9hZC5kYWVtb25fdmVyc2lvbiA9IHZlcnNpb24ubGJyeW5ldF92ZXJzaW9uO1xuICAgICAgcGF5bG9hZC5vcGVyYXRpbmdfc3lzdGVtID0gb3MgfHwgdmVyc2lvbi5vc19zeXN0ZW07XG4gICAgICBwYXlsb2FkLnBsYXRmb3JtID0gdmVyc2lvbi5wbGF0Zm9ybTtcbiAgICAgIExicnlpby5jYWxsKCdpbnN0YWxsJywgJ25ldycsIHBheWxvYWQpO1xuXG4gICAgICBpZiAoY2FsbGJhY2tGb3JVc2Vyc1dob0FyZVNoYXJpbmdEYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrRm9yVXNlcnNXaG9BcmVTaGFyaW5nRGF0YShzdGF0dXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRvSW5zdGFsbE5ld1dpdGhQYXJhbXMoYXBwVmVyc2lvbiwgaW5zdGFsbGF0aW9uSWQsIG5vZGVJZCwgbGJyeW5ldFZlcnNpb24sIG9zLCBwbGF0Zm9ybSwgZmlyZWJhc2VUb2tlbiA9IG51bGwpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYXBwX3ZlcnNpb246IGFwcFZlcnNpb25cbiAgICB9O1xuXG4gICAgaWYgKGZpcmViYXNlVG9rZW4pIHtcbiAgICAgIHBheWxvYWQuZmlyZWJhc2VfdG9rZW4gPSBmaXJlYmFzZVRva2VuO1xuICAgIH1cblxuICAgIHBheWxvYWQuYXBwX2lkID0gaW5zdGFsbGF0aW9uSWQ7XG4gICAgcGF5bG9hZC5ub2RlX2lkID0gbm9kZUlkO1xuICAgIHBheWxvYWQuZGFlbW9uX3ZlcnNpb24gPSBsYnJ5bmV0VmVyc2lvbjtcbiAgICBwYXlsb2FkLm9wZXJhdGluZ19zeXN0ZW0gPSBvcztcbiAgICBwYXlsb2FkLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgTGJyeWlvLmNhbGwoJ2luc3RhbGwnLCAnbmV3JywgcGF5bG9hZCk7XG4gIH07XG59IC8vIFRPRE86IENhbGwgZG9JbnN0YWxsTmV3IHNlcGFyYXRlbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGFwcFZlcnNpb24gYW5kIG9zX3N5c3RlbSBwYXJhbXM/XG5cbmZ1bmN0aW9uIGRvQXV0aGVudGljYXRlKGFwcFZlcnNpb24sIG9zID0gbnVsbCwgZmlyZWJhc2VUb2tlbiA9IG51bGwsIHNoYXJlVXNhZ2VEYXRhID0gdHJ1ZSwgY2FsbGJhY2tGb3JVc2Vyc1dob0FyZVNoYXJpbmdEYXRhLCBjYWxsSW5zdGFsbCA9IHRydWUpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBVVRIRU5USUNBVElPTl9TVEFSVEVEXG4gICAgfSk7XG4gICAgTGJyeWlvLmF1dGhlbnRpY2F0ZSgpLnRoZW4odXNlciA9PiB7XG4gICAgICBMYnJ5aW8uZ2V0QXV0aFRva2VuKCkudGhlbih0b2tlbiA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBBVVRIRU5USUNBVElPTl9TVUNDRVNTLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzaGFyZVVzYWdlRGF0YSkge1xuICAgICAgICAgIGRpc3BhdGNoKGRvUmV3YXJkTGlzdCgpKTtcbiAgICAgICAgICBkaXNwYXRjaChkb0ZldGNoSW52aXRlU3RhdHVzKCkpO1xuXG4gICAgICAgICAgaWYgKGNhbGxJbnN0YWxsKSB7XG4gICAgICAgICAgICBkb0luc3RhbGxOZXcoYXBwVmVyc2lvbiwgb3MsIGZpcmViYXNlVG9rZW4sIGNhbGxiYWNrRm9yVXNlcnNXaG9BcmVTaGFyaW5nRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlckZldGNoKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfRkVUQ0hfU1RBUlRFRFxuICAgIH0pO1xuICAgIExicnlpby5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XG4gICAgICBkaXNwYXRjaChkb1Jld2FyZExpc3QoKSk7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRkVUQ0hfU1VDQ0VTUyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVzZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0ZFVENIX0ZBSUxVUkUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlckNoZWNrRW1haWxWZXJpZmllZCgpIHtcbiAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpbiB0aGUgYmFja2dyb3VuZCBzbyB3ZSBkb24ndCBuZWVkIGxvYWRpbmcgYm9vbGVhbnNcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBMYnJ5aW8uZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIuaGFzX3ZlcmlmaWVkX2VtYWlsKSB7XG4gICAgICAgIGRpc3BhdGNoKGRvUmV3YXJkTGlzdCgpKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFVTRVJfRkVUQ0hfU1VDQ0VTUyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB1c2VyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlclBob25lUmVzZXQoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogVVNFUl9QSE9ORV9SRVNFVFxuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyUGhvbmVOZXcocGhvbmUsIGNvdW50cnlDb2RlKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9QSE9ORV9ORVdfU1RBUlRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcGhvbmUsXG4gICAgICAgIGNvdW50cnlfY29kZTogY291bnRyeUNvZGVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfUEhPTkVfTkVXX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBwaG9uZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbHVyZSA9IGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9QSE9ORV9ORVdfRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBMYnJ5aW8uY2FsbCgndXNlcicsICdwaG9uZV9udW1iZXJfbmV3Jywge1xuICAgICAgcGhvbmVfbnVtYmVyOiBwaG9uZSxcbiAgICAgIGNvdW50cnlfY29kZTogY291bnRyeUNvZGVcbiAgICB9LCAncG9zdCcpLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJQaG9uZVZlcmlmeUZhaWx1cmUoZXJyb3IpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVU0VSX1BIT05FX1ZFUklGWV9GQUlMVVJFLFxuICAgIGRhdGE6IHtcbiAgICAgIGVycm9yXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyUGhvbmVWZXJpZnkodmVyaWZpY2F0aW9uQ29kZSkge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHBob25lTnVtYmVyID0gc2VsZWN0UGhvbmVUb1ZlcmlmeShnZXRTdGF0ZSgpKTtcbiAgICBjb25zdCBjb3VudHJ5Q29kZSA9IHNlbGVjdFVzZXJDb3VudHJ5Q29kZShnZXRTdGF0ZSgpKTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1BIT05FX1ZFUklGWV9TVEFSVEVELFxuICAgICAgY29kZTogdmVyaWZpY2F0aW9uQ29kZVxuICAgIH0pO1xuICAgIExicnlpby5jYWxsKCd1c2VyJywgJ3Bob25lX251bWJlcl9jb25maXJtJywge1xuICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICBwaG9uZV9udW1iZXI6IHBob25lTnVtYmVyLFxuICAgICAgY291bnRyeV9jb2RlOiBjb3VudHJ5Q29kZVxuICAgIH0sICdwb3N0JykudGhlbih1c2VyID0+IHtcbiAgICAgIGlmICh1c2VyLmlzX2lkZW50aXR5X3ZlcmlmaWVkKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBVU0VSX1BIT05FX1ZFUklGWV9TVUNDRVNTLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChkb0NsYWltUmV3YXJkVHlwZShyZXdhcmRzLlRZUEVfTkVXX1VTRVIpKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiBkaXNwYXRjaChkb1VzZXJQaG9uZVZlcmlmeUZhaWx1cmUoZXJyb3IpKSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJFbWFpbFRvVmVyaWZ5KGVtYWlsKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9FTUFJTF9WRVJJRllfU0VULFxuICAgICAgZGF0YToge1xuICAgICAgICBlbWFpbFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyRW1haWxOZXcoZW1haWwpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX0VNQUlMX05FV19TVEFSVEVELFxuICAgICAgZW1haWxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRU1BSUxfTkVXX1NVQ0NFU1MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlbWFpbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKGRvVXNlckZldGNoKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0VNQUlMX05FV19GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCd1c2VyX2VtYWlsJywgJ25ldycsIHtcbiAgICAgIGVtYWlsLFxuICAgICAgc2VuZF92ZXJpZmljYXRpb25fZW1haWw6IHRydWVcbiAgICB9LCAncG9zdCcpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVVNFUl9FTUFJTF9ORVdfRVhJU1RTXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTGJyeWlvLmNhbGwoJ3VzZXJfZW1haWwnLCAncmVzZW5kX3Rva2VuJywge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIG9ubHlfaWZfZXhwaXJlZDogdHJ1ZVxuICAgICAgICB9LCAncG9zdCcpLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJSZXNlbmRWZXJpZmljYXRpb25FbWFpbChlbWFpbCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX1NUQVJURURcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX1NVQ0NFU1NcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0VNQUlMX1ZFUklGWV9SRVRSWV9GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCd1c2VyX2VtYWlsJywgJ3Jlc2VuZF90b2tlbicsIHtcbiAgICAgIGVtYWlsXG4gICAgfSwgJ3Bvc3QnKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBpZiAoZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvVXNlckVtYWlsVmVyaWZ5RmFpbHVyZShlcnJvcikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX0ZBSUxVUkUsXG4gICAgZGF0YToge1xuICAgICAgZXJyb3JcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJFbWFpbFZlcmlmeSh2ZXJpZmljYXRpb25Ub2tlbiwgcmVjYXB0Y2hhKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3QgZW1haWwgPSBzZWxlY3RFbWFpbFRvVmVyaWZ5KGdldFN0YXRlKCkpO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX1NUQVJURUQsXG4gICAgICBjb2RlOiB2ZXJpZmljYXRpb25Ub2tlbixcbiAgICAgIHJlY2FwdGNoYVxuICAgIH0pO1xuICAgIExicnlpby5jYWxsKCd1c2VyX2VtYWlsJywgJ2NvbmZpcm0nLCB7XG4gICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuLFxuICAgICAgZW1haWwsXG4gICAgICByZWNhcHRjaGFcbiAgICB9LCAncG9zdCcpLnRoZW4odXNlckVtYWlsID0+IHtcbiAgICAgIGlmICh1c2VyRW1haWwuaXNfdmVyaWZpZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFVTRVJfRU1BSUxfVkVSSUZZX1NVQ0NFU1MsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChkb1VzZXJGZXRjaCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBlbWFpbCBpcyBzdGlsbCBub3QgdmVyaWZpZWQuJyk7IC8vIHNob3VsZG4ndCBoYXBwZW5cbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiBkaXNwYXRjaChkb1VzZXJFbWFpbFZlcmlmeUZhaWx1cmUoZXJyb3IpKSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0ZldGNoQWNjZXNzVG9rZW4oKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHRva2VuID0+IGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0FDQ0VTU19UT0tFTl9TVUNDRVNTLFxuICAgICAgZGF0YToge1xuICAgICAgICB0b2tlblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgTGJyeWlvLmdldEF1dGhUb2tlbigpLnRoZW4oc3VjY2Vzcyk7XG4gIH07XG59XG5mdW5jdGlvbiBkb1VzZXJJZGVudGl0eVZlcmlmeShzdHJpcGVUb2tlbikge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURUQsXG4gICAgICB0b2tlbjogc3RyaXBlVG9rZW5cbiAgICB9KTtcbiAgICBMYnJ5aW8uY2FsbCgndXNlcicsICd2ZXJpZnlfaWRlbnRpdHknLCB7XG4gICAgICBzdHJpcGVfdG9rZW46IHN0cmlwZVRva2VuXG4gICAgfSwgJ3Bvc3QnKS50aGVuKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIuaXNfaWRlbnRpdHlfdmVyaWZpZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFVTRVJfSURFTlRJVFlfVkVSSUZZX1NVQ0NFU1MsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdXNlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKGRvQ2xhaW1SZXdhcmRUeXBlKHJld2FyZHMuVFlQRV9ORVdfVVNFUikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGlkZW50aXR5IGlzIHN0aWxsIG5vdCB2ZXJpZmllZC4gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4nKTsgLy8gc2hvdWxkbid0IGhhcHBlblxuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9JREVOVElUWV9WRVJJRllfRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yOiBlcnJvci50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VySW52aXRlTmV3KGVtYWlsKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9JTlZJVEVfTkVXX1NUQVJURURcbiAgICB9KTtcbiAgICByZXR1cm4gTGJyeWlvLmNhbGwoJ3VzZXInLCAnaW52aXRlJywge1xuICAgICAgZW1haWxcbiAgICB9LCAncG9zdCcpLnRoZW4oc3VjY2VzcyA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfSU5WSVRFX05FV19TVUNDRVNTLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZW1haWxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9Ub2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IF9fKGBJbnZpdGUgc2VudCB0byAke2VtYWlsfWApXG4gICAgICB9KSk7XG4gICAgICBkaXNwYXRjaChkb0ZldGNoSW52aXRlU3RhdHVzKCkpO1xuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0lOVklURV9ORVdfRkFJTFVSRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyU2V0UmVmZXJyZXJSZXNldCgpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVFxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9Vc2VyU2V0UmVmZXJyZXIocmVmZXJyZXIsIHNob3VsZENsYWltKSB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVNFUl9TRVRfUkVGRVJSRVJfU1RBUlRFRFxuICAgIH0pO1xuICAgIGxldCBjbGFpbTtcbiAgICBsZXQgcmVmZXJyZXJDb2RlO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzQ2hhbm5lbFxuICAgIH0gPSBsYnJ5UmVkdXgucGFyc2VVUkkocmVmZXJyZXIpO1xuXG4gICAgaWYgKGlzQ2hhbm5lbCkge1xuICAgICAgY29uc3QgdXJpID0gYGxicnk6Ly8ke3JlZmVycmVyfWA7XG4gICAgICBjbGFpbSA9IGxicnlSZWR1eC5tYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKShnZXRTdGF0ZSgpKTtcblxuICAgICAgaWYgKCFjbGFpbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbGJyeVJlZHV4LkxicnkucmVzb2x2ZSh7XG4gICAgICAgICAgICB1cmxzOiBbdXJpXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsYWltID0gcmVzcG9uc2UgJiYgcmVzcG9uc2VbdXJpXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZmVycmVyQ29kZSA9IGNsYWltICYmIGNsYWltLnBlcm1hbmVudF91cmwgJiYgY2xhaW0ucGVybWFuZW50X3VybC5yZXBsYWNlKCdsYnJ5Oi8vJywgJycpO1xuICAgIH1cblxuICAgIGlmICghcmVmZXJyZXJDb2RlKSB7XG4gICAgICByZWZlcnJlckNvZGUgPSByZWZlcnJlcjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgTGJyeWlvLmNhbGwoJ3VzZXInLCAncmVmZXJyYWwnLCB7XG4gICAgICAgIHJlZmVycmVyOiByZWZlcnJlckNvZGVcbiAgICAgIH0sICdwb3N0Jyk7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfU0VUX1JFRkVSUkVSX1NVQ0NFU1NcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2hvdWxkQ2xhaW0pIHtcbiAgICAgICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkcy5UWVBFX1JFRkVSRUUpKTtcbiAgICAgICAgZGlzcGF0Y2goZG9Vc2VyRmV0Y2goKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChkb1VzZXJGZXRjaCgpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX1NFVF9SRUZFUlJFUl9GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZG9DbGFpbVlvdXR1YmVDaGFubmVscygpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVU0VSX1lPVVRVQkVfSU1QT1JUX1NUQVJURURcbiAgICB9KTtcbiAgICBsZXQgdHJhbnNmZXJSZXNwb25zZTtcbiAgICByZXR1cm4gbGJyeVJlZHV4LkxicnkuYWRkcmVzc19saXN0KHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlX3NpemU6IDk5OTk5XG4gICAgfSkudGhlbihhZGRyZXNzTGlzdCA9PiBhZGRyZXNzTGlzdC5pdGVtcy5zb3J0KChhLCBiKSA9PiBhLnVzZWRfdGltZXMgLSBiLnVzZWRfdGltZXMpWzBdKS50aGVuKGFkZHJlc3MgPT4gTGJyeWlvLmNhbGwoJ3l0JywgJ3RyYW5zZmVyJywge1xuICAgICAgYWRkcmVzczogYWRkcmVzcy5hZGRyZXNzLFxuICAgICAgcHVibGljX2tleTogYWRkcmVzcy5wdWJrZXlcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGgpIHtcbiAgICAgICAgdHJhbnNmZXJSZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzcG9uc2UubWFwKGNoYW5uZWxNZXRhID0+IHtcbiAgICAgICAgICBpZiAoY2hhbm5lbE1ldGEgJiYgY2hhbm5lbE1ldGEuY2hhbm5lbCAmJiBjaGFubmVsTWV0YS5jaGFubmVsLmNoYW5uZWxfY2VydGlmaWNhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsYnJ5UmVkdXguTGJyeS5jaGFubmVsX2ltcG9ydCh7XG4gICAgICAgICAgICAgIGNoYW5uZWxfZGF0YTogY2hhbm5lbE1ldGEuY2hhbm5lbC5jaGFubmVsX2NlcnRpZmljYXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBbe1xuICAgICAgICAgICAgdHlwZTogVVNFUl9ZT1VUVUJFX0lNUE9SVF9TVUNDRVNTLFxuICAgICAgICAgICAgZGF0YTogdHJhbnNmZXJSZXNwb25zZVxuICAgICAgICAgIH1dO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChkb1VzZXJGZXRjaCgpKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2gobGJyeVJlZHV4LmRvRmV0Y2hDaGFubmVsTGlzdE1pbmUoKSk7XG4gICAgICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmJhdGNoQWN0aW9ucyguLi5hY3Rpb25zKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfWU9VVFVCRV9JTVBPUlRfRkFJTFVSRSxcbiAgICAgICAgZGF0YTogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0NoZWNrWW91dHViZVRyYW5zZmVyKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFVTRVJfWU9VVFVCRV9JTVBPUlRfU1RBUlRFRFxuICAgIH0pO1xuICAgIHJldHVybiBMYnJ5aW8uY2FsbCgneXQnLCAndHJhbnNmZXInKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGgpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFVTRVJfWU9VVFVCRV9JTVBPUlRfU1VDQ0VTUyxcbiAgICAgICAgICBkYXRhOiByZXNwb25zZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9ZT1VUVUJFX0lNUE9SVF9GQUlMVVJFLFxuICAgICAgICBkYXRhOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9SZXdhcmRMaXN0KCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkZFVENIX1JFV0FSRFNfU1RBUlRFRFxuICAgIH0pO1xuICAgIExicnlpby5jYWxsKCdyZXdhcmQnLCAnbGlzdCcsIHtcbiAgICAgIG11bHRpcGxlX3Jld2FyZHNfcGVyX3R5cGU6IHRydWVcbiAgICB9KS50aGVuKHVzZXJSZXdhcmRzID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuRkVUQ0hfUkVXQVJEU19DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1c2VyUmV3YXJkc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkZFVENIX1JFV0FSRFNfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlclJld2FyZHM6IFtdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkVHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHVzZXJJc1Jld2FyZEFwcHJvdmVkID0gc2VsZWN0VXNlcklzUmV3YXJkQXBwcm92ZWQoc3RhdGUpO1xuICAgIGNvbnN0IHVuY2xhaW1lZFJld2FyZHMgPSBzZWxlY3RVbmNsYWltZWRSZXdhcmRzKHN0YXRlKTtcbiAgICBjb25zdCByZXdhcmQgPSByZXdhcmRUeXBlID09PSByZXdhcmRzLlRZUEVfUkVXQVJEX0NPREUgfHwgcmV3YXJkVHlwZSA9PT0gcmV3YXJkcy5UWVBFX05FV19BTkRST0lEID8ge1xuICAgICAgcmV3YXJkX3R5cGU6IHJld2FyZHMuVFlQRV9SRVdBUkRfQ09ERVxuICAgIH0gOiB1bmNsYWltZWRSZXdhcmRzLmZpbmQodXIgPT4gdXIucmV3YXJkX3R5cGUgPT09IHJld2FyZFR5cGUpOyAvLyBUcnkgdG8gY2xhaW0gdGhlIGVtYWlsIHJld2FyZCByaWdodCBhd2F5LCBldmVuIGlmIHdlIGhhdmVuJ3QgY2FsbGVkIHJld2FyZF9saXN0IHlldFxuXG4gICAgaWYgKHJld2FyZFR5cGUgIT09IHJld2FyZHMuVFlQRV9SRVdBUkRfQ09ERSB8fCByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfQ09ORklSTV9FTUFJTCB8fCByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfREFJTFlfVklFVyB8fCByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfTkVXX0FORFJPSUQpIHtcbiAgICAgIGlmICghcmV3YXJkIHx8IHJld2FyZC50cmFuc2FjdGlvbl9pZCkge1xuICAgICAgICAvLyBhbHJlYWR5IGNsYWltZWQgb3IgZG9lc24ndCBleGlzdCwgZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1c2VySXNSZXdhcmRBcHByb3ZlZCAmJiByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfQ09ORklSTV9FTUFJTCAmJiByZXdhcmRUeXBlICE9PSByZXdhcmRzLlRZUEVfUkVXQVJEX0NPREUgJiYgcmV3YXJkVHlwZSAhPT0gcmV3YXJkcy5UWVBFX05FV19BTkRST0lEKSB7XG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZmFpbFNpbGVudGx5ICYmIHJld2FyZHMuY2FsbGJhY2tzLnJld2FyZEFwcHJvdmFsUmVxdWVzdGVkKSB7XG4gICAgICAgIHJld2FyZHMuY2FsbGJhY2tzLnJld2FyZEFwcHJvdmFsUmVxdWVzdGVkKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNldCBgY2xhaW1fY29kZWAgc28gdGhlIGFwaSBrbm93cyB3aGljaCByZXdhcmQgdG8gZ2l2ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2YgdGhlIHNhbWUgdHlwZVxuXG5cbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcyB8fCB7fTtcblxuICAgIGlmICghcGFyYW1zLmNsYWltX2NvZGUpIHtcbiAgICAgIHBhcmFtcy5jbGFpbV9jb2RlID0gcmV3YXJkLmNsYWltX2NvZGU7XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX1NUQVJURUQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJld2FyZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9IHN1Y2Nlc3NSZXdhcmQgPT4ge1xuICAgICAgLy8gVGVtcG9yYXJ5IHRpbWVvdXQgdG8gZW5zdXJlIHRoZSBzZGsgaGFzIHRoZSBjb3JyZWN0IGJhbGFuY2UgYWZ0ZXIgY2xhaW1pbmcgYSByZXdhcmRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9VcGRhdGVCYWxhbmNlKCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkNMQUlNX1JFV0FSRF9TVUNDRVNTLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICByZXdhcmQ6IHN1Y2Nlc3NSZXdhcmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdWNjZXNzUmV3YXJkLnJld2FyZF90eXBlID09PSByZXdhcmRzLlRZUEVfTkVXX1VTRVIgJiYgcmV3YXJkcy5jYWxsYmFja3MuY2xhaW1GaXJzdFJld2FyZFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJld2FyZHMuY2FsbGJhY2tzLmNsYWltRmlyc3RSZXdhcmRTdWNjZXNzKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdWNjZXNzUmV3YXJkLnJld2FyZF90eXBlID09PSByZXdhcmRzLlRZUEVfUkVGRVJSQUwpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGRvRmV0Y2hJbnZpdGVTdGF0dXMoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlzcGF0Y2goZG9SZXdhcmRMaXN0KCkpO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSwgMjAwMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZhaWx1cmUgPSBlcnJvciA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IGxicnlSZWR1eC5BQ1RJT05TLkNMQUlNX1JFV0FSRF9GQUlMVVJFLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmV3YXJkLFxuICAgICAgICAgIGVycm9yOiAhb3B0aW9ucyB8fCAhb3B0aW9ucy5mYWlsU2lsZW50bHkgPyBlcnJvciA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wdGlvbnMubm90aWZ5RXJyb3IpIHtcbiAgICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmRvVG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNhbGxiYWNrKSB7XG4gICAgICAgIG9wdGlvbnMuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcmV3YXJkcy5jbGFpbVJld2FyZChyZXdhcmRUeXBlLCBwYXJhbXMpLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0NsYWltRWxpZ2libGVQdXJjaGFzZVJld2FyZHMoKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHVuY2xhaW1lZFJld2FyZHMgPSBzZWxlY3RVbmNsYWltZWRSZXdhcmRzKHN0YXRlKTtcbiAgICBjb25zdCB1c2VySXNSZXdhcmRBcHByb3ZlZCA9IHNlbGVjdFVzZXJJc1Jld2FyZEFwcHJvdmVkKHN0YXRlKTtcblxuICAgIGlmICghdXNlcklzUmV3YXJkQXBwcm92ZWQgfHwgIUxicnlpby5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHVuY2xhaW1lZFJld2FyZHMuZmluZCh1ciA9PiB1ci5yZXdhcmRfdHlwZSA9PT0gcmV3YXJkcy5UWVBFX0ZJUlNUX1NUUkVBTSkpIHtcbiAgICAgIGRpc3BhdGNoKGRvQ2xhaW1SZXdhcmRUeXBlKHJld2FyZHMuVFlQRV9GSVJTVF9TVFJFQU0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgW3Jld2FyZHMuVFlQRV9NQU5ZX0RPV05MT0FEUywgcmV3YXJkcy5UWVBFX0RBSUxZX1ZJRVddLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKGRvQ2xhaW1SZXdhcmRUeXBlKHR5cGUsIHtcbiAgICAgICAgICBmYWlsU2lsZW50bHk6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZG9DbGFpbVJld2FyZENsZWFyRXJyb3IocmV3YXJkKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX0NMRUFSX0VSUk9SLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXdhcmRcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvRmV0Y2hSZXdhcmRlZENvbnRlbnQoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IG5hbWVUb0NsYWltSWQgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGFpbUlkczogT2JqZWN0LnZhbHVlcyhuYW1lVG9DbGFpbUlkKSxcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRfQ09OVEVOVF9DT01QTEVURUQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGFpbUlkczogW10sXG4gICAgICAgICAgc3VjY2VzczogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCdyZXdhcmQnLCAnbGlzdF9mZWF0dXJlZCcpLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gIH07XG59XG5cbmNvbnN0IFBBR0VfU0laRSA9IDIwO1xuXG4vLyAgICAgIFxuY29uc3QgQ0hFQ0tfU1VCU0NSSVBUSU9OU19JTlRFUlZBTCA9IDE1ICogNjAgKiAxMDAwO1xuY29uc3QgZG9TZXRWaWV3TW9kZSA9IHZpZXdNb2RlID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogU0VUX1ZJRVdfTU9ERSxcbiAgZGF0YTogdmlld01vZGVcbn0pO1xuY29uc3Qgc2V0U3Vic2NyaXB0aW9uTGF0ZXN0ID0gKHN1YnNjcmlwdGlvbiwgdXJpKSA9PiBkaXNwYXRjaCA9PiBkaXNwYXRjaCh7XG4gIHR5cGU6IFNFVF9TVUJTQ1JJUFRJT05fTEFURVNULFxuICBkYXRhOiB7XG4gICAgc3Vic2NyaXB0aW9uLFxuICAgIHVyaVxuICB9XG59KTsgLy8gUG9wdWxhdGUgYSBjaGFubmVscyB1bnJlYWQgc3Vic2NyaXB0aW9ucyBvciB1cGRhdGUgdGhlIHR5cGVcblxuY29uc3QgZG9VcGRhdGVVbnJlYWRTdWJzY3JpcHRpb25zID0gKGNoYW5uZWxVcmksIHVyaXMsIHR5cGUpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCB1bnJlYWRCeUNoYW5uZWwgPSBzZWxlY3RVbnJlYWRCeUNoYW5uZWwoc3RhdGUpO1xuICBjb25zdCBjdXJyZW50VW5yZWFkRm9yQ2hhbm5lbCA9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsVXJpXTtcbiAgbGV0IG5ld1VyaXMgPSBbXTtcbiAgbGV0IG5ld1R5cGUgPSBudWxsO1xuXG4gIGlmICghY3VycmVudFVucmVhZEZvckNoYW5uZWwpIHtcbiAgICBuZXdVcmlzID0gdXJpcztcbiAgICBuZXdUeXBlID0gdHlwZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodXJpcykge1xuICAgICAgLy8gSWYgYSBjaGFubmVsIGN1cnJlbnRseSBoYXMgbm8gdW5yZWFkIHVyaXMsIGp1c3QgYWRkIHRoZW0gYWxsXG4gICAgICBpZiAoIWN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXMgfHwgIWN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXMubGVuZ3RoKSB7XG4gICAgICAgIG5ld1VyaXMgPSB1cmlzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhleSBhbHJlYWR5IGhhdmUgdW5yZWFkcyBhbmQgbm93IHRoZXJlIGFyZSBuZXcgb25lc1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBvbmVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVbnJlYWRVcmlzID0gY3VycmVudFVucmVhZEZvckNoYW5uZWwudXJpcztcbiAgICAgICAgbmV3VXJpcyA9IHVyaXMuZmlsdGVyKHVyaSA9PiAhY3VycmVudFVucmVhZFVyaXMuaW5jbHVkZXModXJpKSkuY29uY2F0KGN1cnJlbnRVbnJlYWRVcmlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VXJpcyA9IGN1cnJlbnRVbnJlYWRGb3JDaGFubmVsLnVyaXM7XG4gICAgfVxuXG4gICAgbmV3VHlwZSA9IHR5cGUgfHwgY3VycmVudFVucmVhZEZvckNoYW5uZWwudHlwZTtcbiAgfVxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBVUERBVEVfU1VCU0NSSVBUSU9OX1VOUkVBRFMsXG4gICAgZGF0YToge1xuICAgICAgY2hhbm5lbDogY2hhbm5lbFVyaSxcbiAgICAgIHVyaXM6IG5ld1VyaXMsXG4gICAgICB0eXBlOiBuZXdUeXBlXG4gICAgfVxuICB9KTtcbn07IC8vIFJlbW92ZSBtdWx0aXBsZSBmaWxlcyAob3IgYWxsKSBmcm9tIGEgY2hhbm5lbHMgdW5yZWFkIHN1YnNjcmlwdGlvbnNcblxuY29uc3QgZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb25zID0gKGNoYW5uZWxVcmksIHJlYWRVcmlzKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgdW5yZWFkQnlDaGFubmVsID0gc2VsZWN0VW5yZWFkQnlDaGFubmVsKHN0YXRlKTsgLy8gSWYgbm8gY2hhbm5lbCBpcyBwYXNzZWQgaW4sIHJlbW92ZSBhbGwgdW5yZWFkIHN1YnNjcmlwdGlvbnMgZnJvbSBhbGwgY2hhbm5lbHNcblxuICBpZiAoIWNoYW5uZWxVcmkpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogUkVNT1ZFX1NVQlNDUklQVElPTl9VTlJFQURTLFxuICAgICAgZGF0YToge1xuICAgICAgICBjaGFubmVsOiBudWxsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50Q2hhbm5lbFVucmVhZCA9IHVucmVhZEJ5Q2hhbm5lbFtjaGFubmVsVXJpXTtcblxuICBpZiAoIWN1cnJlbnRDaGFubmVsVW5yZWFkIHx8ICFjdXJyZW50Q2hhbm5lbFVucmVhZC51cmlzKSB7XG4gICAgLy8gQ2hhbm5lbCBwYXNzZWQgaW4gZG9lc24ndCBoYXZlIGFueSB1bnJlYWRzXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gRm9yIGVhY2ggdXJpIHBhc3NlZCBpbiwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgdW5yZWFkIHVyaXNcbiAgLy8gSWYgbm8gdXJpcyBhcmUgcGFzc2VkIGluLCByZW1vdmUgdGhlbSBhbGxcblxuXG4gIGxldCBuZXdVcmlzO1xuXG4gIGlmIChyZWFkVXJpcykge1xuICAgIGNvbnN0IHVyaXNUb1JlbW92ZU1hcCA9IHJlYWRVcmlzLnJlZHVjZSgoYWNjLCB2YWwpID0+ICh7IC4uLmFjYyxcbiAgICAgIFt2YWxdOiB0cnVlXG4gICAgfSksIHt9KTtcbiAgICBjb25zdCBmaWx0ZXJlZFVyaXMgPSBjdXJyZW50Q2hhbm5lbFVucmVhZC51cmlzLmZpbHRlcih1cmkgPT4gIXVyaXNUb1JlbW92ZU1hcFt1cmldKTtcbiAgICBuZXdVcmlzID0gZmlsdGVyZWRVcmlzLmxlbmd0aCA/IGZpbHRlcmVkVXJpcyA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmV3VXJpcyA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2goe1xuICAgIHR5cGU6IFJFTU9WRV9TVUJTQ1JJUFRJT05fVU5SRUFEUyxcbiAgICBkYXRhOiB7XG4gICAgICBjaGFubmVsOiBjaGFubmVsVXJpLFxuICAgICAgdXJpczogbmV3VXJpc1xuICAgIH1cbiAgfSk7XG59OyAvLyBSZW1vdmUgYSBzaW5nbGUgZmlsZSBmcm9tIGEgY2hhbm5lbHMgdW5yZWFkIHN1YnNjcmlwdGlvbnNcblxuY29uc3QgZG9SZW1vdmVVbnJlYWRTdWJzY3JpcHRpb24gPSAoY2hhbm5lbFVyaSwgcmVhZFVyaSkgPT4gZGlzcGF0Y2ggPT4ge1xuICBkaXNwYXRjaChkb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbnMoY2hhbm5lbFVyaSwgW3JlYWRVcmldKSk7XG59O1xuY29uc3QgZG9DaGVja1N1YnNjcmlwdGlvbiA9IChzdWJzY3JpcHRpb25VcmksIHNob3VsZE5vdGlmeSkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAvLyBubyBkaXNwYXRjaGluZyBGRVRDSF9DSEFOTkVMX0NMQUlNU19TVEFSVEVEOyBjYXVzZXMgbG9hZGluZyBpc3N1ZXMgb24gPFN1YnNjcmlwdGlvbnNQYWdlPlxuICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG5cbiAgY29uc3Qgc2F2ZWRTdWJzY3JpcHRpb24gPSBzdGF0ZS5zdWJzY3JpcHRpb25zLnN1YnNjcmlwdGlvbnMuZmluZChzdWIgPT4gc3ViLnVyaSA9PT0gc3Vic2NyaXB0aW9uVXJpKTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uTGF0ZXN0ID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5sYXRlc3Rbc3Vic2NyaXB0aW9uVXJpXTtcblxuICBpZiAoIXNhdmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhyb3cgRXJyb3IoYFRyeWluZyB0byBmaW5kIG5ldyBjb250ZW50IGZvciAke3N1YnNjcmlwdGlvblVyaX0gYnV0IGl0IGRvZXNuJ3QgZXhpc3QgaW4geW91ciBzdWJzY3JpcHRpb25zYCk7XG4gIH0gLy8gV2UgbWF5IGJlIGR1cGxpY2F0aW5nIGNhbGxzIGhlcmUuIENhbiB0aGlzIGxvZ2ljIGJlIGJha2VkIGludG8gZG9GZXRjaENsYWltc0J5Q2hhbm5lbD9cblxuXG4gIGxicnlSZWR1eC5MYnJ5LmNsYWltX3NlYXJjaCh7XG4gICAgY2hhbm5lbDogc3Vic2NyaXB0aW9uVXJpLFxuICAgIHZhbGlkX2NoYW5uZWxfc2lnbmF0dXJlOiB0cnVlLFxuICAgIG9yZGVyX2J5OiBbJ3JlbGVhc2VfdGltZSddLFxuICAgIHBhZ2U6IDEsXG4gICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgfSkudGhlbihjbGFpbUxpc3RCeUNoYW5uZWwgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGl0ZW1zOiBjbGFpbXNJbkNoYW5uZWxcbiAgICB9ID0gY2xhaW1MaXN0QnlDaGFubmVsOyAvLyBtYXkgaGFwcGVuIGlmIHN1YnNjcmliZWQgdG8gYW4gYWJhbmRvbmVkIGNoYW5uZWwgb3IgYW4gZW1wdHkgY2hhbm5lbFxuXG4gICAgaWYgKCFjbGFpbXNJbkNoYW5uZWwgfHwgIWNsYWltc0luQ2hhbm5lbC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERldGVybWluZSBpZiB0aGUgbGF0ZXN0IHN1YnNjcmlwdGlvbiBjdXJyZW50bHkgc2F2ZWQgaXMgYWN0dWFsbHkgdGhlIGxhdGVzdCBzdWJzY3JpcHRpb25cblxuXG4gICAgY29uc3QgbGF0ZXN0SW5kZXggPSBjbGFpbXNJbkNoYW5uZWwuZmluZEluZGV4KGNsYWltID0+IGNsYWltLnBlcm1hbmVudF91cmwgPT09IHN1YnNjcmlwdGlvbkxhdGVzdCk7IC8vIElmIGxhdGVzdCBpcyAtMSwgaXQgaXMgYSBuZXdseSBzdWJzY3JpYmVkIGNoYW5uZWwgb3IgdGhlcmUgaGF2ZSBiZWVuIDEwKyBjbGFpbXMgcHVibGlzaGVkIHNpbmNlIGxhc3Qgdmlld2VkXG5cbiAgICBjb25zdCBsYXRlc3RJbmRleFRvTm90aWZ5ID0gbGF0ZXN0SW5kZXggPT09IC0xID8gMTAgOiBsYXRlc3RJbmRleDsgLy8gSWYgbGF0ZXN0IGlzIDAsIG5vdGhpbmcgaGFzIGNoYW5nZWRcbiAgICAvLyBEbyBub3QgZG93bmxvYWQvbm90aWZ5IGFib3V0IG5ldyBjb250ZW50LCBpdCB3b3VsZCBkb3dubG9hZC9ub3RpZnkgMTAgY2xhaW1zIHBlciBjaGFubmVsXG5cbiAgICBpZiAobGF0ZXN0SW5kZXggIT09IDAgJiYgc3Vic2NyaXB0aW9uTGF0ZXN0KSB7XG4gICAgICBsZXQgZG93bmxvYWRDb3VudCA9IDA7XG4gICAgICBjb25zdCBuZXdVbnJlYWQgPSBbXTtcbiAgICAgIGNsYWltc0luQ2hhbm5lbC5zbGljZSgwLCBsYXRlc3RJbmRleFRvTm90aWZ5KS5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgICAgY29uc3QgdXJpID0gY2xhaW0ucGVybWFuZW50X3VybDtcblxuICAgICAgICBpZiAoc2hvdWxkTm90aWZ5KSB7XG4gICAgICAgICAgbmV3VW5yZWFkLnB1c2godXJpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBkaXNwYXRjaChkb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9uVXJpLCBuZXdVbnJlYWQsIGRvd25sb2FkQ291bnQgPiAwID8gRE9XTkxPQURJTkcgOiBOT1RJRllfT05MWSkpO1xuICAgIH0gLy8gU2V0IHRoZSBsYXRlc3QgcGllY2Ugb2YgY29udGVudCBmb3IgYSBjaGFubmVsXG4gICAgLy8gVGhpcyBhbGxvd3MgdGhlIGFwcCB0byBrbm93IGlmIHRoZXJlIGhhcyBiZWVuIG5ldyBjb250ZW50IHNpbmNlIGl0IHdhcyBsYXN0IHNldFxuXG5cbiAgICBjb25zdCBsYXRlc3QgPSBjbGFpbXNJbkNoYW5uZWxbMF07XG4gICAgZGlzcGF0Y2goc2V0U3Vic2NyaXB0aW9uTGF0ZXN0KHtcbiAgICAgIGNoYW5uZWxOYW1lOiBsYXRlc3Quc2lnbmluZ19jaGFubmVsLm5hbWUsXG4gICAgICB1cmk6IGxhdGVzdC5zaWduaW5nX2NoYW5uZWwucGVybWFuZW50X3VybFxuICAgIH0sIGxhdGVzdC5wZXJtYW5lbnRfdXJsKSk7IC8vIGNhbGxpbmcgRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVEIGFmdGVyIG5vdCBjYWxsaW5nIFNUQVJURURcbiAgICAvLyBtZWFucyBpdCB3aWxsIGRlbGV0ZSBhIG5vbi1leGlzdGFudCBmZXRjaGluZ0NoYW5uZWxDbGFpbXNbdXJpXVxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfQ0hBTk5FTF9DTEFJTVNfQ09NUExFVEVELFxuICAgICAgZGF0YToge1xuICAgICAgICB1cmk6IHN1YnNjcmlwdGlvblVyaSxcbiAgICAgICAgY2xhaW1zOiBjbGFpbXNJbkNoYW5uZWwgfHwgW10sXG4gICAgICAgIHBhZ2U6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZG9DaGFubmVsU3Vic2NyaWJlID0gc3Vic2NyaXB0aW9uID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qge1xuICAgIHNldHRpbmdzOiB7XG4gICAgICBkYWVtb25TZXR0aW5nc1xuICAgIH1cbiAgfSA9IGdldFN0YXRlKCk7XG4gIGNvbnN0IGlzU2hhcmluZ0RhdGEgPSBkYWVtb25TZXR0aW5ncyA/IGRhZW1vblNldHRpbmdzLnNoYXJlX3VzYWdlX2RhdGEgOiB0cnVlO1xuICBjb25zdCBzdWJzY3JpcHRpb25VcmkgPSBzdWJzY3JpcHRpb24udXJpO1xuXG4gIGlmICghc3Vic2NyaXB0aW9uVXJpLnN0YXJ0c1dpdGgoJ2xicnk6Ly8nKSkge1xuICAgIHRocm93IEVycm9yKGBTdWJzY3JpcHRpb24gdXJpcyBtdXN0IGluY2x1ZSB0aGUgXCJsYnJ5Oi8vXCIgcHJlZml4LlxcblRyaWVkIHRvIHN1YnNjcmliZSB0byAke3N1YnNjcmlwdGlvblVyaX1gKTtcbiAgfVxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBDSEFOTkVMX1NVQlNDUklCRSxcbiAgICBkYXRhOiBzdWJzY3JpcHRpb25cbiAgfSk7IC8vIGlmIHRoZSB1c2VyIGlzbid0IHNoYXJpbmcgZGF0YSwga2VlcCB0aGUgc3Vic2NyaXB0aW9ucyBlbnRpcmVseSBpbiB0aGUgYXBwXG5cbiAgaWYgKGlzU2hhcmluZ0RhdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFubmVsQ2xhaW1JZFxuICAgIH0gPSBsYnJ5UmVkdXgucGFyc2VVUkkoc3Vic2NyaXB0aW9uLnVyaSk7IC8vIFRoZXkgYXJlIHNoYXJpbmcgZGF0YSwgd2UgY2FuIHN0b3JlIHRoZWlyIHN1YnNjcmlwdGlvbnMgaW4gb3VyIGludGVybmFsIGRhdGFiYXNlXG5cbiAgICBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ25ldycsIHtcbiAgICAgIGNoYW5uZWxfbmFtZTogc3Vic2NyaXB0aW9uLmNoYW5uZWxOYW1lLFxuICAgICAgY2xhaW1faWQ6IGNoYW5uZWxDbGFpbUlkXG4gICAgfSk7XG4gICAgZGlzcGF0Y2goZG9DbGFpbVJld2FyZFR5cGUocmV3YXJkcy5UWVBFX1NVQlNDUklQVElPTiwge1xuICAgICAgZmFpbFNpbGVudGx5OiB0cnVlXG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcGF0Y2goZG9DaGVja1N1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24udXJpLCB0cnVlKSk7XG59O1xuY29uc3QgZG9DaGFubmVsVW5zdWJzY3JpYmUgPSBzdWJzY3JpcHRpb24gPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICBjb25zdCB7XG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIGRhZW1vblNldHRpbmdzXG4gICAgfVxuICB9ID0gZ2V0U3RhdGUoKTtcbiAgY29uc3QgaXNTaGFyaW5nRGF0YSA9IGRhZW1vblNldHRpbmdzID8gZGFlbW9uU2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSA6IHRydWU7XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBDSEFOTkVMX1VOU1VCU0NSSUJFLFxuICAgIGRhdGE6IHN1YnNjcmlwdGlvblxuICB9KTtcblxuICBpZiAoaXNTaGFyaW5nRGF0YSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxDbGFpbUlkXG4gICAgfSA9IGxicnlSZWR1eC5wYXJzZVVSSShzdWJzY3JpcHRpb24udXJpKTtcbiAgICBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ2RlbGV0ZScsIHtcbiAgICAgIGNsYWltX2lkOiBjaGFubmVsQ2xhaW1JZFxuICAgIH0pO1xuICB9XG59O1xuY29uc3QgZG9DaGVja1N1YnNjcmlwdGlvbnMgPSAoKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHNlbGVjdFN1YnNjcmlwdGlvbnMoc3RhdGUpO1xuICBzdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHtcbiAgICBkaXNwYXRjaChkb0NoZWNrU3Vic2NyaXB0aW9uKHN1Yi51cmksIHRydWUpKTtcbiAgfSk7XG59O1xuY29uc3QgZG9GZXRjaE15U3Vic2NyaXB0aW9ucyA9ICgpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICBjb25zdCB7XG4gICAgc3Vic2NyaXB0aW9uczogcmVkdXhTdWJzY3JpcHRpb25zXG4gIH0gPSBzdGF0ZS5zdWJzY3JpcHRpb25zOyAvLyBkZWZhdWx0IHRvIHRydWUgaWYgZGFlbW9uU2V0dGluZ3Mgbm90IGZvdW5kXG5cbiAgY29uc3QgaXNTaGFyaW5nRGF0YSA9IHN0YXRlLnNldHRpbmdzICYmIHN0YXRlLnNldHRpbmdzLmRhZW1vblNldHRpbmdzID8gc3RhdGUuc2V0dGluZ3MuZGFlbW9uU2V0dGluZ3Muc2hhcmVfdXNhZ2VfZGF0YSA6IHRydWU7XG5cbiAgaWYgKCFpc1NoYXJpbmdEYXRhICYmIGlzU2hhcmluZ0RhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFRoZXkgYXJlbid0IHNoYXJpbmcgdGhlaXIgZGF0YSwgc3Vic2NyaXB0aW9ucyB3aWxsIGJlIGhhbmRsZWQgYnkgcGVyc2lzdGVkIHJlZHV4IHN0YXRlXG4gICAgcmV0dXJuO1xuICB9IC8vIG1vc3Qgb2YgdGhpcyBsb2dpYyBjb21lcyBmcm9tIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGIgaXNuJ3Qgc3luY2VkIHdpdGggcmVkdXhcbiAgLy8gdGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgdXNlciBzdG9wcyBzaGFyaW5nIGRhdGFcblxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBGRVRDSF9TVUJTQ1JJUFRJT05TX1NUQVJUXG4gIH0pO1xuICBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ2xpc3QnKS50aGVuKGRiU3Vic2NyaXB0aW9ucyA9PiB7XG4gICAgY29uc3Qgc3RvcmVkU3Vic2NyaXB0aW9ucyA9IGRiU3Vic2NyaXB0aW9ucyB8fCBbXTsgLy8gVXNlciBoYXMgbm8gc3Vic2NyaXB0aW9ucyBpbiBkYiBvciByZWR1eFxuXG4gICAgaWYgKCFzdG9yZWRTdWJzY3JpcHRpb25zLmxlbmd0aCAmJiAoIXJlZHV4U3Vic2NyaXB0aW9ucyB8fCAhcmVkdXhTdWJzY3JpcHRpb25zLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIFRoZXJlIGlzIHNvbWUgbWlzbWF0Y2ggYmV0d2VlbiByZWR1eCBzdGF0ZSBhbmQgZGIgc3RhdGVcbiAgICAvLyBJZiBzb21ldGhpbmcgaXMgaW4gdGhlIGRiLCBidXQgbm90IGluIHJlZHV4LCBhZGQgaXQgdG8gcmVkdXhcbiAgICAvLyBJZiBzb21ldGhpbmcgaXMgaW4gcmVkdXgsIGJ1dCBub3QgaW4gdGhlIGRiLCBhZGQgaXQgdG8gdGhlIGRiXG5cblxuICAgIGlmIChzdG9yZWRTdWJzY3JpcHRpb25zLmxlbmd0aCAhPT0gcmVkdXhTdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGJTdWJNYXAgPSB7fTtcbiAgICAgIGNvbnN0IHJlZHV4U3ViTWFwID0ge307XG4gICAgICBjb25zdCBzdWJzTm90SW5EQiA9IFtdO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uc1RvUmV0dXJuID0gcmVkdXhTdWJzY3JpcHRpb25zLnNsaWNlKCk7XG4gICAgICBzdG9yZWRTdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHtcbiAgICAgICAgZGJTdWJNYXBbc3ViLmNsYWltX2lkXSA9IDE7XG4gICAgICB9KTtcbiAgICAgIHJlZHV4U3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjaGFubmVsQ2xhaW1JZFxuICAgICAgICB9ID0gbGJyeVJlZHV4LnBhcnNlVVJJKHN1Yi51cmkpO1xuICAgICAgICByZWR1eFN1Yk1hcFtjaGFubmVsQ2xhaW1JZF0gPSAxO1xuICAgICAgfSk7XG4gICAgICBzdG9yZWRTdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHtcbiAgICAgICAgaWYgKCFyZWR1eFN1Yk1hcFtzdWIuY2xhaW1faWRdKSB7XG4gICAgICAgICAgY29uc3QgdXJpID0gYGxicnk6Ly8ke3N1Yi5jaGFubmVsX25hbWV9IyR7c3ViLmNsYWltX2lkfWA7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uc1RvUmV0dXJuLnB1c2goe1xuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWU6IHN1Yi5jaGFubmVsX25hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc3Vic05vdEluREIubWFwKHBheWxvYWQgPT4gTGJyeWlvLmNhbGwoJ3N1YnNjcmlwdGlvbicsICduZXcnLCBwYXlsb2FkKSkpLnRoZW4oKCkgPT4gc3Vic2NyaXB0aW9uc1RvUmV0dXJuKS5jYXRjaCgoKSA9PiAvLyBsZXQgaXQgZmFpbCwgd2Ugd2lsbCB0cnkgYWdhaW4gd2hlbiB0aGUgbmF2aWdhdGUgdG8gdGhlIHN1YnNjcmlwdGlvbnMgcGFnZVxuICAgICAgc3Vic2NyaXB0aW9uc1RvUmV0dXJuKTtcbiAgICB9IC8vIERCIGlzIGFscmVhZHkgc3luY2VkLCBqdXN0IHJldHVybiB0aGUgc3Vic2NyaXB0aW9ucyBpbiByZWR1eFxuXG5cbiAgICByZXR1cm4gcmVkdXhTdWJzY3JpcHRpb25zO1xuICB9KS50aGVuKHN1YnNjcmlwdGlvbnMgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1NVQlNDUklQVElPTlNfU1VDQ0VTUyxcbiAgICAgIGRhdGE6IHN1YnNjcmlwdGlvbnNcbiAgICB9KTtcbiAgICBkaXNwYXRjaChsYnJ5UmVkdXguZG9SZXNvbHZlVXJpcyhzdWJzY3JpcHRpb25zLm1hcCgoe1xuICAgICAgdXJpXG4gICAgfSkgPT4gdXJpKSkpO1xuICAgIGRpc3BhdGNoKGRvQ2hlY2tTdWJzY3JpcHRpb25zKCkpO1xuICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfU1VCU0NSSVBUSU9OU19GQUlMXG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRvQ2hlY2tTdWJzY3JpcHRpb25zSW5pdCA9ICgpID0+IGRpc3BhdGNoID0+IHtcbiAgLy8gZG9DaGVja1N1YnNjcmlwdGlvbnNJbml0IGlzIGNhbGxlZCBieSBkb0RhZW1vblJlYWR5XG4gIC8vIHNldFRpbWVvdXQgYmVsb3cgaXMgYSBoYWNrIHRvIGVuc3VyZSByZWR1eCBpcyBoeWRyYXRlZCB3aGVuIHN1YnNjcmlwdGlvbnMgYXJlIGNoZWNrZWRcbiAgLy8gdGhpcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggPFBlcnNpc3RHYXRlPiB3aGljaCByZXFpdXJlcyBhIHBhY2thZ2UgdXBncmFkZVxuICBzZXRUaW1lb3V0KCgpID0+IGRpc3BhdGNoKGRvRmV0Y2hNeVN1YnNjcmlwdGlvbnMoKSksIDUwMDApO1xuICBjb25zdCBjaGVja1N1YnNjcmlwdGlvbnNUaW1lciA9IHNldEludGVydmFsKCgpID0+IGRpc3BhdGNoKGRvQ2hlY2tTdWJzY3JpcHRpb25zKCkpLCBDSEVDS19TVUJTQ1JJUFRJT05TX0lOVEVSVkFMKTtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IENIRUNLX1NVQlNDUklQVElPTlNfU1VCU0NSSUJFLFxuICAgIGRhdGE6IHtcbiAgICAgIGNoZWNrU3Vic2NyaXB0aW9uc1RpbWVyXG4gICAgfVxuICB9KTtcbiAgc2V0SW50ZXJ2YWwoKCkgPT4gZGlzcGF0Y2goZG9DaGVja1N1YnNjcmlwdGlvbnMoKSksIENIRUNLX1NVQlNDUklQVElPTlNfSU5URVJWQUwpO1xufTtcbmNvbnN0IGRvRmV0Y2hSZWNvbW1lbmRlZFN1YnNjcmlwdGlvbnMgPSAoKSA9PiBkaXNwYXRjaCA9PiB7XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBHRVRfU1VHR0VTVEVEX1NVQlNDUklQVElPTlNfU1RBUlRcbiAgfSk7XG4gIHJldHVybiBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ3N1Z2dlc3QnKS50aGVuKHN1Z2dlc3RlZCA9PiBkaXNwYXRjaCh7XG4gICAgdHlwZTogR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX1NVQ0NFU1MsXG4gICAgZGF0YTogc3VnZ2VzdGVkXG4gIH0pKS5jYXRjaChlcnJvciA9PiBkaXNwYXRjaCh7XG4gICAgdHlwZTogR0VUX1NVR0dFU1RFRF9TVUJTQ1JJUFRJT05TX0ZBSUwsXG4gICAgZXJyb3JcbiAgfSkpO1xufTtcbmNvbnN0IGRvQ29tcGxldGVGaXJzdFJ1biA9ICgpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogU1VCU0NSSVBUSU9OX0ZJUlNUX1JVTl9DT01QTEVURURcbn0pO1xuY29uc3QgZG9TaG93U3VnZ2VzdGVkU3VicyA9ICgpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogVklFV19TVUdHRVNURURfU1VCU0NSSVBUSU9OU1xufSk7XG5jb25zdCBkb0NoYW5uZWxTdWJzY3JpcHRpb25FbmFibGVOb3RpZmljYXRpb25zID0gY2hhbm5lbE5hbWUgPT4gZGlzcGF0Y2ggPT4gZGlzcGF0Y2goe1xuICB0eXBlOiBDSEFOTkVMX1NVQlNDUklQVElPTl9FTkFCTEVfTk9USUZJQ0FUSU9OUyxcbiAgZGF0YTogY2hhbm5lbE5hbWVcbn0pO1xuY29uc3QgZG9DaGFubmVsU3Vic2NyaXB0aW9uRGlzYWJsZU5vdGlmaWNhdGlvbnMgPSBjaGFubmVsTmFtZSA9PiBkaXNwYXRjaCA9PiBkaXNwYXRjaCh7XG4gIHR5cGU6IENIQU5ORUxfU1VCU0NSSVBUSU9OX0RJU0FCTEVfTk9USUZJQ0FUSU9OUyxcbiAgZGF0YTogY2hhbm5lbE5hbWVcbn0pO1xuXG5mdW5jdGlvbiBkb0ZldGNoQ29zdEluZm9Gb3JVcmkodXJpKSB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNsYWltID0gbGJyeVJlZHV4LnNlbGVjdENsYWltc0J5VXJpKHN0YXRlKVt1cmldO1xuICAgIGlmICghY2xhaW0pIHJldHVybjtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmUoY29zdEluZm8pIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQ09TVF9JTkZPX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVyaSxcbiAgICAgICAgICBjb3N0SW5mb1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWUgPSBjbGFpbS52YWx1ZSA/IGNsYWltLnZhbHVlLmZlZSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChmZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGNvc3Q6IDAsXG4gICAgICAgIGluY2x1ZGVzRGF0YTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmZWUuY3VycmVuY3kgPT09ICdMQkMnKSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgY29zdDogZmVlLmFtb3VudCxcbiAgICAgICAgaW5jbHVkZXNEYXRhOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTGJyeWlvLmdldEV4Y2hhbmdlUmF0ZXMoKS50aGVuKCh7XG4gICAgICAgIExCQ19VU0RcbiAgICAgIH0pID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgY29zdDogZmVlLmFtb3VudCAvIExCQ19VU0QsXG4gICAgICAgICAgaW5jbHVkZXNEYXRhOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBDSEVDS19CTEFDS19MSVNURURfQ09OVEVOVF9JTlRFUlZBTCA9IDYwICogNjAgKiAxMDAwO1xuZnVuY3Rpb24gZG9GZXRjaEJsYWNrTGlzdGVkT3V0cG9pbnRzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX1NUQVJURURcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoe1xuICAgICAgb3V0cG9pbnRzXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgc3BsaXRPdXRwb2ludHMgPSBbXTtcblxuICAgICAgaWYgKG91dHBvaW50cykge1xuICAgICAgICBvdXRwb2ludHMuZm9yRWFjaCgob3V0cG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3R4aWQsIG5vdXRdID0gb3V0cG9pbnQuc3BsaXQoJzonKTtcbiAgICAgICAgICBzcGxpdE91dHBvaW50c1tpbmRleF0gPSB7XG4gICAgICAgICAgICB0eGlkLFxuICAgICAgICAgICAgbm91dDogTnVtYmVyLnBhcnNlSW50KG5vdXQsIDEwKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEZFVENIX0JMQUNLX0xJU1RFRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHBvaW50czogc3BsaXRPdXRwb2ludHMsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbHVyZSA9ICh7XG4gICAgICBlcnJvclxuICAgIH0pID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfRkFJTEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgc3VjY2VzczogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIExicnlpby5jYWxsKCdmaWxlJywgJ2xpc3RfYmxvY2tlZCcpLnRoZW4oc3VjY2VzcywgZmFpbHVyZSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0JsYWNrTGlzdGVkT3V0cG9pbnRzU3Vic2NyaWJlKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKGRvRmV0Y2hCbGFja0xpc3RlZE91dHBvaW50cygpKTtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiBkaXNwYXRjaChkb0ZldGNoQmxhY2tMaXN0ZWRPdXRwb2ludHMoKSksIENIRUNLX0JMQUNLX0xJU1RFRF9DT05URU5UX0lOVEVSVkFMKTtcbiAgfTtcbn1cblxuY29uc3QgQ0hFQ0tfRklMVEVSRURfQ09OVEVOVF9JTlRFUlZBTCA9IDYwICogNjAgKiAxMDAwO1xuZnVuY3Rpb24gZG9GZXRjaEZpbHRlcmVkT3V0cG9pbnRzKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICh7XG4gICAgICBvdXRwb2ludHNcbiAgICB9KSA9PiB7XG4gICAgICBsZXQgZm9ybWF0dGVkT3V0cG9pbnRzID0gW107XG5cbiAgICAgIGlmIChvdXRwb2ludHMpIHtcbiAgICAgICAgZm9ybWF0dGVkT3V0cG9pbnRzID0gb3V0cG9pbnRzLm1hcChvdXRwb2ludCA9PiB7XG4gICAgICAgICAgY29uc3QgW3R4aWQsIG5vdXRdID0gb3V0cG9pbnQuc3BsaXQoJzonKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHhpZCxcbiAgICAgICAgICAgIG5vdXQ6IE51bWJlci5wYXJzZUludChub3V0LCAxMClcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9GSUxURVJFRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHBvaW50czogZm9ybWF0dGVkT3V0cG9pbnRzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gKHtcbiAgICAgIGVycm9yXG4gICAgfSkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9GSUxURVJFRF9DT05URU5UX0ZBSUxFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBMYnJ5aW8uY2FsbCgnZmlsZScsICdsaXN0X2ZpbHRlcmVkJykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvRmlsdGVyZWRPdXRwb2ludHNTdWJzY3JpYmUoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goZG9GZXRjaEZpbHRlcmVkT3V0cG9pbnRzKCkpO1xuICAgIHNldEludGVydmFsKCgpID0+IGRpc3BhdGNoKGRvRmV0Y2hGaWx0ZXJlZE91dHBvaW50cygpKSwgQ0hFQ0tfRklMVEVSRURfQ09OVEVOVF9JTlRFUlZBTCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvRmV0Y2hGZWF0dXJlZFVyaXMob2ZmbG9hZFJlc29sdmUgPSBmYWxzZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfU1RBUlRFRFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9ICh7XG4gICAgICBVcmlzXG4gICAgfSkgPT4ge1xuICAgICAgbGV0IHVyaXNUb1Jlc29sdmUgPSBbXTtcbiAgICAgIE9iamVjdC5rZXlzKFVyaXMpLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgICB1cmlzVG9SZXNvbHZlID0gWy4uLnVyaXNUb1Jlc29sdmUsIC4uLlVyaXNbY2F0ZWdvcnldXTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYWN0aW9ucyA9IFt7XG4gICAgICAgIHR5cGU6IEZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJpczogVXJpcyxcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1dO1xuXG4gICAgICBpZiAodXJpc1RvUmVzb2x2ZS5sZW5ndGggJiYgIW9mZmxvYWRSZXNvbHZlKSB7XG4gICAgICAgIGFjdGlvbnMucHVzaChsYnJ5UmVkdXguZG9SZXNvbHZlVXJpcyh1cmlzVG9SZXNvbHZlKSk7XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKGxicnlSZWR1eC5iYXRjaEFjdGlvbnMoLi4uYWN0aW9ucykpO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9GRUFUVVJFRF9DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVyaXM6IHt9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBMYnJ5aW8uY2FsbCgnZmlsZScsICdsaXN0X2hvbWVwYWdlJykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvRmV0Y2hUcmVuZGluZ1VyaXMoKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfVFJFTkRJTkdfQ09OVEVOVF9TVEFSVEVEXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWNjZXNzID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCB1cmlzVG9SZXNvbHZlID0gZGF0YS5tYXAodXJpID0+IHVyaS51cmwpO1xuICAgICAgY29uc3QgYWN0aW9ucyA9IFtsYnJ5UmVkdXguZG9SZXNvbHZlVXJpcyh1cmlzVG9SZXNvbHZlKSwge1xuICAgICAgICB0eXBlOiBGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVyaXM6IGRhdGEsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XTtcbiAgICAgIGRpc3BhdGNoKGxicnlSZWR1eC5iYXRjaEFjdGlvbnMoLi4uYWN0aW9ucykpO1xuICAgIH07XG5cbiAgICBjb25zdCBmYWlsdXJlID0gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGRVRDSF9UUkVORElOR19DT05URU5UX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVyaXM6IFtdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBMYnJ5aW8uY2FsbCgnZmlsZScsICdsaXN0X3RyZW5kaW5nJykudGhlbihzdWNjZXNzLCBmYWlsdXJlKTtcbiAgfTtcbn1cblxuLy8gICAgICBcbmNvbnN0IGRvRmV0Y2hWaWV3Q291bnQgPSBjbGFpbUlkID0+IGRpc3BhdGNoID0+IHtcbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEZFVENIX1ZJRVdfQ09VTlRfU1RBUlRFRFxuICB9KTtcbiAgcmV0dXJuIExicnlpby5jYWxsKCdmaWxlJywgJ3ZpZXdfY291bnQnLCB7XG4gICAgY2xhaW1faWQ6IGNsYWltSWRcbiAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgIGNvbnN0IHZpZXdDb3VudCA9IHJlc3VsdFswXTtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9WSUVXX0NPVU5UX0NPTVBMRVRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xhaW1JZCxcbiAgICAgICAgdmlld0NvdW50XG4gICAgICB9XG4gICAgfSk7XG4gIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGRVRDSF9WSUVXX0NPVU5UX0ZBSUxFRCxcbiAgICAgIGRhdGE6IGVycm9yXG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRvRmV0Y2hTdWJDb3VudCA9IGNsYWltSWQgPT4gZGlzcGF0Y2ggPT4ge1xuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogRkVUQ0hfU1VCX0NPVU5UX1NUQVJURURcbiAgfSk7XG4gIHJldHVybiBMYnJ5aW8uY2FsbCgnc3Vic2NyaXB0aW9uJywgJ3N1Yl9jb3VudCcsIHtcbiAgICBjbGFpbV9pZDogY2xhaW1JZFxuICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgY29uc3Qgc3ViQ291bnQgPSByZXN1bHRbMF07XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRkVUQ0hfU1VCX0NPVU5UX0NPTVBMRVRFRCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xhaW1JZCxcbiAgICAgICAgc3ViQ291bnRcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZFVENIX1NVQl9DT1VOVF9GQUlMRUQsXG4gICAgICBkYXRhOiBlcnJvclxuICAgIH0pO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvU2V0RGVmYXVsdEFjY291bnQoc3VjY2VzcywgZmFpbHVyZSkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNFVF9ERUZBVUxUX0FDQ09VTlRcbiAgICB9KTtcbiAgICBsYnJ5UmVkdXguTGJyeS5hY2NvdW50X2xpc3QoKS50aGVuKGFjY291bnRMaXN0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGJjX21haW5uZXQ6IGFjY291bnRzXG4gICAgICB9ID0gYWNjb3VudExpc3Q7XG4gICAgICBsZXQgZGVmYXVsdElkO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjY291bnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhY2NvdW50c1tpXS5zYXRvc2hpcyA+IDApIHtcbiAgICAgICAgICBkZWZhdWx0SWQgPSBhY2NvdW50c1tpXS5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSAvLyBJbiBhIGNhc2Ugd2hlcmUgdGhlcmUncyBubyBiYWxhbmNlIG9uIGVpdGhlciBhY2NvdW50XG4gICAgICAvLyBhc3N1bWUgdGhlIHNlY29uZCAod2hpY2ggaXMgY3JlYXRlZCBhZnRlciBzeW5jKSBhcyBkZWZhdWx0XG5cblxuICAgICAgaWYgKCFkZWZhdWx0SWQgJiYgYWNjb3VudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBkZWZhdWx0SWQgPSBhY2NvdW50c1sxXS5pZDtcbiAgICAgIH0gLy8gU2V0IHRoZSBkZWZhdWx0IGFjY291bnRcblxuXG4gICAgICBpZiAoZGVmYXVsdElkKSB7XG4gICAgICAgIGxicnlSZWR1eC5MYnJ5LmFjY291bnRfc2V0KHtcbiAgICAgICAgICBhY2NvdW50X2lkOiBkZWZhdWx0SWQsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc3VjY2VzcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBpZiAoZmFpbHVyZSkge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGZhaWx1cmUpIHtcbiAgICAgICAgLy8gbm8gZGVmYXVsdCBhY2NvdW50IHRvIHNldFxuICAgICAgICBmYWlsdXJlKCdDb3VsZCBub3Qgc2V0IGEgZGVmYXVsdCBhY2NvdW50Jyk7IC8vIGZhaWxcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGZhaWx1cmUpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9TZXRTeW5jKG9sZEhhc2gsIG5ld0hhc2gsIGRhdGEpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBTRVRfU1lOQ19TVEFSVEVEXG4gICAgfSk7XG4gICAgcmV0dXJuIExicnlpby5jYWxsKCdzeW5jJywgJ3NldCcsIHtcbiAgICAgIG9sZF9oYXNoOiBvbGRIYXNoLFxuICAgICAgbmV3X2hhc2g6IG5ld0hhc2gsXG4gICAgICBkYXRhXG4gICAgfSwgJ3Bvc3QnKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghcmVzcG9uc2UuaGFzaCkge1xuICAgICAgICB0aHJvdyBFcnJvcignTm8gaGFzaCByZXR1cm5lZCBmb3Igc3luYy9zZXQuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNFVF9TWU5DX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHN5bmNIYXNoOiByZXNwb25zZS5oYXNoXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU0VUX1NZTkNfRkFJTEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBkb0dldFN5bmMocGFzc2VkUGFzc3dvcmQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHBhc3N3b3JkID0gcGFzc2VkUGFzc3dvcmQgPT09IG51bGwgfHwgcGFzc2VkUGFzc3dvcmQgPT09IHVuZGVmaW5lZCA/ICcnIDogcGFzc2VkUGFzc3dvcmQ7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2soZXJyb3IsIGhhc05ld0RhdGEpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgcGFzc2VkIHRvIFwiZG9HZXRTeW5jXCIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGVycm9yLCBoYXNOZXdEYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEdFVF9TWU5DX1NUQVJURURcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgbGJyeVJlZHV4Lkxicnkud2FsbGV0X3N0YXR1cygpLnRoZW4oc3RhdHVzID0+IHtcbiAgICAgIGlmIChzdGF0dXMuaXNfbG9ja2VkKSB7XG4gICAgICAgIHJldHVybiBsYnJ5UmVkdXguTGJyeS53YWxsZXRfdW5sb2NrKHtcbiAgICAgICAgICBwYXNzd29yZFxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gV2FsbGV0IGlzIGFscmVhZHkgdW5sb2NrZWRcblxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KS50aGVuKGlzVW5sb2NrZWQgPT4ge1xuICAgICAgaWYgKGlzVW5sb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIGxicnlSZWR1eC5MYnJ5LnN5bmNfaGFzaCgpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnVubG9ja0ZhaWxlZCA9IHRydWU7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9KS50aGVuKGhhc2ggPT4gTGJyeWlvLmNhbGwoJ3N5bmMnLCAnZ2V0Jywge1xuICAgICAgaGFzaFxuICAgIH0sICdwb3N0JykpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgY29uc3Qgc3luY0hhc2ggPSByZXNwb25zZS5oYXNoO1xuICAgICAgZGF0YS5zeW5jSGFzaCA9IHN5bmNIYXNoO1xuICAgICAgZGF0YS5zeW5jRGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICBkYXRhLmNoYW5nZWQgPSByZXNwb25zZS5jaGFuZ2VkO1xuICAgICAgZGF0YS5oYXNTeW5jZWRXYWxsZXQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVzcG9uc2UuY2hhbmdlZCkge1xuICAgICAgICByZXR1cm4gbGJyeVJlZHV4Lkxicnkuc3luY19hcHBseSh7XG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICBibG9ja2luZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEdFVF9TWU5DX0NPTVBMRVRFRCxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVDYWxsYmFjayhudWxsLCBkYXRhLmNoYW5nZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaGFzaDogd2FsbGV0SGFzaCxcbiAgICAgICAgZGF0YTogd2FsbGV0RGF0YVxuICAgICAgfSA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAod2FsbGV0SGFzaCAhPT0gZGF0YS5zeW5jSGFzaCkge1xuICAgICAgICAvLyBkaWZmZXJlbnQgbG9jYWwgaGFzaCwgbmVlZCB0byBzeW5jaHJvbmlzZVxuICAgICAgICBkaXNwYXRjaChkb1NldFN5bmMoZGF0YS5zeW5jSGFzaCwgd2FsbGV0SGFzaCwgd2FsbGV0RGF0YSkpO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEdFVF9TWU5DX0NPTVBMRVRFRCxcbiAgICAgICAgZGF0YVxuICAgICAgfSk7XG4gICAgICBoYW5kbGVDYWxsYmFjayhudWxsLCBkYXRhLmNoYW5nZWQpO1xuICAgIH0pLmNhdGNoKHN5bmNBdHRlbXB0RXJyb3IgPT4ge1xuICAgICAgaWYgKGRhdGEudW5sb2NrRmFpbGVkKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRVRfU1lOQ19GQUlMRUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZXJyb3I6IHN5bmNBdHRlbXB0RXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwYXNzd29yZCAhPT0gJycpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBTWU5DX0FQUExZX0JBRF9QQVNTV09SRFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlQ2FsbGJhY2soc3luY0F0dGVtcHRFcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaGFzU3luY2VkV2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0Vycm9yIGdldHRpbmcgc3luY2VkIHdhbGxldCc7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBHRVRfU1lOQ19GQUlMRUQsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBUZW1wIHNvbHV0aW9uIHVudGlsIHdlIGhhdmUgYSBiYWQgcGFzc3dvcmQgZXJyb3IgY29kZVxuICAgICAgICAvLyBEb24ndCBmYWlsIG9uIGJsYW5rIHBhc3N3b3JkcyBzbyB3ZSBkb24ndCBzaG93IGEgXCJwYXNzd29yZCBlcnJvclwiIG1lc3NhZ2VcbiAgICAgICAgLy8gYmVmb3JlIHVzZXJzIGhhdmUgZXZlciBlbnRlcmVkIGEgcGFzc3dvcmRcblxuICAgICAgICBpZiAocGFzc3dvcmQgIT09ICcnKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogU1lOQ19BUFBMWV9CQURfUEFTU1dPUkRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZUNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZXIgZG9lc24ndCBoYXZlIGEgc3luY2VkIHdhbGxldFxuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhc1N5bmNlZFdhbGxldDogZmFsc2UsXG4gICAgICAgICAgICBzeW5jSGFzaDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vIGNhbGwgc3luY19hcHBseSB0byBnZXQgZGF0YSB0byBzeW5jXG4gICAgICAgIC8vIGZpcnN0IHRpbWUgc3luYy4gdXNlIGFueSBzdHJpbmcgZm9yIG9sZCBoYXNoXG5cbiAgICAgICAgbGJyeVJlZHV4Lkxicnkuc3luY19hcHBseSh7XG4gICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgfSkudGhlbigoe1xuICAgICAgICAgIGhhc2g6IHdhbGxldEhhc2gsXG4gICAgICAgICAgZGF0YTogc3luY0FwcGx5RGF0YVxuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgZGlzcGF0Y2goZG9TZXRTeW5jKCcnLCB3YWxsZXRIYXNoLCBzeW5jQXBwbHlEYXRhLCBwYXNzd29yZCkpO1xuICAgICAgICAgIGhhbmRsZUNhbGxiYWNrKCk7XG4gICAgICAgIH0pLmNhdGNoKHN5bmNBcHBseUVycm9yID0+IHtcbiAgICAgICAgICBoYW5kbGVDYWxsYmFjayhzeW5jQXBwbHlFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gZG9TeW5jQXBwbHkoc3luY0hhc2gsIHN5bmNEYXRhLCBwYXNzd29yZCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFNZTkNfQVBQTFlfU1RBUlRFRFxuICAgIH0pO1xuICAgIGxicnlSZWR1eC5MYnJ5LnN5bmNfYXBwbHkoe1xuICAgICAgcGFzc3dvcmQsXG4gICAgICBkYXRhOiBzeW5jRGF0YVxuICAgIH0pLnRoZW4oKHtcbiAgICAgIGhhc2g6IHdhbGxldEhhc2gsXG4gICAgICBkYXRhOiB3YWxsZXREYXRhXG4gICAgfSkgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTWU5DX0FQUExZX0NPTVBMRVRFRFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh3YWxsZXRIYXNoICE9PSBzeW5jSGFzaCkge1xuICAgICAgICAvLyBkaWZmZXJlbnQgbG9jYWwgaGFzaCwgbmVlZCB0byBzeW5jaHJvbmlzZVxuICAgICAgICBkaXNwYXRjaChkb1NldFN5bmMoc3luY0hhc2gsIHdhbGxldEhhc2gsIHdhbGxldERhdGEpKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNZTkNfQVBQTFlfRkFJTEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3I6ICdJbnZhbGlkIHBhc3N3b3JkIHNwZWNpZmllZC4gUGxlYXNlIGVudGVyIHRoZSBwYXNzd29yZCBmb3IgeW91ciBwcmV2aW91c2x5IHN5bmNocm9uaXNlZCB3YWxsZXQuJ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvQ2hlY2tTeW5jKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEdFVF9TWU5DX1NUQVJURURcbiAgICB9KTtcbiAgICBsYnJ5UmVkdXguTGJyeS5zeW5jX2hhc2goKS50aGVuKGhhc2ggPT4ge1xuICAgICAgTGJyeWlvLmNhbGwoJ3N5bmMnLCAnZ2V0Jywge1xuICAgICAgICBoYXNoXG4gICAgICB9LCAncG9zdCcpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIGhhc1N5bmNlZFdhbGxldDogdHJ1ZSxcbiAgICAgICAgICBzeW5jSGFzaDogcmVzcG9uc2UuaGFzaCxcbiAgICAgICAgICBzeW5jRGF0YTogcmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICBoYXNoQ2hhbmdlZDogcmVzcG9uc2UuY2hhbmdlZFxuICAgICAgICB9O1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIHVzZXIgZG9lc24ndCBoYXZlIGEgc3luY2VkIHdhbGxldFxuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogR0VUX1NZTkNfQ09NUExFVEVELFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhc1N5bmNlZFdhbGxldDogZmFsc2UsXG4gICAgICAgICAgICBzeW5jSGFzaDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRvUmVzZXRTeW5jKCkge1xuICByZXR1cm4gZGlzcGF0Y2ggPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogU1lOQ19SRVNFVFxuICAgIH0pO1xuICAgIHJlc29sdmUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkb1N5bmNFbmNyeXB0QW5kRGVjcnlwdChvbGRQYXNzd29yZCwgbmV3UGFzc3dvcmQsIGVuY3J5cHQpIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgcmV0dXJuIGxicnlSZWR1eC5MYnJ5LnN5bmNfaGFzaCgpLnRoZW4oaGFzaCA9PiBMYnJ5aW8uY2FsbCgnc3luYycsICdnZXQnLCB7XG4gICAgICBoYXNoXG4gICAgfSwgJ3Bvc3QnKSkudGhlbihzeW5jR2V0UmVzcG9uc2UgPT4ge1xuICAgICAgZGF0YS5vbGRIYXNoID0gc3luY0dldFJlc3BvbnNlLmhhc2g7XG4gICAgICByZXR1cm4gbGJyeVJlZHV4Lkxicnkuc3luY19hcHBseSh7XG4gICAgICAgIHBhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgICAgZGF0YTogc3luY0dldFJlc3BvbnNlLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGVuY3J5cHQpIHtcbiAgICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmRvV2FsbGV0RW5jcnlwdChuZXdQYXNzd29yZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2gobGJyeVJlZHV4LmRvV2FsbGV0RGVjcnlwdCgpKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKCgpID0+IGxicnlSZWR1eC5MYnJ5LnN5bmNfYXBwbHkoe1xuICAgICAgcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkXG4gICAgfSkpLnRoZW4oc3luY0FwcGx5UmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHN5bmNBcHBseVJlc3BvbnNlLmhhc2ggIT09IGRhdGEub2xkSGFzaCkge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goZG9TZXRTeW5jKGRhdGEub2xkSGFzaCwgc3luY0FwcGx5UmVzcG9uc2UuaGFzaCwgc3luY0FwcGx5UmVzcG9uc2UuZGF0YSkpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICB9O1xufVxuXG4vLyAgICAgIFxuY29uc3QgZG9VcGRhdGVVcGxvYWRQcm9ncmVzcyA9IChwcm9ncmVzcywgcGFyYW1zLCB4aHIpID0+IGRpc3BhdGNoID0+IGRpc3BhdGNoKHtcbiAgdHlwZTogVVBEQVRFX1VQTE9BRF9QUk9HUkVTUyxcbiAgZGF0YToge1xuICAgIHByb2dyZXNzLFxuICAgIHBhcmFtcyxcbiAgICB4aHJcbiAgfVxufSk7XG5cbmNvbnN0IHJlZHVjZXJzID0ge307XG5jb25zdCBkZWZhdWx0U3RhdGUkMSA9IHtcbiAgYXV0aGVudGljYXRpbmc6IGZhbHNlXG59O1xuXG5yZWR1Y2Vyc1tHRU5FUkFURV9BVVRIX1RPS0VOX0ZBSUxVUkVdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgYXV0aFRva2VuOiBudWxsLFxuICBhdXRoZW50aWNhdGluZzogZmFsc2Vcbn0pO1xuXG5yZWR1Y2Vyc1tHRU5FUkFURV9BVVRIX1RPS0VOX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgYXV0aGVudGljYXRpbmc6IHRydWVcbn0pO1xuXG5yZWR1Y2Vyc1tHRU5FUkFURV9BVVRIX1RPS0VOX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGF1dGhUb2tlbjogYWN0aW9uLmRhdGEuYXV0aFRva2VuLFxuICBhdXRoZW50aWNhdGluZzogZmFsc2Vcbn0pO1xuXG5mdW5jdGlvbiBhdXRoUmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSQxLCBhY3Rpb24pIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzW2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbmNvbnN0IHJlZHVjZXJzJDEgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSQyID0ge1xuICBmZXRjaGluZzogZmFsc2UsXG4gIGNsYWltZWRSZXdhcmRzQnlJZDoge30sXG4gIC8vIGlkID0+IHJld2FyZFxuICB1bmNsYWltZWRSZXdhcmRzOiBbXSxcbiAgY2xhaW1QZW5kaW5nQnlUeXBlOiB7fSxcbiAgY2xhaW1FcnJvcnNCeVR5cGU6IHt9LFxuICByZXdhcmRlZENvbnRlbnRDbGFpbUlkczogW11cbn07XG5cbnJlZHVjZXJzJDFbbGJyeVJlZHV4LkFDVElPTlMuRkVUQ0hfUkVXQVJEU19TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGZldGNoaW5nOiB0cnVlXG59KTtcblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5GRVRDSF9SRVdBUkRTX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgdXNlclJld2FyZHNcbiAgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCB1bmNsYWltZWRSZXdhcmRzID0gW107XG4gIGNvbnN0IGNsYWltZWRSZXdhcmRzID0ge307XG4gIHVzZXJSZXdhcmRzLmZvckVhY2gocmV3YXJkID0+IHtcbiAgICBpZiAocmV3YXJkLnRyYW5zYWN0aW9uX2lkKSB7XG4gICAgICBjbGFpbWVkUmV3YXJkc1tyZXdhcmQuaWRdID0gcmV3YXJkO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmNsYWltZWRSZXdhcmRzLnB1c2gocmV3YXJkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBjbGFpbWVkUmV3YXJkc0J5SWQ6IGNsYWltZWRSZXdhcmRzLFxuICAgIHVuY2xhaW1lZFJld2FyZHMsXG4gICAgZmV0Y2hpbmc6IGZhbHNlXG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc2V0Q2xhaW1SZXdhcmRTdGF0ZShzdGF0ZSwgcmV3YXJkLCBpc0NsYWltaW5nLCBlcnJvck1lc3NhZ2UgPSAnJykge1xuICBjb25zdCBuZXdDbGFpbVBlbmRpbmdCeVR5cGUgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jbGFpbVBlbmRpbmdCeVR5cGUpO1xuICBjb25zdCBuZXdDbGFpbUVycm9yc0J5VHlwZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNsYWltRXJyb3JzQnlUeXBlKTsgLy8gQ3VycmVudGx5LCBmb3IgbXVsdGlwbGUgcmV3YXJkcyBvZiB0aGUgc2FtZSB0eXBlLCB0aGV5IHdpbGwgYm90aCBzaG93IFwiY2xhaW1pbmdcIiB3aGVuIG9uZSBpcyBiZWFjdXNlIHdlIHRyYWNrIHRoaXMgYnkgYHJld2FyZF90eXBlYFxuICAvLyBUbyBmaXggdGhpcyB3ZSB3aWxsIG5lZWQgdG8gdXNlIGBjbGFpbV9jb2RlYCBpbnN0ZWFkLCBhbmQgY2hhbmdlIGFsbCBzZWxlY3RvcnMgdG8gbWF0Y2hcblxuICBpZiAoaXNDbGFpbWluZykge1xuICAgIG5ld0NsYWltUGVuZGluZ0J5VHlwZVtyZXdhcmQucmV3YXJkX3R5cGVdID0gaXNDbGFpbWluZztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgbmV3Q2xhaW1QZW5kaW5nQnlUeXBlW3Jld2FyZC5yZXdhcmRfdHlwZV07XG4gIH1cblxuICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgbmV3Q2xhaW1FcnJvcnNCeVR5cGVbcmV3YXJkLnJld2FyZF90eXBlXSA9IGVycm9yTWVzc2FnZTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgbmV3Q2xhaW1FcnJvcnNCeVR5cGVbcmV3YXJkLnJld2FyZF90eXBlXTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIGNsYWltUGVuZGluZ0J5VHlwZTogbmV3Q2xhaW1QZW5kaW5nQnlUeXBlLFxuICAgIGNsYWltRXJyb3JzQnlUeXBlOiBuZXdDbGFpbUVycm9yc0J5VHlwZVxuICB9KTtcbn1cblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5DTEFJTV9SRVdBUkRfU1RBUlRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgcmV3YXJkXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgcmV0dXJuIHNldENsYWltUmV3YXJkU3RhdGUoc3RhdGUsIHJld2FyZCwgdHJ1ZSwgJycpO1xufTtcblxucmVkdWNlcnMkMVtsYnJ5UmVkdXguQUNUSU9OUy5DTEFJTV9SRVdBUkRfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgcmV3YXJkXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgY29uc3Qge1xuICAgIHVuY2xhaW1lZFJld2FyZHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBpbmRleCA9IHVuY2xhaW1lZFJld2FyZHMuZmluZEluZGV4KHVyID0+IHVyLmNsYWltX2NvZGUgPT09IHJld2FyZC5jbGFpbV9jb2RlKTtcbiAgdW5jbGFpbWVkUmV3YXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBjb25zdCB7XG4gICAgY2xhaW1lZFJld2FyZHNCeUlkXG4gIH0gPSBzdGF0ZTtcbiAgY2xhaW1lZFJld2FyZHNCeUlkW3Jld2FyZC5pZF0gPSByZXdhcmQ7XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSxcbiAgICB1bmNsYWltZWRSZXdhcmRzOiBbLi4udW5jbGFpbWVkUmV3YXJkc10sXG4gICAgY2xhaW1lZFJld2FyZHNCeUlkOiB7IC4uLmNsYWltZWRSZXdhcmRzQnlJZFxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHNldENsYWltUmV3YXJkU3RhdGUobmV3U3RhdGUsIHJld2FyZCwgZmFsc2UsICcnKTtcbn07XG5cbnJlZHVjZXJzJDFbbGJyeVJlZHV4LkFDVElPTlMuQ0xBSU1fUkVXQVJEX0ZBSUxVUkVdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3Qge1xuICAgIHJld2FyZCxcbiAgICBlcnJvclxuICB9ID0gYWN0aW9uLmRhdGE7XG4gIHJldHVybiBzZXRDbGFpbVJld2FyZFN0YXRlKHN0YXRlLCByZXdhcmQsIGZhbHNlLCBlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5yZWR1Y2VycyQxW2xicnlSZWR1eC5BQ1RJT05TLkNMQUlNX1JFV0FSRF9DTEVBUl9FUlJPUl0gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgcmV3YXJkXG4gIH0gPSBhY3Rpb24uZGF0YTtcbiAgcmV0dXJuIHNldENsYWltUmV3YXJkU3RhdGUoc3RhdGUsIHJld2FyZCwgc3RhdGUuY2xhaW1QZW5kaW5nQnlUeXBlW3Jld2FyZC5yZXdhcmRfdHlwZV0sICcnKTtcbn07XG5cbnJlZHVjZXJzJDFbbGJyeVJlZHV4LkFDVElPTlMuRkVUQ0hfUkVXQVJEX0NPTlRFTlRfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFpbUlkc1xuICB9ID0gYWN0aW9uLmRhdGE7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHJld2FyZGVkQ29udGVudENsYWltSWRzOiBjbGFpbUlkc1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHJld2FyZHNSZWR1Y2VyKHN0YXRlID0gZGVmYXVsdFN0YXRlJDIsIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnMkMVthY3Rpb24udHlwZV07XG4gIGlmIChoYW5kbGVyKSByZXR1cm4gaGFuZGxlcihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5jb25zdCByZWR1Y2VycyQyID0ge307XG5jb25zdCBkZWZhdWx0U3RhdGUkMyA9IHtcbiAgYXV0aGVudGljYXRpb25Jc1BlbmRpbmc6IGZhbHNlLFxuICB1c2VySXNQZW5kaW5nOiBmYWxzZSxcbiAgZW1haWxOZXdJc1BlbmRpbmc6IGZhbHNlLFxuICBlbWFpbE5ld0Vycm9yTWVzc2FnZTogJycsXG4gIGVtYWlsVG9WZXJpZnk6ICcnLFxuICBlbWFpbEFscmVhZHlFeGlzdHM6IGZhbHNlLFxuICByZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbDogZmFsc2UsXG4gIGludml0ZU5ld0Vycm9yTWVzc2FnZTogJycsXG4gIGludml0ZU5ld0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZVN0YXR1c0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZXNSZW1haW5pbmc6IHVuZGVmaW5lZCxcbiAgaW52aXRlZXM6IHVuZGVmaW5lZCxcbiAgcmVmZXJyYWxMaW5rOiB1bmRlZmluZWQsXG4gIHJlZmVycmFsQ29kZTogdW5kZWZpbmVkLFxuICB1c2VyOiB1bmRlZmluZWQsXG4gIGFjY2Vzc1Rva2VuOiB1bmRlZmluZWQsXG4gIHlvdXR1YmVDaGFubmVsSW1wb3J0UGVuZGluZzogZmFsc2UsXG4gIHlvdXR1YmVDaGFubmVsSW1wb3J0RXJyb3JNZXNzYWdlOiAnJyxcbiAgcmVmZXJyZXJTZXRJc1BlbmRpbmc6IGZhbHNlLFxuICByZWZlcnJlclNldEVycm9yOiAnJ1xufTtcblxucmVkdWNlcnMkMltBVVRIRU5USUNBVElPTl9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGF1dGhlbnRpY2F0aW9uSXNQZW5kaW5nOiB0cnVlLFxuICB1c2VySXNQZW5kaW5nOiB0cnVlLFxuICBhY2Nlc3NUb2tlbjogZGVmYXVsdFN0YXRlJDMuYWNjZXNzVG9rZW5cbn0pO1xuXG5yZWR1Y2VycyQyW0FVVEhFTlRJQ0FUSU9OX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGF1dGhlbnRpY2F0aW9uSXNQZW5kaW5nOiBmYWxzZSxcbiAgdXNlcklzUGVuZGluZzogZmFsc2UsXG4gIGFjY2Vzc1Rva2VuOiBhY3Rpb24uZGF0YS5hY2Nlc3NUb2tlbixcbiAgdXNlcjogYWN0aW9uLmRhdGEudXNlclxufSk7XG5cbnJlZHVjZXJzJDJbQVVUSEVOVElDQVRJT05fRkFJTFVSRV0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBhdXRoZW50aWNhdGlvbklzUGVuZGluZzogZmFsc2UsXG4gIHVzZXJJc1BlbmRpbmc6IGZhbHNlLFxuICB1c2VyOiBudWxsXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0ZFVENIX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgdXNlcklzUGVuZGluZzogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9GRVRDSF9TVUNDRVNTXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICB1c2VySXNQZW5kaW5nOiBmYWxzZSxcbiAgdXNlcjogYWN0aW9uLmRhdGEudXNlcixcbiAgZW1haWxUb1ZlcmlmeTogYWN0aW9uLmRhdGEudXNlci5oYXNfdmVyaWZpZWRfZW1haWwgPyBudWxsIDogc3RhdGUuZW1haWxUb1ZlcmlmeVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9GRVRDSF9GQUlMVVJFXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHVzZXJJc1BlbmRpbmc6IHRydWUsXG4gIHVzZXI6IG51bGxcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfUEhPTkVfTkVXX1NUQVJURURdID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3QgdXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnVzZXIpO1xuICB1c2VyLmNvdW50cnlfY29kZSA9IGFjdGlvbi5kYXRhLmNvdW50cnlfY29kZTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgcGhvbmVOZXdJc1BlbmRpbmc6IHRydWUsXG4gICAgcGhvbmVOZXdFcnJvck1lc3NhZ2U6ICcnLFxuICAgIHVzZXJcbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW1VTRVJfUEhPTkVfTkVXX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHBob25lVG9WZXJpZnk6IGFjdGlvbi5kYXRhLnBob25lLFxuICBwaG9uZU5ld0lzUGVuZGluZzogZmFsc2Vcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfUEhPTkVfUkVTRVRdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVUb1ZlcmlmeTogbnVsbFxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9ORVdfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVOZXdJc1BlbmRpbmc6IGZhbHNlLFxuICBwaG9uZU5ld0Vycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfUEhPTkVfVkVSSUZZX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVWZXJpZnlJc1BlbmRpbmc6IHRydWUsXG4gIHBob25lVmVyaWZ5RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9WRVJJRllfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVUb1ZlcmlmeTogJycsXG4gIHBob25lVmVyaWZ5SXNQZW5kaW5nOiBmYWxzZSxcbiAgdXNlcjogYWN0aW9uLmRhdGEudXNlclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9QSE9ORV9WRVJJRllfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcGhvbmVWZXJpZnlJc1BlbmRpbmc6IGZhbHNlLFxuICBwaG9uZVZlcmlmeUVycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfRU1BSUxfTkVXX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxOZXdJc1BlbmRpbmc6IHRydWUsXG4gIGVtYWlsTmV3RXJyb3JNZXNzYWdlOiAnJyxcbiAgZW1haWxBbHJlYWR5RXhpc3RzOiBmYWxzZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9ORVdfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB1c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlcik7XG4gIHVzZXIucHJpbWFyeV9lbWFpbCA9IGFjdGlvbi5kYXRhLmVtYWlsO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBlbWFpbFRvVmVyaWZ5OiBhY3Rpb24uZGF0YS5lbWFpbCxcbiAgICBlbWFpbE5ld0lzUGVuZGluZzogZmFsc2UsXG4gICAgdXNlclxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9ORVdfRVhJU1RTXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGVtYWlsQWxyZWFkeUV4aXN0czogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9ORVdfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxOZXdJc1BlbmRpbmc6IGZhbHNlLFxuICBlbWFpbE5ld0Vycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfRU1BSUxfVkVSSUZZX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxWZXJpZnlJc1BlbmRpbmc6IHRydWUsXG4gIGVtYWlsVmVyaWZ5RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB1c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlcik7XG4gIHVzZXIucHJpbWFyeV9lbWFpbCA9IGFjdGlvbi5kYXRhLmVtYWlsO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBlbWFpbFRvVmVyaWZ5OiAnJyxcbiAgICBlbWFpbFZlcmlmeUlzUGVuZGluZzogZmFsc2UsXG4gICAgdXNlclxuICB9KTtcbn07XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxWZXJpZnlJc1BlbmRpbmc6IGZhbHNlLFxuICBlbWFpbFZlcmlmeUVycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfRU1BSUxfVkVSSUZZX1NFVF0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgZW1haWxUb1ZlcmlmeTogYWN0aW9uLmRhdGEuZW1haWxcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSURFTlRJVFlfVkVSSUZZX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaWRlbnRpdHlWZXJpZnlJc1BlbmRpbmc6IHRydWUsXG4gIGlkZW50aXR5VmVyaWZ5RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JREVOVElUWV9WRVJJRllfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgaWRlbnRpdHlWZXJpZnlJc1BlbmRpbmc6IGZhbHNlLFxuICBpZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZTogJycsXG4gIHVzZXI6IGFjdGlvbi5kYXRhLnVzZXJcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSURFTlRJVFlfVkVSSUZZX0ZBSUxVUkVdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGlkZW50aXR5VmVyaWZ5SXNQZW5kaW5nOiBmYWxzZSxcbiAgaWRlbnRpdHlWZXJpZnlFcnJvck1lc3NhZ2U6IGFjdGlvbi5kYXRhLmVycm9yXG59KTtcblxucmVkdWNlcnMkMltGRVRDSF9BQ0NFU1NfVE9LRU5fU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgdG9rZW5cbiAgfSA9IGFjdGlvbi5kYXRhO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICBhY2Nlc3NUb2tlbjogdG9rZW5cbiAgfSk7XG59O1xuXG5yZWR1Y2VycyQyW1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZVN0YXR1c0lzUGVuZGluZzogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9JTlZJVEVfU1RBVFVTX0ZFVENIX1NVQ0NFU1NdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZVN0YXR1c0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZXNSZW1haW5pbmc6IGFjdGlvbi5kYXRhLmludml0ZXNSZW1haW5pbmcsXG4gIGludml0ZWVzOiBhY3Rpb24uZGF0YS5pbnZpdGVlcyxcbiAgcmVmZXJyYWxMaW5rOiBhY3Rpb24uZGF0YS5yZWZlcnJhbExpbmssXG4gIHJlZmVycmFsQ29kZTogYWN0aW9uLmRhdGEucmVmZXJyYWxDb2RlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX0lOVklURV9ORVdfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBpbnZpdGVOZXdJc1BlbmRpbmc6IHRydWUsXG4gIGludml0ZU5ld0Vycm9yTWVzc2FnZTogJydcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSU5WSVRFX05FV19TVUNDRVNTXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZU5ld0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZU5ld0Vycm9yTWVzc2FnZTogJydcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSU5WSVRFX05FV19GQUlMVVJFXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBpbnZpdGVOZXdJc1BlbmRpbmc6IGZhbHNlLFxuICBpbnZpdGVOZXdFcnJvck1lc3NhZ2U6IGFjdGlvbi5kYXRhLmVycm9yLm1lc3NhZ2Vcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfSU5WSVRFX1NUQVRVU19GRVRDSF9GQUlMVVJFXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGludml0ZVN0YXR1c0lzUGVuZGluZzogZmFsc2UsXG4gIGludml0ZXNSZW1haW5pbmc6IG51bGwsXG4gIGludml0ZWVzOiBudWxsXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1lPVVRVQkVfSU1QT1JUX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgeW91dHViZUNoYW5uZWxJbXBvcnRQZW5kaW5nOiB0cnVlLFxuICB5b3V0dWJlQ2hhbm5lbEltcG9ydEVycm9yTWVzc2FnZTogJydcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfWU9VVFVCRV9JTVBPUlRfU1VDQ0VTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB0b3RhbCA9IGFjdGlvbi5kYXRhLnJlZHVjZSgoYWNjLCB2YWx1ZSkgPT4gYWNjICsgdmFsdWUudG90YWxfcHVibGlzaGVkX3ZpZGVvcywgMCk7XG4gIGNvbnN0IGNvbXBsZXRlID0gYWN0aW9uLmRhdGEucmVkdWNlKChhY2MsIHZhbHVlKSA9PiBhY2MgKyB2YWx1ZS50b3RhbF90cmFuc2ZlcnJlZCwgMCk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgIHlvdXR1YmVDaGFubmVsSW1wb3J0UGVuZGluZzogZmFsc2UsXG4gICAgeW91dHViZUNoYW5uZWxJbXBvcnRFcnJvck1lc3NhZ2U6ICcnLFxuICAgIHlvdXR1YmVDaGFubmVsSW1wb3J0VG90YWw6IHRvdGFsLFxuICAgIHlvdXR1YmVDaGFubmVsSW1wb3J0Q29tcGxldGU6IGNvbXBsZXRlXG4gIH0pO1xufTtcblxucmVkdWNlcnMkMltVU0VSX1lPVVRVQkVfSU1QT1JUX0ZBSUxVUkVdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHlvdXR1YmVDaGFubmVsSW1wb3J0UGVuZGluZzogZmFsc2UsXG4gIHlvdXR1YmVDaGFubmVsSW1wb3J0RXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICByZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbDogdHJ1ZVxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9FTUFJTF9WRVJJRllfUkVUUllfU1VDQ0VTU10gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICByZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbDogZmFsc2Vcbn0pO1xuXG5yZWR1Y2VycyQyW1VTRVJfRU1BSUxfVkVSSUZZX1JFVFJZX0ZBSUxVUkVdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcmVzZW5kaW5nVmVyaWZpY2F0aW9uRW1haWw6IGZhbHNlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1NFVF9SRUZFUlJFUl9TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHJlZmVycmVyU2V0SXNQZW5kaW5nOiB0cnVlLFxuICByZWZlcnJlclNldEVycm9yOiBkZWZhdWx0U3RhdGUkMy5yZWZlcnJlclNldEVycm9yXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1NFVF9SRUZFUlJFUl9TVUNDRVNTXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHJlZmVycmVyU2V0SXNQZW5kaW5nOiBmYWxzZSxcbiAgcmVmZXJyZXJTZXRFcnJvcjogZGVmYXVsdFN0YXRlJDMucmVmZXJyZXJTZXRFcnJvclxufSk7XG5cbnJlZHVjZXJzJDJbVVNFUl9TRVRfUkVGRVJSRVJfRkFJTFVSRV0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgcmVmZXJyZXJTZXRJc1BlbmRpbmc6IGZhbHNlLFxuICByZWZlcnJlclNldEVycm9yOiBhY3Rpb24uZGF0YS5lcnJvci5tZXNzYWdlXG59KTtcblxucmVkdWNlcnMkMltVU0VSX1NFVF9SRUZFUlJFUl9SRVNFVF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICByZWZlcnJlclNldElzUGVuZGluZzogZmFsc2UsXG4gIHJlZmVycmVyU2V0RXJyb3I6IGRlZmF1bHRTdGF0ZSQzLnJlZmVycmVyU2V0RXJyb3Jcbn0pO1xuXG5mdW5jdGlvbiB1c2VyUmVkdWNlcihzdGF0ZSA9IGRlZmF1bHRTdGF0ZSQzLCBhY3Rpb24pIHtcbiAgY29uc3QgaGFuZGxlciA9IHJlZHVjZXJzJDJbYWN0aW9uLnR5cGVdO1xuICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuY29uc3QgZGVmYXVsdFN0YXRlJDQgPSB7XG4gIGZldGNoaW5nOiB7fSxcbiAgYnlVcmk6IHt9XG59O1xuY29uc3QgY29zdEluZm9SZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtGRVRDSF9DT1NUX0lORk9fU1RBUlRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdXJpXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0ZldGNoaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmcpO1xuICAgIG5ld0ZldGNoaW5nW3VyaV0gPSB0cnVlO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmc6IG5ld0ZldGNoaW5nXG4gICAgfTtcbiAgfSxcbiAgW0ZFVENIX0NPU1RfSU5GT19DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVyaSxcbiAgICAgIGNvc3RJbmZvXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIGNvbnN0IG5ld0J5VXJpID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYnlVcmkpO1xuICAgIGNvbnN0IG5ld0ZldGNoaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZmV0Y2hpbmcpO1xuICAgIG5ld0J5VXJpW3VyaV0gPSBjb3N0SW5mbztcbiAgICBkZWxldGUgbmV3RmV0Y2hpbmdbdXJpXTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGJ5VXJpOiBuZXdCeVVyaSxcbiAgICAgIGZldGNoaW5nOiBuZXdGZXRjaGluZ1xuICAgIH07XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ0KTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDUgPSB7XG4gIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHM6IGZhbHNlLFxuICBmZXRjaGluZ0JsYWNrTGlzdGVkT3V0cG9pbnRzU3VjY2VlZDogdW5kZWZpbmVkLFxuICBibGFja0xpc3RlZE91dHBvaW50czogdW5kZWZpbmVkXG59O1xuY29uc3QgYmxhY2tsaXN0UmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoe1xuICBbRkVUQ0hfQkxBQ0tfTElTVEVEX0NPTlRFTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHM6IHRydWVcbiAgfSksXG4gIFtGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG91dHBvaW50cyxcbiAgICAgIHN1Y2Nlc3NcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICBmZXRjaGluZ0JsYWNrTGlzdGVkT3V0cG9pbnRzOiBmYWxzZSxcbiAgICAgIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHNTdWNjZWVkOiBzdWNjZXNzLFxuICAgICAgYmxhY2tMaXN0ZWRPdXRwb2ludHM6IG91dHBvaW50c1xuICAgIH07XG4gIH0sXG4gIFtGRVRDSF9CTEFDS19MSVNURURfQ09OVEVOVF9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVycm9yLFxuICAgICAgc3VjY2Vzc1xuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGZldGNoaW5nQmxhY2tMaXN0ZWRPdXRwb2ludHM6IGZhbHNlLFxuICAgICAgZmV0Y2hpbmdCbGFja0xpc3RlZE91dHBvaW50c1N1Y2NlZWQ6IHN1Y2Nlc3MsXG4gICAgICBmZXRjaGluZ0JsYWNrTGlzdGVkT3V0cG9pbnRzRXJyb3I6IGVycm9yXG4gICAgfTtcbiAgfVxufSwgZGVmYXVsdFN0YXRlJDUpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGUkNiA9IHtcbiAgbG9hZGluZzogZmFsc2UsXG4gIGZpbHRlcmVkT3V0cG9pbnRzOiB1bmRlZmluZWRcbn07XG5jb25zdCBmaWx0ZXJlZFJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGxvYWRpbmc6IHRydWVcbiAgfSksXG4gIFtGRVRDSF9GSUxURVJFRF9DT05URU5UX0NPTVBMRVRFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3V0cG9pbnRzXG4gICAgfSA9IGFjdGlvbi5kYXRhO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBmaWx0ZXJlZE91dHBvaW50czogb3V0cG9pbnRzXG4gICAgfTtcbiAgfSxcbiAgW0ZFVENIX0ZJTFRFUkVEX0NPTlRFTlRfRkFJTEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlcnJvclxuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgZmV0Y2hpbmdGaWx0ZXJlZE91dHBvaW50c0Vycm9yOiBlcnJvclxuICAgIH07XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ2KTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDcgPSB7XG4gIGZldGNoaW5nRmVhdHVyZWRDb250ZW50OiBmYWxzZSxcbiAgZmV0Y2hpbmdGZWF0dXJlZENvbnRlbnRGYWlsZWQ6IGZhbHNlLFxuICBmZWF0dXJlZFVyaXM6IHVuZGVmaW5lZCxcbiAgZmV0Y2hpbmdUcmVuZGluZ0NvbnRlbnQ6IGZhbHNlLFxuICBmZXRjaGluZ1RyZW5kaW5nQ29udGVudEZhaWxlZDogZmFsc2UsXG4gIHRyZW5kaW5nVXJpczogdW5kZWZpbmVkXG59O1xuY29uc3QgaG9tZXBhZ2VSZWR1Y2VyID0gaGFuZGxlQWN0aW9ucyh7XG4gIFtGRVRDSF9GRUFUVVJFRF9DT05URU5UX1NUQVJURURdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBmZXRjaGluZ0ZlYXR1cmVkQ29udGVudDogdHJ1ZVxuICB9KSxcbiAgW0ZFVENIX0ZFQVRVUkVEX0NPTlRFTlRfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmlzLFxuICAgICAgc3VjY2Vzc1xuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGZldGNoaW5nRmVhdHVyZWRDb250ZW50OiBmYWxzZSxcbiAgICAgIGZldGNoaW5nRmVhdHVyZWRDb250ZW50RmFpbGVkOiAhc3VjY2VzcyxcbiAgICAgIGZlYXR1cmVkVXJpczogdXJpc1xuICAgIH07XG4gIH0sXG4gIFtGRVRDSF9UUkVORElOR19DT05URU5UX1NUQVJURURdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBmZXRjaGluZ1RyZW5kaW5nQ29udGVudDogdHJ1ZVxuICB9KSxcbiAgW0ZFVENIX1RSRU5ESU5HX0NPTlRFTlRfQ09NUExFVEVEXTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmlzLFxuICAgICAgc3VjY2Vzc1xuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGZldGNoaW5nVHJlbmRpbmdDb250ZW50OiBmYWxzZSxcbiAgICAgIGZldGNoaW5nVHJlbmRpbmdDb250ZW50RmFpbGVkOiAhc3VjY2VzcyxcbiAgICAgIHRyZW5kaW5nVXJpczogdXJpc1xuICAgIH07XG4gIH1cbn0sIGRlZmF1bHRTdGF0ZSQ3KTtcblxuY29uc3QgZGVmYXVsdFN0YXRlJDggPSB7XG4gIGZldGNoaW5nVmlld0NvdW50OiBmYWxzZSxcbiAgdmlld0NvdW50RXJyb3I6IHVuZGVmaW5lZCxcbiAgdmlld0NvdW50QnlJZDoge30sXG4gIGZldGNoaW5nU3ViQ291bnQ6IGZhbHNlLFxuICBzdWJDb3VudEVycm9yOiB1bmRlZmluZWQsXG4gIHN1YkNvdW50QnlJZDoge31cbn07XG5jb25zdCBzdGF0c1JlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKHtcbiAgW0ZFVENIX1ZJRVdfQ09VTlRfU1RBUlRFRF06IHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIGZldGNoaW5nVmlld0NvdW50OiB0cnVlXG4gIH0pLFxuICBbRkVUQ0hfVklFV19DT1VOVF9GQUlMRURdOiAoc3RhdGUsIGFjdGlvbikgPT4gKHsgLi4uc3RhdGUsXG4gICAgdmlld0NvdW50RXJyb3I6IGFjdGlvbi5kYXRhXG4gIH0pLFxuICBbRkVUQ0hfVklFV19DT1VOVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYWltSWQsXG4gICAgICB2aWV3Q291bnRcbiAgICB9ID0gYWN0aW9uLmRhdGE7XG4gICAgY29uc3Qgdmlld0NvdW50QnlJZCA9IHsgLi4uc3RhdGUudmlld0NvdW50QnlJZCxcbiAgICAgIFtjbGFpbUlkXTogdmlld0NvdW50XG4gICAgfTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgIGZldGNoaW5nVmlld0NvdW50OiBmYWxzZSxcbiAgICAgIHZpZXdDb3VudEJ5SWRcbiAgICB9O1xuICB9LFxuICBbRkVUQ0hfU1VCX0NPVU5UX1NUQVJURURdOiBzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBmZXRjaGluZ1N1YkNvdW50OiB0cnVlXG4gIH0pLFxuICBbRkVUQ0hfU1VCX0NPVU5UX0ZBSUxFRF06IChzdGF0ZSwgYWN0aW9uKSA9PiAoeyAuLi5zdGF0ZSxcbiAgICBzdWJDb3VudEVycm9yOiBhY3Rpb24uZGF0YVxuICB9KSxcbiAgW0ZFVENIX1NVQl9DT1VOVF9DT01QTEVURURdOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYWltSWQsXG4gICAgICBzdWJDb3VudFxuICAgIH0gPSBhY3Rpb24uZGF0YTtcbiAgICBjb25zdCBzdWJDb3VudEJ5SWQgPSB7IC4uLnN0YXRlLnN1YkNvdW50QnlJZCxcbiAgICAgIFtjbGFpbUlkXTogc3ViQ291bnRcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgZmV0Y2hpbmdTdWJDb3VudDogZmFsc2UsXG4gICAgICBzdWJDb3VudEJ5SWRcbiAgICB9O1xuICB9XG59LCBkZWZhdWx0U3RhdGUkOCk7XG5cbmNvbnN0IHJlZHVjZXJzJDMgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSQ5ID0ge1xuICBoYXNTeW5jZWRXYWxsZXQ6IGZhbHNlLFxuICBzeW5jSGFzaDogbnVsbCxcbiAgc3luY0RhdGE6IG51bGwsXG4gIHNldFN5bmNFcnJvck1lc3NhZ2U6IG51bGwsXG4gIGdldFN5bmNFcnJvck1lc3NhZ2U6IG51bGwsXG4gIHN5bmNBcHBseUVycm9yTWVzc2FnZTogJycsXG4gIHN5bmNBcHBseUlzUGVuZGluZzogZmFsc2UsXG4gIHN5bmNBcHBseVBhc3N3b3JkRXJyb3I6IGZhbHNlLFxuICBnZXRTeW5jSXNQZW5kaW5nOiBmYWxzZSxcbiAgc2V0U3luY0lzUGVuZGluZzogZmFsc2UsXG4gIGhhc2hDaGFuZ2VkOiBmYWxzZVxufTtcblxucmVkdWNlcnMkM1tHRVRfU1lOQ19TVEFSVEVEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGdldFN5bmNJc1BlbmRpbmc6IHRydWUsXG4gIGdldFN5bmNFcnJvck1lc3NhZ2U6IG51bGxcbn0pO1xuXG5yZWR1Y2VycyQzW0dFVF9TWU5DX0NPTVBMRVRFRF0gPSAoc3RhdGUsIGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc3luY0hhc2g6IGFjdGlvbi5kYXRhLnN5bmNIYXNoLFxuICBzeW5jRGF0YTogYWN0aW9uLmRhdGEuc3luY0RhdGEsXG4gIGhhc1N5bmNlZFdhbGxldDogYWN0aW9uLmRhdGEuaGFzU3luY2VkV2FsbGV0LFxuICBnZXRTeW5jSXNQZW5kaW5nOiBmYWxzZSxcbiAgaGFzaENoYW5nZWQ6IGFjdGlvbi5kYXRhLmhhc2hDaGFuZ2VkXG59KTtcblxucmVkdWNlcnMkM1tHRVRfU1lOQ19GQUlMRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIGdldFN5bmNJc1BlbmRpbmc6IGZhbHNlLFxuICBnZXRTeW5jRXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDNbU0VUX1NZTkNfU1RBUlRFRF0gPSBzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBzZXRTeW5jSXNQZW5kaW5nOiB0cnVlLFxuICBzZXRTeW5jRXJyb3JNZXNzYWdlOiBudWxsXG59KTtcblxucmVkdWNlcnMkM1tTRVRfU1lOQ19GQUlMRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHNldFN5bmNJc1BlbmRpbmc6IGZhbHNlLFxuICBzZXRTeW5jRXJyb3JNZXNzYWdlOiBhY3Rpb24uZGF0YS5lcnJvclxufSk7XG5cbnJlZHVjZXJzJDNbU0VUX1NZTkNfQ09NUExFVEVEXSA9IChzdGF0ZSwgYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICBzZXRTeW5jSXNQZW5kaW5nOiBmYWxzZSxcbiAgc2V0U3luY0Vycm9yTWVzc2FnZTogbnVsbCxcbiAgaGFzU3luY2VkV2FsbGV0OiB0cnVlLFxuICAvLyBzeW5jIHdhcyBzdWNjZXNzZnVsLCBzbyB0aGUgdXNlciBoYXMgYSBzeW5jZWQgd2FsbGV0IGF0IHRoaXMgcG9pbnRcbiAgc3luY0hhc2g6IGFjdGlvbi5kYXRhLnN5bmNIYXNoXG59KTtcblxucmVkdWNlcnMkM1tTWU5DX0FQUExZX1NUQVJURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc3luY0FwcGx5UGFzc3dvcmRFcnJvcjogZmFsc2UsXG4gIHN5bmNBcHBseUlzUGVuZGluZzogdHJ1ZSxcbiAgc3luY0FwcGx5RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDNbU1lOQ19BUFBMWV9DT01QTEVURURdID0gc3RhdGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgc3luY0FwcGx5SXNQZW5kaW5nOiBmYWxzZSxcbiAgc3luY0FwcGx5RXJyb3JNZXNzYWdlOiAnJ1xufSk7XG5cbnJlZHVjZXJzJDNbU1lOQ19BUFBMWV9GQUlMRURdID0gKHN0YXRlLCBhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHN5bmNBcHBseUlzUGVuZGluZzogZmFsc2UsXG4gIHN5bmNBcHBseUVycm9yTWVzc2FnZTogYWN0aW9uLmRhdGEuZXJyb3Jcbn0pO1xuXG5yZWR1Y2VycyQzW1NZTkNfQVBQTFlfQkFEX1BBU1NXT1JEXSA9IHN0YXRlID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gIHN5bmNBcHBseVBhc3N3b3JkRXJyb3I6IHRydWVcbn0pO1xuXG5yZWR1Y2VycyQzW1NZTkNfUkVTRVRdID0gKCkgPT4gZGVmYXVsdFN0YXRlJDk7XG5cbmZ1bmN0aW9uIHN5bmNSZWR1Y2VyKHN0YXRlID0gZGVmYXVsdFN0YXRlJDksIGFjdGlvbikge1xuICBjb25zdCBoYW5kbGVyID0gcmVkdWNlcnMkM1thY3Rpb24udHlwZV07XG4gIGlmIChoYW5kbGVyKSByZXR1cm4gaGFuZGxlcihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vLyAgICAgIFxuLypcbnRlc3QgbW9jazpcbiAgY3VycmVudFVwbG9hZHM6IHtcbiAgICAndGVzdCN1cGxvYWQnOiB7XG4gICAgICBwcm9ncmVzczogNTAsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbmFtZTogJ3N0ZXZlJyxcbiAgICAgICAgdGh1bWJuYWlsX3VybDogJ2h0dHBzOi8vZGV2Mi5zcGVlLmNoLzQvS01OdG9TWjAwOWZhd0d6NTlWRzhQcklELmpwZWcnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICovXG5cbmNvbnN0IHJlZHVjZXJzJDQgPSB7fTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSRhID0ge1xuICBjdXJyZW50VXBsb2Fkczoge31cbn07XG5cbnJlZHVjZXJzJDRbVVBEQVRFX1VQTE9BRF9QUk9HUkVTU10gPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvZ3Jlc3MsXG4gICAgcGFyYW1zLFxuICAgIHhoclxuICB9ID0gYWN0aW9uLmRhdGE7XG4gIGNvbnN0IGtleSA9IHBhcmFtcy5jaGFubmVsID8gYCR7cGFyYW1zLm5hbWV9IyR7cGFyYW1zLmNoYW5uZWx9YCA6IGAke3BhcmFtcy5uYW1lfSNhbm9ueW1vdXNgO1xuICBsZXQgY3VycmVudFVwbG9hZHM7XG5cbiAgaWYgKCFwcm9ncmVzcykge1xuICAgIGN1cnJlbnRVcGxvYWRzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY3VycmVudFVwbG9hZHMpO1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRVcGxvYWRzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgPT09IGtleSkge1xuICAgICAgICBkZWxldGUgY3VycmVudFVwbG9hZHNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjdXJyZW50VXBsb2FkcyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmN1cnJlbnRVcGxvYWRzKTtcbiAgICBjdXJyZW50VXBsb2Fkc1trZXldID0ge1xuICAgICAgcHJvZ3Jlc3MsXG4gICAgICBwYXJhbXMsXG4gICAgICB4aHJcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgY3VycmVudFVwbG9hZHNcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGxicnl0dlJlZHVjZXIoc3RhdGUgPSBkZWZhdWx0U3RhdGUkYSwgYWN0aW9uKSB7XG4gIGNvbnN0IGhhbmRsZXIgPSByZWR1Y2VycyQ0W2FjdGlvbi50eXBlXTtcbiAgaWYgKGhhbmRsZXIpIHJldHVybiBoYW5kbGVyKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDMgPSBzdGF0ZSA9PiBzdGF0ZS5hdXRoIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RBdXRoVG9rZW4gPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQzLCBzdGF0ZSA9PiBzdGF0ZS5hdXRoVG9rZW4pO1xuY29uc3Qgc2VsZWN0SXNBdXRoZW50aWNhdGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDMsIHN0YXRlID0+IHN0YXRlLmF1dGhlbnRpY2F0aW5nKTtcblxuY29uc3Qgc2VsZWN0U3RhdGUkNCA9IHN0YXRlID0+IHN0YXRlLmNvc3RJbmZvIHx8IHt9O1xuY29uc3Qgc2VsZWN0QWxsQ29zdEluZm9CeVVyaSA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDQsIHN0YXRlID0+IHN0YXRlLmJ5VXJpIHx8IHt9KTtcbmNvbnN0IG1ha2VTZWxlY3RDb3N0SW5mb0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RBbGxDb3N0SW5mb0J5VXJpLCBjb3N0SW5mb3MgPT4gY29zdEluZm9zICYmIGNvc3RJbmZvc1t1cmldKTtcbmNvbnN0IHNlbGVjdEZldGNoaW5nQ29zdEluZm8gPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ0LCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZyB8fCB7fSk7XG5jb25zdCBtYWtlU2VsZWN0RmV0Y2hpbmdDb3N0SW5mb0ZvclVyaSA9IHVyaSA9PiByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RGZXRjaGluZ0Nvc3RJbmZvLCBmZXRjaGluZ0J5VXJpID0+IGZldGNoaW5nQnlVcmkgJiYgZmV0Y2hpbmdCeVVyaVt1cmldKTtcblxuY29uc3Qgc2VsZWN0U3RhdGUkNSA9IHN0YXRlID0+IHN0YXRlLmJsYWNrbGlzdCB8fCB7fTtcbmNvbnN0IHNlbGVjdEJsYWNrTGlzdGVkT3V0cG9pbnRzID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkNSwgc3RhdGUgPT4gc3RhdGUuYmxhY2tMaXN0ZWRPdXRwb2ludHMpO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ2ID0gc3RhdGUgPT4gc3RhdGUuZmlsdGVyZWQgfHwge307XG5jb25zdCBzZWxlY3RGaWx0ZXJlZE91dHBvaW50cyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDYsIHN0YXRlID0+IHN0YXRlLmZpbHRlcmVkT3V0cG9pbnRzKTtcblxuY29uc3Qgc2VsZWN0U3RhdGUkNyA9IHN0YXRlID0+IHN0YXRlLmhvbWVwYWdlIHx8IHt9O1xuXG5jb25zdCBzZWxlY3RGZWF0dXJlZFVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiBzdGF0ZS5mZWF0dXJlZFVyaXMpO1xuY29uc3Qgc2VsZWN0RmV0Y2hpbmdGZWF0dXJlZFVyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ0ZlYXR1cmVkQ29udGVudCk7XG5jb25zdCBzZWxlY3RUcmVuZGluZ1VyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiBzdGF0ZS50cmVuZGluZ1VyaXMpO1xuY29uc3Qgc2VsZWN0RmV0Y2hpbmdUcmVuZGluZ1VyaXMgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ3LCBzdGF0ZSA9PiBzdGF0ZS5mZXRjaGluZ1RyZW5kaW5nQ29udGVudCk7XG5cbmNvbnN0IHNlbGVjdFN0YXRlJDggPSBzdGF0ZSA9PiBzdGF0ZS5zdGF0cyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0Vmlld0NvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOCwgc3RhdGUgPT4gc3RhdGUudmlld0NvdW50QnlJZCk7XG5jb25zdCBzZWxlY3RTdWJDb3VudCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDgsIHN0YXRlID0+IHN0YXRlLnN1YkNvdW50QnlJZCk7XG5jb25zdCBtYWtlU2VsZWN0Vmlld0NvdW50Rm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKGxicnlSZWR1eC5tYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgc2VsZWN0Vmlld0NvdW50LCAoY2xhaW0sIHZpZXdDb3VudEJ5SWQpID0+IGNsYWltID8gdmlld0NvdW50QnlJZFtjbGFpbS5jbGFpbV9pZF0gfHwgMCA6IDApO1xuY29uc3QgbWFrZVNlbGVjdFN1YkNvdW50Rm9yVXJpID0gdXJpID0+IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKGxicnlSZWR1eC5tYWtlU2VsZWN0Q2xhaW1Gb3JVcmkodXJpKSwgc2VsZWN0U3ViQ291bnQsIChjbGFpbSwgc3ViQ291bnRCeUlkKSA9PiBjbGFpbSA/IHN1YkNvdW50QnlJZFtjbGFpbS5jbGFpbV9pZF0gfHwgMCA6IDApO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSQ5ID0gc3RhdGUgPT4gc3RhdGUuc3luYyB8fCB7fTtcblxuY29uc3Qgc2VsZWN0SGFzU3luY2VkV2FsbGV0ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuaGFzU3luY2VkV2FsbGV0KTtcbmNvbnN0IHNlbGVjdFN5bmNIYXNoID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuc3luY0hhc2gpO1xuY29uc3Qgc2VsZWN0U3luY0RhdGEgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5zeW5jRGF0YSk7XG5jb25zdCBzZWxlY3RTZXRTeW5jRXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuc2V0U3luY0Vycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuZ2V0U3luY0Vycm9yTWVzc2FnZSk7XG5jb25zdCBzZWxlY3RHZXRTeW5jSXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuZ2V0U3luY0lzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RTZXRTeW5jSXNQZW5kaW5nID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUkOSwgc3RhdGUgPT4gc3RhdGUuc2V0U3luY0lzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RIYXNoQ2hhbmdlZCA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLmhhc2hDaGFuZ2VkKTtcbmNvbnN0IHNlbGVjdFN5bmNBcHBseUlzUGVuZGluZyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLnN5bmNBcHBseUlzUGVuZGluZyk7XG5jb25zdCBzZWxlY3RTeW5jQXBwbHlFcnJvck1lc3NhZ2UgPSByZXNlbGVjdC5jcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSQ5LCBzdGF0ZSA9PiBzdGF0ZS5zeW5jQXBwbHlFcnJvck1lc3NhZ2UpO1xuY29uc3Qgc2VsZWN0U3luY0FwcGx5UGFzc3dvcmRFcnJvciA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJDksIHN0YXRlID0+IHN0YXRlLnN5bmNBcHBseVBhc3N3b3JkRXJyb3IpO1xuXG5jb25zdCBzZWxlY3RTdGF0ZSRhID0gc3RhdGUgPT4gc3RhdGUubGJyeXR2IHx8IHt9O1xuXG5jb25zdCBzZWxlY3RDdXJyZW50VXBsb2FkcyA9IHJlc2VsZWN0LmNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlJGEsIHN0YXRlID0+IHN0YXRlLmN1cnJlbnRVcGxvYWRzKTtcbmNvbnN0IHNlbGVjdFVwbG9hZENvdW50ID0gcmVzZWxlY3QuY3JlYXRlU2VsZWN0b3Ioc2VsZWN0Q3VycmVudFVwbG9hZHMsIGN1cnJlbnRVcGxvYWRzID0+IGN1cnJlbnRVcGxvYWRzICYmIE9iamVjdC5rZXlzKGN1cnJlbnRVcGxvYWRzKS5sZW5ndGgpO1xuXG5leHBvcnRzLkVSUk9SUyA9IGVycm9ycztcbmV4cG9ydHMuTEJSWUlOQ19BQ1RJT05TID0gYWN0aW9uX3R5cGVzO1xuZXhwb3J0cy5MYnJ5aW8gPSBMYnJ5aW87XG5leHBvcnRzLllPVVRVQkVfU1RBVFVTRVMgPSB5b3V0dWJlO1xuZXhwb3J0cy5hdXRoUmVkdWNlciA9IGF1dGhSZWR1Y2VyO1xuZXhwb3J0cy5ibGFja2xpc3RSZWR1Y2VyID0gYmxhY2tsaXN0UmVkdWNlcjtcbmV4cG9ydHMuY29zdEluZm9SZWR1Y2VyID0gY29zdEluZm9SZWR1Y2VyO1xuZXhwb3J0cy5kb0F1dGhlbnRpY2F0ZSA9IGRvQXV0aGVudGljYXRlO1xuZXhwb3J0cy5kb0JsYWNrTGlzdGVkT3V0cG9pbnRzU3Vic2NyaWJlID0gZG9CbGFja0xpc3RlZE91dHBvaW50c1N1YnNjcmliZTtcbmV4cG9ydHMuZG9DaGFubmVsU3Vic2NyaWJlID0gZG9DaGFubmVsU3Vic2NyaWJlO1xuZXhwb3J0cy5kb0NoYW5uZWxTdWJzY3JpcHRpb25EaXNhYmxlTm90aWZpY2F0aW9ucyA9IGRvQ2hhbm5lbFN1YnNjcmlwdGlvbkRpc2FibGVOb3RpZmljYXRpb25zO1xuZXhwb3J0cy5kb0NoYW5uZWxTdWJzY3JpcHRpb25FbmFibGVOb3RpZmljYXRpb25zID0gZG9DaGFubmVsU3Vic2NyaXB0aW9uRW5hYmxlTm90aWZpY2F0aW9ucztcbmV4cG9ydHMuZG9DaGFubmVsVW5zdWJzY3JpYmUgPSBkb0NoYW5uZWxVbnN1YnNjcmliZTtcbmV4cG9ydHMuZG9DaGVja1N1YnNjcmlwdGlvbiA9IGRvQ2hlY2tTdWJzY3JpcHRpb247XG5leHBvcnRzLmRvQ2hlY2tTdWJzY3JpcHRpb25zID0gZG9DaGVja1N1YnNjcmlwdGlvbnM7XG5leHBvcnRzLmRvQ2hlY2tTdWJzY3JpcHRpb25zSW5pdCA9IGRvQ2hlY2tTdWJzY3JpcHRpb25zSW5pdDtcbmV4cG9ydHMuZG9DaGVja1N5bmMgPSBkb0NoZWNrU3luYztcbmV4cG9ydHMuZG9DaGVja1lvdXR1YmVUcmFuc2ZlciA9IGRvQ2hlY2tZb3V0dWJlVHJhbnNmZXI7XG5leHBvcnRzLmRvQ2xhaW1FbGlnaWJsZVB1cmNoYXNlUmV3YXJkcyA9IGRvQ2xhaW1FbGlnaWJsZVB1cmNoYXNlUmV3YXJkcztcbmV4cG9ydHMuZG9DbGFpbVJld2FyZENsZWFyRXJyb3IgPSBkb0NsYWltUmV3YXJkQ2xlYXJFcnJvcjtcbmV4cG9ydHMuZG9DbGFpbVJld2FyZFR5cGUgPSBkb0NsYWltUmV3YXJkVHlwZTtcbmV4cG9ydHMuZG9DbGFpbVlvdXR1YmVDaGFubmVscyA9IGRvQ2xhaW1Zb3V0dWJlQ2hhbm5lbHM7XG5leHBvcnRzLmRvQ29tcGxldGVGaXJzdFJ1biA9IGRvQ29tcGxldGVGaXJzdFJ1bjtcbmV4cG9ydHMuZG9GZXRjaEFjY2Vzc1Rva2VuID0gZG9GZXRjaEFjY2Vzc1Rva2VuO1xuZXhwb3J0cy5kb0ZldGNoQ29zdEluZm9Gb3JVcmkgPSBkb0ZldGNoQ29zdEluZm9Gb3JVcmk7XG5leHBvcnRzLmRvRmV0Y2hGZWF0dXJlZFVyaXMgPSBkb0ZldGNoRmVhdHVyZWRVcmlzO1xuZXhwb3J0cy5kb0ZldGNoSW52aXRlU3RhdHVzID0gZG9GZXRjaEludml0ZVN0YXR1cztcbmV4cG9ydHMuZG9GZXRjaE15U3Vic2NyaXB0aW9ucyA9IGRvRmV0Y2hNeVN1YnNjcmlwdGlvbnM7XG5leHBvcnRzLmRvRmV0Y2hSZWNvbW1lbmRlZFN1YnNjcmlwdGlvbnMgPSBkb0ZldGNoUmVjb21tZW5kZWRTdWJzY3JpcHRpb25zO1xuZXhwb3J0cy5kb0ZldGNoUmV3YXJkZWRDb250ZW50ID0gZG9GZXRjaFJld2FyZGVkQ29udGVudDtcbmV4cG9ydHMuZG9GZXRjaFN1YkNvdW50ID0gZG9GZXRjaFN1YkNvdW50O1xuZXhwb3J0cy5kb0ZldGNoVHJlbmRpbmdVcmlzID0gZG9GZXRjaFRyZW5kaW5nVXJpcztcbmV4cG9ydHMuZG9GZXRjaFZpZXdDb3VudCA9IGRvRmV0Y2hWaWV3Q291bnQ7XG5leHBvcnRzLmRvRmlsdGVyZWRPdXRwb2ludHNTdWJzY3JpYmUgPSBkb0ZpbHRlcmVkT3V0cG9pbnRzU3Vic2NyaWJlO1xuZXhwb3J0cy5kb0dlbmVyYXRlQXV0aFRva2VuID0gZG9HZW5lcmF0ZUF1dGhUb2tlbjtcbmV4cG9ydHMuZG9HZXRTeW5jID0gZG9HZXRTeW5jO1xuZXhwb3J0cy5kb0luc3RhbGxOZXcgPSBkb0luc3RhbGxOZXc7XG5leHBvcnRzLmRvSW5zdGFsbE5ld1dpdGhQYXJhbXMgPSBkb0luc3RhbGxOZXdXaXRoUGFyYW1zO1xuZXhwb3J0cy5kb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbiA9IGRvUmVtb3ZlVW5yZWFkU3Vic2NyaXB0aW9uO1xuZXhwb3J0cy5kb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbnMgPSBkb1JlbW92ZVVucmVhZFN1YnNjcmlwdGlvbnM7XG5leHBvcnRzLmRvUmVzZXRTeW5jID0gZG9SZXNldFN5bmM7XG5leHBvcnRzLmRvUmV3YXJkTGlzdCA9IGRvUmV3YXJkTGlzdDtcbmV4cG9ydHMuZG9TZXREZWZhdWx0QWNjb3VudCA9IGRvU2V0RGVmYXVsdEFjY291bnQ7XG5leHBvcnRzLmRvU2V0U3luYyA9IGRvU2V0U3luYztcbmV4cG9ydHMuZG9TZXRWaWV3TW9kZSA9IGRvU2V0Vmlld01vZGU7XG5leHBvcnRzLmRvU2hvd1N1Z2dlc3RlZFN1YnMgPSBkb1Nob3dTdWdnZXN0ZWRTdWJzO1xuZXhwb3J0cy5kb1N5bmNBcHBseSA9IGRvU3luY0FwcGx5O1xuZXhwb3J0cy5kb1N5bmNFbmNyeXB0QW5kRGVjcnlwdCA9IGRvU3luY0VuY3J5cHRBbmREZWNyeXB0O1xuZXhwb3J0cy5kb1RyYW5zaWZleFVwbG9hZCA9IGRvVHJhbnNpZmV4VXBsb2FkO1xuZXhwb3J0cy5kb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnMgPSBkb1VwZGF0ZVVucmVhZFN1YnNjcmlwdGlvbnM7XG5leHBvcnRzLmRvVXBkYXRlVXBsb2FkUHJvZ3Jlc3MgPSBkb1VwZGF0ZVVwbG9hZFByb2dyZXNzO1xuZXhwb3J0cy5kb1VzZXJDaGVja0VtYWlsVmVyaWZpZWQgPSBkb1VzZXJDaGVja0VtYWlsVmVyaWZpZWQ7XG5leHBvcnRzLmRvVXNlckVtYWlsTmV3ID0gZG9Vc2VyRW1haWxOZXc7XG5leHBvcnRzLmRvVXNlckVtYWlsVG9WZXJpZnkgPSBkb1VzZXJFbWFpbFRvVmVyaWZ5O1xuZXhwb3J0cy5kb1VzZXJFbWFpbFZlcmlmeSA9IGRvVXNlckVtYWlsVmVyaWZ5O1xuZXhwb3J0cy5kb1VzZXJFbWFpbFZlcmlmeUZhaWx1cmUgPSBkb1VzZXJFbWFpbFZlcmlmeUZhaWx1cmU7XG5leHBvcnRzLmRvVXNlckZldGNoID0gZG9Vc2VyRmV0Y2g7XG5leHBvcnRzLmRvVXNlcklkZW50aXR5VmVyaWZ5ID0gZG9Vc2VySWRlbnRpdHlWZXJpZnk7XG5leHBvcnRzLmRvVXNlckludml0ZU5ldyA9IGRvVXNlckludml0ZU5ldztcbmV4cG9ydHMuZG9Vc2VyUGhvbmVOZXcgPSBkb1VzZXJQaG9uZU5ldztcbmV4cG9ydHMuZG9Vc2VyUGhvbmVSZXNldCA9IGRvVXNlclBob25lUmVzZXQ7XG5leHBvcnRzLmRvVXNlclBob25lVmVyaWZ5ID0gZG9Vc2VyUGhvbmVWZXJpZnk7XG5leHBvcnRzLmRvVXNlclBob25lVmVyaWZ5RmFpbHVyZSA9IGRvVXNlclBob25lVmVyaWZ5RmFpbHVyZTtcbmV4cG9ydHMuZG9Vc2VyUmVzZW5kVmVyaWZpY2F0aW9uRW1haWwgPSBkb1VzZXJSZXNlbmRWZXJpZmljYXRpb25FbWFpbDtcbmV4cG9ydHMuZG9Vc2VyU2V0UmVmZXJyZXIgPSBkb1VzZXJTZXRSZWZlcnJlcjtcbmV4cG9ydHMuZG9Vc2VyU2V0UmVmZXJyZXJSZXNldCA9IGRvVXNlclNldFJlZmVycmVyUmVzZXQ7XG5leHBvcnRzLmZpbHRlcmVkUmVkdWNlciA9IGZpbHRlcmVkUmVkdWNlcjtcbmV4cG9ydHMuaG9tZXBhZ2VSZWR1Y2VyID0gaG9tZXBhZ2VSZWR1Y2VyO1xuZXhwb3J0cy5sYnJ5dHZSZWR1Y2VyID0gbGJyeXR2UmVkdWNlcjtcbmV4cG9ydHMubWFrZVNlbGVjdENsYWltUmV3YXJkRXJyb3IgPSBtYWtlU2VsZWN0Q2xhaW1SZXdhcmRFcnJvcjtcbmV4cG9ydHMubWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpID0gbWFrZVNlbGVjdENvc3RJbmZvRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0RmV0Y2hpbmdDb3N0SW5mb0ZvclVyaSA9IG1ha2VTZWxlY3RGZXRjaGluZ0Nvc3RJbmZvRm9yVXJpO1xuZXhwb3J0cy5tYWtlU2VsZWN0SXNOZXcgPSBtYWtlU2VsZWN0SXNOZXc7XG5leHBvcnRzLm1ha2VTZWxlY3RJc1Jld2FyZENsYWltUGVuZGluZyA9IG1ha2VTZWxlY3RJc1Jld2FyZENsYWltUGVuZGluZztcbmV4cG9ydHMubWFrZVNlbGVjdElzU3Vic2NyaWJlZCA9IG1ha2VTZWxlY3RJc1N1YnNjcmliZWQ7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXdhcmRBbW91bnRCeVR5cGUgPSBtYWtlU2VsZWN0UmV3YXJkQW1vdW50QnlUeXBlO1xuZXhwb3J0cy5tYWtlU2VsZWN0UmV3YXJkQnlDbGFpbUNvZGUgPSBtYWtlU2VsZWN0UmV3YXJkQnlDbGFpbUNvZGU7XG5leHBvcnRzLm1ha2VTZWxlY3RSZXdhcmRCeVR5cGUgPSBtYWtlU2VsZWN0UmV3YXJkQnlUeXBlO1xuZXhwb3J0cy5tYWtlU2VsZWN0U3ViQ291bnRGb3JVcmkgPSBtYWtlU2VsZWN0U3ViQ291bnRGb3JVcmk7XG5leHBvcnRzLm1ha2VTZWxlY3RVbnJlYWRCeUNoYW5uZWwgPSBtYWtlU2VsZWN0VW5yZWFkQnlDaGFubmVsO1xuZXhwb3J0cy5tYWtlU2VsZWN0Vmlld0NvdW50Rm9yVXJpID0gbWFrZVNlbGVjdFZpZXdDb3VudEZvclVyaTtcbmV4cG9ydHMucmV3YXJkcyA9IHJld2FyZHM7XG5leHBvcnRzLnJld2FyZHNSZWR1Y2VyID0gcmV3YXJkc1JlZHVjZXI7XG5leHBvcnRzLnNlbGVjdEFjY2Vzc1Rva2VuID0gc2VsZWN0QWNjZXNzVG9rZW47XG5leHBvcnRzLnNlbGVjdEFsbENvc3RJbmZvQnlVcmkgPSBzZWxlY3RBbGxDb3N0SW5mb0J5VXJpO1xuZXhwb3J0cy5zZWxlY3RBdXRoVG9rZW4gPSBzZWxlY3RBdXRoVG9rZW47XG5leHBvcnRzLnNlbGVjdEF1dGhlbnRpY2F0aW9uSXNQZW5kaW5nID0gc2VsZWN0QXV0aGVudGljYXRpb25Jc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdEJsYWNrTGlzdGVkT3V0cG9pbnRzID0gc2VsZWN0QmxhY2tMaXN0ZWRPdXRwb2ludHM7XG5leHBvcnRzLnNlbGVjdENsYWltRXJyb3JzQnlUeXBlID0gc2VsZWN0Q2xhaW1FcnJvcnNCeVR5cGU7XG5leHBvcnRzLnNlbGVjdENsYWltZWRSZXdhcmRzID0gc2VsZWN0Q2xhaW1lZFJld2FyZHM7XG5leHBvcnRzLnNlbGVjdENsYWltZWRSZXdhcmRzQnlJZCA9IHNlbGVjdENsYWltZWRSZXdhcmRzQnlJZDtcbmV4cG9ydHMuc2VsZWN0Q2xhaW1lZFJld2FyZHNCeVRyYW5zYWN0aW9uSWQgPSBzZWxlY3RDbGFpbWVkUmV3YXJkc0J5VHJhbnNhY3Rpb25JZDtcbmV4cG9ydHMuc2VsZWN0Q2xhaW1zUGVuZGluZ0J5VHlwZSA9IHNlbGVjdENsYWltc1BlbmRpbmdCeVR5cGU7XG5leHBvcnRzLnNlbGVjdEN1cnJlbnRVcGxvYWRzID0gc2VsZWN0Q3VycmVudFVwbG9hZHM7XG5leHBvcnRzLnNlbGVjdEVtYWlsQWxyZWFkeUV4aXN0cyA9IHNlbGVjdEVtYWlsQWxyZWFkeUV4aXN0cztcbmV4cG9ydHMuc2VsZWN0RW1haWxOZXdFcnJvck1lc3NhZ2UgPSBzZWxlY3RFbWFpbE5ld0Vycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0RW1haWxOZXdJc1BlbmRpbmcgPSBzZWxlY3RFbWFpbE5ld0lzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0RW1haWxUb1ZlcmlmeSA9IHNlbGVjdEVtYWlsVG9WZXJpZnk7XG5leHBvcnRzLnNlbGVjdEVtYWlsVmVyaWZ5RXJyb3JNZXNzYWdlID0gc2VsZWN0RW1haWxWZXJpZnlFcnJvck1lc3NhZ2U7XG5leHBvcnRzLnNlbGVjdEVtYWlsVmVyaWZ5SXNQZW5kaW5nID0gc2VsZWN0RW1haWxWZXJpZnlJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdEVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucyA9IHNlbGVjdEVuYWJsZWRDaGFubmVsTm90aWZpY2F0aW9ucztcbmV4cG9ydHMuc2VsZWN0RmVhdHVyZWRVcmlzID0gc2VsZWN0RmVhdHVyZWRVcmlzO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ0Nvc3RJbmZvID0gc2VsZWN0RmV0Y2hpbmdDb3N0SW5mbztcbmV4cG9ydHMuc2VsZWN0RmV0Y2hpbmdGZWF0dXJlZFVyaXMgPSBzZWxlY3RGZXRjaGluZ0ZlYXR1cmVkVXJpcztcbmV4cG9ydHMuc2VsZWN0RmV0Y2hpbmdSZXdhcmRzID0gc2VsZWN0RmV0Y2hpbmdSZXdhcmRzO1xuZXhwb3J0cy5zZWxlY3RGZXRjaGluZ1RyZW5kaW5nVXJpcyA9IHNlbGVjdEZldGNoaW5nVHJlbmRpbmdVcmlzO1xuZXhwb3J0cy5zZWxlY3RGaWx0ZXJlZE91dHBvaW50cyA9IHNlbGVjdEZpbHRlcmVkT3V0cG9pbnRzO1xuZXhwb3J0cy5zZWxlY3RGaXJzdFJ1bkNvbXBsZXRlZCA9IHNlbGVjdEZpcnN0UnVuQ29tcGxldGVkO1xuZXhwb3J0cy5zZWxlY3RHZXRTeW5jRXJyb3JNZXNzYWdlID0gc2VsZWN0R2V0U3luY0Vycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0R2V0U3luY0lzUGVuZGluZyA9IHNlbGVjdEdldFN5bmNJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdEhhc1N5bmNlZFdhbGxldCA9IHNlbGVjdEhhc1N5bmNlZFdhbGxldDtcbmV4cG9ydHMuc2VsZWN0SGFzaENoYW5nZWQgPSBzZWxlY3RIYXNoQ2hhbmdlZDtcbmV4cG9ydHMuc2VsZWN0SWRlbnRpdHlWZXJpZnlFcnJvck1lc3NhZ2UgPSBzZWxlY3RJZGVudGl0eVZlcmlmeUVycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0SWRlbnRpdHlWZXJpZnlJc1BlbmRpbmcgPSBzZWxlY3RJZGVudGl0eVZlcmlmeUlzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0SXNBdXRoZW50aWNhdGluZyA9IHNlbGVjdElzQXV0aGVudGljYXRpbmc7XG5leHBvcnRzLnNlbGVjdElzRmV0Y2hpbmdTdWJzY3JpcHRpb25zID0gc2VsZWN0SXNGZXRjaGluZ1N1YnNjcmlwdGlvbnM7XG5leHBvcnRzLnNlbGVjdElzRmV0Y2hpbmdTdWdnZXN0ZWQgPSBzZWxlY3RJc0ZldGNoaW5nU3VnZ2VzdGVkO1xuZXhwb3J0cy5zZWxlY3RQaG9uZU5ld0Vycm9yTWVzc2FnZSA9IHNlbGVjdFBob25lTmV3RXJyb3JNZXNzYWdlO1xuZXhwb3J0cy5zZWxlY3RQaG9uZU5ld0lzUGVuZGluZyA9IHNlbGVjdFBob25lTmV3SXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RQaG9uZVRvVmVyaWZ5ID0gc2VsZWN0UGhvbmVUb1ZlcmlmeTtcbmV4cG9ydHMuc2VsZWN0UGhvbmVWZXJpZnlFcnJvck1lc3NhZ2UgPSBzZWxlY3RQaG9uZVZlcmlmeUVycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0UGhvbmVWZXJpZnlJc1BlbmRpbmcgPSBzZWxlY3RQaG9uZVZlcmlmeUlzUGVuZGluZztcbmV4cG9ydHMuc2VsZWN0UmVmZXJyYWxSZXdhcmQgPSBzZWxlY3RSZWZlcnJhbFJld2FyZDtcbmV4cG9ydHMuc2VsZWN0UmVzZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSBzZWxlY3RSZXNlbmRpbmdWZXJpZmljYXRpb25FbWFpbDtcbmV4cG9ydHMuc2VsZWN0UmV3YXJkQ29udGVudENsYWltSWRzID0gc2VsZWN0UmV3YXJkQ29udGVudENsYWltSWRzO1xuZXhwb3J0cy5zZWxlY3RTZXRSZWZlcnJlckVycm9yID0gc2VsZWN0U2V0UmVmZXJyZXJFcnJvcjtcbmV4cG9ydHMuc2VsZWN0U2V0UmVmZXJyZXJQZW5kaW5nID0gc2VsZWN0U2V0UmVmZXJyZXJQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RTZXRTeW5jRXJyb3JNZXNzYWdlID0gc2VsZWN0U2V0U3luY0Vycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0U2V0U3luY0lzUGVuZGluZyA9IHNlbGVjdFNldFN5bmNJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFNob3dTdWdnZXN0ZWRTdWJzID0gc2VsZWN0U2hvd1N1Z2dlc3RlZFN1YnM7XG5leHBvcnRzLnNlbGVjdFN1YnNjcmlwdGlvbkNsYWltcyA9IHNlbGVjdFN1YnNjcmlwdGlvbkNsYWltcztcbmV4cG9ydHMuc2VsZWN0U3Vic2NyaXB0aW9ucyA9IHNlbGVjdFN1YnNjcmlwdGlvbnM7XG5leHBvcnRzLnNlbGVjdFN1YnNjcmlwdGlvbnNCZWluZ0ZldGNoZWQgPSBzZWxlY3RTdWJzY3JpcHRpb25zQmVpbmdGZXRjaGVkO1xuZXhwb3J0cy5zZWxlY3RTdWdnZXN0ZWQgPSBzZWxlY3RTdWdnZXN0ZWQ7XG5leHBvcnRzLnNlbGVjdFN1Z2dlc3RlZENoYW5uZWxzID0gc2VsZWN0U3VnZ2VzdGVkQ2hhbm5lbHM7XG5leHBvcnRzLnNlbGVjdFN5bmNBcHBseUVycm9yTWVzc2FnZSA9IHNlbGVjdFN5bmNBcHBseUVycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0U3luY0FwcGx5SXNQZW5kaW5nID0gc2VsZWN0U3luY0FwcGx5SXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RTeW5jQXBwbHlQYXNzd29yZEVycm9yID0gc2VsZWN0U3luY0FwcGx5UGFzc3dvcmRFcnJvcjtcbmV4cG9ydHMuc2VsZWN0U3luY0RhdGEgPSBzZWxlY3RTeW5jRGF0YTtcbmV4cG9ydHMuc2VsZWN0U3luY0hhc2ggPSBzZWxlY3RTeW5jSGFzaDtcbmV4cG9ydHMuc2VsZWN0VHJlbmRpbmdVcmlzID0gc2VsZWN0VHJlbmRpbmdVcmlzO1xuZXhwb3J0cy5zZWxlY3RVbmNsYWltZWRSZXdhcmRWYWx1ZSA9IHNlbGVjdFVuY2xhaW1lZFJld2FyZFZhbHVlO1xuZXhwb3J0cy5zZWxlY3RVbmNsYWltZWRSZXdhcmRzID0gc2VsZWN0VW5jbGFpbWVkUmV3YXJkcztcbmV4cG9ydHMuc2VsZWN0VW5jbGFpbWVkUmV3YXJkc0J5VHlwZSA9IHNlbGVjdFVuY2xhaW1lZFJld2FyZHNCeVR5cGU7XG5leHBvcnRzLnNlbGVjdFVucmVhZEFtb3VudCA9IHNlbGVjdFVucmVhZEFtb3VudDtcbmV4cG9ydHMuc2VsZWN0VW5yZWFkQnlDaGFubmVsID0gc2VsZWN0VW5yZWFkQnlDaGFubmVsO1xuZXhwb3J0cy5zZWxlY3RVbnJlYWRTdWJzY3JpcHRpb25zID0gc2VsZWN0VW5yZWFkU3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuc2VsZWN0VXBsb2FkQ291bnQgPSBzZWxlY3RVcGxvYWRDb3VudDtcbmV4cG9ydHMuc2VsZWN0VXNlciA9IHNlbGVjdFVzZXI7XG5leHBvcnRzLnNlbGVjdFVzZXJDb3VudHJ5Q29kZSA9IHNlbGVjdFVzZXJDb3VudHJ5Q29kZTtcbmV4cG9ydHMuc2VsZWN0VXNlckVtYWlsID0gc2VsZWN0VXNlckVtYWlsO1xuZXhwb3J0cy5zZWxlY3RVc2VySW52aXRlTmV3RXJyb3JNZXNzYWdlID0gc2VsZWN0VXNlckludml0ZU5ld0Vycm9yTWVzc2FnZTtcbmV4cG9ydHMuc2VsZWN0VXNlckludml0ZU5ld0lzUGVuZGluZyA9IHNlbGVjdFVzZXJJbnZpdGVOZXdJc1BlbmRpbmc7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVSZWZlcnJhbENvZGUgPSBzZWxlY3RVc2VySW52aXRlUmVmZXJyYWxDb2RlO1xuZXhwb3J0cy5zZWxlY3RVc2VySW52aXRlUmVmZXJyYWxMaW5rID0gc2VsZWN0VXNlckludml0ZVJlZmVycmFsTGluaztcbmV4cG9ydHMuc2VsZWN0VXNlckludml0ZVN0YXR1c0ZhaWxlZCA9IHNlbGVjdFVzZXJJbnZpdGVTdGF0dXNGYWlsZWQ7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVTdGF0dXNJc1BlbmRpbmcgPSBzZWxlY3RVc2VySW52aXRlU3RhdHVzSXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RVc2VySW52aXRlZXMgPSBzZWxlY3RVc2VySW52aXRlZXM7XG5leHBvcnRzLnNlbGVjdFVzZXJJbnZpdGVzUmVtYWluaW5nID0gc2VsZWN0VXNlckludml0ZXNSZW1haW5pbmc7XG5leHBvcnRzLnNlbGVjdFVzZXJJc1BlbmRpbmcgPSBzZWxlY3RVc2VySXNQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RVc2VySXNSZXdhcmRBcHByb3ZlZCA9IHNlbGVjdFVzZXJJc1Jld2FyZEFwcHJvdmVkO1xuZXhwb3J0cy5zZWxlY3RVc2VySXNWZXJpZmljYXRpb25DYW5kaWRhdGUgPSBzZWxlY3RVc2VySXNWZXJpZmljYXRpb25DYW5kaWRhdGU7XG5leHBvcnRzLnNlbGVjdFVzZXJQaG9uZSA9IHNlbGVjdFVzZXJQaG9uZTtcbmV4cG9ydHMuc2VsZWN0VXNlclZlcmlmaWVkRW1haWwgPSBzZWxlY3RVc2VyVmVyaWZpZWRFbWFpbDtcbmV4cG9ydHMuc2VsZWN0Vmlld01vZGUgPSBzZWxlY3RWaWV3TW9kZTtcbmV4cG9ydHMuc2VsZWN0WW91VHViZUltcG9ydEVycm9yID0gc2VsZWN0WW91VHViZUltcG9ydEVycm9yO1xuZXhwb3J0cy5zZWxlY3RZb3VUdWJlSW1wb3J0UGVuZGluZyA9IHNlbGVjdFlvdVR1YmVJbXBvcnRQZW5kaW5nO1xuZXhwb3J0cy5zZWxlY3RZb3VUdWJlSW1wb3J0VmlkZW9zQ29tcGxldGUgPSBzZWxlY3RZb3VUdWJlSW1wb3J0VmlkZW9zQ29tcGxldGU7XG5leHBvcnRzLnNlbGVjdFlvdXR1YmVDaGFubmVscyA9IHNlbGVjdFlvdXR1YmVDaGFubmVscztcbmV4cG9ydHMuc2V0U3Vic2NyaXB0aW9uTGF0ZXN0ID0gc2V0U3Vic2NyaXB0aW9uTGF0ZXN0O1xuZXhwb3J0cy5zdGF0c1JlZHVjZXIgPSBzdGF0c1JlZHVjZXI7XG5leHBvcnRzLnN1YnNjcmlwdGlvbnNSZWR1Y2VyID0gc3Vic2NyaXB0aW9ucztcbmV4cG9ydHMuc3luY1JlZHVjZXIgPSBzeW5jUmVkdWNlcjtcbmV4cG9ydHMudXNlclJlZHVjZXIgPSB1c2VyUmVkdWNlcjtcbmV4cG9ydHMudXNlclN0YXRlU3luY01pZGRsZXdhcmUgPSB1c2VyU3RhdGVTeW5jTWlkZGxld2FyZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEhBO0FBMkhBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUE3QkE7QUFqQ0E7QUFDQTtBQWlFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFEQTtBQURBO0FBSUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQXRCQTtBQUFBO0FBQ0E7QUF3QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBREE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBdkJBO0FBd0JBO0FBeEJBO0FBREE7QUFOQTtBQVpBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuREE7QUFEQTtBQXVEQTtBQUNBO0FBQ0E7QUF4RUE7QUFDQTtBQTBFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBVkE7QUFEQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcENBO0FBUEE7QUFEQTtBQXpCQTtBQUNBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBVEE7QUFjQTtBQUNBO0FBQUE7QUFGQTtBQUNBO0FBREE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSEE7QUF6QkE7QUErQkE7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXRDQTtBQTBDQTtBQUFBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFGQTtBQWhEQTtBQXlEQTtBQUFBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUE5RUE7QUFvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUEzRkE7QUFnR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXhHQTtBQTRHQTtBQUNBO0FBREE7QUE1R0E7QUErR0E7QUFDQTtBQURBO0FBL0dBO0FBa0hBO0FBQ0E7QUFDQTtBQUZBO0FBbEhBO0FBc0hBO0FBQ0E7QUFEQTtBQXRIQTtBQXlIQTtBQUNBO0FBREE7QUF6SEE7QUE0SEE7QUFDQTtBQUNBO0FBRkE7QUE1SEE7QUFnSUE7QUFDQTtBQURBO0FBaElBO0FBbUlBO0FBQ0E7QUFEQTtBQW5JQTtBQXNJQTtBQUNBO0FBREE7QUF0SUE7QUF5SUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUpBO0FBQ0E7QUFTQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQXRLQTtBQUNBO0FBMktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUF4Q0E7QUE2Q0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQVRBO0FBV0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFYQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBbkJBO0FBcUJBO0FBMUNBO0FBQ0E7QUE0Q0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFwQkE7QUFzQkE7QUE3QkE7QUErQkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUZBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQUFBO0FBQ0E7QUFnQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUFBO0FBQ0E7QUFZQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUE3Q0E7QUFGQTtBQUFBO0FBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpDQTtBQUNBO0FBQ0E7QUFtQ0E7QUFDQTtBQURBO0FBRUE7QUFGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFKQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFuQkE7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBaEJBO0FBa0JBO0FBQ0E7QUFEQTtBQWxCQTtBQUpBO0FBMkJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUZBO0FBRkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFaQTtBQUpBO0FBd0JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUhBO0FBY0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhCQTtBQURBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQXBCQTtBQUpBO0FBZ0NBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUZBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBVEE7QUFKQTtBQXFCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFUQTtBQURBO0FBYUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUEzQkE7QUFnQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBYkE7QUFjQTtBQWRBO0FBUEE7QUF1QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBZEE7QUF6QkE7QUEwQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBREE7QUFDQTtBQVFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUxBO0FBcEJBO0FBNEJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFQQTtBQVNBO0FBQ0E7QUFmQTtBQWdCQTtBQWhCQTtBQVBBO0FBeUJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFBQTtBQUNBO0FBTUE7QUFSQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBUEE7QUFTQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFmQTtBQUxBO0FBNEJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBZkE7QUFKQTtBQTJCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFpQkE7QUFEQTtBQUNBO0FBakJBO0FBZ0JBO0FBR0E7QUFuQkE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBdEJBO0FBOEJBO0FBQ0E7QUEvQkE7QUFpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQ0E7QUFBQTtBQUFBO0FBdUNBO0FBREE7QUFDQTtBQXZDQTtBQXlDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBbkRBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQW9EQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFDQTtBQXJEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTREQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUFBO0FBQUE7QUFIQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUF2QkE7QUFIQTtBQTRCQTtBQUNBO0FBQ0E7QUFGQTtBQTVCQTtBQUxBO0FBdUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBREE7QUFNQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFGQTtBQVZBO0FBSkE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFIQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQVZBO0FBSkE7QUFzQkE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBTkE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcEJBO0FBQ0E7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFNQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBREE7QUFGQTtBQUNBO0FBeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBQ0E7QUFvQkE7QUFwRkE7QUFzRkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQWpCQTtBQW1CQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBREE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFEQTtBQUNBO0FBU0E7QUFyQkE7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQTdCQTtBQUFBO0FBQ0E7QUFDQTtBQXFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFsQ0E7QUFBQTtBQUNBO0FBQ0E7QUF5Q0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFDQTtBQUlBO0FBQ0E7QUFOQTtBQUNBO0FBQ0E7QUFRQTtBQUFBO0FBVkE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUF6QkE7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBM0NBO0FBWkE7QUFBQTtBQUNBO0FBZ0VBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFoQ0E7QUFBQTtBQUNBO0FBaUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFEQTtBQUdBO0FBbkJBO0FBQUE7QUFDQTtBQW9CQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBQUE7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBUEE7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFqQ0E7QUFDQTtBQUNBO0FBb0NBO0FBdENBO0FBd0NBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQS9DQTtBQWlEQTtBQUNBO0FBREE7QUFqREE7QUFsQkE7QUFBQTtBQUNBO0FBdUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFNQTtBQUFBO0FBQUE7QUFaQTtBQUFBO0FBQ0E7QUFhQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQUpBO0FBQUE7QUFDQTtBQVdBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQURBO0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFEQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBUUE7QUFwQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQWZBO0FBQ0E7QUF1QkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBSEE7QUFDQTtBQVdBO0FBekNBO0FBMkNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBZkE7QUFDQTtBQXNCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBSEE7QUFDQTtBQVVBO0FBdkNBO0FBeUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRkE7QUFEQTtBQUNBO0FBUUE7QUFwQ0E7QUFzQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQURBO0FBQ0E7QUFRQTtBQTFCQTtBQThCQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUpBO0FBWUE7QUFDQTtBQUNBO0FBRkE7QUFaQTtBQUpBO0FBQUE7QUFDQTtBQXFCQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUpBO0FBWUE7QUFDQTtBQUNBO0FBRkE7QUFaQTtBQUpBO0FBQUE7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBQ0E7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFWQTtBQURBO0FBY0E7QUFDQTtBQUNBO0FBcENBO0FBc0NBO0FBQ0E7QUFDQTtBQXhDQTtBQUpBO0FBK0NBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBVEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBaEJBO0FBSkE7QUE0QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQUNBO0FBQ0E7QUFNQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFnQkE7QUFDQTtBQURBO0FBaEJBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBL0JBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQUE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBeERBO0FBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFUQTtBQVdBO0FBakhBO0FBTEE7QUF5SEE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQU1BO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBaEJBO0FBSkE7QUE0QkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBVEE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBZkE7QUFEQTtBQUpBO0FBOEJBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUpBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFKQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFiQTtBQWNBO0FBQ0E7QUFEQTtBQWRBO0FBaUJBO0FBQ0E7QUFDQTtBQW5CQTtBQUZBO0FBMEJBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBYkE7QUFDQTtBQW1CQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFKQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBT0E7QUFBQTtBQUFBO0FBQ0E7QUFSQTtBQVlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFsQkE7QUFDQTtBQW9CQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBTEE7QUFDQTtBQU9BO0FBQUE7QUFJQTtBQUpBO0FBQ0E7QUFNQTtBQUFBO0FBSUE7QUFDQTtBQURBO0FBSkE7QUFDQTtBQVFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBCQTtBQUNBO0FBc0JBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBQ0E7QUFTQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBQ0E7QUFTQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBQ0E7QUFTQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUlBO0FBQ0E7QUFEQTtBQUpBO0FBQ0E7QUFRQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBQUE7QUFDQTtBQU9BO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQ0E7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFDQTtBQVVBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVBBO0FBV0E7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQXBCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFUQTtBQWVBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFwQkE7QUE0QkE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQVJBO0FBYUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQWpCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBREE7QUFEQTtBQUlBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFUQTtBQWVBO0FBQ0E7QUFEQTtBQWZBO0FBa0JBO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUF2QkE7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFJQTtBQUNBO0FBREE7QUFKQTtBQU9BO0FBQUE7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBZkE7QUFvQkE7QUFDQTtBQURBO0FBcEJBO0FBdUJBO0FBQ0E7QUFEQTtBQXZCQTtBQTBCQTtBQUFBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQWxDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFhQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFBQTtBQUNBO0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUFBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUNBO0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQ0E7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUlBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUF6QkE7QUFDQTtBQTZCQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lbryinc/dist/bundle.es.js\n"); - -/***/ }), - -/***/ "./node_modules/proxy-polyfill/proxy.js": -/*!**********************************************!*\ - !*** ./node_modules/proxy-polyfill/proxy.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/* WEBPACK VAR INJECTION */(function(global) {/*\n * Copyright 2016 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n(function (scope) {\n if (scope['Proxy']) {\n return;\n }\n\n var lastRevokeFn = null;\n /**\n * @param {*} o\n * @return {boolean} whether this is probably a (non-null) Object\n */\n\n function isObject(o) {\n return o ? _typeof(o) == 'object' || typeof o == 'function' : false;\n }\n /**\n * @constructor\n * @param {!Object} target\n * @param {{apply, construct, get, set}} handler\n */\n\n\n scope.Proxy = function (target, handler) {\n if (!isObject(target) || !isObject(handler)) {\n throw new TypeError('Cannot create proxy with a non-object as target or handler');\n } // Construct revoke function, and set lastRevokeFn so that Proxy.revocable can steal it.\n // The caller might get the wrong revoke function if a user replaces or wraps scope.Proxy\n // to call itself, but that seems unlikely especially when using the polyfill.\n\n\n var throwRevoked = function throwRevoked() {};\n\n lastRevokeFn = function lastRevokeFn() {\n throwRevoked = function throwRevoked(trap) {\n throw new TypeError(\"Cannot perform '\".concat(trap, \"' on a proxy that has been revoked\"));\n };\n }; // Fail on unsupported traps: Chrome doesn't do this, but ensure that users of the polyfill\n // are a bit more careful. Copy the internal parts of handler to prevent user changes.\n\n\n var unsafeHandler = handler;\n handler = {\n 'get': null,\n 'set': null,\n 'apply': null,\n 'construct': null\n };\n\n for (var k in unsafeHandler) {\n if (!(k in handler)) {\n throw new TypeError(\"Proxy polyfill does not support trap '\".concat(k, \"'\"));\n }\n\n handler[k] = unsafeHandler[k];\n }\n\n if (typeof unsafeHandler == 'function') {\n // Allow handler to be a function (which has an 'apply' method). This matches what is\n // probably a bug in native versions. It treats the apply call as a trap to be configured.\n handler.apply = unsafeHandler.apply.bind(unsafeHandler);\n } // Define proxy as this, or a Function (if either it's callable, or apply is set).\n // TODO(samthor): Closure compiler doesn't know about 'construct', attempts to rename it.\n\n\n var proxy = this;\n var isMethod = false;\n var targetIsFunction = typeof target == 'function';\n\n if (handler.apply || handler['construct'] || targetIsFunction) {\n proxy = function Proxy() {\n var usingNew = this && this.constructor === proxy;\n throwRevoked(usingNew ? 'construct' : 'apply');\n\n if (usingNew && handler['construct']) {\n return handler['construct'].call(this, target, arguments);\n } else if (!usingNew && handler.apply) {\n return handler.apply(target, this, arguments);\n } else if (targetIsFunction) {\n // since the target was a function, fallback to calling it directly.\n if (usingNew) {\n // inspired by answers to https://stackoverflow.com/q/1606797\n var all = Array.prototype.slice.call(arguments);\n all.unshift(target); // pass class as first arg to constructor, although irrelevant\n // nb. cast to convince Closure compiler that this is a constructor\n\n var f =\n /** @type {!Function} */\n target.bind.apply(target, all);\n return new f();\n }\n\n return target.apply(this, arguments);\n }\n\n throw new TypeError(usingNew ? 'not a constructor' : 'not a function');\n };\n\n isMethod = true;\n } // Create default getters/setters. Create different code paths as handler.get/handler.set can't\n // change after creation.\n\n\n var getter = handler.get ? function (prop) {\n throwRevoked('get');\n return handler.get(this, prop, proxy);\n } : function (prop) {\n throwRevoked('get');\n return this[prop];\n };\n var setter = handler.set ? function (prop, value) {\n throwRevoked('set');\n var status = handler.set(this, prop, value, proxy);\n\n if (!status) {// TODO(samthor): If the calling code is in strict mode, throw TypeError.\n // It's (sometimes) possible to work this out, if this code isn't strict- try to load the\n // callee, and if it's available, that code is non-strict. However, this isn't exhaustive.\n }\n } : function (prop, value) {\n throwRevoked('set');\n this[prop] = value;\n }; // Clone direct properties (i.e., not part of a prototype).\n\n var propertyNames = Object.getOwnPropertyNames(target);\n var propertyMap = {};\n propertyNames.forEach(function (prop) {\n if (isMethod && prop in proxy) {\n return; // ignore properties already here, e.g. 'bind', 'prototype' etc\n }\n\n var real = Object.getOwnPropertyDescriptor(target, prop);\n var desc = {\n enumerable: !!real.enumerable,\n get: getter.bind(target, prop),\n set: setter.bind(target, prop)\n };\n Object.defineProperty(proxy, prop, desc);\n propertyMap[prop] = true;\n }); // Set the prototype, or clone all prototype methods (always required if a getter is provided).\n // TODO(samthor): We don't allow prototype methods to be set. It's (even more) awkward.\n // An alternative here would be to _just_ clone methods to keep behavior consistent.\n\n var prototypeOk = true;\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(proxy, Object.getPrototypeOf(target));\n } else if (proxy.__proto__) {\n proxy.__proto__ = target.__proto__;\n } else {\n prototypeOk = false;\n }\n\n if (handler.get || !prototypeOk) {\n for (var _k in target) {\n if (propertyMap[_k]) {\n continue;\n }\n\n Object.defineProperty(proxy, _k, {\n get: getter.bind(target, _k)\n });\n }\n } // The Proxy polyfill cannot handle adding new properties. Seal the target and proxy.\n\n\n Object.seal(target);\n Object.seal(proxy);\n return proxy; // nb. if isMethod is true, proxy != this\n };\n\n scope.Proxy.revocable = function (target, handler) {\n var p = new scope.Proxy(target, handler);\n return {\n 'proxy': p,\n 'revoke': lastRevokeFn\n };\n };\n\n scope.Proxy['revocable'] = scope.Proxy.revocable;\n scope['Proxy'] = scope.Proxy;\n})( true && module['exports'] ? global : window);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ \"../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJveHktcG9seWZpbGwvcHJveHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJveHktcG9seWZpbGwvcHJveHkuanM/YmJkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVFxuICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlXG4gKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlclxuICogdGhlIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbihmdW5jdGlvbihzY29wZSkge1xuICBpZiAoc2NvcGVbJ1Byb3h5J10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGxhc3RSZXZva2VGbiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoaXMgaXMgcHJvYmFibHkgYSAobm9uLW51bGwpIE9iamVjdFxuICAgKi9cbiAgZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICAgIHJldHVybiBvID8gKHR5cGVvZiBvID09ICdvYmplY3QnIHx8IHR5cGVvZiBvID09ICdmdW5jdGlvbicpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7IU9iamVjdH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7e2FwcGx5LCBjb25zdHJ1Y3QsIGdldCwgc2V0fX0gaGFuZGxlclxuICAgKi9cbiAgc2NvcGUuUHJveHkgPSBmdW5jdGlvbih0YXJnZXQsIGhhbmRsZXIpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgfHwgIWlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIHByb3h5IHdpdGggYSBub24tb2JqZWN0IGFzIHRhcmdldCBvciBoYW5kbGVyJyk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IHJldm9rZSBmdW5jdGlvbiwgYW5kIHNldCBsYXN0UmV2b2tlRm4gc28gdGhhdCBQcm94eS5yZXZvY2FibGUgY2FuIHN0ZWFsIGl0LlxuICAgIC8vIFRoZSBjYWxsZXIgbWlnaHQgZ2V0IHRoZSB3cm9uZyByZXZva2UgZnVuY3Rpb24gaWYgYSB1c2VyIHJlcGxhY2VzIG9yIHdyYXBzIHNjb3BlLlByb3h5XG4gICAgLy8gdG8gY2FsbCBpdHNlbGYsIGJ1dCB0aGF0IHNlZW1zIHVubGlrZWx5IGVzcGVjaWFsbHkgd2hlbiB1c2luZyB0aGUgcG9seWZpbGwuXG4gICAgbGV0IHRocm93UmV2b2tlZCA9IGZ1bmN0aW9uKCkge307XG4gICAgbGFzdFJldm9rZUZuID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvd1Jldm9rZWQgPSBmdW5jdGlvbih0cmFwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENhbm5vdCBwZXJmb3JtICcke3RyYXB9JyBvbiBhIHByb3h5IHRoYXQgaGFzIGJlZW4gcmV2b2tlZGApO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgLy8gRmFpbCBvbiB1bnN1cHBvcnRlZCB0cmFwczogQ2hyb21lIGRvZXNuJ3QgZG8gdGhpcywgYnV0IGVuc3VyZSB0aGF0IHVzZXJzIG9mIHRoZSBwb2x5ZmlsbFxuICAgIC8vIGFyZSBhIGJpdCBtb3JlIGNhcmVmdWwuIENvcHkgdGhlIGludGVybmFsIHBhcnRzIG9mIGhhbmRsZXIgdG8gcHJldmVudCB1c2VyIGNoYW5nZXMuXG4gICAgbGV0IHVuc2FmZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSB7J2dldCc6IG51bGwsICdzZXQnOiBudWxsLCAnYXBwbHknOiBudWxsLCAnY29uc3RydWN0JzogbnVsbH07XG4gICAgZm9yIChsZXQgayBpbiB1bnNhZmVIYW5kbGVyKSB7XG4gICAgICBpZiAoIShrIGluIGhhbmRsZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFByb3h5IHBvbHlmaWxsIGRvZXMgbm90IHN1cHBvcnQgdHJhcCAnJHtrfSdgKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXJba10gPSB1bnNhZmVIYW5kbGVyW2tdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHVuc2FmZUhhbmRsZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWxsb3cgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uICh3aGljaCBoYXMgYW4gJ2FwcGx5JyBtZXRob2QpLiBUaGlzIG1hdGNoZXMgd2hhdCBpc1xuICAgICAgLy8gcHJvYmFibHkgYSBidWcgaW4gbmF0aXZlIHZlcnNpb25zLiBJdCB0cmVhdHMgdGhlIGFwcGx5IGNhbGwgYXMgYSB0cmFwIHRvIGJlIGNvbmZpZ3VyZWQuXG4gICAgICBoYW5kbGVyLmFwcGx5ID0gdW5zYWZlSGFuZGxlci5hcHBseS5iaW5kKHVuc2FmZUhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSBwcm94eSBhcyB0aGlzLCBvciBhIEZ1bmN0aW9uIChpZiBlaXRoZXIgaXQncyBjYWxsYWJsZSwgb3IgYXBwbHkgaXMgc2V0KS5cbiAgICAvLyBUT0RPKHNhbXRob3IpOiBDbG9zdXJlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyBhYm91dCAnY29uc3RydWN0JywgYXR0ZW1wdHMgdG8gcmVuYW1lIGl0LlxuICAgIGxldCBwcm94eSA9IHRoaXM7XG4gICAgbGV0IGlzTWV0aG9kID0gZmFsc2U7XG4gICAgbGV0IHRhcmdldElzRnVuY3Rpb24gPSB0eXBlb2YgdGFyZ2V0ID09ICdmdW5jdGlvbic7XG4gICAgaWYgKGhhbmRsZXIuYXBwbHkgfHwgaGFuZGxlclsnY29uc3RydWN0J10gfHwgdGFyZ2V0SXNGdW5jdGlvbikge1xuICAgICAgcHJveHkgPSBmdW5jdGlvbiBQcm94eSgpIHtcbiAgICAgICAgbGV0IHVzaW5nTmV3ID0gKHRoaXMgJiYgdGhpcy5jb25zdHJ1Y3RvciA9PT0gcHJveHkpO1xuICAgICAgICB0aHJvd1Jldm9rZWQodXNpbmdOZXcgPyAnY29uc3RydWN0JyA6ICdhcHBseScpO1xuXG4gICAgICAgIGlmICh1c2luZ05ldyAmJiBoYW5kbGVyWydjb25zdHJ1Y3QnXSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyWydjb25zdHJ1Y3QnXS5jYWxsKHRoaXMsIHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBlbHNlIGlmICghdXNpbmdOZXcgJiYgaGFuZGxlci5hcHBseSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLmFwcGx5KHRhcmdldCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRJc0Z1bmN0aW9uKSB7XG4gICAgICAgICAgLy8gc2luY2UgdGhlIHRhcmdldCB3YXMgYSBmdW5jdGlvbiwgZmFsbGJhY2sgdG8gY2FsbGluZyBpdCBkaXJlY3RseS5cbiAgICAgICAgICBpZiAodXNpbmdOZXcpIHtcbiAgICAgICAgICAgIC8vIGluc3BpcmVkIGJ5IGFuc3dlcnMgdG8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE2MDY3OTdcbiAgICAgICAgICAgIGxldCBhbGwgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgYWxsLnVuc2hpZnQodGFyZ2V0KTsgIC8vIHBhc3MgY2xhc3MgYXMgZmlyc3QgYXJnIHRvIGNvbnN0cnVjdG9yLCBhbHRob3VnaCBpcnJlbGV2YW50XG4gICAgICAgICAgICAvLyBuYi4gY2FzdCB0byBjb252aW5jZSBDbG9zdXJlIGNvbXBpbGVyIHRoYXQgdGhpcyBpcyBhIGNvbnN0cnVjdG9yXG4gICAgICAgICAgICBsZXQgZiA9IC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyAodGFyZ2V0LmJpbmQuYXBwbHkodGFyZ2V0LCBhbGwpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcih1c2luZ05ldyA/ICdub3QgYSBjb25zdHJ1Y3RvcicgOiAnbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH07XG4gICAgICBpc01ldGhvZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGRlZmF1bHQgZ2V0dGVycy9zZXR0ZXJzLiBDcmVhdGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYXMgaGFuZGxlci5nZXQvaGFuZGxlci5zZXQgY2FuJ3RcbiAgICAvLyBjaGFuZ2UgYWZ0ZXIgY3JlYXRpb24uXG4gICAgbGV0IGdldHRlciA9IGhhbmRsZXIuZ2V0ID8gZnVuY3Rpb24ocHJvcCkge1xuICAgICAgdGhyb3dSZXZva2VkKCdnZXQnKTtcbiAgICAgIHJldHVybiBoYW5kbGVyLmdldCh0aGlzLCBwcm9wLCBwcm94eSk7XG4gICAgfSA6IGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgIHRocm93UmV2b2tlZCgnZ2V0Jyk7XG4gICAgICByZXR1cm4gdGhpc1twcm9wXTtcbiAgICB9O1xuICAgIGxldCBzZXR0ZXIgPSBoYW5kbGVyLnNldCA/IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7XG4gICAgICB0aHJvd1Jldm9rZWQoJ3NldCcpO1xuICAgICAgbGV0IHN0YXR1cyA9IGhhbmRsZXIuc2V0KHRoaXMsIHByb3AsIHZhbHVlLCBwcm94eSk7XG4gICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAvLyBUT0RPKHNhbXRob3IpOiBJZiB0aGUgY2FsbGluZyBjb2RlIGlzIGluIHN0cmljdCBtb2RlLCB0aHJvdyBUeXBlRXJyb3IuXG4gICAgICAgIC8vIEl0J3MgKHNvbWV0aW1lcykgcG9zc2libGUgdG8gd29yayB0aGlzIG91dCwgaWYgdGhpcyBjb2RlIGlzbid0IHN0cmljdC0gdHJ5IHRvIGxvYWQgdGhlXG4gICAgICAgIC8vIGNhbGxlZSwgYW5kIGlmIGl0J3MgYXZhaWxhYmxlLCB0aGF0IGNvZGUgaXMgbm9uLXN0cmljdC4gSG93ZXZlciwgdGhpcyBpc24ndCBleGhhdXN0aXZlLlxuICAgICAgfVxuICAgIH0gOiBmdW5jdGlvbihwcm9wLCB2YWx1ZSkge1xuICAgICAgdGhyb3dSZXZva2VkKCdzZXQnKTtcbiAgICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgLy8gQ2xvbmUgZGlyZWN0IHByb3BlcnRpZXMgKGkuZS4sIG5vdCBwYXJ0IG9mIGEgcHJvdG90eXBlKS5cbiAgICBsZXQgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gICAgbGV0IHByb3BlcnR5TWFwID0ge307XG4gICAgcHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgIGlmIChpc01ldGhvZCAmJiBwcm9wIGluIHByb3h5KSB7XG4gICAgICAgIHJldHVybjsgIC8vIGlnbm9yZSBwcm9wZXJ0aWVzIGFscmVhZHkgaGVyZSwgZS5nLiAnYmluZCcsICdwcm90b3R5cGUnIGV0Y1xuICAgICAgfVxuICAgICAgbGV0IHJlYWwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCk7XG4gICAgICBsZXQgZGVzYyA9IHtcbiAgICAgICAgZW51bWVyYWJsZTogISFyZWFsLmVudW1lcmFibGUsXG4gICAgICAgIGdldDogZ2V0dGVyLmJpbmQodGFyZ2V0LCBwcm9wKSxcbiAgICAgICAgc2V0OiBzZXR0ZXIuYmluZCh0YXJnZXQsIHByb3ApLFxuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcCwgZGVzYyk7XG4gICAgICBwcm9wZXJ0eU1hcFtwcm9wXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSwgb3IgY2xvbmUgYWxsIHByb3RvdHlwZSBtZXRob2RzIChhbHdheXMgcmVxdWlyZWQgaWYgYSBnZXR0ZXIgaXMgcHJvdmlkZWQpLlxuICAgIC8vIFRPRE8oc2FtdGhvcik6IFdlIGRvbid0IGFsbG93IHByb3RvdHlwZSBtZXRob2RzIHRvIGJlIHNldC4gSXQncyAoZXZlbiBtb3JlKSBhd2t3YXJkLlxuICAgIC8vIEFuIGFsdGVybmF0aXZlIGhlcmUgd291bGQgYmUgdG8gX2p1c3RfIGNsb25lIG1ldGhvZHMgdG8ga2VlcCBiZWhhdmlvciBjb25zaXN0ZW50LlxuICAgIGxldCBwcm90b3R5cGVPayA9IHRydWU7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3h5LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSk7XG4gICAgfSBlbHNlIGlmIChwcm94eS5fX3Byb3RvX18pIHtcbiAgICAgIHByb3h5Ll9fcHJvdG9fXyA9IHRhcmdldC5fX3Byb3RvX187XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3RvdHlwZU9rID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChoYW5kbGVyLmdldCB8fCAhcHJvdG90eXBlT2spIHtcbiAgICAgIGZvciAobGV0IGsgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eU1hcFtrXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgaywge2dldDogZ2V0dGVyLmJpbmQodGFyZ2V0LCBrKX0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBQcm94eSBwb2x5ZmlsbCBjYW5ub3QgaGFuZGxlIGFkZGluZyBuZXcgcHJvcGVydGllcy4gU2VhbCB0aGUgdGFyZ2V0IGFuZCBwcm94eS5cbiAgICBPYmplY3Quc2VhbCh0YXJnZXQpO1xuICAgIE9iamVjdC5zZWFsKHByb3h5KTtcblxuICAgIHJldHVybiBwcm94eTsgIC8vIG5iLiBpZiBpc01ldGhvZCBpcyB0cnVlLCBwcm94eSAhPSB0aGlzXG4gIH07XG5cbiAgc2NvcGUuUHJveHkucmV2b2NhYmxlID0gZnVuY3Rpb24odGFyZ2V0LCBoYW5kbGVyKSB7XG4gICAgbGV0IHAgPSBuZXcgc2NvcGUuUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcbiAgICByZXR1cm4geydwcm94eSc6IHAsICdyZXZva2UnOiBsYXN0UmV2b2tlRm59O1xuICB9O1xuXG4gIHNjb3BlLlByb3h5WydyZXZvY2FibGUnXSA9IHNjb3BlLlByb3h5LnJldm9jYWJsZTtcbiAgc2NvcGVbJ1Byb3h5J10gPSBzY29wZS5Qcm94eTtcbn0pKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddID8gZ2xvYmFsIDogd2luZG93KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQVZBO0FBZ0JBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUE1QkE7QUFnQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFwQkE7QUFDQTtBQXFCQTtBQTNEQTtBQStEQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFqRkE7QUFDQTtBQW9GQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFsR0E7QUFzR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQXRIQTtBQUNBO0FBQ0E7QUF3SEE7QUFDQTtBQUVBO0FBN0hBO0FBQ0E7QUErSEE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUF6SkE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/proxy-polyfill/proxy.js\n"); - -/***/ }), - -/***/ "./node_modules/reselect/lib/index.js": -/*!********************************************!*\ - !*** ./node_modules/reselect/lib/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\n\nfunction defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n var lastArgs = null;\n var lastResult = null; // we reference arguments instead of spreading them for performance reasons\n\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return _typeof(dep);\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = defaultMemoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n return memoizedResultFunc.apply(null, params);\n });\n selector.resultFunc = resultFunc;\n\n selector.recomputations = function () {\n return recomputations;\n };\n\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n\n return selector;\n };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (_typeof(selectors) !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + _typeof(selectors)));\n }\n\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Jlc2VsZWN0L2xpYi9pbmRleC5qcz9hNWU4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdE1lbW9pemUgPSBkZWZhdWx0TWVtb2l6ZTtcbmV4cG9ydHMuY3JlYXRlU2VsZWN0b3JDcmVhdG9yID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yO1xuZXhwb3J0cy5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3IgPSBjcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3I7XG5mdW5jdGlvbiBkZWZhdWx0RXF1YWxpdHlDaGVjayhhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBhcmVBcmd1bWVudHNTaGFsbG93bHlFcXVhbChlcXVhbGl0eUNoZWNrLCBwcmV2LCBuZXh0KSB7XG4gIGlmIChwcmV2ID09PSBudWxsIHx8IG5leHQgPT09IG51bGwgfHwgcHJldi5sZW5ndGggIT09IG5leHQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRG8gdGhpcyBpbiBhIGZvciBsb29wIChhbmQgbm90IGEgYGZvckVhY2hgIG9yIGFuIGBldmVyeWApIHNvIHdlIGNhbiBkZXRlcm1pbmUgZXF1YWxpdHkgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbiAgdmFyIGxlbmd0aCA9IHByZXYubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFlcXVhbGl0eUNoZWNrKHByZXZbaV0sIG5leHRbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRNZW1vaXplKGZ1bmMpIHtcbiAgdmFyIGVxdWFsaXR5Q2hlY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGRlZmF1bHRFcXVhbGl0eUNoZWNrO1xuXG4gIHZhciBsYXN0QXJncyA9IG51bGw7XG4gIHZhciBsYXN0UmVzdWx0ID0gbnVsbDtcbiAgLy8gd2UgcmVmZXJlbmNlIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHNwcmVhZGluZyB0aGVtIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFhcmVBcmd1bWVudHNTaGFsbG93bHlFcXVhbChlcXVhbGl0eUNoZWNrLCBsYXN0QXJncywgYXJndW1lbnRzKSkge1xuICAgICAgLy8gYXBwbHkgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGxhc3RSZXN1bHQgPSBmdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhmdW5jcykge1xuICB2YXIgZGVwZW5kZW5jaWVzID0gQXJyYXkuaXNBcnJheShmdW5jc1swXSkgPyBmdW5jc1swXSA6IGZ1bmNzO1xuXG4gIGlmICghZGVwZW5kZW5jaWVzLmV2ZXJ5KGZ1bmN0aW9uIChkZXApIHtcbiAgICByZXR1cm4gdHlwZW9mIGRlcCA9PT0gJ2Z1bmN0aW9uJztcbiAgfSkpIHtcbiAgICB2YXIgZGVwZW5kZW5jeVR5cGVzID0gZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGRlcDtcbiAgICB9KS5qb2luKCcsICcpO1xuICAgIHRocm93IG5ldyBFcnJvcignU2VsZWN0b3IgY3JlYXRvcnMgZXhwZWN0IGFsbCBpbnB1dC1zZWxlY3RvcnMgdG8gYmUgZnVuY3Rpb25zLCAnICsgKCdpbnN0ZWFkIHJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdHlwZXM6IFsnICsgZGVwZW5kZW5jeVR5cGVzICsgJ10nKSk7XG4gIH1cblxuICByZXR1cm4gZGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvckNyZWF0b3IobWVtb2l6ZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWVtb2l6ZU9wdGlvbnMgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbWVtb2l6ZU9wdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGZ1bmNzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdmFyIHJlY29tcHV0YXRpb25zID0gMDtcbiAgICB2YXIgcmVzdWx0RnVuYyA9IGZ1bmNzLnBvcCgpO1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBnZXREZXBlbmRlbmNpZXMoZnVuY3MpO1xuXG4gICAgdmFyIG1lbW9pemVkUmVzdWx0RnVuYyA9IG1lbW9pemUuYXBwbHkodW5kZWZpbmVkLCBbZnVuY3Rpb24gKCkge1xuICAgICAgcmVjb21wdXRhdGlvbnMrKztcbiAgICAgIC8vIGFwcGx5IGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHNwcmVhZGluZyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICByZXR1cm4gcmVzdWx0RnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1dLmNvbmNhdChtZW1vaXplT3B0aW9ucykpO1xuXG4gICAgLy8gSWYgYSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMgd2UgZG9uJ3QgbmVlZCB0byB0cmF2ZXJzZSBvdXIgZGVwZW5kZW5jaWVzIGFnYWluLlxuICAgIHZhciBzZWxlY3RvciA9IGRlZmF1bHRNZW1vaXplKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXTtcbiAgICAgIHZhciBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGFwcGx5IGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHNwcmVhZGluZyBhbmQgbXV0YXRlIGEgbG9jYWwgbGlzdCBvZiBwYXJhbXMgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICBwYXJhbXMucHVzaChkZXBlbmRlbmNpZXNbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHNwcmVhZGluZyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICByZXR1cm4gbWVtb2l6ZWRSZXN1bHRGdW5jLmFwcGx5KG51bGwsIHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBzZWxlY3Rvci5yZXN1bHRGdW5jID0gcmVzdWx0RnVuYztcbiAgICBzZWxlY3Rvci5yZWNvbXB1dGF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZWNvbXB1dGF0aW9ucztcbiAgICB9O1xuICAgIHNlbGVjdG9yLnJlc2V0UmVjb21wdXRhdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVjb21wdXRhdGlvbnMgPSAwO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9O1xufVxuXG52YXIgY3JlYXRlU2VsZWN0b3IgPSBleHBvcnRzLmNyZWF0ZVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yKGRlZmF1bHRNZW1vaXplKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHNlbGVjdG9ycykge1xuICB2YXIgc2VsZWN0b3JDcmVhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBjcmVhdGVTZWxlY3RvcjtcblxuICBpZiAodHlwZW9mIHNlbGVjdG9ycyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyZWF0ZVN0cnVjdHVyZWRTZWxlY3RvciBleHBlY3RzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCAnICsgKCd3aGVyZSBlYWNoIHByb3BlcnR5IGlzIGEgc2VsZWN0b3IsIGluc3RlYWQgcmVjZWl2ZWQgYSAnICsgdHlwZW9mIHNlbGVjdG9ycykpO1xuICB9XG4gIHZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMoc2VsZWN0b3JzKTtcbiAgcmV0dXJuIHNlbGVjdG9yQ3JlYXRvcihvYmplY3RLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yc1trZXldO1xuICB9KSwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHZhbHVlc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChjb21wb3NpdGlvbiwgdmFsdWUsIGluZGV4KSB7XG4gICAgICBjb21wb3NpdGlvbltvYmplY3RLZXlzW2luZGV4XV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBjb21wb3NpdGlvbjtcbiAgICB9LCB7fSk7XG4gIH0pO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBUUE7QUFWQTtBQWFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7QUFwQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQVBBO0FBWUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/reselect/lib/index.js\n"); - -/***/ }), - -/***/ "./node_modules/uuid/lib/bytesToUuid.js": -/*!**********************************************!*\ - !*** ./node_modules/uuid/lib/bytesToUuid.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\n\nmodule.exports = bytesToUuid;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9saWIvYnl0ZXNUb1V1aWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXVpZC9saWIvYnl0ZXNUb1V1aWQuanM/MjM2NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7OztBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/uuid/lib/bytesToUuid.js\n"); - -/***/ }), - -/***/ "./node_modules/uuid/lib/rng-browser.js": -/*!**********************************************!*\ - !*** ./node_modules/uuid/lib/rng-browser.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9saWIvcm5nLWJyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXVpZC9saWIvcm5nLWJyb3dzZXIuanM/ZTFmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG9cbi8vIGltcGxlbWVudGF0aW9uLiBBbHNvLCBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gb24gSUUxMS5cbnZhciBnZXRSYW5kb21WYWx1ZXMgPSAodHlwZW9mKGNyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSk7XG5cbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufSBlbHNlIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgcm5kcyA9IG5ldyBBcnJheSgxNik7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUpBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/uuid/lib/rng-browser.js\n"); - -/***/ }), - -/***/ "./node_modules/uuid/v4.js": -/*!*********************************!*\ - !*** ./node_modules/uuid/v4.js ***! - \*********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var rng = __webpack_require__(/*! ./lib/rng */ \"./node_modules/uuid/lib/rng-browser.js\");\n\nvar bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ \"./node_modules/uuid/lib/bytesToUuid.js\");\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dWlkL3Y0LmpzP2M2NGUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/uuid/v4.js\n"); - -/***/ }), - -/***/ "./setup/publish.js": -/*!**************************!*\ - !*** ./setup/publish.js ***! - \**************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(__) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return apiPublishCallViaWeb; });\n/* harmony import */ var _ui_constants_token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ui/constants/token */ \"../ui/constants/token.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lbryinc */ \"./node_modules/lbryinc/dist/bundle.es.js\");\n/* harmony import */ var lbryinc__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lbryinc__WEBPACK_IMPORTED_MODULE_1__);\n/*\n https://api.lbry.tv/api/v1/proxy currently expects publish to consist\n of a multipart/form-data POST request with:\n - 'file' binary\n - 'json_payload' collection of publish params to be passed to the server's sdk.\n */\n\n // A modified version of Lbry.apiCall that allows\n// to perform calling methods at arbitrary urls\n// and pass form file fields\n\nfunction apiPublishCallViaWeb(apiCall, connectionString, token, method, params, resolve, reject) {\n var filePath = params.file_path;\n\n if (!filePath) {\n return apiCall(method, params, resolve, reject);\n }\n\n var counter = new Date().getTime();\n var fileField = filePath; // Putting a dummy value here, the server is going to process the POSTed file\n // and set the file_path itself\n\n params.file_path = '__POST_FILE__';\n var jsonPayload = JSON.stringify({\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: counter\n });\n var body = new FormData();\n body.append('file', fileField);\n body.append('json_payload', jsonPayload);\n\n function makeRequest(connectionString, method, token, body, params) {\n return new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open(method, connectionString);\n xhr.setRequestHeader(_ui_constants_token__WEBPACK_IMPORTED_MODULE_0__[\"X_LBRY_AUTH_TOKEN\"], token);\n xhr.responseType = 'json';\n\n xhr.upload.onprogress = function (e) {\n var percentComplete = Math.ceil(e.loaded / e.total * 100);\n window.store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateUploadProgress\"])(percentComplete, params, xhr));\n };\n\n xhr.onload = function () {\n window.store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateUploadProgress\"])(undefined, params));\n resolve(xhr);\n };\n\n xhr.onerror = function () {\n window.store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateUploadProgress\"])(undefined, params));\n reject(new Error(__('There was a problem with your upload')));\n };\n\n xhr.onabort = function () {\n window.store.dispatch(Object(lbryinc__WEBPACK_IMPORTED_MODULE_1__[\"doUpdateUploadProgress\"])(undefined, params));\n };\n\n xhr.send(body);\n });\n }\n\n return makeRequest(connectionString, 'POST', token, body, params).then(function (xhr) {\n var error;\n\n if (xhr && xhr.response) {\n if (xhr.status >= 200 && xhr.status < 300 && !xhr.response.error) {\n return resolve(xhr.response.result);\n } else if (xhr.response.error) {\n error = new Error(xhr.response.error.message);\n } else {\n error = new Error(__('Upload likely timed out. Try a smaller file while we work on this.'));\n }\n }\n\n if (error) {\n return Promise.reject(error);\n }\n })[\"catch\"](reject);\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! i18n.js */ \"../ui/i18n.js\")[\"__\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zZXR1cC9wdWJsaXNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc2V0dXAvcHVibGlzaC5qcz80ODYyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vKlxuICBodHRwczovL2FwaS5sYnJ5LnR2L2FwaS92MS9wcm94eSBjdXJyZW50bHkgZXhwZWN0cyBwdWJsaXNoIHRvIGNvbnNpc3RcbiAgIG9mIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIHJlcXVlc3Qgd2l0aDpcbiAgICAtICdmaWxlJyBiaW5hcnlcbiAgICAtICdqc29uX3BheWxvYWQnIGNvbGxlY3Rpb24gb2YgcHVibGlzaCBwYXJhbXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIncyBzZGsuXG4gKi9cbmltcG9ydCB7IFhfTEJSWV9BVVRIX1RPS0VOIH0gZnJvbSAnLi4vLi4vdWkvY29uc3RhbnRzL3Rva2VuJztcbmltcG9ydCB7IGRvVXBkYXRlVXBsb2FkUHJvZ3Jlc3MgfSBmcm9tICdsYnJ5aW5jJztcblxuLy8gQSBtb2RpZmllZCB2ZXJzaW9uIG9mIExicnkuYXBpQ2FsbCB0aGF0IGFsbG93c1xuLy8gdG8gcGVyZm9ybSBjYWxsaW5nIG1ldGhvZHMgYXQgYXJiaXRyYXJ5IHVybHNcbi8vIGFuZCBwYXNzIGZvcm0gZmlsZSBmaWVsZHNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwaVB1Ymxpc2hDYWxsVmlhV2ViKFxuICBhcGlDYWxsOiBhbnkgPT4gdm9pZCxcbiAgY29ubmVjdGlvblN0cmluZzogc3RyaW5nLFxuICB0b2tlbjogc3RyaW5nLFxuICBtZXRob2Q6IHN0cmluZyxcbiAgcGFyYW1zOiB7IGZpbGVfcGF0aDogc3RyaW5nIH0sXG4gIHJlc29sdmU6IEZ1bmN0aW9uLFxuICByZWplY3Q6IEZ1bmN0aW9uXG4pIHtcbiAgY29uc3QgeyBmaWxlX3BhdGg6IGZpbGVQYXRoIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFmaWxlUGF0aCkge1xuICAgIHJldHVybiBhcGlDYWxsKG1ldGhvZCwgcGFyYW1zLCByZXNvbHZlLCByZWplY3QpO1xuICB9XG5cbiAgY29uc3QgY291bnRlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICBjb25zdCBmaWxlRmllbGQgPSBmaWxlUGF0aDtcblxuICAvLyBQdXR0aW5nIGEgZHVtbXkgdmFsdWUgaGVyZSwgdGhlIHNlcnZlciBpcyBnb2luZyB0byBwcm9jZXNzIHRoZSBQT1NUZWQgZmlsZVxuICAvLyBhbmQgc2V0IHRoZSBmaWxlX3BhdGggaXRzZWxmXG4gIHBhcmFtcy5maWxlX3BhdGggPSAnX19QT1NUX0ZJTEVfXyc7XG5cbiAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAganNvbnJwYzogJzIuMCcsXG4gICAgbWV0aG9kLFxuICAgIHBhcmFtcyxcbiAgICBpZDogY291bnRlcixcbiAgfSk7XG4gIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgYm9keS5hcHBlbmQoJ2ZpbGUnLCBmaWxlRmllbGQpO1xuICBib2R5LmFwcGVuZCgnanNvbl9wYXlsb2FkJywganNvblBheWxvYWQpO1xuXG4gIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KGNvbm5lY3Rpb25TdHJpbmcsIG1ldGhvZCwgdG9rZW4sIGJvZHksIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub3BlbihtZXRob2QsIGNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoWF9MQlJZX0FVVEhfVE9LRU4sIHRva2VuKTtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBlID0+IHtcbiAgICAgICAgbGV0IHBlcmNlbnRDb21wbGV0ZSA9IE1hdGguY2VpbCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHdpbmRvdy5zdG9yZS5kaXNwYXRjaChkb1VwZGF0ZVVwbG9hZFByb2dyZXNzKHBlcmNlbnRDb21wbGV0ZSwgcGFyYW1zLCB4aHIpKTtcbiAgICAgIH07XG4gICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc3RvcmUuZGlzcGF0Y2goZG9VcGRhdGVVcGxvYWRQcm9ncmVzcyh1bmRlZmluZWQsIHBhcmFtcykpO1xuICAgICAgICByZXNvbHZlKHhocik7XG4gICAgICB9O1xuICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zdG9yZS5kaXNwYXRjaChkb1VwZGF0ZVVwbG9hZFByb2dyZXNzKHVuZGVmaW5lZCwgcGFyYW1zKSk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoX18oJ1RoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB5b3VyIHVwbG9hZCcpKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgd2luZG93LnN0b3JlLmRpc3BhdGNoKGRvVXBkYXRlVXBsb2FkUHJvZ3Jlc3ModW5kZWZpbmVkLCBwYXJhbXMpKTtcbiAgICAgIH07XG4gICAgICB4aHIuc2VuZChib2R5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlUmVxdWVzdChjb25uZWN0aW9uU3RyaW5nLCAnUE9TVCcsIHRva2VuLCBib2R5LCBwYXJhbXMpXG4gICAgLnRoZW4oeGhyID0+IHtcbiAgICAgIGxldCBlcnJvcjtcbiAgICAgIGlmICh4aHIgJiYgeGhyLnJlc3BvbnNlKSB7XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwICYmICF4aHIucmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh4aHIucmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmICh4aHIucmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcih4aHIucmVzcG9uc2UuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoX18oJ1VwbG9hZCBsaWtlbHkgdGltZWQgb3V0LiBUcnkgYSBzbWFsbGVyIGZpbGUgd2hpbGUgd2Ugd29yayBvbiB0aGlzLicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChyZWplY3QpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7OztBQU1BO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQVFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBQ0E7QUFFQTtBQXJCQTtBQXVCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWtCQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./setup/publish.js\n"); - -/***/ }), - -/***/ "./stubs/electron.js": -/*!***************************!*\ - !*** ./stubs/electron.js ***! - \***************************/ -/*! exports provided: remote, clipboard, ipcRenderer, isDev */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"remote\", function() { return remote; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clipboard\", function() { return clipboard; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ipcRenderer\", function() { return ipcRenderer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isDev\", function() { return isDev; });\nvar callable = function callable() {\n throw new Error('Need to fix this stub');\n};\n\nvar remote = {\n dialog: {\n showOpenDialog: callable\n },\n getCurrentWindow: callable,\n app: {\n getAppPath: callable,\n getLocale: function getLocale() {\n return 'en';\n }\n },\n BrowserWindow: {\n getFocusedWindow: callable\n },\n Menu: {\n getApplicationMenu: callable,\n buildFromTemplate: function buildFromTemplate() {\n return {\n popup: function popup() {}\n };\n }\n },\n require: callable\n};\nvar clipboard = {\n readText: function readText() {\n return '';\n },\n writeText: function writeText(text) {\n var dummy = document.createElement('textarea');\n document.body.appendChild(dummy);\n dummy.value = text;\n dummy.select();\n document.execCommand('copy');\n document.body.removeChild(dummy);\n }\n};\nvar ipcRenderer = {};\nvar isDev = false;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zdHVicy9lbGVjdHJvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3N0dWJzL2VsZWN0cm9uLmpzP2EyYzciXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY2FsbGFibGUgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcignTmVlZCB0byBmaXggdGhpcyBzdHViJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3RlID0ge1xuICBkaWFsb2c6IHtcbiAgICBzaG93T3BlbkRpYWxvZzogY2FsbGFibGUsXG4gIH0sXG4gIGdldEN1cnJlbnRXaW5kb3c6IGNhbGxhYmxlLFxuICBhcHA6IHtcbiAgICBnZXRBcHBQYXRoOiBjYWxsYWJsZSxcbiAgICBnZXRMb2NhbGU6ICgpID0+ICdlbicsXG4gIH0sXG4gIEJyb3dzZXJXaW5kb3c6IHtcbiAgICBnZXRGb2N1c2VkV2luZG93OiBjYWxsYWJsZSxcbiAgfSxcbiAgTWVudToge1xuICAgIGdldEFwcGxpY2F0aW9uTWVudTogY2FsbGFibGUsXG4gICAgYnVpbGRGcm9tVGVtcGxhdGU6ICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcHVwOiAoKSA9PiB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSxcbiAgcmVxdWlyZTogY2FsbGFibGUsXG59O1xuXG5leHBvcnQgY29uc3QgY2xpcGJvYXJkID0ge1xuICByZWFkVGV4dDogKCkgPT4gJycsXG4gIHdyaXRlVGV4dDogdGV4dCA9PiB7XG4gICAgdmFyIGR1bW15ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGR1bW15KTtcbiAgICBkdW1teS52YWx1ZSA9IHRleHQ7XG4gICAgZHVtbXkuc2VsZWN0KCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGR1bW15KTtcbiAgfSxcbn07XG5leHBvcnQgY29uc3QgaXBjUmVuZGVyZXIgPSB7fTtcblxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gZmFsc2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFJQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQU5BO0FBUUE7QUFwQkE7QUF1QkE7QUFDQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./stubs/electron.js\n"); - -/***/ }), - -/***/ "./stubs/fs.js": -/*!*********************!*\ - !*** ./stubs/fs.js ***! - \*********************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\nfunction logWarning(method) {\n if (NODE_ENV !== 'production') {\n console.error(\"Called fs.\".concat(method, \" on lbry.tv. This should be removed.\"));\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n readFileSync: function readFileSync() {\n logWarning('readFileSync');\n return undefined;\n },\n accessFileSync: function accessFileSync() {\n logWarning('accessFileSync');\n return undefined;\n },\n constants: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zdHVicy9mcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3N0dWJzL2ZzLmpzP2YxNDgiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbG9nV2FybmluZyhtZXRob2QpIHtcbiAgaWYgKE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKGBDYWxsZWQgZnMuJHttZXRob2R9IG9uIGxicnkudHYuIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQuYCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZWFkRmlsZVN5bmM6ICgpID0+IHtcbiAgICBsb2dXYXJuaW5nKCdyZWFkRmlsZVN5bmMnKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LFxuICBhY2Nlc3NGaWxlU3luYzogKCkgPT4ge1xuICAgIGxvZ1dhcm5pbmcoJ2FjY2Vzc0ZpbGVTeW5jJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcbiAgY29uc3RhbnRzOiB7fSxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./stubs/fs.js\n"); - -/***/ }), - -/***/ 0: -/*!******************************!*\ - !*** min-document (ignored) ***! - \******************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9taW4tZG9jdW1lbnQgKGlnbm9yZWQpPzA0NGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyogKGlnbm9yZWQpICovIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n"); - -/***/ }), - -/***/ 1: -/*!**********************!*\ - !*** util (ignored) ***! - \**********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy91dGlsIChpZ25vcmVkKT9jNWVkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIChpZ25vcmVkKSAqLyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n"); - -/***/ }), - -/***/ 2: -/*!**********************!*\ - !*** util (ignored) ***! - \**********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy91dGlsIChpZ25vcmVkKT84OTI1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIChpZ25vcmVkKSAqLyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n"); - -/***/ }) - -/******/ }); \ No newline at end of file diff --git a/lbrytv/dist/public/v1-og.png b/lbrytv/dist/public/v1-og.png deleted file mode 100644 index b514c828b0b158d6fcd3a0589ffd15762f055924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184016 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%0DdrAup@`4ShprLr1~HxA+r&1JV1d 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 S6PcI*0000<MNUMnLSTZ#g9FL{ diff --git a/ui/component/app/view.jsx b/ui/component/app/view.jsx index 02df1a673..36d2121ec 100644 --- a/ui/component/app/view.jsx +++ b/ui/component/app/view.jsx @@ -227,7 +227,6 @@ function App(props: Props) { // Keep this at the end to ensure initial setup effects are run first useEffect(() => { - // Wait for balance to be populated on desktop so we know when we can begin syncing if (!hasSignedIn && hasVerifiedEmail) { signIn(); setHasSignedIn(true); diff --git a/ui/redux/actions/app.js b/ui/redux/actions/app.js index c7fb849f6..c779f2e9c 100644 --- a/ui/redux/actions/app.js +++ b/ui/redux/actions/app.js @@ -47,8 +47,7 @@ import { import { doAuthenticate, doGetSync, doClaimRewardType, rewards as REWARDS } from 'lbryinc'; import { lbrySettings as config, version as appVersion } from 'package.json'; import analytics, { SHARE_INTERNAL } from 'analytics'; -import { doSignOutCleanup, deleteSavedPassword, getSavedPassword, getAuthToken } from 'util/saved-passwords'; -import { X_LBRY_AUTH_TOKEN } from 'constants/token'; +import { doSignOutCleanup, deleteSavedPassword, getSavedPassword } from 'util/saved-passwords'; // @if TARGET='app' const { autoUpdater } = remote.require('electron-updater'); @@ -504,8 +503,6 @@ export function doAnaltyicsPurchaseEvent(fileInfo) { export function doSignIn() { return (dispatch, getState) => { // @if TARGET='web' - const authToken = getAuthToken(); - Lbry.setApiHeader(X_LBRY_AUTH_TOKEN, authToken); dispatch(doBalanceSubscribe()); dispatch(doFetchChannelListMine()); // @endif diff --git a/ui/store.js b/ui/store.js index f323a611a..57f48ce8a 100644 --- a/ui/store.js +++ b/ui/store.js @@ -9,11 +9,12 @@ import thunk from 'redux-thunk'; import { createMemoryHistory, createBrowserHistory } from 'history'; import { routerMiddleware } from 'connected-react-router'; import createRootReducer from './reducers'; -import { buildSharedStateMiddleware, ACTIONS as LBRY_REDUX_ACTIONS, SETTINGS } from 'lbry-redux'; -import { doGetSync, selectUserVerifiedEmail } from 'lbryinc'; -import { getSavedPassword } from 'util/saved-passwords'; +import { Lbry, buildSharedStateMiddleware, ACTIONS as LBRY_REDUX_ACTIONS, SETTINGS } from 'lbry-redux'; +import { LBRYINC_ACTIONS, doGetSync, selectUserVerifiedEmail } from 'lbryinc'; +import { getSavedPassword, getAuthToken } from 'util/saved-passwords'; import { makeSelectClientSetting } from 'redux/selectors/settings'; import { generateInitialUrl } from 'util/url'; +import { X_LBRY_AUTH_TOKEN } from 'constants/token'; function isFunction(object) { return typeof object === 'function'; @@ -159,11 +160,30 @@ const sharedStateCb = ({ dispatch, getState }) => { } }; +const populateAuthTokenHeader = () => { + return next => action => { + if (action.type === LBRYINC_ACTIONS.AUTHENTICATION_SUCCESS) { + const authToken = getAuthToken(); + Lbry.setApiHeader(X_LBRY_AUTH_TOKEN, authToken); + } + + next(action); + }; +}; + const sharedStateMiddleware = buildSharedStateMiddleware(triggerSharedStateActions, sharedStateFilters, sharedStateCb); const rootReducer = createRootReducer(history); const persistedReducer = persistReducer(persistOptions, rootReducer); const bulkThunk = createBulkThunkMiddleware(); -const middleware = [sharedStateMiddleware, routerMiddleware(history), thunk, bulkThunk]; +const middleware = [ + sharedStateMiddleware, + // @if TARGET='web' + populateAuthTokenHeader, + // @endif + routerMiddleware(history), + thunk, + bulkThunk, +]; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const store = createStore( enableBatching(persistedReducer),